%global appLoc serverName;
%let compiled_apploc=/Public/app/dc;
%let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc));
%let sasjs_clickmeservice=clickme;
%let syscc=0;
options ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax;
/* user supplied build vars */
/* user supplied build vars end */
/* system macro dependencies for build process */
%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)
, errds=work.mp_abort_errds
, mode=REGULAR
)/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds;
iftrue='1=1';
length mac $100 msg $5000;
mac=symget('mac');
msg=symget('msg');
run;
data _null_;
abort cancel FILE;
run;
%return;
%end;
%end;
/* Web App Context */
%if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE
%then %do;
options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do;
options nosyntaxcheck;
%end;
%if &mode=INCLUDE %then %do;
%if %sysfunc(exist(&errds))=1 %then %do;
data _null_;
set &errds;
call symputx('iftrue',iftrue,'l');
call symputx('mac',mac,'l');
call symputx('msg',msg,'l');
putlog (_all_)(=);
run;
%if (&iftrue)=0 %then %return;
%end;
%else %do;
%put &sysmacroname: No include errors found;
%return;
%end;
%end;
/* extract log errs / warns, if exist */
%local logloc logline;
%global logmsg; /* capture global messages */
%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;
%else %let logloc=%qsysfunc(getoption(LOG));
proc printto log=log;run;
%let logline=0;
%if %length(&logloc)>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input; putlog _infile_;
i=1;
retain logonce 0;
if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0 then
do;
call symputx('logline',_n_);
logonce+1;
end;
run;
/* capture log including lines BEFORE the err */
%if &logline>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input;
i=1;
stoploop=0;
if _n_ ge &logline-15 and stoploop=0 then do until (i>22);
call symputx('logmsg',catx('\n',symget('logmsg'),_infile_));
input;
i+1;
stoploop=1;
end;
if stoploop=1 then stop;
run;
%end;
%end;
%if %symexist(SYS_JES_JOB_URI) %then %do;
/* setup webout for Viya */
options nobomfile;
%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;
filename _webout temp lrecl=999999 mod;
%end;
%else %do;
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"
name="_webout.json" lrecl=999999 mod;
%end;
%end;
%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;
options nobomfile;
/* set up http header for SASjs Server */
%let fid=%sysfunc(fopen(&fref,A));
%if &fid=0 %then %do;
%put %str(ERR)OR: %sysfunc(sysmsg());
%return;
%end;
%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));
%let rc=%sysfunc(fwrite(&fid));
%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(&fref));
%end;
/* send response in SASjs JSON format */
data _null_;
file _webout mod lrecl=32000 encoding='utf-8';
length msg syswarningtext syserrortext $32767 mode $10 ;
sasdatetime=datetime();
msg=symget('msg');
%if &logline>0 %then %do;
msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg'));
%end;
/* escape the escapes */
msg=tranwrd(msg,'\','\\');
/* escape the quotes */
msg=tranwrd(msg,'"','\"');
/* ditch the CRLFs as chrome complains */
msg=compress(msg,,'kw');
/* quote without quoting the quotes (which are escaped instead) */
msg=cats('"',msg,'"');
if symexist('_debug') then debug=quote(trim(symget('_debug')));
else debug='""';
if symget('sasjsprocessmode')='Stored Program' then mode='SASJS';
if mode ne 'SASJS' then put '>>weboutBEGIN<<';
put '{"SYSDATE" : "' "&SYSDATE" '"';
put ',"SYSTIME" : "' "&SYSTIME" '"';
put ',"sasjsAbort" : [{';
put ' "MSG":' msg ;
put ' ,"MAC": "' "&mac" '"}]';
put ",""SYSUSERID"" : ""&sysuserid"" ";
put ',"_DEBUG":' debug ;
if symexist('_metauser') then do;
_METAUSER=quote(trim(symget('_METAUSER')));
put ",""_METAUSER"": " _METAUSER;
_METAPERSON=quote(trim(symget('_METAPERSON')));
put ',"_METAPERSON": ' _METAPERSON;
end;
if symexist('SYS_JES_JOB_URI') then do;
SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI')));
put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI;
end;
_PROGRAM=quote(trim(resolve(symget('_PROGRAM'))));
put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" ";
syserrortext=cats(symget('syserrortext'));
if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syserrortext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syserrortext)
)))))))))))))!!'"';
end;
else syserrortext=cats('"',syserrortext,'"');
put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" ";
put ",""SYSJOBID"" : ""&sysjobid"" ";
put ",""SYSSCPL"" : ""&sysscpl"" ";
put ",""SYSSITE"" : ""&syssite"" ";
sysvlong=quote(trim(symget('sysvlong')));
put ',"SYSVLONG" : ' sysvlong;
syswarningtext=cats(symget('syswarningtext'));
if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syswarningtext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syswarningtext)
)))))))))))))!!'"';
end;
else syswarningtext=cats('"',syswarningtext,'"');
put ",""SYSWARNINGTEXT"" : " syswarningtext;
put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
put "}" ;
if mode ne 'SASJS' then put '>>weboutEND<<';
run;
%put _all_;
%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;
data _null_;
putlog 'stpsrvset program err and syscc';
rc=stpsrvset('program error', 0);
call symputx("syscc",0,"g");
run;
%if &sysscp=WIN
and 1=0 /* deprecating this logic until we figure out a consistent abort */
and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"
and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;
/* skip approach (below) does not work in windows m6+ envs */
endsas;
%end;
%else %do;
/**
* endsas kills 9.4m3 deployments by orphaning multibridges.
* Abort variants are ungraceful (non zero return code)
* This approach lets SAS run silently until the end :-)
* Caution - fails when called within a %include within a macro
* Use mp_include() to handle this.
*/
filename skip temp;
data _null_;
file skip;
put '%macro skip();';
comment '%mend skip; -> fix lint ';
put '%macro skippy();';
comment '%mend skippy; -> fix lint ';
run;
%inc skip;
%end;
%end;
%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;
/* endsas kills the session making it harder to fetch results */
data _null_;
syswarningtext=symget('syswarningtext');
syserrortext=symget('syserrortext');
abort_msg=symget('msg');
syscc=symget('syscc');
sysuserid=symget('sysuserid');
iftrue=symget('iftrue');
put (_all_)(/=);
call symputx('syscc',0);
abort cancel nolist;
run;
%end;
%else %do;
%abort cancel;
%end;
%end;
%else %do;
%put _all_;
%abort cancel;
%end;
%mend mp_abort;
/** @endcond */
%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);
%local rc fname;
%if &prefix=0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%end;
%else %do;
%local x len;
%let len=%eval(8-%length(&prefix));
%let x=0;
%do x=0 %to &maxtries;
%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);
%if %sysfunc(fileref(&fname)) > 0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%return;
%end;
%end;
%put unable to find available fileref after &maxtries attempts;
%end;
%mend mf_getuniquefileref;
%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
%macro mf_isblank(param
)/*/STORE SOURCE*/;
%sysevalf(%superq(param)=,boolean)
%mend mf_isblank;
%macro mf_mval(var);
%if %symexist(&var) %then %do;
%superq(&var)
%end;
%mend mf_mval;
%macro mf_trimstr(basestr,trimstr);
%local baselen trimlen trimval;
/* return if basestr is shorter than trimstr (or 0) */
%let baselen=%length(%superq(basestr));
%let trimlen=%length(%superq(trimstr));
%if &baselen < &trimlen or &baselen=0 %then %return;
/* obtain the characters from the end of basestr */
%let trimval=%qsubstr(%superq(basestr)
,%length(%superq(basestr))-&trimlen+1
,&trimlen);
/* compare and if matching, chop it off! */
%if %superq(basestr)=%superq(trimstr) %then %do;
%return;
%end;
%else %if %superq(trimval)=%superq(trimstr) %then %do;
%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)
%end;
%else %do;
&basestr
%end;
%mend mf_trimstr;
%macro mf_getplatform(switch
)/*/STORE SOURCE*/;
%local a b c;
%if &switch.NONE=NONE %then %do;
%if %symexist(sasjsprocessmode) %then %do;
%if &sasjsprocessmode=Stored Program %then %do;
SASJS
%return;
%end;
%end;
%if %symexist(sysprocessmode) %then %do;
%if "&sysprocessmode"="SAS Object Server"
or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA
%end;
%else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if &switch=SASSTUDIO %then %do;
/* return the version of SAS Studio else 0 */
%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;
%let a=%mf_mval(_CLIENTVERSION);
%let b=%scan(&a,1,.);
%if %eval(&b >2) %then %do;
&b
%end;
%else 0;
%end;
%else 0;
%end;
%else %if &switch=VIYARESTAPI %then %do;
%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)
%end;
%mend mf_getplatform;
%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)
)/des='ungraceful abort' /*STORE SOURCE*/;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mf_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%abort;
%mend mf_abort;
/** @endcond */
%macro mfv_existfolder(path
)/*/STORE SOURCE*/;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot enter mfv_existfolder.sas with syscc=&syscc
)
%local fref rc;
%let fref=%mf_getuniquefileref();
%if %sysfunc(filename(fref,,filesrvc,folderPath="&path"))=0 %then %do;
1
%let rc=%sysfunc(filename(fref));
%end;
%else %do;
0
%let syscc=0;
%end;
%mend mfv_existfolder;
%macro mv_createfolder(path=
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%if %mfv_existfolder(&path)=1 %then %do;
%put &sysmacroname: &path already exists;
%return;
%end;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
options noquotelenmax;
%local subfolder_cnt; /* determine the number of subfolders */
%let subfolder_cnt=%sysfunc(countw(&path,/));
%local href; /* resource address (none for root) */
%let href="/folders/folders?parentFolderUri=/folders/folders/none";
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%local x newpath subfolder;
%do x=1 %to &subfolder_cnt;
%let subfolder=%scan(&path,&x,%str(/));
%let newpath=&newpath/&subfolder;
%local fname1;
%let fname1=%mf_getuniquefileref();
%put &sysmacroname checking to see if &newpath exists;
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&newpath";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
%mp_abort(
iftrue=(
&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 404
)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%if &mdebug=1 %then %do;
%put &sysmacroname following check to see if &newpath exists:;
%put _local_;
data _null_;
set &fname1;
input;
putlog _infile_;
run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE=200 %then %do;
%*put &sysmacroname &newpath exists so grab the follow on link ;
data _null_;
set &libref1..links;
if rel='createChild' then
call symputx('href',quote(cats("&base_uri",href)),'l');
run;
%end;
%else %if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;
%put &sysmacroname &newpath not found - creating it now;
%local fname2;
%let fname2=%mf_getuniquefileref();
data _null_;
length json $1000;
json=cats("'"
,'{"name":'
,quote(trim(symget('subfolder')))
,',"description":'
,quote("&subfolder, created by &sysmacroname")
,',"type":"folder"}'
,"'"
);
call symputx('json',json,'l');
run;
proc http method='POST'
in=&json
out=&fname2
&oauth_bearer
url=%unquote(%superq(href));
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
'Content-Type'='application/vnd.sas.content.folder+json'
'Accept'='application/vnd.sas.content.folder+json';
run;
%put &=SYS_PROCHTTP_STATUS_CODE;
%put &=SYS_PROCHTTP_STATUS_PHRASE;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%local libref2;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
%put &sysmacroname &newpath now created. Grabbing the follow on link ;
data _null_;
set &libref2..links;
if rel='createChild' then do;
call symputx('href',quote(cats("&base_uri",href)),'l');
&dbg put (_all_)(=);
end;
run;
libname &libref2 clear;
filename &fname2 clear;
%end;
filename &fname1 clear;
libname &libref1 clear;
%end;
%mend mv_createfolder;
%macro mv_deletejes(path=
,name=
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
);
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1)
,mac=&sysmacroname
,msg=%str(name value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%put &sysmacroname: fetching details for &path ;
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&path";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;
%put &sysmacroname: Folder &path NOT FOUND - nothing to delete!;
%return;
%end;
%else %if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%put &sysmacroname: grab the follow on link ;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..links;
if rel='members' then call symputx('mref',quote("&base_uri"!!trim(href)),'l');
run;
/* get the children */
%local fname1a;
%let fname1a=%mf_getuniquefileref();
proc http method='GET' out=&fname1a &oauth_bearer
url=%unquote(%superq(mref));
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%put &=SYS_PROCHTTP_STATUS_CODE;
%local libref1a;
%let libref1a=%mf_getuniquelibref();
libname &libref1a JSON fileref=&fname1a;
%local uri found;
%let found=0;
%put Getting object uri from &libref1a..items;
data _null_;
length contenttype name $1000;
set &libref1a..items;
if contenttype='jobDefinition' and upcase(name)="%upcase(&name)" then do;
call symputx('uri',cats("&base_uri",uri),'l');
call symputx('found',1,'l');
end;
run;
%if &found=0 %then %do;
%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;
%return;
%end;
proc http method="DELETE" url="&uri" &oauth_bearer;
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Accept"="*/*";/**/
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;
data _null_; infile &fname2; input; putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%else %put &sysmacroname: &path/&name successfully deleted;
/* clear refs */
filename &fname1 clear;
libname &libref1 clear;
filename &fname1a clear;
libname &libref1a clear;
%mend mv_deletejes;
%macro mp_base64copy(
inref=0,
outref=0,
action=ENCODE
)/*/STORE SOURCE*/;
%let inref=%upcase(&inref);
%let outref=%upcase(&outref);
%let action=%upcase(&action);
%local infound outfound;
%let infound=0;
%let outfound=0;
data _null_;
set sashelp.vextfl(where=(fileref="&inref" or fileref="&outref"));
if fileref="&inref" then call symputx('infound',1,'l');
if fileref="&outref" then call symputx('outfound',1,'l');
run;
%mp_abort(iftrue= (&infound=0)
,mac=&sysmacroname
,msg=%str(INREF &inref NOT FOUND!)
)
%mp_abort(iftrue= (&outref=0)
,mac=&sysmacroname
,msg=%str(OUTREF NOT PROVIDED!)
)
%mp_abort(iftrue= (&action ne ENCODE and &action ne DECODE)
,mac=&sysmacroname
,msg=%str(Invalid action! Should be ENCODE OR DECODE)
)
%if &outfound=0 %then %do;
filename &outref temp lrecl=2097088;
%end;
%if &action=ENCODE %then %do;
data _null_;
length b64 $ 76 line $ 57;
retain line "";
infile &inref recfm=F lrecl= 1 end=eof;
input @1 stream $char1.;
file &outref recfm=N;
substr(line,(_N_-(CEIL(_N_/57)-1)*57),1) = byte(rank(stream));
if mod(_N_,57)=0 or EOF then do;
if eof then b64=put(trim(line),$base64X76.);
else b64=put(line, $base64X76.);
put b64 + (-1) @;
line="";
end;
run;
%end;
%else %if &action=DECODE %then %do;
data _null_;
length filein 8 fileout 8;
filein = fopen("&inref",'I',4,'B');
fileout = fopen("&outref",'O',3,'B');
char= '20'x;
do while(fread(filein)=0);
length raw $4;
do i=1 to 4;
rc=fget(filein,char,1);
substr(raw,i,1)=char;
end;
rc = fput(fileout,input(raw,$base64X4.));
rc = fwrite(fileout);
end;
rc = fclose(filein);
rc = fclose(fileout);
run;
%end;
%mend mp_base64copy;
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
run;
%if &inref = ____in %then %do;
filename &inref clear;
%end;
%if &outref=____out %then %do;
filename &outref clear;
%end;
%mend mp_binarycopy;
%macro mf_getuniquename(prefix=MC);
&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))
%mend mf_getuniquename;
/* system macro dependencies for build process end*/
/* system macros for build process */
%macro mv_createwebservice(path=
,name=
,desc=Created by the mv_createwebservice.sas macro
,precode=
,code=ft15f001
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,replace=YES
,adapter=sasjs
,mdebug=0
,contextname=
,debug=0 /* @TODO - Deprecate */
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
/* initial validation checking */
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1)
,mac=&sysmacroname
,msg=%str(name value must be provided)
)
options noquotelenmax;
* remove any trailing slash ;
%if "%substr(&path,%length(&path),1)" = "/" %then
%let path=%substr(&path,1,%length(&path)-1);
/* ensure folder exists */
%put &sysmacroname: Path &path being checked / created;
%mv_createfolder(path=&path)
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* fetching folder details for provided path */
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&path";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%if &mdebug=1 %then %do;
data _null_;
infile &fname1;
input;
putlog _infile_;
run;
%end;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* path exists. Grab follow on link to check members */
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..links;
if rel='members' then
call symputx('membercheck',quote("&base_uri"!!trim(href)),'l');
else if rel='self' then call symputx('parentFolderUri',href,'l');
run;
data _null_;
set &libref1..root;
call symputx('folderid',id,'l');
run;
%local fname2;
%let fname2=%mf_getuniquefileref();
proc http method='GET'
out=&fname2
&oauth_bearer
url=%unquote(%superq(membercheck));
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
'Accept'='application/vnd.sas.collection+json'
'Accept-Language'='string';
%if &mdebug=1 %then %do;
debug level = 3;
%end;
run;
/*data _null_;infile &fname2;input;putlog _infile_;run;*/
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%if %upcase(&replace)=YES %then %do;
%mv_deletejes(path=&path, name=&name)
%end;
%else %do;
/* check that job does not already exist in that folder */
%local libref2;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
%local exists; %let exists=0;
data _null_;
set &libref2..items;
if contenttype='jobDefinition' and upcase(name)="%upcase(&name)" then
call symputx('exists',1,'l');
run;
%mp_abort(iftrue=(&exists=1)
,mac=&sysmacroname
,msg=%str(Job &name already exists in &path)
)
libname &libref2 clear;
%end;
/* set up the body of the request to create the service */
%local fname3;
%let fname3=%mf_getuniquefileref();
data _null_;
file &fname3 TERMSTR=' ';
length string $32767;
string=cats('{"version": 0,"name":"'
,"&name"
,'","type":"Compute","parameters":[{"name":"_addjesbeginendmacros"'
,',"type":"CHARACTER","defaultValue":"false"}');
context=quote(cats(symget('contextname')));
if context ne '""' then do;
string=cats(string,',{"version": 1,"name": "_contextName","defaultValue":'
,context,',"type":"CHARACTER","label":"Context Name","required": false}');
end;
string=cats(string,'],"code":"');
put string;
run;
/**
* Add webout macro
* These put statements are auto generated - to change the macro, change the
* source (mv_webout) and run `build.py`
*/
filename &adapter temp lrecl=3000;
data _null_;
file &adapter;
put "/* Created on %sysfunc(datetime(),datetime19.) by &sysuserid */";
/* WEBOUT BEGIN */
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y ';
put ' ,engine=DATASTEP ';
put ' ,missing=NULL ';
put ' ,showmeta=N ';
put ' ,maxobs=MAX ';
put ')/*/STORE SOURCE*/; ';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval ';
put ' tmpds1 tmpds2 tmpds3 tmpds4; ';
put '%let numcols=0; ';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;); ';
put ' ';
put '%if &action=OPEN %then %do; ';
put ' options nobomfile; ';
put ' data _null_;file &jref encoding=''utf-8'' lrecl=200; ';
put ' put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"''; ';
put ' run; ';
put '%end; ';
put '%else %if (&action=ARR or &action=OBJ) %then %do; ';
put ' /* force variable names to always be uppercase in the JSON */ ';
put ' options validvarname=upcase; ';
put ' /* To avoid issues with _webout on EBI - such as encoding diffs and truncation ';
put ' (https://support.sas.com/kb/49/325.html) we use temporary files */ ';
put ' filename _sjs1 temp lrecl=200 ; ';
put ' data _null_; file _sjs1 encoding=''utf-8''; ';
put ' put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":"; ';
put ' run; ';
put ' /* now write to _webout 1 char at a time */ ';
put ' data _null_; ';
put ' infile _sjs1 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs1 clear; ';
put ' ';
put ' /* grab col defs */ ';
put ' proc contents noprint data=&ds ';
put ' out=_data_(keep=name type length format formatl formatd varnum label); ';
put ' run; ';
put ' %let colinfo=%scan(&syslast,2,.); ';
put ' proc sort data=&colinfo; ';
put ' by varnum; ';
put ' run; ';
put ' /* move meta to mac vars */ ';
put ' data &colinfo; ';
put ' if _n_=1 then call symputx(''numcols'',nobs,''l''); ';
put ' set &colinfo end=last nobs=nobs; ';
put ' name=upcase(name); ';
put ' /* fix formats */ ';
put ' if type=2 or type=6 then do; ';
put ' typelong=''char''; ';
put ' length fmt $49.; ';
put ' if format='''' then fmt=cats(''$'',length,''.''); ';
put ' else if formatl=0 then fmt=cats(format,''.''); ';
put ' else fmt=cats(format,formatl,''.''); ';
put ' end; ';
put ' else do; ';
put ' typelong=''num''; ';
put ' if format='''' then fmt=''best.''; ';
put ' else if formatl=0 then fmt=cats(format,''.''); ';
put ' else if formatd=0 then fmt=cats(format,formatl,''.''); ';
put ' else fmt=cats(format,formatl,''.'',formatd); ';
put ' end; ';
put ' /* 32 char unique name */ ';
put ' newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27); ';
put ' ';
put ' call symputx(cats(''name'',_n_),name,''l''); ';
put ' call symputx(cats(''newname'',_n_),newname,''l''); ';
put ' call symputx(cats(''length'',_n_),length,''l''); ';
put ' call symputx(cats(''fmt'',_n_),fmt,''l''); ';
put ' call symputx(cats(''type'',_n_),type,''l''); ';
put ' call symputx(cats(''typelong'',_n_),typelong,''l''); ';
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
put ' run; ';
put ' ';
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' proc sql; ';
put ' select count(*) into: lastobs from &ds; ';
put ' %if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs)); ';
put ' ';
put ' %if &engine=PROCJSON %then %do; ';
put ' %if &missing=STRING %then %do; ';
put ' %put &sysmacroname: Special Missings not supported in proc json.; ';
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
put ' %goto datastep; ';
put ' %end; ';
put ' data &tempds; ';
put ' set &ds; ';
put ' &stmt_obs; ';
put ' %if &fmt=N %then format _numeric_ best32.;; ';
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
put ' filename _sjs2 temp lrecl=131068 encoding=''utf-8''; ';
put ' proc json out=_sjs2 pretty ';
put ' %if &action=ARR %then nokeys ; ';
put ' ;export &tempds / nosastags fmtnumeric; ';
put ' run; ';
put ' /* send back to webout */ ';
put ' data _null_; ';
put ' infile _sjs2 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs2 clear; ';
put ' %end; ';
put ' %else %if &engine=DATASTEP %then %do; ';
put ' %datastep: ';
put ' %if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1 ';
put ' %then %do; ';
put ' %put &sysmacroname: &ds NOT FOUND!!!; ';
put ' %return; ';
put ' %end; ';
put ' ';
put ' %if &fmt=Y %then %do; ';
put ' /** ';
put ' * Extract format definitions ';
put ' * First, by getting library locations from dictionary.formats ';
put ' * Then, by exporting the width using proc format ';
put ' * Cannot use maxw from sashelp.vformat as not always populated ';
put ' * Cannot use fmtinfo() as not supported in all flavours ';
put ' */ ';
put ' %let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' proc sql noprint; ';
put ' create table &tmpds1 as ';
put ' select cats(libname,''.'',memname) as FMTCAT, ';
put ' FMTNAME ';
put ' from dictionary.formats ';
put ' where fmttype=''F'' and libname is not null ';
put ' and fmtname in (select format from &colinfo where format is not null) ';
put ' order by 1; ';
put ' create table &tmpds2( ';
put ' FMTNAME char(32), ';
put ' LENGTH num ';
put ' ); ';
put ' %local catlist cat fmtlist i; ';
put ' select distinct fmtcat into: catlist separated by '' '' from &tmpds1; ';
put ' %do i=1 %to %sysfunc(countw(&catlist,%str( ))); ';
put ' %let cat=%scan(&catlist,&i,%str( )); ';
put ' proc sql; ';
put ' select distinct fmtname into: fmtlist separated by '' '' ';
put ' from &tmpds1 where fmtcat="&cat"; ';
put ' proc format lib=&cat cntlout=&tmpds3(keep=fmtname length); ';
put ' select &fmtlist; ';
put ' run; ';
put ' proc sql; ';
put ' insert into &tmpds2 select distinct fmtname,length from &tmpds3; ';
put ' %end; ';
put ' ';
put ' proc sql; ';
put ' create table &tmpds4 as ';
put ' select a.*, b.length as MAXW ';
put ' from &colinfo a ';
put ' left join &tmpds2 b ';
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
put ' order by a.varnum; ';
put ' data _null_; ';
put ' set &tmpds4; ';
put ' if not missing(maxw); ';
put ' call symputx( ';
put ' cats(''fmtlen'',_n_), ';
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
put ' ,''l'' ';
put ' ); ';
put ' run; ';
put ' ';
put ' /* configure varlenchk - as we are explicitly shortening the variables */ ';
put ' %let optval=%sysfunc(getoption(varlenchk)); ';
put ' options varlenchk=NOWARN; ';
put ' data _data_(compress=char); ';
put ' /* shorten the new vars */ ';
put ' length ';
put ' %do i=1 %to &numcols; ';
put ' &&name&i $&&fmtlen&i ';
put ' %end; ';
put ' ; ';
put ' /* rename on entry */ ';
put ' set &ds(rename=( ';
put ' %do i=1 %to &numcols; ';
put ' &&name&i=&&newname&i ';
put ' %end; ';
put ' )); ';
put ' &stmt_obs; ';
put ' ';
put ' drop ';
put ' %do i=1 %to &numcols; ';
put ' &&newname&i ';
put ' %end; ';
put ' ; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=num %then %do; ';
put ' &&name&i=cats(put(&&newname&i,&&fmt&i)); ';
put ' %end; ';
put ' %else %do; ';
put ' &&name&i=put(&&newname&i,&&fmt&i); ';
put ' %end; ';
put ' %end; ';
put ' if _error_ then do; ';
put ' call symputx(''syscc'',1012); ';
put ' stop; ';
put ' end; ';
put ' run; ';
put ' %let fmtds=&syslast; ';
put ' options varlenchk=&optval; ';
put ' %end; ';
put ' ';
put ' proc format; /* credit yabwon for special null removal */ ';
put ' value bart (default=40) ';
put ' %if &missing=NULL %then %do; ';
put ' ._ - .z = null ';
put ' %end; ';
put ' %else %do; ';
put ' ._ = [quote()] ';
put ' . = null ';
put ' .a - .z = [quote()] ';
put ' %end; ';
put ' other = [best.]; ';
put ' ';
put ' data &tempds; ';
put ' attrib _all_ label=''''; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
put ' length &&name&i $&&fmtlen&i...; ';
put ' format &&name&i $&&fmtlen&i...; ';
put ' %end; ';
put ' %end; ';
put ' %if &fmt=Y %then %do; ';
put ' set &fmtds; ';
put ' %end; ';
put ' %else %do; ';
put ' set &ds; ';
put ' %end; ';
put ' &stmt_obs; ';
put ' format _numeric_ bart.; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' &&name&i=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else &&name&i=quote(cats(&&name&i)); ';
put ' %end; ';
put ' %end; ';
put ' run; ';
put ' ';
put ' filename _sjs3 temp lrecl=131068 ; ';
put ' data _null_; ';
put ' file _sjs3 encoding=''utf-8''; ';
put ' if _n_=1 then put "["; ';
put ' set &tempds; ';
put ' if _n_>1 then put "," @; put ';
put ' %if &action=ARR %then "[" ; %else "{" ; ';
put ' %do i=1 %to &numcols; ';
put ' %if &i>1 %then "," ; ';
put ' %if &action=OBJ %then """&&name&i"":" ; ';
put ' "&&name&i"n /* name literal for reserved variable names */ ';
put ' %end; ';
put ' %if &action=ARR %then "]" ; %else "}" ; ; ';
put ' ';
put ' /* close out the table */ ';
put ' data _null_; ';
put ' file _sjs3 mod encoding=''utf-8''; ';
put ' put '']''; ';
put ' run; ';
put ' data _null_; ';
put ' infile _sjs3 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs3 clear; ';
put ' %end; ';
put ' ';
put ' proc sql; ';
put ' drop table &colinfo, &tempds; ';
put ' ';
put ' %if %substr(&showmeta,1,1)=Y %then %do; ';
put ' filename _sjs4 temp lrecl=131068 encoding=''utf-8''; ';
put ' data _null_; ';
put ' file _sjs4; ';
put ' length label $350; ';
put ' put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{"; ';
put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; ';
put ' put name '':{"format":'' format '',"label":'' label ';
put ' '',"length":'' length '',"type":'' type ''}''; ';
put ' end; ';
put ' put ''}}''; ';
put ' run; ';
put ' /* send back to webout */ ';
put ' data _null_; ';
put ' infile _sjs4 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs4 clear; ';
put ' %end; ';
put '%end; ';
put ' ';
put '%else %if &action=CLOSE %then %do; ';
put ' data _null_; file &jref encoding=''utf-8'' mod ; ';
put ' put "}"; ';
put ' run; ';
put '%end; ';
put '%mend mp_jsonout; ';
put ' ';
put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; ';
put ' %local user; ';
put ' ';
put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; ';
put ' %else %let user=&sysuserid; ';
put ' ';
put ' %quote(&user) ';
put ' ';
put '%mend mf_getuser; ';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL ';
put ' ,showmeta=N,maxobs=MAX,workobs=0 ';
put '); ';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name ';
put ' sasjs_tables SYS_JES_JOB_URI; ';
put '%if %index("&_debug",log) %then %let _debug=131; ';
put ' ';
put '%local i tempds table; ';
put '%let action=%upcase(&action); ';
put ' ';
put '%if &action=FETCH %then %do; ';
put ' %if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do; ';
put ' options mprint notes mprintnest; ';
put ' %end; ';
put ' ';
put ' %if not %symexist(_webin_fileuri1) %then %do; ';
put ' %let _webin_file_count=%eval(&_webin_file_count+0); ';
put ' %let _webin_fileuri1=&_webin_fileuri; ';
put ' %let _webin_name1=&_webin_name; ';
put ' %end; ';
put ' ';
put ' /* if the sasjs_tables param is passed, we expect param based upload */ ';
put ' %if %length(&sasjs_tables.X)>1 %then %do; ';
put ' ';
put ' /* convert data from macro variables to datasets */ ';
put ' %do i=1 %to %sysfunc(countw(&sasjs_tables)); ';
put ' %let table=%scan(&sasjs_tables,&i,%str( )); ';
put ' %if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1; ';
put ' data _null_; ';
put ' file "%sysfunc(pathname(work))/&table..csv" recfm=n; ';
put ' retain nrflg 0; ';
put ' length line $32767; ';
put ' do i=1 to &&sasjs&i.data0; ';
put ' if &&sasjs&i.data0=1 then line=symget("sasjs&i.data"); ';
put ' else line=symget(cats("sasjs&i.data",i)); ';
put ' if i=1 and substr(line,1,7)=''%nrstr('' then do; ';
put ' nrflg=1; ';
put ' line=substr(line,8); ';
put ' end; ';
put ' if i=&&sasjs&i.data0 and nrflg=1 then do; ';
put ' line=substr(line,1,length(line)-1); ';
put ' end; ';
put ' put line +(-1) @; ';
put ' end; ';
put ' run; ';
put ' data _null_; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' list; ';
put ' data work.&table; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd ';
put ' termstr=crlf; ';
put ' input &input_statement; ';
put ' run; ';
put ' %end; ';
put ' %end; ';
put ' %else %do i=1 %to &_webin_file_count; ';
put ' /* read in any files that are sent */ ';
put ' /* this part needs refactoring for wide files */ ';
put ' filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999; ';
put ' data _null_; ';
put ' infile indata termstr=crlf lrecl=32767; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' %if %str(&_debug) ge 131 %then %do; ';
put ' if _n_<20 then putlog _infile_; ';
put ' else stop; ';
put ' %end; ';
put ' %else %do; ';
put ' stop; ';
put ' %end; ';
put ' run; ';
put ' data &&_webin_name&i; ';
put ' infile indata firstobs=2 dsd termstr=crlf ; ';
put ' input &input_statement; ';
put ' run; ';
put ' %let sasjs_tables=&sasjs_tables &&_webin_name&i; ';
put ' %end; ';
put '%end; ';
put '%else %if &action=OPEN %then %do; ';
put ' /* setup webout */ ';
put ' OPTIONS NOBOMFILE; ';
put ' %if "X&SYS_JES_JOB_URI.X"="XX" %then %do; ';
put ' filename _webout temp lrecl=999999 mod; ';
put ' %end; ';
put ' %else %do; ';
put ' filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" ';
put ' name="_webout.json" lrecl=999999 mod; ';
put ' %end; ';
put ' ';
put ' /* setup temp ref */ ';
put ' %if %upcase(&fref) ne _WEBOUT %then %do; ';
put ' filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---''; ';
put ' %end; ';
put ' ';
put ' /* setup json */ ';
put ' data _null_;file &fref; ';
put ' put ''{"SYSDATE" : "'' "&SYSDATE" ''"''; ';
put ' put '',"SYSTIME" : "'' "&SYSTIME" ''"''; ';
put ' run; ';
put '%end; ';
put '%else %if &action=ARR or &action=OBJ %then %do; ';
put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref ';
put ' ,engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs ';
put ' ) ';
put '%end; ';
put '%else %if &action=CLOSE %then %do; ';
put ' %if %str(&workobs) > 0 %then %do; ';
put ' /* send back first XX records of each work table for debugging */ ';
put ' data;run;%let tempds=%scan(&syslast,2,.); ';
put ' ods output Members=&tempds; ';
put ' proc datasets library=WORK memtype=data; ';
put ' %local wtcnt;%let wtcnt=0; ';
put ' data _null_; ';
put ' set &tempds; ';
put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ ';
put ' i+1; ';
put ' call symputx(cats(''wt'',i),name,''l''); ';
put ' call symputx(''wtcnt'',i,''l''); ';
put ' data _null_; file &fref mod; put ",""WORK"":{"; ';
put ' %do i=1 %to &wtcnt; ';
put ' %let wt=&&wt&i; ';
put ' data _null_; file &fref mod; ';
put ' dsid=open("WORK.&wt",''is''); ';
put ' nlobs=attrn(dsid,''NLOBS''); ';
put ' nvars=attrn(dsid,''NVARS''); ';
put ' rc=close(dsid); ';
put ' if &i>1 then put '',''@; ';
put ' put " ""&wt"" : {"; ';
put ' put ''"nlobs":'' nlobs; ';
put ' put '',"nvars":'' nvars; ';
put ' %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y ';
put ' ,maxobs=&workobs ';
put ' ) ';
put ' data _null_; file &fref mod;put "}"; ';
put ' %end; ';
put ' data _null_; file &fref mod;put "}";run; ';
put ' %end; ';
put ' ';
put ' /* close off json */ ';
put ' data _null_;file &fref mod; ';
put ' length SYSPROCESSNAME syserrortext syswarningtext autoexec $512; ';
put ' put ",""_DEBUG"" : ""&_debug"" "; ';
put ' _PROGRAM=quote(trim(resolve(symget(''_PROGRAM'')))); ';
put ' put '',"_PROGRAM" : '' _PROGRAM ; ';
put ' autoexec=quote(urlencode(trim(getoption(''autoexec'')))); ';
put ' put '',"AUTOEXEC" : '' autoexec; ';
put ' put ",""MF_GETUSER"" : ""%mf_getuser()"" "; ';
put ' SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI'')))); ';
put ' put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ; ';
put ' put ",""SYSJOBID"" : ""&sysjobid"" "; ';
put ' put ",""SYSCC"" : ""&syscc"" "; ';
put ' syserrortext=cats(symget(''syserrortext'')); ';
put ' if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' syserrortext=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,syserrortext) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else syserrortext=cats(''"'',syserrortext,''"''); ';
put ' put '',"SYSERRORTEXT" : '' syserrortext; ';
put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; ';
put ' put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" "; ';
put ' put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" "; ';
put ' SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME))); ';
put ' put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME; ';
put ' put ",""SYSJOBID"" : ""&sysjobid"" "; ';
put ' put ",""SYSSCPL"" : ""&sysscpl"" "; ';
put ' put ",""SYSSITE"" : ""&syssite"" "; ';
put ' put ",""SYSUSERID"" : ""&sysuserid"" "; ';
put ' sysvlong=quote(trim(symget(''sysvlong''))); ';
put ' put '',"SYSVLONG" : '' sysvlong; ';
put ' syswarningtext=cats(symget(''syswarningtext'')); ';
put ' if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' syswarningtext=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,syswarningtext) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else syswarningtext=cats(''"'',syswarningtext,''"''); ';
put ' put '',"SYSWARNINGTEXT" : '' syswarningtext; ';
put ' put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" ''; ';
put ' length memsize $32; ';
put ' memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)"; ';
put ' memsize=quote(cats(memsize)); ';
put ' put '',"MEMSIZE" : '' memsize; ';
put ' put "}"; ';
put ' ';
put ' %if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do; ';
put ' data _null_; rc=fcopy("&fref","_webout");run; ';
put ' %end; ';
put ' ';
put '%end; ';
put ' ';
put '%mend mv_webout; ';
/* WEBOUT END */
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so it is provided by SASjs instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put ' ';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO';
put ' ,maxobs=MAX';
put ');';
put ' %mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing';
put ' ,showmeta=&showmeta,maxobs=&maxobs';
put ' )';
put '%mend;';
run;
/* insert the code, escaping double quotes and carriage returns */
%&dbg.put &sysmacroname: Creating final input file;
%local x fref freflist;
%let freflist= &adapter &precode &code ;
%do x=1 %to %sysfunc(countw(&freflist));
%let fref=%scan(&freflist,&x);
%&dbg.put &sysmacroname: adding &fref fileref;
data _null_;
length filein 8 fileid 8;
filein = fopen("&fref","I",1,"B");
fileid = fopen("&fname3","A",1,"B");
rec = "20"x;
do while(fread(filein)=0);
rc = fget(filein,rec,1);
if rec='"' then do; /* DOUBLE QUOTE */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'"');rc =fwrite(fileid);
end;
else if rec='0A'x then do; /* LF */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'n');rc =fwrite(fileid);
end;
else if rec='0D'x then do; /* CR */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'r');rc =fwrite(fileid);
end;
else if rec='09'x then do; /* TAB */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'t');rc =fwrite(fileid);
end;
else if rec='5C'x then do; /* BACKSLASH */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'\');rc =fwrite(fileid);
end;
else if rec='01'x then do; /* Unprintable */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'1');rc =fwrite(fileid);
end;
else if rec='07'x then do; /* Bell Char */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'7');rc =fwrite(fileid);
end;
else if rec='1B'x then do; /* escape char */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'1');rc =fwrite(fileid);
rc =fput(fileid,'B');rc =fwrite(fileid);
end;
else do;
rc =fput(fileid,rec);
rc =fwrite(fileid);
end;
end;
rc=fclose(filein);
rc=fclose(fileid);
run;
%end;
/* finish off the body of the code file loaded to JES */
data _null_;
file &fname3 mod TERMSTR=' ';
put '"}';
run;
%if &mdebug=1 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;
%put &sysmacroname: input about to be POSTed;
data _null_;infile &fname3;input;putlog _infile_;run;
%end;
%&dbg.put &sysmacroname: Creating the actual service!;
%local fname4;
%let fname4=%mf_getuniquefileref();
proc http method='POST'
in=&fname3
out=&fname4
&oauth_bearer
url="&base_uri/jobDefinitions/definitions?parentFolderUri=&parentFolderUri";
headers 'Content-Type'='application/vnd.sas.job.definition+json'
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Accept"="application/vnd.sas.job.definition+json";
%if &mdebug=1 %then %do;
debug level = 3;
%end;
run;
%if &mdebug=1 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;
%put &sysmacroname: output from POSTing job definition;
data _null_;infile &fname4;input;putlog _infile_;run;
%end;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* get the url so we can give a helpful log message */
%local url;
data _null_;
if symexist('_baseurl') then do;
url=symget('_baseurl');
if subpad(url,length(url)-9,9)='SASStudio'
then url=substr(url,1,length(url)-11);
else url="&systcpiphostname";
end;
else url="&systcpiphostname";
call symputx('url',url);
run;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname1 clear;
filename &fname2 clear;
filename &fname3 clear;
filename &fname4 clear;
filename &adapter clear;
libname &libref1 clear;
%end;
%put &sysmacroname: Job &name successfully created in &path;
%put &sysmacroname:;
%put &sysmacroname: Check it out here:;
%put &sysmacroname:;%put;
%put &url/SASJobExecution?_PROGRAM=&path/&name;%put;
%put &sysmacroname:;
%put &sysmacroname:;
%mend mv_createwebservice;
/**
@file
@brief Creates a file in SAS Drive
@details Creates a file in SAS Drive and adds the appropriate content type.
If the parent folder does not exist, it is created.
Usage:
filename myfile temp;
data _null_;
file myfile;
put 'something';
run;
%mv_createfile(path=/Public/temp,name=newfile.txt,inref=myfile)
@param [in] path= The parent folder in which to create the file
@param [in] name= The name of the file to be created
@param [in] inref= The fileref pointing to the file to be uploaded
@param [in] intype= (BINARY) The type of the input data. Valid values:
@li BINARY File is copied byte for byte using the mp_binarycopy.sas macro.
@li BASE64 File will be first decoded using the mp_base64.sas macro, then
loaded byte by byte to SAS Drive.
@param [in] contentdisp= (inline) Content Disposition. Example values:
@li inline
@li attachment
@param [in] ctype= (0) Set a default HTTP Content-Type header to be returned
with the file when the content is retrieved from the Files service.
@param [in] access_token_var= The global macro variable to contain the access
token, if using authorization_code grant type.
@param [in] grant_type= (sas_services) Valid values are:
@li password
@li authorization_code
@li sas_services
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
@version VIYA V.03.05
@author Allan Bowe, source: https://github.com/sasjs/core
SAS Macros
@li mf_getuniquefileref.sas
@li mf_isblank.sas
@li mp_abort.sas
@li mp_base64copy.sas
@li mp_binarycopy.sas
@li mv_createfolder.sas
**/
%macro mv_createfile(path=
,name=
,inref=
,intype=BINARY
,contentdisp=inline
,ctype=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1 or %length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1 or %length(&name)=1)
,mac=&sysmacroname
,msg=%str(name value with length >1 must be provided)
)
/* create folder if it does not already exist */
%mv_createfolder(path=&path
,access_token_var=&access_token_var
,grant_type=&grant_type
,mdebug=&mdebug
)
/* create file with relevant options */
%local fref;
%let fref=%mf_getuniquefileref();
filename &fref filesrvc
folderPath="&path"
filename="&name"
cdisp="&contentdisp"
%if "&ctype" ne "0" %then %do;
ctype="&ctype"
%end;
lrecl=1048544;
%if &intype=BINARY %then %do;
%mp_binarycopy(inref=&inref, outref=&fref)
%end;
%else %if &intype=BASE64 %then %do;
%mp_base64copy(inref=&inref, outref=&fref, action=DECODE)
%end;
filename &fref clear;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%put &sysmacroname: File &name successfully created in &path;
%put &sysmacroname:;%put;
%put &base_uri/SASJobExecution?_file=&path/&name;%put;
%put &sysmacroname:;
%mend mv_createfile;
/**
@file
@brief Performs a text substitution on a file
@details Performs a find and replace on a file, either in place or to a new
file. Can be used on files where lines are longer than 32767.
Works by reading in the file byte by byte, then marking the beginning and end
of each matched string, before finally doing the replace.
Full credit for this highly efficient and syntactically satisfying SAS logic
goes to [Bartosz Jabłoński](https://www.linkedin.com/in/yabwon), founder of
the [SAS Packages](https://github.com/yabwon/SAS_PACKAGES) framework.
Usage:
%let file="%sysfunc(pathname(work))/file.txt";
%let str=replace/me;
%let rep=with/this;
data _null_;
file &file;
put 'blahblah';
put "blahblah&str.blah";
put 'blahblahblah';
run;
%mp_replace(&file, findvar=str, replacevar=rep)
data _null_;
infile &file;
input;
list;
run;
Note - if you are running a version of SAS that will allow the io package in
LUA, you can also use this macro: mp_gsubfile.sas
@param [in] infile The QUOTED path to the file on which to perform the
substitution
@param [in] findvar= Macro variable NAME containing the string to search for
@param [in] replacevar= Macro variable NAME containing the replacement string
@param [out] outfile= (0) Optional QUOTED path to the adjusted output file (to
avoid overwriting the first file).
SAS Macros
@li mf_getuniquefileref.sas
@li mf_getuniquename.sas
Related Macros
@li mp_chop.sas
@li mp_gsubfile.sas
@li mp_replace.test.sas
@version 9.4
@author Bartosz Jabłoński
@author Allan Bowe
**/
%macro mp_replace(infile,
findvar=,
replacevar=,
outfile=0
)/*/STORE SOURCE*/;
%local inref dttm ds1;
%let inref=%mf_getuniquefileref();
%let outref=%mf_getuniquefileref();
%if &outfile=0 %then %let outfile=&infile;
%let ds1=%mf_getuniquename(prefix=allchars);
%let ds2=%mf_getuniquename(prefix=startmark);
/* START */
%let dttm=%sysfunc(datetime());
filename &inref &infile lrecl=1 recfm=n;
data &ds1;
infile &inref;
input sourcechar $char1. @@;
format sourcechar hex2.;
run;
data &ds2;
/* set find string to length in bytes to cover trailing spaces */
length string $ %length(%superq(&findvar));
string =symget("&findvar");
drop string;
firstchar=char(string,1);
findlen=lengthm(string); /* <- for trailing bytes */
do _N_=1 to nobs;
set &ds1 nobs=nobs point=_N_;
if sourcechar=firstchar then do;
pos=1;
s=0;
do point=_N_ to min(_N_ + findlen -1,nobs);
set &ds1 point=point;
if sourcechar=char(string, pos) then s + 1;
else goto _leave_;
pos+1;
end;
_leave_:
if s=findlen then do;
START =_N_;
_N_ =_N_+ s - 1;
STOP =_N_;
output;
end;
end;
end;
stop;
keep START STOP;
run;
data &ds1;
declare hash HS(dataset:"&ds2(keep=start)");
HS.defineKey("start");
HS.defineDone();
declare hash HE(dataset:"&ds2(keep=stop)");
HE.defineKey("stop");
HE.defineDone();
do until(eof);
set &ds1 end=eof curobs =n;
start = ^HS.check(key:n);
stop = ^HE.check(key:n);
length strt $ 1;
strt =put(start,best. -L);
retain out 1;
if out then output;
if start then out=0;
if stop then out=1;
end;
stop;
keep sourcechar strt;
run;
filename &outref &outfile recfm=n;
data _null_;
length replace $ %length(%superq(&replacevar));
replace=symget("&replacevar");
file &outref;
do until(eof);
set &ds1 end=eof;
if strt ="1" then put replace char.;
else put sourcechar char1.;
end;
stop;
run;
/* END */
%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;
%mend mp_replace;
/* system macros for build process end */
%macro mf_mval(var);
%if %symexist(&var) %then %do;
%superq(&var)
%end;
%mend mf_mval;
%macro mf_trimstr(basestr,trimstr);
%local baselen trimlen trimval;
/* return if basestr is shorter than trimstr (or 0) */
%let baselen=%length(%superq(basestr));
%let trimlen=%length(%superq(trimstr));
%if &baselen < &trimlen or &baselen=0 %then %return;
/* obtain the characters from the end of basestr */
%let trimval=%qsubstr(%superq(basestr)
,%length(%superq(basestr))-&trimlen+1
,&trimlen);
/* compare and if matching, chop it off! */
%if %superq(basestr)=%superq(trimstr) %then %do;
%return;
%end;
%else %if %superq(trimval)=%superq(trimstr) %then %do;
%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)
%end;
%else %do;
&basestr
%end;
%mend mf_trimstr;
%macro mf_getplatform(switch
)/*/STORE SOURCE*/;
%local a b c;
%if &switch.NONE=NONE %then %do;
%if %symexist(sasjsprocessmode) %then %do;
%if &sasjsprocessmode=Stored Program %then %do;
SASJS
%return;
%end;
%end;
%if %symexist(sysprocessmode) %then %do;
%if "&sysprocessmode"="SAS Object Server"
or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA
%end;
%else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if &switch=SASSTUDIO %then %do;
/* return the version of SAS Studio else 0 */
%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;
%let a=%mf_mval(_CLIENTVERSION);
%let b=%scan(&a,1,.);
%if %eval(&b >2) %then %do;
&b
%end;
%else 0;
%end;
%else 0;
%end;
%else %if &switch=VIYARESTAPI %then %do;
%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)
%end;
%mend mf_getplatform;
%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);
%local rc fname;
%if &prefix=0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%end;
%else %do;
%local x len;
%let len=%eval(8-%length(&prefix));
%let x=0;
%do x=0 %to &maxtries;
%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);
%if %sysfunc(fileref(&fname)) > 0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%return;
%end;
%end;
%put unable to find available fileref after &maxtries attempts;
%end;
%mend mf_getuniquefileref;
%macro mf_getuniquename(prefix=MC);
&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))
%mend mf_getuniquename;
%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)
, errds=work.mp_abort_errds
, mode=REGULAR
)/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds;
iftrue='1=1';
length mac $100 msg $5000;
mac=symget('mac');
msg=symget('msg');
run;
data _null_;
abort cancel FILE;
run;
%return;
%end;
%end;
/* Web App Context */
%if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE
%then %do;
options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do;
options nosyntaxcheck;
%end;
%if &mode=INCLUDE %then %do;
%if %sysfunc(exist(&errds))=1 %then %do;
data _null_;
set &errds;
call symputx('iftrue',iftrue,'l');
call symputx('mac',mac,'l');
call symputx('msg',msg,'l');
putlog (_all_)(=);
run;
%if (&iftrue)=0 %then %return;
%end;
%else %do;
%put &sysmacroname: No include errors found;
%return;
%end;
%end;
/* extract log errs / warns, if exist */
%local logloc logline;
%global logmsg; /* capture global messages */
%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;
%else %let logloc=%qsysfunc(getoption(LOG));
proc printto log=log;run;
%let logline=0;
%if %length(&logloc)>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input; putlog _infile_;
i=1;
retain logonce 0;
if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0 then
do;
call symputx('logline',_n_);
logonce+1;
end;
run;
/* capture log including lines BEFORE the err */
%if &logline>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input;
i=1;
stoploop=0;
if _n_ ge &logline-15 and stoploop=0 then do until (i>22);
call symputx('logmsg',catx('\n',symget('logmsg'),_infile_));
input;
i+1;
stoploop=1;
end;
if stoploop=1 then stop;
run;
%end;
%end;
%if %symexist(SYS_JES_JOB_URI) %then %do;
/* setup webout for Viya */
options nobomfile;
%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;
filename _webout temp lrecl=999999 mod;
%end;
%else %do;
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"
name="_webout.json" lrecl=999999 mod;
%end;
%end;
%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;
options nobomfile;
/* set up http header for SASjs Server */
%let fid=%sysfunc(fopen(&fref,A));
%if &fid=0 %then %do;
%put %str(ERR)OR: %sysfunc(sysmsg());
%return;
%end;
%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));
%let rc=%sysfunc(fwrite(&fid));
%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(&fref));
%end;
/* send response in SASjs JSON format */
data _null_;
file _webout mod lrecl=32000 encoding='utf-8';
length msg syswarningtext syserrortext $32767 mode $10 ;
sasdatetime=datetime();
msg=symget('msg');
%if &logline>0 %then %do;
msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg'));
%end;
/* escape the escapes */
msg=tranwrd(msg,'\','\\');
/* escape the quotes */
msg=tranwrd(msg,'"','\"');
/* ditch the CRLFs as chrome complains */
msg=compress(msg,,'kw');
/* quote without quoting the quotes (which are escaped instead) */
msg=cats('"',msg,'"');
if symexist('_debug') then debug=quote(trim(symget('_debug')));
else debug='""';
if symget('sasjsprocessmode')='Stored Program' then mode='SASJS';
if mode ne 'SASJS' then put '>>weboutBEGIN<<';
put '{"SYSDATE" : "' "&SYSDATE" '"';
put ',"SYSTIME" : "' "&SYSTIME" '"';
put ',"sasjsAbort" : [{';
put ' "MSG":' msg ;
put ' ,"MAC": "' "&mac" '"}]';
put ",""SYSUSERID"" : ""&sysuserid"" ";
put ',"_DEBUG":' debug ;
if symexist('_metauser') then do;
_METAUSER=quote(trim(symget('_METAUSER')));
put ",""_METAUSER"": " _METAUSER;
_METAPERSON=quote(trim(symget('_METAPERSON')));
put ',"_METAPERSON": ' _METAPERSON;
end;
if symexist('SYS_JES_JOB_URI') then do;
SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI')));
put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI;
end;
_PROGRAM=quote(trim(resolve(symget('_PROGRAM'))));
put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" ";
syserrortext=cats(symget('syserrortext'));
if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syserrortext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syserrortext)
)))))))))))))!!'"';
end;
else syserrortext=cats('"',syserrortext,'"');
put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" ";
put ",""SYSJOBID"" : ""&sysjobid"" ";
put ",""SYSSCPL"" : ""&sysscpl"" ";
put ",""SYSSITE"" : ""&syssite"" ";
sysvlong=quote(trim(symget('sysvlong')));
put ',"SYSVLONG" : ' sysvlong;
syswarningtext=cats(symget('syswarningtext'));
if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syswarningtext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syswarningtext)
)))))))))))))!!'"';
end;
else syswarningtext=cats('"',syswarningtext,'"');
put ",""SYSWARNINGTEXT"" : " syswarningtext;
put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
put "}" ;
if mode ne 'SASJS' then put '>>weboutEND<<';
run;
%put _all_;
%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;
data _null_;
putlog 'stpsrvset program err and syscc';
rc=stpsrvset('program error', 0);
call symputx("syscc",0,"g");
run;
%if &sysscp=WIN
and 1=0 /* deprecating this logic until we figure out a consistent abort */
and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"
and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;
/* skip approach (below) does not work in windows m6+ envs */
endsas;
%end;
%else %do;
/**
* endsas kills 9.4m3 deployments by orphaning multibridges.
* Abort variants are ungraceful (non zero return code)
* This approach lets SAS run silently until the end :-)
* Caution - fails when called within a %include within a macro
* Use mp_include() to handle this.
*/
filename skip temp;
data _null_;
file skip;
put '%macro skip();';
comment '%mend skip; -> fix lint ';
put '%macro skippy();';
comment '%mend skippy; -> fix lint ';
run;
%inc skip;
%end;
%end;
%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;
/* endsas kills the session making it harder to fetch results */
data _null_;
syswarningtext=symget('syswarningtext');
syserrortext=symget('syserrortext');
abort_msg=symget('msg');
syscc=symget('syscc');
sysuserid=symget('sysuserid');
iftrue=symget('iftrue');
put (_all_)(/=);
call symputx('syscc',0);
abort cancel nolist;
run;
%end;
%else %do;
%abort cancel;
%end;
%end;
%else %do;
%put _all_;
%abort cancel;
%end;
%mend mp_abort;
/** @endcond */
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
run;
%if &inref = ____in %then %do;
filename &inref clear;
%end;
%if &outref=____out %then %do;
filename &outref clear;
%end;
%mend mp_binarycopy;
%macro mp_chop(infile,
matchvar=,
matchpoint=START,
keep=FIRST,
offset=0,
mdebug=0,
outfile=0
)/*/STORE SOURCE*/;
%local fref0 dttm ds1 outref;
%let fref0=%mf_getuniquefileref();
%let ds1=%mf_getuniquename(prefix=allchars);
%let ds2=%mf_getuniquename(prefix=startmark);
%if &outfile=0 %then %let outfile=&infile;
%mp_abort(iftrue= (%length(%superq(&matchvar))=0)
,mac=mp_chop.sas
,msg=%str(&matchvar is an empty variable)
)
/* START */
%let dttm=%sysfunc(datetime());
filename &fref0 &infile lrecl=1 recfm=n;
/* create dataset with one char per row */
data &ds1;
infile &fref0;
input sourcechar $char1. @@;
format sourcechar hex2.;
run;
/* get start & stop position of first matchvar string (one row, two vars) */
data &ds2;
/* set find string to length in bytes to cover trailing spaces */
length string $ %length(%superq(&matchvar));
string =symget("&matchvar");
drop string;
firstchar=char(string,1);
findlen=lengthm(string); /* <- for trailing bytes */
do _N_=1 to nobs;
set &ds1 nobs=nobs point=_N_;
if sourcechar=firstchar then do;
pos=1;
s=0;
do point=_N_ to min(_N_ + findlen -1,nobs);
set &ds1 point=point;
if sourcechar=char(string, pos) then s + 1;
else goto _leave_;
pos+1;
end;
_leave_:
if s=findlen then do;
START =_N_;
_N_ =_N_+ s - 1;
STOP =_N_;
output;
/* matched! */
stop;
end;
end;
end;
stop;
keep START STOP;
run;
%local split;
%let split=0;
data _null_;
set &ds2;
if "&matchpoint"='START' then do;
if "&keep"='FIRST' then mp=start;
else if "&keep"='LAST' then mp=start-1;
end;
else if "&matchpoint"='END' then do;
if "&keep"='FIRST' then mp=stop+1;
else if "&keep"='LAST' then mp=stop;
end;
split=mp+&offset;
call symputx('split',split,'l');
%if &mdebug=1 %then %do;
put (_all_)(=);
%put &=offset;
%end;
run;
%if &split=0 %then %do;
%put &sysmacroname: No match found in &infile for string %superq(&matchvar);
%return;
%end;
data _null_;
file &outfile recfm=n;
set &ds1;
%if &keep=FIRST %then %do;
if _n_ ge &split then stop;
%end;
%else %do;
if _n_ gt &split;
%end;
put sourcechar char1.;
run;
%if &mdebug=0 %then %do;
filename &fref0 clear;
%end;
%else %do;
data _null_;
infile &outfile lrecl=32767;
input;
list;
if _n_>200 then stop;
run;
%end;
/* END */
%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;
%mend mp_chop;
%macro mcf_init(func
)/*/STORE SOURCE*/;
%if not (%symexist(SASJS_PREFIX)) %then %do;
%global SASJS_PREFIX;
%let SASJS_PREFIX=SASJS;
%end;
%let func=%upcase(&func);
/* the / character is just a seperator */
%global &sasjs_prefix._FUNCTIONS;
%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;
1
%return;
%end;
%else %do;
%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;
0
%end;
%mend mcf_init;
%macro mcf_getfmttype(wrap=NO
,insert_cmplib=DEPRECATED
,lib=WORK
,cat=SASJS
,pkg=UTILS
)/*/STORE SOURCE*/;
%local i var cmpval found;
%if %mcf_init(mcf_getfmttype)=1 %then %return;
%if &wrap=YES %then %do;
proc fcmp outlib=&lib..&cat..&pkg;
%end;
function mcf_getfmttype(fmtnm $) $8;
if substr(fmtnm,1,1)='$' then return('CHAR');
else do;
/* extract NAME */
length fmt $32;
fmt=scan(fmtnm,1,'.');
do while (
substr(fmt,length(fmt),1) in ('1','2','3','4','5','6','7','8','9','0')
);
if length(fmt)=1 then fmt='W';
else fmt=substr(fmt,1,length(fmt)-1);
end;
/* apply lookups */
if cats(fmt) in ('DATETIME','B8601DN','B8601DN','B8601DT','B8601DT'
,'B8601DZ','B8601DZ','DATEAMPM','DTDATE','DTMONYY','DTWKDATX','DTYEAR'
,'DTYYQC','E8601DN','E8601DN','E8601DT','E8601DT','E8601DZ','E8601DZ')
then return('DATETIME');
else if fmt in ('DATE','YYMMDD','B8601DA','B8601DA','DAY','DDMMYY'
,'DDMMYYB','DDMMYYC','DDMMYYD','DDMMYYN','DDMMYYP','DDMMYYS','DDMMYYx'
,'DOWNAME','E8601DA','E8601DA','JULDAY','JULIAN','MMDDYY','MMDDYYB'
,'MMDDYYC','MMDDYYD','MMDDYYN','MMDDYYP','MMDDYYS','MMDDYYx','MMYY'
,'MMYYC','MMYYD','MMYYN','MMYYP','MMYYS','MMYYx','MONNAME','MONTH'
,'MONYY','PDJULG','PDJULI','QTR','QTRR','WEEKDATE','WEEKDATX','WEEKDAY'
,'WEEKU','WEEKV','WEEKW','WORDDATE','WORDDATX','YEAR','YYMM','YYMMC'
,'YYMMD','YYMMDDB','YYMMDDC','YYMMDDD','YYMMDDN','YYMMDDP','YYMMDDS'
,'YYMMDDx','YYMMN','YYMMP','YYMMS','YYMMx','YYMON','YYQ','YYQC','YYQD'
,'YYQN','YYQP','YYQR','YYQRC','YYQRD','YYQRN','YYQRP','YYQRS','YYQRx'
,'YYQS','YYQx','YYQZ') then return('DATE');
else if fmt in ('TIME','B8601LZ','B8601LZ','B8601TM','B8601TM','B8601TZ'
,'B8601TZ','E8601LZ','E8601LZ','E8601TM','E8601TM','E8601TZ','E8601TZ'
,'HHMM','HOUR','MMSS','TIMEAMPM','TOD') then return('TIME');
else return('NUM');
end;
endsub;
%if &wrap=YES %then %do;
quit;
%end;
/* insert the CMPLIB if not already there */
%let cmpval=%sysfunc(getoption(cmplib));
%let found=0;
%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));
%let var=%scan(&cmpval,&i,%str( %(%)));
%if &var=&lib..&cat %then %let found=1;
%end;
%if &found=0 %then %do;
options insert=(CMPLIB=(&lib..&cat));
%end;
%mend mcf_getfmttype;
%macro mf_getVarFormat(libds /* two level ds name */
, var /* variable name from which to return the format */
, force=0
)/*/STORE SOURCE*/;
%local dsid vnum vformat rc vlen vtype;
/* Open dataset */
%let dsid = %sysfunc(open(&libds));
%if &dsid > 0 %then %do;
/* Get variable number */
%let vnum = %sysfunc(varnum(&dsid, &var));
/* Get variable format */
%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));
%else %do;
%put NOTE: Variable &var does not exist in &libds;
%let rc = %sysfunc(close(&dsid));
%return;
%end;
%end;
%else %do;
%put &sysmacroname: dataset &libds not opened! (rc=&dsid);
%put &sysmacroname: %sysfunc(sysmsg());
%return;
%end;
/* supply a default if no format available */
%if %length(&vformat)<2 & &force=1 %then %do;
%let vlen = %sysfunc(varlen(&dsid, &vnum));
%let vtype = %sysfunc(vartype(&dsid, &vnum.));
%if &vtype=C %then %let vformat=$&vlen..;
%else %let vformat=best.;
%end;
/* Close dataset */
%let rc = %sysfunc(close(&dsid));
/* Return variable format */
&vformat
%mend mf_getVarFormat;
%macro mf_getvarlist(libds
,dlm=%str( )
,quote=no
,typefilter=A
)/*/STORE SOURCE*/;
/* declare local vars */
%local outvar dsid nvars x rc dlm q var vtype;
/* credit Rowland Hale - byte34 is double quote, 39 is single quote */
%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));
%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));
/* open dataset in macro */
%let dsid=%sysfunc(open(&libds));
%if &dsid %then %do;
%let nvars=%sysfunc(attrn(&dsid,NVARS));
%if &nvars>0 %then %do;
/* add variables with supplied delimeter */
%do x=1 %to &nvars;
/* get variable type */
%let vtype=%sysfunc(vartype(&dsid,&x));
%if &vtype=&typefilter or &typefilter=A %then %do;
%let var=&q.%sysfunc(varname(&dsid,&x))&q.;
%if &var=&q&q %then %do;
%put &sysmacroname: Empty column found in &libds!;
%let var=&q. &q.;
%end;
%if %quote(&outvar)=%quote() %then %let outvar=&var;
%else %let outvar=&outvar.&dlm.&var.;
%end;
%end;
%end;
%let rc=%sysfunc(close(&dsid));
%end;
%else %do;
%put &sysmacroname: Unable to open &libds (rc=&dsid);
%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());
%let rc=%sysfunc(close(&dsid));
%end;
%do;%unquote(&outvar)%end;
%mend mf_getvarlist;
%macro mf_getvartype(libds /* two level name */
, var /* variable name from which to return the type */
)/*/STORE SOURCE*/;
%local dsid vnum vtype rc;
/* Open dataset */
%let dsid = %sysfunc(open(&libds));
%if &dsid. > 0 %then %do;
/* Get variable number */
%let vnum = %sysfunc(varnum(&dsid, &var));
/* Get variable type (C/N) */
%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));
%else %do;
%put NOTE: Variable &var does not exist in &libds;
%let vtype = %str( );
%end;
%end;
%else %do;
%put &sysmacroname: dataset &libds not opened! (rc=&dsid);
%put &sysmacroname: %sysfunc(sysmsg());
%return;
%end;
/* Close dataset */
%let rc = %sysfunc(close(&dsid));
/* Return variable type */
&vtype
%mend mf_getvartype;
%macro mp_ds2csv(ds
,dlm=COMMA
,outref=0
,outfile=
,outencoding=0
,headerformat=LABEL
,termstr=CRLF
)/*/STORE SOURCE*/;
%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;
%if not %sysfunc(exist(&ds)) %then %do;
%put %str(WARN)ING: &ds does not exist;
%return;
%end;
%if %index(&ds,.)=0 %then %let ds=WORK.&ds;
%if &outencoding=0 %then %let outencoding=;
%else %let outencoding=encoding=&outencoding;
%if &outref=0 %then %let outloc=&outfile;
%else %let outloc=&outref;
%if &headerformat=SASJS %then %do;
%let delim=",";
%let termstr=CRLF;
%mcf_getfmttype(wrap=YES)
%end;
%else %if &dlm=COMMA %then %let delim=",";
%else %let delim=";";
/* credit to mjsq - https://stackoverflow.com/a/55642267 */
/* first get headers */
data _null_;
file &outloc &outencoding lrecl=32767 termstr=&termstr;
length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;
call missing(of _all_);
dsid=open("&ds.","i");
num=attrn(dsid,"nvars");
dlm=&delim;
do i=1 to num;
varnm=upcase(varname(dsid,i));
if i=num then dlm='';
%if &headerformat=NAME %then %do;
header=cats(varnm,dlm);
%end;
%else %if &headerformat=LABEL %then %do;
header = cats(coalescec(varlabel(dsid,i),varnm),dlm);
%end;
%else %if &headerformat=SASJS %then %do;
if vartype(dsid,i)='C' then header=cats(varnm,':$char',varlen(dsid,i),'.');
else do;
vfmt=coalescec(varfmt(dsid,i),'0');
fmttype=mcf_getfmttype(vfmt);
if fmttype='DATE' then header=cats(varnm,':date9.');
else if fmttype='DATETIME' then header=cats(varnm,':E8601DT26.6');
else if fmttype='TIME' then header=cats(varnm,':TIME12.');
else header=cats(varnm,':best.');
end;
%end;
%else %do;
%put &sysmacroname: Invalid headerformat value (&headerformat);
%return;
%end;
put header @;
end;
rc=close(dsid);
run;
%let varlist=%mf_getvarlist(&ds);
%let vcnt=%sysfunc(countw(&varlist));
/**
* The $quote modifier (without a width) will take the length from the variable
* and increase by two. However this will lead to truncation where the value
* contains double quotes (which are doubled up). To get around this, scan the
* data to see the max number of double quotes, so that the appropriate width
* can be applied in the subsequent step.
*/
data _null_;
set &ds end=last;
%do i=1 %to &vcnt;
%let var=%scan(&varlist,&i);
%if %mf_getvartype(&ds,&var)=C %then %do;
%let dsv1=%mf_getuniquename(prefix=csvcol1_);
%let dsv2=%mf_getuniquename(prefix=csvcol2_);
retain &dsv1 0;
&dsv2=length(&var)+countc(&var,'"');
if &dsv2>&dsv1 then &dsv1=&dsv2;
if last then call symputx(
"vlen&i"
/* should be no shorter than varlen, and no longer than 32767 */
,cats('$quote',min(&dsv1+2,32767),'.')
,'l'
);
%end;
%end;
%let vat=@;
%let vcom=&delim;
%let vmiss=%mf_getuniquename(prefix=csvcol3_);
/* next, export data */
data _null_;
set &ds.;
file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;
if _n_=1 then &vmiss=' ';
%do i=1 %to &vcnt;
%let var=%scan(&varlist,&i);
%if &i=&vcnt %then %do;
%let vat=;
%let vcom=;
%end;
%if %mf_getvartype(&ds,&var)=N %then %do;
%if &headerformat = SASJS %then %do;
%let vcom=&delim;
%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));
%if &fmttype=DATE %then %let vfmt=DATE9.;
%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;
%else %if &fmttype=TIME %then %let vfmt=TIME12.;
%else %do;
%let vfmt=;
%let vcom=;
%end;
%end;
%else %let vcom=;
/* must use period - in order to work in both 9.4 and Viya 3.5 */
if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;
&vmiss=cats('.',&var);
put &vmiss &vat;
end;
else put &var &vfmt &vcom &vat;
%end;
%else %do;
%if &i ne &vcnt %then %let vcom=&delim;
put &var &&vlen&i &vcom &vat;
%end;
%end;
run;
%mend mp_ds2csv;
%macro ms_runstp(pgm
,debug=131
,inputparams=_null_
,inputfiles=_null_
,outref=outweb
,outlogds=_null_
,mdebug=0
);
%local dbg mainref authref boundary;
%let mainref=%mf_getuniquefileref();
%let authref=%mf_getuniquefileref();
%let boundary=%mf_getuniquename();
%if &inputparams=0 %then %let inputparams=_null_;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%mp_abort(iftrue=("&pgm"="")
,mac=&sysmacroname
,msg=%str(Program not provided)
)
/* avoid sending bom marker to API */
%local optval;
%let optval=%sysfunc(getoption(bomfile));
options nobomfile;
/* add params */
data _null_;
file &mainref termstr=crlf lrecl=32767 mod;
length line $1000 name $32 value $32767;
if _n_=1 then call missing(of _all_);
set &inputparams;
put "--&boundary";
line=cats('Content-Disposition: form-data; name="',name,'"');
put line;
put ;
put value;
run;
/* parse input file list */
%local webcount;
%let webcount=0;
data _null_;
set &inputfiles end=last;
length fileref $8 name $32 filename $256;
call symputx(cats('webref',_n_),fileref,'l');
call symputx(cats('webname',_n_),name,'l');
call symputx(cats('webfilename',_n_),filename,'l');
if last then do;
call symputx('webcount',_n_);
call missing(of _all_);
end;
run;
/* write out the input files */
%local i;
%do i=1 %to &webcount;
data _null_;
file &mainref termstr=crlf lrecl=32767 mod;
infile &&webref&i lrecl=32767;
if _n_ = 1 then do;
length line $32767;
line=cats(
'Content-Disposition: form-data; name="'
,"&&webname&i"
,'"; filename="'
,"&&webfilename&i"
,'"'
);
put "--&boundary";
put line;
put "Content-Type: text/plain";
put ;
end;
input;
put _infile_; /* add the actual file to be sent */
run;
%end;
data _null_;
file &mainref termstr=crlf mod;
put "--&boundary--";
run;
data _null_;
file &authref lrecl=1000;
infile "&_sasjs_tokenfile" lrecl=1000;
input;
if _n_=1 then put "Content-Type: multipart/form-data; boundary=&boundary";
put _infile_;
run;
%if &mdebug=1 %then %do;
data _null_;
infile &authref;
input;
put _infile_;
data _null_;
infile &mainref;
input;
put _infile_;
run;
%end;
%local resp_path;
%let resp_path=%sysfunc(pathname(work))/%mf_getuniquename();
filename &outref "&resp_path" lrecl=32767;
/* prepare request*/
proc http method='POST' headerin=&authref in=&mainref out=&outref
url="&_sasjs_apiserverurl.&_sasjs_apipath?_program=&pgm%str(&)_debug=131";
%if &mdebug=1 %then %do;
debug level=2;
%end;
run;
%if (&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)
or &mdebug=1
%then %do;
data _null_;infile &outref;input;putlog _infile_;run;
%end;
%mp_abort(
iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* reset options */
options &optval;
%if &outlogds ne _null_ or &mdebug=1 %then %do;
%local matchstr chopout;
%let matchstr=SASJS_LOGS_SEPARATOR_163ee17b6ff24f028928972d80a26784;
%let chopout=%sysfunc(pathname(work))/%mf_getuniquename(prefix=chop);
%mp_chop("&resp_path"
,matchvar=matchstr
,keep=LAST
,matchpoint=END
,outfile="&chopout"
,mdebug=&mdebug
)
data &outlogds;
infile "&chopout" lrecl=2000;
length line $2000;
line=_infile_;
%if &mdebug=1 %then %do;
putlog line=;
%end;
run;
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &authref;
filename &mainref;
%end;
%mend ms_runstp;
%macro ms_testservice(program,
inputfiles=0,
inputdatasets=0,
inputparams=0,
debug=0,
mdebug=0,
outlib=0,
outref=0,
outlogds=_null_
)/*/STORE SOURCE*/;
%local dbg i var ds1 fref1 chopout1 chopout2;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
/* convert inputdatasets to filerefs */
%if "&inputdatasets" ne "0" %then %do;
%if %quote(&inputfiles)=0 %then %let inputfiles=;
%do i=1 %to %sysfunc(countw(&inputdatasets,%str( )));
%let var=%scan(&inputdatasets,&i,%str( ));
%local dsref&i;
%let dsref&i=%mf_getuniquefileref();
%mp_ds2csv(&var,outref=&&dsref&i,headerformat=SASJS)
%let inputfiles=&inputfiles &&dsref&i:%scan(&var,-1,.);
%end;
%end;
/* parse the filerefs - convert to a dataset */
%let ds1=%mf_getuniquename();
data &ds1;
length fileref $8 name $32 filename $256 var $300;
if "&inputfiles" ne "0" then do;
webcount=countw("&inputfiles");
do i=1 to webcount;
var=scan("&inputfiles",i,' ');
fileref=scan(var,1,':');
name=scan(var,2,':');
filename=cats(name,'.csv');
output;
end;
end;
run;
/* execute the STP */
%let fref1=%mf_getuniquefileref();
%ms_runstp(&program
,debug=&debug
,inputparams=&inputparams
,inputfiles=&ds1
,outref=&fref1
,mdebug=&mdebug
,outlogds=&outlogds
)
/* chop out JSON section */
%local matchstr chopout;
%let matchstr=SASJS_LOGS_SEPARATOR_163ee17b6ff24f028928972d80a26784;
%let chopout=%sysfunc(pathname(work))/%mf_getuniquename(prefix=chop);
%mp_chop("%sysfunc(pathname(&fref1,F))"
,matchvar=matchstr
,keep=FIRST
,matchpoint=START
,offset=-1
,outfile="&chopout"
,mdebug=&mdebug
)
%if &outlib ne 0 %then %do;
libname &outlib json "&chopout";
%end;
%if &outref ne 0 %then %do;
filename &outref "&chopout";
%end;
%if &mdebug=0 %then %do;
filename &webref clear;
filename &fref1 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend ms_testservice;
%macro mf_existfileref(fref
)/*/STORE SOURCE*/;
%local rc;
%let rc=%sysfunc(fileref(&fref));
%if &rc=0 %then %do;
1
%end;
%else %if &rc<0 %then %do;
%put &sysmacroname: Fileref &fref exists but the underlying file does not;
1
%end;
%else %do;
0
%end;
%mend mf_existfileref;
%macro mv_getjobresult(uri=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
,result=WEBOUT_JSON
,outref=0
,outlib=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
/* validation in datastep for better character safety */
%local errmsg errflg;
data _null_;
uri=symget('uri');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
if scan(uri,-1)='state' or scan(uri,1) ne 'jobExecution' then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /jobExecution/jobs/$$$$UUID$$$$"
!!" but is actually like: &uri",'l');
end;
run;
%mp_abort(iftrue=(&errflg=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
%if &outref ne 0 and %mf_existfileref(&outref) ne 1 %then %do;
filename &outref temp;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* fetch job info */
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri&uri";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%if &mdebug=1 %then %do;
data _null_;
infile &fname1 lrecl=32767;
input;
putlog _infile_;
run;
%end;
/* extract results link */
%local lib1 resuri;
%let lib1=%mf_getuniquelibref();
libname &lib1 JSON fileref=&fname1;
data _null_;
set &lib1..results;
call symputx('resuri',_&result,'l');
&dbg putlog "&sysmacroname results: " (_all_)(=);
run;
%mp_abort(iftrue=("&resuri"=".")
,mac=&sysmacroname
,msg=%str(Variable _&result did not exist in the response json)
)
/* extract results */
%local fname2;
%let fname2=%mf_getuniquefileref();
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&resuri/content?limit=10000";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
/* send one char at a time as the json can be very wide */
data _null_;
infile &fname2 recfm=n;
input char $char1. ;
putlog char $char1. @;
run;
%end;
%if &outref ne 0 %then %do;
filename &outref temp;
%mp_binarycopy(inref=&fname2,outref=&outref)
%end;
%if &outlib ne 0 %then %do;
libname &outlib JSON fileref=&fname2;
%end;
%if &mdebug=0 %then %do;
filename &fname1 clear;
filename &fname2 clear;
libname &lib1 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_getjobresult;
%macro mf_getattrn(
libds
,attr
)/*/STORE SOURCE*/;
%local dsid rc;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid = 0 %then %do;
%put %str(WARN)ING: Cannot open %trim(&libds), system message below;
%put %sysfunc(sysmsg());
-1
%end;
%else %do;
%sysfunc(attrn(&dsid,&attr))
%let rc=%sysfunc(close(&dsid));
%end;
%mend mf_getattrn;
%macro mf_nobs(libds
)/*/STORE SOURCE*/;
%mf_getattrn(&libds,NLOBS)
%mend mf_nobs;
%macro mf_existvarlist(libds, varlist
)/*/STORE SOURCE*/;
%if %str(&libds)=%str() or %str(&varlist)=%str() %then %do;
%mf_abort(msg=No value provided to libds(&libds) or varlist (&varlist)!
,mac=mf_existvarlist.sas)
%end;
%local dsid rc i var found;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid=0 %then %do;
%put %str(WARN)ING: unable to open &libds in mf_existvarlist (&dsid);
%end;
%if %sysfunc(attrn(&dsid,NVARS))=0 %then %do;
%put MF_EXISTVARLIST: No variables in &libds ;
0
%return;
%end;
%else %do i=1 %to %sysfunc(countw(&varlist));
%let var=%scan(&varlist,&i);
%if %sysfunc(varnum(&dsid,&var))=0 %then %do;
%let found=&found &var;
%end;
%end;
%let rc=%sysfunc(close(&dsid));
%if %str(&found)=%str() %then %do;
1
%end;
%else %do;
0
%put Vars not found: &found;
%end;
%mend mf_existvarlist;
/** @endcond */
%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
/** @cond */
%macro mf_existvar(libds /* 2 part dataset name */
, var /* variable name */
)/*/STORE SOURCE*/;
%local dsid rc;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid=0 %then %do;
%put %sysfunc(sysmsg());
0
%end;
%else %if %length(&var)=0 %then %do;
0
%let rc=%sysfunc(close(&dsid));
%end;
%else %do;
%sysfunc(varnum(&dsid,&var))
%let rc=%sysfunc(close(&dsid));
%end;
%mend mf_existvar;
/** @endcond */
%macro mv_getjoblog(uri=0,outref=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg libref1 libref2 loglocation fname1 fname2;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
/* validation in datastep for better character safety */
%local errmsg errflg;
data _null_;
uri=symget('uri');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
if scan(uri,-1)='state' or scan(uri,1) ne 'jobExecution' then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /jobExecution/jobs/$$$$UUID$$$$"
!!" but is actually like:"!!uri,'l');
end;
run;
%mp_abort(iftrue=(&errflg=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
%mp_abort(iftrue=(&outref=0)
,mac=&sysmacroname
,msg=%str(Output fileref should be provided)
)
%if %mf_existfileref(&outref) ne 1 %then %do;
filename &outref temp;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* prepare request*/
%let fname1=%mf_getuniquefileref();
%let fname2=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri&uri";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log loc from &uri;
data _null_;infile &fname1;input;putlog _infile_;run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..root;
call symputx('loglocation',loglocation,'l');
run;
/* validate log path*/
%let errflg=1;
%let errmsg=No loglocation entry in &fname1 fileref;
data _null_;
uri=symget('loglocation');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
else if (scan(uri,1,'/') ne 'compute' or scan(uri,2,'/') ne 'sessions')
and (scan(uri,1,'/') ne 'files' or scan(uri,2,'/') ne 'files')
then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /compute/sessions/$$$$UUID$$$$/jobs/$$$$UUID$$$$"
!!" or /files/files/$$$$UUID$$$$"
!!" but is actually like:"!!uri,'l');
end;
else do;
call symputx('errflg',0,'l');
call symputx('logloc',uri,'l');
end;
run;
%mp_abort(iftrue=(%str(&errflg)=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
/* we have a log uri - now fetch the log */
%&dbg.put &sysmacroname: querying &base_uri&logloc/content;
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&logloc/content?limit=10000";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log content from &base_uri&logloc/content;
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE=400 %then %do;
/* fetch log from parent session */
%let logloc=%substr(&logloc,1,%index(&logloc,%str(/jobs/))-1);
%&dbg.put &sysmacroname: Now querying &base_uri&logloc/log/content;
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&logloc/log/content?limit=10000";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log content from &base_uri&logloc/log/content;
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%end;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201
%then %do;
%if &mdebug ne 1 %then %do; /* have already output above */
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%mp_abort(mac=&sysmacroname
,msg=%str(logfetch: &SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
data _null_;
file &outref mod;
if _n_=1 then do;
put "/** SASJS Viya Job Log Extract start: &uri **/";
end;
set &libref2..items end=last;
%if &mdebug=1 %then %do;
putlog line;
%end;
put line;
if last then do;
put "/** SASJS Viya Job Log Extract end: &uri **/";
end;
run;
%if &mdebug=0 %then %do;
filename &fname1 clear;
filename &fname2 clear;
libname &libref1 clear;
libname &libref2 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_getjoblog;
%macro mv_jobwaitfor(action
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,inds=0
,outds=work.mv_jobwaitfor
,outref=0
,raise_err=0
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&inds"="0")
,mac=&sysmacroname
,msg=%str(input dataset not provided)
)
%mp_abort(iftrue=(%mf_existvar(&inds,uri)=0)
,mac=&sysmacroname
,msg=%str(The URI variable was not found in the input dataset(&inds))
)
%mp_abort(iftrue=(%mf_existvar(&inds,_program)=0)
,mac=&sysmacroname
,msg=%str(The _PROGRAM variable was not found in the input dataset(&inds))
)
%if %mf_nobs(&inds)=0 %then %do;
%put NOTE: Zero observations in &inds, &sysmacroname will now exit;
%return;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
data _null_;
length jobparams $32767;
set &inds end=last;
call symputx(cats('joburi',_n_),substr(uri,1,55),'l');
call symputx(cats('jobname',_n_),_program,'l');
call symputx(cats('jobparams',_n_),jobparams,'l');
if last then call symputx('uricnt',_n_,'l');
run;
%local runcnt;
%if &action=ALL %then %let runcnt=&uricnt;
%else %if &action=ANY %then %let runcnt=1;
%else %let runcnt=&uricnt;
%local fname0 ;
%let fname0=%mf_getuniquefileref();
data &outds;
format _program uri $128. state $32. stateDetails $32. timestamp datetime19.
jobparams $32767.;
call missing (of _all_);
stop;
run;
%local i;
%do i=1 %to &uricnt;
%if "&&joburi&i" ne "0" %then %do;
proc http method='GET' out=&fname0 &oauth_bearer url="&base_uri/&&joburi&i";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end; ;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201
%then %do;
data _null_;infile &fname0;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let status=notset;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 json fileref=&fname0;
data _null_;
length state stateDetails $32;
set &libref1..root;
call symputx('status',state,'l');
call symputx('stateDetails',stateDetails,'l');
run;
libname &libref1 clear;
%if &status=completed or &status=failed or &status=canceled %then %do;
%local plainuri;
%let plainuri=%substr(&&joburi&i,1,55);
proc sql;
insert into &outds set
_program="&&jobname&i",
uri="&plainuri",
state="&status",
stateDetails=symget("stateDetails"),
timestamp=datetime(),
jobparams=symget("jobparams&i");
%let joburi&i=0; /* do not re-check */
/* fetch log */
%if %str(&outref) ne 0 %then %do;
%mv_getjoblog(uri=&plainuri,outref=&outref,mdebug=&mdebug)
%end;
%end;
%else %if &status=idle or &status=pending or &status=running %then %do;
data _null_;
call sleep(1,1);
run;
%end;
%else %do;
%mp_abort(mac=&sysmacroname
,msg=%str(status &status not expected!!)
)
%end;
%if (&raise_err) %then %do;
%if (&status = canceled or &status = failed or %length(&stateDetails)>0)
%then %do;
%if ("&stateDetails" = "%str(war)ning") %then %let SYSCC=4;
%else %let SYSCC=5;
%put %str(ERR)OR: Job &&jobname&i. did not complete. &stateDetails;
%return;
%end;
%end;
%end;
%if &i=&uricnt %then %do;
%local goback;
%let goback=0;
proc sql noprint;
select count(*) into:goback from &outds;
%if &goback lt &runcnt %then %let i=0;
%end;
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname0 clear;
%end;
%mend mv_jobwaitfor;
%macro mf_isblank(param
)/*/STORE SOURCE*/;
%sysevalf(%superq(param)=,boolean)
%mend mf_isblank;
%macro mv_getfoldermembers(root=/
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,outds=mv_getfolders
);
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%if %mf_isblank(&root)=1 %then %let root=/;
options noquotelenmax;
/* request the client details */
%local fname1 libref1;
%let fname1=%mf_getuniquefileref();
%let libref1=%mf_getuniquelibref();
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%if "&root"="/" %then %do;
/* if root just list root folders */
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/rootFolders?limit=1000";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
libname &libref1 JSON fileref=&fname1;
data &outds;
set &libref1..items;
run;
%end;
%else %do;
/* first get parent folder id */
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&root";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
libname &libref1 JSON fileref=&fname1;
/* now get the followon link to list members */
%local href cnt;
%let cnt=0;
data _null_;
length rel href $512;
call missing(rel,href);
set &libref1..links;
if rel='members' then do;
url=cats("'","&base_uri",href,"?limit=10000'");
call symputx('href',url,'l');
call symputx('cnt',1,'l');
end;
run;
%if &cnt=0 %then %do;
%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;
%return;
%end;
%local fname2 libref2;
%let fname2=%mf_getuniquefileref();
%let libref2=%mf_getuniquelibref();
proc http method='GET' out=&fname2 &oauth_bearer
url=%unquote(%superq(href));
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
libname &libref2 JSON fileref=&fname2;
data &outds;
length id $36 name $128 uri $64 type $32 description $256;
if _n_=1 then call missing (of _all_);
set &libref2..items;
run;
filename &fname2 clear;
libname &libref2 clear;
%end;
/* clear refs */
filename &fname1 clear;
libname &libref1 clear;
%mend mv_getfoldermembers;
%macro mv_jobexecute(path=0
,name=0
,contextName=SAS Job Execution compute context
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,paramstring=0
,outds=work.mv_jobexecute
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&path"="0")
,mac=&sysmacroname
,msg=%str(Path not provided)
)
%mp_abort(iftrue=("&name"="0")
,mac=&sysmacroname
,msg=%str(Job Name not provided)
)
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
data;run;
%local foldermembers;
%let foldermembers=&syslast;
%mv_getfoldermembers(root=&path
,access_token_var=&access_token_var
,grant_type=&grant_type
,outds=&foldermembers
)
%local joburi;
%let joburi=0;
data _null_;
length name uri $512;
call missing(name,uri);
set &foldermembers;
if name="&name" and uri=:'/jobDefinitions/definitions'
then call symputx('joburi',uri);
run;
%mp_abort(iftrue=("&joburi"="0")
,mac=&sysmacroname
,msg=%str(Job &path/&name not found)
)
/* prepare request*/
%local fname0 fname1;
%let fname0=%mf_getuniquefileref();
%let fname1=%mf_getuniquefileref();
data _null_;
file &fname0;
length joburi contextname $128 paramstring $32765;
joburi=quote(trim(symget('joburi')));
contextname=quote(trim(symget('contextname')));
_program=quote("&path/&name");
paramstring=symget('paramstring');
put '{"jobDefinitionUri":' joburi ;
put ' ,"arguments":{"_contextName":' contextname;
put ' ,"_program":' _program;
if paramstring ne "0" then do;
put ' ,' paramstring;
end;
put '}}';
run;
proc http method='POST' in=&fname0 out=&fname1 &oauth_bearer
url="&base_uri/jobExecution/jobs";
headers "Content-Type"="application/vnd.sas.job.execution.job.request+json"
"Accept"="application/vnd.sas.job.execution.job+json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname0;input;putlog _infile_;run;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%local libref;
%let libref=%mf_getuniquelibref();
libname &libref JSON fileref=&fname1;
data &outds;
set &libref..links;
_program="&path/&name";
run;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname0 clear;
filename &fname1 clear;
libname &libref;
%end;
%mend mv_jobexecute;
%macro mv_jobflow(inds=0,outds=work.mv_jobflow
,maxconcurrency=8
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,outref=0
,raise_err=0
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%put inds vars:;
data _null_;
set &inds;
putlog (_all_)(=);
run;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&inds"="0")
,mac=&sysmacroname
,msg=%str(Input dataset was not provided)
)
%mp_abort(iftrue=(%mf_existVarList(&inds,_PROGRAM)=0)
,mac=&sysmacroname
,msg=%str(The _PROGRAM column must exist on input dataset &inds)
)
%mp_abort(iftrue=(&maxconcurrency<1)
,mac=&sysmacroname
,msg=%str(The maxconcurrency variable should be a positive integer)
)
/* set defaults if not provided */
%if %mf_existVarList(&inds,_CONTEXTNAME FLOW_ID)=0 %then %do;
data &inds;
%if %mf_existvarList(&inds,_CONTEXTNAME)=0 %then %do;
length _CONTEXTNAME $128;
retain _CONTEXTNAME "SAS Job Execution compute context";
%end;
%if %mf_existvarList(&inds,FLOW_ID)=0 %then %do;
retain FLOW_ID 0;
%end;
set &inds;
&dbg. putlog (_all_)(=);
run;
%end;
%local missings;
proc sql noprint;
select count(*) into: missings
from &inds
where flow_id is null or _program is null;
%mp_abort(iftrue=(&missings>0)
,mac=&sysmacroname
,msg=%str(input dataset has &missings missing values for FLOW_ID or _PROGRAM)
)
%if %mf_nobs(&inds)=0 %then %do;
%put No observations in &inds! Leaving macro &sysmacroname;
%return;
%end;
/* ensure output table is available */
data &outds;run;
proc sql;
drop table &outds;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* get flows */
proc sort data=&inds;
by flow_id;
run;
data _null_;
set &inds (keep=flow_id) end=last;
by flow_id;
if last.flow_id then do;
cnt+1;
call symputx(cats('flow',cnt),flow_id,'l');
end;
if last then call symputx('flowcnt',cnt,'l');
run;
/* prepare temporary datasets and frefs */
%local fid jid jds jjson jdsapp jdsrunning jdswaitfor jfref;
data;run;%let jds=&syslast;
data;run;%let jjson=&syslast;
data;run;%let jdsapp=&syslast;
data;run;%let jdsrunning=&syslast;
data;run;%let jdswaitfor=&syslast;
%let jfref=%mf_getuniquefileref();
/* start loop */
%do fid=1 %to &flowcnt;
%if not ( &raise_err and &syscc ) %then %do;
%put preparing job attributes for flow &&flow&fid;
%local jds jcnt;
data &jds(drop=_contextName _program);
set &inds(where=(flow_id=&&flow&fid));
if _contextName='' then _contextName="SAS Job Execution compute context";
call symputx(cats('job',_n_),_program,'l');
call symputx(cats('context',_n_),_contextName,'l');
call symputx('jcnt',_n_,'l');
&dbg. if _n_= 1 then putlog "Loop &fid";
&dbg. putlog (_all_)(=);
run;
%put exporting job variables in json format;
%do jid=1 %to &jcnt;
data &jjson;
set &jds;
if _n_=&jid then do;
output;
stop;
end;
run;
proc json out=&jfref;
export &jjson / nosastags fmtnumeric;
run;
data _null_;
infile &jfref lrecl=32767;
input;
jparams=cats('jparams',symget('jid'));
call symputx(jparams,substr(_infile_,3,length(_infile_)-4));
run;
%local jobuid&jid;
%let jobuid&jid=0; /* used in next loop */
%end;
%local concurrency completed;
%let concurrency=0;
%let completed=0;
proc sql; drop table &jdsrunning;
%do jid=1 %to &jcnt;
/**
* now we can execute the jobs up to the maxconcurrency setting
*/
%if "&&job&jid" ne "0" %then %do; /* this var is zero if job finished */
/* check to see if the job finished in the previous round */
%if %sysfunc(exist(&outds))=1 %then %do;
%local jobcheck; %let jobcheck=0;
proc sql noprint;
select count(*) into: jobcheck
from &outds where uuid="&&jobuid&jid";
%if &jobcheck>0 %then %do;
%put &&job&jid in flow &fid with uid &&jobuid&jid completed!;
%let job&jid=0;
%end;
%end;
/* check if job was triggered and, if
so, if we have enough slots to run? */
%if ("&&jobuid&jid"="0") and (&concurrency<&maxconcurrency) %then %do;
/* But only start if no issues detected so far */
%if not ( &raise_err and &syscc ) %then %do;
%local jobname jobpath;
%let jobname=%scan(&&job&jid,-1,/);
%let jobpath=
%substr(&&job&jid,1,%length(&&job&jid)-%length(&jobname)-1);
%put executing &jobpath/&jobname with paramstring &&jparams&jid;
%mv_jobexecute(path=&jobpath
,name=&jobname
,paramstring=%superq(jparams&jid)
,outds=&jdsapp
,contextname=&&context&jid
)
data &jdsapp;
format jobparams $32767.;
set &jdsapp(where=(method='GET' and rel='state'));
jobparams=symget("jparams&jid");
/* uri here has the /state suffix */
uuid=scan(uri,-2,'/');
call symputx("jobuid&jid",uuid,'l');
run;
proc append base=&jdsrunning data=&jdsapp;
run;
%let concurrency=%eval(&concurrency+1);
/* sleep one second after every request to smooth the impact */
data _null_;
call sleep(1,1);
run;
%end;
%else %do; /* Job was skipped due to problems */
%put jobid &&job&jid in flow &fid skipped due to SYSCC (&syscc);
%let completed = %eval(&completed+1);
%let job&jid=0; /* Indicate job has finished */
%end;
%end;
%end;
%if &jid=&jcnt %then %do;
/* we are at the end of the loop - check which jobs have finished */
%mv_jobwaitfor(ANY,inds=&jdsrunning,outds=&jdswaitfor,outref=&outref
,raise_err=&raise_err,mdebug=&mdebug)
%local done;
%let done=%mf_nobs(&jdswaitfor);
%if &done>0 %then %do;
%let completed=%eval(&completed+&done);
%let concurrency=%eval(&concurrency-&done);
data &jdsapp;
set &jdswaitfor;
flow_id=&&flow&fid;
uuid=scan(uri,-1,'/');
run;
proc append base=&outds data=&jdsapp;
run;
%end;
proc sql;
delete from &jdsrunning
where uuid in (select uuid from &outds
where state in ('canceled','completed','failed')
);
/* loop again if jobs are left */
%if &completed < &jcnt %then %do;
%let jid=0;
%put looping flow &fid again;
%put &completed of &jcnt jobs completed, &concurrency jobs running;
%end;
%end;
%end;
%end;
%else %do;
%put Flow &&flow&fid skipped due to SYSCC (&syscc);
%end;
/* back up and execute the next flow */
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_jobflow;
%macro mx_testservice(program,
inputfiles=0,
inputdatasets=0,
inputparams=0,
debug=log,
mdebug=0,
outlib=0,
outref=0,
viyaresult=WEBOUT_JSON,
viyacontext=SAS Job Execution compute context
);
%local dbg pcnt fref1 fref2 webref webrefpath i webcount var platform;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
/* sanitise inputparams */
%let pcnt=0;
%if &inputparams ne 0 %then %do;
data _null_;
set &inputparams;
if not nvalid(name,'v7') then putlog (_all_)(=);
else if name in (
'program','inputfiles','inputparams','debug','outlib','outref'
) then putlog (_all_)(=);
else do;
x+1;
call symputx(name,quote(cats(value)),'l');
call symputx(cats('pval',x),name,'l');
call symputx('pcnt',x,'l');
end;
run;
%mp_abort(iftrue= (%mf_nobs(&inputparams) ne &pcnt)
,mac=&sysmacroname
,msg=%str(Invalid values in &inputparams)
)
%end;
/* convert inputdatasets to filerefs */
%if "&inputdatasets" ne "0" %then %do;
%if %quote(&inputfiles)=0 %then %let inputfiles=;
%do i=1 %to %sysfunc(countw(&inputdatasets,%str( )));
%let var=%scan(&inputdatasets,&i,%str( ));
%local dsref&i;
%let dsref&i=%mf_getuniquefileref();
%mp_ds2csv(&var,outref=&&dsref&i,headerformat=SASJS)
%let inputfiles=&inputfiles &&dsref&i:%scan(&var,-1,.);
%end;
%end;
%let platform=%mf_getplatform();
%let fref1=%mf_getuniquefileref();
%let fref2=%mf_getuniquefileref();
%let webref=%mf_getuniquefileref();
%let webrefpath=%sysfunc(pathname(work))/%mf_getuniquename();
/* mp_chop requires a physical path as input */
filename &webref "&webrefpath";
%if &platform=SASMETA %then %do;
/* parse the input files */
%if %quote(&inputfiles) ne 0 %then %do;
%let webcount=%sysfunc(countw(&inputfiles));
%put &=webcount;
%do i=1 %to &webcount;
%let var=%scan(&inputfiles,&i,%str( ));
%local webfref&i webname&i;
%let webref&i=%scan(&var,1,%str(:));
%let webname&i=%scan(&var,2,%str(:));
%put webref&i=&&webref&i;
%put webname&i=&&webname&i;
%end;
%end;
%else %let webcount=0;
proc stp program="&program";
inputparam _program="&program"
%do i=1 %to &webcount;
%if &webcount=1 %then %do;
_webin_fileref="&&webref&i"
_webin_name="&&webname&i"
%end;
%else %do;
_webin_fileref&i="&&webref&i"
_webin_name&i="&&webname&i"
%end;
%end;
_webin_file_count="&webcount"
_debug="&debug"
%do i=1 %to &pcnt;
/* resolve name only, proc stp fetches value */
&&pval&i=&&&&&&pval&i
%end;
;
%do i=1 %to &webcount;
inputfile &&webref&i;
%end;
outputfile _webout=&webref;
run;
data _null_;
infile &webref;
file &fref1;
input;
length line $10000;
if index(_infile_,'>>weboutBEGIN<<') then do;
line=tranwrd(_infile_,'>>weboutBEGIN<<','');
put line;
end;
else if index(_infile_,'>>weboutEND<<') then do;
line=tranwrd(_infile_,'>>weboutEND<<','');
put line;
stop;
end;
else put _infile_;
run;
data _null_;
infile &fref1;
input;
put _infile_;
run;
%if &outlib ne 0 %then %do;
libname &outlib json (&fref1);
%end;
%if &outref ne 0 %then %do;
filename &outref temp;
%mp_binarycopy(inref=&webref,outref=&outref)
%end;
%end;
%else %if &platform=SASVIYA %then %do;
/* prepare inputparams */
%local ds1;
%let ds1=%mf_getuniquename();
%if "&inputparams" ne "0" %then %do;
proc transpose data=&inputparams out=&ds1;
id name;
var value;
run;
%end;
%else %do;
data &ds1;run;
%end;
/* parse the input files - convert to sasjs params */
%local webcount i var sasjs_tables;
%if %quote(&inputfiles) ne 0 %then %do;
%let webcount=%sysfunc(countw(&inputfiles));
%put &=webcount;
%do i=1 %to &webcount;
%let var=%scan(&inputfiles,&i,%str( ));
%local webfref&i webname&i sasjs&i.data;
%let webref&i=%scan(&var,1,%str(:));
%let webname&i=%scan(&var,2,%str(:));
%put webref&i=&&webref&i;
%put webname&i=&&webname&i;
%let sasjs_tables=&sasjs_tables &&webname&i;
data _null_;
infile &&webref&i lrecl=32767;
input;
if _n_=1 then call symputx("sasjs&i.data",_infile_);
else call symputx(
"sasjs&i.data",cats(symget("sasjs&i.data"),'0D0A'x,_infile_)
);
putlog "&sysmacroname infile: " _infile_;
run;
data &ds1;
set &ds1;
length sasjs&i.data $32767 sasjs_tables $1000;
sasjs&i.data=symget("sasjs&i.data");
sasjs_tables=symget("sasjs_tables");
run;
%end;
%end;
%else %let webcount=0;
data &ds1;
retain _program "&program";
retain _contextname "&viyacontext";
set &ds1;
putlog "&sysmacroname inputparams:";
putlog (_all_)(=);
run;
%mv_jobflow(inds=&ds1
,maxconcurrency=1
,outds=work.results
,outref=&fref1
,mdebug=&mdebug
)
/* show the log */
data _null_;
infile &fref1;
input;
putlog _infile_;
run;
/* get the uri to fetch results */
data _null_;
set work.results;
call symputx('uri',uri);
putlog "&sysmacroname: fetching results for " uri;
run;
/* fetch results from webout.json */
%mv_getjobresult(uri=&uri,
result=&viyaresult,
outref=&outref,
outlib=&outlib,
mdebug=&mdebug
)
%end;
%else %if &platform=SASJS %then %do;
%ms_testservice(&program
,inputfiles=&inputfiles
,inputdatasets=&inputdatasets
,inputparams=&inputparams
,debug=&debug
,mdebug=&mdebug
,outlib=&outlib
,outref=&outref
)
%end;
%else %do;
%put %str(ERR)OR: Unrecognised platform: &platform;
%end;
%if &mdebug=0 %then %do;
filename &fref1 clear;
%if &platform ne SASJS %then %do;
filename &fref2 clear;
filename &webref clear;
%end;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mx_testservice;
* BuildInit start;
/**
@file buildinitviya.sas
@brief initialisation for viya build program
**/
options nonotes nomprint;
* BuildInit end;
%let path=services;
%let filename=clickme.html;
filename filecode temp lrecl=32767;
data _null_;
file filecode;
put 'PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1ldGEgbmFtZT0iZGVzY3Jp'@;
put 'cHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iPgogICAgPG1ldGEgaXRlbXByb3A9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZp'@;
put 'ZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8vZGVtby5kYXRh'@;
put 'Y29udHJvbGxlci5pbyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9u'@;
put 'IiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyI+CgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQi'@;
put 'IGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CiAgICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iL1NBU0pvYkV4ZWN1'@;
put 'dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2Zhdmljb24uaWNvIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL3N0eWxlcy41OWRjMTE5NDdiODMxNDNj'@;
put 'LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIg'@;
put 'U0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNlci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1'@;
put 'cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJlc3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3Rh'@;
put 'Z2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAgICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxib2R5IGNsYXNzPSJtLTAiPjxzYXNqcyBzZXJ2ZXJ1cmw9'@;
put 'IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTVklZQSIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91'@;
put 'cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI+CiAgPC9zYXNqcz4KCiAgCiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSIvU0FT'@;
put 'Sm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9ydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL3Bv'@;
put 'bHlmaWxscy44N2RiYmQzZmFhYmVkNTEzLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9zY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPSIiPjwvc2NyaXB0Pjxz'@;
put 'Y3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9tYWluLmYwNzk2N2E4YzViYWM0YjIuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+CgoKICAgIDwhLS0gCiAgICAgIFRvIHByZXZlbnQgcmVkaXJlY3RzIC8gcHJlc2VydmUgdGhl'@;
put 'IFVSTCB3aGVuIHN0cmVhbWluZyAKICAgICAgSFRNTCBmcm9tIFZpeWEsIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgX2RlYnVnPTIgcGFyYW1ldGVyCiAgICAgIHdoaWNoIHdpbGwgc2VydmUgdGhlIGNvbnRlbnQgaW4gYW4gaWZyYW1lLiAgVGhlIGZvbGxvd2luZyAKICAgICAgY29kZSB3aWxs'@;
put 'IHRoZW4gbW9kaWZ5IHRoZSBwYXJlbnQgaWZyYW1lIHRvIHNlcnZlIHRoZSBjb250ZW50CiAgICAgIGluIGZ1bGwgc2NyZWVuLgogICAgLS0+CiAgICA8c2NyaXB0PgogICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpewogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlPSJoZWlnaHQ6'@;
put 'MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlIjsKICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFsbG93ZnVsbHNjcmVlbiIsIiIpCiAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJmcmFtZWJvcmRlciIsIjAiKQogICAgICB3aW5k'@;
put 'b3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2luaGVpZ2h0IiwiMCIpCiAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW53aWR0aCIsIjAiKQogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwiYXV0byIp'@;
put 'CiAgICAgIHdpbmRvdy5mb2N1cygpCiAgICB9CiAgICA8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let path=services/admin;
%let service=exportconfig;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_ds2cards(base_ds, tgt_ds=';
put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"';
put ',maxobs=max';
put ',random_sample=NO';
put ',showlog=YES';
put ',outencoding=';
put ',append=NO';
put ')/*/STORE SOURCE*/;';
put '%local i setds nvars;';
put '%if not %sysfunc(exist(&base_ds)) %then %do;';
put '%put %str(WARN)ING: &base_ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;';
put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;';
put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);';
put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";';
put '%if ("&append" = "" or "&append" = "NO") %then %let append=;';
put '%else %let append=mod;';
put '/* get varcount */';
put '%let nvars=0;';
put 'proc sql noprint;';
put 'select count(*) into: nvars from dictionary.columns';
put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";';
put '%if &nvars=0 %then %do;';
put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;';
put '%return;';
put '%end;';
put '/* get indexes */';
put 'proc sort';
put 'data=sashelp.vindex(';
put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")';
put ')';
put 'out=_data_;';
put 'by indxname indxpos;';
put 'run;';
put '%local indexes;';
put 'data _null_;';
put 'set &syslast end=last;';
put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');';
put 'by indxname indxpos;';
put 'length vars $32767 nom uni $8;';
put 'retain vars;';
put 'if first.indxname then do;';
put 'idxcnt+1;';
put 'nom='''';';
put 'uni='''';';
put 'vars=name;';
put 'end;';
put 'else vars=catx('' '',vars,name);';
put 'if last.indxname then do;';
put 'if nomiss=''yes'' then nom=''/nomiss'';';
put 'if unique=''yes'' then uni=''/unique'';';
put 'call symputx(''indexes''';
put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)';
put ',''l'');';
put 'end;';
put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');';
put 'run;';
put 'data;run;';
put '%let setds=&syslast;';
put 'proc sql';
put '%if %datatyp(&maxobs)=NUMERIC %then %do;';
put 'outobs=&maxobs;';
put '%end;';
put ';';
put 'create table &setds as select * from &base_ds';
put '%if &random_sample=YES %then %do;';
put 'order by ranuni(42)';
put '%end;';
put ';';
put 'reset outobs=max;';
put 'create table datalines1 as';
put 'select name,type,length,varnum,format,label from dictionary.columns';
put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"';
put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";';
put '/**';
put 'Due to long decimals cannot use best. format';
put 'So - use bestd. format and then use character functions to strip trailing';
put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets';
put 'note2err when there are missings.';
put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0';
put ',put(VARIABLE,best32.)';
put ',substrn(put(VARIABLE,bestd32.),1';
put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));';
put '**/';
put 'data datalines_2;';
put 'format dataline $32000.;';
put 'set datalines1 (where=(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));';
put 'if type=''num'' then dataline=';
put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0';
put ',put('',name,'',best32.-l)';
put ',substrn(put('',name,'',bestd32.-l),1';
put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');';
put '/**';
put '* binary data must be converted, to store in text format. It is identified';
put '* by the presence of the $HEX keyword in the format.';
put '*/';
put 'else if upcase(format)=:''$HEX'' then';
put 'dataline=cats(''put(trim('',name,''),'',format,'')'');';
put '/**';
put '* There is no easy way to store line breaks in a cards file.';
put '* To discuss this, use: https://github.com/sasjs/core/issues/80';
put '* Removing all nonprintables with kw (keep writeable)';
put '*/';
put 'else dataline=cats(''compress('',name,'', ,"kw")'');';
put 'run;';
put 'proc sql noprint;';
put 'select dataline into: datalines separated by '','' from datalines_2;';
put '%local';
put 'process_dttm_flg';
put 'valid_from_dttm_flg';
put 'valid_to_dttm_flg';
put ';';
put '%let process_dttm_flg = N;';
put '%let valid_from_dttm_flg = N;';
put '%let valid_to_dttm_flg = N;';
put 'data _null_;';
put 'set datalines1 ;';
put '/* build attrib statement */';
put 'if type=''char'' then type2=''$'';';
put 'if strip(format) ne '''' then format2=cats(''format='',format);';
put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));';
put 'str1=catx('' '',(put(name,$33.)||''length='')';
put ',put(cats(type2,length),$7.)||format2,label2);';
put '/* Build input statement */';
put 'if upcase(format)=:''$HEX'' then type3='':''!!format;';
put 'else if type=''char'' then type3='':$char.'';';
put 'str2=put(name,$33.)||type3;';
put 'if(upcase(name) = "PROCESSED_DTTM") then';
put 'call symputx("process_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_FROM_DTTM") then';
put 'call symputx("valid_from_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_TO_DTTM") then';
put 'call symputx("valid_to_dttm_flg", "Y", "L");';
put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");';
put 'call symputx(cats("input_stmt_", put(_N_, 8.))';
put ', ifc(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");';
put 'run;';
put 'data _null_;';
put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;';
put 'length __attrib $32767;';
put 'if _n_=1 then do;';
put 'put ''/**'';';
put 'put '' @file'';';
put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";';
put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";';
put 'put " Source: https://github.com/sasjs/core";';
put 'put '' @cond '';';
put 'put ''**/'';';
put 'put "data &tgt_ds &indexes;";';
put 'put "attrib ";';
put '%do i = 1 %to &nvars;';
put '__attrib=symget("attrib_stmt_&i");';
put 'put __attrib;';
put '%end;';
put 'put ";";';
put '%if &process_dttm_flg. eq Y %then %do;';
put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';';
put '%end;';
put '%if &valid_from_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_FROM_DTTM &low_date;'';';
put '%end;';
put '%if &valid_to_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_TO_DTTM &high_date;'';';
put '%end;';
put 'if __nobs=0 then do;';
put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';';
put 'put ''stop;'';';
put 'put ''run;'';';
put 'end;';
put 'else do;';
put 'put "infile cards dsd;";';
put 'put "input ";';
put '%do i = 1 %to &nvars.;';
put '%if(%length(&&input_stmt_&i..)) %then';
put 'put " &&input_stmt_&i..";';
put ';';
put '%end;';
put 'put ";";';
put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';';
put 'put "datalines4;";';
put 'end;';
put 'end;';
put 'set &setds end=__lastobs nobs=__nobs;';
put '/* remove all formats for write purposes - some have long underlying decimals */';
put 'format _numeric_ best30.29;';
put 'length __dataline $32767;';
put '__dataline=catq(''cqtmb'',&datalines);';
put 'put __dataline;';
put 'if __lastobs then do;';
put 'put '';;;;'';';
put 'put ''run;'';';
put 'put ''/** @endcond **/'';';
put 'stop;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &setds;';
put 'quit;';
put '%if &showlog=YES %then %do;';
put 'data _null_;';
put 'infile &cards_file lrecl=32767;';
put 'input;';
put 'put _infile_;';
put 'run;';
put '%end;';
put '%put NOTE: CARDS FILE SAVED IN:;';
put '%put NOTE-;%put NOTE-;';
put '%put NOTE- %sysfunc(dequote(&cards_file.));';
put '%put NOTE-;%put NOTE-;';
put '%mend mp_ds2cards;';
put '/** @endcond **/';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Downloads zip file of DC customer configurations';
put '@details Zip contains several excel files, containing the customer specific';
put '(non-DC) configurations. Useful when migrating to a new instance of';
put 'Data Controller.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li mp_ds2cards.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let work=%sysfunc(pathname(work));';
put '/* excel does not work in all envs */';
put '%let mime=application/vnd.ms-excel;';
put '%let dbms=EXCEL;';
put '%let mime=application/csv;';
put '%let dbms=CSV;';
put '%let ext=csv;';
put '%macro conditional_export(ds);';
put '%if %mf_nobs(&ds)>0 %then %do;';
put 'PROC EXPORT DATA= &ds OUTFILE= "&work/&ds..&ext"';
put 'DBMS=&dbms REPLACE;';
put 'RUN;';
put 'ods package(ProdOutput) add file="&work/&ds..&ext" mimetype="&mime";';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%nrstr(syscc=&syscc after &ds prep)';
put ')';
put '%mend conditional_export;';
put 'ods package(ProdOutput) open nopf;';
put 'data MPE_ALERTS;';
put 'set &mpelib..MPE_ALERTS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_ALERTS)';
put 'data MPE_COLUMN_LEVEL_SECURITY;';
put 'set &mpelib..MPE_COLUMN_LEVEL_SECURITY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'where also CLS_LIBREF ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_COLUMN_LEVEL_SECURITY)';
put 'data MPE_CONFIG;';
put 'set &mpelib..MPE_CONFIG;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_CONFIG)';
put 'data MPE_DATADICTIONARY;';
put 'set &mpelib..MPE_DATADICTIONARY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'if DD_SOURCE=:"&mpelib" then do;';
put '/* nothing */';
put 'end;';
put 'else output;';
put 'run;';
put '%conditional_export(MPE_DATADICTIONARY)';
put 'data MPE_EMAILS;';
put 'set &mpelib..MPE_EMAILS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_EMAILS)';
put 'data MPE_EXCEL_CONFIG;';
put 'set &mpelib..MPE_EXCEL_CONFIG;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_EXCEL_CONFIG)';
put 'data MPE_GROUPS;';
put 'set &mpelib..MPE_GROUPS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_GROUPS)';
put 'data MPE_ROW_LEVEL_SECURITY;';
put 'set &mpelib..MPE_ROW_LEVEL_SECURITY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_ROW_LEVEL_SECURITY)';
put 'data MPE_SECURITY;';
put 'set &mpelib..MPE_SECURITY;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_SECURITY)';
put 'data MPE_SELECTBOX;';
put 'set &mpelib..MPE_SELECTBOX;';
put 'where &dc_dttmtfmt. le ver_to_dttm;';
put 'where also select_lib ne "&mpelib";';
put 'drop ver_: selectbox_rk;';
put 'run;';
put '%conditional_export(MPE_SELECTBOX)';
put 'data MPE_TABLES;';
put 'set &mpelib..MPE_TABLES;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'where also LIBREF ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_TABLES)';
put 'data MPE_VALIDATIONS;';
put 'set &mpelib..MPE_VALIDATIONS;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'where also BASE_LIB ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_VALIDATIONS)';
put '/* finish up zip file */';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name="DCBACKUP.zip" archive_path="&work");';
put 'ods package(ProdOutput) close;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%nrstr(syscc=&syscc after zip prep)';
put ')';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&work/DCBACKUP.zip)';
put ',outname=DCBACKUP.zip';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=exportdb;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_existfileref(fref';
put ')/*/STORE SOURCE*/;';
put '%local rc;';
put '%let rc=%sysfunc(fileref(&fref));';
put '%if &rc=0 %then %do;';
put '1';
put '%end;';
put '%else %if &rc<0 %then %do;';
put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;';
put '1';
put '%end;';
put '%else %do;';
put '0';
put '%end;';
put '%mend mf_existfileref;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema=';
put ',applydttm=NO';
put ')/*/STORE SOURCE*/;';
put '/* check fileref is assigned */';
put '%if %mf_existfileref(&fref)=0 %then %do;';
put 'filename &fref temp ;';
put '%end;';
put '%if %length(&libref)=0 %then %let libref=WORK;';
put '%let flavour=%upcase(&flavour);';
put 'proc sql noprint;';
put 'create table _data_ as';
put 'select * from dictionary.tables';
put 'where upcase(libname)="%upcase(&libref)"';
put 'and memtype=''DATA'' /* views not currently supported */';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local tabinfo; %let tabinfo=&syslast;';
put 'create table _data_ as';
put 'select * from dictionary.columns';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local colinfo; %let colinfo=&syslast;';
put '%local dsnlist;';
put 'select distinct upcase(memname) into: dsnlist';
put 'separated by '' ''';
put 'from &syslast';
put ';';
put 'create table _data_ as';
put 'select * from dictionary.indexes';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put 'order by idxusage, indxname, indxpos';
put ';';
put '%local idxinfo; %let idxinfo=&syslast;';
put '/* Extract all Primary Key and Unique data constraints */';
put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)';
put '%local colconst; %let colconst=&syslast;';
put '%macro addConst();';
put '%global constraints_used;';
put 'data _null_;';
put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;';
put 'set &colconst(';
put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))';
put ') end=last;';
put 'file &fref mod;';
put 'by constraint_type constraint_name;';
put 'retain constraints_used;';
put 'constraint_name_orig=constraint_name;';
put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';';
put 'else ctype=strip(constraint_type);';
put '%if &flavour=TSQL %then %do;';
put 'column_name=catt(''['',column_name,'']'');';
put 'constraint_name=catt(''['',constraint_name,'']'');';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'column_name=catt(''"'',column_name,''"'');';
put 'constraint_name=catt(''"'',constraint_name,''"'');';
put '%end;';
put 'if first.constraint_name then do;';
put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);';
put 'put " ,CONSTRAINT " constraint_name ctype "(" ;';
put 'put '' '' column_name;';
put 'end;';
put 'else put '' ,'' column_name;';
put 'if last.constraint_name then do;';
put 'put " )";';
put 'call symput(''constraints_used'',strip(constraints_used));';
put 'end;';
put 'run;';
put '%put &=constraints_used;';
put '%mend addConst;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";';
put 'run;';
put '%local x curds;';
put '%if &flavour=SAS %then %do;';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";';
put 'put "proc sql;";';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'length lab $1024 typ $20;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table &libref..&curds(";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view &libref..&curds(";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'if length(format)>1 then fmt=" format="!!cats(format);';
put 'if length(label)>1 then';
put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");';
put 'if notnull=''yes'' then notnul='' not null'';';
put 'if type=''char'' then typ=cats(''char('',length,'')'');';
put 'else if length ne 8 then typ=''num length=''!!cats(length);';
put 'else typ=''num'';';
put 'put name typ fmt notnul lab;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '/* ds=cats(libname,''.'',memname); */';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;';
put 'put '' '' name ;';
put 'end;';
put 'else put '' ,'' name ;';
put '*else put '' ,'' name ;';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '/*';
put 'ods output IntegrityConstraints=ic;';
put 'proc contents data=testali out2=info;';
put 'run;';
put '*/';
put '%end;';
put '%end;';
put '%else %if &flavour=TSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''SQLSVR'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* TSQL Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table [&schema].[&curds](";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view [&schema].[&curds](";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';';
put '%end;';
put 'else if type=''num'' then fmt=''[decimal](18,2)'';';
put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';';
put 'else fmt=cats(''[varchar](max)'');';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put 'put "[" name +(-1) "]" fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '*ds=cats(libname,''.'',memname);';
put 'if first.indxname then do;';
put '/* add nonclustered in case of multiple unique indexes */';
put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';';
put 'put '' ['' name +(-1) '']'';';
put 'end;';
put 'else put '' ,['' name +(-1) '']'';';
put 'if last.indxname then do;';
put 'put '' )'';';
put 'end;';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'put '')'';';
put 'put ''GO'';';
put 'run;';
put '/* add extended properties for labels */';
put 'data _null_;';
put 'file &fref mod;';
put 'length nm $64 lab $1024;';
put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;';
put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");';
put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");';
put 'put '' '';';
put 'put "EXEC sys.sp_addextendedproperty ";';
put 'put " @name=N''MS_Description'',@value=" lab ;';
put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";';
put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";';
put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;';
put 'if last then put ''GO'';';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''POSTGRES'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put 'data _null_;';
put 'file &fref mod;';
put 'put "CREATE SCHEMA &schema;";';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put '%local curdsvarcount;';
put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);';
put '%if &curdsvarcount>1600 %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &libref..&curds contains &curdsvarcount vars */";';
put 'put "/* Postgres cannot create tables with over 1600 vars */";';
put 'put "/* No DDL will be generated for this table";';
put 'run;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* Postgres Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'length fmt $32;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "CREATE TABLE &schema..&curds (";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "CREATE VIEW &schema..&curds (";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';';
put '%end;';
put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';';
put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put '/* quote column names in case they represent reserved words */';
put 'name2=quote(trim(name));';
put 'put name2 fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";';
put 'put '' "'' name +(-1) ''"'' ;';
put 'end;';
put 'else put '' ,"'' name +(-1) ''"'';';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%if %upcase(&showlog)=YES %then %do;';
put 'options ps=max;';
put 'data _null_;';
put 'infile &fref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_getddl;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max';
put ',applydttm=YES';
put ')/*/STORE SOURCE*/;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WAR)NING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WAR)NING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%let flavour=%upcase(&flavour);';
put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;';
put '%put %str(WAR)NING: &flavour is not supported;';
put '%return;';
put '%end;';
put '%if &outref=0 %then %do;';
put '%put %str(WAR)NING: Please provide a fileref;';
put '%return;';
put '%end;';
put '%if %mf_existfileref(&outref)=0 %then %do;';
put 'filename &outref temp lrecl=66000;';
put '%end;';
put '%if &schema=0 %then %let schema=;';
put '%else %let schema=&schema..;';
put '%if &outds=0 %then %let outds=%scan(&ds,2,.);';
put '%local nobs;';
put 'proc sql noprint;';
put 'select count(*) into: nobs TRIMMED from &ds;';
put '%if &nobs=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'put "/* No rows found in &ds */";';
put 'run;';
put '%end;';
put '%local vars;';
put '%let vars=%mf_getvarcount(&ds);';
put '%if &vars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'put "/* No columns found in &schema.&ds */";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &vars>1600 and &flavour=PGSQL %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &schema.&ds contains &vars vars */";';
put 'put "/* Postgres cannot handle tables with over 1600 vars */";';
put 'put "/* No inserts will be generated for this table */";';
put 'run;';
put '%return;';
put '%end;';
put '%local varlist varlistcomma;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let varlistcomma=%mf_getvarlist(&ds,dlm=%str(,),quote=double);';
put '/* next, export data */';
put 'data _null_;';
put 'file &outref mod ;';
put 'if _n_=1 then put "/* &schema.&outds (&nobs rows, &vars columns) */";';
put 'set &ds;';
put '%if &maxobs ne max %then %do;';
put 'if _n_>&maxobs then stop;';
put '%end;';
put 'length _____str $32767;';
put 'call missing(_____str);';
put 'format _numeric_ best.;';
put 'format _character_ ;';
put '%local i comma var vtype vfmt;';
put '%do i=1 %to %sysfunc(countw(&varlist));';
put '%let var=%scan(&varlist,&i);';
put '%let vtype=%mf_getvartype(&ds,&var);';
put '%let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1));';
put '%if &i=1 %then %do;';
put '%if &flavour=SAS %then %do;';
put 'put "insert into &schema.&outds set ";';
put 'put " &var="@;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '_____str=cats(';
put '"INSERT INTO &schema.&outds ("';
put ',symget(''varlistcomma'')';
put ',") VALUES ("';
put ');';
put 'put _____str;';
put 'put " "@;';
put '%end;';
put '%end;';
put '%else %do;';
put '%if &flavour=SAS %then %do;';
put 'put " ,&var="@;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'put " ,"@;';
put '%end;';
put '%end;';
put '%if &vtype=N %then %do;';
put '%if &flavour=SAS %then %do;';
put 'put &var;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'if missing(&var) then put ''NULL'';';
put '%if &applydttm=YES and "%substr(&vfmt.xxxxxxxx,1,8)"="DATETIME"';
put '%then %do;';
put 'else put "TIMESTAMP ''" &var E8601DT25.6 "''";';
put '%end;';
put '%else %do;';
put 'else put &var;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '_____str="''"!!trim(tranwrd(&var,"''","''''"))!!"''";';
put 'put _____str;';
put '%end;';
put '%end;';
put '%if &flavour=SAS %then %do;';
put 'put '';'';';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'put '');'';';
put '%end;';
put 'if _n_=&nobs then put /;';
put 'run;';
put '%mend mp_ds2inserts;';
put '%macro mp_lib2inserts(lib';
put ',flavour=SAS';
put ',outref=0';
put ',schema=0';
put ',maxobs=max';
put ',applydttm=YES';
put ')/*/STORE SOURCE*/;';
put '/* Find the tables */';
put '%local x ds memlist;';
put 'proc sql noprint;';
put 'select distinct lowcase(memname)';
put 'into: memlist';
put 'separated by '' ''';
put 'from dictionary.tables';
put 'where upcase(libname)="%upcase(&lib)"';
put 'and memtype=''DATA''; /* exclude views */';
put '%let flavour=%upcase(&flavour);';
put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;';
put '%put %str(WAR)NING: &flavour is not supported;';
put '%return;';
put '%end;';
put '/* create the inserts */';
put '%do x=1 %to %sysfunc(countw(&memlist));';
put '%let ds=%scan(&memlist,&x);';
put '%mp_ds2inserts(&lib..&ds';
put ',outref=&outref';
put ',schema=&schema';
put ',outds=&ds';
put ',flavour=&flavour';
put ',maxobs=&maxobs';
put ',applydttm=&applydttm';
put ')';
put '%end;';
put '%mend mp_lib2inserts;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Exports the data controller library in DB specific DDL';
put '@details If user is in the administrator group, they can call this';
put 'service directly adding the following URL params:';
put '@li &flavour= (only PGSQL supported at this time)';
put '@li &schema= (optional, if target schema is needed)';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mp_getddl.sas';
put '@li mp_lib2inserts.sas';
put '@li mp_streamfile.sas';
put '@li mpe_getgroups.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global flavour schema;';
put '/* if no flavour is specified, default to SAS */';
put '%let flavour=%sysfunc(coalescec(&flavour,SAS));';
put '/* if no schema var provided, DC Libref is used */';
put '%let schema=%sysfunc(coalescec(&schema,&dc_libref));';
put '/* check user is in admin group */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)';
put 'data work.admins;';
put 'set work.usergroups;';
put 'put (_all_)(=);';
put 'run;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into:cnt';
put 'from usergroups';
put 'where groupname="&mpeadmins";';
put '%put &=cnt;';
put '%mp_abort(iftrue= (&cnt=0)';
put ',mac=&_program';
put ',msg=%str(The &DC_LIBREF library can only be exported by &mpeadmins members)';
put ')';
put '%mp_getddl(&DC_LIBREF';
put ',flavour=&flavour';
put ',schema=&schema';
put ',applydttm=YES';
put ',fref=tmpref';
put ')';
put '%mp_lib2inserts(&DC_LIBREF,flavour=&flavour,schema=&schema, outref=tmpref)';
put '%mp_streamfile(contenttype=TEXT';
put ',inref=tmpref';
put ',outname=&dc_libref..ddl';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=makedata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_increment(macro_name,incr=1);';
put '/* iterate the value */';
put '%let ¯o_name=%eval(&&¯o_name+&incr);';
put '/* return the value */';
put '&&¯o_name';
put '%mend mf_increment;';
put '%macro mpe_makedata(lib=,mpeadmins=,path=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &lib..mpe_alerts set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',alert_event=''*ALL*''';
put ',alert_lib=''*ALL*''';
put ',alert_ds=''*ALL*''';
put ',alert_user="&sysuserid";';
put 'insert into &lib..mpe_column_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',CLS_SCOPE=''EDIT''';
put ',CLS_GROUP=''AllUsers''';
put ',CLS_LIBREF="&lib"';
put ',CLS_TABLE=''MPE_LOCKANYTABLE''';
put ',CLS_VARIABLE_NM=''LOCK_STATUS_CD''';
put ',CLS_ACTIVE=1';
put ',CLS_HIDE=0;';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_EMAIL_ALERTS"';
put ',var_value=''NO''';
put ',var_active=1';
put ',var_desc=''YES or NO to enable email alerts. Note - this requires email ''';
put '!!''options to be preconfigured! They can be configured in the ''';
put '!!''settings stp if needed.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_VIEWLIB_CHECK"';
put ',var_value=''NO''';
put ',var_active=1';
put ',var_desc=';
put '''Set to YES to enable library validity checking in viewLibs service.''';
put '!!'' Note: this can make the service very slow if there are lots of ''';
put '!!''external libraries. If enabled, this removes empty libraries from ''';
put '!!''the viewer library dropdown. To switch off, set to NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_MACROS"';
put ',var_value=cats(symget(''path''),"/dc_macros")';
put ',var_active=1';
put ',var_desc=''Location of underlying macros - EUC feature.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_MAXOBS_WEBEDIT"';
put ',var_value="100"';
put ',var_active=1';
put ',var_desc=''This sets the maximum number of observations that can be loaded''';
put '!!'' into the browser for editing in the EDIT screen. A higher number''';
put '!!'' will require a decent browser (ie, not IE) and more memory on the''';
put '!!'' client side.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_RESTRICT_VIEWER"';
put ',var_value="NO"';
put ',var_active=1';
put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to''';
put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_RESTRICT_EDITRECORD"';
put ',var_value="NO"';
put ',var_active=1';
put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the''';
put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu''';
put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC_CATALOG"';
put ',var_name="DC_IGNORELIBS"';
put ',var_value="|MAPSSAS|MAPS|"';
put ',var_active=1';
put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when''';
put '!!'' running the Data Catalog refresh process. This can enable a clean''';
put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_LOCALE"';
put ',var_value="SYSTEM"';
put ',var_active=1';
put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system''';
put '!!'' value (which can be driven from the browser settings). This is ''';
put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs ''';
put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BULKLOAD"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_BUCKET"';
put ',var_value="''your-aws-bucket/Exchange''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) value of the AWS bucket to''';
put '!!'' use for s3 uploads in redshift'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_AWS_CREDENTIALS_FILE"';
put ',var_value="''/path/to/your/aws/s3/.credentials''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) value of the AWS creds file'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_REGION"';
put ',var_value="''eu-west-1''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) AWS region in use'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_COMPRESS"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_USE_SSL"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to use SSL encryption'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC_REVIEW"';
put ',var_name="HISTORY_ROWS"';
put ',var_value=''100''';
put ',var_active=1';
put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY ''';
put '!!''page'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_LICENCE_KEY"';
put ',var_value='' ''';
put ',var_active=1';
put ',var_desc=''Licence Key'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_ACTIVATION_KEY"';
put ',var_value='' ''';
put ',var_active=1';
put ',var_desc=''Activation Key'';';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''LIBRARY''';
put ',DD_SOURCE="&lib"';
put ',DD_SHORTDESC="Data Controller Control Tables"';
put ',DD_LONGDESC="# The Data Controller Library"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''TABLE''';
put ',DD_SOURCE="&lib..MPE_TABLES"';
put ',DD_SHORTDESC="Configuration of new tables for Data Controller"';
put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''COLUMN''';
put ',DD_SOURCE="&lib..MPE_TABLES.DSN"';
put ',DD_SHORTDESC="Dataset Name to be edited"';
put ',DD_LONGDESC="_DSN_ - must be UPCASE"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''DIRECTORY''';
put ',DD_SOURCE="/some/directory"';
put ',DD_SHORTDESC="Directory for some purpose"';
put ',DD_LONGDESC="This directory is great. It''s great directory.';
put 'It trumps all other directories."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''TABLE''';
put ',DD_SOURCE="&lib"';
put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"';
put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "';
put '!!"registered as a user in this table."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''COLUMN''';
put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"';
put ',DD_SHORTDESC="Set to 1 to make an option active"';
put ',DD_LONGDESC="This value is used as a filter by data controller whenever "';
put '!!"querying for option settings."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* mpe_xlmap_info';
put '*/';
put 'insert into &lib..mpe_xlmap_info set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_description=''Basel 3 Key Metrics report''';
put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";';
put '/**';
put '* mpe_xlmap_rules';
put '*/';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:b''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:c''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:d''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/b''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/c''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/d''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1a/e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1a/f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''ABSOLUTE D10'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/b''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''ABSOLUTE E10'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/c''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[6]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/d''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[8]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/e''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[9]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/f''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[10]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''ABSOLUTE H11''';
put ',xlmap_finish=''RELATIVE R[0]C[1]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:3''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''RELATIVE R[12]C[4]''';
put ',xlmap_finish=''ABSOLUTE I13'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-CR2''';
put ',xlmap_range_id=''CR2-sec1''';
put ',xlmap_sheet=''CR2''';
put ',xlmap_start=''ABSOLUTE D8''';
put ',xlmap_finish=''BLANKROW'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-CR2''';
put ',xlmap_range_id=''CR2-sec2''';
put ',xlmap_sheet=''CR2''';
put ',xlmap_start=''ABSOLUTE D18''';
put ',xlmap_finish=''LASTDOWN'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''SAMPLE''';
put ',xlmap_range_id=''header''';
put ',xlmap_sheet=''/1''';
put ',xlmap_start=''ABSOLUTE B3''';
put ',xlmap_finish=''ABSOLUTE B8'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''SAMPLE''';
put ',xlmap_range_id=''data''';
put ',xlmap_sheet=''/1''';
put ',xlmap_start=''ABSOLUTE B13''';
put ',xlmap_finish=''ABSOLUTE E16'';';
put '/**';
put '* MPE_GROUPS';
put '*/';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="allbow"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="dctestuser1"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="mihmed"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="DCTest"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_ROW_LEVEL_SECURITY';
put '*/';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=1';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_GROUPS"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''GROUP_NAME''';
put ',RLS_OPERATOR_NM=''NE''';
put ',RLS_RAW_VALUE="''-1''"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=2';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib"';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''RLS_RK''';
put ',RLS_OPERATOR_NM=''>''';
put ',RLS_RAW_VALUE=''0''';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=3';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''DC Demo Group''';
put ',RLS_LIBREF="&lib"';
put ',RLS_TABLE="MPE_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''ACCESS_LEVEL''';
put ',RLS_OPERATOR_NM=''NE''';
put ',RLS_RAW_VALUE="''N/A''"';
put ',RLS_ACTIVE=1;';
put '/**';
put '* MPE_SECURITY';
put '*/';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="dc-admin"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="dc-admin"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/* mpe_selectbox */';
put '%let rk=1;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=&rk';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_LOCKANYTABLE"';
put ',base_column="LOCK_STATUS_CD"';
put ',selectbox_value=''LOCKED''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_LOCKANYTABLE"';
put ',base_column="LOCK_STATUS_CD"';
put ',selectbox_value=''UNLOCKED''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''EDIT''';
put ',selectbox_order=0';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''APPROVE''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''VIEW''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''SIGNOFF''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''UPDATE''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''REPLACE''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''TXTEMPORAL''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''BITEMPORAL''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''FORMAT_CAT''';
put ',selectbox_order=5';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''*ALL*''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''SUBMITTED''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''APPROVED''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''REJECTED''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 1''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 2''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 3''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value="This is a long option. This option is very long. "';
put '!!"It is optional, though."';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="CASE"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="MINVAL"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="MAXVAL"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="HARDSELECT"';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="SOFTSELECT"';
put ',selectbox_order=5';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="NOTNULL"';
put ',selectbox_order=6';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="DSN"';
put ',selectbox_value="SOME_DATASET"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="DSN"';
put ',selectbox_value="EXAMPLE"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="COLUMN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="TABLE"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="LIBRARY"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="CATALOG"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="FORMAT"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="LIBREF"';
put ',selectbox_value=''*ALL*''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''AUDIT''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="HARDSELECT_HOOK"';
put ',selectbox_order=7';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="SOFTSELECT_HOOK"';
put ',selectbox_order=7';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="ALL"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="EDIT"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="VIEW"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_GROUP_LOGIC"';
put ',selectbox_value="AND"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_GROUP_LOGIC"';
put ',selectbox_value="OR"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SUBGROUP_LOGIC"';
put ',selectbox_value="AND"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SUBGROUP_LOGIC"';
put ',selectbox_value="OR"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="="';
put ',selectbox_order=0';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value=">"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="<"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="<="';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value=">="';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="BETWEEN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="IN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="NOT IN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="NE"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="CONTAINS"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_EXCEL_CONFIG"';
put ',base_column="XL_RULE"';
put ',selectbox_value="FORMULA"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_ACTIVE"';
put ',selectbox_value="1"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_ACTIVE"';
put ',selectbox_value="0"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_ACTIVE"';
put ',selectbox_value="1"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_ACTIVE"';
put ',selectbox_value="0"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="EDIT"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="VIEW"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="ALL"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_HIDE"';
put ',selectbox_value="0"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_HIDE"';
put ',selectbox_value="1"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_TABLES';
put '*/';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_COLUMN_LEVEL_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM''';
put ',notes=''Docs: https://docs.datacontroller.io/column-level-security''';
put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_INFO''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''XLMAP_ID''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_RULES''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''XLMAP_ID XLMAP_RANGE_ID''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_DATA''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_LOCKANYTABLE''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''LOCK_LIB LOCK_DS''';
put ',notes=''This table may be edited when a process failed and left a lock''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_TABLES''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''LIBREF DSN''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',notes=''This entry allows the MP Editor to edit itself!''';
put ',post_edit_hook=''services/hooks/mpe_tables_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',notes=''Determines which groups can view/edit/approve which tables''';
put ',post_edit_hook=''services/hooks/mpe_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_SELECTBOX''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''SELECTBOX_RK''';
put ',var_txfrom=''VER_FROM_DTTM''';
put ',var_txto=''VER_TO_DTTM''';
put ',notes=''Can configure dropdowns for the front end''';
put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_X_TEST''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''PRIMARY_KEY_FIELD''';
put ',notes=''Test table for controller''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_EMAILS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''USER_NAME''';
put ',notes=''Primary Emails Table (backup is metadata)''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_CONFIG''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''VAR_SCOPE VAR_NAME''';
put ',notes=''Configuration variables for Data Controller''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_ALERTS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER''';
put ',notes=''Configuration for alert email events''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_GROUPS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''GROUP_NAME USER_NAME''';
put ',notes=''Configuration for additional groups within Data Controller''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_VALIDATIONS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE''';
put ',notes=''Configuration of data quality rules in Editor component''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',post_edit_hook=''services/hooks/mpe_validations_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_DATADICTIONARY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''DD_TYPE DD_SOURCE''';
put ',notes=''Configuration of data dictionary''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_EXCEL_CONFIG''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN''';
put ',notes=''Configuration of the excel import rules''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_ROW_LEVEL_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''RLS_RK''';
put ',notes=''Configuration of Row Level Security''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC ''';
put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM ''';
put '!!''RLS_RAW_VALUE ''';
put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_X_CATALOG-FC''';
put ',num_of_approvals_required=1';
put ',loadtype=''FORMAT_CAT''';
put ',buskey=''TYPE FMTNAME FMTROW''';
put ',notes=''Sample Format Catalog''';
put ';';
put '/* mpe_validations */';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_SCOPE"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_TABLE"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_VARIABLE_NM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_VARIABLE_NM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_HIDE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ALERTS"';
put ',base_col="ALERT_LIB"';
put ',rule_type=''HARDSELECT_HOOK''';
put ',rule_value="services/validations/mpe_alerts.alert_lib"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_INFO"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_RULES"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''NOTNULL''';
put ',rule_value='' ''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''NOTNULL''';
put ',rule_value='' ''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="NUM_OF_APPROVALS_REQUIRED"';
put ',rule_type=''MINVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="BUSKEY"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="BUSKEY"';
put ',rule_type=''NOTNULL''';
put ',rule_value=" "';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXFROM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXTO"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSFROM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSTO"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value="UPCASE"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_PROCESSED"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="LIBREF"';
put ',rule_type=''HARDSELECT''';
put ',rule_value="&lib..MPE_TABLES.LIBREF"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="DSN"';
put ',rule_type=''CASE''';
put ',rule_value="UPCASE"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="DSN"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_TABLES.DSN"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="SAS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_LIB"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_DS"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_COL"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="RULE_ACTIVE"';
put ',rule_type=''MINVAL''';
put ',rule_value="0"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="RULE_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value="1"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_COLUMN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/mpe_tables.dsn"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXFROM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXTO"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSFROM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSTO"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_PROCESSED"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="SELECT_LIB"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="SELECT_DS"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="BASE_COLUMN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_SUBGROUP_ID"';
put ',rule_type=''MINVAL''';
put ',rule_value=''0''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_VARIABLE_NM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_X_TEST"';
put ',base_col="SOME_NUM"';
put ',rule_type=''HARDSELECT_HOOK''';
put ',rule_value="services/validations/mpe_x_test.some_num"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_ACTIVE"';
put ',rule_type=''MINVAL''';
put ',rule_value=''0''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_INFO"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_X_TEST';
put '*/';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=0';
put ',some_char=''this is dummy data''';
put ',some_dropdown=''Option 1''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=42';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=1';
put ',some_char=''more dummy data''';
put ',some_dropdown=''Option 2''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=422';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=2';
put ',some_char=''even more dummy data''';
put ',some_dropdown=''Option 3''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=142';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=3';
put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing''';
put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And''';
put '!!'' this, is the tale he told: '',3)';
put ',some_dropdown=''Option 2''';
put ',some_num=1613.001';
put ',some_date=423';
put ',some_datetime=423';
put ',some_time=44';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=4';
put ',some_char=''if you can fill the unforgiving minute''';
put ',some_dropdown=''Option 1''';
put ',some_num=1613.001123456';
put ',some_date=4231';
put ',some_datetime=423123123';
put ',some_time=412';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put '%do x=10 %to 500;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=10&x';
put ',some_char="&x bottles of beer on the wall"';
put ',some_dropdown=''Option 1''';
put ',some_num=ranuni(0)';
put ',some_date=round(ranuni(0)*1000,1)';
put ',some_datetime=round(ranuni(0)*50000,1)';
put ',some_time=round(ranuni(0)*100,1)';
put ',some_shortnum=round(ranuni(0)*100,1)';
put ',some_bestnum=round(ranuni(0)*100,1);';
put '%end;';
put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */';
put 'proc format library=&lib..mpe_x_catalog;';
put 'value otdate';
put '.Z = ''Some Zs''';
put '.N = ''Some 9s''';
put 'other = [date9.]';
put ';';
put 'invalue disc';
put '''ABC'' = 0.20';
put '''DEF'' = 0.25';
put '''XYZ'' = 0.00';
put 'other = 0.00';
put ';';
put 'invalue indate';
put '''00000000'' = .Z';
put '''99999999'' = .N';
put 'other = [yymmdd8.]';
put ';';
put 'value age(multilabel)';
put '20 - 29 = ''20 - 29''';
put '30 - 39 = ''30 - 39''';
put '40 - 49 = ''40 - 49''';
put '50 - 59 = ''50 - 59''';
put '60 - high = ''60 +++''';
put '20 - 35 = ''20 - 35''';
put '36 - 55 = ''36 - 55''';
put '55 - high = ''55 +++''';
put ';';
put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */';
put 'VALUE $GENDERLABEL';
put '"M" = "Male"';
put '"F" = "Female"';
put ';';
put 'VALUE LIKERT_SEVEN';
put '1 = "Strongly Disagree"';
put '2 = "Disagree"';
put '3 = "Slightly Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5 = "Slightly Agree"';
put '6 = "Agree"';
put '7 = "Strongly Agree"';
put ';';
put 'VALUE LIKERT7_ELEVEN';
put '1,2,3 = "Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5,6,7 = "Agree"';
put ';';
put 'VALUE LIKERT7_SISTERS';
put '1-3 = "Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5-7 = "Agree"';
put ';';
put 'VALUE INCOME';
put 'LOW -< 20000 = "Low"';
put '20000 -< 60000 = "Middle"';
put '60000 - HIGH = "High"';
put ';';
put 'VALUE RACE';
put '1 = "White"';
put '2 = "Black"';
put 'OTHER = "Other"';
put ';';
put 'VALUE GENDERCODE';
put '0 = ''Male''';
put '1 = ''Female'';';
put 'VALUE ATHLETECODE';
put '0 = ''Non-athlete''';
put '1 = ''Athlete'';';
put 'VALUE SMOKINGCODE';
put '0 = ''Nonsmoker''';
put '1 = ''Past smoker''';
put '2 = ''Current smoker'';';
put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */';
put 'value $state';
put '''Delaware''=''DE''';
put '''Florida''=''FL''';
put '''Ohio''=''OH'';';
put 'value MYfmt';
put '/* Format dates prior to 31DEC2011 using only a year. */';
put 'low-''31DEC2011''d=[year4.]';
put '/* Format 2012 dates using the month and year. */';
put '''01jan2012''d-''31DEC12''d=[monyy7.]';
put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */';
put '''01JAN2013''d-high=[date9.]';
put '/* Catch missing values. */';
put 'other=''n/a'';';
put 'value newfmt .=''N/A'' other=[12.1];';
put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */';
put 'value $genderml (multilabel)';
put '''1''=''Male''';
put '''2''=''Female''';
put '''1'',''2'','' ''=''Total people'';';
put 'value agemla (multilabel)';
put '1-4=''Preschool''';
put '1-18=''Children''';
put '19-120=''Adults'';';
put 'value agemlb (multilabel)';
put '19-120=''Adults''';
put '1-18=''Children''';
put '1-4=''Preschool'';';
put 'value agemlc (multilabel notsorted)';
put '19-120=''Adults''';
put '1-18=''Children''';
put '1-4=''Preschool'';';
put '%mend mpe_makedata;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mpe_makedatamodel(lib=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put '%local notnull;';
put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;';
put '%put &=notnull;';
put 'proc sql;';
put 'create table &lib..mpe_alerts(';
put 'tx_from num format=datetime19.3,';
put 'alert_event char(20),';
put 'alert_lib char(8),';
put 'alert_ds char(32),';
put 'alert_user char(100) ,';
put 'tx_to num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_alerts;';
put 'index create';
put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_audit(';
put 'load_ref char(36) label=''unique load reference'',';
put 'libref char(8) label=''Library Reference (8 chars)'',';
put 'dsn char(32) label=''Dataset Name (32 chars)'',';
put 'key_hash char(32) label=';
put '''MD5 Hash of primary key values (pipe seperated)'',';
put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'',';
put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'',';
put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'',';
put 'is_pk num label=''Is Primary Key Field? (1/0)'',';
put 'is_diff num label=';
put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'',';
put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'',';
put 'oldval_num num format=best32. label=''Old (numeric) value'',';
put 'newval_num num format=best32. label=''New (numeric) value'',';
put 'oldval_char char(32765) label=''Old (character) value'',';
put 'newval_char char(32765) label=''New (character) value''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_audit;';
put 'index create';
put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_column_level_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'CLS_SCOPE char(4) ¬null,';
put 'CLS_GROUP char(64) ¬null,';
put 'CLS_LIBREF char(8) ¬null,';
put 'CLS_TABLE char(32) ¬null,';
put 'CLS_VARIABLE_NM char(32) ¬null,';
put 'CLS_ACTIVE num ¬null,';
put 'CLS_HIDE num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_column_level_security;';
put 'index create';
put 'pk_mpe_column_level_security=';
put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_config(';
put 'tx_from num ¬null format=datetime19.3';
put ',tx_to num ¬null format=datetime19.3';
put ',var_scope varchar(10) ¬null';
put ',var_name varchar(32) ¬null';
put ',var_value varchar(5000)';
put ',var_active num';
put ',var_desc varchar(300)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_config;';
put 'index create';
put 'pk_mpe_config=(tx_to var_scope var_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_libs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Ref'',';
put 'engine char(32) label=''Library Engine'',';
put 'libname char(256) format=$256. label=''Library Name'',';
put 'paths char(8192) label=''Library Paths'',';
put 'perms char(500) label=''Library Permissions (if BASE)'',';
put 'owners char(500) label=''Library Owners (if BASE)'',';
put 'schemas char(500) label=''Library Schemas (if DB)'',';
put 'libid char(17) label=''LibraryId''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_libs;';
put 'index create';
put 'pk_mpe_datacatalog_libs=(libref tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_TABS(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Member Name'',';
put 'memtype char(8) label=''Member Type'',';
put 'dbms_memtype char(32) label=''DBMS Member Type'',';
put 'memlabel char(512) label=''Data Set Label'',';
put 'typemem char(8) label=''Data Set Type'',';
put 'nvar num label=''Number of Variables'',';
put 'compress char(8) label=''Compression Routine'',';
put 'pk_fields char(512)';
put 'label=''Primary Key Fields (identified by being in a constraint that is both Unique and Not Null)''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_TABS;';
put 'index create';
put 'pk_mpe_datacatalog_TABS=(libref dsn tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_vars(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Table Name'',';
put 'name char(64) label=''Column Name'',';
put 'memtype char(8) label=''Member Type'',';
put 'type char(16) label=''Column Type'',';
put 'length num label=''Column Length'',';
put 'varnum num label=''Column Number in Table'',';
put 'label char(512) label=''Column Label'',';
put 'format char(49) label=''Column Format'',';
put 'idxusage char(9) label=''Column Index Type'',';
put 'notnull char(3) label=''Not NULL?'',';
put 'pk_ind num label=''Primary Key Indicator (1=Primary Key field)''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_vars;';
put 'index create';
put 'pk_mpe_datacatalog_vars=(libref dsn name tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datastatus_libs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'libsize num format=SIZEKMG. label=''Size of library'',';
put 'table_cnt num label=''Number of Tables''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_libs;';
put 'index create';
put 'pk_mpe_datastatus_libs=(libref tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datastatus_tabs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Member Name'',';
put 'filesize num format=SIZEKMG. label=''Size of file'',';
put 'crdate num format=DATETIME. informat=DATETIME. label=''Date Created'',';
put 'modate num format=DATETIME. informat=DATETIME. label=''Date Modified'',';
put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_tabs;';
put 'index create';
put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datadictionary';
put '(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'DD_TYPE char(16),';
put 'DD_SOURCE char(1024),';
put 'DD_SHORTDESC char(256),';
put 'DD_LONGDESC char(32767),';
put 'DD_OWNER char(128),';
put 'DD_RESPONSIBLE char(128),';
put 'DD_SENSITIVITY char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datadictionary;';
put 'index create';
put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_dataloads(';
put 'libref varchar(8) ¬null,';
put 'dsn varchar(32) ¬null,';
put 'etlsource varchar(100) ¬null,';
put 'loadtype varchar(20) ¬null,';
put 'changed_records int,';
put 'new_records int,';
put 'deleted_records int,';
put 'duration num,';
put 'user_nm varchar(50) ¬null,';
put 'processed_dttm num format=datetime19.3,';
put 'mac_ver varchar(5)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_dataloads;';
put 'index create';
put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_emails(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'user_name char(50) ¬null,';
put 'user_displayname char(100),';
put 'user_email char(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_emails;';
put 'index create';
put 'pk_mpe_emails=(tx_to user_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_excel_config(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'xl_libref char(8),';
put 'xl_table char(32),';
put 'xl_column char(32),';
put 'xl_rule char(32),';
put 'xl_active num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_excel_config;';
put 'index create';
put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_XLMAP_DATA(';
put 'LOAD_REF char(32) ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_RANGE_ID char(32) ¬null,';
put 'ROW_NO num ¬null,';
put 'COL_NO num ¬null,';
put 'VALUE_TXT char(4000)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify MPE_XLMAP_DATA;';
put 'index create';
put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_xlmap_info(';
put 'tx_from num ¬null,';
put 'tx_to num ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_DESCRIPTION char(1000) ¬null,';
put 'XLMAP_TARGETLIBDS char(41) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_xlmap_info;';
put 'index create';
put 'pk_mpe_xlmap_info=(tx_to xlmap_id)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_xlmap_rules(';
put 'tx_from num ¬null,';
put 'tx_to num ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_RANGE_ID char(32) ¬null,';
put 'XLMAP_SHEET char(32) ¬null,';
put 'XLMAP_START char(1000) ¬null,';
put 'XLMAP_FINISH char(1000)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_xlmap_rules;';
put 'index create';
put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_filteranytable(';
put 'filter_rk num ¬null,';
put 'filter_hash char(32) ¬null,';
put 'filter_table char(41) ¬null,';
put 'processed_dttm num ¬null format=datetime19.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_filteranytable;';
put 'index create filter_rk /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_filtersource(';
put 'filter_hash char(32) ¬null,';
put 'filter_line num ¬null,';
put 'group_logic char(3) ¬null,';
put 'subgroup_logic char(3) ¬null,';
put 'subgroup_id num ¬null,';
put 'variable_nm varchar(32) ¬null,';
put 'operator_nm varchar(12) ¬null,';
put 'raw_value varchar(4000) ¬null,';
put 'processed_dttm num ¬null format=datetime19.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_filtersource;';
put 'index create';
put 'pk_mpe_filtersource=(filter_hash filter_line)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_groups(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'group_name char(100) ¬null,';
put 'user_name char(50) ¬null,';
put 'group_desc char(256)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_groups;';
put 'index create';
put 'pk_mpe_groups=(tx_to group_name user_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_lineage_cols';
put '(';
put 'col_id char(32),';
put 'direction char(1),';
put 'sourcecoluri char(256),';
put 'map_type char(256),';
put 'map_transform char(256),';
put 'jobname char(256),';
put 'sourcetablename char(256),';
put 'sourcecolname char(256),';
put 'targettablename char(256),';
put 'targetcolname char(256),';
put 'targetcoluri char(256),';
put 'Derived_Rule char(500),';
put 'level int,';
put 'modified_dttm num format=datetime19.3,';
put 'modified_by char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lineage_cols;';
put 'index create';
put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_LINEAGE_TABS';
put '(';
put 'tx_from num ¬null format=datetime19.3,';
put 'jobid char(17),';
put 'srctableid char(17),';
put 'tgttableid char(17),';
put 'jobname char(128),';
put 'srctabletype char(16),';
put 'srctablename char(64),';
put 'srclibref char(8),';
put 'tgttabletype char(16),';
put 'tgttablename char(64),';
put 'tgtlibref char(8),';
put 'tx_to num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lineage_tabs;';
put 'index create';
put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_loads(';
put 'csv_dir char(255),';
put 'user_nm char(50) ,';
put 'status char(15) ,';
put 'duration num ,';
put 'processed_dttm num format=datetime19.3,';
put 'reason_txt char(2048) ,';
put 'approvals char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_loads;';
put 'index create csv_dir /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_lockanytable(';
put 'lock_lib varchar(8) ¬null ,';
put 'lock_ds varchar(32) ¬null,';
put 'lock_status_cd varchar(10) ¬null,';
put 'lock_user_nm varchar(100) ¬null ,';
put 'lock_ref varchar(200),';
put 'lock_pid varchar(10),';
put 'lock_start_dttm num format=E8601DT26.6,';
put 'lock_end_dttm num format=E8601DT26.6';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lockanytable;';
put 'index create';
put 'pk_mpe_lockanytable=(lock_lib lock_ds)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_maxkeyvalues(';
put 'keytable varchar(41) label=''Base table in libref.dataset format'',';
put 'keycolumn char(32) format=$32.';
put 'label=''The Surrogate / Retained key field containing the key values.'',';
put 'max_key num label=';
put '''Integer value representing current max RK or SK value in the KEYTABLE'',';
put 'processed_dttm num format=E8601DT26.6';
put 'label=''Datetime this value was last updated''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_maxkeyvalues;';
put 'index create keytable /nomiss unique;';
put 'quit;';
put '/* no PK defined as it is a transaction table */';
put 'proc sql;';
put 'create table &lib..mpe_requests(';
put 'request_dttm num ¬null format=datetime19.,';
put 'request_user char(64) ¬null,';
put 'request_service char(64) ¬null,';
put 'request_params char(128)';
put ');';
put 'proc sql;';
put 'create table &lib..mpe_review(';
put 'table_id varchar(32) ¬null,';
put 'reviewed_by_nm varchar(100) ¬null,';
put 'base_table varchar(41) ¬null,';
put 'review_status_id varchar(10) ¬null,';
put 'reviewed_on_dttm num ¬null format=datetime19.3,';
put 'review_reason_txt varchar(400)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_review;';
put 'index create';
put 'pk_mpe_review=(table_id reviewed_by_nm)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_row_level_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'RLS_RK num ¬null,';
put 'RLS_SCOPE char(8) ¬null,';
put 'RLS_GROUP char(128) ¬null,';
put 'RLS_LIBREF char(8) ¬null,';
put 'RLS_TABLE char(32) ¬null,';
put 'RLS_GROUP_LOGIC char(3) ¬null,';
put 'RLS_SUBGROUP_LOGIC char(3) ¬null,';
put 'RLS_SUBGROUP_ID num ¬null,';
put 'RLS_VARIABLE_NM varchar(32) ¬null,';
put 'RLS_OPERATOR_NM varchar(12) ¬null,';
put 'RLS_RAW_VALUE varchar(4000) ¬null,';
put 'RLS_ACTIVE num ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_row_level_security;';
put 'index create';
put 'pk_mpe_row_level_security=(tx_to RLS_RK)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'libref char(8) ¬null,';
put 'dsn char(32) ¬null,';
put 'access_level char(10) ¬null,';
put 'sas_group char(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_security;';
put 'index create';
put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_selectbox(';
put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/';
put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */';
put 'selectbox_rk num ¬null, /* surrogate key */';
put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/';
put 'select_ds varchar(32) ¬null,';
put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */';
put 'selectbox_value varchar(500) ¬null, /* selectbox value */';
put 'selectbox_order num , /* optional ordering (1 comes before 2) */';
put 'selectbox_type varchar(32) /* column type (blank for default, else';
put 'sas or js to indicate relevant system functions)*/';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_selectbox;';
put 'index create';
put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_signoffs(';
put 'tech_from_dttm num ¬null format=datetime19.3,';
put 'tech_to_dttm num ¬null format=datetime19.3,';
put 'signoff_table varchar(50) ¬null,';
put 'signoff_section_rk num ¬null,';
put 'signoff_version_rk num ¬null,';
put 'signoff_name varchar(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_signoffs;';
put 'index create';
put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)';
put '/nomiss unique;';
put 'quit;';
put '/* mpe_submit */';
put 'proc sql;';
put 'create table &lib..mpe_submit(';
put 'table_id varchar(32) ¬null,';
put 'submit_status_cd varchar(10) ¬null,';
put 'base_lib char(8) ¬null,';
put 'base_ds char(32) ¬null,';
put 'submitted_by_nm varchar(100) ¬null,';
put 'submitted_on_dttm num ¬null format=datetime19.3,';
put 'submitted_reason_txt varchar(400),';
put 'input_obs num,';
put 'input_vars num,';
put 'num_of_approvals_required num ¬null ,';
put 'num_of_approvals_remaining num ¬null ,';
put 'reviewed_by_nm char(100),';
put 'reviewed_on_dttm num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_submit;';
put 'index create table_id /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_tables(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'libref char(8) ¬null,';
put 'dsn char(32) ¬null,';
put 'num_of_approvals_required int,';
put 'loadtype char(12) ,';
put 'buskey char(1000) ,';
put 'var_txfrom char(32) ,';
put 'var_txto char(32) ,';
put 'var_busfrom char(32) ,';
put 'var_busto char(32) ,';
put 'var_processed char(32) ,';
put 'close_vars varchar(500),';
put 'pre_edit_hook char(200),';
put 'post_edit_hook char(200),';
put 'pre_approve_hook char(200) ,';
put 'post_approve_hook char(200) ,';
put 'signoff_cols varchar(500),';
put 'signoff_hook varchar(200),';
put 'notes char(1000) ,';
put 'rk_underlying char(1000) ,';
put 'audit_libds char(41)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_tables;';
put 'index create';
put 'pk_mpe_tables=(tx_to libref dsn)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_users(';
put 'user_id char(50) ¬null,';
put 'last_seen_dt num ¬null format=date9.,';
put 'registered_dt num ¬null format=date9.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_users;';
put 'index create user_id /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_VALIDATIONS';
put '(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'BASE_LIB varchar(8),';
put 'BASE_DS varchar(32),';
put 'BASE_COL varchar(32),';
put 'RULE_TYPE varchar(32),';
put 'RULE_VALUE varchar(128),';
put 'RULE_ACTIVE num ,';
put 'TX_TO num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_validations;';
put 'index create';
put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_x_test(';
put 'primary_key_field num ¬null,';
put 'some_char char(32767) ,';
put 'some_dropdown char(128),';
put 'some_num num ,';
put 'some_date num format=date9.,';
put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,';
put 'some_time num format=time8.,';
put 'some_shortnum num length=4,';
put 'some_bestnum num format=best.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_x_test;';
put 'index create primary_key_field /nomiss unique;';
put 'quit;';
put '%mend mpe_makedatamodel;';
put '%macro mpe_makesampledata(outlib=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put '%if &syssite ne 70221618 and &syssite ne 70253615 %then %do;';
put '%put syssite=&syssite, exiting &sysmacroname;';
put '%return;';
put '%end;';
put 'data &outlib..class(index=(name /unique));';
put 'set sashelp.class;';
put 'run;';
put 'data &outlib..cars(index=(carspk=(make model drivetrain) /unique));';
put 'set sashelp.cars;';
put 'run;';
put 'data &outlib..springs(index=(springspk=(name area latitude) /unique));';
put 'set sashelp.springs;';
put 'run;';
put 'data &outlib..fmt_checks;;';
put 'pk=1; E8601DA=date();';
put 'format E8601DA E8601DA10.;';
put 'run;';
put 'data append;';
put 'if 0 then set &dc_libref..mpe_tables;';
put 'TX_FROM=0;';
put 'TX_TO=''31DEC9999:23:59:59''dt;';
put 'LIBREF=%upcase("&outlib");';
put 'LOADTYPE=''UPDATE'';';
put 'NUM_OF_APPROVALS_REQUIRED=1;';
put 'DSN=''SPRINGS''; BUSKEY=''NAME AREA LATITUDE''; output;';
put 'DSN=''CARS''; BUSKEY=''MAKE MODEL DRIVETRAIN''; output;';
put 'DSN=''CLASS''; BUSKEY=''NAME''; output;';
put 'DSN=''FMT_CHECKS''; BUSKEY=''PK''; output;';
put 'run;';
put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;';
put 'run;';
put '/**';
put '* DC data extra';
put '*/';
put '%local lib;';
put '%let lib=&dc_libref;';
put 'proc sql;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=4';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_TABLES"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''NUM_OF_APPROVALS_REQUIRED''';
put ',RLS_OPERATOR_NM=''>''';
put ',RLS_RAW_VALUE=''0''';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=5';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=6';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=7';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=2';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=8';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=3';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=9';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=4';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=10';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=5';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=11';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=6';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=12';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=7';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=13';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=5';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=14';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=6';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=15';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=7';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=2';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=16';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=8';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=3';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=17';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=9';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=4';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=18';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=10';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=5';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=19';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=6';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=20';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=7';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put '/** create excel config */';
put 'insert into &lib..MPE_EXCEL_CONFIG set';
put 'tx_from=0';
put ',xl_libref="&lib"';
put ',xl_table="MPE_DATADICTIONARY"';
put ',xl_column="DD_LONGDESC"';
put ',xl_rule="FORMULA"';
put ',xl_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/** mpe_security table */';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="303001.DataController"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="303001.DataController"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'data append;';
put 'if 0 then set &dc_libref..mpe_tables;';
put 'TX_FROM=0;';
put 'TX_TO=''31DEC9999:23:59:59''dt;';
put 'LIBREF=%upcase("&dc_libref");';
put 'LOADTYPE=''UPDATE'';';
put 'NUM_OF_APPROVALS_REQUIRED=1;';
put 'DSN=''MPE_USERS''; BUSKEY=''USER_ID''; output;';
put 'run;';
put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;';
put 'run;';
put '%mend mpe_makesampledata;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_deletejes(path=';
put ',name=';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=(%mf_isblank(&path)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(path value must be provided)';
put ')';
put '%mp_abort(iftrue=(%mf_isblank(&name)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(name value must be provided)';
put ')';
put '%mp_abort(iftrue=(%length(&path)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(path value must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%put &sysmacroname: fetching details for &path ;';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&path";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put &sysmacroname: Folder &path NOT FOUND - nothing to delete!;';
put '%return;';
put '%end;';
put '%else %if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put '%put &sysmacroname: grab the follow on link ;';
put '%local libref1;';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data _null_;';
put 'set &libref1..links;';
put 'if rel=''members'' then call symputx(''mref'',quote("&base_uri"!!trim(href)),''l'');';
put 'run;';
put '/* get the children */';
put '%local fname1a;';
put '%let fname1a=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1a &oauth_bearer';
put 'url=%unquote(%superq(mref));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '%put &=SYS_PROCHTTP_STATUS_CODE;';
put '%local libref1a;';
put '%let libref1a=%mf_getuniquelibref();';
put 'libname &libref1a JSON fileref=&fname1a;';
put '%local uri found;';
put '%let found=0;';
put '%put Getting object uri from &libref1a..items;';
put 'data _null_;';
put 'length contenttype name $1000;';
put 'set &libref1a..items;';
put 'if contenttype=''jobDefinition'' and upcase(name)="%upcase(&name)" then do;';
put 'call symputx(''uri'',cats("&base_uri",uri),''l'');';
put 'call symputx(''found'',1,''l'');';
put 'end;';
put 'run;';
put '%if &found=0 %then %do;';
put '%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;';
put '%return;';
put '%end;';
put 'proc http method="DELETE" url="&uri" &oauth_bearer;';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="*/*";/**/';
put 'run;';
put '%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;';
put 'data _null_; infile &fname2; input; putlog _infile_;run;';
put '%mp_abort(mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put '%else %put &sysmacroname: &path/&name successfully deleted;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put 'filename &fname1a clear;';
put 'libname &libref1a clear;';
put '%mend mv_deletejes;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief self destructing setup service';
put '@details Will create the database and perform config activities';
put ' SAS Macros
';
put '@li mf_getapploc.sas';
put '@li mf_mkdir.sas';
put '@li mf_trimstr.sas';
put '@li mpe_getvars.sas';
put '@li mpe_makedata.sas';
put '@li mpe_makedatamodel.sas';
put '@li mpe_makesampledata.sas';
put '@li mv_deletejes.sas';
put '@version 3.5';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global dcpath ADMIN ;';
put '%webout(FETCH)';
put '/* enable vars to be passed as url params */';
put '%let exist=%sysfunc(exist(work.fromjs));';
put '%let inds=%sysfunc(ifc(&exist=1,fromjs,_null_));';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''dcpath'',dcpath);';
put 'call symputx(''ADMIN'',ADMIN);';
put 'run;';
put 'options noquotelenmax;';
put '%let dclib=%upcase(VIYA%substr(%sysevalf(%sysfunc(datetime())/60),3,4));';
put '%let dclibname=Data Controller (&dclib);';
put '%let DC_LIBREF=&dclib;';
put '%let work=%sysfunc(pathname(work));';
put '%let dcpath=%mf_trimstr(&dcpath,/)/&dclib;';
put '%put &=sysuserid;';
put '%put &=dcpath;';
put '%put &=admin;';
put '%mf_mkdir(&dcpath)';
put '%mf_mkdir(&dcpath/secret)';
put '%mf_mkdir(&dcpath/dc_staging)';
put 'libname &dclib "&dcpath";';
put '%global admin;';
put '%let admin=%sysfunc(coalescec(&admin,All Users));';
put '%mpe_makedatamodel(lib=&dclib)';
put '%mpe_makedata(lib=&dclib,mpeadmins=&admin,path=%str(&dcpath))';
put '/* sample data library */';
put '%mf_mkdir(&dcpath/dc_demo)';
put 'libname dcdemo "&dcpath/dc_demo";';
put '%mpe_makesampledata(outlib=DCDEMO)';
put '/* the DC precode is stored in the root of the project */';
put '%let root=%mf_getapploc(&_program)/services;';
put '%put &=root;';
put 'filename jobout filesrvc folderpath="&root";';
put 'data _null_;';
put 'file jobout(''settings.sas'');';
put 'put ''/* these values are ignored if DC_LIBREF was declared in autoexec */'';';
put 'put '' '';';
put 'put ''%global DC_LIBREF dc_admin_group dc_staging_area ;'';';
put 'put ''/* This library (libref) contains the control datasets for DC */'';';
put 'put ''/* If a different libref must be used, configure it below */'';';
put 'put ''%let DC_LIBREF='' "&dclib;";';
put 'put '' '';';
put 'put "libname &dclib ''&dcpath'' ;";';
put 'put '' '';';
put 'put ''/* This group has unrestricted access to Data Controller */'';';
put 'put ''%let dc_admin_group='' "&admin;";';
put 'put '' '';';
put 'put ''/* This physical location is used for staging data and audit history */'';';
put 'put ''%let dc_staging_area='' "&dcpath/dc_staging;";';
put 'put '' '';';
put 'if &syssite in (70221618,70253615) then do;';
put 'put "libname dcdemo ''&dcpath/dc_demo'';";';
put 'end;';
put 'run;';
put '/* create demo data';
put 'cas dcsession;';
put 'caslib _all_ assign;';
put 'caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic GLOBAL;';
put 'proc casutil;';
put 'LOAD DATA=dcdemo.cars';
put 'CASOUT="cars"';
put 'OUTCASLIB="casmusic" PROMOTE ;';
put 'run;';
put '*/';
put '/*';
put 'cas mysess;';
put 'caslib _all_ assign;';
put 'data casmusic.artists(promote=yes);';
put 'length name varchar(30);';
put 'do tracks=1 to 100;';
put 'name=''Phil Collins''!!cats(tracks);';
put 'output;';
put 'end;';
put 'run;';
put '*/';
put '/*';
put '%let url=http://millionsongdataset.com/sites/default/files/AdditionalFiles%trim(';
put ')/unique_tracks.txt;';
put 'filename test url "&url" lrecl=3000 ;';
put 'proc sql;';
put 'drop table casmusic.tunes;';
put 'data tracks;';
put 'infile test dlmstr='''' dsd end=lastobs;';
put 'input track_id:$32. song_id:$32. artist_nm:$128. title:$256.;';
put 'output;';
put 'if lastobs then do;';
put 'track_id=''dummyrecords'';';
put 'title=''none'';';
put 'artist_nm=''none'';';
put 'do x=1 to 4000000;';
put 'drop x;';
put 'song_id=cats(x);';
put 'output;';
put 'end;';
put 'stop;';
put 'end;';
put 'run;';
put 'proc casutil;';
put 'LOAD DATA=tracks';
put 'CASOUT="tunes"';
put 'OUTCASLIB="casmusic" PROMOTE ;';
put 'run;';
put '/*';
put 'data append;';
put 'if 0 then set &dclib..MPE_TABLES;';
put 'libref="CASMUSIC";';
put 'dsn=''TUNES'';';
put 'num_of_approvals_required=1;';
put 'loadtype=''UPDATE'';';
put 'buskey=''TRACK_ID SONG_ID'';';
put 'tx_from=0;';
put 'tx_to=''31DEC9999:23:59:59''dt;';
put 'output;';
put 'dsn=''ARTISTS'';';
put 'buskey=''NAME'';';
put 'output;';
put 'run;';
put 'proc append base=&dclib..MPE_tABLES data=append;';
put 'run;';
put '*/';
put '%mp_abort(iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Err during DB build)';
put ')';
put '%webout(OPEN)';
put 'data result;';
put 'dclib="&dclib";';
put 'admingroup="&admin";';
put 'dcpath="&dcpath";';
put 'run;';
put '%webout(OBJ,result)';
put '%webout(CLOSE)';
put '%mv_deletejes(path=&root/admin, name=makedata)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshcatalog;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mpe_refreshtables(lib,ds=#all);';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%local engine; %let engine=%mf_getengine(&lib);';
put '%local schema; %let schema=%mf_getschema(&lib);';
put '%put running &sysmacroname &lib(&engine &schema) for &ds;';
put 'proc sql;';
put 'create table cols as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib cols extraction)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.indexes as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table finalcols as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.indexes b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%local dsn;';
put '%if &ds = #ALL %then %let dsn=;';
put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table work.pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.constraints';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table work.sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table work.pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from work.sum a';
put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table work.pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data work.finalpks;';
put 'set pkdefault pk4sure pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table finalcols as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* load columns */';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_vars';
put ',append_dsn=finalcols';
put ',PK=LIBREF DSN NAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF DSN';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.tabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data tabs2;';
put 'set finalcols;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table work.finaltabs as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.tabs a';
put 'left join work.tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_tabs';
put ',append_dsn=finaltabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '/* prepare table frequently changing attributes */';
put 'proc sql;';
put '%if &engine=SQLSVR %then %do;';
put 'connect using &lib;';
put 'create table work.attrs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date';
put 'FROM sys.tables ;';
put ');';
put 'create table work.nobs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema''';
put ',A.Name, AVG(B.rows) AS ''RowCount''';
put 'FROM sys.objects A';
put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id';
put 'WHERE A.type = ''U''';
put 'GROUP BY A.schema_id, A.Name';
put ');';
put 'disconnect from &lib;';
put 'create table statustabs as select';
put 'a.libref';
put ',a.dsn';
put ',b.create_date as crdate';
put ',b.modify_date as modate';
put ',. as filesize';
put ',c.RowCount as nobs';
put 'from work.tabs a';
put 'left join work.attrs(where=(schema="&schema")) b';
put 'on upcase(a.dsn)=upcase(b.name)';
put 'left join work.nobs(where=(schema="&schema")) c';
put 'on upcase(a.dsn)=upcase(c.name);';
put '%end;';
put '%else %do;';
put 'create table statustabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',crdate';
put ',modate';
put ',filesize';
put ',nobs';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%end;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_tabs';
put ',append_dsn=statustabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '%if &ds = #ALL %then %do;';
put 'proc sql;';
put 'create table statuslibs as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_libs';
put ',append_dsn=statuslibs';
put ',PK=LIBREF';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put ')';
put '%end;';
put '%mend mpe_refreshtables;';
put '%macro dc_refreshcatalog();';
put '%mpe_refreshlibs()';
put 'filename executor catalog ''work.code.code.source'';';
put 'data libraries;';
put 'set &mpelib..mpe_datacatalog_libs;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'file executor;';
put 'str=cats(''%mpe_refreshtables('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%mend dc_refreshcatalog;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshcatalog.sas';
put '@brief Refreshes the library data catalog';
put '@details A library may be passed in a LIBREF url param.';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li dc_refreshcatalog.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global libref;';
put '%mpeinit()';
put '%dc_refreshcatalog(&libref)';
put 'data _null_;';
put 'file _webout;';
put 'put '' Catalog Refresh Complete
'';';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshlibs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshlibs.sas';
put '@brief Refreshes the library data catalog';
put '@details';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li mpe_refreshlibs.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mpe_refreshlibs()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=registerkey;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Register a new licence key';
put '@details';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li bitemporal_dataloader.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '@test';
put 'echo ''{"keyupload":[{"activation_key":"slfdjasfda;dslf","licence_key":"asdfasdlfkajsfdas"}]}''>in.json';
put 'sasjs request admin/registerkey -d in.json';
put '**/';
put '%mpeinit()';
put '/* determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%global admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from groups where groupname="&mpeadmins";';
put '%mp_abort(iftrue= (&admin_check = 0)';
put ',mac=%str(&_program)';
put ',msg=%str(Only members of &mpeadmins may register a key)';
put ')';
put '%global licencekey activation_key;';
put 'data _null_;';
put 'set work.keyupload;';
put 'call symputx(''activation_key'',activation_key);';
put 'call symputx(''licencekey'',licence_key);';
put 'call symputx(''activlen'',length(activation_key));';
put 'call symputx(''liclen'',length(licence_key));';
put 'run;';
put '%mp_abort(iftrue= (&activlen< 10)';
put ',mac=%str(&_program)';
put ',msg=%str(Invalid activation_key)';
put ')';
put '%mp_abort(iftrue= (&liclen < 10)';
put ',mac=%str(&_program)';
put ',msg=%str(Invalid licencekey)';
put ')';
put 'data work.loadme;';
put 'if 0 then set &mpelib..mpe_config;';
put 'VAR_SCOPE=''DC'';';
put 'VAR_NAME=''DC_ACTIVATION_KEY'';';
put 'VAR_VALUE=symget(''activation_key'');';
put 'VAR_ACTIVE=1;';
put 'output;';
put 'VAR_NAME=''DC_LICENCE_KEY'';';
put 'VAR_VALUE=symget(''licencekey'');';
put 'VAR_ACTIVE=1;';
put 'output;';
put 'keep VAR_: ;';
put 'run;';
put '%bitemporal_dataloader(';
put 'tech_from=tx_from';
put ',tech_to = tx_to';
put ',base_lib=&mpelib';
put ',base_dsn=mpe_config';
put ',append_lib=WORK';
put ',append_dsn=loadme';
put ',PK= VAR_SCOPE VAR_NAME';
put ',ETLSOURCE=%str(&_program STP)';
put ',LOADTYPE=TXTEMPORAL';
put ',dclib=&mpelib';
put ')';
put 'data work.return;';
put 'msg=''SUCCESS'';';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,return)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/approvers;
%let service=getapprovals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getapprovals.sas';
put '@brief Returns a list of staged data items that need to be approved';
put '@details';
put ' SAS Macros
';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* determine users group membership */';
put '%let user=%mf_getuser();';
put '%mpe_getgroups(user=&user,outds=work.groups)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put 'proc sql noprint;';
put 'create table out1 (rename=(SUBMITTED_ON_DTTM1=SUBMITTED_ON_DTTM)) as';
put 'select table_id';
put ',submit_status_cd as REVIEW_STATUS_ID';
put ',SUBMITTED_BY_NM';
put ',cats(base_lib,''.'',base_ds) as base_table';
put ',put(submitted_on_dttm,yymmddhhmmss.) as SUBMITTED_ON_DTTM1';
put ',submitted_on_dttm as SUBMITTED_ON_DTTM2';
put ',submitted_reason_txt';
put ',num_of_approvals_required';
put ',num_of_approvals_remaining';
put ',base_lib as libref';
put ',base_ds as dsn';
put 'from &mpelib..mpe_submit (where=(submit_status_cd=''SUBMITTED''))';
put '/* filter out any submits for which approval is already made */';
put 'where table_id not in (';
put 'select table_id from &mpelib..mpe_review where submitted_by_nm="&user"';
put ');';
put '%macro getapprovals();';
put '%local admin_check;';
put 'select count(*) into: admin_check';
put 'from groups';
put 'where groupname="&mpeadmins"';
put 'or groupname in (';
put 'select sas_group from &mpelib..mpe_security';
put 'where libref=''*ALL*''';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and access_level in (''APPROVE'')';
put ');';
put '%if &admin_check >0 %then %do;';
put 'create table fromSAS as';
put 'select distinct * from out1';
put 'order by SUBMITTED_ON_DTTM2 desc;';
put '%end;';
put '%else %do;';
put 'create table fromSAS as';
put 'select distinct a.*';
put 'from out1 a';
put 'inner join &mpelib..mpe_security b';
put 'on a.libref=b.libref';
put 'and (a.dsn=b.dsn or b.dsn=''*ALL*'')';
put 'and &dc_dttmtfmt. lt b.tx_to';
put 'and b.ACCESS_LEVEL =''APPROVE''';
put 'and b.SAS_GROUP in (select groupname from work.groups)';
put 'order by SUBMITTED_ON_DTTM2 desc;';
put '%end;';
put '%mend getapprovals;';
put '%getapprovals()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=gethistory;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Returns the list of previously approved / rejected items.';
put '@details History is taken from MPE_SUBMIT (where status_cd ne ''SUBMITTED'') and';
put 'filtered according to the groups in MPE_SECURITY (unless the user is in the';
put 'DC admin group).';
put ' SAS Macros
';
put '@li mpe_getvars.sas';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put ' Service Inputs
';
put ' BROWSERPARAMS
';
put 'The following variables MAY be provided from frontend (HIST can also be set';
put 'in MPE_CONFIG):';
put '@li HIST - number of records to return';
put '@li STARTROW - the starting row (default is 1)';
put ' Service Outputs
';
put ' FROMSAS
';
put 'This table is returned, starting from &STARTROW for &HIST rows (ordered';
put 'descending on SUBMITTED datetime)';
put '@li TABLE_ID';
put '@li BASE_TABLE';
put '@li SUBMITTED';
put '@li SUBMITTED_REASON_TXT';
put '@li SUBMITTER';
put '@li REVIEWED';
put '@li STATUS';
put '@li REVIEWED_ON_DTTM';
put '@li APPROVER';
put ' HISTPARAMS
';
put '@li HIST - rows returned';
put '@li STARTROW - starting row used';
put '@li NOBS - Number of observations (rows) available';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* hard coded HIST value */';
put '%let hist=40;';
put '%let startrow=1;';
put '/* load parameters from frontend (HIST and STARTROW) */';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC_REVIEW"';
put 'and var_name=''HISTORY_ROWS''';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(''hist'',var_value,''G'');';
put 'putlog ''mpe_config: '' var_name "=" var_value;';
put 'run;';
put '/* load parameters (override HIST again if provided) */';
put '%mpe_getvars(BrowserParams, BrowserParams)';
put '/* determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '/* check to see if the user is an admin, or has *ALL* access rights */';
put '%let authcheck=0;';
put 'proc sql noprint;';
put 'create table work.authcheck';
put 'as select *';
put 'from usergroups';
put 'where upcase(groupname)="%upcase(&mpeadmins)"';
put 'or upcase(groupname) in (';
put 'select upcase(sas_group) from &mpelib..mpe_security';
put 'where libref=''*ALL*'' and &dc_dttmtfmt. lt tx_to';
put ');';
put 'select count(*) into: authcheck from &syslast;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after auth check)';
put ')';
put '/* now get the previous &hist records from mpe_submit */';
put 'proc sql;';
put 'create view work.submits as';
put 'select distinct a.TABLE_ID';
put ',cats(a.base_lib,''.'',a.base_ds) as base_table';
put ',put(a.SUBMITTED_ON_DTTM,yymmddhhmmss.) as submitted';
put ',a.submitted_reason_txt';
put ',a.submitted_by_nm as submitter';
put ',put(a.REVIEWED_ON_DTTM,yymmddhhmmss.) as REVIEWED';
put ',a.submit_status_cd as status';
put ',a.reviewed_on_dttm';
put ',a.reviewed_by_nm as approver';
put 'from &mpelib..mpe_submit(where=(submit_status_cd ne ''SUBMITTED'')) a';
put '%macro gethistory();';
put '%if &authcheck=0 %then %do;';
put '/* filter for allowed items */';
put 'left join &mpelib..mpe_security(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.base_lib=b.libref';
put 'and (a.base_ds=b.dsn or b.dsn=''*ALL*'')';
put 'where upcase(b.SAS_GROUP) in (select upcase(groupname) from work.usergroups)';
put 'and b.access_level in (''VIEW'',''AUDIT'',''EDIT'',''APPROVE'')';
put '%end;';
put '%mend gethistory;';
put '%gethistory()';
put 'order by a.submitted_on_dttm desc;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after fetching submits)';
put ')';
put 'data work.fromsas;';
put 'set work.submits;';
put 'if _n_ ge &startrow;';
put 'n+1;';
put 'if n>&hist then stop;';
put 'drop n;';
put 'run;';
put 'proc sql noprint;';
put 'select count(*) into: nobs from work.submits;';
put 'data work.histparams;';
put 'hist=&hist;';
put 'startrow=&startrow;';
put 'nobs=&nobs;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(OBJ,histparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=rejection;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Removes a staged data package from approval screen';
put '@details';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_lockanytable.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_alerts.sas';
put '@li mpe_getvars.sas';
put '@li removecolsfromwork.sas';
put ' Service Outputs
';
put ' fromsas
';
put '@li TABLE_ID';
put '@li SUBMITTED_REASON_TXT';
put '@li RESPONSE';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global STP_ACTION TABLE STP_REASON;';
put '%mpeinit()';
put '%mpe_getvars(BrowserParams, BrowserParams)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '/* get current status and base table */';
put 'data _null_;';
put 'set &mpelib..mpe_submit(where=(TABLE_ID="&TABLE"));';
put 'call symputx(''BASE_TABLE'',cats(base_lib,''.'',base_ds));';
put 'call symputx(''submit_status_cd'',submit_status_cd);';
put 'run;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: base_table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%quote(&submit_status_cd)=%quote(REJECTED))';
put ',mac=&_program';
put ',msg=%str(&table is already rejected!)';
put ')';
put '%mp_abort(iftrue= (&syscc ge 4)';
put ',mac=&_program';
put ',msg=%str(Issue on setup)';
put ')';
put '/**';
put '* determine if user is authorised to reject table';
put '*/';
put '%let user=%mf_getuser();';
put '%global authcheck; %let authcheck=0;';
put '%mpe_accesscheck(&base_table,outds=authAPP,user=&user,access_level=APPROVE)';
put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);';
put '%mp_abort(iftrue= (&authcheck=0)';
put ',mac=&_program..sas';
put ',msg=%str(User &user does not have APPROVE rights on &base_table and is not';
put 'in the &mpeadmins group)';
put ')';
put '/* update the control table to show table as rejected (and why) */';
put '%let now=%sysfunc(datetime());';
put 'data work.reject;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&table";';
put 'BASE_TABLE="&base_table";';
put 'REVIEW_STATUS_ID="REJECTED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&now;';
put 'REVIEW_REASON_TXT=symget(''STP_REASON'');';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&table rejection),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.reject;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&table rejection),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set submit_status_cd=''REJECTED'',';
put 'num_of_approvals_remaining=0,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&now';
put 'where table_id="&table";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc AFTER update...)';
put ')';
put '%mpe_alerts(alert_event=REJECTED';
put ', alert_lib=%scan(&BASE_TABLE,1,.)';
put ', alert_ds=%scan(&BASE_TABLE,2,.)';
put ', dsid=&TABLE';
put ')';
put 'data fromSAS;';
put 'RESPONSE=''SUCCESS!'';';
put 'set REJECT;';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/auditors;
%let service=getauditfile;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getauditfile.sas';
put '@brief Downloads a zip file containing audit info.';
put '@details The staging location from the &mpelocapprovals location';
put 'is zipped and returned as a file download. A user can only request the';
put 'audit pack if they have EDIT or APPROVE rights on the target table.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_verifymacvars.sas';
put '@li mpe_accesscheck.sas';
put '@li mp_abort.sas';
put '@li mp_dirlist.sas';
put '@li mp_binarycopy.sas';
put '@li mf_getattrn.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'options mprint;';
put '/* security checks */';
put '%let user=%mf_getuser();';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: libds';
put 'from &mpelib..mpe_submit';
put 'where table_id="&table";';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(libds table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: libds table)';
put ')';
put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT);';
put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE);';
put '%mp_abort(';
put 'iftrue=(';
put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put ')';
put ',mac=mpestp_audit';
put ',msg=%str(&user not authorised to download audit data for &table)';
put ')';
put 'ods package(ProdOutput) open nopf;';
put 'options notes source2 mprint;';
put '%let table=%unquote(&table);';
put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE);';
put 'data _null_;';
put 'set dirs;';
put 'retain str1';
put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";';
put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";';
put 'call execute(cats(str1,filename,str2));';
put 'run;';
put '%let archive_path=%sysfunc(pathname(work));';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name= "&table..zip" archive_path="&archive_path");';
put 'ods package(ProdOutput) close;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%nrstr(syscc=&syscc)';
put ')';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&archive_path/&table..zip)';
put ',outname=&table..zip';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getdiffs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdiffs.sas';
put '@brief Retrieves the diff file for viewing';
put '@details';
put ' SAS Macros
';
put '@li mpe_getvars.sas';
put '@li mpe_accesscheck.sas';
put '@li mf_getattrn.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mpe_getvars(BrowserParams, BrowserParams);';
put '/* security checks */';
put '%let user=%mf_getuser();';
put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT)';
put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE)';
put '%macro mpestp_diffs();';
put '%if %mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put '%then %do;';
put '%mp_abort(msg=%str(';
put '&user not authorised to download diffs data for &stp_table)';
put ',mac=mpestp_diffs.sas);';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* stream diffs csv to client */';
put '%mp_streamfile(contenttype=EXCEL';
put ',inloc=%str(&mpelocapprovals/&TABLE/&STP_DIFFS_CSV)';
put ',outname=&STP_DIFFS_CSV';
put ')';
put '%mend mpestp_diffs;';
put '%mpestp_diffs()';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getstagetable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getstagetable.sas';
put '@brief Retrieves the actual table that is being sent for update';
put '@details';
put ' SAS Macros
';
put '@li mf_getvalue.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let table_id=%mf_getvalue(work.iwant,table_id);';
put 'libname loc "&mpelocapprovals/&table_id";';
put 'data stagetable;';
put 'set loc.&table_id;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,stagetable,missing=STRING)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=postdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_md5(cvars=,nvars=);';
put '%local i var sep;';
put 'put(md5(';
put '%do i=1 %to %sysfunc(countw(&cvars));';
put '%let var=%scan(&cvars,&i,%str( ));';
put '&sep put(md5(trim(&var)),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '%do i=1 %to %sysfunc(countw(&nvars));';
put '%let var=%scan(&nvars,&i,%str( ));';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '),$hex32.)';
put '%mend mp_md5;';
put '%macro mp_loadformat(libcat,libds';
put ',loadtarget=NO';
put ',auditlibds=0';
put ',locklibds=0';
put ',delete_col=_____DELETE__THIS__RECORD_____';
put ',outds_add=0';
put ',outds_del=0';
put ',outds_mod=0';
put ',mdebug=0';
put ');';
put '/* set up local macro variables and temporary tables (with a prefix) */';
put '%local err msg prefix dslist i var fmtlist ibufsize;';
put '%let dslist=base_fmts template inlibds ds1 stagedata storediffs del1 del2;';
put '%if &outds_add=0 %then %let dslist=&dslist outds_add;';
put '%if &outds_del=0 %then %let dslist=&dslist outds_del;';
put '%if &outds_mod=0 %then %let dslist=&dslist outds_mod;';
put '%let prefix=%substr(%mf_getuniquename(),1,21);';
put '%do i=1 %to %sysfunc(countw(&dslist));';
put '%let var=%scan(&dslist,&i);';
put '%local &var;';
put '%let &var=%upcase(&prefix._&var);';
put '%end;';
put '/* in DC, format catalogs maybe specified in the libds with a -FC extension */';
put '%let libcat=%scan(&libcat,1,-);';
put '/* perform input validations */';
put '%mp_abort(';
put 'iftrue=(%mf_existds(&libds)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(&libds could not be found)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_existvar(&libds,FMTROW)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(FMTROW not found in &libds)';
put ')';
put '%let err=0;';
put '%let msg=0;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'value=upcase(value);';
put 'if &mdebug=0 then put name ''='' value;';
put 'if name=:''LOAD'' and value not in (''YES'',''NO'') then do;';
put 'call symputx(''msg'',"invalid value for "!!name!!":"!!value);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'else if name=''LIBCAT'' then do;';
put 'if exist(value,''CATALOG'') le 0 then do;';
put 'call symputx(''msg'',"Unable to open catalog: "!!value);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if (name=:''OUTDS'' or name in (''DELETE_COL'',''LOCKLIBDS'',''AUDITLIBDS''))';
put 'and missing(value) then do;';
put 'call symputx(''msg'',"missing value in var: "!!name);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'set &libds;';
put 'if missing(fmtrow) then do;';
put 'call symputx(''msg'',"missing fmtrow in format: "!!FMTNAME);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'run;';
put '%mp_abort(';
put 'iftrue=(&err ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(&msg)';
put ')';
put '%local cnt;';
put 'proc sql noprint;';
put 'select count(distinct catx(''|'',type,fmtname,fmtrow)) into: cnt from &libds;';
put '%mp_abort(';
put 'iftrue=(&cnt ne %mf_nobs(&libds))';
put ',mac=&sysmacroname';
put ',msg=%str(Non-unique primary key on &libds)';
put ')';
put '/**';
put '* First, extract only relevant formats from the catalog';
put '*/';
put 'proc sql noprint;';
put 'select distinct';
put 'case';
put 'when type=''N'' then upcase(fmtname)';
put 'when type=''C'' then cats(''$'',upcase(fmtname))';
put 'when type=''I'' then cats(''@'',upcase(fmtname))';
put 'when type=''J'' then cats(''@$'',upcase(fmtname))';
put 'else "&sysmacroname:UNHANDLED"';
put 'end';
put 'into: fmtlist separated by '' ''';
put 'from &libds;';
put '%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)';
put '/* get a hash of the row */';
put '%local cvars nvars;';
put '%let cvars=TYPE FMTNAME START END LABEL PREFIX FILL SEXCL EEXCL HLO DECSEP';
put 'DIG3SEP DATATYPE LANGUAGE;';
put '%let nvars=FMTROW MIN MAX DEFAULT LENGTH FUZZ MULT NOEDIT;';
put 'data &base_fmts/note2err;';
put 'set &base_fmts;';
put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);';
put 'run;';
put '/**';
put '* Ensure input table and base_formats have consistent lengths and types';
put '*/';
put 'data &inlibds/nonote2err;';
put 'length &delete_col $3 FMTROW 8 start end label $32767;';
put 'if 0 then set &base_fmts;';
put 'set &libds;';
put 'by type fmtname notsorted;';
put 'if &delete_col='''' then &delete_col=''No'';';
put 'fmtname=upcase(fmtname);';
put 'type=upcase(type);';
put 'if missing(type) then do;';
put 'if substr(fmtname,1,1)=''@'' then do;';
put 'if substr(fmtname,2,1)=''$'' then type=''J'';';
put 'else type=''I'';';
put 'end;';
put 'else do;';
put 'if substr(fmtname,1,1)=''$'' then type=''C'';';
put 'else type=''N'';';
put 'end;';
put 'end;';
put 'if type in (''N'',''I'') then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);';
put 'run;';
put '/**';
put '* Identify new records';
put '*/';
put 'proc sql;';
put 'create table &outds_add(drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'left join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where b.fmtname is null';
put 'and upcase(a.&delete_col) ne "YES"';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify modified records';
put '*/';
put 'create table &outds_mod (drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'inner join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where upcase(a.&delete_col) ne "YES"';
put 'and a.fmthash ne b.fmthash';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify deleted records';
put '*/';
put 'create table &outds_del(drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'inner join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where upcase(a.&delete_col)="YES"';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify fully deleted formats (where every record is removed)';
put '* These require to be explicitly deleted in proc format';
put '* del1 - identify _partial_ deletes';
put '* del2 - exclude these, and also formats that come with _additions_';
put '*/';
put 'create table &del1 as';
put 'select a.*';
put 'from &base_fmts a';
put 'left join &outds_del b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where b.fmtrow is null;';
put 'create table &del2 as';
put 'select * from &outds_del';
put 'where cats(type,fmtname) not in (select cats(type,fmtname) from &outds_add)';
put 'and cats(type,fmtname) not in (select cats(type,fmtname) from &del1);';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc prior to load prep)';
put ')';
put '%if &loadtarget=YES %then %do;';
put '/* new records plus base records that are not deleted or modified */';
put 'data &ds1;';
put 'merge &base_fmts(in=base)';
put '&outds_mod(in=mod)';
put '&outds_add(in=add)';
put '&outds_del(in=del);';
put 'if not del and not mod;';
put 'by type fmtname fmtrow;';
put 'run;';
put '/* add back the modified records */';
put 'data &stagedata;';
put 'set &ds1 &outds_mod;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put '%end;';
put '/* mp abort needs to run outside of conditional blocks */';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc prior to actual load)';
put ')';
put '%if &loadtarget=YES %then %do;';
put '%if %mf_nobs(&stagedata)=0 and %mf_nobs(&del2)=0 %then %do;';
put '%put There are no changes to load in &libcat!;';
put '%return;';
put '%end;';
put '%if &locklibds ne 0 %then %do;';
put '/* prevent parallel updates */';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&libcat,1,.)';
put ',ds=%scan(&libcat,2,.)-FC';
put ',ref=MP_LOADFORMAT commencing format load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '/* do the actual load */';
put 'proc format lib=&libcat cntlin=&stagedata;';
put 'run;';
put '/* apply any full deletes */';
put '%if %mf_nobs(&del2)>0 %then %do;';
put '%local delfmtlist;';
put 'proc sql noprint;';
put 'select distinct case when type=''N'' then cats(fmtname,''.FORMAT'')';
put 'when type=''C'' then cats(fmtname,''.FORMATC'')';
put 'when type=''J'' then cats(fmtname,''.INFMTC'')';
put 'when type=''I'' then cats(fmtname,''.INFMT'')';
put 'else cats(fmtname,''.BADENTRY!!!'') end';
put 'into: delfmtlist';
put 'separated by '' ''';
put 'from &del2;';
put 'proc catalog catalog=&libcat;';
put 'delete &delfmtlist;';
put 'quit;';
put '%end;';
put '%if &locklibds ne 0 %then %do;';
put '/* unlock the table */';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&libcat,1,.)';
put ',ds=%scan(&libcat,2,.)-FC';
put ',ref=MP_LOADFORMAT completed format load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '/* track the changes */';
put '%if &auditlibds ne 0 %then %do;';
put '%if &locklibds ne 0 %then %do;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&auditlibds,1,.)';
put ',ds=%scan(&auditlibds,2,.)';
put ',ref=MP_LOADFORMAT commencing audit table load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '%mp_storediffs(&libcat-FC';
put ',&base_fmts';
put ',TYPE FMTNAME FMTROW';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=&storediffs';
put ',mdebug=&mdebug';
put ')';
put 'proc append base=&auditlibds data=&storediffs;';
put 'run;';
put '%if &locklibds ne 0 %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&auditlibds,1,.)';
put ',ds=%scan(&auditlibds,2,.)';
put ',ref=MP_LOADFORMAT commencing audit table load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '%end;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc after load)';
put ')';
put '%if &mdebug=0 %then %do;';
put 'proc datasets lib=work;';
put 'delete &prefix:;';
put 'run;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%mend mp_loadformat;';
put '%macro mpe_targetloader(libds= /* library.dataset to LOAD (target) */';
put ',now= %sysfunc(datetime()) /* static processed timestamp */';
put ',etlsource= /* process from whence the data came */';
put ',STAGING_DS= STAGING_DS /* name of staging (work) dataset which should';
put 'be appended into the target. */';
put ',LOADTARGET=NO /* set to yes to actually load the target */';
put ',CLOSE_VARS= /* provide close vars to override defaults */';
put ',dclib=NOTPROVIDED';
put ',mdebug=0';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%local lib ds nobs;';
put '/**';
put '* if a format catalog (suffix "-FC") we assume the catalog has already been';
put '* created by the calling program with a libds of work.fmtextract';
put '*/';
put '%let orig_lib=%upcase(%scan(&libds,1,.));';
put '%let orig_ds=%upcase(%scan(&libds,2,.));';
put '%let orig_libds=&libds;';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%let lib=WORK;';
put '%let ds=FMTEXTRACT;';
put '%let libds=&lib..&ds;';
put '%end;';
put '%else %do;';
put '%let lib=&orig_lib;';
put '%let ds=&orig_ds;';
put '%end;';
put '%mp_abort(iftrue= (&dclib=NOTPROVIDED)';
put ',mac=&sysmacroname';
put ',msg=%str(dclib=NOTPROVIDED)';
put ')';
put '/* get table attributes */';
put '%let nobs=0;';
put 'data work.sumo_config;';
put 'set &mpelib..mpe_tables;';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="&orig_lib"';
put 'and dsn="&orig_ds";';
put 'call symputx(''LOADTYPE'',loadtype,''l'');';
put 'call symputx(''BUSKEY'',buskey,''l'');';
put 'call symputx(''VAR_TXFROM'',var_txfrom,''l'');';
put 'call symputx(''VAR_TXTO'',var_txto,''l'');';
put 'call symputx(''VAR_BUSFROM'',var_busfrom,''l'');';
put 'call symputx(''VAR_BUSTO'',var_busto,''l'');';
put 'call symputx(''VAR_PROCESSED'',VAR_PROCESSED,''l'');';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING,''l'');';
put '%if %length(&CLOSE_VARS)=0 %then %do;';
put 'call symputx(''CLOSE_VARS'',CLOSE_VARS,''l'');';
put '%end;';
put 'call symputx(''nobs'',_n_,''l'');';
put 'if missing(AUDIT_LIBDS) then AUDIT_LIBDS="&dclib..MPE_AUDIT";';
put 'call symputx(''AUDIT_LIBDS'',AUDIT_LIBDS,''l'');';
put 'put (_all_)(=);';
put 'run;';
put '/* check if table is actually configured to load */';
put '%if &nobs ne 1 %then %do;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="%mf_getuser()"';
put ',STATUS=''FAILED (BAD DS)''';
put ',CSV_DIR=symget(''ETLSOURCE'')';
put ',PROCESSED_DTTM=&now;';
put '%end;';
put '%mp_abort(iftrue= (&nobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Table not registered in &mpelib..mpe_tables)';
put ')';
put '%mp_abort(iftrue= (&nobs>1)';
put ',mac=&sysmacroname';
put ',msg=%str(Something is very wrong with the PK in &mpelib..mpe_tables)';
put ')';
put '%if &LOADTYPE=TXTEMPORAL %then %do;';
put '%bitemporal_dataloader(bus_from=,bus_to= /* explicitly empty*/';
put ',tech_from=&VAR_TXFROM';
put ',tech_to = &VAR_TXTO';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=&ETLSOURCE';
put ',LOADTYPE=&loadtype';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',CLOSE_VARS=&CLOSE_VARS';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %if &loadtype=REPLACE %then %do;';
put '%if &LOADTARGET=YES %then %do;';
put '%mp_lockanytable(LOCK,lib=&lib,ds=&ds,ref=%str(&etlsource),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put 'data WORK.&STAGING_DS;';
put 'set WORK.&STAGING_DS;';
put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;';
put '&VAR_PROCESSED = &now;';
put '%end;';
put 'drop _____DELETE__THIS__RECORD_____;';
put 'run;';
put 'proc sql; delete * from &libds;';
put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;';
put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)';
put '%end;';
put '%else %do;';
put '/* is full replace so treat all staged records as new in diff screen */';
put 'data work.outds_mod work.outds_add ;';
put 'set work.&staging_ds;';
put 'output work.outds_add;';
put 'run;';
put '/* previous table will be considered fully deleted */';
put 'data work.outds_del;';
put 'set &lib..&ds;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '%bitemporal_dataloader(bus_from=,bus_to=';
put ',tech_from= ,tech_to = /* explicitly empty*/';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=%superq(etlsource)';
put ',LOADTYPE=UPDATE';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %if &loadtype=FORMAT_CAT %then %do;';
put '/**';
put '* run mp_formatload';
put '* inputs:';
put '* - LOADTARGET';
put '* - CATALOG';
put '* - STAGEDATA';
put '* - LOADAUDIT';
put '* outputs:';
put '* work.outds_add';
put '* work.outds_del';
put '* work.outds_mod';
put '*/';
put '%mp_loadformat(&orig_libds';
put ',&staging_ds';
put ',loadtarget=&LOADTARGET';
put ',auditlibds=&AUDIT_LIBDS';
put ',locklibds=&dclib..mpe_lockanytable';
put ',delete_col=_____DELETE__THIS__RECORD_____';
put ',outds_add=outds_add';
put ',outds_del=outds_del';
put ',outds_mod=outds_mod';
put ',mdebug=&mdebug';
put ')';
put '%end;';
put '%else %if &loadtype=BITEMPORAL %then %do;';
put '%bitemporal_dataloader(bus_from=&VAR_BUSFROM,bus_to=&VAR_BUSTO';
put ',tech_from=&VAR_TXFROM';
put ',tech_to = &VAR_TXTO';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=%superq(etlsource)';
put ',LOADTYPE=BITEMPORAL';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',CLOSE_VARS=&CLOSE_VARS';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %do;';
put '%put WARNING: LOADTYPE &LOADTYPE not supported;';
put '%let syscc=4;';
put '%mp_abort(msg=LOADTYPE &LOADTYPE not supported,mac=mpe_targetloader.sas)';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc exiting MPE_TARGETLOADER macro)';
put ')';
put '%mend mpe_targetloader;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file postdata.sas';
put '@brief Either returns the file diffs or actually loads the data to target';
put '@details Before loading the target, a check is made against the time the';
put 'target was last updated (backend) and the time the DIFF was generated';
put '(frontend). If the target was updated whilst the DIFF was on the screen,';
put 'then the provided diff may have been incorrect and so a new DIFF should be';
put 'generated and approved before load.';
put 'Only 100 rows (of each DIFF type) are displayed on the DIFF screen.';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|ACTION:$char10.|TABLE:$char32.|DIFFTIME:$char29.|';
put '|---|---|---|';
put '|SHOW_DIFFS|DC20220208T142124517_124703_1184|"Tue, 08 Feb 2022 14:23:05 GMT"|';
put ' SAS Macros
';
put '@li bitemporal_dataloader.sas';
put '@li dc_assignlib.sas';
put '@li mf_existds.sas';
put '@li mf_existvar.sas';
put '@li mf_getattrn.sas';
put '@li mf_getengine.sas';
put '@li mf_getquotedstr.sas';
put '@li mf_getuniquelibref.sas';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_lockanytable.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_alerts.sas';
put '@li mpe_runhook.sas';
put '@li mpe_targetloader.sas';
put '@li removecolsfromwork.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '/* this could be a config setting if required */';
put '%let maxdiff=100;';
put '%mpeinit()';
put '/* load parameters */';
put 'data _null_;';
put 'set work.sascontroltable;';
put 'call symputx(''ACTION'',ACTION);';
put 'call symputx(''LOAD_REF'',TABLE);';
put '/* DIFFTIME is when the DIFF was generated on the frontend */';
put 'call symputx(''DIFFTIME'',DIFFTIME);';
put 'run;';
put '%global action is_err err_msg msg;';
put '%let is_err=0;';
put '%let user=%mf_getuser();';
put '%let sastime=%sysfunc(datetime());';
put 'data sastime;';
put 'dt_sastime=&sastime;';
put 'run;';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'picture flatdate other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/* SHOW_DIFFS works by getting the temp tables from the bitemporal loader */';
put '/* so we share much of the logic from the actual load process */';
put '%let isfmtcat=0;';
put 'data APPROVE1;';
put 'set &mpelib..mpe_submit;';
put 'where TABLE_ID="&LOAD_REF";';
put '/* fetch mpe_submit data */';
put 'libds=cats(base_lib,''.'',base_ds);';
put 'REVIEWED_ON=put(reviewed_on_dttm,datetime19.);';
put 'call symputx(''REVIEW_STATUS_ID'',submit_status_cd,''l'');';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED);';
put 'call symputx(''num_of_approvals_remaining'',num_of_approvals_remaining);';
put '/* other stuff that''s useful to do in data step */';
put 'call symputx(''orig_libds'',libds);';
put 'call symputx(''libds'',libds);';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''isfmtcat'',1);';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'putlog (_all_)(=);';
put '/* convert provided string DIFFTIME back to a numeric SAS datetime */';
put 'if "&action" ne "SHOW_DIFFS" then do;';
put 'call symputx(''DIFFTIME'',input(symget(''DIFFTIME''),anydtdtm18.));';
put 'end;';
put 'length difftime $32;';
put 'DIFFTIME=put(&sastime,datetime19.2);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&isfmtcat=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(difftime orig_libds libds load_ref)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: difftime orig_libds libds load_ref)';
put ')';
put '/* security checks */';
put '%mpe_accesscheck(&orig_libds,outds=authEDIT,user=&user,access_level=EDIT)';
put '%mpe_accesscheck(&orig_libds,outds=authAPP,user=&user,access_level=APPROVE)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc Before entering postdata macro)';
put ')';
put '%mp_abort(';
put 'iftrue=(';
put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put ')';
put ',mac=&_program';
put ',msg=%str(&user not authorised to view approval screen for &orig_libds)';
put ')';
put '%macro quickmacro(inds,outds);';
put 'data &outds ;';
put '%if %length(&VAR_BUSFROM)>0 %then %do;';
put 'format &VAR_BUSFROM &VAR_BUSTO yymmddhhmmss.;';
put '%end;';
put 'if 0 then set &emptybasetable;';
put 'set &inds;';
put '%if %mf_existvar(&libds,&var_txfrom) %then %do;';
put 'drop &var_txfrom &var_txto;';
put '%end;';
put '%if %mf_existvar(&inds,_____DELETE__THIS__RECORD_____) %then %do;';
put 'drop _____DELETE__THIS__RECORD_____;';
put '%end;';
put '%if %mf_existvar(&inds,&VAR_PROCESSED) %then %do;';
put 'drop &VAR_PROCESSED;';
put '%end;';
put 'run;';
put '%mend quickmacro;';
put '%macro postdata();';
put '%if %quote(&REVIEW_STATUS_ID)=%quote(REJECTED)';
put 'or %quote(&REVIEW_STATUS_ID)=%quote(APPROVED) %then';
put '%do;';
put 'data params; set approve1; run;';
put '%webout(OPEN)';
put '%webout(OBJ,PARAMS)';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if &action=APPROVE_TABLE %then %do;';
put '/* check user is authorised to approve table */';
put '/* user could be an editor but not an approver */';
put '%mp_abort(iftrue= (%mf_getattrn(work.authAPP,NLOBS)=0)';
put ',mac=&_program';
put ',msg=%str(&user may not APPROVE changes)';
put ')';
put '/* see if this user has already submitted an approval */';
put '%let prev_upload_check=1;';
put 'proc sql;';
put 'select count(*) into: prev_upload_check from &mpelib..mpe_review';
put 'where TABLE_ID="&LOAD_REF" and REVIEWED_BY_NM="&user"';
put 'and REVIEW_STATUS_ID ne "SUBMITTED";';
put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);';
put '%if &authcheck=0 or &prev_upload_check=1 %then %do;';
put '%put WARNING: authcheck=&authcheck prev_upload_check=&prev_upload_check;';
put 'data apPARAMS;';
put 'AUTHORISED=&authcheck;';
put 'PREV_UPLOAD_CHECK=&prev_upload_check;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,apPARAMS);';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '/* now check if table has been updated since DIFF screen shown */';
put '%local fmt_tm usernm last_load etlsource;';
put '%let last_load=0;';
put 'proc sql noprint;';
put 'select max(processed_dttm) format=16.2 into: last_load';
put 'from &mpelib..mpe_dataloads';
put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)";';
put 'select processed_dttm format=datetime19., user_nm, etlsource';
put 'into: fmt_tm, :usernm, :etlsource';
put 'from &mpelib..mpe_dataloads';
put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)"';
put 'and processed_dttm=&last_load;';
put '%put TIMECHECK: &last_load>&difftime;';
put '%if %sysevalf(&last_load>&difftime,boolean)=1 %then %do;';
put '%let is_err=1;';
put '%let err_msg=&orig_libds was updated in batch %trim(&etlsource';
put ') by %trim(&usernm) on &fmt_tm - please refresh the page!!;';
put '%return;';
put '%end;';
put '%if &syscc ne 0 %then %do;';
put '%let is_err=1;';
put '%let err_msg=syscc=&syscc before logchange;';
put '%return;';
put '%end;';
put '/* upload about to commence so ensure logs */';
put 'options notes mprint source2;';
put '%local oldloc;';
put '%if %symexist(SYSPRINTTOLOG) %then %let oldloc=&SYSPRINTTOLOG;';
put '%else %let oldloc=%qsysfunc(getoption(LOG));';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto';
put 'log="&mpelocapprovals/&LOAD_REF/approval.log";';
put 'run;';
put 'data _null_;';
put 'if _n_=1 then do;';
put 'length oldloc $1000;';
put 'oldloc=symget(''oldloc'');';
put 'putlog "****** redirected:" oldloc " *****";';
put 'end;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc printto';
put 'log="&mpelocapprovals/&LOAD_REF/approval.log";';
put 'run;';
put '%end;';
put '%if &syscc ne 0 %then %do;';
put '%let is_err=1;';
put '%let err_msg=syscc=&syscc after logchange;';
put '%return;';
put '%end;';
put '%end;';
put '/**';
put '* upload the actual table';
put '*/';
put '%local libref ds;';
put '%let libref=%scan(&orig_libds,1,.);';
put '%let ds=%scan(&orig_libds,2,.);';
put 'proc sql noprint;';
put 'select PRE_APPROVE_HOOK, POST_APPROVE_HOOK, LOADTYPE, var_txfrom, var_txto';
put ',BUSKEY, VAR_BUSFROM, VAR_BUSTO';
put ',AUDIT_LIBDS, NOTES, coalesce(NUM_OF_APPROVALS_REQUIRED,1)';
put ',VAR_PROCESSED';
put 'into: PRE_APPROVE_HOOK, :POST_APPROVE_HOOK, :LOADTYPE,:var_txfrom,:var_txto';
put ',:BUSKEY,:VAR_BUSFROM,:VAR_BUSTO';
put ',:AUDIT_LIBDS, :TABLE_DESC, :NUM_OF_APPROVALS_REQUIRED_TOT';
put ',:VAR_PROCESSED';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="&libref"';
put 'and dsn="&ds";';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mpelocapprovals orig_libds)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: mpelocapprovals orig_libds)';
put ')';
put '/* get dataset from approvals location (has same name as load_ref) */';
put '%let tmplib=%mf_getuniquelibref();';
put 'libname &tmplib "&mpelocapprovals/&LOAD_REF";';
put 'data STAGING_DS;';
put 'set &tmplib..&LOAD_REF;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc before preapprove)';
put ')';
put '%dc_assignlib(WRITE,&libref)';
put '/* run pre-approve hook - occurs both BEFORE _and_ AFTER the diff */';
put '%mpe_runhook(PRE_APPROVE_HOOK)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after preapprove)';
put ')';
put '%if &num_of_approvals_remaining>1 and &action=APPROVE_TABLE %then %do;';
put '/* append to mpe_review table */';
put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);';
put 'data work.append_review;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&LOAD_REF";';
put 'BASE_TABLE="&orig_libds";';
put 'REVIEW_STATUS_ID="APPROVED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&sastime;';
put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.append_review;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* update mpe_submit table */';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set num_of_approvals_remaining=&num_of_approvals_remaining-1,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&sastime';
put 'where table_id="&LOAD_REF";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'data apReqd;';
put 'AUTHORISED=1;';
put 'ALREADY_UPDATED=0;';
put 'ALREADY_UPDATED_DTTM=.;';
put 'set approve1; /* js will test for NUM_OF_APPROVALS_REQUIRED */';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,apReqd);';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc entering TARGETLOADER)';
put ')';
put '%mpe_targetloader(libds=&orig_libds';
put ',now= &sastime';
put ',etlsource=&LOAD_REF';
put ',STAGING_DS=STAGING_DS';
put ',dclib=&mpelib';
put '%if &action=APPROVE_TABLE %then %do;';
put ',LOADTARGET=YES';
put '%end;';
put '%else %do;';
put ',LOADTARGET=NO';
put '%end;';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%if %mf_getattrn(STAGING_DS,NLOBS)=0 %then %do;';
put '/* empty dataset! */';
put 'data out;';
put 'set STAGING_DS;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc entering SHOWDIFFS)';
put ')';
put '%if &action=SHOW_DIFFS %then %do;';
put '/**';
put '* Now prepare the SHOW DIFFS (approve) screen';
put '*/';
put '/*To create the CURRENT diffs, we compare with the ACTUAL data. But first';
put 'need to find out what version TIME to query it for.. */';
put 'proc sql noprint;';
put 'select max(processed_dttm)-1 format=datetime19. into: tstamp';
put 'from &mpelib..mpe_dataloads';
put 'where libref="&libref" and dsn="&ds" and ETLSOURCE="&LOAD_REF";';
put 'quit;';
put '%if &tstamp=. %then %let tstamp=%sysfunc(datetime(),datetime19.);';
put '/**';
put '* now create the DIFFS dataset';
put '* If using a database, then utilise pass through!';
put '* Create a temporary table inside the database for joins..';
put '*/';
put 'options mprint;';
put '%let engine_type=%mf_getEngine(%scan(&libds,1,.));';
put '%put &libds engine type = &engine_type;';
put '%local inner_table ;';
put '%if &engine_type=OLEDB %then %do;';
put '/* generate a unique ID for the temporary table */';
put 'data _null_;';
put 'call symputx(''UNIQUE_REF''';
put ',cats(round(datetime(),1)';
put ',''_''';
put ',round(ranuni(0)*100000,1)';
put ')';
put ',''l''';
put ');';
put 'run;';
put '%let inner_table=&libref.."##DIFF_&UNIQUE_REF"n;';
put 'proc sql;';
put 'create table &inner_table as';
put 'select * from work.outds_mod;';
put '%end;';
put '%else %let inner_table=work.outds_mod;';
put 'proc sql;';
put 'create view work.originals2 as';
put 'select b.*';
put 'from &inner_table a';
put 'inner join &libds';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '(where=("&tstamp"dt < &VAR_TXTO))';
put '%end;';
put 'b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&buskey));';
put '%let idx_val=%scan(&buskey,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)';
put ';';
put 'create view bitemp5c_updates2 as';
put 'select * from work.outds_mod';
put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)';
put ';';
put 'data; set &libds;stop;run;';
put '%let emptybasetable=&syslast;';
put 'options varlenchk=nowarn; /* for small numerics (<8) */';
put '%quickmacro(work.outds_del,deleted)';
put '%quickmacro(work.outds_add,new)';
put '%quickmacro(bitemp5c_updates2,updates)';
put '%quickmacro(originals2,originals)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc in quickmacro)';
put ')';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=work.updates';
put 'out=cols (keep=name type length varnum format);';
put 'run;';
put 'proc sort data=cols out=cols(drop=varnum); by varnum;run;';
put 'data cols; set cols; name=upcase(name);run;';
put '%let tempDIFFS_CSV=tempDiffs_%trim(';
put '%sysfunc(datetime(),flatdate.)).csv;';
put '/**';
put '* Store temp tables so we have a record of diffs';
put '* do not change this libname or table name as it is used in some';
put '* post approve hooks';
put '*/';
put 'data TEMPDIFFS (compress=no) /* for realistic file size */;';
put 'length _____status $10;';
put 'set work.deleted (in=_____del)';
put 'work.new(in=_____new)';
put 'work.updates (in=_____upd)';
put 'work.originals2 (in=_____orig);';
put 'if _____del then _____status=''DELETED '';';
put 'else if _____new then _____status=''NEW'';';
put 'else if _____upd then _____status=''UPDATED'';';
put 'else if _____orig then _____status=''ORIGINAL'';';
put 'run;';
put 'proc export data=TEMPDIFFS dbms=csv replace';
put 'outfile="&mpelocapprovals/&LOAD_REF/&tempDIFFS_CSV" ;';
put 'run;';
put 'proc sql noprint;';
put 'select filesize format=sizekmg10.1, filesize as filesize_raw';
put 'into: filesize,:filesize_raw';
put 'from dictionary.tables';
put 'where libname=''WORK'' and memtype=''DATA'' and memname=''TEMPDIFFS'';';
put 'data params;';
put 'set approve1;';
put 'DIFFS_CSV="&tempDIFFS_CSV";';
put 'FILESIZE="&filesize";';
put 'FILESIZE_RAW=&filesize_raw;';
put 'if %mf_nobs(work.originals)>&maxdiff';
put 'or %mf_nobs(work.new)>&maxdiff';
put 'or %mf_nobs(work.deleted)>&maxdiff';
put 'or %mf_nobs(work.updates)>&maxdiff';
put 'then TRUNCATED="YES";';
put 'else TRUNCATED="NO";';
put 'NUM_ADDED=%mf_getattrn(work.new,NLOBS);';
put 'NUM_DELETED=%mf_getattrn(work.deleted,NLOBS);';
put 'NUM_UPDATED=%mf_getattrn(work.updates,NLOBS);';
put 'SUBMITTED_ON=put(submitted_on_dttm,datetime19.);';
put '%if %mf_getattrn(work.authAPP,NLOBS)>0 %then %do;';
put 'ISAPPROVER=''YES'';';
put '%end;';
put '%else %do;';
put 'ISAPPROVER=''NO'';';
put '%end;';
put 'run;';
put '/*';
put '* The PRE_APPROVE_HOOK may have applied custom formats to the staged table.';
put '* To ensure consistency in the DIFF screen, we should apply the same formats';
put '* to the base table. Limit rows at the same time.';
put '*/';
put 'data work.originals;';
put 'if 0 then set deleted new updates;';
put 'set work.originals;';
put 'if _n_>&maxdiff then stop;';
put 'run;';
put '/* get additional submits against the same base table */';
put 'proc sort data=&mpelib..mpe_submit(where=(';
put 'submit_status_cd=''SUBMITTED''';
put 'and cats(base_lib,''.'',base_ds)="&orig_libds"';
put 'and table_id ne "&LOAD_REF"';
put ')) out=submits;';
put 'by descending submitted_on_dttm;';
put 'run;';
put '/* filter last 10 */';
put 'data submits;';
put 'set submits;';
put 'if _n_>10 then stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc SHOWDIFFS prior to streamout)';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,params)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,submits)';
put '%webout(OBJ,deleted,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,new,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,updates,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,ORIGINALS,fmt=N,missing=STRING)';
put '/* need same for formatted view */';
put '%webout(OBJ,deleted,dslabel=fmt_deleted,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,new,dslabel=fmt_new,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,updates,dslabel=fmt_updates,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,originals,dslabel=fmt_ORIGINALS,fmt=Y,missing=STRING)';
put '%webout(CLOSE)';
put '%if &engine_type=OLEDB %then %do;';
put 'proc sql; /* needs to be dropped AFTER view execution */';
put 'drop table &inner_table;';
put '%end;';
put '%return;';
put '%end;';
put '%if &action=APPROVE_TABLE %then %do;';
put '%approve:';
put '/**';
put '* store temp tables so we have a record of diffs';
put '* do not change this libname or table name as it is used in some';
put '* post approve hooks';
put '* for REPLACE loads, temp tables not made, so make them';
put '*/';
put '%if &LOADTYPE=REPLACE %then %do;';
put 'data work.outds_add; run;';
put 'data work.outds_mod; run;';
put 'data work.outds_del; run;';
put '%end;';
put 'libname approve "&mpelocapprovals/&LOAD_REF";';
put 'data; set &libds;stop;run;';
put '%let emptybasetable=&syslast;';
put 'data approve.ActualDiffs;';
put 'length _____STATUS_____ $10;';
put 'if 0 then set &emptybasetable;';
put 'set work.outds_del (in=_____del)';
put 'work.outds_add (in=_____new)';
put 'work.outds_mod (in=_____upd);';
put 'if _____del then _____STATUS_____=''DELETED'';';
put 'else if _____new then _____STATUS_____=''NEW'';';
put 'else if _____upd then _____STATUS_____=''UPDATED'';';
put '%if %mf_existvar(&libds,&var_txfrom) %then %do;';
put 'drop &var_txfrom &var_txto;';
put '%end;';
put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;';
put 'drop &VAR_PROCESSED;';
put '%end;';
put 'run;';
put 'proc export data=approve.ActualDiffs';
put 'outfile="&mpelocapprovals/&LOAD_REF/ActualDiffs.csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control table to show table as approved */';
put '/* append to mpe_review table */';
put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);';
put 'data work.append_review;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&LOAD_REF";';
put 'BASE_TABLE="&orig_libds";';
put 'REVIEW_STATUS_ID="APPROVED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&sastime;';
put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.append_review;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* update mpe_submit table */';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval in auditors/postdata),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set submit_status_cd=''APPROVED'',';
put 'num_of_approvals_remaining=&num_of_approvals_remaining-1,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&sastime';
put 'where table_id="&LOAD_REF";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* run post-approve hook */';
put '%mpe_runhook(POST_APPROVE_HOOK)';
put 'data apPARAMS;';
put 'AUTHORISED=1;';
put 'ALREADY_UPDATED=0;';
put 'ALREADY_UPDATED_DTTM=.;';
put 'DIFFTIME="&difftime";';
put 'if &syscc=0 then RESPONSE=''SUCCESS!'';';
put 'else response="SYSCC=&syscc.";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program 582';
put ',msg=%superq(msg)';
put ')';
put '%mpe_alerts(alert_event=APPROVED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&LOAD_REF';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,apPARAMS)';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mend postdata;';
put '%postdata()';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(iftrue= (&is_err=1)';
put ',mac=&_program';
put ',msg=%superq(err_msg)';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/editors;
%let service=getdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds';
put ',mode=VIEW';
put ',groupds=work.groups';
put ',clsds=work.clsview';
put ',outds=CLSVIEW';
put ',outmeta=work.cls_rules';
put ');';
put '%local col_list is_admin;';
put '/* filter for the appropriate rules */';
put 'proc sql;';
put 'create table &outmeta as';
put 'select CLS_VARIABLE_NM,';
put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE';
put 'from &clsds';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("&mode",''ALL'')';
put 'and CLS_ACTIVE=1';
put '%if &mode=VIEW %then %do;';
put 'and CLS_HIDE ne 1';
put '%end;';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)';
put 'and CLS_LIBREF="%upcase(&tgtlib)"';
put 'and CLS_TABLE="%upcase(&tgtds)"';
put 'group by CLS_VARIABLE_NM;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";';
put '%put &sysmacroname: &=is_admin;';
put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;';
put '%put &sysmacroname: no CLS rules to apply;';
put '%put &=is_admin;';
put '/* copy using append for speed */';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '/* ensure CLS_RULES is empty in case of admin */';
put 'data &outmeta;';
put 'set &outmeta;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &mode=VIEW %then %do;';
put '/* just send back the relevant columns */';
put '%let col_list=0;';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=0;';
put '%if &col_list=0 %then %do;';
put '/*';
put 'We have columns that are set to CLS_HIDE=1 but we do not have any to';
put 'explicitly show. Therefore we assume all columns are to be shown except';
put 'those that are explicitly hidden.';
put '*/';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=1;';
put 'data &outds;';
put 'set &inds;';
put 'drop &col_list;';
put 'run;';
put '%end;';
put '%else %do;';
put 'data &outds;';
put 'set &inds;';
put 'keep &col_list;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &mode=EDIT %then %do;';
put '/*';
put 'In this case we pass all columns and the frontend will filter out the';
put 'ones that are not allowed to be edited.';
put '*/';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: invalid mode - &mode!;';
put '%abort;';
put '%end;';
put '%mend mpe_columnlevelsecurity;';
put '%macro mpe_getlabels(type,source,outds=mpe_getlabels);';
put '%local tmpds;';
put '%if &type=COLUMNS %then %do;';
put '%let tmpds=%mf_getuniquename();';
put 'proc contents noprint data=&source';
put 'out=&tmpds(keep=name memlabel label);';
put 'run;';
put 'proc sql ;';
put 'create table &outds as';
put 'select upcase(a.name) as name';
put ',a.memlabel';
put ',coalesce(b.dd_shortdesc,a.label) as desc';
put ',b.dd_longdesc as longdesc';
put 'from &tmpds a';
put 'left join &mpelib..mpe_datadictionary';
put '(where=(&dc_dttmtfmt. < tx_to';
put 'and dd_source ? %upcase("&source")';
put 'and dd_type=''COLUMN'')) b';
put 'on scan(b.dd_source,-1,''.'')=upcase(a.name);';
put '%end;';
put '%mend mpe_getlabels;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mv_getgroupmembers(group';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroupmembers';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups/&group/members?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: Group &group not found!!;';
put 'data &outds;';
put 'length id name $43;';
put 'call missing(of _all_);';
put 'run;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'length id name $43;';
put 'set &libref1..items;';
put 'run;';
put 'libname &libref1 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put '%mend mv_getgroupmembers;';
put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);';
put '%mv_getgroupmembers(%str(&group),outds=&outds)';
put 'data &outds ;';
put 'length membername $64;';
put 'set &outds(rename=(name=MemberName));';
put 'run;';
put '%mend dc_getgroupmembers;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_dsmeta(libds,outds=work.dsmeta);';
put '%local ds1 ds2;';
put 'data;run; %let ds1=&syslast;';
put 'data;run; %let ds2=&syslast;';
put '/* setup the ODS capture */';
put 'ods output attributes=&ds1 enginehost=&ds2;';
put '/* export the metadata */';
put 'proc contents data=&libds;';
put 'run;';
put '/* load it into a single table */';
put 'data &outds (keep=ods_table name value);';
put 'length ods_table $10 name label2 label1 label $100';
put 'value cvalue cvalue1 cvalue2 $1000';
put 'nvalue nvalue1 nvalue2 8;';
put 'if _n_=1 then call missing (of _all_);';
put '* putlog (_all_)(=);';
put 'set &ds1 (in=atrs) &ds2 (in=eng);';
put 'if atrs then do;';
put 'ods_table=''ATTRIBUTES'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'if label2 ne '''' then do;';
put 'name=label2;';
put 'value=coalescec(cvalue2,put(nvalue2,best.));';
put 'output;';
put 'end;';
put 'end;';
put 'else if eng then do;';
put 'ods_table=''ENGINEHOST'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &ds1, &ds2;';
put '%mend mp_dsmeta;';
put '%macro mp_getcols(ds, outds=work.cols);';
put '%local dropds;';
put 'proc contents noprint data=&ds';
put 'out=_data_ (keep=name type length label varnum format:);';
put 'run;';
put '%let dropds=&syslast;';
put 'data &outds(keep=name type length varnum format label ddtype fmtname);';
put 'set &dropds(rename=(format=fmtname type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if fmtname='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else format=cats(fmtname,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if fmtname='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');';
put 'else format=cats(fmtname,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' or format=:''E8601DT'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY''';
put 'then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put 'proc sql;';
put 'drop table &dropds;';
put '%mend mp_getcols;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_length(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_length)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_length(var);';
put 'if var=. then len=0;';
put 'else if missing(var) or trunc(var,3)=var then len=3;';
put 'else if trunc(var,4)=var then len=4;';
put 'else if trunc(var,5)=var then len=5;';
put 'else if trunc(var,6)=var then len=6;';
put 'else if trunc(var,7)=var then len=7;';
put 'else len=8;';
put 'return(len);';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_length;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mp_getmaxvarlengths(';
put 'libds';
put ',num2char=NO';
put ',outds=work.mp_getmaxvarlengths';
put ')/*/STORE SOURCE*/;';
put '%local vars prefix x var fmt srcds;';
put '%let vars=%mf_getvarlist(libds=&libds);';
put '%let prefix=%substr(%mf_getuniquename(),1,25);';
put '%let num2char=%upcase(&num2char);';
put '%if &num2char=NO %then %do;';
put '/* compile length function for numeric fields */';
put '%mcf_length(wrap=YES, insert_cmplib=YES)';
put '%end;';
put '%if &num2char=NO';
put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")';
put 'and %mf_getvarcount(&libds,typefilter=N) gt 0';
put '%then %do;';
put '/* custom functions not supported in summary operations */';
put '%let srcds=%mf_getuniquename();';
put 'data &srcds/view=&srcds;';
put 'set &libds;';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let var=%scan(&vars,&x);';
put '%if %mf_getvartype(&libds,&var)=N %then %do;';
put '&prefix.&x=mcf_length(&var);';
put '%end;';
put '%end;';
put 'run;';
put '%end;';
put '%else %let srcds=&libds;';
put 'proc sql;';
put 'create table &outds (rename=(';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '&prefix.&x=%scan(&vars,&x)';
put '%end;';
put '))';
put 'as select';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let var=%scan(&vars,&x);';
put '%if &x>1 %then ,;';
put '%if %mf_getvartype(&libds,&var)=C %then %do;';
put 'max(lengthn(&var)) as &prefix.&x';
put '%end;';
put '%else %if &num2char=YES %then %do;';
put '%let fmt=%mf_getvarformat(&libds,&var);';
put '%put fmt=&fmt;';
put '%if %str(&fmt)=%str() %then %do;';
put 'max(lengthn(cats(&var))) as &prefix.&x';
put '%end;';
put '%else %do;';
put 'max(lengthn(put(&var,&fmt))) as &prefix.&x';
put '%end;';
put '%end;';
put '%else %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;';
put 'max(&prefix.&x) as &prefix.&x';
put '%end;';
put '%else %do;';
put 'max(mcf_length(&var)) as &prefix.&x';
put '%end;';
put '%end;';
put '%end;';
put 'from &srcds;';
put 'proc transpose data=&outds';
put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));';
put 'run;';
put '%mend mp_getmaxvarlengths;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdata.sas';
put '@brief Returns a dataset to the editor front end';
put '@details';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|FILTER_RK:$5.|';
put '|---|---|';
put '|DC258467.MPE_X_TEST|-1|';
put ' Service Outputs
';
put ' sasdata
';
put ' sasparams
';
put 'Contains info on the request. One row is returned.';
put '@li CLS_FLG - set to 0 if there are no CLS rules (everything should be editable)';
put 'else set to 1 (CLS rules exist)';
put '@li ISMAP - set to 1 if the target DS is an excel map target, else 0';
put ' approvers
';
put ' dqrules
';
put ' dqdata
';
put ' cols
';
put 'Contains column level attributes.';
put '@li NAME - column name';
put '@li VARNUM - variable position. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li LABEL - variable label. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li FMTNAME - derived format name. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li DDTYPE - derived dropdown type. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li CLS_RULE - values include:';
put '- EDIT - the column is editable';
put '- READ - the column should be readonly';
put '- HIDE - the column should be hidden';
put '@li memlabel';
put '@li desc- augmented with MPE_DATADICTIONARY if exists, else label';
put '@li longdesc - from MPE_DATADICTIONARY';
put ' maxvarlengths
';
put ' xl_rules
';
put ' query
';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_getgroupmembers.sas';
put '@li mf_existvar.sas';
put '@li mf_getattrn.sas';
put '@li mf_getvarlist.sas';
put '@li mf_existds.sas';
put '@li mf_getquotedstr.sas';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_dsmeta.sas';
put '@li mp_getcols.sas';
put '@li mp_getmaxvarlengths.sas';
put '@li mp_validatecol.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_columnlevelsecurity.sas';
put '@li mpe_getlabels.sas';
put '@li mpe_filtermaster.sas';
put '@li mpe_runhook.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* Validate inputs';
put '*/';
put 'data work.intest;';
put 'length filter_rk 8;';
put 'set work.SASCONTROLTABLE;';
put '/* validate filter_rk */';
put 'if filter_rk le 0 then filter_rk=-1;';
put 'call symputx(''orig_libds'',upcase(libds));';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'is_fmt=1;';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put 'if is_libds=0 then do;';
put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''filter_rk'',filter_rk);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(Some err with service inputs)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(libds filter_rk)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: libds filter_rk)';
put ')';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* stream back meta info, further calls will return col metadata and actual data';
put '*/';
put '%let libref=%upcase(%scan(&libds,1,.));';
put '%let dsn=%upcase(%scan(&libds,2,.));';
put '%dc_assignlib(WRITE,&libref)';
put '/**';
put '* First check user has access permission to edit the table';
put '*/';
put '%put checking access;';
put '%let user=%mf_getuser();';
put '%mpe_accesscheck(&orig_libds,outds=mw_auth,user=&user,access_level=EDIT)';
put '%mp_abort(iftrue= (%mf_getattrn(work.mw_auth,NLOBS)=0)';
put ',mac=mpestp_getdata.sas';
put ',msg=&user is not authorised to edit &orig_libds %trim(';
put ')in the &mpelib..MPE_SECURITY table';
put ')';
put '%mp_abort(iftrue= ( %mf_existds(libds=&libds) ne 1)';
put ',mac=mpestp_getdata.sas';
put ',msg=dataset &libds does not exist!!';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at line 60 )';
put ')';
put '%global loadtype var_txfrom var_txto var_processed filter_text pk coltype';
put 'sortpk;';
put '%put getting table attributes;';
put 'proc sql noprint;';
put 'select upcase(loadtype)';
put ',var_txfrom,var_txto';
put ',var_busfrom,var_busto';
put ',var_processed,rk_underlying,buskey';
put ',coalesce(rk_underlying,buskey)';
put ',pre_edit_hook';
put ',case when missing(rk_underlying) then buskey else rk_underlying end';
put 'into: loadtype,:var_txfrom,:var_txto';
put ',:var_busfrom ,:var_busto';
put ',:var_processed,:rk_underlying,:buskey, :sortPK, :pre_edit_hook,:pk';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt TX_TO';
put 'and upcase(dsn)="%scan(&orig_libds,2,.)"';
put 'and upcase(libref)="%scan(&orig_libds,1,.)";';
put '%put preparing filter query:;';
put '%mpe_filtermaster(EDIT,&orig_libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter_rk,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%macro mpestp_getdata();';
put '%if not %symexist(DC_MAXOBS_WEBEDIT) %then %do;';
put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBEDIT not found!;';
put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;';
put '%put NOTE-;%put NOTE-;';
put '%global DC_MAXOBS_WEBEDIT;';
put '%let DC_MAXOBS_WEBEDIT=500;';
put '%end;';
put '/* for tables which use RKs/SKs then we just expose the business key to';
put 'users - this lets uploads be sent to multiple environments (with';
put 'potentially different RK/SK values for the same business key).';
put 'Note that the config table has the RK column in the buskey field in';
put 'this scenario. */';
put '%if %length(&rk_underlying)>0 %then %let drop_rk=&buskey;';
put '%else %let drop_rk=;';
put '/* always remove the PROCESSED_DTTM column, if it exists */';
put '%if %length(&var_processed)=0 %then %do;';
put '%if %mf_existvar(&libds,PROCESSED_DTTM)>0 %then';
put '%let var_processed=PROCESSED_DTTM;';
put '%end;';
put '/**';
put '* Now get the slice of the actual table';
put '*/';
put 'options obs=10000;';
put '%if &loadtype=BITEMPORAL %then %do;';
put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk );';
put '_____DELETE__THIS__RECORD_____="No";';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put 'proc sort data=out;';
put 'by &pk &var_busfrom;';
put 'run;';
put 'data out;';
put 'set out;';
put 'by &pk &var_busfrom;';
put 'if last.%scan(&pk,-1);';
put 'run;';
put '%end;';
put '%else %do;';
put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk);';
put '_____DELETE__THIS__RECORD_____="No";';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put '%end;';
put 'options obs=max;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Issue with filtering (line 165) )';
put ')';
put 'options obs=&DC_MAXOBS_WEBEDIT;';
put '%let sortpk=%sysfunc(coalescec(&sortpk &var_busfrom,_ALL_));';
put 'proc sort data=work.out; by &sortPK; run;';
put 'options obs=max;';
put '%mpe_runhook(PRE_EDIT_HOOK)';
put '%let obscnt=%mf_getattrn(work.out,NLOBS);';
put '%mp_abort(iftrue=(&obscnt>&DC_MAXOBS_WEBEDIT)';
put ',mac=&_program';
put ',msg=Table is too big (&obscnt rows) - please filter and try again!';
put ')';
put '/* order delete var and pk fields at start of table */';
put '%let sourcevars=%mf_wordsInStr1ButNotStr2(';
put 'Str1=%mf_getvarlist(work.out)';
put ',Str2= _____DELETE__THIS__RECORD_____ &pk';
put ');';
put '%put sourcevars=&sourcevars;';
put 'data outdata;';
put '/* delete & pk fields come first */';
put 'attrib _____DELETE__THIS__RECORD_____ &pk label='''';';
put '/* keep remaining variable order */';
put '%if %length(&sourcevars)>0 %then %do;';
put 'attrib &sourcevars label='''';';
put '%end;';
put '_____DELETE__THIS__RECORD_____="No ";';
put '%if %mf_nobs(work.out)=0 %then %do;';
put '/* send empty row if empty table to help with hot rendering */';
put 'output;';
put '%end;';
put 'set work.out ;';
put 'run;';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=outdata';
put 'out=vars(keep=name type length varnum format: label);';
put 'run;';
put 'proc sort;';
put 'by varnum;';
put 'run;';
put 'data vars3(keep=name type length format label pk varnum ctrloptions formatd);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED");';
put 'if type2=2 or type2=6 then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,formatl,''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if upcase(format2)=''DATETIME'' and formatl=0 then format=''DATETIME.'';';
put 'else format=cats(format2,formatl,''.'',formatd);';
put 'type=''num'';';
put 'end;';
put 'if name in ('''',%upcase(%mf_getQuotedStr(&pk,dlm=%str(,),quote=S)))';
put 'then PK=''YES'';';
put 'length ctrlOptions $500;';
put 'if name="_____DELETE__THIS__RECORD_____" then ctrlOptions=''["No","Yes"]'';';
put 'else ctrlOptions='''';';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at 242 (vars3 step) in &_program \n';
put '%superq(syserrortext)';
put ')';
put ')';
put '%global jsdttmvars jsdtvars jstmvars;';
put 'data _null_;';
put 'set vars3 end=last;';
put 'if _n_>1 then comma='','';';
put 'length coltype $500.;';
put 'format=upcase(format);';
put 'coltype=cats(comma,''{"data":"'',name,''"'');';
put 'if ctrlOptions ne '''' then';
put 'colType=cats(coltype,'',"type":"dropdown","source":'',ctrlOptions,"}");';
put 'else if type=''num'' then do;';
put 'if format=:''DATETIME'' or format=:''E8601DT'' then do;';
put 'colType=cats(coltype';
put ','',"type":"date","dateFormat":"YYYY-MM-DD HH:mm:ss"''';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat datetimes in javascript format */';
put 'call symput(''jsdttmvars'',symget(''jsdttmvars'')!!'' ''!!name);';
put 'end;';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY''';
put 'then do;';
put '/* see bottom of file for more date formats!! */';
put '/* also when updating, update stagedata.sas and mp_getcols.sas';
put 'and mpe_loader.sas */';
put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"''';
put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat as javascript dates */';
put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);';
put 'end;';
put 'else if format=:''TIME'' or format=:''HHMM'' then do;';
put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"''';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat as javascript times */';
put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);';
put 'end;';
put 'else do;';
put '/* is standard numeric but need to ascertain precision */';
put 'retain base ''000000000000000000'';';
put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));';
put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');';
put 'end;';
put 'end;';
put 'else colType=cats(coltype,''}'');';
put 'length concatcoltype $32767;';
put 'retain concatcoltype;';
put 'concatcoltype=cats(concatcoltype,coltype);';
put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)';
put ')';
put 'PROC FORMAT;';
put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s''';
put '(datatype=datetime);';
put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);';
put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);';
put 'RUN;';
put '/* before we send the data, need to rebuild all date & datetime vars as char*/';
put '%let finalvars=%mf_getvarlist(work.outdata);';
put 'data sasdata;';
put '/* set formats & col order ahead of rename+import */';
put 'informat &finalvars ;';
put '/* read dataset and rename date / datetime vars as necessary */';
put 'set outdata';
put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;';
put '(rename=(';
put '%local dtvarnum dtvar tmvar;';
put '/* temp datetime vars end in _____ */';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));';
put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);';
put '&dtvar=_____&dtvarnum._____';
put '%end;';
put '/* temp date vars do not end in _____ */';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));';
put '%let dtvar=%scan( &jsdtvars,&dtvarnum);';
put '&dtvar=_____&dtvarnum';
put '%end;';
put '/* temp time vars end in ___tm */';
put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));';
put '%let tmvar=%scan( &jstmvars,&tmvarnum);';
put '&tmvar=_____&tmvarnum.___tm';
put '%end;';
put '))';
put '%end;';
put ';';
put '%if %length(&jsdttmvars)>0 %then %do ;';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));';
put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);';
put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));';
put 'if &dtvar="ERROR" then call missing(&dtvar);';
put 'drop _____&dtvarnum._____;';
put '%end;';
put '%end;';
put '%if %length(&jsdtvars)>0 %then %do;';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));';
put '%let dtvar=%scan(&jsdtvars,&dtvarnum);';
put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));';
put 'if &dtvar="ERROR" then call missing(&dtvar);';
put 'drop _____&dtvarnum;';
put '%end;';
put '%end;';
put '%if %length(&jstmvars)>0 %then %do;';
put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));';
put '%let tmvar=%scan(&jstmvars,&tmvarnum);';
put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));';
put 'if &tmvar="ERROR" then call missing(&tmvar);';
put 'drop _____&tmvarnum.___tm;';
put '%end;';
put '%end;';
put 'output;';
put 'run;';
put '/* get the relevant approvers for the drop down */';
put '%put getting approvers;';
put '%local sas_groups sas_i sas_group;';
put 'proc sql noprint;';
put 'select distinct sas_Group into: sas_groups separated by "|"';
put 'from &mpelib..mpe_security';
put 'where libref="%scan(&orig_libds,1,.)"';
put 'and dsn="%scan(&orig_libds,2,.)"';
put 'and access_level=''APPROVE''';
put 'and &dc_dttmtfmt. lt TX_TO;';
put '%if %length(&sas_groups)=0 %then %do;';
put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)';
put '%end;';
put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));';
put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));';
put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)';
put 'proc append base=work.access1 data=work.temp&sas_i;run;';
put '%end;';
put '%mend mpestp_getdata;';
put '%mpestp_getdata()';
put '%mp_abort(mode=INCLUDE)';
put '/* extract column level security rules */';
put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata';
put ',mode=EDIT';
put ',clsds=&mpelib..mpe_column_level_security';
put ',groupds=work.groups /* was created in mpe_filtermaster */';
put ',outds=work.sasdata1';
put ',outmeta=work.cls_rules';
put ')';
put '/* get labels */';
put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc extracting spec info)';
put ')';
put '/* extract col info */';
put '%mp_getcols(&libds, outds=cols1)';
put '/* join with cls rules */';
put 'proc sql;';
put 'create table work.cols as';
put 'select a.NAME';
put ',a.VARNUM';
put ',a.LABEL';
put ',a.FMTNAME';
put ',a.DDTYPE';
put ',case b.cls_hide';
put 'when 1 then ''HIDE''';
put 'when 0 then ''EDIT''';
put 'else ''READ'' end as CLS_RULE';
put ',c.memlabel';
put ',c.desc';
put ',c.longdesc';
put 'from work.cols1 a';
put 'left join work.cls_rules b';
put 'on a.NAME=b.CLS_VARIABLE_NM';
put 'left join work.spec c';
put 'on a.NAME=c.NAME;';
put 'proc sql;';
put 'create table approvers as select distinct membername as personname';
put ',membername as email, membername as userid';
put 'from work.access1;';
put '/*';
put 'create table access3 as select b.userid,b.email';
put 'from access2 a';
put ',support.users b';
put 'where a.personname=b.userid';
put 'and a.personname ne "%mf_getuser()"';
put 'and %sysfunc(datetime()) lt b.tx_to_dttm';
put 'order by 1;';
put '*/';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'input;';
put 'length filter_text $32767;';
put 'retain filter_text;';
put 'filter_text=catx('' '',filter_text,_infile_);';
put 'if eof then do;';
put 'if cats(filter_text)=''1=1'' then filter_text='''';';
put 'call symputx(''filter_text'',filter_text);';
put 'end;';
put 'run;';
put '%put params;';
put '%let ismap=0;';
put 'proc sql noprint;';
put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;';
put 'data sasparams;';
put 'length colHeaders $20000 filter_text $32767;';
put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));';
put 'pkCnt=countw("&pk");';
put 'pk="&pk";';
put 'dtvars=compbl("&jsdtvars");';
put 'dttmvars=compbl("&jsdttmvars");';
put 'tmvars=compbl("&jstmvars");';
put 'length coltype $32000;';
put 'coltype=symget(''coltype'');';
put 'loadtype=symget(''loadtype'');';
put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;';
put 'else rk_flag=0;';
put 'filter_text=symget(''filter_text'');';
put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;';
put 'else cls_flag=1;';
put 'put (_all_)(=);';
put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;';
put 'else ismap=0;';
put 'run;';
put '/* Extract validation DQ Rules */';
put 'proc sort data=&mpelib..mpe_validations';
put '(where=(&dc_dttmtfmt. le TX_TO';
put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"';
put 'and rule_active=1))';
put 'out=dqrules (keep=base_col rule_type rule_value);';
put 'by base_col rule_type rule_value;';
put 'run;';
put '/* merge with NOTNULL constraints in the physical table */';
put 'proc sql;';
put 'create table _data_ as';
put 'select * from dqrules';
put 'union';
put 'select upcase(name) as base_col';
put ',''NOTNULL'' as rule_type';
put ','''' as rule_value';
put 'from dictionary.columns';
put 'where upcase(libname)="%scan(&orig_libds,1,.)"';
put 'and upcase(memname)="%scan(&orig_libds,2,.)"';
put 'and upcase(name) in (select name from vars3)';
put 'and notnull=''yes''';
put 'order by 1,2,3;';
put 'data dqrules;';
put 'set &syslast;';
put 'by base_col rule_type rule_value;';
put 'if last.rule_type;';
put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then';
put 'do;';
put 'retain x 0; x+1;';
put 'call symputx(cats(''source'',x),rule_value);';
put '%let sourcecnt=0;';
put 'call symputx(''sourcecnt'',x);';
put 'call symputx(cats(''base_col'',x),base_col);';
put 'end;';
put 'run;';
put 'proc sql;';
put 'create table dqdata as';
put 'select distinct base_column as base_col length=32';
put ',upcase(base_column) as rule_value length=74 /* deprecated */';
put ',selectbox_value as rule_data length=1000';
put ',selectbox_order';
put 'from &mpelib..mpe_selectbox';
put 'where &dc_dttmtfmt. lt ver_to_dttm';
put 'and select_lib="%scan(&orig_libds,1,.)"';
put 'and select_ds="%scan(&orig_libds,2,.)";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc during DQ rule validation)';
put ')';
put '/* extract selectbox data */';
put '%macro dq_selects();';
put '%local x source lib ds col;';
put '%do x=1 %to &sourcecnt;';
put '%let source=&&source&x;';
put '%let lib=%scan(&source,1,.);';
put '%let ds=%scan(&source,2,.);';
put '%let col=%scan(&source,3,.);';
put '%put &=source;';
put '%put &=lib;';
put '%dc_assignlib(READ,&lib)';
put 'proc sql;';
put 'create table dqdata&x as';
put 'select distinct "&&base_col&x" as base_col length=32';
put ',"&source" as rule_value length=74';
put ',cats(&col) as rule_data length=1000';
put ',0 as selectbox_order';
put 'from &lib..&ds';
put 'order by 1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)';
put ')';
put 'proc append base=dqdata data=dqdata&x;run;';
put 'proc sql; drop table dqdata&x;';
put '%end;';
put '%mend dq_selects;';
put '%dq_selects()';
put 'proc sort data=dqdata;';
put '/* order by selectbox_order then the value */';
put 'by base_col selectbox_order rule_data;';
put 'run;';
put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)';
put 'data maxvarlengths;';
put 'set maxvarlengths;';
put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;';
put 'run;';
put 'data xl_rules;';
put 'set &mpelib..mpe_excel_config;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";';
put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";';
put 'where also xl_active=1;';
put 'keep xl_column xl_rule;';
put 'run;';
put '%mp_dsmeta(&libds, outds=dsmeta)';
put '/* send to the client */';
put '%webout(OPEN)';
put '%webout(OBJ,approvers)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,dqdata)';
put '%webout(OBJ,dqrules)';
put '%webout(OBJ,dsmeta)';
put '%webout(OBJ,maxvarlengths)';
put '%webout(OBJ,query)';
put '%webout(OBJ,sasdata1,fmt=N,missing=STRING,showmeta=YES,dslabel=sasdata)';
put '%webout(OBJ,sasparams)';
put '%webout(OBJ,xl_rules)';
put '%webout(CLOSE)';
put '/*';
put '$N8601Bw';
put '$N8601BAw';
put '$N8601Ew';
put '$N8601EAw';
put '$N8601EHw';
put '$N8601EXw';
put '$N8601Hw';
put '$N8601Xw';
put 'B8601DAw';
put 'B8601DNw';
put 'B8601DTw';
put 'B8601DZw';
put 'B8601LZw';
put 'B8601TMw';
put 'B8601TZw';
put 'DATEw';
put 'DATEAMPMw';
put 'DATETIMEw';
put 'DAYw';
put 'DDMMYYw';
put 'DDMMYYxw';
put 'DOWNAMEw';
put 'DTDATEw';
put 'DTMONYYw';
put 'DTWKDATXw';
put 'DTYEARw';
put 'DTYYQCw';
put 'E8601DAw';
put 'E8601DNw';
put 'E8601DTw';
put 'E8601DZw';
put 'E8601LZw';
put 'E8601TMw';
put 'E8601TZw';
put 'HHMMw';
put 'HOURw';
put 'JULDAYw';
put 'JULIANw';
put 'MMDDYYw';
put 'MMDDYYxw';
put 'MMSSw';
put 'MMYYw';
put 'MMYYxw';
put 'MONNAMEw';
put 'MONTHw';
put 'MONYYw';
put 'PDJULGw';
put 'PDJULIw';
put 'QTRw';
put 'QTRRw';
put 'TIMEw';
put 'TIMEAMPMw';
put 'TODw';
put 'WEEKDATEw';
put 'WEEKDATXw';
put 'WEEKDAYw';
put 'WEEKUw';
put 'WEEKVw';
put 'WEEKWw';
put 'WORDDATEw';
put 'WORDDATXw';
put 'YEARw';
put 'YYMMw';
put 'YYMMxw';
put 'YYMMDDw';
put 'YYMMDDxw';
put 'YYMONw';
put 'YYQw';
put 'YYQxw';
put 'YYQRw';
put 'YYQRxw';
put '$N8601BAw';
put '$N8601Ew';
put '$N8601EAw';
put '$N8601EHw';
put '$N8601EXw';
put '$N8601Hw';
put '$N8601Xw';
put 'B8601DAw';
put 'B8601DNw';
put 'B8601DTw';
put 'B8601DZw';
put 'B8601LZw';
put 'B8601TMw';
put 'B8601TZw';
put 'E8601DAw';
put 'E8601DNw';
put 'E8601DTw';
put 'E8601DZw';
put 'E8601LZw';
put 'E8601TMw';
put 'E8601TZw';
put '*/';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getdynamiccolvals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdynamiccolvals.sas';
put '@brief Provide dynamic list of values according to a SAS program or service';
put '@details Configuration is made in the MPE_VALIDATIONS table, the dropdown';
put 'can be either a SOFTSELECT_HOOK or HARDSELECT_HOOK.';
put 'Results are sent in ARRAY format for efficiency.';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|VARIABLE_NM:$32.|';
put '|---|---|';
put '|DC258467.MPE_SECURITY|SAS_GROUP|';
put ' SOURCE_ROW
';
put 'This contains the raw values from the source table.';
put ' Service Outputs
';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_getservicecode.sas';
put '@li mf_nobs.sas';
put '@li mp_abort.sas';
put '@li mp_include.sas';
put '@li mp_validatecol.sas';
put '@li mf_getapploc.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* Validate inputs';
put '*/';
put '%let err_msg=;';
put 'data work.intest;';
put 'set work.SASCONTROLTABLE;';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put '/* validate varname */';
put 'is_name=nvalid(variable_nm,''v7'');';
put 'putlog (_all_)(=);';
put 'if is_libds ne 1 then do;';
put 'msg=''ERR''!!''OR: Invalid libds:''!!libds;';
put 'call symputx(''err_msg'',msg);';
put 'stop;';
put 'end;';
put 'else if is_name ne 1 then do;';
put 'msg=''ERR''!!''OR: Invalid name:''!!variable_nm;';
put 'call symputx(''err_msg'',msg);';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''variable_nm'',variable_nm);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after reading work.sascontroltable)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(&err_msg)';
put ')';
put '%dc_assignlib(READ,%scan(&libds,1,.))';
put '/* ensure that work.dynamic_extended_values exists */';
put 'data work.dynamic_extended_values;';
put 'run;';
put '/**';
put '* Get the code to execute';
put '*/';
put 'data work.codetest;';
put 'set &mpelib..MPE_VALIDATIONS;';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and base_lib="%scan(&libds,1,.)"';
put 'and base_ds="%scan(&libds,2,.)"';
put 'and base_col="&variable_nm"';
put 'and RULE_TYPE in (''HARDSELECT_HOOK'',''SOFTSELECT_HOOK'')';
put 'and RULE_ACTIVE=1;';
put 'putlog (_all_)(=);';
put 'if length(rule_value)>1 then do;';
put 'call symputx(''pgmloc'',rule_value);';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'output;';
put 'stop;';
put 'end;';
put 'else stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.codetest)=0)';
put ',mac=&_program';
put ',msg=%str(Hook not found in &mpelib..mpe_validations for &libds..&variable_nm)';
put ')';
put '%macro getdynamiccolvals();';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '%mend getdynamiccolvals;';
put '%getdynamiccolvals()';
put '/* execute the dynamic code */';
put '%mp_include(sascode)';
put '%mp_abort(mode=INCLUDE)';
put '/* ensure that the DISPLAY_INDEX variable exists */';
put 'data work.dynamic_values;';
put 'length DISPLAY_INDEX 8 DISPLAY_VALUE $32767;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.dynamic_values;';
put 'display_index=coalesce(display_index,_n_);';
put 'keep DISPLAY_INDEX DISPLAY_VALUE RAW_VALUE;';
put 'run;';
put '/* ensure that work.dynamic_extended_values exists with correct types */';
put 'data work.dynamic_extended_values;';
put 'length DISPLAY_INDEX 8 EXTRA_COL_NAME $32 DISPLAY_VALUE $5000 DISPLAY_TYPE $1';
put 'RAW_VALUE_NUM 8 RAW_VALUE_CHAR $5000 FORCED_VALUE 8;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.dynamic_extended_values;';
put 'run;';
put '%webout(OPEN)';
put '%webout(ARR,dynamic_values,fmt=N)';
put '%webout(ARR,dynamic_extended_values,fmt=N)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getlog;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getlog.sas';
put '@brief Downloads the submission, useful if there is an error';
put '@details';
put ' SAS Macros
';
put '@li mf_verifymacvars.sas';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mp_dirlist.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: table)';
put ')';
put '/* security checks */';
put '%let user=%mf_getuser();';
put '%let check_access=0;';
put 'proc sql noprint;';
put 'select count(*) into: check_access from &mpelib..mpe_loads';
put 'where csv_dir="&table" and user_nm="&user";';
put '%mp_abort(iftrue= (&check_access=0 )';
put ',msg=%str(&user not authorised to download audit data for &table)';
put ',mac=mpestp_getlog.sas';
put ')';
put 'ods package(ProdOutput) open nopf;';
put 'options notes source2 mprint;';
put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE)';
put 'data _null_;';
put 'set dirs;';
put 'if scan(filename,-1,''.'') not in (''sas7bdat'',''wpd'');';
put 'retain str1';
put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";';
put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";';
put 'call execute(cats(str1,filename,str2));';
put 'run;';
put '%let archive_path=%sysfunc(pathname(work));';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name= "&table..zip" archive_path="&archive_path");';
put 'ods package(ProdOutput) close;';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&archive_path/&table..zip)';
put ',outname=&table..zip';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getsubmits;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getsubmits.sas';
put '@brief Returns a list of staged data items that need to be approved';
put '@details';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put 'proc sql noprint;';
put 'create table work.fromsas (rename=(SUBMITTED_ON=SUBMITTED_ON_DTTM)) as';
put 'select table_id';
put ',cats(base_lib,''.'',base_ds) as base_table';
put ',input_vars';
put ',input_obs';
put ',submitted_by_nm';
put ',submitted_reason_txt';
put ',''DEPRECATED'' as approve_group';
put ',submit_status_cd as review_status_id';
put ',reviewed_by_nm';
put ',reviewed_on_dttm';
put ',cats(put(SUBMITTED_ON_DTTM,yymmddhhmmss.)) as SUBMITTED_ON';
put 'from &mpelib..mpe_submit';
put 'where submitted_by_nm="%mf_getuser()" and submit_status_cd=''SUBMITTED''';
put 'order by submitted_on_dttm desc;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getxlmaps;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getxlmaps.sas';
put '@brief Returns a list of rules and other info for a specific xlmap_id';
put ' Service Inputs
';
put ' getxlmaps_in
';
put '|XLMAP_ID|';
put '|---|';
put '|Sample|';
put ' Service Outputs
';
put ' xlmaprules
';
put 'Filtered output of the dc.MPE_XLMAP_RULES table';
put '|XLMAP_ID|XLMAP_RANGE_ID|XLMAP_SHEET|XLMAP_START|XLMAP_FINISH|';
put '|---|---|---|---|---|';
put '|Sample|Range1|Sheet1|ABSOLUTE A1| |';
put '|Sample|Range2|Sheet1|RELATIVE R[2]C[2]|ABSOLUTE H11|';
put ' xlmapinfo
';
put 'Extra info for a map id';
put '|TARGET_DS|';
put '|---|';
put '|DCXXX.MPE_XLMAP_DATA|';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'data _null_;';
put 'set work.getxlmaps_in;';
put 'putlog (_all_)(=);';
put 'call symputx(''xlmap_id'',xlmap_id);';
put 'run;';
put 'proc sql noprint;';
put 'create table work.xlmaprules as';
put 'select xlmap_id';
put ',XLMAP_RANGE_ID';
put ',XLMAP_SHEET';
put ',XLMAP_START';
put ',XLMAP_FINISH';
put 'from &mpelib..MPE_XLMAP_RULES';
put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id"';
put 'order by xlmap_sheet, xlmap_range_id;';
put '%global target_ds;';
put 'select XLMAP_TARGETLIBDS into: target_ds';
put 'from &mpelib..MPE_XLMAP_INFO';
put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'data work.xlmapinfo;';
put 'target_ds=coalescec("&target_ds","&mpelib..MPE_XLMAP_DATA");';
put 'output;';
put 'stop;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,xlmaprules)';
put '%webout(OBJ,xlmapinfo)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=loadfile;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now;';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put '/*';
put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;';
put '*date or datetime format so use original ;';
put 'dsid=open("&libref..&ds");';
put 'vnum=varnum(dsid,name);';
put 'format=varfmt(dsid,vnum);';
put 'dsid=close(dsid);';
put 'end;';
put '*/';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* make sure that the variables we are importing, actually';
put 'exist on the target table */';
put '/** edit - extra variables are now simply ignored';
put '%local very_bad_vars;';
put 'select name into: very_bad_vars separated by '' ''';
put 'from vars_csv1';
put 'where name not in (select name from vars)';
put 'and name ne "_____DELETE__THIS__RECORD_____";';
put '%if %length(&very_bad_vars) > 0 %then %do;';
put '%let msg=%str(WARNING: The following vars are not defined in %trim(';
put ')&libref..&ds, yet they exist in &csv_dir/&ds..csv: &very_bad_vars);';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '**/';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warning */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar=''22''x);';
put '%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;';
put '%put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;';
put '%return;';
put '%end;';
put '/* presence of a period(.) indicates a physical location */';
put '%if %index(&in,.) %then %let in="&in";';
put '%if %index(&out,.) %then %let out="&out";';
put '/**';
put '* convert all cr and crlf within quotes to lf';
put '* convert all other cr or lf to crlf';
put '*/';
put 'data _null_;';
put 'infile &in recfm=n ;';
put 'file &out recfm=n;';
put 'retain isq iscrlf 0 qchar &qchar;';
put 'input inchar $char1. ;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'if isq then do;';
put '/* inside a quote change cr and crlf to lf */';
put 'if inchar=''0D''x then do;';
put 'put ''0A''x;';
put 'input inchar $char1.;';
put 'if inchar ne ''0A''x then do;';
put 'put inchar $char1.;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'end;';
put 'end;';
put 'else put inchar $char1.;';
put 'end;';
put 'else do;';
put '/* outside a quote, change cr and lf to crlf */';
put 'if inchar=''0D''x then do;';
put 'crblank:';
put 'put ''0D0A''x;';
put 'input inchar $char1.;';
put 'if inchar=''0D''x then do;';
put '/* multiple CR indicates CR formatted file with blank lines */';
put 'goto crblank;';
put 'end;';
put 'else if inchar ne ''0A''x then do;';
put 'put inchar $char1.;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'end;';
put 'end;';
put 'else if inchar=''0A''x then put ''0D0A''x;';
put 'else put inchar $char1.;';
put 'end;';
put 'run;';
put '%mend mp_cleancsv;';
put '/** @endcond */';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file loadfile.sas';
put '@brief Loads a file';
put '@details';
put ' SAS Macros
';
put '@li mddl_sas_cntlout.sas';
put '@li mp_abort.sas';
put '@li mf_getplatform.sas';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_mkdir.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li dc_assignlib.sas';
put '@li mpe_getgroups.sas';
put '@li mp_lockfilecheck.sas';
put '@li mpe_loader.sas';
put '@li mp_cleancsv.sas';
put '@li mp_binarycopy.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global table dlm;';
put '%mpeinit(fetch=NO)';
put '%global _WEBIN_FILENAME1 _WEBIN_FILENAME2';
put '_WEBIN_FILEREF _WEBIN_FILEREF1 _WEBIN_FILEREF2;';
put '%macro load();';
put '%if %mf_getplatform()=SASVIYA %then %do;';
put '%global _webin_fileuri _webin_fileuri1 _webin_fileuri2;';
put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));';
put '%if "&_webin_fileuri1" ne "" %then %do;';
put '%put &=_webin_fileuri1;';
put 'filename sjfref1 filesrvc "&_webin_fileuri1";';
put '%let _WEBIN_FILEREF1=sjfref1;';
put '%end;';
put '%if "&_webin_fileuri2" ne "" %then %do;';
put '%put &=_webin_fileuri2;';
put 'filename sjfref2 filesrvc "&_webin_fileuri2";';
put '%let _WEBIN_FILEREF2=sjfref2;';
put '%end;';
put '%end;';
put '%mend load;';
put '%load()';
put '%let _WEBIN_FILENAME1=%sysfunc(coalescec(&_WEBIN_FILENAME1,&_WEBIN_FILENAME));';
put '%let _WEBIN_FILEREF1=%sysfunc(coalescec(&_WEBIN_FILEREF1,&_WEBIN_FILEREF));';
put '%let abort=0;';
put '/* we do not know if the excel file will be first or second fileref */';
put 'data _null_;';
put 'ext1=upcase(scan(symget(''_WEBIN_FILENAME1''),-1,''.''));';
put 'ext2=upcase(scan(symget(''_WEBIN_FILENAME2''),-1,''.''));';
put 'if ext1=''CSV'' then do;';
put 'csvname=symget(''_WEBIN_FILENAME1'');';
put 'csvref=symget(''_WEBIN_FILEREF1'');';
put 'xlsname=symget(''_WEBIN_FILENAME2'');';
put 'xlsref=symget(''_WEBIN_FILEREF2'');';
put 'end;';
put 'else if ext2=''CSV'' then do;';
put 'csvname=symget(''_WEBIN_FILENAME2'');';
put 'csvref=symget(''_WEBIN_FILEREF2'');';
put 'xlsname=symget(''_WEBIN_FILENAME1'');';
put 'xlsref=symget(''_WEBIN_FILEREF1'');';
put 'end;';
put 'else call symputx(''abort'',1);';
put 'call symputx(''csvname'',csvname);';
put 'call symputx(''csvref'',csvref);';
put 'call symputx(''xlsname'',xlsname);';
put 'call symputx(''xlsref'',coalescec(xlsref,''0''));';
put 'run;';
put '%mp_abort(iftrue= (&abort=1)';
put ',mac=&_program';
put ',msg=%str(File "&csvname" or "&xlsname" must be a CSV!';
put '(Comma separated with .csv extension))';
put ')';
put '%let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: table)';
put ')';
put '%let table=%upcase(%trim(&table));';
put '/* load parameters */';
put 'data _null_;';
put 'libds=upcase(symget(''table''));';
put 'call symputx(''orig_libds'',libds);';
put 'call symputx(''orig_lib'',scan(libds,1,''.''));';
put 'call symputx(''orig_ds'',scan(libds,2,''.''));';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');';
put 'is_fmt=1;';
put 'end;';
put 'else call symputx(''libds'',libds);';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '/* check that the user has the requisite access */';
put '%mpe_getgroups(user=&user,outds=groups)';
put 'proc sql;';
put 'create table accesscheck as';
put 'select * from groups';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="EDIT"';
put 'and (';
put '(libref="&orig_lib" and dsn="&orig_ds")';
put 'or (libref="&orig_lib" and dsn="*ALL*")';
put 'or (libref="*ALL*" and dsn="*ALL*")';
put 'or (libref="*ALL*" and dsn="&orig_ds")';
put '));';
put '%let nobs=;';
put 'select count(*) into: nobs from &syslast;';
put '%mp_abort(iftrue= (&nobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(&user not authorised to load &orig_libds per &mpelib..mpe_security)';
put ')';
put '%dc_assignlib(WRITE,&orig_lib)';
put '%mp_abort(iftrue= (&syscc ge 4)';
put ',mac=loadfile';
put ',msg=%str(Issue assigning library &orig_lib)';
put ')';
put '%global txfrom txto processed rk;';
put 'data _null_;';
put 'set &mpelib..MPE_TABLES;';
put 'where libref="&orig_lib" and dsn="&orig_ds";';
put 'call symputx(''txfrom'',var_txfrom);';
put 'call symputx(''txto'',var_txto);';
put 'call symputx(''processed'',var_processed);';
put 'if not missing(RK_UNDERLYING) then call symputx(''rk'',buskey);';
put 'run;';
put '%mp_lockfilecheck(libds=&orig_libds)';
put 'data compare;';
put 'set &libds(drop=&txfrom &txto &processed &rk);';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc line 80)';
put ')';
put '/* get line terminator, assume it''s the first cr, lf, or crlf */';
put 'data _null_;';
put 'length text $32767 term $4;';
put 'call missing (of _all_);';
put 'fid=fopen("&csvref",''I'',32767,''b'');';
put 'rc=fread(fid);';
put 'rc2=fget(fid,text,32767);';
put 'cr=find(text,''0D''x );';
put 'lf=find(text,''0A''x );';
put 'crlf=find(text,''0D0A''x);';
put 'rc=fclose(fid);';
put 'if crlf>0 & cr0 & crlf0 & cr>0 & lf0 then term=''LF'';';
put 'else term=''CR'';';
put 'call symputx(''termstr'',term);';
put 'run;';
put 'data _null_;';
put 'infile &csvref lrecl=32000 dsd termstr=&termstr;';
put 'input;';
put 'length incols_unsorted $32000 dlm $1;';
put 'incols_unsorted=compress(upcase(_infile_),"''"!!''"'');';
put '/* dlm has length 1 so will be the first non alpha / digit char */';
put '/* expectation is that there will not be any crazy characters in first col! */';
put 'dlm=compress(incols_unsorted,''_ '',''ad'');';
put 'incols_unsorted=compress(incols_unsorted,dlm!!''_'',''kado'');';
put 'incols_unsorted=tranwrd(incols_unsorted,dlm,'' '');';
put 'call symputx(''incols_unsorted'',incols_unsorted);';
put 'call symputx(''dlm'',dlm);';
put 'putlog incols_unsorted=;';
put 'putlog dlm=;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc line 99)';
put ')';
put '%let basecols=%upcase(%mf_getvarlist(work.compare,dlm=%str( )));';
put '%let missing_cols=%trim(';
put '%mf_wordsInStr1ButNotStr2(';
put 'Str1=&basecols';
put ',Str2=&incols_unsorted';
put '));';
put '%let msg=';
put 'Expected cols: &basecols';
put 'Received cols: &incols_unsorted';
put 'Missing cols: &missing_cols';
put ';';
put '%mp_abort(iftrue= (%length(%trim(&missing_cols)) > 1 or &syscc ne 0)';
put ',mac=mpestp_loadfile.sas';
put ',msg=%superq(msg)';
put ')';
put '%let msg=0;';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/* create a dataset key (datetime plus 6 digit random number plus PID) */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* Create package folder and redirect the log */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put '/* clean embedded line breaks and force CRLF line endings */';
put '%mp_cleancsv(in=&csvref, out=&dir/&orig_libds..csv)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(issue in mp_cleancsv)';
put ')';
put '%put; %put; %put log is being redirected;';
put '%let url=_program=%substr(&_program';
put ',1,%length(&_program)-8)getlog%nrstr(&)table=&mperef;';
put '%put to retrieve, visit this url:; %put;%put;';
put '%put &url;';
put '%put;';
put '/* proc printto log="&dir/weblog.txt";run; */';
put 'libname approve "&dir";';
put 'options mprint;';
put '%put &=mperef;';
put '%put &=termstr;';
put '%put &=dlm;';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=%quote(File upload: %superq(csvname))';
put ',dlm=%superq(dlm)';
put ',url=%superq(url)';
put ',termstr=CRLF';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue= (%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error)) ne 0)';
put ',mac=&_program';
put ',msg=%nrstr(Problem occurred in &sysmacroname (mf_abort.error file found))';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mpestp_loadfile.sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename outref "&dir/BKP_&xlsname";';
put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc when backing up source file &xlsname)';
put ')';
put 'data sasparams;';
put 'STATUS=''SUCCESS'';';
put 'DSID="&mperef";';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,sasparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=stagedata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now;';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put '/*';
put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;';
put '*date or datetime format so use original ;';
put 'dsid=open("&libref..&ds");';
put 'vnum=varnum(dsid,name);';
put 'format=varfmt(dsid,vnum);';
put 'dsid=close(dsid);';
put 'end;';
put '*/';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* make sure that the variables we are importing, actually';
put 'exist on the target table */';
put '/** edit - extra variables are now simply ignored';
put '%local very_bad_vars;';
put 'select name into: very_bad_vars separated by '' ''';
put 'from vars_csv1';
put 'where name not in (select name from vars)';
put 'and name ne "_____DELETE__THIS__RECORD_____";';
put '%if %length(&very_bad_vars) > 0 %then %do;';
put '%let msg=%str(WARNING: The following vars are not defined in %trim(';
put ')&libref..&ds, yet they exist in &csv_dir/&ds..csv: &very_bad_vars);';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '**/';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warning */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_getfmttype(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_getfmttype)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_getfmttype(fmtnm $) $8;';
put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');';
put 'else do;';
put '/* extract NAME */';
put 'length fmt $32;';
put 'fmt=scan(fmtnm,1,''.'');';
put 'do while (';
put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')';
put ');';
put 'if length(fmt)=1 then fmt=''W'';';
put 'else fmt=substr(fmt,1,length(fmt)-1);';
put 'end;';
put '/* apply lookups */';
put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT''';
put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR''';
put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'')';
put 'then return(''DATETIME'');';
put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY''';
put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx''';
put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB''';
put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY''';
put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH''';
put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY''';
put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC''';
put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS''';
put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD''';
put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx''';
put ',''YYQS'',''YYQx'',''YYQZ'') then return(''DATE'');';
put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ''';
put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ''';
put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');';
put 'else return(''NUM'');';
put 'end;';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_getfmttype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2csv(ds';
put ',dlm=COMMA';
put ',outref=0';
put ',outfile=';
put ',outencoding=0';
put ',headerformat=LABEL';
put ',termstr=CRLF';
put ')/*/STORE SOURCE*/;';
put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WARN)ING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%if &outencoding=0 %then %let outencoding=;';
put '%else %let outencoding=encoding=&outencoding;';
put '%if &outref=0 %then %let outloc=&outfile;';
put '%else %let outloc=&outref;';
put '%if &headerformat=SASJS %then %do;';
put '%let delim=",";';
put '%let termstr=CRLF;';
put '%mcf_getfmttype(wrap=YES)';
put '%end;';
put '%else %if &dlm=COMMA %then %let delim=",";';
put '%else %let delim=";";';
put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */';
put '/* first get headers */';
put 'data _null_;';
put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;';
put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;';
put 'call missing(of _all_);';
put 'dsid=open("&ds.","i");';
put 'num=attrn(dsid,"nvars");';
put 'dlm=&delim;';
put 'do i=1 to num;';
put 'varnm=upcase(varname(dsid,i));';
put 'if i=num then dlm='''';';
put '%if &headerformat=NAME %then %do;';
put 'header=cats(varnm,dlm);';
put '%end;';
put '%else %if &headerformat=LABEL %then %do;';
put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);';
put '%end;';
put '%else %if &headerformat=SASJS %then %do;';
put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',varlen(dsid,i),''.'');';
put 'else do;';
put 'vfmt=coalescec(varfmt(dsid,i),''0'');';
put 'fmttype=mcf_getfmttype(vfmt);';
put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');';
put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');';
put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');';
put 'else header=cats(varnm,'':best.'');';
put 'end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Invalid headerformat value (&headerformat);';
put '%return;';
put '%end;';
put 'put header @;';
put 'end;';
put 'rc=close(dsid);';
put 'run;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let vcnt=%sysfunc(countw(&varlist));';
put '/**';
put '* The $quote modifier (without a width) will take the length from the variable';
put '* and increase by two. However this will lead to truncation where the value';
put '* contains double quotes (which are doubled up). To get around this, scan the';
put '* data to see the max number of double quotes, so that the appropriate width';
put '* can be applied in the subsequent step.';
put '*/';
put 'data _null_;';
put 'set &ds end=last;';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%if %mf_getvartype(&ds,&var)=C %then %do;';
put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);';
put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);';
put 'retain &dsv1 0;';
put '&dsv2=length(&var)+countc(&var,''"'');';
put 'if &dsv2>&dsv1 then &dsv1=&dsv2;';
put 'if last then call symputx(';
put '"vlen&i"';
put '/* should be no shorter than varlen, and no longer than 32767 */';
put ',cats(''$quote'',min(&dsv1+2,32767),''.'')';
put ',''l''';
put ');';
put '%end;';
put '%end;';
put '%let vat=@;';
put '%let vcom=&delim;';
put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);';
put '/* next, export data */';
put 'data _null_;';
put 'set &ds.;';
put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;';
put 'if _n_=1 then &vmiss='' '';';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%if &i=&vcnt %then %do;';
put '%let vat=;';
put '%let vcom=;';
put '%end;';
put '%if %mf_getvartype(&ds,&var)=N %then %do;';
put '%if &headerformat = SASJS %then %do;';
put '%let vcom=&delim;';
put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));';
put '%if &fmttype=DATE %then %let vfmt=DATE9.;';
put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;';
put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;';
put '%else %do;';
put '%let vfmt=;';
put '%let vcom=;';
put '%end;';
put '%end;';
put '%else %let vcom=;';
put '/* must use period - in order to work in both 9.4 and Viya 3.5 */';
put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;';
put '&vmiss=cats(''.'',&var);';
put 'put &vmiss &vat;';
put 'end;';
put 'else put &var &vfmt &vcom &vat;';
put '%end;';
put '%else %do;';
put '%if &i ne &vcnt %then %let vcom=&delim;';
put 'put &var &&vlen&i &vcom &vat;';
put '%end;';
put '%end;';
put 'run;';
put '%mend mp_ds2csv;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sends a changeset to staging area';
put '@details This is the service that is called when submitting a new edit.';
put ' Service Inputs
';
put ' jsdata
';
put 'This is the staged data table, plus an _____DELETE__THIS__RECORD_____ column';
put ' SASControlTable
';
put '|ACTION:$char4.|MESSAGE:$char1.|LIBDS:$char19.|';
put '|---|---|---|';
put '|LOAD|User-Provided message|LIBREF.DATASET_NAME|';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li dc_assignlib.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_mkdir.sas';
put '@li mf_getuniquefileref.sas';
put '@li mpe_loader.sas';
put '@li mpe_filtermaster.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_cntlout.sas';
put '@li mp_ds2csv.sas';
put '@li mf_getplatform.sas';
put '@li removecolsfromwork.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global approver; %let approver=;';
put '%global libref; %let libref=;';
put '%global dsn; %let dsn=;';
put '%global user; %let user=;';
put '%let user=%mf_getuser();';
put '/* load parameters */';
put 'data _null_;';
put 'set work.sascontroltable;';
put 'call symputx(''action'',action);';
put 'call symputx(''message'',message);';
put 'libds=upcase(libds);';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'is_fmt=1;';
put 'end;';
put 'else call symputx(''libds'',libds);';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* stream back meta info, further jquery calls will return col metadata and';
put 'actual data */';
put '%let libref=%upcase(%scan(&libds,1,.));';
put '%let dsn=%upcase(%scan(&libds,2,.));';
put '%dc_assignlib(WRITE,&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc - unable to assign library &libref)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mpelocapprovals libds)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: mpelocapprovals libds)';
put ')';
put '%put Verify that the upload does not violate Row Level Security checks:;';
put '%mpe_filtermaster(ULOAD,&libds,';
put 'dclib=&mpelib,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc during filtering process)';
put ')';
put '/* prepare inverse query */';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'file &tempref;';
put 'if _n_=1 then put ''where not('';';
put 'input;';
put 'put _infile_;';
put 'if eof then put '')'';';
put 'run;';
put '/* apply the query */';
put 'data work.badrecords;';
put 'set work.jsdata;';
put '%inc &tempref/source2;;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.badrecords)>0)';
put ',mac=&_program';
put ',msg=%str(';
put 'Security Problem - %mf_nobs(work.badrecords) unauthorised records submitted';
put ')';
put ')';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/**';
put '* Create package folder and redirect the log';
put '*/';
put '/* create a dataset key (datetime plus 6 digit random number plus PID) */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* get web url */';
put '%global url;';
put '%let url=localhost/SASStoredProcess;';
put '%let platform=%mf_getplatform();';
put '%put &=platform;';
put 'data _null_;';
put 'length url $128;';
put '%macro stagedata();';
put '%if &platform=SASVIYA %then %do;';
put 'if symexist(''_baseurl'') then do;';
put 'url=symget(''_baseurl'');';
put 'if subpad(url,length(url)-9,9)=''SASStudio''';
put 'then url=substr(url,1,length(url)-11);';
put 'else url="&systcpiphostname/SASJobExecution";';
put 'end;';
put 'else url="&systcpiphostname/SASJobExecution";';
put '%end;';
put '%else %if &platform=SASMETA %then %do;';
put 'rc=METADATA_GETURI("Stored Process Web App",url);';
put '%end;';
put '%mend stagedata;';
put '%stagedata()';
put 'call symputx(''url'',url);';
put 'putlog url=;';
put 'run;';
put '/* Create package folder */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put '/* redirect the log */';
put '%put; %put; %put log is being redirected;';
put '%put to retrieve, visit this url:; %put;%put;';
put '%let url=&url?_program=%substr(&_program';
put ',1,%length(&_program)-9)getlog%str(&)table=&mperef;';
put '%put &url;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to log redirection)';
put ')';
put 'proc printto log="&dir/weblog.txt";run;';
put 'options notes mprint;';
put 'libname approve "&dir";';
put '/* take copy of webin file */';
put 'data _null_;';
put 'if symexist(''_WEBIN_FILEREF1'') then ref=symget(''_WEBIN_FILEREF1'');';
put 'else if symexist(''sasjs_tables'') then ref=''0ref''; /* no fileref created */';
put 'else ref=''indata1'';';
put 'call symputx(''ref'',ref);';
put 'putlog ref=;';
put 'run;';
put '%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)';
put '/* take copy of macvars */';
put 'data _null_;';
put 'file "&dir/macvars.sas";';
put 'set sashelp.vmacro;';
put 'where scope=''GLOBAL'';';
put 'put ''%let '' name ''='' value '';'';';
put 'run;';
put 'data approve.jsdset;';
put 'length _____DELETE__THIS__RECORD_____ $3;';
put 'set jsdata;';
put 'run;';
put '/**';
put '* mf_getvarXXX functions will fail if the target is locked - so take a copy';
put '* and reference that (this will also explicitly throw the lock situation)';
put '*/';
put '%let dscopy=work.dscopy;';
put 'data &dscopy;';
put 'set &libds;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Issue getting lock on &libds)';
put ')';
put '%mp_ds2csv(approve.jsdset';
put ',dlm=COMMA';
put ',outfile="&dir/&orig_libds..csv"';
put ',outencoding="UTF-8"';
put ',headerformat=NAME';
put ',termstr=CRLF';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when writing the CSV)';
put ')';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=%superq(message)';
put ',approver=%quote(%trim(&approver))';
put ',url=%superq(url)';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)';
put ',mac=&_program..sas';
put ',msg=%str(mf_abort.error=1)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* send relevant SUCCESS values */';
put 'data sasparams;';
put 'STATUS=''SUCCESS'';';
put 'DSID="&mperef";';
put 'url="&url";';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,sasparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/hooks;
%let service=mpe_column_level_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_COLUMN_LEVEL_SECURITY table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming column_level_security settings to ensure';
put 'each individual filter is valid';
put '**/';
put '/* check scope values and ensure uppercasing */';
put '%let errflag=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'cls_scope=upcase(cls_scope);';
put 'CLS_LIBREF=upcase(CLS_LIBREF);';
put 'cls_table=upcase(CLS_TABLE);';
put 'CLS_VARIABLE_NM=upcase(CLS_VARIABLE_NM);';
put 'if cls_scope not in (''ALL'',''VIEW'',''EDIT'') then do;';
put 'call symputx(''errflag'',1);';
put 'call symputx(''errmsg'',"Invalid scope: "!!cls_scope);';
put 'stop;';
put 'end;';
put 'if cls_hide<1 then cls_hide=0;';
put 'else cls_hide=1;';
put 'if CLS_ACTIVE<1 then CLS_ACTIVE=0;';
put 'else CLS_ACTIVE=1;';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_column_level_security_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_row_level_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_ROW_LEVEL_SECURITY table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming row_level_security settings to ensure';
put 'each individual filter is';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mp_filtercheck.sas';
put ' Related Macros
';
put '@li mpe_loader.sas';
put '**/';
put '/* ignore scope and group for validation */';
put 'proc sql;';
put 'create table work.batches as';
put 'select distinct upcase(rls_libref) as rls_libref,';
put 'upcase(rls_table) as rls_table,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from work.staging_ds';
put 'where rls_active=1';
put 'order by rls_libref, rls_table;';
put '%let cnt=0;';
put 'data _null_;';
put 'set work.batches;';
put 'by rls_libref rls_table;';
put 'putlog (_all_)(=);';
put 'if last.rls_table then do;';
put 'x+1;';
put 'call symputx(cats(''libds'',x),cats(rls_libref,''.'',rls_table));';
put 'call symputx(''cnt'',x);';
put 'end;';
put 'run;';
put '%macro quickloop();';
put '%do i=1 %to &cnt;';
put 'data work.inds&i;';
put 'set work.batches;';
put 'if cats(rls_libref,''.'',rls_table)="&&libds&i";';
put 'keep group_logic subgroup_logic subgroup_id variable_nm operator_nm';
put 'raw_value;';
put 'run;';
put '%dc_assignlib(READ,%scan(&&libds&i,1,.))';
put '%mp_filtercheck(work.inds&i';
put ',targetds=&&libds&i';
put ',outds=work.badrecords';
put ',abort=YES';
put ')';
put '%end;';
put '%mend quickloop;';
put '%quickloop()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_SECURITY table';
put '@details Post edit hooks provide additional backend validation against';
put 'user-sourced data. The incoming dataset is always `work.staging_ds` and this';
put 'file is included from the mpe_loader.sas macro.';
put 'Available (at runtime) macro variables:';
put '@li DC_LIBREF - The DC control library for your site';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put '**/';
put '/* ensure upcase and check access level values*/';
put '%let errval=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
put 'ACCESS_LEVEL=upcase(ACCESS_LEVEL);';
put 'if ACCESS_LEVEL not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;';
put 'putlog "ERR" +(-1) "OR: invalid ACCESS_LEVEL - " access_level;';
put 'call symputx(''errval'',1);';
put 'call symputx(''errmsg'',"Invalid ACCESS_LEVEL: "!!access_level);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&errval=1)';
put ',mac=mpe_security_postedit.sas';
put ',msg=%str(&errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_tables_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_TABLES table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks MPE_TABLES to ensure modified / added records are';
put 'valid. If a non-default AUDIT_LIBDS is being used, there is also a check';
put 'to ensure that this table already exists.';
put '**/';
put '%let errmsg=;';
put '%let errflag=0;';
put '/* ensure uppercasing */';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
put 'loadtype=upcase(loadtype);';
put 'buskey=upcase(buskey);';
put 'var_txfrom=upcase(var_txfrom);';
put 'var_txto=upcase(var_txto);';
put 'var_busfrom=upcase(var_busfrom);';
put 'var_busto=upcase(var_busto);';
put 'var_processed=upcase(var_processed);';
put 'close_vars=upcase(close_vars);';
put 'audit_libds=upcase(audit_libds);';
put 'rk_underlying=upcase(rk_underlying);';
put '/* check for valid loadtype */';
put 'if LOADTYPE not in (''UPDATE'',''TXTEMPORAL'',''FORMAT_CAT'',''BITEMPORAL'',''REPLACE'')';
put 'then do;';
put 'call symputx(''errmsg'',"Invalid LOADTYPE: "!!LOADTYPE);';
put 'call symputx(''errflag'',1);';
put 'end;';
put '/* force correct BUSKEY and DSN when loading format catalogs */';
put 'if LOADTYPE=''FORMAT_CAT'' then do;';
put 'BUSKEY=''TYPE FMTNAME FMTROW'';';
put 'DSN=scan(dsn,1,''-'')!!''-FC'';';
put 'end;';
put '/* convert tabs into spaces */';
put 'buskey=translate(buskey," ","09"x);';
put 'rk_underlying=translate(rk_underlying," ","09"x);';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_tables_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '/* get distinct list of audit libs */';
put 'proc sql;';
put 'create table work.liblist as';
put 'select distinct audit_libds';
put 'from work.staging_ds';
put 'where audit_libds not in ('''',''0'', "&dc_libref..MPE_AUDIT")';
put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";';
put '/* assign the libs */';
put 'data _null_;';
put 'set work.liblist;';
put 'call symputx(cats(''lib'',_n_),audit_libds);';
put 'libref=scan(audit_libds,1,''.'');';
put 'call execute(''%dc_assignlib(WRITE,''!!libref!!'')'');';
put 'run;';
put '/* check the audit tables exist */';
put 'data _null_;';
put 'set work.liblist;';
put 'if exist(audit_libds,"DATA")=0 then do;';
put 'call symputx(''errmsg'',';
put '"Audit Table "!!audit_libds!!" does not exist, or could not be assigned."';
put ');';
put 'call symputx(''errflag'',1);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_tables_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_validations_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_VALIDATIONS table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming mpe_validations settings to ensure';
put 'there are no columns that have both HARDSELECT_HOOK and SOFTSELECT_HOOK.';
put ' SAS Macros
';
put '@li mf_nobs.sas';
put ' Related Macros
';
put '@li mpe_loader.sas';
put '**/';
put '/** check to avoid a colum having both HARDSELECT_HOOK and SOFTSELECT_HOOK */';
put '/* need to merge with base table in the case of a single row being added */';
put '%global src_list1 src_list2;';
put '%let src_list1='''';';
put 'proc sql noprint;';
put 'create table work.check1 as';
put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source';
put ',rule_type';
put 'from work.staging_ds';
put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')';
put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";';
put 'select distinct cats(source) into: src_list1 separated by '',''';
put 'from work.check1;';
put 'create table work.check2 as';
put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source';
put ',rule_type';
put 'from &DC_LIBREF..MPE_VALIDATIONS';
put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and catx(''.'',base_lib,base_ds,base_col) in (&src_list1);';
put 'create table work.check3 as';
put 'select * from work.check1';
put 'union';
put 'select * from work.check2;';
put 'create table work.validation_checker as';
put 'select source';
put ',count(*) as cnt';
put 'from work.check3';
put 'group by 1';
put 'having cnt>1;';
put 'select distinct source into: src_list2 from work.validation_checker;';
put 'data _null_;';
put 'set work.validation_checker;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.validation_checker)>0)';
put ',mac=mpe_validations_postedit';
put ',msg=%str(The following vars have duplicate HOOKS: &src_list2)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_xlmap_info_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_XLMAP_INFO table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put ' SAS Macros
';
put '@li mf_existds.sas';
put '@li mf_getvarlist.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li dc_assignlib.sas';
put '@li mp_validatecol.sas';
put '**/';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put '/* apply the first excel map to all cells */';
put 'length tgtds $41;';
put 'retain tgtds;';
put 'drop tgtds is_libds;';
put 'if _n_=1 then do;';
put 'if missing(XLMAP_TARGETLIBDS) then tgtds="&dc_libref..MPE_XLMAP_DATA";';
put 'else tgtds=upcase(XLMAP_TARGETLIBDS);';
put '%mp_validatecol(XLMAP_TARGETLIBDS,LIBDS,is_libds)';
put 'call symputx(''tgtds'',tgtds);';
put 'call symputx(''is_libds'',is_libds);';
put 'end;';
put 'XLMAP_TARGETLIBDS=tgtds;';
put 'run;';
put '%mp_abort(iftrue=(&is_libds ne 1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=Invalid target dataset (&tgtds)';
put ')';
put '/**';
put '* make sure that the supplied target dataset exists and';
put '* has the necessary columns';
put '*/';
put '%dc_assignlib(READ,%scan(&tgtds,1,.))';
put '%mp_abort(iftrue=(%mf_existds(libds=&tgtds) ne 1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=Target dataset (&tgtds) could not be opened';
put ')';
put '%let tgtvars=%upcase(%mf_getvarlist(&tgtds));';
put '%let srcvars=%upcase(%mf_getvarlist(&dc_libref..MPE_XLMAP_DATA));';
put '%let badvars1=%mf_wordsInStr1ButNotStr2(Str1=&srcvars,Str2=&tgtvars);';
put '%let badvars2=%mf_wordsInStr1ButNotStr2(Str1=&tgtvars,Str2=&srcvars);';
put '%mp_abort(iftrue=(%length(&badvars1.X)>1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=%str(Target dataset (&tgtds) has missing vars: &badvars1)';
put ')';
put '%mp_abort(iftrue=(%length(&badvars2.X)>1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=%str(Target dataset (&tgtds) has unrecognised vars: &badvars2)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_xlmap_rules_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_XLMAP_RULES table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put '**/';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put '/* ensure uppercasing */';
put 'XLMAP_ID=upcase(XLMAP_ID);';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sample_xlmap_data_postapprove;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sample XLMAP Data hook program (sample_xlmap_data_postapprove)';
put '@details This hook script should NOT be modified in place, as the changes';
put 'would be lost in your next Data Controller deployment.';
put 'Instead, create a copy of this hook script and place it OUTSIDE the';
put 'Data Controller metadata folder.';
put 'Available macro variables:';
put '@li LOAD_REF - The Load Reference (unique upload id)';
put '@li ORIG_LIBDS - The target library.dataset that was just loaded';
put '**/';
put 'data _null_;';
put 'set work.staging_ds;';
put 'putlog ''load ref is in the staged data: '' load_ref;';
put 'stop;';
put 'run;';
put '%put the unique identifier (LOAD_REF) is also a macro variable: &LOAD_REF;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sample_xlmap_data_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sample XLMAP Data hook program';
put '@details This hook script should NOT be modified in place, as the changes';
put 'would be lost in your next Data Controller deployment.';
put 'Instead, create a copy of this hook script and place it OUTSIDE the';
put 'Data Controller metadata folder.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The target dataset being loaded';
put '**/';
put '%let abort=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'length errmsg $1000;';
put 'drop err:;';
put '/* KM1 validations */';
put 'if XLMAP_ID=''BASEL-KM1'' then do;';
put 'if XLMAP_RANGE_ID=''KM1:a'' & input(value_txt,8.)<100 then do;';
put 'errmsg=''Should be greater than 100'';';
put 'err=1;';
put 'end;';
put 'end;';
put '/* CR2 Validations */';
put 'if XLMAP_ID=''BASEL-CR2'' then do;';
put 'if XLMAP_RANGE_ID=''CR2-sec1'' & row_no=3 & input(value_txt,8.)>0 then do;';
put 'errmsg=''Should be negative'';';
put 'err=1;';
put 'end;';
put 'end;';
put '/* publish error message */';
put 'if err=1 then do;';
put 'errmsg=catx('' '',xlmap_range_id,'':'',value_txt,''->'',errmsg);';
put 'call symputx(''errmsg'',errmsg);';
put 'call symputx(''abort'',1);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&abort ne 0)';
put ',mac=xlmap_data_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/public;
%let service=getchangeinfo;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getchangeinfo.sas';
put '@brief Returns the details for an approval diff';
put '@details';
put ' SAS Macros
';
put '@li mf_getengine.sas';
put '@li dc_assignlib.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let table=;';
put 'data _null_;';
put 'set SASControlTable;';
put 'call symputx(''table'',table);';
put 'run;';
put '%dc_assignlib(WRITE,%scan(&table,1,.))';
put '%let max_ver_dttm=0;';
put 'data APPROVE1;';
put 'set &mpelib..mpe_submit';
put '(rename=(SUBMITTED_ON_DTTM=submitted_on REVIEWED_ON_DTTM=REVIEWED_ON));';
put 'where TABLE_ID="&TABLE";';
put 'TABLE_NM=cats(base_lib,''.'',base_ds);';
put 'BASE_TABLE=table_nm;';
put 'call symputx(''base_lib'',base_lib);';
put 'REVIEWED_ON_DTTM=put(reviewed_on,datetime19.);';
put 'SUBMITTED_ON_DTTM=put(submitted_on,datetime19.);';
put 'run;';
put 'data jsParams;';
put 'set approve1;';
put 'LIB_ENGINE="%mf_getEngine(&base_lib)";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,jsParams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getcols;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getcols.sas';
put '@brief Retrieves column info to enable population of dropdowns';
put '@details';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getvalue.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let ds=%mf_getvalue(work.iwant,libds);';
put '%dc_assignlib(READ,%scan(&ds,1,.))';
put 'proc contents noprint data=&ds';
put 'out=droplist1 (keep=name type length label varnum format:);';
put 'run;';
put 'data cols(keep=name type length varnum format label);';
put 'set droplist1(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(format2,''.'');';
put 'else format=cats(format2,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(format2,''.'');';
put 'else if formatd=0 then format=cats(format2,formatl,''.'');';
put 'else format=cats(format2,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,cols)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getcolvals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Retrieves column info to enable population of dropdowns';
put '@details An optional filterquery may be provided, if so then it is validated';
put 'and then used to filter the subsequent results.';
put ' Service Inputs
';
put ' IWANT
';
put 'The STARTROW and ROWS variables are used to fetch additional values beyond';
put 'the initial default (4000).';
put '|libds:$19.|col:$9.|STARTROW:8.|ROWS:8.|';
put '|---|---|---|---|';
put '|DC258467.MPE_X_TEST|SOME_TIME|4001|1000';
put ' FILTERQUERY
';
put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|';
put '|---|---|---|---|---|---|';
put '|AND|AND|1|SOME_BESTNUM|>|1|';
put '|AND|AND|1|SOME_TIME|=|77333|';
put ' Service Outputs
';
put ' VALS
';
put 'The type of this column actually depends on the underlying column type, so it can change';
put '|FORMATTED|UNFORMATTED|';
put '|---|---|';
put '|$44.00|44|';
put ' META
';
put '|COLUMN:$32.|SASFORMAT:$32.|STARTROW:8.|ROWS:8.|';
put '|---|---|---|---|';
put '|COL_NAME|DOLLAR8.2|4001|1000';
put ' SAS Macros
';
put '@li mf_existds.sas';
put '@li mf_getvalue.sas';
put '@li mf_verifymacvars.sas';
put '@li dc_assignlib.sas';
put '@li mf_getvarformat.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_filtercheck.sas';
put '@li mp_filtergenerate.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd.';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* input table may or may not exist */';
put 'data work.initvars;';
put 'length GROUP_LOGIC $3 SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $32767;';
put 'call missing(of _all_);';
put 'stop;';
put 'data work.filterquery;';
put 'set %sysfunc(ifc(';
put '%mf_existds(work.filterquery)=1';
put ',work.filterquery';
put ',work.initvars';
put '));';
put 'run;';
put '/* print data for debugging */';
put 'data _null_;';
put 'set work.iwant;';
put 'put (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set work.filterquery;';
put 'put (_all_)(=);';
put 'run;';
put '%let libds=%mf_getvalue(work.iwant,libds);';
put '%let col2=%mf_getvalue(work.iwant,col);';
put '%let is_fmt=0;';
put '%let startrow=1;';
put '%let rows=4000;';
put '%put &=libds;';
put '%put &=col2;';
put '%mp_abort(iftrue= (%mf_verifymacvars(libds col2)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Missing inputs from iwant. Libds=&libds col=&col2 )';
put ')';
put '%dc_assignlib(WRITE,%scan(&libds,1,.))';
put 'data _null_;';
put 'call missing(startrow,rows);';
put 'set work.iwant;';
put '/* check if the request is for a format catalog */';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''libds'',''work.fmtextract'');';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''startrow'',coalesce(startrow,&startrow));';
put 'call symputx(''rows'',coalesce(rows,&rows));';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/**';
put '* Validate the filter query';
put '*/';
put '%mp_filtercheck(work.filterquery,targetds=&libds,abort=YES)';
put '/**';
put '* Prepare the query';
put '*/';
put '%mp_filtergenerate(work.filterquery,outref=myfilter)';
put '/* cannot %inc in a sql where clause, only data step, so - use a view */';
put 'data work.vw_vals/view=work.vw_vals;';
put 'set &libds;';
put 'where %inc myfilter;;';
put 'run;';
put 'proc sql;';
put 'create view work.vw_vals_sorted as';
put 'select distinct';
put 'put(&col2,%mf_getVarFormat(&libds,&col2,force=1)) as formatted,';
put '&col2 as unformatted';
put 'from work.vw_vals;';
put '/* restrict num of output values */';
put 'data work.vals;';
put 'set work.vw_vals_sorted;';
put 'if _n_ ge &startrow;';
put 'x+1;';
put 'if x>&rows then stop;';
put 'drop x;';
put 'run;';
put 'data vals;';
put '/* ensure empty value if table is empty, for dropdowns */';
put 'if nobs=0 then output;';
put 'set vals nobs=nobs;';
put 'format unformatted ;';
put 'output;';
put 'run;';
put 'proc sql noprint;';
put 'select count(*) into: nobs from work.vw_vals_sorted;';
put 'data meta;';
put 'column="&col2";';
put 'sasformat="%mf_getVarFormat(&libds,&col2)";';
put 'startrow=&startrow;';
put 'rows=&rows;';
put 'nobs=&nobs;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,vals,missing=STRING,showmeta=YES)';
put '%webout(OBJ,meta)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getddl;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_existfileref(fref';
put ')/*/STORE SOURCE*/;';
put '%local rc;';
put '%let rc=%sysfunc(fileref(&fref));';
put '%if &rc=0 %then %do;';
put '1';
put '%end;';
put '%else %if &rc<0 %then %do;';
put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;';
put '1';
put '%end;';
put '%else %do;';
put '0';
put '%end;';
put '%mend mf_existfileref;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema=';
put ',applydttm=NO';
put ')/*/STORE SOURCE*/;';
put '/* check fileref is assigned */';
put '%if %mf_existfileref(&fref)=0 %then %do;';
put 'filename &fref temp ;';
put '%end;';
put '%if %length(&libref)=0 %then %let libref=WORK;';
put '%let flavour=%upcase(&flavour);';
put 'proc sql noprint;';
put 'create table _data_ as';
put 'select * from dictionary.tables';
put 'where upcase(libname)="%upcase(&libref)"';
put 'and memtype=''DATA'' /* views not currently supported */';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local tabinfo; %let tabinfo=&syslast;';
put 'create table _data_ as';
put 'select * from dictionary.columns';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local colinfo; %let colinfo=&syslast;';
put '%local dsnlist;';
put 'select distinct upcase(memname) into: dsnlist';
put 'separated by '' ''';
put 'from &syslast';
put ';';
put 'create table _data_ as';
put 'select * from dictionary.indexes';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put 'order by idxusage, indxname, indxpos';
put ';';
put '%local idxinfo; %let idxinfo=&syslast;';
put '/* Extract all Primary Key and Unique data constraints */';
put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)';
put '%local colconst; %let colconst=&syslast;';
put '%macro addConst();';
put '%global constraints_used;';
put 'data _null_;';
put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;';
put 'set &colconst(';
put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))';
put ') end=last;';
put 'file &fref mod;';
put 'by constraint_type constraint_name;';
put 'retain constraints_used;';
put 'constraint_name_orig=constraint_name;';
put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';';
put 'else ctype=strip(constraint_type);';
put '%if &flavour=TSQL %then %do;';
put 'column_name=catt(''['',column_name,'']'');';
put 'constraint_name=catt(''['',constraint_name,'']'');';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'column_name=catt(''"'',column_name,''"'');';
put 'constraint_name=catt(''"'',constraint_name,''"'');';
put '%end;';
put 'if first.constraint_name then do;';
put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);';
put 'put " ,CONSTRAINT " constraint_name ctype "(" ;';
put 'put '' '' column_name;';
put 'end;';
put 'else put '' ,'' column_name;';
put 'if last.constraint_name then do;';
put 'put " )";';
put 'call symput(''constraints_used'',strip(constraints_used));';
put 'end;';
put 'run;';
put '%put &=constraints_used;';
put '%mend addConst;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";';
put 'run;';
put '%local x curds;';
put '%if &flavour=SAS %then %do;';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";';
put 'put "proc sql;";';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'length lab $1024 typ $20;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table &libref..&curds(";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view &libref..&curds(";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'if length(format)>1 then fmt=" format="!!cats(format);';
put 'if length(label)>1 then';
put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");';
put 'if notnull=''yes'' then notnul='' not null'';';
put 'if type=''char'' then typ=cats(''char('',length,'')'');';
put 'else if length ne 8 then typ=''num length=''!!cats(length);';
put 'else typ=''num'';';
put 'put name typ fmt notnul lab;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '/* ds=cats(libname,''.'',memname); */';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;';
put 'put '' '' name ;';
put 'end;';
put 'else put '' ,'' name ;';
put '*else put '' ,'' name ;';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '/*';
put 'ods output IntegrityConstraints=ic;';
put 'proc contents data=testali out2=info;';
put 'run;';
put '*/';
put '%end;';
put '%end;';
put '%else %if &flavour=TSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''SQLSVR'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* TSQL Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table [&schema].[&curds](";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view [&schema].[&curds](";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';';
put '%end;';
put 'else if type=''num'' then fmt=''[decimal](18,2)'';';
put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';';
put 'else fmt=cats(''[varchar](max)'');';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put 'put "[" name +(-1) "]" fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '*ds=cats(libname,''.'',memname);';
put 'if first.indxname then do;';
put '/* add nonclustered in case of multiple unique indexes */';
put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';';
put 'put '' ['' name +(-1) '']'';';
put 'end;';
put 'else put '' ,['' name +(-1) '']'';';
put 'if last.indxname then do;';
put 'put '' )'';';
put 'end;';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'put '')'';';
put 'put ''GO'';';
put 'run;';
put '/* add extended properties for labels */';
put 'data _null_;';
put 'file &fref mod;';
put 'length nm $64 lab $1024;';
put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;';
put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");';
put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");';
put 'put '' '';';
put 'put "EXEC sys.sp_addextendedproperty ";';
put 'put " @name=N''MS_Description'',@value=" lab ;';
put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";';
put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";';
put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;';
put 'if last then put ''GO'';';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''POSTGRES'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put 'data _null_;';
put 'file &fref mod;';
put 'put "CREATE SCHEMA &schema;";';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put '%local curdsvarcount;';
put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);';
put '%if &curdsvarcount>1600 %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &libref..&curds contains &curdsvarcount vars */";';
put 'put "/* Postgres cannot create tables with over 1600 vars */";';
put 'put "/* No DDL will be generated for this table";';
put 'run;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* Postgres Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'length fmt $32;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "CREATE TABLE &schema..&curds (";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "CREATE VIEW &schema..&curds (";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';';
put '%end;';
put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';';
put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put '/* quote column names in case they represent reserved words */';
put 'name2=quote(trim(name));';
put 'put name2 fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";';
put 'put '' "'' name +(-1) ''"'' ;';
put 'end;';
put 'else put '' ,"'' name +(-1) ''"'';';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%if %upcase(&showlog)=YES %then %do;';
put 'options ps=max;';
put 'data _null_;';
put 'infile &fref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_getddl;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Download DDL for a table or entire library in a particular flavour.';
put '@details';
put ' SAS Macros
';
put '@li mddl_sas_cntlout.sas';
put '@li dc_assignlib.sas';
put '@li mf_existds.sas';
put '@li mp_abort.sas';
put '@li mp_getddl.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global libref ds flavour;';
put '%let flavour=%sysfunc(coalescec(&flavour,SAS));';
put '%mpeinit()';
put '%dc_assignlib(READ,&libref)';
put 'data _null_;';
put '/* check if the request is for a format catalog */';
put 'ds=symget(''ds'');';
put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;';
put 'ds=scan(ds,1,''-'');';
put 'libds=cats(symget(''libref''),''.'',ds);';
put 'putlog "Format Catalog Captured";';
put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');';
put 'call symputx(''libref'',''work'');';
put 'call symputx(''ds'',''fmtextract'');';
put 'end;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=("exist&ds" ne "exist" and %mf_existds(libds=&libref..&ds)<1)';
put ',mac=&_program';
put ',msg=%str(Dataset &libref..&ds was not found)';
put ')';
put '%let tmploc=%sysfunc(pathname(work))/temp.txt;';
put 'filename tmp "&tmploc";';
put '%mp_getddl(&libref,&ds,flavour=&flavour, fref=tmp, applydttm=YES)';
put '%mp_streamfile(contenttype=TEXT';
put ',inloc=%str(&tmploc)';
put ',outname=&libref._&ds..ddl';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getgroups;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroups(access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroups';
put ');';
put '%local oauth_bearer base_uri fname1 libref1;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '/* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getgroups;';
put '%macro dc_getgroups(outds=mm_getgroups);';
put '%mv_getgroups(outds=&outds)';
put 'proc sort';
put 'data=&outds(rename=(id=groupuri name=groupname description=groupdesc))';
put 'out=&outds (keep=groupuri groupname groupdesc);';
put 'by groupname;';
put 'run;';
put '%mend dc_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getgroups.sas';
put '@brief List all SAS Groups';
put '@details Gets a list of all SAS Groups. Runs without mpeinit() so that it';
put 'can be available to the sasjs/server configurator';
put ' SAS Macros
';
put '@li dc_getgroups.sas';
put ' Data Outputs
';
put ' groups
';
put '|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|';
put '|---|---|---|';
put '|`SomeGroup `|`A group `|`1`|';
put '|`Another Group`|`this is a different group`|`2`|';
put '|`admin`|`Administrators `|`3`|';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%dc_getgroups(outds=groups)';
put '%webout(OPEN)';
put '%webout(OBJ,groups)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getrawdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_ds2cards(base_ds, tgt_ds=';
put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"';
put ',maxobs=max';
put ',random_sample=NO';
put ',showlog=YES';
put ',outencoding=';
put ',append=NO';
put ')/*/STORE SOURCE*/;';
put '%local i setds nvars;';
put '%if not %sysfunc(exist(&base_ds)) %then %do;';
put '%put %str(WARN)ING: &base_ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;';
put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;';
put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);';
put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";';
put '%if ("&append" = "" or "&append" = "NO") %then %let append=;';
put '%else %let append=mod;';
put '/* get varcount */';
put '%let nvars=0;';
put 'proc sql noprint;';
put 'select count(*) into: nvars from dictionary.columns';
put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";';
put '%if &nvars=0 %then %do;';
put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;';
put '%return;';
put '%end;';
put '/* get indexes */';
put 'proc sort';
put 'data=sashelp.vindex(';
put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")';
put ')';
put 'out=_data_;';
put 'by indxname indxpos;';
put 'run;';
put '%local indexes;';
put 'data _null_;';
put 'set &syslast end=last;';
put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');';
put 'by indxname indxpos;';
put 'length vars $32767 nom uni $8;';
put 'retain vars;';
put 'if first.indxname then do;';
put 'idxcnt+1;';
put 'nom='''';';
put 'uni='''';';
put 'vars=name;';
put 'end;';
put 'else vars=catx('' '',vars,name);';
put 'if last.indxname then do;';
put 'if nomiss=''yes'' then nom=''/nomiss'';';
put 'if unique=''yes'' then uni=''/unique'';';
put 'call symputx(''indexes''';
put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)';
put ',''l'');';
put 'end;';
put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');';
put 'run;';
put 'data;run;';
put '%let setds=&syslast;';
put 'proc sql';
put '%if %datatyp(&maxobs)=NUMERIC %then %do;';
put 'outobs=&maxobs;';
put '%end;';
put ';';
put 'create table &setds as select * from &base_ds';
put '%if &random_sample=YES %then %do;';
put 'order by ranuni(42)';
put '%end;';
put ';';
put 'reset outobs=max;';
put 'create table datalines1 as';
put 'select name,type,length,varnum,format,label from dictionary.columns';
put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"';
put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";';
put '/**';
put 'Due to long decimals cannot use best. format';
put 'So - use bestd. format and then use character functions to strip trailing';
put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets';
put 'note2err when there are missings.';
put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0';
put ',put(VARIABLE,best32.)';
put ',substrn(put(VARIABLE,bestd32.),1';
put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));';
put '**/';
put 'data datalines_2;';
put 'format dataline $32000.;';
put 'set datalines1 (where=(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));';
put 'if type=''num'' then dataline=';
put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0';
put ',put('',name,'',best32.-l)';
put ',substrn(put('',name,'',bestd32.-l),1';
put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');';
put '/**';
put '* binary data must be converted, to store in text format. It is identified';
put '* by the presence of the $HEX keyword in the format.';
put '*/';
put 'else if upcase(format)=:''$HEX'' then';
put 'dataline=cats(''put(trim('',name,''),'',format,'')'');';
put '/**';
put '* There is no easy way to store line breaks in a cards file.';
put '* To discuss this, use: https://github.com/sasjs/core/issues/80';
put '* Removing all nonprintables with kw (keep writeable)';
put '*/';
put 'else dataline=cats(''compress('',name,'', ,"kw")'');';
put 'run;';
put 'proc sql noprint;';
put 'select dataline into: datalines separated by '','' from datalines_2;';
put '%local';
put 'process_dttm_flg';
put 'valid_from_dttm_flg';
put 'valid_to_dttm_flg';
put ';';
put '%let process_dttm_flg = N;';
put '%let valid_from_dttm_flg = N;';
put '%let valid_to_dttm_flg = N;';
put 'data _null_;';
put 'set datalines1 ;';
put '/* build attrib statement */';
put 'if type=''char'' then type2=''$'';';
put 'if strip(format) ne '''' then format2=cats(''format='',format);';
put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));';
put 'str1=catx('' '',(put(name,$33.)||''length='')';
put ',put(cats(type2,length),$7.)||format2,label2);';
put '/* Build input statement */';
put 'if upcase(format)=:''$HEX'' then type3='':''!!format;';
put 'else if type=''char'' then type3='':$char.'';';
put 'str2=put(name,$33.)||type3;';
put 'if(upcase(name) = "PROCESSED_DTTM") then';
put 'call symputx("process_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_FROM_DTTM") then';
put 'call symputx("valid_from_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_TO_DTTM") then';
put 'call symputx("valid_to_dttm_flg", "Y", "L");';
put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");';
put 'call symputx(cats("input_stmt_", put(_N_, 8.))';
put ', ifc(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");';
put 'run;';
put 'data _null_;';
put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;';
put 'length __attrib $32767;';
put 'if _n_=1 then do;';
put 'put ''/**'';';
put 'put '' @file'';';
put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";';
put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";';
put 'put " Source: https://github.com/sasjs/core";';
put 'put '' @cond '';';
put 'put ''**/'';';
put 'put "data &tgt_ds &indexes;";';
put 'put "attrib ";';
put '%do i = 1 %to &nvars;';
put '__attrib=symget("attrib_stmt_&i");';
put 'put __attrib;';
put '%end;';
put 'put ";";';
put '%if &process_dttm_flg. eq Y %then %do;';
put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';';
put '%end;';
put '%if &valid_from_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_FROM_DTTM &low_date;'';';
put '%end;';
put '%if &valid_to_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_TO_DTTM &high_date;'';';
put '%end;';
put 'if __nobs=0 then do;';
put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';';
put 'put ''stop;'';';
put 'put ''run;'';';
put 'end;';
put 'else do;';
put 'put "infile cards dsd;";';
put 'put "input ";';
put '%do i = 1 %to &nvars.;';
put '%if(%length(&&input_stmt_&i..)) %then';
put 'put " &&input_stmt_&i..";';
put ';';
put '%end;';
put 'put ";";';
put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';';
put 'put "datalines4;";';
put 'end;';
put 'end;';
put 'set &setds end=__lastobs nobs=__nobs;';
put '/* remove all formats for write purposes - some have long underlying decimals */';
put 'format _numeric_ best30.29;';
put 'length __dataline $32767;';
put '__dataline=catq(''cqtmb'',&datalines);';
put 'put __dataline;';
put 'if __lastobs then do;';
put 'put '';;;;'';';
put 'put ''run;'';';
put 'put ''/** @endcond **/'';';
put 'stop;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &setds;';
put 'quit;';
put '%if &showlog=YES %then %do;';
put 'data _null_;';
put 'infile &cards_file lrecl=32767;';
put 'input;';
put 'put _infile_;';
put 'run;';
put '%end;';
put '%put NOTE: CARDS FILE SAVED IN:;';
put '%put NOTE-;%put NOTE-;';
put '%put NOTE- %sysfunc(dequote(&cards_file.));';
put '%put NOTE-;%put NOTE-;';
put '%mend mp_ds2cards;';
put '/** @endcond **/';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Downloads data in a variety of formats';
put '@details To enable direct download, this service runs in a dedicated stream';
put 'as a GET request using URL parameters as inputs.';
put 'The inputs are:';
put '@li table - the libds of the table to be downloaded';
put '@li type - either SAS, CSV, EXCEL, MARKDOWN, WEBCSV or WEBTAB';
put '@li filter - the filter RK if used';
put ' SAS Macros
';
put '@li mf_verifymacvars.sas';
put '@li mf_getuser.sas';
put '@li mf_existfeature.sas';
put '@li dc_assignlib.sas';
put '@li mp_ds2cards.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_cntlout.sas';
put '@li mp_streamfile.sas';
put '@li mpe_filtermaster.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global table type filter ds format is_fmt txfrom txto;';
put '%mpeinit()';
put '%let user=%mf_getuser();';
put '%let is_fmt=0;';
put '%mp_abort(iftrue= (%mf_verifymacvars(type table)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Invalid inputs: type table)';
put ')';
put '%let libds=%upcase(&table); /* actual source */';
put '%let table=%upcase(&table); /* used as label for fmt catalogs */';
put '%let lib=%scan(&table,1,.);';
put '%let ds=%scan(&table,2,.);';
put '%dc_assignlib(READ,&lib)';
put 'data _null_;';
put 'set &mpelib..MPE_TABLES;';
put 'where upcase(libref)="&lib" and upcase(dsn)="&ds";';
put '/* if a TXTEMPORAL table then filter as such */';
put 'call symputx(''txfrom'',var_txfrom);';
put 'call symputx(''txto'',var_txto);';
put 'ds=symget(''ds'');';
put 'is_fmt=0;';
put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;';
put 'ds=scan(ds,1,''-'');';
put 'table=cats("&lib..",ds);';
put 'putlog "Format Catalog Captured";';
put 'is_fmt=1;';
put 'call symputx(''libds'',''work.fmtextract'');';
put 'call symputx(''table'',table);';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&table';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%put preparing query;';
put '%mpe_filtermaster(DLOAD,&libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%put printing generated filterquery:;';
put 'data _null_;';
put 'infile filtref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put 'options obs=200000;/* stop limit */';
put 'data staged(drop=&txfrom &txto);';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put 'options obs=max;';
put 'options validvarname=upcase;';
put '%macro mpestp_getrawdata();';
put '%local outfile;';
put '%if &type=SAS %then %do;';
put '%let outfile=%sysfunc(pathname(work))/&table..sas;';
put '%mp_ds2cards(base_ds=staged';
put ', tgt_ds=&table';
put ', cards_file= "&outfile"';
put ', maxobs=100000)';
put '%let ext=sas;';
put '%let mimetype=text;';
put '%end;';
put '%else %if &type=CSV or (&type=EXCEL and %mf_existfeature(EXPORTXLS) ne 1)';
put '/* cannot proc export excel if PC Files is not licensed */';
put '%then %do;';
put '%let outfile=%sysfunc(pathname(work))/&table..csv;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= "&outfile"';
put 'DBMS=csv REPLACE;';
put 'RUN;';
put '%let ext=csv;';
put '%let mimetype=csv;';
put '%end;';
put '%else %if &type=EXCEL %then %do;';
put '%let ext=xlsx;';
put '%let outfile=%sysfunc(pathname(work))/&table..&ext;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= "&outfile"';
put 'DBMS=xlsx ;';
put 'RUN;';
put '%let mimetype=XLSX;';
put '%end;';
put '%else %if &type=MARKDOWN %then %do;';
put '%let ext=md;';
put '%let outfile=%sysfunc(pathname(work))/&table..&ext;';
put 'filename mdref "&outfile" lrecl=32767;';
put '%mp_ds2md(staged,outref=mdref,showlog=NO)';
put '%let mimetype=MARKDOWN;';
put '%end;';
put '%else %if &type=WEBCSV %then %do;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= _webout';
put 'DBMS=csv REPLACE;';
put 'RUN;';
put '/* don''t set headers */';
put '%return;';
put '%end;';
put '%else %if &type=WEBTAB %then %do;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= _webout';
put 'DBMS=tab REPLACE;';
put 'RUN;';
put '/* don''t set headers */';
put '%return;';
put '%end;';
put '%else %do;';
put '%mp_abort(msg=type &type not supported,mac=mpestp_getrawdata.sas);';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mp_streamfile(contenttype=&mimetype';
put ',inloc=%str(&outfile)';
put ',outname=&table..&ext';
put ')';
put '%mend mpestp_getrawdata;';
put '%mpestp_getrawdata()';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshlibinfo;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mpe_refreshtables(lib,ds=#all);';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%local engine; %let engine=%mf_getengine(&lib);';
put '%local schema; %let schema=%mf_getschema(&lib);';
put '%put running &sysmacroname &lib(&engine &schema) for &ds;';
put 'proc sql;';
put 'create table cols as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib cols extraction)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.indexes as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table finalcols as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.indexes b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%local dsn;';
put '%if &ds = #ALL %then %let dsn=;';
put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table work.pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.constraints';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table work.sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table work.pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from work.sum a';
put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table work.pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data work.finalpks;';
put 'set pkdefault pk4sure pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table finalcols as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* load columns */';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_vars';
put ',append_dsn=finalcols';
put ',PK=LIBREF DSN NAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF DSN';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.tabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data tabs2;';
put 'set finalcols;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table work.finaltabs as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.tabs a';
put 'left join work.tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_tabs';
put ',append_dsn=finaltabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '/* prepare table frequently changing attributes */';
put 'proc sql;';
put '%if &engine=SQLSVR %then %do;';
put 'connect using &lib;';
put 'create table work.attrs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date';
put 'FROM sys.tables ;';
put ');';
put 'create table work.nobs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema''';
put ',A.Name, AVG(B.rows) AS ''RowCount''';
put 'FROM sys.objects A';
put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id';
put 'WHERE A.type = ''U''';
put 'GROUP BY A.schema_id, A.Name';
put ');';
put 'disconnect from &lib;';
put 'create table statustabs as select';
put 'a.libref';
put ',a.dsn';
put ',b.create_date as crdate';
put ',b.modify_date as modate';
put ',. as filesize';
put ',c.RowCount as nobs';
put 'from work.tabs a';
put 'left join work.attrs(where=(schema="&schema")) b';
put 'on upcase(a.dsn)=upcase(b.name)';
put 'left join work.nobs(where=(schema="&schema")) c';
put 'on upcase(a.dsn)=upcase(c.name);';
put '%end;';
put '%else %do;';
put 'create table statustabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',crdate';
put ',modate';
put ',filesize';
put ',nobs';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%end;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_tabs';
put ',append_dsn=statustabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '%if &ds = #ALL %then %do;';
put 'proc sql;';
put 'create table statuslibs as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_libs';
put ',append_dsn=statuslibs';
put ',PK=LIBREF';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put ')';
put '%end;';
put '%mend mpe_refreshtables;';
put '%macro dc_refreshcatalog();';
put '%mpe_refreshlibs()';
put 'filename executor catalog ''work.code.code.source'';';
put 'data libraries;';
put 'set &mpelib..mpe_datacatalog_libs;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'file executor;';
put 'str=cats(''%mpe_refreshtables('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%mend dc_refreshcatalog;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshlibinfo.sas';
put '@brief Refresh the Data Catalog for a particular library';
put '@details When showing library info in the VIEW menu, the data is taken from';
put 'the Data Catalog tables. These may be empty or outdated, and so this service';
put 'allows end users to run a refresh of the data.';
put ' Service Inputs
';
put ' lib2refresh
';
put 'Should contain the libref to be refreshed.';
put '|libref:$8.|';
put '|---|';
put '|SOMELIB|';
put ' Service Outputs
';
put ' libinfo
';
put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |';
put '|---|---|---|---|---|---|---|---|---|';
put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_refreshcatalog.sas';
put '@li mp_abort.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%webout(FETCH)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem on startup)';
put ')';
put '%let libref=;';
put 'data _null_;';
put 'set work.lib2refresh;';
put 'call symputx(''libref'',libref);';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem with inputs - was lib2refresh object sent?)';
put ')';
put '%dc_assignlib(WRITE,&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc after lib assignment)';
put ')';
put '%dc_refreshcatalog(&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem when running the catalog refresh)';
put ')';
put '/* get libinfo */';
put 'proc sql;';
put 'create table work.libinfo as';
put 'select a.engine,';
put 'a.libname,';
put 'a.paths,';
put 'a.perms,';
put 'a.owners,';
put 'a.schemas,';
put 'a.libid,';
put 'b.libsize,';
put 'b.table_cnt';
put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'inner join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.libref=b.libref';
put 'where a.libref="&libref";';
put '%webout(OPEN)';
put '%webout(OBJ,libinfo)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=registeruser;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file registeruser.sas';
put '@brief Registers a new user in Data Controller';
put '@details New users are logged after accepting EULA terms.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let userid=%mf_getuser();';
put '/* confirm the user is not registered */';
put '%let isRegistered=0;';
put 'proc sql noprint;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem accessing &mpelib..mpe_users table)';
put ')';
put '%mp_abort(iftrue= (&isregistered > 0)';
put ',mac=&_program..sas';
put ',msg=%str(User &userid is already registered on &mpelib..mpe_users!)';
put ')';
put 'data work.append;';
put 'if 0 then set &mpelib..mpe_users;';
put 'user_id=symget(''userid'');';
put 'registered_dt=today();';
put 'last_seen_dt=today();';
put 'run;';
put 'proc append base=&mpelib..mpe_users data=work.append;';
put '%let isRegistered=0;';
put 'proc sql noprint;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '%mp_abort(iftrue= (&syscc ne 0 or &isregistered ne 1)';
put ',mac=&_program..sas';
put ',msg=%str(Problem appending to &mpelib..mpe_users table)';
put ')';
put 'data work.return;';
put 'msg=''SUCCESS'';';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,return)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=startupservice;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file startupservice.sas';
put '@brief List the libraries and tables the mp-editor user can access';
put '@details If user is in a control group (&mpeadmins, configured in mpeinit.sas)';
put 'then they have access to all libraries / tables. Otherwise a join is made';
put 'to the &mpelib..mpe_security table.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Issue on startup in startupService)';
put ')';
put '%let userid=%mf_getuser();';
put '%put userid is &userid;';
put '%mpe_getgroups(user=&userid,outds=groups)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Issue with Groups syscc=&syscc for user &userid)';
put ')';
put '/* check if user is an admin */';
put '%let admin_check=0;';
put 'proc sql noprint;';
put 'select count(*) into: admin_check';
put 'from groups';
put 'where groupname="&mpeadmins";';
put '/* check if user is registered or not */';
put '%let isRegistered=0;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '/* get number of registered users */';
put '%let registerCount=0;';
put 'select count(*) into: registercount';
put 'from &mpelib..mpe_users';
put 'where last_seen_dt>%sysfunc(today())-365;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem accessing &mpelib..mpe_users table)';
put ')';
put '%global dc_restrict_editrecord;';
put 'data work.globvars;';
put 'dclib="&mpelib";';
put 'sas9lineage_enabled=1;';
put 'isadmin=&admin_check;';
put 'isregistered=&isregistered;';
put 'registercount=®isterCount;';
put 'dc_admin_group="&mpeadmins";';
put '/* fetched from mpe_config in dc_getsettings */';
put 'licence_key="&dc_licence_key";';
put 'activation_key="&dc_activation_key";';
put 'dc_restrict_editrecord="&dc_restrict_editrecord";';
put 'run;';
put '%macro mstp_mpeditorstartup();';
put 'data _null_;';
put 'putlog "entering &sysmacroname";';
put 'run;';
put 'proc sql noprint;';
put '/* update last seen, if seen */';
put '%if &isregistered>0 %then %do;';
put 'update &mpelib..mpe_users';
put 'set last_seen_dt=%sysfunc(today())';
put 'where user_id="&userid";';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem updating &mpelib..mpe_users table)';
put ')';
put '%local all_cnt;';
put 'select count(*) into: all_cnt';
put 'from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and ACCESS_LEVEL in (''EDIT'')';
put 'and libref=''*ALL*''';
put 'and SAS_GROUP in (select groupname from groups);';
put '%if &admin_check >0 or &all_cnt>0 %then %do;';
put 'create table sasDatasets as';
put 'select distinct libref, dsn';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt tx_to';
put 'order by 1;';
put '%end;';
put '%else %do;';
put 'create table sasDatasets as';
put 'select distinct a.libref,a.dsn';
put 'from &mpelib..mpe_tables a';
put 'left join &mpelib..mpe_security b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn';
put 'where &dc_dttmtfmt. lt a.tx_to';
put 'and &dc_dttmtfmt. lt b.tx_to';
put 'and b.ACCESS_LEVEL in (''EDIT'')';
put 'and b.SAS_GROUP in (select groupname from groups)';
put 'order by 1;';
put '%end;';
put '%mend mstp_mpeditorstartup;';
put '%mstp_mpeditorstartup()';
put 'create table saslibs as';
put 'select distinct libref';
put 'from &syslast;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(issue with security validation)';
put ')';
put 'proc sql;';
put 'create table work.xlmaps as';
put 'select distinct a.XLMAP_ID';
put ',b.XLMAP_DESCRIPTION';
put ',coalescec(b.XLMAP_TARGETLIBDS,"&mpelib..MPE_XLMAP_DATA")';
put 'as XLMAP_TARGETLIBDS';
put 'from &mpelib..MPE_XLMAP_RULES a';
put 'left join &mpelib..MPE_XLMAP_INFO(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.XLMAP_ID=b.XLMAP_ID';
put 'where &dc_dttmtfmt. lt a.tx_to;';
put '/* we don''t want the XLMAP target datasets to be directly editable */';
put 'delete from sasdatasets';
put 'where cats(libref,''.'',dsn) in (select XLMAP_TARGETLIBDS from xlmaps);';
put '%webout(OPEN)';
put '%webout(OBJ,sasDatasets)';
put '%webout(OBJ,saslibs)';
put '%webout(OBJ,globvars)';
put '%webout(ARR,xlmaps)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tokenauth;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mv_tokenauth(inds=mv_registerclient';
put ',outds=mv_tokenauth';
put ',client_id=someclient';
put ',client_secret=somesecret';
put ',grant_type=authorization_code';
put ',code=';
put ',user=';
put ',pass=';
put ',access_token_var=ACCESS_TOKEN';
put ',refresh_token_var=REFRESH_TOKEN';
put ',base_uri=#NOTSET#';
put ');';
put '%global &access_token_var &refresh_token_var;';
put '%local fref1 fref2 libref;';
put '/* test the validity of inputs */';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_existds(&inds) %then %do;';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''client_id'',client_id,''l'');';
put 'call symputx(''client_secret'',client_secret,''l'');';
put 'if not missing(auth_code) then call symputx(''code'',auth_code,''l'');';
put 'run;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type=authorization_code and %str(&code)=%str())';
put ',mac=&sysmacroname';
put ',msg=%str(Authorization code required)';
put ')';
put '%mp_abort(iftrue=(';
put '&grant_type=password and (%str(&user)=%str() or %str(&pass)=%str()))';
put ',mac=&sysmacroname';
put ',msg=%str(username / password required)';
put ')';
put '/* prepare appropriate grant type */';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'if "&grant_type"=''authorization_code'' then string=cats(';
put '''grant_type=authorization_code&code='',symget(''code''));';
put 'else string=cats(''grant_type=password&username='',symget(''user'')';
put ',''&password='',symget(pass));';
put 'call symputx(''grantstring'',cats("''",string,"''"));';
put 'run;';
put '/*data _null_;infile &fref1;input;put _infile_;run;*/';
put '/**';
put '* Request access token';
put '*/';
put '%if &base_uri=#NOTSET# %then %let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%let fref2=%mf_getuniquefileref();';
put 'proc http method=''POST'' in=&grantstring out=&fref2';
put 'url="&base_uri/SASLogon/oauth/token"';
put 'WEBUSERNAME="&client_id"';
put 'WEBPASSWORD="&client_secret"';
put 'AUTH_BASIC;';
put 'headers "Accept"="application/json"';
put '"Content-Type"="application/x-www-form-urlencoded";';
put 'run;';
put '/*data _null_;infile &fref2;input;put _infile_;run;*/';
put '/**';
put '* Extract access / refresh tokens';
put '*/';
put '%let libref=%mf_getuniquelibref();';
put 'libname &libref JSON fileref=&fref2;';
put '/* extract the tokens */';
put 'data &outds;';
put 'set &libref..root;';
put 'call symputx("&access_token_var",access_token);';
put 'call symputx("&refresh_token_var",refresh_token);';
put 'run;';
put 'libname &libref clear;';
put 'filename &fref1 clear;';
put 'filename &fref2 clear;';
put '%mend mv_tokenauth;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file tokenauth.sas';
put '@brief Get initial tokens using an auth code - DEPRECATED';
put ' SAS Macros
';
put '@li mv_tokenauth.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%webout(FETCH)';
put 'data _null_;';
put 'set work.fromjs;';
put 'call symputx(''viyasettings'',viyasettings);';
put 'call symputx(''client_id'',client_id);';
put 'call symputx(''auth_code'',auth_code);';
put 'run;';
put 'data authme;';
put '/* get client info from special location */';
put 'infile "&viyasettings" dsd;';
put 'input client_secret:$100.;';
put 'client_id="&client_id";';
put 'auth_code="&auth_code";';
put 'run;';
put '/* get tokens */';
put '%mv_tokenauth(inds=authme, outds=fromSAS(keep=access_token refresh_token))';
put '/* send back to frontend */';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tokenrefresh;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mv_tokenrefresh(inds=mv_registerclient';
put ',outds=mv_tokenrefresh';
put ',client_id=someclient';
put ',client_secret=somesecret';
put ',grant_type=authorization_code';
put ',user=';
put ',pass=';
put ',access_token_var=ACCESS_TOKEN';
put ',refresh_token_var=REFRESH_TOKEN';
put ');';
put '%global &access_token_var &refresh_token_var;';
put 'options noquotelenmax;';
put '%local fref1 libref;';
put '/* test the validity of inputs */';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(';
put 'iftrue=(&grant_type=password and (%str(&user)=%str() or %str(&pass)=%str()))';
put ',mac=&sysmacroname';
put ',msg=%str(username / password required)';
put ')';
put '%if %mf_existds(&inds) %then %do;';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''client_id'',client_id,''l'');';
put 'call symputx(''client_secret'',client_secret,''l'');';
put 'call symputx("&refresh_token_var",&refresh_token_var,''l'');';
put 'run;';
put '%end;';
put '%mp_abort(iftrue=(%str(&client_id)=%str() or %str(&client_secret)=%str())';
put ',mac=&sysmacroname';
put ',msg=%str(client / secret must both be provided)';
put ')';
put '/**';
put '* Request access token';
put '*/';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%let fref1=%mf_getuniquefileref();';
put 'proc http method=''POST''';
put 'in="grant_type=refresh_token%nrstr(&)refresh_token=&&&refresh_token_var"';
put 'out=&fref1';
put 'url="&base_uri/SASLogon/oauth/token"';
put 'WEBUSERNAME="&client_id"';
put 'WEBPASSWORD="&client_secret"';
put 'AUTH_BASIC;';
put 'headers "Accept"="application/json"';
put '"Content-Type"="application/x-www-form-urlencoded";';
put 'run;';
put '/*data _null_;infile &fref1;input;put _infile_;run;*/';
put '/**';
put '* Extract access / refresh tokens';
put '*/';
put '%let libref=%mf_getuniquelibref();';
put 'libname &libref JSON fileref=&fref1;';
put '/* extract the token */';
put 'data &outds;';
put 'set &libref..root;';
put 'call symputx("&access_token_var",access_token);';
put 'call symputx("&refresh_token_var",refresh_token);';
put 'run;';
put 'libname &libref clear;';
put 'filename &fref1 clear;';
put '%mend mv_tokenrefresh;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file tokenauth.sas';
put '@brief Get initial tokens using an auth code - DEPRECATED';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li mv_tokenrefresh.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%webout(FETCH)';
put 'data _null_;';
put 'set work.fromjs;';
put 'call symputx(''viyasettings'',viyasettings);';
put 'call symputx(''client_id'',client_id);';
put 'call symputx(''refresh_token'',refresh_token);';
put 'run;';
put 'data authme;';
put '/* get client info from special location */';
put 'infile "&viyasettings" dsd;';
put 'input client_secret:$100.;';
put 'client_id="&client_id";';
put 'refresh_token="&refresh_token";';
put 'run;';
put '/* get tokens */';
put '%mv_tokenrefresh(inds=authme, outds=fromSAS(keep=refresh_token access_token))';
put '/* send back to frontend */';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=validatefilter;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_islibds(libds';
put ')/*/STORE SOURCE*/;';
put '%local regex;';
put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));';
put '%sysfunc(prxmatch(®ex,&libds))';
put '%mend mf_islibds;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '%macro mp_md5(cvars=,nvars=);';
put '%local i var sep;';
put 'put(md5(';
put '%do i=1 %to %sysfunc(countw(&cvars));';
put '%let var=%scan(&cvars,&i,%str( ));';
put '&sep put(md5(trim(&var)),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '%do i=1 %to %sysfunc(countw(&nvars));';
put '%let var=%scan(&nvars,&i,%str( ));';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '),$hex32.)';
put '%mend mp_md5;';
put '%macro mp_hashdataset(';
put 'libds,';
put 'outds=work._data_,';
put 'salt=,';
put 'iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local keyvar /* roll up the md5 */';
put 'prevkeyvar /* retain prev record md5 */';
put 'lastvar /* last var in input ds */';
put 'cvars nvars;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '/* avoid naming conflict for hash key vars */';
put '%let keyvar=%mf_getuniquename();';
put '%let prevkeyvar=%mf_getuniquename();';
put '%let lastvar=%mf_getuniquename();';
put '%if %mf_getattrn(&libds,NLOBS)=0 %then %do;';
put 'data &outds;';
put 'length hashkey $32;';
put 'hashkey=put(md5("&salt"),$hex32.);';
put 'output;';
put 'stop;';
put 'run;';
put '%put &sysmacroname: Dataset &libds is empty, or is not a dataset;';
put '%put &sysmacroname: hashkey of &outds is based on salt (&salt) only;';
put '%end;';
put '%else %if %mf_getattrn(&libds,NLOBS)<0 %then %do;';
put '%put %str(ERR)OR: Dataset &libds is not a dataset;';
put '%end;';
put '%else %do;';
put 'data &outds(rename=(&keyvar=hashkey) keep=&keyvar)';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'length &prevkeyvar &keyvar $32;';
put 'retain &prevkeyvar;';
put 'if _n_=1 then &prevkeyvar=put(md5("&salt"),$hex32.);';
put 'set &libds end=&lastvar;';
put '/* hash should include previous row */';
put '&keyvar=%mp_md5(';
put 'cvars=%mf_getvarlist(&libds,typefilter=C) &prevkeyvar,';
put 'nvars=%mf_getvarlist(&libds,typefilter=N)';
put ');';
put '&prevkeyvar=&keyvar;';
put 'if &lastvar then output;';
put 'run;';
put '%end;';
put '%mend mp_hashdataset;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '%macro mp_filterstore(libds=,';
put 'queryds=work.filterquery,';
put 'filter_summary=PERM.FILTER_SUMMARY,';
put 'filter_detail=PERM.FILTER_DETAIL,';
put 'lock_table=PERM.LOCK_TABLE,';
put 'maxkeytable=PERM.MAXKEYTABLE,';
put 'outresult=work.result,';
put 'outquery=work.query,';
put 'mdebug=1';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;';
put '%let libds=%upcase(&libds);';
put '%let orig_libds=&libds;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc on macro entry)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid filter_summary value: &filter_summary)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid filter_detail value: &filter_detail)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid lock_table value: &lock_table)';
put ')';
put '/**';
put '* validate query';
put '* use format catalog export, if a format';
put '*/';
put '%if "%substr(&libds,%length(&libds)-2,3)"="-FC" %then %do;';
put '%let libds=%scan(&libds,1,-); /* chop off -FC extension */';
put '%let ds0=%mf_getuniquename(prefix=fmtds_);';
put '%let libds=&ds0;';
put '/*';
put 'There is no need to export the entire format catalog here - the validations';
put 'are done against the data model, not the data values. So we can simply';
put 'hardcode the structure based on the cntlout dataset.';
put '*/';
put '%mddl_sas_cntlout(libds=&ds0)';
put '%end;';
put '%mp_filtercheck(&queryds,targetds=&libds,abort=YES)';
put '/* hash the result */';
put '%let ds1=%mf_getuniquename(prefix=hashds);';
put '%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)';
put '%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'putlog "filter_hash=&filter_hash";';
put 'set &ds1;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '/* check if data already exists for this hash */';
put 'data &outresult;';
put 'set &filter_summary;';
put 'where filter_hash="&filter_hash";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc after hash check)';
put ')';
put '%mp_abort(iftrue= ("&filter_hash "=" ")';
put ',mac=mp_filterstore';
put ',msg=%str(problem with filter_hash generation)';
put ')';
put '%if %mf_nobs(&outresult)=0 %then %do;';
put '/* first update summary table */';
put '%let ds3=%mf_getuniquename(prefix=filtersum);';
put 'data work.&ds3;';
put 'if 0 then set &filter_summary;';
put 'filter_table="&orig_libds";';
put 'filter_hash="&filter_hash";';
put 'PROCESSED_DTTM=%sysfunc(datetime());';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=%scan(&filter_summary,1,.)';
put ',ds=%scan(&filter_summary,2,.)';
put ',ref=MP_FILTERSTORE summary update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%let ds4=%mf_getuniquename(prefix=filtersumappend);';
put '%mp_retainedkey(';
put 'base_lib=%scan(&filter_summary,1,.)';
put ',base_dsn=%scan(&filter_summary,2,.)';
put ',append_lib=work';
put ',append_dsn=&ds3';
put ',retained_key=filter_rk';
put ',business_key=filter_hash';
put ',maxkeytable=&maxkeytable';
put ',locktable=&lock_table';
put ',outds=work.&ds4';
put ')';
put 'proc append base=&filter_summary data=&ds4;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=%scan(&filter_summary,1,.)';
put ',ds=%scan(&filter_summary,2,.)';
put ',ref=MP_FILTERSTORE summary update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%if &syscc ne 0 %then %do;';
put 'data _null_;';
put 'set &ds4;';
put 'putlog (_all_)(=);';
put 'run;';
put '%goto err;';
put '%end;';
put 'data &outresult;';
put 'set &filter_summary;';
put 'where filter_hash="&filter_hash";';
put 'run;';
put '/* Next, update detail table */';
put '%let ds2=%mf_getuniquename(prefix=filterdetail);';
put 'data &ds2;';
put 'if 0 then set &filter_detail;';
put 'set &queryds;';
put 'format filter_hash $hex32. filter_line 8.;';
put 'filter_hash="&filter_hash";';
put 'filter_line=_n_;';
put 'PROCESSED_DTTM=%sysfunc(datetime());';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=%scan(&filter_detail,1,.)';
put ',ds=%scan(&filter_detail,2,.)';
put ',ref=MP_FILTERSTORE update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put 'proc append base=&filter_detail data=&ds2;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=%scan(&filter_detail,1,.)';
put ',ds=%scan(&filter_detail,2,.)';
put ',ref=MP_FILTERSTORE detail update &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%if &syscc ne 0 %then %do;';
put 'data _null_;';
put 'set &ds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%goto err;';
put '%end;';
put '%end;';
put 'proc sort data=&filter_detail(where=(filter_hash="&filter_hash")) out=&outquery;';
put 'by filter_line;';
put 'run;';
put '%err:';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc on macro exit)';
put ')';
put '%mend mp_filterstore;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Validates a filter clause before it gets hashified, returns the RK';
put '@details Used to generate a FILTER_RK from an input query dataset.';
put 'Raw values are stored in dc.mpe_filtersource and the meta values are stored';
put 'in dc.mpe_filteranytable';
put ' Service Inputs
';
put ' IWANT
';
put '|FILTER_TABLE:$41.|';
put '|---|';
put '|DC258467.MPE_X_TEST|';
put ' FILTERQUERY
';
put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|';
put '|---|---|---|---|---|---|';
put '|AND|AND|1|SOME_BESTNUM|>|1|';
put '|AND|AND|1|SOME_TIME|=|77333|';
put ' Service Outputs
';
put ' result
';
put '@li FILTER_HASH';
put '@li FILTER_RK';
put '@li FILTER_TABLE';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getvalue.sas';
put '@li mp_filterstore.sas';
put '@li removecolsfromwork.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let ds=%upcase(%mf_getvalue(work.iwant,filter_table));';
put '%dc_assignlib(WRITE,%scan(&ds,1,.))';
put '%mp_filterstore(';
put 'libds=&ds,';
put 'queryds=work.filterquery,';
put 'filter_summary=&dc_libref..mpe_filteranytable,';
put 'filter_detail=&dc_libref..mpe_filtersource,';
put 'lock_table=&dc_libref..mpe_lockanytable,';
put 'maxkeytable=&dc_libref..mpe_maxkeyvalues,';
put 'outresult=work.result,';
put 'outquery=work.query, /* not used */';
put 'mdebug=1';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put 'proc sql;';
put 'alter table work.result drop PROCESSED_DTTM;';
put '%webout(OPEN)';
put '%webout(OBJ,result)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds';
put ',mode=VIEW';
put ',groupds=work.groups';
put ',clsds=work.clsview';
put ',outds=CLSVIEW';
put ',outmeta=work.cls_rules';
put ');';
put '%local col_list is_admin;';
put '/* filter for the appropriate rules */';
put 'proc sql;';
put 'create table &outmeta as';
put 'select CLS_VARIABLE_NM,';
put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE';
put 'from &clsds';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("&mode",''ALL'')';
put 'and CLS_ACTIVE=1';
put '%if &mode=VIEW %then %do;';
put 'and CLS_HIDE ne 1';
put '%end;';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)';
put 'and CLS_LIBREF="%upcase(&tgtlib)"';
put 'and CLS_TABLE="%upcase(&tgtds)"';
put 'group by CLS_VARIABLE_NM;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";';
put '%put &sysmacroname: &=is_admin;';
put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;';
put '%put &sysmacroname: no CLS rules to apply;';
put '%put &=is_admin;';
put '/* copy using append for speed */';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '/* ensure CLS_RULES is empty in case of admin */';
put 'data &outmeta;';
put 'set &outmeta;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &mode=VIEW %then %do;';
put '/* just send back the relevant columns */';
put '%let col_list=0;';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=0;';
put '%if &col_list=0 %then %do;';
put '/*';
put 'We have columns that are set to CLS_HIDE=1 but we do not have any to';
put 'explicitly show. Therefore we assume all columns are to be shown except';
put 'those that are explicitly hidden.';
put '*/';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=1;';
put 'data &outds;';
put 'set &inds;';
put 'drop &col_list;';
put 'run;';
put '%end;';
put '%else %do;';
put 'data &outds;';
put 'set &inds;';
put 'keep &col_list;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &mode=EDIT %then %do;';
put '/*';
put 'In this case we pass all columns and the frontend will filter out the';
put 'ones that are not allowed to be edited.';
put '*/';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: invalid mode - &mode!;';
put '%abort;';
put '%end;';
put '%mend mpe_columnlevelsecurity;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro dc_createdataset(libds=mm_getlibs);';
put 'data viewdata;';
put 'var1=''Table'';';
put 'var2="&libds";';
put 'var3="does not exist!";';
put 'run;';
put '%mend dc_createdataset;';
put '%macro dc_gettableid(libref=';
put ',ds=';
put ',outds=);';
put 'data &outds;';
put 'tableuri='''';';
put 'tablename="&ds";';
put 'run;';
put '%mend dc_gettableid;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_dsmeta(libds,outds=work.dsmeta);';
put '%local ds1 ds2;';
put 'data;run; %let ds1=&syslast;';
put 'data;run; %let ds2=&syslast;';
put '/* setup the ODS capture */';
put 'ods output attributes=&ds1 enginehost=&ds2;';
put '/* export the metadata */';
put 'proc contents data=&libds;';
put 'run;';
put '/* load it into a single table */';
put 'data &outds (keep=ods_table name value);';
put 'length ods_table $10 name label2 label1 label $100';
put 'value cvalue cvalue1 cvalue2 $1000';
put 'nvalue nvalue1 nvalue2 8;';
put 'if _n_=1 then call missing (of _all_);';
put '* putlog (_all_)(=);';
put 'set &ds1 (in=atrs) &ds2 (in=eng);';
put 'if atrs then do;';
put 'ods_table=''ATTRIBUTES'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'if label2 ne '''' then do;';
put 'name=label2;';
put 'value=coalescec(cvalue2,put(nvalue2,best.));';
put 'output;';
put 'end;';
put 'end;';
put 'else if eng then do;';
put 'ods_table=''ENGINEHOST'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &ds1, &ds2;';
put '%mend mp_dsmeta;';
put '%macro mp_getcols(ds, outds=work.cols);';
put '%local dropds;';
put 'proc contents noprint data=&ds';
put 'out=_data_ (keep=name type length label varnum format:);';
put 'run;';
put '%let dropds=&syslast;';
put 'data &outds(keep=name type length varnum format label ddtype fmtname);';
put 'set &dropds(rename=(format=fmtname type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if fmtname='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else format=cats(fmtname,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if fmtname='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');';
put 'else format=cats(fmtname,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' or format=:''E8601DT'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY''';
put 'then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put 'proc sql;';
put 'drop table &dropds;';
put '%mend mp_getcols;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getpk(';
put 'lib,';
put 'ds=0,';
put 'outds=work.mp_getpk,';
put 'mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks';
put 'pkfromindex;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let engine=%mf_getengine(&lib);';
put '%let schema=%mf_getschema(&lib);';
put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);';
put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);';
put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);';
put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);';
put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);';
put '%let sum=%mf_getuniquename(prefix=getpk_sum);';
put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);';
put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);';
put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);';
put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put 'proc sql;';
put 'create table &ds1 as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.&ds2 as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table &ds3 as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.&ds1 a';
put 'left join work.&ds2 b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%if &ds = 0 %then %let dsn=;';
put '/* get all constraints, in constraint order*/';
put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table &pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.&ds2';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table &sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table &pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from &sum a';
put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table &pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data &finalpks;';
put 'set &pkdefault &pk4sure &pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table &ds3 as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.&ds1 a';
put 'left join work.&finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.&tabs1 as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data &tabs2;';
put 'set &ds3;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn constraint_order;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table &outds as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.&tabs1 a';
put 'left join work.&tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getpk;';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mp_searchdata(lib=';
put ',ds=';
put ',string= /* the query will use a contains (?) operator */';
put ',numval= /* numeric must match exactly */';
put ',outloc=0';
put ',outlib=MPSEARCH';
put ',outobs=-1';
put ',filter_text=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local table_list table table_num table colnum col start_tm check_tm vars type';
put 'coltype;';
put '%put process began at %sysfunc(datetime(),datetime19.);';
put '%if &syscc ge 4 %then %do;';
put '%put %str(WAR)NING: SYSCC=&syscc on macro entry;';
put '%return;';
put '%end;';
put '%if &string = %then %let type=N;';
put '%else %let type=C;';
put '%if "&outloc"="0" %then %do;';
put '%let outloc=%sysfunc(pathname(work))/%mf_getuniquename();';
put '%end;';
put '%mf_mkdir(&outloc)';
put 'libname &outlib "&outloc";';
put '/* get the list of tables in the library */';
put 'proc sql noprint;';
put 'select distinct memname into: table_list separated by '' ''';
put 'from dictionary.tables';
put 'where upcase(libname)="%upcase(&lib)"';
put '%if &ds ne %then %do;';
put 'and upcase(memname)=%upcase("&ds")';
put '%end;';
put ';';
put '/* check that we have something to check */';
put '%if %length(&table_list)=0 %then %put library &lib contains no tables!;';
put '/* loop through each table */';
put '%else %do table_num=1 %to %sysfunc(countw(&table_list,%str( )));';
put '%let table=%scan(&table_list,&table_num,%str( ));';
put '%let vars=%mf_getvarlist(&lib..&table);';
put '%if %length(&vars)=0 %then %do;';
put '%put NO COLUMNS IN &lib..&table! This will be skipped.;';
put '%end;';
put '%else %do;';
put '%let check_tm=%sysfunc(datetime());';
put '/* prep input */';
put 'data &outlib..&table;';
put 'set &lib..&table;';
put 'where %unquote(&filter_text) and ( 0';
put '/* loop through columns */';
put '%do colnum=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let col=%scan(&vars,&colnum,%str( ));';
put '%let coltype=%mf_getvartype(&lib..&table,&col);';
put '%if &type=C and &coltype=C %then %do;';
put '/* if a char column, see if it contains the string */';
put 'or ("&col"n ? "&string")';
put '%end;';
put '%else %if &type=N and &coltype=N %then %do;';
put '/* if numeric match exactly */';
put 'or ("&col"n = &numval)';
put '%end;';
put '%end;';
put ');';
put '%if &outobs>-1 %then %do;';
put 'if _n_ > &outobs then stop;';
put '%end;';
put 'run;';
put '%put Search query for &table took';
put '%sysevalf(%sysfunc(datetime())-&check_tm) seconds;';
put '%if &syscc ne 0 %then %do;';
put '%put %str(ERR)ROR: SYSCC=&syscc when processing &lib..&table;';
put '%return;';
put '%end;';
put '%if %mf_nobs(&outlib..&table)=0 %then %do;';
put 'proc sql;';
put 'drop table &outlib..&table;';
put '%end;';
put '%end;';
put '%end;';
put '%put process finished at %sysfunc(datetime(),datetime19.);';
put '%mend mp_searchdata;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewdata.sas';
put '@brief Provide the raw view of the data';
put '@details Pass a LIBDS and FILTER_RK to return a dataset for viewing.';
put 'VIEW datasets include all columns / rows (unlike EDIT, which are filtered';
put 'for current records and don''t include the SCD2 etc cols).';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|FILTER_RK:$5.|SEARCHTYPE:$4|SEARCHVAL:$1000';
put '|---|---|---|---';
put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|';
put ' Service Outputs
';
put ' cols
';
put '@li DDTYPE';
put '@li FORMAT';
put '@li LABEL';
put '@li LENGTH';
put '@li NAME';
put '@li TYPE';
put '@li VARNUM';
put ' sasparams
';
put '@li FILTER_TEXT';
put '@li NOBS';
put '@li PK_FIELDS - string seperated list of primary key fields, if they exist';
put '@li TABLENAME';
put '@li TABLEURI';
put '@li VARS';
put ' viewdata
';
put 'The raw data from the target table.';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_createdataset.sas';
put '@li dc_gettableid.sas';
put '@li mf_existds.sas';
put '@li mf_getvarcount.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_dsmeta.sas';
put '@li mp_getcols.sas';
put '@li mp_getpk.sas';
put '@li mp_jsonout.sas';
put '@li mp_searchdata.sas';
put '@li mp_validatecol.sas';
put '@li mpe_columnlevelsecurity.sas';
put '@li mpe_filtermaster.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* configure macvars */';
put '%global LIBDS FILTER_RK SEARCHVAL SEARCHTYPE FMT_IND;';
put '%let maxrows=250;';
put '/* avoid code injection */';
put '%let FMT_IND=0;';
put '%let SEARCHTYPE=;';
put '%let SEARCHVAL=;';
put '%let FILTER_RK=;';
put '%let LIBDS=;';
put '/**';
put '* Validate inputs';
put '*/';
put 'data work.intest;';
put 'length libds $41 filter_rk 8. searchval $100 searchtype $4;';
put 'set work.SASCONTROLTABLE;';
put '/* validate filter_rk */';
put 'if filter_rk le 0 then filter_rk=-1;';
put '/* check if the request is for a format catalog */';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''fmt_ind'',1);';
put 'end;';
put 'putlog (_all_)(=);';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put 'if searchtype in (''CHAR'',''NUM'') then do;';
put 'searchval=tranwrd(searchval,''%'','''');';
put 'searchval=tranwrd(searchval,''&'','''');';
put 'searchval=tranwrd(searchval,'';'','''');';
put 'searchval=tranwrd(searchval,''"'','''');';
put 'call symputx(''searchtype'',searchtype);';
put 'call symputx(''searchval'',searchval);';
put 'end;';
put 'else if searchtype not in ('''',''NONE'') then do;';
put 'putlog ''ERR'' ''OR: Invalid searchtype:'' searchtype;';
put 'stop;';
put 'end;';
put 'if is_libds=0 then do;';
put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''filter_rk'',filter_rk);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_verifymacvars(libds filter_rk fmt_ind)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem with macro inputs)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(Some err with service inputs)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/**';
put '* assign the Library';
put '*/';
put '%dc_assignlib(READ,%scan(&LIBDS,1,.))';
put '/* abort if looking for a format and the catalog doesn''t exist */';
put '%mp_abort(iftrue= (&fmt_ind=1 and %sysfunc(exist(&libds,CATALOG))=0)';
put ',mac=&_program..sas';
put ',msg=%str(Catalog &libds does not exist!)';
put ')';
put '/**';
put 'check if dataset can actually be opened - as library may exist but it may not';
put 'be possible to assign, and even if it can, the physical table may not exist';
put '**/';
put 'data _null_;';
put 'if &fmt_ind=0 then do;';
put 'dsid=open("&libds");';
put 'rc=close(dsid);';
put 'end;';
put 'else dsid=42;';
put 'call symputx(''existds'',dsid,''l'');';
put 'putlog ''dataset exists check:'' dsid;';
put 'run;';
put '/**';
put '* get the data';
put '*/';
put '%global dsobs;';
put '%let dsobs=0;';
put '%macro x();';
put '%if &existds>0 %then %do;';
put '%if &fmt_ind=1 %then %do;';
put '/* export format and point the libds to the output table from here on */';
put '%mp_cntlout(';
put 'libcat=&libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%let libds=WORK.FMTEXTRACT;';
put 'proc datasets lib=work noprint;';
put 'modify FMTEXTRACT;';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%end;';
put 'proc sql noprint;';
put 'select count(*) into: dsobs from &libds;';
put '%put preparing query;';
put '%mpe_filtermaster(VIEW,&libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter_rk,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%put printing generated filterquery:;';
put 'data _null_;';
put 'infile filtref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &searchtype=NONE or "%trim(&searchtype) " = " " %then %do;';
put '/* get row count */';
put 'filename rows temp;';
put 'data _null_;';
put 'file rows;';
put 'infile filtref end=eof;';
put 'input;';
put 'if _n_=1 then do;';
put 'put ''proc sql;'';';
put 'put "select count(*) into: dsobs from &libds where";';
put 'end;';
put 'put _infile_;';
put 'if eof then put '';'';';
put 'run;';
put 'data _null_;';
put 'infile rows;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%inc rows;';
put '/* send actual data, filtered and row-capped */';
put 'data work.viewdata;';
put 'set &libds;';
put 'where %inc filtref;;';
put 'if _n_>&maxrows then stop;';
put 'run;';
put '%if %mf_nobs(work.viewdata)=0 %then %do;';
put 'data work.viewdata;';
put '/* send empty row if empty table to help with hot rendering */';
put 'output;';
put 'set work.viewdata;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data work.vwsearch/view=work.vwsearch;';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put '%if %upcase(&searchtype)=CHAR %then %do;';
put '%mp_searchdata(lib=work';
put ',ds=vwsearch';
put ',string=%superq(searchval)';
put ',outobs=&maxrows';
put ')';
put '%end;';
put '%else %if %upcase(&searchtype)=NUM %then %do;';
put '%mp_searchdata(lib=work';
put ',ds=vwsearch';
put ',numval=%superq(searchval)';
put ',outobs=&maxrows';
put ')';
put '%end;';
put '%if %mf_existds(libds=MPSEARCH.vwsearch) %then %do;';
put '%let dsobs=%mf_nobs(MPSEARCH.vwsearch);';
put 'data viewdata;';
put 'set MPSEARCH.vwsearch;';
put 'if _n_<&maxrows;';
put 'run;';
put '%end;';
put '%else %do;';
put '%let dsobs=0;';
put 'data viewdata;';
put 'set &libds;';
put 'stop;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '/* physical table is not accessible so create from metatadata definition */';
put '%dc_createdataset(libds=&libds,outds=viewdata)';
put 'data viewData;';
put 'output;';
put 'set viewdata;';
put 'run;';
put '/* make filtref / work.query / work.groups to avoid downstream issues */';
put 'filename filtref temp;';
put 'data work.query;';
put 'file filtref;';
put 'x=0;';
put 'put x;';
put 'run;';
put 'data work.groups;';
put 'length groupuri groupname $32 groupdesc $128 ;';
put 'call missing (of _all_);';
put 'output;';
put 'stop;';
put 'run;';
put '%end;';
put '%mend x; %x()';
put '/* apply column level security */';
put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.viewdata';
put ',mode=VIEW';
put ',clsds=&mpelib..mpe_column_level_security';
put ',groupds=work.groups /* was created in mpe_filtermaster */';
put ',outds=work.viewdata2';
put ',outmeta=work.cls_rules';
put ')';
put '/* get table uri (if sas 9) to enable linking direct to lineage */';
put '%dc_gettableid(libref=%scan(&libds,1,.)';
put ',ds=%scan(&libds,2,.)';
put ',outds=work.parambase';
put ')';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'input;';
put 'length filter_text $32767;';
put 'retain filter_text;';
put 'filter_text=catx('' '',filter_text,_infile_);';
put 'if eof then do;';
put 'if cats(filter_text)=''1=1'' then filter_text='''';';
put 'call symputx(''filter_text'',filter_text);';
put 'end;';
put 'run;';
put '%mp_getpk(%scan(&libds,1,.), ds=%scan(&libds,2,.), outds=work.pk_fields)';
put '%let pk_fields=;';
put 'data _null_;';
put 'set work.pk_fields;';
put 'call symputx(''pk_fields'',pk_fields);';
put 'run;';
put 'data work.sasparams;';
put 'set work.parambase;';
put 'format FILTER_TEXT $32767.;';
put 'FILTER_TEXT=symget(''FILTER_TEXT'');';
put 'length PK_FIELDS $512;';
put 'PK_FIELDS=symget(''PK_FIELDS'');';
put 'nobs=&dsobs;';
put 'vars=%mf_getvarcount(viewdata);';
put 'maxrows=&maxrows;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mp_getcols(&libds, outds=cols)';
put '%mp_dsmeta(&libds, outds=dsmeta)';
put '%webout(OPEN)';
put '%webout(OBJ,cls_rules)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,dsmeta)';
put '%webout(OBJ,query)';
put '%webout(OBJ,sasparams)';
put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewlibarray;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug';
put 'sasjs_tables;';
put '%local i tempds jsonengine;';
put '/* see https://github.com/sasjs/core/issues/41 */';
put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;';
put '%else %let jsonengine=DATASTEP;';
put '%if &action=FETCH %then %do;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '/* now read in the data */';
put '%do i=1 %to &_webin_file_count;';
put '%if &_webin_file_count=1 %then %do;';
put '%let _webin_fileref1=&_webin_fileref;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put 'data _null_;';
put 'infile &&_webin_fileref&i termstr=crlf;';
put 'input;';
put 'call symputx(''input_statement'',_infile_);';
put 'putlog "&&_webin_name&i input statement: " _infile_;';
put 'stop;';
put 'data &&_webin_name&i;';
put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';';
put 'input &input_statement;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put '%end;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* fix encoding */';
put 'OPTIONS NOBOMFILE;';
put '/**';
put '* check xengine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put 'data _null_;';
put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));';
put 'if xengine=''STREAM'' then do;';
put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");';
put 'end;';
put 'run;';
put '/* setup json */';
put 'data _null_;file &fref encoding=''utf-8'';';
put '%if %str(&_debug) ge 131 %then %do;';
put 'put ''>>weboutBEGIN<<'';';
put '%end;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '/* To avoid issues with _webout on EBI we use a temporary file */';
put 'filename _sjsref temp lrecl=131068;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* if debug mode, send back first XX records of each work table also */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put "}";';
put '%end;';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put "}";';
put 'run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file _sjsref mod encoding=''utf-8'';';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'put ",""SYSENCODING"" : ""&sysencoding"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}" @;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'put ''>>weboutEND<<'';';
put '%end;';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjsref lrecl=1 recfm=n;';
put 'file &fref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjsref clear;';
put '%end;';
put '%mend mm_webout;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewlibarray.sas';
put '@brief List the libraries for view access';
put '@details';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mm_webout.sas';
put '@li mf_existds.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let keepvars=libraryref libraryname;';
put 'data _null_;';
put 'length keepvars $32;';
put 'set %sysfunc(ifc(%mf_existds(iwant),iwant,_null_));';
put 'call symputx(''keepvars'',keepvars);';
put 'run;';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';';
put '%put securitygroupscount=&securitygroupscount;';
put '%put ALL_CNT=&ALL_CNT;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewlibs();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %do;';
put '%put user in admin group (scenario1=&scenario1);';
put '%return;';
put '%end;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put '%return;';
put '%end;';
put '/* scenario 3 - an *ALL* libref is listed */';
put '%if &all_cnt>0 %then %do;';
put '%put all_cnt=&all_cnt;';
put '%return;';
put '%end;';
put '/* scenario 4 - specific librefs listed */';
put '%if &securitygroupscount>0 %then %do;';
put '%put scenario 4;';
put '%put securitygroupscount=&securitygroupscount;';
put 'proc sql;';
put 'delete from mm_getLibs';
put 'where upcase(libraryref) not in (select upcase(libref) from matches);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic error!)';
put ')';
put '%mend mpestp_viewlibs;';
put '%mpestp_viewlibs()';
put '%global dc_viewlib_check;';
put '/**';
put '* deal with invalid and duplicate library definitions';
put '*/';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'by libraryref;';
put 'if symget(''dc_viewlib_check'')=''YES'' then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings';
put '*/';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sort data=mm_getlibs (keep=&keepvars);';
put 'by libraryname;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mm_webout(OPEN)';
put '%mm_webout(ARR, mm_getLibs)';
put '%mm_webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewlibs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewlibs.sas';
put '@brief List the libraries for view access';
put '@details';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt.lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';';
put '%put securitygroupscount=&securitygroupscount;';
put '%put ALL_CNT=&ALL_CNT;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewlibs();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %do;';
put '%put user in admin group (scenario1=&scenario1);';
put '%return;';
put '%end;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put '%return;';
put '%end;';
put '/* scenario 3 - an *ALL* libref is listed */';
put '%if &all_cnt>0 %then %do;';
put '%put all_cnt=&all_cnt;';
put '%return;';
put '%end;';
put '/* scenario 4 - specific librefs listed */';
put '%if &securitygroupscount>0 %then %do;';
put '%put scenario 4;';
put '%put securitygroupscount=&securitygroupscount;';
put 'proc sql;';
put 'delete from mm_getLibs';
put 'where upcase(libraryref) not in (select upcase(libref) from matches);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic err!)';
put ')';
put '%mend mpestp_viewlibs;';
put '%mpestp_viewlibs()';
put '%global dc_viewlib_check;';
put '/**';
put '* deal with invalid and duplicate library definitions';
put '*/';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'by libraryref;';
put 'if symget(''dc_viewlib_check'')=''YES'' then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings';
put '*/';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sort data=mm_getlibs out=saslibs;';
put 'by libraryname;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,saslibs)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewtables;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewtables.sas';
put '@brief List the tables and format catalogs the user can view';
put '@details Provide a library and get list of tables and catalogs. Also return';
put 'the libinfo details.';
put ' Service Inputs
';
put ' SASControlTable
';
put 'Just one input - MPLIB (the libref to get tables and info for)';
put '|MPLIB:$char8.|';
put '|---|';
put '|SOMELIB|';
put ' Service Outputs
';
put ' work.mptables
';
put '|MEMNAME:$char32.|';
put '|---|';
put '|DS1|';
put '|DS2|';
put '|DS3|';
put 'etc';
put ' work.libinfo
';
put 'If attributes are empty, they don''t need to be shown on screen.';
put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |';
put '|---|---|---|---|---|---|---|---|---|';
put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mpe_getvars.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global MPLIB;';
put '/* load parameters */';
put '%mpe_getvars(SASControlTable, SASControlTable)';
put '/**';
put '* assign the Library';
put '*/';
put '%put &=MPLIB;';
put '%dc_assignlib(READ,&MPLIB)';
put '%mp_abort(iftrue= (&syscc ne 0 )';
put ',mac=&_program..sas';
put ',msg=%str(Unable to assign &mplib library)';
put ')';
put '/**';
put '* get the tables';
put '*/';
put 'data members; /* empty table */';
put 'name='''';';
put 'memtype='''';';
put 'run;';
put 'ods output Members=Members;';
put 'proc datasets library=&mplib ;';
put 'quit;';
put '/* cannot avoid the proc datasets warn!ng for an empty lib */';
put '/* nolist means no output and nowarn has no effect */';
put '%put &=syscc;';
put 'data _null_;';
put 'if "&syscc" ne "0" then do;';
put 'putlog "Library &mplib is empty, setting syscc to zero";';
put 'call symputx(''syscc'',0);';
put 'end;';
put 'run;';
put '%put &=syscc;';
put 'proc sql;';
put 'create table work.mptables as';
put 'select distinct case when memtype=''CATALOG'' then cats(name,''-FC'')';
put 'else name end as memname';
put 'from members;';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'where also libref in (''*ALL*'',"%upcase(&mplib)");';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches';
put 'where libref=''*ALL*''';
put 'or (libref="&mplib" and dsn=''*ALL*'');';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewtables();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %return;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %return;';
put '/* scenario 3 - an *ALL* libref or DSN is listed */';
put '%if &all_cnt>0 %then %return;';
put '/* scenario 4 - specific tables listed */';
put '%if &securitygroupscount>0 %then %do;';
put 'proc sql;';
put 'delete from mptables';
put 'where upcase(memname) not in (select upcase(dsn) from sec);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put 'data mptables;';
put 'set mptables;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic error!)';
put ')';
put '%mend mpestp_viewtables;';
put '%mpestp_viewtables()';
put '/* get libinfo */';
put 'proc sql;';
put 'create table work.libinfo as';
put 'select a.engine,';
put 'a.libname,';
put 'a.paths,';
put 'a.perms,';
put 'a.owners,';
put 'a.schemas,';
put 'a.libid,';
put 'coalesce(b.libsize,0) as libsize,';
put 'coalesce(b.table_cnt,0) as table_cnt';
put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.libref=b.libref';
put 'where a.libref="&MPLIB";';
put '%webout(OPEN)';
put '%webout(OBJ,mptables)';
put '%webout(OBJ,libinfo)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/validations;
%let service=columns_in_libds;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for table columns';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Inputs
';
put ' work.sourcerow
';
put 'Has source table structure.';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getuniquename.sas';
put '@li mp_abort.sas';
put '@li mp_validatecol.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlibds=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlibds=%mf_getuniquename();';
put '%let var_is_libds=%mf_getuniquename();';
put 'data _null_;';
put 'length xl_libref base_lib select_lib rls_libref cls_libref libref $8';
put 'xl_table base_ds select_ds rls_table cls_table dsn $32;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.source_row;';
put '&varlibds=symget(''libds'');';
put 'if &varlibds="&mpelib..MPE_EXCEL_CONFIG"';
put 'then &vartgtlibds=cats(xl_libref,''.'',xl_table);';
put 'else if &varlibds="&mpelib..MPE_VALIDATIONS"';
put 'then &vartgtlibds=cats(BASE_LIB,''.'',BASE_DS);';
put 'else if &varlibds="&mpelib..MPE_SELECTBOX"';
put 'then &vartgtlibds=cats(select_lib,''.'',select_ds);';
put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"';
put 'then &vartgtlibds=cats(RLS_LIBREF,''.'',RLS_TABLE);';
put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"';
put 'then &vartgtlibds=cats(CLS_LIBREF,''.'',CLS_TABLE);';
put 'else if &varlibds="&mpelib..MPE_TABLES"';
put 'then &vartgtlibds=cats(LIBREF,''.'',DSN);';
put '/* validate libds */';
put '%mp_validatecol(&vartgtlibds,LIBDS,&var_is_libds)';
put 'if &var_is_libds=1 then call symputx(''tgtlibds'',&vartgtlibds);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlibds" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Unable to extract libds vars from &libds inputs for &variable_nm)';
put ')';
put '%dc_assignlib(READ,%scan(&tgtlibds,1,.))';
put 'proc contents noprint data=&tgtlibds';
put 'out=work.DYNAMIC_VALUES (keep=name rename=(name=display_value) );';
put 'run;';
put 'data work.DYNAMIC_VALUES;';
put 'set work.DYNAMIC_VALUES;';
put 'raw_value=upcase(display_value);';
put 'format raw_value;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=libraries_all;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct libraryname as display_value,';
put 'upcase(libraryref) as raw_value';
put 'from work.mm_getLibs';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=libraries_editable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for editable libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put '**/';
put '/* send back the raw and formatted values */';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct libref as display_value,';
put 'upcase(libref) as raw_value';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. < tx_to';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_alerts.alert_lib;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief fetch extended values for alert_lib';
put '@details Fetches libraries from mpe_tables, creates extended values for';
put 'alert_ds, and marks "*ALL*" as the forced (default) value.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put 'The FORCED_VALUE column can be used to force an extended value to be selected';
put 'by default when a particular value is chosen.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|';
put '|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|1|DISCOUNT_RT|"40%"|N|0.4||0|';
put '|1|DISCOUNT_RT|"30%"|N|0.3||1|';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|2|DISCOUNT_RT|"40%"|N|0.4||1|';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '%mp_abort(iftrue= ("%upcase(&libds)" ne "&DC_LIBREF..MPE_ALERTS" )';
put ',mac=&_program';
put ',msg=%str(';
put 'Invalid validation, expected MPE_ALERTS.ALERT_LIB, got %superq(libds)';
put ')';
put ')';
put 'proc sql;';
put 'create table work.source as';
put 'select libref,dsn';
put 'from &DC_LIBREF..MPE_TABLES';
put 'where tx_to > &dc_dttmtfmt.';
put 'order by 1,2;';
put 'data work.DYNAMIC_VALUES (keep=display_index raw_value display_value);';
put 'set work.source end=last;';
put 'by libref;';
put 'if last.libref then do;';
put 'display_index+1;';
put 'raw_value=libref;';
put 'display_value=libref;';
put 'output;';
put 'end;';
put 'if last then do;';
put 'display_index+1;';
put 'raw_value=''*ALL*'';';
put 'display_value=''*ALL*'';';
put 'output;';
put 'end;';
put 'run;';
put 'data work.dynamic_extended_values(keep=display_index extra_col_name display_type';
put 'display_value RAW_VALUE_CHAR raw_value_num forced_value);';
put 'set work.source end=last;';
put 'by libref dsn;';
put 'retain extra_col_name ''ALERT_DS'';';
put 'retain display_type ''C'';';
put 'retain raw_value_num .;';
put 'raw_value_char=dsn;';
put 'display_value=dsn;';
put 'forced_value=0;';
put 'if first.libref then display_index+1;';
put 'if last.libref then do;';
put 'display_value=''*ALL*'';';
put 'raw_value_char=''*ALL*'';';
put 'forced_value=1;';
put 'output;';
put 'end;';
put 'else output;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_tables.dsn;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief fetch extended values for DSN';
put '@details Fetches datasets in a library, and ALSO fetches a list of numeric';
put 'vars for each dataset for use in adjacent columns (such as VAR_PROCESSED,';
put 'TX_TO etc).';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put 'The FORCED_VALUE column can be used to force an extended value to be selected';
put 'by default when a particular value is chosen.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|';
put '|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|1|DISCOUNT_RT|"40%"|N|0.4||0|';
put '|1|DISCOUNT_RT|"30%"|N|0.3||1|';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|2|DISCOUNT_RT|"40%"|N|0.4||1|';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlib=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlib=%mf_getuniquename();';
put '%let var_is_lib=%mf_getuniquename();';
put 'data _null_;';
put 'length &varlibds $41 &vartgtlib $8;';
put 'set work.source_row;';
put '&varlibds=upcase(symget(''libds''));';
put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;';
put 'else putlog "something unexpected happened";';
put '/* validate name */';
put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);';
put 'call symputx(''vartgtlib'',&vartgtlib);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlib" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Invalid library - %superq(vartgtlib))';
put ',errds=work.dc_error_response';
put ')';
put '%dc_assignlib(READ,&tgtlib)';
put 'proc sql;';
put 'create table work.source as';
put 'select upcase(memname) as memname';
put ',upcase(name) as name';
put ',type';
put 'from dictionary.columns';
put 'where libname="&TGTLIB"';
put 'and memtype=''DATA'';';
put 'create table work.members as';
put 'select distinct memname as display_value';
put 'from work.source;';
put 'data work.DYNAMIC_VALUES;';
put 'set work.members;';
put 'raw_value=display_value;';
put 'display_index=_n_;';
put 'run;';
put 'proc sql;';
put 'create table work.dynamic_extended_values as';
put 'select a.display_index';
put ',b.name as display_value';
put ',"C" as display_type';
put ',b.name as RAW_VALUE_CHAR';
put ',. as RAW_VALUE_NUM';
put 'from work.dynamic_values a';
put 'left join work.source b';
put 'on a.display_value=b.memname';
put 'where b.type=''num'';';
put 'data work.dynamic_extended_values;';
put 'set work.DYNAMIC_EXTENDED_VALUES;';
put 'extra_col_name=''VAR_PROCESSED'';output;';
put 'extra_col_name=''VAR_TXFROM'';output;';
put 'extra_col_name=''VAR_TXTO'';output;';
put 'extra_col_name=''VAR_BUSFROM'';output;';
put 'extra_col_name=''VAR_BUSTO'';output;';
put 'run;';
put '/* set some force flags */';
put 'data work.dynamic_extended_values;';
put 'set work.DYNAMIC_EXTENDED_VALUES;';
put 'forced_value=0;';
put 'if extra_col_name=''VAR_TXFROM'' & raw_value_char=''TX_FROM'' then forced_value=1;';
put 'if extra_col_name=''VAR_TXTO'' & raw_value_char=''TX_TO'' then forced_value=1;';
put 'run;';
put 'proc sort;';
put 'by extra_col_name display_index;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_x_test.some_num;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put '|DISPLAY_VALUE:$|RAW_VALUE:??|';
put '|---|---|';
put '|$44.00|44|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct cats(some_num) as display_value,';
put 'some_num as raw_value';
put 'from &libds';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sas_groups;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroups(access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroups';
put ');';
put '%local oauth_bearer base_uri fname1 libref1;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '/* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getgroups;';
put '%macro dc_getgroups(outds=mm_getgroups);';
put '%mv_getgroups(outds=&outds)';
put 'proc sort';
put 'data=&outds(rename=(id=groupuri name=groupname description=groupdesc))';
put 'out=&outds (keep=groupuri groupname groupdesc);';
put 'by groupname;';
put 'run;';
put '%mend dc_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief validating the mpe_security.sas_group column';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_getgroups.sas';
put '**/';
put '%dc_getgroups(outds=groups)';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct groupname as display_value,';
put 'groupname as raw_value';
put 'from work.groups';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tables_all;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for tables in a library';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlib=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlib=%mf_getuniquename();';
put '%let var_is_lib=%mf_getuniquename();';
put 'data _null_;';
put 'length &varlibds $41 &vartgtlib $8 libref $8 rls_libref $8;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.source_row;';
put '&varlibds=upcase(symget(''libds''));';
put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;';
put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"';
put 'then &vartgtlib=RLS_LIBREF;';
put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"';
put 'then &vartgtlib=CLS_LIBREF;';
put '/* validate name */';
put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);';
put 'call symputx(''vartgtlib'',&vartgtlib);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlib" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Invalid library - %superq(vartgtlib))';
put ',errds=work.dc_error_response';
put ')';
put '%dc_assignlib(READ,&tgtlib)';
put 'data members; /* empty table */';
put 'name='' '';';
put 'run;';
put 'ods output Members=Members;';
put 'proc datasets library=&tgtlib ;';
put 'run;';
put '/* send back the raw and formatted values */';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct name as display_value,';
put 'upcase(name) as raw_value';
put 'from work.members';
put 'where MemType=''DATA''';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tables_editable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for editable libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Inputs
';
put ' work.source_row
';
put '|libref:$8|';
put '|somelib|';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5|` `|';
put '|1|DISCOUNT_RT|"40%"|N|0.4|` `|';
put '|1|DISCOUNT_RT|"30%"|N|0.3|` `|';
put '|1|CURRENCY_SYMBOL|"GBP"|C|` `|"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C|` `|"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5|` `|';
put '|2|DISCOUNT_RT|"40%"|N|0.4|` `|';
put '|2|CURRENCY_SYMBOL|"EUR"|C|` `|"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C|` `|"HKD"|';
put '**/';
put '/* send back the raw and formatted values */';
put 'data _null_;';
put 'var=symget(''variable_nm'');';
put 'libds=symget(''libds'');';
put 'if libds="&mpelib..MPE_EXCEL_CONFIG" and var=''XL_TABLE'' then do;';
put 'call symputx(''srccol'',''XL_LIBREF'');';
put 'end;';
put 'else call symputx(''srccol'',''libref'');';
put 'run;';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct dsn as display_value,';
put 'upcase(dsn) as raw_value';
put 'from &mpelib..mpe_tables';
put '(where=(&dc_dttmtfmt. < tx_to))';
put 'where libref in (select &srccol from work.source_row)';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/viya_users;
%let service=usergroupsbymember;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usergroupsbymember.sas';
put '@brief List the groups a member is in';
put '@details Runs without \%mpeinit() - this enables the dropdown to be populated';
put 'during configuration, when the settings service does not yet exist.';
put ' SAS Macros
';
put '@li mv_getusergroups.sas';
put '@li mf_getuser.sas';
put '@version 3.4';
put '@author 4GL Apps Ltd';
put '**/';
put '%mv_getusergroups(%mf_getuser(),outds=groups)';
put 'proc sort data=groups(rename=(id=uri name=groupname providerid=groupdesc))';
put 'out=groups;';
put 'by groupname;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,groups)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=usermembers;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusers(outds=work.mv_getusers';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users?limit=10000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var"';
put '"Accept"="application/json";';
put '%end;';
put '%else %do;';
put 'headers "Accept"="application/json";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusers;';
put '%macro dc_getusers(outds=mm_getlibs);';
put '%mv_getusers(outds=&outds)';
put 'proc sort data=&outds(rename=(id=uri)) out=&outds(keep=uri name);';
put 'by name;';
put 'run;';
put '%mend dc_getusers;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usermembers.sas';
put '@brief List all SAS users';
put '@details Gets a list of all SAS users';
put ' SAS Macros
';
put '@li dc_getusers.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%dc_getusers(outds=users)';
put '%webout(OPEN)';
put '%webout(OBJ,users)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=usermembersbygroup;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroupmembers(group';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroupmembers';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups/&group/members?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: Group &group not found!!;';
put 'data &outds;';
put 'length id name $43;';
put 'call missing(of _all_);';
put 'run;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'length id name $43;';
put 'set &libref1..items;';
put 'run;';
put 'libname &libref1 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put '%mend mv_getgroupmembers;';
put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);';
put '%mv_getgroupmembers(%str(&group),outds=&outds)';
put 'data &outds ;';
put 'length membername $64;';
put 'set &outds(rename=(name=MemberName));';
put 'run;';
put '%mend dc_getgroupmembers;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usermembersbygroup.sas';
put '@brief List the members of a group';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@li dc_getgroupmembers.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'data _null_;';
put 'set iwant;';
put 'call symputx(''groupid'',groupid);';
put 'run;';
put '%dc_getgroupmembers(%str(&groupid),outds=sasMembers)';
put 'proc sort data=sasMembers;';
put 'by membername;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,sasMembers)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/web;
%let filename=favicon.ico;
filename filecode temp lrecl=96132;
data _null_;
file filecode;
put 'iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP'@;
put 'AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/'@;
put 'P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1'@;
put 'wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h'@;
put 'zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS'@;
put 'O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ'@;
put 'CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD'@;
put 'mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy'@;
put 'n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY'@;
put 'SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR'@;
put 'PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01'@;
put '6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10'@;
put '3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi'@;
put 'p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4'@;
put 'nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy'@;
put 'Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj'@;
put 'Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0'@;
put 'N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv'@;
put 'Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA'@;
put 'n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y'@;
put 'Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp'@;
put 'b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB'@;
put 'VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ'@;
put 'eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ'@;
put 'AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB'@;
put 'TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z'@;
put 'UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg'@;
put 'ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p'@;
put 'qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe'@;
put 'EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN'@;
put 'TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS'@;
put 'Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu'@;
put '9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN'@;
put 'VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p'@;
put 'G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs'@;
put 'InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg'@;
put 'DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa'@;
put 'K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH'@;
put 'cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM'@;
put 'RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W'@;
put 'jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH'@;
put 'NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy'@;
put 'F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB'@;
put 'QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD'@;
put 'bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S'@;
put 'AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A'@;
put '3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc'@;
put 'uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN'@;
put 'Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B'@;
put 'CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm'@;
put '7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG'@;
put 'bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh'@;
put '3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV'@;
put 'ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL'@;
put 'LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg'@;
put 'a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp'@;
put 'P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp'@;
put 'QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5'@;
put 'RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh'@;
put 'KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu'@;
put '9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3'@;
put 't4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ'@;
put 'APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s'@;
put 'fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY'@;
put 'FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH'@;
put 'UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB'@;
put 'GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4'@;
put 'ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+'@;
put 'Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp'@;
put 'PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM'@;
put 'sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ'@;
put 'QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s'@;
put 'Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al'@;
put 'ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ'@;
put 'RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP'@;
put 'qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW'@;
put 'xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d'@;
put 'k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b'@;
put 'M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL'@;
put 'bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW'@;
put '/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm'@;
put 'LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl'@;
put 'YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v'@;
put 'iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf'@;
put 'az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1'@;
put 'MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30'@;
put 'tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN'@;
put 'YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl'@;
put '91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD'@;
put '20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk'@;
put 'QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K'@;
put 'LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5'@;
put 'kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt'@;
put 'gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9'@;
put 'bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX'@;
put 'C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7'@;
put 'BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw'@;
put 'cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM'@;
put 'xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN'@;
put 'P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s'@;
put '3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt'@;
put 'zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX'@;
put 'sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t'@;
put 'SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr'@;
put '1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895'@;
put 'TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn'@;
put 'vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz'@;
put 'vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx'@;
put 'hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy'@;
put 'OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb'@;
put '1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0'@;
put 'wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ'@;
put 'jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2'@;
put 'I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH'@;
put '2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5'@;
put 'JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt'@;
put 'urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ'@;
put 'Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ'@;
put 'yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w'@;
put 'JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ'@;
put 'oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537'@;
put 'XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q'@;
put 'XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6'@;
put '13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK'@;
put 'RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H'@;
put 'KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV'@;
put 'HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA'@;
put 'i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj'@;
put 'BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2'@;
put 'PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr'@;
put 'DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp'@;
put 'xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8'@;
put 'EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye'@;
put 'BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ'@;
put '2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk'@;
put 'T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA'@;
put 'Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK'@;
put '7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa'@;
put 'Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT'@;
put 'DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7'@;
put '9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv'@;
put 'wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ'@;
put 'AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG'@;
put 'x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6'@;
put 'VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj'@;
put 'O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI'@;
put 'fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca'@;
put '+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G'@;
put 'WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq'@;
put 'McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD'@;
put 'CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje'@;
put 'pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L'@;
put '/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re'@;
put 'qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm'@;
put 'y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583'@;
put 'P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p'@;
put 'QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE'@;
put 'ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh'@;
put '3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr'@;
put 'P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU'@;
put 'HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d'@;
put 'B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK'@;
put 'oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe'@;
put '+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu'@;
put '9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5'@;
put 'tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd'@;
put 'LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG'@;
put '7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP'@;
put '6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw'@;
put 'LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a'@;
put 'NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54'@;
put 'FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u'@;
put 'b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY'@;
put 'A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha'@;
put 'U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl'@;
put 'uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM'@;
put 'GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA'@;
put 'GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi'@;
put '0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+'@;
put '1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl'@;
put '+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN'@;
put 'alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp'@;
put 'JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL'@;
put 'kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy'@;
put 'uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm'@;
put 'UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw'@;
put '9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz'@;
put 'vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p'@;
put 'JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U'@;
put '70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95'@;
put 'EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24'@;
put '7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX'@;
put 'H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o'@;
put 'Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ'@;
put 'JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ'@;
put 'FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A'@;
put 'jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o'@;
put '+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf'@;
put '8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA'@;
put 'QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX'@;
put '09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC'@;
put '3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn'@;
put '/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS'@;
put 'RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt'@;
put '5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy'@;
put 'o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV'@;
put '8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E'@;
put '8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8'@;
put '8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0'@;
put 'VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK'@;
put '1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw'@;
put 'Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU'@;
put 'Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz'@;
put 'HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3'@;
put 'uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW'@;
put 'hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N'@;
put 'eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl'@;
put '4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0'@;
put 'xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP'@;
put '+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh'@;
put 'Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6'@;
put 'Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7'@;
put '7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw'@;
put 'PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze'@;
put 'hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK'@;
put 'qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz'@;
put '0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i'@;
put 'zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ'@;
put 'mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo'@;
put 'ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH'@;
put 'v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S'@;
put 'BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp'@;
put 'Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte'@;
put '/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku'@;
put '5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus'@;
put 'k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt'@;
put 'PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V'@;
put 'J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN'@;
put 'undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v'@;
put 'YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m'@;
put 'AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO'@;
put 'Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v'@;
put 'yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4'@;
put 'QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b'@;
put '1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl'@;
put '43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe'@;
put 'nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4'@;
put 'Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML'@;
put 'YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k'@;
put 'MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//'@;
put '/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO'@;
put '4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce'@;
put 'rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr'@;
put 'kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7'@;
put 'Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg'@;
put '4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp'@;
put 'mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f'@;
put '8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY'@;
put '9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo'@;
put 'soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx'@;
put '0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB'@;
put 'R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO'@;
put '/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn'@;
put 'RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i'@;
put 'wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y'@;
put 'FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR'@;
put 'G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm'@;
put 'k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj'@;
put 'HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW'@;
put 'cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm'@;
put '/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r'@;
put 'SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU'@;
put 'PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL'@;
put 'hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu'@;
put '1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV'@;
put '0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7'@;
put '9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ'@;
put 'P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm'@;
put 'SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3'@;
put 'z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL'@;
put 'bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV'@;
put 'jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV'@;
put 'WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI'@;
put 'G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH'@;
put 'i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e'@;
put 'v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt'@;
put 'AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum'@;
put 'wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1'@;
put '2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v'@;
put 'a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L'@;
put 'A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV'@;
put 'Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0'@;
put '9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T'@;
put 'Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO'@;
put 'bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw'@;
put '+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57'@;
put 'Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n'@;
put 'a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq'@;
put 'sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu'@;
put 'HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk'@;
put 'H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw'@;
put 'rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq'@;
put 'N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/'@;
put 'kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O'@;
put 'Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM'@;
put '8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ'@;
put 'wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM'@;
put '1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL'@;
put 'Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR'@;
put 'R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim'@;
put 'txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk'@;
put '7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj'@;
put '6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA'@;
put 'o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17'@;
put '9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm'@;
put 'UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8'@;
put '/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6'@;
put 'WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E'@;
put 'hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC'@;
put 'LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA'@;
put 'EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6'@;
put '0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy'@;
put 'oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC'@;
put 'GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/'@;
put 'Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz'@;
put 'jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w'@;
put '763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6'@;
put 'Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX'@;
put '3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb'@;
put 'YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ'@;
put 'vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7'@;
put 'yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz'@;
put '4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O'@;
put 'd1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL'@;
put 'AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc'@;
put 'PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g'@;
put 'IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI'@;
put 'aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9'@;
put '8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on'@;
put 'CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto'@;
put '59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx'@;
put 'P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb'@;
put 'nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP'@;
put 'M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K'@;
put '72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ'@;
put '8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE'@;
put 'gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n'@;
put 'M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d'@;
put 'eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF'@;
put 'IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ'@;
put 'TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn'@;
put 'aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X'@;
put 'iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L'@;
put '1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/'@;
put 'UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE'@;
put 'aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy'@;
put 'dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA'@;
put 'SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl'@;
put 'wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf'@;
put 'r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW'@;
put 'clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU'@;
put '3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd'@;
put 'nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2'@;
put 'EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v'@;
put 'ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul'@;
put 'JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm'@;
put '0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3'@;
put 'ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA'@;
put 'EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI'@;
put '9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T'@;
put 'JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ'@;
put 'M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn'@;
put 'LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb'@;
put 'fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H'@;
put 'DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH'@;
put 'VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m'@;
put 'qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b'@;
put 'hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X'@;
put '/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+'@;
put '/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu'@;
put 'PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS'@;
put 'qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN'@;
put 'V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p'@;
put 'pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt'@;
put 'D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y'@;
put 'dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU'@;
put 'aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a'@;
put 'ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd'@;
put 'undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk'@;
put 'WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd'@;
put 'RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw'@;
put 'a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz'@;
put '/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx'@;
put 'DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/'@;
put 'v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL'@;
put 'qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O'@;
put 'BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX'@;
put 'jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf'@;
put 'v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY'@;
put 'vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn'@;
put 'pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk'@;
put 'gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830'@;
put '8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2'@;
put 'STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs'@;
put 'qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL'@;
put 'vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV'@;
put 'AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3'@;
put 'Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84'@;
put 'rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li'@;
put 'lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT'@;
put '9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ'@;
put 'm+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le'@;
put 'p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl'@;
put 'OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0'@;
put 'GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi'@;
put 'Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh'@;
put 'RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef'@;
put 'HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w'@;
put '6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1'@;
put 'NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz'@;
put 'zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh'@;
put 'iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII'@;
put 'A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM'@;
put 'DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV'@;
put 'DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9'@;
put 'NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI'@;
put 'MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj'@;
put 'KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky'@;
put 'raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x'@;
put 'ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ'@;
put 'ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N'@;
put 'sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU'@;
put 'XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS'@;
put 'wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ'@;
put 'AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs'@;
put 'wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF'@;
put 'prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=index.html;
filename filecode temp lrecl=32767;
data _null_;
file filecode;
put 'PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4KICAgIDx0aXRsZT5EYXRhIENvbnRyb2xsZXI8L3RpdGxlPgogICAgPCEtLSA8YmFzZSBocmVmPSIvIj4gLS0+CgogICAgPCEtLSBtZXRhIHRhZ3MgLS0+CiAgICA8bWV0YSBuYW1lPSJk'@;
put 'ZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVy'@;
put 'ZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9ImltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8v'@;
put 'ZGVtby5kYXRhY29udHJvbGxlci5pbyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iRGF0YSBDb250cm9sbGVyIGZvciBTQVPCriIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9n'@;
put 'OmRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciLz4KCiAgICA8bWV0YSBu'@;
put 'YW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPgogICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhy'@;
put 'ZWY9ImltYWdlcy9mYXZpY29uLmljbyIvPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGVzLjU5ZGMxMTk0N2I4MzE0M2MuY3NzIj48L2hlYWQ+CgogIDwhLS0KICAgICMjIFNBU0pTIEFkYXB0ZXIgY29uZmlnIGRldGFpbHMgIyMKCiAgICAqIGFwcExvYzogVGhlIGxvY2F0'@;
put 'aW9uIGluIG1ldGFkYXRhIG9yIFNBUyBkcml2ZSB3aGVyZSBEQyB3aWxsIGJlIGRlcGxveWVkCiAgICAqIHNlcnZlclR5cGU6IGVpdGhlciBTQVM5LCBTQVNWSVlBIG9yIFNBU0pTCiAgICAqIGxvZ2luTWVjaGFuaXNtOiBVc2UgJ0RlZmF1bHQnIGZvciByZWd1bGFyICh1c2VyL3Bhc3MpIGxv'@;
put 'Z2lucywgb3IgJ1JlZGlyZWN0ZWQnIGZvciAyRkEvU1NPCiAgICAqIGRlYnVnOiBXaGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBvbiBzdGFydHVwCgogICAgIyMgVml5YSBvbmx5IHNldHRpbmdzICMjCiAgICAqIGFkbWluR3JvdXA6IFRoaXMgZ3JvdXAgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBh'@;
put 'Y2Nlc3MgKFZpeWEgT25seSkKICAgICogZGNQYXRoOiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBzdGFnaW5nIGFyZWEgKFZpeWEgb25seSkKICAgICogdXNlQ29tcHV0ZUFwaTogQ29ubmVjdGlvbiBtZXRob2QgKFZpeWEgb25seSkKICAgICogY29udGV4'@;
put 'dE5hbWU6IENvbXB1dGUgQ29udGV4dCAoVml5YSBvbmx5KQoKICAtLT4KCiAgPHNhc2pzIHNlcnZlcnVybD0iIiBhcHBsb2M9Ii9QdWJsaWMvYXBwL2RjIiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1'@;
put 'ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlv'@;
put 'biI+CiAgPC9zYXNqcz4KCiAgPGJvZHkgY2xhc3M9Im0tMCI+CiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSJydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InBvbHlmaWxscy44N2RiYmQzZmFhYmVkNTEz'@;
put 'LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJtYWluLmYwNzk2N2E4YzViYWM0YjIuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PC9ib2R5Pgo8L2h0bWw+Cg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=main.f07967a8c5bac4b2.js;
filename filecode temp lrecl=11449760;
data _null_;
file filecode;
put 'KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1sxNzldLHs3NDA5MjpmdW5jdGlvbihhdCl7YXQuZXhwb3J0cz1mdW5jdGlvbihJZSl7dmFyIEY9e307ZnVuY3Rpb24gYWUoeCl7aWYoRlt4XSlyZXR1cm4g'@;
put 'Rlt4XS5leHBvcnRzO3ZhciBtPUZbeF09e2k6eCxsOiExLGV4cG9ydHM6e319O3JldHVybiBJZVt4XS5jYWxsKG0uZXhwb3J0cyxtLG0uZXhwb3J0cyxhZSksbS5sPSEwLG0uZXhwb3J0c31yZXR1cm4gYWUubT1JZSxhZS5jPUYsYWUuZD1mdW5jdGlvbih4LG0sbGUpe2FlLm8oeCxtKXx8T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KHgsbSx7ZW51bWVyYWJsZTohMCxnZXQ6bGV9KX0sYWUucj1mdW5jdGlvbih4KXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoeCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KHgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxhZS50PWZ1bmN0aW9uKHgsbSl7aWYoMSZtJiYoeD1hZSh4KSksOCZtfHw0Jm0mJiJvYmplY3QiPT10eXBlb2YgeCYmeCYmeC5fX2VzTW9kdWxlKXJldHVybiB4O3ZhciBsZT1PYmplY3QuY3JlYXRlKG51'@;
put 'bGwpO2lmKGFlLnIobGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6eH0pLDImbSYmInN0cmluZyIhPXR5cGVvZiB4KWZvcih2YXIgTSBpbiB4KWFlLmQobGUsTSxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0uYmluZChudWxsLE0pKTty'@;
put 'ZXR1cm4gbGV9LGFlLm49ZnVuY3Rpb24oeCl7dmFyIG09eCYmeC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHguZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4geH07cmV0dXJuIGFlLmQobSwiYSIsbSksbX0sYWUubz1mdW5jdGlvbih4LG0pe3JldHVybiBPYmplY3QucHJvdG90eXBl'@;
put 'Lmhhc093blByb3BlcnR5LmNhbGwoeCxtKX0sYWUucD0iIixhZShhZS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5k'@;
put 'ICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIHg9YWUoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2pl'@;
put 'Y3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLG09e30sbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBNKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTS5zaW5nbGVJbnN0YW5jZXx8'@;
put 'KE0uc2luZ2xlSW5zdGFuY2U9bmV3IE0pLE0uc2luZ2xlSW5zdGFuY2V9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksTS5wcm90b3R5cGUudmFsaWRhdGVOYW1lPWZ1bmN0aW9uKE8pe2lmKDA9PT1PLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMg'@;
put 'bXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmchIik7aWYoL1xzLy50ZXN0KE8pKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IG5vdCBjb250YWluIGFueSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMhIik7cmV0dXJuITB9LE0ucHJvdG90eXBlLm5vcm1hbGl6ZVNoYXBl'@;
put 'TmFtZT1mdW5jdGlvbihPKXtyZXR1cm4gTy50b0xvd2VyQ2FzZSgpfSxNLnByb3RvdHlwZS5zZXRJY29uVGVtcGxhdGU9ZnVuY3Rpb24oTyxSKXt2YXIgej1SLnRyaW0oKTt0aGlzLnZhbGlkYXRlTmFtZShPKSYmKE89dGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoTyksbVtPXSYmZGVsZXRlIG1b'@;
put 'T10sbVtPXT16LHguU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLmVtaXRDaGFuZ2VzKE8seikpfSxNLnByb3RvdHlwZS5zZXRJY29uQWxpYXNlcz1mdW5jdGlvbihPLFIseil7Zm9yKHZhciBLPTAsST16O0s8SS5sZW5ndGg7SysrKXt2YXIgaz1JW0tdO3RoaXMudmFsaWRhdGVOYW1l'@;
put 'KGspJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoTyxrLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT1tSXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihPKXtpZigib2JqZWN0IiE9dHlwZW9mIE8pdGhyb3cgbmV3IEVycm9yKCdUaGUg'@;
put 'YXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiAic2hhcGUtdGVtcGxhdGUiIH0nKTtmb3IodmFyIFIgaW4gTylPLmhhc093blByb3BlcnR5KFIpJiZ0aGlzLnNl'@;
put 'dEljb25UZW1wbGF0ZShSLE9bUl0pfSxNLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oTyl7cmV0dXJuISFtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKE8pe2lmKCFPKXJldHVybiBtO2lmKCJzdHJpbmciIT10eXBlb2YgTyl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJPbmx5IHN0cmluZyBhcmd1bWVudCBpcyBhbGxvd2VkIGluIHRoaXMgbWV0aG9kLiIpO3JldHVybiBtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuYWxpYXM9ZnVuY3Rpb24oTyl7aWYoIm9iamVjdCIhPXR5cGVvZiBPKXRocm93IG5ldyBFcnJv'@;
put 'cignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGluIHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogWyJhbGlhcy1uYW1lIiwgLi4uXSB9Jyk7Zm9yKHZhciBSIGluIE8paWYoTy5oYXNPd25Qcm9wZXJ0'@;
put 'eShSKSl7aWYoIW0uaGFzT3duUHJvcGVydHkoUikpdGhyb3cgbmV3IEVycm9yKCdBbiBpY29uICInK1IrIlwiIHlvdSBhcmUgdHJ5aW5nIHRvIHNldCBhbGlhc2VzIHRvIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIENsYXJpdHkgSWNvbnMgc2V0cyEiKTt0aGlzLnNldEljb25BbGlhc2VzKG0sUixP'@;
put 'W1JdKX19LE19KCk7Ri5DbGFyaXR5SWNvbnNBcGk9bGV9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2pl'@;
put 'Y3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLG09YWUoCi8q'@;
put 'ISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLGxlPTAsTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7TS5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBP'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gUigpe3ZhciB6PU8uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB6LmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK2xlLGxlKyssen0ib2JqZWN0Ij09dHlwZW9mIFJlZmxl'@;
put 'Y3QmJihPPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLEYuQ2xhcml0eUljb25FbGVtZW50PVIsUi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChSLnByb3RvdHlw'@;
put 'ZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpSfX0pKS5jb25zdHJ1Y3Rvcj1SLFIucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciB6PU0uY2xvbmVOb2Rl'@;
put 'KCExKTt6LmlkPXRoaXMuY2xySWNvblVuaXFJZCx6LnRleHRDb250ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKHopfSxSLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oeil7IU51bWJlcih6KXx8TnVtYmVyKHopPDA/KHRoaXMuc3R5bGUud2lk'@;
put 'dGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5zdHlsZS53aWR0aD16KyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9eisicHgiKX0sUi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKHope3JldHVybiB6LnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LFIu'@;
put 'cHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgi'@;
put 'c2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09SyYmKHRoaXMuY3VycmVudFNpemVBdHRyVmFsPUssdGhpcy5fc2V0SWNvblNpemUoSykpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgST10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hh'@;
put 'cGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhJLGZ1bmN0aW9uKGope3ouX2luamVjdFRlbXBsYXRlKGopfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPUksIXguQ2xhcml0eUljb25z'@;
put 'QXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgaz14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihrPT09dGhpcy5jdXJyZW50'@;
put 'U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1rfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgRT10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1FJiYodGhpcy5jdXJyZW50VGl0bGVB'@;
put 'dHRyVmFsPUUpLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbih6LEssSSl7dmFyIGs9dGhpcztpZigic2l6ZSI9PT16JiZ0aGlzLl9zZXRJY29uU2l6ZShJ'@;
put 'KSwic2hhcGUiPT09eil7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKEkpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv'@;
put 'bj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oRSl7ay5faW5qZWN0VGVtcGxhdGUoRSl9KSksIXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwp'@;
put 'KXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT16JiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUks'@;
put 'IXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxS'@;
put 'LnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24oKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksST10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO3o/eiYmei5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmSS5zZXRBdHRy'@;
put 'aWJ1dGUoImFyaWEtbGFiZWxsZWRieSIseisiICIrdGhpcy5jbHJJY29uVW5pcUlkKTpJLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxSLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oeil7eiYmeiE9PXRoaXMuY3VycmVudFNo'@;
put 'YXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXopLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0s'@;
put 'Ui5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRz'@;
put 'IjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8q'@;
put 'ISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbGFyaXR5SWNvbnM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksbT1hZSgKLyohIC4vY2xyLWljb25zLWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIiksbGU9YWUoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9p'@;
put 'Y29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksTT14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZTtGLkNsYXJpdHlJY29ucz1NLE0uYWRkKGxlLkNvcmVTaGFwZXMpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKXx8KHdpbmRv'@;
put 'dy5DbGFyaXR5SWNvbnM9TSksY3VzdG9tRWxlbWVudHMuZ2V0KCJjbHItaWNvbiIpfHxjdXN0b21FbGVtZW50cy5kZWZpbmUoImNsci1pY29uIixtLkNsYXJpdHlJY29uRWxlbWVudCkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db3JlU2hhcGVzPUYuQ2xyU2hhcGVBcnJvdz1GLkNs'@;
put 'clNoYXBlU3RlcEZvcndhcmQyPUYuQ2xyU2hhcGVFeWVIaWRlPUYuQ2xyU2hhcGVFeWU9Ri5DbHJTaGFwZUV2ZW50PUYuQ2xyU2hhcGVDYWxlbmRhcj1GLkNsclNoYXBlQW5nbGVEb3VibGU9Ri5DbHJTaGFwZVZpZXdDb2x1bW5zPUYuQ2xyU2hhcGVTZWFyY2g9Ri5DbHJTaGFwZVZtQnVnPUYu'@;
put 'Q2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPUYuQ2xyU2hhcGVGaWx0ZXJHcmlkPUYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPUYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Ri5DbHJTaGFwZUNsb3VkPUYuQ2xyU2hhcGVJbWFnZT1GLkNsclNoYXBlQmVsbD1GLkNsclNoYXBlRm9sZGVy'@;
put 'T3Blbj1GLkNsclNoYXBlRm9sZGVyPUYuQ2xyU2hhcGVBbmdsZT1GLkNsclNoYXBlVXNlcj1GLkNsclNoYXBlQmFycz1GLkNsclNoYXBlSGVscEluZm89Ri5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1GLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1GLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPUYu'@;
put 'Q2xyU2hhcGVJbmZvU3RhbmRhcmQ9Ri5DbHJTaGFwZUluZm9DaXJjbGU9Ri5DbHJTaGFwZUNoZWNrQ2lyY2xlPUYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1GLkNsclNoYXBlVGltZXM9Ri5DbHJTaGFwZUNoZWNrPUYuQ2xyU2hhcGVD'@;
put 'b2c9Ri5DbHJTaGFwZUhvbWU9Ri5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2'@;
put 'Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVVbmtub3duU3RhdHVzPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4'@;
put 'PSIxNy41OCIgY3k9IjI2LjIzIiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0LjcsMTNhNS4xOCw1LjE4LDAsMCwwLTIuMTYtMy41Niw3LjI2LDcuMjYsMCwwLDAtNS43MS0xLjA5QTExLjM0'@;
put 'LDExLjM0LDAsMCwwLDEyLDEwLjQ0LDEsMSwwLDEsMCwxMy4yNiwxMmE5LjMyLDkuMzIsMCwwLDEsMy45NC0xLjcyLDUuMjksNS4yOSwwLDAsMSw0LjE2Ljc0LDMuMjEsMy4yMSwwLDAsMSwxLjM1LDIuMTljLjMzLDIuNjktMy4xOSwzLjc1LTUuMzIsNC4xNGwtLjgyLjE1djQuMzZhMSwxLDAs'@;
put 'MCwwLDIsMFYxOS4xN0MyNC42MSwxNy43OSwyNC44OCwxNC40MSwyNC43LDEzWiIvPicpLEYuQ2xyU2hhcGVIb21lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNzEsMTcuMjlsLTE1LTE1YTEsMSwwLDAs'@;
put 'MC0xLjQxLDBsLTE1LDE1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTgsNC40MSwzMi4yOSwxOC43MWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMzJoLTVWMjJIMTNW'@;
put 'MzJIOFYxOEw2LDIwVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NmwtMi0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywxOWExLDEsMCwwLDEtLjcxLS4yOUwxOCw0'@;
put 'LjQxLDMuNzEsMTguNzFhMSwxLDAsMCwxLTEuNDEtMS40MWwxNS0xNWExLDEsMCwwLDEsMS40MSwwbDE1LDE1QTEsMSwwLDAsMSwzMywxOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTgsNy43OSw2LDE5Ljgz'@;
put 'VjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NloiLz4nKSxGLkNsclNoYXBlQ29nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMSwxMWMtMy45LDAtNywzLjEtNyw3'@;
put 'czMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdTMjIsMTEsMTguMSwxMXogTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMi44LDAsNSwyLjIsNSw1UzIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjYtMS41bDEuNC0yLjZjMC4zLTAuNiwwLjItMS40LTAuMy0xLjlsLTIuNC0yLjRjLTAuNS0wLjUtMS4zLTAuNi0xLjktMC4zbC0yLjYsMS40bC0xLjUtMC42bC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRj'@;
put 'LTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwx'@;
put 'NS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4x'@;
put 'aDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwx'@;
put 'NS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6IE0zMiwxOS40bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0x'@;
put 'LjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmww'@;
put 'LjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjQsMC41LDIuMSwwLjlsMC41LDAuM2wzLjMtMS44bDIsMmwtMS44LDMuM2wwLjMsMC41YzAuNCwwLjcsMC43'@;
put 'LDEuNCwwLjksMi4xbDAuMSwwLjVsMy42LDEuMVYxOS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjEsMThjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN3Mt'@;
put 'My4xLTctNy03QzE0LjIsMTEsMTEuMSwxNC4xLDExLjEsMTh6IE0yMy4xLDE4YzAsMi44LTIuMiw1LTUsNWMtMi44LDAtNS0yLjItNS01czIuMi01LDUtNUMyMC45LDEzLDIzLjEsMTUuMiwyMy4xLDE4eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjEtMC4zYy0wLjgsMC0xLjYtMC4yLTIuNC0wLjRjMC4zLDAuNiwwLjYsMS4zLDAuOCwxLjlsMC4xLDAuNWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwx'@;
put 'LjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEu'@;
put 'OC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAu'@;
put 'MkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS4zLDAuNSwxLjksMC44Yy0wLjMtMC44LTAuNC0xLjYtMC40LTIuNWwtMC40LTAuMmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z'@;
put 'LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs'@;
put 'MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy'@;
put 'LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy43LDE1LjRoLTUuM3YwLjFsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwt'@;
put 'MC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAu'@;
put 'Mi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy40bDEuNC0yLjNsLTAuNi0yQzIxLDIuNCwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUt'@;
put 'MS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRj'@;
put 'MCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMt'@;
put 'MC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNiwzMy45LDE1LjcsMzMu'@;
put 'NywxNS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMwLjIsMCwwLjUsMCwwLjcsMC4xYy0wLjItMC42LTAu'@;
put 'My0xLjMtMC4yLTJoLTAuNWMtMy45LDAtNywzLjEtNyw3YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdjMC0wLjktMC4yLTEuOC0wLjUtMi42aC0yLjJjMC41LDAuOCwwLjcsMS42LDAuNywyLjVDMjMuMSwyMC44LDIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAu'@;
put 'NSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNTcs'@;
put 'MTUuNzJsLTMuMzUtMWExMS42NSwxMS42NSwwLDAsMC0uOTUtMi4zM2wxLjY0LTMuMDdhLjYxLjYxLDAsMCwwLS4xMS0uNzJMMjcuNDEsNi4yYS42MS42MSwwLDAsMC0uNzItLjExTDIzLjY0LDcuNzJhMTEuNjIsMTEuNjIsMCwwLDAtMi4zNi0xbC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5'@;
put 'LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEs'@;
put 'MCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0'@;
put 'bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYz'@;
put 'LDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTIuMTIsMTIuMTIsMCwwLDAtLjQ3LTEuMzIsNy40OSw3LjQ5LDAsMCwxLTYuMTQtNi4xNiwxMS44MiwxMS44MiwwLDAsMC0xLjMzLS40OGwtMS0zLjMxQS42'@;
put 'MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3'@;
put 'bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDEx'@;
put 'LjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcy'@;
put 'bC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMi41NywxNS43MiwzMS41LDE1LjRIMjIuODVBNS41LDUuNSwwLDEsMSwxOCwxMi41YTUuNTMsNS41MywwLDAsMSwuNjUsMEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwyLjA5LTMuNjItLjg2LTIuODNBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFh'@;
put 'LjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQz'@;
put 'LjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2Eu'@;
put 'NjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAs'@;
put 'MCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy'@;
put 'dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEzLjcyLDI3LjY5LDMuMjksMTcuMjdhMSwxLDAsMCwxLDEuNDEtMS40MWw5LDlMMzEuMjksNy4yOWExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicpLEYuQ2xyU2hhcGVUaW1lcz0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjQxLDE4bDguMjktOC4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDkuNzEsOC4yOUExLDEsMCwwLDAsOC4yOSw5LjcxTDE2LjU5LDE4LDguMjksMjYuMjlhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwxOCwxOS40MWw4LjI5LDguMjlhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxLjMyYTEu'@;
put 'MywxLjMsMCwwLDAsMS4zLTEuM1YxNGExLjMsMS4zLDAsMSwwLTIuNiwwdjZBMS4zLDEuMywwLDAsMCwxOCwyMS4zMloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0i'@;
put 'MS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0'@;
put 'LTQuNDNabS0xLjc4LDEuOTRhMSwxLDAsMCwxLS44Ni40OUg4LjIxYTEsMSwwLDAsMS0uODgtMS40OEwxNy4wNyw4LjU1YTEsMSwwLDAsMSwxLjc2LDBsOS43NCwxNy45NEExLDEsMCwwLDEsMjguNTUsMjcuNDhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1pNMTYuNDYsMTIuNzRhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40'@;
put 'OSwwLDEsMS0zLDBaTTE4LDI2LjI1YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI2LjI1WiIvPicpLEYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'ZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZBMS4zLDEuMywwLDAsMSwxOCwyMC4wN1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTcuOTUi'@;
put 'IGN5PSIyMy4wMiIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTEuNDksNmExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40'@;
put 'OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjUuNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNS41WiIvPicpLEYuQ2xyU2hhcGVDaGVja0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i'@;
put 'TTE2LjM0LDIzLjc0bC01LTVhMSwxLDAsMCwxLDEuNDEtMS40MWwzLjU5LDMuNTksNi43OC02Ljc4YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDE4QTEyLDEyLDAsMSwx'@;
put 'LDE4LDYsMTIsMTIsMCwwLDEsMzAsMThabS00Ljc3LTIuMTZhMS40LDEuNCwwLDAsMC0yLTJsLTYuNzcsNi43N0wxMywxNy4xNmExLjQsMS40LDAsMCwwLTIsMmw1LjQ1LDUuNDVaIi8+JyksRi5DbHJTaGFwZUluZm9DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgIGN4PSIxNy45MyIgY3k9IjExLjkiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAgZD0iTTIxLDIzSDE5VjE1SDE2YTEsMSwwLDAsMCwwLDJo'@;
put 'MXY2SDE1YTEsMSwwLDEsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCww'@;
put 'LDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIsMiwwLDEsMSwyLDJBMiwy'@;
put 'LDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPicpLEYuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3Ljk3IiBjeT0iMTAuNDUiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjEsMjVIMTlWMTQuMUgxNmExLDEsMCwwLDAsMCwy'@;
put 'aDFWMjVIMTVhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwx'@;
put 'NCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWm0tLjEsNS4yOGEyLDIsMCwxLDEt'@;
put 'MiwyQTIsMiwwLDAsMSwxNy45LDcuMzhabTMuNiwyMS4yNWgtN2ExLjQsMS40LDAsMSwxLDAtMi44aDIuMXYtOS4ySDE1YTEuNCwxLjQsMCwxLDEsMC0yLjhoNC40djEyaDIuMWExLjQsMS40LDAsMSwxLDAsMi44WiIvPicpLEYuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9KDAsbS5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwxMi4xYTEsMSwwLDAsMC0xLjQxLDBMMTUuNDksMjMuMTVsLTYtNkExLDEsMCwwLDAsOCwxOC41M0wxNS40OSwyNiwyOCwxMy41MkExLDEsMCwwLDAsMjgsMTIuMVoiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOC40NSwxMi42MywxNS4zMSwyNS43Niw3LjU1LDE4YTEuNCwxLjQsMCwwLDEsMi0ybDUuNzgsNS43OEwyNi40NywxMC42NWEx'@;
put 'LjQsMS40LDAsMSwxLDIsMloiLz4nKSxGLkNsclNoYXBlRXJyb3JTdGFuZGFyZD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWk0xNi42LDguOGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI4LjZhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjguNloiLz4n'@;
put 'KSxGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg'@;
put 'ZD0iTTE1LjA2MjA3ODIsMS42ODExOTYgQzE1LjYyOTg4MTksMC42NDkyNjYzNTUgMTYuNzEwOTA5MSwwLjAxMDIyMTkzOTYgMTcuODg1LDAuMDEwMjIxOTM5NiBDMTkuMDU5MDkwOSwwLjAxMDIyMTkzOTYgMjAuMTQwMTE4MSwwLjY0OTI2NjM1NSAyMC43MDg2NDMzLDEuNjgyNTIxMjkgTDM0'@;
put 'LjU5ODY0NCwyNy4yNDI1MjI1IEMzNS4xNDA3NzQ2LDI4LjI0MDEzOTcgMzUuMTE3NDM0NSwyOS40NDk1MzczIDM0LjUzNzIxNjEsMzAuNDI1NDk0MyBDMzMuOTU2OTk3NywzMS40MDE0NTE0IDMyLjkwNTY3MSwzMS45OTk2OTg0IDMxLjc3LDMyIEw0LjAyMjM5MzIzLDMxLjk5OTc0OTIgQzIu'@;
put 'ODc0MDkwMDksMzIuMDI1NDY5OSAxLjc5OTAyODQzLDMxLjQzNzU3NTMgMS4yMDEwNjMzNSwzMC40NTY5MTI2IEMwLjYwMzA5ODI2NSwyOS40NzYyNDk5IDAuNTcyNzc3ODk5LDI4LjI1MTMxNzkgMS4xMjIwNzgxOCwyNy4yNDExOTYgTDE1LjA2MjA3ODIsMS42ODExOTYgWiBNMi44Nzg1MDc2'@;
put 'NywyOC4xOTc3MjgyIEMyLjY3MDYwOTY2LDI4LjU4MDAzNzYgMi42ODIwOTc1LDI5LjA0NDE0MjMgMi45MDg2NTU3LDI5LjQxNTY5NzcgQzMuMTM1MjEzOSwyOS43ODcyNTMyIDMuNTQyNTM1NCwzMC4wMDk5OTU5IDQsMzAgTDMxLjc2OTczNDQsMzAgQzMyLjE5OTkxOTEsMjkuOTk5ODg1OCAz'@;
put 'Mi41OTgyNDc4LDI5Ljc3MzIyMDggMzIuODE4MDgyMSwyOS40MDM0NDgyIEMzMy4wMzc5MTY0LDI5LjAzMzY3NTcgMzMuMDQ2NzU5NSwyOC41NzU0NTY3IDMyLjg0MTM1NjcsMjguMTk3NDc4NyBMMTguOTUzODczOSwyLjY0MjA4MTk1IEMxOC43Mzk0MjM2LDIuMjUyMzQ0MzYgMTguMzI5ODQx'@;
put 'OSwyLjAxMDIyMTk0IDE3Ljg4NSwyLjAxMDIyMTk0IEMxNy40NDA2ODg5LDIuMDEwMjIxOTQgMTcuMDMxNTUzOCwyLjI1MTc2NjkyIDE2LjgxNjg5NDYsMi42NDA2ODc1MyBMMi44Nzg1MDc2NywyOC4xOTc3MjgyIFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuNiwyOS4yMSwyMC43MSwzLjY1YTMuMjIsMy4yMiwwLDAsMC01LjY2LDBMMS4xNywyOS4yMUEzLjIyLDMuMjIsMCwwLDAsNCwzNEgzMS43N2EzLjIyLDMuMjIsMCwwLDAsMi44My00Ljc1Wk0xNi42LDEwYTEuNCwxLjQsMCwwLDEsMi44LDB2'@;
put 'MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjkuODVhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjkuODVaIi8+JyksRi5DbHJTaGFwZUhlbHBJbmZvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4zOSwyNS40NWExLDEsMCwwLDAtMS4zOC4yOWMtMS40'@;
put 'MSwyLjE2LTQsNC44MS02LjMxLDUuN3MtNC4xMi41Ny00Ljg0LDBjLS4zMS0uMjctMS4xMi0xLS40My0zLjQ5LjQ2LTEuNjYsMy4zMi05LjQ4LDQtMTEuMzhsLTIuMTguMjhjLS42OSwxLjg2LTMuMjksOC44NC0zLjc2LDEwLjU4LS42OCwyLjQ5LS4zNCw0LjMsMS4wOSw1LjU2QTUuNTksNS41'@;
put 'OSwwLDAsMCwxNSwzNGE5LjUzLDkuNTMsMCwwLDAsMy40NS0uN2MyLjc5LTEuMDksNS43Mi00LjEyLDcuMjYtNi40N0ExLDEsMCwwLDAsMjUuMzksMjUuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4z'@;
put 'LDExYTQuNSw0LjUsMCwxLDAtNC41LTQuNUE0LjUsNC41LDAsMCwwLDE5LjMsMTFabTAtN2EyLjUsMi41LDAsMSwxLTIuNSwyLjVBMi41LDIuNSwwLDAsMSwxOS4zLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xMS44MSwxNWMuMDYsMCw2LjI3LS44Miw3LjczLTEsLjY1LS4xLDEuMTQsMCwxLjMuMTVzLjIxLjgtLjA3LDEuNjhjLS42MSwxLjg2LTMuNjksMTEtNC41OSwxMy43MWE4LDgsMCwwLDAsMS4yOS0uMzgsNy4zMiw3LjMyLDAsMCwwLDEuMTUtLjZDMTkuODUsMjUsMjIuMTUsMTguMSwyMi42'@;
put 'NywxNi41MnMuMzktMi43OC0uMy0zLjZhMy4xNiwzLjE2LDAsMCwwLTMuMDgtLjgzYy0xLjQzLjE1LTcuNDcuOTQtNy43MywxYTEsMSwwLDAsMCwuMjYsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjAu'@;
put 'NzUiIGN5PSI2IiByPSI0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljg0LDI2LjIzYTEsMSwwLDAsMC0xLjQuMjksMTYuNiwxNi42LDAsMCwxLTMuNTEsMy43N2MtLjMzLjI1LTEuNTYsMS4yLTIuMDgsMS0uMzYt'@;
put 'LjExLS4xNS0uODItLjA4LTEuMTJsLjUzLTEuNTdjLjIyLS42NCw0LjA1LTEyLDQuNDctMTMuMy42Mi0xLjkuMzUtMy43Ny0yLjQ4LTMuMzItLjc3LjA4LTguNTgsMS4wOS04LjcyLDEuMWExLDEsMCwwLDAsLjEzLDJzMy0uMzksMy4zMy0uNDJhLjg4Ljg4LDAsMCwxLC44NS40NCwyLjQ3LDIu'@;
put 'NDcsMCwwLDEtLjA3LDEuNzFjLS4yNiwxLTQuMzcsMTIuNTgtNC41LDEzLjI1YTIuNzgsMi43OCwwLDAsMCwxLjE4LDMsNSw1LDAsMCwwLDMuMDguODNoMGE4LjUzLDguNTMsMCwwLDAsMy4wOS0uNjJjMi40OS0xLDUuMDktMy42Niw2LjQ2LTUuNzVBMSwxLDAsMCwwLDI0Ljg0LDI2LjIzWiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDI5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEs'@;
put 'MCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMiw5SDRBMSwxLDAsMCwxLDQsN0gzMmExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVVc2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwxLDAtNy03QTcsNywwLDAsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEt'@;
put 'NSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5'@;
put 'YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3'@;
put 'YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMjAsMTQuNmE1LDUsMCwxLDEsMS4yNC04LjQybDEtMS43NkE3LDcsMCwxLDAsMTgs'@;
put 'MTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgs'@;
put 'MTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4x'@;
put 'NiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYx'@;
put 'LDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTAiIHI9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEs'@;
put 'MjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLjE2LTUuNDdBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4x'@;
put 'NFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41'@;
put 'LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcs'@;
put 'NywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS41MiwyMi41'@;
put 'MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPicpLEYuQ2xyU2hhcGVGb2xkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy'@;
put 'LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIu'@;
put 'NjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTFhNy41LDcuNSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMCwxNS40VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4x'@;
put 'MSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVpNNiwxMVY3aDYuNDlsMi43Miw0'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks'@;
put 'NUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1p'@;
put 'LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjMuMTMsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMu'@;
put 'MjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+'@;
put 'JyksRi5DbHJTaGFwZUZvbGRlck9wZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41Miwx'@;
put 'LDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCww'@;
put 'LDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAs'@;
put 'MCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45'@;
put 'bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRoLS4zTDI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0aDkuNDJBMy42NywzLjY3LDAsMCwx'@;
put 'LDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40Mkwx'@;
put 'NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIu'@;
put 'NTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1'@;
put 'LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40'@;
put 'SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwx'@;
put 'OSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCww'@;
put 'LDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcx'@;
put 'LDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4zMS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy'@;
put 'LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmVsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjUxLDI3Ljgz'@;
put 'QTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYz'@;
put 'LDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaTTUuMTMsMjguOTRhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0'@;
put 'LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNWE4Ljc0LDguNzQsMCwxLDEsMTcuNDcsMHY0Ljk0YTE0LjI0LDE0LjI0LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBk'@;
put 'PSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5LDcuNDQsNy40NCwwLDAsMS0yLjI0LS44NCw4Ljg5LDguODksMCwwLDEsLjQsMi42NHY0Ljk0YTE0LjI0LDE0LjI0'@;
put 'LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNINS4xM2ExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1QTguOCw4LjgsMCwwLDEsMTgsNi4zMWE4LjYxLDguNjEsMCwwLDEsNC43NiwxLjQ0QTcuNDksNy40OSww'@;
put 'LDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTgsMTAuNTgsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwx'@;
put 'LTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWEx'@;
put 'Mi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40'@;
put 'LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTUuMzIsMzJhMi42NSwyLjY1LDAsMCwwLDUuMjUsMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5QTcuNSw3LjUsMCwwLDEs'@;
put 'MjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU3LDEwLjU3LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3'@;
put 'LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVJbWFnZT0oMCxt'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsMzBWNkgzMlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNOC45MiwxNGEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjkyLDE0Wm0wLTQuNkExLjYsMS42LDAsMSwxLDcuMzMsMTEsMS42LDEuNiwwLDAsMSw4LjkyLDkuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTIyLjc4LDE1LjM3bC01LjQsNS40LTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxQTEsMSwwLDAsMCwyMi43OCwxNS4zN1oiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTMsMTFhMywzLDAsMSwwLTMsM0EzLDMsMCwwLDAsMTEuOTMsMTFabS00LjYsMGExLjYsMS42LDAsMSwxLDEuNiwxLjZBMS42LDEuNiwwLDAsMSw3LjMzLDExWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuMzgsMjAuNzdsLTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUt'@;
put 'OC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxYTEsMSwwLDAsMC0xLjQxLDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjZIMjIuNWE3LjQ5LDcuNDksMCww'@;
put 'LDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgz'@;
put 'MmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwx'@;
put 'LjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEy'@;
put 'LjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSww'@;
put 'TDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzM0gxMC42MkM1LjY3LDMzLDEsMjguMTksMSwyMy4xYTEwLDEwLDAsMCwxLDgtOS43NSwxMC4x'@;
put 'OSwxMC4xOSwwLDAsMSwyMC4zMywxLjA2QTEwLjA3LDEwLjA3LDAsMCwxLDI5LDE2LjY2YTguMjksOC4yOSwwLDAsMSw2LDhDMzUsMjkuMSwzMS4zMywzMywyNy4xNCwzM1pNMTkuMDksNi4yM2E4LjI0LDguMjQsMCwwLDAtOC4xOSw4bDAsLjg3LS44Ni4xQTcuOTQsNy45NCwwLDAsMCwzLDIz'@;
put 'LjFjMCw0LDMuNzcsNy45LDcuNjIsNy45SDI3LjE0QzMwLjIxLDMxLDMzLDI4LDMzLDI0LjY1YTYuMzEsNi4zMSwwLDAsMC01LjM3LTYuMjZsLTEuMTgtLjE4LjM5LTEuMTNBOC4xOCw4LjE4LDAsMCwwLDE5LjA5LDYuMjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDUsNy40NSwwLDAsMS0yLjEtLjU0LDgsOCwwLDAsMS0uMyw0LjE2bC0uMzksMS4xMywxLjE4LjE4YTYu'@;
put 'MzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdhOC4yNCw4LjI0LDAsMCwxLDguMTktOEE4LjEzLDguMTMsMCwwLDEsMjIuNTgs'@;
put 'N2E3LjUzLDcuNTMsMCwwLDEtLjA4LTEsNy41MSw3LjUxLDAsMCwxLC4wOS0xLjEyQTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2'@;
put 'LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNCwxMC4xNCwwLDAsMCwuMi0xLjNoLTJhOC4yOCw4LjI4LDAsMCwxLS4zNywxLjcybC0uMzksMS4xMywxLjE4LjE4'@;
put 'YTYuMzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdBOC4xNiw4LjE2LDAsMCwxLDIxLDYuNDdsMS0xLjhBMTAuMTksMTAuMTks'@;
put 'MCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1'@;
put 'LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjgu'@;
put 'MTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5'@;
put 'LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ0LDcuNDQsMCwwLDEtNi42LTguNThBMTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMs'@;
put 'MTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9'@;
put 'IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNSwxMC4xNSwwLDAsMCwuMi0xLjI2aC03QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5'@;
put 'bDMtNS4yMUExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCww'@;
put 'LDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjha'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSww'@;
put 'LDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLEYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCww'@;
put 'LTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCww'@;
put 'LDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0'@;
put 'LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVs'@;
put 'My45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlVm1CdWc9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiByeD0iMyIg'@;
put 'ZmlsbD0iI2ZmZmZmZiIgb3BhY2l0eT0iMC4xNSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTMuNzksMTQuODNhMS4wOSwxLjA5LDAsMCwwLTEuNDctLjU2LDEuMDksMS4wOSwwLDAsMC0uNTQsMS40OWwyLjQ3LDUuNGMuMzkuODUuOCwxLjI5LDEuNTcsMS4yOVM3LDIy'@;
put 'LDcuMzksMjEuMTZsMi4xNy00Ljc3YS4zMy4zMywwLDAsMSwuMzEtLjIuMzUuMzUsMCwwLDEsLjM1LjM1djQuNjFhMS4xNSwxLjE1LDAsMCwwLDEuMTQsMS4zLDEuMTcsMS4xNywwLDAsMCwxLjE3LTEuM1YxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEu'@;
put 'MTgsMS4ydjMuNzdhMS4xNywxLjE3LDAsMSwwLDIuMzIsMFYxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNiwxLjE2LDAsMSwwLDIuMzEsMFYxNi44NmEyLjY5LDIuNjksMCwwLDAtMi43OC0yLjY5LDMuNTcsMy41NywwLDAs'@;
put 'MC0yLjQ3LDEuMDUsMi43NSwyLjc1LDAsMCwwLTIuMzgtMS4wNUEzLjkzLDMuOTMsMCwwLDAsMTIsMTUuMjJhMi44MiwyLjgyLDAsMCwwLTIuMDgtMS4wNUEyLjU1LDIuNTUsMCwwLDAsNy40LDE1Ljg5TDUuODIsMTkuNjNsLTItNC44IiBmaWxsPSIjZmZmZmZmIi8+PHBhdGggZD0iTTMzLDE0'@;
put 'LjE4QTEuMTQsMS4xNCwwLDAsMCwzMS45LDE1bC0xLjE5LDMuNzNMMjkuNSwxNS4wNWExLjE4LDEuMTgsMCwwLDAtMS4xNS0uODdoLS4xYTEuMiwxLjIsMCwwLDAtMS4xNS44N2wtMS4xOSwzLjcxLTEuMTgtMy43MWExLjE1LDEuMTUsMCwwLDAtMS4xMS0uODcsMS4wOCwxLjA4LDAsMCwwLTEu'@;
put 'MTIsMS4wNywxLjY4LDEuNjgsMCwwLDAsLjEuNTRsMiw1LjdhMS4yNywxLjI3LDAsMCwwLDEuMjcsMSwxLjI0LDEuMjQsMCwwLDAsMS4yLS45M2wxLjItMy42NCwxLjIsMy42NGExLjI1LDEuMjUsMCwwLDAsMS4yNi45M0ExLjI3LDEuMjcsMCwwLDAsMzIsMjEuNUwzNCwxNS43M2ExLjc3LDEu'@;
put 'NzcsMCwwLDAsLjA4LS40OEExLjA3LDEuMDcsMCwwLDAsMzMsMTQuMThaIiBmaWxsPSIjZmZmZmZmIi8+JyksRi5DbHJTaGFwZVNlYXJjaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjMzLDUuMDVBMTAu'@;
put 'OTUsMTAuOTUsMCwxLDEsNS4zOSwxNiwxMSwxMSwwLDAsMSwxNi4zMyw1LjA1bTAtMi4wNWExMywxMywwLDEsMCwxMywxMywxMywxMywwLDAsMC0xMy0xM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTM1'@;
put 'LDMzLjI5bC03LjM3LTcuNDItMS40MiwxLjQxLDcuMzcsNy40MkExLDEsMCwxLDAsMzUsMzMuMjlaIi8+JyksRi5DbHJTaGFwZVZpZXdDb2x1bW5zPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsNUg1QTIs'@;
put 'MiwwLDAsMCwzLDdWMjlhMiwyLDAsMCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nKSxGLkNsclNoYXBlQW5nbGVEb3VibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOSwxOS40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCw4LjgzLDcuNzEsMTkuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCw2LDI5LjcxLDE3LjcxQTEsMSwwLDAsMSwyOSwxOS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+JyksRi5DbHJTaGFwZUNhbGVuZGFyPSgw'@;
put 'LG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu'@;
put 'NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjIwIiB5'@;
put 'PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0'@;
put 'PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC05IiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIHg9IjIwIiB5'@;
put 'PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiBk'@;
put 'PSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgy'@;
put 'OC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI4IiB5PSIxNCIgd2lkdGg9'@;
put 'IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1i'@;
put 'YWRnZWQiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTki'@;
put 'IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEyLS1iYWRnZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMu'@;
put 'NjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgeD0iMTQi'@;
put 'IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgeD0iMjYiIHk9IjE5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xMC0tYWxlcnRlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9seWdvbiBw'@;
put 'b2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0z'@;
put 'Mi4yNSw2aC00VjlhMi4yLDIuMiwwLDEsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCww'@;
put 'LDAsMCwzMi4yNSw2Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2'@;
put 'VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41'@;
put 'LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTEwLDI2'@;
put 'SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUEx'@;
put 'Ljc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTYsNUgyNlYyNGgyWm0wLTVIMjZWMTloMloiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFdmVudD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywy'@;
put 'M2w4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5'@;
put 'QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xMCwxMGEx'@;
put 'LDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAs'@;
put 'MCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAtMS40MS0xLjQxTDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEs'@;
put 'MzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0i'@;
put 'TTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zLS1hbGVydGVkIiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu'@;
put 'NEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjI1LDZoLTRWOWEy'@;
put 'LjIsMi4yLDAsMCwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZa'@;
put 'TTI1Ljk0LDE2LjU4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0zMy42OCwxNS40SDI2LjNhMS4zNCwxLjM0LDAsMCwxLS4zNiwxLjE4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4LDctN2gtMUEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo'@;
put 'LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0z'@;
put 'LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4'@;
put 'LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wm0tNC4wNiwzLjA4LTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUV5ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4y'@;
put 'My05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44'@;
put 'LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4'@;
put 'LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwxLDE4LjA5LDIyLjg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42Miwx'@;
put 'Ny41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjks'@;
put 'OC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0i'@;
put 'Ni44NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVFeWVIaWRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgsNi43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43'@;
put 'OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwuNzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40Miwx'@;
put 'LjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40'@;
put 'OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAsMCwxLDE0LjYy'@;
put 'LDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEuNmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywxOCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4'@;
put 'LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5'@;
put 'LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSww'@;
put 'LDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVTdGVwRm9yd2FyZDI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTcuMDgsNi41MmExLjY4LDEuNjgsMCwwLDAsMCwyLjRMMTYuNTEsMTgsNy4xMiwyNy4wOGExLjcsMS43LDAsMCwwLDIuMzYsMi40NGgwTDIxLjQsMTgsOS40OCw2LjQ3QTEuNjksMS42OSwwLDAsMCw3LjA4LDYuNTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MSIgLz48cGF0aCBkPSJNMjYuNDksNWExLjcsMS43LDAsMCwwLTEuNywxLjdWMjkuM2ExLjcsMS43LDAsMCwwLDMuNCwwVjYuN0ExLjcsMS43LDAsMCwwLDI2LjQ5LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQXJyb3c9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LjY2LDE1LjYxLDE4LDYsOC4zNCwxNS42MUExLDEsMCwxLDAsOS43NSwxN0wxNyw5LjgxVjI4Ljk0YTEsMSwwLDEsMCwyLDBWOS44MUwyNi4yNSwxN2ExLDEsMCwwLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiLz4nKSxGLkNvcmVTaGFwZXM9eyJ1bmtub3duLXN0YXR1cyI6Ri5DbHJTaGFwZVVua25vd25TdGF0dXMsaG9tZTpGLkNsclNoYXBlSG9tZSxjb2c6Ri5DbHJTaGFwZUNvZyxjaGVjazpGLkNsclNoYXBlQ2hlY2ssdGltZXM6Ri5DbHJTaGFwZVRpbWVzLCJleGNsYW1hdGlv'@;
put 'bi10cmlhbmdsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGUsImV4Y2xhbWF0aW9uLWNpcmNsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlLCJjaGVjay1jaXJjbGUiOkYuQ2xyU2hhcGVDaGVja0NpcmNsZSwiaW5mby1jaXJjbGUiOkYuQ2xyU2hhcGVJbmZvQ2lyY2xlLCJp'@;
put 'bmZvLXN0YW5kYXJkIjpGLkNsclNoYXBlSW5mb1N0YW5kYXJkLCJzdWNjZXNzLXN0YW5kYXJkIjpGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkLCJlcnJvci1zdGFuZGFyZCI6Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQsIndhcm5pbmctc3RhbmRhcmQiOkYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRh'@;
put 'cmQsImhlbHAtaW5mbyI6Ri5DbHJTaGFwZUhlbHBJbmZvLGJhcnM6Ri5DbHJTaGFwZUJhcnMsdXNlcjpGLkNsclNoYXBlVXNlcixhbmdsZTpGLkNsclNoYXBlQW5nbGUsZm9sZGVyOkYuQ2xyU2hhcGVGb2xkZXIsImZvbGRlci1vcGVuIjpGLkNsclNoYXBlRm9sZGVyT3BlbixiZWxsOkYuQ2xy'@;
put 'U2hhcGVCZWxsLGltYWdlOkYuQ2xyU2hhcGVJbWFnZSxjbG91ZDpGLkNsclNoYXBlQ2xvdWQsImVsbGlwc2lzLWhvcml6b250YWwiOkYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWwsImVsbGlwc2lzLXZlcnRpY2FsIjpGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbCwiZmlsdGVyLWdyaWQi'@;
put 'OkYuQ2xyU2hhcGVGaWx0ZXJHcmlkLCJmaWx0ZXItZ3JpZC1jaXJjbGUiOkYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlLCJ2bS1idWciOkYuQ2xyU2hhcGVWbUJ1ZyxzZWFyY2g6Ri5DbHJTaGFwZVNlYXJjaCwidmlldy1jb2x1bW5zIjpGLkNsclNoYXBlVmlld0NvbHVtbnMsImFuZ2xlLWRv'@;
put 'dWJsZSI6Ri5DbHJTaGFwZUFuZ2xlRG91YmxlLGNhbGVuZGFyOkYuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpGLkNsclNoYXBlRXZlbnQsZXllOkYuQ2xyU2hhcGVFeWUsImV5ZS1oaWRlIjpGLkNsclNoYXBlRXllSGlkZSwic3RlcC1mb3J3YXJkLTIiOkYuQ2xyU2hhcGVTdGVwRm9yd2FyZDIs'@;
put 'YXJyb3c6Ri5DbHJTaGFwZUFycm93fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJob3VzZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuaG9tZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsInNldHRpbmdzIiwoMCx4LmRlc2Ny'@;
put 'aXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jb2cpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzdWNjZXNzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jaGVjaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNsb3NlIiwo'@;
put 'MCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy50aW1lcykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIndhcm5pbmciLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi10cmlhbmdsZSJdKSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KEYuQ29yZVNoYXBlcywiZXJyb3IiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImluZm8iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVz'@;
put 'WyJpbmZvLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibWVudSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmFycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImF2YXRhciIsKDAseC5kZXNjcmlwdG9yQ29u'@;
put 'ZmlnKShGLkNvcmVTaGFwZXMudXNlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNhcmV0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5hbmdsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImRpcmVjdG9yeSIsKDAseC5k'@;
put 'ZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuZm9sZGVyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibm90aWZpY2F0aW9uIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5iZWxsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBl'@;
put 'cywiY29sbGFwc2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJhbmdsZS1kb3VibGUiXSkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'Ki8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlv'@;
put 'biB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPUYuY2hh'@;
put 'bmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsRi5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe3RoaXMuY2FsbGJhY2tzPUYuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sImluc3RhbmNl'@;
put 'Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uc2luZ2xlSW5zdGFuY2V8fChtLnNpbmdsZUluc3RhbmNlPW5ldyBtKSxtLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG0ucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKGxlLE0pe3ZhciBPPXRo'@;
put 'aXM7cmV0dXJuIHRoaXMuY2FsbGJhY2tzW2xlXT8tMT09PXRoaXMuY2FsbGJhY2tzW2xlXS5pbmRleE9mKE0pJiZ0aGlzLmNhbGxiYWNrc1tsZV0ucHVzaChNKTp0aGlzLmNhbGxiYWNrc1tsZV09W01dLGZ1bmN0aW9uKCl7dmFyIFI9Ty5jYWxsYmFja3NbbGVdLmluZGV4T2YoTSk7Ty5jYWxs'@;
put 'YmFja3NbbGVdLnNwbGljZShSLDEpLDA9PT1PLmNhbGxiYWNrc1tsZV0ubGVuZ3RoJiZkZWxldGUgTy5jYWxsYmFja3NbbGVdfX0sbS5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24obGUsTSl7dGhpcy5jYWxsYmFja3NbbGVdJiZ0aGlzLmNhbGxiYWNrc1tsZV0ubWFwKGZ1bmN0aW9u'@;
put 'KE8pe08oTSl9KX0sbX0oKTtGLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj14fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAg'@;
put 'ICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz'@;
put 'IGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmNsckljb25TVkc9dm9pZCAwO0YuY2xySWNvblNWRz1mdW5jdGlvbiBNKE8pe3ZhciBSPSIiO3JldHVybiBPLmluZGV4T2YoIi0t'@;
put 'YmFkZ2VkIik+LTEmJihSKz0iY2FuLWJhZGdlICIpLE8uaW5kZXhPZigiLS1hbGVydGVkIik+LTEmJihSKz0iY2FuLWFsZXJ0ICIpLE8uaW5kZXhPZigiY2xyLWktc29saWQiKT4tMSYmKFIrPSJoYXMtc29saWQgIiksKFI/JzxzdmcgdmVyc2lvbj0iMS4xIiBjbGFzcz0iJytSKyciIHZpZXdC'@;
put 'b3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6'@;
put 'JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNh'@;
put 'YmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStPKyI8L3N2Zz4ifX19KX0sMzQyMDk6ZnVuY3Rpb24oYXQpe2F0LmV4cG9ydHM9ZnVuY3Rpb24oSWUpe3ZhciBGPXt9O2Z1bmN0aW9uIGFlKHgpe2lmKEZbeF0pcmV0dXJuIEZbeF0uZXhwb3J0czt2YXIgbT1GW3hdPXtpOngsbDohMSxleHBvcnRz'@;
put 'Ont9fTtyZXR1cm4gSWVbeF0uY2FsbChtLmV4cG9ydHMsbSxtLmV4cG9ydHMsYWUpLG0ubD0hMCxtLmV4cG9ydHN9cmV0dXJuIGFlLm09SWUsYWUuYz1GLGFlLmQ9ZnVuY3Rpb24oeCxtLGxlKXthZS5vKHgsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LG0se2VudW1lcmFibGU6ITAsZ2V0'@;
put 'OmxlfSl9LGFlLnI9ZnVuY3Rpb24oeCl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KX0sYWUudD1mdW5jdGlvbih4LG0pe2lmKDEmbSYmKHg9YWUoeCkpLDgmbXx8NCZtJiYib2JqZWN0Ij09dHlwZW9mIHgmJngmJnguX19lc01vZHVsZSlyZXR1cm4geDt2YXIgbGU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihhZS5yKGxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUs'@;
put 'ImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnh9KSwyJm0mJiJzdHJpbmciIT10eXBlb2YgeClmb3IodmFyIE0gaW4geClhZS5kKGxlLE0sZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119LmJpbmQobnVsbCxNKSk7cmV0dXJuIGxlfSxhZS5uPWZ1bmN0aW9uKHgpe3ZhciBtPXgmJnguX19l'@;
put 'c01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB4LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHh9O3JldHVybiBhZS5kKG0sImEiLG0pLG19LGFlLm89ZnVuY3Rpb24oeCxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsbSl9LGFlLnA9IiIsYWUoYWUu'@;
put 'cz0iLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAg'@;
put 'ICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJ'@;
put 'ZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQWxsU2hhcGVzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2hhcnQtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRz'@;
put 'IiksbT1hZSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKSxNPWFlKAov'@;
put 'KiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLE89YWUoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLFI9YWUoCi8qISAuL3Nv'@;
put 'Y2lhbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIiksej1hZSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLEs9YWUoCi8qISAuL3RleHQt'@;
put 'ZWRpdC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksST1hZSgKLyohIC4vdHJhdmVsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiKSxrPVtsZS5Db3JlU2hhcGVzLG0uQ29t'@;
put 'bWVyY2VTaGFwZXMsTS5Fc3NlbnRpYWxTaGFwZXMsTy5NZWRpYVNoYXBlcyxSLlNvY2lhbFNoYXBlcyx6LlRlY2hub2xvZ3lTaGFwZXMsSS5UcmF2ZWxTaGFwZXMseC5DaGFydFNoYXBlcyxLLlRleHRFZGl0U2hhcGVzXSxFPXt9O0YuQWxsU2hhcGVzPUU7Zm9yKHZhciBqPTAsVj1rO2o8Vi5s'@;
put 'ZW5ndGg7aisrKXt2YXIgQj1WW2pdO2Zvcih2YXIgWSBpbiBCKUIuaGFzT3duUHJvcGVydHkoWSkmJihFW1ldPUJbWV0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChFKX0sIi4vcHJvamVj'@;
put 'dHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoq'@;
put 'KiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNoYXJ0U2hhcGVzPUYuQ2xyU2hhcGVCZWxsQ3VydmU9Ri5DbHJTaGFwZVRpY2tDaGFydD1GLkNsclNoYXBlU2NhdHRlclBsb3Q9Ri5DbHJTaGFwZVBpZUNoYXJ0PUYuQ2xyU2hhcGVMaW5lQ2hhcnQ9Ri5DbHJTaGFwZUhlYXRNYXA9Ri5DbHJTaGFwZUdy'@;
put 'aWRDaGFydD1GLkNsclNoYXBlQ3VydmVDaGFydD1GLkNsclNoYXBlQ2xvdWRDaGFydD1GLkNsclNoYXBlQnViYmxlQ2hhcnQ9Ri5DbHJTaGFwZUJveFBsb3Q9Ri5DbHJTaGFwZUJhckNoYXJ0PUYuQ2xyU2hhcGVBeGlzQ2hhcnQ9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3Jp'@;
put 'cHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hh'@;
put 'cGVBeGlzQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMz'@;
put 'LjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3'@;
put 'LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1'@;
put 'IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0'@;
put 'LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4y'@;
put 'MiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBM'@;
put 'IDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2LjAw'@;
put 'NyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkg'@;
put 'MTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1'@;
put 'IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjgu'@;
put 'MyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMx'@;
put 'IDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg'@;
put 'TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBj'@;
put 'bHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2'@;
put 'IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy'@;
put 'dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43'@;
put 'OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4'@;
put 'LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwg'@;
put 'MzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLEYu'@;
put 'Q2xyU2hhcGVCYXJDaGFydD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpN'@;
put 'NCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8'@;
put 'cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2'@;
put 'IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9'@;
put 'Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcg'@;
put 'MTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM'@;
put 'IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy'@;
put 'IDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYg'@;
put 'MjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUg'@;
put 'MjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3'@;
put 'IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2'@;
put 'IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBM'@;
put 'IDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAxOS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAy'@;
put 'NiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAy'@;
put 'MyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAy'@;
put 'Ni44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQu'@;
put 'ODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3'@;
put 'LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYg'@;
put 'TCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIu'@;
put 'OTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQg'@;
put 'TCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxGLkNsclNoYXBlQm94UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1'@;
put 'SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40'@;
put 'IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5'@;
put 'IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIEwgMTkgMjQgWiBNIDIwLjYgMTEuNiBMIDI3LjQgMTEuNiBMIDI3LjQgMTcuMiBMIDIwLjYgMTcuMiBMIDIwLjYgMTEuNiBaIE0gMjcuNCAyMi40IEwgMjAuNiAyMi40IEwgMjAuNiAxOC44IEwgMjcuNCAxOC44IEwgMjcuNCAyMi40IFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMw'@;
put 'LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0'@;
put 'IFogTSAxOSAyNCBMIDI5IDI0IEwgMjkgMTAgTCAxOSAxMCBaIE0gMjEgMTIgTCAyNyAxMiBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIg'@;
put 'MjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYg'@;
put 'TCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMTAgTCAyMy43MjggMTAgQyAyNC4xMDUgMTAuNTk2IDI0LjU2NCAxMS4xMzUgMjUuMDkgMTEuNiBMIDIwLjYgMTEuNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTIuOTg3IEMgMjcuOTA5IDEz'@;
put 'LjE3NyAyOC40NDUgMTMuMzEzIDI5IDEzLjM4NyBMIDI5IDI0IEwgMTkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5c'@;
put 'biAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYz'@;
put 'MyAxMCBMIDE5IDEwIEwgMTkgMjQgTCAyOSAyNCBMIDI5IDEzLjQyNyBDIDI5LjEwMyAxMy40NCAyOS4yMDYgMTMuNDUxIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAx'@;
put 'MiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDIxIDEyIEwgMjUuNDcyIDEyIEMgMjUuOTQgMTIuMzUyIDI2LjQ1MiAxMi42NSAyNyAxMi44ODUgTCAyNyAxNyBMIDIxIDE3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEg'@;
put 'MTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwg'@;
put 'NCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQg'@;
put 'MTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAyNCBMIDE5IDI0IEwgMTkgMTUuMzQ1IEMg'@;
put 'MTkuMDIxIDE1LjM0OCAyMC42IDE1LjM2IDIwLjYgMTUuMzYgTCAyMC42IDE3LjIgTCAyNy40IDE3LjIgTCAyNy40IDE1LjM2IEwgMjkgMTUuMzU3IEwgMjkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBMIDI3LjQgMTguOCBaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAy'@;
put 'MS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0'@;
put 'LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl'@;
put 'cnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDE5IDEwIEwgMTkgMTAuMDQ4IEwgMTcuNjI1IDEyLjM5NSBD'@;
put 'IDE2LjgwNyAxMy41ODMgMTcuNTcxIDE1LjE5NyAxOSAxNS4zNDUgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAx'@;
put 'NCBMIDE1IDE0IFogTSAyNyAxNyBMIDIxIDE3IEwgMjEgMTUuMzU3IEwgMjcgMTUuMzU3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xy'@;
put 'LWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAz'@;
put 'NS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUJ1YmJsZUNoYXJ0PSgwLG0u'@;
put 'Y2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1'@;
put 'IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4z'@;
put 'NDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3'@;
put 'LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBD'@;
put 'IDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAx'@;
put 'My40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUg'@;
put 'MjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMg'@;
put 'MTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0'@;
put 'IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2'@;
put 'LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAy'@;
put 'OSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+'@;
put 'XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAy'@;
put 'Mi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBa'@;
put 'Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2'@;
put 'LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBa'@;
put 'IE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1'@;
put 'NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAy'@;
put 'MS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4'@;
put 'PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMw'@;
put 'LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEu'@;
put 'NzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3'@;
put 'IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAx'@;
put 'OCAyMCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBM'@;
put 'IDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4z'@;
put 'NDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAx'@;
put 'MSAxMCBDIDEzLjIwOSAxMCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDExLjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUgOC42IDE0IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDEx'@;
put 'LjYgMTEgMTEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIz'@;
put 'IEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5'@;
put 'LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4'@;
put 'NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAy'@;
put 'MS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNC41NzkgMTUuMzU3IEMgMjMuNjM5IDE1Ljg2MyAyMyAxNi44NTcgMjMgMTggQyAyMyAx'@;
put 'OS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2Ljg1NyAyOC4zNjEgMTUuODYzIDI3LjQyMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMg'@;
put 'MTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1'@;
put 'NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy'@;
put 'Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku'@;
put 'MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUNsb3VkQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0'@;
put 'QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gzMlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMC45NzEgMTEuMjQzIEMgMjMuMzE0IDEzLjU4NiAyMi4zNjQgMTguMzM1IDE4Ljg0OSAyMS44NDkgQyAx'@;
put 'NS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy44NzkgOS44NDkgMTguNjI4IDguOSAyMC45NzEgMTEuMjQzIFogTSAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1'@;
put 'OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDIwLjM4OCAxNy43NjUgMjEuMzM4IDE0LjE1NiAxOS42OTcgMTIuNTE2IEMgMTguMDU3IDEwLjg3NiAxNC40NDggMTEuODI1IDExLjYzNiAxNC42MzcgWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjgg'@;
put 'MjIgWiBNIDI1IDIwLjYgQyAyNC4yMjcgMjAuNiAyMy42IDIxLjIyNyAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI3IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNyAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEw'@;
put 'NSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSAxMC4zNjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAxOC44NDkgMjEu'@;
put 'ODQ5IEMgMjIuMzY0IDE4LjMzNSAyMy4zMTQgMTMuNTg2IDIwLjk3MSAxMS4yNDMgQyAxOC42MjggOC45IDEzLjg3OSA5Ljg0OSAxMC4zNjQgMTMuMzY0IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1'@;
put 'IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41'@;
put 'NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQg'@;
put 'MzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMx'@;
put 'NCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAy'@;
put 'NC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1'@;
put 'IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iNyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+'@;
put 'XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu'@;
put 'ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIz'@;
put 'Ljk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAy'@;
put 'MiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44'@;
put 'OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1'@;
put 'LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuMDQ5IDEwLjY3OSAxNi40NTMgOS40OTIgMTguOTU2IDEwLjEyNCBMIDE4LjAwOCAxMS43NDEgQyAxNi4xOCAxMS41MTggMTMuNjk1IDEyLjU3OCAxMS42'@;
put 'MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDE5LjIyOCAxOC45MjUgMjAuMjM3IDE2Ljk5OCAyMC40NTYgMTUuMzU3IEwgMjIuMjIgMTUuMzU3IEMgMjIuMDA2IDE3'@;
put 'LjQ3NyAyMC44MzggMTkuODYxIDE4Ljg0OSAyMS44NDkgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUg'@;
put 'MjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40'@;
put 'IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQg'@;
put 'MTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQg'@;
put 'WiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAy'@;
put 'Ljg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTguOTU2IDEwLjEyNCBDIDE2LjQ1MyA5LjQ5MiAxMy4wNDkgMTAuNjc5IDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkg'@;
put 'QyAyMC44MzggMTkuODYxIDIyLjAwNiAxNy40NzcgMjIuMjIgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42'@;
put 'NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45Mjgg'@;
put 'MjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5'@;
put 'LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1'@;
put 'IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9w'@;
put 'YXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2'@;
put 'LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1'@;
put 'LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAx'@;
put 'NC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw'@;
put 'NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAu'@;
put 'OTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45'@;
put 'NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAy'@;
put 'Mi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAg'@;
put 'PHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAxMS44IDYuMiAxMS40NDIgNi4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcgMTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcu'@;
put 'ODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIgMTcuOTY0IDE3LjU4OCAxOC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1'@;
put 'LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1LjggMTcuOTgxIDIzLjQ2OSAxNi40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2LjkxMSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDEx'@;
put 'LjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5'@;
put 'NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMyAxMiBDIDE0Ljgx'@;
put 'NyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0'@;
put 'IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2'@;
put 'IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2'@;
put 'IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4y'@;
put 'IDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAy'@;
put 'OS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4y'@;
put 'MDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUg'@;
put 'MjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0'@;
put 'OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAy'@;
put 'IDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE3LjQ3NiAxMi42MTIgMTcuMzc5IDEyLjg0MyAxNy4zMyAxMy4wNzcgQyAxNy4yNjIgMTIuOTQ4IDE3LjE5MiAxMi44MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5'@;
put 'NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDExIEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBMIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTku'@;
put 'ODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC42NCAxNi41OTggMTguMzg1IDE1Ljc0'@;
put 'NCAxOC4xNDcgMTUuMDQ0IEMgMTguNDA3IDE1LjIxNSAxOC43MTcgMTUuMzI2IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMz'@;
put 'LjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4n'@;
put 'KSxGLkNsclNoYXBlR3JpZENoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwx'@;
put 'NSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoi'@;
put 'Lz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4g'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDMyIDYgQyAzMy4xMDUgNiAzNCA2Ljg5NSAzNCA4IEwgMzQgMTUg'@;
put 'QyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD'@;
put 'IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwg'@;
put 'MTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIxIDE5IEwgMzIgMTkgQyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwgMzQgMjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMS1hbGVydGVkIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAxOS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1'@;
put 'LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtYWxlcnRlZCIg'@;
put 'ZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC1hbGVydGVkIiBk'@;
put 'PSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk'@;
put 'IGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4w'@;
put 'MzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUg'@;
put 'MTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAyMC4wMTQgMTcgMTkuMTk1IDE2LjI4NyAxOS4wMyAxNS4zNDggQyAxOS4wNDEgMTUuMzQ5IDE5LjA1MyAxNS4z'@;
put 'NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDMzLjk2OCAxNS4zNTcgQyAzMy44IDE2LjI5MiAzMi45ODMgMTcgMzIgMTcgWiBNIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjEuMzcyIDYgTCAxOSAxMC4wNDggWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3'@;
put 'IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkg'@;
put 'MjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAw'@;
put 'NCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIy'@;
put 'LjU5IDYuMDU2IEMgMjIuNTkgNi43MjkgMjIuNjggNy4zODEgMjIuODQ4IDggTCAyMSA4IEwgMjEgMTUgTCAzMiAxNSBMIDMyIDEzLjE3NSBDIDMyLjcxNyAxMi45NzIgMzMuMzg5IDEyLjY2NCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8'@;
put 'Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg'@;
put 'ZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIyLjU5IDYgQyAyMi41OSA2LjAxOSAyMi41OSA2LjAzNyAyMi41OSA2'@;
put 'LjA1NiBDIDIyLjU5IDEwLjE0MSAyNS45MDEgMTMuNDUyIDI5Ljk4NiAxMy40NTIgQyAzMS40NjYgMTMuNDUyIDMyLjg0NCAxMy4wMTggMzQgMTIuMjY5IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1'@;
put 'IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAz'@;
put 'MiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2'@;
put 'IiByPSI1Ii8+JyksRi5DbHJTaGFwZUhlYXRNYXA9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMx'@;
put 'IDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDI4IDEwIEwgMjggMjYgTCA4IDI2IFogTSA5LjYg'@;
put 'MjQgTCAxNC4xIDI0IEwgMTQuMSAxOC44IEwgOS42IDE4LjggWiBNIDE0LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAxNC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDI2IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAy'@;
put 'NiAxNy4yIFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4z'@;
put 'MzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+'@;
put 'XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjEuOSAxMS42IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDEyLjI4NyBDIDI2LjYxMSAxMi42NzkgMjcuMjg0IDEyLjk4MyAyOCAxMy4xODIgTCAyOCAy'@;
put 'NiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAxMS42IEwgMTUuNyAx'@;
put 'Ny4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxMS42IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBa'@;
put 'Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDE5LjAyOCAxMCBMIDE4LjA5MSAxMS42IEwgMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxNS4zNTcgTCAyMS45IDE1LjM1NyBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgTCAyNiAxNS4zNTcgTCAyOCAxNS4zNTcg'@;
put 'TCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAyNCBMIDIw'@;
put 'LjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2'@;
put 'OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQg'@;
put 'NyBaIE0gOCAyNiBMIDI4IDI2IEwgMjggMTAgTCA4IDEwIFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTIgTCAy'@;
put 'NiAxMiBaIE0gMjAgMTIgTCAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAz'@;
put 'NCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjIuMzEyIDYuODE3IDIyLjczMiA4LjU2NiAyMy42MzMgMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwg'@;
put 'MjggMTMuMjMyIEMgMjguNDIxIDEzLjM0NSAyOC44NTkgMTMuNDIyIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkg'@;
put 'TCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI1LjU4NCAxMiBDIDI1LjcxOSAxMi4xIDI1Ljg1OCAxMi4xOTYgMjYgMTIuMjg3IFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAx'@;
put 'NCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMjItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxOS4wMjggMTAg'@;
put 'TCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3'@;
put 'IEwgMjIgMTUuMzU3IEwgMjYgMTUuMzU3IFogTSAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgTCAxNy44NTYgMTIgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3'@;
put 'IEwgMjAgMTUuMzU3IFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAx'@;
put 'MS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDEx'@;
put 'LjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVMaW5lQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBa'@;
put 'IE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMw'@;
put 'LjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcG9seWdvbj5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIg'@;
put 'NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk2IDMzLjEwNSA1IDMyIDUgWiBNIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTku'@;
put 'MDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuNjUgMTMgTCAzMS4zNSAxNC4yOCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMy'@;
put 'IDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMx'@;
put 'IEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAy'@;
put 'MS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BvbHlnb24+XG4gIDxjaXJjbGUgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzAu'@;
put 'MzIgMTMuNDggTCAzMS4zOCAxNC4yOCBMIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuMzEgMTMuNDYgQyAyNS4wNSAxMy4xIDIxLjk2OSA5LjIz'@;
put 'MyAyMi41NyA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgMTIuMzQgQyAzMi44OTUgMTMuMDM2IDMxLjYyNiAxMy40MjkgMzAuMzIgMTMuNDggWiI+PC9w'@;
put 'YXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMy'@;
put 'IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUuNjIgMTUuMjIyIEwgOS42MDIgMjMuOTY4IEwgNS41NSAyMC4zODQgTCA2LjYxIDE5LjE4NiBMIDkuMzA4IDIxLjU3MiBMIDE1LjYzNCAxMi4zOCBMIDIyLjM4NCAyMi4zOTUgTCAyNy43MTcgMTUuMzQ4IEwg'@;
put 'MjkuNzI0IDE1LjM0OCBMIDIyLjMwOCAyNS4xNDUgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5'@;
put 'IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUg'@;
put 'MTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjcuNDUyIDE1LjM1NyBMIDIyLjM4IDIyLjA2IEwgMTUuNjMgMTIgTCA5LjI4IDIxLjI4IEwgNi43NSAxOS4wNCBMIDUu'@;
put 'NDIgMjAuNTMgTCA5LjY1IDI0LjI4IEwgMTUuNjEgMTUuNTYgTCAyMi4yOCAyNS41IEwgMjkuOTU5IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi'@;
put 'IGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEu'@;
put 'OTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZVBpZUNoYXJ0PSgwLG0uY2xySWNvblNWRyko'@;
put 'J1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQg'@;
put 'NyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMu'@;
put 'NDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIz'@;
put 'LjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42'@;
put 'IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg'@;
put 'MzEgQyAzMiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBD'@;
put 'IDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM'@;
put 'IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy'@;
put 'IDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBM'@;
put 'IDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQg'@;
put 'MjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4x'@;
put 'OTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMg'@;
put 'MzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAz'@;
put 'Mi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4'@;
put 'IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAy'@;
put 'OSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBN'@;
put 'IDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI3IDE3IEwgMTkgMTcgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDE5LjA0MyAxNS4zNDkgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAx'@;
put 'IDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNi44MzEgMTUuMzU3IEMgMjYuOTQyIDE1Ljg4NyAyNyAxNi40MzcgMjcgMTcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2'@;
put 'IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1'@;
put 'NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAy'@;
put 'IDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDE3IEwgMjcgMTcgQyAyNyAxNi40MzcgMjYuOTQyIDE1Ljg4NyAyNi44MzEgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBM'@;
put 'IDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2'@;
put 'OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVTY2F0dGVy'@;
put 'UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMx'@;
put 'IDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjEx'@;
put 'MSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5'@;
put 'MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBD'@;
put 'IDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9'@;
put 'Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcg'@;
put 'MTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBD'@;
put 'IDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAy'@;
put 'Ny41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41'@;
put 'ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45'@;
put 'MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMx'@;
put 'IDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45'@;
put 'NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAu'@;
put 'OTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAx'@;
put 'NC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44'@;
put 'MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4'@;
put 'LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg'@;
put 'MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42Mzcg'@;
put 'MjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4z'@;
put 'NzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAy'@;
put 'Mi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu'@;
put 'NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z'@;
put 'NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1'@;
put 'LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYg'@;
put 'MTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEz'@;
put 'OSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNIDE1LjE3'@;
put 'NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAy'@;
put 'NC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIg'@;
put 'MjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFoiLz5cbiAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUg'@;
put 'MjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUu'@;
put 'NDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4'@;
put 'MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAy'@;
put 'Ljg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu'@;
put 'OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx'@;
put 'My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5'@;
put 'IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42'@;
put 'MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw'@;
put 'Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w'@;
put 'ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg'@;
put 'MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu'@;
put 'NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5'@;
put 'MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBj'@;
put 'eT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0g'@;
put 'OS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42'@;
put 'NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4w'@;
put 'NjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAx'@;
put 'OS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYz'@;
put 'NiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQu'@;
put 'ODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQu'@;
put 'MDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAy'@;
put 'Ny45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41'@;
put 'OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMu'@;
put 'MDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAx'@;
put 'Ny42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu'@;
put 'OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx'@;
put 'My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5'@;
put 'IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42'@;
put 'MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw'@;
put 'Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w'@;
put 'ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg'@;
put 'MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu'@;
put 'NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5'@;
put 'MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44'@;
put 'NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1'@;
put 'IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsLW9wYWNpdHk9IjAiLz4nKSxG'@;
put 'LkNsclNoYXBlVGlja0NoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIg'@;
put 'MzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA2IDI1IEwgOCAy'@;
put 'NSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40'@;
put 'NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAz'@;
put 'MSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMg'@;
put 'MjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg'@;
put 'MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg'@;
put 'WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwgMTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIw'@;
put 'IDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAyNSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAyOC4yOTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxjaXJjbGUg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0'@;
put 'IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDgg'@;
put 'QyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAy'@;
put 'MyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBM'@;
put 'IDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBM'@;
put 'IDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQg'@;
put 'MTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUg'@;
put 'TCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMg'@;
put 'MjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAyNS4wMiAyNy43MjMgMjUgTCAyNSAyNSBMIDI1IDIyIEwgMjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAyMiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEw'@;
put 'IDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQg'@;
put 'MTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4w'@;
put 'MDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxGLkNsclNoYXBlQmVsbEN1cnZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyOUgzQTEsMSwwLDEsMSwzLDI3SDMzQTEsMSwwLDEsMSwzMywyOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNWgtLjYyYTguMTEsOC4xMSwwLDAsMS04LTYuNjdDMjMuNjIsMTQuNDQsMjEuODksNy45NCwxOCw3Ljk0cy01LjY5LDYuNTEtNi4zOCwxMC4zOWE4LjExLDguMTEsMCwwLDEtOCw2LjY1SDNhMSwxLDAs'@;
put 'MSwxLDAtMmguNkE2LjExLDYuMTEsMCwwLDAsOS42LDE4YzEuNDEtNy44OCw0LjMtMTIsOC4zNS0xMnM2LjkzLDQuMTYsOC4zMywxMmE2LjExLDYuMTEsMCwwLDAsNiw1SDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxG'@;
put 'LkNoYXJ0U2hhcGVzPXsiYXhpcy1jaGFydCI6Ri5DbHJTaGFwZUF4aXNDaGFydCwiYmFyLWNoYXJ0IjpGLkNsclNoYXBlQmFyQ2hhcnQsImJ1YmJsZS1jaGFydCI6Ri5DbHJTaGFwZUJ1YmJsZUNoYXJ0LCJjbG91ZC1jaGFydCI6Ri5DbHJTaGFwZUNsb3VkQ2hhcnQsImN1cnZlLWNoYXJ0IjpG'@;
put 'LkNsclNoYXBlQ3VydmVDaGFydCwiZ3JpZC1jaGFydCI6Ri5DbHJTaGFwZUdyaWRDaGFydCwibGluZS1jaGFydCI6Ri5DbHJTaGFwZUxpbmVDaGFydCwicGllLWNoYXJ0IjpGLkNsclNoYXBlUGllQ2hhcnQsInRpY2stY2hhcnQiOkYuQ2xyU2hhcGVUaWNrQ2hhcnQsInNjYXR0ZXItcGxvdCI6'@;
put 'Ri5DbHJTaGFwZVNjYXR0ZXJQbG90LCJib3gtcGxvdCI6Ri5DbHJTaGFwZUJveFBsb3QsImhlYXQtbWFwIjpGLkNsclNoYXBlSGVhdE1hcCwiYmVsbC1jdXJ2ZSI6Ri5DbHJTaGFwZUJlbGxDdXJ2ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ2hhcnRTaGFwZXMsImFuYWx5dGljcyIsKDAs'@;
put 'eC5kZXNjcmlwdG9yQ29uZmlnKShGLkNoYXJ0U2hhcGVzWyJsaW5lLWNoYXJ0Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5DaGFydFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAq'@;
put 'KiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db21tZXJjZVNoYXBlcz1GLkNsclNoYXBlRmFjdG9yeT1GLkNsclNoYXBlRW1wbG95ZWU9Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXA9Ri5DbHJTaGFwZVJ1YmxlPUYuQ2xyU2hhcGVQZXNvPUYuQ2xyU2hhcGVDb2luQmFnPUYuQ2xyU2hhcGVCaXRj'@;
put 'b2luPUYuQ2xyU2hhcGVZZW49Ri5DbHJTaGFwZVdvbj1GLkNsclNoYXBlUnVwZWU9Ri5DbHJTaGFwZVBvdW5kPUYuQ2xyU2hhcGVFQ2hlY2s9Ri5DbHJTaGFwZURvbGxhckJpbGw9Ri5DbHJTaGFwZUJhbms9Ri5DbHJTaGFwZUNyZWRpdENhcmQ9Ri5DbHJTaGFwZURvbGxhcj1GLkNsclNoYXBl'@;
put 'RXVybz1GLkNsclNoYXBlU3RvcmU9Ri5DbHJTaGFwZVdhbGxldD1GLkNsclNoYXBlU2hvcHBpbmdDYXJ0PUYuQ2xyU2hhcGVQaWdneUJhbms9Ri5DbHJTaGFwZVNob3BwaW5nQmFnPUYuQ2xyU2hhcGVDYWxjdWxhdG9yPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3It'@;
put 'Y29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlQ2Fs'@;
put 'Y3VsYXRvcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk04LDMyVjRIMjhWMzJa'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEyLDhIMjUuNjdWNkgxMWExLDEsMCwwLDAtMSwxdjQuNjdoMloiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiBwb2ludHM9IjEyIDE2IDEwIDE2IDEwIDE4IDE0IDE4IDE0IDE0IDEyIDE0IDEyIDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNCAxNiAyMiAxNiAyMiAxOCAyNiAxOCAyNiAx'@;
put 'NCAyNCAxNCAyNCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHBvaW50cz0iMTggMTYgMTYgMTYgMTYgMTggMjAgMTggMjAgMTQgMTggMTQgMTggMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBwb2ludHM9IjEyIDIyIDEwIDIyIDEwIDI0IDE0IDI0IDE0IDIwIDEyIDIwIDEyIDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgcG9pbnRzPSIyNCAy'@;
put 'MiAyMiAyMiAyMiAyNCAyNiAyNCAyNiAyMCAyNCAyMCAyNCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHBvaW50cz0iMTggMjIgMTYgMjIgMTYgMjQgMjAgMjQgMjAgMjAgMTggMjAgMTggMjIiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiBwb2ludHM9IjEyIDI4IDEwIDI4IDEwIDMwIDE0IDMwIDE0IDI2IDEyIDI2IDEyIDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMTAiIHBvaW50cz0iMjQgMjggMjIgMjggMjIgMzAgMjYgMzAgMjYgMjYgMjQgMjYgMjQgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgcG9pbnRzPSIxOCAyOCAxNiAyOCAxNiAzMCAyMCAzMCAy'@;
put 'MCAyNiAxOCAyNiAxOCAyOCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMiwyOEgxMFYy'@;
put 'NmgyWm0wLTZIMTBWMjBoMlptMC02SDEwVjE0aDJabTcsMTJIMTdWMjZoMlptMC02SDE3VjIwaDJabTAtNkgxN1YxNGgyWm03LDEySDI0VjI2aDJabTAtNkgyNFYyMGgyWm0wLTZIMjRWMTRoMlptMC03SDEwVjVIMjZaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQmFnPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUsMTJWOS4wNWE3LDcsMCwxLDAtMTQsMHY3YTEsMSwwLDAsMCwyLDBWMTRoOFYxMkgxM1Y5LjA1YTUsNSwwLDEsMSwxMCwwVjE2YTEsMSwwLDEsMCwyLDBWMTRoNVYzMkg2VjE0SDlWMTJI'@;
put 'NFYzMi4wOUExLjkxLDEuOTEsMCwwLDAsNS45MSwzNEgzMC4wOUExLjkxLDEuOTEsMCwwLDAsMzIsMzIuMDlWMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTMsOS4yMmE1LDUsMCwxLDEsMTAsMFYxMmgyVjkuMjJh'@;
put 'Nyw3LDAsMSwwLTE0LDBWMTJoMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNSwxMnYzLjFhMSwxLDAsMSwxLTIsMFYxMkgxM3YzLjFhMSwxLDAsMCwxLTIsMFYxMkg0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs'@;
put 'MCwwLDItMlYxMloiLz4nKSxGLkNsclNoYXBlUGlnZ3lCYW5rPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNzIsMTAuNDdhMTEuNjUsMTEuNjUsMCwwLDAtNi4zMS41MkEuOC44LDAsMSwwLDE0LDEyLjQ4'@;
put 'LDEwLjExLDEwLjExLDAsMCwxLDE5LjQ0LDEyYS44LjgsMCwxLDAsLjI4LTEuNTdaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjUuMzgiIGN5PSIxNi43MSIgcj0iMS4zNiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNS41MSwxOC42M2ExLDEsMCwwLDAtLjg0LS40NCwzLjQyLDMuNDIsMCwwLDEtMi4wOS0xLjEyLDE3LjM1LDE3LjM1LDAsMCwxLTIuNjMtMy43OGwyLjg4LTQuNUExLjg5LDEuODksMCwwLDAsMzMsN2Ex'@;
put 'Ljc3LDEuNzcsMCwwLDAtMS4zMy0xLDEwLjEyLDEwLjEyLDAsMCwwLTUuMzkuNzUsMTIuNzIsMTIuNzIsMCwwLDAtMi43MiwxLjYzLDE2Ljk0LDE2Ljk0LDAsMCwwLTUuMTYtMS4zOUMxMS4zMSw2LjMsNC44MywxMC45LDQsMTdINGEyLjU2LDIuNTYsMCwwLDEtMS4zOC0xLjUzLDEuODEsMS44'@;
put 'MSwwLDAsMSwuMTQtMS40LDEuMTksMS4xOSwwLDAsMSwuNDMtLjQzLDEuMDgsMS4wOCwwLDAsMC0xLjEyLTEuODVBMy4zMSwzLjMxLDAsMCwwLC45MSwxM2E0LDQsMCwwLDAtLjMzLDMuMDhBNC43Niw0Ljc2LDAsMCwwLDMsMTguOTVsLjkyLjQ2YTE3LjU4LDE3LjU4LDAsMCwwLDEuODIsN2wu'@;
put 'MTcuMzhBMjMsMjMsMCwwLDAsOS4yLDMxLjg4YTEsMSwwLDAsMCwuNzUuMzRoNC41MmExLDEsMCwwLDAsLjkyLTEuMzhMMTUsMjkuOTRsMS4xOC4xM2EyMC4zMywyMC4zMywwLDAsMCw0LDBjLjM3LjYuNzcsMS4yLDEuMjEsMS43OWExLDEsMCwwLDAsLjguNDFoNC4zNGExLDEsMCwwLDAsLjky'@;
put 'LTEuMzljLS4xNy0uNC0uMzQtLjgzLS40Ny0xLjItLjE4LS41My0uMzItMS0uNDMtMS40NUExMy4xOCwxMy4xOCwwLDAsMCwyOS41NiwyNmExMi41LDEyLjUsMCwwLDAsMywwLDEsMSwwLDAsMCwuNzgtLjYybDIuMjYtNS44MUExLDEsMCwwLDAsMzUuNTEsMTguNjNabS0zLjc4LDUuNDRhMTEu'@;
put 'MzcsMTEuMzcsMCwwLDEtMi4zNS0uMTFoMGE4LjIsOC4yLDAsMCwxLTIuNTMtLjg3LDEsMSwwLDAsMC0uOTMsMS43NywxMS43MiwxMS43MiwwLDAsMCwxLjI5LjU4LDgsOCwwLDAsMS0xLjgsMS4xNmwtMS4wNi40OHMuNDksMi4xOS44MiwzLjE2SDIyLjc5Yy0uMjQtLjM0LTEuNDUtMi4zNi0x'@;
put 'LjQ1LTIuMzZsLS42Ny4wOWExOC41MywxOC41MywwLDAsMS00LjI1LjEyYy0uNjYtLjA2LTEuNzYtLjItMi42Mi0uMzVsLTEuNTUtLjI3cy42MywyLjQzLjc1LDIuNzR2MEgxMC40MkEyMC41NywyMC41NywwLDAsMSw3Ljc2LDI2bC0uMTgtLjM5QTE0LjYyLDE0LjYyLDAsMCwxLDYsMTcuNDhj'@;
put 'LjU0LTUuMTksNi4xMi05LjExLDEyLjE5LTguNTRhMTUuNDcsMTUuNDcsMCwwLDEsNS4wOCwxLjQ4bC42Mi4yOS41LS40N0ExMC4yOSwxMC4yOSwwLDAsMSwyNyw4LjU0YTguMjUsOC4yNSwwLDAsMSw0LS42NWwtMy4zOCw1LjI5LjI1LjVoMGEyMS4xNiwyMS4xNiwwLDAsMCwzLjMxLDQuODQs'@;
put 'Ni40OSw2LjQ5LDAsMCwwLDIuMTQsMS4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNSwxOC44N0E1LjgzLDUuODMsMCwwLDEsMzMsMTcuNjFhMjEuNjMsMjEuNjMsMCwwLDEtMy4yOS00Ljg0bDMuMzktNS4yOWEu'@;
put 'OS45LDAsMCwwLS41NC0xLjM4LDkuNjcsOS42NywwLDAsMC01LjEzLjcyLDEyLDEyLDAsMCwwLTMuMTMsMkExNy4zNywxNy4zNywwLDAsMCwxOC42LDcuMTVDMTEuOCw2LjUyLDUuMjcsMTAuOSw0LjU0LDE3bC0uMTQtLjA3QTIuNzYsMi43NiwwLDAsMSwyLjksMTUuMjlhMiwyLDAsMCwxLC4x'@;
put 'NS0xLjU1LDEuMzIsMS4zMiwwLDAsMSwuNDctLjQ4LDEuMDgsMS4wOCwwLDEsMC0xLjEyLTEuODUsMy40NSwzLjQ1LDAsMCwwLTEuMjMsMS4yNUE0LjE2LDQuMTYsMCwwLDAsLjg0LDE1LjlhNSw1LDAsMCwwLDIuNTcsM2wxLC41NGExOC42MiwxOC42MiwwLDAsMCwyLDcuMywyMywyMywwLDAs'@;
put 'MCwzLDQuNzksMSwxLDAsMCwwLC44LjM4aDMuNjFhLjUyLjUyLDAsMCwwLC40LS43NUwxNCwzMC4zOGExMSwxMSwwLDAsMS0uMzMtMS4xOGMuOTEuMTYsMi4wOC4zMSwyLjg3LjM4YTIwLjA3LDIwLjA3LDAsMCwwLDMuMTIsMGMuMzkuNy43OSwxLjMzLDEuMTUsMS44NWEuOTMuOTMsMCwwLDAs'@;
put 'Ljc3LjQxaDMuMTFhLjY1LjY1LDAsMCwwLC42MS0uODVjLS4yMy0uNzQtLjUzLTEuNzUtLjcxLTIuMzdhMTUuOSwxNS45LDAsMCwwLDMuNzUtMS43NmMuMTYtLjExLjMyLS4yNi40OC0uMzlhMTMuNzcsMTMuNzcsMCwwLDEtMi40Mi0xLC44LjgsMCwwLDEsLjc0LTEuNDIsMTEuNjQsMTEuNjQs'@;
put 'MCwwLDAsMy4xOCwxLjEsMTMuMzEsMTMuMzEsMCwwLDAsMi42OC4xMiwxLDEsMCwwLDAsLjktLjY2bDEuNzMtNC40NEExLDEsMCwwLDAsMzUsMTguODdaTTEzLjc5LDExLjU5YS44Ni44NiwwLDAsMS0uMy4wNS44NS44NSwwLDAsMS0uMy0xLjY0LDEyLjQxLDEyLjQxLDAsMCwxLDYuNjktLjU1'@;
put 'Ljg1Ljg1LDAsMSwxLS4zLDEuNjdBMTAuNzUsMTAuNzUsMCwwLDAsMTMuNzksMTEuNTlabTEyLjUyLDYuMTJhMS40NCwxLjQ0LDAsMSwxLDEuNDQtMS40NEExLjQ0LDEuNDQsMCwwLDEsMjYuMzIsMTcuNzJaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQ2FydD0oMCxtLmNsckljb25TVkcpKCc8'@;
put 'Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjA4LDUuMzdBMSwxLDAsMCwwLDMyLjMxLDVIMTEuNDlsLjY1LDJIMzFMMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVM'@;
put 'OS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDMuMTctMTRBMSwxLDAsMCwwLDMzLjA4LDUu'@;
put 'MzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwLjcxIDcgMjEuODcgNSAxMS40'@;
put 'OSA1IDEyLjE0IDcgMjAuNzEgNyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMTUsMTUuNCwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42'@;
put 'MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEs'@;
put 'MCwwLDAsMS0uNzhsMS4wOS00LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx'@;
put 'My4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTcsN2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDExLjQ5bC42NSwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVsLS40MiwwTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2'@;
put 'LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjU3LTYuOTFBNy41MSw3LjUxLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+'@;
put 'XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xLDYuMzlBMSwxLDAsMCwwLDMyLjMxLDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNB'@;
put 'Mi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMy4yLTEzQTEsMSwwLDAsMCwzMy4xLDYuMzlaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUi'@;
put 'IGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDkuMjFMOC43Niw0LjU3YTEsMSww'@;
put 'LDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYt'@;
put 'MWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuMTktNC44NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxj'@;
put 'aXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDku'@;
put 'OTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjcxLTdBNy40OSw3LjQ5LDAsMCwxLDMwLDEz'@;
put 'LjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1p'@;
put 'LWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVXYWxsZXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgzMVY5YTEsMSwwLDAsMC0xLTFINmExLDEsMCwwLDEtMS0uODJWNi44MkExLDEsMCwwLDEsNiw2SDI5'@;
put 'LjU4YTEsMSwwLDAsMCwwLTJINkEzLDMsMCwwLDAsMyw3YTMuMDgsMy4wOCwwLDAsMCwwLC4zNlYyNy45M0E0LjEsNC4xLDAsMCwwLDcuMTMsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNWgxYTEsMSwwLDAsMCwxLTFWMTZBMSwxLDAsMCwwLDMyLDE1Wk0yOSwzMEg3LjEzQTIuMTEsMi4xMSwwLDAs'@;
put 'MSw1LDI3LjkzVjkuODhBMy4xMSwzLjExLDAsMCwwLDYsMTBIMjl2NUgyMmE1LDUsMCwwLDAsMCwxMGg3Wm0yLTdIMjJhMywzLDAsMCwxLDAtNkgzMVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMy4wMSIg'@;
put 'Y3k9IjIwIiByPSIxLjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi45NCwxNEgzMVY5YTEsMSwwLDAsMC0xLTFINkExLDEsMCwwLDEsNSw3SDVWN0ExLDEsMCwwLDEsNiw2SDI5LjZhMSwxLDAsMSwwLDAtMkg2QTIu'@;
put 'OTQsMi45NCwwLDAsMCwzLDYuODh2MjFBNC4xMyw0LjEzLDAsMCwwLDcuMTUsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNmgxLjk0YS45My45MywwLDAsMCwxLS45MXYtMTBBMS4wOCwxLjA4LDAsMCwwLDMyLjk0LDE0Wk0zMiwyNGwtOC41OCwwYTMuODcsMy44NywwLDAsMS0zLjczLTQsMy44Nywz'@;
put 'Ljg3LDAsMCwxLDMuNzMtNEwzMiwxNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjI0LjA0IiBjeT0iMTkuOTIiIHI9IjEuNSIvPicpLEYuQ2xyU2hhcGVTdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiIGQ9Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwuNDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCww'@;
put 'LDAsMy0xLjA3LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdBMiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0zMCwxOC4xM0EyLjY4LDIuNjgsMCww'@;
put 'LDEsMjcuODIsMTdMMjcsMTUuODgsMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OCwyMC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDE1LDE1Ljg4LDE0LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OCw4LjE4LDE3QTIuNjgsMi42OCwwLDAs'@;
put 'MSw2LDE4LjEzYTIuNjQsMi42NCwwLDAsMS0yLS44OFYxNC4xN0w4LjA4LDZIMjcuOTJMMzIsMTQuMTZ2LjY3bDAsMi4zOUEyLjY3LDIuNjcsMCwwLDEsMzAsMTguMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjgs'@;
put 'MzBIMTZWMjJIMTR2OEg4VjIySDZ2OGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIs'@;
put 'NEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAs'@;
put 'NC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMTUsMTQuNHYxLjUyTDE0LjE4LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OFYxNC40TDExLjU5LDZIMTZabTEy'@;
put 'LDEuNDhMMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OGwwLDBWMTQuNEwyMCw2aDQuNDVMMjcsMTQuNFoiLz4nKSxGLkNsclNoYXBlRXVybz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i'@;
put 'TTMxLjQ4LDI4LjQ5YTEsMSwwLDAsMC0xLjM4LS4zMkExMiwxMiwwLDAsMSwxMi40NSwyMkgyNC4xNmExLDEsMCwwLDAsMC0ySDExLjkzYTExLjE2LDExLjE2LDAsMCwxLDAtNEgyNC4xNmExLDEsMCwwLDAsMC0ySDEyLjQ1QTEyLDEyLDAsMCwxLDMwLjA2LDcuOGExLDEsMCwwLDAsMS4wNi0x'@;
put 'LjdBMTQsMTQsMCwwLDAsMTAuMzQsMTRIMy41NGExLDEsMCwxLDAsMCwySDkuOTFhMTQsMTQsMCwwLDAtLjE2LDIsMTQsMTQsMCwwLDAsLjE2LDJIMy41NGExLDEsMCwxLDAsMCwyaDYuOGExNCwxNCwwLDAsMCwyMC44Myw3Ljg3QTEsMSwwLDAsMCwzMS40OCwyOC40OVoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNDIsMjUuMTZBMTAuODgsMTAuODgsMCwwLDEsOS4yMywyMUg1Ljg0YTEsMSwwLDAsMSwwLTJoM2MwLS4zNS0uMDUtLjcx'@;
put 'LS4wNS0xLjA3czAtLjYzLDAtLjkzaC0zYTEsMSwwLDAsMSwwLTJIOS4xOUExMC44NiwxMC44NiwwLDAsMSwyNS4zOCw4LjY5YTEuMjUsMS4yNSwwLDAsMS0xLjMyLDIuMTJBOC4zNiw4LjM2LDAsMCwwLDExLjgyLDE1aDkuMzZhMSwxLDAsMCwxLDAsMkgxMS4zM2E3LjcyLDcuNzIsMCwwLDAs'@;
put 'MCwyaDkuODJhMSwxLDAsMCwxLDAsMkgxMS44N2E4LjM2LDguMzYsMCwwLDAsMTIuMjIsNCwxLjI1LDEuMjUsMCwxLDEsMS4zMywyLjEyWiIvPicpLEYuQ2xyU2hhcGVEb2xsYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0yNiwyMS4xNWE2LjkxLDYuOTEsMCwwLDAtNC4zOC0zLjMyQTI2LDI2LDAsMCwwLDE5LDE3LjE5VjguMTJBMTAuMDUsMTAuMDUsMCwwLDEsMjMuODYsMTBhMSwxLDAsMCwwLDEuMzMtMS41QTExLjc1LDExLjc1LDAsMCwwLDE5LDYuMVYzYTEsMSwwLDAsMC0yLDBWNmMtNC40LjEt'@;
put 'Ni44MywyLjI5LTcuNTcsNC4xOEE1LjU2LDUuNTYsMCwwLDAsMTEuNjYsMTcsMTMuMiwxMy4yLDAsMCwwLDE3LDE4Ljg0VjI4YTEyLjMsMTIuMywwLDAsMS03LjE0LTIuNzRBMSwxLDAsMSwwLDguNDksMjYuNywxNC4wOSwxNC4wOSwwLDAsMCwxNywzMHYzYTEsMSwwLDAsMCwyLDBWMzBjMi44'@;
put 'Mi0uMTksNi4wNy0xLjA5LDcuMy00Ljc2QTUuMzMsNS4zMywwLDAsMCwyNiwyMS4xNVpNMTIuNzksMTUuMzJhMy41NywzLjU3LDAsMCwxLTEuNDktNC4zOUMxMS40MSwxMC42MywxMi41Myw4LjEyLDE3LDh2OC44QTEwLjcsMTAuNywwLDAsMSwxMi43OSwxNS4zMlpNMjQuNCwyNC41NmMtLjcy'@;
put 'LDIuMTQtMi4zMiwzLjE3LTUuNCwzLjRWMTkuMjNjLjY0LjE0LDEuMy4zLDIsLjUxYTUsNSwwLDAsMSwzLjE5LDIuMzJBMy4zNCwzLjM0LDAsMCwxLDI0LjQsMjQuNTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAg'@;
put 'ICAgICAgICAgIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNjUsMjEuNTljLTEsMy0zLjYxLDMuODQtNS45LDR2MmExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjcuNTlBMTEuNDcsMTEuNDcsMCwwLDEsMTEsMjVhMS4yNSwxLjI1LDAsMSwxLDEuNzEtMS44'@;
put 'Myw5LjExLDkuMTEsMCwwLDAsNC41NSwxLjk0VjE4LjgzYTkuNjMsOS42MywwLDAsMS0zLjczLTEuNDEsNC44LDQuOCwwLDAsMS0xLjkxLTUuODRjLjU5LTEuNTEsMi40Mi0zLjIzLDUuNjQtMy41MVY2LjI1YTEuMjUsMS4yNSwwLDAsMSwyLjUsMFY4LjExYTkuNjcsOS42NywwLDAsMSw0Ljks'@;
put 'MkExLjI1LDEuMjUsMCwwLDEsMjMsMTEuOTVhNy4xNCw3LjE0LDAsMCwwLTMuMjQtMS4zMXY2LjEzYy42LjEzLDEuMjQuMjcsMS45MS40OGE1Ljg1LDUuODUsMCwwLDEsMy42OSwyLjgyQTQuNjQsNC42NCwwLDAsMSwyNS42NSwyMy41OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC45MiwxOS42NGMtLjQtLjEyLS43OS0uMjItMS4xNy0uM3Y1Ljc2YzItLjIsMy4wNy0uOSwzLjUzLTIuM2EyLjE1LDIuMTUsMCwwLDAtLjE1LTEuNThBMy40OSwzLjQ5LDAsMCwwLDIwLjkyLDE5LjY0WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTEzLjk0LDEyLjQ4YTIuMzEsMi4zMSwwLDAsMCwxLDIuODcsNi41Myw2LjUzLDAsMCwwLDIuMzIuOTJWMTAuNTVDMTUuMTYsMTAuOCwxNC4xOSwxMS44NCwxMy45NCwxMi40OFoiLz4nKSxGLkNsclNo'@;
put 'YXBlQ3JlZGl0Q2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMiwwLDEySDRMNCw4Wk00LDI4VjI0SDMydjRaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjMiIHdpZHRoPSIyMiIgaGVpZ2h0PSIzMCIgcng9IjAuOTYiIHJ5PSIwLjk2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNikgcm90YXRlKDkwKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBz'@;
put 'dHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy'@;
put 'LDAsMCwwLDMyLDZabTAsMThINFYyMEgzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJhbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMuNSwxMy41NiwxOCw1LjIzbDE0LjUsOC4zM2ExLDEsMCwwLDAsMS0xLjczTDE4LDIu'@;
put 'OTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1'@;
put 'SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFM'@;
put 'MTguNjUsNy43MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42'@;
put 'M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjIuNzcsOEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwxLDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVBMy41MSwzLjUx'@;
put 'LDAsMCwxLDIwLDE0SDV2MkgzMVYxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDYsOS43NGwuNjgtMS4xNy0xLjQ5LS44NWEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44'@;
put 'NmgzLjIxbDMuOS0yLjI0LDEuMS42M0MxOS4zOSw5Ljg5LDE5LjQyLDkuODEsMTkuNDYsOS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMDUsNS4yNSwxOCwyLjkyLDIu'@;
put 'NSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjEuMDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTMuNSwxMy41Niw1LDEyLjY4VjE2SDMxVjEyLjcxbDEuNDguODVhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWk0xNy44NSw3LjExYS44LjgsMCwwLDEsLjgsMEwyNS4zNywxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFI'@;
put 'MTEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEu'@;
put 'MTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3'@;
put 'SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAs'@;
put 'MCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzksMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0bDYuNzItMy44'@;
put 'NmEuOC44LDAsMCwxLC44LDBsNSwyLjg3QTcuNDUsNy40NSwwLDAsMSwyMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0w1LDEyLjY4VjE2SDMxVjEzLjQyQTcuNTMsNy41MywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwxMy4yNGwuNTYuMzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwy'@;
put 'N0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCww'@;
put 'LDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNWEzLjUxLDMuNTEsMCwwLDEtMy01LjI2bC4xNC0uMjQtMS4zNS0uNzhMMTQuMzUsMTFIMTEuMTRsNi43Mi0z'@;
put 'Ljg2YS44LjgsMCwwLDEsLjgsMGwxLjc1LDEsMS42NS0yLjg2TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYxNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlRG9sbGFyQmlsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJh'@;
put 'MiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCw2YTQuMjUsNC4yNSwwLDAsMS0zLjktNEgzMlptMCwxLjYydjQuODNBNS44Nyw1Ljg3LDAsMCwwLDI2LjQ5LDI2aC0xN0E1Ljg3LDUuODcsMCwwLDAsNCwyMC40NFYxNS42QTUuODcsNS44NywwLDAsMCw5LjUxLDEwaDE3QTUuODcs'@;
put 'NS44NywwLDAsMCwzMiwxNS42Wk03LjksMTBBNC4yNSw0LjI1LDAsMCwxLDQsMTRWMTBaTTQsMjIuMDZBNC4yNSw0LjI1LDAsMCwxLDcuOSwyNkg0Wk0yOC4xLDI2QTQuMjUsNC4yNSwwLDAsMSwzMiwyMi4wNlYyNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTAuODVjLTMuNDcsMC02LjMsMy4yMS02LjMsNy4xNXMyLjgzLDcuMTUsNi4zLDcuMTUsNi4zLTMuMjEsNi4zLTcuMTVTMjEuNDcsMTAuODUsMTgsMTAuODVabTAsMTIuNjljLTIuNTksMC00LjctMi40OS00LjctNS41NXMyLjExLTUuNTUs'@;
put 'NC43LTUuNTUsNC43LDIuNDksNC43LDUuNTVTMjAuNTksMjMuNTUsMTgsMjMuNTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs'@;
put 'Mi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk00LDI2VjIxLjE1QTUuMTgsNS4xOCwwLDAsMSw4Ljc5LDI2Wk00LDE0Ljg1VjEwSDguNzlBNS4xOCw1LjE4LDAsMCwxLDQsMTQuODVaTTE4LDI1LjE1Yy0zLjQ3LDAtNi4zLTMuMjEtNi4zLTcuMTVzMi44My03LjE1LDYuMy03LjE1LDYuMywzLjIxLDYu'@;
put 'Myw3LjE1UzIxLjQ3LDI1LjE1LDE4LDI1LjE1Wk0zMiwyNkgyNy4yNUE1LjE4LDUuMTgsMCwwLDEsMzIsMjEuMTVabTAtMTEuMTVBNS4xOCw1LjE4LDAsMCwxLDI3LjI1LDEwSDMyWiIvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MiIgY3g9IjE4IiBjeT0iMTgiIHJ4PSI0IiByeT0iNC43MiIvPicpLEYuQ2xyU2hhcGVFQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE2IiB5PSIxNiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjIiLz5cbiAg'@;
put 'ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMCIgeT0iMjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM0'@;
put 'LDhIMTIuOTNhOC4zNSw4LjM1LDAsMCwxLC43OSwySDMzVjI2SDNWMTkuOWE3LjgzLDcuODMsMCwwLDEtMi0xLjM0VjI3YTEsMSwwLDAsMCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTQiIGQ9Ik02LjU3LDE4LjY4YTYuMTcsNi4xNywwLDAsMCw0LjMyLTEuNTksMS4yLDEuMiwwLDAsMCwuMzYtLjg0LDEuMDgsMS4wOCwwLDAsMC0xLjA5LTEuMTEsMSwxLDAsMCwwLS43MS4yNSw0LjMyLDQuMzIsMCwwLDEtMi44NCwxLDMuMzUsMy4zNSwwLDAsMS0z'@;
put 'LjQ2LTNoNy41M0ExLjI5LDEuMjksMCwwLDAsMTIsMTIuMDYsNS42OCw1LjY4LDAsMCwwLDYuMjcsNi4xNCw2LDYsMCwwLDAsLjQsMTIuNHYwQTYsNiwwLDAsMCw2LjU3LDE4LjY4Wk02LjI1LDguMzljMS44MiwwLDIuODcsMS4zOSwzLDMuMTZIMy4xM0MzLjM4LDkuNjksNC41Niw4LjM5LDYu'@;
put 'MjUsOC4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCw4SDEyLjkxYTguNjEsOC42MSwwLDAsMSwxLjIsNC4zOSw4LDgsMCwwLDEtNy43OCw4LjI3QTcuNTEsNy41MSwwLDAsMSwxLDE4LjQxVjI3YTEsMSwwLDAs'@;
put 'MCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4Wk0zMSwyM0gyMFYyMUgzMVptMC01SDE2VjE2SDMxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYuNTcsMTguNjhBNiw2LDAsMCwxLC40LDEyLjQ0'@;
put 'djBBNiw2LDAsMCwxLDYuMjcsNi4xNCw1LjY4LDUuNjgsMCwwLDEsMTIsMTIuMDZhMS4yOSwxLjI5LDAsMCwxLTEuMywxLjMySDMuMTVhMy4zNSwzLjM1LDAsMCwwLDMuNDYsMyw0LjMyLDQuMzIsMCwwLDAsMi44NC0xLDEsMSwwLDAsMSwuNzEtLjI1LDEuMDgsMS4wOCwwLDAsMSwxLjA5LDEu'@;
put 'MTEsMS4yLDEuMiwwLDAsMS0uMzYuODRBNi4xNyw2LjE3LDAsMCwxLDYuNTcsMTguNjhaTTkuMywxMS41NWMtLjE4LTEuNzctMS4yMy0zLjE2LTMtMy4xNnMtMi44NywxLjMtMy4xMiwzLjE2WiIvPicpLEYuQ2xyU2hhcGVQb3VuZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjksMzBIMTMuNEE4LjQ1LDguNDUsMCwwLDAsMTUsMjQuNjVWMjFoNC4zMWExLDEsMCwwLDAsMC0ySDE1VjExLjMxQTUuMjQsNS4yNCwwLDAsMSwyMC4yMSw2LDUuMTksNS4xOSwwLDAsMSwyNCw3LjczYTEsMSwwLDAsMCwx'@;
put 'LjQ4LTEuMzVBNy4xOSw3LjE5LDAsMCwwLDEzLDExLjMxVjE5SDguNzJhMSwxLDAsMSwwLDAsMkgxM3YzLjY1QzEzLDI5LjM4LDEwLjEyLDMwLDEwLDMwYTEsMSwwLDAsMCwuMTcsMkgyNy45YTEsMSwwLDEsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LjUsMjUuOTJIMTEuNzRhMS4yNSwxLjI1LDAsMCwxLS4yMi0yLjQ4Yy4xNSwwLDEuNzItLjQ5LDEuNzItMy41NFYxOWgtMi41YTEsMSwwLDAsMSwwLTJoMi41VjExLjg4YTUu'@;
put 'ODUsNS44NSwwLDAsMSw1LjcyLTYsNS42Myw1LjYzLDAsMCwxLDQuMjEsMS45NEExLjI1LDEuMjUsMCwxLDEsMjEuMyw5LjUxLDMuMDgsMy4wOCwwLDAsMCwxOSw4LjQyYTMuMzUsMy4zNSwwLDAsMC0zLjIyLDMuNDZWMTdoM2ExLDEsMCwwLDEsMCwyaC0zdjIuOUE3LjY1LDcuNjUsMCwwLDEs'@;
put 'MTUsMjUuNDJIMjQuNWExLjI1LDEuMjUsMCwwLDEsMCwyLjVaIi8+JyksRi5DbHJTaGFwZVJ1cGVlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsOEgyNC4xNEE3LjUyLDcuNTIsMCwwLDAsMjIuNiw2SDI4'@;
put 'YTEsMSwwLDAsMCwwLTJIMTBhMSwxLDAsMCwwLDAsMmg3LjU1YTUuNDIsNS40MiwwLDAsMSw0LjIsMkgxMGExLDEsMCwwLDAsMCwySDIyLjc5QTUuNTQsNS41NCwwLDAsMSwyMywxMS41MSw1LjQ4LDUuNDgsMCwwLDEsMTcuNTUsMTdIMTEuMTRhMSwxLDAsMCwwLS43NSwxLjY2TDIyLjA2LDMy'@;
put 'YTEsMSwwLDEsMCwxLjUtMS4zMkwxMy4zNSwxOWg0LjIxYTcuNTEsNy41MSwwLDAsMCw3LjMtOUgyOGExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYs'@;
put 'MTYsMCwwLDAsMTgsMlptNS44OCw5SDI2YTEsMSwwLDAsMSwwLDJIMjQuMjZjMCwuMDYsMCwuMTIsMCwuMTlhNi4wOSw2LjA5LDAsMCwxLTYsNi4yaC0ybDYuODIsOC4wNmExLjI1LDEuMjUsMCwwLDEtMS45MSwxLjYyTDEyLjYzLDE4Ljk0YTEuMjUsMS4yNSwwLDAsMSwxLTIuMDZoNC43MWEz'@;
put 'LjU5LDMuNTksMCwwLDAsMy40OC0zLjY5YzAtLjA3LDAtLjEzLDAtLjJoLTlhMSwxLDAsMCwxLDAtMmg4LjMyYTMuNDEsMy40MSwwLDAsMC0yLjc4LTEuNUgxMi43NWExLjI1LDEuMjUsMCwwLDEsMC0yLjVIMjZhMSwxLDAsMCwxLDAsMkgyMi42OEE2LjIzLDYuMjMsMCwwLDEsMjMuODgsMTFa'@;
put 'Ii8+JyksRi5DbHJTaGFwZVdvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE4SDI4Ljc1bC41LTJIMzNhMSwxLDAsMCwwLDAtMkgyOS43NGwyLjE3LTguNzZBMSwxLDAsMCwwLDMwLDQuNzZMMjcuNjgs'@;
put 'MTRIMjEuMzFMMTksNC43NmExLDEsMCwwLDAtMS45NCwwTDE0Ljc5LDE0SDguNDJMNi4xMyw0Ljc2YTEsMSwwLDAsMC0xLjk0LjQ4TDYuMzYsMTRIM2ExLDEsMCwwLDAsMCwySDYuODVsLjUsMkgzYTEsMSwwLDAsMCwwLDJINy44NGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMTUuMzYs'@;
put 'MjBoNS4zOGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMjguMjUsMjBIMzNhMSwxLDAsMCwwLDAtMlptLTUuODItMi0uNSwySDIyLjNsLS41LTJaTTE4LDkuMTYsMTkuMjUsMTRoLTIuNFpNOC45MSwxNmg1LjM4bC0uNSwySDkuNDFaTTExLjYsMjYuODQsOS45MSwyMEgxMy4zWk0xNS44'@;
put 'NSwxOGwuNS0yaDMuMzlsLjUsMlptOC42NCw4Ljg0TDIyLjgsMjBoMy4zOVoiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHBvaW50cz0iMTcuNzQgMTYgMTcuMjIgMTggMTguODUgMTggMTguMzIgMTYgMTcuNzQgMTYiLz5c'@;
put 'biAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHBvaW50cz0iMTEuOTQgMTggMTQuNjMgMTggMTUuMTYgMTYgMTEuNDEgMTYgMTEuOTQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMiIHBvaW50cz0iMTMuMjkgMjMuMSAxNC4xIDIwIDEyLjQ3IDIwIDEzLjI5IDIzLjEiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHBvaW50cz0iMjEuNDQgMTggMjQuMTMgMTggMjQuNjYgMTYgMjAuOTEg'@;
put 'MTYgMjEuNDQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIHBvaW50cz0iMjIuNzggMjMuMSAyMy42IDIwIDIxLjk3IDIwIDIyLjc4IDIzLjEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTYiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LDIwSDI2LjE5TDI0LDI4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMMTkuMzgsMjBIMTYuNjlsLTIuMTksOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDkuODgsMjBI'@;
put 'N2ExLDEsMCwwLDEsMC0ySDkuMzVsLS41My0ySDdhMSwxLDAsMCwxLDAtMkg4LjNsLTEtMy42OGExLjI1LDEuMjUsMCwwLDEsMi40Mi0uNjRMMTAuODgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40MiwwTDIwLjM4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwx'@;
put 'LDIuNDIuNjRsLTEsMy42OEgyOWExLDEsMCwwLDEsMCwySDI3LjI0bC0uNTMsMkgyOWExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVZZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4zNCw0LjU1'@;
put 'YTEsMSwwLDEsMC0xLjY3LTEuMUwxOCwxOC4yMyw4LjMzLDMuNDVhMSwxLDAsMCwwLTEuNjcsMS4xTDE3LDIwLjM1VjIyLjJIMTJhLjguOCwwLDAsMCwwLDEuNmg1djIuNEgxMmEuOC44LDAsMCwwLDAsMS42aDVWMzJhMSwxLDAsMCwwLDIsMFYyNy44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYy'@;
put 'My44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYyMC4zNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMDcsNy45MUwxOS43NCwyMEgyMmExLDEs'@;
put 'MCwwLDEsMCwySDE5LjI1djJIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYyLjc1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNkgxNGExLDEsMCwxLDEsMC0yaDIuNzVWMjJIMTRhMSwxLDAsMSwxLDAtMmgyLjI2TDkuOTMsOS45MWExLjI1LDEuMjUsMCwxLDEsMi4xMi0xLjMzTDE4LDE4LjA4bDUu'@;
put 'OTUtOS40OWExLjI1LDEuMjUsMCwxLDEsMi4xMiwxLjMzWiIvPicpLEYuQ2xyU2hhcGVCaXRjb2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC4xMSwxNi44OEE1LjQ5LDUuNDksMCwwLDAsMjEsN1Y0YTEsMSwwLDAsMC0yLDBWN0gxNlY0YTEsMSwwLDAsMC0yLDBWN0gxMWExLDEs'@;
put 'MCwwLDAtMSwxVjI4YTEsMSwwLDAsMCwxLDFoM3YzYTEsMSwwLDAsMCwyLDBWMjloM3YzYTEsMSwwLDAsMCwyLDBWMjloLjA4QTYuMDcsNi4wNywwLDAsMCwyNywyMi44MXYtLjYyQTYuMjUsNi4yNSwwLDAsMCwyNC4xMSwxNi44OFpNMTIsOWg4LjY5YTMuNTksMy41OSwwLDAsMSwzLjQzLDIu'@;
put 'MzZBMy41MSwzLjUxLDAsMCwxLDIwLjc5LDE2SDEyWk0yNSwyMi44MUE0LjA4LDQuMDgsMCwwLDEsMjEuMDYsMjdIMTJWMThoOS4wNkE0LjA4LDQuMDgsMCwwLDEsMjUsMjIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yMS4xOCwxOC40N0gxNC41djZoNi42OGEyLjcsMi43LDAsMCwwLDIuNjMtMi43N3YtLjQ4QTIuNzEsMi43MSwwLDAsMCwyMS4xOCwxOC40N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMTMuNzVh'@;
put 'Mi4yNCwyLjI0LDAsMCwwLTIuMjMtMi4yNUgxNC41VjE2aDYuM0EyLjIyLDIuMjIsMCwwLDAsMjMsMTMuNzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAs'@;
put 'MTgsMlptOC4zMSwxOS43M0E1LjIyLDUuMjIsMCwwLDEsMjEuMTgsMjdIMjF2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTd2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTMuMjVBMS4yNSwxLjI1LDAsMCwxLDEyLDI1Ljc1VjE3LjIzaDB2LTdBMS4yNSwxLjI1LDAsMCwxLDEzLjI1LDlIMTVWNy4wN2Ex'@;
put 'LDEsMCwwLDEsMiwwVjloMlY3LjA3YTEsMSwwLDAsMSwyLDBWOWE0LjcyLDQuNzIsMCwwLDEsMy4yLDgsNS4zMSw1LjMxLDAsMCwxLDIuMTEsNC4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUNvaW5CYWc9KDAsbS5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTIxLjYsMjlhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjIuNTQsMjRoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAs'@;
put 'MCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIsMzJIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNywz'@;
put 'MmgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMy43LDI4aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjc0LDI2YTI4LDI4LDAsMCwwLTIuODItMTAuMTJBMjAuMjQsMjAuMjQsMCwwLDAsMjQuNiw4LjcxTDI3LDMuNDJhMSwxLDAsMCwwLS4wNy0xQTEsMSwwLDAsMCwyNi4xMywySDkuOGExLDEsMCwwLDAtLjkxLDEuNDJsMi40NSw1LjMxYTIwLjMz'@;
put 'LDIwLjMzLDAsMCwwLTYuMjgsNy4xNWMtMi4xNSw0LTIuODIsOC44OS0zLDEyLjI4YTMuNiwzLjYsMCwwLDAsMSwyLjcxQTMuNzksMy43OSwwLDAsMCw1LjgsMzEuOTRIMTJWMzBINS43MmExLjY4LDEuNjgsMCwwLDEtMS4yMS0uNTIsMS42MiwxLjYyLDAsMCwxLS40NS0xLjIzYy4xNC0yLjYx'@;
put 'LjY5LTcuNTgsMi43Ni0xMS40NUExOCwxOCwwLDAsMSwxMy4wOCwxMGgxYTMwLjgxLDMwLjgxLDAsMCwwLTEuODcsMi45MiwyMi43OCwyMi43OCwwLDAsMC0xLjQ3LDMuMzRsMS4zNy45MmEyNCwyNCwwLDAsMSwxLjQ5LTMuNDdBMjkuMSwyOS4xLDAsMCwxLDE2LjA1LDEwaDFhMjEuNDUsMjEu'@;
put 'NDUsMCwwLDEsMS40MSw1LDIyLjU0LDIyLjU0LDAsMCwxLC4zMiwzLjg2bDEuNTgtMS4xMWEyNC4xNSwyNC4xNSwwLDAsMC0uMzItM0EyNC44MiwyNC44MiwwLDAsMCwxOC43NiwxMGguNzhsLjkxLTJIMTMuMjFMMTEuMzYsNEgyNC41N2wtMi41LDUuNDdhOS45Myw5LjkzLDAsMCwxLDEuMjMu'@;
put 'NzgsMTguNjMsMTguNjMsMCwwLDEsNS44Niw2LjU3QTI2LjU5LDI2LjU5LDAsMCwxLDMxLjczLDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgPHBhdGggZD0iTTI0Ljg5LDI2aDcuODZjLS42Ni04LjcxLTQuNDEtMTQuMTItOS4yMi0xNy4z'@;
put 'MkwyNS43MiwzLjlhMSwxLDAsMCwwLS45MS0xLjRIMTEuMWExLDEsMCwwLDAtLjkxLDEuNGwxLjIsMi42SDIxLjUxbC0uOSwySDE4Ljc2QTI0LjksMjQuOSwwLDAsMSwyMCwxMy4xOWEyNC40OSwyNC40OSwwLDAsMSwuMzIsM2wtMS41OCwxLjExYTIyLjU0LDIyLjU0LDAsMCwwLS4zMi0zLjg2'@;
put 'QTIxLjc0LDIxLjc0LDAsMCwwLDE3LDguNWgtMWEyOC4yMiwyOC4yMiwwLDAsMC0yLjQ4LDMuNywyMy45MSwyMy45MSwwLDAsMC0xLjQ5LDMuNDZsLTEuMzctLjkxYTIyLjc4LDIyLjc4LDAsMCwxLDEuNDctMy4zNEEzMC44MSwzMC44MSwwLDAsMSwxNC4wNSw4LjVIMTIuM2wuMDguMTdDNy4w'@;
put 'OCwxMi4yLDMuMDUsMTguNCwzLjA1LDI4Ljc1QTEuNjUsMS42NSwwLDAsMCw0LjYxLDMwLjVoOEEyLjY3LDIuNjcsMCwwLDEsMTQuMjEsMjZhMi42NywyLjY3LDAsMCwxLS4zNy0xLjM0LDIuNywyLjcsMCwwLDEsMi43LTIuN2g2YTIuNywyLjcsMCwwLDEsMi43LDIuN0EyLjYzLDIuNjMsMCww'@;
put 'LDEsMjQuODksMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS42LDI4LjVhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjguNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiIC8+PHBhdGggZD0iTTIyLjU0LDIzLjVoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwzMS41SDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuNywzMS41aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNywyNy41aC03YTEsMSwwLDAsMCwwLDJo'@;
put 'N2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlUGVzbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTMuMkgyNy44OUE2LjgxLDYuODEsMCwwLDAsMjgsMTJhNy44NSw3Ljg1LDAsMCwwLS4xLTEuMTlo'@;
put 'Mi45M2EuOC44LDAsMCwwLDAtMS42SDI3LjQ2QTguNDQsOC40NCwwLDAsMCwxOS41Nyw0SDExYTEsMSwwLDAsMC0xLDFWOS4ySDdhLjguOCwwLDAsMCwwLDEuNmgzdjIuNEg3YS44LjgsMCwwLDAsMCwxLjZoM1YzMWExLDEsMCwwLDAsMiwwVjIwaDcuNTdhOC40NSw4LjQ1LDAsMCwwLDcuODkt'@;
put 'NS4ySDMxYS44LjgsMCwwLDAsMC0xLjZaTTEyLDZoNy41N2E2LjUxLDYuNTEsMCwwLDEsNS42OCwzLjJIMTJabTAsNC44SDI1Ljg3YTUuNiw1LjYsMCwwLDEsMCwyLjRIMTJaTTE5LjU3LDE4SDEyVjE0LjhIMjUuMjVBNi41MSw2LjUxLDAsMCwxLDE5LjU3LDE4WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDEzLjhWMTZoOS40NWE1LjI2LDUuMjYsMCwwLDAsLjA4LS44OSw0LjcyLDQuNzIsMCwwLDAtLjItMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4'@;
put 'LDE5LjdoNS4xOWE0LjI4LDQuMjgsMCwwLDAsMy41LTEuOUgxNC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LjM3LDEwLjUxSDE0LjE4VjEyaDguMzdBNC4yMSw0LjIxLDAsMCwwLDE5LjM3LDEwLjUxWiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNjcsMmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxNy42NywyWm0xMC41LDE1LjhIMjUuN2E2Ljg3LDYuODcsMCwwLDEtNi4zMyw0LjRIMTQuMTh2Ni41NGExLjI1LDEuMjUsMCwxLDEtMi41LDBWMTcuOEg4Ljc2'@;
put 'YS45LjksMCwxLDEsMC0xLjhoMi45MlYxMy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjkuMjZBMS4yNSwxLjI1LDAsMCwxLDEyLjkzLDhoNi40NGE2Ljg0LDYuODQsMCwwLDEsNi4xNSw0aDIuNjVhLjkuOSwwLDAsMSwwLDEuOEgyNi4wOWE2LjkxLDYuOTEsMCwwLDEsLjEyLDEuMyw2'@;
put 'LjgsNi44LDAsMCwxLS4wNi45aDJhLjkuOSwwLDAsMSwwLDEuOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVJ1YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC41NywyMEE4LjIzLDguMjMsMCwwLDAsMjksMTJhOC4yMyw4'@;
put 'LjIzLDAsMCwwLTguNDMtOEgxMmExLDEsMCwwLDAtMSwxVjE4SDlhMSwxLDAsMCwwLDAsMmgydjJIOWExLDEsMCwwLDAsMCwyaDJ2N2ExLDEsMCwwLDAsMiwwVjI0aDlhMSwxLDAsMCwwLDAtMkgxM1YyMFpNMTMsNmg3LjU3QTYuMjQsNi4yNCwwLDAsMSwyNywxMmE2LjIzLDYuMjMsMCwwLDEt'@;
put 'Ni40Myw2SDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIwLjc1LDkuMjVIMTV2OC44MWg1Ljc5YTQuNjYsNC42NiwwLDAsMCw0Ljg2LTQuNEE0LjY1LDQuNjUsMCwwLDAsMjAuNzUsOS4yNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMi43NSwxOC41NkgxNVYyMmg4LjI5YTEsMSwwLDAsMSwwLDJIMTV2NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjRIMTEuMjVhMSwxLDAsMCwxLDAtMmgxLjIxVjIw'@;
put 'LjU2SDExLjI1YTEuMjUsMS4yNSwwLDAsMSwwLTIuNWgxLjIxVjhhMS4yNSwxLjI1LDAsMCwxLDEuMjUtMS4yNWg3YTcuMTQsNy4xNCwwLDAsMSw3LjM2LDYuOUE3LjE1LDcuMTUsMCwwLDEsMjAuNzUsMjAuNTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicp'@;
put 'LEYuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCwwLDAsMTgu'@;
put 'NDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0'@;
put 'LDMuNzQsMCwwLDAsMTguNDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS45MSwxNy42NWEyMC42LDIwLjYsMCwwLDAtMTMsMkExLjc3LDEuNzcsMCwwLDAsOCwyMS4yNXYzLjU2YTEsMSwwLDAsMCwyLDBWMjEuMzhh'@;
put 'MTguOTIsMTguOTIsMCwwLDEsMTItMS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMywyMkgyNi4zVjIwLjUyYTEsMSwwLDAsMC0yLDBWMjJIMTdhMSwxLDAsMCwwLTEsMVYzM2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAs'@;
put 'MCwxLTFWMjNBMSwxLDAsMCwwLDMzLDIyWk0zMiwzMkgxOFYyNGg2LjN2LjQxYTEsMSwwLDAsMCwyLDBWMjRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cmVjdCB4PSIyMS44MSIgeT0iMjcuNDIiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEu'@;
put 'NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEwLjg0LDEyLjI0YTE4LDE4LDAsMCwwLTcuOTUsMkExLjY3LDEuNjcsMCwwLDAsMiwxNS43MXYzLjFhMSwxLDAsMCwwLDIsMHYtMi45YTE2LDE2LDAsMCwxLDcuNTgtMS42N0E3LjI4'@;
put 'LDcuMjgsMCwwLDEsMTAuODQsMTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzMuMTEsMTQuMjNhMTcuOCwxNy44LDAsMCwwLTcuMTItMiw3LjQ2LDcuNDYsMCwwLDEtLjczLDJBMTUuODksMTUuODksMCwwLDEsMzIsMTUu'@;
put 'OTF2Mi45YTEsMSwwLDEsMCwyLDB2LTMuMUExLjY3LDEuNjcsMCwwLDAsMzMuMTEsMTQuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cGF0aCBkPSJNMTAuNjYsMTAuNjFjMC0uMjMsMC0uNDUsMC0uNjdhMy4wNywzLjA3LDAsMCwxLC41NC02'@;
put 'LjExLDMuMTUsMy4xNSwwLDAsMSwyLjIuODksOC4xNiw4LjE2LDAsMCwxLDEuNy0xLjA4LDUuMTMsNS4xMywwLDAsMC05LDMuMjcsNS4xLDUuMSwwLDAsMCw0LjcsNUE3LjQyLDcuNDIsMCwwLDEsMTAuNjYsMTAuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'OCIvPlxuICA8cGF0aCBkPSJNMjQuNzcsMS44M2E1LjE3LDUuMTcsMCwwLDAtMy42OSwxLjU1LDcuODcsNy44NywwLDAsMSwxLjksMSwzLjE0LDMuMTQsMCwwLDEsNC45MywyLjUyLDMuMDksMy4wOSwwLDAsMS0xLjc5LDIuNzcsNy4xNCw3LjE0LDAsMCwxLC4wNi45Myw3Ljg4LDcuODgsMCww'@;
put 'LDEtLjEsMS4yLDUuMSw1LjEsMCwwLDAsMy44My00LjlBNS4xMiw1LjEyLDAsMCwwLDI0Ljc3LDEuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICBcbiAgPGVsbGlwc2UgY3g9IjE4IiBjeT0iMTEuMjgiIHJ4PSI0Ljc2IiByeT0iNC43IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxMS43NWMuMTYsMCwuMzIsMCwuNDgsMCwwLS4xNSwwLS4yOCwwLS40M2E2LjcsNi43LDAsMCwxLDMuNzUtNiw0LjYyLDQuNjIsMCwxLDAtNC4yMSw2LjQ2WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjQuNzYsMTEuMjhjMCwuMTUsMCwuMjgsMCwuNDMuMTYsMCwuMzIsMCwuNDgsMEE0LjU4LDQuNTgsMCwxLDAsMjEsNS4yOSw2LjcsNi43LDAsMCwxLDI0Ljc2LDExLjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjIuMjksMTYuNDVhMjEuNDUsMjEuNDUsMCwwLDEsNS43MSwyLDIuNzEsMi43MSwwLDAsMSwuNjguNTNIMzRWMTUuNTZhLjcyLjcyLDAsMCwwLS4zOC0uNjQsMTgsMTgsMCwwLDAtOC40LTIuMDVsLS42NiwwQTYuNjYsNi42NiwwLDAsMSwyMi4yOSwx'@;
put 'Ni40NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTYuNTMsMjAuOTJBMi43NiwyLjc2LDAsMCwxLDgsMTguNDdhMjEuNDUsMjEuNDUsMCwwLDEsNS43MS0yLDYuNjYsNi42NiwwLDAsMS0yLjI3LTMuNTVsLS42NiwwYTE4LDE4LDAsMCww'@;
put 'LTguNCwyLjA1LjcyLjcyLDAsMCwwLS4zOC42NFYyMkg2LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIyMS40NiIgeT0iMjYuNjkiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzIuODEsMjEuMjZIMjUuOTR2LTFhMSwxLDAsMCwwLTIsMHYxSDIyVjE4LjQzQTIwLjE3LDIwLjE3LDAsMCwwLDE4LDE4YTE5LjI3LDE5LjI3LDAsMCwwLTkuMDYsMi4yMi43Ni43NiwwLDAsMC0uNDEuNjh2NS42MWg3LjExdjYuMDlhMSwxLDAsMCww'@;
put 'LDEsMUgzMi44MWExLDEsMCwwLDAsMS0xVjIyLjI2QTEsMSwwLDAsMCwzMi44MSwyMS4yNlptLTEsMTAuMzZIMTcuNjRWMjMuMjZoNi4zdi45MWExLDEsMCwwLDAsMiwwdi0uOTFoNS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTciLz4nKSxGLkNsclNoYXBlRW1w'@;
put 'bG95ZWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LjQzLDE2LjY5YTcsNywwLDEsMSw3LTdBNyw3LDAsMCwxLDE2LjQzLDE2LjY5Wm0wLTExLjkyYTUsNSwwLDEsMCw1LDVBNSw1LDAsMCwwLDE2LjQzLDQuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIvPlxuICA8cGF0aCBkPSJNMjIsMTcuOUEyNS40MSwyNS40MSwwLDAsMCw1Ljg4LDE5LjU3YTQuMDYsNC4wNiwwLDAsMC0yLjMxLDMuNjhWMjkuMmExLDEsMCwxLDAsMiwwVjIzLjI1YTIsMiwwLDAsMSwxLjE2LTEuODYsMjIuOTEsMjIuOTEsMCwwLDEsOS43LTIuMTEsMjMuNTgsMjMu'@;
put 'NTgsMCwwLDEsNS41Ny42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIyLjE0IiB5PSIyNy40MSIgd2lkdGg9IjYuMTQiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu'@;
put 'ICA8cGF0aCBkPSJNMzMuMTcsMjEuNDdIMjh2Mmg0LjE3djguMzdIMThWMjMuNDdoNi4zdi40MmExLDEsMCwwLDAsMiwwVjIwYTEsMSwwLDAsMC0yLDB2MS40N0gxN2ExLDEsMCwwLDAtMSwxVjMyLjg0YTEsMSwwLDAsMCwxLDFIMzMuMTdhMSwxLDAsMCwwLDEtMVYyMi40N0ExLDEsMCwwLDAs'@;
put 'MzMuMTcsMjEuNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICBcbiAgPGNpcmNsZSBjeD0iMTYuODYiIGN5PSI5LjczIiByPSI2LjQ2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIxIiB5PSIy'@;
put 'OCIgd2lkdGg9IjciIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xNSwzMHYzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM2ExLDEsMCwwLDAtMS0xSDI2VjIwLjUzYTEsMSwwLDAsMC0yLDBWMjJIMjJW'@;
put 'MTguNDJBMzIuMTIsMzIuMTIsMCwwLDAsMTYuODYsMThhMjYsMjYsMCwwLDAtMTEsMi4zOSwzLjI4LDMuMjgsMCwwLDAtMS44OCwzVjMwWm0xNywySDE3VjI0aDd2LjQyYTEsMSwwLDAsMCwyLDBWMjRoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNs'@;
put 'clNoYXBlRmFjdG9yeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDcsNy4zN2ExLDEsMCwwLDAtMSwuMDZMMjMsMTMuNzdWOC4yNmExLDEsMCwwLDAtMS42NC0uNzdMMTMuNDgsMTRIMTBWNC42MmExLDEsMCwwLDAtLjc4LTFsLTQtLjlhMSwxLDAsMCwwLS44NS4yQTEsMSwwLDAs'@;
put 'MCw0LDMuNzNWMTRIM2ExLDEsMCwwLDAtMSwxVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY4LjI2QTEsMSwwLDAsMCwzMy40Nyw3LjM3Wk02LDVsMiwuNDRWMTRINlpNMzIsMzBINFYxNmg5LjgzYTEsMSwwLDAsMCwuNjQtLjIzTDIxLDEwLjM3djUuMjhhMSwxLDAsMCwwLDEu'@;
put 'NTYuODNMMzIsMTAuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI2IiB5PSIxNy45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0i'@;
put 'NiIgeT0iMjEuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjI1Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIvPlxuICA8cmVjdCB4PSIxOSIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjI0Ljk5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zMi40NSw4LjQ0LDIyLDE1LjNWOS41MWExLDEsMCwwLDAtMS42My0uNzhMMTQuMDcsMTRIMTBWNC4wNkw0LDIuNzFWMTRIMlYzMWExLDEsMCwwLDAs'@;
put 'MSwxSDMzYTEsMSwwLDAsMCwxLTFWOS4yN0ExLDEsMCwwLDAsMzIuNDUsOC40NFpNMTQsMjlINlYyN2g4Wm0wLTRINlYyM2g4Wm0wLTRINlYxOWg4Wm04LDhIMjBWMjZoMlptMC02SDIwVjIwaDJabTQsNkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptNCw2SDI4VjI2aDJabTAtNkgyOFYyMGgyWiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuQ29tbWVyY2VTaGFwZXM9e2NhbGN1bGF0b3I6Ri5DbHJTaGFwZUNhbGN1bGF0b3IsInBpZ2d5LWJhbmsiOkYuQ2xyU2hhcGVQaWdneUJhbmssInNob3BwaW5nLWJhZyI6Ri5DbHJTaGFwZVNob3BwaW5nQmFnLCJz'@;
put 'aG9wcGluZy1jYXJ0IjpGLkNsclNoYXBlU2hvcHBpbmdDYXJ0LHdhbGxldDpGLkNsclNoYXBlV2FsbGV0LHN0b3JlOkYuQ2xyU2hhcGVTdG9yZSxldXJvOkYuQ2xyU2hhcGVFdXJvLGRvbGxhcjpGLkNsclNoYXBlRG9sbGFyLHBlc286Ri5DbHJTaGFwZVBlc28sImNyZWRpdC1jYXJkIjpGLkNs'@;
put 'clNoYXBlQ3JlZGl0Q2FyZCxiYW5rOkYuQ2xyU2hhcGVCYW5rLCJkb2xsYXItYmlsbCI6Ri5DbHJTaGFwZURvbGxhckJpbGwsImUtY2hlY2siOkYuQ2xyU2hhcGVFQ2hlY2sscG91bmQ6Ri5DbHJTaGFwZVBvdW5kLHJ1cGVlOkYuQ2xyU2hhcGVSdXBlZSx3b246Ri5DbHJTaGFwZVdvbix5ZW46'@;
put 'Ri5DbHJTaGFwZVllbixiaXRjb2luOkYuQ2xyU2hhcGVCaXRjb2luLHJ1YmxlOkYuQ2xyU2hhcGVSdWJsZSwiY29pbi1iYWciOkYuQ2xyU2hhcGVDb2luQmFnLCJlbXBsb3llZS1ncm91cCI6Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXAsZW1wbG95ZWU6Ri5DbHJTaGFwZUVtcGxveWVlLGZhY3Rv'@;
put 'cnk6Ri5DbHJTaGFwZUZhY3Rvcnl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvbW1lcmNlU2hhcGVzLCJzYXZpbmdzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29tbWVyY2VTaGFwZXNbInBpZ2d5LWJhbmsiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy'@;
put 'dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLkNvbW1lcmNlU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc'@;
put 'CiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMg'@;
put 'Zm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ29yZVNoYXBlcz1GLkNsclNoYXBlQXJyb3c9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1GLkNsclNoYXBlRXllSGlkZT1GLkNsclNo'@;
put 'YXBlRXllPUYuQ2xyU2hhcGVFdmVudD1GLkNsclNoYXBlQ2FsZW5kYXI9Ri5DbHJTaGFwZUFuZ2xlRG91YmxlPUYuQ2xyU2hhcGVWaWV3Q29sdW1ucz1GLkNsclNoYXBlU2VhcmNoPUYuQ2xyU2hhcGVWbUJ1Zz1GLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1GLkNsclNoYXBlRmlsdGVyR3Jp'@;
put 'ZD1GLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1GLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPUYuQ2xyU2hhcGVDbG91ZD1GLkNsclNoYXBlSW1hZ2U9Ri5DbHJTaGFwZUJlbGw9Ri5DbHJTaGFwZUZvbGRlck9wZW49Ri5DbHJTaGFwZUZvbGRlcj1GLkNsclNoYXBlQW5nbGU9Ri5DbHJT'@;
put 'aGFwZVVzZXI9Ri5DbHJTaGFwZUJhcnM9Ri5DbHJTaGFwZUhlbHBJbmZvPUYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1GLkNsclNoYXBlSW5mb1N0YW5kYXJkPUYuQ2xyU2hhcGVJbmZvQ2lyY2xlPUYu'@;
put 'Q2xyU2hhcGVDaGVja0NpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9Ri5DbHJTaGFwZVRpbWVzPUYuQ2xyU2hhcGVDaGVjaz1GLkNsclNoYXBlQ29nPUYuQ2xyU2hhcGVIb21lPUYuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZv'@;
put 'aWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp'@;
put 'bHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4z'@;
put 'Miw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywx'@;
put 'M1oiLz4nKSxGLkNsclNoYXBlSG9tZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEs'@;
put 'MzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIs'@;
put 'MiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwx'@;
put 'LDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJW'@;
put 'MTkuNzZaIi8+JyksRi5DbHJTaGFwZUNvZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0x'@;
put 'OC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEu'@;
put 'NWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z'@;
put 'LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs'@;
put 'MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy'@;
put 'LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwy'@;
put 'OC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41'@;
put 'LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwx'@;
put 'LjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwx'@;
put 'OGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44'@;
put 'LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0w'@;
put 'LjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4x'@;
put 'LTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUs'@;
put 'MS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3'@;
put 'LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIu'@;
put 'NCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0w'@;
put 'LjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4x'@;
put 'bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0w'@;
put 'LjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMu'@;
put 'MiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUu'@;
put 'MkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIu'@;
put 'NmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMs'@;
put 'MS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEs'@;
put 'Nyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAu'@;
put 'NC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42'@;
put 'NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDEx'@;
put 'LjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywx'@;
put 'YTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAs'@;
put 'MCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40'@;
put 'My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i'@;
put 'YWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQz'@;
put 'bC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCww'@;
put 'LDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNo'@;
put 'My4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0x'@;
put 'YS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40'@;
put 'SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCww'@;
put 'LTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDEx'@;
put 'LjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQz'@;
put 'bDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYu'@;
put 'MzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy'@;
put 'Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxGLkNsclNoYXBlVGltZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEu'@;
put 'NDFaIi8+JyksRi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2'@;
put 'QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEs'@;
put 'MCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3'@;
put 'LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0x'@;
put 'LjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAs'@;
put 'MCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEu'@;
put 'MywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEu'@;
put 'NzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxGLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCww'@;
put 'LDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwz'@;
put 'LjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQs'@;
put 'MCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLEYuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMi'@;
put 'IGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEs'@;
put 'MSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxGLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIg'@;
put 'Y3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEu'@;
put 'NCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksRi5DbHJTaGFwZUVycm9yU3RhbmRh'@;
put 'cmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQs'@;
put 'MTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAs'@;
put 'MCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksRi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwx'@;
put 'LDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2'@;
put 'MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1'@;
put 'LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEu'@;
put 'MjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3'@;
put 'NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBD'@;
put 'MzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwy'@;
put 'LjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEs'@;
put 'My42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwx'@;
put 'LDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLEYuQ2xyU2hhcGVIZWxwSW5mbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEt'@;
put 'LjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0x'@;
put 'LjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4z'@;
put 'LDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0'@;
put 'LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4'@;
put 'LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0x'@;
put 'Miw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4y'@;
put 'NWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks'@;
put 'Ri5DbHJTaGFwZUJhcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0'@;
put 'LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxGLkNsclNoYXBlVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pN'@;
put 'MjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0'@;
put 'VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCww'@;
put 'LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'Mi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUy'@;
put 'YTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAs'@;
put 'MCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYt'@;
put 'NkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcs'@;
put 'NywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUFuZ2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2'@;
put 'TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxGLkNsclNoYXBlRm9sZGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiww'@;
put 'LDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEt'@;
put 'MS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBk'@;
put 'PSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlh'@;
put 'MiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgx'@;
put 'Ni40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs'@;
put 'MCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs'@;
put 'MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBk'@;
put 'PSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcy'@;
put 'LDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLG0uY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCww'@;
put 'LDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMu'@;
put 'NzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43'@;
put 'MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks'@;
put 'NUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5'@;
put 'LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdW'@;
put 'MjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYu'@;
put 'NDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQs'@;
put 'MS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAs'@;
put 'MCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy'@;
put 'LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y'@;
put 'OCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0y'@;
put 'LjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs'@;
put 'NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUJlbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0x'@;
put 'LjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45Mywx'@;
put 'LDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAs'@;
put 'MSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAs'@;
put 'MCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgs'@;
put 'MzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYz'@;
put 'LDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUu'@;
put 'MTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAs'@;
put 'MCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwx'@;
put 'LDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgx'@;
put 'LDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAg'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN'@;
put 'MzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0z'@;
put 'LjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlSW1hZ2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2'@;
put 'VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCww'@;
put 'LDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAs'@;
put 'MCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSww'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMy'@;
put 'YTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywz'@;
put 'LDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEs'@;
put 'MS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksRi5DbHJTaGFwZUNsb3VkPSgwLG0uY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwy'@;
put 'OSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywy'@;
put 'OCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl'@;
put 'ZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3'@;
put 'LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDkt'@;
put 'MS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMx'@;
put 'LDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0'@;
put 'LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwz'@;
put 'NSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42'@;
put 'NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4y'@;
put 'OSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCww'@;
put 'LDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRWxsaXBz'@;
put 'aXNIb3Jpem9udGFsPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIx'@;
put 'OCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEi'@;
put 'IHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+'@;
put 'JyksRi5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAs'@;
put 'MC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4x'@;
put 'Mi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5'@;
put 'LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCww'@;
put 'LDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksRi5DbHJTaGFwZVZtQnVnPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRp'@;
put 'b246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1'@;
put 'LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4x'@;
put 'NSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45Mywz'@;
put 'LjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUs'@;
put 'MTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4y'@;
put 'NywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIg'@;
put 'ZmlsbD0iI2ZmZmZmZiIvPicpLEYuQ2xyU2hhcGVTZWFyY2g9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4w'@;
put 'NW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAs'@;
put 'MSwwLDM1LDMzLjI5WiIvPicpLEYuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDIt'@;
put 'MlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksRi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43'@;
put 'MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWEx'@;
put 'LDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLEYuQ2xyU2hhcGVDYWxlbmRhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1'@;
put 'LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIy'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEw'@;
put 'YTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwx'@;
put 'LDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1'@;
put 'LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIx'@;
put 'OSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJl'@;
put 'Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwy'@;
put 'LDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9Ijgi'@;
put 'IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww'@;
put 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4y'@;
put 'LDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVI'@;
put 'OFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwx'@;
put 'LDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDks'@;
put 'M1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgt'@;
put 'NEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRo'@;
put 'MlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMu'@;
put 'NjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJa'@;
put 'bTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRXZlbnQ9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAs'@;
put 'MCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs'@;
put 'MTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEs'@;
put 'MjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t'@;
put 'YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJW'@;
put 'MzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEs'@;
put 'MSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAs'@;
put 'LjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYg'@;
put 'MTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW'@;
put 'MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQi'@;
put 'IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwx'@;
put 'LTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcu'@;
put 'OCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiww'@;
put 'LDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0x'@;
put 'VjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwt'@;
put 'OS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAs'@;
put 'MCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMs'@;
put 'MTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41'@;
put 'QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMu'@;
put 'NVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVFeWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4'@;
put 'bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQy'@;
put 'LDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0'@;
put 'Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywy'@;
put 'LDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjgu'@;
put 'NTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi'@;
put 'Lz4nKSxGLkNsclNoYXBlRXllSGlkZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0'@;
put 'LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2'@;
put 'LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCww'@;
put 'LDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1'@;
put 'bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgu'@;
put 'MzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5'@;
put 'LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTku'@;
put 'OTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIz'@;
put 'LDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2Ex'@;
put 'Ny4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcu'@;
put 'MTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43'@;
put 'VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFycm93PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDgu'@;
put 'MzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksRi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0'@;
put 'dXMiOkYuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Ri5DbHJTaGFwZUhvbWUsY29nOkYuQ2xyU2hhcGVDb2csY2hlY2s6Ri5DbHJTaGFwZUNoZWNrLHRpbWVzOkYuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJl'@;
put 'eGNsYW1hdGlvbi1jaXJjbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpGLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpGLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Ri5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vz'@;
put 'cy1zdGFuZGFyZCI6Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOkYuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOkYuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOkYuQ2xy'@;
put 'U2hhcGVCYXJzLHVzZXI6Ri5DbHJTaGFwZVVzZXIsYW5nbGU6Ri5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpGLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Ri5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpGLkNsclNoYXBlQmVsbCxpbWFnZTpGLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Ri5DbHJT'@;
put 'aGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpGLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Ri5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpGLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpG'@;
put 'LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpGLkNsclNoYXBlVm1CdWcsc2VhcmNoOkYuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Ri5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOkYuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpGLkNsclNo'@;
put 'YXBlQ2FsZW5kYXIsZXZlbnQ6Ri5DbHJTaGFwZUV2ZW50LGV5ZTpGLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Ri5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpGLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OkYuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEYuQ29yZVNoYXBlcywiaG91c2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KEYuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJjbG9zZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMudGltZXMpKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImVycm9yIiwoMCx4LmRlc2NyaXB0b3JD'@;
put 'b25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJpbmZvIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNv'@;
put 'cmVTaGFwZXMsIm1lbnUiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoRi5Db3JlU2hhcGVzLCJjYXJldCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNo'@;
put 'YXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJv'@;
put 'amVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEll'@;
put 'LEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbHJTaGFwZUxvZ291dD1GLkNsclNoYXBlTG9naW49Ri5DbHJTaGFwZUhlbHA9Ri5DbHJTaGFwZUNvcHk9Ri5DbHJTaGFwZUNoaWxkQXJyb3c9Ri5DbHJTaGFwZUNp'@;
put 'cmNsZUFycm93PUYuQ2xyU2hhcGVBbGFybUNsb2NrPUYuQ2xyU2hhcGVDbG9jaz1GLkNsclNoYXBlSGlzdG9yeT1GLkNsclNoYXBlVGFncz1GLkNsclNoYXBlVGFnPUYuQ2xyU2hhcGVUcmFzaD1GLkNsclNoYXBlVGltZXNDaXJjbGU9Ri5DbHJTaGFwZUJhbj1GLkNsclNoYXBlUGx1c0NpcmNs'@;
put 'ZT1GLkNsclNoYXBlTWludXNDaXJjbGU9Ri5DbHJTaGFwZU1pbnVzPUYuQ2xyU2hhcGVQbHVzPUYuQ2xyU2hhcGVGaWxlPUYuQ2xyU2hhcGVQaW49Ri5DbHJTaGFwZUZpbHRlcj1GLkNsclNoYXBlUG9wT3V0PUYuQ2xyU2hhcGVVc2Vycz1GLkNsclNoYXBlVW5sb2NrPUYuQ2xyU2hhcGVMb2Nr'@;
put 'PUYuQ2xyU2hhcGVVcGxvYWQ9Ri5DbHJTaGFwZURvd25sb2FkPUYuQ2xyU2hhcGVMaWdodGJ1bGI9Ri5DbHJTaGFwZVZpZXdDYXJkcz1GLkNsclNoYXBlVmlld0xpc3Q9Ri5DbHJTaGFwZVN5bmM9Ri5DbHJTaGFwZVJlZnJlc2g9Ri5DbHJTaGFwZU5vdGU9Ri5DbHJTaGFwZVBlbmNpbD1GLkNs'@;
put 'clNoYXBlVGhlcm1vbWV0ZXI9Ri5DbHJTaGFwZUJ1Zz1GLkNsclNoYXBlU2Npc3NvcnM9Ri5DbHJTaGFwZUFzdGVyaXNrPUYuQ2xyU2hhcGVCb29rPUYuQ2xyU2hhcGVPYmplY3RzPUYuQ2xyU2hhcGVSZXNpemU9Ri5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz1GLkNsclNoYXBlQ3Vyc29ySGFu'@;
put 'ZD1GLkNsclNoYXBlQ3Vyc29yQXJyb3c9Ri5DbHJTaGFwZUdyaWRWaWV3PUYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj1GLkNsclNoYXBlTmV3PUYuQ2xyU2hhcGVBbGFybU9mZj1GLkNsclNoYXBlUGluYm9hcmQ9Ri5DbHJTaGFwZUFkZFRleHQ9dm9pZCAwLEYuQ2xyU2hhcGVDbG9uZT1G'@;
put 'LkNsclNoYXBlQ3Vyc29yTW92ZT1GLkNsclNoYXBlV2FuZD1GLkNsclNoYXBlU3VuPUYuQ2xyU2hhcGVNb29uPUYuQ2xyU2hhcGVGaWx0ZXIyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlPUYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQ9Ri5DbHJTaGFwZUNvbG9yUGlja2VyPUYuQ2xyU2hhcGVCcmll'@;
put 'ZmNhc2U9Ri5DbHJTaGFwZUV4cGFuZENhcmQ9Ri5DbHJTaGFwZUNvbGxhcHNlQ2FyZD1GLkNsclNoYXBlU29ydEJ5PUYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Mj1GLkNsclNoYXBlQWNjZXNzaWJpbGl0eTE9Ri5DbHJTaGFwZVNocmluaz1GLkNsclNoYXBlUGFwZXJjbGlwPUYuQ2xyU2hhcGVG'@;
put 'aWxlR3JvdXA9Ri5DbHJTaGFwZVJlcGVhdD1GLkNsclNoYXBlSWRCYWRnZT1GLkNsclNoYXBlQmFsYW5jZT1GLkNsclNoYXBlT3JnYW5pemF0aW9uPUYuQ2xyU2hhcGVOb0FjY2Vzcz1GLkNsclNoYXBlSG91cmdsYXNzPUYuQ2xyU2hhcGVGbGFtZT1GLkNsclNoYXBlVGFyZ2V0PUYuQ2xyU2hh'@;
put 'cGVCdWxsc2V5ZT1GLkNsclNoYXBlV3JlbmNoPUYuQ2xyU2hhcGVCb2x0PUYuQ2xyU2hhcGVMaWJyYXJ5PUYuQ2xyU2hhcGVLZXk9Ri5DbHJTaGFwZVpvb21PdXQ9Ri5DbHJTaGFwZVpvb21Jbj1GLkNsclNoYXBlV2luZG93UmVzdG9yZT1GLkNsclNoYXBlV2luZG93TWluPUYuQ2xyU2hhcGVX'@;
put 'aW5kb3dNYXg9Ri5DbHJTaGFwZVdpbmRvd0Nsb3NlPUYuQ2xyU2hhcGVUb29scz1GLkNsclNoYXBlU3dpdGNoPUYuQ2xyU2hhcGVUd29XYXlBcnJvd3M9Ri5DbHJTaGFwZUZpbGVTZXR0aW5ncz1GLkNsclNoYXBlU2Nyb2xsPUYuQ2xyU2hhcGVVbmRvPUYuQ2xyU2hhcGVSZWRvPUYuQ2xyU2hh'@;
put 'cGVMaXN0PUYuQ2xyU2hhcGVGaXJld2FsbD1GLkNsclNoYXBlQ2xpcGJvYXJkPUYuQ2xyU2hhcGVTbGlkZXI9Ri5DbHJTaGFwZVdvcmxkPUYuQ2xyU2hhcGVQcmludGVyPXZvaWQgMCxGLkVzc2VudGlhbFNoYXBlcz1GLkNsclNoYXBlQ29sb3JQYWxldHRlPUYuQ2xyU2hhcGVGaXJzdEFpZD1G'@;
put 'LkNsclNoYXBlQmV0YT1GLkNsclNoYXBlRG90Q2lyY2xlPUYuQ2xyU2hhcGVDaXJjbGU9Ri5DbHJTaGFwZUNyb3NzaGFpcnM9Ri5DbHJTaGFwZVZvbHVtZT1GLkNsclNoYXBlVGFibGU9Ri5DbHJTaGFwZVNub3dmbGFrZT1GLkNsclNoYXBlRnVlbD1GLkNsclNoYXBlRm9ybT1GLkNsclNoYXBl'@;
put 'RmlzaD1GLkNsclNoYXBlVHJlZT1GLkNsclNoYXBlUmVjeWNsZT1GLkNsclNoYXBlRmlsdGVyT2ZmPUYuQ2xyU2hhcGVGaWxlWmlwPUYuQ2xyU2hhcGVDdXJzb3JIYW5kT3Blbj1GLkNsclNoYXBlQ3Vyc29ySGFuZEdyYWI9Ri5DbHJTaGFwZVRyZWVWaWV3PUYuQ2xyU2hhcGVQb3J0cmFpdD1G'@;
put 'LkNsclNoYXBlUGFzdGU9Ri5DbHJTaGFwZUxhbmRzY2FwZT1GLkNsclNoYXBlRXJhc2VyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPUYuQ2xyU2hhcGVEZXRhaWxzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxsZT1hZSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO0YuQ2xyU2hhcGVBZGRUZXh0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYz'@;
put 'LjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxGLkNsclNoYXBlUGluYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMz'@;
put 'LjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUx'@;
put 'LDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjlj'@;
put 'Ljc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAs'@;
put 'MCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTIt'@;
put 'Ljg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLEYuQ2xyU2hh'@;
put 'cGVBbGFybU9mZj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40'@;
put 'NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45'@;
put 'MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIu'@;
put 'NzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0'@;
put 'LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEu'@;
put 'NDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1'@;
put 'LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wx'@;
put 'NywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43'@;
put 'Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQu'@;
put 'MTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLEYuQ2xyU2hhcGVOZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkz'@;
put 'LDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIu'@;
put 'ODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41'@;
put 'MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41'@;
put 'IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41'@;
put 'MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMu'@;
put 'MzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEu'@;
put 'MzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLEYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44Miww'@;
put 'LTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4z'@;
put 'NC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz'@;
put 'LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEs'@;
put 'MSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLEYuQ2xyU2hhcGVHcmlkVmlldz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAs'@;
put 'MCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIs'@;
put 'MiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0y'@;
put 'VjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIs'@;
put 'MCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIi'@;
put 'IGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JBcnJvdz0o'@;
put 'MCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcs'@;
put 'OC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2'@;
put 'YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwy'@;
put 'LjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JIYW5k'@;
put 'PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMu'@;
put 'NCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3'@;
put 'LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQu'@;
put 'MTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1'@;
put 'LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1'@;
put 'VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0u'@;
put 'NDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkz'@;
put 'LDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksRi5DbHJTaGFwZUN1'@;
put 'cnNvckhhbmRDbGljaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTEx'@;
put 'LjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywx'@;
put 'LjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYs'@;
put 'MTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUu'@;
put 'MkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4z'@;
put 'LTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYz'@;
put 'bDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAg'@;
put 'ICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksRi5DbHJTaGFwZVJlc2l6ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksRi5DbHJTaGFwZU9iamVjdHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEy'@;
put 'LDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0w'@;
put 'LDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEs'@;
put 'MSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwx'@;
put 'djRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxGLkNs'@;
put 'clNoYXBlQm9vaz0oMCxtLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlh'@;
put 'MSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5'@;
put 'Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjks'@;
put 'OFoiLz4nKSxGLkNsclNoYXBlQXN0ZXJpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00'@;
put 'LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMs'@;
put 'MCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcy'@;
put 'TDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwy'@;
put 'MC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQs'@;
put 'MS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksRi5DbHJTaGFwZVNjaXNzb3JzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwx'@;
put 'Ljc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2'@;
put 'LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYs'@;
put 'MCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0z'@;
put 'LjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksRi5DbHJTaGFwZUJ1Zz0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIy'@;
put 'LjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40'@;
put 'Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcyYTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJh'@;
put 'MSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwzMS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMu'@;
put 'NjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMuMTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4x'@;
put 'Ny0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEsNS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMs'@;
put 'My4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAs'@;
put 'Mkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCwwLDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0'@;
put 'bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0xNCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgs'@;
put 'MS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRBMTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwx'@;
put 'LjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAsMSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDku'@;
put 'MDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLEYuQ2xyU2hhcGVU'@;
put 'aGVybW9tZXRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4z'@;
put 'Ni00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxGLkNsclNoYXBlUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwy'@;
put 'OCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wx'@;
put 'Ljc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUs'@;
put 'Mi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcy'@;
put 'LDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLEYuQ2xyU2hhcGVOb3RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAs'@;
put 'MCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAs'@;
put 'MCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2'@;
put 'LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIs'@;
put 'MiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVSZWZyZXNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAs'@;
put 'MSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLEYuQ2xyU2hhcGVTeW5jPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAs'@;
put 'MiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45'@;
put 'NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwx'@;
put 'LDAsMCwwLDMwLjA2LDFaIi8+JyksRi5DbHJTaGFwZVZpZXdMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIx'@;
put 'NCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCww'@;
put 'LDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLEYuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9'@;
put 'Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwx'@;
put 'N0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRh'@;
put 'MiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIs'@;
put 'MiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLEYuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgs'@;
put 'MTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40NiwxOC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEt'@;
put 'MS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4x'@;
put 'OSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSww'@;
put 'LDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCwwLDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEz'@;
put 'LTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywxOC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwx'@;
put 'LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1'@;
put 'LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44Ljgs'@;
put 'MCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAs'@;
put 'MCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSww'@;
put 'LDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywz'@;
put 'LjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEz'@;
put 'bC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44Ljgs'@;
put 'MCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlRG93bmxvYWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJI'@;
put 'MzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDgu'@;
put 'ODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2'@;
put 'YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJTaGFwZVVwbG9hZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44'@;
put 'MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEz'@;
put 'LjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9'@;
put 'Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEs'@;
put 'MjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwx'@;
put 'NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVMb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIs'@;
put 'MCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMy'@;
put 'YTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksRi5DbHJTaGFwZVVubG9jaz0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIs'@;
put 'MCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgy'@;
put 'MFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxGLkNsclNoYXBlVXNlcnM9KDAsbS5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcu'@;
put 'M3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDkuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEtMC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVo'@;
put 'MnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIsMC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIu'@;
put 'MiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4y'@;
put 'LDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAuNSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4'@;
put 'aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMw'@;
put 'LTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMwLjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0x'@;
put 'LjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44'@;
put 'LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwzMEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0w'@;
put 'LjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4w'@;
put 'OSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0x'@;
put 'MywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEtMS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2'@;
put 'Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUu'@;
put 'Mjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAs'@;
put 'MSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40NiwwLDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMu'@;
put 'NjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDksMCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEs'@;
put 'NC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42'@;
put 'NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQi'@;
put 'IGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwxNy44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcs'@;
put 'Mi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4y'@;
put 'OHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIzLjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwx'@;
put 'LDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQyLDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCww'@;
put 'LDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJN'@;
put 'MjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42'@;
put 'Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAu'@;
put 'M0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2'@;
put 'LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCww'@;
put 'LDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0'@;
put 'ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFs'@;
put 'ZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNBOS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwxLDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcs'@;
put 'OWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4y'@;
put 'MywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2'@;
put 'LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjgu'@;
put 'NTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4w'@;
put 'OSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wy'@;
put 'NS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSww'@;
put 'LDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUG9wT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNI'@;
put 'NWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjku'@;
put 'NTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxGLkNsclNoYXBlRmlsdGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEs'@;
put 'MSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSww'@;
put 'LDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAs'@;
put 'MCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTku'@;
put 'MTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBpbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5'@;
put 'QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4y'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwx'@;
put 'LjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksRi5DbHJTaGFwZUZpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0uMywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSwwLTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUu'@;
put 'OTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUu'@;
put 'NFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww'@;
put 'LDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEu'@;
put 'ODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1'@;
put 'LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJo'@;
put 'MTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLEYuQ2xyU2hhcGVQbHVzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxGLkNsclNo'@;
put 'YXBlTWludXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41'@;
put 'LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdI'@;
put 'OS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCww'@;
put 'LDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTgu'@;
put 'NDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicp'@;
put 'LEYuQ2xyU2hhcGVCYW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1'@;
put 'LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLEYuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'ZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4w'@;
put 'OCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLEYuQ2xyU2hhcGVUcmFzaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'ZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEz'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAu'@;
put 'NzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxGLkNsclNoYXBlVGFnPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCww'@;
put 'LDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIi'@;
put 'IHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIyLDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEs'@;
put 'MS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTku'@;
put 'OUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwy'@;
put 'LDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0'@;
put 'LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwx'@;
put 'NC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVUYWdzPSgwLG0uY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEEx'@;
put 'LjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5'@;
put 'LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMx'@;
put 'LjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1i'@;
put 'YWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRI'@;
put 'MjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5'@;
put 'LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMs'@;
put 'MS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMu'@;
put 'NjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEw'@;
put 'LDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4'@;
put 'LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42Nywx'@;
put 'MS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2Ex'@;
put 'LjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjcz'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEy'@;
put 'LjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEs'@;
put 'MSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI'@;
put 'MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksRi5DbHJTaGFwZUhpc3Rvcnk9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksRi5DbHJTaGFwZUNsb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCww'@;
put 'LDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAsMCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCww'@;
put 'LDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEzLDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEy'@;
put 'LjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4x'@;
put 'OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwz'@;
put 'LjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiww'@;
put 'LDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww'@;
put 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlQWxhcm1DbG9jaz0oMCxtLmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2'@;
put 'LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwy'@;
put 'OS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkyLDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwy'@;
put 'NC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwx'@;
put 'Ni4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEu'@;
put 'NjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTls'@;
put 'MS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4'@;
put 'LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTks'@;
put 'MTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAs'@;
put 'MCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjks'@;
put 'MTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEs'@;
put 'MSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4'@;
put 'LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3'@;
put 'LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2'@;
put 'YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1'@;
put 'LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMy'@;
put 'LDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUu'@;
put 'MjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIs'@;
put 'MEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFw'@;
put 'ZUNoaWxkQXJyb3c9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEs'@;
put 'MSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvcHk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYy'@;
put 'NEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41'@;
put 'QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYs'@;
put 'MCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0i'@;
put 'MjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlSGVscD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMw'@;
put 'QTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45'@;
put 'MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjlo'@;
put 'LjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgi'@;
put 'IGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4z'@;
put 'Mi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAs'@;
put 'MCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9'@;
put 'IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40'@;
put 'NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEu'@;
put 'NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x'@;
put 'LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs'@;
put 'Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwx'@;
put 'LDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0x'@;
put 'LjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwx'@;
put 'OS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTG9naW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt'@;
put 'MlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4'@;
put 'LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQx'@;
put 'LTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVMb2dvdXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0y'@;
put 'LTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIy'@;
put 'SDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAs'@;
put 'MCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4'@;
put 'LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlUHJpbnRlcj0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAt'@;
put 'MlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIyLjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQg'@;
put 'MzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4x'@;
put 'My0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy'@;
put 'Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjci'@;
put 'IHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1Yx'@;
put 'M0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwxLDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIy'@;
put 'LjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZW'@;
put 'MTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwx'@;
put 'OS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0x'@;
put 'SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i'@;
put 'MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVXb3JsZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRo'@;
put 'My42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEu'@;
put 'ODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4z'@;
put 'N0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcu'@;
put 'OSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCwwLDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5'@;
put 'LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFh'@;
put 'Ny40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQu'@;
put 'NzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQsMTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAs'@;
put 'MCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEtMy43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTku'@;
put 'MzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4zMy0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4z'@;
put 'NmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNaTTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1'@;
put 'VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIsMjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVj'@;
put 'LS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIs'@;
put 'MCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRj'@;
put 'LjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4'@;
put 'LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2'@;
put 'LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYs'@;
put 'MjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjku'@;
put 'NTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjky'@;
put 'LDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4'@;
put 'YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44'@;
put 'Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAsMCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcu'@;
put 'NDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVTbGlkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43'@;
put 'OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCww'@;
put 'LDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIs'@;
put 'MCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMu'@;
put 'MjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMu'@;
put 'MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMu'@;
put 'MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMx'@;
put 'QTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIu'@;
put 'MzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEx'@;
put 'IiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIy'@;
put 'NiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCww'@;
put 'VjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNyww'@;
put 'LDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5'@;
put 'VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEu'@;
put 'MzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4z'@;
put 'MVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCww'@;
put 'LDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+Jyks'@;
put 'Ri5DbHJTaGFwZUZpcmV3YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMy'@;
put 'djYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEuNzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEy'@;
put 'LDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUsNy41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhI'@;
put 'MjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45'@;
put 'VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYi'@;
put 'IHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy'@;
put 'LDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhI'@;
put 'MTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRI'@;
put 'NFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdW'@;
put 'MTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9'@;
put 'IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwz'@;
put 'MEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0i'@;
put 'OSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIx'@;
put 'MSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5'@;
put 'LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy'@;
put 'LDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0x'@;
put 'MywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZI'@;
put 'MTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt'@;
put 'LWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVSZWRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVVbmRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40'@;
put 'Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVTY3JvbGw9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAs'@;
put 'NC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMyLDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYt'@;
put 'Mi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww'@;
put 'djQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAs'@;
put 'Ni41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4'@;
put 'YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2'@;
put 'LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk'@;
put 'Z2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMu'@;
put 'MTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwx'@;
put 'NS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41'@;
put 'LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMu'@;
put 'NUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEu'@;
put 'MTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGEx'@;
put 'LjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0'@;
put 'LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiww'@;
put 'LDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQy'@;
put 'LTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIx'@;
put 'LDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMu'@;
put 'MDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTIt'@;
put 'MSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQu'@;
put 'MDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZW'@;
put 'NUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCww'@;
put 'LS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCww'@;
put 'LS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44Mywx'@;
put 'LjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmEx'@;
put 'LjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCww'@;
put 'LDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEt'@;
put 'MS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4y'@;
put 'Myw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5'@;
put 'LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4'@;
put 'LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2'@;
put 'LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4x'@;
put 'NSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3'@;
put 'LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCww'@;
put 'LDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0x'@;
put 'LjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2'@;
put 'LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4'@;
put 'bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEs'@;
put 'MSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAs'@;
put 'NC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t'@;
put 'YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgy'@;
put 'NnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCww'@;
put 'LDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0u'@;
put 'MjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJh'@;
put 'LjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVW'@;
put 'MjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu'@;
put 'NTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3'@;
put 'LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCww'@;
put 'LC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2'@;
put 'bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwz'@;
put 'My41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1'@;
put 'LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJh'@;
put 'LjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3'@;
put 'LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu'@;
put 'MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNyww'@;
put 'LDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIC8+JyksRi5DbHJTaGFwZVR3b1dheUFycm93'@;
put 'cz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMu'@;
put 'MjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5'@;
put 'LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4y'@;
put 'MSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVUb29scz0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYy'@;
put 'OGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgx'@;
put 'NmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4Ljky'@;
put 'LDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCww'@;
put 'LDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlV2luZG93Q2xvc2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4'@;
put 'LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4n'@;
put 'KSxGLkNsclNoYXBlV2luZG93TWF4PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVdpbmRvd01pbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz4nKSxGLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiIC8+JyksRi5DbHJTaGFwZVpvb21Jbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv'@;
put 'PicpLEYuQ2xyU2hhcGVab29tT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlS2V5PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMi'@;
put 'IHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcu'@;
put 'NDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4'@;
put 'LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykg'@;
put 'cm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCwwLDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwy'@;
put 'OC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBMMjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03'@;
put 'LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy'@;
put 'dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEg'@;
put 'MTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4w'@;
put 'NywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywz'@;
put 'LDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUs'@;
put 'NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUu'@;
put 'NjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjgu'@;
put 'MjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAs'@;
put 'MC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCww'@;
put 'LDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu'@;
put 'MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwz'@;
put 'LjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFM'@;
put 'MTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlTGlicmFyeT0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBh'@;
put 'MSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJT'@;
put 'aGFwZUJvbHQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGEx'@;
put 'LDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1'@;
put 'aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVXcmVuY2g9KDAsbS5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCww'@;
put 'LDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4'@;
put 'LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJv'@;
put 'dGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSww'@;
put 'LDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUJ1bGxzZXllPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwy'@;
put 'LjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgs'@;
put 'NC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42'@;
put 'LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjks'@;
put 'NC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQu'@;
put 'MDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlVGFy'@;
put 'Z2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcs'@;
put 'MCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'OCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVGbGFtZT0o'@;
put 'MCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMs'@;
put 'MjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4y'@;
put 'MSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0'@;
put 'LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44'@;
put 'Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgy'@;
put 'Mi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43Nyww'@;
put 'LS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxG'@;
put 'LkNsclNoYXBlSG91cmdsYXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAs'@;
put 'MjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJI'@;
put 'N2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0u'@;
put 'NjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5'@;
put 'LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4z'@;
put 'Niw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAs'@;
put 'MCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEs'@;
put 'MCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMTho'@;
put 'MGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEu'@;
put 'MjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0'@;
put 'LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42'@;
put 'Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBh'@;
put 'Ni4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwx'@;
put 'LDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4w'@;
put 'NywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1'@;
put 'TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2'@;
put 'LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQu'@;
put 'NTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu'@;
put 'MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'YWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcs'@;
put 'NEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkx'@;
put 'LTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwxMS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwx'@;
put 'MS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZU5vQWNjZXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0'@;
put 'LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3'@;
put 'LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4y'@;
put 'NSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYu'@;
put 'ODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZU9yZ2Fu'@;
put 'aXphdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4'@;
put 'LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIx'@;
put 'Ljg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0'@;
put 'IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZUJhbGFuY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEu'@;
put 'Ni44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCww'@;
put 'LDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTgu'@;
put 'MTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLEYuQ2xyU2hhcGVJZEJhZGdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAs'@;
put 'MCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiww'@;
put 'LDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAs'@;
put 'MCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y'@;
put 'Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4'@;
put 'LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y'@;
put 'OCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYu'@;
put 'ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIwLDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2Ex'@;
put 'LjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJW'@;
put 'MzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEw'@;
put 'LjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4y'@;
put 'MyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAs'@;
put 'MCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAs'@;
put 'MCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgi'@;
put 'IGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwx'@;
put 'MC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41'@;
put 'QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZVJlcGVhdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4y'@;
put 'OCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02'@;
put 'LjFsLTIsMi4xMloiLz4nKSxGLkNsclNoYXBlRmlsZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFW'@;
put 'MzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg'@;
put 'ZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4Vjdh'@;
put 'MSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLEYuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMyww'@;
put 'LDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYs'@;
put 'MzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUt'@;
put 'LjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEs'@;
put 'MjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLEYuQ2xyU2hhcGVTaHJpbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0z'@;
put 'MiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEs'@;
put 'MCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksRi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43'@;
put 'LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4x'@;
put 'Miw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42'@;
put 'MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgs'@;
put 'MS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4y'@;
put 'OSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwx'@;
put 'MS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43'@;
put 'Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWEx'@;
put 'LDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcu'@;
put 'OTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCww'@;
put 'LC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVNvcnRCeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAt'@;
put 'Mmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEs'@;
put 'MSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAt'@;
put 'MS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAs'@;
put 'MC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9'@;
put 'IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4z'@;
put 'N2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjds'@;
put 'NC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEs'@;
put 'MSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcu'@;
put 'NzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcu'@;
put 'MzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43'@;
put 'OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQnJpZWZjYXNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQs'@;
put 'Ni43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYx'@;
put 'OEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43'@;
put 'YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEs'@;
put 'LjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1'@;
put 'LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4w'@;
put 'NywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBh'@;
put 'dGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42'@;
put 'LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAs'@;
put 'MCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwx'@;
put 'Ni43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQu'@;
put 'MDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcu'@;
put 'MzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0'@;
put 'aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43'@;
put 'MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgy'@;
put 'OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUg'@;
put 'Y3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9'@;
put 'IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVGaWx0ZXIyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2Ex'@;
put 'LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZU1vb249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQu'@;
put 'OTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwx'@;
put 'LDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIu'@;
put 'MDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+Jyks'@;
put 'Ri5DbHJTaGFwZVN1bj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0x'@;
put 'OCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4zMiw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5'@;
put 'LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSwwLTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwx'@;
put 'LDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQx'@;
put 'YTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywxMGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAs'@;
put 'MC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAu'@;
put 'MDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45'@;
put 'MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAsMCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2'@;
put 'LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0xLTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYu'@;
put 'NDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwy'@;
put 'Ni4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDkuODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTks'@;
put 'OC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLEYuQ2xyU2hhcGVXYW5kPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwy'@;
put 'LjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMt'@;
put 'NS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywx'@;
put 'LjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41'@;
put 'MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAs'@;
put 'MCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wx'@;
put 'LjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksRi5DbHJTaGFwZUN1cnNvck1vdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUu'@;
put 'ODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFM'@;
put 'MTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz4nKSxGLkNsclNoYXBlQ2xvbmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIx'@;
put 'IDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCww'@;
put 'LDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwz'@;
put 'MCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRGV0YWlscz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCww'@;
put 'LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCww'@;
put 'LDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwx'@;
put 'LDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'Lz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBj'@;
put 'eD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVFcmFzZXI9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0'@;
put 'bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBs'@;
put 'Ny4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCww'@;
put 'LDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgs'@;
put 'MTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlTGFuZHNjYXBlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwy'@;
put 'SDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wt'@;
put 'MS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0x'@;
put 'LjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs'@;
put 'MCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0u'@;
put 'MzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBhc3RlPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJh'@;
put 'MiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0i'@;
put 'MiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQb3J0cmFpdD0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgt'@;
put 'MS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCww'@;
put 'LDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0y'@;
put 'VjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1'@;
put 'LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlVHJlZVZpZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAs'@;
put 'MS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2Ex'@;
put 'LDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJI'@;
put 'NFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw'@;
put 'YXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi'@;
put 'IC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEs'@;
put 'MCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAs'@;
put 'MC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2'@;
put 'LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01'@;
put 'LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwx'@;
put 'LDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJj'@;
put 'LjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4y'@;
put 'OC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMu'@;
put 'MTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwu'@;
put 'NDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZh'@;
put 'MS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVGaWxlWmlw'@;
put 'PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMw'@;
put 'LDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0x'@;
put 'My40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5'@;
put 'YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQs'@;
put 'MSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45'@;
put 'LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAu'@;
put 'NCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2'@;
put 'MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlsdGVyT2ZmPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJI'@;
put 'MzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIu'@;
put 'MSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVSZWN5Y2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAu'@;
put 'NS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCwwLjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42'@;
put 'LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcuNyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwxLjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0'@;
put 'XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRcdGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43'@;
put 'LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUuMiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjktMy42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAu'@;
put 'My0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwyLjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAs'@;
put 'MC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4x'@;
put 'Yy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4y'@;
put 'LDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEu'@;
put 'OCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEt'@;
put 'MC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45'@;
put 'LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwt'@;
put 'Ni4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRj'@;
put 'LTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIy'@;
put 'LjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlVHJlZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0x'@;
put 'MywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40'@;
put 'LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQu'@;
put 'OSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcu'@;
put 'NywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wz'@;
put 'LjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBk'@;
put 'PSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlzaD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xl'@;
put 'IGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43'@;
put 'NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZj'@;
put 'LTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBh'@;
put 'MjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkEx'@;
put 'LDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVGb3JtPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwx'@;
put 'LDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCww'@;
put 'LDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFh'@;
put 'MSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMz'@;
put 'LjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCww'@;
put 'LDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlRnVl'@;
put 'bD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcu'@;
put 'ODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUs'@;
put 'My41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCww'@;
put 'LDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEs'@;
put 'MSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVTbm93Zmxha2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSww'@;
put 'LDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwx'@;
put 'LDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAu'@;
put 'ODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEs'@;
put 'MSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwy'@;
put 'LjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQu'@;
put 'OCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAs'@;
put 'MCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4y'@;
put 'NiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxw'@;
put 'YXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxGLkNsclNo'@;
put 'YXBlVGFibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAs'@;
put 'MCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45'@;
put 'NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCww'@;
put 'LDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN'@;
put 'MjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxGLkNsclNoYXBlQ3Jv'@;
put 'c3NoYWlycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwx'@;
put 'LDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQs'@;
put 'MTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJT'@;
put 'aGFwZURvdENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCww'@;
put 'LDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVCZXRhPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYx'@;
put 'LDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1'@;
put 'Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4z'@;
put 'OC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcu'@;
put 'MDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgx'@;
put 'OVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwx'@;
put 'Ny41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0w'@;
put 'LjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40'@;
put 'LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjkt'@;
put 'MC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4y'@;
put 'aC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC00Ii8+XG4nKSxGLkNsclNoYXBlRmlyc3RBaWQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwy'@;
put 'LDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgx'@;
put 'Ni43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCww'@;
put 'LDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQu'@;
put 'NWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41'@;
put 'aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxGLkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgsMi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSww'@;
put 'LDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4xLDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEu'@;
put 'MUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcyLDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAt'@;
put 'NC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43MiwyLjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgt'@;
put 'LjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIyLDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYs'@;
put 'NCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAtLjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4z'@;
put 'OS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5'@;
put 'LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44MywwLDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAs'@;
put 'MCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEuMTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYs'@;
put 'MS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAsMS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwx'@;
put 'NS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0uNS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgs'@;
put 'MSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43'@;
put 'OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4wNmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwx'@;
put 'LC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwx'@;
put 'LjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAsMC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEs'@;
put 'MCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwyLjg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAs'@;
put 'MCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUuNTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQu'@;
put 'MUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMsMzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIz'@;
put 'LDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAsMSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwy'@;
put 'LjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwyLjg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4'@;
put 'LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEt'@;
put 'Mi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAsMCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIs'@;
put 'My4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOkYuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYi'@;
put 'OkYuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpGLkNsclNoYXBlUGluYm9hcmQsbmV3OkYuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Ri5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOkYuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpGLkNs'@;
put 'clNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpGLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOkYuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOkYuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Ri5D'@;
put 'bHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Ri5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Ri5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpGLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Ri5DbHJTaGFwZU9iamVjdHMsYm9vazpGLkNsclNoYXBlQm9vayxhc3Rlcmlz'@;
put 'azpGLkNsclNoYXBlQXN0ZXJpc2ssYnVnOkYuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Ri5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOkYuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Ri5DbHJTaGFwZVBlbmNpbCxub3RlOkYuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Ri5DbHJTaGFwZVJl'@;
put 'ZnJlc2gsc3luYzpGLkNsclNoYXBlU3luYywidmlldy1saXN0IjpGLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOkYuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Ri5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpGLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOkYuQ2xy'@;
put 'U2hhcGVEb3dubG9hZCx1cGxvYWQ6Ri5DbHJTaGFwZVVwbG9hZCxsb2NrOkYuQ2xyU2hhcGVMb2NrLHVubG9jazpGLkNsclNoYXBlVW5sb2NrLHVzZXJzOkYuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Ri5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6Ri5DbHJTaGFwZUZpbHRlcixwaW46Ri5DbHJT'@;
put 'aGFwZVBpbixmaWxlOkYuQ2xyU2hhcGVGaWxlLHBsdXM6Ri5DbHJTaGFwZVBsdXMsbWludXM6Ri5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOkYuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOkYuQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpGLkNsclNoYXBlQmFuLCJ0aW1l'@;
put 'cy1jaXJjbGUiOkYuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpGLkNsclNoYXBlVHJhc2gsY2lyY2xlOkYuQ2xyU2hhcGVDaXJjbGUsdGFnOkYuQ2xyU2hhcGVUYWcsdGFnczpGLkNsclNoYXBlVGFncyxoaXN0b3J5OkYuQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOkYuQ2xyU2hhcGVDbG9jaywi'@;
put 'YWxhcm0tY2xvY2siOkYuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OmxlLkNsclNoYXBlQXJyb3csImNpcmNsZS1hcnJvdyI6Ri5DbHJTaGFwZUNpcmNsZUFycm93LCJjaGlsZC1hcnJvdyI6Ri5DbHJTaGFwZUNoaWxkQXJyb3csY29weTpGLkNsclNoYXBlQ29weSxoZWxwOkYuQ2xyU2hhcGVI'@;
put 'ZWxwLGxvZ2luOkYuQ2xyU2hhcGVMb2dpbixsb2dvdXQ6Ri5DbHJTaGFwZUxvZ291dCxwcmludGVyOkYuQ2xyU2hhcGVQcmludGVyLHdvcmxkOkYuQ2xyU2hhcGVXb3JsZCxzbGlkZXI6Ri5DbHJTaGFwZVNsaWRlcixjbGlwYm9hcmQ6Ri5DbHJTaGFwZUNsaXBib2FyZCxmaXJld2FsbDpGLkNs'@;
put 'clNoYXBlRmlyZXdhbGwsbGlzdDpGLkNsclNoYXBlTGlzdCxyZWRvOkYuQ2xyU2hhcGVSZWRvLHVuZG86Ri5DbHJTaGFwZVVuZG8sc2Nyb2xsOkYuQ2xyU2hhcGVTY3JvbGwsImZpbGUtc2V0dGluZ3MiOkYuQ2xyU2hhcGVGaWxlU2V0dGluZ3MsInR3by13YXktYXJyb3dzIjpGLkNsclNoYXBl'@;
put 'VHdvV2F5QXJyb3dzLHN3aXRjaDpGLkNsclNoYXBlU3dpdGNoLHRvb2xzOkYuQ2xyU2hhcGVUb29scywid2luZG93LWNsb3NlIjpGLkNsclNoYXBlV2luZG93Q2xvc2UsIndpbmRvdy1tYXgiOkYuQ2xyU2hhcGVXaW5kb3dNYXgsIndpbmRvdy1taW4iOkYuQ2xyU2hhcGVXaW5kb3dNaW4sIndp'@;
put 'bmRvdy1yZXN0b3JlIjpGLkNsclNoYXBlV2luZG93UmVzdG9yZSwiem9vbS1pbiI6Ri5DbHJTaGFwZVpvb21Jbiwiem9vbS1vdXQiOkYuQ2xyU2hhcGVab29tT3V0LGtleTpGLkNsclNoYXBlS2V5LGxpYnJhcnk6Ri5DbHJTaGFwZUxpYnJhcnksYm9sdDpGLkNsclNoYXBlQm9sdCx3cmVuY2g6'@;
put 'Ri5DbHJTaGFwZVdyZW5jaCxidWxsc2V5ZTpGLkNsclNoYXBlQnVsbHNleWUsdGFyZ2V0OkYuQ2xyU2hhcGVUYXJnZXQsZmxhbWU6Ri5DbHJTaGFwZUZsYW1lLGhvdXJnbGFzczpGLkNsclNoYXBlSG91cmdsYXNzLCJuby1hY2Nlc3MiOkYuQ2xyU2hhcGVOb0FjY2Vzcyxvcmdhbml6YXRpb246'@;
put 'Ri5DbHJTaGFwZU9yZ2FuaXphdGlvbixiYWxhbmNlOkYuQ2xyU2hhcGVCYWxhbmNlLCJpZC1iYWRnZSI6Ri5DbHJTaGFwZUlkQmFkZ2UscmVwZWF0OkYuQ2xyU2hhcGVSZXBlYXQsImZpbGUtZ3JvdXAiOkYuQ2xyU2hhcGVGaWxlR3JvdXAscGFwZXJjbGlwOkYuQ2xyU2hhcGVQYXBlcmNsaXAs'@;
put 'c2hyaW5rOkYuQ2xyU2hhcGVTaHJpbmssImFjY2Vzc2liaWxpdHktMSI6Ri5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxLCJhY2Nlc3NpYmlsaXR5LTIiOkYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Miwic29ydC1ieSI6Ri5DbHJTaGFwZVNvcnRCeSwiY29sbGFwc2UtY2FyZCI6Ri5DbHJTaGFwZUNv'@;
put 'bGxhcHNlQ2FyZCwiZXhwYW5kLWNhcmQiOkYuQ2xyU2hhcGVFeHBhbmRDYXJkLGJyaWVmY2FzZTpGLkNsclNoYXBlQnJpZWZjYXNlLCJjb2xvci1waWNrZXIiOkYuQ2xyU2hhcGVDb2xvclBpY2tlciwiY29weS10by1jbGlwYm9hcmQiOkYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQsImZpbHRl'@;
put 'ci0yIjpGLkNsclNoYXBlRmlsdGVyMiwiZHJhZy1oYW5kbGUiOkYuQ2xyU2hhcGVEcmFnSGFuZGxlLG1vb246Ri5DbHJTaGFwZU1vb24sc3VuOkYuQ2xyU2hhcGVTdW4sd2FuZDpGLkNsclNoYXBlV2FuZCxjbG9uZTpGLkNsclNoYXBlQ2xvbmUsZGV0YWlsczpGLkNsclNoYXBlRGV0YWlscywi'@;
put 'ZHJhZy1oYW5kbGUtY29ybmVyIjpGLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcixlcmFzZXI6Ri5DbHJTaGFwZUVyYXNlcixsYW5kc2NhcGU6Ri5DbHJTaGFwZUxhbmRzY2FwZSxwYXN0ZTpGLkNsclNoYXBlUGFzdGUscG9ydHJhaXQ6Ri5DbHJTaGFwZVBvcnRyYWl0LCJmaWxlLXppcCI6Ri5D'@;
put 'bHJTaGFwZUZpbGVaaXAsImZpbHRlci1vZmYiOkYuQ2xyU2hhcGVGaWx0ZXJPZmYscmVjeWNsZTpGLkNsclNoYXBlUmVjeWNsZSx0cmVlOkYuQ2xyU2hhcGVUcmVlLGZpc2g6Ri5DbHJTaGFwZUZpc2gsZm9ybTpGLkNsclNoYXBlRm9ybSxmdWVsOkYuQ2xyU2hhcGVGdWVsLHNub3dmbGFrZTpG'@;
put 'LkNsclNoYXBlU25vd2ZsYWtlLHRhYmxlOkYuQ2xyU2hhcGVUYWJsZSwiZG90LWNpcmNsZSI6Ri5DbHJTaGFwZURvdENpcmNsZSx2b2x1bWU6Ri5DbHJTaGFwZVZvbHVtZSxjcm9zc2hhaXJzOkYuQ2xyU2hhcGVDcm9zc2hhaXJzLGJldGE6Ri5DbHJTaGFwZUJldGEsImNvbG9yLXBhbGV0dGUi'@;
put 'OkYuQ2xyU2hhcGVDb2xvclBhbGV0dGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wZW5jaWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsIm5v'@;
put 'dGUtZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5ub3RlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJncm91cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy51c2VycykpLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZG9jdW1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMuZmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYWRkIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50'@;
put 'aWFsU2hhcGVzLnBsdXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImNhbmNlbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5iYW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlbW92ZSIsKDAs'@;
put 'eC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1sidGltZXMtY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24taW4iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMubG9naW4pKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24tb3V0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50aWFsU2hhcGVzLmxvZ291dCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywibGlnaHRuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcp'@;
put 'KEYuRXNzZW50aWFsU2hhcGVzLmJvbHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImZsb3ctY2hhcnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMub3JnYW5pemF0aW9uKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50'@;
put 'aWFsU2hhcGVzLCJhbGVydCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1siYnViYmxlLWV4Y2xhbWF0aW9uIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInBpbm5lZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlh'@;
put 'bFNoYXBlcy5waW5ib2FyZCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMs'@;
put 'ImF0dGFjaG1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMucGFwZXJjbGlwKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJyZXNpemUtZG93biIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5zaHJp'@;
put 'bmspKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS11cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5yZXNpemUpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYm'@;
put 'd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5Fc3NlbnRpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAg'@;
put 'ICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlv'@;
put 'bihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuTWVkaWFTaGFwZXM9Ri5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPUYuQ2xyU2hhcGVNaWNyb3Bob25lPUYuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Ri5DbHJTaGFw'@;
put 'ZVJlcGxheU9uZT1GLkNsclNoYXBlUmVwbGF5QWxsPUYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Ri5DbHJTaGFwZU11c2ljTm90ZT1GLkNsclNoYXBlRmlsbVN0cmlwPUYuQ2xyU2hhcGVIZWFkcGhvbmVzPUYuQ2xyU2hhcGVWb2x1bWVNdXRlPUYuQ2xyU2hhcGVWb2x1bWVVcD1GLkNsclNoYXBl'@;
put 'Vm9sdW1lRG93bj1GLkNsclNoYXBlU2h1ZmZsZT1GLkNsclNoYXBlVmlkZW9DYW1lcmE9Ri5DbHJTaGFwZUNhbWVyYT1GLkNsclNoYXBlRmFzdEZvcndhcmQ9Ri5DbHJTaGFwZVJld2luZD1GLkNsclNoYXBlUG93ZXI9Ri5DbHJTaGFwZVN0b3A9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkPUYuQ2xy'@;
put 'U2hhcGVQYXVzZT1GLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlUGxheT0oMCx4LmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguMDcsMzEuNkEyLjA3LDIuMDcsMCwwLDEsNiwyOS41M1Y2LjMyQTIuMDcsMi4wNywwLDAsMSw5LDQuNDdMMzIuMjEsMTYuMDhhMi4wNywyLjA3LDAsMCwxLDAsMy43TDksMzEuMzhBMi4wNiwyLjA2LDAs'@;
put 'MCwxLDguMDcsMzEuNlptMC0yNS4zNEw4LDYuMzJWMjkuNTNsLjEuMDZMMzEuMzEsMThhLjA2LjA2LDAsMCwwLDAtLjA2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxNi4wOCw4Ljk0LDQuNDdBMi4w'@;
put 'NywyLjA3LDAsMCwwLDYsNi4zMlYyOS41M2EyLjA2LDIuMDYsMCwwLDAsMywxLjg1TDMyLjE2LDE5Ljc3YTIuMDcsMi4wNywwLDAsMCwwLTMuN1oiLz4nKSxGLkNsclNoYXBlUGF1c2U9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xMi45MywzMkg2LjA3QTIuMDcsMi4wNywwLDAsMSw0LDI5LjkzVjYuMDdBMi4wNywyLjA3LDAsMCwxLDYuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwxNSw2LjA3VjI5LjkzQTIuMDcsMi4wNywwLDAsMSwxMi45MywzMlpNMTMsNkg2VjMwaDdaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOS45MywzMkgyMy4wN0EyLjA3LDIuMDcsMCwwLDEsMjEsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsMjMuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwzMiw2LjA3VjI5LjkzQTIu'@;
put 'MDcsMi4wNywwLDAsMSwyOS45MywzMlpNMzAsNkgyM1YzMGg3WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+JyksRi5DbHJTaGFwZVN0ZXBGb3J3YXJkPSgwLHguY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNSwzMi4yM2EyLDIsMCwwLDEtMi0yVjUuNzdBMiwyLDAsMCwxLDYuMTcsNC4xNEwyMy4yMywxNi4zOGEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xNywzMS44NkEyLDIsMCwwLDEsNSwzMi4yM1pNNSw1Ljc3'@;
put 'VjMwLjIzTDIyLjA3LDE4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzEsMzJIMjhhMiwyLDAsMCwxLTItMlY2YTIsMiwwLDAsMSwyLTJoM2EyLDIsMCwwLDEsMiwyVjMwQTIsMiwwLDAsMSwzMSwzMlpN'@;
put 'MjgsNlYzMGgzVjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUsMzEuOWEyLDIsMCwwLDEtMi0yVjUuNDRBMiwyLDAsMCwxLDYuMTIsMy44MUwyMy4xOCwxNmEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xMiwzMS41'@;
put 'MkEyLDIsMCwwLDEsNSwzMS45WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHg9IjI1Ljk1IiB5PSIzLjY3IiB3aWR0aD0iNyIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksRi5DbHJTaGFwZVN0b3A9KDAseC5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMkg2YTIsMiwwLDAsMS0yLTJWNkEyLDIsMCwwLDEsNiw0SDMwYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMwLDMyWk02LDZWMzBIMzBWNloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIzLjk2IiB5PSI0IiB3aWR0aD0iMjcuOTkiIGhlaWdodD0iMjgiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVQb3dlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4'@;
put 'LDM0LjE1YTE1LDE1LDAsMCwxLTcuNTItMjgsMSwxLDAsMCwxLDEsMS43MywxMywxMywwLDEsMCwxMywwLDEsMSwwLDEsMSwxLTEuNzMsMTUsMTUsMCwwLDEtNy41MiwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMCwxLTFWNGExLDEsMCwwLDAtMiwwVjIwQTEsMSwwLDAsMCwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCIgZD0iTTMyLjUxLDE1LjRIMzAuNDRhMTMsMTMsMCwxLDEtMTktNy41LDEsMSwwLDAsMC0xLTEuNzNBMTUsMTUsMCwxLDAsMzMsMTkuMTUsMTQuOSwxNC45LDAsMCwwLDMyLjUxLDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwyMWExLDEsMCwwLDEtMS0xVjRhMSwxLDAsMCwxLDIsMFYyMEExLDEsMCwwLDEsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNWwtLjMxLDBBMTMsMTMsMCwxLDEsMTEuNDgsNy45YTEsMSwwLDAsMC0xLTEuNzMsMTUsMTUsMCwxLDAsMjEuMzEsNy4xQTcuNDksNy40OSwwLDAsMSwzMCwxMy41'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptLjA2LDE3LjY4YTEuMjgsMS4yOCwwLDAsMS0xLjI5LTEuMjhWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwVjE4LjRBMS4yOCwxLjI4LDAsMCwxLDE4LjA2LDE5LjY4Wk0x'@;
put 'OCwyNy43OUE5Ljg4LDkuODgsMCwwLDEsMTIuMTcsOS44NWExLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjQsMS40LDAs'@;
put 'MCwxLDEuOTQtLjI5QTkuODgsOS44OCwwLDAsMSwxOCwyNy43OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtNkE5LjcsOS43LDAsMCwxLDI4LDE3Ljg5YTEw'@;
put 'LDEwLDAsMSwxLTE1LjgzLTgsMS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAsMTEuNDMsNS44LDcuMDgsNy4wOCwwLDAsMC0uNDUtMi40OUgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTR2NC40YTEuMjksMS4yOSwwLDAs'@;
put 'MS0yLjU4LDBWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwdi43MWwzLjc2LTYuNTFBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMy41Ny0uOUE5LjgzLDkuODMsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywx'@;
put 'LjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjM4LDEuMzgsMCwwLDEsMS41Mi0uNDksNy40NSw3LjQ1LDAsMCwxLS4zLTYuODMsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5'@;
put 'LjkzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi43Nyw4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNGExLjI5LDEuMjksMCwwLDEtMi41OCwwWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUmV3aW5kPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuMDksMzEuNThsLTE1LjMyLTEyYTIsMiwwLDAs'@;
put 'MSwwLTMuMTVsMTUuMzItMTJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTEuNzcsMS43NywwLDAsMSwyMCw2djYuN0wzMC44Myw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzQsNlYzMGEyLDIsMCwwLDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4y'@;
put 'MkwyMCwyMy4zMVYzMGExLjc3LDEuNzcsMCwwLDEtLjg1LDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWk0zMiwzMGwuMDYtMjRMMTgsMTYuOFY2TDMsMTgsMTgsMzBWMTkuMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik0xNi45MiwzMS41OCwxLjYsMTkuNTdhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMkExLjkzLDEuOTMsMCwwLDEsMTksNC4yLDEuODksMS44OSwwLDAsMSwyMCw2djYuN0wzMC42Niw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzMuODMsNlYzMGEyLDIsMCww'@;
put 'LDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMkwyMCwyMy4zMVYzMGExLjg5LDEuODksMCwwLDEtMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMloiLz4nKSxGLkNsclNoYXBlRmFzdEZvcndhcmQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy43NywzMS45MmEyLDIsMCwwLDEtLjg2LS4yQTEuODEsMS44MSwwLDAsMSwxNiwyOS45M3YtNi43TDUuMjQsMzEuNWExLjk0LDEuOTQsMCwwLDEtMi4wNi4yMiwyLDIsMCwwLDEtMS4xMS0xLjc5di0yNEEyLDIsMCwwLDEsMy4xOCw0'@;
put 'LjEyYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjYxVjUuOTFhMS44MSwxLjgxLDAsMCwxLC45MS0xLjc5QTEuOTMsMS45MywwLDAsMSwxOSw0LjM0bDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVMMTksMzEuNUEyLDIsMCwwLDEsMTcuNzcsMzEuOTJabTAtMTIuOFYyOS45M2wxNS4y'@;
put 'Ni0xMi0xNS4zMi0xMiwuMDYsMTAuODFMNCw1LjkxdjI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE3LjcxLDMyYTIsMiwwLDAsMS0uODYtLjJBMS43NywxLjc3LDAsMCwxLDE2LDMwdi02LjdMNS4xNywzMS41OGEx'@;
put 'Ljk0LDEuOTQsMCwwLDEtMi4wNi4yMkEyLDIsMCwwLDEsMiwzMFY2QTIsMiwwLDAsMSwzLjExLDQuMmExLjkzLDEuOTMsMCwwLDEsMi4wNi4yMkwxNiwxMi42OVY2YTEuNzcsMS43NywwLDAsMSwuODUtMS43OSwxLjkzLDEuOTMsMCwwLDEsMi4wNi4yMmwxNS4zMiwxMmEyLDIsMCwwLDEsMCwz'@;
put 'LjE1bC0xNS4zMiwxMkEyLDIsMCwwLDEsMTcuNzEsMzJaIi8+JyksRi5DbHJTaGFwZUNhbWVyYT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwyLDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCww'@;
put 'LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwyMkg0VjEwaDguNjdsMS41NS00aDcuNTZsMS41NSw0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik05LDE5YTksOSwwLDEsMCw5LTlBOSw5LDAsMCwwLDksMTlabTE2LjQsMEE3LjQsNy40LDAsMSwxLDE4LDExLjYsNy40MSw3LjQxLDAsMCwxLDI1LjQsMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuMzcs'@;
put 'MTIuODNhLjguOCwwLDAsMC0uOC0uOEg2LjE3YS44LjgsMCwwLDAsMCwxLjZoMi40QS44LjgsMCwwLDAsOS4zNywxMi44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzQsMTlhNS41Nyw1LjU3LDAsMCww'@;
put 'LDMuMjQsNWwuODUtMS4zN2E0LDQsMCwxLDEsNC4xMS02LjYxbC44Ni0xLjM4QTUuNTYsNS41NiwwLDAsMCwxMi4zNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwy'@;
put 'LDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNi4xNywxMy42M2EuOC44LDAsMCwxLDAtMS42aDIuNGEuOC44LDAsMCwxLDAsMS42'@;
put 'Wk0xOCwyOGE5LDksMCwxLDEsOS05QTksOSwwLDAsMSwxOCwyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4xMSwxOS4wNmE3LjA3LDcuMDcsMCwwLDAsNC4xMSw2LjQxbDEuMDktMS43NGE1LDUsMCwxLDEsNS4y'@;
put 'Mi04LjM5bDEuMDktMS43NmE3LjA2LDcuMDYsMCwwLDAtMTEuNTEsNS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlVmlkZW9DYW1lcmE9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zNCwxMC4zNGEyLjExLDIuMTEsMCwwLDAtMS4xNi0xLjksMiwyLDAsMCwwLTIuMTMuMTVMMjYsMTEuNlY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjRhMiwyLDAsMCwwLDItMlYyNC40bDQuNjQsM2EyLjA3LDIuMDcs'@;
put 'MCwwLDAsMi4yLjJBMi4xMSwyLjExLDAsMCwwLDM0LDI1LjY2Wk0zMS45MywyNS43N2MtLjA2LDAtLjExLDAtLjE5LS4wNkwyNCwyMC43N1YyOEg2YTIsMiwwLDAsMS0yLTJWMTBBMiwyLDAsMCwxLDYsOEgyNHY3LjIzbDcuOC01YS4xMS4xMSwwLDAsMSwuMTMsMCwuMTEuMTEsMCwwLDEsLjA3'@;
put 'LjExVjI1LjY2QS4xMS4xMSwwLDAsMSwzMS45MywyNS43N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zLDkuMzUsMjYsMTIuOVY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0'@;
put 'LDRIMjRhMiwyLDAsMCwwLDItMlYyMy4wOGw2LjMsMy41NUExLjEsMS4xLDAsMCwwLDM0LDI1Ljc3VjEwLjJBMS4xLDEuMSwwLDAsMCwzMi4zLDkuMzVaIi8+JyksRi5DbHJTaGFwZVNodWZmbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0yMS42MSwxMWg4LjYybC0zLjMsMy4zYTEsMSwwLDEsMCwxLjQxLDEuNDJMMzQsMTAuMDhsLS43MS0uNzFoMEwyOC4zNCw0LjQzYTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTEsOUgyMWExLDEsMCwwLDAtLjg2LjVMMTcuNSwxNC4wOWwxLjE2LDJaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTExLjA3LDI1LjA3SDNhMSwxLDAsMCwwLDAsMmg4LjY1YTEsMSwwLDAsMCwuODYtLjVMMTUuMTgsMjIsMTQsMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI4LjM0LDIwLjE3YTEsMSwwLDAsMC0xLjQxLDEuNDJsMy41LDMuNUgyMS42MUwxMi41MSw5LjUzYTEsMSwwLDAsMC0uODYtLjVIM2ExLDEsMCwxLDAsMCwyaDguMDdsOS4xLDE1LjU1YTEsMSwwLDAsMCwuODYuNUgyOS45bC0zLDNhMSwx'@;
put 'LDAsMCwwLDEuNDEsMS40Mmw0Ljk1LTQuOTRoMGwuNzEtLjcxWiIvPicpLEYuQ2xyU2hhcGVWb2x1bWVEb3duPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1'@;
put 'LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwz'@;
put 'MmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy40MUEyLDIsMCwwLDEsMjAsNlYzMGEyLDIsMCwwLDEtMS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4yOEwxOCwz'@;
put 'MFY2bC03LjY1LDcuNjhhMSwxLDAsMCwxLS43MS4zWk0xOCw2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjExYTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSww'@;
put 'LDEsMSwxLTEuNzNBOC4yMSw4LjIxLDAsMCwxLDIzLjk0LDI1LDEsMSwwLDAsMSwyMy40MSwyNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOC4zNCwzLjg3LDksMTJIM2ExLDEsMCwwLDAtMSwxVjIzYTEsMSww'@;
put 'LDAsMCwxLDFIOC44M2w5LjUxLDguM0ExLDEsMCwwLDAsMjAsMzEuNTVWNC42MkExLDEsMCwwLDAsMTguMzQsMy44N1oiLz4nKSxGLkNsclNoYXBlVm9sdW1lVXA9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0y'@;
put 'My40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzMi4wNmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy4zOUEyLDIsMCwwLDEsMjAsNnYyNGEyLDIsMCwwLDEt'@;
put 'MS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMi4wNlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4zTDE4LDMwLjA2VjZMMTAuMzUsMTMuN2ExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBk'@;
put 'PSJNMjMuNDEsMjUuMjVhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43Myw4LjIxLDguMjEsMCwwLDEsLjI0LDE0LjA2QTEsMSwwLDAsMSwyMy40MSwyNS4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LjMzLDQsOS4wNywxMmgtNmExLDEsMCwwLDAtMSwxdjkuOTJhMSwxLDAsMCwwLDEsMUg4Ljg4bDkuNDYsOC4yNEExLDEsMCwwLDAsMjAsMzEuNDNWNC43MkExLDEsMCwwLDAsMTguMzMsNFoiLz4nKSxG'@;
put 'LkNsclNoYXBlVm9sdW1lTXV0ZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMuNjEsNi40MSw5LjE5LDEySDRhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJIOS4xNGw3LjQxLDcuNDdBMiwyLDAsMCww'@;
put 'LDE4LDMyYTIsMiwwLDAsMCwuNzYtLjE1QTIsMiwwLDAsMCwyMCwzMFYyMi43N2w1Ljg5LDUuODljLS4yNS4xNS0uNDkuMjktLjc1LjQyYTEsMSwwLDAsMCwuOSwxLjc5LDE0LjQsMTQuNCwwLDAsMCwxLjMxLS43NWwyLjI4LDIuMjhMMzEsMzEsNSw1Wk0xOCwzMGwtNy43My03Ljc3QTEsMSww'@;
put 'LDAsMCw5LjU2LDIySDRWMTRIOS42NGExLDEsMCwwLDAsLjcxLS4zbC4yNi0uMjZMMTgsMjAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0Ljg5LDYuNjlBMTIuNDIsMTIuNDIsMCwwLDEsMjksMjYuMWwx'@;
put 'LjQyLDEuNDJBMTQuNDIsMTQuNDIsMCwwLDAsMjUuNzYsNC44OGExLDEsMCwxLDAtLjg3LDEuOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4x'@;
put 'Nyw2LjE3LDAsMCwxLTEuMjQsMy43MUwyNiwyMy4xM0E4LjE1LDguMTUsMCwwLDAsMjcuOCwxOGE4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBk'@;
put 'PSJNMTgsNnY5LjE1bDIsMlY2YTIsMiwwLDAsMC0zLjQyLTEuNDFMMTIsOS4xN2wxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjQuODcsNi42OUExMi40MiwxMi40MiwwLDAsMSwyOC43NSwyNi4zbDEu'@;
put 'NDIsMS40MkExNC40MywxNC40MywwLDAsMCwyNS43NCw0Ljg4YTEsMSwwLDAsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI3LjMsMjcuNjdoMGwtMy44NC0zLjg0LS41Ny0uNTdoMEw0LjYzLDUsMy4y'@;
put 'MSw2LjQxLDguOCwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVYyMy4ybDUuNTksNS41OWMtLjE3LjEtLjM0LjItLjUxLjI5YTEsMSwwLDAsMCwuOSwxLjc5Yy4zNy0uMTkuNzItLjQsMS4wOC0uNjJsMi4xNCwyLjE0'@;
put 'TDMwLjYxLDMxbC0zLjI1LTMuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4xNyw2LjE3LDAsMCwxLTEuNDIsMy45MmwxLjQyLDEuNDJhOC4xNiw4'@;
put 'LjE2LDAsMCwwLDItNS4zNCw4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yMCw0LjYyYTEsMSwwLDAsMC0xLjY2LS43NWwtNi40Miw1LjZMMjAs'@;
put 'MTcuNTRaIi8+JyksRi5DbHJTaGFwZUhlYWRwaG9uZXM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg5LjJBMi43NCwyLjc0LDAsMCwwLDEyLDI4LjMz'@;
put 'VjIxLjY3QTIuNzQsMi43NCwwLDAsMCw5LjIsMTlINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYxOUgyNi44QTIuNzQsMi43NCwwLDAsMCwyNCwyMS42N3Y2LjY3QTIuNzQsMi43NCwwLDAsMCwyNi44LDMxSDMyVjE3LjVBMTQuMjcsMTQu'@;
put 'MjcsMCwwLDAsMTgsM1pNOS4yLDIxYS43NS43NSwwLDAsMSwuOC42N3Y2LjY3YS43NS43NSwwLDAsMS0uOC42N0g2VjIxWk0yNiwyOC4zM1YyMS42N2EuNzUuNzUsMCwwLDEsLjgtLjY3SDMwdjhIMjYuOEEuNzUuNzUsMCwwLDEsMjYsMjguMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsM0ExNC4yNywxNC4yNywwLDAsMCw0LDE3LjVWMzFIOC4yQTEuNzQsMS43NCwwLDAsMCwxMCwyOS4zM1YyMi42N0ExLjc0LDEuNzQsMCwwLDAsOC4yLDIxSDZWMTcuNUExMi4yNywxMi4yNywwLDAsMSwxOCw1LDEyLjI3'@;
put 'LDEyLjI3LDAsMCwxLDMwLDE3LjVWMjFIMjcuOEExLjc0LDEuNzQsMCwwLDAsMjYsMjIuNjd2Ni42N0ExLjc0LDEuNzQsMCwwLDAsMjcuOCwzMUgzMlYxNy41QTE0LjI3LDE0LjI3LDAsMCwwLDE4LDNaIi8+JyksRi5DbHJTaGFwZUZpbG1TdHJpcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wm0wLDI2SDZWNkgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTQuNiwyMy4wN2ExLjI5LDEuMjksMCwwLDAsMS4yNC4wOWw4LjczLTRhMS4zLDEuMywwLDAsMCwwLTIuMzdoMGwtOC43My00QTEuMywxLjMsMCwwLDAsMTQsMTR2OEExLjI5LDEuMjksMCwwLDAsMTQuNiwyMy4wN1ptMS04LjZM'@;
put 'MjMuMzEsMTgsMTUuNiwyMS41MVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI4IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNCIgeD0iMTQiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyMCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjI2IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iOCIgeT0iMjYiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIxNCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC05IiB4PSIyMCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIwLDdoMnYzSDIwWk0xNCw3aDJ2M0gxNFpNMTAsMjlIOFYyNmgyWm0wLTE5'@;
put 'SDhWN2gyWm02LDE5SDE0VjI2aDJabTYsMEgyMFYyNmgyWm0zLjE2LTEwLjE2TDE1LjM5LDIzLjJBMSwxLDAsMCwxLDE0LDIyLjI4VjEzLjU3YTEsMSwwLDAsMSwxLjQxLS45MUwyNS4xNiwxN0ExLDEsMCwwLDEsMjUuMTYsMTguODRaTTI4LDI5SDI2VjI2aDJabTAtMTlIMjZWN2gyWiIvPicp'@;
put 'LEYuQ2xyU2hhcGVNdXNpY05vdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMzRhNS44OSw1'@;
put 'Ljg5LDAsMCwwLS44Mi0uNTYsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxQzcuNTcsMjIuNyw0LjkyLDI2LjUsNS43OCwyOS44NGE1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41N2MzLjY3LTEuMTgsNi4xNy00'@;
put 'LjMzLDYuMDYtNy4zNlY5LjM0YTI5LjE0LDI5LjE0LDAsMCwxLDYuNTUsMS40MywxLDEsMCwxLDAsLjcyLTEuODdBMzEuMzcsMzEuMzcsMCwwLDAsMjEsNy4zM1Y0LjE3YzMuMzMuMzYsOCwxLjM4LDguOTIsMywyLDMuNDEtMi4zMyw3LjM2LTIuMzcsNy40YTEsMSwwLDAsMCwxLjMzLDEuNDlD'@;
put 'MjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2Wk0xNC4zNSwzMS42N2E2LjQzLDYuNDMsMCwwLDEtNS0uMjYsMy4zMSwzLjMxLDAsMCwxLTEuNjktMi4wN2MtLjYtMi4zMywxLjQ1LTUuMDUsNC41OC02LjA2YTcuNTIsNy41MiwwLDAsMSwyLjMtLjM3LDUuNTIsNS41MiwwLDAsMSwyLjY1'@;
put 'LjYyLDMuMzEsMy4zMSwwLDAsMSwxLjY5LDIuMDdDMTkuNTQsMjcuOTQsMTcuNDksMzAuNjYsMTQuMzUsMzEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMS42OCw2LjE2Yy0xLjky'@;
put 'LTMuMy0xMC42LTQtMTEuNTgtNC4wOUwxOSwyVjIyLjI5YTUuODgsNS44OCwwLDAsMC0uODEtLjU1LDguMzMsOC4zMywwLDAsMC02LjUzLS40MWMtNC4xMiwxLjMzLTYuNzcsNS4xMy01LjkxLDguNDdhNS4zMyw1LjMzLDAsMCwwLDIuNjYsMy4zMiw3LjQ4LDcuNDgsMCwwLDAsMy42MS44OEE5'@;
put 'LjU0LDkuNTQsMCwwLDAsMTUsMzMuNTJjMy43LTEuMTksNi4yLTQuMzcsNi4wNi03LjQyLDAsMCwwLDAsMCwwVjguNDljMSwuMTIsMi4zNy4zMywzLjgyLjY0YTExLjE3LDExLjE3LDAsMCwxLDQuMDYsMS40NmMxLC42Ni4zOCwxLjkuMzMsMmExMS44LDExLjgsMCwwLDEtMS42NiwyLDEsMSww'@;
put 'LDAsMCwxLjMzLDEuNDlDMjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2WiIvPicpLEYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMu'@;
put 'ODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMzIsMzBINFYxMkgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik04LjU2LDE5LjQ1YTMsMywwLDEsMC0zLTNB'@;
put 'MywzLDAsMCwwLDguNTYsMTkuNDVabTAtNC42QTEuNiwxLjYsMCwxLDEsNywxNi40NSwxLjYsMS42LDAsMCwxLDguNTYsMTQuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy45LDI4bDYtNiwzLjE4LDMuMThMMTQuMjYsMjhoMmw3'@;
put 'LjQ2LTcuNDZMMzAsMjYuNzd2LTJMMjQuMiwxOWEuNzEuNzEsMCwwLDAtMSwwbC01LjE2LDUuMTZMMTQuMzcsMjAuNWEuNzEuNzEsMCwwLDAtMSwwTDUuOTIsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSww'@;
put 'LDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwx'@;
put 'LDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwz'@;
put 'MC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTguNTYsMTMuNDVhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC41NiwxMy40NVpNMzAsMjhoLTI0bDcuNDYtNy40N2EuNzEuNzEsMCwwLDEsMSwwbDMuNjgsMy42OEwyMy4yMSwxOWEuNzEuNzEsMCwwLDEsMSwwTDMwLDI0Ljc5'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlUmVwbGF5QWxsPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy40NiwyNi4yMmExLjQsMS40LDAsMCwwLDEtLjQybDUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAsLjQyLTEsMS40Niwx'@;
put 'LjQ2LDAsMCwwLS40Mi0xbC01LjU5LTUuNTZhMS40MywxLjQzLDAsMCwwLTIuNDQsMVYyNC43OWExLjQxLDEuNDEsMCwwLDAsLjg4LDEuMzJBMS41NCwxLjU0LDAsMCwwLDE3LjQ2LDI2LjIyWm0uMTYtMTIuMTYsNS4xOSw1LjE2LTUuMTksNS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEuNDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEu'@;
put 'NzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVJlcGxheU9uZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTks'@;
put 'MjcuMjdhMSwxLDAsMCwwLDEtMVYxNGExLDEsMCwwLDAtMS0xSDE5YTMuOCwzLjgsMCwwLDAtMS4xLjIzbC0yLC42MmEuOTIuOTIsMCwwLDAtLjcyLjg2Ljg4Ljg4LDAsMCwwLC44OC44NiwxLjQ2LDEuNDYsMCwwLDAsLjQzLS4wOEwxOCwxNS4wN3YxMS4yQTEsMSwwLDAsMCwxOSwyNy4yN1oi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEu'@;
put 'NDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEuNzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVZpZGVvR2FsbGVyeT0oMCx4'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEy'@;
put 'SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9'@;
put 'Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTIuODIsMjYuNzlhMS43NCwxLjc0LDAsMCwwLC45My4yOCwxLjY4LDEuNjgsMCwwLDAsLjY5LS4x'@;
put 'NWw5Ljc3LTQuMzZhMS42OSwxLjY5LDAsMCwwLDAtMy4xTDE0LjQ0LDE1LjFhMS43LDEuNywwLDAsMC0yLjM5LDEuNTV2OC43MkExLjcsMS43LDAsMCwwLDEyLjgyLDI2Ljc5Wm0uNjMtMTAuMTRhLjI5LjI5LDAsMCwxLC4xNC0uMjUuMy4zLDAsMCwxLC4xNiwwLC4yNy4yNywwLDAsMSwuMTIs'@;
put 'MGw5Ljc3LDQuMzVhLjI5LjI5LDAsMCwxLC4xOC4yOC4yOC4yOCwwLDAsMS0uMTguMjdsLTkuNzcsNC4zNmEuMjguMjgsMCwwLDEtLjI4LDAsLjMxLjMxLDAsMCwxLS4xNC0uMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIs'@;
put 'MTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0yNC4xOCwyMS44M2wtOS43Nyw0LjM2QTEsMSwwLDAsMSwxMywyNS4y'@;
put 'OFYxNi41NmExLDEsMCwwLDEsMS40MS0uOTFMMjQuMTgsMjBBMSwxLDAsMCwxLDI0LjE4LDIxLjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlTWljcm9waG9uZT0o'@;
put 'MCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IE0xMyw5YzAtMi44LDIuMi01LDUtNXM1LDIuMiw1LDV2OFxuXHRcdGMwLDIuOC0yLjIsNS01LDVzLTUtMi4y'@;
put 'LTUtNVY5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsNS41LTQuNSwxMC0xMCwxMFM4LDIyLjUsOCwxN0g2YzAsNi4zLDQuOCwxMS40LDExLDExLjlWMzJoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMw'@;
put 'LjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtMy4xQzI1LjIsMjguNCwzMCwyMy4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDI0YzMuOSwwLDctMy4xLDctN1Y5YzAtMy45LTMuMS03LTctN3MtNywz'@;
put 'LjEtNyw3djhDMTEsMjAuOSwxNC4xLDI0LDE4LDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSww'@;
put 'LjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZT0oMCx4LmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsNGMyLjgsMCw1LDIuMiw1LDV2OGMwLDAu'@;
put 'NC0wLjEsMC44LTAuMiwxLjJsMS42LDEuNmMwLjQtMC45LDAuNi0xLjgsMC42LTIuOFY5YzAtMy45LTMuMi03LTcuMS02Ljlcblx0XHRjLTIuOSwwLTUuNiwxLjktNi41LDQuN0wxMyw4LjNDMTMuNSw1LjksMTUuNiw0LjIsMTgsNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40LDAuMi05LjgtNC4xLTEw'@;
put 'LTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnogTTEzLjgsMTkuN0MxMy4z'@;
put 'LDE4LjksMTMsMTgsMTMsMTd2LTIuNmw3LjEsNy4xQzE3LjksMjIuNSwxNS4yLDIxLjgsMTMuOCwxOS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsMS44LTAuNSwzLjUtMS40LDVsMS41LDEuNUMyOS4zLDIxLjUs'@;
put 'MjkuOSwxOS4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUsMTdWOWMwLTMuOS0zLjItNy03LjEtNi45Yy0yLjksMC01LjYsMS45LTYuNSw0LjdsMTMsMTNDMjQuOCwxOC45LDI1LDE3LjksMjUsMTd6IiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40'@;
put 'LDAuMi05LjgtNC4xLTEwLTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnoi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5NZWRpYVNoYXBlcz17cGxheTpGLkNsclNoYXBlUGxheSxwYXVzZTpGLkNsclNoYXBlUGF1c2UsInN0ZXAtZm9yd2FyZCI6Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkLHN0b3A6Ri5DbHJTaGFwZVN0b3AscG93ZXI6'@;
put 'Ri5DbHJTaGFwZVBvd2VyLHJld2luZDpGLkNsclNoYXBlUmV3aW5kLCJmYXN0LWZvcndhcmQiOkYuQ2xyU2hhcGVGYXN0Rm9yd2FyZCxjYW1lcmE6Ri5DbHJTaGFwZUNhbWVyYSwidmlkZW8tY2FtZXJhIjpGLkNsclNoYXBlVmlkZW9DYW1lcmEsc2h1ZmZsZTpGLkNsclNoYXBlU2h1ZmZsZSwi'@;
put 'dm9sdW1lLXVwIjpGLkNsclNoYXBlVm9sdW1lVXAsInZvbHVtZS1kb3duIjpGLkNsclNoYXBlVm9sdW1lRG93biwidm9sdW1lLW11dGUiOkYuQ2xyU2hhcGVWb2x1bWVNdXRlLGhlYWRwaG9uZXM6Ri5DbHJTaGFwZUhlYWRwaG9uZXMsImZpbG0tc3RyaXAiOkYuQ2xyU2hhcGVGaWxtU3RyaXAs'@;
put 'Im11c2ljLW5vdGUiOkYuQ2xyU2hhcGVNdXNpY05vdGUsImltYWdlLWdhbGxlcnkiOkYuQ2xyU2hhcGVJbWFnZUdhbGxlcnksInJlcGxheS1hbGwiOkYuQ2xyU2hhcGVSZXBsYXlBbGwsInJlcGxheS1vbmUiOkYuQ2xyU2hhcGVSZXBsYXlPbmUsInZpZGVvLWdhbGxlcnkiOkYuQ2xyU2hhcGVW'@;
put 'aWRlb0dhbGxlcnksbWljcm9waG9uZTpGLkNsclNoYXBlTWljcm9waG9uZSwibWljcm9waG9uZS1tdXRlIjpGLkNsclNoYXBlTWljcm9waG9uZU11dGV9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25z'@;
put 'LmFkZChGLk1lZGlhU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNv'@;
put 'bnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Tb2NpYWxTaGFwZXM9Ri5DbHJTaGFwZUhhc2h0YWc9Ri5DbHJTaGFwZUNyb3duPUYuQ2xyU2hhcGVUaHVtYnNEb3duPUYuQ2xyU2hhcGVUaHVtYnNVcD1GLkNsclNoYXBlU2FkRmFjZT1GLkNs'@;
put 'clNoYXBlTmV1dHJhbEZhY2U9Ri5DbHJTaGFwZUhhcHB5RmFjZT1GLkNsclNoYXBlUGljdHVyZT1GLkNsclNoYXBlQ2hhdEJ1YmJsZT1GLkNsclNoYXBlVGFsa0J1YmJsZXM9Ri5DbHJTaGFwZUhlYXJ0QnJva2VuPUYuQ2xyU2hhcGVIZWFydD1GLkNsclNoYXBlSW5ib3g9Ri5DbHJTaGFwZUZs'@;
put 'YWc9Ri5DbHJTaGFwZVRhc2tzPUYuQ2xyU2hhcGVFbnZlbG9wZT1GLkNsclNoYXBlQm9va21hcms9Ri5DbHJTaGFwZUhhbGZTdGFyPUYuQ2xyU2hhcGVTdGFyPUYuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9q'@;
put 'ZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTtGLkNsclNoYXBlU2hhcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQs'@;
put 'MTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVptMC0yMGEzLDMsMCwxLDEtMywzQTMs'@;
put 'MywwLDAsMSwyNy41Myw0Wk03LDIxYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDcsMjFaTTI3LjUzLDMyYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDI3LjUzLDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0y'@;
put 'Ny41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1'@;
put 'LDAsMSwwLDUtNVoiLz4nKSxGLkNsclNoYXBlU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE5LDM0YTIuMjIsMi4yMiwwLDAsMS0xLjI0LS4zOGwtNy40Ni01YS4yMi4yMiwwLDAsMC0uMjUsMGwt'@;
put 'Ny40Niw1QTIuMjIsMi4yMiwwLDAsMSw3LjQsMzEuMjFsMi40NS04LjY0YS4yMy4yMywwLDAsMC0uMDgtLjI0TDIuNzEsMTYuNzhhMi4yMiwyLjIyLDAsMCwxLDEuMjktNGw5LS4zNGEuMjMuMjMsMCwwLDAsLjItLjE1bDMuMS04LjQzYTIuMjIsMi4yMiwwLDAsMSw0LjE3LDBsMy4xLDguNDNh'@;
put 'LjIzLjIzLDAsMCwwLC4yLjE1bDksLjM0YTIuMjIsMi4yMiwwLDAsMSwxLjI5LDRMMjcsMjIuMzNhLjIyLjIyLDAsMCwwLS4wOC4yNGwyLjQ1LDguNjRBMi4yMywyLjIzLDAsMCwxLDI3LjE5LDM0Wm0tOC44Mi03LjQyQTIuMjEsMi4yMSwwLDAsMSwxOS42LDI3bDcuNDYsNWEuMjIuMjIsMCww'@;
put 'LDAsLjM0LS4yNWwtMi40NS04LjY0YTIuMjEsMi4yMSwwLDAsMSwuNzctMi4zNWw3LjA2LTUuNTVhLjIyLjIyLDAsMCwwLS4xMy0uNGwtOS0uMzRhMi4yMiwyLjIyLDAsMCwxLTItMS40NmwtMy4xLTguNDNhLjIyLjIyLDAsMCwwLS40MiwwTDE1LjA2LDEzYTIuMjIsMi4yMiwwLDAsMS0yLDEu'@;
put 'NDZsLTksLjM0YS4yMi4yMiwwLDAsMC0uMTMuNEwxMSwyMC43NmEyLjIyLDIuMjIsMCwwLDEsLjc3LDIuMzVMOS4zMywzMS43NWEuMjEuMjEsMCwwLDAsLjA4LjI0LjIuMiwwLDAsMCwuMjYsMGw3LjQ2LTVBMi4yMiwyLjIyLDAsMCwxLDE4LjM2LDI2LjYyWiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEt'@;
put 'LjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIs'@;
put 'MCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0WiIvPicpLEYuQ2xyU2hhcGVIYWxmU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAs'@;
put 'MC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIyLjIyLDAsMCwxLC4wOC4yNEw3LjM1LDMx'@;
put 'LjIxQTIuMjMsMi4yMywwLDAsMCw5LjQ5LDM0YTIuMjIsMi4yMiwwLDAsMCwxLjI0LS4zOGw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIyLDIuMjIsMCwwLDAsMy4zOC0yLjQ1bC0yLjQ1LTguNjRhLjIzLjIzLDAsMCwxLC4wOC0uMjRaTTE4LjMzLDI2LjYyaDBhMi4yMSwy'@;
put 'LjIxLDAsMCwwLTEuMjQuMzhMOS42MiwzMmEuMjIuMjIsMCwwLDEtLjM0LS4yNWwyLjQ1LTguNjRBMi4yMSwyLjIxLDAsMCwwLDExLDIwLjc2TDMuOSwxNS4yMWEuMjIuMjIsMCwwLDEsLjEzLS40bDktLjM0QTIuMjIsMi4yMiwwLDAsMCwxNSwxM2wzLjEtOC40M2EuMi4yLDAsMCwxLC4yMS0u'@;
put 'MTVoMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcs'@;
put 'MGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIs'@;
put 'Mi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUtOC42NGEuMjIuMjIsMCwwLDEsLjA4LS4yNFpNMjQuOSwyMy4xMWwyLjQ1LDguNjRBLjIyLjIyLDAsMCwxLDI3LDMybC03LjQ2LTVhMi4yMSwyLjIxLDAsMCwwLTEuMjQtLjM4aDBWNC40NGgwYS4yLjIsMCwwLDEs'@;
put 'LjIxLjE1TDIxLjYyLDEzYTIuMjIsMi4yMiwwLDAsMCwyLDEuNDZsOSwuMzRhLjIyLjIyLDAsMCwxLC4xMy40bC03LjA2LDUuNTVBMi4yMSwyLjIxLDAsMCwwLDI0LjksMjMuMTFaIi8+JyksRi5DbHJTaGFwZUJvb2ttYXJrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMzRhMiwyLDAsMCwxLTEuNDEtLjU4TDE4LDI2LjgybC02LjU0LDYuNTJBMiwyLDAsMCwxLDgsMzEuOTNWNGEyLDIsMCwwLDEsMi0ySDI2YTIsMiwwLDAsMSwyLDJWMzJhMiwyLDAsMCwxLTIsMlptMC0yaDBWNEgxMFYzMS45M0wx'@;
put 'OCwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMkgxMEEyLDIsMCwwLDAsOCw0VjMxLjkzYTIsMiwwLDAsMCwzLjQyLDEuNDFsNi41NC02LjUyLDYuNjMsNi42QTIsMiwwLDAsMCwyOCwzMlY0QTIsMiww'@;
put 'LDAsMCwyNiwyWiIvPicpLEYuQ2xyU2hhcGVFbnZlbG9wZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIs'@;
put 'MiwwLDAsMCwzMiw2Wk0zMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBMMzIsOS4yMXYxNy41bC03LjM2LTcuMzYtMS40MSwxLjQxWk01LjMxLDhIMzAuMzhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMDhWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEy'@;
put 'LDIsMCwwLDAsMi44MiwwbDguODMtOC43OGE3LjQ0LDcuNDQsMCwwLDEtMi0uODVsLTguMjYsOC4yMUw1LjMxLDhIMjIuODFhNy40OSw3LjQ5LDAsMCwxLS4zMS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMkE3LjQ1LDcuNDUsMCwwLDEs'@;
put 'MzIsMTMuMDhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuODYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjI2SDMyVjI2LjcxbC03LjM2LTcuMzYtMS40MSwxLjQxTDMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCww'@;
put 'LDIuODIsMGw2LjY2LTYuNjNIMjMuMDhsLTUuMjQsNS4yMUw1LjMxLDhIMjAuMDZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zMyw2YTIsMiwwLDAsMC0uNDEsMGgtMjhhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODEsNy4zOSwxOS4yNSwyMS44OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzMuODEsNy4zOVpNNS4zLDI4SDMuOTFWMjYuNTdsNy4y'@;
put 'Ny03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNiwxMi4zNEE3LjQ5LDcu'@;
put 'NDksMCwwLDEsMjIuNSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI5'@;
put 'bC04LjcxLDguNjhhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAtLjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjEyLjM5QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMw'@;
put 'LjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjUuNzdsLTYuNTIsNi40OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiww'@;
put 'LDAsMCwyLTJWMTUuMzhaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yMi45NCwxNS40aC0uN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJT'@;
put 'aGFwZVRhc2tzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMjksMzRINi43MUExLjcsMS43LDAsMCwxLDUsMzIuMzFWNi42OUExLjc1LDEuNzUsMCwwLDEsNyw1SDlWN0g3VjMySDI5VjdIMjdWNWgyLjI1'@;
put 'QTEuNywxLjcsMCwwLDEsMzEsNi42OVYzMi4zMUExLjcsMS43LDAsMCwxLDI5LjI5LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuNjYsMjUuNzYsMTEuMywyMC40QTEsMSwwLDAsMSwxMi43Miwx'@;
put 'OWwzLjk0LDMuOTQsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNiwxMUgxMFY3LjMzQTIuMzQsMi4zNCwwLDAsMSwxMi4zMyw1aDEuNzlhNCw0LDAs'@;
put 'MCwxLDcuNzUsMGgxLjc5QTIuMzQsMi4zNCwwLDAsMSwyNiw3LjMzWk0xMiw5SDI0VjcuMzNBLjMzLjMzLDAsMCwwLDIzLjY3LDdIMjBWNmEyLDIsMCwwLDAtNCwwVjdIMTIuMzNhLjMzLjMzLDAsMCwwLS4zMy4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LDkuODksMTkuNTYsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aC43MWwxLjE2LTJhNCw0LDAsMCwwLTcuNzQsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAs'@;
put 'MTAsNy4zM1YxMWg4LjY0QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjQuMTksMTUuNGwtNy41Myw3LjUzTDEyLjcyLDE5QTEs'@;
put 'MSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMCwuMi0uMzFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNS40VjMySDdWN0g5'@;
put 'VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMi43MiwxOUExLDEsMCwwLDAsMTEuMywyMC40bDUuMzYsNS4zNkwyNi43MSwxNS43MWExLDEsMCwwLDAtMS40MS0xLjQxbC04LjY0LDguNjRaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIs'@;
put 'Ny41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIzLjEzLDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAs'@;
put 'MCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjkuMjksNC45NWgtNy4yYTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWNi42NEEx'@;
put 'LjcsMS43LDAsMCwwLDI5LjI5LDQuOTVabS0xOCwzYTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gzLjQ0YTEsMSwwLDAsMSwxLDFWOS44SDExLjI1Wm0xNC41Miw5LjIzLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwz'@;
put 'LjI2LDcuMTQtNy4xNGExLjQsMS40LDAsMSwxLDIsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjUuODgsMTUuNGExLjM4LDEuMzgsMCwwLDEtLjExLDEuODFsLTkuMTIsOS4x'@;
put 'Mi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDctN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwwLS4wOUgxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2guNDJMMjIsNC43NmE0LjMsNC4zLDAsMCwwLTgu'@;
put 'MDkuMTlIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02LjQ2LTMuN0gxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gyLjI2YTcuNTMs'@;
put 'Ny41MywwLDAsMS0uMDctMSw3LjUzLDcuNTMsMCwwLDEsLjA4LTEuMDVoLS41YTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTMuNDNBNy41Miw3'@;
put 'LjUyLDAsMCwxLDMwLDEzLjVabS00LjIzLDMuNzEtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlRmxhZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMzRhMSwxLDAsMCwxLTEt'@;
put 'MVYzQTEsMSwwLDAsMSw3LDNWMzNBMSwxLDAsMCwxLDYsMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC41NSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4x'@;
put 'MSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0xLjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVY1LjA4QTguOCw4LjgsMCwwLDEsMTMuMjUsNGExMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjZBMTguNzUsMTguNzUs'@;
put 'MCwwLDAsMjksNi4xMlYxOC45NWExNi4xNiwxNi4xNiwwLDAsMS01LjU4LjkzLDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwxNy43OVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiww'@;
put 'LDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzksMTYuNzksMCwwLDAsNy0xLjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMwLjU1LDMuODJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIgZD0iTTUuOTIsMmExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsNS45MiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMC41LDMuODJhMSwxLDAsMCwwLTEsMCwx'@;
put 'NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OUExMi43OCwxMi43OCwwLDAsMCwxMy4yLDIsMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0'@;
put 'Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNSwzLjgyWiIvPicpLEYuQ2xyU2hhcGVJbmJveD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwx'@;
put 'OCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDE2LjQ3VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAsMCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41LDVIMjJWN2g3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjYu'@;
put 'NUExLjUsMS41LDAsMCwwLDI5LjUsNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQx'@;
put 'TDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YyMUgyMy42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwxLTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAs'@;
put 'Ni41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIZWFydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJN'@;
put 'MTgsMzIuNDNhMSwxLDAsMCwxLS42MS0uMjFDMTEuODMsMjcuOSw4LDI0LjE4LDUuMzIsMjAuNTEsMS45LDE1LjgyLDEuMTIsMTEuNDksMyw3LjY0YzEuMzQtMi43NSw1LjE5LTUsOS42OS0zLjY5QTkuODcsOS44NywwLDAsMSwxOCw3LjcyYTkuODcsOS44NywwLDAsMSw1LjMxLTMuNzdjNC40'@;
put 'OS0xLjI5LDguMzUuOTQsOS42OSwzLjY5LDEuODgsMy44NSwxLjEsOC4xOC0yLjMyLDEyLjg3QzI4LDI0LjE4LDI0LjE3LDI3LjksMTguNjEsMzIuMjJBMSwxLDAsMCwxLDE4LDMyLjQzWk0xMC4xMyw1LjU4QTUuOSw1LjksMCwwLDAsNC44LDguNTFjLTEuNTUsMy4xOC0uODUsNi43MiwyLjE0'@;
put 'LDEwLjgxQTU3LjEzLDU3LjEzLDAsMCwwLDE4LDMwLjE2LDU3LjEzLDU3LjEzLDAsMCwwLDI5LjA2LDE5LjMzYzMtNC4xLDMuNjktNy42NCwyLjE0LTEwLjgxLTEtMi00LTMuNTktNy4zNC0yLjY1YTgsOCwwLDAsMC00Ljk0LDQuMiwxLDEsMCwwLDEtMS44NSwwLDcuOTMsNy45MywwLDAsMC00'@;
put 'Ljk0LTQuMkE3LjMxLDcuMzEsMCwwLDAsMTAuMTMsNS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDAsMTgsNy43MmE5'@;
put 'Ljg3LDkuODcsMCwwLDAtNS4zMS0zLjc3QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEs'@;
put 'MTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlSGVhcnRCcm9rZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjA5LTUtOS42OS0zLjY5YTkuODcsOS44'@;
put 'NywwLDAsMC02LDQuODQsMTguOSwxOC45LDAsMCwwLTIuMjMsNS4zM2w1LjI4LDIuMzQtNC42LDQuMzcsMy40OSw0LjEsMS41Mi0xLjNMMTguNTQsMjFsNS40LTUuMTNMMTcuNTgsMTNBMTYuMjMsMTYuMjMsMCwwLDEsMTkuNzUsOC45YTcuNjgsNy42OCwwLDAsMSw0LjExLTNjMy4zNC0uODks'@;
put 'Ni4zNC42LDcuMzQsMi42NSwxLjU1LDMuMTguODUsNi43Mi0yLjE0LDEwLjgxQTU3LjE2LDU3LjE2LDAsMCwxLDE4LDMwLjE2LDU3LjE2LDU3LjE2LDAsMCwxLDYuOTQsMTkuMzNjLTMtNC4xLTMuNjktNy42NC0yLjE0LTEwLjgxYTUuOSw1LjksMCwwLDEsNS4zMy0yLjkzLDcuMzEsNy4zMSww'@;
put 'LDAsMSwyLC4yOSw3LjcsNy43LDAsMCwxLDMuMzgsMmwuMTUtLjNhMTAuNjYsMTAuNjYsMCwwLDEsMS0xLjQxLDkuNjQsOS42NCwwLDAsMC0zLjk0LTIuMjJDOC4yLDIuNjYsNC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45'@;
put 'LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzktOCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcu'@;
put 'NjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBMTEuNTUsMTEuNTUsMCwwLDAsMTguMTksNy41YTE2Ljg5LDE2Ljg5LDAsMCwwLTIuNDgsNC41NkwyMi4yNywxNSwxNi43LDIwLjI2LDE5LDIzbC0xLjU3LDEuMzQtMy42LTQuMjIsNC43NC00LjUxLTUuNDQtMi40MWExOS40OSwxOS40OSww'@;
put 'LDAsMSwyLjMtNS41LDE0Ljc3LDE0Ljc3LDAsMCwxLDEuMDYtMS41NGwuMDYsMGE5LjY2LDkuNjYsMCwwLDAtMy44OS0yLjE4QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwx'@;
put 'LDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlVGFsa0J1YmJsZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEz'@;
put 'VjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlW'@;
put 'N0EzLDMsMCwwLDAsMzEsNFpNMzIsMjIuOTQsMjguNSwyMC4yMWExLDEsMCwwLDAtLjYxLS4yMUgxNGExLDEsMCwwLDEtMS0xVjdhMSwxLDAsMCwxLDEtMUgzMUExLjEsMS4xLDAsMCwxLDMyLDcuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3'@;
put 'LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2OS43MkwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0x'@;
put 'LTFWN2ExLDEsMCwwLDEsMS0xSDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1i'@;
put 'YWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTlWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMTRBNiw2LDAsMCwxLDgsMTlaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjdBMywzLDAsMCwwLDMxLDRaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYs'@;
put 'MCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVs'@;
put 'NC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjEyLjM3QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0i'@;
put 'NiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2hhdEJ1YmJsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0'@;
put 'LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVaTTI4LjI5LDI0LjYxYTEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAt'@;
put 'LjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMDgsMTEuMDgsMCwwLDEsMjguMjksMjQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yNSwxNS41SDExYTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjc1LDIwLjVoLTcuNWExLDEsMCwwLDAsMCwyaDcuNWExLDEs'@;
put 'MCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMjgsMTIuNUgyNC43MmExLDEsMCwwLDAsMC0ySDExLjI4YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4zOCwxMi42OWE3LjQzLDcuNDMsMCwwLDEtMS44OS42NkExMC4zNSwxMC4zNSwwLDAsMSwzMiwxNi41YTExLjA4LDExLjA4LDAsMCwxLTMuNzEsOC4xMSwxLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwx'@;
put 'LDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMmExNiwxNiwwLDAsMSw0LjU1LjY2QTcuNDQsNy40NCwwLDAsMSwyMywzLjIyYTE4LDE4LDAsMCwwLTUtLjcyYy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2'@;
put 'LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0ExMi4zMiwxMi4zMiwwLDAsMCwzMy4zOCwxMi42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMSwxNS41YTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC4yNSwy'@;
put 'MC41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjgsMTEuNWExLDEsMCwwLDAsMSwxSDI0LjcyYTEsMSwwLDAsMCwu'@;
put 'ODMtLjQ3QTcuNTMsNy41MywwLDAsMSwyNCwxMC41SDExLjI4QTEsMSwwLDAsMCwxMC4yOCwxMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz'@;
put 'LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wm04LDE0YTEsMSwwLDAsMS0xLDFIMTFhMSwxLDAsMCwxLDAtMkgyNUExLDEsMCwwLDEsMjYsMTYuNVptLTMuMjUsNWExLDEsMCwwLDEtMSwxaC03LjVhMSwx'@;
put 'LDAsMCwxLDAtMmg3LjVBMSwxLDAsMCwxLDIyLjc1LDIxLjVabS0xMi40Ny0xMGExLDEsMCwwLDEsMS0xSDI0LjcyYTEsMSwwLDAsMSwwLDJIMTEuMjhBMSwxLDAsMCwxLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMwLDEzLjI1YTcuNDYsNy40NiwwLDAsMS00LjM1LTEuNCwxLDEsMCwwLDEtLjkzLjY1SDExLjI4YTEsMSwwLDAsMSwwLTJIMjQuMkE3LjQ2LDcuNDYsMCwwLDEsMjMsMy4yYTE4LDE4LDAsMCwwLTUtLjdjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgs'@;
put 'MTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3LDEyLjM0LDEyLjM0LDAsMCwwLS42OC00QTcuNDYsNy40NiwwLDAsMSwzMCwxMy4yNVpNMjEuNzUsMjIuNWgtNy41YTEsMSwwLDAsMSwwLTJoNy41YTEsMSwwLDAs'@;
put 'MSwwLDJabTMuMjUtNUgxMWExLDEsMCwwLDEsMC0ySDI1YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNS43NSIgcj0iNSIgIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVQaWN0dXJlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEy'@;
put 'LDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywx'@;
put 'MSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2'@;
put 'LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAt'@;
put 'MywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4z'@;
put 'OCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwz'@;
put 'MiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45'@;
put 'bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z'@;
put 'MCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYu'@;
put 'MDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIYXBweUZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs'@;
put 'MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC44OSIgY3k9IjEzLjg5IiByPSIyIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMDUiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xMywy'@;
put 'OC4yMWE4LjY3LDguNjcsMCwwLDAsOC4yNi02SDkuODdBOC42Nyw4LjY3LDAsMCwwLDE4LjEzLDI4LjIxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww'@;
put 'LDE4LDJaTTguODksMTMuODlhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsOC44OSwxMy44OVptOS4yNCwxNC4zMmE4LjY3LDguNjcsMCwwLDEtOC4yNi02SDI2LjM4QTguNjcsOC42NywwLDAsMSwxOC4xMywyOC4yMVptNi45My0xMi4zMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyNS4wNSwx'@;
put 'NS44OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTmV1dHJhbEZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjA1LDIyLjA2aC0xMmExLDEsMCwwLDAsMCwyaDEyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjA1LDIxLjA2YTEsMSwwLDAsMS0xLDFoLTEyYTEsMSwwLDAsMSwwLTJoMTJBMSwxLDAsMCwxLDI1'@;
put 'LjA1LDIzLjA2Wk0yNywxNC4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjgsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjE2LDE2LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIv'@;
put 'PicpLEYuQ2xyU2hhcGVTYWRGYWNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMTYiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDEiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjE2LDIwYTksOSwwLDAsMC03LjMzLDMuNzgsMSwxLDAsMSwwLDEuNjMsMS4xNiw3LDcsMCwwLDEsMTEuMzEtLjEzLDEsMSwwLDAsMCwxLjYtMS4yQTksOSwwLDAsMCwxOC4x'@;
put 'NiwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm05LDEyLjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0'@;
put 'LjI4Wm0tMTUuNTUsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjQxLDE2LjA4Wm0xNCw3LjUzYTEsMSwwLDAsMS0xLjYsMS4yLDcsNywwLDAsMC0xMS4zMS4xMywxLDEsMCwxLDEtMS42My0xLjE2LDksOSwwLDAsMSwxNC41NC0uMTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFwZVRodW1ic1VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwyNmMtMi45MiwxLjgyLTcuMyw0LTkuMzcsNGgtNmExNi42OCwxNi42OCwwLDAsMS0zLjMxLTYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsNCwxNmg5VjZh'@;
put 'Mi4wNSwyLjA1LDAsMCwxLDEuMjYtMS42OWMuNzcsMiwyLjYyLDYuNTcsNC4yMyw4LjcyQTExLjM5LDExLjM5LDAsMCwwLDI0LDE2LjkxVjE0Ljc4YTkuMTMsOS4xMywwLDAsMS0zLjkxLTNjLTEuODgtMi41MS00LjI5LTkuMTEtNC4zMS05LjE3QTEsMSwwLDAsMCwxNC41OSwyQzEzLjI1LDIu'@;
put 'MzgsMTEsMy42LDExLDZ2OEgzYTEsMSwwLDAsMC0xLDEsMjksMjksMCwwLDAsMS40LDkuNjJjMS44OSw1LjQsNC4xLDcuMTQsNC4yLDcuMjJhMSwxLDAsMCwwLC42MS4yMWg2LjQyYzIuNDMsMCw2LjU1LTIsOS4zNy0zLjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMzFIMjdhMSwxLDAsMCwxLTEtMVYxNGExLDEsMCwwLDEsMS0xaDdabS02LTJoNFYxNUgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYz'@;
put 'LDEyLjEyQzE3LjUxLDkuMjgsMTQuODgsMiwxNC44OCwyUzEyLDIuODMsMTIsNS4yNVYxNUgyLjIzYTI5LjQ2LDI5LjQ2LDAsMCwwLDEuNDQsOS43NEM1LjYxLDMwLjI3LDcuOCwzMiw3LjgsMzJoNi44NkMxNi45LDMyLDIxLDMwLjA2LDI0LDI4LjMxVjE1LjUxQTEwLjg0LDEwLjg0LDAsMCwx'@;
put 'LDE5LjYzLDEyLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNywxM2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwxLDFoN1YxM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+'@;
put 'JyksRi5DbHJTaGFwZVRodW1ic0Rvd249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEwYzIuOTItMS44Miw3LjMtNCw5LjM3LTRoNmExNi42OCwxNi42OCwwLDAsMSwzLjMxLDYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsMzIsMjBIMjNWMzBhMi4wNSwyLjA1LDAsMCwxLTEuMjYsMS42'@;
put 'OWMtLjc3LTItMi42Mi02LjU3LTQuMjMtOC43MkExMS4zOSwxMS4zOSwwLDAsMCwxMiwxOS4wOXYyLjEzYTkuMTMsOS4xMywwLDAsMSwzLjkxLDNjMS44OCwyLjUxLDQuMjksOS4xMSw0LjMxLDkuMTdhMSwxLDAsMCwwLDEuMTkuNjNDMjIuNzUsMzMuNjIsMjUsMzIuNCwyNSwzMFYyMmg4YTEs'@;
put 'MSwwLDAsMCwxLTEsMjksMjksMCwwLDAtMS40LTkuNjJjLTEuODktNS40LTQuMS03LjE0LTQuMi03LjIyQTEsMSwwLDAsMCwyNy43OSw0SDIxLjM3QzE4Ljk0LDQsMTQuODMsNiwxMiw3LjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMiw1SDlhMSwxLDAsMCwxLDEsMVYyMmExLDEsMCwwLDEtMSwxSDJaTTgsN0g0VjIxSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi4zNywyMy44NGMyLjEyLDIuODQsNC43Niwx'@;
put 'MC4wNyw0Ljc2LDEwLjA3UzI0LDMzLjEzLDI0LDMwLjcxVjIxaDkuNzdhMjkuNDYsMjkuNDYsMCwwLDAtMS40NC05Ljc0QzMwLjM5LDUuNjgsMjguMiw0LDI4LjIsNEgyMS4zNUMxOS4xLDQsMTUsNS45LDEyLDcuNjV2MTIuOEExMC44NCwxMC44NCwwLDAsMSwxNi4zNywyMy44NFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOSwyM2ExLDEsMCwwLDAsMS0xVjZBMSwxLDAsMCwwLDksNUgyVjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ3Jvd249KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik00LDEzLjMzQTEuMzksMS4zOSwwLDEsMCwyLjYsMTQuNzIsMS4zOSwxLjM5LDAsMCwwLDQsMTMuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuODEsMTUuODRhMjAuMzUs'@;
put 'MjAuMzUsMCwwLDAtNC41OCwxLjQzLDIyLjcsMjIuNywwLDAsMC0zLjQ4LDIuMUExNy42OSwxNy42OSwwLDAsMSwyMiwxNi41N2E0Ny42NSw0Ny42NSwwLDAsMS0yLjgtNy42OSwxLDEsMCwwLDAtMS0uNzQsMSwxLDAsMCwwLTEsLjc0LDQ2LjcxLDQ2LjcxLDAsMCwxLTIuOCw3LjY5LDE3LDE3'@;
put 'LDAsMCwxLTEuNzYsMi44LDIyLjcsMjIuNywwLDAsMC0zLjQ4LTIuMSwyMC42NiwyMC42NiwwLDAsMC00LjU4LTEuNDMsMSwxLDAsMCwwLTEsLjM5LDEsMSwwLDAsMC0uMDksMS4wNUE1MC4xMyw1MC4xMywwLDAsMSw3LjgyLDMxLjE3YTEsMSwwLDAsMCwxLC44M0gyNy42MmExLDEsMCwwLDAs'@;
put 'MS0uODMsNTAuMTUsNTAuMTUsMCwwLDEsNC4yNi0xMy44OSwxLDEsMCwwLDAtLjA5LTEuMDVBMSwxLDAsMCwwLDMxLjgxLDE1Ljg0Wk0yNi43OSwzMEg5LjY0YTU1LjY2LDU1LjY2LDAsMCwwLTMuNC0xMS43MSwxNS43NSwxNS43NSwwLDAsMSwyLjA5Ljc4LDIwLDIwLDAsMCwxLDMuODUsMi40'@;
put 'NSwxLDEsMCwwLDAsMS4zOS0uMDksMTkuMjgsMTkuMjgsMCwwLDAsMi42Ny00LDQzLjQ2LDQzLjQ2LDAsMCwwLDItNC44OSw0MS43NCw0MS43NCwwLDAsMCwyLDQuODksMTkuOTIsMTkuOTIsMCwwLDAsMi42Niw0LDEsMSwwLDAsMCwxLjQuMDksMTkuMjEsMTkuMjEsMCwwLDEsMy44NS0yLjQ1'@;
put 'LDE0Ljc3LDE0Ljc3LDAsMCwxLDIuMDktLjc4QTU1LjA3LDU1LjA3LDAsMCwwLDI2Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE4LjIyLDYuMzlBMS4zOSwxLjM5LDAsMSwwLDE2Ljg0LDUsMS4zOSwxLjM5LDAsMCwwLDE4LjIyLDYuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0'@;
put 'aCBkPSJNMTguMjMsMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4xLDEuMSwwLDAsMCwxOC4yMywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMi41OCwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUEx'@;
put 'LjEsMS4xLDAsMCwwLDEyLjU4LDI2LjM0WiIvPjxwYXRoIGQ9Ik0yMy44OSwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDIzLjg5LDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cblxuICA8cGF0aCBkPSJNMi42'@;
put 'LDExLjkzQTEuNCwxLjQsMCwxLDAsNCwxMy4zMywxLjQsMS40LDAsMCwwLDIuNiwxMS45M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjYzLDE2'@;
put 'LjFBMTguNjEsMTguNjEsMCwwLDAsMjgsMTcuMzRhMjEuNTcsMjEuNTcsMCwwLDAtNCwyLjQ5LDE5LjIsMTkuMiwwLDAsMS0yLjI2LTMuNDksNDguOTIsNDguOTIsMCwwLDEtMi41Mi02LjU4LDEsMSwwLDAsMC0xLS43MWgwYTEsMSwwLDAsMC0xLC43MSw0OC40Miw0OC40MiwwLDAsMS0yLjUy'@;
put 'LDYuNTgsMTguNjksMTguNjksMCwwLDEtMi4yNiwzLjQ4LDIyLjgxLDIyLjgxLDAsMCwwLTQtMi40OEExOC44MywxOC44MywwLDAsMCw0LjksMTYuMWExLDEsMCwwLDAtMSwuMzMsMSwxLDAsMCwwLS4xMywxLjA3LDU1LjksNTUuOSwwLDAsMSw0LDEzLjUsMSwxLDAsMCwwLDEsLjgzaDE5YTEs'@;
put 'MSwwLDAsMCwxLS44Myw1NS45LDU1LjksMCwwLDEsNC0xMy41LDEsMSwwLDAsMC0uMTMtMS4wN0ExLDEsMCwwLDAsMzEuNjMsMTYuMVpNMTEuMDgsMjguNTVhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwxMS4wOCwyOC41NVptNy4xNSwwYTEuMTEsMS4xMSwwLDAs'@;
put 'MSwwLTIuMjEsMS4xMSwxLjExLDAsMCwxLDAsMi4yMVptNy4xNiwwYTEuMTEsMS4xMSwwLDEsMSwxLjEtMS4xMUExLjExLDEuMTEsMCwwLDEsMjUuMzksMjguNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gICcpLEYuQ2xyU2hhcGVIYXNodGFnPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsMTJIMjUuMzRsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwyMy4zLDEySDE1LjExbDEuNTUtNy43NGExLDEsMCwwLDAtMi0uMzlMMTMuMDcsMTJINmExLDEsMCwwLDAsMCwyaDYuNjdsLTEuNiw4SDRhMSwxLDAsMCwwLDAsMmg2LjY2TDku'@;
put 'MTEsMzEuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjY4LjY4LDAsMCwwLC4yLDAsMSwxLDAsMCwwLDEtLjhMMTIuNywyNGg4LjE5bC0xLjU1LDcuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjYyLjYyLDAsMCwwLC4xOSwwLDEsMSwwLDAsMCwxLS44TDIyLjkzLDI0SDMwYTEsMSwwLDAsMCwwLTJIMjMu'@;
put 'MzNsMS42MS04SDMyYTEsMSwwLDAsMCwwLTJaTTIxLjI5LDIySDEzLjFsMS42MS04SDIyLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMS44NywxMEgyNi4zMmwxLTQuODNBMSwxLDAsMCwwLDI2LjM1LDRoLTJhMSwxLDAs'@;
put 'MCwwLTEsLjc4TDIyLjMzLDEwaC01LjRsMS00LjgzQTEsMSwwLDAsMCwxNyw0SDE1YTEsMSwwLDAsMC0xLC43OEwxMywxMEg3YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJoNS41NUwxMC41LDIyaC02YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJI'@;
put 'OS42OGwtMSw0LjgzYTEsMSwwLDAsMCwxLDEuMTdoMmExLDEsMCwwLDAsLjk1LS43OEwxMy42NywyNmg1LjRsLTEsNC44M0ExLDEsMCwwLDAsMTksMzJoMmExLDEsMCwwLDAsMS0uNzhMMjMuMDUsMjZoNmExLDEsMCwwLDAsMS0uOGwuNC0yYTEsMSwwLDAsMC0xLTEuMkgyMy44N2wxLjYzLTho'@;
put 'NmExLDEsMCwwLDAsMS0uOGwuNDEtMkExLDEsMCwwLDAsMzEuODcsMTBabS0xMiwxMmgtNS40bDEuNjQtOGg1LjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLEYuU29jaWFsU2hhcGVzPXtjcm93bjpGLkNsclNoYXBlQ3Jvd24sc2hhcmU6Ri5DbHJT'@;
put 'aGFwZVNoYXJlLHN0YXI6Ri5DbHJTaGFwZVN0YXIsImhhbGYtc3RhciI6Ri5DbHJTaGFwZUhhbGZTdGFyLGJvb2ttYXJrOkYuQ2xyU2hhcGVCb29rbWFyayxlbnZlbG9wZTpGLkNsclNoYXBlRW52ZWxvcGUsY2FsZW5kYXI6bGUuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpsZS5DbHJTaGFwZUV2'@;
put 'ZW50LHRhc2tzOkYuQ2xyU2hhcGVUYXNrcyxmbGFnOkYuQ2xyU2hhcGVGbGFnLGluYm94OkYuQ2xyU2hhcGVJbmJveCxoYXNodGFnOkYuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OkYuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpGLkNsclNoYXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxl'@;
put 'cyI6Ri5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Ri5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpGLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Ri5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpGLkNsclNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNl'@;
put 'IjpGLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpGLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpGLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lh'@;
put 'bFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlNvY2lhbFNoYXBlcywiZGF0ZSIsKDAseC5kZXNjcmlw'@;
put 'dG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLlNvY2lhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMv'@;
put 'dGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAg'@;
put 'ICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsclNoYXBlVk1XQXBwPUYuQ2xyU2hhcGVWTT1GLkNsclNoYXBlUm91dGVyPUYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPUYuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3M9Ri5DbHJTaGFwZU5ldHdvcmtHbG9iZT1GLkNsclNoYXBlVGFibGV0PUYuQ2xyU2hh'@;
put 'cGVNb2JpbGU9Ri5DbHJTaGFwZUJhdHRlcnk9Ri5DbHJTaGFwZUFwcGxpY2F0aW9uPUYuQ2xyU2hhcGVDb2RlPUYuQ2xyU2hhcGVUZXJtaW5hbD1GLkNsclNoYXBlRGlzcGxheT1GLkNsclNoYXBlQ29tcHV0ZXI9Ri5DbHJTaGFwZUZsb3BweT1GLkNsclNoYXBlUGx1Z2luPUYuQ2xyU2hhcGVE'@;
put 'b3dubG9hZENsb3VkPUYuQ2xyU2hhcGVVcGxvYWRDbG91ZD1GLkNsclNoYXBlRXhwb3J0PUYuQ2xyU2hhcGVJbXBvcnQ9Ri5DbHJTaGFwZVNoaWVsZFg9Ri5DbHJTaGFwZVNoaWVsZD1GLkNsclNoYXBlU2hpZWxkQ2hlY2s9Ri5DbHJTaGFwZVJlc291cmNlUG9vbD1GLkNsclNoYXBlRGF0YUNs'@;
put 'dXN0ZXI9Ri5DbHJTaGFwZU1lbW9yeT1GLkNsclNoYXBlQ1BVPUYuQ2xyU2hhcGVCdWlsZGluZz1GLkNsclNoYXBlQXBwbGljYXRpb25zPUYuQ2xyU2hhcGVDbHVzdGVyPUYuQ2xyU2hhcGVTdG9yYWdlPUYuQ2xyU2hhcGVIb3N0PUYuQ2xyU2hhcGVEYXNoYm9hcmQ9Ri5DbHJTaGFwZU1vdXNl'@;
put 'PUYuQ2xyU2hhcGVLZXlib2FyZD1GLkNsclNoYXBlRGV2aWNlcz1GLkNsclNoYXBlQmFja3VwPUYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlPUYuQ2xyU2hhcGVIYXJkRGlzaz1GLkNsclNoYXBlUmFja1NlcnZlcj1GLkNsclNoYXBlV2lmaT1GLkNsclNoYXBlQnVuZGxlPUYuQ2xyU2hhcGVCbG9j'@;
put 'a3NHcm91cD1GLkNsclNoYXBlQmxvY2s9Ri5DbHJTaGFwZUxheWVycz1GLkNsclNoYXBlVW5pbnN0YWxsPUYuQ2xyU2hhcGVJbnN0YWxsPUYuQ2xyU2hhcGVOb1dpZmk9Ri5DbHJTaGFwZVBob25lSGFuZHNldD1GLkNsclNoYXBlUnVsZXJQZW5jaWw9dm9pZCAwLEYuVGVjaG5vbG9neVNoYXBl'@;
put 'cz1GLkNsclNoYXBlRmlsZVNoYXJlMj1GLkNsclNoYXBlQ2lDZD1GLkNsclNoYXBlQW5pbWF0aW9uPUYuQ2xyU2hhcGVUYXBlRHJpdmU9Ri5DbHJTaGFwZU1lZGlhQ2hhbmdlcj1GLkNsckNvbnRyb2xMdW49Ri5DbHJTaGFwZVBvZD1GLkNsclNoYXBlTm9kZT1GLkNsclNoYXBlTmFtZXNwYWNl'@;
put 'PUYuQ2xyU2hhcGVOb2Rlcz1GLkNsclNoYXBlTm9kZUdyb3VwPUYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj1GLkNsclNoYXBlSG9zdEdyb3VwPUYuQ2xyU2hhcGVTcXVpZD1GLkNsclNoYXBlQ2FwYWNpdG9yPUYuQ2xyU2hhcGVSZXNpc3Rvcj1GLkNsclNoYXBlSW5kdWN0b3I9Ri5DbHJTaGFw'@;
put 'ZVJhZGFyPUYuQ2xyU2hhcGVVc2I9Ri5DbHJTaGFwZVFyQ29kZT1GLkNsclNoYXBlRmlsZVNoYXJlPUYuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9Ri5DbHJTaGFwZUNvbnRhaW5lcj1GLkNsclNoYXBlQ2REdmQ9Ri5DbHJTaGFwZUJhckNvZGU9Ri5DbHJTaGFwZUF0b209Ri5DbHJTaGFwZUFz'@;
put 'c2lnblVzZXI9Ri5DbHJTaGFwZVByb2Nlc3NPblZNPUYuQ2xyU2hhcGVCbHVldG9vdGhPZmY9Ri5DbHJTaGFwZUJsdWV0b290aD1GLkNsclNoYXBlU1NEPUYuQ2xyU2hhcGVOVk1lPUYuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz1GLkNsclNoYXBlSGFyZERyaXZlPUYuQ2xyU2hhcGVBZG1pbmlz'@;
put 'dHJhdG9yPUYuQ2xyU2hhcGVGbGFzaz1GLkNsclNoYXBlSGVsaXg9Ri5DbHJTaGFwZURlcGxveT1GLkNsclNoYXBlQ2xvdWRUcmFmZmljPUYuQ2xyU2hhcGVDbG91ZFNjYWxlPUYuQ2xyU2hhcGVDbG91ZE5ldHdvcms9Ri5DbHJTaGFwZVVubGluaz1GLkNsclNoYXBlTGluaz1GLkNsclNoYXBl'@;
put 'RGlzY29ubmVjdD1GLkNsclNoYXBlQ29ubmVjdD1GLkNsclNoYXBlVW5hcmNoaXZlPUYuQ2xyU2hhcGVBcmNoaXZlPUYuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp'@;
put 'bHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Ri5DbHJTaGFwZVJ1bGVyUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29u'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBwb2ludHM9IjkgMTcuNDEgOSAyNyAxOC41OSAyNyAxNi41OSAyNSAxMSAyNSAxMSAxOS40MSA5IDE3LjQxIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgZD0iTTM0Ljg3LDMyLjI5LDMyLDI5LjM4VjMySDRWMjcuODVINnYtMS42SDRWMTkuNkg2VjE4SDRWMTEuNkg2VjEwSDRWNC40MUwxOS45NCwyMC4yNlYxNy40NEwzLjcxLDEuMjlBMSwxLDAsMCwwLDIsMlYzM2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjQsMzBoNGEyLDIsMCwwLDAsMi0yVjguN0wyNy43LDQuNDdhMiwyLDAsMCwwLTEuNzYtMWgwYTIsMiwwLDAsMC0xLjc2LDEuMDhMMjIsOC43MlYyOEEyLDIsMCwwLDAs'@;
put 'MjQsMzBaTTI0LDkuMmwxLjk0LTMuNzdMMjgsOS4yMVYyNEgyNFptMCwxNi40M2g0djIuNDRIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuODcsMzIuMjEsMzAsMjcuMzdWOC43NUwyNy43LDQuNTJhMiwyLDAs'@;
put 'MCwwLTMuNTQsMEwyMiw4Ljc2VjE5LjQxTDMuNzEsMS4yMUExLDEsMCwwLDAsMiwxLjkyVjEwSDQuMTd2MS42SDJWMThINC4xN3YxLjZIMnY2LjY1SDQuMTd2MS42SDJ2NS4wN2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVpNMTAsMjZWMTYuOTRMMTkuMDcsMjZabTE4'@;
put 'LDIuMTFIMjRWMjUuNjhoNFptMC00SDI0VjkuMjVsMS45NC0zLjc3TDI4LDkuMjZaIi8+XG4nKSxGLkNsclNoYXBlUGhvbmVIYW5kc2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuNzMsMzUuNDRhNC43'@;
put 'Miw0LjcyLDAsMCwxLTEtLjExLDMzLjkxLDMzLjkxLDAsMCwxLTE2LjYyLTguNzUsMzIuNzEsMzIuNzEsMCwwLDEtOS0xNi4yNUE0LjU4LDQuNTgsMCwwLDEsMi40Niw2LjA1bDQtMy44NUEyLDIsMCwwLDEsOCwxLjY2YTIsMiwwLDAsMSwxLjQ1Ljg3bDUsNy4zOWExLjYsMS42LDAsMCwxLS4x'@;
put 'MSwxLjlsLTIuNTEsM2ExOC45NCwxOC45NCwwLDAsMCw0LjE3LDUuODloMGExOS4yNiwxOS4yNiwwLDAsMCw2LjA3LDQuMDlsMy4xMS0yLjQ3YTEuNjQsMS42NCwwLDAsMSwxLjg2LS4xMmw3LjU1LDQuODhBMiwyLDAsMCwxLDM1LDMwLjJsLTMuOSwzLjg2QTQuNzQsNC43NCwwLDAsMSwyNy43'@;
put 'MywzNS40NFpNNy44NCwzLjY0bC00LDMuODVhMi41NCwyLjU0LDAsMCwwLS43NSwyLjQsMzAuNywzMC43LDAsMCwwLDguNDEsMTUuMjYsMzEuOSwzMS45LDAsMCwwLDE1LjY0LDguMjMsMi43NSwyLjc1LDAsMCwwLDIuNS0uNzRsMy45LTMuODYtNy4yOS00LjcxLTMuMzQsMi42NmExLDEsMCww'@;
put 'LDEtLjkyLjE3LDIwLjA2LDIwLjA2LDAsMCwxLTcuMzYtNC43NWgwYTE5LjQ5LDE5LjQ5LDAsMCwxLTQuODctNy4yQTEsMSwwLDAsMSwxMCwxNGwyLjctMy4yM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4yMiwy'@;
put 'MC42NGEyMC4zNywyMC4zNywwLDAsMCw3LjQsNC43OWwzLjc3LTNhLjY3LjY3LDAsMCwxLC43NiwwbDcsNC41MWEyLDIsMCwwLDEsLjMzLDMuMThsLTMuMjgsMy4yNGE0LDQsMCwwLDEtMy42MywxLjA3LDM1LjA5LDM1LjA5LDAsMCwxLTE3LjE1LTlBMzMuNzksMzMuNzksMCwwLDEsMS4xNSw4'@;
put 'LjZhMy43OCwzLjc4LDAsMCwxLDEuMS0zLjU1bDMuNC0zLjI4YTIsMiwwLDAsMSwzLjEyLjMyTDEzLjQzLDlhLjYzLjYzLDAsMCwxLDAsLjc1bC0zLjA3LDMuNjlBMTkuNzUsMTkuNzUsMCwwLDAsMTUuMjIsMjAuNjRaIi8+XG4nKSxGLkNsclNoYXBlTm9XaWZpPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuNDJhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMjQuNDJabTAsNmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwxOCwzMC40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuMjEsMjEuODVhMSwxLDAsMCwwLS4yMy0xLjQsMTMuNTYsMTMuNTYsMCwwLDAtNS0yLjIzbDMuODcsMy44N0ExLDEsMCwwLDAsMjYuMjEsMjEuODVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LjA1LDEwLjcyYTIwLjg4LDIwLjg4LDAsMCwwLTQuMTYuNDNsMS43NCwxLjc0YTE5LDE5LDAsMCwxLDIuNDItLjE3QTE4Ljc2LDE4Ljc2LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAs'@;
put 'MTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMzLjU1LDguMkEyOC4xMSwyOC4xMSwwLDAsMCw4LjExLDUuMzZMOS42OSw2LjkzQTI2LDI2LDAsMCwxLDMyLjQ1LDkuODdhMSwxLDAsMCwwLDEu'@;
put 'MS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xLjg0LDQuNzUsNC4yNyw3LjE4Yy0uNjIuMzQtMS4yMy43LTEuODMsMS4xQTEsMSwwLDEsMCwzLjU2LDkuOTRDNC4yNiw5LjQ3LDUsOSw1Ljc0LDguNjVs'@;
put 'My44NywzLjg3QTIwLjU5LDIwLjU5LDAsMCwwLDYuMjMsMTQuNCwxLDEsMCwwLDAsNy4zNiwxNmExOC44MiwxOC44MiwwLDAsMSwzLjc3LTJsNC4xNiw0LjE2QTEzLjUxLDEzLjUxLDAsMCwwLDEwLDIwLjU1YTEsMSwwLDAsMCwxLjE4LDEuNjFBMTEuNTIsMTEuNTIsMCwwLDEsMTcsMjBsMTAu'@;
put 'OCwxMC44LDEuNDEtMS40MS0yNi0yNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjkuNTQiIHI9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTIiIGQ9Ik0yOS4xOCwxNy43MWwuMTEtLjE3YTEuNTEsMS41MSwwLDAsMC0uNDctMi4xQTIwLjU3LDIwLjU3LDAsMCwwLDE4LDEyLjM3Yy0uNTYsMC0xLjExLDAtMS42NS4wN2wzLjIxLDMuMjFhMTcuNDEsMTcuNDEsMCwwLDEsNy42LDIuNTJBMS40OSwxLjQ5LDAsMCwwLDI5LjE4LDE3'@;
put 'LjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjc2LDkuMzhBMjcuOSwyNy45LDAsMCwwLDEwLjE4LDYuMjdMMTIuODEsOC45QTI0LjY4LDI0LjY4LDAsMCwxLDMxLjEsMTIuMTJhMS40OSwxLjQ5LDAsMCwwLDIt'@;
put 'LjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMyw0Ljc1bDMuMSwzLjFBMjcuMjgsMjcuMjgsMCwwLDAsMy4xOCw5LjQyYTEuNTEsMS41MSwwLDAsMC0u'@;
put 'NDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY5LDI0LjY5LDAsMCwxLDMuNjctMS45bDMuMTQsMy4xNGEyMC42MywyMC42MywwLDAsMC00LjUzLDIuMDksMS41MSwxLjUxLDAsMCwwLS40NiwyLjFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NkExNy40NiwxNy40'@;
put 'NiwwLDAsMSwxNC4yNSwxNmwzLjYsMy42YTEzLjM5LDEzLjM5LDAsMCwwLTYuNzksMS45MywxLjUsMS41LDAsMCwwLS40NiwyLjA5bC4xLjE2YTEuNTIsMS41MiwwLDAsMCwyLjA2LjQ0LDEwLjIsMTAuMiwwLDAsMSw5LS43TDI5LDMwLjc1bDEuNDEtMS40MS0yNi0yNloiLz5cbicpLEYuQ2xy'@;
put 'U2hhcGVJbnN0YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBh'@;
put 'MiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCwwLDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEwLjMsMTguODdsNyw2Ljg5YTEsMSwwLDAsMCwxLjQsMGw3'@;
put 'LTYuODlhMSwxLDAsMCwwLTEuNC0xLjQzTDE5LDIyLjY1VjRhMSwxLDAsMCwwLTIsMFYyMi42NWwtNS4zLTUuMjFhMSwxLDAsMCwwLTEuNCwxLjQzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk'@;
put 'IiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+PHBhdGggZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEs'@;
put 'MCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAs'@;
put 'MCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMi0tYWxlcnRlZCIgZD0iTTMxLDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs'@;
put 'MS4xNFoiLz5cbicpLEYuQ2xyU2hhcGVVbmluc3RhbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43'@;
put 'LDI1LjNsLTUuMjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCww'@;
put 'LDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUu'@;
put 'MjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEz'@;
put 'LjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTEuMjksMjYuNzJhMSwxLDAsMCwwLDEuNDEsMEwxOCwyMS40OWw1LjMsNS4yM0ExLDEsMCwwLDAsMjQuNywyNS4zbC01LjI4LTUuMjEsNC43NS00LjY5SDIyLjIzYTMuNjUsMy42NSwwLDAsMS0uODEtLjFMMTgsMTgu'@;
put 'NjhsLTUuMy01LjIzYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS4yOCw1LjIxTDExLjMsMjUuM0ExLDEsMCwwLDAsMTEuMjksMjYuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMx'@;
put 'LDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbicpLEYuQ2xyU2hh'@;
put 'cGVMYXllcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWEx'@;
put 'LDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVpNNS4zNCwxMi4xNmwxMi42Niw2LDEyLjY2LTZMMTgsNi4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjYuMTZhMSwxLDAs'@;
put 'MCwxLS40My0uMUwyLjU3LDE5YTEsMSwwLDEsMSwuODUtMS44MUwxOCwyNC4wNmwxNC41Ny02Ljg5QTEsMSwwLDEsMSwzMy40MywxOWwtMTUsNy4wOUExLDEsMCwwLDEsMTgsMjYuMTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWExLDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVoiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSww'@;
put 'LDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xOCwzMi4wN2ExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwuODUtMS44MUwxOCwzMGwxNC41Ny02Ljg5YTEsMSwwLDEsMSwuODUs'@;
put 'MS44MUwxOC40MywzMkExLDEsMCwwLDEsMTgsMzIuMDdaIi8+XG4nKSxGLkNsclNoYXBlQmxvY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQyLDkuMDlsLTEzLTZhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx'@;
put 'LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTBBMSwxLDAsMCwwLDMxLjQyLDkuMDlaTTE4LDUuMSwyOC42MSwxMCwxOCwxNC45LDcuMzksMTBaTTYsMTEuNTZsMTEsNS4wOHYxNC44TDYsMjYuMzZaTTE5LDMxLjQ0VjE2LjY0bDExLTUuMDh2MTQuOFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjUzVjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDIuNTctMS4xOWEzLjY3LDMuNjcsMCwwLDEtMi4xMS0xLjIyTDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsMy4wOCwxLjQyLDEtMS43NEwx'@;
put 'OC40MiwzLjA5YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjE1LjUzWk0xNywzMS40NCw2LDI2LjM2VjExLjU2bDExLDUuMDhaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxLjI2bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkySDMzLjdhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkyTDI5LjA4LDEuMjZBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDI2Ljg3LDEuMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3'@;
put 'LDcuNTcsMCwwLDEtMi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx'@;
put 'LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMt'@;
put 'NmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsMTQuOSw3LjM5LDEwLDE4LDUuMSwyOC42MSwxMFpNMzAsMjYu'@;
put 'MzYsMTksMzEuNDRWMTYuNjRsMTEtNS4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuMzh2MTFMMTksMzEuNDRWMTYuNjRsMi43OS0xLjI5YTMuNjgsMy42OCwwLDAsMS0yLjI1LTEuMTZMMTgsMTQuOSw3'@;
put 'LjM5LDEwLDE4LDUuMWwzLDEuMzksMS0xLjc1TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTIsMjEuMTMsMTFhMS4yNywxLjI3LDAsMCwwLDEuMSwxLjkxSDMzLjY4QTEuMjcsMS4yNywwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjEyQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3LDcuNTcsMCwwLDEt'@;
put 'Mi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0'@;
put 'LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUJsb2Nrc0dyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0z'@;
put 'LjQ1YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBs'@;
put 'Ny41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yLjgxLjkxTDI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1Wk0xOC4xLDQuMDhsNS4xMSwyLjM1TDE4LjEsOC43OCwxMyw2LjQzWk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIy'@;
put 'LDUuNDksMTkuNjdabTYuNSwxMS40OS02LjUsMy02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhaTTExLjYsMTUuNTdoMFY4bDYuMDgsMi44YTEsMSwwLDAsMCwuODQsMEwyNC42LDh2Ny41OGgwbC02LjUsM1pNMzIuMTEsMjguODFsLTYuNSwzLTYuNTEtM1Yy'@;
put 'MS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRsNi4wOC0yLjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3aC0ydjBsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCww'@;
put 'bC4yNC0uMTFhNC4xNyw0LjE3LDAsMCwxLC4yOS0uNjVsMS4zMy0yLjMxLTIuMjgsMUwxMyw2LjQzbDUuMS0yLjM1LDMuNDcsMS42LDEtMS43M0wxOC41LDIuMDhhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTgu'@;
put 'OTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEw'@;
put 'LjYsMjIsNS40OSwxOS42N1ptMCwxNC40OS02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTE1LTE0LjQ4LDUuMTEsMi4zNUwyNS42MSwyMiwyMC41LDE5LjY3Wm0wLDE0LjQ5LTYuNTEtM1YyMS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRs'@;
put 'Ni4wOC0yLjgsMCw3LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4x'@;
put 'LTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWMTIuN2E3LjU4'@;
put 'LDcuNTgsMCwwLDEtMi0xLjUxdjQuMzlsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDIzLDguNzJhNy4wNSw3LjA1LDAsMCwxLS40Ny0ybC00LjQ3LDJMMTMsNi40M2w1LjEtMi4zNSw0LjQ0LDJzMC0uMDYsMC0uMDlhNy41NSw3LjU1LDAsMCwxLC4yNy0ybC00LjMt'@;
put 'MmExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0z'@;
put 'LjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4x'@;
put 'MSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4'@;
put 'PSIzMC4wMyIgY3k9IjYuMDMiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0zLjQ1'@;
put 'YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41'@;
put 'LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1LDUuMTEsMi4zNVptLTEtNi40NC02LjQ0LDNWMTAuODdhMSwxLDAsMCwwLC4zNS0uMDhMMjQuNiw4djcuNThaTTE4LjEsNC4wOGw1LjExLDIu'@;
put 'MzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzaDBWMjQuMTFoMEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhabTE1LDAtNi40NiwzVjI0LjExQTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N3YwaC0ydjBsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOGwuMTQtLjA2QTMuMjMsMy4yMywwLDAsMSwxOSwxMGwxLjI4LTIuMjItMi4xNCwxTDEz'@;
put 'LDYuNDNsNS4xLTIuMzUsMy4zOSwxLjU2LDEtMS43My00LTEuODNhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTguOTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4'@;
put 'LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yOCwuOTEsNS4xMS0yLjM2LDUuMTEsMi4zNUwxMC42LDIyWk0xMC42LDMxLjhWMjQuMTFBMS4wOCwxLjA4LDAsMCwwLDExLDI0bDYu'@;
put 'MDgtMi44LDAsNy42Wm05LjktMTIuMTMsNS4xMS0yLjM1LDUuMTEsMi4zNUwyNS42MSwyMlpNMjUuNjQsMzEuOFYyNC4xMUEuODkuODksMCwwLDAsMjYsMjRsNi4wOC0yLjgsMCw3LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuPHBhdGggZD0iTTI2Ljg5LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjcsMTNIMzMuNzJhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjEsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODksMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi42OWE3LjY2LDcuNjYsMCwwLDEtMi0xLjQ3djQuMzRsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOEwyMyw4LjczYTcuNjUsNy42NSwwLDAs'@;
put 'MS0uNDgtMmwtNC40MiwyTDEzLDYuNDNsNS4xLTIuMzUsNC4zOCwyVjZhNy41NSw3LjU1LDAsMCwxLC4yNy0yTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwu'@;
put 'NTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYs'@;
put 'MzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuPGNpcmNsZSBjeD0iMjkuOTgiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQnVuZGxlPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEsMSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwu'@;
put 'ODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEyLjkxWk01LDEyLjEzLDE2LDE3LjRWMzEuNDZMNSwyNi4y'@;
put 'Wk0xOCwzMS40NVYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEs'@;
put 'MSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwuODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEy'@;
put 'LjkxWm0xLDE1LjhWMTcuMzZsMTMtNi4yOXYxNC4xWiIvPlxuJyksRi5DbHJTaGFwZVdpZmk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy41NSw4LjJhMjguMSwyOC4xLDAsMCwwLTMxLjExLjA4QTEsMSww'@;
put 'LDEsMCwzLjU2LDkuOTRhMjYuMTEsMjYuMTEsMCwwLDEsMjguODktLjA3LDEsMSwwLDAsMCwxLjEtMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTguMDUsMTAuNzJBMjAuNzQsMjAuNzQsMCwwLDAsNi4y'@;
put 'MywxNC40LDEsMSwwLDAsMCw3LjM2LDE2LDE4Ljg1LDE4Ljg1LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAsMTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MyIgZD0iTTE4LjA1LDE3LjlhMTMuNTEsMTMuNTEsMCwwLDAtOCwyLjY0LDEsMSwwLDAsMCwxLjE4LDEuNjEsMTEuNTYsMTEuNTYsMCwwLDEsMTMuNjItLjA4QTEsMSwwLDEsMCwyNiwyMC40NiwxMy41MiwxMy41MiwwLDAsMCwxOC4wNSwxNy45WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLjc2LDkuMzhhMjcuODcsMjcuODcsMCwwLDAtMjkuNTcsMCwxLjUxLDEuNTEsMCwwLDAt'@;
put 'LjQ4LDIuMTFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NiwyNC42OCwyNC42OCwwLDAsMSwyNi4yNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3QTEuNTEsMS41MSwwLDAsMCwzMi43Niw5LjM4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI4LjgyLDE1LjQ0YTIwLjU5LDIwLjU5LDAsMCwwLTIxLjcsMCwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDE3LjQsMTcuNCwwLDAsMSwxOC4zNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3'@;
put 'QTEuNTEsMS41MSwwLDAsMCwyOC44MiwxNS40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC44OCwyMS40OWExMy40MSwxMy40MSwwLDAsMC0xMy44MiwwLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41'@;
put 'MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMjcsMTAuMjcsMCwwLDEsMTAuNDIsMCwxLjUyLDEuNTIsMCwwLDAsMi4wNi0uNDVsLjEtLjE2QTEuNDksMS40OSwwLDAsMCwyNC44OCwyMS40OVoiLz5cbicpLEYuQ2xyU2hhcGVSYWNrU2VydmVyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t'@;
put 'YWxlcnRlZCIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjY0LDExQTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTB2MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYyMUg0VjE1SDIwLjU4QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41Nkg0VjdIMjAuNzFsMS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEy'@;
put 'LDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4x'@;
put 'MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTAiIHk9IjE3IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIx'@;
put 'NCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIGQ9Ik0xMCwxMUgyNHYtLjUxQTcuNDgsNy40OCwwLDAsMSwyMy4xMyw5SDEwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi42OC0uNUg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlh'@;
put 'MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk00LDE1SDMydjZINFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMTAiIHk9IjkiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9'@;
put 'IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDdIMzJ2Nkg0Wm0wLDhIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNiIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEwVjdIMjAuNzFsMS43My0zSDRBMiwyLDAsMCwwLDIsNnY2SDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5Wk04LDlINlY3SDhaIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMnY4SDM0VjE1LjM4Wk04LDE5SDZWMTdIOFptMTYsMEgxMFYxN0gyNFoiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMiwxNHY4SDM0VjE0Wm02LDVINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjQ5LDcuNDksMCwwLDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2djZIMjUuNTFBNy41Miw3LjUyLDAsMCwxLDIzLjEzLDlaTTgs'@;
put 'OUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDIySDM0VjE0SDJabTgtNUgyNHYySDEwWk02LDE3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2djZIMzRWNkEyLDIsMCwwLDAsMzIs'@;
put 'NFpNOCw5SDZWN0g4Wk0yNCw5SDEwVjdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4n'@;
put 'KSxGLkNsclNoYXBlSGFyZERpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0zNCwyMS4wOGwtMS40LTUuNjhIMzAuNTFsMS40OSw2VjI5SDRWMjEuNDRMNy4wNiw5aDEyLjVsMS4xNS0ySDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFB'@;
put 'MSwxLDAsMCwwLDM0LDIxLjA4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz'@;
put 'My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjAiIHdp'@;
put 'ZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzQsMjEuMDgsMzIsMTMuMjFhNy40OSw3LjQ5LDAsMCwxLTIsLjI5bDIsNy45NFYyOUg0VjIxLjQ0TDcuMDYsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4wNkEyLDIsMCwwLDAsNS4x'@;
put 'Myw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNCwyMS4wOCwzMC44Niw4LjQzQTIsMiwwLDAsMCwyOC45NCw3SDcuMDZBMiwyLDAsMCwwLDUu'@;
put 'MTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFBMSwxLDAsMCwwLDM0LDIxLjA4Wk00LDI5VjIxLjQ0TDcuMDYsOUgyOC45M0wzMiwyMS40NFYyOVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIxQTcuNDcsNy40NywwLDAsMSwyMi41Nyw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjg2'@;
put 'LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMiwyMnY3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt'@;
put 'MlYyMlptMjgsNUgyNlYyNWg0WiIvPlxuJyksRi5DbHJTaGFwZUJhY2t1cFJlc3RvcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEuNzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMxLjU4LDE1LjRIMjkuNDZjMSwyLjg1LDIuMzEsNi4zNywyLjU0LDcuMDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjks'@;
put 'MS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xMiwzNCwyMiwzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i'@;
put 'YWRnZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVh'@;
put 'MSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2Vk'@;
put 'IiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2Mmg3Ljk1QzMwLDE2Ljk0LDMxLjcyLDIxLjY1LDMyLDIyLjQ4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIMTVWMTJINy4wN2ExLjkyLDEuOTIs'@;
put 'MCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMSwzNCwyMiwzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEzLDkuOTIsMTcs'@;
put 'NlYxOWExLDEsMCwxLDAsMiwwVjZsNCwzLjk1QTEsMSwwLDEsMCwyNC4zOCw4LjVMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLjg0LDEzLjM3'@;
put 'QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIs'@;
put 'MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwy'@;
put 'SDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEu'@;
put 'NzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyMi4yM0EzLjYyLDMuNjIsMCwwLDEsMjEsMTUuMTZW'@;
put 'MThhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43OSwyMS40OSwzMy4yOCwyMC4wNywzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0'@;
put 'WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsNCwzLjk1YTEsMSwwLDAsMCwuNzEuMjlsLjExLDBhNy40Niw3LjQ2LDAsMCwxLTEuMjUtMy41MkwxOCwyLjE2LDExLjYxLDguNUExLDEs'@;
put 'MCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2NmEzLDMs'@;
put 'MCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc3LDIxLjQzLDMzLjE1LDE5LjcsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy'@;
put 'NFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45'@;
put 'LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTQsMTkuNjksMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSww'@;
put 'LDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbicpLEYuQ2xyU2hhcGVCYWNrdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOCwxOS44NGw0LjQ3LTQuNDRoLS4yM2EzLjY3LDMuNjcsMCwwLDEtMi0uNjFMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00'@;
put 'LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIy'@;
put 'LjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1'@;
put 'LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9'@;
put 'IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uMjQsMS4zaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBI'@;
put 'NFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAsMS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3'@;
put 'LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIlxu'@;
put 'ICAgICAgICAgICAgICAgIGQ9Ik0zMC44NCwxMy4zN0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS4xNCwyaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAs'@;
put 'MS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw0SDI2VjI2aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNS0uNTEtLjY1LTEuOTMtMi4zNS02LjZIMjUuM2wtNS44OSw1Ljg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'NC0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjQsMy42NCwwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEu'@;
put 'NDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42'@;
put 'OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNy0uNTctLjc5LTIuMy0zLjA2LTguNTVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNSw3LjQ2LDcuNDYsMCwwLDEtMy4z'@;
put 'NS0uOCwzLDMsMCwwLDEtLjg2LDIuMjFsLTYuMzgsNi4zNVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTkuNDEsMjEuMjZsLS43NC43NEgzMy45M2MtLjE3LS41Ny0uNzktMi4zMS0zLjA5LTguNjNBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDI2LjU1YTMsMywwLDAsMS0uNzYsMi45MloiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbicpLEYuQ2xyU2hhcGVEZXZpY2VzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyNkgyNFYxNVpNMjQsMzBWMjcuNmg4VjMwWiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMCwyMkg0VjZIMjh2NWgyVjZhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMkgyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjAsMjZIOWExLDEsMCwwLDAsMCwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLDEzSDI0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAs'@;
put 'MCwyLTJWMTVBMiwyLDAsMCwwLDMyLDEzWm0wLDJWMjhIMjRWMTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjgsNEg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMmg4djJIOS4zMkExLjIsMS4yLDAsMCww'@;
put 'LDgsMjdhMS4yLDEuMiwwLDAsMCwxLjMyLDFIMTkuOTJ2LS4zN0gyMFYyMkg0VjZIMjh2NWgyVjZBMiwyLDAsMCwwLDI4LDRaIi8+XG4nKSxGLkNsclNoYXBlS2V5Ym9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsMThINFYxMEgzMloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI3IiB5'@;
put 'PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjExIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE1IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjE5IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjI3IiB5'@;
put 'PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMTEiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjE1IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxOSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjMi'@;
put 'IHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI3IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiB4PSIyNyIgeT0iMjIiIHdpZHRoPSIxLjk0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgeD0iNyIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi'@;
put 'Lz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTEuMTMiIHk9IjIyIiB3aWR0aD0iMTMuNzUiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNMTksMTNoMnYySDE5Wm0wLDRoMnYySDE5Wm0tNC00aDJ2MkgxNVptMCw0aDJ2MkgxNVptLTQtNGgydjJIMTFaTTksMjRIN1YyMkg5Wm0wLTVIN1Yx'@;
put 'N0g5Wm0wLTRIN1YxM0g5Wm0yLDJoMnYySDExWm0xMy44OCw3SDExLjEzVjIySDI0Ljg4Wk0yNSwxOUgyM1YxN2gyWm0wLTRIMjNWMTNoMlptMy45NCw5SDI3VjIyaDEuOTRaTTI5LDE5SDI3VjE3aDJabTAtNEgyN1YxM2gyWiIvPlxuJyksRi5DbHJTaGFwZU1vdXNlPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMzRBMTAsMTAsMCwwLDEsOCwyNFYxMmExMCwxMCwwLDAsMSwyMCwwVjI0QTEwLDEwLDAsMCwxLDE4LDM0Wk0xOCw0YTgsOCwwLDAsMC04LDhWMjRhOCw4LDAsMCwwLDE2LDBWMTJBOCw4'@;
put 'LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDE1YTEsMSwwLDAsMS0xLTFWMTBhMSwxLDAsMCwxLDIsMHY0QTEsMSwwLDAsMSwxOCwxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTEwLDEwLDAsMCwwLDgsMTJWMjRhMTAsMTAsMCwwLDAsMjAsMFYxMkExMCwxMCwwLDAsMCwxOCwyWm0xLjMsMTEuNDRhMS4zLDEuMywwLDAsMS0yLjYsMFYxMGExLjMsMS4zLDAsMCwxLDIuNiwwWiIvPlxuJyksRi5D'@;
put 'bHJTaGFwZURhc2hib2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LjE4LDEyLjMybC01LjkxLDUuODFhMywzLDAsMSwwLDEuNDEsMS40Mmw1LjkyLTUuODFaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTExLjM0LDI1LjVINi42NmExNC40MywxNC40MywwLDAsMS0z'@;
put 'LjExLTcuODRIN3YtMkgzLjU1QTE0LjQxLDE0LjQxLDAsMCwxLDcsMTEuMjlsMi40NSwyLjQ1LDEuNDEtMS40MUw4LjQzLDkuODdBMTQuNDEsMTQuNDEsMCwwLDEsMTcsNi4yOXYzLjVoMlY2LjNhMTQuNDcsMTQuNDcsMCwwLDEsMTMuNCwxMy42MUgyOC45MnYyaDMuNTNBMTQuNDMsMTQuNDMs'@;
put 'MCwwLDEsMjkuMzQsMjkuNzVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTUuODUsMTguNjlhMywzLDAsMSwwLDQuODMuODVsNS45Mi01LjgxLTEuNDEtMS40MS01LjkxLDUu'@;
put 'ODFBMywzLDAsMCwwLDE1Ljg1LDE4LjY5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjU4LDEzYTcuNDUsNy40NSwwLDAsMS0yLjA2LjQ0LDE0LjQsMTQuNCwwLDAsMSwx'@;
put 'LjkzLDYuNDNIMjguOTJ2MmgzLjUzYTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEsNy44NEg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAs'@;
put 'MSwxNyw2LjI5djMuNWgyVjYuM0ExNC40MSwxNC40MSwwLDAsMSwyMi41OCw3YTcuNTIsNy41MiwwLDAsMS0uMDgtMSw3LjUyLDcuNTIsMCwwLDEsLjA5LTEuMDlBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNloi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTguNiw5LjQ4LTUuOTIsNS44MWEzLDMsMCwxLDEtMS40MS0xLjQybDUuOTEtNS44MVptLTIzLDYuMTdIN3Yy'@;
put 'SDMuNTZjMC0uMzktLjA1LS43Ny0uMDUtMS4xN1MzLjUzLDIwLjE4LDMuNTUsMTkuOVptNC44OC0xMCwyLjQ2LDIuNDZMOS40NywxMy43NCw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N1pNMTksOS43OUgxN1Y2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1Wk0zMi40'@;
put 'OSwyMC43NGMwLC4zOSwwLC43OS0uMDUsMS4xN0gyOC45MnYtMmgzLjUzQzMyLjQ3LDIwLjE4LDMyLjQ5LDIwLjQ2LDMyLjQ5LDIwLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJN'@;
put 'MzIuNTgsMTNhNy40Niw3LjQ2LDAsMCwxLTEwLTguMTJBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNlpNMTcsNi4yOWMuMzIsMCwuNjMsMCwxLDBzLjcsMCwxLC4wNXYzLjVIMTdaTTcsMjEuOTFIMy41NmMwLS4z'@;
put 'OS0uMDUtLjc3LS4wNS0xLjE3czAtLjU2LDAtLjgzSDdabTIuNTEtOC4xNkw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N2wyLjQ2LDIuNDZabTEwLjYyLDkuMTlhMywzLDAsMSwxLS44Mi00LjgxbDUuOTEtNS44MSwxLjQxLDEuNDEtNS45Miw1LjgxQTMsMywwLDAsMSwyMC4w'@;
put 'OSwyMi45M1ptMTIuMzUtMUgyOC45MnYtMmgzLjUzYzAsLjI4LDAsLjU1LDAsLjgzUzMyLjQ3LDIxLjUyLDMyLjQ0LDIxLjkxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFk'@;
put 'Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVIb3N0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuM2EyLjQ4LDIuNDgsMCwxLDAsMi40OCwyLjQ3QTIuNDgsMi40OCwwLDAs'@;
put 'MCwxOCwyNC4zWm0wLDMuNmExLjEzLDEuMTMsMCwxLDEsMS4xMy0xLjEyQTEuMTMsMS4xMywwLDAsMSwxOCwyNy45WiIvPjxyZWN0IHg9IjEzLjUiIHk9IjIwLjciIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjY1LDMuNkgxMC4zNUExLjM1LDEuMzUsMCwwLDAsOSw0Ljk1VjMyLjRIMjdWNC45NUExLjM1LDEuMzUsMCwwLDAsMjUuNjUsMy42Wm0tLjQ1LDI3SDEwLjhWNS40SDI1LjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjEyLjYiIHk9IjcuMiIgd2lkdGg9IjEwLjgiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi42IiB5PSIxMC44IiB3aWR0'@;
put 'aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41'@;
put 'LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk'@;
put 'IiBwb2ludHM9IjIxLjMsNiAxMiw2IDEyLDcuNiAyMC40LDcuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTIsMTEuNmg2LjZjMC0wLjYsMC4yLTEuMSwwLjQtMS42aC03'@;
put 'VjExLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0yNiwxNS40VjMySDEwVjRoMTIuNWwxLjEtMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTUuNEgyNnoiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4y'@;
put 'aDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJz'@;
put 'MC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIxMyIgeT0iMjEiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yNCwxMC41Yy0wLjEtMC4yLTAuMi0wLjMtMC4zLTAuNUgxMnYxLjZoMTJWMTAuNXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xMiw2djEuNmgxMC43Yy0wLjEtMC41LTAuMi0xLjEtMC4yLTEuNkgxMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC01LS1iYWRnZWQiIGQ9Ik0yNiwxMi4zVjMySDEwVjRoMTIuOGMwLjItMC43LDAuNS0xLjQsMC45LTJIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjJDMjcuMywxMywyNi42LDEyLjcsMjYsMTIuM3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi41LDJoLTE3QzguNywy'@;
put 'LDgsMi43LDgsMy41VjM0aDIwVjMuNUMyOCwyLjcsMjcuMywyLDI2LjUsMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnogTTI0LDExLjZIMTJWMTBo'@;
put 'MTJWMTEuNnogTTI0LDcuNkgxMlY2aDEyVjcuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjNjLTIsMC0zLjctMS42LTMuNy0zLjdIMTJWMTBoNi45YzAtMC4xLDAuMS0wLjIsMC4xLTAuMmwxLjItMi4ySDEyVjZoOS4ybDIuMy00aC0xNEM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS4zSDIy'@;
put 'LjJ6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6IE0yMywyMi42SDEzVjIxaDEwVjIyLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxbC01Ljcs'@;
put 'OS45Yy0wLjMsMC42LTAuMSwxLjQsMC41LDEuN2MwLjIsMC4xLDAuNCwwLjIsMC42LDAuMmgxMS40YzAuNywwLDEuMy0wLjYsMS4zLTEuM2MwLTAuMi0wLjEtMC40LTAuMi0wLjZMMjkuMSwxYy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuNywyNywwLjgsMjYuOSwxeiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjQsMTAuM3YxLjJIMTJWMTBoMTEuOGMtMC41LTAuNy0wLjgtMS41LTEtMi40SDEyVjZoMTAuNWMwLDAsMC0wLjEsMC0wLjFjMC0xLjQsMC40LTIuNywx'@;
put 'LjEtMy45SDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxMy4xQzI2LjQsMTIuNiwyNSwxMS43LDI0LDEwLjN6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6TTIzLDIyLjZIMTNWMjFoMTBW'@;
put 'MjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1LjkiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVTdG9yYWdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMs'@;
put 'Ni42OWgwYy0uMTgtMy40MS05LjQ3LTQuMzMtMTUtNC4zM1MzLDMuMjksMyw2Ljc4VjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1Y2Ljc4czAsMCwwLDBTMzMsNi43LDMzLDYuNjlabS0yLDcuNTZjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwz'@;
put 'Ny40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzIsNDMuMzIsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMiw0My4zMiwwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40'@;
put 'OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjNy43NywwLDEyLjQ2LDEuNTMsMTMsMi4zNy0uNTIuODctNS4yMSwyLjM5LTEzLDIuMzlBMzcuNiwzNy42LDAsMCwxLDcsNy43NlY5Ljg1YTQzLjUz'@;
put 'LDQzLjUzLDAsMCwwLDExLDEuMjdjNCwwLDkuOTMtLjQ4LDEzLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xOS41MSw5LjA5LDE4LDkuMTFBMzcuNiwzNy42LDAsMCwx'@;
put 'LDcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjdoLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjguODMs'@;
put 'MTUuNEEzOC4zNywzOC4zNywwLDAsMSwxOCwxNi43LDM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMyw0My4zMywwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1'@;
put 'YTQzLjMzLDQzLjMzLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmMxLjUsMCwyLjg5LjA2LDQuMTUuMTZsMS4xLTEuOWMtMS44Ni0uMTgtMy43LS4y'@;
put 'Ni01LjI1LS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzdi0xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl'@;
put 'cnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjcsNTQuODIsNTQuODIsMCwwLDAsNi4yLS4zNiw3LjUsNy41LDAsMCwxLTEuMTMtMS44OGMtMS41LjE1LTMuMi4yNC01'@;
put 'LjA3LjI0QTM3LjYsMzcuNiwwLDAsMSw3LDcuNzZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDN2LjgyYy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUs'@;
put 'MzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0u'@;
put 'NDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNywwLDMuMjUuMDgsNC42NC4yYTcuNDQsNy40NCwwLDAsMSwuNjctMS45NGMtMS44OC0uMTgtMy43NS0uMjYtNS4zMS0uMjYtNS41NywwLTE1'@;
put 'LC45My0xNSw0LjQzVjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NFY4LjU5Yy0uNDMs'@;
put 'Mi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFDMjYsMTAuNTMsMzIuNTIsOC43OSwzMyw2LjYxaDBDMzIuOCwzLjIsMjMuNTIsMi4yOCwxOCwyLjI4UzMsMy4yMSwzLDYuNzFWMjkuMjljMCwzLjQ5LDkuNDMs'@;
put 'NC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4wOVYxNi4zNGMtLjQzLDIuMi03LDMuOTQt'@;
put 'MTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE3LjkxLDIw'@;
put 'LjI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yYTM5LjQsMzkuNCwwLDAsMCwxMS42NiwxLjUxYzYuOSwwLDEyLjctMS4yNywxNC41MS0zSDIyLjIzYTMuNjcsMy42NywwLDAsMS0zLjU1LTIuNzVoLS43N0EzOS40LDM5LjQsMCwwLDEsNi4yNSwxMVY5YTM5LjQsMzkuNCwwLDAsMCwx'@;
put 'MS42NiwxLjUxaC44MkEzLjY0LDMuNjQsMCwwLDEsMTksOS43NWw0LjE3LTcuMjJjLTEuODUtLjE4LTMuNjgtLjI1LTUuMjEtLjI1LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYs'@;
put 'MjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0QzMyLjU3LDE4LjUzLDI2LDIwLjI4LDE3LjkxLDIwLjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NHYtMS42YTcuNDcsNy40NywwLDAsMS03LjM4LS44'@;
put 'LDQ4LjMsNDguMywwLDAsMS03LjcxLjU5QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTEsNTEsNTEsMCwwLDAsNi0uMzQsNy40Niw3LjQ2LDAsMCwxLS41OS03LjY1Yy0xLjg3LS4xOC0zLjczLS4yNi01LjI4LS4yNi01LjU3LDAtMTUsLjkzLTE1'@;
put 'LDQuNDNWMjkuMjljMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4w'@;
put 'OVYxNi4zNGMtLjQzLDIuMi03LDMuOTQtMTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuJyksRi5DbHJTaGFwZUNsdXN0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjM2LDhIMjcuNXYySDMxVjMwSDI3LjV2MkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+PGVs'@;
put 'bGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEEx'@;
put 'LjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMjQsMzBIMTJWNkgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNSwxMEg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdWMzJIOC41VjMwSDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPjxl'@;
put 'bGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5bC4zOS0uNjhIMTMuNXYxLjZoNS4xN0Ez'@;
put 'LjY1LDMuNjUsMCwwLDEsMTksOS44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMzBIMTJWNmg5LjI5bDEuMTUtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYz'@;
put 'MkgyNlYxNS40SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzEgMTUuNCAzMSAzMCAyNy41IDMwIDI3LjUgMzIgMzMgMzIgMzMgMTUuNCAzMSAxNS40IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx'@;
put 'LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMs'@;
put 'OS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPjxlbGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI0LDEwLjQ5VjMwSDEyVjZIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzBIMjcuNXYySDMzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zNiw4SDI3LjVWMzJIMzNWOS42N0ExLjY1LDEuNjUsMCwwLDAs'@;
put 'MzEuMzYsOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEExLjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgy'@;
put 'M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl'@;
put 'cnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuNSIgeT0iMTUuNCIgd2lkdGg9IjUuNSIgaGVpZ2h0PSIxNi42IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMTMuNTZhMy42'@;
put 'OCwzLjY4LDAsMCwxLS4zMS0zSDEzVjloNi41NmwyLjg5LTVIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaTTE4LDI3Ljc5QTEuNzksMS43OSwwLDEsMSwxOS44MSwyNiwxLjgsMS44LDAsMCwxLDE4LDI3Ljc5'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAs'@;
put 'MCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy40'@;
put 'OSw3LjQ5LDAsMCwxLDIyLjUsNlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgyM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi41LS40NFYzMkgzM1YxMi44N0E3LjQ3LDcuNDcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBcHBsaWNhdGlvbnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQg'@;
put 'MTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDQgMzAgOCAyNiA4IDI2IDEwIDMyIDEwIDMyIDQgMzAgNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0'@;
put 'IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUgMzAgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cG9s'@;
put 'eWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkg'@;
put 'MzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIv'@;
put 'PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgOCAxNSA4'@;
put 'IDE1IDEwIDIxIDEwIDIxIDQgMTkgNCAxOSA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMTkgMTUgMTkgMTUgMjEgMjEgMjEgMjEgMTUgMTkgMTUgMTkgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDMwIDE1IDMwIDE1'@;
put 'IDMyIDIxIDMyIDIxIDI2IDE5IDI2IDE5IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCA4IDQgOCA0IDEwIDEwIDEwIDEwIDQgOCA0IDggOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0i'@;
put 'OCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAx'@;
put 'NSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTUgMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFs'@;
put 'ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdv'@;
put 'biBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDhIMTV2Mmg0TDE5LDkuODksMjEsNi41'@;
put 'VjRIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43'@;
put 'OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWln'@;
put 'aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0'@;
put 'IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9'@;
put 'IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJl'@;
put 'Y3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMTBoNEwxOSw5Ljg5LDIxLDYuNVY0SDE1WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu'@;
put 'MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iNCIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC04LS1iYWRnZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC05LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUJ1aWxkaW5nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS44'@;
put 'OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0gyMlY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxOS44OCwzWk0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVj'@;
put 'dCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i'@;
put 'YWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2'@;
put 'IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4'@;
put 'LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzVjMxSDIz'@;
put 'djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9'@;
put 'IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIg'@;
put 'd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy'@;
put 'dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCww'@;
put 'LDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJWOC4yNGwyLTMuNDFBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjE1LjM4YTMuNjgsMy42OCwwLDAsMS0yLS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMxIDIzIDMxIDIzIDMzIDMzIDMzIDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4'@;
put 'LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw4SDIyVjMzSDMzVjEwQTIsMiwwLDAsMCwzMSw4Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBI'@;
put 'MjhWMjNoMlptMC01SDI4VjE4aDJabTAtNUgyOFYxM2gyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWNS4xMkEyLjEyLDIuMTIs'@;
put 'MCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVWOGgy'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWMTQuNjRhMy42NywzLjY3LDAsMCwxLTEtNC43NmwxLTEuNjVWNS4xMkEyLjEyLDIu'@;
put 'MTIsMCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVW'@;
put 'OGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRsLS4yMywwVjMzSDMzVjE1LjRaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm00LDVIMjhWMjNoMlptMC01SDI4'@;
put 'VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx'@;
put 'TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0'@;
put 'LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0w'@;
put 'LTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTVIMjhWMTMuMjJBNy41LDcuNSwwLDAsMSwyMi43OCw4SDIyVjMz'@;
put 'SDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBIMjhWMjNoMlptMC01SDI4VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjN2Mmg4VjMxSDIzdjJIMzNWMTBBMiwyLDAsMCww'@;
put 'LDMxLDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2'@;
put 'VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9'@;
put 'IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIvPlxuICAg'@;
put 'ICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIy'@;
put 'MyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIwIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDUFU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjA4LDIzLjA3aC0xMXYxLjVIMjMuODNhLjc1Ljc1LDAsMCwwLC43'@;
put 'NS0uNzVWMTEuMzNoLTEuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwxOC4xNWEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWOC4xQTIuMSwyLjEsMCwwLDAs'@;
put 'MjcuOSw2SDI2LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAs'@;
put 'MS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMw'@;
put 'LDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNFpNMjgsMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjcuOWEuMS4xLDAsMCwxLC4xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjA2LDI0LjU3SDIzLjgzYS43NS43NSwwLDAsMCwuNzUtLjc1VjExLjMzaC0xLjVWMjMuMDdoLTExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI4VjI3LjlhLjEuMSwwLDAsMS0uMS4xSDguMWEuMS4xLDAsMCwxLS4xLS4xVjguMUEuMS4xLDAsMCwxLDguMSw4SDIyLjc4YTcuNDksNy40OSww'@;
put 'LDAsMS0uMjgtMkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSww'@;
put 'LDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwx'@;
put 'LDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t'@;
put 'YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhoMTJsMS4x'@;
put 'NS0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZI'@;
put 'NlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEu'@;
put 'NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTUuNGgtMS41djcuNjdoLTExWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYx'@;
put 'NS40SDI1djguNDFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjE1LjRoLS43N0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4x'@;
put 'VjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMw'@;
put 'aDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ2LDcuNDYsMCwwLDEtNS0xLjkyVjIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgxLjQyQTcu'@;
put 'NDYsNy40NiwwLDAsMSwyMi41LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhh'@;
put 'LjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIu'@;
put 'MmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40'@;
put 'VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIu'@;
put 'MSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40'@;
put 'Wk0yNSwyMy44MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTFoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZU1lbW9yeT0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSI4IiB5PSIxMiIgd2lkdGg9IjQi'@;
put 'IGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjI0IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw3SDRBMiwyLDAsMCwwLDIsOXY0SDRWOUgzMnY0aDJWOUEyLDIsMCwwLDAsMzIsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTksMTMuNTZBMy42NiwzLjY2LDAsMCwxLDE4LjU3LDEySDE2djhoNFYxNC42NEEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iMjQiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjQuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMTkuNTZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOXY0'@;
put 'SDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx'@;
put 'MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0'@;
put 'PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyQTcuNDYsNy40NiwwLDAsMSwyNS41MSwx'@;
put 'MkgyNHY4aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMjMuMTNhNy40NSw3LjQ1LDAsMCwxLS41NS0ySDRBMiwyLDAsMCwwLDIsOXY0SDRaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzQsMTNWOWEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN0gzMlYxM1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFptOCwwSDI0VjEyaDRa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTUuMDdIMjhWMjBIMjRWMTUuMDdIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjMxVjIwSDE2VjEyaDIuNjFBMy42OCwzLjY4LDAsMCwxLDE5LDkuNTVMMjAu'@;
put 'NTIsN0g0QTIsMiwwLDAsMCwyLDl2NEg0djRIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1SDE5VjI5SDMyYTIsMiwwLDAsMCwyLTJWMTdaTTEyLDIwSDhWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yNi44NS44bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNi44QTEuMjgsMS4yOCwwLDAsMCwyNi44NS44WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjEzLjIyYTcuMzMsNy4zMywwLDAsMS00LDBWMjBIMjRWMTJoMS41MWE3LjQ4LDcuNDgsMCwwLDEtMi45NC01SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJI'@;
put 'MTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEYXRhQ2x1c3Rlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcu'@;
put 'OTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMzIsNy4yNywzMiw3LjkxVjE4LjI0YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQu'@;
put 'MDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUy'@;
put 'LTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'OCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDks'@;
put 'MTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2'@;
put 'LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDE4LjI0VjcuOTFjMC0uNjUsMi4wOS0xLjg0LDUuNS0xLjg0UzE1LDcuMjcsMTUsNy45MVY5LjdhMTguNzUsMTguNzUsMCwwLDEsMi0uMlY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0'@;
put 'Ljc3LDIxLjY3LDcuOSwyMlYyMEM1LjQ2LDE5LjY4LDQsMTguNzgsNCwxOC4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuNjUsMTguNTJjLS44NSwxLTMuNDIsMi02LjY1'@;
put 'LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEy'@;
put 'Ljc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOGwuNzUsMGEzLjY5LDMuNjksMCwwLDEtLjA4LTJsLS42NiwwYy00LjkzLDAtOC42NSwxLjg4LTgu'@;
put 'NjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuNGgtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0x'@;
put 'Ljc1LjYzLTMsMS42OC0zLDMuMTJWOS41bC4yNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjIuODRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJj'@;
put 'My4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI'@;
put 'MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUu'@;
put 'NDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIs'@;
put 'NC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVptNi42NSw3LjY3Yy0uODUsMS0zLjQyLDItNi42NSwyQTE0LjQ5LDE0LjQ5LDAsMCwxLDE0LDIwdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYs'@;
put 'MTIuNzYsMCwwLDAsNi42NS0xLjU2djMuMTJjLS44NSwxLTMuNDIsMi02LjY1LDJhMTQuNDksMTQuNDksMCwwLDEtNC0uNTN2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2Mi4yOWMwLC45NS0yLjY1LDIuMzgtNi42NSwyLjM4cy02LjY1'@;
put 'LTEuNDMtNi42NS0yLjM4VjE1LjIzYzAtLjk1LDIuNjUtMi4zOCw2LjY1LTIuMzhzNi42NSwxLjQzLDYuNjUsMi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDcuOTFjMC0u'@;
put 'MzMuNTUtLjgsMS41NC0xLjE4LDAtLjI0LDAtLjQ4LDAtLjczYTcuNTIsNy41MiwwLDAsMSwuMTQtMS40MUMyMC41NSw1LjE5LDE5LDYuMywxOSw3LjkxVjkuNWExOC43NSwxOC43NSwwLDAsMSwyLC4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2NWMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1di01LjlBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI2LjUsNC4wOEMyMi43Nyw0LjA4LDE5LDUuNCwxOSw3LjkxVjkuNDhjNS4zLjI2LDksMi42LDksNS43NnY2LjdsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQuMDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAs'@;
put 'MCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEu'@;
put 'MTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQt'@;
put 'Ny41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjM5LTIuN2wtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43'@;
put 'NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1'@;
put 'LTEuMTEsOC42My0zLjExVjE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDQuOGMtMS43NS42My0zLDEuNjgtMywzLjEy'@;
put 'VjkuNDhsLjI3LDBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOHY2LjUzbC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDkuNDhWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIs'@;
put 'Ny45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJMOCwyMS45M3YtNi43QzgsMTIuMDgsMTEuNyw5Ljc0LDE3LDkuNDhaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1'@;
put 'Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4y'@;
put 'MSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwx'@;
put 'MC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTQtMS40QzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS40OGExNS4zMywxNS4zMywwLDAs'@;
put 'MSw1LDFBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI3LjM1LDEzYTQsNCwwLDAsMSwuNywyLjIzdjYu'@;
put 'N2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxMi4zM0E3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNDlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI1Ljk5IiBy'@;
put 'PSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUmVzb3VyY2VQb29sPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxLjczYTE0LDE0LDAsMCwx'@;
put 'LC4yMiwxLjZIMTcuNDlMOC4zLDI4LjA3QTE0LDE0LDAsMCwxLDIyLjA5LDQuNjJsMS0xLjc2QTE2LDE2LDAsMSwwLDM0LDE4YTE2LDE2LDAsMCwwLS4yMy0yLjYxWk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAs'@;
put 'MCwwLDE4LDJaTTQsMThhMTQsMTQsMCwwLDEsMjcuOTUtMUgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsNCwxOFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yLDEzLjRhMTMuOTEsMTMuOTEsMCwwLDEsLjc1LDMuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuNjEsNC44YTcuNDMsNy40MywwLDAsMSwuNTgtMS45MiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDku'@;
put 'OTNBNy40Myw3LjQzLDAsMCwxLDMxLjIsMTMuNFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguNTcsMzAuOUExNiwxNiwwLDAsMCwzMy45NSwxOUgx'@;
put 'OC40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN0ExNiwxNiwwLDEsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN2ExNS45MSwxNS45MSwwLDAsMC0uODQtNC4xOCw3'@;
put 'LjQ5LDcuNDksMCwwLDEtOS45Mi05Ljk0QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE2LDE2LDAsMCwwLS4xOC0xLjYxSDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDQuMDYtN0ExNiwxNiwwLDAsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGRDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYu'@;
put 'NjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUu'@;
put 'MDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQs'@;
put 'NDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuODgsMTYuODdhMSwxLDAsMCwwLTEuNDEsMS40MWw2LDZMMjYuNCwxMy43N0ExLDEsMCwwLDAsMjUsMTIuMzNsLTkuNDcsOS4x'@;
put 'OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz'@;
put 'LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVptLTQuNTcsNi42NUwxNS41MSwyNC45LDkuMTksMTguNTdhMS40LDEuNCww'@;
put 'LDAsMSwyLTJMMTUuNTQsMjEsMjQuNzMsMTJhMS40LDEuNCwwLDEsMSwyLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43'@;
put 'OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQs'@;
put 'MCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44'@;
put 'MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMwLDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjR2LjUzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3'@;
put 'LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTNjMSwuNjQsMi4yLDEuMjcsMy40MywxLjg5bDEtMS43NGE0MS4xLDQxLjEsMCwwLDEtMy44OS0yLjE4TDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0'@;
put 'Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41djIuNDNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4'@;
put 'LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0Ni4xOSw0Ni4xOSwwLDAsMCw0LjUxLDIuNDJjMC0uMSwwLS4xOSwwLS4yOWE3LjQ5LDcuNDksMCwwLDEsLjIzLTEuODMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0'@;
put 'My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMu'@;
put 'NjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40Myw0'@;
put 'YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUs'@;
put 'MTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww'@;
put 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40Nyww'@;
put 'LDAsMS03LjI3LTkuMzMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMu'@;
put 'MTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZVNoaWVsZFg9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUs'@;
put 'MCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1'@;
put 'VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMw'@;
put 'LDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjgxLDEwLjc5LDE4LDE1LjYxbC00LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxN2wtNC44MSw0LjgxYTEsMSwwLDEsMCwxLjQxLDEu'@;
put 'NDFMMTgsMTguNDNsNC44MSw0LjgxYTEsMSwwLDAsMCwxLjQxLTEuNDFMMTkuNDEsMTdsNC44MS00LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjI1LDcuNGE0My43'@;
put 'OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4x'@;
put 'MmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTI0LjUxLDIxLjU1YTEuNCwxLjQsMCwwLDEtMiwyTDE4LDE5bC00LjUzLDQuNTNhMS40MywxLjQzLDAsMCwxLTIsMCwxLjQsMS40LDAsMCwxLDAtMkwxNiwxN2wtNC41My00LjUzYTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE1bDQu'@;
put 'NTMtNC41M2ExLjQsMS40LDAsMCwxLDIsMkwyMCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUltcG9ydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsNEgxNC44N0w4LDEwLjg2VjE1aDJWMTMuNjFoNy42'@;
put 'MVY2SDI4VjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaTTE2LDEySDEwdi0uMzJMMTUuNyw2SDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4y'@;
put 'OGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQs'@;
put 'MjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI4LDE1LjRWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42'@;
put 'MVY2aDMuNjhsMS4xNS0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFs'@;
put 'ZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQsMjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjE1aDJabTAtMS45MkwxNS43LDZIMTZ2NkgxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42'@;
put 'OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxNC44'@;
put 'N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhhMSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhh'@;
put 'MSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVFeHBvcnQ9KDAsbS5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDI0djguMzhoMlY2YTIsMiwwLDAsMC0yLTJIMTAuODdMNCwxMC44N1YzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJINlptMC0xLjkyTDExLjY5LDZIMTJ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNmg3LjY4bDEuMTUtMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQx'@;
put 'TDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMTIuMzRh'@;
put 'Ny41Myw3LjUzLDAsMCwxLTItMS44NXYzLjg5aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMC44N0w0'@;
put 'LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAs'@;
put 'MCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEu'@;
put 'NDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMxLjE2LDIx'@;
put 'SDI2djJoNS4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzUsMjJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjE1LjRIMjIuMjNB'@;
put 'My42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjEyLjM0QTcuNDYsNy40NiwwLDAsMSwyMi43OCw0SDEwLjg3TDQsMTAuODZWMzBh'@;
put 'MiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi'@;
put 'IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVXBsb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEs'@;
put 'MC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMs'@;
put 'OC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4y'@;
put 'OCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUu'@;
put 'NCw4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4'@;
put 'LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDIxdjJoNS4zOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUt'@;
put 'NSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCw0LjU0LTE0LjU2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwx'@;
put 'MC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42Niw3LjY2LDAsMCwxLDMuNiwxOC4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyks'@;
put 'Ri5DbHJTaGFwZURvd25sb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEsMC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5LjY1LDkuNjUsMCwwLDAsMTAuODksMjhhMywzLDAsMCwx'@;
put 'LDAtMkE3LjY1LDcuNjUsMCwwLDEsMTEsMTAuNzRsLjY3LDAsLjIzLS42M2E4LjQzLDguNDMsMCwwLDEsOC01LjQsOC4yNiw4LjI2LDAsMCwxLDguNDUsOCw3Ljc1LDcuNzUsMCwwLDEsMCwuOGwtLjA4LjcyLjY1LjNBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSwwLDJoMS4y'@;
put 'OGE4LDgsMCwwLDAsMy45My0xNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdB'@;
put 'MSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSww'@;
put 'LDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg3'@;
put 'LDQuNjlhOC44MSw4LjgxLDAsMCwxLDIsLjI1bDEtMS44YTEwLjgsMTAuOCwwLDAsMC0zLjA3LS40NSwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTgu'@;
put 'NDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSww'@;
put 'LDJoMS4yOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42'@;
put 'OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdBMSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwxMC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww'@;
put 'LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTguNDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCw0LjU0LTE0LjYxWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAg'@;
put 'ICAgICAnKSxGLkNsclNoYXBlUGx1Z2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAs'@;
put 'MCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2Wm0yLjQxLDdBMywzLDAsMCwxLDMwLDI0SDI3djcuODNINFYy'@;
put 'NUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoOFYxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEs'@;
put 'MzIuMjIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyN1YxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEsMzIuMjIsMjMsMywzLDAsMCwxLDMwLDI0'@;
put 'SDI3djcuODNINFYyNUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoLjY2TDIxLDYuNTlBNS4xMiw1LjEyLDAsMCwwLDE2LjUx'@;
put 'LDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4x'@;
put 'NSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEs'@;
put 'MTZIMjlWMTMuNDNhNy40NSw3LjQ1LDAsMCwxLTItLjU1VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNo'@;
put 'OVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g0LjA2YTcuNDQsNy40NCwwLDAsMS0uNTEtMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEz'@;
put 'LjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWOC44M2EyLDIsMCwwLDAtMi0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1'@;
put 'LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgy'@;
put 'OXYtLjZIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwy'@;
put 'M0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWMTMuNDNhNy41LDcuNSwwLDAsMS02LjQ1LTYuNTlIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4x'@;
put 'MywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFw'@;
put 'ZUZsb3BweT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuMzYsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjguNzhaTTI1LDMwSDExVjIySDI1Wm01LDBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2'@;
put 'NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJIMTJWNkgyNi41MUwzMCw5LjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAs'@;
put 'MCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0xLjY4bC0uNDMtLjNIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwz'@;
put 'MCwxMy41Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAsMCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMmg3LjM1YTMuNTQsMy41NCwwLDAsMS0uNzctMkgxMlY2aDku'@;
put 'MjlsMS4xNS0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjUsMzBIMTFWMjJIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSww'@;
put 'LDAsMSwyNiwyMS41Wk0yNCwxNEgxMmEyLDIsMCwwLDEtMi0yVjZoMnY2SDI2QTIsMiwwLDAsMSwyNCwxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDYsNy40NiwwLDAsMS00LTEuMThBMiwyLDAs'@;
put 'MCwxLDI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjUuNTRhNy40NSw3LjQ1LDAsMCwxLTIuNzYtOEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUs'@;
put 'MCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZoNi41OEEzLjY3LDMuNjcsMCwwLDEsMTksOS44OUwyMi40NSw0SDZB'@;
put 'MiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSwwLDAsMSwyNiwyMS41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ29tcHV0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI5LjYgMjIuODggOS42IDEwLjYgMjQuNCAxMC42IDI1Ljk4IDkgOCA5IDgg'@;
put 'MjIuODggOS42IDIyLjg4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsN0gzMFYyM2gyVjYuNUExLjUsMS41LDAsMCwwLDMwLjUsNUg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4zNGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2'@;
put 'LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4z'@;
put 'NGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjYsMjIuODhWMTAuNmg5LjE0QTMuNjQsMy42NCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIOFYyMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDIwLjcxbDEuMTUtMkg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjMwIiB5PSIxNS40IiB3aWR0aD0iMiIgaGVpZ2h0PSI3LjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww'@;
put 'LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0'@;
put 'LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4wNy0xSDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZW'@;
put 'N0gyMi41N0E3LjUyLDcuNTIsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYyM2gyVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMTMsOUg4VjIyLjg4SDkuNlYxMC42SDI0LjA4QTcuNDksNy40OSwwLDAsMSwyMy4xMyw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjlWMjRoM1Y3LjU3QTEuNTQsMS41NCwwLDAsMCwzMC41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yMy44MSwyNmMtLjM1LjktLjk0LDEuNS0xLjYxLDEuNUgxMy43NGMtLjY4LDAtMS4yNi0uNi0xLjYxLTEuNUgxdjEuNzVBMi40NSwyLjQ1LDAsMCwwLDMuNiwzMEgzMi40QTIuNDUsMi40NSwwLDAsMCwzNSwyNy43NVYyNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI5IiB5PSIxNS40IiB3aWR0aD0iMyIgaGVpZ2h0PSI4LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik03LDEwSDE5TDE5LDkuODksMjEuMjksNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LDEwSDIzLjY2QTcuNDYsNy40NiwwLDAsMSwyMi41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJhNy4xNCw3LjE0LDAsMCwxLTMsLjJWMjRoM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEaXNwbGF5PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwx'@;
put 'LjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzIsMjVINFY1SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxw'@;
put 'b2x5Z29uIHBvaW50cz0iNy43IDguNzYgMjguMTMgOC43NiAyOS45NCA3LjE2IDYuMSA3LjE2IDYuMSAyMyA3LjcgMjMgNy43IDguNzYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwz'@;
put 'LjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCww'@;
put 'LDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4x'@;
put 'NywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyNUg0VjVIMjEuODdMMjMsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTUu'@;
put 'MzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgMjMgNy43IDguNzYgMTkuNyA4Ljc2IDIwLjYyIDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUy'@;
put 'VjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwy'@;
put 'NiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuMSwyM0g3LjdWOC43NkgyM2E3LjQ0LDcuNDQsMCwwLDEtLjQzLTEuNkg2LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyNUg0VjVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCww'@;
put 'LDAsMzQsMjUuNVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwx'@;
put 'LDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwz'@;
put 'LjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzEsMjEuODNINVY3SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAs'@;
put 'MS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVy'@;
put 'dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMXY2LjQzSDVWN0gyMC43MUwyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYx'@;
put 'LDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwx'@;
put 'My40M3Y4LjQxSDVWN0gyMi41N2E3LjI5LDcuMjksMCwwLDEsLjU1LTRIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDQsNy40NCwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYu'@;
put 'Q2xyU2hhcGVUZXJtaW5hbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMlY5LjJINFpNNCwyOVYxMC44SDMyVjI5WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDE1'@;
put 'LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCAxMy43OSAxOC44IDcgMjEuOTEgNyAy'@;
put 'NC4xMSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOUg0VjEwLjhIMTguNjhBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwx'@;
put 'LjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu'@;
put 'MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNs'@;
put 'ci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjIzIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQu'@;
put 'MTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMjlI'@;
put 'NFYxMC44SDI0LjI0YTcuNTEsNy41MSwwLDAsMS0xLTEuNkg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwx'@;
put 'My4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJh'@;
put 'ZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNi44LDE1LjgxVjEzLjE3bDEwLDQuNTl2Mi4wOGwtMTAsNC41OVYyMS43OGw2LjUx'@;
put 'LTNaTTIzLjQsMjUuNEgxN1YyM2g2LjRaTTQsOS4yVjdIMzJWOS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bC40LS42OUg0VjdIMjAuNzFs'@;
put 'MS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTE2LjgsMTkuODNsLTEwLDQuNTlWMjEuNzhsNi41MS0zLTYuNTEtM1YxMy4xN2wxMCw0LjU5Wm02LjYsNS41N0gxN1YyM2g2LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNi43OC00LjNINFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0u'@;
put 'MDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYu'@;
put 'Niw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDb2RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0x'@;
put 'LjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwz'@;
put 'LjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsOS44M2EuOS45LDAsMCwwLTEuMDkuNjZMMTUu'@;
put 'NDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhsMy40NC0xMy44MUEuOS45LDAsMCwwLDE5Ljk0LDkuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwx'@;
put 'Mi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTYsMTEuNjIsMTUuNDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhMMTkuNzMsMTQuNGEzLjU5LDMuNTksMCwwLDEtMS4xNi0yLjc5WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTItMS4zOEgyNC42NGwzLjI0LDIuMjEtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCww'@;
put 'LTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu'@;
put 'NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCww'@;
put 'LDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t'@;
put 'YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjIxLDE2Ljc4bC02LjUzLTQuNDVBMSwxLDAsMSwwLDIyLjU1LDE0bDUuMzIsMy42My01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45'@;
put 'LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUFwcGxpY2F0aW9uPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMyIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsNkgzMnY0LjJINFpNNCwzMFYxMS44SDMyVjMw'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRabTAsNi4ySDRWNkgzMloiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAn'@;
put 'KSxGLkNsclNoYXBlQmF0dGVyeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNS4xMiw0SDIzVjMuNThBMS41OCwxLjU4LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44'@;
put 'OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWNS44OEExLjg4LDEuODgsMCwwLDAsMjUuMTIsNFpNMjUsMzJIMTFWNmg0VjRoNlY2aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRWMzJIMTFWNmg0VjRoNlY2aC4yOGwxLjY0LTIuODVBMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMu'@;
put 'NThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0x'@;
put 'LjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDEx'@;
put 'LjU4VjMySDExVjZoNFY0aDZWNkgyMi41QTcuNDcsNy40NywwLDAsMSwyMywzLjM4LDEuNTcsMS41NywwLDAsMCwyMS40MiwySDE0LjU4QTEuNTgsMS41OCwwLDAsMCwxMywzLjU4VjRIMTAuODhBMS44OCwxLjg4LDAsMCwwLDksNS44OFYzMi4xMkExLjg4LDEuODgsMCwwLDAsMTAuODgsMzRI'@;
put 'MjUuMTJBMS44OCwxLjg4LDAsMCwwLDI3LDMyLjEyVjEyLjg3QTcuNSw3LjUsMCwwLDEsMjUsMTEuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNFYyLjYyQS42LjYsMCww'@;
put 'LDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NHYtMjhBMS4wOSwxLjA5LDAsMCwwLDI2LDRaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEy'@;
put 'LjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42NiwzLjY2LDAsMCwxLDIwLjU1LDE1bDIuNzYsNC43OUwxNi45LDE4LjdsMy4zNiw2LjczYTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmwuMDkuMTVBMy42NiwzLjY2'@;
put 'LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjJWMi42MkEuNi42LDAsMCwwLDIxLjQyLDJIMTQuNThhLjYuNiwwLDAsMC0uNTguNjJWNEgxMEExLjA5LDEuMDksMCwwLDAsOSw1LjA3djI4QTEsMSwwLDAsMCwxMCwzNEgyNmExLDEsMCwwLDAsMS0uOTRWMTIuODdB'@;
put 'Ny41LDcuNSwwLDAsMSwyMi41LDZaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVNb2JpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTEsNkgyNVYyNEgxMVpt'@;
put 'MCwyNFYyNkgyNXY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTksMzBIMTdWMjhoMlptLTgtNFY2SDI1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgJyksRi5DbHJTaGFwZVRhYmxldD0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSIxNyIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEy'@;
put 'LDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWm0wLDJWMjYuMzhINlY0Wk02LDMyVjI4SDMwdjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z'@;
put 'MCwySDZBMiwyLDAsMCwwLDQsNFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMzAsMlpNMTksMzJIMTdWMzBoMlpNNiwyOFY0SDMwVjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFw'@;
put 'ZU5ldHdvcmtHbG9iZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJh'@;
put 'MTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWm0wLDJhMTIsMTIsMCwwLDEsOC40NCwzLjQ4YzAsLjMzLDAsLjY2LDAsMUExOC41MSwxOC41MSwwLDAsMCwxNCw4LjUzYTIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBj'@;
put 'LS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS45MiwxMS45MiwwLDAsMSwxNy43NSw0Wm0tMyw1Ljg3QTE3LDE3LDAsMCwxLDI1LjkyLDEwYTE2LjksMTYuOSwwLDAsMS0zLjExLDcsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42'@;
put 'M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3Wm0tNC0zLjZjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2'@;
put 'LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4y'@;
put 'Ny44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQz'@;
put 'LDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4Wm02LjUxLTguOWEyLjMzLDIuMzMsMCwwLDAtLjMzLTEuMTksMTguNCwxOC40LDAsMCwwLDMuMzktNy4zN3EuNzUuMzUsMS40'@;
put 'OC43OGExMiwxMiwwLDAsMSwuNDIsOC4yQTE2LDE2LDAsMCwxLDI0LjI3LDE5LjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRoLTJjMCwuMiwwLC40LDAsLjYxYTEyLDEyLDAsMCwxLS41MywzLjUyLDE2LDE2LDAsMCwxLTUtLjQxLDIuMzMsMi4z'@;
put 'MywwLDAsMC0uMzMtMS4xOSwxOC44NywxOC44NywwLDAsMCwxLjYyLTIuNTJIMjMuODNhMTcuMjksMTcuMjksMCwwLDEtMSwxLjU0LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43'@;
put 'N0ExNy4wOCwxNy4wOCwwLDAsMSwxOS41Niw5bC44Ny0xLjUxYTE4LjU5LDE4LjU5LDAsMCwwLTYuMzksMSwyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuODgsMTEuODgsMCwwLDEsMjIsNC43OUwy'@;
put 'MywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFptLTIxLTkuMTNjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCww'@;
put 'LTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODks'@;
put 'Mi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45'@;
put 'MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCww'@;
put 'LDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTVsLS41MSwwYTExLjkxLDExLjkxLDAsMCwxLS4yNSw2LDE2LDE2LDAs'@;
put 'MCwxLTUtLjQxLDIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC41OSwxOC41OSwwLDAsMCwyLjc4LTUuMTgsNy40OSw3LjQ5LDAsMCwxLTEuMzEtLjgyLDE3LDE3LDAsMCwxLTIuNjEsNSwyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQu'@;
put 'OTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzcsMTcsMTcsMCwwLDEsOC41My0uNjIsNy40Myw3LjQzLDAsMCwxLS41Ni0xLjU5QTE4LjU2LDE4LjU2LDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0u'@;
put 'MTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDIyLjU3LDVhNy40NSw3LjQ1LDAsMCwxLC41My0yQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00Wk0xMC43Niw2LjI3YzAsLjIxLjA2LjQzLjEuNjQuMDkuNDQu'@;
put 'MjEuODcuMzMsMS4zYTIuMjgsMi4yOCwwLDAsMC0xLjEsMi4yNUExOC4zMiwxOC4zMiwwLDAsMCw1LjksMTQuMjIsMTIsMTIsMCwwLDEsMTAuNzYsNi4yN1ptMCwxNS43MUEyLjM0LDIuMzQsMCwwLDAsOS4yLDIzLjc0bC0uNjQsMEExMS45NCwxMS45NCwwLDAsMSw1LjgsMTYuOTJsLjExLS4x'@;
put 'OWExNi45LDE2LjksMCwwLDEsNC44MS00Ljg5LDIuMzEsMi4zMSwwLDAsMCwyLjI4LjYzLDE3LjUzLDE3LjUzLDAsMCwwLDUuMzUsNS42NWMuNDEuMjcuODMuNTIsMS4yNS43NkEyLjMyLDIuMzIsMCwwLDAsMTkuNzgsMjBhMTYuOTQsMTYuOTQsMCwwLDEtNi4yLDMuMTFBMi4zNCwyLjM0LDAs'@;
put 'MCwwLDEwLjc2LDIyWm03LDZhMTEuOTIsMTEuOTIsMCwwLDEtNS44MS0xLjUxbC4yOC0uMDZhMi4zNCwyLjM0LDAsMCwwLDEuNTctMS43OSwxOC40MywxOC40MywwLDAsMCw3LTMuNSwyLjI5LDIuMjksMCwwLDAsMy0uNjIsMTcuNDEsMTcuNDEsMCwwLDAsNC4zMi41NmwuNTMsMEExMiwxMiww'@;
put 'LDAsMSwxNy43NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNi45LDE2LjksMCwwLDAsMy4xMS03QTE3LDE3LDAsMCwwLDE0LjcyLDkuODdaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJhMTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWk0yOC4xLDIxLjA5YTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjks'@;
put 'Mi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMzLDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIs'@;
put 'Mi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43'@;
put 'NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCww'@;
put 'LDEsMTQsOC41M2ExOC41MSwxOC41MSwwLDAsMSwxMi4xMS0uMDdjMC0uMzIsMC0uNjUsMC0xaDBhMTIsMTIsMCwwLDEsMi42MiwzLjg1aDBxLS43My0uNDMtMS40OC0uNzhhMTguNCwxOC40LDAsMCwxLTMuMzksNy4zNywyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwu'@;
put 'NDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRIMjUuNTZhMTguODcsMTguODcsMCwwLDEtMS42MiwyLjUyLDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAs'@;
put 'MS0uNjEsMS41M0gyOC4xYTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjksMi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMz'@;
put 'LDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIsMi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01'@;
put 'LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41'@;
put 'OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCwwLDEsMTQsOC41M2ExOC41OSwxOC41OSwwLDAsMSw2LjM5LTFMMjMsM0ExNCwxNCwwLDAsMCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBBMTQsMTQsMCwwLDAsMzEuNzYsMTZDMzEuNzYsMTUu'@;
put 'OCwzMS43NCwxNS42LDMxLjczLDE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI2LDExLjY0YTE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4y'@;
put 'OCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE3LjI5LDE3LjI5LDAsMCwwLDEtMS41NGgtMS42QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlhMTcuMDgsMTcuMDgsMCwwLDAtNC44NC44OCwyLjI1LDIuMjUsMCwwLDEtLjQ3LDEuNzdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx'@;
put 'LjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNSwxMy4zNWE3LjU0LDcuNTQsMCwwLDEtMS41LjE1LDcuNDYsNy40NiwwLDAsMS0zLjI4LS43NiwxOC41OSwxOC41OSwwLDAsMS0yLjc4LDUuMTgsMi4zMywyLjMzLDAsMCwx'@;
put 'LC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4w'@;
put 'NmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdh'@;
put 'Mi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMyww'@;
put 'LS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU2LDE4LjU2LDAsMCwxLDguNjUtLjg3LDcuNDUsNy40NSwwLDAsMSwuNDEtNC41OUExNCwxNCwwLDAs'@;
put 'MCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBhMTQsMTQsMCwxLDAsMjcuNjgtNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzIsOS44N2EyLjI1LDIuMjUsMCwwLDEt'@;
put 'LjQ3LDEuNzcsMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcsMTcsMCwwLDAsMi42MS01LDcuNTIsNy41MiwwLDAsMS0yLjE2LTIuNjdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xy'@;
put 'U2hhcGVOZXR3b3JrU2V0dGluZ3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjhjLjU0LS4xNCwxLjA2LS4zMiwxLjU5LS41MXYtMS4yYTIuNzcsMi43NywwLDAsMSwuMDYtLjUxLDE3LjQ0LDE3LjQ0LDAsMCwxLTEuODIu'@;
put 'NjIsMi4yOCwyLjI4LDAsMCwwLTQuMjguNjNsLS40NSwwaDBhMTEuOTMsMTEuOTMsMCwwLDEtMi44OC03LjI3LDE3Ljc5LDE3Ljc5LDAsMCwxLDUtNC43MiwyLjIzLDIuMjMsMCwwLDAsMi4yOS41NiwxOC41MiwxOC41MiwwLDAsMCw0LjQ3LDUsMi43NCwyLjc0LDAsMCwxLC4yMS0uMjRsLjk1'@;
put 'LS45MWExNi45LDE2LjksMCwwLDEtNC4zNS00Ljc5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNGwuMTksMGgxLjU2YTE5LDE5LDAsMCwwLC45MS0yLjcyYy40My4xOS44'@;
put 'NC40MSwxLjI2LjY0YTExLjk0LDExLjk0LDAsMCwxLDEsNC4wOWwwLDBBMi43NywyLjc3LDAsMCwxLDMwLDE2YTIuNzMsMi43MywwLDAsMSwuNjguMUExNCwxNCwwLDEsMCwxNi4wOCwzMWEyLjcyLDIuNzIsMCwwLDEsMC0yQTExLjkzLDExLjkzLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1'@;
put 'YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCwwLDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAs'@;
put 'MCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwxOS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI1LDIxLjE5QTMuODQsMy44NCwwLDEsMCwyOC44OCwyNSwzLjg3LDMuODcsMCwwLDAsMjUsMjEuMTlabTAsNi4wOEEyLjI0LDIuMjQsMCwxLDEsMjcuMjgsMjUsMi4yNiwyLjI2LDAsMCwxLDI1LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMTcsMjQuMTRhMS4xNCwxLjE0LDAsMCwwLS43LTEuMWwtMS41Ni0uNDZxLS4xMS0uMzItLjI2LS42M2wuNzItMS4zM2ExLjE0LDEuMTQsMCwwLDAtLjIxLTEuMzRsLTEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAtMS4zNC0uMmwtMS4zNC43'@;
put 'MWE3LjI4LDcuMjgsMCwwLDAtLjY3LS4yOEwyNywxNi43MWExLjE0LDEuMTQsMCwwLDAtMS4wOC0uNzZIMjRhMS4xNCwxLjE0LDAsMCwwLTEuMDguOGwtLjQ0LDEuNDNhNy4zMiw3LjMyLDAsMCwwLS42OC4yOGwtMS4zMi0uN2ExLjE0LDEuMTQsMCwwLDAtMS4zMy4xOWwtMS4zNywxLjMxYTEu'@;
put 'MTQsMS4xNCwwLDAsMC0uMjEsMS4zNWwuNywxLjI4cS0uMTYuMzItLjI4LjY1TDE2LjU4LDIzYTEuMTMsMS4xMywwLDAsMC0uODEsMS4wOXYxLjg3QTEuMTQsMS4xNCwwLDAsMCwxNi41OSwyN2wxLjQ3LjQ0cS4xMi4zMi4yOC42NGwtLjcyLDEuMzVhMS4xNCwxLjE0LDAsMCwwLC4yLDEuMzVs'@;
put 'MS4zNCwxLjMyYTEuMTQsMS4xNCwwLDAsMCwxLjM0LjJsMS4zNy0uNzJxLjMxLjE0LjYzLjI2bC40NCwxLjQ3YTEuMTQsMS4xNCwwLDAsMCwxLjA5LjhoMS45QTEuMTQsMS4xNCwwLDAsMCwyNywzMy4zMWwuNDQtMS40N2MuMjEtLjA3LjQyLS4xNi42Mi0uMjVsMS4zOC43M2ExLjE0LDEuMTQs'@;
put 'MCwwLDAsMS4zMy0uMmwxLjM0LTEuMzJhMS4xNCwxLjE0LDAsMCwwLC4yMS0xLjM1bC0uNzMtMS4zNHEuMTQtLjMuMjUtLjZsMS41LS40NEExLjEzLDEuMTMsMCwwLDAsMzQuMTcsMjZabS0xLjYsMS41LTIsLjU4LS4xMi40MkE1LjU1LDUuNTUsMCwwLDEsMzAsMjcuNzNsLS4yMS4zOCwxLDEu'@;
put 'NzktLjg2Ljg0LTEuODItMS0uMzcuMmE1Ljc4LDUuNzgsMCwwLDEtMS4xMi40NmwtLjQyLjEyLS41OSwySDI0LjM4bC0uNTktMS45NS0uNDItLjEyQTUuODYsNS44NiwwLDAsMSwyMi4yNCwzMGwtLjM3LS4yLTEuODEsMS0uODYtLjg1LDEtMS44Mi0uMjItLjM4YTUuNiw1LjYsMCwwLDEtLjQ5'@;
put 'LTEuMTNsLS4xMy0uNDEtMS45NS0uNThWMjQuNDJsMS45NC0uNTguMTItLjQxYTUuNTMsNS41MywwLDAsMSwuNDktMS4xNGwuMjItLjM5LTEtMS43My44Ny0uODQsMS43Ny45NC4zOC0uMjFhNS44LDUuOCwwLDAsMSwxLjE3LS40OWwuNDEtLjEyLjU5LTEuOTFoMS4yM2wuNTgsMS45LjQxLjEy'@;
put 'YTUuNzksNS43OSwwLDAsMSwxLjE2LjQ4bC4zOC4yMSwxLjgtLjk1Ljg2Ljg1LTEsMS43Ny4yMS4zOGE1LjUzLDUuNTMsMCwwLDEsLjQ3LDEuMTNsLjEyLjQyLDEuOTMuNTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0zNCwyMy42MywzMiwyM2E3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjksMTcuODZhLjM3LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMWE3LDcsMCwwLDAtMS40My0uNjFsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4z'@;
put 'Ny4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxTDIwLDE3LjhhLjM3LjM3LDAsMCwwLS40NC4wN0wxOCwxOS4zMWEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LDcsMCwwLDAsMTguMzUsMjNsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCww'@;
put 'LDAsLjI2LjM1bDIsLjYxQTcsNywwLDAsMCwxOSwyOC4zN2wtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NGwxLjQ1LDEuNDVhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu'@;
put 'MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhBNyw3LDAsMCwwLDMxLjk1LDI3bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjI0QS4zNy4zNywwLDAsMCwzNCwy'@;
put 'My42M1ptLTguODMsNC43MkEzLjMzLDMuMzMsMCwxLDEsMjguNTMsMjUsMy4zMywzLjMzLDAsMCwxLDI1LjE5LDI4LjM0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44NSwyNy40NGEyLjI5LDIuMjksMCwwLDAs'@;
put 'MS43NC0xLjY4LDE5LjcxLDE5LjcxLDAsMCwwLDEuODktLjZWMjMuOTVhMiwyLDAsMCwxLC4wOS0uNTUsMTcuNDIsMTcuNDIsMCwwLDEtMi4xNy43OCwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEs'@;
put 'NS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNjUsNS4wOSwxLjkzLDEuOTMsMCwwLDEsLjIzLS4zMmwuODktLjg3YTE2Ljg5LDE2Ljg5LDAsMCwxLTQuNDktNC44OSwyLjI3LDIuMjcsMCwwLDAsLjM1LTEuMmMwLS4wNywwLS4xNCwwLS4yMkExNy42'@;
put 'OSwxNy42OSwwLDAsMSwyNSwxMWExNy40OSwxNy40OSwwLDAsMS0xLjE1LDMuMzUsMS45NCwxLjk0LDAsMCwxLC4zMS0uMDVoMS40NWExOS4wNiwxOS4wNiwwLDAsMCwuOS0yLjdjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTMsMTEuOTMsMCwwLDEsMSw0LjYzbDEtLjUxYTIsMiwwLDAsMSwu'@;
put 'OTItLjIzaC4wOEExNCwxNCwwLDEsMCwxNi40NCwzMWExLjk0LDEuOTQsMCwwLDEsLjEyLTEuNDZsLjI4LS41M2gtLjA3QTExLjkxLDExLjkxLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCww'@;
put 'LDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAsMCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwx'@;
put 'OS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMC43'@;
put 'OCw4LjQxQTIsMiwwLDAsMCwyOC44Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1pNMzIsMjdINFYxOS4wNkw3LjEzLDlIMjgu'@;
put 'ODdMMzIsMTkuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVj'@;
put 'dCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9'@;
put 'IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0'@;
put 'IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMywxNS40SDMwLjg2TDMyLDE5LjA2'@;
put 'VjI3SDRWMTkuMDZMNy4xMyw5SDE5LjU2bDEuMTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu'@;
put 'MjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyLjEyIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i'@;
put 'YWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIi'@;
put 'IHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40N2wtMS42NS01LjMyYTcuNDksNy40OSwwLDAsMS0yLC4zM0wzMiwxOS4wNlYyN0g0VjE5LjA2TDcuMTMsOWgxNmE3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCww'@;
put 'LS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5'@;
put 'PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAs'@;
put 'NS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW'@;
put 'MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMTNBMiwyLDAs'@;
put 'MCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW'@;
put 'MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMi4yNiwxMy4xNUE3LjQ5LDcuNDksMCwwLDEsMjIuNTcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNmEyLDIsMCwwLDAtLjA5LS41OVpNOC45MiwyNUg3'@;
put 'LjEyVjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMEgyMi4xVjIyaDEuOFptNSwwSDI3LjFWMjJoMS44Wk0zMSwxOS40SDVWMThIMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUm91dGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwx'@;
put 'NC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zOCwxNS40SDI4LjU0TDMwLjE1LDE3SDIyLjQ2YTEsMSwwLDEsMCwwLDJoNy42OWwtMi43MSwyLjY5YTEsMSwwLDAsMCwxLjQxLDEuNDJMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2wxLjE1LTEuMTYtLjEtLjE1QTMuNjgsMy42OCwwLDAsMSwxOSwxMFYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40'@;
put 'MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTQuODdsNS4xMS01LjE0'@;
put 'YTEsMSwwLDEsMC0xLjQyLTEuNDFMMTksMTFWMy4zM2ExLDEsMCwwLDAtMiwwVjExTDE0LjMxLDguMzJhMSwxLDAsMSwwLTEuNDIsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMTgsMS42N2ExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwxLjY3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1'@;
put 'LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEw'@;
put 'LjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44'@;
put 'LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44'@;
put 'MiwxNS4zOUgyOC42OEwzMSwxNy42N2wtNC4xOSw0LjA5YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMS41LTEuNDdIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTMtMS41MUwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDEsMSwxNSw5'@;
put 'LjkybDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2NC40OUEzLjY1LDMuNjUsMCwwLDEsMTksOS44OWw0LjIyLTcuMzFBMTYsMTYsMCwxLDAsMzQsMTcuNjcsMTYsMTYsMCwwLDAsMzMuODIsMTUuMzlabS0yMy41LDYuMzVhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQu'@;
put 'MDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUs'@;
put 'MjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy'@;
put 'MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4yMiwxMi43NkE3LjQ5LDcuNDksMCwwLDEsMjMuMzIsMi42YTE2LDE2LDAsMSwwLDkuOSwxMC4xN1pNMTMuODYsOS45MmEuOC44LDAsMCwxLDEuMTMsMGwyLjIxLDIuMTlWNS45M2EuOC44LDAsMCwxLDEuNiwwdjYuMThMMjEs'@;
put 'OS45MmEuOC44LDAsMSwxLDEuMTMsMS4xNEwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDAsMSwxMy44Niw5LjkyWk0xMC4zMiwyMS43NGEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAs'@;
put 'MS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAs'@;
put 'MCwxLDIyLjE0LDI1LjQxWm00LjY3LTMuNjZhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0yLjItMi4xNGEuOC44LDAsMSwxLDEuMTItMS4xNEwzMSwxNy42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVWTT0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBkPSJNMTEsNUgyNVY4aDJWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTBIMTd2Mmg4djZoMlYxMmgz'@;
put 'VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjEuODdMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djYuODVoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjE1LjQiIHdpZHRoPSIxLjk5IiBoZWlnaHQ9IjIuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNFYyNkgy'@;
put 'MlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMTB2MmgxLjU3QTMuNjcsMy42NywwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVoMFYyNkgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40'@;
put 'OSwwLDAsMSwzMCwxMy41Wk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMmg4djZoMlYxMi44N0E3'@;
put 'LjUyLDcuNTIsMCwwLDEsMjMuNjYsMTBIMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDI3VjVhMiwyLDAsMCwwLTItMkgxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxNy4xOWEyLDIsMCwwLDAtMiwydjEuNEgyMEEzLjYsMy42LDAsMCwxLDIzLjYsMTd2OEgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAs'@;
put 'MCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEyQTIsMiwwLDAsMCwzMCwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42aDIuNzJMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4xOSwxMGEyLDIs'@;
put 'MCwwLDAtMiwydjEuNEgxOUEzLjY4LDMuNjgsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjIxLDE1LjRBMy41NSwzLjU1LDAsMCwxLDIzLjYsMTd2OEgyMlYx'@;
put 'N2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDIyLjlBNy40NSw3LjQ1LDAsMCwxLDIz'@;
put 'LjEzLDNIMTFBMiwyLDAsMCwwLDksNXY4LjRoNC41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OSw3LjQ5LDAsMCwxLDIzLjY2LDEwSDE3LjE5YTIsMiwwLDAsMC0y'@;
put 'LDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIs'@;
put 'MiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVk1XQXBwPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIg'@;
put 'MjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMCA0IDIwIDggMjIgOCAyMiA2IDMwIDYgMzAgMTQgMjggMTQgMjggMTYgMzIgMTYgMzIgNCAyMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIx'@;
put 'MSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02'@;
put 'IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI4IDIyIDMwIDIyIDMwIDMwIDIyIDMwIDIyIDI4IDIwIDI4IDIwIDMyIDMyIDMyIDMyIDIwIDI4IDIwIDI4IDIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl'@;
put 'cnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRo'@;
put 'PSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmwwLS4xVjE3aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRl'@;
put 'ZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjIuNDUgNCAyMCA0IDIwIDggMjAuMTQgOCAyMi40NSA0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIx'@;
put 'NS40IiB3aWR0aD0iNCIgaGVpZ2h0PSIwLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29u'@;
put 'IHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50'@;
put 'cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0'@;
put 'IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDZoLjVhNy40OSw3LjQ5'@;
put 'LDAsMCwxLC4yOC0ySDIwVjhoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjE0SDI4djJoNFYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxMS41OGE3LjUzLDcuNTMsMCwwLDEtLjU4LS41OEgxOXY2aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC05LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ2VydGlmaWNh'@;
put 'dGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhINFY4SDMybDAsOC41NmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxVjhBMiwyLDAsMCwwLDMyLDZaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2'@;
put 'IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQt'@;
put 'MTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0i'@;
put 'MS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYs'@;
put 'Ni4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIN3YxLjZIMTkuMDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjEuMTZhOC40MSw4'@;
put 'LjQxLDAsMCwxLDIsMS44MXYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTls'@;
put 'LjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9Ijci'@;
put 'IHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIxNiIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAu'@;
put 'NjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2My4zNGE4LjQxLDgu'@;
put 'NDEsMCwwLDEsMiwxLjgxdi02QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI4VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0y'@;
put 'SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0TDIwLjQxLDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDMwSDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMzJhMiwyLDAsMCwxLDIsMlYxOC4zN2E4LjM0'@;
put 'LDguMzQsMCwwLDAtMTMuNDksOS43OWwtLjkzLDEuMTRaTTcsMTJ2MS42SDI0VjEyWm0wLDUuNkgxOFYxNkg3Wm0wLDdIMTdWMjNIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNTlhNi4zNyw2LjM3'@;
put 'LDAsMSwwLTEwLjc3LDQuNTlsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdBNi4zNCw2LjM0LDAsMCwwLDMzLjgzLDIzLjU5Wm0tMTAuNzQsMGE0LjM3LDQuMzcsMCwxLDEsNC4zNyw0LjMxQTQuMzUs'@;
put 'NC4zNSwwLDAsMSwyMy4xLDIzLjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2'@;
put 'LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjkuMjVhOC4zNiw4LjM2LDAsMCwxLDQuNzUsM3YtM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTkuMDcsMTMuNkg3VjEySDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRBOC4zNCw4LjM0LDAsMCwxLDI1LjY2LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAs'@;
put 'MCwxLDE5LjA3LDEzLjZaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww'@;
put 'LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjcuNDYsMTcuMjNhNi4zNiw2LjM2LDAsMCwwLTQuNCwxMWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN2E2LjM2LDYuMzYsMCwwLDAtNC40LTExWm0wLDEwLjY4YTQuMzEsNC4z'@;
put 'MSwwLDEsMSw0LjM3LTQuMzFBNC4zNSw0LjM1LDAsMCwxLDI3LjQ2LDI3LjkxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg0QTIsMiww'@;
put 'LDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMzQsMTguMzd2LTZBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThabTYtNEg3VjEySDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJT'@;
put 'aGFwZUFyY2hpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwxOEg2VjE0aDRhMywzLDAsMCwxLS42OC0xLjg3czAtLjA5LDAt'@;
put 'LjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNBMywzLDAsMCwxLDI2LDE0aDR2NEgyMmwtMiwySDMyVjEz'@;
put 'LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00'@;
put 'LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQxLDIwLjYsMTgsMjJsLTEuNDEtMS40TDE2LDIwSDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0y'@;
put 'VjIwSDIwWk0yMiwyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNhMywzLDAsMCwx'@;
put 'LS44OCwyLjEyTDIyLDE4SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yLDE0LjI1YTMsMywwLDAsMS0uODgtMi4xMnMwLS4wOSwwLS4xM0g1LjVBMS41LDEu'@;
put 'NSwwLDAsMCw0LDEzLjVWMThIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE5LjE4bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTEuNDFsLTQsMy45NVYzYTEsMSwwLDEsMC0yLDB2MTIuNGwtNC0zLjk1YTEs'@;
put 'MSwwLDAsMC0xLjQxLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVW5hcmNoaXZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkg3VjIySDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAs'@;
put 'Mi0yVjIySDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQsMjRhMSwxLDAsMCwwLDEsMWg2YTEsMSwwLDAsMCwwLTJIMTVBMSwxLDAsMCwwLDE0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMThINlYxNGg5VjEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNS43OEEzLDMsMCwwLDEsMTUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0zMC41LDEySDIxdjJoOXY0SDIxYTMsMywwLDAsMS0uNzgsMkgzMlYxMy41QTEuNSwxLjUsMCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDkuNTUsMTcsNS42'@;
put 'VjE4YTEsMSwwLDEsMCwyLDBWNS42bDQsMy45NWExLDEsMCwxLDAsMS40MS0xLjQyTDE4LDEuNzgsMTEuNjEsOC4xM0ExLDEsMCwwLDAsMTMsOS41NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxYTMs'@;
put 'MywwLDAsMS0yLjIyLTFINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjAuMjFBMywzLDAsMCwxLDE4LDIxWm00LDNhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwwLDEsMC0yaDZBMSwxLDAsMCwxLDIyLDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMkg1LjVBMS41LDEuNSwwLDAsMCw0LDEzLjVWMThIMTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2NkgzMlYxMy41QTEuNSwxLjUs'@;
put 'MCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEs'@;
put 'MSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNvbm5lY3Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDI4LjIzQTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxNC4xNWE2LjI1LDYu'@;
put 'MjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLDVIMjJhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFpNMTcuMDgsMjJIMTQuMTVhNC4xNyw0LjE3LDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00aDIuOTRaTTIyLDIySDE5VjE0aDNhNC4xNyw0'@;
put 'LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjIsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMkgxNC4xNWE2LjI1LDYuMjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiww'@;
put 'LDAsMCw2LjIyLDVIMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjIzLDE3QTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxOVYyNGgzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLTVIMzRWMTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRGlzY29ubmVjdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTcsNkE2LjIxLDYuMjEsMCwwLDAsNiwxMUgyLjEzdjJINmE2LjIzLDYuMjMsMCwwLDAsNi4yMSw1SDE3VjZaTTE1LjEsMTZI'@;
put 'MTIuMTdhNC4yLDQuMiwwLDAsMS00LjMxLTQsNC4xNyw0LjE3LDAsMCwxLDQuMzEtNEgxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTIsMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgx'@;
put 'OXYySDE0YTEsMSwwLDEsMCwwLDJoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAsNi4yMi01aDMuNzZabS0xMCw1SDIxVjIwaDIuOTRhNC4xNyw0LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjMuOTQsMjhaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMiw2YTYuMjEsNi4yMSwwLDAsMC02LjIxLDVIMnYySDUuODNBNi4yMyw2LjIzLDAsMCwwLDEyLDE4SDE3VjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc5LDIzSDMwLjE0YTYuMjUsNi4yNSwwLDAsMC02LjIxLTVIMTl2MkgxNGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAs'@;
put 'Ni4yMi01aDMuNjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTGluaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTcuNiwyNC4zMmwtMi40NiwyLjQ0YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwx'@;
put 'LDAtNS41NWw0LjY5LTQuNjVhNCw0LDAsMCwxLDUuNjIsMCwzLjg2LDMuODYsMCwwLDEsMSwxLjcxQTIsMiwwLDAsMCwyMS4xLDE4bDEuMjktMS4yOGE1Ljg5LDUuODksMCwwLDAtMS4xNS0xLjYyLDYsNiwwLDAsMC04LjQ0LDBMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2'@;
put 'LDAsMCwwLDguNDQsMGwzLjY1LTMuNjJjLS4xNywwLS4zMywwLS41LDBBOCw4LDAsMCwxLDE3LjYsMjQuMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42MSw3LjgyYTYsNiwwLDAsMC04LjQ0LDBsLTMu'@;
put 'NjUsMy42MmMuMTcsMCwuMzMsMCwuNDksMGgwYTgsOCwwLDAsMSwyLjEuMjhsMi40Ni0yLjQ0YTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC42OSw0LjY1YTQsNCwwLDAsMS01LjYyLDAsMy44NiwzLjg2LDAsMCwxLTEtMS43MSwyLDIsMCwwLDAtLjI4LjIzbC0x'@;
put 'LjI5LDEuMjhhNS44OSw1Ljg5LDAsMCwwLDEuMTUsMS42Miw2LDYsMCwwLDAsOC40NCwwbDQuNjktNC42NWE1LjkyLDUuOTIsMCwwLDAsMC04LjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVVbmxpbms9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsNSwzLjU5LDYuNDFsOSw5TDguMSwxOS43OWE1LjkxLDUuOTEsMCwwLDAsMCw4LjM5LDYsNiwwLDAsMCw4LjQ0LDBMMjEsMjMuNzhsOC42Myw4LjYzTDMxLDMxWk0xNS4xMywyNi43NmE0LDQsMCwwLDEtNS42MiwwLDMuOTIsMy45MiwwLDAsMSww'@;
put 'LTUuNTVMMTQsMTYuNzlsNS41OCw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNTMsOS4yMmE0LDQsMCwwLDEsNS42MiwwLDMuOTIsMy45MiwwLDAsMSwwLDUuNTVsLTQuNzksNC43NkwyMy43OCwy'@;
put 'MWw0Ljc5LTQuNzZhNS45Miw1LjkyLDAsMCwwLDAtOC4zOSw2LDYsMCwwLDAtOC40NCwwbC00Ljc2LDQuNzRMMTYuNzgsMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNsb3VkTmV0d29yaz0oMCxtLmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMzAuNzEsMTUuMTh2LTFBMTEuMjgsMTEuMjgsMCwwLDAsMTkuNTYsMi44M2gtLjExYTExLjI4LDExLjI4LDAsMCwwLTExLDguOTMsNy40Nyw3LjQ3LDAsMCwwLDAsMTQuOTRIMjkuMTNhNS44Niw1Ljg2LDAsMCwwLDEuNTgtMTEuNTJaTTI5LjEzLDI0LjdIOC40'@;
put 'NmE1LjQ3LDUuNDcsMCwxLDEsMC0xMC45NGgxLjY5bC4xMS0uODdhOS4yNyw5LjI3LDAsMCwxLDE4LjQ1LDEuM3YxLjI4YzAsLjA5LDAsLjE4LDAsLjI3bC0uMDcsMS4xNS45NC4xMWEzLjg2LDMuODYsMCwwLDEtLjQzLDcuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41OCwzMS4xOEgxOC44NXYtMi40aC0ydjIuNEg2LjA4YTEsMSwwLDAsMCwwLDJoMjMuNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYu'@;
put 'Q2xyU2hhcGVDbG91ZFNjYWxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjMyLDExLjExSDcuODRMOCwxMC4yNEE3LjE5LDcuMTksMCwwLDEsMTUuMDcsNGguMDdhNy4xNSw3LjE1LDAsMCwxLDQuNzEsMS44MywxMS4xLDExLjEsMCwwLDEsMy4wOS42NEE5LjE4LDkuMTgsMCwwLDAs'@;
put 'MTUuMTYsMmgtLjA5QTkuMiw5LjIsMCwwLDAsNi4xMyw5LjExLDYuMTUsNi4xNSwwLDAsMCwyLjMzLDE5Ljk1LDguMDksOC4wOSwwLDAsMSwzLDE3LjcxYTQuMTIsNC4xMiwwLDAsMS0uODEtMi40NEE0LjE2LDQuMTYsMCwwLDEsNi4zMiwxMS4xMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjQsMTYuOTFoMS41MkwxMiwxNmE3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjE3LDcuMTcsMCwwLDEsNS43LDIuOTIsMTEuMDUsMTEuMDUsMCwwLDEsMi43Mi43Nyw5LjIsOS4yLDAsMCwwLTgu'@;
put 'NC01LjY5aC0uMDlhOS4yLDkuMiwwLDAsMC04Ljk0LDcuMTIsNi4xNSw2LjE1LDAsMCwwLTMuNjQsMTEsOC4xMSw4LjExLDAsMCwxLC43OS0yLDQuMTQsNC4xNCwwLDAsMSwzLTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMi40MiwyNC40N3YtLjYyYTkuMTgsOS4xOCwwLDAsMC0xOC4xMy0yLjE2QTYuMTYsNi4xNiwwLDAsMCwxNC40OCwzNEgzMWE0Ljg4LDQuODgsMCwwLDAsMS40Ni05LjUzWk0zMSwzMkgxNC40OGE0LjE2LDQuMTYsMCwxLDEsMC04LjMySDE2bC4xMS0uODdhNy4xOSw3LjE5LDAs'@;
put 'MCwxLDcuMTItNi4yNWguMDdhNy4yMSw3LjIxLDAsMCwxLDcuMTIsNy4yNXYxYzAsLjA3LDAsLjEzLDAsLjJsLS4wNywxLjExLjk0LjExQTIuODgsMi44OCwwLDAsMSwzMSwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAnKSxGLkNs'@;
put 'clNoYXBlQ2xvdWRUcmFmZmljPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41NCwyMC44MmEuODguODgsMCwwLDAtLjg4LS44OEgyMC43NWwxLjEtMS4xQS44OC44OCwwLDAsMCwyMC42LDE3LjZsLTMuMjEsMy4yMkwyMC42LDI0YS44OC44OCwwLDEsMCwxLjI1LTEuMjRMMjAuNzYs'@;
put 'MjEuN2g0LjlBLjg4Ljg4LDAsMCwwLDI2LjU0LDIwLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMjcsMjEuN2EuODguODgsMCwxLDAsMC0xLjc2aC0uNThhLjg4Ljg4LDAsMSwwLDAsMS43NloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIxLDIwaC0uMDZhLjg1Ljg1LDAsMCwwLS44NS44OC45MS45MSwwLDAsMCwuOTEuODguODguODgsMCwxLDAsMC0xLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuNTksMTFhLjg4Ljg4LDAsMCwwLTEuMjUsMS4yNGwxLjEsMS4xSDI3LjUzYS44OC44OCwwLDEsMCwwLDEuNzZoNC45bC0xLjA5LDEuMDlhLjg4Ljg4LDAsMCwwLDEuMjUsMS4yNGwzLjIxLTMuMjJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC41LDE1LjA3YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuOSwxNC4yN2EuODUuODUsMCwwLDAtLjg1LS44OEgyMWEuODguODgsMCwxLDAsMCwxLjc2QS45MS45MSwwLDAsMCwyMS45LDE0LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMzAuMzYsMjMuNjVjMCwuMTMsMCwuMjYsMCwuMzlhMy43NywzLjc3LDAsMCwxLTMuNjIsMy44OUg3LjI4YTUuMzIsNS4zMiwwLDAsMS01LjEzLTUuNDhBNS4zMiw1LjMyLDAsMCwxLDcuMjgsMTdIOC45MUw5LDE2LjEyYTguOTIsOC45MiwwLDAsMSw4LjYyLThoLjA4YTgu'@;
put 'NDksOC40OSwwLDAsMSw2LjU2LDMuMjloMi4zN2ExMC41NSwxMC41NSwwLDAsMC04LjkxLTUuMjVoLS4xMUExMC44MiwxMC44MiwwLDAsMCw3LjIyLDE1YTcuMjgsNy4yOCwwLDAsMC03LDcuNDMsNy4yNyw3LjI3LDAsMCwwLDcuMDgsNy40M0gyNi43N0E1LjcyLDUuNzIsMCwwLDAsMzIuMzUs'@;
put 'MjRhMy43NywzLjc3LDAsMCwwLDAtLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEZXBsb3k9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAsMCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIgZD0iTTExLjU0LDEwLjczbC05LDUuMTdhMSwxLDAsMCwwLS41Ljg3djExYTEsMSwwLDAsMCwuNS44N2w5LDUuMTVhMSwxLDAsMCwwLDEsMGw5LTUuMTVhMSwxLDAsMCwwLC41LS44N3YtMTFhMSwxLDAsMCwwLS41LS44N2wtOS01LjE3QTEsMSwwLDAsMCwxMS41NCwxMC43M1pN'@;
put 'MTEsMzEuMDhsLTctNFYxOC40NGw3LDRaTTEyLDIxLDQuODEsMTYuODcsMTIsMTIuNzhsNy4yMSw0LjEyWm04LDYuMDktNyw0VjIyLjQ0bDctNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAs'@;
put 'MCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTIuNDYsMTAuNzNhMSwx'@;
put 'LDAsMCwwLTEsMGwtOC42OCw1TDEyLDIxbDkuMTktNS4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDI3LjczYTEsMSwwLDAsMCwuNS44N0wxMSwzMy40NnYtMTFMMiwxNy4yOFoiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xMywzMy40Nmw4LjUtNC44NmExLDEsMCwwLDAsLjUtLjg3VjE3LjI5bC05LDUuMTVaIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIZWxpeD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguODgsMTMuMDdhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDEsMSwxLDEuNTJMOS4zNywxMi45MkEuOS45LDAsMCwxLDguODgsMTMuMDdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEzLjI1LDE1LjExYS45LjksMCwwLDEtLjQ5LTEuNjZMMTgsMTAuMDhhLjkuOSwwLDEsMSwxLDEuNTJMMTMuNzQsMTVBLjkuOSwwLDAsMSwxMy4yNSwxNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTkuNzIsMzAuMjNhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDAsMSwxLDEuNTJMMjAuMiwzMC4wOUEuOS45LDAsMCwxLDE5LjcyLDMwLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOC45MiwyNS45NGEuOS45LDAsMCwxLS40OS0xLjY2bDUuMjUtMy4zN2EuOS45LDAsMSwxLDEsMS41MUwxOS40LDI1LjhBLjg5Ljg5LDAsMCwxLDE4LjkyLDI1Ljk0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMS41Niw1LjY5YTMuNTksMy41OSwwLDAsMSwuMTUsMy41M0wxOC44MywxNWgyLjI1bDIuNDMtNC44N2E1LjYxLDUuNjEsMCwwLDAtNS04LjE0SDEzLjI2bC0xLDJoNi4yMkEzLjYxLDMuNjEsMCwwLDEsMjEuNTYsNS42OVoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuOTEsMjAuNzhBNS41Myw1LjUzLDAsMCwwLDI3LjY2LDE3SDkuMzFhMy41NCwzLjU0LDAsMCwxLTMuNTYtMy42NywzLjYxLDMuNjEsMCwwLDEsLjQyLTEuNTRsNC4yNi04LjQ5YTEsMSww'@;
put 'LDEsMC0xLjc5LS45TDQuNCwxMC44NEE1LjY3LDUuNjcsMCwwLDAsNCwxNS4yMiw1LjUzLDUuNTMsMCwwLDAsOS4yOCwxOWg3LjZsLTMuNDQsNi44N2E1LjY0LDUuNjQsMCwwLDAsMS41LDYuOTJBNS4zOCw1LjM4LDAsMCwwLDE4LjQxLDM0aDUuMjVsMS0ySDE4LjQzYTMuNTgsMy41OCwwLDAs'@;
put 'MS0zLjIyLTUuMjFMMTkuMTEsMTloOC41NGEzLjQyLDMuNDIsMCwwLDEsMi4xNS43MSwzLjU3LDMuNTcsMCwwLDEsMSw0LjQzbC00LjEyLDguMjJhMSwxLDAsMSwwLDEuNzkuOWw0LjA2LTguMUE1LjY3LDUuNjcsMCwwLDAsMzIuOTEsMjAuNzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMTYsMTkuNjNBNS41NSw1LjU1LDAsMCwwLDI3LjQyLDE3SDEwLjA2YTQuMzYsNC4zNiwwLDAsMS0zLjY3LTIsNC4wNyw0LjA3LDAsMCwxLS4xOS00LjEzbDMuNjItNywxLjQyLDEuNjMtMi43NCw1LjMsOC44NC01LjY2'@;
put 'YS45MS45MSwwLDAsMSwxLDEuNTNMNy44NCwxMy4zOGEyLjEzLDIuMTMsMCwwLDAsLjI0LjUyLDIuMjgsMi4yOCwwLDAsMCwxLjY1LDFMMTguMTEsOS41YS45MS45MSwwLDAsMSwxLDEuNTJMMTMsMTQuOTRIMjAuOGwyLjQxLTQuODJhNS42LDUuNiwwLDAsMC01LTguMTJIOWExLDEsMCwwLDAt'@;
put 'LjkuNTZMMy44OCwxMC44OWE1LjYsNS42LDAsMCwwLDUsOC4xMmg3LjY1bC0zLjQzLDYuODdhNS42LDUuNiwwLDAsMCw1LDguMTJoOS4yOGExLDEsMCwwLDAsLjkzLS42NWw0LjE0LTguMjRBNS41OCw1LjU4LDAsMCwwLDMyLjE2LDE5LjYzWk0xNy43NSwyNS41N0EuOTEuOTEsMCwwLDEsMTgs'@;
put 'MjQuMzFsNi0zLjg4QS45MS45MSwwLDEsMSwyNSwyMmwtNiwzLjg4YS45MS45MSwwLDAsMS0xLjI2LS4yN1pNMjksMjQuMzRsLTksNS43OGEuOTEuOTEsMCwxLDEtMS0xLjUzbDktNS43OGEuOTEuOTEsMCwxLDEsMSwxLjUzWiIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRmxhc2s9KDAsbS5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQzLDI3LjI4LDIzLDE0Ljg0VjRoMWExLDEsMCwwLDAsMC0ySDEyYTEsMSwwLDAsMCwwLDJoMVYxNC44NEw0LjUxLDI3LjM2QTQuMjksNC4yOSwwLDAsMCw1LDMyLjgsNC4zOCw0LjM4LDAsMCwwLDguMTUsMzRIMjhhNC4yNCw0LjI0LDAsMCwwLDMu'@;
put 'NDItNi43MlpNMjkuODUsMzFhMi42MiwyLjYyLDAsMCwxLTIsMUg4YTIuMiwyLjIsMCwwLDEtMi4wNi0xLjQxLDIuNjgsMi42OCwwLDAsMSwuMjktMi4xN2wzLTQuNDQsMTQsMC0xLjMxLTJIMTAuNTdMMTUsMTUuNDZWNGg2VjE1LjQ2bDguODQsMTMuMDVBMi4yMywyLjIzLDAsMCwxLDI5Ljg1'@;
put 'LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDksMjcuNCwyMywxNC45NFY0aDFhMSwxLDAsMCwwLDAtMkgxMi4wOGExLDEsMCwwLDAsMCwySDEzVjE0Ljk0TDQuNTgsMjcuMzFhNC4zMSw0LjMxLDAs'@;
put 'MCwwLS43OCwzQTQuMjMsNC4yMywwLDAsMCw4LDM0SDI3Ljg2QTQuMzYsNC4zNiwwLDAsMCwzMSwzMi44LDQuMjMsNC4yMywwLDAsMCwzMS40OSwyNy40Wk0xNSwxNS40OVY0aDZWMTUuNDlMMjYuMTUsMjNIOS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+'@;
put 'XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42OCwxNC44MWE2Ljc2LDYuNzYsMCwxLDEsNi43Ni02Ljc1QTYuNzcsNi43NywwLDAsMSwxNC42OCwxNC44MVptMC0xMS41MWE0Ljc2LDQuNzYsMCwxLDAsNC43Niw0Ljc2'@;
put 'QTQuNzYsNC43NiwwLDAsMCwxNC42OCwzLjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40MiwzMS42OEEyLjE0LDIuMTQsMCwwLDEsMTUuOCwzMEg0VjI0LjIyYTE0LjgxLDE0LjgxLDAsMCwxLDExLjA5'@;
put 'LTQuNjhsLjcyLDBhMi4yLDIuMiwwLDAsMSwuNjItMS44NWwuMTItLjExYy0uNDcsMC0xLS4wNi0xLjQ2LS4wNkExNi40NywxNi40NywwLDAsMCwyLjIsMjMuMjZhMSwxLDAsMCwwLS4yLjZWMzBhMiwyLDAsMCwwLDIsMkgxNi43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODcsMTYuMjlhLjM3LjM3LDAsMCwxLC4xNSwwLC40Mi40MiwwLDAsMC0uMTUsMFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwy'@;
put 'My4zMmwtMi0uNjFhNy4yMSw3LjIxLDAsMCwwLS41OC0xLjQxbDEtMS44NkEuMzguMzgsMCwwLDAsMzIsMTlsLTEuNDUtMS40NWEuMzYuMzYsMCwwLDAtLjQ0LS4wN2wtMS44NCwxYTcuMTUsNy4xNSwwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM2LjM2LDAsMCwwLS4zNi0uMjRIMjMuODJhLjM2'@;
put 'LjM2LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNmwtMS44Mi0xYS4zNS4zNSwwLDAsMC0uNDMuMDdMMTcuNjksMTlhLjM4LjM4LDAsMCwwLS4wNi40NGwxLDEuODJBNi43Nyw2Ljc3LDAsMCwwLDE4LDIyLjY5bC0yLC42YS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNUEuMzUu'@;
put 'MzUsMCwwLDAsMTYsMjZsMiwuNjFhNyw3LDAsMCwwLC42LDEuNDFsLTEsMS45MWEuMzYuMzYsMCwwLDAsLjA2LjQzbDEuNDUsMS40NWEuMzguMzgsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA5LDcuMDksMCwwLDAsMS40LjU3bC42LDJhLjM4LjM4LDAsMCwwLC4zNS4yNmgyLjA1YS4zNy4zNyww'@;
put 'LDAsMCwuMzUtLjI2bC42MS0yLjA1YTYuOTIsNi45MiwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM2LjM2LDAsMCwwLC40My0uMDdMMzIsMzAuNEEuMzUuMzUsMCwwLDAsMzIsMzBsLTEtMS44OGE3LDcsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM2LjM2LDAsMCwwLC4yNi0uMzVWMjMuNjdBLjM2'@;
put 'LjM2LDAsMCwwLDMzLjY4LDIzLjMyWk0yNC44NSwyOGEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjMzQTMuMzQsMy4zNCwwLDAsMSwyNC44NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTQuNjciIGN5'@;
put 'PSI4LjMiIHI9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTYuNDQsMzEuODJhMi4xNSwyLjE1LDAsMCwxLS4zOC0yLjU1bC41My0xLTEuMDktLjMzQTIuMTQsMi4xNCwwLDAsMSwxNCwyNS44NFYyMy43OWEyLjE2'@;
put 'LDIuMTYsMCwwLDEsMS41My0yLjA3bDEuMDktLjMzLS41Mi0xYTIuMTcsMi4xNywwLDAsMSwuMzUtMi41MiwxOC45MiwxOC45MiwwLDAsMC0yLjMyLS4xNkExNS41OCwxNS41OCwwLDAsMCwyLDIzLjA3djcuNzVhMSwxLDAsMCwwLDEsMUgxNi40NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNywyMy40NmwtMi0uNmE2LjczLDYuNzMsMCwwLDAtLjU4LTEuNDJsMS0xLjg2YS4zNS4zNSwwLDAsMC0uMDctLjQzbC0xLjQ1LTEuNDZhLjM4LjM4LDAsMCwwLS40My0uMDdsLTEuODUsMWE3Ljc0LDcuNzQsMCww'@;
put 'LDAtMS40My0uNmwtLjYxLTJhLjM4LjM4LDAsMCwwLS4zNi0uMjVIMjMuODRhLjM4LjM4LDAsMCwwLS4zNS4yNmwtLjYsMmE2Ljg1LDYuODUsMCwwLDAtMS40NS42MWwtMS44MS0xYS4zOC4zOCwwLDAsMC0uNDQuMDZsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LjI0'@;
put 'LDcuMjQsMCwwLDAsMTgsMjIuODNsLTIsLjYxYS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNWEuMzYuMzYsMCwwLDAsLjI2LjM1bDIsLjYxYTcuMjksNy4yOSwwLDAsMCwuNiwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LjE2LDMyYS4zOC4zOCwwLDAsMCwuNDQuMDZsMS44Ny0x'@;
put 'YTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMi4wNWEuMzguMzgsMCwwLDAsLjM2LjI2aDIuMDVhLjM4LjM4LDAsMCwwLC4zNS0uMjZsLjYtMi4wNWE2LjY4LDYuNjgsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zOC4zOCwwLDAsMCwuNDQtLjA2TDMyLDMwLjU1YS4zOC4zOCwwLDAsMCwuMDYt'@;
put 'LjQ0bC0xLTEuODhhNi45Miw2LjkyLDAsMCwwLC41Ny0xLjM4bDItLjYxYS4zOS4zOSwwLDAsMCwuMjctLjM1VjIzLjgyQS40LjQsMCwwLDAsMzMuNywyMy40NlptLTguODMsNC43MmEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjM0QTMuMzQsMy4zNCwwLDAsMSwyNC44NywyOC4xOFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIYXJkRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDhhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y'@;
put 'Wk0zMiwyOEg0VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS44OCwxOC4wOGEzLjU5'@;
put 'LDMuNTksMCwxLDAsMy41OS0zLjU5LDMuODQsMy44NCwwLDAsMC0uOTEuMTNMMTUsMTYuMTZhMi4wOCwyLjA4LDAsMCwxLC41LS4wNywyLDIsMCwxLDEtMiwyLDEuNjQsMS42NCwwLDAsMSwuMDgtLjVMMTIsMTcuMTZBMy41MywzLjUzLDAsMCwwLDExLjg4LDE4LjA4WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNDcsMjUuNzNhNy42Niw3LjY2LDAsMCwxLTcuNjUtNy42NSw3LjU1LDcuNTUsMCwwLDEsLjI3LTJMNi41NCwxNS43YTkuMjQsOS4yNCwwLDAsMCwxNy44LDQuOTVIMjIuNjZBNy42NCw3'@;
put 'LjY0LDAsMCwxLDE1LjQ3LDI1LjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjIsMTcuODNhLjguOCwwLDAsMC0uOC0uOEgyNC42NmE5LjI2LDkuMjYsMCwwLDAtOS4xOS04LjIsOS4zNiw5LjM2LDAs'@;
put 'MCwwLTIuMzguMzJsLjQyLDEuNTRhNy44Niw3Ljg2LDAsMCwxLDItLjI2QTcuNjYsNy42NiwwLDAsMSwyMywxN0gyMC45MmEuOC44LDAsMCwwLDAsMS42aDYuNUEuOC44LDAsMCwwLDI4LjIyLDE3LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEyLDE3LjE2bDEuNTQuNDJhMS42NCwxLjY0LDAsMCwwLS4wOC41LDIsMiwwLDEsMCwyLTIsMi4wOCwyLjA4LDAsMCwwLS41'@;
put 'LjA3bC0uNDEtMS41NGEzLjg0LDMuODQsMCwwLDEsLjkxLS4xMywzLjU5LDMuNTksMCwxLDEtMy41OSwzLjU5QTMuNTMsMy41MywwLDAsMSwxMiwxNy4xNlpNNS4zMSw4QTEuMjUsMS4yNSwwLDEsMSw0LjA2LDkuMjUsMS4yNSwxLjI1LDAsMCwxLDUuMzEsOFptMCwyMC4wNmExLjI1LDEuMjUs'@;
put 'MCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSw1LjMxLDI4LjA2Wm0xMC4xNi0uNzNBOS4yMiw5LjIyLDAsMCwxLDYuNTQsMTUuN2wxLjU1LjQxYTcuNTUsNy41NSwwLDAsMC0uMjcsMiw3LjY0LDcuNjQsMCwwLDAsMTQuODQsMi41N2gxLjY4QTkuMjUsOS4yNSwwLDAsMSwxNS40Nywy'@;
put 'Ny4zM1ptMTItOC43aC02LjVhLjguOCwwLDAsMSwwLTEuNkgyM2E3LjY2LDcuNjYsMCwwLDAtNy41Ny02LjYsNy44Niw3Ljg2LDAsMCwwLTIsLjI2bC0uNDItMS41NGE5LjM2LDkuMzYsMCwwLDEsMi4zOC0uMzJBOS4yNiw5LjI2LDAsMCwxLDI0LjY2LDE3aDIuNzZhLjguOCwwLDAsMSwwLDEu'@;
put 'NlptMy4zOSw5LjQzYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDI4LjA2Wm0wLTE3LjU2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDEwLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlSGFyZERyaXZlRGlza3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDUuNzRBMS43NCwxLjc0LDAsMCwwLDI0LjI2LDRIMy43NEExLjc0LDEuNzQsMCwwLDAsMiw1Ljc0VjIwLjI2QTEuNzQsMS43NCwwLDAsMCwzLjc0LDIySDRW'@;
put 'NkgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2'@;
put 'SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yNiwxMkgxMS43NEExLjc0LDEuNzQsMCwwLDAsMTAsMTMuNzRWMjguMjZBMS43NCwxLjc0LDAsMCwwLDExLjc0LDMwSDMyLjI2QTEuNzQsMS43'@;
put 'NCwwLDAsMCwzNCwyOC4yNlYxMy43NEExLjc0LDEuNzQsMCwwLDAsMzIuMjYsMTJaTTMyLDI4SDEyVjE0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsMjMuNjhhMi42NCwyLjY0LDAsMSwwLTIu'@;
put 'Ny0yLjYzQTIuNjcsMi42NywwLDAsMCwxOS45NCwyMy42OFptMC0zLjg3YTEuMjQsMS4yNCwwLDEsMS0xLjI5LDEuMjRBMS4yNywxLjI3LDAsMCwxLDE5Ljk0LDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMTkuOTQsMTYuMjJhNC45Myw0LjkzLDAsMCwxLDQuOTUsNC4zNUgyMy43MVYyMmg0LjQxYS43LjcsMCwwLDAsMC0xLjRIMjYuMzFhNi4zMyw2LjMzLDAsMCwwLTYuMzctNS43NSw2LjU4LDYuNTgsMCwwLDAtMS40OC4xN2wuMzUsMS4zN0E0LjczLDQuNzMsMCwwLDEsMTkuOTQsMTYuMjJa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyNy4yN2E2LjQyLDYuNDIsMCwwLDAsNS42Ny0zLjM1SDIzLjkzYTUsNSwwLDAsMS00LDEuOTUsNC45MSw0LjkxLDAsMCwxLTUtNC44Miw1LjE2LDUuMTYs'@;
put 'MCwwLDEsLjA4LS43OUwxMy42MywyMGE3LDcsMCwwLDAtLjA5LDFBNi4zMiw2LjMyLDAsMCwwLDE5Ljk0LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQu'@;
put 'MjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCw5Ljc0QTEuNzQsMS43NCwwLDAsMCwyOC4y'@;
put 'Niw4SDcuNzRBMS43NCwxLjc0LDAsMCwwLDYsOS43NFYyNC4yNkExLjc0LDEuNzQsMCwwLDAsNy43NCwyNkg4VjEwSDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS42MiwyMi42QTEuNTUsMS41NSwwLDEsMCwx'@;
put 'OCwyMS4wNSwxLjYsMS42LDAsMCwwLDE5LjYyLDIyLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEu'@;
put 'NzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMTkuNjIsMTcuNzRhMy4zMSwzLjMxLDAsMSwxLTMuMzgsMy4zMUEzLjM1LDMuMzUsMCwwLDEsMTkuNjIsMTcuNzRabTAsMTEuMTNhNy45NCw3Ljk0LDAsMCwxLTgtNy44'@;
put 'Miw3LjgzLDcuODMsMCwwLDEsLjExLTEuMjlsMS43NS4zYTUuMzYsNS4zNiwwLDAsMC0uMTEsMSw2LjE4LDYuMTgsMCwwLDAsNi4yOCw2LjA2LDYuMzUsNi4zNSwwLDAsMCw1LTIuNDZoMi4xQTguMDYsOC4wNiwwLDAsMSwxOS42MiwyOC44N1pNMjkuODksMjIuMkgyNC4zNlYyMC40NGgxLjQ4'@;
put 'QTYuMTksNi4xOSwwLDAsMCwxOS42MiwxNWE2LjQ4LDYuNDgsMCwwLDAtMS40MS4xNmwtLjQ1LTEuN2E4LjE2LDguMTYsMCwwLDEsMS44Ni0uMjIsOCw4LDAsMCwxLDgsNy4yMWgyLjI2YS44OC44OCwwLDAsMSwwLDEuNzZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00'@;
put 'IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTlZNZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjJWMTRhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkgyNUEyLDIsMCwwLDAsMjcsMjJaTTExLDE0SDI1djhIMTFaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI1LjAxIiB5PSI2'@;
put 'IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LjgsOEgxNi44N1Y2aC0xMUw3Ljc4LDQuMDhhMSwxLDAsMCwwLDAtMS40MiwxLDEsMCwwLDAtMS40MSwwTDIsNyw2LjM3'@;
put 'LDExLjRhMSwxLDAsMCwwLDEuNDEsMCwxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuNjEsMjQuNjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQyTDMwLjEsMjhI'@;
put 'MTl2MkgzMC4ybC0yLDJhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsLjcuMjksMSwxLDAsMCwwLC43MS0uMjlMMzQsMjkuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSIyOCIgd2lkdGg9IjQi'@;
put 'IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSIyOCIgd2lkdGg9IjEuOTciIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAg'@;
put 'ICAgICcpLEYuQ2xyU2hhcGVTU0Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDE4LjYyYzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJzLS41MywxLjA5LTEuNTUsMS4wOWE0LDQsMCwwLDEt'@;
put 'Mi43MS0xLjExbC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MnMtMS4xNS0yLjA1LTIuODctMi40NGMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDEwLDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMUE0LjU4'@;
put 'LDQuNTgsMCwwLDAsMTAsMTMuNjljLTEuNzQsMC0zLDEuMDUtMywyLjQ5UzguMjYsMTguMjIsMTAsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44MywyMC45M2E0LDQsMCwwLDEtMi43MS0xLjEx'@;
put 'bC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MlMxOS43MywxNy42NSwxOCwxNy4yNmMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDE3LjQ4LDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMWE0LjU2LDQuNTYs'@;
put 'MCwwLDAtMy4xMi0xLjE1Yy0xLjczLDAtMywxLjA1LTMsMi40OXMxLjE5LDIsMi44OSwyLjQ0YzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJTMTguODUsMjAuOTMsMTcuODMsMjAuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0yOS45LDE4YzAtMi40MS0xLjkyLTQuMTItNC42NC00LjEyaC0yLjl2OC4yNGgyLjlDMjgsMjIuMDgsMjkuOSwyMC4zNywyOS45LDE4Wm0tNi0yLjc2aDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC04IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk01LjIxLDhBMS4yNSwxLjI1LDAsMSwxLDQsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4yMSw4Wm0w'@;
put 'LDIwYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMjEsMjhabTUuMDYtNS43OGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIu'@;
put 'ODktLjg5LTIuODktMi40NHMxLjIyLTIuNDksMy0yLjQ5YTQuNTgsNC41OCwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFBMy42OCwzLjY4LDAsMCwwLDEwLDE1YTEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRT'@;
put 'MTIuMjQsMjIuMjIsMTAuMjcsMjIuMjJabTcuNTEsMGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIuODktLjg5LTIuODktMi40NHMxLjIzLTIuNDksMy0yLjQ5'@;
put 'YTQuNTYsNC41NiwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFhMy42OCwzLjY4LDAsMCwwLTIuMzctMSwxLjI1LDEuMjUsMCwwLDAtMS4zOSwxLjA4YzAsLjY3LjYxLjkxLDEuOTIsMS4yMSwxLjcyLjM5LDIuODcuOTQsMi44NywyLjQ0UzE5Ljc1LDIyLjIyLDE3Ljc4LDIyLjIyWm00LjU4LS4x'@;
put 'NFYxMy44NGgyLjljMi43MiwwLDQuNjQsMS43MSw0LjY0LDQuMTJTMjgsMjIuMDgsMjUuMjYsMjIuMDhaTTMwLjY5LDI4YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjY5LDI4Wm0wLTE3LjVhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUs'@;
put 'MCwwLDEsMzAuNjksMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMTUuMmgxLjU2YTIuNzcsMi43NywwLDEsMSwwLDUuNTNIMjMuODZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQmx1ZXRvb3RoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi42NCwyNS4yNywxOSwxNy41MywxOSwzLDI1LjIxLDkuNGwtNS42NSw1Ljc5TDIxLDE2LjYybDUuNjgtNS44MmEyLDIsMCwwLDAsMC0yLjc4TDIwLjQ4LDEuN0EyLjA4'@;
put 'LDIuMDgsMCwwLDAsMTguODUsMSwyLDIsMCwwLDAsMTcsM1YxNS4zOEwxMC4wNSw4LjI3QTEsMSwwLDAsMCw4LjYyLDkuNjZMMTYuNzksMTgsOS4wNiwyNmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzM2EyLjA3LDIuMDcsMCww'@;
put 'LDAsLjcxLDEuNjJBMiwyLDAsMCwwLDE5LDM1YTEuOTQsMS45NCwwLDAsMCwxLjQyLS42bDYuMjMtNi4zOEEyLDIsMCwwLDAsMjYuNjQsMjUuMjdaTTE5LDMzLjA1VjIwLjI5bDYuMjEsNi4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICA8cGF0'@;
put 'aCBkPSJNMjYuNTIsMjQuNTJsLTUuNjUtNS44My0xLjQ2LTEuNXYtMTJMMjMuNzksOS43bC0zLjYsMy43MSwyLjI0LDIuMjksNC4wOS00LjIyYTIuNTQsMi41NCwwLDAsMCwwLTMuNTZMMjAuNTcsMS43OEEyLjU0LDIuNTQsMCwwLDAsMTYuMiwzLjU1VjEzLjg2bC01LjUzLTUuN2ExLjYsMS42'@;
put 'LDAsMSwwLTIuMywyLjIzTDE1Ljc1LDE4bC03LDcuMTlhMS42LDEuNiwwLDAsMCwwLDIuMjYsMS42MywxLjYzLDAsMCwwLDEuMTIuNDUsMS41OCwxLjU4LDAsMCwwLDEuMTUtLjQ5bDUuMTEtNS4yN1YzMi40NWEyLjUzLDIuNTMsMCwwLDAsMS41OSwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUu'@;
put 'MTksMi41NiwyLjU2LDAsMCwwLDEuODMtLjc3bDUuOTUtNi4xNUEyLjU0LDIuNTQsMCwwLDAsMjYuNTIsMjQuNTJaTTE5LjQsMzAuODNWMjEuNzdsNC4zOSw0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPSgw'@;
put 'LG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwzLDI1LjIyLDkuNGwtNS42Niw1LjhMMjEsMTYuNjNsNS42OC01LjgzYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIsMiwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzdjExLjRsMiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuNzcsNSwzLjM2LDYuNDIsMTUuODksMTksOS4wNiwyNmExLDEsMCwwLDAsLjcxLDEuNywxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzMi45NGEyLjA4LDIuMDgsMCwwLDAsLjcxLDEuNjNBMiwyLDAsMCwwLDE5LDM1YTIsMiwwLDAs'@;
put 'MCwxLjQyLS42bDUuNDEtNS41NCwzLjU0LDMuNTNMMzAuNzcsMzFaTTE5LDMzLjA1di0xMWw1LjQxLDUuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTkuMzEsNS4xNywyMy43LDkuN2wtMy41OSwzLjcxLDIuMjQsMi4yOSw0LjA5'@;
put 'LTQuMjJhMi41NiwyLjU2LDAsMCwwLDAtMy41NmwtNi02LjE0YTIuNTEsMi41MSwwLDAsMC0yLjc3LS41OSwyLjU0LDIuNTQsMCwwLDAtMS42LDIuMzZ2MTBsMy4yMSwzLjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC41LDUsMy4wOSw2'@;
put 'LjQyLDE1LjE3LDE4LjUxLDguNywyNS4xOUExLjYsMS42LDAsMCwwLDkuODUsMjcuOSwxLjU3LDEuNTcsMCwwLDAsMTEsMjcuNDFsNS4xMS01LjI3VjMyLjQ1YTIuNTQsMi41NCwwLDAsMCwxLjYsMi4zNiwyLjQ0LDIuNDQsMCwwLDAsLjk1LjE5LDIuNTUsMi41NSwwLDAsMCwxLjgyLS43N2w1'@;
put 'LjEyLTUuMjksMy40OSwzLjQ4TDMwLjUsMzFaTTE5LjgxLDMwLjgzVjIyLjY1bDQsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVByb2Nlc3NPblZNPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40OSwyNi4yOGExLDEsMCww'@;
put 'LDAtMS4yLS43bC0yLjQ5LjY3YTE0LjIzLDE0LjIzLDAsMCwwLDIuNC02Ljc1QTE0LjQ4LDE0LjQ4LDAsMCwwLDI3LjM3LDcuMzUsMSwxLDAsMCwwLDI2LDcuNDRhMSwxLDAsMCwwLC4wOSwxLjQxLDEyLjQ1LDEyLjQ1LDAsMCwxLDQuMTYsMTAuNDYsMTIuMTksMTIuMTksMCwwLDEtMiw1Ljc0'@;
put 'TDI4LDIyLjU0YTEsMSwwLDEsMC0xLjk1LjE2bC41LDYuNDQsNi4yNS0xLjY2QTEsMSwwLDAsMCwzMy40OSwyNi4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjMxLDE3LjA4YTEuMDYsMS4wNiwwLDAsMCwuNDQuMTYsMSwxLDAs'@;
put 'MCwwLDEuMTItLjg1QTEyLjIxLDEyLjIxLDAsMCwxLDE4LjY5LDUuODRMMTYuNDUsNy4zN2ExLDEsMCwwLDAsLjQ3LDEuNzlBMSwxLDAsMCwwLDE3LjU2LDlsNS4zMy0zLjY2TDE4LjMzLjc2YTEsMSwwLDEsMC0xLjM5LDEuMzhsMS43LDEuN0ExNC4yLDE0LjIsMCwwLDAsMy44OSwxNi4xMiwx'@;
put 'LDEsMCwwLDAsNC4zMSwxNy4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43MywyOS45M2ExMiwxMiwwLDAsMS00Ljg0LjUxLDEyLjMsMTIuMywwLDAsMS05LjU3LTYuM2wyLjQ5LjkzYTEsMSwwLDAsMCwuNjktMS44NGwtNC41'@;
put 'OS0xLjdoMEw0LjQ0LDIxLDMuMzMsMjcuMzVhMSwxLDAsMCwwLC43OSwxLjEzbC4xNywwYTEsMSwwLDAsMCwxLS44MWwuNDItMi40YTE0LjMsMTQuMywwLDAsMCwxMSw3LjE0LDEzLjkxLDEzLjkxLDAsMCwwLDUuNjMtLjYsMSwxLDAsMCwwLS42LTEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxM0gxNGExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTRBMSwxLDAsMCwwLDIyLDEzWm0tMSw4SDE1VjE1aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIgLz4nKSxGLkNsclNoYXBlQXNzaWduVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNy40Niw3LjQ2LDAsMSwwLTcuNDUtNy40NkE3LjQ2LDcuNDYsMCwwLDAsMTgsMTdaTTE4LDQuMDdhNS40Niw1LjQ2LDAsMSwxLTUuNDUsNS40NUE1LjQ2LDUuNDYsMCwwLDEsMTgs'@;
put 'NC4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxLjg5VjI1Ljc3YTE2LjEzLDE2LjEzLDAsMCwxLDEyLTUsMTYuNjEsMTYuNjEsMCwwLDEsOC43MSwyLjMzbDEuMzUtMS41MUExOC41MywxOC41MywwLDAsMCwxOCwxOC43NCwx'@;
put 'Ny43LDE3LjcsMCwwLDAsNC4yMSwyNC44YTEsMSwwLDAsMC0uMjEuNnY2LjQ5QTIuMDYsMi4wNiwwLDAsMCw2LDM0SDE4LjM5bC0xLjktMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMS44OSwzMCwzMkgyNi44NWwtMS44LDJI'@;
put 'MzBhMi4wNiwyLjA2LDAsMCwwLDItMi4wN1YyNi4ybC0yLDIuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzQuNzYsMTguNjJhMSwxLDAsMCwwLTEuNDEuMDhsLTExLjYyLDEzLTUuMi01LjU5QTEsMSwwLDAsMCwxNS4xMiwyNmEx'@;
put 'LDEsMCwwLDAtLjA2LDEuNDJsNi42OSw3LjJMMzQuODQsMjBBMSwxLDAsMCwwLDM0Ljc2LDE4LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxMC4zNiIgcj0iNi44MSIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTIsMjYuNjVhMi44LDIuOCwwLDAsMSw0Ljg1LTEuOEwyMC43MSwyOWw2Ljg0LTcuNjNBMTYuODEsMTYuODEsMCwwLDAsMTgsMTguNTUsMTYuMTMsMTYuMTMsMCwwLDAsNS41LDI0YTEsMSwwLDAsMC0uMi42MVYzMGEyLDIsMCwwLDAsMS45'@;
put 'NCwyaDguNTdsLTMuMDctMy4zQTIuODEsMi44MSwwLDAsMSwxMiwyNi42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI4Ljc2LDMyYTIsMiwwLDAsMCwxLjk0LTJWMjYuMjRMMjUuNTcsMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy43NywxOC42MmExLDEsMCwwLDAtMS40Mi4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE0LjEyLDI2YTEsMSwwLDAsMCwwLDEuNDJsNi42OCw3LjJMMzMuODQsMjBBMSwxLDAsMCwwLDMzLjc3LDE4LjYyWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQXRvbT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTQuMDVhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMTQuMDVabTAsNi40NGEyLjQyLDIuNDIsMCwxLDEsMi40Mi0yLjQyQTIuNDIsMi40MiwwLDAs'@;
put 'MSwxOCwyMC40OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNC4yMywxMS43MWEzOS4xNCwzOS4xNCwwLDAsMC00LjU3LTMuOTIsMjIuODYsMjIuODYsMCwwLDEsMy40OC0xLjcyYy4zMi0uMTIuNjItLjIxLjkyLS4zYTIuMjgsMi4y'@;
put 'OCwwLDAsMCwzLjgxLS40NiwzLjMxLDMuMzEsMCwwLDEsMS45Mi44NGMxLjE5LDEuMTksMS4yMiwzLjU5LjEsNi41OC40OS42NS45NCwxLjMxLDEuMzUsMiwuMTctLjQuMzUtLjc5LjQ5LTEuMTgsMS40Ny0zLjg1LDEuMjgtNy0uNTMtOC43OGE1LjI5LDUuMjksMCwwLDAtMy4zMy0xLjQ0LDIu'@;
put 'MjksMi4yOSwwLDAsMC00LjMxLjU0Yy0uMzcuMTEtLjc0LjIyLTEuMTMuMzdhMjUuNzksMjUuNzksMCwwLDAtNC41NywyLjM1QTI2LjIxLDI2LjIxLDAsMCwwLDEzLjI4LDQuMmMtMy44NS0xLjQ2LTctMS4yOC04Ljc3LjUzQzIuODUsNi40LDIuNTgsOS4xNywzLjY4LDEyLjU5YTIuMjgsMi4y'@;
put 'OCwwLDAsMCwxLjU5LDMuNjdjLjMyLjYxLjY3LDEuMjIsMS4wNiwxLjgyQTI1LjU0LDI1LjU0LDAsMCwwLDQsMjIuNjZjLTEuNDcsMy44NC0xLjI4LDcsLjUzLDguNzdhNS42Myw1LjYzLDAsMCwwLDQuMTIsMS41MSwxMy4zNCwxMy4zNCwwLDAsMCw0LjY1LTEsMjYuMjEsMjYuMjEsMCwwLDAs'@;
put 'NC41OC0yLjM1QTI1Ljc5LDI1Ljc5LDAsMCwwLDIyLjQzLDMyYTE0LjE2LDE0LjE2LDAsMCwwLDMuNjUuOUEyLjMsMi4zLDAsMCwwLDMwLjQ2LDMyYTQuNTUsNC41NSwwLDAsMCwuNzQtLjU3YzEuODEtMS44MSwyLTQuOTMuNTMtOC43N0EzMi42OCwzMi42OCwwLDAsMCwyNC4yMywxMS43MVpN'@;
put 'MTIuNTcsMzAuMDljLTMsMS4xNS01LjQ1LDEuMTMtNi42NS0uMDhzLTEuMjMtMy42Mi0uMDctNi42NGEyMi43NywyMi43NywwLDAsMSwxLjcxLTMuNDgsNDAuMTksNDAuMTksMCwwLDAsMy45Miw0LjU2Yy40My40My44Ny44NSwxLjMxLDEuMjVxLjktLjQ2LDEuODMtMS4wNWMtLjU4LS41Mi0x'@;
put 'LjE2LTEtMS43Mi0xLjYxYTM0LDM0LDAsMCwxLTUuNzQtNy40N0EyLjI5LDIuMjksMCwwLDAsNS41LDExLjY5aDBjLS43NS0yLjUtLjYyLTQuNDkuNDMtNS41NGEzLjcyLDMuNzIsMCwwLDEsMi43Mi0uOTIsMTEuNCwxMS40LDAsMCwxLDMuOTMuODQsMjIuODYsMjIuODYsMCwwLDEsMy40OCwx'@;
put 'LjcyLDM5LjE0LDM5LjE0LDAsMCwwLTQuNTcsMy45MmMtLjQ0LjQ0LS44Ny45LTEuMjksMS4zNmEyMC4yNywyMC4yNywwLDAsMCwxLDEuODVjLjU0LS42MSwxLjA5LTEuMjEsMS42OC0xLjhhMzYuMzMsMzYuMzMsMCwwLDEsNS00LjE3LDM2Ljg4LDM2Ljg4LDAsMCwxLDQuOTUsNC4xNywzNi4y'@;
put 'NiwzNi4yNiwwLDAsMSw0LjE3LDUsMzcsMzcsMCwwLDEtNC4xNyw1QTMwLjY4LDMwLjY4LDAsMCwxLDEyLjU3LDMwLjA5Wk0yOS43OSwzMGwtLjE2LjEzYTIuMjcsMi4yNywwLDAsMC0zLjUuNzIsMTIuNTcsMTIuNTcsMCwwLDEtMy0uNzcsMjIsMjIsMCwwLDEtMy40OC0xLjcyLDM5LjE0LDM5'@;
put 'LjE0LDAsMCwwLDQuNTctMy45MiwzOC4yNiwzOC4yNiwwLDAsMCwzLjkyLTQuNTYsMjIuODgsMjIuODgsMCwwLDEsMS43MiwzLjQ4QzMxLDI2LjM5LDMxLDI4LjgxLDI5Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LjIz'@;
put 'LDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1'@;
put 'Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVB'@;
put 'MjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40'@;
put 'NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCww'@;
put 'LDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAs'@;
put 'MCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIu'@;
put 'NS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCww'@;
put 'LDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5'@;
put 'Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMu'@;
put 'NDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE3Ljk5IiBjeT0iMTguMDciIHI9IjMuMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIuNjYgMy4xMSkgcm90YXRlKC05LjIyKSIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFyQ29kZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw3QTEsMSwwLDAsMCw0LDhWMzBhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSw3QTEsMSwwLDAsMCw4LDhWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs'@;
put 'MCwyLDBWOEExLDEsMCwwLDAsMTMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxNyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDIxLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs'@;
put 'MCwyLDBWOEExLDEsMCwwLDAsMjUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyOSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTMzLDdhMSwxLDAsMCwwLTEsMVYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDMzLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz4nKSxGLkNsclNoYXBlQ2REdmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi4zMywxOGE0LjQ2LDQuNDYs'@;
put 'MCwxLDAtNC40NSw0LjQ2QTQuNDYsNC40NiwwLDAsMCwyMi4zMywxOFpNMTcuODgsMjAuOUEyLjg2LDIuODYsMCwxLDEsMjAuNzMsMTgsMi44NiwyLjg2LDAsMCwxLDE3Ljg4LDIwLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTcu'@;
put 'ODgsNy40M0gxOFY1Ljg0aC0uMTJBMTIuMjEsMTIuMjEsMCwwLDAsNS42OCwxNy43NWgxLjZBMTAuNjEsMTAuNjEsMCwwLDEsMTcuODgsNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4wOCwxOEgyOC40OXYwQTEwLjYxLDEw'@;
put 'LjYxLDAsMCwxLDE4LjI1LDI4LjYzdjEuNkExMi4yMiwxMi4yMiwwLDAsMCwzMC4wOSwxOFMzMC4wOCwxOCwzMC4wOCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxMVY5LjQ0aC0uMTJhOC42Miw4LjYyLDAsMCwwLTguNiw4'@;
put 'LjMyaDEuNmE3LDcsMCwwLDEsNy02LjcyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE4LjI1LDI1djEuNkE4LjYxLDguNjEsMCwwLDAsMjYuNDgsMTh2MGgtMS42djBBNyw3LDAsMCwxLDE4LjI1LDI1WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE4LjE3LDEuOTJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTguMTcsMS45MlpNMjYuMjMsMThoMS41NGE5LjYxLDkuNjEsMCwwLDEtOS42LDkuNTNIMThWMjZoLjE3QTguMDcsOC4wNywwLDAsMCwyNi4yMywx'@;
put 'OFpNNi4wNSwxOEg0LjQ1di0uMDhBMTMuNzIsMTMuNzIsMCwwLDEsMTgsNC4yMXYxLjZBMTIuMTMsMTIuMTMsMCwwLDAsNi4wNSwxNy45MlptNC4wNSwwSDguNTZ2LS4wOEE5LjYxLDkuNjEsMCwwLDEsMTgsOC4zMlY5Ljg2YTguMDcsOC4wNywwLDAsMC03LjksOC4wNlptNC4zMi0uMDhhMy43'@;
put 'NSwzLjc1LDAsMSwxLDMuNzUsMy43NUEzLjc1LDMuNzUsMCwwLDEsMTQuNDIsMTcuOTJabTMuNzUsMTMuNzFIMThWMzBoLjE3QTEyLjEzLDEyLjEzLDAsMCwwLDMwLjI4LDE4aDEuNkExMy43MywxMy43MywwLDAsMSwxOC4xNywzMS42M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbnRhaW5lcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjI4QTIsMiwwLDAsMSwzMiwzMFpNNCw4VjI4SDMyVjhaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSw5LDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN'@;
put 'MTQuOTIsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMTQuOTIsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44Ljgs'@;
put 'MCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwyMSwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI3LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDI3LDI1LjNaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTkuNjMsMjQuMjNhLjc5Ljc5LDAsMCwxLS44MS43N0EuNzkuNzksMCww'@;
put 'LDEsOCwyNC4yM1YxMS43N0EuNzkuNzksMCwwLDEsOC44MiwxMWEuNzkuNzksMCwwLDEsLjgxLjc3Wm02LDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4yMSwwYS43OS43OSww'@;
put 'LDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdabTYuMTIsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs'@;
put 'LjgyLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LDE3LjU4YTMyLjM1LDMyLjM1LDAsMCwwLDYuMy45Miw0LjEzLDQuMTMsMCwwLDEsLjkyLTEuMzcs'@;
put 'MzAuOTQsMzAuOTQsMCwwLDEtNy4yMi0xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjhWOC4xOWMuMzQtLjc2LDQuMzEtMi4xMSwxMS0yLjExczEwLjY3LDEuMzUsMTEsMnYuM2MtLjgyLjc5LTQuNTgsMi4wNS0xMS4xMSwyLjA1'@;
put 'QTMzLjQ4LDMzLjQ4LDAsMCwxLDgsOS40NHYxLjQ0YTM1LjYsMzUuNiwwLDAsMCw4Ljg5LDFjNC4yOSwwLDguOC0uNTgsMTEuMTEtMS44MnY1LjA3YTUuMyw1LjMsMCwwLDEtMS44MS44OEgzMFY4LjEyYzAtMy4xOS04LjE3LTQtMTMtNHMtMTMsLjg1LTEzLDRWMjhDNCwzMC42Myw5LjM5LDMx'@;
put 'LjY4LDE0LDMyVjMwQzkuMTMsMjkuNjYsNi4yOCwyOC42Miw2LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTgsMjQuMjhhMzEuMywzMS4zLDAsMCwwLDYsLjg5di0xLjRhMjguOTMsMjguOTMsMCwwLDEtNi0uOTNaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwzMlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yMSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwwLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDIxLDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsMjEu'@;
put 'ODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40'@;
put 'LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwz'@;
put 'MlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LDIxLjgyYS43LjcsMCwwLDAtLjcuN1YzMGEuNy43LDAsMSwwLDEuNCwwVjIyLjUyQS43LjcsMCwwLDAsMjUsMjEuODJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAt'@;
put 'LjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxNkgyOFY4LjEyYzAtMS42OC01LjM4LTMtMTItM1M0LDYuNDQsNCw4LjEyVjI4YzAsMS41LDQuMzMs'@;
put 'Mi43NSwxMCwzVjI1LjIyYTI5LjE3LDI5LjE3LDAsMCwxLTgtMS4yOVYyMi40NGwuMjQuMUEyNi42MywyNi42MywwLDAsMCwxNCwyMy44MlYyMGE0LDQsMCwwLDEsLjI5LTEuNDdBMjkuMTksMjkuMTksMCwwLDEsNiwxNy4yM1YxNS43NWwuMjQuMDlhMjksMjksMCwwLDAsOSwxLjMyaDBBNCw0'@;
put 'LDAsMCwxLDE4LDE2Wk02LDEwLjU0VjkuMDVsLjI0LjA5QTMwLjEyLDMwLjEyLDAsMCwwLDE2LDEwLjQ3LDI4LjMzLDI4LjMzLDAsMCwwLDI2LDkuMDV2MS41YTMyLjUzLDMyLjUzLDAsMCwxLTEwLDEuMzJBMzIuNDQsMzIuNDQsMCwwLDEsNiwxMC41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUZpbGVTaGFyZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFB'@;
put 'MiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOTEsMjIuNDhhMi4wNiwyLjA2LDAs'@;
put 'MCwwLTEuNDQuNjJsLTUuNzItMi42NlYyMGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0LDIuMTIsMi4xMiwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVsLjA4LS4wOCw1LjY3LDIuNjZ2LjNhMi4wOSwyLjA5LDAsMSwwLDIu'@;
put 'MDgtMi4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAs'@;
put 'MCwzMCw5Wk02LDdoNi40OWwyLjcyLDRINlpNMjEuOTQsMjYuNjRhMi4wOSwyLjA5LDAsMCwxLTIuMTEtMi4wNmwwLS4zLTUuNjctMi42Ni0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMDgsMi4wOCwwLDEsMSwuNTgsMS40NkwxNC43NSwyMHYuNDds'@;
put 'NS43MiwyLjY2YTIuMDcsMi4wNywwLDEsMSwxLjQ3LDMuNTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVRckNvZGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUuNiw0QTEuNiwxLjYsMCwwLDAsNCw1LjZWMTJoOFY0Wk0xMCwx'@;
put 'MEg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDMwLjRBMS42LDEuNiwwLDAsMCw1LjYsMzJIMTJWMjRINFpNNiwyNmg0djRINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo'@;
put 'IGQ9Ik0yNCwzMmg2LjRBMS42LDEuNiwwLDAsMCwzMiwzMC40VjI0SDI0Wm0yLTZoNHY0SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQsNEgyNHY4aDhWNS42QTEuNiwxLjYsMCwwLDAsMzAuNCw0Wk0zMCwxMEgyNlY2aDRa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwIDEwIDIwIDggMTYgOCAxNiAxMiAxOCAxMiAxOCAxMCAyMCAxMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTIiIHk9'@;
put 'IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwb2x5Z29u'@;
put 'IHBvaW50cz0iMjAgNiAyMCA4IDIyIDggMjIgNCAxNCA0IDE0IDggMTYgOCAxNiA2IDIwIDYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxyZWN0IHg9IjQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtOSIgLz48cG9seWdvbiBwb2ludHM9IjEyIDE2IDEyIDE4IDEwIDE4IDEwIDE0IDggMTQgOCAxOCA2IDE4IDYgMjAgNCAyMCA0IDIyIDggMjIgOCAyMCAxMCAyMCAxMCAyMiAxMiAyMiAxMiAyMCAxNCAyMCAxNCAxNiAxMiAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEwIiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTYgMjIgMTYgMjIgMTggMjQgMTggMjQgMTYgMjYgMTYgMjYgMTQgMjIgMTQgMjIgMTAgMjAgMTAgMjAgMTIgMTggMTIgMTggMTQgMjAgMTQgMjAgMTYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xMSIgLz48cG9seWdvbiBwb2ludHM9IjE4IDMwIDE0IDMwIDE0IDMyIDIyIDMyIDIyIDMwIDIwIDMwIDIwIDI4IDE4IDI4IDE4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIC8+PHBvbHlnb24gcG9pbnRzPSIyMiAyMCAyMiAxOCAyMCAx'@;
put 'OCAyMCAxNiAxOCAxNiAxOCAxOCAxNiAxOCAxNiAyMCAxOCAyMCAxOCAyMiAyMCAyMiAyMCAyMCAyMiAyMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiAvPjxyZWN0IHg9IjMwIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiAvPjxyZWN0IHg9IjIyIiB5PSIyMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiAvPjxwb2x5Z29uIHBvaW50cz0iMzAgMTQgMjggMTQgMjggMTYgMjYgMTYgMjYgMTgg'@;
put 'MjggMTggMjggMjAgMzAgMjAgMzAgMTggMzIgMTggMzIgMTYgMzAgMTYgMzAgMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgLz48cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xNyIgLz48cG9seWdvbiBwb2ludHM9IjE0IDI4IDE2IDI4IDE2IDI2IDE4IDI2IDE4IDI0IDE2IDI0IDE2IDIwIDE0IDIwIDE0IDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTgiIC8+JyksRi5DbHJTaGFwZVVzYj0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMTQuMjksMTEuNGExLjQ5LDEuNDksMCwwLDEsMS4yOC0uNzJoMWEyLjg5LDIuODksMCwwLDAsMi43NSwyLjA5LDMsMywwLDAsMCwwLTUuOTEsMi45LDIuOSwwLDAsMC0yLjY3LDEuODJIMTUuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42NmwtMyw0LjgzaDIuMzZabTUt'@;
put 'Mi45NEExLjM2LDEuMzYsMCwxLDEsMTgsOS44MSwxLjMyLDEuMzIsMCwwLDEsMTkuMzMsOC40NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zNC4zLDE3LjM3bC02LjExLTMuNjZhLjcuNywwLDAsMC0uNywwLC43MS43MSwwLDAsMC0u'@;
put 'MzYuNjFWMTdINi45MmEyLjMzLDIuMzMsMCwwLDEsLjMyLDEuMTcsMi40NywyLjQ3LDAsMSwxLTIuNDctMi40NiwyLjM3LDIuMzcsMCwwLDEsMS4xNS4zbC45My0xLjc2QTQuNDQsNC40NCwwLDEsMCw5LjE1LDE5aDMuNThsNC4xNyw2LjY1YTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMS42NnYx'@;
put 'LjI4YS43OS43OSwwLDAsMCwuOC43OWg0LjQ5YS43OS43OSwwLDAsMCwuOC0uNzl2LTQuNGEuNzkuNzksMCwwLDAtLjgtLjhIMjIuMzRhLjguOCwwLDAsMC0uOC44djEuMTJIMTkuODhhMS41MSwxLjUxLDAsMCwxLTEuMjgtLjcyTDE1LjA5LDE5aDEydjIuNjZhLjY5LjY5LDAsMCwwLC4zNi42'@;
put 'MS42Ny42NywwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDYuMTEtMy42NmEuNjkuNjksMCwwLDAsLjM0LS42QS43MS43MSwwLDAsMCwzNC4zLDE3LjM3Wk0yMy4xNCwyNUgyNnYyLjhIMjMuMTRabTUuMzktNC41NlYxNS41NWw0LDIuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQuNzIsMTcuMzdsLTUuNTEtMy4zMWEuNzEuNzEsMCwwLDAtMS4wNy42VjE3SDExLjc3bDMuNTItNS42YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxLjY0YTIuNDEsMi40MSwwLDAsMCwyLjI1LDEuNjEsMi40OCwyLjQ4LDAsMCww'@;
put 'LDAtNC45NSwyLjM4LDIuMzgsMCwwLDAtMi4xMywxLjM0SDE2LjU3YTMuNDksMy40OSwwLDAsMC0zLDEuNjZMOS40MSwxN0g4YTMuNDYsMy40NiwwLDEsMCwuMDgsMmg1LjY0bDQuMTUsNi42MmEzLjQ5LDMuNDksMCwwLDAsMywxLjY2aDIuNTl2LjkyaDQuNFYyMy44aC00LjR2MS40OEgyMC44'@;
put 'OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTYuMTEsMTloMTJ2Mi4yOGEuNy43LDAsMCwwLC4zNi42MS43Mi43MiwwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDUuNTItMy4zMWEuNy43LDAsMCwwLDAtMS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgLz4nKSxGLkNsclNoYXBlUmFkYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDE4YzAsNy43LTYuMywxNC0xNCwxNGMtNy43LDAtMTQtNi4zLTE0LTE0QzQsMTAuNiw5LjcsNC41LDE3LjEsNHYzLjdjLTUuNywwLjUtOS45LDUuNS05LjQsMTEuMnM1LjUsOS45LDExLjIsOS40'@;
put 'XG5cdGM1LjMtMC41LDkuNC00LjksOS40LTEwLjNoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zcy04LjMtMy43LTguMy04LjNjMC00LjIsMy4xLTcuOCw3LjMtOC4zdjQuNGMtMS44LDAuNC0zLjEsMi0zLjEsMy45XG5cdGMwLDIuMiwxLjgsNCw0LDRzNC0xLjgsNC00YzAtMS44LTEuMy0zLjQt'@;
put 'My0zLjhWMi4xQzE4LjYsMiwxOC4zLDIsMTgsMkM5LjIsMiwyLDkuMiwyLDE4czcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZIMzJ6IE0yMCwxOFxuXHRjMCwxLjEtMC45LDItMiwycy0yLTAuOS0yLTJzMC45LTIsMi0yUzIwLDE2LjksMjAsMTh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIsMThjMCw3LjctNi4yLDE0LTE0LDE0UzQsMjUuOCw0LDE4YzAtNy40LDUuNy0xMy41LDEzLjEtMTR2My43Yy01LjcsMC41LTkuOCw1LjUtOS4zLDExLjJzNS41LDkuOCwxMS4yLDkuM1xuXHRcdGM1LjMtMC41LDkuMy00LjksOS4zLTEw'@;
put 'LjJoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zUzkuNywyMi42LDkuNywxOGMwLTQuMiwzLjItNy44LDcuMy04LjJ2NC40Yy0yLjEsMC42LTMuNCwyLjctMi45LDQuOVxuXHRcdGMwLjYsMi4xLDIuNywzLjQsNC45LDIuOWMyLjEtMC42LDMuNC0yLjcsMi45LTQuOWMtMC40LTEuNC0xLjUtMi41'@;
put 'LTIuOS0yLjlWMmMtMC40LDAtMC43LDAtMS4xLDBjLTguOCwwLTE2LDcuMi0xNiwxNlxuXHRcdGMwLDguOCw3LjIsMTYsMTYsMTZzMTYtNy4yLDE2LTE2YzAsMCwwLDAsMCwwSDMyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlSW5kdWN0'@;
put 'b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjMxLDI1LjgxYy0xLjc1LDAtMy0yLjQ5LTMtNmExMi43OSwxMi43OSwwLDAsMSwxLjcyLTYuNywyLjU3LDIuNTcsMCwwLDAtMy43OSwwQTEyLjc5LDEyLjc5LDAsMCwxLDIxLDE5Ljc2YzAsMy41Ni0xLjIzLDYtMyw2cy0zLTIuNDkt'@;
put 'My02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDAsMTIuNzksMTIuNzksMCwwLDEsMS43Miw2LjdjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuODgsMTIuODgsMCwwLDEsMS43MS02LjcsMi43LDIuNywwLDAsMC0xLjg5LS44N0M3LjEs'@;
put 'MTIuMTksNS42OSwxMy43LDUsMTZsLS4yMy43SDJhMSwxLDAsMCwxLDAtMkgzLjI5YzEuMS0yLjgzLDMuMDYtNC41NSw1LjI0LTQuNTVhNC42Nyw0LjY3LDAsMCwxLDMuMTYsMS4zMiw0LjYyLDQuNjIsMCwwLDEsMy4xNS0xLjMyQTQuNjUsNC42NSwwLDAsMSwxOCwxMS41MWE0LjQzLDQuNDMs'@;
put 'MCwwLDEsNi4zMSwwLDQuNjcsNC42NywwLDAsMSwzLjE2LTEuMzJjMi4xOCwwLDQuMTQsMS43Miw1LjI0LDQuNTVIMzRhMSwxLDAsMCwxLDAsMkgzMS4yOGwtLjIzLS43Yy0uNzQtMi4zNC0yLjE1LTMuODUtMy41OC0zLjg1YTIuNywyLjcsMCwwLDAtMS44OS44NywxMi44OCwxMi44OCwwLDAs'@;
put 'MSwxLjcxLDYuN0MyNy4yOSwyMy4zMiwyNi4wNywyNS44MSwyNC4zMSwyNS44MVpNMTgsMTQuOTNhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEuNzEsMCwwLDAsMTgsMTQuOTNabTYuMzEsMGExMS43MSwxMS43'@;
put 'MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwyNC4zMSwxNC45M1ptLTEyLjYyLDBhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEu'@;
put 'NzEsMCwwLDAsMTEuNjksMTQuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlUmVzaXN0b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjQzLDI2LjM0aDBBMS40NywxLjQ3LDAsMCwxLDI4LDI1LjIyTDI0Ljg2LDEz'@;
put 'LjE1LDIxLjc0LDI1LjIyYTEuNDksMS40OSwwLDAsMS0xLjQ1LDEuMTJoMGExLjQ5LDEuNDksMCwwLDEtMS40Ni0xLjEyTDE1LjcxLDEzLjE1LDEyLjYsMjUuMjJhMS41MSwxLjUxLDAsMCwxLTIuOTEsMEw2LjU3LDEzLjE1LDUuMjIsMTguMzdIMmExLDEsMCwwLDEsMC0ySDMuNjdsMS40NS01'@;
put 'LjU5QTEuNDgsMS40OCwwLDAsMSw2LjU3LDkuNjZoMEExLjQ3LDEuNDcsMCwwLDEsOCwxMC43OGwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS40OSwxLjQ5LDAsMCwxLDEuNDUtMS4xMmgwYTEuNDksMS40OSwwLDAsMSwxLjQ2LDEuMTJsMy4xMiwxMi4wNywzLjEyLTEyLjA3YTEuNSwxLjUsMCww'@;
put 'LDEsMi45LDBsMy4xMiwxMi4wNywxLjM1LTUuMjJIMzRhMSwxLDAsMCwxLDAsMkgzMi4zM2wtMS40NSw1LjU5QTEuNDgsMS40OCwwLDAsMSwyOS40MywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVDYXBhY2l0b3I9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwxNSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMSwzNC4wNmExLDEsMCww'@;
put 'LDEtMS0xVjMuMTVhMSwxLDAsMSwxLDIsMFYzMy4wNkExLDEsMCwwLDEsMjEsMzQuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuNDYsMTlIM2ExLDEsMCwwLDEsMC0ySDE0LjQ2YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMTlIMjEuNTRhMSwxLDAsMCwxLDAtMkgzM2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVNxdWlkPSgwLG0uY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik0xOCw3YTEsMSwwLDAsMS0xLTFWMy4xOWExLDEsMCwwLDEsMiwwVjZBMSwxLDAsMCwxLDE4LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRhMSwxLDAsMCwxLTEtMVYzMGExLDEsMCwwLDEsMiww'@;
put 'djNBMSwxLDAsMCwxLDE4LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTcuNDEsMThsMS43OC0xLjc3YTEsMSwwLDEsMC0xLjQyLTEuNDJMNiwxNi41OSw0LjIzLDE0LjgxYTEsMSwwLDEsMC0xLjQyLDEuNDJMNC41OSwxOCwyLjgx'@;
put 'LDE5Ljc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUw2LDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBk'@;
put 'PSJNNiwxMy43NmwuMzYtLjM2YTMsMywwLDAsMSwyLjExLS44OCwxMSwxMSwwLDAsMSwxOSwwLDMsMywwLDAsMSwyLjEyLjg4bC4zNi4zNi4yLS4yYTEzLDEzLDAsMCwwLTI0LjQsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMCwy'@;
put 'Mi4yNGwtLjM2LjM2YTMsMywwLDAsMS0yLjEyLjg4LDExLDExLDAsMCwxLTE5LDAsMywzLDAsMCwxLTIuMTItLjg4TDYsMjIuMjRsLS4yLjJhMTMsMTMsMCwwLDAsMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQxLDE4'@;
put 'bDEuNzgtMS43N2ExLDEsMCwwLDAtMS40Mi0xLjQyTDMwLDE2LjU5bC0xLjc3LTEuNzhhMSwxLDAsMSwwLTEuNDIsMS40MkwyOC41OSwxOGwtMS43OCwxLjc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMCwxOS40MWwxLjc3LDEuNzhhMSwx'@;
put 'LDAsMCwwLDEuNDIsMCwxLDEsMCwwLDAsMC0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUhvc3RHcm91cD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuMDgsMzRoLTE0QTEuMDgsMS4wOCwwLDAsMSw2LDMzVjEy'@;
put 'YTEuMDgsMS4wOCwwLDAsMSwxLjA4LTEuMDhoMTRBMS4wOCwxLjA4LDAsMCwxLDIyLjE2LDEyVjMzQTEuMDgsMS4wOCwwLDAsMSwyMS4wOCwzNFpNOC4xNiwzMS44OEgyMFYxM0g4LjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cmVjdCB4PSIx'@;
put 'MC4wOCIgeT0iMTQuOTYiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNi4xLDI3LjgxaC0yVjloLTEyVjdoMTNhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLjA4LDIzaC0yVjVoLTExVjNoMTJhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxyZWN0IHg9IjEzLjA4IiB5PSIyNy44OCIgd2lkdGg9IjIiIGhlaWdodD0iMi4xNiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4wOCwzMSBMMS4wOCwzMSBDMC41MTM0MjcxOTcsMzEuMDAxNTU2NCAwLjA0MTk2NjM3NjUsMzAuNTY1MDE4NiAwLDMwIEww'@;
put 'LDkgQzAsOC40MDM1MzI0NyAwLjQ4MzUzMjQ3LDcuOTIgMS4wOCw3LjkyIEwxNS4wOCw3LjkyIEMxNS42NzY0Njc1LDcuOTIgMTYuMTYsOC40MDM1MzI0NyAxNi4xNiw5IEwxNi4xNiwzMCBDMTYuMTE4MDMzNiwzMC41NjUwMTg2IDE1LjY0NjU3MjgsMzEuMDAxNTU2NCAxNS4wOCwzMSBaIE00'@;
put 'LjA4LDExLjk2IEw0LjA4LDEzLjk2IEwxMi4wOCwxMy45NiBMMTIuMDgsMTEuOTYgTDQuMDgsMTEuOTYgWiBNNy4wOCwyNC44OCBMNy4wOCwyNy4wNCBMOS4wOCwyNy4wNCBMOS4wOCwyNC44OCBMNy4wOCwyNC44OCBaIiAvPlxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgZD0iTTIwLjEsMjQuODEgTDE4LjEsMjQuODEgTDE4LjEsNiBMNi4xLDYgTDYuMSw0IEwxOS4xLDQgQzE5LjY1MjI4NDcsNCAyMC4xLDQuNDQ3NzE1MjUgMjAuMSw1IEwyMC4xLDI0LjgxIFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z'@;
put 'IiBkPSJNMjQuMDgsMjAgTDIyLjA4LDIwIEwyMi4wOCwyIEwxMS4wOCwyIEwxMS4wOCwwIEwyMy4wOCwwIEMyMy42MzIyODQ3LDAgMjQuMDgsMC40NDc3MTUyNSAyNC4wOCwxIEwyNC4wOCwyMCBaIiAvPicpLEYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNNi4wNiwzMGExLDEsMCwwLDEtMS0xVjhoLTJhMSwxLDAsMCwxLDAtMmg0VjI5QTEsMSwwLDAsMSw2LjA2LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMwLjA2LDI3aC0yNVY5aDI1YTMsMywwLDAsMSwzLDNWMjRB'@;
put 'MywzLDAsMCwxLDMwLjA2LDI3Wm0tMjMtMmgyM2ExLDEsMCwwLDAsMS0xVjEyYTEsMSwwLDAsMC0xLTFoLTIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjIuMDYiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMTQiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOS4wNiwyMmgtOFYyMGg3VjE0aDJ2'@;
put 'N0ExLDEsMCwwLDEsMTkuMDYsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVOb2RlR3JvdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDIxLjU4bC00Ljk0LTIuODNWMTMuMDlhMSwxLDAsMCwwLS41MS0uODdM'@;
put 'MjIuNjQsOS4xYTEsMSwwLDAsMC0xLDBMMTYuMiwxMi4yMmExLDEsMCwwLDAtLjUxLjg3djUuNjZsLTQuOTQsMi44M2ExLDEsMCwwLDAtLjUuODd2Ni4yNGExLDEsMCwwLDAsLjUuODZsNS40NSwzLjEyYTEsMSwwLDAsMCwxLDBsNC45NS0yLjgzLDQuOTUsMi44M2ExLDEsMCwwLDAsLjUuMTQs'@;
put 'MSwxLDAsMCwwLC40OS0uMTRsNS40NS0zLjEyYTEsMSwwLDAsMCwuNS0uODZWMjIuNDVBMSwxLDAsMCwwLDMzLjUzLDIxLjU4Wk0yMi4xNCwxMS4xMmw0LjQ1LDIuNTVWMTlsLTQuNDYsMi41Ni00LjQ0LTIuNlYxMy42N1pNMTYuNjksMzAuNjVsLTQuNDQtMi41NFYyM2w0LjY4LTIuNjgsNC40'@;
put 'LDIuNTdWMjhaTTMyLDI4LjExbC00LjQ0LDIuNTRMMjIuOTMsMjhWMjIuOTNsNC40Ni0yLjU3TDMyLDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcsMjcuNDNhMSwxLDAsMCwxLTEtMVYxOS45QTEsMSwwLDAsMSw2LjUsMTls'@;
put 'NC45NS0yLjgzVjEwLjU0YTEsMSwwLDAsMSwuNS0uODdsNS4yMS0zYTEsMSwwLDAsMSwxLjM3LjM3LDEsMSwwLDAsMS0uMzgsMS4zN2wtNC43LDIuNjh2NS42NmExLDEsMCwwLDEtLjUxLjg3TDgsMjAuNDh2NS45NUExLDEsMCwwLDEsNywyNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zLDI1LjA1YTEsMSwwLDAsMS0xLTFWMTcuNTNhMSwxLDAsMCwxLC41LS44Nmw1LTIuODRWOC4xN0ExLDEsMCwwLDEsOCw3LjMxbDUuMjUtM2ExLDEsMCwwLDEsMSwxLjc0TDkuNDUsOC43NXY1LjY2YTEsMSwwLDAsMS0uNTEuODdM'@;
put 'NCwxOC4xMXY1Ljk0QTEsMSwwLDAsMSwzLDI1LjA1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUsMzQuMjksMiwyOS4zOVYxOS41OGw4LjUtNC45LDguNSw0Ljl2'@;
put 'OS44MVpNNCwyOC4yMywxMC41LDMyLDE3LDI4LjIzVjIwLjc0TDEwLjUsMTcsNCwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yNS41LDM0LjI5LDE3LDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk0xOSwy'@;
put 'OC4yMywyNS41LDMyLDMyLDI4LjIzVjIwLjc0TDI1LjUsMTcsMTksMjAuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTgsMjEuMzJsLTguNS00LjlWNi42MUwxOCwxLjcxbDguNSw0Ljl2OS44MVptLTYuNS02LjA2TDE4LDE5'@;
put 'bDYuNS0zLjc1VjcuNzdMMTgsNCwxMS41LDcuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVOYW1lc3BhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDQuMThhMSwxLDAsMSwwLTEsMS43M2w2LDMuNDdWMjYuNjJs'@;
put 'LTYsMy40N2ExLDEsMCwwLDAtLjM3LDEuMzYsMSwxLDAsMCwwLDEuMzcuMzdsNy00LjA1VjguMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNOS42OCwyOS45LDQsMjYuNjJWOS4zOEw5LjY4LDYuMWExLDEsMCwxLDAtMS0xLjcz'@;
put 'TDIsOC4yM1YyNy43N2w2LjY4LDMuODZhMSwxLDAsMCwwLDEuMzctLjM3QTEsMSwwLDAsMCw5LjY4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTAsMTJWMjRhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjEy'@;
put 'YTIsMiwwLDAsMC0yLTJIMTJBMiwyLDAsMCwwLDEwLDEyWm03LDB2NUgxMlYxMlptLTUsN2g1djVIMTJabTcsNVYxOWg1djVabTUtN0gxOVYxMmg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZT0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMzAuNjYsNywyNC4zM1YxMS42N0wxOCw1LjM0bDExLDYuMzNWMjQuMzNaTTksMjMuMThsOSw1LjE3LDktNS4xN1YxMi44MkwxOCw3LjY1LDksMTIuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLEYuQ2xyU2hhcGVQb2Q9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDMySDEwYTYsNiwwLDAsMS02LTZWMTBhNiw2LDAsMCwxLDYtNkgyNmE2LDYsMCwwLDEsNiw2VjI2QTYsNiwwLDAsMSwyNiwzMlpNMTAsNmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjZhNCw0LDAsMCwwLDQtNFYxMGE0LDQs'@;
put 'MCwwLDAtNC00WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI2LjU2LDE1SDE1LjQ0QTEuNDMsMS40MywwLDAsMCwxNCwxNi40NHY4LjEyQTEuNDMsMS40MywwLDAsMCwxNS40NCwyNkgyNi41NkExLjQzLDEuNDMsMCwwLDAsMjgs'@;
put 'MjQuNTZWMTYuNDRBMS40MywxLjQzLDAsMCwwLDI2LjU2LDE1Wk0yNiwyNEgxNlYxN0gyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMi40LDE5SDEwVjEySDIwdjEuNGgydi0yQTEuNDMsMS40MywwLDAsMCwyMC41NiwxMEg5'@;
put 'LjQ0QTEuNDMsMS40MywwLDAsMCw4LDExLjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDkuNDQsMjFoM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksRi5DbHJDb250cm9sTHVuPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNOCwyNC41OWEy'@;
put 'NS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4czkuMS0uNDUs'@;
put 'MTItMS44OHY1LjExYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlY4aDBzMCwwLDAtLjA3YzAtMy4zNS04LjgtNC4yNS0xNC00LjI1UzQsNC41'@;
put 'OCw0LDcuOTN2MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWk0xOCw1LjY4YzcuMTUsMCwxMS41MywxLjQ0LDEyLDIuMjUtLjQ2LjgxLTQuODQsMi4yNS0xMiwyLjI1UzYuMzEsOC42OSw2LDhDNi4zMSw3LjE4LDEwLjcx'@;
put 'LDUuNjgsMTgsNS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRs'@;
put 'LTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGgg'@;
put 'ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0xOCwxNy41NEEzNC44'@;
put 'MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjEzLjIyYTcuMzIsNy4zMiwwLDAsMS0yLC4yOHYxLjkxQzI5LjA5LDE2LjIzLDI1LDE3LjU0LDE4LDE3LjU0WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhhNDcuNjYsNDcuNjYsMCwwLDAsNy4wOS0uNTIsNy40NSw3LjQ1LDAsMCwxLTEuNTEtMS44LDQ3LjQsNDcuNCwwLDAsMS01'@;
put 'LjU4LjMyQzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjY2LDAsMy4xNi4wOCw0LjUxLjIxYTcuNTYsNy41NiwwLDAsMSwuMjktMmMtMS43LS4xNy0zLjM4LS4yNC00LjgtLjI0LTUuMiwwLTE0LC45LTE0LDQuMjV2MTkuNmMwLDIsMy4xNywzLjE0'@;
put 'LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTgsMjQuNTlhMjUuNSwyNS41LDAsMCwwLDIuNzUuNTlsMS4yMS0xLjQxYTI0LjEzLDI0LjEzLDAsMCwxLTQtLjgzWiIvPjxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40'@;
put 'MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRsLTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5c'@;
put 'biAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgs'@;
put 'MTIsMS44OGguNTlhMy41OSwzLjU5LDAsMCwxLC4zMi0ySDE4QzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjIyLDAsMi4zNS4wNSwzLjQxLjEybDEuMS0xLjkxYy0xLjYtLjE1LTMuMTctLjIxLTQuNTEtLjIxLTUuMiwwLTE0LC45LTE0LDQuMjV2'@;
put 'MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTgsMTYuMzNWMThhNDAuODYsNDAu'@;
put 'ODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTUuNEgzMGMtLjkxLjgyLTUsMi4xMy0xMiwyLjEzQTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl'@;
put 'ZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzIuMDks'@;
put 'MjFIMzJWMTcuMzJjLTEuOSwyLjkzLTEwLjQ2LDMuMy0xNCwzLjNBNDIuNDMsNDIuNDMsMCwwLDEsOCwxOS41NlYxNy44OEE0MC41OSw0MC41OSwwLDAsMCwxOCwxOWM1LDAsMTMuMi0uODIsMTQtMy44MlYxMC43MmMtMi4yMSwzLjM2LTEwLjQ5LDMuNDYtMTQsMy40NkE0Mi4xMiw0Mi4xMiww'@;
put 'LDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRjNSwwLDEzLjI4LS44MywxNC0zLjg4VjcuODNoMGMtLjE5LTMuMjctOC44NC00LjE1LTE0LTQuMTVTNC4yMSw0LjU2LDQsNy44M0g0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3'@;
put 'YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45'@;
put 'MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgydi0yYTcuMzQsNy4z'@;
put 'NCwwLDAsMS00LjEyLDAsMzkuNDcsMzkuNDcsMCwwLDEtOS44OCwxQTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNCw0Ny43Niw0Ny43NiwwLDAsMCw3LjA5LS41MkE3LjQ1LDcuNDUsMCwwLDEsMjIuOCwzLjkyYy0xLjctLjE3LTMuMzgtLjI0'@;
put 'LTQuOC0uMjQtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4y'@;
put 'NCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+'@;
put 'XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4'@;
put 'LDE5YzQuODUsMCwxMi44LS43OSwxMy45MS0zLjYySDIyLjIzYTMuNjgsMy42OCwwLDAsMS0yLjczLTEuMjNIMThBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0aC41OWEzLjYxLDMuNjEsMCwwLDEsLjQ2LTIuMjlsMy40Ni02Yy0xLjYtLjE1'@;
put 'LTMuMTctLjIxLTQuNTEtLjIxLTUuMTQsMC0xMy43OS44OC0xNCw0LjE1SDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwz'@;
put 'LjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlTWVkaWFDaGFuZ2VyPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAs'@;
put 'MCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wk02LDMwVjZIMzBWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBo'@;
put 'ZWlnaHQ9IjIiLz48cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMjcuMjIsMTBIMjB2NGEuOC44LDAsMSwwLDEuNTksMFYxMS42aDUuNjNh'@;
put 'LjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cmVj'@;
put 'dCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9'@;
put 'IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4'@;
put 'LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4'@;
put 'LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMCwxNGEuOC44LDAsMSwwLDEuNTksMFYxMS42SDI1QTcuNzQsNy43NCwwLDAsMSwyMy42NiwxMEgyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgPHBh'@;
put 'dGggZD0iTTMwLDEzLjVoMFYzMEg2VjZIMjIuNVY2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3'@;
put 'LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'Mi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTQiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC02LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9Ijgu'@;
put 'MTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjYiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDZWNkgyMS4yN2wxLjE4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwy'@;
put 'LTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFM'@;
put 'MjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAs'@;
put 'MiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4Ljgx'@;
put 'VjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWm0wLTZIMjBWMTBoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cblxuICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNC0xLjE2VjE0'@;
put 'SDIwVjEwaDMuNjZBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmE3LjM3LDcuMzcsMCwwLDEsLjI4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJB'@;
put 'Ny4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRo'@;
put 'IGQ9Ik0yMi4yMywxNS40YTMuNjgsMy42OCwwLDAsMS0zLjE4LTUuNTFMMjIuNDUsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0xNywyOEg4'@;
put 'LjgxVjI2SDE3Wm0wLTRIOC44MVYyMkgxN1ptMC00SDguODFWMThIMTdabTAtNEg4LjgxVjE0SDE3Wm0wLTRIOC44MVYxMEgxN1pNMjIsMjRIMjBWMjJoMlptMC00SDIwVjE4aDJabTQsNEgyNFYyMmgyWm0wLTRIMjRWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLEYuQ2xyU2hhcGVUYXBlRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww'@;
put 'LDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCwyOFY4SDMyVjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEzLjMzLDEzLjM1YTQuNTIsNC41MiwwLDEsMCw0LjUzLDQuNTJBNC41Myw0LjUzLDAsMCwwLDEzLjMzLDEzLjM1'@;
put 'Wm0wLDcuNDRhMi45MiwyLjkyLDAsMSwxLDIuOTMtMi45MkEyLjkyLDIuOTIsMCwwLDEsMTMuMzMsMjAuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNjIsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTIsNC41MkE0LjUz'@;
put 'LDQuNTMsMCwwLDAsMjMuNjIsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45Mi0yLjkyQTIuOTIsMi45MiwwLDAsMSwyMy42MiwyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik02LDExVjIzLjU1SDhWMTJIMjku'@;
put 'MzRWMTBIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG5cbiAgPHBhdGggZD0iTTguODEsMTcuODdhNC41Myw0LjUzLDAsMSwwLDQuNTItNC41MkE0LjUzLDQuNTMsMCwwLDAsOC44MSwxNy44N1ptNy40NSwwQTIuOTMsMi45'@;
put 'MywwLDEsMSwxMy4zMywxNSwyLjkzLDIuOTMsMCwwLDEsMTYuMjYsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE5LjEsMTcuODdhNC41Miw0LjUyLDAsMSwwLDQuNTItNC41MkE0LjUzLDQu'@;
put 'NTMsMCwwLDAsMTkuMSwxNy44N1ptNy40NCwwQTIuOTIsMi45MiwwLDEsMSwyMy42MiwxNSwyLjkyLDIuOTIsMCwwLDEsMjYuNTQsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLDEzLjIy'@;
put 'VjI4SDRWOEgyMi43OGE3LjM3LDcuMzcsMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjY1LDcuNjUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyNS41MWE3LjY2LDcuNjYsMCwwLDEtMS44NS0ySDdBMSwxLDAsMCwwLDYsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx'@;
put 'LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik03LDEwYTEsMSwwLDAsMC0xLDFW'@;
put 'MjMuNTVIOFYxMkgxOC41N0EzLjcsMy43LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMjhINFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhW'@;
put 'MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTIyLjA5LDE1LjM5YTMuNjUsMy42NSwwLDAsMS0xLjgtLjU1LDQuNTEsNC41MSww'@;
put 'LDEsMCw3LjExLjU2SDI1LjE3YTIuOTIsMi45MiwwLDEsMS0zLjA4LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywx'@;
put 'M0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMy'@;
put 'LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0zMCwyNEg2VjEySDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1'@;
put 'LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIzLjc5LDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDIzLjc5LDIzWm0wLTdhMiwyLDAs'@;
put 'MSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG5cbiAgPHBhdGggZD0iTTEyLjIxLDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDEyLjIxLDIzWm0wLTdhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTIuMjEsMTZa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxMy41VjI0SDZWMTJIMjUuNTFhNy40OSw3LjQ5LDAsMCwxLTMtNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDksNy40'@;
put 'OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHIt'@;
put 'aS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik03LjIsMThhNSw1LDAsMSwwLDUtNUE1LDUsMCwwLDAsNy4yLDE4Wm03LDBhMiwyLDAsMSwxLTItMkEyLDIsMCwwLDEsMTQuMjIsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4g'@;
put 'IDxwYXRoIGQ9Ik0xOC43OCwxOGE1LDUsMCwxLDAsOS4yNy0yLjZIMjIuMjNhMy43MSwzLjcxLDAsMCwxLTIuMTctLjcxQTUsNSwwLDAsMCwxOC43OCwxOFptNS0yYTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMFYyNEg2VjEySDE4LjU3YTMuNjUsMy42NSwwLDAsMSwuNDgtMi4xMUwyMS4yOSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlQW5pbWF0aW9uPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC4xNiwzMS43MWE0LjQsNC40LDAsMCwx'@;
put 'LTQuNjQtMUE0LjM0LDQuMzQsMCwwLDEsNC4yMywyNy42YTQuNDEsNC40MSwwLDAsMSwuMTgtMS4yLDExLjYxLDExLjYxLDAsMCwxLTEtMi41Niw2LjQsNi40LDAsMCwwLDkuMzMsOC42M0ExMS41NSwxMS41NSwwLDAsMSwxMC4xNiwzMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MSwyNy42OGE3LjYxLDcuNjEsMCwwLDEtOS4wOC0xLjI2LDcuNTgsNy41OCwwLDAsMS0xLjI3LTkuMDYsMTQuMjYsMTQuMjYsMCwwLDEtLjM3LTIuODUsOS41OCw5LjU4LDAsMCwwLC4yMiwxMy4zMyw5LjYzLDkuNjMsMCwwLDAs'@;
put 'MTMuMzUuMjJBMTQuNDYsMTQuNDYsMCwwLDEsMTguNDEsMjcuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNjYsMjYuMjFhMTIuMSwxMi4xLDAsMSwxLDguNTctMy41NGgwQTEyLjExLDEyLjExLDAsMCwxLDIxLjY2LDI2'@;
put 'LjIxWk0yMS42Niw0QTEwLjExLDEwLjExLDAsMCwwLDExLjU0LDE0LjExYTEwLDEwLDAsMCwwLDMsNy4xNCwxMC4xMiwxMC4xMiwwLDAsMCwxNC4zMSwwQTEwLjExLDEwLjExLDAsMCwwLDIxLjY2LDRabTcuODYsMThoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIi8+XG4gIFxuICA8cGF0aCBkPSJNMy41LDIzLjc3YTYuNDEsNi40MSwwLDAsMCw5LjMzLDguNjdBMTEuNjUsMTEuNjUsMCwwLDEsMy41LDIzLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy42OCwxNC41M2E5LjYsOS42LDAs'@;
put 'MCwwLDEzLjQsMTMuN0ExNC4xMSwxNC4xMSwwLDAsMSw3LjY4LDE0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNzgsMkExMi4xMiwxMi4xMiwwLDEsMSw5LjY2LDE0LjE1LDEyLjEyLDEyLjEyLDAsMCwxLDIxLjc4LDIiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgJyksRi5DbHJTaGFwZUNpQ2Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjUzLDE5LjgxYTcuNDUsNy40NSwwLDAsMS0xLjY1LS4xOCwxMC40OCwxMC40OCwwLDAsMSwuNzIsMi4xM2MuMywwLC42MSwwLC45'@;
put 'MywwYTkuNTIsOS41MiwwLDAsMCwzLS40OWwtLjkzLTEuODFBNy42Nyw3LjY3LDAsMCwxLDIzLjUzLDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjM2LDE3Ljg3LDE4LDE3LjQ5YTcuNCw3LjQsMCwwLDEtMi4yLTUu'@;
put 'OTIsNy4zMSw3LjMxLDAsMCwxLDEuNTQtNEwxNy4yNiw5QTEsMSwwLDAsMCwxOC4xNywxMGguMDlhMSwxLDAsMCwwLDEtLjkxTDE5LjYsNWExLDEsMCwwLDAtLjI5LS43OUExLDEsMCwwLDAsMTguNTIsNGwtNC4wOS4zNWExLDEsMCwwLDAsLjE3LDJsMS4yOS0uMTFhOS40NSw5LjQ1LDAsMCww'@;
put 'LTIuMDUsNS4zMiw5LjI4LDkuMjgsMCwwLDAsMi42Nyw3LjI2bC4zMS4zN2E3LjMzLDcuMzMsMCwwLDEsMi4wNiw0LjkxLDcuMzksNy4zOSwwLDAsMS0uMjYsMi40N2wxLjguOTFhOC43Niw4Ljc2LDAsMCwwLC40NS0zLjUxQTkuMjgsOS4yOCwwLDAsMCwxOC4zNiwxNy44N1oiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi40LDE3LjkxLDMxLjE5LDE4QTkuNjUsOS42NSwwLDAsMCwyMy41MywyLjQ1YTkuMzMsOS4zMywwLDAsMC0zLC40OWwuOTEsMS44YTcuNjcsNy42NywwLDAsMSw5Ljc2LDcuMzksNy41OCw3LjU4LDAs'@;
put 'MCwxLTEuNjUsNC43MmwuMS0xLjU0YTEsMSwwLDEsMC0yLS4xM2wtLjI4LDQuMDhhMSwxLDAsMCwwLC4zMS43OC45NC45NCwwLDAsMCwuNjkuMjhoLjFsNC4wOC0uNDJhMSwxLDAsMCwwLC45LTEuMUExLDEsMCwwLDAsMzIuNCwxNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik00LjA3LDIwLjQ0aC4wOGw0LjA5LS4zNWExLDEsMCwxLDAtLjE3LTJsLTEuMzkuMTJhNy42Myw3LjYzLDAsMCwxLDQuNTItMS40OSw3LjksNy45LDAsMCwxLDEuNjMuMTgsMTAuMjMsMTAuMjMsMCwwLDEtLjcxLTIuMTNjLS4zLDAtLjYxLDAt'@;
put 'LjkyLDBhOS42Niw5LjY2LDAsMCwwLTUuOSwybC4xMi0xLjMxYTEsMSwwLDAsMC0uOTItMS4wOCwxLDEsMCwwLDAtMS4wOC45MWwtLjM1LDQuMDhhMSwxLDAsMCwwLDEsMS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC40'@;
put 'MiwyOC4yM2wtNC4wOS4yN2ExLDEsMCwwLDAsLjEzLDJMMTYsMzAuMzlhNy43MSw3LjcxLDAsMCwxLTEyLjU0LTYsNy42LDcuNiwwLDAsMSwuMjktMkwyLDIxLjQ2YTkuNTksOS41OSwwLDAsMC0uNDcsMi45NUE5LjcsOS43LDAsMCwwLDE3LjE5LDMybC0uMTIsMS4xOGExLDEsMCwwLDAsLjg5'@;
put 'LDEuMWguMTFhMSwxLDAsMCwwLDEtLjlsLjQyLTQuMDZhMSwxLDAsMCwwLTEuMDYtMS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxGLkNsclNoYXBlRmlsZVNoYXJlMj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEg3LjgzQTEuODks'@;
put 'MS44OSwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OSwxLjg5LDAsMCwwLDcuODMsMzJIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjA5VjlaTTI0LDUuNzgsMjguMiwxMEgyNFpNOCwzMFY2SDIydjZoNlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+'@;
put 'XG4gIDxwYXRoIGQ9Ik0yMiwyMS44MWEyLjExLDIuMTEsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2di0uNDRsNS42Ni0yLjY1YTIuMDgsMi4wOCwwLDEsMCwuMDYtMi45NGgwYTIuMTQsMi4xNCwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVs'@;
put 'LjA4LS4wOCw1LjY3LDIuNjZ2LjNBMi4wOSwyLjA5LDAsMSwwLDIyLDIxLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0yNSw0LjA2SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNlYzMC4xNWExLjg5LDEuODksMCwwLDAs'@;
put 'MS44MywxLjkxSDI4LjE3QTEuODcsMS44NywwLDAsMCwzMCwzMC4xNVY5Wk0yMiwyNmEyLjA5LDIuMDksMCwwLDEtMi4xLTIuMDh2LS4zTDE0LjI3LDIxbC0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMTQsMi4xNCwwLDAsMSwuNjQtMS40OGgwYTIu'@;
put 'MDgsMi4wOCwwLDEsMS0uMDYsMi45NGwtNS42NiwyLjY1di40NGw1LjcyLDIuNjZBMi4xMSwyLjExLDAsMCwxLDIyLDIxLjgxbDAsMEEyLjA5LDIuMDksMCwwLDEsMjIsMjZabTItMTZWNS44NGw0LjIsNC4yMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxG'@;
put 'LlRlY2hub2xvZ3lTaGFwZXM9eyJydWxlci1wZW5jaWwiOkYuQ2xyU2hhcGVSdWxlclBlbmNpbCwicGhvbmUtaGFuZHNldCI6Ri5DbHJTaGFwZVBob25lSGFuZHNldCwibm8td2lmaSI6Ri5DbHJTaGFwZU5vV2lmaSxpbnN0YWxsOkYuQ2xyU2hhcGVJbnN0YWxsLHVuaW5zdGFsbDpGLkNsclNo'@;
put 'YXBlVW5pbnN0YWxsLGxheWVyczpGLkNsclNoYXBlTGF5ZXJzLGJsb2NrOkYuQ2xyU2hhcGVCbG9jaywiYmxvY2tzLWdyb3VwIjpGLkNsclNoYXBlQmxvY2tzR3JvdXAsYnVuZGxlOkYuQ2xyU2hhcGVCdW5kbGUsd2lmaTpGLkNsclNoYXBlV2lmaSwicmFjay1zZXJ2ZXIiOkYuQ2xyU2hhcGVS'@;
put 'YWNrU2VydmVyLCJoYXJkLWRpc2siOkYuQ2xyU2hhcGVIYXJkRGlzaywiYmFja3VwLXJlc3RvcmUiOkYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlLGJhY2t1cDpGLkNsclNoYXBlQmFja3VwLGRldmljZXM6Ri5DbHJTaGFwZURldmljZXMsa2V5Ym9hcmQ6Ri5DbHJTaGFwZUtleWJvYXJkLG1vdXNl'@;
put 'OkYuQ2xyU2hhcGVNb3VzZSxkYXNoYm9hcmQ6Ri5DbHJTaGFwZURhc2hib2FyZCxob3N0OkYuQ2xyU2hhcGVIb3N0LHN0b3JhZ2U6Ri5DbHJTaGFwZVN0b3JhZ2UsY2x1c3RlcjpGLkNsclNoYXBlQ2x1c3RlcixhcHBsaWNhdGlvbnM6Ri5DbHJTaGFwZUFwcGxpY2F0aW9ucyxidWlsZGluZzpG'@;
put 'LkNsclNoYXBlQnVpbGRpbmcsY3B1OkYuQ2xyU2hhcGVDUFUsbWVtb3J5OkYuQ2xyU2hhcGVNZW1vcnksImRhdGEtY2x1c3RlciI6Ri5DbHJTaGFwZURhdGFDbHVzdGVyLCJyZXNvdXJjZS1wb29sIjpGLkNsclNoYXBlUmVzb3VyY2VQb29sLHNoaWVsZDpGLkNsclNoYXBlU2hpZWxkLCJzaGll'@;
put 'bGQtY2hlY2siOkYuQ2xyU2hhcGVTaGllbGRDaGVjaywic2hpZWxkLXgiOkYuQ2xyU2hhcGVTaGllbGRYLGltcG9ydDpGLkNsclNoYXBlSW1wb3J0LGV4cG9ydDpGLkNsclNoYXBlRXhwb3J0LCJ1cGxvYWQtY2xvdWQiOkYuQ2xyU2hhcGVVcGxvYWRDbG91ZCwiZG93bmxvYWQtY2xvdWQiOkYu'@;
put 'Q2xyU2hhcGVEb3dubG9hZENsb3VkLHBsdWdpbjpGLkNsclNoYXBlUGx1Z2luLGZsb3BweTpGLkNsclNoYXBlRmxvcHB5LGNvbXB1dGVyOkYuQ2xyU2hhcGVDb21wdXRlcixkaXNwbGF5OkYuQ2xyU2hhcGVEaXNwbGF5LHRlcm1pbmFsOkYuQ2xyU2hhcGVUZXJtaW5hbCxjb2RlOkYuQ2xyU2hh'@;
put 'cGVDb2RlLGFwcGxpY2F0aW9uOkYuQ2xyU2hhcGVBcHBsaWNhdGlvbixiYXR0ZXJ5OkYuQ2xyU2hhcGVCYXR0ZXJ5LG1vYmlsZTpGLkNsclNoYXBlTW9iaWxlLHRhYmxldDpGLkNsclNoYXBlVGFibGV0LCJuZXR3b3JrLWdsb2JlIjpGLkNsclNoYXBlTmV0d29ya0dsb2JlLCJuZXR3b3JrLXNl'@;
put 'dHRpbmdzIjpGLkNsclNoYXBlTmV0d29ya1NldHRpbmdzLCJuZXR3b3JrLXN3aXRjaCI6Ri5DbHJTaGFwZU5ldHdvcmtTd2l0Y2gscm91dGVyOkYuQ2xyU2hhcGVSb3V0ZXIsdm06Ri5DbHJTaGFwZVZNLCJ2bXctYXBwIjpGLkNsclNoYXBlVk1XQXBwLGNlcnRpZmljYXRlOkYuQ2xyU2hhcGVD'@;
put 'ZXJ0aWZpY2F0ZSxhcmNoaXZlOkYuQ2xyU2hhcGVBcmNoaXZlLHVuYXJjaGl2ZTpGLkNsclNoYXBlVW5hcmNoaXZlLGNvbm5lY3Q6Ri5DbHJTaGFwZUNvbm5lY3QsZGlzY29ubmVjdDpGLkNsclNoYXBlRGlzY29ubmVjdCxsaW5rOkYuQ2xyU2hhcGVMaW5rLHVubGluazpGLkNsclNoYXBlVW5s'@;
put 'aW5rLCJjbG91ZC1uZXR3b3JrIjpGLkNsclNoYXBlQ2xvdWROZXR3b3JrLCJjbG91ZC1zY2FsZSI6Ri5DbHJTaGFwZUNsb3VkU2NhbGUsImNsb3VkLXRyYWZmaWMiOkYuQ2xyU2hhcGVDbG91ZFRyYWZmaWMsImNvbnRyb2wtbHVuIjpGLkNsckNvbnRyb2xMdW4sZGVwbG95OkYuQ2xyU2hhcGVE'@;
put 'ZXBsb3ksaGVsaXg6Ri5DbHJTaGFwZUhlbGl4LGZsYXNrOkYuQ2xyU2hhcGVGbGFzayxhZG1pbmlzdHJhdG9yOkYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yLCJoYXJkLWRyaXZlIjpGLkNsclNoYXBlSGFyZERyaXZlLCJoYXJkLWRyaXZlLWRpc2tzIjpGLkNsclNoYXBlSGFyZERyaXZlRGlza3Ms'@;
put 'bnZtZTpGLkNsclNoYXBlTlZNZSxzc2Q6Ri5DbHJTaGFwZVNTRCxibHVldG9vdGg6Ri5DbHJTaGFwZUJsdWV0b290aCwiYmx1ZXRvb3RoLW9mZiI6Ri5DbHJTaGFwZUJsdWV0b290aE9mZiwicHJvY2Vzcy1vbi12bSI6Ri5DbHJTaGFwZVByb2Nlc3NPblZNLCJhc3NpZ24tdXNlciI6Ri5DbHJT'@;
put 'aGFwZUFzc2lnblVzZXIsYXRvbTpGLkNsclNoYXBlQXRvbSwiYmFyLWNvZGUiOkYuQ2xyU2hhcGVCYXJDb2RlLCJjZC1kdmQiOkYuQ2xyU2hhcGVDZER2ZCxjb250YWluZXI6Ri5DbHJTaGFwZUNvbnRhaW5lciwiY29udGFpbmVyLXZvbHVtZSI6Ri5DbHJTaGFwZUNvbnRhaW5lclZvbHVtZSwi'@;
put 'ZmlsZS1zaGFyZSI6Ri5DbHJTaGFwZUZpbGVTaGFyZSwicXItY29kZSI6Ri5DbHJTaGFwZVFyQ29kZSx1c2I6Ri5DbHJTaGFwZVVzYixyYWRhcjpGLkNsclNoYXBlUmFkYXIsY2FwYWNpdG9yOkYuQ2xyU2hhcGVDYXBhY2l0b3Isc3F1aWQ6Ri5DbHJTaGFwZVNxdWlkLGluZHVjdG9yOkYuQ2xy'@;
put 'U2hhcGVJbmR1Y3RvcixyZXNpc3RvcjpGLkNsclNoYXBlUmVzaXN0b3IsImhvc3QtZ3JvdXAiOkYuQ2xyU2hhcGVIb3N0R3JvdXAsInN0b3JhZ2UtYWRhcHRlciI6Ri5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyLCJub2RlLWdyb3VwIjpGLkNsclNoYXBlTm9kZUdyb3VwLG5vZGVzOkYuQ2xyU2hh'@;
put 'cGVOb2RlcyxuYW1lc3BhY2U6Ri5DbHJTaGFwZU5hbWVzcGFjZSxub2RlOkYuQ2xyU2hhcGVOb2RlLHBvZDpGLkNsclNoYXBlUG9kLCJtZWRpYS1jaGFuZ2VyIjpGLkNsclNoYXBlTWVkaWFDaGFuZ2VyLCJ0YXBlLWRyaXZlIjpGLkNsclNoYXBlVGFwZURyaXZlLGFuaW1hdGlvbjpGLkNsclNo'@;
put 'YXBlQW5pbWF0aW9uLCJjaS1jZCI6Ri5DbHJTaGFwZUNpQ2QsImZpbGUtc2hhcmUtMiI6Ri5DbHJTaGFwZUZpbGVTaGFyZTJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInNlcnZlciIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXMu'@;
put 'aG9zdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImNvbW1hbmQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLnRlcm1pbmFsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywibW9iaWxlLXBob25l'@;
put 'IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5tb2JpbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJsaWNlbnNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5jZXJ0aWZpY2F0ZSkpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImRpc2Nvbm5lY3RlZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXNbIm5vLXdpZmkiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInJlY2VpdmVyIiwoMCx4LmRl'@;
put 'c2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicGhvbmUtaGFuZHNldCJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZGVzaWduIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicnVsZXItcGVuY2lsIl0pKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJkbmEiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLmhlbGl4KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZm9sZGVyLXNoYXJlIiwoMCx4LmRlc2NyaXB0'@;
put 'b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1siZmlsZS1zaGFyZSJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGVjaG5vbG9neVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50'@;
put 'cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuVGV4dEVkaXRTaGFwZXM9Ri5DbHJTaGFwZVN1cGVyc2NyaXB0PUYuQ2xyU2hhcGVTdWJzY3JpcHQ9Ri5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Ri5DbHJTaGFwZUluZGVudD1GLkNsclNoYXBlT3V0ZGVudD1GLkNsclNoYXBlSGlnaGxpZ2h0'@;
put 'ZXI9Ri5DbHJTaGFwZVRleHRDb2xvcj1GLkNsclNoYXBlTGFuZ3VhZ2U9Ri5DbHJTaGFwZUFsaWduVG9wPUYuQ2xyU2hhcGVBbGlnbk1pZGRsZT1GLkNsclNoYXBlQWxpZ25Cb3R0b209Ri5DbHJTaGFwZVVuZGVybGluZT1GLkNsclNoYXBlVGV4dD1GLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9'@;
put 'Ri5DbHJTaGFwZUJsb2NrUXVvdGU9Ri5DbHJTaGFwZVBhaW50Um9sbGVyPUYuQ2xyU2hhcGVOdW1iZXJMaXN0PUYuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PUYuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1GLkNsclNoYXBlSXRhbGljPUYuQ2xyU2hhcGVBbGlnblJpZ2h0PUYuQ2xyU2hhcGVBbGlnbkxl'@;
put 'ZnQ9Ri5DbHJTaGFwZUFsaWduQ2VudGVyPUYuQ2xyU2hhcGVGb250U2l6ZT1GLkNsclNoYXBlQ2hlY2tib3hMaXN0PUYuQ2xyU2hhcGVDZW50ZXJUZXh0PUYuQ2xyU2hhcGVCdWxsZXRMaXN0PUYuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2Vu'@;
put 'ZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVCb2xkPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi40MywxNy41NGE0LjY3LDQuNjcsMCwwLDAsMi44LTQuMzd2LS4wNmE0LjQzLDQuNDMsMCwwLDAtMS4z'@;
put 'MS0zLjI1LDcuMDksNy4wOSwwLDAsMC01LjEzLTEuNzNoLTdBMS43MSwxLjcxLDAsMCwwLDEwLDkuODZWMjZhMS43MiwxLjcyLDAsMCwwLDEuNzQsMS43NGg3LjMzYzQuMzcsMCw3LjI1LTEuODgsNy4yNS01LjM4VjIyLjNDMjYuMzIsMTkuNjQsMjQuNzMsMTguMzIsMjIuNDMsMTcuNTRaTTEz'@;
put 'LjY4LDExLjRoNC41NGMyLDAsMy4xNS44OSwzLjE1LDIuMzN2LjA2YzAsMS42OC0xLjM2LDIuNDktMy4zOCwyLjQ5SDEzLjY4Wk0yMi4zNywyMmMwLDEuNTktMS4zMSwyLjQzLTMuNDYsMi40M0gxMy42OFYxOS42Mmg1YzIuNDksMCwzLjY5Ljg4LDMuNjksMi4zN1oiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVCdWxsZXRMaXN0PSgwLHguY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjUuMjEiIGN5PSI5LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSI1'@;
put 'LjIxIiBjeT0iMTcuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIyNS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjQyLDlh'@;
put 'MSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlQ2VudGVyVGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuODgs'@;
put 'OEg1LjEyYTEuMSwxLjEsMCwwLDAsMCwyLjJIMzAuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNS41LDE2LjJhMS4xLDEuMSwwLDEsMCwwLTIuMmgtMTVhMS4xLDEuMSwwLDEsMCwwLDIuMloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMC4yNSwyMEg1Ljc1YTEuMSwxLjEsMCwwLDAsMCwyLjJoMjQuNWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBh'@;
put 'dGggZD0iTTI0Ljg4LDI2SDExLjEyYTEuMSwxLjEsMCwxLDAsMCwyLjJIMjQuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVDaGVja2JveExpc3Q9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTMxLjQzLDE2SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMS40MywyNEgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIgLz48cGF0aCBkPSJNMTUuNDUsMTBoMTZhMSwxLDAsMCwwLDAtMmgtMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNSwzLjQyYTEuMDksMS4wOSwwLDAsMC0xLjU1LDBMNy44OSwxMS40OCw0LjUxLDcuODRBMS4x'@;
put 'LDEuMSwwLDEsMCwyLjksOS4zNGw0Ljk0LDUuM0wxNy41LDVBMS4xLDEuMSwwLDAsMCwxNy41LDMuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlRm9udFNpemU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIxLDkuMDhB'@;
put 'MS4xMywxLjEzLDAsMCwwLDE5Ljg2LDhINC42MmExLjEsMS4xLDAsMSwwLDAsMi4xOUgxMVYyN2ExLjA5LDEuMDksMCwwLDAsMi4xNywwVjEwLjE5aDYuNjlBMS4xNCwxLjE0LDAsMCwwLDIxLDkuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0'@;
put 'aCBkPSJNMzAuNjcsMTVIMjEuMTVhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMjVWMjYuNWExLjA5LDEuMDksMCwwLDAsMi4xNywwVjE3LjIzaDMuNTRhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBl'@;
put 'QWxpZ25DZW50ZXI9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDIwSDE5VjE2aDZhMSwxLDAsMCwwLDEtMVY3YTEsMSwwLDAsMC0xLTFIMTlWMmExLDEsMCwwLDAtMiwwVjZIMTFhMSwxLDAsMCwwLTEsMXY4YTEsMSwwLDAsMCwxLDFoNnY0SDVhMSwxLDAsMCwwLTEsMXY4YTEsMSww'@;
put 'LDAsMCwxLDFIMTd2NGExLDEsMCwwLDAsMiwwVjMwSDMxYTEsMSwwLDAsMCwxLTFWMjFBMSwxLDAsMCwwLDMxLDIwWk0xMiwxNFY4SDI0djZaTTMwLDI4SDZWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQWxpZ25MZWZ0'@;
put 'PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDFBMSwxLDAsMCwwLDQsMlYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDUsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwyMEg4VjMwSDMxYTEsMSwwLDAsMCwxLTFW'@;
put 'MjFBMSwxLDAsMCwwLDMxLDIwWm0tMSw4SDEwVjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDE1VjdhMSwxLDAsMCwwLTEtMUg4VjE2SDIzQTEsMSwwLDAsMCwyNCwxNVptLTItMUgxMFY4SDIyWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUFsaWduUmlnaHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDFhMSwxLDAsMCwwLTEsMVYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDMxLDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNCwyMXY4YTEsMSwwLDAsMCwxLDFIMjhWMjBINUExLDEsMCwwLDAsNCwyMVptMiwxSDI2djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMiw3djhhMSwxLDAsMCwwLDEsMUgy'@;
put 'OFY2SDEzQTEsMSwwLDAsMCwxMiw3Wm0yLDFIMjZ2NkgxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVJdGFsaWM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjQyLDhIMTcuMWExLjEsMS4xLDAsMSwwLDAsMi4xOWgy'@;
put 'LjEzTDEzLjExLDI1LjU1SDEwLjQ3YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDE3LjhhMS4xLDEuMSwwLDEsMCwwLTIuMTlIMTUuNTFsNi4xMy0xNS4zNmgyLjc4YTEuMSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5D'@;
put 'bHJTaGFwZUp1c3RpZnlUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDEwLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMkg2YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEuNzUs'@;
put 'MTRINmExLjEsMS4xLDAsMSwwLDAsMi4ySDMxLjc1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzEuMTIsMjBINi42MmExLjEsMS4xLDAsMSwwLDAsMi4yaDI0LjVhMS4xLDEuMSwwLDEsMCwwLTIu'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC40NSwyNS44M0g2LjZhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC40NWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi'@;
put 'IC8+JyksRi5DbHJTaGFwZUFsaWduTGVmdFRleHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjI1LDI2SDZ2Mi4ySDIwLjI1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMjBINnYy'@;
put 'LjJIMjhBMS4xLDEuMSwwLDAsMCwyOCwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi42LDE1LjFBMS4xLDEuMSwwLDAsMCwyMS41LDE0SDZ2Mi4ySDIxLjVBMS4xLDEuMSwwLDAsMCwyMi42LDE1LjFaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjkuMjUsOEg2djIuMkgyOS4yNWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZU51bWJlckxpc3Q9KDAseC5jbHJJY29u'@;
put 'U1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI1LjQ2IDcuNDEgNS40NiAxMS41NiA2LjY1IDExLjU2IDYuNjUgNi4wNSA1LjcgNi4wNSA0LjA1IDcuMTYgNC41MiA4IDUuNDYgNy40MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuNTcsMTQu'@;
put 'ODJhLjc2Ljc2LDAsMCwxLC44My43M2MwLC4zOC0uMjEuNzQtLjg3LDEuMjdsLTIsMS41N3YxSDcuNjdWMTguMjhINS4zM2wxLS43N2MxLS43LDEuMjgtMS4yNywxLjI4LTJhMS44MywxLjgzLDAsMCwwLTItMS43NiwyLjYzLDIuNjMsMCwwLDAtMi4xNCwxLjA4bC43Ni43M0ExLjc1LDEuNzUs'@;
put 'MCwwLDEsNS41NywxNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik02LjU2LDI0LjY0YTEuMzIsMS4zMiwwLDAsMCwxLTEuMjdjMC0uODctLjc4LTEuNTEtMi0xLjUxYTIuNjEsMi42MSwwLDAsMC0yLjEsMWwuNjkuNzJhMS43OCwx'@;
put 'Ljc4LDAsMCwxLDEuMy0uNjRjLjU0LDAsLjkyLjI2LjkyLjY2cy0uMzYuNjItMSwuNjJINC43OXYxaC42NGMuNzQsMCwxLjA3LjIxLDEuMDcuNjNzLS4zNS42OC0xLC42OGEyLDIsMCwwLDEtMS40Ni0uNjVsLS43Ljc4YTIuODUsMi44NSwwLDAsMCwyLjIxLjkzYzEuMjksMCwyLjEzLS42OSwy'@;
put 'LjEzLTEuNjRBMS4zMywxLjMzLDAsMCwwLDYuNTYsMjQuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQYWludFJvbGxlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTBWNGEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNHY2YTIsMiwwLDAsMCwyLDJIMjlBMiwyLDAsMCwwLDMx'@;
put 'LDEwWk02LDRIMjl2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yOUwxOC43LDE2LjU0YTEsMSwwLDAsMC0uNywxVjE5SDE2VjMzYTIsMiwwLDAsMCwyLDJoMmEyLDIsMCwwLDAsMi0yVjE5SDIwdi0uNzNMMzMu'@;
put 'MywxNGExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMCwzM0gxOFYyMWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHJlY3QgeD0iNCIgeT0iMiIgd2lkdGg9IjI3IiBoZWlnaHQ9IjEwIiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yNEwxOC43MSwxNi40NWExLDEsMCwwLDAtLjcxLDFWMTlIMTZWMzRhMSwxLDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTlIMjB2LS44MkwzMy4yOSwxNEExLDEsMCwwLDAsMzQsMTNWN0ExLDEsMCww'@;
put 'LDAsMzMsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJsb2NrUXVvdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTExLjg2LDE2LjU1YTQuMzEsNC4zMSwwLDAsMC0yLjExLjU2LDE0LjQ0LDE0LjQ0LDAsMCwxLDQuMzYtNiwx'@;
put 'LjEsMS4xLDAsMCwwLTEuNC0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NEE1LjA4LDUuMDgsMCwwLDAsMTAsMjQuNThhNC40LDQuNCwwLDAsMCwxLjg4LjQ0LDQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNMjMsMTYuNTVhNC4yOSw0LjI5LDAsMCwwLTIuMTEuNTYsMTQuNSwxNC41LDAsMCwxLDQuMzUtNiwxLjEsMS4xLDAsMSwwLTEuMzktMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRhNS4wOCw1LjA4LDAsMCwwLDMsNC42MUE0LjM3LDQuMzcsMCwwLDAsMjMsMjVh'@;
put 'NC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNjUsMjcuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMjZI'@;
put 'MTUuNzVBMS4xLDEuMSwwLDAsMCwxNC42NSwyNy4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYuOSwyMS4xQTEuMSwxLjEsMCwwLDAsOCwyMi4ySDMwVjIwSDhBMS4xLDEuMSwwLDAsMCw2LjksMjEuMVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMy40LDE1LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjE0SDE0LjVBMS4xLDEuMSwwLDAsMCwxMy40LDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJN'@;
put 'Ni43NSw4YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzBWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xOSw4Ljg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMWgtLjEyYTEu'@;
put 'NDYsMS40NiwwLDAsMC0xLjQyLDFMMS4xNCwyNi41NmExLjI5LDEuMjksMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMiwxLjEyLDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4w'@;
put 'OCwxLjY0LDEuNjQsMCwwLDAtLjE0LS41N1pNNi4wOCwyMC43MWw0LjU5LTEwLjIyLDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yNCwxNC43OEE2LjM1LDYuMzUsMCwwLDAsMjcuNiwxMy4yYTExLjM2LDExLjM2'@;
put 'LDAsMCwwLTQuNywxLDEsMSwwLDAsMC0uNTguODksMSwxLDAsMCwwLC45NC45MiwxLjIzLDEuMjMsMCwwLDAsLjM5LS4wOCw4Ljg3LDguODcsMCwwLDEsMy43Mi0uODFjMi43LDAsNC4yOCwxLjMzLDQuMjgsMy45MnYuNWExNS4yOSwxNS4yOSwwLDAsMC00LjQyLS42MWMtMy42NCwwLTYuMTQs'@;
put 'MS42MS02LjE0LDQuNjR2LjA1YzAsMi45NSwyLjcsNC40OCw1LjM3LDQuNDhhNi4yOSw2LjI5LDAsMCwwLDUuMTktMi40OFYyNi45YTEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEtMS4wNlYxOUE1LjcxLDUuNzEsMCwwLDAsMzIuMjQsMTQuNzhabS0uNTYsNy43YzAsMi4yOC0yLjE3LDMuODkt'@;
put 'NC44MSwzLjg5LTEuOTQsMC0zLjYxLTEuMDYtMy42MS0yLjg2di0uMDZjMC0xLjgsMS41LTMsNC4yLTNhMTUuMiwxNS4yLDAsMCwxLDQuMjIuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlVW5kZXJsaW5lPSgwLHguY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik0xOCwyOC4xN2M1LjA4LDAsOC40OC0zLjA4LDguNDgtOVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44YzAsNC40NC0yLjM4LDYuNzEtNi4xMyw2Ljcxcy02LjIxLTIuNDctNi4yMS02Ljg1VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhDOS41'@;
put 'MywyNS4wOSwxMywyOC4xNywxOCwyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwzMEg1YTEuMTEsMS4xMSwwLDAsMCwwLDIuMjFIMzFBMS4xMSwxLjExLDAsMCwwLDMxLDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFsaWduQm90dG9tPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwzMEgyYTEsMSwwLDAsMCwwLDJIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik0xNiw1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjI4SDE2Wk0xNCwyNkg4VjZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwxM2ExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDFWMjhIMzBaTTI4LDI2'@;
put 'SDIyVjE0aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWxpZ25NaWRkbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDMwVjExYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAsMCwwLTEsMXY2SDE2VjVhMSwxLDAs'@;
put 'MCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMTdIMmExLDEsMCwwLDAsMCwySDZWMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNHY2YTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjE5aDRhMSwxLDAsMCwwLDAtMlpNMTQsMzBIOFY2aDZabTE0LTZIMjJWMTJoNloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVBbGlnblRvcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsNEgyQTEsMSwwLDAsMCwyLDZIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhINlpNOCwxMGg2VjMwSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMjNhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwx'@;
put 'LTFWOEgyMFptMi0xM2g2VjIySDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUxhbmd1YWdlPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzSDE0djVoMlY1aDE0YzAuNiwwLDEsMC40LDEsMXYxMWMwLDAuNi0wLjQs'@;
put 'MS0xLDFIMTd2N2gtNS4zTDgsMjcuOVYyNUg1Yy0wLjYsMC0xLTAuNC0xLTFWMTNjMC0wLjYsMC40LTEsMS0xaDEzdi0ySDVcblx0XHRjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUuMUgxOXYtN2gxMWMxLjcsMCwzLTEuMywzLTNWNkMzMyw0LjMsMzEu'@;
put 'NywzLDMwLDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi4yLDIyLjloMi40bDAuNi0xLjZoMy4xbDAuNiwxLjZoMi40TDExLjksMTRIOS41TDYuMiwyMi45eiBNMTAuNywxNi41bDEsMy4xaC0yTDEwLjcsMTYuNXoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwxN2MxLjEsMCwyLjYtMC4zLDQtMWMxLjQsMC43LDMsMSw0LDF2LTJjMCwwLTEsMC0yLjEtMC40YzEuMi0xLjIsMi4xLTMsMi4xLTUuNlY4aC0zVjZoLTJ2MmgtM3YyaDUuOVxuXHRcdGMtMC4yLDEuOC0x'@;
put 'LDIuOS0xLjksMy42Yy0wLjYtMC41LTEuMi0xLjItMS42LTIuMWgtMi4xYzAuNCwxLjMsMSwyLjMsMS44LDMuMUMyMS4xLDE1LDIwLjIsMTUsMjAsMTVWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cG9seWdvbiBwb2ludHM9IjExLDE2LjUgMTAs'@;
put 'MTkuNiAxMiwxOS42IDExLDE2LjUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjMsM2gtMTZ2NWg0djJoLTEzYy0xLjcsMC0zLDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFoNi43di03aDExYzEuNywwLDMt'@;
put 'MS4zLDMtM1Y2XG5cdFx0QzMzLjMsNC4zLDMyLDMsMzAuMywzeiBNMTMuMSwyMi45bC0wLjUtMS42SDkuNWwtMC42LDEuNkg2LjVMOS44LDE0aDIuNGwzLjMsOC45TDEzLjEsMjIuOXogTTI4LjMsMTV2MmMtMS4zLDAtMi43LTAuNC0zLjktMVxuXHRcdGMtMS4yLDAuNi0yLjYsMC45LTQsMWwt'@;
put 'MC4xLTJjMC43LDAsMS40LTAuMSwyLjEtMC4zYy0wLjktMC45LTEuNS0yLTEuOC0zLjJoMi4xYzAuMywwLjksMC45LDEuNiwxLjYsMi4yYzEuMS0wLjksMS44LTIuMiwxLjktMy43XG5cdFx0aC02VjhoM1Y2aDJ2MmgzLjNsMC4xLDFjMC4xLDIuMS0wLjcsNC4yLTIuMiw1LjdDMjcuMSwxNC45'@;
put 'LDI3LjcsMTUsMjguMywxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVRleHRDb2xvcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTkuNDcsMy44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFIMThhMS40NSwxLjQ1LDAsMCwwLTEu'@;
put 'NDIsMUw4LjQyLDIxLjU2YTEuMzUsMS4zNSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjExLDEuMTEsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNTksMS41OSwwLDAs'@;
put 'MC0uMTQtLjU3Wk0xMy4zNiwxNS43MSwxOCw1LjQ5bDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjQuMDYiIHk9IjI1IiB3aWR0aD0iMjgiIGhlaWdodD0iOCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVIaWdobGlnaHRlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuODIsMjYuMDZhMSwxLDAsMCwxLS43MS0uMjlMOC42NywxOS4zM2ExLDEsMCwwLDEtLjI5LS43MSwxLDEsMCwwLDEsLjI5LS43MUwyMywzLjU0'@;
put 'YTUuNTUsNS41NSwwLDEsMSw3Ljg1LDcuODZMMTYuNTMsMjUuNzdBMSwxLDAsMCwxLDE1LjgyLDI2LjA2Wm0tNS03LjQ0LDUsNUwyOS40OCwxMGEzLjU0LDMuNTQsMCwwLDAsMC01LDMuNjMsMy42MywwLDAsMC01LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MSIvPlxuICA8cGF0aCBkPSJNMTAuMzgsMjguMjhBMSwxLDAsMCwxLDkuNjcsMjhMNi40NSwyNC43N2ExLDEsMCwwLDEtLjIyLTEuMDlsMi4yMi01LjQ0YTEsMSwwLDAsMSwxLjYzLS4zM2w2LjQ1LDYuNDRBMSwxLDAsMCwxLDE2LjIsMjZsLTUuNDQsMi4yMkExLjMzLDEuMzMsMCwwLDEsMTAu'@;
put 'MzgsMjguMjhaTTguMzMsMjMuODJsMi4yOSwyLjI4LDMuNDMtMS40TDkuNzQsMjAuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNOC45NCwzMGgtNWExLDEsMCwwLDEtLjg0LTEuNTVsMy4yMi00Ljk0YTEsMSwwLDAsMSwxLjU1'@;
put 'LS4xNmwzLjIxLDMuMjJhMSwxLDAsMCwxLC4wNiwxLjM1TDkuNywyOS42NEExLDEsMCwwLDEsOC45NCwzMFpNNS43OCwyOEg4LjQ3TDksMjcuMzRsLTEuNy0xLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIzLjA2IiB5PSIzMSIg'@;
put 'd2lkdGg9IjMwIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+JyksRi5DbHJTaGFwZU91dGRlbnQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5'@;
put 'aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTkuNTYsMjIuNTRhMSwxLDAsMCwxLS43LS4z'@;
put 'TDQuNjEsMThsNC4yNS00LjI0YTEsMSwwLDAsMSwxLjQxLDEuNDFMNy40NCwxOGwyLjgzLDIuODNhMSwxLDAsMCwxLS43MSwxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxGLkNsclNoYXBlSW5kZW50PSgwLHguY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI0aC0xN2Ex'@;
put 'LDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik01LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0xLjcxTDcuNjgsMTgsNC44NiwxNS4xN2ExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQxLDBMMTAuNTEsMTgsNi4yNywyMi4yNEExLDEsMCwwLDEsNS41NiwyMi41NFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksRi5DbHJTaGFwZVN0cmlrZXRocm91Z2g9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjg4LDE5LjkyaC0zMGExLDEsMCwxLDEsMC0yaDMwYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy4yNywxNS44NmExMi45LDEyLjksMCwwLDEsMS4yOS0uNTJBNS42OSw1LjY5LDAsMCwxLDEwLjM5LDE1YTMuMTgsMy4xOCwwLDAsMSwyLjc1LDEuMTFBNC40NCw0LjQ0LDAsMCwxLDE0LDE4Ljg1di40OWExMy44MywxMy44MywwLDAsMC00'@;
put 'LjI5LS43NCw2LjE5LDYuMTksMCwwLDAtMi41OS41NEE1LDUsMCwwLDAsNS44MSwyMEgxNS44OFYxOC44NWE1LjY3LDUuNjcsMCwwLDAtMS4zNy00LDUuMTYsNS4xNiwwLDAsMC00LTEuNDksMTAsMTAsMCwwLDAtMy45MS44OC44Ny44NywwLDAsMC0uNDQsMS4xOEEuODQuODQsMCwwLDAsNy4y'@;
put 'NywxNS44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMSwyMGE1Ljk0LDUuOTQsMCwwLDEsLjU0LTIuMzEsNC4zNSw0LjM1LDAsMCwxLDEuNTgtMS44Myw0LjI3LDQuMjcsMCwwLDEsNC41OSwwLDQuNDcsNC40NywwLDAsMSwx'@;
put 'LjU3LDEuODNBNi4xMiw2LjEyLDAsMCwxLDI5Ljg1LDIwaDJhNy43Myw3LjczLDAsMCwwLS43OC0zLjE5LDYsNiwwLDAsMC0yLjE4LTIuNDUsNS43NCw1Ljc0LDAsMCwwLTMuMS0uODgsNS4zOSw1LjM5LDAsMCwwLTIuOC43Myw1LjU1LDUuNTUsMCwwLDAtMiwyLjA1VjEwYS44Ny44NywwLDAs'@;
put 'MC0uODYtLjg2SDIwYS44Ny44NywwLDAsMC0uODYuODZWMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjkuNjcsMjJhNS42MSw1LjYxLDAsMCwxLS4zNiwxLjA3LDQuNDcsNC40NywwLDAsMS0xLjU3LDEuODUsNC4zMiw0LjMy'@;
put 'LDAsMCwxLTQuNTksMCw0LjM1LDQuMzUsMCwwLDEtMS41OC0xLjg1QTUuNjQsNS42NCwwLDAsMSwyMS4yLDIySDE5LjA5djQuMTNBLjg3Ljg3LDAsMCwwLDIwLDI3aC4yYS44Ny44NywwLDAsMCwuODYtLjg2VjI0LjUxYTUuNTgsNS41OCwwLDAsMCwyLDIuMDYsNS40OCw1LjQ4LDAsMCwwLDIu'@;
put 'OC43Miw1LjY2LDUuNjYsMCwwLDAsMy4xLS44OEE1Ljg4LDUuODgsMCwwLDAsMzEuMDksMjQsNy4wOSw3LjA5LDAsMCwwLDMxLjczLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE0LDIydi43NmEzLjM0LDMuMzQsMCwwLDEt'@;
put 'MS42MiwyLDUuMzQsNS4zNCwwLDAsMS0yLjY5LjcyLDMuNzgsMy43OCwwLDAsMS0yLjM2LS43LDIuMjQsMi4yNCwwLDAsMS0uOTQtMS45LDIuMjksMi4yOSwwLDAsMSwuMi0uOTFINC42MmE0LDQsMCwwLDAtLjEzLDEsMy44MywzLjgzLDAsMCwwLDEuMzUsMy4wNkE1LjE1LDUuMTUsMCwwLDAs'@;
put 'OS4zMSwyNy4yLDYsNiwwLDAsMCwxMiwyNi41N2E0LjYyLDQuNjIsMCwwLDAsMi0xLjc0VjI2YS44Ni44NiwwLDAsMCwuODYuODZIMTVhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVTdWJz'@;
put 'Y3JpcHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjU1LDE4bDYuOCw4LjZhMS4xNywxLjE3LDAsMCwxLS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NEwxMywxOS45MSw2LjYsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45'@;
put 'TDExLjU1LDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4xNywxLjE3LDAsMCwxLDYuNjMsOGw2LjQ0LDguMTNMMTkuNSw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwxLC45MiwxLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjMsMzEuOCwyNy40OSwyOGE5LjksOS45LDAsMCwwLDEuODgtMi4wNUEzLjQ0LDMuNDQsMCwwLDAsMzAsMjRhMi4zNSwyLjM1LDAsMCwwLS4zNS0xLjI3LDIuNDQsMi40NCwwLDAsMC0xLS44NCwyLjksMi45LDAsMCwwLTEuMjYtLjI4LDMu'@;
put 'MzYsMy4zNiwwLDAsMC0xLjgzLjUsNS42NCw1LjY0LDAsMCwwLTEuNDgsMS40MmwtMS0uODFhNS4xMSw1LjExLDAsMCwxLDQuMzYtMi4zNyw0LjM1LDQuMzUsMCwwLDEsMiwuNDUsMy40MywzLjQzLDAsMCwxLDIsMy4xOCw0LjQ1LDQuNDUsMCwwLDEtLjY4LDIuMzUsMTAuOSwxMC45LDAsMCwx'@;
put 'LTIuMjQsMi40NmwtMy4yNCwyLjgxSDMxLjVWMzNIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVTdXBlcnNjcmlwdD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNDMsMThsNi43OSw4LjZhMS4xNywxLjE3LDAsMCwx'@;
put 'LS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NGwtNi40NC04LjEzTDYuNDcsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45TDExLjQzLDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4yLDEuMiwwLDAsMSw2LjUx'@;
put 'LDhsNi40Myw4LjEzTDE5LjM4LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMi44NSwxNC40N2w0LjUxLTMuODVhOS4zNyw5LjM3LDAs'@;
put 'MCwwLDEuODgtMiwzLjQzLDMuNDMsMCwwLDAsLjU5LTEuODYsMi4yNywyLjI3LDAsMCwwLS4zNi0xLjI3LDIuMzgsMi4zOCwwLDAsMC0uOTUtLjgzLDIuNzcsMi43NywwLDAsMC0xLjI2LS4yOSwzLjM5LDMuMzksMCwwLDAtMS44My41LDUuODMsNS44MywwLDAsMC0xLjQ5LDEuNDJsLTEtLjgx'@;
put 'YTUuMTIsNS4xMiwwLDAsMSw0LjM2LTIuMzcsNC4zNiw0LjM2LDAsMCwxLDIsLjQ1LDMuNDcsMy40NywwLDAsMSwyLDMuMThBNC40NCw0LjQ0LDAsMCwxLDMwLjU4LDlhMTEuMTQsMTEuMTQsMCwwLDEtMi4yNCwyLjQ2TDI1LjEsMTQuMzFoNi4yOHYxLjMzSDIyLjg1WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxGLlRleHRFZGl0U2hhcGVzPXtib2xkOkYuQ2xyU2hhcGVCb2xkLCJidWxsZXQtbGlzdCI6Ri5DbHJTaGFwZUJ1bGxldExpc3QsImNoZWNrYm94LWxpc3QiOkYuQ2xyU2hhcGVDaGVja2JveExpc3QsIm51bWJlci1saXN0IjpGLkNs'@;
put 'clNoYXBlTnVtYmVyTGlzdCwiZm9udC1zaXplIjpGLkNsclNoYXBlRm9udFNpemUsaXRhbGljOkYuQ2xyU2hhcGVJdGFsaWMsImp1c3RpZnktdGV4dCI6Ri5DbHJTaGFwZUp1c3RpZnlUZXh0LCJjZW50ZXItdGV4dCI6Ri5DbHJTaGFwZUNlbnRlclRleHQsImFsaWduLWxlZnQtdGV4dCI6Ri5D'@;
put 'bHJTaGFwZUFsaWduTGVmdFRleHQsImFsaWduLXJpZ2h0LXRleHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dCwicGFpbnQtcm9sbGVyIjpGLkNsclNoYXBlUGFpbnRSb2xsZXIsImJsb2NrLXF1b3RlIjpGLkNsclNoYXBlQmxvY2tRdW90ZSx0ZXh0OkYuQ2xyU2hhcGVUZXh0LHVuZGVybGlu'@;
put 'ZTpGLkNsclNoYXBlVW5kZXJsaW5lLCJhbGlnbi1jZW50ZXIiOkYuQ2xyU2hhcGVBbGlnbkNlbnRlciwiYWxpZ24tbGVmdCI6Ri5DbHJTaGFwZUFsaWduTGVmdCwiYWxpZ24tcmlnaHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0LCJhbGlnbi1ib3R0b20iOkYuQ2xyU2hhcGVBbGlnbkJvdHRvbSwi'@;
put 'YWxpZ24tbWlkZGxlIjpGLkNsclNoYXBlQWxpZ25NaWRkbGUsImFsaWduLXRvcCI6Ri5DbHJTaGFwZUFsaWduVG9wLGxhbmd1YWdlOkYuQ2xyU2hhcGVMYW5ndWFnZSwidGV4dC1jb2xvciI6Ri5DbHJTaGFwZVRleHRDb2xvcixoaWdobGlnaHRlcjpGLkNsclNoYXBlSGlnaGxpZ2h0ZXIsaW5k'@;
put 'ZW50OkYuQ2xyU2hhcGVJbmRlbnQsb3V0ZGVudDpGLkNsclNoYXBlT3V0ZGVudCxzdHJpa2V0aHJvdWdoOkYuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoLHN1YnNjcmlwdDpGLkNsclNoYXBlU3Vic2NyaXB0LHN1cGVyc2NyaXB0OkYuQ2xyU2hhcGVTdXBlcnNjcmlwdH0sdHlwZW9mIHdpbmRvdzwi'@;
put 'dSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGV4dEVkaXRTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLlRyYXZlbFNoYXBlcz1GLkNsclNoYXBlT25Ib2xpZGF5PUYuQ2xyU2hhcGVU'@;
put 'cmFpbGVyPUYuQ2xyU2hhcGVGZXJyeT1GLkNsclNoYXBlQ2FyYXZhbj1GLkNsclNoYXBlQ2FtcGVydmFuPUYuQ2xyU2hhcGVCb2F0PUYuQ2xyU2hhcGVCaWN5Y2xlPUYuQ2xyU2hhcGVNYXBNYXJrZXI9Ri5DbHJTaGFwZUNvbXBhc3M9Ri5DbHJTaGFwZU1hcD1GLkNsclNoYXBlQ2FyPUYuQ2xy'@;
put 'U2hhcGVBaXJwbGFuZT1GLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJh'@;
put 'dG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVUcnVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCww'@;
put 'LTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMTkuN2E2LjQ1LDYuNDUsMCwwLDEsMS41Ni0uMmMuMTUsMCwuMjksMCwuNDQsMFYxNGg0YTIsMiwwLDAsMSwyLDJ2MUgyOHYyaDR2NUgyOS42YTQuNTQsNC41NCwwLDAsMC04LjM0LDBIMTQuNDNhNC41LDQuNSww'@;
put 'LDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDksNC40OSwwLDAsMCw4LjkyLDBIMzNhMSwxLDAsMCwwLDEtMVYxNkE0LDQsMCwwLDAsMzAsMTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcs'@;
put 'MGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQzLDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwx'@;
put 'LDAsMCwwLDEsMUg0VjhIMjRWMjEuNDlBNC40NSw0LjQ1LDAsMCwwLDIxLjI1LDI0SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ4LDQuNDgsMCwwLDAsOC45MSwwSDM0VjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4z'@;
put 'OCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDIsMjhaTTMyLDE3SDI2VjE0aDRhMiwyLDAsMCwxLDIsMloiLz4nKSxGLkNsclNoYXBlQWlycGxhbmU9KDAsbS5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS43Nyw4LjE2YTIuNDMsMi40MywwLDAsMC0xLjktMkwyOCw0Ljg3YTQuNSw0LjUsMCwwLDAtMy42NS43OUw3LDE4LjMsMi4xNCwxOC4xQTEuODYsMS44NiwwLDAsMCwuOTEsMjEu'@;
put 'NDFsNSwzLjkzYy42LjczLDEsLjU5LDEwLjkzLTQuODJsLjkzLDkuNDJhMS4zNiwxLjM2LDAsMCwwLC44NSwxLjE4LDEuNDMsMS40MywwLDAsMCwuNTQuMSwxLjU0LDEuNTQsMCwwLDAsMS0uNDFsMi4zOS0yLjE4YTEuNTIsMS41MiwwLDAsMCwuNDYtLjgzTDI1LjIsMTUuOWMzLjU3LTIsNi45'@;
put 'NS0zLjg4LDkuMzYtNS4yNUEyLjQzLDIuNDMsMCwwLDAsMzUuNzcsOC4xNlptLTIuMi43NWMtMi41LDEuNDItNiwzLjQxLTkuNzYsNS40N2wtLjQxLjIzTDIxLjA3LDI3LjI4bC0xLjQ3LDEuMzRMMTguNSwxNy4zMiwxNy4xNywxOEMxMCwyMiw3LjYxLDIzLjE2LDYuNzksMjMuNTJsLTQuMy0z'@;
put 'LjQxLDUuMDguMjIsMTgtMTMuMDZhMi41MSwyLjUxLDAsMCwxLDItLjQ1bDUuODUsMS4yNmEuNDMuNDMsMCwwLDEsLjM1LjM3QS40Mi40MiwwLDAsMSwzMy41Nyw4LjkxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9'@;
put 'Ik03LDEyLjU0bDMuNTYsMSwxLjY0LTEuMTktNC0xLjE2TDEwLDEwLjA5bDUuNDctLjE2LDIuMy0xLjY3TDEwLDguNWExLjI1LDEuMjUsMCwwLDAtLjcuMTdMNi42NywxMC4yQTEuMjgsMS4yOCwwLDAsMCw3LDEyLjU0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTYuMjUsMTEuNSwxMiwxMy4xNmw2LjMyLTQuNTktOS4wNy4yNkEuNTIuNTIsMCwwLDAsOSw4LjkxTDYuMTMsMTAuNTZBLjUxLjUxLDAsMCwwLDYuMjUsMTEuNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTIiIGQ9Ik0zNC41Miw2LjM2LDI4LjIyLDVhMy43OCwzLjc4LDAsMCwwLTMuMDcuNjdMNi4xMiwxOS41bC00LjU3LS4yYTEuMjUsMS4yNSwwLDAsMC0uODMsMi4yMmw0LjQ1LDMuNTNhLjU1LjU1LDAsMCwwLC41My4wOWMxLjI3LS40OSw2LTMsMTEuNTktNi4wN2wxLjEyLDEx'@;
put 'LjUxYS41NS41NSwwLDAsMCwuOS4zN2wyLjUtMi4wOGEuNzYuNzYsMCwwLDAsLjI2LS40NWwyLjM3LTEzLjI5YzQtMi4yMiw3LjgyLTQuMzcsMTAuNTEtNS44OUExLjU1LDEuNTUsMCwwLDAsMzQuNTIsNi4zNloiLz4nKSxGLkNsclNoYXBlQ2FyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LjQ1LDE0LjE3QTIyLjEs'@;
put 'MjIuMSwwLDAsMCwxOS4zOCw3YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40Ny0uMTQuOTItLjIsMS4zNkE0LDQsMCwwLDAsMiwxOHY2LjEzYTIsMiwwLDAsMCwyLDJWMjBINFYxOGEyLDIsMCwwLDEsMi0ySDI0LjczQTcuMjgsNy4yOCwwLDAsMSwz'@;
put 'MiwyMy4yN1YyNGgtMmE0LjUzLDQuNTMsMCwxLDAsLjMzLDJIMzJhMiwyLDAsMCwwLDItMnYtLjczQTkuMjgsOS4yOCwwLDAsMCwyNi40NSwxNC4xN1pNMTEsMTRINi45M2MwLS4zMS4wOS0uNjMuMTUtMUE2LjUyLDYuNTIsMCwwLDEsMTEsOGgwWm0yLDBWNy41OGE4LjE3LDguMTcsMCwwLDEs'@;
put 'NS4zNiwxLjE2QTE5LDE5LDAsMCwxLDIzLjksMTRaTTI1LjgsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjUuOCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0'@;
put 'LjE3LDI0YTQuNTMsNC41MywwLDEsMCwuMzMsMmg1LjNjMC0uMDgsMC0uMTcsMC0uMjVBNiw2LDAsMCwxLDIwLDI0Wk0xMCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYuODcsMTQuMjhBMjIuMzYsMjIuMzYsMCwwLDAsMTkuNjUsNi45YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40OS0uMTUsMS0uMjEsMS40aC0xQTIuNTksMi41OSwwLDAsMCwyLDE2LjU5djguNTVh'@;
put 'Ljg2Ljg2LDAsMCwwLC44Ni44Nkg0LjU5YzAtLjEzLDAtLjI2LDAtLjM5YTUuNzcsNS43NywwLDAsMSw3LjcxLTUuNDVsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwxNC44MiwyNmg1LjQ4YzAtLjEzLDAtLjI2LDAtLjM5QTUu'@;
put 'NzcsNS43NywwLDAsMSwyOCwyMC4xNmwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDMwLjUzLDI2aDIuNjFhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjMuMzZBOS4zOSw5LjM5LDAsMCwwLDI2Ljg3LDE0LjI4Wk0xMiwxNEg4YzAt'@;
put 'LjM1LjEtLjcxLjE2LTEuMDdhNi41Miw2LjUyLDAsMCwxLDMuODctNWgwWk0xMC4zNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMC4zNiwyOC4zNlpNMTksMTlIMTZWMTdoM1ptLTYtNVY3LjQ3YTguMTYsOC4xNiwwLDAsMSw1LjQsMS4xNUExOS4xNSwxOS4x'@;
put 'NSwwLDAsMSwyNCwxNFpNMjYuMDYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjYuMDYsMjguMzZaIi8+JyksRi5DbHJTaGFwZU1hcD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i'@;
put 'TTMzLjU5LDYuMTlBMSwxLDAsMCwwLDMyLjcsNkwyMy4wOSw5LDEzLjQ2LDQuMTFhMSwxLDAsMCwwLS44NCwwTDIuNjIsOC4yQTEsMSwwLDAsMCwyLDkuMTNWMjkuNjFhMSwxLDAsMCwwLDEuMzguOTJMMTMsMjYuNThsOS41OSw0LjkyYTEsMSwwLDAsMCwuNDYuMTEsMSwxLDAsMCwwLC4zLDBs'@;
put 'MTAtMy4xMmExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMy41OSw2LjE5Wk0zMiwyNi43NWwtOC4zMiwyLjZWMjcuMDZoLTEuNnYybC04LjQtNC4zMVYyMy4wNmgtMS42djEuNzJMNCwyOC4xMVY5Ljc5bDguMDgtMy4zM1Y4LjgxaDEuNlY2LjQ3bDguNCw0LjN2Mi4xaDEuNlYxMUwzMiw4'@;
put 'LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMi4wOCIgeT0iMTUuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyMi4wOCIgeT0iMjEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi4wOCIgeT0iMTEuMDYiIHdpZHRoPSIx'@;
put 'LjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMi4wOCIgeT0iMTcuMTMiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy43NSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy4zMSw3LjM1LDI1LDkuOTRWMTRIMjNWMTAuMjlMMTQsNS42OFY5SDEyVjUuMjdsLTkuNjcsNEEuNTMuNTMsMCwwLDAsMiw5Ljc1VjMwLjQ1YS41My41MywwLDAsMCwuNzQuNDlMMTIsMjcuMTJWMjNoMnY0LjUzbDksNC42MVYy'@;
put 'OGgydjMuNzlsOC42My0yLjdhLjUzLjUzLDAsMCwwLC4zNy0uNTFWNy44NkEuNTMuNTMsMCwwLDAsMzMuMzEsNy4zNVpNMTQsMjFIMTJWMTdoMlptMC02SDEyVjExaDJaTTI1LDI2SDIzVjIyaDJabTAtNkgyM1YxNmgyWiIvPicpLEYuQ2xyU2hhcGVDb21wYXNzPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGQ9Ik0yMC44MiwxNS4zMWgwTDEwLjQ2LDljLS40Ni0uMjYtMS4xMS4zNy0uODYuODRsNi4xNSwxMC41NiwxMC41Niw2LjE1YS42Ni42NiwwLDAsMCwuODQtLjg2Wm0tNCw0LDMtMyw0LjU1LDcuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTEsMjkuOTVWMjkuNTNIMTd2Mi40MkExNCwxNCwwLDAsMSw0LjA1LDE5SDYuNDdWMTdINC4wNUExNCwxNCwwLDAsMSwxNyw0LjA1VjYuNDdoMlY0LjA1QTE0LDE0LDAsMCwx'@;
put 'LDMxLjk1LDE3SDI5LjUzdjJoMi40MkExNCwxNCwwLDAsMSwxOSwzMS45NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNi40NywxOUg0'@;
put 'LjA1YzAtLjMzLS4wNS0uNjYtLjA1LTFzMC0uNjcuMDUtMUg2LjQ3Wk0xNyw0LjA1Yy4zMywwLC42Ni0uMDUsMS0uMDVzLjY3LDAsMSwuMDVWNi40N0gxN1ptMiwyNy45Yy0uMzMsMC0uNjYuMDUtMSwuMDVzLS42NywwLTEtLjA1VjI5LjUzaDJabTgtNS41OGEuNTkuNTksMCwwLDEtLjY5LjE2'@;
put 'TDE1Ljc1LDIwLjM4LDkuNiw5LjgyYy0uMjUtLjQ3LjM5LTEuMS44Ni0uODRsMTAuMzcsNi4zM2gwbDYuMzMsMTAuMzdBLjU5LjU5LDAsMCwxLDI3LDI2LjM3Wk0yOS41MywxOVYxN2gyLjQyYzAsLjMzLjA1LjY2LjA1LDFzMCwuNjctLjA1LDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNi43NyAxOS4zNSAyNC4zNSAyMy43NyAxOS44IDE2LjMzIDE2Ljc3IDE5LjM1IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNYXBNYXJrZXI9KDAsbS5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43'@;
put 'MywwLDAsMSwxOCwxNi4xN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTEuNzksMTEuNzksMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYx'@;
put 'LDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwxMS43OSwwLDAsMCwxOCwyWk0yMy41OSwyNGwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45'@;
put 'LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFhOS43OCw5Ljc4LDAsMSwxLDE5LjU2LDBDMjcuNzgsMTcuNzksMjUuMzYsMjEuNCwyMy41OSwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43MywwLDAsMSwxOCwxNi4x'@;
put 'N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40OWE3LjQ5LDcuNDksMCwwLDEtMi0uMzNjMCwuMTksMCwuMzgsMCwuNTcsMCw0LjA2LTIuNDIsNy42Ny00LjE5'@;
put 'LDEwLjMxbC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMUE5Ljc3LDkuNzcsMCwwLDEsMjIuNTYsNS4wOWE3LjQ1LDcuNDUsMCwwLDEsLjUyLTJBMTEuNzUs'@;
put 'MTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43'@;
put 'OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5'@;
put 'OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlptMCwxN2E2LjU2LDYuNTYsMCwxLDEsNi41Ni02LjU2QTYuNTYsNi41NiwwLDAsMSwxOCwxOVoiLz5cbiAgICAgICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40'@;
put 'OUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzgsMTFhNi41OCw2LjU4LDAsMSwxLTEuNjEtMyw3LjQyLDcuNDIsMCwwLDEsLjMxLTQuODRBMTEuNzUsMTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwu'@;
put 'NzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9'@;
put 'IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmljeWNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOC41LDI5LjY1QTYuNTEsNi41MSwwLDAsMSwyLDIzLjE1YTYuMzksNi4zOSwwLDAsMSw2LjUtNi4zNkE2LjM5LDYuMzksMCwwLDEsMTUsMjMuMTUsNi41MSw2LjUxLDAsMCwxLDguNSwy'@;
put 'OS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDguNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNy41LDI5LjY1YTYuNTEsNi41MSwwLDAsMS02LjUtNi41LDYuNSw2LjUsMCwwLDEs'@;
put 'MTMsMEE2LjUxLDYuNTEsMCwwLDEsMjcuNSwyOS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDI3LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjQuNjZIOGExLDEsMCwwLDEt'@;
put 'Ljg5LTEuNDVsNS0xMCwxLjc4LjlMOS42MiwyMi43M0gxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjEzIiB5PSIxMi42OCIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuOTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00IiAvPjxwYXRoIGQ9Ik0yOCwyNC42NmExLDEsMCwwLDEtLjk0LS42NkwyMi4yOSwxMC42NkgyMGExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLS45M2gzYS45NC45NCwwLDAsMSwuOTQuNmw1LDE0YTEsMSwwLDAsMS0uNiwxLjI3QTEsMSwwLDAsMSwyOCwyNC42NloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0xMywxNC42NmExLDEsMCwwLDEtLjcxLS4yOWwtMS43LTEuNzFIOGExLDEsMCwwLDEtMS0xLC45NC45NCwwLDAsMSwxLTFoM2ExLjA4LDEuMDgsMCwwLDEsLjc1LjI3bDIsMmExLDEsMCwwLDEsMCwxLjQxQTEs'@;
put 'MSwwLDAsMSwxMywxNC42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0xNSwyMS45Yy0wLjItMi0xLjItMy44LTIuOS00LjlsLTIuNSw0LjlIMTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik03LjIsMjMuNGMtMC4yLTAuMy0wLjItMC43LDAtMWwzLjItNi4zYy0wLjYtMC4yLTEuMi0wLjItMS44LTAuMkM1LDE1LjksMiwxOC44LDIsMjIuNGMwLDMuNiwyLjksNi41LDYuNSw2LjVcblx0YzMsMCw1LjYtMi4xLDYuMy01SDhDNy43LDIzLjksNy4zLDIzLjcsNy4yLDIzLjR6IiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyMS45aC00YzAsMC4yLDAsMC4zLDAsMC41YzAsMC41LTAuMSwxLTAuMiwxLjVIMTlWMjEuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI3LjUs'@;
put 'MTUuOWMtMC4zLDAtMC42LDAtMC45LDAuMWwyLjQsNi42YzAuMiwwLjUtMC4xLDEuMS0wLjYsMS4zYy0wLjEsMC0wLjIsMC4xLTAuMywwLjFjLTAuNCwwLTAuOC0wLjMtMC45LTAuN2wtMi40LTYuN1xuXHRjLTMuMiwxLjYtNC41LDUuNS0zLDguN2MxLjYsMy4yLDUuNSw0LjUsOC43LDNjMy4y'@;
put 'LTEuNiw0LjUtNS41LDMtOC43QzMyLjIsMTcuMywzMCwxNS45LDI3LjUsMTUuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTI0LjcsMTYuN2MwLjYtMC4zLDEuMy0wLjUsMS45LTAuNmwtMi43LTcuNEMyMy44LDguMiwyMy40LDgsMjMsNy45'@;
put 'aC0zYy0wLjYsMC0xLDAuNS0xLDEuMWMwLDAuNSwwLjQsMC45LDEsMC45XG5cdGMwLDAsMCwwLDAsMGgyLjNsMC43LDJoLTkuNmwtMS43LTEuN0MxMS41LDEwLjEsMTEuMywxMCwxMSwxMEg4Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDIuNmwxLjIsMS4ybC0xLjUsM1xuXHRjMC42LDAu'@;
put 'MiwxLjMsMC41LDEuOCwwLjhsMS42LTMuMmgxMEwyNC43LDE2Ljd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVCb2F0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS4xLDI3LjFDMjgsMjcsMjYuOSwyNy40LDI2LDI4LjJjLTEu'@;
put 'MSwxLjEtMi45LDEuMS00LjEsMGMtMS0wLjctMi4xLTEuMS0zLjMtMS4xYy0xLjItMC4xLTIuNCwwLjMtMy4zLDEuMVxuXHRcdEMxNC43LDI4LjcsMTQsMjksMTMuMiwyOXMtMS41LTAuMy0yLjEtMC44Yy0xLTAuOC0yLjItMS4yLTMuNC0xLjJzLTIuNCwwLjQtMy40LDEuMkMzLjcsMjguNywy'@;
put 'LjgsMjksMiwyOXYyXG5cdFx0YzEuMywwLjEsMi42LTAuMywzLjYtMS4yQzYuMiwyOS4zLDcuMSwyOSw3LjksMjljMC43LDAsMS41LDAuMywyLjEsMC44YzEuOCwxLjYsNC42LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOFxuXHRcdGMwLjcsMCwxLjQsMC4zLDIsMC44YzEuOSwx'@;
put 'LjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhjMC43LDAsMS40LDAuMywxLjksMC44YzAuOSwwLjcsMS45LDEuMSwzLDEuMnYtMlxuXHRcdGMtMSwwLTEuMi0wLjQtMS43LTAuOEMzMS40LDI3LjUsMzAuMywyNy4xLDI5LjEsMjcuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDIzYzAtMC42LDAuNS0xLDEuMS0xSDMybC0zLjUsMy4xaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNy0wLjgsMC42LTIuMS0wLjItMi44XG5cdFx0QzMzLDIwLjIsMzIuNiwyMCwzMi4xLDIw'@;
put 'aC0yNWMtMS43LDAtMywxLjMtMywzdjMuMmMwLjUtMC41LDEuMi0wLjgsMS45LTEuMVYyM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjksMTlIMTV2LTcuOGMwLTAuNi0wLjMtMS4yLTAuOC0xLjZDMTMuMyw4LjksMTIsOS4xLDEx'@;
put 'LjQsMTBsLTQuMSw1LjljLTAuNCwwLjYtMC40LDEuNC0wLjEsMi4xQzcuNSwxOC42LDguMiwxOSw4LjksMTlcblx0XHR6IE0xMy4xLDExLjJMMTMsMTdIOC45TDEzLjEsMTEuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNiwxOGMw'@;
put 'LjQtMC42LDAuNC0xLjQsMC0yTDE5LjcsNS42Yy0wLjQtMC42LTEtMS0xLjctMWMtMS4xLDAtMiwwLjktMiwyVjE5aDguM0MyNSwxOSwyNS43LDE4LjYsMjYsMTh6IE0xNy45LDYuNlxuXHRcdGw2LjQsMTAuNWgtNi40VjYuNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00IiAvPjxwYXRoIGQ9Ik0zNCwzMWMtMS4xLTAuMS0yLjEtMC41LTMtMS4yYy0wLjUtMC41LTEuMi0wLjgtMi0wLjhjLTAuNywwLTEuNSwwLjMtMiwwLjhjLTAuOSwwLjgtMiwxLjEtMy4xLDEuMWMtMS4yLDAtMi40LTAuNC0zLjMtMS4xXG5cdGMtMS4yLTEuMS0zLTEuMS00LjEsMGMt'@;
put 'MC45LDAuOC0yLjEsMS4yLTMuNCwxLjJjLTEuMiwwLTIuMy0wLjQtMy4yLTEuMmMtMC42LTAuNS0xLjMtMC44LTItMC44Yy0wLjgsMC0xLjcsMC4zLTIuMywwLjhcblx0Yy0xLDAuOC0yLjMsMS4yLTMuNSwxLjFWMjljMC44LDAsMS43LTAuMywyLjMtMC45YzEtMC44LDIuMi0xLjIsMy40LTEu'@;
put 'MWMxLjIsMCwyLjQsMC40LDMuMywxLjJjMS4yLDEuMSwzLDEuMSw0LjIsMFxuXHRjMS45LTEuNiw0LjctMS42LDYuNSwwYzEuMiwxLjEsMywxLjEsNC4xLDBjMC45LTAuOCwyLjEtMS4yLDMuMy0xLjJjMS4xLDAsMi4yLDAuNCwzLDEuMkMzMi44LDI4LjcsMzMsMjksMzQsMjlMMzQsMzF6IiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjEsMjYuMmMwLjYtMC41LDEuMi0wLjgsMS45LTFWMjNjMC0wLjYsMC40LTEuMSwxLTEuMWgyNUwyOC40LDI1aDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yXG5cdGMwLjct'@;
put 'MC45LDAuNS0yLjEtMC40LTIuOEMzMi45LDIwLjEsMzIuNCwyMCwzMiwyMEg3Yy0xLjcsMC0zLDEuMy0zLDNMNC4xLDI2LjJMNC4xLDI2LjJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45LDE4LjlIOC45Yy0xLjEsMC0yLTAuOS0yLTJj'@;
put 'MC0wLjQsMC4xLTAuOCwwLjQtMS4ybDQuMS01LjhjMC42LTAuOSwxLjktMS4xLDIuOC0wLjVjMC41LDAuNCwwLjgsMSwwLjgsMS42VjE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC4zLDE4LjlIMTZWNi40YzAtMS4xLDAuOS0yLDIt'@;
put 'MmMwLjcsMCwxLjMsMC40LDEuNywxTDI2LDE1LjhjMC42LDEsMC4yLDIuMi0wLjcsMi43QzI1LDE4LjcsMjQuNiwxOC44LDI0LjMsMTguOVxuXHRMMjQuMywxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQ2FtcGVydmFuPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik05LjUsMjRDOS41LDI0LDkuNSwyNCw5LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVjMCwwLDAsMCwwLDBDNiwyOS40LDcuNiwzMSw5LjUsMzFjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzExLjQsMjQsOS41LDI0eiBNOS41LDI5QzguNywyOSw4'@;
put 'LDI4LjMsOCwyNy41UzguNywyNiw5LjUsMjZzMS41LDAuNywxLjUsMS41UzEwLjMsMjksOS41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIzLjUsMjRDMjMuNSwyNCwyMy41LDI0LDIzLjUsMjRjLTEuOSwwLTMuNSwxLjYtMy41'@;
put 'LDMuNWMwLDAsMCwwLDAsMGMwLDEuOSwxLjUsMy41LDMuNSwzLjVjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzI1LjQsMjQsMjMuNSwyNHogTTIzLjUsMjljLTAuOCwwLTEuNS0wLjctMS41LTEuNXMwLjctMS41LDEuNS0xLjVzMS41LDAuNywxLjUsMS41UzI0LjMsMjksMjMuNSwyOXoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMywyMC4xVjIwaC0wLjFsLTMuNS01LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4zVjkuN0MzMiw3LjEsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMs'@;
put 'MS4zLTMsM1xuXHRcdHYxN2gyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI0djloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwx'@;
put 'aC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wzMywyMC4xeiBNMjYsMjB2LTVoMS41bDMuMSw1SDI2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHJlY3QgeD0iMTkiIHk9IjkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjIsMjIgMjIsMTMgMTUsMTMgMTUsMjggMTcsMjggMTcsMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik02LDIwaDd2LTdINlYy'@;
put 'MHogTTgsMTVoM3YzSDhWMTV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41UzcuNiwzMSw5LjUsMzFjMCwwLDAsMCwwLDBjMS45LDAsMy41LTEuNiwzLjUtMy41YzAsMCwwLTAuMSwwLTAu'@;
put 'MUMxMywyNS41LDExLjQsMjQsOS41LDI0eiJcblx0XHQgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSIyMy41IiBjeT0iMjcuNSIgcj0iMy41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOS41'@;
put 'LDE0LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4yVjkuN2MwLDAsMCwwLDAtMC4xQzMyLDcsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMsMS4zLTMsM3YxN1xuXHRcdGgyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40'@;
put 'LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI3aC0zdjloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwxaC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wyOS41LDE0LjV6IiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iNy45IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCwyMiAyMS45LDIyIDIxLjksMTMgMTUsMTMgMTUsMjggMTYuOSwyOCAx'@;
put 'Ni45LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxyZWN0IHg9IjYiIHk9IjEzIiB3aWR0aD0iNi45IiBoZWlnaHQ9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNhcmF2YW49KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjUsMjFDMTEsMjEsOSwyMyw5LDI1LjVzMiw0LjUsNC41LDQuNWMyLjUsMCw0LjUtMiw0LjUtNC41QzE4LDIzLDE2LDIxLDEzLjUsMjF6IE0xMy41LDI4Yy0xLjQsMC0yLjUtMS4xLTIuNS0yLjVcblx0XHRzMS4xLTIuNSwyLjUtMi41czIuNSwx'@;
put 'LjEsMi41LDIuNVMxNC45LDI4LDEzLjUsMjh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywy'@;
put 'LDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRcdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRc'@;
put 'dGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxMkg3djZoOVYxMnogTTE0LDE2SDl2LTJoNVYxNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z'@;
put 'IiAvPjxwYXRoIGQ9Ik0xMy41LDMwQzExLDMwLDksMjgsOSwyNS41czItNC41LDQuNS00LjVzNC41LDIsNC41LDQuNUMxOCwyOCwxNiwzMCwxMy41LDMweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEt'@;
put 'MS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSww'@;
put 'LjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgzdjEwaC0zdjJoMTNcblx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMThIN3YtNmg5VjE4eiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlRmVycnk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDI1LjFjLTEuMiwwLTIuMywwLjQtMy4zLDEuMWMwLDAsMCwwLDAsMGMtMS4xLDEuMS0zLDEuMS00LjEsMGMtMC45LTAuOC0yLjEtMS4yLTMuMy0x'@;
put 'LjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMlxuXHRcdGMtMS4yLDEuMS0zLDEuMS00LjIsMEMxMCwyNS40LDguOCwyNSw3LjYsMjVjLTEuMiwwLTIuNCwwLjQtMy40LDEuMUMzLjYsMjYuNywyLjgsMjcsMiwyN3YyYzEuMywwLjEsMi41LTAuNCwzLjQtMS4yXG5cdFx0QzYuMSwyNy4zLDYuOSwy'@;
put 'Nyw3LjcsMjdjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhcblx0XHRjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjUsMC4zLDIs'@;
put 'MC44YzAuOSwwLjcsMiwxLjEsMy4xLDEuMnYtMS45Yy0wLjcsMC0xLjQtMC4zLTEuOS0wLjlcblx0XHRDMzEuMywyNS40LDMwLjEsMjUsMjksMjUuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjksMjMuMlYyMEgzMmwtMy41LDNo'@;
put 'MC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC41LTAuNiwwLjUtMS40LDAuMi0yLjFjLTAuNC0wLjctMS0xLTEuOC0xaC00LjRcblx0XHRMMjIuNSwxMUgxN2MtMS43LDAtMywxLjMtMywzaC0yVjguMUg2djYuMWMtMS4yLDAuNC0yLDEuNS0yLDIuOHYxLjFWMjB2'@;
put 'NC4zbDAuMS0wLjFDNC42LDIzLjcsNS4yLDIzLjQsNS45LDIzLjJ6IE04LDEwaDJ2NEg4VjEwelxuXHRcdCBNNiwxN2MwLTAuNiwwLjQtMSwxLTFoOXYtMmMwLTAuNiwwLjQtMSwxLTFoNWwwLjYsMUgxOHYyaDUuOGwxLjIsMi4xSDZWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguMiwyNWMtMS4yLDAtMi40LDAuNC0zLjMsMS4yYy0xLjIsMS4xLTMsMS4xLTQuMSwwYy0xLjktMS42LTQuNi0xLjYtNi41LDBjLTEuMiwxLjEtMi45LDEuMS00LjEsMFxuXHRcdGMtMC45LTAuOC0yLTEuMi0zLjItMS4yYy0xLjIsMC0yLjMs'@;
put 'MC40LTMuMiwxLjJDMy40LDI2LjcsMi43LDI3LDIsMjd2MmMxLjEtMC4xLDIuMi0wLjUsMy4xLTEuMkM1LjYsMjcuMyw2LjMsMjcsNywyN1xuXHRcdGMwLjcsMCwxLjUsMC4zLDIsMC44YzEuOSwxLjYsNC43LDEuNiw2LjYsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4z'@;
put 'LDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwXG5cdFx0YzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNiwwLjMsMi4xLDAuOGMwLjksMC44LDIuMiwxLjMsMy40LDEuMnYtMmMtMC44LDAtMS42LTAuMy0yLjItMC44QzMwLjcsMjUuNCwyOS41LDI1LDI4LjIsMjV6IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjgsMjMuMnYtMy4zaDI2LjFMMjguNCwyM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4xLTAuMmMwLjctMC45LDAuNS0yLjEtMC40LTIuOGMtMC4zLTAuMy0wLjgtMC40LTEuMi0wLjRc'@;
put 'blx0XHRoLTQuMWwtNS40LTdoLTUuNWMtMS43LDAtMywxLjMtMywzaC0yVjhINnY2LjJjLTEuMiwwLjQtMi4xLDEuNS0yLjEsMi44bDAsNy4ybDAuMSwwQzQuNSwyMy43LDUuMSwyMy40LDUuOCwyMy4yeiBNMTcuOSwxNGg0LjJcblx0XHRsMS40LDJoLTUuN1YxNHogTTcuOSwxMGgydjRoLTJW'@;
put 'MTB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVUcmFpbGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOFMxOC4yLDE5'@;
put 'LjIsMTUsMTkuMnogTTE1LDI5LjJjLTIuMywwLTQuMi0xLjktNC4yLTQuMlxuXHRcdHMxLjktNC4yLDQuMi00LjJzNC4yLDEuOSw0LjIsNC4yUzE3LjMsMjkuMiwxNSwyOS4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHJlY3QgeD0iMTQiIHk9IjI0'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAs'@;
put 'MS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0XHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiBNMjYsMTNINHYtMmgyMlYxM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv'@;
put 'PjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjEx'@;
put 'aDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42LDUuOC01LjhsMCwwQzIwLjgsMjEuOCwxOC4y'@;
put 'LDE5LjIsMTUsMTkuMnogTTE2LDI2aC0ydi0yaDJWMjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVPbkhvbGlkYXk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA4LDIuMzRjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgs'@;
put 'MTQsMTYsMTRBMTcuOTEsMTcuOTEsMCwwLDAsMjMsMjkuNjZsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zLDEsMSwwLDAsMCwuMTYtLjU0VjI1LjYxYTEzLDEzLDAsMCwwLDQtOS4yN0MzNC4wOCw4LjYyLDI2LjksMi4zNCwxOC4wOCwyLjM0Wk0yOC4zNywyNC40NWExLDEsMCwwLDAtLjMy'@;
put 'LjczdjUuMzRsLTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMSwxNiwxNiwwLDAsMS00Ljc2LjcyYy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMSwxMS4xLDAsMCwxLDI4LjM3LDI0LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjEsMTUuODIsMzEsMTUuNjcsMjguNSwxMy40NGEzLjI1LDMuMjUsMCwwLDAtMi4zOS0uODRsLTUuMzguMzQtMy41OS0zYS44MS44MSwwLDAsMC0uNTItLjE5SDEzLjU2YS43OC43OCwwLDAsMC0uNjkuNC43Ny43NywwLDAsMCwwLC43'@;
put 'OWwxLjM2LDIuNDQtNC43MS4yOSwxLjMxLDEuNTIsMTUuMzktMWExLjY1LDEuNjUsMCwwLDEsMS4yMi40M2wyLjM2LDIuMTNhLjExLjExLDAsMCwxLDAsLjA3YzAsLjA2LS4wOS4wNS0uMS4wNkgyMS44MmwtLjM1LjM3LTUuMTksNS41M0gxNC42NGwyLjczLTUuOUg4LjU0TDcuMTMsMTQuMTYs'@;
put 'Ni41MSwxM2EuOC44LDAsMCwwLTEtLjJBLjgxLjgxLDAsMCwwLDUuMiwxMy45bDIsMy45NGExLjIxLDEuMjEsMCwwLDAsMS4wOC42NWg2LjU3bC0xLjk0LDQuMThBMS4yLDEuMiwwLDAsMCwxMywyMy44M2ExLjIyLDEuMjIsMCwwLDAsMSwuNTZoMi40M2ExLjE3LDEuMTcsMCwwLDAsLjg4LS4z'@;
put 'OWw1LjE4LTUuNTFoNy4xNmExLjY1LDEuNjUsMCwwLDAsMS41Mi0uOTFBMS43NCwxLjc0LDAsMCwwLDMxLjEsMTUuODJaTTE0LjkyLDExLjMxaDEuNDFsMi4wOSwxLjc3TDE2LDEzLjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRo'@;
put 'IGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTcuOTEsMTcuOTEsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zQTEsMSwwLDAsMCwzMCwzMi41VjI1Ljc3YTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwx'@;
put 'OCwyLjVaTTI5Ljg0LDE4SDIxLjUxYS40Mi40MiwwLDAsMC0uMy4xM2wtNS4zLDUuNjRhLjM5LjM5LDAsMCwxLS4yOS4xM0gxMy4xOWEuNDEuNDEsMCwwLDEtLjM3LS41OGwyLjQ3LTUuMzJINy40NmEuNDIuNDIsMCwwLDEtLjM2LS4yMmwtMi43LTVINi4yNGEuNTMuNTMsMCwwLDEsLjM5LjE4'@;
put 'bDEuNTYsMS42OWEuMzguMzgsMCwwLDAsLjMzLjE0bDYuMTgtLjM4LTItMy41NWgyLjg5YS40Ny40NywwLDAsMSwuMzEuMTFMMTkuNjMsMTRsNi42OS0uMzVhMi40NCwyLjQ0LDAsMCwxLDEuODEuNjNsMi40NywyLjIzQS45Mi45MiwwLDAsMSwyOS44NCwxOFoiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksRi5UcmF2ZWxTaGFwZXM9e3RydWNrOkYuQ2xyU2hhcGVUcnVjayxhaXJwbGFuZTpGLkNsclNoYXBlQWlycGxhbmUsY2FyOkYuQ2xyU2hhcGVDYXIsbWFwOkYuQ2xyU2hhcGVNYXAsY29tcGFzczpGLkNsclNoYXBlQ29tcGFzcywibWFwLW1h'@;
put 'cmtlciI6Ri5DbHJTaGFwZU1hcE1hcmtlcixiaWN5Y2xlOkYuQ2xyU2hhcGVCaWN5Y2xlLGJvYXQ6Ri5DbHJTaGFwZUJvYXQsY2FtcGVydmFuOkYuQ2xyU2hhcGVDYW1wZXJ2YW4sY2FyYXZhbjpGLkNsclNoYXBlQ2FyYXZhbixmZXJyeTpGLkNsclNoYXBlRmVycnksdHJhaWxlcjpGLkNsclNo'@;
put 'YXBlVHJhaWxlciwib24taG9saWRheSI6Ri5DbHJTaGFwZU9uSG9saWRheX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVHJhdmVsU2hhcGVzLCJwbGFuZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5haXJwbGFuZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRy'@;
put 'YXZlbFNoYXBlcywiYXV0byIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5jYXIpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5UcmF2ZWxTaGFwZXMpfSwiLi9w'@;
put 'cm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3Jp'@;
put 'cHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3By'@;
put 'b2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFn'@;
put 'LWdlbmVyYXRvci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuY2xySWNvblNWRz12b2lkIDA7Ri5jbHJJY29uU1ZHPWZ1bmN0aW9uIE0oTyl7dmFyIFI9IiI7cmV0dXJuIE8uaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKFIrPSJjYW4tYmFkZ2UgIiksTy5pbmRleE9mKCItLWFsZXJ0'@;
put 'ZWQiKT4tMSYmKFIrPSJjYW4tYWxlcnQgIiksTy5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoUis9Imhhcy1zb2xpZCAiKSwoUj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK1IrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0'@;
put 'IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVB'@;
put 'c3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK08rIjwvc3ZnPiJ9fX0pfSw4MjAyNToo'@;
put 'YXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPXt9O0YucihhZSksRi5kKGFlLHthcnJheUF2ZzooKT0+UkVlLGFycmF5RWFjaDooKT0+RG4sYXJyYXlGaWx0ZXI6KCk9Pl8xLGFycmF5RmxhdHRlbjooKT0+WGVlLGFycmF5TWFwOigpPT5jcyxhcnJheU1heDooKT0+SUVlLGFycmF5TWlu'@;
put 'OigpPT5MRWUsYXJyYXlSZWR1Y2U6KCk9PkFsLGFycmF5U3VtOigpPT5LZWUsYXJyYXlVbmlxdWU6KCk9PnJOLGV4dGVuZEFycmF5OigpPT5uTixnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmlOLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5PRWUsZ2V0VW5pb25PZkFycmF5czooKT0+'@;
put 'UEVlLHBpdm90OigpPT5LYixzdHJpbmdUb0FycmF5OigpPT5vTix0bzJkQXJyYXk6KCk9PnFlZX0pO3ZhciB4PXt9O0Yucih4KSxGLmQoeCx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5ydGUsaXNEZWZpbmVkOigpPT5LaSxpc0VtcHR5OigpPT5wYyxpc1JlZ0V4cDooKT0+SmVlLGlzVW5kZWZp'@;
put 'bmVkOigpPT5MYSxzdHJpbmdpZnk6KCk9Pl9sfSk7dmFyIG09e307Ri5yKG0pLEYuZChtLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5WRWUsaXNQZXJjZW50VmFsdWU6KCk9PmxOLHJhbmRvbVN0cmluZzooKT0+YU4sc2FuaXRpemU6KCk9PnJrLHN0cmlwVGFnczooKT0+dU4sc3Vic3RpdHV0ZToo'@;
put 'KT0+Y04sdG9VcHBlckNhc2VGaXJzdDooKT0+YnV9KTt2YXIgbGU9e307Ri5yKGxlKSxGLmQobGUse0hUTUxfQ0hBUkFDVEVSUzooKT0+bHRlLGFkZENsYXNzOigpPT5waSxhZGRFdmVudDooKT0+ekVlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+Zk4sY2xvc2VzdDooKT0+TnAsY2xvc2VzdERv'@;
put 'd246KCk9PnR5LGVtcHR5OigpPT5nMixmYXN0SW5uZXJIVE1MOigpPT5nZyxmYXN0SW5uZXJUZXh0OigpPT5qcCxnZXRDYXJldFBvc2l0aW9uOigpPT5oTixnZXRDb21wdXRlZFN0eWxlOigpPT56cCxnZXRDc3NUcmFuc2Zvcm06KCk9PllFZSxnZXRGcmFtZUVsZW1lbnQ6KCk9Pm90ZSxnZXRQ'@;
put 'YXJlbnQ6KCk9Pml0ZSxnZXRQYXJlbnRXaW5kb3c6KCk9PmV5LGdldFNjcm9sbExlZnQ6KCk9PmlrLGdldFNjcm9sbFRvcDooKT0+bnksZ2V0U2Nyb2xsYWJsZUVsZW1lbnQ6KCk9PnJ5LGdldFNjcm9sbGJhcldpZHRoOigpPT5JYyxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+Y3RlLGdl'@;
put 'dFNlbGVjdGlvblRleHQ6KCk9PnV0ZSxnZXRTdHlsZTooKT0+bjcsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PnZnLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9Pm1nLGdldFdpbmRvd1Njcm9sbFRvcDooKT0+dDcsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PkJFZSxoYXNDbGFzczooKT0+'@;
put 'Qm8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+aHRlLGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOigpPT5kdGUsaW5kZXg6KCk9PnN0ZSxpbm5lckhlaWdodDooKT0+amYsaW5uZXJXaWR0aDooKT0+aXksaXNDaGlsZE9mOigpPT5WcCxpc0RldGFjaGVkOigpPT5nTixpc0lucHV0OigpPT5heSxp'@;
put 'c091dHNpZGVJbnB1dDooKT0+c2ssaXNWaXNpYmxlOigpPT5lNyxtYXRjaGVzQ1NTUnVsZXM6KCk9PmpFZSxvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U6KCk9PnB0ZSxvZmZzZXQ6KCk9PnFsLG91dGVySGVpZ2h0OigpPT5hbCxvdXRlcldpZHRoOigpPT53YSxvdmVybGF5Q29udGFpbnNF'@;
put 'bGVtZW50OigpPT5CcCxyZW1vdmVDbGFzczooKT0+V28scmVtb3ZlRXZlbnQ6KCk9PlVFZSxyZW1vdmVUZXh0Tm9kZXM6KCk9PmROLHJlc2V0Q3NzVHJhbnNmb3JtOigpPT5zeSxzZWxlY3RFbGVtZW50SWZBbGxvd2VkOigpPT5mdGUsc2V0Q2FyZXRQb3NpdGlvbjooKT0+b3ksc2V0T3Zlcmxh'@;
put 'eVBvc2l0aW9uOigpPT5va30pO3ZhciBNPXt9O0YucihNKSxGLmQoTSx7Y3Vycnk6KCk9Pm10ZSxjdXJyeVJpZ2h0OigpPT4kRWUsZGVib3VuY2U6KCk9Pm1OLGZhc3RDYWxsOigpPT5hayxpc0Z1bmN0aW9uOigpPT5SYSxwYXJ0aWFsOigpPT52TixwaXBlOigpPT5HRWUsdGhyb3R0bGU6KCk9'@;
put 'Pmd0ZSx0aHJvdHRsZUFmdGVySGl0czooKT0+V0VlfSk7dmFyIE89e307Ri5yKE8pLEYuZChPLHtjbG9uZTooKT0+V3UsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT5fZyxkZWVwQ2xvbmU6KCk9Pnl1LGRlZXBFeHRlbmQ6KCk9Pmx5LGRlZXBPYmplY3RTaXplOigpPT51ayxkZWZpbmVH'@;
put 'ZXR0ZXI6KCk9PmZoLGR1Y2tTY2hlbWE6KCk9PnI3LGV4dGVuZDooKT0+S2wsZ2V0UHJvcGVydHk6KCk9PnZ0ZSxoYXNPd25Qcm9wZXJ0eTooKT0+YmwsaW5oZXJpdDooKT0+emYsaXNPYmplY3Q6KCk9PnVzLGlzT2JqZWN0RXF1YWw6KCk9PmxrLG1peGluOigpPT5UYSxvYmplY3RFYWNoOigp'@;
put 'PT5kcyxzZXRQcm9wZXJ0eTooKT0+Y2t9KTt2YXIgUj17fTtGLnIoUiksRi5kKFIse2lzQ2hyb21lOigpPT5fTixpc0Nocm9tZVdlYktpdDooKT0+eXRlLGlzRWRnZTooKT0+Q3RlLGlzRWRnZVdlYktpdDooKT0+S0VlLGlzRmlyZWZveDooKT0+ZGssaXNGaXJlZm94V2ViS2l0OigpPT53dGUs'@;
put 'aXNJT1M6KCk9PmJOLGlzSXBhZE9TOigpPT55Tixpc0xpbnV4T1M6KCk9PlhFZSxpc01hY09TOigpPT5oayxpc01vYmlsZUJyb3dzZXI6KCk9Pm0yLGlzU2FmYXJpOigpPT5xRWUsaXNXaW5kb3dzT1M6KCk9PndOLHNldEJyb3dzZXJNZXRhOigpPT5fdGUsc2V0UGxhdGZvcm1NZXRhOigpPT5i'@;
put 'dGV9KTt2YXIgej17fTtGLnIoeiksRi5kKHose0tFWV9DT0RFUzooKT0+Y28saXNDdHJsS2V5OigpPT5RRWUsaXNDdHJsTWV0YUtleTooKT0+TXRlLGlzRnVuY3Rpb25LZXk6KCk9PkNOLGlzS2V5OigpPT5vNyxpc1ByaW50YWJsZUNoYXI6KCk9PlN0ZX0pO3ZhciBLPXt9O0YucihLKSxGLmQo'@;
put 'Syx7aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6KCk9PmJnLGlzTGVmdENsaWNrOigpPT5mayxpc1JpZ2h0Q2xpY2s6KCk9PlVwLHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjooKT0+djJ9KTt2YXIgST17fTtGLnIoSSksRi5kKEkse19kYXRhVG9IVE1MOigpPT5ETixodG1sVG9Hcmlk'@;
put 'U2V0dGluZ3M6KCk9Pkl0ZSxpbnN0YW5jZVRvSFRNTDooKT0+VE59KTt2YXIgaz17fTtGLnIoayksRi5kKGsse2lzTnVtZXJpYzooKT0+R3UsaXNOdW1lcmljTGlrZTooKT0+THRlLHJhbmdlRWFjaDooKT0+dm8scmFuZ2VFYWNoUmV2ZXJzZTooKT0+dmssdmFsdWVBY2NvcmRpbmdQZXJjZW50'@;
put 'OigpPT5JTn0pO3ZhciBFPXt9O0YucihFKSxGLmQoRSx7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PmR5LGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+TnRlLGlzVG91Y2hTdXBwb3J0ZWQ6KCk9PkhOLHJlcXVlc3RBbmltYXRpb25GcmFtZTooKT0+eWt9KTt2YXIgaj17fTtGLnIoaiksRi5k'@;
put 'KGose2NvdW50Rmlyc3RSb3dLZXlzOigpPT5sVixjcmVhdGVFbXB0eVNwcmVhZHNoZWV0RGF0YTooKT0+bVRlLGNyZWF0ZVNwcmVhZHNoZWV0RGF0YTooKT0+cFRlLGNyZWF0ZVNwcmVhZHNoZWV0T2JqZWN0RGF0YTooKT0+Z1RlLGRhdGFSb3dUb0NoYW5nZXNBcnJheTooKT0+YVYsaXNBcnJh'@;
put 'eU9mQXJyYXlzOigpPT5wbmUsaXNBcnJheU9mT2JqZWN0czooKT0+Z25lLHNwcmVhZHNoZWV0Q29sdW1uSW5kZXg6KCk9PmZUZSxzcHJlYWRzaGVldENvbHVtbkxhYmVsOigpPT5Na30pO3ZhciBWPXt9O0YucihWKSxGLmQoVix7Q09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9Pk5W'@;
put 'LENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+elYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+cVYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+WlYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PldWLENP'@;
put 'TlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT5VVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT4kVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PllWLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PkdWLENPTlRF'@;
put 'WFRNRU5VX0lURU1TX0JPUkRFUlM6KCk9PktWLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5RVixDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PmVCLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkpWLENPTlRFWFRNRU5VX0lURU1TX0JP'@;
put 'UkRFUlNfVE9QOigpPT5YVixDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9PkFWLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PlRWLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+TFYsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NP'@;
put 'TFVNTl9HUk9VUF9IRUFERVJTOigpPT5JVixDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PkRWLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+UlYsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5WVixDT05URVhUTUVOVV9JVEVNU19GUkVF'@;
put 'WkVfQ09MVU1OOigpPT5PVixDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+aUIsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9PnNCLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT53VixDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PkNWLENP'@;
put 'TlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTOigpPT5GVixDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PnJCLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+bkIsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9'@;
put 'Pl9WLENPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+a1YsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmpWLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PkVWLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT50QixDT05URVhUTUVOVV9J'@;
put 'VEVNU19SRU1PVkVfQ09MVU1OOigpPT5NVixDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+QlYsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+U1YsQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5iVixDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6'@;
put 'KCk9PnlWLENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5vQixDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+YUIsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+eFYsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5QVixDT05URVhUTUVOVV9JVEVN'@;
put 'U19VTk1FUkdFX0NFTExTOigpPT5IVixDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5FbmUsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+UkIsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5JQixGSUxURVJTX0JVVFRPTlNfT0s6KCk9PkxCLEZJTFRFUlNfQlVUVE9OU19QTEFD'@;
put 'RUhPTERFUl9TRUFSQ0g6KCk9Pk9CLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PkZCLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+UEIsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PkRCLEZJTFRFUlNfQ09ORElUSU9OU19B'@;
put 'RlRFUjooKT0+Q0IsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+U0IsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5oQixGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+eUIsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5qVGUsRklMVEVSU19DT05E'@;
put 'SVRJT05TX0NPTlRBSU5TOigpPT5wQixGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PmxCLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PmZCLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+dUIsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+bUIsRklM'@;
put 'VEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+dkIsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+X0IsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+YkIsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+eWwsRklM'@;
put 'VEVSU19DT05ESVRJT05TX05PTkU6KCk9PkxrLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+d0IsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5nQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5jQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VR'@;
put 'VUFMOigpPT5kQixGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9Pk1CLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+eEIsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+RUIsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PmtCLEZJTFRFUlNfRElW'@;
put 'U19GSUxURVJfQllfVkFMVUU6KCk9PkFCLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5UQixGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+UmssRklMVEVSU19OQU1FU1BBQ0U6KCk9PiR1LEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5Pa30pO3ZhciBCPXt9O2Z1'@;
put 'bmN0aW9uIFkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gWChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90'@;
put 'b3R5cGUuY29uc3RydWN0b3I9YSxhfUYucihCKSxGLmQoQix7Z2V0Tm9ybWFsaXplZERhdGU6KCk9PmRyZX0pO2NvbnN0IFU9WChjPT5mdW5jdGlvbihhKXtjKHRoaXMpLHRoaXMubWVzc2FnZT1hP2Ake2EubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxu'@;
put 'JHthLm1hcCgoZCxoKT0+YCR7aCsxfSkgJHtkLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1hfSk7ZnVuY3Rpb24gcShjLGwpe2lmKGMpe2NvbnN0IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNl'@;
put 'KGEsMSl9fWNsYXNzIGVle2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtj'@;
put 'b25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246ZH09dGhpcztpZihZKGQpKXRyeXtk'@;
put 'KCl9Y2F0Y2goZil7bD1mIGluc3RhbmNlb2YgVT9mLmVycm9yczpbZl19Y29uc3R7X2ZpbmFsaXplcnM6aH09dGhpcztpZihoKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGNvbnN0IGYgb2YgaCl0cnl7c2UoZil9Y2F0Y2goXyl7bD1sPz9bXSxfIGluc3RhbmNlb2YgVT9sPVsuLi5sLC4u'@;
put 'Ll8uZXJyb3JzXTpsLnB1c2goXyl9fWlmKGwpdGhyb3cgbmV3IFUobCl9fWFkZChsKXt2YXIgYTtpZihsJiZsIT09dGhpcylpZih0aGlzLmNsb3NlZClzZShsKTtlbHNle2lmKGwgaW5zdGFuY2VvZiBlZSl7aWYobC5jbG9zZWR8fGwuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47bC5fYWRkUGFy'@;
put 'ZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oYT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09YT9hOltdKS5wdXNoKGwpfX1faGFzUGFyZW50KGwpe2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztyZXR1cm4gYT09PWx8fEFycmF5LmlzQXJyYXkoYSkmJmEuaW5jbHVkZXMo'@;
put 'bCl9X2FkZFBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkoYSk/KGEucHVzaChsKSxhKTphP1thLGxdOmx9X3JlbW92ZVBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7YT09PWw/dGhpcy5fcGFyZW50YWdlPW51'@;
put 'bGw6QXJyYXkuaXNBcnJheShhKSYmcShhLGwpfXJlbW92ZShsKXtjb25zdHtfZmluYWxpemVyczphfT10aGlzO2EmJnEoYSxsKSxsIGluc3RhbmNlb2YgZWUmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19ZWUuRU1QVFk9KCgpPT57Y29uc3QgYz1uZXcgZWU7cmV0dXJuIGMuY2xvc2VkPSEwLGN9'@;
put 'KSgpO2NvbnN0IHRlPWVlLkVNUFRZO2Z1bmN0aW9uIG9lKGMpe3JldHVybiBjIGluc3RhbmNlb2YgZWV8fGMmJiJjbG9zZWQiaW4gYyYmWShjLnJlbW92ZSkmJlkoYy5hZGQpJiZZKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHNlKGMpe1koYyk/YygpOmMudW5zdWJzY3JpYmUoKX1jb25zdCBo'@;
put 'ZT17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfSx1ZT17c2V0VGltZW91dChjLGwsLi4uYSl7Y29u'@;
put 'c3R7ZGVsZWdhdGU6ZH09dWU7cmV0dXJuIGQ/LnNldFRpbWVvdXQ/ZC5zZXRUaW1lb3V0KGMsbCwuLi5hKTpzZXRUaW1lb3V0KGMsbCwuLi5hKX0sY2xlYXJUaW1lb3V0KGMpe2NvbnN0e2RlbGVnYXRlOmx9PXVlO3JldHVybihsPy5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkoYyl9LGRl'@;
put 'bGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gY2UoYyl7dWUuc2V0VGltZW91dCgoKT0+e2NvbnN0e29uVW5oYW5kbGVkRXJyb3I6bH09aGU7aWYoIWwpdGhyb3cgYztsKGMpfSl9ZnVuY3Rpb24gRygpe31jb25zdCBiPU4oIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIE4oYyxsLGEpe3JldHVy'@;
put 'bntraW5kOmMsdmFsdWU6bCxlcnJvcjphfX1sZXQgZz1udWxsO2Z1bmN0aW9uIEMoYyl7aWYoaGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7Y29uc3QgbD0hZztpZihsJiYoZz17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRo'@;
put 'cm93bjphLGVycm9yOmR9PWc7aWYoZz1udWxsLGEpdGhyb3cgZH19ZWxzZSBjKCl9Y2xhc3MgdiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhpcy5kZXN0aW5hdGlvbj1sLG9lKGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlv'@;
put 'bj1MZX1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IG5lKGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3hlKGZ1bmN0aW9uIEgoYyl7cmV0dXJuIE4oIk4iLGMsdm9pZCAwKX0obCksdGhpcyk6dGhpcy5fbmV4dChsKX1lcnJvcihsKXt0aGlzLmlzU3RvcHBlZD94ZShmdW5j'@;
put 'dGlvbiBEKGMpe3JldHVybiBOKCJFIix2b2lkIDAsYyl9KGwpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcihsKSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD94ZShiLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgp'@;
put 'e3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSx0aGlzLmRlc3RpbmF0aW9uPW51bGwpfV9uZXh0KGwpe3RoaXMuZGVzdGluYXRpb24ubmV4dChsKX1fZXJyb3IobCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IobCl9ZmluYWxseXt0aGlzLnVu'@;
put 'c3Vic2NyaWJlKCl9fV9jb21wbGV0ZSgpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fX1jb25zdCBwPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIHcoYyxsKXtyZXR1cm4gcC5jYWxsKGMsbCl9Y2xhc3MgSntjb25z'@;
put 'dHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7ZGUoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5'@;
put 'e2EuZXJyb3IobCl9Y2F0Y2goZCl7ZGUoZCl9ZWxzZSBkZShsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxldGUoKX1jYXRjaChhKXtkZShhKX19fWNsYXNzIG5lIGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCl7'@;
put 'bGV0IGg7aWYoc3VwZXIoKSxZKGwpfHwhbCloPXtuZXh0Omw/P3ZvaWQgMCxlcnJvcjphPz92b2lkIDAsY29tcGxldGU6ZD8/dm9pZCAwfTtlbHNle2xldCBmO3RoaXMmJmhlLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8oZj1PYmplY3QuY3JlYXRlKGwpLGYudW5zdWJzY3JpYmU9KCk9PnRo'@;
put 'aXMudW5zdWJzY3JpYmUoKSxoPXtuZXh0OmwubmV4dCYmdyhsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmdyhsLmVycm9yLGYpLGNvbXBsZXRlOmwuY29tcGxldGUmJncobC5jb21wbGV0ZSxmKX0pOmg9bH10aGlzLmRlc3RpbmF0aW9uPW5ldyBKKGgpfX1mdW5jdGlvbiBkZShjKXtoZS51c2VE'@;
put 'ZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIFMoYyl7aGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZyYmKGcuZXJyb3JUaHJvd249ITAsZy5lcnJvcj1jKX0oYyk6Y2UoYyl9ZnVuY3Rpb24geGUoYyxsKXtjb25zdHtvblN0b3BwZWRO'@;
put 'b3RpZmljYXRpb246YX09aGU7YSYmdWUuc2V0VGltZW91dCgoKT0+YShjLGwpKX1jb25zdCBMZT17Y2xvc2VkOiEwLG5leHQ6RyxlcnJvcjpmdW5jdGlvbiBmZShjKXt0aHJvdyBjfSxjb21wbGV0ZTpHfSxGZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8'@;
put 'IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gT2UoYyl7cmV0dXJuIGN9ZnVuY3Rpb24gV2UoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9PZToxPT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBLZT0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBsdChjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHZ8fGZ1bmN0aW9u'@;
put 'IEplKGMpe3JldHVybiBjJiZZKGMubmV4dCkmJlkoYy5lcnJvcikmJlkoYy5jb21wbGV0ZSl9KGMpJiZvZShjKX0oYSk/YTpuZXcgbmUoYSxkLGgpO3JldHVybiBDKCgpPT57Y29uc3R7b3BlcmF0b3I6Xyxzb3VyY2U6VH09dGhpcztmLmFkZChfP18uY2FsbChmLFQpOlQ/dGhpcy5fc3Vic2Ny'@;
put 'aWJlKGYpOnRoaXMuX3RyeVN1YnNjcmliZShmKSl9KSxmfV90cnlTdWJzY3JpYmUoYSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoYSl9Y2F0Y2goZCl7YS5lcnJvcihkKX19Zm9yRWFjaChhLGQpe3JldHVybiBuZXcoZD1ZZShkKSkoKGgsZik9Pntjb25zdCBfPW5ldyBuZSh7bmV4dDpU'@;
put 'PT57dHJ5e2EoVCl9Y2F0Y2goVyl7ZihXKSxfLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpmLGNvbXBsZXRlOmh9KTt0aGlzLnN1YnNjcmliZShfKX0pfV9zdWJzY3JpYmUoYSl7dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuc3Vic2NyaWJl'@;
put 'KGEpfVtGZV0oKXtyZXR1cm4gdGhpc31waXBlKC4uLmEpe3JldHVybiBXZShhKSh0aGlzKX10b1Byb21pc2UoYSl7cmV0dXJuIG5ldyhhPVllKGEpKSgoZCxoKT0+e2xldCBmO3RoaXMuc3Vic2NyaWJlKF89PmY9XyxfPT5oKF8pLCgpPT5kKGYpKX0pfX1yZXR1cm4gYy5jcmVhdGU9bD0+bmV3'@;
put 'IGMobCksY30pKCk7ZnVuY3Rpb24gWWUoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1jPz9oZS5Qcm9taXNlKSYmdm9pZCAwIT09bD9sOlByb21pc2V9Y29uc3QgUGU9WChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNz'@;
put 'YWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBiZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgS2V7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMu'@;
put 'aGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgQWUodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1hLGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgUGV9bmV4dChhKXtDKCgpPT57aWYodGhpcy5fdGhyb3dJ'@;
put 'ZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhpcy5vYnNlcnZlcnMpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpZC5uZXh0KGEpfX0pfWVycm9yKGEpe0MoKCk9'@;
put 'PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmhhc0Vycm9yPXRoaXMuaXNTdG9wcGVkPSEwLHRoaXMudGhyb3duRXJyb3I9YTtjb25zdHtvYnNlcnZlcnM6ZH09dGhpcztmb3IoO2QubGVuZ3RoOylkLnNoaWZ0KCkuZXJyb3IoYSl9fSl9Y29tcGxldGUo'@;
put 'KXtDKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlz'@;
put 'LmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVsbD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhp'@;
put 'cy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0'@;
put 'e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/dGU6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGYucHVzaChhKSxuZXcgZWUoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxxKGYsYSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVz'@;
put 'ZXMoYSl7Y29uc3R7aGFzRXJyb3I6ZCx0aHJvd25FcnJvcjpoLGlzU3RvcHBlZDpmfT10aGlzO2Q/YS5lcnJvcihoKTpmJiZhLmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7Y29uc3QgYT1uZXcgS2U7cmV0dXJuIGEuc291cmNlPXRoaXMsYX19cmV0dXJuIGMuY3JlYXRlPShsLGEpPT5uZXcg'@;
put 'QWUobCxhKSxjfSkoKTtjbGFzcyBBZSBleHRlbmRzIGJle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPWwsdGhpcy5zb3VyY2U9YX1uZXh0KGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6'@;
put 'YS5uZXh0KXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9ZXJyb3IobCl7dmFyIGEsZDtudWxsPT09KGQ9bnVsbD09PShhPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmVycm9yKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9Y29tcGxldGUoKXt2YXIgbCxhO251bGw9'@;
put 'PT0oYT1udWxsPT09KGw9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWw/dm9pZCAwOmwuY29tcGxldGUpfHx2b2lkIDA9PT1hfHxhLmNhbGwobCl9X3N1YnNjcmliZShsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGQ9bnVsbD09PShhPXRoaXMuc291cmNlKXx8dm9pZCAwPT09YT92b2lk'@;
put 'IDA6YS5zdWJzY3JpYmUobCkpJiZ2b2lkIDAhPT1kP2Q6dGV9fWNsYXNzIFRlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl92YWx1ZT1sfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZShsKXtjb25zdCBhPXN1cGVyLl9zdWJzY3Jp'@;
put 'YmUobCk7cmV0dXJuIWEuY2xvc2VkJiZsLm5leHQodGhpcy5fdmFsdWUpLGF9Z2V0VmFsdWUoKXtjb25zdHtoYXNFcnJvcjpsLHRocm93bkVycm9yOmEsX3ZhbHVlOmR9PXRoaXM7aWYobCl0aHJvdyBhO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksZH1uZXh0KGwpe3N1cGVyLm5leHQo'@;
put 'dGhpcy5fdmFsdWU9bCl9fWZ1bmN0aW9uIHFlKGMpe3JldHVybiBZKGM/LmxpZnQpfWZ1bmN0aW9uIFhlKGMpe3JldHVybiBsPT57aWYocWUobCkpcmV0dXJuIGwubGlmdChmdW5jdGlvbihhKXt0cnl7cmV0dXJuIGMoYSx0aGlzKX1jYXRjaChkKXt0aGlzLmVycm9yKGQpfX0pO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIil9fWZ1bmN0aW9uIFVlKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBodChjLGwsYSxkLGgpfWNsYXNzIGh0IGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIobCksdGhpcy5vbkZp'@;
put 'bmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT1fLHRoaXMuX25leHQ9YT9mdW5jdGlvbihUKXt0cnl7YShUKX1jYXRjaChXKXtsLmVycm9yKFcpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihUKXt0cnl7aChUKX1jYXRjaChXKXtsLmVycm9yKFcpfWZpbmFsbHl7'@;
put 'dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKFQpe2wuZXJyb3IoVCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5z'@;
put 'aG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBNZShjLGwpe3Jl'@;
put 'dHVybiBYZSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoVWUoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1mdW5jdGlvbiBNdChjLGwsYSxkKXt2YXIgXyxoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny'@;
put 'aXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBUPWMubGVuZ3RoLTE7VD49MDtULS0pKF89Y1tUXSkmJihmPShoPDM/XyhmKTpo'@;
put 'PjM/XyhsLGEsZik6XyhsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIF90KGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgX3Q/KHRoaXMudj1jLHRoaXMpOm5ldyBfdChjKX1mdW5jdGlvbiBydChjKXtpZighU3ltYm9sLmFz'@;
put 'eW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGEsbD1jW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbD9sLmNhbGwoYyk6KGM9ZnVuY3Rpb24gZnQoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGE9bCYmY1tsXSxkPTA7aWYoYSlyZXR1cm4gYS5jYWxsKGMpO2lmKGMmJiJudW1iZXIiPT10eXBlb2YgYy5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyYmZD49Yy5sZW5ndGgmJihjPXZvaWQgMCkse3ZhbHVlOmMmJmNbZCsr'@;
put 'XSxkb25lOiFjfX19O3Rocm93IG5ldyBUeXBlRXJyb3IobD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KGMpLGE9e30sZCgibmV4dCIpLGQoInRocm93IiksZCgicmV0dXJuIiksYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpc30sYSk7ZnVuY3Rpb24gZChmKXthW2ZdPWNbZl0mJmZ1bmN0aW9uKF8pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihULFcpeyFmdW5jdGlvbiBoKGYsXyxULFcpe1Byb21pc2UucmVzb2x2ZShXKS50aGVuKGZ1bmN0aW9uKGllKXtmKHt2YWx1ZTppZSxk'@;
put 'b25lOlR9KX0sXyl9KFQsVywoXz1jW2ZdKF8pKS5kb25lLF8udmFsdWUpfSl9fX0iZnVuY3Rpb24iPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7Y29uc3QgUm49Yz0+YyYmIm51bWJlciI9PXR5cGVvZiBjLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIGM7ZnVu'@;
put 'Y3Rpb24gJHQoYyl7cmV0dXJuIFkoYz8udGhlbil9ZnVuY3Rpb24gUG4oYyl7cmV0dXJuIFkoY1tGZV0pfWZ1bmN0aW9uIG5pKGMpe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmWShjPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBsbihjKXtyZXR1cm4gbmV3IFR5cGVF'@;
put 'cnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwg'@;
put 'QXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHFyPWZ1bmN0aW9uIGpuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gZ2koYyl7cmV0dXJuIFko'@;
put 'Yz8uW3FyXSl9ZnVuY3Rpb24geHIoYyl7cmV0dXJuIGZ1bmN0aW9uIE50KGMsbCxhKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGgsZD1hLmFwcGx5KGMsbHx8W10pLGY9W107'@;
put 'cmV0dXJuIGg9e30sXygibmV4dCIpLF8oInRocm93IiksXygicmV0dXJuIiksaFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saDtmdW5jdGlvbiBfKEVlKXtkW0VlXSYmKGhbRWVdPWZ1bmN0aW9uKFplKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o'@;
put 'b3QsZXQpe2YucHVzaChbRWUsWmUsb3QsZXRdKT4xfHxUKEVlLFplKX0pfSl9ZnVuY3Rpb24gVChFZSxaZSl7dHJ5eyFmdW5jdGlvbiBXKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIF90P1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKGllLGdlKTp3ZShmWzBdWzJdLEVlKX0oZFtF'@;
put 'ZV0oWmUpKX1jYXRjaChvdCl7d2UoZlswXVszXSxvdCl9fWZ1bmN0aW9uIGllKEVlKXtUKCJuZXh0IixFZSl9ZnVuY3Rpb24gZ2UoRWUpe1QoInRocm93IixFZSl9ZnVuY3Rpb24gd2UoRWUsWmUpe0VlKFplKSxmLnNoaWZ0KCksZi5sZW5ndGgmJlQoZlswXVswXSxmWzBdWzFdKX19KHRoaXMs'@;
put 'YXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgX3QoYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIF90KHZvaWQgMCk7eWllbGQgeWllbGQgX3QoZCl9fWZpbmFsbHl7YS5yZWxlYXNlTG9j'@;
put 'aygpfX0pfWZ1bmN0aW9uIFVpKGMpe3JldHVybiBZKGM/LmdldFJlYWRlcil9ZnVuY3Rpb24gS3IoYyl7aWYoYyBpbnN0YW5jZW9mIEtlKXJldHVybiBjO2lmKG51bGwhPWMpe2lmKFBuKGMpKXJldHVybiBmdW5jdGlvbiBubyhjKXtyZXR1cm4gbmV3IEtlKGw9Pntjb25zdCBhPWNbRmVdKCk7'@;
put 'aWYoWShhLnN1YnNjcmliZSkpcmV0dXJuIGEuc3Vic2NyaWJlKGwpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0oYyk7aWYoUm4oYykpcmV0dXJuIGZ1bmN0aW9uIEhyKGMpe3Jl'@;
put 'dHVybiBuZXcgS2UobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gcWkoYyl7cmV0dXJuIG5ldyBLZShsPT57Yy50aGVuKGE9PntsLmNsb3NlZHx8KGwubmV4dChh'@;
put 'KSxsLmNvbXBsZXRlKCkpfSxhPT5sLmVycm9yKGEpKS50aGVuKG51bGwsY2UpfSl9KGMpO2lmKG5pKGMpKXJldHVybiBhbyhjKTtpZihnaShjKSlyZXR1cm4gZnVuY3Rpb24gSmkoYyl7cmV0dXJuIG5ldyBLZShsPT57Zm9yKGNvbnN0IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0'@;
put 'dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihVaShjKSlyZXR1cm4gZnVuY3Rpb24gcm8oYyl7cmV0dXJuIGFvKHhyKGMpKX0oYyl9dGhyb3cgbG4oYyl9ZnVuY3Rpb24gYW8oYyl7cmV0dXJuIG5ldyBLZShsPT57KGZ1bmN0aW9uIGlvKGMsbCl7dmFyIGEsZCxoLGY7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IFduKGMsbCxhLGQpe3JldHVybiBuZXcoYXx8KGE9UHJvbWlzZSkpKGZ1bmN0aW9uKGYsXyl7ZnVuY3Rpb24gVChnZSl7dHJ5e2llKGQubmV4dChnZSkpfWNhdGNoKHdlKXtfKHdlKX19ZnVuY3Rpb24gVyhnZSl7dHJ5e2llKGQudGhyb3coZ2UpKX1jYXRjaCh3ZSl7Xyh3ZSl9fWZ1bmN0aW9u'@;
put 'IGllKGdlKXtnZS5kb25lP2YoZ2UudmFsdWUpOmZ1bmN0aW9uIGgoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBhP2Y6bmV3IGEoZnVuY3Rpb24oXyl7XyhmKX0pfShnZS52YWx1ZSkudGhlbihULFcpfWllKChkPWQuYXBwbHkoYyxsfHxbXSkpLm5leHQoKSl9KX0odGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKigpe3RyeXtmb3IoYT1ydChjKTshKGQ9eWllbGQgYS5uZXh0KCkpLmRvbmU7KWlmKGwubmV4dChkLnZhbHVlKSxsLmNsb3NlZClyZXR1cm59Y2F0Y2goXyl7aD17ZXJyb3I6X319ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKGY9YS5yZXR1cm4pJiYoeWllbGQgZi5jYWxsKGEp'@;
put 'KX1maW5hbGx5e2lmKGgpdGhyb3cgaC5lcnJvcn19bC5jb21wbGV0ZSgpfSl9KShjLGwpLmNhdGNoKGE9PmwuZXJyb3IoYSkpfSl9ZnVuY3Rpb24gR2koYyxsLGEsZD0wLGg9ITEpe2NvbnN0IGY9bC5zY2hlZHVsZShmdW5jdGlvbigpe2EoKSxoP2MuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxk'@;
put 'KSk6dGhpcy51bnN1YnNjcmliZSgpfSxkKTtpZihjLmFkZChmKSwhaClyZXR1cm4gZn1mdW5jdGlvbiB5cihjLGwsYT0xLzApe3JldHVybiBZKGwpP3lyKChkLGgpPT5NZSgoZixfKT0+bChkLGYsaCxfKSkoS3IoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksWGUoKGQs'@;
put 'aCk9PmZ1bmN0aW9uIGhvKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1bXTtsZXQgaWU9MCxnZT0wLHdlPSExO2NvbnN0IEVlPSgpPT57d2UmJiFXLmxlbmd0aCYmIWllJiZsLmNvbXBsZXRlKCl9LFplPWV0PT5pZTxkP290KGV0KTpXLnB1c2goZXQpLG90PWV0PT57ZiYmbC5uZXh0KGV0KSxp'@;
put 'ZSsrO2xldCB5dD0hMTtLcihhKGV0LGdlKyspKS5zdWJzY3JpYmUoVWUobCxrdD0+e2g/LihrdCksZj9aZShrdCk6bC5uZXh0KGt0KX0sKCk9Pnt5dD0hMH0sdm9pZCAwLCgpPT57aWYoeXQpdHJ5e2ZvcihpZS0tO1cubGVuZ3RoJiZpZTxkOyl7Y29uc3Qga3Q9Vy5zaGlmdCgpO18/R2kobCxf'@;
put 'LCgpPT5vdChrdCkpOm90KGt0KX1FZSgpfWNhdGNoKGt0KXtsLmVycm9yKGt0KX19KSl9O3JldHVybiBjLnN1YnNjcmliZShVZShsLFplLCgpPT57d2U9ITAsRWUoKX0pKSwoKT0+e1Q/LigpfX0oZCxoLGMsYSkpKX1mdW5jdGlvbiBQaShjPTEvMCl7cmV0dXJuIHlyKE9lLGMpfWNvbnN0IExv'@;
put 'PW5ldyBLZShjPT5jLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIExjKGMpe3JldHVybiBjJiZZKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIHVsKGMpe3JldHVybiBjW2MubGVuZ3RoLTFdfWZ1bmN0aW9uIFJjKGMpe3JldHVybiBZKHVsKGMpKT9jLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBOMChjKXtyZXR1'@;
put 'cm4gTGModWwoYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGsyKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PnthLnN1YnNjcmliZShVZShkLGg9PkdpKGQsYywoKT0+ZC5uZXh0KGgpLGwpLCgpPT5HaShkLGMsKCk9PmQuY29tcGxldGUoKSxsKSxoPT5HaShkLGMsKCk9PmQuZXJyb3IoaCks'@;
put 'bCkpKX0pfWZ1bmN0aW9uIGUwKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PntkLmFkZChjLnNjaGVkdWxlKCgpPT5hLnN1YnNjcmliZShkKSxsKSl9KX1mdW5jdGlvbiBBMihjLGwpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IEtl'@;
put 'KGE9PntHaShhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7R2koYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTphLm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIGVhKGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24g'@;
put 'UGgoYyxsKXtpZihudWxsIT1jKXtpZihQbihjKSlyZXR1cm4gZnVuY3Rpb24geHUoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYoUm4oYykpcmV0dXJuIGZ1bmN0aW9uIFBhKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVs'@;
put 'ZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gZnMoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYo'@;
put 'bmkoYykpcmV0dXJuIEEyKGMsbCk7aWYoZ2koYykpcmV0dXJuIGZ1bmN0aW9uIFNyKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ7cmV0dXJuIEdpKGEsbCwoKT0+e2Q9Y1txcl0oKSxHaShhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2go'@;
put 'Xyl7cmV0dXJuIHZvaWQgYS5lcnJvcihfKX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PlkoZD8ucmV0dXJuKSYmZC5yZXR1cm4oKX0pfShjLGwpO2lmKFVpKGMpKXJldHVybiBmdW5jdGlvbiBhMyhjLGwpe3JldHVybiBBMih4cihjKSxsKX0oYyxsKX10aHJvdyBsbihj'@;
put 'KX0oYyxsKTpLcihjKX1mdW5jdGlvbiBpcyguLi5jKXtjb25zdCBsPU4wKGMpLGE9ZnVuY3Rpb24gczMoYyxsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHVsKGMpP2MucG9wKCk6bH0oYywxLzApLGQ9YztyZXR1cm4gZC5sZW5ndGg/MT09PWQubGVuZ3RoP0tyKGRbMF0pOlBpKGEpKGVhKGQs'@;
put 'bCkpOkxvfWZ1bmN0aW9uIFdpKC4uLmMpe3JldHVybiBlYShjLE4wKGMpKX1mdW5jdGlvbiAkYShjPXt9KXtjb25zdHtjb25uZWN0b3I6bD0oKCk9Pm5ldyBiZSkscmVzZXRPbkVycm9yOmE9ITAscmVzZXRPbkNvbXBsZXRlOmQ9ITAscmVzZXRPblJlZkNvdW50WmVybzpoPSEwfT1jO3JldHVy'@;
put 'biBmPT57bGV0IF8sVCxXLGllPTAsZ2U9ITEsd2U9ITE7Y29uc3QgRWU9KCk9PntUPy51bnN1YnNjcmliZSgpLFQ9dm9pZCAwfSxaZT0oKT0+e0VlKCksXz1XPXZvaWQgMCxnZT13ZT0hMX0sb3Q9KCk9Pntjb25zdCBldD1fO1plKCksZXQ/LnVuc3Vic2NyaWJlKCl9O3JldHVybiBYZSgoZXQs'@;
put 'eXQpPT57aWUrKywhd2UmJiFnZSYmRWUoKTtjb25zdCBrdD1XPVc/P2woKTt5dC5hZGQoKCk9PntpZS0tLDA9PT1pZSYmIXdlJiYhZ2UmJihUPXQwKG90LGgpKX0pLGt0LnN1YnNjcmliZSh5dCksIV8mJmllPjAmJihfPW5ldyBuZSh7bmV4dDpTdD0+a3QubmV4dChTdCksZXJyb3I6U3Q9Pnt3'@;
put 'ZT0hMCxFZSgpLFQ9dDAoWmUsYSxTdCksa3QuZXJyb3IoU3QpfSxjb21wbGV0ZTooKT0+e2dlPSEwLEVlKCksVD10MChaZSxkKSxrdC5jb21wbGV0ZSgpfX0pLEtyKGV0KS5zdWJzY3JpYmUoXykpfSkoZil9fWZ1bmN0aW9uIHQwKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZvaWQgYygp'@;
put 'O2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgbmUoe25leHQ6KCk9PntkLnVuc3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBLcihsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gU2EoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD1udWxsLGY9MCxfPSExO2NvbnN0IFQ9KCk9'@;
put 'Pl8mJiFoJiZkLmNvbXBsZXRlKCk7YS5zdWJzY3JpYmUoVWUoZCxXPT57aD8udW5zdWJzY3JpYmUoKTtsZXQgaWU9MDtjb25zdCBnZT1mKys7S3IoYyhXLGdlKSkuc3Vic2NyaWJlKGg9VWUoZCx3ZT0+ZC5uZXh0KGw/bChXLHdlLGdlLGllKyspOndlKSwoKT0+e2g9bnVsbCxUKCl9KSl9LCgp'@;
put 'PT57Xz0hMCxUKCl9KSl9KX1mdW5jdGlvbiBFdShjLGwpe3JldHVybiBjPT09bH1mdW5jdGlvbiBBcyhjKXtmb3IobGV0IGwgaW4gYylpZihjW2xdPT09QXMpcmV0dXJuIGw7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlbmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1m'@;
put 'dW5jdGlvbiBuMChjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmIWMuaGFzT3duUHJvcGVydHkoYSkmJihjW2FdPWxbYV0pfWZ1bmN0aW9uIHFhKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihBcnJheS5pc0FycmF5KGMpKXJldHVybiJbIitj'@;
put 'Lm1hcChxYSkuam9pbigiLCAiKSsiXSI7aWYobnVsbD09YylyZXR1cm4iIitjO2lmKGMub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7Yy5vdmVycmlkZGVuTmFtZX1gO2lmKGMubmFtZSlyZXR1cm5gJHtjLm5hbWV9YDtjb25zdCBsPWMudG9TdHJpbmcoKTtpZihudWxsPT1sKXJldHVybiIiK2w7'@;
put 'Y29uc3QgYT1sLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1hP2w6bC5zdWJzdHJpbmcoMCxhKX1mdW5jdGlvbiB2YyhjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWM/bnVsbD09PWw/IiI6bDpudWxsPT1sfHwiIj09PWw/YzpjKyIgIitsfWNvbnN0IEhoPUFzKHtfX2ZvcndhcmRfcmVmX186'@;
put 'QXN9KTtmdW5jdGlvbiBJcyhjKXtyZXR1cm4gYy5fX2ZvcndhcmRfcmVmX189SXMsYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBxYSh0aGlzKCkpfSxjfWZ1bmN0aW9uIGJvKGMpe3JldHVybiByMChjKT9jKCk6Y31mdW5jdGlvbiByMChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'YyYmYy5oYXNPd25Qcm9wZXJ0eShIaCkmJmMuX19mb3J3YXJkX3JlZl9fPT09SXN9ZnVuY3Rpb24gVDIoYyl7cmV0dXJuIGMmJiEhYy5cdTAyNzVwcm92aWRlcnN9Y29uc3QgbDM9Imh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiO2NsYXNzIEFyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0'@;
put 'b3IobCxhKXtzdXBlcihmdW5jdGlvbiBfYyhjLGwpe3JldHVybmBORzAke01hdGguYWJzKGMpfSR7bD8iOiAiK2w6IiJ9YH0obCxhKSksdGhpcy5jb2RlPWx9fWZ1bmN0aW9uIGtvKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0aW9uIFFp'@;
put 'KGMsbCl7dGhyb3cgbmV3IEFyKC0yMDEsITEpfWZ1bmN0aW9uIGZyKGMsbCl7bnVsbD09YyYmZnVuY3Rpb24gSG8oYyxsLGEsZCl7dGhyb3cgbmV3IEVycm9yKGBBU1NFUlRJT04gRVJST1I6ICR7Y31gKyhudWxsPT1kPyIiOmAgW0V4cGVjdGVkPT4gJHthfSAke2R9ICR7bH0gPD1BY3R1YWxd'@;
put 'YCkpfShsLGMsbnVsbCwiIT0iKX1mdW5jdGlvbiBocihjKXtyZXR1cm57dG9rZW46Yy50b2tlbixwcm92aWRlZEluOmMucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OmMuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIG1pKGMpe3JldHVybntwcm92aWRlcnM6Yy5wcm92aWRlcnN8fFtd'@;
put 'LGltcG9ydHM6Yy5pbXBvcnRzfHxbXX19ZnVuY3Rpb24geGQoYyl7cmV0dXJuIEIwKGMsYzMpfHxCMChjLE5zKX1mdW5jdGlvbiBCMChjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KGwpP2NbbF06bnVsbH1mdW5jdGlvbiBubShjKXtyZXR1cm4gYyYmKGMuaGFzT3duUHJvcGVydHkoamgp'@;
put 'fHxjLmhhc093blByb3BlcnR5KEs3KSk/Y1tqaF06bnVsbH1jb25zdCBjMz1Bcyh7XHUwMjc1cHJvdjpBc30pLGpoPUFzKHtcdTAyNzVpbmo6QXN9KSxOcz1Bcyh7bmdJbmplY3RhYmxlRGVmOkFzfSksSzc9QXMoe25nSW5qZWN0b3JEZWY6QXN9KTt2YXIgbnM9ZnVuY3Rpb24oYyl7cmV0dXJu'@;
put 'IGNbYy5EZWZhdWx0PTBdPSJEZWZhdWx0IixjW2MuSG9zdD0xXT0iSG9zdCIsY1tjLlNlbGY9Ml09IlNlbGYiLGNbYy5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLGNbYy5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGN9KG5zfHx7fSk7bGV0IGg0O2Z1bmN0aW9uIGRpKGMpe2NvbnN0IGw9aDQ7cmV0'@;
put 'dXJuIGg0PWMsbH1mdW5jdGlvbiBXcyhjLGwsYSl7Y29uc3QgZD14ZChjKTtyZXR1cm4gZCYmInJvb3QiPT1kLnByb3ZpZGVkSW4/dm9pZCAwPT09ZC52YWx1ZT9kLnZhbHVlPWQuZmFjdG9yeSgpOmQudmFsdWU6YSZucy5PcHRpb25hbD9udWxsOnZvaWQgMCE9PWw/bDp2b2lkIFFpKHFhKGMp'@;
put 'KX1jb25zdCBPaT0oKCk9PnR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNl'@;
put 'b2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksczA9e30sazE9Il9fTkdfRElfRkxBR19fIixrdT0ibmdUZW1wVG9rZW5QYXRoIixuYz0vXG4vZ20sb209Il9fc291cmNlIjtsZXQga2Q7ZnVuY3Rpb24gQTEoYyl7Y29uc3QgbD1rZDtyZXR1cm4ga2Q9YyxsfWZ1bmN0aW9uIFg3KGMsbD1u'@;
put 'cy5EZWZhdWx0KXtpZih2b2lkIDA9PT1rZCl0aHJvdyBuZXcgQXIoLTIwMywhMSk7cmV0dXJuIG51bGw9PT1rZD9XcyhjLHZvaWQgMCxsKTprZC5nZXQoYyxsJm5zLk9wdGlvbmFsP251bGw6dm9pZCAwLGwpfWZ1bmN0aW9uIGFyKGMsbD1ucy5EZWZhdWx0KXtyZXR1cm4oZnVuY3Rpb24gc3Mo'@;
put 'KXtyZXR1cm4gaDR9KCl8fFg3KShibyhjKSxsKX1mdW5jdGlvbiBGaShjLGw9bnMuRGVmYXVsdCl7cmV0dXJuIGFyKGMsYTAobCkpfWZ1bmN0aW9uIGEwKGMpe3JldHVybiB0eXBlb2YgYz4idSJ8fCJudW1iZXIiPT10eXBlb2YgYz9jOjB8KGMub3B0aW9uYWwmJjgpfChjLmhvc3QmJjEpfChj'@;
put 'LnNlbGYmJjIpfChjLnNraXBTZWxmJiY0KX1mdW5jdGlvbiBLYyhjKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWJvKGNbYV0pO2lmKEFycmF5LmlzQXJyYXkoZCkpe2lmKDA9PT1kLmxlbmd0aCl0aHJvdyBuZXcgQXIoOTAwLCExKTtsZXQgaCxmPW5z'@;
put 'LkRlZmF1bHQ7Zm9yKGxldCBfPTA7XzxkLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZFtfXSxXPXNtKFQpOyJudW1iZXIiPT10eXBlb2YgVz8tMT09PVc/aD1ULnRva2VuOmZ8PVc6aD1UfWwucHVzaChhcihoLGYpKX1lbHNlIGwucHVzaChhcihkKSl9cmV0dXJuIGx9ZnVuY3Rpb24gemgoYyxsKXty'@;
put 'ZXR1cm4gY1trMV09bCxjLnByb3RvdHlwZVtrMV09bCxjfWZ1bmN0aW9uIHNtKGMpe3JldHVybiBjW2sxXX1mdW5jdGlvbiBkdShjKXtyZXR1cm57dG9TdHJpbmc6Y30udG9TdHJpbmcoKX12YXIgVDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5PblB1c2g9MF09Ik9uUHVzaCIsY1tjLkRlZmF1'@;
put 'bHQ9MV09IkRlZmF1bHQiLGN9KFQxfHx7fSksT2M9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLGNbYy5Ob25lPTJdPSJOb25lIixjW2MuU2hhZG93RG9tPTNdPSJTaGFkb3dEb20iLGN9KE9jfHx7fSk7Y29uc3QgWGM9e30sU3M9W10sVGQ9QXMoe1x1MDI3'@;
put 'NWNtcDpBc30pLFVoPUFzKHtcdTAyNzVkaXI6QXN9KSxKYz1Bcyh7XHUwMjc1cGlwZTpBc30pLEQxPUFzKHtcdTAyNzVtb2Q6QXN9KSxsMD1Bcyh7XHUwMjc1ZmFjOkFzfSksWmg9QXMoe19fTkdfRUxFTUVOVF9JRF9fOkFzfSksbWE9QXMoe19fTkdfRU5WX0lEX186QXN9KTtmdW5jdGlvbiBQ'@;
put 'YyhjLGwsYSl7bGV0IGQ9Yy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBoPWMuaW5kZXhPZihsLGEpO2lmKC0xPT09aClyZXR1cm4gaDtpZigwPT09aHx8Yy5jaGFyQ29kZUF0KGgtMSk8PTMyKXtjb25zdCBmPWwubGVuZ3RoO2lmKGgrZj09PWR8fGMuY2hhckNvZGVBdChoK2YpPD0zMilyZXR1cm4g'@;
put 'aH1hPWgrMX19ZnVuY3Rpb24gRGQoYyxsLGEpe2xldCBkPTA7Zm9yKDtkPGEubGVuZ3RoOyl7Y29uc3QgaD1hW2RdO2lmKCJudW1iZXIiPT10eXBlb2YgaCl7aWYoMCE9PWgpYnJlYWs7ZCsrO2NvbnN0IGY9YVtkKytdLF89YVtkKytdLFQ9YVtkKytdO2Muc2V0QXR0cmlidXRlKGwsXyxULGYp'@;
put 'fWVsc2V7Y29uc3QgZj1oLF89YVsrK2RdO2Y0KGYpP2Muc2V0UHJvcGVydHkobCxmLF8pOmMuc2V0QXR0cmlidXRlKGwsZixfKSxkKyt9fXJldHVybiBkfWZ1bmN0aW9uIFIyKGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9PT1jfWZ1bmN0aW9uIGY0KGMpe3JldHVybiA2ND09PWMuY2hhckNv'@;
put 'ZGVBdCgwKX1mdW5jdGlvbiBZaChjLGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgpaWYobnVsbD09PWN8fDA9PT1jLmxlbmd0aCljPWwuc2xpY2UoKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9'@;
put 'aDowPT09YXx8cDQoYyxhLGgsbnVsbCwtMT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19cmV0dXJuIGN9ZnVuY3Rpb24gcDQoYyxsLGEsZCxoKXtsZXQgZj0wLF89Yy5sZW5ndGg7aWYoLTE9PT1sKV89LTE7ZWxzZSBmb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZisrXTtpZigibnVtYmVy'@;
put 'Ij09dHlwZW9mIFQpe2lmKFQ9PT1sKXtfPS0xO2JyZWFrfWlmKFQ+bCl7Xz1mLTE7YnJlYWt9fX1mb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZl07aWYoIm51bWJlciI9PXR5cGVvZiBUKWJyZWFrO2lmKFQ9PT1hKXtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsIT09aCYmKGNbZisx'@;
put 'XT1oKSk7aWYoZD09PWNbZisxXSlyZXR1cm4gdm9pZChjW2YrMl09aCl9ZisrLG51bGwhPT1kJiZmKyssbnVsbCE9PWgmJmYrK30tMSE9PV8mJihjLnNwbGljZShfLDAsbCksZj1fKzEpLGMuc3BsaWNlKGYrKywwLGEpLG51bGwhPT1kJiZjLnNwbGljZShmKyssMCxkKSxudWxsIT09aCYmYy5z'@;
put 'cGxpY2UoZisrLDAsaCl9Y29uc3QgZzQ9Im5nLXRlbXBsYXRlIjtmdW5jdGlvbiBKNyhjLGwsYSl7bGV0IGQ9MCxoPSEwO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZCsrXTtpZigic3RyaW5nIj09dHlwZW9mIGYmJmgpe2NvbnN0IF89Y1tkKytdO2lmKGEmJiJjbGFzcyI9PT1mJiYtMSE9'@;
put 'PVBjKF8udG9Mb3dlckNhc2UoKSxsLDApKXJldHVybiEwfWVsc2V7aWYoMT09PWYpe2Zvcig7ZDxjLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihmPWNbZCsrXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWwpcmV0dXJuITA7cmV0dXJuITF9Im51bWJlciI9PXR5cGVvZiBmJiYoaD0hMSl9fXJl'@;
put 'dHVybiExfWZ1bmN0aW9uIHUzKGMpe3JldHVybiA0PT09Yy50eXBlJiZjLnZhbHVlIT09ZzR9ZnVuY3Rpb24gTWEoYyxsLGEpe3JldHVybiBsPT09KDQhPT1jLnR5cGV8fGE/Yy52YWx1ZTpnNCl9ZnVuY3Rpb24gYzAoYyxsLGEpe2xldCBkPTQ7Y29uc3QgaD1jLmF0dHJzfHxbXSxmPWZ1bmN0'@;
put 'aW9uIFE3KGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKFIyKGNbbF0pKXJldHVybiBsO3JldHVybiBjLmxlbmd0aH0oaCk7bGV0IF89ITE7Zm9yKGxldCBUPTA7VDxsLmxlbmd0aDtUKyspe2NvbnN0IFc9bFtUXTtpZigibnVtYmVyIiE9dHlwZW9mIFcpe2lmKCFfKWlmKDQmZCl7'@;
put 'aWYoZD0yfDEmZCwiIiE9PVcmJiFNYShjLFcsYSl8fCIiPT09VyYmMT09PWwubGVuZ3RoKXtpZihGYyhkKSlyZXR1cm4hMTtfPSEwfX1lbHNle2NvbnN0IGllPTgmZD9XOmxbKytUXTtpZig4JmQmJm51bGwhPT1jLmF0dHJzKXtpZighSjcoYy5hdHRycyxpZSxhKSl7aWYoRmMoZCkpcmV0dXJu'@;
put 'ITE7Xz0hMH1jb250aW51ZX1jb25zdCB3ZT1kMyg4JmQ/ImNsYXNzIjpXLGgsdTMoYyksYSk7aWYoLTE9PT13ZSl7aWYoRmMoZCkpcmV0dXJuITE7Xz0hMDtjb250aW51ZX1pZigiIiE9PWllKXtsZXQgRWU7RWU9d2U+Zj8iIjpoW3dlKzFdLnRvTG93ZXJDYXNlKCk7Y29uc3QgWmU9OCZkP0Vl'@;
put 'Om51bGw7aWYoWmUmJi0xIT09UGMoWmUsaWUsMCl8fDImZCYmaWUhPT1FZSl7aWYoRmMoZCkpcmV0dXJuITE7Xz0hMH19fX1lbHNle2lmKCFfJiYhRmMoZCkmJiFGYyhXKSlyZXR1cm4hMTtpZihfJiZGYyhXKSljb250aW51ZTtfPSExLGQ9V3wxJmR9fXJldHVybiBGYyhkKXx8X31mdW5jdGlv'@;
put 'biBGYyhjKXtyZXR1cm4gMD09KDEmYyl9ZnVuY3Rpb24gZDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3QgXz1sW2hdO2lmKF89PT1jKXJldHVybiBoO2lmKDM9PT1ffHw2PT09XylmPSEwO2Vs'@;
put 'c2V7aWYoMT09PV98fDI9PT1fKXtsZXQgVD1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIFQ7KVQ9bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT1fKWJyZWFrO2lmKDA9PT1fKXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24gZTkoYyxsKXtsZXQgYT1j'@;
put 'LmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBtNChjLGwsYT0hMSl7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0'@;
put 'aDtkKyspaWYoYzAoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHY0KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKGNbaF0hPT1kW2hd'@;
put 'KWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIGRsKGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBhbShjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCBfPWNbYV07aWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiBfKWlmKDImZCl7Y29uc3QgVD1jWysrYV07aCs9IlsiK18rKFQubGVuZ3RoPjA/Jz0iJytUKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIitfOjQmZCYmKGgrPSIgIitfKTtlbHNlIiIhPT1oJiYhRmMoXykmJihsKz1kbChmLGgpLGg9IiIpLGQ9XyxmPWZ8fCFGYyhkKTthKyt9'@;
put 'cmV0dXJuIiIhPT1oJiYobCs9ZGwoZixoKSksbH1mdW5jdGlvbiB3cihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3Rv'@;
put 'cnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09VDEuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3Rvcjpu'@;
put 'dWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fE9jLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8U3MsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGwsaWQ6IiJ9O2NtKGEpO2NvbnN0'@;
put 'IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1mMyhkLCExKSxhLnBpcGVEZWZzPWYzKGQsITApLGEuaWQ9ZnVuY3Rpb24gcjkoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RWYXJzLGMuaG9zdEF0dHJzLGMu'@;
put 'Y29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYy50eXBlLnByb3RvdHlw'@;
put 'ZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKTw8MDtyZXR1cm4gbCs9MjE0NzQ4MzY0OCwiYyIrbH0oYSksYX0pfWZ1bmN0aW9uIHk0KGMpe3JldHVybiBRbyhjKXx8'@;
put 'S2EoYyl9ZnVuY3Rpb24gbG0oYyl7cmV0dXJuIG51bGwhPT1jfWZ1bmN0aW9uIHZpKGMpe3JldHVybiBkdSgoKT0+KHt0eXBlOmMudHlwZSxib290c3RyYXA6Yy5ib290c3RyYXB8fFNzLGRlY2xhcmF0aW9uczpjLmRlY2xhcmF0aW9uc3x8U3MsaW1wb3J0czpjLmltcG9ydHN8fFNzLGV4cG9y'@;
put 'dHM6Yy5leHBvcnRzfHxTcyx0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLGlkOmMuaWR8fG51bGx9KSl9ZnVuY3Rpb24gaDMoYyxsKXtpZihudWxsPT1jKXJldHVybiBYYztjb25zdCBhPXt9O2Zvcihjb25zdCBkIGluIGMpaWYoYy5oYXNPd25Q'@;
put 'cm9wZXJ0eShkKSl7bGV0IGg9Y1tkXSxmPWg7QXJyYXkuaXNBcnJheShoKSYmKGY9aFsxXSxoPWhbMF0pLGFbaF09ZCxsJiYobFtoXT1mKX1yZXR1cm4gYX1mdW5jdGlvbiBDcihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpO3JldHVybiBjbShsKSxsfSl9ZnVuY3Rpb24gTmEoYyl7'@;
put 'cmV0dXJue3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLGZhY3Rvcnk6bnVsbCxwdXJlOiExIT09Yy5wdXJlLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsb25EZXN0cm95OmMudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIFFvKGMpe3JldHVybiBjW1RkXXx8'@;
put 'bnVsbH1mdW5jdGlvbiBLYShjKXtyZXR1cm4gY1tVaF18fG51bGx9ZnVuY3Rpb24gUmwoYyl7cmV0dXJuIGNbSmNdfHxudWxsfWZ1bmN0aW9uIEhjKGMsbCl7Y29uc3QgYT1jW0QxXXx8bnVsbDtpZighYSYmITA9PT1sKXRocm93IG5ldyBFcnJvcihgVHlwZSAke3FhKGMpfSBkb2VzIG5vdCBo'@;
put 'YXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIEM0KGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9yeTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpjLmhv'@;
put 'c3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmwsaW5wdXRUcmFuc2Zvcm1zOm51bGwsaW5wdXRDb25maWc6Yy5pbnB1dHN8fFhjLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51bGws'@;
put 'c3RhbmRhbG9uZTohMD09PWMuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8U3Msdmlld1F1ZXJ5OmMudmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmMuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURl'@;
put 'ZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czpoMyhjLmlucHV0cyxsKSxvdXRwdXRzOmgzKGMub3V0cHV0cyl9fWZ1bmN0aW9uIGNtKGMpe2MuZmVhdHVyZXM/LmZvckVhY2gobD0+bChjKSl9ZnVuY3Rpb24gZjMoYyxsKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBhPWw/Umw6'@;
put 'eTQ7cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YykubWFwKGQ9PmEoZCkpLmZpbHRlcihsbSl9Y29uc3QgSGk9MCxCaT0xLERvPTIsdWE9MyxYYT00LEkxPTUsem89NixUdT03LFZhPTgsTGQ9OSxMMT0xMCxWbz0xMSxHaD0xMixTND0xMyxPbD0xNCxKYT0xNSxPMj0xNixQ'@;
put 'Mj0xNyxodT0xOCwkaD0xOSxSMT0yMCxPMT0yMSx1MD0yMixwMz0yMyxnMz0yNCxwcz0yNSxNND0xLHVtPTIsZDA9NyxIMj05LHJjPTExO2Z1bmN0aW9uIENjKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbTTRdfWZ1bmN0aW9uIGljKGMpe3JldHVybiBB'@;
put 'cnJheS5pc0FycmF5KGMpJiYhMD09PWNbTTRdfWZ1bmN0aW9uIE9kKGMpe3JldHVybiAwIT0oNCZjLmZsYWdzKX1mdW5jdGlvbiBQMShjKXtyZXR1cm4gYy5jb21wb25lbnRPZmZzZXQ+LTF9ZnVuY3Rpb24gcWgoYyl7cmV0dXJuIDE9PSgxJmMuZmxhZ3MpfWZ1bmN0aW9uIFFjKGMpe3JldHVy'@;
put 'biEhYy50ZW1wbGF0ZX1mdW5jdGlvbiB4NChjKXtyZXR1cm4gMCE9KDUxMiZjW0RvXSl9ZnVuY3Rpb24gSDEoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShsMCk/Y1tsMF06bnVsbH1sZXQgSGQ9T2kuV2Vha1JlZj8/Y2xhc3MgajB7Y29uc3RydWN0b3IobCl7dGhpcy5yZWY9bH1kZXJl'@;
put 'Zigpe3JldHVybiB0aGlzLnJlZn19LG1tPTAsRHU9bnVsbCxtMz0hMTtmdW5jdGlvbiBmbChjKXtjb25zdCBsPUR1O3JldHVybiBEdT1jLGx9Y2xhc3MgdjN7Y29uc3RydWN0b3IoKXt0aGlzLmlkPW1tKyssdGhpcy5yZWY9ZnVuY3Rpb24gTjIoYyl7cmV0dXJuIG5ldyBIZChjKX0odGhpcyks'@;
put 'dGhpcy5wcm9kdWNlcnM9bmV3IE1hcCx0aGlzLmNvbnN1bWVycz1uZXcgTWFwLHRoaXMudHJhY2tpbmdWZXJzaW9uPTAsdGhpcy52YWx1ZVZlcnNpb249MH1jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKXtmb3IoY29uc3RbbCxhXW9mIHRoaXMucHJvZHVjZXJzKXtjb25zdCBkPWEu'@;
put 'cHJvZHVjZXJOb2RlLmRlcmVmKCk7aWYobnVsbCE9ZCYmYS5hdFRyYWNraW5nVmVyc2lvbj09PXRoaXMudHJhY2tpbmdWZXJzaW9uKXtpZihkLnByb2R1Y2VyUG9sbFN0YXR1cyhhLnNlZW5WYWx1ZVZlcnNpb24pKXJldHVybiEwfWVsc2UgdGhpcy5wcm9kdWNlcnMuZGVsZXRlKGwpLGQ/LmNv'@;
put 'bnN1bWVycy5kZWxldGUodGhpcy5pZCl9cmV0dXJuITF9cHJvZHVjZXJNYXlIYXZlQ2hhbmdlZCgpe2NvbnN0IGw9bTM7bTM9ITA7dHJ5e2Zvcihjb25zdFthLGRdb2YgdGhpcy5jb25zdW1lcnMpe2NvbnN0IGg9ZC5jb25zdW1lck5vZGUuZGVyZWYoKTtudWxsIT1oJiZoLnRyYWNraW5nVmVy'@;
put 'c2lvbj09PWQuYXRUcmFja2luZ1ZlcnNpb24/aC5vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCk6KHRoaXMuY29uc3VtZXJzLmRlbGV0ZShhKSxoPy5wcm9kdWNlcnMuZGVsZXRlKHRoaXMuaWQpKX19ZmluYWxseXttMz1sfX1wcm9kdWNlckFjY2Vzc2VkKCl7aWYobTMpdGhy'@;
put 'b3cgbmV3IEVycm9yKCIiKTtpZihudWxsPT09RHUpcmV0dXJuO2xldCBsPUR1LnByb2R1Y2Vycy5nZXQodGhpcy5pZCk7dm9pZCAwPT09bD8obD17Y29uc3VtZXJOb2RlOkR1LnJlZixwcm9kdWNlck5vZGU6dGhpcy5yZWYsc2VlblZhbHVlVmVyc2lvbjp0aGlzLnZhbHVlVmVyc2lvbixhdFRy'@;
put 'YWNraW5nVmVyc2lvbjpEdS50cmFja2luZ1ZlcnNpb259LER1LnByb2R1Y2Vycy5zZXQodGhpcy5pZCxsKSx0aGlzLmNvbnN1bWVycy5zZXQoRHUuaWQsbCkpOihsLnNlZW5WYWx1ZVZlcnNpb249dGhpcy52YWx1ZVZlcnNpb24sbC5hdFRyYWNraW5nVmVyc2lvbj1EdS50cmFja2luZ1ZlcnNp'@;
put 'b24pfWdldCBoYXNQcm9kdWNlcnMoKXtyZXR1cm4gdGhpcy5wcm9kdWNlcnMuc2l6ZT4wfWdldCBwcm9kdWNlclVwZGF0ZXNBbGxvd2VkKCl7cmV0dXJuITEhPT1EdT8uY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlc31wcm9kdWNlclBvbGxTdGF0dXMobCl7cmV0dXJuIHRoaXMudmFsdWVWZXJz'@;
put 'aW9uIT09bHx8KHRoaXMub25Qcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbigpLHRoaXMudmFsdWVWZXJzaW9uIT09bCl9fWxldCBMdT1udWxsO2Z1bmN0aW9uIEtoKGMpe2NvbnN0IGw9ZmwobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtmbChsKX19Y29uc3QgVTA9KCk9Pnt9O2NsYXNz'@;
put 'IF9tIGV4dGVuZHMgdjN7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKCksdGhpcy53YXRjaD1sLHRoaXMuc2NoZWR1bGU9YSx0aGlzLmRpcnR5PSExLHRoaXMuY2xlYW51cEZuPVUwLHRoaXMucmVnaXN0ZXJPbkNsZWFudXA9aD0+e3RoaXMuY2xlYW51cEZuPWh9LHRoaXMuY29uc3VtZXJBbGxv'@;
put 'd1NpZ25hbFdyaXRlcz1kfW5vdGlmeSgpe3RoaXMuZGlydHl8fHRoaXMuc2NoZWR1bGUodGhpcyksdGhpcy5kaXJ0eT0hMH1vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCl7dGhpcy5ub3RpZnkoKX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fXJ1bigpe2lmKHRo'@;
put 'aXMuZGlydHk9ITEsMCE9PXRoaXMudHJhY2tpbmdWZXJzaW9uJiYhdGhpcy5jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKSlyZXR1cm47Y29uc3QgbD1mbCh0aGlzKTt0aGlzLnRyYWNraW5nVmVyc2lvbisrO3RyeXt0aGlzLmNsZWFudXBGbigpLHRoaXMuY2xlYW51cEZuPVUwLHRo'@;
put 'aXMud2F0Y2godGhpcy5yZWdpc3Rlck9uQ2xlYW51cCl9ZmluYWxseXtmbChsKX19Y2xlYW51cCgpe3RoaXMuY2xlYW51cEZuKCl9fWNsYXNzIG05e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnByZXZpb3VzVmFsdWU9bCx0aGlzLmN1cnJlbnRWYWx1ZT1hLHRoaXMuZmlyc3RDaGFuZ2U9ZH1p'@;
put 'c0ZpcnN0Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZmlyc3RDaGFuZ2V9fWZ1bmN0aW9uIHZhKCl7cmV0dXJuIFQ0fWZ1bmN0aW9uIFQ0KGMpe3JldHVybiBjLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYoYy5zZXRJbnB1dD1fOSksdjl9ZnVuY3Rpb24gdjkoKXtjb25zdCBjPWJtKHRoaXMp'@;
put 'LGw9Yz8uY3VycmVudDtpZihsKXtjb25zdCBhPWMucHJldmlvdXM7aWYoYT09PVhjKWMucHJldmlvdXM9bDtlbHNlIGZvcihsZXQgZCBpbiBsKWFbZF09bFtkXTtjLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKGwpfX1mdW5jdGlvbiBfOShjLGwsYSxkKXtjb25zdCBoPXRoaXMuZGVj'@;
put 'bGFyZWRJbnB1dHNbYV0sZj1ibShjKXx8ZnVuY3Rpb24gWjAoYyxsKXtyZXR1cm4gY1tGbF09bH0oYyx7cHJldmlvdXM6WGMsY3VycmVudDpudWxsfSksXz1mLmN1cnJlbnR8fChmLmN1cnJlbnQ9e30pLFQ9Zi5wcmV2aW91cyxXPVRbaF07X1toXT1uZXcgbTkoVyYmVy5jdXJyZW50VmFsdWUs'@;
put 'bCxUPT09WGMpLGNbZF09bH12YS5uZ0luaGVyaXQ9ITA7Y29uc3QgRmw9Il9fbmdTaW1wbGVDaGFuZ2VzX18iO2Z1bmN0aW9uIGJtKGMpe3JldHVybiBjW0ZsXXx8bnVsbH1jb25zdCBoMD1mdW5jdGlvbihjLGwsYSl7fTtmdW5jdGlvbiBfYShjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9'@;
put 'Y1tIaV07cmV0dXJuIGN9ZnVuY3Rpb24gWTAoYyxsKXtyZXR1cm4gX2EobFtjXSl9ZnVuY3Rpb24gSGwoYyxsKXtyZXR1cm4gX2EobFtjLmluZGV4XSl9ZnVuY3Rpb24ga2UoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uICRlKGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gbXQoYyxs'@;
put 'KXtjb25zdCBhPWxbY107cmV0dXJuIENjKGEpP2E6YVtIaV19ZnVuY3Rpb24gSXIoYyxsKXtyZXR1cm4gbnVsbD09bD9udWxsOmNbbF19ZnVuY3Rpb24geW8oYyl7Y1tQMl09MH1mdW5jdGlvbiBlcyhjKXsxMDI0JmNbRG9dfHwoY1tEb118PTEwMjQsb2MoYywxKSl9ZnVuY3Rpb24genMoYyl7'@;
put 'MTAyNCZjW0RvXSYmKGNbRG9dJj0tMTAyNSxvYyhjLC0xKSl9ZnVuY3Rpb24gb2MoYyxsKXtsZXQgYT1jW3VhXTtpZihudWxsPT09YSlyZXR1cm47YVtJMV0rPWw7bGV0IGQ9YTtmb3IoYT1hW3VhXTtudWxsIT09YSYmKDE9PT1sJiYxPT09ZFtJMV18fC0xPT09bCYmMD09PWRbSTFdKTspYVtJ'@;
put 'MV0rPWwsZD1hLGE9YVt1YV19Y29uc3QgUG89e2xGcmFtZTpadyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtmdW5jdGlvbiBQdygpe3JldHVybiBQby5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gdzMoKXtyZXR1cm4gbnVsbCE9PVBvLnNr'@;
put 'aXBIeWRyYXRpb25Sb290VE5vZGV9ZnVuY3Rpb24gWHIoKXtyZXR1cm4gUG8ubEZyYW1lLmxWaWV3fWZ1bmN0aW9uIFRzKCl7cmV0dXJuIFBvLmxGcmFtZS50Vmlld31mdW5jdGlvbiBCdChjKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlldz1jLGNbVmFdfWZ1bmN0aW9uIGp0KGMpe3Jl'@;
put 'dHVybiBQby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsY31mdW5jdGlvbiBTYygpe2xldCBjPUZ3KCk7Zm9yKDtudWxsIT09YyYmNjQ9PT1jLnR5cGU7KWM9Yy5wYXJlbnQ7cmV0dXJuIGN9ZnVuY3Rpb24gRncoKXtyZXR1cm4gUG8ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBOMShj'@;
put 'LGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuY3VycmVudFROb2RlPWMsYS5pc1BhcmVudD1sfWZ1bmN0aW9uIGI5KCl7cmV0dXJuIFBvLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBDbSgpe1BvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBOYygpe2NvbnN0IGM9UG8ubEZyYW1lO2xldCBs'@;
put 'PWMuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWwmJihsPWMuYmluZGluZ1Jvb3RJbmRleD1jLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxsfWZ1bmN0aW9uIE5kKCl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gQzMoKXtyZXR1cm4gUG8ubEZyYW1lLmJpbmRp'@;
put 'bmdJbmRleCsrfWZ1bmN0aW9uIFYxKGMpe2NvbnN0IGw9UG8ubEZyYW1lLGE9bC5iaW5kaW5nSW5kZXg7cmV0dXJuIGwuYmluZGluZ0luZGV4PWwuYmluZGluZ0luZGV4K2MsYX1mdW5jdGlvbiBLVChjLGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuYmluZGluZ0luZGV4PWEuYmluZGluZ1Jvb3RJ'@;
put 'bmRleD1jLFNtKGwpfWZ1bmN0aW9uIFNtKGMpe1BvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9Y31mdW5jdGlvbiB3OShjKXtjb25zdCBsPVBvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1sP251bGw6Y1tsXX1mdW5jdGlvbiBCdygpe3JldHVybiBQby5s'@;
put 'RnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gQzkoYyl7UG8ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PWN9ZnVuY3Rpb24gancoYyl7Y29uc3QgbD1jW0JpXTtyZXR1cm4gMj09PWwudHlwZT9sLmRlY2xUTm9kZToxPT09bC50eXBlP2Nbem9dOm51bGx9ZnVuY3Rpb24gencoYyxs'@;
put 'LGEpe2lmKGEmbnMuU2tpcFNlbGYpe2xldCBoPWwsZj1jO2Zvcig7IShoPWgucGFyZW50LG51bGwhPT1ofHxhJm5zLkhvc3R8fChoPWp3KGYpLG51bGw9PT1ofHwoZj1mW09sXSwxMCZoLnR5cGUpKSk7KTtpZihudWxsPT09aClyZXR1cm4hMTtsPWgsYz1mfWNvbnN0IGQ9UG8ubEZyYW1lPVV3'@;
put 'KCk7cmV0dXJuIGQuY3VycmVudFROb2RlPWwsZC5sVmlldz1jLCEwfWZ1bmN0aW9uIFM5KGMpe2NvbnN0IGw9VXcoKSxhPWNbQmldO1BvLmxGcmFtZT1sLGwuY3VycmVudFROb2RlPWEuZmlyc3RDaGlsZCxsLmxWaWV3PWMsbC50Vmlldz1hLGwuY29udGV4dExWaWV3PWMsbC5iaW5kaW5nSW5k'@;
put 'ZXg9YS5iaW5kaW5nU3RhcnRJbmRleCxsLmluSTE4bj0hMX1mdW5jdGlvbiBVdygpe2NvbnN0IGM9UG8ubEZyYW1lLGw9bnVsbD09PWM/bnVsbDpjLmNoaWxkO3JldHVybiBudWxsPT09bD9adyhjKTpsfWZ1bmN0aW9uIFp3KGMpe2NvbnN0IGw9e2N1cnJlbnRUTm9kZTpudWxsLGlzUGFyZW50'@;
put 'OiEwLGxWaWV3Om51bGwsdFZpZXc6bnVsbCxzZWxlY3RlZEluZGV4Oi0xLGNvbnRleHRMVmlldzpudWxsLGVsZW1lbnREZXB0aENvdW50OjAsY3VycmVudE5hbWVzcGFjZTpudWxsLGN1cnJlbnREaXJlY3RpdmVJbmRleDotMSxiaW5kaW5nUm9vdEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSxj'@;
put 'dXJyZW50UXVlcnlJbmRleDowLHBhcmVudDpjLGNoaWxkOm51bGwsaW5JMThuOiExfTtyZXR1cm4gbnVsbCE9PWMmJihjLmNoaWxkPWwpLGx9ZnVuY3Rpb24gWXcoKXtjb25zdCBjPVBvLmxGcmFtZTtyZXR1cm4gUG8ubEZyYW1lPWMucGFyZW50LGMuY3VycmVudFROb2RlPW51bGwsYy5sVmll'@;
put 'dz1udWxsLGN9Y29uc3QgV3c9WXc7ZnVuY3Rpb24gTW0oKXtjb25zdCBjPVl3KCk7Yy5pc1BhcmVudD0hMCxjLnRWaWV3PW51bGwsYy5zZWxlY3RlZEluZGV4PS0xLGMuY29udGV4dExWaWV3PW51bGwsYy5lbGVtZW50RGVwdGhDb3VudD0wLGMuY3VycmVudERpcmVjdGl2ZUluZGV4PS0xLGMu'@;
put 'Y3VycmVudE5hbWVzcGFjZT1udWxsLGMuYmluZGluZ1Jvb3RJbmRleD0tMSxjLmJpbmRpbmdJbmRleD0tMSxjLmN1cnJlbnRRdWVyeUluZGV4PTB9ZnVuY3Rpb24gZXUoKXtyZXR1cm4gUG8ubEZyYW1lLnNlbGVjdGVkSW5kZXh9ZnVuY3Rpb24gWGgoYyl7UG8ubEZyYW1lLnNlbGVjdGVkSW5k'@;
put 'ZXg9Y31mdW5jdGlvbiBRYSgpe2NvbnN0IGM9UG8ubEZyYW1lO3JldHVybiBrZShjLnRWaWV3LGMuc2VsZWN0ZWRJbmRleCl9bGV0ICR3PSEwO2Z1bmN0aW9uIHhtKCl7cmV0dXJuICR3fWZ1bmN0aW9uIFZkKGMpeyR3PWN9ZnVuY3Rpb24gRW0oYyxsKXtmb3IobGV0IGE9bC5kaXJlY3RpdmVT'@;
put 'dGFydCxkPWwuZGlyZWN0aXZlRW5kO2E8ZDthKyspe2NvbnN0IGY9Yy5kYXRhW2FdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6XyxuZ0FmdGVyQ29udGVudENoZWNrZWQ6VCxuZ0FmdGVyVmlld0luaXQ6VyxuZ0FmdGVyVmlld0NoZWNrZWQ6aWUsbmdPbkRlc3Ryb3k6Z2V9'@;
put 'PWY7XyYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEsXyksVCYmKChjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKGEsVCksKGMuY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaChhLFQpKSxXJiYoYy52aWV3SG9va3M/Pz1bXSkucHVzaCgtYSxXKSxpZSYmKChjLnZpZXdIb29rcz8/'@;
put 'PVtdKS5wdXNoKGEsaWUpLChjLnZpZXdDaGVja0hvb2tzPz89W10pLnB1c2goYSxpZSkpLG51bGwhPWdlJiYoYy5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLGdlKX19ZnVuY3Rpb24ga20oYyxsLGEpe3F3KGMsbCwzLGEpfWZ1bmN0aW9uIEFtKGMsbCxhLGQpeygzJmNbRG9dKT09PWEmJnF3'@;
put 'KGMsbCxhLGQpfWZ1bmN0aW9uIE05KGMsbCl7bGV0IGE9Y1tEb107KDMmYSk9PT1sJiYoYSY9ODE5MSxhKz0xLGNbRG9dPWEpfWZ1bmN0aW9uIHF3KGMsbCxhLGQpe2NvbnN0IGY9ZD8/LTEsXz1sLmxlbmd0aC0xO2xldCBUPTA7Zm9yKGxldCBXPXZvaWQgMCE9PWQ/NjU1MzUmY1tQMl06MDtX'@;
put 'PF87VysrKWlmKCJudW1iZXIiPT10eXBlb2YgbFtXKzFdKXtpZihUPWxbV10sbnVsbCE9ZCYmVD49ZClicmVha31lbHNlIGxbV108MCYmKGNbUDJdKz02NTUzNiksKFQ8Znx8LTE9PWYpJiYoaUQoYyxhLGwsVyksY1tQMl09KDQyOTQ5MDE3NjAmY1tQMl0pK1crMiksVysrfWZ1bmN0aW9uIEt3'@;
put 'KGMsbCl7aDAoNCxjLGwpO2NvbnN0IGE9ZmwobnVsbCk7dHJ5e2wuY2FsbChjKX1maW5hbGx5e2ZsKGEpLGgwKDUsYyxsKX19ZnVuY3Rpb24gaUQoYyxsLGEsZCl7Y29uc3QgaD1hW2RdPDAsZj1hW2QrMV0sVD1jW2g/LWFbZF06YVtkXV07aD9jW0RvXT4+MTM8Y1tQMl0+PjE2JiYoMyZjW0Rv'@;
put 'XSk9PT1sJiYoY1tEb10rPTgxOTIsS3coVCxmKSk6S3coVCxmKX1jb25zdCBTMz0tMTtjbGFzcyBSNHtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9u'@;
put 'IFh3KGMpe3JldHVybiBjIT09UzN9ZnVuY3Rpb24gQjIoYyl7cmV0dXJuIDMyNzY3JmN9ZnVuY3Rpb24gTTMoYyxsKXtsZXQgYT1mdW5jdGlvbiBFOShjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW09sXSxhLS07cmV0dXJuIGR9bGV0IE80PSEwO2Z1bmN0aW9uIEIxKGMp'@;
put 'e2NvbnN0IGw9TzQ7cmV0dXJuIE80PWMsbH1jb25zdCBUbT0yNTUsSnc9NTtsZXQgRG09MDtjb25zdCBqMT17fTtmdW5jdGlvbiBJbShjLGwpe2NvbnN0IGE9UXcoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0JpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRl'@;
put 'eD1sLmxlbmd0aCxKaChkLmRhdGEsYyksSmgobCxudWxsKSxKaChkLmJsdWVwcmludCxudWxsKSk7Y29uc3QgaD1BOShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKFh3KGgpKXtjb25zdCBfPUIyKGgpLFQ9TTMoaCxsKSxXPVRbQmldLmRhdGE7Zm9yKGxldCBpZT0wO2llPDg7aWUrKylsW2Yr'@;
put 'aWVdPVRbXytpZV18V1tfK2llXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBKaChjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gUXcoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmlu'@;
put 'amVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmluamVjdG9ySW5kZXh9ZnVuY3Rpb24gQTkoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9'@;
put 'bDtmb3IoO251bGwhPT1oOyl7aWYoZD1zQyhoKSxudWxsPT09ZClyZXR1cm4gUzM7aWYoYSsrLGg9aFtPbF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gUzN9ZnVuY3Rpb24gVDkoYyxsLGEpeyFmdW5jdGlvbiBrOShjLGwsYSl7bGV0'@;
put 'IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFzT3duUHJvcGVydHkoWmgpJiYoZD1hW1poXSksbnVsbD09ZCYmKGQ9YVtaaF09RG0rKyk7Y29uc3QgaD1kJlRtO2wuZGF0YVtjKyhoPj5KdyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gZUMoYyxsLGEpe2lm'@;
put 'KGEmbnMuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7UWkoKX1mdW5jdGlvbiB0QyhjLGwsYSxkKXtpZihhJm5zLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKG5zLlNlbGZ8bnMuSG9zdCkpKXtjb25zdCBoPWNbTGRdLGY9ZGkodm9pZCAwKTt0cnl7cmV0dXJuIGg/'@;
put 'aC5nZXQobCxkLGEmbnMuT3B0aW9uYWwpOldzKGwsZCxhJm5zLk9wdGlvbmFsKX1maW5hbGx5e2RpKGYpfX1yZXR1cm4gZUMoZCwwLGEpfWZ1bmN0aW9uIG5DKGMsbCxhLGQ9bnMuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW0RvXSYmIShkJm5zLlNlbGYpKXtjb25zdCBfPWZ1'@;
put 'bmN0aW9uIGREKGMsbCxhLGQsaCl7bGV0IGY9YyxfPWw7Zm9yKDtudWxsIT09ZiYmbnVsbCE9PV8mJjIwNDgmX1tEb10mJiEoNTEyJl9bRG9dKTspe2NvbnN0IFQ9ckMoZixfLGEsZHxucy5TZWxmLGoxKTtpZihUIT09ajEpcmV0dXJuIFQ7bGV0IFc9Zi5wYXJlbnQ7aWYoIVcpe2NvbnN0IGll'@;
put 'PV9bUjFdO2lmKGllKXtjb25zdCBnZT1pZS5nZXQoYSxqMSxkKTtpZihnZSE9PWoxKXJldHVybiBnZX1XPXNDKF8pLF89X1tPbF19Zj1XfXJldHVybiBofShjLGwsYSxkLGoxKTtpZihfIT09ajEpcmV0dXJuIF99Y29uc3QgZj1yQyhjLGwsYSxkLGoxKTtpZihmIT09ajEpcmV0dXJuIGZ9cmV0'@;
put 'dXJuIHRDKGwsYSxkLGgpfWZ1bmN0aW9uIHJDKGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBjRChjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoWmgpP2NbWmhdOnZvaWQgMDtyZXR1cm4ibnVtYmVy'@;
put 'Ij09dHlwZW9mIGw/bD49MD9sJlRtOnVEOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXtpZighencobCxjLGQpKXJldHVybiBkJm5zLkhvc3Q/ZUMoaCwwLGQpOnRDKGwsYSxkLGgpO3RyeXtjb25zdCBfPWYoZCk7aWYobnVsbCE9X3x8ZCZucy5PcHRpb25hbClyZXR1cm4gXztRaSgp'@;
put 'fWZpbmFsbHl7V3coKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCBfPW51bGwsVD1RdyhjLGwpLFc9UzMsaWU9ZCZucy5Ib3N0P2xbSmFdW3pvXTpudWxsO2ZvcigoLTE9PT1UfHxkJm5zLlNraXBTZWxmKSYmKFc9LTE9PT1UP0E5KGMsbCk6bFtUKzhdLFchPT1TMyYmb0MoZCwh'@;
put 'MSk/KF89bFtCaV0sVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTEpOy0xIT09VDspe2NvbnN0IGdlPWxbQmldO2lmKGlDKGYsVCxnZS5kYXRhKSl7Y29uc3Qgd2U9bEQoVCxsLGEsXyxkLGllKTtpZih3ZSE9PWoxKXJldHVybiB3ZX1XPWxbVCs4XSxXIT09UzMmJm9DKGQsbFtCaV0uZGF0YVtUKzhd'@;
put 'PT09aWUpJiZpQyhmLFQsbCk/KF89Z2UsVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTF9fXJldHVybiBofWZ1bmN0aW9uIGxEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWxbQmldLFQ9Xy5kYXRhW2MrOF0sZ2U9TG0oVCxfLGEsbnVsbD09ZD9QMShUKSYmTzQ6ZCE9XyYmMCE9KDMmVC50eXBlKSxoJm5z'@;
put 'Lkhvc3QmJmY9PT1UKTtyZXR1cm4gbnVsbCE9PWdlP1FoKGwsXyxnZSxUKTpqMX1mdW5jdGlvbiBMbShjLGwsYSxkLGgpe2NvbnN0IGY9Yy5wcm92aWRlckluZGV4ZXMsXz1sLmRhdGEsVD0xMDQ4NTc1JmYsVz1jLmRpcmVjdGl2ZVN0YXJ0LGdlPWY+PjIwLEVlPWg/VCtnZTpjLmRpcmVjdGl2'@;
put 'ZUVuZDtmb3IobGV0IFplPWQ/VDpUK2dlO1plPEVlO1plKyspe2NvbnN0IG90PV9bWmVdO2lmKFplPFcmJmE9PT1vdHx8WmU+PVcmJm90LnR5cGU9PT1hKXJldHVybiBaZX1pZihoKXtjb25zdCBaZT1fW1ddO2lmKFplJiZRYyhaZSkmJlplLnR5cGU9PT1hKXJldHVybiBXfXJldHVybiBudWxs'@;
put 'fWZ1bmN0aW9uIFFoKGMsbCxhLGQpe2xldCBoPWNbYV07Y29uc3QgZj1sLmRhdGE7aWYoZnVuY3Rpb24gb0QoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBSNH0oaCkpe2NvbnN0IF89aDtfLnJlc29sdmluZyYmZnVuY3Rpb24gbzAoYyxsKXtjb25zdCBhPWw/YC4gRGVwZW5kZW5jeSBwYXRoOiAk'@;
put 'e2wuam9pbigiID4gIil9ID4gJHtjfWA6IiI7dGhyb3cgbmV3IEFyKC0yMDAsYENpcmN1bGFyIGRlcGVuZGVuY3kgaW4gREkgZGV0ZWN0ZWQgZm9yICR7Y30ke2F9YCl9KGZ1bmN0aW9uIENzKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFtZXx8Yy50b1N0cmluZygpOiJvYmpl'@;
put 'Y3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6a28oYyl9KGZbYV0pKTtjb25zdCBUPUIxKF8uY2FuU2VlVmlld1Byb3ZpZGVycyk7Xy5yZXNvbHZpbmc9ITA7Y29uc3QgVz1fLmluamVjdEltcGw/'@;
put 'ZGkoXy5pbmplY3RJbXBsKTpudWxsO3p3KGMsZCxucy5EZWZhdWx0KTt0cnl7aD1jW2FdPV8uZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiByRChjLGwsYSl7Y29uc3R7bmdPbkNoYW5nZXM6ZCxuZ09uSW5pdDpo'@;
put 'LG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IF89VDQobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsXyksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyxfKX1oJiYoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goMC1jLGgpLGYmJigo'@;
put 'YS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVcmJmRpKFcpLEIxKFQpLF8ucmVzb2x2aW5nPSExLFd3KCl9fXJldHVybiBofWZ1bmN0aW9uIGlDKGMsbCxhKXtyZXR1'@;
put 'cm4hIShhW2wrKGM+Pkp3KV0mMTw8Yyl9ZnVuY3Rpb24gb0MoYyxsKXtyZXR1cm4hKGMmbnMuU2VsZnx8YyZucy5Ib3N0JiZsKX1jbGFzcyB4M3tjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVybiBuQyh0aGlzLl90Tm9kZSx0aGlz'@;
put 'Ll9sVmlldyxsLGEwKGQpLGEpfX1mdW5jdGlvbiB1RCgpe3JldHVybiBuZXcgeDMoU2MoKSxYcigpKX1mdW5jdGlvbiB4YShjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtsMF18fEcwKGwpLGQ9T2JqZWN0LnByb3RvdHlwZTtsZXQgaD1PYmpl'@;
put 'Y3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbbDBdfHxHMChoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9KX1mdW5jdGlvbiBHMChjKXtyZXR1'@;
put 'cm4gcjAoYyk/KCk9Pntjb25zdCBsPUcwKGJvKGMpKTtyZXR1cm4gbCYmbCgpfTpIMShjKX1mdW5jdGlvbiBzQyhjKXtjb25zdCBsPWNbQmldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3pvXTpudWxsfWZ1bmN0aW9uIFA0KGMpe3JldHVybiBmdW5jdGlvbiBE'@;
put 'OShjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYoUjIoZikpYnJlYWs7aWYoMD09PWYp'@;
put 'aCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0oU2MoKSxjKX1jb25zdCBrMz0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIFQz'@;
put 'KGMsbCxhKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIFJtKGMpe3JldHVybiBmdW5jdGlvbiguLi5hKXtpZihjKXtjb25zdCBkPWMoLi4uYSk7Zm9yKGNvbnN0IGggaW4gZCl0aGlzW2hdPWRbaF19fX0obCk7ZnVuY3Rpb24gaCguLi5mKXtpZih0aGlzIGluc3RhbmNlb2YgaCly'@;
put 'ZXR1cm4gZC5hcHBseSh0aGlzLGYpLHRoaXM7Y29uc3QgXz1uZXcgaCguLi5mKTtyZXR1cm4gVC5hbm5vdGF0aW9uPV8sVDtmdW5jdGlvbiBUKFcsaWUsZ2Upe2NvbnN0IHdlPVcuaGFzT3duUHJvcGVydHkoazMpP1dbazNdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLGszLHt2YWx1ZTpbXX0p'@;
put 'W2szXTtmb3IoO3dlLmxlbmd0aDw9Z2U7KXdlLnB1c2gobnVsbCk7cmV0dXJuKHdlW2dlXT13ZVtnZV18fFtdKS5wdXNoKF8pLFd9fXJldHVybiBhJiYoaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0'@;
put 'aW9uQ2xzPWgsaH0pfWNvbnN0IE9tPUZ1bmN0aW9uO2Z1bmN0aW9uIEY0KGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/RjQoYSxsKTpsKGEpKX1mdW5jdGlvbiAkMChjLGwsYSl7bD49Yy5sZW5ndGg/Yy5wdXNoKGEpOmMuc3BsaWNlKGwsMCxhKX1mdW5jdGlvbiBQbShjLGwp'@;
put 'e3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6Yy5zcGxpY2UobCwxKVswXX1mdW5jdGlvbiBCZChjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxjO2QrKylhLnB1c2gobCk7cmV0dXJuIGF9ZnVuY3Rpb24gTWMoYyxsLGEpe2xldCBkPWpkKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRd'@;
put 'PWE6KGQ9fmQsZnVuY3Rpb24gbUQoYyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1ts'@;
put 'KzFdPWR9fShjLGQsbCxhKSksZH1mdW5jdGlvbiB0ZihjLGwpe2NvbnN0IGE9amQoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gamQoYyxsKXtyZXR1cm4gZnVuY3Rpb24gdkQoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyho'@;
put 'LWQ+PjEpLF89Y1tmPDxhXTtpZihsPT09XylyZXR1cm4gZjw8YTtfPmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCB6Mj16aChUMygiT3B0aW9uYWwiKSw4KSxnMD16aChUMygiU2tpcFNlbGYiKSw0KTtmdW5jdGlvbiBZbShjKXtyZXR1cm4gMTI4PT0oMTI4JmMuZmxh'@;
put 'Z3MpfXZhciBZMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixjW2MuRGFzaENhc2U9Ml09IkRhc2hDYXNlIixjfShZMnx8e30pO2NvbnN0IGtEPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csQUQ9Lyg8fD4pLyxXbT0iXHUyMDBiJDFcdTIwMGIi'@;
put 'O2NvbnN0IEg5PW5ldyBNYXA7bGV0IE45PTA7Y29uc3QgQjk9Il9fbmdDb250ZXh0X18iO2Z1bmN0aW9uIFZjKGMsbCl7Q2MobCk/KGNbQjldPWxbJGhdLGZ1bmN0aW9uIGo0KGMpe0g5LnNldChjWyRoXSxjKX0obCkpOmNbQjldPWx9bGV0IGo5O2Z1bmN0aW9uIHo5KGMsbCl7cmV0dXJuIGo5'@;
put 'KGMsbCl9ZnVuY3Rpb24gWjQoYyl7Y29uc3QgbD1jW3VhXTtyZXR1cm4gaWMobCk/bFt1YV06bH1mdW5jdGlvbiBDQyhjKXtyZXR1cm4gR20oY1tHaF0pfWZ1bmN0aW9uIFNDKGMpe3JldHVybiBHbShjW1hhXSl9ZnVuY3Rpb24gR20oYyl7Zm9yKDtudWxsIT09YyYmIWljKGMpOyljPWNbWGFd'@;
put 'O3JldHVybiBjfWZ1bmN0aW9uIHJmKGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsXz0hMTtpYyhkKT9mPWQ6Q2MoZCkmJihfPSEwLGQ9ZFtIaV0pO2NvbnN0IFQ9X2EoZCk7MD09PWMmJm51bGwhPT1hP251bGw9PWg/RzIobCxhLFQpOlkxKGwsYSxULGh8fG51bGwsITApOjE9PT1jJiZu'@;
put 'dWxsIT09YT9ZMShsLGEsVCxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiB0NihjLGwsYSl7Y29uc3QgZD1IMyhjLGwpO2QmJmZ1bmN0aW9uIE91KGMsbCxhLGQpe2MucmVtb3ZlQ2hpbGQobCxhLGQpfShjLGQsbCxhKX0obCxULF8pOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKFQpLG51bGwhPWYm'@;
put 'JmZ1bmN0aW9uIExDKGMsbCxhLGQsaCl7Y29uc3QgZj1hW2QwXTtmIT09X2EoYSkmJnJmKGwsYyxkLGYsaCk7Zm9yKGxldCBUPXJjO1Q8YS5sZW5ndGg7VCsrKXtjb25zdCBXPWFbVF07RzQoV1tCaV0sVyxjLGwsZCxmKX19KGwsYyxmLGEsaCl9fWZ1bmN0aW9uIFU5KGMsbCl7cmV0dXJuIGMu'@;
put 'Y3JlYXRlQ29tbWVudChmdW5jdGlvbiBCNChjKXtyZXR1cm4gYy5yZXBsYWNlKGtELGw9PmwucmVwbGFjZShBRCxXbSkpfShsKSl9ZnVuY3Rpb24gcW0oYyxsLGEpe3JldHVybiBjLmNyZWF0ZUVsZW1lbnQobCxhKX1mdW5jdGlvbiB4QyhjLGwpe2NvbnN0IGE9Y1tIMl0sZD1hLmluZGV4T2Yo'@;
put 'bCk7enMobCksYS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBzZihjLGwpe2lmKGMubGVuZ3RoPD1yYylyZXR1cm47Y29uc3QgYT1yYytsLGQ9Y1thXTtpZihkKXtjb25zdCBoPWRbTzJdO251bGwhPT1oJiZoIT09YyYmeEMoaCxkKSxsPjAmJihjW2EtMV1bWGFdPWRbWGFdKTtjb25zdCBmPVBtKGMs'@;
put 'cmMrbCk7IWZ1bmN0aW9uIEJEKGMsbCl7RzQoYyxsLGxbVm9dLDIsbnVsbCxudWxsKSxsW0hpXT1udWxsLGxbem9dPW51bGx9KGRbQmldLGQpO2NvbnN0IF89ZltodV07bnVsbCE9PV8mJl8uZGV0YWNoVmlldyhmW0JpXSksZFt1YV09bnVsbCxkW1hhXT1udWxsLGRbRG9dJj0tMTI5fXJldHVy'@;
put 'biBkfWZ1bmN0aW9uIEttKGMsbCl7aWYoISgyNTYmbFtEb10pKXtjb25zdCBhPWxbVm9dO2xbcDNdPy5kZXN0cm95KCksbFtnM10/LmRlc3Ryb3koKSxhLmRlc3Ryb3lOb2RlJiZHNChjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gVUQoYyl7bGV0IGw9Y1tHaF07aWYoIWwpcmV0dXJuIFht'@;
put 'KGNbQmldLGMpO2Zvcig7bDspe2xldCBhPW51bGw7aWYoQ2MobCkpYT1sW0doXTtlbHNle2NvbnN0IGQ9bFtyY107ZCYmKGE9ZCl9aWYoIWEpe2Zvcig7bCYmIWxbWGFdJiZsIT09YzspQ2MobCkmJlhtKGxbQmldLGwpLGw9bFt1YV07bnVsbD09PWwmJihsPWMpLENjKGwpJiZYbShsW0JpXSxs'@;
put 'KSxhPWwmJmxbWGFdfWw9YX19KGwpfX1mdW5jdGlvbiBYbShjLGwpe2lmKCEoMjU2JmxbRG9dKSl7bFtEb10mPS0xMjksbFtEb118PTI1NixmdW5jdGlvbiBrQyhjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2Qr'@;
put 'PTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBSNCkpe2NvbnN0IGY9YVtkKzFdO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKz0yKXtjb25zdCBUPWhbZltfXV0sVz1mW18rMV07aDAoNCxULFcpO3RyeXtXLmNhbGwoVCl9ZmluYWxseXto'@;
put 'MCg1LFQsVyl9fWVsc2V7aDAoNCxoLGYpO3RyeXtmLmNhbGwoaCl9ZmluYWxseXtoMCg1LGgsZil9fX19fShjLGwpLGZ1bmN0aW9uIEVDKGMsbCl7Y29uc3QgYT1jLmNsZWFudXAsZD1sW1R1XTtpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoLTE7Zis9MilpZigic3RyaW5nIj09'@;
put 'dHlwZW9mIGFbZl0pe2NvbnN0IF89YVtmKzNdO18+PTA/ZFtfXSgpOmRbLV9dLnVuc3Vic2NyaWJlKCksZis9Mn1lbHNlIGFbZl0uY2FsbChkW2FbZisxXV0pO251bGwhPT1kJiYobFtUdV09bnVsbCk7Y29uc3QgaD1sW08xXTtpZihudWxsIT09aCl7bFtPMV09bnVsbDtmb3IobGV0IGY9MDtm'@;
put 'PGgubGVuZ3RoO2YrKykoMCxoW2ZdKSgpfX0oYyxsKSwxPT09bFtCaV0udHlwZSYmbFtWb10uZGVzdHJveSgpO2NvbnN0IGE9bFtPMl07aWYobnVsbCE9PWEmJmljKGxbdWFdKSl7YSE9PWxbdWFdJiZ4QyhhLGwpO2NvbnN0IGQ9bFtodV07bnVsbCE9PWQmJmQuZGV0YWNoVmlldyhjKX0hZnVu'@;
put 'Y3Rpb24gVEQoYyl7SDkuZGVsZXRlKGNbJGhdKX0obCl9fWZ1bmN0aW9uIEYzKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gWTQoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtIaV07e2NvbnN0e2NvbXBv'@;
put 'bmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRpb246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PU9jLk5vbmV8fGY9PT1PYy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gSGwoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWTEoYyxs'@;
put 'LGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBHMihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIEptKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WTEoYyxsLGEsZCxoKTpHMihjLGwsYSl9ZnVuY3Rpb24gSDMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwp'@;
put 'fWZ1bmN0aW9uIFcxKGMsbCxhKXtyZXR1cm4gVEMoYyxsLGEpfWxldCBRbSwkNCxHOSxuNixUQz1mdW5jdGlvbiBBQyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9IbChjLGEpOm51bGx9O2Z1bmN0aW9uIGU2KGMsbCxhLGQpe2NvbnN0IGg9RjMoYyxkLGwpLGY9bFtWb10sVD1XMShkLnBhcmVu'@;
put 'dHx8bFt6b10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxldCBXPTA7VzxhLmxlbmd0aDtXKyspSm0oZixoLGFbV10sVCwhMSk7ZWxzZSBKbShmLGgsYSxULCExKTt2b2lkIDAhPT1RbSYmUW0oZixkLGwsYSxoKX1mdW5jdGlvbiBXNChjLGwpe2lmKG51bGwhPT1s'@;
put 'KXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIEhsKGwsYyk7aWYoNCZhKXJldHVybiBZOSgtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gVzQoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBpYyhoKT9ZOSgtMSxoKTpf'@;
put 'YShoKX19aWYoMzImYSlyZXR1cm4gejkobCxjKSgpfHxfYShjW2wuaW5kZXhdKTt7Y29uc3QgZD1EQyhjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06VzQoWjQoY1tKYV0pLGQpOlc0KGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gREMoYyxsKXtyZXR1'@;
put 'cm4gbnVsbCE9PWw/Y1tKYV1bem9dLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIFk5KGMsbCl7Y29uc3QgYT1yYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtCaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gVzQoZCxoKX1yZXR1cm4g'@;
put 'bFtkMF19ZnVuY3Rpb24gVzkoYyxsLGEsZCxoLGYsXyl7Zm9yKDtudWxsIT1hOyl7Y29uc3QgVD1kW2EuaW5kZXhdLFc9YS50eXBlO2lmKF8mJjA9PT1sJiYoVCYmVmMoX2EoVCksZCksYS5mbGFnc3w9MiksMzIhPSgzMiZhLmZsYWdzKSlpZig4JlcpVzkoYyxsLGEuY2hpbGQsZCxoLGYsITEp'@;
put 'LHJmKGwsYyxoLFQsZik7ZWxzZSBpZigzMiZXKXtjb25zdCBpZT16OShhLGQpO2xldCBnZTtmb3IoO2dlPWllKCk7KXJmKGwsYyxoLGdlLGYpO3JmKGwsYyxoLFQsZil9ZWxzZSAxNiZXP1dEKGMsbCxkLGEsaCxmKTpyZihsLGMsaCxULGYpO2E9Xz9hLnByb2plY3Rpb25OZXh0OmEubmV4dH19'@;
put 'ZnVuY3Rpb24gRzQoYyxsLGEsZCxoLGYpe1c5KGEsZCxjLmZpcnN0Q2hpbGQsbCxoLGYsITEpfWZ1bmN0aW9uIFdEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWFbSmFdLFc9X1t6b10ucHJvamVjdGlvbltkLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkoVykpZm9yKGxldCBpZT0wO2llPFcu'@;
put 'bGVuZ3RoO2llKyspcmYobCxjLGgsV1tpZV0sZik7ZWxzZXtsZXQgaWU9Vztjb25zdCBnZT1fW3VhXTtZbShkKSYmKGllLmZsYWdzfD0xMjgpLFc5KGMsbCxpZSxnZSxoLGYsITApfX1mdW5jdGlvbiBSQyhjLGwsYSl7IiI9PT1hP2MucmVtb3ZlQXR0cmlidXRlKGwsImNsYXNzIik6Yy5zZXRB'@;
put 'dHRyaWJ1dGUobCwiY2xhc3MiLGEpfWZ1bmN0aW9uIE9DKGMsbCxhKXtjb25zdHttZXJnZWRBdHRyczpkLGNsYXNzZXM6aCxzdHlsZXM6Zn09YTtudWxsIT09ZCYmRGQoYyxsLGQpLG51bGwhPT1oJiZSQyhjLGwsaCksbnVsbCE9PWYmJmZ1bmN0aW9uIEdEKGMsbCxhKXtjLnNldEF0dHJpYnV0'@;
put 'ZShsLCJzdHlsZSIsYSl9KGMsbCxmKX1mdW5jdGlvbiBOMyhjKXtyZXR1cm4gZnVuY3Rpb24gcTQoKXtpZih2b2lkIDA9PT0kNCYmKCQ0PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7JDQ9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6Yz0+Yyxj'@;
put 'cmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gJDR9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gSzQoKXtpZih2b2lkIDAhPT1HOSlyZXR1cm4gRzk7aWYodHlwZW9mIGRvY3VtZW50PCJ1IilyZXR1cm4gZG9jdW1lbnQ7dGhyb3cgbmV3'@;
put 'IEFyKDIxMCwhMSl9ZnVuY3Rpb24gJDkoKXtpZih2b2lkIDA9PT1uNiYmKG42PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7bjY9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNy'@;
put 'ZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7fXJldHVybiBuNn1mdW5jdGlvbiBIQyhjKXtyZXR1cm4gJDkoKT8uY3JlYXRlSFRNTChjKXx8Y31mdW5jdGlvbiBWQyhjKXtyZXR1cm4gJDkoKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIEJDe2NvbnN0cnVjdG9yKGwpe3RoaXMuY2hh'@;
put 'bmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT1sfXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7bDN9KWB9fWZ1bmN0aW9uICQy'@;
put 'KGMpe3JldHVybiBjIGluc3RhbmNlb2YgQkM/Yy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OmN9ZnVuY3Rpb24gWDQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIHRJKGMpe3JldHVybiBjIGluc3RhbmNlb2YgQkMmJmMuZ2V0VHlwZU5hbWUoKXx8bnVsbH0oYyk7aWYobnVs'@;
put 'bCE9YSYmYSE9PWwpe2lmKCJSZXNvdXJjZVVSTCI9PT1hJiYiVVJMIj09PWwpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhIHNhZmUgJHtsfSwgZ290IGEgJHthfSAoc2VlICR7bDN9KWApfXJldHVybiBhPT09bH1jbGFzcyBxOXtjb25zdHJ1Y3RvcihsKXt0aGlzLmluZXJ0'@;
put 'RG9jdW1lbnRIZWxwZXI9bH1nZXRJbmVydEJvZHlFbGVtZW50KGwpe2w9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+IitsO3RyeXtjb25zdCBhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE4zKGwpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09YT90aGlz'@;
put 'LmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudChsKTooYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpLGEpfWNhdGNoe3JldHVybiBudWxsfX19Y2xhc3MgSzl7Y29uc3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVm'@;
put 'YXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9TjMobCks'@;
put 'YX19Y29uc3Qgbkk9L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rpb24gWDkoYyl7cmV0dXJuKGM9U3RyaW5nKGMpKS5tYXRjaChuSSk/YzoidW5zYWZlOiIrY31mdW5jdGlvbiBHMShjKXtjb25zdCBsPXt9O2Zvcihjb25z'@;
put 'dCBhIG9mIGMuc3BsaXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIEJhKC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEgb2YgYylmb3IoY29uc3QgZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCBaZD1HMSgiYXJlYSxicixjb2ws'@;
put 'aHIsaW1nLHdiciIpLEo5PUcxKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksUTk9RzEoInJwLHJ0IiksZXY9QmEoWmQsQmEoSjksRzEoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRp'@;
put 'YWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLEJhKFE5LEcxKCJhLGFiYnIsYWNyb255bSxhdWRpbyxi'@;
put 'LGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8i'@;
put 'KSksQmEoUTksSjkpKSx0dj1HMSgiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksekM9QmEodHYsRzEoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNl'@;
put 'bGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtp'@;
put 'bmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5'@;
put 'LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLEcxKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50'@;
put 'LGFyaWEtY29saW5kZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1kZXRhaWxzLGFyaWEtZGlzYWJsZWQsYXJpYS1kcm9wZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1n'@;
put 'cmFiYmVkLGFyaWEtaGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJpYS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1v'@;
put 'cmllbnRhdGlvbixhcmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5LGFyaWEtcmVsZXZhbnQsYXJpYS1yZXF1aXJlZCxhcmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dz'@;
put 'cGFuLGFyaWEtc2VsZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1ZW5vdyxhcmlhLXZhbHVldGV4dCIpKSxpST1HMSgic2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3Mgb0l7Y29uc3RydWN0b3IoKXt0aGlzLnNhbml0'@;
put 'aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1zYW5pdGl6ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwO2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RF'@;
put 'P3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZClhPWEuZmlyc3RDaGlsZDtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBoPXRoaXMuY2hlY2tD'@;
put 'bG9iYmVyZWRFbGVtZW50KGEsYS5uZXh0U2libGluZyk7aWYoaCl7YT1oO2JyZWFrfWE9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoYSxhLnBhcmVudE5vZGUpfXJldHVybiB0aGlzLmJ1Zi5qb2luKCIiKX1zdGFydEVsZW1lbnQobCl7Y29uc3QgYT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNl'@;
put 'KCk7aWYoIWV2Lmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhaUkuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDto'@;
put 'Kyspe2NvbnN0IGY9ZC5pdGVtKGgpLF89Zi5uYW1lLFQ9Xy50b0xvd2VyQ2FzZSgpO2lmKCF6Qy5oYXNPd25Qcm9wZXJ0eShUKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IFc9Zi52YWx1ZTt0dltUXSYmKFc9WDkoVykpLHRoaXMuYnVmLnB1c2goIiAiLF8sJz0i'@;
put 'JyxVQyhXKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtldi5oYXNPd25Qcm9wZXJ0eShhKSYmIVpkLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5w'@;
put 'dXNoKGEpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5idWYucHVzaChVQyhsKSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KGwsYSl7aWYoYSYmKGwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5E'@;
put 'T0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHtsLm91dGVySFRNTH1gKTtyZXR1cm4gYX19Y29uc3Qgc0k9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAt'@;
put 'XHVERkZGXS9nLGFJPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBVQyhjKXtyZXR1cm4gYy5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShzSSxmdW5jdGlvbihsKXtyZXR1cm4iJiMiKygxMDI0KihsLmNoYXJDb2RlQXQoMCktNTUyOTYpKyhsLmNoYXJDb2RlQXQoMSktNTYzMjApKzY1'@;
put 'NTM2KSsiOyJ9KS5yZXBsYWNlKGFJLGZ1bmN0aW9uKGwpe3JldHVybiImIyIrbC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWxldCByNjtmdW5jdGlvbiBudihjKXtyZXR1cm4iY29udGVudCJpbiBjJiZmdW5jdGlvbiBjSShj'@;
put 'KXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09Yy5ub2RlTmFtZX0oYyk/Yy5jb250ZW50Om51bGx9dmFyIFYzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLkhUTUw9MV09IkhUTUwiLGNbYy5TVFlMRT0yXT0iU1RZ'@;
put 'TEUiLGNbYy5TQ1JJUFQ9M109IlNDUklQVCIsY1tjLlVSTD00XT0iVVJMIixjW2MuUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLGN9KFYzfHx7fSk7ZnVuY3Rpb24gcTIoYyl7Y29uc3QgbD1KNCgpO3JldHVybiBsP0hDKGwuc2FuaXRpemUoVjMuSFRNTCxjKXx8IiIpOlg0KGMsIkhU'@;
put 'TUwiKT9IQygkMihjKSk6ZnVuY3Rpb24gbEkoYyxsKXtsZXQgYT1udWxsO3RyeXtyNj1yNnx8ZnVuY3Rpb24gYWYoYyl7Y29uc3QgbD1uZXcgSzkoYyk7cmV0dXJuIGZ1bmN0aW9uIGpDKCl7dHJ5e3JldHVybiEhKG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoTjMoIiIp'@;
put 'LCJ0ZXh0L2h0bWwiKX1jYXRjaHtyZXR1cm4hMX19KCk/bmV3IHE5KGwpOmx9KGMpO2xldCBkPWw/U3RyaW5nKGwpOiIiO2E9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKTtsZXQgaD01LGY9ZDtkb3tpZigwPT09aCl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJl'@;
put 'Y2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7aC0tLGQ9ZixmPWEuaW5uZXJIVE1MLGE9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKX13aGlsZShkIT09Zik7cmV0dXJuIE4zKChuZXcgb0kpLnNhbml0aXplQ2hpbGRyZW4obnYoYSl8fGEpKX1maW5hbGx5e2lmKGEpe2NvbnN0IGQ9bnYo'@;
put 'YSl8fGE7Zm9yKDtkLmZpcnN0Q2hpbGQ7KWQucmVtb3ZlQ2hpbGQoZC5maXJzdENoaWxkKX19fShLNCgpLGtvKGMpKX1mdW5jdGlvbiBydihjKXtjb25zdCBsPUo0KCk7cmV0dXJuIGw/bC5zYW5pdGl6ZShWMy5VUkwsYyl8fCIiOlg0KGMsIlVSTCIpPyQyKGMpOlg5KGtvKGMpKX1mdW5jdGlv'@;
put 'biBaQyhjKXtjb25zdCBsPUo0KCk7aWYobClyZXR1cm4gVkMobC5zYW5pdGl6ZShWMy5SRVNPVVJDRV9VUkwsYyl8fCIiKTtpZihYNChjLCJSZXNvdXJjZVVSTCIpKXJldHVybiBWQygkMihjKSk7dGhyb3cgbmV3IEFyKDkwNCwhMSl9ZnVuY3Rpb24gSjQoKXtjb25zdCBjPVhyKCk7cmV0dXJu'@;
put 'IGMmJmNbTDFdLnNhbml0aXplcn1jbGFzcyBNaXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Rlc2M9bCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5cdTAyNzVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIGE/dGhpcy5fX05HX0VMRU1FTlRfSURfXz1hOnZv'@;
put 'aWQgMCE9PWEmJih0aGlzLlx1MDI3NXByb3Y9aHIoe3Rva2VuOnRoaXMscHJvdmlkZWRJbjphLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmEuZmFjdG9yeX0pKX1nZXQgbXVsdGkoKXtyZXR1cm4gdGhpc310b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9'@;
put 'YH19Y29uc3QgUTQ9bmV3IE1pKCJFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiIpLFdDPW5ldyBNaSgiSU5KRUNUT1IiLC0xKSxHQz1uZXcgTWkoIklOSkVDVE9SX0RFRl9UWVBFUyIpO2NsYXNzICRDe2dldChsLGE9czApe2lmKGE9PT1zMCl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3Rv'@;
put 'ckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtxYShsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1yZXR1cm4gYX19ZnVuY3Rpb24gZ0koLi4uYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpxQygwLGMpLFx1MDI3NWZyb21OZ01vZHVsZTohMH19ZnVuY3Rpb24gcUMo'@;
put 'YywuLi5sKXtjb25zdCBhPVtdLGQ9bmV3IFNldDtsZXQgaDtyZXR1cm4gRjQobCxmPT57Y29uc3QgXz1mO292KF8sYSxbXSxkKSYmKGh8fD1bXSxoLnB1c2goXykpfSksdm9pZCAwIT09aCYmS0MoaCxhKSxhfWZ1bmN0aW9uIEtDKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2Nv'@;
put 'bnN0e3Byb3ZpZGVyczpofT1jW2FdO3N2KGgsZj0+e2wucHVzaChmKX0pfX1mdW5jdGlvbiBvdihjLGwsYSxkKXtpZighKGM9Ym8oYykpKXJldHVybiExO2xldCBoPW51bGwsZj1ubShjKTtjb25zdCBfPSFmJiZRbyhjKTtpZihmfHxfKXtpZihfJiYhXy5zdGFuZGFsb25lKXJldHVybiExO2g9'@;
put 'Y31lbHNle2NvbnN0IFc9Yy5uZ01vZHVsZTtpZihmPW5tKFcpLCFmKXJldHVybiExO2g9V31jb25zdCBUPWQuaGFzKGgpO2lmKF8pe2lmKFQpcmV0dXJuITE7aWYoZC5hZGQoaCksXy5kZXBlbmRlbmNpZXMpe2NvbnN0IFc9ImZ1bmN0aW9uIj09dHlwZW9mIF8uZGVwZW5kZW5jaWVzP18uZGVw'@;
put 'ZW5kZW5jaWVzKCk6Xy5kZXBlbmRlbmNpZXM7Zm9yKGNvbnN0IGllIG9mIFcpb3YoaWUsbCxhLGQpfX1lbHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFUKXtsZXQgaWU7ZC5hZGQoaCk7dHJ5e0Y0KGYuaW1wb3J0cyxnZT0+e292KGdlLGwsYSxkKSYmKGllfHw9W10s'@;
put 'aWUucHVzaChnZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09aWUmJktDKGllLGwpfWlmKCFUKXtjb25zdCBpZT1IMShoKXx8KCgpPT5uZXcgaCk7bC5wdXNoKHtwcm92aWRlOmgsdXNlRmFjdG9yeTppZSxkZXBzOlNzfSx7cHJvdmlkZTpHQyx1c2VWYWx1ZTpoLG11bHRpOiEwfSx7cHJvdmlkZTpR'@;
put 'NCx1c2VWYWx1ZTooKT0+YXIoaCksbXVsdGk6ITB9KX1jb25zdCBXPWYucHJvdmlkZXJzO251bGw9PVd8fFR8fHN2KFcsZ2U9PntsLnB1c2goZ2UpfSl9fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gc3YoYyxsKXtmb3IobGV0IGEgb2YgYylUMihhKSYmKGE9'@;
put 'YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/c3YoYSxsKTpsKGEpfWNvbnN0IG1JPUFzKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpBc30pO2Z1bmN0aW9uIGF2KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZtSSBpbiBjfWZ1bmN0aW9uIGxmKGMp'@;
put 'e3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IHQ1PW5ldyBNaSgiU2V0IEluamVjdG9yIHNjb3BlLiIpLG82PXt9LHZJPXt9O2xldCBsdjtmdW5jdGlvbiBzNigpe3JldHVybiB2b2lkIDA9PT1sdiYmKGx2PW5ldyAkQyksbHZ9Y2xhc3MgcTB7fWNsYXNzIGN2IGV4dGVuZHMgcTB7'@;
put 'Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLnBhcmVudD1hLHRoaXMuc291cmNlPWQsdGhpcy5zY29wZXM9aCx0aGlzLnJlY29yZHM9bmV3IE1hcCx0aGlzLl9uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQsdGhp'@;
put 'cy5fb25EZXN0cm95SG9va3M9W10sdGhpcy5fZGVzdHJveWVkPSExLGR2KGwsXz0+dGhpcy5wcm9jZXNzUHJvdmlkZXIoXykpLHRoaXMucmVjb3Jkcy5zZXQoV0MsQjModm9pZCAwLHRoaXMpKSxoLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChxMCxCMyh2b2lkIDAsdGhp'@;
put 'cykpO2NvbnN0IGY9dGhpcy5yZWNvcmRzLmdldCh0NSk7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBmLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoZi52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQoR0MubXVsdGksU3MsbnMuU2VsZikpfWRlc3Ryb3koKXt0'@;
put 'aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX2Rlc3Ryb3llZD0hMDt0cnl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcylhLm5nT25EZXN0cm95KCk7Y29uc3QgbD10aGlzLl9vbkRlc3Ryb3lIb29rczt0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXTtmb3IoY29uc3Qg'@;
put 'YSBvZiBsKWEoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19b25EZXN0cm95KGwpe3JldHVybiB0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX29uRGVzdHJveUhv'@;
put 'b2tzLnB1c2gobCksKCk9PnRoaXMucmVtb3ZlT25EZXN0cm95KGwpfXJ1bkluQ29udGV4dChsKXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2NvbnN0IGE9QTEodGhpcyksZD1kaSh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7QTEoYSksZGkoZCl9fWdldChsLGE9czAsZD1ucy5E'@;
put 'ZWZhdWx0KXtpZih0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGwuaGFzT3duUHJvcGVydHkobWEpKXJldHVybiBsW21hXSh0aGlzKTtkPWEwKGQpO2NvbnN0IGg9QTEodGhpcyksZj1kaSh2b2lkIDApO3RyeXtpZighKGQmbnMuU2tpcFNlbGYpKXtsZXQgVD10aGlzLnJlY29yZHMuZ2V0KGwp'@;
put 'O2lmKHZvaWQgMD09PVQpe2NvbnN0IFc9ZnVuY3Rpb24gQ0koYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyYmYyBpbnN0YW5jZW9mIE1pfShsKSYmeGQobCk7VD1XJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKFcpP0IzKHV2KGwpLG82KTpudWxs'@;
put 'LHRoaXMucmVjb3Jkcy5zZXQobCxUKX1pZihudWxsIT1UKXJldHVybiB0aGlzLmh5ZHJhdGUobCxUKX1yZXR1cm4oZCZucy5TZWxmP3M2KCk6dGhpcy5wYXJlbnQpLmdldChsLGE9ZCZucy5PcHRpb25hbCYmYT09PXMwP251bGw6YSl9Y2F0Y2goXyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09'@;
put 'PV8ubmFtZSl7aWYoKF9ba3VdPV9ba3VdfHxbXSkudW5zaGlmdChxYShsKSksaCl0aHJvdyBfO3JldHVybiBmdW5jdGlvbiBBdShjLGwsYSxkKXtjb25zdCBoPWNba3VdO3Rocm93IGxbb21dJiZoLnVuc2hpZnQobFtvbV0pLGMubWVzc2FnZT1mdW5jdGlvbiBBZChjLGwsYSxkPW51bGwpe2M9'@;
put 'YyYmIlxuIj09PWMuY2hhckF0KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGljZSgyKTpjO2xldCBoPXFhKGwpO2lmKEFycmF5LmlzQXJyYXkobCkpaD1sLm1hcChxYSkuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IF8gaW4g'@;
put 'bClpZihsLmhhc093blByb3BlcnR5KF8pKXtsZXQgVD1sW19dO2YucHVzaChfKyI6IisoInN0cmluZyI9PXR5cGVvZiBUP0pTT04uc3RyaW5naWZ5KFQpOnFhKFQpKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNl'@;
put 'KG5jLCJcbiAgIil9YH0oIlxuIitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9aCxjW2t1XT1udWxsLGN9KF8sbCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgX31maW5hbGx5e2RpKGYpLEExKGgpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25z'@;
put 'dCBsPUExKHRoaXMpLGE9ZGkodm9pZCAwKTt0cnl7Y29uc3QgZD10aGlzLmdldChRNC5tdWx0aSxTcyxucy5TZWxmKTtmb3IoY29uc3QgaCBvZiBkKWgoKX1maW5hbGx5e0ExKGwpLGRpKGEpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5r'@;
put 'ZXlzKCkpbC5wdXNoKHFhKGQpKTtyZXR1cm5gUjNJbmplY3Rvclske2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPWxmKGw9Ym8obCkpP2w6Ym8obCYmbC5w'@;
put 'cm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIGJJKGMpe3JldHVybiBhdihjKT9CMyh2b2lkIDAsYy51c2VWYWx1ZSk6QjMoUUMoYyksbzYpfShsKTtpZihsZihsKXx8ITAhPT1sLm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoYSk7ZWxzZXtsZXQgaD10aGlzLnJlY29yZHMuZ2V0KGEpO2h8fChoPUIz'@;
put 'KHZvaWQgMCxvNiwhMCksaC5mYWN0b3J5PSgpPT5LYyhoLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGEsaCkpLGE9bCxoLm11bHRpLnB1c2gobCl9dGhpcy5yZWNvcmRzLnNldChhLGQpfWh5ZHJhdGUobCxhKXtyZXR1cm4gYS52YWx1ZT09PW82JiYoYS52YWx1ZT12SSxhLnZhbHVlPWEuZmFj'@;
put 'dG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGEudmFsdWUmJmEudmFsdWUmJmZ1bmN0aW9uIHdJKGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5uZ09uRGVzdHJveX0oYS52YWx1ZSkmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRk'@;
put 'KGEudmFsdWUpLGEudmFsdWV9aW5qZWN0YWJsZURlZkluU2NvcGUobCl7aWYoIWwucHJvdmlkZWRJbilyZXR1cm4hMTtjb25zdCBhPWJvKGwucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhPyJhbnkiPT09YXx8dGhpcy5zY29wZXMuaGFzKGEpOnRoaXMuaW5qZWN0b3JEZWZU'@;
put 'eXBlcy5oYXMoYSl9cmVtb3ZlT25EZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3MuaW5kZXhPZihsKTstMSE9PWEmJnRoaXMuX29uRGVzdHJveUhvb2tzLnNwbGljZShhLDEpfX1mdW5jdGlvbiB1dihjKXtjb25zdCBsPXhkKGMpLGE9bnVsbCE9PWw/bC5mYWN0b3J5Okgx'@;
put 'KGMpO2lmKG51bGwhPT1hKXJldHVybiBhO2lmKGMgaW5zdGFuY2VvZiBNaSl0aHJvdyBuZXcgQXIoMjA0LCExKTtpZihjIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uIF9JKGMpe2NvbnN0IGw9Yy5sZW5ndGg7aWYobD4wKXRocm93IEJkKGwsIj8iKSxuZXcgQXIoMjA0LCEx'@;
put 'KTtjb25zdCBhPWZ1bmN0aW9uIEhzKGMpe3JldHVybiBjJiYoY1tjM118fGNbTnNdKXx8bnVsbH0oYyk7cmV0dXJuIG51bGwhPT1hPygpPT5hLmZhY3RvcnkoYyk6KCk9Pm5ldyBjfShjKTt0aHJvdyBuZXcgQXIoMjA0LCExKX1mdW5jdGlvbiBRQyhjLGwsYSl7bGV0IGQ7aWYobGYoYykpe2Nv'@;
put 'bnN0IGg9Ym8oYyk7cmV0dXJuIEgxKGgpfHx1dihoKX1pZihhdihjKSlkPSgpPT5ibyhjLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIEpDKGMpe3JldHVybiEoIWN8fCFjLnVzZUZhY3RvcnkpfShjKSlkPSgpPT5jLnVzZUZhY3RvcnkoLi4uS2MoYy5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVu'@;
put 'Y3Rpb24gWEMoYyl7cmV0dXJuISghY3x8IWMudXNlRXhpc3RpbmcpfShjKSlkPSgpPT5hcihibyhjLnVzZUV4aXN0aW5nKSk7ZWxzZXtjb25zdCBoPWJvKGMmJihjLnVzZUNsYXNzfHxjLnByb3ZpZGUpKTtpZighZnVuY3Rpb24geUkoYyl7cmV0dXJuISFjLmRlcHN9KGMpKXJldHVybiBIMSho'@;
put 'KXx8dXYoaCk7ZD0oKT0+bmV3IGgoLi4uS2MoYy5kZXBzKSl9cmV0dXJuIGR9ZnVuY3Rpb24gQjMoYyxsLGE9ITEpe3JldHVybntmYWN0b3J5OmMsdmFsdWU6bCxtdWx0aTphP1tdOnZvaWQgMH19ZnVuY3Rpb24gZHYoYyxsKXtmb3IoY29uc3QgYSBvZiBjKUFycmF5LmlzQXJyYXkoYSk/ZHYo'@;
put 'YSxsKTphJiZUMihhKT9kdihhLlx1MDI3NXByb3ZpZGVycyxsKTpsKGEpfWNvbnN0IGE2PW5ldyBNaSgiQXBwSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TSX0pLFNJPSJuZyIsZVM9bmV3IE1pKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLEdzPW5ldyBNaSgiUGxhdGZvcm0g'@;
put 'SUQiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksdFM9bmV3IE1pKCJBbmltYXRpb25Nb2R1bGVUeXBlIiksbDY9bmV3IE1pKCJDU1Agbm9uY2UiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5LNCgpLmJvZHk/LnF1ZXJ5U2VsZWN0b3IoIltu'@;
put 'Z0NzcE5vbmNlXSIpPy5nZXRBdHRyaWJ1dGUoIm5nQ3NwTm9uY2UiKXx8bnVsbH0pO2xldCByUz0oYyxsKT0+bnVsbDtmdW5jdGlvbiBvUyhjLGwpe3JldHVybiByUyhjLGwpfWNsYXNzIGxTe31jbGFzcyBjU3t9Y2xhc3MgWjN7cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCl7dGhyb3cgZnVu'@;
put 'Y3Rpb24geXYoYyl7Y29uc3QgbD1FcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7cWEoYyl9LmApO3JldHVybiBsLm5nQ29tcG9uZW50PWMsbH0obCl9fWxldCBLMD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5OVUxMPW5ldyBaMyxjfSkoKTtmdW5jdGlvbiB3digpe3Jl'@;
put 'dHVybiBZZChTYygpLFhyKCkpfWZ1bmN0aW9uIFlkKGMsbCl7cmV0dXJuIG5ldyBOaShIbChjLGwpKX1sZXQgTmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9YX19cmV0dXJuIGMuX19OR19FTEVNRU5UX0lEX189d3YsY30pKCk7ZnVuY3Rpb24gZGYo'@;
put 'Yyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBOaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jbGFzcyBZM3t9bGV0IEZvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRlc3Ryb3lOb2RlPW51bGx9fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPSgpPT5mdW5jdGlvbiBndSgpe2NvbnN0IGM9'@;
put 'WHIoKSxhPW10KFNjKCkuaW5kZXgsYyk7cmV0dXJuKENjKGEpP2E6YylbVm9dfSgpLGN9KSgpLHA2PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLGN9KSgpO2NsYXNzIHM1e2NvbnN0cnVj'@;
put 'dG9yKGwpe3RoaXMuZnVsbD1sLHRoaXMubWFqb3I9bC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9bC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9bC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19Y29uc3QgQUk9bmV3IHM1KCIxNi4xLjciKSxDdj17fTtmdW5jdGlvbiBhNShjKXtm'@;
put 'b3IoO2M7KXtjW0RvXXw9NjQ7Y29uc3QgbD1aNChjKTtpZih4NChjKSYmIWwpcmV0dXJuIGM7Yz1sfXJldHVybiBudWxsfWZ1bmN0aW9uIFN2KGMpe3JldHVybiBjLm5nT3JpZ2luYWxFcnJvcn1jbGFzcyBoZntjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJv'@;
put 'cihsKXtjb25zdCBhPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKGwpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIixsKSxhJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsYSl9X2ZpbmRPcmlnaW5hbEVycm9yKGwpe2xldCBhPWwmJlN2KGwpO2Zvcig7YSYmU3YoYSk7'@;
put 'KWE9U3YoYSk7cmV0dXJuIGF8fG51bGx9fWNvbnN0IHh2PW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5jdGlvbiBtNihjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGZmKGMpe3JldHVybiBjLm93bmVyRG9jdW1l'@;
put 'bnR9ZnVuY3Rpb24gRXYoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudC5ib2R5fWZ1bmN0aW9uIFdkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/YygpOmN9Y2xhc3MgdjYgZXh0ZW5kcyB2M3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25zdW1lckFs'@;
put 'bG93U2lnbmFsV3JpdGVzPSExLHRoaXMuX2xWaWV3PW51bGx9c2V0IGxWaWV3KGwpe3RoaXMuX2xWaWV3PWx9b25Db25zdW1lckRlcGVuZGVuY3lNYXlIYXZlQ2hhbmdlZCgpe2E1KHRoaXMuX2xWaWV3KX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fWdldCBoYXNSZWFkQVNpZ25h'@;
put 'bCgpe3JldHVybiB0aGlzLmhhc1Byb2R1Y2Vyc31ydW5JbkNvbnRleHQobCxhLGQpe2NvbnN0IGg9ZmwodGhpcyk7dGhpcy50cmFja2luZ1ZlcnNpb24rKzt0cnl7bChhLGQpfWZpbmFsbHl7ZmwoaCl9fWRlc3Ryb3koKXt0aGlzLnRyYWNraW5nVmVyc2lvbisrfX1sZXQgXzY9bnVsbDtmdW5j'@;
put 'dGlvbiBtUygpe3JldHVybiBfNj8/PW5ldyB2NixfNn1mdW5jdGlvbiB2UyhjLGwpe3JldHVybiBjW2xdPz9tUygpfWZ1bmN0aW9uIF9TKGMsbCl7Y29uc3QgYT1tUygpO2EuaGFzUmVhZEFTaWduYWwmJihjW2xdPV82LGEubFZpZXc9YyxfNj1uZXcgdjYpfWNvbnN0IFpvPXt9O2Z1bmN0aW9u'@;
put 'IENlKGMpe2t2KFRzKCksWHIoKSxldSgpK2MsITEpfWZ1bmN0aW9uIGt2KGMsbCxhLGQpe2lmKCFkKWlmKDM9PSgzJmxbRG9dKSl7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYma20obCxmLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJkFt'@;
put 'KGwsZiwwLGEpfVhoKGEpfWZ1bmN0aW9uIEF2KGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBoPVR2KGMsbCxhLGQpO3JldHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gVHYoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxTcyxn'@;
put 'SShjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6cWEoYykpLG5ldyBjdihmLGx8fHM2KCksZHx8bnVsbCxoKX1sZXQgRWE9KCgpPT57Y2xhc3MgY3tzdGF0aWMgY3JlYXRlKGEsZCl7aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gQXYoe25hbWU6IiJ9LGQsYSwi'@;
put 'Iik7e2NvbnN0IGg9YS5uYW1lPz8iIjtyZXR1cm4gQXYoe25hbWU6aH0sYS5wYXJlbnQsYS5wcm92aWRlcnMsaCl9fX1yZXR1cm4gYy5USFJPV19JRl9OT1RfRk9VTkQ9czAsYy5OVUxMPW5ldyAkQyxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoiYW55IixmYWN0b3J5Oigp'@;
put 'PT5hcihXQyl9KSxjLl9fTkdfRUxFTUVOVF9JRF9fPS0xLGN9KSgpO2Z1bmN0aW9uIHR0KGMsbD1ucy5EZWZhdWx0KXtjb25zdCBhPVhyKCk7cmV0dXJuIG51bGw9PT1hP2FyKGMsbCk6bkMoU2MoKSxhLGJvKGMpLGwpfWZ1bmN0aW9uIGI2KGMsbCxhLGQsaCxmLF8sVCxXLGllLGdlKXtjb25z'@;
put 'dCB3ZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiB3ZVtIaV09aCx3ZVtEb109MTQwfGQsKG51bGwhPT1pZXx8YyYmMjA0OCZjW0RvXSkmJih3ZVtEb118PTIwNDgpLHlvKHdlKSx3ZVt1YV09d2VbT2xdPWMsd2VbVmFdPWEsd2VbTDFdPV98fGMmJmNbTDFdLHdlW1ZvXT1UfHxjJiZjW1Zv'@;
put 'XSx3ZVtMZF09V3x8YyYmY1tMZF18fG51bGwsd2Vbem9dPWYsd2VbJGhdPWZ1bmN0aW9uIFcyKCl7cmV0dXJuIE45Kyt9KCksd2VbdTBdPWdlLHdlW1IxXT1pZSx3ZVtKYV09Mj09bC50eXBlP2NbSmFdOndlLHdlfWZ1bmN0aW9uIEczKGMsbCxhLGQsaCl7bGV0IGY9Yy5kYXRhW2xdO2lmKG51'@;
put 'bGw9PT1mKWY9ZnVuY3Rpb24gRHYoYyxsLGEsZCxoKXtjb25zdCBmPUZ3KCksXz1iOSgpLFc9Yy5kYXRhW2xdPWZ1bmN0aW9uIHc2KGMsbCxhLGQsaCxmKXtsZXQgXz1sP2wuaW5qZWN0b3JJbmRleDotMSxUPTA7cmV0dXJuIHczKCkmJihUfD0xMjgpLHt0eXBlOmEsaW5kZXg6ZCxpbnNlcnRC'@;
put 'ZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6XyxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczpULHByb3ZpZGVySW5kZXhlczowLHZhbHVlOmgs'@;
put 'YXR0cnM6ZixtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6bCxwcm9qZWN0'@;
put 'aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAsXz9m'@;
put 'OmYmJmYucGFyZW50LGEsbCxkLGgpO3JldHVybiBudWxsPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPVcpLG51bGwhPT1mJiYoXz9udWxsPT1mLmNoaWxkJiZudWxsIT09Vy5wYXJlbnQmJihmLmNoaWxkPVcpOm51bGw9PT1mLm5leHQmJihmLm5leHQ9VyxXLnByZXY9ZikpLFd9KGMs'@;
put 'bCxhLGQsaCksZnVuY3Rpb24gcVQoKXtyZXR1cm4gUG8ubEZyYW1lLmluSTE4bn0oKSYmKGYuZmxhZ3N8PTMyKTtlbHNlIGlmKDY0JmYudHlwZSl7Zi50eXBlPWEsZi52YWx1ZT1kLGYuYXR0cnM9aDtjb25zdCBfPWZ1bmN0aW9uIEw0KCl7Y29uc3QgYz1Qby5sRnJhbWUsbD1jLmN1cnJlbnRU'@;
put 'Tm9kZTtyZXR1cm4gYy5pc1BhcmVudD9sOmwucGFyZW50fSgpO2YuaW5qZWN0b3JJbmRleD1udWxsPT09Xz8tMTpfLmluamVjdG9ySW5kZXh9cmV0dXJuIE4xKGYsITApLGZ9ZnVuY3Rpb24gbDUoYyxsLGEsZCl7aWYoMD09PWEpcmV0dXJuLTE7Y29uc3QgaD1sLmxlbmd0aDtmb3IobGV0IGY9'@;
put 'MDtmPGE7ZisrKWwucHVzaChkKSxjLmJsdWVwcmludC5wdXNoKGQpLGMuZGF0YS5wdXNoKG51bGwpO3JldHVybiBofWZ1bmN0aW9uIEVTKGMsbCxhLGQsaCl7Y29uc3QgZj12UyhsLHAzKSxfPWV1KCksVD0yJmQ7dHJ5e2lmKFhoKC0xKSxUJiZsLmxlbmd0aD5wcyYma3YoYyxsLHBzLCExKSxo'@;
put 'MChUPzI6MCxoKSxUKWYucnVuSW5Db250ZXh0KGEsZCxoKTtlbHNle2NvbnN0IGllPWZsKG51bGwpO3RyeXthKGQsaCl9ZmluYWxseXtmbChpZSl9fX1maW5hbGx5e1QmJm51bGw9PT1sW3AzXSYmX1MobCxwMyksWGgoXyksaDAoVD8zOjEsaCl9fWZ1bmN0aW9uIEl2KGMsbCxhKXtpZihPZChs'@;
put 'KSl7Y29uc3QgZD1mbChudWxsKTt0cnl7Y29uc3QgZj1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IF89bC5kaXJlY3RpdmVTdGFydDtfPGY7XysrKXtjb25zdCBUPWMuZGF0YVtfXTtULmNvbnRlbnRRdWVyaWVzJiZULmNvbnRlbnRRdWVyaWVzKDEsYVtfXSxfKX19ZmluYWxseXtmbChkKX19fWZ1'@;
put 'bmN0aW9uIEx2KGMsbCxhKXtQdygpJiYoZnVuY3Rpb24gWUkoYyxsLGEsZCl7Y29uc3QgaD1hLmRpcmVjdGl2ZVN0YXJ0LGY9YS5kaXJlY3RpdmVFbmQ7UDEoYSkmJmZ1bmN0aW9uIEpJKGMsbCxhKXtjb25zdCBkPUhsKGwsYyksaD1rUyhhKTtsZXQgXz0xNjthLnNpZ25hbHM/Xz00MDk2OmEu'@;
put 'b25QdXNoJiYoXz02NCk7Y29uc3QgVD1TNihjLGI2KGMsaCxudWxsLF8sZCxsLG51bGwsY1tMMV0ucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGQsYSksbnVsbCxudWxsLG51bGwpKTtjW2wuaW5kZXhdPVR9KGwsYSxjLmRhdGFbaCthLmNvbXBvbmVudE9mZnNldF0pLGMuZmlyc3RD'@;
put 'cmVhdGVQYXNzfHxJbShhLGwpLFZjKGQsbCk7Y29uc3QgXz1hLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBUPWg7VDxmO1QrKyl7Y29uc3QgVz1jLmRhdGFbVF0saWU9UWgobCxjLFQsYSk7VmMoaWUsbCksbnVsbCE9PV8mJlFJKDAsVC1oLGllLFcsMCxfKSxRYyhXKSYmKG10KGEuaW5kZXgsbClb'@;
put 'VmFdPVFoKGwsYyxULGEpKX19KGMsbCxhLEhsKGEsbCkpLDY0PT0oNjQmYS5mbGFncykmJlJTKGMsbCxhKSl9ZnVuY3Rpb24geTYoYyxsLGE9SGwpe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtj'@;
put 'b25zdCBfPWRbZisxXSxUPS0xPT09Xz9hKGwsYyk6Y1tfXTtjW2grK109VH19fWZ1bmN0aW9uIGtTKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PSQzKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGly'@;
put 'ZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0cyxjLmlkKTpsfWZ1bmN0aW9uICQzKGMsbCxhLGQsaCxmLF8sVCxXLGllLGdlKXtjb25zdCB3ZT1wcytkLEVlPXdlK2gsWmU9ZnVuY3Rpb24gQVMoYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8'@;
put 'bDtkKyspYS5wdXNoKGQ8Yz9udWxsOlpvKTtyZXR1cm4gYX0od2UsRWUpLG90PSJmdW5jdGlvbiI9PXR5cGVvZiBpZT9pZSgpOmllO3JldHVybiBaZVtCaV09e3R5cGU6YyxibHVlcHJpbnQ6WmUsdGVtcGxhdGU6YSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OlQsZGVjbFROb2RlOmwsZGF0YTpa'@;
put 'ZS5zbGljZSgpLmZpbGwobnVsbCx3ZSksYmluZGluZ1N0YXJ0SW5kZXg6d2UsZXhwYW5kb1N0YXJ0SW5kZXg6RWUsaG9zdEJpbmRpbmdPcENvZGVzOm51bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVl'@;
put 'cmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50'@;
put 'UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgZj9mKCk6ZixwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIF8/XygpOl8sZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6Vyxjb25zdHM6b3QsaW5jb21wbGV0ZUZpcnN0'@;
put 'UGFzczohMSxzc3JJZDpnZX19bGV0IFJ2PWM9Pm51bGw7ZnVuY3Rpb24gcGYoYyxsLGEsZCl7Zm9yKGxldCBoIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShoKSl7YT1udWxsPT09YT97fTphO2NvbnN0IGY9Y1toXTtudWxsPT09ZD9DNihhLGwsaCxmKTpkLmhhc093blByb3BlcnR5KGgpJiZD'@;
put 'NihhLGwsZFtoXSxmKX1yZXR1cm4gYX1mdW5jdGlvbiBDNihjLGwsYSxkKXtjLmhhc093blByb3BlcnR5KGEpP2NbYV0ucHVzaChsLGQpOmNbYV09W2wsZF19ZnVuY3Rpb24gUHUoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBXPUhsKGwsYSk7bGV0IGdlLGllPWwuaW5wdXRzOyFUJiZudWxsIT1p'@;
put 'ZSYmKGdlPWllW2RdKT8oTnYoYyxhLGdlLGQsaCksUDEobCkmJmZ1bmN0aW9uIGpJKGMsbCl7Y29uc3QgYT1tdChsLGMpOzE2JmFbRG9dfHwoYVtEb118PTY0KX0oYSxsLmluZGV4KSk6MyZsLnR5cGUmJihkPWZ1bmN0aW9uIExTKGMpe3JldHVybiJjbGFzcyI9PT1jPyJjbGFzc05hbWUiOiJm'@;
put 'b3IiPT09Yz8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09Yz8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT1jPyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT1jPyJyZWFkT25seSI6InRhYmluZGV4Ij09PWM/InRhYkluZGV4IjpjfShkKSxoPW51bGwhPV8/XyhoLGwudmFsdWV8fCIiLGQpOmgs'@;
put 'Zi5zZXRQcm9wZXJ0eShXLGQsaCkpfWZ1bmN0aW9uIE92KGMsbCxhLGQpe2lmKFB3KCkpe2NvbnN0IGg9bnVsbD09PWQ/bnVsbDp7IiI6LTF9LGY9ZnVuY3Rpb24gR0koYyxsKXtjb25zdCBhPWMuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGQ9bnVsbCxoPW51bGw7aWYoYSlmb3IobGV0IGY9MDtm'@;
put 'PGEubGVuZ3RoO2YrKyl7Y29uc3QgXz1hW2ZdO2lmKG00KGwsXy5zZWxlY3RvcnMsITEpKWlmKGR8fChkPVtdKSxRYyhfKSlpZihudWxsIT09Xy5maW5kSG9zdERpcmVjdGl2ZURlZnMpe2NvbnN0IFQ9W107aD1ofHxuZXcgTWFwLF8uZmluZEhvc3REaXJlY3RpdmVEZWZzKF8sVCxoKSxkLnVu'@;
put 'c2hpZnQoLi4uVCxfKSxQdihjLGwsVC5sZW5ndGgpfWVsc2UgZC51bnNoaWZ0KF8pLFB2KGMsbCwwKTtlbHNlIGg9aHx8bmV3IE1hcCxfLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8uKF8sZCxoKSxkLnB1c2goXyl9cmV0dXJuIG51bGw9PT1kP251bGw6W2QsaF19KGMsYSk7bGV0IF8sVDtudWxs'@;
put 'PT09Zj9fPVQ9bnVsbDpbXyxUXT1mLG51bGwhPT1fJiZjNShjLGwsYSxfLGgsVCksaCYmZnVuY3Rpb24gJEkoYyxsLGEpe2lmKGwpe2NvbnN0IGQ9Yy5sb2NhbE5hbWVzPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCs9Mil7Y29uc3QgZj1hW2xbaCsxXV07aWYobnVsbD09Zil0aHJvdyBu'@;
put 'ZXcgQXIoLTMwMSwhMSk7ZC5wdXNoKGxbaF0sZil9fX0oYSxkLGgpfWEubWVyZ2VkQXR0cnM9WWgoYS5tZXJnZWRBdHRycyxhLmF0dHJzKX1mdW5jdGlvbiBjNShjLGwsYSxkLGgsZil7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspVDkoSW0oYSxsKSxjLGRbaWVdLnR5cGUpOyFmdW5j'@;
put 'dGlvbiBLSShjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJbmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspe2NvbnN0IGdlPWRbaWVdO2dlLnByb3Zp'@;
put 'ZGVyc1Jlc29sdmVyJiZnZS5wcm92aWRlcnNSZXNvbHZlcihnZSl9bGV0IF89ITEsVD0hMSxXPWw1KGMsbCxkLmxlbmd0aCxudWxsKTtmb3IobGV0IGllPTA7aWU8ZC5sZW5ndGg7aWUrKyl7Y29uc3QgZ2U9ZFtpZV07YS5tZXJnZWRBdHRycz1ZaChhLm1lcmdlZEF0dHJzLGdlLmhvc3RBdHRy'@;
put 'cyksWEkoYyxhLGwsVyxnZSkscUkoVyxnZSxoKSxudWxsIT09Z2UuY29udGVudFF1ZXJpZXMmJihhLmZsYWdzfD00KSwobnVsbCE9PWdlLmhvc3RCaW5kaW5nc3x8bnVsbCE9PWdlLmhvc3RBdHRyc3x8MCE9PWdlLmhvc3RWYXJzKSYmKGEuZmxhZ3N8PTY0KTtjb25zdCB3ZT1nZS50eXBlLnBy'@;
put 'b3RvdHlwZTshXyYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ09uSW5pdHx8d2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChhLmluZGV4KSxfPSEwKSwhVCYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ0RvQ2hlY2spJiYoKGMucHJlT3JkZXJDaGVja0hvb2tzPz89W10p'@;
put 'LnB1c2goYS5pbmRleCksVD0hMCksVysrfSFmdW5jdGlvbiBCSShjLGwsYSl7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZCxmPWMuZGF0YSxfPWwuYXR0cnMsVD1bXTtsZXQgVz1udWxsLGllPW51bGw7Zm9yKGxldCBnZT1sLmRpcmVjdGl2ZVN0YXJ0O2dlPGg7Z2UrKyl7Y29uc3Qgd2U9ZltnZV0s'@;
put 'RWU9YT9hLmdldCh3ZSk6bnVsbCxvdD1FZT9FZS5vdXRwdXRzOm51bGw7Vz1wZih3ZS5pbnB1dHMsZ2UsVyxFZT9FZS5pbnB1dHM6bnVsbCksaWU9cGYod2Uub3V0cHV0cyxnZSxpZSxvdCk7Y29uc3QgZXQ9bnVsbD09PVd8fG51bGw9PT1ffHx1MyhsKT9udWxsOmVMKFcsZ2UsXyk7VC5wdXNo'@;
put 'KGV0KX1udWxsIT09VyYmKFcuaGFzT3duUHJvcGVydHkoImNsYXNzIikmJihsLmZsYWdzfD04KSxXLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYobC5mbGFnc3w9MTYpKSxsLmluaXRpYWxJbnB1dHM9VCxsLmlucHV0cz1XLGwub3V0cHV0cz1pZX0oYyxhLGYpfWZ1bmN0aW9uIFJTKGMsbCxh'@;
put 'KXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZCxmPWEuaW5kZXgsXz1mdW5jdGlvbiBWdygpe3JldHVybiBQby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4fSgpO3RyeXtYaChmKTtmb3IobGV0IFQ9ZDtUPGg7VCsrKXtjb25zdCBXPWMuZGF0YVtUXSxpZT1s'@;
put 'W1RdO1NtKFQpLChudWxsIT09Vy5ob3N0QmluZGluZ3N8fDAhPT1XLmhvc3RWYXJzfHxudWxsIT09Vy5ob3N0QXR0cnMpJiZXSShXLGllKX19ZmluYWxseXtYaCgtMSksU20oXyl9fWZ1bmN0aW9uIFdJKGMsbCl7bnVsbCE9PWMuaG9zdEJpbmRpbmdzJiZjLmhvc3RCaW5kaW5ncygxLGwpfWZ1'@;
put 'bmN0aW9uIFB2KGMsbCxhKXtsLmNvbXBvbmVudE9mZnNldD1hLChjLmNvbXBvbmVudHM/Pz1bXSkucHVzaChsLmluZGV4KX1mdW5jdGlvbiBxSShjLGwsYSl7aWYoYSl7aWYobC5leHBvcnRBcylmb3IobGV0IGQ9MDtkPGwuZXhwb3J0QXMubGVuZ3RoO2QrKylhW2wuZXhwb3J0QXNbZF1dPWM7'@;
put 'UWMobCkmJihhWyIiXT1jKX19ZnVuY3Rpb24gWEkoYyxsLGEsZCxoKXtjLmRhdGFbZF09aDtjb25zdCBmPWguZmFjdG9yeXx8KGguZmFjdG9yeT1IMShoLnR5cGUpKSxfPW5ldyBSNChmLFFjKGgpLHR0KTtjLmJsdWVwcmludFtkXT1fLGFbZF09XyxmdW5jdGlvbiBVSShjLGwsYSxkLGgpe2Nv'@;
put 'bnN0IGY9aC5ob3N0QmluZGluZ3M7aWYoZil7bGV0IF89Yy5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PV8mJihfPWMuaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtjb25zdCBUPX5sLmluZGV4OyhmdW5jdGlvbiBaSShjKXtsZXQgbD1jLmxlbmd0aDtmb3IoO2w+MDspe2NvbnN0IGE9Y1stLWxd'@;
put 'O2lmKCJudW1iZXIiPT10eXBlb2YgYSYmYTwwKXJldHVybiBhfXJldHVybiAwfSkoXykhPVQmJl8ucHVzaChUKSxfLnB1c2goYSxkLGYpfX0oYyxsLGQsbDUoYyxhLGguaG9zdFZhcnMsWm8pLGgpfWZ1bmN0aW9uICQxKGMsbCxhLGQsaCxmKXtjb25zdCBfPUhsKGMsbCk7IWZ1bmN0aW9uIEZ2'@;
put 'KGMsbCxhLGQsaCxmLF8pe2lmKG51bGw9PWYpYy5yZW1vdmVBdHRyaWJ1dGUobCxoLGEpO2Vsc2V7Y29uc3QgVD1udWxsPT1fP2tvKGYpOl8oZixkfHwiIixoKTtjLnNldEF0dHJpYnV0ZShsLGgsVCxhKX19KGxbVm9dLF8sZixjLnZhbHVlLGEsZCxoKX1mdW5jdGlvbiBRSShjLGwsYSxkLGgs'@;
put 'Zil7Y29uc3QgXz1mW2xdO2lmKG51bGwhPT1fKWZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7KU9TKGQsYSxfW1QrK10sX1tUKytdLF9bVCsrXSl9ZnVuY3Rpb24gT1MoYyxsLGEsZCxoKXtjb25zdCBmPWZsKG51bGwpO3RyeXtjb25zdCBfPWMuaW5wdXRUcmFuc2Zvcm1zO251bGwhPT1fJiZfLmhh'@;
put 'c093blByb3BlcnR5KGQpJiYoaD1fW2RdLmNhbGwobCxoKSksbnVsbCE9PWMuc2V0SW5wdXQ/Yy5zZXRJbnB1dChsLGgsYSxkKTpsW2RdPWh9ZmluYWxseXtmbChmKX19ZnVuY3Rpb24gZUwoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigw'@;
put 'IT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3QgXz1jW2ZdO2ZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7VCs9MilpZihfW1RdPT09bCl7ZC5wdXNoKGYsX1tUKzFdLGFbaCsxXSk7YnJl'@;
put 'YWt9fWgrPTJ9ZWxzZSBoKz0yO2Vsc2UgaCs9NH1yZXR1cm4gZH1mdW5jdGlvbiBQUyhjLGwsYSxkKXtyZXR1cm5bYywhMCwhMSxsLG51bGwsMCxkLGEsbnVsbCxudWxsLG51bGxdfWZ1bmN0aW9uIEZTKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2lmKG51bGwhPT1hKWZvcihsZXQg'@;
put 'ZD0wO2Q8YS5sZW5ndGg7ZCs9Mil7Y29uc3QgZj1hW2QrMV07aWYoLTEhPT1mKXtjb25zdCBfPWMuZGF0YVtmXTtDOShhW2RdKSxfLmNvbnRlbnRRdWVyaWVzKDIsbFtmXSxmKX19fWZ1bmN0aW9uIFM2KGMsbCl7cmV0dXJuIGNbR2hdP2NbUzRdW1hhXT1sOmNbR2hdPWwsY1tTNF09bCxsfWZ1'@;
put 'bmN0aW9uIEh2KGMsbCxhKXtDOSgwKTtjb25zdCBkPWZsKG51bGwpO3RyeXtsKGMsYSl9ZmluYWxseXtmbChkKX19ZnVuY3Rpb24gSFMoYyl7cmV0dXJuIGNbVHVdfHwoY1tUdV09W10pfWZ1bmN0aW9uIE5TKGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFZT'@;
put 'KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFFjKGMpKSYmKGE9ZnVuY3Rpb24gSTQoYyl7Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW000XSlyZXR1cm4gYztjPWNbSGldfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtWb119ZnVuY3Rpb24gQlMoYyxs'@;
put 'KXtjb25zdCBhPWNbTGRdLGQ9YT9hLmdldChoZixudWxsKTpudWxsO2QmJmQuaGFuZGxlRXJyb3IobCl9ZnVuY3Rpb24gTnYoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3QgXz1hW2YrK10sVD1hW2YrK107T1MoYy5kYXRhW19dLGxbX10sZCxULGgpfX1mdW5jdGlv'@;
put 'biBHZChjLGwsYSl7Y29uc3QgZD1ZMChsLGMpOyFmdW5jdGlvbiBNQyhjLGwsYSl7Yy5zZXRWYWx1ZShsLGEpfShjW1ZvXSxkLGEpfWZ1bmN0aW9uIHRMKGMsbCl7Y29uc3QgYT1tdChsLGMpLGQ9YVtCaV07IWZ1bmN0aW9uIG5MKGMsbCl7Zm9yKGxldCBhPWwubGVuZ3RoO2E8Yy5ibHVlcHJp'@;
put 'bnQubGVuZ3RoO2ErKylsLnB1c2goYy5ibHVlcHJpbnRbYV0pfShkLGEpO2NvbnN0IGg9YVtIaV07bnVsbCE9PWgmJm51bGw9PT1hW3UwXSYmKGFbdTBdPW9TKGgsYVtMZF0pKSxWdihkLGEsYVtWYV0pfWZ1bmN0aW9uIFZ2KGMsbCxhKXtTOShsKTt0cnl7Y29uc3QgZD1jLnZpZXdRdWVyeTtu'@;
put 'dWxsIT09ZCYmSHYoMSxkLGEpO2NvbnN0IGg9Yy50ZW1wbGF0ZTtudWxsIT09aCYmRVMoYyxsLGgsMSxhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuZmlyc3RDcmVhdGVQYXNzPSExKSxjLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZGUyhjLGwpLGMuc3RhdGljVmlld1F1ZXJpZXMmJkh2KDIsYy52'@;
put 'aWV3UXVlcnksYSk7Y29uc3QgZj1jLmNvbXBvbmVudHM7bnVsbCE9PWYmJmZ1bmN0aW9uIGpTKGMsbCl7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspdEwoYyxsW2FdKX0obCxmKX1jYXRjaChkKXt0aHJvdyBjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5jb21wbGV0ZUZpcnN0UGFzcz0hMCxj'@;
put 'LmZpcnN0Q3JlYXRlUGFzcz0hMSksZH1maW5hbGx5e2xbRG9dJj0tNSxNbSgpfX1sZXQgelM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxsPW5ldyBTZXQsdGhpcy5xdWV1ZT1uZXcgTWFwfWNyZWF0ZShhLGQsaCl7Y29uc3QgZj10eXBlb2YgWm9uZT4idSI/bnVsbDpab25l'@;
put 'LmN1cnJlbnQsXz1uZXcgX20oYSxpZT0+e3RoaXMuYWxsLmhhcyhpZSkmJnRoaXMucXVldWUuc2V0KGllLGYpfSxoKTtsZXQgVDt0aGlzLmFsbC5hZGQoXyksXy5ub3RpZnkoKTtjb25zdCBXPSgpPT57Xy5jbGVhbnVwKCksVD8uKCksdGhpcy5hbGwuZGVsZXRlKF8pLHRoaXMucXVldWUuZGVs'@;
put 'ZXRlKF8pfTtyZXR1cm4gVD1kPy5vbkRlc3Ryb3koVykse2Rlc3Ryb3k6V319Zmx1c2goKXtpZigwIT09dGhpcy5xdWV1ZS5zaXplKWZvcihjb25zdFthLGRdb2YgdGhpcy5xdWV1ZSl0aGlzLnF1ZXVlLmRlbGV0ZShhKSxkP2QucnVuKCgpPT5hLnJ1bigpKTphLnJ1bigpfWdldCBpc1F1ZXVl'@;
put 'RW1wdHkoKXtyZXR1cm4gMD09PXRoaXMucXVldWUuc2l6ZX19cmV0dXJuIGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgY30pLGN9KSgpO2Z1bmN0aW9uIE02KGMsbCxhKXtsZXQgZD1hP2Muc3R5bGVzOm51bGwsaD1hP2MuY2xhc3Nl'@;
put 'czpudWxsLGY9MDtpZihudWxsIT09bClmb3IobGV0IF89MDtfPGwubGVuZ3RoO18rKyl7Y29uc3QgVD1sW19dOyJudW1iZXIiPT10eXBlb2YgVD9mPVQ6MT09Zj9oPXZjKGgsVCk6Mj09ZiYmKGQ9dmMoZCxUKyI6ICIrbFsrK19dKyI7IikpfWE/Yy5zdHlsZXM9ZDpjLnN0eWxlc1dpdGhvdXRI'@;
put 'b3N0PWQsYT9jLmNsYXNzZXM9aDpjLmNsYXNzZXNXaXRob3V0SG9zdD1ofWZ1bmN0aW9uIHU1KGMsbCxhLGQsaD0hMSl7Zm9yKDtudWxsIT09YTspe2NvbnN0IGY9bFthLmluZGV4XTtpZihudWxsIT09ZiYmZC5wdXNoKF9hKGYpKSxpYyhmKSl7Zm9yKGxldCBUPXJjO1Q8Zi5sZW5ndGg7VCsr'@;
put 'KXtjb25zdCBXPWZbVF0saWU9V1tCaV0uZmlyc3RDaGlsZDtudWxsIT09aWUmJnU1KFdbQmldLFcsaWUsZCl9ZltkMF0hPT1mW0hpXSYmZC5wdXNoKGZbZDBdKX1jb25zdCBfPWEudHlwZTtpZig4Jl8pdTUoYyxsLGEuY2hpbGQsZCk7ZWxzZSBpZigzMiZfKXtjb25zdCBUPXo5KGEsbCk7bGV0'@;
put 'IFc7Zm9yKDtXPVQoKTspZC5wdXNoKFcpfWVsc2UgaWYoMTYmXyl7Y29uc3QgVD1EQyhsLGEpO2lmKEFycmF5LmlzQXJyYXkoVCkpZC5wdXNoKC4uLlQpO2Vsc2V7Y29uc3QgVz1aNChsW0phXSk7dTUoV1tCaV0sVyxULGQsITApfX1hPWg/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9cmV0dXJu'@;
put 'IGR9ZnVuY3Rpb24geDYoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0wxXS5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbiYmaC5iZWdpbigpO3RyeXtVUyhjLGwsYy50ZW1wbGF0ZSxhKX1jYXRjaChfKXt0aHJvdyBkJiZCUyhsLF8pLF99ZmluYWxseXtoLmVuZCYmaC5lbmQoKSxsW0wxXS5lZmZlY3RN'@;
put 'YW5hZ2VyPy5mbHVzaCgpfX1mdW5jdGlvbiBVUyhjLGwsYSxkKXtjb25zdCBoPWxbRG9dO2lmKDI1NiE9KDI1NiZoKSl7bFtMMV0uZWZmZWN0TWFuYWdlcj8uZmx1c2goKSxTOShsKTt0cnl7eW8obCksZnVuY3Rpb24gTncoYyl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXg9Y30oYy5i'@;
put 'aW5kaW5nU3RhcnRJbmRleCksbnVsbCE9PWEmJkVTKGMsbCxhLDIsZCk7Y29uc3QgXz0zPT0oMyZoKTtpZihfKXtjb25zdCBpZT1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUsbnVsbCl9ZWxzZXtjb25zdCBpZT1jLnByZU9yZGVySG9va3M7bnVsbCE9PWllJiZBbShs'@;
put 'LGllLDAsbnVsbCksTTkobCwwKX1pZihmdW5jdGlvbiBhTChjKXtmb3IobGV0IGw9Q0MoYyk7bnVsbCE9PWw7bD1TQyhsKSl7aWYoIWxbdW1dKWNvbnRpbnVlO2NvbnN0IGE9bFtIMl07Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2VzKGFbZF0pfX19KGwpLFpTKGwsMiksbnVsbCE9PWMu'@;
put 'Y29udGVudFF1ZXJpZXMmJkZTKGMsbCksXyl7Y29uc3QgaWU9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy5jb250ZW50SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDEpLE05KGwsMSl9IWZ1bmN0aW9uIHhTKGMsbCl7Y29uc3QgYT1jLmhv'@;
put 'c3RCaW5kaW5nT3BDb2RlcztpZihudWxsPT09YSlyZXR1cm47Y29uc3QgZD12UyhsLGczKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZihmPDApWGgofmYpO2Vsc2V7Y29uc3QgXz1mLFQ9YVsrK2hdLFc9YVsrK2hdO0tUKFQsXyksZC5ydW5JbkNvbnRl'@;
put 'eHQoVywyLGxbX10pfX19ZmluYWxseXtudWxsPT09bFtnM10mJl9TKGwsZzMpLFhoKC0xKX19KGMsbCk7Y29uc3QgVD1jLmNvbXBvbmVudHM7bnVsbCE9PVQmJldTKGwsVCwwKTtjb25zdCBXPWMudmlld1F1ZXJ5O2lmKG51bGwhPT1XJiZIdigyLFcsZCksXyl7Y29uc3QgaWU9Yy52aWV3Q2hl'@;
put 'Y2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy52aWV3SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDIpLE05KGwsMil9ITA9PT1jLmZpcnN0VXBkYXRlUGFzcyYmKGMuZmlyc3RVcGRhdGVQYXNzPSExKSxsW0RvXSY9LTczLHpzKGwpfWZpbmFsbHl7TW0oKX19fWZ1'@;
put 'bmN0aW9uIFpTKGMsbCl7Zm9yKGxldCBhPUNDKGMpO251bGwhPT1hO2E9U0MoYSkpZm9yKGxldCBkPXJjO2Q8YS5sZW5ndGg7ZCsrKVlTKGFbZF0sbCl9ZnVuY3Rpb24gbEwoYyxsLGEpe1lTKG10KGwsYyksYSl9ZnVuY3Rpb24gWVMoYyxsKXtpZighZnVuY3Rpb24gR3QoYyl7cmV0dXJuIDEy'@;
put 'OD09KDEyOCZjW0RvXSl9KGMpKXJldHVybjtjb25zdCBhPWNbQmldO2lmKDgwJmNbRG9dJiYwPT09bHx8MTAyNCZjW0RvXXx8Mj09PWwpVVMoYSxjLGEudGVtcGxhdGUsY1tWYV0pO2Vsc2UgaWYoY1tJMV0+MCl7WlMoYywxKTtjb25zdCBoPWNbQmldLmNvbXBvbmVudHM7bnVsbCE9PWgmJldT'@;
put 'KGMsaCwxKX19ZnVuY3Rpb24gV1MoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWxMKGMsbFtkXSxhKX1jbGFzcyBkNXtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbQmldO3JldHVybiB1NShhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3Rvcihs'@;
put 'LGEpe3RoaXMuX2xWaWV3PWwsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWEsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbVmFdfXNldCBjb250ZXh0KGwpe3RoaXMuX2xWaWV3W1ZhXT1s'@;
put 'fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gMjU2PT0oMjU2JnRoaXMuX2xWaWV3W0RvXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3'@;
put 'W3VhXTtpZihpYyhsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHNmKGwsZCksUG0oYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9S20odGhpcy5fbFZpZXdbQmldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7IWZ1bmN0aW9uIGYw'@;
put 'KGMsbCl7aWYoMjU2PT0oMjU2JmNbRG9dKSl0aHJvdyBuZXcgQXIoOTExLCExKTtudWxsPT09Y1tPMV0mJihjW08xXT1bXSksY1tPMV0ucHVzaChsKX0odGhpcy5fbFZpZXcsbCl9bWFya0ZvckNoZWNrKCl7YTUodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNo'@;
put 'KCl7dGhpcy5fbFZpZXdbRG9dJj0tMTI5fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbRG9dfD0xMjh9ZGV0ZWN0Q2hhbmdlcygpe3g2KHRoaXMuX2xWaWV3W0JpXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lm'@;
put 'KHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgQXIoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsZnVuY3Rpb24gekQoYyxsKXtHNChjLGwsbFtWb10sMixudWxsLG51bGwpfSh0aGlzLl9sVmlld1tCaV0s'@;
put 'dGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKGwpe2lmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBBcig5MDIsITEpO3RoaXMuX2FwcFJlZj1sfX1jbGFzcyBjTCBleHRlbmRzIGQ1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuX3ZpZXc9bH1kZXRlY3RD'@;
put 'aGFuZ2VzKCl7Y29uc3QgbD10aGlzLl92aWV3O3g2KGxbQmldLGwsbFtWYV0sITEpfWNoZWNrTm9DaGFuZ2VzKCl7fWdldCBjb250ZXh0KCl7cmV0dXJuIG51bGx9fWNsYXNzIEdTIGV4dGVuZHMgSzB7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPWx9cmVzb2x2ZUNvbXBv'@;
put 'bmVudEZhY3RvcnkobCl7Y29uc3QgYT1RbyhsKTtyZXR1cm4gbmV3IGg1KGEsdGhpcy5uZ01vZHVsZSl9fWZ1bmN0aW9uICRTKGMpe2NvbnN0IGw9W107Zm9yKGxldCBhIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShhKSYmbC5wdXNoKHtwcm9wTmFtZTpjW2FdLHRlbXBsYXRlTmFtZTphfSk7cmV0'@;
put 'dXJuIGx9Y2xhc3MgZEx7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1hMChkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsQ3YsZCk7cmV0dXJuIGghPT1Ddnx8YT09PUN2P2g6dGhpcy5wYXJlbnRJbmplY3Rv'@;
put 'ci5nZXQobCxhLGQpfX1jbGFzcyBoNSBleHRlbmRzIGNTe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD0kUyhsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgucHJvcE5hbWUp'@;
put 'JiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gJFModGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMuY29tcG9uZW50'@;
put 'VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiB0OShjKXtyZXR1cm4gYy5tYXAoYW0pLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMuaXNCb3VuZFRv'@;
put 'TW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7bGV0IGY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIHEwP2g6aD8uaW5qZWN0b3I7ZiYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKGY9dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9u'@;
put 'ZUluamVjdG9yKGYpfHxmKTtjb25zdCBfPWY/bmV3IGRMKGwsZik6bCxUPV8uZ2V0KFkzLG51bGwpO2lmKG51bGw9PT1UKXRocm93IG5ldyBBcig0MDcsITEpO2NvbnN0IGdlPXtyZW5kZXJlckZhY3Rvcnk6VCxzYW5pdGl6ZXI6Xy5nZXQocDYsbnVsbCksZWZmZWN0TWFuYWdlcjpfLmdldCh6'@;
put 'UyxudWxsKX0sd2U9VC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxFZT10aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLFplPWQ/ZnVuY3Rpb24gVFMoYyxsLGEsZCl7Y29uc3QgZj1kLmdldCh4diwhMSl8fGE9PT1PYy5TaGFkb3dEb20sXz1j'@;
put 'LnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIE5JKGMpe1J2KGMpfShfKSxffSh3ZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sXyk6cW0od2UsRWUsZnVuY3Rpb24gdUwoYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJz'@;
put 'dmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEVlKSkseXQ9dGhpcy5jb21wb25lbnREZWYuc2lnbmFscz80NjA4OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaD81NzY6NTI4LGt0PSQzKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksU3Q9YjYobnVsbCxr'@;
put 'dCxudWxsLHl0LG51bGwsbnVsbCxnZSx3ZSxfLG51bGwsbnVsbCk7bGV0IFF0LHJuO1M5KFN0KTt0cnl7Y29uc3Qgdm49dGhpcy5jb21wb25lbnREZWY7bGV0IE5uLGNyPW51bGw7dm4uZmluZEhvc3REaXJlY3RpdmVEZWZzPyhObj1bXSxjcj1uZXcgTWFwLHZuLmZpbmRIb3N0RGlyZWN0aXZl'@;
put 'RGVmcyh2bixObixjciksTm4ucHVzaCh2bikpOk5uPVt2bl07Y29uc3QgRHI9ZnVuY3Rpb24gcVMoYyxsKXtjb25zdCBhPWNbQmldLGQ9cHM7cmV0dXJuIGNbZF09bCxHMyhhLGQsMiwiI2hvc3QiLG51bGwpfShTdCxaZSksX2k9ZnVuY3Rpb24gZkwoYyxsLGEsZCxoLGYsXyl7Y29uc3QgVD1o'@;
put 'W0JpXTshZnVuY3Rpb24gcEwoYyxsLGEsZCl7Zm9yKGNvbnN0IGggb2YgYylsLm1lcmdlZEF0dHJzPVloKGwubWVyZ2VkQXR0cnMsaC5ob3N0QXR0cnMpO251bGwhPT1sLm1lcmdlZEF0dHJzJiYoTTYobCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09YSYmT0MoZCxhLGwpKX0oZCxjLGwsXyk7'@;
put 'bGV0IFc9bnVsbDtudWxsIT09bCYmKFc9b1MobCxoW0xkXSkpO2NvbnN0IGllPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IGdlPTE2O2Euc2lnbmFscz9nZT00MDk2OmEub25QdXNoJiYoZ2U9NjQpO2NvbnN0IHdlPWI2KGgsa1MoYSksbnVsbCxnZSxoW2MuaW5k'@;
put 'ZXhdLGMsZixpZSxudWxsLG51bGwsVyk7cmV0dXJuIFQuZmlyc3RDcmVhdGVQYXNzJiZQdihULGMsZC5sZW5ndGgtMSksUzYoaCx3ZSksaFtjLmluZGV4XT13ZX0oRHIsWmUsdm4sTm4sU3QsZ2Usd2UpO3JuPWtlKGt0LHBzKSxaZSYmZnVuY3Rpb24gbUwoYyxsLGEsZCl7aWYoZClEZChjLGEs'@;
put 'WyJuZy12ZXJzaW9uIixBSS5mdWxsXSk7ZWxzZXtjb25zdHthdHRyczpoLGNsYXNzZXM6Zn09ZnVuY3Rpb24gXzQoYyl7Y29uc3QgbD1bXSxhPVtdO2xldCBkPTEsaD0yO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZF07aWYoInN0cmluZyI9PXR5cGVvZiBmKTI9PT1oPyIiIT09ZiYmbC5w'@;
put 'dXNoKGYsY1srK2RdKTo4PT09aCYmYS5wdXNoKGYpO2Vsc2V7aWYoIUZjKGgpKWJyZWFrO2g9Zn1kKyt9cmV0dXJue2F0dHJzOmwsY2xhc3NlczphfX0obC5zZWxlY3RvcnNbMF0pO2gmJkRkKGMsYSxoKSxmJiZmLmxlbmd0aD4wJiZSQyhjLGEsZi5qb2luKCIgIikpfX0od2Usdm4sWmUsZCks'@;
put 'dm9pZCAwIT09YSYmZnVuY3Rpb24gdkwoYyxsLGEpe2NvbnN0IGQ9Yy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07ZC5wdXNoKG51bGwhPWY/QXJyYXkuZnJvbShmKTpudWxsKX19KHJuLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGEpLFF0'@;
put 'PWZ1bmN0aW9uIGdMKGMsbCxhLGQsaCxmKXtjb25zdCBfPVNjKCksVD1oW0JpXSxXPUhsKF8saCk7YzUoVCxoLF8sYSxudWxsLGQpO2ZvcihsZXQgZ2U9MDtnZTxhLmxlbmd0aDtnZSsrKVZjKFFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K2dlLF8pLGgpO1JTKFQsaCxfKSxXJiZWYyhXLGgpO2Nv'@;
put 'bnN0IGllPVFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K18uY29tcG9uZW50T2Zmc2V0LF8pO2lmKGNbVmFdPWhbVmFdPWllLG51bGwhPT1mKWZvcihjb25zdCBnZSBvZiBmKWdlKGllLGwpO3JldHVybiBJdihULF8sYyksaWV9KF9pLHZuLE5uLGNyLFN0LFtfTF0pLFZ2KGt0LFN0LG51bGwpfWZp'@;
put 'bmFsbHl7TW0oKX1yZXR1cm4gbmV3IGhMKHRoaXMuY29tcG9uZW50VHlwZSxRdCxZZChybixTdCksU3Qscm4pfX1jbGFzcyBoTCBleHRlbmRzIGxTe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhpcy5fdE5vZGU9Zix0'@;
put 'aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBjTChoKSx0aGlzLmNvbXBvbmVudFR5cGU9bH1zZXRJbnB1dChsLGEpe2NvbnN0IGQ9dGhpcy5fdE5vZGUuaW5wdXRzO2xldCBoO2lmKG51'@;
put 'bGwhPT1kJiYoaD1kW2xdKSl7aWYodGhpcy5wcmV2aW91c0lucHV0VmFsdWVzPz89bmV3IE1hcCx0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuaGFzKGwpJiZPYmplY3QuaXModGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmdldChsKSxhKSlyZXR1cm47Y29uc3QgZj10aGlzLl9yb290TFZpZXc7'@;
put 'TnYoZltCaV0sZixoLGwsYSksdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLnNldChsLGEpLGE1KG10KHRoaXMuX3ROb2RlLmluZGV4LGYpKX19Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyB4Myh0aGlzLl90Tm9kZSx0aGlzLl9yb290TFZpZXcpfWRlc3Ryb3koKXt0aGlzLmhvc3RWaWV3LmRl'@;
put 'c3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5ob3N0Vmlldy5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIF9MKCl7Y29uc3QgYz1TYygpO0VtKFhyKClbQmldLGMpfWZ1bmN0aW9uIGVvKGMpe2xldCBsPWZ1bmN0aW9uIEtTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5'@;
put 'cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoUWMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0aHJvdyBuZXcgQXIoOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVz'@;
put 'aChoKTtjb25zdCBfPWM7Xy5pbnB1dHM9RTYoYy5pbnB1dHMpLF8uaW5wdXRUcmFuc2Zvcm1zPUU2KGMuaW5wdXRUcmFuc2Zvcm1zKSxfLmRlY2xhcmVkSW5wdXRzPUU2KGMuZGVjbGFyZWRJbnB1dHMpLF8ub3V0cHV0cz1FNihjLm91dHB1dHMpO2NvbnN0IFQ9aC5ob3N0QmluZGluZ3M7VCYm'@;
put 'd0woYyxUKTtjb25zdCBXPWgudmlld1F1ZXJ5LGllPWguY29udGVudFF1ZXJpZXM7aWYoVyYmYkwoYyxXKSxpZSYmeUwoYyxpZSksbjAoYy5pbnB1dHMsaC5pbnB1dHMpLG4wKGMuZGVjbGFyZWRJbnB1dHMsaC5kZWNsYXJlZElucHV0cyksbjAoYy5vdXRwdXRzLGgub3V0cHV0cyksbnVsbCE9'@;
put 'PWguaW5wdXRUcmFuc2Zvcm1zJiYobnVsbD09PV8uaW5wdXRUcmFuc2Zvcm1zJiYoXy5pbnB1dFRyYW5zZm9ybXM9e30pLG4wKF8uaW5wdXRUcmFuc2Zvcm1zLGguaW5wdXRUcmFuc2Zvcm1zKSksUWMoaCkmJmguZGF0YS5hbmltYXRpb24pe2NvbnN0IGdlPWMuZGF0YTtnZS5hbmltYXRpb249'@;
put 'KGdlLmFuaW1hdGlvbnx8W10pLmNvbmNhdChoLmRhdGEuYW5pbWF0aW9uKX19Y29uc3QgZj1oLmZlYXR1cmVzO2lmKGYpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZltfXTtUJiZULm5nSW5oZXJpdCYmVChjKSxUPT09ZW8mJihhPSExKX19bD1PYmplY3QuZ2V0UHJvdG90'@;
put 'eXBlT2YobCl9IWZ1bmN0aW9uIEJ2KGMpe2xldCBsPTAsYT1udWxsO2ZvcihsZXQgZD1jLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25zdCBoPWNbZF07aC5ob3N0VmFycz1sKz1oLmhvc3RWYXJzLGguaG9zdEF0dHJzPVloKGguaG9zdEF0dHJzLGE9WWgoYSxoLmhvc3RBdHRycykpfX0oZCl9ZnVu'@;
put 'Y3Rpb24gRTYoYyl7cmV0dXJuIGM9PT1YYz97fTpjPT09U3M/W106Y31mdW5jdGlvbiBiTChjLGwpe2NvbnN0IGE9Yy52aWV3UXVlcnk7Yy52aWV3UXVlcnk9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24geUwoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXM7Yy5jb250'@;
put 'ZW50UXVlcmllcz1hPyhkLGgsZik9PntsKGQsaCxmKSxhKGQsaCxmKX06bH1mdW5jdGlvbiB3TChjLGwpe2NvbnN0IGE9Yy5ob3N0QmluZGluZ3M7Yy5ob3N0QmluZGluZ3M9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24gZU0oYyl7Y29uc3QgbD1jLmlucHV0Q29uZmlnLGE9'@;
put 'e307Zm9yKGNvbnN0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKSYmaFsyXSYmKGFbZF09aFsyXSl9Yy5pbnB1dFRyYW5zZm9ybXM9YX1mdW5jdGlvbiBrNihjKXtyZXR1cm4hIUE2KGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShj'@;
put 'IGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEE2KGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1bmN0aW9uIHExKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIEJjKGMsbCxh'@;
put 'KXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIGdmKGMsbCxhLGQpe2NvbnN0IGg9QmMoYyxsLGEpO3JldHVybiBCYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBUNihjLGwsYSxkLGgpe2NvbnN0IGY9Z2YoYyxsLGEsZCk7cmV0dXJuIEJjKGMsbCsyLGgpfHxm'@;
put 'fWZ1bmN0aW9uIG0wKGMsbCxhLGQsaCxmKXtjb25zdCBfPWdmKGMsbCxhLGQpO3JldHVybiBnZihjLGwrMixoLGYpfHxffWZ1bmN0aW9uIFRyKGMsbCxhLGQpe2NvbnN0IGg9WHIoKTtyZXR1cm4gQmMoaCxDMygpLGwpJiYoVHMoKSwkMShRYSgpLGgsYyxsLGEsZCkpLFRyfWZ1bmN0aW9uIEsz'@;
put 'KGMsbCxhLGQpe3JldHVybiBCYyhjLEMzKCksYSk/bCtrbyhhKStkOlpvfWZ1bmN0aW9uIFFlKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1YcigpLGllPVRzKCksZ2U9Yytwcyx3ZT1pZS5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gV0woYyxsLGEsZCxoLGYsXyxULFcpe2NvbnN0IGllPWwu'@;
put 'Y29uc3RzLGdlPUczKGwsYyw0LF98fG51bGwsSXIoaWUsVCkpO092KGwsYSxnZSxJcihpZSxXKSksRW0obCxnZSk7Y29uc3Qgd2U9Z2UudFZpZXc9JDMoMixnZSxkLGgsZixsLmRpcmVjdGl2ZVJlZ2lzdHJ5LGwucGlwZVJlZ2lzdHJ5LG51bGwsbC5zY2hlbWFzLGllLG51bGwpO3JldHVybiBu'@;
put 'dWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwsZ2UpLHdlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcoZ2UpKSxnZX0oZ2UsaWUsVyxsLGEsZCxoLGYsXyk6aWUuZGF0YVtnZV07TjEod2UsITEpO2NvbnN0IEVlPUt2KGllLFcsd2UsYyk7eG0oKSYmZTYoaWUs'@;
put 'VyxFZSx3ZSksVmMoRWUsVyksUzYoVyxXW2dlXT1QUyhFZSxXLEVlLHdlKSkscWgod2UpJiZMdihpZSxXLHdlKSxudWxsIT1fJiZ5NihXLHdlLFQpfWxldCBLdj1mdW5jdGlvbiBYdihjLGwsYSxkKXtyZXR1cm4gVmQoITApLGxbVm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiAkaShj'@;
put 'KXtyZXR1cm4gJGUoZnVuY3Rpb24gJFQoKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlld30oKSxwcytjKX1mdW5jdGlvbiBSZShjLGwsYSl7Y29uc3QgZD1YcigpO3JldHVybiBCYyhkLEMzKCksbCkmJlB1KFRzKCksUWEoKSxkLGMsbCxkW1ZvXSxhLCExKSxSZX1mdW5jdGlvbiBKdihj'@;
put 'LGwsYSxkLGgpe2NvbnN0IF89aD8iY2xhc3MiOiJzdHlsZSI7TnYoYyxhLGwuaW5wdXRzW19dLF8sZCl9ZnVuY3Rpb24gbWUoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPXBzK2MsVD1oW1ZvXSxXPWYuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIHVNKGMsbCxhLGQsaCxmKXtjb25z'@;
put 'dCBfPWwuY29uc3RzLFc9RzMobCxjLDIsZCxJcihfLGgpKTtyZXR1cm4gT3YobCxhLFcsSXIoXyxmKSksbnVsbCE9PVcuYXR0cnMmJk02KFcsVy5hdHRycywhMSksbnVsbCE9PVcubWVyZ2VkQXR0cnMmJk02KFcsVy5tZXJnZWRBdHRycywhMCksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVz'@;
put 'LmVsZW1lbnRTdGFydChsLFcpLFd9KF8sZixoLGwsYSxkKTpmLmRhdGFbX10saWU9ZE0oZixoLFcsVCxsLGMpO2hbX109aWU7Y29uc3QgZ2U9cWgoVyk7cmV0dXJuIE4xKFcsITApLE9DKFQsaWUsVyksMzIhPSgzMiZXLmZsYWdzKSYmeG0oKSYmZTYoZixoLGllLFcpLDA9PT1mdW5jdGlvbiBC'@;
put 'VCgpe3JldHVybiBQby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnR9KCkmJlZjKGllLGgpLGZ1bmN0aW9uIGpUKCl7UG8ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCksZ2UmJihMdihmLGgsVyksSXYoZixXLGgpKSxudWxsIT09ZCYmeTYoaCxXKSxtZX1mdW5jdGlvbiB5ZSgpe2xldCBj'@;
put 'PVNjKCk7YjkoKT9DbSgpOihjPWMucGFyZW50LE4xKGMsITEpKTtjb25zdCBsPWM7KGZ1bmN0aW9uIFVUKGMpe3JldHVybiBQby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09Y30pKGwpJiZmdW5jdGlvbiBHVCgpe1BvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiB6'@;
put 'VCgpe1BvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9VHMoKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJihFbShhLGMpLE9kKGMpJiZhLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbnVsbCE9bC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIHNEKGMpe3JldHVy'@;
put 'biAwIT0oOCZjLmZsYWdzKX0obCkmJkp2KGEsbCxYcigpLGwuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT1sLnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBhRChjKXtyZXR1cm4gMCE9KDE2JmMuZmxhZ3MpfShsKSYmSnYoYSxsLFhyKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSks'@;
put 'eWV9ZnVuY3Rpb24gcXQoYyxsLGEsZCl7cmV0dXJuIG1lKGMsbCxhLGQpLHllKCkscXR9bGV0IGRNPShjLGwsYSxkLGgsZik9PihWZCghMCkscW0oZCxoLGZ1bmN0aW9uIEd3KCl7cmV0dXJuIFBvLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24gQnIoYyxsLGEpe2NvbnN0'@;
put 'IGQ9WHIoKSxoPVRzKCksZj1jK3BzLF89aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gUXYoYyxsLGEsZCxoKXtjb25zdCBmPWwuY29uc3RzLF89SXIoZixkKSxUPUczKGwsYyw4LCJuZy1jb250YWluZXIiLF8pO3JldHVybiBudWxsIT09XyYmTTYoVCxfLCEwKSxPdihsLGEsVCxJcihmLGgp'@;
put 'KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsVCksVH0oZixoLGQsbCxhKTpoLmRhdGFbZl07TjEoXywhMCk7Y29uc3QgVD1mTShoLGQsXyxjKTtyZXR1cm4gZFtmXT1ULHhtKCkmJmU2KGgsZCxULF8pLFZjKFQsZCkscWgoXykmJihMdihoLGQsXyksSXYoaCxf'@;
put 'LGQpKSxudWxsIT1hJiZ5NihkLF8pLEJyfWZ1bmN0aW9uIFVyKCl7bGV0IGM9U2MoKTtjb25zdCBsPVRzKCk7cmV0dXJuIGI5KCk/Q20oKTooYz1jLnBhcmVudCxOMShjLCExKSksbC5maXJzdENyZWF0ZVBhc3MmJihFbShsLGMpLE9kKGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksVXJ9'@;
put 'ZnVuY3Rpb24gamEoYyxsLGEpe3JldHVybiBCcihjLGwsYSksVXIoKSxqYX1sZXQgZk09KGMsbCxhLGQpPT4oVmQoITApLFU5KGxbVm9dLCIiKSk7ZnVuY3Rpb24gVm4oKXtyZXR1cm4gWHIoKX1mdW5jdGlvbiB2NShjKXtyZXR1cm4hIWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59ZnVu'@;
put 'Y3Rpb24gcE0oYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9ZnVuY3Rpb24geHQoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPVNjKCk7cmV0dXJuIGdNKGYsaCxoW1ZvXSxfLGMsbCxkKSx4dH1mdW5jdGlvbiBlXyhjLGwpe2NvbnN0IGE9U2MoKSxk'@;
put 'PVhyKCksaD1UcygpO3JldHVybiBnTShoLGQsVlModzkoaC5kYXRhKSxhLGQpLGEsYyxsKSxlX31mdW5jdGlvbiBnTShjLGwsYSxkLGgsZixfKXtjb25zdCBUPXFoKGQpLGllPWMuZmlyc3RDcmVhdGVQYXNzJiZOUyhjKSxnZT1sW1ZhXSx3ZT1IUyhsKTtsZXQgRWU9ITA7aWYoMyZkLnR5cGV8'@;
put 'fF8pe2NvbnN0IGV0PUhsKGQsbCkseXQ9Xz9fKGV0KTpldCxrdD13ZS5sZW5ndGgsU3Q9Xz9ybj0+XyhfYShybltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IFF0PW51bGw7aWYoIV8mJlQmJihRdD1mdW5jdGlvbiBYTChjLGwsYSxkKXtjb25zdCBoPWMuY2xlYW51cDtpZihudWxsIT1oKWZvcihs'@;
put 'ZXQgZj0wO2Y8aC5sZW5ndGgtMTtmKz0yKXtjb25zdCBfPWhbZl07aWYoXz09PWEmJmhbZisxXT09PWQpe2NvbnN0IFQ9bFtUdV0sVz1oW2YrMl07cmV0dXJuIFQubGVuZ3RoPlc/VFtXXTpudWxsfSJzdHJpbmciPT10eXBlb2YgXyYmKGYrPTIpfXJldHVybiBudWxsfShjLGwsaCxkLmluZGV4'@;
put 'KSksbnVsbCE9PVF0KShRdC5fX25nTGFzdExpc3RlbmVyRm5fX3x8UXQpLl9fbmdOZXh0TGlzdGVuZXJGbl9fPWYsUXQuX19uZ0xhc3RMaXN0ZW5lckZuX189ZixFZT0hMTtlbHNle2Y9dk0oZCxsLGdlLGYsITEpO2NvbnN0IHJuPWEubGlzdGVuKHl0LGgsZik7d2UucHVzaChmLHJuKSxpZSYm'@;
put 'aWUucHVzaChoLFN0LGt0LGt0KzEpfX1lbHNlIGY9dk0oZCxsLGdlLGYsITEpO2NvbnN0IFplPWQub3V0cHV0cztsZXQgb3Q7aWYoRWUmJm51bGwhPT1aZSYmKG90PVplW2hdKSl7Y29uc3QgZXQ9b3QubGVuZ3RoO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldDt5dCs9Mil7Y29uc3Qgdm49bFtv'@;
put 'dFt5dF1dW290W3l0KzFdXS5zdWJzY3JpYmUoZiksTm49d2UubGVuZ3RoO3dlLnB1c2goZix2biksaWUmJmllLnB1c2goaCxkLmluZGV4LE5uLC0oTm4rMSkpfX19ZnVuY3Rpb24gbU0oYyxsLGEsZCl7dHJ5e3JldHVybiBoMCg2LGwsYSksITEhPT1hKGQpfWNhdGNoKGgpe3JldHVybiBCUyhj'@;
put 'LGgpLCExfWZpbmFsbHl7aDAoNyxsLGEpfX1mdW5jdGlvbiB2TShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKF8pe2lmKF89PT1GdW5jdGlvbilyZXR1cm4gZDthNShjLmNvbXBvbmVudE9mZnNldD4tMT9tdChjLmluZGV4LGwpOmwpO2xldCBXPW1NKGwsYSxkLF8pLGllPWYuX19uZ05l'@;
put 'eHRMaXN0ZW5lckZuX187Zm9yKDtpZTspVz1tTShsLGEsaWUsXykmJlcsaWU9aWUuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09VyYmXy5wcmV2ZW50RGVmYXVsdCgpLFd9fWZ1bmN0aW9uIFZlKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIFhUKGMpe3JldHVybihQby5sRnJhbWUu'@;
put 'Y29udGV4dExWaWV3PWZ1bmN0aW9uIEpUKGMsbCl7Zm9yKDtjPjA7KWw9bFtPbF0sYy0tO3JldHVybiBsfShjLFBvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtWYV19KGMpfWZ1bmN0aW9uIEpMKGMsbCl7bGV0IGE9bnVsbDtjb25zdCBkPWZ1bmN0aW9uIFdoKGMpe2NvbnN0IGw9Yy5hdHRycztp'@;
put 'ZihudWxsIT1sKXtjb25zdCBhPWwuaW5kZXhPZig1KTtpZighKDEmYSkpcmV0dXJuIGxbYSsxXX1yZXR1cm4gbnVsbH0oYyk7Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9bFtoXTtpZigiKiIhPT1mKXtpZihudWxsPT09ZD9tNChjLGYsITApOnY0KGQsZikpcmV0dXJuIGh9'@;
put 'ZWxzZSBhPWh9cmV0dXJuIGF9ZnVuY3Rpb24gVGkoYyl7Y29uc3QgbD1YcigpW0phXVt6b107aWYoIWwucHJvamVjdGlvbil7Y29uc3QgZD1sLnByb2plY3Rpb249QmQoYz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IF89'@;
put 'Yz9KTChmLGMpOjA7bnVsbCE9PV8mJihoW19dP2hbX10ucHJvamVjdGlvbk5leHQ9ZjpkW19dPWYsaFtfXT1mKSxmPWYubmV4dH19fWZ1bmN0aW9uIGtyKGMsbD0wLGEpe2NvbnN0IGQ9WHIoKSxoPVRzKCksZj1HMyhoLHBzK2MsMTYsbnVsbCxhfHxudWxsKTtudWxsPT09Zi5wcm9qZWN0aW9u'@;
put 'JiYoZi5wcm9qZWN0aW9uPWwpLENtKCksKCFkW3UwXXx8dzMoKSkmJjMyIT0oMzImZi5mbGFncykmJmZ1bmN0aW9uIFlEKGMsbCxhKXtXRChsW1ZvXSwwLGwsYSxGMyhjLGEsbCksVzEoYS5wYXJlbnR8fGxbem9dLGEsbCkpfShoLGQsZil9ZnVuY3Rpb24geGMoYyxsLGEpe3JldHVybiBYMihj'@;
put 'LCIiLGwsIiIsYSkseGN9ZnVuY3Rpb24gWDIoYyxsLGEsZCxoKXtjb25zdCBmPVhyKCksXz1LMyhmLGwsYSxkKTtyZXR1cm4gXyE9PVpvJiZQdShUcygpLFFhKCksZixjLF8sZltWb10saCwhMSksWDJ9ZnVuY3Rpb24gYjUoYyxsKXtyZXR1cm4gYzw8MTd8bDw8Mn1mdW5jdGlvbiBYMChjKXty'@;
put 'ZXR1cm4gYz4+MTcmMzI3Njd9ZnVuY3Rpb24gdF8oYyl7cmV0dXJuIDJ8Y31mdW5jdGlvbiBKMChjKXtyZXR1cm4oMTMxMDY4JmMpPj4yfWZ1bmN0aW9uIG5fKGMsbCl7cmV0dXJuLTEzMTA2OSZjfGw8PDJ9ZnVuY3Rpb24gcl8oYyl7cmV0dXJuIDF8Y31mdW5jdGlvbiBNTShjLGwsYSxkLGgp'@;
put 'e2NvbnN0IGY9Y1thKzFdLF89bnVsbD09PWw7bGV0IFQ9ZD9YMChmKTpKMChmKSxXPSExO2Zvcig7MCE9PVQmJighMT09PVd8fF8pOyl7Y29uc3QgZ2U9Y1tUKzFdO25SKGNbVF0sbCkmJihXPSEwLGNbVCsxXT1kP3JfKGdlKTp0XyhnZSkpLFQ9ZD9YMChnZSk6SjAoZ2UpfVcmJihjW2ErMV09'@;
put 'ZD90XyhmKTpyXyhmKSl9ZnVuY3Rpb24gblIoYyxsKXtyZXR1cm4gbnVsbD09PWN8fG51bGw9PWx8fChBcnJheS5pc0FycmF5KGMpP2NbMV06Yyk9PT1sfHwhKCFBcnJheS5pc0FycmF5KGMpfHwic3RyaW5nIiE9dHlwZW9mIGwpJiZqZChjLGwpPj0wfWNvbnN0IFZsPXt0ZXh0RW5kOjAsa2V5'@;
put 'OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiB4TShjKXtyZXR1cm4gYy5zdWJzdHJpbmcoVmwua2V5LFZsLmtleUVuZCl9ZnVuY3Rpb24gRU0oYyxsKXtjb25zdCBhPVZsLnRleHRFbmQ7cmV0dXJuIGE9PT1sPy0xOihsPVZsLmtleUVuZD1mdW5jdGlvbiBzUihjLGws'@;
put 'YSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChsKT4zMjspbCsrO3JldHVybiBsfShjLFZsLmtleT1sLGEpLHZmKGMsbCxhKSl9ZnVuY3Rpb24gdmYoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk8PTMyOylsKys7cmV0dXJuIGx9ZnVuY3Rpb24gSHUoYyxsLGEpe3JldHVybiB2MChj'@;
put 'LGwsYSwhMSksSHV9ZnVuY3Rpb24gZHIoYyxsKXtyZXR1cm4gdjAoYyxsLG51bGwsITApLGRyfWZ1bmN0aW9uIEsxKGMsbCl7Zm9yKGxldCBhPWZ1bmN0aW9uIGlSKGMpe3JldHVybiBmdW5jdGlvbiBGdShjKXtWbC5rZXk9MCxWbC5rZXlFbmQ9MCxWbC52YWx1ZT0wLFZsLnZhbHVlRW5kPTAs'@;
put 'VmwudGV4dEVuZD1jLmxlbmd0aH0oYyksRU0oYyx2ZihjLDAsVmwudGV4dEVuZCkpfShsKTthPj0wO2E9RU0obCxhKSlNYyhjLHhNKGwpLCEwKX1mdW5jdGlvbiB2MChjLGwsYSxkKXtjb25zdCBoPVhyKCksZj1UcygpLF89VjEoMik7Zi5maXJzdFVwZGF0ZVBhc3MmJlgxKGYsYyxfLGQpLGwh'@;
put 'PT1abyYmQmMoaCxfLGwpJiZjXyhmLGYuZGF0YVtldSgpXSxoLGhbVm9dLGMsaFtfKzFdPWZ1bmN0aW9uIExNKGMsbCl7cmV0dXJuIG51bGw9PWN8fCIiPT09Y3x8KCJzdHJpbmciPT10eXBlb2YgbD9jKz1sOiJvYmplY3QiPT10eXBlb2YgYyYmKGM9cWEoJDIoYykpKSksY30obCxhKSxkLF8p'@;
put 'fWZ1bmN0aW9uIERNKGMsbCl7cmV0dXJuIGw+PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gWDEoYyxsLGEsZCl7Y29uc3QgaD1jLmRhdGE7aWYobnVsbD09PWhbYSsxXSl7Y29uc3QgZj1oW2V1KCldLF89RE0oYyxhKTt1XyhmLGQpJiZudWxsPT09bCYmIV8mJihsPSExKSxsPWZ1bmN0'@;
put 'aW9uIGxSKGMsbCxhLGQpe2NvbnN0IGg9dzkoYyk7bGV0IGY9ZD9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1oKTA9PT0oZD9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKSYmKGE9eTUoYT1sXyhudWxsLGMsbCxhLGQpLGwuYXR0cnMsZCksZj1u'@;
put 'dWxsKTtlbHNle2NvbnN0IF89bC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PV98fGNbX10hPT1oKWlmKGE9bF8oaCxjLGwsYSxkKSxudWxsPT09Zil7bGV0IFc9ZnVuY3Rpb24gY1IoYyxsLGEpe2NvbnN0IGQ9YT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1K'@;
put 'MChkKSlyZXR1cm4gY1tYMChkKV19KGMsbCxkKTt2b2lkIDAhPT1XJiZBcnJheS5pc0FycmF5KFcpJiYoVz1sXyhudWxsLGMsbCxXWzFdLGQpLFc9eTUoVyxsLmF0dHJzLGQpLGZ1bmN0aW9uIHVSKGMsbCxhLGQpe2NbWDAoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0o'@;
put 'YyxsLGQsVykpfWVsc2UgZj1mdW5jdGlvbiBkUihjLGwsYSl7bGV0IGQ7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGY9MStsLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2Y8aDtmKyspZD15NShkLGNbZl0uaG9zdEF0dHJzLGEpO3JldHVybiB5NShkLGwuYXR0cnMsYSl9KGMsbCxkKX1y'@;
put 'ZXR1cm4gdm9pZCAwIT09ZiYmKGQ/bC5yZXNpZHVhbENsYXNzZXM9ZjpsLnJlc2lkdWFsU3R5bGVzPWYpLGF9KGgsZixsLGQpLGZ1bmN0aW9uIGVSKGMsbCxhLGQsaCxmKXtsZXQgXz1mP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MsVD1YMChfKSxXPUowKF8pO2NbZF09YTtsZXQg'@;
put 'Z2UsaWU9ITE7aWYoQXJyYXkuaXNBcnJheShhKT8oZ2U9YVsxXSwobnVsbD09PWdlfHxqZChhLGdlKT4wKSYmKGllPSEwKSk6Z2U9YSxoKWlmKDAhPT1XKXtjb25zdCBFZT1YMChjW1QrMV0pO2NbZCsxXT1iNShFZSxUKSwwIT09RWUmJihjW0VlKzFdPW5fKGNbRWUrMV0sZCkpLGNbVCsxXT1m'@;
put 'dW5jdGlvbiBTaShjLGwpe3JldHVybiAxMzEwNzEmY3xsPDwxN30oY1tUKzFdLGQpfWVsc2UgY1tkKzFdPWI1KFQsMCksMCE9PVQmJihjW1QrMV09bl8oY1tUKzFdLGQpKSxUPWQ7ZWxzZSBjW2QrMV09YjUoVywwKSwwPT09VD9UPWQ6Y1tXKzFdPW5fKGNbVysxXSxkKSxXPWQ7aWUmJihjW2Qr'@;
put 'MV09dF8oY1tkKzFdKSksTU0oYyxnZSxkLCEwKSxNTShjLGdlLGQsITEpLGZ1bmN0aW9uIHRSKGMsbCxhLGQsaCl7Y29uc3QgZj1oP2MucmVzaWR1YWxDbGFzc2VzOmMucmVzaWR1YWxTdHlsZXM7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBsJiZqZChmLGwpPj0wJiYoYVtkKzFdPXJfKGFb'@;
put 'ZCsxXSkpfShsLGdlLGMsZCxmKSxfPWI1KFQsVyksZj9sLmNsYXNzQmluZGluZ3M9XzpsLnN0eWxlQmluZGluZ3M9X30oaCxmLGwsYSxfLGQpfX1mdW5jdGlvbiBsXyhjLGwsYSxkLGgpe2xldCBmPW51bGw7Y29uc3QgXz1hLmRpcmVjdGl2ZUVuZDtsZXQgVD1hLmRpcmVjdGl2ZVN0eWxpbmdM'@;
put 'YXN0O2ZvcigtMT09PVQ/VD1hLmRpcmVjdGl2ZVN0YXJ0OlQrKztUPF8mJihmPWxbVF0sZD15NShkLGYuaG9zdEF0dHJzLGgpLGYhPT1jKTspVCsrO3JldHVybiBudWxsIT09YyYmKGEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9VCksZH1mdW5jdGlvbiB5NShjLGwsYSl7Y29uc3QgZD1hPzE6Mjts'@;
put 'ZXQgaD0tMTtpZihudWxsIT09bClmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrKyl7Y29uc3QgXz1sW2ZdOyJudW1iZXIiPT10eXBlb2YgXz9oPV86aD09PWQmJihBcnJheS5pc0FycmF5KGMpfHwoYz12b2lkIDA9PT1jP1tdOlsiIixjXSksTWMoYyxfLCEhYXx8bFsrK2ZdKSl9cmV0dXJuIHZv'@;
put 'aWQgMD09PWM/bnVsbDpjfWZ1bmN0aW9uIGNfKGMsbCxhLGQsaCxmLF8sVCl7aWYoISgzJmwudHlwZSkpcmV0dXJuO2NvbnN0IFc9Yy5kYXRhLGllPVdbVCsxXSxnZT1mdW5jdGlvbiBRTChjKXtyZXR1cm4gMT09KDEmYyl9KGllKT9lbChXLGwsYSxoLEowKGllKSxfKTp2b2lkIDA7SjEoZ2Up'@;
put 'fHwoSjEoZil8fGZ1bmN0aW9uIFNNKGMpe3JldHVybiAyPT0oMiZjKX0oaWUpJiYoZj1lbChXLG51bGwsYSxoLFQsXykpLGZ1bmN0aW9uIElaKGMsbCxhLGQsaCl7aWYobCloP2MuYWRkQ2xhc3MoYSxkKTpjLnJlbW92ZUNsYXNzKGEsZCk7ZWxzZXtsZXQgZj0tMT09PWQuaW5kZXhPZigiLSIp'@;
put 'P3ZvaWQgMDpZMi5EYXNoQ2FzZTtudWxsPT1oP2MucmVtb3ZlU3R5bGUoYSxkLGYpOigic3RyaW5nIj09dHlwZW9mIGgmJmguZW5kc1dpdGgoIiFpbXBvcnRhbnQiKSYmKGg9aC5zbGljZSgwLC0xMCksZnw9WTIuSW1wb3J0YW50KSxjLnNldFN0eWxlKGEsZCxoLGYpKX19KGQsXyxZMChldSgp'@;
put 'LGEpLGgsZikpfWZ1bmN0aW9uIGVsKGMsbCxhLGQsaCxmKXtjb25zdCBfPW51bGw9PT1sO2xldCBUO2Zvcig7aD4wOyl7Y29uc3QgVz1jW2hdLGllPUFycmF5LmlzQXJyYXkoVyksZ2U9aWU/V1sxXTpXLHdlPW51bGw9PT1nZTtsZXQgRWU9YVtoKzFdO0VlPT09Wm8mJihFZT13ZT9Tczp2b2lk'@;
put 'IDApO2xldCBaZT13ZT90ZihFZSxkKTpnZT09PWQ/RWU6dm9pZCAwO2lmKGllJiYhSjEoWmUpJiYoWmU9dGYoVyxkKSksSjEoWmUpJiYoVD1aZSxfKSlyZXR1cm4gVDtjb25zdCBvdD1jW2grMV07aD1fP1gwKG90KTpKMChvdCl9aWYobnVsbCE9PWwpe2xldCBXPWY/bC5yZXNpZHVhbENsYXNz'@;
put 'ZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1XJiYoVD10ZihXLGQpKX1yZXR1cm4gVH1mdW5jdGlvbiBKMShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiB1XyhjLGwpe3JldHVybiAwIT0oYy5mbGFncyYobD84OjE2KSl9ZnVuY3Rpb24gTmUoYyxsPSIiKXtjb25zdCBhPVhyKCksZD1U'@;
put 'cygpLGg9YytwcyxmPWQuZmlyc3RDcmVhdGVQYXNzP0czKGQsaCwxLGwsbnVsbCk6ZC5kYXRhW2hdLF89ZF8oZCxhLGYsbCxjKTthW2hdPV8seG0oKSYmZTYoZCxhLF8sZiksTjEoZiwhMSl9bGV0IGRfPShjLGwsYSxkLGgpPT4oVmQoITApLGZ1bmN0aW9uICRtKGMsbCl7cmV0dXJuIGMuY3Jl'@;
put 'YXRlVGV4dChsKX0obFtWb10sZCkpO2Z1bmN0aW9uIG9yKGMpe3JldHVybiBncigiIixjLCIiKSxvcn1mdW5jdGlvbiBncihjLGwsYSl7Y29uc3QgZD1YcigpLGg9SzMoZCxjLGwsYSk7cmV0dXJuIGghPT1abyYmR2QoZCxldSgpLGgpLGdyfWZ1bmN0aW9uIGpjKGMsbCxhLGQsaCl7Y29uc3Qg'@;
put 'Zj1YcigpLF89ZnVuY3Rpb24gWDMoYyxsLGEsZCxoLGYpe2NvbnN0IFQ9Z2YoYyxOZCgpLGEsaCk7cmV0dXJuIFYxKDIpLFQ/bCtrbyhhKStkK2tvKGgpK2Y6Wm99KGYsYyxsLGEsZCxoKTtyZXR1cm4gXyE9PVpvJiZHZChmLGV1KCksXyksamN9ZnVuY3Rpb24gYjAoYyxsLGEsZCxoLGYsXyl7'@;
put 'Y29uc3QgVD1YcigpLFc9ZnVuY3Rpb24gSjMoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBpZT1UNihjLE5kKCksYSxoLF8pO3JldHVybiBWMSgzKSxpZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUOlpvfShULGMsbCxhLGQsaCxmLF8pO3JldHVybiBXIT09Wm8mJkdkKFQsZXUoKSxXKSxiMH1m'@;
put 'dW5jdGlvbiB3NShjLGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9WHIoKSxnZT1mdW5jdGlvbiBRMyhjLGwsYSxkLGgsZixfLFQsVyxpZSl7Y29uc3Qgd2U9bTAoYyxOZCgpLGEsaCxfLFcpO3JldHVybiBWMSg0KSx3ZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUK2tvKFcpK2llOlpvfShp'@;
put 'ZSxjLGwsYSxkLGgsZixfLFQsVyk7cmV0dXJuIGdlIT09Wm8mJkdkKGllLGV1KCksZ2UpLHc1fWZ1bmN0aW9uIEZNKGMsbCxhKXshZnVuY3Rpb24gXzAoYyxsLGEsZCl7Y29uc3QgaD1UcygpLGY9VjEoMik7aC5maXJzdFVwZGF0ZVBhc3MmJlgxKGgsbnVsbCxmLGQpO2NvbnN0IF89WHIoKTtp'@;
put 'ZihhIT09Wm8mJkJjKF8sZixhKSl7Y29uc3QgVD1oLmRhdGFbZXUoKV07aWYodV8oVCxkKSYmIURNKGgsZikpe2xldCBXPWQ/VC5jbGFzc2VzV2l0aG91dEhvc3Q6VC5zdHlsZXNXaXRob3V0SG9zdDtudWxsIT09VyYmKGE9dmMoVyxhfHwiIikpLEp2KGgsVCxfLGEsZCl9ZWxzZSFmdW5jdGlv'@;
put 'biBzYyhjLGwsYSxkLGgsZixfLFQpe2g9PT1abyYmKGg9U3MpO2xldCBXPTAsaWU9MCxnZT0wPGgubGVuZ3RoP2hbMF06bnVsbCx3ZT0wPGYubGVuZ3RoP2ZbMF06bnVsbDtmb3IoO251bGwhPT1nZXx8bnVsbCE9PXdlOyl7Y29uc3QgRWU9VzxoLmxlbmd0aD9oW1crMV06dm9pZCAwLFplPWll'@;
put 'PGYubGVuZ3RoP2ZbaWUrMV06dm9pZCAwO2xldCBldCxvdD1udWxsO2dlPT09d2U/KFcrPTIsaWUrPTIsRWUhPT1aZSYmKG90PXdlLGV0PVplKSk6bnVsbD09PXdlfHxudWxsIT09Z2UmJmdlPHdlPyhXKz0yLG90PWdlKTooaWUrPTIsb3Q9d2UsZXQ9WmUpLG51bGwhPT1vdCYmY18oYyxsLGEs'@;
put 'ZCxvdCxldCxfLFQpLGdlPVc8aC5sZW5ndGg/aFtXXTpudWxsLHdlPWllPGYubGVuZ3RoP2ZbaWVdOm51bGx9fShoLFQsXyxfW1ZvXSxfW2YrMV0sX1tmKzFdPWZ1bmN0aW9uIGhSKGMsbCxhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIFNzO2NvbnN0IGQ9W10saD0kMihhKTtpZihBcnJh'@;
put 'eS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWMoZCxoW2ZdLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgaClmb3IoY29uc3QgZiBpbiBoKWguaGFzT3duUHJvcGVydHkoZikmJmMoZCxmLGhbZl0pO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGgmJmwoZCxoKTtyZXR1'@;
put 'cm4gZH0oYyxsLGEpLGQsZil9fShNYyxLMSxLMyhYcigpLGMsbCxhKSwhMCl9ZnVuY3Rpb24gdDEoYyxsLGEpe2NvbnN0IGQ9WHIoKTtyZXR1cm4gQmMoZCxDMygpLGwpJiZQdShUcygpLFFhKCksZCxjLGwsZFtWb10sYSwhMCksdDF9ZnVuY3Rpb24gUzUoYyxsLGEpe2NvbnN0IGQ9WHIoKTtp'@;
put 'ZihCYyhkLEMzKCksbCkpe2NvbnN0IGY9VHMoKSxfPVFhKCk7UHUoZixfLGQsYyxsLFZTKHc5KGYuZGF0YSksXyxkKSxhLCEwKX1yZXR1cm4gUzV9Y29uc3QgYmY9dm9pZCAwO3ZhciBINj1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGJmXSxbWyJBTSIsIlBNIl0sYmYsYmZdLFtbIlMi'@;
put 'LCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwi'@;
put 'VGgiLCJGciIsIlNhIl1dLGJmLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnki'@;
put 'LCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxiZixbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2Qv'@;
put 'eXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLGJmLCJ7MX0gJ2F0JyB7MH0iLGJmXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJc'@;
put 'eGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIHpNKGMpe2NvbnN0IGE9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksZD1jLnRvU3Ry'@;
put 'aW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09YSYmMD09PWQ/MTo1fV07bGV0ICRkPXt9O2Z1bmN0aW9uIEJsKGMpe2NvbnN0IGw9ZnVuY3Rpb24gRVIoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9X18o'@;
put 'bCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwuc3BsaXQoIi0iKVswXTtpZihhPV9fKGQpLGEpcmV0dXJuIGE7aWYoImVuIj09PWQpcmV0dXJuIEg2O3Rocm93IG5ldyBBcig3MDEsITEpfWZ1bmN0aW9uIF9fKGMpe3JldHVybiBjIGluICRkfHwoJGRbY109T2kubmcmJk9pLm5nLmNvbW1vbiYm'@;
put 'T2kubmcuY29tbW9uLmxvY2FsZXMmJk9pLm5nLmNvbW1vbi5sb2NhbGVzW2NdKSwkZFtjXX12YXIgcW89ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLGNbYy5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0IixjW2MuRGF5UGVyaW9kc1N0'@;
put 'YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNTdGFuZGFsb25lIixjW2MuRGF5c0Zvcm1hdD0zXT0iRGF5c0Zvcm1hdCIsY1tjLkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsY1tjLk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0IixjW2MuTW9udGhzU3RhbmRhbG9uZT02XT0i'@;
put 'TW9udGhzU3RhbmRhbG9uZSIsY1tjLkVyYXM9N109IkVyYXMiLGNbYy5GaXJzdERheU9mV2Vlaz04XT0iRmlyc3REYXlPZldlZWsiLGNbYy5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsY1tjLkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0IixjW2MuVGltZUZvcm1hdD0xMV09IlRp'@;
put 'bWVGb3JtYXQiLGNbYy5EYXRlVGltZUZvcm1hdD0xMl09IkRhdGVUaW1lRm9ybWF0IixjW2MuTnVtYmVyU3ltYm9scz0xM109Ik51bWJlclN5bWJvbHMiLGNbYy5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsY1tjLkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsY1tj'@;
put 'LkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3VycmVuY3lTeW1ib2wiLGNbYy5DdXJyZW5jeU5hbWU9MTddPSJDdXJyZW5jeU5hbWUiLGNbYy5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsY1tjLkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLGNbYy5QbHVyYWxDYXNlPTIwXT0i'@;
put 'UGx1cmFsQ2FzZSIsY1tjLkV4dHJhRGF0YT0yMV09IkV4dHJhRGF0YSIsY30ocW98fHt9KTtjb25zdCBpcD0iZW4tVVMiO2xldCByZT1pcDtmdW5jdGlvbiB6cihjLGwsYSxkLGgpe2lmKGM9Ym8oYyksQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyl6cihjW2Zd'@;
put 'LGwsYSxkLGgpO2Vsc2V7Y29uc3QgZj1UcygpLF89WHIoKTtsZXQgVD1sZihjKT9jOmJvKGMucHJvdmlkZSksVz1RQyhjKTtjb25zdCBpZT1TYygpLGdlPTEwNDg1NzUmaWUucHJvdmlkZXJJbmRleGVzLHdlPWllLmRpcmVjdGl2ZVN0YXJ0LEVlPWllLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYo'@;
put 'bGYoYyl8fCFjLm11bHRpKXtjb25zdCBaZT1uZXcgUjQoVyxoLHR0KSxvdD1jaShULGwsaD9nZTpnZStFZSx3ZSk7LTE9PT1vdD8oVDkoSW0oaWUsXyksZixUKSxMcihmLGMsbC5sZW5ndGgpLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5w'@;
put 'cm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChaZSksXy5wdXNoKFplKSk6KGFbb3RdPVplLF9bb3RdPVplKX1lbHNle2NvbnN0IFplPWNpKFQsbCxnZStFZSx3ZSksb3Q9Y2koVCxsLGdlLGdlK0VlKSx5dD1vdD49MCYmYVtvdF07aWYoaCYmIXl0fHwhaCYmIShaZT49MCYmYVtaZV0p'@;
put 'KXtUOShJbShpZSxfKSxmLFQpO2NvbnN0IGt0PWZ1bmN0aW9uIFVvKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUjQoYyxhLHR0KTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCx4aShmLGgsZCYmIWEpLGZ9KGg/cG86Q28sYS5sZW5ndGgsaCxkLFcp'@;
put 'OyFoJiZ5dCYmKGFbb3RdLnByb3ZpZGVyRmFjdG9yeT1rdCksTHIoZixjLGwubGVuZ3RoLDApLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChrdCksXy5wdXNoKGt0KX1lbHNlIExy'@;
put 'KGYsYyxaZT4tMT9aZTpvdCx4aShhW2g/b3Q6WmVdLFcsIWgmJmQpKTshaCYmZCYmeXQmJmFbb3RdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gTHIoYyxsLGEsZCl7Y29uc3QgaD1sZihsKSxmPWZ1bmN0aW9uIGU1KGMpe3JldHVybiEhYy51c2VDbGFzc30obCk7aWYoaHx8Zil7'@;
put 'Y29uc3QgVz0oZj9ibyhsLnVzZUNsYXNzKTpsKS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoVyl7Y29uc3QgaWU9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IGdlPWllLmluZGV4T2YoYSk7LTE9PT1nZT9pZS5wdXNoKGEsW2QsV10p'@;
put 'OmllW2dlKzFdLnB1c2goZCxXKX1lbHNlIGllLnB1c2goYSxXKX19fWZ1bmN0aW9uIHhpKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBjaShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJl'@;
put 'dHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIENvKGMsbCxhLGQpe3JldHVybiBWaSh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBwbyhjLGwsYSxkKXtjb25zdCBoPXRoaXMubXVsdGk7bGV0IGY7aWYodGhpcy5wcm92aWRlckZhY3Rvcnkpe2NvbnN0IF89dGhpcy5wcm92aWRlckZhY3RvcnkuY29t'@;
put 'cG9uZW50UHJvdmlkZXJzLFQ9UWgoYSxhW0JpXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxkKTtmPVQuc2xpY2UoMCxfKSxWaShoLGYpO2ZvcihsZXQgVz1fO1c8VC5sZW5ndGg7VysrKWYucHVzaChUW1ddKX1lbHNlIGY9W10sVmkoaCxmKTtyZXR1cm4gZn1mdW5jdGlvbiBWaShjLGwp'@;
put 'e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKWwucHVzaCgoMCxjW2FdKSgpKTtyZXR1cm4gbH1mdW5jdGlvbiB0aShjLGw9W10pe3JldHVybiBhPT57YS5wcm92aWRlcnNSZXNvbHZlcj0oZCxoKT0+ZnVuY3Rpb24gYnIoYyxsLGEpe2NvbnN0IGQ9VHMoKTtpZihkLmZpcnN0Q3JlYXRlUGFz'@;
put 'cyl7Y29uc3QgaD1RYyhjKTt6cihhLGQuZGF0YSxkLmJsdWVwcmludCxoLCEwKSx6cihsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWNsYXNzIHpse31jbGFzcyBsY3t9Y2xhc3Mgd2YgZXh0ZW5kcyB6bHtjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlz'@;
put 'Ll9wYXJlbnQ9YSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVtdLHRoaXMuZGVzdHJveUNicz1bXSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgR1ModGhpcyk7Y29uc3QgaD1IYyhsKTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVdkKGguYm9vdHN0cmFwKSx0aGlzLl9y'@;
put 'M0luamVjdG9yPVR2KGwsYSxbe3Byb3ZpZGU6emwsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6SzAsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9LC4uLmRdLHFhKGwpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0'@;
put 'b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KGwpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3IzSW5qZWN0b3I7IWwuZGVzdHJveWVkJiZsLmRlc3Ryb3koKSx0aGlzLmRlc3Ry'@;
put 'b3lDYnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuZGVzdHJveUNicz1udWxsfW9uRGVzdHJveShsKXt0aGlzLmRlc3Ryb3lDYnMucHVzaChsKX19Y2xhc3MgcWQgZXh0ZW5kcyBsY3tjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT1sfWNyZWF0ZShsKXtyZXR1cm4gbmV3IHdm'@;
put 'KHRoaXMubW9kdWxlVHlwZSxsLFtdKX19Y2xhc3MgUTEgZXh0ZW5kcyB6bHtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBHUyh0aGlzKSx0aGlzLmluc3RhbmNlPW51bGw7Y29uc3QgYT1uZXcgY3YoWy4uLmwucHJvdmlkZXJzLHtwcm92'@;
put 'aWRlOnpsLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOkswLHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfV0sbC5wYXJlbnR8fHM2KCksbC5kZWJ1Z05hbWUsbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPWEsbC5ydW5FbnZpcm9ubWVudEluaXRp'@;
put 'YWxpemVycyYmYS5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KGwpfX1mdW5jdGlvbiBBUihjLGwsYT1udWxsKXtyZXR1cm4gbmV3IFExKHtwcm92aWRlcnM6'@;
put 'YyxwYXJlbnQ6bCxkZWJ1Z05hbWU6YSxydW5FbnZpcm9ubWVudEluaXRpYWxpemVyczohMH0pLmluamVjdG9yfWxldCB4bGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFs'@;
put 'b25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPXFDKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/QVIoW2RdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51'@;
put 'bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlz'@;
put 'LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IGMoYXIocTApKX0pLGN9KSgpO2Z1bmN0aW9uIHBZKGMpe2MuZ2V0U3RhbmRhbG9uZUluamVjdG9yPWw9PmwuZ2V0'@;
put 'KHhsZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoYyl9ZnVuY3Rpb24gJHMoYyxsLGEpe2NvbnN0IGQ9TmMoKStjLGg9WHIoKTtyZXR1cm4gaFtkXT09PVpvP3ExKGgsZCxhP2wuY2FsbChhKTpsKCkpOmZ1bmN0aW9uIGY1KGMsbCl7cmV0dXJuIGNbbF19KGgsZCl9ZnVuY3Rpb24g'@;
put 'SjIoYyxsLGEsZCl7cmV0dXJuIHdZKFhyKCksTmMoKSxjLGwsYSxkKX1mdW5jdGlvbiBRMihjLGwsYSxkLGgpe3JldHVybiBDWShYcigpLE5jKCksYyxsLGEsZCxoKX1mdW5jdGlvbiB5XyhjLGwsYSxkLGgsZil7cmV0dXJuIFNZKFhyKCksTmMoKSxjLGwsYSxkLGgsZil9ZnVuY3Rpb24gV00o'@;
put 'YyxsLGEsZCxoLGYsXyl7cmV0dXJuIGZ1bmN0aW9uIE1ZKGMsbCxhLGQsaCxmLF8sVCxXKXtjb25zdCBpZT1sK2E7cmV0dXJuIG0wKGMsaWUsaCxmLF8sVCk/cTEoYyxpZSs0LFc/ZC5jYWxsKFcsaCxmLF8sVCk6ZChoLGYsXyxUKSk6d18oYyxpZSs0KX0oWHIoKSxOYygpLGMsbCxhLGQsaCxm'@;
put 'LF8pfWZ1bmN0aW9uIHdfKGMsbCl7Y29uc3QgYT1jW2xdO3JldHVybiBhPT09Wm8/dm9pZCAwOmF9ZnVuY3Rpb24gd1koYyxsLGEsZCxoLGYpe2NvbnN0IF89bCthO3JldHVybiBCYyhjLF8saCk/cTEoYyxfKzEsZj9kLmNhbGwoZixoKTpkKGgpKTp3XyhjLF8rMSl9ZnVuY3Rpb24gQ1koYyxs'@;
put 'LGEsZCxoLGYsXyl7Y29uc3QgVD1sK2E7cmV0dXJuIGdmKGMsVCxoLGYpP3ExKGMsVCsyLF8/ZC5jYWxsKF8saCxmKTpkKGgsZikpOndfKGMsVCsyKX1mdW5jdGlvbiBTWShjLGwsYSxkLGgsZixfLFQpe2NvbnN0IFc9bCthO3JldHVybiBUNihjLFcsaCxmLF8pP3ExKGMsVyszLFQ/ZC5jYWxs'@;
put 'KFQsaCxmLF8pOmQoaCxmLF8pKTp3XyhjLFcrMyl9ZnVuY3Rpb24gYmEoYyxsKXtjb25zdCBhPVRzKCk7bGV0IGQ7Y29uc3QgaD1jK3BzO2EuZmlyc3RDcmVhdGVQYXNzPyhkPWZ1bmN0aW9uIFZsZShjLGwpe2lmKGwpZm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pe2NvbnN0IGQ9bFth'@;
put 'XTtpZihjPT09ZC5uYW1lKXJldHVybiBkfX0obCxhLnBpcGVSZWdpc3RyeSksYS5kYXRhW2hdPWQsZC5vbkRlc3Ryb3kmJihhLmRlc3Ryb3lIb29rcz8/PVtdKS5wdXNoKGgsZC5vbkRlc3Ryb3kpKTpkPWEuZGF0YVtoXTtjb25zdCBmPWQuZmFjdG9yeXx8KGQuZmFjdG9yeT1IMShkLnR5cGUp'@;
put 'KSxfPWRpKHR0KTt0cnl7Y29uc3QgVD1CMSghMSksVz1mKCk7cmV0dXJuIEIxKFQpLGZ1bmN0aW9uIEdMKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9KGEsWHIoKSxoLFcpLFd9ZmluYWxseXtkaShfKX19ZnVu'@;
put 'Y3Rpb24gVWwoYyxsLGEpe2NvbnN0IGQ9YytwcyxoPVhyKCksZj0kZShoLGQpO3JldHVybiBDXyhoLGQpP3dZKGgsTmMoKSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVuY3Rpb24gTTUoYyxsLGEsZCl7Y29uc3QgaD1jK3BzLGY9WHIoKSxfPSRlKGYsaCk7cmV0dXJuIENf'@;
put 'KGYsaCk/Q1koZixOYygpLGwsXy50cmFuc2Zvcm0sYSxkLF8pOl8udHJhbnNmb3JtKGEsZCl9ZnVuY3Rpb24gRFIoYyxsLGEsZCxoKXtjb25zdCBmPWMrcHMsXz1YcigpLFQ9JGUoXyxmKTtyZXR1cm4gQ18oXyxmKT9TWShfLE5jKCksbCxULnRyYW5zZm9ybSxhLGQsaCxUKTpULnRyYW5zZm9y'@;
put 'bShhLGQsaCl9ZnVuY3Rpb24gQ18oYyxsKXtyZXR1cm4gY1tCaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIElSKGMpe3JldHVybiBsPT57c2V0VGltZW91dChjLHZvaWQgMCxsKX19Y29uc3QgRXI9Y2xhc3MgemxlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLl9f'@;
put 'aXNBc3luYz1sfWVtaXQobCl7c3VwZXIubmV4dChsKX1zdWJzY3JpYmUobCxhLGQpe2xldCBoPWwsZj1hfHwoKCk9Pm51bGwpLF89ZDtpZihsJiYib2JqZWN0Ij09dHlwZW9mIGwpe2NvbnN0IFc9bDtoPVcubmV4dD8uYmluZChXKSxmPVcuZXJyb3I/LmJpbmQoVyksXz1XLmNvbXBsZXRlPy5i'@;
put 'aW5kKFcpfXRoaXMuX19pc0FzeW5jJiYoZj1JUihmKSxoJiYoaD1JUihoKSksXyYmKF89SVIoXykpKTtjb25zdCBUPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpoLGVycm9yOmYsY29tcGxldGU6X30pO3JldHVybiBsIGluc3RhbmNlb2YgZWUmJmwuYWRkKFQpLFR9fTtmdW5jdGlvbiBVbGUoKXty'@;
put 'ZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgZWh7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEVyKX1jb25zdHJ1Y3RvcihsPSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGly'@;
put 'dHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtjb25zdCBhPWVoLnByb3RvdHlwZTthW1N5bWJvbC5pdGVyYXRvcl18fChhW1N5bWJv'@;
put 'bC5pdGVyYXRvcl09VWxlKX1nZXQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbbF19bWFwKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcChsKX1maWx0ZXIobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKGwpfWZpbmQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZChsKX1yZWR1'@;
put 'Y2UobCxhKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UobCxhKX1mb3JFYWNoKGwpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaChsKX1zb21lKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNvbWUobCl9dG9BcnJheSgpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9dG9TdHJpbmcoKXty'@;
put 'ZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfXJlc2V0KGwsYSl7Y29uc3QgZD10aGlzO2QuZGlydHk9ITE7Y29uc3QgaD1mdW5jdGlvbiBwMChjKXtyZXR1cm4gYy5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9u'@;
put 'IHoxKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShmKSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KGQuX3Jlc3VsdHMsaCxhKSkmJihkLl9yZXN1bHRz'@;
put 'PWgsZC5sZW5ndGg9aC5sZW5ndGgsZC5sYXN0PWhbdGhpcy5sZW5ndGgtMV0sZC5maXJzdD1oWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt0aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVt'@;
put 'aXQodGhpcyl9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwfWRlc3Ryb3koKXt0aGlzLmNoYW5nZXMuY29tcGxldGUoKSx0aGlzLmNoYW5nZXMudW5zdWJzY3JpYmUoKX19bGV0IHphPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPVdsZSxjfSkoKTtjb25zdCBabGU9'@;
put 'emEsWWxlPWNsYXNzIGV4dGVuZHMgWmxle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2RlY2xhcmF0aW9uTFZpZXc9bCx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXI9YSx0aGlzLmVsZW1lbnRSZWY9ZH1nZXQgc3NySWQoKXtyZXR1cm4gdGhpcy5fZGVjbGFyYXRpb25UQ29u'@;
put 'dGFpbmVyLnRWaWV3Py5zc3JJZHx8bnVsbH1jcmVhdGVFbWJlZGRlZFZpZXcobCxhKXtyZXR1cm4gdGhpcy5jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxudWxsKX1jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxkKXtjb25zdCBfPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmll'@;
put 'dyxUPWI2KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsXyxsLDQwOTYmdGhpcy5fZGVjbGFyYXRpb25MVmlld1tEb10/NDA5NjoxNixudWxsLF8uZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLGF8fG51bGwsZHx8bnVsbCk7VFtPMl09dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJh'@;
put 'dGlvblRDb250YWluZXIuaW5kZXhdO2NvbnN0IGllPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbaHVdO3JldHVybiBudWxsIT09aWUmJihUW2h1XT1pZS5jcmVhdGVFbWJlZGRlZFZpZXcoXykpLFZ2KF8sVCxsKSxuZXcgZDUoVCl9fTtmdW5jdGlvbiBXbGUoKXtyZXR1cm4gR00oU2MoKSxYcigp'@;
put 'KX1mdW5jdGlvbiBHTShjLGwpe3JldHVybiA0JmMudHlwZT9uZXcgWWxlKGwsYyxZZChjLGwpKTpudWxsfWxldCBhcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5fX05HX0VMRU1FTlRfSURfXz1RbGUsY30pKCk7ZnVuY3Rpb24gUWxlKCl7cmV0dXJuIElZKFNjKCksWHIoKSl9Y29uc3QgZWNl'@;
put 'PWFzLFRZPWNsYXNzIGV4dGVuZHMgZWNle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9bCx0aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9ZH1nZXQgZWxlbWVudCgpe3JldHVybiBZZCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1n'@;
put 'ZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IHgzKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IGw9QTkodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoWHcobCkpe2NvbnN0IGE9TTMobCx0aGlzLl9ob3N0TFZpZXcp'@;
put 'LGQ9QjIobCk7cmV0dXJuIG5ldyB4MyhhW0JpXS5kYXRhW2QrOF0sYSl9cmV0dXJuIG5ldyB4MyhudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChsKXtjb25zdCBhPURZKHRoaXMuX2xDb250YWlu'@;
put 'ZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLXJjfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0IGgsZjsibnVtYmVyIj09dHlwZW9mIGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVj'@;
put 'dG9yKTtjb25zdCBUPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwoVCxoLGZhbHNlKSxUfWNyZWF0ZUNvbXBvbmVudChsLGEsZCxoLGYpe2NvbnN0IF89bCYmIWZ1bmN0aW9uIGVmKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBjfShsKTtsZXQgVDtpZihfKVQ9YTtlbHNle2NvbnN0IGV0PWF8fHt9O1Q9ZXQuaW5kZXgsZD1ldC5pbmplY3RvcixoPWV0LnByb2plY3RhYmxlTm9kZXMsZj1ldC5lbnZpcm9ubWVudEluamVjdG9yfHxldC5uZ01vZHVsZVJlZn1jb25zdCBXPV8/bDpuZXcgaDUoUW8obCkpLGllPWR8fHRo'@;
put 'aXMucGFyZW50SW5qZWN0b3I7aWYoIWYmJm51bGw9PVcubmdNb2R1bGUpe2NvbnN0IHl0PShfP2llOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChxMCxudWxsKTt5dCYmKGY9eXQpfVFvKFcuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IFplPVcuY3JlYXRlKGllLGgsbnVsbCxmKTtyZXR1cm4g'@;
put 'dGhpcy5pbnNlcnRJbXBsKFplLmhvc3RWaWV3LFQsZmFsc2UpLFplfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydEltcGwobCxhLCExKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3LGY9aFtCaV07aWYoZnVuY3Rpb24gVW4oYyl7cmV0dXJuIGljKGNbdWFdKX0oaCkp'@;
put 'e2NvbnN0IFc9dGhpcy5pbmRleE9mKGwpO2lmKC0xIT09Vyl0aGlzLmRldGFjaChXKTtlbHNle2NvbnN0IGllPWhbdWFdLGdlPW5ldyBUWShpZSxpZVt6b10saWVbdWFdKTtnZS5kZXRhY2goZ2UuaW5kZXhPZihsKSl9fWNvbnN0IF89dGhpcy5fYWRqdXN0SW5kZXgoYSksVD10aGlzLl9sQ29u'@;
put 'dGFpbmVyO2lmKGZ1bmN0aW9uIGRhKGMsbCxhLGQpe2NvbnN0IGg9cmMrZCxmPWEubGVuZ3RoO2Q+MCYmKGFbaC0xXVtYYV09bCksZDxmLXJjPyhsW1hhXT1hW2hdLCQwKGEscmMrZCxsKSk6KGEucHVzaChsKSxsW1hhXT1udWxsKSxsW3VhXT1hO2NvbnN0IF89bFtPMl07bnVsbCE9PV8mJmEh'@;
put 'PT1fJiZmdW5jdGlvbiBEWihjLGwpe2NvbnN0IGE9Y1tIMl07bFtKYV0hPT1sW3VhXVt1YV1bSmFdJiYoY1t1bV09ITApLG51bGw9PT1hP2NbSDJdPVtsXTphLnB1c2gobCl9KF8sbCk7Y29uc3QgVD1sW2h1XTtudWxsIT09VCYmVC5pbnNlcnRWaWV3KGMpLGxbRG9dfD0xMjh9KGYsaCxULF8p'@;
put 'LCFkKXtjb25zdCBXPVk5KF8sVCksaWU9aFtWb10sZ2U9SDMoaWUsVFtkMF0pO251bGwhPT1nZSYmZnVuY3Rpb24gakQoYyxsLGEsZCxoLGYpe2RbSGldPWgsZFt6b109bCxHNChjLGQsYSwxLGgsZil9KGYsVFt6b10saWUsaCxnZSxXKX1yZXR1cm4gbC5hdHRhY2hUb1ZpZXdDb250YWluZXJS'@;
put 'ZWYoKSwkMChSUihUKSxfLGwpLGx9bW92ZShsLGEpe3JldHVybiB0aGlzLmluc2VydChsLGEpfWluZGV4T2YobCl7Y29uc3QgYT1EWSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWE/YS5pbmRleE9mKGwpOi0xfXJlbW92ZShsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGws'@;
put 'LTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtkJiYoUG0oUlIodGhpcy5fbENvbnRhaW5lciksYSksS20oZFtCaV0sZCkpfWRldGFjaChsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGwsLTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtyZXR1cm4gZCYmbnVsbCE9UG0oUlIodGhp'@;
put 'cy5fbENvbnRhaW5lciksYSk/bmV3IGQ1KGQpOm51bGx9X2FkanVzdEluZGV4KGwsYT0wKXtyZXR1cm4gbD8/dGhpcy5sZW5ndGgrYX19O2Z1bmN0aW9uIERZKGMpe3JldHVybiBjWzhdfWZ1bmN0aW9uIFJSKGMpe3JldHVybiBjWzhdfHwoY1s4XT1bXSl9ZnVuY3Rpb24gSVkoYyxsKXtsZXQg'@;
put 'YTtjb25zdCBkPWxbYy5pbmRleF07cmV0dXJuIGljKGQpP2E9ZDooYT1QUyhkLGwsbnVsbCxjKSxsW2MuaW5kZXhdPWEsUzYobCxhKSksTFkoYSxsLGMsZCksbmV3IFRZKGEsYyxsKX1sZXQgTFk9ZnVuY3Rpb24gUlkoYyxsLGEsZCl7aWYoY1tkMF0pcmV0dXJuO2xldCBoO2g9OCZhLnR5cGU/'@;
put 'X2EoZCk6ZnVuY3Rpb24gdGNlKGMsbCl7Y29uc3QgYT1jW1ZvXSxkPWEuY3JlYXRlQ29tbWVudCgiIiksaD1IbChsLGMpO3JldHVybiBZMShhLEgzKGEsaCksZCxmdW5jdGlvbiBaRChjLGwpe3JldHVybiBjLm5leHRTaWJsaW5nKGwpfShhLGgpLCExKSxkfShsLGEpLGNbZDBdPWh9O2NsYXNz'@;
put 'IE9Se2NvbnN0cnVjdG9yKGwpe3RoaXMucXVlcnlMaXN0PWwsdGhpcy5tYXRjaGVzPW51bGx9Y2xvbmUoKXtyZXR1cm4gbmV3IE9SKHRoaXMucXVlcnlMaXN0KX1zZXREaXJ0eSgpe3RoaXMucXVlcnlMaXN0LnNldERpcnR5KCl9fWNsYXNzIFBSe2NvbnN0cnVjdG9yKGw9W10pe3RoaXMucXVl'@;
put 'cmllcz1sfWNyZWF0ZUVtYmVkZGVkVmlldyhsKXtjb25zdCBhPWwucXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1udWxsIT09bC5jb250ZW50UXVlcmllcz9sLmNvbnRlbnRRdWVyaWVzWzBdOmEubGVuZ3RoLGg9W107Zm9yKGxldCBmPTA7ZjxkO2YrKyl7Y29uc3QgXz1hLmdldEJ5SW5k'@;
put 'ZXgoZik7aC5wdXNoKHRoaXMucXVlcmllc1tfLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgUFIoaCl9cmV0dXJuIG51bGx9aW5zZXJ0VmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRldGFjaFZpZXcobCl7dGhpcy5kaXJ0eVF1ZXJp'@;
put 'ZXNXaXRoTWF0Y2hlcyhsKX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKW51bGwhPT1OWShsLGEpLm1hdGNoZXMmJnRoaXMucXVlcmllc1thXS5zZXREaXJ0eSgpfX1jbGFzcyBPWXtjb25zdHJ1Y3RvcihsLGEsZD1udWxs'@;
put 'KXt0aGlzLnByZWRpY2F0ZT1sLHRoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZH19Y2xhc3MgRlJ7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9ZWxlbWVudFN0YXJ0KGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLnF1ZXJpZXMubGVuZ3RoO2QrKyl0aGlzLnF1ZXJpZXNbZF0uZWxlbWVu'@;
put 'dFN0YXJ0KGwsYSl9ZWxlbWVudEVuZChsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKXRoaXMucXVlcmllc1thXS5lbGVtZW50RW5kKGwpfWVtYmVkZGVkVFZpZXcobCl7bGV0IGE9bnVsbDtmb3IobGV0IGQ9MDtkPHRoaXMubGVuZ3RoO2QrKyl7Y29uc3QgaD1udWxs'@;
put 'IT09YT9hLmxlbmd0aDowLGY9dGhpcy5nZXRCeUluZGV4KGQpLmVtYmVkZGVkVFZpZXcobCxoKTtmJiYoZi5pbmRleEluRGVjbGFyYXRpb25WaWV3PWQsbnVsbCE9PWE/YS5wdXNoKGYpOmE9W2ZdKX1yZXR1cm4gbnVsbCE9PWE/bmV3IEZSKGEpOm51bGx9dGVtcGxhdGUobCxhKXtmb3IobGV0'@;
put 'IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS50ZW1wbGF0ZShsLGEpfWdldEJ5SW5kZXgobCl7cmV0dXJuIHRoaXMucXVlcmllc1tsXX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sobCl7dGhpcy5xdWVyaWVzLnB1c2go'@;
put 'bCl9fWNsYXNzIEhSe2NvbnN0cnVjdG9yKGwsYT0tMSl7dGhpcy5tZXRhZGF0YT1sLHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0'@;
put 'aW9uTm9kZUluZGV4PWF9ZWxlbWVudFN0YXJ0KGwsYSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGEpJiZ0aGlzLm1hdGNoVE5vZGUobCxhKX1lbGVtZW50RW5kKGwpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09bC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1w'@;
put 'bGF0ZShsLGEpe3RoaXMuZWxlbWVudFN0YXJ0KGwsYSl9ZW1iZWRkZWRUVmlldyhsLGEpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUobCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtbC5pbmRleCxhKSxuZXcgSFIodGhpcy5tZXRhZGF0YSkpOm51bGx9'@;
put 'aXNBcHBseWluZ1RvTm9kZShsKXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2NvbnN0IGE9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IGQ9bC5wYXJlbnQ7Zm9yKDtudWxsIT09ZCYmOCZkLnR5cGUmJmQuaW5kZXghPT1hOylk'@;
put 'PWQucGFyZW50O3JldHVybiBhPT09KG51bGwhPT1kP2QuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKGwsYSl7Y29uc3QgZD10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGQpKWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7'@;
put 'aCsrKXtjb25zdCBmPWRbaF07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGljZShhLGYpKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTG0oYSxsLGYsITEsITEpKX1lbHNlIGQ9PT16YT80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24o'@;
put 'bCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTG0oYSxsLGQsITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Tml8fGg9PT1hc3x8aD09'@;
put 'PXphJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1MbShhLGwsaCwhMSwhMSk7bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRj'@;
put 'aGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBpY2UoYyxsKXtjb25zdCBhPWMubG9jYWxOYW1lcztpZihudWxsIT09YSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrPTIpaWYoYVtkXT09PWwpcmV0dXJuIGFbZCsxXTtyZXR1cm4gbnVsbH1m'@;
put 'dW5jdGlvbiBzY2UoYyxsLGEsZCl7cmV0dXJuLTE9PT1hP2Z1bmN0aW9uIG9jZShjLGwpe3JldHVybiAxMSZjLnR5cGU/WWQoYyxsKTo0JmMudHlwZT9HTShjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIGFjZShjLGwsYSl7cmV0dXJuIGE9PT1OaT9ZZChsLGMpOmE9PT16YT9HTShs'@;
put 'LGMpOmE9PT1hcz9JWShsLGMpOnZvaWQgMH0oYyxsLGQpOlFoKGMsY1tCaV0sYSxsKX1mdW5jdGlvbiBQWShjLGwsYSxkKXtjb25zdCBoPWxbaHVdLnF1ZXJpZXNbZF07aWYobnVsbD09PWgubWF0Y2hlcyl7Y29uc3QgZj1jLmRhdGEsXz1hLm1hdGNoZXMsVD1bXTtmb3IobGV0IFc9MDtXPF8u'@;
put 'bGVuZ3RoO1crPTIpe2NvbnN0IGllPV9bV107VC5wdXNoKGllPDA/bnVsbDpzY2UobCxmW2llXSxfW1crMV0sYS5tZXRhZGF0YS5yZWFkKSl9aC5tYXRjaGVzPVR9cmV0dXJuIGgubWF0Y2hlc31mdW5jdGlvbiBOUihjLGwsYSxkKXtjb25zdCBoPWMucXVlcmllcy5nZXRCeUluZGV4KGEpLGY9'@;
put 'aC5tYXRjaGVzO2lmKG51bGwhPT1mKXtjb25zdCBfPVBZKGMsbCxoLGEpO2ZvcihsZXQgVD0wO1Q8Zi5sZW5ndGg7VCs9Mil7Y29uc3QgVz1mW1RdO2lmKFc+MClkLnB1c2goX1tULzJdKTtlbHNle2NvbnN0IGllPWZbVCsxXSxnZT1sWy1XXTtmb3IobGV0IHdlPXJjO3dlPGdlLmxlbmd0aDt3'@;
put 'ZSsrKXtjb25zdCBFZT1nZVt3ZV07RWVbTzJdPT09RWVbdWFdJiZOUihFZVtCaV0sRWUsaWUsZCl9aWYobnVsbCE9PWdlW0gyXSl7Y29uc3Qgd2U9Z2VbSDJdO2ZvcihsZXQgRWU9MDtFZTx3ZS5sZW5ndGg7RWUrKyl7Y29uc3QgWmU9d2VbRWVdO05SKFplW0JpXSxaZSxpZSxkKX19fX19cmV0'@;
put 'dXJuIGR9ZnVuY3Rpb24gc2koYyl7Y29uc3QgbD1YcigpLGE9VHMoKSxkPUJ3KCk7QzkoZCsxKTtjb25zdCBoPU5ZKGEsZCk7aWYoYy5kaXJ0eSYmZnVuY3Rpb24gTHQoYyl7cmV0dXJuIDQ9PSg0JmNbRG9dKX0obCk9PT0oMj09KDImaC5tZXRhZGF0YS5mbGFncykpKXtpZihudWxsPT09aC5t'@;
put 'YXRjaGVzKWMucmVzZXQoW10pO2Vsc2V7Y29uc3QgZj1oLmNyb3NzZXNOZ1RlbXBsYXRlP05SKGEsbCxkLFtdKTpQWShhLGwsaCxkKTtjLnJlc2V0KGYsZGYpLGMubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUm8oYyxsLGEpe2NvbnN0IGQ9VHMoKTtkLmZp'@;
put 'cnN0Q3JlYXRlUGFzcyYmKEhZKGQsbmV3IE9ZKGMsbCxhKSwtMSksMj09KDImbCkmJihkLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSksRlkoZCxYcigpLGwpfWZ1bmN0aW9uIElvKGMsbCxhLGQpe2NvbnN0IGg9VHMoKTtpZihoLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgZj1TYygpO0hZKGgsbmV3'@;
put 'IE9ZKGwsYSxkKSxmLmluZGV4KSxmdW5jdGlvbiBjY2UoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXN8fChjLmNvbnRlbnRRdWVyaWVzPVtdKTtsIT09KGEubGVuZ3RoP2FbYS5sZW5ndGgtMV06LTEpJiZhLnB1c2goYy5xdWVyaWVzLmxlbmd0aC0xLGwpfShoLGMpLDI9PSgyJmEpJiYo'@;
put 'aC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9RlkoaCxYcigpLGEpfWZ1bmN0aW9uIGFpKCl7cmV0dXJuIGZ1bmN0aW9uIGxjZShjLGwpe3JldHVybiBjW2h1XS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oWHIoKSxCdygpKX1mdW5jdGlvbiBGWShjLGwsYSl7Y29uc3QgZD1uZXcgZWgoND09KDQm'@;
put 'YSkpOyhmdW5jdGlvbiBWSShjLGwsYSxkKXtjb25zdCBoPUhTKGwpO2gucHVzaChhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmTlMoYykucHVzaChkLGgubGVuZ3RoLTEpfSkoYyxsLGQsZC5kZXN0cm95KSxudWxsPT09bFtodV0mJihsW2h1XT1uZXcgUFIpLGxbaHVdLnF1ZXJpZXMucHVzaChuZXcg'@;
put 'T1IoZCkpfWZ1bmN0aW9uIEhZKGMsbCxhKXtudWxsPT09Yy5xdWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBGUiksYy5xdWVyaWVzLnRyYWNrKG5ldyBIUihsLGEpKX1mdW5jdGlvbiBOWShjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiBFYyhjLGwpe3JldHVybiBH'@;
put 'TShjLGwpfWNvbnN0IFpSPW5ldyBNaSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKTtsZXQgWVI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29s'@;
put 'dmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJbml0cz1GaShaUix7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZih2NShm'@;
put 'KSlhLnB1c2goZik7ZWxzZSBpZihwTShmKSl7Y29uc3QgXz1uZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc3Vic2NyaWJlKHtjb21wbGV0ZTpULGVycm9yOld9KX0pO2EucHVzaChfKX19Y29uc3QgZD0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07UHJvbWlzZS5hbGwoYSkudGhlbigo'@;
put 'KT0+e2QoKX0pLmNhdGNoKGg9Pnt0aGlzLnJlamVjdChoKX0pLDA9PT1hLmxlbmd0aCYmZCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3'@;
put 'NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLHRXPSgoKT0+e2NsYXNzIGN7bG9nKGEpe2NvbnNvbGUubG9nKGEpfXdhcm4oYSl7Y29uc29sZS53YXJuKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCk7Y29uc3QgS2Q9bmV3IE1pKCJMb2NhbGVJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PkZpKEtkLG5zLk9wdGlvbmFsfG5zLlNraXBTZWxmKXx8ZnVuY3Rpb24gRGNlKCl7cmV0dXJu'@;
put 'IHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxpcH0oKX0pO2xldCBxTT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy50YXNrSWQ9MCx0aGlzLnBlbmRpbmdUYXNrcz1uZXcgU2V0LHRoaXMuaGFzUGVuZGluZ1Rhc2tzPW5ldyBUZSghMSl9YWRkKCl7dGhp'@;
put 'cy5oYXNQZW5kaW5nVGFza3MubmV4dCghMCk7Y29uc3QgYT10aGlzLnRhc2tJZCsrO3JldHVybiB0aGlzLnBlbmRpbmdUYXNrcy5hZGQoYSksYX1yZW1vdmUoYSl7dGhpcy5wZW5kaW5nVGFza3MuZGVsZXRlKGEpLDA9PT10aGlzLnBlbmRpbmdUYXNrcy5zaXplJiZ0aGlzLmhhc1BlbmRpbmdU'@;
put 'YXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9y'@;
put 'eTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIFJjZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMubmdNb2R1bGVGYWN0b3J5PWwsdGhpcy5jb21wb25lbnRGYWN0b3JpZXM9YX19bGV0IG5XPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJu'@;
put 'IG5ldyBxZChhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9V2QoSGMoYSku'@;
put 'ZGVjbGFyYXRpb25zKS5yZWR1Y2UoKF8sVCk9Pntjb25zdCBXPVFvKFQpO3JldHVybiBXJiZfLnB1c2gobmV3IGg1KFcpKSxffSxbXSk7cmV0dXJuIG5ldyBSY2UoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5j'@;
put 'b21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rv'@;
put 'cnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBvVyguLi5jKXt9Y2xhc3MgTm97Y29uc3RydWN0b3Ioe2VuYWJsZUxvbmdTdGFja1RyYWNlOmw9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjphPSExLHNob3VsZENvYWxlc2NlUnVu'@;
put 'Q2hhbmdlRGV0ZWN0aW9uOmQ9ITF9KXtpZih0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEVyKCExKSx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyKCExKSx0aGlz'@;
put 'Lm9uU3RhYmxlPW5ldyBFcighMSksdGhpcy5vbkVycm9yPW5ldyBFcighMSksdHlwZW9mIFpvbmU+InUiKXRocm93IG5ldyBBcig5MDgsITEpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKTtjb25zdCBoPXRoaXM7aC5fbmVzdGluZz0wLGguX291dGVyPWguX2lubmVyPVpvbmUuY3VycmVudCxa'@;
put 'b25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLGwmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKGguX2lubmVyPWguX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVj'@;
put 'KSksaC5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFkJiZhLGguc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249ZCxoLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxoLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbiBGY2UoKXtjb25z'@;
put 'dCBjPSJmdW5jdGlvbiI9PXR5cGVvZiBPaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7bGV0IGw9T2lbYz8icmVxdWVzdEFuaW1hdGlvbkZyYW1lIjoic2V0VGltZW91dCJdLGE9T2lbYz8iY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiJjbGVhclRpbWVvdXQiXTtpZih0eXBlb2YgWm9uZTwidSImJmwm'@;
put 'JmEpe2NvbnN0IGQ9bFtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZCYmKGw9ZCk7Y29uc3QgaD1hW1pvbmUuX19zeW1ib2xfXygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtoJiYoYT1oKX1yZXR1cm57bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmwsbmF0aXZlQ2FuY2Vs'@;
put 'QW5pbWF0aW9uRnJhbWU6YX19KCkubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGZ1bmN0aW9uIFZjZShjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIE5jZShjKXtjLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkfHwoYy5sYXN0UmVx'@;
put 'dWVzdEFuaW1hdGlvbkZyYW1lSWQ9Yy5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChPaSwoKT0+e2MuZmFrZVRvcEV2ZW50VGFza3x8KGMuZmFrZVRvcEV2ZW50VGFzaz1ab25lLnJvb3Quc2NoZWR1bGVFdmVudFRhc2soImZha2VUb3BFdmVudFRhc2siLCgpPT57Yy5sYXN0UmVx'@;
put 'dWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsR1IoYyksYy5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCxXUihjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSx2b2lkIDAsKCk9Pnt9LCgpPT57fSkpLGMuZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pLEdSKGMpKX0oYyl9O2MuX2lubmVyPWMu'@;
put 'X2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazooYSxkLGgsZixfLFQpPT57dHJ5e3JldHVybiBzVyhjKSxhLmludm9rZVRhc2soaCxmLF8sVCl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0'@;
put 'ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWYudHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmwoKSxhVyhjKX19LG9uSW52b2tlOihhLGQsaCxmLF8sVCxXKT0+e3RyeXtyZXR1cm4gc1coYyksYS5pbnZva2UoaCxmLF8sVCxXKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVz'@;
put 'Y2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmwoKSxhVyhjKX19LG9uSGFzVGFzazooYSxkLGgsZik9PnthLmhhc1Rhc2soaCxmKSxkPT09aCYmKCJtaWNyb1Rhc2siPT1mLmNoYW5nZT8oYy5faGFzUGVuZGluZ01pY3JvdGFza3M9Zi5taWNyb1Rhc2ssR1IoYyksV1IoYykpOiJtYWNyb1Rhc2siPT1m'@;
put 'LmNoYW5nZSYmKGMuaGFzUGVuZGluZ01hY3JvdGFza3M9Zi5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooYSxkLGgsZik9PihhLmhhbmRsZUVycm9yKGgsZiksYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vbkVycm9yLmVtaXQoZikpLCExKX0pfShoKX1zdGF0aWMgaXNJbkFuZ3VsYXJa'@;
put 'b25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighTm8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEFyKDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5n'@;
put 'dWxhclpvbmUoKXtpZihOby5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgQXIoOTA5LCExKX1ydW4obCxhLGQpe3JldHVybiB0aGlzLl9pbm5lci5ydW4obCxhLGQpfXJ1blRhc2sobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbm5lcixfPWYuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2'@;
put 'ZW50OiAiK2gsbCxIY2Usb1csb1cpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKF8sYSxkKX1maW5hbGx5e2YuY2FuY2VsVGFzayhfKX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9v'@;
put 'dXRlci5ydW4obCl9fWNvbnN0IEhjZT17fTtmdW5jdGlvbiBXUihjKXtpZigwPT1jLl9uZXN0aW5nJiYhYy5oYXNQZW5kaW5nTWljcm90YXNrcyYmIWMuaXNTdGFibGUpdHJ5e2MuX25lc3RpbmcrKyxjLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKGMuX25lc3Rpbmct'@;
put 'LSwhYy5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e2MuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBHUihjKXtjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tz'@;
put 'fHwoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1jLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gc1coYyl7Yy5fbmVzdGluZysrLGMuaXNTdGFibGUmJihjLmlzU3RhYmxl'@;
put 'PSExLGMub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBhVyhjKXtjLl9uZXN0aW5nLS0sV1IoYyl9Y2xhc3MgQmNle2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhp'@;
put 'cy5vblVuc3RhYmxlPW5ldyBFcix0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyLHRoaXMub25TdGFibGU9bmV3IEVyLHRoaXMub25FcnJvcj1uZXcgRXJ9cnVuKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bkd1YXJkZWQobCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9cnVuT3V0'@;
put 'c2lkZUFuZ3VsYXIobCl7cmV0dXJuIGwoKX1ydW5UYXNrKGwsYSxkLGgpe3JldHVybiBsLmFwcGx5KGEsZCl9fWNvbnN0IGxXPW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpjV30pO2Z1bmN0aW9uIGNXKCl7Y29uc3QgYz1GaShObyk7bGV0IGw9ITA7cmV0dXJuIGlzKG5l'@;
put 'dyBLZShoPT57bD1jLmlzU3RhYmxlJiYhYy5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWMuaGFzUGVuZGluZ01pY3JvdGFza3MsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dChsKSxoLmNvbXBsZXRlKCl9KX0pLG5ldyBLZShoPT57bGV0IGY7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+'@;
put 'e2Y9Yy5vblN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PnshbCYmIWMuaGFzUGVuZGluZ01hY3JvdGFza3MmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYobD0hMCxoLm5leHQoITApKX0pfSl9KTtjb25zdCBfPWMu'@;
put 'b25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnRJbkFuZ3VsYXJab25lKCksbCYmKGw9ITEsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dCghMSl9KSl9KTtyZXR1cm4oKT0+e2YudW5zdWJzY3JpYmUoKSxfLnVuc3Vic2NyaWJlKCl9fSkucGlwZSgkYSgpKSl9Y29uc3Qg'@;
put 'dVc9bmV3IE1pKCIiKSxLTT1uZXcgTWkoIiIpO2xldCBLUiwkUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnJlZ2lzdHJ5PWQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhp'@;
put 'cy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLEtSfHwoZnVuY3Rpb24gamNlKGMpe0tSPWN9KGgpLGguYWRkVG9XaW5kb3coZCkpLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLGEucnVuKCgpPT57dGhpcy50YXNrVHJhY2tpbmdab25lPXR5cGVvZiBab25lPiJ1'@;
put 'Ij9udWxsOlpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfV93YXRjaEFuZ3VsYXJFdmVudHMoKXt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pv'@;
put 'bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57Tm8uYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHko'@;
put 'KX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5f'@;
put 'cGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10'@;
put 'aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpcXVldWVNaWNyb3Rhc2soKCk9Pntmb3IoOzAhPT10aGlzLl9jYWxsYmFja3MubGVuZ3RoOyl7bGV0IGE9dGhpcy5fY2Fs'@;
put 'bGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChhLnRpbWVvdXRJZCksYS5kb25lQ2IodGhpcy5fZGlkV29yayl9dGhpcy5fZGlkV29yaz0hMX0pO2Vsc2V7bGV0IGE9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihkPT4hZC51cGRh'@;
put 'dGVDYnx8IWQudXBkYXRlQ2IoYSl8fChjbGVhclRpbWVvdXQoZC50aW1lb3V0SWQpLCExKSksdGhpcy5fZGlkV29yaz0hMH19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3Vy'@;
put 'Y2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYmKGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKF89Pl8u'@;
put 'dGltZW91dElkIT09ZiksYSh0aGlzLl9kaWRXb3JrLHRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZihoJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRo'@;
put 'cm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0'@;
put 'aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o'@;
put 'YSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihxUiksYXIoS00pKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxxUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXB9cmVnaXN0ZXJBcHBsaWNhdGlvbihhLGQpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQoYSxkKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o'@;
put 'YSl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZShhKX11bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9Z2V0VGVzdGFiaWxpdHkoYSl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQoYSl8fG51bGx9Z2V0QWxsVGVzdGFiaWxpdGllcygp'@;
put 'e3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9Z2V0QWxsUm9vdEVsZW1lbnRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGEsZD0hMCl7cmV0dXJuIEtSPy5maW5kVGVzdGFi'@;
put 'aWxpdHlJblRyZWUodGhpcyxhLGQpPz9udWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCksc3A9bnVsbDtjb25z'@;
put 'dCBkVz1uZXcgTWkoIkFsbG93TXVsdGlwbGVUb2tlbiIpLFhSPW5ldyBNaSgiUGxhdGZvcm1EZXN0cm95TGlzdGVuZXJzIiksSlI9bmV3IE1pKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO2NsYXNzIGZXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uYW1lPWwsdGhpcy50b2tlbj1hfX1mdW5jdGlv'@;
put 'biBnVyhjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IE1pKGQpO3JldHVybihmPVtdKT0+e2xldCBfPVFSKCk7aWYoIV98fF8uaW5qZWN0b3IuZ2V0KGRXLCExKSl7Y29uc3QgVD1bLi4uYSwuLi5mLHtwcm92aWRlOmgsdXNlVmFsdWU6ITB9XTtjP2MoVCk6ZnVuY3Rp'@;
put 'b24gWmNlKGMpe2lmKHNwJiYhc3AuZ2V0KGRXLCExKSl0aHJvdyBuZXcgQXIoNDAwLCExKTsoZnVuY3Rpb24gaFcoKXshZnVuY3Rpb24gZjkoYyl7THU9Y30oKCk9Pnt0aHJvdyBuZXcgQXIoNjAwLCExKX0pfSkoKSxzcD1jO2NvbnN0IGw9Yy5nZXQodlcpOyhmdW5jdGlvbiBwVyhjKXtjLmdl'@;
put 'dChlUyxudWxsKT8uZm9yRWFjaChhPT5hKCkpfSkoYyl9KGZ1bmN0aW9uIG1XKGM9W10sbCl7cmV0dXJuIEVhLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6dDUsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6WFIsdXNlVmFsdWU6bmV3IFNldChbKCk9PnNwPW51bGxd'@;
put 'KX0sLi4uY119KX0oVCxkKSl9cmV0dXJuIGZ1bmN0aW9uIFdjZShjKXtjb25zdCBsPVFSKCk7aWYoIWwpdGhyb3cgbmV3IEFyKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIFFSKCl7cmV0dXJuIHNwPy5nZXQodlcpPz9udWxsfWxldCB2Vz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y'@;
put 'KGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGEsZCl7Y29uc3QgaD1mdW5jdGlvbiBHY2UoYz0iem9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9u'@;
put 'ZXcgQmNlOiJ6b25lLmpzIj09PWM/bmV3IE5vKGwpOmN9KGQ/Lm5nWm9uZSxmdW5jdGlvbiBfVyhjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENvYWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVu'@;
put 'Q2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigoKT0+e2NvbnN0IGY9ZnVuY3Rpb24gYl8oYyxsLGEp'@;
put 'e3JldHVybiBuZXcgd2YoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBTVyhjKXtyZXR1cm5be3Byb3ZpZGU6Tm8sdXNlRmFjdG9yeTpjfSx7cHJvdmlkZTpRNCxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShxY2Use29wdGlvbmFsOiEwfSk7'@;
put 'cmV0dXJuKCk9PmwuaW5pdGlhbGl6ZSgpfX0se3Byb3ZpZGU6Q1csdXNlRmFjdG9yeTokY2V9LHtwcm92aWRlOmxXLHVzZUZhY3Rvcnk6Y1d9XX0oKCk9PmgpKSxfPWYuaW5qZWN0b3IuZ2V0KGhmLG51bGwpO3JldHVybiBoLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgVD1oLm9uRXJy'@;
put 'b3Iuc3Vic2NyaWJlKHtuZXh0Olc9PntfLmhhbmRsZUVycm9yKFcpfX0pO2Yub25EZXN0cm95KCgpPT57WE0odGhpcy5fbW9kdWxlcyxmKSxULnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uIGJXKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIHY1KGQpP2QuY2F0Y2goaD0+e3Rocm93'@;
put 'IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fShfLGgsKCk9Pntjb25zdCBUPWYuaW5qZWN0b3IuZ2V0KFlSKTtyZXR1cm4gVC5ydW5Jbml0aWFs'@;
put 'aXplcnMoKSxULmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBwZShjKXtmcihjLCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIiksInN0cmluZyI9PXR5cGVvZiBjJiYocmU9Yy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oZi5pbmplY3Rvci5nZXQoS2Qs'@;
put 'aXApfHxpcCksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAoZiksZikpfSl9KX1ib290c3RyYXBNb2R1bGUoYSxkPVtdKXtjb25zdCBoPXlXKHt9LGQpO3JldHVybiBmdW5jdGlvbiB6Y2UoYyxsLGEpe2NvbnN0IGQ9bmV3IHFkKGEpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZCl9KDAsMCxhKS50'@;
put 'aGVuKGY9PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShmLGgpKX1fbW9kdWxlRG9Cb290c3RyYXAoYSl7Y29uc3QgZD1hLmluamVjdG9yLmdldCh4NSk7aWYoYS5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MClhLl9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goaD0+ZC5ib290'@;
put 'c3RyYXAoaCkpO2Vsc2V7aWYoIWEuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgQXIoLTQwMywhMSk7YS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGQpfXRoaXMuX21vZHVsZXMucHVzaChhKX1vbkRlc3Ryb3koYSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpfWdldCBp'@;
put 'bmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBBcig0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGQ9PmQuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZD0+ZCgp'@;
put 'KTtjb25zdCBhPXRoaXMuX2luamVjdG9yLmdldChYUixudWxsKTthJiYoYS5mb3JFYWNoKGQ9PmQoKSksYS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLGN9KSgpO2Z1bmN0aW9uIHlXKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2UoeVcsYyk6ey4uLmMsLi4ubH19'@;
put 'bGV0IHg1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5pbnRlcm5hbEVycm9ySGFu'@;
put 'ZGxlcj1GaShDVyksdGhpcy56b25lSXNTdGFibGU9RmkobFcpLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuaXNTdGFibGU9RmkocU0pLmhhc1BlbmRpbmdUYXNrcy5waXBlKFNhKGE9PmE/V2koITEpOnRoaXMuem9uZUlzU3RhYmxlKSxmdW5jdGlvbiBG'@;
put 'aChjLGw9T2Upe3JldHVybiBjPWM/P0V1LFhlKChhLGQpPT57bGV0IGgsZj0hMDthLnN1YnNjcmliZShVZShkLF89Pntjb25zdCBUPWwoXyk7KGZ8fCFjKGgsVCkpJiYoZj0hMSxoPVQsZC5uZXh0KF8pKX0pKX0pfSgpLCRhKCkpLHRoaXMuX2luamVjdG9yPUZpKHEwKX1nZXQgZGVzdHJveWVk'@;
put 'KCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgY1M7aWYoIXRoaXMuX2luamVjdG9yLmdldChZUikuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBJZChjKXtjb25zdCBs'@;
put 'PVFvKGMpfHxLYShjKXx8UmwoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBBcig0MDUsITEpO2xldCBfO189aD9hOnRoaXMuX2luamVjdG9yLmdldChLMCkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKF8uY29tcG9u'@;
put 'ZW50VHlwZSk7Y29uc3QgVD1mdW5jdGlvbiBVY2UoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfShfKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KHpsKSxpZT1fLmNyZWF0ZShFYS5OVUxMLFtdLGR8fF8uc2VsZWN0b3IsVCksZ2U9aWUubG9jYXRpb24ubmF0aXZlRWxlbWVudCx3ZT1p'@;
put 'ZS5pbmplY3Rvci5nZXQodVcsbnVsbCk7cmV0dXJuIHdlPy5yZWdpc3RlckFwcGxpY2F0aW9uKGdlKSxpZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoaWUuaG9zdFZpZXcpLFhNKHRoaXMuY29tcG9uZW50cyxpZSksd2U/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihnZSl9KSx0aGlz'@;
put 'Ll9sb2FkQ29tcG9uZW50KGllKSxpZX10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEFyKDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgYSBvZiB0aGlzLl92aWV3cylhLmRldGVjdENoYW5nZXMoKX1jYXRjaChhKXt0aGlzLmludGVybmFsRXJy'@;
put 'b3JIYW5kbGVyKGEpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITF9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2NvbnN0IGQ9YTtYTSh0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21B'@;
put 'cHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoSlIsW10pO2QucHVzaCguLi50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLGQuZm9y'@;
put 'RWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhp'@;
put 'cy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5YTSh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0'@;
put 'aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBYTShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNl'@;
put 'KGEsMSl9Y29uc3QgQ1c9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5GaShoZikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7ZnVuY3Rpb24gJGNlKCl7Y29uc3QgYz1GaShObyksbD1GaShoZik7cmV0dXJuIGE9PmMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pmwu'@;
put 'aGFuZGxlRXJyb3IoYSkpfWxldCBxY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuem9uZT1GaShObyksdGhpcy5hcHBsaWNhdGlvblJlZj1GaSh4NSl9aW5pdGlhbGl6ZSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb258fCh0aGlzLl9vbk1pY3JvdGFza0Vt'@;
put 'cHR5U3Vic2NyaXB0aW9uPXRoaXMuem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKX0pfX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24/'@;
put 'LnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2xldCBVYT0oKCk9PntjbGFzcyBje31yZXR1cm4g'@;
put 'Yy5fX05HX0VMRU1FTlRfSURfXz1YY2UsY30pKCk7ZnVuY3Rpb24gWGNlKGMpe3JldHVybiBmdW5jdGlvbiBKY2UoYyxsLGEpe2lmKFAxKGMpJiYhYSl7Y29uc3QgZD1tdChjLmluZGV4LGwpO3JldHVybiBuZXcgZDUoZCxkKX1yZXR1cm4gNDcmYy50eXBlP25ldyBkNShsW0phXSxsKTpudWxs'@;
put 'fShTYygpLFhyKCksMTY9PSgxNiZjKSl9Y2xhc3Mga1d7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMobCl7cmV0dXJuIGs2KGwpfWNyZWF0ZShsKXtyZXR1cm4gbmV3IGl1ZShsKX19Y29uc3QgcnVlPShjLGwpPT5sO2NsYXNzIGl1ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxlbmd0aD0wLHRoaXMu'@;
put 'X2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5f'@;
put 'bW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49bHx8'@;
put 'cnVlfWZvckVhY2hJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2l0SGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoT3BlcmF0aW9uKGwpe2xldCBhPXRoaXMuX2l0SGVhZCxkPXRoaXMuX3JlbW92YWxzSGVhZCxoPTAsZj1udWxsO2Zvcig7YXx8ZDspe2NvbnN0IF89IWR8fGEm'@;
put 'JmEuY3VycmVudEluZGV4PFRXKGQsaCxmKT9hOmQsVD1UVyhfLGgsZiksVz1fLmN1cnJlbnRJbmRleDtpZihfPT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxsPT1fLnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IGllPVQtaCxnZT1X'@;
put 'LWg7aWYoaWUhPWdlKXtmb3IobGV0IEVlPTA7RWU8aWU7RWUrKyl7Y29uc3QgWmU9RWU8Zi5sZW5ndGg/ZltFZV06ZltFZV09MCxvdD1aZStFZTtnZTw9b3QmJm90PGllJiYoZltFZV09WmUrMSl9ZltfLnByZXZpb3VzSW5kZXhdPWdlLWllfX1UIT09VyYmbChfLFQsVyl9fWZvckVhY2hQcmV2'@;
put 'aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UHJldmlvdXMpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNo'@;
put 'TW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX21vdmVzSGVhZDtudWxsIT09YTthPWEuX25leHRNb3ZlZClsKGEpfWZvckVhY2hSZW1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UmVtb3ZlZClsKGEpfWZvckVhY2hJZGVu'@;
put 'dGl0eUNoYW5nZShsKXtsZXQgYTtmb3IoYT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dElkZW50aXR5Q2hhbmdlKWwoYSl9ZGlmZihsKXtpZihudWxsPT1sJiYobD1bXSksIWs2KGwpKXRocm93IG5ldyBBcig5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKGwp'@;
put 'P3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgaCxmLF8sYT10aGlzLl9pdEhlYWQsZD0hMTtpZihBcnJheS5pc0FycmF5KGwpKXt0aGlzLmxlbmd0aD1sLmxlbmd0aDtmb3IobGV0IFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylmPWxbVF0sXz10aGlzLl90'@;
put 'cmFja0J5Rm4oVCxmKSxudWxsIT09YSYmT2JqZWN0LmlzKGEudHJhY2tCeUlkLF8pPyhkJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLGYsXyxUKSksT2JqZWN0LmlzKGEuaXRlbSxmKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYSxmKSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxmLF8s'@;
put 'VCksZD0hMCksYT1hLl9uZXh0fWVsc2UgaD0wLGZ1bmN0aW9uIEFMKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsKGNbYV0pO2Vsc2V7Y29uc3QgYT1jW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgZDtmb3IoOyEoZD1hLm5leHQoKSkuZG9uZTsp'@;
put 'bChkLnZhbHVlKX19KGwsVD0+e189dGhpcy5fdHJhY2tCeUZuKGgsVCksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCxfKT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxULF8saCkpLE9iamVjdC5pcyhhLml0ZW0sVCl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEs'@;
put 'VCkpOihhPXRoaXMuX21pc21hdGNoKGEsVCxfLGgpLGQ9ITApLGE9YS5fbmV4dCxoKyt9KSx0aGlzLmxlbmd0aD1oO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLmNvbGxlY3Rpb249bCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9u'@;
put 'c0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKGw9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251'@;
put 'bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWls'@;
put 'PW51bGwsbD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0TW92ZWQpbC5wcmV2aW91c0luZGV4PWwuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5f'@;
put 'aWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaChsLGEsZCxoKXtsZXQgZjtyZXR1cm4gbnVsbD09PWw/Zj10aGlzLl9pdFRhaWw6KGY9bC5fcHJldix0aGlzLl9yZW1vdmUobCkpLG51bGwhPT0obD1udWxsPT09dGhpcy5fdW5saW5r'@;
put 'ZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlzLl9yZWluc2VydEFmdGVyKGwsZixoKSk6bnVsbCE9PShsPW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRz'@;
put 'P251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoZCxoKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fbW92ZUFmdGVyKGwsZixoKSk6bD10aGlzLl9hZGRBZnRlcihuZXcgb3VlKGEsZCksZixoKSxsfV92ZXJpZnlSZWluc2VydGlv'@;
put 'bihsLGEsZCxoKXtsZXQgZj1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpO3JldHVybiBudWxsIT09Zj9sPXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoZixsLl9wcmV2LGgpOmwuY3VycmVudEluZGV4IT1oJiYobC5jdXJyZW50'@;
put 'SW5kZXg9aCx0aGlzLl9hZGRUb01vdmVzKGwsaCkpLGx9X3RydW5jYXRlKGwpe2Zvcig7bnVsbCE9PWw7KXtjb25zdCBhPWwuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpLGw9YX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJl'@;
put 'Y29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMu'@;
put 'X2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5n'@;
put 'ZT1udWxsKX1fcmVpbnNlcnRBZnRlcihsLGEsZCl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBoPWwuX3ByZXZSZW1vdmVkLGY9bC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1oP3RoaXMuX3JlbW92YWxzSGVh'@;
put 'ZD1mOmguX25leHRSZW1vdmVkPWYsbnVsbD09PWY/dGhpcy5fcmVtb3ZhbHNUYWlsPWg6Zi5fcHJldlJlbW92ZWQ9aCx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X21vdmVBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX3VubGluayhsKSx0aGlzLl9p'@;
put 'bnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X2FkZEFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD1sOnRoaXMu'@;
put 'X2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1sLGx9X2luc2VydEFmdGVyKGwsYSxkKXtjb25zdCBoPW51bGw9PT1hP3RoaXMuX2l0SGVhZDphLl9uZXh0O3JldHVybiBsLl9uZXh0PWgsbC5fcHJldj1hLG51bGw9PT1oP3RoaXMuX2l0VGFpbD1sOmguX3ByZXY9bCxudWxsPT09YT90aGlzLl9p'@;
put 'dEhlYWQ9bDphLl9uZXh0PWwsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBBVyksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQobCksbC5jdXJyZW50SW5kZXg9ZCxsfV9yZW1vdmUobCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5f'@;
put 'dW5saW5rKGwpKX1fdW5saW5rKGwpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBhPWwuX3ByZXYsZD1sLl9uZXh0O3JldHVybiBudWxsPT09YT90aGlzLl9pdEhlYWQ9ZDphLl9uZXh0PWQsbnVsbD09PWQ/dGhpcy5faXRU'@;
put 'YWlsPWE6ZC5fcHJldj1hLGx9X2FkZFRvTW92ZXMobCxhKXtyZXR1cm4gbC5wcmV2aW91c0luZGV4PT09YXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD1sOnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPWwpLGx9X2FkZFRvUmVtb3Zh'@;
put 'bHMobCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IEFXKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudEluZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNU'@;
put 'YWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVu'@;
put 'dGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9'@;
put 'bCxsfX1jbGFzcyBvdWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0'@;
put 'aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3Mgc3Vl'@;
put 'e2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxsLl9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10'@;
put 'aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0'@;
put 'dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1hOmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgQVd7Y29uc3RydWN0'@;
put 'b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXB1dChsKXtjb25zdCBhPWwudHJhY2tCeUlkO2xldCBkPXRoaXMubWFwLmdldChhKTtkfHwoZD1uZXcgc3VlLHRoaXMubWFwLnNldChhLGQpKSxkLmFkZChsKX1nZXQobCxhKXtjb25zdCBoPXRoaXMubWFwLmdldChsKTtyZXR1cm4gaD9oLmdldChsLGEp'@;
put 'Om51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChhKS5yZW1vdmUobCkmJnRoaXMubWFwLmRlbGV0ZShhKSxsfWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19ZnVuY3Rpb24g'@;
put 'VFcoYyxsLGEpe2NvbnN0IGQ9Yy5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1kKXJldHVybiBkO2xldCBoPTA7cmV0dXJuIGEmJmQ8YS5sZW5ndGgmJihoPWFbZF0pLGQrbCtofWNsYXNzIERXe2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxBNihs'@;
put 'KX1jcmVhdGUoKXtyZXR1cm4gbmV3IGF1ZX19Y2xhc3MgYXVle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGws'@;
put 'dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNI'@;
put 'ZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3By'@;
put 'ZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlz'@;
put 'Ll9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8'@;
put 'fEE2KGwpKSl0aHJvdyBuZXcgQXIoOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2Zv'@;
put 'ckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBl'@;
put 'bmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShk'@;
put 'LmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1u'@;
put 'dWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtjb25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQm'@;
put 'JihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9'@;
put 'YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsXz1oLl9uZXh0'@;
put 'O3JldHVybiBmJiYoZi5fbmV4dD1fKSxfJiYoXy5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgbHVlKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChsLGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQo'@;
put 'KXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7'@;
put 'bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1u'@;
put 'dWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxsLmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJy'@;
put 'ZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRk'@;
put 'aXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wg'@;
put 'aW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgbHVle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlv'@;
put 'dXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVuY3Rpb24gSVcoKXtyZXR1cm4gbmV3IHo2KFtuZXcga1ddKX1sZXQgejY9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rv'@;
put 'cnk6ZD0+Yy5jcmVhdGUoYSxkfHxJVygpKSxkZXBzOltbYyxuZXcgZzAsbmV3IHoyXV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKG51bGwhPWQpcmV0dXJuIGQ7dGhyb3cgbmV3IEFyKDkwMSwhMSl9fXJldHVybiBjLlx1MDI3NXBy'@;
put 'b3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpJV30pLGN9KSgpO2Z1bmN0aW9uIExXKCl7cmV0dXJuIG5ldyBNXyhbbmV3IERXXSl9bGV0IE1fPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5mYWN0b3JpZXM9YX1zdGF0aWMgY3JlYXRlKGEsZCl7aWYo'@;
put 'ZCl7Y29uc3QgaD1kLmZhY3Rvcmllcy5zbGljZSgpO2E9YS5jb25jYXQoaCl9cmV0dXJuIG5ldyBjKGEpfXN0YXRpYyBleHRlbmQoYSl7cmV0dXJue3Byb3ZpZGU6Yyx1c2VGYWN0b3J5OmQ9PmMuY3JlYXRlKGEsZHx8TFcoKSksZGVwczpbW2MsbmV3IGcwLG5ldyB6Ml1dfX1maW5kKGEpe2Nv'@;
put 'bnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBBcig5MDEsITEpfX1yZXR1cm4gYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6TFd9KSxjfSkoKTtjb25zdCBkdWU9Z1cobnVs'@;
put 'bCwiY29yZSIsW10pO2xldCBodWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKHg1KSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCk7ZnVuY3Rp'@;
put 'b24gVTYoYyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYz9jOm51bGwhPWMmJiJmYWxzZSIhPT1jfWxldCBzTz1udWxsO2Z1bmN0aW9uIGFwKCl7cmV0dXJuIHNPfWNsYXNzIE11ZXt9Y29uc3QgTHM9bmV3IE1pKCJEb2N1bWVudFRva2VuIik7bGV0IGFPPSgoKT0+e2NsYXNzIGN7aGlzdG9y'@;
put 'eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShFdWUpfSxwcm92aWRlZEluOiJw'@;
put 'bGF0Zm9ybSJ9KSxjfSkoKTtjb25zdCB4dWU9bmV3IE1pKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpO2xldCBFdWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFPe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9RmkoTHMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlz'@;
put 'Ll9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJhc2VIcmVmRnJvbURPTSgpe3JldHVybiBhcCgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVu'@;
put 'dExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJo'@;
put 'YXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1'@;
put 'cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxo'@;
put 'KX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxjfSkoKTtmdW5jdGlvbiBsTyhjLGwpe2lmKDA9PWMubGVuZ3RoKXJldHVybiBsO2lmKDA9PWwubGVuZ3Ro'@;
put 'KXJldHVybiBjO2xldCBhPTA7cmV0dXJuIGMuZW5kc1dpdGgoIi8iKSYmYSsrLGwuc3RhcnRzV2l0aCgiLyIpJiZhKyssMj09YT9jK2wuc3Vic3RyaW5nKDEpOjE9PWE/YytsOmMrIi8iK2x9ZnVuY3Rpb24gVlcoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMu'@;
put 'bGVuZ3RoO3JldHVybiBjLnNsaWNlKDAsYS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gQ2YoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgazU9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50'@;
put 'ZWQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIEZpKGpXKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBCVz1uZXcgTWkoImFwcEJhc2VI'@;
put 'cmVmIik7bGV0IGpXPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhy'@;
put 'ZWZGcm9tRE9NKCk/P0ZpKExzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVz'@;
put 'aCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gbE8odGhpcy5fYmFzZUhyZWYsYSl9'@;
put 'cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrQ2YodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qg'@;
put 'Xz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsXyl9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IF89dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtDZihmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBs'@;
put 'YWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3Ro'@;
put 'aXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihCVyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi'@;
put 'fSksY30pKCksa3VlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09u'@;
put 'RGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5f'@;
put 'cGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7bGV0IGQ9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1kJiYoZD0iIyIpLGQubGVuZ3RoPjA/ZC5zdWJzdHJpbmcoMSk6'@;
put 'ZH1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7Y29uc3QgZD1sTyh0aGlzLl9iYXNlSHJlZixhKTtyZXR1cm4gZC5sZW5ndGg+MD8iIyIrZDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZv'@;
put 'cm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLF8pfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRo'@;
put 'bmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2Nh'@;
put 'dGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihCVyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0'@;
put 'b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9zdWJqZWN0PW5ldyBFcix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1hO2Nv'@;
put 'bnN0IGQ9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VQYXRoPWZ1bmN0aW9uIER1ZShjKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChjKSl7Y29uc3RbLGFdPWMuc3BsaXQoL1wvXC9bXlwvXSsvKTtyZXR1cm4gYX1yZXR1cm4gY30o'@;
put 'VlcoelcoZCkpKSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUoaD0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEwLHN0YXRlOmguc3RhdGUsdHlwZTpoLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9u'@;
put 'Py51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGE9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgoYSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1'@;
put 'cnJlbnRQYXRoRXF1YWxUbyhhLGQ9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoYStDZihkKSl9bm9ybWFsaXplKGEpe3JldHVybiBjLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbiBUdWUoYyxsKXtpZighY3x8IWwuc3RhcnRzV2l0aChjKSlyZXR1cm4gbDtjb25z'@;
put 'dCBhPWwuc3Vic3RyaW5nKGMubGVuZ3RoKTtyZXR1cm4iIj09PWF8fFsiLyIsIjsiLCI/IiwiIyJdLmluY2x1ZGVzKGFbMF0pP2E6bH0odGhpcy5fYmFzZVBhdGgselcoYSkpKX1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7cmV0dXJuIGEmJiIvIiE9PWFbMF0mJihhPSIvIithKSx0aGlzLl9sb2Nh'@;
put 'dGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChhKX1nbyhhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnB1c2hTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfXJl'@;
put 'cGxhY2VTdGF0ZShhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfWZvcndhcmQoKXt0aGlzLl9sb2NhdGlvblN0'@;
put 'cmF0ZWd5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5oaXN0b3J5R28/LihhKX1vblVybENoYW5nZShhKXtyZXR1cm4gdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnB1c2goYSksdGhp'@;
put 'cy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9ufHwodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZC51cmwsZC5zdGF0ZSl9KSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRl'@;
put 'eE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3Rp'@;
put 'ZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9fXJldHVybiBjLm5vcm1h'@;
put 'bGl6ZVF1ZXJ5UGFyYW1zPUNmLGMuam9pbldpdGhTbGFzaD1sTyxjLnN0cmlwVHJhaWxpbmdTbGFzaD1WVyxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGs1KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uIEF1ZSgpe3JldHVybiBuZXcgSmQoYXIoazUpKX0oKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiB6VyhjKXtyZXR1cm4gYy5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIGtjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRm9ybWF0PTBdPSJGb3JtYXQi'@;
put 'LGNbYy5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixjfShrY3x8e30pLG5hPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmFycm93PTBdPSJOYXJyb3ciLGNbYy5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLGNbYy5XaWRlPTJdPSJXaWRlIixjW2MuU2hvcnQ9M109IlNob3J0IixjfShu'@;
put 'YXx8e30pLHkwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2hvcnQ9MF09IlNob3J0IixjW2MuTWVkaXVtPTFdPSJNZWRpdW0iLGNbYy5Mb25nPTJdPSJMb25nIixjW2MuRnVsbD0zXT0iRnVsbCIsY30oeTB8fHt9KTtmdW5jdGlvbiBjTyhjLGwsYSl7Y29uc3QgZD1CbChjKSxmPXRkKFtkW3Fv'@;
put 'LkRheXNGb3JtYXRdLGRbcW8uRGF5c1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gdGQoZixhKX1mdW5jdGlvbiB1TyhjLGwsYSl7Y29uc3QgZD1CbChjKSxmPXRkKFtkW3FvLk1vbnRoc0Zvcm1hdF0sZFtxby5Nb250aHNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIHRkKGYsYSl9ZnVuY3Rpb24gdGQo'@;
put 'YyxsKXtmb3IobGV0IGE9bDthPi0xO2EtLSlpZih0eXBlb2YgY1thXTwidSIpcmV0dXJuIGNbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIFhXKGMsbCl7bD1lbmNvZGVVUklDb21wb25lbnQobCk7Zm9yKGNvbnN0'@;
put 'IGEgb2YgYy5zcGxpdCgiOyIpKXtjb25zdCBkPWEuaW5kZXhPZigiPSIpLFtoLGZdPS0xPT1kP1thLCIiXTpbYS5zbGljZSgwLGQpLGEuc2xpY2UoZCsxKV07aWYoaC50cmltKCk9PT1sKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZil9cmV0dXJuIG51bGx9Y29uc3QgeU89L1xzKy8sSlc9'@;
put 'W107bGV0IHVjPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5faXRlcmFibGVEaWZmZXJzPWEsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWQsdGhpcy5fbmdFbD1oLHRoaXMuX3JlbmRlcmVyPWYsdGhpcy5pbml0aWFsQ2xhc3Nlcz1KVyx0aGlzLnN0YXRlTWFwPW5ldyBN'@;
put 'YXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRyaW0oKS5zcGxpdCh5Tyk6Sld9c2V0IG5nQ2xhc3MoYSl7dGhpcy5yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGE/YS50cmltKCkuc3BsaXQoeU8pOmF9bmdEb0NoZWNrKCl7Zm9yKGNvbnN0IGQgb2YgdGhp'@;
put 'cy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtjb25zdCBhPXRoaXMucmF3Q2xhc3M7aWYoQXJyYXkuaXNBcnJheShhKXx8YSBpbnN0YW5jZW9mIFNldClmb3IoY29uc3QgZCBvZiBhKXRoaXMuX3VwZGF0ZVN0YXRlKGQsITApO2Vsc2UgaWYobnVsbCE9YSlmb3IoY29u'@;
put 'c3QgZCBvZiBPYmplY3Qua2V5cyhhKSl0aGlzLl91cGRhdGVTdGF0ZShkLCEhYVtkXSk7dGhpcy5fYXBwbHlTdGF0ZURpZmYoKX1fdXBkYXRlU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuc3RhdGVNYXAuZ2V0KGEpO3ZvaWQgMCE9PWg/KGguZW5hYmxlZCE9PWQmJihoLmNoYW5nZWQ9ITAsaC5l'@;
put 'bmFibGVkPWQpLGgudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQoYSx7ZW5hYmxlZDpkLGNoYW5nZWQ6ITAsdG91Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2Zvcihjb25zdCBhIG9mIHRoaXMuc3RhdGVNYXApe2NvbnN0IGQ9YVswXSxoPWFbMV07aC5jaGFuZ2VkPyh0aGlzLl90'@;
put 'b2dnbGVDbGFzcyhkLGguZW5hYmxlZCksaC5jaGFuZ2VkPSExKTpoLnRvdWNoZWR8fChoLmVuYWJsZWQmJnRoaXMuX3RvZ2dsZUNsYXNzKGQsITEpLHRoaXMuc3RhdGVNYXAuZGVsZXRlKGQpKSxoLnRvdWNoZWQ9ITF9fV90b2dnbGVDbGFzcyhhLGQpeyhhPWEudHJpbSgpKS5sZW5ndGg+MCYm'@;
put 'YS5zcGxpdCh5TykuZm9yRWFjaChoPT57ZD90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpKHR0KHo2KSx0dChNXyksdHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZToh'@;
put 'MH0pLGN9KSgpO2NsYXNzIGcwZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10'@;
put 'aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgeHM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JPZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnko'@;
put 'YSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdG'@;
put 'b3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZl'@;
put 'ciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdl'@;
put 'cyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsXyk9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGcwZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09'@;
put 'PV8/dm9pZCAwOl8pO2Vsc2UgaWYobnVsbD09XylkLnJlbW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgVD1kLmdldChmKTtkLm1vdmUoVCxfKSxlRyhULGgpfX0pO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKyl7Y29uc3QgVD1kLmdldChoKS5j'@;
put 'b250ZXh0O1QuaW5kZXg9aCxULmNvdW50PWYsVC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9YS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoaD0+e2VHKGQuZ2V0KGguY3VycmVudEluZGV4KSxoKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dCh6YSksdHQoejYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJu'@;
put 'Z0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksY30pKCk7ZnVuY3Rpb24gZUcoYyxsKXtjLmNvbnRleHQuJGltcGxpY2l0PWwuaXRlbX1sZXQgWmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3ZpZXdDb250YWlu'@;
put 'ZXI9YSx0aGlzLl9jb250ZXh0PW5ldyBtMGUsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1kfXNldCBuZ0lmKGEpe3Ro'@;
put 'aXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj1hLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4oYSl7dEcoIm5nSWZUaGVuIixhKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQg'@;
put 'bmdJZkVsc2UoYSl7dEcoIm5nSWZFbHNlIixhKSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9YSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0Nv'@;
put 'bnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5f'@;
put 'ZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVS'@;
put 'ZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoemEpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'IiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpO2NsYXNzIG0wZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51bGx9fWZ1bmN0aW9u'@;
put 'IHRHKGMsbCl7aWYobCYmIWwuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtjfSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtxYShsKX0nLmApfWNsYXNzIHdPe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1sLHRoaXMu'@;
put 'X3RlbXBsYXRlUmVmPWEsdGhpcy5fY3JlYXRlZD0hMX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVy'@;
put 'UmVmLmNsZWFyKCl9ZW5mb3JjZVN0YXRlKGwpe2wmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IWwmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX1sZXQgbmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWaWV3cz1bXSx0aGlzLl9kZWZhdWx0'@;
put 'VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChhKXt0aGlzLl9uZ1N3aXRjaD1hLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2Fk'@;
put 'ZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoYSl7dGhpcy5fZGVmYXVsdFZpZXdzLnB1c2goYSl9X21hdGNoQ2FzZShhKXtjb25zdCBkPWE9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNo'@;
put 'ZWR8fGQsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0'@;
put 'Q2FzZXNNYXRjaGVkPSExKSxkfV91cGRhdGVEZWZhdWx0Q2FzZXMoYSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZhIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWQuZW5mb3JjZVN0YXRl'@;
put 'KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLHRoPSgo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgd08oYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KHphKSx0dChuZCw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNl'@;
put 'In0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLHJHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9kaWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoYSl7dGhpcy5f'@;
put 'bmdTdHlsZT1hLCF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7YSYmdGhpcy5fYXBwbHlDaGFuZ2Vz'@;
put 'KGEpfX1fc2V0U3R5bGUoYSxkKXtjb25zdFtoLGZdPWEuc3BsaXQoIi4iKSxfPS0xPT09aC5pbmRleE9mKCItIik/dm9pZCAwOlkyLkRhc2hDYXNlO251bGwhPWQ/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsZj9gJHtkfSR7Zn1gOmQsXyk6dGhp'@;
put 'cy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsXyl9X2FwcGx5Q2hhbmdlcyhhKXthLmZvckVhY2hSZW1vdmVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxudWxsKSksYS5mb3JFYWNoQWRkZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5'@;
put 'LGQuY3VycmVudFZhbHVlKSksYS5mb3JFYWNoQ2hhbmdlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KE1fKSx0dChGbykpfSxjLlx1MDI3NWRpcj1D'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxjfSkoKSxyZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9YSx0aGlzLl92aWV3UmVmPW51bGws'@;
put 'dGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoYSl7aWYoYS5uZ1RlbXBsYXRlT3V0bGV0fHxhLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7Y29u'@;
put 'c3QgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmQucmVtb3ZlKGQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KXtjb25zdHtuZ1RlbXBsYXRlT3V0bGV0OmgsbmdUZW1wbGF0ZU91dGxldENvbnRleHQ6ZixuZ1RlbXBsYXRl'@;
put 'T3V0bGV0SW5qZWN0b3I6X309dGhpczt0aGlzLl92aWV3UmVmPWQuY3JlYXRlRW1iZWRkZWRWaWV3KGgsZixfP3tpbmplY3RvcjpffTp2b2lkIDApfWVsc2UgdGhpcy5fdmlld1JlZj1udWxsfWVsc2UgdGhpcy5fdmlld1JlZiYmYS5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmdGhpcy5uZ1Rl'@;
put 'bXBsYXRlT3V0bGV0Q29udGV4dCYmKHRoaXMuX3ZpZXdSZWYuY29udGV4dD10aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6'@;
put 'W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJdXSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbmdUZW1wbGF0ZU91dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0'@;
put 'SW5qZWN0b3IifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyBiMGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIEtoKCgpPT5sLnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmQ9Pnt0aHJvdyBkfX0pKX1kaXNwb3NlKGwpe0toKCgpPT5sLnVuc3Vic2Ny'@;
put 'aWJlKCkpfX1jbGFzcyB5MGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIGwudGhlbihhLGQ9Pnt0aHJvdyBkfSl9ZGlzcG9zZShsKXt9fWNvbnN0IHcwZT1uZXcgeTBlLEMwZT1uZXcgYjBlO2xldCB1eD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xhdGVzdFZh'@;
put 'bHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtyZXR1cm4g'@;
put 'dGhpcy5fb2JqP2EhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybShhKSk6dGhpcy5fbGF0ZXN0VmFsdWU6KGEmJnRoaXMuX3N1YnNjcmliZShhKSx0aGlzLl9sYXRlc3RWYWx1ZSl9X3N1YnNjcmliZShhKXt0aGlzLl9vYmo9YSx0aGlzLl9zdHJhdGVneT10aGlz'@;
put 'Ll9zZWxlY3RTdHJhdGVneShhKSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKGEsZD0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKSl9X3NlbGVjdFN0cmF0ZWd5KGEpe2lmKHY1KGEpKXJldHVybiB3MGU7aWYocE0oYSkpcmV0dXJuIEMw'@;
put 'ZTt0aHJvdyBmdW5jdGlvbiBlMihjLGwpe3JldHVybiBuZXcgQXIoMjEwMCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVs'@;
put 'bH1fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKXthPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZCx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSwxNikpfSxjLlx1MDI3NXBpcGU9TmEo'@;
put 'e25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCksaUc9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1cGlwZT1OYSh7bmFtZToianNvbiIsdHlwZTpjLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLGN9KSgpLGR4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kaWZmZXJzPWEsdGhpcy5rZXlWYWx1ZXM9W10sdGhpcy5jb21wYXJlRm49b0d9dHJhbnNmb3JtKGEsZD1vRyl7'@;
put 'aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcnx8KHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKTtjb25zdCBoPXRoaXMuZGlmZmVyLmRpZmYoYSksZj1kIT09dGhpcy5jb21wYXJlRm47'@;
put 'cmV0dXJuIGgmJih0aGlzLmtleVZhbHVlcz1bXSxoLmZvckVhY2hJdGVtKF89Pnt0aGlzLmtleVZhbHVlcy5wdXNoKGZ1bmN0aW9uIE8wZShjLGwpe3JldHVybntrZXk6Yyx2YWx1ZTpsfX0oXy5rZXksXy5jdXJyZW50VmFsdWUpKX0pKSwoaHx8ZikmJih0aGlzLmtleVZhbHVlcy5zb3J0KGQp'@;
put 'LHRoaXMuY29tcGFyZUZuPWQpLHRoaXMua2V5VmFsdWVzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChNXywxNikpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImtleXZhbHVlIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCk7'@;
put 'ZnVuY3Rpb24gb0coYyxsKXtjb25zdCBhPWMua2V5LGQ9bC5rZXk7aWYoYT09PWQpcmV0dXJuIDA7aWYodm9pZCAwPT09YSlyZXR1cm4gMTtpZih2b2lkIDA9PT1kKXJldHVybi0xO2lmKG51bGw9PT1hKXJldHVybiAxO2lmKG51bGw9PT1kKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'YSYmInN0cmluZyI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgZClyZXR1cm4gYS1kO2lmKCJib29sZWFuIj09dHlwZW9mIGEmJiJib29sZWFuIj09dHlwZW9mIGQpcmV0dXJuIGE8ZD8tMToxO2NvbnN0IGg9U3RyaW5n'@;
put 'KGEpLGY9U3RyaW5nKGQpO3JldHVybiBoPT1mPzA6aDxmPy0xOjF9bGV0IG9vPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2NvbnN0'@;
put 'IHNHPSJicm93c2VyIjtmdW5jdGlvbiBScyhjKXtyZXR1cm4gYz09PXNHfWZ1bmN0aW9uIGFHKGMpe3JldHVybiJzZXJ2ZXIiPT09Y31sZXQgajBlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3'@;
put 'IHowZShhcihMcyksd2luZG93KX0pLGN9KSgpO2NsYXNzIHowZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZG9jdW1lbnQ9bCx0aGlzLndpbmRvdz1hLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheShsKT8oKT0+bDpsfWdldFNjcm9s'@;
put 'bFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKT9bdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsdGhpcy53aW5kb3cucGFnZVlPZmZzZXRdOlswLDBdfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy5zdXBwb3J0c1Njcm9sbGluZygpJiZ0aGlzLndpbmRvdy5zY3JvbGxU'@;
put 'byhsWzBdLGxbMV0pfXNjcm9sbFRvQW5jaG9yKGwpe2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuO2NvbnN0IGE9ZnVuY3Rpb24gVTBlKGMsbCl7Y29uc3QgYT1jLmdldEVsZW1lbnRCeUlkKGwpfHxjLmdldEVsZW1lbnRzQnlOYW1lKGwpWzBdO2lmKGEpcmV0dXJuIGE7aWYo'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlVHJlZVdhbGtlciYmYy5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgYy5ib2R5LmF0dGFjaFNoYWRvdyl7Y29uc3QgZD1jLmNyZWF0ZVRyZWVXYWxrZXIoYy5ib2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgaD1kLmN1cnJlbnROb2Rl'@;
put 'O2Zvcig7aDspe2NvbnN0IGY9aC5zaGFkb3dSb290O2lmKGYpe2NvbnN0IF89Zi5nZXRFbGVtZW50QnlJZChsKXx8Zi5xdWVyeVNlbGVjdG9yKGBbbmFtZT0iJHtsfSJdYCk7aWYoXylyZXR1cm4gX31oPWQubmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsbCk7YSYmKHRo'@;
put 'aXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe2NvbnN0IGE9dGhpcy53aW5kb3cuaGlzdG9yeTthJiZhLnNjcm9sbFJlc3RvcmF0aW9uJiYoYS5zY3JvbGxSZXN0'@;
put 'b3JhdGlvbj1sKX19c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxU'@;
put 'byhkLWZbMF0saC1mWzFdKX1zdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKXt0cnl7aWYoIXRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKSlyZXR1cm4hMTtjb25zdCBsPWxHKHRoaXMud2luZG93Lmhpc3RvcnkpfHxsRyhPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy53aW5kb3cuaGlzdG9yeSkp'@;
put 'O3JldHVybiEoIWx8fCFsLndyaXRhYmxlJiYhbC5zZXQpfWNhdGNoe3JldHVybiExfX1zdXBwb3J0c1Njcm9sbGluZygpe3RyeXtyZXR1cm4hIXRoaXMud2luZG93JiYhIXRoaXMud2luZG93LnNjcm9sbFRvJiYicGFnZVhPZmZzZXQiaW4gdGhpcy53aW5kb3d9Y2F0Y2h7cmV0dXJuITF9fX1m'@;
put 'dW5jdGlvbiBsRyhjKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLCJzY3JvbGxSZXN0b3JhdGlvbiIpfWNsYXNzIGNHe31jbGFzcyBoMWUgZXh0ZW5kcyBNdWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9'@;
put 'ITB9fWNsYXNzIEVPIGV4dGVuZHMgaDFle3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBTdWUoYyl7c098fChzTz1jKX0obmV3IEVPKX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9'@;
put 'fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwp'@;
put 'fWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5F'@;
put 'TEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VI'@;
put 'cmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gZjFlKCl7cmV0dXJuIFRfPVRffHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksVF8/VF8uZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09YT9udWxsOmZ1bmN0aW9uIHAxZShjKXtweD1weHx8ZG9jdW1lbnQuY3Jl'@;
put 'YXRlRWxlbWVudCgiYSIpLHB4LnNldEF0dHJpYnV0ZSgiaHJlZiIsYyk7Y29uc3QgbD1weC5wYXRobmFtZTtyZXR1cm4iLyI9PT1sLmNoYXJBdCgwKT9sOmAvJHtsfWB9KGEpfXJlc2V0QmFzZUVsZW1lbnQoKXtUXz1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9y'@;
put 'LnVzZXJBZ2VudH1nZXRDb29raWUobCl7cmV0dXJuIFhXKGRvY3VtZW50LmNvb2tpZSxsKX19bGV0IHB4LFRfPW51bGwsbTFlPSgoKT0+e2NsYXNzIGN7YnVpbGQoKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBrTz1uZXcgTWkoIkV2ZW50TWFuYWdlclBsdWdpbnMiKTtsZXQgcEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3pvbmU9ZCx0aGlzLl9ldmVudE5hbWVU'@;
put 'b1BsdWdpbj1uZXcgTWFwLGEuZm9yRWFjaChoPT57aC5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWEuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZCkuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl9Z2V0Wm9u'@;
put 'ZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGEpe2xldCBkPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChhKTtpZihkKXJldHVybiBkO2lmKGQ9dGhpcy5fcGx1Z2lucy5maW5kKGY9PmYuc3VwcG9ydHMoYSkpLCFkKXRocm93IG5ldyBBcig1MTAxLCExKTtyZXR1cm4g'@;
put 'dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGEsZCksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa08pLGFyKE5vKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgZ0d7Y29u'@;
put 'c3RydWN0b3IobCl7dGhpcy5fZG9jPWx9fWNvbnN0IEFPPSJuZy1hcHAtaWQiO2xldCBtRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGY9e30pe3RoaXMuZG9jPWEsdGhpcy5hcHBJZD1kLHRoaXMubm9uY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLnN0eWxlUmVmPW5ldyBN'@;
put 'YXAsdGhpcy5ob3N0Tm9kZXM9bmV3IFNldCx0aGlzLnN0eWxlTm9kZXNJbkRPTT10aGlzLmNvbGxlY3RTZXJ2ZXJSZW5kZXJlZFN0eWxlcygpLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1hRyhmKSx0aGlzLnJlc2V0SG9zdE5vZGVzKCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpMT09'@;
put 'PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChkKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwtMSk8PTAmJnRoaXMub25TdHlsZVJlbW92ZWQoZCl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMu'@;
put 'c3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZD0+ZC5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZCk7dGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRk'@;
put 'KGEpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGQpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9y'@;
put 'KGNvbnN0IGQgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChkLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtkLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goaD0+aC5yZW1vdmUoKSksZC5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRl'@;
put 'cmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske0FPfT0iJHt0aGlzLmFwcElkfSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBkPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFjaChoPT57bnVsbCE9aC50ZXh0Q29udGVudCYmZC5zZXQoaC50'@;
put 'ZXh0Q29udGVudCxoKX0pLGR9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZVJlZjtpZihoLmhhcyhhKSl7Y29uc3QgZj1oLmdldChhKTtyZXR1cm4gZi51c2FnZSs9ZCxmLnVzYWdlfXJldHVybiBoLnNldChhLHt1c2FnZTpkLGVsZW1lbnRzOltd'@;
put 'fSksZH1nZXRTdHlsZUVsZW1lbnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGY9aD8uZ2V0KGQpO2lmKGY/LnBhcmVudE5vZGU9PT1hKXJldHVybiBoLmRlbGV0ZShkKSxmLnJlbW92ZUF0dHJpYnV0ZShBTyksZjt7Y29uc3QgXz10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJz'@;
put 'dHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZfLnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLF8udGV4dENvbnRlbnQ9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJl8uc2V0QXR0cmlidXRlKEFPLHRoaXMuYXBwSWQpLF99fWFkZFN0eWxlVG9Ib3N0KGEsZCl7Y29uc3QgaD10aGlz'@;
put 'LmdldFN0eWxlRWxlbWVudChhLGQpO2EuYXBwZW5kQ2hpbGQoaCk7Y29uc3QgZj10aGlzLnN0eWxlUmVmLF89Zi5nZXQoZCk/LmVsZW1lbnRzO18/Xy5wdXNoKGgpOmYuc2V0KGQse2VsZW1lbnRzOltoXSx1c2FnZToxfSl9cmVzZXRIb3N0Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVz'@;
put 'O2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTHMpLGFyKGE2KSxhcihsNiw4KSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp'@;
put 'O2NvbnN0IFRPPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxu'@;
put 'czoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LERPPS8lQ09NUCUvZyx5MWU9bmV3IE1pKCJSZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5j'@;
put 'dGlvbiBfRyhjLGwpe3JldHVybiBsLm1hcChhPT5hLnJlcGxhY2UoRE8sYykpfWxldCBJTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWU9bnVsbCl7dGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZCx0aGlzLmFwcElkPWgsdGhpcy5y'@;
put 'ZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWYsdGhpcy5kb2M9Xyx0aGlzLnBsYXRmb3JtSWQ9VCx0aGlzLm5nWm9uZT1XLHRoaXMubm9uY2U9aWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFHKFQpLHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5l'@;
put 'dyBMTyhhLF8sVyx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIpfWNyZWF0ZVJlbmRlcmVyKGEsZCl7aWYoIWF8fCFkKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjt0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJmQuZW5jYXBzdWxhdGlvbj09PU9jLlNoYWRvd0RvbSYmKGQ9ey4uLmQsZW5jYXBzdWxh'@;
put 'dGlvbjpPYy5FbXVsYXRlZH0pO2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZCk7cmV0dXJuIGggaW5zdGFuY2VvZiB5Rz9oLmFwcGx5VG9Ib3N0KGEpOmggaW5zdGFuY2VvZiBSTyYmaC5hcHBseVN0eWxlcygpLGh9Z2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpe2NvbnN0IGg9'@;
put 'dGhpcy5yZW5kZXJlckJ5Q29tcElkO2xldCBmPWguZ2V0KGQuaWQpO2lmKCFmKXtjb25zdCBfPXRoaXMuZG9jLFQ9dGhpcy5uZ1pvbmUsVz10aGlzLmV2ZW50TWFuYWdlcixpZT10aGlzLnNoYXJlZFN0eWxlc0hvc3QsZ2U9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LHdlPXRoaXMu'@;
put 'cGxhdGZvcm1Jc1NlcnZlcjtzd2l0Y2goZC5lbmNhcHN1bGF0aW9uKXtjYXNlIE9jLkVtdWxhdGVkOmY9bmV3IHlHKFcsaWUsZCx0aGlzLmFwcElkLGdlLF8sVCx3ZSk7YnJlYWs7Y2FzZSBPYy5TaGFkb3dEb206cmV0dXJuIG5ldyBNMWUoVyxpZSxhLGQsXyxULHRoaXMubm9uY2Usd2UpO2Rl'@;
put 'ZmF1bHQ6Zj1uZXcgUk8oVyxpZSxkLGdlLF8sVCx3ZSl9aC5zZXQoZC5pZCxmKX1yZXR1cm4gZn1uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihwRyksYXIobUcpLGFy'@;
put 'KGE2KSxhcih5MWUpLGFyKExzKSxhcihHcyksYXIoTm8pLGFyKGw2KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgTE97Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmda'@;
put 'b25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3koKXt9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhUT1thXXx8YSxsKTp0aGlzLmRv'@;
put 'Yy5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUobCl9YXBwZW5kQ2hpbGQobCxhKXsoYkcobCk/bC5jb250ZW50OmwpLmFwcGVuZENoaWxk'@;
put 'KGEpfWluc2VydEJlZm9yZShsLGEsZCl7bCYmKGJHKGwpP2wuY29udGVudDpsKS5pbnNlcnRCZWZvcmUoYSxkKX1yZW1vdmVDaGlsZChsLGEpe2wmJmwucmVtb3ZlQ2hpbGQoYSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtsZXQgZD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5kb2MucXVlcnlT'@;
put 'ZWxlY3RvcihsKTpsO2lmKCFkKXRocm93IG5ldyBBcigtNTEwNCwhMSk7cmV0dXJuIGF8fChkLnRleHRDb250ZW50PSIiKSxkfXBhcmVudE5vZGUobCl7cmV0dXJuIGwucGFyZW50Tm9kZX1uZXh0U2libGluZyhsKXtyZXR1cm4gbC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUobCxhLGQsaCl7'@;
put 'aWYoaCl7YT1oKyI6IithO2NvbnN0IGY9VE9baF07Zj9sLnNldEF0dHJpYnV0ZU5TKGYsYSxkKTpsLnNldEF0dHJpYnV0ZShhLGQpfWVsc2UgbC5zZXRBdHRyaWJ1dGUoYSxkKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe2lmKGQpe2NvbnN0IGg9VE9bZF07aD9sLnJlbW92ZUF0dHJpYnV0ZU5T'@;
put 'KGgsYSk6bC5yZW1vdmVBdHRyaWJ1dGUoYCR7ZH06JHthfWApfWVsc2UgbC5yZW1vdmVBdHRyaWJ1dGUoYSl9YWRkQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5hZGQoYSl9cmVtb3ZlQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5yZW1vdmUoYSl9c2V0U3R5bGUobCxhLGQsaCl7aCYoWTIuRGFzaENh'@;
put 'c2V8WTIuSW1wb3J0YW50KT9sLnN0eWxlLnNldFByb3BlcnR5KGEsZCxoJlkyLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6bC5zdHlsZVthXT1kfXJlbW92ZVN0eWxlKGwsYSxkKXtkJlkyLkRhc2hDYXNlP2wuc3R5bGUucmVtb3ZlUHJvcGVydHkoYSk6bC5zdHlsZVthXT0iIn1zZXRQcm9w'@;
put 'ZXJ0eShsLGEsZCl7bFthXT1kfXNldFZhbHVlKGwsYSl7bC5ub2RlVmFsdWU9YX1saXN0ZW4obCxhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmIShsPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsbCkpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFy'@;
put 'Z2V0ICR7bH0gZm9yIGV2ZW50ICR7YX1gKTtyZXR1cm4gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLGEsdGhpcy5kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGQpKX1kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGwpe3JldHVybiBhPT57aWYoIl9fbmdVbndyYXBfXyI9PT1hKXJl'@;
put 'dHVybiBsOyExPT09KHRoaXMucGxhdGZvcm1Jc1NlcnZlcj90aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpPT5sKGEpKTpsKGEpKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gYkcoYyl7cmV0dXJuIlRFTVBMQVRFIj09PWMudGFnTmFtZSYmdm9pZCAwIT09Yy5jb250ZW50fWNsYXNz'@;
put 'IE0xZSBleHRlbmRzIExPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7c3VwZXIobCxmLF8sVyksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5ob3N0RWw9ZCx0aGlzLnNoYWRvd1Jvb3Q9ZC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0'@;
put 'LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtjb25zdCBpZT1fRyhoLmlkLGguc3R5bGVzKTtmb3IoY29uc3QgZ2Ugb2YgaWUpe2NvbnN0IHdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7VCYmd2Uuc2V0QXR0cmlidXRlKCJub25jZSIsVCksd2UudGV4dENvbnRlbnQ9Z2UsdGhp'@;
put 'cy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHdlKX19bm9kZU9yU2hhZG93Um9vdChsKXtyZXR1cm4gbD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDpsfWFwcGVuZENoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1pbnNl'@;
put 'cnRCZWZvcmUobCxhLGQpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRo'@;
put 'aXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX1jbGFzcyBSTyBleHRlbmRzIExPe2NvbnN0cnVjdG9yKGwsYSxkLGgs'@;
put 'ZixfLFQsVyl7c3VwZXIobCxmLF8sVCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWgsdGhpcy5zdHlsZXM9Vz9fRyhXLGQuc3R5bGVzKTpkLnN0eWxlc31hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXMo'@;
put 'dGhpcy5zdHlsZXMpfWRlc3Ryb3koKXt0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kmJnRoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVTdHlsZXModGhpcy5zdHlsZXMpfX1jbGFzcyB5RyBleHRlbmRzIFJPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9aCsi'@;
put 'LSIrZC5pZDtzdXBlcihsLGEsZCxmLF8sVCxXLGllKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uIHcxZShjKXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UoRE8sYyl9KGllKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIEMxZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJl'@;
put 'cGxhY2UoRE8sYyl9KGllKX1hcHBseVRvSG9zdChsKXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUobCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KGwsYSl7Y29uc3QgZD1zdXBlci5jcmVhdGVFbGVtZW50KGwsYSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0'@;
put 'ZShkLHRoaXMuY29udGVudEF0dHIsIiIpLGR9fWxldCB4MWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGdHe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwo'@;
put 'KT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExzKSl9LGMuXHUwMjc1cHJv'@;
put 'dj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qgd0c9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sRTFlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNj'@;
put 'OiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxrMWU9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtl'@;
put 'eSxtZXRhOmM9PmMubWV0YUtleSxzaGlmdDpjPT5jLnNoaWZ0S2V5fTtsZXQgQTFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBnR3tjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4gbnVsbCE9Yy5wYXJzZUV2ZW50TmFtZShhKX1hZGRFdmVudExpc3RlbmVyKGEsZCxo'@;
put 'KXtjb25zdCBmPWMucGFyc2VFdmVudE5hbWUoZCksXz1jLmV2ZW50Q2FsbGJhY2soZi5mdWxsS2V5LGgsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmFwKCkub25BbmRDYW5jZWwoYSxmLmRvbUV2ZW50'@;
put 'TmFtZSxfKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGEpe2NvbnN0IGQ9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIiksaD1kLnNoaWZ0KCk7aWYoMD09PWQubGVuZ3RofHwia2V5ZG93biIhPT1oJiYia2V5dXAiIT09aClyZXR1cm4gbnVsbDtjb25zdCBmPWMuX25vcm1hbGl6ZUtleShkLnBv'@;
put 'cCgpKTtsZXQgXz0iIixUPWQuaW5kZXhPZigiY29kZSIpO2lmKFQ+LTEmJihkLnNwbGljZShULDEpLF89ImNvZGUuIiksd0cuZm9yRWFjaChpZT0+e2NvbnN0IGdlPWQuaW5kZXhPZihpZSk7Z2U+LTEmJihkLnNwbGljZShnZSwxKSxfKz1pZSsiLiIpfSksXys9ZiwwIT1kLmxlbmd0aHx8MD09'@;
put 'PWYubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IFc9e307cmV0dXJuIFcuZG9tRXZlbnROYW1lPWgsVy5mdWxsS2V5PV8sV31zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGEsZCl7bGV0IGg9RTFlW2Eua2V5XXx8YS5rZXksZj0iIjtyZXR1cm4gZC5pbmRleE9mKCJjb2RlLiIpPi0xJiYo'@;
put 'aD1hLmNvZGUsZj0iY29kZS4iKSwhKG51bGw9PWh8fCFoKSYmKGg9aC50b0xvd2VyQ2FzZSgpLCIgIj09PWg/aD0ic3BhY2UiOiIuIj09PWgmJihoPSJkb3QiKSx3Ry5mb3JFYWNoKF89PntfIT09aCYmKDAsazFlW19dKShhKSYmKGYrPV8rIi4iKX0pLGYrPWgsZj09PWQpfXN0YXRpYyBldmVu'@;
put 'dENhbGxiYWNrKGEsZCxoKXtyZXR1cm4gZj0+e2MubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGYsYSkmJmgucnVuR3VhcmRlZCgoKT0+ZChmKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGEpe3JldHVybiJlc2MiPT09YT8iZXNjYXBlIjphfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKShhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IFNHPVt7cHJvdmlkZTpHcyx1c2VWYWx1ZTpzR30se3Byb3ZpZGU6ZVMsdXNlVmFsdWU6ZnVuY3Rpb24gVDFlKCl7RU8ubWFrZUN1cnJlbnQo'@;
put 'KX0sbXVsdGk6ITB9LHtwcm92aWRlOkxzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSTFlKCl7cmV0dXJuIGZ1bmN0aW9uIEZDKGMpe0c5PWN9KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLEwxZT1nVyhkdWUsImJyb3dzZXIiLFNHKSxSMWU9bmV3IE1pKCIiKSxNRz1be3Byb3ZpZGU6S00s'@;
put 'dXNlQ2xhc3M6Y2xhc3MgZzFle2FkZFRvV2luZG93KGwpe09pLmdldEFuZ3VsYXJUZXN0YWJpbGl0eT0oZCxoPSEwKT0+e2NvbnN0IGY9bC5maW5kVGVzdGFiaWxpdHlJblRyZWUoZCxoKTtpZihudWxsPT1mKXRocm93IG5ldyBBcig1MTAzLCExKTtyZXR1cm4gZn0sT2kuZ2V0QWxsQW5ndWxh'@;
put 'clRlc3RhYmlsaXRpZXM9KCk9PmwuZ2V0QWxsVGVzdGFiaWxpdGllcygpLE9pLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PmwuZ2V0QWxsUm9vdEVsZW1lbnRzKCksT2kuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChPaS5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksT2kuZnJhbWV3b3Jr'@;
put 'U3RhYmlsaXplcnMucHVzaChkPT57Y29uc3QgaD1PaS5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpO2xldCBmPWgubGVuZ3RoLF89ITE7Y29uc3QgVD1mdW5jdGlvbihXKXtfPV98fFcsZi0tLDA9PWYmJmQoXyl9O2guZm9yRWFjaChXPT57Vy53aGVuU3RhYmxlKFQpfSl9KX1maW5kVGVz'@;
put 'dGFiaWxpdHlJblRyZWUobCxhLGQpe3JldHVybiBudWxsPT1hP251bGw6bC5nZXRUZXN0YWJpbGl0eShhKT8/KGQ/YXAoKS5pc1NoYWRvd1Jvb3QoYSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYS5wYXJlbnRF'@;
put 'bGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOnVXLHVzZUNsYXNzOiRSLGRlcHM6W05vLHFSLEtNXX0se3Byb3ZpZGU6JFIsdXNlQ2xhc3M6JFIsZGVwczpbTm8scVIsS01dfV0seEc9W3twcm92aWRlOnQ1LHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6aGYsdXNlRmFjdG9y'@;
put 'eTpmdW5jdGlvbiBEMWUoKXtyZXR1cm4gbmV3IGhmfSxkZXBzOltdfSx7cHJvdmlkZTprTyx1c2VDbGFzczp4MWUsbXVsdGk6ITAsZGVwczpbTHMsTm8sR3NdfSx7cHJvdmlkZTprTyx1c2VDbGFzczpBMWUsbXVsdGk6ITAsZGVwczpbTHNdfSxJTyxtRyxwRyx7cHJvdmlkZTpZMyx1c2VFeGlz'@;
put 'dGluZzpJT30se3Byb3ZpZGU6Y0csdXNlQ2xhc3M6bTFlLGRlcHM6W119LFtdXTtsZXQgRUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6YTYsdXNlVmFsdWU6'@;
put 'YS5hcHBJZH1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoUjFlLDEyKSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOlsuLi54RywuLi5NR10saW1wb3J0czpbb28saHVlXX0pLGN9KSgpLGtH'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jPWF9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5fZG9jLnRpdGxlfXNldFRpdGxlKGEpe3RoaXMuX2RvYy50aXRsZT1hfHwiIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTHMp'@;
put 'KX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hP25ldyBhOmZ1bmN0aW9uIFAxZSgpe3JldHVybiBuZXcga0coYXIoTHMpKX0oKSxkfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3R5cGVvZiB3aW5kb3c8InUiJiZ3'@;
put 'aW5kb3c7Rig3NDA5MiksRigzNDIwOSk7Y29uc3QgUE89e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEduPXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3Rh'@;
put 'cnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxlOiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19'@;
put 'LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixs'@;
put 'aWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFyeUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJy'@;
put 'ZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0OltdLG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAs'@;
put 'c2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9pZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJj'@;
put 'aDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4i'@;
put 'LCJOT1QgSU4iLCJORSJdfX07dmFyIEtvPUYoMTY2NzYpLElHPUYubihLbyk7ZnVuY3Rpb24gTEcoYyxsLGEsZCxoLGYsXyl7dHJ5e3ZhciBUPWNbZl0oXyksVz1ULnZhbHVlfWNhdGNoKGllKXtyZXR1cm4gdm9pZCBhKGllKX1ULmRvbmU/bChXKTpQcm9taXNlLnJlc29sdmUoVykudGhlbihk'@;
put 'LGgpfWZ1bmN0aW9uIGZpKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMsYT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsaCl7dmFyIGY9Yy5hcHBseShsLGEpO2Z1bmN0aW9uIF8oVyl7TEcoZixkLGgsXyxULCJuZXh0IixXKX1mdW5jdGlvbiBUKFcpe0xH'@;
put 'KGYsZCxoLF8sVCwidGhyb3ciLFcpfV8odm9pZCAwKX0pfX1mdW5jdGlvbiBGTyhjKXtyZXR1cm4hIWMmJihjIGluc3RhbmNlb2YgS2V8fFkoYy5saWZ0KSYmWShjLnN1YnNjcmliZSkpfWNvbnN0e2lzQXJyYXk6QjFlfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6ajFlLHByb3RvdHlwZTp6MWUs'@;
put 'a2V5czpVMWV9PU9iamVjdDtmdW5jdGlvbiBSRyhjKXtpZigxPT09Yy5sZW5ndGgpe2NvbnN0IGw9Y1swXTtpZihCMWUobCkpcmV0dXJue2FyZ3M6bCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uIFoxZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiZqMWUoYyk9PT16MWV9KGwpKXtj'@;
put 'b25zdCBhPVUxZShsKTtyZXR1cm57YXJnczphLm1hcChkPT5sW2RdKSxrZXlzOmF9fX1yZXR1cm57YXJnczpjLGtleXM6bnVsbH19Y29uc3R7aXNBcnJheTpZMWV9PUFycmF5O2Z1bmN0aW9uIEhPKGMpe3JldHVybiBNZShsPT5mdW5jdGlvbiBXMWUoYyxsKXtyZXR1cm4gWTFlKGwpP2MoLi4u'@;
put 'bCk6YyhsKX0oYyxsKSl9ZnVuY3Rpb24gT0coYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gWTYoLi4uYyl7Y29uc3QgbD1OMChjKSxhPVJjKGMpLHthcmdzOmQsa2V5czpofT1SRyhjKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIGVhKFtd'@;
put 'LGwpO2NvbnN0IGY9bmV3IEtlKGZ1bmN0aW9uIEcxZShjLGwsYT1PZSl7cmV0dXJuIGQ9PntQRyhsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IF89aCxUPWg7Zm9yKGxldCBXPTA7VzxoO1crKylQRyhsLCgpPT57Y29uc3QgaWU9ZWEoY1tXXSxsKTtsZXQgZ2U9'@;
put 'ITE7aWUuc3Vic2NyaWJlKFVlKGQsd2U9PntmW1ddPXdlLGdlfHwoZ2U9ITAsVC0tKSxUfHxkLm5leHQoYShmLnNsaWNlKCkpKX0sKCk9PnstLV98fGQuY29tcGxldGUoKX0pKX0sZCl9LGQpfX0oZCxsLGg/Xz0+T0coaCxfKTpPZSkpO3JldHVybiBhP2YucGlwZShITyhhKSk6Zn1mdW5jdGlv'@;
put 'biBQRyhjLGwsYSl7Yz9HaShhLGMsbCk6bCgpfWNvbnN0IGd4PVgoYz0+ZnVuY3Rpb24oKXtjKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiBteCguLi5jKXtyZXR1cm4gZnVuY3Rpb24gJDFlKCl7'@;
put 'cmV0dXJuIFBpKDEpfSgpKGVhKGMsTjAoYykpKX1mdW5jdGlvbiBGRyhjKXtyZXR1cm4gbmV3IEtlKGw9PntLcihjKCkpLnN1YnNjcmliZShsKX0pfWZ1bmN0aW9uIERfKGMsbCl7Y29uc3QgYT1ZKGMpP2M6KCk9PmMsZD1oPT5oLmVycm9yKGEoKSk7cmV0dXJuIG5ldyBLZShsP2g9Pmwuc2No'@;
put 'ZWR1bGUoZCwwLGgpOmQpfWZ1bmN0aW9uIE5PKCl7cmV0dXJuIFhlKChjLGwpPT57bGV0IGE9bnVsbDtjLl9yZWZDb3VudCsrO2NvbnN0IGQ9VWUobCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFjfHxjLl9yZWZDb3VudDw9MHx8MDwtLWMuX3JlZkNvdW50KXJldHVybiB2b2lkKGE9'@;
put 'bnVsbCk7Y29uc3QgaD1jLl9jb25uZWN0aW9uLGY9YTthPW51bGwsaCYmKCFmfHxoPT09ZikmJmgudW5zdWJzY3JpYmUoKSxsLnVuc3Vic2NyaWJlKCl9KTtjLnN1YnNjcmliZShkKSxkLmNsb3NlZHx8KGE9Yy5jb25uZWN0KCkpfSl9Y2xhc3MgSEcgZXh0ZW5kcyBLZXtjb25zdHJ1Y3Rvcihs'@;
put 'LGEpe3N1cGVyKCksdGhpcy5zb3VyY2U9bCx0aGlzLnN1YmplY3RGYWN0b3J5PWEsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxsLHFlKGwpJiYodGhpcy5saWZ0PWwubGlmdCl9X3N1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5nZXRTdWJq'@;
put 'ZWN0KCkuc3Vic2NyaWJlKGwpfWdldFN1YmplY3QoKXtjb25zdCBsPXRoaXMuX3N1YmplY3Q7cmV0dXJuKCFsfHxsLmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2NvbnN0'@;
put 'e19jb25uZWN0aW9uOmx9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsbD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IGw9dGhpcy5fY29ubmVjdGlvbjtpZighbCl7bD10aGlzLl9jb25uZWN0aW9uPW5ldyBlZTtjb25zdCBhPXRoaXMuZ2V0U3ViamVjdCgp'@;
put 'O2wuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShVZShhLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksYS5jb21wbGV0ZSgpfSxkPT57dGhpcy5fdGVhcmRvd24oKSxhLmVycm9yKGQpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSxsLmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVs'@;
put 'bCxsPWVlLkVNUFRZKX1yZXR1cm4gbH1yZWZDb3VudCgpe3JldHVybiBOTygpKHRoaXMpfX1mdW5jdGlvbiBpZChjKXtyZXR1cm4gYzw9MD8oKT0+TG86WGUoKGwsYSk9PntsZXQgZD0wO2wuc3Vic2NyaWJlKFVlKGEsaD0+eysrZDw9YyYmKGEubmV4dChoKSxjPD1kJiZhLmNvbXBsZXRlKCkp'@;
put 'fSkpfSl9ZnVuY3Rpb24gY3AoLi4uYyl7Y29uc3QgbD1OMChjKTtyZXR1cm4gWGUoKGEsZCk9PnsobD9teChjLGEsbCk6bXgoYyxhKSkuc3Vic2NyaWJlKGQpfSl9ZnVuY3Rpb24gSWEoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD0wO2Euc3Vic2NyaWJlKFVlKGQsZj0+Yy5jYWxsKGws'@;
put 'ZixoKyspJiZkLm5leHQoZikpKX0pfWZ1bmN0aW9uIHZ4KGMpe3JldHVybiBYZSgobCxhKT0+e2xldCBkPSExO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2Q9ITAsYS5uZXh0KGgpfSwoKT0+e2R8fGEubmV4dChjKSxhLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBORyhjPXExZSl7cmV0dXJuIFhl'@;
put 'KChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoVWUoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29tcGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIHExZSgpe3JldHVybiBuZXcgZ3h9ZnVuY3Rpb24gdXAoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7'@;
put 'cmV0dXJuIGQ9PmQucGlwZShjP0lhKChoLGYpPT5jKGgsZixkKSk6T2UsaWQoMSksYT92eChsKTpORygoKT0+bmV3IGd4KSl9ZnVuY3Rpb24gVzYoYyxsKXtyZXR1cm4gWShsKT95cihjLGwsMSk6eXIoYywxKX1mdW5jdGlvbiB6YyhjLGwsYSl7Y29uc3QgZD1ZKGMpfHxsfHxhP3tuZXh0OmMs'@;
put 'ZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1hlKChoLGYpPT57dmFyIF87bnVsbD09PShfPWQuc3Vic2NyaWJlKXx8dm9pZCAwPT09X3x8Xy5jYWxsKGQpO2xldCBUPSEwO2guc3Vic2NyaWJlKFVlKGYsVz0+e3ZhciBpZTtudWxsPT09KGllPWQubmV4dCl8fHZvaWQgMD09PWllfHxp'@;
put 'ZS5jYWxsKGQsVyksZi5uZXh0KFcpfSwoKT0+e3ZhciBXO1Q9ITEsbnVsbD09PShXPWQuY29tcGxldGUpfHx2b2lkIDA9PT1XfHxXLmNhbGwoZCksZi5jb21wbGV0ZSgpfSxXPT57dmFyIGllO1Q9ITEsbnVsbD09PShpZT1kLmVycm9yKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCxXKSxmLmVy'@;
put 'cm9yKFcpfSwoKT0+e3ZhciBXLGllO1QmJihudWxsPT09KFc9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PVd8fFcuY2FsbChkKSksbnVsbD09PShpZT1kLmZpbmFsaXplKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCl9KSl9KTpPZX1mdW5jdGlvbiBBNShjKXtyZXR1cm4gWGUoKGwsYSk9Pnts'@;
put 'ZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKFVlKGEsdm9pZCAwLHZvaWQgMCxfPT57Zj1LcihjKF8sQTUoYykobCkpKSxkPyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEp'@;
put 'KX0pfWZ1bmN0aW9uIFZPKGMpe3JldHVybiBjPD0wPygpPT5MbzpYZSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAs'@;
put 'KCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiBJXyhjKXtyZXR1cm4gWGUoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxseXthLmFkZChjKX19KX1jb25zdCBscz0icHJpbWFyeSIsTF89U3ltYm9sKCJSb3V0ZVRpdGxlIik7Y2xhc3MgUTFle2NvbnN0cnVjdG9yKGwpe3RoaXMucGFy'@;
put 'YW1zPWx8fHt9fWhhcyhsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLGwpfWdldChsKXtpZih0aGlzLmhhcyhsKSl7Y29uc3QgYT10aGlzLnBhcmFtc1tsXTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hWzBdOmF9cmV0dXJuIG51bGx9'@;
put 'Z2V0QWxsKGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2E6W2FdfXJldHVybltdfWdldCBrZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX19ZnVuY3Rpb24gRzYoYyl7cmV0dXJuIG5ldyBRMWUoYyl9'@;
put 'ZnVuY3Rpb24gZWRlKGMsbCxhKXtjb25zdCBkPWEucGF0aC5zcGxpdCgiLyIpO2lmKGQubGVuZ3RoPmMubGVuZ3RofHwiZnVsbCI9PT1hLnBhdGhNYXRjaCYmKGwuaGFzQ2hpbGRyZW4oKXx8ZC5sZW5ndGg8Yy5sZW5ndGgpKXJldHVybiBudWxsO2NvbnN0IGg9e307Zm9yKGxldCBmPTA7Zjxk'@;
put 'Lmxlbmd0aDtmKyspe2NvbnN0IF89ZFtmXSxUPWNbZl07aWYoXy5zdGFydHNXaXRoKCI6IikpaFtfLnN1YnN0cmluZygxKV09VDtlbHNlIGlmKF8hPT1ULnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOmMuc2xpY2UoMCxkLmxlbmd0aCkscG9zUGFyYW1zOmh9fWZ1bmN0aW9uIHJo'@;
put 'KGMsbCl7Y29uc3QgYT1jP09iamVjdC5rZXlzKGMpOnZvaWQgMCxkPWw/T2JqZWN0LmtleXMobCk6dm9pZCAwO2lmKCFhfHwhZHx8YS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2xldCBoO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKWlmKGg9YVtmXSwhQkcoY1toXSxsW2hdKSlyZXR1'@;
put 'cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBCRyhjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykmJkFycmF5LmlzQXJyYXkobCkpe2lmKGMubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Y29uc3QgYT1bLi4uY10uc29ydCgpLGQ9Wy4uLmxdLnNvcnQoKTtyZXR1cm4gYS5ldmVyeSgoaCxmKT0+ZFtm'@;
put 'XT09PWgpfXJldHVybiBjPT09bH1mdW5jdGlvbiBqRyhjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gZHAoYyl7cmV0dXJuIEZPKGMpP2M6djUoYyk/ZWEoUHJvbWlzZS5yZXNvbHZlKGMpKTpXaShjKX1jb25zdCBuZGU9e2V4YWN0OmZ1bmN0aW9uIFpH'@;
put 'KGMsbCxhKXtpZighVDUoYy5zZWdtZW50cyxsLnNlZ21lbnRzKXx8IV94KGMuc2VnbWVudHMsbC5zZWdtZW50cyxhKXx8Yy5udW1iZXJPZkNoaWxkcmVuIT09bC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcihjb25zdCBkIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5bZF18fCFa'@;
put 'RyhjLmNoaWxkcmVuW2RdLGwuY2hpbGRyZW5bZF0sYSkpcmV0dXJuITE7cmV0dXJuITB9LHN1YnNldDpZR30sekc9e2V4YWN0OmZ1bmN0aW9uIHJkZShjLGwpe3JldHVybiByaChjLGwpfSxzdWJzZXQ6ZnVuY3Rpb24gaWRlKGMsbCl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLmxlbmd0aDw9T2Jq'@;
put 'ZWN0LmtleXMoYykubGVuZ3RoJiZPYmplY3Qua2V5cyhsKS5ldmVyeShhPT5CRyhjW2FdLGxbYV0pKX0saWdub3JlZDooKT0+ITB9O2Z1bmN0aW9uIFVHKGMsbCxhKXtyZXR1cm4gbmRlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZ6R1thLnF1ZXJ5UGFyYW1zXShj'@;
put 'LnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpJiYhKCJleGFjdCI9PT1hLmZyYWdtZW50JiZjLmZyYWdtZW50IT09bC5mcmFnbWVudCl9ZnVuY3Rpb24gWUcoYyxsLGEpe3JldHVybiBXRyhjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBXRyhjLGwsYSxkKXtpZihjLnNlZ21lbnRzLmxlbmd0'@;
put 'aD5hLmxlbmd0aCl7Y29uc3QgaD1jLnNlZ21lbnRzLnNsaWNlKDAsYS5sZW5ndGgpO3JldHVybiEoIVQ1KGgsYSl8fGwuaGFzQ2hpbGRyZW4oKXx8IV94KGgsYSxkKSl9aWYoYy5zZWdtZW50cy5sZW5ndGg9PT1hLmxlbmd0aCl7aWYoIVQ1KGMuc2VnbWVudHMsYSl8fCFfeChjLnNlZ21lbnRz'@;
put 'LGEsZCkpcmV0dXJuITE7Zm9yKGNvbnN0IGggaW4gbC5jaGlsZHJlbilpZighYy5jaGlsZHJlbltoXXx8IVlHKGMuY2hpbGRyZW5baF0sbC5jaGlsZHJlbltoXSxkKSlyZXR1cm4hMTtyZXR1cm4hMH17Y29uc3QgaD1hLnNsaWNlKDAsYy5zZWdtZW50cy5sZW5ndGgpLGY9YS5zbGljZShjLnNl'@;
put 'Z21lbnRzLmxlbmd0aCk7cmV0dXJuISEoVDUoYy5zZWdtZW50cyxoKSYmX3goYy5zZWdtZW50cyxoLGQpJiZjLmNoaWxkcmVuW2xzXSkmJldHKGMuY2hpbGRyZW5bbHNdLGwsZixkKX19ZnVuY3Rpb24gX3goYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT56R1thXShjW2hdLnBhcmFtZXRl'@;
put 'cnMsZC5wYXJhbWV0ZXJzKSl9Y2xhc3MgJDZ7Y29uc3RydWN0b3IobD1uZXcgeWEoW10se30pLGE9e30sZD1udWxsKXt0aGlzLnJvb3Q9bCx0aGlzLnF1ZXJ5UGFyYW1zPWEsdGhpcy5mcmFnbWVudD1kfWdldCBxdWVyeVBhcmFtTWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0'@;
put 'aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuIGFkZS5zZXJpYWxpemUodGhpcyl9fWNsYXNzIHlhe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZWdtZW50cz1sLHRoaXMuY2hpbGRyZW49YSx0aGlzLnBh'@;
put 'cmVudD1udWxsLE9iamVjdC52YWx1ZXMoYSkuZm9yRWFjaChkPT5kLnBhcmVudD10aGlzKX1oYXNDaGlsZHJlbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH1nZXQgbnVtYmVyT2ZDaGlsZHJlbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5sZW5ndGh9dG9T'@;
put 'dHJpbmcoKXtyZXR1cm4gYngodGhpcyl9fWNsYXNzIFJfe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5wYXRoPWwsdGhpcy5wYXJhbWV0ZXJzPWF9Z2V0IHBhcmFtZXRlck1hcCgpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXB8fCh0aGlzLl9wYXJhbWV0ZXJNYXA9RzYodGhpcy5wYXJhbWV0ZXJz'@;
put 'KSksdGhpcy5fcGFyYW1ldGVyTWFwfXRvU3RyaW5nKCl7cmV0dXJuIHFHKHRoaXMpfX1mdW5jdGlvbiBUNShjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBPXz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJPfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIEJPe3BhcnNlKGwpe2NvbnN0IGE9bmV3IF9kZShsKTtyZXR1cm4g'@;
put 'bmV3ICQ2KGEucGFyc2VSb290U2VnbWVudCgpLGEucGFyc2VRdWVyeVBhcmFtcygpLGEucGFyc2VGcmFnbWVudCgpKX1zZXJpYWxpemUobCl7Y29uc3QgYT1gLyR7UF8obC5yb290LCEwKX1gLGQ9ZnVuY3Rpb24gdWRlKGMpe2NvbnN0IGw9T2JqZWN0LmtleXMoYykubWFwKGE9Pntjb25zdCBk'@;
put 'PWNbYV07cmV0dXJuIEFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoaD0+YCR7eXgoYSl9PSR7eXgoaCl9YCkuam9pbigiJiIpOmAke3l4KGEpfT0ke3l4KGQpfWB9KS5maWx0ZXIoYT0+ISFhKTtyZXR1cm4gbC5sZW5ndGg/YD8ke2wuam9pbigiJiIpfWA6IiJ9KGwucXVlcnlQYXJhbXMpO3JldHVy'@;
put 'bmAke2F9JHtkfSR7InN0cmluZyI9PXR5cGVvZiBsLmZyYWdtZW50P2AjJHtmdW5jdGlvbiBsZGUoYyl7cmV0dXJuIGVuY29kZVVSSShjKX0obC5mcmFnbWVudCl9YDoiIn1gfX1jb25zdCBhZGU9bmV3IEJPO2Z1bmN0aW9uIGJ4KGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT5xRyhsKSku'@;
put 'am9pbigiLyIpfWZ1bmN0aW9uIFBfKGMsbCl7aWYoIWMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYngoYyk7aWYobCl7Y29uc3QgYT1jLmNoaWxkcmVuW2xzXT9QXyhjLmNoaWxkcmVuW2xzXSwhMSk6IiIsZD1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gs'@;
put 'Zl0pPT57aCE9PWxzJiZkLnB1c2goYCR7aH06JHtQXyhmLCExKX1gKX0pLGQubGVuZ3RoPjA/YCR7YX0oJHtkLmpvaW4oIi8vIil9KWA6YX17Y29uc3QgYT1mdW5jdGlvbiBzZGUoYyxsKXtsZXQgYT1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2QsaF0p'@;
put 'PT57ZD09PWxzJiYoYT1hLmNvbmNhdChsKGgsZCkpKX0pLE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2QhPT1scyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxhfShjLChkLGgpPT5oPT09bHM/W1BfKGMuY2hpbGRyZW5bbHNdLCExKV06W2Ake2h9OiR7UF8o'@;
put 'ZCwhMSl9YF0pO3JldHVybiAxPT09T2JqZWN0LmtleXMoYy5jaGlsZHJlbikubGVuZ3RoJiZudWxsIT1jLmNoaWxkcmVuW2xzXT9gJHtieChjKX0vJHthWzBdfWA6YCR7YngoYyl9Lygke2Euam9pbigiLy8iKX0pYH19ZnVuY3Rpb24gR0coYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChj'@;
put 'KS5yZXBsYWNlKC8lNDAvZywiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIil9ZnVuY3Rpb24geXgoYyl7cmV0dXJuIEdHKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIGpPKGMpe3JldHVybiBHRyhjKS5yZXBs'@;
put 'YWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ksIiYiKX1mdW5jdGlvbiB3eChjKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGMpfWZ1bmN0aW9uICRHKGMpe3JldHVybiB3eChjLnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiBxRyhj'@;
put 'KXtyZXR1cm5gJHtqTyhjLnBhdGgpfSR7ZnVuY3Rpb24gY2RlKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5tYXAobD0+YDske2pPKGwpfT0ke2pPKGNbbF0pfWApLmpvaW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QgZGRlPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIHpPKGMpe2NvbnN0'@;
put 'IGw9Yy5tYXRjaChkZGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgaGRlPS9eW15cLygpPzs9I10rLyxwZGU9L15bXj0/JiNdKy8sbWRlPS9eW14mI10rLztjbGFzcyBfZGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1'@;
put 'cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgeWEoW10se30pOm5ldyB5YShbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygp'@;
put 'e2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2Rl'@;
put 'VVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJz'@;
put 'ZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNX'@;
put 'aXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW2xz'@;
put 'XT1uZXcgeWEobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPXpPKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0aHJvdyBuZXcgQXIoNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgUl8od3gobCksdGhpcy5wYXJzZU1h'@;
put 'dHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIGZkZShjKXtjb25zdCBsPWMubWF0Y2goaGRlKTty'@;
put 'ZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCBoPXpPKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFt3eChhKV09d3go'@;
put 'ZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gZ2RlKGMpe2NvbnN0IGw9Yy5tYXRjaChwZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9'@;
put 'Iikpe2NvbnN0IF89ZnVuY3Rpb24gdmRlKGMpe2NvbnN0IGw9Yy5tYXRjaChtZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtfJiYoZD1fLHRoaXMuY2FwdHVyZShkKSl9Y29uc3QgaD0kRyhhKSxmPSRHKGQpO2lmKGwuaGFzT3duUHJvcGVydHkoaCkpe2xldCBfPWxbaF07'@;
put 'QXJyYXkuaXNBcnJheShfKXx8KF89W19dLGxbaF09XyksXy5wdXNoKGYpfWVsc2UgbFtoXT1mfXBhcnNlUGFyZW5zKGwpe2NvbnN0IGE9e307Zm9yKHRoaXMuY2FwdHVyZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe2NvbnN0IGQ9'@;
put 'ek8odGhpcy5yZW1haW5pbmcpLGg9dGhpcy5yZW1haW5pbmdbZC5sZW5ndGhdO2lmKCIvIiE9PWgmJiIpIiE9PWgmJiI7IiE9PWgpdGhyb3cgbmV3IEFyKDQwMTAsITEpO2xldCBmO2QuaW5kZXhPZigiOiIpPi0xPyhmPWQuc2xpY2UoMCxkLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGYp'@;
put 'LHRoaXMuY2FwdHVyZSgiOiIpKTpsJiYoZj1scyk7Y29uc3QgXz10aGlzLnBhcnNlQ2hpbGRyZW4oKTthW2ZdPTE9PT1PYmplY3Qua2V5cyhfKS5sZW5ndGg/X1tsc106bmV3IHlhKFtdLF8pLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBhfXBlZWtTdGFydHNXaXRoKGwpe3Jl'@;
put 'dHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKGwpfWNvbnN1bWVPcHRpb25hbChsKXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgobCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcobC5sZW5ndGgpLCEwKX1jYXB0dXJlKGwpe2lmKCF0aGlzLmNvbnN1'@;
put 'bWVPcHRpb25hbChsKSl0aHJvdyBuZXcgQXIoNDAxMSwhMSl9fWZ1bmN0aW9uIEtHKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyB5YShbXSx7W2xzXTpjfSk6Y31mdW5jdGlvbiBYRyhjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBkIG9mIE9iamVjdC5rZXlzKGMuY2hpbGRyZW4p'@;
put 'KXtjb25zdCBmPVhHKGMuY2hpbGRyZW5bZF0pO2lmKGQ9PT1scyYmMD09PWYuc2VnbWVudHMubGVuZ3RoJiZmLmhhc0NoaWxkcmVuKCkpZm9yKGNvbnN0W18sVF1vZiBPYmplY3QuZW50cmllcyhmLmNoaWxkcmVuKSlsW19dPVQ7ZWxzZShmLnNlZ21lbnRzLmxlbmd0aD4wfHxmLmhhc0NoaWxk'@;
put 'cmVuKCkpJiYobFtkXT1mKX1yZXR1cm4gZnVuY3Rpb24gYmRlKGMpe2lmKDE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJmMuY2hpbGRyZW5bbHNdKXtjb25zdCBsPWMuY2hpbGRyZW5bbHNdO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cy5jb25jYXQobC5zZWdtZW50cyksbC5jaGlsZHJlbil9cmV0'@;
put 'dXJuIGN9KG5ldyB5YShjLnNlZ21lbnRzLGwpKX1mdW5jdGlvbiBENShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mICQ2fWZ1bmN0aW9uIEpHKGMpe2xldCBsO2NvbnN0IGg9S0coZnVuY3Rpb24gYShmKXtjb25zdCBfPXt9O2Zvcihjb25zdCBXIG9mIGYuY2hpbGRyZW4pe2NvbnN0IGllPWEoVyk7'@;
put 'X1tXLm91dGxldF09aWV9Y29uc3QgVD1uZXcgeWEoZi51cmwsXyk7cmV0dXJuIGY9PT1jJiYobD1UKSxUfShjLnJvb3QpKTtyZXR1cm4gbD8/aH1mdW5jdGlvbiBRRyhjLGwsYSxkKXtsZXQgaD1jO2Zvcig7aC5wYXJlbnQ7KWg9aC5wYXJlbnQ7aWYoMD09PWwubGVuZ3RoKXJldHVybiBVTyho'@;
put 'LGgsaCxhLGQpO2NvbnN0IGY9ZnVuY3Rpb24gd2RlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY1swXSYmMT09PWMubGVuZ3RoJiYiLyI9PT1jWzBdKXJldHVybiBuZXcgdCQoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLF8pPT57aWYoIm9iamVjdCI9PXR5cGVv'@;
put 'ZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IFQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW1csaWVdKT0+e1RbV109InN0cmluZyI9PXR5cGVvZiBpZT9pZS5zcGxpdCgiLyIpOmllfSksWy4uLmgse291dGxldHM6VH1dfWlmKGYuc2VnbWVu'@;
put 'dFBhdGgpcmV0dXJuWy4uLmgsZi5zZWdtZW50UGF0aF19cmV0dXJuInN0cmluZyIhPXR5cGVvZiBmP1suLi5oLGZdOjA9PT1fPyhmLnNwbGl0KCIvIikuZm9yRWFjaCgoVCxXKT0+ezA9PVcmJiIuIj09PVR8fCgwPT1XJiYiIj09PVQ/YT0hMDoiLi4iPT09VD9sKys6IiIhPVQmJmgucHVzaChU'@;
put 'KSl9KSxoKTpbLi4uaCxmXX0sW10pO3JldHVybiBuZXcgdCQoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiBVTyhoLGgsbmV3IHlhKFtdLHt9KSxhLGQpO2NvbnN0IF89ZnVuY3Rpb24gQ2RlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBTeChsLCEwLDApO2lmKCFh'@;
put 'KXJldHVybiBuZXcgU3gobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IFN4KGEsITAsMCk7Y29uc3QgZD1DeChjLmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIFNkZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFy'@;
put 'ZW50LCFkKXRocm93IG5ldyBBcig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgU3goZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxjLm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxUPV8ucHJvY2Vzc0NoaWxkcmVuP0hfKF8uc2VnbWVudEdyb3Vw'@;
put 'LF8uaW5kZXgsZi5jb21tYW5kcyk6biQoXy5zZWdtZW50R3JvdXAsXy5pbmRleCxmLmNvbW1hbmRzKTtyZXR1cm4gVU8oaCxfLnNlZ21lbnRHcm91cCxULGEsZCl9ZnVuY3Rpb24gQ3goYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiYhYy5vdXRsZXRzJiYhYy5zZWdtZW50'@;
put 'UGF0aH1mdW5jdGlvbiBGXyhjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJmMub3V0bGV0c31mdW5jdGlvbiBVTyhjLGwsYSxkLGgpe2xldCBfLGY9e307ZCYmT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW1csaWVdKT0+e2ZbV109QXJyYXkuaXNBcnJheShpZSk/aWUu'@;
put 'bWFwKGdlPT5gJHtnZX1gKTpgJHtpZX1gfSksXz1jPT09bD9hOmUkKGMsbCxhKTtjb25zdCBUPUtHKFhHKF8pKTtyZXR1cm4gbmV3ICQ2KFQsZixoKX1mdW5jdGlvbiBlJChjLGwsYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gsZl0p'@;
put 'PT57ZFtoXT1mPT09bD9hOmUkKGYsbCxhKX0pLG5ldyB5YShjLnNlZ21lbnRzLGQpfWNsYXNzIHQke2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZDeChkWzBdKSl0'@;
put 'aHJvdyBuZXcgQXIoNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoRl8pO2lmKGgmJmghPT1qRyhkKSl0aHJvdyBuZXcgQXIoNDAwNCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19fWNsYXNz'@;
put 'IFN4e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnNlZ21lbnRHcm91cD1sLHRoaXMucHJvY2Vzc0NoaWxkcmVuPWEsdGhpcy5pbmRleD1kfX1mdW5jdGlvbiBuJChjLGwsYSl7aWYoY3x8KGM9bmV3IHlhKFtdLHt9KSksMD09PWMuc2VnbWVudHMubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCkpcmV0'@;
put 'dXJuIEhfKGMsbCxhKTtjb25zdCBkPWZ1bmN0aW9uIHhkZShjLGwsYSl7bGV0IGQ9MCxoPWw7Y29uc3QgZj17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2Zvcig7aDxjLnNlZ21lbnRzLmxlbmd0aDspe2lmKGQ+PWEubGVuZ3RoKXJldHVybiBmO2NvbnN0IF89Yy5zZWdt'@;
put 'ZW50c1toXSxUPWFbZF07aWYoRl8oVCkpYnJlYWs7Y29uc3QgVz1gJHtUfWAsaWU9ZDxhLmxlbmd0aC0xP2FbZCsxXTpudWxsO2lmKGg+MCYmdm9pZCAwPT09VylicmVhaztpZihXJiZpZSYmIm9iamVjdCI9PXR5cGVvZiBpZSYmdm9pZCAwPT09aWUub3V0bGV0cyl7aWYoIWkkKFcsaWUsXykp'@;
put 'cmV0dXJuIGY7ZCs9Mn1lbHNle2lmKCFpJChXLHt9LF8pKXJldHVybiBmO2QrK31oKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDpoLGNvbW1hbmRJbmRleDpkfX0oYyxsLGEpLGg9YS5zbGljZShkLmNvbW1hbmRJbmRleCk7aWYoZC5tYXRjaCYmZC5wYXRoSW5kZXg8Yy5zZWdtZW50cy5s'@;
put 'ZW5ndGgpe2NvbnN0IGY9bmV3IHlhKGMuc2VnbWVudHMuc2xpY2UoMCxkLnBhdGhJbmRleCkse30pO3JldHVybiBmLmNoaWxkcmVuW2xzXT1uZXcgeWEoYy5zZWdtZW50cy5zbGljZShkLnBhdGhJbmRleCksYy5jaGlsZHJlbiksSF8oZiwwLGgpfXJldHVybiBkLm1hdGNoJiYwPT09aC5sZW5n'@;
put 'dGg/bmV3IHlhKGMuc2VnbWVudHMse30pOmQubWF0Y2gmJiFjLmhhc0NoaWxkcmVuKCk/Wk8oYyxsLGEpOmQubWF0Y2g/SF8oYywwLGgpOlpPKGMsbCxhKX1mdW5jdGlvbiBIXyhjLGwsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgeWEoYy5zZWdtZW50cyx7fSk7e2NvbnN0IGQ9ZnVu'@;
put 'Y3Rpb24gTWRlKGMpe3JldHVybiBGXyhjWzBdKT9jWzBdLm91dGxldHM6e1tsc106Y319KGEpLGg9e307aWYoIWRbbHNdJiZjLmNoaWxkcmVuW2xzXSYmMT09PWMubnVtYmVyT2ZDaGlsZHJlbiYmMD09PWMuY2hpbGRyZW5bbHNdLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1IXyhjLmNoaWxk'@;
put 'cmVuW2xzXSxsLGEpO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cyxmLmNoaWxkcmVuKX1yZXR1cm4gT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57InN0cmluZyI9PXR5cGVvZiBfJiYoXz1bX10pLG51bGwhPT1fJiYoaFtmXT1uJChjLmNoaWxkcmVuW2ZdLGwsXykpfSksT2Jq'@;
put 'ZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2YsX10pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09Xyl9KSxuZXcgeWEoYy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gWk8oYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7'@;
put 'Y29uc3QgZj1hW2hdO2lmKEZfKGYpKXtjb25zdCBXPUVkZShmLm91dGxldHMpO3JldHVybiBuZXcgeWEoZCxXKX1pZigwPT09aCYmQ3goYVswXSkpe2QucHVzaChuZXcgUl8oYy5zZWdtZW50c1tsXS5wYXRoLHIkKGFbMF0pKSksaCsrO2NvbnRpbnVlfWNvbnN0IF89Rl8oZik/Zi5vdXRsZXRz'@;
put 'W2xzXTpgJHtmfWAsVD1oPGEubGVuZ3RoLTE/YVtoKzFdOm51bGw7XyYmVCYmQ3goVCk/KGQucHVzaChuZXcgUl8oXyxyJChUKSkpLGgrPTIpOihkLnB1c2gobmV3IFJfKF8se30pKSxoKyspfXJldHVybiBuZXcgeWEoZCx7fSl9ZnVuY3Rpb24gRWRlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9i'@;
put 'amVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+eyJzdHJpbmciPT10eXBlb2YgZCYmKGQ9W2RdKSxudWxsIT09ZCYmKGxbYV09Wk8obmV3IHlhKFtdLHt9KSwwLGQpKX0pLGx9ZnVuY3Rpb24gciQoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgo'@;
put 'W2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBpJChjLGwsYSl7cmV0dXJuIGM9PWEucGF0aCYmcmgobCxhLnBhcmFtZXRlcnMpfWNvbnN0IE5fPSJpbXBlcmF0aXZlIjtjbGFzcyBpaHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLnVybD1hfX1jbGFzcyBZTyBleHRlbmRz'@;
put 'IGloe2NvbnN0cnVjdG9yKGwsYSxkPSJpbXBlcmF0aXZlIixoPW51bGwpe3N1cGVyKGwsYSksdGhpcy50eXBlPTAsdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcj1kLHRoaXMucmVzdG9yZWRTdGF0ZT1ofXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJs'@;
put 'OiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIGhwIGV4dGVuZHMgaWh7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMudHlwZT0xfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhp'@;
put 'cy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9JylgfX1jbGFzcyBNeCBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9Mn10b1N0cmluZygpe3JldHVy'@;
put 'bmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3MgVl8gZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPTE2fX1jbGFzcyBXTyBleHRlbmRz'@;
put 'IGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRoaXMudGFyZ2V0PWgsdGhpcy50eXBlPTN9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVycm9yKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIGVycm9yOiAke3RoaXMuZXJyb3J9'@;
put 'KWB9fWNsYXNzIGtkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9NH10b1N0cmluZygpe3JldHVybmBSb3V0ZXNSZWNvZ25pemVkKGlkOiAke3RoaXMuaWR9LCB1cmw6ICck'@;
put 'e3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIEFkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRo'@;
put 'aXMuc3RhdGU9aCx0aGlzLnR5cGU9N310b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja1N0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9'@;
put 'fWNsYXNzIFRkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMuc2hvdWxkQWN0aXZhdGU9Zix0aGlzLnR5cGU9OH10b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja0VuZChpZDog'@;
put 'JHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYH19Y2xhc3MgRGRlIGV4dGVuZHMgaWh7'@;
put 'Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT01fXRvU3RyaW5nKCl7cmV0dXJuYFJlc29sdmVTdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0'@;
put 'czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBJZGUgZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy50eXBlPTZ9dG9TdHJp'@;
put 'bmcoKXtyZXR1cm5gUmVzb2x2ZUVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBMZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0'@;
put 'ZT1sLHRoaXMudHlwZT05fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBSZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT0xMH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xv'@;
put 'YWRFbmQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIE9kZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTExfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRo'@;
put 'aXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBQZGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMudHlwZT0xMn10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYm'@;
put 'dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIEZkZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTEzfXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0'@;
put 'aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgSGRle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9MTR9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlz'@;
put 'LnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgbyR7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9MTV9dG9TdHJpbmcoKXtyZXR1cm5gU2Nyb2xsKGFuY2hvcjogJyR7dGhp'@;
put 'cy5hbmNob3J9JywgcG9zaXRpb246ICcke3RoaXMucG9zaXRpb24/YCR7dGhpcy5wb3NpdGlvblswXX0sICR7dGhpcy5wb3NpdGlvblsxXX1gOm51bGx9JylgfX1jbGFzcyBOZGV7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldD1udWxsLHRoaXMucm91dGU9bnVsbCx0aGlzLmluamVjdG9yPW51'@;
put 'bGwsdGhpcy5jaGlsZHJlbj1uZXcgQl8sdGhpcy5hdHRhY2hSZWY9bnVsbH19bGV0IEJfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHRzPW5ldyBNYXB9b25DaGlsZE91dGxldENyZWF0ZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KGEpO2gu'@;
put 'b3V0bGV0PWQsdGhpcy5jb250ZXh0cy5zZXQoYSxoKX1vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGEpe2NvbnN0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO2QmJihkLm91dGxldD1udWxsLGQuYXR0YWNoUmVmPW51bGwpfW9uT3V0bGV0RGVhY3RpdmF0ZWQoKXtjb25zdCBhPXRoaXMuY29udGV4dHM7'@;
put 'cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCxhfW9uT3V0bGV0UmVBdHRhY2hlZChhKXt0aGlzLmNvbnRleHRzPWF9Z2V0T3JDcmVhdGVDb250ZXh0KGEpe2xldCBkPXRoaXMuZ2V0Q29udGV4dChhKTtyZXR1cm4gZHx8KGQ9bmV3IE5kZSx0aGlzLmNvbnRleHRzLnNldChhLGQpKSxkfWdl'@;
put 'dENvbnRleHQoYSl7cmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KGEpfHxudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSko'@;
put 'KTtjbGFzcyBzJHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9yb290PWx9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdC52YWx1ZX1wYXJlbnQobCl7Y29uc3QgYT10aGlzLnBhdGhGcm9tUm9vdChsKTtyZXR1cm4gYS5sZW5ndGg+MT9hW2EubGVuZ3RoLTJdOm51bGx9Y2hpbGRyZW4obCl7Y29u'@;
put 'c3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhP2EuY2hpbGRyZW4ubWFwKGQ9PmQudmFsdWUpOltdfWZpcnN0Q2hpbGQobCl7Y29uc3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhJiZhLmNoaWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF0udmFsdWU6bnVsbH1zaWJsaW5ncyhs'@;
put 'KXtjb25zdCBhPSRPKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGEubGVuZ3RoPDI/W106YVthLmxlbmd0aC0yXS5jaGlsZHJlbi5tYXAoaD0+aC52YWx1ZSkuZmlsdGVyKGg9PmghPT1sKX1wYXRoRnJvbVJvb3QobCl7cmV0dXJuICRPKGwsdGhpcy5fcm9vdCkubWFwKGE9PmEudmFsdWUpfX1mdW5j'@;
put 'dGlvbiBHTyhjLGwpe2lmKGM9PT1sLnZhbHVlKXJldHVybiBsO2Zvcihjb25zdCBhIG9mIGwuY2hpbGRyZW4pe2NvbnN0IGQ9R08oYyxhKTtpZihkKXJldHVybiBkfXJldHVybiBudWxsfWZ1bmN0aW9uICRPKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuW2xdO2Zvcihjb25zdCBhIG9mIGwu'@;
put 'Y2hpbGRyZW4pe2NvbnN0IGQ9JE8oYyxhKTtpZihkLmxlbmd0aClyZXR1cm4gZC51bnNoaWZ0KGwpLGR9cmV0dXJuW119Y2xhc3MgeGZ7Y29uc3RydWN0b3IobCxhKXt0aGlzLnZhbHVlPWwsdGhpcy5jaGlsZHJlbj1hfXRvU3RyaW5nKCl7cmV0dXJuYFRyZWVOb2RlKCR7dGhpcy52YWx1ZX0p'@;
put 'YH19ZnVuY3Rpb24gcTYoYyl7Y29uc3QgbD17fTtyZXR1cm4gYyYmYy5jaGlsZHJlbi5mb3JFYWNoKGE9PmxbYS52YWx1ZS5vdXRsZXRdPWEpLGx9Y2xhc3MgYSQgZXh0ZW5kcyBzJHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwpLHRoaXMuc25hcHNob3Q9YSxxTyh0aGlzLGwpfXRvU3RyaW5n'@;
put 'KCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX19ZnVuY3Rpb24gbCQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIFZkZShjLGwpe2NvbnN0IF89bmV3IHh4KFtdLHt9LHt9LCIiLHt9LGxzLGwsbnVsbCx7fSk7cmV0dXJuIG5ldyB1JCgiIixuZXcgeGYoXyxbXSkpfSgwLGwpLGQ9bmV3'@;
put 'IFRlKFtuZXcgUl8oIiIse30pXSksaD1uZXcgVGUoe30pLGY9bmV3IFRlKHt9KSxfPW5ldyBUZSh7fSksVD1uZXcgVGUoIiIpLFc9bmV3IFdsKGQsaCxfLFQsZixscyxsLGEucm9vdCk7cmV0dXJuIFcuc25hcHNob3Q9YS5yb290LG5ldyBhJChuZXcgeGYoVyxbXSksYSl9Y2xhc3MgV2x7Y29u'@;
put 'c3RydWN0b3IobCxhLGQsaCxmLF8sVCxXKXt0aGlzLnVybFN1YmplY3Q9bCx0aGlzLnBhcmFtc1N1YmplY3Q9YSx0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdD1kLHRoaXMuZnJhZ21lbnRTdWJqZWN0PWgsdGhpcy5kYXRhU3ViamVjdD1mLHRoaXMub3V0bGV0PV8sdGhpcy5jb21wb25lbnQ9VCx0'@;
put 'aGlzLl9mdXR1cmVTbmFwc2hvdD1XLHRoaXMudGl0bGU9dGhpcy5kYXRhU3ViamVjdD8ucGlwZShNZShpZT0+aWVbTF9dKSk/P1dpKHZvaWQgMCksdGhpcy51cmw9bCx0aGlzLnBhcmFtcz1hLHRoaXMucXVlcnlQYXJhbXM9ZCx0aGlzLmZyYWdtZW50PWgsdGhpcy5kYXRhPWZ9Z2V0IHJvdXRl'@;
put 'Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4g'@;
put 'dGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9Z2V0IHBhdGhGcm9tUm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9Z2V0IHBhcmFtTWFw'@;
put 'KCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dGhpcy5wYXJhbXMucGlwZShNZShsPT5HNihsKSkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD10aGlzLnF1'@;
put 'ZXJ5UGFyYW1zLnBpcGUoTWUobD0+RzYobCkpKSksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5fZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIGMkKGMsbD0iZW1wdHlP'@;
put 'bmx5Iil7Y29uc3QgYT1jLnBhdGhGcm9tUm9vdDtsZXQgZD0wO2lmKCJhbHdheXMiIT09bClmb3IoZD1hLmxlbmd0aC0xO2Q+PTE7KXtjb25zdCBoPWFbZF0sZj1hW2QtMV07aWYoaC5yb3V0ZUNvbmZpZyYmIiI9PT1oLnJvdXRlQ29uZmlnLnBhdGgpZC0tO2Vsc2V7aWYoZi5jb21wb25lbnQp'@;
put 'YnJlYWs7ZC0tfX1yZXR1cm4gZnVuY3Rpb24gQmRlKGMpe3JldHVybiBjLnJlZHVjZSgobCxhKT0+KHtwYXJhbXM6ey4uLmwucGFyYW1zLC4uLmEucGFyYW1zfSxkYXRhOnsuLi5sLmRhdGEsLi4uYS5kYXRhfSxyZXNvbHZlOnsuLi5hLmRhdGEsLi4ubC5yZXNvbHZlLC4uLmEucm91dGVDb25m'@;
put 'aWc/LmRhdGEsLi4uYS5fcmVzb2x2ZWREYXRhfX0pLHtwYXJhbXM6e30sZGF0YTp7fSxyZXNvbHZlOnt9fSl9KGEuc2xpY2UoZCkpfWNsYXNzIHh4e2dldCB0aXRsZSgpe3JldHVybiB0aGlzLmRhdGE/LltMX119Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnVybD1sLHRo'@;
put 'aXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD1fLHRoaXMuY29tcG9uZW50PVQsdGhpcy5yb3V0ZUNvbmZpZz1XLHRoaXMuX3Jlc29sdmU9aWV9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9v'@;
put 'dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlz'@;
put 'KX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD1HNih0aGlzLnBhcmFtcykpLHRoaXMuX3BhcmFtTWFwfWdldCBxdWVyeVBhcmFt'@;
put 'TWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlKHVybDonJHt0aGlzLnVybC5tYXAoZD0+ZC50b1N0cmluZygpKS5qb2luKCIv'@;
put 'Iil9JywgcGF0aDonJHt0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIn0nKWB9fWNsYXNzIHUkIGV4dGVuZHMgcyR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLHFPKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gZCQodGhpcy5fcm9vdCl9fWZ1'@;
put 'bmN0aW9uIHFPKGMsbCl7bC52YWx1ZS5fcm91dGVyU3RhdGU9YyxsLmNoaWxkcmVuLmZvckVhY2goYT0+cU8oYyxhKSl9ZnVuY3Rpb24gZCQoYyl7Y29uc3QgbD1jLmNoaWxkcmVuLmxlbmd0aD4wP2AgeyAke2MuY2hpbGRyZW4ubWFwKGQkKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7'@;
put 'Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiBLTyhjKXtpZihjLnNuYXBzaG90KXtjb25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNuYXBzaG90PWEscmgobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFy'@;
put 'YW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5mcmFnbWVudFN1YmplY3QubmV4dChhLmZyYWdtZW50KSxyaChsLnBhcmFtcyxhLnBhcmFtcyl8fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiB0ZGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVy'@;
put 'biExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlmKCFyaChjW2FdLGxbYV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJsU3ViamVjdC5uZXh0KGEudXJsKSxyaChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBz'@;
put 'aG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1YmplY3QubmV4dChjLl9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBYTyhjLGwpe2NvbnN0IGE9cmgoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBvZGUoYyxsKXtyZXR1cm4gVDUoYyxsKSYmYy5ldmVyeSgoYSxkKT0+cmgo'@;
put 'YS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxYTyhjLnBhcmVudCxsLnBhcmVudCkpfWxldCBmcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmF0ZWQ9'@;
put 'bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1scyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBFcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEVyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBFcix0aGlzLmRldGFjaEV2ZW50cz1uZXcgRXIsdGhpcy5wYXJlbnRDb250'@;
put 'ZXh0cz1GaShCXyksdGhpcy5sb2NhdGlvbj1GaShhcyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1GaShVYSksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPUZpKHEwKSx0aGlzLmlucHV0QmluZGVyPUZpKEV4LHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1'@;
put 'dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1cm47dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRl'@;
put 'eHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyh0aGlzLm5hbWUpJiZ0'@;
put 'aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250'@;
put 'ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKSx0aGlzLmFjdGl2YXRl'@;
put 'ZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEucm91dGUsYS5pbmplY3RvcikpfWdldCBpc0FjdGl2'@;
put 'YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBu'@;
put 'ZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhy'@;
put 'b3cgbmV3IEFyKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoYS5pbnN0YW5jZSksYX1hdHRhY2goYSxk'@;
put 'KXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hFdmVudHMuZW1pdChhLmluc3Rh'@;
put 'bmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdChhKX19YWN0'@;
put 'aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sXz1hLnNuYXBzaG90LmNvbXBvbmVudCxUPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0'@;
put 'KHRoaXMubmFtZSkuY2hpbGRyZW4sVz1uZXcgamRlKGEsVCxoLmluamVjdG9yKTt0aGlzLmFjdGl2YXRlZD1oLmNyZWF0ZUNvbXBvbmVudChfLHtpbmRleDpoLmxlbmd0aCxpbmplY3RvcjpXLGVudmlyb25tZW50SW5qZWN0b3I6ZD8/dGhpcy5lbnZpcm9ubWVudEluamVjdG9yfSksdGhpcy5j'@;
put 'aGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxvdXRwdXRzOnthY3RpdmF0ZUV2ZW50czoiYWN0aXZhdGUiLGRlYWN0aXZhdGVFdmVudHM6ImRlYWN0aXZhdGUiLGF0'@;
put 'dGFjaEV2ZW50czoiYXR0YWNoIixkZXRhY2hFdmVudHM6ImRldGFjaCJ9LGV4cG9ydEFzOlsib3V0bGV0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdmFdfSksY30pKCk7Y2xhc3MgamRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhp'@;
put 'cy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PVdsP3RoaXMucm91dGU6bD09PUJfP3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgRXg9bmV3IE1pKCIiKTtsZXQgaCQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0RGF0YVN1'@;
put 'YnNjcmlwdGlvbnM9bmV3IE1hcH1iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudChhKXt0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGEpfXVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKXt0aGlzLm91dGxldERhdGFT'@;
put 'dWJzY3JpcHRpb25zLmdldChhKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShhKX1zdWJzY3JpYmVUb1JvdXRlRGF0YShhKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpkfT1hLGg9WTYoW2QucXVlcnlQYXJhbXMsZC5wYXJhbXMsZC5kYXRhXSkucGlw'@;
put 'ZShTYSgoW2YsXyxUXSxXKT0+KFQ9ey4uLmYsLi4uXywuLi5UfSwwPT09Vz9XaShUKTpQcm9taXNlLnJlc29sdmUoVCkpKSkuc3Vic2NyaWJlKGY9PntpZighYS5pc0FjdGl2YXRlZHx8IWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmfHxhLmFjdGl2YXRlZFJvdXRlIT09ZHx8bnVsbD09PWQuY29t'@;
put 'cG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpO2NvbnN0IF89ZnVuY3Rpb24gQ3VlKGMpe2NvbnN0IGw9UW8oYyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgaDUobCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBhLnNlbGVjdG9y'@;
put 'fSxnZXQgdHlwZSgpe3JldHVybiBhLmNvbXBvbmVudFR5cGV9LGdldCBpbnB1dHMoKXtyZXR1cm4gYS5pbnB1dHN9LGdldCBvdXRwdXRzKCl7cmV0dXJuIGEub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiBhLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRh'@;
put 'bG9uZSgpe3JldHVybiBsLnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgpe3JldHVybiBsLnNpZ25hbHN9fX0oZC5jb21wb25lbnQpO2lmKF8pZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTpUfW9mIF8uaW5wdXRzKWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KFQsZltUXSk7ZWxzZSB0'@;
put 'aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKX0pO3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGEsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh'@;
put 'Y30pLGN9KSgpO2Z1bmN0aW9uIGpfKGMsbCxhKXtpZihhJiZjLnNob3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiBVZGUoYyxsLGEpe3JldHVybiBsLmNoaWxk'@;
put 'cmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilpZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gal8oYyxkLGgpO3JldHVybiBqXyhjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IHhmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNo'@;
put 'KGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7aWYobnVsbCE9PWYpe2NvbnN0IF89Zi5yb3V0ZTtyZXR1cm4gXy52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSxfLmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKFQ9PmpfKGMsVCkpLF99fWNvbnN0IGQ9ZnVuY3Rpb24g'@;
put 'WmRlKGMpe3JldHVybiBuZXcgV2wobmV3IFRlKGMudXJsKSxuZXcgVGUoYy5wYXJhbXMpLG5ldyBUZShjLnF1ZXJ5UGFyYW1zKSxuZXcgVGUoYy5mcmFnbWVudCksbmV3IFRlKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+al8o'@;
put 'YyxmKSk7cmV0dXJuIG5ldyB4ZihkLGgpfX1jb25zdCBKTz0ibmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IiO2Z1bmN0aW9uIGYkKGMsbCl7Y29uc3R7cmVkaXJlY3RUbzphLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6ZH09RDUobCk/e3JlZGlyZWN0VG86bCxuYXZpZ2F0aW9uQmVoYXZp'@;
put 'b3JPcHRpb25zOnZvaWQgMH06bCxoPXAkKCExLDAsbCk7cmV0dXJuIGgudXJsPWEsaC5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zPWQsaH1mdW5jdGlvbiBwJChjLGwsYSl7Y29uc3QgZD1uZXcgRXJyb3IoIk5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogIisoY3x8IiIpKTtyZXR1cm4gZFtK'@;
put 'T109ITAsZC5jYW5jZWxsYXRpb25Db2RlPWwsYSYmKGQudXJsPWEpLGR9ZnVuY3Rpb24gZyQoYyl7cmV0dXJuIG0kKGMpJiZENShjLnVybCl9ZnVuY3Rpb24gbSQoYyl7cmV0dXJuIGMmJmNbSk9dfWxldCB2JD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3BZXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxk'@;
put 'ZXBlbmRlbmNpZXM6W2ZwXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtmdW5jdGlvbiBRTyhjKXtjb25zdCBsPWMuY2hpbGRyZW4mJmMuY2hpbGRyZW4ubWFwKFFPKSxhPWw/ey4uLmMsY2hpbGRyZW46bH06ey4uLmN9O3JldHVybiFhLmNvbXBvbmVudCYmIWEubG9hZENvbXBvbmVudCYmKGx8'@;
put 'fGEubG9hZENoaWxkcmVuKSYmYS5vdXRsZXQmJmEub3V0bGV0IT09bHMmJihhLmNvbXBvbmVudD12JCksYX1mdW5jdGlvbiB0MihjKXtyZXR1cm4gYy5vdXRsZXR8fGxzfWZ1bmN0aW9uIHpfKGMpe2lmKCFjKXJldHVybiBudWxsO2lmKGMucm91dGVDb25maWc/Ll9pbmplY3RvcilyZXR1cm4g'@;
put 'Yy5yb3V0ZUNvbmZpZy5faW5qZWN0b3I7Zm9yKGxldCBsPWMucGFyZW50O2w7bD1sLnBhcmVudCl7Y29uc3QgYT1sLnJvdXRlQ29uZmlnO2lmKGE/Ll9sb2FkZWRJbmplY3RvcilyZXR1cm4gYS5fbG9hZGVkSW5qZWN0b3I7aWYoYT8uX2luamVjdG9yKXJldHVybiBhLl9pbmplY3Rvcn1yZXR1'@;
put 'cm4gbnVsbH1jbGFzcyBYZGV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1sLHRoaXMuZnV0dXJlU3RhdGU9YSx0aGlzLmN1cnJTdGF0ZT1kLHRoaXMuZm9yd2FyZEV2ZW50PWgsdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPWZ9YWN0aXZhdGUobCl7Y29u'@;
put 'c3QgYT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LGQ9dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCksS08odGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoYSxkLGwpfWRl'@;
put 'YWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCl7Y29uc3QgaD1xNihhKTtsLmNoaWxkcmVuLmZvckVhY2goZj0+e2NvbnN0IF89Zi52YWx1ZS5vdXRsZXQ7dGhpcy5kZWFjdGl2YXRlUm91dGVzKGYsaFtfXSxkKSxkZWxldGUgaFtfXX0pLE9iamVjdC52YWx1ZXMoaCkuZm9yRWFjaChmPT57dGhp'@;
put 'cy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmLGQpfSl9ZGVhY3RpdmF0ZVJvdXRlcyhsLGEsZCl7Y29uc3QgaD1sLnZhbHVlLGY9YT9hLnZhbHVlOm51bGw7aWYoaD09PWYpaWYoaC5jb21wb25lbnQpe2NvbnN0IF89ZC5nZXRDb250ZXh0KGgub3V0bGV0KTtfJiZ0aGlzLmRlYWN0'@;
put 'aXZhdGVDaGlsZFJvdXRlcyhsLGEsXy5jaGlsZHJlbil9ZWxzZSB0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBmJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGEsZCl9ZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4obCxhKXtsLnZhbHVlLmNv'@;
put 'bXBvbmVudCYmdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkRGV0YWNoKGwudmFsdWUuc25hcHNob3QpP3RoaXMuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKTp0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChsLGEpfWRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGws'@;
put 'YSl7Y29uc3QgZD1hLmdldENvbnRleHQobC52YWx1ZS5vdXRsZXQpLGg9ZCYmbC52YWx1ZS5jb21wb25lbnQ/ZC5jaGlsZHJlbjphLGY9cTYobCk7Zm9yKGNvbnN0IF8gb2YgT2JqZWN0LmtleXMoZikpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmW19dLGgpO2lmKGQmJmQu'@;
put 'b3V0bGV0KXtjb25zdCBfPWQub3V0bGV0LmRldGFjaCgpLFQ9ZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUobC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOl8scm91dGU6bCxjb250ZXh0czpUfSl9fWRlYWN0aXZhdGVS'@;
put 'b3V0ZUFuZE91dGxldChsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPXE2KGwpO2Zvcihjb25zdCBfIG9mIE9iamVjdC5rZXlzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4o'@;
put 'ZltfXSxoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPXE2KGEpO2wuY2hpbGRyZW4uZm9y'@;
put 'RWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBIZGUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBQZGUobC52YWx1ZS5zbmFwc2hvdCkpfWFj'@;
put 'dGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihLTyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxfLmNoaWxkcmVuKX1l'@;
put 'bHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBUPXRoaXMucm91'@;
put 'dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksXy5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoVC5jb250ZXh0cyksXy5hdHRhY2hSZWY9VC5jb21wb25lbnRSZWYsXy5yb3V0ZT1ULnJv'@;
put 'dXRlLnZhbHVlLF8ub3V0bGV0JiZfLm91dGxldC5hdHRhY2goVC5jb21wb25lbnRSZWYsVC5yb3V0ZS52YWx1ZSksS08oVC5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCxfLmNoaWxkcmVuKX1lbHNle2NvbnN0IFQ9el8oaC5zbmFwc2hvdCk7Xy5hdHRhY2hS'@;
put 'ZWY9bnVsbCxfLnJvdXRlPWgsXy5pbmplY3Rvcj1ULF8ub3V0bGV0JiZfLm91dGxldC5hY3RpdmF0ZVdpdGgoaCxfLmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLF8uY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNs'@;
put 'YXNzIF8ke2NvbnN0cnVjdG9yKGwpe3RoaXMucGF0aD1sLHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19fWNsYXNzIGt4e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5jb21wb25lbnQ9bCx0aGlzLnJvdXRlPWF9fWZ1bmN0aW9uIEpkZShjLGwsYSl7Y29uc3QgZD1jLl9y'@;
put 'b290O3JldHVybiBVXyhkLGw/bC5fcm9vdDpudWxsLGEsW2QudmFsdWVdKX1mdW5jdGlvbiBLNihjLGwpe2NvbnN0IGE9U3ltYm9sKCksZD1sLmdldChjLGEpO3JldHVybiBkPT09YT8iZnVuY3Rpb24iIT10eXBlb2YgY3x8ZnVuY3Rpb24gcTcoYyl7cmV0dXJuIG51bGwhPT14ZChjKX0oYyk/'@;
put 'bC5nZXQoYyk6YzpkfWZ1bmN0aW9uIFVfKGMsbCxhLGQsaD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9cTYobCk7cmV0dXJuIGMuY2hpbGRyZW4uZm9yRWFjaChfPT57KGZ1bmN0aW9uIGUyZShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVD'@;
put 'aGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWMudmFsdWUsXz1sP2wudmFsdWU6bnVsbCxUPWE/YS5nZXRDb250ZXh0KGMudmFsdWUub3V0bGV0KTpudWxsO2lmKF8mJmYucm91dGVDb25maWc9PT1fLnJvdXRlQ29uZmlnKXtjb25zdCBXPWZ1bmN0aW9uIHQyZShjLGws'@;
put 'YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpcmV0dXJuIGEoYyxsKTtzd2l0Y2goYSl7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4hVDUoYy51cmwsbC51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFUNShjLnVybCxsLnVybCl8fCFyaChjLnF1'@;
put 'ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFYTyhjLGwpfHwhcmgoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtkZWZhdWx0OnJldHVybiFYTyhjLGwpfX0oXyxmLGYucm91dGVD'@;
put 'b25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtXP2guY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgXyQoZCkpOihmLmRhdGE9Xy5kYXRhLGYuX3Jlc29sdmVkRGF0YT1fLl9yZXNvbHZlZERhdGEpLFVfKGMsbCxmLmNvbXBvbmVudD9UP1QuY2hpbGRyZW46bnVsbDphLGQsaCksVyYmVCYm'@;
put 'VC5vdXRsZXQmJlQub3V0bGV0LmlzQWN0aXZhdGVkJiZoLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcga3goVC5vdXRsZXQuY29tcG9uZW50LF8pKX1lbHNlIF8mJlpfKGwsVCxoKSxoLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IF8kKGQpKSxVXyhjLG51bGwsZi5jb21wb25lbnQ/'@;
put 'VD9ULmNoaWxkcmVuOm51bGw6YSxkLGgpfSkoXyxmW18udmFsdWUub3V0bGV0XSxhLGQuY29uY2F0KFtfLnZhbHVlXSksaCksZGVsZXRlIGZbXy52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW18sVF0pPT5aXyhULGEuZ2V0Q29udGV4dChfKSxoKSksaH1mdW5j'@;
put 'dGlvbiBaXyhjLGwsYSl7Y29uc3QgZD1xNihjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57Wl8oXyxoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcga3go'@;
put 'aC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxldC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gWV8oYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gYiQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBneHx8IkVtcHR5RXJy'@;
put 'b3IiPT09Yz8ubmFtZX1jb25zdCBBeD1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBYNigpe3JldHVybiBTYShjPT5ZNihjLm1hcChsPT5sLnBpcGUoaWQoMSksY3AoQXgpKSkpLnBpcGUoTWUobD0+e2Zvcihjb25zdCBhIG9mIGwpaWYoITAhPT1hKXtpZihhPT09QXgpcmV0dXJu'@;
put 'IEF4O2lmKCExPT09YXx8YSBpbnN0YW5jZW9mICQ2KXJldHVybiBhfXJldHVybiEwfSksSWEobD0+bCE9PUF4KSxpZCgxKSkpfWZ1bmN0aW9uIHkkKGMpe3JldHVybiBmdW5jdGlvbiBqZSguLi5jKXtyZXR1cm4gV2UoYyl9KHpjKGw9PntpZihENShsKSl0aHJvdyBmJCgwLGwpfSksTWUobD0+'@;
put 'ITA9PT1sKSl9Y2xhc3MgVHh7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9bHx8bnVsbH19Y2xhc3MgdyR7Y29uc3RydWN0b3IobCl7dGhpcy51cmxUcmVlPWx9fWZ1bmN0aW9uIEo2KGMpe3JldHVybiBEXyhuZXcgVHgoYykpfWZ1bmN0aW9uIEMkKGMpe3JldHVybiBEXyhuZXcg'@;
put 'dyQoYykpfWNsYXNzIHcyZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMudXJsU2VyaWFsaXplcj1sLHRoaXMudXJsVHJlZT1hfW5vTWF0Y2hFcnJvcihsKXtyZXR1cm4gbmV3IEFyKDQwMDIsITEpfWxpbmVyYWxpemVTZWdtZW50cyhsLGEpe2xldCBkPVtdLGg9YS5yb290O2Zvcig7Oyl7aWYoZD1k'@;
put 'LmNvbmNhdChoLnNlZ21lbnRzKSwwPT09aC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBXaShkKTtpZihoLm51bWJlck9mQ2hpbGRyZW4+MXx8IWguY2hpbGRyZW5bbHNdKXJldHVybiBEXyhuZXcgQXIoNGUzLCExKSk7aD1oLmNoaWxkcmVuW2xzXX19YXBwbHlSZWRpcmVjdENvbW1hbmRzKGws'@;
put 'YSxkKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhKSxsLGQpfWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1'@;
put 'cm4gbmV3ICQ2KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9Pntp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBUPWYuc3Vic3RyaW5nKDEpO2RbaF09YVtUXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTts'@;
put 'ZXQgXz17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW1QsV10pPT57X1tUXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLFcsZCxoKX0pLG5ldyB5YShmLF8pfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRz'@;
put 'V2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQpKX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgQXIoNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7'@;
put 'bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3BsaWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBlUD17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25h'@;
put 'bFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIEMyZShjLGwsYSxkLGgpe2NvbnN0IGY9dFAoYyxsLGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gWWRlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1BUihjLnByb3ZpZGVycyxsLGBS'@;
put 'b3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIF8yZShjLGwsYSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9XaShoLm1hcChfPT57Y29uc3QgVD1LNihfLGMpO3JldHVybiBkcChmdW5jdGlvbiBhMmUoYyl7cmV0dXJu'@;
put 'IGMmJllfKGMuY2FuTWF0Y2gpfShUKT9ULmNhbk1hdGNoKGwsYSk6Yy5ydW5JbkNvbnRleHQoKCk9PlQobCxhKSkpfSkpLnBpcGUoWDYoKSx5JCgpKTpXaSghMCl9KGQsbCxhKS5waXBlKE1lKF89PiEwPT09Xz9mOnsuLi5lUH0pKSk6V2koZil9ZnVuY3Rpb24gdFAoYyxsLGEpe2lmKCIiPT09'@;
put 'bC5wYXRoKXJldHVybiJmdWxsIj09PWwucGF0aE1hdGNoJiYoYy5oYXNDaGlsZHJlbigpfHxhLmxlbmd0aD4wKT97Li4uZVB9OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6YSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9'@;
put 'fTtjb25zdCBoPShsLm1hdGNoZXJ8fGVkZSkoYSxjLGwpO2lmKCFoKXJldHVybnsuLi5lUH07Y29uc3QgZj17fTtPYmplY3QuZW50cmllcyhoLnBvc1BhcmFtcz8/e30pLmZvckVhY2goKFtULFddKT0+e2ZbVF09Vy5wYXRofSk7Y29uc3QgXz1oLmNvbnN1bWVkLmxlbmd0aD4wP3suLi5mLC4u'@;
put 'LmguY29uc3VtZWRbaC5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVyc306ZjtyZXR1cm57bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOmguY29uc3VtZWQscmVtYWluaW5nU2VnbWVudHM6YS5zbGljZShoLmNvbnN1bWVkLmxlbmd0aCkscGFyYW1ldGVyczpfLHBvc2l0aW9uYWxQYXJh'@;
put 'bVNlZ21lbnRzOmgucG9zUGFyYW1zPz97fX19ZnVuY3Rpb24gUyQoYyxsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjAmJmZ1bmN0aW9uIHgyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5EeChjLGwsZCkmJnQyKGQpIT09bHMpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEobCxNMmUoZCxu'@;
put 'ZXcgeWEoYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1bmN0aW9uIEUyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5EeChjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxTMmUoYywwLGEsZCxjLmNoaWxkcmVu'@;
put 'KSksc2xpY2VkU2VnbWVudHM6YX06e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxjLmNoaWxkcmVuKSxzbGljZWRTZWdtZW50czphfX1mdW5jdGlvbiBTMmUoYyxsLGEsZCxoKXtjb25zdCBmPXt9O2Zvcihjb25zdCBfIG9mIGQpaWYoRHgoYyxhLF8pJiYhaFt0MihfKV0pe2NvbnN0'@;
put 'IFQ9bmV3IHlhKFtdLHt9KTtmW3QyKF8pXT1UfXJldHVybnsuLi5oLC4uLmZ9fWZ1bmN0aW9uIE0yZShjLGwpe2NvbnN0IGE9e307YVtsc109bDtmb3IoY29uc3QgZCBvZiBjKWlmKCIiPT09ZC5wYXRoJiZ0MihkKSE9PWxzKXtjb25zdCBoPW5ldyB5YShbXSx7fSk7YVt0MihkKV09aH1yZXR1'@;
put 'cm4gYX1mdW5jdGlvbiBEeChjLGwsYSl7cmV0dXJuKCEoYy5oYXNDaGlsZHJlbigpfHxsLmxlbmd0aD4wKXx8ImZ1bGwiIT09YS5wYXRoTWF0Y2gpJiYiIj09PWEucGF0aH1jbGFzcyBEMmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCl7dGhpcy5pbmplY3Rvcj1sLHRoaXMuY29uZmlnTG9h'@;
put 'ZGVyPWEsdGhpcy5yb290Q29tcG9uZW50VHlwZT1kLHRoaXMuY29uZmlnPWgsdGhpcy51cmxUcmVlPWYsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PV8sdGhpcy51cmxTZXJpYWxpemVyPVQsdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLmFwcGx5UmVkaXJlY3RzPW5ldyB3MmUo'@;
put 'dGhpcy51cmxTZXJpYWxpemVyLHRoaXMudXJsVHJlZSl9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgQXIoNDAwMiwhMSl9cmVjb2duaXplKCl7Y29uc3QgbD1TJCh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwO3JldHVybiB0aGlzLnByb2Nlc3NT'@;
put 'ZWdtZW50R3JvdXAodGhpcy5pbmplY3Rvcix0aGlzLmNvbmZpZyxsLGxzKS5waXBlKEE1KGE9PntpZihhIGluc3RhbmNlb2YgdyQpcmV0dXJuIHRoaXMuYWxsb3dSZWRpcmVjdHM9ITEsdGhpcy51cmxUcmVlPWEudXJsVHJlZSx0aGlzLm1hdGNoKGEudXJsVHJlZSk7dGhyb3cgYSBpbnN0YW5j'@;
put 'ZW9mIFR4P3RoaXMubm9NYXRjaEVycm9yKGEpOmF9KSxNZShhPT57Y29uc3QgZD1uZXcgeHgoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGxzLHRoaXMucm9vdENvbXBvbmVu'@;
put 'dFR5cGUsbnVsbCx7fSksaD1uZXcgeGYoZCxhKSxmPW5ldyB1JCgiIixoKSxfPWZ1bmN0aW9uIHlkZShjLGwsYT1udWxsLGQ9bnVsbCl7cmV0dXJuIFFHKEpHKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gXy5x'@;
put 'dWVyeVBhcmFtcz10aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfKSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QpLHtzdGF0ZTpmLHRyZWU6X319KSl9bWF0Y2gobCl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRH'@;
put 'cm91cCh0aGlzLmluamVjdG9yLHRoaXMuY29uZmlnLGwucm9vdCxscykucGlwZShBNShkPT57dGhyb3cgZCBpbnN0YW5jZW9mIFR4P3RoaXMubm9NYXRjaEVycm9yKGQpOmR9KSl9aW5oZXJpdFBhcmFtc0FuZERhdGEobCl7Y29uc3QgYT1sLnZhbHVlLGQ9YyQoYSx0aGlzLnBhcmFtc0luaGVy'@;
put 'aXRhbmNlU3RyYXRlZ3kpO2EucGFyYW1zPU9iamVjdC5mcmVlemUoZC5wYXJhbXMpLGEuZGF0YT1PYmplY3QuZnJlZXplKGQuZGF0YSksbC5jaGlsZHJlbi5mb3JFYWNoKGg9PnRoaXMuaW5oZXJpdFBhcmFtc0FuZERhdGEoaCkpfXByb2Nlc3NTZWdtZW50R3JvdXAobCxhLGQsaCl7cmV0dXJu'@;
put 'IDA9PT1kLnNlZ21lbnRzLmxlbmd0aCYmZC5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKGwsYSxkKTp0aGlzLnByb2Nlc3NTZWdtZW50KGwsYSxkLGQuc2VnbWVudHMsaCwhMCl9cHJvY2Vzc0NoaWxkcmVuKGwsYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIE9iamVj'@;
put 'dC5rZXlzKGQuY2hpbGRyZW4pKSJwcmltYXJ5Ij09PWY/aC51bnNoaWZ0KGYpOmgucHVzaChmKTtyZXR1cm4gZWEoaCkucGlwZShXNihmPT57Y29uc3QgXz1kLmNoaWxkcmVuW2ZdLFQ9ZnVuY3Rpb24gcWRlKGMsbCl7Y29uc3QgYT1jLmZpbHRlcihkPT50MihkKT09PWwpO3JldHVybiBhLnB1'@;
put 'c2goLi4uYy5maWx0ZXIoZD0+dDIoZCkhPT1sKSksYX0oYSxmKTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKGwsVCxfLGYpfSksZnVuY3Rpb24gWDFlKGMsbCl7cmV0dXJuIFhlKGZ1bmN0aW9uIEsxZShjLGwsYSxkLGgpe3JldHVybihmLF8pPT57bGV0IFQ9YSxXPWwsaWU9MDtm'@;
put 'LnN1YnNjcmliZShVZShfLGdlPT57Y29uc3Qgd2U9aWUrKztXPVQ/YyhXLGdlLHdlKTooVD0hMCxnZSksZCYmXy5uZXh0KFcpfSxoJiYoKCk9PntUJiZfLm5leHQoVyksXy5jb21wbGV0ZSgpfSkpKX19KGMsbCxhcmd1bWVudHMubGVuZ3RoPj0yLCEwKSl9KChmLF8pPT4oZi5wdXNoKC4uLl8p'@;
put 'LGYpKSx2eChudWxsKSxmdW5jdGlvbiBKMWUoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjP0lhKChoLGYpPT5jKGgsZixkKSk6T2UsVk8oMSksYT92eChsKTpORygoKT0+bmV3IGd4KSl9KCkseXIoZj0+e2lmKG51bGw9PT1mKXJldHVybiBKNihk'@;
put 'KTtjb25zdCBfPU0kKGYpO3JldHVybiBmdW5jdGlvbiBJMmUoYyl7Yy5zb3J0KChsLGEpPT5sLnZhbHVlLm91dGxldD09PWxzPy0xOmEudmFsdWUub3V0bGV0PT09bHM/MTpsLnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGEudmFsdWUub3V0bGV0KSl9KF8pLFdpKF8pfSkpfXByb2Nlc3NT'@;
put 'ZWdtZW50KGwsYSxkLGgsZixfKXtyZXR1cm4gZWEoYSkucGlwZShXNihUPT50aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKFQuX2luamVjdG9yPz9sLGEsVCxkLGgsZixfKS5waXBlKEE1KFc9PntpZihXIGluc3RhbmNlb2YgVHgpcmV0dXJuIFdpKG51bGwpO3Rocm93IFd9KSkpLHVw'@;
put 'KFQ9PiEhVCksQTUoVD0+e2lmKGIkKFQpKXJldHVybiBmdW5jdGlvbiBBMmUoYyxsLGEpe3JldHVybiAwPT09bC5sZW5ndGgmJiFjLmNoaWxkcmVuW2FdfShkLGgsZik/V2koW10pOko2KGQpO3Rocm93IFR9KSl9cHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUobCxhLGQsaCxmLF8sVCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIGsyZShjLGwsYSxkKXtyZXR1cm4hISh0MihjKT09PWR8fGQhPT1scyYmRHgobCxhLGMpKSYmKCIqKiI9PT1jLnBhdGh8fHRQKGwsYyxhKS5tYXRjaGVkKX0oZCxoLGYsXyk/dm9pZCAwPT09ZC5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKGws'@;
put 'aCxkLGYsXyxUKTpUJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEsZCxmLF8pOko2KGgpOko2KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZixfKXtyZXR1cm4iKioi'@;
put 'PT09aC5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGQsaCxfKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl9ZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdh'@;
put 'aW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoKXtjb25zdCBmPXRoaXMuYXBwbHlSZWRpcmVjdHMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLGQucmVkaXJlY3RUbyx7fSk7cmV0dXJuIGQucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/QyQoZik6dGhpcy5hcHBseVJlZGlyZWN0cy5s'@;
put 'aW5lcmFsaXplU2VnbWVudHMoZCxmKS5waXBlKHlyKF89Pntjb25zdCBUPW5ldyB5YShfLHt9KTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudChsLGEsVCxfLGgsITEpfSkpfWV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl7Y29uc3R7'@;
put 'bWF0Y2hlZDpULGNvbnN1bWVkU2VnbWVudHM6VyxyZW1haW5pbmdTZWdtZW50czppZSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpnZX09dFAoYSxoLGYpO2lmKCFUKXJldHVybiBKNihhKTtjb25zdCB3ZT10aGlzLmFwcGx5UmVkaXJlY3RzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhXLGgucmVk'@;
put 'aXJlY3RUbyxnZSk7cmV0dXJuIGgucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/QyQod2UpOnRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsd2UpLnBpcGUoeXIoRWU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsRWUuY29uY2F0KGllKSxfLCExKSkpfW1hdGNo'@;
put 'U2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYsXyl7bGV0IFQ7aWYoIioqIj09PWQucGF0aCl7Y29uc3QgVz1oLmxlbmd0aD4wP2pHKGgpLnBhcmFtZXRlcnM6e307VD1XaSh7c25hcHNob3Q6bmV3IHh4KGgsVyxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9'@;
put 'KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQseCQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLEUkKGQpKSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdfSksYS5jaGlsZHJlbj17fX1lbHNlIFQ9QzJlKGEsZCxoLGwpLnBpcGUo'@;
put 'TWUoKHttYXRjaGVkOlcsY29uc3VtZWRTZWdtZW50czppZSxyZW1haW5pbmdTZWdtZW50czpnZSxwYXJhbWV0ZXJzOndlfSk9Plc/e3NuYXBzaG90Om5ldyB4eChpZSx3ZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQs'@;
put 'eCQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLEUkKGQpKSxjb25zdW1lZFNlZ21lbnRzOmllLHJlbWFpbmluZ1NlZ21lbnRzOmdlfTpudWxsKSk7cmV0dXJuIFQucGlwZShTYShXPT5udWxsPT09Vz9KNihhKTp0aGlzLmdldENoaWxkQ29uZmlnKGw9'@;
put 'ZC5faW5qZWN0b3I/P2wsZCxoKS5waXBlKFNhKCh7cm91dGVzOmllfSk9Pntjb25zdCBnZT1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7c25hcHNob3Q6d2UsY29uc3VtZWRTZWdtZW50czpFZSxyZW1haW5pbmdTZWdtZW50czpaZX09Vyx7c2VnbWVudEdyb3VwOm90LHNsaWNlZFNlZ21lbnRzOmV0'@;
put 'fT1TJChhLEVlLFplLGllKTtpZigwPT09ZXQubGVuZ3RoJiZvdC5oYXNDaGlsZHJlbigpKXJldHVybiB0aGlzLnByb2Nlc3NDaGlsZHJlbihnZSxpZSxvdCkucGlwZShNZShrdD0+bnVsbD09PWt0P251bGw6W25ldyB4Zih3ZSxrdCldKSk7aWYoMD09PWllLmxlbmd0aCYmMD09PWV0Lmxlbmd0'@;
put 'aClyZXR1cm4gV2koW25ldyB4Zih3ZSxbXSldKTtjb25zdCB5dD10MihkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQoZ2UsaWUsb3QsZXQseXQ/bHM6ZiwhMCkucGlwZShNZShrdD0+W25ldyB4Zih3ZSxrdCldKSl9KSkpKX1nZXRDaGlsZENvbmZpZyhsLGEsZCl7cmV0dXJuIGEu'@;
put 'Y2hpbGRyZW4/V2koe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/V2koe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5jdGlvbiB2MmUoYyxsLGEsZCl7Y29u'@;
put 'c3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9XaSghMCk6V2koaC5tYXAoXz0+e2NvbnN0IFQ9SzYoXyxjKTtyZXR1cm4gZHAoZnVuY3Rpb24gcjJlKGMpe3JldHVybiBjJiZZXyhjLmNhbkxvYWQpfShUKT9ULmNhbkxvYWQobCxhKTpjLnJ1bkluQ29udGV4'@;
put 'dCgoKT0+VChsLGEpKSl9KSkucGlwZShYNigpLHkkKCkpfShsLGEsZCkucGlwZSh5cihoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoemMoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVjdG9yfSkpOmZ1bmN0'@;
put 'aW9uIHkyZShjKXtyZXR1cm4gRF8ocCQoITEsMykpfSgpKSk6V2koe3JvdXRlczpbXSxpbmplY3RvcjpsfSl9fWZ1bmN0aW9uIEwyZShjKXtjb25zdCBsPWMudmFsdWUucm91dGVDb25maWc7cmV0dXJuIGwmJiIiPT09bC5wYXRofWZ1bmN0aW9uIE0kKGMpe2NvbnN0IGw9W10sYT1uZXcgU2V0'@;
put 'O2Zvcihjb25zdCBkIG9mIGMpe2lmKCFMMmUoZCkpe2wucHVzaChkKTtjb250aW51ZX1jb25zdCBoPWwuZmluZChmPT5kLnZhbHVlLnJvdXRlQ29uZmlnPT09Zi52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aD8oaC5jaGlsZHJlbi5wdXNoKC4uLmQuY2hpbGRyZW4pLGEuYWRkKGgpKTps'@;
put 'LnB1c2goZCl9Zm9yKGNvbnN0IGQgb2YgYSl7Y29uc3QgaD1NJChkLmNoaWxkcmVuKTtsLnB1c2gobmV3IHhmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIHgkKGMpe3JldHVybiBjLmRhdGF8fHt9fWZ1bmN0aW9uIEUkKGMpe3JldHVybiBjLnJl'@;
put 'c29sdmV8fHt9fWZ1bmN0aW9uIE8yZShjLGwpe3JldHVybiB5cihhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gV2koYSk7bGV0IGY9MDtyZXR1cm4gZWEoaCkucGlwZShXNihfPT5mdW5jdGlvbiBQ'@;
put 'MmUoYyxsLGEsZCl7Y29uc3QgaD1jLnJvdXRlQ29uZmlnLGY9Yy5fcmVzb2x2ZTtyZXR1cm4gdm9pZCAwIT09aD8udGl0bGUmJiFrJChoKSYmKGZbTF9dPWgudGl0bGUpLGZ1bmN0aW9uIEYyZShjLGwsYSxkKXtjb25zdCBoPWZ1bmN0aW9uIEgyZShjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMo'@;
put 'YyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19KGMpO2lmKDA9PT1oLmxlbmd0aClyZXR1cm4gV2koe30pO2NvbnN0IGY9e307cmV0dXJuIGVhKGgpLnBpcGUoeXIoXz0+ZnVuY3Rpb24gTjJlKGMsbCxhLGQpe2NvbnN0IGg9el8obCk/P2QsZj1LNihjLGgpO3JldHVybiBk'@;
put 'cChmLnJlc29sdmU/Zi5yZXNvbHZlKGwsYSk6aC5ydW5JbkNvbnRleHQoKCk9PmYobCxhKSkpfShjW19dLGwsYSxkKS5waXBlKHVwKCksemMoVD0+e2ZbX109VH0pKSksVk8oMSksZnVuY3Rpb24gVkcoYyl7cmV0dXJuIE1lKCgpPT5jKX0oZiksQTUoXz0+YiQoXyk/TG86RF8oXykpKX0oZixj'@;
put 'LGwsZCkucGlwZShNZShfPT4oYy5fcmVzb2x2ZWREYXRhPV8sYy5kYXRhPWMkKGMsYSkucmVzb2x2ZSxoJiZrJChoKSYmKGMuZGF0YVtMX109aC50aXRsZSksbnVsbCkpKX0oXy5yb3V0ZSxkLGMsbCkpLHpjKCgpPT5mKyspLFZPKDEpLHlyKF89PmY9PT1oLmxlbmd0aD9XaShhKTpMbykpfSl9'@;
put 'ZnVuY3Rpb24gayQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjLnRpdGxlfHxudWxsPT09Yy50aXRsZX1mdW5jdGlvbiBuUChjKXtyZXR1cm4gU2EobD0+e2NvbnN0IGE9YyhsKTtyZXR1cm4gYT9lYShhKS5waXBlKE1lKCgpPT5sKSk6V2kobCl9KX1jb25zdCBRNj1uZXcgTWkoIlJPVVRF'@;
put 'UyIpO2xldCByUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9RmkoblcpfWxvYWRDb21wb25lbnQoYSl7aWYodGhpcy5jb21wb25lbnRMb2Fk'@;
put 'ZXJzLmdldChhKSlyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKTtpZihhLl9sb2FkZWRDb21wb25lbnQpcmV0dXJuIFdpKGEuX2xvYWRlZENvbXBvbmVudCk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoYSk7Y29uc3QgZD1kcChh'@;
put 'LmxvYWRDb21wb25lbnQoKSkucGlwZShNZShBJCksemMoZj0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoYSksYS5fbG9hZGVkQ29tcG9uZW50PWZ9KSxJXygoKT0+e3RoaXMuY29tcG9uZW50TG9hZGVycy5kZWxldGUoYSl9KSksaD1uZXcgSEcoZCwo'@;
put 'KT0+bmV3IGJlKS5waXBlKE5PKCkpO3JldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuc2V0KGEsaCksaH1sb2FkQ2hpbGRyZW4oYSxkKXtpZih0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZCkpcmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKTtpZihkLl9sb2FkZWRSb3V0ZXMp'@;
put 'cmV0dXJuIFdpKHtyb3V0ZXM6ZC5fbG9hZGVkUm91dGVzLGluamVjdG9yOmQuX2xvYWRlZEluamVjdG9yfSk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZCk7Y29uc3QgZj10aGlzLmxvYWRNb2R1bGVGYWN0b3J5T3JSb3V0ZXMoZC5sb2FkQ2hp'@;
put 'bGRyZW4pLnBpcGUoTWUoVD0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoZCk7bGV0IFcsaWU7cmV0dXJuIEFycmF5LmlzQXJyYXkoVCk/aWU9VDooVz1ULmNyZWF0ZShhKS5pbmplY3RvcixpZT1XLmdldChRNixbXSxucy5TZWxmfG5zLk9wdGlvbmFs'@;
put 'KS5mbGF0KCkpLHtyb3V0ZXM6aWUubWFwKFFPKSxpbmplY3RvcjpXfX0pLElfKCgpPT57dGhpcy5jaGlsZHJlbkxvYWRlcnMuZGVsZXRlKGQpfSkpLF89bmV3IEhHKGYsKCk9Pm5ldyBiZSkucGlwZShOTygpKTtyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KGQsXyksX31sb2FkTW9k'@;
put 'dWxlRmFjdG9yeU9yUm91dGVzKGEpe3JldHVybiBkcChhKCkpLnBpcGUoTWUoQSQpLHlyKGQ9PmQgaW5zdGFuY2VvZiBsY3x8QXJyYXkuaXNBcnJheShkKT9XaShkKTplYSh0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyhkKSkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gQSQoYyl7cmV0dXJuIGZ1bmN0aW9uIFYyZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZGVm'@;
put 'YXVsdCJpbiBjfShjKT9jLmRlZmF1bHQ6Y31sZXQgSXg9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5sYXN0U3VjY2Vzc2Z1'@;
put 'bE5hdmlnYXRpb249bnVsbCx0aGlzLmV2ZW50cz1uZXcgYmUsdGhpcy5jb25maWdMb2FkZXI9RmkoclApLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1GaShxMCksdGhpcy51cmxTZXJpYWxpemVyPUZpKE9fKSx0aGlzLnJvb3RDb250ZXh0cz1GaShCXyksdGhpcy5pbnB1dEJpbmRpbmdFbmFi'@;
put 'bGVkPW51bGwhPT1GaShFeCx7b3B0aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5XaSh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2'@;
put 'ZW50cy5uZXh0KG5ldyBSZGUoaCkpLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgTGRlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3Qg'@;
put 'ZD0rK3RoaXMubmF2aWdhdGlvbklkO3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucz1uZXcgVGUoe2lkOjAsY3VycmVudFVybFRyZWU6YS5jdXJyZW50'@;
put 'VXJsVHJlZSxjdXJyZW50UmF3VXJsOmEuY3VycmVudFVybFRyZWUsZXh0cmFjdGVkVXJsOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUpLHVybEFmdGVyUmVkaXJlY3RzOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUp'@;
put 'LHJhd1VybDphLmN1cnJlbnRVcmxUcmVlLGV4dHJhczp7fSxyZXNvbHZlOm51bGwscmVqZWN0Om51bGwscHJvbWlzZTpQcm9taXNlLnJlc29sdmUoITApLHNvdXJjZTpOXyxyZXN0b3JlZFN0YXRlOm51bGwsY3VycmVudFNuYXBzaG90OmEucm91dGVyU3RhdGUuc25hcHNob3QsdGFyZ2V0U25h'@;
put 'cHNob3Q6bnVsbCxjdXJyZW50Um91dGVyU3RhdGU6YS5yb3V0ZXJTdGF0ZSx0YXJnZXRSb3V0ZXJTdGF0ZTpudWxsLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6W10sY2FuRGVhY3RpdmF0ZUNoZWNrczpbXX0sZ3VhcmRzUmVzdWx0Om51bGx9KSx0aGlzLnRyYW5zaXRpb25zLnBpcGUoSWEo'@;
put 'ZD0+MCE9PWQuaWQpLE1lKGQ9Pih7Li4uZCxleHRyYWN0ZWRVcmw6YS51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZC5yYXdVcmwpfSkpLFNhKGQ9PntsZXQgaD0hMSxmPSExO3JldHVybiBXaShkKS5waXBlKHpjKF89Pnt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXtpZDpfLmlkLGluaXRp'@;
put 'YWxVcmw6Xy5yYXdVcmwsZXh0cmFjdGVkVXJsOl8uZXh0cmFjdGVkVXJsLHRyaWdnZXI6Xy5zb3VyY2UsZXh0cmFzOl8uZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24scHJldmlv'@;
put 'dXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9fSksU2EoXz0+e2NvbnN0IFQ9YS5icm93c2VyVXJsVHJlZS50b1N0cmluZygpLFc9IWEubmF2aWdhdGVkfHxfLmV4dHJhY3RlZFVybC50b1N0cmluZygpIT09VHx8VCE9PWEuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTtpZighVyYmInJlbG9hZCIh'@;
put 'PT0oXy5leHRyYXMub25TYW1lVXJsTmF2aWdhdGlvbj8/YS5vblNhbWVVcmxOYXZpZ2F0aW9uKSl7Y29uc3QgZ2U9IiI7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFZfKF8uaWQsYS5zZXJpYWxpemVVcmwoZC5yYXdVcmwpLGdlLDApKSxhLnJhd1VybFRyZWU9Xy5yYXdVcmwsXy5yZXNv'@;
put 'bHZlKG51bGwpLExvfWlmKGEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKF8ucmF3VXJsKSlyZXR1cm4gVCQoXy5zb3VyY2UpJiYoYS5icm93c2VyVXJsVHJlZT1fLmV4dHJhY3RlZFVybCksV2koXykucGlwZShTYShnZT0+e2NvbnN0IHdlPXRoaXMudHJhbnNpdGlvbnM/'@;
put 'LmdldFZhbHVlKCk7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFlPKGdlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZ2UuZXh0cmFjdGVkVXJsKSxnZS5zb3VyY2UsZ2UucmVzdG9yZWRTdGF0ZSkpLHdlIT09dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKT9MbzpQcm9t'@;
put 'aXNlLnJlc29sdmUoZ2UpfSksZnVuY3Rpb24gUjJlKGMsbCxhLGQsaCxmKXtyZXR1cm4geXIoXz0+ZnVuY3Rpb24gVDJlKGMsbCxhLGQsaCxmLF89ImVtcHR5T25seSIpe3JldHVybiBuZXcgRDJlKGMsbCxhLGQsaCxfLGYpLnJlY29nbml6ZSgpfShjLGwsYSxkLF8uZXh0cmFjdGVkVXJsLGgs'@;
put 'ZikucGlwZShNZSgoe3N0YXRlOlQsdHJlZTpXfSk9Pih7Li4uXyx0YXJnZXRTbmFwc2hvdDpULHVybEFmdGVyUmVkaXJlY3RzOld9KSkpKX0odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHRoaXMuY29uZmlnTG9hZGVyLHRoaXMucm9vdENvbXBvbmVudFR5cGUsYS5jb25maWcsdGhpcy51cmxT'@;
put 'ZXJpYWxpemVyLGEucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksemMoZ2U9PntpZihkLnRhcmdldFNuYXBzaG90PWdlLnRhcmdldFNuYXBzaG90LGQudXJsQWZ0ZXJSZWRpcmVjdHM9Z2UudXJsQWZ0ZXJSZWRpcmVjdHMsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17Li4udGhpcy5jdXJyZW50'@;
put 'TmF2aWdhdGlvbixmaW5hbFVybDpnZS51cmxBZnRlclJlZGlyZWN0c30sImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3kpe2lmKCFnZS5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBFZT1hLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZ2UudXJsQWZ0ZXJSZWRpcmVjdHMs'@;
put 'Z2UucmF3VXJsKTthLnNldEJyb3dzZXJVcmwoRWUsZ2UpfWEuYnJvd3NlclVybFRyZWU9Z2UudXJsQWZ0ZXJSZWRpcmVjdHN9Y29uc3Qgd2U9bmV3IGtkZShnZS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGdlLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlh'@;
put 'bGl6ZShnZS51cmxBZnRlclJlZGlyZWN0cyksZ2UudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQod2UpfSkpO2lmKFcmJmEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKGEucmF3VXJsVHJlZSkpe2NvbnN0e2lkOmdlLGV4dHJhY3RlZFVybDp3ZSxzb3VyY2U6'@;
put 'RWUscmVzdG9yZWRTdGF0ZTpaZSxleHRyYXM6b3R9PV8sZXQ9bmV3IFlPKGdlLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUod2UpLEVlLFplKTt0aGlzLmV2ZW50cy5uZXh0KGV0KTtjb25zdCB5dD1sJCgwLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90O3JldHVybiBXaShk'@;
put 'PXsuLi5fLHRhcmdldFNuYXBzaG90Onl0LHVybEFmdGVyUmVkaXJlY3RzOndlLGV4dHJhczp7Li4ub3Qsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSl9e2NvbnN0IGdlPSIiO3JldHVybiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBWXyhfLmlkLGEuc2VyaWFsaXplVXJsKGQu'@;
put 'ZXh0cmFjdGVkVXJsKSxnZSwxKSksYS5yYXdVcmxUcmVlPV8ucmF3VXJsLF8ucmVzb2x2ZShudWxsKSxMb319KSx6YyhfPT57Y29uc3QgVD1uZXcgQWRlKF8uaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6'@;
put 'ZShfLnVybEFmdGVyUmVkaXJlY3RzKSxfLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KFQpfSksTWUoXz0+ZD17Li4uXyxndWFyZHM6SmRlKF8udGFyZ2V0U25hcHNob3QsXy5jdXJyZW50U25hcHNob3QsdGhpcy5yb290Q29udGV4dHMpfSksZnVuY3Rpb24gYzJlKGMsbCl7cmV0'@;
put 'dXJuIHlyKGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGN1cnJlbnRTbmFwc2hvdDpoLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6ZixjYW5EZWFjdGl2YXRlQ2hlY2tzOl99fT1hO3JldHVybiAwPT09Xy5sZW5ndGgmJjA9PT1mLmxlbmd0aD9XaSh7Li4uYSxndWFyZHNSZXN1bHQ6ITB9'@;
put 'KTpmdW5jdGlvbiB1MmUoYyxsLGEsZCl7cmV0dXJuIGVhKGMpLnBpcGUoeXIoaD0+ZnVuY3Rpb24gbTJlKGMsbCxhLGQsaCl7Y29uc3QgZj1sJiZsLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiBmJiYwIT09Zi5sZW5ndGg/V2koZi5tYXAoVD0+'@;
put 'e2NvbnN0IFc9el8obCk/P2gsaWU9SzYoVCxXKTtyZXR1cm4gZHAoZnVuY3Rpb24gczJlKGMpe3JldHVybiBjJiZZXyhjLmNhbkRlYWN0aXZhdGUpfShpZSk/aWUuY2FuRGVhY3RpdmF0ZShjLGwsYSxkKTpXLnJ1bkluQ29udGV4dCgoKT0+aWUoYyxsLGEsZCkpKS5waXBlKHVwKCkpfSkpLnBp'@;
put 'cGUoWDYoKSk6V2koITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksdXAoaD0+ITAhPT1oLCEwKSl9KF8sZCxoLGMpLnBpcGUoeXIoVD0+VCYmZnVuY3Rpb24gbjJlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KFQpP2Z1bmN0aW9uIGQyZShjLGwsYSxkKXtyZXR1cm4gZWEo'@;
put 'bCkucGlwZShXNihoPT5teChmdW5jdGlvbiBmMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IE9kZShjKSksV2koITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBoMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IEZkZShjKSksV2koITApfShoLnJvdXRlLGQp'@;
put 'LGZ1bmN0aW9uIGcyZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAoXz0+ZnVuY3Rpb24gUWRlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4g'@;
put 'bCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KF8pKS5maWx0ZXIoXz0+bnVsbCE9PV8pLm1hcChfPT5GRygoKT0+V2koXy5ndWFyZHMubWFwKFc9Pntjb25zdCBpZT16XyhfLm5vZGUpPz9hLGdlPUs2KFcsaWUpO3JldHVybiBkcChmdW5jdGlvbiBvMmUoYyl7cmV0dXJu'@;
put 'IGMmJllfKGMuY2FuQWN0aXZhdGVDaGlsZCl9KGdlKT9nZS5jYW5BY3RpdmF0ZUNoaWxkKGQsYyk6aWUucnVuSW5Db250ZXh0KCgpPT5nZShkLGMpKSkucGlwZSh1cCgpKX0pKS5waXBlKFg2KCkpKSk7cmV0dXJuIFdpKGYpLnBpcGUoWDYoKSl9KGMsaC5wYXRoLGEpLGZ1bmN0aW9uIHAyZShj'@;
put 'LGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBXaSghMCk7Y29uc3QgaD1kLm1hcChmPT5GRygoKT0+e2NvbnN0IF89el8obCk/P2EsVD1LNihmLF8pO3JldHVybiBkcChmdW5jdGlvbiBp'@;
put 'MmUoYyl7cmV0dXJuIGMmJllfKGMuY2FuQWN0aXZhdGUpfShUKT9ULmNhbkFjdGl2YXRlKGwsYyk6Xy5ydW5JbkNvbnRleHQoKCk9PlQobCxjKSkpLnBpcGUodXAoKSl9KSk7cmV0dXJuIFdpKGgpLnBpcGUoWDYoKSl9KGMsaC5yb3V0ZSxhKSkpLHVwKGg9PiEwIT09aCwhMCkpfShkLGYsYyxs'@;
put 'KTpXaShUKSksTWUoVD0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpUfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsXz0+dGhpcy5ldmVudHMubmV4dChfKSksemMoXz0+e2lmKGQuZ3VhcmRzUmVzdWx0PV8uZ3VhcmRzUmVzdWx0LEQ1KF8uZ3VhcmRzUmVzdWx0KSl0aHJvdyBmJCgwLF8u'@;
put 'Z3VhcmRzUmVzdWx0KTtjb25zdCBUPW5ldyBUZGUoXy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8udXJsQWZ0ZXJSZWRpcmVjdHMpLF8udGFyZ2V0U25hcHNob3QsISFfLmd1YXJkc1Jlc3VsdCk7'@;
put 'dGhpcy5ldmVudHMubmV4dChUKX0pLElhKF89PiEhXy5ndWFyZHNSZXN1bHR8fChhLnJlc3RvcmVIaXN0b3J5KF8pLHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oXywiIiwzKSwhMSkpLG5QKF89PntpZihfLmd1YXJkcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpcmV0dXJuIFdp'@;
put 'KF8pLnBpcGUoemMoVD0+e2NvbnN0IFc9bmV3IERkZShULmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC51cmxBZnRlclJlZGlyZWN0cyksVC50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4'@;
put 'dChXKX0pLFNhKFQ9PntsZXQgVz0hMTtyZXR1cm4gV2koVCkucGlwZShPMmUoYS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LHRoaXMuZW52aXJvbm1lbnRJbmplY3RvciksemMoe25leHQ6KCk9Plc9ITAsY29tcGxldGU6KCk9PntXfHwoYS5yZXN0b3JlSGlzdG9yeShUKSx0aGlzLmNhbmNl'@;
put 'bE5hdmlnYXRpb25UcmFuc2l0aW9uKFQsIiIsMikpfX0pKX0pLHpjKFQ9Pntjb25zdCBXPW5ldyBJZGUoVC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQudXJsQWZ0ZXJSZWRpcmVjdHMpLFQudGFy'@;
put 'Z2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoVyl9KSl9KSxuUChfPT57Y29uc3QgVD1XPT57Y29uc3QgaWU9W107Vy5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCYmIVcucm91dGVDb25maWcuX2xvYWRlZENvbXBvbmVudCYmaWUucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29t'@;
put 'cG9uZW50KFcucm91dGVDb25maWcpLnBpcGUoemMoZ2U9PntXLmNvbXBvbmVudD1nZX0pLE1lKCgpPT57fSkpKTtmb3IoY29uc3QgZ2Ugb2YgVy5jaGlsZHJlbilpZS5wdXNoKC4uLlQoZ2UpKTtyZXR1cm4gaWV9O3JldHVybiBZNihUKF8udGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUodngo'@;
put 'KSxpZCgxKSl9KSxuUCgoKT0+dGhpcy5hZnRlclByZWFjdGl2YXRpb24oKSksTWUoXz0+e2NvbnN0IFQ9ZnVuY3Rpb24gemRlKGMsbCxhKXtjb25zdCBkPWpfKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAwKTtyZXR1cm4gbmV3IGEkKGQsbCl9KGEucm91dGVSZXVzZVN0cmF0ZWd5LF8udGFy'@;
put 'Z2V0U25hcHNob3QsXy5jdXJyZW50Um91dGVyU3RhdGUpO3JldHVybiBkPXsuLi5fLHRhcmdldFJvdXRlclN0YXRlOlR9fSksemMoXz0+e2EuY3VycmVudFVybFRyZWU9Xy51cmxBZnRlclJlZGlyZWN0cyxhLnJhd1VybFRyZWU9YS51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKF8udXJsQWZ0'@;
put 'ZXJSZWRpcmVjdHMsXy5yYXdVcmwpLGEucm91dGVyU3RhdGU9Xy50YXJnZXRSb3V0ZXJTdGF0ZSwiZGVmZXJyZWQiPT09YS51cmxVcGRhdGVTdHJhdGVneSYmKF8uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8YS5zZXRCcm93c2VyVXJsKGEucmF3VXJsVHJlZSxfKSxhLmJyb3dzZXJVcmxU'@;
put 'cmVlPV8udXJsQWZ0ZXJSZWRpcmVjdHMpfSksKChjLGwsYSxkKT0+TWUoaD0+KG5ldyBYZGUobCxoLnRhcmdldFJvdXRlclN0YXRlLGguY3VycmVudFJvdXRlclN0YXRlLGEsZCkuYWN0aXZhdGUoYyksaCkpKSh0aGlzLnJvb3RDb250ZXh0cyxhLnJvdXRlUmV1c2VTdHJhdGVneSxfPT50aGlz'@;
put 'LmV2ZW50cy5uZXh0KF8pLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCksaWQoMSksemMoe25leHQ6Xz0+e2g9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249dGhpcy5jdXJyZW50TmF2aWdhdGlvbixhLm5hdmlnYXRlZD0hMCx0aGlzLmV2ZW50cy5uZXh0KG5ldyBocChfLmlkLHRo'@;
put 'aXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoXy5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS5jdXJyZW50VXJsVHJlZSkpKSxhLnRpdGxlU3RyYXRlZ3k/LnVwZGF0ZVRpdGxlKF8udGFyZ2V0Um91dGVyU3RhdGUuc25hcHNob3QpLF8ucmVzb2x2ZSghMCl9'@;
put 'LGNvbXBsZXRlOigpPT57aD0hMH19KSxJXygoKT0+e2h8fGZ8fHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZCwiIiwxKSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPy5pZD09PWQuaWQmJih0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwpfSksQTUoXz0+e2lmKGY9ITAsbSQoXykp'@;
put 'e2ckKF8pfHwoYS5uYXZpZ2F0ZWQ9ITAsYS5yZXN0b3JlSGlzdG9yeShkLCEwKSk7Y29uc3QgVD1uZXcgTXgoZC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGQuZXh0cmFjdGVkVXJsKSxfLm1lc3NhZ2UsXy5jYW5jZWxsYXRpb25Db2RlKTtpZih0aGlzLmV2ZW50cy5uZXh0KFQp'@;
put 'LGckKF8pKXtjb25zdCBXPWEudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShfLnVybCxhLnJhd1VybFRyZWUpLGllPXtza2lwTG9jYXRpb25DaGFuZ2U6ZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6ImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3l8fFQkKGQuc291'@;
put 'cmNlKX07YS5zY2hlZHVsZU5hdmlnYXRpb24oVyxOXyxudWxsLGllLHtyZXNvbHZlOmQucmVzb2x2ZSxyZWplY3Q6ZC5yZWplY3QscHJvbWlzZTpkLnByb21pc2V9KX1lbHNlIGQucmVzb2x2ZSghMSl9ZWxzZXthLnJlc3RvcmVIaXN0b3J5KGQsITApO2NvbnN0IFQ9bmV3IFdPKGQuaWQsdGhp'@;
put 'cy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShkLmV4dHJhY3RlZFVybCksXyxkLnRhcmdldFNuYXBzaG90Pz92b2lkIDApO3RoaXMuZXZlbnRzLm5leHQoVCk7dHJ5e2QucmVzb2x2ZShhLmVycm9ySGFuZGxlcihfKSl9Y2F0Y2goVyl7ZC5yZWplY3QoVyl9fXJldHVybiBMb30pKX0pKX1jYW5j'@;
put 'ZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihhLGQsaCl7Y29uc3QgZj1uZXcgTXgoYS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEuZXh0cmFjdGVkVXJsKSxkLGgpO3RoaXMuZXZlbnRzLm5leHQoZiksYS5yZXNvbHZlKCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gVCQoYyl7cmV0dXJuIGMhPT1OX31sZXQgRCQ9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBkLGg9YS5y'@;
put 'b290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PWxzKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtMX119fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShCMmUpfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLEIyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRCR7Y29uc3RydWN0b3IoYSl7'@;
put 'c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa0cpKX0sYy5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxqMmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEZpKFUyZSl9LHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y2xhc3MgejJle3Nob3VsZERldGFjaChsKXtyZXR1cm4hMX1zdG9yZShsLGEpe31zaG91bGRBdHRhY2gobCl7cmV0dXJuITF9cmV0cmlldmUobCl7cmV0dXJuIG51bGx9c2hvdWxkUmV1c2VSb3V0ZShs'@;
put 'LGEpe3JldHVybiBsLnJvdXRlQ29uZmlnPT09YS5yb3V0ZUNvbmZpZ319bGV0IFUyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgejJle31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMu'@;
put 'XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3QgTHg9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe30pfSk7bGV0IFoyZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gRmkoWTJlKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxZMmU9KCgpPT57Y2xhc3MgY3tzaG91bGRQcm9jZXNzVXJsKGEpe3JldHVybiEw'@;
put 'fWV4dHJhY3QoYSl7cmV0dXJuIGF9bWVyZ2UoYSxkKXtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFy'@;
put 'IFdfPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQ09NUExFVEU9MF09IkNPTVBMRVRFIixjW2MuRkFJTEVEPTFdPSJGQUlMRUQiLGNbYy5SRURJUkVDVElORz0yXT0iUkVESVJFQ1RJTkciLGN9KFdffHx7fSk7ZnVuY3Rpb24gSSQoYyxsKXtjLmV2ZW50cy5waXBlKElhKGE9PmEgaW5zdGFuY2Vv'@;
put 'ZiBocHx8YSBpbnN0YW5jZW9mIE14fHxhIGluc3RhbmNlb2YgV098fGEgaW5zdGFuY2VvZiBWXyksTWUoYT0+YSBpbnN0YW5jZW9mIGhwfHxhIGluc3RhbmNlb2YgVl8/V18uQ09NUExFVEU6YSBpbnN0YW5jZW9mIE14JiYoMD09PWEuY29kZXx8MT09PWEuY29kZSk/V18uUkVESVJFQ1RJTkc6'@;
put 'V18uRkFJTEVEKSxJYShhPT5hIT09V18uUkVESVJFQ1RJTkcpLGlkKDEpKS5zdWJzY3JpYmUoKCk9PntsKCl9KX1mdW5jdGlvbiBXMmUoYyl7dGhyb3cgY31mdW5jdGlvbiBHMmUoYyxsLGEpe3JldHVybiBsLnBhcnNlKCIvIil9Y29uc3QgJDJlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJp'@;
put 'Z25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LHEyZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBEcz0oKCk9PntjbGFzcyBje2dldCBuYXZp'@;
put 'Z2F0aW9uSWQoKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubmF2aWdhdGlvbklkfWdldCBicm93c2VyUGFnZUlkKCl7aWYoImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbilyZXR1cm4gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpPy5cdTAy'@;
put 'NzVyb3V0ZXJQYWdlSWR9Z2V0IGV2ZW50cygpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5ldmVudHN9Y29uc3RydWN0b3IoKXt0aGlzLmRpc3Bvc2VkPSExLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMuY29uc29sZT1GaSh0VyksdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEs'@;
put 'dGhpcy5vcHRpb25zPUZpKEx4LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLnBlbmRpbmdUYXNrcz1GaShxTSksdGhpcy5lcnJvckhhbmRsZXI9dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8VzJlLHRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyPXRoaXMub3B0aW9ucy5tYWxmb3JtZWRV'@;
put 'cmlFcnJvckhhbmRsZXJ8fEcyZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PUZpKFoyZSksdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9RmkoajJlKSx0aGlzLnRpdGxlU3RyYXRlZ3k9RmkoRCQpLHRoaXMub25TYW1l'@;
put 'VXJsTmF2aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1lVXJsTmF2aWdhdGlvbnx8Imlnbm9yZSIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5fHwiZW1wdHlPbmx5Iix0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5PXRo'@;
put 'aXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb258fCJyZXBsYWNlIix0aGlzLmNvbmZpZz1GaShRNix7b3B0aW9uYWw6ITB9KT8uZmxh'@;
put 'dCgpPz9bXSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1GaShJeCksdGhpcy51cmxTZXJpYWxpemVyPUZpKE9fKSx0aGlzLmxvY2F0aW9uPUZpKEpkKSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFGaShFeCx7b3B0aW9uYWw6ITB9KSx0aGlzLmlzTmdab25lRW5hYmxl'@;
put 'ZD1GaShObylpbnN0YW5jZW9mIE5vJiZOby5pc0luQW5ndWxhclpvbmUoKSx0aGlzLnJlc2V0Q29uZmlnKHRoaXMuY29uZmlnKSx0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyAkNix0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmJyb3dzZXJVcmxUcmVlPXRoaXMuY3Vy'@;
put 'cmVudFVybFRyZWUsdGhpcy5yb3V0ZXJTdGF0ZT1sJCgwLG51bGwpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnNldHVwTmF2aWdhdGlvbnModGhpcykuc3Vic2NyaWJlKGE9Pnt0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9YS5pZCx0aGlzLmN1cnJlbnRQYWdlSWQ9dGhpcy5icm93c2VyUGFn'@;
put 'ZUlkPz8wfSxhPT57dGhpcy5jb25zb2xlLndhcm4oYFVuaGFuZGxlZCBOYXZpZ2F0aW9uIEVycm9yOiAke2F9YCl9KX1yZXNldFJvb3RDb21wb25lbnRUeXBlKGEpe3RoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9YSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5yb290Q29tcG9u'@;
put 'ZW50VHlwZT1hfWluaXRpYWxOYXZpZ2F0aW9uKCl7aWYodGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSwhdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFzUmVxdWVzdGVkTmF2aWdhdGlvbil7Y29uc3QgYT10aGlzLmxvY2F0aW9uLmdldFN0YXRlKCk7dGhpcy5uYXZpZ2F0'@;
put 'ZVRvU3luY1dpdGhCcm93c2VyKHRoaXMubG9jYXRpb24ucGF0aCghMCksTl8sYSl9fXNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpe3RoaXMubG9jYXRpb25TdWJzY3JpcHRpb258fCh0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPXRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGE9Pntjb25z'@;
put 'dCBkPSJwb3BzdGF0ZSI9PT1hLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSI7InBvcHN0YXRlIj09PWQmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoYS51cmwsZCxhLnN0YXRlKX0sMCl9KSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQs'@;
put 'aCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sXz1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IFc9ey4uLmh9O2RlbGV0ZSBXLm5hdmlnYXRpb25JZCxkZWxldGUgVy5cdTAyNzVyb3V0ZXJQYWdlSWQsMCE9PU9iamVjdC5rZXlzKFcpLmxlbmd0aCYmKGYuc3RhdGU9Vyl9Y29u'@;
put 'c3QgVD10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKFQsZCxfLGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlv'@;
put 'bnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259cmVzZXRDb25maWcoYSl7dGhpcy5jb25maWc9YS5tYXAoUU8pLHRoaXMubmF2aWdhdGVkPSEx'@;
put 'LHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMX1uZ09uRGVzdHJveSgpe3RoaXMuZGlzcG9zZSgpfWRpc3Bvc2UoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jb21wbGV0ZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb24mJih0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2Ny'@;
put 'aWJlKCksdGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuZGlzcG9zZWQ9ITB9Y3JlYXRlVXJsVHJlZShhLGQ9e30pe2NvbnN0e3JlbGF0aXZlVG86aCxxdWVyeVBhcmFtczpmLGZyYWdtZW50Ol8scXVlcnlQYXJhbXNIYW5kbGluZzpULHByZXNlcnZlRnJhZ21lbnQ6V309'@;
put 'ZCxpZT1XP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6XztsZXQgd2UsZ2U9bnVsbDtzd2l0Y2goVCl7Y2FzZSJtZXJnZSI6Z2U9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6Z2U9dGhpcy5jdXJyZW50VXJsVHJlZS5x'@;
put 'dWVyeVBhcmFtczticmVhaztkZWZhdWx0OmdlPWZ8fG51bGx9bnVsbCE9PWdlJiYoZ2U9dGhpcy5yZW1vdmVFbXB0eVByb3BzKGdlKSk7dHJ5e3dlPUpHKGg/aC5zbmFwc2hvdDp0aGlzLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpfWNhdGNoeygic3RyaW5nIiE9dHlwZW9mIGFbMF18fCFh'@;
put 'WzBdLnN0YXJ0c1dpdGgoIi8iKSkmJihhPVtdKSx3ZT10aGlzLmN1cnJlbnRVcmxUcmVlLnJvb3R9cmV0dXJuIFFHKHdlLGEsZ2UsaWU/P251bGwpfW5hdmlnYXRlQnlVcmwoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtjb25zdCBoPUQ1KGEpP2E6dGhpcy5wYXJzZVVybChhKSxmPXRo'@;
put 'aXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShoLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKGYsTl8sbnVsbCxkKX1uYXZpZ2F0ZShhLGQ9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe3JldHVybiBmdW5jdGlvbiBLMmUoYyl7Zm9yKGxldCBsPTA7'@;
put 'bDxjLmxlbmd0aDtsKyspaWYobnVsbD09Y1tsXSl0aHJvdyBuZXcgQXIoNDAwOCwhMSl9KGEpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUoYSxkKSxkKX1zZXJpYWxpemVVcmwoYSl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSl9cGFyc2VVcmwo'@;
put 'YSl7bGV0IGQ7dHJ5e2Q9dGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoKGgpe2Q9dGhpcy5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIoaCx0aGlzLnVybFNlcmlhbGl6ZXIsYSl9cmV0dXJuIGR9aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4uJDJlfTohMT09PWQ/'@;
put 'ey4uLnEyZX06ZCxENShhKSlyZXR1cm4gVUcodGhpcy5jdXJyZW50VXJsVHJlZSxhLGgpO2NvbnN0IGY9dGhpcy5wYXJzZVVybChhKTtyZXR1cm4gVUcodGhpcy5jdXJyZW50VXJsVHJlZSxmLGgpfXJlbW92ZUVtcHR5UHJvcHMoYSl7cmV0dXJuIE9iamVjdC5rZXlzKGEpLnJlZHVjZSgoZCxo'@;
put 'KT0+e2NvbnN0IGY9YVtoXTtyZXR1cm4gbnVsbCE9ZiYmKGRbaF09ZiksZH0se30pfXNjaGVkdWxlTmF2aWdhdGlvbihhLGQsaCxmLF8pe2lmKHRoaXMuZGlzcG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IFQsVyxpZTtfPyhUPV8ucmVzb2x2ZSxXPV8ucmVqZWN0LGllPV8u'@;
put 'cHJvbWlzZSk6aWU9bmV3IFByb21pc2UoKHdlLEVlKT0+e1Q9d2UsVz1FZX0pO2NvbnN0IGdlPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiBJJCh0aGlzLCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShnZSkpfSksdGhpcy5uYXZpZ2F0aW9u'@;
put 'VHJhbnNpdGlvbnMuaGFuZGxlTmF2aWdhdGlvblJlcXVlc3Qoe3NvdXJjZTpkLHJlc3RvcmVkU3RhdGU6aCxjdXJyZW50VXJsVHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLGN1cnJlbnRSYXdVcmw6dGhpcy5jdXJyZW50VXJsVHJlZSxyYXdVcmw6YSxleHRyYXM6ZixyZXNvbHZlOlQscmVqZWN0'@;
put 'OlcscHJvbWlzZTppZSxjdXJyZW50U25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjdXJyZW50Um91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX0pLGllLmNhdGNoKHdlPT5Qcm9taXNlLnJlamVjdCh3ZSkpfXNldEJyb3dzZXJVcmwoYSxkKXtjb25zdCBoPXRoaXMudXJsU2Vy'@;
put 'aWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29uc3QgXz17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQp'@;
put 'fTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLF8pfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCwodGhpcy5icm93c2VyUGFnZUlkPz8wKSsxKX07dGhpcy5sb2NhdGlvbi5nbyhoLCIiLGYpfX1yZXN0b3Jl'@;
put 'SGlzdG9yeShhLGQ9ITEpe2lmKCJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24pe2NvbnN0IGY9dGhpcy5jdXJyZW50UGFnZUlkLSh0aGlzLmJyb3dzZXJQYWdlSWQ/P3RoaXMuY3VycmVudFBhZ2VJZCk7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28o'@;
put 'Zik6dGhpcy5jdXJyZW50VXJsVHJlZT09PXRoaXMuZ2V0Q3VycmVudE5hdmlnYXRpb24oKT8uZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMuYnJvd3NlclVybFRyZWU9YS5jdXJyZW50VXJsVHJlZSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpKX1lbHNl'@;
put 'InJlcGxhY2UiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uJiYoZCYmdGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfXJlc2V0U3RhdGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZT1hLmN1cnJlbnRSb3V0ZXJTdGF0ZSx0aGlzLmN1cnJl'@;
put 'bnRVcmxUcmVlPWEuY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEucmF3VXJsKX1yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVy'@;
put 'bFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIsdGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUodGhpcy5sYXN0U3VjY2Vzc2Z1bElkLHRoaXMuY3VycmVudFBhZ2VJZCkpfWdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShhLGQpe3JldHVybiJjb21wdXRlZCI9PT10aGlzLmNh'@;
put 'bmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24/e25hdmlnYXRpb25JZDphLFx1MDI3NXJvdXRlclBhZ2VJZDpkfTp7bmF2aWdhdGlvbklkOmF9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxCdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLnJvdXRlcj1hLHRoaXMucm91dGU9ZCx0aGlzLnRhYkluZGV4QXR0cmlidXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9Xyx0aGlzLmxv'@;
put 'Y2F0aW9uU3RyYXRlZ3k9VCx0aGlzLmhyZWY9bnVsbCx0aGlzLmNvbW1hbmRzPW51bGwsdGhpcy5vbkNoYW5nZXM9bmV3IGJlLHRoaXMucHJlc2VydmVGcmFnbWVudD0hMSx0aGlzLnNraXBMb2NhdGlvbkNoYW5nZT0hMSx0aGlzLnJlcGxhY2VVcmw9ITE7Y29uc3QgVz1fLm5hdGl2ZUVsZW1l'@;
put 'bnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKTt0aGlzLmlzQW5jaG9yRWxlbWVudD0iYSI9PT1XfHwiYXJlYSI9PT1XLHRoaXMuaXNBbmNob3JFbGVtZW50P3RoaXMuc3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShpZT0+e2llIGluc3RhbmNlb2YgaHAmJnRoaXMudXBkYXRlSHJlZigp'@;
put 'fSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09u'@;
put 'Q2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhpcy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25O'@;
put 'YXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxkLGgsZixfKXtyZXR1cm4hIShudWxsPT09dGhpcy51cmxUcmVlfHx0aGlzLmlzQW5jaG9yRWxlbWVudCYmKDAhPT1hfHxkfHxofHxmfHxffHwi'@;
put 'c3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldCkpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFRyZWUse3NraXBMb2NhdGlvbkNoYW5nZTp0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOnRoaXMucmVwbGFjZVVybCxz'@;
put 'dGF0ZTp0aGlzLnN0YXRlfSksIXRoaXMuaXNBbmNob3JFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZUhyZWYoKXt0aGlzLmhyZWY9bnVsbCE9PXRoaXMudXJsVHJlZSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRp'@;
put 'b25TdHJhdGVneT8ucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKTpudWxsO2NvbnN0IGE9bnVsbD09PXRoaXMuaHJlZj9udWxsOmZ1bmN0aW9uIFlDKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gcEkoYyxsKXtyZXR1cm4ic3JjIj09PWwm'@;
put 'JigiZW1iZWQiPT09Y3x8ImZyYW1lIj09PWN8fCJpZnJhbWUiPT09Y3x8Im1lZGlhIj09PWN8fCJzY3JpcHQiPT09Yyl8fCJocmVmIj09PWwmJigiYmFzZSI9PT1jfHwibGluayI9PT1jKT9aQzpydn0obCxhKShjKX0odGhpcy5ocmVmLHRoaXMuZWwubmF0aXZlRWxlbWVudC50YWdOYW1lLnRv'@;
put 'TG93ZXJDYXNlKCksImhyZWYiKTt0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoImhyZWYiLGEpfWFwcGx5QXR0cmlidXRlVmFsdWUoYSxkKXtjb25zdCBoPXRoaXMucmVuZGVyZXIsZj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7bnVsbCE9PWQ/aC5zZXRBdHRyaWJ1dGUoZixhLGQpOmgucmVtb3Zl'@;
put 'QXR0cmlidXRlKGYsYSl9Z2V0IHVybFRyZWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuY29tbWFuZHM/bnVsbDp0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dm9pZCAwIT09dGhpcy5yZWxhdGl2ZVRvP3RoaXMucmVsYXRpdmVUbzp0aGlzLnJvdXRl'@;
put 'LHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OnRoaXMucHJlc2VydmVGcmFnbWVudH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQoV2wpLFA0KCJ0YWJpbmRleCIpLHR0KEZvKSx0dChOaSksdHQoazUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNsaWNrKGYuYnV0dG9uLGYuY3RybEtleSxmLnNoaWZ0S2V5LGYuYWx0S2V5LGYubWV0YUtleSl9KSwyJmEmJlRyKCJ0YXJnZXQiLGQudGFyZ2V0KX0saW5wdXRzOnt0YXJnZXQ6InRhcmdldCIscXVlcnlQYXJhbXM6'@;
put 'InF1ZXJ5UGFyYW1zIixmcmFnbWVudDoiZnJhZ21lbnQiLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InF1ZXJ5UGFyYW1zSGFuZGxpbmciLHN0YXRlOiJzdGF0ZSIscmVsYXRpdmVUbzoicmVsYXRpdmVUbyIscHJlc2VydmVGcmFnbWVudDpbInByZXNlcnZlRnJhZ21lbnQiLCJwcmVzZXJ2ZUZyYWdt'@;
put 'ZW50IixVNl0sc2tpcExvY2F0aW9uQ2hhbmdlOlsic2tpcExvY2F0aW9uQ2hhbmdlIiwic2tpcExvY2F0aW9uQ2hhbmdlIixVNl0scmVwbGFjZVVybDpbInJlcGxhY2VVcmwiLCJyZXBsYWNlVXJsIixVNl0scm91dGVyTGluazoicm91dGVyTGluayJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6'@;
put 'W2VNLHZhXX0pLGN9KSgpLEdfPSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9Xyx0aGlz'@;
put 'LmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEVyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhw'@;
put 'JiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7V2kodGhpcy5saW5rcy5jaGFuZ2VzLFdpKG51bGwpKS5waXBlKFBpKCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExp'@;
put 'bmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29uc3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1'@;
put 'YnNjcmlwdGlvbj1lYShhKS5waXBlKFBpKCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNw'@;
put 'bGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1'@;
put 'YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuX2lzQWN0aXZlIT09YSYmKHRoaXMuX2lzQWN0aXZlPWEsdGhpcy5jZHIubWFya0ZvckNoZWNr'@;
put 'KCksdGhpcy5jbGFzc2VzLmZvckVhY2goZD0+e2E/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxkKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGQpfSksYSYmdm9pZCAwIT09dGhpcy5hcmlhQ3Vy'@;
put 'cmVudFdoZW5BY3RpdmU/dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIsdGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmUudG9TdHJpbmcoKSk6dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50'@;
put 'Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xpbmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiBYMmUoYyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtB'@;
put 'Y3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT4hIWgudXJsVHJlZSYmYS5pc0FjdGl2ZShoLnVybFRyZWUsZCl9aGFzQWN0aXZlTGlua3MoKXtjb25zdCBhPXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKTtyZXR1cm4gdGhp'@;
put 'cy5saW5rJiZhKHRoaXMubGluayl8fHRoaXMubGlua3Muc29tZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRHMpLHR0KE5pKSx0dChGbyksdHQoVWEpLHR0KEJ1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Iiwicm91dGVyTGlua0FjdGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLEJ1LDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGlua3M9Zil9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5rQWN0aXZlT3B0'@;
put 'aW9ucyIsYXJpYUN1cnJlbnRXaGVuQWN0aXZlOiJhcmlhQ3VycmVudFdoZW5BY3RpdmUiLHJvdXRlckxpbmtBY3RpdmU6InJvdXRlckxpbmtBY3RpdmUifSxvdXRwdXRzOntpc0FjdGl2ZUNoYW5nZToiaXNBY3RpdmVDaGFuZ2UifSxleHBvcnRBczpbInJvdXRlckxpbmtBY3RpdmUiXSxzdGFu'@;
put 'ZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyBMJHt9bGV0IEoyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmluamVjdG9yPWgsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9Zix0aGlzLmxvYWRlcj1ffXNldFVwUHJl'@;
put 'bG9hZGluZygpe3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKElhKGE9PmEgaW5zdGFuY2VvZiBocCksVzYoKCk9PnRoaXMucHJlbG9hZCgpKSkuc3Vic2NyaWJlKCgpPT57fSl9cHJlbG9hZCgpe3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModGhpcy5pbmplY3Rv'@;
put 'cix0aGlzLnJvdXRlci5jb25maWcpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJvY2Vzc1JvdXRlcyhhLGQpe2NvbnN0IGg9W107Zm9yKGNvbnN0IGYgb2YgZCl7Zi5wcm92aWRlcnMmJiFmLl9pbmplY3RvciYmKGYu'@;
put 'X2luamVjdG9yPUFSKGYucHJvdmlkZXJzLGEsYFJvdXRlOiAke2YucGF0aH1gKSk7Y29uc3QgXz1mLl9pbmplY3Rvcj8/YSxUPWYuX2xvYWRlZEluamVjdG9yPz9fOyhmLmxvYWRDaGlsZHJlbiYmIWYuX2xvYWRlZFJvdXRlcyYmdm9pZCAwPT09Zi5jYW5Mb2FkfHxmLmxvYWRDb21wb25lbnQm'@;
put 'JiFmLl9sb2FkZWRDb21wb25lbnQpJiZoLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKF8sZikpLChmLmNoaWxkcmVufHxmLl9sb2FkZWRSb3V0ZXMpJiZoLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKFQsZi5jaGlsZHJlbj8/Zi5fbG9hZGVkUm91dGVzKSl9cmV0dXJuIGVhKGgpLnBpcGUoUGko'@;
put 'KSl9cHJlbG9hZENvbmZpZyhhLGQpe3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGQsKCk9PntsZXQgaDtoPWQubG9hZENoaWxkcmVuJiZ2b2lkIDA9PT1kLmNhbkxvYWQ/dGhpcy5sb2FkZXIubG9hZENoaWxkcmVuKGEsZCk6V2kobnVsbCk7Y29uc3QgZj1oLnBpcGUo'@;
put 'eXIoXz0+bnVsbD09PV8/V2kodm9pZCAwKTooZC5fbG9hZGVkUm91dGVzPV8ucm91dGVzLGQuX2xvYWRlZEluamVjdG9yPV8uaW5qZWN0b3IsdGhpcy5wcm9jZXNzUm91dGVzKF8uaW5qZWN0b3I/P2EsXy5yb3V0ZXMpKSkpO3JldHVybiBkLmxvYWRDb21wb25lbnQmJiFkLl9sb2FkZWRDb21w'@;
put 'b25lbnQ/ZWEoW2YsdGhpcy5sb2FkZXIubG9hZENvbXBvbmVudChkKV0pLnBpcGUoUGkoKSk6Zn0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihEcyksYXIoblcpLGFyKHEwKSxhcihMJCksYXIoclApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBpUD1uZXcgTWkoIiIpO2xldCBSJD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXz17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmll'@;
put 'd3BvcnRTY3JvbGxlcj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz1fLHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LF8uc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj1fLnNjcm9sbFBvc2l0aW9uUmVz'@;
put 'dG9yYXRpb258fCJkaXNhYmxlZCIsXy5hbmNob3JTY3JvbGxpbmc9Xy5hbmNob3JTY3JvbGxpbmd8fCJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3Jv'@;
put 'bGxSZXN0b3JhdGlvbigibWFudWFsIiksdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4g'@;
put 'dGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgWU8/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVz'@;
put 'dG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgaHA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZy'@;
put 'YWdtZW50KSk6YSBpbnN0YW5jZW9mIFZfJiYwPT09YS5jb2RlJiYodGhpcy5sYXN0U291cmNlPXZvaWQgMCx0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYS51cmwpLmZyYWdtZW50KSl9KX1jb25zdW1lU2Nyb2xs'@;
put 'RXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIG8kJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0'@;
put 'aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmc/'@;
put 'dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9sbEV2'@;
put 'ZW50KGEsZCl7dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5uZXh0KG5ldyBvJChhLCJwb3BzdGF0ZSI9PT10aGlzLmxhc3RTb3VyY2U/dGhpcy5zdG9yZVt0aGlzLnJlc3Rv'@;
put 'cmVkSWRdOm51bGwsZCkpfSl9LDApfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpeyFmdW5j'@;
put 'dGlvbiBNUygpe3Rocm93IG5ldyBFcnJvcigiaW52YWxpZCIpfSgpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Z1bmN0aW9uIEVmKGMsbCl7cmV0dXJue1x1MDI3NWtpbmQ6YyxcdTAyNzVwcm92aWRlcnM6bH19ZnVuY3Rpb24gUCQoKXtj'@;
put 'b25zdCBjPUZpKEVhKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQoeDUpO2lmKGwhPT1hLmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoRHMpLGg9Yy5nZXQoRiQpOzE9PT1jLmdldChvUCkmJmQuaW5pdGlhbE5hdmlnYXRpb24oKSxjLmdldChIJCxudWxsLG5zLk9wdGlvbmFs'@;
put 'KT8uc2V0VXBQcmVsb2FkaW5nKCksYy5nZXQoaVAsbnVsbCxucy5PcHRpb25hbCk/LmluaXQoKSxkLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoYS5jb21wb25lbnRUeXBlc1swXSksaC5jbG9zZWR8fChoLm5leHQoKSxoLmNvbXBsZXRlKCksaC51bnN1YnNjcmliZSgpKX19Y29uc3QgRiQ9bmV3'@;
put 'IE1pKCIiLHtmYWN0b3J5OigpPT5uZXcgYmV9KSxvUD1uZXcgTWkoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSxIJD1uZXcgTWkoIiIpO2Z1bmN0aW9uIG5oZShjKXtyZXR1cm4gRWYoMCxbe3Byb3ZpZGU6SCQsdXNlRXhpc3Rpbmc6SjJlfSx7cHJvdmlkZTpMJCx1c2VF'@;
put 'eGlzdGluZzpjfV0pfWNvbnN0IE4kPW5ldyBNaSgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxpaGU9W0pkLHtwcm92aWRlOk9fLHVzZUNsYXNzOkJPfSxEcyxCXyx7cHJvdmlkZTpXbCx1c2VGYWN0b3J5OmZ1bmN0aW9uIE8kKGMpe3JldHVybiBjLnJvdXRlclN0YXRlLnJvb3R9LGRlcHM6W0Rz'@;
put 'XX0sclAsW11dO2Z1bmN0aW9uIG9oZSgpe3JldHVybiBuZXcgZlcoIlJvdXRlciIsRHMpfWxldCBkYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgZm9yUm9vdChhLGQpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbaWhlLFtdLHtwcm92aWRlOlE2LG11bHRpOiEw'@;
put 'LHVzZVZhbHVlOmF9LHtwcm92aWRlOk4kLHVzZUZhY3Rvcnk6Y2hlLGRlcHM6W1tEcyxuZXcgejIsbmV3IGcwXV19LHtwcm92aWRlOkx4LHVzZVZhbHVlOmR8fHt9fSxkPy51c2VIYXNoP3twcm92aWRlOms1LHVzZUNsYXNzOmt1ZX06e3Byb3ZpZGU6azUsdXNlQ2xhc3M6ald9LHtwcm92aWRl'@;
put 'OmlQLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPUZpKGowZSksbD1GaShObyksYT1GaShMeCksZD1GaShJeCksaD1GaShPXyk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3IFIkKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/'@;
put 'bmhlKGQucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10se3Byb3ZpZGU6ZlcsbXVsdGk6ITAsdXNlRmFjdG9yeTpvaGV9LGQ/LmluaXRpYWxOYXZpZ2F0aW9uP3VoZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/RWYoOCxbaCQse3Byb3ZpZGU6RXgsdXNlRXhp'@;
put 'c3Rpbmc6aCR9XSkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTpWJCx1c2VGYWN0b3J5OlAkfSx7cHJvdmlkZTpKUixtdWx0aTohMCx1c2VFeGlzdGluZzpWJH1dXX19c3RhdGljIGZvckNoaWxkKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6UTYsbXVsdGk6'@;
put 'ITAsdXNlVmFsdWU6YX1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTiQsOCkpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2Z1bmN0aW9uIGNoZShjKXtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rp'@;
put 'b24gdWhlKGMpe3JldHVyblsiZGlzYWJsZWQiPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigzLFt7cHJvdmlkZTpaUixtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShEcyk7cmV0dXJuKCk9PntsLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpfX19LHtwcm92aWRlOm9Q'@;
put 'LHVzZVZhbHVlOjJ9XSkuXHUwMjc1cHJvdmlkZXJzOltdLCJlbmFibGVkQmxvY2tpbmciPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigyLFt7cHJvdmlkZTpvUCx1c2VWYWx1ZTowfSx7cHJvdmlkZTpaUixtdWx0aTohMCxkZXBzOltFYV0sdXNlRmFjdG9yeTpsPT57Y29uc3QgYT1sLmdldCh4'@;
put 'dWUsUHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybigpPT5hLnRoZW4oKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPWwuZ2V0KERzKSxmPWwuZ2V0KEYkKTtJJChoLCgpPT57ZCghMCl9KSxsLmdldChJeCkuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4oZCghMCksZi5jbG9zZWQ/V2kodm9pZCAw'@;
put 'KTpmKSxoLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9fV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3QgViQ9bmV3IE1pKCIiKTt2YXIgQiQ9RigzNjA3MiksaGhlPUYoNjYzMDQpO2NvbnN0IHNQPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19h'@;
put 'bGxvd2VkOjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDoh'@;
put 'MCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIG4xPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9y'@;
put 'b3dzX2FsbG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0'@;
put 'YWJsZXNfaW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQi'@;
put 'LGNbYy5lZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30objF8fHt9KSxyMT1GKDU2MzIxKSxqJD1GLm4ocjEpLFVjPUYoNzY3NzEpO2xldCBlOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdz'@;
put 'KGEpe3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxhUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy51c2VyQ2hhbmdlPW5ldyBiZX1zZXQgdXNlcihhKXt0aGlzLl91c2VyPWEsdGhpcy51c2VyQ2hhbmdlLm5leHQoYSl9Z2V0IHVzZXIoKXtyZXR1cm4gdGhpcy5f'@;
put 'dXNlcn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbFA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyBiZX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdmw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFsZXJ0c1NlcnZpY2U9YSx0aGlzLm9uU2lkZWJhclRv'@;
put 'Z2dsZT1uZXcgRXIsdGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkPW5ldyBFcix0aGlzLm9uU2hvd0Fib3J0TW9kYWw9bmV3IEVyLHRoaXMub25SZXF1ZXN0c01vZGFsT3Blbj1uZXcgRXIsdGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdz1uZXcgRXIsdGhpcy52aWV3TGFzdFVybD1udWxsLHRoaXMu'@;
put 'c2lkZWJhckNsb3NlTGltaXQ9MTI4MH1zaG93RGVtb0xpbWl0TW9kYWwoYSl7dGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdy5lbWl0KGEpfXNob3dJbmZvTW9kYWwoYT0iSW5mbyIsZCl7dGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQoe21vZGFsVGl0bGU6YSxtZXNzYWdlOmQsc2FzU2Vydmlj'@;
put 'ZToiIixkZXRhaWxzOm51bGx9KX1zaG93QWJvcnRNb2RhbChhLGQsaCxmPXZvaWQgMCl7aHx8KGg9bnVsbCk7bGV0IF89e3Nhc1NlcnZpY2U6YSxtZXNzYWdlOmQsZGV0YWlsczpofTtmJiYoXy5tb2RhbFRpdGxlPWYpLHRoaXMub25TaG93QWJvcnRNb2RhbC5lbWl0KF8pfW9wZW5SZXF1ZXN0'@;
put 'c01vZGFsKCl7dGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuLmVtaXQoITApfWNhdGNoUmVzcG9uc2VFcnJvcihhLGQpe2xldCBoPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIjtpZihkLmVycm9yKXtsZXQgZjtoPWQuZXJyb3IubWVzc2FnZSxkLmVycm9yLmRldGFpbHMmJmQuZXJyb3IuZGV0'@;
put 'YWlscy5sb2cmJihmPWQuZXJyb3IuZGV0YWlscy5sb2cpLCghaHx8aC50cmltKCkubGVuZ3RoPDEpJiYoaD0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLHRoaXMuc2hvd0Fib3J0TW9kYWwoYSxoLHtMT0c6Zn0sIlJlcXVlc3QgZXJyb3IiKX1lbHNlIHRoaXMuc2hvd0Fib3J0TW9kYWwo'@;
put 'YSxoKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCgpfWNsb3NlU2lkZWJhcigpe3dpbmRvdy5pbm5lcldpZHRoPHRoaXMuc2lkZWJhckNsb3NlTGltaXQmJnRoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITF9KX1vcGVuU2lkZWJhcigpe3RoaXMub25T'@;
put 'aWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITB9KX1zdGFydHVwRGF0YUxvYWRlZCgpe3RoaXMub25TdGFydHVwRGF0YUxvYWRlZC5lbWl0KCl9ZGlzcGF0Y2hFdmVudChhKXtsZXQgZDsiZnVuY3Rpb24iPT10eXBlb2YgRXZlbnQ/ZD1uZXcgRXZlbnQoYSk6KGQ9ZG9jdW1lbnQuY3JlYXRlRXZl'@;
put 'bnQoIkV2ZW50IiksZC5pbml0RXZlbnQoYSwhMCwhMCkpLHdpbmRvdy5kaXNwYXRjaEV2ZW50KGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihsUCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92'@;
put 'aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIFJ4e31jbGFzcyBPeHt9Y2xhc3Mgb2h7Y29uc3RydWN0b3IobCl7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCxsPyJzdHJpbmciPT10eXBlb2YgbD90aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFk'@;
put 'ZXJzPW5ldyBNYXAsbC5zcGxpdCgiXG4iKS5mb3JFYWNoKGE9Pntjb25zdCBkPWEuaW5kZXhPZigiOiIpO2lmKGQ+MCl7Y29uc3QgaD1hLnNsaWNlKDAsZCksZj1oLnRvTG93ZXJDYXNlKCksXz1hLnNsaWNlKGQrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShoLGYpLHRo'@;
put 'aXMuaGVhZGVycy5oYXMoZik/dGhpcy5oZWFkZXJzLmdldChmKS5wdXNoKF8pOnRoaXMuaGVhZGVycy5zZXQoZixbX10pfX0pfTp0eXBlb2YgSGVhZGVyczwidSImJmwgaW5zdGFuY2VvZiBIZWFkZXJzPyh0aGlzLmhlYWRlcnM9bmV3IE1hcCxsLmZvckVhY2goKGEsZCk9Pnt0aGlzLnNldEhl'@;
put 'YWRlckVudHJpZXMoZCxhKX0pKTp0aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2EsZF0pPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGEsZCl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKGwpe3JldHVybiB0aGlz'@;
put 'LmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKGwudG9Mb3dlckNhc2UoKSl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpO3JldHVybiBhJiZhLmxlbmd0aD4wP2FbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5'@;
put 'LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiYSJ9KX1zZXQo'@;
put 'bCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxhKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoYSl8fHRoaXMu'@;
put 'bm9ybWFsaXplZE5hbWVzLnNldChhLGwpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIG9oP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxh'@;
put 'enlVcGRhdGUuZm9yRWFjaChsPT50aGlzLmFwcGx5VXBkYXRlKGwpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKGwpe2wuaW5pdCgpLEFycmF5LmZyb20obC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChhPT57dGhpcy5oZWFkZXJzLnNldChhLGwuaGVhZGVycy5nZXQoYSkpLHRo'@;
put 'aXMubm9ybWFsaXplZE5hbWVzLnNldChhLGwubm9ybWFsaXplZE5hbWVzLmdldChhKSl9KX1jbG9uZShsKXtjb25zdCBhPW5ldyBvaDtyZXR1cm4gYS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2Ygb2g/dGhpcy5sYXp5SW5pdDp0aGlzLGEubGF6eVVw'@;
put 'ZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtsXSksYX1hcHBseVVwZGF0ZShsKXtjb25zdCBhPWwubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChsLm9wKXtjYXNlImEiOmNhc2UicyI6bGV0IGQ9bC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIGQmJihkPVtkXSksMD09PWQu'@;
put 'bGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobC5uYW1lLGEpO2NvbnN0IGg9KCJhIj09PWwub3A/dGhpcy5oZWFkZXJzLmdldChhKTp2b2lkIDApfHxbXTtoLnB1c2goLi4uZCksdGhpcy5oZWFkZXJzLnNldChhLGgpO2JyZWFrO2Nhc2UiZCI6Y29uc3QgZj1sLnZh'@;
put 'bHVlO2lmKGYpe2xldCBfPXRoaXMuaGVhZGVycy5nZXQoYSk7aWYoIV8pcmV0dXJuO189Xy5maWx0ZXIoVD0+LTE9PT1mLmluZGV4T2YoVCkpLDA9PT1fLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShhKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoYSkpOnRoaXMuaGVhZGVycy5z'@;
put 'ZXQoYSxfKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpfX1zZXRIZWFkZXJFbnRyaWVzKGwsYSl7Y29uc3QgZD0oQXJyYXkuaXNBcnJheShhKT9hOlthXSkubWFwKGY9PmYudG9TdHJpbmcoKSksaD1sLnRvTG93ZXJDYXNlKCk7dGhp'@;
put 'cy5oZWFkZXJzLnNldChoLGQpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShsLGgpfWZvckVhY2gobCl7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goYT0+bCh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSksdGhpcy5oZWFk'@;
put 'ZXJzLmdldChhKSkpfX1jbGFzcyBmaGV7ZW5jb2RlS2V5KGwpe3JldHVybiB6JChsKX1lbmNvZGVWYWx1ZShsKXtyZXR1cm4geiQobCl9ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19'@;
put 'Y29uc3QgZ2hlPS8lKFxkW2EtZjAtOV0pL2dpLG1oZT17NDA6IkAiLCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24geiQoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKGdoZSwobCxhKT0+'@;
put 'bWhlW2FdPz9sKX1mdW5jdGlvbiBQeChjKXtyZXR1cm5gJHtjfWB9Y2xhc3MgcHB7Y29uc3RydWN0b3IobD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9bC5lbmNvZGVyfHxuZXcgZmhlLGwuZnJvbVN0cmluZyl7aWYobC5mcm9tT2Jq'@;
put 'ZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uIHBoZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYy5sZW5ndGg+MCYmYy5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZv'@;
put 'ckVhY2goaD0+e2NvbnN0IGY9aC5pbmRleE9mKCI9IiksW18sVF09LTE9PWY/W2wuZGVjb2RlS2V5KGgpLCIiXTpbbC5kZWNvZGVLZXkoaC5zbGljZSgwLGYpKSxsLmRlY29kZVZhbHVlKGguc2xpY2UoZisxKSldLFc9YS5nZXQoXyl8fFtdO1cucHVzaChUKSxhLnNldChfLFcpfSksYX0obC5m'@;
put 'cm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSBsLmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXMobC5mcm9tT2JqZWN0KS5mb3JFYWNoKGE9Pntjb25zdCBkPWwuZnJvbU9iamVjdFthXSxoPUFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoUHgpOltQeChkKV07dGhpcy5t'@;
put 'YXAuc2V0KGEsaCl9KSk6dGhpcy5tYXA9bnVsbH1oYXMobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyhsKX1nZXQobCl7dGhpcy5pbml0KCk7Y29uc3QgYT10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGE/YVswXTpudWxsfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhp'@;
put 'cy5tYXAuZ2V0KGwpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6ImEifSl9YXBwZW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIE9iamVj'@;
put 'dC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0IGg9bFtkXTtBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaChmPT57YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmYsb3A6ImEifSl9KTphLnB1c2goe3BhcmFtOmQsdmFsdWU6aCxvcDoiYSJ9KX0pLHRoaXMuY2xvbmUoYSl9c2V0KGwsYSl7cmV0dXJu'@;
put 'IHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoicyJ9KX1kZWxldGUobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChsPT57Y29uc3QgYT10aGlzLmVuY29kZXIu'@;
put 'ZW5jb2RlS2V5KGwpO3JldHVybiB0aGlzLm1hcC5nZXQobCkubWFwKGQ9PmErIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShkKSkuam9pbigiJiIpfSkuZmlsdGVyKGw9PiIiIT09bCkuam9pbigiJiIpfWNsb25lKGwpe2NvbnN0IGE9bmV3IHBwKHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0p'@;
put 'O3JldHVybiBhLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxhLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChsKSxhfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5p'@;
put 'bml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2gobD0+dGhpcy5tYXAuc2V0KGwsdGhpcy5jbG9uZUZyb20ubWFwLmdldChsKSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKGw9Pntzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmNvbnN0IGE9KCJhIj09PWwub3A/dGhpcy5tYXAu'@;
put 'Z2V0KGwucGFyYW0pOnZvaWQgMCl8fFtdO2EucHVzaChQeChsLnZhbHVlKSksdGhpcy5tYXAuc2V0KGwucGFyYW0sYSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1sLnZhbHVlKXt0aGlzLm1hcC5kZWxldGUobC5wYXJhbSk7YnJlYWt9e2xldCBkPXRoaXMubWFwLmdldChsLnBhcmFtKXx8'@;
put 'W107Y29uc3QgaD1kLmluZGV4T2YoUHgobC52YWx1ZSkpOy0xIT09aCYmZC5zcGxpY2UoaCwxKSxkLmxlbmd0aD4wP3RoaXMubWFwLnNldChsLnBhcmFtLGQpOnRoaXMubWFwLmRlbGV0ZShsLnBhcmFtKX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGwpfX1jbGFzcyB2aGV7'@;
put 'Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldChsLGEpe3JldHVybiB0aGlzLm1hcC5zZXQobCxhKSx0aGlzfWdldChsKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGwpfHx0aGlzLm1hcC5zZXQobCxsLmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQobCl9ZGVsZXRlKGwpe3JldHVy'@;
put 'biB0aGlzLm1hcC5kZWxldGUobCksdGhpc31oYXMobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19ZnVuY3Rpb24gVSQoYyl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlv'@;
put 'biBaJChjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBZJChjKXtyZXR1cm4gdHlwZW9mIEZvcm1EYXRhPCJ1IiYmYyBpbnN0YW5jZW9mIEZvcm1EYXRhfWNsYXNzICRfe2NvbnN0cnVjdG9yKGwsYSxkLGgpe2xldCBmO2lmKHRoaXMudXJsPWEs'@;
put 'dGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9bC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uIF9oZShjKXtzd2l0Y2goYyl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpj'@;
put 'YXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8aD8odGhpcy5ib2R5PXZvaWQgMCE9PWQ/ZDpudWxsLGY9aCk6Zj1kLGYmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhZi5yZXBvcnRQcm9ncmVzcyx0aGlz'@;
put 'LndpdGhDcmVkZW50aWFscz0hIWYud2l0aENyZWRlbnRpYWxzLGYucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9Zi5yZXNwb25zZVR5cGUpLGYuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1mLmhlYWRlcnMpLGYuY29udGV4dCYmKHRoaXMuY29udGV4dD1mLmNvbnRleHQpLGYucGFy'@;
put 'YW1zJiYodGhpcy5wYXJhbXM9Zi5wYXJhbXMpKSx0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IG9oKSx0aGlzLmNvbnRleHR8fCh0aGlzLmNvbnRleHQ9bmV3IHZoZSksdGhpcy5wYXJhbXMpe2NvbnN0IF89dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09Xy5sZW5ndGgpdGhp'@;
put 'cy51cmxXaXRoUGFyYW1zPWE7ZWxzZXtjb25zdCBUPWEuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1hKygtMT09PVQ/Ij8iOlQ8YS5sZW5ndGgtMT8iJiI6IiIpK199fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHBwLHRoaXMudXJsV2l0aFBhcmFtcz1hfXNlcmlhbGl6ZUJvZHkoKXty'@;
put 'ZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOlUkKHRoaXMuYm9keSl8fFokKHRoaXMuYm9keSl8fFkkKHRoaXMuYm9keSl8fGZ1bmN0aW9uIGJoZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSl8'@;
put 'fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBwcD90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/'@;
put 'SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxZJCh0aGlzLmJvZHkpP251bGw6WiQodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpVJCh0aGlzLmJvZHkp'@;
put 'P251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIHBwPyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2Yg'@;
put 'dGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9Y2xvbmUobD17fSl7Y29uc3QgYT1sLm1ldGhvZHx8dGhpcy5tZXRob2QsZD1sLnVybHx8dGhpcy51cmwsaD1sLnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsZj12b2lk'@;
put 'IDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxfPXZvaWQgMCE9PWwud2l0aENyZWRlbnRpYWxzP2wud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLFQ9dm9pZCAwIT09bC5yZXBvcnRQcm9ncmVzcz9sLnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0'@;
put 'IFc9bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsaWU9bC5wYXJhbXN8fHRoaXMucGFyYW1zO2NvbnN0IGdlPWwuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT1sLnNldEhlYWRlcnMmJihXPU9iamVjdC5rZXlzKGwuc2V0SGVhZGVycykucmVkdWNlKCh3ZSxFZSk9PndlLnNl'@;
put 'dChFZSxsLnNldEhlYWRlcnNbRWVdKSxXKSksbC5zZXRQYXJhbXMmJihpZT1PYmplY3Qua2V5cyhsLnNldFBhcmFtcykucmVkdWNlKCh3ZSxFZSk9PndlLnNldChFZSxsLnNldFBhcmFtc1tFZV0pLGllKSksbmV3ICRfKGEsZCxmLHtwYXJhbXM6aWUsaGVhZGVyczpXLGNvbnRleHQ6Z2UscmVw'@;
put 'b3J0UHJvZ3Jlc3M6VCxyZXNwb25zZVR5cGU6aCx3aXRoQ3JlZGVudGlhbHM6X30pfX12YXIgdDg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TZW50PTBdPSJTZW50IixjW2MuVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNl'@;
put 'SGVhZGVyIixjW2MuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsY1tjLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsY1tjLlVzZXI9NV09IlVzZXIiLGN9KHQ4fHx7fSk7Y2xhc3MgY1B7Y29uc3RydWN0b3IobCxhPTIwMCxkPSJPSyIpe3RoaXMuaGVhZGVycz1sLmhlYWRl'@;
put 'cnN8fG5ldyBvaCx0aGlzLnN0YXR1cz12b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czphLHRoaXMuc3RhdHVzVGV4dD1sLnN0YXR1c1RleHR8fGQsdGhpcy51cmw9bC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIHVQIGV4dGVuZHMg'@;
put 'Y1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlSGVhZGVyfWNsb25lKGw9e30pe3JldHVybiBuZXcgdVAoe2hlYWRlcnM6bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PWwuc3RhdHVzP2wuc3RhdHVzOnRoaXMuc3RhdHVzLHN0'@;
put 'YXR1c1RleHQ6bC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmwudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIG44IGV4dGVuZHMgY1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT1sLmJvZHk/'@;
put 'bC5ib2R5Om51bGx9Y2xvbmUobD17fSl7cmV0dXJuIG5ldyBuOCh7Ym9keTp2b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0'@;
put 'Omwuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBXJCBleHRlbmRzIGNQe2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEs'@;
put 'dGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke2wu'@;
put 'c3RhdHVzfSAke2wuc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9bC5lcnJvcnx8bnVsbH19ZnVuY3Rpb24gZFAoYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVz'@;
put 'czpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHN9fWxldCBoUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5z'@;
put 'dGFuY2VvZiAkXylmPWE7ZWxzZXtsZXQgVyxpZTtXPWguaGVhZGVycyBpbnN0YW5jZW9mIG9oP2guaGVhZGVyczpuZXcgb2goaC5oZWFkZXJzKSxoLnBhcmFtcyYmKGllPWgucGFyYW1zIGluc3RhbmNlb2YgcHA/aC5wYXJhbXM6bmV3IHBwKHtmcm9tT2JqZWN0OmgucGFyYW1zfSkpLGY9bmV3'@;
put 'ICRfKGEsZCx2b2lkIDAhPT1oLmJvZHk/aC5ib2R5Om51bGwse2hlYWRlcnM6Vyxjb250ZXh0OmguY29udGV4dCxwYXJhbXM6aWUscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRo'@;
put 'Q3JlZGVudGlhbHN9KX1jb25zdCBfPVdpKGYpLnBpcGUoVzYoVz0+dGhpcy5oYW5kbGVyLmhhbmRsZShXKSkpO2lmKGEgaW5zdGFuY2VvZiAkX3x8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIF87Y29uc3QgVD1fLnBpcGUoSWEoVz0+VyBpbnN0YW5jZW9mIG44KSk7c3dpdGNoKGgub2Jz'@;
put 'ZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIFQucGlwZShNZShXPT57aWYobnVsbCE9PVcuYm9keSYmIShXLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBp'@;
put 'cyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIFcuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBULnBpcGUoTWUoVz0+e2lmKG51bGwhPT1XLmJvZHkmJiEoVy5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVy'@;
put 'biBXLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gVC5waXBlKE1lKFc9PntpZihudWxsIT09Vy5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIFcuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gVy5ib2R5fSkpO2RlZmF1bHQ6cmV0dXJuIFQu'@;
put 'cGlwZShNZShXPT5XLmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gVDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUi'@;
put 'LGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IHBwKS5hcHBlbmQoZCwiSlNP'@;
put 'TlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLGRQKGgsZCkpfXBvc3QoYSxk'@;
put 'LGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGEsZFAoaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsZFAoaCxkKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFJ4KSl9LGMuXHUwMjc1cHJv'@;
put 'dj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gcSQoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiB3aGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0pfWNvbnN0IFNoZT1uZXcgTWkoIiIpLHFfPW5ldyBN'@;
put 'aSgiIiksSyQ9bmV3IE1pKCIiKTtmdW5jdGlvbiBNaGUoKXtsZXQgYz1udWxsO3JldHVybihsLGEpPT57bnVsbD09PWMmJihjPShGaShTaGUse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodCh3aGUscSQpKTtjb25zdCBkPUZpKHFNKSxoPWQuYWRkKCk7cmV0dXJuIGMobCxhKS5waXBl'@;
put 'KElfKCgpPT5kLnJlbW92ZShoKSkpfX1sZXQgWCQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ4e2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPUZpKHFNKX1oYW5kbGUoYSl7aWYo'@;
put 'bnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdldChxXyksLi4udGhpcy5pbmplY3Rvci5nZXQoSyQsW10pXSkpO3RoaXMuY2hhaW49aC5yZWR1Y2VSaWdodCgoZixfKT0+ZnVuY3Rpb24gQ2hlKGMsbCxhKXtyZXR1cm4oZCxo'@;
put 'KT0+YS5ydW5JbkNvbnRleHQoKCk9PmwoZCxmPT5jKGYsaCkpKX0oZixfLHRoaXMuaW5qZWN0b3IpLHEkKX1jb25zdCBkPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0aGlzLmNoYWluKGEsaD0+dGhpcy5iYWNrZW5kLmhhbmRsZShoKSkucGlwZShJXygoKT0+dGhpcy5wZW5kaW5n'@;
put 'VGFza3MucmVtb3ZlKGQpKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE94KSxhcihxMCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IEFoZT0vXlwpXF1cfScsP1xuLztsZXQg'@;
put 'USQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnhockZhY3Rvcnk9YX1oYW5kbGUoYSl7aWYoIkpTT05QIj09PWEubWV0aG9kKXRocm93IG5ldyBBcigtMjgwMCwhMSk7Y29uc3QgZD10aGlzLnhockZhY3Rvcnk7cmV0dXJuKGQuXHUwMjc1bG9hZEltcGw/ZWEoZC5cdTAyNzVs'@;
put 'b2FkSW1wbCgpKTpXaShudWxsKSkucGlwZShTYSgoKT0+bmV3IEtlKGY9Pntjb25zdCBfPWQuYnVpbGQoKTtpZihfLm9wZW4oYS5tZXRob2QsYS51cmxXaXRoUGFyYW1zKSxhLndpdGhDcmVkZW50aWFscyYmKF8ud2l0aENyZWRlbnRpYWxzPSEwKSxhLmhlYWRlcnMuZm9yRWFjaCgoZXQseXQp'@;
put 'PT5fLnNldFJlcXVlc3RIZWFkZXIoZXQseXQuam9pbigiLCIpKSksYS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fF8uc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWEuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtjb25z'@;
put 'dCBldD1hLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWV0JiZfLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZXQpfWlmKGEucmVzcG9uc2VUeXBlKXtjb25zdCBldD1hLnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO18ucmVzcG9uc2VUeXBlPSJqc29uIiE9PWV0'@;
put 'P2V0OiJ0ZXh0In1jb25zdCBUPWEuc2VyaWFsaXplQm9keSgpO2xldCBXPW51bGw7Y29uc3QgaWU9KCk9PntpZihudWxsIT09VylyZXR1cm4gVztjb25zdCBldD1fLnN0YXR1c1RleHR8fCJPSyIseXQ9bmV3IG9oKF8uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGt0PWZ1bmN0aW9uIFRoZShj'@;
put 'KXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfShfKXx8YS51cmw7cmV0dXJu'@;
put 'IFc9bmV3IHVQKHtoZWFkZXJzOnl0LHN0YXR1czpfLnN0YXR1cyxzdGF0dXNUZXh0OmV0LHVybDprdH0pLFd9LGdlPSgpPT57bGV0e2hlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6a3QsdXJsOlN0fT1pZSgpLFF0PW51bGw7MjA0IT09eXQmJihRdD10eXBlb2YgXy5yZXNwb25zZT4i'@;
put 'dSI/Xy5yZXNwb25zZVRleHQ6Xy5yZXNwb25zZSksMD09PXl0JiYoeXQ9UXQ/MjAwOjApO2xldCBybj15dD49MjAwJiZ5dDwzMDA7aWYoImpzb24iPT09YS5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgUXQpe2NvbnN0IHZuPVF0O1F0PVF0LnJlcGxhY2UoQWhlLCIiKTt0cnl7UXQ9'@;
put 'IiIhPT1RdD9KU09OLnBhcnNlKFF0KTpudWxsfWNhdGNoKE5uKXtRdD12bixybiYmKHJuPSExLFF0PXtlcnJvcjpObix0ZXh0OlF0fSl9fXJuPyhmLm5leHQobmV3IG44KHtib2R5OlF0LGhlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6a3QsdXJsOlN0fHx2b2lkIDB9KSksZi5jb21w'@;
put 'bGV0ZSgpKTpmLmVycm9yKG5ldyBXJCh7ZXJyb3I6UXQsaGVhZGVyczpldCxzdGF0dXM6eXQsc3RhdHVzVGV4dDprdCx1cmw6U3R8fHZvaWQgMH0pKX0sd2U9ZXQ9Pntjb25zdHt1cmw6eXR9PWllKCksa3Q9bmV3IFckKHtlcnJvcjpldCxzdGF0dXM6Xy5zdGF0dXN8fDAsc3RhdHVzVGV4dDpf'@;
put 'LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6eXR8fHZvaWQgMH0pO2YuZXJyb3Ioa3QpfTtsZXQgRWU9ITE7Y29uc3QgWmU9ZXQ9PntFZXx8KGYubmV4dChpZSgpKSxFZT0hMCk7bGV0IHl0PXt0eXBlOnQ4LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmV0LmxvYWRlZH07ZXQubGVu'@;
put 'Z3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSwidGV4dCI9PT1hLnJlc3BvbnNlVHlwZSYmXy5yZXNwb25zZVRleHQmJih5dC5wYXJ0aWFsVGV4dD1fLnJlc3BvbnNlVGV4dCksZi5uZXh0KHl0KX0sb3Q9ZXQ9PntsZXQgeXQ9e3R5cGU6dDguVXBsb2FkUHJvZ3Jlc3MsbG9hZGVk'@;
put 'OmV0LmxvYWRlZH07ZXQubGVuZ3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSxmLm5leHQoeXQpfTtyZXR1cm4gXy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixnZSksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsd2UpLF8uYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2Up'@;
put 'LF8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHdlKSxhLnJlcG9ydFByb2dyZXNzJiYoXy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWmUpLG51bGwhPT1UJiZfLnVwbG9hZCYmXy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLG90KSksXy5zZW5kKFQpLGYubmV4dCh7'@;
put 'dHlwZTp0OC5TZW50fSksKCk9PntfLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix3ZSksXy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsd2UpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsZ2UpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2UpLGEucmVwb3J0'@;
put 'UHJvZ3Jlc3MmJihfLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixaZSksbnVsbCE9PVQmJl8udXBsb2FkJiZfLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsb3QpKSxfLnJlYWR5U3RhdGUhPT1fLkRPTkUmJl8uYWJvcnQoKX19KSkpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihjRykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGZQPW5ldyBNaSgiWFNSRl9FTkFCTEVEIiksZXE9bmV3IE1pKCJYU1JGX0NPT0tJRV9OQU1FIix7cHJvdmlk'@;
put 'ZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlhTUkYtVE9LRU4ifSksdHE9bmV3IE1pKCJYU1JGX0hFQURFUl9OQU1FIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlgtWFNSRi1UT0tFTiJ9KTtjbGFzcyBucXt9bGV0IExoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo'@;
put 'KXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25z'@;
put 'dCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1YVyhhLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWEpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcyksYXIoR3MpLGFyKGVxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gUmhlKGMsbCl7Y29uc3QgYT1jLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFG'@;
put 'aShmUCl8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09PWMubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBsKGMpO2NvbnN0IGQ9RmkobnEpLmdldFRva2VuKCksaD1GaSh0cSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRl'@;
put 'cnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQoaCxkKX0pKSxsKGMpfXZhciBncD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMi'@;
put 'LGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09'@;
put 'IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIsY30oZ3B8fHt9KTtmdW5jdGlvbiBJNShjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIE9oZSguLi5jKXtjb25zdCBsPVtoUCxRJCxYJCx7cHJvdmlkZTpSeCx1c2VF'@;
put 'eGlzdGluZzpYJH0se3Byb3ZpZGU6T3gsdXNlRXhpc3Rpbmc6USR9LHtwcm92aWRlOnFfLHVzZVZhbHVlOlJoZSxtdWx0aTohMH0se3Byb3ZpZGU6ZlAsdXNlVmFsdWU6ITB9LHtwcm92aWRlOm5xLHVzZUNsYXNzOkxoZX1dO2Zvcihjb25zdCBhIG9mIGMpbC5wdXNoKC4uLmEuXHUwMjc1cHJv'@;
put 'dmlkZXJzKTtyZXR1cm4gZnVuY3Rpb24gaXYoYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpjfX0obCl9Y29uc3QgcnE9bmV3IE1pKCJMRUdBQ1lfSU5URVJDRVBUT1JfRk4iKTtsZXQgRmhlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbT2hlKEk1KGdwLkxlZ2FjeUludGVyY2VwdG9ycyxbe3Byb3ZpZGU6cnEsdXNlRmFjdG9yeTpNaGV9LHtwcm92aWRlOnFfLHVzZUV4aXN0aW5nOnJxLG11bHRpOiEwfV0pKV19KSxjfSko'@;
put 'KSxpcT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3Rv'@;
put 'cmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1n'@;
put 'ZXRGaWxlRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJs'@;
put 'fS9mb2xkZXI/X2ZvbGRlclBhdGg9JHthfWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4g'@;
put 'bmV3IFByb21pc2UoKGQsaCk9Pnt0aGlzLmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBUPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChUKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2Yg'@;
put 'YS5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoaFApLGFyKGU4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj'@;
put 'LHByb3ZpZGVkSW46InJvb3QifSksY30pKCksb2E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnVzZXJTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc2pzU2VydmljZT1mLHRoaXMubG9nZ2VyU2Vy'@;
put 'dmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBFcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhqJCgpKSx0aGlzLmFwcExv'@;
put 'Y0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyBUZSghMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IFRlKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygp'@;
put 'LHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyl7c3dpdGNoKHRoaXMuc2FzanNBZGFwdGVyPW5ldyhqJCgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgVWMuRC5TYXNWaXlhOnRo'@;
put 'aXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBVYy5ELlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIFVjLkQuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVwbG95KCl9IlJlZGly'@;
put 'ZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5z'@;
put 'aG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIrYSxkKSxuZXcgUHJv'@;
put 'bWlzZSgoXyxUKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihXPT57aWYoITE9PT1XLmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxUKCExKSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmVy5N'@;
put 'Rl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpXLk1GX0dFVFVTRVJ9KSxXLlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoVy5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNp'@;
put 'dGVJZCgpLmluY2x1ZGVzKFcuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5lbWl0KFcuU1lTU0lURSkpKSw0MDQ9PT1XLnN0YXR1cyYmVCh7TUVTU0FHRTpXLmJvZHl8fCJTQVMgUmVzcG9uZGVkIHdpdGggZXJyb3IifSksdHlwZW9mIFcuc2FzanNBYm9ydDwidSIpe2Nv'@;
put 'bnN0IGllPVcsZ2U9aWUuc2FzanNBYm9ydFswXS5NU0csd2U9aWUuc2FzanNBYm9ydFswXS5NQUM7aWYoZ2UuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2Fk'@;
put 'ZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBUKHtlcnJvcjpnZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwiIiksZ2Use1NZU1dBUk5JTkdU'@;
put 'RVhUOmllLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDppZS5TWVNFUlJPUlRFWFQsTUFDOndlfSksVCh7ZXJyb3I6Z2V9KX1fKFcpfSxXPT57aWYoY29uc29sZS5lcnJvcihXKSxXLmVycm9yKXtsZXQgZ2UsaWU9Vy5lcnJvci5tZXNzYWdlO1cuZXJyb3IuZGV0YWlscyYmVy5lcnJvci5k'@;
put 'ZXRhaWxzLmxvZyYmKGdlPVcuZXJyb3IuZGV0YWlscy5sb2cpLCghaWV8fGllLnRyaW0oKS5sZW5ndGg8MSkmJihpZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLGllLHtM'@;
put 'T0c6Z2V9LCJSZXF1ZXN0IGVycm9yIiksVCh7ZXJyb3I6aWV9KX1UKFcpfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIudXBsb2FkRmlsZShhLGQsaCl9bG9naW4oYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBmPWguZ2V0'@;
put 'U2VydmVyVHlwZSgpPT09VWMuRC5TYXNqcz8iY2xpZW50SUQxIjp2b2lkIDA7cmV0dXJuIGguc2FzanNBZGFwdGVyLmxvZ0luKGEsZCxmKS50aGVuKF89PihfLmlzTG9nZ2VkSW4mJihoLnVzZXJTZXJ2aWNlLnVzZXI9e3VzZXJuYW1lOl8udXNlck5hbWV9LGguYXBwTG9jQ2hlY2tQZW5kaW5n'@;
put 'JiYoaC5jaGVja1ZpeWFEZXBsb3koaC5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIiksaC5hcHBMb2NDaGVja1BlbmRpbmc9ITEpKSxoLnNob3VsZExvZ2luLm5leHQoIV8uaXNMb2dnZWRJbiksXy5pc0xvZ2dlZEluKSxfPT4oY29uc29sZS5lcnJvcihfKSxoLnNob3VsZExvZ2luLm5l'@;
put 'eHQoITApLCExKSkuY2F0Y2goXz0+KDQwMz09PV8mJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgaG9zdCIpLCExKSl9KSgpfWdldExpY2Vuc2VTaXRlSWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVf'@;
put 'aWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpbYV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJD'@;
put 'b250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRl'@;
put 'ci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2YuZXJyb3IuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKF89PnshMT09'@;
put 'PV8mJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmYuZXJyb3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJuKCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVw'@;
put 'RGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZmkoZnVuY3Rpb24qKGgsZil7'@;
put 'YS5jaGVja2luZ0ludGVydmFsPXNldEludGVydmFsKGZpKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbihfPT57XyYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKF8pKX0pLmNhdGNoKF89PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJ'@;
put 'bnRlcnZhbCksZihfKX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2Uo'@;
put 'KGQsaCk9Pntjb25zdCBfPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShfKS5zdWJzY3JpYmUoVD0+e1QuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITAp'@;
put 'fSxUPT57VC5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj0hMTtmPXR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiP3lpZWxk'@;
put 'IGQuYXBwTG9jQ2hlY2soYSk6eWllbGQgZC5hcHBMb2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSksZiYmZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKX0pKCl9YXBwTG9jQ2hlY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaD1maShm'@;
put 'dW5jdGlvbiooZixfKXtsZXQgVyxUPSExO3RyeXtXPXlpZWxkIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcihhKX1jYXRjaChpZSl7IkxvZ2luUmVxdWlyZWRFcnJvciI9PT1pZS5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoITEpKTpUPSEw'@;
put 'fWlmKFQpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGQuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGYoITEpO2YoITApfSk7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKGYsXyl7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCBfPSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRo'@;
put 'PSR7YX1gKS50aGVuKFQ9Pig0MDQ9PT1ULnN0YXR1cyYmKF89ITApLFQudGV4dCgpKSkudGhlbihUPT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQoVCkpdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKF8pcmV0dXJuIGNvbnNvbGUu'@;
put 'd2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2xldCBXPW51bGw7dHJ5e1c9SlNPTi5w'@;
put 'YXJzZShUKX1jYXRjaHt9aWYoVyYmVy5odHRwU3RhdHVzQ29kZSYmNDA0PT09Vy5odHRwU3RhdHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERh'@;
put 'dGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7ZCghMCl9fSkuY2F0Y2goVD0+e2QoITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQoYSl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3QoYSl9bG9nb3V0KCl7dGhp'@;
put 'cy5zYXNqc0FkYXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1'@;
put 'ZXN0cygpfXNldERlYnVnU3RhdGUoYSl7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0ZShhKX1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNlcnZlclR5cGUoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7cmV0'@;
put 'dXJuIGEuc2VydmVyVHlwZT9hLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBhdGgoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNoKGEuc2VydmVyVHlwZSl7Y2FzZSBVYy5ELlNhc1ZpeWE6cmV0dXJuIGEucGF0aFNBU1ZpeWE7Y2Fz'@;
put 'ZSBVYy5ELlNhczk6cmV0dXJuIGEucGF0aFNBUzk7Y2FzZSBVYy5ELlNhc2pzOnJldHVybiBhLnBhdGhTQVNKU319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGU4KSxhcihhUCksYXIodmwpLGFyKGlxKSxhcih3MCksYXIoRHMpKX0sYy5cdTAy'@;
put 'NzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSx3MD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmlnPy5k'@;
put 'ZWJ1ZyYmKGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xlLmxvZyhhKSl9ZXJyb3IoYSxkKXtjb25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGggb2Yg'@;
put 'T2JqZWN0LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0aGlzLmxvZygiLS0tLS0tIil9ZWxzZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KG9hKTt0aGlzLnNhc2pzQ29u'@;
put 'ZmlnPWEuZ2V0U2FzanNDb25maWcoKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3Qgb3E9ZnVu'@;
put 'Y3Rpb24gWmhlKGMsbCl7cmV0dXJuIGM9PT1sfHxjIT1jJiZsIT1sfSxIeD1mdW5jdGlvbiBZaGUoYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGg7YS0tOylpZihvcShjW2FdWzBdLGwpKXJldHVybiBhO3JldHVybi0xfTt2YXIgR2hlPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gcjgo'@;
put 'Yyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19cjgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHpoZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LHI4LnByb3RvdHlw'@;
put 'ZS5kZWxldGU9ZnVuY3Rpb24gJGhlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1IeChsLGMpO3JldHVybiEoYTwwfHwoYT09bC5sZW5ndGgtMT9sLnBvcCgpOkdoZS5jYWxsKGwsYSwxKSwtLXRoaXMuc2l6ZSwwKSl9LHI4LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gS2hlKGMpe3ZhciBsPXRo'@;
put 'aXMuX19kYXRhX18sYT1IeChsLGMpO3JldHVybiBhPDA/dm9pZCAwOmxbYV1bMV19LHI4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSmhlKGMpe3JldHVybiBIeCh0aGlzLl9fZGF0YV9fLGMpPi0xfSxyOC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGVmZShjLGwpe3ZhciBhPXRoaXMuX19kYXRh'@;
put 'X18sZD1IeChhLGMpO3JldHVybiBkPDA/KCsrdGhpcy5zaXplLGEucHVzaChbYyxsXSkpOmFbZF1bMV09bCx0aGlzfTtjb25zdCBOeD1yOCxzcT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIGRmZT0ib2JqZWN0Ij09'@;
put 'dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHNoPXNxfHxkZmV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksbXA9c2guU3ltYm9sO3ZhciBhcT1PYmplY3QucHJvdG90eXBlLHBmZT1hcS5oYXNPd25Qcm9wZXJ0eSxnZmU9YXEudG9TdHJpbmcs'@;
put 'S189bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBiZmU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgbHE9bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO2NvbnN0IGk4PWZ1bmN0aW9uIE1mZShjKXtyZXR1cm4gbnVsbD09Yz92b2lkIDA9PT1jPyJbb2JqZWN0IFVuZGVmaW5lZF0i'@;
put 'OiJbb2JqZWN0IE51bGxdIjpscSYmbHEgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uIG1mZShjKXt2YXIgbD1wZmUuY2FsbChjLEtfKSxhPWNbS19dO3RyeXtjW0tfXT12b2lkIDA7dmFyIGQ9ITB9Y2F0Y2h7fXZhciBoPWdmZS5jYWxsKGMpO3JldHVybiBkJiYobD9jW0tfXT1hOmRlbGV0ZSBjW0tf'@;
put 'XSksaH0oYyk6ZnVuY3Rpb24geWZlKGMpe3JldHVybiBiZmUuY2FsbChjKX0oYyl9LFhfPWZ1bmN0aW9uIHhmZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4gbnVsbCE9YyYmKCJvYmplY3QiPT1sfHwiZnVuY3Rpb24iPT1sKX0sY3E9ZnVuY3Rpb24gRGZlKGMpe2lmKCFYXyhjKSlyZXR1cm4h'@;
put 'MTt2YXIgbD1pOChjKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IFByb3h5XSI9PWx9O3ZhciBjLElmZT1zaFsiX19jb3JlLWpzX3NoYXJlZF9fIl0sdXE9'@;
put 'KGM9L1teLl0rJC8uZXhlYyhJZmUmJklmZS5rZXlzJiZJZmUua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK2M6IiI7dmFyIFBmZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgTDU9ZnVuY3Rpb24gRmZlKGMpe2lmKG51bGwhPWMpe3RyeXtyZXR1cm4gUGZl'@;
put 'LmNhbGwoYyl9Y2F0Y2h7fXRyeXtyZXR1cm4gYysiIn1jYXRjaHt9fXJldHVybiIifTt2YXIgTmZlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFVmZT1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy'@;
put 'dHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2NvbnN0IFlmZT1mdW5jdGlvbiBaZmUoYyl7cmV0dXJuISghWF8oYyl8fGZ1'@;
put 'bmN0aW9uIExmZShjKXtyZXR1cm4hIXVxJiZ1cSBpbiBjfShjKSkmJihjcShjKT9VZmU6TmZlKS50ZXN0KEw1KGMpKX0sUjU9ZnVuY3Rpb24gJGZlKGMsbCl7dmFyIGE9ZnVuY3Rpb24gV2ZlKGMsbCl7cmV0dXJuIGM/LltsXX0oYyxsKTtyZXR1cm4gWWZlKGEpP2E6dm9pZCAwfSxKXz1SNShz'@;
put 'aCwiTWFwIiksUV89UjUoT2JqZWN0LCJjcmVhdGUiKTt2YXIgcjNlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGEzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG84KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlz'@;
put 'LmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fW84LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBYZmUoKXt0aGlzLl9fZGF0YV9fPVFfP1FfKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxvOC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFFmZShjKXt2YXIg'@;
put 'bD10aGlzLmhhcyhjKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bY107cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sbzgucHJvdG90eXBlLmdldD1mdW5jdGlvbiBpM2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztpZihRXyl7dmFyIGE9bFtjXTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmlu'@;
put 'ZWRfXyI9PT1hP3ZvaWQgMDphfXJldHVybiByM2UuY2FsbChsLGMpP2xbY106dm9pZCAwfSxvOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGwzZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO3JldHVybiBRXz92b2lkIDAhPT1sW2NdOmEzZS5jYWxsKGwsYyl9LG84LnByb3RvdHlwZS5zZXQ9ZnVu'@;
put 'Y3Rpb24gZDNlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhjKT8wOjEsYVtjXT1RXyYmdm9pZCAwPT09bD8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6bCx0aGlzfTtjb25zdCBkcT1vOCxWeD1mdW5jdGlvbiB2M2UoYyxsKXt2YXIgYT1j'@;
put 'Ll9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBnM2UoYyl7dmFyIGw9dHlwZW9mIGM7cmV0dXJuInN0cmluZyI9PWx8fCJudW1iZXIiPT1sfHwic3ltYm9sIj09bHx8ImJvb2xlYW4iPT1sPyJfX3Byb3RvX18iIT09YzpudWxsPT09Y30obCk/YVsic3RyaW5nIj09dHlwZW9mIGw/InN0cmluZyI6'@;
put 'Imhhc2giXTphLm1hcH07ZnVuY3Rpb24gczgoYyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19czgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGYzZSgpe3RoaXMuc2l6ZT0wLHRo'@;
put 'aXMuX19kYXRhX189e2hhc2g6bmV3IGRxLG1hcDpuZXcoSl98fE54KSxzdHJpbmc6bmV3IGRxfX0sczgucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBfM2UoYyl7dmFyIGw9VngodGhpcyxjKS5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sczgucHJvdG90eXBlLmdldD1m'@;
put 'dW5jdGlvbiB5M2UoYyl7cmV0dXJuIFZ4KHRoaXMsYykuZ2V0KGMpfSxzOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIEMzZShjKXtyZXR1cm4gVngodGhpcyxjKS5oYXMoYyl9LHM4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTTNlKGMsbCl7dmFyIGE9VngodGhpcyxjKSxkPWEuc2l6ZTtyZXR1'@;
put 'cm4gYS5zZXQoYyxsKSx0aGlzLnNpemUrPWEuc2l6ZT09ZD8wOjEsdGhpc307Y29uc3QgZ1A9czg7ZnVuY3Rpb24gYTgoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXz1uZXcgTngoYyk7dGhpcy5zaXplPWwuc2l6ZX1hOC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gbmZlKCl7dGhpcy5fX2RhdGFf'@;
put 'Xz1uZXcgTngsdGhpcy5zaXplPTB9LGE4LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gaWZlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1sLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplPWwuc2l6ZSxhfSxhOC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIHNmZShjKXtyZXR1cm4gdGhpcy5f'@;
put 'X2RhdGFfXy5nZXQoYyl9LGE4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gbGZlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjKX0sYTgucHJvdG90eXBlLnNldD1mdW5jdGlvbiBrM2UoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5zdGFuY2VvZiBOeCl7dmFyIGQ9YS5fX2Rh'@;
put 'dGFfXztpZighSl98fGQubGVuZ3RoPDE5OSlyZXR1cm4gZC5wdXNoKFtjLGxdKSx0aGlzLnNpemU9KythLnNpemUsdGhpczthPXRoaXMuX19kYXRhX189bmV3IGdQKGQpfXJldHVybiBhLnNldChjLGwpLHRoaXMuc2l6ZT1hLnNpemUsdGhpc307Y29uc3QgVDNlPWE4O3ZhciBMM2U9ZnVuY3Rp'@;
put 'b24oKXt0cnl7dmFyIGM9UjUoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBjKHt9LCIiLHt9KSxjfWNhdGNoe319KCk7Y29uc3QgaHE9TDNlLGZxPWZ1bmN0aW9uIFIzZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJmhxP2hxKGMsbCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6'@;
put 'ITAsdmFsdWU6YSx3cml0YWJsZTohMH0pOmNbbF09YX07dmFyIFAzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IHBxPWZ1bmN0aW9uIEYzZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIVAzZS5jYWxsKGMsbCl8fCFvcShkLGEpfHx2b2lkIDA9PT1hJiYhKGwgaW4gYykpJiZm'@;
put 'cShjLGwsYSl9LEJ4PWZ1bmN0aW9uIEgzZShjLGwsYSxkKXt2YXIgaD0hYTthfHwoYT17fSk7Zm9yKHZhciBmPS0xLF89bC5sZW5ndGg7KytmPF87KXt2YXIgVD1sW2ZdLFc9ZD9kKGFbVF0sY1tUXSxULGEsYyk6dm9pZCAwO3ZvaWQgMD09PVcmJihXPWNbVF0pLGg/ZnEoYSxULFcpOnBxKGEs'@;
put 'VCxXKX1yZXR1cm4gYX0sbDg9ZnVuY3Rpb24gQjNlKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGN9LGdxPWZ1bmN0aW9uIHozZShjKXtyZXR1cm4gbDgoYykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1pOChjKX07dmFyIG1xPU9iamVjdC5wcm90b3R5cGUsVTNlPW1xLmhh'@;
put 'c093blByb3BlcnR5LFozZT1tcS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxZM2U9Z3EoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9ncTpmdW5jdGlvbihjKXtyZXR1cm4gbDgoYykmJlUzZS5jYWxsKGMsImNhbGxlZSIpJiYhWjNlLmNhbGwoYywiY2FsbGVlIil9O2NvbnN0IFczZT1Z'@;
put 'M2UsYzg9QXJyYXkuaXNBcnJheTt2YXIgdnE9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxfcT12cSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGJxPV9xJiZfcS5l'@;
put 'eHBvcnRzPT09dnE/c2guQnVmZmVyOnZvaWQgMDtjb25zdCB5cT0oYnE/YnEuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24gJDNlKCl7cmV0dXJuITF9O3ZhciBlcGU9L14oPzowfFsxLTldXGQqKSQvO2NvbnN0IG5wZT1mdW5jdGlvbiB0cGUoYyxsKXt2YXIgYT10eXBlb2YgYztyZXR1cm4h'@;
put 'IShsPWw/PzkwMDcxOTkyNTQ3NDA5OTEpJiYoIm51bWJlciI9PWF8fCJzeW1ib2wiIT1hJiZlcGUudGVzdChjKSkmJmM+LTEmJmMlMT09MCYmYzxsfSx3cT1mdW5jdGlvbiBpcGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9'@;
put 'O3ZhciBubD17fTtubFsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09bmxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPW5sWyJbb2JqZWN0IEludDhBcnJheV0iXT1ubFsiW29iamVjdCBJbnQxNkFycmF5XSJdPW5sWyJbb2JqZWN0IEludDMyQXJyYXldIl09bmxbIltvYmplY3QgVWludDhBcnJh'@;
put 'eV0iXT1ubFsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxubFsiW29iamVjdCBBcmd1bWVudHNdIl09bmxbIltvYmplY3QgQXJyYXldIl09bmxbIltvYmplY3QgQXJyYXlCdWZmZXJd'@;
put 'Il09bmxbIltvYmplY3QgQm9vbGVhbl0iXT1ubFsiW29iamVjdCBEYXRhVmlld10iXT1ubFsiW29iamVjdCBEYXRlXSJdPW5sWyJbb2JqZWN0IEVycm9yXSJdPW5sWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPW5sWyJbb2JqZWN0IE1hcF0iXT1ubFsiW29iamVjdCBOdW1iZXJdIl09bmxbIltvYmpl'@;
put 'Y3QgT2JqZWN0XSJdPW5sWyJbb2JqZWN0IFJlZ0V4cF0iXT1ubFsiW29iamVjdCBTZXRdIl09bmxbIltvYmplY3QgU3RyaW5nXSJdPW5sWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgbVA9ZnVuY3Rpb24gSXBlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBD'@;
put 'cT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGViPUNxJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsdlA9ZWImJmViLmV4cG9ydHM9PT1DcSYmc3EucHJvY2Vzcztj'@;
put 'b25zdCB1OD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZWImJmViLnJlcXVpcmUmJmViLnJlcXVpcmUoInV0aWwiKS50eXBlc3x8dlAmJnZQLmJpbmRpbmcmJnZQLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO3ZhciBTcT11OCYmdTguaXNUeXBlZEFycmF5O2NvbnN0IFBwZT1TcT9tUChTcSk6'@;
put 'ZnVuY3Rpb24gVHBlKGMpe3JldHVybiBsOChjKSYmd3EoYy5sZW5ndGgpJiYhIW5sW2k4KGMpXX07dmFyIEhwZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IE1xPWZ1bmN0aW9uIE5wZShjLGwpe3ZhciBhPWM4KGMpLGQ9IWEmJlczZShjKSxoPSFhJiYhZCYmeXEoYyks'@;
put 'Zj0hYSYmIWQmJiFoJiZQcGUoYyksXz1hfHxkfHxofHxmLFQ9Xz9mdW5jdGlvbiBOM2UoYyxsKXtmb3IodmFyIGE9LTEsZD1BcnJheShjKTsrK2E8YzspZFthXT1sKGEpO3JldHVybiBkfShjLmxlbmd0aCxTdHJpbmcpOltdLFc9VC5sZW5ndGg7Zm9yKHZhciBpZSBpbiBjKShsfHxIcGUuY2Fs'@;
put 'bChjLGllKSkmJighX3x8ISgibGVuZ3RoIj09aWV8fGgmJigib2Zmc2V0Ij09aWV8fCJwYXJlbnQiPT1pZSl8fGYmJigiYnVmZmVyIj09aWV8fCJieXRlTGVuZ3RoIj09aWV8fCJieXRlT2Zmc2V0Ij09aWUpfHxucGUoaWUsVykpKSYmVC5wdXNoKGllKTtyZXR1cm4gVH07dmFyIFZwZT1PYmpl'@;
put 'Y3QucHJvdG90eXBlO2NvbnN0IF9QPWZ1bmN0aW9uIEJwZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8VnBlKX0seHE9ZnVuY3Rpb24ganBlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjKGwo'@;
put 'YSkpfX0sVXBlPXhxKE9iamVjdC5rZXlzLE9iamVjdCk7dmFyIFlwZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IEVxPWZ1bmN0aW9uICRwZShjKXtyZXR1cm4gbnVsbCE9YyYmd3EoYy5sZW5ndGgpJiYhY3EoYyl9LGJQPWZ1bmN0aW9uIHFwZShjKXtyZXR1cm4gRXEo'@;
put 'Yyk/TXEoYyk6ZnVuY3Rpb24gV3BlKGMpe2lmKCFfUChjKSlyZXR1cm4gVXBlKGMpO3ZhciBsPVtdO2Zvcih2YXIgYSBpbiBPYmplY3QoYykpWXBlLmNhbGwoYyxhKSYmImNvbnN0cnVjdG9yIiE9YSYmbC5wdXNoKGEpO3JldHVybiBsfShjKX07dmFyIHQ0ZT1PYmplY3QucHJvdG90eXBlLmhh'@;
put 'c093blByb3BlcnR5O2NvbnN0IHI0ZT1mdW5jdGlvbiBuNGUoYyl7aWYoIVhfKGMpKXJldHVybiBmdW5jdGlvbiBKcGUoYyl7dmFyIGw9W107aWYobnVsbCE9Yylmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWwucHVzaChhKTtyZXR1cm4gbH0oYyk7dmFyIGw9X1AoYyksYT1bXTtmb3IodmFyIGQg'@;
put 'aW4gYykiY29uc3RydWN0b3IiPT1kJiYobHx8IXQ0ZS5jYWxsKGMsZCkpfHxhLnB1c2goZCk7cmV0dXJuIGF9LHlQPWZ1bmN0aW9uIGk0ZShjKXtyZXR1cm4gRXEoYyk/TXEoYywhMCk6cjRlKGMpfTt2YXIga3E9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5u'@;
put 'b2RlVHlwZSYmZXhwb3J0cyxBcT1rcSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLFRxPUFxJiZBcS5leHBvcnRzPT09a3E/c2guQnVmZmVyOnZvaWQgMCxEcT1UcT9UcS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgSXE9ZnVuY3Rp'@;
put 'b24gcDRlKCl7cmV0dXJuW119O3ZhciBtNGU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxMcT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHY0ZT1McT9mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Yz9bXTooYz1PYmplY3QoYyksZnVuY3Rpb24gaDRlKGMsbCl7'@;
put 'Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9MCxmPVtdOysrYTxkOyl7dmFyIF89Y1thXTtsKF8sYSxjKSYmKGZbaCsrXT1fKX1yZXR1cm4gZn0oTHEoYyksZnVuY3Rpb24obCl7cmV0dXJuIG00ZS5jYWxsKGMsbCl9KSl9OklxO2NvbnN0IHdQPXY0ZSxScT1mdW5jdGlvbiB5'@;
put 'NGUoYyxsKXtmb3IodmFyIGE9LTEsZD1sLmxlbmd0aCxoPWMubGVuZ3RoOysrYTxkOyljW2grYV09bFthXTtyZXR1cm4gY30sT3E9eHEoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIFM0ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIg'@;
put 'bD1bXTtjOylScShsLHdQKGMpKSxjPU9xKGMpO3JldHVybiBsfTpJcTtjb25zdCBQcT1TNGUsRnE9ZnVuY3Rpb24gRTRlKGMsbCxhKXt2YXIgZD1sKGMpO3JldHVybiBjOChjKT9kOlJxKGQsYShjKSl9LEE0ZT1mdW5jdGlvbiBrNGUoYyl7cmV0dXJuIEZxKGMsYlAsd1ApfSxENGU9ZnVuY3Rp'@;
put 'b24gVDRlKGMpe3JldHVybiBGcShjLHlQLFBxKX0sQ1A9UjUoc2gsIkRhdGFWaWV3IiksU1A9UjUoc2gsIlByb21pc2UiKSxNUD1SNShzaCwiU2V0IikseFA9UjUoc2gsIldlYWtNYXAiKTt2YXIgSHE9IltvYmplY3QgTWFwXSIsTnE9IltvYmplY3QgUHJvbWlzZV0iLFZxPSJbb2JqZWN0IFNl'@;
put 'dF0iLEJxPSJbb2JqZWN0IFdlYWtNYXBdIixqcT0iW29iamVjdCBEYXRhVmlld10iLEY0ZT1MNShDUCksSDRlPUw1KEpfKSxONGU9TDUoU1ApLFY0ZT1MNShNUCksQjRlPUw1KHhQKSxPNT1pODsoQ1AmJk81KG5ldyBDUChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9anF8fEpfJiZPNShuZXcgSl8p'@;
put 'IT1IcXx8U1AmJk81KFNQLnJlc29sdmUoKSkhPU5xfHxNUCYmTzUobmV3IE1QKSE9VnF8fHhQJiZPNShuZXcgeFApIT1CcSkmJihPNT1mdW5jdGlvbihjKXt2YXIgbD1pOChjKSxhPSJbb2JqZWN0IE9iamVjdF0iPT1sP2MuY29uc3RydWN0b3I6dm9pZCAwLGQ9YT9MNShhKToiIjtpZihkKXN3'@;
put 'aXRjaChkKXtjYXNlIEY0ZTpyZXR1cm4ganE7Y2FzZSBINGU6cmV0dXJuIEhxO2Nhc2UgTjRlOnJldHVybiBOcTtjYXNlIFY0ZTpyZXR1cm4gVnE7Y2FzZSBCNGU6cmV0dXJuIEJxfXJldHVybiBsfSk7Y29uc3QgRVA9TzU7dmFyIHo0ZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5'@;
put 'O2NvbnN0IHpxPXNoLlVpbnQ4QXJyYXksa1A9ZnVuY3Rpb24gVzRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyB6cShsKS5zZXQobmV3IHpxKGMpKSxsfTt2YXIgcTRlPS9cdyokLzt2YXIgVXE9bXA/bXAucHJvdG90eXBlOnZvaWQgMCxacT1V'@;
put 'cT9VcS52YWx1ZU9mOnZvaWQgMDtjb25zdCBDNWU9ZnVuY3Rpb24gdzVlKGMsbCxhKXt2YXIgZD1jLmNvbnN0cnVjdG9yO3N3aXRjaChsKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4ga1AoYyk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJl'@;
put 'dHVybiBuZXcgZCgrYyk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uIEc0ZShjLGwpe3ZhciBhPWw/a1AoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmJ5dGVMZW5ndGgpfShjLGEpO2Nhc2UiW29iamVj'@;
put 'dCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50'@;
put 'OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBmdW5jdGlvbiBlNWUoYyxsKXt2YXIgYT1sP2tQKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQs'@;
put 'Yy5sZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBNYXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBkO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBkKGMpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZnVuY3Rpb24g'@;
put 'SzRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuc291cmNlLHE0ZS5leGVjKGMpKTtyZXR1cm4gbC5sYXN0SW5kZXg9Yy5sYXN0SW5kZXgsbH0oYyk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBmdW5jdGlvbiBKNGUoYyl7cmV0dXJuIFpxP09iamVjdChacS5jYWxsKGMpKTp7'@;
put 'fX0oYyl9fTt2YXIgWXE9T2JqZWN0LmNyZWF0ZSxTNWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKCl7fXJldHVybiBmdW5jdGlvbihsKXtpZighWF8obCkpcmV0dXJue307aWYoWXEpcmV0dXJuIFlxKGwpO2MucHJvdG90eXBlPWw7dmFyIGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQg'@;
put 'MCxhfX0oKTtjb25zdCBNNWU9UzVlO3ZhciBXcT11OCYmdTguaXNNYXA7Y29uc3QgSTVlPVdxP21QKFdxKTpmdW5jdGlvbiBBNWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBNYXBdIj09RVAoYyl9O3ZhciBHcT11OCYmdTguaXNTZXQ7Y29uc3QgRjVlPUdxP21QKEdxKTpmdW5jdGlvbiBS'@;
put 'NWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBTZXRdIj09RVAoYyl9O3ZhciAkcT0iW29iamVjdCBBcmd1bWVudHNdIixxcT0iW29iamVjdCBGdW5jdGlvbl0iLEtxPSJbb2JqZWN0IE9iamVjdF0iLFlhPXt9O1lhWyRxXT1ZYVsiW29iamVjdCBBcnJheV0iXT1ZYVsiW29iamVjdCBBcnJh'@;
put 'eUJ1ZmZlcl0iXT1ZYVsiW29iamVjdCBEYXRhVmlld10iXT1ZYVsiW29iamVjdCBCb29sZWFuXSJdPVlhWyJbb2JqZWN0IERhdGVdIl09WWFbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQ4QXJyYXldIl09WWFbIltv'@;
put 'YmplY3QgSW50MTZBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IE1hcF0iXT1ZYVsiW29iamVjdCBOdW1iZXJdIl09WWFbS3FdPVlhWyJbb2JqZWN0IFJlZ0V4cF0iXT1ZYVsiW29iamVjdCBTZXRdIl09WWFbIltvYmplY3QgU3RyaW5nXSJdPVlhWyJbb2Jq'@;
put 'ZWN0IFN5bWJvbF0iXT1ZYVsiW29iamVjdCBVaW50OEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLFlhWyJbb2JqZWN0IEVycm9yXSJdPVlhW3FxXT1ZYVsiW29i'@;
put 'amVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IGNnZT1mdW5jdGlvbiBqeChjLGwsYSxkLGgsZil7dmFyIF8sVD0xJmwsVz0yJmwsaWU9NCZsO2lmKGEmJihfPWg/YShjLGQsaCxmKTphKGMpKSx2b2lkIDAhPT1fKXJldHVybiBfO2lmKCFYXyhjKSlyZXR1cm4gYzt2YXIgZ2U9YzgoYyk7aWYoZ2Up'@;
put 'e2lmKF89ZnVuY3Rpb24gVTRlKGMpe3ZhciBsPWMubGVuZ3RoLGE9bmV3IGMuY29uc3RydWN0b3IobCk7cmV0dXJuIGwmJiJzdHJpbmciPT10eXBlb2YgY1swXSYmejRlLmNhbGwoYywiaW5kZXgiKSYmKGEuaW5kZXg9Yy5pbmRleCxhLmlucHV0PWMuaW5wdXQpLGF9KGMpLCFUKXJldHVybiBm'@;
put 'dW5jdGlvbiB1NGUoYyxsKXt2YXIgYT0tMSxkPWMubGVuZ3RoO2ZvcihsfHwobD1BcnJheShkKSk7KythPGQ7KWxbYV09Y1thXTtyZXR1cm4gbH0oYyxfKX1lbHNle3ZhciB3ZT1FUChjKSxFZT13ZT09cXF8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXdlO2lmKHlxKGMpKXJldHVy'@;
put 'biBmdW5jdGlvbiBsNGUoYyxsKXtpZihsKXJldHVybiBjLnNsaWNlKCk7dmFyIGE9Yy5sZW5ndGgsZD1EcT9EcShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsVCk7aWYod2U9PUtxfHx3ZT09JHF8fEVlJiYhaCl7aWYoXz1XfHxFZT97fTpmdW5jdGlvbiB4'@;
put 'NWUoYyl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGMuY29uc3RydWN0b3J8fF9QKGMpP3t9Ok01ZShPcShjKSl9KGMpLCFUKXJldHVybiBXP2Z1bmN0aW9uIE00ZShjLGwpe3JldHVybiBCeChjLFBxKGMpLGwpfShjLGZ1bmN0aW9uIG80ZShjLGwpe3JldHVybiBjJiZCeChsLHlQKGwpLGMp'@;
put 'fShfLGMpKTpmdW5jdGlvbiBfNGUoYyxsKXtyZXR1cm4gQngoYyx3UChjKSxsKX0oYyxmdW5jdGlvbiBLcGUoYyxsKXtyZXR1cm4gYyYmQngobCxiUChsKSxjKX0oXyxjKSl9ZWxzZXtpZighWWFbd2VdKXJldHVybiBoP2M6e307Xz1DNWUoYyx3ZSxUKX19Znx8KGY9bmV3IFQzZSk7dmFyIFpl'@;
put 'PWYuZ2V0KGMpO2lmKFplKXJldHVybiBaZTtmLnNldChjLF8pLEY1ZShjKT9jLmZvckVhY2goZnVuY3Rpb24oeXQpe18uYWRkKGp4KHl0LGwsYSx5dCxjLGYpKX0pOkk1ZShjKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKHl0LGt0KXtfLnNldChrdCxqeCh5dCxsLGEsa3QsYyxmKSl9KTt2YXIgZXQ9'@;
put 'Z2U/dm9pZCAwOihpZT9XP0Q0ZTpBNGU6Vz95UDpiUCkoYyk7cmV0dXJuIGZ1bmN0aW9uIEQzZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0sYSxjKTspO30oZXR8fGMsZnVuY3Rpb24oeXQsa3Qpe2V0JiYoeXQ9Y1trdD15dF0pLHBx'@;
put 'KF8sa3QsangoeXQsbCxhLGt0LGMsZikpfSksX30seng9ZnVuY3Rpb24gaGdlKGMpe3JldHVybiBjZ2UoYyw1KX07dmFyIGZnZT1GKDkyODczKTtsZXQgQWM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5sb2FkTW9yZUNvdW50PTUwLHRo'@;
put 'aXMuaXNNaWNyb3NvZnQ9ITEsdGhpcy5pc01pY3Jvc29mdD10aGlzLmlzSUVvckVER0UoKSxjb25zb2xlLmxvZygiSXMgSUUgb3IgRWRnZT8iLHRoaXMuaXNNaWNyb3NvZnQpfWNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSxkPSJkYXlzIil7bGV0IGgsZj0wO2g9YSBpbnN0YW5jZW9mIERhdGU/'@;
put 'YTpuZXcgRGF0ZShhKSxmPW5ldyBEYXRlKERhdGUuVVRDKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCksaC5nZXRIb3VycygpLGguZ2V0TWludXRlcygpLGguZ2V0U2Vjb25kcygpKSkudmFsdWVPZigpO2NvbnN0IFc9ZiszMTU2MTkyZTU7c3dpdGNoKGQpe2Nhc2Ui'@;
put 'ZGF5cyI6e2xldCBpZT1XLzg2NGU1O3JldHVybiBpZT1NYXRoLmFicyhpZSksaWU9TWF0aC5mbG9vcihpZSksaWV9Y2FzZSJzZWNvbmRzIjpyZXR1cm4gVy8xZTN9cmV0dXJuIDB9Y29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQ9ImRheXMiKXtpZigibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBh'@;
put 'cnNlRmxvYXQoYSkpLCJzZWNvbmRzIj09PWQpe2xldCBUPTFlMyphLTMxNTYxOTJlNTtyZXR1cm4gVCs9NjAqbmV3IERhdGUoVCkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsbmV3IERhdGUoVCl9cmV0dXJuIG5ldyBEYXRlKDg2NGU1KmEtMzE1NjE5MmU1KX10cmVlT25GaWx0ZXIoYSxkKXts'@;
put 'ZXQgaD1hLnNlYXJjaFN0cmluZz9hLnNlYXJjaFN0cmluZzoiIixmPWQuc3BsaXQoIi4iKVswXSxfPWQuc3BsaXQoIi4iKVsxXSxUPWYrIkFsbCI7YVtmXSYmKGFbVF18fChhW1RdPXRoaXMuZGVlcENsb25lKGFbZl0pKSxhW2ZdPXRoaXMuZGVlcENsb25lKGFbVF0pLGgubGVuZ3RoPjAmJihh'@;
put 'W2ZdPWFbZl0uZmlsdGVyKF8/Vz0+V1tfXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSk6Vz0+Vy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSkpKSl9bGlicmFyeU9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wP2EuZm9yRWFjaChmPT57Zlto'@;
put 'XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSk/KGYuaGlkZGVuPSExLGYuaW5Gb3JlZ3JvdW5kPSEwKTooZi5oaWRkZW49ITAsZi5pbkZvcmVncm91bmQ9ITEpfSk6KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSx0aGlzLmRpc3BsYXlMaWJyYXJpZXMoYSkpfWRpc3Bs'@;
put 'YXlMaWJyYXJpZXMoYSxkKXtkP3RoaXMuc2hvd25MaWJyYXJpZXMrPXRoaXMubG9hZE1vcmVDb3VudDoodGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLnJlc2V0TGlicmFyeUZvcmVncm91bmQoYSkpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGgmJmghPT10aGlzLnNob3duTGlicmFyaWVzO2gr'@;
put 'KylhW2hdLmluRm9yZWdyb3VuZD0hMH1yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpe2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uaW5Gb3JlZ3JvdW5kPSExfW1ldGFPYmplY3RPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD8odGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLGEuZm9y'@;
put 'RWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSl8fChmLmhpZGRlbj0hMCl9KSk6dGhpcy5yZXNldEFycmF5RmlsdGVyKGEpfXJlc2V0QXJyYXlGaWx0ZXIoYSl7YS5mb3JFYWNoKGQ9PntkLmhpZGRlbj0hMSxkLmluRm9yZWdyb3VuZCYmZGVsZXRl'@;
put 'IGQuaW5Gb3JlZ3JvdW5kfSl9aXNJRW9yRURHRSgpe3ZhciBhPXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBhLmluZGV4T2YoIk1TSUUgIik+MHx8KGEuaW5kZXhPZigiVHJpZGVudC8iKT4wPyhhLmluZGV4T2YoInJ2OiIpLCEwKTphLmluZGV4T2YoIkVkZ2UvIik+MCl9Y29u'@;
put 'dmVydE9iamVjdHNUb0FycmF5KGEsZD0hMSl7cmV0dXJuIGQmJihhPXRoaXMuZGVlcENsb25lKGEpKSxhLm1hcChoPT5PYmplY3Qua2V5cyhoKS5tYXAoZj0+aFtmXSkpfWFkZExlYWRpbmdaZXJvKGEpe3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhLmxlbmd0'@;
put 'aDwyPyIwIithOmF9ZGVsZXRlS2V5c0FuZEhhc2goYSxkLGg9ITApe2NvbnN0IGY9aD90aGlzLmRlZXBDbG9uZShhKTphO2ZvcihsZXQgXyBvZiBkKWRlbGV0ZSBmW19dO3JldHVybiBmZ2UoSlNPTi5zdHJpbmdpZnkoZikpLnRvU3RyaW5nKCl9ZG93bmxvYWRUZXh0RmlsZShhLGQpe2NvbnN0'@;
put 'IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2guc2V0QXR0cmlidXRlKCJocmVmIiwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoZCkpLGguc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYSsiLnR4dCIpLGguc3R5bGUuZGlzcGxheT0ibm9u'@;
put 'ZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxoLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX1jb252ZXJ0QXJyYXlWYWx1ZXMoYSxkKXtpZihhLmxlbmd0aDwxKXJldHVybltdO3N3aXRjaChkKXtjYXNlIm51bWJlciI6cmV0dXJuIGEubWFwKGg9PjEqaCk7Y2Fz'@;
put 'ZSJzdHJpbmciOnJldHVybiBhLnRvU3RyaW5nKCkuc3BsaXQoIiwiKX19ZGVib3VuY2VDYWxsKGEsZCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KGQsYSl9ZGVlcENsb25lKGEpe3JldHVybiB6eChhKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksQzA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5sb2dn'@;
put 'ZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlz'@;
put 'Ll9saWNlbmNlU3RhdGU9c1AsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19hbGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVzX2lu'@;
put 'X2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlfbGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tleTp0'@;
put 'aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6S28oKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNpdGVf'@;
put 'aWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcgVGUobnVsbCksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgVGUoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgVGUoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBUZSghMSksdGhpcy5s'@;
put 'aWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgVGUobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVyPW5ldyBUZSghMSksdGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgVGUobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IFRlKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IFRlKHRoaXMuX2xp'@;
put 'Y2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKFc9PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgaWU9YC9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3Nt'@;
put 'YXRjaCZtaXNzbWF0Y2hJZD0ke1d9JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChpZSksdGhpcy5kZWFjdGl2YXRlQXBwKGllKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGlj'@;
put 'ZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVz'@;
put 'KGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1swXS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKCFhfHwhYVswXSl7Y29uc3QgXz0nRXJyb3IgZ2V0dGluZyAi'@;
put 'R2xvYnZhcnMiIGZyb20gc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UuJztyZXR1cm4gY29uc29sZS5lcnJvcihfKSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYShf'@;
put 'KX1gKX1sZXQgZj1hWzBdO3JldHVybiB2b2lkIDA9PT1mLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9PT1mLkFDVElWQVRJT05fS0VZfHxudWxsPT1mLlJFR0lTVEVSQ09VTlR8fG51bGw9PWYuSVNSRUdJU1RFUkVEPyhjb25zb2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2Vu'@;
put 'dCIpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2UiKSk6Zi5MSUNFTkNFX0tFWSYmZi5BQ1RJVkFUSU9OX0tF'@;
put 'WT8oaC5saWNlbmNlS2V5PWYuTElDRU5DRV9LRVksaC5hY3RpdmF0aW9uS2V5PWYuQUNUSVZBVElPTl9LRVksdm9pZCh5aWVsZCBoLmRlY3J5cHRMaWNlbnNlS2V5KGYuTElDRU5DRV9LRVksZi5BQ1RJVkFUSU9OX0tFWSkudGhlbihmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXt5'@;
put 'aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihULGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIF8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXtjb25zdCBXPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAk'@;
put 'e1R9YDtjb25zb2xlLmVycm9yKFcpO2NvbnN0IGllPWAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKFcpfSZmb3JjZT10cnVlYDtoLmxpY2VuY2VQcm9ibGVtLm5leHQoaWUpLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoaWUpLHNldFRpbWVvdXQoKCk9PmguYXBw'@;
put 'bGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVybiBmdW5jdGlvbihUKXtyZXR1cm4gXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQp'@;
put 'fSkoKX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCBfPXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5'@;
put 'OnRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO198fChfPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQoXyksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJz'@;
put 'QWxsb3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpULGRheXNUb0V4cGlyeTpXfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJ'@;
put 'bj1XLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChXKSxXPD0wKXJldHVybiBjb25zb2xlLmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoVCxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxk'@;
put 'JiZ0aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1'@;
put 'cm47cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29uc3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZh'@;
put 'bHVlKGRbbjEudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnN0YWdlX3Jvd3NfYWxsb3dl'@;
put 'ZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5oaXN0b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0'@;
put 'OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5saW5l'@;
put 'YWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW24xLnZpZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtuMS5lZGl0UmVj'@;
put 'b3JkXSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuYWRkUmVjb3JkXSl9LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50'@;
put 'KGEpfXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNlbnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1maShmdW5jdGlvbiooXyxUKXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlw'@;
put 'dG8uc3VidGxlKXRyeXtsZXQgRWU9YXRvYihhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpO18oSlNPTi5wYXJzZShFZSkpfWNhdGNoKEVlKXtUKCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitFZSl9bGV0IGllLFc9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVm'@;
put 'ZmVyKGEpLmNhdGNoKEVlPT57VChFZSl9KTtjb25zdCBnZT15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoZCkuY2F0Y2goRWU9PntUKEVlKX0pO2lmKCFnZSlyZXR1cm4gdm9pZCBUKCJNaXNzaW5nIGFjdGl2YXRpb24ga2V5Iik7bGV0IHdlO2llPWdlO3RyeXt3ZT15aWVsZCB3aW5kb3cu'@;
put 'Y3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBrY3M4IixpZSx7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goRWUpe1QoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrRWUpfWlmKHdlKWlmKFcpdHJ5e3dpbmRvdy5jcnlwdG8u'@;
put 'c3VidGxlLmRlY3J5cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LHdlLFcpLnRoZW4oRWU9PntsZXQgWmU9KG5ldyBoaGUuVGV4dERlY29kZXIpLmRlY29kZShFZSk7dHJ5e18oSlNPTi5wYXJzZShaZSkpfWNhdGNoKG90KXtUKCJFcnJvciBwYXJzaW5nIGxpY2Vu'@;
put 'c2Uga2V5IGRhdGEuICIrb3QpfX0sRWU9PntUKEVlKX0pfWNhdGNoKEVlKXtUKEVlKX1lbHNlIFQoIkxpY2Vuc2Uga2V5IGJ5dGVzIG1pc3NpbmciKTtlbHNlIFQoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXkiKX0pO3JldHVybiBmdW5jdGlvbihfLFQpe3JldHVybiBmLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKX19KCkpfWdldEhvdExpY2Vuc2VLZXkoKXtyZXR1cm4gdGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWV9Z2V0TGljZW5zZUtleURhdGEoKXtyZXR1cm4gdGhpcy5saWNlbnNlS2V5RGF0YX1kZWFjdGl2YXRlQXBwKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZT1zUCx0aGlz'@;
put 'LmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLGEmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYSl9Y2hlY2tMaW5lYWdlTGltaXQoYSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtj'@;
put 'b25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxoPUtvKCkudmFsdWVPZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksXz1wYXJzZUludChkLnNwbGl0KCIs'@;
put 'IilbMV0pO3JldHVybiBLbyhmKS5pc1NhbWUoS28oKSwiZGF5Iik/Xz49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLF8rMSksITEpOihhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMSl9c2V0TGlu'@;
put 'ZWFnZVJlbmRlcihhLGQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke2F9LCR7ZH1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWZpKGZ1bmN0aW9uKihoLGYpe2goQiQuSihhKSl9KTtyZXR1cm4g'@;
put 'ZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcnJheUJ1ZmZlclRvQmFzZTY0KGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2QoQiQuYyhhKSl9KX1zZXRTaXRlSWQoYSl7YS5zaXRlX2lkX211bHRpcGxlP3RoaXMuc2FzU2VydmljZS5zZXRM'@;
put 'aWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZF9tdWx0aXBsZSk6YS5zaXRlX2lkJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWQpfWhhbmRsZVNpdGVJZE1pc3NtYXRjaChhLGQsaCxmKXtsZXQgXz0hMSxUPSExO2lmKCghYS5zaXRlX2lkfHxhLnNpdGVfaWQhPT1oKSYm'@;
put 'KF89ITApLCghYS5zaXRlX2lkX211bHRpcGxlfHwhYS5zaXRlX2lkX211bHRpcGxlLmluY2x1ZGVzKGgpKSYmKFQ9ITApLF8mJlQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRoZSBrZXkgcHJvdmlkZWQgaXMgZm9yIGRpZmZlcmVudCBvcmdhbml6YXRpb24uIiksdm9pZCBzZXRUaW1lb3V0KCgp'@;
put 'PT57Y29uc3QgVz0iL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJmZvcmNlPXRydWUiO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChXKSx0aGlzLl9saWNlbmNlU3RhdGU9c1AsdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCks'@;
put 'Znx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChXKX0pfWNhbGN1bGF0ZUV4cGlyeShhKXtsZXQgZD1LbyhhLnZhbGlkX3VudGlsLCJZWVlZLU1NLUREIikuc3RhcnRPZigiZGF5IiksaD1LbygpLnN0YXJ0T2YoImRheSIpLGY9ZC5kaWZmKGgsImRheXMiKTtyZXR1cm57ZXhwaXJ5X2RhdGU6'@;
put 'ZCxkYXlzVG9FeHBpcnk6Zn19aGFuZGxlRXhwaXJ5KGEsZCxoLGYpe3NldFRpbWVvdXQoKCk9Pntjb25zdCBfPWAvbGljZW5zaW5nL2tleT9mb3JjZT10cnVlJmVycm9yPWV4cGlyZWQmZGV0YWlscz0ke2J0b2EoIkV4cGlyeSBkYXRlOiAiK2EuZm9ybWF0KCJERC9NTS9ZWVlZIikpfWA7dGhp'@;
put 'cy5saWNlbmNlUHJvYmxlbS5uZXh0KF8pLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxkLGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXyl9KX1oYW5kbGVVc2Vyc0FsbG93ZWQoYSl7YS5kZW1vJiZ2b2lkIDAhPT10aGlzLl9s'@;
put 'aWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCYmKGEudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWQ+MD9hLnVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQpLHRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dlZH1oYW5k'@;
put 'bGVVc2VyUmVnaXN0cmF0aW9uKGEsZCxoKXtpZih0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJihkLlJFR0lTVEVSQ09VTlQ+YS51c2Vyc19hbGxvd2VkPyhjb25zb2xlLndhcm4oIkFwcCBoYXMgbW9yZSB1c2VycyByZWdpc3RlcmVkIHRoZW4gbGljZW5zZWQuIiksdGhpcy5pc0FwcE92ZXJD'@;
put 'YXBhY2l0eS5uZXh0KCEwKSk6ZC5SRUdJU1RFUkNPVU5UPT09YS51c2Vyc19hbGxvd2VkJiZjb25zb2xlLndhcm4oIkFwcCBoYXMgaGl0IGxpbWl0IG9mIHVzZXJzIHJlZ2lzdGVyZWQuIikpLDEhPT1kLklTUkVHSVNURVJFRClyZXR1cm4gZC5SRUdJU1RFUkNPVU5UPGEudXNlcnNfYWxsb3dl'@;
put 'ZHx8IXRoaXMudXNlckNvdW50TGltaXRhdGlvbj8oY29uc29sZS5sb2coIlVzZXIgY2FuIHJlZ2lzdGVyIiksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITApLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIv'@;
put 'bGljZW5zaW5nL3JlZ2lzdGVyIikpKToodGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITEpLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2xpbWl0IikpKTt0aGlzLmlzQXBwQWN0aXZhdGVk'@;
put 'Lm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcih3MCksYXIoZTgpLGFyKHZsKSxhcihvYSksYXIoQWMpLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi'@;
put 'fSksY30pKCksVXg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMucm91dGVyPV8sdGhpcy5zeXNzaXRlPW5ldyBUZShu'@;
put 'dWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz1udWxsLHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhwJiYiL2RlcGxveSI9PT1ULnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pfXNhc1NlcnZp'@;
put 'Y2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRlSWRFbWl0'@;
put 'dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwoZC5wdXNoKGEp'@;
put 'LHRoaXMuc3lzc2l0ZS5uZXh0KGQpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9ZmkoZnVu'@;
put 'Y3Rpb24qKGYpe2Euc3lzc2l0ZS5uZXh0KFtmLlNZU1NJVEVdKTtsZXQgXz1bXTtpZigoIWYuZ2xvYnZhcnN8fGYuZ2xvYnZhcnMmJiFmLmdsb2J2YXJzWzBdKSYmXy5wdXNoKCJHbG9idmFycyIpLGYuc2FzZGF0YXNldHN8fF8ucHVzaCgiU2FzZGF0YXNldHMiKSxmLnNhc2xpYnN8fF8ucHVz'@;
put 'aCgiU2FzbGlicyIpLGYueGxtYXBzfHxfLnB1c2goIlhMTWFwcyIpLF8ubGVuZ3RoPjApcmV0dXJuIGQ9ITAsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLGAke18uam9pbigiLCAiKX0gYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZWApLHZvaWQgYS5s'@;
put 'aWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLlNZU1NJVEUsU1lTU0NQTDpmLlNZU1NDUEwsU1lTVENQSVBIT1NUTkFNRTpmLlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5TWVNWTE9ORyxNRU1TSVpFOmYuTUVNU0la'@;
put 'RSxTWVNQUk9DRVNTTU9ERTpmLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuU1lTSE9TVE5BTUUsU1lTSE9TVElORk9MT05HOmYuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmYuU1lTRU5DT0RJTkcsQVVUT0VYRUM6Zi5BVVRPRVhFQyxJU0FETUlOOmYuZ2xvYnZhcnNbMF0uSVNB'@;
put 'RE1JTixEQ19BRE1JTl9HUk9VUDpmLmdsb2J2YXJzWzBdLkRDX0FETUlOX0dST1VQfTtsZXQgaWUsZ2UsVD1mLnNhc2RhdGFzZXRzLFc9e307Zm9yKGxldCBvdCBvZiBUKVdbb3QuTElCUkVGXXx8KFdbb3QuTElCUkVGXT1bXSksV1tvdC5MSUJSRUZdLnB1c2gob3QuRFNOKTtsZXQgd2U9SlNP'@;
put 'Ti5wYXJzZShKU09OLnN0cmluZ2lmeShXKSksRWU9W107Zm9yKGxldCBvdCBvZiBPYmplY3Qua2V5cyh3ZSkpRWUucHVzaCh7TElCUkFSWVJFRjpvdCx0YWJsZXM6d2Vbb3RdfSk7bGV0IFplPUVlO2llPVcsZ2U9T2JqZWN0LmtleXMoVyksdm9pZCAwIT09aWUmJihHbi5lZGl0b3IubGlic0Fu'@;
put 'ZFRhYmxlcz1pZSksR24ueGxtYXBzPWYueGxtYXBzLm1hcChvdD0+KHtpZDpvdFswXSxkZXNjcmlwdGlvbjpvdFsxXSx0YXJnZXREUzpvdFsyXX0pKSxHbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9WmUsR24uZWRpdG9yLmxpYnJhcmllcz1nZSxHbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxH'@;
put 'bi5kY0xpYj1mLmdsb2J2YXJzWzBdLkRDTElCLHlpZWxkIGEubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbihmKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFs'@;
put 'KCJFcnJvciIsIlRoZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dnZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRl'@;
put 'ZC52YWx1ZSksZHx8KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51'@;
put 'cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVlIikpfSkoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8YykoYXIoQzApLGFyKHZsKSxhcihvYSksYXIodzApLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgcGdle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5mbj1sLHRoaXMuc3Vic2NyaXB0aW9ucz1hfXVu'@;
put 'c3Vic2NyaWJlKCl7Y29uc3QgbD10aGlzLnN1YnNjcmlwdGlvbnMuaW5kZXhPZih0aGlzKTstMSE9PWwmJnRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2UobCwxKX19ZnVuY3Rpb24gdnAoYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwv'@;
put 'cGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBrZihjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fHZwKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGQ4KGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50'@;
put 'cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIHZwKGEpP2w6a2YoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIHZwKGEpJiZ2cChkKT9sOnZwKGEpP2tmKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTp2cChkKT9rZihmdW5jdGlvbiho'@;
put 'KXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19Y29uc3QgWng9ZDgoZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiBZeChjLGwpe3Jl'@;
put 'dHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgWHE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztjb25zdCBKcT1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09WHEuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwpe3JldHVy'@;
put 'biJbb2JqZWN0IEFyZ3VtZW50c10iPT09WHEuY2FsbChsKX06ZnVuY3Rpb24obCl7cmV0dXJuIFl4KCJjYWxsZWUiLGwpfX0oKSxfZ2U9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJmwubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3Rv'@;
put 'dHlwZS50b1N0cmluZy5jYWxsKGwpfTtmdW5jdGlvbiBRcShjKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX12YXIgd2dlPWtmKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFz'@;
put 'eS1sYW5kL2VtcHR5Il0/bFsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0/bC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpu'@;
put 'dWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5lbXB0eT9sLmVtcHR5KCk6bnVsbCE9bCYmbnVsbCE9bC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3IuZW1wdHk/bC5jb25zdHJ1Y3Rvci5lbXB0eSgpOl9nZShsKT9bXTpRcShsKT8iIjpmdW5jdGlvbiBi'@;
put 'Z2UoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9OkpxKGwpP2Z1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKTpmdW5jdGlvbiB5Z2UoYyl7dmFyIGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMp'@;
put 'O3JldHVybiJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IEludDE2QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQzMkFy'@;
put 'cmF5XSI9PT1sfHwiW29iamVjdCBVaW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI9PT1sfShsKT9sLmNv'@;
put 'bnN0cnVjdG9yLmZyb20oIiIpOnZvaWQgMH0pO2NvbnN0IENnZT13Z2U7ZnVuY3Rpb24gZUsoYyl7Zm9yKHZhciBhLGw9W107IShhPWMubmV4dCgpKS5kb25lOylsLnB1c2goYS52YWx1ZSk7cmV0dXJuIGx9ZnVuY3Rpb24gdEsoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5sZW5ndGg7ZDxoOyl7'@;
put 'aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0dXJuITF9Y29uc3QgVFA9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gTWdlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgeGdlPSF7dG9TdHJpbmc6bnVs'@;
put 'bH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksbks9WyJjb25zdHJ1Y3RvciIsInZhbHVlT2YiLCJpc1Byb3RvdHlwZU9mIiwidG9TdHJpbmciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc093blByb3BlcnR5IiwidG9Mb2NhbGVTdHJpbmciXSxySz1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoImxlbmd0aCIpfSgpLEVnZT1mdW5jdGlvbihsLGEpe2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7KXtpZihsW2RdPT09YSlyZXR1cm4hMDtkKz0xfXJldHVybiExfTtjb25zdCBpSz1rZigiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0'@;
put 'LmtleXN8fHJLP2Z1bmN0aW9uKGwpe2lmKE9iamVjdChsKSE9PWwpcmV0dXJuW107dmFyIGEsZCxoPVtdLGY9cksmJkpxKGwpO2ZvcihhIGluIGwpWXgoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoeGdlKWZvcihkPW5LLmxlbmd0aC0xO2Q+PTA7KVl4KGE9'@;
put 'bktbZF0sbCkmJiFFZ2UoaCxhKSYmKGhbaC5sZW5ndGhdPWEpLGQtPTE7cmV0dXJuIGh9OmZ1bmN0aW9uKGwpe3JldHVybiBPYmplY3QobCkhPT1sP1tdOk9iamVjdC5rZXlzKGwpfSksb0s9a2YoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxsIjp2b2lkIDA9PT1sPyJVbmRlZmlu'@;
put 'ZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIHNLKGMsbCxhLGQpe3ZhciBoPWVLKGMpO2Z1bmN0aW9uIF8oVCxXKXtyZXR1cm4gRFAoVCxXLGEuc2xpY2UoKSxkLnNsaWNlKCkpfXJldHVybiF0SyhmdW5jdGlvbihULFcpe3JldHVy'@;
put 'biF0SyhfLFcsVCl9LGVLKGwpLGgpfWZ1bmN0aW9uIERQKGMsbCxhLGQpe2lmKFRQKGMsbCkpcmV0dXJuITA7dmFyIGg9b0soYyk7aWYoaCE9PW9LKGwpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'WyJmYW50YXN5LWxhbmQvZXF1YWxzIl0pcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmY1siZmFudGFzeS1sYW5kL2VxdWFscyJdKGwpJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdJiZsWyJmYW50YXN5LWxhbmQv'@;
put 'ZXF1YWxzIl0oYyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzfHwiZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVhbHMpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzJiZjLmVxdWFscyhsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzJiZsLmVxdWFscyhjKTtzd2l0'@;
put 'Y2goaCl7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjppZigiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25zdHJ1Y3RvciYmIlByb21pc2UiPT09ZnVuY3Rpb24gU2dlKGMpe3ZhciBsPVN0cmluZyhjKS5tYXRjaCgvXmZ1bmN0aW9uIChcdyopLyk7cmV0dXJuIG51bGw9'@;
put 'PWw/IiI6bFsxXX0oYy5jb25zdHJ1Y3RvcikpcmV0dXJuIGM9PT1sO2JyZWFrO2Nhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjppZih0eXBlb2YgYyE9dHlwZW9mIGx8fCFUUChjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJEYXRlIjpp'@;
put 'ZighVFAoYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVybiBjLm5hbWU9PT1sLm5hbWUmJmMubWVzc2FnZT09PWwubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYoYy5zb3VyY2UhPT1sLnNvdXJjZXx8Yy5nbG9iYWwhPT1sLmdsb2JhbHx8Yy5p'@;
put 'Z25vcmVDYXNlIT09bC5pZ25vcmVDYXNlfHxjLm11bHRpbGluZSE9PWwubXVsdGlsaW5lfHxjLnN0aWNreSE9PWwuc3RpY2t5fHxjLnVuaWNvZGUhPT1sLnVuaWNvZGUpcmV0dXJuITF9Zm9yKHZhciBmPWEubGVuZ3RoLTE7Zj49MDspe2lmKGFbZl09PT1jKXJldHVybiBkW2ZdPT09bDtmLT0x'@;
put 'fXN3aXRjaChoKXtjYXNlIk1hcCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmc0soYy5lbnRyaWVzKCksbC5lbnRyaWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIlNldCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmc0soYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29u'@;
put 'Y2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJlZ0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWlu'@;
put 'dDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7'@;
put 'ZGVmYXVsdDpyZXR1cm4hMX12YXIgXz1pSyhjKTtpZihfLmxlbmd0aCE9PWlLKGwpLmxlbmd0aClyZXR1cm4hMTt2YXIgVD1hLmNvbmNhdChbY10pLFc9ZC5jb25jYXQoW2xdKTtmb3IoZj1fLmxlbmd0aC0xO2Y+PTA7KXt2YXIgaWU9X1tmXTtpZighWXgoaWUsbCl8fCFEUChsW2llXSxjW2ll'@;
put 'XSxULFcpKXJldHVybiExO2YtPTF9cmV0dXJuITB9Y29uc3QgRGdlPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIERQKGwsYSxbXSxbXSl9KSxhSz1rZihmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmRGdlKGwsQ2dlKGwpKX0pO2Z1bmN0aW9uIHRiKGMpe3JldHVybiBudWxsPT1jfWZ1bmN0'@;
put 'aW9uIF9wKGMpe3JldHVybiB0YihjKXx8YUsoYyl9ZnVuY3Rpb24gSVAoYyl7cmV0dXJuIFp4KFN0cmluZyxjKX1mdW5jdGlvbiBXeChjKXtyZXR1cm4gWngoT2JqZWN0LGMpfWZ1bmN0aW9uIGNLKGMpe3JldHVybiBaeChNYXAsYyl9ZnVuY3Rpb24gdUsoYyxsKXtyZXR1cm4gYyE9PWx9ZnVu'@;
put 'Y3Rpb24gZEsoYyxsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYyk9PT1KU09OLnN0cmluZ2lmeShsKX1mdW5jdGlvbiBoSyhjKXtjb25zdCBsPW5ldyBNYXA7Zm9yKGNvbnN0W2EsZF1vZiBjKWNLKGQpP2wuc2V0KGEsaEsoZCkpOmwuc2V0KGEsZCk7cmV0dXJuIGx9ZnVuY3Rpb24gSGdlKGMp'@;
put 'e3N3aXRjaCghMCl7Y2FzZSBjSyhjKTpyZXR1cm4gaEsoYyk7Y2FzZSBXeChjKSYmIUFycmF5LmlzQXJyYXkoYyk6cmV0dXJuIFA1KHt9LGMpO2RlZmF1bHQ6cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpfX1mdW5jdGlvbiBQNSguLi5jKXtjb25zdCBsPXt9O3JldHVybiBj'@;
put 'Lm1hcChhPT5XeChhKT97Li4uYX06e30pLmZvckVhY2goYT0+e09iamVjdC5rZXlzKGEpLmZvckVhY2goZD0+e2NvbnN0IGg9YVtkXTtsW2RdPUFycmF5LmlzQXJyYXkoaCk/QXJyYXkuZnJvbShoKTpXeChoKT9QNShsW2RdfHx7fSxoKTpofSl9KSxsfWZ1bmN0aW9uIHBLKGM9d2luZG93KXty'@;
put 'ZXR1cm4hdGIoYyl9bGV0IEd4LGdLLExQLFJQO2Z1bmN0aW9uIG1LKGM9ITApe2lmKCFjfHwhR3gpe2NvbnN0IGw9ZG9jdW1lbnQmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltuZy12ZXJzaW9uXSIpO0d4PWw/IiIrbC5nZXRBdHRyaWJ1dGUoIm5nLXZlcnNpb24iKTp2b2lkIDB9cmV0dXJu'@;
put 'IEd4fWZ1bmN0aW9uIHpnZShjPSEwKXtyZXR1cm4gYyYmR3h8fChnSz13aW5kb3c/LmFuZ3VsYXI/LnZlcnNpb24/LmZ1bGwpLGdLfWZ1bmN0aW9uIHZLKGM9ITApe3JldHVybiBjJiZMUHx8KExQPXdpbmRvdz8uQ0RTPy5fcmVhY3Q/LnZlcnNpb24/d2luZG93LkNEUy5fcmVhY3QudmVyc2lv'@;
put 'bjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1yZWFjdHJvb3RdLCBbZGF0YS1yZWFjdGlkXSIpPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMCksTFB9ZnVuY3Rpb24gX0soYz0hMCl7aWYoIWN8fCFSUCl7Y29uc3QgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIik7bGV0IGE7'@;
put 'Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYobFtkXS5fX3Z1ZV9fKXthPWxbZF07YnJlYWt9UlA9YT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDB9cmV0dXJuIFJQfWZ1bmN0aW9uIEY1KGMpe3JldHVybiBjLnJlcGxhY2UoL1tBLVpdL2csbD0+Ii0iK2wudG9Mb3dlckNhc2UoKSl9ZnVu'@;
put 'Y3Rpb24gd0soYyl7cmV0dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCBxZ2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5zdXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1q'@;
put 'cyI9PT1kb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9RjUoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEpPT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIpKS50cmltKCk7ZG9jdW1lbnQuYm9keS5z'@;
put 'ZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIsYyl9fX07ZnVuY3Rpb24gTUsoYyxsKXtzd2l0Y2goYyl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oYSxkLGgpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA0OnJldHVybiBmdW5jdGlvbihhLGQsaCxmKXty'@;
put 'ZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNjpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07'@;
put 'Y2FzZSA3OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLF8sVCxXKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDk6cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGEsZCxoLGYsXyxULFcsaWUsZ2Upe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxMDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmlyc3Qg'@;
put 'YXJndW1lbnQgdG8gX2FyaXR5IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gdGVuIil9fWZ1bmN0aW9uIHhLKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9YyxfPTA7XzxsLmxlbmd0aHx8aDxhcmd1bWVudHMubGVuZ3Ro'@;
put 'Oyl7dmFyIFQ7XzxsLmxlbmd0aCYmKCF2cChsW19dKXx8aD49YXJndW1lbnRzLmxlbmd0aCk/VD1sW19dOihUPWFyZ3VtZW50c1toXSxoKz0xKSxkW19dPVQsdnAoVCl8fChmLT0xKSxfKz0xfXJldHVybiBmPD0wP2EuYXBwbHkodGhpcyxkKTpNSyhmLHhLKGMsZCxhKSl9fWNvbnN0IEVLPWQ4'@;
put 'KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIDE9PT1sP2tmKGEpOk1LKGwseEsobCxbXSxhKSl9KSxYZ2U9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24obCl7cmV0dXJuIGw8PDA9PT1sfSxRZ2U9ZDgoZnVuY3Rpb24obCxhKXt2YXIgZD1sPDA/YS5sZW5ndGgrbDpsO3JldHVybiBRcShhKT9hLmNo'@;
put 'YXJBdChkKTphW2RdfSksdG1lPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFwKGZ1bmN0aW9uKGQpe2Zvcih2YXIgXyxoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPVhnZShfPWRbZl0pP1FnZShfLGgpOmhbX10sZis9MX1yZXR1cm4gaH0pfSkscm1lPWQ4KGZ1'@;
put 'bmN0aW9uKGwsYSl7cmV0dXJuIHRtZShbbF0sYSlbMF19KSxvbWU9RUsoMiwoYyxsKT0+dm9pZCAwIT09cm1lKGMsbCkpLGtLPW9tZSh7IkBAZnVuY3Rpb25hbC9wbGFjZWhvbGRlciI6ITB9LHdpbmRvdyk7Y2xhc3MgSDV7c3RhdGljIGxvZyguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLmxv'@;
put 'ZyguLi5sKX1zdGF0aWMgd2FybiguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLndhcm4oLi4ubCl9c3RhdGljIGVycm9yKC4uLmwpe0ZQKCkmJlBQKCkmJmNvbnNvbGUuZXJyb3IoLi4ubCl9fWZ1bmN0aW9uIFBQKCl7cmV0dXJuIWtLKFsiamFzbWluZSJdKX1mdW5jdGlvbiBGUCgpe3JldHVy'@;
put 'biF3aW5kb3cuQ0RTLmVudmlyb25tZW50LnByb2R1Y3Rpb259ZnVuY3Rpb24gQUsoKXtwSygpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOnFnZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRl'@;
put 'Ontmb2N1c1RyYXBJdGVtczpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpUSyxsb2dEZXRhaWxzOmFtZX0s'@;
put 'ZnVuY3Rpb24oKXtjb25zdCBjPSI2LjQuNiI7d2luZG93LkNEUy5fdmVyc2lvbi5pbmRleE9mKGMpPDAmJih3aW5kb3cuQ0RTLl92ZXJzaW9uLnB1c2goYyksZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpPy5zZXRBdHRyaWJ1dGUoImNkcy12ZXJzaW9uIix3aW5kb3cuQ0RTLl92ZXJz'@;
put 'aW9uLmpvaW4oIiAiKSkpLHdpbmRvdy5DRFMuX3ZlcnNpb24ubGVuZ3RoPjEmJkg1Lndhcm4oIlJ1bm5pbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIENsYXJpdHkgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLiBQbGVhc2UgZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgbG9hZGVk'@;
put 'LiIpfSgpLHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkfHwod2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWQ9ITAsd2luZG93LkNEUy5fc3RhdGU9bmV3IFByb3h5KHdpbmRvdy5DRFMuX3N0YXRlLHtzZXQ6KGMsbCxhKT0+e2NvbnN0IGQ9e2tleTpsLHByZXY6d2luZG93LkNEUy5fc3RhdGVb'@;
put 'bF0sY3VycmVudDphfTtyZXR1cm4gY1tsXT1hLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJDRFNfU1RBVEVfVVBEQVRFIix7ZGV0YWlsOmR9KSksITB9fSkpKX1mdW5jdGlvbiBUSygpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25t'@;
put 'ZW50OndpbmRvdy5DRFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246bUsoITEpLGFuZ3VsYXJKU1ZlcnNpb246emdlKCExKSxyZWFjdFZlcnNpb246dksoITEpLHZ1ZVZlcnNpb246'@;
put 'X0soITEpLHN0YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVn'@;
put 'aXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIGFtZSgpe0g1LmxvZyhKU09OLnN0cmluZ2lmeShUSygpLG51bGwsMikpfWNvbnN0IEhQPW5ldyBjbGFzcyBnZ2V7Y29uc3RydWN0b3IoKXt0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnM9W119c3Vic2NyaWJlKGwpe2NvbnN0IGE9bmV3IHBnZShsLHRoaXMuc3Vic2NyaXB0aW9ucyk7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEpLGF9ZW1pdChsKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLmZuKGwpKX10b0V2ZW50T2Jz'@;
put 'ZXJ2YWJsZSgpe3JldHVybiB0aGlzfX07SFAubGlzdGVuZXI9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiQ0RTX1NUQVRFX1VQREFURSIsYz0+SFAuZW1pdChjLmRldGFpbCkpO2NsYXNzIEdse3N0YXRpYyBnZXQgc3RhdGUoKXtyZXR1cm4gQUsoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0'@;
put 'aWMgZ2V0VmFsdWUobCl7cmV0dXJuIEdsLnN0YXRlW2xdfXN0YXRpYyBzZXRWYWx1ZShsLGEpe0dsLnN0YXRlW2xdPWF9c3RhdGljIGxvZygpe0g1LmxvZyhKU09OLnN0cmluZ2lmeShHbC5zdGF0ZSxudWxsLDIpKX19R2wuc3RhdGVVcGRhdGVzPUhQLnRvRXZlbnRPYnNlcnZhYmxlKCk7Y29u'@;
put 'c3QgbG1lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0i'@;
put 'Y2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyBWc3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246bG1lWzFdLC4uLkdsLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe0dsLnN0YXRlLmljb25S'@;
put 'ZWdpc3RyeT17Li4uR2wuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IVZzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PlZzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChb'@;
put 'ZCxoXSk9PmgubWFwKGY9PltmLFZzLnJlZ2lzdHJ5W2RdXSkpO0dsLnN0YXRlLmljb25SZWdpc3RyeT17Li4uR2wuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX1jb25zdCBoOD1b'@;
put 'ImFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+J31dLG8xPVsiZXhjbGFtYXRpb24tY2lyY2xlIix7b3V0bGlu'@;
put 'ZTonPHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz48cGF0aCBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkEx'@;
put 'LjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPjxjaXJjbGUgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40'@;
put 'OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nfV0sczE9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEw'@;
put 'LDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPjxwYXRoIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwx'@;
put 'OCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPid9XSxESz1bImVsbGlwc2lzLWhvcml6b250YWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIzMS4xIiBjeT0i'@;
put 'MTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+'@;
put 'PGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XSxuYj1bIndpbmRvdy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSwxOGw3LjI5LTcuMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSwxMC43MSw5LjI5YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTYuNTksMTgs'@;
put 'OS4yOSwyNS4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDcuMjksNy4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSxjbWU9WyJldmVudCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42'@;
put 'NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+PHBhdGggZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwx'@;
put 'Ljc4LDAsMCwwLDMyLjI1LDZaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz48cmVjdCB4PSIx'@;
put 'MyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSww'@;
put 'LDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCww'@;
put 'LDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4x'@;
put 'NywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYz'@;
put 'MC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJN'@;
put 'MTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxwYXRoIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQs'@;
put 'MFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42'@;
put 'Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs'@;
put 'MTBaIi8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIs'@;
put 'MCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCww'@;
put 'LDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgs'@;
put 'MCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPid9XSx1bWU9WyJjYWxlbmRh'@;
put 'ciIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2'@;
put 'WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0'@;
put 'PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBo'@;
put 'ZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxyZWN0IHg9IjEzIiB5PSI2IiB3'@;
put 'aWR0aD0iMTAiIGhlaWdodD0iMiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1'@;
put 'LjM4WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9s'@;
put 'eWdvbiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx'@;
put 'Ljc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz48cmVjdCB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIi'@;
put 'IGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE5IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAs'@;
put 'MCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu'@;
put 'NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJa'@;
put 'bTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCww'@;
put 'LDAsMjYsMTBaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwz'@;
put 'Ljc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01'@;
put 'SDI2VjE5aDJaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0'@;
put 'aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1'@;
put 'LDAsMCwxLDMwLDEzLjVaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVI'@;
put 'MjZWMTRoMloiLz4nfV0sZG1lPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0'@;
put 'LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiLz48cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0u'@;
put 'NDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiLz48cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwx'@;
put 'OGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAs'@;
put 'MSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiLz4nLHNvbGlkOic8cGF0aCBkPSJN'@;
put 'MTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIvPjxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCww'@;
put 'LDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIvPjxwYXRoIGQ9Ik00Ljg3LDUuNzhs'@;
put 'NC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42'@;
put 'LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIvPid9XSxobWU9WyJleWUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEw'@;
put 'UzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIs'@;
put 'MzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiLz48cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwx'@;
put 'LDE4LjA5LDIyLjg5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0x'@;
put 'Ny44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIvPjxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiLz4nfV0s'@;
put 'Zm1lPVsiZWxsaXBzaXMtdmVydGljYWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9'@;
put 'IjE4IiBjeT0iNC45IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIvPid9XSxwbWU9WyJ2aWV3LWNvbHVtbnMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzEsNUg1QTIsMiwwLDAsMCwzLDdWMjlhMiwyLDAs'@;
put 'MCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nfV0sZ21lPVsiYXJyb3ciLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3TDE3LDkuODFWMjgu'@;
put 'OTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIi8+J31dLElLPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDku'@;
put 'NzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSxtbWU9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2'@;
put 'LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywx'@;
put 'LjcsMCwwLDAsMjYuNDksNVoiLz4nfV0sTEs9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFa'@;
put 'Ii8+PHBhdGggZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+J31dLHZtZT1bImZpbHRlci1ncmlkLWNpcmNsZSIse291dGxpbmU6JzxwYXRo'@;
put 'IGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFh'@;
put 'MS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs'@;
put 'MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz48cGF0aCBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40'@;
put 'MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+J31dLF9tZT1bImZpbHRlci1ncmlkIix7b3V0bGluZTonPHBhdGggZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw'@;
put 'LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+Jyxzb2xpZDon'@;
put 'PHBhdGggZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAs'@;
put 'MCwuMTUtLjM1VjExWiIvPid9XSxSSz1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPGNpcmNsZSBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz48cGF0aCBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+'@;
put 'PHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIs'@;
put 'MiwwLDEsMSwyLDJBMiwyLDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPid9XSxibWU9WyJleGNsYW1hdGlvbi10cmlhbmdsZSIse291dGxpbmU6JzxwYXRo'@;
put 'IGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+PGNpcmNsZSBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0iMS41Ii8+PHBhdGggZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCww'@;
put 'LDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAs'@;
put 'MSwyOC41NSwyNy40OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYu'@;
put 'ODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYuMjVaIi8+J31dLHltZT1bImNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwz'@;
put 'NFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiLz4nfV0sd21lPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwxMWE3LDcsMCwx'@;
put 'LDEtNyw3LDcsNywwLDAsMSw3LTciLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz4nfV0sT0s9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxjaXJjbGUgY3g9'@;
put 'IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz48cGF0aCBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+PHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0'@;
put 'LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44'@;
put 'LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPid9XSxDbWU9WyJzdWNjZXNzLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwx'@;
put 'OCwzMloiLz48cGF0aCBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYs'@;
put 'MCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+J31dO2NsYXNzIE1tZSBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKX1zY2hlZHVsZShs'@;
put 'LGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0ICR4PXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09JHg7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xlYXJJbnRlcnZhbChjKXtjb25zdHtk'@;
put 'ZWxlZ2F0ZTpsfT0keDtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgTlAgZXh0ZW5kcyBNbWV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWEsdGhpcy5wZW5kaW5n'@;
put 'PSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZixoLGEpKSx0aGlzLnBlbmRpbmc9'@;
put 'ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gJHguc2V0SW50ZXJ2YWwobC5mbHVzaC5iaW5kKGwsdGhpcyksZCl9'@;
put 'cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJiR4LmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBh'@;
put 'IGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51'@;
put 'bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGh9dW5zdWJzY3JpYmUoKXtpZigh'@;
put 'dGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxxKGQsdGhpcyksbnVsbCE9bCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGws'@;
put 'bnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19Y29uc3QgVlA9e25vdzooKT0+KFZQLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIHJie2NvbnN0cnVjdG9yKGwsYT1yYi5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1s'@;
put 'LHRoaXMubm93PWF9c2NoZWR1bGUobCxhPTAsZCl7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxsKS5zY2hlZHVsZShkLGEpfX1yYi5ub3c9VlAubm93O2NsYXNzIEJQIGV4dGVuZHMgcmJ7Y29uc3RydWN0b3IobCxhPXJiLm5vdyl7c3VwZXIobCxhKSx0aGlzLmFj'@;
put 'dGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGwpe2NvbnN0e2FjdGlvbnM6YX09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHZvaWQgYS5wdXNoKGwpO2xldCBkO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihkPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKGw9'@;
put 'YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9yKDtsPWEuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGR9fX1jb25zdCBpYj1uZXcgQlAoTlApLHhtZT1pYjtmdW5jdGlvbiBmOChjLGw9aWIpe3JldHVybiBYZSgoYSxkKT0+e2xldCBoPW51bGwsZj1udWxsLF89bnVs'@;
put 'bDtjb25zdCBUPSgpPT57aWYoaCl7aC51bnN1YnNjcmliZSgpLGg9bnVsbDtjb25zdCBpZT1mO2Y9bnVsbCxkLm5leHQoaWUpfX07ZnVuY3Rpb24gVygpe2NvbnN0IGllPV8rYyxnZT1sLm5vdygpO2lmKGdlPGllKXJldHVybiBoPXRoaXMuc2NoZWR1bGUodm9pZCAwLGllLWdlKSx2b2lkIGQu'@;
put 'YWRkKGgpO1QoKX1hLnN1YnNjcmliZShVZShkLGllPT57Zj1pZSxfPWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShXLGMpLGQuYWRkKGgpKX0sKCk9PntUKCksZC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWZ1bmN0aW9uIGFoKGMpe3JldHVybiBYZSgobCxhKT0+e0ty'@;
put 'KGMpLnN1YnNjcmliZShVZShhLCgpPT5hLmNvbXBsZXRlKCksRykpLCFhLmNsb3NlZCYmbC5zdWJzY3JpYmUoYSl9KX1mdW5jdGlvbiBqUChjPTAsbCxhPXhtZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwhPWwmJihMYyhsKT9hPWw6ZD1sKSxuZXcgS2UoaD0+e2xldCBmPWZ1bmN0aW9uIGttZShj'@;
put 'KXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihjKX0oYyk/K2MtYS5ub3coKTpjO2Y8MCYmKGY9MCk7bGV0IF89MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe2guY2xvc2VkfHwoaC5uZXh0KF8rKyksMDw9ZD90aGlzLnNjaGVkdWxlKHZvaWQgMCxkKTpoLmNvbXBsZXRl'@;
put 'KCkpfSxmKX0pfWNvbnN0IFRtZT1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxEbWU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLEltZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24gbjIoYyxsLGEsZCl7aWYoWShhKSYmKGQ9YSxhPXZvaWQgMCksZCly'@;
put 'ZXR1cm4gbjIoYyxsLGEpLnBpcGUoSE8oZCkpO2NvbnN0W2gsZl09ZnVuY3Rpb24gT21lKGMpe3JldHVybiBZKGMuYWRkRXZlbnRMaXN0ZW5lcikmJlkoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/RG1lLm1hcChfPT5UPT5jW19dKGwsVCxhKSk6ZnVuY3Rpb24gTG1lKGMpe3JldHVybiBZ'@;
put 'KGMuYWRkTGlzdGVuZXIpJiZZKGMucmVtb3ZlTGlzdGVuZXIpfShjKT9UbWUubWFwKEZLKGMsbCkpOmZ1bmN0aW9uIFJtZShjKXtyZXR1cm4gWShjLm9uKSYmWShjLm9mZil9KGMpP0ltZS5tYXAoRksoYyxsKSk6W107aWYoIWgmJlJuKGMpKXJldHVybiB5cihfPT5uMihfLGwsYSkpKEtyKGMp'@;
put 'KTtpZighaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgS2UoXz0+e2NvbnN0IFQ9KC4uLlcpPT5fLm5leHQoMTxXLmxlbmd0aD9XOldbMF0pO3JldHVybiBoKFQpLCgpPT5mKFQpfSl9ZnVuY3Rpb24gRksoYyxsKXtyZXR1cm4gYT0+ZD0+'@;
put 'Y1thXShsLGQpfWNsYXNzIHF4IGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0xLzAsYT0xLzAsZD1WUCl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPWwsdGhpcy5fd2luZG93VGltZT1hLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWQsdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGlt'@;
put 'ZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9YT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsbCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGEpfW5leHQobCl7Y29uc3R7aXNTdG9wcGVkOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aCxf'@;
put 'dGltZXN0YW1wUHJvdmlkZXI6Zixfd2luZG93VGltZTpffT10aGlzO2F8fChkLnB1c2gobCksIWgmJmQucHVzaChmLm5vdygpK18pKSx0aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dChsKX1fc3Vic2NyaWJlKGwpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7'@;
put 'Y29uc3QgYT10aGlzLl9pbm5lclN1YnNjcmliZShsKSx7X2luZmluaXRlVGltZVdpbmRvdzpkLF9idWZmZXI6aH09dGhpcyxmPWguc2xpY2UoKTtmb3IobGV0IF89MDtfPGYubGVuZ3RoJiYhbC5jbG9zZWQ7Xys9ZD8xOjIpbC5uZXh0KGZbX10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXpl'@;
put 'ZFN0YXR1c2VzKGwpLGF9X3RyaW1CdWZmZXIoKXtjb25zdHtfYnVmZmVyU2l6ZTpsLF90aW1lc3RhbXBQcm92aWRlcjphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93Omh9PXRoaXMsZj0oaD8xOjIpKmw7aWYobDwxLzAmJmY8ZC5sZW5ndGgmJmQuc3BsaWNlKDAsZC5sZW5ndGgtZiks'@;
put 'IWgpe2NvbnN0IF89YS5ub3coKTtsZXQgVD0wO2ZvcihsZXQgVz0xO1c8ZC5sZW5ndGgmJmRbV108PV87Vys9MilUPVc7VCYmZC5zcGxpY2UoMCxUKzEpfX19Y2xhc3MgSEt7fWNsYXNzIFBtZXt9Y29uc3QgQWY9IioiO2Z1bmN0aW9uIGExKGMsbCl7cmV0dXJue3R5cGU6NyxuYW1lOmMsZGVm'@;
put 'aW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBydShjLGw9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIE5LKGMsbD1udWxsKXtyZXR1cm57dHlwZToyLHN0ZXBzOmMsb3B0aW9uczpsfX1mdW5jdGlvbiBfcyhjKXtyZXR1cm57dHlwZTo2LHN0'@;
put 'eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlvbiBLeChjLGwsYSl7cmV0dXJue3R5cGU6MCxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiBGbWUoYyl7cmV0dXJue3R5cGU6NSxzdGVwczpjfX1mdW5jdGlvbiBoYyhjLGwsYT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6Yyxh'@;
put 'bmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIG9ie2NvbnN0cnVjdG9yKGw9MCxhPTApe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9'@;
put 'W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRo'@;
put 'aXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlz'@;
put 'Ll9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFz'@;
put 'aygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9Zmlu'@;
put 'aXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVz'@;
put 'dHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3NpdGlv'@;
put 'bj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5f'@;
put 'b25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFZLe2NvbnN0cnVjdG9yKGwpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29u'@;
put 'RGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPWw7bGV0IGE9MCxkPTAsaD0wO2NvbnN0IGY9dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1mP3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXll'@;
put 'cnMuZm9yRWFjaChfPT57Xy5vbkRvbmUoKCk9PnsrK2E9PWYmJnRoaXMuX29uRmluaXNoKCl9KSxfLm9uRGVzdHJveSgoKT0+eysrZD09ZiYmdGhpcy5fb25EZXN0cm95KCl9KSxfLm9uU3RhcnQoKCk9PnsrK2g9PWYmJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5w'@;
put 'bGF5ZXJzLnJlZHVjZSgoXyxUKT0+TWF0aC5tYXgoXyxULnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVy'@;
put 'cy5mb3JFYWNoKGw9PmwuaW5pdCgpKX1vblN0YXJ0KGwpe3RoaXMuX29uU3RhcnRGbnMucHVzaChsKX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRv'@;
put 'bmUobCl7dGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBs'@;
put 'YXllcnMuZm9yRWFjaChsPT5sLnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChs'@;
put 'PT5sLmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMu'@;
put 'Zm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKGwpe2NvbnN0IGE9bCp0aGlz'@;
put 'LnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChkPT57Y29uc3QgaD1kLnRvdGFsVGltZT9NYXRoLm1pbigxLGEvZC50b3RhbFRpbWUpOjE7ZC5zZXRQb3NpdGlvbihoKX0pfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLnBsYXllcnMucmVkdWNlKChhLGQpPT5udWxsPT09YXx8ZC50'@;
put 'b3RhbFRpbWU+YS50b3RhbFRpbWU/ZDphLG51bGwpO3JldHVybiBudWxsIT1sP2wuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT57bC5iZWZvcmVEZXN0cm95JiZsLmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayhsKXtjb25z'@;
put 'dCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19bGV0IEJLPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZCx0aGlzLm9uQ2hhbmdl'@;
put 'PWg9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShh'@;
put 'KXt0aGlzLm9uQ2hhbmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjfSksY30pKCks'@;
put 'TjU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEJLe31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsZmVhdHVyZXM6W2VvXX0pLGN9KSgpO2NvbnN0'@;
put 'IGxoPW5ldyBNaSgiTmdWYWx1ZUFjY2Vzc29yIiksTm1lPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOklzKCgpPT5TMCksbXVsdGk6ITB9O2xldCBTMD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixhKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5w'@;
put 'dXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DaGFuZ2UoZi50YXJnZXQu'@;
put 'Y2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW05tZV0pLGVvXX0pLGN9KSgpO2NvbnN0IFZtZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+V2EpLG11bHRpOiEwfSxqbWU9bmV3IE1pKCJDb21wb3NpdGlvbkV2'@;
put 'ZW50TW9kZSIpO2xldCBXYT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQkt7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCksdGhpcy5fY29tcG9zaXRpb25Nb2RlPWgsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9k'@;
put 'ZT0hZnVuY3Rpb24gQm1lKCl7Y29uc3QgYz1hcCgpP2FwKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QoYy50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfV9oYW5kbGVJbnB1dChhKXso'@;
put 'IXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShhKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoYSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMu'@;
put 'X2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRm8pLHR0KE5pKSx0dChqbWUsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9s'@;
put 'TmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMs'@;
put 'InR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5faGFuZGxlSW5wdXQoZi50YXJnZXQudmFsdWUp'@;
put 'fSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9uZW5kIixmdW5jdGlvbihmKXtyZXR1cm4gZC5fY29tcG9zaXRpb25FbmQoZi50YXJn'@;
put 'ZXQudmFsdWUpfSl9LGZlYXR1cmVzOlt0aShbVm1lXSksZW9dfSksY30pKCk7Y29uc3QgaXU9bmV3IE1pKCJOZ1ZhbGlkYXRvcnMiKSx5cD1uZXcgTWkoIk5nQXN5bmNWYWxpZGF0b3JzIik7ZnVuY3Rpb24gS0soYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gWEsoYyl7cmV0dXJuIHY1KGMp'@;
put 'P2VhKGMpOmN9ZnVuY3Rpb24gSksoYyl7bGV0IGw9e307cmV0dXJuIGMuZm9yRWFjaChhPT57bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBRSyhjLGwpe3JldHVybiBsLm1hcChhPT5hKGMpKX1mdW5jdGlvbiBlWChj'@;
put 'KXtyZXR1cm4gYy5tYXAobD0+ZnVuY3Rpb24gVW1lKGMpe3JldHVybiFjLnZhbGlkYXRlfShsKT9sOmE9PmwudmFsaWRhdGUoYSkpfWZ1bmN0aW9uIFVQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIHRYKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoS0spO3JldHVy'@;
put 'biAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBKSyhRSyhhLGwpKX19KGVYKGMpKTpudWxsfWZ1bmN0aW9uIFpQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIG5YKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoS0spO3JldHVybiAwPT1sLmxlbmd0'@;
put 'aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBIbWUoLi4uYyl7Y29uc3QgbD1SYyhjKSx7YXJnczphLGtleXM6ZH09UkcoYyksaD1uZXcgS2UoZj0+e2NvbnN0e2xlbmd0aDpffT1hO2lmKCFfKXJldHVybiB2b2lkIGYuY29tcGxldGUoKTtjb25zdCBUPW5ldyBBcnJheShfKTts'@;
put 'ZXQgVz1fLGllPV87Zm9yKGxldCBnZT0wO2dlPF87Z2UrKyl7bGV0IHdlPSExO0tyKGFbZ2VdKS5zdWJzY3JpYmUoVWUoZixFZT0+e3dlfHwod2U9ITAsaWUtLSksVFtnZV09RWV9LCgpPT5XLS0sdm9pZCAwLCgpPT57KCFXfHwhd2UpJiYoaWV8fGYubmV4dChkP09HKGQsVCk6VCksZi5jb21w'@;
put 'bGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9oLnBpcGUoSE8obCkpOmh9KFFLKGEsbCkubWFwKFhLKSkucGlwZShNZShKSykpfX0oZVgoYykpOm51bGx9ZnVuY3Rpb24gclgoYyxsKXtyZXR1cm4gbnVsbD09PWM/W2xdOkFycmF5LmlzQXJyYXkoYyk/Wy4uLmMsbF06W2MsbF19ZnVuY3Rpb24gWVAo'@;
put 'Yyl7cmV0dXJuIGM/QXJyYXkuaXNBcnJheShjKT9jOltjXTpbXX1mdW5jdGlvbiBKeChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2MuaW5jbHVkZXMobCk6Yz09PWx9ZnVuY3Rpb24gc1goYyxsKXtjb25zdCBhPVlQKGwpO3JldHVybiBZUChjKS5mb3JFYWNoKGg9PntKeChhLGgpfHxh'@;
put 'LnB1c2goaCl9KSxhfWZ1bmN0aW9uIGFYKGMsbCl7cmV0dXJuIFlQKGwpLmZpbHRlcihhPT4hSngoYyxhKSl9Y2xhc3MgbFh7Y29uc3RydWN0b3IoKXt0aGlzLl9yYXdWYWxpZGF0b3JzPVtdLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119'@;
put 'Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWU6bnVsbH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxp'@;
put 'ZDpudWxsfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucGVuZGluZzpudWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro'@;
put 'aXMuY29udHJvbC5lbmFibGVkOm51bGx9Z2V0IGVycm9ycygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVycm9yczpudWxsfWdldCBwcmlzdGluZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9Z2V0IGRpcnR5KCl7cmV0dXJuIHRo'@;
put 'aXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH1nZXQgdG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9Z2V0IHVudG91Y2hl'@;
put 'ZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfWdldCBzdGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlczpudWxsfWdldCB2YWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro'@;
put 'aXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfV9zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1VUCh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3Jz'@;
put 'KGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49WlAodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRh'@;
put 'dG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fcmVnaXN0ZXJPbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLnB1c2gobCl9X2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5mb3JFYWNo'@;
put 'KGw9PmwoKSksdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfXJlc2V0KGw9dm9pZCAwKXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldChsKX1oYXNFcnJvcihsLGEpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IobCxhKX1nZXRFcnJvcihsLGEp'@;
put 'e3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKGwsYSk6bnVsbH19Y2xhc3MganUgZXh0ZW5kcyBsWHtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fWNsYXNzIHp1IGV4dGVuZHMgbFh7Y29uc3RydWN0b3IoKXtz'@;
put 'dXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX1jbGFzcyBjWHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9jZD1sfWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdl'@;
put 'dCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQo'@;
put 'KXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRo'@;
put 'aXMuX2NkPy5zdWJtaXR0ZWR9fWxldCBCcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgY1h7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHp1LDIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJuZy11bnRvdWNoZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlz'@;
put 'VG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRpbmcpfSxmZWF0dXJlczpbZW9dfSksY30pKCksd3A9KCgpPT57'@;
put 'Y2xhc3MgYyBleHRlbmRzIGNYe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChqdSwxMCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXBOYW1lIiwiIl0sWyIi'@;
put 'LCJmb3JtQXJyYXlOYW1lIiwiIl0sWyIiLCJuZ01vZGVsR3JvdXAiLCIiXSxbIiIsImZvcm1Hcm91cCIsIiJdLFsiZm9ybSIsMywibmdOb0Zvcm0iLCIiXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0VmFyczoxNixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJuZy11bnRvdWNo'@;
put 'ZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRp'@;
put 'bmcpKCJuZy1zdWJtaXR0ZWQiLGQuaXNTdWJtaXR0ZWQpfSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y29uc3Qgc2I9IlZBTElEIixlRT0iSU5WQUxJRCIscDg9IlBFTkRJTkciLGFiPSJESVNBQkxFRCI7ZnVuY3Rpb24gJFAoYyl7cmV0dXJuKHRFKGMpP2MudmFsaWRhdG9yczpjKXx8bnVsbH1m'@;
put 'dW5jdGlvbiBxUChjLGwpe3JldHVybih0RShsKT9sLmFzeW5jVmFsaWRhdG9yczpjKXx8bnVsbH1mdW5jdGlvbiB0RShjKXtyZXR1cm4gbnVsbCE9YyYmIUFycmF5LmlzQXJyYXkoYykmJiJvYmplY3QiPT10eXBlb2YgY31jbGFzcyBmWHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3BlbmRpbmdE'@;
put 'aXJ0eT0hMSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2Fi'@;
put 'bGVkQ2hhbmdlPVtdLHRoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGEpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29t'@;
put 'cG9zZWRWYWxpZGF0b3JGbj1sfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49bH1nZXQgcGFy'@;
put 'ZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1zYn1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWVFfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1wOH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5z'@;
put 'dGF0dXM9PT1hYn1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PWFifWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRh'@;
put 'dGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCl9c2V0QXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhsKX1hZGRWYWxpZGF0b3JzKGwpe3RoaXMu'@;
put 'c2V0VmFsaWRhdG9ycyhzWChsLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoc1gobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyhhWChsLHRo'@;
put 'aXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoYVgobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IobCl7cmV0dXJuIEp4KHRoaXMuX3Jhd1ZhbGlkYXRvcnMsbCl9aGFzQXN5bmNWYWxpZGF0'@;
put 'b3IobCl7cmV0dXJuIEp4KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxsKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSEw'@;
put 'LHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKGwpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGw9PmwubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRv'@;
put 'dWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQo'@;
put 'bCl9bWFya0FzRGlydHkobD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkobCl9bWFya0FzUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFj'@;
put 'aENoaWxkKGE9PnthLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPXA4LCExIT09bC5lbWl0RXZlbnQmJnRoaXMuc3Rh'@;
put 'dHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyhsKX1kaXNhYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9YWIsdGhpcy5l'@;
put 'cnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZGlzYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0'@;
put 'aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITApKX1lbmFibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlz'@;
put 'LnN0YXR1cz1zYix0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZW5hYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJp'@;
put 'c3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwpe3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlzdGluZUNoZWNrfHx0'@;
put 'aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudChsKXt0aGlzLl9wYXJlbnQ9bH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobD17fSl7dGhpcy5fc2V0SW5pdGlh'@;
put 'bFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT1z'@;
put 'Ynx8dGhpcy5zdGF0dXM9PT1wOCkmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGwuZW1pdEV2ZW50KSksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQm'@;
put 'JiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKX1fdXBkYXRlVHJlZVZhbGlkaXR5KGw9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChhPT5hLl91cGRhdGVUcmVlVmFsaWRpdHkobCkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0'@;
put 'eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/YWI6c2J9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpu'@;
put 'dWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihsKXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1wOCx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7Y29uc3QgYT1YSyh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJz'@;
put 'Y3JpcHRpb249YS5zdWJzY3JpYmUoZD0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhkLHtlbWl0RXZlbnQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRo'@;
put 'aXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50KX1nZXQo'@;
put 'bCl7bGV0IGE9bDtyZXR1cm4gbnVsbD09YXx8KEFycmF5LmlzQXJyYXkoYSl8fChhPWEuc3BsaXQoIi4iKSksMD09PWEubGVuZ3RoKT9udWxsOmEucmVkdWNlKChkLGgpPT5kJiZkLl9maW5kKGgpLHRoaXMpfWdldEVycm9yKGwsYSl7Y29uc3QgZD1hP3RoaXMuZ2V0KGEpOnRoaXM7cmV0dXJu'@;
put 'IGQmJmQuZXJyb3JzP2QuZXJyb3JzW2xdOm51bGx9aGFzRXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuZ2V0RXJyb3IobCxhKX1nZXQgcm9vdCgpe2xldCBsPXRoaXM7Zm9yKDtsLl9wYXJlbnQ7KWw9bC5fcGFyZW50O3JldHVybiBsfV91cGRhdGVDb250cm9sc0Vycm9ycyhsKXt0aGlzLnN0YXR1'@;
put 'cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpfV9pbml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgRXIsdGhp'@;
put 'cy5zdGF0dXNDaGFuZ2VzPW5ldyBFcn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9hYjp0aGlzLmVycm9ycz9lRTp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhwOCk/cDg6'@;
put 'dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGVFKT9lRTpzYn1fYW55Q29udHJvbHNIYXZlU3RhdHVzKGwpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhhPT5hLnN0YXR1cz09PWwpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwuZGlydHkpfV9h'@;
put 'bnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBk'@;
put 'YXRlUHJpc3RpbmUobCl9X3VwZGF0ZVRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UobCl7'@;
put 'dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWx9X3NldFVwZGF0ZVN0cmF0ZWd5KGwpe3RFKGwpJiZudWxsIT1sLnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249bC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KGwpe3JldHVybiFsJiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQu'@;
put 'ZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQobCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rp'@;
put 'b24gR21lKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP1VQKGMpOmN8fG51bGx9KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRB'@;
put 'c3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uICRtZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9aUChjKTpjfHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX1jbGFzcyBuRSBleHRlbmRzIGZYe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigkUChhKSxxUChkLGEpKSx0aGlzLmNv'@;
put 'bnRyb2xzPWwsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVy'@;
put 'Q29udHJvbChsLGEpe3JldHVybiB0aGlzLmNvbnRyb2xzW2xdP3RoaXMuY29udHJvbHNbbF06KHRoaXMuY29udHJvbHNbbF09YSxhLnNldFBhcmVudCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2wobCxh'@;
put 'LGQ9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVDb250cm9sKGwsYT17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9s'@;
put 'c1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tsXSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wobCxhLGQ9e30p'@;
put 'e3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpk'@;
put 'LmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRhaW5zKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpJiZ0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWR9c2V0VmFsdWUobCxhPXt9KXsoZnVuY3Rpb24gaFgoYyxsLGEpe2MuX2ZvckVhY2hD'@;
put 'aGlsZCgoZCxoKT0+e2lmKHZvaWQgMD09PWFbaF0pdGhyb3cgbmV3IEFyKDEwMDIsIiIpfSl9KSh0aGlzLDAsbCksT2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT57KGZ1bmN0aW9uIGRYKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlzKGQpOmQpLmxlbmd0aCl0'@;
put 'aHJvdyBuZXcgQXIoMWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgQXIoMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9'@;
put 'cGF0Y2hWYWx1ZShsLGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlk'@;
put 'aXR5KGEpKX1yZXNldChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobFtoXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFs'@;
put 'dWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3lu'@;
put 'Y1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChk'@;
put 'LGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVl'@;
put 'KCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+'@;
put 'KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZhbHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBP'@;
put 'YmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5'@;
put 'KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3QgVjU9bmV3IE1pKCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmxifSksbGI9ImFsd2F5cyI7ZnVuY3Rpb24gY2IoYyxsLGE9bGIpe0tQKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRl'@;
put 'VmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMiPT09YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gWG1lKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMu'@;
put 'X3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09Yy51cGRhdGVPbiYmcFgoYyxsKX0pfShjLGwpLGZ1bmN0aW9uIFFtZShjLGwpe2NvbnN0IGE9KGQsaCk9PntsLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShkKSxoJiZsLnZpZXdUb01vZGVsVXBkYXRlKGQp'@;
put 'fTtjLnJlZ2lzdGVyT25DaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25DaGFuZ2UoYSl9KX0oYyxsKSxmdW5jdGlvbiBKbWUoYyxsKXtsLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCk9PntjLl9wZW5kaW5nVG91Y2hlZD0hMCwiYmx1'@;
put 'ciI9PT1jLnVwZGF0ZU9uJiZjLl9wZW5kaW5nQ2hhbmdlJiZwWChjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBLbWUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1'@;
put 'ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gb0UoYyxsKXtjLmZvckVhY2goYT0+e2EucmVn'@;
put 'aXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gS1AoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIGlYKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKHJYKGEs'@;
put 'bC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgYSYmYy5zZXRWYWxpZGF0b3JzKFthXSk7Y29uc3QgZD1mdW5jdGlvbiBvWChjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9jLnNldEFzeW5jVmFsaWRhdG9ycyhyWChkLGwu'@;
put 'YXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtvRShsLl9yYXdWYWxpZGF0b3JzLGgpLG9FKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBw'@;
put 'WChjLGwpe2MuX3BlbmRpbmdEaXJ0eSYmYy5tYXJrQXNEaXJ0eSgpLGMuc2V0VmFsdWUoYy5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSxsLnZpZXdUb01vZGVsVXBkYXRlKGMuX3BlbmRpbmdWYWx1ZSksYy5fcGVuZGluZ0NoYW5nZT0hMX1jb25zdCBpNmU9e3By'@;
put 'b3ZpZGU6anUsdXNlRXhpc3Rpbmc6SXMoKCk9PnIyKX0sdWI9KCgpPT5Qcm9taXNlLnJlc29sdmUoKSkoKTtsZXQgcjI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGp1e2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9aCx0aGlzLnN1Ym1pdHRlZD0h'@;
put 'MSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgRXIsdGhpcy5mb3JtPW5ldyBuRSh7fSxVUChhKSxaUChkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250'@;
put 'cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChhKXt1Yi50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7YS5jb250cm9sPWQucmVnaXN0'@;
put 'ZXJDb250cm9sKGEubmFtZSxhLmNvbnRyb2wpLGNiKGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0pfWdldENvbnRyb2woYSl7cmV0dXJu'@;
put 'IHRoaXMuZm9ybS5nZXQoYS5wYXRoKX1yZW1vdmVDb250cm9sKGEpe3ViLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0pfWFkZEZvcm1Hcm91cChhKXt1Yi50'@;
put 'aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCksaD1uZXcgbkUoe30pOyhmdW5jdGlvbiBnWChjLGwpe0tQKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVt'@;
put 'b3ZlRm9ybUdyb3VwKGEpe3ViLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7dWIudGhlbigo'@;
put 'KT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShkKX0pfXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShhKX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsZnVuY3Rpb24gbVgoYyxsKXtjLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksbC5mb3JFYWNo'@;
put 'KGE9Pntjb25zdCBkPWEuY29udHJvbDsic3VibWl0Ij09PWQudXBkYXRlT24mJmQuX3BlbmRpbmdDaGFuZ2UmJihhLnZpZXdUb01vZGVsVXBkYXRlKGQuX3BlbmRpbmdWYWx1ZSksZC5fcGVuZGluZ0NoYW5nZT0hMSl9KX0odGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJt'@;
put 'aXQuZW1pdChhKSwiZGlhbG9nIj09PWE/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShhPXZvaWQgMCl7dGhpcy5mb3JtLnJlc2V0KGEpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9'@;
put 'dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKGEpe3JldHVybiBhLnBvcCgpLGEubGVuZ3RoP3RoaXMuZm9ybS5nZXQoYSk6dGhpcy5mb3JtfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKSh0dChpdSwxMCksdHQoeXAsMTApLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5k'@;
put 'aW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoInN1Ym1pdCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TdWJtaXQoZil9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25SZXNldCgpfSl9LGlucHV0czp7b3B0aW9uczpbIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6'@;
put 'e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W3RpKFtpNmVdKSxlb119KSxjfSkoKTtmdW5jdGlvbiB2WChjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gX1goYyl7cmV0dXJuIm9iamVjdCI9PXR5'@;
put 'cGVvZiBjJiZudWxsIT09YyYmMj09PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmInZhbHVlImluIGMmJiJkaXNhYmxlZCJpbiBjfWNvbnN0IGVGPWNsYXNzIGV4dGVuZHMgZlh7Y29uc3RydWN0b3IobD1udWxsLGEsZCl7c3VwZXIoJFAoYSkscVAoZCxhKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVs'@;
put 'bCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2'@;
put 'ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLHRFKGEpJiYoYS5ub25OdWxsYWJsZXx8YS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9X1gobCk/bC52YWx1ZTpsKX1zZXRWYWx1ZShsLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwsdGhp'@;
put 'cy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGQ9PmQodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxh'@;
put 'PXt9KXt0aGlzLnNldFZhbHVlKGwsYSl9cmVzZXQobD10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFya0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5k'@;
put 'aW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMobCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKGwpe3RoaXMuX29uQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkNoYW5nZShsKXt2'@;
put 'WCh0aGlzLl9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXt2WCh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLGwpfV9mb3JFYWNoQ2hpbGQobCl7fV9zeW5jUGVu'@;
put 'ZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRW'@;
put 'YWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUobCl7X1gobCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwudmFsdWUsbC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxm'@;
put 'OiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bH19LGE2ZT17cHJvdmlkZTp6dSx1c2VFeGlzdGluZzpJcygoKT0+T3MpfSx5WD0oKCk9PlByb21pc2UucmVzb2x2ZSgpKSgpO2xl'@;
put 'dCBPcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgenV7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9Xyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPVQsdGhpcy5jb250cm9sPW5ldyBlRix0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMubmFt'@;
put 'ZT0iIix0aGlzLnVwZGF0ZT1uZXcgRXIsdGhpcy5fcGFyZW50PWEsdGhpcy5fc2V0VmFsaWRhdG9ycyhkKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaCksdGhpcy52YWx1ZUFjY2Vzc29yPWZ1bmN0aW9uIFFQKGMsbCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGEsZCxoO3JldHVybiBBcnJh'@;
put 'eS5pc0FycmF5KGwpLGwuZm9yRWFjaChmPT57Zi5jb25zdHJ1Y3Rvcj09PVdhP2E9ZjpmdW5jdGlvbiBuNmUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLmNvbnN0cnVjdG9yKT09PU41fShmKT9kPWY6aD1mfSksaHx8ZHx8YXx8bnVsbH0oMCxmKX1uZ09uQ2hhbmdlcyhhKXtp'@;
put 'Zih0aGlzLl9jaGVja0ZvckVycm9ycygpLCF0aGlzLl9yZWdpc3RlcmVkfHwibmFtZSJpbiBhKXtpZih0aGlzLl9yZWdpc3RlcmVkJiYodGhpcy5fY2hlY2tOYW1lKCksdGhpcy5mb3JtRGlyZWN0aXZlKSl7Y29uc3QgZD1hLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUu'@;
put 'cmVtb3ZlQ29udHJvbCh7bmFtZTpkLHBhdGg6dGhpcy5fZ2V0UGF0aChkKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGEmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGEpLGZ1bmN0aW9uIEpQKGMsbCl7aWYoIWMuaGFzT3duUHJvcGVydHkoIm1vZGVsIikpcmV0dXJuITE7'@;
put 'Y29uc3QgYT1jLm1vZGVsO3JldHVybiEhYS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXMobCxhLmN1cnJlbnRWYWx1ZSl9KGEsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0'@;
put 'aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3Rp'@;
put 'dmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShhKXt0aGlzLnZpZXdNb2RlbD1hLHRoaXMudXBkYXRlLmVtaXQoYSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGly'@;
put 'ZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFs'@;
put 'b25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXtjYih0aGlzLmNvbnRyb2wsdGhpcyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRW'@;
put 'YWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXt9X2NoZWNrTmFtZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25z'@;
put 'Lm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfV91cGRhdGVWYWx1ZShhKXt5WC50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5t'@;
put 'YXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmVTYoZCk7eVgudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRp'@;
put 'c2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiByRShjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGp1LDkpLHR0KGl1LDEwKSx0dCh5cCwxMCksdHQobGgsMTApLHR0KFVhLDgpLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNv'@;
put 'bnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WyJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7'@;
put 'dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W3RpKFthNmVdKSxlbyx2YV19KSxjfSkoKSxDcD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRhdGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSksY30pKCk7Y29uc3QgbDZlPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOklzKCgpPT5hRSksbXVsdGk6ITB9O2xldCBhRT0o'@;
put 'KCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57YSgiIj09ZD9udWxsOnBhcnNlRmxvYXQoZCkpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIs'@;
put 'ImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNoYW5nZShmLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW2w2ZV0pLGVvXX0pLGN9KSgpO2NvbnN0IGM2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+bEUpLG11bHRpOiEwfTtsZXQgd1g9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksdTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKGEsZCl7dGhpcy5fYWNjZXNzb3JzLnB1c2goW2EsZF0pfXJlbW92ZShh'@;
put 'KXtmb3IobGV0IGQ9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHRoaXMuX2FjY2Vzc29yc1tkXVsxXT09PWEpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShkLDEpfXNlbGVjdChhKXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChkPT57dGhpcy5faXNTYW1l'@;
put 'R3JvdXAoZCxhKSYmZFsxXSE9PWEmJmRbMV0uZmlyZVVuY2hlY2soYS52YWx1ZSl9KX1faXNTYW1lR3JvdXAoYSxkKXtyZXR1cm4hIWFbMF0uY29udHJvbCYmYVswXS5fcGFyZW50PT09ZC5fY29udHJvbC5fcGFyZW50JiZhWzFdLm5hbWU9PT1kLm5hbWV9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOndYfSksY30pKCksbEU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVn'@;
put 'aXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9RmkoVjUse29wdGlvbmFsOiEwfSk/P2xifW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rv'@;
put 'ci5nZXQoenUpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhpcy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0'@;
put 'eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49YSx0aGlzLm9uQ2hhbmdlPSgpPT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2FibGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVk'@;
put 'fHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZpcmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tO'@;
put 'YW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KHU2ZSksdHQoRWEpKX0sYy5cdTAyNzVkaXI9'@;
put 'Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2'@;
put 'YWx1ZSJ9LGZlYXR1cmVzOlt0aShbYzZlXSksZW9dfSksY30pKCk7Y29uc3QgbkY9bmV3IE1pKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLHY2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+TTApLG11bHRpOiEwfTtmdW5jdGlvbiBFWChjLGwpe3JldHVybiBudWxs'@;
put 'PT1jP2Ake2x9YDoobCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgTTA9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0'@;
put 'aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlzLnZhbHVlPWE7Y29uc3QgaD1FWCh0aGlzLl9nZXRPcHRpb25JZChhKSxhKTt0aGlzLnNldFByb3BlcnR5KCJ2'@;
put 'YWx1ZSIsaCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGQpLGEodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQo'@;
put 'YSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLGEpKXJldHVybiBkO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZShhKXtjb25zdCBkPWZ1bmN0aW9uIF82ZShjKXtyZXR1cm4gYy5zcGxp'@;
put 'dCgiOiIpWzBdfShhKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhkKT90aGlzLl9vcHRpb25NYXAuZ2V0KGQpOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVk'@;
put 'aXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVh'@;
put 'dHVyZXM6W3RpKFt2NmVdKSxlb119KSxjfSkoKSxsMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24o'@;
put 'KSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKEVYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2'@;
put 'YWx1ZShhKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50'@;
put 'LCJ2YWx1ZSIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpKHR0KE5pKSx0dChGbyksdHQoTTAsOSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLGN9KSgpO2NvbnN0IGI2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJ'@;
put 'cygoKT0+ZGIpLG11bHRpOiEwfTtmdW5jdGlvbiBrWChjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgZGI9KCgp'@;
put 'PT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9'@;
put 'd3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1hLm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZixfKT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZihfLnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBkPShoLGYpPT57aC5f'@;
put 'c2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtjb25zdCBfPWY7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKysp'@;
put 'e2NvbnN0IGllPXRoaXMuX2dldE9wdGlvblZhbHVlKF9bVF0udmFsdWUpO2gucHVzaChpZSl9fWVsc2V7Y29uc3QgXz1kLm9wdGlvbnM7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKyspe2NvbnN0IFc9X1tUXTtpZihXLnNlbGVjdGVkKXtjb25zdCBpZT10aGlzLl9nZXRPcHRpb25WYWx1ZShX'@;
put 'LnZhbHVlKTtoLnB1c2goaWUpfX19dGhpcy52YWx1ZT1oLGEoaCl9fV9yZWdpc3Rlck9wdGlvbihhKXtjb25zdCBkPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChkLGEpLGR9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRo'@;
put 'aXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWUsYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24geTZlKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEp'@;
put 'O3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVkaXI9Q3Io'@;
put 'e3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0KX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W3RpKFtiNmVdKSxl'@;
put 'b119KSxjfSkoKSxjMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVl'@;
put 'KGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKGtYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZWxlY3Q/KHRoaXMuX3ZhbHVlPWEsdGhp'@;
put 'cy5fc2V0RWxlbWVudFZhbHVlKGtYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRoaXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQu'@;
put 'bmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRl'@;
put 'bGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dChkYiw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksY30pKCksSFg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWlu'@;
put 'aj1taSh7aW1wb3J0czpbd1hdfSksY30pKCksJGw9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKSxENmU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92'@;
put 'aWRlOm5GLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKTtmdW5jdGlvbiBJNmUoYyxsKXt0aGlzLnY9Yyx0aGlzLms9bH1mdW5jdGlvbiBkRShjKXt2YXIgbCxhO2Z1bmN0aW9uIGQoZixfKXt0cnl7dmFyIFQ9Y1tmXShfKSxXPVQudmFsdWUsaWU9VyBp'@;
put 'bnN0YW5jZW9mIEk2ZTtQcm9taXNlLnJlc29sdmUoaWU/Vy52OlcpLnRoZW4oZnVuY3Rpb24oZ2Upe2lmKGllKXt2YXIgd2U9InJldHVybiI9PT1mPyJyZXR1cm4iOiJuZXh0IjtpZighVy5rfHxnZS5kb25lKXJldHVybiBkKHdlLGdlKTtnZT1jW3dlXShnZSkudmFsdWV9aChULmRvbmU/InJl'@;
put 'dHVybiI6Im5vcm1hbCIsZ2UpfSxmdW5jdGlvbihnZSl7ZCgidGhyb3ciLGdlKX0pfWNhdGNoKGdlKXtoKCJ0aHJvdyIsZ2UpfX1mdW5jdGlvbiBoKGYsXyl7c3dpdGNoKGYpe2Nhc2UicmV0dXJuIjpsLnJlc29sdmUoe3ZhbHVlOl8sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOmwucmVq'@;
put 'ZWN0KF8pO2JyZWFrO2RlZmF1bHQ6bC5yZXNvbHZlKHt2YWx1ZTpfLGRvbmU6ITF9KX0obD1sLm5leHQpP2QobC5rZXksbC5hcmcpOmE9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oZixfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVCxXKXt2YXIgaWU9e2tleTpmLGFyZzpfLHJl'@;
put 'c29sdmU6VCxyZWplY3Q6VyxuZXh0Om51bGx9O2E/YT1hLm5leHQ9aWU6KGw9YT1pZSxkKGYsXykpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBjLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9ZEUucHJvdG90eXBlWyJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5hc3luY0l0'@;
put 'ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZEUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsYyl9LGRFLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0'@;
put 'aHJvdyIsYyl9LGRFLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgicmV0dXJuIixjKX07Y2xhc3MgaEV7c3RhdGljIGdldFRyYXBFbGVtZW50cygpe3JldHVyblsuLi5HbC5zdGF0ZS5mb2N1c1RyYXBJdGVtc119c3RhdGljIHNldFRyYXBFbGVtZW50'@;
put 'cyhsKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImh0bWwiKTtudWxsIT09YSYmZnVuY3Rpb24gc0YoYywuLi5sKXtjJiZsLmZvckVhY2goKFthLGRdKT0+eyExPT09ZHx8bnVsbD09PWQ/Yy5yZW1vdmVBdHRyaWJ1dGUoYSk6Yy5zZXRBdHRyaWJ1dGUoYSxkKyIiKX0pfShhLFsi'@;
put 'Y2RzLWZvY3VzLXRyYXAiLCEhbC5sZW5ndGgmJiIiXSksR2wuc3RhdGUuZm9jdXNUcmFwSXRlbXM9Wy4uLmxdfXN0YXRpYyByZW1vdmVUcmFwRWxlbWVudChsKXt0aGlzLmdldFRyYXBFbGVtZW50cygpLmxlbmd0aDwxfHx0aGlzLnNldFRyYXBFbGVtZW50cyhbLi4udGhpcy5nZXRUcmFwRWxl'@;
put 'bWVudHMoKS5maWx0ZXIoYT0+YS5mb2N1c1RyYXBJZCE9PWwuZm9jdXNUcmFwSWQpXSl9c3RhdGljIHNldEN1cnJlbnQobCl7bD8uZm9jdXNUcmFwSWQmJnRoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpLmZpbHRlcihhPT5hLmZvY3VzVHJhcElkIT09bC5m'@;
put 'b2N1c1RyYXBJZCksbF0pfXN0YXRpYyBhY3RpdmF0ZVByZXZpb3VzQ3VycmVudCgpe3RoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpXS5zbGljZSgwLC0xKSl9c3RhdGljIGdldEN1cnJlbnQoKXtyZXR1cm4gZnVuY3Rpb24gTDZlKGMpe3JldHVybiBjLmxl'@;
put 'bmd0aD9jW2MubGVuZ3RoLTFdOnZvaWQgMH0odGhpcy5nZXRUcmFwRWxlbWVudHMoKSl8fG51bGx9fWNvbnN0IFU2ZT1FSygzLChjLGwsYSk9PnshZnVuY3Rpb24gc21lKGMsbCl7cmV0dXJuIGx8fChsPXdpbmRvdyYmd2luZG93LmN1c3RvbUVsZW1lbnRzKSwhbHx8ISFsLmdldChjKX0oYyl8'@;
put 'fGZ1bmN0aW9uIFVnZSgpe3JldHVybiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmPy5pbmNsdWRlcygibG9jYWxob3N0OjYwMDYiKX0oKT8oYS5kZWZpbmUoYyxsKSxBSygpLHdpbmRvdyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShkPT5kPT09'@;
put 'YykmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6SDUud2FybihjKyIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBWWChjLGwpe3BLKCkmJmtLKFsiY3VzdG9t'@;
put 'RWxlbWVudHMiXSkmJlU2ZShjLGwsd2luZG93LmN1c3RvbUVsZW1lbnRzKX1sZXQgQlg9ITE7ZnVuY3Rpb24gWjZlKGMpe2lmKChjPU1hdGgudHJ1bmMoYyl8fDApPDAmJihjKz10aGlzLmxlbmd0aCksIShjPDB8fGM+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpc1tjXX1pZighQlgpe0JYPSEw'@;
put 'O2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmluZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6WjZlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEw'@;
put 'fSl9bGV0IGpYPSExLHpYPSExO2Z1bmN0aW9uIFVYKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRyaWJ1dGUobCk6bnVsbH0s'@;
put 'c2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3RoaXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCl9fSl9alh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJyb2xlIil8fChVWChFbGVtZW50LnByb3RvdHlwZSwicm9sZSIsInJvbGUiKSxqWD0hMCks'@;
put 'elh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhcmlhTGFiZWwiKXx8KHpYPSEwLFsiQWN0aXZlRGVzY2VuZGFudCIsIkF0b21pYyIsIkF1dG9Db21wbGV0ZSIsIkJ1c3kiLCJDaGVja2VkIiwiQ29sQ291bnQiLCJDb2xJbmRleCIsIkNvbFNwYW4iLCJDb250cm9scyIsIkN1'@;
put 'cnJlbnQiLCJEZXNjcmliZWRCeSIsIkRldGFpbHMiLCJEaXNhYmxlZCIsIkVycm9yTWVzc2FnZSIsIkV4cGFuZGVkIiwiRmxvd1RvIiwiSGFzUG9wdXAiLCJIaWRkZW4iLCJJbnZhbGlkIiwiS2V5U2hvcnRjdXRzIiwiTGFiZWwiLCJMYWJlbGxlZEJ5IiwiTGV2ZWwiLCJMaXZlIiwiTW9kYWwi'@;
put 'LCJNdWx0aUxpbmUiLCJNdWx0aVNlbGVjdGFibGUiLCJPcmllbnRhdGlvbiIsIk93bnMiLCJQbGFjZWhvbGRlciIsIlBvc0luU2V0IiwiUHJlc3NlZCIsIlJlYWRPbmx5IiwiUmVsZXZhbnQiLCJSZXF1aXJlZCIsIlJvbGVEZXNjcmlwdGlvbiIsIlJvd0NvdW50IiwiUm93SW5kZXgiLCJSb3dT'@;
put 'cGFuIiwiU2VsZWN0ZWQiLCJTZXRTaXplIiwiU29ydCIsIlZhbHVlTWF4IiwiVmFsdWVNaW4iLCJWYWx1ZU5vdyIsIlZhbHVlVGV4dCJdLmZvckVhY2goYz0+VVgoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2MpKSk7Y29uc3QgZkU9d2luZG93LGFG'@;
put 'PWZFLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1mRS5TaGFkeUNTU3x8ZkUuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLGxGPVN5bWJvbCgpLFpYPW5ldyBX'@;
put 'ZWFrTWFwO2NsYXNzIFlYe2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLl8kY3NzUmVzdWx0JD0hMCxkIT09bEYpdGhyb3cgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PWwsdGhp'@;
put 'cy50PWF9Z2V0IHN0eWxlU2hlZXQoKXtsZXQgbD10aGlzLm87Y29uc3QgYT10aGlzLnQ7aWYoYUYmJnZvaWQgMD09PWwpe2NvbnN0IGQ9dm9pZCAwIT09YSYmMT09PWEubGVuZ3RoO2QmJihsPVpYLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVw'@;
put 'bGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZaWC5zZXQoYSxsKSl9cmV0dXJuIGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX1jb25zdCBjRj0oYywuLi5sKT0+e2NvbnN0IGE9MT09PWMubGVuZ3RoP2NbMF06bC5yZWR1Y2UoKGQsaCxmKT0+ZCsoXz0+e2lmKCEwPT09Xy5fJGNz'@;
put 'c1Jlc3VsdCQpcmV0dXJuIF8uY3NzVGV4dDtpZigibnVtYmVyIj09dHlwZW9mIF8pcmV0dXJuIF87dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK18rIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mg'@;
put 'bm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkoaCkrY1tmKzFdLGNbMF0pO3JldHVybiBuZXcgWVgoYSxjLGxGKX0sV1g9YUY/Yz0+YzpjPT5jIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD8obD0+e2xldCBhPSIiO2Zvcihjb25z'@;
put 'dCBkIG9mIGwuY3NzUnVsZXMpYSs9ZC5jc3NUZXh0O3JldHVybihjPT5uZXcgWVgoInN0cmluZyI9PXR5cGVvZiBjP2M6YysiIix2b2lkIDAsbEYpKShhKX0pKGMpOmM7dmFyIHVGO2NvbnN0IHBFPXdpbmRvdyxHWD1wRS50cnVzdGVkVHlwZXMsRzZlPUdYP0dYLmVtcHR5U2NyaXB0OiIiLCRY'@;
put 'PXBFLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxkRj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9HNmU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9jOkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9t'@;
put 'QXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1y'@;
put 'ZXR1cm4gYX19LHFYPShjLGwpPT5sIT09YyYmKGw9PWx8fGM9PWMpLGhGPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOmRGLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpxWH0sZkY9ImZpbmFsaXplZCI7Y2xhc3MgZzggZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigp'@;
put 'e3N1cGVyKCksdGhpcy5fJEVpPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITEsdGhpcy5oYXNVcGRhdGVkPSExLHRoaXMuXyRFbD1udWxsLHRoaXMudSgpfXN0YXRpYyBhZGRJbml0aWFsaXplcihsKXt2YXIgYTt0aGlzLmZpbmFsaXplKCksKG51bGwhPT0oYT10aGlzLmgpJiZ2b2lk'@;
put 'IDAhPT1hP2E6dGhpcy5oPVtdKS5wdXNoKGwpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7dGhpcy5maW5hbGl6ZSgpO2NvbnN0IGw9W107cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fJEVwKGQsYSk7dm9pZCAwIT09'@;
put 'aCYmKHRoaXMuXyRFdi5zZXQoaCxkKSxsLnB1c2goaCkpfSksbH1zdGF0aWMgY3JlYXRlUHJvcGVydHkobCxhPWhGKXtpZihhLnN0YXRlJiYoYS5hdHRyaWJ1dGU9ITEpLHRoaXMuZmluYWxpemUoKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChsLGEpLCFhLm5vQWNjZXNzb3ImJiF0aGlz'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgZD0ic3ltYm9sIj09dHlwZW9mIGw/U3ltYm9sKCk6Il9fIitsLGg9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxkLGEpO3ZvaWQgMCE9PWgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSxsLGgpfX1z'@;
put 'dGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsYSxkKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXtjb25zdCBmPXRoaXNbbF07dGhpc1thXT1oLHRoaXMucmVxdWVzdFVwZGF0ZShsLGYsZCl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0'@;
put 'UHJvcGVydHlPcHRpb25zKGwpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChsKXx8aEZ9c3RhdGljIGZpbmFsaXplKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShmRikpcmV0dXJuITE7dGhpc1tmRl09ITA7Y29uc3QgbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYo'@;
put 'bC5maW5hbGl6ZSgpLHZvaWQgMCE9PWwuaCYmKHRoaXMuaD1bLi4ubC5oXSksdGhpcy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGwuZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3QgYT10aGlzLnBy'@;
put 'b3BlcnRpZXMsZD1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhhKV07Zm9yKGNvbnN0IGggb2YgZCl0aGlzLmNyZWF0ZVByb3BlcnR5KGgsYVtoXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlzLmZpbmFsaXpl'@;
put 'U3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXMobCl7Y29uc3QgYT1bXTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBkPW5ldyBTZXQobC5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IoY29uc3QgaCBvZiBkKWEudW5zaGlmdChXWChoKSl9ZWxzZSB2b2lkIDAh'@;
put 'PT1sJiZhLnB1c2goV1gobCkpO3JldHVybiBhfXN0YXRpYyBfJEVwKGwsYSl7Y29uc3QgZD1hLmF0dHJpYnV0ZTtyZXR1cm4hMT09PWQ/dm9pZCAwOiJzdHJpbmciPT10eXBlb2YgZD9kOiJzdHJpbmciPT10eXBlb2YgbD9sLnRvTG93ZXJDYXNlKCk6dm9pZCAwfXUoKXt2YXIgbDt0aGlzLl8k'@;
put 'RV89bmV3IFByb21pc2UoYT0+dGhpcy5lbmFibGVVcGRhdGluZz1hKSx0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLl8kRWcoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSxudWxsPT09KGw9dGhpcy5jb25zdHJ1Y3Rvci5oKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9PmEodGhpcykpfWFkZENvbnRy'@;
put 'b2xsZXIobCl7dmFyIGEsZDsobnVsbCE9PShhPXRoaXMuXyRFUykmJnZvaWQgMCE9PWE/YTp0aGlzLl8kRVM9W10pLnB1c2gobCksdm9pZCAwIT09dGhpcy5yZW5kZXJSb290JiZ0aGlzLmlzQ29ubmVjdGVkJiYobnVsbD09PShkPWwuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWR8fGQuY2Fs'@;
put 'bChsKSl9cmVtb3ZlQ29udHJvbGxlcihsKXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5zcGxpY2UodGhpcy5fJEVTLmluZGV4T2YobCk+Pj4wLDEpfV8kRWcoKXt0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGwsYSk9Pnt0aGlz'@;
put 'Lmhhc093blByb3BlcnR5KGEpJiYodGhpcy5fJEVpLnNldChhLHRoaXNbYV0pLGRlbGV0ZSB0aGlzW2FdKX0pfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbDtjb25zdCBhPW51bGwhPT0obD10aGlzLnNoYWRvd1Jvb3QpJiZ2b2lkIDAhPT1sP2w6dGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25z'@;
put 'dHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7cmV0dXJuKChjLGwpPT57YUY/Yy5hZG9wdGVkU3R5bGVTaGVldHM9bC5tYXAoYT0+YSBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/YTphLnN0eWxlU2hlZXQpOmwuZm9yRWFjaChhPT57Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz'@;
put 'dHlsZSIpLGg9ZkUubGl0Tm9uY2U7dm9pZCAwIT09aCYmZC5zZXRBdHRyaWJ1dGUoIm5vbmNlIixoKSxkLnRleHRDb250ZW50PWEuY3NzVGV4dCxjLmFwcGVuZENoaWxkKGQpfSl9KShhLHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksYX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBs'@;
put 'O3ZvaWQgMD09PXRoaXMucmVuZGVyUm9vdCYmKHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSksdGhpcy5lbmFibGVVcGRhdGluZyghMCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1h'@;
put 'Lmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1lbmFibGVVcGRhdGluZyhsKXt9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShk'@;
put 'PWEuaG9zdERpc2Nvbm5lY3RlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChhKX0pfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhsLGEsZCl7dGhpcy5fJEFLKGwsZCl9XyRFTyhsLGEsZD1oRil7dmFyIGg7Y29uc3QgZj10aGlzLmNvbnN0cnVjdG9yLl8kRXAobCxkKTtpZih2b2lkIDAh'@;
put 'PT1mJiYhMD09PWQucmVmbGVjdCl7Y29uc3QgXz0odm9pZCAwIT09KG51bGw9PT0oaD1kLmNvbnZlcnRlcil8fHZvaWQgMD09PWg/dm9pZCAwOmgudG9BdHRyaWJ1dGUpP2QuY29udmVydGVyOmRGKS50b0F0dHJpYnV0ZShhLGQudHlwZSk7dGhpcy5fJEVsPWwsbnVsbD09Xz90aGlzLnJlbW92'@;
put 'ZUF0dHJpYnV0ZShmKTp0aGlzLnNldEF0dHJpYnV0ZShmLF8pLHRoaXMuXyRFbD1udWxsfX1fJEFLKGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmNvbnN0cnVjdG9yLGY9aC5fJEV2LmdldChsKTtpZih2b2lkIDAhPT1mJiZ0aGlzLl8kRWwhPT1mKXtjb25zdCBfPWguZ2V0UHJvcGVydHlPcHRp'@;
put 'b25zKGYpLFQ9ImZ1bmN0aW9uIj09dHlwZW9mIF8uY29udmVydGVyP3tmcm9tQXR0cmlidXRlOl8uY29udmVydGVyfTp2b2lkIDAhPT0obnVsbD09PShkPV8uY29udmVydGVyKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5mcm9tQXR0cmlidXRlKT9fLmNvbnZlcnRlcjpkRjt0aGlzLl8kRWw9Zix0'@;
put 'aGlzW2ZdPVQuZnJvbUF0dHJpYnV0ZShhLF8udHlwZSksdGhpcy5fJEVsPW51bGx9fXJlcXVlc3RVcGRhdGUobCxhLGQpe2xldCBoPSEwO3ZvaWQgMCE9PWwmJigoKGQ9ZHx8dGhpcy5jb25zdHJ1Y3Rvci5nZXRQcm9wZXJ0eU9wdGlvbnMobCkpLmhhc0NoYW5nZWR8fHFYKSh0aGlzW2xdLGEp'@;
put 'Pyh0aGlzLl8kQUwuaGFzKGwpfHx0aGlzLl8kQUwuc2V0KGwsYSksITA9PT1kLnJlZmxlY3QmJnRoaXMuXyRFbCE9PWwmJih2b2lkIDA9PT10aGlzLl8kRUMmJih0aGlzLl8kRUM9bmV3IE1hcCksdGhpcy5fJEVDLnNldChsLGQpKSk6aD0hMSksIXRoaXMuaXNVcGRhdGVQZW5kaW5nJiZoJiYo'@;
put 'dGhpcy5fJEVfPXRoaXMuXyRFaigpKX1fJEVqKCl7dmFyIGw9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bC5pc1VwZGF0ZVBlbmRpbmc9ITA7dHJ5e3lpZWxkIGwuXyRFX31jYXRjaChkKXtQcm9taXNlLnJlamVjdChkKX1jb25zdCBhPWwuc2NoZWR1bGVVcGRhdGUoKTtyZXR1cm4gbnVs'@;
put 'bCE9YSYmKHlpZWxkIGEpLCFsLmlzVXBkYXRlUGVuZGluZ30pKCl9c2NoZWR1bGVVcGRhdGUoKXtyZXR1cm4gdGhpcy5wZXJmb3JtVXBkYXRlKCl9cGVyZm9ybVVwZGF0ZSgpe3ZhciBsO2lmKCF0aGlzLmlzVXBkYXRlUGVuZGluZylyZXR1cm47dGhpcy5fJEVpJiYodGhpcy5fJEVpLmZvckVh'@;
put 'Y2goKGgsZik9PnRoaXNbZl09aCksdGhpcy5fJEVpPXZvaWQgMCk7bGV0IGE9ITE7Y29uc3QgZD10aGlzLl8kQUw7dHJ5e2E9dGhpcy5zaG91bGRVcGRhdGUoZCksYT8odGhpcy53aWxsVXBkYXRlKGQpLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goaD0+e3Zh'@;
put 'ciBmO3JldHVybiBudWxsPT09KGY9aC5ob3N0VXBkYXRlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5jYWxsKGgpfSksdGhpcy51cGRhdGUoZCkpOnRoaXMuXyRFaygpfWNhdGNoKGgpe3Rocm93IGE9ITEsdGhpcy5fJEVrKCksaH1hJiZ0aGlzLl8kQUUoZCl9d2lsbFVwZGF0ZShsKXt9XyRBRShs'@;
put 'KXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5mb3JFYWNoKGQ9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPWQuaG9zdFVwZGF0ZWQpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNhbGwoZCl9KSx0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLmhhc1VwZGF0ZWQ9ITAsdGhp'@;
put 'cy5maXJzdFVwZGF0ZWQobCkpLHRoaXMudXBkYXRlZChsKX1fJEVrKCl7dGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITF9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0'@;
put 'aGlzLl8kRV99c2hvdWxkVXBkYXRlKGwpe3JldHVybiEwfXVwZGF0ZShsKXt2b2lkIDAhPT10aGlzLl8kRUMmJih0aGlzLl8kRUMuZm9yRWFjaCgoYSxkKT0+dGhpcy5fJEVPKGQsdGhpc1tkXSxhKSksdGhpcy5fJEVDPXZvaWQgMCksdGhpcy5fJEVrKCl9dXBkYXRlZChsKXt9Zmlyc3RVcGRh'@;
put 'dGVkKGwpe319dmFyIHBGO2c4W2ZGXT0hMCxnOC5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwLGc4LmVsZW1lbnRTdHlsZXM9W10sZzguc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifSwkWD8uKHtSZWFjdGl2ZUVsZW1lbnQ6Zzh9KSwobnVsbCE9PSh1Rj1wRS5yZWFjdGl2ZUVsZW1l'@;
put 'bnRWZXJzaW9ucykmJnZvaWQgMCE9PXVGP3VGOnBFLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMiIpO2NvbnN0IGdFPXdpbmRvdyxtOD1nRS50cnVzdGVkVHlwZXMsS1g9bTg/bTguY3JlYXRlUG9saWN5KCJsaXQtaHRtbCIse2NyZWF0ZUhUTUw6Yz0+Y30pOnZvaWQg'@;
put 'MCxtRT0iJGxpdCQiLFRmPWBsaXQkJHsoTWF0aC5yYW5kb20oKSsiIikuc2xpY2UoOSl9JGAsZ0Y9Ij8iK1RmLCQ2ZT1gPCR7Z0Z9PmAsajU9ZG9jdW1lbnQsaGI9KCk9Pmo1LmNyZWF0ZUNvbW1lbnQoIiIpLGZiPWM9Pm51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMmJiJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBjLFhYPUFycmF5LmlzQXJyYXksbUY9IlsgXHRcblxmXHJdIixwYj0vPCg/OighLS18XC9bXmEtekEtWl0pfChcLz9bYS16QS1aXVtePlxzXSopfChcLz8kKSkvZyxRWD0vLS0+L2csZUo9Lz4vZyx6NT1SZWdFeHAoYD58JHttRn0oPzooW15cXHMiJz49L10rKSgke21GfSo9JHtt'@;
put 'Rn0qKD86W14gXHRcblxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsImciKSx0Sj0vJy9nLG5KPS8iL2cscko9L14oPzpzY3JpcHR8c3R5bGV8dGV4dGFyZWF8dGl0bGUpJC9pLGlKPWM9PihsLC4uLmEpPT4oe18kbGl0VHlwZSQ6YyxzdHJpbmdzOmwsdmFsdWVzOmF9KSx2Rj1pSigxKSxxNmU9'@;
put 'aUooMiksdjg9U3ltYm9sLmZvcigibGl0LW5vQ2hhbmdlIiksVGM9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSxvSj1uZXcgV2Vha01hcCxVNT1qNS5jcmVhdGVUcmVlV2Fsa2VyKGo1LDEyOSxudWxsLCExKTtmdW5jdGlvbiBzSihjLGwpe2lmKCFBcnJheS5pc0FycmF5KGMpfHwhYy5oYXNP'@;
put 'd25Qcm9wZXJ0eSgicmF3IikpdGhyb3cgRXJyb3IoImludmFsaWQgdGVtcGxhdGUgc3RyaW5ncyBhcnJheSIpO3JldHVybiB2b2lkIDAhPT1LWD9LWC5jcmVhdGVIVE1MKGwpOmx9Y2xhc3MgZ2J7Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFy'@;
put 'dHM9W107bGV0IGY9MCxfPTA7Y29uc3QgVD1sLmxlbmd0aC0xLFc9dGhpcy5wYXJ0cyxbaWUsZ2VdPSgoYyxsKT0+e2NvbnN0IGE9Yy5sZW5ndGgtMSxkPVtdO2xldCBoLGY9Mj09PWw/Ijxzdmc+IjoiIixfPXBiO2ZvcihsZXQgVD0wO1Q8YTtUKyspe2NvbnN0IFc9Y1tUXTtsZXQgaWUsZ2Us'@;
put 'd2U9LTEsRWU9MDtmb3IoO0VlPFcubGVuZ3RoJiYoXy5sYXN0SW5kZXg9RWUsZ2U9Xy5leGVjKFcpLG51bGwhPT1nZSk7KUVlPV8ubGFzdEluZGV4LF89PT1wYj8iIS0tIj09PWdlWzFdP189UVg6dm9pZCAwIT09Z2VbMV0/Xz1lSjp2b2lkIDAhPT1nZVsyXT8ockoudGVzdChnZVsyXSkmJiho'@;
put 'PVJlZ0V4cCgiPC8iK2dlWzJdLCJnIikpLF89ejUpOnZvaWQgMCE9PWdlWzNdJiYoXz16NSk6Xz09PXo1PyI+Ij09PWdlWzBdPyhfPWg/P3BiLHdlPS0xKTp2b2lkIDA9PT1nZVsxXT93ZT0tMjood2U9Xy5sYXN0SW5kZXgtZ2VbMl0ubGVuZ3RoLGllPWdlWzFdLF89dm9pZCAwPT09Z2VbM10/'@;
put 'ejU6JyInPT09Z2VbM10/bko6dEopOl89PT1uSnx8Xz09PXRKP189ejU6Xz09PVFYfHxfPT09ZUo/Xz1wYjooXz16NSxoPXZvaWQgMCk7Y29uc3QgWmU9Xz09PXo1JiZjW1QrMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9Xz09PXBiP1crJDZlOndlPj0wPyhkLnB1c2goaWUpLFcuc2xp'@;
put 'Y2UoMCx3ZSkrbUUrVy5zbGljZSh3ZSkrVGYrWmUpOlcrVGYrKC0yPT09d2U/KGQucHVzaCh2b2lkIDApLFQpOlplKX1yZXR1cm5bc0ooYyxmKyhjW2FdfHwiPD8+IikrKDI9PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9Z2IuY3JlYXRlRWxlbWVudChpZSxkKSxVNS5j'@;
put 'dXJyZW50Tm9kZT10aGlzLmVsLmNvbnRlbnQsMj09PWEpe2NvbnN0IHdlPXRoaXMuZWwuY29udGVudCxFZT13ZS5maXJzdENoaWxkO0VlLnJlbW92ZSgpLHdlLmFwcGVuZCguLi5FZS5jaGlsZE5vZGVzKX1mb3IoO251bGwhPT0oaD1VNS5uZXh0Tm9kZSgpKSYmVy5sZW5ndGg8VDspe2lmKDE9'@;
put 'PT1oLm5vZGVUeXBlKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7Y29uc3Qgd2U9W107Zm9yKGNvbnN0IEVlIG9mIGguZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihFZS5lbmRzV2l0aChtRSl8fEVlLnN0YXJ0c1dpdGgoVGYpKXtjb25zdCBaZT1nZVtfKytdO2lmKHdlLnB1c2goRWUpLHZvaWQgMCE9'@;
put 'PVplKXtjb25zdCBvdD1oLmdldEF0dHJpYnV0ZShaZS50b0xvd2VyQ2FzZSgpK21FKS5zcGxpdChUZiksZXQ9LyhbLj9AXSk/KC4qKS8uZXhlYyhaZSk7Vy5wdXNoKHt0eXBlOjEsaW5kZXg6ZixuYW1lOmV0WzJdLHN0cmluZ3M6b3QsY3RvcjoiLiI9PT1ldFsxXT9jSjoiPyI9PT1ldFsxXT91'@;
put 'SjoiQCI9PT1ldFsxXT9kSjptYn0pfWVsc2UgVy5wdXNoKHt0eXBlOjYsaW5kZXg6Zn0pfWZvcihjb25zdCBFZSBvZiB3ZSloLnJlbW92ZUF0dHJpYnV0ZShFZSl9aWYockoudGVzdChoLnRhZ05hbWUpKXtjb25zdCB3ZT1oLnRleHRDb250ZW50LnNwbGl0KFRmKSxFZT13ZS5sZW5ndGgtMTtp'@;
put 'ZihFZT4wKXtoLnRleHRDb250ZW50PW04P204LmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgWmU9MDtaZTxFZTtaZSsrKWguYXBwZW5kKHdlW1plXSxoYigpKSxVNS5uZXh0Tm9kZSgpLFcucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKHdlW0VlXSxoYigpKX19fWVsc2UgaWYoOD09'@;
put 'PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09Z0YpVy5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IHdlPS0xO2Zvcig7LTEhPT0od2U9aC5kYXRhLmluZGV4T2YoVGYsd2UrMSkpOylXLnB1c2goe3R5cGU6NyxpbmRleDpmfSksd2UrPVRmLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0'@;
put 'ZUVsZW1lbnQobCxhKXtjb25zdCBkPWo1LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gWjUoYyxsLGE9YyxkKXt2YXIgaCxmLF8sVDtpZihsPT09djgpcmV0dXJuIGw7bGV0IFc9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8'@;
put 'dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgaWU9ZmIobCk/dm9pZCAwOmwuXyRsaXREaXJlY3RpdmUkO3JldHVybiBXPy5jb25zdHJ1Y3RvciE9PWllJiYobnVsbD09PShmPVc/Ll8kQU8pfHx2b2lkIDA9PT1mfHxmLmNhbGwoVywhMSksdm9pZCAwPT09aWU/Vz12b2lkIDA6'@;
put 'KFc9bmV3IGllKGMpLFcuXyRBVChjLGEsZCkpLHZvaWQgMCE9PWQ/KG51bGwhPT0oXz0oVD1hKS5fJENvKSYmdm9pZCAwIT09Xz9fOlQuXyRDbz1bXSlbZF09VzphLl8kQ2w9Vyksdm9pZCAwIT09VyYmKGw9WjUoYyxXLl8kQVMoYyxsLnZhbHVlcyksVyxkKSksbH1jbGFzcyBsSntjb25zdHJ1'@;
put 'Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2Nv'@;
put 'bnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOmo1KS5pbXBvcnROb2RlKGQsITApO1U1LmN1cnJlbnROb2RlPWY7bGV0IF89VTUubmV4dE5vZGUoKSxUPTAsVz0wLGllPWhbMF07Zm9yKDt2b2lkIDAhPT1pZTsp'@;
put 'e2lmKFQ9PT1pZS5pbmRleCl7bGV0IGdlOzI9PT1pZS50eXBlP2dlPW5ldyBfOChfLF8ubmV4dFNpYmxpbmcsdGhpcyxsKToxPT09aWUudHlwZT9nZT1uZXcgaWUuY3RvcihfLGllLm5hbWUsaWUuc3RyaW5ncyx0aGlzLGwpOjY9PT1pZS50eXBlJiYoZ2U9bmV3IGhKKF8sdGhpcyxsKSksdGhp'@;
put 'cy5fJEFWLnB1c2goZ2UpLGllPWhbKytXXX1UIT09aWU/LmluZGV4JiYoXz1VNS5uZXh0Tm9kZSgpLFQrKyl9cmV0dXJuIFU1LmN1cnJlbnROb2RlPWo1LGZ9dihsKXtsZXQgYT0wO2Zvcihjb25zdCBkIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1kJiYodm9pZCAwIT09ZC5zdHJpbmdzPyhkLl8k'@;
put 'QUkobCxkLGEpLGErPWQuc3RyaW5ncy5sZW5ndGgtMik6ZC5fJEFJKGxbYV0pKSxhKyt9fWNsYXNzIF84e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3ZhciBmO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1UYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT1sLHRoaXMuXyRBQj1hLHRoaXMuXyRBTT1k'@;
put 'LHRoaXMub3B0aW9ucz1oLHRoaXMuXyRDcD1udWxsPT09KGY9aD8uaXNDb25uZWN0ZWQpfHx2b2lkIDA9PT1mfHxmfWdldCBfJEFVKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0obD10aGlzLl8kQU0pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLl8kQVUpJiZ2b2lkIDAhPT1hP2E6'@;
put 'dGhpcy5fJENwfWdldCBwYXJlbnROb2RlKCl7bGV0IGw9dGhpcy5fJEFBLnBhcmVudE5vZGU7Y29uc3QgYT10aGlzLl8kQU07cmV0dXJuIHZvaWQgMCE9PWEmJjExPT09bD8ubm9kZVR5cGUmJihsPWEucGFyZW50Tm9kZSksbH1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQg'@;
put 'ZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRBSShsLGE9dGhpcyl7bD1aNSh0aGlzLGwsYSksZmIobCk/bD09PVRjfHxudWxsPT1sfHwiIj09PWw/KHRoaXMuXyRBSCE9PVRjJiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9VGMpOmwhPT10aGlzLl8kQUgmJmwhPT12OCYmdGhpcy5fKGwpOnZv'@;
put 'aWQgMCE9PWwuXyRsaXRUeXBlJD90aGlzLmcobCk6dm9pZCAwIT09bC5ub2RlVHlwZT90aGlzLiQobCk6KGM9PlhYKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRvcl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5v'@;
put 'ZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PVRjJiZmYih0aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKGo1LmNyZWF0ZVRl'@;
put 'eHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09PWguZWwmJihoLmVsPWdiLmNyZWF0ZUVsZW1lbnQoc0ooaC5oLGguaFswXSksdGhpcy5vcHRpb25z'@;
put 'KSksaCk7aWYoKG51bGw9PT0oYT10aGlzLl8kQUgpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLl8kQUQpPT09Zil0aGlzLl8kQUgudihkKTtlbHNle2NvbnN0IF89bmV3IGxKKGYsdGhpcyksVD1fLnUodGhpcy5vcHRpb25zKTtfLnYoZCksdGhpcy4kKFQpLHRoaXMuXyRBSD1ffX1fJEFDKGwpe2xl'@;
put 'dCBhPW9KLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZvSi5zZXQobC5zdHJpbmdzLGE9bmV3IGdiKGwpKSxhfVQobCl7WFgodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7Y29uc3QgYT10aGlzLl8kQUg7bGV0IGQsaD0wO2Zvcihjb25zdCBmIG9mIGwp'@;
put 'aD09PWEubGVuZ3RoP2EucHVzaChkPW5ldyBfOCh0aGlzLmsoaGIoKSksdGhpcy5rKGhiKCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6ZD1hW2hdLGQuXyRBSShmKSxoKys7aDxhLmxlbmd0aCYmKHRoaXMuXyRBUihkJiZkLl8kQUIubmV4dFNpYmxpbmcsaCksYS5sZW5ndGg9aCl9XyRBUihsPXRo'@;
put 'aXMuXyRBQS5uZXh0U2libGluZyxhKXt2YXIgZDtmb3IobnVsbD09PShkPXRoaXMuXyRBUCl8fHZvaWQgMD09PWR8fGQuY2FsbCh0aGlzLCExLCEwLGEpO2wmJmwhPT10aGlzLl8kQUI7KXtjb25zdCBoPWwubmV4dFNpYmxpbmc7bC5yZW1vdmUoKSxsPWh9fXNldENvbm5lY3RlZChsKXt2YXIg'@;
put 'YTt2b2lkIDA9PT10aGlzLl8kQU0mJih0aGlzLl8kQ3A9bCxudWxsPT09KGE9dGhpcy5fJEFQKXx8dm9pZCAwPT09YXx8YS5jYWxsKHRoaXMsbCkpfX1jbGFzcyBtYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1UYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMu'@;
put 'ZWxlbWVudD1sLHRoaXMubmFtZT1hLHRoaXMuXyRBTT1oLHRoaXMub3B0aW9ucz1mLGQubGVuZ3RoPjJ8fCIiIT09ZFswXXx8IiIhPT1kWzFdPyh0aGlzLl8kQUg9QXJyYXkoZC5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9ZCk6dGhpcy5fJEFIPVRjfWdldCB0YWdO'@;
put 'YW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkobCxhPXRoaXMsZCxoKXtjb25zdCBmPXRoaXMuc3RyaW5ncztsZXQgXz0hMTtpZih2b2lkIDA9PT1mKWw9WjUodGhpcyxsLGEsMCksXz0hZmIobCl8fGwhPT10aGlz'@;
put 'Ll8kQUgmJmwhPT12OCxfJiYodGhpcy5fJEFIPWwpO2Vsc2V7Y29uc3QgVD1sO2xldCBXLGllO2ZvcihsPWZbMF0sVz0wO1c8Zi5sZW5ndGgtMTtXKyspaWU9WjUodGhpcyxUW2QrV10sYSxXKSxpZT09PXY4JiYoaWU9dGhpcy5fJEFIW1ddKSxffHwoXz0hZmIoaWUpfHxpZSE9PXRoaXMuXyRB'@;
put 'SFtXXSksaWU9PT1UYz9sPVRjOmwhPT1UYyYmKGwrPShpZT8/IiIpK2ZbVysxXSksdGhpcy5fJEFIW1ddPWllfV8mJiFoJiZ0aGlzLmoobCl9aihsKXtsPT09VGM/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5u'@;
put 'YW1lLGw/PyIiKX19Y2xhc3MgY0ogZXh0ZW5kcyBtYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09VGM/dm9pZCAwOmx9fWNvbnN0IEs2ZT1tOD9tOC5lbXB0eVNjcmlwdDoiIjtjbGFzcyB1SiBl'@;
put 'eHRlbmRzIG1ie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9NH1qKGwpe2wmJmwhPT1UYz90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxLNmUpOnRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKX19Y2xhc3MgZEogZXh0'@;
put 'ZW5kcyBtYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGwsYSxkLGgsZiksdGhpcy50eXBlPTV9XyRBSShsLGE9dGhpcyl7dmFyIGQ7aWYoKGw9bnVsbCE9PShkPVo1KHRoaXMsbCxhLDApKSYmdm9pZCAwIT09ZD9kOlRjKT09PXY4KXJldHVybjtjb25zdCBoPXRoaXMuXyRBSCxmPWw9'@;
put 'PT1UYyYmaCE9PVRjfHxsLmNhcHR1cmUhPT1oLmNhcHR1cmV8fGwub25jZSE9PWgub25jZXx8bC5wYXNzaXZlIT09aC5wYXNzaXZlLF89bCE9PVRjJiYoaD09PVRjfHxmKTtmJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxoKSxfJiZ0aGlzLmVsZW1l'@;
put 'bnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxsKSx0aGlzLl8kQUg9bH1oYW5kbGVFdmVudChsKXt2YXIgYSxkOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFILmNhbGwobnVsbCE9PShkPW51bGw9PT0oYT10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1hP3Zv'@;
put 'aWQgMDphLmhvc3QpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5lbGVtZW50LGwpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChsKX19Y2xhc3MgaEp7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVudD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25z'@;
put 'PWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtaNSh0aGlzLGwpfX1jb25zdCBmSj1nRS5saXRIdG1sUG9seWZpbGxTdXBwb3J0O2ZKPy4oZ2IsXzgpLChudWxsIT09KHBGPWdFLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PXBGP3BGOmdFLmxpdEh0bWxWZXJz'@;
put 'aW9ucz1bXSkucHVzaCgiMi43LjUiKTtjb25zdCBwSj0oYyxsLGEpPT57dmFyIGQsaDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgXz1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09Xyl7Y29uc3QgVD1udWxsIT09KGg9YT8ucmVuZGVyQmVm'@;
put 'b3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPV89bmV3IF84KGwuaW5zZXJ0QmVmb3JlKGhiKCksVCksVCx2b2lkIDAsYT8/e30pfXJldHVybiBfLl8kQUkoYyksX307dmFyIF9GLGJGO2NsYXNzIGI4IGV4dGVuZHMgZzh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVu'@;
put 'dHMpLHRoaXMucmVuZGVyT3B0aW9ucz17aG9zdDp0aGlzfSx0aGlzLl8kRG89dm9pZCAwfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbCxhO2NvbnN0IGQ9c3VwZXIuY3JlYXRlUmVuZGVyUm9vdCgpO3JldHVybiBudWxsIT09KGw9KGE9dGhpcy5yZW5kZXJPcHRpb25zKS5yZW5kZXJCZWZvcmUp'@;
put 'JiZ2b2lkIDAhPT1sfHwoYS5yZW5kZXJCZWZvcmU9ZC5maXJzdENoaWxkKSxkfXVwZGF0ZShsKXtjb25zdCBhPXRoaXMucmVuZGVyKCk7dGhpcy5oYXNVcGRhdGVkfHwodGhpcy5yZW5kZXJPcHRpb25zLmlzQ29ubmVjdGVkPXRoaXMuaXNDb25uZWN0ZWQpLHN1cGVyLnVwZGF0ZShsKSx0aGlz'@;
put 'Ll8kRG89cEooYSx0aGlzLnJlbmRlclJvb3QsdGhpcy5yZW5kZXJPcHRpb25zKX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCEwKX1kaXNjb25uZWN0ZWRD'@;
put 'YWxsYmFjaygpe3ZhciBsO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCExKX1yZW5kZXIoKXtyZXR1cm4gdjh9fWI4LmZpbmFsaXplZD0hMCxiOC5fJGxpdEVsZW1lbnQkPSEwLG51bGw9PT0oX0Y9'@;
put 'Z2xvYmFsVGhpcy5saXRFbGVtZW50SHlkcmF0ZVN1cHBvcnQpfHx2b2lkIDA9PT1fRnx8X0YuY2FsbChnbG9iYWxUaGlzLHtMaXRFbGVtZW50OmI4fSk7Y29uc3QgZ0o9Z2xvYmFsVGhpcy5saXRFbGVtZW50UG9seWZpbGxTdXBwb3J0O2dKPy4oe0xpdEVsZW1lbnQ6Yjh9KSwobnVsbCE9PShi'@;
put 'Rj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PWJGP2JGOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMiIpO2NvbnN0IG1KPWNGYEBjaGFyc2V0ICJVVEYtOCI7Omhvc3QsOnJvb3R7LS3OtDI6dmFyKC0tY2RzLWdsb2JhbC1sYXlv'@;
put 'dXQtc3BhY2UteHhzLCBjYWxjKDQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Mzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14cywgY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDQ6dmFyKC0tY2RzLWdsb2Jh'@;
put 'bC1sYXlvdXQtc3BhY2Utc20sIGNhbGMoMTIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCwgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ2OnZhcigtLWNk'@;
put 'cy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnLCBjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDc6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGwsIGNhbGMoMzIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKX1bY2RzLWxh'@;
put 'eW91dH49IndyYXA6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWlt'@;
put 'cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2Rz'@;
put 'LWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0'@;
put 'fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1b'@;
put 'Y2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0'@;
put 'fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2Vu'@;
put 'dGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0'@;
put 'cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGln'@;
put 'bjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1s'@;
put 'YXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxh'@;
put 'eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXth'@;
put 'bGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0'@;
put 'OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2Fs'@;
put 'aWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXth'@;
put 'bGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2Zs'@;
put 'ZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2Fs'@;
put 'aWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxd'@;
put 'PltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMt'@;
put 'bGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PWdyaWRde2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpzdGFydDthbGlnbi1j'@;
put 'b250ZW50OnN0YXJ0O2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQodmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzLDEyKSwxZnIpO3dpZHRoOjEwMCV9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPXJvd3Nde2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoMTIsYXV0'@;
put 'byl9W2Nkcy1sYXlvdXR+PWdyaWRdPltjZHMtbGF5b3V0Kj1yb3dde2FsaWduLXNlbGY6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdo'@;
put 'dCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpz'@;
put 'dHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRj'@;
put 'aH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1p'@;
put 'dGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy'@;
put 'fTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmlu'@;
put 'c2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9'@;
put 'ImdhcDp4eHMiXXtnYXA6dmFyKC0tzrQyKX1bY2RzLWxheW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS3OtDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLc60NCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tzrQ1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dh'@;
put 'cDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhzIl17cGFkZGluZzp2YXIoLS3OtDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5'@;
put 'b3V0fj0icDpzbSJde3BhZGRpbmc6dmFyKC0tzrQ0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFk'@;
put 'ZGluZzp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLc60MykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLc60Nikh'@;
put 'aW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRp'@;
put 'bmctbGVmdDp2YXIoLS3OtDUpIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bGciXXtnYXA6dmFyKC0tzrQ2KX1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBt'@;
put 'ZDp4bCJde21hcmdpbjp2YXIoLS3OtDcpIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpv'@;
put 'bnRhbC1zdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCope2ZsZXgt'@;
put 'Z3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4t'@;
put 'Ym90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRl'@;
put 'cn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe21hcmdpbi10b3A6'@;
put 'YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKSxbY2RzLWxheW91'@;
put 'dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy'@;
put 'dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7bWFyZ2luLWJvdHRv'@;
put 'bTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6'@;
put 'cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRl'@;
put 'ZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNh'@;
put 'bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6'@;
put 'OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRp'@;
put 'YSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXttYXJn'@;
put 'aW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1j'@;
put 'ZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9'@;
put 'ImFsaWduQG1kOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz'@;
put 'LWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNs'@;
put 'b3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy'@;
put 'dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBv'@;
put 'cnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21h'@;
put 'cmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChb'@;
put 'Y2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZl'@;
put 'cnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319W2Nkcy1sYXlvdXR+PWhv'@;
put 'cml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs'@;
put 'XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWlt'@;
put 'cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe2FsaWduLXNl'@;
put 'bGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0p'@;
put 'e21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91'@;
put 'dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe2FsaWduLXNlbGY6'@;
put 'ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0p'@;
put 'e21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jp'@;
put 'em9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpv'@;
put 'bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmln'@;
put 'aHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJv'@;
put 'dHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9u'@;
put 'dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRh'@;
put 'bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln'@;
put 'bkBtZDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDox'@;
put 'MjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNl'@;
put 'bnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDph'@;
put 'dXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb'@;
put 'Y2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpv'@;
put 'bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRl'@;
put 'ciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIi'@;
put 'XSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz'@;
put 'bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6'@;
put 'b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9y'@;
put 'dGFudH19W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49'@;
put 'Z3JpZF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNh'@;
put 'bF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOjpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQqPXN1YnNlY3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNk'@;
put 'cy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkw'@;
put 'MCwjMjEzMzNiKSl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2ssIzAwMCkpfVtjZHMtdGV4dCo9aW5s'@;
put 'aW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplLGNhbGMoNDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh'@;
put 'bC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pO2xldHRlci1zcGFjaW5nOnZhcigt'@;
put 'LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPWRpc3BsYXldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10'@;
put 'eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNw'@;
put 'bGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0t'@;
put 'Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQsNDAwKTtsaW5lLWhlaWdodDp2YXIoLS1j'@;
put 'ZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgzMzNlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmJlZm9yZXtjb250ZW50OiIiO2Rp'@;
put 'c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2Vt'@;
put 'KSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4x'@;
put 'NDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwx'@;
put 'LjE2NjY3ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplLGNhbGMoMjAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2Vp'@;
put 'Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo'@;
put 'eS1zZWN0aW9uLWxldHRlci1zcGFjaW5nLC0uMDFlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo'@;
put 'dCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0'@;
put 'aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5'@;
put 'LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LXN1YnNlY3Rpb24tZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh'@;
put 'bC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS4yNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7'@;
put 'ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEu'@;
put 'MjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAt'@;
put 'aGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9u'@;
put 'LWxpbmUtaGVpZ2h0LDEuMjVlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0LDQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1i'@;
put 'b2R5LWZvbnQtc2l6ZSxjYWxjKDE0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZywtLjAxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5'@;
put 'cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pfVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWln'@;
put 'aHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDow'@;
put 'O21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgt'@;
put 'aGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40Mjg1N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2Nv'@;
put 'bnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBv'@;
put 'Z3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuMjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2Rz'@;
put 'LWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n'@;
put 'cmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5'@;
put 'OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1j'@;
put 'ZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWln'@;
put 'aHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnld'@;
put 'OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29u'@;
put 'ZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2Jh'@;
put 'bC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwt'@;
put 'dHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwj'@;
put 'MDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy'@;
put 'YXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29s'@;
put 'b3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xv'@;
put 'ci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1m'@;
put 'YW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxLjFlbX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRl'@;
put 'bjtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgaW5zZXR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50fVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9y'@;
put 'dGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzou'@;
put 'MDVweCAwfVtjZHMtdGV4dH49bGhlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtj'@;
put 'ZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtj'@;
put 'b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJv'@;
put 'dHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgyXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dp'@;
put 'ZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw'@;
put 'aHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jl'@;
put 'e2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10'@;
put 'ZXh0Kj1oM106OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt'@;
put 'YXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9zdHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJp'@;
put 'dDtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpu'@;
put 'b25lIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNw'@;
put 'bGF5OmNvbnRlbnRzIWltcG9ydGFudH06OnNsb3R0ZWQoKil7Zm9udC1mYW1pbHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29s'@;
put 'b3ItY29uc3RydWN0aW9uLTYwMCwjNGY2MTY5KSl9Omhvc3QoW19pcy1hbmNob3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNsb3R0ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1'@;
put 'cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90dGVkKCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1l'@;
put 'dmVudHM6bm9uZX06aG9zdChbaGlkZGVuXSksW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6'@;
put 'OnNsb3R0ZWQoKil7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2li'@;
put 'bGUhaW1wb3J0YW50fTpob3N0KFtfZm9jdXNlZF0pIC5pbnB1dCw6aG9zdChbX2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMpIFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9j'@;
put 'dXN7b3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4O291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIHlGKGMpe3JldHVy'@;
put 'bmBjYWxjKCgke2N9IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVtKWB9Y29uc3QgdDhlPShjLGwpPT4ibWV0aG9kIj09PWwua2luZCYmbC5kZXNjcmlwdG9yJiYhKCJ2YWx1ZSJpbiBsLmRlc2NyaXB0b3IpP3suLi5sLGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkobC5rZXks'@;
put 'Yyl9fTp7a2luZDoiZmllbGQiLGtleTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTpsLmtleSxpbml0aWFsaXplcigpeyJmdW5jdGlvbiI9PXR5cGVvZiBsLmluaXRpYWxpemVyJiYodGhpc1tsLmtleV09bC5pbml0aWFsaXplci5jYWxsKHRoaXMp'@;
put 'KX0sZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19LG44ZT0oYyxsLGEpPT57bC5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShhLGMpfTtmdW5jdGlvbiB2SihjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9uOGUoYyxsLGEpOnQ4ZShjLGwpfWZ1bmN0aW9uIF9KKGMs'@;
put 'bCl7c3dpdGNoKGwmJmwudHlwZSl7Y2FzZSBBcnJheTpjYXNlIE9iamVjdDpyZXR1cm57cmVmbGVjdDohMSwuLi5sfTtjYXNlIFN0cmluZzpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksY29udmVydGVyOnt0b0F0dHJpYnV0ZTphPT5hfHxudWxsfSwuLi5sfTtjYXNlIE51bWJl'@;
put 'cjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksLi4ubH07Y2FzZSBCb29sZWFuOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpGNShjKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmE/IiI6bnVsbCxmcm9tQXR0cmlidXRlOmE9PmZ1bmN0aW9uIHo2ZShjKXtyZXR1cm4g'@;
put 'bnVsbCE9YyYmIiIrYyE9ImZhbHNlIn0oYSl9LC4uLmx9O2Nhc2UgRGF0ZTpyZXR1cm57cmVmbGVjdDohMSxjb252ZXJ0ZXI6e2Zyb21BdHRyaWJ1dGU6YT0+bmV3IERhdGUoYSl9LC4uLmx9O2RlZmF1bHQ6cmV0dXJuey4uLmx9fX1mdW5jdGlvbiBrbChjKXtyZXR1cm4obCxhKT0+KGM/LnJl'@;
put 'cXVpcmVkJiZmdW5jdGlvbiByOGUoYyxsLGEpe2NvbnN0IGQ9Yy5maXJzdFVwZGF0ZWQ7Yy5maXJzdFVwZGF0ZWQ9ZnVuY3Rpb24oaCl7aWYoYSYmYS5yZXF1aXJlZCYmX3AodGhpc1tsXSkpe2NvbnN0IGY9YS5yZXF1aXJlZE1lc3NhZ2V8fGZ1bmN0aW9uKF89Indhcm5pbmciLFQsVyl7Y29u'@;
put 'c3QgaWU9Vy50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke3dLKF8pfTogJHtUfSBpcyByZXF1aXJlZCB0byB1c2UgJHtpZX0gY29tcG9uZW50LiBTZXQgdGhlIEpTIFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhtSygpP2BBbmd1bGFyOiA8JHtpZX0gWyR7VH1dPSIuLi4i'@;
put 'PjwvJHtpZX0+XG5gOiIiKSsoX0soKT9gVnVlOiA8JHtpZX0gOiR7VH09Ii4uLiI+PC8ke2llfT5cbmA6IiIpKyh2SygpP2BSZWFjdDogPCR7ZnVuY3Rpb24gWWdlKGMpe3JldHVybiB3SyhmdW5jdGlvbiBaZ2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQo'@;
put 'MCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oaWUpfSAke2dlPVQsZ2Uuc3RhcnRzV2l0aCgiYXJpYSIpP0Y1KGdlKTpnZX09ey4uLn0gLz5cbmA6IiIpK2BIVE1MOiA8JHtpZX0gJHtGNShUKX09Ii4uLiI+PC8ke2llfT5cbkphdmFT'@;
put 'Y3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7aWV9JykuJHtUfSA9ICcuLi4nO1xuXG5gO3ZhciBnZX0oYS5yZXF1aXJlZCxsLHRoaXMudGFnTmFtZSk7aWYoImVycm9yIj09PWEucmVxdWlyZWQpdGhyb3cgRXJyb3IoZik7SDUud2FybihmLHRoaXMpfWQmJmQuY2FsbCh0aGlzLGgp'@;
put 'fX0obCxhLGMpLHZKKF9KKGEsYykpKGwsYSkpfWZ1bmN0aW9uIGJKKGMpe3JldHVybihsLGEpPT57Y29uc3QgZD1fSihhLGMpO3JldHVybiBkJiYoZC5yZWZsZWN0PSEhYz8ucmVmbGVjdCYmYy5yZWZsZWN0LGQucmVmbGVjdCYmIWM/LmF0dHJpYnV0ZSYmKGQuYXR0cmlidXRlPSJfIitGNShh'@;
put 'KSkpLHZKKGQpKGwsYSl9fXZhciBjaCxzOGU9Y0ZgQGtleWZyYW1lcyBmYWRlSW5BbmRPdXR7MCUsdG97b3BhY2l0eTowfTc1JXtvcGFjaXR5OjF9fTpob3N0ey0tY29sb3I6Y3VycmVudENvbG9yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcs'@;
put 'Y2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYg'@;
put 'KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6dmFyKC0tY29sb3Ip'@;
put 'O2NvbG9yOnZhcigtLWNvbG9yKTtjb250YWluOnN0cmljdDtjdXJzb3I6aW5oZXJpdH1zdmd7ZGlzcGxheTpibG9ja306aG9zdChbc2l6ZSo9eHNdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lk'@;
put 'dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFy'@;
put 'KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXNtXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0'@;
put 'aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZh'@;
put 'cigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bWRdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dp'@;
put 'ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6'@;
put 'dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1sZ10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp'@;
put 'O3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13'@;
put 'aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14bF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNl'@;
put 'LDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp'@;
put 'O21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14eGxdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2Rz'@;
put 'LWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz'@;
put 'ZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp'@;
put 'KSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFy'@;
put 'KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpfTpob3N0KFtzaXplKj1maXRdKXtoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2NvbnRhaW46bGF5b3V0fTpob3N0KFtzdGF0dXM9c3VjY2Vzc10pey0tY29sb3I6dmFyKC0tY2Rz'@;
put 'LWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtzdGF0dXM9ZGFuZ2VyXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAy'@;
put 'MjAwKSl9Omhvc3QoW3N0YXR1cz13YXJuaW5nXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbc3RhdHVzPWluZm9dKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z'@;
put 'dGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtzdGF0dXM9bmV1dHJhbF0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYx'@;
put 'NjkpKX06aG9zdChbaW52ZXJzZV0pey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCAjY2JkNGQ4KX06aG9zdChbZGlyZWN0aW9uPXVwXSl7dHJhbnNmb3JtOnJvdGF0ZSgwKX06aG9zdChbZGlyZWN0aW9uPWRvd25dKXt0cmFuc2Zvcm06cm90YXRlKDE4'@;
put 'MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1yaWdodF0pe3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTpob3N0KFtkaXJlY3Rpb249bGVmdF0pe3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX06aG9zdChbZmxpcD1ob3Jpem9udGFsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9'@;
put 'Omhvc3QoW2ZsaXA9dmVydGljYWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX0uYWxlcnQsLmJhZGdle2ZpbGw6dmFyKC0tYmFkZ2UtY29sb3IsdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCNlMDIyMDAp'@;
put 'KSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2U9ZGFuZ2VyXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxp'@;
put 'YXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04'@;
put 'MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2U9aW5oZXJpdF0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5'@;
put 'YWQpKX06aG9zdChbYmFkZ2U9bmV1dHJhbF0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbYmFkZ2U9aW5oZXJpdC10cmlhbmdsZV0pey0tYmFkZ2Ut'@;
put 'Y29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZV1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZT1zdWNjZXNzXVtpbnZlcnNlXSl7LS1i'@;
put 'YWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct'@;
put 'ZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2UqPWluaGVyaXRdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFs'@;
put 'aWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9LmNkcy1pbnRlcm5hbC1kb3QtMXthbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1pbiAwcyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ye2FuaW1hdGlvbjpmYWRlSW5B'@;
put 'bmRPdXQgMS44cyBlYXNlLW91dCAuNDIycyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91dCAuNjc1cyBpbmZpbml0ZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5jZHMtaW50ZXJuYWwtZG90LTEsLmNkcy1p'@;
put 'bnRlcm5hbC1kb3QtMiwuY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpub25lfX1gO2Z1bmN0aW9uIHU4ZShjLGwpe2xldCBhPSIiO3N3aXRjaChmdW5jdGlvbiBhOGUoYyl7c3dpdGNoKCEwKXtjYXNlIF9wKGMpOnJldHVybiBjaC5OaWxTaXplVmFsdWU7Y2FzZSBmdW5jdGlvbiB5Sihj'@;
put 'KXtyZXR1cm5bInh4cyIsInhzIiwic20iLCJtZCIsImxnIiwieGwiLCJ4eGwiXS5pbmRleE9mKGMpPi0xfShjKTpyZXR1cm4gY2guVmFsaWRTaXplU3RyaW5nO2Nhc2UgZnVuY3Rpb24gbEsoYyl7cmV0dXJuIElQKGMpJiYhYUsoYy50cmltKCkpJiYrYz09K2N9KGMpOnJldHVybiBjaC5WYWxp'@;
put 'ZE51bWVyaWNTdHJpbmc7ZGVmYXVsdDpyZXR1cm4gY2guQmFkU2l6ZVZhbHVlfX0oZnVuY3Rpb24gbDhlKGMpe3JldHVybiBfcChjKT8iIjpmdW5jdGlvbiBXZ2UoYyxsLGE9IiIpe2NvbnN0IGQ9Yy5zcGxpdCgiICIpLGg9IiI9PT1hP2QuZmlsdGVyKGY9PmYhPT1sKTpkLm1hcChmPT5mPT09'@;
put 'bD9hOmYpO3JldHVybiBoLmxlbmd0aD4wP2guam9pbigiICIpOiIifShjLCJmaXQiKX0obCkpKXtjYXNlIGNoLlZhbGlkTnVtZXJpY1N0cmluZzpyZXR1cm4gYT15RihwYXJzZUludChsKSksdm9pZCBmdW5jdGlvbiBRNmUoYywuLi5sKXtsLmZvckVhY2goKFthLGRdKT0+e2Muc3R5bGVbYV09'@;
put 'ZH0pfShjLC4uLmZ1bmN0aW9uIGM4ZShjLGwpe3JldHVybiF0YihjKSYmYy5pbmRleE9mKCJmaXQiKT4tMT9bWyJ3aWR0aCIsImF1dG8iXSxbImhlaWdodCIsImF1dG8iXSxbIm1pbi13aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV06W1sid2lkdGgiLGxdLFsiaGVpZ2h0IixsXSxbIm1pbi13'@;
put 'aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV19KGwsYSkpO2Nhc2UgY2guVmFsaWRTaXplU3RyaW5nOmNhc2UgY2guTmlsU2l6ZVZhbHVlOnJldHVybiB2b2lkIGZ1bmN0aW9uIGU4ZShjLC4uLmwpe2wuZm9yRWFjaChhPT57Yy5zdHlsZVthXT0iIn0pfShjLCJ3aWR0aCIsImhlaWdodCIsIm1p'@;
put 'bi13aWR0aCIsIm1pbi1oZWlnaHQiKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gd0YoYyl7cmV0dXJuIGMuYmFkZ2UmJigiaW5oZXJpdC10cmlhbmdsZSI9PT1jLmJhZGdlfHwid2FybmluZy10cmlhbmdsZSI9PT1jLmJhZGdlKX0hZnVuY3Rpb24oYyl7Yy5CYWRTaXplVmFsdWU9ImJhZC12'@;
put 'YWx1ZSIsYy5WYWxpZFNpemVTdHJpbmc9InZhbHVlLWlzLXN0cmluZyIsYy5WYWxpZE51bWVyaWNTdHJpbmc9InZhbHVlLWlzLW51bWVyaWMiLGMuTmlsU2l6ZVZhbHVlPSJ2YWx1ZS1pcy1uaWwifShjaHx8KGNoPXt9KSk7Y2xhc3MgbzIgZXh0ZW5kcyBiOHtjb25zdHJ1Y3Rvcigpe3N1cGVy'@;
put 'KC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW21KLHM4ZV19Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuX3NoYXBlfXNldCBzaGFwZShsKXtpZihmdW5jdGlvbiBPZ2UoYyxs'@;
put 'KXtyZXR1cm4hX3AoYykmJnVLKGMsbCl9KGwsdGhpcy5fc2hhcGUpKXtjb25zdCBhPXRoaXMuX3NoYXBlO3RoaXMuX3NoYXBlPWwsdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaGFwZSIsYSl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUobCl7aWYoZnVuY3Rpb24gUmdlKGMs'@;
put 'bCl7cmV0dXJuIGZ1bmN0aW9uIExnZShjKXtyZXR1cm4gWngoU3RyaW5nLGMpfHx0YihjKX0oYykmJnVLKGMsbCl9KGwsdGhpcy5fc2l6ZSkpe2NvbnN0IGE9dGhpcy5fc2l6ZTt0aGlzLl9zaXplPWwsdThlKHRoaXMsbCksdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaXplIixhKX19dXBkYXRlZChs'@;
put 'KXtpZihsLmhhcygiaW5uZXJPZmZzZXQiKSYmdGhpcy5pbm5lck9mZnNldD4wKXtjb25zdCBhPXlGKC0xKnRoaXMuaW5uZXJPZmZzZXQpLGQ9YGNhbGMoMTAwJSArICR7eUYoMip0aGlzLmlubmVyT2Zmc2V0KX0pYDt0aGlzLnN2Zy5zdHlsZS53aWR0aD1kLHRoaXMuc3ZnLnN0eWxlLmhlaWdo'@;
put 'dD1kLHRoaXMuc3ZnLnN0eWxlLm1hcmdpbj1gJHthfSAwIDAgJHthfWB9fWZpcnN0VXBkYXRlZChsKXtpZihzdXBlci5maXJzdFVwZGF0ZWQobCksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IGE9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPUdsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZD0+'@;
put 'eyJpY29uUmVnaXN0cnkiPT09ZC5rZXkmJlZzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdJiZhIT09dGhpcy5zaGFwZSYmKGE9dGhpcy5zaGFwZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIikpfSl9fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0'@;
put 'aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1yZW5kZXIoKXtyZXR1cm4gSVAoVnMucmVnaXN0cnlbdGhpcy5zaGFwZV0pP3ZGYDxzcGFuIC5pbm5lckhUTUw9IiR7VnMucmVnaXN0cnlbdGhpcy5zaGFwZV19Ij48L3NwYW4+YDpxNmVgPHN2ZyAuaW5uZXJIVE1MPSIke2Z1bmN0aW9u'@;
put 'IGg4ZShjKXtjb25zdCBsPVZzLnJlZ2lzdHJ5W2Muc2hhcGVdPz9Wcy5yZWdpc3RyeS51bmtub3duO2xldCBhPWMuc29saWQmJmwuc29saWQ/bC5zb2xpZDpsLm91dGxpbmU7cmV0dXJuIGMuYmFkZ2UmJiF3RihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQmFkZ2VkPz9hOmwub3V0bGluZUJhZGdl'@;
put 'ZD8/YSksd0YoYykmJihhPWMuc29saWQ/bC5zb2xpZEFsZXJ0ZWQ/P2E6bC5vdXRsaW5lQWxlcnRlZD8/YSksYX0odGhpcykrZnVuY3Rpb24gZDhlKGMpe2xldCBsPSIiO3JldHVybiBjLmJhZGdlJiZ3RihjKT9sPSc8cGF0aCBkPSJNMjYuODUgMS4xNEwyMS4xMyAxMWExLjI4IDEuMjggMCAw'@;
put 'MDEuMSAyaDExLjQ1YTEuMjggMS4yOCAwIDAwMS4xLTJsLTUuNzItOS44NmExLjI4IDEuMjggMCAwMC0yLjIxIDB6IiBjbGFzcz0iYWxlcnQiIC8+JzpjLmJhZGdlJiYobD0nPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iYmFkZ2UiIC8+JyksbH0odGhpcyl9IiB2aWV3Qm94'@;
put 'PSIwIDAgMzYgMzYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1oaWRkZW49InRydWUiPjwvc3ZnPmB9fU10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsInNp'@;
put 'emUiLG51bGwpLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sbzIucHJvdG90eXBlLCJzb2xpZCIsdm9p'@;
put 'ZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLE10KFtrbCh7dHlwZTpCb29sZWFufSldLG8yLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCks'@;
put 'TXQoW2JKKHt0eXBlOk51bWJlcn0pXSxvMi5wcm90b3R5cGUsImlubmVyT2Zmc2V0Iix2b2lkIDApLE10KFtmdW5jdGlvbiBvOGUoYyxsKXtyZXR1cm4oKHtmaW5pc2hlcjpjLGRlc2NyaXB0b3I6bH0pPT4oYSxkKT0+e3ZhciBoO2lmKHZvaWQgMD09PWQpe2NvbnN0IGY9bnVsbCE9PShoPWEu'@;
put 'b3JpZ2luYWxLZXkpJiZ2b2lkIDAhPT1oP2g6YS5rZXksXz1udWxsIT1sP3traW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6ZixkZXNjcmlwdG9yOmwoYS5rZXkpfTp7Li4uYSxrZXk6Zn07cmV0dXJuIG51bGwhPWMmJihfLmZpbmlzaGVyPWZ1bmN0aW9uKFQpe2MoVCxm'@;
put 'KX0pLF99e2NvbnN0IGY9YS5jb25zdHJ1Y3Rvcjt2b2lkIDAhPT1sJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLGwoZCkpLGM/LihmLGQpfX0pKHtkZXNjcmlwdG9yOmE9Pntjb25zdCBkPXtnZXQoKXt2YXIgaCxmO3JldHVybiBudWxsIT09KGY9bnVsbD09PShoPXRoaXMucmVuZGVyUm9v'@;
put 'dCl8fHZvaWQgMD09PWg/dm9pZCAwOmgucXVlcnlTZWxlY3RvcihjKSkmJnZvaWQgMCE9PWY/ZjpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYobCl7Y29uc3QgaD0ic3ltYm9sIj09dHlwZW9mIGE/U3ltYm9sKCk6Il9fIithO2QuZ2V0PWZ1bmN0aW9uKCl7dmFyIGYs'@;
put 'XztyZXR1cm4gdm9pZCAwPT09dGhpc1toXSYmKHRoaXNbaF09bnVsbCE9PShfPW51bGw9PT0oZj10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1fP186bnVsbCksdGhpc1toXX19cmV0dXJuIGR9fSl9KCJzdmciKV0sbzIu'@;
put 'cHJvdG90eXBlLCJzdmciLHZvaWQgMCksVlgoImNkcy1pY29uIixvMik7Y2xhc3MgcDhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RDb25uZWN0ZWQoKXt2YXIgbD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXt5aWVsZCBs'@;
put 'Lmhvc3QudXBkYXRlQ29tcGxldGUsbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGE9PmwuZW11bGF0ZUFjdGl2ZShhKSksbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsYT0+bC5lbXVsYXRlQWN0aXZlKGEpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigia2V5'@;
put 'dXAiLCgpPT5sLmVtdWxhdGVJbmFjdGl2ZSgpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9PmwuZW11bGF0ZUluYWN0aXZlKCkpLGwuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+bC5lbXVsYXRlSW5hY3RpdmUoKSl9KSgpfWVtdWxhdGVBY3RpdmUobCl7'@;
put 'dGhpcy5ob3N0LmRpc2FibGVkfHx0aGlzLmhvc3Q/LnNldEF0dHJpYnV0ZSgiY2RzLWFjdGl2ZSIsIiIpLCJTcGFjZSI9PT1sLmNvZGUmJmwudGFyZ2V0PT09dGhpcy5ob3N0JiZsLnByZXZlbnREZWZhdWx0KCl9ZW11bGF0ZUluYWN0aXZlKCl7dGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgi'@;
put 'Y2RzLWFjdGl2ZSIpfX1jbGFzcyBtOGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpeyh0aGlzLmhvc3QuaGFzQXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIil8fHRoaXMuaG9zdC5hcmlhQ29udHJvbHMpJiYo'@;
put 'dGhpcy5ob3N0LmFyaWFIYXNQb3B1cD0idHJ1ZSIsdGhpcy5ob3N0LmFyaWFFeHBhbmRlZD0iZmFsc2UiKX19Y2xhc3MgXzhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7bnVsbCE9PXRoaXMuaG9zdC5kaXNh'@;
put 'YmxlZCYmKHRoaXMuaG9zdC5hcmlhRGlzYWJsZWQ9dGhpcy5ob3N0LmRpc2FibGVkKSx0aGlzLmhvc3QucmVhZG9ubHkmJih0aGlzLmhvc3QuYXJpYURpc2FibGVkPW51bGwpfX1jbGFzcyB5OGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhp'@;
put 'cyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QucHJlc3NlZCYmKHRoaXMuaG9zdC5hcmlhUHJlc3NlZD10aGlzLmhvc3QucHJlc3NlZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFQcmVzc2VkPW51bGwpfX1jbGFzcyBDOGV7Y29uc3Ry'@;
put 'dWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpe3RoaXMuaG9zdC50YWJJbmRleD0wfWhvc3RVcGRhdGVkKCl7dGhpcy5ob3N0LnJvbGU9dGhpcy5ob3N0LnJlYWRvbmx5P251bGw6ImJ1dHRvbiIsdGhpcy5ob3N0LnRhYklu'@;
put 'ZGV4PXRoaXMuaG9zdC5kaXNhYmxlZD8tMTowLHRoaXMuaG9zdC5yZWFkb25seSYmdGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX19Y2xhc3MgTThle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWdldCBjdXJyZW50'@;
put 'QW5jaG9yKCl7cmV0dXJuIkEiPT09dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ/LnRhZ05hbWU/dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ6bnVsbH1ob3N0Q29ubmVjdGVkKCl7dGhpcy5zZXRBbmNob3IoKX1ob3N0VXBkYXRlZCgpe3RoaXMuc2V0QW5jaG9yKCl9c2V0QW5jaG9yKCl7dGhpcy5j'@;
put 'dXJyZW50QW5jaG9yJiZ0aGlzLmN1cnJlbnRBbmNob3IhPT10aGlzLnByZXZpb3VzQW5jaG9yJiYodGhpcy5wcmV2aW91c0FuY2hvcj10aGlzLmN1cnJlbnRBbmNob3IsdGhpcy5ob3N0LnJlYWRvbmx5PSEwLHRoaXMuY3VycmVudEFuY2hvci5zdHlsZS5saW5lSGVpZ2h0PSIwIix0aGlzLmN1'@;
put 'cnJlbnRBbmNob3Iuc3R5bGUudGV4dERlY29yYXRpb249Im5vbmUiKX19Y29uc3QgQ0Y9Yz0+Yz8/VGM7ZnVuY3Rpb24gd0ooYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCl9Y29uc3QgU0Y9bmV3IE1hcChbWyJhcnJvdy1sZWZ0IiwiQXJyb3dMZWZ0Il0sWyJhcnJv'@;
put 'dy1yaWdodCIsIkFycm93UmlnaHQiXSxbImFycm93LXVwIiwiQXJyb3dVcCJdLFsiYXJyb3ctZG93biIsIkFycm93RG93biJdLFsidGFiIiwiVGFiIl0sWyJlbnRlciIsIkVudGVyIl0sWyJlc2NhcGUiLCJFc2NhcGUiXSxbInNwYWNlIiwiICJdLFsiaG9tZSIsIkhvbWUiXSxbImVuZCIsIkVu'@;
put 'ZCJdXSk7Y2xhc3MgRThle3N0YXRpYyBnZXQga2V5Y29kZXMoKXtyZXR1cm4gSGdlKFNGKX1zdGF0aWMgYWRkKGwsYSl7U0Yuc2V0KGwsYSl9c3RhdGljIGhhcyhsKXtyZXR1cm4gU0YuaGFzKGwpfXN0YXRpYyBnZXRDb2RlKGwsYT10aGlzLmtleWNvZGVzKXtyZXR1cm4gZnVuY3Rpb24gazhl'@;
put 'KGMsbCl7cmV0dXJuIGwuZ2V0KGMpfHwiIn0obCxhKX19ZnVuY3Rpb24gTUYoYyxsKXtyZXR1cm4gRThlLmdldENvZGUobCk9PT1jLmtleX12YXIgdWg7IWZ1bmN0aW9uKGMpe2MuQXJyb3dVcD0iQXJyb3dVcCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5BcnJvd0xlZnQ9IkFycm93TGVm'@;
put 'dCIsYy5BcnJvd1JpZ2h0PSJBcnJvd1JpZ2h0IixjLkVuZD0iRW5kIixjLkhvbWU9IkhvbWUiLGMuUGFnZVVwPSJQYWdlVXAiLGMuUGFnZURvd249IlBhZ2VEb3duIn0odWh8fCh1aD17fSkpO2NsYXNzIE84ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvc3Q9bCx0aGlzLnRyaWdnZXJOYXRpdmVC'@;
put 'dXR0b25CZWhhdmlvckhhbmRsZXI9dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IuYmluZCh0aGlzKSx0aGlzLmVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3JIYW5kbGVyPXRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvci5iaW5kKHRoaXMpLHRoaXMuaG9zdC5hZGRD'@;
put 'b250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7dGhpcy5zZXRCdXR0b25UeXBlKCksdGhpcy5zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl9c2V0QnV0dG9uVHlwZSgpeyF0aGlzLmhvc3QudHlwZSYmdGhpcy5ob3N0LmNsb3Nlc3QoImZvcm0iKSYmKHRoaXMuaG9zdC50eXBlPSJzdWJt'@;
put 'aXQiKX1zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl7dGhpcy5ob3N0LnJlYWRvbmx5fHx0aGlzLmhvc3QuZGlzYWJsZWQ/KHRoaXMuaG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3JIYW5kbGVyKSx0aGlzLmhvc3QucmVt'@;
put 'b3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvckhhbmRsZXIpKToodGhpcy5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvckhhbmRsZXIpLHRoaXMuaG9zdC5hZGRFdmVudExp'@;
put 'c3RlbmVyKCJrZXl1cCIsdGhpcy5lbXVsYXRlS2V5Qm9hcmRFdmVudEJlaGF2aW9ySGFuZGxlcikpfWVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3IobCl7IWZ1bmN0aW9uIEE4ZShjLGwsYSl7Yy5maWx0ZXIoZD0+TUYobCxkKSkubGVuZ3RoPjAmJmEoKX0oWyJlbnRlciIsInNwYWNlIl0s'@;
put 'bCwoKT0+eyJzdWJtaXQiPT09dGhpcy5ob3N0LnR5cGU/dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCk6dGhpcy5ob3N0LmNsaWNrKCksd0oobCl9KX10cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCl7aWYodGhpcy5ob3N0LmRpc2FibGVkKXdKKGwpO2Vsc2UgaWYoIWwu'@;
put 'ZGVmYXVsdFByZXZlbnRlZCl7Y29uc3QgYT1mdW5jdGlvbiBMOGUoYyxsLGEpe2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5hcHBlbmRDaGlsZChkKSxwSihjLGwse3JlbmRlckJlZm9yZTpkLC4uLmF9KTtjb25zdCBoPWQucHJldmlvdXNTaWJsaW5nO3JldHVybiBk'@;
put 'LnJlbW92ZSgpLGh9KHZGYDxidXR0b24gYXJpYS1oaWRkZW49InRydWUiIHJvbGU9InByZXNlbnRhdGlvbiIgP2Rpc2FibGVkPSIke3RoaXMuaG9zdC5kaXNhYmxlZH0iIHRhYmluZGV4PSItMSIgc3R5bGU9ImRpc3BsYXk6bm9uZSFpbXBvcnRhbnQiIHZhbHVlPSIke0NGKHRoaXMuaG9zdC52'@;
put 'YWx1ZSl9IiBuYW1lPSIke0NGKHRoaXMuaG9zdC5uYW1lKX0iIHR5cGU9IiR7Q0YodGhpcy5ob3N0LnR5cGUpfSI+PC9idXR0b24+YCx0aGlzLmhvc3QpO2E/LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIix7cmVsYXRlZFRhcmdldDp0aGlzLmhvc3QsY29tcG9zZWQ6ITB9'@;
put 'KSksYT8ucmVtb3ZlKCl9fX1jbGFzcyBGOGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QuZXhwYW5kZWQmJih0aGlzLmhvc3QuYXJpYUV4cGFuZGVkPXRoaXMuaG9zdC5leHBhbmRl'@;
put 'ZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFFeHBhbmRlZD1udWxsKX19bGV0IHMyPWNsYXNzIGV4dGVuZHMgYjh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Rpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVy'@;
put 'biB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYyl7Y29uc3QgbD10aGlzLl9kaXNhYmxlZDt0aGlzLl9kaXNhYmxlZD1jLHRoaXMucmVxdWVzdFVwZGF0ZSgiZGlzYWJsZWQiLGwpfX07TXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJwcmVzc2VkIix2b2lkIDApLE10'@;
put 'KFtrbCh7dHlwZTpCb29sZWFufSldLHMyLnByb3RvdHlwZSwiZXhwYW5kZWQiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJyZWFkb25seSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKSxNdChb'@;
put 'a2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJkaXNhYmxlZCIsbnVsbCksTXQoW2tsKHt0eXBl'@;
put 'OlN0cmluZ30pXSxzMi5wcm90b3R5cGUsInBvcHVwIix2b2lkIDApLHMyPU10KFtmdW5jdGlvbiBmOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgcDhlKGwpKX0oKSxmdW5jdGlvbiB3OGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgQzhlKGwpKX0o'@;
put 'KSxmdW5jdGlvbiBiOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgeThlKGwpKX0oKSxmdW5jdGlvbiBQOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgRjhlKGwpKX0oKSxmdW5jdGlvbiB2OGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihs'@;
put 'PT5uZXcgXzhlKGwpKX0oKSxmdW5jdGlvbiBnOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgbThlKGwpKX0oKSxmdW5jdGlvbiBSOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgTzhlKGwpKX0oKSxmdW5jdGlvbiBTOGUoKXtyZXR1cm4gYz0+Yy5h'@;
put 'ZGRJbml0aWFsaXplcihsPT5uZXcgTThlKGwpKX0oKV0sczIpO2NvbnN0IHZFPXthY3Rpb25zOntzb3J0OiJTb3J0IixleHBhbmQ6IkV4cGFuZCIsY2xvc2U6IkNsb3NlIixyZXNpemU6IlJlc2l6ZSIsZmlsdGVyOiJGaWx0ZXIifSxhbGVydDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3Nl'@;
put 'Iixsb2FkaW5nOiJMb2FkaW5nIixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIn0sZHJvcGRvd246e29wZW46Ik9wZW4ifSxmaWxlOnticm93c2U6ImJyb3dzZSIsZmlsZXM6ImZpbGVzIixyZW1vdmVGaWxlOiJyZW1vdmUgZmls'@;
put 'ZSJ9LG1vZGFsOntjbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgbW9kYWwiLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIG1vZGFsIGNvbnRlbnQiLGNvbnRlbnRCb3g6IlNjcm9sbGFibGUgbW9kYWwgYm9keSIsY29udGVudEVuZDoiRW5kIG9mIG1vZGFsIGNvbnRlbnQifSxuYXZpZ2F0'@;
put 'aW9uOntuYXZpZ2F0aW9uRWxlbWVudDoibmF2aWdhdGlvbiIsbmF2aWdhdGlvbkxhYmVsOiJuYXZpZ2F0aW9uIG1lbnUiLG5hdmlnYXRpb25BYnJpZGdlZFRleHQ6IlZpZXcgYWJyaWRnZWQgbWVudSIsbmF2aWdhdGlvblVuYWJyaWRnZWRUZXh0OiJWaWV3IHVuYWJyaWRnZWQgbWVudSJ9LG92'@;
put 'ZXJsYXk6e2Nsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBkaWFsb2ciLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIGRpYWxvZyBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgZGlhbG9nIGNvbnRlbnQifSxwb3B1cDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIHBvcHVwIixj'@;
put 'b250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBwb3B1cCBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgcG9wdXAgY29udGVudCJ9LHBhc3N3b3JkOntzaG93QnV0dG9uQXJpYUxhYmVsOiJTaG93IHBhc3N3b3JkIixoaWRlQnV0dG9uQXJpYUxhYmVsOiJIaWRlIHBhc3N3b3JkIn0scHJvZ3Jl'@;
put 'c3M6e2xvYWRpbmc6IkxvYWRpbmciLGxvb3Bpbmc6IkxvYWRpbmcifSx0cmVldmlldzp7bG9hZGluZzoiTG9hZGluZyJ9LGdyaWQ6e3Jlc2l6ZUNvbHVtbjoiUmVzaXplIENvbHVtbiIsY2xvc2VEZXRhaWxzOiJDbG9zZSBEZXRhaWxzIixub0RhdGE6Ik5vIFJlc3VsdHMgRm91bmQiLHJvd0Rl'@;
put 'dGFpbFN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIscm93RGV0YWlsRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLGZvb3RlckVuZDoiRW5kIG9mIGdyaWQgcm93cyIsYWN0aW9uOiJBY3Rpb24iLGRyb3BUYXJnZXQ6IkRyb3AgSXRlbSIscGFnaW5hdGlvbjp7bGFiZWw6ImdyaWQgcGFnaW5h'@;
put 'dGlvbiIsZmlyc3RQYWdlOiJnbyB0byBmaXJzdCBwYWdlIixwcmV2aW91c1BhZ2U6ImdvIHRvIHByZXZpb3VzIHBhZ2UiLG5leHRQYWdlOiJnbyB0byBuZXh0IHBhZ2UiLGxhc3RQYWdlOiJnbyB0byBsYXN0IHBhZ2UiLHBhZ2VTaXplOiJyb3dzIHBlciBwYWdlIixwYWdlOiJwYWdlIn19fTtj'@;
put 'bGFzcyBZNXtzdGF0aWMgZ2V0IGtleXMoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKEdsLnN0YXRlLmkxOG5SZWdpc3RyeSkubGVuZ3RoJiYoR2wuc3RhdGUuaTE4blJlZ2lzdHJ5PVA1KHZFLEdsLnN0YXRlLmkxOG5SZWdpc3RyeSkpLFA1KHZFLEdsLnN0YXRlLmkxOG5SZWdpc3RyeSl9c3Rh'@;
put 'dGljIGZpbmRLZXkobCl7Y29uc3QgYT1ZNS5rZXlzO3JldHVybiBPYmplY3Qua2V5cyhhKS5maW5kKGQ9PmRLKGFbZF0sbCkpfXN0YXRpYyBnZXQobCl7cmV0dXJuIGwmJlk1LmtleXNbbF18fHt9fXN0YXRpYyByZXNldCgpe0dsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh7fSx2RSl9c3RhdGlj'@;
put 'IGh5ZHJhdGUobCxhKXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiAkZ2UoYyxsLGEpe3JldHVybiBjLnJlcGxhY2UoL1wkXHsuKz9cfS9nLGQ9PmZ1bmN0aW9uIEZnZShjLGwsYT1gXCR7JHtjfX1gKXtyZXR1cm4gYy5zcGxpdCgiLiIpLnJlZHVjZSgoZCxoKT0+e3RyeXtjb25zdCBmPWRb'@;
put 'aF07c3dpdGNoKCEwKXtjYXNlIG51bGw9PT1mOmNhc2UhMT09PWY6Y2FzZSIiPT09ZjpjYXNlIDA9PT1mOnJldHVybiBmO2RlZmF1bHQ6cmV0dXJuIGZ8fGF9fWNhdGNoe3JldHVybiBhfX0sbCl9KGQuc3Vic3RyKDIsZC5sZW5ndGgtMykudHJpbSgpLGwsYSkpfShKU09OLnN0cmluZ2lmeShs'@;
put 'KSxhKSl9c3RhdGljIGxvY2FsaXplKGwpe0dsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh2RSxHbC5zdGF0ZS5pMThuUmVnaXN0cnksbCl9fXZhciBCOGU9Y0ZgOmhvc3R7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNywgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xv'@;
put 'YmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS13aWR0aDp2YXIoLS1pY29uLXdpZHRoKTstLWhlaWdodDp2YXIoLS1pY29uLXdpZHRoKTstLWN1cnNvcjpw'@;
put 'b2ludGVyOy0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwLCAjMmQ0MDQ4KSk7LS1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zLCBjYWxjKDEz'@;
put 'ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS1iYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy0tcGFkZGluZzowOy0tb3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUsIEhpZ2hsaWdodCBzb2xpZCAycHgpOy0tb3V0bGluZS1vZmZz'@;
put 'ZXQ6Y2FsYyh2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0LCAxcHgpICogLTEpO3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3V0bGluZTowIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dKXtwb2ludGVyLWV2ZW50'@;
put 'czppbml0aWFsO2N1cnNvcjp2YXIoLS1jdXJzb3IpIWltcG9ydGFudH06aG9zdChbc3RhdHVzPWFjdGl2ZV0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9OjpzbG90dGVkKFtzaGFwZT1jbG9z'@;
put 'ZV0pLDo6c2xvdHRlZChbc2hhcGU9aW5mby1jaXJjbGVdKSw6OnNsb3R0ZWQoW3NoYXBlPXRpbWVzXSksOmhvc3QoW3NoYXBlPWNsb3NlXSksOmhvc3QoW3NoYXBlPWluZm8tY2lyY2xlXSl7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCwgY2FsYygxOCAqIDFyZW0gLyB2'@;
put 'YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04LCBjYWxjKDE4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSl9Omhvc3QoOmhvdmVyKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh'@;
put 'Y3Rpb24tY29sb3ItaG92ZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDAsICMxYjJiMzIpKX06aG9zdCg6YWN0aXZlKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y'@;
put 'LWNvbnN0cnVjdGlvbi0xMDAwLCAjMWIyYjMyKSl9Omhvc3QoOmFjdGl2ZSkgLnByaXZhdGUtaG9zdHt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpLyAyKSl9Omhvc3Qo'@;
put 'W2Rpc2FibGVkXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDAsICNhZWI4YmMpKX0ucHJpdmF0ZS1ob3N0ey0taWNvbi1jb2xvcjp2YXIoLS1jb2xvcik7YmFj'@;
put 'a2dyb3VuZDp2YXIoLS1iYWNrZ3JvdW5kKTtwYWRkaW5nOnZhcigtLXBhZGRpbmcpO2NvbG9yOnZhcigtLWNvbG9yKTtmb250LXNpemU6dmFyKC0tZm9udC1zaXplKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOnZhcigt'@;
put 'LXdpZHRoKTttaW4taGVpZ2h0OnZhcigtLWhlaWdodCl9OjpzbG90dGVkKGNkcy1pY29uKSxjZHMtaWNvbnt3aWR0aDp2YXIoLS1pY29uLXdpZHRoKTtoZWlnaHQ6dmFyKC0taWNvbi1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmV9OjpzbG90dGVkKGNkcy1pY29uOm5vdChbc3RhdHVzXSkp'@;
put 'LGNkcy1pY29uey0tY29sb3I6dmFyKC0taWNvbi1jb2xvcil9Omhvc3QoW2Rpc2FibGVkXTphY3RpdmUpe3BvaW50ZXItZXZlbnRzOm5vbmUhaW1wb3J0YW50fS5wcml2YXRlLWhvc3Q6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKC0xKnZhcigtLXdpZHRo'@;
put 'KSAtIDEpO3RvcDpjYWxjKC0xKnZhcigtLWhlaWdodCkgLSAxKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXRvdWNoLXRhcmdldCxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi10b3VjaC10YXJnZXQsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW2Rpc2FibGVkXSkgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZTowIWltcG9ydGFudH06aG9zdCg6Zm9jdXMpIC5wcml2YXRlLWhvc3Q6OmFmdGVy'@;
put 'e291dGxpbmU6dmFyKC0tb3V0bGluZSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tb3V0bGluZS1vZmZzZXQpfUBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApezpob3N0KDpmb2N1cykgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3Vz'@;
put 'LXJpbmctY29sb3J9fWA7Y2xhc3MgVzUgZXh0ZW5kcyBzMntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pMThuPVk1LmtleXMuYWN0aW9ucyx0aGlzLmNkc0J1dHRvbkFjdGlvbj0hMH1yZW5kZXIoKXtyZXR1cm4gdkZgPGRpdiBjbGFzcz0icHJpdmF0ZS1ob3N0Ij48'@;
put 'c2xvdD48Y2RzLWljb24gLnNoYXBlPSIke3RoaXMuc2hhcGU/dGhpcy5zaGFwZToiZWxsaXBzaXMtdmVydGljYWwifSIgLnNpemU9IiR7dGhpcy5pY29uU2l6ZX0iID9zb2xpZD0iJHt0aGlzLnByZXNzZWR8fHRoaXMuZXhwYW5kZWR9IiBpbm5lci1vZmZzZXQ9IiR7MX0iPjwvY2RzLWljb24+'@;
put 'PC9zbG90PjwvZGl2PmB9dXBkYXRlZChsKXtzdXBlci51cGRhdGVkKGwpLHRoaXMuYXJpYUxhYmVsfHx0aGlzLnJlYWRvbmx5fHxINS53YXJuKCJBIGFyaWEtbGFiZWwgaXMgcmVxdWlyZWQgZm9yIGludGVyYWN0aXZlIGNkcy1idXR0b24tYWN0aW9uIHR5cGUiLHRoaXMpLGwuaGFzKCJyZWFk'@;
put 'b25seSIpJiYodGhpcy5hcmlhSGlkZGVuPXRoaXMucmVhZG9ubHkmJiF0aGlzLmhhc0F0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpPyJ0cnVlIjpudWxsKX19VzUuc3R5bGVzPVttSixCOGVdLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sVzUucHJvdG90eXBlLCJzaGFwZSIsdm9pZCAwKSxNdChba2wo'@;
put 'e3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sVzUucHJvdG90eXBlLCJhY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxXNS5wcm90b3R5cGUsImljb25TaXplIix2b2lkIDApLE10KFtmdW5jdGlvbiBIOGUoKXtyZXR1cm4oYyxsKT0+e2NvbnN0IGE9Yy5jb25uZWN0ZWRD'@;
put 'YWxsYmFjayxkPWMuZGlzY29ubmVjdGVkQ2FsbGJhY2s7Yy5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe2MuX19pMThuU3ViPUdsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZj0+eyJpMThuUmVnaXN0cnkiPT09Zi5rZXkmJnRoaXMucmVxdWVzdFVwZGF0ZShsKX0pLGEmJmEuYXBwbHko'@;
put 'dGhpcyl9LGMuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtjLl9faTE4blN1Yi51bnN1YnNjcmliZSgpLGQmJmQuYXBwbHkodGhpcyl9O2NvbnN0IGg9e2dldCgpe2NvbnN0IGY9UDUoWTUua2V5c1t0aGlzLl9faTE4bktleV0sdGhpcy5fX2kxOG58fHt9KTtyZXR1cm4gWTUuaHlk'@;
put 'cmF0ZShmLHRoaXMpfSxzZXQoZil7Y29uc3QgXz1mdW5jdGlvbiBOOGUoYyxsKXtpZihfcChjKSl7bGV0IGE9e307aWYobC5oYXNBdHRyaWJ1dGUoImNkcy1pMThuIikpe2NvbnN0IGQ9bC5nZXRBdHRyaWJ1dGUoImNkcy1pMThuIikrIiI7aWYoX3AoZCkpYT17fTtlbHNlIHRyeXthPUpTT04u'@;
put 'cGFyc2UoZCl9Y2F0Y2h7SDUud2FybigiQ2xhcml0eSBpMThuOiBJbnZhbGlkIEpTT04gcGFzc2VkIHRvIGNkcy1pMThuIiksYT17fX19cmV0dXJuIGF9cmV0dXJuIGN9KGYsdGhpcyksVD1mdW5jdGlvbiBWOGUoYyxsLGEsZCl7cmV0dXJuIF9wKGMpP2RLKGEsZCk/e3VwZGF0ZTohMX06e3Vw'@;
put 'ZGF0ZTohMCx2YWx1ZXM6YX06Yz09PWw/e3VwZGF0ZTohMSx2YWx1ZXM6e319Ont1cGRhdGU6ITAsa2V5OmMsdmFsdWVzOnt9fX0oWTUuZmluZEtleShfKXx8IiIsdGhpcy5fX2kxOG5LZXksXyx0aGlzLl9faTE4bik7dm9pZCAwIT09VC5rZXkmJih0aGlzLl9faTE4bktleT1ULmtleSsiIiks'@;
put 'dm9pZCAwIT09VC52YWx1ZXMmJih0aGlzLl9faTE4bj17Li4uVC52YWx1ZXN9KSwhMD09PVQudXBkYXRlJiZ0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLnJlcXVlc3RVcGRhdGUobCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdm9pZCAwIT09bD9mdW5jdGlvbihm'@;
put 'LF8sVCl7Y29uc3QgVz1PYmplY3QuZGVmaW5lUHJvcGVydHkoXyxULGYpO3JldHVybiBrbCh7dHlwZTpPYmplY3QsYXR0cmlidXRlOiJjZHMtaTE4biJ9KShXLFQpfShoLGMsbCk6ZnVuY3Rpb24oZixfKXtjb25zdCBUPXtraW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6'@;
put 'Xy5rZXksZGVzY3JpcHRvcjpmfTtyZXR1cm4ga2woe3R5cGU6T2JqZWN0fSkoVCl9KGgsYyl9fSgpXSxXNS5wcm90b3R5cGUsImkxOG4iLHZvaWQgMCksTXQoW2JKKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMCxhdHRyaWJ1dGU6ImNkcy1idXR0b24tYWN0aW9uIn0pXSxXNS5wcm90b3R5cGUs'@;
put 'ImNkc0J1dHRvbkFjdGlvbiIsdm9pZCAwKTtjbGFzcyBTSiBleHRlbmRzIFc1e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNoYXBlPSJjbG9zZSJ9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYXJpYUxhYmVsPXRoaXMu'@;
put 'YXJpYUxhYmVsP3RoaXMuYXJpYUxhYmVsOnRoaXMuaTE4bi5jbG9zZX19TXQoW2tsKHt0eXBlOlN0cmluZ30pXSxTSi5wcm90b3R5cGUsInNoYXBlIix2b2lkIDApLFZYKCJjZHMtaW50ZXJuYWwtY2xvc2UtYnV0dG9uIixTSiksVnMuYWRkSWNvbnMoSUspLFZzLmFkZEFsaWFzZXMoWyJ0aW1l'@;
put 'cyIsWyJjbG9zZSJdXSk7Y29uc3QgRW89WyIqIl07ZnVuY3Rpb24gejhlKGMsbCl7aWYoMSZjJiYoQnIoMCksTmUoMSksVXIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFU4ZShjLGwpe2lmKDEmYyYmKG1lKDAs'@;
put 'ImRpdiIsMTQpLFFlKDEsejhlLDIsMSwibmctY29udGFpbmVyIiwwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWQuQWNjb3JkaW9uU3RhdHVzLkVycm9yKX19ZnVuY3Rpb24gWjhlKGMsbCl7aWYoMSZjJiYoQnIo'@;
put 'MCksTmUoMSksVXIoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFk4ZShjLGwpe2lmKDEmYyYmKEJyKDApLE5lKDEpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5'@;
put 'cy5zdWNjZXNzKX19ZnVuY3Rpb24gVzhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNSkseHQoIkB0b2dnbGUuZG9uZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRv'@;
put 'bmUoaCkpfSksbWUoMSwiZGl2IiwxNiksa3IoMiwyKSx5ZSgpKCl9MiZjJiZSZSgiQHRvZ2dsZSIsdm9pZCAwKX1mdW5jdGlvbiBHOGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxRZSgxLFU4ZSwyLDEsImRpdiIsMSksbWUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImJ1dHRv'@;
put 'biIsNCw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xlUGFuZWwoKSl9KSxiYSg2LCJhc3luYyIpLG1lKDcsInNwYW4iLDYpLFFlKDgsWjhlLDIsMSwibmctY29udGFpbmVyIiwwKSxRZSg5LFk4ZSwyLDEsIm5nLWNvbnRhaW5lciIsMCkseWUoKSxt'@;
put 'ZSgxMCwic3BhbiIsNykscXQoMTEsImNkcy1pY29uIiw4KSgxMiwic3BhbiIsOSkoMTMsImNkcy1pY29uIiwxMCkoMTQsImNkcy1pY29uIiwxMSkseWUoKSxrcigxNSksa3IoMTYsMSkseWUoKSgpLG1lKDE3LCJkaXYiLDEyKSxRZSgxOCxXOGUsMywxLCJkaXYiLDEzKSx5ZSgpKCksVXIoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO2xldCBoO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cyE9PWQuQWNjb3JkaW9uU3RhdHVzLkluYWN0aXZlKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKSksQ2UoMiksZHIoImNsci1hY2NvcmRpb24t'@;
put 'aGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShoPVVsKDYsMTYsZC5hY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzKSk/bnVsbDpoLmxlbmd0aCl8fGQuYWNjb3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoKSxSZSgiaWQiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlk'@;
put 'KSkoImRpc2FibGVkIixkLmlzQWNjb3JkaW9uJiZhLmRpc2FibGVkKSxUcigiYXJpYS1kaXNhYmxlZCIsIWQuaXNBY2NvcmRpb24mJmEuZGlzYWJsZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldEFjY29yZGlvbkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSgiYXJpYS1leHBhbmRlZCIsYS5vcGVu'@;
put 'KSxDZSg0KSxSZSgibmdJZiIsYS5zdGF0dXM9PT1kLkFjY29yZGlvblN0YXR1cy5FcnJvciksQ2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzPT09ZC5BY2NvcmRpb25TdGF0dXMuQ29tcGxldGUpLENlKDgpLFJlKCJAc2tpcEluaXRpYWxSZW5kZXIiLHZvaWQgMCkoImlkIixkLmdldEFjY29yZGlv'@;
put 'bkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSxUcigiYXJpYS1oaWRkZW4iLCFhLm9wZW4pKCJhcmlhLWxhYmVsbGVkYnkiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlkKSksQ2UoMSksUmUoIm5nSWYiLGEub3Blbil9fWNvbnN0IE1KPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxl'@;
put 'Il0sWyJjbHItc3RlcC10aXRsZSJdXSxbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSwiKiJdLHhKPVsiY2xyLWFjY29yZGlvbi10aXRsZSwgY2xyLXN0ZXAtdGl0bGUiLCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLCBjbHItc3RlcC1k'@;
put 'ZXNjcmlwdGlvbiIsIioiXSxnN2U9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gbTdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLHF0KDEsInNwYW4iLDIpLHllKCkpLDImYyYmKENlKDEpLFJlKCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gdjdlKGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PVZuKCk7bWUoMCwic3BhbiIpKDEsInNwYW4iLDMpLHh0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLmxvYWRpbmdTdGF0ZUNoYW5nZShoLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0pLHllKCkoKX0yJmMmJihDZSgxKSxSZSgiQHZh'@;
put 'bGlkYXRlZCIsdm9pZCAwKSl9ZnVuY3Rpb24gXzdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLGtyKDEpLHllKCkpLDImYyYmUmUoIkBkZWZhdWx0QnV0dG9uIix2b2lkIDApfWZ1bmN0aW9uIGI3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1jb25zdCB5N2U9W1tbIiIsImNsckNoZWNrYm94'@;
put 'IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0sW1sibGFiZWwiXV1dLHc3ZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJlbCJdO2Z1bmN0aW9uIEM3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1mdW5jdGlvbiBTN2UoYyxsKXsxJmMmJmtyKDAsMixbIipuZ0lmIiwic2hvd0hl'@;
put 'bHBlciJdKX1mdW5jdGlvbiBNN2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiB4N2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBFN2UoYyxsKXsxJmMmJmtyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gazdlKGMsbCl7'@;
put 'MSZjJiZrcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBBN2U9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1j'@;
put 'b250cm9sLXN1Y2Nlc3MiXV1dLFQ3ZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sRDdlPVsiY2xyS2V5Rm9jdXMiLCIiXTtmdW5j'@;
put 'dGlvbiBQN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gRjdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gSDdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gTjdlKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxw'@;
put 'ZXIiXSl9ZnVuY3Rpb24gVjdlKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEI3ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgajdlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJJbnB1dCIsIiJdXSxbWyJjbHIt'@;
put 'Y29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sejdlPVsibGFiZWwiLCJbY2xySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rp'@;
put 'b24gVTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtUcigiYXJpYS1sYWJlbCIsYS5kYXkpLENlKDEpLGdyKCIgIixhLm5hcnJvdywiICIpfX1mdW5jdGlvbiBaN2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNykscXQo'@;
put 'MSwiY2xyLWRheSIsOCkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJjbHJEYXlWaWV3IixhKX19ZnVuY3Rpb24gWTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDUpLFFlKDEsWjdlLDIsMSwidGQiLDYpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtD'@;
put 'ZSgxKSxSZSgibmdGb3JPZiIsYSl9fWZ1bmN0aW9uIFc3ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKCkuY2hhbmdlTW9udGgoZikpfSksTmUoMSkseWUoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoKTtkcigiaXMtc2VsZWN0ZWQiLGQ9PT1oLmNhbGVuZGFyTW9udGhJbmRleCksVHIoInRhYmluZGV4IixoLmdldFRhYkluZGV4KGQpKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiBHN2UoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jaGFuZ2VZZWFyKGYpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtkcigiaXMtc2Vs'@;
put 'ZWN0ZWQiLGE9PT1kLmNhbGVuZGFyWWVhciksVHIoInRhYmluZGV4IixkLmdldFRhYkluZGV4KGEpKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiAkN2UoYyxsKXsxJmMmJnF0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0aW9uIHE3ZShjLGwpezEmYyYmcXQoMCwiY2xyLXllYXJw'@;
put 'aWNrZXIiKX1mdW5jdGlvbiBLN2UoYyxsKXsxJmMmJnF0KDAsImNsci1kYXlwaWNrZXIiKX1jb25zdCBYN2U9WyJhY3Rpb25CdXR0b24iXTtmdW5jdGlvbiBKN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gUTdlKGMsbCl7MSZjJiYobWUoMCwiYnV0dG9uIiw4LDkpLHF0KDIs'@;
put 'ImNkcy1pY29uIiwxMCkseWUoKSksMiZjJiZSZSgiZGlzYWJsZWQiLFZlKCkuaXNJbnB1dERhdGVEaXNhYmxlZCl9ZnVuY3Rpb24gZTllKGMsbCl7MSZjJiZxdCgwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDExKX1mdW5jdGlvbiB0OWUoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29u'@;
put 'IiwxMil9ZnVuY3Rpb24gbjllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTMpfWZ1bmN0aW9uIHI5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGk5ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlv'@;
put 'biBvOWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHM5ZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0s'@;
put 'YTllPVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBsOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9Y29uc3QgYzllPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJl'@;
put 'bCJdXV0sdTllPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gZDllKGMsbCl7MSZjJiZxdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGg5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGY5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDUp'@;
put 'fWZ1bmN0aW9uIHA5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIGc5ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBtOWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHY5ZT1bW1si'@;
put 'bGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLF85ZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJj'@;
put 'bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBiOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24geTllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gdzllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu'@;
put 'Y3Rpb24gQzllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gUzllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIE05ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg'@;
put 'eDllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJTZWxlY3QiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEU5ZT1bImxhYmVsIiwiW2NsclNlbGVjdF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJj'@;
put 'bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBrOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gQTllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gVDllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu'@;
put 'Y3Rpb24gRDllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gSTllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEw5ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg'@;
put 'UjllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sTzllPVsibGFiZWwiLCJbY2xyVGV4dGFyZWFdIiwiY2xyLWNvbnRyb2wtaGVscGVy'@;
put 'IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sUDllPVsiYW5jaG9yIl07ZnVuY3Rpb24gRjllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImJ1dHRvbiIsNikscXQoMywiY2RzLWljb24iLDcpLHllKCkoKSxrcig0KSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9VmUoKTtSZSgiaWQiLGEucG9wb3ZlcklkKSxUcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJEaWFsb2dBcmlhTGFiZWwpLENlKDMpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1jb25zdCBIOWU9WyJp'@;
put 'bnB1dF9sb3ciXSxOOWU9WyJpbnB1dCJdLFY5ZT1bImNvbHVtblBvcnRhbCJdO2Z1bmN0aW9uIEI5ZShjLGwpezEmYyYma3IoMCl9Y29uc3QgajllPVsicmVzaXplVHJhY2tlciJdLHo5ZT1bImNvbHVtbkhhbmRsZSJdO2Z1bmN0aW9uIFU5ZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gWjll'@;
put 'KGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTApLDImYyYmVHIoImRpcmVjdGlvbiIsVmUoMikuc29ydERpcmVjdGlvbil9ZnVuY3Rpb24gWTllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkuc29ydCgpKX0pLFFlKDEsVTllLDEsMCwibmctY29udGFpbmVyIiw4KSxRZSgyLFo5ZSwxLDEsImNkcy1pY29uIiw5KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9JGkoNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLENlKDEpLFJlKCJuZ0lmIixhLnNvcnREaXJl'@;
put 'Y3Rpb24pfX1mdW5jdGlvbiBXOWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTEpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDIm'@;
put 'Yyl7Y29uc3QgYT1WZSgpO1JlKCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsYS5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcikoImNsckRnU3RyaW5nRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIEc5ZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO21lKDAsImNsci1kZy1udW1lcmljLWZpbHRlciIsMTIpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO1JlKCJjbHJGaWx0ZXJNYXhQbGFj'@;
put 'ZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1'@;
put 'bmN0aW9uICQ5ZShjLGwpezEmYyYma3IoMCwxKX1mdW5jdGlvbiBxOWUoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIEs5ZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDEzKSxRZSgxLHE5ZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkseWUoKSksMiZjKXtWZSgpO2NvbnN0IGE9JGkoNik7Q2Uo'@;
put 'MSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiBYOWUoYyxsKXsxJmMmJnF0KDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIil9Y29uc3QgSjllPVtbWyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1d'@;
put 'LCIqIl0sUTllPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBldmUoYyxsKXsxJmMmJnF0KDAsImRpdiIsNCl9ZnVuY3Rpb24gdHZlKGMsbCl7MSZjJiZrcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdy'@;
put 'aWQiXSl9ZnVuY3Rpb24gbnZlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwiYnV0dG9uIiwxKSxxdCgyLCJjZHMtaWNvbiIsMikseWUoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxUcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBydmU9WyJjZWxs'@;
put 'UG9ydGFsIl07ZnVuY3Rpb24gaXZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBvdmU9WyJyb3dQb3J0YWwiXTtmdW5jdGlvbiBzdmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IGF2ZT1bImRldGFpbEJ1dHRvbiJdLGx2ZT1bInN0aWNreUNlbGxzIl0sY3ZlPVsic2Nyb2xsYWJsZUNlbGxzIl0sdXZl'@;
put 'PVsiY2FsY3VsYXRlZENlbGxzIl07ZnVuY3Rpb24gZHZlKGMsbCl7fWZ1bmN0aW9uIGh2ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksUWUoMSxkdmUsMCwwLCJuZy10ZW1wbGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLGQ9JGkoNik7'@;
put 'UmUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksQ2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBmdmUoYyxsKXt9ZnVuY3Rpb24gcHZlKGMsbCl7MSZjJiZRZSgwLGZ2ZSwwLDAsIm5nLXRlbXBsYXRlIiw4KSwyJmMmJihWZSgyKSxS'@;
put 'ZSgibmdUZW1wbGF0ZU91dGxldCIsJGkoNikpKX1mdW5jdGlvbiBndmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDYpLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rpb24o'@;
put 'aCl7QnQoYSk7Y29uc3QgZj1WZSgpO3JldHVybiBqdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxRZSgxLGh2ZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMSksUWUoMixwdmUsMSwxLG51bGwsMikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gbXZlKGMsbCl7fWZ1bmN0aW9uIHZ2ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksUWUoMSxtdmUsMCwwLCJuZy10ZW1w'@;
put 'bGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCksZD0kaSg2KTtSZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIF92ZShjLGwpe31mdW5jdGlvbiBidmUoYyxsKXsxJmMmJlFl'@;
put 'KDAsX3ZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKFZlKCksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLCRpKDYpKSl9ZnVuY3Rpb24geXZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBFSj1mdW5jdGlvbihjKXtyZXR1cm57ImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiOmN9fTtmdW5jdGlv'@;
put 'biB3dmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE5KSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0IiwyMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS50b2dnbGUoaCkpfSkseWUoKSxtZSgzLCJs'@;
put 'YWJlbCIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLG1lKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtSZSgibmdDbGFzcyIsSjIoNyxFSiwhYS5jbHJEZ1NlbGVjdGFi'@;
put 'bGUpKSxDZSgyKSxSZSgibmdNb2RlbCIsYS5zZWxlY3RlZCkoImlkIixhLmNoZWNrYm94SWQpKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxUcigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxDZSgxKSxSZSgiZm9yIixhLmNoZWNrYm94SWQp'@;
put 'LENlKDIpLG9yKGEuY2xyRGdSb3dBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIEN2ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTkpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDIzKSx4dCgibmdNb2RlbENo'@;
put 'YW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWgpfSkseWUoKSxtZSgzLCJsYWJlbCIsMjQpKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtSZSgibmdDbGFzcyIsSjIoMTAsRUos'@;
put 'IWEuY2xyRGdTZWxlY3RhYmxlKSksQ2UoMiksUmUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlKSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmds'@;
put 'ZT09PWEuaXRlbSkoImRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLFRyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLENlKDEpLFJlKCJmb3IiLGEucmFkaW9JZCksQ2UoMiksb3IoYS5jbHJEZ1Jvd0FyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdz'@;
put 'LmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gU3ZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyNSksa3IoMSwyKSx5ZSgpKX1mdW5jdGlvbiBNdmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZl'@;
put 'KDQpLnRvZ2dsZUV4cGFuZCgpKX0pLHF0KDEsImNkcy1pY29uIiwzMCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoNCk7VHIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5j'@;
put 'bHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtY29udHJvbHMiLGEuZXhwYW5kYWJsZUlkKSxDZSgxKSxUcigiZGlyZWN0aW9uIixhLmV4cGFuZC5leHBhbmRlZD8iZG93biI6InJpZ2h0IikoInRpdGxlIixhLmV4cGFuZC5leHBhbmRlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5jb2xsYXBzZTph'@;
put 'LmNvbW1vblN0cmluZ3Mua2V5cy5leHBhbmQpfX1mdW5jdGlvbiB4dmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItc3Bpbm5lciIsMzEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gRXZlKGMs'@;
put 'bCl7aWYoMSZjJiYoQnIoMCksUWUoMSxNdmUsMiw1LCJidXR0b24iLDI3KSxRZSgyLHh2ZSwyLDEsImNsci1zcGlubmVyIiwyOCksVXIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIiwhYS5leHBhbmQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuZXhwYW5kLmxvYWRp'@;
put 'bmcpfX1mdW5jdGlvbiBrdmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDI2KSxRZSgxLEV2ZSwzLDIsIm5nLWNvbnRhaW5lciIsMikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gQXZlKGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzMikoMSwiYnV0dG9uIiwzMywzNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMiksZj1WZSgyKTtyZXR1cm4ganQoZi5kZXRhaWxTZXJ2aWNlLnRvZ2dsZShmLml0ZW0saCkpfSkscXQoMywiY2RzLWljb24iLDM1KSx5'@;
put 'ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGRyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFRyKCJhcmlhLWxhYmVsIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0Rl'@;
put 'dGFpbE9wZW5MYWJlbCkoImFyaWEtZXhwYW5kZWQiLGEuZGV0YWlsU2VydmljZS5pc09wZW4pKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLENlKDIpLFRyKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT8ibGVmdCI6InJpZ2h0IikoInRp'@;
put 'dGxlIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uIFR2ZShjLGwpe31mdW5jdGlvbiBEdmUoYyxsKXsxJmMmJlFlKDAsVHZlLDAsMCwibmctdGVtcGxhdGUiLDgp'@;
put 'LDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWZ1bmN0aW9uIEl2ZShjLGwpe31mdW5jdGlvbiBMdmUoYyxsKXsxJmMmJlFlKDAsSXZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWNvbnN0IFJ2'@;
put 'ZT1mdW5jdGlvbihjKXtyZXR1cm57ImlzLXJlcGxhY2VkIjpjfX07ZnVuY3Rpb24gT3ZlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJkaXYiLDEwKSxCcigyLG51bGwsMTEpLFFlKDQsd3ZlLDYsOSwiZGl2IiwxMiksUWUoNSxDdmUsNiwxMiwiZGl2IiwxMiksUWUoNixTdmUsMiww'@;
put 'LCJkaXYiLDEzKSxRZSg3LGt2ZSwyLDEsImRpdiIsMTQpLFFlKDgsQXZlLDQsNywiZGl2IiwxNSksVXIoKSx5ZSgpLG1lKDksImRpdiIsMTYpKDEwLCJkaXYiLDE3KSxrcigxMSwxKSxqYSgxMixudWxsLDE4KSx5ZSgpLFFlKDE0LER2ZSwxLDEsbnVsbCwyKSxRZSgxNSxMdmUsMSwxLG51bGws'@;
put 'MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFJlKCJpZCIsYS5pZCksQ2UoNCksUmUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9U'@;
put 'WVBFLk11bHRpKSxDZSgxKSxSZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxDZSgxKSxSZSgibmdJZiIsYS5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLENlKDEpLFJlKCJuZ0lmIixhLmdsb2JhbEV4cGFuZGFi'@;
put 'bGUuaGFzRXhwYW5kYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGEuZGV0YWlsU2VydmljZS5lbmFibGVkKSxDZSgxKSxSZSgibmdDbGFzcyIsSjIoMTEsUnZlLGEucmVwbGFjZWQmJmEuZXhwYW5kZWQpKSxDZSg1KSxSZSgibmdJZiIsYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLENl'@;
put 'KDEpLFJlKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpfX1jb25zdCBQdmU9W1tbImNsci1kZy1yb3ctZGV0YWlsIl1dLFtbImNsci1kZy1jZWxsIl1dLFtbImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXV1dLEZ2ZT1bImNsci1kZy1yb3ctZGV0YWlsIiwiY2xyLWRnLWNl'@;
put 'bGwiLCJjbHItZGctYWN0aW9uLW92ZXJmbG93Il0sSHZlPVsiZGF0YWdyaWRUYWJsZSJdLE52ZT1bInNjcm9sbGFibGVDb2x1bW5zIl0sVnZlPVsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiXSxCdmU9WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiXSxqdmU9WyJkaXNwbGF5ZWRSb3dz'@;
put 'Il0senZlPVsiY2FsY3VsYXRpb25Sb3dzIl07ZnVuY3Rpb24gVXZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwyNCkseHQoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKTtyZXR1cm4gZi5hbGxTZWxlY3RlZD0hZi5hbGxTZWxlY3Rl'@;
put 'ZCxqdChoLnByZXZlbnREZWZhdWx0KCkpfSksbWUoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDI2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYWxsU2VsZWN0ZWQ9aCl9KSx5ZSgpLG1lKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjgpLE5lKDUp'@;
put 'LHllKCkoKSgpLHF0KDYsImRpdiIsMjkpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoImlkIixhLnNlbGVjdEFsbElkKSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCksQ2UoMSksUmUoImZv'@;
put 'ciIsYS5zZWxlY3RBbGxJZCksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gWnZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMCkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jbHJEZ1NpbmdsZVNlbGVjdGlv'@;
put 'bkFyaWFMYWJlbCl9ZnVuY3Rpb24gWXZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMSkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwpfWZ1bmN0aW9uIFd2ZShjLGwpezEmYyYmKG1lKDAsImRpdiIs'@;
put 'MzIpLHF0KDEsImRpdiIsMjkpLHllKCkpLDImYyYmVHIoImFyaWEtbGFiZWwiLFZlKCkuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCl9ZnVuY3Rpb24gR3ZlKGMsbCl7MSZjJiZxdCgwLCJjbHItZGctcGxhY2Vob2xkZXIiKX1mdW5jdGlvbiAkdmUoYyxsKXsxJmMmJihtZSgwLCJkaXYi'@;
put 'LDMzKSgxLCJjbHItc3Bpbm5lciIsMzQpLE5lKDIsIkxvYWRpbmciKSx5ZSgpKCkpfWNvbnN0IHF2ZT1bW1siY2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRhaWwiLCIiXSxbImNsci1kZy1kZXRh'@;
put 'aWwiXV1dLEt2ZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZvb3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdLEp2ZT1bImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gUXZlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwiaDIiKSxO'@;
put 'ZSgyKSx5ZSgpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyl9fWZ1bmN0aW9uIGVfZShjLGwpe31mdW5jdGlvbiB0X2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13'@;
put 'cmFwcGVyIikoMiwiaW5wdXQiLDE0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnRvZ2dsZUNvbHVtblN0YXRlKF8sIWgpKX0pLHllKCksbWUoMywibGFiZWwiKSxRZSg0LGVfZSwwLDAsIm5nLXRlbXBsYXRl'@;
put 'IiwxNSkseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMik7Q2UoMiksUmUoImRpc2FibGVkIixkLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLENlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxl'@;
put 'VGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBuX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDE2KSx4dCgiY2xyQWxsU2VsZWN0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmFsbENvbHVtbnNTZWxlY3RlZCgp'@;
put 'KX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKX19ZnVuY3Rpb24gcl9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyKSgxLCJkaXYiLDMpKDIsImRpdiIsNCw1KSxOZSg0KSx5ZSgpLFFl'@;
put 'KDUsUXZlLDMsMSwibmctY29udGFpbmVyIiw2KSxrcig2KSxtZSg3LCJidXR0b24iLDcpLHF0KDgsImNkcy1pY29uIiw4KSxtZSg5LCJzcGFuIiw5KSxOZSgxMCkseWUoKSgpKCksbWUoMTEsInVsIiwxMCksUWUoMTIsdF9lLDUsMywibGkiLDExKSx5ZSgpLG1lKDEzLCJkaXYiLDEyKSxrcigx'@;
put 'NCwxKSxRZSgxNSxuX2UsMiwxLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDEzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO1JlKCJpZCIsYS5wb3BvdmVySWQpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiks'@;
put 'Q2UoNCksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuY3VzdG9tVG9nZ2xlVGl0bGUpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksQ2UoMSksVHIoInRpdGxlIixhLmNvbW1vblN0'@;
put 'cmluZ3Mua2V5cy5jbG9zZSksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbiksQ2UoMyksUmUoIm5nSWYiLCFhLmN1c3RvbVRvZ2dsZUJ1dHRvbil9'@;
put 'fWNvbnN0IGlfZT1bW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dXSxvX2U9WyJjbHItZGctY29sdW1uLXRvZ2dsZS10aXRsZSIsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdO2Z1bmN0aW9uIGxfZShjLGwpe2lm'@;
put 'KDEmYyYmKEJyKDApLG1lKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLHF0KDMsImlucHV0IiwzKSxtZSg0LCJsYWJlbCIpLE5lKDUpLHllKCksbWUoNiwic3BhbiIsNCksTmUoNykseWUoKSgpKCksVXIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoNSksb3IoYS5zZWxl'@;
put 'Y3Rpb24uY3VycmVudC5sZW5ndGgpLENlKDIpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIGNfZShjLGwpezEmYyYmcXQoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiB1X2UoYyxsKXtpZigxJmMmJihCcigwKSxrcigxLDEpLFFlKDIs'@;
put 'Y19lLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLG1lKDMsImRpdiIsNSksa3IoNCwyKSx5ZSgpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyYmIWEudG9nZ2xlKX19Y29uc3QgZF9lPVtbWyJjbHItZGctcGFnaW5hdGlv'@;
put 'biJdXSxbWyJjbHItZGctY29sdW1uLXRvZ2dsZSJdXSwiKiJdLGhfZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLCIqIl07ZnVuY3Rpb24gZl9lKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w'@;
put 'bGljaXQ7UmUoIm5nVmFsdWUiLGEpLENlKDEpLG9yKGEpfX1jb25zdCBwX2U9WyJjdXJyZW50UGFnZUlucHV0Il07ZnVuY3Rpb24gZ19lKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0KSxrcigxLDEpLHllKCkpfWZ1bmN0aW9uIG1fZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImlu'@;
put 'cHV0IiwxNywxOCkseHQoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS51cGRhdGVDdXJyZW50UGFnZShoKSl9KSgiYmx1ciIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnVwZGF0ZUN1cnJlbnRQYWdlKGgpKX0pLHllKCl9aWYoMiZj'@;
put 'KXtjb25zdCBhPVZlKDMpO1JlKCJzaXplIixhLnBhZ2UubGFzdC50b1N0cmluZygpLmxlbmd0aCkoInZhbHVlIixhLnBhZ2UuY3VycmVudCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmN1cnJlbnRQYWdlKX19ZnVuY3Rpb24gdl9lKGMsbCl7aWYoMSZjJiYobWUoMCwi'@;
put 'c3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxvcihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIF9fZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNSkoMSwiYnV0dG9uIiw2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEp'@;
put 'LGp0KFZlKDIpLnBhZ2UuY3VycmVudD0xKX0pLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkscXQoNCwiY2RzLWljb24iLDgpLHllKCksbWUoNSwiYnV0dG9uIiw5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5w'@;
put 'YWdlLmN1cnJlbnQtMSl9KSxtZSg2LCJzcGFuIiw3KSxOZSg3KSx5ZSgpLHF0KDgsImNkcy1pY29uIiwxMCkseWUoKSxRZSg5LG1fZSwyLDMsImlucHV0IiwxMSksUWUoMTAsdl9lLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMTIsRWMpLE5lKDEyLCIgXHhhMC9ceGEwIiksbWUoMTMsInNwYW4i'@;
put 'KSxOZSgxNCkseWUoKSxtZSgxNSwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGp0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksbWUoMTYsInNwYW4iLDcpLE5lKDE3KSx5ZSgpLHF0KDE4LCJjZHMtaWNvbiIs'@;
put 'MTQpLHllKCksbWUoMTksImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UubGFzdCl9KSxtZSgyMCwic3BhbiIsNyksTmUoMjEpLHllKCkscXQoMjIsImNkcy1pY29uIiwxNikseWUoKSgp'@;
put 'fWlmKDImYyl7Y29uc3QgYT0kaSgxMSksZD1WZSgyKTtDZSgxKSxSZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxDZSgyKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLENlKDIp'@;
put 'LFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksQ2UoMiksUmUoIm5nSWYiLCFkLmRpc2FibGVDdXJyZW50UGFn'@;
put 'ZUlucHV0KSgibmdJZkVsc2UiLGEpLENlKDQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxDZSgxKSxvcihkLnBhZ2UubGFzdCksQ2UoMSksUmUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudD49ZC5wYWdlLmxhc3QpLFRyKCJhcmlhLWxhYmVsIixk'@;
put 'LmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksQ2UoMiksb3IoZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLENlKDIpLFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2Up'@;
put 'LENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24gYl9lKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxnX2UsMiwwLCJkaXYiLDEpLG1lKDIsImRpdiIsMiksa3IoMykseWUoKSxRZSg0LF9fZSwyMywxNiwiZGl2IiwzKSxVcigpKSwyJmMpe2NvbnN0IGE9'@;
put 'VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLENlKDMpLFJlKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24geV9lKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwiZGl2IiwxOSksTmUoMikseWUoKSxtZSgzLCJkaXYiLDUpKDQsImJ1'@;
put 'dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxtZSg1LCJzcGFuIiw3KSxOZSg2KSx5ZSgpLHF0KDcsImNkcy1pY29uIiwxMCkseWUoKSxtZSg4LCJzcGFuIiksTmUoOSks'@;
put 'eWUoKSxtZSgxMCwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxtZSgxMSwic3BhbiIsNyksTmUoMTIpLHllKCkscXQoMTMsImNkcy1pY29uIiwxNCkseWUoKSgp'@;
put 'LFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksYjAoIiAiLGEucGFnZS5maXJzdEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSxDZSgyKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIs'@;
put 'YS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDMpLG9yKGEucGFnZS5jdXJyZW50KSxDZSgxKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksVHIoImFyaWEtbGFi'@;
put 'ZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IHdfZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1dLENfZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gU19lKGMsbCl7MSZj'@;
put 'JiZxdCgwLCJjZHMtaWNvbiIsNyksMiZjJiZUcigiZGlyZWN0aW9uIixWZSgpLmNhcmV0RGlyZWN0aW9uKX1mdW5jdGlvbiBNX2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5z'@;
put 'dGFja1ZpZXdDaGFuZ2VkKX19ZnVuY3Rpb24geF9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSxrcigxLDIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0h1KCJoZWlnaHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLFRyKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFi'@;
put 'ZWxsZWRieSIsYS5sYWJlbGxlZEJ5SWQpfX1jb25zdCBFX2U9W1tbImNsci1zdGFjay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxrX2U9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl0sQV9lPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0s'@;
put 'VF9lPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiBIX2UoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIE5fZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsSF9lLDEsMCwibmctY29udGFpbmVyIiwyKSxVcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgyKTtDZSgx'@;
put 'KSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGQuZ2V0Q29udGV4dChhKSl9fWZ1bmN0aW9uIFZfZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsTl9lLDIsMiwibmctY29udGFpbmVy'@;
put 'IiwxKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3QgQl9lPVsiY29udGVudENvbnRhaW5lciJdO2Z1bmN0aW9uIGpfZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1WbigpO21lKDAsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxxdCgxLCJjZHMtaWNv'@;
put 'biIsMTApLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksVHIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rpb24gel9lKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxMSkscXQoMSwic3BhbiIsMTIpLHllKCkpfWZ1bmN0aW9u'@;
put 'IFVfZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTMpKDEsImlucHV0IiwxNCkseHQoImNoYW5nZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSko'@;
put 'ImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSx5ZSgpLHF0KDIsImxhYmVsIiwxNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxYMigiaWQiLCIiLGEubm9kZUlkLCItY2hlY2siKSxSZSgiY2hlY2tlZCIsYS5fbW9kZWwu'@;
put 'c2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuSU5ERVRFUk1JTkFURSksQ2UoMSksWDIoImZvciIsIiIsYS5ub2RlSWQsIi1jaGVjayIpfX1mdW5jdGlvbiBaX2UoYyxsKXsxJmMmJiht'@;
put 'ZSgwLCJzcGFuIiksTmUoMSwiIHNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gWV9lKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiB1bnNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gV19lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNiksUWUoMSxaX2UsMiwwLCJzcGFuIiwxNyks'@;
put 'UWUoMixZX2UsMiwwLCJzcGFuIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuYXJpYVNlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuYXJpYVNlbGVjdGVkKX19Y29uc3QgR19lPVsiKiIsW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFu'@;
put 'ZGVkIiwiIl1dXSwkX2U9WyIqIiwiY2xyLXRyZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSJdO2Z1bmN0aW9uIHFfZShjLGwpezEmYyYmcXQoMCwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMSksMiZjJiZSZSgiY2hpbGRyZW4iLFZlKCkuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi5yb290'@;
put 'KX1mdW5jdGlvbiBLX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2xvc2UoKSl9KSxxdCgxLCJjZHMtaWNvbiIsNSkseWUoKX0yJmMmJlRyKCJhcmlhLWxhYmVsIixWZSgyKS5j'@;
put 'bHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVuY3Rpb24gWF9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGtyKDIpLHllKCksUWUoMyxLX2UsMiwxLCJidXR0b24iLDMpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJhbGVydC1oaWRkZW4iLGEuaGlkZGVuKSgi'@;
put 'YWxlcnQtc20iLGEuaXNTbWFsbCkoImFsZXJ0LWFwcC1sZXZlbCIsYS5pc0FwcExldmVsKSxSZSgibmdDbGFzcyIsYS5hbGVydENsYXNzKSxDZSgzKSxSZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9uIEpfZShjLGwpezEmYyYmcXQoMCwiY2xyLWFsZXJ0cy1wYWdlciIsMSksMiZjJiZS'@;
put 'ZSgiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLFZlKCkuY3VycmVudEFsZXJ0SW5kZXgpfWNvbnN0IFFfZT1bW1siY2xyLWFsZXJ0Il1dXSxlYmU9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiByYmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IGliZT1bInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiXTtmdW5j'@;
put 'dGlvbiBvYmUoYyxsKXtpZigxJmMmJihtZSgwLCJzZWN0aW9uIiwxKSxrcigxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiYWN0aXZlIixhLmFjdGl2ZSksUmUoImlkIixhLnRhYkNvbnRlbnRJZCkoImhpZGRlbiIsIWEuYWN0aXZlKSxUcigiYXJpYS1sYWJlbGxlZGJ5IixhLmFyaWFM'@;
put 'YWJlbGxlZEJ5KSgiYXJpYS1oaWRkZW4iLCFhLmFjdGl2ZSl9fWNvbnN0IHNiZT1bInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIl07ZnVuY3Rpb24gYWJlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwibGkiLDQpLGphKDIsNSkseWUoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGlj'@;
put 'aXQ7Q2UoMiksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfX1mdW5jdGlvbiBsYmUoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLGFiZSwzLDEsIm5nLWNvbnRhaW5lciIsMiksVXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUo'@;
put 'KTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIGNiZShjLGwpezEmYyYmamEoMCw1KSwyJmMmJlJlKCJuZ1RlbXBsYXRlT3V0bGV0IixWZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rp'@;
put 'b24gdWJlKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxjYmUsMSwxLCJuZy1jb250YWluZXIiLDEzKSxVcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gZGJlKGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMikseHQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLGZmKSgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEp'@;
put 'LFZlKCk7Y29uc3QgZj0kaSg0KTtyZXR1cm4ganQoVmUoKS5jbG9zZU9uT3V0c2lkZUNsaWNrKGgsZikpfSwhMSxmZikoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLFFlKDEsdWJlLDIsMSwibmctY29udGFpbmVyIiwx'@;
put 'KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJMaW5rRGlyZWN0aXZlcyl9fWZ1bmN0aW9uIGhiZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImRpdiIsNikoMiwibGkiLDcpKDMsImJ1dHRvbiIsOCw5KSx4dCgibW91c2Vk'@;
put 'b3duIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLl9tb3VzZWRvd249ITApfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9wZW5PdmVyZmxvd09uRm9jdXMoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xl'@;
put 'T3ZlcmZsb3dPbkNsaWNrKCkpfSkscXQoNSwiY2RzLWljb24iLDEwKSx5ZSgpKCksUWUoNixkYmUsMiwxLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDExKSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksZHIoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxDZSgy'@;
put 'KSxkcigiYWN0aXZlIixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cpKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksVHIoInRhYmluZGV4IixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cmJiFhLnRvZ2dsZVNlcnZpY2Uub3Blbj8wOi0xKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUp'@;
put 'LENlKDIpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMubW9yZSksQ2UoMSksUmUoIm5nSWYiLGEudG9nZ2xlU2VydmljZS5vcGVuKX19ZnVuY3Rpb24gZmJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xlQnlCdXR0b24oKSl9KSxxdCgxLCJjZHMtaWNvbiIsNCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtkcigib24tY29sbGFwc2UiLGEuY29sbGFwc2VkKSxUcigiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhwYW5kZWQpKCJhcmlhLWxhYmVsIixhLmNv'@;
put 'bW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksQ2UoMSksVHIoImRpcmVjdGlvbiIsYS5jb2xsYXBzZWQ/InJpZ2h0IjoibGVmdCIpKCJ0aXRsZSIsYS5jb2xsYXBzZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kOmEuY29tbW9uU3RyaW5ncy5rZXlzLmNvbGxhcHNlKX19'@;
put 'ZnVuY3Rpb24gcGJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY29sbGFwc2VkPSExKX0pLHllKCl9MiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jb21tb25TdHJpbmdzLmtleXMu'@;
put 'dmVydGljYWxOYXZUb2dnbGUpfWNvbnN0IHZiZT1bImNsclZlcnRpY2FsTmF2TGluayIsIiJdLF9iZT1bW1siIiwiY2xyVmVydGljYWxOYXZJY29uIiwiIl1dLCIqIl0sYmJlPVsiW2NsclZlcnRpY2FsTmF2SWNvbl0iLCIqIl07ZnVuY3Rpb24geWJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiYnV0dG9uIiwxMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jbG9zZSgpKX0pLHF0KDEsImNkcy1pY29uIiwxMikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7VHIoImFyaWEtbGFiZWwiLGEuY2xvc2VCdXR0b25BcmlhTGFiZWx8fGEu'@;
put 'Y29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19ZnVuY3Rpb24gd2JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLHh0KCJAZmFkZURvd24uZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmFkZURvbmUoaCkpfSksbWUoMiwi'@;
put 'ZGl2IiwzKSxOZSgzKSx5ZSgpLG1lKDQsImRpdiIsNCksa3IoNSksbWUoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpKDgsImRpdiIsNyksa3IoOSwxKSx5ZSgpLFFlKDEwLHliZSwyLDEsImJ1dHRvbiIsOCkseWUoKSxtZSgxMSwiZGl2Iiw5KSxrcigxMiwyKSx5ZSgpLGtyKDEzLDMpLHllKCkoKSxt'@;
put 'ZSgxNCwiZGl2IiwzKSxOZSgxNSkseWUoKSgpLG1lKDE2LCJkaXYiLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnN0YXRpY0JhY2tkcm9wfHxoLmNsb3NlKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGRyKCJt'@;
put 'b2RhbC1zbSIsInNtIj09YS5zaXplKSgibW9kYWwtbGciLCJsZyI9PWEuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT1hLnNpemUpLFJlKCJAZmFkZURvd24iLGEuc2tpcEFuaW1hdGlvbiksVHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5KSxD'@;
put 'ZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoNSkseGMoImlkIixhLm1vZGFsSWQpLENlKDIpLFJlKCJuZ0lmIixhLmNsb3NhYmxlKSxDZSg1KSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpLENlKDEpLFJlKCJAZmFkZSIs'@;
put 'dm9pZCAwKX19Y29uc3QgQ2JlPVtbWyIiLDgsIm1vZGFsLW5hdiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0sU2JlPVsiLm1vZGFsLW5hdiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1vZGFs'@;
put 'LWZvb3RlciJdO2xldCBrYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWljb24iXV19KSxjfSkoKSxxcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2RzLWljb24iXV19KSxjfSkoKSxzYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIHZie312YXIgVXU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNV'@;
put 'Q0NFU1MiLGNbYy5FUlJPUj0zXT0iRVJST1IiLGN9KFV1fHx7fSk7bGV0IFp1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT1VdS5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRl'@;
put 'fXNldCBsb2FkaW5nU3RhdGUoYSl7ITA9PT1hP2E9VXUuTE9BRElORzphfHwoYT1VdS5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0'@;
put 'cm95KCl7dGhpcy5sb2FkaW5nU3RhdGU9VXUuREVGQVVMVH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQodmIsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGlu'@;
put 'Z1N0YXRlOlsiY2xyTG9hZGluZyIsImxvYWRpbmdTdGF0ZSJdfX0pLGN9KSgpLFl1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGFibGU9MCx0aGlzLl9sb2FkaW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1uZXcgYmV9Z2V0IGxvYWRp'@;
put 'bmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhhKXsoYT0hIWEpIT09dGhpcy5fbG9hZGluZyYmKHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0'@;
put 'aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7'@;
put 'dGhpcy5sb2FkaW5nPWE9PT1VdS5MT0FESU5HfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxHYmU9MDtmdW5jdGlvbiBEYygpe3JldHVybiJjbHItaWQt'@;
put 'IitHYmUrK31sZXQga0o9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9u'@;
put 'Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5j'@;
put 'YXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCk7dmFyIERmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShEZnx8e30pO2NvbnN0IGEyPSIwLjJzIGVhc2UtaW4tb3V0Iiwk'@;
put 'YmU9W2ExKCJza2lwSW5pdGlhbFJlbmRlciIsW2hjKCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtoYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSldKV0seEY9KGExKCJza2lwSW5pdGlhbFJlbmRlciIsW2hj'@;
put 'KCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtoYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSksaGMoIiogPT4gdm9pZCIsW19zKHtkaXNwbGF5OiJibG9jayJ9KSxydShhMixfcyh7aGVpZ2h0OjAsZGlzcGxh'@;
put 'eToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToiQ2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFwc2UiLG1vcmU6Ik1vcmUiLHNlbGVjdDoiU2VsZWN0IixzZWxlY3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQ'@;
put 'cmV2aW91cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1'@;
put 'bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQYWdlOiJGaXJzdCBQYWdlIixsYXN0UGFnZToiTGFzdCBQYWdlIixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJD'@;
put 'dXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1zIixtaW5WYWx1ZToiTWluIHZhbHVlIixtYXhWYWx1ZToiTWF4IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVu'@;
put 'dEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uOiJTaG93IG9yIGhpZGUgY29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFsbCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9z'@;
put 'dENsb3NlOiJTaWducG9zdCBDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIsZGV0YWlsUGFuZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxzIixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVy'@;
put 'IixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9uYWJsZSBoZWFkZXIiLGRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3JpZEZpbHRlckFyaWFMYWJlbDoiVG9nZ2xlIHtDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRG'@;
put 'aWx0ZXJEaWFsb2dBcmlhTGFiZWw6IkZpbHRlciBkaWFsb2ciLGNvbHVtblNlcGFyYXRvckFyaWFMYWJlbDoiQ29sdW1uIHJlc2l6ZSBoYW5kbGUiLGNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uOiJVc2UgbGVmdCBvciByaWdodCBrZXkgdG8gcmVzaXplIHRoZSBjb2x1bW4iLGFsZXJ0Q2xv'@;
put 'c2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIGFsZXJ0IixhbGVydE5leHRBbGVydEFyaWFMYWJlbDoiTmV4dCBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yge0NPVU5UfSIsYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsOiJQcmV2aW91cyBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yg'@;
put 'e0NPVU5UfSIsZGF0ZXBpY2tlckRpYWxvZ0xhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZToiVG9nZ2xlIGRhdGVwaWNrZXIiLGRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFu'@;
put 'Z2UgZGF0ZSwge1NFTEVDVEVEX0RBVEV9IixkYXRlcGlja2VyUHJldmlvdXNNb250aDoiUHJldmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToi'@;
put 'UHJldmlvdXMgZGVjYWRlIixkYXRlcGlja2VyTmV4dERlY2FkZToiTmV4dCBkZWNhZGUiLGRhdGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2FkZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJf'@;
put 'TU9OVEh9IixkYXRlcGlja2VyU2VsZWN0WWVhclRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUgY3VycmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQu'@;
put 'IixyZXNwb25zaXZlTmF2VG9nZ2xlT3BlbjoiTmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6Ik5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dDbG9z'@;
put 'ZToiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51Iix2ZXJ0aWNhbE5hdkdyb3VwVG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiBncm91cCIsdmVydGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3Rh'@;
put 'cnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2VzczoiQ29tcGxldGVkIix0aW1lbGluZVN0ZXBFcnJvcjoiRXJyb3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dyZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9w'@;
put 'dGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJTlBVVH0iJyxjb21ib2JveFNlbGVjdGlvbjoiU2VsZWN0aW9uIixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9ib3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3Blbjoi'@;
put 'U2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5nIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVFbmRPZjoiRW5kIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBhbmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVS'@;
put 'b3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgZm9yIHZpZXdpbmcgZXhwYW5kZWQgY29udGVudCwgcGxlYXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2UgbW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhp'@;
put 'cyBidXR0b24iLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHdpemFyZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFyZFN0ZXBuYXZBcmlhTGFiZWw6IlN0ZXAgbmF2aWdhdGlvbiIscGFzc3dvcmRIaWRlOiJIaWRlIHBhc3N3b3JkIixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQiLHNl'@;
put 'bGVjdGVkUm93czoiU2VsZWN0ZWQgcm93cyJ9KTtsZXQgRXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ3M9eEZ9Z2V0IGtleXMoKXtyZXR1cm4gdGhpcy5fc3RyaW5nc31sb2NhbGl6ZShhKXt0aGlzLl9zdHJpbmdzPXsuLi50aGlzLl9zdHJpbmdzLC4uLmF9fXBh'@;
put 'cnNlKGEsZD17fSl7Y29uc3QgaD1PYmplY3Qua2V5cyhkKTtsZXQgZj1hO3JldHVybiBoLmxlbmd0aCYmaC5mb3JFYWNoKF89PntmPWYucmVwbGFjZShgeyR7X319YCxkW19dKX0pLGZ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBy'@;
put 'b3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3ZhciBfYj1mdW5jdGlvbihjKXtyZXR1cm4gYy5EZWZhdWx0PSJkZWZhdWx0IixjLk11bHRpPSJtdWx0aSIsY30oX2J8fHt9KTtsZXQgS2JlPTA7Y2xhc3MgWGJle2NvbnN0cnVjdG9y'@;
put 'KGwsYSl7dGhpcy5pZD1sLHRoaXMuYWNjb3JkaW9uSWQ9YSx0aGlzLnN0YXR1cz1EZi5JbmFjdGl2ZSx0aGlzLmluZGV4PW51bGwsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLm9wZW49ITEsdGhpcy50ZW1wbGF0ZUlkPWAke3RoaXMuaWR9LSR7dGhpcy5hY2NvcmRpb25JZH1gfX1jbGFzcyBBSntj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9X2IuRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PUtiZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFuZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3RyYXRlZ3kobCl7'@;
put 'dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1vdmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IFhiZShsLHRoaXMuYWNjb3JkaW9uQ291bnQp'@;
put 'LHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYmdGhpcy5zdHJhdGVneT09PV9iLkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1ofWRpc2Fi'@;
put 'bGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9wYW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1sLmZpbmQo'@;
put 'ZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgYmI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWNjb3JkaW9uPW5ldyBBSix0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyBUZSh0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBh'@;
put 'bmVsQ2hhbmdlcyhhKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKE1lKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneShhKX1hZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKGEsZCks'@;
put 'dGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRl'@;
put 'ZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksX0U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5hY2NvcmRp'@;
put 'b25TZXJ2aWNlPWQsdGhpcy5pZkV4cGFuZFNlcnZpY2U9aCx0aGlzLmRpc2FibGVkPSExLHRoaXMucGFuZWxPcGVuPSExLHRoaXMucGFuZWxPcGVuQ2hhbmdlPW5ldyBFcix0aGlzLkFjY29yZGlvblN0YXR1cz1EZix0aGlzLmlzQWNjb3JkaW9uPSEwLHRoaXMuX2lkPURjKCl9Z2V0IGlkKCl7'@;
put 'cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQpLnBpcGUoemMoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2Uu'@;
put 'YWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0'@;
put 'aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2Fi'@;
put 'bGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlzYWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dn'@;
put 'bGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8i'@;
put 'Y2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25IZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9ZW1pdFBhbmVsQ2hhbmdl'@;
put 'KGEpe2Eub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKSh0dChFcyksdHQoYmIpLHR0KFl1KSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxrSiw0KSwyJmEpe2xldCBmO3NpKGY9YWko'@;
put 'KSkmJihkLmFjY29yZGlvbkRlc2NyaXB0aW9uPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uLXBhbmVsIiwhMCl9LGlucHV0czp7ZGlzYWJsZWQ6WyJjbHJBY2NvcmRpb25QYW5lbERpc2FibGVkIiwiZGlzYWJsZWQiXSxw'@;
put 'YW5lbE9wZW46WyJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxmZWF0dXJlczpbdGkoW1l1XSksdmFdLG5nQ29udGVudFNlbGVjdG9yczp4SixkZWNsczoyLHZhcnM6Myxj'@;
put 'b25zdHM6W1s0LCJuZ0lmIl0sWyJhcmlhLWxpdmUiLCJhc3NlcnRpdmUiLCJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIs'@;
put 'MywiaWQiLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJoZWFkZXJCdXR0b24iLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsxLCJjbHItYWNj'@;
put 'b3JkaW9uLW51bWJlciJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNsci1hY2NvcmRpb24tZXJyb3ItaWNvbiJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJjbHItYWNjb3JkaW9uLWNvbXBsZXRlLWlj'@;
put 'b24iXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsiYXJpYS1saXZlIiwiYXNzZXJ0aXZlIiwxLCJjbHItc3Itb25seSJdLFsxLCJjbHItYWNjb3JkaW9u'@;
put 'LWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoTUopLFFlKDAsRzhlLDE5LDE4LCJuZy1jb250YWluZXIiLDApLGJhKDEsImFzeW5jIikpLDImYSYmUmUoIm5nSWYiLFVsKDEsMSxkLnBhbmVsKSl9LGRl'@;
put 'cGVuZGVuY2llczpbWmksdWMscXMsdXhdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246JGJlfSxjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLFRKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3RoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVy'@;
put 'Vmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2'@;
put 'aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9fYi5NdWx0aTpfYi5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZShjcCh0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRl'@;
put 'UGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5pZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmIpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpm'@;
put 'dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLF9FLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbImNsckFj'@;
put 'Y29yZGlvbk11bHRpUGFuZWwiLCJtdWx0aVBhbmVsIl19LGZlYXR1cmVzOlt0aShbYmJdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rp'@;
put 'b246MH0pLGN9KSgpLERKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdD'@;
put 'b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLElKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1hY2NvcmRpb24tdGl0bGUi'@;
put 'LCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRp'@;
put 'c2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IGJlfWdldCBjaG9jb2xhdGUoKXtyZXR1cm4gdGhpcy5fY2hvY29sYXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUu'@;
put 'bmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLHc4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9'@;
put 'Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCksZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoeTgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLEVGPSgoKT0+e2NsYXNzIGMgZXh0ZW5k'@;
put 'cyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGZlYXR1cmVzOltlb119KSxjfSko'@;
put 'KSxMSj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdl'@;
put 'dCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFVhKSx0dChFRiw4KSx0dChZdSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBh'@;
put 'bmVsIl1dLGZlYXR1cmVzOltlb119KSxjfSkoKSxSSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoaDgsbzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1'@;
put 'aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpLG55ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2EsUkpdLFJK'@;
put 'XX0pLGN9KSgpO3ZhciB3bz1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJCYWNrc3BhY2UiLGMuVGFiPSJUYWIi'@;
put 'LGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0iRXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjfSh3b3x8e30pLEc1PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJv'@;
put 'd1JpZ2h0PSJSaWdodCIsYy5BcnJvd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShHNXx8e30pO2Z1bmN0aW9uIGwyKGMpe3JldHVybiBjPT09d28uQXJyb3dVcHx8Yz09PUc1LkFycm93VXA/d28uQXJyb3dVcDpjPT09d28uQXJyb3dEb3dufHxjPT09'@;
put 'RzUuQXJyb3dEb3duP3dvLkFycm93RG93bjpjPT09d28uQXJyb3dSaWdodHx8Yz09PUc1LkFycm93UmlnaHQ/d28uQXJyb3dSaWdodDpjPT09d28uQXJyb3dMZWZ0fHxjPT09RzUuQXJyb3dMZWZ0P3dvLkFycm93TGVmdDpjPT09d28uU3BhY2V8fGM9PT1HNS5TcGFjZT93by5TcGFjZTpjPT09'@;
put 'd28uRXNjYXBlfHxjPT09RzUuRXNjYXBlP3dvLkVzY2FwZTpjfWZ1bmN0aW9uIFRGKGMpe2NvbnN0IGw9bDIoYy5rZXkpOyhsPT09d28uQXJyb3dVcHx8bD09PXdvLkFycm93RG93bnx8bD09PXdvLkFycm93TGVmdHx8bD09PXdvLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0'@;
put 'IEtzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IGJlLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgYmUsdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IGJlfWdldCBvcGVuQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5DaGFu'@;
put 'Z2UuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0IG9wZW5FdmVudChhKXt0aGlzLl9vcGVuRXZlbnQ9YSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChhKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3Ro'@;
put 'aXMuX29wZW4hPT0oYT0hIWEpJiYodGhpcy5fb3Blbj1hLHRoaXMuX29wZW5DaGFuZ2UubmV4dChhKSl9Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUo'@;
put 'KX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlV2l0aEV2ZW50KGEpe1RGKGEpLHRoaXMub3BlbkV2ZW50PWEsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlckFsaWduZWRFbWl0KGEpe3RoaXMuX3BvcG92ZXJBbGln'@;
put 'bmVkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLElmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9'@;
put 'YSx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9ZCx0aGlzLmRvY3VtZW50PWgsdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e2Y/'@;
put 'KHRoaXMuYWRkRXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLGQuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoZj0+e3RoaXMuaWdub3JlZEV2ZW50PWZ9KSl9'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRTY3JvbGxlcj1uMih0aGlzLmRv'@;
put 'Y3VtZW50LCJzY3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUoSWEodGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5v'@;
put 'cGVuPSExLHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9YWRkQ2xpY2tMaXN0ZW5lcigp'@;
put 'e3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsYT0+e2E9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6KHRoaXMuc21hcnRPcGVuU2Vy'@;
put 'dmljZS5vcGVuPSExLGEudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoKSxk'@;
put 'ZWxldGUgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhp'@;
put 'cy5zZXRBbmNob3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRvblJlZi5uYXRpdmVFbGVtZW50'@;
put 'LmZvY3VzKCl9c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoYSl7bGV0IGQ9YS50YXJnZXQ7Zm9yKDtkLmNsYXNzTGlzdCYmImJvZHkiIT09ZC5wYXJlbnRFbGVtZW50'@;
put 'LmxvY2FsTmFtZTspZD1kLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFkLmNsYXNzTGlzdCYmIWQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5yZW1vdmVDbGlj'@;
put 'a0xpc3RlbmVyKCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoS3MpLGFyKExzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCks'@;
put 'd2I9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe2EuYW5jaG9yQnV0dG9uUmVmPWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KElmKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3Bv'@;
put 'dmVyQW5jaG9yIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWFuY2hvciIsITApfX0pLGN9KSgpLEZKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNl'@;
put 'PWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5jbG9zZUNoYW5nZT1uZXcgRXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNoYW5nZS5waXBlKElhKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9'@;
put 'KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxl'@;
put 'bWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSks'@;
put 'dHQoSWYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVD'@;
put 'bGljayhmKX0pLDImYSYmZHIoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2YXIgdnU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJ'@;
put 'Wk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfSh2dXx8e30pLFBzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KFBzfHx7fSksQ2I9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09'@;
put 'IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30oQ2J8fHt9KTtjb25zdCBTcD1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSxMZj0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8'@;
put 'YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gQzgoYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24gdTEoYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9SEooYyxsLGEpLGgtPWEuaGVpZ2h0O2JyZWFrO2Nh'@;
put 'c2UgMTpkKz1ISihjLGwsYSksaCs9bC5oZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9TkooYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPU5KKGMsbCxhKX1yZXR1cm57eE9mZnNldDpkLHlPZmZzZXQ6aH19ZnVuY3Rpb24gSEooYyxsLGEpe2xldCBkPTA7c3dpdGNo'@;
put 'KGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIFBzLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgUHMuU1RBUlQ6YnJlYWs7Y2FzZSBQcy5DRU5URVI6ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2Ug'@;
put 'UHMuRU5EOmQtPWEud2lkdGh9cmV0dXJuIGR9ZnVuY3Rpb24gTkooYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBQcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVu'@;
put 'dCl7Y2FzZSBQcy5TVEFSVDpicmVhaztjYXNlIFBzLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgUHMuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBTOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnBsYXRmb3JtSWQ9'@;
put 'ZCx0aGlzLl9zaG91bGRSZWFsaWduPW5ldyBiZSx0aGlzLnNob3VsZFJlYWxpZ249dGhpcy5fc2hvdWxkUmVhbGlnbi5hc09ic2VydmFibGUoKX1yZWFsaWduKCl7dGhpcy5fc2hvdWxkUmVhbGlnbi5uZXh0KCl9YWxpZ25Db250ZW50KGEpe2lmKCFScyh0aGlzLnBsYXRmb3JtSWQpKXJldHVy'@;
put 'bnt4T2Zmc2V0OjAseU9mZnNldDowfTt0aGlzLmN1cnJlbnRBbmNob3JDb29yZHM9dGhpcy5ldmVudFNlcnZpY2UuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcz1hLmdldEJvdW5kaW5nQ2xpZW50'@;
put 'UmVjdCgpLHRoaXMuY29udGVudE9mZnNldHM9dTEodGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7Y29uc3QgZD1mdW5jdGlvbiBpeWUoYyxsKXtjb25zdCBhPVtdLGRfYm90dG9tPWMueU9mZnNldCtsLmhlaWdodCxkX2xl'@;
put 'ZnQ9Yy54T2Zmc2V0LGRfcmlnaHQ9Yy54T2Zmc2V0K2wud2lkdGg7cmV0dXJuIGMueU9mZnNldD49MHx8YS5wdXNoKENiLlRPUCksZF9sZWZ0Pj0wfHxhLnB1c2goQ2IuTEVGVCksZF9ib3R0b208PSh3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRI'@;
put 'ZWlnaHQpfHxhLnB1c2goQ2IuQk9UVE9NKSxkX3JpZ2h0PD0od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl8fGEucHVzaChDYi5SSUdIVCksYX0odGhpcy5jb250ZW50T2Zmc2V0cyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSxoPWQu'@;
put 'cmVkdWNlKChmLF8pPT5mK18sMCk7cmV0dXJuIDE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09dnUuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oaCk6MT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5IT1JJWk9OVEFMP3Ro'@;
put 'aXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNPbmVWaW9sYXRpb24oaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xhdGlvbnMoaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5I'@;
put 'T1JJWk9OVEFMJiZ0aGlzLmhhbmRsZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhoKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKFNwKHRoaXMucG9z'@;
put 'aXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz11MSh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlz'@;
put 'LmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9dTEoTGYodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29y'@;
put 'ZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9QzgoU3AsTGYsITApO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENv'@;
put 'b3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPUM4KFNwLExmLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2Ug'@;
put 'Mjp7Y29uc3QgZD1DOChTcCxMZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9QzgoU3AsTGYsITEpO3RoaXMuY29udGVudE9m'@;
put 'ZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRz'@;
put 'PXUxKFNwKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz11MShMZih0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJy'@;
put 'ZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9dTEoTGYodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dp'@;
put 'dGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9QzgoU3AsTGYsITEpO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2Fz'@;
put 'ZSAyOmNhc2UgMTp7Y29uc3QgZD1DOChTcCxMZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKShhcihJZiksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxTYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRo'@;
put 'aXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT1fLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPVQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPVcsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhp'@;
put 'cy5zaG91bGRSZWFsaWduPSExLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IEVyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2Uo'@;
put 'YSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0'@;
put 'aGlzLnZpZXcmJnRoaXMuc2hvdWxkUmVhbGlnbiYmdGhpcy5jaGVja0NvbGxlY3Rvci5lbWl0KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgp'@;
put 'OnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRl'@;
put 'bnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sIm9wYWNpdHkiLCIxIil9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChh'@;
put 'PT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVu'@;
put 'ZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVt'@;
put 'b3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNsaWNrIixkPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9k'@;
put 'eSxkKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9k'@;
put 'ZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3KX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlv'@;
put 'blNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxl'@;
put 'ZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KExzKSx0dChhcyksdHQoemEpLHR0KEZvKSx0'@;
put 'dChTOCksdHQoSWYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbImNsclBvcG92ZXJDb250ZW50QXQiLCJjb250'@;
put 'ZW50QXQiXSxvdXRzaWRlQ2xpY2tDbG9zZTpbImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxjfSkoKSxNYj0o'@;
put 'KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBFcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2Ny'@;
put 'aWJlKGQ9Pnt0aGlzLm9wZW5DbG9zZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChLcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZkcigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxjfSkoKSx4Yj0oKCk9PntjbGFzcyBje31y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbXV19KSxjfSkoKTt2YXIgZDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVVA9InVwIixjLkRPV049ImRvd24iLGMuTEVG'@;
put 'VD0ibGVmdCIsYy5SSUdIVD0icmlnaHQiLGN9KGQxfHx7fSk7bGV0IEViPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuX3VubGlzdGVuRnVuY3M9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1yZXNldChhKXt0aGlzLl9jdXJy'@;
put 'ZW50PWF9bGlzdGVuVG9BcnJvd0tleXMoYSl7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3d1cCIsKCk9PiF0aGlzLm1vdmUoZDEuVVApKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEs'@;
put 'ImtleWRvd24uYXJyb3dkb3duIiwoKT0+IXRoaXMubW92ZShkMS5ET1dOKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93bGVmdCIsKCk9PiF0aGlzLm1vdmUoZDEuTEVGVCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2go'@;
put 'dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IiwoKT0+IXRoaXMubW92ZShkMS5SSUdIVCkpKX1yZWdpc3RlckNvbnRhaW5lcihhLGQ9IjAiKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsZCksdGhpcy5saXN0ZW5Ub0Fycm93S2V5cyhh'@;
put 'KSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5zcGFjZSIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZW50ZXIiLCgpPT4h'@;
put 'dGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpfW1vdmVUbyhhKXt2b2lkIDAhPT1hJiYodGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnQuYmx1cigpLGEuZm9jdXMoKSx0aGlzLl9jdXJyZW50PWEpfW1vdmUoYSl7bGV0IGQ9ITE7aWYodGhpcy5jdXJyZW50KXtjb25zdCBoPXRoaXMuY3VycmVudFth'@;
put 'XTtoJiYoRk8oaCk/aDpXaShoKSkuc3Vic2NyaWJlKF89PntfJiYodGhpcy5tb3ZlVG8oXyksZD0hMCl9KX1yZXR1cm4gZH1hY3RpdmF0ZUN1cnJlbnQoKXtyZXR1cm4hKCF0aGlzLmN1cnJlbnR8fCF0aGlzLmN1cnJlbnQuYWN0aXZhdGV8fCh0aGlzLmN1cnJlbnQuYWN0aXZhdGUoKSwwKSl9'@;
put 'ZGV0YWNoTGlzdGVuZXJzKCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7'@;
put 'Y29uc3Qgako9e3Byb3ZpZGU6RWIsdXNlRmFjdG9yeTpmdW5jdGlvbiBveWUoYyxsKXtyZXR1cm4gY3x8bmV3IEViKGwpfSxkZXBzOltbbmV3IHoyLG5ldyBnMCxFYl0sRm9dfTt2YXIgb2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CRUZPUkU9LTFdPSJCRUZPUkUiLGNbYy5BRlRFUj0xXT0i'@;
put 'QUZURVIiLGN9KG9kfHx7fSk7Y2xhc3MgeDB7fXgwWyJ0b3AtcmlnaHQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx4MFsidG9wLWxlZnQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMu'@;
put 'U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbImJvdHRvbS1yaWdodCJdPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQUZURVIsYW5jaG9yOlBzLkVORCxjb250ZW50OlBzLkVORH0seDBbImJvdHRvbS1sZWZ0Il09e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMu'@;
put 'U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbInJpZ2h0LXRvcCJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMuQ0VOVEVSLGNvbnRlbnQ6UHMuRU5EfSx4MFsicmlnaHQtYm90dG9tIl09e2F4aXM6dnUuSE9SSVpPTlRBTCxzaWRlOm9kLkFGVEVSLGFuY2hv'@;
put 'cjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx4MFsibGVmdC10b3AiXT17YXhpczp2dS5IT1JJWk9OVEFMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5DRU5URVIsY29udGVudDpQcy5FTkR9LHgwWyJsZWZ0LWJvdHRvbSJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5CRUZPUkUs'@;
put 'YW5jaG9yOlBzLlNUQVJULGNvbnRlbnQ6UHMuU1RBUlR9O2NsYXNzIElGe3N0YXRpYyBsaW5rUGFyZW50KGwsYSxkKXtsLmZvckVhY2goaD0+aFtkXT1hKX1zdGF0aWMgbGlua1ZlcnRpY2FsKGwsYT0hMCl7bC5mb3JFYWNoKChkLGgpPT57aD4wJiYoZC51cD1sW2gtMV0pLGg8bC5sZW5ndGgt'@;
put 'MSYmKGQuZG93bj1sW2grMV0pfSksYSYmbC5sZW5ndGg+MSYmKGxbMF0udXA9bFtsLmxlbmd0aC0xXSxsW2wubGVuZ3RoLTFdLmRvd249bFswXSl9fWxldCBoMT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7YS5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXpl'@;
put 'cm8iKTtjb25zdCBkPXRoaXMuY2xpZW50UmVjdChhKS53aWR0aDtyZXR1cm4gYS5jbGFzc0xpc3QucmVtb3ZlKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm8iKSxkfXNjcm9sbEJhcldpZHRoKGEpe3JldHVybiBhLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGh9c2Nyb2xsV2lkdGgoYSl7cmV0'@;
put 'dXJuIGEuc2Nyb2xsV2lkdGh8fDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IiksMTApfWNsaWVudFJlY3QoYSl7Y29uc3QgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6'@;
put 'cGFyc2VJbnQoZC50b3AsMTApLGJvdHRvbTpwYXJzZUludChkLmJvdHRvbSwxMCksbGVmdDpwYXJzZUludChkLmxlZnQsMTApLHJpZ2h0OnBhcnNlSW50KGQucmlnaHQsMTApLHdpZHRoOnBhcnNlSW50KGQud2lkdGgsMTApLGhlaWdodDpwYXJzZUludChkLmhlaWdodCwxMCl9fW1pbldpZHRo'@;
put 'KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoIm1pbi13aWR0aCIpLDEwKX1mb2N1cyhhKXthLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0IGV4cGFuZEFuaW1hdGlvbigpe3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFu'@;
put 'ZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uRG9uZSgpe3RoaXMudXBkYXRlU3RhcnRIZWlnaHQoKX11cGRhdGVTdGFydEhlaWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhpcy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxl'@;
put 'bWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KGgxKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiJdXSxob3N0VmFyczoxLGhv'@;
put 'c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmZV8oIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hbmltYXRpb25Eb25lKCl9KSwyJmEmJlM1KCJAZXhwYW5kQW5pbWF0aW9uIixkLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dl'@;
put 'cjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1cmVzOlt0aShbaDFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9jaztvdmVy'@;
put 'ZmxvdzpoaWRkZW59Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZXhwYW5kQW5pbWF0aW9uIixbaGMoInRydWUgPD0+IGZhbHNlIixbX3Moe2hlaWdodDoie3tzdGFydEhlaWdodH19cHgifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtoZWlnaHQ6IioifSkpXSldKV19fSksY30pKCksTEY9'@;
put 'KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxzeWU9MDtjb25zdCB4OD1uZXcgTWkoIklGX0FDVElWRV9JRCIp'@;
put 'LGx5ZT17cHJvdmlkZTp4OCx1c2VGYWN0b3J5OmZ1bmN0aW9uIGF5ZSgpe3JldHVybisrc3llfX07bGV0ICQ1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jdXJyZW50Q2hhbmdlPW5ldyBiZX1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdl'@;
put 'LmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRTg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250'@;
put 'YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgRXIoITEpLHRoaXMud2FzQWN0aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudENoYW5nZS5zdWJzY3JpYmUoXz0+e3RoaXMuY2hl'@;
put 'Y2tBbmRVcGRhdGVWaWV3KF8pfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1zZXQgYWN0aXZlKGEpe2EmJih0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp'@;
put 'b24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9Y2hlY2tBbmRVcGRhdGVWaWV3KGEpe2NvbnN0IGQ9YT09PXRoaXMuaWQ7ZCE9PXRoaXMud2FzQWN0aXZl'@;
put 'JiYodGhpcy51cGRhdGVWaWV3KGQpLHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoZCksdGhpcy53YXNBY3RpdmU9ZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dCh4OCksdHQoemEpLHR0KGFzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbIiIsImNscklmQWN0aXZlIiwiIl1dLGlucHV0czp7YWN0aXZlOlsiY2xySWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFjdGl2ZUNoYW5nZSJ9fSksY30pKCksYzI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7'@;
put 'dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVyPWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9Pnt0aGlzLnVwZGF0ZVZpZXcoZiksdGhp'@;
put 'cy5vcGVuQ2hhbmdlLmVtaXQoZil9KX1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1zZXQgb3BlbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/'@;
put 'dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEtzKSx0dCh6YSksdHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siIiwiY2xySWZPcGVuIiwiIl1dLGlucHV0czp7b3BlbjpbImNscklmT3BlbiIsIm9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSx6Sj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy50ZW1w'@;
put 'bGF0ZT1hLHRoaXMuY29udGFpbmVyPWQsdGhpcy5lbD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmV4cGFuZD1fLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEVyKCEwKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChfLmV4'@;
put 'cGFuZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnVwZGF0ZVZpZXcoKSx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmQuZXhwYW5kZWQpfSkpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7ImJvb2xlYW4iPT10eXBlb2Yg'@;
put 'YSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhwYW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNo'@;
put 'KGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRlbXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRl'@;
put 'bXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8YykodHQoemEsOCksdHQoYXMpLHR0KE5pKSx0dChGbyksdHQoWXUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOlsiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19'@;
put 'LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hhbmdlIn19KSxjfSkoKSxzZD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtp'@;
put 'bXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIFJme2NvbnN0cnVjdG9yKGwpe3RoaXMuZHJhZ1Bvc2l0aW9uPWwuZHJhZ1Bvc2l0aW9uLHRoaXMuZ3JvdXA9bC5ncm91cCx0aGlzLmRyYWdEYXRhVHJhbnNmZXI9bC5kcmFnRGF0YVRyYW5zZmVyLHRoaXMuZHJvcFBvaW50UG9zaXRpb249bC5k'@;
put 'cm9wUG9pbnRQb3NpdGlvbn19dmFyIEUwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRFJBR19TVEFSVD0wXT0iRFJBR19TVEFSVCIsY1tjLkRSQUdfTU9WRT0xXT0iRFJBR19NT1ZFIixjW2MuRFJBR19FTkQ9Ml09IkRSQUdfRU5EIixjW2MuRFJBR19FTlRFUj0zXT0iRFJBR19FTlRFUiIsY1tj'@;
put 'LkRSQUdfTEVBVkU9NF09IkRSQUdfTEVBVkUiLGNbYy5EUk9QPTVdPSJEUk9QIixjfShFMHx8e30pO2xldCBVSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kcmFnU3RhcnQ9bmV3IGJlLHRoaXMuZHJhZ01vdmU9bmV3IGJlLHRoaXMuZHJhZ0VuZD1uZXcgYmUsdGhpcy5kcm9w'@;
put 'PW5ldyBiZX1nZXQgZHJhZ1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5kcmFnU3RhcnQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdNb3ZlZCgpe3JldHVybiB0aGlzLmRyYWdNb3ZlLmFzT2JzZXJ2YWJsZSgpfWdldCBkcmFnRW5kZWQoKXtyZXR1cm4gdGhpcy5kcmFnRW5kLmFzT2JzZXJ2YWJsZSgp'@;
put 'fWdldCBkcm9wcGVkKCl7cmV0dXJuIHRoaXMuZHJvcC5hc09ic2VydmFibGUoKX1icm9hZGNhc3QoYSl7c3dpdGNoKGEudHlwZSl7Y2FzZSBFMC5EUkFHX1NUQVJUOnRoaXMuZHJhZ1N0YXJ0Lm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUkFHX01PVkU6dGhpcy5kcmFnTW92ZS5uZXh0KGEpO2Jy'@;
put 'ZWFrO2Nhc2UgRTAuRFJBR19FTkQ6dGhpcy5kcmFnRW5kLm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUk9QOnRoaXMuZHJvcC5uZXh0KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksa2I9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5ldmVudEJ1cz1oLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLmhhc0RyYWdTdGFydGVkPSExLHRo'@;
put 'aXMuZHJhZ1N0YXJ0PW5ldyBiZSx0aGlzLmRyYWdNb3ZlPW5ldyBiZSx0aGlzLmRyYWdFbmQ9bmV3IGJlLHRoaXMubGlzdGVuZXJzPVtdfWdldCBkcmFnU3RhcnRlZCgpe3JldHVybiB0aGlzLmRyYWdTdGFydC5hc09ic2VydmFibGUoKX1nZXQgZHJhZ01vdmVkKCl7cmV0dXJuIHRoaXMuZHJh'@;
put 'Z01vdmUuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdFbmRlZCgpe3JldHVybiB0aGlzLmRyYWdFbmQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbFBvc2l0aW9ufWF0dGFjaERyYWdMaXN0ZW5lcnMoYSl7dGhpcy5kcmFnZ2FibGVFbD1h'@;
put 'LHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5jdXN0b21EcmFnRXZlbnQodGhpcy5kcmFnZ2FibGVFbCwibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIpKSx0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMuY3VzdG9tRHJhZ0V2ZW50KHRoaXMuZHJhZ2dhYmxlRWwsInRvdWNoc3RhcnQi'@;
put 'LCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpKX1kZXRhY2hEcmFnTGlzdGVuZXJzKCl7dGhpcy5saXN0ZW5lcnMmJnRoaXMubGlzdGVuZXJzLm1hcChhPT5hKCkpLHRoaXMubmVzdGVkTGlzdGVuZXJzJiZ0aGlzLm5lc3RlZExpc3RlbmVycy5tYXAoYT0+YSgpKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0'@;
put 'Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKX1nZXROYXRpdmVFdmVudE9iamVjdChhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsImNoYW5nZWRUb3VjaGVzIik/YS5jaGFuZ2VkVG91Y2hlc1swXTph'@;
put 'fWN1c3RvbURyYWdFdmVudChhLGQsaCxmKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0ZW4oYSxkLF89Pnt0aGlzLmluaXRpYWxQb3NpdGlvbj17cGFnZVg6dGhpcy5nZXROYXRpdmVFdmVudE9iamVjdChfKS5wYWdlWCxwYWdlWTp0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KF8pLnBhZ2VZ'@;
put 'fSx0aGlzLm5lc3RlZExpc3RlbmVycz1bXSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmVzdGVkTGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwic2VsZWN0c3RhcnQiLFQ9PntULnByZXZlbnREZWZhdWx0KCksVC5zdG9wSW1t'@;
put 'ZWRpYXRlUHJvcGFnYXRpb24oKX0pKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnkoaCksdGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0'@;
put 'ZW5lcigpLHRoaXMuaGFzRHJhZ1N0YXJ0ZWQ9ITAsdGhpcy5icm9hZGNhc3QoXyxFMC5EUkFHX1NUQVJUKSx0aGlzLm5lc3RlZExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsaCxUPT57VC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLmhhc0Ry'@;
put 'YWdTdGFydGVkJiZ0aGlzLmJyb2FkY2FzdChULEUwLkRSQUdfTU9WRSl9KSl9LHRoaXMuZHJhZ1N0YXJ0RGVsYXkpfSksdGhpcy5uZXN0ZWRMaXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGYsVD0+e3RoaXMuaGFzRHJhZ1N0YXJ0ZWQmJih0aGlzLmhhc0Ry'@;
put 'YWdTdGFydGVkPSExLHRoaXMuYnJvYWRjYXN0KFQsRTAuRFJBR19FTkQpKSxjbGVhclRpbWVvdXQodGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQpLHRoaXMubmVzdGVkTGlzdGVuZXJzLm1hcChXPT5XKCkpLHRoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNr'@;
put 'RHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcigpfSkpfSl9Y2hlY2tEcmFnU3RhcnRCb3VuZGFyeShhKXt0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGEsZD0+e2NvbnN0IGg9TWF0aC5hYnModGhpcy5nZXROYXRpdmVF'@;
put 'dmVudE9iamVjdChkKS5wYWdlWC10aGlzLmluaXRpYWxQb3NpdGlvbi5wYWdlWCksZj1NYXRoLmFicyh0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KGQpLnBhZ2VZLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VZKTsoaD4xfHxmPjEpJiYoY2xlYXJUaW1lb3V0KHRoaXMuZHJhZ1N0YXJ0RGVs'@;
put 'YXlUaW1lb3V0KSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKSl9KX1icm9hZGNhc3QoYSxkKXtjb25zdCBoPXRoaXMuZ2VuZXJhdGVEcmFnRXZlbnQoYSxkKTtzd2l0Y2goaC50eXBlKXtjYXNlIEUwLkRS'@;
put 'QUdfU1RBUlQ6dGhpcy5kcmFnU3RhcnQubmV4dChoKTticmVhaztjYXNlIEUwLkRSQUdfTU9WRTp0aGlzLmRyYWdNb3ZlLm5leHQoaCk7YnJlYWs7Y2FzZSBFMC5EUkFHX0VORDp0aGlzLmRyYWdFbmQubmV4dChoKX1oLmdob3N0RWxlbWVudD10aGlzLmdob3N0RWxlbWVudCxoLmRyb3BQb2lu'@;
put 'dFBvc2l0aW9uPXRoaXMuZHJvcFBvaW50UG9zaXRpb24sdGhpcy5ldmVudEJ1cy5icm9hZGNhc3QoaCl9Z2VuZXJhdGVEcmFnRXZlbnQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0TmF0aXZlRXZlbnRPYmplY3QoYSk7cmV0dXJue3R5cGU6ZCxkcmFnUG9zaXRpb246e3BhZ2VYOmgucGFnZVgscGFn'@;
put 'ZVk6aC5wYWdlWSxtb3ZlWDpoLnBhZ2VYLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VYLG1vdmVZOmgucGFnZVktdGhpcy5pbml0aWFsUG9zaXRpb24ucGFnZVl9LGdyb3VwOnRoaXMuZ3JvdXAsZHJhZ0RhdGFUcmFuc2Zlcjp0aGlzLmRyYWdEYXRhVHJhbnNmZXIsZ2hvc3RFbGVtZW50OnRo'@;
put 'aXMuZ2hvc3RFbGVtZW50fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTm8pLGFyKEZvKSxhcihVSikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFJGPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSl7dGhpcy5kb21BZGFwdGVyPWF9Z2V0IGhhc0RyYWdnYWJsZVN0YXRlKCl7cmV0dXJuISF0aGlzLnNuYXBzaG90RHJhZ0V2ZW50JiYhIXRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdldCBjbGllbnRSZWN0KCl7cmV0dXJuIHRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdl'@;
put 'dCBkcmFnRXZlbnQoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdERyYWdFdmVudH1jYXB0dXJlKGEsZCl7dGhpcy5kcmFnZ2FibGVFbENsaWVudFJlY3Q9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QoYSksdGhpcy5zbmFwc2hvdERyYWdFdmVudD1kfWRpc2NhcmQoKXtkZWxldGUgdGhpcy5kcmFn'@;
put 'Z2FibGVFbENsaWVudFJlY3QsZGVsZXRlIHRoaXMuc25hcHNob3REcmFnRXZlbnR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGgxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWko9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe2lmKHRoaXMuZWw9YSx0aGlzLmRyYWdFdmVudExpc3RlbmVyPWQsdGhpcy5kcmFnZ2FibGVTbmFwc2hvdD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLm5nWm9uZT1fLHRoaXMubGVhdmVBbmltQ29uZmlnPXt2YWx1ZTowLHBhcmFtczp7'@;
put 'dG9wOiIwcHgiLGxlZnQ6IjBweCJ9fSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmRyYWdnYWJsZVNuYXBzaG90KXRocm93IG5ldyBFcnJvcigiVGhlIGNsci1kcmFnZ2FibGUtZ2hvc3QgY29tcG9uZW50IGNhbiBvbmx5IGJlIHVzZWQgaW5z'@;
put 'aWRlIG9mIGEgY2xyRHJhZ2dhYmxlIGRpcmVjdGl2ZS4iKTt0aGlzLmRyYWdnYWJsZUdob3N0RWw9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5kcmFnZ2FibGVHaG9zdEVsLCJkcmFnZ2FibGUtZ2hvc3QiKSx0aGlzLmRyYWdFdmVudExpc3RlbmVy'@;
put 'Lmdob3N0RWxlbWVudD10aGlzLmRyYWdnYWJsZUdob3N0RWwsdGhpcy5zZXREZWZhdWx0R2hvc3RTaXplKHRoaXMuZHJhZ2dhYmxlR2hvc3RFbCk7Y29uc3QgVD17dG9wOnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFn'@;
put 'RXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VZLXRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC50b3A6MCxsZWZ0OnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFnRXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VYLXRo'@;
put 'aXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC5sZWZ0OjB9O2xldCBXPSExO3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShpZT0+e1d8fCh0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRl'@;
put 'P3RoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QudG9wfXB4YCxgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QubGVmdH1weGApOnRoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRy'@;
put 'YWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCxgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCksVz0hMCk7Y29uc3QgZ2U9dGhpcy5maW5kVG9wTGVmdFBvc2l0aW9uKGllLmRyYWdQb3NpdGlvbixUKTt0aGlzLnNldFBvc2l0aW9uU3R5bGUodGhp'@;
put 'cy5kcmFnZ2FibGVHaG9zdEVsLGdlLnBhZ2VYLGdlLnBhZ2VZKSx0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyb3BQb2ludFBvc2l0aW9uPXRoaXMuZmluZERyb3BQb2ludFBvc2l0aW9uKGdlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJz'@;
put 'Y3JpYmUoKSl9c2V0RGVmYXVsdEdob3N0U2l6ZShhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlJiZ0aGlzLnNldFNpemVTdHlsZShhLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aCx0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJl'@;
put 'Y3QuaGVpZ2h0KX1hbmltYXRlVG9PbkxlYXZlKGEsZCl7dGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5sZWF2ZUFuaW1Db25maWc9e3ZhbHVlOjAscGFyYW1zOnt0b3A6YSxsZWZ0OmR9fX0pfWZpbmRUb3BMZWZ0UG9zaXRpb24oYSxkKXtyZXR1cm57cGFnZVg6YS5wYWdlWC1kLmxlZnQscGFn'@;
put 'ZVk6YS5wYWdlWS1kLnRvcH19ZmluZERyb3BQb2ludFBvc2l0aW9uKGEpe3JldHVybiB0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlP3twYWdlWDphLnBhZ2VYK3RoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aC8yLHBhZ2VZOmEucGFnZVkrdGhp'@;
put 'cy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LmhlaWdodC8yfTphfXNldFNpemVTdHlsZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ3aWR0aCIsYCR7ZH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwiaGVpZ2h0IixgJHtofXB4YCl9c2V0UG9zaXRpb25TdHls'@;
put 'ZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IixgJHtkfXB4YCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3AiLGAke2h9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsInZpc2liaWxpdHkiLCJ2aXNpYmxlIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dChrYiw4KSx0dChSRiw4KSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyYWdnYWJsZS1naG9zdCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm'@;
put 'YSYmUzUoIkBsZWF2ZUFuaW1hdGlvbiIsZC5sZWF2ZUFuaW1Db25maWcpfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImxlYXZl'@;
put 'QW5pbWF0aW9uIixbaGMoIjpsZWF2ZSIsW19zKHtsZWZ0OiIqIix0b3A6IioifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHt0b3A6Int7dG9wfX0iLGxlZnQ6Int7bGVmdH19In0pKV0pXSldfX0pLGN9KSgpLFlKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe2lmKHRoaXMu'@;
put 'dGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXI9aCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmNvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIlRoZSAqY2xySWZEcmFnZ2VkIGRpcmVjdGl2ZSBjYW4g'@;
put 'b25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsckRyYWdnYWJsZSBkaXJlY3RpdmUuIik7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50'@;
put 'ZW1wbGF0ZSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRW5kZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5jb250YWluZXIuY2xlYXIoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3Jp'@;
put 'YmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHphKSx0dChhcywxMiksdHQoa2IsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkRyYWdnZWQiLCIiXV19KSxjfSkoKSxPRj0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lcj1hLHRoaXMucmVuZGVyZXI9ZH1nZXQgZGVmYXVsdEhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRIYW5kbGVFbH1zZXQgZGVmYXVsdEhhbmRsZUVsKGEpe3RoaXMuX2RlZmF1bHRIYW5kbGVFbD1hLHRoaXMuX2N1'@;
put 'c3RvbUhhbmRsZUVsfHx0aGlzLm1ha2VFbGVtZW50SGFuZGxlKHRoaXMuX2RlZmF1bHRIYW5kbGVFbCl9Z2V0IGN1c3RvbUhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2N1c3RvbUhhbmRsZUVsfXJlZ2lzdGVyQ3VzdG9tSGFuZGxlKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJh'@;
put 'Z0xpc3RlbmVycygpLHRoaXMuX2N1c3RvbUhhbmRsZUVsPWEsdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9jdXN0b21IYW5kbGVFbCl9dW5yZWdpc3RlckN1c3RvbUhhbmRsZSgpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpLHRoaXMucmVuZGVyZXIu'@;
put 'cmVtb3ZlQ2xhc3ModGhpcy5fY3VzdG9tSGFuZGxlRWwsImRyYWctaGFuZGxlIiksZGVsZXRlIHRoaXMuX2N1c3RvbUhhbmRsZUVsLHRoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9kZWZhdWx0SGFuZGxlRWwpfW1ha2VFbGVtZW50SGFuZGxlKGEp'@;
put 'e3RoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5fZGVmYXVsdEhhbmRsZUVsIT09YSYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9kZWZhdWx0SGFuZGxlRWwsImRyYWctaGFuZGxlIiksdGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5hdHRhY2hEcmFnTGlzdGVuZXJzKGEpLHRoaXMu'@;
put 'cmVuZGVyZXIuYWRkQ2xhc3MoYSwiZHJhZy1oYW5kbGUiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa2IpLGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksV0o9KCgpPT57Y2xh'@;
put 'c3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnJlbmRlcmVyPWF9ZW50ZXIoKXt0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksImluLWRyYWciKX1leGl0KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCJpbi1kcmFnIil9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksR0o9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLmVsPWEsdGhpcy5kcmFnRXZl'@;
put 'bnRMaXN0ZW5lcj1kLHRoaXMuZHJhZ0hhbmRsZVJlZ2lzdHJhcj1oLHRoaXMudmlld0NvbnRhaW5lclJlZj1mLHRoaXMuY2ZyPV8sdGhpcy5pbmplY3Rvcj1ULHRoaXMuZHJhZ2dhYmxlU25hcHNob3Q9Vyx0aGlzLmdsb2JhbERyYWdNb2RlPWllLHRoaXMuZHJhZ1N0YXJ0RW1pdHRlcj1uZXcg'@;
put 'RXIsdGhpcy5kcmFnTW92ZUVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ0VuZEVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ09uPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRyYWdnYWJsZUVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLmNvbXBvbmVudEZhY3Rvcnk9dGhpcy5jZnIu'@;
put 'cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoWkopfXNldCBkYXRhVHJhbnNmZXIoYSl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRGF0YVRyYW5zZmVyPWF9c2V0IGdyb3VwKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZ3JvdXA9YX1zZXQgZHJhZ1N0YXJ0RGVsYXkoYSl7Im51bWJlciI9'@;
put 'PXR5cGVvZiBhP3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ1N0YXJ0RGVsYXk9YToic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydERlbGF5PXBhcnNlSW50KGEsMTApfHwwKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmRyYWdIYW5kbGVS'@;
put 'ZWdpc3RyYXIuZGVmYXVsdEhhbmRsZUVsPXRoaXMuZHJhZ2dhYmxlRWwsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuZ2xvYmFsRHJhZ01vZGUuZW50ZXIoKSx0aGlzLmRyYWdPbj0hMCx0aGlzLmN1'@;
put 'c3RvbUdob3N0fHx0aGlzLmNyZWF0ZURlZmF1bHRHaG9zdChhKSx0aGlzLmRyYWdTdGFydEVtaXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShhPT57dGhpcy5kcmFnTW92ZUVt'@;
put 'aXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ0VuZGVkLnN1YnNjcmliZShhPT57dGhpcy5nbG9iYWxEcmFnTW9kZS5leGl0KCksdGhpcy5kcmFnT249ITEsdGhpcy5jdXN0b21HaG9zdHx8dGhpcy5kZXN0'@;
put 'cm95RGVmYXVsdEdob3N0KCksdGhpcy5kcmFnRW5kRW1pdHRlci5lbWl0KG5ldyBSZihhKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpfWNy'@;
put 'ZWF0ZURlZmF1bHRHaG9zdChhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNhcHR1cmUodGhpcy5kcmFnZ2FibGVFbCxhKSx0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50RmFjdG9yeSwwLHRoaXMuaW5qZWN0b3IsW1t0aGlzLmRyYWdnYWJsZUVs'@;
put 'LmNsb25lTm9kZSghMCldXSl9ZGVzdHJveURlZmF1bHRHaG9zdCgpe3RoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuZGlzY2FyZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoa2Ip'@;
put 'LHR0KE9GKSx0dChhcyksdHQoSzApLHR0KEVhKSx0dChSRiksdHQoV0opKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJhZ2dhYmxlIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWUosNSksMiZhKXtsZXQgZjtz'@;
put 'aShmPWFpKCkpJiYoZC5jdXN0b21HaG9zdD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZHJhZ2dhYmxlIiwhMCkoImJlaW5nLWRyYWdnZWQiLGQuZHJhZ09uKX0saW5wdXRzOntkYXRhVHJhbnNmZXI6WyJjbHJEcmFnZ2FibGUiLCJk'@;
put 'YXRhVHJhbnNmZXIiXSxncm91cDpbImNsckdyb3VwIiwiZ3JvdXAiXSxkcmFnU3RhcnREZWxheTpbImNsckRyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXX0sb3V0cHV0czp7ZHJhZ1N0YXJ0RW1pdHRlcjoiY2xyRHJhZ1N0YXJ0IixkcmFnTW92ZUVtaXR0ZXI6ImNsckRyYWdNb3Zl'@;
put 'IixkcmFnRW5kRW1pdHRlcjoiY2xyRHJhZ0VuZCJ9LGZlYXR1cmVzOlt0aShba2IsT0YsUkYsV0osaDFdKV19KSxjfSkoKSwkSj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMu'@;
put 'XHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NvbnN0IHFKPW5ldyBNaSgiRk9DVVNfT05fVklFV19JTklUIiksdXllPXtwcm92aWRlOnFKLHVzZVZhbHVlOiEwfTtsZXQgUEY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5lbD1hLHRoaXMu'@;
put 'cGxhdGZvcm1JZD1kLHRoaXMuZm9jdXNPblZpZXdJbml0PWgsdGhpcy5yZW5kZXJlcj1fLHRoaXMuZGlyZWN0Rm9jdXM9ITAsdGhpcy5kZXN0cm95JD1uZXcgYmUsdGhpcy5faXNFbmFibGVkPXRoaXMuZm9jdXNPblZpZXdJbml0LHRoaXMuZG9jdW1lbnQ9ZixULnJ1bk91dHNpZGVBbmd1bGFy'@;
put 'KCgpPT5uMihhLm5hdGl2ZUVsZW1lbnQsImZvY3Vzb3V0IikucGlwZShhaCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5kaXJlY3RGb2N1c3x8KHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKSx0aGlzLnJl'@;
put 'bmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwib3V0bGluZSIsbnVsbCkpfSkpfXNldCBpc0VuYWJsZWQoYSl7dGhpcy5mb2N1c09uVmlld0luaXQmJiJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLl9pc0VuYWJsZWQ9YSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5mb2N1'@;
put 'cygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLl9pc0VuYWJsZWQmJnRoaXMuZG9jdW1lbnQmJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZWwubmF0'@;
put 'aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZGlyZWN0Rm9jdXM9ITEsdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5y'@;
put 'ZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIm91dGxpbmUiLCJub25lIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEdzKSx0dChxSiksdHQoTHMp'@;
put 'LHR0KEZvKSx0dChObykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJGb2N1c09uVmlld0luaXQiLCIiXV0saW5wdXRzOntpc0VuYWJsZWQ6WyJjbHJGb2N1c09uVmlld0luaXQiLCJpc0VuYWJsZWQiXX19KSxjfSkoKSxxNT0oKCk9PntjbGFzcyBje31yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W3V5ZV0saW1wb3J0czpbW29vXV19KSxjfSkoKSxkeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3By'@;
put 'ZXZpb3VzRm9jdXNUcmFwcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wdXNoKHRoaXMuX2N1cnJlbnQpLHRoaXMuX2N1cnJlbnQ9YX1nZXQgbmJGb2N1c1RyYXBwZXJzKCl7cmV0dXJuIHRoaXMu'@;
put 'X3ByZXZpb3VzRm9jdXNUcmFwcy5sZW5ndGh9YWN0aXZhdGVQcmV2aW91c1RyYXBwZXIoKXt0aGlzLl9jdXJyZW50PXRoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wb3AoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksTXA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuZWw9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5mb2N1c1RyYXBzVHJhY2tlcj1oLHRoaXMucmVuZGVyZXI9Zix0aGlz'@;
put 'LnBsYXRmb3JtSWQ9Xyx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkPSExLHRoaXMuX2NvbmZpZz17c3RyaWN0OiEwfSx0aGlzLmRvY3VtZW50PXRoaXMuaW5qZWN0b3IuZ2V0KExzKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmN1cnJlbnQ9dGhpc31zZXQgY29uZmlnKGEpe3RoaXMuX2NvbmZpZz1P'@;
put 'YmplY3QuYXNzaWduKHRoaXMuX2NvbmZpZywiIj09PWE/e306YSl9Z2V0IHBvdGVudGlhbGx5Rm9jdXNhYmxlRWxzKCl7cmV0dXJuWy4uLnRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaHJlZl06bm90KFt0YWJpbmRleD0iLTEiXSksIGJ1dHRvbjpub3QoW2Rpc2Fi'@;
put 'bGVkXSk6bm90KFt0YWJpbmRleD0iLTEiXSksIGlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9Ii0xIl0pLCBb'@;
put 'Y29udGVudGVkaXRhYmxlPSJ0cnVlIl06bm90KFt0YWJpbmRleD0iLTEiXSksIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD0iLTEiXSkgJyldfW5nT25Jbml0KCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi'@;
put 'dGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQ9dGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMucGFyZW50RWxlbWVudD10aGlz'@;
put 'LmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCksdGhpcy5hZGRSZWJvdW5kRWxzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZVJlYm91bmRFbHMoKSx0aGlzLnNldFByZXZpb3VzRm9jdXMoKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmFjdGl2YXRlUHJldmlvdXNUcmFwcGVyKCl9'@;
put 'b25Gb2N1c0luKGEpe2NvbnN0IGQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMuZm9jdXNUcmFwc1RyYWNrZXIuY3VycmVudCE9PXRoaXN8fCFScyh0aGlzLnBsYXRmb3JtSWQpfHx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8KGEudGFyZ2V0PT09dGhp'@;
put 'cy50b3BSZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhpcy5mb2N1c0xhc3RGb2N1c2FibGUoKSx0aGlzLmZvY3VzVHJhcEVsSWZPdXRzaWRlKCkpOmEudGFyZ2V0PT09dGhpcy5ib3R0b21SZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhp'@;
put 'cy5mb2N1c0ZpcnN0Rm9jdXNhYmxlKCksdGhpcy5mb2N1c1RyYXBFbElmT3V0c2lkZSgpKTp0aGlzLl9jb25maWcuc3RyaWN0P3RoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMubG9jYWxGb2N1c0VzY2FwZWQ9ITApfXNldFByZXZpb3VzRm9jdXMoKXt0aGlzLnByZXZpb3VzQWN0'@;
put 'aXZlRWxlbWVudCYmdGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMucHJldmlvdXNBY3RpdmVFbGVtZW50LmZvY3VzKCl9Y3JlYXRlRm9jdXNhYmxlT2ZmU2NyZWVuRWwoKXtjb25zdCBhPXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiB0aGlz'@;
put 'LnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsIjAiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGEsIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxhfWFkZFJlYm91bmRFbHMoKXtpZihScyh0aGlzLnBsYXRmb3JtSWQpKXt0aGlzLnRvcFJlYm91bmRFbD10aGlzLmNyZWF0'@;
put 'ZUZvY3VzYWJsZU9mZlNjcmVlbkVsKCksdGhpcy5ib3R0b21SZWJvdW5kRWw9dGhpcy5jcmVhdGVGb2N1c2FibGVPZmZTY3JlZW5FbCgpO2NvbnN0IGE9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50RWxlbWVudCx0aGlzLnRvcFJlYm91'@;
put 'bmRFbCxhKSxhLm5leHRTaWJsaW5nP3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCxhLm5leHRTaWJsaW5nKTp0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCl9fXJlbW92'@;
put 'ZVJlYm91bmRFbHMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRvcFJlYm91bmRFbCYmdGhpcy5ib3R0b21SZWJvdW5kRWwmJih0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy50b3BSZWJvdW5kRWwpLHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmJv'@;
put 'dHRvbVJlYm91bmRFbCksZGVsZXRlIHRoaXMudG9wUmVib3VuZEVsLGRlbGV0ZSB0aGlzLmJvdHRvbVJlYm91bmRFbCl9Zm9jdXNGaXJzdEZvY3VzYWJsZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVscy5sZW5ndGgmJih0aGlzLmZpcnN0Rm9jdXNhYmxlRWw9'@;
put 'dGhpcy5mb2N1c0VsZW1lbnQodGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVsc1thXSksIXRoaXMuZmlyc3RGb2N1c2FibGVFbCk7YSsrKTt9Zm9jdXNMYXN0Rm9jdXNhYmxlKCl7Zm9yKGxldCBhPXRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHMubGVuZ3RoLTE7YT49MCYmKHRoaXMubGFz'@;
put 'dEZvY3VzYWJsZUVsPXRoaXMuZm9jdXNFbGVtZW50KHRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHNbYV0pLCF0aGlzLmxhc3RGb2N1c2FibGVFbCk7YS0tKTt9Zm9jdXNUcmFwRWxJZk91dHNpZGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxl'@;
put 'bWVudCl8fHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpfWZvY3VzRWxlbWVudChhKXtyZXR1cm4gYSYmYS5mb2N1cyYmKGEuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09YSk/YTpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KSh0dChOaSksdHQoRWEpLHR0KGR5ZSksdHQoRm8pLHR0KEdzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckZvY3VzVHJhcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJmb2N1c2luIixmdW5jdGlvbihmKXtyZXR1cm4gZC5v'@;
put 'bkZvY3VzSW4oZil9LDAsZmYpfSxpbnB1dHM6e2NvbmZpZzpbImNsckZvY3VzVHJhcCIsImNvbmZpZyJdfX0pLGN9KSgpLHlFPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5c'@;
put 'dTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvb11dfSksY30pKCksZnllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90ZXh0Q29udGVudENoYW5nZT1uZXcgYmV9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50fXNldCB0ZXh0Q29udGVudChhKXt0aGlz'@;
put 'Ll90ZXh0Q29udGVudD1hLHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLm5leHQoYSl9Z2V0IHRleHRDb250ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxweWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7'@;
put 'aW1wb3J0czpbW29vXV19KSxjfSkoKSxteWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHhiXV19KSxjfSkoKSxkaD0o'@;
put 'KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmJ1dHRvblN0YXRlPVV1LHRoaXMuc3RhdGU9VXUuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7aWYoYSE9PXRoaXMu'@;
put 'c3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSBVdS5ERUZBVUxUOnRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0'@;
put 'aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSBVdS5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRp'@;
put 'dmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgVXUuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNl'@;
put 'IFV1LkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKFV1LkRFRkFVTFQpfXRoaXMuY2xyTG9hZGluZ0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll'@;
put 'bnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7ZH1weGApfX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkaXNhYmxl'@;
put 'ZCIsZC5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTp2Yix1c2VFeGlzdGluZzpjfV0pXSxhdHRyczpnN2UsbmdDb250ZW50U2Vs'@;
put 'ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmKFRpKCksQnIoMCwwKSxRZSgxLG03ZSwyLDEsInNwYW4iLDEpLFFlKDIsdjdlLDIsMSwic3BhbiIsMSksUWUoMyxfN2UsMiwxLCJzcGFuIiwxKSxVcigpKSwyJmEmJihSZSgibmdTd2l0Y2giLGQuc3RhdGUpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUu'@;
put 'TE9BRElORyksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0sZGVwZW5kZW5jaWVzOltuZCx0aF0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImRl'@;
put 'ZmF1bHRCdXR0b24iLFtoYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjB9KV0pXSksYTEoInNwaW5uZXIiLFtoYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1'@;
put 'KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pLGExKCJ2YWxpZGF0ZWQiLFtoYygiOmVudGVyIixbcnUoIjYwMG1zIixGbWUoW19zKHt0cmFu'@;
put 'c2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksX3Moe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksX3Moe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEp'@;
put 'IixvZmZzZXQ6MX0pXSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxfeWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9'@;
put 'LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxieWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKERLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbX3llLG15ZV19KSxjfSkoKSx5eWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbIm5nLWNvbXBvbmVudCJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe30sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksd0U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZp'@;
put 'KHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksd3llPTAsYWQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250cm9sLSIrICsrd3llLHRoaXMuX2lkQ2hhbmdlPW5ldyBUZSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lk'@;
put 'fXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0'@;
put 'b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxDeWU9MCxLNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRhaW5lci0iKyArK0N5ZSx0aGlzLl9pZENoYW5nZT1uZXcgVGUodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9p'@;
put 'ZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7bGV0IEZGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJhYnN0cmFjdCJ9Z2V0IGlkKCl7'@;
put 'cmV0dXJuIHRoaXMuY29udGFpbmVySWRTZXJ2aWNlP2Ake3RoaXMuY29udGFpbmVySWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6dGhpcy5jb250cm9sSWRTZXJ2aWNlP2Ake3RoaXMuY29udHJvbElkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOm51'@;
put 'bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLFN5ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMu'@;
put 'Y29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImVycm9yIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpj'@;
put 'LHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1lcnJvciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJpZCIsZC5pZCksZHIoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbZW9dLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6'@;
put 'MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIRj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRT'@;
put 'ZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImhlbHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtaGVscGVyIl1d'@;
put 'LGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxkcigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGko'@;
put 'KSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGswPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgYmUsdGhpcy5faGVscGVycz1uZXcgYmV9Z2V0IGNvbnRyb2xDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2xDaGFuZ2VzLmFz'@;
put 'T2JzZXJ2YWJsZSgpfWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJvbChhKXt0aGlzLl9jb250cm9sQ2hhbmdlcy5uZXh0KGEpfXNldEhlbHBlcnMoYSl7dGhpcy5faGVscGVycy5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgQTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuTk9ORT0iTk9ORSIsYy5WQUxJRD0iVkFMSUQiLGMuSU5WQUxJRD0iSU5WQUxJRCIsY30o'@;
put 'QTB8fHt9KTtsZXQgbGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3RhdHVzQ2hhbmdlcz1uZXcgVGUoQTAuTk9ORSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xT'@;
put 'ZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShkPT57ZCYmKHRoaXMuY29udHJvbD1kLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZSgpfSkpKX0pKX1nZXQgc3RhdHVz'@;
put 'Q2hhbmdlcygpe3JldHVybiB0aGlzLl9zdGF0dXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10cmlnZ2VyU3RhdHVzQ2hhbmdlKCl7aWYodGhpcy5jb250cm9sKXtjb25zdCBhPUEwW3Ro'@;
put 'aXMuY29udHJvbC5zdGF0dXNdO3RoaXMuX3N0YXR1c0NoYW5nZXMubmV4dChbIlZBTElEIiwiSU5WQUxJRCJdLmluY2x1ZGVzKGEpP2E6QTAuTk9ORSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihrMCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rv'@;
put 'a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBYNT1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5DT01QQUNUPSJjb21wYWN0IixjfShYNXx8e30pO2xldCBPZj0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlzLm1heExhYmVsU2l6ZT0xMix0aGlzLmxheW91dD1YNS5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKFg1KS5tYXAoYT0+WDVbYV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1cm4g'@;
put 'dGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoYSl7dGhpcy5sYWJlbFNpemVJc1ZhbGlkKGEpJiYodGhpcy5fbGFiZWxTaXplPWEpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1'@;
put 'LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1LkhPUklaT05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09WDUuQ09NUEFDVH1pc1ZhbGlkKGEpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGEpPi0xfWxhYmVsU2l6ZUlz'@;
put 'VmFsaWQoYSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYSkmJmE+PXRoaXMubWluTGFiZWxTaXplJiZhPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjfSksY30pKCksVXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPV8sdGhpcy5lbmFibGVH'@;
put 'cmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgbGFiZWxUZXh0KCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7KHRoaXMuY29udHJvbElkU2VydmljZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNl'@;
put 'KSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxhYmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRo'@;
put 'aXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGBjbHItY29s'@;
put 'LW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYhdGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWRDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuZm9yQXR0cj1hKSl9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhZCw4KSx0dChPZiw4KSx0dChrMCw4'@;
put 'KSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJmb3IiLGQuZm9yQXR0cil9LGlucHV0czp7Zm9yQXR0cjpbImZvciIsImZvckF0dHIiXX19KSxj'@;
put 'fSkoKSxNeWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZGe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxk'@;
put 'cigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9QTAuTk9ORSxkPSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIEEwLlZBTElEOmYucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIEEw'@;
put 'LklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNl'@;
put 'cnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxkKXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChmPT57Zi5zdGFydHNXaXRoKCJj'@;
put 'bHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoT2YsOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEE4PSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLl9keW5hbWljPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1'@;
put 'YnNjcmlwdGlvbnMucHVzaCh0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShfPT57dGhpcy5zdGF0ZT1fLHRoaXMudXBkYXRlSGVscGVycygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hh'@;
put 'bmdlcy5zdWJzY3JpYmUoXz0+e3RoaXMuY29udHJvbD1ffSkpfWdldCBzaG93SGVscGVyKCl7cmV0dXJuISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnQmJighIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudCYmKCF0aGlzLnRvdWNoZWR8fHRoaXMuc3RhdGU9PT1BMC5OT05FKXx8IXRo'@;
put 'aXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09QTAuSU5WQUxJRCl9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRCYm'@;
put 'ISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5JTlZBTElEJiYhIXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8udG91Y2hl'@;
put 'ZH1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29udHJvbENsYXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5jb250cm9sQ2xhc3Mo'@;
put 'IXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMudG91Y2hlZD9BMC5OT05FOnRoaXMuc3RhdGUsdGhpcy5hZGRHcmlkKCkpfWFkZEdyaWQoKXtyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVy'@;
put 'dGljYWwoKX11cGRhdGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlzLnNob3dJbnZhbGlkfHx0aGlzLnNob3dIZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMuc2hvd0ludmFsaWQs'@;
put 'c2hvd0hlbHBlcjp0aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGxkKSx0dChPZiw4KSx0dChjZCksdHQoazApKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxjb250ZW50'@;
put 'UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoSW8oaCxVcyw1KSxJbyhoLE15ZSw1KSxJbyhoLFN5ZSw1KSxJbyhoLEhGLDUpKSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLmxhYmVsPWYuZmlyc3QpLHNpKGY9YWkoKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmly'@;
put 'c3QpLHNpKGY9YWkoKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyBDRXtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3Is'@;
put 'IXRoaXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoSzApLGY9dGhpcy5pbmplY3Rvci5nZXQoTmkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoeXllKSk7Y29uc3QgXz1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5'@;
put 'KGwpLFQ9W107VFtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBXPWEuY3JlYXRlQ29tcG9uZW50KF8sdm9pZCAwLHZvaWQgMCxUKTthLnJlbW92ZSgwKSxXLmluc3RhbmNlLl9keW5hbWljPSEwLHRoaXMuaW5qZWN0b3I9Vy5pbmplY3Rvcn19Z2V0KGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0'@;
put 'b3IuZ2V0KGwsYSl9fWxldCBORj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZD1uZXcgYmV9Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZC5hc09ic2VydmFibGUoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZC5uZXh0KCl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFQ4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3RoaXMudmNyPWEsdGhpcy53cmFwcGVy'@;
put 'VHlwZT1kLHRoaXMubmdDb250cm9sPWYsdGhpcy5pbmRleD0wLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnJlbmRlcmVyPV8sdGhpcy5lbD1UO3RyeXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9aC5nZXQoazApLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KGxkKSx0aGlzLmNv'@;
put 'bnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQoY2QpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWguZ2V0KE5GKX1jYXRjaHt9dGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlJiZ0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuaW5pdENvbnRyb2xDbGFzcyhfLFQubmF0aXZlRWxlbWVudCksdGhpcy5tYXJr'@;
put 'Q29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5tYXJrQXNUb3VjaGVkKCl9KSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0'@;
put 'aGlzLm5nQ29udHJvbFNlcnZpY2UuaGVscGVyc0NoYW5nZS5zdWJzY3JpYmUoVz0+e3RoaXMuc2V0QXJpYURlc2NyaWJlZEJ5KFcpfSkpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJih0aGlzLmNvbnRyb2xJZFNl'@;
put 'cnZpY2UuaWQ9YSl9bmdPbkluaXQoKXt0aGlzLl9jb250YWluZXJJbmplY3Rvcj1uZXcgQ0UodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGFkKTt0cnl7dGhpcy5jb250YWluZXJJ'@;
put 'ZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KEs1KX1jYXRjaHt9dGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2Vy'@;
put 'dmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9sKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZp'@;
put 'Y2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0dXJuIGR9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNo'@;
put 'ZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoYSk7aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRB'@;
put 'dHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtsZXQgZD0iaGVscGVyIjty'@;
put 'ZXR1cm4gYS5zaG93SW52YWxpZD9kPSJlcnJvciI6YS5zaG93VmFsaWQmJihkPSJzdWNjZXNzIiksdGhpcy5jb250YWluZXJJZFNlcnZpY2U/dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWQuY29uY2F0KCItIixkKTp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/dGhpcy5jb250cm9sSWRTZXJ2aWNl'@;
put 'LmlkLmNvbmNhdCgiLSIsZCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KE9tKSx0dChFYSksdHQoenUpLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1'@;
put 'bmN0aW9uKGEsZCl7MSZhJiZ4dCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZ0MSgiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9fSksY30pKCksWEo9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2Vydmlj'@;
put 'ZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtjb25zdCBkPXBhcnNlSW50KGEsMTApfHwyO3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1TdWJtaXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJr'@;
put 'Q29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChPZiksdHQoTkYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpm'@;
put 'dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwy'@;
put 'JmEmJmRyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbImNsckxhYmVsU2l6ZSIsImxhYmVs'@;
put 'U2l6ZSJdfSxmZWF0dXJlczpbdGkoW09mLE5GXSldfSksY30pKCksWmM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxj'@;
put 'Llx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhXV19KSxjfSkoKTtjb25zdCBWRj1uZXcgTWkoIklTX1RPR0dMRSIpLEF5ZT17cHJvdmlkZTpWRix1c2VGYWN0b3J5OmZ1bmN0aW9uIGt5ZSgpe3JldHVybiBuZXcgVGUoITEpfX07bGV0IFQwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSl7dGhpcy5fZHluYW1pYz0hMSx0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMudG9nZ2xlPWR9KSl9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gt'@;
put 'd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsVXMsNyksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7'@;
put 'MiZhJiZkcigiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbdGkoW2FkLEF5ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dzdlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSh5N2UpLGtyKDApLGtyKDEsMSksUWUoMixiN2UsMSwwLCJsYWJlbCIsMCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEMD0oKCk9PntjbGFzcyBjIGV4'@;
put 'dGVuZHMgVDh7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKGEsVDAsZCxoLGYsXyksdGhpcy50b2dnbGU9VH1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCk7Y29uc3QgYT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihWRixudWxsKTthJiZudWxsIT09dGhpcy50b2dnbGUm'@;
put 'JmEubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSksUDQoImNsclRvZ2dsZSIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyQ2hlY2ti'@;
put 'b3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxmZWF0dXJlczpbZW9dfSksY30pKCksRDg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRo'@;
put 'aXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9'@;
put 'bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5jaGVja2JveGVzLmxlbmd0aD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNk'@;
put 'KSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LWNvbnRhaW5lciJdLFsiY2xyLXRvZ2dsZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxEMCw1KSwyJmEpe2xldCBm'@;
put 'O3NpKGY9YWkoKSkmJihkLmNoZWNrYm94ZXM9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9u'@;
put 'dWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbdGkoW2xkLGswLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpUN2UsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5n'@;
put 'SWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1'@;
put 'ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJh'@;
put 'cmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoQTdl'@;
put 'KSxrcigwKSxRZSgxLEM3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxRZSg1LFM3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLFFlKDYsTTdlLDEsMCwiY2RzLWljb24iLDMpLFFlKDcseDdlLDEsMCwiY2RzLWljb24iLDQpLFFlKDgsRTdlLDEsMCwi'@;
put 'bmctY29udGVudCIsMCksUWUoOSxrN2UsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xh'@;
put 'c3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRl'@;
put 'bmNpZXM6W1ppLFVzLHVjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxUeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBl'@;
put 'OmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLFpjLHdFXSxaY119KSxjfSkoKTtmdW5jdGlvbiB1ZChjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IHUyPSgoKT0+e2NsYXNzIGN7'@;
put 'Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9dWQoYSl9Z2V0IGludmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMu'@;
put 'X2ludmVyc2U9dWQoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPXVkKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVybiF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVt'@;
put 'PXVkKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0saG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtYnVz'@;
put 'eSIsITApLGRyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5uZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRz'@;
put 'OntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3Io'@;
put 'MCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxBYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO3ZhciB4'@;
put 'cD1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfSh4cHx8e30pO2xldCBKSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5wbGF0Zm9ybUlk'@;
put 'PWR9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKSh0dChOaSksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXNJdGVtIiwiIl1dfSksY30pKCksSTg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLmRpcmVjdGlvbj14cC5W'@;
put 'RVJUSUNBTCx0aGlzLmZvY3VzT25Mb2FkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBFcix0aGlzLl9jdXJyZW50PTB9Z2V0IGZvY3VzYWJsZUl0ZW1zKCl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuX2ZvY3VzYWJsZUl0ZW1zOnRoaXMu'@;
put 'Y2xyS2V5Rm9jdXNJdGVtcz90aGlzLmNscktleUZvY3VzSXRlbXMudG9BcnJheSgpOltdfXNldCBmb2N1c2FibGVJdGVtcyhhKXtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzYWJsZUl0ZW1zPWEsdGhpcy5pbml0aWFsaXplRm9jdXMoKSl9Z2V0IG5hdGl2ZUVsZW1l'@;
put 'bnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRJdGVtKCl7cmV0dXJuIHRoaXMuZm9jdXNh'@;
put 'YmxlSXRlbXNbdGhpcy5fY3VycmVudF19Z2V0IGN1cnJlbnRJdGVtRWxlbWVudCgpe3JldHVybiB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ/dGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50OnRoaXMuY3VycmVudEl0ZW19bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JJdGVtVXBkYXRlcygpKSx0aGlzLmluaXRpYWxpemVGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVLZXlib2FyZEV2ZW50KGEpe2lmKHRoaXMuY3VycmVu'@;
put 'dEl0ZW1FbGVtZW50IT09YS50YXJnZXQpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO3RoaXMucG9zaXRpb25JblJhbmdlKGQpJiYodGhpcy5jdXJyZW50PWQpfXRoaXMucHJldktleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKT90'@;
put 'aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQtMSk6dGhpcy5uZXh0S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50KzEpOmEuY29kZT09PXdvLkhvbWU/dGhpcy5tb3ZlVG8oMCk6YS5jb2RlPT09d28uRW5kJiZ0aGlz'@;
put 'Lm1vdmVUbyh0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSxURihhKX1zZXRDbGlja2VkSXRlbUN1cnJlbnQoYSl7Y29uc3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7ZD4tMSYmdGhpcy5tb3ZlVG8oZCl9Zm9jdXNDdXJyZW50KCl7dGhpcy5jdXJyZW50SXRlbS5mb2N1'@;
put 'cygpLHRoaXMuZm9jdXNDaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1tb3ZlVG8oYSl7dGhpcy5wb3NpdGlvbkluUmFuZ2UoYSkmJih0aGlzLmN1cnJlbnQ9YSx0aGlzLmZvY3VzQ3VycmVudCgpKX1wb3NpdGlvbkluUmFuZ2UoYSl7cmV0dXJuIGE+PTAmJmE8dGhpcy5mb2N1c2FibGVJdGVt'@;
put 'cy5sZW5ndGh9Y3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudC0xPj0wfWN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudCsxPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWluaXRpYWxpemVGb2N1cygpe3RoaXMu'@;
put 'Zm9jdXNhYmxlSXRlbXMmJnRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD49dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLHRoaXMuZm9jdXNPbkxvYWQmJih0aGlzLmN1cnJlbnRJ'@;
put 'dGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KCkpKX1uZXh0S2V5UHJlc3NlZChhKXtjb25zdCBkPWwyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgeHAuVkVSVElDQUw6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd247Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBk'@;
put 'PT09d28uQXJyb3dSaWdodDtjYXNlIHhwLkJPVEg6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd258fGQ9PT13by5BcnJvd1JpZ2h0O2RlZmF1bHQ6cmV0dXJuITF9fXByZXZLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSB4cC5WRVJUSUNB'@;
put 'TDpyZXR1cm4gZD09PXdvLkFycm93VXA7Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBkPT09d28uQXJyb3dMZWZ0O2Nhc2UgeHAuQk9USDpyZXR1cm4gZD09PXdvLkFycm93VXB8fGQ9PT13by5BcnJvd0xlZnQ7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0SXRlbVBvc2l0aW9uKGEpe3JldHVybiB0'@;
put 'aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YoYSk6dGhpcy5mb2N1c2FibGVJdGVtcy5tYXAoZD0+ZC5uYXRpdmVFbGVtZW50KS5pbmRleE9mKGEpfWxpc3RlbkZvckl0ZW1VcGRhdGVzKCl7cmV0dXJuIHRoaXMuY2xyS2V5Rm9jdXNJdGVtcy5jaGFuZ2Vz'@;
put 'LnN1YnNjcmliZSgoKT0+e3RoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXMiLCIiXV0sY29udGVudFF1'@;
put 'ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxKSiw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXli'@;
put 'b2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246WyJjbHJEaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxmb2N1c09uTG9hZDpbImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxm'@;
put 'b2N1c2FibGVJdGVtczpbImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdlIn0sYXR0cnM6RDdlLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRp'@;
put 'KCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxCRj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp'@;
put 'O2NvbnN0IEw4PW5ldyBNaSgiUE9QT1ZFUl9IT1NUX0FOQ0hPUiIpO2NsYXNzIER5ZXtjb250YWluc0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVtKGwp'@;
put 'fWlzRW1wdHkoKXtyZXR1cm4hKHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgpe2xldCBsO3JldHVybiB0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSksbH10b1N0'@;
put 'cmluZyhsLGE9LTEpe2xldCBkPSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVsW2FdJiYoZCs9bCYmdGhpcy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZoW2xdP2hb'@;
put 'bF06aC50b1N0cmluZygpLGQrPSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFpbnNJdGVtKGwpfHwodGhpcy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29uc3QgYT10'@;
put 'aGlzLm1vZGVsLmluZGV4T2YobCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhpcy5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBJeWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2RlbD1sfXVu'@;
put 'c2VsZWN0KGwpe3RoaXMuY29udGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMubW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9sJiZ0aGlz'@;
put 'Lm1vZGVsW2xdP3RoaXMubW9kZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBTRXt9ZnVuY3Rpb24gUUooYyl7cmV0dXJuW2Mse3Byb3ZpZGU6U0UsdXNlRXhpc3Rpbmc6Y31dfWNsYXNzIEx5ZSBleHRlbmRzIEl5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50'@;
put 'cyksdGhpcy5fZm9jdXNDaGFuZ2VkPW5ldyBUZShudWxsKX1nZXQgZm9jdXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlZC5hc09ic2VydmFibGUoKX1zZWxlY3QobCl7dGhpcy5tb2RlbCE9PWwmJih0aGlzLm1vZGVsPWwsdGhpcy5fZm9jdXNDaGFuZ2VkLm5leHQobCkpfX1s'@;
put 'ZXQgUnllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmc9ITEsdGhpcy5fY3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcgVGUoIiIpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQ9bmV3IHF4KDEpLHRoaXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0'@;
put 'Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudElucHV0KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYmIXRoaXMubXVsdGlzZWxlY3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZhbHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1'@;
put 'dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdldCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IG11bHRpc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsIGluc3RhbmNlb2YgRHllfXNl'@;
put 'bGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9nZ2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVj'@;
put 'dGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpOnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMu'@;
put 'c2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNl'@;
put 'bGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO1FKKCgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5zZWxlY3Rpb25TZXJ2aWNlPWgsdGhpcy5wbGF0'@;
put 'Zm9ybUlkPWYsdGhpcy5wc2V1ZG9Gb2N1cz1uZXcgTHllLHRoaXMub3B0aW9uRGF0YT1bXSx0aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQg'@;
put 'dHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3goYSl7dGhpcy5fbGlzdGJveD1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgdGV4dElu'@;
put 'cHV0KCl7cmV0dXJuIHRoaXMuX3RleHRJbnB1dH1zZXQgdGV4dElucHV0KGEpe3RoaXMuX3RleHRJbnB1dD1hLHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24iLGQ9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChkKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWZvY3VzSW5w'@;
put 'dXQoKXt0aGlzLnRleHRJbnB1dCYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpdGhp'@;
put 'cy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCBhO2E9dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVj'@;
put 'dGlvbk1vZGVsLm1vZGVsO2NvbnN0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmQoaD0+aC52YWx1ZT09PWEpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KGR8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRpb25WYWx1ZXMoYSl7'@;
put 'dGhpcy5vcHRpb25EYXRhPWF9aGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2F8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8oYSl7bGV0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmRJ'@;
put 'bmRleChoPT5oLmVxdWFscyh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsKSk7YT09PWQxLlVQPy0xPT09ZHx8MD09PWQ/ZD10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6ZC0tOmE9PT1kMS5ET1dOJiYoLTE9PT1kfHxkPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP2Q9MDpkKyspLHRoaXMucHNl'@;
put 'dWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVtkXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyhhKToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShp'@;
put 'ZCgxKSkuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLm1vdmVGb2N1c1RvKGEpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dChhKXtsZXQgZD0hMTtjb25zdCBoPWwyKGEua2V5KTtpZihhKXN3aXRjaChoKXtjYXNlIHdvLkVudGVyOnRoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZS5vcGVuJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5w'@;
put 'c2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSksZD0hMCk7YnJlYWs7Y2FzZSB3by5TcGFjZTp0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLGQ9ITApO2JyZWFrO2Nhc2Ugd28uQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0'@;
put 'aGlzLm9wZW5BbmRNb3ZlVG8oZDEuVVApLGQ9ITA7YnJlYWs7Y2FzZSB3by5BcnJvd0Rvd246dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKGQxLkRPV04pLGQ9ITA7YnJlYWs7ZGVmYXVsdDphLmtleSE9PXdvLlRhYiYmKCF0aGlzLnNlbGVjdGlv'@;
put 'blNlcnZpY2UubXVsdGlzZWxlY3RhYmxlfHxhLmtleSE9PXdvLkJhY2tzcGFjZSkmJmEua2V5IT09d28uRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIGR9c2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoYT0ic21vb3Ro'@;
put 'Iil7dGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6YSxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdwb3J0U2Nyb2xsaW5n'@;
put 'KGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl7UnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuZm9jdXNPdXRPZkNvbXBvbmVudChkKSYmKHRo'@;
put 'aXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29tcG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQoYSl7Y29uc3QgZD1hLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuISh0'@;
put 'aGlzLnRleHRJbnB1dC5jb250YWlucyhkKXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKGQpfHx0aGlzLmxpc3Rib3guY29udGFpbnMoZCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoS3MpLGFyKFJ5ZSksYXIoR3MpKX0sYy5cdTAy'@;
put 'NzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSk7bGV0IE95ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsbmIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sJGwsc2EsQkYsWmMsc2QseGIsQWJdLFpjLHNkXX0pLGN9KSgpLGpGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBOHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJj'@;
put 'bHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOlt0aShbbGQsazAsYWQsY2RdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOno3ZSxkZWNsczoxMCx2YXJzOjcsY29u'@;
put 'c3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlk'@;
put 'ZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJk'@;
put 'YW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYoVGkoajdlKSxrcigwKSxRZSgxLFA3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksa3IoNCwxKSxRZSg1LEY3ZSwxLDAsImNkcy1pY29uIiwzKSxRZSg2LEg3ZSwxLDAsImNkcy1pY29uIiw0KSx5ZSgpLFFlKDcsTjdlLDEsMCwibmctY29udGVudCIsMCksUWUo'@;
put 'OCxWN2UsMSwwLCJuZy1jb250ZW50IiwwKSxRZSg5LEI3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLFJlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxDZSgzKSxSZSgibmdJZiIsZC5zaG93'@;
put 'SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbWmksVXMsdWMscXNdLGVuY2Fwc3Vs'@;
put 'YXRpb246Mn0pLGN9KSgpLGYxPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEsakYsZCxoLGYsXyksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0'@;
put 'KHp1LDEwKSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySW5wdXQiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLGVR'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxaY10sWmNd'@;
put 'fSksY30pKCksekY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IFRlKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFB5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sZVEsc2FdXX0pLGN9KSgpO2NvbnN0IEh5ZT0vZCsuK20rLit5Ky9pLE55ZT0vbSsuK2QrLit5Ky9pLFZ5ZT0vZCt8bSt8eSsvaSxCeWU9L1xk'@;
put 'Ky9nLGp5ZT0vTW9iaS9pLHp5ZT0vXHUyMDBmL2csVUY9IllZWVkiLE1FPXtuYW1lOiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIixVRl19LFdGPXtuYW1lOiJNSURETEVfRU5ESUFOIixmb3JtYXQ6WyJNTSIsIkREIixVRl19LFV5ZT17bmFtZToiQklHX0VORElBTiIsZm9ybWF0'@;
put 'OltVRiwiTU0iLCJERCJdfTtmdW5jdGlvbiBuUShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3MgJHlle2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSxfPSExKXt0aGlzLmRheU1vZGVsPWwsdGhpcy5pc1RvZGF5c0RhdGU9YSx0aGlzLmlzRXhj'@;
put 'bHVkZWQ9ZCx0aGlzLmlzRGlzYWJsZWQ9aCx0aGlzLmlzU2VsZWN0ZWQ9Zix0aGlzLmlzRm9jdXNhYmxlPV99Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgcDF7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlz'@;
put 'LmRhdGU9ZH1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2Nv'@;
put 'bnN0IGE9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgcDEoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHAxKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21w'@;
put 'YXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCl9cGFkKGwpe3JldHVybiBsPDEwP2AwJHtsfWA6'@;
put 'YCR7bH1gfX1jbGFzcyBxeWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe3RoaXMuY2FsZW5kYXI9bCx0aGlzLnNlbGVjdGVkRGF5PWEsdGhpcy5mb2N1c2FibGVEYXk9ZCx0aGlzLnRvZGF5PWgsdGhpcy5maXJzdERheU9mV2Vlaz1mLHRoaXMuZXhjbHVkZWREYXRlcz1fLHRoaXMuY3Vyck1v'@;
put 'bnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9jYWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGwpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5zZXRG'@;
put 'b2N1c2FibGVGbGFnKGwsITApLHRoaXMuZm9jdXNhYmxlRGF5PWx9aW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpe2NvbnN0IGw9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGQ9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmll'@;
put 'dyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5jYWxlbmRhci5kYXlzLmxlbmd0aCtkKTtsZXQgZj1bXSxfPVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMobC5kYXlzLnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9u'@;
put 'dGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMsITEsITApLGg+MCYmKF89dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFy'@;
put 'VmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsXyksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29t'@;
put 'cGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSxfPWwudG9Db21wYXJpc29uU3RyaW5nKCk7cmV0dXJuIShfPj1oJiZfPD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2NvbnN0IGg9bC5tYXAoZj0+bmV3ICR5ZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRl'@;
put 'ZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KSYmKGhbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gWXllKGMs'@;
put 'bCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+PXRoaXMuZmlyc3REYXlPZldlZWs/ZC10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFy'@;
put 'LmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3QgaD1bLi4ubCwuLi5hLC4uLmRdLGY9W107Zm9yKGxldCBfPTA7Xzw2O18rKylmW19dPWguc2xpY2UoNypfLDcqKF8rMSkpO3JldHVybiBmfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2Vs'@;
put 'ZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbdGhpcy5zZWxlY3RlZERheS5kYXRlLTFdLmlzU2VsZWN0ZWQ9ITApfWluaXRpYWxpemVGb2N1c2FibGVEYXkoKXt0aGlzLmZvY3VzYWJsZURheSYmdGhp'@;
put 'cy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuZm9jdXNhYmxlRGF5KT90aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApOnRoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KT8odGhpcy5zZXRGb2N1c2FibGVG'@;
put 'bGFnKHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhp'@;
put 'cy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IHAxKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMuY3Vy'@;
put 'ck1vbnRoRGF5Vmlld3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfX1sZXQgVGI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3Jl'@;
put 'dHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1'@;
put 'cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRoc1dpZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVEYXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhp'@;
put 'cy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygp'@;
put 'fWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxkPWNPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKSxoPWNPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuTmFycm93KS5zbGljZSgpLGY9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IF89'@;
put 'MDtfPDc7XysrKWEucHVzaCh7ZGF5OmRbX10sbmFycm93OmhbX119KTtpZihmPjApe2NvbnN0IF89YS5zcGxpY2UoMCxmKTthLnB1c2goLi4uXyl9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlh'@;
put 'dGVkPXVPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuQWJicmV2aWF0ZWQpLnNsaWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPXVPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXpl'@;
put 'Rmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBQdWUoYyl7cmV0dXJuIEJsKGMpW3FvLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiB4Xyhj'@;
put 'LGwpe3JldHVybiB0ZChCbChjKVtxby5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2NhbGUseTAuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihLZCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p'@;
put 'LGN9KSgpO2NsYXNzIGQye2NvbnN0cnVjdG9yKGwsYSl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGh9aXNEYXlJbkNhbGVu'@;
put 'ZGFyKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBkMih0aGlzLnllYXItMSwxMSk6bmV3IGQyKHRoaXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3Jl'@;
put 'dHVybiAxMT09PXRoaXMubW9udGg/bmV3IGQyKHRoaXMueWVhcisxLDApOm5ldyBkMih0aGlzLnllYXIsdGhpcy5tb250aCsxKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBsPW5RKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5t'@;
put 'YXAoKGEsZCk9Pm5ldyBwMSh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IFBmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZT1uZXcgYmUsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJD'@;
put 'aGFuZ2U9bmV3IGJlLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgYmUsdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgYmV9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1n'@;
put 'ZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpc3BsYXllZENhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c09uQ2Fs'@;
put 'ZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c2VkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9bm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGEpe3RoaXMu'@;
put 'c2VsZWN0ZWREYXk9YSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5uZXh0KGEpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBkMih0'@;
put 'aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IGQyKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEp'@;
put 'KX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IGQyKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1t'@;
put 'b3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb0N1cnJlbnRNb250aCgpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpfHx0aGlz'@;
put 'LnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCkpLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5uZXh0KCl9aW5jcmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5mb2N1c2VkRGF5PXRoaXMuZm9jdXNlZERheS5pbmNyZW1lbnRCeShh'@;
put 'KSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy5mb2N1c2VkRGF5KT90aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLm5leHQodGhpcy5mb2N1c2VkRGF5KTp0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLmZvY3VzZWREYXkueWVhcix0aGlzLmZv'@;
put 'Y3VzZWREYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfXNldERpc3BsYXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hh'@;
put 'bmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgcDEodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1'@;
put 'bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE84PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pv'@;
put 'bmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRl'@;
put 'eD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gUnModGhp'@;
put 'cy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodXAoKSxJYSgoKT0+UnModGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihObyksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxQOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0'@;
put 'aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IHAxKDAsMCwxKSxtYXhEYXRlOm5ldyBwMSg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PU1FLHRoaXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5j'@;
put 'bGRyTG9jYWxlRGF0ZUZvcm1hdD10aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRlclRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXQ7cmV0'@;
put 'dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihhKXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcChfPT5wYXJzZUludChfLDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKGQsaC0x'@;
put 'LGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKF89PnBhcnNlSW50KF8sMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoZCxoLTEsZil9ZWxz'@;
put 'ZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoOTk5OSwxMSwzMSl9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4iIjtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0'@;
put 'cmluZygpOiIwIitkLF89aD45P2gudG9TdHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09TUU/Zit0aGlzLmRlbGltaXRlcnNbMF0rXyt0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PVdGP18r'@;
put 'dGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK18rdGhpcy5kZWxpbWl0ZXJzWzFdK2Z9cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWEpcmV0dXJu'@;
put 'IG51bGw7Y29uc3QgZD1hLm1hdGNoKEJ5ZSk7aWYoIWR8fDMhPT1kLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdFtoLGYsX109ZDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09TUU/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoXyxmLGgpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1h'@;
put 'dD09PVdGP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKF8saCxmKTp0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShoLGYsXyl9aW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKXtjb25zdCBhPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLmxvY2Fs'@;
put 'ZURpc3BsYXlGb3JtYXQ9SHllLnRlc3QoYSk/TUU6TnllLnRlc3QoYSk/V0Y6VXllLHRoaXMuZXh0cmFjdERlbGltaXRlcnMoKX1leHRyYWN0RGVsaW1pdGVycygpe2lmKHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQpe2NvbnN0IGQ9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNl'@;
put 'KHp5ZSwiIikuc3BsaXQoVnllKTtkJiY0PT09ZC5sZW5ndGg/dGhpcy5kZWxpbWl0ZXJzPVtkWzFdLGRbMl1dOmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgcmVjZWl2ZWQuIERlbGltaXRlcnMgZXh0cmFjdGVkOiAiLGQpfX1pc1ZhbGlkTW9udGgoYSl7cmV0dXJuIGE+'@;
put 'LTEmJmE8MTJ9aXNWYWxpZERhdGUoYSxkLGgpe3JldHVybiBoPjAmJmg8PW5RKGEsZCl9dmFsaWRhdGVBbmRHZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLF89K2QtMSxUPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aChfKXx8IXRoaXMuaXNWYWxpZERhdGUoZixfLFQpKXJldHVybiBudWxsO2Nv'@;
put 'bnN0IFc9ZnVuY3Rpb24gV3llKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lmKGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDAp'@;
put 'LGR9KGYpO3JldHVybi0xIT09Vz9uZXcgRGF0ZShXLF8sVCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoVGIpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxEYj0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgYmUsdGhpcy5fZGlydHlDaGFuZ2U9bmV3IGJlfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rp'@;
put 'cnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHJRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdG9nZ2xlU2VydmljZT1k'@;
put 'LHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mfWdldCBkYXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/'@;
put 'dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9b25E'@;
put 'YXlWaWV3Rm9jdXMoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWx9c2VsZWN0RGF5KCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRheVZpZXcuZGF5TW9kZWwpLHRo'@;
put 'aXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpLHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoUGYpLHR0KEtzKSx0dChEYiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6WyJjbHJEYXlWaWV3IiwiZGF5VmlldyJdfSxkZWNsczoyLHZhcnM6MTMsY29uc3RzOltbInR5cGUiLCJidXR0'@;
put 'b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9jdXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdG'@;
put 'b2N1cygpfSksTmUoMSkseWUoKSksMiZhJiYoZHIoImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1Nl'@;
put 'bGVjdGVkKSxUcigidGFiaW5kZXgiLGQuZGF5Vmlldy50YWJJbmRleCkoImFyaWEtY3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpLENlKDEp'@;
put 'LGdyKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksaVE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlz'@;
put 'Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZGF0ZUlPU2VydmljZT1mLHRoaXMuX2VsUmVmPV8sdGhpcy5fc3Vicz1bXSx0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMu'@;
put 'X2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl9'@;
put 'Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZv'@;
put 'Y3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChsMihhLmtleSkpe2Nhc2Ugd28uQXJyb3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhp'@;
put 'cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIHdvLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OmEu'@;
put 'cHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2Ugd28uQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDEpfX1pbml0'@;
put 'aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2'@;
put 'aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNj'@;
put 'cmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX0pKX1nZW5lcmF0ZUNhbGVuZGFyVmlldygpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWw9bmV3IHF5ZSh0aGlzLmNhbGVuZGFyLHRoaXMuc2VsZWN0ZWREYXksdGhpcy5mb2N1c2VkRGF5'@;
put 'LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vlayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYiksdHQoUGYpLHR0KE84KSx0dChQOCks'@;
put 'dHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6'@;
put 'W1sxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLCJyb2xlIiwiaGVhZGluZyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImNhbGVuZGFyLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9m'@;
put 'Il0sWyJyb2xlIiwiaGVhZGluZyIsMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJihtZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLFFlKDIsVTdlLDIsMiwidGgiLDIpLHllKCksUWUoMyxZN2UsMiwxLCJ0ciIsMykseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQuY2FsZW5kYXJW'@;
put 'aWV3TW9kZWwuY2FsZW5kYXJWaWV3KSl9LGRlcGVuZGVuY2llczpbclEseHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHhFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSx0aGlzLl9kb2N1bWVudCYmKHRo'@;
put 'aXMuX2lzVXNlckFnZW50TW9iaWxlPWp5ZS50ZXN0KGEuZGVmYXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5faW5uZXJXaWR0aD1hLmRlZmF1bHRWaWV3LmlubmVyV2lkdGgpfWdldCBpc0VuYWJsZWQoKXtyZXR1cm4hKHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9pbm5lcldpZHRo'@;
put 'PDc2OCYmdGhpcy5faXNVc2VyQWdlbnRNb2JpbGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEY4PSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoKXt0aGlzLnBvc2l0aW9uPXgwWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3Vy'@;
put 'cmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNo'@;
put 'YW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksb1E9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9ZCx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9aCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWYsdGhpcy5fZWxSZWY9Xyx0aGlzLl9mb2N1c2Vk'@;
put 'TW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlz'@;
put 'cGxheWVkQ2FsZW5kYXIubW9udGh9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPWwyKGEua2V5KTtkPT09d28uQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5k'@;
put 'ZXg+MD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dEb3duJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVs'@;
put 'dCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8Nj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250'@;
put 'aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4KzYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD41JiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRN'@;
put 'b250aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4LTYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19Y2hhbmdlTW9udGgoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKGEpLHRoaXMuX3ZpZXdNYW5hZ2Vy'@;
put 'U2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gYT09PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4PzA6LTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEY4KSx0dChUYiksdHQoUGYpLHR0KE84KSx0dChOaSkp'@;
put 'fSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9udGhwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSwyJmEmJmRyKCJtb250aHBp'@;
put 'Y2tlciIsITApfSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRo'@;
put 'IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmUWUoMCxXN2UsMiw0LCJidXR0b24iLDApLDImYSYmUmUoIm5nRm9yT2YiLGQubW9udGhOYW1lcyl9LGRlcGVuZGVuY2llczpbeHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIElie2NvbnN0cnVjdG9yKGwp'@;
put 'e3RoaXMueWVhcj1sLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3JldHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgSWIodGhpcy55'@;
put 'ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgSWIodGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJuIG5ldyBJYigobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UobCl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YobCk+LTF9Z2VuZXJhdGVZ'@;
put 'ZWFyUmFuZ2UoKXtjb25zdCBhPXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdlKGEsYSsxMCl9Z2VuZXJhdGVSYW5nZShsLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1sfSwoZCxoKT0+aCtsKX19bGV0IGFRPSgoKT0+e2NsYXNz'@;
put 'IGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9YSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnllYXJSYW5nZU1v'@;
put 'ZGVsPW5ldyBJYih0aGlzLmNhbGVuZGFyWWVhciksdGhpcy5fZm9jdXNlZFllYXI9dGhpcy5jYWxlbmRhclllYXJ9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlz'@;
put 'Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO2Q9PT13by5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMSkpOmQ9PT13by5BcnJvd0Rv'@;
put 'd24/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDEpKTpkPT09d28uQXJyb3dSaWdodD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoNSkpOmQ9PT13by5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5p'@;
put 'bmNyZW1lbnRGb2N1c1llYXJCeSgtNSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1wcmV2aW91c0RlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhp'@;
put 'cy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpfWN1cnJlbnREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5LnllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLmN1cnJl'@;
put 'bnREZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5leHREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwubmV4dERlY2FkZSgpfWdldFRhYkluZGV4KGEpe3JldHVybiB0aGlzLnllYXJSYW5n'@;
put 'ZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy5fZm9jdXNlZFllYXI9dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuY2FsZW5kYXJZZWFyKT90aGlzLmNhbGVuZGFyWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1pZGRsZVllYXIpLHRoaXMuX2ZvY3VzZWRZ'@;
put 'ZWFyPT09YT8wOi0xfWluY3JlbWVudEZvY3VzWWVhckJ5KGEpe3RoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuX2ZvY3VzZWRZZWFyK2EsdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9YT4wP3RoaXMueWVhclJhbmdlTW9k'@;
put 'ZWwubmV4dERlY2FkZSgpOnRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQZiksdHQo'@;
put 'RjgpLHR0KE84KSx0dChOaSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXllYXJwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURv'@;
put 'd24oZil9KSwyJmEmJmRyKCJ5ZWFycGlja2VyIiwhMCl9LGRlY2xzOjksdmFyczo3LGNvbnN0czpbWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJs'@;
put 'ZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb'@;
put 'InR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJidXR0b24iLDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSkscXQoMiwi'@;
put 'Y2RzLWljb24iLDIpLHllKCksbWUoMywiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERlY2FkZSgpfSkscXQoNCwiY2RzLWljb24iLDMpLHllKCksbWUoNSwiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2Fk'@;
put 'ZSgpfSkscXQoNiwiY2RzLWljb24iLDQpLHllKCkoKSxtZSg3LCJkaXYiLDUpLFFlKDgsRzdlLDIsNCwiYnV0dG9uIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlKSxDZSgxKSxUcigidGl0'@;
put 'bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNr'@;
put 'ZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDEpLFRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDIpLFJlKCJuZ0Zvck9mIixkLnll'@;
put 'YXJSYW5nZU1vZGVsLnllYXJSYW5nZSkpfSxkZXBlbmRlbmNpZXM6W3FzLHhzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxsUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1k'@;
put 'LHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9N'@;
put 'T05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0'@;
put 'cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4g'@;
put 'dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5n'@;
put 'ZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5h'@;
put 'dmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGOCksdHQoUGYpLHR0KFRiKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2Vy'@;
put 'Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZhcnM6MTQsY29uc3RzOltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJi'@;
put 'dXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIs'@;
put 'MSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUo'@;
put 'MCwiZGl2IiwwKSxOZSgxKSx5ZSgpLG1lKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb01vbnRoVmlldygpfSksTmUoNSkseWUoKSxtZSg2LCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxOZSg3KSx5ZSgpKCksbWUoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxxdCgxMCwiY2RzLWljb24iLDcpLHllKCksbWUoMTEsImJ1dHRvbiIsNikseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSkscXQoMTIsImNkcy1pY29uIiw4KSx5ZSgpLG1lKDEzLCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLHF0KDE0LCJjZHMtaWNvbiIsOSkseWUoKSgpKCkscXQo'@;
put 'MTUsImNsci1jYWxlbmRhciIpLG1lKDE2LCJkaXYiLDApLE5lKDE3KSx5ZSgpKSwyJmEmJihDZSgxKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoMyksVHIoImFyaWEtbGFiZWwiLGQubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLGQubW9udGhBdHRyU3Ry'@;
put 'aW5nKSxDZSgxKSxncigiICIsZC5jYWxlbmRhck1vbnRoLCIgIiksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksQ2UoMSksZ3IoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksQ2UoMiksVHIoImFyaWEtbGFiZWwiLGQuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRN'@;
put 'b250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mu'@;
put 'a2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxDZSgzKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOltpUSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksY1E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9u'@;
put 'U3RyaW5ncz1hLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWR9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzTW9udGhWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzWWVhclZpZXd9Z2V0IGlzRGF5'@;
put 'Vmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXd9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChGOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci12'@;
put 'aWV3LW1hbmFnZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImRpYWxvZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtbW9kYWwiLCEwKSgiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckRpYWxvZ0xhYmVsKSxk'@;
put 'cigiZGF0ZXBpY2tlciIsITApKX0sZmVhdHVyZXM6W3RpKFtPOF0pXSxkZWNsczozLHZhcnM6Myxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoUWUoMCwkN2UsMSwwLCJjbHItbW9udGhwaWNrZXIiLDApLFFlKDEscTdlLDEsMCwiY2xyLXllYXJwaWNr'@;
put 'ZXIiLDApLFFlKDIsSzdlLDEsMCwiY2xyLWRheXBpY2tlciIsMCkpLDImYSYmKFJlKCJuZ0lmIixkLmlzTW9udGhWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc1llYXJWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc0RheVZpZXcpKX0sZGVwZW5kZW5jaWVzOltvUSxhUSxsUSxaaV0sZW5jYXBz'@;
put 'dWxhdGlvbjoyfSksY30pKCksTGI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUsZ2Usd2UsRWUsWmUsb3Qpe3N1cGVyKG90LEVlLHdlLFplKSx0aGlzLnJlbmRlcmVyPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5kYXRlTmF2aWdhdGlv'@;
put 'blNlcnZpY2U9aCx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1mLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1fLHRoaXMuZGF0ZUlPU2VydmljZT1ULHRoaXMuY29tbW9uU3RyaW5ncz1XLHRoaXMuZm9jdXNTZXJ2aWNlPWllLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWdlLHRo'@;
put 'aXMuY29udHJvbENsYXNzU2VydmljZT13ZSx0aGlzLmxheW91dFNlcnZpY2U9RWUsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPVplLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPW90LHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb2N1c1NlcnZpY2UuZm9jdXND'@;
put 'aGFuZ2Uuc3Vic2NyaWJlKGV0PT57dGhpcy5mb2N1cz1ldH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfSkpfXNldCBjbHJQb3Np'@;
put 'dGlvbihhKXthJiZ4MFthXSYmKHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9uPXgwW2FdKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQg'@;
put 'b3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNh'@;
put 'YmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMu'@;
put 'aW5pdGlhbGl6ZUNhbGVuZGFyKCk6dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGF0ZUNoYW5nZXMoKSl9Z2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRhdGVJ'@;
put 'T1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEudG9EYXRlKCkpO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbCx7U0VMRUNURURfREFURTpkfSl8fHRoaXMuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9bGlzdGVuRm9yRGF0ZUNoYW5nZXMoKXtyZXR1'@;
put 'cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShjcCh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkpLnN1YnNjcmliZShhPT57aWYodGhpcy5pc0VuYWJsZWQpe2NvbnN0IGQ9dGhpcy5nZXRUb2dnbGVCdXR0b25MYWJlbChh'@;
put 'KSxoPXRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2ZUVsZW1lbnQ7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwiYXJpYS1sYWJlbCIsZCksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwidGl0bGUiLGQpfX0pfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZGF0ZU5hdmlnYXRpb25T'@;
put 'ZXJ2aWNlLmluaXRpYWxpemVDYWxlbmRhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoS3MpLHR0KFBmKSx0dCh4RSksdHQoRGIpLHR0KFA4KSx0dChFcyksdHQoekYpLHR0KEY4KSx0dChjZCksdHQoT2YsOCksdHQoazApLHR0'@;
put 'KGxkKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKFg3ZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJz'@;
put 'OjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1'@;
put 'dHM6e2NsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiJ9LGZlYXR1cmVzOlt0aShbYWQsS3MsSWYsUzgsVGIsY2QsekYsazAsUDgsUGYseEUsRGIsRjgsbGRdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOmE5ZSxkZWNsczoxMyx2YXJzOjE0LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRy'@;
put 'b2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbHJQb3BvdmVyQW5jaG9yIiwiIiwxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwiY2xhc3MiLCJjbHItaW5wdXQtZ3Jv'@;
put 'dXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIiw0LCJuZ0lmIl0sWyJjbHJGb2N1c1RyYXAiLCIiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xs'@;
put 'VG9DbG9zZSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJj'@;
put 'bGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCJdLFsiYWN0aW9uQnV0dG9uIiwi'@;
put 'Il0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2xyRm9jdXNUcmFwIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hl'@;
put 'Y2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaShzOWUpLGtyKDApLFFlKDEsSjdlLDEsMCwibGFiZWwiLDApLG1lKDIsImRpdiIsMSkoMywiZGl2Iiwy'@;
put 'KSg0LCJkaXYiLDMpLGtyKDUsMSksUWUoNixRN2UsMywxLCJidXR0b24iLDQpLFFlKDcsZTllLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw1KSx5ZSgpLFFlKDgsdDllLDEsMCwiY2RzLWljb24iLDYpLFFlKDksbjllLDEsMCwiY2RzLWljb24iLDcpLHllKCksUWUoMTAscjll'@;
put 'LDEsMCwibmctY29udGVudCIsMCksUWUoMTEsaTllLDEsMCwibmctY29udGVudCIsMCksUWUoMTIsbzllLDEsMCwibmctY29udGVudCIsMCkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNz'@;
put 'KCkpLENlKDIpLGRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLENlKDIpLFJlKCJuZ0lmIixkLmlzRW5hYmxlZCksQ2UoMSksUmUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lk'@;
put 'ZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5z'@;
put 'aG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbY1EsWmksVXMsdWMsd2IsTWIscXMsU2IsTXBdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLCRGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGll'@;
put 'LGdlLHdlLEVlLFplLG90KXtzdXBlcihhLExiLGQsXyxmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPV8sdGhpcy5jb250YWluZXI9VCx0aGlzLmRhdGVJT1NlcnZpY2U9Vyx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1pZSx0aGlzLmRhdGVwaWNrZXJFbmFi'@;
put 'bGVkU2VydmljZT1nZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9d2UsdGhpcy5wbGF0Zm9ybUlkPUVlLHRoaXMuZm9jdXNTZXJ2aWNlPVplLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1vdCx0aGlzLmRhdGVDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmluZGV4PTF9c2V0IGRhdGUo'@;
put 'YSl7dGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUodGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWEpfXNldCBtaW4oYSl7dGhpcy5k'@;
put 'YXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSl9c2V0IG1heChhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShhKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZDpudWxsfXNl'@;
put 'dCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5zZXREaXNhYmxlZCh1ZChhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9T'@;
put 'ZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIFJzKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNv'@;
put 'bnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0'@;
put 'eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnByb2Nlc3NJbml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9u'@;
put 'KCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlzLnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBp'@;
put 'Zih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsX109YS52YWx1ZS5zcGxpdCgiLSIpO3RoaXMudXBkYXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCtfKSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1'@;
put 'cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoYSl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5m'@;
put 'b2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoUDgpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJG'@;
put 'cm9tQ29udGFpbmVyKFBmKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcih4RSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKERiKSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMo'@;
put 'KXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11'@;
put 'cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSk7ZD90aGlzLmVtaXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UmJih0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj'@;
put 'ZS5zZWxlY3RlZERheT1oP25ldyBwMShoLmdldEZ1bGxZZWFyKCksaC5nZXRNb250aCgpLGguZ2V0RGF0ZSgpKTpudWxsKSx0aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmlu'@;
put 'ZyhhKTt0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpPyhhLnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNr'@;
put 'ZXJIYXNGb3JtQ29udHJvbCgpJiZkIT09dGhpcy5jb250cm9sLnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5'@;
put 'KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1Nl'@;
put 'cnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZCl9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoYSl7IWZ1bmN0aW9uIEd5ZShjLGwpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmbCBpbnN0YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYm'@;
put 'Yy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZjLmdldERhdGUoKT09PWwuZ2V0RGF0ZSgpfShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoYSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYo'@;
put 'dGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiBXaSh0aGlzLmRhdGVwaWNrZXJIYXNG'@;
put 'b3JtQ29udHJvbCgpKS5waXBlKElhKGE9PmEpLFNhKCgpPT50aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzKSxJYSgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVE'@;
put 'YXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpfWxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRl'@;
put 'RGF0ZShhLnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoSWEoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJv'@;
put 'bC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKElhKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNv'@;
put 'bnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShJYShhPT4hIWEpKS5zdWJzY3JpYmUoKCk9PnRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5m'@;
put 'b2N1c0lucHV0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0KE5pKSx0dChGbyksdHQoenUsMTApLHR0KExiLDgpLHR0KFA4LDgpLHR0KFBmLDgpLHR0KHhFLDgpLHR0KERiLDgp'@;
put 'LHR0KEdzKSx0dCh6Riw4KSx0dChPOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2V0Rm9jdXNTdGF0'@;
put 'ZXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSgiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblZhbHVlQ2hhbmdlKGYudGFyZ2V0KX0pLDImYSYmKHQxKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksVHIoInBsYWNlaG9sZGVyIixkLnBs'@;
put 'YWNlaG9sZGVyVGV4dCkoInR5cGUiLGQuaW5wdXRUeXBlKSxkcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGF0ZTpbImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4IixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntk'@;
put 'YXRlQ2hhbmdlOiJjbHJEYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFtPOF0pLGVvXX0pLGN9KSgpLHFGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWF9dmFsaWRhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlP'@;
put 'U2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKSxoPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksZj10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKGQmJmQ8dGhpcy5kYXRl'@;
put 'SU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKSlyZXR1cm57bWluOnttaW46aC50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKGQmJmQ+dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0Rh'@;
put 'dGUoKSlyZXR1cm57bWF4OnttYXg6Zi50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQOCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0'@;
put 'eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXV0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTppdSx1c2VFeGlzdGluZzpjLG11bHRpOiEwfV0pXX0pLGN9KSgpLFh5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsY21lLHVtZSl9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyx3RSxzZCx4YixzYSx5RSxaY11dfSksY30pKCk7bmV3IE1pKHZvaWQgMCk7bGV0IGV3ZT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoZG1lLGhtZSxvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxaY10sWmNdfSksY30pKCks'@;
put 'S0Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDcpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezImYSYmZHIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOlt0aShbYWRdKV0sbmdDb250ZW50U2VsZWN0b3JzOnU5ZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoYzllKSxrcigwKSxrcigxLDEp'@;
put 'LFFlKDIsbDllLDEsMCwibGFiZWwiLDApKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltaaSxVc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWEY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxL'@;
put 'RixkLGgsZixfKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KEVhKSx0dCh6dSwxMCksdHQoRm8pLHR0KE5pKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOltl'@;
put 'b119KSxjfSkoKSx0d2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3Rh'@;
put 'dGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMo'@;
put 'KX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoT2YsOCksdHQoY2QpLHR0KGswKSx0dChsZCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjbHItcmFkaW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWEYsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5yYWRpb3M9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm'@;
put 'KFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxp'@;
put 'bmUifSxmZWF0dXJlczpbdGkoW2swLGxkLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpfOWUsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNs'@;
put 'YXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi'@;
put 'c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIs'@;
put 'InN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkodjllKSxrcigwKSxRZSgxLGQ5ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxRZSg1LGg5'@;
put 'ZSwxLDAsIm5nLWNvbnRlbnQiLDApLFFlKDYsZjllLDEsMCwiY2RzLWljb24iLDMpLFFlKDcscDllLDEsMCwiY2RzLWljb24iLDQpLFFlKDgsZzllLDEsMCwibmctY29udGVudCIsMCksUWUoOSxtOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwh'@;
put 'ZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLHVjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxud2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp'@;
put 'e1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFpjLHdFLHNhXSxaY119KSxjfSkoKSxyd2U9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFpjLHdFLHNhXSxaY119KSxjfSkoKSxIOD0oKCk9'@;
put 'PntjbGFzcyBjIGV4dGVuZHMgQTh7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLm11'@;
put 'bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShhPT57YSYmKHRoaXMubXVsdGk9YS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgZGIsdGhpcy5jb250cm9sPWEpfSkpfXdyYXBwZXJD'@;
put 'bGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlzZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNkKSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9'@;
put 'd3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxkYiw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLm11bHRpcGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W3RpKFtsZCxrMCxhZCxj'@;
put 'ZF0pLGVvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RTllLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1h'@;
put 'dGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFs'@;
put 'aWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKHg5ZSksa3IoMCksUWUoMSxiOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksUWUoNSx5OWUsMSwwLCJjZHMtaWNvbiIsMyksUWUoNix3OWUsMSwwLCJjZHMtaWNvbiIs'@;
put 'NCkseWUoKSxRZSg3LEM5ZSwxLDAsIm5nLWNvbnRlbnQiLDApLFFlKDgsUzllLDEsMCwibmctY29udGVudCIsMCksUWUoOSxNOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIs'@;
put 'ZC5jb250cm9sQ2xhc3MoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLENlKDIpLFJlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dIZWxwZXIpLENlKDEpLFJlKCJuZ0lmIixkLnNo'@;
put 'b3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltaaSxVcyx1Yyxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTjg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxIOCxkLGgsZixfKSx0'@;
put 'aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTZWxlY3QiLCIiXV0saG9zdFZhcnM6'@;
put 'Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItc2VsZWN0IiwhMCl9LGZlYXR1cmVzOltlb119KSxjfSkoKSxpd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLCRsLHNhLFpjXSxaY119KSxjfSkoKSx1UT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQTh7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5j'@;
put 'dGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1mb3JtLWNvbnRyb2wi'@;
put 'LCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbdGkoW2xkLGswLGFkLGNkXSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpPOWUsZGVjbHM6MTAsdmFy'@;
put 'czo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIi'@;
put 'LCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwi'@;
put 'c3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmKFRpKFI5ZSksa3IoMCksUWUoMSxrOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksUWUoNSxBOWUsMSwwLCJjZHMtaWNvbiIsMyksUWUoNixUOWUsMSwwLCJjZHMtaWNvbiIsNCkseWUoKSxRZSg3LEQ5ZSwxLDAsIm5nLWNvbnRl'@;
put 'bnQiLDApLFFlKDgsSTllLDEsMCwibmctY29udGVudCIsMCksUWUoOSxMOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5n'@;
put 'SWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLHVjLHFz'@;
put 'XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxvd2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSx1USxkLGgsZixfKSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFz'@;
put 'KSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJl'@;
put 'czpbZW9dfSksY30pKCksc3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6'@;
put 'W1tvbywkbCxzYSxaY10sWmNdfSksY30pKCksZFE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxaYyxUeWUsT3llLFh5ZSxl'@;
put 'USxld2UsbndlLGl3ZSxzd2UscndlLFB5ZV19KSxjfSkoKSxoUT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp'@;
put 'LGF3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIEVFe31sZXQgUmI9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBiZX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRo'@;
put 'aXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURl'@;
put 'Ym91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IGJlfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29u'@;
put 'c3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8'@;
put 'KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8'@;
put 'MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2Vp'@;
put 'bCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBj'@;
put 'dXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9u'@;
put 'ZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVy'@;
put 'biB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMu'@;
put 'Y3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihSYikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEZmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgYmUsdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdl'@;
put 'LmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxs'@;
put 'KWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyBrRShhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1'@;
put 'YnNjcmliZSgpO2NvbnN0IF89dGhpcy5fYWxsLmZpbmRJbmRleChUPT5ULmZpbHRlcj09PWEpO18+PTAmJnRoaXMuX2FsbC5zcGxpY2UoXywxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChm'@;
put 'KSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRF'@;
put 'bWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoYXIoRXApLGFyKFJiKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3Mga0V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgQUU9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9m'@;
put 'IGtFP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLE9iPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBRXtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuc21hcnRU'@;
put 'b2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5lbGVtZW50UmVmPV8sdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9RGMoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5B'@;
put 'RlRFUixhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKFQ9Pnt0aGlzLm9wZW49VCx0aGlzLmFyaWFFeHBhbmRlZD1UfSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29w'@;
put 'ZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29wZW49YSl9'@;
put 'c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09u'@;
put 'RGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQt'@;
put 'Y29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8'@;
put 'fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChFcyksdHQoS3MpLHR0KEdzKSx0dChOaSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihh'@;
put 'LGQpe2lmKDEmYSYmUm8oUDllLDUsTmkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOlsiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19LG91dHB1dHM6e29w'@;
put 'ZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6RUUsdXNlRXhpc3Rpbmc6Y31dKSxlbyx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3Ii'@;
put 'LCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJhbmNob3IiLCIiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQ'@;
put 'b3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIs'@;
put 'MywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwi'@;
put 'YnV0dG9uIiwwLDEpLHF0KDIsImNkcy1pY29uIiwyKSx5ZSgpLFFlKDMsRjllLDUsMywiZGl2IiwzKSksMiZhJiYoZHIoImRhdGFncmlkLWZpbHRlci1vcGVuIixkLm9wZW4pKCJkYXRhZ3JpZC1maWx0ZXJlZCIsZC5hY3RpdmUpLFRyKCJhcmlhLWxhYmVsIixkLnRvZ2dsZUJ1dHRvbkFyaWFM'@;
put 'YWJlbCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpLENlKDIpLFRyKCJzdGF0dXMiLGQuYWN0aXZlPyJpbmZvIjpudWxsKSgic2hhcGUiLGQuYWN0aXZlPyJmaWx0ZXItZ3JpZC1jaXJjbGUiOiJmaWx0ZXItZ3JpZCIpLENlKDEp'@;
put 'LFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVz'@;
put 'Olt3YixNYixxcyxTYixNcCxGSl0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgSkZ7Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsbC5pbmRleE9mKCIuIik+PTAmJih0aGlzLnNwbGl0UHJvcD1sLnNwbGl0KCIuIikpfWdldFByb3BWYWx1ZShsKXtpZih0aGlzLnNwbGl0UHJvcCl7'@;
put 'bGV0IGE9bDtmb3IoY29uc3QgZCBvZiB0aGlzLnNwbGl0UHJvcCl7aWYobnVsbD09PWF8fHR5cGVvZiBhPiJ1Inx8dHlwZW9mIGFbZF0+InUiKXJldHVybjthPWFbZF19cmV0dXJuIGF9cmV0dXJuIGxbdGhpcy5wcm9wXX19Y2xhc3MgVEV7Y29uc3RydWN0b3IobCxhPSExKXt0aGlzLnByb3A9'@;
put 'bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1hY2NlcHRzKGwsYSxkKXtjb25zdCBoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh2b2lkIDA9PT1ofHxudWxsIT09YSYmKCJudW1iZXIiIT10eXBlb2YgaHx8aDxhKXx8bnVsbCE9PWQmJigi'@;
put 'bnVtYmVyIiE9dHlwZW9mIGh8fGg+ZCkpfX1jbGFzcyBKNXtjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgYmUsdGhpcy5fbG93PW51bGwsdGhpcy5faGlnaD1udWxsfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxl'@;
put 'KCl9Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuX2xvdyx0aGlzLl9oaWdoXX1zZXQgdmFsdWUobCl7Y29uc3QgYT1sWzBdLGQ9bFsxXTsoYSE9PXRoaXMuX2xvd3x8ZCE9PXRoaXMuX2hpZ2gpJiYodGhpcy5fbG93PWEsdGhpcy5faGlnaD1kLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93'@;
put 'LHRoaXMuX2hpZ2hdKSl9Z2V0IGxvdygpe3JldHVybiB0aGlzLl9sb3d9c2V0IGxvdyhsKXtsIT09dGhpcy5fbG93JiYodGhpcy5fbG93PWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgaGlnaCgpe3JldHVybiB0aGlzLl9oaWdofXNldCBoaWdoKGwp'@;
put 'e2whPT10aGlzLl9oaWdoJiYodGhpcy5faGlnaD1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBURT97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLGxvdzp0aGlzLl9sb3cs'@;
put 'aGlnaDp0aGlzLl9oaWdofTp0aGlzfWlzQWN0aXZlKCl7cmV0dXJuIG51bGwhPT10aGlzLl9sb3d8fG51bGwhPT10aGlzLmhpZ2h9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5fbG93LHRoaXMuX2hpZ2gpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5j'@;
put 'ZW9mIEo1JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIFRFP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBURSYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLmxvdz09PXRoaXMuX2xvdyYmbC5oaWdoPT09dGhpcy5faGlnaDpsPT09dGhpcyl9fWxldCBmUT0oKCk9Pntj'@;
put 'bGFzcyBjIGV4dGVuZHMgQUV7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9Xyx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBFcix0aGlz'@;
put 'Lm9wZW49ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGEpP2EmJihhWzBdIT09dGhpcy5maWx0ZXIubG93fHxhWzFdIT09dGhp'@;
put 'cy5maWx0ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBhWzBdP2FbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgYVsxXT9hWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1'@;
put 'ZXM9YX1zZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2Yga0U/YTpuZXcgSjUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZXMpfWdl'@;
put 'dCBtYXhQbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1p'@;
put 'blZhbHVlfWdldCBsb3coKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmxvdz8odGhpcy5maWx0'@;
put 'ZXIubG93PWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlz'@;
put 'LmZpbHRlci5oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIu'@;
put 'aGlnaD8odGhpcy5maWx0ZXIuaGlnaD1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhp'@;
put 'cy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3Vs'@;
put 'YXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2Ny'@;
put 'aWJlKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpLHR0KGgxKSx0dChFcyksdHQoS3MpLHR0KE5vKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSx2aWV3UXVlcnk6'@;
put 'ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhIOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksc2koaD1haSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbImNsckZpbHRlck1pblBs'@;
put 'YWNlaG9sZGVyIiwibWluUGxhY2Vob2xkZXIiXSxtYXhQbGFjZWhvbGRlcjpbImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSx2YWx1ZTpbImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1lcmljRmlsdGVyOlsiY2xyRGdOdW1lcmljRmlsdGVyIiwi'@;
put 'Y3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOkVFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjYsdmFyczo4LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xy'@;
put 'RGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImxvdyIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWxDaGFuZ2Ui'@;
put 'XSxbImlucHV0X2xvdyIsIiJdLFsxLCJkYXRhZ3JpZC1maWx0ZXItaW5wdXQtc3BhY2VyIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImhpZ2giLDEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIi'@;
put 'LCJuZ01vZGVsQ2hhbmdlIl0sWyJpbnB1dF9oaWdoIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLWRnLWZpbHRlciIsMCkseHQoImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3Blbj1mfSksbWUoMSwiaW5wdXQiLDEsMiks'@;
put 'eHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmxvdz1mfSkseWUoKSxxdCgzLCJzcGFuIiwzKSxtZSg0LCJpbnB1dCIsNCw1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGlnaD1mfSkseWUoKSgpKSwyJmEmJihSZSgiY2xyRGdGaWx0ZXIi'@;
put 'LGQucmVnaXN0ZXJlZCkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxDZSgxKSxSZSgibmdNb2RlbCIsZC5sb3cpKCJwbGFjZWhvbGRlciIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxDZSgzKSxSZSgibmdNb2RlbCIsZC5o'@;
put 'aWdoKSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSksVHIoImFyaWEtbGFiZWwiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W09iLGFFLFdhLEJzLE9zXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBERXtjb25zdHJ1Y3RvcihsLGE9ITEp'@;
put 'e3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IEpGKGwpfWFjY2VwdHMobCxhKXtjb25zdCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh0eXBlb2YgZD4idSIpJiYodGhpcy5leGFjdD8oIiIrZCkudG9Mb3dlckNhc2UoKT09PWE6'@;
put 'KCIiK2QpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MCl9fWNsYXNzIFE1e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBiZSx0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0iIn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlz'@;
put 'Ll9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIERFP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1'@;
put 'ZX06dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGwpe2x8fChsPSIiKSxsIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1sLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWwudG9Mb3dlckNhc2UoKS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0'@;
put 'KGwpKX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBRNSYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBERT90aGlzLmZp'@;
put 'bHRlckZuIGluc3RhbmNlb2YgREUmJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC52YWx1ZT09PXRoaXMudmFsdWU6bD09PXRoaXMpfX1sZXQgUUY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEFFe2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSksdGhpcy5kb21B'@;
put 'ZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT1fLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEVyLHRoaXMub3Blbj0hMSx0aGlzLnN1YnM9W119c2V0IGN1c3RvbVN0cmluZ0ZpbHRlcihhKXt0aGlzLnNldEZpbHRl'@;
put 'cihhIGluc3RhbmNlb2Yga0U/YTpuZXcgUTUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoYSl7'@;
put 'dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgp'@;
put 'e3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pv'@;
put 'bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEu'@;
put 'dW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChoMSksdHQoRXMpLHR0KEtzKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3'@;
put 'UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhOOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksc2koaD1haSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbImNsckZpbHRlclBs'@;
put 'YWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiXSxjdXN0b21TdHJpbmdGaWx0ZXI6WyJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVD'@;
put 'aGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOkVFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjMsdmFyczo1LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0'@;
put 'ZSIsIm9mZiIsIm5hbWUiLCJzZWFyY2giLDEsImNsci1pbnB1dCIsMywibmdNb2RlbCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbENoYW5nZSJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItZGctZmlsdGVyIiwwKSx4dCgiY2xyRGdGaWx0ZXJP'@;
put 'cGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vcGVuPWZ9KSxtZSgxLCJpbnB1dCIsMSwyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudmFsdWU9Zn0pLHllKCkoKSksMiZhJiYoUmUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpKCJjbHJEZ0ZpbHRl'@;
put 'ck9wZW4iLGQub3BlbiksQ2UoMSksUmUoIm5nTW9kZWwiLGQudmFsdWUpKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5wbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbT2IsV2EsQnMsT3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgp'@;
put 'LGtwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQi'@;
put 'XV0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLFY4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGlvbmFibGVDb3VudD0wfWdldCBoYXNBY3Rpb25hYmxlUm93KCl7cmV0dXJuIHRoaXMuYWN0aW9uYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudCsr'@;
put 'fXVucmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxCOD0oKCk9PntjbGFzcyBjIGV4dGVuZHMg'@;
put 'dzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5yb3dBY3Rpb25zPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLnJvd0FjdGlv'@;
put 'bnMuaGFzQWN0aW9uYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KFY4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0'@;
put 'dXJlczpbZW9dfSksY30pKCksaDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9zdGF0ZT1uZXcgVGUodGhpcy50b2dnbGVTdGF0ZSl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5h'@;
put 'YmxlZChhKXt0aGlzLl9lbmFibGVkPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3RhdGV9Y2xvc2UoKXt0aGlzLnRvZ2ds'@;
put 'ZVN0YXRlPSExLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5idXR0b24mJih0aGlzLmJ1dHRvbi5mb2N1cygpLHRoaXMuYnV0dG9uPW51bGwpfW9wZW4oYSxkKXt0aGlzLmNhY2hlPWEsdGhpcy5idXR0b249ZCx0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRl'@;
put 'Lm5leHQodGhpcy50b2dnbGVTdGF0ZSl9dG9nZ2xlKGEsZCl7dGhpcy5pc1Jvd09wZW4oYSl8fCFhP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oYSxkKX1pc1Jvd09wZW4oYSl7cmV0dXJuISghdGhpcy50b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhhc0V4'@;
put 'cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5kYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihoMikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHo4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3OHtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGct'@;
put 'cm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZGFibGVDb3VudD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KGo4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y2xhc3MgSUV7Y29uc3RydWN0b3IobCl7'@;
put 'dGhpcy5wcm9wPWwsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1jb21wYXJlKGwsYSl7bGV0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKSxoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUoYSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnRvTG93ZXJDYXNl'@;
put 'KCkpLCJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvd2VyQ2FzZSgpKSx0eXBlb2YgZD4idSJ8fG51bGw9PT1kP3R5cGVvZiBoPiJ1Inx8bnVsbD09PWg/MDoxOnR5cGVvZiBoPiJ1Inx8bnVsbD09PWh8fGQ8aD8tMTpkPmg/MTowfX12YXIgSTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5V'@;
put 'TlNPUlRFRD0wXT0iVU5TT1JURUQiLGNbYy5BU0M9MV09IkFTQyIsY1tjLkRFU0M9LTFdPSJERVNDIixjfShJMHx8e30pO2xldCBlSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1w'@;
put 'bGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3Jh'@;
put 'cHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhWOWUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29sdW1uUG9ydGFs'@;
put 'IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLEI5ZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsRWMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTEU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5f'@;
put 'cmV2ZXJzZT0hMSx0aGlzLl9jaGFuZ2U9bmV3IGJlfWdldCBjb21wYXJhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmF0b3J9c2V0IGNvbXBhcmF0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlz'@;
put 'LnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgcmV2ZXJzZSgpe3JldHVybiB0aGlzLl9yZXZlcnNlfXNldCByZXZlcnNlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9yZXZlcnNlPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNl'@;
put 'ci5jaGFuZ2VEb25lKCl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKGEsZCl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuY29tcGFyYXRvcj09PWE/dGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmR8fCF0aGlz'@;
put 'Ll9yZXZlcnNlOih0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmQpLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWNsZWFyKCl7dGhpcy5jb21wYXJhdG9yPW51bGx9Y29tcGFyZShhLGQpe3JldHVybih0aGlz'@;
put 'LnJldmVyc2U/LTE6MSkqdGhpcy5jb21wYXJhdG9yLmNvbXBhcmUoYSxkKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFJiKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxm'@;
put 'YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIGYyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQUxJR05fQ09MVU1OUz0wXT0iQUxJR05fQ09MVU1OUyIsY1tjLkNBTENVTEFURV9NT0RFX09OPTFdPSJDQUxDVUxBVEVfTU9ERV9PTiIsY1tjLkNBTENVTEFURV9NT0RFX09GRj0yXT0iQ0FM'@;
put 'Q1VMQVRFX01PREVfT0ZGIixjW2MuQ0xFQVJfV0lEVEhTPTNdPSJDTEVBUl9XSURUSFMiLGNbYy5DT01QVVRFX0NPTFVNTl9XSURUSFM9NF09IkNPTVBVVEVfQ09MVU1OX1dJRFRIUyIsY30oZjJ8fHt9KTtsZXQgZWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlbmRlclN0'@;
put 'ZXA9bmV3IGJlLHRoaXMuYWxyZWFkeVNpemVkPSExfWdldCByZW5kZXJTdGVwKCl7cmV0dXJuIHRoaXMuX3JlbmRlclN0ZXAuYXNPYnNlcnZhYmxlKCl9ZmlsdGVyUmVuZGVyU3RlcHMoYSl7cmV0dXJuIHRoaXMucmVuZGVyU3RlcC5waXBlKElhKGQ9PmE9PT1kKSl9cmVzaXplKCl7dGhpcy5f'@;
put 'cmVuZGVyU3RlcC5uZXh0KGYyLkNBTENVTEFURV9NT0RFX09OKSx0aGlzLmFscmVhZHlTaXplZCYmdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNMRUFSX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0'@;
put 'KGYyLkFMSUdOX0NPTFVNTlMpLHRoaXMuYWxyZWFkeVNpemVkPSEwLHRoaXMuX3JlbmRlclN0ZXAubmV4dChmMi5DQUxDVUxBVEVfTU9ERV9PRkYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rv'@;
put 'cnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx0SD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5vcmdhbml6ZXI9aCx0aGlzLl9yZXNpemVkQnk9MH1nZXQgcmVzaXplZEJ5KCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZWRCeX1nZXQg'@;
put 'bWluQ29sdW1uV2lkdGgoKXtyZXR1cm4gdGhpcy5kb21BZGFwdGVyLm1pbldpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl8fDk2fWdldCBtYXhSZXNpemVSYW5nZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplLXRoaXMubWluQ29sdW1uV2lkdGh9Z2V0IHdpZHRoQWZ0ZXJSZXNp'@;
put 'emUoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZSt0aGlzLl9yZXNpemVkQnl9c3RhcnRSZXNpemUoKXt0aGlzLl9yZXNpemVkQnk9MCx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITAsdGhpcy53aWR0aEJlZm9yZVJlc2l6ZT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0'@;
put 'aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLndpZHRofWVuZFJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfWNhbGN1bGF0ZVJlc2l6ZShhKXthPC10aGlzLm1heFJlc2l6ZVJhbmdlPyh0aGlzLl9yZXNpemVkQnk9LXRoaXMubWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6'@;
put 'ZVJhbmdlPSExKToodGhpcy5fcmVzaXplZEJ5PWEsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKGgxKSxhcihlZykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9y'@;
put 'eTpjLlx1MDI3NWZhY30pLGN9KSgpLG5IPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWF9Z2V0IHRhYmxlUmVmKCl7cmV0dXJuIHRoaXMuX3RhYmxlUmVmfXNldCB0YWJsZVJlZihhKXt0aGlzLl90YWJsZVJlZj1hfXNldCB0YWJsZShhKXtScyh0aGlzLnBs'@;
put 'YXRmb3JtSWQpJiZhLm5hdGl2ZUVsZW1lbnQmJih0aGlzLnRhYmxlUmVmPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSl9Z2V0Q29sdW1uRHJhZ0hlaWdodCgpe3JldHVybiB0aGlzLnRhYmxlUmVmP2Ake3RoaXMudGFibGVSZWYuY2xpZW50SGVpZ2h0'@;
put 'fXB4YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGdRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3Ro'@;
put 'aXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9Zix0aGlzLmNvbW1vblN0cmluZz1fLHRoaXMuZG9jdW1lbnQ9VCx0aGlzLmNvbHVtblNlcGFyYXRvcklkPURjKCksdGhpcy5yZXNpemVTdGFydGVkT25L'@;
put 'ZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFyYXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50'@;
put 'fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMu'@;
put 'Y29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJhY2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAi'@;
put 'LGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZp'@;
put 'Y2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdodCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5j'@;
put 'b2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIu'@;
put 'c2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhpZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tl'@;
put 'ckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJhdXRvIil9c2hvd1RyYWNr'@;
put 'ZXJPbkZpcnN0S2V5RG93bihhKXshdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNz'@;
put 'KHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJvdy1rZXktcmVzaXplIiksdGhpcy5zaG93VHJhY2tlcigpKX1tb3ZlVHJhY2tlck9uS2V5RG93bihhKXt0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSk/dGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6'@;
put 'ZWRCeS0xMik6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMil9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRL'@;
put 'ZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0'@;
put 'aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1u'@;
put 'UmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRy'@;
put 'YWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl7cmV0dXJuIGwyKGEua2V5KT09PXdvLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gbDIoYS5rZXkpPT09d28uQXJyb3dSaWdodH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8YykodHQodEgpLHR0KEZvKSx0dChObyksdHQobkgpLHR0KEVzKSx0dChMcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhq'@;
put 'OWUsNSksUm8oejllLDUpKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLnJlc2l6ZVRyYWNrZXJSZWY9aC5maXJzdCksc2koaD1haSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkYXRhZ3Jp'@;
put 'ZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYsdmFyczo1LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJhZ2dhYmxlIiwiIiwxLCJkYXRhZ3JpZC1jb2x1bW4taGFuZGxlIiwzLCJjbHJHcm91cCIsImNsckRyYWdTdGFydCIsImNsckRyYWdNb3ZlIiwiY2xyRHJhZ0VuZCJd'@;
put 'LFsiY29sdW1uSGFuZGxlIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdLFsicmVzaXplVHJhY2tlciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImJ1dHRvbiIsMCwxKSx4dCgiY2xyRHJhZ1N0YXJ0Iixm'@;
put 'dW5jdGlvbigpe3JldHVybiBkLnNob3dUcmFja2VyKCl9KSgiY2xyRHJhZ01vdmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm1vdmVUcmFja2VyKGYuZHJhZ1Bvc2l0aW9uLm1vdmVYKX0pKCJjbHJEcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUcmFja2VyKCl9KSx5ZSgpLG1lKDIs'@;
put 'InNwYW4iLDIpLE5lKDMpLHllKCkscXQoNCwiZGl2IiwzLDQpKSwyJmEmJihSZSgiY2xyR3JvdXAiLGQuY29sdW1uU2VwYXJhdG9ySWQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVz'@;
put 'Y3JpcHRpb25JZCksQ2UoMiksVHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLENlKDEpLGdyKCIgIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6W0dKXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx0Zz0oKCk9PntjbGFz'@;
put 'cyBjIGV4dGVuZHMgQUV7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihkKSx0aGlzLl9zb3J0PWEsdGhpcy52Y3I9aCx0aGlzLmRldGFpbFNlcnZpY2U9Zix0aGlzLmNoYW5nZURldGVjdG9yUmVmPV8sdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IEVyLHRoaXMuZmlsdGVyVmFsdWVDaGFu'@;
put 'Z2U9bmV3IEVyLHRoaXMuc29ydGVkQ2hhbmdlPW5ldyBFcix0aGlzLnNob3dTZXBhcmF0b3I9ITAsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9STAuVU5TT1JURUQsdGhpcy5fc29ydGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1b'@;
put 'XSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKSl9Z2V0IGNvbFR5cGUoKXtyZXR1cm4gdGhpcy5fY29sVHlwZX1zZXQgY29sVHlwZShh'@;
put 'KXt0aGlzLl9jb2xUeXBlPWF9Z2V0IGZpZWxkKCl7cmV0dXJuIHRoaXMuX2ZpZWxkfXNldCBmaWVsZChhKXsic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLl9maWVsZD1hLHRoaXMuX3NvcnRCeXx8KHRoaXMuX3NvcnRCeT1uZXcgSUUoYSkpKX1nZXQgc29ydEJ5KCl7cmV0dXJuIHRoaXMuX3Nv'@;
put 'cnRCeX1zZXQgc29ydEJ5KGEpeyJzdHJpbmciPT10eXBlb2YgYT90aGlzLl9zb3J0Qnk9bmV3IElFKGEpOmE/dGhpcy5fc29ydEJ5PWE6dGhpcy5maWVsZD90aGlzLl9zb3J0Qnk9bmV3IElFKHRoaXMuZmllbGQpOmRlbGV0ZSB0aGlzLl9zb3J0Qnl9Z2V0IHNvcnRPcmRlcigpe3JldHVybiB0'@;
put 'aGlzLl9zb3J0T3JkZXJ9c2V0IHNvcnRPcmRlcihhKXtpZighKHR5cGVvZiBhPiJ1IikmJnRoaXMuX3NvcnRPcmRlciE9PWEpc3dpdGNoKGEpe2RlZmF1bHQ6Y2FzZSBJMC5VTlNPUlRFRDp0aGlzLl9zb3J0LmNsZWFyKCk7YnJlYWs7Y2FzZSBJMC5BU0M6dGhpcy5zb3J0KCExKTticmVhaztj'@;
put 'YXNlIEkwLkRFU0M6dGhpcy5zb3J0KCEwKX19Z2V0IHNvcnRlZCgpe3JldHVybiB0aGlzLl9zb3J0ZWR9c2V0IHNvcnRlZChhKXshYSYmdGhpcy5zb3J0ZWQ/KHRoaXMuX3NvcnRlZD0hMSx0aGlzLl9zb3J0LmNsZWFyKCkpOmEmJiF0aGlzLnNvcnRlZCYmdGhpcy5zb3J0KCl9c2V0IHVwZGF0'@;
put 'ZUZpbHRlclZhbHVlKGEpe3RoaXMuZmlsdGVyP3RoaXMuZmlsdGVyIGluc3RhbmNlb2YgUTU/KCghYXx8InN0cmluZyIhPXR5cGVvZiBhKSYmKGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1JiYoKCFh'@;
put 'fHwhKGEgaW5zdGFuY2VvZiBBcnJheSkpJiYoYT1bbnVsbCxudWxsXSksMj09PWEubGVuZ3RoJiYoYVswXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzBdfHxhWzFdIT09dGhpcy5maWx0ZXIudmFsdWVbMV0pJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9c2V0'@;
put 'IHByb2plY3RlZEZpbHRlcihhKXthJiYodGhpcy5kZWxldGVGaWx0ZXIoKSx0aGlzLmN1c3RvbUZpbHRlcj0hMCl9Z2V0IHNvcnRhYmxlKCl7cmV0dXJuISF0aGlzLl9zb3J0Qnl9Z2V0IGFyaWFTb3J0KCl7c3dpdGNoKHRoaXMuX3NvcnRPcmRlcil7ZGVmYXVsdDpjYXNlIEkwLlVOU09SVEVE'@;
put 'OnJldHVybiJub25lIjtjYXNlIEkwLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIEkwLkRFU0M6cmV0dXJuImRlc2NlbmRpbmcifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0'@;
put 'YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlz'@;
put 'LmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGVILHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IENFKGVILHRoaXMudmNyKX1u'@;
put 'Z09uQ2hhbmdlcyhhKXthLmNvbFR5cGUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5z'@;
put 'ZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWEuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBE'@;
put 'ZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlz'@;
put 'Ll9zb3J0QnksYSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT9JMC5ERVNDOkkwLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PUkwLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0SWNvbj10aGlzLl9zb3J0T3JkZXI9PT1JMC5ERVNDPyJhcnJv'@;
put 'dyBkb3duIjoiYXJyb3ciLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0ZWQ9ITAsdGhpcy5zb3J0ZWRDaGFuZ2UuZW1pdCghMCkpfWxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZUNo'@;
put 'YW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2hvd1NlcGFyYXRvciE9PSFhJiYodGhpcy5zaG93U2VwYXJhdG9yPSFhLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2Ny'@;
put 'aWJlKGE9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc29ydE9yZGVyIT09STAuVU5TT1JURUQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj1JMC5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMu'@;
put 'X3NvcnRPcmRlciksdGhpcy5zb3J0SWNvbj1udWxsLHRoaXMuX3NvcnREaXJlY3Rpb249bnVsbCksdGhpcy5zb3J0ZWQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRlZD0hMSx0aGlzLnNvcnRlZENoYW5nZS5lbWl0KCExKSl9KX1zZXR1cERlZmF1bHRGaWx0ZXIo'@;
put 'YSxkKXsibnVtYmVyIj09PWQ/dGhpcy5zZXRGaWx0ZXIobmV3IEo1KG5ldyBURShhKSkpOiJzdHJpbmciPT09ZCYmdGhpcy5zZXRGaWx0ZXIobmV3IFE1KG5ldyBERShhKSkpLHRoaXMuZmlsdGVyJiZ0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9dGhpcy5p'@;
put 'bml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTEUpLHR0KEZmKSx0dChhcyksdHQoaDIpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'ImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxFRSw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSxob3N0VmFyczoz'@;
put 'LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLGRyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciIsImZpbHRlclN0cmluZ1Bs'@;
put 'YWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZp'@;
put 'bHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbImNsckRnQ29sVHlwZSIsImNvbFR5cGUiXSxmaWVsZDpbImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbImNsckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOlsiY2xyRGdTb3J0T3JkZXIiLCJzb3J0T3JkZXIiXSxz'@;
put 'b3J0ZWQ6WyJjbHJEZ1NvcnRlZCIsInNvcnRlZCJdLHVwZGF0ZUZpbHRlclZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ1cGRhdGVGaWx0ZXJWYWx1ZSJdfSxvdXRwdXRzOntzb3J0T3JkZXJDaGFuZ2U6ImNsckRnU29ydE9yZGVyQ2hhbmdlIixmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVy'@;
put 'VmFsdWVDaGFuZ2UiLHNvcnRlZENoYW5nZToiY2xyRGdTb3J0ZWRDaGFuZ2UifSxmZWF0dXJlczpbdGkoW1M4LElmLEtzXSksZW8sdmFdLG5nQ29udGVudFNlbGVjdG9yczpROWUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbMSwiZGF0YWdyaWQtY29sdW1uLWZsZXgiXSxbImNsYXNzIiwiZGF0'@;
put 'YWdyaWQtY29sdW1uLXRpdGxlIiwidHlwZSIsImJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVy'@;
put 'TWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbImNvbHVtblRpdGxlIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIs'@;
put 'NCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNvcnQtaWNvbiIsNCwibmdJZiJd'@;
put 'LFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9s'@;
put 'ZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKEo5ZSksbWUoMCwi'@;
put 'ZGl2IiwwKSxRZSgxLFk5ZSwzLDIsImJ1dHRvbiIsMSksa3IoMiksUWUoMyxXOWUsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMiksUWUoNCxHOWUsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDMpLFFlKDUsJDllLDEsMCwibmctdGVtcGxhdGUiLG51bGwsNCxFYyksUWUoNyxLOWUs'@;
put 'MiwxLCJzcGFuIiw1KSxRZSg4LFg5ZSwxLDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsZC5zb3J0YWJsZSksQ2UoMiksUmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksQ2UoMSks'@;
put 'UmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmIm51bWJlciI9PWQuY29sVHlwZSksQ2UoMyksUmUoIm5nSWYiLCFkLnNvcnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbUUYsZlEsZ1EsWmkscmQscXNdLGVuY2Fwc3VsYXRp'@;
put 'b246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEFwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5fcGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5f'@;
put 'Y2hhbmdlPW5ldyBiZSx0aGlzLl9hbGxDaGFuZ2VzPW5ldyBiZSx0aGlzLml0ZXJhdG9yVHJhY2tCeT0oZixfKT0+X31nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFu'@;
put 'Z2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRlbXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdl'@;
put 'dCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYm'@;
put 'dGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3JpYmUoKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRl'@;
put 'bXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlz'@;
put 'Ll9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlzLnNtYXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWNhblRyYWNrQnkoKXtyZXR1cm4hIXRoaXMuZGF0YWdyaWRUcmFja0J5fHxBcnJheS5pc0FycmF5KHRoaXMuYWxsKX10cmFja0J5KGEsZCl7aWYodGhpcy5kYXRhZ3JpZFRyYWNrQnkpcmV0'@;
put 'dXJuIHRoaXMuZGF0YWdyaWRUcmFja0J5KGEpO2lmKEFycmF5LmlzQXJyYXkodGhpcy5hbGwpKXJldHVybiBkPWQ/P3RoaXMuYWxsLmluZGV4T2YoYSksdGhpcy5pdGVyYXRvclRyYWNrQnkoZCxhKTt0aHJvdyBuZXcgRXJyb3IoImltcHJvcGVyIGNhbGwgdG8gSXRlbXMjdHJhY2tCeSIpfWVt'@;
put 'aXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdlcy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVkPXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmls'@;
put 'dGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhpcy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9wYWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29ydEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVk'@;
put 'fHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlzLl9maWx0ZXJlZC5zb3J0KChhLGQpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxkKSksdGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5fcGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9w'@;
put 'YWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhpcy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5maXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFuZ2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZmKSxhcihMRSksYXIoRXApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxVOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRp'@;
put 'ZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy52Y3I9Zix0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgeHModGhpcy52Y3IsdGhpcy50ZW1wbGF0ZSx0aGlzLmRpZmZlcnMpLHRoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5wdXNoKGguY2hhbmdlLnN1YnNjcmliZShfPT57dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9Xyx0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMuaXRlcmF0b3JU'@;
put 'cmFja0J5PWEsdGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT1hfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRl'@;
put 'KHRoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vi'@;
put 'c2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh6YSksdHQoejYpLHR0KEFwKSx0dChhcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlu'@;
put 'cHV0czp7cmF3SXRlbXM6WyJjbHJEZ0l0ZW1zT2YiLCJyYXdJdGVtcyJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxjfSkoKSxySD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEo'@;
put 'dGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbInJvbGUiLCJy'@;
put 'b3ciLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRl'@;
put 'ci1pbWFnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxRZSgxLGV2ZSwxLDAsImRpdiIsMSksbWUoMiwic3BhbiIsMiksUWUoMyx0dmUsMSwwLCJuZy1jb250ZW50IiwzKSx5ZSgpKCkpLDImYSYmKGRyKCJkYXRhZ3JpZC1lbXB0eSIsZC5lbXB0'@;
put 'eURhdGFncmlkKSxDZSgxKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSxDZSgyKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbWmldLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGlIPSgoKT0+e2NsYXNzIGN7c2V0IHRyaWdnZXJFbChhKXt0aGlzLl90cmln'@;
put 'Z2VyRWw9YX1mb2N1c1RyaWdnZXIoKXt0aGlzLl90cmlnZ2VyRWwmJnRoaXMuX3RyaWdnZXJFbC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSko'@;
put 'KSxvSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX1zZXRJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxSRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNpZ25wb3N0SWRT'@;
put 'ZXJ2aWNlPWYsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1fLHRoaXMucGxhdGZvcm1JZD1XLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PVR9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhp'@;
put 'cy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGQ9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmQmJnRoaXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNp'@;
put 'Z25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShhPT50aGlzLmFyaWFDb250cm9sPWEpKSx0aGlzLmFkZERlZmF1bHRBcmlhTGFiZWwodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25T'@;
put 'aWducG9zdFRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfWFkZERlZmF1bHRBcmlhTGFiZWwoYSl7YS5oYXNBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8YS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRoaXMuY29tbW9uU3RyaW5ncy5rZXlz'@;
put 'LnNpZ25wb3N0VG9nZ2xlKX1mb2N1c09uQ2xvc2UoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYhdGhpcy5pc09wZW4mJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZG9jdW1lbnQuYm9keSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KE5pKSx0dChFcyksdHQob0gpLHR0KGlIKSx0dChMcyksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRy'@;
put 'czpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5k'@;
put 'ZWQpKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9sKSxkcigiYWN0aXZlIixkLmlzT3BlbikpfX0pLGN9KSgpLHNIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEp'@;
put 'e3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQs'@;
put 'aCl7aWYoMSZhJiZJbyhoLFJFLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigic2lnbnBvc3QiLCEwKX0sZmVhdHVyZXM6W3RpKFtLcyxpSCx7cHJvdmlkZTpM'@;
put 'OCx1c2VFeGlzdGluZzpOaX0sb0hdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbWFsbCIsImJ0bi1s'@;
put 'aW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLG52ZSwzLDEsIm5nLWNvbnRhaW5lciIsMCksa3IoMSkpLDImYSYmUmUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W1ppLFJFLHFzXSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNlbGxWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5j'@;
put 'ZWxsVmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNlbGwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhydmUsNSks'@;
put 'MiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksUWUoMCxpdmUsMSwwLCJuZy10'@;
put 'ZW1wbGF0ZSIsbnVsbCwwLEVjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFRwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGFILHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgp'@;
put 'e3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBDRShhSCx0aGlzLnZjcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVz'@;
put 'OmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsc0gsNCksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5zaWducG9zdD1mKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZGF0YWdyaWQtY2Vs'@;
put 'bCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixkLnNpZ25wb3N0Lmxlbmd0aD4wKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG1RPTAs'@;
put 'UGI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFl1e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBUZSghMSksdGhpcy5fYW5pbWF0ZT1uZXcgYmUsbVErKyx0aGlzLmV4cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFuZGFibGUtcm93LSIr'@;
put 'bVF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2FuaW1hdGUubmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3Jl'@;
put 'dHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3N1cGVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09VXUuTE9BRElORyYmdGhpcy5fYW5pbWF0ZS5u'@;
put 'ZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9yZXBsYWNlLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBaOD1mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gY1tjLkRJU1BMQVk9MF09IkRJU1BMQVkiLGNbYy5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsY30oWjh8fHt9KSxhYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5TaW5nbGU9MV09IlNpbmdsZSIsY1tjLk11bHRpPTJdPSJNdWx0aSIsY30oYWF8fHt9'@;
put 'KTtsZXQgbEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8ob3ZlLDUpLDImYSl7bGV0IGg7c2koaD1haSgp'@;
put 'KSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksUWUoMCxzdmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEVjKSl9'@;
put 'LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGN3ZT0wLFk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMuX2ZpbHRlcnM9ZCx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSExLHRoaXMucm93U2VsZWN0aW9uTW9kZT0h'@;
put 'MSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBiZSx0aGlzLl9zZWxlY3Rpb25UeXBlPWFhLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVj'@;
put 'dGlvbiIrY3dlKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0'@;
put 'aGlzLl9pdGVtcy5hbGxDaGFuZ2VzLnN1YnNjcmliZShoPT57Y29uc3QgZj1bXTtzd2l0Y2godGhpcy5zZWxlY3Rpb25UeXBlKXtjYXNlIGFhLk5vbmU6YnJlYWs7Y2FzZSBhYS5TaW5nbGU6e2xldCBfLFQ9ITE7dGhpcy5jdXJyZW50U2luZ2xlJiYhdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9u'@;
put 'UmVmJiZ0aGlzLl9pdGVtcy5jYW5UcmFja0J5KCkmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJhY2tCeSh0aGlzLmN1cnJlbnRTaW5nbGUpKSxoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgZ2U9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKTt0aGlzLnByZXZT'@;
put 'aW5nbGVTZWxlY3Rpb25SZWY9PT1nZSYmKF89VyxUPSEwKSx0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihnZSk+LTEmJmYucHVzaChnZSl9KSx0aGlzLl9pdGVtcy5zbWFydCYmIV8mJihUPSEwKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudFNpbmdsZT1fKX0sMCk7YnJlYWt9Y2Fz'@;
put 'ZSBhYS5NdWx0aTp7bGV0IF89dGhpcy5jdXJyZW50LnNsaWNlKCksVD0hMTt0aGlzLmN1cnJlbnQubGVuZ3RoPjAmJnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpJiYodGhpcy5wcmV2U2VsZWN0aW9u'@;
put 'UmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChXPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRoaXMuX2l0ZW1zLnRyYWNrQnkoVykpfSkpLGguZm9yRWFjaCgoVyxpZSk9Pntjb25zdCBnZT10aGlzLl9pdGVtcy50cmFja0J5KFcsaWUpO3RoaXMubG9ja2VkUmVmcy5pbmRleE9m'@;
put 'KGdlKT4tMSYmZi5wdXNoKGdlKX0pLF8ubGVuZ3RoPjAmJihoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgZ2U9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKSx3ZT10aGlzLnByZXZTZWxlY3Rpb25SZWZzLmluZGV4T2YoZ2UpO3dlPi0xJiYoX1t3ZV09VyxUPSEwKX0pLHRoaXMuX2l0ZW1zLnNt'@;
put 'YXJ0JiYoXz1fLmZpbHRlcihXPT5oLmluZGV4T2YoVyk+LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT1fLmxlbmd0aCYmKFQ9ITApKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudD1fKX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0pKSx0aGlzLnN1YnNjcmlwdGlvbnMu'@;
put 'cHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoZjgoMCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVjdGlvblR5cGUmJih0'@;
put 'aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PWFhLk5vbmU/ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEwKX1nZXQgY3VycmVu'@;
put 'dFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLHRoaXMuX2l0ZW1zLmNhblRyYWNrQnkoKSYmYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10'@;
put 'aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlw'@;
put 'ZT09PWFhLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMu'@;
put 'c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlz'@;
put 'LmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9u'@;
put 'VHlwZSl7Y2FzZSBhYS5Ob25lOmNhc2UgYWEuU2luZ2xlOmJyZWFrO2Nhc2UgYWEuTXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTXVsdGl8fCF0'@;
put 'aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiExPT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEu'@;
put 'bGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tl'@;
put 'ZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuTm9uZXx8dGhpcy5fc2VsZWN0aW9u'@;
put 'VHlwZT09PWFhLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9p'@;
put 'dGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLl9pdGVtcy5jYW5U'@;
put 'cmFja0J5KCkmJnRoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaCh0aGlzLl9pdGVtcy50cmFja0J5KGEpKX1kZXNlbGVjdEl0ZW0oYSl7aWYodGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5zbGljZSgwLGEpLmNvbmNhdCh0aGlzLmN1cnJlbnQuc2xpY2UoYSsxKSksYTx0aGlzLnByZXZTZWxl'@;
put 'Y3Rpb25SZWZzLmxlbmd0aCl7Y29uc3QgZD10aGlzLnByZXZTZWxlY3Rpb25SZWZzLnNwbGljZShhLDEpO3RoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGg9PmghPT1kWzBdKX19Y2FuSXRCZUxvY2tlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTm9u'@;
put 'ZSYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuU2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlz'@;
put 'LmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihBcCksYXIoRmYpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu'@;
put 'X3ZpZXc9bmV3IFRlKFo4LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChaOC5DQUxDVUxBVEUpKSksdGhpcy5z'@;
put 'dWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhmMi5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFo4LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3Ro'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGVnKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdUg9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVl'@;
put 'cnlTZWxlY3RvcigiaW5wdXQiKS5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX19KSxjfSkoKSxPRT0wLG5nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSxFZSxaZSl7dGhpcy5zZWxlY3Rpb249YSx0aGlz'@;
put 'LnJvd0FjdGlvblNlcnZpY2U9ZCx0aGlzLmdsb2JhbEV4cGFuZGFibGU9aCx0aGlzLmV4cGFuZD1mLHRoaXMuZGV0YWlsU2VydmljZT1fLHRoaXMuZGlzcGxheU1vZGU9VCx0aGlzLnZjcj1XLHRoaXMucmVuZGVyZXI9aWUsdGhpcy5lbD1nZSx0aGlzLmNvbW1vblN0cmluZ3M9d2UsdGhpcy5p'@;
put 'dGVtcz1FZSx0aGlzLmRvY3VtZW50PVplLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hMSx0aGlzLlNFTEVDVElPTl9UWVBFPWFhLHRo'@;
put 'aXMuaXRlbUNoYW5nZXM9bmV3IHF4KDEpLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2RldGFpbE9wZW5MYWJlbD0iIix0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPSIiLHRoaXMuX3Jvd0FyaWFMYWJlbD0iIix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2VsZWN0YWJsZT0hMCxPRSsrLHRo'@;
put 'aXMuaWQ9ImNsci1kZy1yb3ciK09FLHRoaXMucmFkaW9JZD0iY2xyLWRnLXJvdy1yZCIrT0UsdGhpcy5jaGVja2JveElkPSJjbHItZGctcm93LWNiIitPRSx0aGlzLmV4cGFuZGFibGVJZD1mLmV4cGFuZGFibGVJZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChZNih0aGlzLmV4cGFuZC5yZXBs'@;
put 'YWNlLHRoaXMuZXhwYW5kLmV4cGFuZENoYW5nZSkuc3Vic2NyaWJlKChbb3QsZXRdKT0+e290JiZldD8odGhpcy5yZXBsYWNlZD0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSEx'@;
put 'LHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSl9KSl9Z2V0IGl0ZW0oKXtyZXR1cm4gdGhpcy5faXRlbX1zZXQgaXRlbShhKXt0aGlzLl9pdGVtPWEsdGhpcy5pdGVtQ2hhbmdlcy5uZXh0KGEpLHRoaXMuY2xy'@;
put 'RGdTZWxlY3RhYmxlPXRoaXMuX3NlbGVjdGFibGV9Z2V0IGNsckRnU2VsZWN0YWJsZSgpe3JldHVybiF0aGlzLnNlbGVjdGlvbi5pc0xvY2tlZCh0aGlzLml0ZW0pfXNldCBjbHJEZ1NlbGVjdGFibGUoYSl7dGhpcy5pdGVtJiZ0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sImZh'@;
put 'bHNlIj09PWF8fCExPT09YSksdGhpcy5fc2VsZWN0YWJsZT1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YWEuTm9uZT90aGlzLl9zZWxlY3RlZDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMuaXRlbSl9c2V0IHNlbGVjdGVkKGEp'@;
put 'e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5Ob25lP3RoaXMuX3NlbGVjdGVkPWE6KGEmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aT90aGlzLnJhbmdlU2VsZWN0KCk6dGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD1udWxsLHRoaXMuc2VsZWN0aW9u'@;
put 'LnNldFNlbGVjdGVkKHRoaXMuaXRlbSxhKSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfXNldCBleHBhbmRlZChhKXt0aGlzLmV4cGFuZC5leHBhbmRlZD1hfWdldCBjbHJEZ0RldGFpbE9wZW5MYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxPcGVuTGFiZWw/'@;
put 'dGhpcy5fZGV0YWlsT3BlbkxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW59c2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKGEpe3RoaXMuX2RldGFpbE9wZW5MYWJlbD1hfWdldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD90aGlz'@;
put 'Ll9kZXRhaWxDbG9zZUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlfXNldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoYSl7dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD1hfWdldCBjbHJEZ1Jvd0FyaWFMYWJlbCgpe3JldHVybiB0aGlzLl9yb3dBcmlhTGFiZWw/dGhpcy5fcm93QXJp'@;
put 'YUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdH1zZXQgY2xyRGdSb3dBcmlhTGFiZWwoYSl7dGhpcy5fcm93QXJpYUxhYmVsPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChsSCx0aGlzLnZjcikucm93Vmlld31uZ09uSW5pdCgpe3RoaXMu'@;
put 'd3JhcHBlZEluamVjdG9yPW5ldyBDRShsSCx0aGlzLnZjciksdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCExPT09dGhpcy5jbHJEZ1NlbGVjdGFibGUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZGdDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuZGdDZWxs'@;
put 'cy5mb3JFYWNoKGE9PnthLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChhLl92aWV3KX0pfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRo'@;
put 'aXMuX3Njcm9sbGFibGVDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuZGV0YWNoKCk7YT09PVo4LkNBTENVTEFURT8odGhp'@;
put 'cy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLmRpc3BsYXlDZWxscz0hMCx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95'@;
put 'ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoZC5fdmlldyl9KSl9KSx0aGlzLmV4cGFuZC5hbmltYXRlLnN1YnNjcmliZSgoKT0+e3RoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGUoYT0hdGhpcy5zZWxlY3RlZCl7YSE9PXRoaXMuc2VsZWN0ZWQmJih0aGlzLnNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKSl9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmQuZXhwYW5kYWJs'@;
put 'ZSYmKHRoaXMuZXhwYW5kQW5pbWF0aW9uLnVwZGF0ZVN0YXJ0SGVpZ2h0KCksdGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWNsZWFyUmFuZ2VzKGEpe2Euc2hpZnRLZXkmJih0aGlzLmRvY3VtZW50LmdldFNlbGVj'@;
put 'dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpLC0xIT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlKCEwKSkpfXNlbGVjdFJvdyhhPSF0aGlzLnNlbGVjdGVkLGQpeyJMQUJFTCIhPT1kLnRhcmdldC50'@;
put 'YWdOYW1lJiYodGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXRoaXMuU0VMRUNUSU9OX1RZUEUuU2luZ2xlP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9dGhpcy5pdGVtOnRoaXMudG9nZ2xlKGEpKX1yYW5nZVNlbGVjdCgpe2NvbnN0IGE9dGhpcy5pdGVtcy5kaXNwbGF5ZWQ7'@;
put 'aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5pbmRleE9mKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpO2lmKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQmJnRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuaW5jbHVkZXModGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCkmJnRoaXMuc2VsZWN0aW9uLnNo'@;
put 'aWZ0UHJlc3NlZCYmLTEhPT1kKXtjb25zdCBoPWEuaW5kZXhPZih0aGlzLml0ZW0pLGY9bmV3IFNldCh0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmNvbmNhdChhLnNsaWNlKE1hdGgubWluKGQsaCksTWF0aC5tYXgoZCxoKSsxKSkpO3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhp'@;
put 'cy5zZWxlY3Rpb24uY3VycmVudC5wdXNoKC4uLmYpfWVsc2UgdGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD10aGlzLml0ZW19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFk4KSx0dChWOCksdHQoajgpLHR0KFBiKSx0dChoMiksdHQoY0gpLHR0'@;
put 'KGFzKSx0dChGbyksdHQoTmkpLHR0KEVzKSx0dChBcCksdHQoTHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFRwLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYm'@;
put 'KGQuZGdDZWxscz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKGJFLDUpLFJvKGF2ZSw1KSxSbyhsdmUsNSxhcyksUm8oY3ZlLDUsYXMpLFJvKHV2ZSw1LGFzKSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5leHBhbmRBbmltYXRpb249aC5maXJzdCksc2koaD1h'@;
put 'aSgpKSYmKGQuZGV0YWlsQnV0dG9uPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLl9zdGlja3lDZWxscz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fc2Nyb2xsYWJsZUNlbGxzPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLl9jYWxjdWxhdGVkQ2VsbHM9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJy'@;
put 'b2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLW93bnMiLGQuaWQpLGRyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRzOntpdGVtOlsiY2xyRGdJdGVtIiwi'@;
put 'aXRlbSJdLGNsckRnU2VsZWN0YWJsZToiY2xyRGdTZWxlY3RhYmxlIixzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVuTGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJE'@;
put 'Z0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dBcmlhTGFiZWw6ImNsckRnUm93QXJpYUxhYmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9'@;
put 'LGZlYXR1cmVzOlt0aShbUGIse3Byb3ZpZGU6WXUsdXNlRXhpc3Rpbmc6UGJ9LHtwcm92aWRlOnZiLHVzZUV4aXN0aW5nOlBifV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RnZlLGRlY2xzOjksdmFyczozLGNvbnN0czpbWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNl'@;
put 'ZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwi'@;
put 'Y2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbInN0aWNreUNlbGxzIiwiIl0s'@;
put 'WyJjbGFzcyIsImRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQt'@;
put 'Y2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJl'@;
put 'dCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSIsMywibmdDbGFzcyJdLFsxLCJkYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsicm9sZSIsImdyaWRjZWxsIiwx'@;
put 'LCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIiwzLCJuZ0NsYXNzIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbCIsImlkIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImNsci1jb250'@;
put 'cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiLCJjbGljayJdLFsxLCJjbHItc3Itb25seSJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLDMsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwi'@;
put 'Y2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZXhwYW5k'@;
put 'YWJsZS1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInR5cGUi'@;
put 'LCJidXR0b24iLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLCJkYXRhZ3JpZC1m'@;
put 'aXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1oYXNwb3B1cCIsImRpYWxvZyIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsImRh'@;
put 'dGFncmlkLWRldGFpbC1jYXJldC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoUHZlKSxRZSgwLGd2ZSwzLDIsImRpdiIsMCksUWUoMSx2dmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEpLFFlKDIsYnZlLDEsMSxudWxsLDIpLFFlKDMseXZlLDEsMCwi'@;
put 'bmctdGVtcGxhdGUiLG51bGwsMyxFYyksUWUoNSxPdmUsMTYsMTMsIm5nLXRlbXBsYXRlIixudWxsLDQsRWMpLGphKDcsbnVsbCw1KSksMiZhJiYoUmUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUpLENlKDEpLFJlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9u'@;
put 'TW9kZSYmZC5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiYhZC5leHBhbmQuZXhwYW5kYWJsZSkpfSxkZXBlbmRlbmNpZXM6W2JFLFQwLEtGLHUyLFppLHJkLHVILHVjLFMwLEQwLEJzLE9zLFVzLGxFLFdhLFhGLHFzXSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgTDA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5XSURUSD0wXT0iV0lEVEgiLGNbYy5ISURERU49MV09IkhJRERFTiIsY30oTDB8fHt9KTtjb25zdCB2UT1PYmplY3Qua2V5cyhMMCkubWFwKGM9PkwwW2NdKS5maWx0ZXIoYz0+Yz09PXBhcnNlSW50'@;
put 'KGMsMTApKTtsZXQgSGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29sdW1ucz1bXSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlz'@;
put 'LmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Y2FjaGUoKXt0aGlzLl9jYWNoZT10aGlzLmNvbHVtbnMubWFwKGE9Pntjb25zdCBkPXsuLi5hLnZhbHVlfTtyZXR1cm4gZGVsZXRlIGQuY2hhbmdlcyxkfSl9aGFzQ2FjaGUoKXtyZXR1cm4hIXRoaXMuX2NhY2hl'@;
put 'Lmxlbmd0aH1yZXNldFRvTGFzdENhY2hlKCl7dGhpcy5fY2FjaGUuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1tkXS5uZXh0KHsuLi5hLGNoYW5nZXM6dlF9KX0pLHRoaXMuX2NhY2hlPVtdfWVtaXRTdGF0ZUNoYW5nZUF0KGEsZCl7dGhpcy5jb2x1bW5zW2FdJiZ0aGlzLmVtaXRTdGF0'@;
put 'ZUNoYW5nZSh0aGlzLmNvbHVtbnNbYV0sZCl9ZW1pdFN0YXRlQ2hhbmdlKGEsZCl7YS5uZXh0KHsuLi5hLnZhbHVlLC4uLmR9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1'@;
put 'ZmFjfSksY30pKCksX1E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmZpbHRlcnM9YSx0aGlzLnNvcnQ9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRlYm91bmNlcj1mLHRoaXMuY2hhbmdlPXRoaXMuZGVib3VuY2VyLmNoYW5nZS5waXBlKE1lKCgpPT50aGlzLnN0YXRlKSl9'@;
put 'Z2V0IHN0YXRlKCl7Y29uc3QgYT17fTt0aGlzLnBhZ2Uuc2l6ZT4wJiYoYS5wYWdlPXtmcm9tOnRoaXMucGFnZS5maXJzdEl0ZW0sdG86dGhpcy5wYWdlLmxhc3RJdGVtLHNpemU6dGhpcy5wYWdlLnNpemUsY3VycmVudDp0aGlzLnBhZ2UuY3VycmVudH0pLHRoaXMuc29ydC5jb21wYXJhdG9y'@;
put 'JiYoYS5zb3J0PXRoaXMuc29ydC5jb21wYXJhdG9yIGluc3RhbmNlb2YgSUU/e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLnByb3AscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX06e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9KTtjb25zdCBkPXRo'@;
put 'aXMuZmlsdGVycy5nZXRBY3RpdmVGaWx0ZXJzKCk7aWYoZC5sZW5ndGg+MCl7YS5maWx0ZXJzPVtdO2Zvcihjb25zdCBoIG9mIGQpYS5maWx0ZXJzLnB1c2goaC5zdGF0ZT9oLnN0YXRlOmgpfXJldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShhcihGZiksYXIoTEUpLGFyKEVwKSxhcihSYikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy56b25lPWEsdGhpcy5saXN0ZW5lcnNBZGRlZD0hMSx0aGlzLmRlc3Ryb3kk'@;
put 'PW5ldyBiZSx0aGlzLmNvbmZpZz17a2V5R3JpZFJvd3M6Iltyb2xlPXJvd106bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlcikiLGtleUdyaWRDZWxsczoiW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50'@;
put 'KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLGtleUdyaWQ6Iltyb2xlPWdyaWRdIn19Z2V0IGdyaWQoKXtyZXR1cm4gdGhpcy5ob3N0Py5x'@;
put 'dWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpfWdldCByb3dzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyl9Z2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5r'@;
put 'ZXlHcmlkQ2VsbHMpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWFkZExpc3RlbmVycygpe3RoaXMubGlzdGVuZXJzQWRkZWR8fCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntuMih0aGlzLmdyaWQsIm1vdXNlZG93'@;
put 'biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoMT09PWEuYnV0dG9ucyYmIWEuY3RybEtleSl7Y29uc3QgZD10aGlzLmNlbGxzP0FycmF5LmZyb20odGhpcy5jZWxscykuZmluZChoPT5oPT09YS50YXJnZXR8fGg9PT1hLnRhcmdldC5jbG9zZXN0KHRoaXMuY29u'@;
put 'ZmlnLmtleUdyaWRDZWxscykpOm51bGw7ZCYmdGhpcy5zZXRBY3RpdmVDZWxsKGQpfX0pLG4yKHRoaXMuZ3JpZCwia2V5ZG93biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoKCFhLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRyYWctaGFuZGxlIil8fCJB'@;
put 'cnJvd0xlZnQiIT09YS5jb2RlJiYiQXJyb3dSaWdodCIhPT1hLmNvZGUpJiYoIkFycm93VXAiPT09YS5jb2RlfHwiQXJyb3dEb3duIj09PWEuY29kZXx8IkFycm93TGVmdCI9PT1hLmNvZGV8fCJBcnJvd1JpZ2h0Ij09PWEuY29kZXx8IkVuZCI9PT1hLmNvZGV8fCJIb21lIj09PWEuY29kZXx8'@;
put 'IlBhZ2VVcCI9PT1hLmNvZGV8fCJQYWdlRG93biI9PT1hLmNvZGUpKXtjb25zdHt4OmQseTpofT10aGlzLmdldE5leHRJdGVtQ29vcmRpbmF0ZShhKSxmPXRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93c1toXS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykp'@;
put 'W2RdOm51bGw7ZiYmdGhpcy5zZXRBY3RpdmVDZWxsKGYpLGEucHJldmVudERlZmF1bHQoKX19KX0pLHRoaXMubGlzdGVuZXJzQWRkZWQ9ITApfWluaXRpYWxpemVLZXlHcmlkKGEpe3RoaXMuaG9zdD1hLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5yZXNldEtleUdyaWQoKX1yZXNldEtleUdy'@;
put 'aWQoKXt0aGlzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmNlbGxzP3RoaXMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9c2V0QWN0aXZlQ2VsbChhKXtjb25zdCBkPXRoaXMuY2VsbHM/QXJyYXku'@;
put 'ZnJvbSh0aGlzLmNlbGxzKS5maW5kKF89PiIwIj09PV8uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsO2QmJmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpO2NvbnN0IGg9ZnVuY3Rpb24gdXdlKGMpe2NvbnN0IGw9WyJh'@;
put 'W2hyZWZdIiwiYXJlYVtocmVmXSIsImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rpc2FibGVkXSkiLCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCIqW3RhYmluZGV4XSIsIipb'@;
put 'Y29udGVudGVkaXRhYmxlPXRydWVdIiwiW3JvbGU9YnV0dG9uXTpub3QoW2Rpc2FibGVkXSkiXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGwpKX0oYSk7KCJjb2x1bW5oZWFkZXIiIT09YS5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmaFswXT9oWzBdOmEp'@;
put 'LmZvY3VzKCl9Z2V0TmV4dEl0ZW1Db29yZGluYXRlKGEpe2xldCBkPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKFplPT4iMCI9PT1aZS5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7IlRhYiI9PT1hLmNvZGUmJihkPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQp'@;
put 'O2NvbnN0IGg9dGhpcy5yb3dzJiZkP0FycmF5LmZyb20odGhpcy5yb3dzKS5maW5kKFplPT5aZS5jb250YWlucyhkKSk6bnVsbCxmPXRoaXMucm93cz90aGlzLnJvd3MubGVuZ3RoLTE6MCxfPXRoaXMuY2VsbHM/dGhpcy5jZWxscy5sZW5ndGgvdGhpcy5yb3dzLmxlbmd0aC0xOjA7bGV0IFQ9'@;
put 'aCYmZD9BcnJheS5mcm9tKGgucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGQpOjAsVz1oJiZkJiZ0aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoaCk6MDtjb25zdCBpZT10aGlzLmhvc3QuZGlyLGdlPSJydGwiPT09aWU/'@;
put 'IkFycm93UmlnaHQiOiJBcnJvd0xlZnQiLHdlPSJydGwiPT09aWU/IkFycm93TGVmdCI6IkFycm93UmlnaHQiLEVlPU1hdGguZmxvb3IodGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKS5jbGllbnRIZWlnaHQvdGhpcy5yb3dzWzBdLmNsaWVudEhlaWdodCktMXx8MDtyZXR1'@;
put 'cm4iQXJyb3dVcCI9PT1hLmNvZGUmJjAhPT1XP1ctPTE6IkFycm93RG93biI9PT1hLmNvZGUmJlc8Zj9XKz0xOmEuY29kZT09PWdlJiYwIT09VD9ULT0xOmEuY29kZT09PXdlJiZUPF8/VCs9MToiRW5kIj09PWEuY29kZT8oVD1fLGEuY3RybEtleSYmKFc9ZikpOiJIb21lIj09PWEuY29kZT8o'@;
put 'VD0wLGEuY3RybEtleSYmKFc9MCkpOiJQYWdlVXAiPT09YS5jb2RlP1c9Vy1FZT4wP1ctRWU6MDoiUGFnZURvd24iPT09YS5jb2RlJiYoVz1XK0VlPGY/VytFZTpmKSx7eDpULHk6V319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSl9LGMu'@;
put 'XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVzg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLGdlLHdlLEVlLFplLG90LGV0LHl0LGt0KXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLmV4cGFuZGFi'@;
put 'bGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlzLnJvd0FjdGlvblNlcnZpY2U9Xyx0aGlzLnN0YXRlUHJvdmlkZXI9VCx0aGlzLmRpc3BsYXlNb2RlPVcsdGhpcy5yZW5kZXJlcj1pZSx0aGlzLmRldGFpbFNlcnZpY2U9Z2UsdGhpcy5kb2N1bWVudD13ZSx0aGlzLmVsPUVlLHRoaXMucGFn'@;
put 'ZT1aZSx0aGlzLmNvbW1vblN0cmluZ3M9b3QsdGhpcy5jb2x1bW5zU2VydmljZT1ldCx0aGlzLmtleU5hdmlnYXRpb249eXQsdGhpcy56b25lPWt0LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxh'@;
put 'YmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVB'@;
put 'cmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IEVyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMucmVmcmVzaD1uZXcgRXIoITEpLHRoaXMuU0VMRUNUSU9OX1RZUEU9YWEsdGhpcy5fc3Vi'@;
put 'c2NyaXB0aW9ucz1bXTtjb25zdCBTdD1EYygpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxsLSIrU3QsdGhpcy5kZXRhaWxTZXJ2aWNlLmlkPVN0fWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhhKXt0aGlzLml0ZW1zLmxvYWRp'@;
put 'bmc9YX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hP2FhLk11bHRpOmFhLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBkYXRlQ3VycmVudChhLCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hYS5TaW5nbGUs'@;
put 'YT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWE6dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9bnVsbCl9c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249YX1z'@;
put 'ZXQgcm93U2VsZWN0aW9uTW9kZShhKXt0aGlzLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlPWF9c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVtcy5kYXRhZ3JpZFRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxT'@;
put 'ZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi50b2dnbGVBbGwoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChkPT5kLml0ZW0pKTtjb25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoU2EoZD0+aXMoV2koZC5t'@;
put 'YXAoaD0+aC5pdGVtKSksWTYoZC5tYXAoaD0+aC5pdGVtQ2hhbmdlcykpLnBpcGUoZjgoMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPWQpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJl'@;
put 'KCgpPT57Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoLTE7ZD49MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZCkuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShkKTtpZih0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93'@;
put 'cy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5pc09wZW4pe2NvbnN0IGQ9dGhpcy5pdGVtcy5jYW5UcmFja0J5KCk/dGhpcy5yb3dzLmZpbmQoaD0+dGhpcy5pdGVtcy50cmFja0J5KGguaXRlbSk9PT10aGlzLml0ZW1zLnRy'@;
put 'YWNrQnkodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlKSk6dm9pZCAwO2Q/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oZC5pdGVtLGQuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmtleU5hdmln'@;
put 'YXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJl'@;
put 'c2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24uY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYm'@;
put 'dGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKX0pLHRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygp'@;
put 'fSksWTYodGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zKS5zdWJzY3JpYmUoKCk9PnRoaXMua2V5TmF2aWdhdGlvbj8ucmVzZXRLZXlHcmlkKCkpLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5n'@;
put 'dGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhp'@;
put 'cy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgpO2E9PT1aOC5ESVNQTEFZPyh0aGlzLnJlbmRl'@;
put 'cmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMu'@;
put 'X2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5z'@;
put 'Lmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChuMih0aGlzLmRvY3VtZW50LmJvZHks'@;
put 'ImtleWRvd24iKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSxuMih0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNz'@;
put 'ZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChlZyksdHQoQXApLHR0KGo4KSx0dChZOCksdHQoVjgpLHR0KF9RKSx0dChjSCksdHQoRm8pLHR0KGgyKSx0dChMcyksdHQoTmkpLHR0KEVwKSx0dChFcyksdHQoSGYpLHR0KGJRKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgsVTgsNSksSW8oaCxySCw1KSxJbyhoLHRnLDQpLElvKGgsbmcsNCkpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksc2koZj1haSgp'@;
put 'KSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksc2koZj1haSgpKSYmKGQuY29sdW1ucz1mKSxzaShmPWFpKCkpJiYoZC5yb3dzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oSHZlLDUsTmkpLFJvKE52ZSw1LGFzKSxSbyhWdmUsNSxhcyksUm8oQnZlLDUsYXMpLFJv'@;
put 'KGp2ZSw1LGFzKSxSbyh6dmUsNSxhcykpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuZGF0YWdyaWRUYWJsZT1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5zY3JvbGxhYmxlQ29sdW1ucz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aC5maXJzdCks'@;
put 'c2koaD1haSgpKSYmKGQuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fZGlzcGxheWVkUm93cz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fY2FsY3VsYXRpb25Sb3dzPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsyJmEmJmRyKCJkYXRhZ3JpZC1ob3N0IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKX0saW5wdXRzOntjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xl'@;
put 'QWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsbG9hZGlu'@;
put 'ZzpbImNsckRnTG9hZGluZyIsImxvYWRpbmciXSxzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLHNpbmdsZVNlbGVjdGVkOlsiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVj'@;
put 'dGlvbiIscm93U2VsZWN0aW9uTW9kZTpbImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uTW9kZSJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixzaW5nbGVTZWxlY3Rl'@;
put 'ZENoYW5nZWQ6ImNsckRnU2luZ2xlU2VsZWN0ZWRDaGFuZ2UiLHJlZnJlc2g6ImNsckRnUmVmcmVzaCJ9LGZlYXR1cmVzOlt0aShbWTgsTEUsRmYsRXAsQXAsZWcsVjgsajgsUmIsaDIsX1EsbkgsSGYsY0gsYlFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkt2ZSxkZWNsczozMix2YXJzOjcsY29u'@;
put 'c3RzOltbMSwiZGF0YWdyaWQtb3V0ZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZC1pbm5lci13cmFwcGVyIl0sWzEsImRhdGFncmlkIl0sWyJkYXRhZ3JpZCIsIiJdLFsxLCJkYXRhZ3JpZC10YWJsZS13cmFwcGVyIl0sWyJyb2xlIiwiZ3JpZCIsInRhYmluZGV4IiwiLTEiLDEsImRhdGFncmlk'@;
put 'LXRhYmxlIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImRhdGFncmlkLWhlYWRlciJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93Il0sWzEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCJdLFsxLCJkYXRhZ3JpZC1yb3ct'@;
put 'c3RpY2t5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQt'@;
put 'Y29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUi'@;
put 'LCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSJdLFsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiLCIiXSxbImRp'@;
put 'c3BsYXllZFJvd3MiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwi'@;
put 'Il0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidHlwZSIs'@;
put 'ImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMywiaWQiLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbInJvbGUi'@;
put 'LCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1'@;
put 'bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbMSwiZGF0YWdyaWQtc3Bpbm5lciJdLFsiY2xyTWVkaXVtIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7'@;
put 'MSZhJiYoVGkocXZlKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsImRpdiIsMSkoMywiZGl2IiwyLDMpKDUsImRpdiIsNCkoNiwiZGl2Iiw1LDYpKDgsImRpdiIsNykoOSwiZGl2Iiw4KSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCksUWUoMTIsVXZlLDcsNSwiZGl2IiwxMSksUWUoMTMsWnZlLDIs'@;
put 'MSwiZGl2IiwxMiksUWUoMTQsWXZlLDIsMSwiZGl2IiwxMyksUWUoMTUsV3ZlLDIsMSwiZGl2IiwxNCkseWUoKSxtZSgxNiwiZGl2IiwxNSksamEoMTcsbnVsbCwxNikseWUoKSgpKCkoKSxqYSgxOSxudWxsLDE3KSxrcigyMSwxKSxRZSgyMixHdmUsMSwwLCJjbHItZGctcGxhY2Vob2xkZXIi'@;
put 'LDE4KSx5ZSgpKCkoKSxrcigyMywyKSxRZSgyNCwkdmUsMywwLCJkaXYiLDE5KSx5ZSgpLGtyKDI1LDMpLHllKCksbWUoMjYsImRpdiIsMjApKDI3LCJkaXYiLDIxKSxqYSgyOCxudWxsLDIyKSx5ZSgpLGphKDMwLG51bGwsMjMpLHllKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWhpZGRlbiIs'@;
put 'ISFkLmRldGFpbFNlcnZpY2UuaXNPcGVufHxudWxsKSxDZSg5KSxSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLENlKDEpLFJlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5n'@;
put 'bGUpLENlKDEpLFJlKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGQuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ZC5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLENlKDcpLFJlKCJuZ0lmIiwhZC5wbGFjZWhvbGRlciks'@;
put 'Q2UoMiksUmUoIm5nSWYiLGQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3JILHUyLFppLHVILFMwLEJzLE9zLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLmFsbFNlbGVjdGVkPW5l'@;
put 'dyBFcn1nZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RB'@;
put 'bGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W0wwLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhp'@;
put 'cy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoSGYpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dn'@;
put 'bGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3RlZCJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJk'@;
put 'aXNhYmxlZCIsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLGtyKDEpLHllKCkpLDImYSYmUmUoImRpc2FibGVkIixkLmFsbEhpZGVhYmxlc1Zpc2li'@;
put 'bGUpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx5UT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sbmdD'@;
put 'b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IHdRPWM9PmM7bGV0IGhIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5faXRlbXM9YX1z'@;
put 'ZXQgdHJhY2tCeShhKXthIT09d1EmJnRoaXMuX2l0ZW1zJiYodGhpcy5faXRlbXMuaXRlcmF0b3JUcmFja0J5PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBcCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs'@;
put 'Im5nRm9yVHJhY2tCeSIsIiJdXSxpbnB1dHM6e3RyYWNrQnk6WyJuZ0ZvclRyYWNrQnkiLCJ0cmFja0J5Il19fSksY30pKCksZkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3Zlcklk'@;
put 'PURjKCksdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj13USx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0'@;
put 'YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2Vydmlj'@;
put 'ZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9'@;
put 'PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0'@;
put 'ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W0wwLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0'@;
put 'aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChIZiksdHQoS3MpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVt'@;
put 'bi10b2dnbGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgseVEsNSksSW8oaCxkSCw1KSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5jdXN0b21Ub2dnbGVUaXRsZT1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5jdXN0b21Ub2dnbGVCdXR0b249Zi5m'@;
put 'aXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKEp2ZSw1LE5pKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmFsbFNlbGVjdGVkRWxlbWVudD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY29sdW1uLXN3'@;
put 'aXRjaC13cmFwcGVyIiwhMCkoImFjdGl2ZSIsZC5vcGVuU3RhdGUpfSxmZWF0dXJlczpbdGkoW0lmLFM4LEtzXSldLG5nQ29udGVudFNlbGVjdG9yczpvX2UsZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIs'@;
put 'IiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50Iiwi'@;
put 'Y2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNo'@;
put 'LWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImFsbFNlbGVjdGVkIiwiIl0sWzQsIm5nSWYiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9z'@;
put 'ZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3Rl'@;
put 'ciJdLFszLCJjbHJBbGxTZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImRpc2FibGVkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFszLCJjbHJBbGxTZWxlY3RlZCJdXSx0ZW1wbGF0ZTpm'@;
put 'dW5jdGlvbihhLGQpezEmYSYmKFRpKGlfZSksbWUoMCwiYnV0dG9uIiwwKSxOZSgxKSx5ZSgpLFFlKDIscl9lLDE2LDEwLCJkaXYiLDEpKSwyJmEmJihUcigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLW93bnMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVu'@;
put 'U3RhdGUpLENlKDEpLGdyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5waWNrQ29sdW1ucywiICIpLENlKDEpLFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVD'@;
put 'bGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W1QwLGRILHdiLE1iLFNiLE1wLFppLEZKLHFzLHhzLGhILFMwLEQwLEJzLE9zLFVzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxTUT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLHRoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRoaXMuZXhwYW5kYWJsZVJvd3NDb3Vu'@;
put 'dC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGo4LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLFBFPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1hYX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1Nl'@;
put 'cnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCksdHQoaDIpLHR0KEhmKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZm9vdGVyIl1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZkgsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC50b2dnbGU9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRhdGFncmlkLWZvb3RlciIsITApfSxuZ0NvbnRlbnRT'@;
put 'ZWxlY3RvcnM6aF9lLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCJdLFsxLCJkYXRhZ3JpZC1mb290ZXItc2VsZWN0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImNoZWNrZWQiLCJjaGVja2VkIiwi'@;
put 'ZGlzYWJsZWQiLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLWRlc2NyaXB0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoZF9lKSxRZSgwLGxfZSw4LDIsIm5nLWNvbnRhaW5lciIsMCksUWUoMSx1X2UsNSwxLCJuZy1jb250YWluZXIiLDAp'@;
put 'LGtyKDIpKSwyJmEmJihSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkmJmQuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W1Qw'@;
put 'LGZILFppLEQwLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBwSD1uZXcgTWkoIkNPTFVNTl9TVEFURSIpLHZ3ZT17cHJvdmlkZTpwSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIG13ZSgpe3JldHVybiBuZXcgVGUoe2NoYW5nZXM6W119KX19O2xldCBnSD0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEpe3RoaXMucGFnZT1hLHRoaXMucGFnZVNpemVPcHRpb25zSWQ9RGMoKX1uZ09uSW5pdCgpeyghdGhpcy5wYWdlU2l6ZU9wdGlvbnN8fDA9PT10aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGgpJiYodGhpcy5wYWdlU2l6ZU9wdGlvbnM9W3RoaXMucGFnZS5zaXplXSl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdlLXNpemUiXV0saW5wdXRzOntwYWdlU2l6ZU9wdGlvbnM6WyJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6'@;
put 'ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNpemVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJpZCIsIm5nTW9kZWwiLCJu'@;
put 'Z01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsInNlbGVjdCIsMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3Jl'@;
put 'dHVybiBkLnBhZ2Uuc2l6ZT1mfSksUWUoMyxmX2UsMiwyLCJvcHRpb24iLDIpLHllKCkoKSksMiZhJiYoQ2UoMiksZHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksUmUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSgibmdNb2RlbCIsZC5wYWdlLnNpemUpLENlKDEpLFJlKCJuZ0Zvck9m'@;
put 'IixkLnBhZ2VTaXplT3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W00wLEJzLE9zLHhzLGwxLGMxXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxGRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnBhZ2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmRldGFpbFNlcnZp'@;
put 'Y2U9aCx0aGlzLmN1cnJlbnRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5wYWdlLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5zaXplPWEpfWdldCB0b3RhbEl0ZW1z'@;
put 'KCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2UoYSl7Im51bWJlciI9PXR5cGVvZiBh'@;
put 'JiYodGhpcy5wYWdlLmxhc3Q9YSl9Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5maXJzdEl0'@;
put 'ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KSx0aGlzLnBhZ2Uu'@;
put 'Y3VycmVudDx0aGlzLnBhZ2UubGFzdCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY3VycmVu'@;
put 'dENoYW5nZWQuZW1pdChhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnByZXZpb3VzKCl9bmV4dCgpe3RoaXMu'@;
put 'cGFnZS5uZXh0KCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3QgZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5u'@;
put 'YXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFcCksdHQoRXMpLHR0KGgyKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdpbmF0aW9uIl1d'@;
put 'LGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZ0gsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5fcGFnZVNpemVDb21wb25lbnQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHBfZSw1KSwyJmEpe2xldCBoO3NpKGg9'@;
put 'YWkoKSkmJihkLmN1cnJlbnRQYWdlSW5wdXRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoInBhZ2luYXRpb24iLCEwKX0saW5wdXRzOntkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dDpbImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJk'@;
put 'aXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOlsiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbImNsckRnVG90YWxJdGVtcyIsInRvdGFsSXRlbXMiXSxsYXN0UGFnZTpbImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOlsiY2xyRGdQ'@;
put 'YWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczpDX2UsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFn'@;
put 'aW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsx'@;
put 'LCJjbHItc3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0'@;
put 'eXBlIiwidGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsicmVhZE9ubHkiLCIiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIs'@;
put 'MywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsi'@;
put 'dHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRlbXBsYXRlOmZ1bmN0'@;
put 'aW9uKGEsZCl7MSZhJiYoVGkod19lKSxRZSgwLGJfZSw1LDIsIm5nLWNvbnRhaW5lciIsMCksUWUoMSx5X2UsMTQsMTAsIm5nLWNvbnRhaW5lciIsMCkpLDImYSYmKFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksQ2UoMSksUmUoIm5nSWYiLGQuZGV0YWlsU2VydmljZS5pc09w'@;
put 'ZW4pKX0sZGVwZW5kZW5jaWVzOltaaSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgRzg9ImRhdGFncmlkLWZpeGVkLXdpZHRoIixIRT0iZGF0YWdyaWQtaGlkZGVuLWNvbHVtbiI7bGV0IHJnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlz'@;
put 'LnJlbmRlcmVyPWQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSl9c2V0IGNvbHVtblN0YXRlKGEpe3RoaXMuc3RhdGVTdWJzY3Jp'@;
put 'cHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJ1bkFsbENoYW5nZXM9dlEsdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShkPT50aGlzLnN0YXRlQ2hhbmdlcyhkKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFj'@;
put 'aChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdGF0ZUNoYW5nZXMoYSl7dGhpcy5ydW5BbGxDaGFuZ2VzJiYoYS5jaGFuZ2VzPXRoaXMucnVuQWxsQ2hhbmdlcyxkZWxldGUgdGhpcy5ydW5B'@;
put 'bGxDaGFuZ2VzKSxhLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBMMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2JyZWFrO2Nhc2UgTDAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLnJl'@;
put 'bmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRp'@;
put 'dmVFbGVtZW50LEc4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRl'@;
put 'cmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxIRSk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSEUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoRm8pLHR0KGVnKSl9LGMu'@;
put 'XHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dfSksY30pKCksaWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMub3JnYW5pemVyPWgsdGhpcy5kb21BZGFwdGVyPWYsdGhp'@;
put 'cy5jb2x1bW5SZXNpemVyU2VydmljZT1fLHRoaXMuY29sdW1uc1NlcnZpY2U9VCx0aGlzLmNvbHVtblN0YXRlPVcsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBFcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25z'@;
put 'LnB1c2godGhpcy5vcmdhbml6ZXIuZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goVy5zdWJzY3JpYmUoaWU9PnRoaXMuc3RhdGVDaGFuZ2VzKGllKSkpfW5nT25EZXN0cm95'@;
put 'KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRoOmF9fXNldENvbHVtblN0'@;
put 'YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1thXT10aGlzLmNvbHVtblN0YXRlfXN0YXRlQ2hhbmdlcyhhKXthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBMMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2Jy'@;
put 'ZWFrO2Nhc2UgTDAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLndpZHRoU2V0JiYhdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCks'@;
put 'dGhpcy5hdXRvU2V0JiZ0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCl9ZGV0ZWN0U3RyaWN0V2lkdGgoKXtyZXR1cm4gdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnk/dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS53aWR0aEFmdGVy'@;
put 'UmVzaXplOnRoaXMuYXV0b1NldD8wOnRoaXMuZG9tQWRhcHRlci51c2VyRGVmaW5lZFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl9Y29tcHV0ZVdpZHRoKGEpe2xldCBkPWE7cmV0dXJuIGR8fChkPXRoaXMuZG9tQWRhcHRlci5zY3JvbGxXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQp'@;
put 'KSxkfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJw'@;
put 'eCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEc4KSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0'@;
put 'aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSEUpOnRoaXMucmVuZGVyZXIucmVt'@;
put 'b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEhFKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dChlZyksdHQoaDEpLHR0KHRIKSx0dChIZiksdHQocEgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siY2xyLWRnLWNvbHVtbiJdXSxvdXRwdXRzOntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6ZSJ9LGZlYXR1cmVzOlt0aShbdEgsdndlXSldfSksY30pKCksd3dlPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXty'@;
put 'ZXR1cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG9nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0'@;
put 'aW9ucz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENvbHVtblN0YXRlKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q29sdW1uU3RhdGUoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0Q29sdW1uU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmKGEu'@;
put 'Y29sdW1uU3RhdGU9dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2RdKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChIZikpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il0sWyJjbHItZGctcm93'@;
put 'LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLHJnLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpO2NvbnN0IEN3ZT1jPT5ScyhjKT9uZXcgaDE6bmV3IHd3ZTtsZXQgJDg9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLGdlLHdlKXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmVsPV8sdGhpcy5yZW5kZXJlcj1ULHRoaXMuZGV0YWlsU2VydmljZT1XLHRoaXMudGFibGVTaXplU2VydmljZT1pZSx0'@;
put 'aGlzLmNvbHVtbnNTZXJ2aWNlPWdlLHRoaXMubmdab25lPXdlLHRoaXMuX2hlaWdodFNldD0hMSx0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu'@;
put 'b3JnYW5pemVyLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucGFnZS5zaXplQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hl'@;
put 'aWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmliZShFZT0+dGhpcy50b2dnbGVEZXRhaWxQYW5lKEVlKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu'@;
put 'aXRlbXMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmhlYWRlcnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlz'@;
put 'LnNldHVwQ29sdW1ucygpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3RhYmlsaXplQ29sdW1ucygpfSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGFibGVTaXplU2VydmljZS50YWJsZT10aGlzLmVsfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuc2hvdWxkU3RhYmlsaXpl'@;
put 'Q29sdW1ucyYmdGhpcy5zdGFiaWxpemVDb2x1bW5zKCksdGhpcy5zaG91bGRDb21wdXRlSGVpZ2h0KCkmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuY29tcHV0ZURhdGFncmlkSGVpZ2h0KCl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5z'@;
put 'dWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVycyYmKGEmJiF0aGlzLmNvbHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZCxo'@;
put 'KT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChoLHtjaGFuZ2VzOltMMC5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVhZGVycy5mb3JFYWNoKChh'@;
put 'LGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMucm93cy5mb3JFYWNoKGE9PmEuc2V0Q29sdW1uU3RhdGUoKSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRT'@;
put 'ZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5zaXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5k'@;
put 'ZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSsicHgiKSx0aGlzLl9oZWlnaHRTZXQ9ITB9cmVzZXREYXRhZ3JpZEhlaWdodCgpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLCIiKSx0aGlzLl9oZWlnaHRT'@;
put 'ZXQ9ITF9Y29tcHV0ZUhlYWRlcnNXaWR0aCgpe2NvbnN0IGE9dGhpcy5oZWFkZXJzLmxlbmd0aDtsZXQgZD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IF89e2NoYW5nZXM6W0wwLldJRFRIXSwuLi5oLmdldENvbHVtbldpZHRoU3RhdGUoKX07Xy5zdHJpY3RXaWR0aHx8'@;
put 'KGQ9ITEpLGE9PT1mKzEmJmQmJihfLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZixfKX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITEsIXRoaXMuY29sdW1uc1NpemVzU3RhYmxlJiZ0aGlzLml0'@;
put 'ZW1zLmRpc3BsYXllZC5sZW5ndGg+MCYmKHRoaXMub3JnYW5pemVyLnJlc2l6ZSgpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoZWcpLHR0KEFwKSx0dChFcCksdHQoaDEpLHR0KE5pKSx0dChG'@;
put 'byksdHQoaDIpLHR0KG5IKSx0dChIZiksdHQoTm8pKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLGlnLDQpLElvKGgsb2csNSkpLDImYSl7bGV0IGY7c2koZj1h'@;
put 'aSgpKSYmKGQuaGVhZGVycz1mKSxzaShmPWFpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTpoMSx1c2VGYWN0b3J5OkN3ZSxkZXBzOltHc119XSldfSksY30pKCksU3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhmbWUscG1lLG5iLGdt'@;
put 'ZSxJSyxtbWUsTEssdm1lLF9tZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxkUSwkbCxMRixzZCxhd2UsaFEsJEosQWIseGIsQkYseUUscTVd'@;
put 'XX0pLGN9KSgpLE1RPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stY29udGVudCJdXX0pLGN9KSgpLG1IPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoKXt0aGlzLl9nZW5lcmF0ZWRJZD1udWxsLHRoaXMuX2lkPW51bGx9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD0ic3RyaW5nIj09dHlwZW9mIGEmJiIiIT09YT9hOnRoaXMuX2dlbmVyYXRlZElkKyIifW5nT25Jbml0KCl7dGhpcy5fZ2VuZXJhdGVk'@;
put 'SWQ9ImNsci1zdGFjay1sYWJlbC0iK0RjKCksdGhpcy5pZHx8KHRoaXMuX2lkPXRoaXMuX2dlbmVyYXRlZElkKyIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1s'@;
put 'YWJlbCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5j'@;
put 'YXBzdWxhdGlvbjoyfSksY30pKCkseFE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZm9j'@;
put 'dXNlZD0hMSx0aGlzLnVuaXF1ZUlkPURjKCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhp'@;
put 'cy5fZnVsbHlJbml0aWFsaXplZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhw'@;
put 'YW5kZWR9Z2V0IG9uU3RhY2tMYWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5h'@;
put 'cmlhTGV2ZWw/dGhpcy5hcmlhTGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgo'@;
put 'KXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4'@;
put 'cGFuZGFibGU9ITB9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3Rh'@;
put 'Y2stY2hpbGRyZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYywxMiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsbUgsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsImhlYWRpbmciKSgiYXJp'@;
put 'YS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLGRyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24t'@;
put 'Zm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbImNsclNiRXhwYW5kZWQiLCJleHBhbmRlZCJdLGV4cGFuZGFibGU6WyJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOlsiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxh'@;
put 'cmlhU2V0c2l6ZTpbImNsclN0YWNrVmlld1NldHNpemUiLCJhcmlhU2V0c2l6ZSJdLGFyaWFQb3NpbnNldDpbImNsclN0YWNrVmlld1Bvc2luc2V0IiwiYXJpYVBvc2luc2V0Il0sc2V0Q2hhbmdlZFZhbHVlOlsiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0'@;
put 'czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6a19lLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJpZCIsImNsaWNrIiwia2V5dXAuZW50ZXIiLCJrZXl1cC5zcGFjZSIsImtleWRvd24uc3Bh'@;
put 'Y2UiLCJmb2N1cyIsImJsdXIiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2st'@;
put 'Y2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihUaShFX2UpLG1lKDAsImRpdiIsMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbigpe3JldHVybiBk'@;
put 'LnRvZ2dsZUV4cGFuZCgpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBmLnByZXZlbnREZWZhdWx0KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITF9KSxRZSgxLFNfZSwx'@;
put 'LDEsImNkcy1pY29uIiwxKSxRZSgyLE1fZSwyLDEsInNwYW4iLDIpLG1lKDMsImRpdiIsMyksa3IoNCkseWUoKSxtZSg1LCJkaXYiLDQpLGtyKDYsMSkseWUoKSgpLG1lKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksUWUoOCx4X2UsMiw0LCJkaXYiLDYpLHllKCkpLDImYSYmKFJl'@;
put 'KCJpZCIsZC51bmlxdWVJZCksVHIoInJvbGUiLGQucm9sZSkoInRhYmluZGV4IixkLnRhYkluZGV4KSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRhYmxlKSxDZSgx'@;
put 'KSxSZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLENlKDUpLFJlKCJjbHJFeHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W2JFLFppLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9'@;
put 'Il19KSxjfSkoKSxxOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zYXZlPW5ldyBFcighMSksdGhpcy5lZGl0YWJsZT0hMSx0aGlzLmVkaXRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLl9lZGl0TW9kZT0hMX1nZXQgZWRpdGluZygpe3JldHVybiB0aGlzLmVkaXRhYmxlJiZ0'@;
put 'aGlzLl9lZGl0TW9kZX1zZXQgZWRpdGluZyhhKXt0aGlzLmVkaXRhYmxlJiYodGhpcy5fZWRpdE1vZGU9YSx0aGlzLmVkaXRpbmdDaGFuZ2UuZW1pdChhKSxhfHx0aGlzLnNhdmUuZW1pdChudWxsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj'@;
put 'Llx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxvdXRwdXRzOntzYXZlOiJjbHJTdGFja1NhdmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6VF9lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihUaShBX2UpLGtyKDApLG1lKDEsImRpdiIsMCksa3IoMiwxKSx5ZSgpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksRXdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCl9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxoUV1dfSksY30pKCksc2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlz'@;
put 'LmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBiZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qga1E9e3Byb3ZpZGU6c2csdXNl'@;
put 'RmFjdG9yeTpmdW5jdGlvbiBrd2UoYyl7cmV0dXJuIGN8fG5ldyBzZ30sZGVwczpbW25ldyB6MixuZXcgZzAsc2ddXX07bGV0IEFRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZXhwYW5kU2VydmljZT1kLGQmJih0aGlzLnN1YnNj'@;
put 'cmlwdGlvbj10aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRoaXMucGFyZW50JiYhdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXImJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfXNo'@;
put 'b3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5t'@;
put 'b2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQoWXUsOCkpfSxjLlx1MDI3NWNtcD13cih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsImdyb3VwIil9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFy'@;
put 'czoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmUWUoMCxWX2UsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmUmUoIm5n'@;
put 'SWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W1ppLHhzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgZmM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRF'@;
put 'Uk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30oZmN8fHt9KTtjbGFzcyBUUXtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZyQ9bmV3IFRlKCExKSx0aGlzLnNlbGVjdGVkPW5ldyBUZShmYy5VTlNFTEVDVEVEKSx0aGlzLl9sb2FkaW5nPSExfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMu'@;
put 'X2xvYWRpbmd9c2V0IGxvYWRpbmcobCl7dGhpcy5fbG9hZGluZz1sLHRoaXMubG9hZGluZyQubmV4dChsKX1kZXN0cm95KCl7dGhpcy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxk'@;
put 'JiZsIT09ZmMuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9Pmguc2V0U2VsZWN0ZWQobCwhMSwhMCkpLGEmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfXRvZ2dsZVNlbGVjdGlvbihs'@;
put 'KXt0aGlzLnNldFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQudmFsdWU9PT1mYy5TRUxFQ1RFRD9mYy5VTlNFTEVDVEVEOmZjLlNFTEVDVEVELCEwLGwpfV91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKXtjb25zdCBsPXRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCk7'@;
put 'bCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQobCksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9Y29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCl7bGV0IGw9ITEsYT0hMTtmb3IoY29uc3Qg'@;
put 'ZCBvZiB0aGlzLmNoaWxkcmVuKXN3aXRjaChkLnNlbGVjdGVkLnZhbHVlKXtjYXNlIGZjLklOREVURVJNSU5BVEU6cmV0dXJuIGZjLklOREVURVJNSU5BVEU7Y2FzZSBmYy5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuIGZjLklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwp'@;
put 'cmV0dXJuIGZjLklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT9mYy5VTlNFTEVDVEVEOmZjLlNFTEVDVEVEOmZjLlVOU0VMRUNURUR9fWNsYXNzIE5FIGV4dGVuZHMgVFF7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLmdldENoaWxkcmVuPWQsdGhpcy5mZWF0dXJlc1NlcnZpY2U9'@;
put 'aCx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMSx0aGlzLl9jaGlsZHJlbj1bXSx0aGlzLm1vZGVsPWwsdGhpcy5wYXJlbnQ9YX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5mZXRjaENoaWxkcmVuKCksdGhpcy5fY2hpbGRyZW59c2V0IGNoaWxkcmVuKGwpe3RoaXMuX2NoaWxkcmVuPWx9ZGVz'@;
put 'dHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHN1cGVyLmRlc3Ryb3koKX1jbGVhckNoaWxkcmVuKCl7dGhpcy5fY2hpbGRyZW4uZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuLHRoaXMuY2hpbGRyZW5G'@;
put 'ZXRjaGVkPSExfWZldGNoQ2hpbGRyZW4oKXtpZih0aGlzLmNoaWxkcmVuRmV0Y2hlZClyZXR1cm47Y29uc3QgbD10aGlzLmdldENoaWxkcmVuKHRoaXMubW9kZWwpOyFmdW5jdGlvbiBBd2UoYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59KGwpP0ZPKGwpPyh0aGlzLmxv'@;
put 'YWRpbmc9ITAsdGhpcy5zdWJzY3JpcHRpb249bC5zdWJzY3JpYmUoYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKTp0aGlzLl9jaGlsZHJlbj1sP3RoaXMud3JhcENoaWxkcmVuKGwpOltdOih0aGlzLmxvYWRpbmc9ITAsbC50aGVuKGE9'@;
put 'Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxvYWRpbmc9ITF9KSksdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITAsdGhpcy5mZWF0dXJlc1NlcnZpY2UmJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5uZXh0KCl9d3JhcENoaWxkcmVuKGwpe3Jl'@;
put 'dHVybiBsLm1hcChhPT5uZXcgTkUoYSx0aGlzLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKX19bGV0IERRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNo'@;
put 'YW5nZXMoKXtsZXQgYTthPUFycmF5LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IE5FKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyBORSh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1'@;
put 'cmVzU2VydmljZSldLHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygp'@;
put 'fSkpLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoemEpLHR0KHNnKSx0dChVYSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOlsi'@;
put 'Y2xyUmVjdXJzaXZlRm9yT2YiLCJub2RlcyJdLGdldENoaWxkcmVuOlsiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbdmFdfSksY30pKCksdkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgYmUs'@;
put 'dGhpcy5fZm9jdXNDaGFuZ2U9bmV3IGJlfWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5f'@;
put 'Zm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVu'@;
put 'dCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVB'@;
put 'Ym92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3Rh'@;
put 'cnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2Nv'@;
put 'bnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtkLmxlbmd0aC0xXSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4g'@;
put 'aDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2Rl'@;
put 'TW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVu'@;
put 'dDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5v'@;
put 'ZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaCBvZiBkLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNX'@;
put 'aXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtmb3IobGV0IF89aC5pbmRleE9mKGQpKzE7XzxoLmxlbmd0aDtfKyspe2NvbnN0IFc9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoW19dKTtpZihXKXJldHVybiBXfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dp'@;
put 'dGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihkLnBhcmVudCYmZC5wYXJlbnQ9PT1oKWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQp'@;
put 'e3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9kOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChhLGQpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVT'@;
put 'dGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChhLGQpO3JldHVybiBmfHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgVHdlIGV4dGVuZHMgVFF7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnBhcmVudD1sLGwmJmwuX2FkZENoaWxk'@;
put 'KHRoaXMpLHRoaXMuY2hpbGRyZW49W119ZGVzdHJveSgpe3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fcmVtb3ZlQ2hpbGQodGhpcyksc3VwZXIuZGVzdHJveSgpfV9hZGRDaGlsZChsKXt0aGlzLmNoaWxkcmVuLnB1c2gobCl9X3JlbW92ZUNoaWxkKGwpe2NvbnN0IGE9dGhpcy5jaGlsZHJl'@;
put 'bi5pbmRleE9mKGwpO2E+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGEsMSl9fWxldCBEcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWw9YX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpfWFj'@;
put 'dGl2YXRlKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2smJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImNsci10cmVlbm9kZS1saW5rIl1dfSksY30pKCksZzE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZvclR5cGVBaGVhZFByb3ZpZGVyPWgsdGhpcy5mZWF0dXJlc1NlcnZp'@;
put 'Y2U9Zix0aGlzLmV4cGFuZFNlcnZpY2U9Xyx0aGlzLmNvbW1vblN0cmluZ3M9VCx0aGlzLmZvY3VzTWFuYWdlcj1XLHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBFcix0aGlzLlNUQVRFUz1mYyx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRo'@;
put 'aXMubm9kZUlkPURjKCksdGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9dGhp'@;
put 'cy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uP2llLnZpZXc/aWUudmlldy5jb250ZXh0LmNsck1vZGVsOmllLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgVHdlKGQ/ZC5fbW9kZWw6bnVsbCksdGhpcy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlz'@;
put 'Ll9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPWZjLlVOU0VMRUNURUQpLCJib29sZWFuIj09dHlwZW9mIGEmJihhPWE/ZmMuU0VMRUNURUQ6ZmMuVU5TRUxF'@;
put 'Q1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFu'@;
put 'ZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWZjLlNFTEVDVEVEOiEhdGhpcy50cmVlTm9k'@;
put 'ZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5vZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9kZUxpbmtMaXN0LmZpcnN0fWdldCBpc1BhcmVudCgpe3JldHVybiB0aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVu'@;
put 'Z3RoPjB9bmdPbkluaXQoKXt0aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoSWEoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGVkQ2hhbmdl'@;
put 'LmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu'@;
put 'Zm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlzLnN1YnNjcmlwdGlv'@;
put 'bnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKGY4KDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb3JUeXBlQWhlYWRQcm92aWRlciYmKHRoaXMuX21vZGVsLnRleHRDb250ZW50PXRoaXMuZm9yVHlwZUFo'@;
put 'ZWFkUHJvdmlkZXIudGV4dENvbnRlbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKGY4KDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVh'@;
put 'ZEtleUJ1ZmZlcj0iIn0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RlbC5kZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRhYmxl'@;
put 'OiEhdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGFibGV8fHRoaXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGE9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7UnMo'@;
put 'dGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJih0aGlzLnNldFRhYkluZGV4KDApLGEuZm9jdXMoKSxhLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhpcy5m'@;
put 'b2N1c01hbmFnZXIuYnJvYWRjYXN0Rm9jdXNlZE5vZGUodGhpcy5ub2RlSWQpfW9uS2V5RG93bihhKXtzd2l0Y2goVEYoYSksbDIoYS5rZXkpKXtjYXNlIHdvLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2Ugd28uQXJyb3dE'@;
put 'b3duOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNlIHdvLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7'@;
put 'Y2FzZSB3by5Ib21lOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdvLkVuZDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdv'@;
put 'LkVudGVyOnRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2Ugd28uU3BhY2U6Y2FzZSB3by5TcGFjZWJhcjphLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50'@;
put 'ZXh0Q29udGVudCYmZnVuY3Rpb24gcnllKGMpe2NvbnN0IGw9Yy5rZXk7cmV0dXJuIGwudG9Mb3dlckNhc2UoKSE9PWwudG9VcHBlckNhc2UoKXx8bD49IjAiJiZsPD0iOSJ9KGEpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9YS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2'@;
put 'ZW50Lm5leHQodGhpcy50eXBlQWhlYWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KGEpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWEsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRl'@;
put 'eCIsYSl9Y2hlY2tUYWJJbmRleChhKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEpfXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmlzRXhwYW5kYWJs'@;
put 'ZSgpJiYhdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpfWV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCl7dGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFu'@;
put 'YWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5leHBhbmRlZD90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITE6dGhpcy5mb2N1'@;
put 'c01hbmFnZXIuZm9jdXNQYXJlbnQodGhpcy5fbW9kZWwpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVlTm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJl'@;
put 'c1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChHcyksdHQoYywxMiksdHQoZnllLDEwKSx0dChzZyksdHQoWXUpLHR0KEVzKSx0dCh2SCksdHQoRWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y2xyLXRyZWUtbm9kZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLERwLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQudHJlZU5vZGVMaW5rTGlzdD1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oQl9lLDcsTmkpLDImYSl7'@;
put 'bGV0IGg7c2koaD1haSgpKSYmKGQuY29udGVudENvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLXRyZWUtbm9kZSIsITApfSxpbnB1dHM6e2V4cGFuZGFibGU6WyJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJd'@;
put 'LHNlbGVjdGVkOlsiY2xyU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRXhwYW5kZWQiLCJleHBhbmRlZCJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZToiY2xyU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOlt0'@;
put 'aShba1EsWXUse3Byb3ZpZGU6dmIsdXNlRXhpc3Rpbmc6WXV9XSldLG5nQ29udGVudFNlbGVjdG9yczokX2UsZGVjbHM6MTIsdmFyczo5LGNvbnN0czpbWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlk'@;
put 'b3duIiwiZm9jdXMiXSxbImNvbnRlbnRDb250YWluZXIiLCIiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRy'@;
put 'ZWVub2RlLXNwaW5uZXItY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIGNsci10cmVlbm9kZS1jaGVja2JveCIsNCwibmdJZiJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2Vkb3duIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0'@;
put 'LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiXSxbInNoYXBlIiwiYW5nbGUiLDEs'@;
put 'ImNsci10cmVlbm9kZS1jYXJldC1pY29uIl0sWzEsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lciIsInNwaW5uZXIiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCJjbHItdHJlZW5vZGUtY2hlY2tib3giXSxbImFyaWEtaGlkZGVu'@;
put 'IiwidHJ1ZSIsInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDEsImNsci1jaGVja2JveCIsMywiaWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsImZvY3VzIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbNCwi'@;
put 'bmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKEdfZSksbWUoMCwiZGl2IiwwLDEpLHh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigp'@;
put 'fSksUWUoMixqX2UsMiwxLCJidXR0b24iLDIpLFFlKDMsel9lLDIsMCwiZGl2IiwzKSxRZSg0LFVfZSwzLDQsImRpdiIsNCksbWUoNSwiZGl2Iiw1KSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzVHJlZU5vZGUoKX0pLGtyKDYpLFFlKDcsV19lLDMsMiwiZGl2Iiw2'@;
put 'KSx5ZSgpKCksbWUoOCwiZGl2Iiw3KSxrcig5LDEpLGtyKDEwLDIpLHF0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSx5ZSgpKSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFibGUoKT9kLmV4cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVjdGVkIixkLmFyaWFTZWxl'@;
put 'Y3RlZCksQ2UoMiksUmUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQuZmVh'@;
put 'dHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLENlKDMpLFJlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfHxkLmFyaWFTZWxlY3RlZCksQ2UoMSksUmUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQi'@;
put 'KSxUcigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLENlKDMpLFJlKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbQVEsWmkscXNdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2ExKCJ0'@;
put 'b2dnbGVDaGlsZHJlbkFuaW0iLFtoYygiY29sbGFwc2VkID0+IGV4cGFuZGVkIixbX3Moe2hlaWdodDowfSkscnUoMjAwLF9zKHtoZWlnaHQ6IioifSkpXSksaGMoImV4cGFuZGVkID0+IGNvbGxhcHNlZCIsW19zKHtoZWlnaHQ6IioifSkscnUoMjAwLF9zKHtoZWlnaHQ6MH0pKV0pLEt4KCJl'@;
put 'eHBhbmRlZCIsX3Moe2hlaWdodDoiKiIsIm92ZXJmbG93LXkiOiJ2aXNpYmxlIn0pKSxLeCgiY29sbGFwc2VkIixfcyh7aGVpZ2h0OjB9KSldKV19fSksY30pKCksZGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQse25hdGl2ZUVsZW1lbnQ6aH0sZixfKXt0aGlzLmZlYXR1cmVzU2Vy'@;
put 'dmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMuc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBUPV8ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4yKGgsImZvY3VzaW4iKS5zdWJzY3JpYmUoVz0+e1cudGFyZ2V0PT09aCYmKHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5mb2N1c0Zp'@;
put 'cnN0VmlzaWJsZU5vZGUoKSxmLnJlbW92ZUF0dHJpYnV0ZShoLCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChUKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5mZWF0dXJl'@;
put 'c1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjB9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Um9vdE5vZGVz'@;
put 'KCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4h'@;
put 'YS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQodkgpLHR0KE5pKSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rp'@;
put 'b24oYSxkLGgpe2lmKDEmYSYmSW8oaCxnMSw0KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsInRyZWUiKSgiYXJpYS1t'@;
put 'dWx0aXNlbGVjdGFibGUiLGQuaXNNdWx0aVNlbGVjdGFibGUpfSxpbnB1dHM6e2xhenk6WyJjbHJMYXp5IiwibGF6eSJdfSxmZWF0dXJlczpbdGkoW2tRLHZIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsz'@;
put 'LCJjaGlsZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCksUWUoMSxxX2UsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W0FR'@;
put 'LFppXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxMd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKGg4KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1t'@;
put 'aSh7aW1wb3J0czpbW29vLHNhLExGXV19KSxjfSkoKSxSd2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbU3dlLEV3ZSxMd2VdfSks'@;
put 'Y30pKCk7ZnVuY3Rpb24gSVEoYyxsLGEpe3JldHVybiBLZS5jcmVhdGUoZD0+e2woZCk7Y29uc3QgaD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCBfSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yZW5k'@;
put 'ZXJlcj1hLHRoaXMucGFyZW50PWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZpY2U9Zix0aGlzLnBsYXRmb3JtSWQ9Xyx0aGlzLmlkPURjKCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXI9ITEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXSx0aGlzLnJlc2V0Q2hpbGRyZW4oKSx0'@;
put 'aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksdGhpcy5wYXJlbnR8fHRoaXMuaGFuZGxlUm9vdEZvY3VzKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5w'@;
put 'dXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dyaWdodCIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIixkPT50aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5mb2N1c1NlcnZpY2Uu'@;
put 'bGlzdGVuVG9BcnJvd0tleXMoYSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfXNldCBjb250YWluZXIoYSl7dGhpcy5fY29udGFpbmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24udGFiIixkPT50aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZShkMS5MRUZUKSxkLnN0b3BQcm9wYWdhdGlv'@;
put 'bigpfSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihhKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxp'@;
put 'c3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuY2hpbGRyZW4ucGlwZShpZCgxKSkuc3Vic2NyaWJlKGY9PmYuZm9yRWFjaChfPT5fLmJsdXIoKSkpO2NvbnN0IGg9ZC5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2gmJlJz'@;
put 'KHRoaXMucGxhdGZvcm1JZCkmJihhLmNvbnRhaW5zKGgpfHxoPT09dGhpcy50cmlnZ2VyKXx8KHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyPSExLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKSx0'@;
put 'aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJzdEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3JpZ2luYWxFdmVudCYmc2V0VGltZW91dCgoKT0+'@;
put 'e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHRoaXMucGFyZW50P2QxLlJJR0hUOmQxLkRPV04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlUm9vdEZvY3VzKCl7Y29uc3QgYT10aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlciYmdGhpcy5mb2N1cygpKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcj1kfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNo'@;
put 'KCgpPT5hLnVuc3Vic2NyaWJlKCkpfWZvY3VzKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuYmx1cigpfWFjdGl2YXRlKCl7UnModGhp'@;
put 'cy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmNsaWNrKCl9cmVzZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3IHF4KDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKE1lKGE9PmFbMF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFu'@;
put 'ZEdldENoaWxkcmVuKCkucGlwZShNZShhPT5hWzBdKSksdGhpcy51cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTWUoYT0+YVthLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihhKXtJRi5saW5rVmVydGljYWwoYSksdGhpcy5wYXJlbnQmJklGLmxpbmtQYXJlbnQoYSx0aGlzLmNs'@;
put 'b3NlQW5kR2V0VGhpcygpLGQxLkxFRlQpLHRoaXMuY2hpbGRyZW4ubmV4dChhKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gSVEodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBJUShXaSh0aGlzKSwoKT0+'@;
put 'dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoYywxMiksYXIoS3MpLGFyKEViKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9'@;
put 'KSgpO2NvbnN0IE93ZT1RSihfSCk7bGV0IEZiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBiZX1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBGd2U9e3Byb3ZpZGU6RmIsdXNlRmFjdG9yeTpmdW5jdGlvbiBQd2UoYyl7cmV0dXJuIGN8fG5ldyBG'@;
put 'Yn0sZGVwczpbW25ldyB6MixuZXcgZzAsRmJdXX07bGV0IE5mPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5wYXJlbnQ9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmNkcj1oLHRoaXMuaXNNZW51Q2xvc2FibGU9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuY2hhbmdlcy5zdWJzY3JpYmUoXz0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49XykpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKSl9bmdPbkRlc3Ryb3koKXt0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChjLDEyKSx0dChLcyksdHQoVWEpLHR0KEZiKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs'@;
put 'ci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwiaXNNZW51Q2xv'@;
put 'c2FibGUiXX0sZmVhdHVyZXM6W3RpKFtGd2Use3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LGpKLEtzLE93ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSks'@;
put 'Y30pKCk7Y29uc3QgSHdlPVt7cHJvdmlkZTpTRSx1c2VDbGFzczooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMucGxhdGZvcm1JZD1oLHRoaXMuaWQ9RGMoKSx0aGlzLmRpc2FibGVkPSExLGQuc2V0QXR0cmlidXRlKGEubmF0'@;
put 'aXZlRWxlbWVudCwiaWQiLHRoaXMuaWQpLGQuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCIw'@;
put 'IiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSkpfWJsdXIoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJl'@;
put 'ci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKEZvKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpfV07bGV0IEs4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZHJvcGRvd249YSx0'@;
put 'aGlzLl9kcm9wZG93blNlcnZpY2U9ZCx0aGlzLmZvY3VzYWJsZUl0ZW09aCx0aGlzLnNldEJ5RGVwcmVjYXRlZERpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNh'@;
put 'YmxlZD0hIWF8fCIiPT09YX1nZXQgZGlzYWJsZWREZXByZWNhdGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWREZXByZWNhdGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YSx0aGlzLnNldEJ5RGVwcmVjYXRlZERp'@;
put 'c2FibGVkPSEwfWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1hfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVD'@;
put 'bG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFn'@;
put 'YXRpb25JZkRpc2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8YykodHQoTmYpLHR0KEZiKSx0dChTRSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5v'@;
put 'bkRyb3Bkb3duSXRlbUNsaWNrKCl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TcGFjZUtleWRvd24oZil9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25FbnRlcktleWRvd24oZil9KSwyJmEmJihUcigicm9sZSIsIm1lbnVpdGVtIiko'@;
put 'ImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCYmZC5zZXRCeURlcHJlY2F0ZWREaXNhYmxlZD8iIjpudWxsKSgiaWQiLGQuZHJvcGRvd25JdGVtSWQpLGRyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7'@;
put 'ZGlzYWJsZWQ6WyJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZGlzYWJsZWREZXByZWNhdGVkOlsiZGlzYWJsZWQiLCJkaXNhYmxlZERlcHJlY2F0ZWQiXSxkcm9wZG93bkl0ZW1JZDpbImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W3RpKFtId2VdKV19KSxjfSkoKTt2YXIgR3I9'@;
put 'ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9DRU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9QX1JJR0hUPTRd'@;
put 'PSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0iVE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NFTlRFUj05XT0i'@;
put 'TEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oR3J8fHt9KTtjb25zdCBMUT0iYWJzb2x1dGUiO2NsYXNzIEJ3ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmJvdW5kT25TY3JvbGxM'@;
put 'aXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzPVtdLGwuc3R5bGUucG9zaXRpb249TFEsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9y'@;
put 'KGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQYXJlbnQ6Xz0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksXyYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IFQ9bC5nZXRCb3VuZGluZ0NsaWVudFJl'@;
put 'Y3QoKSxXPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgaWU9VC5sZWZ0LVcubGVmdCtoLGdlPVQudG9wLVcudG9wK2Y7c3dpdGNoKGEpe2Nhc2UgR3IuTEVGVF9UT1A6Y2FzZSBHci5UT1BfTEVGVDpicmVhaztjYXNlIEdyLlRPUF9DRU5URVI6aWUrPVQud2lkdGgv'@;
put 'MjticmVhaztjYXNlIEdyLlRPUF9SSUdIVDpjYXNlIEdyLlJJR0hUX1RPUDppZSs9VC53aWR0aDticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6Z2UrPVQuaGVpZ2h0O2JyZWFrO2Nhc2UgR3IuQk9UVE9NX0NFTlRFUjpnZSs9VC5oZWlnaHQsaWUrPVQud2lk'@;
put 'dGgvMjticmVhaztjYXNlIEdyLkJPVFRPTV9SSUdIVDpjYXNlIEdyLlJJR0hUX0JPVFRPTTpnZSs9VC5oZWlnaHQsaWUrPVQud2lkdGg7YnJlYWs7Y2FzZSBHci5MRUZUX0NFTlRFUjpnZSs9VC5oZWlnaHQvMjticmVhaztjYXNlIEdyLlJJR0hUX0NFTlRFUjpnZSs9VC5oZWlnaHQvMixpZSs9'@;
put 'VC53aWR0aH1zd2l0Y2goZCl7Y2FzZSBHci5MRUZUX1RPUDpjYXNlIEdyLlRPUF9MRUZUOmJyZWFrO2Nhc2UgR3IuVE9QX0NFTlRFUjppZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuVE9QX1JJR0hUOmNhc2UgR3IuUklHSFRfVE9QOmllLT1XLndpZHRoO2JyZWFrO2Nhc2UgR3IuTEVGVF9C'@;
put 'T1RUT006Y2FzZSBHci5CT1RUT01fTEVGVDpnZS09Vy5oZWlnaHQ7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOmdlLT1XLmhlaWdodCxpZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuQk9UVE9NX1JJR0hUOmNhc2UgR3IuUklHSFRfQk9UVE9NOmdlLT1XLmhlaWdodCxpZS09Vy53aWR0'@;
put 'aDticmVhaztjYXNlIEdyLkxFRlRfQ0VOVEVSOmdlLT1XLmhlaWdodC8yO2JyZWFrO2Nhc2UgR3IuUklHSFRfQ0VOVEVSOmdlLT1XLmhlaWdodC8yLGllLT1XLndpZHRofWNvbnN0IHdlPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxFZT1wYXJzZUludCh3ZS5tYXJnaW5MZWZ0LDEw'@;
put 'KSxaZT1wYXJzZUludCh3ZS5tYXJnaW5SaWdodCwxMCksb3Q9cGFyc2VJbnQod2UubWFyZ2luVG9wLDEwKSxldD1wYXJzZUludCh3ZS5tYXJnaW5Cb3R0b20sMTApO3N3aXRjaChhKXtjYXNlIEdyLkxFRlRfVE9QOmNhc2UgR3IuVE9QX0xFRlQ6Y2FzZSBHci5UT1BfUklHSFQ6Y2FzZSBHci5S'@;
put 'SUdIVF9UT1A6KGQ9PT1Hci5CT1RUT01fUklHSFR8fGQ9PT1Hci5SSUdIVF9CT1RUT00pJiYoZ2UtPWV0LGllLT1aZSksKGQ9PT1Hci5CT1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKGdlLT1vdCxpZSs9RWUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihn'@;
put 'ZSs9b3QsaWUrPUVlKSwoZD09PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihnZSs9b3QsaWUtPVplKTticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6Y2FzZSBHci5CT1RUT01fUklHSFQ6Y2FzZSBHci5SSUdIVF9CT1RUT006KGQ9PT1Hci5C'@;
put 'T1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKGdlLT1ldCxpZSs9RWUpLChkPT09R3IuQk9UVE9NX1JJR0hUfHxkPT09R3IuUklHSFRfQk9UVE9NKSYmKGdlLT1ldCxpZS09WmUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihnZSs9b3QsaWUrPUVlKSwoZD09'@;
put 'PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihnZSs9b3QsaWUtPVplKTticmVhaztjYXNlIEdyLlRPUF9DRU5URVI6Z2UtPWV0LGllKz1FZSxpZS09WmU7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOmdlKz1vdCxpZSs9RWUsaWUtPVplO2JyZWFrO2Nhc2UgR3IuTEVGVF9D'@;
put 'RU5URVI6Z2UrPW90LGdlLT1ldCxpZS09WmU7YnJlYWs7Y2FzZSBHci5SSUdIVF9DRU5URVI6Z2UrPW90LGdlLT1ldCxpZSs9RWV9cmV0dXJuIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKGllKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91'@;
put 'bmQoZ2UpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0'@;
put 'aW9uO3JldHVybiJyZWxhdGl2ZSI9PT1hfHxhPT09TFF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVudCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBiZTtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1'@;
put 'bWVudCYmKHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92'@;
put 'ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMpbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3Jv'@;
put 'bGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8'@;
put 'ImF1dG8iPT09YS5vdmVyZmxvd1l9fWxldCBiSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnRIb3N0PWQsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSExLHRoaXMucG9wb3Zlck9wdGlvbnM9e30sdGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5kb2N1bWVudEVT'@;
put 'Q0xpc3RlbmVyPW51bGwsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2s9aD0+e3RoaXMuYW5jaG9yRWxlbS5jb250YWlucyhoLnRhcmdldCl8fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LHRoaXMuZWw9YS5nZXQoTmkpLHRoaXMudG9nZ2xlU2VydmljZT1hLmdldChLcyks'@;
put 'dGhpcy5yZW5kZXJlcj1hLmdldChGbyksdGhpcy5uZ1pvbmU9YS5nZXQoTm8pLHRoaXMucmVmPWEuZ2V0KFVhKSx0aGlzLmFuY2hvckVsZW09ZC5uYXRpdmVFbGVtZW50LHRoaXMucG9wb3Zlckluc3RhbmNlPW5ldyBCd2UodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnN1YnNjcmlwdGlv'@;
put 'bj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKToodGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy5h'@;
put 'bmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfWdldCBpc09mZlNjcmVlbigpe3JldHVybiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNl'@;
put 'LmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRl'@;
put 'c3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1yZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zl'@;
put 'ckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVu'@;
put 'KCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmbDIoYS5rZXkpPT09d28uRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9j'@;
put 'dW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50'@;
put 'JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYm'@;
put 'ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KE5p'@;
put 'LDQpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImlzLW9mZi1zY3JlZW4iLGQuaXNPZmZTY3JlZW4pfX0pLGN9KSgpLGFnPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmKXtp'@;
put 'ZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PUdyLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUCk6KHRo'@;
put 'aXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRz'@;
put 'aWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUdyLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5h'@;
put 'bmNob3JQb2ludD1Hci5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxl'@;
put 'ZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1Hci5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1A7YnJlYWs7Y2Fz'@;
put 'ZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2Jy'@;
put 'ZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMu'@;
put 'aXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVz'@;
put 'ZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFYSksdHQoTDgsOCksdHQoYywxMiksdHQoX0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJp'@;
put 'ZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxTRSw0KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsIm1lbnUiKSxkcigiZHJvcGRvd24tbWVudSIsITApKX0saW5w'@;
put 'dXRzOntwb3NpdGlvbjpbImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6W2VvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbGc9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSEwLGEucGFyZW50JiYodGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMSksZi50cmlnZ2VyPWgubmF0aXZlRWxlbWVudH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRo'@;
put 'aXMudG9nZ2xlU2VydmljZS5vcGVufW9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmYpLHR0KEtzKSx0dChOaSksdHQoX0gpKX0s'@;
put 'Yy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyIiLCJjbHJEcm9wZG93blRvZ2dsZSIsIiJdXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJu'@;
put 'IGQub25Ecm9wZG93blRyaWdnZXJDbGljayhmKX0pLDImYSYmKFRyKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpKCJhcmlhLWV4cGFuZGVkIixkLmFjdGl2ZSksZHIoImRyb3Bkb3duLXRvZ2dsZSIsZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImRyb3Bkb3duLWl0ZW0iLCFkLmlzUm9vdExldmVsVG9n'@;
put 'Z2xlKSgiZXhwYW5kYWJsZSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJhY3RpdmUiLGQuYWN0aXZlKSl9fSksY30pKCkseUg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1'@;
put 'MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxzZCxzYV19KSxjfSkoKTtjb25zdCBqd2U9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiXTtsZXQgd0g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hh'@;
put 'cGU9ImluZm8tY2lyY2xlIix0aGlzLl9hbGVydEljb25TaGFwZT0iIix0aGlzLl9hbGVydFR5cGU9ImluZm8ifWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5fYWxlcnRUeXBlfXNldCBhbGVydFR5cGUoYSl7andlLmluZGV4T2YoYSk+LTEmJih0aGlzLl9hbGVydFR5cGU9YSl9Z2V0IGFs'@;
put 'ZXJ0SWNvblNoYXBlKCl7cmV0dXJuIiI9PT10aGlzLl9hbGVydEljb25TaGFwZT90aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS5zaGFwZTp0aGlzLl9hbGVydEljb25TaGFwZX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7YT9hIT09dGhpcy5fYWxlcnRJY29uU2hhcGUmJih0'@;
put 'aGlzLl9hbGVydEljb25TaGFwZT1hKTp0aGlzLl9hbGVydEljb25TaGFwZT0iIn1nZXQgYWxlcnRJY29uVGl0bGUoKXtyZXR1cm4gdGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkudGl0bGV9aWNvbkluZm9Gcm9tVHlwZShhKXtjb25zdCBkPXtzaGFwZToiIixjc3NDbGFz'@;
put 'czoiIix0aXRsZToiIn07c3dpdGNoKGEpe2Nhc2Uid2FybmluZyI6ZC5zaGFwZT0iZXhjbGFtYXRpb24tdHJpYW5nbGUiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6ZC5zaGFwZT0i'@;
put 'ZXhjbGFtYXRpb24tY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2JyZWFrO2Nhc2Uic3VjY2VzcyI6ZC5zaGFwZT0iY2hlY2stY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixkLnRpdGxlPXRo'@;
put 'aXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgYmV9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhp'@;
put 'cy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVydHMoKXtyZXR1cm4gdGhpcy5h'@;
put 'bGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hYS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhpcy5jdXJyZW50PXRoaXMuYWN0'@;
put 'aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRzPWEs'@;
put 'dGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5fY3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuY3VycmVudD49dGhp'@;
put 'cy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hhbmdl'@;
put 'Lm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJl'@;
put 'bnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKGEmJih0aGlzLl9j'@;
put 'dXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxIYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWNvblNlcnZpY2U9YSx0aGlzLmNkcj1kLHRoaXMubXVsdGlBbGVydFNlcnZpY2U9aCx0aGlz'@;
put 'LmNvbW1vblN0cmluZ3M9Zix0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5n'@;
put 'ZWQ9bmV3IEVyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfXNldCBhbGVydEljb25TaGFw'@;
put 'ZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlPWF9c2V0IGNsb3NlZChhKXthJiYhdGhpcy5fY2xvc2VkP3RoaXMuY2xvc2UoKTohYSYmdGhpcy5fY2xvc2VkJiZ0aGlzLm9wZW4oKX1nZXQgYWxlcnRDbGFzcygpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmljb25JbmZvRnJv'@;
put 'bVR5cGUodGhpcy5pY29uU2VydmljZS5hbGVydFR5cGUpLmNzc0NsYXNzfWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufXNldCBoaWRkZW4oYSl7YSE9PXRoaXMuX2hpZGRlbiYmKHRoaXMuX2hpZGRlbj1hLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSl9bmdPbkluaXQoKXt0aGlz'@;
put 'Lm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5oaWRkZW49dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQhPT10aGlzfSkpfW5nT25EZXN0cm95KCl7dGhp'@;
put 'cy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vcGVuKCl7dGhpcy5fY2xvc2VkPSExLHRoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMubXVsdGlBbGVydFNlcnZpY2Uub3BlbigpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMSl9Y2xvc2UoKXtpZighdGhp'@;
put 'cy5jbG9zYWJsZSlyZXR1cm47Y29uc3QgYT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlPy5jdXJyZW50QWxlcnQ9PT10aGlzO3RoaXMuX2Nsb3NlZD0hMCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1p'@;
put 'dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHdIKSx0dChVYSksdHQoVkUsOCksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbImNsckFsZXJ0U2l6'@;
put 'ZVNtYWxsIiwiaXNTbWFsbCJdLGNsb3NhYmxlOlsiY2xyQWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpbImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNsckNsb3NlQnV0dG9uQXJpYUxhYmVsIixhbGVydFR5cGU6'@;
put 'WyJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbImNsckFsZXJ0SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOlsiY2xyQWxlcnRDbG9zZWQiLCJjbG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sZmVh'@;
put 'dHVyZXM6W3RpKFt3SF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1oaWRkZW4iLCJhbGVydC1zbSIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFz'@;
put 'cyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYoVGkoKSxRZSgwLFhfZSw0LDgsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W1ppLHVjLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxQUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp'@;
put 'e3RoaXMuaWNvblNlcnZpY2U9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQod0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0LWl0ZW0iXV0saG9zdEF0dHJzOlsxLCJhbGVydC1pdGVtIl0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJjZHMtaWNvbiIsMSkseWUo'@;
put 'KSxrcigyKSksMiZhJiYoQ2UoMSksVHIoInNoYXBlIixkLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsZC5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxOYj0oKCk9PntjbGFzcyBj'@;
put 'e31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJhbGVydC10ZXh0Il1dfSksY30pKCksRlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubXVsdGlBbGVydFNl'@;
put 'cnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0'@;
put 'IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2Vy'@;
put 'dmljZS5jdXJyZW50PWF9Z2V0IHByZXZpb3VzQWxlcnRBcmlhTGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VS'@;
put 'UkVOVDooMT09PWE/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudDphLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5leHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3Jl'@;
put 'dHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGE9PT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PzE6YSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZp'@;
put 'Y2UuY291bnQudG9TdHJpbmcoKX0pfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hh'@;
put 'bmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5hY3RpdmVBbGVydHNbYV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBhZ2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5t'@;
put 'dWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RC'@;
put 'aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImFsZXJ0cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdLGN1cnJlbnRBbGVydEluZGV4OlsiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRl'@;
put 'eCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwi'@;
put 'YWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFu'@;
put 'Z2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZURvd24oKX0pLHF0KDMsImNkcy1pY29uIiwzKSx5ZSgpKCks'@;
put 'bWUoNCwiZGl2Iiw0KSxOZSg1KSx5ZSgpLG1lKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZVVwKCl9KSxxdCg4LCJjZHMtaWNvbiIsNikseWUoKSgpKCkpLDImYSYmKENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLnByZXZpb3VzQWxl'@;
put 'cnRBcmlhTGFiZWwpLENlKDMpLGpjKCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0'@;
put 'aW9uOjJ9KSxjfSkoKSxIUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9'@;
put 'W119c2V0IGFsbEFsZXJ0cyhhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm1hbmFnZShhKX1zZXQgX2lucHV0Q3VycmVudEluZGV4KGEpe051bWJlci5pc0ludGVnZXIoYSkmJmE+PTAmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7'@;
put 'cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3Vy'@;
put 'cmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hMT09PWEuaGlkZGVuKX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2'@;
put 'aWNlLmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJy'@;
put 'ZW50QWxlcnRJbmRleENoYW5nZS5uZXh0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLm11'@;
put 'bHRpQWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVkUpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7'@;
put 'aWYoMSZhJiZJbyhoLEhiLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuYWxsQWxlcnRzPWYpfX0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWQuY3VycmVudEFsZXJ0VHlwZSko'@;
put 'ImFsZXJ0LWluZm8iLCJpbmZvIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4Olsi'@;
put 'Y2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5kZXgiXSxjdXJyZW50QWxlcnQ6WyJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hh'@;
put 'bmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbVkVdKV0sbmdDb250ZW50U2VsZWN0b3JzOmViZSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKFFfZSksUWUoMCxKX2UsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwwKSxrcigxKSksMiZhJiZSZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKX0sZGVwZW5kZW5jaWVzOltGUSxaaV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksTlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKHMxLFJLLG8xLGJtZSxuYil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSks'@;
put 'Yy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksendlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W05R'@;
put 'XX0pLGN9KSgpLFhzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLk5BVl9MRVZFTF8xPTEsYy5OQVZfTEVWRUxfMj0yLGMuTkFWX0NMT1NFX0FMTD0iTkFWX0NMT1NFX0FMTCIsYy5OQVZfT1BFTj0iTkFWX09QRU4iLGMuTkFWX0NMT1NFPSJOQVZfQ0xPU0UiLGMuTkFWX1RPR0dMRT0iTkFWX1RP'@;
put 'R0dMRSIsYy5OQVZfQ0xBU1NfSEFNQlVSR0VSX01FTlU9Im9wZW4taGFtYnVyZ2VyLW1lbnUiLGMuTkFWX0NMQVNTX09WRVJGTE9XX01FTlU9Im9wZW4tb3ZlcmZsb3ctbWVudSIsYy5OQVZfQ0xBU1NfVFJJR0dFUl8xPSJoZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIiLGMuTkFWX0NMQVNTX1RS'@;
put 'SUdHRVJfMj0iaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIiLGMuTkFWX0NMQVNTX0xFVkVMXzE9ImNsci1uYXYtbGV2ZWwtMSIsYy5OQVZfQ0xBU1NfTEVWRUxfMj0iY2xyLW5hdi1sZXZlbC0yIixjfSkoKTtjbGFzcyBWUXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2NvbnRyb2xDb2RlPWwsdGhp'@;
put 'cy5fbmF2TGV2ZWw9YX1nZXQgY29udHJvbENvZGUoKXtyZXR1cm4gdGhpcy5fY29udHJvbENvZGV9Z2V0IG5hdkxldmVsKCl7cmV0dXJuIHRoaXMuX25hdkxldmVsfX1sZXQgQkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMucmVzcG9uc2l2ZU5hdkxpc3Q9W10sdGhpcy5yZWdp'@;
put 'c3Rlck5hdlN1YmplY3Q9bmV3IHF4LHRoaXMuY29udHJvbE5hdlN1YmplY3Q9bmV3IGJlLHRoaXMuY2xvc2VBbGxOYXZzKCl9Z2V0IHJlZ2lzdGVyZWROYXZzKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfWdldCBuYXZDb250cm9sKCl7cmV0dXJuIHRo'@;
put 'aXMuY29udHJvbE5hdlN1YmplY3QuYXNPYnNlcnZhYmxlKCl9cmVnaXN0ZXJOYXYoYSl7IWF8fHRoaXMuaXNOYXZSZWdpc3RlcmVkKGEpfHwodGhpcy5yZXNwb25zaXZlTmF2TGlzdC5wdXNoKGEpLHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0Lm5leHQodGhpcy5yZXNwb25zaXZlTmF2TGlzdCkp'@;
put 'fWlzTmF2UmVnaXN0ZXJlZChhKXtyZXR1cm4gdGhpcy5yZXNwb25zaXZlTmF2TGlzdC5pbmRleE9mKGEpPi0xJiYoY29uc29sZS5lcnJvcigiTXVsdGlwbGUgY2xyLW5hdi1sZXZlbCAiK2ErIiBhdHRyaWJ1dGVzIGZvdW5kLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgb25seSBvbmUgZXhpc3Rz'@;
put 'IiksITApfXVucmVnaXN0ZXJOYXYoYSl7Y29uc3QgZD10aGlzLnJlc3BvbnNpdmVOYXZMaXN0LmluZGV4T2YoYSk7ZD4tMSYmKHRoaXMucmVzcG9uc2l2ZU5hdkxpc3Quc3BsaWNlKGQsMSksdGhpcy5yZWdpc3Rlck5hdlN1YmplY3QubmV4dCh0aGlzLnJlc3BvbnNpdmVOYXZMaXN0KSl9c2Vu'@;
put 'ZENvbnRyb2xNZXNzYWdlKGEsZCl7Y29uc3QgaD1uZXcgVlEoYSxkKTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoaCl9Y2xvc2VBbGxOYXZzKCl7Y29uc3QgYT1uZXcgVlEoWHMuTkFWX0NMT1NFX0FMTCwtOTk5KTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoYSl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFV3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpO2Z1bmN0aW9uIGpRKGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAi'@;
put 'KSxsLmNsYXNzTGlzdC5hZGQoIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxsfWNsYXNzIFh3ZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLnJlbmRlcmVyPWwsdGhpcy5hY3RpdmU9ITEsUnMoZCkmJih0aGlzLl9kb2N1bWVudD1hLmdldChMcykpLGguZm9jdXNUcmFwSWR8fChoLmZv'@;
put 'Y3VzVHJhcElkPWZ1bmN0aW9uIFBnZShjPSJfIil7cmV0dXJuYCR7Y30ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfWB9KCkpLHRoaXMuZm9jdXNUcmFwRWxlbWVudD1ofWVuYWJsZUZvY3VzVHJhcCgpe2NvbnN0IGw9dGhpcy5mb2N1c1RyYXBFbGVtZW50LGE9bC5x'@;
put 'dWVyeVNlbGVjdG9yKCJbY2RzLWZpcnN0LWZvY3VzXSIpLGQ9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihoRS5nZXRDdXJyZW50KCk9PT1sKXRocm93IG5ldyBFcnJvcigiRm9jdXMgdHJhcCBpcyBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoaXMgaW5zdGFuY2UuIik7dGhpcy5maXJz'@;
put 'dEZvY3VzRWxlbWVudD1hfHx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsZnVuY3Rpb24gcXdlKGMsbCl7aWYobCYmIWwudG9wUmVib3VuZEVsZW1lbnQmJiFsLmJvdHRvbVJlYm91bmRFbGVtZW50KXtsLnRvcFJlYm91bmRFbGVtZW50PWpRKGMpLGwuYm90dG9tUmVib3VuZEVsZW1lbnQ9alEoYyk7'@;
put 'Y29uc3QgYT1sLnBhcmVudEVsZW1lbnQsZD1sLm5leHRTaWJsaW5nO2EmJihhLmluc2VydEJlZm9yZShsLnRvcFJlYm91bmRFbGVtZW50LGwpLGQ/YS5pbnNlcnRCZWZvcmUobC5ib3R0b21SZWJvdW5kRWxlbWVudCxkKTphLmFwcGVuZENoaWxkKGwuYm90dG9tUmVib3VuZEVsZW1lbnQpKX19'@;
put 'KHRoaXMuX2RvY3VtZW50LGwpLGZ1bmN0aW9uIEY2ZShjKXtzd2l0Y2goYy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaW5wdXQiOnJldHVybiJoaWRkZW4iIT09Yy5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpJiYhYy5oYXNBdHRyaWJ1dGUo'@;
put 'InJlYWRvbmx5Iik7Y2FzZSJidXR0b24iOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpyZXR1cm4hYy5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIik7Y2FzZSJpZnJhbWUiOmNhc2UiZW1iZWQiOmNhc2Uib2JqZWN0IjpyZXR1cm4hMDtjYXNlImEiOmNhc2UiYXJlYSI6cmV0dXJuIGMuaGFz'@;
put 'QXR0cmlidXRlKCJocmVmIik7Y2FzZSJhdWRpbyI6Y2FzZSJ2aWRlbyI6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJjb250cm9scyIpO2RlZmF1bHQ6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHwidHJ1ZSI9PT1jLmdldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fCJi'@;
put 'dXR0b24iPT09Yy5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfX0obCl8fGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksZCYmZnVuY3Rpb24gVjZlKGMpe3JldHVybiEhYyYmYyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fShkKSYmKHRoaXMu'@;
put 'cHJldmlvdXNGb2N1cz1kKSxoRS5zZXRDdXJyZW50KGwpO2NvbnN0IGg9c2V0VGltZW91dCgoKT0+e3RoaXMuZmlyc3RGb2N1c0VsZW1lbnQuZm9jdXMoKSxjbGVhclRpbWVvdXQoaCl9LDEwKTt0aGlzLm9uRm9jdXNJbkV2ZW50PXRoaXMub25Gb2N1c0luLmJpbmQodGhpcyksdGhpcy51bmxp'@;
put 'c3Rlbj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLl9kb2N1bWVudCwiZm9jdXNpbiIsdGhpcy5vbkZvY3VzSW5FdmVudCksdGhpcy5hY3RpdmU9ITB9cmVtb3ZlRm9jdXNUcmFwKCl7dGhpcy51bmxpc3RlbiYmdGhpcy51bmxpc3RlbigpLGZ1bmN0aW9uIEt3ZShjKXtpZihjKXtjb25zdCBs'@;
put 'PWMucGFyZW50RWxlbWVudDtpZihsKXtjb25zdCBhPWMudG9wUmVib3VuZEVsZW1lbnQsZD1jLmJvdHRvbVJlYm91bmRFbGVtZW50O2EmJmwucmVtb3ZlQ2hpbGQoYSksZCYmbC5yZW1vdmVDaGlsZChkKX1kZWxldGUgYy50b3BSZWJvdW5kRWxlbWVudCxkZWxldGUgYy5ib3R0b21SZWJvdW5k'@;
put 'RWxlbWVudH19KHRoaXMuZm9jdXNUcmFwRWxlbWVudCksdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5mb2N1c1RyYXBFbGVtZW50LCJ0YWJpbmRleCIpLGhFLmFjdGl2YXRlUHJldmlvdXNDdXJyZW50KCksdGhpcy5hY3RpdmU9ITEsdGhpcy5wcmV2aW91c0ZvY3VzJiZ0aGlz'@;
put 'LnByZXZpb3VzRm9jdXMuZm9jdXMoKX1vbkZvY3VzSW4obCl7IWZ1bmN0aW9uIEd3ZShjLGwsYSl7Y29uc3QgZD1oRS5nZXRDdXJyZW50KCk9PT1sLGg9ZnVuY3Rpb24gJHdlKGMsbCl7cmV0dXJuIGM9PT1sLnRvcFJlYm91bmRFbGVtZW50fHxjPT09bC5ib3R0b21SZWJvdW5kRWxlbWVudHx8'@;
put 'IShsLmNvbnRhaW5zKGMpfHxudWxsIT09bCYmbC5jb250YWlucyhjKSl9KGMsbCk7ZCYmaD8oYT1hfHxsKS5mb2N1cygpOmMuZm9jdXMoKX0obC5jb21wb3NlZFBhdGgoKVswXSx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsdGhpcy5maXJzdEZvY3VzRWxlbWVudCl9fWxldCB6UT0oKCk9PntjbGFz'@;
put 'cyBjIGV4dGVuZHMgWHdle2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoZixfLGEsaC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc3BvbnNpdmVOYXZTZXJ2aWNlPWQsdGhpcy5lbGVtZW50UmVmPWgsdGhpcy5faXNPcGVuPSExLFJzKGEpJiYodGhpcy5fZG9jdW1lbnQ9Xy5nZXQoTHMpKSx0'@;
put 'aGlzLl9zdWJzY3JpcHRpb249ZC5uYXZDb250cm9sLnBpcGUoSWEoVD0+VC5uYXZMZXZlbD09PXRoaXMubGV2ZWwpLElhKCh7Y29udHJvbENvZGU6VH0pPT5UPT09WHMuTkFWX09QRU4mJiF0aGlzLmlzT3Blbnx8VD09PVhzLk5BVl9DTE9TRSYmdGhpcy5pc09wZW4pKS5zdWJzY3JpYmUoKHtj'@;
put 'b250cm9sQ29kZTpUfSk9PntUIT09WHMuTkFWX09QRU4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSksdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChkLm5hdkNvbnRyb2wucGlwZShJYSgoe2NvbnRyb2xDb2RlOlR9KT0+VD09PVhzLk5BVl9DTE9TRV9BTEwpKS5zdWJzY3JpYmUoKCk9PnRoaXMu'@;
put 'Y2xvc2UoKSkpfWdldCBsZXZlbCgpe3JldHVybiB0aGlzLl9sZXZlbH1nZXQgcmVzcG9uc2l2ZU5hdkNvZGVzKCl7cmV0dXJuIFhzfWdldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVufW5nT25Jbml0KCl7dGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbHx8KHRoaXMuY2xvc2VCdXR0b25B'@;
put 'cmlhTGFiZWw9dGhpcy5fbGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMT94Ri5yZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6eEYucmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2UpLHRoaXMubGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMXx8dGhpcy5sZXZlbD09PVhzLk5BVl9MRVZFTF8yPyh0aGlzLnJlc3Bv'@;
put 'bnNpdmVOYXZTZXJ2aWNlLnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuYWRkTmF2Q2xhc3ModGhpcy5sZXZlbCkpOmNvbnNvbGUuZXJyb3IoIk5hdiBMZXZlbCBjYW4gb25seSBiZSAxIG9yIDIiKX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPSgoYyxsKT0+e2NvbnN0IGE9dGhpcy5f'@;
put 'ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2RzLWludGVybmFsLWNsb3NlLWJ1dHRvbiIpO3JldHVybiBhLnNldEF0dHJpYnV0ZSgiaWNvbi1zaXplIiwiMzIiKSxhLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsbCksYS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGEuc2V0'@;
put 'QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIiksYS5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsInRydWUiKSxhLmNsYXNzTmFtZT0iY2xyLW5hdi1jbG9zZSIsYX0pKDAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbCk7dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLHRoaXMuY2xvc2UuYmlu'@;
put 'ZCh0aGlzKSksdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5maXJzdENoaWxkKSx0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoPDk5MiYmdGhpcy5jbG9zZSgpfW5nT25E'@;
put 'ZXN0cm95KCl7dGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS51bnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uUmVzaXplKGEpe2EudGFyZ2V0LmlubmVyV2lkdGg8OTkyJiZ0aGlzLmlzT3Blbj90aGlzLmNsb3NlKCk6dGhpcy5zaG93'@;
put 'TmF2aWdhdGlvbigpfW9uTW91c2VDbGljayhhKXtsZXQgZD1hO2NvbnN0IGg9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Zm9yKDtkOyl7aWYoZD09PWgpcmV0dXJuO2lmKGQuY2xhc3NMaXN0LmNvbnRhaW5zKCJuYXYtbGluayIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdp'@;
put 'ZHRoPDk5MilyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7ZD1kLnBhcmVudE5vZGV9fWFkZE5hdkNsYXNzKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2E9PT1Ycy5OQVZfTEVWRUxfMT9kLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMSk6YT09PVhz'@;
put 'Lk5BVl9MRVZFTF8yJiZkLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMil9b3Blbigpe3RoaXMuX2lzT3Blbj0hMCx0aGlzLnNob3dOYXZpZ2F0aW9uKCksdGhpcy5lbmFibGVGb2N1c1RyYXAoKSx0aGlzLnNob3dDbG9zZUJ1dHRvbigpLHRoaXMucmVzcG9uc2l2ZU5hdlNlcnZpY2Uuc2VuZENv'@;
put 'bnRyb2xNZXNzYWdlKFhzLk5BVl9PUEVOLHRoaXMubGV2ZWwpfWNsb3NlKCl7dGhpcy5faXNPcGVuPSExLHRoaXMuaGlkZU5hdmlnYXRpb24oKSx0aGlzLnJlbW92ZUZvY3VzVHJhcCgpLHRoaXMuaGlkZUNsb3NlQnV0dG9uKCksdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5zZW5kQ29udHJv'@;
put 'bE1lc3NhZ2UoWHMuTkFWX0NMT1NFLHRoaXMubGV2ZWwpfWhpZGVOYXZpZ2F0aW9uKCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxl'@;
put 'bWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iLCJ0cnVlIil9c2hvd05hdmlnYXRpb24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRl'@;
put 'KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iKX1oaWRlQ2xvc2VCdXR0b24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUo'@;
put 'dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmNsci1uYXYtY2xvc2UiKSwiaGlkZGVuIiwidHJ1ZSIpfXNob3dDbG9zZUJ1dHRvbigpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0'@;
put 'b3IoIi5jbHItbmF2LWNsb3NlIiksImFyaWEtaGlkZGVuIiwiZmFsc2UiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuY2xyLW5hdi1jbG9zZSIpLCJoaWRkZW4iKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoR3MpLHR0KEJFKSx0dChOaSksdHQoRm8pLHR0KEVhKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsci1uYXYtbGV2ZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgicmVz'@;
put 'aXplIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblJlc2l6ZShmKX0sMCxtNikoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1vdXNlQ2xpY2soZi50YXJnZXQpfSl9LGlucHV0czp7X2xldmVsOlsiY2xyLW5hdi1sZXZlbCIsIl9sZXZlbCJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOlsi'@;
put 'Y2xvc2VBcmlhTGFiZWwiLCJjbG9zZUJ1dHRvbkFyaWFMYWJlbCJdfSxmZWF0dXJlczpbZW9dfSksY30pKCksUXdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp'@;
put 'bmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksVVE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6'@;
put 'ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHphLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQudGVtcGxhdGU9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLFFlKDAscmJlLDEsMCwibmct'@;
put 'dGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGVDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9'@;
put 'KSgpLElwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJd'@;
put 'XSxmZWF0dXJlczpbZW9dfSksY30pKCksY2c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyVGFiTGluayBhbmQgY2xyLXRhYi1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRh'@;
put 'YnMiKTtzdXBlcihhLGQpLHRoaXMuaWZBY3RpdmU9Zix0aGlzLmlkPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmlmQWN0aXZlLmN1cnJlbnQ9PT10aGlzLmlkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoSXAsOCksdHQoeDgp'@;
put 'LHR0KCQ1KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXSxbImNsci10YWItY29udGVudCJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7dmFyIHVnPWZ1bmN0aW9uKGMpe3JldHVybiBjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuVkVS'@;
put 'VElDQUw9InZlcnRpY2FsIixjfSh1Z3x8e30pO2xldCBWYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sYXlvdXQ9dWcuSE9SSVpPTlRBTCx0aGlzLl9jaGlsZHJlbj1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fY2hpbGRyZW59Z2V0IGFjdGl2ZVRhYigpe3JldHVy'@;
put 'biB0aGlzLmNoaWxkcmVuLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBvdmVyZmxvd1RhYnMoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT11Zy5WRVJUSUNBTD9bXTp0aGlzLmNoaWxkcmVuLmZpbHRlcihhPT4hMD09PWEudGFiTGluay5pbk92ZXJmbG93KX1yZWdpc3RlcihhKXt0aGlzLl9jaGlsZHJl'@;
put 'bi5wdXNoKGEpfXVucmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLmNoaWxkcmVuLmluZGV4T2YoYSk7ZD4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZCwxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxm'@;
put 'YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdENlPTAsTHA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFiQ29udGVudElkfHwodGhpcy50YWJDb250ZW50SWQ9ImNsci10'@;
put 'YWItY29udGVudC0iK3RDZSsrKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCBhcmlhTGFiZWxsZWRCeSgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJDb250ZW50PT09dGhpcyk/LnRh'@;
put 'Ykxpbms/LnRhYkxpbmtJZH1zZXQgdGVtcGxhdGVSZWYoYSl7dGhpcy52aWV3UmVmPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3'@;
put 'Q29udGFpbmVyLmluZGV4T2YodGhpcy52aWV3UmVmKTthPi0xJiZ0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLnJlbW92ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChWYikpfSxjLlx1'@;
put 'MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLWNvbnRlbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhpYmUsNyksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOlsi'@;
put 'aWQiLCJ0YWJDb250ZW50SWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmKFRpKCksUWUoMCxvYmUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEVjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG5DZT0wO2NvbnN0IENIPW5ldyBNaSgiVEFCU19JRCIpLGlDZT17cHJvdmlkZTpDSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHJDZSgpe3JldHVybiJj'@;
put 'bHItdGFicy0iK25DZSsrfX07bGV0IG9DZT0wLFJwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMuY2ZyPWYsdGhpcy52aWV3Q29udGFpbmVyUmVmPV8sdGhpcy50YWJzU2Vydmlj'@;
put 'ZT1ULHRoaXMudGFic0lkPVcsdGhpcy50YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrb0NlKyspO2NvbnN0IGllPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFVRKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXRoaXMudmlld0NvbnRhaW5lclJl'@;
put 'Zi5jcmVhdGVDb21wb25lbnQoaWUsdm9pZCAwLHZvaWQgMCxbW3RoaXMuZWwubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PXVnLlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93'@;
put 'KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50Py50YWJDb250'@;
put 'ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChOaSksdHQoSzApLHR0KGFzKSx0dChWYiksdHQoQ0gpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwidGFi'@;
put 'IiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJih0MSgiaWQiLGQudGFiTGlua0lkKSxUcigiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJv'@;
put 'bHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxkcigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFiTGlua0lkOlsi'@;
put 'aWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OlsiY2xyVGFiTGlua0luT3ZlcmZsb3ciLCJpbk92ZXJmbG93Il19fSksY30pKCksT3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLGgu'@;
put 'cmVnaXN0ZXIodGhpcyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1uZ09uRGVzdHJveSgpe3RoaXMudGFic1NlcnZpY2UudW5yZWdpc3Rlcih0aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8YykodHQoJDUpLHR0KHg4KSx0dChWYikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLFJwLDcpLElvKGgsTHAsNykpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQu'@;
put 'dGFiTGluaz1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC50YWJDb250ZW50PWYuZmlyc3QpfX0sZmVhdHVyZXM6W3RpKFtseWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGN9KSgpLFNIPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkZz0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnRhYkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEs'@;
put 'dGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyh1ZykubWFwKGQ9PnVnW2RdKS5pbmRleE9mKGEpPj0wJiYodGhpcy50YWJzU2Vy'@;
put 'dmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVU'@;
put 'YWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgoYT0+YS5hY3RpdmUpfWdldCBpc0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdl'@;
put 'dCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09dWcuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwoYSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1hJiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmEmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9'@;
put 'Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFhLmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1hfW5nQWZ0'@;
put 'ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBd'@;
put 'LmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpe3RoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZS5vcGVuPWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlzLmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlv'@;
put 'biYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlv'@;
put 'bi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25G'@;
put 'b2N1c091dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFi'@;
put 'UG9zaXRpb25dPT09YS5yZWxhdGVkVGFyZ2V0JiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2soYSxk'@;
put 'KXthLnRhcmdldD09PWR8fGQuY29udGFpbnMoYS50YXJnZXQpfHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWxpc3RlbkZvclRhYkxp'@;
put 'bmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUoY3AodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXM9dGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspLHRoaXMudGFiTGlua0VsZW1lbnRzPXRo'@;
put 'aXMuX3RhYkxpbmtEaXJlY3RpdmVzLm1hcChhPT5hLmVsLm5hdGl2ZUVsZW1lbnQpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dChLcyksdHQoVmIpLHR0KENIKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLE9wLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKEk4LDcpLFJvKFNILDUsTmkpLFJvKHNi'@;
put 'ZSw3LGFzKSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6'@;
put 'ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbImNsckxheW91dCIsImxheW91dCJdfSxmZWF0dXJlczpbdGkoWyQ1LEtzLFZiLGlDZV0pXSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sicm9sZSIsInRhYmxpc3QiLCJj'@;
put 'bHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNscktleUZvY3VzIiwiY2xyRm9jdXNDaGFuZ2UiLCJmb2N1c291dCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsidGFiQ29udGVudFZpZXdDb250YWluZXIiLCIiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5h'@;
put 'di1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20tcmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwibmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEs'@;
put 'ImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJkcm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIiwic3RhdHVzIiwidG9nZ2xlU2VydmljZS5vcGVuID8g'@;
put 'J2luZm8nIDogbnVsbCJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm'@;
put 'JihtZSgwLCJ1bCIsMCkseHQoImNsckZvY3VzQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVPdmVyZmxvd09uUG9zaXRpb24oZil9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUoZil9KSxRZSgxLGxiZSwyLDEs'@;
put 'Im5nLWNvbnRhaW5lciIsMSksUWUoMixoYmUsNywxMCwibmctY29udGFpbmVyIiwyKSx5ZSgpLGphKDMsbnVsbCwzKSksMiZhJiYoUmUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQudGFiTGlua0RpcmVjdGl2ZXMpLENlKDEpLFJlKCJuZ0lm'@;
put 'IixkLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W0k4LFNILHhzLFppLHJkLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxzQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKERLKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNkLHNhLGVDZSxCRl0sc2RdfSksY30pKCksTUg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJl'@;
put 'Z2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjfSksY30pKCkseEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25zPTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IGJlLHRoaXMu'@;
put 'X2NvbGxhcHNlZENoYW5nZWQ9bmV3IGJlLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJsZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVy'@;
put 'biB0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2'@;
put 'aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNp'@;
put 'YmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5leHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxaUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX25hdlNlcnZpY2U9YSx0aGlzLl9uYXZJY29uU2VydmljZT1kLHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2Vydmlj'@;
put 'ZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IEVyKCEwKSx0aGlzLl9zdWI9dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWRDaGFuZ2VkLnN1YnNjcmliZShfPT57dGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5lbWl0KF8pfSl9Z2V0IGNvbGxhcHNpYmxl'@;
put 'KCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGV9c2V0IGNvbGxhcHNpYmxlKGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGU9YX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7dGhpcy5fbmF2'@;
put 'U2VydmljZS5jb2xsYXBzZWQ9YX1nZXQgaGFzTmF2R3JvdXBzKCl7cmV0dXJuIHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2VydmljZS5uYXZHcm91cENvdW50PjB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX25hdkljb25TZXJ2aWNlLmhhc0ljb25zfWdldCBhcmlhRXhwYW5kZWQo'@;
put 'KXtyZXR1cm4gdGhpcy5jb2xsYXBzaWJsZT90aGlzLmNvbGxhcHNlZD8iZmFsc2UiOiJ0cnVlIjpudWxsfW5nT25EZXN0cm95KCl7dGhpcy5fc3ViLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQnlCdXR0b24oKXt0aGlzLmNvbGxhcHNlZD0hdGhpcy5jb2xsYXBzZWR9fXJldHVybiBjLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVIKSx0dCh4SCksdHQoTUgpLHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci12ZXJ0aWNhbC1uYXYiXV0saG9zdEF0dHJzOlsxLCJjbHItdmVydGljYWwtbmF2Il0saG9zdFZhcnM6Nixob3N0'@;
put 'QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJpcy1jb2xsYXBzZWQiLGQuY29sbGFwc2VkKSgiaGFzLW5hdi1ncm91cHMiLGQuaGFzTmF2R3JvdXBzKSgiaGFzLWljb25zIixkLmhhc0ljb25zKX0saW5wdXRzOntjb2xsYXBzaWJsZTpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2libGUi'@;
put 'LCJjb2xsYXBzaWJsZSJdLGNvbGxhcHNlZDpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbRUgseEgsTUhdKV0sbmdDb250ZW50U2Vs'@;
put 'ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtdHJpZ2dlciIsMywib24tY29sbGFwc2UiLCJjbGljayIsNCwibmdJZiJdLFsxLCJuYXYtY29udGVudCJdLFsiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwi'@;
put 'dGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2VyLWljb24iXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDEs'@;
put 'Im5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLGZiZSwyLDYsImJ1dHRvbiIsMCksbWUoMSwiZGl2IiwxKSxrcigyKSxRZSgzLHBiZSwxLDEsImJ1dHRvbiIsMikseWUoKSksMiZhJiYoUmUoIm5nSWYiLGQuY29sbGFwc2libGUpLENl'@;
put 'KDMpLFJlKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W1ppLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxrSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBiZX1nZXQgZXhwYW5kQ2hhbmdlKCl7'@;
put 'cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1'@;
put 'MDI3NWZhY30pLGN9KSgpLFlRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IGJlLGgmJm4yKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKGFoKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNo'@;
put 'ZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoVWEpLHR0KGtILDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGlj'@;
put 'YWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczp2YmUsbmdDb250ZW50U2VsZWN0b3JzOmJiZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKF9iZSksa3IoMCksbWUoMSwic3Bh'@;
put 'biIsMCksa3IoMiwxKSx5ZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdUNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCxMSyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlw'@;
put 'ZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxzZCxxNV0sc2Qsc2EscTVdfSksY30pKCksZENlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp'@;
put 'bmo9bWkoe2ltcG9ydHM6W1V3ZSxRd2Usc0NlLHVDZV19KSxjfSkoKSxXUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvY3VtZW50PWF9c3RvcFNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgibm8tc2Nyb2xsaW5nIil9cmVzdW1lU2Ny'@;
put 'b2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoIm5vLXNjcm9sbGluZyIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoIm5vLXNjcm9sbGluZyIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG91PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5tb2RhbElkPURjKCksdGhp'@;
put 'cy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSx0aGlzLnN0YXRpY0JhY2tkcm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0iZmFsc2UiLHRo'@;
put 'aXMuYnlwYXNzU2Nyb2xsU2VydmljZT0hMSx0aGlzLnN0b3BDbG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBFcighMSksdGhpcy5sYWJlbGxlZEJ5PXRoaXMubW9kYWxJZH1uZ09uQ2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093'@;
put 'blByb3BlcnR5LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlP3RoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGluZygpOnRoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Nyb2xsaW5nU2Vydmlj'@;
put 'ZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMCkpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhpcy5hbHRDbG9zZS5lbWl0KCExKTohdGhpcy5jbG9zYWJsZXx8IXRoaXMuX29wZW58fCh0aGlzLl9v'@;
put 'cGVuPSExLHRoaXMuZm9jdXNUcmFwLnNldFByZXZpb3VzRm9jdXMoKSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiZ0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoV1EpLHR0KEVzKSl9'@;
put 'LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKE1wLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuZm9jdXNUcmFwPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJnh0KCJrZXl1cC5lc2NhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0sMCxFdiksMiZhJiZkcigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46WyJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxlOlsiY2xyTW9kYWxDbG9zYWJsZSIsImNs'@;
put 'b3NhYmxlIl0sY2xvc2VCdXR0b25BcmlhTGFiZWw6WyJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOlsiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOlsiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsInN0YXRpY0Jh'@;
put 'Y2tkcm9wIl0sc2tpcEFuaW1hdGlvbjpbImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxieXBhc3NTY3JvbGxTZXJ2aWNlOlsiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl0sc3RvcENsb3NlOlsiY2xyTW9kYWxQcmV2'@;
put 'ZW50Q2xvc2UiLCJzdG9wQ2xvc2UiXSxsYWJlbGxlZEJ5OlsiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOlt0aShb'@;
put 'XSxbV1FdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOlNiZSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1siY2xyRm9jdXNUcmFwIiwiIiwiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFsiY2xyRm9jdXNUcmFwIiwiIiwxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0'@;
put 'cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjbHJGb2N1c09uVmlld0luaXQiLCIiLDEsIm1vZGFsLXRpdGxlLXdyYXBw'@;
put 'ZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xv'@;
put 'c2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKENiZSksUWUoMCx3YmUsMTcsMTQsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLGQuX29wZW4pfSxkZXBlbmRlbmNpZXM6W1ppLE1wLFBGLHFzXSxzdHlsZXM6WyJb'@;
put 'X25naG9zdC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ub3Blbltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmV9Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZmFkZURvd24iLFtoYygiKiA9PiBmYWxzZSIsW19zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSks'@;
put 'cnUoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGhjKCJmYWxzZSA9PiAqIixbcnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSldKSxhMSgiZmFkZSIsW2hjKCJ2b2lkID0+ICoiLFtfcyh7b3BhY2l0eTowfSkscnUoIjAu'@;
put 'MnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5Oi44NX0pKV0pLGhjKCIqID0+IHZvaWQiLFtydSgiMC4ycyBlYXNlLWluLW91dCIsX3Moe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLHN1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLmhv'@;
put 'c3Q9ZCx0aGlzLnRhYmluZGV4PSIwIix0aGlzLnVubGlzdGVuZXJzPVtdLGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhvc3Qu'@;
put 'bmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVs'@;
put 'ZW1lbnQsIm1vdXNlZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRhYkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9'@;
put 'YWRkVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRh'@;
put 'YmluZGV4Iil9YWRkT3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDthJiZhLmNsaWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KE5vKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXX0pLGN9KSgpLEdRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhu'@;
put 'Yil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5RSxxNV0sc2EscTVdfSksY30pKCk7Y29uc3QgaENlPXsidG9wLWxlZnQiOnthbmNob3JQb2lu'@;
put 'dDpHci5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5CT1RUT01fUklHSFQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9wLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkJPVFRPTV9DRU5URVIsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9w'@;
put 'LXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6R3IuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuQk9UVE9NX0xFRlQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwicmlnaHQtdG9wIjp7YW5jaG9yUG9pbnQ6R3IuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5MRUZUX0JPVFRPTSxvZmZzZXRZOjIs'@;
put 'b2Zmc2V0WDoxNH0sInJpZ2h0LW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuTEVGVF9DRU5URVIsb2Zmc2V0WTo2LG9mZnNldFg6MTR9LCJyaWdodC1ib3R0b20iOnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50Okdy'@;
put 'LkxFRlRfVE9QLG9mZnNldFk6LTEsb2Zmc2V0WDoxNH0sImJvdHRvbS1yaWdodCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9MRUZULG9mZnNldFk6OSxvZmZzZXRYOi0xfSwiYm90dG9tLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9D'@;
put 'RU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9DRU5URVIsb2Zmc2V0WTo5LG9mZnNldFg6MTJ9LCJib3R0b20tbGVmdCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9SSUdIVCxvZmZzZXRZOjksb2Zmc2V0WDowfSwibGVmdC1ib3R0b20iOnthbmNo'@;
put 'b3JQb2ludDpHci5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuUklHSFRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOi0xNH0sImxlZnQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6R3IuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLlJJR0hUX0NFTlRFUixvZmZzZXRZOjQsb2Zmc2V0WDotMTR9'@;
put 'LCJsZWZ0LXRvcCI6e2FuY2hvclBvaW50OkdyLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5SSUdIVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6LTE0fSxkZWZhdWx0OnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkxFRlRfQ0VOVEVSLG9mZnNldFk6'@;
put 'NixvZmZzZXRYOjE0fX0sZkNlPVsidG9wLWxlZnQiLCJ0b3AtbWlkZGxlIiwidG9wLXJpZ2h0IiwicmlnaHQtdG9wIiwicmlnaHQtbWlkZGxlIiwicmlnaHQtYm90dG9tIiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tLW1pZGRsZSIsImJvdHRvbS1sZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LW1p'@;
put 'ZGRsZSIsImxlZnQtdG9wIl07bGV0ICRRPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9Zix0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPV8s'@;
put 'dGhpcy5wbGF0Zm9ybUlkPVQsdGhpcy5zaWducG9zdENvbnRlbnRJZD1EYygpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRo'@;
put 'aXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLnNldElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9V31nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVt'@;
put 'b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMuX3Bvc2l0aW9uPWEmJmZDZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3Qg'@;
put 'ZD1oQ2VbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9z'@;
put 'ZSgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSxScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3Vz'@;
put 'TWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KEw4LDgpLHR0KEVzKSx0dChvSCksdHQoaUgpLHR0KEdzKSx0dChMcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt'@;
put 'c2lnbnBvc3QtY29udGVudCJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKHQxKCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksZHIoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7cG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19'@;
put 'LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpZ25wb3N0LXdyYXAiXSxbMSwicG9wb3Zlci1wb2ludGVyIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJzaWducG9zdC1hY3Rp'@;
put 'b24iLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtYm9keSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJkaXYiLDEpLG1lKDIsImRpdiIsMikoMywiYnV0dG9uIiwz'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0pLHF0KDQsImNkcy1pY29uIiw0KSx5ZSgpKCksbWUoNSwiZGl2Iiw1KSxrcig2KSx5ZSgpKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJp'@;
put 'YS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxwQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25z'@;
put 'KG5iLFJLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHE1XSxzZF19KSxjfSkoKSxBSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWN9KSxjfSkoKSxUSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dl'@;
put 'cigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQo'@;
put 'KX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko'@;
put 'YXIoS3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOlt0aShbS3Mse3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LEFILFRIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6'@;
put 'MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBtQ2U9WyJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0sdkNlPVsieHMiLCJzbSIsIm1k'@;
put 'IiwibGciXTtsZXQgemI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGJIe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKHN1cGVyKGEsZCksdGhpcy50b29sdGlwSWRTZXJ2aWNlPWgsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWYsIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItdG9vbHRpcC1jb250ZW50'@;
put 'IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAiKTt0aGlzLmlkPURjKCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXtjb25zdCBkPWF8fCIiO3RoaXMuX2lkPWQsdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGQpfWdldCBwb3NpdGlv'@;
put 'bigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLl9wb3NpdGlvbixoPW1DZS5pbmNsdWRlcyhhKT9hOiJyaWdodCI7c3dpdGNoKHRoaXMuX3Bvc2l0aW9uPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3'@;
put 'Q2xhc3M6YHRvb2x0aXAtJHtofWB9KSxoKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuVE9QX0NFTlRFUix0aGlzLnBv'@;
put 'cG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUdyLkJPVFRP'@;
put 'TV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfVE9QO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5hbmNob3JQb2ludD1Hci5MRUZUX0NF'@;
put 'TlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9UT1A7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gZ0NlKGMpe3Rocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIHZhbHVlOiAke2N9YCl9KGgpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhp'@;
put 'cy5fc2l6ZSxoPXZDZS5pbmNsdWRlcyhhKT9hOiJzbSI7dGhpcy5fc2l6ZT1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1gLG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSl9bmdPbkluaXQoKXt0aGlzLnNpemU9dGhpcy5zaXplfHwic20iLHRoaXMucG9zaXRp'@;
put 'b249dGhpcy5wb3NpdGlvbnx8InJpZ2h0In1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCl9dXBkYXRlQ3NzQ2xhc3Mo'@;
put 'e29sZENsYXNzOmEsbmV3Q2xhc3M6ZH0pe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKSh0dChFYSksdHQoTDgsOCksdHQoQUgpLHR0KFRIKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNvbnRlbnQiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJtb3VzZWVudGVyIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJih0MSgiaWQiLGQuaWQpLFRyKCJyb2xlIiwidG9vbHRpcCIpLEh1KCJvcGFjaXR5IiwxKSxkcigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxp'@;
put 'bnB1dHM6e2lkOiJpZCIscG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigw'@;
put 'KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFViPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcElkU2VydmljZT1kLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaCh0'@;
put 'aGlzLnRvb2x0aXBJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGY9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWYpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRp'@;
put 'cCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KEFIKSx0dChUSCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhv'@;
put 'c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlVG9vbHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVy'@;
put 'KCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKFRyKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSxkcigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfX0pLGN9KSgpLF9DZT0oKCk9Pntj'@;
put 'bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dLHNkLHNhXX0pLGN9KSgpLGJDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOlt5SCxwQ2UsX0NlXX0pLGN9KSgpLHlDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpLENDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoeW1lLHdtZSxPSyxDbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2EsQWJdLHNhLEFiXX0pLGN9KSgpLGtDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoT0spfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sR1EsTlFdXX0pLGN9KSgpLF91PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3'@;
put 'NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3p3ZSxSd2Usc2EsR1EsTEYsc2QseUUscTUscHllLGJ5ZSxkUSxkQ2UsYkNlLGtDZSwkSixueWUsQWIseUNlLHhiLENDZV19KSxjfSkoKTtmdW5jdGlvbiBBQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMCksTmUo'@;
put 'MSwibG9hZGluZyIpLHllKCkpfWZ1bmN0aW9uIFRDZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDExKSxOZSgxLCJsb2FkZWQiKSx5ZSgpKX1mdW5jdGlvbiBEQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMiksTmUoMSwiZmFpbGVkIikseWUoKSl9ZnVuY3Rpb24gSUNlKGMsbCl7aWYoMSZj'@;
put 'JiYobWUoMCwicCIpKDEsImNvZGUiKSxOZSgyKSx5ZSgpLE5lKDMsIiBceGEwICIpLFFlKDQsQUNlLDIsMCwic3BhbiIsNyksUWUoNSxUQ2UsMiwwLCJzcGFuIiw4KSxRZSg2LERDZSwyLDAsInNwYW4iLDkpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLnByb2dy'@;
put 'YW0pLENlKDIpLFJlKCJuZ0lmIixhLnJ1bm5pbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiYhYS5zdWNjZXNzZnVsKX19ZnVuY3Rpb24gTENlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXNpZ25wb3N0LWNv'@;
put 'bnRlbnQiLDUpLFFlKDEsSUNlLDcsNCwicCIsNikseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7UmUoImNsclBvc2l0aW9uIiwiYm90dG9tLW1pZGRsZSIpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnJlcXVlc3RzKX19bGV0IFJDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2Fk'@;
put 'aW5nPSExLHRoaXMucmVxdWVzdHM9W10sdGhpcy5fbG9hZGluZ1N1Yj1uZXcgZWV9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNt'@;
put 'cD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9hZGluZy1pbmRpY2F0b3IiXV0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbMSwibG9hZGluZy1pbmRpY2F0b3IiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJzcGlubmVyLWludmVyc2Ui'@;
put 'XSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiLDEsImlzLWluZm8iXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiZXJyb3IiLCJzaXplIiwiMjQiLDEsImlzLWVycm9yIl0sWzMsImNsclBvc2l0aW9uIiw0LCJjbHJJZk9wZW4i'@;
put 'XSxbMywiY2xyUG9zaXRpb24iXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInJ1bm5pbmciLDQsIm5nSWYiXSxbImNsYXNzIiwic3VjY2VzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmYWlsIiw0LCJuZ0lmIl0sWzEsInJ1bm5pbmciXSxbMSwic3VjY2VzcyJdLFsxLCJmYWlsIl1d'@;
put 'LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJjbHItc2lnbnBvc3QiKSxxdCgyLCJzcGFuIiwxKSgzLCJjbHItaWNvbiIsMikoNCwiY2xyLWljb24iLDMpLFFlKDUsTENlLDIsMiwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDQpLHllKCkoKSksMiZhJiYoQ2Uo'@;
put 'MiksSHUoImRpc3BsYXkiLGQubG9hZGluZz8iaW5saW5lLWJsb2NrIjoibm9uZSIpLENlKDEpLEh1KCJkaXNwbGF5IiwhZC5sb2FkaW5nJiZkLnJlcXVlc3RzLmxlbmd0aD4wJiZkLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxDZSgxKSxIdSgiZGlzcGxh'@;
put 'eSIsIWQubG9hZGluZyYmZC5yZXF1ZXN0cy5sZW5ndGg+MCYmIWQucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxrYSxjMixzSCwkUSxSRV0sc3R5bGVzOlsiLmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtsaW5lLWhlaWdodDoyLjVyZW07aGVpZ2h0OjIuNXJlbTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICAuc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dmVydGljYWwtYWxpZ246bWlkZGxlfS5sb2Fk'@;
put 'aW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojNTY1NjU2O2N1cnNvcjphdXRvfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2ln'@;
put 'bnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBv'@;
put 'c3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25n'@;
put 'Y29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0l'@;
put 'Q09NUCVde21hcmdpbi1sZWZ0OjEwcHh9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5ydW5uaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xv'@;
put 'cjojZTliZjA0fS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYwYjUxNX0ubG9h'@;
put 'ZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmZhaWxbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjOTIxMDB9Il19KSxjfSkoKSxPQ2U9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcgZWUsdGhpcy5sb2FkaW5nPSExLHRoaXMuYWxlcnRDbG9zZWQ9ITAsdGhpcy5kYXRhPXt1c2VyOm51bGwscGFzczpudWxsfX1uZ09uSW5p'@;
put 'dCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5zdWJzY3JpYmUoZD0+e3RoaXMuaXNBY3RpdmU9ZDtsZXQgaD1kb2N1bWVudC5xdWVy'@;
put 'eVNlbGVjdG9yKCJib2R5Iik7aCYmKGQ/aC5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTpoLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dpbiIpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXN1Ym1pdCgpe3RoaXMubG9hZGluZ3x8'@;
put 'KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0aGlzLmRhdGEucGFzcykudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLGF8fCh0aGlzLmVycm9yTXNnPSJVc2VybmFtZSBvciBwYXNzd29y'@;
put 'ZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0sYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYSksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNc2c9YSx0aGlzLmFsZXJ0Q2xvc2VkPSExfSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KSh0dChvYSksdHQodzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvZ2luIl1dLGRlY2xzOjIwLHZhcnM6OSxjb25zdHM6W1sxLCJsb2dpbi1zaWRlYmFyLXdyYXBwZXIiXSxbMSwibG9naW4tc2lkZWJhciIsInNpZGVCYXJQcm9wcyJdLFsic3JjIiwiL1NB'@;
put 'U0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIsImFsdCIsIiIsMSwibG9naW4tbG9nbyJdLFsxLCJsb2dpbiIsMywibmdTdWJtaXQiXSxbMSwidGl0bGUiXSxbMSwid2VsY29tZSJdLFsxLCJoaW50Il0sWzEs'@;
put 'ImxvZ2luLWdyb3VwIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJ1c2VyIiwidHlwZSIsInRleHQiLCJwbGFjZWhvbGRlciIsIlVzZXJuYW1lIiwxLCJ1c2VybmFtZSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNscklucHV0IiwiIiwibmFtZSIsInBhc3MiLCJ0eXBlIiwicGFz'@;
put 'c3dvcmQiLCJwbGFjZWhvbGRlciIsIlBhc3N3b3JkIiwxLCJwYXNzd29yZCIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENoYW5nZSJdLFsiY2xyLWFsZXJ0LWl0ZW0iLCIiLDEsImFsZXJ0LWl0'@;
put 'ZW0iXSxbMSwiYWxlcnQtdGV4dCJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEp'@;
put 'LHF0KDIsImltZyIsMiksbWUoMywiZm9ybSIsMykseHQoIm5nU3VibWl0IixmdW5jdGlvbigpe3JldHVybiBkLnN1Ym1pdCgpfSksbWUoNCwibGFiZWwiLDQpKDUsImgzIiw1KSxOZSg2LCJXZWxjb21lIHRvIikseWUoKSxOZSg3LCIgRGF0YSBDb250cm9sbGVyICIpLG1lKDgsImg1Iiw2KSxO'@;
put 'ZSg5LCJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIikseWUoKSgpLG1lKDEwLCJkaXYiLDcpKDExLCJpbnB1dCIsOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRhdGEudXNlcj1mfSkseWUoKSxtZSgxMiwiaW5wdXQiLDkpLHh0KCJuZ01vZGVsQ2hhbmdl'@;
put 'IixmdW5jdGlvbihmKXtyZXR1cm4gZC5kYXRhLnBhc3M9Zn0pLHllKCksbWUoMTMsImNsci1hbGVydCIsMTApLHh0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYWxlcnRDbG9zZWQ9Zn0pLG1lKDE0LCJkaXYiLDExKSgxNSwic3BhbiIsMTIpLE5lKDE2KSx5'@;
put 'ZSgpKCkoKSxtZSgxNywiYnV0dG9uIiwxMyksTmUoMTgsIiBMb2cgaW4gIikseWUoKSgpKCkoKSxxdCgxOSwiZGl2IiwxNCkseWUoKSksMiZhJiYoZHIoImFjdGl2ZSIsZC5pc0FjdGl2ZSksQ2UoMTEpLFJlKCJuZ01vZGVsIixkLmRhdGEudXNlciksQ2UoMSksUmUoIm5nTW9kZWwiLGQuZGF0'@;
put 'YS5wYXNzKSxDZSgxKSxSZSgiY2xyQWxlcnRUeXBlIiwiYWxlcnQtZGFuZ2VyIikoImNsckFsZXJ0Q2xvc2VkIixkLmFsZXJ0Q2xvc2VkKSxDZSgzKSxvcihkLmVycm9yTXNnKSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsZC5sb2FkaW5nKSgiZGlzYWJsZWQiLGQubG9hZGluZykpfSxkZXBlbmRl'@;
put 'bmNpZXM6W0NwLFdhLEJzLHdwLE9zLHIyLEhiLE5iLFp1LGRoLFVzLGYxXSxzdHlsZXM6WyIuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNlMGUwZTB9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBo'@;
put 'Mltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlMGUwZTB9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVd'@;
put 'e2JvcmRlci1jb2xvcjp3aGVhdCFpbXBvcnRhbnR9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7'@;
put 'cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMDAwMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSA+ICpbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOmF1dG99LmxvZ2luLXNpZGViYXItd3Jh'@;
put 'cHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzo0'@;
put 'MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTQwMHB4KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0l'@;
put 'Q09NUCVde3otaW5kZXg6MTAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9n'@;
put 'aW5bX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MzJweDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MzZweH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53ZWxjb21lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjM2cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjQ4cHggMCAwfS5sb2dpbi1zaWRl'@;
put 'YmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tZ3JvdXBbX25nY29udGVudC0lQ09NUCVdID4gKltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjZw'@;
put 'eCAwIDE4cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7ei1pbmRleDoxMDF9LmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmVbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xl'@;
put 'ZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2JhY2tncm91bmQ6cmdiYSgzMywzMywzMywuNSk7ei1pbmRleDoxMDB9ICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyLCAgIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdy'@;
put 'b3VwIC51c2VybmFtZSwgICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAucGFzc3dvcmR7d2lkdGg6MTAwJX0gIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX0gIC5sb2dpbi1zaWRlYmFyLXdy'@;
put 'YXBwZXIgLmxvZ2luLWdyb3VwIGJ1dHRvbnttYXgtd2lkdGg6bm9uZX0ubG9naW4tbG9nb1tfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjIwMHB4fSJdfSksY30pKCk7ZnVuY3Rpb24gUENlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLHF0KDEsImltZyIsMTkpLHllKCkpLDImYyl7'@;
put 'Y29uc3QgYT1WZSgpO0NlKDEpLHhjKCJzcmMiLGEuZ2V0UGljdHVyZVVybCgpLHJ2KX19ZnVuY3Rpb24gRkNlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMjApLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJoaWRkZW4iLDA9PT1hLmZhaWxlZFJlcXMubGVuZ3RoKSxDZSgx'@;
put 'KSxvcihhLmZhaWxlZFJlcXMubGVuZ3RoKX19ZnVuY3Rpb24gSENlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMjEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJoaWRkZW4iLDA9PT1hLmRlYnVnTG9ncy5sZW5ndGgpLENlKDEpLG9yKGEuZGVidWdMb2dzLmxlbmd0aCl9'@;
put 'fWZ1bmN0aW9uIE5DZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDIyKX1mdW5jdGlvbiBWQ2UoYyxsKXsxJmMmJihCcigwKSxtZSgxLCJhIiwzMykoMiwic3BhbiIsMzQpLE5lKDMsIkRvY3VtZW50YXRpb24iKSx5ZSgpKCksVXIoKSl9ZnVuY3Rpb24gQkNlKGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSgxLCJkaXYiLDI0LDI1KSgzLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMjYpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj0kaSgyKTtyZXR1cm4ganQoVmUoKS5vbkRlYnVnUm93Q2xpY2soaCxmKSl9KSxt'@;
put 'ZSg0LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg1LCJpbnB1dCIsMjcpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5zYXNqc0NvbmZpZy5kZWJ1Zz1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9u'@;
put 'RGVidWdNb2RlQ2hhbmdlKCkpfSkseWUoKSxtZSg2LCJsYWJlbCIpLE5lKDcsIkRlYnVnIE1vZGUiKSx5ZSgpKCkoKSgpLG1lKDgsImEiLDI4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxtZSg5LCJzcGFuIiksTmUo'@;
put 'MTAsIlNBUyBSZXF1ZXN0cyIpLHllKCkoKSxRZSgxMSxWQ2UsNCwwLCJuZy1jb250YWluZXIiLDIpLHF0KDEyLCJkaXYiLDE1KSxtZSgxMywiYSIsMjkpKDE0LCJzcGFuIiksTmUoMTUsIlN5c3RlbSIpLHllKCkoKSxtZSgxNiwiYSIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJu'@;
put 'IEJ0KGEpLGp0KFZlKCkubG9nb3V0KGgpKX0pLG1lKDE3LCJzcGFuIiksTmUoMTgsIkxvZyBPdXQiKSx5ZSgpLHF0KDE5LCJjbHItaWNvbiIsMzEpLHllKCksbWUoMjAsImRpdiIsMzIpKDIxLCJzcGFuIiksTmUoMjIpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDUpLFJlKCJu'@;
put 'Z01vZGVsIixhLnNhc2pzQ29uZmlnLmRlYnVnKSxDZSg2KSxSZSgibmdJZiIsIWEuaXNEZXBsb3lQYWdlKSxDZSgxMSksZ3IoInYiLGEuY29tbWl0VmVyLCIiKX19Y29uc3QgakNlPWZ1bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtsZXQgekNlPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy51c2VyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnVzZXJOYW1lPSJOb3QgbG9nZ2VkIGluIix0aGlzLnJlcVN1Yj1uZXcgZWUsdGhpcy51c2VyU3ViPW5ldyBlZSx0aGlzLmFwcExv'@;
put 'Z3M9W10sdGhpcy5kZWJ1Z0xvZ3M9W10sdGhpcy5mYWlsZWRSZXFzPVtdLHRoaXMuc2FzRXJyb3JzPVtdLHRoaXMuaXNWaXlhPSExLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMucmVxdWVzdHNDb3VudD0wLHRoaXMuY29tbWl0VmVyPSIifW5nT25Jbml0KCl7dGhp'@;
put 'cy51c2VyU3ViPXRoaXMudXNlclNlcnZpY2UudXNlckNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudXNlck5hbWU9YS51c2VybmFtZX0pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU'@;
put 'eXBlJiYodGhpcy5pc1ZpeWE9ITApLHRoaXMuY29tbWl0VmVyPSJ2Ni41LjIiLnJlcGxhY2UoInYiLCIiKSsiLmc2MDUxMGE0In1uZ09uRGVzdHJveSgpe3RoaXMucmVxU3ViLnVuc3Vic2NyaWJlKCksdGhpcy51c2VyU3ViLnVuc3Vic2NyaWJlKCl9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlz'@;
put 'LmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW9uRGVidWdNb2RlQ2hhbmdlKGEpe3RoaXMuc2FzanNDb25maWcmJnRoaXMuc2FzU2VydmljZS5zZXREZWJ1Z1N0YXRlKHRoaXMuc2FzanNDb25maWcuZGVidWcpfW9uRGVidWdSb3dDbGljayhhLGQpe2Euc3RvcFByb3BhZ2F0aW9u'@;
put 'KCksc2V0VGltZW91dCgoKT0+e2QuY2xpY2soKX0sMzAwKX1sb2dvdXQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RyeXt0aGlzLnNhc1NlcnZpY2UubG9nb3V0KCl9Y2F0Y2goZCl7Y29uc29sZS5lcnJvcihkKX19Z2V0UGljdHVyZVVybCgpe3JldHVybmAke3RoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVXJsfS9pZGVudGl0aWVzL3VzZXJzLyR7dGhpcy51c2VyTmFtZX0vYXZhdGFyL2NvbnRlbnRgfWdldCBpc0RlcGxveVBhZ2UoKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'YykodHQoYVApLHR0KG9hKSx0dCh2bCksdHQoRHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXItbmF2LWRyb3Bkb3duIl1dLGRlY2xzOjMyLHZhcnM6MTAsY29uc3RzOltbMSwiYXBwLW5hdi1kcm9wZG93biIsImQtbWQtYmxvY2siXSxbImNsckRyb3Bk'@;
put 'b3duVG9nZ2xlIiwiIiwxLCJuYXYtdGV4dCIsImNvbG9yLXdoaXRlIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtZGFuZ2VyIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtaW5mbyIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImNh'@;
put 'cmV0IGRvd24iLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbMSwiY29udGVudC1jb250YWluZXIiLCJoLWF1dG8iXSxbMSwic2lkZW5hdiIsImQtYmxvY2siLCJkLW1kLW5vbmUiLDMsImNsci1uYXYtbGV2ZWwiXSxbMSwic2lkZW5hdi1j'@;
put 'b250ZW50Il0sWyJocmVmIiwiLi4uIiwxLCJuYXYtbGluayIsImFjdGl2ZSJdLFsxLCJ0b2dnbGUtc3dpdGNoIl0sWyJpZCIsImRlYnVnLXRvZ2dsZTIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiXSxbImZvciIsImRlYnVn'@;
put 'LXRvZ2dsZTIiLDEsImRlYnVnLXRvZ2dsZS1sYWJlbCIsImNvbG9yLWRhcmstZ3JheSJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pbyIsMSwibmF2LWxpbmsiLCJkLWJsb2NrIl0sWzEsInNlcGFyYXRvciJdLFsicm91dGVyTGluayIs'@;
put 'Ii9zeXN0ZW0iLDEsIm5hdi1saW5rIiwiZC1ibG9jayJdLFsic2hhcGUiLCJsb2dvdXQiXSxbImhyZWYiLCIuLi4iLDEsIm5hdi1saW5rIiwiZC1ibG9jayIsMywiY2xpY2siXSxbImFsdCIsIiIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEs'@;
put 'ImJhZGdlIiwiYmFkZ2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsiZHJvcGRvd25JdGVtRGVidWciLCIiXSxbMSwidG9nZ2xlLXN3aXRjaCIs'@;
put 'MywiY2xpY2siXSxbImlkIiwiZGVidWctdG9nZ2xlMSIsInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbImhyZWYiLCIuLi4iLCJyb3V0ZXJMaW5rIiwiL3N5c3RlbSIs'@;
put 'ImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0IiwxLCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29u'@;
put 'dHJvbGxlci5pbyIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLWRyb3Bkb3duIiwwKSgxLCJidXR0b24iLDEpKDIsInNwYW4iKSxOZSgzKSx5ZSgpLFFlKDQsUENlLDIsMSwic3BhbiIsMiks'@;
put 'UWUoNSxGQ2UsMiwzLCJzcGFuIiwzKSxRZSg2LEhDZSwyLDMsInNwYW4iLDQpLFFlKDcsTkNlLDEsMCwiY2xyLWljb24iLDUpLHllKCksUWUoOCxCQ2UsMjMsMywiY2xyLWRyb3Bkb3duLW1lbnUiLDYpLHllKCksbWUoOSwiZGl2Iiw3KSgxMCwibmF2Iiw4KSgxMSwic2VjdGlvbiIsOSkoMTIs'@;
put 'ImEiLDEwKSxOZSgxMykseWUoKSxtZSgxNCwiZGl2IikoMTUsImZvcm0iKSgxNiwiZGl2IiwxMSkoMTcsImlucHV0IiwxMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNhc2pzQ29uZmlnLmRlYnVnPWZ9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gZC5vbkRlYnVnTW9kZUNoYW5nZSgpfSkseWUoKSxtZSgxOCwibGFiZWwiLDEzKSxOZSgxOSwiRGVidWcgTW9kZSIpLHllKCkoKSgpKCksbWUoMjAsImEiLDE0KSgyMSwic3BhbiIpLE5lKDIyLCJEb2N1bWVudGF0aW9uIikseWUoKSgpLHF0KDIzLCJkaXYiLDE1KSxtZSgyNCwiYSIsMTYp'@;
put 'KDI1LCJzcGFuIiksTmUoMjYsIlN5c3RlbSIpLHllKCkscXQoMjcsImNsci1pY29uIiwxNykseWUoKSxtZSgyOCwiYSIsMTgpLHh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQubG9nb3V0KGYpfSksbWUoMjksInNwYW4iKSxOZSgzMCwiTG9nIE91dCIpLHllKCkscXQoMzEsImNsci1p'@;
put 'Y29uIiwxNykseWUoKSgpKCkoKSksMiZhJiYoQ2UoMyksb3IoZC51c2VyTmFtZSksQ2UoMSksUmUoIm5nSWYiLCJOb3QgbG9nZ2VkIGluIiE9PWQudXNlck5hbWUmJmQuaXNWaXlhKSxDZSgxKSxSZSgibmdJZiIsIWQuc2FzanNDb25maWcuZGVidWcpLENlKDEpLFJlKCJuZ0lmIixkLnNhc2pz'@;
put 'Q29uZmlnLmRlYnVnKSxDZSgxKSxSZSgibmdJZiIsIWQuaXNWaXlhKSxDZSgzKSxSZSgiY2xyLW5hdi1sZXZlbCIsMiksQ2UoMyksZ3IoIiAiLGQudXNlck5hbWUsIiAiKSxDZSg0KSxSZSgibmdNb2RlbCIsZC5zYXNqc0NvbmZpZy5kZWJ1ZykoIm5nTW9kZWxPcHRpb25zIiwkcyg5LGpDZSkp'@;
put 'KX0sZGVwZW5kZW5jaWVzOltaaSxDcCxTMCxCcyx3cCxPcyxyMixCdSxrYSxjMixVcyxEMCxEOCxUMCx6USxOZixhZyxsZyxLOF0sc3R5bGVzOlsnLmNvcHlSaWdodFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4fS5jb3B5UmlnaHRbX25nY29udGVudC0lQ09NUCVdICAgc3Bh'@;
put 'bltfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXJpZ2h0OjE1cHg7'@;
put 'bGluZS1oZWlnaHQ6M3JlbTtoZWlnaHQ6M3JlbX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gPiBidXR0b24uZHJvcGRvd24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSA+IGJ1dHRvbi5kcm9wZG93bi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEw'@;
put 'cHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdID4gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYmFkZ2UuaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OmhpZGRlbn0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJvdHRvbTowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZXBhcmF0'@;
put 'b3JbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250'@;
put 'ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVu'@;
put 'dVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmRyb3Bkb3duLXRleHRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM1NjU2NTZ9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1l'@;
put 'bnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTVweDtyaWdodDoyNnB4O21hcmdpbi1yaWdodDowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtLmRlYnVnLXN3aXRjaC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3du'@;
put 'LW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYXBwLW5hdi1kcm9w'@;
put 'ZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWxvZ291dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MjBweDt0b3A6'@;
put 'MTVweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAw'@;
put 'JX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21hcmdpbjowO2hlaWdodDox'@;
put 'MDAlO3BhZGRpbmc6MTBweCAyMHB4fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaW5wdXR7aW5zZXQ6MDt3aWR0aDoxMDAlO2hl'@;
put 'aWdodDoxMDAlO2N1cnNvcjpwb2ludGVyfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10b2dnbGUtd3JhcHBlciBpbnB1'@;
put 'dFt0eXBlPWNoZWNrYm94XStsYWJlbDphZnRlcnt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5kZWJ1Zy10b2dnbGUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctbGVmdDo0MnB4fUBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCl7LnNpZGVuYXYtY29udGVudFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICBhLm5hdi1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojNTY1NjU2fX0ubmF2LWxpbmsuZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtw'@;
put 'b3NpdGlvbjphYnNvbHV0ZX0uYXZhdGFyLWltZ1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tbGVmdDoxMHB4O2JvcmRlci1yYWRpdXM6NTBweH0nXX0pLGN9KSgpO2Z1bmN0aW9uIFVDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNs'@;
put 'ci1hbGVydCIsMikseHQoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0LmNsb3NlZD1oKX0pKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25BbGVydENsb3NlKCkpfSksbWUo'@;
put 'MSwiZGl2IiwzKSgyLCJzcGFuIiw0KSxOZSgzKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQpLENlKDMpLGdyKCIgIixhLm1lc3NhZ2Us'@;
put 'IiAiKX19ZnVuY3Rpb24gWkNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWFsZXJ0cyIpLFFlKDEsVUNlLDQsNCwiY2xyLWFsZXJ0IiwxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsYS5hbGVydHMpfX1sZXQgWUNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5fYWxlcnRzU2VydmljZT1hLHRoaXMuYWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0PSExLHRoaXMuYWxlcnRzU3ViPW5ldyBlZX1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRzLnN1YnNjcmliZShhPT57dGhpcy5hbGVydHMu'@;
put 'cHVzaChhKSx0aGlzLmhhc09wZW5BbGVydD0hMCxhLmVyciYmY29uc29sZS5lcnJvcihhLmVycil9KX1vbkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKGE9PiFhLmNsb3NlZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpKHR0KGxQKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENs'@;
put 'b3NlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCIsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIl0sWzEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmUWUoMCxaQ2UsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmEmJlJlKCJuZ0lmIixkLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbeHMsWmksSGIsSFEsTmJdLHN0eWxlczpbImNsci1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxq'@;
put 'RT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jbGFzc2VzPSIifW5nT25Jbml0KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY29udGFjdC1saW5rIl1dLGlucHV0'@;
put 'czp7Y2xhc3NlczoiY2xhc3NlcyJ9LGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJocmVmIiwibWFpbHRvOnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8/c3ViamVjdD1MaWNlbmNlIiwzLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYSIsMCksTmUoMSwi'@;
put 'c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHllKCkpLDImYSYmKGRyKCJ1bnNldCIsIiIhPT1kLmNsYXNzZXMpLFJlKCJuZ0NsYXNzIixkLmNsYXNzZXMpKX0sZGVwZW5kZW5jaWVzOlt1Y10sc3R5bGVzOlsiLnVuc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp1bnNldH0iXX0pLGN9'@;
put 'KSgpLFliPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZpbGVPdmVyPSExLHRoaXMuZmlsZURyb3BwZWQ9bmV3IEVyLHRoaXMuZmlsZURyYWdnZWRPdmVyPW5ldyBFcn1vbkRyYWdPdmVyKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29u'@;
put 'dGFpbnNGaWxlcyhhKSYmIXRoaXMuZmlsZU92ZXImJih0aGlzLmZpbGVPdmVyPSEwLHRoaXMuZmlsZURyYWdnZWRPdmVyLmVtaXQoKSl9b25EcmFnTGVhdmUoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMX1vbmRyb3AoYSl7YS5wcmV2'@;
put 'ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyLmZpbGVzO2QubGVuZ3RoPjAmJnRoaXMuZmlsZURyb3BwZWQuZW1pdChkKX1jb250YWluc0ZpbGVzKGEpe2lmKGEmJmEuZGF0YVRyYW5zZmVyJiZhLmRhdGFUcmFu'@;
put 'c2Zlci50eXBlcylmb3IobGV0IGQ9MDtkPGEuZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aDtkKyspaWYoIkZpbGVzIj09YS5kYXRhVHJhbnNmZXIudHlwZXNbZF0pcmV0dXJuITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1D'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBEcmFnTmRyb3AiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJkcmFnb3ZlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EcmFnT3ZlcihmKX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKGYpe3Jl'@;
put 'dHVybiBkLm9uRHJhZ0xlYXZlKGYpfSkoImRyb3AiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uZHJvcChmKX0pLDImYSYmZHIoImZpbGVvdmVyIixkLmZpbGVPdmVyKX0sb3V0cHV0czp7ZmlsZURyb3BwZWQ6ImZpbGVEcm9wcGVkIixmaWxlRHJhZ2dlZE92ZXI6ImZpbGVEcmFnZ2VkT3ZlciJ9'@;
put 'fSksY30pKCk7ZnVuY3Rpb24gV0NlKGMsbCl7MSZjJiYobWUoMCwicCIsNiksTmUoMSwiTm8gcmVxdWVzdHMgbWFkZSIpLHllKCkpfWZ1bmN0aW9uIEdDZShjLGwpezEmYyYmKG1lKDAsInNwYW4iKSxxdCgxLCJjbHItaWNvbiIsMTMpLHllKCkpfWZ1bmN0aW9uICRDZShjLGwpezEmYyYmKG1l'@;
put 'KDAsInNwYW4iKSxxdCgxLCJjbHItaWNvbiIsMTQpLHllKCkpfWZ1bmN0aW9uIHFDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz1WZSgzKS5pbmRleDtyZXR1'@;
put 'cm4ganQoVmUoMikuZ29Ub0xvZ0xpbmUoZiwicmVxdWVzdF8iK18sImVycm9yIikpfSksbWUoMSwiYnV0dG9uIiwyMiksTmUoMikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxncigiICIsYSwiICIpfX1jb25zdCB1ZWU9ZnVuY3Rpb24oKXtyZXR1cm5bXX07ZnVu'@;
put 'Y3Rpb24gS0NlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIsMTgpLHF0KDEsImNsci1pY29uIiwxOSksTmUoMiksUWUoMyxxQ2UsMywxLCJjbHItdHJlZS1ub2RlIiwyMCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxncigiIEVycm9ycyAoIixh'@;
put 'LmxvZ0Vycm9ycy5sZW5ndGgsIikgIiksQ2UoMSksUmUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHwkcygyLHVlZSkpfX1mdW5jdGlvbiBYQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQo'@;
put 'YSkuJGltcGxpY2l0LF89VmUoMykuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLmdvVG9Mb2dMaW5lKGYsInJlcXVlc3RfIitfLCJ3YXJuaW5nIikpfSksbWUoMSwiYnV0dG9uIiwyMiksTmUoMikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxncigiICIsYSwiICIpfX1m'@;
put 'dW5jdGlvbiBKQ2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiwxOCkscXQoMSwiY2xyLWljb24iLDIzKSxOZSgyKSxRZSgzLFhDZSwzLDEsImNsci10cmVlLW5vZGUiLDIwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0O0NlKDIpLGdyKCIgV2FybmluZ3Mg'@;
put 'KCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksQ2UoMSksUmUoIm5nRm9yT2YiLGEubG9nV2FybmluZ3N8fCRzKDIsdWVlKSl9fWZ1bmN0aW9uIFFDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z'@;
put 'dCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZG93bmxvYWRMb2coaC5sb2dGaWxlKSl9KSxOZSgxLCIgRG93bmxvYWQgIikseWUoKX19ZnVuY3Rpb24gZVNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiY2xyLXRyZWUiKSxRZSgyLEtDZSw0LDMs'@;
put 'ImNsci10cmVlLW5vZGUiLDE1KSxRZSgzLEpDZSw0LDMsImNsci10cmVlLW5vZGUiLDE1KSx5ZSgpLHF0KDQsImRpdiIsMTYpLFFlKDUsUUNlLDIsMCwiYnV0dG9uIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ0lmIixhLmxvZ0Vycm9ycyksQ2Uo'@;
put 'MSksUmUoIm5nSWYiLGEubG9nV2FybmluZ3MpLENlKDEpLFJlKCJpbm5lckhUTUwiLGEubG9nRmlsZSxxMiksQ2UoMSksUmUoIm5nSWYiLChudWxsPT1hLmxvZ0ZpbGU/bnVsbDphLmxvZ0ZpbGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gdFNlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo'@;
put 'MCwiYnV0dG9uIiwyNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5kb3dubG9hZFNvdXJjZUNvZGUoaC5zb3VyY2VDb2RlKSl9KSxOZSgxLCIgRG93bmxvYWQgIikseWUoKX19ZnVuY3Rpb24gblNlKGMsbCl7aWYo'@;
put 'MSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyNSksTmUoMikseWUoKSxRZSgzLHRTZSwyLDAsImJ1dHRvbiIsMTcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgyKSxvcihhLnNvdXJjZUNvZGUpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5zb3Vy'@;
put 'Y2VDb2RlP251bGw6YS5zb3VyY2VDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIHJTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZG93'@;
put 'bmxvYWRHZW5lcmF0ZWRDb2RlKGguZ2VuZXJhdGVkQ29kZSkpfSksTmUoMSwiIERvd25sb2FkICIpLHllKCl9fWZ1bmN0aW9uIGlTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLE5lKDIpLHllKCksUWUoMyxyU2UsMiwwLCJidXR0b24iLDE3KSx5'@;
put 'ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMiksZ3IoIiAiLGEuZ2VuZXJhdGVkQ29kZSwiICIpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIG9TZShjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9Zi5rZXkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZHIo'@;
put 'InNlbGVjdGVkIixWZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxDZSgxKSxncigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gc1NlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxRZSgxLG9TZSwyLDMsImRpdiIsMzApLGJhKDIsImtleXZhbHVl'@;
put 'IikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdGb3JPZiIsVWwoMiwxLGEuU0FTV09SSykpfX1mdW5jdGlvbiBhU2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwzNSkoMSwic3Ryb25nIiksTmUoMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMykuJGlt'@;
put 'cGxpY2l0O0NlKDIpLGdyKCIiLGEuc2VsZWN0ZWRUYWJsZSwiIChmaXJzdCAxMCByb3dzKSAiKX19ZnVuY3Rpb24gbFNlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9u'@;
put 'IGNTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKS4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGRbYS5rZXldLCIgIil9fWZ1bmN0aW9uIHVTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiksUWUoMSxjU2UsMiwxLCJ0'@;
put 'ZCIsMzcpLGJhKDIsImtleXZhbHVlIikseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdGb3JPZiIsVWwoMiwxLGEuU0FTV09SS1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzWzBdKSl9fWZ1bmN0aW9uIGRTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRh'@;
put 'YmxlIiwzNikoMSwidGhlYWQiKSgyLCJ0ciIpLFFlKDMsbFNlLDIsMSwidGgiLDM3KSxiYSg0LCJrZXl2YWx1ZSIpLHllKCkoKSxtZSg1LCJ0Ym9keSIpLFFlKDYsdVNlLDMsMywidHIiLDM3KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKS4kaW1wbGljaXQ7Q2UoMyksUmUoIm5nRm9yT2Yi'@;
put 'LFVsKDQsMixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpLENlKDMpLFJlKCJuZ0Zvck9mIixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93cyl9fWZ1bmN0aW9uIGhTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpLFFl'@;
put 'KDEsYVNlLDMsMSwicCIsMzIpLG1lKDIsImRpdiIsMzMpLFFlKDMsZFNlLDcsNCwidGFibGUiLDM0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksQ2UoMiksUmUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSl9fWZ1'@;
put 'bmN0aW9uIGZTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI2KSgyLCJidXR0b24iLDI3KSxOZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLHF0KDQsImNsci1pY29uIiwyOCkseWUoKSxRZSg1LHNTZSwzLDMsImNsci1kcm9wZG93'@;
put 'bi1tZW51IiwyOSkseWUoKSxRZSg2LGhTZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMykudGFibGVzQWN0aXZlPWgpfSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoImNsckNs'@;
put 'b3NlTWVudU9uSXRlbUNsaWNrIiwhMCksQ2UoNSksUmUoImNscklmQWN0aXZlIixhLnRhYmxlc0FjdGl2ZSl9fWZ1bmN0aW9uIHBTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1zdGFjay1ibG9jayIsOCkoMSwiY2xyLXN0YWNrLWxhYmVsIiksTmUoMiksbWUoMywic3Bh'@;
put 'biIsOSksUWUoNCxHQ2UsMiwwLCJzcGFuIiw1KSxRZSg1LCRDZSwyLDAsInNwYW4iLDUpLHllKCkoKSxtZSg2LCJjbHItc3RhY2stY29udGVudCIpLE5lKDcpLHllKCksbWUoOCwiY2xyLXN0YWNrLWJsb2NrIiwxMCkoOSwiY2xyLXN0YWNrLWNvbnRlbnQiKSgxMCwiY2xyLXRhYnMiKSgxMSwi'@;
put 'Y2xyLXRhYiIpKDEyLCJidXR0b24iLDExKSxOZSgxMywiU0FTIExvZyIpLHllKCksUWUoMTQsZVNlLDYsNCwibmctdGVtcGxhdGUiLDEyKSx4dCgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS5zYXNMb2dBY3RpdmU9aCl9KSx5ZSgpLG1lKDE1'@;
put 'LCJjbHItdGFiIikoMTYsImJ1dHRvbiIsMTEpLE5lKDE3LCJTQVMgU291cmNlIENvZGUiKSx5ZSgpLFFlKDE4LG5TZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuc2FzU291cmNlQ29kZUFjdGl2'@;
put 'ZT1oKX0pLHllKCksbWUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwxMSksTmUoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLHllKCksUWUoMjIsaVNlLDQsMiwibmctdGVtcGxhdGUiLDEyKSx4dCgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgy'@;
put 'KS5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPWgpfSkseWUoKSxRZSgyMyxmU2UsNywyLCJjbHItdGFiIiw1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1WZSgyKTtSZSgiaWQiLCJyZXF1ZXN0XyIrZCkoImNsclN0YWNrVmlld0xldmVsIiwxKSgi'@;
put 'Y2xyU3RhY2tWaWV3U2V0c2l6ZSIsMykoImNsclN0YWNrVmlld1Bvc2luc2V0IiwzKSxDZSgyKSxncigiICIsYS5zZXJ2aWNlTGluaywiICIpLENlKDIpLFJlKCJuZ0lmIiwobnVsbD09YS5sb2dXYXJuaW5ncz9udWxsOmEubG9nV2FybmluZ3MubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIs'@;
put 'KG51bGw9PWEubG9nRXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxDZSgyKSxvcihhLnBhcnNlZFRpbWVzdGFtcCksQ2UoNyksUmUoImNscklmQWN0aXZlIixoLnNhc0xvZ0FjdGl2ZSksQ2UoNCksUmUoImNscklmQWN0aXZlIixoLnNhc1NvdXJjZUNvZGVBY3RpdmUpLENlKDQp'@;
put 'LFJlKCJjbHJJZkFjdGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxDZSgxKSxSZSgibmdJZiIsYS5TQVNXT1JLKX19ZnVuY3Rpb24gZ1NlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXN0YWNrLXZpZXciKSxRZSgxLHBTZSwyNCwxMiwiY2xyLXN0YWNrLWJsb2NrIiw3KSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsYS5zYXNqc1JlcXVlc3RzKX19bGV0IG1TZT0oKCk9PntjbGFzcyBje2dldCBvcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfXNldCBvcGVuZWQoYSl7dGhpcy5fb3BlbmVkPWEsYSYmdGhpcy5tb2RhbE9wZW5lZCgpLHRoaXMu'@;
put 'bG9nZ2VyU2VydmljZS5sb2codGhpcy5zYXNqc1JlcXVlc3RzKX1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5fb3BlbmVkPSExLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBFcix0aGlzLnNh'@;
put 'c0xvZ0FjdGl2ZT0hMCx0aGlzLnNhc1NvdXJjZUNvZGVBY3RpdmU9ITEsdGhpcy5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPSExLHRoaXMudGFibGVzQWN0aXZlPSExLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zYXNqc1JlcXVlc3RzPVtd'@;
put 'fW5nT25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4gYS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIvIiwiIil9Zm9ybWF0'@;
put 'VGltZXN0YW1wKGEpe3JldHVybiBLbyhhKS5mb3JtYXQoKT9LbyhhKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBLbyhhKS5mb3JtYXQoKT9gICgke0tvKGEpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFu'@;
put 'Z2UoYSl7dGhpcy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVzdHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VF'@;
put 'cnJvcnNBbmRXYXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXApfWdvVG9Mb2dMaW5lKGEsZCxoKXtsZXQgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9y'@;
put 'QWxsKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKSxfPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtmb3IobGV0IFQgb2YgZilULnRleHRDb250ZW50LmluY2x1ZGVzKGEpJiYoXy5zY3JvbGxUb3A9VC5vZmZzZXRUb3AtXy5vZmZz'@;
put 'ZXRUb3AsVC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiM2MWEyMjAyYiIsc2V0VGltZW91dCgoKT0+e1Quc3R5bGU9IiJ9LDNlMykpfXBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoIWF8fCFhLmxvZ0ZpbGV8fCJzdHJpbmciIT10'@;
put 'eXBlb2YgYS5sb2dGaWxlfHx2b2lkIDAhPT1hLmxvZ0Vycm9yc3x8dm9pZCAwIT09YS5sb2dXYXJuaW5ncylyZXR1cm47bGV0IGg9W10sZj1bXSxfPWEubG9nRmlsZS5zcGxpdCgiXG4iKTtmb3IobGV0IFQ9MDtUPF8ubGVuZ3RoO1QrKyl7aWYoLzwuKj5FUlJPUi9nbS50ZXN0KF9bVF0pKXts'@;
put 'ZXQgVz1fW1RdLnN1YnN0cmluZyhfW1RdLmluZGV4T2YoIkUiKSxfW1RdLmxlbmd0aC0xKTtoLnB1c2goVyl9ZWxzZS9eRVJST1IvZ20udGVzdChfW1RdKSYmKGgucHVzaChfW1RdKSxfW1RdPSI8Zm9udD4iK19bVF0rIjwvZm9udD4iKTtpZigvPC4qPldBUk5JTkcvZ20udGVzdChfW1RdKSl7'@;
put 'bGV0IFc9X1tUXS5zdWJzdHJpbmcoX1tUXS5pbmRleE9mKCJXIiksX1tUXS5sZW5ndGgtMSk7Zi5wdXNoKFcpfWVsc2UvXldBUk5JTkcvZ20udGVzdChfW1RdKSYmKGYucHVzaChfW1RdKSxfW1RdPSI8Zm9udD4iK19bVF0rIjwvZm9udD4iKX1kLmxvZ2dlclNlcnZpY2UubG9nKGYpLGEubG9n'@;
put 'RmlsZT1fLmpvaW4oIlxuIiksYS5sb2dFcnJvcnM9aCxhLmxvZ1dhcm5pbmdzPWZ9KSgpfWRvd25sb2FkTG9nKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYGxvZ0ZpbGUtJHtkfWAsYSl9ZG93bmxvYWRTb3VyY2VD'@;
put 'b2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYHNvdXJjZUNvZGUtJHtkfWAsYSl9ZG93bmxvYWRHZW5lcmF0ZWRDb2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNl'@;
put 'LmRvd25sb2FkVGV4dEZpbGUoYGdlbmVyYXRlZENvZGUtJHtkfWAsYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dCh3MCksdHQoQWMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJlcXVlc3RzLW1v'@;
put 'ZGFsIl1dLGlucHV0czp7b3BlbmVkOiJvcGVuZWQifSxvdXRwdXRzOntvcGVuZWRDaGFuZ2U6Im9wZW5lZENoYW5nZSJ9LGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbHJNb2RhbFNpemUiLCJ4bCIsMSwicmVxdWVzdHMtbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNo'@;
put 'YW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtdC0wIiwiZC1pbmxpbmUtYmxvY2siXSxbMSwibW9kYWwtYm9keSIsImgtNzB2aCJdLFsiY2xhc3MiLCJuby1yZXFzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibm8tcmVxcyJdLFszLCJpZCIsImNsclN0YWNrVmlld0xldmVsIiwiY2xy'@;
put 'U3RhY2tWaWV3U2V0c2l6ZSIsImNsclN0YWNrVmlld1Bvc2luc2V0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsImNsclN0YWNrVmlld1NldHNpemUiLCJjbHJTdGFja1ZpZXdQb3NpbnNldCJdLFsxLCJtbC0xMCJdLFsxLCJjb250ZW50Il0sWyJj'@;
put 'bHJUYWJMaW5rIiwiIl0sWzMsImNscklmQWN0aXZlIiwiY2xySWZBY3RpdmVDaGFuZ2UiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJtYi01IiwiY29sb3ItZ3JlZW4iXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1yZWQiXSxbImNs'@;
put 'YXNzIiwiZXJyLWxpbmtzIiw0LCJuZ0lmIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9u'@;
put 'LXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNvbG9yLWdyZWVuIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4i'@;
put 'LCJidG4tbGluayIsMywiY2xpY2siXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsclRhYkxpbmsiLCIiLDEsIndvcmstdGFibGVzLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwi'@;
put 'Y2xySWZPcGVuIl0sWyJjbGFzcyIsImRyb3Bkb3duLWl0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkcm9wZG93bi1pdGVtIiwzLCJjbGljayJdLFsiY2xhc3MiLCJtdC0x'@;
put 'MCIsNCwibmdJZiJdLFsxLCJtaW4taC01MHZoIl0sWyJjbGFzcyIsInRhYmxlIG10LTEwIiw0LCJuZ0lmIl0sWzEsIm10LTEwIl0sWzEsInRhYmxlIiwibXQtMTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiww'@;
put 'KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5tb2RhbE9wZW5DaGFuZ2UoZil9KSxtZSgxLCJoMyIsMSksTmUoMiwiIFJlcXVlc3QgSGlzdG9yeSAiKSxtZSgzLCJwIiwyKSxOZSg0KSx5ZSgpKCksbWUoNSwiZGl2IiwzKSxRZSg2LFdDZSwyLDAsInAiLDQp'@;
put 'LFFlKDcsZ1NlLDIsMSwiY2xyLXN0YWNrLXZpZXciLDUpLHllKCkoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC5vcGVuZWQpLENlKDQpLGdyKCJBcHAgTG9jYXRpb246ICIsZC5zYXNqc0NvbmZpZy5hcHBMb2MsIiIpLENlKDIpLFJlKCJuZ0lmIiwobnVsbD09ZC5zYXNqc1JlcXVlc3Rz'@;
put 'P251bGw6ZC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk8MSksQ2UoMSksUmUoIm5nSWYiLGQub3BlbmVkJiYobnVsbD09ZC5zYXNqc1JlcXVlc3RzP251bGw6ZC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLHE4LHhRLG1ILE1RLGRkLGcxLERwLGthLG91LHN1'@;
put 'LEU4LGMyLExwLE9wLGRnLFJwLElwLGNnLE5mLGFnLGxnLEs4LGR4XSxzdHlsZXM6WyIucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9ICAucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWNvbnRlbnR7cGFkZGluZzoyMHB4'@;
put 'IDEwcHggNXB4fSAgLndvcmstdGFibGVzLWRyb3Bkb3duIGJ1dHRvbntjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstY29sb3IsICM4YzhjOGMpIWltcG9ydGFudH0gIC5zdGFjay12aWV3e2hlaWdodDphdXRvIWltcG9ydGFudDttYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50Oy13ZWJraXQtbWFz'@;
put 'ay1pbWFnZTpub25lIWltcG9ydGFudH0gIC5jb250ZW50IGNsci1pY29ue21hcmdpbi1ib3R0b206NXB4fSAgLmNvbnRlbnQgcHJle3dvcmQtYnJlYWs6YnJlYWstYWxsO3doaXRlLXNwYWNlOnByZS13cmFwO21heC1oZWlnaHQ6aW5pdGlhbDtvdmVyZmxvdzp2aXNpYmxlO2JvcmRlcjowfSAg'@;
put 'LmNvbnRlbnQgLnN0YWNrLWJsb2NrLWxhYmVse3dpZHRoOjEwMCU7cGFkZGluZy1sZWZ0Oi42cmVtIWltcG9ydGFudH0gIC5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7ZGlzcGxheTpub25lIWltcG9ydGFudH0gIC5lcnItbGlua3MgLmNsci10cmVlbm9kZS1j'@;
put 'aGlsZHJlbnttYXgtaGVpZ2h0OjU1cHg7b3ZlcmZsb3c6YXV0b30uZHJvcGRvd24taXRlbS5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZDhlM2U5fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo1MHB4O3BhZGRpbmc6MTBweDttYXJn'@;
put 'aW4tdG9wOjEwcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtoZWlnaHQ6NDh2aDtvdmVyZmxvdzphdXRvfS5uby1yZXFzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9w'@;
put 'OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMDE5NjA3ODQzKTtwYWRkaW5nLXRvcDo1cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Il19KSxjfSkoKTtjbGFzcyB2U2V7Y29uc3RydWN0b3IoKXt0aGlzLnNhc1NlcnZpY2U9bnVsbCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy5kZXRhaWxzPW5ldyBkZWV9fWNs'@;
put 'YXNzIGRlZXt9ZnVuY3Rpb24gX1NlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsOCksTmUoMSwiIFNBUyBTZXJ2aWNlOiAiKSxtZSgyLCJzdHJvbmciKSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEuZGF0YS5zYXNTZXJ2aWNlKX19ZnVuY3Rpb24gYlNlKGMsbCl7'@;
put 'aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJwIikoMiwic3Ryb25nIiksTmUoMywiU1lTV0FSTklOR1RFWFQ6IikseWUoKSxOZSg0KSx5ZSgpLG1lKDUsInAiKSg2LCJzdHJvbmciKSxOZSg3LCJTWVNFUlJPUlRFWFQ6IikseWUoKSxOZSg4KSx5ZSgpLG1lKDksInAiKSgxMCwic3Ryb25nIiks'@;
put 'TmUoMTEsIk1BQzoiKSx5ZSgpLE5lKDEyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLGdyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNXQVJOSU5HVEVYVCwiIiksQ2UoNCksZ3IoIiAiLGEuZGF0YS5kZXRhaWxzLlNZU0VSUk9SVEVYVCwiIiksQ2UoNCksZ3IoIiAiLGEuZGF0YS5k'@;
put 'ZXRhaWxzLk1BQywiIil9fWZ1bmN0aW9uIHlTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vcGVuQ29uZmlndXJhdG9yKCkpfSksTmUoMSwiIE9wZW4gY29uZmlndXJhdG9yICIp'@;
put 'LHllKCl9fWZ1bmN0aW9uIHdTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLE5lKDEsIiBPcGVuIHJlcXVlc3RzIG1vZGFsICIpLHllKCl9'@;
put 'fWZ1bmN0aW9uIENTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5kb3dubG9hZExvZygpKX0pLE5lKDEsIiBEb3dubG9hZCBsb2cgIikseWUoKX19ZnVuY3Rpb24gU1NlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmNsb3NlQWJvcnRNb2RhbCgpKX0pLE5lKDEsIiBDbG9zZSAiKSx5ZSgpfX1mdW5jdGlvbiBNU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtt'@;
put 'ZSgwLCJidXR0b24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkucmVsb2FkKCkpfSksTmUoMSwiIFJlbG9hZCAiKSx5ZSgpfX1sZXQgeFNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5l'@;
put 'dmVudFNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMub25Db25maXJtTW9kYWxDbGljaz1uZXcgRXIsdGhpcy5kYXRhPW5ldyB2U2UsdGhpcy5mb3JjZVJlbG9hZD0hMSx0aGlzLm1vZGFsRW5hYmxlZD0hMCx0aGlzLmRlZmF1bHREYXRhPXttb2RhbFRpdGxl'@;
put 'OiJBYm9ydCBNZXNzYWdlIixzYXNTZXJ2aWNlOm51bGwsbWVzc2FnZToiIixkZXRhaWxzOm5ldyBkZWV9fW5nT25Jbml0KCl7bGV0IGE9ey4uLnRoaXMuZGVmYXVsdERhdGEsLi4udGhpcy5kYXRhfTt0aGlzLmRhdGE9YX1zaG93Q29uZmlndXJhdG9yQnV0dG9uKGEpe2NvbnN0IGQ9dGhpcy5z'@;
put 'YXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGE/LmluY2x1ZGVzKCJzdGFydHVwc2VydmljZSIpJiZkLnNlcnZlclR5cGU9PT1VYy5ELlNhczl9Y2xvc2VBYm9ydE1vZGFsKCl7dGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrLmVtaXQoKX1vcGVuQ29uZmlndXJhdG9yKCl7dGhpcy5l'@;
put 'dmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksdGhpcy5jbG9zZUFib3J0TW9kYWwoKX1kb3dubG9hZExvZygpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGAke3RoaXMuZGF0YS5zYXNTZXJ2aWNl'@;
put 'fS1MT0dgLHRoaXMuZGF0YS5kZXRhaWxzPy5MT0d8fCJFcnJvciBwYXJzaW5nIHRoZSBsb2ciKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9cmVsb2FkKCl7bG9jYXRpb24ucmVsb2FkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFjKSx0dCh2bCksdHQob2EpLHR0KERzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1pbmZvLW1vZGFsIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsZm9yY2VSZWxvYWQ6ImZvcmNlUmVsb2FkIn0sb3V0cHV0czp7'@;
put 'b25Db25maXJtTW9kYWxDbGljazoib25Db25maXJtTW9kYWxDbGljayJ9LGRlY2xzOjEzLHZhcnM6MTIsY29uc3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwiY2xyLWFib3J0LW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9k'@;
put 'YWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsInNhc1NlcnZpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBl'@;
put 'IiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiXSxbMSwic3lzdGV4dCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYobWUoMCwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5tb2RhbEVuYWJsZWQ9Zn0pLG1lKDEsImgzIiwxKSxOZSgyKSxRZSgzLF9TZSw0LDEsInAiLDIpLHllKCksbWUoNCwiZGl2IiwzKSxxdCg1LCJkaXYiLDQpLFFlKDYsYlNl'@;
put 'LDEzLDMsImRpdiIsNSkseWUoKSxtZSg3LCJkaXYiLDYpLFFlKDgseVNlLDIsMCwiYnV0dG9uIiw3KSxRZSg5LHdTZSwyLDAsImJ1dHRvbiIsNyksUWUoMTAsQ1NlLDIsMCwiYnV0dG9uIiw3KSxRZSgxMSxTU2UsMiwwLCJidXR0b24iLDcpLFFlKDEyLE1TZSwyLDAsImJ1dHRvbiIsNykseWUo'@;
put 'KSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixkLm1vZGFsRW5hYmxlZCkoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFkLmZvcmNlUmVsb2FkKSxDZSgyKSxncigiICIsZC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxDZSgxKSxSZSgibmdJZiIsZC5kYXRhLnNhc1Nl'@;
put 'cnZpY2UmJmQuZGF0YS5zYXNTZXJ2aWNlLmxlbmd0aD4wKSxDZSgyKSxSZSgiaW5uZXJIVE1MIixkLmRhdGEubWVzc2FnZSxxMiksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1kLmRhdGEuZGV0YWlscyksQ2UoMiksUmUoIm5nSWYiLGQuc2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihkLmRhdGEuc2Fz'@;
put 'U2VydmljZSkpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09ZC5kYXRhLmRldGFpbHMpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09ZC5kYXRhLmRldGFpbHM/bnVsbDpkLmRhdGEuZGV0YWlscy5MT0cpJiYobnVsbD09ZC5kYXRhLmRldGFpbHN8fG51bGw9PWQuZGF0YS5kZXRhaWxzLkxPRz9udWxs'@;
put 'OmQuZGF0YS5kZXRhaWxzLkxPRy50cmltKCkubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIsIWQuZm9yY2VSZWxvYWQpLENlKDEpLFJlKCJuZ0lmIixkLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbWmksb3Usc3UsWWJdLHN0eWxlczpbIi5jbHItYWJvcnQtbW9kYWxbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgICAubW9kYWwtdGl0bGUtd3JhcHBlcnt3aWR0aDoxMDAlfS5jbHItYWJvcnQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWx7ei1pbmRleDoyMDUwfS5tb2RhbC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LnNhc1NlcnZp'@;
put 'Y2VbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9Lm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17b3ZlcmZsb3c6YXV0bzttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7d29yZC13cmFwOmJyZWFrLXdv'@;
put 'cmR9Il19KSxjfSkoKTtmdW5jdGlvbiBFU2UoYyxsKXsxJmMmJihCcigwKSxtZSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIHRvIHVw'@;
put 'Z3JhZGUgY29udGFjdCAiKSxxdCg3LCJjb250YWN0LWxpbmsiLDI1KSx5ZSgpKCkoKSxtZSg4LCJhIiwyNiksTmUoOSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSxVcigpKX1mdW5jdGlvbiBrU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJkaXYiLDIwKSgyLCJk'@;
put 'aXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIFByb2JsZW0gd2l0aCBsaWNlbmNlICIpLHllKCkoKSgpLG1lKDcsImEiLDI3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgzKTtyZXR1cm4ganQoaC5saWNlbmNlUHJvYmxlbURldGFpbHMoaC5saWNlbmNlUHJvYmxlbS52YWx1ZSkpfSksTmUoOCwiTW9yZSBkZXRhaWxzIikseWUoKSxVcigpfX1mdW5jdGlvbiBBU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE5KSxRZSgxLEVTZSwx'@;
put 'MCwwLCJuZy1jb250YWluZXIiLDEpLFFlKDIsa1NlLDksMCwibmctY29udGFpbmVyIiwxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGljZW5jZVByb2JsZW0u'@;
put 'dmFsdWUpfX1mdW5jdGlvbiBUU2UoYyxsKXsxJmMmJihtZSgwLCJhIiwyNiksTmUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSl9ZnVuY3Rpb24gRFNlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyOCkoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xy'@;
put 'LWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYpLHF0KDcsImNvbnRhY3QtbGluayIsMjUpLE5lKDgpLHllKCkoKSgpLFFlKDksVFNlLDIsMCwiYSIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSg2KSxqYygiIFRoaXMgbGljZW5zZSBrZXkgd2lsbCBleHBpcmUgaW4g'@;
put 'IixhLmxpY2Vuc2VFeHBpcmluZ0RheXMsIiAiLDE9PT1hLmxpY2Vuc2VFeHBpcmluZ0RheXM/ImRheSI6ImRheXMiLCIuIFBsZWFzZSBjb250YWN0ICIpLENlKDIpLGdyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lz'@;
put 'c2l0ZS5nZXRWYWx1ZSgpLCIuICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIElTZShjLGwpezEmYyYmKG1lKDAsImEiLDI2KSxOZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSx5ZSgpKX1mdW5jdGlvbiBMU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYi'@;
put 'LDI4KSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyBleGNlZWRzIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5zZS4g'@;
put 'UGxlYXNlIGNvbnRhY3QgIikscXQoNywiY29udGFjdC1saW5rIiwyNSksTmUoOCkseWUoKSgpKCksUWUoOSxJU2UsMiwwLCJhIiwyOSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDgpLGdyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Ig'@;
put 'c2l0ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIFJTZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsQVNlLDMsMiwiZGl2IiwxNyksUWUoMixEU2UsMTAs'@;
put 'NCwiZGl2IiwxOCksUWUoMyxMU2UsMTAsMiwiZGl2IiwxOCksVXIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuZnJlZVRpZXJCYW5uZXImJighYS5saWNlbnNlRXhwaXJpbmdEYXlzfHxhLmxpY2Vuc2VFeHBpcmluZ0RheXM8MCkpLENlKDEpLFJlKCJuZ0lmIixhLmxp'@;
put 'Y2Vuc2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKSxDZSgxKSxSZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiBPU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkudG9nZ2xlU2lkZWJhcigpKX0pLHF0KDEsImNsci1pY29uIiwzMSkseWUoKX19Y29uc3QgUFNlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvIl19O2Z1bmN0aW9uIEZTZShjLGwpezEmYyYmKG1lKDAsImEiLDMyKSxxdCgxLCJpbWciLDMzKSgyLCJpbWciLDM0KSx5ZSgpKSwyJmMmJlJlKCJy'@;
put 'b3V0ZXJMaW5rIiwkcygxLFBTZSkpfWZ1bmN0aW9uIEhTZShjLGwpezEmYyYmKG1lKDAsImEiKSxxdCgxLCJzcGFuIiwzNSkseWUoKSl9Y29uc3QgaGVlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldyJdfSxmZWU9ZnVuY3Rpb24oKXtyZXR1cm5bIi9ob21lIl19LElIPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuWyIvcmV2aWV3L3N1Ym1pdHRlZCJdfTtmdW5jdGlvbiBOU2UoYyxsKXsxJmMmJihtZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDMpKDEsImEiLDQ0KSxOZSgyLCJWSUVXIikseWUoKSxtZSgzLCJhIiw0NCksTmUoNCwiTE9BRCIpLHllKCksbWUoNSwiYSIsNDQpLE5lKDYsIlJFVklFVyIp'@;
put 'LHllKCkoKSksMiZjJiYoQ2UoMSksUmUoInJvdXRlckxpbmsiLCRzKDMsaGVlKSksQ2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDQsZmVlKSksQ2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDUsSUgpKSl9ZnVuY3Rpb24gVlNlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwiZGl2IiwzNikoMiwi'@;
put 'Y2xyLWRyb3Bkb3duIikoMywiYnV0dG9uIiwzNyksTmUoNCwiIE1lbnUgIikseWUoKSxRZSg1LE5TZSw3LDYsImNsci1kcm9wZG93bi1tZW51IiwzOCkseWUoKSgpLG1lKDYsImRpdiIsMzkpKDcsImEiLDQwKSxOZSg4LCJWSUVXIikseWUoKSxtZSg5LCJhIiw0MSksTmUoMTAsIkxPQUQiKSx5'@;
put 'ZSgpLG1lKDExLCJhIiw0MiksTmUoMTIsIlJFVklFVyIpLHllKCkoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg3KSxSZSgicm91dGVyTGluayIsJHMoNyxoZWUpKSxDZSgyKSxkcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImVkaXRvciIpfHxhLnJvdXRlci51cmwuaW5j'@;
put 'bHVkZXMoImVkaXQtcmVjb3JkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiaG9tZSIpKSxSZSgicm91dGVyTGluayIsJHMoOCxmZWUpKSxDZSgyKSxkcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoInN1Ym1pdHRlZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUi'@;
put 'KXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJoaXN0b3J5IikpLFJlKCJyb3V0ZXJMaW5rIiwkcyg5LElIKSl9fWNvbnN0IEJTZT1mdW5jdGlvbigpe3JldHVyblsiL3Jldmlldy9hcHByb3ZlIl19LGpTZT1mdW5jdGlvbigpe3JldHVyblsiL3Jldmlldy9oaXN0b3J5Il19O2Z1bmN0aW9uIHpT'@;
put 'ZShjLGwpe2lmKDEmYyYmKG1lKDAsIm5hdiIsNDUpKDEsInVsIiw0NikoMiwibGkiLDQ3KSgzLCJhIiw0MCksTmUoNCwiU1VCTUlUIikseWUoKSgpLG1lKDUsImxpIiw0NykoNiwiYSIsNDApLE5lKDcsIkFQUFJPVkUiKSx5ZSgpKCksbWUoOCwibGkiLDQ3KSg5LCJhIiw0MCksTmUoMTAsIkhJ'@;
put 'U1RPUlkiKSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxSZSgicm91dGVyTGluayIsJHMoNSxJSCkpLENlKDMpLGRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpKSxSZSgicm91dGVyTGluayIsJHMoNixCU2UpKSxDZSgzKSxSZSgicm91dGVy'@;
put 'TGluayIsJHMoNyxqU2UpKX19ZnVuY3Rpb24gVVNlKGMsbCl7MSZjJiZxdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gWlNlKGMsbCl7MSZjJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9ZnVuY3Rpb24gWVNlKGMsbCl7MSZjJiZxdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gV1NlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLWluZm8tbW9kYWwiLDQ4KSx4dCgib25Db25maXJtTW9kYWxDbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jbG9zZUFib3J0TW9kYWwoZi5pZCkpfSkseWUoKX1pZigyJmMpe2NvbnN0'@;
put 'IGE9bC4kaW1wbGljaXQsZD1WZSgpO1JlKCJkYXRhIixhKSgiZm9yY2VSZWxvYWQiLCFkLnN0YXJ0dXBEYXRhTG9hZGVkJiYxPT09ZC5zYXNqc0Fib3J0cy5sZW5ndGgpfX1mdW5jdGlvbiBHU2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDUyKSxxdCgxLCJkaXYiLDUzKSgyLCJkaXYiLDU0KSgz'@;
put 'LCJkaXYiLDU1KSx5ZSgpKX1mdW5jdGlvbiAkU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ5KSxxdCgxLCJpbWciLDUwKSxRZSgyLEdTZSw0LDAsImRpdiIsNTEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixudWxsPT09YS5hcHBBY3RpdmUpfX1sZXQgcVNl'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxnZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMubG9jYXRpb249Xyx0aGlzLmV2ZW50U2VydmljZT1ULHRoaXMuYXBwU3RvcmVT'@;
put 'ZXJ2aWNlPVcsdGhpcy5jZHI9aWUsdGhpcy5lbGVtZW50UmVmPWdlLHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1udWxsLHRoaXMuc2FzanNBYm9ydHM9W10sdGhpcy5lZGl0b3JBY3RpdmU9ITEsdGhpcy5hcHByb3ZlQWN0aXZlPSExLHRoaXMuZnJlZVRpZXJCYW5uZXI9dGhpcy5saWNlbmNl'@;
put 'U2VydmljZS5pc0FwcEZyZWVUaWVyLnZhbHVlLHRoaXMubGljZW5jZVByb2JsZW09dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlUHJvYmxlbSx0aGlzLmFwcE92ZXJDYXBhY2l0eT0hMSx0aGlzLmFwcEFjdGl2ZT1udWxsLHRoaXMucmVxdWVzdHNNb2RhbD0hMSx0aGlzLnNob3dSZWdpc3Ry'@;
put 'YXRpb249ITAsdGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMSx0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMSxmZWF0dXJlTmFtZToiIn0sdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0'@;
put 'YXRlLHRoaXMucGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpLHdpbmRvdy5hcHBpbmZvPSgpPT57Y29uc29sZS50YWJsZSh7IkFkYXB0ZXIgdmVyc2lvbiI6IjQuMTAuMSIsIkFwcCB2ZXJzaW9uIjoidjYuNS4yIi5yZXBsYWNlKCJ2IiwiIiksIkJ1aWxkIHRpbWVzdGFtcCI6S28ocGFyc2VJbnQo'@;
put 'IjE3MDcyNDU3MjM1MTgiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRWZXI9InY2LjUuMiIucmVwbGFjZSgidiIsIiIpKyIuZzYwNTEwYTQiLGguZXZlbnRzLnN1YnNjcmliZSh3'@;
put 'ZT0+e2lmKHRoaXMucm91dGVVcmw9dGhpcy5yb3V0ZXIudXJsLHR5cGVvZiB0aGlzLnJvdXRlVXJsPCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NCl7bGV0IEVlPXRoaXMucm91dGVVcmwuc3BsaXQoIi8iKVsxXTsiZWRpdG9yIj09PUVlPyh0aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFj'@;
put 'dGl2ZT0hMCx0aGlzLmFwcHJvdmVBY3RpdmU9ITEpOiJob21lIj09PUVlPyh0aGlzLmVyclRvcD0hMSx0aGlzLmVkaXRvckFjdGl2ZT0hMCx0aGlzLmFwcHJvdmVBY3RpdmU9ITEpOih0aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFjdGl2ZT0hMSksR24ucm9vdFBhcmFtPUVlfXR5cGVvZiB0'@;
put 'aGlzLnJvdXRlVXJsPCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NiYmKHRoaXMuYXBwcm92ZUFjdGl2ZT0hIXRoaXMucm91dGVVcmwuaW5jbHVkZXMoImFwcHJvdmVEZXQiKXx8ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJ0b2FwcHJvdmUiKSl9KSx0aGlzLnN1YnNjcmliZVRvU2hvd0Fi'@;
put 'b3J0TW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpLHRoaXMuc3Vic2NyaWJlVG9BcHBBY3RpdmUoKSx0aGlzLnN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKSx3aW5kb3cuZnJhbWVFbGVtZW50JiYod2luZG93LmZy'@;
put 'YW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiaGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZSIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhbGxvd2Z1bGxzY3JlZW4iLCIiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgi'@;
put 'ZnJhbWVib3JkZXIiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbmhlaWdodCIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2lud2lkdGgiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInNjcm9sbGlu'@;
put 'ZyIsImF1dG8iKSx3aW5kb3cuZm9jdXMoKSl9cGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2FzanMiKTtpZighYSlyZXR1cm4gdGhpcy5saWNlbmNlU2VydmljZS5kZWFjdGl2YXRlQXBwKCksdm9pZCBzZXRUaW1lb3V0KCgpPT57dGhp'@;
put 'cy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiUGxlYXNlIG1ha2Ugc3VyZSAnU0FTSlMnIHRhZyB3aXRoIGNvbmZpZyBhdHRyaWJ1dGVzIGlzIGFkZGVkIHRvIGluZGV4Lmh0bWwiLG51bGwsIlNBU2pzIENvbmZpZyBub3QgZm91bmQiKX0pO2NvbnN0IGQ9Zj0+YS5nZXRBdHRy'@;
put 'aWJ1dGUoZil8fHZvaWQgMCxoPXtzZXJ2ZXJVcmw6ZCgic2VydmVyVXJsIil8fCIiLGFwcExvYzpkKCJhcHBMb2MiKXx8IiIsc2VydmVyVHlwZTpkKCJzZXJ2ZXJUeXBlIiksbG9naW5NZWNoYW5pc206ZCgibG9naW5NZWNoYW5pc20iKXx8IiIsYWRtaW5Hcm91cDpkKCJhZG1pbkdyb3VwIil8'@;
put 'fCIiLGRjUGF0aDpkKCJkY1BhdGgiKXx8IiIsZGVidWc6InRydWUiPT09ZCgiZGVidWciKXx8ITEsdXNlQ29tcHV0ZUFwaTp0aGlzLnBhcnNlQ29tcHV0ZUFwaShkKCJ1c2VDb21wdXRlQXBpIikpLGNvbnRleHROYW1lOmQoImNvbnRleHROYW1lIil8fCIiLGhvdExpY2VuY2VLZXk6ZCgiaG90'@;
put 'TGljZW5jZUtleSIpfHwiIn07dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1oLHRoaXMuYXBwU3RvcmVTZXJ2aWNlLnNldERjQWRhcHRlclNldHRpbmdzKGgpLHRoaXMuYXBwU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfWxpY2VuY2VQcm9ibGVtRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0'@;
put 'ZUJ5VXJsKGEpfXBhcnNlQ29tcHV0ZUFwaShhKXtyZXR1cm4gdm9pZCAwPT09YXx8InVuZGVmaW5lZCI9PT1hfHwibnVsbCI9PT1hP251bGw6InRydWUiPT09YXx8ITF9c3Vic2NyaWJlVG9EZW1vTGltaXRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uRGVtb0xpbWl0TW9kYWxTaG93LnN1'@;
put 'YnNjcmliZShhPT57dGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITAsZmVhdHVyZU5hbWU6YX19KX1zdWJzY3JpYmVUb0xpY2Vuc2VFdmVudHMoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIuc3Vic2NyaWJlKGE9Pnt0aGlzLmZyZWVUaWVyQmFubmVyPWF9KSx0aGlzLmxp'@;
put 'Y2VuY2VTZXJ2aWNlLmxpY2Vuc2VFeHBpcmVzSW5EYXlzLnN1YnNjcmliZShhPT57YSYmYTw9MTQmJih0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9YSl9KSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwT3ZlckNhcGFjaXR5LnN1YnNjcmliZShhPT57dGhpcy5hcHBPdmVyQ2FwYWNpdHk9YX0p'@;
put 'fXN1YnNjcmliZVRvQXBwQWN0aXZlKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwQWN0aXZlPWF9KX1zdWJzY3JpYmVUb1Nob3dBYm9ydE1vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaG93QWJvcnRNb2RhbC5zdWJzY3JpYmUo'@;
put 'YT0+e2EuaWQ9dGhpcy5zYXNqc0Fib3J0cy5sZW5ndGgrMSx0aGlzLnNhc2pzQWJvcnRzLnB1c2goYSksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSl9c3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57'@;
put 'dGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMH0pfXN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uUmVxdWVzdHNNb2RhbE9wZW4uc3Vic2NyaWJlKGE9Pnt0aGlzLnJlcXVlc3RzTW9kYWw9ITB9KX1jbG9zZUFib3J0TW9kYWwoYSl7bGV0IGQ9dGhpcy5zYXNq'@;
put 'c0Fib3J0cy5maW5kSW5kZXgoaD0+aC5pZD09PWEpO3RoaXMuc2FzanNBYm9ydHMuc3BsaWNlKGQsMSl9dG9nZ2xlU2lkZWJhcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZVNpZGViYXIoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfW9wZW5M'@;
put 'aWNlbmNpbmdQYWdlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy91cGRhdGUiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVXgpLHR0KEMwKSx0dChEcyksdHQoV2wpLHR0KEpkKSx0dCh2bCksdHQoZTgpLHR0KFVh'@;
put 'KSx0dChOaSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJteS1hcHAiXV0sZGVjbHM6MjksdmFyczoxNyxjb25zdHM6W1sxLCJtYWluLWNvbnRhaW5lciJdLFs0LCJuZ0lmIl0sWzEsImFwcC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImN1cnNvci1w'@;
put 'b2ludGVyIHNlbGVjdC1ub25lIG1sLTEwIGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJsb2dvIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaHJlZiIsIiMiLCJjbGFz'@;
put 'cyIsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsIm5hdi10ZXh0Il0sWzEsImRyb3Bkb3duIl0sWyJjbGFzcyIsInN1Ym5hdiIsNCwibmdJZiJdLFszLCJvcGVuZWQiLCJvcGVuZWRDaGFuZ2UiXSxbMywiZGF0YSIsImZvcmNlUmVs'@;
put 'b2FkIiwib25Db25maXJtTW9kYWxDbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEs'@;
put 'Im1vZGFsLXRpdGxlIl0sWyJzaXplIiwiMjAiLCJzaGFwZSIsImxvY2siXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJhcHAtbG9hZGluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydCBhbGVydC1hcHAtbGV2ZWwgYWxlcnQtd2FybmluZyIsImlkIiwiZGVtby1iYW5uZXIiLCJyb2xl'@;
put 'IiwiYWxlcnQiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LWRhbmdlciIsImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDQsIm5nSWYiXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDEsImFsZXJ0IiwiYWxlcnQtYXBw'@;
put 'LWxldmVsIiwiYWxlcnQtd2FybmluZyJdLFsxLCJhbGVydC1pdGVtcyJdLFsxLCJhbGVydC1pdGVtIiwic3RhdGljIl0sWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwxLCJtdC0yIl0sWzEsImFsZXJ0LXRleHQiXSxbImNsYXNzZXMiLCJjb2xv'@;
put 'ci13aGl0ZSJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJ1cGRhdGUta2V5Il0sWzEsInVwZGF0ZS1rZXkiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDEsImFsZXJ0IiwiYWxlcnQtYXBwLWxldmVs'@;
put 'IiwiYWxlcnQtZGFuZ2VyIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLCJjbGFzcyIsInVwZGF0ZS1rZXkiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImN1cnNvci1wb2ludGVyIiwic2VsZWN0LW5vbmUiLCJtbC0xMCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNv'@;
put 'bnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbInNpemUiLCIyNCIsInNoYXBlIiwidHJlZS12aWV3Il0sWyJocmVmIiwiIyIsMSwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9h'@;
put 'cHAvZGMvc2VydmljZXMvd2ViL2ltYWdlcy9kYy1sb2dvLnN2ZyIsMSwid2l0aG91dC10ZXh0IiwiZC1ibG9jayIsImQtbWQtbm9uZSJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIs'@;
put 'MSwid2l0aC10ZXh0IiwiZC1ub25lIiwiZC1tZC1ibG9jayJdLFsxLCJjbHItaWNvbiIsImhlYWRlci1sb2dvIiwibWwtMTAiXSxbMSwiaGVhZGVyLW5hdiIsImQtZmxleCIsImQtc20tbm9uZSJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsInRvZ2dsZSBzZXR0aW5n'@;
put 'cyBtZW51IiwxLCJuYXYtaWNvbiIsImNvbG9yLXdoaXRlLWkiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJoZWFkZXItbmF2IiwiZC1ub25lIiwiZC1zbS1mbGV4Il0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCJuYXYtbGluayIsIm5h'@;
put 'di10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsImN1cnNvci1wb2ludGVyIiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93'@;
put 'bkl0ZW0iLCIiLDMsInJvdXRlckxpbmsiXSxbMSwic3VibmF2Il0sWzEsIm5hdiJdLFsxLCJuYXYtaXRlbSJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENsaWNrIl0sWzEsImFwcC1sb2FkaW5nIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJs'@;
put 'aWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9pbWFnZXMvZGF0YWNvbnRyb2xsZXIuc3ZnIiwxLCJsb2FkaW5nLWxvZ28iXSxbImNsYXNzIiwic2xpZGVyIiw0LCJuZ0lmIl0sWzEsInNsaWRlciJdLFsxLCJsaW5lIl0sWzEsInN1YmxpbmUiLCJpbmMiXSxbMSwic3VibGluZSIsImRlYyJdXSx0ZW1w'@;
put 'bGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCksUWUoMSxSU2UsNCwzLCJuZy1jb250YWluZXIiLDEpLG1lKDIsImhlYWRlciIsMiksUWUoMyxPU2UsMiwwLCJkaXYiLDMpLG1lKDQsImRpdiIsNCksUWUoNSxGU2UsMywyLCJhIiw1KSxRZSg2LEhTZSwyLDAsImEiLDEpLHll'@;
put 'KCksUWUoNyxWU2UsMTMsMTAsIm5nLWNvbnRhaW5lciIsMSksbWUoOCwiZGl2Iiw2KSg5LCJkaXYiLDcpLHF0KDEwLCJhcHAtbG9hZGluZy1pbmRpY2F0b3IiKSx5ZSgpLG1lKDExLCJkaXYiLDgpLHF0KDEyLCJhcHAtdXNlci1uYXYtZHJvcGRvd24iKSx5ZSgpKCkoKSxRZSgxMyx6U2UsMTEs'@;
put 'OCwibmF2Iiw5KSxRZSgxNCxVU2UsMSwwLCJhcHAtYWxlcnRzIiwxKSxtZSgxNSwiYXBwLXJlcXVlc3RzLW1vZGFsIiwxMCkseHQoIm9wZW5lZENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucmVxdWVzdHNNb2RhbD1mfSkseWUoKSxRZSgxNixaU2UsMSwwLCJyb3V0ZXItb3V0bGV0Iiwx'@;
put 'KSxxdCgxNywiYXBwLWxvZ2luIiksUWUoMTgsWVNlLDEsMCwiYXBwLWFsZXJ0cyIsMSksUWUoMTksV1NlLDEsMiwiYXBwLWluZm8tbW9kYWwiLDExKSxtZSgyMCwiY2xyLW1vZGFsIiwxMikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZGVtb0xpbWl0Tm90'@;
put 'aWNlLm9wZW49Zn0pLG1lKDIxLCJoMyIsMTMpLE5lKDIyKSxxdCgyMywiY2xyLWljb24iLDE0KSx5ZSgpLG1lKDI0LCJkaXYiLDE1KSxOZSgyNSwiIENvbnRhY3QgIikscXQoMjYsImNvbnRhY3QtbGluayIpLE5lKDI3KSx5ZSgpKCkoKSxRZSgyOCwkU2UsMywxLCJkaXYiLDE2KSksMiZhJiYo'@;
put 'Q2UoMSksUmUoIm5nSWYiLCFkLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxDZSgyKSxSZSgibmdJZiIsZC5pc01haW5Sb3V0ZSgidmlldyIpfHxkLmlzTWFpblJvdXRlKCJob21lIikmJiFkLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxDZSgyKSxSZSgibmdJ'@;
put 'ZiIsIWQucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLENlKDEpLFJlKCJuZ0lmIixkLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxDZSgxKSxSZSgibmdJZiIsIWQucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFkLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vu'@;
put 'c2luZyIpKSxDZSg2KSxSZSgibmdJZiIsZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQiKXx8ZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIil8fGQucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxDZSgxKSxSZSgibmdJZiIsIWQuZXJyVG9wKSxDZSgxKSxSZSgi'@;
put 'b3BlbmVkIixkLnJlcXVlc3RzTW9kYWwpLENlKDEpLFJlKCJuZ0lmIixkLnN0YXJ0dXBEYXRhTG9hZGVkKSxDZSgyKSxSZSgibmdJZiIsZC5lcnJUb3ApLENlKDEpLFJlKCJuZ0Zvck9mIixkLnNhc2pzQWJvcnRzKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLmRlbW9MaW1pdE5vdGljZS5v'@;
put 'cGVuKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLENlKDIpLGdyKCIgTG9ja2VkIEZlYXR1cmUgKCIsZC5kZW1vTGltaXROb3RpY2UuZmVhdHVyZU5hbWUsIikgIiksQ2UoNSksZ3IoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixkLnN5c3NpdGUudmFsdWUsIikg'@;
put 'dG8gYWN0aXZhdGUhICIpLENlKDEpLFJlKCJuZ0lmIiwhZC5zdGFydHVwRGF0YUxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGZwLEJ1LEdfLFJDZSxPQ2UsekNlLFlDZSxqRSxOYixrYSxvdSxzdSxjMixOZixhZyxsZyxLOCxZYixtU2UseFNlXSxzdHlsZXM6WyJhcHAtcmVxdWVzdHMt'@;
put 'bW9kYWxbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MTAwMDB9aGVhZGVyLmFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnQ7Y29sb3I6I2ZmZn0ubG9nb1tfbmdjb250ZW50LSVDT01QJV0gICBpbWcud2l0aG91dC10ZXh0W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4fS5sb2dvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGltZy53aXRoLXRleHRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIxMHB4fS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7YmFja2dyb3Vu'@;
put 'ZDp0cmFuc3BhcmVudDtib3JkZXI6MDttYXJnaW4tbGVmdDoxMHB4fS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO2hl'@;
put 'aWdodDoxMDB2aCFpbXBvcnRhbnQ7d2lkdGg6MTAwdnchaW1wb3J0YW50O3otaW5kZXg6MTA1O2JhY2tncm91bmQ6cmdiYSgzMywzMywzMywuNSl9LmRlbW8tZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV17Zmxl'@;
put 'eC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjMwcHg7ei1pbmRleDoxMTA7YmFja2dyb3VuZDojMzE0MzUxfS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgLmV4'@;
put 'cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwO2ZvbnQtc2l6ZToxNnB4fS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtbm90aWNlW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5tYWlsdG9bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM4ZGM1M2V9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC51cGRhdGUta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7'@;
put 'cGFkZGluZzowIDEwcHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xNDkwMTk2MDc4KX0uYWxlcnQtaWNvbi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5uYXYtdGV4dFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjIwcHh9LnNpZGVi'@;
put 'YXItdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmctbGVmdDoxMHB4fS5zaWRlYmFyLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBv'@;
put 'aW50ZXI7d2lkdGg6MzBweDtoZWlnaHQ6MzBweH1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlci1hY3Rpb25zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246dW5zZXR9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmFmYWZhO29wYWNpdHk6Ljk7bGluZS1oZWlnaHQ6MS40NXJlbX1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtb'@;
put 'X25nY29udGVudC0lQ09NUCVdOmhvdmVye2JveC1zaGFkb3c6aW5zZXQgMCAtM3B4IDAgdHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4ycyBlYXNlLWlufWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdj'@;
put 'b250ZW50LSVDT01QJV06aG92ZXJ7Y29sb3I6I2ZhZmFmYTtvcGFjaXR5OjF9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojNjE3MTdEO29wYWNpdHk6MTti'@;
put 'b3gtc2hhZG93Omluc2V0IDAgLTNweCB0cmFuc3BhcmVudH1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWl0ZW1bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoxcmVtfS5ub3RmW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNr'@;
put 'Z3JvdW5kOiMxNmE1N2E7Y29sb3I6I2ZmZmNmYztmb250LXNpemU6MTJweH0uYnRuLmJ0bi1zdWNjZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzYyYTQyMDtiYWNrZ3JvdW5kLWNvbG9yOiMxNmE1N2EhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmJ0bi5idG4tc3VjY2Vzc1tf'@;
put 'bmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmFkZDM5O2NvbG9yOiNmZmZ9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVD'@;
put 'T01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01Q'@;
put 'JV17bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjByZW0gMXJlbSAxcmVtfS5j'@;
put 'b250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDowIWltcG9ydGFudH0ubmF2QmFyUmVzcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDojNDk1QTY3O2NvbG9yOiNmZmZ9QG1lZGlhIHNjcmVl'@;
put 'biBhbmQgKG1heC13aWR0aDogNzY4cHgpey5uYXZCYXJSZXNwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YmFja2dyb3VuZDojNDk1QTY3O2NvbG9yOiNmZmZ9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5z'@;
put 'dWItbmF2LmNsci1uYXYtbGV2ZWwtMVtfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTJbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTFbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtb'@;
put 'X25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAuNXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn0uY2FyZC1ibG9j'@;
put 'a1tfbmdjb250ZW50LSVDT01QJV0sIC5jYXJkLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDAgMH0ubWFpbi1jb250YWluZXJbX25nY29udGVudC1jMF1bX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MHJlbX19ICAuaHRJbnZhbGlke2JhY2tncm91bmQ6YmxhY2shaW1wb3J0YW50fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsgIGgye2ZvbnQtc2l6'@;
put 'ZTouN3JlbSFpbXBvcnRhbnR9ICBoM3tmb250LXNpemU6LjdyZW19fSAgLm5hdi1saW5re3BhZGRpbmc6MHJlbSAxcmVtfSAgLmJ0bi1wcmltYXJ5IC5idG4sICAgLmJ0bi5idG4tcHJpbWFyeXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Y29sb3I6I2Zm'@;
put 'Zn0gIC5idG57Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTtib3JkZXI6MXB4IHNvbGlkO21pbi13aWR0aDozcmVtO21heC13aWR0aDoxNXJlbTt3aGl0ZS1zcGFjZTpub3dy'@;
put 'YXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsaW5lLWhlaWdodDoxLjVyZW07bGV0dGVyLXNwYWNpbmc6LjEyZW07Zm9udC1zaXplOi41cmVtO2Zv'@;
put 'bnQtd2VpZ2h0OjUwMDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbTtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMTQzNTF9ICAuYnRuLmJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6'@;
put 'dHJhbnNwYXJlbnQ7Y29sb3I6IzMxNDM1MX0gIC5idG4uYnRuLW91dGxpbmU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojNDk1YTY3O2NvbG9yOiNmZmZ9ICAuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWVhNzFm'@;
put 'O2NvbG9yOiNmZmY3Zjc7Ym9yZGVyLWNvbG9yOiM5YTk2OTZ9ICAuaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLmlucHV0cyB0ZXh0YXJlYXtmb250LXNpemU6MTNwdDtib3JkZXI6MnB4IHNvbGlkICM0ODU5Njc7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Ym94'@;
put 'LXNoYWRvdzpub25lO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjAgMCAwIDE0cHg7cGFkZGluZzo3cHQ7d2lkdGg6MjkwcHh9ICAuaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0O3RvcDo1MHB4'@;
put 'O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyLmFjdGl2ZXtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMjBweDt3aWR0aDozNTBweH0gIC5oYW5kc29udGFibGV7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1y'@;
put 'YWRpdXM6M3B4fSAgLmhhbmRzb250YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9ICAuaHRfY2xvbmVfbGVmdCB0aHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9ICAuaHRfY2xvbmVfdG9wIHRoe2JvcmRlci10b3A6MXB4IHNv'@;
put 'bGlkICNjY2M7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9ICAuaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIHRoe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30gIC5odF9tYXN0ZXIgdHI6bnRoLW9mLXR5cGUob2RkKT50ZHtiYWNr'@;
put 'Z3JvdW5kLWNvbG9yOiNmM2YzZjM7Ym9yZGVyOjFweCBzb2xpZCByZ2IoMTk3LDE5NywxOTcpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYigyMzYsMjM1LDIzNSl9ICAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBlKDJuKT50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBz'@;
put 'b2xpZCByZ2IoMTk3LDE5NywxOTcpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYigyMzYsMjM1LDIzNSl9ICAud3RCb3JkZXJ7YmFja2dyb3VuZC1jb2xvcjojNDk1YTY3IWltcG9ydGFudH0gIC5oYW5kc29udGFibGUgLmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7cGFk'@;
put 'ZGluZzowIWltcG9ydGFudDttYXJnaW46MDtib3JkZXItYm90dG9tOjNweCBzb2xpZCAjZDZkM2QzfSAgLmNvbnRlbnQtY29udGFpbmVye2JhY2tncm91bmQ6I0Y1RjZGRn0gIC5jYXJke2JveC1zaGFkb3c6MCAuMTI1cmVtICNkN2Q3ZDc7Ym9yZGVyLXJhZGl1czowcmVtO2JvcmRlcjoxcHgg'@;
put 'c29saWQgdHJhbnNwYXJlbnR9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTtiYWNrZ3JvdW5k'@;
put 'LWNvbG9yOiNmZmY7Y29sb3I6IzU2NTY1NjttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fSAgLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3QsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlk'@;
put 'LWZvb3R7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2hlaWdodDoxLjVyZW07cGFkZGluZzowIC41cmVtO2xpbmUtaGVpZ2h0OmNhbGMoMS41cmVtIC0gM3B4KTtmb250LXNpemU6LjQ1ODMzcmVtO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjO2JvcmRl'@;
put 'ci1yYWRpdXM6MH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkLWZvb3Rlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxNXB4O3RvcDoycHh9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhl'@;
put 'YWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfSAgLmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21hcmdpbi10b3A6LjA4'@;
put 'MzMzM3JlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JhY2tncm91bmQ6I2Y1ZjZmZjtwYWRkaW5nOi41cmVtIDA7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVt'@;
put 'O2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9ICAudGFibGV7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNTY1'@;
put 'NjU2O21hcmdpbjowO21hcmdpbi10b3A6MXJlbTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfSAgLnRhYmxlIHRoe2ZvbnQtc2l6ZTouNDU4MzNyZW07Zm9udC13ZWlnaHQ6NjAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2JhY2tncm91bmQtY29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjpib3R0'@;
put 'b207Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYzt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9ICAubW9kYWwtaGVhZGVye2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzowIDAgLjVyZW07bWFyZ2luLWJvdHRvbToxcmVtfSAgLm1haW4tY29udGFpbmVyIC5jb250'@;
put 'ZW50LWNvbnRhaW5lcnttaW4taGVpZ2h0OjBweDtwb3NpdGlvbjpyZWxhdGl2ZX0uYXBwLWxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmxvYWRpbmctbG9nb1tfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9Il19KSxjfSkoKTtmdW5jdGlvbiBwZWUo'@;
put 'Yyl7cmV0dXJuIG5ldyBBcigzZTMsITEpfWZ1bmN0aW9uIEZwKGMpe3N3aXRjaChjLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgb2I7Y2FzZSAxOnJldHVybiBjWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBWSyhjKX19ZnVuY3Rpb24gZ2VlKGMsbCxhPW5ldyBNYXAsZD1uZXcgTWFwKXtjb25z'@;
put 'dCBoPVtdLGY9W107bGV0IF89LTEsVD1udWxsO2lmKGwuZm9yRWFjaChXPT57Y29uc3QgaWU9Vy5nZXQoIm9mZnNldCIpLGdlPWllPT1fLHdlPWdlJiZUfHxuZXcgTWFwO1cuZm9yRWFjaCgoRWUsWmUpPT57bGV0IG90PVplLGV0PUVlO2lmKCJvZmZzZXQiIT09WmUpc3dpdGNoKG90PWMubm9y'@;
put 'bWFsaXplUHJvcGVydHlOYW1lKG90LGgpLGV0KXtjYXNlIiEiOmV0PWEuZ2V0KFplKTticmVhaztjYXNlIEFmOmV0PWQuZ2V0KFplKTticmVhaztkZWZhdWx0OmV0PWMubm9ybWFsaXplU3R5bGVWYWx1ZShaZSxvdCxldCxoKX13ZS5zZXQob3QsZXQpfSksZ2V8fGYucHVzaCh3ZSksVD13ZSxf'@;
put 'PWllfSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gX01lKGMpe3JldHVybiBuZXcgQXIoMzUwMiwhMSl9KCk7cmV0dXJuIGZ9ZnVuY3Rpb24gTEgoYyxsLGEsZCl7c3dpdGNoKGwpe2Nhc2Uic3RhcnQiOmMub25TdGFydCgoKT0+ZChhJiZSSChhLCJzdGFydCIsYykpKTticmVhaztjYXNlImRv'@;
put 'bmUiOmMub25Eb25lKCgpPT5kKGEmJlJIKGEsImRvbmUiLGMpKSk7YnJlYWs7Y2FzZSJkZXN0cm95IjpjLm9uRGVzdHJveSgoKT0+ZChhJiZSSChhLCJkZXN0cm95IixjKSkpfX1mdW5jdGlvbiBSSChjLGwsYSl7Y29uc3QgZj1PSChjLmVsZW1lbnQsYy50cmlnZ2VyTmFtZSxjLmZyb21TdGF0'@;
put 'ZSxjLnRvU3RhdGUsbHx8Yy5waGFzZU5hbWUsYS50b3RhbFRpbWU/P2MudG90YWxUaW1lLCEhYS5kaXNhYmxlZCksXz1jLl9kYXRhO3JldHVybiBudWxsIT1fJiYoZi5fZGF0YT1fKSxmfWZ1bmN0aW9uIE9IKGMsbCxhLGQsaD0iIixmPTAsXyl7cmV0dXJue2VsZW1lbnQ6Yyx0cmlnZ2VyTmFt'@;
put 'ZTpsLGZyb21TdGF0ZTphLHRvU3RhdGU6ZCxwaGFzZU5hbWU6aCx0b3RhbFRpbWU6ZixkaXNhYmxlZDohIV99fWZ1bmN0aW9uIG0xKGMsbCxhKXtsZXQgZD1jLmdldChsKTtyZXR1cm4gZHx8Yy5zZXQobCxkPWEpLGR9ZnVuY3Rpb24gbWVlKGMpe2NvbnN0IGw9Yy5pbmRleE9mKCI6Iik7cmV0'@;
put 'dXJuW2Muc3Vic3RyaW5nKDEsbCksYy5zbGljZShsKzEpXX1jb25zdCBETWU9KCgpPT50eXBlb2YgZG9jdW1lbnQ+InUiP251bGw6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSgpO2Z1bmN0aW9uIFBIKGMpe2NvbnN0IGw9Yy5wYXJlbnROb2RlfHxjLmhvc3R8fG51bGw7cmV0dXJuIGw9PT1E'@;
put 'TWU/bnVsbDpsfWxldCBoZz1udWxsLHZlZT0hMTtmdW5jdGlvbiBfZWUoYyxsKXtmb3IoO2w7KXtpZihsPT09YylyZXR1cm4hMDtsPVBIKGwpfXJldHVybiExfWZ1bmN0aW9uIGJlZShjLGwsYSl7aWYoYSlyZXR1cm4gQXJyYXkuZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwobCkpO2NvbnN0IGQ9'@;
put 'Yy5xdWVyeVNlbGVjdG9yKGwpO3JldHVybiBkP1tkXTpbXX1sZXQgeWVlPSgoKT0+e2NsYXNzIGN7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGEpe3JldHVybiBmdW5jdGlvbiBMTWUoYyl7aGd8fChoZz1mdW5jdGlvbiBSTWUoKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5i'@;
put 'b2R5Om51bGx9KCl8fHt9LHZlZT0hIWhnLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBoZy5zdHlsZSk7bGV0IGw9ITA7cmV0dXJuIGhnLnN0eWxlJiYhZnVuY3Rpb24gSU1lKGMpe3JldHVybiJlYmtpdCI9PWMuc3Vic3RyaW5nKDEsNil9KGMpJiYobD1jIGluIGhnLnN0eWxlLCFsJiZ2'@;
put 'ZWUmJihsPSJXZWJraXQiK2MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKWluIGhnLnN0eWxlKSksbH0oYSl9bWF0Y2hlc0VsZW1lbnQoYSxkKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQoYSxkKXtyZXR1cm4gX2VlKGEsZCl9Z2V0UGFyZW50RWxlbWVudChhKXtyZXR1cm4g'@;
put 'UEgoYSl9cXVlcnkoYSxkLGgpe3JldHVybiBiZWUoYSxkLGgpfWNvbXB1dGVTdHlsZShhLGQsaCl7cmV0dXJuIGh8fCIifWFuaW1hdGUoYSxkLGgsZixfLFQ9W10sVyl7cmV0dXJuIG5ldyBvYihoLGYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxGSD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5OT09QPW5ldyB5ZWUsY30pKCk7Y29uc3QgT01lPTFlMyxISD0ibmctZW50ZXIiLHpFPSJuZy1sZWF2ZSIsVUU9Im5nLXRyaWdnZXIiLFpFPSIubmct'@;
put 'dHJpZ2dlciIsQ2VlPSJuZy1hbmltYXRpbmciLE5IPSIubmctYW5pbWF0aW5nIjtmdW5jdGlvbiBCZihjKXtpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIGM7Y29uc3QgbD1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFsfHxsLmxlbmd0aDwyPzA6VkgocGFyc2VGbG9h'@;
put 'dChsWzFdKSxsWzJdKX1mdW5jdGlvbiBWSChjLGwpe3JldHVybiJzIj09PWw/YypPTWU6Y31mdW5jdGlvbiBZRShjLGwsYSl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIik/YzpmdW5jdGlvbiBGTWUoYyxsLGEpe2xldCBoLGY9MCxfPSIiO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'Yyl7Y29uc3QgVD1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09VClyZXR1cm4gbC5wdXNoKHBlZSgpKSx7ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiIn07aD1WSChw'@;
put 'YXJzZUZsb2F0KFRbMV0pLFRbMl0pO2NvbnN0IFc9VFszXTtudWxsIT1XJiYoZj1WSChwYXJzZUZsb2F0KFcpLFRbNF0pKTtjb25zdCBpZT1UWzVdO2llJiYoXz1pZSl9ZWxzZSBoPWM7aWYoIWEpe2xldCBUPSExLFc9bC5sZW5ndGg7aDwwJiYobC5wdXNoKGZ1bmN0aW9uIEtTZSgpe3JldHVy'@;
put 'biBuZXcgQXIoMzEwMCwhMSl9KCkpLFQ9ITApLGY8MCYmKGwucHVzaChmdW5jdGlvbiBYU2UoKXtyZXR1cm4gbmV3IEFyKDMxMDEsITEpfSgpKSxUPSEwKSxUJiZsLnNwbGljZShXLDAscGVlKCkpfXJldHVybntkdXJhdGlvbjpoLGRlbGF5OmYsZWFzaW5nOl99fShjLGwsYSl9ZnVuY3Rpb24g'@;
put 'V2IoYyxsPXt9KXtyZXR1cm4gT2JqZWN0LmtleXMoYykuZm9yRWFjaChhPT57bFthXT1jW2FdfSksbH1mdW5jdGlvbiBTZWUoYyl7Y29uc3QgbD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGE9PntsLnNldChhLGNbYV0pfSksbH1mdW5jdGlvbiBIcChjLGw9bmV3IE1h'@;
put 'cCxhKXtpZihhKWZvcihsZXRbZCxoXW9mIGEpbC5zZXQoZCxoKTtmb3IobGV0W2QsaF1vZiBjKWwuc2V0KGQsaCk7cmV0dXJuIGx9ZnVuY3Rpb24gaGgoYyxsLGEpe2wuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9akgoaCk7YSYmIWEuaGFzKGgpJiZhLnNldChoLGMuc3R5bGVbZl0pLGMuc3R5'@;
put 'bGVbZl09ZH0pfWZ1bmN0aW9uIGZnKGMsbCl7bC5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD1qSChkKTtjLnN0eWxlW2hdPSIifSl9ZnVuY3Rpb24gR2IoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/MT09Yy5sZW5ndGg/Y1swXTpOSyhjKTpjfWNvbnN0IEJIPW5ldyBSZWdFeHAoInt7XFxz'@;
put 'KiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIHhlZShjKXtsZXQgbD1bXTtpZigic3RyaW5nIj09dHlwZW9mIGMpe2xldCBhO2Zvcig7YT1CSC5leGVjKGMpOylsLnB1c2goYVsxXSk7QkgubGFzdEluZGV4PTB9cmV0dXJuIGx9ZnVuY3Rpb24gJGIoYyxsLGEpe2NvbnN0IGQ9Yy50b1N0cmlu'@;
put 'ZygpLGg9ZC5yZXBsYWNlKEJILChmLF8pPT57bGV0IFQ9bFtfXTtyZXR1cm4gbnVsbD09VCYmKGEucHVzaChmdW5jdGlvbiBRU2UoYyl7cmV0dXJuIG5ldyBBcigzMDAzLCExKX0oKSksVD0iIiksVC50b1N0cmluZygpfSk7cmV0dXJuIGg9PWQ/YzpofWZ1bmN0aW9uIFdFKGMpe2NvbnN0IGw9'@;
put 'W107bGV0IGE9Yy5uZXh0KCk7Zm9yKDshYS5kb25lOylsLnB1c2goYS52YWx1ZSksYT1jLm5leHQoKTtyZXR1cm4gbH1jb25zdCBWTWU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIGpIKGMpe3JldHVybiBjLnJlcGxhY2UoVk1lLCguLi5sKT0+bFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlv'@;
put 'biB2MShjLGwsYSl7c3dpdGNoKGwudHlwZSl7Y2FzZSA3OnJldHVybiBjLnZpc2l0VHJpZ2dlcihsLGEpO2Nhc2UgMDpyZXR1cm4gYy52aXNpdFN0YXRlKGwsYSk7Y2FzZSAxOnJldHVybiBjLnZpc2l0VHJhbnNpdGlvbihsLGEpO2Nhc2UgMjpyZXR1cm4gYy52aXNpdFNlcXVlbmNlKGwsYSk7'@;
put 'Y2FzZSAzOnJldHVybiBjLnZpc2l0R3JvdXAobCxhKTtjYXNlIDQ6cmV0dXJuIGMudmlzaXRBbmltYXRlKGwsYSk7Y2FzZSA1OnJldHVybiBjLnZpc2l0S2V5ZnJhbWVzKGwsYSk7Y2FzZSA2OnJldHVybiBjLnZpc2l0U3R5bGUobCxhKTtjYXNlIDg6cmV0dXJuIGMudmlzaXRSZWZlcmVuY2Uo'@;
put 'bCxhKTtjYXNlIDk6cmV0dXJuIGMudmlzaXRBbmltYXRlQ2hpbGQobCxhKTtjYXNlIDEwOnJldHVybiBjLnZpc2l0QW5pbWF0ZVJlZihsLGEpO2Nhc2UgMTE6cmV0dXJuIGMudmlzaXRRdWVyeShsLGEpO2Nhc2UgMTI6cmV0dXJuIGMudmlzaXRTdGFnZ2VyKGwsYSk7ZGVmYXVsdDp0aHJvdyBm'@;
put 'dW5jdGlvbiBlTWUoYyl7cmV0dXJuIG5ldyBBcigzMDA0LCExKX0oKX19ZnVuY3Rpb24gRWVlKGMsbCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGMpW2xdfWNvbnN0IEdFPSIqIjtmdW5jdGlvbiB6TWUoYyxsKXtjb25zdCBhPVtdO3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9j'@;
put 'LnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChkPT5mdW5jdGlvbiBVTWUoYyxsLGEpe2lmKCI6Ij09Y1swXSl7Y29uc3QgVz1mdW5jdGlvbiBaTWUoYyxsKXtzd2l0Y2goYyl7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNl'@;
put 'IjppbmNyZW1lbnQiOnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPnBhcnNlRmxvYXQoYSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKTxwYXJzZUZsb2F0KGEpO2RlZmF1bHQ6cmV0dXJuIGwucHVzaChmdW5jdGlvbiBwTWUoYyl7cmV0dXJuIG5ldyBBcigz'@;
put 'MDE2LCExKX0oKSksIiogPT4gKiJ9fShjLGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBXKXJldHVybiB2b2lkIGwucHVzaChXKTtjPVd9Y29uc3QgZD1jLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1kfHxkLmxlbmd0aDw0KXJldHVy'@;
put 'biBhLnB1c2goZnVuY3Rpb24gZk1lKGMpe3JldHVybiBuZXcgQXIoMzAxNSwhMSl9KCkpLGw7Y29uc3QgaD1kWzFdLGY9ZFsyXSxfPWRbM107bC5wdXNoKGtlZShoLF8pKTsiPCI9PWZbMF0mJiEoaD09R0UmJl89PUdFKSYmbC5wdXNoKGtlZShfLGgpKX0oZCxhLGwpKTphLnB1c2goYyksYX1j'@;
put 'b25zdCAkRT1uZXcgU2V0KFsidHJ1ZSIsIjEiXSkscUU9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBrZWUoYyxsKXtjb25zdCBhPSRFLmhhcyhjKXx8cUUuaGFzKGMpLGQ9JEUuaGFzKGwpfHxxRS5oYXMobCk7cmV0dXJuKGgsZik9PntsZXQgXz1jPT1HRXx8Yz09aCxUPWw9PUdF'@;
put 'fHxsPT1mO3JldHVybiFfJiZhJiYiYm9vbGVhbiI9PXR5cGVvZiBoJiYoXz1oPyRFLmhhcyhjKTpxRS5oYXMoYykpLCFUJiZkJiYiYm9vbGVhbiI9PXR5cGVvZiBmJiYoVD1mPyRFLmhhcyhsKTpxRS5oYXMobCkpLF8mJlR9fWNvbnN0IFlNZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImci'@;
put 'KTtmdW5jdGlvbiB6SChjLGwsYSxkKXtyZXR1cm4gbmV3IFdNZShjKS5idWlsZChsLGEsZCl9Y2xhc3MgV01le2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RyaXZlcj1sfWJ1aWxkKGwsYSxkKXtjb25zdCBoPW5ldyBxTWUoYSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3Rh'@;
put 'dGUoaCksdjEodGhpcyxHYihsKSxoKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShsKXtsLmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLGwuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsbC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLGwuY3VycmVudFRpbWU9MH12aXNpdFRy'@;
put 'aWdnZXIobCxhKXtsZXQgZD1hLnF1ZXJ5Q291bnQ9MCxoPWEuZGVwQ291bnQ9MDtjb25zdCBmPVtdLF89W107cmV0dXJuIkAiPT1sLm5hbWUuY2hhckF0KDApJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIG5NZSgpe3JldHVybiBuZXcgQXIoMzAwNiwhMSl9KCkpLGwuZGVmaW5pdGlvbnMuZm9y'@;
put 'RWFjaChUPT57aWYodGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShhKSwwPT1ULnR5cGUpe2NvbnN0IFc9VCxpZT1XLm5hbWU7aWUudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZ2U9PntXLm5hbWU9Z2UsZi5wdXNoKHRoaXMudmlzaXRTdGF0ZShXLGEpKX0p'@;
put 'LFcubmFtZT1pZX1lbHNlIGlmKDE9PVQudHlwZSl7Y29uc3QgVz10aGlzLnZpc2l0VHJhbnNpdGlvbihULGEpO2QrPVcucXVlcnlDb3VudCxoKz1XLmRlcENvdW50LF8ucHVzaChXKX1lbHNlIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gck1lKCl7cmV0dXJuIG5ldyBBcigzMDA3LCExKX0oKSl9'@;
put 'KSx7dHlwZTo3LG5hbWU6bC5uYW1lLHN0YXRlczpmLHRyYW5zaXRpb25zOl8scXVlcnlDb3VudDpkLGRlcENvdW50Omgsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKGwsYSl7Y29uc3QgZD10aGlzLnZpc2l0U3R5bGUobC5zdHlsZXMsYSksaD1sLm9wdGlvbnMmJmwub3B0aW9ucy5wYXJhbXN8'@;
put 'fG51bGw7aWYoZC5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGY9bmV3IFNldCxfPWh8fHt9O2Quc3R5bGVzLmZvckVhY2goVD0+e1QgaW5zdGFuY2VvZiBNYXAmJlQuZm9yRWFjaChXPT57eGVlKFcpLmZvckVhY2goaWU9PntfLmhhc093blByb3BlcnR5KGllKXx8Zi5hZGQoaWUpfSl9'@;
put 'KX0pLGYuc2l6ZSYmKFdFKGYudmFsdWVzKCkpLGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gaU1lKGMsbCl7cmV0dXJuIG5ldyBBcigzMDA4LCExKX0oKSkpfXJldHVybnt0eXBlOjAsbmFtZTpsLm5hbWUsc3R5bGU6ZCxvcHRpb25zOmg/e3BhcmFtczpofTpudWxsfX12aXNpdFRyYW5zaXRpb24o'@;
put 'bCxhKXthLnF1ZXJ5Q291bnQ9MCxhLmRlcENvdW50PTA7Y29uc3QgZD12MSh0aGlzLEdiKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOnpNZShsLmV4cHIsYS5lcnJvcnMpLGFuaW1hdGlvbjpkLHF1ZXJ5Q291bnQ6YS5xdWVyeUNvdW50LGRlcENvdW50OmEuZGVwQ291'@;
put 'bnQsb3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKGwsYSl7cmV0dXJue3R5cGU6MixzdGVwczpsLnN0ZXBzLm1hcChkPT52MSh0aGlzLGQsYSkpLG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZTtsZXQgaD0wO2Nv'@;
put 'bnN0IGY9bC5zdGVwcy5tYXAoXz0+e2EuY3VycmVudFRpbWU9ZDtjb25zdCBUPXYxKHRoaXMsXyxhKTtyZXR1cm4gaD1NYXRoLm1heChoLGEuY3VycmVudFRpbWUpLFR9KTtyZXR1cm4gYS5jdXJyZW50VGltZT1oLHt0eXBlOjMsc3RlcHM6ZixvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0'@;
put 'QW5pbWF0ZShsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gWE1lKGMsbCl7aWYoYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gYztpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIFVIKFlFKGMsbCkuZHVyYXRpb24sMCwiIik7Y29uc3QgYT1jO2lmKGEuc3BsaXQoL1xzKy8pLnNv'@;
put 'bWUoZj0+InsiPT1mLmNoYXJBdCgwKSYmInsiPT1mLmNoYXJBdCgxKSkpe2NvbnN0IGY9VUgoMCwwLCIiKTtyZXR1cm4gZi5keW5hbWljPSEwLGYuc3RyVmFsdWU9YSxmfWNvbnN0IGg9WUUoYSxsKTtyZXR1cm4gVUgoaC5kdXJhdGlvbixoLmRlbGF5LGguZWFzaW5nKX0obC50aW1pbmdzLGEu'@;
put 'ZXJyb3JzKTthLmN1cnJlbnRBbmltYXRlVGltaW5ncz1kO2xldCBoLGY9bC5zdHlsZXM/bC5zdHlsZXM6X3Moe30pO2lmKDU9PWYudHlwZSloPXRoaXMudmlzaXRLZXlmcmFtZXMoZixhKTtlbHNle2xldCBfPWwuc3R5bGVzLFQ9ITE7aWYoIV8pe1Q9ITA7Y29uc3QgaWU9e307ZC5lYXNpbmcm'@;
put 'JihpZS5lYXNpbmc9ZC5lYXNpbmcpLF89X3MoaWUpfWEuY3VycmVudFRpbWUrPWQuZHVyYXRpb24rZC5kZWxheTtjb25zdCBXPXRoaXMudmlzaXRTdHlsZShfLGEpO1cuaXNFbXB0eVN0ZXA9VCxoPVd9cmV0dXJuIGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdz'@;
put 'OmQsc3R5bGU6aCxvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPXRoaXMuX21ha2VTdHlsZUFzdChsLGEpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGQsYSksZH1fbWFrZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1bXSxoPUFycmF5LmlzQXJyYXkobC5zdHlsZXMp'@;
put 'P2wuc3R5bGVzOltsLnN0eWxlc107Zm9yKGxldCBUIG9mIGgpInN0cmluZyI9PXR5cGVvZiBUP1Q9PT1BZj9kLnB1c2goVCk6YS5lcnJvcnMucHVzaChuZXcgQXIoMzAwMiwhMSkpOmQucHVzaChTZWUoVCkpO2xldCBmPSExLF89bnVsbDtyZXR1cm4gZC5mb3JFYWNoKFQ9PntpZihUIGluc3Rh'@;
put 'bmNlb2YgTWFwJiYoVC5oYXMoImVhc2luZyIpJiYoXz1ULmdldCgiZWFzaW5nIiksVC5kZWxldGUoImVhc2luZyIpKSwhZikpZm9yKGxldCBXIG9mIFQudmFsdWVzKCkpaWYoVy50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2Y9ITA7YnJlYWt9fSkse3R5cGU6NixzdHlsZXM6ZCxlYXNp'@;
put 'bmc6XyxvZmZzZXQ6bC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOmYsb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7bGV0IGg9YS5jdXJyZW50VGltZSxmPWEuY3VycmVudFRpbWU7ZCYmZj4wJiYoZi09ZC5k'@;
put 'dXJhdGlvbitkLmRlbGF5KSxsLnN0eWxlcy5mb3JFYWNoKF89Pnsic3RyaW5nIiE9dHlwZW9mIF8mJl8uZm9yRWFjaCgoVCxXKT0+e2NvbnN0IGllPWEuY29sbGVjdGVkU3R5bGVzLmdldChhLmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxnZT1pZS5nZXQoVyk7bGV0IHdlPSEwO2dlJiYoZiE9aCYm'@;
put 'Zj49Z2Uuc3RhcnRUaW1lJiZoPD1nZS5lbmRUaW1lJiYoYS5lcnJvcnMucHVzaChmdW5jdGlvbiBzTWUoYyxsLGEsZCxoKXtyZXR1cm4gbmV3IEFyKDMwMTAsITEpfSgpKSx3ZT0hMSksZj1nZS5zdGFydFRpbWUpLHdlJiZpZS5zZXQoVyx7c3RhcnRUaW1lOmYsZW5kVGltZTpofSksYS5vcHRp'@;
put 'b25zJiZmdW5jdGlvbiBOTWUoYyxsLGEpe2NvbnN0IGQ9bC5wYXJhbXN8fHt9LGg9eGVlKGMpO2gubGVuZ3RoJiZoLmZvckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZil8fGEucHVzaChmdW5jdGlvbiBKU2UoYyl7cmV0dXJuIG5ldyBBcigzMDAxLCExKX0oKSl9KX0oVCxhLm9wdGlvbnMs'@;
put 'YS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gYU1lKCl7cmV0dXJuIG5ldyBBcigzMDExLCExKX0oKSks'@;
put 'ZDtsZXQgZj0wO2NvbnN0IF89W107bGV0IFQ9ITEsVz0hMSxpZT0wO2NvbnN0IGdlPWwuc3RlcHMubWFwKGt0PT57Y29uc3QgU3Q9dGhpcy5fbWFrZVN0eWxlQXN0KGt0LGEpO2xldCBRdD1udWxsIT1TdC5vZmZzZXQ/U3Qub2Zmc2V0OmZ1bmN0aW9uIEtNZShjKXtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIGMpcmV0dXJuIG51bGw7bGV0IGw9bnVsbDtpZihBcnJheS5pc0FycmF5KGMpKWMuZm9yRWFjaChhPT57aWYoYSBpbnN0YW5jZW9mIE1hcCYmYS5oYXMoIm9mZnNldCIpKXtjb25zdCBkPWE7bD1wYXJzZUZsb2F0KGQuZ2V0KCJvZmZzZXQiKSksZC5kZWxldGUoIm9mZnNldCIpfX0pO2Vs'@;
put 'c2UgaWYoYyBpbnN0YW5jZW9mIE1hcCYmYy5oYXMoIm9mZnNldCIpKXtjb25zdCBhPWM7bD1wYXJzZUZsb2F0KGEuZ2V0KCJvZmZzZXQiKSksYS5kZWxldGUoIm9mZnNldCIpfXJldHVybiBsfShTdC5zdHlsZXMpLHJuPTA7cmV0dXJuIG51bGwhPVF0JiYoZisrLHJuPVN0Lm9mZnNldD1RdCks'@;
put 'Vz1XfHxybjwwfHxybj4xLFQ9VHx8cm48aWUsaWU9cm4sXy5wdXNoKHJuKSxTdH0pO1cmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gbE1lKCl7cmV0dXJuIG5ldyBBcigzMDEyLCExKX0oKSksVCYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBjTWUoKXtyZXR1cm4gbmV3IEFyKDMyMDAsITEpfSgp'@;
put 'KTtjb25zdCB3ZT1sLnN0ZXBzLmxlbmd0aDtsZXQgRWU9MDtmPjAmJmY8d2U/YS5lcnJvcnMucHVzaChmdW5jdGlvbiB1TWUoKXtyZXR1cm4gbmV3IEFyKDMyMDIsITEpfSgpKTowPT1mJiYoRWU9MS8od2UtMSkpO2NvbnN0IFplPXdlLTEsb3Q9YS5jdXJyZW50VGltZSxldD1hLmN1cnJlbnRB'@;
put 'bmltYXRlVGltaW5ncyx5dD1ldC5kdXJhdGlvbjtyZXR1cm4gZ2UuZm9yRWFjaCgoa3QsU3QpPT57Y29uc3QgUXQ9RWU+MD9TdD09WmU/MTpFZSpTdDpfW1N0XSxybj1RdCp5dDthLmN1cnJlbnRUaW1lPW90K2V0LmRlbGF5K3JuLGV0LmR1cmF0aW9uPXJuLHRoaXMuX3ZhbGlkYXRlU3R5bGVB'@;
put 'c3Qoa3QsYSksa3Qub2Zmc2V0PVF0LGQuc3R5bGVzLnB1c2goa3QpfSksZH12aXNpdFJlZmVyZW5jZShsLGEpe3JldHVybnt0eXBlOjgsYW5pbWF0aW9uOnYxKHRoaXMsR2IobC5hbmltYXRpb24pLGEpLG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtyZXR1'@;
put 'cm4gYS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYobCxhKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixhKSxvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0UXVlcnkobCxh'@;
put 'KXtjb25zdCBkPWEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsaD1sLm9wdGlvbnN8fHt9O2EucXVlcnlDb3VudCsrLGEuY3VycmVudFF1ZXJ5PWw7Y29uc3RbZixfXT1mdW5jdGlvbiBHTWUoYyl7Y29uc3QgbD0hIWMuc3BsaXQoL1xzKixccyovKS5maW5kKGE9PiI6c2VsZiI9PWEpO3JldHVybiBs'@;
put 'JiYoYz1jLnJlcGxhY2UoWU1lLCIiKSksYz1jLnJlcGxhY2UoL0BcKi9nLFpFKS5yZXBsYWNlKC9AXHcrL2csYT0+WkUrIi0iK2Euc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxOSCksW2MsbF19KGwuc2VsZWN0b3IpO2EuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZC5sZW5ndGg/ZCsi'@;
put 'ICIrZjpmLG0xKGEuY29sbGVjdGVkU3R5bGVzLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7Y29uc3QgVD12MSh0aGlzLEdiKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm4gYS5jdXJyZW50UXVlcnk9bnVsbCxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWQse3R5cGU6MTEsc2VsZWN0b3I6'@;
put 'ZixsaW1pdDpoLmxpbWl0fHwwLG9wdGlvbmFsOiEhaC5vcHRpb25hbCxpbmNsdWRlU2VsZjpfLGFuaW1hdGlvbjpULG9yaWdpbmFsU2VsZWN0b3I6bC5zZWxlY3RvcixvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcihsLGEpe2EuY3VycmVudFF1ZXJ5fHxhLmVycm9ycy5wdXNo'@;
put 'KGZ1bmN0aW9uIGRNZSgpe3JldHVybiBuZXcgQXIoMzAxMywhMSl9KCkpO2NvbnN0IGQ9ImZ1bGwiPT09bC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06WUUobC50aW1pbmdzLGEuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246djEodGhpcyxH'@;
put 'YihsLmFuaW1hdGlvbiksYSksdGltaW5nczpkLG9wdGlvbnM6bnVsbH19fWNsYXNzIHFNZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVycm9ycz1sLHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVs'@;
put 'bCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnVuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5k'@;
put 'PW5ldyBTZXR9fWZ1bmN0aW9uIHBnKGMpe3JldHVybiBjPyhjPVdiKGMpKS5wYXJhbXMmJihjLnBhcmFtcz1mdW5jdGlvbiAkTWUoYyl7cmV0dXJuIGM/V2IoYyk6bnVsbH0oYy5wYXJhbXMpKTpjPXt9LGN9ZnVuY3Rpb24gVUgoYyxsLGEpe3JldHVybntkdXJhdGlvbjpjLGRlbGF5OmwsZWFz'@;
put 'aW5nOmF9fWZ1bmN0aW9uIFpIKGMsbCxhLGQsaCxmLF89bnVsbCxUPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6YyxrZXlmcmFtZXM6bCxwcmVTdHlsZVByb3BzOmEscG9zdFN0eWxlUHJvcHM6ZCxkdXJhdGlvbjpoLGRlbGF5OmYsdG90YWxUaW1lOmgrZixlYXNpbmc6XyxzdWJUaW1lbGlu'@;
put 'ZTpUfX1jbGFzcyBLRXtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldChsKXtyZXR1cm4gdGhpcy5fbWFwLmdldChsKXx8W119YXBwZW5kKGwsYSl7bGV0IGQ9dGhpcy5fbWFwLmdldChsKTtkfHx0aGlzLl9tYXAuc2V0KGwsZD1bXSksZC5wdXNoKC4uLmEpfWhhcyhsKXtyZXR1'@;
put 'cm4gdGhpcy5fbWFwLmhhcyhsKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX1jb25zdCBleGU9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLG54ZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gWUgoYyxsLGEsZCxoLGY9bmV3IE1hcCxfPW5ldyBNYXAsVCxXLGllPVtdKXty'@;
put 'ZXR1cm4obmV3IHJ4ZSkuYnVpbGRLZXlmcmFtZXMoYyxsLGEsZCxoLGYsXyxULFcsaWUpfWNsYXNzIHJ4ZXtidWlsZEtleWZyYW1lcyhsLGEsZCxoLGYsXyxULFcsaWUsZ2U9W10pe2llPWllfHxuZXcgS0U7Y29uc3Qgd2U9bmV3IFdIKGwsYSxpZSxoLGYsZ2UsW10pO3dlLm9wdGlvbnM9Vztj'@;
put 'b25zdCBFZT1XLmRlbGF5P0JmKFcuZGVsYXkpOjA7d2UuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAoRWUpLHdlLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW19dLG51bGwsd2UuZXJyb3JzLFcpLHYxKHRoaXMsZCx3ZSk7Y29uc3QgWmU9d2UudGltZWxpbmVzLmZpbHRlcihvdD0+'@;
put 'b3QuY29udGFpbnNBbmltYXRpb24oKSk7aWYoWmUubGVuZ3RoJiZULnNpemUpe2xldCBvdDtmb3IobGV0IGV0PVplLmxlbmd0aC0xO2V0Pj0wO2V0LS0pe2NvbnN0IHl0PVplW2V0XTtpZih5dC5lbGVtZW50PT09YSl7b3Q9eXQ7YnJlYWt9fW90JiYhb3QuYWxsb3dPbmx5VGltZWxpbmVTdHls'@;
put 'ZXMoKSYmb3Quc2V0U3R5bGVzKFtUXSxudWxsLHdlLmVycm9ycyxXKX1yZXR1cm4gWmUubGVuZ3RoP1plLm1hcChvdD0+b3QuYnVpbGRLZXlmcmFtZXMoKSk6W1pIKGEsW10sW10sW10sMCxFZSwiIiwhMSldfXZpc2l0VHJpZ2dlcihsLGEpe312aXNpdFN0YXRlKGwsYSl7fXZpc2l0VHJhbnNp'@;
put 'dGlvbihsLGEpe312aXNpdEFuaW1hdGVDaGlsZChsLGEpe2NvbnN0IGQ9YS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGEuZWxlbWVudCk7aWYoZCl7Y29uc3QgaD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKSxmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLF89dGhpcy5fdmlzaXRT'@;
put 'dWJJbnN0cnVjdGlvbnMoZCxoLGgub3B0aW9ucyk7ZiE9XyYmYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoXyl9YS5wcmV2aW91c05vZGU9bH12aXNpdEFuaW1hdGVSZWYobCxhKXtjb25zdCBkPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2QudHJhbnNmb3JtSW50b05ld1RpbWVs'@;
put 'aW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW2wub3B0aW9ucyxsLmFuaW1hdGlvbi5vcHRpb25zXSxhLGQpLHRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sZCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoZC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUp'@;
put 'LGEucHJldmlvdXNOb2RlPWx9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKGwsYSxkKXtmb3IoY29uc3QgaCBvZiBsKXtjb25zdCBmPWg/LmRlbGF5O2lmKGYpe2NvbnN0IF89Im51bWJlciI9PXR5cGVvZiBmP2Y6QmYoJGIoZixoPy5wYXJhbXM/P3t9LGEuZXJyb3JzKSk7ZC5kZWxheU5leHRT'@;
put 'dGVwKF8pfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGwsYSxkKXtsZXQgZj1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBfPW51bGwhPWQuZHVyYXRpb24/QmYoZC5kdXJhdGlvbik6bnVsbCxUPW51bGwhPWQuZGVsYXk/QmYoZC5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PV8m'@;
put 'JmwuZm9yRWFjaChXPT57Y29uc3QgaWU9YS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUoVyxfLFQpO2Y9TWF0aC5tYXgoZixpZS5kdXJhdGlvbitpZS5kZWxheSl9KSxmfXZpc2l0UmVmZXJlbmNlKGwsYSl7YS51cGRhdGVPcHRpb25zKGwub3B0aW9ucywhMCksdjEodGhpcyxsLmFuaW1h'@;
put 'dGlvbixhKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U2VxdWVuY2UobCxhKXtjb25zdCBkPWEuc3ViQ29udGV4dENvdW50O2xldCBoPWE7Y29uc3QgZj1sLm9wdGlvbnM7aWYoZiYmKGYucGFyYW1zfHxmLmRlbGF5KSYmKGg9YS5jcmVhdGVTdWJDb250ZXh0KGYpLGgudHJhbnNmb3JtSW50b05l'@;
put 'd1RpbWVsaW5lKCksbnVsbCE9Zi5kZWxheSkpezY9PWgucHJldmlvdXNOb2RlLnR5cGUmJihoLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxoLnByZXZpb3VzTm9kZT1YRSk7Y29uc3QgXz1CZihmLmRlbGF5KTtoLmRlbGF5TmV4dFN0ZXAoXyl9bC5zdGVwcy5sZW5n'@;
put 'dGgmJihsLnN0ZXBzLmZvckVhY2goXz0+djEodGhpcyxfLGgpKSxoLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxoLnN1YkNvbnRleHRDb3VudD5kJiZoLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0R3JvdXAobCxhKXtj'@;
put 'b25zdCBkPVtdO2xldCBoPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IGY9bC5vcHRpb25zJiZsLm9wdGlvbnMuZGVsYXk/QmYobC5vcHRpb25zLmRlbGF5KTowO2wuc3RlcHMuZm9yRWFjaChfPT57Y29uc3QgVD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKTtmJiZU'@;
put 'LmRlbGF5TmV4dFN0ZXAoZiksdjEodGhpcyxfLFQpLGg9TWF0aC5tYXgoaCxULmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZC5wdXNoKFQuY3VycmVudFRpbWVsaW5lKX0pLGQuZm9yRWFjaChfPT5hLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKF8p'@;
put 'KSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShoKSxhLnByZXZpb3VzTm9kZT1sfV92aXNpdFRpbWluZyhsLGEpe2lmKGwuZHluYW1pYyl7Y29uc3QgZD1sLnN0clZhbHVlO3JldHVybiBZRShhLnBhcmFtcz8kYihkLGEucGFyYW1zLGEuZXJyb3JzKTpkLGEuZXJyb3JzKX1yZXR1cm57ZHVy'@;
put 'YXRpb246bC5kdXJhdGlvbixkZWxheTpsLmRlbGF5LGVhc2luZzpsLmVhc2luZ319dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyhsLnRpbWluZ3MsYSksaD1hLmN1cnJlbnRUaW1lbGluZTtkLmRlbGF5JiYoYS5pbmNy'@;
put 'ZW1lbnRUaW1lKGQuZGVsYXkpLGguc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2NvbnN0IGY9bC5zdHlsZTs1PT1mLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpOihhLmluY3JlbWVudFRpbWUoZC5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGYsYSksaC5hcHBseVN0eWxlc1RvS2V5'@;
put 'ZnJhbWUoKSksYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLGg9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IWgmJmQuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZkLmZvcndh'@;
put 'cmRGcmFtZSgpO2NvbnN0IGY9aCYmaC5lYXNpbmd8fGwuZWFzaW5nO2wuaXNFbXB0eVN0ZXA/ZC5hcHBseUVtcHR5U3RlcChmKTpkLnNldFN0eWxlcyhsLnN0eWxlcyxmLGEuZXJyb3JzLGEub3B0aW9ucyksYS5wcmV2aW91c05vZGU9bH12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9YS5j'@;
put 'dXJyZW50QW5pbWF0ZVRpbWluZ3MsaD1hLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixmPWQuZHVyYXRpb24sVD1hLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7VC5lYXNpbmc9ZC5lYXNpbmcsbC5zdHlsZXMuZm9yRWFjaChXPT57VC5mb3J3YXJkVGltZSgoVy5vZmZzZXR8'@;
put 'fDApKmYpLFQuc2V0U3R5bGVzKFcuc3R5bGVzLFcuZWFzaW5nLGEuZXJyb3JzLGEub3B0aW9ucyksVC5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoVCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCtm'@;
put 'KSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGg9bC5vcHRpb25zfHx7fSxmPWguZGVsYXk/QmYoaC5kZWxheSk6MDtmJiYoNj09PWEucHJldmlvdXNOb2RlLnR5cGV8fDA9PWQmJmEuY3VycmVudFRpbWVsaW5l'@;
put 'Lmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSkmJihhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxhLnByZXZpb3VzTm9kZT1YRSk7bGV0IF89ZDtjb25zdCBUPWEuaW52b2tlUXVlcnkobC5zZWxlY3RvcixsLm9yaWdpbmFsU2VsZWN0b3IsbC5saW1pdCxsLmlu'@;
put 'Y2x1ZGVTZWxmLCEhaC5vcHRpb25hbCxhLmVycm9ycyk7YS5jdXJyZW50UXVlcnlUb3RhbD1ULmxlbmd0aDtsZXQgVz1udWxsO1QuZm9yRWFjaCgoaWUsZ2UpPT57YS5jdXJyZW50UXVlcnlJbmRleD1nZTtjb25zdCB3ZT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zLGllKTtmJiZ3ZS5k'@;
put 'ZWxheU5leHRTdGVwKGYpLGllPT09YS5lbGVtZW50JiYoVz13ZS5jdXJyZW50VGltZWxpbmUpLHYxKHRoaXMsbC5hbmltYXRpb24sd2UpLHdlLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxfPU1hdGgubWF4KF8sd2UuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1l'@;
put 'KX0pLGEuY3VycmVudFF1ZXJ5SW5kZXg9MCxhLmN1cnJlbnRRdWVyeVRvdGFsPTAsYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoXyksVyYmKGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoVyksYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50'@;
put 'U3R5bGVzKCkpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTdGFnZ2VyKGwsYSl7Y29uc3QgZD1hLnBhcmVudENvbnRleHQsaD1hLmN1cnJlbnRUaW1lbGluZSxmPWwudGltaW5ncyxfPU1hdGguYWJzKGYuZHVyYXRpb24pLFQ9XyooYS5jdXJyZW50UXVlcnlUb3RhbC0xKTtsZXQgVz1fKmEuY3Vy'@;
put 'cmVudFF1ZXJ5SW5kZXg7c3dpdGNoKGYuZHVyYXRpb248MD8icmV2ZXJzZSI6Zi5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6Vz1ULVc7YnJlYWs7Y2FzZSJmdWxsIjpXPWQuY3VycmVudFN0YWdnZXJUaW1lfWNvbnN0IGdlPWEuY3VycmVudFRpbWVsaW5lO1cmJmdlLmRlbGF5TmV4dFN0ZXAoVyk7'@;
put 'Y29uc3Qgd2U9Z2UuY3VycmVudFRpbWU7djEodGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3VzTm9kZT1sLGQuY3VycmVudFN0YWdnZXJUaW1lPWguY3VycmVudFRpbWUtd2UrKGguc3RhcnRUaW1lLWQuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fWNvbnN0IFhFPXt9O2NsYXNzIFdI'@;
put 'e2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdWJJbnN0cnVjdGlvbnM9ZCx0aGlzLl9lbnRlckNsYXNzTmFtZT1oLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWYsdGhpcy5lcnJvcnM9Xyx0aGlzLnRpbWVsaW5lcz1ULHRoaXMu'@;
put 'cGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9WEUsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlz'@;
put 'LmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPVd8fG5ldyBKRSh0aGlzLl9kcml2ZXIsYSwwKSxULnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKGwsYSl7aWYoIWwp'@;
put 'cmV0dXJuO2NvbnN0IGQ9bDtsZXQgaD10aGlzLm9wdGlvbnM7bnVsbCE9ZC5kdXJhdGlvbiYmKGguZHVyYXRpb249QmYoZC5kdXJhdGlvbikpLG51bGwhPWQuZGVsYXkmJihoLmRlbGF5PUJmKGQuZGVsYXkpKTtjb25zdCBmPWQucGFyYW1zO2lmKGYpe2xldCBfPWgucGFyYW1zO198fChfPXRo'@;
put 'aXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKGYpLmZvckVhY2goVD0+eyghYXx8IV8uaGFzT3duUHJvcGVydHkoVCkpJiYoX1tUXT0kYihmW1RdLF8sdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtjb25zdCBsPXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgYT10aGlz'@;
put 'Lm9wdGlvbnMucGFyYW1zO2lmKGEpe2NvbnN0IGQ9bC5wYXJhbXM9e307T2JqZWN0LmtleXMoYSkuZm9yRWFjaChoPT57ZFtoXT1hW2hdfSl9fXJldHVybiBsfWNyZWF0ZVN1YkNvbnRleHQobD1udWxsLGEsZCl7Y29uc3QgaD1hfHx0aGlzLmVsZW1lbnQsZj1uZXcgV0godGhpcy5fZHJpdmVy'@;
put 'LGgsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhoLGR8fDApKTtyZXR1cm4gZi5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05v'@;
put 'ZGUsZi5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsZi5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksZi51cGRhdGVPcHRpb25zKGwpLGYuY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxmLmN1cnJlbnRRdWVyeVRvdGFs'@;
put 'PXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsZi5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxmfXRyYW5zZm9ybUludG9OZXdUaW1lbGluZShsKXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9WEUsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxp'@;
put 'bmUuZm9yayh0aGlzLmVsZW1lbnQsbCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKGwsYSxkKXtjb25zdCBoPXtkdXJhdGlvbjphPz9sLmR1cmF0aW9uLGRlbGF5OnRoaXMu'@;
put 'Y3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhkPz8wKStsLmRlbGF5LGVhc2luZzoiIn0sZj1uZXcgaXhlKHRoaXMuX2RyaXZlcixsLmVsZW1lbnQsbC5rZXlmcmFtZXMsbC5wcmVTdHlsZVByb3BzLGwucG9zdFN0eWxlUHJvcHMsaCxsLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1'@;
put 'cm4gdGhpcy50aW1lbGluZXMucHVzaChmKSxofWluY3JlbWVudFRpbWUobCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rbCl9ZGVsYXlOZXh0U3RlcChsKXtsPjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0'@;
put 'ZXAobCl9aW52b2tlUXVlcnkobCxhLGQsaCxmLF8pe2xldCBUPVtdO2lmKGgmJlQucHVzaCh0aGlzLmVsZW1lbnQpLGwubGVuZ3RoPjApe2w9KGw9bC5yZXBsYWNlKGV4ZSwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKG54ZSwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xl'@;
put 'dCBpZT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LGwsMSE9ZCk7MCE9PWQmJihpZT1kPDA/aWUuc2xpY2UoaWUubGVuZ3RoK2QsaWUubGVuZ3RoKTppZS5zbGljZSgwLGQpKSxULnB1c2goLi4uaWUpfXJldHVybiFmJiYwPT1ULmxlbmd0aCYmXy5wdXNoKGZ1bmN0aW9uIGhNZShj'@;
put 'KXtyZXR1cm4gbmV3IEFyKDMwMTQsITEpfSgpKSxUfX1jbGFzcyBKRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN0YXJ0VGltZT1kLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1oLHRoaXMuZHVyYXRpb249MCx0aGlz'@;
put 'LmVhc2luZz1udWxsLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXM9bmV3IE1hcCx0aGlzLl9zdHlsZVN1bW1hcnk9bmV3IE1hcCx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPW5ldyBNYXAsdGhpcy5f'@;
put 'cGVuZGluZ1N0eWxlcz1uZXcgTWFwLHRoaXMuX2JhY2tGaWxsPW5ldyBNYXAsdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMu'@;
put 'X2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGlu'@;
put 'ZVN0eWxlc0xvb2t1cC5zZXQoYSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9Y29udGFpbnNBbmltYXRpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4hMTtjYXNlIDE6cmV0dXJuIHRoaXMuaGFzQ3VycmVudFN0'@;
put 'eWxlUHJvcGVydGllcygpO2RlZmF1bHQ6cmV0dXJuITB9fWhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEtleWZyYW1lLnNpemU+MH1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbn1kZWxheU5leHRTdGVw'@;
put 'KGwpe2NvbnN0IGE9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8YT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK2wpLGEmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1l'@;
put 'Kz1sfWZvcmsobCxhKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgSkUodGhpcy5fZHJpdmVyLGwsYXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUm'@;
put 'Jih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5f'@;
put 'a2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUobCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPWws'@;
put 'dGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKGwsYSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KGwse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTph'@;
put 'fSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKGwpe2wmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGwpO2ZvcihsZXRbYSxkXW9m'@;
put 'IHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChhLGR8fEFmKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsQWYpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKGwsYSxkLGgpe2EmJnRo'@;
put 'aXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGEpO2NvbnN0IGY9aCYmaC5wYXJhbXN8fHt9LF89ZnVuY3Rpb24gb3hlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2xldCBkO3JldHVybiBjLmZvckVhY2goaD0+e2lmKCIqIj09PWgpe2Q9ZHx8bC5rZXlzKCk7Zm9yKGxldCBmIG9mIGQp'@;
put 'YS5zZXQoZixBZil9ZWxzZSBIcChoLGEpfSksYX0obCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFtULFddb2YgXyl7Y29uc3QgaWU9JGIoVyxmLGQpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KFQsaWUpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKFQpfHx0aGlz'@;
put 'Ll9iYWNrRmlsbC5zZXQoVCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5nZXQoVCk/P0FmKSx0aGlzLl91cGRhdGVTdHlsZShULGllKX19YXBwbHlTdHlsZXNUb0tleWZyYW1lKCl7MCE9dGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplJiYodGhpcy5fcGVuZGluZ1N0eWxlcy5mb3JFYWNoKChs'@;
put 'LGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSksdGhpcy5fcGVuZGluZ1N0eWxlcy5jbGVhcigpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5oYXMoYSl8fHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQo'@;
put 'YSxsKX0pKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtmb3IobGV0W2wsYV1vZiB0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGwsYSksdGhpcy5fdXBkYXRlU3R5bGUobCxhKX1nZXRGaW5hbEtleWZyYW1lKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1l'@;
put 'cy5nZXQodGhpcy5kdXJhdGlvbil9Z2V0IHByb3BlcnRpZXMoKXtjb25zdCBsPVtdO2ZvcihsZXQgYSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpbC5wdXNoKGEpO3JldHVybiBsfW1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCl7bC5fc3R5bGVTdW1tYXJ5LmZvckVhY2goKGEsZCk9'@;
put 'Pntjb25zdCBoPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoZCk7KCFofHxhLnRpbWU+aC50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoZCxhLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtjb25zdCBsPW5ldyBTZXQsYT1uZXcgU2V0LGQ9MT09'@;
put 'PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgaD1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoVCxXKT0+e2NvbnN0IGllPUhwKFQsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7aWUuZm9yRWFjaCgoZ2Usd2UpPT57IiEiPT09Z2U/bC5hZGQod2UpOmdlPT09'@;
put 'QWYmJmEuYWRkKHdlKX0pLGR8fGllLnNldCgib2Zmc2V0IixXL3RoaXMuZHVyYXRpb24pLGgucHVzaChpZSl9KTtjb25zdCBmPWwuc2l6ZT9XRShsLnZhbHVlcygpKTpbXSxfPWEuc2l6ZT9XRShhLnZhbHVlcygpKTpbXTtpZihkKXtjb25zdCBUPWhbMF0sVz1uZXcgTWFwKFQpO1Quc2V0KCJv'@;
put 'ZmZzZXQiLDApLFcuc2V0KCJvZmZzZXQiLDEpLGg9W1QsV119cmV0dXJuIFpIKHRoaXMuZWxlbWVudCxoLGYsXyx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgaXhlIGV4dGVuZHMgSkV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVD0hMSl7c3Vw'@;
put 'ZXIobCxhLF8uZGVsYXkpLHRoaXMua2V5ZnJhbWVzPWQsdGhpcy5wcmVTdHlsZVByb3BzPWgsdGhpcy5wb3N0U3R5bGVQcm9wcz1mLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPVQsdGhpcy50aW1pbmdzPXtkdXJhdGlvbjpfLmR1cmF0aW9uLGRlbGF5Ol8uZGVsYXksZWFzaW5nOl8u'@;
put 'ZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCBsPXRoaXMua2V5ZnJhbWVzLHtkZWxheTphLGR1cmF0aW9uOmQsZWFzaW5nOmh9PXRoaXMudGltaW5ncztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdL'@;
put 'ZXlmcmFtZSYmYSl7Y29uc3QgZj1bXSxfPWQrYSxUPWEvXyxXPUhwKGxbMF0pO1cuc2V0KCJvZmZzZXQiLDApLGYucHVzaChXKTtjb25zdCBpZT1IcChsWzBdKTtpZS5zZXQoIm9mZnNldCIsRGVlKFQpKSxmLnB1c2goaWUpO2NvbnN0IGdlPWwubGVuZ3RoLTE7Zm9yKGxldCB3ZT0xO3dlPD1n'@;
put 'ZTt3ZSsrKXtsZXQgRWU9SHAobFt3ZV0pO2NvbnN0IFplPUVlLmdldCgib2Zmc2V0Iik7RWUuc2V0KCJvZmZzZXQiLERlZSgoYStaZSpkKS9fKSksZi5wdXNoKEVlKX1kPV8sYT0wLGg9IiIsbD1mfXJldHVybiBaSCh0aGlzLmVsZW1lbnQsbCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0'@;
put 'U3R5bGVQcm9wcyxkLGEsaCwhMCl9fWZ1bmN0aW9uIERlZShjLGw9Myl7Y29uc3QgYT1NYXRoLnBvdygxMCxsLTEpO3JldHVybiBNYXRoLnJvdW5kKGMqYSkvYX1jbGFzcyBHSHt9Y29uc3Qgc3hlPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4'@;
put 'V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFy'@;
put 'Z2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2'@;
put 'ZSJdKTtjbGFzcyBheGUgZXh0ZW5kcyBHSHtub3JtYWxpemVQcm9wZXJ0eU5hbWUobCxhKXtyZXR1cm4gakgobCl9bm9ybWFsaXplU3R5bGVWYWx1ZShsLGEsZCxoKXtsZXQgZj0iIjtjb25zdCBfPWQudG9TdHJpbmcoKS50cmltKCk7aWYoc3hlLmhhcyhhKSYmMCE9PWQmJiIwIiE9PWQpaWYo'@;
put 'Im51bWJlciI9PXR5cGVvZiBkKWY9InB4IjtlbHNle2NvbnN0IFQ9ZC5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO1QmJjA9PVRbMV0ubGVuZ3RoJiZoLnB1c2goZnVuY3Rpb24gdE1lKGMsbCl7cmV0dXJuIG5ldyBBcigzMDA1LCExKX0oKSl9cmV0dXJuIF8rZn19ZnVuY3Rpb24g'@;
put 'SWVlKGMsbCxhLGQsaCxmLF8sVCxXLGllLGdlLHdlLEVlKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6Yyx0cmlnZ2VyTmFtZTpsLGlzUmVtb3ZhbFRyYW5zaXRpb246aCxmcm9tU3RhdGU6YSxmcm9tU3R5bGVzOmYsdG9TdGF0ZTpkLHRvU3R5bGVzOl8sdGltZWxpbmVzOlQscXVlcmllZEVsZW1l'@;
put 'bnRzOlcscHJlU3R5bGVQcm9wczppZSxwb3N0U3R5bGVQcm9wczpnZSx0b3RhbFRpbWU6d2UsZXJyb3JzOkVlfX1jb25zdCAkSD17fTtjbGFzcyBMZWV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3RyaWdnZXJOYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9zdGF0ZVN0eWxlcz1kfW1hdGNoKGws'@;
put 'YSxkLGgpe3JldHVybiBmdW5jdGlvbiBseGUoYyxsLGEsZCxoKXtyZXR1cm4gYy5zb21lKGY9PmYobCxhLGQsaCkpfSh0aGlzLmFzdC5tYXRjaGVycyxsLGEsZCxoKX1idWlsZFN0eWxlcyhsLGEsZCl7bGV0IGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KCIqIik7cmV0dXJuIHZvaWQgMCE9PWwm'@;
put 'JihoPXRoaXMuX3N0YXRlU3R5bGVzLmdldChsPy50b1N0cmluZygpKXx8aCksaD9oLmJ1aWxkU3R5bGVzKGEsZCk6bmV3IE1hcH1idWlsZChsLGEsZCxoLGYsXyxULFcsaWUsZ2Upe2NvbnN0IHdlPVtdLEVlPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFyYW1zfHwkSCxv'@;
put 'dD10aGlzLmJ1aWxkU3R5bGVzKGQsVCYmVC5wYXJhbXN8fCRILHdlKSxldD1XJiZXLnBhcmFtc3x8JEgseXQ9dGhpcy5idWlsZFN0eWxlcyhoLGV0LHdlKSxrdD1uZXcgU2V0LFN0PW5ldyBNYXAsUXQ9bmV3IE1hcCxybj0idm9pZCI9PT1oLHZuPXtwYXJhbXM6Y3hlKGV0LEVlKSxkZWxheTp0'@;
put 'aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sTm49Z2U/W106WUgobCxhLHRoaXMuYXN0LmFuaW1hdGlvbixmLF8sb3QseXQsdm4saWUsd2UpO2xldCBjcj0wO2lmKE5uLmZvckVhY2goX2k9Pntjcj1NYXRoLm1heChfaS5kdXJhdGlvbitfaS5kZWxheSxjcil9KSx3ZS5sZW5ndGgpcmV0dXJuIEll'@;
put 'ZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxybixvdCx5dCxbXSxbXSxTdCxRdCxjcix3ZSk7Tm4uZm9yRWFjaChfaT0+e2NvbnN0IGxpPV9pLmVsZW1lbnQsbXI9bTEoU3QsbGksbmV3IFNldCk7X2kucHJlU3R5bGVQcm9wcy5mb3JFYWNoKFpyPT5tci5hZGQoWnIpKTtjb25zdCBFaT1tMShR'@;
put 'dCxsaSxuZXcgU2V0KTtfaS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKFpyPT5FaS5hZGQoWnIpKSxsaSE9PWEmJmt0LmFkZChsaSl9KTtjb25zdCBEcj1XRShrdC52YWx1ZXMoKSk7cmV0dXJuIEllZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxybixvdCx5dCxObixEcixTdCxRdCxjcil9fWZ1'@;
put 'bmN0aW9uIGN4ZShjLGwpe2NvbnN0IGE9V2IobCk7Zm9yKGNvbnN0IGQgaW4gYyljLmhhc093blByb3BlcnR5KGQpJiZudWxsIT1jW2RdJiYoYVtkXT1jW2RdKTtyZXR1cm4gYX1jbGFzcyB1eGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuc3R5bGVzPWwsdGhpcy5kZWZhdWx0UGFyYW1zPWEs'@;
put 'dGhpcy5ub3JtYWxpemVyPWR9YnVpbGRTdHlsZXMobCxhKXtjb25zdCBkPW5ldyBNYXAsaD1XYih0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGY9Pntjb25zdCBfPWxbZl07bnVsbCE9PV8mJihoW2ZdPV8pfSksdGhpcy5zdHlsZXMuc3R5bGVzLmZv'@;
put 'ckVhY2goZj0+eyJzdHJpbmciIT10eXBlb2YgZiYmZi5mb3JFYWNoKChfLFQpPT57XyYmKF89JGIoXyxoLGEpKTtjb25zdCBXPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoVCxhKTtfPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKFQsVyxfLGEpLGQu'@;
put 'c2V0KFQsXyl9KX0pLGR9fWNsYXNzIGh4ZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsYS5zdGF0ZXMuZm9yRWFjaChoPT57dGhpcy5zdGF0'@;
put 'ZXMuc2V0KGgubmFtZSxuZXcgdXhlKGguc3R5bGUsaC5vcHRpb25zJiZoLm9wdGlvbnMucGFyYW1zfHx7fSxkKSl9KSxSZWUodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksUmVlKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxhLnRyYW5zaXRpb25zLmZvckVhY2goaD0+e3RoaXMudHJhbnNpdGlv'@;
put 'bkZhY3Rvcmllcy5wdXNoKG5ldyBMZWUobCxoLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbiBmeGUoYyxsLGEpe3JldHVybiBuZXcgTGVlKGMse3R5cGU6MSxhbmltYXRpb246e3R5cGU6MixzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOlso'@;
put 'XyxUKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sbCl9KGwsdGhpcy5zdGF0ZXMpfWdldCBjb250YWluc1F1ZXJpZXMoKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfW1hdGNoVHJhbnNpdGlvbihsLGEsZCxoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9u'@;
put 'RmFjdG9yaWVzLmZpbmQoXz0+Xy5tYXRjaChsLGEsZCxoKSl8fG51bGx9bWF0Y2hTdHlsZXMobCxhLGQpe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyhsLGEsZCl9fWZ1bmN0aW9uIFJlZShjLGwsYSl7Yy5oYXMobCk/Yy5oYXMoYSl8fGMuc2V0KGEsYy5nZXQo'@;
put 'bCkpOmMuaGFzKGEpJiZjLnNldChsLGMuZ2V0KGEpKX1jb25zdCBweGU9bmV3IEtFO2NsYXNzIGd4ZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuX2RyaXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5fcGxheWVy'@;
put 'c0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIobCxhKXtjb25zdCBkPVtdLGY9ekgodGhpcy5fZHJpdmVyLGEsZCxbXSk7aWYoZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gYk1lKGMpe3JldHVybiBuZXcgQXIoMzUwMywhMSl9KCk7dGhpcy5fYW5pbWF0aW9ucy5zZXQobCxm'@;
put 'KX1fYnVpbGRQbGF5ZXIobCxhLGQpe2NvbnN0IGg9bC5lbGVtZW50LGY9Z2VlKHRoaXMuX25vcm1hbGl6ZXIsbC5rZXlmcmFtZXMsYSxkKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUoaCxmLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxbXSwhMCl9Y3JlYXRlKGwsYSxkPXt9KXtj'@;
put 'b25zdCBoPVtdLGY9dGhpcy5fYW5pbWF0aW9ucy5nZXQobCk7bGV0IF87Y29uc3QgVD1uZXcgTWFwO2lmKGY/KF89WUgodGhpcy5fZHJpdmVyLGEsZixISCx6RSxuZXcgTWFwLG5ldyBNYXAsZCxweGUsaCksXy5mb3JFYWNoKGdlPT57Y29uc3Qgd2U9bTEoVCxnZS5lbGVtZW50LG5ldyBNYXAp'@;
put 'O2dlLnBvc3RTdHlsZVByb3BzLmZvckVhY2goRWU9PndlLnNldChFZSxudWxsKSl9KSk6KGgucHVzaChmdW5jdGlvbiB5TWUoKXtyZXR1cm4gbmV3IEFyKDMzMDAsITEpfSgpKSxfPVtdKSxoLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiB3TWUoYyl7cmV0dXJuIG5ldyBBcigzNTA0LCExKX0oKTtU'@;
put 'LmZvckVhY2goKGdlLHdlKT0+e2dlLmZvckVhY2goKEVlLFplKT0+e2dlLnNldChaZSx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKHdlLFplLEFmKSl9KX0pO2NvbnN0IGllPUZwKF8ubWFwKGdlPT57Y29uc3Qgd2U9VC5nZXQoZ2UuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVy'@;
put 'KGdlLG5ldyBNYXAsd2UpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZC5zZXQobCxpZSksaWUub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kobCkpLHRoaXMucGxheWVycy5wdXNoKGllKSxpZX1kZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UGxheWVyKGwpO2EuZGVzdHJveSgpLHRo'@;
put 'aXMuX3BsYXllcnNCeUlkLmRlbGV0ZShsKTtjb25zdCBkPXRoaXMucGxheWVycy5pbmRleE9mKGEpO2Q+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoZCwxKX1fZ2V0UGxheWVyKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIENNZShjKXty'@;
put 'ZXR1cm4gbmV3IEFyKDMzMDEsITEpfSgpO3JldHVybiBhfWxpc3RlbihsLGEsZCxoKXtjb25zdCBmPU9IKGEsIiIsIiIsIiIpO3JldHVybiBMSCh0aGlzLl9nZXRQbGF5ZXIobCksZCxmLGgpLCgpPT57fX1jb21tYW5kKGwsYSxkLGgpe2lmKCJyZWdpc3RlciI9PWQpcmV0dXJuIHZvaWQgdGhp'@;
put 'cy5yZWdpc3RlcihsLGhbMF0pO2lmKCJjcmVhdGUiPT1kKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKGwsYSxoWzBdfHx7fSk7Y29uc3QgZj10aGlzLl9nZXRQbGF5ZXIobCk7c3dpdGNoKGQpe2Nhc2UicGxheSI6Zi5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6Zi5wYXVzZSgpO2JyZWFrO2Nh'@;
put 'c2UicmVzZXQiOmYucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOmYucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjpmLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6Zi5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6Zi5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KGhbMF0pKTti'@;
put 'cmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveShsKX19fWNvbnN0IE9lZT0ibmctYW5pbWF0ZS1xdWV1ZWQiLHFIPSJuZy1hbmltYXRlLWRpc2FibGVkIix5eGU9W10sUGVlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiEx'@;
put 'LHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSx3eGU9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LHAyPSJfX25nX3JlbW92ZWQiO2NsYXNzIEtIe2dldCBwYXJhbXMoKXtyZXR1cm4g'@;
put 'dGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3RvcihsLGE9IiIpe3RoaXMubmFtZXNwYWNlSWQ9YTtjb25zdCBkPWwmJmwuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbiB4eGUoYyl7cmV0dXJuIGM/P251bGx9KGQ/bC52YWx1ZTpsKSxkKXtjb25zdCBm'@;
put 'PVdiKGwpO2RlbGV0ZSBmLnZhbHVlLHRoaXMub3B0aW9ucz1mfWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1hYnNvcmJPcHRpb25zKGwpe2NvbnN0IGE9bC5wYXJhbXM7aWYoYSl7Y29uc3QgZD10aGlzLm9wdGlvbnMu'@;
put 'cGFyYW1zO09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e251bGw9PWRbaF0mJihkW2hdPWFbaF0pfSl9fX1jb25zdCBxYj0idm9pZCIsWEg9bmV3IEtIKHFiKTtjbGFzcyBDeGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaWQ9bCx0aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWQs'@;
put 'dGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK2wsaGQoYSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4obCxhLGQsaCl7aWYoIXRo'@;
put 'aXMuX3RyaWdnZXJzLmhhcyhhKSl0aHJvdyBmdW5jdGlvbiBTTWUoYyxsKXtyZXR1cm4gbmV3IEFyKDMzMDIsITEpfSgpO2lmKG51bGw9PWR8fDA9PWQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIE1NZShjKXtyZXR1cm4gbmV3IEFyKDMzMDMsITEpfSgpO2lmKCFmdW5jdGlvbiBFeGUoYyl7cmV0'@;
put 'dXJuInN0YXJ0Ij09Y3x8ImRvbmUiPT1jfShkKSl0aHJvdyBmdW5jdGlvbiB4TWUoYyxsKXtyZXR1cm4gbmV3IEFyKDM0MDAsITEpfSgpO2NvbnN0IGY9bTEodGhpcy5fZWxlbWVudExpc3RlbmVycyxsLFtdKSxfPXtuYW1lOmEscGhhc2U6ZCxjYWxsYmFjazpofTtmLnB1c2goXyk7Y29uc3Qg'@;
put 'VD1tMSh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGwsbmV3IE1hcCk7cmV0dXJuIFQuaGFzKGEpfHwoaGQobCxVRSksaGQobCxVRSsiLSIrYSksVC5zZXQoYSxYSCkpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBXPWYuaW5kZXhPZihfKTtXPj0wJiZmLnNw'@;
put 'bGljZShXLDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8VC5kZWxldGUoYSl9KX19cmVnaXN0ZXIobCxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKGwpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KGwsYSksITApfV9nZXRUcmlnZ2VyKGwpe2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnMuZ2V0KGwp'@;
put 'O2lmKCFhKXRocm93IGZ1bmN0aW9uIEVNZShjKXtyZXR1cm4gbmV3IEFyKDM0MDEsITEpfSgpO3JldHVybiBhfXRyaWdnZXIobCxhLGQsaD0hMCl7Y29uc3QgZj10aGlzLl9nZXRUcmlnZ2VyKGEpLF89bmV3IEpIKHRoaXMuaWQsYSxsKTtsZXQgVD10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVt'@;
put 'ZW50LmdldChsKTtUfHwoaGQobCxVRSksaGQobCxVRSsiLSIrYSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQobCxUPW5ldyBNYXApKTtsZXQgVz1ULmdldChhKTtjb25zdCBpZT1uZXcgS0goZCx0aGlzLmlkKTtpZighKGQmJmQuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZX'@;
put 'JiZpZS5hYnNvcmJPcHRpb25zKFcub3B0aW9ucyksVC5zZXQoYSxpZSksV3x8KFc9WEgpLGllLnZhbHVlIT09cWImJlcudmFsdWU9PT1pZS52YWx1ZSl7aWYoIWZ1bmN0aW9uIFR4ZShjLGwpe2NvbnN0IGE9T2JqZWN0LmtleXMoYyksZD1PYmplY3Qua2V5cyhsKTtpZihhLmxlbmd0aCE9ZC5s'@;
put 'ZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZighbC5oYXNPd25Qcm9wZXJ0eShmKXx8Y1tmXSE9PWxbZl0pcmV0dXJuITF9cmV0dXJuITB9KFcucGFyYW1zLGllLnBhcmFtcykpe2NvbnN0IGV0PVtdLHl0PWYubWF0Y2hTdHlsZXMoVy52'@;
put 'YWx1ZSxXLnBhcmFtcyxldCksa3Q9Zi5tYXRjaFN0eWxlcyhpZS52YWx1ZSxpZS5wYXJhbXMsZXQpO2V0Lmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IoZXQpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57ZmcobCx5dCksaGgobCxrdCl9KX1yZXR1cm59Y29uc3QgRWU9bTEo'@;
put 'dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsbCxbXSk7RWUuZm9yRWFjaChldD0+e2V0Lm5hbWVzcGFjZUlkPT10aGlzLmlkJiZldC50cmlnZ2VyTmFtZT09YSYmZXQucXVldWVkJiZldC5kZXN0cm95KCl9KTtsZXQgWmU9Zi5tYXRjaFRyYW5zaXRpb24oVy52YWx1ZSxpZS52YWx1ZSxs'@;
put 'LGllLnBhcmFtcyksb3Q9ITE7aWYoIVplKXtpZighaClyZXR1cm47WmU9Zi5mYWxsYmFja1RyYW5zaXRpb24sb3Q9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6YSx0cmFuc2l0aW9uOlpl'@;
put 'LGZyb21TdGF0ZTpXLHRvU3RhdGU6aWUscGxheWVyOl8saXNGYWxsYmFja1RyYW5zaXRpb246b3R9KSxvdHx8KGhkKGwsT2VlKSxfLm9uU3RhcnQoKCk9PntROChsLE9lZSl9KSksXy5vbkRvbmUoKCk9PntsZXQgZXQ9dGhpcy5wbGF5ZXJzLmluZGV4T2YoXyk7ZXQ+PTAmJnRoaXMucGxheWVy'@;
put 'cy5zcGxpY2UoZXQsMSk7Y29uc3QgeXQ9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKHl0KXtsZXQga3Q9eXQuaW5kZXhPZihfKTtrdD49MCYmeXQuc3BsaWNlKGt0LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKF8pLEVlLnB1c2goXyksX31kZXJlZ2lzdGVyKGwpe3Ro'@;
put 'aXMuX3RyaWdnZXJzLmRlbGV0ZShsKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goYT0+YS5kZWxldGUobCkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGQsYS5maWx0ZXIoaD0+aC5uYW1lIT1s'@;
put 'KSl9KX1jbGVhckVsZW1lbnRDYWNoZShsKXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZShsKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZShsKTtjb25zdCBhPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiYoYS5mb3JFYWNoKGQ9PmQuZGVz'@;
put 'dHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUobCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpe2NvbnN0IGQ9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeShsLFpFLCEwKTtkLmZvckVhY2goaD0+e2lmKGhbcDJdKXJldHVybjtjb25zdCBm'@;
put 'PXRoaXMuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQoaCk7Zi5zaXplP2YuZm9yRWFjaChfPT5fLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihoLGEsITEsITApKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpfSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgo'@;
put 'KT0+ZC5mb3JFYWNoKGg9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaCkpKX10cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLGQsaCl7Y29uc3QgZj10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKSxfPW5ldyBNYXA7aWYoZil7Y29uc3QgVD1bXTtpZihmLmZvckVhY2goKFcsaWUp'@;
put 'PT57aWYoXy5zZXQoaWUsVy52YWx1ZSksdGhpcy5fdHJpZ2dlcnMuaGFzKGllKSl7Y29uc3QgZ2U9dGhpcy50cmlnZ2VyKGwsaWUscWIsaCk7Z2UmJlQucHVzaChnZSl9fSksVC5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITAsYSxf'@;
put 'KSxkJiZGcChUKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGwpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChsKSxkPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVs'@;
put 'ZW1lbnQuZ2V0KGwpO2lmKGEmJmQpe2NvbnN0IGg9bmV3IFNldDthLmZvckVhY2goZj0+e2NvbnN0IF89Zi5uYW1lO2lmKGguaGFzKF8pKXJldHVybjtoLmFkZChfKTtjb25zdCBXPXRoaXMuX3RyaWdnZXJzLmdldChfKS5mYWxsYmFja1RyYW5zaXRpb24saWU9ZC5nZXQoXyl8fFhILGdlPW5l'@;
put 'dyBLSChxYiksd2U9bmV3IEpIKHRoaXMuaWQsXyxsKTt0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDpsLHRyaWdnZXJOYW1lOl8sdHJhbnNpdGlvbjpXLGZyb21TdGF0ZTppZSx0b1N0YXRlOmdlLHBsYXllcjp3ZSxpc0ZhbGxiYWNr'@;
put 'VHJhbnNpdGlvbjohMH0pfSl9fXJlbW92ZU5vZGUobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZTtpZihsLmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSwhMCkpcmV0dXJuO2xl'@;
put 'dCBoPSExO2lmKGQudG90YWxBbmltYXRpb25zKXtjb25zdCBmPWQucGxheWVycy5sZW5ndGg/ZC5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk6W107aWYoZiYmZi5sZW5ndGgpaD0hMDtlbHNle2xldCBfPWw7Zm9yKDtfPV8ucGFyZW50Tm9kZTspaWYoZC5zdGF0ZXNCeUVsZW1lbnQu'@;
put 'Z2V0KF8pKXtoPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCksaClkLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsbCwhMSxhKTtlbHNle2NvbnN0IGY9bFtwMl07KCFmfHxmPT09UGVlKSYmKGQuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVh'@;
put 'ckVsZW1lbnRDYWNoZShsKSksZC5kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpLGQuX29uUmVtb3ZhbENvbXBsZXRlKGwsYSkpfX1pbnNlcnROb2RlKGwsYSl7aGQobCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGwpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMu'@;
put 'X3F1ZXVlLmZvckVhY2goZD0+e2NvbnN0IGg9ZC5wbGF5ZXI7aWYoaC5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGY9ZC5lbGVtZW50LF89dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQoZik7XyYmXy5mb3JFYWNoKFQ9PntpZihULm5hbWU9PWQudHJpZ2dlck5hbWUpe2NvbnN0IFc9T0goZixk'@;
put 'LnRyaWdnZXJOYW1lLGQuZnJvbVN0YXRlLnZhbHVlLGQudG9TdGF0ZS52YWx1ZSk7Vy5fZGF0YT1sLExIKGQucGxheWVyLFQucGhhc2UsVyxULmNhbGxiYWNrKX19KSxoLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntoLmRlc3Ryb3koKX0pOmEucHVzaChk'@;
put 'KX0pLHRoaXMuX3F1ZXVlPVtdLGEuc29ydCgoZCxoKT0+e2NvbnN0IGY9ZC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxfPWgudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PWZ8fDA9PV8/Zi1fOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQuZWxlbWVudCxo'@;
put 'LmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KGwpe3RoaXMucGxheWVycy5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LGwpfX1jbGFzcyBTeGV7X29uUmVtb3ZhbENvbXBsZXRlKGwsYSl7dGhpcy5vblJl'@;
put 'bW92YWxDb21wbGV0ZShsLGEpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhp'@;
put 'cy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0'@;
put 'aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlz'@;
put 'Lm9uUmVtb3ZhbENvbXBsZXRlPShoLGYpPT57fX1nZXQgcXVldWVkUGxheWVycygpe2NvbnN0IGw9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaChhPT57YS5wbGF5ZXJzLmZvckVhY2goZD0+e2QucXVldWVkJiZsLnB1c2goZCl9KX0pLGx9Y3JlYXRlTmFtZXNwYWNlKGws'@;
put 'YSl7Y29uc3QgZD1uZXcgQ3hlKGwsYSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsYSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxhKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGEsZCksdGhpcy5j'@;
put 'b2xsZWN0RW50ZXJFbGVtZW50KGEpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF09ZH1fYmFsYW5jZU5hbWVzcGFjZUxpc3QobCxhKXtjb25zdCBkPXRoaXMuX25hbWVzcGFjZUxpc3QsaD10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGQubGVuZ3RoLTE+PTApe2xldCBfPSExLFQ9'@;
put 'dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChhKTtmb3IoO1Q7KXtjb25zdCBXPWguZ2V0KFQpO2lmKFcpe2NvbnN0IGllPWQuaW5kZXhPZihXKTtkLnNwbGljZShpZSsxLDAsbCksXz0hMDticmVha31UPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoVCl9X3x8ZC51bnNoaWZ0KGwp'@;
put 'fWVsc2UgZC5wdXNoKGwpO3JldHVybiBoLnNldChhLGwpLGx9cmVnaXN0ZXIobCxhKXtsZXQgZD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07cmV0dXJuIGR8fChkPXRoaXMuY3JlYXRlTmFtZXNwYWNlKGwsYSkpLGR9cmVnaXN0ZXJUcmlnZ2VyKGwsYSxkKXtsZXQgaD10aGlzLl9uYW1lc3Bh'@;
put 'Y2VMb29rdXBbbF07aCYmaC5yZWdpc3RlcihhLGQpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kobCxhKXtsJiYodGhpcy5hZnRlckZsdXNoKCgpPT57fSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9Pntjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3Ro'@;
put 'aXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGQuaG9zdEVsZW1lbnQpO2NvbnN0IGg9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGQpO2g+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGgsMSksZC5kZXN0cm95KGEpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29r'@;
put 'dXBbbF19KSl9X2ZldGNoTmFtZXNwYWNlKGwpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGwpe2NvbnN0IGE9bmV3IFNldCxkPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihkKWZvcihsZXQgaCBvZiBkLnZhbHVlcygpKWlm'@;
put 'KGgubmFtZXNwYWNlSWQpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoaC5uYW1lc3BhY2VJZCk7ZiYmYS5hZGQoZil9cmV0dXJuIGF9dHJpZ2dlcihsLGEsZCxoKXtpZihRRShhKSl7Y29uc3QgZj10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTtpZihmKXJldHVybiBmLnRyaWdnZXIoYSxk'@;
put 'LGgpLCEwfXJldHVybiExfWluc2VydE5vZGUobCxhLGQsaCl7aWYoIVFFKGEpKXJldHVybjtjb25zdCBmPWFbcDJdO2lmKGYmJmYuc2V0Rm9yUmVtb3ZhbCl7Zi5zZXRGb3JSZW1vdmFsPSExLGYuc2V0Rm9yTW92ZT0hMDtjb25zdCBfPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRl'@;
put 'eE9mKGEpO18+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UoXywxKX1pZihsKXtjb25zdCBfPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO18mJl8uaW5zZXJ0Tm9kZShhLGQpfWgmJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKX1jb2xsZWN0RW50ZXJFbGVtZW50KGwp'@;
put 'e3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKGwpfW1hcmtFbGVtZW50QXNEaXNhYmxlZChsLGEpe2E/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQobCksaGQobCxxSCkpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCkmJih0aGlzLmRp'@;
put 'c2FibGVkTm9kZXMuZGVsZXRlKGwpLFE4KGwscUgpKX1yZW1vdmVOb2RlKGwsYSxkKXtpZihRRShhKSl7Y29uc3QgaD1sP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpOm51bGw7aD9oLnJlbW92ZU5vZGUoYSxkKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSwhMSxkKTtjb25zdCBmPXRo'@;
put 'aXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGEpO2YmJmYuaWQhPT1sJiZmLnJlbW92ZU5vZGUoYSxkKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGEsZCl9bWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLGQsaCxmKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChh'@;
put 'KSxhW3AyXT17bmFtZXNwYWNlSWQ6bCxzZXRGb3JSZW1vdmFsOmgsaGFzQW5pbWF0aW9uOmQscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpmfX1saXN0ZW4obCxhLGQsaCxmKXtyZXR1cm4gUUUoYSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCkubGlzdGVu'@;
put 'KGEsZCxoLGYpOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbihsLGEsZCxoLGYpe3JldHVybiBsLnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsbC5lbGVtZW50LGwuZnJvbVN0YXRlLnZhbHVlLGwudG9TdGF0ZS52YWx1ZSxkLGgsbC5mcm9tU3RhdGUub3B0aW9ucyxsLnRvU3RhdGUub3B0'@;
put 'aW9ucyxhLGYpfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCl7bGV0IGE9dGhpcy5kcml2ZXIucXVlcnkobCxaRSwhMCk7YS5mb3JFYWNoKGQ9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGQpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihh'@;
put 'PXRoaXMuZHJpdmVyLnF1ZXJ5KGwsTkgsITApLGEuZm9yRWFjaChkPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoZCkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2Em'@;
put 'JmEuZm9yRWFjaChkPT57ZC5xdWV1ZWQ/ZC5tYXJrZWRGb3JEZXN0cm95PSEwOmQuZGVzdHJveSgpfSl9ZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpO2EmJmEuZm9yRWFjaChkPT5kLmZp'@;
put 'bmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZShsPT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gRnAodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PmwoKSk7bCgpfSl9cHJvY2Vzc0xlYXZlTm9kZShsKXtjb25zdCBhPWxbcDJdO2lmKGEmJmEuc2V0'@;
put 'Rm9yUmVtb3ZhbCl7aWYobFtwMl09UGVlLGEubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKTtjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGEubmFtZXNwYWNlSWQpO2QmJmQuY2xlYXJFbGVtZW50Q2FjaGUobCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUo'@;
put 'bCxhLnNldEZvclJlbW92YWwpfWwuY2xhc3NMaXN0Py5jb250YWlucyhxSCkmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KGwsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChkPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQo'@;
put 'ZCwhMSl9KX1mbHVzaChsPS0xKXtsZXQgYT1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoZCxoKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxoKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50'@;
put 'b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2QrKyloZCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbZF0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlz'@;
put 'Ll9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7Y29uc3QgZD1bXTt0cnl7YT10aGlzLl9mbHVzaEFuaW1hdGlvbnMoZCxsKX1maW5hbGx5e2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsr'@;
put 'KWRbaF0oKX19ZWxzZSBmb3IobGV0IGQ9MDtkPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7ZCsrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbZF0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRF'@;
put 'bnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKGQ9PmQoKSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7Y29uc3QgZD10aGlzLl93aGVuUXVpZXRGbnM7dGhp'@;
put 'cy5fd2hlblF1aWV0Rm5zPVtdLGEubGVuZ3RoP0ZwKGEpLm9uRG9uZSgoKT0+e2QuZm9yRWFjaChoPT5oKCkpfSk6ZC5mb3JFYWNoKGg9PmgoKSl9fXJlcG9ydEVycm9yKGwpe3Rocm93IGZ1bmN0aW9uIGtNZShjKXtyZXR1cm4gbmV3IEFyKDM0MDIsITEpfSgpfV9mbHVzaEFuaW1hdGlvbnMo'@;
put 'bCxhKXtjb25zdCBkPW5ldyBLRSxoPVtdLGY9bmV3IE1hcCxfPVtdLFQ9bmV3IE1hcCxXPW5ldyBNYXAsaWU9bmV3IE1hcCxnZT1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKFFuPT57Z2UuYWRkKFFuKTtjb25zdCBNcj10aGlzLmRyaXZlci5xdWVyeShRbiwiLm5nLWFuaW1h'@;
put 'dGUtcXVldWVkIiwhMCk7Zm9yKGxldCBfcj0wO19yPE1yLmxlbmd0aDtfcisrKWdlLmFkZChNcltfcl0pfSk7Y29uc3Qgd2U9dGhpcy5ib2R5Tm9kZSxFZT1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksWmU9TmVlKEVlLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50'@;
put 'cyksb3Q9bmV3IE1hcDtsZXQgZXQ9MDtaZS5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj1ISCtldCsrO290LnNldChNcixfciksUW4uZm9yRWFjaCh2dD0+aGQodnQsX3IpKX0pO2NvbnN0IHl0PVtdLGt0PW5ldyBTZXQsU3Q9bmV3IFNldDtmb3IobGV0IFFuPTA7UW48dGhpcy5jb2xsZWN0'@;
put 'ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtRbisrKXtjb25zdCBNcj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbUW5dLF9yPU1yW3AyXTtfciYmX3Iuc2V0Rm9yUmVtb3ZhbCYmKHl0LnB1c2goTXIpLGt0LmFkZChNciksX3IuaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KE1yLCIu'@;
put 'bmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2godnQ9Pmt0LmFkZCh2dCkpOlN0LmFkZChNcikpfWNvbnN0IFF0PW5ldyBNYXAscm49TmVlKEVlLEFycmF5LmZyb20oa3QpKTtybi5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj16RStldCsrO1F0LnNldChNcixfciksUW4uZm9yRWFjaCh2'@;
put 'dD0+aGQodnQsX3IpKX0pLGwucHVzaCgoKT0+e1plLmZvckVhY2goKFFuLE1yKT0+e2NvbnN0IF9yPW90LmdldChNcik7UW4uZm9yRWFjaCh2dD0+UTgodnQsX3IpKX0pLHJuLmZvckVhY2goKFFuLE1yKT0+e2NvbnN0IF9yPVF0LmdldChNcik7UW4uZm9yRWFjaCh2dD0+UTgodnQsX3IpKX0p'@;
put 'LHl0LmZvckVhY2goUW49Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoUW4pfSl9KTtjb25zdCB2bj1bXSxObj1bXTtmb3IobGV0IFFuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7UW4+PTA7UW4tLSl0aGlzLl9uYW1lc3BhY2VMaXN0W1FuXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGEp'@;
put 'LmZvckVhY2goX3I9Pntjb25zdCB2dD1fci5wbGF5ZXIsT3Q9X3IuZWxlbWVudDtpZih2bi5wdXNoKHZ0KSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtjb25zdCAkcj1PdFtwMl07aWYoJHImJiRyLnNldEZvck1vdmUpe2lmKCRyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMm'@;
put 'JiRyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKF9yLnRyaWdnZXJOYW1lKSl7Y29uc3QgWXI9JHIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5nZXQoX3IudHJpZ2dlck5hbWUpLE5yPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChfci5lbGVtZW50KTtpZihOciYmTnIuaGFzKF9yLnRyaWdn'@;
put 'ZXJOYW1lKSl7Y29uc3QgUmk9TnIuZ2V0KF9yLnRyaWdnZXJOYW1lKTtSaS52YWx1ZT1ZcixOci5zZXQoX3IudHJpZ2dlck5hbWUsUmkpfX1yZXR1cm4gdm9pZCB2dC5kZXN0cm95KCl9fWNvbnN0IGNuPSF3ZXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh3ZSxPdCksRW49UXQuZ2V0'@;
put 'KE90KSxPbj1vdC5nZXQoT3QpLEpuPXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24oX3IsZCxPbixFbixjbik7aWYoSm4uZXJyb3JzJiZKbi5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIE5uLnB1c2goSm4pO2lmKGNuKXJldHVybiB2dC5vblN0YXJ0KCgpPT5mZyhPdCxKbi5mcm9tU3R5bGVzKSks'@;
put 'dnQub25EZXN0cm95KCgpPT5oaChPdCxKbi50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHZ0KTtpZihfci5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gdnQub25TdGFydCgoKT0+ZmcoT3QsSm4uZnJvbVN0eWxlcykpLHZ0Lm9uRGVzdHJveSgoKT0+aGgoT3QsSm4udG9TdHlsZXMpKSx2b2lk'@;
put 'IGgucHVzaCh2dCk7Y29uc3QgUHI9W107Sm4udGltZWxpbmVzLmZvckVhY2goJHI9Pnskci5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKCRyLmVsZW1lbnQpfHxQci5wdXNoKCRyKX0pLEpuLnRpbWVsaW5lcz1QcixkLmFwcGVuZChPdCxKbi50aW1l'@;
put 'bGluZXMpLF8ucHVzaCh7aW5zdHJ1Y3Rpb246Sm4scGxheWVyOnZ0LGVsZW1lbnQ6T3R9KSxKbi5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaCgkcj0+bTEoVCwkcixbXSkucHVzaCh2dCkpLEpuLnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoJHIsWXIpPT57aWYoJHIuc2l6ZSl7bGV0IE5yPVcuZ2V0'@;
put 'KFlyKTtOcnx8Vy5zZXQoWXIsTnI9bmV3IFNldCksJHIuZm9yRWFjaCgoUmksWG8pPT5Oci5hZGQoWG8pKX19KSxKbi5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKCgkcixZcik9PntsZXQgTnI9aWUuZ2V0KFlyKTtOcnx8aWUuc2V0KFlyLE5yPW5ldyBTZXQpLCRyLmZvckVhY2goKFJpLFhvKT0+'@;
put 'TnIuYWRkKFhvKSl9KX0pO2lmKE5uLmxlbmd0aCl7Y29uc3QgUW49W107Tm4uZm9yRWFjaChNcj0+e1FuLnB1c2goZnVuY3Rpb24gQU1lKGMsbCl7cmV0dXJuIG5ldyBBcigzNTA1LCExKX0oKSl9KSx2bi5mb3JFYWNoKE1yPT5Nci5kZXN0cm95KCkpLHRoaXMucmVwb3J0RXJyb3IoUW4pfWNv'@;
put 'bnN0IGNyPW5ldyBNYXAsRHI9bmV3IE1hcDtfLmZvckVhY2goUW49Pntjb25zdCBNcj1Rbi5lbGVtZW50O2QuaGFzKE1yKSYmKERyLnNldChNcixNciksdGhpcy5fYmVmb3JlQW5pbWF0aW9uQnVpbGQoUW4ucGxheWVyLm5hbWVzcGFjZUlkLFFuLmluc3RydWN0aW9uLGNyKSl9KSxoLmZvckVh'@;
put 'Y2goUW49Pntjb25zdCBNcj1Rbi5lbGVtZW50O3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhNciwhMSxRbi5uYW1lc3BhY2VJZCxRbi50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKHZ0PT57bTEoY3IsTXIsW10pLnB1c2godnQpLHZ0LmRlc3Ryb3koKX0pfSk7Y29uc3QgX2k9eXQuZmlsdGVy'@;
put 'KFFuPT5CZWUoUW4sVyxpZSkpLGxpPW5ldyBNYXA7SGVlKGxpLHRoaXMuZHJpdmVyLFN0LGllLEFmKS5mb3JFYWNoKFFuPT57QmVlKFFuLFcsaWUpJiZfaS5wdXNoKFFuKX0pO2NvbnN0IEVpPW5ldyBNYXA7WmUuZm9yRWFjaCgoUW4sTXIpPT57SGVlKEVpLHRoaXMuZHJpdmVyLG5ldyBTZXQo'@;
put 'UW4pLFcsIiEiKX0pLF9pLmZvckVhY2goUW49Pntjb25zdCBNcj1saS5nZXQoUW4pLF9yPUVpLmdldChRbik7bGkuc2V0KFFuLG5ldyBNYXAoWy4uLk1yPy5lbnRyaWVzKCk/P1tdLC4uLl9yPy5lbnRyaWVzKCk/P1tdXSkpfSk7Y29uc3QgWnI9W10sRm49W10sRnI9e307Xy5mb3JFYWNoKFFu'@;
put 'PT57Y29uc3R7ZWxlbWVudDpNcixwbGF5ZXI6X3IsaW5zdHJ1Y3Rpb246dnR9PVFuO2lmKGQuaGFzKE1yKSl7aWYoZ2UuaGFzKE1yKSlyZXR1cm4gX3Iub25EZXN0cm95KCgpPT5oaChNcix2dC50b1N0eWxlcykpLF9yLmRpc2FibGVkPSEwLF9yLm92ZXJyaWRlVG90YWxUaW1lKHZ0LnRvdGFs'@;
put 'VGltZSksdm9pZCBoLnB1c2goX3IpO2xldCBPdD1GcjtpZihEci5zaXplPjEpe2xldCBFbj1Ncjtjb25zdCBPbj1bXTtmb3IoO0VuPUVuLnBhcmVudE5vZGU7KXtjb25zdCBKbj1Eci5nZXQoRW4pO2lmKEpuKXtPdD1KbjticmVha31Pbi5wdXNoKEVuKX1Pbi5mb3JFYWNoKEpuPT5Eci5zZXQo'@;
put 'Sm4sT3QpKX1jb25zdCBjbj10aGlzLl9idWlsZEFuaW1hdGlvbihfci5uYW1lc3BhY2VJZCx2dCxjcixmLEVpLGxpKTtpZihfci5zZXRSZWFsUGxheWVyKGNuKSxPdD09PUZyKVpyLnB1c2goX3IpO2Vsc2V7Y29uc3QgRW49dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChPdCk7RW4mJkVuLmxl'@;
put 'bmd0aCYmKF9yLnBhcmVudFBsYXllcj1GcChFbikpLGgucHVzaChfcil9fWVsc2UgZmcoTXIsdnQuZnJvbVN0eWxlcyksX3Iub25EZXN0cm95KCgpPT5oaChNcix2dC50b1N0eWxlcykpLEZuLnB1c2goX3IpLGdlLmhhcyhNcikmJmgucHVzaChfcil9KSxGbi5mb3JFYWNoKFFuPT57Y29uc3Qg'@;
put 'TXI9Zi5nZXQoUW4uZWxlbWVudCk7aWYoTXImJk1yLmxlbmd0aCl7Y29uc3QgX3I9RnAoTXIpO1FuLnNldFJlYWxQbGF5ZXIoX3IpfX0pLGguZm9yRWFjaChRbj0+e1FuLnBhcmVudFBsYXllcj9Rbi5zeW5jUGxheWVyRXZlbnRzKFFuLnBhcmVudFBsYXllcik6UW4uZGVzdHJveSgpfSk7Zm9y'@;
put 'KGxldCBRbj0wO1FuPHl0Lmxlbmd0aDtRbisrKXtjb25zdCBNcj15dFtRbl0sX3I9TXJbcDJdO2lmKFE4KE1yLHpFKSxfciYmX3IuaGFzQW5pbWF0aW9uKWNvbnRpbnVlO2xldCB2dD1bXTtpZihULnNpemUpe2xldCBjbj1ULmdldChNcik7Y24mJmNuLmxlbmd0aCYmdnQucHVzaCguLi5jbik7'@;
put 'bGV0IEVuPXRoaXMuZHJpdmVyLnF1ZXJ5KE1yLE5ILCEwKTtmb3IobGV0IE9uPTA7T248RW4ubGVuZ3RoO09uKyspe2xldCBKbj1ULmdldChFbltPbl0pO0puJiZKbi5sZW5ndGgmJnZ0LnB1c2goLi4uSm4pfX1jb25zdCBPdD12dC5maWx0ZXIoY249PiFjbi5kZXN0cm95ZWQpO090Lmxlbmd0'@;
put 'aD9reGUodGhpcyxNcixPdCk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKE1yKX1yZXR1cm4geXQubGVuZ3RoPTAsWnIuZm9yRWFjaChRbj0+e3RoaXMucGxheWVycy5wdXNoKFFuKSxRbi5vbkRvbmUoKCk9PntRbi5kZXN0cm95KCk7Y29uc3QgTXI9dGhpcy5wbGF5ZXJzLmluZGV4T2YoUW4pO3Ro'@;
put 'aXMucGxheWVycy5zcGxpY2UoTXIsMSl9KSxRbi5wbGF5KCl9KSxacn1hZnRlckZsdXNoKGwpe3RoaXMuX2ZsdXNoRm5zLnB1c2gobCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKGwpfV9nZXRQcmV2aW91c1BsYXllcnMobCxhLGQsaCxmKXts'@;
put 'ZXQgXz1bXTtpZihhKXtjb25zdCBUPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpO1QmJihfPVQpfWVsc2V7Y29uc3QgVD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKFQpe2NvbnN0IFc9IWZ8fGY9PXFiO1QuZm9yRWFjaChpZT0+e2llLnF1ZXVlZHx8IVcmJmll'@;
put 'LnRyaWdnZXJOYW1lIT1ofHxfLnB1c2goaWUpfSl9fXJldHVybihkfHxoKSYmKF89Xy5maWx0ZXIoVD0+IShkJiZkIT1ULm5hbWVzcGFjZUlkfHxoJiZoIT1ULnRyaWdnZXJOYW1lKSkpLF99X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKGwsYSxkKXtjb25zdCBmPWEuZWxlbWVudCxfPWEuaXNSZW1v'@;
put 'dmFsVHJhbnNpdGlvbj92b2lkIDA6bCxUPWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6YS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgVyBvZiBhLnRpbWVsaW5lcyl7Y29uc3QgaWU9Vy5lbGVtZW50LGdlPWllIT09Zix3ZT1tMShkLGllLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMo'@;
put 'aWUsZ2UsXyxULGEudG9TdGF0ZSkuZm9yRWFjaChaZT0+e2NvbnN0IG90PVplLmdldFJlYWxQbGF5ZXIoKTtvdC5iZWZvcmVEZXN0cm95JiZvdC5iZWZvcmVEZXN0cm95KCksWmUuZGVzdHJveSgpLHdlLnB1c2goWmUpfSl9ZmcoZixhLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbihsLGEs'@;
put 'ZCxoLGYsXyl7Y29uc3QgVD1hLnRyaWdnZXJOYW1lLFc9YS5lbGVtZW50LGllPVtdLGdlPW5ldyBTZXQsd2U9bmV3IFNldCxFZT1hLnRpbWVsaW5lcy5tYXAob3Q9Pntjb25zdCBldD1vdC5lbGVtZW50O2dlLmFkZChldCk7Y29uc3QgeXQ9ZXRbcDJdO2lmKHl0JiZ5dC5yZW1vdmVkQmVmb3Jl'@;
put 'UXVlcmllZClyZXR1cm4gbmV3IG9iKG90LmR1cmF0aW9uLG90LmRlbGF5KTtjb25zdCBrdD1ldCE9PVcsU3Q9ZnVuY3Rpb24gQXhlKGMpe2NvbnN0IGw9W107cmV0dXJuIFZlZShjLGwpLGx9KChkLmdldChldCl8fHl4ZSkubWFwKGNyPT5jci5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoY3I9'@;
put 'PiEhY3IuZWxlbWVudCYmY3IuZWxlbWVudD09PWV0KSxRdD1mLmdldChldCkscm49Xy5nZXQoZXQpLHZuPWdlZSh0aGlzLl9ub3JtYWxpemVyLG90LmtleWZyYW1lcyxRdCxybiksTm49dGhpcy5fYnVpbGRQbGF5ZXIob3Qsdm4sU3QpO2lmKG90LnN1YlRpbWVsaW5lJiZoJiZ3ZS5hZGQoZXQp'@;
put 'LGt0KXtjb25zdCBjcj1uZXcgSkgobCxULGV0KTtjci5zZXRSZWFsUGxheWVyKE5uKSxpZS5wdXNoKGNyKX1yZXR1cm4gTm59KTtpZS5mb3JFYWNoKG90PT57bTEodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxvdC5lbGVtZW50LFtdKS5wdXNoKG90KSxvdC5vbkRvbmUoKCk9PmZ1bmN0'@;
put 'aW9uIE14ZShjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7aWYoZCl7aWYoZC5sZW5ndGgpe2NvbnN0IGg9ZC5pbmRleE9mKGEpO2Quc3BsaWNlKGgsMSl9MD09ZC5sZW5ndGgmJmMuZGVsZXRlKGwpfXJldHVybiBkfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LG90LmVsZW1lbnQsb3QpKX0p'@;
put 'LGdlLmZvckVhY2gob3Q9PmhkKG90LENlZSkpO2NvbnN0IFplPUZwKEVlKTtyZXR1cm4gWmUub25EZXN0cm95KCgpPT57Z2UuZm9yRWFjaChvdD0+UTgob3QsQ2VlKSksaGgoVyxhLnRvU3R5bGVzKX0pLHdlLmZvckVhY2gob3Q9PnttMShoLG90LFtdKS5wdXNoKFplKX0pLFplfV9idWlsZFBs'@;
put 'YXllcihsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZShsLmVsZW1lbnQsYSxsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNpbmcsZCk6bmV3IG9iKGwuZHVyYXRpb24sbC5kZWxheSl9fWNsYXNzIEpIe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWVzcGFjZUlk'@;
put 'PWwsdGhpcy50cmlnZ2VyTmFtZT1hLHRoaXMuZWxlbWVudD1kLHRoaXMuX3BsYXllcj1uZXcgb2IsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5tYXJr'@;
put 'ZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1zZXRSZWFsUGxheWVyKGwpe3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj1sLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5mb3JFYWNoKChhLGQpPT57YS5m'@;
put 'b3JFYWNoKGg9PkxIKGwsZCx2b2lkIDAsaCkpfSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmNsZWFyKCksdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUobC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX1nZXRSZWFsUGxheWVyKCl7cmV0dXJuIHRo'@;
put 'aXMuX3BsYXllcn1vdmVycmlkZVRvdGFsVGltZShsKXt0aGlzLnRvdGFsVGltZT1sfXN5bmNQbGF5ZXJFdmVudHMobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmwub25TdGFydCgoKT0+YS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLGwub25Eb25lKCgpPT50'@;
put 'aGlzLmZpbmlzaCgpKSxsLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KGwsYSl7bTEodGhpcy5fcXVldWVkQ2FsbGJhY2tzLGwsW10pLnB1c2goYSl9b25Eb25lKGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIixsKSx0aGlzLl9wbGF5ZXIu'@;
put 'b25Eb25lKGwpfW9uU3RhcnQobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0IixsKSx0aGlzLl9wbGF5ZXIub25TdGFydChsKX1vbkRlc3Ryb3kobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLGwpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3ko'@;
put 'bCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIu'@;
put 'cGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5f'@;
put 'cGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24obCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbihsKX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPXRoaXMu'@;
put 'X3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmYS50cmlnZ2VyQ2FsbGJhY2sobCl9fWZ1bmN0aW9uIFFFKGMpe3JldHVybiBjJiYxPT09Yy5ub2RlVHlwZX1mdW5jdGlvbiBGZWUoYyxsKXtjb25zdCBhPWMuc3R5bGUuZGlzcGxheTtyZXR1cm4gYy5zdHlsZS5kaXNwbGF5PWw/PyJub25lIixh'@;
put 'fWZ1bmN0aW9uIEhlZShjLGwsYSxkLGgpe2NvbnN0IGY9W107YS5mb3JFYWNoKFc9PmYucHVzaChGZWUoVykpKTtjb25zdCBfPVtdO2QuZm9yRWFjaCgoVyxpZSk9Pntjb25zdCBnZT1uZXcgTWFwO1cuZm9yRWFjaCh3ZT0+e2NvbnN0IEVlPWwuY29tcHV0ZVN0eWxlKGllLHdlLGgpO2dlLnNl'@;
put 'dCh3ZSxFZSksKCFFZXx8MD09RWUubGVuZ3RoKSYmKGllW3AyXT13eGUsXy5wdXNoKGllKSl9KSxjLnNldChpZSxnZSl9KTtsZXQgVD0wO3JldHVybiBhLmZvckVhY2goVz0+RmVlKFcsZltUKytdKSksX31mdW5jdGlvbiBOZWUoYyxsKXtjb25zdCBhPW5ldyBNYXA7aWYoYy5mb3JFYWNoKFQ9'@;
put 'PmEuc2V0KFQsW10pKSwwPT1sLmxlbmd0aClyZXR1cm4gYTtjb25zdCBoPW5ldyBTZXQobCksZj1uZXcgTWFwO2Z1bmN0aW9uIF8oVCl7aWYoIVQpcmV0dXJuIDE7bGV0IFc9Zi5nZXQoVCk7aWYoVylyZXR1cm4gVztjb25zdCBpZT1ULnBhcmVudE5vZGU7cmV0dXJuIFc9YS5oYXMoaWUpP2ll'@;
put 'OmguaGFzKGllKT8xOl8oaWUpLGYuc2V0KFQsVyksV31yZXR1cm4gbC5mb3JFYWNoKFQ9Pntjb25zdCBXPV8oVCk7MSE9PVcmJmEuZ2V0KFcpLnB1c2goVCl9KSxhfWZ1bmN0aW9uIGhkKGMsbCl7Yy5jbGFzc0xpc3Q/LmFkZChsKX1mdW5jdGlvbiBROChjLGwpe2MuY2xhc3NMaXN0Py5yZW1v'@;
put 'dmUobCl9ZnVuY3Rpb24ga3hlKGMsbCxhKXtGcChhKS5vbkRvbmUoKCk9PmMucHJvY2Vzc0xlYXZlTm9kZShsKSl9ZnVuY3Rpb24gVmVlKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9Y1thXTtkIGluc3RhbmNlb2YgVks/VmVlKGQucGxheWVycyxsKTpsLnB1c2go'@;
put 'ZCl9fWZ1bmN0aW9uIEJlZShjLGwsYSl7Y29uc3QgZD1hLmdldChjKTtpZighZClyZXR1cm4hMTtsZXQgaD1sLmdldChjKTtyZXR1cm4gaD9kLmZvckVhY2goZj0+aC5hZGQoZikpOmwuc2V0KGMsZCksYS5kZWxldGUoYyksITB9Y2xhc3MgZWt7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuYm9k'@;
put 'eU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGgsZik9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IFN4ZShsLGEsZCksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGd4ZShs'@;
put 'LGEsZCksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oaCxmKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShoLGYpfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCxoLGYpe2NvbnN0IF89bCsiLSIraDtsZXQgVD10aGlzLl90cmlnZ2VyQ2FjaGVbX107aWYoIVQpe2NvbnN0'@;
put 'IFc9W10sZ2U9ekgodGhpcy5fZHJpdmVyLGYsVyxbXSk7aWYoVy5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gdk1lKGMsbCl7cmV0dXJuIG5ldyBBcigzNDA0LCExKX0oKTtUPWZ1bmN0aW9uIGR4ZShjLGwsYSl7cmV0dXJuIG5ldyBoeGUoYyxsLGEpfShoLGdlLHRoaXMuX25vcm1hbGl6ZXIpLHRo'@;
put 'aXMuX3RyaWdnZXJDYWNoZVtfXT1UfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGEsaCxUKX1yZWdpc3RlcihsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIobCxhKX1kZXN0cm95KGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KGws'@;
put 'YSl9b25JbnNlcnQobCxhLGQsaCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKGwsYSxkLGgpfW9uUmVtb3ZlKGwsYSxkKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUobCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2lu'@;
put 'ZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKX1wcm9jZXNzKGwsYSxkLGgpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W2YsX109bWVlKGQpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQoZixhLF8saCl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIobCxhLGQs'@;
put 'aCl9bGlzdGVuKGwsYSxkLGgsZil7aWYoIkAiPT1kLmNoYXJBdCgwKSl7Y29uc3RbXyxUXT1tZWUoZCk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihfLGEsVCxmKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4obCxhLGQsaCxmKX1mbHVzaChsPS0xKXt0'@;
put 'aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKGwpfWdldCBwbGF5ZXJzKCl7cmV0dXJuWy4uLnRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycywuLi50aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzXX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5n'@;
put 'aW5lLndoZW5SZW5kZXJpbmdEb25lKCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpfX1sZXQgSXhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlz'@;
put 'Ll9zdGFydFN0eWxlcz1kLHRoaXMuX2VuZFN0eWxlcz1oLHRoaXMuX3N0YXRlPTA7bGV0IGY9Yy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldChhKTtmfHxjLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGEsZj1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPWZ9c3RhcnQoKXt0aGlz'@;
put 'Ll9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJmhoKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihoaCh0aGlzLl9lbGVtZW50LHRoaXMuX2lu'@;
put 'aXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKGhoKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKGMuaW5pdGlhbFN0eWxlc0J5RWxlbWVu'@;
put 'dC5kZWxldGUodGhpcy5fZWxlbWVudCksdGhpcy5fc3RhcnRTdHlsZXMmJihmZyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYoZmcodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0'@;
put 'eWxlcz1udWxsKSxoaCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1yZXR1cm4gYy5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwLGN9KSgpO2Z1bmN0aW9uIFFIKGMpe2xldCBsPW51bGw7cmV0dXJuIGMuZm9yRWFjaCgoYSxkKT0+'@;
put 'eyhmdW5jdGlvbiBMeGUoYyl7cmV0dXJuImRpc3BsYXkiPT09Y3x8InBvc2l0aW9uIj09PWN9KShkKSYmKGw9bHx8bmV3IE1hcCxsLnNldChkLGEpKX0pLGx9Y2xhc3MgamVle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuZWxlbWVudD1sLHRoaXMua2V5ZnJhbWVzPWEsdGhpcy5vcHRpb25z'@;
put 'PWQsdGhpcy5fc3BlY2lhbFN0eWxlcz1oLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlz'@;
put 'Ll9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1cnJlbnRTbmFwc2hvdD1uZXcgTWFwLHRoaXMuX2R1cmF0aW9uPWQuZHVyYXRpb24sdGhpcy5fZGVsYXk9ZC5kZWxheXx8MCx0'@;
put 'aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhp'@;
put 'cy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEwO2NvbnN0IGw9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVs'@;
put 'ZW1lbnQsbCx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9bC5sZW5ndGg/bFtsLmxlbmd0aC0xXTpuZXcgTWFwLHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsKCk9PnRoaXMuX29uRmluaXNoKCkpfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0'@;
put 'aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGwpe2NvbnN0IGE9W107cmV0dXJuIGwuZm9yRWFjaChkPT57YS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhkKSl9KSxhfV90cmlnZ2Vy'@;
put 'V2ViQW5pbWF0aW9uKGwsYSxkKXtyZXR1cm4gbC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChhKSxkKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2lu'@;
put 'YWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0'@;
put 'aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMu'@;
put 'aW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNo'@;
put 'ZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2Vs'@;
put 'KCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0'@;
put 'aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24obCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMu'@;
put 'ZG9tUGxheWVyLmN1cnJlbnRUaW1lPWwqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtjb25zdCBs'@;
put 'PW5ldyBNYXA7dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoZCxoKT0+eyJvZmZzZXQiIT09aCYmbC5zZXQoaCx0aGlzLl9maW5pc2hlZD9kOkVlZSh0aGlzLmVsZW1lbnQsaCkpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9bH10cmlnZ2VyQ2FsbGJhY2so'@;
put 'bCl7Y29uc3QgYT0ic3RhcnQiPT09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxlbmd0aD0wfX1jbGFzcyBSeGV7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVydHkobCl7'@;
put 'cmV0dXJuITB9bWF0Y2hlc0VsZW1lbnQobCxhKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQobCxhKXtyZXR1cm4gX2VlKGwsYSl9Z2V0UGFyZW50RWxlbWVudChsKXtyZXR1cm4gUEgobCl9cXVlcnkobCxhLGQpe3JldHVybiBiZWUobCxhLGQpfWNvbXB1dGVTdHlsZShsLGEsZCl7cmV0dXJu'@;
put 'IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGwpW2FdfWFuaW1hdGUobCxhLGQsaCxmLF89W10pe2NvbnN0IFc9e2R1cmF0aW9uOmQsZGVsYXk6aCxmaWxsOjA9PWg/ImJvdGgiOiJmb3J3YXJkcyJ9O2YmJihXLmVhc2luZz1mKTtjb25zdCBpZT1uZXcgTWFwLGdlPV8uZmlsdGVyKFplPT5aZSBp'@;
put 'bnN0YW5jZW9mIGplZSk7KGZ1bmN0aW9uIEJNZShjLGwpe3JldHVybiAwPT09Y3x8MD09PWx9KShkLGgpJiZnZS5mb3JFYWNoKFplPT57WmUuY3VycmVudFNuYXBzaG90LmZvckVhY2goKG90LGV0KT0+aWUuc2V0KGV0LG90KSl9KTtsZXQgd2U9ZnVuY3Rpb24gSE1lKGMpe3JldHVybiBjLmxl'@;
put 'bmd0aD9jWzBdaW5zdGFuY2VvZiBNYXA/YzpjLm1hcChsPT5TZWUobCkpOltdfShhKS5tYXAoWmU9PkhwKFplKSk7d2U9ZnVuY3Rpb24gak1lKGMsbCxhKXtpZihhLnNpemUmJmwubGVuZ3RoKXtsZXQgZD1sWzBdLGg9W107aWYoYS5mb3JFYWNoKChmLF8pPT57ZC5oYXMoXyl8fGgucHVzaChf'@;
put 'KSxkLnNldChfLGYpfSksaC5sZW5ndGgpZm9yKGxldCBmPTE7ZjxsLmxlbmd0aDtmKyspe2xldCBfPWxbZl07aC5mb3JFYWNoKFQ9Pl8uc2V0KFQsRWVlKGMsVCkpKX19cmV0dXJuIGx9KGwsd2UsaWUpO2NvbnN0IEVlPWZ1bmN0aW9uIER4ZShjLGwpe2xldCBhPW51bGwsZD1udWxsO3JldHVy'@;
put 'biBBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD8oYT1RSChsWzBdKSxsLmxlbmd0aD4xJiYoZD1RSChsW2wubGVuZ3RoLTFdKSkpOmwgaW5zdGFuY2VvZiBNYXAmJihhPVFIKGwpKSxhfHxkP25ldyBJeGUoYyxhLGQpOm51bGx9KGwsd2UpO3JldHVybiBuZXcgamVlKGwsd2UsVyxFZSl9fWxl'@;
put 'dCBPeGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEhLe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLl9uZXh0QW5pbWF0aW9uSWQ9MCx0aGlzLl9yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKGQuYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246T2MuTm9uZSxzdHlsZXM6W10sZGF0YTp7'@;
put 'YW5pbWF0aW9uOltdfX0pfWJ1aWxkKGEpe2NvbnN0IGQ9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7Y29uc3QgaD1BcnJheS5pc0FycmF5KGEpP05LKGEpOmE7cmV0dXJuIHplZSh0aGlzLl9yZW5kZXJlcixudWxsLGQsInJlZ2lzdGVy'@;
put 'IixbaF0pLG5ldyBQeGUoZCx0aGlzLl9yZW5kZXJlcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFkzKSxhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIFB4ZSBleHRl'@;
put 'bmRzIFBtZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5faWQ9bCx0aGlzLl9yZW5kZXJlcj1hfWNyZWF0ZShsLGEpe3JldHVybiBuZXcgRnhlKHRoaXMuX2lkLGwsYXx8e30sdGhpcy5fcmVuZGVyZXIpfX1jbGFzcyBGeGV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5pZD1sLHRo'@;
put 'aXMuZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVyPWgsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixkKX1fbGlzdGVuKGwsYSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1l'@;
put 'bnQsYEBAJHt0aGlzLmlkfToke2x9YCxhKX1fY29tbWFuZChsLC4uLmEpe3JldHVybiB6ZWUodGhpcy5fcmVuZGVyZXIsdGhpcy5lbGVtZW50LHRoaXMuaWQsbCxhKX1vbkRvbmUobCl7dGhpcy5fbGlzdGVuKCJkb25lIixsKX1vblN0YXJ0KGwpe3RoaXMuX2xpc3Rlbigic3RhcnQiLGwpfW9u'@;
put 'RGVzdHJveShsKXt0aGlzLl9saXN0ZW4oImRlc3Ryb3kiLGwpfWluaXQoKXt0aGlzLl9jb21tYW5kKCJpbml0Iil9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLl9jb21tYW5kKCJwbGF5IiksdGhpcy5fc3RhcnRlZD0hMH1wYXVzZSgpe3RoaXMuX2NvbW1h'@;
put 'bmQoInBhdXNlIil9cmVzdGFydCgpe3RoaXMuX2NvbW1hbmQoInJlc3RhcnQiKX1maW5pc2goKXt0aGlzLl9jb21tYW5kKCJmaW5pc2giKX1kZXN0cm95KCl7dGhpcy5fY29tbWFuZCgiZGVzdHJveSIpfXJlc2V0KCl7dGhpcy5fY29tbWFuZCgicmVzZXQiKSx0aGlzLl9zdGFydGVkPSExfXNl'@;
put 'dFBvc2l0aW9uKGwpe3RoaXMuX2NvbW1hbmQoInNldFBvc2l0aW9uIixsKX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5lbmdpbmUucGxheWVyc1srdGhpcy5pZF0/LmdldFBvc2l0aW9uKCk/PzB9fWZ1bmN0aW9uIHplZShjLGwsYSxkLGgpe3JldHVybiBjLnNldFByb3Bl'@;
put 'cnR5KGwsYEBAJHthfToke2R9YCxoKX1jb25zdCBVZWU9IkAuZGlzYWJsZWQiO2xldCBIeGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kZWxlZ2F0ZT1hLHRoaXMuZW5naW5lPWQsdGhpcy5fem9uZT1oLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lk'@;
put 'PTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCxkLm9uUmVtb3ZhbENvbXBsZXRlPShmLF8pPT57Y29uc3QgVD1fPy5wYXJlbnROb2RlKGYpO1QmJl8ucmVtb3ZlQ2hpbGQoVCxmKX19Y3Jl'@;
put 'YXRlUmVuZGVyZXIoYSxkKXtjb25zdCBmPXRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIoYSxkKTtpZighKGEmJmQmJmQuZGF0YSYmZC5kYXRhLmFuaW1hdGlvbikpe2xldCBnZT10aGlzLl9yZW5kZXJlckNhY2hlLmdldChmKTtyZXR1cm4gZ2V8fChnZT1uZXcgWmVlKCIiLGYsdGhpcy5l'@;
put 'bmdpbmUsKCk9PnRoaXMuX3JlbmRlcmVyQ2FjaGUuZGVsZXRlKGYpKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChmLGdlKSksZ2V9Y29uc3QgXz1kLmlkLFQ9ZC5pZCsiLSIrdGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKFQsYSk7Y29uc3Qg'@;
put 'Vz1nZT0+e0FycmF5LmlzQXJyYXkoZ2UpP2dlLmZvckVhY2goVyk6dGhpcy5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKF8sVCxhLGdlLm5hbWUsZ2UpfTtyZXR1cm4gZC5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKFcpLG5ldyBOeGUodGhpcyxULGYsdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5f'@;
put 'Y2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30pfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhhLGQsaCl7YT49MCYmYTx0aGlz'@;
put 'Ll9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bigoKT0+ZChoKSk6KDA9PXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5sZW5ndGgmJnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fem9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIuZm9yRWFjaChmPT57'@;
put 'Y29uc3RbXyxUXT1mO18oVCl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtkLGhdKSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1'@;
put 'bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53'@;
put 'aGVuUmVuZGVyaW5nRG9uZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoZWspLGFyKE5vKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgWmVle2NvbnN0cnVjdG9y'@;
put 'KGwsYSxkLGgpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLmRlbGVnYXRlPWEsdGhpcy5lbmdpbmU9ZCx0aGlzLl9vbkRlc3Ryb3k9aH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveU5vZGUobCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT8uKGwpfWRlc3Ry'@;
put 'b3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0pfSksdGhpcy5fb25EZXN0cm95Py4o'@;
put 'KX1jcmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChsLGEpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudChsKX1jcmVhdGVUZXh0KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQobCl9'@;
put 'YXBwZW5kQ2hpbGQobCxhKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKGwsYSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsITEpfWluc2VydEJlZm9yZShsLGEsZCxoPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShsLGEsZCksdGhpcy5lbmdpbmUu'@;
put 'b25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsaCl9cmVtb3ZlQ2hpbGQobCxhLGQpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsYSx0aGlzLmRlbGVnYXRlKX1zZWxlY3RSb290RWxlbWVudChsLGEpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVt'@;
put 'ZW50KGwsYSl9cGFyZW50Tm9kZShsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKGwpfW5leHRTaWJsaW5nKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKGwpfXNldEF0dHJpYnV0ZShsLGEsZCxoKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZShsLGEsZCxo'@;
put 'KX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGwsYSxkKX1hZGRDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3MobCxhKX1yZW1vdmVDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3MobCxhKX1zZXRTdHlsZShsLGEs'@;
put 'ZCxoKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKGwsYSxkLGgpfXJlbW92ZVN0eWxlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKGwsYSxkKX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNoYXJBdCgwKSYmYT09VWVlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCwhIWQpOnRo'@;
put 'aXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfXNldFZhbHVlKGwsYSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZShsLGEpfWxpc3RlbihsLGEsZCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuZW5naW5lLmRpc2FibGVB'@;
put 'bmltYXRpb25zKGwsYSl9fWNsYXNzIE54ZSBleHRlbmRzIFplZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGEsZCxoLGYpLHRoaXMuZmFjdG9yeT1sLHRoaXMubmFtZXNwYWNlSWQ9YX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNoYXJBdCgwKT8iLiI9PWEuY2hhckF0KDEpJiZh'@;
put 'PT1VZWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLGQ9dm9pZCAwPT09ZHx8ISFkKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsbCxhLnNsaWNlKDEpLGQpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfWxpc3RlbihsLGEsZCl7aWYoIkAiPT1hLmNoYXJB'@;
put 'dCgwKSl7Y29uc3QgaD1mdW5jdGlvbiBWeGUoYyl7c3dpdGNoKGMpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIGN9fShsKTtsZXQgZj1hLnNsaWNl'@;
put 'KDEpLF89IiI7cmV0dXJuIkAiIT1mLmNoYXJBdCgwKSYmKFtmLF9dPWZ1bmN0aW9uIEJ4ZShjKXtjb25zdCBsPWMuaW5kZXhPZigiLiIpO3JldHVybltjLnN1YnN0cmluZygwLGwpLGMuc2xpY2UobCsxKV19KGYpKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxoLGYsXyxU'@;
put 'PT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhULl9kYXRhfHwtMSxkLFQpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX19bGV0IGp4ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgZWt7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoYS5ib2R5LGQs'@;
put 'aCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExzKSxhcihGSCksYXIoR0gpLGFyKHg1KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29u'@;
put 'c3QgWWVlPVt7cHJvdmlkZTpISyx1c2VDbGFzczpPeGV9LHtwcm92aWRlOkdILHVzZUZhY3Rvcnk6ZnVuY3Rpb24genhlKCl7cmV0dXJuIG5ldyBheGV9fSx7cHJvdmlkZTplayx1c2VDbGFzczpqeGV9LHtwcm92aWRlOlkzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVXhlKGMsbCxhKXtyZXR1cm4g'@;
put 'bmV3IEh4ZShjLGwsYSl9LGRlcHM6W0lPLGVrLE5vXX1dLGVOPVt7cHJvdmlkZTpGSCx1c2VGYWN0b3J5OigpPT5uZXcgUnhlfSx7cHJvdmlkZTp0Uyx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5ZZWVdLFdlZT1be3Byb3ZpZGU6RkgsdXNlQ2xhc3M6eWVlfSx7cHJvdmlkZTp0'@;
put 'Uyx1c2VWYWx1ZToiTm9vcEFuaW1hdGlvbnMifSwuLi5ZZWVdO2xldCBaeGU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6YS5kaXNhYmxlQW5pbWF0aW9ucz9XZWU6ZU59fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6ZU4saW1wb3J0czpbRUddfSksY30pKCksWXhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbm90LWZvdW5kIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsInAiKSxOZSgyLCI0MDQgLSBOb3QgRm91bmQiKSx5ZSgpKCkpfX0pLGN9KSgpLEdlZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7bGV0IGY9bmV3IEJsb2IoW2FdLHt0eXBl'@;
put 'OiJ0ZXh0L3BsYWluIn0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGYsYCR7ZH0uJHtofWApO2Vsc2V7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO18uaHJlZj0iZGF0YTp0'@;
put 'ZXh0L3BsYWluLCIrZW5jb2RlVVJJQ29tcG9uZW50KGEpLF8uZG93bmxvYWQ9YCR7ZH0uJHtofWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfKSxfLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChfKX19cmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57'@;
put 'bGV0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9KCk9PntmLnJlc3VsdCYmZChKU09OLnBhcnNlKGYucmVzdWx0LnRvU3RyaW5nKCkpKX0sZi5yZWFkQXNUZXh0KGEpfSl9Y2xlYXJVcGxvYWRJbnB1dChhKXthLnRhcmdldC52YWx1ZT0iIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gV3hlKGMsbCl7MSZjJiYoQnIoMCksbWUoMSwic3BhbiIsMTkpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCks'@;
put 'bWUoMywicCIpLE5lKDQsIkRlcGxveWluZy4uLiIpLHllKCksVXIoKSl9ZnVuY3Rpb24gR3hlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uICR4ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBxeGUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29u'@;
put 'IiwzMCl9ZnVuY3Rpb24gS3hlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIFh4ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjIpLFFlKDEscXhlLDEsMCwiY2xyLWljb24iLDIzKSxRZSgyLEt4ZSwxLDAsImNsci1pY29uIiwyNCksbWUoMywicCIpLE5lKDQsIkNy'@;
put 'ZWF0ZSBkYXRhYmFzZSIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLENlKDEpLFJlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIEp4ZShjLGwpezEm'@;
put 'YyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBReGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJwIiwyMCksTmUoMiwiRG9uZSIpLHllKCkscXQoMywiaHIiLDIxKSxtZSg0LCJkaXYiLDIyKSxRZSg1LEd4ZSwxLDAsImNsci1pY29uIiwyMyksUWUoNiwkeGUs'@;
put 'MSwwLCJjbHItaWNvbiIsMjQpLG1lKDcsInAiKSxOZSg4LCJEZXBsb3kgU0FTIEpvYnMiKSx5ZSgpKCksUWUoOSxYeGUsNSwyLCJkaXYiLDI1KSxxdCgxMCwiaHIiLDIxKSxtZSgxMSwiZGl2IiwyNikoMTIsImJ1dHRvbiIsMjcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxRZSgxMyxKeGUsMSwwLCJjbHItaWNvbiIsMjQpLE5lKDE0LCIgTEFVTkNIIC8gQ09ORklHVVJFICIpLHllKCksbWUoMTUsImJ1dHRvbiIsMjgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdCho'@;
put 'LmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxOZSgxNiwiIERvd25sb2FkIGxvZyAiKSx5ZSgpKCkscXQoMTcsImhyIiwyMSksbWUoMTgsImRpdiIsMjYpKDE5LCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5hdXRvZGVwbG95aW5nPSExLGp0KGguYXV0b2RlcGxveURvbmU9ITEpfSksTmUoMjAsIiBDbG9zZSAiKSx5ZSgpLG1lKDIxLCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9wZW5TYXNS'@;
put 'ZXF1ZXN0c01vZGFsKCkpfSksTmUoMjIsIiBTQVMgUmVxdWVzdHMgIikseWUoKSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLFJlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLENlKDEpLFJlKCJuZ0lmIiwhYS5hdXRvRGVwbG95U3RhdHVz'@;
put 'LmRlcGxveVNlcnZpY2VQYWNrKSxDZSgzKSxSZSgibmdJZiIsbnVsbCE9PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSksQ2UoNCksUmUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrfHwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtl'@;
put 'RGF0YSl9fWZ1bmN0aW9uIGVFZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTYpKDEsImRpdiIsMTcpLFFlKDIsV3hlLDUsMCwibmctY29udGFpbmVyIiwxOCksUWUoMyxReGUsMjMsNCwibmctY29udGFpbmVyIiwxOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJ'@;
put 'ZiIsIWEuYXV0b2RlcGxveURvbmUpLENlKDEpLFJlKCJuZ0lmIixhLmF1dG9kZXBsb3lEb25lKX19bGV0IHRFZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5kZXBsb3lTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5s'@;
put 'b2dnZXJTZXJ2aWNlPWYsdGhpcy5zYXNKc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBFcix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhp'@;
put 'cy5qc29uRmlsZT1udWxsLHRoaXMuYXV0b2RlcGxveWluZz0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2U9ITEs'@;
put 'dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5hdXRvRGVwbG95U3RhdHVzPXtkZXBsb3lTZXJ2aWNlUGFjazpudWxsLHJ1bk1ha2VEYXRhOm51bGx9fW5nT25Jbml0KCl7fWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5hdXRvZGVwbG95'@;
put 'aW5nPSEwLGEuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvYyx2b2lkIDAsdm9pZCAwLCEwKSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITAsYS5p'@;
put 'c0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITEsYS5ldmVu'@;
put 'dFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCksYS5hdXRvZGVwbG95aW5nPSExLHZvaWQoYS5hdXRvZGVwbG95RG9uZT0hMSl9YS5pc1N1Ym1pdHRpbmdKc29uPSExLGEucmVjcmVhdGVEYXRhYmFzZT9hLmNyZWF0ZURh'@;
put 'dGFiYXNlKCk6YS5hdXRvZGVwbG95RG9uZT0hMH0pKCl9Y3JlYXRlRGF0YWJhc2UoKXt0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21w'@;
put 'dXRlQXBpOiExLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4dE5hbWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihoPT57dGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpT'@;
put 'T04uc3RyaW5naWZ5KGgpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1ofXRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hIShoLnJlc3VsdCYmaC5yZXN1bHQubGVuZ3RoPjApfSkuY2F0Y2goaD0+e3RoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hMSx0aGlz'@;
put 'LmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoaCl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWh9fSl9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1vbkpz'@;
put 'b25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKGgpfSkoKX1yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChhKXshMD09PWEudGFyZ2V0LmNo'@;
put 'ZWNrZWQmJih0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMCl9Y2xlYXJVcGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vcGVuU2FzUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9bmF2aWdh'@;
put 'dGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh2bCksdHQoR2VlKSx0dChvYSksdHQodzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9t'@;
put 'YXRpYy1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIixhcHBMb2M6ImFwcExvYyIsZGNQYXRoOiJkY1BhdGgiLHNlbGVjdGVkQWRtaW5Hcm91cDoic2VsZWN0ZWRBZG1p'@;
put 'bkdyb3VwIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQ2LHZhcnM6MTAsY29uc3RzOltbImNsYXNzIiwiYXV0by1kZXBsb3kiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwi'@;
put 'Y2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwibXQtMCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5n'@;
put 'ZSIsImNsaWNrIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwz'@;
put 'LCJjbGljayJdLFsidHlwZSIsImZpbGUiLCJoaWRkZW4iLCIiLDMsImNsaWNrIiwiY2hhbmdlIl0sWyJ1cGxvYWRKc29uQXV0byIsIiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFs'@;
put 'LWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiYXV0by1kZXBsb3kiXSxbMSwic3Bpbm5lci1ib3giXSxbNCwibmdJZiJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1tZCJdLFsxLCJt'@;
put 'LTAiLCJhbGlnbi1zZWxmLXN0YXJ0Il0sWzEsInctMTAwIl0sWzEsImRlcGxveS1zdGF0dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1lcnJvciIsInNoYXBlIiwidGltZXMtY2ly'@;
put 'Y2xlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1zdGF0dXMtcm93Iiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLDMs'@;
put 'ImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLCJhbGlnbi1zZWxmLWVuZCIsMywiY2xpY2siXSxbInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsMSwiZGVwbG95LXN1Y2Nlc3MiXSxbInNoYXBlIiwidGltZXMtY2lyY2xlIiwxLCJkZXBsb3kt'@;
put 'ZXJyb3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9Vm4oKTtRZSgwLGVFZSw0LDIsImRpdiIsMCksbWUoMSwiaDQiLDEpLE5lKDIsIlZpeWEgRGVwbG95IikseWUoKSxxdCgzLCJociIpLG1lKDQsImxhYmVsIiwyKSxOZSg1LCJBcHAgTG9jIikseWUoKSxtZSg2'@;
put 'LCJkaXYiLDMpKDcsImRpdiIsNCkoOCwicCIsNSksTmUoOSkseWUoKSgpKCksbWUoMTAsImxhYmVsIiwyKSxOZSgxMSwiREMgTG9jIikseWUoKSxtZSgxMiwiZGl2IiwzKSgxMywiZGl2Iiw0KSgxNCwicCIsNSksTmUoMTUpLHllKCkoKSgpLG1lKDE2LCJsYWJlbCIsMiksTmUoMTcsIlNBUyBB'@;
put 'ZG1pbiBncm91cCIpLHllKCksbWUoMTgsImRpdiIsMykoMTksImRpdiIsNCkoMjAsInAiLDUpLE5lKDIxKSx5ZSgpKCkoKSxtZSgyMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMywiaW5wdXQiLDYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5yZWNyZWF0ZURh'@;
put 'dGFiYXNlPV99KSgiY2xpY2siLGZ1bmN0aW9uKF8pe3JldHVybiBkLnJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKF8pfSkseWUoKSxtZSgyNCwibGFiZWwiKSxOZSgyNSwiUmVjcmVhdGUgZGF0YWJhc2UiKSx5ZSgpKCkscXQoMjYsImhyIiksbWUoMjcsImJ1dHRvbiIsNykseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBkLmV4ZWN1dGVKc29uKCl9KSxOZSgyOCkseWUoKSxtZSgyOSwiYnV0dG9uIiw4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGgpLGp0KCRpKDMyKS5jbGljaygpKX0pLE5lKDMwLCIgVXBsb2FkIGRpZmZlcmVudCBmaWxlIHRvIGRlcGxveVxuIiks'@;
put 'eWUoKSxtZSgzMSwiaW5wdXQiLDksMTApLHh0KCJjbGljayIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuY2xlYXJVcGxvYWRJbnB1dChfKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLm9uSnNvbkZpbGVDaGFuZ2UoXyl9KSx5ZSgpLG1lKDMzLCJjbHItbW9kYWwiLDExKSx4dCgiY2xy'@;
put 'TW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9X30pLG1lKDM0LCJoMyIsMTIpLE5lKDM1LCJXYXJuaW5nIikseWUoKSxtZSgzNiwiZGl2IiwxMyksTmUoMzcsIiBUaGlzIGFjdGlvbiB3aWxsIHJlY3JlYXRlIHRoZSBkYXRhYmFzZSAo'@;
put 'aWYgaXQgZXhpc3RzKS4gRm9yIGFuIGluaXRpYWwgZGVwbG95bWVudCwgdGhpcyBpcyBleHBlY3RlZC4gSWYgdGhpcyBpcyBhIHJlLWRlcGxveW1lbnQsIHlvdSB3aWxsIGxvc2UgYW55IGV4aXN0aW5nIHRhYmxlcyBpbiAiKSxtZSgzOCwic3Ryb25nIiksTmUoMzkpLHllKCksTmUoNDAsIi4g'@;
put 'IikseWUoKSxtZSg0MSwiZGl2IiwxNCkoNDIsImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsZC5yZWNyZWF0ZURhdGFiYXNlPSExfSksTmUoNDMsIiBDYW5jZWwgIikseWUoKSxtZSg0NCwiYnV0dG9uIiwxNSkseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSxkLnJlY3JlYXRlRGF0YWJhc2U9ITB9KSxOZSg0NSwiIE9rICIpLHllKCkoKSgpfTImYSYmKFJlKCJuZ0lmIixkLmF1dG9kZXBsb3lpbmcpLENlKDkpLG9yKGQuYXBwTG9jKSxDZSg2KSxvcihkLmRj'@;
put 'UGF0aCksQ2UoNiksb3IoZC5zZWxlY3RlZEFkbWluR3JvdXApLENlKDIpLFJlKCJuZ01vZGVsIixkLnJlY3JlYXRlRGF0YWJhc2UpLENlKDQpLFJlKCJkaXNhYmxlZCIsIWQuanNvbkZpbGUpLENlKDEpLGdyKCIgRGVwbG95ICIsZC5qc29uRmlsZT8iIjoiKGpzb24gZmlsZSBpcyBub3QgYXZh'@;
put 'aWxhYmxlKSIsIlxuIiksQ2UoNSksUmUoImNsck1vZGFsT3BlbiIsZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNiksb3IoZC5kY1BhdGgpKX0sZGVwZW5kZW5jaWVzOltaaSxTMCxCcyxPcyxrYSxvdSxzdSxVcyxEMCxUMF0sc3R5bGVzOlsiLmF1'@;
put 'dG8tZGVwbG95W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjQpO3otaW5kZXg6MTAwfS5zcGlubmVyLWJveFtfbmdjb250'@;
put 'ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cGFkZGluZzoyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MXB4IDFw'@;
put 'eCA4cHggIzAwMDAwMDgyfS5zcGlubmVyLWJveFtfbmdjb250ZW50LSVDT01QJV0gICAuYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3dpZHRoOjEwMCV9LmRlcGxveS1zdGF0dXMtcm93W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFydH0uZGVwbG95LXN0YXR1cy1yb3dbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAwIDEwcHh9LmRlcGxveS1zdWNjZXNzW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtjb2xvcjojNmVjZjQ0fS5kZXBsb3ktZXJyb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlNzRjM2N9LmRlcGxveS11bmRldGVybWluYXRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2NhY2FjYX1ocltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLWJv'@;
put 'dHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMjcwNTg4MjM1Myl9Il19KSxjfSkoKTtmdW5jdGlvbiBuRWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDYpKDEsInAiLDcpLE5lKDIsIlBsZWFzZSBsb2cgaW4gZmlyc3QiKSx5ZSgpLG1lKDMsImxhYmVsIiw4KSxOZSg0LCJVc2VybmFtZSIpLHll'@;
put 'KCksbWUoNSwiZGl2Iiw5KSg2LCJkaXYiLDEwKSxxdCg3LCJpbnB1dCIsMTEpLHllKCkoKSxtZSg4LCJsYWJlbCIsMTIpLE5lKDksIlBhc3N3b3JkIikseWUoKSxtZSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCkscXQoMTIsImlucHV0IiwxMykseWUoKSgpLG1lKDEzLCJidXR0b24iLDE0KSxO'@;
put 'ZSgxNCwiTG9nIGluIikseWUoKSgpKX1mdW5jdGlvbiByRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDM2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLmlkKSxDZSgxKSxncigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uIGlFZShjLGwp'@;
put 'e2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksZ3IoIiggIixhLmF0dHJpYnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5jdGlvbiBvRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDM2KSxOZSgxKSxRZSgyLGlF'@;
put 'ZSwyLDEsInNwYW4iLDUpLGJhKDMsImpzb24iKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLm5hbWUpLENlKDEpLGdyKCIgIixhLm5hbWUsIiAiKSxDZSgxKSxSZSgibmdJZiIsInt9IiE9VWwoMywzLGEuYXR0cmlidXRlcykpfX1mdW5jdGlvbiBzRWUoYyxs'@;
put 'KXsxJmMmJihtZSgwLCJzcGFuIiksTmUoMSwiSlNPTiBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5IikseWUoKSl9ZnVuY3Rpb24gYUVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5k'@;
put 'b3dubG9hZFNhc1ByZWNvZGVGaWxlKCkpfSkscXQoMSwiY2xyLWljb24iLDM4KSx5ZSgpfX1mdW5jdGlvbiBsRWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJwIiwzOSksTmUoMiwiRmlsZSBleGVjdXRlIGNvbXBsZXRlZCIpLHllKCkscXQoMywiaHIiKSxtZSg0LCJk'@;
put 'aXYiKSg1LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5kb3dubG9hZEZpbGUoaC5qb2JMb2csImV4ZWN1dGUtc2NyaXB0LWxvZyIsInR4dCIpKX0pLE5lKDYsIiBEb3dubG9hZCBsb2cgIikseWUoKSgpLFVyKCl9fWZ1'@;
put 'bmN0aW9uIGNFZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxncigiICIsYS5tYWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0aW9uIHVFZShjLGwpezEmYyYmKEJyKDApLG1lKDEsInNwYW4iLDI1KSxOZSgyLCIgVmFs'@;
put 'aWRhdGluZyBkZXBsb3kuLi4gIikseWUoKSxtZSgzLCJzcGFuIiksTmUoNCwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLHllKCksVXIoKSl9ZnVuY3Rpb24gZEVlKGMsbCl7MSZjJiYoQnIoMCkscXQoMSwiY2xyLWljb24iLDQ2KSxtZSgyLCJzcGFuIiksTmUoMywiIFZhbGlkYXRpb24gZmFp'@;
put 'bGVkICIpLHllKCksVXIoKSl9ZnVuY3Rpb24gaEVlKGMsbCl7MSZjJiYoQnIoMCkscXQoMSwiY2xyLWljb24iLDQ3KSxtZSgyLCJzcGFuIiksTmUoMywiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLHllKCksVXIoKSl9ZnVuY3Rpb24gZkVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0NSks'@;
put 'UWUoMSx1RWUsNSwwLCJuZy1jb250YWluZXIiLDUpLFFlKDIsZEVlLDQsMCwibmctY29udGFpbmVyIiw1KSxRZSgzLGhFZSw0LDAsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLmlzVmFsaWRhdGluZyksQ2UoMSksUmUoIm5nSWYi'@;
put 'LCFhLmlzVmFsaWRhdGluZyYmImVycm9yIj09PWEudmFsaWRhdGlvblN0YXRlKSxDZSgxKSxSZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZhbGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uIHBFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsInAi'@;
put 'LDM5KSxOZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIikseWUoKSxxdCgzLCJociIpLFFlKDQsY0VlLDIsMSwiZGl2Iiw0MSksbWUoNSwiYnV0dG9uIiw0MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLE5lKDYs'@;
put 'IiBMZXQncyBnZXQgc3RhcnRlZCAiKSx5ZSgpLG1lKDcsImJ1dHRvbiIsNDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxO'@;
put 'ZSg4LCIgRG93bmxvYWQgbG9nICIpLHllKCksbWUoOSwiYnV0dG9uIiw0MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLE5lKDEwLCIgVmFsaWRhdGUgIikseWUoKSxRZSgxMSxmRWUsNCwzLCJkaXYiLDQzKSxVcigpfWlm'@;
put 'KDImYyl7Y29uc3QgYT1WZSgyKTtDZSg0KSxSZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKSxDZSg3KSxSZSgibmdJZiIsIm5vbmUiIT09YS52YWxpZGF0aW9uU3RhdGV8fGEuaXNWYWxpZGF0aW5nKX19Y29uc3QgdE49ZnVuY3Rpb24oKXtyZXR1cm57c3RhbmRhbG9uZToh'@;
put 'MH19O2Z1bmN0aW9uIGdFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImZvcm0iKSgyLCJkaXYiLDE1KSgzLCJsYWJlbCIsMTYpLE5lKDQsIkFkbWluIGdyb3VwIikseWUoKSxtZSg1LCJkaXYiLDE3KSg2LCJkaXYiLDE4KSg3LCJzZWxlY3QiLDE5KSx4dCgibmdNb2Rl'@;
put 'bENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuc2VsZWN0ZWRBZG1pbkdyb3VwPWgpfSksUWUoOCxyRWUsMiwyLCJvcHRpb24iLDIwKSx5ZSgpKCkoKSgpLG1lKDksImRpdiIsMTUpKDEwLCJkaXYiKSgxMSwibGFiZWwiLDE2KSxOZSgxMiwiQ29udGV4dCIpLHllKCks'@;
put 'bWUoMTMsImRpdiIsMTcpKDE0LCJkaXYiLDE4KSgxNSwic2VsZWN0IiwyMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnNlbGVjdGVkQ29udGV4dD1oKX0pLFFlKDE2LG9FZSw0LDUsIm9wdGlvbiIsMjApLHllKCkoKSgpLG1lKDE3LCJidXR0'@;
put 'b24iLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZXhlY3V0YWJsZUNvbnRleHQoKSl9KSxxdCgxOCwiY2xyLWljb24iLDIzKSx5ZSgpKCksbWUoMTksImRpdiIsMjQpKDIwLCJzcGFuIiwyNSksTmUoMjEsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLHll'@;
put 'KCksbWUoMjIsInNwYW4iKSxOZSgyMywiIExvYWRpbmcgY29udGV4dHMuLi4gIikseWUoKSgpLG1lKDI0LCJsYWJlbCIsMjYpLE5lKDI1LCJEQyBMb2MiKSx5ZSgpLG1lKDI2LCJkaXYiLDkpKDI3LCJkaXYiLDEwKSgyOCwiaW5wdXQiLDI3KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o'@;
put 'aCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZGNQYXRoPWgpfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNhdmVEY1BhdGgoKSl9KSx5ZSgpKCkoKSxtZSgyOSwicCIsMjgpLE5lKDMwLCIgU2VsZWN0IEpTT04gZmlsZSB0byB1cGxvYWQgKGpzb24gYnVpbGQg'@;
put 'ZmlsZSBwcmVsb2FkZWQpOiAiKSx5ZSgpLG1lKDMxLCJkaXYiLDI5KSgzMiwiaW5wdXQiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmNsZWFyVXBsb2FkSW5wdXQoaCkpfSkoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCku'@;
put 'b25Kc29uRmlsZUNoYW5nZShoKSl9KSx5ZSgpKCksbWUoMzMsImRpdiIsMzEpKDM0LCJidXR0b24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZXhlY3V0ZUpzb24oKSl9KSxOZSgzNSwiIFNVQk1JVCBKU09OICIpLHllKCksUWUoMzYsc0VlLDIsMCwi'@;
put 'c3BhbiIsNSkseWUoKSxtZSgzNywicCIsMjgpLE5lKDM4LCJTZWxlY3QgU0FTIGZpbGUgdG8gdXBsb2FkOiIpLHllKCksbWUoMzksImRpdiIsMjkpKDQwLCJpbnB1dCIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9'@;
put 'KSgiY2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCk7cmV0dXJuIGYub25TYXNGaWxlQ2hhbmdlKGgpLGp0KGYuZG93bmxvYWRGaWxlQnRuPSEwKX0pLHllKCksUWUoNDEsYUVlLDIsMCwiYnV0dG9uIiwzMykseWUoKSxtZSg0MiwiZGl2IiwzMSkoNDMsImJ1dHRvbiIsMzQp'@;
put 'LHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5leGVjdXRlU0FTKCkpfSksTmUoNDQsIiBTVUJNSVQgIikseWUoKSgpKCksUWUoNDUsbEVlLDcsMCwibmctY29udGFpbmVyIiw1KSxtZSg0NiwiYnV0dG9uIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBCdChhKSxqdChWZSgpLmNyZWF0ZURhdGFiYXNlKCkpfSksTmUoNDcsIiBDcmVhdGUgRGF0YWJhc2UgIikseWUoKSxRZSg0OCxwRWUsMTIsMiwibmctY29udGFpbmVyIiw1KSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNyksUmUoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1p'@;
put 'bkdyb3VwKSgibmdNb2RlbE9wdGlvbnMiLCRzKDE5LHROKSksQ2UoMSksUmUoIm5nRm9yT2YiLGEuYWRtaW5Hcm91cHMpLENlKDIpLGRyKCJoaWRkZW4iLGEuY29udGV4dHNMb2FkaW5nKSxDZSg1KSxSZSgibmdNb2RlbCIsYS5zZWxlY3RlZENvbnRleHQpKCJuZ01vZGVsT3B0aW9ucyIsJHMo'@;
put 'MjAsdE4pKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5hbGxDb250ZXh0cyksQ2UoMyksZHIoImhpZGRlbiIsIWEuY29udGV4dHNMb2FkaW5nKSxDZSg5KSxSZSgibmdNb2RlbCIsYS5kY1BhdGgpKCJuZ01vZGVsT3B0aW9ucyIsJHMoMjEsdE4pKSxDZSg2KSxSZSgiY2xyTG9hZGluZyIsYS5pc1N1'@;
put 'Ym1pdHRpbmdKc29uKSxDZSgyKSxSZSgibmdJZiIsYS5pc0pzb25TdWJtaXR0ZWQpLENlKDUpLFJlKCJuZ0lmIixhLmRvd25sb2FkRmlsZUJ0biksQ2UoMiksUmUoImNsckxvYWRpbmciLGEuZXhlY3V0aW5nU2NyaXB0KSxDZSgyKSxSZSgibmdJZiIsYS5qb2JMb2cubGVuZ3RoPjApLENlKDEp'@;
put 'LFJlKCJjbHJMb2FkaW5nIixhLmNyZWF0ZURhdGFiYXNlTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCl9fWxldCBtRWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmV2ZW50U2Vydmlj'@;
put 'ZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMuZGVwbG95U2VydmljZT1mLHRoaXMuc2FzSnNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgRXIsdGhpcy5uZWVkc0xvZ2luPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5hbGxDb250ZXh0'@;
put 'cz1bXSx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLnNlbGVjdGVkQ29udGV4dD0iIix0aGlzLmpvYkxvZz0iIix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhpcy5saW5lc09mQ29kZT1bXSx0aGlzLmZpbGVOYW1lPSIiLHRo'@;
put 'aXMucHJlbG9hZGVkRmlsZT0hMCx0aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSExLHRoaXMuY29udGV4dHNMb2FkaW5nPSExLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMuZXhlY3V0aW5nU2NyaXB0PSExLHRoaXMuZG93bmxvYWRGaWxlQnRuPSExLHRoaXMuaXNWYWxpZGF0aW5n'@;
put 'PSExLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9Im5vbmUifW5nT25Jbml0KCl7fWV4ZWN1dGFibGVDb250ZXh0KCl7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe30pKCl9Y2xlYXJV'@;
put 'cGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vblNhc0ZpbGVDaGFuZ2UoYSl7dGhpcy5wcmVsb2FkZWRGaWxlPSExO2xldCBkPWEudGFyZ2V0LmZpbGVzWzBdO3RoaXMuZmlsZU5hbWU9ZC5uYW1lO2xldCBoPW5ldyBGaWxlUmVhZGVyO2gub25s'@;
put 'b2FkPSgpPT57aC5yZXN1bHQmJih0aGlzLmxpbmVzT2ZDb2RlPWgucmVzdWx0LnNwbGl0KCJcbiIpLHRoaXMubGluZXNPZkNvZGU9dGhpcy5saW5lc09mQ29kZS5maWx0ZXIoZj0+IiIhPT1mJiZudWxsIT09ZiksdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMCx0aGlzLmFkZFByZWNvZGVMaW5l'@;
put 'cygpKX0saC5yZWFkQXNUZXh0KGQpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfWFkZFByZWNvZGVMaW5lcygp'@;
put 'e3RoaXMubGluZXNPZkNvZGUudW5zaGlmdChgJWxldCBjb250ZXh0PSR7dGhpcy5zZWxlY3RlZENvbnRleHR9O2AsYCVsZXQgYXBwTG9jPSR7dGhpcy5hcHBMb2N9O2AsYCVsZXQgYWRtaW49JHt0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cH07YCxgJWxldCBkY3BhdGg9JHt0aGlzLmRjUGF0aH07'@;
put 'YCl9ZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpe2xldCBhPXRoaXMubGluZXNPZkNvZGUuam9pbigiXG4iKSxkPXRoaXMuZmlsZU5hbWUuc3BsaXQoIi4iKVswXTt0aGlzLmRvd25sb2FkRmlsZShhLGQsInNhcyIpfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNl'@;
put 'LmRvd25sb2FkRmlsZShhLGQsaCl9c2F2ZURjUGF0aCgpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJkZXBsb3lfZGNfbG9jIix0aGlzLmRjUGF0aCl9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEu'@;
put 'c2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHZvaWQgMCx2b2lkIDAsITApLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04u'@;
put 'c3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2Usdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1oP2g6ZH1gKX1hLmlzU3VibWl0dGluZ0pzb249ITF9KSgpfWV4ZWN1dGVTQVMoKXt2YXIg'@;
put 'YT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmV4ZWN1dGluZ1NjcmlwdD0hMCxhLmpvYkxvZz0iIixhLm1ha2VEYXRhUmVzcG9uc2U9IiI7dHJ5e2xldCBkPXlpZWxkIGEuc2FzSnMuZXhlY3V0ZVNjcmlwdCh7ZmlsZU5hbWU6YS5maWxlTmFtZSxsaW5lc09mQ29kZTphLmxpbmVzT2ZD'@;
put 'b2RlLGNvbnRleHROYW1lOmEuc2VsZWN0ZWRDb250ZXh0fSk7YS5sb2dnZXJTZXJ2aWNlLmxvZyhkKSwic3RyaW5nIj09dHlwZW9mIGQubG9nJiYoZC5sb2c9SlNPTi5wYXJzZShkLmxvZykpLCJlcnJvciI9PT1kLmpvYlN0YXR1cz9hbGVydCgiRXJyb3IhIik6YS5qb2JMb2c9ZC5sb2cuaXRl'@;
put 'bXM/ZC5sb2cuaXRlbXMubWFwKGg9PmgubGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShkLmxvZyksYS5leGVjdXRpbmdTY3JpcHQ9ITF9Y2F0Y2h7YS5leGVjdXRpbmdTY3JpcHQ9ITF9fSkoKX1jcmVhdGVEYXRhYmFzZShhPSEwKXtpZihhKXtsZXQgZj10aGlzLnNhc1NlcnZpY2Uu'@;
put 'Z2V0U2FzanNDb25maWcoKS5zZXJ2ZXJVcmwrIi9TQVNKb2JFeGVjdXRpb24vP19wcm9ncmFtPSIrdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiL2FkbWluL21ha2VkYXRhJkFETUlOPSIrdGhpcy5zZWxlY3RlZEFkbWluR3JvdXArIiZEQ1BBVEg9Iit0aGlzLmRjUGF0aCsiJl9k'@;
put 'ZWJ1Zz0xMzEiO3dpbmRvdy5vcGVuKGYsIl9ibGFuayIpfWVsc2UgdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITAsdGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIse2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERDUEFUSDp0aGlz'@;
put 'LmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFwaTohMSxjb250ZXh0TmFtZTp0aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+e3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5z'@;
put 'dHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITF9KS5jYXRjaChmPT57dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITE7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0'@;
put 'aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn19KX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9dmFsaWRhdGVEZXBsb3koKXt0aGlzLmlzVmFsaWRhdGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50'@;
put 'aGVuKGE9Pnt0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGEpLHRoaXMudmFsaWRhdGlvblN0YXRlPWEuc2FzbGlicz8ic3VjY2VzcyI6ImVycm9yIix0aGlzLmlzVmFsaWRhdGluZz0hMX0pLmNhdGNoKGE9Pnt0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0iZXJyb3Ii'@;
put 'fSl9ZGVsZXRlS2V5cygpe2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJkZXBsb3lfZGNfbG9jIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dCh2bCksdHQodzApLHR0KEdlZSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJhcHAtbWFudWFsLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVj'@;
put 'bHM6OSx2YXJzOjMsY29uc3RzOltbMSwiY2FyZC1oZWFkZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJkLWlubGluZS1ibG9jayIsIm1sLTEwIiwibWItMTAiLCJtdC0wIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiY2xlYXItbWVtb3J5LWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRl'@;
put 'IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIl0sWyJpZCIsImxvZ2luRm9ybSIsImNsYXNzIiwiZC1ub25lIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImlkIiwibG9naW5Gb3JtIiwxLCJkLW5vbmUiXSxbMSwibWItMTAiXSxbImZvciIsInVzZXJuYW1lIiwxLCJjbHItY29udHJvbC1sYWJl'@;
put 'bCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsidHlwZSIsInRleHQiLCJpZCIsInVzZXJuYW1lIiwxLCJjbHItaW5wdXQiXSxbImZvciIsInBhc3N3b3JkIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsidHlwZSIsInBhc3N3'@;
put 'b3JkIiwiaWQiLCJwYXNzd29yZCIsMSwiY2xyLWlucHV0Il0sWyJpZCIsImxvZ2luQnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImQtbm9uZSJdLFsxLCJjbHItZm9ybS1jb250cm9sIl0sWyJmb3IiLCJzZWxlY3QtZnVsbCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRy'@;
put 'b2wtY29udGFpbmVyIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFsibmFtZSIsInNlbGVjdGVkQWRtaW5Hcm91cCIsImlkIiwiYWRtaW5Hcm91cHNTZWxlY3QiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFsdWUi'@;
put 'LDQsIm5nRm9yIiwibmdGb3JPZiJdLFsibmFtZSIsInNlbGVjdGVkQ29udGV4dCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsImlkIiwiY29udGV4dHMtYnRuIiwxLCJidG4iLCJidG4taWNvbiIs'@;
put 'MywiY2xpY2siXSxbInNoYXBlIiwicGxheSJdLFsxLCJkLWZsZXgiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwibXItMTAiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWyJuYW1lIiwiZGNQYXRoIiwidHlwZSIsInRleHQiLCJpZCIsImRj'@;
put 'bG9jIiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiLCJmb2N1c291dCJdLFsxLCJtdC0xMCJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsidHlwZSIsImZpbGUiLDMsImNsaWNrIiwiY2hhbmdlIl0sWzEsIm10LTIwIiwiZC1m'@;
put 'bGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsIiIsMSwibXQtMCIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWyJjbGFzcyIsImJ0biBidG4tc20gYnRuLWljb24gbWluLXctMCB3LTQwIiwzLCJjbGljayIsNCwibmdJZiJdLFsiaWQiLCJkZXBsb3kiLDEsIm10LTAiLDMsImNsckxv'@;
put 'YWRpbmciLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMywidmFsdWUiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJtaW4tdy0wIiwidy00MCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwi'@;
put 'bWItMCIsIm10LTEwIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMCIsIm1yLTIwIiwzLCJjbGljayJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWJhciIs'@;
put 'NCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciJdLFsxLCJ2YWxpZGF0aW9uLWJhciJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImlzLWVycm9yIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsMSwiaXMtc3VjY2VzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1l'@;
put 'KDAsImRpdiIsMCksTmUoMSwiIENvbmZpZ3VyYXRvciAiKSxtZSgyLCJwIiwxKSxOZSgzKSx5ZSgpLG1lKDQsImJ1dHRvbiIsMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmRlbGV0ZUtleXMoKX0pLE5lKDUsIiBDbGVhciBtZW1vcnkgIikseWUoKSgpLG1lKDYsImRpdiIsMyks'@;
put 'UWUoNyxuRWUsMTUsMCwiZGl2Iiw0KSxRZSg4LGdFZSw0OSwyMiwibmctY29udGFpbmVyIiw1KSx5ZSgpKSwyJmEmJihDZSgzKSxncigiQXBwIExvY2F0aW9uOiAiLGQuYXBwTG9jLCIiKSxDZSg0KSxSZSgibmdJZiIsZC5uZWVkc0xvZ2luKSxDZSgxKSxSZSgibmdJZiIsIWQubmVlZHNMb2dp'@;
put 'bikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLENwLGwxLGMxLFdhLE0wLEJzLHdwLE9zLHIyLGthLFp1LGRoLFVzLGlHXSxzdHlsZXM6WyIuY2xlYXItbWVtb3J5LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17cmlnaHQ6MTBweDt0b3A6MnB4fSJdfSksY30pKCk7ZnVuY3Rpb24gdkVlKGMsbCl7'@;
put 'MSZjJiYobWUoMCwiZGl2IiwxNSkscXQoMSwicHJvZ3Jlc3MiKSx5ZSgpKX1mdW5jdGlvbiBfRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDE2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLkdST1VQTkFNRSksQ2UoMSksamMoIiAiLGEu'@;
put 'R1JPVVBOQU1FLCIgLSAiLGEuR1JPVVBERVNDLCIgIil9fWxldCBiRWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5zYXNqc1NlcnZpY2U9ZCx0aGlzLmxvY2F0aW9uPWgsdGhpcy5zYXNKc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcs'@;
put 'dGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBFcix0aGlzLmRjRGlyZWN0b3J5PSIiLHRoaXMuZGNBZG1pbkdyb3VwPSJEQ0RFRkFVTFQiLHRoaXMuTUVUQVBFUlNPTj0ibi9hIix0aGlzLk1FVEFVU0VSPSJuL2EiLHRoaXMuU1lTVVNFUklEPSJuL2EiLHRoaXMuU1lTSE9TVE5BTUU9Im4vYSIs'@;
put 'dGhpcy5TWVNWTE9ORz0ibi9hIix0aGlzLmRjQWRtaW5Hcm91cExpc3Q9W10sdGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0xvZ291dD0hMSx0aGlzLnRtcERpcmVjdG9yaWVzPXtsaW51eDoiL3RtcC9EYXRhQ29udHJvbGxlciIsd2luZG93czoiQzpcXERhdGFDb250cm9sbGVyIn19bmdPbklu'@;
put 'aXQoKXt0aGlzLmdldFVzZXJHcm91cHMoKSx0aGlzLmdldFNlcnZlckluZm8oKX1nZXRTZXJ2ZXJJbmZvKCl7dGhpcy5zYXNqc1NlcnZpY2UuZ2V0U2VydmVySW5mbygpLnN1YnNjcmliZShhPT57ImRlc2t0b3AiIT09YS5tb2RlJiYodGhpcy5zaG93TG9nb3V0PSEwKX0pfWdldFVzZXJHcm91'@;
put 'cHMoKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIixudWxsKS50aGVuKGE9Pnt0aGlzLk1FVEFQRVJTT049YS5NRl9HRVRVU0VSLHRoaXMuU1lTVVNFUklEPWEuU1lTVVNFUklELHRoaXMuU1lTSE9TVE5BTUU9YS5T'@;
put 'WVNIT1NUTkFNRSx0aGlzLlNZU1ZMT05HPWEuU1lTVkxPTkcsdGhpcy5kY0RpcmVjdG9yeT10aGlzLnRtcERpcmVjdG9yaWVzW1siTCIsIkgiLCJBIiwiUyJdLmluY2x1ZGVzKGEuU1lTU0NQTC5zdWJzdHJpbmcoMCwxKSk/ImxpbnV4Ijoid2luZG93cyJdLHRoaXMuZGNBZG1pbkdyb3VwTGlz'@;
put 'dD1hLmdyb3Vwcyx0aGlzLmRjQWRtaW5Hcm91cD10aGlzLmRjQWRtaW5Hcm91cExpc3RbMF0uR1JPVVBOQU1FLHRoaXMubG9hZGluZz0hMX0sYT0+e3RoaXMubG9hZGluZz0hMX0pfW1ha2VEYXRhKCl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtjb25zdCBoPXRo'@;
put 'aXMuc2FzSnNDb25maWcuYXBwTG9jO2xldCBmPXRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsLF89dGhpcy5kY0RpcmVjdG9yeTt0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1VYy5ELlNhc2pzP3RoaXMuc2FzU2VydmljZS5zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKS50aGVuKFc9PntX'@;
put 'JiYodGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi8iKSxsb2NhdGlvbi5yZWxvYWQoKSl9KTp0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1VYy5ELlNhczkmJihmPSIiLGQ9d2luZG93LmxvY2F0aW9uLm9yaWdpbitkKyIvIixfPWVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmRjRGly'@;
put 'ZWN0b3J5KSksd2luZG93Lm9wZW4oYCR7Znx8IiJ9JHtkfT9fcHJvZ3JhbT0ke2h9L3NlcnZpY2VzL2FkbWluL21ha2VkYXRhJmFkbWluPSR7dGhpcy5kY0FkbWluR3JvdXB9JnBhdGg9JHtffSBgLCJfYmxhbmsiKX1sb2dvdXQoKXt0aGlzLnNhc1NlcnZpY2UubG9nb3V0KCl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dChpcSksdHQoSmQpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pz'@;
put 'Q29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDEsdmFyczo5LGNvbnN0czpbWyJjbGFzcyIsInRoaW5Qcm9ncmVzcyBwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxv'@;
put 'b3AiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJsaWdodCJdLFsxLCJtLTAiXSxbMSwibS0wIiwibXQtMTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3Jh'@;
put 'cHBlciJdLFsicGxhY2Vob2xkZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUwdnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFs'@;
put 'dWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItZmxleCJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsIm10LTE1IiwidGV4dC1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImNhcmQtdGV4dCIsInBiLTEwIl0sWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIs'@;
put 'Imxvb3AiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihRZSgwLHZFZSwyLDAsImRpdiIsMCksbWUoMSwiaDQiLDEpLE5lKDIsIlNhc2pzIERlcGxveSIpLHllKCkscXQoMywiaHIiLDIpLG1lKDQsInAiLDMpLE5lKDUsIiBUbyBjb25maWd1cmUgRGF0YSBDb250'@;
put 'cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6XG4iKSx5ZSgpLG1lKDYsInAiLDQpLE5lKDcsIiBQbGVhc2Ugc3BlY2lmeSBhIHBoeXNpY2FsIGRpcmVjdG9yeSBiZWxvdywgdG8gd2hpY2ggdXNlciAiKSxtZSg4LCJzdHJvbmciKSxOZSg5'@;
put 'KSx5ZSgpLE5lKDEwLCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBDb250cm9sbGVyOlxuIikseWUoKSxtZSgxMSwibGFiZWwiLDUpLE5lKDEyLCJEQyBEaXJlY3RvcnkiKSx5ZSgpLG1lKDEzLCJkaXYiLDYpKDE0LCJkaXYiLDcpKDE1LCJpbnB1dCIsOCkseHQoIm5nTW9kZWxDaGFu'@;
put 'Z2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRjRGlyZWN0b3J5PWZ9KSx5ZSgpKCkoKSxtZSgxNiwicCIsNCksTmUoMTcsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBncm91cCB5b3Ugc2VsZWN0IHdpbGwgYmVjb21lIHRoZSBEYXRhIENv'@;
put 'bnRyb2xsZXIgQWRtaW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSx5ZSgpLG1lKDE4LCJsYWJlbCIsNSksTmUoMTksIkRhdGEgQ29udHJvbGxlciBBZG1pbiBncm91cCIpLHllKCksbWUoMjAs'@;
put 'ImNsci1zZWxlY3QtY29udGFpbmVyIiw5KSgyMSwic2VsZWN0IiwxMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRjQWRtaW5Hcm91cD1mfSksUWUoMjIsX0VlLDIsMywib3B0aW9uIiwxMSkseWUoKSgpLG1lKDIzLCJwIiw0KSxOZSgyNCwiIE5vdywgY3JlYXRl'@;
put 'IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBkZXBsb3kgdGhlIGNvbnRyb2wgbGlicmFyeSB1c2luZyB0aGUgYWRtaW4gZ3JvdXAgc2VsZWN0ZWQgYWJvdmU6XG4iKSx5ZSgpLG1lKDI1LCJkaXYiLDEyKSgyNiwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm1h'@;
put 'a2VEYXRhKCl9KSxOZSgyNywiIFNVQk1JVCAiKSx5ZSgpKCkscXQoMjgsImhyIiwyKSxtZSgyOSwiZGl2IiwxNCkoMzAsInAiKSxOZSgzMSwiWW91IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWxzOiIpLHllKCksbWUoMzIsInVsIikoMzMsImxpIiksTmUoMzQp'@;
put 'LHllKCksbWUoMzUsImxpIiksTmUoMzYpLHllKCksbWUoMzcsImxpIiksTmUoMzgpLHllKCksbWUoMzksImxpIiksTmUoNDApLHllKCkoKSgpKSwyJmEmJihSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSg5KSxvcihkLlNZU1VTRVJJRCksQ2UoNiksUmUoIm5nTW9kZWwiLGQuZGNEaXJlY3Rvcnkp'@;
put 'LENlKDYpLFJlKCJuZ01vZGVsIixkLmRjQWRtaW5Hcm91cCksQ2UoMSksUmUoIm5nRm9yT2YiLGQuZGNBZG1pbkdyb3VwTGlzdCksQ2UoMTIpLGdyKCJNRVRBUEVSU09OOiAiLGQuTUVUQVBFUlNPTiwiIiksQ2UoMiksZ3IoIlNZU1VTRVJJRDogIixkLlNZU1VTRVJJRCwiIiksQ2UoMiksZ3Io'@;
put 'IlNZU0hPU1ROQU1FOiAiLGQuU1lTSE9TVE5BTUUsIiIpLENlKDIpLGdyKCJTWVNWTE9ORzogIixkLlNZU1ZMT05HLCIiKSl9LGRlcGVuZGVuY2llczpbeHMsWmksbDEsYzEsV2EsTTAsQnMsT3MsVXMsTjgsSDhdLHN0eWxlczpbIi5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0l'@;
put 'Q09NUCVde3dpZHRoOjUwdnd9LmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS50aGluUHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH0udGhpblByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcnt0b3A6MH0iXX0pLGN9KSgpO2Z1bmN0aW9uIHlFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRp'@;
put 'diIsNCkoMSwiZGl2Iiw1KSxOZSgyLCJUZXJtcyBhbmQgQ29uZGl0aW9ucyIpLHllKCksbWUoMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsInAiKSxOZSg2LCIgVGhlIERlbW8gdmVyc2lvbiBvZiBEYXRhIENvbnRyb2xsZXIgaXMgZnJlZSBmb3IgRVZBTFVBVElPTiBwdXJwb3NlcyBvbmx5LiBC'@;
put 'ZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIGFncmVlZCB0byB0aGUgIiksbWUoNywiYSIsOCksTmUoOCwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdy'@;
put 'ZWVtZW50IikseWUoKSxOZSg5LCIuICIpLHllKCkoKSxxdCgxMCwiaHIiLDkpLG1lKDExLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEyLCJpbnB1dCIsMTApLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudGVybXNBZ3JlZUNoYW5nZSgpKX0pLHllKCksbWUo'@;
put 'MTMsImxhYmVsIiksTmUoMTQsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhlICIpLG1lKDE1LCJhIiw4KSxOZSgxNiwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IikseWUoKSgpKCkoKSgpfX1mdW5jdGlvbiB3RWUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE1KSgxLCJhcHAtYXV0b21hdGljLWRlcGxveSIsMTYpLHh0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3Qg'@;
put 'YT1WZSgzKTtDZSgxKSxSZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixhLmFwcExvYykoImRjUGF0aCIsYS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGEu'@;
put 'c2VsZWN0ZWRBZG1pbkdyb3VwKX19ZnVuY3Rpb24gQ0VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNykoMSwiYXBwLW1hbnVhbC1kZXBsb3kiLDE4KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykub25OYXZpZ2F0'@;
put 'ZVRvSG9tZSgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIFNFZShjLGwpe2lmKDEmYyYm'@;
put 'KEJyKDApLFFlKDEsd0VlLDIsNiwiZGl2IiwxMyksUWUoMixDRWUsMiwzLCJkaXYiLDE0KSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLGEuYXV0b2RlcGxveSksQ2UoMSksUmUoIm5nSWYiLCFhLmF1dG9kZXBsb3kpfX1mdW5jdGlvbiBNRWUoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJkaXYiLDE1KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOCkseHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSx5ZSgpKCksVXIoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9VmUoMik7Q2UoMiksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIHhFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImRpdiIs'@;
put 'MTUpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE4KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLHllKCkoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgic2FzSnMiLGEu'@;
put 'c2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gRUVlKGMsbCl7aWYoMSZjJiYoQnIoMCwxMSksUWUoMSxTRWUsMywyLCJuZy1jb250YWluZXIiLDEyKSxRZSgyLE1FZSwzLDMsIm5nLWNv'@;
put 'bnRhaW5lciIsMTIpLFFlKDMseEVlLDMsMywibmctY29udGFpbmVyIiwxMiksVXIoKSksMiZjKXtjb25zdCBhPVZlKCk7UmUoIm5nU3dpdGNoIiwhMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDEp'@;
put 'LFJlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgJGVlPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc3RlcD0wLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jbGllbnRfaWQ9IiIsdGhpcy5jbGllbnRfc2VjcmV0PSIiLHRo'@;
put 'aXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuYXV0b2RlcGxveT0hMCx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5zYXNKc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5TZXJ2ZXJUeXBlPVVjLkQsdGhpcy5kY0FkYXB0ZXJT'@;
put 'ZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygibWFudWFsZGVwbG95IikmJih0aGlzLmF1dG9kZXBsb3k9ITEpLHRoaXMuc2FzSnM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzSW5zdGFuY2UoKSx0aGlz'@;
put 'LnNhc0pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuYXBwTG9jPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdGhpcy5jbGllbnRfaWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9jbGllbnRfaWQiKXx8IiIsdGhpcy5jbGllbnRf'@;
put 'c2VjcmV0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfc2VjcmV0X2tleSIpfHwiIix0aGlzLmRjUGF0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2RjX2xvYyIpfHwiIn1uZ09uSW5pdCgpe3RoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PVVjLkQuU2FzVml5YSYmZmV0'@;
put 'Y2goInNhc2J1aWxkL3ZpeWEuanNvbiIpLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkPW51bGw7dHJ5e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmpzb25GaWxlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmpzb25GaWxl'@;
put 'KSl9KSx0aGlzLnNldERlcGxveURlZmF1bHRzKCl9c2V0RGVwbG95RGVmYXVsdHMoKXt0aGlzLmRjUGF0aD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5kY1BhdGh8fCIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFkbWluR3JvdXB8fCIiLHRoaXMu'@;
put 'c2VsZWN0ZWRBZG1pbkdyb3VwfHwodGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIil9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYXV0b2RlcGxveXx8dGhpcy5nZXRBZG1pbkdyb3VwcygpLHRoaXMuc3RlcCsrfWdldEFkbWluR3JvdXBzKCl7ZmV0Y2godGhpcy5z'@;
put 'YXNKc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9zb3J0Qnk9bmFtZSZsaW1pdD01MDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZDt0cnl7ZD1KU09OLnBhcnNlKGEpfWNhdGNoKGgp'@;
put 'e2NvbnNvbGUuZXJyb3IoaCl9ZCYmKHRoaXMuYWRtaW5Hcm91cHM9ZC5pdGVtcyx0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmFkbWluR3JvdXBzWzBdLmlkKX0pfW9uTmF2aWdhdGVUb0hvbWUoKXt3aW5kb3cub3Blbihsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0sIl9ibGFuayIp'@;
put 'fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChlOCksdHQob2EpLHR0KHcwKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGVwbG95Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxk'@;
put 'ZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJjbHItcm93Il0sWyJpZCIsIlRDUyIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFsiaWQiLCJUQ1MiLDEsImNhcmQiXSxbMSwiY2Fy'@;
put 'ZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJjYXJkLXRleHQiXSxbImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vZXZhbHVhdGlvbi1saWNlbmNlLWFncmVlbWVudCIsInRhcmdldCIsIl9ibGFuayJdLFsxLCJsaWdodCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0'@;
put 'eXBlIiwiY2hlY2tib3giLDMsImNoYW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiYXV0b2RlcGxveS1zZWN0aW9uIGNhcmQiLDQsIm5nSWYiXSxbImlkIiwibWFpbmJvZHkiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiYXV0b2RlcGxveS1z'@;
put 'ZWN0aW9uIiwiY2FyZCJdLFszLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJhcHBMb2MiLCJkY1BhdGgiLCJzZWxlY3RlZEFkbWluR3JvdXAiLCJvbk5hdmlnYXRlVG9Ib21lIl0sWyJpZCIsIm1haW5ib2R5IiwxLCJjYXJkIl0sWzMsInNhc0pzIiwic2FzSnND'@;
put 'b25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyIsIm9uTmF2aWdhdGVUb0hvbWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSksUWUoMix5RWUsMTcsMCwiZGl2IiwyKSx5ZSgpLFFlKDMsRUVlLDQsNCwibmctY29udGFpbmVyIiwzKSx5ZSgp'@;
put 'KSwyJmEmJihDZSgyKSxSZSgibmdJZiIsMD09PWQuc3RlcCksQ2UoMSksUmUoIm5nSWYiLGQuc3RlcD4wKSl9LGRlcGVuZGVuY2llczpbWmksbmQsdGgsVXMsRDAsVDAsdEVlLG1FZSxiRWVdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LmJ0bltfbmdj'@;
put 'b250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNmMGYwZjA7Ym9yZGVyOjFweCBzb2xpZCAjYzljOWM5O3BhZGRpbmc6MTBweDtvdmVyZmxvdzphdXRvO3doaXRlLXNwYWNlOnByZS13cmFw'@;
put 'fSNjb250ZXh0cy1idG5bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4IDAgMDttaW4td2lkdGg6MzBweDttYXJnaW4tbGVmdDoxMHB4O2hlaWdodDozMHB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LnZhbGlkYXRp'@;
put 'b24tYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udmFsaWRhdGlvbi1iYXJbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo1cHh9LmF1dG9kZXBs'@;
put 'b3ktc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDE1cHh9LmF1dG9kZXBsb3ktc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNoZWNrYm94LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4IDB9LmF1dG9kZXBsb3ktc2VjdGlvbltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuYnRuLWF1dG9kZXBsb3lbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjE1cHggMH0iXX0pLGN9KSgpO2NvbnN0IGtFZT1be3BhdGg6IiIsY29tcG9uZW50OiRlZX0se3BhdGg6Im1hbnVhbGRlcGxveSIsY29tcG9uZW50OiRlZX1dO2xl'@;
put 'dCBBRWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbZGMuZm9yQ2hpbGQoa0VlKSxkY119KSxjfSkoKSxURWU9KCgpPT57Y2xhc3Mg'@;
put 'Y3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sJGwsX3UsQUVlXX0pLGN9KSgpO0YoODcxMyksRig1NjU4KSxGKDkxOTQ1KTt2YXIgREVlPUYoNzA4OTYp'@;
put 'O2Z1bmN0aW9uIHFlZShjKXtjb25zdCBsPWMubGVuZ3RoO2xldCBhPTA7Zm9yKDthPGw7KWNbYV09W2NbYV1dLGErPTF9ZnVuY3Rpb24gbk4oYyxsKXtjb25zdCBhPWwubGVuZ3RoO2xldCBkPTA7Zm9yKDtkPGE7KWMucHVzaChsW2RdKSxkKz0xfWZ1bmN0aW9uIEtiKGMpe2NvbnN0IGw9W107'@;
put 'aWYoIWN8fDA9PT1jLmxlbmd0aHx8IWNbMF18fDA9PT1jWzBdLmxlbmd0aClyZXR1cm4gbDtjb25zdCBhPWMubGVuZ3RoLGQ9Y1swXS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxhO2grKylmb3IobGV0IGY9MDtmPGQ7ZisrKWxbZl18fChsW2ZdPVtdKSxsW2ZdW2hdPWNbaF1bZl07cmV0dXJuIGx9'@;
put 'ZnVuY3Rpb24gQWwoYyxsLGEsZCl7bGV0IGg9LTEsZj1jLF89YTtBcnJheS5pc0FycmF5KGMpfHwoZj1BcnJheS5mcm9tKGMpKTtjb25zdCBUPWYubGVuZ3RoO2ZvcihkJiZUJiYoaCs9MSxfPWZbaF0pLGgrPTE7aDxUOylfPWwoXyxmW2hdLGgsZiksaCs9MTtyZXR1cm4gX31mdW5jdGlvbiBf'@;
put 'MShjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgXz0tMTtmb3IoO2E8aDspe2NvbnN0IFQ9ZFthXTtsKFQsYSxkKSYmKF8rPTEsZltfXT1UKSxhKz0xfXJldHVybiBmfWZ1bmN0aW9uIGNzKGMsbCl7'@;
put 'bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aCxmPVtdO2xldCBfPS0xO2Zvcig7YTxoOylfKz0xLGZbX109bChkW2FdLGEsZCksYSs9MTtyZXR1cm4gZn1mdW5jdGlvbiBEbihjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJy'@;
put 'YXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGg7Zm9yKDthPGgmJiExIT09bChkW2FdLGEsZCk7KWErPTE7cmV0dXJuIGN9ZnVuY3Rpb24gS2VlKGMpe3JldHVybiBBbChjLChsLGEpPT5sK2EsMCl9ZnVuY3Rpb24gSUVlKGMpe3JldHVybiBBbChjLChsLGEpPT5sPmE/'@;
put 'bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2b2lkIDApfWZ1bmN0aW9uIExFZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bDxhP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBSRWUoYyl7cmV0dXJuIGMubGVuZ3RoP0tlZShjKS9jLmxlbmd0aDowfWZ1bmN0aW9u'@;
put 'IFhlZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bC5jb25jYXQoQXJyYXkuaXNBcnJheShhKT9YZWUoYSk6YSksW10pfWZ1bmN0aW9uIHJOKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsYT0+ey0xPT09bC5pbmRleE9mKGEpJiZsLnB1c2goYSl9KSxsfWZ1bmN0aW9uIGlOKCl7Zm9yKHZhciBj'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gRG4oaCxfPT57Zj1mLmZpbHRlcihUPT4hXy5pbmNsdWRlcyhUKSl9KSxmfWZ1bmN0aW9uIE9FZSgpe2Zvcih2YXIg'@;
put 'Yz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIERuKGgsXz0+e2Y9Zi5maWx0ZXIoVD0+Xy5pbmNsdWRlcyhUKSl9KSxmfWZ1bmN0aW9uIFBFZSgpe2Zvcih2YXIg'@;
put 'Yz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdLGY9bmV3IFNldChkKTtyZXR1cm4gRG4oaCxfPT57RG4oXyxUPT57Zi5oYXMoVCl8fGYuYWRkKFQpfSl9KSxBcnJheS5mcm9tKGYpfWZ1bmN0'@;
put 'aW9uIG9OKGMpe3JldHVybiBjLnNwbGl0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiICIpfWZ1bmN0aW9uIEFhKGMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtk'@;
put 'LTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4gQWwoYywoZixfLFQpPT5mK18ucmVwbGFjZSgvXHI/XG5ccyovZywiIikrKGFbVF0/YVtUXToiIiksIiIpLnRyaW0oKX1mdW5jdGlvbiBfbChjKXtsZXQgbDtzd2l0Y2godHlwZW9mIGMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bD1gJHtjfWA7'@;
put 'YnJlYWs7Y2FzZSJvYmplY3QiOmw9bnVsbD09PWM/IiI6Yy50b1N0cmluZygpO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPSIiO2JyZWFrO2RlZmF1bHQ6bD1jLnRvU3RyaW5nKCl9cmV0dXJuIGx9ZnVuY3Rpb24gS2koYyl7cmV0dXJuIHR5cGVvZiBjPCJ1In1mdW5jdGlvbiBMYShjKXtyZXR1'@;
put 'cm4gdHlwZW9mIGM+InUifWZ1bmN0aW9uIHBjKGMpe3JldHVybiBudWxsPT09Y3x8IiI9PT1jfHxMYShjKX1mdW5jdGlvbiBKZWUoYyl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9Y29uc3QgWGI9Imxlbmd0aCIsSmI9Yz0+cGFy'@;
put 'c2VJbnQoYywxNiksUWVlPWM9PnBhcnNlSW50KGMsMTApLG5rPShjLGwsYSk9PmMuc3Vic3RyKGwsYSksUWI9Yz0+Yy5jb2RlUG9pbnRBdCgwKS02NSxzTj1jPT5gJHtjfWAucmVwbGFjZSgvXC0vZywiIiksRkVlPWM9PkpiKG5rKHNOKGMpLEpiKCIxMiIpLFFiKCJGIikpKS8oSmIobmsoc04o'@;
put 'YyksUWIoIkIiKSx+fiFbXVtYYl0pKXx8OSksSEVlPSgpPT50eXBlb2YgbG9jYXRpb248InUiJiYvXihbYS16MC05XC1dK1wuKT9ceDY4XHg2MVx4NkVceDY0XHg3M1x4NkZceDZFXHg3NFx4NjFceDYyXHg2Q1x4NjVceDJFXHg2M1x4NkZceDZEJC9pLnRlc3QobG9jYXRpb24uaG9zdCk7bGV0'@;
put 'IGV0ZT0hMTtjb25zdCB0dGU9e2ludmFsaWQ6KCk9PkFhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxleHBpcmVkOmM9'@;
put 'PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBBYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4gUmVu'@;
put 'ZXcgeW91ciBsaWNlbnNlIGtleSBhdCBoYW5kc29udGFibGUuY29tIG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3JceDIwCiAgICB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzYWxlc0BoYW5kc29udGFibGUuY29tLmB9LG1pc3Np'@;
put 'bmc6KCk9PkFhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1'@;
put 'c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdFx4MjAKICAgIHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLG5v'@;
put 'bl9jb21tZXJjaWFsOigpPT4iIn0sbnRlPXtpbnZhbGlkOigpPT5BYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIg'@;
put 'dGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gb24gaG93IHRvXHgyMAogICAgaW5zdGFsbCBpdCBwcm9wZXJseSBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxleHBpcmVk'@;
put 'OmM9PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBBYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4g'@;
put 'PGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL3ByaWNpbmciIHRhcmdldD0iX2JsYW5rIj5SZW5ldzwvYT4geW91clx4MjAKICAgIGxpY2Vuc2Uga2V5IG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3IgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55XHgyMAog'@;
put 'ICAgaGVscCwgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c2FsZXNAaGFuZHNvbnRhYmxlLmNvbSI+c2FsZXNAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYH0sbWlzc2luZzooKT0+QWFgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91'@;
put 'ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29t'@;
put 'bWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gYWJvdXQgaXQgaW5ceDIwCiAgICB0aGUgZG9jdW1lbnRhdGlv'@;
put 'biBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9O2Z1bmN0aW9uIHJ0ZShjLGwpe2NvbnN0IGE9IXBjKGMpLGQ9InN0cmluZyI9PXR5cGVv'@;
put 'ZiBjJiYibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPT09Yy50b0xvd2VyQ2FzZSgpLGg9IjEzLjEuMCI7bGV0IGYsXz0iaW52YWxpZCIsVD0iaW52YWxpZCI7Y29uc3QgVz1mdW5jdGlvbiBORWUoYyl7bGV0IGw9W11bWGJdLGE9bDtpZihjW1hiXSE9PVFiKCJaIikpcmV0dXJuITE7'@;
put 'Zm9yKGxldCBkPSIiLGg9IkI8SDRQKyIuc3BsaXQoIiIpLGY9UWIoaC5zaGlmdCgpKTtmO2Y9UWIoaC5zaGlmdCgpfHwiQSIpKS0tZjwiIltYYl0/YXw9KFFlZShgJHtRZWUoSmIoZCkrKEpiKG5rKGMsTWF0aC5hYnMoZiksMikpK1tdKS5wYWRTdGFydCgyLCIwIikpfWApJTk3fHwyKT4+MTpk'@;
put 'PW5rKGMsZixmPzE9PT1oW1hiXT85Ojg6Nik7cmV0dXJuIGE9PT1sfShjPXNOKGN8fCIiKSk7aWYoYXx8ZHx8VylpZihXKXtjb25zdCBpZT1LbygiMzEvMDgvMjAyMyIsIkREL01NL1lZWVkiKSxnZT1NYXRoLmZsb29yKGllLnRvRGF0ZSgpLmdldFRpbWUoKS84NjRlNSksd2U9RkVlKGMpO2Y9'@;
put 'S28oODY0ZTUqKHdlKzEpLCJ4IikuZm9ybWF0KCJNTU1NIERELCBZWVlZIiksZ2U+d2U/KF89ImV4cGlyZWQiLFQ9ImV4cGlyZWQiKTooXz0idmFsaWQiLFQ9InZhbGlkIil9ZWxzZSBkPyhfPSJub25fY29tbWVyY2lhbCIsVD0idmFsaWQiKTooXz0iaW52YWxpZCIsVD0iaW52YWxpZCIpO2Vs'@;
put 'c2UgXz0ibWlzc2luZyIsVD0ibWlzc2luZyI7aWYoSEVlKCkmJihfPSJ2YWxpZCIsVD0idmFsaWQiKSwhZXRlJiYidmFsaWQiIT09XyYmKHR0ZVtfXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkmJmNvbnNvbGVbIm5vbl9jb21tZXJjaWFsIj09PV8/ImluZm8iOiJ3YXJuIl0o'@;
put 'dHRlW19dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSksZXRlPSEwKSwidmFsaWQiIT09VCYmbC5wYXJlbnROb2RlJiZudGVbVF0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pKXtjb25zdCBnZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnZS5jbGFz'@;
put 'c05hbWU9ImhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIsZ2UuaW5uZXJIVE1MPW50ZVtUXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSksbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnZSxsLm5leHRTaWJsaW5nKX19ZnVuY3Rpb24gYnUoYyl7cmV0dXJuIGNbMF0udG9VcHBl'@;
put 'ckNhc2UoKStjLnN1YnN0cigxKX1mdW5jdGlvbiBWRWUoKXtjb25zdCBjPVtdO2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO2xldCBoPWEubGVuZ3RoO2Zvcig7aDspe2gtPTE7Y29uc3QgZj1fbChhW2hdKS50'@;
put 'b0xvd2VyQ2FzZSgpOy0xPT09Yy5pbmRleE9mKGYpJiZjLnB1c2goZil9cmV0dXJuIDE9PT1jLmxlbmd0aH1mdW5jdGlvbiBhTigpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1yZXR1cm4g'@;
put 'YygpK2MoKStjKCkrYygpfWZ1bmN0aW9uIGxOKGMpe3JldHVybi9eKFswLTldWzAtOV0/JSQpfCheMTAwJSQpLy50ZXN0KGMpfWZ1bmN0aW9uIGNOKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm5gJHtjfWAu'@;
put 'cmVwbGFjZSgvKD86XFwpP1xbKFteW1xdXSspXS9nLChhLGQpPT4iXFwiPT09YS5jaGFyQXQoMCk/YS5zdWJzdHIoMSxhLmxlbmd0aC0xKTp2b2lkIDA9PT1sW2RdPyIiOmxbZF0pfWZ1bmN0aW9uIHVOKGMpe3JldHVybiByayhgJHtjfWAse0FMTE9XRURfVEFHUzpbXX0pfWZ1bmN0aW9uIHJr'@;
put 'KGMsbCl7cmV0dXJuIERFZS5zYW5pdGl6ZShjLGwpfWZ1bmN0aW9uIGl0ZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPS0xLGQ9bnVsbCxoPWM7Zm9yKDtudWxsIT09aDspe2lmKGE9PT1sKXtkPWg7YnJlYWt9aC5o'@;
put 'b3N0JiZoLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2g9aC5ob3N0OihhKz0xLGg9aC5wYXJlbnROb2RlKX1yZXR1cm4gZH1mdW5jdGlvbiBvdGUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCkmJmMuZnJhbWVFbGVtZW50fWZ1bmN0aW9u'@;
put 'IGV5KGMpe3JldHVybiBvdGUoYykmJmMucGFyZW50fWZ1bmN0aW9uIEJFZShjKXtyZXR1cm4hIU9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCl9ZnVuY3Rpb24gTnAoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltd'@;
put 'LGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7Y29uc3R7RUxFTUVOVF9OT0RFOmQsRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpofT1Ob2RlO2xldCBmPWM7Zm9yKDtudWxsIT1mJiZmIT09YTspe2NvbnN0e25vZGVUeXBlOl8sbm9kZU5hbWU6VH09ZjtpZihfPT09ZCYm'@;
put 'KGwuaW5jbHVkZXMoVCl8fGwuaW5jbHVkZXMoZikpKXJldHVybiBmO2NvbnN0e2hvc3Q6V309ZjtmPVcmJl89PT1oP1c6Zi5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIHR5KGMsbCxhKXtjb25zdCBkPVtdO2xldCBoPWM7Zm9yKDtoJiYoaD1OcChoLGwsYSksaCYmKCFhfHxhLmNv'@;
put 'bnRhaW5zKGgpKSk7KWQucHVzaChoKSxoPWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oLmhvc3Q6aC5wYXJlbnROb2RlO2NvbnN0IGY9ZC5sZW5ndGg7cmV0dXJuIGY/ZFtmLTFdOm51bGx9ZnVuY3Rpb24gVnAoYyxsKXtsZXQgYT1jLnBhcmVudE5v'@;
put 'ZGUsZD1bXTtmb3IoInN0cmluZyI9PXR5cGVvZiBsP2Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kZWZhdWx0Vmlldz9jLnF1ZXJ5U2VsZWN0b3JBbGwobCk6Yy5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobCksMCk6ZC5wdXNoKGwpO251bGwhPT1hOyl7aWYoZC5pbmRl'@;
put 'eE9mKGEpPi0xKXJldHVybiEwO2E9YS5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIHN0ZShjKXtsZXQgbD0wLGE9YztpZihhLnByZXZpb3VzU2libGluZylmb3IoO2E9YS5wcmV2aW91c1NpYmxpbmc7KWwrPTE7cmV0dXJuIGx9ZnVuY3Rpb24gQnAoYyxsLGEpe2NvbnN0IGQ9YS5wYXJl'@;
put 'bnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5odF9jbG9uZV8ke2N9YCk7cmV0dXJuIGQ/ZC5jb250YWlucyhsKTpudWxsfWZ1bmN0aW9uIGF0ZShjKXtyZXR1cm4gYyYmYy5sZW5ndGg/Yy5maWx0ZXIobD0+ISFsKTpbXX1mdW5jdGlvbiBCbyhjLGwpe3JldHVybiB2b2lkIDAhPT1jLmNsYXNz'@;
put 'TGlzdCYmInN0cmluZyI9PXR5cGVvZiBsJiYiIiE9PWwmJmMuY2xhc3NMaXN0LmNvbnRhaW5zKGwpfWZ1bmN0aW9uIHBpKGMsbCl7InN0cmluZyI9PXR5cGVvZiBsJiYobD1sLnNwbGl0KCIgIikpLChsPWF0ZShsKSkubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LmFkZCguLi5sKX1mdW5jdGlvbiBX'@;
put 'byhjLGwpeyJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC5zcGxpdCgiICIpKSwobD1hdGUobCkpLmxlbmd0aD4wJiZjLmNsYXNzTGlzdC5yZW1vdmUoLi4ubCl9ZnVuY3Rpb24gZE4oYyl7aWYoMz09PWMubm9kZVR5cGUpYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO2Vsc2UgaWYoWyJUQUJM'@;
put 'RSIsIlRIRUFEIiwiVEJPRFkiLCJURk9PVCIsIlRSIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMSl7Y29uc3QgbD1jLmNoaWxkTm9kZXM7Zm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pZE4obFthXSl9fWZ1bmN0aW9uIGcyKGMpe2xldCBsO2Zvcig7bD1jLmxhc3RDaGlsZDspYy5yZW1v'@;
put 'dmVDaGlsZChsKX1jb25zdCBsdGU9Lyg8KC4qKT58JiguKik7KS87ZnVuY3Rpb24gZ2coYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2x0ZS50ZXN0KGwpP2MuaW5uZXJIVE1MPWE/cmsobCk6bDpqcChjLGwpfWZ1'@;
put 'bmN0aW9uIGpwKGMsbCl7Y29uc3QgYT1jLmZpcnN0Q2hpbGQ7YSYmMz09PWEubm9kZVR5cGUmJm51bGw9PT1hLm5leHRTaWJsaW5nP2EudGV4dENvbnRlbnQ9bDooZzIoYyksYy5hcHBlbmRDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobCkpKX1mdW5jdGlvbiBlNyhjKXtj'@;
put 'b25zdCBsPWMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7bGV0IGE9Yztmb3IoO2EhPT1sOyl7aWYobnVsbD09PWEpcmV0dXJuITE7aWYoYS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7aWYoYS5ob3N0KXtpZihhLmhvc3QuaW1wbClyZXR1cm4gZTcoYS5o'@;
put 'b3N0LmltcGwpO2lmKGEuaG9zdClyZXR1cm4gZTcoYS5ob3N0KTt0aHJvdyBuZXcgRXJyb3IoIkxvc3QgaW4gV2ViIENvbXBvbmVudHMgd29ybGQiKX1yZXR1cm4hMX1pZihhLnN0eWxlJiYibm9uZSI9PT1hLnN0eWxlLmRpc3BsYXkpcmV0dXJuITE7YT1hLnBhcmVudE5vZGV9cmV0dXJuITB9'@;
put 'ZnVuY3Rpb24gcWwoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRWaWV3LGQ9bC5kb2N1bWVudEVsZW1lbnQ7bGV0IGYsXyxULGg9Yztmb3IoZj1oLm9mZnNldExlZnQsXz1oLm9mZnNldFRvcCxUPWg7KGg9aC5vZmZzZXRQYXJlbnQpJiZoIT09bC5ib2R5OylmKz1oLm9m'@;
put 'ZnNldExlZnQsXys9aC5vZmZzZXRUb3AsVD1oO3JldHVybiBUJiYiZml4ZWQiPT09VC5zdHlsZS5wb3NpdGlvbiYmKGYrPWEucGFnZVhPZmZzZXR8fGQuc2Nyb2xsTGVmdCxfKz1hLnBhZ2VZT2Zmc2V0fHxkLnNjcm9sbFRvcCkse2xlZnQ6Zix0b3A6X319ZnVuY3Rpb24gdDcoKXtyZXR1cm4o'@;
put 'YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWX1mdW5jdGlvbiBtZygpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxYfWZ1'@;
put 'bmN0aW9uIG55KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP3Q3KGwpOmMuc2Nyb2xsVG9wfWZ1bmN0aW9uIGlrKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP21nKGwpOmMuc2Nyb2xsTGVmdH1mdW5jdGlvbiByeShjKXtsZXQgbD1jLm93bmVyRG9jdW1lbnQsYT1sP2wuZGVmYXVsdFZpZXc6dm9pZCAwO2x8fChsPWMuZG9jdW1lbnQ/Yy5kb2N1bWVudDpjLGE9bC5kZWZhdWx0'@;
put 'Vmlldyk7Y29uc3QgZD1bImF1dG8iLCJzY3JvbGwiXTtsZXQgaD1jLnBhcmVudE5vZGU7Zm9yKDtoJiZoLnN0eWxlJiZsLmJvZHkhPT1oOyl7bGV0e292ZXJmbG93OmYsb3ZlcmZsb3dYOl8sb3ZlcmZsb3dZOlR9PWguc3R5bGU7aWYoW2YsXyxUXS5pbmNsdWRlcygic2Nyb2xsIikpcmV0dXJu'@;
put 'IGg7aWYoKHtvdmVyZmxvdzpmLG92ZXJmbG93WDpfLG92ZXJmbG93WTpUfT1hLmdldENvbXB1dGVkU3R5bGUoaCkpLGQuaW5jbHVkZXMoZil8fGQuaW5jbHVkZXMoXyl8fGQuaW5jbHVkZXMoVCl8fGguY2xpZW50SGVpZ2h0PD1oLnNjcm9sbEhlaWdodCsxJiYoZC5pbmNsdWRlcyhUKXx8ZC5p'@;
put 'bmNsdWRlcyhmKSl8fGguY2xpZW50V2lkdGg8PWguc2Nyb2xsV2lkdGgrMSYmKGQuaW5jbHVkZXMoXyl8fGQuaW5jbHVkZXMoZikpKXJldHVybiBoO2g9aC5wYXJlbnROb2RlfXJldHVybiBhfWZ1bmN0aW9uIHZnKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0Vmlldzts'@;
put 'ZXQgZD1jLnBhcmVudE5vZGU7Zm9yKDtkJiZkLnN0eWxlJiZsLmJvZHkhPT1kOyl7aWYoInZpc2libGUiIT09ZC5zdHlsZS5vdmVyZmxvdyYmIiIhPT1kLnN0eWxlLm92ZXJmbG93KXJldHVybiBkO2NvbnN0IGg9enAoZCxhKSxmPVsic2Nyb2xsIiwiaGlkZGVuIiwiYXV0byJdLF89aC5nZXRQ'@;
put 'cm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpLFQ9aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy15IiksVz1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXgiKTtpZihmLmluY2x1ZGVzKF8pfHxmLmluY2x1ZGVzKFQpfHxmLmluY2x1ZGVzKFcpKXJldHVybiBkO2Q9ZC5wYXJlbnROb2Rl'@;
put 'fXJldHVybiBhfWZ1bmN0aW9uIG43KGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOndpbmRvdztpZighYylyZXR1cm47aWYoYz09PWEpcmV0dXJuIndpZHRoIj09PWw/YCR7YS5pbm5lcldpZHRofXB4YDoiaGVpZ2h0Ij09'@;
put 'PWw/YCR7YS5pbm5lckhlaWdodH1weGA6dm9pZCAwO2NvbnN0IGQ9Yy5zdHlsZVtsXTtpZigiIiE9PWQmJnZvaWQgMCE9PWQpcmV0dXJuIGQ7Y29uc3QgaD16cChjLGEpO3JldHVybiIiIT09aFtsXSYmdm9pZCAwIT09aFtsXT9oW2xdOnZvaWQgMH1mdW5jdGlvbiBqRWUoYyxsKXtjb25zdHtz'@;
put 'ZWxlY3RvclRleHQ6YX09bDtsZXQgZD0hMTtyZXR1cm4gbC50eXBlPT09Q1NTUnVsZS5TVFlMRV9SVUxFJiZhJiYoYy5tc01hdGNoZXNTZWxlY3Rvcj9kPWMubXNNYXRjaGVzU2VsZWN0b3IoYSk6Yy5tYXRjaGVzJiYoZD1jLm1hdGNoZXMoYSkpKSxkfWZ1bmN0aW9uIHpwKGMpe2xldCBsPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGMuY3VycmVudFN0eWxlfHxsLmdldENvbXB1dGVkU3R5bGUoYyl9ZnVuY3Rpb24gd2EoYyl7cmV0dXJuIGMub2Zmc2V0V2lkdGh9ZnVuY3Rpb24gYWwoYyl7cmV0dXJuIGMu'@;
put 'b2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIGpmKGMpe3JldHVybiBjLmNsaWVudEhlaWdodHx8Yy5pbm5lckhlaWdodH1mdW5jdGlvbiBpeShjKXtyZXR1cm4gYy5jbGllbnRXaWR0aHx8Yy5pbm5lcldpZHRofWZ1bmN0aW9uIHpFZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVu'@;
put 'Y3Rpb24gVUVlKGMsbCxhKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBoTihjKXtyZXR1cm4gYy5zZWxlY3Rpb25TdGFydD9jLnNlbGVjdGlvblN0YXJ0OjB9ZnVuY3Rpb24gY3RlKGMpe3JldHVybiBjLnNlbGVjdGlvbkVuZD9jLnNlbGVjdGlvbkVuZDowfWZ1bmN0'@;
put 'aW9uIHV0ZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Y29uc3QgbD1jLmRvY3VtZW50O2xldCBhPSIiO3JldHVybiBjLmdldFNlbGVjdGlvbj9hPWMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTpsLnNlbGVj'@;
put 'dGlvbiYmIkNvbnRyb2wiIT09bC5zZWxlY3Rpb24udHlwZSYmKGE9bC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0KSxhfWZ1bmN0aW9uIGZOKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjLmdldFNlbGVj'@;
put 'dGlvbiYmKGMuZ2V0U2VsZWN0aW9uKCkuZW1wdHk/Yy5nZXRTZWxlY3Rpb24oKS5lbXB0eSgpOmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzJiZjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpKX1mdW5jdGlvbiBveShjLGwsYSl7aWYodm9pZCAwPT09YSYmKGE9bCks'@;
put 'Yy5zZXRTZWxlY3Rpb25SYW5nZSl7Yy5mb2N1cygpO3RyeXtjLnNldFNlbGVjdGlvblJhbmdlKGwsYSl9Y2F0Y2h7Y29uc3QgaD1jLnBhcmVudE5vZGUsZj1oLnN0eWxlLmRpc3BsYXk7aC5zdHlsZS5kaXNwbGF5PSJibG9jayIsYy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpLGguc3R5bGUuZGlz'@;
put 'cGxheT1mfX19bGV0IHBOO2Z1bmN0aW9uIEljKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O3JldHVybiB2b2lkIDA9PT1wTiYmKHBOPWZ1bmN0aW9uIFpFZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVudDtjb25zdCBsPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZS5oZWlnaHQ9IjIwMHB4IixsLnN0eWxlLndpZHRoPSIxMDAlIjtjb25zdCBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zdHlsZS5ib3hTaXpp'@;
put 'bmc9ImNvbnRlbnQtYm94IixhLnN0eWxlLmhlaWdodD0iMTUwcHgiLGEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD0iMHB4IixhLnN0eWxlLndpZHRoPSIyMDBweCIsYS5zdHlsZS52aXNp'@;
put 'YmlsaXR5PSJoaWRkZW4iLGEuYXBwZW5kQ2hpbGQobCksKGMuYm9keXx8Yy5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKGEpO2NvbnN0IGQ9bC5vZmZzZXRXaWR0aDthLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO2xldCBoPWwub2Zmc2V0V2lkdGg7cmV0dXJuIGQ9PT1oJiYoaD1hLmNs'@;
put 'aWVudFdpZHRoKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkucmVtb3ZlQ2hpbGQoYSksZC1ofShjKSkscE59ZnVuY3Rpb24gZHRlKGMpe3JldHVybiBjLm9mZnNldFdpZHRoIT09Yy5jbGllbnRXaWR0aH1mdW5jdGlvbiBodGUoYyl7cmV0dXJuIGMub2Zmc2V0SGVpZ2h0IT09Yy5jbGll'@;
put 'bnRIZWlnaHR9ZnVuY3Rpb24gb2soYyxsLGEpe2Muc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgke2x9LCR7YX0sMClgfWZ1bmN0aW9uIFlFZShjKXtsZXQgbDtyZXR1cm4gYy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09KGw9Yy5zdHlsZS50cmFuc2Zvcm0pP1sidHJhbnNmb3JtIixsXTot'@;
put 'MX1mdW5jdGlvbiBzeShjKXtjLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT1jLnN0eWxlLnRyYW5zZm9ybSYmKGMuc3R5bGUudHJhbnNmb3JtPSIiKX1mdW5jdGlvbiBheShjKXtyZXR1cm4gYyYmKFsiSU5QVVQiLCJTRUxFQ1QiLCJURVhUQVJFQSJdLmluZGV4T2YoYy5ub2RlTmFtZSk+LTF8fCJ0'@;
put 'cnVlIj09PWMuY29udGVudEVkaXRhYmxlKX1mdW5jdGlvbiBzayhjKXtyZXR1cm4gYXkoYykmJiExPT09Yy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iil9ZnVuY3Rpb24gZnRlKGMpe3NrKGMub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8Yy5zZWxlY3QoKX1mdW5jdGlvbiBn'@;
put 'TihjKXtyZXR1cm4hYy5wYXJlbnROb2RlfWZ1bmN0aW9uIHB0ZShjLGwpe25ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZCxoKT0+e2QuZm9yRWFjaChmPT57Zi5pc0ludGVyc2VjdGluZyYmbnVsbCE9PWMub2Zmc2V0UGFyZW50JiYobCgpLGgudW5vYnNlcnZlKGMpKX0pfSx7cm9vdDpjLm93'@;
put 'bmVyRG9jdW1lbnQuYm9keX0pLm9ic2VydmUoYyl9ZnVuY3Rpb24gUmEoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gZ3RlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT0wO2NvbnN0IGQ9'@;
put 'e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaD1udWxsO3JldHVybiBmdW5jdGlvbiBmKCl7Zm9yKHZhciBfPWFyZ3VtZW50cy5sZW5ndGgsVD1uZXcgQXJyYXkoXyksVz0wO1c8XztXKyspVFtXXT1hcmd1bWVudHNbV107Y29uc3QgaWU9RGF0ZS5ub3coKTtsZXQgZ2U9ITE7ZC5sYXN0Q2Fs'@;
put 'bFRocm90dGxlZD0hMCxhfHwoYT1pZSxnZT0hMCk7Y29uc3Qgd2U9bC0oaWUtYSk7cmV0dXJuIGdlPyhkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxUKSk6KGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoKCk9PntkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBw'@;
put 'bHkodGhpcyxUKSxhPTAsaD12b2lkIDB9LHdlKSksZH19ZnVuY3Rpb24gV0VlKGMpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMDtjb25zdCBkPWd0ZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdP2FyZ3VtZW50c1sxXToyMDApO2xldCBoPWE7ZnVuY3Rpb24gXygpe2Zvcih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFQpLGllPTA7aWU8VDtpZSsrKVdbaWVdPWFyZ3VtZW50c1tpZV07cmV0dXJuIGg/KGgtPTEsYy5hcHBseSh0aGlzLFcpKTpkLmFwcGx5KHRoaXMs'@;
put 'Vyl9cmV0dXJuIF8uY2xlYXJIaXRzPWZ1bmN0aW9uIGYoKXtoPWF9LF99ZnVuY3Rpb24gbU4oYyl7bGV0IGQsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9bnVsbDtyZXR1cm4gZnVuY3Rpb24gaCgpe2Zvcih2YXIgZj1hcmd1'@;
put 'bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9MDtUPGY7VCsrKV9bVF09YXJndW1lbnRzW1RdO3JldHVybiBhJiZjbGVhclRpbWVvdXQoYSksYT1zZXRUaW1lb3V0KCgpPT57ZD1jLmFwcGx5KHRoaXMsXyl9LGwpLGR9fWZ1bmN0aW9uIEdFZSgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVu'@;
put 'Z3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09bDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIF89YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheShfKSxXPTA7VzxfO1crKylUW1ddPWFyZ3VtZW50c1tXXTtyZXR1cm4gQWwo'@;
put 'aCwoaWUsZ2UpPT5nZShpZSksZC5hcHBseSh0aGlzLFQpKX19ZnVuY3Rpb24gdk4oYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1'@;
put 'bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9MDtUPGY7VCsrKV9bVF09YXJndW1lbnRzW1RdO3JldHVybiBjLmFwcGx5KHRoaXMsYS5jb25jYXQoXykpfX1mdW5jdGlvbiBtdGUoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShmKSxUPTA7VDxmO1QrKylfW1RdPWFyZ3VtZW50c1tUXTtjb25zdCBXPWQuY29uY2F0KF8pO2xldCBpZTtyZXR1cm4gaWU9Vy5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLFcpOmEoVyksaWV9fShbXSl9ZnVuY3Rpb24gJEVlKGMp'@;
put 'e2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkoZiksVD0wO1Q8ZjtUKyspX1tUXT1hcmd1bWVudHNbVF07Y29uc3QgVz1kLmNvbmNhdChfLnJldmVyc2UoKSk7bGV0IGll'@;
put 'O3JldHVybiBpZT1XLmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsVyk6YShXKSxpZX19KFtdKX1mdW5jdGlvbiBhayhjLGwsYSxkLGgsZixfLFQpe3JldHVybiBLaShUKT9jLmNhbGwobCxhLGQsaCxmLF8sVCk6S2koXyk/Yy5jYWxsKGwsYSxkLGgsZixfKTpLaShmKT9jLmNhbGwobCxhLGQsaCxm'@;
put 'KTpLaShoKT9jLmNhbGwobCxhLGQsaCk6S2koZCk/Yy5jYWxsKGwsYSxkKTpLaShhKT9jLmNhbGwobCxhKTpjLmNhbGwobCl9ZnVuY3Rpb24gcjcoYyl7bGV0IGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/bD1jLmxlbmd0aD9uZXcgQXJyYXkoYy5sZW5ndGgpLmZpbGwobnVsbCk6W106KGw9'@;
put 'e30sZHMoYywoYSxkKT0+eyJfX2NoaWxkcmVuIiE9PWQmJihsW2RdPWEmJiJvYmplY3QiPT10eXBlb2YgYSYmIUFycmF5LmlzQXJyYXkoYSk/cjcoYSk6QXJyYXkuaXNBcnJheShhKT9hLmxlbmd0aCYmIm9iamVjdCI9PXR5cGVvZiBhWzBdJiYhQXJyYXkuaXNBcnJheShhWzBdKT9bcjcoYVsw'@;
put 'XSldOltdOm51bGwpfSkpLGx9ZnVuY3Rpb24gemYoYyxsKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxjLnByb3RvdHlwZT1uZXcgbCxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGN9ZnVuY3Rpb24gS2woYyxsLGEpe2NvbnN0IGQ9QXJyYXkuaXNBcnJheShhKTtyZXR1cm4g'@;
put 'ZHMobCwoaCxmKT0+eyghMT09PWR8fGEuaW5jbHVkZXMoZikpJiYoY1tmXT1oKX0pLGN9ZnVuY3Rpb24gbHkoYyxsKXtkcyhsLChhLGQpPT57bFtkXSYmIm9iamVjdCI9PXR5cGVvZiBsW2RdPyhjW2RdfHwoY1tkXT1BcnJheS5pc0FycmF5KGxbZF0pP1tdOiJbb2JqZWN0IERhdGVdIj09PU9i'@;
put 'amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsW2RdKT9sW2RdOnt9KSxseShjW2RdLGxbZF0pKTpjW2RdPWxbZF19KX1mdW5jdGlvbiB5dShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGM/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSk6Y31mdW5jdGlvbiBXdShjKXtjb25zdCBs'@;
put 'PXt9O3JldHVybiBkcyhjLChhLGQpPT57bFtkXT1hfSksbH1mdW5jdGlvbiBUYShjKXtjLk1JWElOU3x8KGMuTUlYSU5TPVtdKTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIERu'@;
put 'KGEsaD0+e2MuTUlYSU5TLnB1c2goaC5NSVhJTl9OQU1FKSxkcyhoLChmLF8pPT57aWYodm9pZCAwIT09Yy5wcm90b3R5cGVbX10pdGhyb3cgbmV3IEVycm9yKGBNaXhpbiBjb25mbGljdC4gUHJvcGVydHkgJyR7X30nIGFscmVhZHkgZXhpc3QgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi5g'@;
put 'KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZiljLnByb3RvdHlwZVtfXT1mO2Vsc2V7Y29uc3QgVz1mdW5jdGlvbihnZSl7Y29uc3Qgd2U9YF8ke2dlfWA7cmV0dXJuIGZ1bmN0aW9uKEVlKXt0aGlzW3dlXT1FZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSxfLHtnZXQ6ZnVu'@;
put 'Y3Rpb24oZ2Usd2Upe2NvbnN0IEVlPWBfJHtnZX1gO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzW0VlXSYmKHRoaXNbRWVdPShvdD0+e2xldCBldD1vdDtyZXR1cm4oQXJyYXkuaXNBcnJheShldCl8fHVzKGV0KSkmJihldD15dShldCkpLGV0fSkod2UpKSx0aGlzW0Vl'@;
put 'XX19KF8sZiksc2V0OlcoXyksY29uZmlndXJhYmxlOiEwfSl9fSl9KSxjfWZ1bmN0aW9uIGxrKGMsbCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGMpPT09SlNPTi5zdHJpbmdpZnkobCl9ZnVuY3Rpb24gdXMoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRv'@;
put 'U3RyaW5nLmNhbGwoYyl9ZnVuY3Rpb24gZmgoYyxsLGEsZCl7ZC52YWx1ZT1hLGQud3JpdGFibGU9ITEhPT1kLndyaXRhYmxlLGQuZW51bWVyYWJsZT0hMSE9PWQuZW51bWVyYWJsZSxkLmNvbmZpZ3VyYWJsZT0hMSE9PWQuY29uZmlndXJhYmxlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws'@;
put 'ZCl9ZnVuY3Rpb24gZHMoYyxsKXtmb3IoY29uc3QgYSBpbiBjKWlmKCghYy5oYXNPd25Qcm9wZXJ0eXx8Yy5oYXNPd25Qcm9wZXJ0eSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYSkpJiYhMT09PWwoY1thXSxhLGMpKWJyZWFrO3JldHVybiBjfWZ1bmN0aW9uIHZ0'@;
put 'ZShjLGwpe2NvbnN0IGE9bC5zcGxpdCgiLiIpO2xldCBkPWM7cmV0dXJuIGRzKGEsaD0+e2lmKGQ9ZFtoXSx2b2lkIDA9PT1kKXJldHVybiBkPXZvaWQgMCwhMX0pLGR9ZnVuY3Rpb24gY2soYyxsLGEpe2NvbnN0IGQ9bC5zcGxpdCgiLiIpO2xldCBoPWM7ZC5mb3JFYWNoKChmLF8pPT57XyE9'@;
put 'PWQubGVuZ3RoLTE/KGJsKGgsZil8fChoW2ZdPXt9KSxoPWhbZl0pOmhbZl09YX0pfWZ1bmN0aW9uIHVrKGMpe2lmKCF1cyhjKSlyZXR1cm4gMDtjb25zdCBsPWZ1bmN0aW9uKGEpe2xldCBkPTA7cmV0dXJuIHVzKGEpP2RzKGEsKGgsZik9PnsiX19jaGlsZHJlbiIhPT1mJiYoZCs9bChoKSl9'@;
put 'KTpkKz0xLGR9O3JldHVybiBsKGMpfWZ1bmN0aW9uIF9nKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidmFsdWUiO2NvbnN0IGE9YF8ke2x9YCxkPXtfdG91Y2hlZDohMSxbYV06Yyxpc1RvdWNoZWQoKXtyZXR1cm4gdGhp'@;
put 'cy5fdG91Y2hlZH19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1thXT1ofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGR9ZnVuY3Rpb24gYmwoYyxsKXtyZXR1cm4gT2Jq'@;
put 'ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl9RigxMzAwNik7Y29uc3QgZmQ9Yz0+e2NvbnN0IGw9e3ZhbHVlOiExLHRlc3Q6KGEsZCk9PntsLnZhbHVlPWMoYSxkKX19O3JldHVybiBsfSxVZj17Y2hyb21lOmZkKChjLGwpPT4vQ2hyb21lLy50ZXN0KGMpJiYvR29vZ2xl'@;
put 'Ly50ZXN0KGwpKSxjaHJvbWVXZWJLaXQ6ZmQoYz0+L0NyaU9TLy50ZXN0KGMpKSxlZGdlOmZkKGM9Pi9FZGdlLy50ZXN0KGMpKSxlZGdlV2ViS2l0OmZkKGM9Pi9FZGdpT1MvLnRlc3QoYykpLGZpcmVmb3g6ZmQoYz0+L0ZpcmVmb3gvLnRlc3QoYykpLGZpcmVmb3hXZWJLaXQ6ZmQoYz0+L0Z4'@;
put 'aU9TLy50ZXN0KGMpKSxtb2JpbGU6ZmQoYz0+L0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGMpKSxzYWZhcmk6ZmQoKGMsbCk9Pi9TYWZhcmkvLnRlc3QoYykmJi9BcHBsZSBDb21wdXRlci8udGVzdChsKSl9LGk3'@;
put 'PXttYWM6ZmQoYz0+L15NYWMvLnRlc3QoYykpLHdpbjpmZChjPT4vXldpbi8udGVzdChjKSksbGludXg6ZmQoYz0+L15MaW51eC8udGVzdChjKSksaW9zOmZkKGM9Pi9pUGhvbmV8aVBhZHxpUG9kL2kudGVzdChjKSl9O2Z1bmN0aW9uIF90ZSgpe2xldHt1c2VyQWdlbnQ6Yz1uYXZpZ2F0b3Iu'@;
put 'dXNlckFnZW50LHZlbmRvcjpsPW5hdmlnYXRvci52ZW5kb3J9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtkcyhVZixhPT57bGV0e3Rlc3Q6ZH09YTtkKGMsbCl9KX1mdW5jdGlvbiBidGUoKXtsZXR7cGxhdGZvcm06Yz1uYXZpZ2F0'@;
put 'b3IucGxhdGZvcm19PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtkcyhpNyxsPT57bGV0e3Rlc3Q6YX09bDthKGMpfSl9ZnVuY3Rpb24gX04oKXtyZXR1cm4gVWYuY2hyb21lLnZhbHVlfWZ1bmN0aW9uIHl0ZSgpe3JldHVybiBVZi5j'@;
put 'aHJvbWVXZWJLaXQudmFsdWV9ZnVuY3Rpb24gZGsoKXtyZXR1cm4gVWYuZmlyZWZveC52YWx1ZX1mdW5jdGlvbiB3dGUoKXtyZXR1cm4gVWYuZmlyZWZveFdlYktpdC52YWx1ZX1mdW5jdGlvbiBxRWUoKXtyZXR1cm4gVWYuc2FmYXJpLnZhbHVlfWZ1bmN0aW9uIEN0ZSgpe3JldHVybiBVZi5l'@;
put 'ZGdlLnZhbHVlfWZ1bmN0aW9uIEtFZSgpe3JldHVybiBVZi5lZGdlV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIG0yKCl7cmV0dXJuIFVmLm1vYmlsZS52YWx1ZX1mdW5jdGlvbiBiTigpe3JldHVybiBpNy5pb3MudmFsdWV9ZnVuY3Rpb24geU4oKXtsZXR7bWF4VG91Y2hQb2ludHM6Y309YXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5hdmlnYXRvcjtyZXR1cm4gYz4yJiZpNy5tYWMudmFsdWV9ZnVuY3Rpb24gd04oKXtyZXR1cm4gaTcud2luLnZhbHVlfWZ1bmN0aW9uIGhrKCl7cmV0dXJuIGk3Lm1hYy52YWx1ZX1mdW5jdGlvbiBYRWUo'@;
put 'KXtyZXR1cm4gaTcubGludXgudmFsdWV9X3RlKCksYnRlKCk7Y29uc3QgY289e0FMVDoxOCxBUlJPV19ET1dOOjQwLEFSUk9XX0xFRlQ6MzcsQVJST1dfUklHSFQ6MzksQVJST1dfVVA6MzgsQVVESU9fRE9XTjpkaygpPzE4MjoxNzQsQVVESU9fTVVURTpkaygpPzE4MToxNzMsQVVESU9fVVA6'@;
put 'ZGsoKT8xODM6MTc1LEJBQ0tTUEFDRTo4LENBUFNfTE9DSzoyMCxDT01NQToxODgsQ09NTUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMsQ09NTUFORF9GSVJFRk9YOjIyNCxDT05UUk9MOjE3LERFTEVURTo0NixFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEYxOjExMixGMjoxMTMsRjM6'@;
put 'MTE0LEY0OjExNSxGNToxMTYsRjY6MTE3LEY3OjExOCxGODoxMTksRjk6MTIwLEYxMDoxMjEsRjExOjEyMixGMTI6MTIzLEYxMzoxMjQsRjE0OjEyNSxGMTU6MTI2LEYxNjoxMjcsRjE3OjEyOCxGMTg6MTI5LEYxOToxMzAsSE9NRTozNixJTlNFUlQ6NDUsTUVESUFfTkVYVDoxNzYsTUVESUFf'@;
put 'UExBWV9QQVVTRToxNzksTUVESUFfUFJFVjoxNzcsTUVESUFfU1RPUDoxNzgsTlVMTDowLE5VTV9MT0NLOjE0NCxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQQVVTRToxOSxQRVJJT0Q6MTkwLFNDUk9MTF9MT0NLOjE0NSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxBOjY1LEM6NjcsRDo2OCxG'@;
put 'OjcwLEw6NzYsTzo3OSxQOjgwLFM6ODMsVjo4NixYOjg4LFk6ODksWjo5MH0sSkVlPVtjby5BTFQsY28uQVJST1dfRE9XTixjby5BUlJPV19MRUZULGNvLkFSUk9XX1JJR0hULGNvLkFSUk9XX1VQLGNvLkFVRElPX0RPV04sY28uQVVESU9fTVVURSxjby5BVURJT19VUCxjby5CQUNLU1BBQ0Us'@;
put 'Y28uQ0FQU19MT0NLLGNvLkRFTEVURSxjby5FTkQsY28uRU5URVIsY28uRVNDQVBFLGNvLkYxLGNvLkYyLGNvLkYzLGNvLkY0LGNvLkY1LGNvLkY2LGNvLkY3LGNvLkY4LGNvLkY5LGNvLkYxMCxjby5GMTEsY28uRjEyLGNvLkYxMyxjby5GMTQsY28uRjE1LGNvLkYxNixjby5GMTcsY28uRjE4'@;
put 'LGNvLkYxOSxjby5IT01FLGNvLklOU0VSVCxjby5NRURJQV9ORVhULGNvLk1FRElBX1BMQVlfUEFVU0UsY28uTUVESUFfUFJFVixjby5NRURJQV9TVE9QLGNvLk5VTEwsY28uTlVNX0xPQ0ssY28uUEFHRV9ET1dOLGNvLlBBR0VfVVAsY28uUEFVU0UsY28uU0NST0xMX0xPQ0ssY28uU0hJRlQs'@;
put 'Y28uVEFCXTtmdW5jdGlvbiBTdGUoYyl7cmV0dXJuIDMyPT09Y3x8Yz49NDgmJmM8PTU3fHxjPj05NiYmYzw9MTExfHxjPj0xODYmJmM8PTE5Mnx8Yz49MjE5JiZjPD0yMjJ8fGM+PTIyNnx8Yz49NjUmJmM8PTkwfWZ1bmN0aW9uIENOKGMpe3JldHVybiBKRWUuaW5jbHVkZXMoYyl9ZnVuY3Rp'@;
put 'b24gUUVlKGMpe2NvbnN0IGw9W107cmV0dXJuIGhrKCk/bC5wdXNoKGNvLkNPTU1BTkRfTEVGVCxjby5DT01NQU5EX1JJR0hULGNvLkNPTU1BTkRfRklSRUZPWCk6bC5wdXNoKGNvLkNPTlRST0wpLGwuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gTXRlKGMpe3JldHVybltjby5DT05UUk9MLGNvLkNP'@;
put 'TU1BTkRfTEVGVCxjby5DT01NQU5EX1JJR0hULGNvLkNPTU1BTkRfRklSRUZPWF0uaW5jbHVkZXMoYyl9ZnVuY3Rpb24gbzcoYyxsKXtjb25zdCBhPWwuc3BsaXQoInwiKTtsZXQgZD0hMTtyZXR1cm4gRG4oYSxoPT57aWYoYz09PWNvW2hdKXJldHVybiBkPSEwLCExfSksZH1mdW5jdGlvbiB2'@;
put 'MihjKXtjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkPSExLGMuY2FuY2VsQnViYmxlPSEwfWZ1bmN0aW9uIGJnKGMpe3JldHVybiExPT09Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZH1mdW5jdGlvbiBVcChjKXtyZXR1cm4gMj09PWMuYnV0dG9ufWZ1bmN0aW9uIGZrKGMp'@;
put 'e3JldHVybiAwPT09Yy5idXR0b259ZnVuY3Rpb24gR2EoKXtLaShjb25zb2xlKSYmY29uc29sZS53YXJuKC4uLmFyZ3VtZW50cyl9ZnVuY3Rpb24gU04oKXtLaShjb25zb2xlKSYmY29uc29sZS5lcnJvciguLi5hcmd1bWVudHMpfWNvbnN0IHM3PVsiYWZ0ZXJDZWxsTWV0YVJlc2V0IiwiYWZ0'@;
put 'ZXJDaGFuZ2UiLCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIiwiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIiwiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLCJiZWZvcmVD'@;
put 'b250ZXh0TWVudVNob3ciLCJhZnRlckNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29weUxpbWl0IiwiYmVmb3JlQ3JlYXRlQ29sIiwiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsImFmdGVyQ3JlYXRlQ29sIiwiYmVmb3JlQ3JlYXRlUm93IiwiYWZ0ZXJDcmVhdGVSb3ciLCJhZnRlckRlc2Vs'@;
put 'ZWN0IiwiYWZ0ZXJEZXN0cm95IiwiYWZ0ZXJEb2N1bWVudEtleURvd24iLCJhZnRlckRyYXdTZWxlY3Rpb24iLCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsImFmdGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdldENvbEhlYWRlciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0Iiwi'@;
put 'YWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyTW9tZW50dW1TY3JvbGwiLCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLCJhZnRlck9uQ2VsbE1vdXNlRG93biIsImFmdGVyT25DZWxsTW91c2VVcCIsImFmdGVyT25D'@;
put 'ZWxsQ29udGV4dE1lbnUiLCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsImFmdGVyT25DZWxsTW91c2VPdXQiLCJhZnRlclJlbW92ZUNvbCIsImFmdGVyUmVtb3ZlUm93IiwiYmVmb3JlUmVuZGVyZXIiLCJhZnRlclJlbmRlcmVyIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsImFmdGVyU2Nyb2xs'@;
put 'SG9yaXpvbnRhbGx5IiwiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwiYWZ0ZXJTZWxlY3Rpb24iLCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRW5kIiwiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLCJhZnRlclNldENlbGxNZXRhIiwiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIs'@;
put 'ImFmdGVyU2V0RGF0YUF0Q2VsbCIsImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsImFmdGVyVXBkYXRlU2V0dGluZ3MiLCJhZnRlclZhbGlkYXRlIiwiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLCJhZnRlckxhbmd1YWdlQ2hhbmdlIiwiYmVmb3JlQXV0'@;
put 'b2ZpbGwiLCJhZnRlckF1dG9maWxsIiwiYmVmb3JlQ2VsbEFsaWdubWVudCIsImJlZm9yZUNoYW5nZSIsImJlZm9yZUNoYW5nZVJlbmRlciIsImJlZm9yZURyYXdCb3JkZXJzIiwiYmVmb3JlR2V0Q2VsbE1ldGEiLCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsImJlZm9yZUluaXQiLCJiZWZvcmVJ'@;
put 'bml0V2Fsa29udGFibGUiLCJiZWZvcmVMb2FkRGF0YSIsImJlZm9yZVVwZGF0ZURhdGEiLCJiZWZvcmVLZXlEb3duIiwiYmVmb3JlT25DZWxsTW91c2VEb3duIiwiYmVmb3JlT25DZWxsTW91c2VVcCIsImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IiwiYmVmb3JlT25DZWxsTW91c2VPdmVyIiwi'@;
put 'YmVmb3JlT25DZWxsTW91c2VPdXQiLCJiZWZvcmVSZW1vdmVDb2wiLCJiZWZvcmVSZW1vdmVSb3ciLCJiZWZvcmVWaWV3UmVuZGVyIiwiYWZ0ZXJWaWV3UmVuZGVyIiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJiZWZvcmVTZXRDZWxsTWV0YSIsImJlZm9yZVNldFJhbmdlU3RhcnRP'@;
put 'bmx5IiwiYmVmb3JlU2V0UmFuZ2VTdGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3JlVG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJlZm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlmeUNvbEhlYWRlciIsIm1vZGlmeUNvbFdpZHRoIiwibW9kaWZ5'@;
put 'Um93SGVhZGVyIiwibW9kaWZ5Um93SGVpZ2h0IiwibW9kaWZ5RGF0YSIsIm1vZGlmeVNvdXJjZURhdGEiLCJtb2RpZnlSb3dEYXRhIiwibW9kaWZ5R2V0Q2VsbENvb3JkcyIsImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsInBl'@;
put 'cnNpc3RlbnRTdGF0ZUxvYWQiLCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJiZWZvcmVDb2x1bW5Tb3J0IiwiYWZ0ZXJDb2x1bW5Tb3J0IiwibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLCJiZWZvcmVDdXQiLCJhZnRlckN1'@;
put 'dCIsImJlZm9yZUNvcHkiLCJhZnRlckNvcHkiLCJiZWZvcmVQYXN0ZSIsImFmdGVyUGFzdGUiLCJiZWZvcmVDb2x1bW5GcmVlemUiLCJhZnRlckNvbHVtbkZyZWV6ZSIsImJlZm9yZUNvbHVtbk1vdmUiLCJhZnRlckNvbHVtbk1vdmUiLCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsImFmdGVyQ29s'@;
put 'dW1uVW5mcmVlemUiLCJiZWZvcmVSb3dNb3ZlIiwiYWZ0ZXJSb3dNb3ZlIiwiYmVmb3JlQ29sdW1uUmVzaXplIiwiYWZ0ZXJDb2x1bW5SZXNpemUiLCJiZWZvcmVSb3dSZXNpemUiLCJhZnRlclJvd1Jlc2l6ZSIsImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIiwiYWZ0ZXJHZXRSb3dI'@;
put 'ZWFkZXJSZW5kZXJlcnMiLCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLCJiZWZvcmVGaWx0ZXIiLCJhZnRlckZpbHRlciIsImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiwiYWZ0'@;
put 'ZXJTaGVldEFkZGVkIiwiYWZ0ZXJTaGVldFJlbmFtZWQiLCJhZnRlclNoZWV0UmVtb3ZlZCIsIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiYmVmb3JlVW5kbyIsImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsImFmdGVyVW5kbyIsImFmdGVyVW5k'@;
put 'b1N0YWNrQ2hhbmdlIiwiYmVmb3JlUmVkbyIsImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsImFmdGVyUmVkbyIsImFmdGVyUmVkb1N0YWNrQ2hhbmdlIiwibW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsIm1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyTW9kaWZ5'@;
put 'VHJhbnNmb3JtU3RhcnQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJiZWZvcmVIaWRlUm93cyIsImFm'@;
put 'dGVySGlkZVJvd3MiLCJiZWZvcmVVbmhpZGVSb3dzIiwiYWZ0ZXJVbmhpZGVSb3dzIiwiYmVmb3JlSGlkZUNvbHVtbnMiLCJhZnRlckhpZGVDb2x1bW5zIiwiYmVmb3JlVW5oaWRlQ29sdW1ucyIsImFmdGVyVW5oaWRlQ29sdW1ucyIsImJlZm9yZVRyaW1Sb3ciLCJhZnRlclRyaW1Sb3ciLCJi'@;
put 'ZWZvcmVVbnRyaW1Sb3ciLCJhZnRlclVudHJpbVJvdyIsImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCJiZWZvcmVBZGRDaGlsZCIsImFmdGVyQWRkQ2hpbGQiLCJiZWZvcmVEZXRhY2hDaGlsZCIsImFmdGVy'@;
put 'RGV0YWNoQ2hpbGQiLCJhZnRlckJlZ2luRWRpdGluZyIsImJlZm9yZU1lcmdlQ2VsbHMiLCJhZnRlck1lcmdlQ2VsbHMiLCJiZWZvcmVVbm1lcmdlQ2VsbHMiLCJhZnRlclVubWVyZ2VDZWxscyIsImFmdGVyTGlzdGVuIiwiYWZ0ZXJVbmxpc3RlbiIsImFmdGVyUmVmcmVzaERpbWVuc2lvbnMi'@;
put 'LCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZUNvbHVtbkNvbGxhcHNlIiwiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsImJlZm9yZUNvbHVtbkV4cGFuZCIsImFmdGVyQ29sdW1uRXhwYW5kIiwibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIl0sZWtlPUFhYFRoZSBwbHVnaW4gaG9vayAi'@;
put 'W2hvb2tOYW1lXSIgd2FzIHJlbW92ZWQgaW4gSGFuZHNvbnRhYmxlIFtyZW1vdmVkSW5WZXJzaW9uXS5ceDIwCiAgUGxlYXNlIGNvbnN1bHQgcmVsZWFzZSBub3RlcyBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9yZWxlYXNlcy90YWcvW3JlbW92ZWRJblZl'@;
put 'cnNpb25dIHRvXHgyMAogIGxlYXJuIGFib3V0IHRoZSBtaWdyYXRpb24gcGF0aC5gLE1OPW5ldyBNYXAoW1sibW9kaWZ5Um93IiwiOC4wLjAiXSxbIm1vZGlmeUNvbCIsIjguMC4wIl0sWyJ1bm1vZGlmeVJvdyIsIjguMC4wIl0sWyJ1bm1vZGlmeUNvbCIsIjguMC4wIl0sWyJza2lwTGVuZ3Ro'@;
put 'Q2FjaGUiLCI4LjAuMCJdLFsiaGlkZGVuQ29sdW1uIiwiOC4wLjAiXSxbImhpZGRlblJvdyIsIjguMC4wIl1dKSx4Tj1uZXcgTWFwKFtdKTtjbGFzcyB4dGV7c3RhdGljIGdldFNpbmdsZXRvbigpe3JldHVybiBmdW5jdGlvbiBua2UoKXtyZXR1cm4gdGtlfSgpfWNvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5nbG9iYWxCdWNrZXQ9dGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpfWNyZWF0ZUVtcHR5QnVja2V0KCl7Y29uc3QgbD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBEbihzNyxhPT5sW2FdPVtdKSxsfWdldEJ1Y2tldCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBsPyhsLnBsdWdpbkhvb2tCdWNrZXR8fChsLnBsdWdpbkhvb2tCdWNrZXQ9dGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpKSxsLnBsdWdpbkhvb2tCdWNrZXQpOnRoaXMuZ2xvYmFsQnVja2V0fWFkZChsLGEpe2xldCBkPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKEFycmF5LmlzQXJyYXkoYSkpRG4oYSxoPT50aGlzLmFkZChsLGgsZCkpO2Vsc2V7TU4uaGFzKGwpJiZHYShjTihla2Use2hvb2tOYW1lOmwscmVtb3ZlZEluVmVyc2lvbjpNTi5nZXQobCl9KSks'@;
put 'eE4uaGFzKGwpJiZHYSh4Ti5nZXQobCkpO2NvbnN0IGg9dGhpcy5nZXRCdWNrZXQoZCk7aWYodHlwZW9mIGhbbF0+InUiJiYodGhpcy5yZWdpc3RlcihsKSxoW2xdPVtdKSxhLnNraXA9ITEsLTE9PT1oW2xdLmluZGV4T2YoYSkpe2xldCBmPSExO2EuaW5pdGlhbEhvb2smJkRuKGhbbF0sKF8s'@;
put 'VCk9PntpZihfLmluaXRpYWxIb29rKXJldHVybiBoW2xdW1RdPWEsZj0hMCwhMX0pLGZ8fGhbbF0ucHVzaChhKX19cmV0dXJuIHRoaXN9b25jZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO0FycmF5LmlzQXJy'@;
put 'YXkoYSk/RG4oYSxoPT50aGlzLm9uY2UobCxoLGQpKTooYS5ydW5PbmNlPSEwLHRoaXMuYWRkKGwsYSxkKSl9cmVtb3ZlKGwsYSl7Y29uc3QgaD10aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCk7cmV0dXJu'@;
put 'IHR5cGVvZiBoW2xdPCJ1IiYmaFtsXS5pbmRleE9mKGEpPj0wJiYoYS5za2lwPSEwLCEwKX1oYXMobCl7Y29uc3QgZD10aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCk7cmV0dXJuISh2b2lkIDA9PT1kW2xd'@;
put 'fHwhZFtsXS5sZW5ndGgpfXJ1bihsLGEsZCxoLGYsXyxULFcpe3tjb25zdCBpZT10aGlzLmdsb2JhbEJ1Y2tldFthXSxnZT1pZT9pZS5sZW5ndGg6MDtsZXQgd2U9MDtpZihnZSlmb3IoO3dlPGdlOyl7aWYoIWllW3dlXXx8aWVbd2VdLnNraXApe3dlKz0xO2NvbnRpbnVlfWNvbnN0IEVlPWFr'@;
put 'KGllW3dlXSxsLGQsaCxmLF8sVCxXKTt2b2lkIDAhPT1FZSYmKGQ9RWUpLGllW3dlXSYmaWVbd2VdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGEsaWVbd2VdKSx3ZSs9MX19e2NvbnN0IGllPXRoaXMuZ2V0QnVja2V0KGwpW2FdLGdlPWllP2llLmxlbmd0aDowO2xldCB3ZT0wO2lmKGdlKWZvcig7'@;
put 'd2U8Z2U7KXtpZighaWVbd2VdfHxpZVt3ZV0uc2tpcCl7d2UrPTE7Y29udGludWV9Y29uc3QgRWU9YWsoaWVbd2VdLGwsZCxoLGYsXyxULFcpO3ZvaWQgMCE9PUVlJiYoZD1FZSksaWVbd2VdJiZpZVt3ZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxpZVt3ZV0sbCksd2UrPTF9fXJldHVybiBk'@;
put 'fWRlc3Ryb3koKXtkcyh0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCksKGEsZCxoKT0+aFtkXS5sZW5ndGg9MCl9cmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCl8fHM3LnB1c2gobCl9ZGVyZWdp'@;
put 'c3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKSYmczcuc3BsaWNlKHM3LmluZGV4T2YobCksMSl9aXNEZXByZWNhdGVkKGwpe3JldHVybiB4Ti5oYXMobCl8fE1OLmhhcyhsKX1pc1JlZ2lzdGVyZWQobCl7cmV0dXJuIHM3LmluZGV4T2YobCk+PTB9Z2V0UmVnaXN0ZXJlZCgpe3JldHVybiBz'@;
put 'N319Y29uc3QgdGtlPW5ldyB4dGUsc289eHRlLEVOPW5ldyBNYXA7ZnVuY3Rpb24gcGQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNvbW1vbiI7RU4uaGFzKGMpfHxFTi5zZXQoYyxuZXcgTWFwKTtjb25zdCBsPUVOLmdl'@;
put 'dChjKTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24gYShULFcpe2wuc2V0KFQsVyl9LGdldEl0ZW06ZnVuY3Rpb24gZChUKXtyZXR1cm4gbC5nZXQoVCl9LGhhc0l0ZW06ZnVuY3Rpb24gaChUKXtyZXR1cm4gbC5oYXMoVCl9LGdldE5hbWVzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4ubC5rZXlz'@;
put 'KCldfSxnZXRWYWx1ZXM6ZnVuY3Rpb24gXygpe3JldHVyblsuLi5sLnZhbHVlcygpXX19fWNvbnN0IGtOPW5ldyBXZWFrTWFwLHtyZWdpc3Rlcjpya2UsZ2V0SXRlbTpFdGUsaGFzSXRlbTprdGUsZ2V0TmFtZXM6aWtlfT1wZCgiZWRpdG9ycyIpO2Z1bmN0aW9uIG9rZShjKXtjb25zdCBsPXt9'@;
put 'LGE9Yzt0aGlzLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ3VpZCBpbiBsfHwobFtkLmd1aWRdPW5ldyBhKGQpKSxsW2QuZ3VpZF19LHNvLmdldFNpbmdsZXRvbigpLmFkZCgiYWZ0ZXJEZXN0cm95Iixm'@;
put 'dW5jdGlvbigpe2xbdGhpcy5ndWlkXT1udWxsfSl9ZnVuY3Rpb24gQXRlKGMsbCl7bGV0IGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpa04uZ2V0KGMpfHxSMChudWxsLGMpLGE9a04uZ2V0KGMpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBjKXRocm93IEVycm9yKCdPbmx5IHN0cmluZ3Mg'@;
put 'YW5kIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIGFzICJlZGl0b3IiIHBhcmFtZXRlcicpO2E9RXRlKGMpfWlmKCFhKXRocm93IEVycm9yKGBObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBuYW1lICIke2N9ImApO3JldHVybiBhLmdldEluc3RhbmNlKGwpfWZ1bmN0aW9uIHBrKGMpe2lmKCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFrdGUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIEV0ZShjKS5nZXRDb25zdHJ1Y3RvcigpfWZ1bmN0aW9uIFIwKGMsbCl7YyYmInN0cmluZyIhPXR5cGVv'@;
put 'ZiBjJiYoYz0obD1jKS5FRElUT1JfVFlQRSk7Y29uc3QgYT1uZXcgb2tlKGwpOyJzdHJpbmciPT10eXBlb2YgYyYmcmtlKGMsYSksa04uc2V0KGwsYSl9bGV0IGdrPTA7Y29uc3QgbGw9Y2xhc3Mgc2tle2NvbnN0cnVjdG9yKCl7dGhpcy5jb250ZXh0PShhcmd1bWVudHMubGVuZ3RoPjAmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMsdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzPVtdKX1hZGRFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9'@;
put 'PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2Z1bmN0aW9uIGYoXyl7ZC5jYWxsKHRoaXMsZnVuY3Rpb24gYWtlKGMpe2NvbnN0IGw9Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247cmV0dXJuIGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7bC5hcHBseSh0aGlzKSx2'@;
put 'Mih0aGlzKX0sY30oXykpfXJldHVybiB0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMucHVzaCh7ZWxlbWVudDpsLGV2ZW50OmEsY2FsbGJhY2s6ZCxjYWxsYmFja1Byb3h5OmYsb3B0aW9uczpoLGV2ZW50TWFuYWdlcjp0aGlzfSksbC5hZGRFdmVudExpc3RlbmVyKGEsZixoKSxnays9MSwo'@;
put 'KT0+e3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl9fXJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpe2xldCBfLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxmPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7'@;
put 'Zm9yKDtmOylpZihmLT0xLF89dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2ZdLF8uZXZlbnQ9PT1hJiZfLmVsZW1lbnQ9PT1sKXtpZihkJiZkIT09Xy5jYWxsYmFja3x8aCYmXy5ldmVudE1hbmFnZXIhPT10aGlzKWNvbnRpbnVlO3RoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5zcGxp'@;
put 'Y2UoZiwxKSxfLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihfLmV2ZW50LF8uY2FsbGJhY2tQcm94eSxfLm9wdGlvbnMpLGdrLT0xfX1jbGVhckV2ZW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMu'@;
put 'Y29udGV4dClyZXR1cm47bGV0IGE9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO2E7KXthLT0xO2NvbnN0IGQ9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2FdO2wmJmQuZXZlbnRNYW5hZ2VyIT09dGhpc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5z'@;
put 'cGxpY2UoYSwxKSxkLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLmV2ZW50LGQuY2FsbGJhY2tQcm94eSxkLm9wdGlvbnMpLGdrLT0xKX19Y2xlYXIoKXt0aGlzLmNsZWFyRXZlbnRzKCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJFdmVudHMoKSx0aGlzLmNvbnRleHQ9bnVsbH1kZXN0cm95'@;
put 'V2l0aE93bkV2ZW50c09ubHkoKXt0aGlzLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmNvbnRleHQ9bnVsbH1maXJlRXZlbnQobCxhKXtsZXQgZD1sLmRvY3VtZW50LGg9bDtkfHwoZD1sLm93bmVyRG9jdW1lbnQ/bC5vd25lckRvY3VtZW50OmwsaD1kLmRlZmF1bHRWaWV3KTtjb25zdCBmPXtidWJi'@;
put 'bGVzOiEwLGNhbmNlbGFibGU6Im1vdXNlbW92ZSIhPT1hLHZpZXc6aCxkZXRhaWw6MCxzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MSxjbGllbnRZOjEsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0OnZvaWQgMH07'@;
put 'bGV0IF87ZC5jcmVhdGVFdmVudD8oXz1kLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLF8uaW5pdE1vdXNlRXZlbnQoYSxmLmJ1YmJsZXMsZi5jYW5jZWxhYmxlLGYudmlldyxmLmRldGFpbCxmLnNjcmVlblgsZi5zY3JlZW5ZLGYuY2xpZW50WCxmLmNsaWVudFksZi5jdHJsS2V5LGYuYWx0'@;
put 'S2V5LGYuc2hpZnRLZXksZi5tZXRhS2V5LGYuYnV0dG9uLGYucmVsYXRlZFRhcmdldHx8ZC5ib2R5LnBhcmVudE5vZGUpKTpfPWQuY3JlYXRlRXZlbnRPYmplY3QoKSxsLmRpc3BhdGNoRXZlbnQ/bC5kaXNwYXRjaEV2ZW50KF8pOmwuZmlyZUV2ZW50KGBvbiR7YX1gLF8pfX0sbWs9ImVkaXRv'@;
put 'ck1hbmFnZXIubmF2aWdhdGlvbiIsY3k9ImVkaXRvck1hbmFnZXIuaGFuZGxpbmdFZGl0b3IiO2NsYXNzIEFOe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmluc3RhbmNlPWwsdGhpcy50YWJsZU1ldGE9YSx0aGlzLnNlbGVjdGlvbj1kLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbChsKSx0aGlz'@;
put 'LmRlc3Ryb3llZD0hMSx0aGlzLmxvY2s9ITEsdGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwLHRoaXMuY2VsbFByb3BlcnRpZXM9dm9pZCAwLHRoaXMuaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMu'@;
put 'aW5zdGFuY2UuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24iLGY9PnRoaXMub25BZnRlckRvY3VtZW50S2V5RG93bihmKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNvbXBvc2l0aW9u'@;
put 'c3RhcnQiLGY9PnshdGhpcy5kZXN0cm95ZWQmJnRoaXMuaW5zdGFuY2UuaXNMaXN0ZW5pbmcoKSYmdGhpcy5vcGVuRWRpdG9yKCIiLGYpfSksdGhpcy5pbnN0YW5jZS52aWV3Ll93dC51cGRhdGUoIm9uQ2VsbERibENsaWNrIiwoZixfLFQpPT50aGlzLm9uQ2VsbERibENsaWNrKGYsXyxUKSl9'@;
put 'cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksYT1sLmdldENvbnRleHQoImdyaWQiKSxkPWwuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD17Z3JvdXA6Y3l9O2QuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIi'@;
put 'LCJTaGlmdCJdLFsiRW50ZXIiLCJDb250cm9sL01ldGEiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGYsXyk9Pnt0aGlzLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobC5pc0N0cmxQcmVzc2VkKCkpLHRoaXMubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIo'@;
put 'Xy5pbmNsdWRlcygic2hpZnQiKSl9fSx7a2V5czpbWyJFc2NhcGUiXSxbIkVzY2FwZSIsIkNvbnRyb2wvTWV0YSJdXSxjYWxsYmFjazooKT0+e3RoaXMuY2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShsLmlzQ3RybFByZXNzZWQoKSksdGhpcy5hY3RpdmVFZGl0b3IuZm9jdXMo'@;
put 'KX19XSxoKSxhLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRjIiXV0sY2FsbGJhY2s6Zj0+e3RoaXMub3BlbkVkaXRvcihudWxsLGYsITApfX0se2tleXM6W1siQmFja3NwYWNlIl0sWyJEZWxldGUiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmluc3RhbmNlLmVtcHR5U2VsZWN0ZWRDZWxscygpLHRo'@;
put 'aXMucHJlcGFyZUVkaXRvcigpfX0se2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGYsXyk9Pnt0aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nP3RoaXMuY2VsbFByb3BlcnRpZXMucmVhZE9ubHk/dGhpcy5tb3ZlU2VsZWN0'@;
put 'aW9uQWZ0ZXJFbnRlcigpOnRoaXMub3BlbkVkaXRvcihudWxsLGYsITApOnRoaXMubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIoXy5pbmNsdWRlcygic2hpZnQiKSksdjIoZil9fV0sey4uLmgscnVuT25seUlmOigpPT5LaSh0aGlzLmluc3RhbmNlLmdldFNlbGVjdGVkKCkpfSl9bG9ja0VkaXRv'@;
put 'cigpe3RoaXMubG9jaz0hMH11bmxvY2tFZGl0b3IoKXt0aGlzLmxvY2s9ITF9ZGVzdHJveUVkaXRvcihsKXt0aGlzLmxvY2t8fHRoaXMuY2xvc2VFZGl0b3IobCl9Z2V0QWN0aXZlRWRpdG9yKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yfXByZXBhcmVFZGl0b3IoKXtpZih0aGlzLmxvY2sp'@;
put 'cmV0dXJuO2lmKHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSlyZXR1cm4gdm9pZCB0aGlzLmNsb3NlRWRpdG9yKCExLCExLFc9PntXJiZ0aGlzLnByZXBhcmVFZGl0b3IoKX0pO2NvbnN0e3JvdzpsLGNvbDphfT10aGlzLmluc3RhbmNlLmdldFNlbGVj'@;
put 'dGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LGQ9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsbCxhKTtsZXQgaD1sLGY9YTtBcnJheS5pc0FycmF5KGQpJiYoW2gsZl09ZCksdGhpcy5jZWxsUHJvcGVydGllcz10aGlzLmluc3RhbmNlLmdldENlbGxNZXRhKGgs'@;
put 'Zik7Y29uc3R7YWN0aXZlRWxlbWVudDpffT10aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudDtpZihfJiZzayhfKSYmXy5ibHVyKCksIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgVD10aGlzLmluc3RhbmNlLmdldENlbGwo'@;
put 'bCxhLCEwKTtpZihUKXtjb25zdCBXPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSxpZT10aGlzLmluc3RhbmNlLmNvbFRvUHJvcChmKSxnZT10aGlzLmluc3RhbmNlLmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93'@;
put 'KGgpLGYpO3RoaXMuYWN0aXZlRWRpdG9yPUF0ZShXLHRoaXMuaW5zdGFuY2UpLHRoaXMuYWN0aXZlRWRpdG9yLnByZXBhcmUobCxhLGllLFQsZ2UsdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRv'@;
put 'ci5pc09wZW5lZCgpfW9wZW5FZGl0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKHRoaXMuaXNDZWxsRWRpdGFibGUoKSl7aWYoIXRoaXMuYWN0aXZlRWRpdG9yKXtjb25zdHtyb3c6aCxjb2w6Zn09dGhpcy5p'@;
put 'bnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCxfPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxUPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl'@;
put 'eChmKTt0aGlzLmluc3RhbmNlLnZpZXcuc2Nyb2xsVmlld3BvcnQodGhpcy5pbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhfLFQpKSx0aGlzLmluc3RhbmNlLnZpZXcucmVuZGVyKCksdGhpcy5wcmVwYXJlRWRpdG9yKCl9dGhpcy5hY3RpdmVFZGl0b3ImJihkJiZ0aGlzLmFjdGl2ZUVkaXRv'@;
put 'ci5lbmFibGVGdWxsRWRpdE1vZGUoKSx0aGlzLmFjdGl2ZUVkaXRvci5iZWdpbkVkaXRpbmcobCxhKSl9ZWxzZSB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCl9Y2xvc2VFZGl0b3IobCxhLGQpe3RoaXMuYWN0aXZlRWRpdG9yP3RoaXMuYWN0aXZlRWRpdG9yLmZpbmlzaEVkaXRpbmcobCxhLGQp'@;
put 'OmQmJmQoITEpfWNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobCl7dGhpcy5jbG9zZUVkaXRvcighMSxsKX1jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVlKGwpe3RoaXMuY2xvc2VFZGl0b3IoITAsbCl9Y2xlYXJBY3RpdmVFZGl0b3IoKXt0aGlzLmFjdGl2ZUVkaXRvcj12b2lk'@;
put 'IDB9aXNDZWxsRWRpdGFibGUoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSx7cm93OmEsY29sOmR9PXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQse3Jvd0luZGV4TWFwcGVyOmgsY29sdW1uSW5k'@;
put 'ZXhNYXBwZXI6Zn09dGhpcy5pbnN0YW5jZSxfPWguaXNIaWRkZW4odGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGEpKXx8Zi5pc0hpZGRlbih0aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4oZCkpO3JldHVybiEodGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seXx8IWx8fF8pfW1v'@;
put 'dmVTZWxlY3Rpb25BZnRlckVudGVyKGwpe2NvbnN0IGE9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMudGFibGVNZXRhLmVudGVyTW92ZXM/dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcyhldmVudCk6dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcztsP3RoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0'@;
put 'YXJ0KC1hLnJvdywtYS5jb2wpOnRoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEucm93LGEuY29sLCEwKX1vbkFmdGVyRG9jdW1lbnRLZXlEb3duKGwpe2lmKCF0aGlzLmluc3RhbmNlLmlzTGlzdGVuaW5nKCkpcmV0dXJuO2NvbnN0e2tleUNvZGU6YX09bDtpZighdGhpcy5zZWxlY3Rp'@;
put 'b24uaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPShsLmN0cmxLZXl8fGwubWV0YUtleSkmJiFsLmFsdEtleTt0aGlzLmFjdGl2ZUVkaXRvciYmKCF0aGlzLmFjdGl2ZUVkaXRvcnx8dGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpfHxDTihhKXx8TXRlKGEpfHxkfHx0aGlzLmlzRWRp'@;
put 'dG9yT3BlbmVkKCl8fCh0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApfX0s'@;
put 'e2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMSwwKX19LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqdGhp'@;
put 'cy5pbnN0YW5jZS5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCx0aGlzLmluc3RhbmNlLmdldERpcmVjdGlvbkZhY3RvcigpKX19XSx7cnVuT25seUlmOigp'@;
put 'PT5LaSh0aGlzLmluc3RhbmNlLmdldFNlbGVjdGVkKCkpLGdyb3VwOm1rfSksdGhpcy5vcGVuRWRpdG9yKCIiLGwpKX1vbkNlbGxEYmxDbGljayhsLGEsZCl7IlREIj09PWQubm9kZU5hbWUmJnRoaXMub3BlbkVkaXRvcihudWxsLGwsITApfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0'@;
put 'aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWNvbnN0IFR0ZT1uZXcgV2Vha01hcDtBTi5nZXRJbnN0YW5jZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9VHRlLmdldChjKTtyZXR1cm4gZHx8KGQ9bmV3IEFOKGMsbCxhKSxUdGUuc2V0KGMsZCkpLGR9O2NvbnN0IGNrZT1BTixEdGU9eyImbmJz'@;
put 'cDsiOiIgIiwiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiJ9LHVrZT1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKER0ZSkubWFwKGM9PmAoJHtjfSlgKS5qb2luKCJ8IiksImdpIik7ZnVuY3Rpb24gVE4oYyl7Y29uc3QgbD1jLmhhc0NvbEhlYWRlcnMoKSxhPWMuaGFzUm93SGVhZGVy'@;
put 'cygpLGQ9W2w/LTE6MCxhPy0xOjAsYy5jb3VudFJvd3MoKS0xLGMuY291bnRDb2xzKCktMV0saD1jLmdldERhdGEoLi4uZCksZj1oLmxlbmd0aCxfPWY+MD9oWzBdLmxlbmd0aDowLFQ9WyI8dGFibGU+IiwiPC90YWJsZT4iXSxXPWw/WyI8dGhlYWQ+IiwiPC90aGVhZD4iXTpbXSxpZT1bIjx0'@;
put 'Ym9keT4iLCI8L3Rib2R5PiJdLGdlPWE/MTowLHdlPWw/MTowO2ZvcihsZXQgRWU9MDtFZTxmO0VlKz0xKXtjb25zdCBaZT1sJiYwPT09RWUsb3Q9W107Zm9yKGxldCB5dD0wO3l0PF87eXQrPTEpe2NvbnN0IGt0PSFaZSYmYSYmMD09PXl0O2xldCBTdD0iIjtpZihaZSlTdD1gPHRoPiR7Yy5n'@;
put 'ZXRDb2xIZWFkZXIoeXQtZ2UpfTwvdGg+YDtlbHNlIGlmKGt0KVN0PWA8dGg+JHtjLmdldFJvd0hlYWRlcihFZS13ZSl9PC90aD5gO2Vsc2V7Y29uc3QgUXQ9aFtFZV1beXRdLHtoaWRkZW46cm4scm93c3Bhbjp2bixjb2xzcGFuOk5ufT1jLmdldENlbGxNZXRhKEVlLXdlLHl0LWdlKTtpZigh'@;
put 'cm4pe2NvbnN0IGNyPVtdO2lmKHZuJiZjci5wdXNoKGByb3dzcGFuPSIke3ZufSJgKSxObiYmY3IucHVzaChgY29sc3Bhbj0iJHtObn0iYCkscGMoUXQpKVN0PWA8dGQgJHtjci5qb2luKCIgIil9PjwvdGQ+YDtlbHNle2NvbnN0IERyPVF0LnRvU3RyaW5nKCkucmVwbGFjZSgiPCIsIiZsdDsi'@;
put 'KS5yZXBsYWNlKCI+IiwiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtTdD1gPHRkICR7Y3Iuam9pbigiICIpfT4ke0RyfTwvdGQ+YH19'@;
put 'fW90LnB1c2goU3QpfWNvbnN0IGV0PVsiPHRyPiIsLi4ub3QsIjwvdHI+Il0uam9pbigiIik7WmU/Vy5zcGxpY2UoMSwwLGV0KTppZS5zcGxpY2UoLTEsMCxldCl9cmV0dXJuIFQuc3BsaWNlKDEsMCxXLmpvaW4oIiIpLGllLmpvaW4oIiIpKSxULmpvaW4oIiIpfWZ1bmN0aW9uIEROKGMpe2Nv'@;
put 'bnN0IGw9Yy5sZW5ndGgsYT1bIjx0YWJsZT4iXTtmb3IobGV0IGQ9MDtkPGw7ZCs9MSl7Y29uc3QgaD1jW2RdLGY9aC5sZW5ndGgsXz1bXTswPT09ZCYmYS5wdXNoKCI8dGJvZHk+Iik7Zm9yKGxldCBUPTA7VDxmO1QrPTEpe2NvbnN0IFc9aFtUXSxpZT1wYyhXKT8iIjpXLnRvU3RyaW5nKCku'@;
put 'cmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvKDxicihccyp8XC8pPihcclxufFxuKT98XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwezIsfS9naSxnZT0+YDxzcGFuIHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+JHsiJm5ic3A7'@;
put 'Ii5yZXBlYXQoZ2UubGVuZ3RoLTEpfSA8L3NwYW4+YCkucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtfLnB1c2goYDx0ZD4ke2llfTwvdGQ+YCl9YS5wdXNoKCI8dHI+IiwuLi5fLCI8L3RyPiIpLGQrMT09PWwmJmEucHVzaCgiPC90Ym9keT4iKX1yZXR1cm4gYS5wdXNoKCI8L3RhYmxlPiIpLGEu'@;
put 'am9pbigiIil9ZnVuY3Rpb24gSXRlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudDtjb25zdCBhPXt9LGQ9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBw'@;
put 'ZW5kQ2hpbGQoaCk7bGV0IGY9YztpZigic3RyaW5nIj09dHlwZW9mIGYpe2NvbnN0IFF0PWYucmVwbGFjZSgvPHRkXGJbXj5dKj8+KFtcc1xTXSo/KTxcL1xzKnRkPi9nLHJuPT57Y29uc3Qgdm49cm4ubWF0Y2goLzx0ZFxiW14+XSo/Pi9nKVswXTtyZXR1cm5gJHt2bn0ke3JuLnN1YnN0cmlu'@;
put 'Zyh2bi5sZW5ndGgscm4ubGFzdEluZGV4T2YoIjwiKSkucmVwbGFjZSgvKDwoPyFicikoW14+XSspPikvZ2ksIiIpfTwvdGQ+YH0pO2guaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgJHtRdH1gKSxmPWgucXVlcnlTZWxlY3RvcigidGFibGUiKX1pZighZnx8IWZ1bmN0aW9uIGRr'@;
put 'ZShjKXtyZXR1cm4iVEFCTEUiPT09KGMmJmMubm9kZU5hbWV8fCIiKX0oZikpcmV0dXJuO2NvbnN0IF89aC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWUkPSJlbmVyYXRvciJdJyksVD1udWxsIT09Zi5xdWVyeVNlbGVjdG9yKCJ0Ym9keSB0aCIpLFc9Zi5xdWVyeVNlbGVjdG9yKCJ0ciIpLGll'@;
put 'PVc/QXJyYXkuZnJvbShXLmNlbGxzKS5yZWR1Y2UoKFF0LHJuKT0+UXQrcm4uY29sU3BhbiwwKS0oVD8xOjApOjAsZ2U9Zi50Rm9vdCYmQXJyYXkuZnJvbShmLnRGb290LnJvd3MpfHxbXSx3ZT1bXTtsZXQgRWU9ITEsWmU9MCxvdD0wO2lmKGYudEhlYWQpe2NvbnN0IFF0PUFycmF5LmZyb20o'@;
put 'Zi50SGVhZC5yb3dzKS5maWx0ZXIocm49Pntjb25zdCB2bj1udWxsIT09cm4ucXVlcnlTZWxlY3RvcigidGQiKTtyZXR1cm4gdm4mJndlLnB1c2gocm4pLCF2bn0pO1plPVF0Lmxlbmd0aCxFZT1aZT4wLFplPjE/YS5uZXN0ZWRIZWFkZXJzPUFycmF5LmZyb20oUXQpLnJlZHVjZSgocm4sdm4p'@;
put 'PT57Y29uc3QgTm49QXJyYXkuZnJvbSh2bi5jZWxscykucmVkdWNlKChjcixEcixfaSk9PntpZihUJiYwPT09X2kpcmV0dXJuIGNyO2NvbnN0e2NvbFNwYW46bGksaW5uZXJIVE1MOm1yfT1EcjtyZXR1cm4gY3IucHVzaChsaT4xP3tsYWJlbDptcixjb2xzcGFuOmxpfTptciksY3J9LFtdKTty'@;
put 'ZXR1cm4gcm4ucHVzaChObikscm59LFtdKTpFZSYmKGEuY29sSGVhZGVycz1BcnJheS5mcm9tKFF0WzBdLmNoaWxkcmVuKS5yZWR1Y2UoKHJuLHZuLE5uKT0+KFQmJjA9PT1Obnx8cm4ucHVzaCh2bi5pbm5lckhUTUwpLHJuKSxbXSkpfXdlLmxlbmd0aCYmKGEuZml4ZWRSb3dzVG9wPXdlLmxl'@;
put 'bmd0aCksZ2UubGVuZ3RoJiYoYS5maXhlZFJvd3NCb3R0b209Z2UubGVuZ3RoKTtjb25zdCBldD1bLi4ud2UsLi4uQXJyYXkuZnJvbShmLnRCb2RpZXMpLnJlZHVjZSgoUXQscm4pPT4oUXQucHVzaCguLi5BcnJheS5mcm9tKHJuLnJvd3MpKSxRdCksW10pLC4uLmdlXTtvdD1ldC5sZW5ndGg7'@;
put 'Y29uc3QgeXQ9bmV3IEFycmF5KG90KTtmb3IobGV0IFF0PTA7UXQ8b3Q7UXQrKyl5dFtRdF09bmV3IEFycmF5KGllKTtjb25zdCBrdD1bXSxTdD1bXTtmb3IobGV0IFF0PTA7UXQ8b3Q7UXQrKyl7Y29uc3Qgdm49QXJyYXkuZnJvbShldFtRdF0uY2VsbHMpLE5uPXZuLmxlbmd0aDtmb3IobGV0'@;
put 'IGNyPTA7Y3I8Tm47Y3IrKyl7Y29uc3QgRHI9dm5bY3JdLHtub2RlTmFtZTpfaSxpbm5lckhUTUw6bGkscm93U3Bhbjptcixjb2xTcGFuOkVpfT1Ecixacj15dFtRdF0uZmluZEluZGV4KEZuPT52b2lkIDA9PT1Gbik7aWYoIlREIj09PV9pKXtpZihtcj4xfHxFaT4xKXtmb3IobGV0IE1yPVF0'@;
put 'O01yPFF0K21yO01yKyspaWYoTXI8b3QpZm9yKGxldCBfcj1acjtfcjxacitFaTtfcisrKXl0W01yXVtfcl09bnVsbDtjb25zdCBGcj1Eci5nZXRBdHRyaWJ1dGUoInN0eWxlIik7RnImJkZyLmluY2x1ZGVzKCJtc28taWdub3JlOmNvbHNwYW4iKXx8a3QucHVzaCh7Y29sOlpyLHJvdzpRdCxy'@;
put 'b3dzcGFuOm1yLGNvbHNwYW46RWl9KX1sZXQgRm49IiI7Rm49XyYmL2V4Y2VsL2dpLnRlc3QoXy5jb250ZW50KT9saS5yZXBsYWNlKC9bXHJcbl1bXHgyMF17MCwyfS9nLCIgIikucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dP1tceDIwXXswLDN9L2dpbSwiXHJcbiIpOmxpLnJlcGxhY2Uo'@;
put 'Lzxicihccyp8XC8pPltcclxuXT8vZ2ltLCJcclxuIikseXRbUXRdW1pyXT1Gbi5yZXBsYWNlKHVrZSxGcj0+RHRlW0ZyXSl9ZWxzZSBTdC5wdXNoKGxpKX19cmV0dXJuIGt0Lmxlbmd0aCYmKGEubWVyZ2VDZWxscz1rdCksU3QubGVuZ3RoJiYoYS5yb3dIZWFkZXJzPVN0KSx5dC5sZW5ndGgm'@;
put 'JihhLmRhdGE9eXQpLGF9ZnVuY3Rpb24gR3UoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2NvbnN0IGE9dHlwZW9mIGM7aWYoIm51bWJlciI9PT1hKXJldHVybiFpc05hTihjKSYmaXNGaW5pdGUoYyk7aWYoInN0cmlu'@;
put 'ZyI9PT1hKXtpZigwPT09Yy5sZW5ndGgpcmV0dXJuITE7aWYoMT09PWMubGVuZ3RoKXJldHVybi9cZC8udGVzdChjKTtjb25zdCBkPUFycmF5LmZyb20obmV3IFNldChbIi4iLC4uLmxdKSkubWFwKGg9PmBcXCR7aH1gKS5qb2luKCJ8Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF5bKy1dP1xccyoo'@;
put 'KCgke2R9KT9cXGQrKCgke2R9KVxcZCspPyhlWystXT9cXGQrKT8pfCgweFthLWZcXGRdKykpJGAsImkiKS50ZXN0KGMudHJpbSgpKX1yZXR1cm4ib2JqZWN0Ij09PWEmJiEoIWN8fCJudW1iZXIiIT10eXBlb2YgYy52YWx1ZU9mKCl8fGMgaW5zdGFuY2VvZiBEYXRlKX1mdW5jdGlvbiBMdGUo'@;
put 'Yyl7cmV0dXJuIEd1KGMsWyIsIl0pfWZ1bmN0aW9uIHZvKGMsbCxhKXtsZXQgZD0tMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGw/KGE9bCxsPWMpOmQ9Yy0xOysrZDw9bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIHZrKGMsbCxhKXtsZXQgZD1jKzE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'JiYoYT1sLGw9MCk7LS1kPj1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gSU4oYyxsKXtyZXR1cm4gbD1wYXJzZUludChsLnRvU3RyaW5nKCkucmVwbGFjZSgiJSIsIiIpLDEwKSxsPWlzTmFOKGwpPzA6bCxwYXJzZUludChjKmwvMTAwLDEwKX1jb25zdCBSdGU9bmV3IE1hcChbWyJhc2MiLFst'@;
put 'MSwxXV0sWyJkZXNjIixbMSwtMV1dXSksZmtlPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYCxwa2U9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgbm90IGEgbnVtYmVyLmAsbWtlPWM9PmBUaGUgaWQgJyR7Y30nIGlzIGFscmVhZHkgZGVj'@;
put 'bGFyZWQgaW4gYSBtYXAuYDtmdW5jdGlvbiBfaygpe2xldHtlcnJvcklkRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBNYXA7ZnVuY3Rpb24gVCgpe3JldHVyblsuLi5sXX1mdW5jdGlvbiBXKGll'@;
put 'KXtyZXR1cm4gbC5oYXMoaWUpfXJldHVybiBjPVJhKGMpP2M6bWtlLHthZGRJdGVtOmZ1bmN0aW9uIGEoaWUsZ2Upe2lmKFcoaWUpKXRocm93IG5ldyBFcnJvcihjKGllKSk7bC5zZXQoaWUsZ2UpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVhcigpfSxnZXRJZDpmdW5jdGlvbiBmKGllKXtj'@;
put 'b25zdFtnZV09VCgpLmZpbmQod2U9PntsZXRbRWUsWmVdPXdlO3JldHVybiBpZT09PVplJiZFZX0pfHxbbnVsbF07cmV0dXJuIGdlfSxnZXRJdGVtOmZ1bmN0aW9uIF8oaWUpe3JldHVybiBsLmdldChpZSl9LGdldEl0ZW1zOlQsaGFzSXRlbTpXLHJlbW92ZUl0ZW06ZnVuY3Rpb24gZChpZSl7'@;
put 'cmV0dXJuIGwuZGVsZXRlKGllKX19fWNvbnN0IHZrZT1jPT5gJyR7Y30nIHZhbHVlIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSB1bmlxdWUgc2V0LmAsUk49Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAiJHtjfSIgcGx1Z2luLmAsT3RlPWZ1bmN0aW9uIGdrZSgpe2xldHtlcnJv'@;
put 'clByaW9yaXR5RXhpc3RzOmMsZXJyb3JQcmlvcml0eU5hTjpsfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgYT1uZXcgTWFwO3JldHVybiBjPVJhKGMpP2M6ZmtlLGw9UmEobCk/bDpwa2Use2FkZEl0ZW06ZnVuY3Rpb24g'@;
put 'ZChmLF8pe2lmKCFHdShmKSl0aHJvdyBuZXcgRXJyb3IobChmKSk7aWYoYS5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMoZikpO2Euc2V0KGYsXyl9LGdldEl0ZW1zOmZ1bmN0aW9uIGgoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb'@;
put 'MF06ImFzYyI7Y29uc3RbXyxUXT1SdGUuZ2V0KGYpfHxSdGUuZ2V0KCJhc2MiKTtyZXR1cm5bLi4uYV0uc29ydCgoVyxpZSk9PldbMF08aWVbMF0/XzpUKS5tYXAoVz0+V1sxXSl9fX0oe2Vycm9yUHJpb3JpdHlFeGlzdHM6Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBwbHVnaW4g'@;
put 'b24gcHJpb3JpdHkgIiR7Y30iLmAsZXJyb3JQcmlvcml0eU5hTjpjPT5gVGhlIHByaW9yaXR5ICIke2N9IiBpcyBub3QgYSBudW1iZXIuYH0pLFB0ZT1mdW5jdGlvbiBfa2UoKXtsZXR7ZXJyb3JJdGVtRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'P2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBTZXQ7cmV0dXJuIGM9UmEoYyk/Yzp2a2Use2FkZEl0ZW06ZnVuY3Rpb24gYShmKXtpZihsLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7bC5hZGQoZil9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldEl0ZW1zOmZ1bmN0'@;
put 'aW9uIGQoKXtyZXR1cm5bLi4ubF19fX0oe2Vycm9ySXRlbUV4aXN0czpSTn0pLE9OPV9rKHtlcnJvcklkRXhpc3RzOlJOfSk7ZnVuY3Rpb24gUE4oKXtyZXR1cm5bLi4uT3RlLmdldEl0ZW1zKCksLi4uUHRlLmdldEl0ZW1zKCldfWZ1bmN0aW9uIHV5KGMpe2NvbnN0IGw9YnUoYyk7cmV0dXJu'@;
put 'IE9OLmdldEl0ZW0obCl9ZnVuY3Rpb24ganMoYyxsLGEpe1tjLGwsYV09ZnVuY3Rpb24gd2tlKGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9KGw9YykuUExVR0lOX0tFWSxhPWwuUExVR0lOX1BSSU9SSVRZKSxbYyxsLGFdfShjLGwsYSksdm9pZCAwPT09dXkoYykmJmZ1'@;
put 'bmN0aW9uIHlrZShjLGwsYSl7Y29uc3QgZD1idShjKTtpZihPTi5oYXNJdGVtKGQpKXRocm93IG5ldyBFcnJvcihSTihkKSk7dm9pZCAwPT09YT9QdGUuYWRkSXRlbShkKTpPdGUuYWRkSXRlbShhLGQpLE9OLmFkZEl0ZW0oZCxsKX0oYyxsLGEpfWNvbnN0e3JlZ2lzdGVyOkNrZSxnZXRJdGVt'@;
put 'OlNrZSxoYXNJdGVtOkZ0ZSxnZXROYW1lczpNa2V9PXBkKCJyZW5kZXJlcnMiKTtmdW5jdGlvbiBiayhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighRnRlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHJlbmRlcmVyIGZvdW5kIHVuZGVyICIke2N9IiBuYW1l'@;
put 'YCk7cmV0dXJuIFNrZShjKX1mdW5jdGlvbiBwaChjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuUkVOREVSRVJfVFlQRSksQ2tlKGMsbCl9Y29uc3R7cmVnaXN0ZXI6eGtlLGdldEl0ZW06RWtlLGhhc0l0ZW06SHRlLGdldE5hbWVzOmtrZX09cGQoInZhbGlkYXRvcnMiKTtmdW5j'@;
put 'dGlvbiBGTihjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighSHRlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHZhbGlkYXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBFa2UoYyl9ZnVuY3Rpb24gYTcoYyxsKXsic3RyaW5nIiE9dHlwZW9m'@;
put 'IGMmJihjPShsPWMpLlZBTElEQVRPUl9UWVBFKSx4a2UoYyxsKX1mdW5jdGlvbiB5ayhjKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiBkeShjKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gSE4oKXtyZXR1cm4ib250b3Vj'@;
put 'aHN0YXJ0ImluIHdpbmRvd31sZXQgbDc7ZnVuY3Rpb24gTnRlKGMpe3JldHVybiBsN3x8KGw3PSJvYmplY3QiPT10eXBlb2YgSW50bD9uZXcgSW50bC5Db2xsYXRvcihjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuY29tcGFyZToi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5sb2NhbGVDb21wYXJlPyhhLGQpPT5gJHthfWAubG9jYWxlQ29tcGFyZShkKTooYSxkKT0+YT09PWQ/MDphPmQ/LTE6MSxsNyl9Y29uc3QgYzc9bmV3IFdlYWtNYXAsVnRlPWNsYXNzIEFrZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYs'@;
put 'Xyl7bGV0IFQ9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOm51bGw7dGhpcy53dFNldHRpbmdzPWQsdGhpcy5kb21CaW5kaW5ncz1hLHRoaXMud3RUYWJsZT1mLHRoaXMuc2VsZWN0aW9ucz1fLHRoaXMucGFyZW50PVQsdGhpcy5ldmVudE1h'@;
put 'bmFnZXI9aCx0aGlzLmZhY2FkZUdldHRlcj1sLGM3LnNldCh0aGlzLHtzZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZDp2b2lkIDAsZGJsQ2xpY2tUaW1lb3V0OltudWxsLG51bGxdLGRibENsaWNrT3JpZ2luOltudWxsLG51bGxdfSksdGhpcy5yZWdpc3RlckV2ZW50cygpfXJlZ2lzdGVyRXZl'@;
put 'bnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJjb250ZXh0bWVudSIsZD0+dGhpcy5vbkNvbnRleHRNZW51KGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5UQUJMRSwibW91c2VvdmVy'@;
put 'IixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5UQUJMRSwibW91c2VvdXQiLGQ9PnRoaXMub25Nb3VzZU91dChkKSk7Y29uc3QgbD0oKT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhp'@;
put 'cy53dFRhYmxlLmhvbGRlciwidG91Y2hzdGFydCIsZD0+dGhpcy5vblRvdWNoU3RhcnQoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhvbGRlciwidG91Y2hlbmQiLGQ9PnRoaXMub25Ub3VjaEVuZChkKSksdGhpcy5tb21lbnR1bVNjcm9sbGlu'@;
put 'Z3x8KHRoaXMubW9tZW50dW1TY3JvbGxpbmc9e30pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhvbGRlciwic2Nyb2xsIiwoKT0+e2NsZWFyVGltZW91dCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KSx0aGlzLm1vbWVudHVtU2Nyb2xs'@;
put 'aW5nLm9uZ29pbmd8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVRvdWNoU2Nyb2xsIiksdGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSEwLHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMudG91Y2hBcHBsaWVkfHwo'@;
put 'dGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSExLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkFmdGVyTW9tZW50dW1TY3JvbGwiKSl9LDIwMCl9KX07bTIoKT9sKCk6KEhOKCkmJmwoKSwoKCk9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RU'@;
put 'YWJsZS5ob2xkZXIsIm1vdXNldXAiLGQ9PnRoaXMub25Nb3VzZVVwKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSl9KSgpKX1zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGwp'@;
put 'e2NvbnN0IGE9YzcuZ2V0KHRoaXMpLGg9dGhpcy5wYXJlbnRDZWxsKGwpLmNvb3JkcztpZihhLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kJiZoKXtjb25zdFtmLF9dPVtoLnJvdyxhLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kLmZyb20ucm93XSxbVCxXXT1baC5jb2wsYS5zZWxlY3Rl'@;
put 'ZENlbGxCZWZvcmVUb3VjaEVuZC5mcm9tLmNvbF07cmV0dXJuIGY9PT1fJiZUPT09V31yZXR1cm4hMX1wYXJlbnRDZWxsKGwpe2NvbnN0IGE9e30saD10eShsLFsiVEQiLCJUSCJdLHRoaXMud3RUYWJsZS5UQUJMRSk7cmV0dXJuIGg/KGEuY29vcmRzPXRoaXMud3RUYWJsZS5nZXRDb29yZHMo'@;
put 'aCksYS5URD1oKTpCbyhsLCJ3dEJvcmRlciIpJiZCbyhsLCJjdXJyZW50Iik/KGEuY29vcmRzPXRoaXMuc2VsZWN0aW9ucy5nZXRDZWxsKCkuY2VsbFJhbmdlLmhpZ2hsaWdodCxhLlREPXRoaXMud3RUYWJsZS5nZXRDZWxsKGEuY29vcmRzKSk6Qm8obCwid3RCb3JkZXIiKSYmQm8obCwiYXJl'@;
put 'YSIpJiZ0aGlzLnNlbGVjdGlvbnMuY3JlYXRlT3JHZXRBcmVhKCkuY2VsbFJhbmdlJiYoYS5jb29yZHM9dGhpcy5zZWxlY3Rpb25zLmNyZWF0ZU9yR2V0QXJlYSgpLmNlbGxSYW5nZS50byxhLlREPXRoaXMud3RUYWJsZS5nZXRDZWxsKGEuY29vcmRzKSksYX1vbk1vdXNlRG93bihsKXtjb25z'@;
put 'dCBhPWM3LmdldCh0aGlzKSxkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsaD12TihpdGUsbC50YXJnZXQpLGY9bC50YXJnZXQ7aWYoZj09PWR8fGgoMCk9PT1kfHxoKDEpPT09ZClyZXR1cm47Y29uc3QgXz10aGlzLnBhcmVudENlbGwoZik7Qm8oZiwiY29y'@;
put 'bmVyIik/dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ2VsbENvcm5lck1vdXNlRG93biIsbCxmKTpfLlREJiZ0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxNb3VzZURvd24iKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlRG93biIsbCxfLmNvb3JkcyxfLlREKSwoMD09'@;
put 'PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJl8uVEQmJihhLmRibENsaWNrT3JpZ2luWzBdPV8uVEQsY2xlYXJUaW1lb3V0KGEuZGJsQ2xpY2tUaW1lb3V0WzBdKSxhLmRibENsaWNrVGltZW91dFswXT1zZXRUaW1lb3V0KCgpPT57YS5kYmxDbGlja09yaWdpblswXT1udWxsfSwxZTMp'@;
put 'KX1vbkNvbnRleHRNZW51KGwpe2lmKHRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbENvbnRleHRNZW51Iikpe2NvbnN0IGE9dGhpcy5wYXJlbnRDZWxsKGwudGFyZ2V0KTthLlREJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29udGV4dE1lbnUiLGwsYS5jb29yZHMsYS5URCl9fW9uTW91'@;
put 'c2VPdmVyKGwpe2lmKCF0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxNb3VzZU92ZXIiKSlyZXR1cm47Y29uc3QgYT10aGlzLnd0VGFibGUuVEFCTEUsZD10eShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPXRoaXMucGFyZW50fHx0aGlzO2QmJmQhPT1oLmxhc3RNb3VzZU92ZXImJlZwKGQs'@;
put 'YSkmJihoLmxhc3RNb3VzZU92ZXI9ZCx0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdmVyIixsLHRoaXMud3RUYWJsZS5nZXRDb29yZHMoZCksZCkpfW9uTW91c2VPdXQobCl7aWYoIXRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbE1vdXNlT3V0IikpcmV0dXJuO2NvbnN0IGE9dGhp'@;
put 'cy53dFRhYmxlLlRBQkxFLGQ9dHkobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD10eShsLnJlbGF0ZWRUYXJnZXQsWyJURCIsIlRIIl0sYSksZj10aGlzLnBhcmVudHx8dGhpcztkJiZkIT09aCYmVnAoZCxhKSYmKHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIsbCx0aGlzLnd0'@;
put 'VGFibGUuZ2V0Q29vcmRzKGQpLGQpLG51bGw9PT1oJiYoZi5sYXN0TW91c2VPdmVyPW51bGwpKX1vbk1vdXNlVXAobCl7Y29uc3QgYT1jNy5nZXQodGhpcyksZD10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2QuVEQmJnRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbE1vdXNlVXAiKSYmdGhp'@;
put 'cy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlVXAiLGwsZC5jb29yZHMsZC5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiYoZC5URD09PWEuZGJsQ2xpY2tPcmlnaW5bMF0mJmQuVEQ9PT1hLmRibENsaWNrT3JpZ2luWzFdPyhCbyhsLnRhcmdldCwiY29ybmVyIik/dGhp'@;
put 'cy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvcm5lckRibENsaWNrIixsLGQuY29vcmRzLGQuVEQpOnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxEYmxDbGljayIsbCxkLmNvb3JkcyxkLlREKSxhLmRibENsaWNrT3JpZ2luWzBdPW51bGwsYS5kYmxDbGlja09yaWdpblsxXT1udWxsKTpkLlREPT09'@;
put 'YS5kYmxDbGlja09yaWdpblswXSYmKGEuZGJsQ2xpY2tPcmlnaW5bMV09ZC5URCxjbGVhclRpbWVvdXQoYS5kYmxDbGlja1RpbWVvdXRbMV0pLGEuZGJsQ2xpY2tUaW1lb3V0WzFdPXNldFRpbWVvdXQoKCk9PnthLmRibENsaWNrT3JpZ2luWzFdPW51bGx9LDUwMCkpKX1vblRvdWNoU3RhcnQo'@;
put 'bCl7YzcuZ2V0KHRoaXMpLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kPXRoaXMuc2VsZWN0aW9ucy5nZXRDZWxsKCkuY2VsbFJhbmdlLHRoaXMudG91Y2hBcHBsaWVkPSEwLHRoaXMub25Nb3VzZURvd24obCl9b25Ub3VjaEVuZChsKXt2YXIgYTtjb25zdCBkPWwudGFyZ2V0LGg9bnVsbD09'@;
put 'PShhPXRoaXMucGFyZW50Q2VsbChkKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29vcmRzLGY9S2koaCkmJmgucm93Pj0wJiZoLmNvbD49MDtpZihsLmNhbmNlbGFibGUmJmYmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSl7Y29uc3QgVD1bIkEiLCJC'@;
put 'VVRUT04iLCJJTlBVVCJdO2JOKCkmJih5dGUoKXx8d3RlKCkpJiZ0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCkmJiFULmluY2x1ZGVzKGQudGFnTmFtZSk/bC5wcmV2ZW50RGVmYXVsdCgpOnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKXx8bC5wcmV2ZW50RGVmYXVsdCgpfXRo'@;
put 'aXMub25Nb3VzZVVwKGwpLHRoaXMudG91Y2hBcHBsaWVkPSExfWNhbGxMaXN0ZW5lcihsLGEsZCxoKXtjb25zdCBmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZShsKTtmJiZmKGEsZCxoLHRoaXMuZmFjYWRlR2V0dGVyKCkpfWRlc3Ryb3koKXtjb25zdCBsPWM3LmdldCh0aGlzKTtj'@;
put 'bGVhclRpbWVvdXQobC5kYmxDbGlja1RpbWVvdXRbMF0pLGNsZWFyVGltZW91dChsLmRibENsaWNrVGltZW91dFsxXSksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX07Y2xhc3MgQnRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdXJyZW50U2l6ZT0wLHRoaXMubmV4dFNpemU9MCx0aGlzLmN1'@;
put 'cnJlbnRPZmZzZXQ9MCx0aGlzLm5leHRPZmZzZXQ9MH1zZXRTaXplKGwpe3RoaXMuY3VycmVudFNpemU9dGhpcy5uZXh0U2l6ZSx0aGlzLm5leHRTaXplPWx9c2V0T2Zmc2V0KGwpe3RoaXMuY3VycmVudE9mZnNldD10aGlzLm5leHRPZmZzZXQsdGhpcy5uZXh0T2Zmc2V0PWx9fWNsYXNzIE9r'@;
put 'ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2l6ZT1uZXcgQnRlLHRoaXMud29ya2luZ1NwYWNlPTAsdGhpcy5zaGFyZWRTaXplPW51bGx9c2V0U2l6ZShsKXt0aGlzLnNpemUuc2V0U2l6ZShsKX1zZXRPZmZzZXQobCl7dGhpcy5zaXplLnNldE9mZnNldChsKX1nZXRWaWV3U2l6ZSgpe3JldHVybiB0'@;
put 'aGlzLnNpemV9aXNTaGFyZWQoKXtyZXR1cm4gdGhpcy5zaGFyZWRTaXplIGluc3RhbmNlb2YgQnRlfWlzUGxhY2VPbihsKXtyZXR1cm4gdGhpcy53b3JraW5nU3BhY2U9PT1sfWFwcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0xLGwud29ya2luZ1NwYWNlPTIsdGhpcy5zaGFyZWRTaXplPWwu'@;
put 'Z2V0Vmlld1NpemUoKX1wcmVwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTIsbC53b3JraW5nU3BhY2U9MSx0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfX1jbGFzcyBqdGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm9vdE5vZGU9bCx0aGlzLm5vZGVzUG9vbD1hLHRoaXMuc2l6'@;
put 'ZVNldD1uZXcgT2tlLHRoaXMuY2hpbGROb2RlVHlwZT1kLnRvVXBwZXJDYXNlKCksdGhpcy52aXN1YWxJbmRleD0wLHRoaXMuY29sbGVjdGVkTm9kZXM9W119c2V0U2l6ZShsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldFNpemUobCksdGhpc31zZXRPZmZzZXQobCl7cmV0dXJuIHRoaXMuc2l6'@;
put 'ZVNldC5zZXRPZmZzZXQobCksdGhpc31pc1NoYXJlZFZpZXdTZXQoKXtyZXR1cm4gdGhpcy5zaXplU2V0LmlzU2hhcmVkKCl9Z2V0Tm9kZShsKXtyZXR1cm4gbDx0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD90aGlzLmNvbGxlY3RlZE5vZGVzW2xdOm51bGx9Z2V0Q3VycmVudE5vZGUoKXtj'@;
put 'b25zdCBsPXRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoO3JldHVybiBsPjA/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsLTFdOm51bGx9Z2V0UmVuZGVyZWRDaGlsZENvdW50KCl7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXM7bGV0IGQ9MDtpZih0aGlzLmlzU2hhcmVkVmlld1NldCgp'@;
put 'KXtsZXQgaD1sLmZpcnN0RWxlbWVudENoaWxkO2Zvcig7aDspe2lmKGgudGFnTmFtZT09PXRoaXMuY2hpbGROb2RlVHlwZSlkKz0xO2Vsc2UgaWYoYS5pc1BsYWNlT24oMSkpYnJlYWs7aD1oLm5leHRFbGVtZW50U2libGluZ319ZWxzZSBkPWwuY2hpbGRFbGVtZW50Q291bnQ7cmV0dXJuIGR9'@;
put 'c3RhcnQoKXt0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD0wLHRoaXMudmlzdWFsSW5kZXg9MDtjb25zdHtyb290Tm9kZTpsLHNpemVTZXQ6YX09dGhpcyxkPXRoaXMuaXNTaGFyZWRWaWV3U2V0KCkse25leHRTaXplOmh9PWEuZ2V0Vmlld1NpemUoKTtsZXQgZj10aGlzLmdldFJlbmRlcmVk'@;
put 'Q2hpbGRDb3VudCgpO2Zvcig7ZjxoOyl7Y29uc3QgVD10aGlzLm5vZGVzUG9vbCgpOyFkfHxkJiZhLmlzUGxhY2VPbigyKT9sLmFwcGVuZENoaWxkKFQpOmwuaW5zZXJ0QmVmb3JlKFQsbC5maXJzdENoaWxkKSxmKz0xfWNvbnN0IF89ZCYmYS5pc1BsYWNlT24oMSk7Zm9yKDtmPmg7KWwucmVt'@;
put 'b3ZlQ2hpbGQoXz9sLmZpcnN0Q2hpbGQ6bC5sYXN0Q2hpbGQpLGYtPTF9cmVuZGVyKCl7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXM7bGV0IGQ9dGhpcy52aXN1YWxJbmRleDt0aGlzLmlzU2hhcmVkVmlld1NldCgpJiZhLmlzUGxhY2VPbigyKSYmKGQrPWEuc2hhcmVkU2l6ZS5u'@;
put 'ZXh0U2l6ZSk7bGV0IGg9bC5jaGlsZE5vZGVzW2RdO2lmKGgudGFnTmFtZSE9PXRoaXMuY2hpbGROb2RlVHlwZSl7Y29uc3QgZj10aGlzLm5vZGVzUG9vbCgpO2wucmVwbGFjZUNoaWxkKGYsaCksaD1mfXRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChoKSx0aGlzLnZpc3VhbEluZGV4Kz0xfWVu'@;
put 'ZCgpe319Y2xhc3MgenRlIGV4dGVuZHMganRle3ByZXBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQucHJlcGVuZChsLnNpemVTZXQpLGwuc2l6ZVNldC5hcHBlbmQodGhpcy5zaXplU2V0KSx0aGlzfWFwcGVuZFZpZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5hcHBlbmQobC5zaXpl'@;
put 'U2V0KSxsLnNpemVTZXQucHJlcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9fWNsYXNzIFBrZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm5vZGVUeXBlPWwudG9VcHBlckNhc2UoKX1zZXRSb290RG9jdW1lbnQobCl7dGhpcy5yb290RG9jdW1lbnQ9bH1vYnRhaW4oKXtyZXR1cm4gdGhpcy5yb290RG9j'@;
put 'dW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm5vZGVUeXBlKX19Y2xhc3MgaHl7Y29uc3RydWN0b3IobCxhKXt0aGlzLm5vZGVzUG9vbD0ic3RyaW5nIj09dHlwZW9mIGw/bmV3IFBrZShsKTpudWxsLHRoaXMubm9kZVR5cGU9bCx0aGlzLnJvb3ROb2RlPWEsdGhpcy50YWJsZT1udWxsLHRoaXMu'@;
put 'cmVuZGVyZWROb2Rlcz0wfXNldFRhYmxlKGwpe3RoaXMubm9kZXNQb29sJiZ0aGlzLm5vZGVzUG9vbC5zZXRSb290RG9jdW1lbnQobC5yb290RG9jdW1lbnQpLHRoaXMudGFibGU9bH1hZGp1c3QoKXt9cmVuZGVyKCl7fX1jbGFzcyBGa2UgZXh0ZW5kcyBoeXtjb25zdHJ1Y3Rvcigpe3N1cGVy'@;
put 'KCJUSCIpLHRoaXMub3JkZXJWaWV3cz1uZXcgV2Vha01hcCx0aGlzLnNvdXJjZVJvd0luZGV4PTB9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgenRlKGwsZD0+dGhpcy5ub2Rlc1Bv'@;
put 'b2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgsZCksdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd0hlYWRlckZ1bmN0aW9uczphLHJvd0hlYWRlcnNDb3VudDpkLHJvd3M6aCxjZWxsczpmfT10aGlz'@;
put 'LnRhYmxlO2ZvcihsZXQgXz0wO188bDtfKyspe2NvbnN0IFQ9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKF8pLFc9aC5nZXRSZW5kZXJlZE5vZGUoXyk7dGhpcy5zb3VyY2VSb3dJbmRleD1UO2NvbnN0IGllPXRoaXMub2J0YWluT3JkZXJWaWV3KFcpLGdlPWYub2J0YWluT3JkZXJW'@;
put 'aWV3KFcpO2llLmFwcGVuZFZpZXcoZ2UpLnNldFNpemUoZCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IHdlPTA7d2U8ZDt3ZSsrKXtpZS5yZW5kZXIoKTtjb25zdCBFZT1pZS5nZXRDdXJyZW50Tm9kZSgpO0VlLmNsYXNz'@;
put 'TmFtZT0iIixFZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksYVt3ZV0oVCxFZSx3ZSl9aWUuZW5kKCl9fX1jbGFzcyBIa2UgZXh0ZW5kcyBoeXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsLHJvd0hlYWRlcnNDb3VudDph'@;
put 'fT10aGlzLnRhYmxlO2xldCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZihsKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6aH09dGhpcy50YWJsZSxmPWgrYTtmb3IobGV0IFQ9MCxXPWw7VDxXO1QrKyl7Zm9yKGQ9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW1RdLGR8fChkPXRoaXMudGFi'@;
put 'bGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZChkKSksdGhpcy5yZW5kZXJlZE5vZGVzPWQuY2hpbGROb2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGY7KWQuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQu'@;
put 'Y3JlYXRlRWxlbWVudCgidGgiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmY7KWQucmVtb3ZlQ2hpbGQoZC5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCBfPXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYoXz5s'@;
put 'KWZvcihsZXQgVD1sO1Q8XztUKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBkJiZnMihkKX1yZW5kZXIoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bH09dGhpcy50YWJsZTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3R7Y29s'@;
put 'dW1uSGVhZGVyRnVuY3Rpb25zOmQsY29sdW1uc1RvUmVuZGVyOmgscm93SGVhZGVyc0NvdW50OmZ9PXRoaXMudGFibGUsXz10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbYV07Zm9yKGxldCBUPS0xKmY7VDxoO1QrPTEpe2NvbnN0IFc9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNl'@;
put 'KFQpLGllPV8uY2hpbGROb2Rlc1tUK2ZdO2llLmNsYXNzTmFtZT0iIixpZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksZFthXShXLGllLGEpfX19fWNsYXNzIE5rZSBleHRlbmRzIGh5e2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVy'@;
put 'Omwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGUsZD1sK2E7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM8ZDspdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7'@;
put 'dGhpcy5yZW5kZXJlZE5vZGVzPmQ7KXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1yZW5kZXIoKXt0aGlzLmFkanVzdCgpO2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlz'@;
put 'LnRhYmxlO2ZvcihsZXQgaD0wO2g8YTtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLF89dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaF0uc3R5bGUud2lkdGg9YCR7X31weGB9'@;
put 'Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksXz10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toK2FdLnN0eWxlLndpZHRoPWAke199'@;
put 'cHhgfWNvbnN0IGQ9dGhpcy5yb290Tm9kZS5maXJzdENoaWxkO2QmJnBpKGQsInJvd0hlYWRlciIpfX1sZXQgVXRlPSExO2NsYXNzIFZrZSBleHRlbmRzIGh5e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCJUUiIsbCksdGhpcy5vcmRlclZpZXc9bmV3IGp0ZShsLGE9PnRoaXMubm9kZXNQb29sLm9i'@;
put 'dGFpbihhKSx0aGlzLm5vZGVUeXBlKX1nZXRSZW5kZXJlZE5vZGUobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUobCl9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmx9PXRoaXMudGFibGU7IVV0ZSYmbD4xZTMmJihVdGU9ITAsR2EoQWFgUGVyZm9ybWFuY2UgdGlwOiBIYW5k'@;
put 'c29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSByb3dzLiBDb25zaWRlciBsaW1pdGluZ1x4MjAKICAgICAgICB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgaGVpZ2h0IGFuZC9vciB0dXJuaW5nIG9mZiB0aGUgInJlbmRl'@;
put 'ckFsbFJvd3MiIG9wdGlvbi5gKSksdGhpcy5vcmRlclZpZXcuc2V0U2l6ZShsKS5zZXRPZmZzZXQodGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKDApKS5zdGFydCgpO2ZvcihsZXQgYT0wO2E8bDthKyspdGhpcy5vcmRlclZpZXcucmVuZGVyKCk7dGhpcy5vcmRlclZpZXcuZW5kKCl9'@;
put 'fWNsYXNzIEJrZSBleHRlbmRzIGh5e2NvbnN0cnVjdG9yKCl7c3VwZXIoIlREIiksdGhpcy5vcmRlclZpZXdzPW5ldyBXZWFrTWFwLHRoaXMuc291cmNlUm93SW5kZXg9MH1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVy'@;
put 'Vmlld3MuZ2V0KGwpOihhPW5ldyB6dGUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwsY29sdW1uc1RvUmVuZGVyOmEs'@;
put 'cm93czpkLHJvd0hlYWRlcnM6aH09dGhpcy50YWJsZTtmb3IobGV0IGY9MDtmPGw7ZisrKXtjb25zdCBfPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShmKSxUPWQuZ2V0UmVuZGVyZWROb2RlKGYpO3RoaXMuc291cmNlUm93SW5kZXg9Xztjb25zdCBXPXRoaXMub2J0YWluT3JkZXJW'@;
put 'aWV3KFQpLGllPWgub2J0YWluT3JkZXJWaWV3KFQpO1cucHJlcGVuZFZpZXcoaWUpLnNldFNpemUoYSkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGdlPTA7Z2U8YTtnZSsrKXtXLnJlbmRlcigpO2NvbnN0IHdlPVcuZ2V0'@;
put 'Q3VycmVudE5vZGUoKSxFZT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoZ2UpO0JvKHdlLCJoaWRlIil8fCh3ZS5jbGFzc05hbWU9IiIpLHdlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx3ZS5yZW1vdmVBdHRyaWJ1dGUoImRpciIpLHRoaXMudGFibGUuY2VsbFJlbmRlcmVy'@;
put 'KF8sRWUsd2UpfVcuZW5kKCl9fX1jbGFzcyBqa2V7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSZW5kZXJlcjphfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5yb290Tm9kZT1sLHRoaXMucm9vdERvY3VtZW50PXRoaXMucm9v'@;
put 'dE5vZGUub3duZXJEb2N1bWVudCx0aGlzLnJvd0hlYWRlcnM9bnVsbCx0aGlzLmNvbHVtbkhlYWRlcnM9bnVsbCx0aGlzLmNvbEdyb3VwPW51bGwsdGhpcy5yb3dzPW51bGwsdGhpcy5jZWxscz1udWxsLHRoaXMucm93RmlsdGVyPW51bGwsdGhpcy5jb2x1bW5GaWx0ZXI9bnVsbCx0aGlzLnJv'@;
put 'd1V0aWxzPW51bGwsdGhpcy5jb2x1bW5VdGlscz1udWxsLHRoaXMucm93c1RvUmVuZGVyPTAsdGhpcy5jb2x1bW5zVG9SZW5kZXI9MCx0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1bXSx0aGlzLnJvd0hlYWRlcnNDb3VudD0wLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPVtdLHRoaXMuY29s'@;
put 'dW1uSGVhZGVyc0NvdW50PTAsdGhpcy5jZWxsUmVuZGVyZXI9YX1zZXRBeGlzVXRpbHMobCxhKXt0aGlzLnJvd1V0aWxzPWwsdGhpcy5jb2x1bW5VdGlscz1hfXNldFZpZXdwb3J0U2l6ZShsLGEpe3RoaXMucm93c1RvUmVuZGVyPWwsdGhpcy5jb2x1bW5zVG9SZW5kZXI9YX1zZXRGaWx0ZXJz'@;
put 'KGwsYSl7dGhpcy5yb3dGaWx0ZXI9bCx0aGlzLmNvbHVtbkZpbHRlcj1hfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXt0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1sLHRoaXMucm93SGVhZGVyc0NvdW50PWwubGVuZ3RoLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPWEsdGhpcy5j'@;
put 'b2x1bW5IZWFkZXJzQ291bnQ9YS5sZW5ndGh9c2V0UmVuZGVyZXJzKCl7bGV0e3Jvd0hlYWRlcnM6bCxjb2x1bW5IZWFkZXJzOmEsY29sR3JvdXA6ZCxyb3dzOmgsY2VsbHM6Zn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2wuc2V0'@;
put 'VGFibGUodGhpcyksYS5zZXRUYWJsZSh0aGlzKSxkLnNldFRhYmxlKHRoaXMpLGguc2V0VGFibGUodGhpcyksZi5zZXRUYWJsZSh0aGlzKSx0aGlzLnJvd0hlYWRlcnM9bCx0aGlzLmNvbHVtbkhlYWRlcnM9YSx0aGlzLmNvbEdyb3VwPWQsdGhpcy5yb3dzPWgsdGhpcy5jZWxscz1mfXJlbmRl'@;
put 'cmVkUm93VG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9cmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1yZW5kZXIoKXt0aGlzLmNvbEdyb3VwLmFkanVzdCgpLHRo'@;
put 'aXMuY29sdW1uSGVhZGVycy5hZGp1c3QoKSx0aGlzLnJvd3MuYWRqdXN0KCksdGhpcy5yb3dIZWFkZXJzLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5yZW5kZXIoKSx0aGlzLnJvd3MucmVuZGVyKCksdGhpcy5yb3dIZWFkZXJzLnJlbmRlcigpLHRoaXMuY2VsbHMucmVuZGVyKCksdGhp'@;
put 'cy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKSx0aGlzLmNvbEdyb3VwLnJlbmRlcigpO2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd3M6YX09dGhpcztmb3IobGV0IGQ9MDtkPGw7ZCsrKXtjb25zdCBoPWEuZ2V0UmVuZGVyZWROb2RlKGQpO2lmKGguZmlyc3RDaGlsZCl7Y29uc3QgZj10'@;
put 'aGlzLnJlbmRlcmVkUm93VG9Tb3VyY2UoZCksXz10aGlzLnJvd1V0aWxzLmdldEhlaWdodChmKTtoLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PV8/Xy0xKyJweCI6IiJ9fX19Y2xhc3Mgemtle2NvbnN0cnVjdG9yKCl7bGV0e1RBQkxFOmwsVEhFQUQ6YSxDT0xHUk9VUDpkLFRCT0RZOmgscm93'@;
put 'VXRpbHM6Zixjb2x1bW5VdGlsczpfLGNlbGxSZW5kZXJlcjpUfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5yZW5kZXJlcj1uZXcgamtlKGwse2NlbGxSZW5kZXJlcjpUfSksdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJlcnMo'@;
put 'e3Jvd0hlYWRlcnM6bmV3IEZrZSxjb2x1bW5IZWFkZXJzOm5ldyBIa2UoYSksY29sR3JvdXA6bmV3IE5rZShkKSxyb3dzOm5ldyBWa2UoaCksY2VsbHM6bmV3IEJrZX0pLHRoaXMucmVuZGVyZXIuc2V0QXhpc1V0aWxzKGYsXyl9c2V0RmlsdGVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVy'@;
put 'LnNldEZpbHRlcnMobCxhKSx0aGlzfXNldFZpZXdwb3J0U2l6ZShsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShsLGEpLHRoaXN9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJl'@;
put 'cnMobCxhKSx0aGlzfWFkanVzdCgpe3RoaXMucmVuZGVyZXIuYWRqdXN0KCl9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX19Y2xhc3MgVWtle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWEsdGhpcy5oZWFkZXJXaWR0aHM9'@;
put 'bmV3IE1hcH1nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbldpZHRoIixsKXx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpfWdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpe2NvbnN0IGE9dGhpcy5kYXRh'@;
put 'QWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I7bGV0IGQ9dGhpcy5nZXRXaWR0aChsKTtpZihhKXtjb25zdCBoPWEuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCxkKTtoJiYoZD1oKX1yZXR1cm4gZH1nZXRIZWFkZXJIZWlnaHQobCl7bGV0IGE9dGhpcy53'@;
put 'dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbbF07cmV0dXJuIHZvaWQgMCE9PWQmJihhPWE/TWF0aC5tYXgoYSxkKTpkKSxhfWdldEhlYWRlcldpZHRo'@;
put 'KGwpe3JldHVybiB0aGlzLmhlYWRlcldpZHRocy5nZXQodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCkpfWNhbGN1bGF0ZVdpZHRocygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RUYWJsZTphLHd0Vmlld3BvcnQ6ZCxj'@;
put 'bG9uZVNvdXJjZTpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1oP2gud3RUYWJsZS5ob2xkZXI6YS5ob2xkZXIsXz1mLm9mZnNldEhlaWdodDxmLnNjcm9sbEhlaWdodD9JYygpOjA7bGV0IFQ9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGQuY29sdW1uc1JlbmRlckNhbGN1'@;
put 'bGF0b3IucmVmcmVzaFN0cmV0Y2hpbmcoZC5nZXRWaWV3cG9ydFdpZHRoKCktXyksVD1sLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLFQpLG51bGwhPVQpe2NvbnN0IFc9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLGllPWwuZ2V0U2V0dGluZygiZGVmYXVs'@;
put 'dENvbHVtbldpZHRoIik7Zm9yKGxldCBnZT0wO2dlPFc7Z2UrKyl7bGV0IHdlPUFycmF5LmlzQXJyYXkoVCk/VFtnZV06VDt3ZT13ZT8/aWUsdGhpcy5oZWFkZXJXaWR0aHMuc2V0KGdlLHdlKX19fX1jbGFzcyBaa2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0'@;
put 'aGlzLnd0U2V0dGluZ3M9YX1nZXRIZWlnaHQobCl7bGV0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodCIsbCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT12b2lkIDA9'@;
put 'PT1hP2Q6TWF0aC5tYXgoYSxkKSksYX19Y29uc3QgeWc9InRvcCIsZ2g9ImJvdHRvbSIsd2c9ImlubGluZV9zdGFydCIsQ2c9InRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIixacD0iYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiLFlrZT1beWcsZ2gsd2csQ2csWnBdLFdrZT1uZXcgTWFwKFtb'@;
put 'eWcsYGh0X2Nsb25lXyR7eWd9YF0sW2doLGBodF9jbG9uZV8ke2dofWBdLFt3ZyxgaHRfY2xvbmVfJHt3Z30gaHRfY2xvbmVfbGVmdGBdLFtDZyxgaHRfY2xvbmVfJHtDZ30gaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyYF0sW1pwLGBodF9jbG9uZV8ke1pwfSBodF9jbG9uZV9ib3R0b21fbGVm'@;
put 'dF9jb3JuZXJgXV0pO2Z1bmN0aW9uIG1oKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBHa2UoYyl7dmFyIGw9ZnVuY3Rpb24gJGtlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7'@;
put 'dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMp'@;
put 'fShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgdTc9Y2xhc3Mg'@;
put 'cWtle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7bWgodGhpcywid3RTZXR0aW5ncyIsbnVsbCksbWgodGhpcywiZG9tQmluZGluZ3MiLHZvaWQgMCksbWgodGhpcywiVEJPRFkiLG51bGwpLG1oKHRoaXMsIlRIRUFEIixudWxsKSxtaCh0aGlzLCJDT0xHUk9VUCIsbnVsbCksbWgodGhpcywiaGFz'@;
put 'VGFibGVIZWlnaHQiLCEwKSxtaCh0aGlzLCJoYXNUYWJsZVdpZHRoIiwhMCksbWgodGhpcywiaXNUYWJsZVZpc2libGUiLCExKSxtaCh0aGlzLCJ0YWJsZU9mZnNldCIsMCksbWgodGhpcywiaG9sZGVyT2Zmc2V0IiwwKSx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5pc01hc3Rlcj0ibWFzdGVy'@;
put 'Ij09PWYsdGhpcy5uYW1lPWYsdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxF'@;
put 'PWQucm9vdFRhYmxlLGROKHRoaXMuVEFCTEUpLHRoaXMuc3ByZWFkZXI9dGhpcy5jcmVhdGVTcHJlYWRlcih0aGlzLlRBQkxFKSx0aGlzLmhpZGVyPXRoaXMuY3JlYXRlSGlkZXIodGhpcy5zcHJlYWRlciksdGhpcy5ob2xkZXI9dGhpcy5jcmVhdGVIb2xkZXIodGhpcy5oaWRlciksdGhpcy53'@;
put 'dFJvb3RFbGVtZW50PXRoaXMuaG9sZGVyLnBhcmVudE5vZGUsdGhpcy5pc01hc3RlciYmdGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5maXhUYWJsZURvbVRyZWUoKSx0aGlzLnJvd0ZpbHRlcj1udWxsLHRoaXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5j'@;
put 'b3JyZWN0SGVhZGVyV2lkdGg9ITE7Y29uc3QgXz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJvd0hlYWRlcldpZHRoIik7dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgicm93SGVhZGVyV2lkdGgiLCgpPT50aGlzLl9tb2RpZnlSb3dIZWFkZXJXaWR0aChfKSksdGhpcy5yb3dVdGls'@;
put 'cz1uZXcgWmtlKHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMuY29sdW1uVXRpbHM9bmV3IFVrZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLnRhYmxlUmVuZGVyZXI9bmV3IHprZSh7VEFCTEU6dGhpcy5UQUJMRSxUSEVBRDp0'@;
put 'aGlzLlRIRUFELENPTEdST1VQOnRoaXMuQ09MR1JPVVAsVEJPRFk6dGhpcy5UQk9EWSxyb3dVdGlsczp0aGlzLnJvd1V0aWxzLGNvbHVtblV0aWxzOnRoaXMuY29sdW1uVXRpbHMsY2VsbFJlbmRlcmVyOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgiY2VsbFJlbmRlcmVyIil9KX1p'@;
put 'cyhsKXtyZXR1cm4gdGhpcy5uYW1lPT09bH1maXhUYWJsZURvbVRyZWUoKXtjb25zdCBsPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50O3RoaXMuVEJPRFk9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJ0Ym9keSIpLHRoaXMuVEJPRFl8fCh0aGlzLlRCT0RZPWwuY3JlYXRlRWxlbWVu'@;
put 'dCgidGJvZHkiKSx0aGlzLlRBQkxFLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpKSx0aGlzLlRIRUFEPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGhlYWQiKSx0aGlzLlRIRUFEfHwodGhpcy5USEVBRD1sLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUo'@;
put 'dGhpcy5USEVBRCx0aGlzLlRCT0RZKSksdGhpcy5DT0xHUk9VUD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoImNvbGdyb3VwIiksdGhpcy5DT0xHUk9VUHx8KHRoaXMuQ09MR1JPVVA9bC5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuQ09M'@;
put 'R1JPVVAsdGhpcy5USEVBRCkpfWNyZWF0ZVNwcmVhZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhQm8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0'@;
put 'ZUVsZW1lbnQoImRpdiIpLGQuY2xhc3NOYW1lPSJ3dFNwcmVhZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQobCkpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkfWNyZWF0ZUhpZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8'@;
put 'YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhQm8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuY2xhc3NOYW1lPSJ3dEhpZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQo'@;
put 'bCkpLGR9Y3JlYXRlSG9sZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhQm8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp'@;
put 'LGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkLmNsYXNzTmFtZT0id3RIb2xkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksdGhpcy5pc01hc3RlciYmKGQucGFyZW50Tm9kZS5jbGFzc05hbWUrPSJodF9tYXN0ZXIgaGFuZHNvbnRhYmxlIixkLnBhcmVudE5vZGUuc2V0QXR0cmlidXRl'@;
put 'KCJkaXIiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicnRsTW9kZSIpPyJydGwiOiJsdHIiKSksZC5hcHBlbmRDaGlsZChsKSksZH1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRp'@;
put 'bmdzOmF9PXRoaXMse3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxmPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksXz1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLFQ9YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksVz1ULmxlbmd0aCxpZT1h'@;
put 'LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxnZT1pZS5sZW5ndGg7bGV0IHdlPSExLEVlPWw7aWYodGhpcy5pc01hc3RlciYmKHRoaXMuaG9sZGVyT2Zmc2V0PXFsKHRoaXMuaG9sZGVyKSxFZT1oLmNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzKEVlKSxXJiYhYS5nZXRTZXR0aW5nKCJmaXhl'@;
put 'ZENvbHVtbnNTdGFydCIpKSl7Y29uc3Qgb3Q9ZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxldD10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aDt0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0wIT09b3QsZXQhPT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKEVlPSExKX1p'@;
put 'Zih0aGlzLmlzTWFzdGVyJiYod2U9ZC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCkpLEVlKXRoaXMuaXNNYXN0ZXImJmguY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksZCYmZC5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj9xbCh0aGlzLlRBQkxFKTp0'@;
put 'aGlzLmRhdGFBY2Nlc3NPYmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3Qgb3Q9Zj4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpOjAsZXQ9Xz4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpOjA7dGhpcy5yb3dGaWx0ZXI9bmV3IGNsYXNzIElrZXtjb25zdHJ1Y3RvcihsLGEs'@;
put 'ZCl7dGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJj'@;
put 'ZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhsKXtyZXR1cm4gdGhpcy5y'@;
put 'ZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fShvdCxmLGdlKSx0aGlzLmNvbHVtbkZpbHRlcj1uZXcgY2xhc3MgVGtl'@;
put 'e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9ZH1vZmZzZXR0ZWQobCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0dXJuIGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5v'@;
put 'ZmZzZXR0ZWQobCl9c291cmNlVG9SZW5kZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1vZmZzZXR0ZWRUSChsKXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXtyZXR1cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNl'@;
put 'Q29sdW1uKGwpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9c291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19KGV0LF8sVyk7bGV0'@;
put 'IHl0PSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpO2NvbnN0IGt0PXt9O3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCxrdCkseXQ9ITAhPT1rdC5za2lwUmVuZGVyfWlmKHl0KXtsZXQga3Q7aWYo'@;
put 'dGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoVCxpZSksKHRoaXMuaXMoZ2gpfHx0aGlzLmlzKFpwKSkmJnRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKFQsW10pLHRoaXMucmVzZXRPdmVyc2l6ZWRSb3dzKCksdGhpcy50YWJs'@;
put 'ZVJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZSh0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCksdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpKS5zZXRGaWx0ZXJzKHRoaXMucm93RmlsdGVyLHRoaXMuY29sdW1uRmlsdGVyKS5yZW5kZXIoKSx0aGlzLmlzTWFzdGVyJiYoa3Q9dGhpcy5k'@;
put 'YXRhQWNjZXNzT2JqZWN0LndvcmtzcGFjZVdpZHRoLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmNvbnRhaW5lcldpZHRoPW51bGwsdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpKSx0aGlzLmFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKSwodGhpcy5pc01hc3Rl'@;
put 'cnx8dGhpcy5pcyhnaCkpJiZ0aGlzLm1hcmtPdmVyc2l6ZWRSb3dzKCksdGhpcy5pc01hc3Rlcil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3ZlcmxheXMucmVmcmVzaCghMSksdGhp'@;
put 'cy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3ZlcmxheXMuYXBwbHlUb0RPTSgpO2NvbnN0IFN0PXdhKHRoaXMuaGlkZXIpLFF0PXdhKHRoaXMuVEFCTEUpOzAhPT1TdCYmUXQhPT1TdCYmKHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhzKCksdGhpcy50YWJsZVJlbmRlcmVyLnJlbmRlcmVy'@;
put 'LmNvbEdyb3VwLnJlbmRlcigpKSxrdCE9PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5jb250YWluZXJXaWR0aD1udWxsLHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhz'@;
put 'KCksdGhpcy50YWJsZVJlbmRlcmVyLnJlbmRlcmVyLmNvbEdyb3VwLnJlbmRlcigpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCl9ZWxzZSB0aGlzLmlzKGdoKSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNsb25lU291cmNlLnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVu'@;
put 'dHNTaXplKCl9fWxldCBaZT0hMTtyZXR1cm4gdGhpcy5pc01hc3RlciYmKFplPWQudG9wT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbU92ZXJsYXkuY2xvbmUmJihaZT1kLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fFplKSxaZT1kLmlubGluZVN0YXJ0'@;
put 'T3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8WmUsZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLmJvdHRvbUlubGluZVN0'@;
put 'YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCkpLFplPyhkLnJlZnJlc2hBbGwoKSxkLmFkanVzdEVsZW1lbnRzU2l6ZSgpKTp0aGlzLnJlZnJlc2hTZWxlY3Rpb25zKEVlKSx3ZSYmZC5zeW5jU2Nyb2xs'@;
put 'V2l0aE1hc3RlcigpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC5kcmF3bj0hMCx0aGlzfW1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihsKXtjb25zdCBhPXRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCk7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVt'@;
put 'bkhlYWRlcnMiKS5sZW5ndGg7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpO2xldCBmLF8sVDtjb25zdCBXPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJIZWlnaHQiKXx8W107Zm9yKDtkOylkLT0xLGY9dGhpcy5n'@;
put 'ZXRDb2x1bW5IZWFkZXJIZWlnaHQoZCksXz10aGlzLmdldENvbHVtbkhlYWRlcihhLGQpLF8mJihUPWpmKF8pLCghZiYmaDxUfHxmPFQpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1UKSxBcnJheS5pc0FycmF5KFcpP251bGwh'@;
put 'PVdbZF0mJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPVdbZF0pOmlzTmFOKFcpfHwodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1XKSx0aGlzLmRhdGFBY2Nlc3NPYmpl'@;
put 'Y3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPChXW2RdfHxXKSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09V1tkXXx8VykpfWFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKXtjb25zdHt3dFNldHRpbmdz'@;
put 'Omx9PXRoaXMsYT10aGlzLlRIRUFELmNoaWxkTm9kZXMsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzO2ZvcihsZXQgZj0wLF89bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2Y8XztmKyspaWYoZFtmXSl7aWYoIWFb'@;
put 'Zl18fDA9PT1hW2ZdLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjthW2ZdLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PWAke2RbZl19cHhgfX1yZXNldE92ZXJzaXplZFJvd3MoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0'@;
put 'O2lmKCh0aGlzLmlzTWFzdGVyfHx0aGlzLmlzKGdoKSkmJiFsLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXtjb25zdCBkPXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9T'@;
put 'b3VyY2UoaCk7YS5vdmVyc2l6ZWRSb3dzJiZhLm92ZXJzaXplZFJvd3NbZl0mJihhLm92ZXJzaXplZFJvd3NbZl09dm9pZCAwKX19fXJlbW92ZUNsYXNzRnJvbUNlbGxzKGwpe2NvbnN0IGE9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yQWxsKGAuJHtsfWApO2ZvcihsZXQgZD0wLGg9YS5sZW5n'@;
put 'dGg7ZDxoO2QrKylXbyhhW2RdLGwpfXJlZnJlc2hTZWxlY3Rpb25zKGwpe2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyx7c2VsZWN0aW9uczpkfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuO2NvbnN0IGg9QXJyYXkuZnJvbShkKSxmPWgubGVuZ3RoO2lmKGwpe2NvbnN0IF89'@;
put 'W107Zm9yKGxldCBpZT0wO2llPGY7aWUrKyl7Y29uc3R7aGlnaGxpZ2h0SGVhZGVyQ2xhc3NOYW1lOmdlLGhpZ2hsaWdodFJvd0NsYXNzTmFtZTp3ZSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6RWV9PWhbaWVdLnNldHRpbmdzLFplPWhbaWVdLmNsYXNzTmFtZXMsb3Q9WmUubGVuZ3RoO2Zv'@;
put 'cihsZXQgZXQ9MDtldDxvdDtldCsrKV8uaW5jbHVkZXMoWmVbZXRdKXx8Xy5wdXNoKFplW2V0XSk7Z2UmJiFfLmluY2x1ZGVzKGdlKSYmXy5wdXNoKGdlKSx3ZSYmIV8uaW5jbHVkZXMod2UpJiZfLnB1c2god2UpLEVlJiYhXy5pbmNsdWRlcyhFZSkmJl8ucHVzaChFZSl9Y29uc3QgVD1hLmdl'@;
put 'dFNldHRpbmcoIm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKTtpZihBcnJheS5pc0FycmF5KFQpKWZvcihsZXQgaWU9MDtpZTxULmxlbmd0aDtpZSsrKV8ucHVzaChUW2llXSk7Y29uc3QgVz1fLmxlbmd0aDtmb3IobGV0IGllPTA7aWU8VztpZSsrKXRoaXMucmVtb3ZlQ2xhc3NGcm9t'@;
put 'Q2VsbHMoX1tpZV0pfWZvcihsZXQgXz0wO188ZjtfKyspaFtfXS5kcmF3KHRoaXMuZmFjYWRlR2V0dGVyKCksbCl9Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsYSxkKTtpZiho'@;
put 'JiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tMztp'@;
put 'Zih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZighZiYmYT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3QgXz1mLmNoaWxkTm9kZXNb'@;
put 'dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighXyYmZD49MCl0aHJvdyBuZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIF99Z2V0Um93KGwpe2xldCBhPW51'@;
put 'bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxkPXRoaXMuVEhFQUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09'@;
put 'PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5jaGlsZE5vZGVzLmxlbmd0aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19Z2V0Q29sdW1uSGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5jaGlsZE5vZGVzW2Fy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMobCl7Y29uc3QgYT1b'@;
put 'XSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVzLmZvckVhY2goaD0+e2NvbnN0IGY9aC5jaGlsZE5vZGVzW2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVhZGVyKGwpe2xldCBh'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKDA9PT10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oMCkpcmV0dXJuO2lmKGE+PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJy'@;
put 'b3dIZWFkZXJzIikubGVuZ3RoKXJldHVybjtjb25zdCBoPXRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXTtyZXR1cm4gaD8uY2hpbGROb2Rlc1thXX1nZXRSb3dIZWFkZXJzKGwpe2lmKDA9PT10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VD'@;
put 'b2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oMCkpcmV0dXJuW107Y29uc3QgYT1bXSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93Rmls'@;
put 'dGVyLnNvdXJjZVRvUmVuZGVyZWQobCldLF89Zj8uY2hpbGROb2Rlc1toXTtfJiZhLnB1c2goXyl9cmV0dXJuIGF9Z2V0Q29vcmRzKGwpe2xldCBhPWw7aWYoIlREIiE9PWEubm9kZU5hbWUmJiJUSCIhPT1hLm5vZGVOYW1lJiYoYT1OcChhLFsiVEQiLCJUSCJdKSksbnVsbD09PWEpcmV0dXJu'@;
put 'IG51bGw7Y29uc3QgZD1hLnBhcmVudE5vZGUsaD1kLnBhcmVudE5vZGU7bGV0IGY9c3RlKGQpLF89YS5jZWxsSW5kZXg7cmV0dXJuIEJwKENnLGEsdGhpcy53dFJvb3RFbGVtZW50KXx8QnAoeWcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVOYW1lJiYoZi09aC5jaGls'@;
put 'ZE5vZGVzLmxlbmd0aCk6Zj1CcChacCxhLHRoaXMud3RSb290RWxlbWVudCl8fEJwKGdoLGEsdGhpcy53dFJvb3RFbGVtZW50KT90aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10aGlzLlRIRUFEP3RoaXMucm93RmlsdGVy'@;
put 'LnZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhmKTp0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpLF89QnAoQ2csYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxCcCh3ZyxhLHRoaXMud3RSb290RWxlbWVudCl8fEJwKFpwLGEsdGhpcy53dFJvb3RFbGVtZW50KT90aGlzLmNv'@;
put 'bHVtbkZpbHRlci5vZmZzZXR0ZWRUSChfKTp0aGlzLmNvbHVtbkZpbHRlci52aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4oXyksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLF8pfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'ImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXJldHVybjtsZXQgaCxmLF8sVCxXLGw9dGhpcy5UQk9EWS5jaGlsZE5vZGVzLmxlbmd0aDtpZihsKnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0IikhPWpmKHRoaXMuVEJPRFkpLTF8fHRoaXMud3RTZXR0aW5ncy5n'@;
put 'ZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSlmb3IoO2w7KWwtPTEsXz10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpLGg9dGhpcy5nZXRSb3dIZWlnaHQoXyksVD10aGlzLmdldFRyRm9yUm93KF8pLFc9VC5xdWVyeVNlbGVjdG9yKCJ0aCIpLGY9Vz9qZihXKTpqZihUKS0x'@;
put 'LCghaCYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTxmfHxoPGYpJiYoZis9MSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW19dPWYpfWdldFRyRm9yUm93KGwpe3JldHVybiB0aGlzLlRCT0RZLmNoaWxkTm9kZXNb'@;
put 'dGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV19aXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93SGVh'@;
put 'ZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5k'@;
put 'ZXJlZFJvdygpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNSb3dIZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNSb3dBZnRlclJlbmRlcmVkUm93cyhsKXtyZXR1cm4gbD50aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGwpe2NvbnN0IGE9dGhp'@;
put 'cy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpOmw8YX1pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RSZW5kZXJlZENvbHVt'@;
put 'bigpfWlzQ29sdW1uQWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpfWlzUm93QWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpfWlzQ29sdW1u'@;
put 'QmVmb3JlVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZ0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpPDAmJmw+PTB9aXNMYXN0Um93RnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKT09PXRoaXMuZ2V0TGFzdFJlbmRl'@;
put 'cmVkUm93KCl9aXNMYXN0Q29sdW1uRnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9YWxsUm93c0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93'@;
put 'cyIpPT09dGhpcy5nZXRWaXNpYmxlUm93c0NvdW50KCl9YWxsQ29sdW1uc0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPT09dGhpcy5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl9Z2V0Um93SGVpZ2h0KGwpe3JldHVybiB0aGlz'@;
put 'LnJvd1V0aWxzLmdldEhlaWdodChsKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0SGVhZGVySGVpZ2h0KGwpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFdpZHRoKGwpfWdldFN0cmV0Y2hlZENvbHVtbldp'@;
put 'ZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpfWhhc0RlZmluZWRTaXplKCl7cmV0dXJuIHRoaXMuaGFzVGFibGVIZWlnaHQmJnRoaXMuaGFzVGFibGVXaWR0aH1nZXRXaWR0aCgpe3JldHVybiB3YSh0aGlzLlRBQkxFKX1nZXRIZWlnaHQo'@;
put 'KXtyZXR1cm4gYWwodGhpcy5UQUJMRSl9Z2V0VG90YWxXaWR0aCgpe2NvbnN0IGw9d2EodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhpcy5nZXRXaWR0aCgpfWdldFRvdGFsSGVpZ2h0KCl7Y29uc3QgbD1hbCh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdldEhlaWdodCgp'@;
put 'fWlzVmlzaWJsZSgpe3JldHVybiBlNyh0aGlzLlRBQkxFKX1fbW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9UmEobCk/bCgpOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGE9Wy4uLmFdLGFbYS5sZW5ndGgtMV09dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGFbYS5sZW5n'@;
put 'dGgtMV0pKTphPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhKSxhfV9jb3JyZWN0Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGwmJihhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKSksdGhpcy5jb3Jy'@;
put 'ZWN0SGVhZGVyV2lkdGgmJihhKz0xKSxhfX0sWnRlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygp'@;
put 'fSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7Y29uc3QgYz10aGlzLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxjKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9fTtmaChadGUsIk1JWElOX05BTUUiLCJz'@;
put 'dGlja3lSb3dzVG9wIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFl0ZT1adGUsV3RlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmly'@;
put 'c3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5SZW5kZXJlZDtyZXR1'@;
put 'cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qu'@;
put 'Y291bnRDb2x1bW5zUmVuZGVyZWR9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1Zpc2libGV9fTtmaChXdGUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkQ29sdW1ucyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9'@;
put 'KTtjb25zdCBOTj1XdGU7Y2xhc3MgVk4gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLHlnKX19VGEoVk4sWXRlKSxUYShWTixOTik7Y29uc3QgSmtlPVZOO2Z1bmN0aW9uIEJOKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBRa2UoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gZUFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gR3RlKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBvQWUoYyl7dmFyIGw9ZnVuY3Rpb24gc0FlKGMsbCl7aWYoIm9iamVjdCIhPXR5'@;
put 'cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt'@;
put 'dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph'@;
put 'LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gZnkoYyxsKXtyZXR1cm4gZnVuY3Rpb24gYUFlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYywkdGUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gJHRlKGMs'@;
put 'bCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBTZz1uZXcgV2Vha01hcDtjbGFzcyBqTntjb25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07R3RlKHRoaXMsInJvdyIsbnVsbCksR3RlKHRoaXMsImNvbCIsbnVsbCksZnVuY3Rpb24gckFlKGMsbCxhKXsoZnVuY3Rpb24gaUFlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu'@;
put 'bm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxTZyx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxmdW5jdGlvbiBsQWUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBjQWUoYyxsLGEpe2lmKGwu'@;
put 'c2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLCR0ZShjLGwsInNldCIpLGEpLGF9KHRoaXMsU2csZCksdHlwZW9mIGw8InUiJiZ0'@;
put 'eXBlb2YgYTwidSImJih0aGlzLnJvdz1sLHRoaXMuY29sPWEpfWlzVmFsaWQobCl7cmV0dXJuISh0aGlzLnJvdzwwfHx0aGlzLmNvbDwwfHx0aGlzLnJvdz49bC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKXx8dGhpcy5jb2w+PWwuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIikpfWlzRXF1YWwo'@;
put 'bCl7cmV0dXJuIGw9PT10aGlzfHx0aGlzLnJvdz09PWwucm93JiZ0aGlzLmNvbD09PWwuY29sfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJu'@;
put 'IHRoaXMucm93PD1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzU291dGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzTm9ydGhFYXN0T2Yo'@;
put 'bCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLnJvdz1udWxsPT09dGhpcy5yb3c/dGhpcy5yb3c6TWF0aC5tYXgodGhpcy5yb3csMCksdGhpcy5jb2w9bnVsbD09PXRo'@;
put 'aXMuY29sP3RoaXMuY29sOk1hdGgubWF4KHRoaXMuY29sLDApLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IGpOKHRoaXMucm93LHRoaXMuY29sLGZ5KHRoaXMsU2cpKX10b09iamVjdCgpe3JldHVybntyb3c6dGhpcy5yb3csY29sOnRoaXMuY29sfX19Y29uc3QgU2s9ak47ZnVuY3Rpb24gek4o'@;
put 'YyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGhBZShjKXt2YXIgbD1mdW5jdGlvbiBmQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs'@;
put 'dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i'@;
put 'b2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB2aChjLGwpe3JldHVybiBmdW5jdGlvbiBwQWUoYyxs'@;
put 'KXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLHF0ZShjLGwsImdldCIpKX1mdW5jdGlvbiBxdGUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1'@;
put 'cm4gbC5nZXQoYyl9dmFyIGdkPW5ldyBXZWFrTWFwO2NsYXNzIFVOe2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJn'@;
put 'dW1lbnRzWzJdOmwsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3pOKHRoaXMsImhpZ2hsaWdodCIsbnVsbCksek4odGhpcywiZnJvbSIsbnVsbCksek4odGhpcywidG8iLG51bGwpLGZ1bmN0aW9uIHVBZShjLGwsYSl7KGZ1bmN0aW9u'@;
put 'IGRBZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsZ2Qse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksdGhpcy5o'@;
put 'aWdobGlnaHQ9bC5jbG9uZSgpLm5vcm1hbGl6ZSgpLHRoaXMuZnJvbT1hLmNsb25lKCksdGhpcy50bz1kLmNsb25lKCksZnVuY3Rpb24gZ0FlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gbUFlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxxdGUoYyxsLCJzZXQiKSxhKSxhfSh0aGlzLGdkLGgpfXNldEhpZ2hsaWdodChsKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLm5vcm1hbGl6ZSgp'@;
put 'LHRoaXN9c2V0RnJvbShsKXtyZXR1cm4gdGhpcy5mcm9tPWwuY2xvbmUoKSx0aGlzfXNldFRvKGwpe3JldHVybiB0aGlzLnRvPWwuY2xvbmUoKSx0aGlzfWlzVmFsaWQobCl7cmV0dXJuIHRoaXMuZnJvbS5pc1ZhbGlkKGwpJiZ0aGlzLnRvLmlzVmFsaWQobCl9aXNTaW5nbGUoKXtyZXR1cm4g'@;
put 'dGhpcy5mcm9tLnJvdz49MCYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPj0wJiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9Z2V0T3V0ZXJIZWlnaHQoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyktTWF0aC5taW4odGhp'@;
put 'cy5mcm9tLnJvdyx0aGlzLnRvLnJvdykrMX1nZXRPdXRlcldpZHRoKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKzF9Z2V0SGVpZ2h0KCl7aWYodGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJv'@;
put 'dzwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLnJvdywwKSxhPU1hdGgubWF4KHRoaXMudG8ucm93LDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRXaWR0aCgpe2lmKHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MClyZXR1cm4gMDtj'@;
put 'b25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsMCksYT1NYXRoLm1heCh0aGlzLnRvLmNvbCwwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0Q2VsbHNDb3VudCgpe3JldHVybiB0aGlzLmdldFdpZHRoKCkqdGhpcy5nZXRIZWlnaHQoKX1pbmNsdWRlcyhsKXtj'@;
put 'b25zdHtyb3c6YSxjb2w6ZH09bCxoPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGY9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybiBoLnJvdzw9YSYmZi5yb3c+PWEmJmguY29sPD1kJiZmLmNvbD49ZH1pbmNsdWRlc1JhbmdlKGwpe3JldHVybiB0aGlzLmluY2x1'@;
put 'ZGVzKGwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKSYmdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpfWlzRXF1YWwobCl7cmV0dXJuIE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdykmJk1h'@;
put 'dGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpPT09TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCkmJk1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50'@;
put 'by5jb2wpPT09TWF0aC5tYXgobC5mcm9tLmNvbCxsLnRvLmNvbCl9b3ZlcmxhcHMobCl7cmV0dXJuIGwuaXNTb3V0aEVhc3RPZih0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKSYmbC5pc05vcnRoV2VzdE9mKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1pc1NvdXRoRWFz'@;
put 'dE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzU291dGhFYXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzU291dGhFYXN0T2YobCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5p'@;
put 'c05vcnRoV2VzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfWlzT3ZlcmxhcHBpbmdIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5j'@;
put 'b2wmJnRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sfHx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigp'@;
put 'LmNvbD49bC5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5jb2x9aXNPdmVybGFwcGluZ1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyQm90dG9tUmlnaHRD'@;
put 'b3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvd3x8dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRv'@;
put 'cFJpZ2h0Q29ybmVyKCkucm93fWV4cGFuZChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybihsLnJvdzxhLnJvd3x8bC5jb2w8YS5jb2x8fGwucm93PmQucm93fHxsLmNvbD5kLmNvbCkmJih0aGlz'@;
put 'LmZyb209dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihhLnJvdyxsLnJvdyksTWF0aC5taW4oYS5jb2wsbC5jb2wpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoZC5yb3csbC5yb3cpLE1hdGgubWF4KGQuY29sLGwuY29sKSksITApfWV4cGFuZEJ5UmFu'@;
put 'Z2UobCl7aWYodGhpcy5pbmNsdWRlc1JhbmdlKGwpfHwhdGhpcy5vdmVybGFwcyhsKSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGg9dGhpcy5nZXREaXJlY3Rpb24oKSxmPWwuZ2V0T3V0ZXJU'@;
put 'b3BTdGFydENvcm5lcigpLF89bC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLFQ9TWF0aC5taW4oYS5yb3csZi5yb3cpLFc9TWF0aC5taW4oYS5jb2wsZi5jb2wpLGllPU1hdGgubWF4KGQucm93LF8ucm93KSxnZT1NYXRoLm1heChkLmNvbCxfLmNvbCksd2U9dGhpcy5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhULFcpLEVlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaWUsZ2UpO3JldHVybiB0aGlzLmZyb209d2UsdGhpcy50bz1FZSx0aGlzLnNldERpcmVjdGlvbihoKSx0aGlzLmhpZ2hsaWdodC5yb3c9PT10aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cmJiJOLVMiPT09dGhp'@;
put 'cy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCksdGhpcy5oaWdobGlnaHQuY29sPT09dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiYiVy1FIj09PXRoaXMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJl'@;
put 'Y3Rpb25Ib3Jpem9udGFsbHkoKSwhMH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tLmlzTm9ydGhXZXN0T2YodGhpcy50byk/Ik5XLVNFIjp0aGlzLmZyb20uaXNOb3J0aEVhc3RPZih0aGlzLnRvKT8iTkUtU1ciOnRoaXMuZnJvbS5pc1NvdXRoRWFzdE9mKHRoaXMudG8pPyJTRS1O'@;
put 'VyI6dGhpcy5mcm9tLmlzU291dGhXZXN0T2YodGhpcy50byk/IlNXLU5FIjp2b2lkIDB9c2V0RGlyZWN0aW9uKGwpe3N3aXRjaChsKXtjYXNlIk5XLVNFIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENv'@;
put 'cm5lcigpXTticmVhaztjYXNlIk5FLVNXIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNFLU5XIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90'@;
put 'dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNXLU5FIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpXX19Z2V0VmVydGljYWxEaXJl'@;
put 'Y3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJOLVMiOiJTLU4ifWdldEhvcml6b250YWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJXLUUiOiJF'@;
put 'LVcifWZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMu'@;
put 'c2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpfX1mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2Jy'@;
put 'ZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpfX1nZXRUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlz'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIHZoKHRoaXMsZ2QpP3RoaXMuZ2V0VG9wRW5kQ29ybmVyKCk6'@;
put 'dGhpcy5nZXRUb3BTdGFydENvcm5lcigpfWdldEJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRC'@;
put 'b3R0b21SaWdodENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX1nZXRUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRo'@;
put 'aXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0VG9wRW5kQ29ybmVyKCl9Z2V0Qm90dG9tU3RhcnRDb3Ju'@;
put 'ZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tTGVmdENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlz'@;
put 'LmdldEJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKX1nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0'@;
put 'aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wTGVmdENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdl'@;
put 'dE91dGVyQm90dG9tRW5kQ29ybmVyKCl9Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BSaWdo'@;
put 'dENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5y'@;
put 'b3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpfWlz'@;
put 'Q29ybmVyKGwsYSl7cmV0dXJuISEoYSYmYS5pbmNsdWRlcyhsKSYmKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGEuZnJvbS5yb3csYS5mcm9tLmNvbCkpfHx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5pc0VxdWFsKHRo'@;
put 'aXMuX2NyZWF0ZUNlbGxDb29yZHMoYS5mcm9tLnJvdyxhLnRvLmNvbCkpfHx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhhLnRvLnJvdyxhLmZyb20uY29sKSl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlz'@;
put 'RXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhhLnRvLnJvdyxhLnRvLmNvbCkpKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21M'@;
put 'ZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWdldE9wcG9zaXRlQ29ybmVyKGwsYSl7aWYoIShsIGluc3RhbmNlb2YgU2spKXJldHVybiExO2lmKGEpe2NvbnN0e2Zyb206ZCx0bzpofT1hO2lmKGEuaW5jbHVkZXMobCkpe2lmKHRoaXMu'@;
put 'Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxkLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7aWYodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhkLnJvdyxoLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTtpZih0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csZC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlclRvcEVu'@;
put 'ZENvcm5lcigpO2lmKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csaC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9fXJldHVybiBsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUVu'@;
put 'ZENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpKT90aGlzLmdldE91dGVy'@;
put 'Qm90dG9tU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp2b2lkIDB9Z2V0Qm9yZGVyc1NoYXJlZFdpdGgobCl7aWYoIXRoaXMuaW5jbHVkZXNSYW5nZShsKSlyZXR1cm5bXTtjb25zdCBh'@;
put 'X3RvcD1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2JvdHRvbT1NYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2xlZnQ9TWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksYV9yaWdodD1NYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMu'@;
put 'dG8uY29sKSxkX3RvcD1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSxkX2JvdHRvbT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSxkX2xlZnQ9TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCksZF9yaWdodD1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKSxoPVtdO3Jl'@;
put 'dHVybiBhX3RvcD09PWRfdG9wJiZoLnB1c2goInRvcCIpLGFfcmlnaHQ9PT1kX3JpZ2h0JiZoLnB1c2goInJpZ2h0IiksYV9ib3R0b209PT1kX2JvdHRvbSYmaC5wdXNoKCJib3R0b20iKSxhX2xlZnQ9PT1kX2xlZnQmJmgucHVzaCgibGVmdCIpLGh9Z2V0SW5uZXIoKXtjb25zdCBsPXRoaXMu'@;
put 'Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKSh0aGlzLmZyb20ucm93IT09aHx8dGhpcy5mcm9tLmNvbCE9PWYpJiYodGhp'@;
put 'cy50by5yb3chPT1ofHx0aGlzLnRvLmNvbCE9PWYpJiZkLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1nZXRBbGwoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9y'@;
put 'KGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKWQucHVzaChsLnJvdz09PWgmJmwuY29sPT09Zj9sOmEucm93PT09aCYmYS5jb2w9PT1mP2E6dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1mb3JBbGwobCl7Y29uc3QgYT10'@;
put 'aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGg9YS5yb3c7aDw9ZC5yb3c7aCsrKWZvcihsZXQgZj1hLmNvbDtmPD1kLmNvbDtmKyspaWYoITE9PT1sKGgsZikpcmV0dXJufWNsb25lKCl7cmV0dXJuIG5ldyBVTih0'@;
put 'aGlzLmhpZ2hsaWdodCx0aGlzLmZyb20sdGhpcy50byx2aCh0aGlzLGdkKSl9dG9PYmplY3QoKXtyZXR1cm57ZnJvbTp0aGlzLmZyb20udG9PYmplY3QoKSx0bzp0aGlzLnRvLnRvT2JqZWN0KCl9fV9jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyBTayhsLGEsdmgodGhpcyxnZCkp'@;
put 'fX1jb25zdCBaTj1VTjtmdW5jdGlvbiBfMihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gdkFlKGMpe3ZhciBsPWZ1bmN0aW9uIF9BZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp'@;
put 'e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj'@;
put 'KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFlOe2dldCBl'@;
put 'dmVudE1hbmFnZXIoKXtyZXR1cm4gbmV3IGxsKHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7XzIodGhpcywid3RUYWJsZSIsdm9pZCAwKSxfMih0aGlzLCJ3dFNjcm9sbCIsdm9pZCAwKSxfMih0aGlzLCJ3dFZpZXdwb3J0Iix2b2lkIDApLF8yKHRoaXMsInd0T3ZlcmxheXMiLHZvaWQgMCksXzIo'@;
put 'dGhpcywic2VsZWN0aW9ucyIsdm9pZCAwKSxfMih0aGlzLCJ3dEV2ZW50Iix2b2lkIDApLF8yKHRoaXMsImd1aWQiLGB3dF8ke2FOKCl9YCksXzIodGhpcywiZHJhd0ludGVycnVwdGVkIiwhMSksXzIodGhpcywiZHJhd24iLCExKSxfMih0aGlzLCJkb21CaW5kaW5ncyIsdm9pZCAwKSxfMih0'@;
put 'aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZG9tQmluZGluZ3M9e3Jvb3RUYWJsZTpsLHJvb3REb2N1bWVudDpsLm93bmVyRG9jdW1lbnQscm9vdFdpbmRvdzpsLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LHRoaXMud3RTZXR0aW5ncz1hLHRoaXMud3RTY3JvbGw9bmV3IGNsYXNz'@;
put 'IHRBZXtjb25zdHJ1Y3RvcihsKXtCTih0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLEJOKHRoaXMsImxhc3RTY3JvbGxlZENvbHVtblBvcyIsLTEpLEJOKHRoaXMsImxhc3RTY3JvbGxlZFJvd1BvcyIsLTEpLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sfXNjcm9sbFZpZXdwb3J0KGws'@;
put 'YSxkLGgsZil7Y29uc3QgXz10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwuY29sLGQsZiksVD10aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLnJvdyxhLGgpO3JldHVybiBffHxUfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKXtjb25zdHtkcmF3bjpoLHRv'@;
put 'dGFsQ29sdW1uczpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWh8fCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+ZilyZXR1cm4hMTtjb25zdCBfPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksVD10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCksVz12b2lkIDA9PT1hJiZ2'@;
put 'b2lkIDA9PT1kLHtmaXhlZENvbHVtbnNTdGFydDppZSxpbmxpbmVTdGFydE92ZXJsYXk6Z2V9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihXJiZsPGllKXJldHVybiExO2xldCB3ZT0hMTtyZXR1cm4tMT09PV8/d2U9Z2Uuc2Nyb2xsVG8obCxXP2w+dGhpcy5sYXN0U2Nyb2xsZWRDb2x1bW5Q'@;
put 'b3M6YSk6KFcmJihsPF98fGw+VCl8fCFXKSYmKHdlPWdlLnNjcm9sbFRvKGwsVz9sPlQ6YSkpLHdlJiYodGhpcy5sYXN0U2Nyb2xsZWRDb2x1bW5Qb3M9bCksd2V9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtjb25zdHtkcmF3bjpoLHRvdGFsUm93czpmfT10aGlzLmRhdGFBY2Nl'@;
put 'c3NPYmplY3Q7aWYoIWh8fCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+ZilyZXR1cm4hMTtjb25zdCBfPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksVD10aGlzLmdldExhc3RWaXNpYmxlUm93KCksVz12b2lkIDA9PT1hJiZ2b2lkIDA9PT1kLHtmaXhlZFJvd3NCb3R0b206aWUsZml4'@;
put 'ZWRSb3dzVG9wOmdlLHRvcE92ZXJsYXk6d2V9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihXJiYobDxnZXx8bD5mLWllLTEpKXJldHVybiExO2xldCBFZT0hMTtyZXR1cm4tMT09PV8/RWU9d2Uuc2Nyb2xsVG8obCxXP2w+dGhpcy5sYXN0U2Nyb2xsZWRSb3dQb3M6ZCk6KFcmJihsPF98fGw+'@;
put 'VCl8fCFXKSYmKEVlPXdlLnNjcm9sbFRvKGwsVz9sPlQ6ZCkpLEVlJiYodGhpcy5sYXN0U2Nyb2xsZWRSb3dQb3M9bCksRWV9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3R7dG9wT3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxSb3dzOmgsZml4ZWRSb3dzVG9wOmYscm9v'@;
put 'dFdpbmRvdzpffT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9YS5nZXRGaXJzdFZpc2libGVSb3coKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Xyl7Y29uc3QgVz1xbChhLnd0Um9vdEVsZW1lbnQpLGllPWpmKGEuaGlkZXIpLGdlPWpmKF8pLHdlPW55KF8sXyk7aWYo'@;
put 'Vy50b3AraWUtZ2U8PXdlKXtsZXQgRWU9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtFZSs9bC5zdW1DZWxsU2l6ZXMoMCxmKTtmb3IobGV0IFplPWg7WmU+MDtaZS0tKWlmKEVlKz1sLnN1bUNlbGxTaXplcyhaZS0xLFplKSxXLnRvcCtpZS1FZTw9d2Upe1Q9WmU7YnJlYWt9fX1yZXR1cm4g'@;
put 'VH1nZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRvdGFsUm93czpoLHJvb3RXaW5kb3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBfPWEuZ2V0TGFzdFZpc2libGVSb3coKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVF'@;
put 'bGVtZW50PT09Zil7Y29uc3QgVD1xbChhLnd0Um9vdEVsZW1lbnQpLFc9bnkoZixmKTtpZihULnRvcD5XKXtjb25zdCBpZT1qZihmKTtsZXQgZ2U9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtmb3IobGV0IHdlPTE7d2U8PWg7d2UrKylpZihnZSs9bC5zdW1DZWxsU2l6ZXMod2UtMSx3ZSks'@;
put 'VC50b3ArZ2UtVz49aWUpe189d2UtMjticmVha319fXJldHVybiBffWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0e2lubGluZVN0YXJ0T3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxDb2x1bW5zOmgscm9vdFdpbmRvdzpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7'@;
put 'bGV0IF89YS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Zil7Y29uc3QgVD1xbChhLnd0Um9vdEVsZW1lbnQpLFc9aXkoYS5oaWRlciksaWU9aXkoZiksZ2U9TWF0aC5hYnMoaWsoZixmKSk7aWYoVC5sZWZ0K1ctaWU8PWdlKXtsZXQg'@;
put 'd2U9ZC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgRWU9aDtFZT4wO0VlLS0paWYod2UrPWwuc3VtQ2VsbFNpemVzKEVlLTEsRWUpLFQubGVmdCtXLXdlPD1nZSl7Xz1FZTticmVha319fXJldHVybiBffWdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3R7d3RTZXR0aW5nczpsLGlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheTphLHd0VGFibGU6ZCx3dFZpZXdwb3J0OmgsdG90YWxDb2x1bW5zOmYscm9vdFdpbmRvdzpffT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9ZC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2lmKGEubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1fKXtsZXQgaWU9'@;
put 'bnVsbDtpZihsLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3Qgd2U9ZC5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZT1NYXRoLmFicyh3ZS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgp'@;
put 'fWVsc2UgaWU9cWwoZC53dFJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IGdlPU1hdGguYWJzKGlrKF8sXykpO2lmKGllPmdlKXtjb25zdCB3ZT1peShfKTtsZXQgRWU9aC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgWmU9MTtaZTw9ZjtaZSsrKWlmKEVlKz1hLnN1bUNlbGxTaXplcyhaZS0x'@;
put 'LFplKSxpZStFZS1nZT49d2Upe1Q9WmUtMjticmVha319fXJldHVybiBUfX0odGhpcy5jcmVhdGVTY3JvbGxEYW8oKSl9ZmluZE9yaWdpbmFsSGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLnd0VGFibGUuVEhFQUQuY2hp'@;
put 'bGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCl7Zm9yKGxldCBhPTAsZD10aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKWwucHVzaCh0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2FdLmlubmVySFRN'@;
put 'TCk7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGh8fHRoaXMud3RTZXR0aW5ncy51cGRhdGUoImNvbHVtbkhlYWRlcnMiLFtmdW5jdGlvbihhLGQpe2pwKGQsbFthXSl9XSl9fWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IFNrKGwsYSx0'@;
put 'aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiBuZXcgWk4obCxhLGQsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuZHJhd0ludGVycnVwdGVkPSExLGx8fHRoaXMud3RUYWJsZS5pc1Zpc2libGUoKT90aGlzLnd0VGFibGUuZHJhdyhsKTp0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMCx0aGlzfWdldENlbGwobCl7aWYoIShhcmd1bWVudHMubGVuZ3Ro'@;
put 'PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKSlyZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCk7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiks'@;
put 'Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksXz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZihsLnJvdzxoJiZsLmNvbDxfKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVy'@;
put 'bGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxoKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5jb2w8XyYmbC5yb3c+PWQtZil7aWYodGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVy'@;
put 'T3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9ZWxzZXtpZihsLmNvbDxfKXJldHVybiB0'@;
put 'aGlzLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxkJiZsLnJvdz49ZC1mJiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RP'@;
put 'dmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1yZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCl9c2Nyb2xsVmlld3BvcnQobCxhLGQsaCxmKXtyZXR1cm4hKGwuY29sPDB8fGwucm93PDApJiZ0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0KGwsYSxk'@;
put 'LGgsZil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpe3JldHVybiEobDwwKSYmdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtyZXR1cm4hKGw8MCkmJnRoaXMud3RTY3JvbGwuc2Ny'@;
put 'b2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKX1nZXRWaWV3cG9ydCgpe3JldHVyblt0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJs'@;
put 'ZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpXX1kZXN0cm95KCl7dGhpcy53dE92ZXJsYXlzLmRlc3Ryb3koKSx0aGlzLnd0RXZlbnQuZGVzdHJveSgpfWNyZWF0ZVNjcm9sbERhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IGRyYXduKCl7cmV0dXJuIGwuZHJhd259LGdldCB0b3BPdmVybGF5'@;
put 'KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53dFZpZXdw'@;
put 'b3J0fSxnZXQgd3RTZXR0aW5ncygpe3JldHVybiBsLnd0U2V0dGluZ3N9LGdldCByb290V2luZG93KCl7cmV0dXJuIGwuZG9tQmluZGluZ3Mucm9vdFdpbmRvd30sZ2V0IHRvdGFsUm93cygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIil9LGdldCB0b3RhbENv'@;
put 'bHVtbnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpfSxnZXQgZml4ZWRSb3dzVG9wKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX0sZ2V0IGZpeGVkUm93c0JvdHRvbSgpe3JldHVybiBsLnd0U2V0dGluZ3Mu'@;
put 'Z2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIil9LGdldCBmaXhlZENvbHVtbnNTdGFydCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKX19fWdldFRhYmxlRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdl'@;
put 'dCBwYXJlbnRUYWJsZU9mZnNldCgpe3JldHVybiBsLmNsb25lU291cmNlLnd0VGFibGUudGFibGVPZmZzZXR9LGdldCBjbG9uZVNvdXJjZSgpe3JldHVybiBsLmNsb25lU291cmNlfSxnZXQgd29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9'@;
put 'LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gbC53dE92ZXJsYXlzfSxnZXQgc2VsZWN0aW9ucygpe3JldHVybiBsLnNlbGVjdGlvbnN9LGdldCBkcmF3bigpe3JldHVybiBsLmRyYXdufSxzZXQgZHJhd24oYSl7bC5kcmF3bj1h'@;
put 'fSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCBzdGFydENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29s'@;
put 'dW1uc1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgZW5kQ29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNW'@;
put 'aXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBjb3VudENvbHVtbnNSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudENvbHVtbnNWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJs'@;
put 'ZUNhbGN1bGF0b3IuY291bnR9LGdldCBzdGFydFJvd1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93'@;
put 'fSxnZXQgZW5kUm93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBjb3VudFJvd3NSZW5kZXJlZCgp'@;
put 'e3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudFJvd3NWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuY291bnR9fX19ZnVuY3Rpb24gS3RlKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBiQWUo'@;
put 'Yyl7dmFyIGw9ZnVuY3Rpb24geUFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0'@;
put 'dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwp'@;
put 'LGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgd0FlIGV4dGVuZHMgWU57Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksS3RlKHRoaXMsImNsb25lU291'@;
put 'cmNlIix2b2lkIDApLEt0ZSh0aGlzLCJjbG9uZU92ZXJsYXkiLHZvaWQgMCk7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLmNsb25lU291cmNlPWQuc291cmNlLHRoaXMuY2xvbmVPdmVybGF5PWQub3ZlcmxheSx0aGlzLnd0VGFibGU9dGhp'@;
put 'cy5jbG9uZU92ZXJsYXkuY3JlYXRlVGFibGUodGhpcy5nZXRUYWJsZURhbygpLGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1kLnZpZXdwb3J0LHRoaXMuc2VsZWN0aW9ucz1kLnNlbGVjdGlvbnMsdGhpcy53dEV2ZW50PW5ldyBWdGUoaCx0aGlz'@;
put 'LmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25zLGQuZXZlbnQpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfX1jbGFzcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpeyhmdW5jdGlvbiBDQWUoYyxsLGEp'@;
put 'e3JldHVybiBsPWZ1bmN0aW9uIFNBZShjKXt2YXIgbD1mdW5jdGlvbiBNQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10'@;
put 'eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLGZoKHRoaXMsIndvdCIsbCx7d3Jp'@;
put 'dGFibGU6ITF9KSx0aGlzLmRvbUJpbmRpbmdzPWYsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aDtjb25zdHtUQUJMRTpfLGhpZGVyOlQsc3ByZWFkZXI6Vyxob2xkZXI6aWUsd3RSb290RWxlbWVudDpnZX09dGhpcy53b3Qud3RUYWJsZTt0aGlzLmluc3RhbmNlPXRoaXMu'@;
put 'd290LHRoaXMudHlwZT1kLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9bnVsbCx0aGlzLlRBQkxFPV8sdGhpcy5oaWRlcj1ULHRoaXMuc3ByZWFkZXI9Vyx0aGlzLmhvbGRlcj1pZSx0aGlzLnd0Um9vdEVsZW1lbnQ9Z2UsdGhpcy50cmltbWluZ0NvbnRhaW5lcj12Zyh0aGlzLmhp'@;
put 'ZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSksdGhpcy51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCksdGhpcy5jbG9uZT10aGlzLm1ha2VDbG9uZSgpfXVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXtjb25zdCBsPXRoaXMubmVlZEZ1bGxSZW5kZXI7dGhpcy5uZWVkRnVsbFJlbmRlcj10aGlzLnNo'@;
put 'b3VsZEJlUmVuZGVyZWQoKTtjb25zdCBhPWwhPT10aGlzLm5lZWRGdWxsUmVuZGVyO3JldHVybiBhJiYhdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5yZXNldCgpLGF9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiEwfXVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCl7dGhpcy50cmltbWluZ0Nv'@;
put 'bnRhaW5lcj12Zyh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9'@;
put 'ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXI6cnkobC5UQUJMRSl9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb24obCxhLGQpe2lmKCExPT09dGhp'@;
put 'cy5jbG9uZS53dFRhYmxlLmhvbGRlci5jb250YWlucyhsKSlyZXR1cm4gdm9pZCBHYShgVGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgdGhlICR7dGhpcy50eXBlfSBvdmVybGF5YCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5k'@;
put 'b21CaW5kaW5ncy5yb290V2luZG93LGY9ZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxfPWE8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFQ9YT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIp'@;
put 'LXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxXPXRoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlcixpZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24oVyksdG9wOlcub2Zmc2V0VG9wfSxnZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0'@;
put 'YXJ0UG9zaXRpb24obCksdG9wOmwub2Zmc2V0VG9wfTtsZXQgd2U9bnVsbDtyZXR1cm4gd2U9aD90aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KF8sZixnZSxpZSk6dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcihfLFQsZixnZSxpZSksd2V9'@;
put 'Z2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpe3JldHVybiB0aGlzLmlzUnRsKCk/bC5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGgtbC5vZmZzZXRMZWZ0LWwub2Zmc2V0V2lkdGg6bC5vZmZzZXRMZWZ0fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KGwsYSxkLGgpe2NvbnN0'@;
put 'IGY9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBfPTAsVD0wO2lmKGEpe2xldCBXPWYubGVmdDt0aGlzLmlzUnRsKCkmJihXPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdy5pbm5lcldpZHRoLShmLmxlZnQrZi53aWR0aCtJYygp'@;
put 'KSksXz1XPD0wPy0xKlc6MH1lbHNlIF89aC5zdGFydDtyZXR1cm4gVD1sP3RoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtZi50b3A6aC50b3Ase3N0YXJ0OmQuc3RhcnQrXyx0b3A6ZC50b3ArVH19Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRo'@;
put 'aW5Ib2xkZXIobCxhLGQsaCxmKXtjb25zdCBfX2hvcml6b250YWw9dGhpcy53b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxfX3ZlcnRpY2FsPXRoaXMud290Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO2xldCBU'@;
put 'PTAsVz0wO2lmKGR8fChUPV9faG9yaXpvbnRhbC1mLnN0YXJ0KSxhKXtjb25zdCBpZT10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Vz0tMSp0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK2ll'@;
put 'LnRvcH1lbHNlIGx8fChXPV9fdmVydGljYWwtZi50b3ApO3JldHVybntzdGFydDpoLnN0YXJ0LVQsdG9wOmgudG9wLVd9fW1ha2VDbG9uZSgpe2lmKC0xPT09WWtlLmluZGV4T2YodGhpcy50eXBlKSl0aHJvdyBuZXcgRXJyb3IoYENsb25lIHR5cGUgIiR7dGhpcy50eXBlfSIgaXMgbm90IHN1'@;
put 'cHBvcnRlZC5gKTtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290RG9jdW1lbnQ6YSxyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD1hLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGY9YS5jcmVhdGVFbGVtZW50KCJUQUJMRSIpLF89bC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7'@;
put 'aC5jbGFzc05hbWU9YCR7V2tlLmdldCh0aGlzLnR5cGUpfSBoYW5kc29udGFibGVgLGguc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGwoKT8icnRsIjoibHRyIiksaC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGguc3R5bGUudG9wPTAsaC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIs'@;
put 'dGhpcy5pc1J0bCgpP2guc3R5bGUucmlnaHQ9MDpoLnN0eWxlLmxlZnQ9MCxmLmNsYXNzTmFtZT1sLlRBQkxFLmNsYXNzTmFtZSxoLmFwcGVuZENoaWxkKGYpLF8uYXBwZW5kQ2hpbGQoaCk7Y29uc3QgVD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7cmV0'@;
put 'dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ITA9PT1UfHwiaG9yaXpvbnRhbCI9PT1UJiZ0aGlzLnR5cGU9PT15Z3x8InZlcnRpY2FsIj09PVQmJnRoaXMudHlwZT09PXdnP2Q6ImhpZGRlbiI9PT1kLmdldENvbXB1dGVkU3R5bGUoXykuZ2V0UHJvcGVydHlWYWx1ZSgib3Zl'@;
put 'cmZsb3ciKT9sLmhvbGRlcjpyeShsLlRBQkxFKSxuZXcgd0FlKGYsdGhpcy53dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qsb3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMud290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53b3Qud3RFdmVudCxzZWxlY3Rpb25zOnRoaXMud290LnNlbGVjdGlv'@;
put 'bnN9KX1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBhPXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpO3RoaXMuY2xvbmUmJih0aGlzLm5lZWRGdWxsUmVuZGVyfHxhKSYmdGhpcy5jbG9uZS5kcmF3KGwp'@;
put 'LHRoaXMubmVlZEZ1bGxSZW5kZXI9YX1yZXNldCgpe2lmKCF0aGlzLmNsb25lKXJldHVybjtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXI7RG4oW2wuc3R5bGUsdGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLGwucGFyZW50Tm9kZS5zdHlsZV0sXz0+e18ud2lkdGg9IiIs'@;
put 'Xy5oZWlnaHQ9IiJ9KX1pc1J0bCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpfWRlc3Ryb3koKXt0aGlzLmNsb25lLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWNsYXNzIEFBZSBleHRlbmRzIHB5e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSx5'@;
put 'ZyxkLGgpLGZ1bmN0aW9uIHhBZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gRUFlKGMpe3ZhciBsPWZ1bmN0aW9uIGtBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk'@;
put 'PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi'@;
put 'c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJv'@;
put 'd3NUb3AiLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTty'@;
put 'ZXR1cm4gbmV3IEprZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLndvdC53dFRhYmxlLmhv'@;
put 'bGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGg9MCxmPSExO2lm'@;
put 'KHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1hfHxkJiYidmVydGljYWwiPT09ZCloPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxzeShsKTtlbHNle2NvbnN0e3d0VGFibGU6VH09dGhpcy53b3QsVz1ULmhpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Y9TWF0aC5jZWlsKFcuYm90dG9t'@;
put 'KT09PWwub2Zmc2V0SGVpZ2h0LGg9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksb2sobCwiMHB4IixgJHtofXB4YCl9Y29uc3QgXz10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihoLGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLF99c2V0U2Nyb2xsUG9zaXRpb24o'@;
put 'bCl7Y29uc3QgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c7bGV0IGQ9ITE7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1hJiZhLnNjcm9sbFkhPT1sPyhhLnNjcm9sbFRvKG1nKGEpLGwpLGQ9ITApOnRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQu'@;
put 'c2Nyb2xsVG9wIT09bCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPWwsZD0hMCksZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNl'@;
put 'dHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTspe2NvbnN0IF89dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoaCk7Zis9dm9pZCAwPT09Xz9kOl8saCs9MX1yZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8bCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6'@;
put 'ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290RG9jdW1lbnQ6YSxyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD1JYyhhKSxfPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxUPXRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09ZHx8Imhvcml6b250YWwiPT09VCl7bGV0IGllPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKTt0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJh'@;
put 'clJpZ2h0JiYoaWUtPWgpLGllPU1hdGgubWluKGllLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksXy53aWR0aD1gJHtpZX1weGB9ZWxzZSBfLndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9Xy53aWR0aDtsZXQgVz1hbCh0aGlzLmNsb25lLnd0VGFi'@;
put 'bGUuVEFCTEUpO3RoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KFc9MCksXy5oZWlnaHQ9YCR7V31weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe3ZhciBsO2NvbnN0e2hvbGRlcjphfT10aGlzLmNsb25lLnd0VGFibGUse3NlbGVjdGlvbnM6ZH09dGhpcy53b3QsaD10aGlz'@;
put 'LmZhY2FkZUdldHRlcigpLGY9TWF0aC5hYnMobnVsbCE9PShsPWQ/LmdldENlbGwoKS5nZXRCb3JkZXIoaCkuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQpJiZ2b2lkIDAhPT1sP2w6MCk7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRoaXMuaGlkZXIuc3R5bGUud2lkdGgs'@;
put 'YS5zdHlsZS53aWR0aD1hLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsYS5zdHlsZS5oZWlnaHQ9YCR7cGFyc2VJbnQoYS5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCwxMCkrZn1weGB9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lm'@;
put 'KCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtp'@;
put 'ZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3Zlcmxh'@;
put 'eU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxlW2xdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3Vs'@;
put 'YXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtjb25zdHt3b3Q6ZCx3dFNldHRpbmdzOmh9PXRoaXMsXz0oZC5jbG9uZVNvdXJjZT9kLmNsb25lU291cmNlOmQp'@;
put 'Lnd0VGFibGUuaG9sZGVyO2xldCBUPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxXPTA7aWYoYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpJiYoYT0hMSksYSYmXy5vZmZzZXRIZWlnaHQhPT1fLmNs'@;
put 'aWVudEhlaWdodCYmKFc9SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhKXtjb25zdCBpZT1oLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGdlPWguZ2V0U2V0dGluZygidG90YWxSb3dzIik7VCs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLFQtPWQud3RWaWV3cG9y'@;
put 'dC5nZXRWaWV3cG9ydEhlaWdodCgpLXRoaXMuc3VtQ2VsbFNpemVzKGdlLWllLGdlKSxUKz0xfWVsc2UgVCs9dGhpcy5zdW1DZWxsU2l6ZXMoaC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsKTtyZXR1cm4gVCs9Vyx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKFQpfWdldFRhYmxlUGFyZW50'@;
put 'T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbnkodGhpcy5tYWluVGFibGVTY3JvbGxh'@;
put 'YmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1t'@;
put 'aW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2NvbnN0IF89dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpO2Q9TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFi'@;
put 'bGVQYXJlbnRPZmZzZXQoKSwwKSxkPl8mJihkPTApfXJldHVybiBkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIu'@;
put 'cGFyZW50Tm9kZTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik/V28oZCwiZW1wdHlDb2x1bW5zIik6cGkoZCwiZW1wdHlDb2x1bW5zIik7bGV0IGY9ITE7aWYoIWEpe2NvbnN0IF89dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFQ9'@;
put 'dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3AhPT1fLFc9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtpZigoVHx8MD09PV8pJiZXLmxlbmd0aD4wKXtjb25zdCBpZT1CbyhkLCJpbm5lckJvcmRlclRvcCIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPXRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsfHwwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhwaShkLCJpbm5lckJvcmRlclRvcCIpLGY9IWllKTooV28oZCwiaW5uZXJCb3JkZXJUb3AiKSxmPWllKX19cmV0dXJuIGZ9fWNvbnN0IFh0ZT17'@;
put 'Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGE9Yy1sO3JldHVybiAwPT09Y3x8MD09PWw/LTE6YTwwPzA6YX0sZ2V0Rmlyc3RW'@;
put 'aXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVk'@;
put 'Um93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7Y29uc3QgYz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxjKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgp'@;
put 'e3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9fTtmaChYdGUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzQm90dG9tIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IEp0ZT1YdGU7Y2xhc3MgV04gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBl'@;
put 'cihsLGEsZCxoLGdoKX19VGEoV04sSnRlKSxUYShXTixOTik7Y29uc3QgREFlPVdOO2NsYXNzIE9BZSBleHRlbmRzIHB5e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxnaCxkLGgpLGZ1bmN0aW9uIElBZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gTEFlKGMpe3ZhciBsPWZ1bmN0'@;
put 'aW9uIFJBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NCb3R0b20iLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0'@;
put 'dGluZygiZml4ZWRSb3dzQm90dG9tIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IERBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5k'@;
put 'b21CaW5kaW5ncyxhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTthLnN0eWxlLnRvcD0iIjtsZXQgZD0wO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3RoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxoJiYidmVydGlj'@;
put 'YWwiPT09aD8oZD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpKTooZD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxhLnN0eWxlLmJvdHRvbT1gJHtkfXB4YCk7Y29uc3QgZj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihkKTtyZXR1cm4g'@;
put 'dGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxmfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBm'@;
put 'PTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1JYyhkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9c2V0U2Nyb2xs'@;
put 'UG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2xldCBkPSExO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09YT8oYS5zY3JvbGxUbyhtZyhhKSxsKSxkPSEwKTp0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9s'@;
put 'bFRvcCE9PWwmJih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcD1sLGQ9ITApLGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxIb3Jpem9udGFsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdHt3dFRhYmxlOmQsd3RTZXR0'@;
put 'aW5nczpofT10aGlzLndvdCxmPWguZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpO2xldCBfPWwsVD0wO2Zvcig7XzxhOyl7Y29uc3QgVz1kLmdldFJvd0hlaWdodChfKTtUKz12b2lkIDA9PT1XP2Y6VyxfKz0xfXJldHVybiBUfWFkanVzdEVsZW1lbnRzU2l6ZSgpe2xldCBsPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCh0aGlzLm5lZWRGdWxsUmVuZGVyfHxsKSYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXpl'@;
put 'KCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3MsZj1JYyhkKSxUPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHls'@;
put 'ZSxXPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8Imhvcml6b250YWwiPT09Vyl7bGV0IGdlPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTt0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJhclJpZ2h0'@;
put 'JiYoZ2UtPWYpLGdlPU1hdGgubWluKGdlLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksVC53aWR0aD1gJHtnZX1weGB9ZWxzZSBULndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9VC53aWR0aDtsZXQgaWU9YWwodGhpcy5jbG9uZS53dFRhYmxlLlRB'@;
put 'QkxFKTt0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChpZT0wKSxULmhlaWdodD1gJHtpZX1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGU7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRo'@;
put 'aXMuaGlkZXIuc3R5bGUud2lkdGgsbC5zdHlsZS53aWR0aD1sLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYo'@;
put 'Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lm'@;
put 'KDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5'@;
put 'T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxh'@;
put 'dG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2xldCBkPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtjb25zdCBmPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90'@;
put 'aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXI7bGV0IF89MDthJiZmLm9mZnNldEhlaWdodCE9PWYuY2xpZW50SGVpZ2h0JiYoXz1JYyh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGE/KGQrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxkLT10aGlz'@;
put 'LndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCksZCs9MSk6ZCs9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGwpLGQrPV8sdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihkKX1nZXRUYWJsZVBhcmVudE9mZnNldCgp'@;
put 'e3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIG55KHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1l'@;
put 'bnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRh'@;
put 'aW5lcj09PWwmJighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCBoPXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSxfPWgtdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksVD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xp'@;
put 'ZW50SGVpZ2h0O2Q9TWF0aC5tYXgodGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS1UK2gsMCksZD5fJiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu'@;
put 'ZygiZml4ZWRSb3dzQm90dG9tIiksZD10aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbSE9PWEsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2xldCBmPSExO2lmKChkfHwwPT09YSkmJmgubGVuZ3RoPjApe2NvbnN0IF89dGhpcy53b3Qud3RUYWJsZS5ob2xk'@;
put 'ZXIucGFyZW50Tm9kZSxUPUJvKF8sImlubmVyQm9yZGVyQm90dG9tIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGx8fDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KHBp'@;
put 'KF8sImlubmVyQm9yZGVyQm90dG9tIiksZj0hVCk6KFdvKF8sImlubmVyQm9yZGVyQm90dG9tIiksZj1UKX1yZXR1cm4gZn19Y29uc3QgUXRlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09'@;
put 'PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dSZW5kZXJlZDty'@;
put 'ZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRS'@;
put 'b3dzUmVuZGVyZWR9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1Zpc2libGV9fTtmaChRdGUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkUm93cyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBlbmU9UXRlLHRu'@;
put 'ZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiAwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPy0xOjB9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFzdFJlbmRlcmVk'@;
put 'Q29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNl'@;
put 'dHRpbmcoInRvdGFsQ29sdW1ucyIpO3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxjKX0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl9fTtmaCh0bmUsIk1J'@;
put 'WElOX05BTUUiLCJzdGlja3lDb2x1bW5zU3RhcnQiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgR049dG5lO2NsYXNzICROIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCx3Zyl9fVRhKCROLGVuZSksVGEoJE4sR04pO2NvbnN0IEhBZT0k'@;
put 'TjtjbGFzcyBOQWUgZXh0ZW5kcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsd2csZCxoKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgSEFlKC4u'@;
put 'LmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Q7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCFs'@;
put 'LmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZj0wO3RoaXMu'@;
put 'dHJpbW1pbmdDb250YWluZXIhPT1hfHxoJiYiaG9yaXpvbnRhbCI9PT1oPyhmPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxzeShkKSk6KGY9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSxvayhkLGAke2Z9cHhgLCIwcHgiKSk7Y29uc3QgXz10aGlzLmFkanVz'@;
put 'dEhlYWRlckJvcmRlcnNQb3NpdGlvbihmKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxffXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztsZXQgZD0hMTtyZXR1cm4gdGhpcy5pc1J0bCgpJiYobD0tbCksdGhpcy5tYWlu'@;
put 'VGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWEmJmEuc2Nyb2xsWCE9PWw/KGEuc2Nyb2xsVG8obCx0NyhhKSksZD0hMCk6dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0IT09bCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdD1sLGQ9'@;
put 'ITApLGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxWZXJ0aWNhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KWYr'@;
put 'PXRoaXMud290Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoaCl8fGQsaCs9MTtyZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdD'@;
put 'b250YWluZXIoKSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8bCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290RG9jdW1lbnQ6YSxy'@;
put 'b290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD1JYyhhKSxfPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxUPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09ZHx8InZl'@;
put 'cnRpY2FsIj09PVQpe2xldCBpZT10aGlzLndvdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpO3RoaXMud290Lnd0T3ZlcmxheXMuaGFzU2Nyb2xsYmFyQm90dG9tJiYoaWUtPWgpLGllPU1hdGgubWluKGllLGwud3RSb290RWxlbWVudC5zY3JvbGxIZWlnaHQpLF8uaGVpZ2h0PWAk'@;
put 'e2llfXB4YH1lbHNlIF8uaGVpZ2h0PSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUuaGVpZ2h0PV8uaGVpZ2h0O2NvbnN0IFc9d2EodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtfLndpZHRoPWAke1d9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXt2YXIgbDtjb25zdHto'@;
put 'b2xkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlLHtzZWxlY3Rpb25zOmR9PXRoaXMud290LGg9dGhpcy5mYWNhZGVHZXR0ZXIoKSxmPU1hdGguYWJzKG51bGwhPT0obD1kPy5nZXRDZWxsKCkuZ2V0Qm9yZGVyKGgpLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0KSYmdm9pZCAwIT09bD9sOjApO3Ro'@;
put 'aXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS5oZWlnaHQ9dGhpcy5oaWRlci5zdHlsZS5oZWlnaHQsYS5zdHlsZS5oZWlnaHQ9YS5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCxhLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGEucGFyZW50Tm9kZS5zdHlsZS53aWR0aCwxMCkrZn1weGB9YXBw'@;
put 'bHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGE9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0'@;
put 'aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGVbYV09YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSBjb2x1bW5zUmVuZGVyQ2FsY3Vs'@;
put 'YXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGVbYV09IjAifXRoaXMuaXNSdGwoKT90aGlzLnNwcmVhZGVyLnN0eWxlLmxlZnQ9IiI6dGhpcy5zcHJlYWRlci5zdHlsZS5yaWdodD0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZz'@;
put 'ZXQoKXt0aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIuc3R5bGUudG9wPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQ'@;
put 'b3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtsZXQgZD10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCk7Y29uc3QgZj0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCBfPTA7cmV0dXJuIGEmJnRoaXMud290'@;
put 'Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkmJihhPSExKSxhJiZmLm9mZnNldFdpZHRoIT09Zi5jbGllbnRXaWR0aCYmKF89SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhkKz10aGlzLnN1bUNlbGxT'@;
put 'aXplcygwLGwrMSksZC09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkpOmQrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGwpLGQrPV8sdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihkKX1nZXRUYWJs'@;
put 'ZVBhcmVudE9mZnNldCgpe2xldCBhPTA7cmV0dXJuIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSYmdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyYmKGE9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQu'@;
put 'bGVmdCksYX1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBNYXRoLmFicyhpayh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3Ms'@;
put 'YT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtyZXR1cm4gdGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGEmJiJob3Jpem9udGFsIj09PWF8fChkPXRoaXMuaXNSdGwoKT9NYXRoLmFicyhNYXRoLm1pbih0aGlzLmdldFRhYmxlUGFyZW50'@;
put 'T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLDApKTpNYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFs'@;
put 'V2lkdGgoKSYmKGQ9MCkpLGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi'@;
put 'Zml4ZWRDb2x1bW5zU3RhcnQiKTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/V28oYSwiZW1wdHlSb3dzIik6cGkoYSwiZW1wdHlSb3dzIik7bGV0IF89ITE7aWYoaCYmIWQubGVuZ3RoKXBpKGEsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0'@;
put 'Iik7ZWxzZSBpZighaCYmZC5sZW5ndGgpe2NvbnN0IFQ9Qm8oYSwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2w/KHBpKGEsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksXz0hVCk6KFdvKGEsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0'@;
put 'IiksXz1UKX1yZXR1cm4gX319Y2xhc3MgcU4gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLENnKX19VGEocU4sWXRlKSxUYShxTixHTik7Y29uc3QgVkFlPXFOO2Z1bmN0aW9uIG5uZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gQkFlKGMpe3ZhciBsPWZ1'@;
put 'bmN0aW9uIGpBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHpBZSBleHRlbmRzIHB5e2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfKXtzdXBlcihsLGEsQ2csZCxoKSxubmUodGhpcywidG9wT3Zl'@;
put 'cmxheSIsdm9pZCAwKSxubmUodGhpcywiaW5saW5lU3RhcnRPdmVybGF5Iix2b2lkIDApLHRoaXMudG9wT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PV99Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylh'@;
put 'W2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IFZBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVT'@;
put 'dGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7dGhpcy50'@;
put 'cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz9vayhsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpKyJweCIsYCR7dGhpcy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKX1weGApOnN5'@;
put 'KGwpO2xldCBhPWFsKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgZD13YSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChhPTApLGwuc3R5bGUuaGVpZ2h0PWAke2F9cHhgLGwuc3R5bGUud2lkdGg9YCR7'@;
put 'ZH1weGAsITF9fWNsYXNzIEtOIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxacCl9fVRhKEtOLEp0ZSksVGEoS04sR04pO2NvbnN0IFVBZT1LTjtjbGFzcyBaQWUgZXh0ZW5kcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIobCxhLFpwLGQs'@;
put 'aCksdGhpcy5ib3R0b21PdmVybGF5PWYsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9X31jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgVUFlKC4uLmEpfXNob3VsZEJl'@;
put 'UmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3dv'@;
put 'dDpsfT10aGlzO2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhbC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2lmKGEuc3R5bGUudG9wPSIiLHRoaXMudHJpbW1pbmdDb250YWlu'@;
put 'ZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpe2NvbnN0IGY9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpLF89dGhpcy5ib3R0b21PdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTthLnN0eWxlW3RoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7'@;
put 'Zn1weGAsYS5zdHlsZS5ib3R0b209YCR7X31weGB9ZWxzZSBzeShhKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCk7bGV0IGQ9YWwodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBoPXdhKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFz'@;
put 'RGVmaW5lZFNpemUoKXx8KGQ9MCksYS5zdHlsZS5oZWlnaHQ9YCR7ZH1weGAsYS5zdHlsZS53aWR0aD1gJHtofXB4YCwhMX1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxo'@;
put 'PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYo'@;
put 'Zis9SWMoZCkpLGguc3R5bGUuYm90dG9tPWAke2Z9cHhgfX1mdW5jdGlvbiBaZihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gWUFlKGMpe3ZhciBsPWZ1bmN0aW9uIFdBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt'@;
put 'aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci'@;
put 'PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfWZ1bmN0aW9uIHJuZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gcUFlKGMpe3ZhciBsPWZ1bmN0aW9uIEtBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk'@;
put 'PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi'@;
put 'c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFhBZXtjb25zdHJ1Y3Rv'@;
put 'cihsKXtybmUodGhpcywic2V0dGluZ3MiLHt9KSxybmUodGhpcywiZGVmYXVsdHMiLE9iamVjdC5mcmVlemUodGhpcy5nZXREZWZhdWx0cygpKSksZHModGhpcy5kZWZhdWx0cywoYSxkKT0+e2lmKHZvaWQgMCE9PWxbZF0pdGhpcy5zZXR0aW5nc1tkXT1sW2RdO2Vsc2V7aWYodm9pZCAwPT09'@;
put 'YSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWlyZWQgc2V0dGluZyAiJHtkfSIgd2FzIG5vdCBwcm92aWRlZGApO3RoaXMuc2V0dGluZ3NbZF09YX19KX1nZXREZWZhdWx0cygpe3JldHVybntmYWNhZGU6dm9pZCAwLHRhYmxlOnZvaWQgMCxpc0RhdGFWaWV3SW5zdGFuY2U6ITAsZXh0ZXJuYWxS'@;
put 'b3dDYWxjdWxhdG9yOiExLHN0cmV0Y2hIOiJub25lIixjdXJyZW50Um93Q2xhc3NOYW1lOm51bGwsY3VycmVudENvbHVtbkNsYXNzTmFtZTpudWxsLHByZXZlbnRPdmVyZmxvdzooKT0+ITEscHJldmVudFdoZWVsOiExLGRhdGE6dm9pZCAwLGZyZWV6ZU92ZXJsYXlzOiExLGZpeGVkQ29sdW1u'@;
put 'c1N0YXJ0OjAsZml4ZWRSb3dzVG9wOjAsZml4ZWRSb3dzQm90dG9tOjAsc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik+MHx8dGhpcy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVu'@;
put 'ZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKT4wfHx0aGlzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpPjAsbWlu'@;
put 'U3BhcmVSb3dzOjAscm93SGVhZGVyczooKT0+W10sY29sdW1uSGVhZGVyczooKT0+W10sdG90YWxSb3dzOnZvaWQgMCx0b3RhbENvbHVtbnM6dm9pZCAwLGNlbGxSZW5kZXJlcjoobCxhLGQpPT57anAoZCx0aGlzLmdldFNldHRpbmcoImRhdGEiLGwsYSk/PyIiKX0sY29sdW1uV2lkdGgoKXt9'@;
put 'LHJvd0hlaWdodCgpe30sZGVmYXVsdFJvd0hlaWdodDoyMyxkZWZhdWx0Q29sdW1uV2lkdGg6NTAsc2VsZWN0aW9uczpudWxsLGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6ITEsdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVy'@;
put 'cmlkZTpudWxsLG9uQ2VsbE1vdXNlRG93bjpudWxsLG9uQ2VsbENvbnRleHRNZW51Om51bGwsb25DZWxsTW91c2VPdmVyOm51bGwsb25DZWxsTW91c2VPdXQ6bnVsbCxvbkNlbGxNb3VzZVVwOm51bGwsb25DZWxsRGJsQ2xpY2s6bnVsbCxvbkNlbGxDb3JuZXJNb3VzZURvd246bnVsbCxvbkNl'@;
put 'bGxDb3JuZXJEYmxDbGljazpudWxsLGJlZm9yZURyYXc6bnVsbCxvbkRyYXc6bnVsbCxvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOm51bGwsb25BZnRlckRyYXdTZWxlY3Rpb246bnVsbCxvbkJlZm9yZURyYXdCb3JkZXJzOm51bGwsb25TY3JvbGxWZXJ0aWNhbGx5Om51bGwsb25TY3Jv'@;
put 'bGxIb3Jpem9udGFsbHk6bnVsbCxvbkJlZm9yZVRvdWNoU2Nyb2xsOm51bGwsb25BZnRlck1vbWVudHVtU2Nyb2xsOm51bGwsb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6bD0+bCxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGwsb25C'@;
put 'ZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6bD0+bCxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjpsPT5sLG9uV2luZG93UmVzaXplOm51bGwsb25Db250YWluZXJFbGVtZW50UmVzaXplOm51bGwscmVuZGVyQWxsUm93czohMSxncm91cHM6ITEscm93SGVhZGVyV2lkdGg6bnVs'@;
put 'bCxjb2x1bW5IZWFkZXJIZWlnaHQ6bnVsbCxoZWFkZXJDbGFzc05hbWU6bnVsbCxydGxNb2RlOiExfX11cGRhdGUobCxhKXtyZXR1cm4gdm9pZCAwPT09YT9kcyhsLChkLGgpPT57dGhpcy5zZXR0aW5nc1toXT1kfSk6dGhpcy5zZXR0aW5nc1tsXT1hLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxo'@;
put 'LGYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzW2xdP3RoaXMuc2V0dGluZ3NbbF0oYSxkLGgsZik6dm9pZCAwIT09YSYmQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzW2xdKT90aGlzLnNldHRpbmdzW2xdW2FdOnRoaXMuc2V0dGluZ3NbbF19Z2V0U2V0dGluZ1B1'@;
put 'cmUobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NbbF19aGFzKGwpe3JldHVybiEhdGhpcy5zZXR0aW5nc1tsXX19Y2xhc3MgWE4gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLCJtYXN0ZXIiKX1hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl7'@;
put 'Y29uc3QgbD12Zyh0aGlzLnd0Um9vdEVsZW1lbnQpLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7aWYobD09PWEpdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpfHwodGhpcy5ob2xkZXIuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMud3RS'@;
put 'b290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIpO2Vsc2V7Y29uc3QgZD1sLnBhcmVudEVsZW1lbnQsaD1uNyhsLCJoZWlnaHQiLGEpLGY9bjcobCwib3ZlcmZsb3ciLGEpLF89dGhpcy5ob2xkZXIuc3R5bGUse3Njcm9sbFdpZHRoOlQsc2Nyb2xsSGVpZ2h0Old9PWw7bGV0e3dp'@;
put 'ZHRoOmllLGhlaWdodDpnZX09bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihkJiZbImF1dG8iLCJoaWRkZW4iLCJzY3JvbGwiXS5pbmNsdWRlcyhmKSl7Y29uc3QgRWU9bC5jbG9uZU5vZGUoITEpO0VlLnN0eWxlLm92ZXJmbG93PSJhdXRvIixFZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1'@;
put 'dGUiLGwubmV4dEVsZW1lbnRTaWJsaW5nP2QuaW5zZXJ0QmVmb3JlKEVlLGwubmV4dEVsZW1lbnRTaWJsaW5nKTpkLmFwcGVuZENoaWxkKEVlKTtjb25zdCBaZT1wYXJzZUludCh6cChFZSxhKS5oZWlnaHQsMTApO2QucmVtb3ZlQ2hpbGQoRWUpLDA9PT1aZSYmKGdlPTApfWdlPU1hdGgubWlu'@;
put 'KGdlLFcpLF8uaGVpZ2h0PSJhdXRvIj09PWg/ImF1dG8iOmAke2dlfXB4YCxpZT1NYXRoLm1pbihpZSxUKSxfLndpZHRoPWAke2llfXB4YCxfLm92ZXJmbG93PSIiLHRoaXMuaGFzVGFibGVIZWlnaHQ9ImF1dG8iPT09Xy5oZWlnaHR8fGdlPjAsdGhpcy5oYXNUYWJsZVdpZHRoPWllPjB9dGhp'@;
put 'cy5pc1RhYmxlVmlzaWJsZT1lNyh0aGlzLlRBQkxFKX1tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZD0ibWFzdGVyIixmPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIp'@;
put 'Lmxlbmd0aDtpZihmJiYhYS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW2RdKXtjb25zdCBUPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxXPXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IGllPTA7aWU8ZjtpZSsrKWZvcihsZXQgZ2U9LTEq'@;
put 'VDtnZTxXO2dlKyspdGhpcy5tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIoZ2UpO2EuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXT0hMH19fVRhKFhOLGVuZSksVGEoWE4sTk4pO2NvbnN0IEpBZT1YTjtGKDUxMDEpO2NvbnN0IGluZT1uZXcgV2Vha01hcDtjbGFzcyBKTntz'@;
put 'dGF0aWMgZ2V0IERFRkFVTFRfSEVJR0hUKCl7cmV0dXJuIDIzfWNvbnN0cnVjdG9yKCl7bGV0e3ZpZXdwb3J0U2l6ZTpsLHNjcm9sbE9mZnNldDphLHRvdGFsSXRlbXM6ZCxpdGVtU2l6ZUZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTpfLHNjcm9sbGJhckhlaWdodDpUfT1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307aW5lLnNldCh0aGlzLHt2aWV3cG9ydEhlaWdodDpsLHNjcm9sbE9mZnNldDphLHRvdGFsUm93czpkLHJvd0hlaWdodEZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTpfLGhvcml6b250'@;
put 'YWxTY3JvbGxiYXJIZWlnaHQ6VH0pLHRoaXMuY291bnQ9MCx0aGlzLnN0YXJ0Um93PW51bGwsdGhpcy5lbmRSb3c9bnVsbCx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9ITEsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXtjb25z'@;
put 'dCBsPWluZS5nZXQodGhpcyksYT1sLmNhbGN1bGF0aW9uVHlwZSxkPWwub3ZlcnJpZGVGbixoPWwucm93SGVpZ2h0Rm4sZj1sLnNjcm9sbE9mZnNldCxfPU1hdGgubWF4KGwuc2Nyb2xsT2Zmc2V0LDApLFQ9bC50b3RhbFJvd3MsVz1sLnZpZXdwb3J0SGVpZ2h0LGllPWwuaG9yaXpvbnRhbFNj'@;
put 'cm9sbGJhckhlaWdodHx8MDtsZXQgZ2U9MCx3ZT0hMDtjb25zdCBFZT1bXTtsZXQgWmUsb3Q9MCxldD0wO2ZvcihsZXQgUXQ9MDtRdDxUO1F0KyspaWYoWmU9aChRdCksaXNOYU4oWmUpJiYoWmU9Sk4uREVGQVVMVF9IRUlHSFQpLGdlPD1fJiYyIT09YSYmKHRoaXMuc3RhcnRSb3c9UXQsb3Q9'@;
put 'WmUpLGdlPj1fJiZnZSsoMj09PWE/WmU6MCk8PV8rVy1pZSYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1RdCxvdD1aZSksdGhpcy5lbmRSb3c9UXQpLEVlLnB1c2goZ2UpLGdlKz1aZSxldD1aZSwyIT09YSYmKHRoaXMuZW5kUm93PVF0KSxnZT49XytXLWllKXt3ZT0h'@;
put 'MTticmVha31jb25zdCBTdD0yPT09YT8wOmV0O2lmKHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGYrVy1pZTwoMj09PWE/b3Q6MCl8fGY+RWUuYXQoLTEpK1N0KSx0aGlzLmVuZFJvdz09PVQtMSYmd2UpZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFy'@;
put 'dFJvdz4wOyl7Y29uc3QgUXQ9RWVbdGhpcy5lbmRSb3ddK1plLUVlW3RoaXMuc3RhcnRSb3ctMV07aWYoKFF0PD1XLWllfHwyIT09YSkmJih0aGlzLnN0YXJ0Um93LT0xKSxRdD49Vy1pZSlicmVha30xPT09YSYmbnVsbCE9PXRoaXMuc3RhcnRSb3cmJmQmJmQodGhpcyksdGhpcy5zdGFydFBv'@;
put 'c2l0aW9uPUVlW3RoaXMuc3RhcnRSb3ddLHZvaWQgMD09PXRoaXMuc3RhcnRQb3NpdGlvbiYmKHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsKSxUPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9VC0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5z'@;
put 'dGFydFJvdysxKX19Y29uc3Qgb25lPUpOLGQ3PW5ldyBXZWFrTWFwO2NsYXNzIFFOe3N0YXRpYyBnZXQgREVGQVVMVF9XSURUSCgpe3JldHVybiA1MH1jb25zdHJ1Y3Rvcigpe2xldHt2aWV3cG9ydFNpemU6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbEl0ZW1zOmQsaXRlbVNpemVGbjpoLG92ZXJy'@;
put 'aWRlRm46ZixjYWxjdWxhdGlvblR5cGU6XyxzdHJldGNoTW9kZTpULHN0cmV0Y2hpbmdJdGVtV2lkdGhGbjpXPShnZT0+Z2UpLGlubGluZVN0YXJ0T2Zmc2V0OmllfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZDcuc2V0KHRoaXMs'@;
put 'e3ZpZXdwb3J0V2lkdGg6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbENvbHVtbnM6ZCxjb2x1bW5XaWR0aEZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTpfLHN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuOlcsaW5saW5lU3RhcnRPZmZzZXQ6aWV9KSx0aGlzLmNvdW50PTAsdGhpcy5zdGFy'@;
put 'dENvbHVtbj1udWxsLHRoaXMuZW5kQ29sdW1uPW51bGwsdGhpcy5zdGFydFBvc2l0aW9uPW51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSExLHRoaXMuc3RyZXRjaEFsbFJhdGlvPTAsdGhpcy5zdHJldGNoTGFzdFdpZHRoPTAsdGhpcy5zdHJldGNoPVQsdGhpcy50b3Rh'@;
put 'bFRhcmdldFdpZHRoPTAsdGhpcy5uZWVkVmVyaWZ5TGFzdENvbHVtbldpZHRoPSEwLHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aD1bXSx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe2xldCBsPTAsYT0hMDtjb25zdCBkPVtdO2xldCBoLGY9MCxfPTA7Y29uc3QgVD1kNy5nZXQodGhp'@;
put 'cyksVz1ULmNhbGN1bGF0aW9uVHlwZSxpZT1ULm92ZXJyaWRlRm4sZ2U9VC5zY3JvbGxPZmZzZXQsd2U9TWF0aC5tYXgoVC5zY3JvbGxPZmZzZXQsMCksRWU9VC50b3RhbENvbHVtbnMsWmU9VC52aWV3cG9ydFdpZHRoLG90PXdlPjA/WmUrMTpaZTtmb3IobGV0IFN0PTA7U3Q8RWU7U3QrKylp'@;
put 'ZihoPXRoaXMuX2dldENvbHVtbldpZHRoKFN0KSxsPD13ZSYmMiE9PVcmJih0aGlzLnN0YXJ0Q29sdW1uPVN0LGY9aCksbD49d2UmJmwrKDI9PT1XP2g6MCk8PXdlK290JiYobnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49U3QsZj1oKSx0aGlzLmVuZENvbHVtbj1T'@;
put 'dCksZC5wdXNoKGwpLGwrPWgsXz1oLDIhPT1XJiYodGhpcy5lbmRDb2x1bW49U3QpLGw+PXdlK1plKXthPSExO2JyZWFrfWNvbnN0IHl0PTI9PT1XPzA6XyxrdD0yPT09Vz9mOjA7aWYodGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoZ2UrWmUtb3Q8LTEqVC5pbmxpbmVTdGFy'@;
put 'dE9mZnNldHx8Z2U+ZC5hdCgtMSkreXR8fC0xKlQuc2Nyb2xsT2Zmc2V0LVQudmlld3BvcnRXaWR0aD4tMSprdCksdGhpcy5lbmRDb2x1bW49PT1FZS0xJiZhKWZvcih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IFN0PWRbdGhpcy5l'@;
put 'bmRDb2x1bW5dK2gtZFt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKChTdDw9WmV8fDIhPT1XKSYmKHRoaXMuc3RhcnRDb2x1bW4tPTEpLFN0PlplKWJyZWFrfTE9PT1XJiZudWxsIT09dGhpcy5zdGFydENvbHVtbiYmaWUmJmllKHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbj1kW3RoaXMuc3RhcnRD'@;
put 'b2x1bW5dLHZvaWQgMD09PXRoaXMuc3RhcnRQb3NpdGlvbiYmKHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsKSxFZTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPUVlLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0'@;
put 'Q29sdW1uKzEpfXJlZnJlc2hTdHJldGNoaW5nKGwpe2lmKCJub25lIj09PXRoaXMuc3RyZXRjaClyZXR1cm47bGV0IGE9bDt0aGlzLnRvdGFsVGFyZ2V0V2lkdGg9YTtjb25zdCBkPWQ3LmdldCh0aGlzKSxoPWQudG90YWxDb2x1bW5zO2xldCBmPTA7Zm9yKGxldCBUPTA7VDxoO1QrKyl7Y29u'@;
put 'c3QgVz10aGlzLl9nZXRDb2x1bW5XaWR0aChUKSxpZT1kLnN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuKHZvaWQgMCxUKTsibnVtYmVyIj09dHlwZW9mIGllP2EtPWllOmYrPVd9Y29uc3QgXz1hLWY7aWYoImFsbCI9PT10aGlzLnN0cmV0Y2gmJl8+MCl0aGlzLnN0cmV0Y2hBbGxSYXRpbz1hL2Ys'@;
put 'dGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoPVtdLHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMDtlbHNlIGlmKCJsYXN0Ij09PXRoaXMuc3RyZXRjaCYmYSE9PTEvMCl7Y29uc3QgVD10aGlzLl9nZXRDb2x1bW5XaWR0aChoLTEpLFc9XytUO3RoaXMuc3RyZXRjaExhc3RXaWR0'@;
put 'aD1XPj0wP1c6VH19Z2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCxhKXtsZXQgZD1udWxsO3JldHVybiJhbGwiPT09dGhpcy5zdHJldGNoJiYwIT09dGhpcy5zdHJldGNoQWxsUmF0aW8/ZD10aGlzLl9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aChsLGEpOiJsYXN0Ij09PXRoaXMuc3RyZXRj'@;
put 'aCYmMCE9PXRoaXMuc3RyZXRjaExhc3RXaWR0aCYmKGQ9dGhpcy5fZ2V0U3RyZXRjaGVkTGFzdENvbHVtbldpZHRoKGwpKSxkfV9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aChsLGEpe2xldCBkPTA7Y29uc3QgaD1kNy5nZXQodGhpcyksZj1oLnRvdGFsQ29sdW1ucztpZighdGhpcy5zdHJl'@;
put 'dGNoQWxsQ29sdW1uc1dpZHRoW2xdKXtjb25zdCBfPU1hdGgucm91bmQoYSp0aGlzLnN0cmV0Y2hBbGxSYXRpbyksVD1oLnN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuKF8sbCk7dGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2xdPXZvaWQgMD09PVQ/Xzppc05hTihUKT90aGlzLl9nZXRDb2x1'@;
put 'bW5XaWR0aChsKTpUfWlmKHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5sZW5ndGg9PT1mJiZ0aGlzLm5lZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGgpe3RoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMTtmb3IobGV0IF89MDtfPHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5s'@;
put 'ZW5ndGg7XysrKWQrPXRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFtfXTtkIT09dGhpcy50b3RhbFRhcmdldFdpZHRoJiYodGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW3RoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5sZW5ndGgtMV0rPXRoaXMudG90YWxUYXJnZXRXaWR0aC1kKX1y'@;
put 'ZXR1cm4gdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2xdfV9nZXRTdHJldGNoZWRMYXN0Q29sdW1uV2lkdGgobCl7cmV0dXJuIGw9PT1kNy5nZXQodGhpcykudG90YWxDb2x1bW5zLTE/dGhpcy5zdHJldGNoTGFzdFdpZHRoOm51bGx9X2dldENvbHVtbldpZHRoKGwpe2xldCBhPWQ3Lmdl'@;
put 'dCh0aGlzKS5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKSYmKGE9UU4uREVGQVVMVF9XSURUSCksYX19Y29uc3QgZVY9UU47Y2xhc3MgdFRlIGV4dGVuZHMgWU57Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG5ldyBYQWUoYSkpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNl'@;
put 'dHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy53dFRhYmxlPW5ldyBKQWUodGhpcy5nZXRUYWJsZURhbygpLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1uZXcgY2xhc3MgUUFle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5kYXRhQWNjZXNz'@;
put 'T2JqZWN0PWwsdGhpcy53b3Q9bC53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy53dFNldHRpbmdzPWQsdGhpcy53dFRhYmxlPWYsdGhpcy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJz'@;
put 'aXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLmNvbnRhaW5lcldpZHRoPU5hTix0aGlzLnJvd0hlYWRlcldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhp'@;
put 'cy5ldmVudE1hbmFnZXI9aCx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdywicmVzaXplIiwoKT0+e3RoaXMuY2xpZW50SGVpZ2h0PXRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9KX1nZXRXb3Jrc3BhY2VIZWlnaHQoKXtjb25z'@;
put 'dCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXI7bGV0IGQ9MDtyZXR1cm4gZD1hPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ6YWwo'@;
put 'YSk+MCYmYS5jbGllbnRIZWlnaHQ+MD9hLmNsaWVudEhlaWdodDoxLzAsZH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7cm9vdERvY3VtZW50OmEscm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyLGY9YS5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgsXz1sLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLFQ9bC5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSxXPWwuZ2V0U2V0dGluZygicnRsTW9kZSIpLGllPXRoaXMud3RU'@;
put 'YWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx3ZT1mLShXP2llLnJpZ2h0LWY6aWUubGVmdCk7bGV0IEVlLFplO2lmKFQpcmV0dXJuIHdhKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50KTtpZihFZT1sLmdldFNldHRpbmcoImZyZWV6ZU92ZXJsYXlzIik/TWF0aC5taW4od2Us'@;
put 'Zik6TWF0aC5taW4odGhpcy5nZXRDb250YWluZXJGaWxsV2lkdGgoKSx3ZSxmKSxoPT09ZCYmXz4wJiZ0aGlzLnN1bUNvbHVtbldpZHRocygwLF8tMSk+RWUpcmV0dXJuIGEuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2lmKGghPT1kJiYoWmU9bjcodGhpcy5kYXRhQWNjZXNzT2JqZWN0'@;
put 'LmlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyLCJvdmVyZmxvdyIsZCksInNjcm9sbCI9PT1aZXx8ImhpZGRlbiI9PT1aZXx8ImF1dG8iPT09WmUpKXJldHVybiBNYXRoLm1heChFZSxoLmNsaWVudFdpZHRoKTtjb25zdCBvdD1sLmdldFNldHRpbmcoInN0cmV0Y2hIIik7cmV0'@;
put 'dXJuIm5vbmUiIT09b3QmJm90P0VlOk1hdGgubWF4KEVlLHdhKHRoaXMud3RUYWJsZS5UQUJMRSkpfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7cmV0dXJuIHRoaXMud3RUYWJsZS5oaWRlci5vZmZzZXRIZWlnaHQ+dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX1oYXNIb3Jpem9udGFsU2Nyb2xsKCl7'@;
put 'cmV0dXJuIHRoaXMud3RUYWJsZS5oaWRlci5vZmZzZXRXaWR0aD50aGlzLmdldFdvcmtzcGFjZVdpZHRoKCl9c3VtQ29sdW1uV2lkdGhzKGwsYSl7bGV0IGQ9MCxoPWw7Zm9yKDtoPGE7KWQrPXRoaXMud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChoKSxoKz0xO3JldHVybiBkfWdldENvbnRhaW5l'@;
put 'ckZpbGxXaWR0aCgpe2lmKHRoaXMuY29udGFpbmVyV2lkdGgpcmV0dXJuIHRoaXMuY29udGFpbmVyV2lkdGg7Y29uc3QgbD10aGlzLnd0VGFibGUuaG9sZGVyLGE9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zdHlsZS53aWR0aD0iMTAwJSIs'@;
put 'YS5zdHlsZS5oZWlnaHQ9IjFweCIsbC5hcHBlbmRDaGlsZChhKTtjb25zdCBkPWEub2Zmc2V0V2lkdGg7cmV0dXJuIHRoaXMuY29udGFpbmVyV2lkdGg9ZCxsLnJlbW92ZUNoaWxkKGEpLGR9Z2V0V29ya3NwYWNlT2Zmc2V0KCl7cmV0dXJuIHFsKHRoaXMud3RUYWJsZS5UQUJMRSl9Z2V0Q29s'@;
put 'dW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoP2lzTmFOKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0KSYmKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0PWFsKHRoaXMud3RUYWJsZS5USEVBRCkpOnRoaXMuY29s'@;
put 'dW1uSGVhZGVySGVpZ2h0PTAsdGhpcy5jb2x1bW5IZWFkZXJIZWlnaHR9Z2V0Vmlld3BvcnRIZWlnaHQoKXtsZXQgbD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpO2lmKGw9PT0xLzApcmV0dXJuIGw7Y29uc3QgYT10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpO3JldHVybiBhPjAmJihs'@;
put 'LT1hKSxsfWdldFJvd0hlYWRlcldpZHRoKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKSxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIik7aWYobCl7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgZD0wLGg9'@;
put 'YS5sZW5ndGg7ZDxoO2QrKyl0aGlzLnJvd0hlYWRlcldpZHRoKz1sW2RdfHxsfWlmKGlzTmFOKHRoaXMucm93SGVhZGVyV2lkdGgpKWlmKGEubGVuZ3RoKXtsZXQgZD10aGlzLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvcigiVEgiKTt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKGxldCBo'@;
put 'PTAsZj1hLmxlbmd0aDtoPGY7aCsrKWQ/KHRoaXMucm93SGVhZGVyV2lkdGgrPXdhKGQpLGQ9ZC5uZXh0U2libGluZyk6dGhpcy5yb3dIZWFkZXJXaWR0aCs9NTB9ZWxzZSB0aGlzLnJvd0hlYWRlcldpZHRoPTA7cmV0dXJuIHRoaXMucm93SGVhZGVyV2lkdGg9dGhpcy53dFNldHRpbmdzLmdl'@;
put 'dFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLHRoaXMucm93SGVhZGVyV2lkdGgpfHx0aGlzLnJvd0hlYWRlcldpZHRoLHRoaXMucm93SGVhZGVyV2lkdGh9Z2V0Vmlld3BvcnRXaWR0aCgpe2NvbnN0IGw9dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpO2lmKGw9PT0xLzApcmV0dXJu'@;
put 'IGw7Y29uc3QgYT10aGlzLmdldFJvd0hlYWRlcldpZHRoKCk7cmV0dXJuIGE+MD9sLWE6bH1jcmVhdGVSb3dzQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxl'@;
put 'OmR9PXRoaXM7bGV0IGgsZixfO3RoaXMucm93SGVhZGVyV2lkdGg9TmFOLGg9YS5nZXRTZXR0aW5nKCJyZW5kZXJBbGxSb3dzIikmJjE9PT1sPzEvMDp0aGlzLmdldFZpZXdwb3J0SGVpZ2h0KCk7bGV0IFQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFNjcm9sbFBvc2l0aW9uLXRoaXMuZGF0'@;
put 'YUFjY2Vzc09iamVjdC50b3BQYXJlbnRPZmZzZXQ7Y29uc3QgVz1hLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGllPWEuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksZ2U9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gVyYmVD49MCYmKF89dGhpcy5kYXRhQWNjZXNz'@;
put 'T2JqZWN0LnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsVyksVCs9XyxoLT1fKSxpZSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuY2xvbmUmJihfPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LnN1bUNlbGxTaXplcyhnZS1pZSxnZSksaC09XyksZj1k'@;
put 'LmhvbGRlci5jbGllbnRIZWlnaHQ9PT1kLmhvbGRlci5vZmZzZXRIZWlnaHQ/MDpJYyh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCksbmV3IG9uZSh7dmlld3BvcnRTaXplOmgsc2Nyb2xsT2Zmc2V0OlQsdG90YWxJdGVtczphLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGl0ZW1TaXpl'@;
put 'Rm46d2U9PmQuZ2V0Um93SGVpZ2h0KHdlKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiksY2FsY3VsYXRpb25UeXBlOmwsc2Nyb2xsYmFySGVpZ2h0OmZ9KX1jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxlOmR9PXRoaXM7bGV0IGg9dGhpcy5nZXRWaWV3cG9ydFdpZHRoKCksZj1NYXRoLmFicyh0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRTY3JvbGxQ'@;
put 'b3NpdGlvbiktdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0O3RoaXMuY29sdW1uSGVhZGVySGVpZ2h0PU5hTjtjb25zdCBfPWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZihfJiZmPj0wKXtjb25zdCBUPXRoaXMuZGF0YUFjY2Vzc09iamVj'@;
put 'dC5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsXyk7Zis9VCxoLT1UfXJldHVybiBkLmhvbGRlci5jbGllbnRXaWR0aCE9PWQuaG9sZGVyLm9mZnNldFdpZHRoJiYoaC09SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxuZXcgZVYoe3ZpZXdwb3J0U2l6ZTpoLHNj'@;
put 'cm9sbE9mZnNldDpmLHRvdGFsSXRlbXM6YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxpdGVtU2l6ZUZuOlQ9PmQuZ2V0Q29sdW1uV2lkdGgoVCksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIpLGNhbGN1bGF0aW9uVHlw'@;
put 'ZTpsLHN0cmV0Y2hNb2RlOmEuZ2V0U2V0dGluZygic3RyZXRjaEgiKSxzdHJldGNoaW5nSXRlbVdpZHRoRm46KFQsVyk9PmEuZ2V0U2V0dGluZygib25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLFQsVyksaW5saW5lU3RhcnRPZmZzZXQ6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGlu'@;
put 'ZVN0YXJ0UGFyZW50T2Zmc2V0fSl9Y3JlYXRlUmVuZGVyQ2FsY3VsYXRvcnMoKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKGEpe2NvbnN0IGQ9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigyKSxoPXRoaXMuY3JlYXRl'@;
put 'Q29sdW1uc0NhbGN1bGF0b3IoMik7dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGQpJiZ0aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQoaCl8fChhPSExKX1yZXR1cm4gYXx8KHRoaXMucm93c1JlbmRlckNhbGN1bGF0'@;
put 'b3I9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigxKSx0aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoMSkpLHRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCxhfWNy'@;
put 'ZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpe3RoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoMiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigyKX1hcmVBbGxQcm9wb3NlZFZpc2libGVS'@;
put 'b3dzQWxyZWFkeVJlbmRlcmVkKGwpe2lmKCF0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcilyZXR1cm4hMTtjb25zdHtzdGFydFJvdzphLGVuZFJvdzpkLGlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI6aH09bDtpZihudWxsPT09YSYmbnVsbD09PWQpcmV0dXJuIWg7Y29uc3R7c3RhcnRS'@;
put 'b3c6ZixlbmRSb3c6X309dGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcjtyZXR1cm4hKGE8Znx8YT09PWYmJmE+MHx8ZD5ffHxkPT09XyYmZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSl9YXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJl'@;
put 'ZChsKXtpZighdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7Y29uc3R7c3RhcnRDb2x1bW46YSxlbmRDb2x1bW46ZCxpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyOmh9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXJldHVybiFoO2NvbnN0e3N0YXJ0Q29sdW1uOmYs'@;
put 'ZW5kQ29sdW1uOl99PXRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I7cmV0dXJuIShhPGZ8fGE9PT1mJiZhPjB8fGQ+X3x8ZD09PV8mJmQ8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEpfXJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgp'@;
put 'e2RzKHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCwobCxhLGQpPT57ZFthXT12b2lkIDB9KX19KHRoaXMuZ2V0Vmlld3BvcnREYW8oKSx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuc2VsZWN0'@;
put 'aW9ucz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2VsZWN0aW9ucyIpLHRoaXMud3RFdmVudD1uZXcgVnRlKGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9ucyksdGhpcy53dE92ZXJsYXlz'@;
put 'PW5ldyBjbGFzcyBHQWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe1pmKHRoaXMsIndvdCIsbnVsbCksWmYodGhpcywidG9wT3ZlcmxheSIsbnVsbCksWmYodGhpcywiYm90dG9tT3ZlcmxheSIsbnVsbCksWmYodGhpcywiaW5saW5lU3RhcnRPdmVybGF5IixudWxsKSxaZih0aGlzLCJ0b3BJ'@;
put 'bmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLFpmKHRoaXMsImJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCksWmYodGhpcywiYnJvd3NlckxpbmVIZWlnaHQiLHZvaWQgMCksWmYodGhpcywid3RTZXR0aW5ncyIsbnVsbCksWmYodGhpcywicmVzaXplT2JzZXJ2ZXIi'@;
put 'LG5ldyBSZXNpemVPYnNlcnZlcihnZT0+e3lrKCgpPT57IUFycmF5LmlzQXJyYXkoZ2UpfHwhZ2UubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Db250YWluZXJFbGVtZW50UmVzaXplIil9KX0pKSx0aGlzLndvdD1sLHRoaXMud3RTZXR0aW5ncz1oLHRoaXMuZG9tQmlu'@;
put 'ZGluZ3M9ZCx0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RUYWJsZT1fO2NvbnN0e3Jvb3REb2N1bWVudDpULHJvb3RXaW5kb3c6V309dGhpcy5kb21CaW5kaW5nczt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMuZXZlbnRNYW5hZ2VyPWYsdGhpcy5zY3JvbGxiYXJTaXplPUljKFQpO2Nv'@;
put 'bnN0IGllPSJoaWRkZW4iPT09Vy5nZXRDb21wdXRlZFN0eWxlKF8ud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9aWU/Xy5ob2xkZXI6cnkoXy5UQUJMRSksdGhpcy5pbml0T3ZlcmxheXMoKSx0aGlz'@;
put 'Lmhhc1Njcm9sbGJhckJvdHRvbT0hMSx0aGlzLmhhc1Njcm9sbGJhclJpZ2h0PSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMua2V5UHJlc3NlZD0hMSx0aGlzLnNwcmVhZGVyTGFzdFNpemU9e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5o'@;
put 'b3Jpem9udGFsU2Nyb2xsaW5nPSExLHRoaXMuaW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHRoaXMubGFzdFNjcm9sbFg9Vy5zY3JvbGxYLHRoaXMubGFzdFNjcm9sbFk9Vy5zY3JvbGxZfWdldE92ZXJsYXlzKCl7Y29uc3QgYT1bdGhpcy50b3BPdmVy'@;
put 'bGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'JiZhcmd1bWVudHNbMF0mJmEucHVzaCh0aGlzLnd0VGFibGUpLGF9aW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3REb2N1bWVudDphfT10aGlzLmRvbUJpbmRpbmdzLGQ9bC5nZXRDb21wdXRlZFN0eWxlKGEuYm9keSksaD1wYXJzZUludChkLmxpbmVIZWln'@;
put 'aHQsMTApLGY9MS4yKnBhcnNlSW50KGQuZm9udFNpemUsMTApO3RoaXMuYnJvd3NlckxpbmVIZWlnaHQ9aHx8Zn1pbml0T3ZlcmxheXMoKXtjb25zdCBsPVt0aGlzLndvdCx0aGlzLmZhY2FkZUdldHRlcix0aGlzLnd0U2V0dGluZ3MsdGhpcy5kb21CaW5kaW5nc107dGhpcy50b3BPdmVybGF5'@;
put 'PW5ldyBBQWUoLi4ubCksdGhpcy5ib3R0b21PdmVybGF5PW5ldyBPQWUoLi4ubCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9bmV3IE5BZSguLi5sKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgekFlKC4uLmwsdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRP'@;
put 'dmVybGF5KSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgWkFlKC4uLmwsdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KX11cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl7bGV0IGw9dGhpcy50b3BPdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5k'@;
put 'ZXJpbmcoKTtyZXR1cm4gbD10aGlzLmJvdHRvbU92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsLGw9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy50'@;
put 'b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYobD10aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl8fGwpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKGw9dGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXku'@;
put 'dXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsKSksbH1yZWZyZXNoQWxsKCl7aWYodGhpcy53b3QuZHJhd24pe2lmKCF0aGlzLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuIHZvaWQgdGhpcy5kZXN0cm95KCk7dGhpcy53b3QuZHJhdyghMCksdGhpcy52ZXJ0aWNhbFNjcm9sbGlu'@;
put 'ZyYmdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcmJnRoaXMudG9wT3ZlcmxheS5vblNjcm9sbCgpLHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExfX1yZWdpc3Rlckxpc3RlbmVycygp'@;
put 'e2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6ZH09dGhpcy50b3BPdmVybGF5LHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpofT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheTt0aGlzLmV2ZW50'@;
put 'TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXlkb3duIix3ZT0+dGhpcy5vbktleURvd24od2UpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXl1cCIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2'@;
put 'ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsInZpc2liaWxpdHljaGFuZ2UiLCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkLCJzY3JvbGwiLHdlPT50aGlzLm9uVGFibGVTY3JvbGwod2UpLHtwYXNzaXZlOiEwfSksZCE9PWgmJnRo'@;
put 'aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwic2Nyb2xsIix3ZT0+dGhpcy5vblRhYmxlU2Nyb2xsKHdlKSx7cGFzc2l2ZTohMH0pO2NvbnN0IGY9YS5kZXZpY2VQaXhlbFJhdGlvJiZhLmRldmljZVBpeGVsUmF0aW8+MSxfPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1hLFQ9'@;
put 'dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRXaGVlbCIpLFc9e3Bhc3NpdmU6X307bGV0IGdlOyhUfHxmfHwhX04oKSkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQsIndoZWVsIix3ZT0+dGhpcy5vbkNsb25l'@;
put 'V2hlZWwod2UsVCksVyksW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLmZvckVhY2god2U9PntpZih3ZSYm'@;
put 'd2UubmVlZEZ1bGxSZW5kZXIpe2NvbnN0e2hvbGRlcjpFZX09d2UuY2xvbmUud3RUYWJsZTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKEVlLCJ3aGVlbCIsWmU9PnRoaXMub25DbG9uZVdoZWVsKFplLFQpLFcpfX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu'@;
put 'ZXIoYSwicmVzaXplIiwoKT0+e2NsZWFyVGltZW91dChnZSksZ2U9c2V0VGltZW91dCgoKT0+e3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbldpbmRvd1Jlc2l6ZSIpfSwyMDApfSksX3x8dGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50'@;
put 'LnBhcmVudEVsZW1lbnQpfWRlcmVnaXN0ZXJMaXN0ZW5lcnMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhckV2ZW50cyghMCl9b25UYWJsZVNjcm9sbChsKXtjb25zdCBhPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxkPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9s'@;
put 'bGFibGVFbGVtZW50LGg9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9bC50YXJnZXQ7dGhpcy5rZXlQcmVzc2VkJiYoaCE9PWEmJmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoaCl8fGQhPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGQpKXx8dGhp'@;
put 'cy5zeW5jU2Nyb2xsUG9zaXRpb25zKGwpfW9uQ2xvbmVXaGVlbChsLGEpe2NvbnN0e3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9s'@;
put 'bGFibGVFbGVtZW50LF89bC50YXJnZXQsVD1mIT09ZCYmXyE9PWQmJiFfLmNvbnRhaW5zKGYpLFc9aCE9PWQmJl8hPT1kJiYhXy5jb250YWlucyhoKTtpZih0aGlzLmtleVByZXNzZWQmJihUfHxXKSlyZXR1cm47Y29uc3QgaWU9dGhpcy50cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCk7'@;
put 'KGF8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQhPT1kJiZpZSkmJmwucHJldmVudERlZmF1bHQoKX1vbktleURvd24obCl7dGhpcy5rZXlQcmVzc2VkPW83KGwua2V5Q29kZSwiQVJST1dfVVB8QVJST1dfUklHSFR8QVJST1dfRE9XTnxBUlJPV19MRUZUIil9b25LZXlVcCgpe3RoaXMua2V5UHJl'@;
put 'c3NlZD0hMX10cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCl7bGV0IGE9aXNOYU4obC5kZWx0YVkpPy0xKmwud2hlZWxEZWx0YVk6bC5kZWx0YVksZD1pc05hTihsLmRlbHRhWCk/LTEqbC53aGVlbERlbHRhWDpsLmRlbHRhWDsxPT09bC5kZWx0YU1vZGUmJihkKz1kKnRoaXMuYnJvd3Nl'@;
put 'ckxpbmVIZWlnaHQsYSs9YSp0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0KTtjb25zdCBoPXRoaXMuc2Nyb2xsVmVydGljYWxseShhKSxmPXRoaXMuc2Nyb2xsSG9yaXpvbnRhbGx5KGQpO3JldHVybiBofHxmfXNjcm9sbFZlcnRpY2FsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVFbGVtZW50'@;
put 'LnNjcm9sbFRvcDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3ArPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wfXNjcm9sbEhvcml6b250YWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdDtyZXR1cm4gdGhp'@;
put 'cy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Kz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnR9c3luY1Njcm9sbFBvc2l0aW9ucygpe2lmKHRoaXMuZGVzdHJveWVkKXJldHVybjtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnRv'@;
put 'cE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIsZD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcixbaCxmXT1bdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0LHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wXTtpZih0aGlzLmhvcml6'@;
put 'b250YWxTY3JvbGxpbmc9YS5zY3JvbGxMZWZ0IT09aHx8dGhpcy5sYXN0U2Nyb2xsWCE9PWwuc2Nyb2xsWCx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPWQuc2Nyb2xsVG9wIT09Znx8dGhpcy5sYXN0U2Nyb2xsWSE9PWwuc2Nyb2xsWSx0aGlzLmxhc3RTY3JvbGxYPWwuc2Nyb2xsWCx0aGlzLmxh'@;
put 'c3RTY3JvbGxZPWwuc2Nyb2xsWSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpe2Euc2Nyb2xsTGVmdD1oO2NvbnN0IF89dGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyP3RoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjpudWxsO18mJihfLnNjcm9sbExlZnQ9'@;
put 'aCl9dGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmKGQuc2Nyb2xsVG9wPWYpLHRoaXMucmVmcmVzaEFsbCgpfXN5bmNTY3JvbGxXaXRoTWFzdGVyKCl7Y29uc3QgbD10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQse3Njcm9sbExlZnQ6YSxzY3JvbGxUb3A6ZH09bDt0'@;
put 'aGlzLnRvcE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD1hKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xs'@;
put 'TGVmdD1hKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcD1kKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl7dGhpcy5kZXJlZ2lzdGVyTGlzdGVuZXJzKCks'@;
put 'dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy50b3BPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmdGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZU1haW5T'@;
put 'Y3JvbGxhYmxlRWxlbWVudCgpO2NvbnN0e3d0VGFibGU6bH09dGhpcyx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5'@;
put 'VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6cnkobC5UQUJMRSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpfWRlc3Ryb3koKXt0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy50b3BPdmVybGF5LmRlc3Ryb3koKSx0aGlz'@;
put 'LmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZGVzdHJveSgpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhp'@;
put 'cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5kZXN0cm95ZWQ9ITB9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCkmJnRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkucmVmcmVzaChsKSx0aGlz'@;
put 'LmlubGluZVN0YXJ0T3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJP'@;
put 'dmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKX11cGRhdGVMYXN0U3ByZWFkZXJTaXplKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuc3ByZWFkZXIsYT1sLmNsaWVudFdp'@;
put 'ZHRoLGQ9bC5jbGllbnRIZWlnaHQsaD1hIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRofHxkIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodDtyZXR1cm4gaCYmKHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aD1hLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ9ZCksaH1h'@;
put 'ZGp1c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0e3d0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3d0VGFibGU6ZH09dGhpcyxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENv'@;
put 'bHVtbnMiKSxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxfPWEuZ2V0Um93SGVhZGVyV2lkdGgoKSxUPWEuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCksVz1kLmhpZGVyLnN0eWxlO2lmKFcud2lkdGg9YCR7Xyt0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxs'@;
put 'U2l6ZXMoMCxoKX1weGAsVy5oZWlnaHQ9YCR7VCt0aGlzLnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsZikrMX1weGAsdGhpcy5zY3JvbGxiYXJTaXplPjApe2NvbnN0e3Njcm9sbEhlaWdodDppZSxzY3JvbGxXaWR0aDpnZX09ZC53dFJvb3RFbGVtZW50LHtzY3JvbGxIZWlnaHQ6d2Usc2Ny'@;
put 'b2xsV2lkdGg6RWV9PWQuaG9sZGVyO3RoaXMuaGFzU2Nyb2xsYmFyUmlnaHQ9aWU8d2UsdGhpcy5oYXNTY3JvbGxiYXJCb3R0b209Z2U8RWUsdGhpcy5oYXNTY3JvbGxiYXJSaWdodCYmZC5oaWRlci5zY3JvbGxXaWR0aCt0aGlzLnNjcm9sbGJhclNpemU+Z2U/dGhpcy5oYXNTY3JvbGxiYXJC'@;
put 'b3R0b209ITA6dGhpcy5oYXNTY3JvbGxiYXJCb3R0b20mJmQuaGlkZXIuc2Nyb2xsSGVpZ2h0K3RoaXMuc2Nyb2xsYmFyU2l6ZT5pZSYmKHRoaXMuaGFzU2Nyb2xsYmFyUmlnaHQ9ITApfXRoaXMudG9wT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUobCksdGhpcy5pbmxpbmVTdGFydE92ZXJs'@;
put 'YXkuYWRqdXN0RWxlbWVudHNTaXplKGwpLHRoaXMuYm90dG9tT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUobCl9YXBwbHlUb0RPTSgpe3RoaXMud3RUYWJsZS5pc1Zpc2libGUoKSYmKHRoaXMudG9wT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlz'@;
put 'LmJvdHRvbU92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFwcGx5VG9ET00oKSl9Z2V0UGFyZW50T3ZlcmxheShsKXtpZighbClyZXR1cm4gbnVsbDtsZXQgZD1udWxsO3JldHVybiBEbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5'@;
put 'LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0saD0+e2gmJmguY2xvbmUmJmguY2xvbmUud3RUYWJsZS5UQUJMRS5jb250YWlucyhsKSYmKGQ9aC5jbG9uZSl9KSxkfXN5bmNPdmVy'@;
put 'bGF5VGFibGVDbGFzc05hbWVzKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuVEFCTEU7RG4oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFy'@;
put 'dENvcm5lck92ZXJsYXldLGQ9PntkJiYoZC5jbG9uZS53dFRhYmxlLlRBQkxFLmNsYXNzTmFtZT1sLmNsYXNzTmFtZSl9KX19KHRoaXMsZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuZXhwb3J0U2V0dGluZ3NB'@;
put 'c0NsYXNzTmFtZXMoKSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe2NvbnN0IGE9W10sZD1bXTtkcyh7cm93SGVhZGVyczoiaHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaCxmKT0+e3RoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKGYpLmxlbmd0aCYmZC5wdXNoKGgpLGEucHVzaChoKX0pLFdvKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsYSkscGkodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxkKX1nZXRWaWV3cG9ydERhbygpe2NvbnN0IGw9'@;
put 'dGhpcztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgdG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4g'@;
put 'bC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IHRvcFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCB0b3BQYXJlbnRPZmZzZXQoKXtyZXR1cm4gbC53dE92ZXJs'@;
put 'YXlzLnRvcE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IGlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgaW5saW5lU3RhcnRQYXJlbnRPZmZzZXQoKXtyZXR1'@;
put 'cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRP'@;
put 'dmVybGF5fSxnZXQgYm90dG9tT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheX19fX1jbGFzcyB0Vntjb25zdHJ1Y3RvcihsKXtsIGluc3RhbmNlb2YgWU4/dGhpcy5fd290PWw6dGhpcy5faW5pdEZyb21TZXR0aW5ncyhsKX1faW5pdEZyb21TZXR0aW5ncyhsKXts'@;
put 'LmZhY2FkZT1hPT57Y29uc3QgZD1uZXcgdFYoYSk7cmV0dXJuKCk9PmR9LHRoaXMuX3dvdD1uZXcgdFRlKGwudGFibGUsbCl9Z2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5fd290Lmd1aWR9Z2V0IHJvb3REb2N1bWVudCgpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50'@;
put 'fWdldCByb290V2luZG93KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290V2luZG93fWdldCB3dFNldHRpbmdzKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzfWdldCBjbG9uZVNvdXJjZSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVTb3VyY2V9Z2V0IGNsb25lT3Zlcmxh'@;
put 'eSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5fWdldCBzZWxlY3Rpb25zKCl7cmV0dXJuIHRoaXMuX3dvdC5zZWxlY3Rpb25zfWdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX3dvdC53dFZpZXdwb3J0fWdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIHRoaXMuX3dvdC53dE92ZXJs'@;
put 'YXlzfWdldCB3dFRhYmxlKCl7cmV0dXJuIHRoaXMuX3dvdC53dFRhYmxlfWdldCB3dEV2ZW50KCl7cmV0dXJuIHRoaXMuX3dvdC53dEV2ZW50fWdldCB3dFNjcm9sbCgpe3JldHVybiB0aGlzLl93b3Qud3RTY3JvbGx9Z2V0IGRyYXduKCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3bn1zZXQgZHJh'@;
put 'd24obCl7dGhpcy5fd290LmRyYXduPWx9Z2V0IGRyYXdJbnRlcnJ1cHRlZCgpe3JldHVybiB0aGlzLl93b3QuZHJhd0ludGVycnVwdGVkfXNldCBkcmF3SW50ZXJydXB0ZWQobCl7dGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZD1sfWdldCBsYXN0TW91c2VPdmVyKCl7cmV0dXJuIHRoaXMuX3dv'@;
put 'dC5sYXN0TW91c2VPdmVyfXNldCBsYXN0TW91c2VPdmVyKGwpe3RoaXMuX3dvdC5sYXN0TW91c2VPdmVyPWx9Z2V0IG1vbWVudHVtU2Nyb2xsaW5nKCl7cmV0dXJuIHRoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZ31zZXQgbW9tZW50dW1TY3JvbGxpbmcobCl7dGhpcy5fd290Lm1vbWVudHVt'@;
put 'U2Nyb2xsaW5nPWx9Z2V0IHRvdWNoQXBwbGllZCgpe3JldHVybiB0aGlzLl93b3QudG91Y2hBcHBsaWVkfXNldCB0b3VjaEFwcGxpZWQobCl7dGhpcy5fd290LnRvdWNoQXBwbGllZD1sfWdldCBkb21CaW5kaW5ncygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3N9Z2V0IGV2ZW50TGlz'@;
put 'dGVuZXJzKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudExpc3RlbmVyc31zZXQgZXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fd290LmV2ZW50TGlzdGVuZXJzPWx9Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiB0aGlzLl93b3QuZXZlbnRNYW5hZ2VyfWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1'@;
put 'cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxDb29yZHMobCxhKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbFJhbmdlKGwsYSxkKX1kcmF3KCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzBdJiZhcmd1bWVudHNbMF0pLHRoaXN9Z2V0Q2VsbChsKXtyZXR1cm4gdGhpcy5fd290LmdldENlbGwobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zY3JvbGxWaWV3cG9ydChsLGEsZCxoLGYpe3JldHVybiB0aGlzLl93b3Quc2Ny'@;
put 'b2xsVmlld3BvcnQobCxhLGQsaCxmKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZp'@;
put 'ZXdwb3J0VmVydGljYWxseShsLGEsZCl9Z2V0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCl9Z2V0T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheT90aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5cGU6Im1hc3RlciJ9ZXhwb3J0U2V0dGlu'@;
put 'Z3NBc0NsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl9dXBkYXRlKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLnVwZGF0ZShsLGEpLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxoLGYpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0'@;
put 'aW5ncy5nZXRTZXR0aW5nKGwsYSxkLGgsZil9aGFzU2V0dGluZyhsKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyhsKX1kZXN0cm95KCl7dGhpcy5fd290LmRlc3Ryb3koKX19ZnVuY3Rpb24gc25lKGMpe2xldHtpc1NoaWZ0S2V5OmwsaXNMZWZ0Q2xpY2s6YSxpc1Jp'@;
put 'Z2h0Q2xpY2s6ZCxjb29yZHM6aCxzZWxlY3Rpb246Zixjb250cm9sbGVyOl8sY2VsbENvb3Jkc0ZhY3Rvcnk6VH09Yztjb25zdCBXPWYuaXNTZWxlY3RlZCgpP2YuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGllPWYuaXNTZWxlY3RlZEJ5Q29ybmVyKCksZ2U9Zi5pc1NlbGVj'@;
put 'dGVkQnlSb3dIZWFkZXIoKTtpZihsJiZXKWgucm93Pj0wJiZoLmNvbD49MCYmIV8uY2VsbD9mLnNldFJhbmdlRW5kKGgpOihpZXx8Z2UpJiZoLnJvdz49MCYmaC5jb2w+PTAmJiFfLmNlbGw/Zi5zZXRSYW5nZUVuZChUKGgucm93LGguY29sKSk6aWUmJmgucm93PDAmJiFfLmNvbHVtbj9mLnNl'@;
put 'dFJhbmdlRW5kKFQoVy50by5yb3csaC5jb2wpKTpnZSYmaC5jb2w8MCYmIV8ucm93P2Yuc2V0UmFuZ2VFbmQoVChoLnJvdyxXLnRvLmNvbCkpOighaWUmJiFnZSYmaC5jb2w8MHx8aWUmJmguY29sPDApJiYhXy5yb3c/Zi5zZWxlY3RSb3dzKE1hdGgubWF4KFcuZnJvbS5yb3csMCksaC5yb3cs'@;
put 'aC5jb2wpOighaWUmJiFnZSYmaC5yb3c8MHx8Z2UmJmgucm93PDApJiYhXy5jb2x1bW4mJmYuc2VsZWN0Q29sdW1ucyhNYXRoLm1heChXLmZyb20uY29sLDApLGguY29sLGgucm93KTtlbHNle2NvbnN0IHdlPSFmLmluSW5TZWxlY3Rpb24oaCksRWU9YXx8ZCYmd2U7aC5yb3c8MCYmaC5jb2w+'@;
put 'PTAmJiFfLmNvbHVtbj9FZSYmZi5zZWxlY3RDb2x1bW5zKGguY29sLGguY29sLGgucm93KTpoLmNvbDwwJiZoLnJvdz49MCYmIV8ucm93P0VlJiZmLnNlbGVjdFJvd3MoaC5yb3csaC5yb3csaC5jb2wpOmguY29sPj0wJiZoLnJvdz49MCYmIV8uY2VsbD9FZSYmZi5zZXRSYW5nZVN0YXJ0KGgp'@;
put 'OmguY29sPDAmJmgucm93PDAmJmYuc2VsZWN0QWxsKCEwLCEwKX19Y29uc3QgclRlPW5ldyBNYXAoW1sibW91c2Vkb3duIixzbmVdLFsibW91c2VvdmVyIixmdW5jdGlvbiBuVGUoYyl7bGV0e2lzTGVmdENsaWNrOmwsY29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29y'@;
put 'ZHNGYWN0b3J5OmZ9PWM7aWYoIWwpcmV0dXJuO2NvbnN0IF89ZC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxUPWQuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksVz1kLnRhYmxlUHJvcHMuY291bnRDb2xzKCksaWU9ZC50YWJsZVByb3BzLmNvdW50Um93cygpO1QmJiFoLmNvbHVtbj9kLnNl'@;
put 'dFJhbmdlRW5kKGYoaWUtMSxhLmNvbCkpOl8mJiFoLnJvdz9kLnNldFJhbmdlRW5kKGYoYS5yb3csVy0xKSk6aC5jZWxsfHxkLnNldFJhbmdlRW5kKGEpfV0sWyJ0b3VjaHN0YXJ0IixzbmVdXSk7ZnVuY3Rpb24gYW5lKGMsbCl7bGV0e2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6'@;
put 'aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1sO3JUZS5nZXQoYy50eXBlKSh7Y29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmYsaXNTaGlmdEtleTpjLnNoaWZ0S2V5LGlzTGVmdENsaWNrOmZrKGMpfHwidG91Y2hzdGFydCI9PT1jLnR5cGUsaXNSaWdo'@;
put 'dENsaWNrOlVwKGMpfSl9Y29uc3QgbG5lPW5ldyBXZWFrTWFwLG5WPVN5bWJvbCgicm9vdEluc3RhbmNlIik7ZnVuY3Rpb24gclYoYyl7cmV0dXJuIGxuZS5oYXMoYyl9ZnVuY3Rpb24gY25lKGMsbCxhKXsoZnVuY3Rpb24gc1RlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZcChjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gYVRlKGMpe3ZhciBsPWZ1bmN0aW9uIGxUZShjLGwpe2lmKCJvYmplY3Qi'@;
put 'IT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp'@;
put 'dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs'@;
put 'dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHVuZShjLGwpe3JldHVybiBmdW5jdGlvbiBjVGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLGhuZShjLGwsImdldCIpKX1mdW5jdGlvbiBk'@;
put 'bmUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiB1VGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLGhuZShj'@;
put 'LGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gaG5lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IHhnPW5ldyBXZWFrTWFwO3ZhciBpVj1u'@;
put 'ZXcgV2Vha01hcCxvVj1uZXcgV2Vha01hcDtjb25zdCBoVGU9Y2xhc3MgZFRle2NvbnN0cnVjdG9yKGwpe1lwKHRoaXMsImluc3RhbmNlIix2b2lkIDApLFlwKHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxZcCh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxZcCh0aGlzLCJUSEVBRCIsdm9p'@;
put 'ZCAwKSxZcCh0aGlzLCJUQk9EWSIsdm9pZCAwKSxZcCh0aGlzLCJfd3QiLHZvaWQgMCksWXAodGhpcywiYWN0aXZlV3QiLHZvaWQgMCksY25lKHRoaXMsaVYse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxjbmUodGhpcyxvVix7d3JpdGFibGU6ITAsdmFsdWU6MH0pLFlwKHRoaXMsInBvc3Rwb25l'@;
put 'ZEFkanVzdEVsZW1lbnRzU2l6ZSIsITEpLHRoaXMuaW5zdGFuY2U9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcy5pbnN0YW5jZSksdGhpcy5zZXR0aW5ncz10aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkseGcuc2V0KHRoaXMse3NlbGVjdGlvbk1vdXNlRG93bjohMSxtb3VzZURv'@;
put 'd246dm9pZCAwLHRhYmxlOnZvaWQgMCxsYXN0V2lkdGg6MCxsYXN0SGVpZ2h0OjB9KSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl9cmVuZGVyKCl7dGhpcy5pbnN0YW5jZS5pc1JlbmRlclN1c3BlbmRlZCgp'@;
put 'fHwodGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlciksdGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUmJih0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMSx0aGlzLmFkanVzdEVsZW1lbnRzU2l6'@;
put 'ZSghMCkpLHRoaXMuX3d0LmRyYXcoIXRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlbmRlciIsdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSExLHRoaXMuaW5zdGFu'@;
put 'Y2UucmVuZGVyQ2FsbD0hMSl9YWRqdXN0RWxlbWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLmluc3RhbmNlLmlzUmVuZGVyU3VzcGVuZGVkKCk/dGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1Np'@;
put 'emU9ITA6dGhpcy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUobCl9Z2V0Q2VsbEF0Q29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLl93dC5nZXRDZWxsKGwsYSk7cmV0dXJuIGQ8MD9udWxsOmR9c2Nyb2xsVmlld3BvcnQobCxhLGQsaCxmKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xs'@;
put 'Vmlld3BvcnQobCxhLGQsaCxmKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhLGQpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9y'@;
put 'dFZlcnRpY2FsbHkobCxhLGQpfWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3QgbD14Zy5nZXQodGhpcykse3Jvb3RFbGVtZW50OmEscm9vdERvY3VtZW50OmR9PXRoaXMuaW5zdGFuY2UsaD1hLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtoJiZhLnNldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbHN0eWxl'@;
put 'IixoKSxwaShhLCJoYW5kc29udGFibGUiKSxsLnRhYmxlPWQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKSxwaShsLnRhYmxlLCJodENvcmUiKSx0aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUmJnBpKGwudGFibGUsdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnRh'@;
put 'YmxlQ2xhc3NOYW1lKSx0aGlzLlRIRUFEPWQuY3JlYXRlRWxlbWVudCgiVEhFQUQiKSxsLnRhYmxlLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9ZC5jcmVhdGVFbGVtZW50KCJUQk9EWSIpLGwudGFibGUuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSksdGhpcy5pbnN0YW5jZS50'@;
put 'YWJsZT1sLnRhYmxlLHRoaXMuaW5zdGFuY2UuY29udGFpbmVyLmluc2VydEJlZm9yZShsLnRhYmxlLHRoaXMuaW5zdGFuY2UuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3QgbD14Zy5nZXQodGhpcykse3Jvb3RFbGVtZW50OmEscm9vdERvY3VtZW50OmQsc2Vs'@;
put 'ZWN0aW9uOmh9PXRoaXMuaW5zdGFuY2UsZj1kLmRvY3VtZW50RWxlbWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsXz0+e2lmKGwuc2VsZWN0aW9uTW91c2VEb3duPSEwLCF0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoXy50YXJnZXQpKXtj'@;
put 'b25zdHtyb290V2luZG93OlR9PXRoaXMuaW5zdGFuY2U7Zk4oVCksXy5wcmV2ZW50RGVmYXVsdCgpLFQuZm9jdXMoKX19KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLCgpPT57bC5zZWxlY3Rpb25Nb3VzZURvd249ITF9KSx0aGlzLmV2ZW50TWFuYWdl'@;
put 'ci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlbW92ZSIsXz0+e2wuc2VsZWN0aW9uTW91c2VEb3duJiYhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKF8udGFyZ2V0KSYmKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmZOKHRoaXMuaW5zdGFuY2Uucm9vdFdpbmRvdyksXy5w'@;
put 'cmV2ZW50RGVmYXVsdCgpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwia2V5dXAiLF89PntoLmlzSW5Qcm9ncmVzcygpJiYhXy5zaGlmdEtleSYmaC5maW5pc2goKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2V1cCIsXz0+e2gu'@;
put 'aXNJblByb2dyZXNzKCkmJmZrKF8pJiZoLmZpbmlzaCgpLGwubW91c2VEb3duPSExLChzayhkLmFjdGl2ZUVsZW1lbnQpfHwhaC5pc1NlbGVjdGVkKCkmJiFoLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhYS5jb250YWlucyhfLnRhcmdldCkmJiFVcChfKSkmJnRoaXMuaW5zdGFuY2UudW5s'@;
put 'aXN0ZW4oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwiY29udGV4dG1lbnUiLF89PntoLmlzSW5Qcm9ncmVzcygpJiZVcChfKSYmKGguZmluaXNoKCksbC5tb3VzZURvd249ITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJ0b3VjaGVu'@;
put 'ZCIsKCk9PntoLmlzSW5Qcm9ncmVzcygpJiZoLmZpbmlzaCgpLGwubW91c2VEb3duPSExfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZWRvd24iLF89Pntjb25zdCBUPV8udGFyZ2V0LFc9Xy54fHxfLmNsaWVudFgsaWU9Xy55fHxfLmNsaWVudFk7bGV0IGdl'@;
put 'PV8udGFyZ2V0O2lmKGwubW91c2VEb3dufHwhYXx8IXRoaXMuaW5zdGFuY2UudmlldylyZXR1cm47Y29uc3R7aG9sZGVyOndlfT10aGlzLmluc3RhbmNlLnZpZXcuX3d0Lnd0VGFibGU7aWYoZ2U9PT13ZSl7Y29uc3QgWmU9SWMoZCk7aWYoZC5lbGVtZW50RnJvbVBvaW50KFcrWmUsaWUpIT09'@;
put 'd2V8fGQuZWxlbWVudEZyb21Qb2ludChXLGllK1plKSE9PXdlKXJldHVybn1lbHNlIGZvcig7Z2UhPT1mOyl7aWYobnVsbD09PWdlKXtpZihfLmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJyZWFrO3JldHVybn1pZihnZT09PWEpcmV0dXJuO2dlPWdlLnBhcmVudE5vZGV9KCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyhUKTp0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyk/dGhpcy5pbnN0YW5jZS5kZXNlbGVjdENlbGwoKTp0aGlzLmluc3RhbmNlLmRlc3Ry'@;
put 'b3lFZGl0b3IoITEsITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLnRhYmxlLCJzZWxlY3RzdGFydCIsXz0+e3RoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb258fGF5KF8udGFyZ2V0KXx8Xy5wcmV2ZW50RGVmYXVsdCgpfSl9dHJhbnNsYXRlRnJvbVJlbmRl'@;
put 'cmFibGVUb1Zpc3VhbENvb3JkcyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIHRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoYSxkKSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbElu'@;
put 'ZGV4KGwsYSl7bGV0IGQ9bD49MD90aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCk6bCxoPWE+PTA/dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpOmE7cmV0dXJuIG51'@;
put 'bGw9PT1kJiYoZD1sKSxudWxsPT09aCYmKGg9YSksW2QsaF19Y291bnRSZW5kZXJhYmxlSW5kZXhlcyhsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGEpLGg9bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKTtyZXR1cm4gbnVsbD09'@;
put 'PWg/MDpsLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkrMX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Q29scyl9Y291bnRSZW5k'@;
put 'ZXJhYmxlUm93cygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heFJvd3MpfWNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhs'@;
put 'LGEsdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSl9Y291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHRo'@;
put 'aXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKX1jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLGQsaCl7aWYoaXNOYU4obCl8fGw8MClyZXR1cm4gMDtjb25zdCBmPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSksXz1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7aWYo'@;
put 'IU51bWJlci5pc0ludGVnZXIoXykpcmV0dXJuIDA7bGV0IFQ9MDtyZXR1cm4gYTwwP1Q9XysxOmE+MCYmKFQ9aC1fKSxUfWNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNl'@;
put 'dHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpe2NvbnN0IGw9dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSxhPU1hdGgubWluKHBhcnNlSW50KHRo'@;
put 'aXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wLDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpe2NvbnN0IGw9dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSxhPU1hdGgubWF4KGwtcGFyc2VJbnQo'@;
put 'dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20sMTApLDApO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLDEpfWlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpe2NvbnN0IGw9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpK3RoaXMu'@;
put 'Y291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxhPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpO3JldHVybiB0aGlzLmluc3RhbmNlLmNvdW50UmVuZGVyZWRSb3dzKCk+bCYmdGhpcy5pbnN0YW5jZS5jb3VudFJlbmRlcmVkQ29scygpPmF9aW5pdGlhbGl6ZVdh'@;
put 'bGtvbnRhYmxlKCl7Y29uc3QgbD14Zy5nZXQodGhpcyksYT17cnRsTW9kZTp0aGlzLmluc3RhbmNlLmlzUnRsKCksZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOnRoaXMuaW5zdGFuY2UuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpJiZ0aGlzLmluc3RhbmNlLmdldFBsdWdpbigiYXV0b1Jvd1NpemUi'@;
put 'KS5pc0VuYWJsZWQoKSx0YWJsZTpsLnRhYmxlLGlzRGF0YVZpZXdJbnN0YW5jZTooKT0+clYodGhpcy5pbnN0YW5jZSkscHJldmVudE92ZXJmbG93OigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRPdmVyZmxvdyxwcmV2ZW50V2hlZWw6KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudFdoZWVsLHN0'@;
put 'cmV0Y2hIOigpPT50aGlzLnNldHRpbmdzLnN0cmV0Y2hILGRhdGE6KF8sVCk9PnRoaXMuaW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbCguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChfLFQpKSx0b3RhbFJvd3M6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlUm93cygp'@;
put 'LHRvdGFsQ29sdW1uczooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksZml4ZWRDb2x1bW5zU3RhcnQ6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpLGZpeGVkUm93c1RvcDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLGZpeGVk'@;
put 'Um93c0JvdHRvbTooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydD4wfHxhLnJvd0hlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVy'@;
put 'bGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcD4wfHxhLmNvbHVtbkhlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbT4wLG1pblNwYXJlUm93czooKT0+dGhpcy5zZXR0aW5ncy5taW5TcGFy'@;
put 'ZVJvd3MscmVuZGVyQWxsUm93czp0aGlzLnNldHRpbmdzLnJlbmRlckFsbFJvd3Mscm93SGVhZGVyczooKT0+e2NvbnN0IF89W107cmV0dXJuIHRoaXMuaW5zdGFuY2UuaGFzUm93SGVhZGVycygpJiZfLnB1c2goKFQsVyk9Pntjb25zdCBpZT1UPj0wP3RoaXMuaW5zdGFuY2Uucm93SW5kZXhN'@;
put 'YXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChUKTpUO3RoaXMuYXBwZW5kUm93SGVhZGVyKGllLFcpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLF8pLGRuZSh0aGlzLG9WLF8ubGVuZ3RoKSxffSxjb2x1bW5IZWFkZXJzOigp'@;
put 'PT57Y29uc3QgXz1bXTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5oYXNDb2xIZWFkZXJzKCkmJl8ucHVzaCgoVCxXKT0+e2NvbnN0IGllPVQ+PTA/dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFQpOlQ7dGhpcy5hcHBlbmRDb2xIZWFk'@;
put 'ZXIoaWUsVyl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsXyksZG5lKHRoaXMsaVYsXy5sZW5ndGgpLF99LGNvbHVtbldpZHRoOl89Pntjb25zdCBUPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJl'@;
put 'bmRlcmFibGVJbmRleChfKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRDb2xXaWR0aChudWxsPT09VD9fOlQpfSxyb3dIZWlnaHQ6Xz0+e2NvbnN0IFQ9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KF8pO3JldHVybiB0aGlzLmluc3Rh'@;
put 'bmNlLmdldFJvd0hlaWdodChudWxsPT09VD9fOlQpfSxjZWxsUmVuZGVyZXI6KF8sVCxXKT0+e2NvbnN0W2llLGdlXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChfLFQpLHdlPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGll'@;
put 'LGdlKTtsZXQgRWU9aWUsWmU9Z2U7QXJyYXkuaXNBcnJheSh3ZSkmJihbRWUsWmVdPXdlKTtjb25zdCBvdD10aGlzLmluc3RhbmNlLmdldENlbGxNZXRhKEVlLFplKSxldD10aGlzLmluc3RhbmNlLmNvbFRvUHJvcChaZSk7bGV0IHl0PXRoaXMuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChF'@;
put 'ZSxldCk7dGhpcy5pbnN0YW5jZS5oYXNIb29rKCJiZWZvcmVWYWx1ZVJlbmRlciIpJiYoeXQ9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVmFsdWVSZW5kZXIiLHl0LG90KSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVuZGVyZXIiLFcsaWUsZ2UsZXQseXQsb3QpLHRo'@;
put 'aXMuaW5zdGFuY2UuZ2V0Q2VsbFJlbmRlcmVyKG90KSh0aGlzLmluc3RhbmNlLFcsaWUsZ2UsZXQseXQsb3QpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVuZGVyZXIiLFcsaWUsZ2UsZXQseXQsb3QpfSxzZWxlY3Rpb25zOnRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmhpZ2hsaWdo'@;
put 'dCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOigpPT50aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uLG9uV2luZG93UmVzaXplOigpPT57dGhpcy5pbnN0YW5jZSYmIXRoaXMuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJnRoaXMuaW5zdGFuY2UucmVmcmVzaERpbWVuc2lvbnMoKX0sb25D'@;
put 'b250YWluZXJFbGVtZW50UmVzaXplOigpPT57dGhpcy5pbnN0YW5jZSYmIXRoaXMuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJnRoaXMuaW5zdGFuY2UucmVmcmVzaERpbWVuc2lvbnMoKX0sb25DZWxsTW91c2VEb3duOihfLFQsVyxpZSk9Pntjb25zdCBnZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5k'@;
put 'ZXJhYmxlVG9WaXN1YWxDb29yZHMoVCksd2U9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5pbnN0YW5jZS5saXN0ZW4oKSx0aGlzLmFjdGl2ZVd0PWllLGwubW91c2VEb3duPSEwLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsXyxnZSxXLHdl'@;
put 'KSwhYmcoXykmJihhbmUoXyx7Y29vcmRzOmdlLHNlbGVjdGlvbjp0aGlzLmluc3RhbmNlLnNlbGVjdGlvbixjb250cm9sbGVyOndlLGNlbGxDb29yZHNGYWN0b3J5OihFZSxaZSk9PnRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoRWUsWmUpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29r'@;
put 'cygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLF8sZ2UsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvbnRleHRNZW51OihfLFQsVyxpZSk9Pntjb25zdCBnZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoVCk7dGhpcy5hY3RpdmVXdD1pZSxsLm1v'@;
put 'dXNlRG93bj0hMSx0aGlzLmluc3RhbmNlLnNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSYmdGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24uZmluaXNoKCksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLF8sZ2UsVyksIWJnKF8pJiYodGhpcy5pbnN0YW5jZS5y'@;
put 'dW5Ib29rcygiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsXyxnZSxXKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdXQ6KF8sVCxXLGllKT0+e2NvbnN0IGdlPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhUKTt0aGlzLmFjdGl2ZVd0PWll'@;
put 'LHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3V0IixfLGdlLFcpLCFiZyhfKSYmKHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdXQiLF8sZ2UsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3ZlcjooXyxULFcs'@;
put 'aWUpPT57Y29uc3QgZ2U9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFQpLHdlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuYWN0aXZlV3Q9aWUsdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixfLGdlLFcsd2Up'@;
put 'LCFiZyhfKSYmKGwubW91c2VEb3duJiZhbmUoXyx7Y29vcmRzOmdlLHNlbGVjdGlvbjp0aGlzLmluc3RhbmNlLnNlbGVjdGlvbixjb250cm9sbGVyOndlLGNlbGxDb29yZHNGYWN0b3J5OihFZSxaZSk9PnRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoRWUsWmUpfSksdGhpcy5pbnN0'@;
put 'YW5jZS5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLF8sZ2UsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlVXA6KF8sVCxXLGllKT0+e2NvbnN0IGdlPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhUKTt0aGlzLmFjdGl2ZVd0'@;
put 'PWllLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlVXAiLF8sZ2UsVyksIWJnKF8pJiYhdGhpcy5pbnN0YW5jZS5pc0Rlc3Ryb3llZCYmKHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VVcCIsXyxnZSxXKSx0aGlzLmFjdGl2ZVd0PXRoaXMu'@;
put 'X3d0KX0sb25DZWxsQ29ybmVyTW91c2VEb3duOl89PntfLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLF8pfSxvbkNlbGxDb3JuZXJEYmxDbGljazpfPT57Xy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLF8pfSxiZWZvcmVEcmF3OihfLFQpPT50aGlzLmJlZm9yZVJlbmRlcihfLFQpLG9uRHJhdzpfPT50aGlzLmFmdGVyUmVuZGVyKF8pLG9uU2Nyb2xsVmVydGljYWxseTooKT0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJT'@;
put 'Y3JvbGxWZXJ0aWNhbGx5Iiksb25TY3JvbGxIb3Jpem9udGFsbHk6KCk9PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iiksb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczooKT0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2Vs'@;
put 'bENsYXNzTmFtZXMiKSxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjooXyxULFcpPT57Y29uc3QgaWU9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcixnZT1pZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KF8pLHdlPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUhp'@;
put 'Z2hsaWdodGluZ1Jvd0hlYWRlciIsZ2UsVCxXKTtyZXR1cm4gaWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgod2UsMSkpfSxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjooXyxULFcpPT57Y29uc3QgaWU9dGhpcy5pbnN0'@;
put 'YW5jZS5jb2x1bW5JbmRleE1hcHBlcixnZT1pZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KF8pLHdlPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsZ2UsVCxXKTtyZXR1cm4gaWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl'@;
put 'eChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgod2UsMSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjooXyxULFcpPT57bGV0IGllO2NvbnN0W2dlLHdlXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChfLFQpLEVlPXRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmdl'@;
put 'dFNlbGVjdGVkUmFuZ2UoKSxaZT1FZS5zaXplKCk7aWYoWmU+MCl7Y29uc3QgZXQ9RWUucGVla0J5SW5kZXgoKFc/PzApKzEtWmUpO2llPVtldC5mcm9tLnJvdyxldC5mcm9tLmNvbCxldC50by5yb3csZXQudG8uY29sXX1yZXR1cm4gdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJEcmF3'@;
put 'U2VsZWN0aW9uIixnZSx3ZSxpZSxXKX0sb25CZWZvcmVEcmF3Qm9yZGVyczooXyxUKT0+e2NvbnN0W1csaWUsZ2Usd2VdPV8sRWU9W3RoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChXKSx0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaWUpLHRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChnZSksdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHdlKV07'@;
put 'cmV0dXJuIHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZURyYXdCb3JkZXJzIixFZSxUKX0sb25CZWZvcmVUb3VjaFNjcm9sbDooKT0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVG91Y2hTY3JvbGwiKSxvbkFmdGVyTW9tZW50dW1TY3JvbGw6KCk9PnRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoImFmdGVyTW9tZW50dW1TY3JvbGwiKSxvbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDooXyxUKT0+e2NvbnN0IFc9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFQpO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1'@;
put 'bkhvb2tzKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLF8sVyl9LG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6Xz0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyV2lkdGgiLF8pLG9uTW9kaWZ5R2V0Q2VsbENvb3JkczooXyxULFcpPT57Y29uc3QgaWU9dGhpcy5p'@;
put 'bnN0YW5jZS5yb3dJbmRleE1hcHBlcixnZT10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHdlPVQ+PTA/Z2UuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChUKTpULEVlPV8+PTA/aWUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChfKTpfLFplPXRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLEVlLHdlLFcpO2lmKEFycmF5LmlzQXJyYXkoWmUpKXtjb25zdFtvdCxldCx5dCxrdF09WmU7cmV0dXJuW290Pj0wP2llLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG90LDEpKTpv'@;
put 'dCxldD49MD9nZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGdlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChldCwxKSk6ZXQseXQ+PTA/aWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoeXQsLTEpKTp5dCxrdD49MD9nZS5n'@;
put 'ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGdlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChrdCwtMSkpOmt0XX19LHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOl89PntsZXQgVD10aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PVQm'@;
put 'JnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wJiYoVD0xMCksVD4wfHwiYXV0byI9PT1UKXtjb25zdCBXPXRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpLGllPV8uc3RhcnRSb3csZ2U9Xy5lbmRSb3c7aWYoIm51bWJlciI9PXR5cGVvZiBUKV8uc3RhcnRSb3c9TWF0aC5tYXgoaWUtVCwwKSxf'@;
put 'LmVuZFJvdz1NYXRoLm1pbihnZStULFctMSk7ZWxzZSBpZigiYXV0byI9PT1UKXtjb25zdCB3ZT1NYXRoLmNlaWwoZ2UvVyoxMik7Xy5zdGFydFJvdz1NYXRoLm1heChpZS13ZSwwKSxfLmVuZFJvdz1NYXRoLm1pbihnZSt3ZSxXLTEpfX10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclZp'@;
put 'ZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixfKX0sdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6Xz0+e2xldCBUPXRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09VCYmdGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFy'@;
put 'dCYmKFQ9MTApLFQ+MHx8ImF1dG8iPT09VCl7Y29uc3QgVz10aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxpZT1fLnN0YXJ0Q29sdW1uLGdlPV8uZW5kQ29sdW1uO2lmKCJudW1iZXIiPT10eXBlb2YgVCYmKF8uc3RhcnRDb2x1bW49TWF0aC5tYXgoaWUtVCwwKSxfLmVuZENvbHVtbj1N'@;
put 'YXRoLm1pbihnZStULFctMSkpLCJhdXRvIj09PVQpe2NvbnN0IHdlPU1hdGguY2VpbChnZS9XKjYpO18uc3RhcnRDb2x1bW49TWF0aC5tYXgoaWUtd2UsMCksXy5lbmRDb2x1bW49TWF0aC5taW4oZ2Urd2UsVy0xKX19dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydENvbHVt'@;
put 'bkNhbGN1bGF0b3JPdmVycmlkZSIsXyl9LHJvd0hlYWRlcldpZHRoOigpPT50aGlzLnNldHRpbmdzLnJvd0hlYWRlcldpZHRoLGNvbHVtbkhlYWRlckhlaWdodDooKT0+e2NvbnN0IF89dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iik7cmV0dXJuIHRo'@;
put 'aXMuc2V0dGluZ3MuY29sdW1uSGVhZGVySGVpZ2h0fHxffX07dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixhKSx0aGlzLl93dD1uZXcgdFYoYSksdGhpcy5hY3RpdmVXdD10aGlzLl93dDtjb25zdCBkPXRoaXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIse3dp'@;
put 'ZHRoOmgsaGVpZ2h0OmZ9PXRoaXMuaW5zdGFuY2Uucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zZXRMYXN0U2l6ZShoLGYpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwibW91c2Vkb3duIixfPT57Xy50YXJnZXQ9PT1kJiYzPT09Xy53aGlj'@;
put 'aCYmXy5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwiY29udGV4dG1lbnUiLF89PntfLnRhcmdldD09PWQmJjM9PT1fLndoaWNoJiZfLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0'@;
put 'aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkmJnRoaXMuX3d0LmRyYXdJbnRlcnJ1cHRlZCYmKHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMucmVuZGVyKCkp'@;
put 'fSl9aXNUZXh0U2VsZWN0aW9uQWxsb3dlZChsKXtpZihheShsKSlyZXR1cm4hMDtjb25zdCBhPVZwKGwsdGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFRhYmxlLnNwcmVhZGVyKTtyZXR1cm4hISghMD09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmF8fCJjZWxsIj09PXRoaXMu'@;
put 'c2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnRoaXMuaXNTZWxlY3RlZE9ubHlDZWxsKCkmJmF8fCF0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzQ2VsbEVkaXRlZCgpJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpKX1pc01vdXNlRG93bigpe3JldHVybiB4Zy5n'@;
put 'ZXQodGhpcykubW91c2VEb3dufWlzU2VsZWN0ZWRPbmx5Q2VsbCgpe3ZhciBsLGE7cmV0dXJuIG51bGwhPT0obD1udWxsPT09KGE9dGhpcy5pbnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdm9pZCAwIT09bCYmbH1pc0Nl'@;
put 'bGxFZGl0ZWQoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuZ2V0QWN0aXZlRWRpdG9yKCk7cmV0dXJuIGwmJmwuaXNPcGVuZWQoKX1iZWZvcmVSZW5kZXIobCxhKXtsJiZ0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVWaWV3UmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRl'@;
put 'cixhKX1hZnRlclJlbmRlcihsKXtsJiZ0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclZpZXdSZW5kZXIiLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyKX1hcHBlbmRSb3dIZWFkZXIobCxhKXtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGQ9YS5maXJzdENoaWxkO2lmKCFCbyhkLCJy'@;
put 'ZWxhdGl2ZSIpKXJldHVybiBnMihhKSx2b2lkIHRoaXMuYXBwZW5kUm93SGVhZGVyKGwsYSk7dGhpcy51cGRhdGVDZWxsSGVhZGVyKGQucXVlcnlTZWxlY3RvcigiLnJvd0hlYWRlciIpLGwsdGhpcy5pbnN0YW5jZS5nZXRSb3dIZWFkZXIpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OmQsZ2V0'@;
put 'Um93SGVhZGVyOmh9PXRoaXMuaW5zdGFuY2UsZj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLF89ZC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5jbGFzc05hbWU9InJlbGF0aXZlIixfLmNsYXNzTmFtZT0icm93SGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoXyxsLGgpLGYuYXBwZW5kQ2hp'@;
put 'bGQoXyksYS5hcHBlbmRDaGlsZChmKX10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlciIsbCxhKX1hcHBlbmRDb2xIZWFkZXIobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5pbnN0YW5j'@;
put 'ZS5nZXRDb2xIZWFkZXIsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MDtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGY9YS5maXJzdENoaWxkO0JvKGYsInJlbGF0aXZlIik/dGhpcy51cGRhdGVDZWxsSGVhZGVyKGYucXVlcnlTZWxlY3Rv'@;
put 'cigiLmNvbEhlYWRlciIpLGwsZCxoKTooZzIoYSksdGhpcy5hcHBlbmRDb2xIZWFkZXIobCxhLGQsaCkpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OmZ9PXRoaXMuaW5zdGFuY2UsXz1mLmNyZWF0ZUVsZW1lbnQoImRpdiIpLFQ9Zi5jcmVhdGVFbGVtZW50KCJzcGFuIik7Xy5jbGFzc05hbWU9'@;
put 'InJlbGF0aXZlIixULmNsYXNzTmFtZT0iY29sSGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoVCxsLGQsaCksXy5hcHBlbmRDaGlsZChUKSxhLmFwcGVuZENoaWxkKF8pfXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyR2V0Q29sSGVhZGVyIixsLGEsaCl9dXBkYXRlQ2VsbEhlYWRl'@;
put 'cihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsZj1hO2NvbnN0IF89dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpfHx0aGlzLl93dDtsLnBhcmVudE5vZGUmJihCbyhsLCJjb2xIZWFkZXIi'@;
put 'KT9mPV8ud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKTpCbyhsLCJyb3dIZWFkZXIiKSYmKGY9Xy53dFRhYmxlLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpKSksZj4tMT9nZyhsLGQoYSxoKSk6KGpwKGwsU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKSxwaShs'@;
put 'LCJjb3JuZXJIZWFkZXIiKSl9bWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCktbDtyZXR1cm4gZD4wP2Q6MH1tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQobCl7Y29uc3QgZD10aGlzLl93dC53dFZp'@;
put 'ZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWw7cmV0dXJuIGQ+MD9kOjB9c2V0TGFzdFNpemUobCxhKXtjb25zdCBkPXhnLmdldCh0aGlzKTtbZC5sYXN0V2lkdGgsZC5sYXN0SGVpZ2h0XT1bbCxhXX1nZXRMYXN0U2l6ZSgpe2NvbnN0IGw9eGcuZ2V0KHRoaXMpO3JldHVybnt3aWR0aDps'@;
put 'Lmxhc3RXaWR0aCxoZWlnaHQ6bC5sYXN0SGVpZ2h0fX1nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFZp'@;
put 'c2libGVSb3coKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdEZ1'@;
put 'bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZUNv'@;
put 'bHVtbigpe3JldHVybiB0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gdW5l'@;
put 'KHRoaXMsaVYpfWdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB1bmUodGhpcyxvVil9ZGVzdHJveSgpe3RoaXMuX3d0LmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fSxmbmU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixzVj1mbmUubGVuZ3RoO2Z1bmN0aW9u'@;
put 'IE1rKGMpe2xldCBkLGw9YysxLGE9IiI7Zm9yKDtsPjA7KWQ9KGwtMSklc1YsYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1K2QpK2EsbD1wYXJzZUludCgobC1kKS9zViwxMCk7cmV0dXJuIGF9ZnVuY3Rpb24gZlRlKGMpe2xldCBsPTA7aWYoYylmb3IobGV0IGE9MCxkPWMubGVuZ3RoLTE7YTxj'@;
put 'Lmxlbmd0aDthKz0xLGQtPTEpbCs9c1YqKmQqKGZuZS5pbmRleE9mKGNbYV0pKzEpO3JldHVybiBsLT0xLGx9ZnVuY3Rpb24gcFRlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKyspe2NvbnN0IGY9W107Zm9yKGg9MDtoPGw7aCsrKWYucHVzaChNayhoKSsoZCsxKSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIGdUZSgpe2xldCBjPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPXt9O2Zvciho'@;
put 'PTA7aDxsO2grKylmW2Bwcm9wJHtofWBdPU1rKGgpKyhkKzEpO2EucHVzaChmKX1yZXR1cm4gYX1mdW5jdGlvbiBtVGUoYyxsKXtjb25zdCBhPVtdO2xldCBkO2ZvcihsZXQgaD0wO2g8YztoKyspe2Q9W107Zm9yKGxldCBmPTA7ZjxsO2YrKylkLnB1c2goIiIpO2EucHVzaChkKX1yZXR1cm4g'@;
put 'YX1mdW5jdGlvbiBhVihjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPWM7Y29uc3QgZD1bXTtyZXR1cm4oIUFycmF5LmlzQXJyYXkoYyl8fCFBcnJheS5pc0FycmF5KGNbMF0pKSYmKGE9W2NdKSxhLmZvckVhY2goKGgs'@;
put 'Zik9PntBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaCgoXyxUKT0+e2QucHVzaChbZitsLFQsX10pfSk6T2JqZWN0LmtleXMoaCkuZm9yRWFjaChfPT57ZC5wdXNoKFtmK2wsXyxoW19dXSl9KX0pLGR9ZnVuY3Rpb24gbFYoYyl7bGV0IGw9MDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmKGNb'@;
put 'MF0mJkFycmF5LmlzQXJyYXkoY1swXSk/bD1jWzBdLmxlbmd0aDpjWzBdJiZ1cyhjWzBdKSYmKGw9dWsoY1swXSkpKSxsfWZ1bmN0aW9uIHBuZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT5BcnJheS5pc0FycmF5KGwpKSl9ZnVuY3Rpb24gZ25l'@;
put 'KGMpe3JldHVybiEhKEFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PiJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJm51bGwhPT1sKSl9Y29uc3QgX1RlPWNsYXNzIHZUZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107dGhpcy5ob3Q9bCx0aGlzLmRhdGE9YSx0aGlzLmRhdGFUeXBlPSJhcnJheSIsdGhpcy5jb2xUb1Byb3A9KCk9Pnt9LHRoaXMucHJvcFRvQ29sPSgpPT57fX1tb2RpZnlSb3dEYXRhKGwpe2xldCBhO3JldHVybiB0aGlzLmhvdC5o'@;
put 'YXNIb29rKCJtb2RpZnlSb3dEYXRhIikmJihhPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixsKSksdm9pZCAwPT09YXx8TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF06YX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YSYmMCE9PXRoaXMuZGF0YS5sZW5ndGg/dGhp'@;
put 'cy5nZXRCeVJhbmdlKG51bGwsbnVsbCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKTp0aGlzLmRhdGF9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXRBdENvbHVtbihsKXtjb25zdCBhPVtdO3JldHVybiBEbih0aGlzLmRhdGEsKGQsaCk9'@;
put 'Pntjb25zdCBmPXRoaXMuZ2V0QXRDZWxsKGgsbCk7YS5wdXNoKGYpfSksYX1nZXRBdFJvdyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBmPXZvaWQgMD09PWEmJnZvaWQgMD09PWQ7bGV0IF89bnVsbCxU'@;
put 'PW51bGw7aWYoXz10aGlzLm1vZGlmeVJvd0RhdGEobCksQXJyYXkuaXNBcnJheShfKSlUPVtdLGY/Xy5mb3JFYWNoKChXLGllKT0+e1RbaWVdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxpZSxfKX0pOnZvKGEsZCxXPT57VFtXLWFdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxXLF8pfSk7'@;
put 'ZWxzZSBpZih1cyhfKXx8UmEoXykpaWYoVD1oP1tdOnt9LCFmfHxoKXtjb25zdCBpZT10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCktMTt2bygwLGllLGdlPT57Y29uc3Qgd2U9dGhpcy5jb2xUb1Byb3AoZ2UpO2lmKGdlPj0oYXx8MCkmJmdlPD0oZHx8aWUpJiYhTnVtYmVyLmlzSW50ZWdlcih3'@;
put 'ZSkpe2NvbnN0IEVlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx3ZSxfKTtoP1QucHVzaChFZSk6Y2soVCx3ZSxFZSl9fSl9ZWxzZSBkcyhfLChXLGllKT0+e2NrKFQsaWUsdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLGllLF8pKX0pO3JldHVybiBUfXNldEF0Q2VsbChsLGEsZCl7aWYoIShs'@;
put 'Pj10aGlzLmNvdW50Um93cygpfHxhPj10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCkpKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGg9X2coZCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxoLCJzZXQiKSxoLmlzVG91Y2hl'@;
put 'ZCgpJiYoZD1oLnZhbHVlKX1OdW1iZXIuaXNJbnRlZ2VyKGEpP3RoaXMuZGF0YVtsXVthXT1kOmNrKHRoaXMuZGF0YVtsXSxhLGQpfX1nZXRBdFBoeXNpY2FsQ2VsbChsLGEsZCl7bGV0IGg9bnVsbDtpZihkJiYoaD0ic3RyaW5nIj09dHlwZW9mIGE/dnRlKGQsYSk6ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGE/YShkKTpkW2FdKSx0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGY9X2coaCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxmLCJnZXQiKSxmLmlzVG91Y2hlZCgpJiYoaD1mLnZhbHVlKX1yZXR1cm4gaH1nZXRBdENlbGwo'@;
put 'bCxhKXtjb25zdCBkPXRoaXMubW9kaWZ5Um93RGF0YShsKTtyZXR1cm4gdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHRoaXMuY29sVG9Qcm9wKGEpLGQpfWdldEJ5UmFuZ2UoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVs'@;
put 'bCxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9bnVsbCxfPW51bGwsVD1udWxsLFc9bnVsbDtudWxsPT09bHx8'@;
put 'bnVsbD09PWE/KGg9ITAsZj0wLFQ9dGhpcy5jb3VudFJvd3MoKS0xKTooZj1NYXRoLm1pbihsLnJvdyxhLnJvdyksXz1NYXRoLm1pbihsLmNvbCxhLmNvbCksVD1NYXRoLm1heChsLnJvdyxhLnJvdyksVz1NYXRoLm1heChsLmNvbCxhLmNvbCkpO2NvbnN0IGllPVtdO3JldHVybiB2byhmLFQs'@;
put 'Z2U9PntpZS5wdXNoKGg/dGhpcy5nZXRBdFJvdyhnZSx2b2lkIDAsdm9pZCAwLGQpOnRoaXMuZ2V0QXRSb3coZ2UsXyxXLGQpKX0pLGllfWNvdW50Um93cygpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIpKXtjb25zdCBsPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2Rp'@;
put 'ZnlTb3VyY2VMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBsfXJldHVybiB0aGlzLmRhdGEubGVuZ3RofWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIGxWKHRoaXMuZGF0YSl9ZGVzdHJveSgpe3RoaXMuZGF0YT1udWxsLHRoaXMuaG90PW51bGx9fSxtbmU9e19sb2Nh'@;
put 'bEhvb2tzOk9iamVjdC5jcmVhdGUobnVsbCksYWRkTG9jYWxIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3NbY118fCh0aGlzLl9sb2NhbEhvb2tzW2NdPVtdKSx0aGlzLl9sb2NhbEhvb2tzW2NdLnB1c2gobCksdGhpc30scnVuTG9jYWxIb29rcyhjLGwsYSxkLGgsZixfKXtpZih0'@;
put 'aGlzLl9sb2NhbEhvb2tzW2NdKXtjb25zdCBUPXRoaXMuX2xvY2FsSG9va3NbY10ubGVuZ3RoO2ZvcihsZXQgVz0wO1c8VDtXKyspYWsodGhpcy5fbG9jYWxIb29rc1tjXVtXXSx0aGlzLGwsYSxkLGgsZixfKX19LGNsZWFyTG9jYWxIb29rcygpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzPXt9'@;
put 'LHRoaXN9fTtmaChtbmUsIk1JWElOX05BTUUiLCJsb2NhbEhvb2tzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IE8wPW1uZTtjbGFzcyBFZ3tjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1sw'@;
put 'XTpudWxsO3RoaXMuaW5kZXhlZFZhbHVlcz1bXSx0aGlzLmluaXRWYWx1ZU9yRm49bH1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5pbmRleGVkVmFsdWVzfWdldFZhbHVlQXRJbmRleChsKXtjb25zdCBhPXRoaXMuaW5kZXhlZFZhbHVlcztpZihsPGEubGVuZ3RoKXJldHVybiBhW2xdfXNldFZh'@;
put 'bHVlcyhsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9bC5zbGljZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9c2V0VmFsdWVBdEluZGV4KGwsYSl7cmV0dXJuIGw8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1tsXT1hLHRoaXMucnVuTG9jYWxIb29r'@;
put 'cygiY2hhbmdlIiksITApfWNsZWFyKCl7dGhpcy5zZXREZWZhdWx0VmFsdWVzKCl9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWVzKCkubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu'@;
put 'dHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoPTAsUmEodGhpcy5pbml0VmFsdWVPckZuKT92byhsLTEsYT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKGEpKSk6dm8obC0xLCgpPT50aGlzLmluZGV4ZWRW'@;
put 'YWx1ZXMucHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4pKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfWluaXQobCl7cmV0dXJuIHRoaXMuc2V0RGVmYXVsdFZhbHVlcyhsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKSx0aGlzfWluc2VydCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hh'@;
put 'bmdlIil9cmVtb3ZlKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmluZGV4ZWRWYWx1ZXM9bnVsbCx0aGlzLmluaXRWYWx1ZU9yRm49bnVsbH19ZnVuY3Rpb24gY1YoYyxsLGEpe3JldHVyblsuLi5jLnNsaWNlKDAs'@;
put 'bCksLi4uYSwuLi5jLnNsaWNlKGwpXX1mdW5jdGlvbiBneShjLGwpe3JldHVybiBfMShjLGE9PiExPT09bC5pbmNsdWRlcyhhKSl9ZnVuY3Rpb24gdVYoYyxsKXtyZXR1cm4gY3MoYyxhPT5hLWwuZmlsdGVyKGQ9PmQ8YSkubGVuZ3RoKX1mdW5jdGlvbiBkVihjLGwpe2NvbnN0IGE9bFswXSxk'@;
put 'PWwubGVuZ3RoO3JldHVybiBjcyhjLGg9Pmg+PWE/aCtkOmgpfVRhKEVnLE8wKTtjbGFzcyB2bmUgZXh0ZW5kcyBFZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe2NvbnN0IGQ9ZFYodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz1jVihkLGws'@;
put 'YSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9Z3kodGhpcy5pbmRleGVkVmFsdWVzLGwpO3RoaXMuaW5kZXhlZFZhbHVlcz11VihhLGwpLHN1cGVyLnJlbW92ZShsKX19ZnVuY3Rpb24gaFYoYyxsLGEsZCl7Y29uc3QgaD1hLmxlbmd0aD9hWzBdOnZvaWQgMDtyZXR1cm5b'@;
put 'Li4uYy5zbGljZSgwLGgpLC4uLmEubWFwKChmLF8pPT5SYShkKT9kKGYsXyk6ZCksLi4udm9pZCAwPT09aD9bXTpjLnNsaWNlKGgpXX1mdW5jdGlvbiBmVihjLGwpe3JldHVybiBfMShjLChhLGQpPT4hMT09PWwuaW5jbHVkZXMoZCkpfWNsYXNzIFdwIGV4dGVuZHMgRWd7aW5zZXJ0KGwsYSl7'@;
put 'dGhpcy5pbmRleGVkVmFsdWVzPWhWKHRoaXMuaW5kZXhlZFZhbHVlcywwLGEsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWZWKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9fWNsYXNzIHhrIGV4'@;
put 'dGVuZHMgV3B7Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRIaWRkZW5JbmRleGVzKCl7cmV0dXJuIEFsKHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNs'@;
put 'YXNzIEVrIGV4dGVuZHMgRWd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHlUZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gd1RlKGMpe3ZhciBsPWZ1bmN0aW9uIENUZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFy'@;
put 'IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJvcmRlck9mSW5kZXhlcyIsW10pfWdldFZhbHVlcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChsPT50aGlzLmluZGV4ZWRWYWx1ZXNbbF0pfXNldFZhbHVlcyhsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPVsuLi5BcnJheShs'@;
put 'Lmxlbmd0aCkua2V5cygpXSxzdXBlci5zZXRWYWx1ZXMobCl9c2V0VmFsdWVBdEluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoO3JldHVybiBsPHRoaXMuaW5kZXhl'@;
put 'ZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSwhMT09PXRoaXMub3JkZXJPZkluZGV4ZXMuaW5jbHVkZXMobCkmJnRoaXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKGQsMCxsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhclZhbHVlKGwpe3RoaXMu'@;
put 'b3JkZXJPZkluZGV4ZXM9Z3kodGhpcy5vcmRlck9mSW5kZXhlcyxbbF0pLFJhKHRoaXMuaW5pdFZhbHVlT3JGbik/c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKGwpKTpzdXBlci5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4pfWdldExlbmd0'@;
put 'aCgpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5vcmRlck9mSW5kZXhlcy5s'@;
put 'ZW5ndGg9MCxzdXBlci5zZXREZWZhdWx0VmFsdWVzKGwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1oVih0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksdGhpcy5vcmRlck9mSW5kZXhlcz1kVih0aGlzLm9yZGVyT2ZJbmRleGVzLGEpLHN1cGVyLmlu'@;
put 'c2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9ZlYodGhpcy5pbmRleGVkVmFsdWVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9Z3kodGhpcy5vcmRlck9mSW5kZXhlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPXVWKHRoaXMub3JkZXJPZkluZGV4ZXMsbCksc3VwZXIucmVt'@;
put 'b3ZlKGwpfWdldEVudHJpZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+W2wsdGhpcy5nZXRWYWx1ZUF0SW5kZXgobCldKX19Y2xhc3MgbXkgZXh0ZW5kcyBXcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'JiZhcmd1bWVudHNbMF0pfWdldFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuIEFsKHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNvbnN0IF9uZT1uZXcgTWFwKFtbImhpZGluZyIseGtdLFsiaW5kZXgiLEVnXSxbImxpbmtlZFBoeXNpY2FsSW5kZXhUb1Zh'@;
put 'bHVlIixFa10sWyJwaHlzaWNhbEluZGV4VG9WYWx1ZSIsV3BdLFsidHJpbW1pbmciLG15XV0pO2xldCBwVj0wO2NsYXNzIGdWe2NvbnN0cnVjdG9yKCl7dGhpcy5jb2xsZWN0aW9uPW5ldyBNYXB9cmVnaXN0ZXIobCxhKXshMT09PXRoaXMuY29sbGVjdGlvbi5oYXMobCkmJih0aGlzLmNvbGxl'@;
put 'Y3Rpb24uc2V0KGwsYSksYS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhKSkscFYrPTEpfXVucmVnaXN0ZXIobCl7Y29uc3QgYT10aGlzLmNvbGxlY3Rpb24uZ2V0KGwpO0tpKGEpJiYoYS5kZXN0cm95KCksdGhpcy5jb2xsZWN0aW9uLmRl'@;
put 'bGV0ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkscFYtPTEpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgobCxhKT0+dGhpcy51bnJlZ2lzdGVyKGEpKSx0aGlzLmNvbGxlY3Rpb24uY2xlYXIoKX1nZXQobCl7cmV0dXJuIExhKGwpP0FycmF5LmZy'@;
put 'b20odGhpcy5jb2xsZWN0aW9uLnZhbHVlcygpKTp0aGlzLmNvbGxlY3Rpb24uZ2V0KGwpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmNvbGxlY3Rpb24uc2l6ZX1yZW1vdmVGcm9tRXZlcnkobCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goYT0+e2EucmVtb3ZlKGwpfSl9aW5zZXJ0VG9FdmVy'@;
put 'eShsLGEpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGQ9PntkLmluc2VydChsLGEpfSl9aW5pdEV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLmluaXQobCl9KX19VGEoZ1YsTzApO2NsYXNzIGJuZSBleHRlbmRzIGdWe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlz'@;
put 'Lm1lcmdlZFZhbHVlc0NhY2hlPVtdLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbj1sLHRoaXMuZmFsbGJhY2tWYWx1ZT1hfWdldE1lcmdlZFZhbHVlcygpe2lmKCEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pKXJldHVybiB0'@;
put 'aGlzLm1lcmdlZFZhbHVlc0NhY2hlO2lmKDA9PT10aGlzLmdldExlbmd0aCgpKXJldHVybltdO2NvbnN0IGE9Y3ModGhpcy5nZXQoKSxmPT5mLmdldFZhbHVlcygpKSxkPVtdLGg9S2koYVswXSkmJmFbMF0ubGVuZ3RofHwwO2ZvcihsZXQgZj0wO2Y8aDtmKz0xKXtjb25zdCBfPVtdO2Zvcihs'@;
put 'ZXQgVD0wO1Q8dGhpcy5nZXRMZW5ndGgoKTtUKz0xKV8ucHVzaChhW1RdW2ZdKTtkLnB1c2goXyl9cmV0dXJuIGNzKGQsdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKX1nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKGEpW2xdO3JldHVybiBL'@;
put 'aShkKT9kOnRoaXMuZmFsbGJhY2tWYWx1ZX11cGRhdGVDYWNoZSgpe3RoaXMubWVyZ2VkVmFsdWVzQ2FjaGU9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoITEpfX1mdW5jdGlvbiB5bmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJp'@;
put 'dmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIG1WPW5ldyBXZWFrTWFwO2NsYXNzIHduZXtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiB4VGUoYyxsLGEpeyhmdW5jdGlvbiBFVGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u'@;
put 'b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLG1WLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pfXN1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5hZGRMb2NhbEhvb2soImNoYW5nZSIsbCksdGhp'@;
put 'cy5fd3JpdGUoZnVuY3Rpb24gVFRlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIERUZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMseW5lKGMsbCwiZ2V0IikpfSh0aGlzLG1WKSksdGhpc311bnN1YnNjcmliZSgpe3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoInVu'@;
put 'c3Vic2NyaWJlIiksdGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzfV93cml0ZShsKXtyZXR1cm4gbC5sZW5ndGg+MCYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpLHRoaXN9X3dyaXRlSW5pdGlhbENoYW5nZXMobCl7IWZ1bmN0aW9uIGtUZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IEFUZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMseW5lKGMsbCwic2V0IiksYSksYX0odGhpcyxtVixs'@;
put 'KX19ZnVuY3Rpb24gQ25lKGMsbCl7Y29uc3QgYT1bXTtsZXQgZD0wLGg9MDtmb3IoO2Q8Yy5sZW5ndGgmJmg8bC5sZW5ndGg7ZCsrLGgrKyljW2RdIT09bFtoXSYmYS5wdXNoKHtvcDoicmVwbGFjZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2RdLG5ld1ZhbHVlOmxbaF19KTtmb3IoO2Q8bC5sZW5n'@;
put 'dGg7ZCsrKWEucHVzaCh7b3A6Imluc2VydCIsaW5kZXg6ZCxvbGRWYWx1ZTp2b2lkIDAsbmV3VmFsdWU6bFtkXX0pO2Zvcig7aDxjLmxlbmd0aDtoKyspYS5wdXNoKHtvcDoicmVtb3ZlIixpbmRleDpoLG9sZFZhbHVlOmNbaF0sbmV3VmFsdWU6dm9pZCAwfSk7cmV0dXJuIGF9ZnVuY3Rpb24g'@;
put 'dnkoYyxsLGEpeyhmdW5jdGlvbiBJVGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG1kKGMsbCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIExUZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsU25lKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIGtrKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gUlRlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJs'@;
put 'ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxTbmUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFNuZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0'@;
put 'byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1UYSh3bmUsTzApO3ZhciBBaz1uZXcgV2Vha01hcCxfeT1uZXcgV2Vha01hcCxUaz1uZXcgV2Vha01hcCxEaz1uZXcgV2Vha01hcCxJaz1uZXcgV2Vha01hcDtjbGFzcyBPVGV7Y29uc3RydWN0'@;
put 'b3IoKXtsZXR7aW5pdGlhbEluZGV4VmFsdWU6bH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3Z5KHRoaXMsQWsse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBTZXR9KSx2eSh0aGlzLF95LHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLHZ5'@;
put 'KHRoaXMsVGsse3dyaXRhYmxlOiEwLHZhbHVlOltdfSksdnkodGhpcyxEayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx2eSh0aGlzLElrLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGtrKHRoaXMsSWssbD8/ITEpfWNyZWF0ZU9ic2VydmVyKCl7Y29uc3QgbD1uZXcgd25lO3JldHVybiBtZCh0'@;
put 'aGlzLEFrKS5hZGQobCksbC5hZGRMb2NhbEhvb2soInVuc3Vic2NyaWJlIiwoKT0+e21kKHRoaXMsQWspLmRlbGV0ZShsKX0pLGwuX3dyaXRlSW5pdGlhbENoYW5nZXMoQ25lKG1kKHRoaXMsX3kpLG1kKHRoaXMsVGspKSksbH1lbWl0KGwpe2xldCBhPW1kKHRoaXMsVGspOyghbWQodGhpcyxE'@;
put 'ayl8fG1kKHRoaXMsX3kpLmxlbmd0aCE9PWwubGVuZ3RoKSYmKDA9PT1sLmxlbmd0aD9sPW5ldyBBcnJheShhLmxlbmd0aCkuZmlsbChtZCh0aGlzLElrKSk6a2sodGhpcyxfeSxuZXcgQXJyYXkobC5sZW5ndGgpLmZpbGwobWQodGhpcyxJaykpKSxtZCh0aGlzLERrKXx8KGtrKHRoaXMsRGss'@;
put 'ITApLGE9bWQodGhpcyxfeSkpKTtjb25zdCBkPUNuZShhLGwpO21kKHRoaXMsQWspLmZvckVhY2goaD0+aC5fd3JpdGUoZCkpLGtrKHRoaXMsVGssbCl9fWNsYXNzIHZWe2NvbnN0cnVjdG9yKCl7dGhpcy5pbmRleGVzU2VxdWVuY2U9bmV3IHZuZSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rp'@;
put 'b249bmV3IGJuZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbj1uZXcgYm5lKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbj1uZXcgZ1YsdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZT1uZXcgT1Rl'@;
put 'KHtpbml0aWFsSW5kZXhWYWx1ZTohMX0pLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZT1bXSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bXSx0aGlzLmlzQmF0Y2hlZD0hMSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITEsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQg'@;
put 'MCx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSExLHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlPVtdLHRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGU9bmV3IE1hcCx0aGlzLmZyb21WaXN1YWxUb1Jl'@;
put 'bmRlcmFibGVJbmRleGVzQ2FjaGU9bmV3IE1hcCx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9Pnt0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiaW5kZXhlc1NlcXVlbmNlQ2hh'@;
put 'bmdlIix0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZSxudWxsKX0pLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMudHJpbW1lZEluZGV4ZXNDaGFu'@;
put 'Z2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9'@;
put 'ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0'@;
put 'aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbil9KX1zdXNwZW5kT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSEwfXJlc3VtZU9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMSx0aGlzLnVwZGF0ZUNhY2hlKCl9Y3JlYXRlQ2hhbmdlc09ic2VydmVyKGwpe2lmKCJoaWRpbmciIT09bCl0'@;
put 'aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGluZGV4IG1hcCB0eXBlICIke2x9Ii5gKTtyZXR1cm4gdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZS5jcmVhdGVPYnNlcnZlcigpfWNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAobCxhLGQpe3JldHVybiB0aGlzLnJlZ2lzdGVyTWFwKGws'@;
put 'ZnVuY3Rpb24gU1RlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2lmKCFfbmUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIG1hcCB0eXBlICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3Jl'@;
put 'dHVybiBuZXcoX25lLmdldChjKSkobCl9KGEsZCkpfXJlZ2lzdGVyTWFwKGwsYSl7aWYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldChsKXx8dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmdldChsKSl0aHJvdyBFcnJv'@;
put 'cihgTWFwIHdpdGggbmFtZSAiJHtsfSIgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkLmApO2EgaW5zdGFuY2VvZiBteT90aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTphIGluc3RhbmNlb2YgeGs/dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3Rlcihs'@;
put 'LGEpOnRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk7Y29uc3QgZD10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3JldHVybiBkPjAmJmEuaW5pdChkKSxhfXVucmVnaXN0ZXJNYXAobCl7dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCksdGhp'@;
put 'cy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCl9dW5yZWdpc3RlckFsbCgpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51'@;
put 'bnJlZ2lzdGVyQWxsKCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpfWdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlW2xdO3JldHVybiBLaShhKT9hOm51bGx9Z2V0UGh5c2ljYWxGcm9tUmVu'@;
put 'ZGVyYWJsZUluZGV4KGwpe2NvbnN0IGE9dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGVbbF07cmV0dXJuIEtpKGEpP2E6bnVsbH1nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChsKXtjb25zdCBhPXRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuZ2V0KGwp'@;
put 'O3JldHVybiBLaShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKXtyZXR1cm4gdGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh0aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKSl9Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChsKXtj'@;
put 'b25zdCBhPXRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5nZXQobCk7cmV0dXJuIEtpKGEpP2E6bnVsbH1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd'@;
put 'O2lmKG51bGw9PT10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpKXJldHVybiBudWxsO2lmKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5oYXMobCkpcmV0dXJuIGw7Y29uc3QgZj1BcnJheS5mcm9tKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUlu'@;
put 'ZGV4ZXNDYWNoZS5rZXlzKCkpO2xldCBfPS0xO3JldHVybiBfPWE+MD9mLmZpbmRJbmRleChUPT5UPmwpOmYucmV2ZXJzZSgpLmZpbmRJbmRleChUPT5UPGwpLC0xPT09Xz9kP3RoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsLWEsITEpOm51bGw6ZltfXX1pbml0VG9MZW5ndGgoKXts'@;
put 'ZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTt0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9Wy4uLm5ldyBBcnJheShsKS5rZXlzKCldLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hl'@;
put 'PVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbml0Iix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5pbml0KGwpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xs'@;
put 'ZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0'@;
put 'aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpfWZpdFRvTGVuZ3RoKGwpe2NvbnN0IGE9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtpZihsPGEpe2NvbnN0IGQ9Wy4uLkFycmF5KHRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCktbCkua2V5cygpXS5tYXAoaD0+aCtsKTt0aGlzLnJl'@;
put 'bW92ZUluZGV4ZXMoZCl9ZWxzZSB0aGlzLmluc2VydEluZGV4ZXMoYSxsLWEpfWdldEluZGV4ZXNTZXF1ZW5jZSgpe3JldHVybiB0aGlzLmluZGV4ZXNTZXF1ZW5jZS5nZXRWYWx1ZXMoKX1zZXRJbmRleGVzU2VxdWVuY2UobCl7dm9pZCAwPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYo'@;
put 'dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJ1cGRhdGUiKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5zZXRWYWx1ZXMobCksInVwZGF0ZSI9PT10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwKX1nZXROb3RUcmltbWVkSW5kZXhlcygpe3Jl'@;
put 'dHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNUcmltbWVkKGQpKX1nZXROb3RU'@;
put 'cmltbWVkSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkubGVuZ3RofWdldE5vdEhpZGRlbkluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5v'@;
put 'dEhpZGRlbkluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNIaWRkZW4oZCkpfWdldE5vdEhpZGRlbkluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RIaWRkZW5JbmRleGVzKCkubGVuZ3RofWdldFJlbmRlcmFibGVJbmRl'@;
put 'eGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU6dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNI'@;
put 'aWRkZW4oZCkpfWdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKS5sZW5ndGh9Z2V0TnVtYmVyT2ZJbmRleGVzKCl7cmV0dXJuIHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkubGVuZ3RofW1vdmVJbmRleGVzKGwsYSl7Im51bWJl'@;
put 'ciI9PXR5cGVvZiBsJiYobD1bbF0pO2NvbnN0IGQ9Y3MobCxpZT0+dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChpZSkpLGg9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGY9bC5sZW5ndGgsXz1neSh0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQpLFQ9Xy5maWx0'@;
put 'ZXIoaWU9PiExPT09dGhpcy5pc1RyaW1tZWQoaWUpKTtsZXQgVz1fLmluZGV4T2YoVFtULmxlbmd0aC0xXSkrMTthK2Y8aCYmKFc9Xy5pbmRleE9mKFRbYV0pKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Im1vdmUiLHRoaXMuc2V0SW5kZXhlc1NlcXVlbmNlKGNWKF8sVyxkKSksdGhpcy5p'@;
put 'bmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCl9aXNIaWRkZW4obCl7cmV0dXJuIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4'@;
put 'KGwpfWluc2VydEluZGV4ZXMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKVtsXSxoPUtpKGQpP2Q6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSxmPXRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5jbHVkZXMoZCk/dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5p'@;
put 'bmRleE9mKGQpOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksXz1jcyhuZXcgQXJyYXkoYSkuZmlsbChoKSwoVCxXKT0+VCtXKTt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbnNlcnQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluc2VydChmLF8p'@;
put 'LHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZixfKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZixfKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5'@;
put 'KGYsXyksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9cmVtb3ZlSW5kZXhlcyhsKXt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJyZW1vdmUiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnJlbW92ZShsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9p'@;
put 'ZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygp'@;
put 'fXVwZGF0ZUNhY2hlKCl7KCEwPT09KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkfHx0'@;
put 'aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSkmJih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMo'@;
put 'ITEpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcyghMSksdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygp'@;
put 'LHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQmJnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1bkxvY2FsSG9v'@;
put 'a3MoImNhY2hlVXBkYXRlZCIse2luZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ6dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkLHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2Vk'@;
put 'fSksdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVu'@;
put 'Z3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoYSk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQoZCxhKX19'@;
put 'Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0'@;
put 'UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpLGg9dGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChkKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGgsYSl9fX1mdW5jdGlvbiBNbmUoYyl7Y29uc3QgYT0vXihbYS16QS1aXXsyfSktKFthLXpB'@;
put 'LVpdezJ9KSQvLmV4ZWMoYyk7cmV0dXJuIGE/YCR7YVsxXS50b0xvd2VyQ2FzZSgpfS0ke2FbMl0udG9VcHBlckNhc2UoKX1gOmN9ZnVuY3Rpb24geG5lKGMpe0tpKGMpJiZTTihBYWBMYW5ndWFnZSB3aXRoIGNvZGUgIiR7Y30iIHdhcyBub3QgZm91bmQuIFlvdSBzaG91bGQgcmVnaXN0ZXIg'@;
put 'cGFydGljdWxhciBsYW5ndWFnZVx4MjAKICAgIGJlZm9yZSB1c2luZyBpdC4gUmVhZCBtb3JlIGFib3V0IHRoaXMgaXNzdWUgYXQ6IGh0dHBzOi8vZG9jcy5oYW5kc29udGFibGUuY29tL2kxOG4vbWlzc2luZy1sYW5ndWFnZS1jb2RlLmApfVRhKHZWLE8wKTtjb25zdHtyZWdpc3RlcjpIVGUs'@;
put 'Z2V0VmFsdWVzOk5UZX09cGQoInBocmFzZUZvcm1hdHRlcnMiKTshZnVuY3Rpb24gVlRlKGMsbCl7SFRlKGMsbCl9KCJwbHVyYWxpemUiLGZ1bmN0aW9uIEZUZShjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZOdW1iZXIuaXNJbnRlZ2VyKGwpP2NbbF06Y30pO2NvbnN0IEVuZT0iQ29u'@;
put 'dGV4dE1lbnU6aXRlbXMiLF9WPWAke0VuZX0ubm9JdGVtc2AsYlY9YCR7RW5lfS5pbnNlcnRSb3dBYm92ZWAseVY9YCR7RW5lfS5pbnNlcnRSb3dCZWxvd2Asd1Y9YCR7RW5lfS5pbnNlcnRDb2x1bW5PblRoZUxlZnRgLENWPWAke0VuZX0uaW5zZXJ0Q29sdW1uT25UaGVSaWdodGAsU1Y9YCR7'@;
put 'RW5lfS5yZW1vdmVSb3dgLE1WPWAke0VuZX0ucmVtb3ZlQ29sdW1uYCx4Vj1gJHtFbmV9LnVuZG9gLEVWPWAke0VuZX0ucmVkb2Asa1Y9YCR7RW5lfS5yZWFkT25seWAsQVY9YCR7RW5lfS5jbGVhckNvbHVtbmAsVFY9YCR7RW5lfS5jb3B5YCxEVj1gJHtFbmV9LmNvcHlXaXRoSGVhZGVyc2As'@;
put 'SVY9YCR7RW5lfS5jb3B5V2l0aEdyb3VwSGVhZGVyc2AsTFY9YCR7RW5lfS5jb3B5SGVhZGVyc09ubHlgLFJWPWAke0VuZX0uY3V0YCxPVj1gJHtFbmV9LmZyZWV6ZUNvbHVtbmAsUFY9YCR7RW5lfS51bmZyZWV6ZUNvbHVtbmAsRlY9YCR7RW5lfS5tZXJnZUNlbGxzYCxIVj1gJHtFbmV9LnVu'@;
put 'bWVyZ2VDZWxsc2AsTlY9YCR7RW5lfS5hZGRDb21tZW50YCxWVj1gJHtFbmV9LmVkaXRDb21tZW50YCxCVj1gJHtFbmV9LnJlbW92ZUNvbW1lbnRgLGpWPWAke0VuZX0ucmVhZE9ubHlDb21tZW50YCx6Vj1gJHtFbmV9LmFsaWduYCxVVj1gJHtFbmV9LmFsaWduLmxlZnRgLFpWPWAke0VuZX0u'@;
put 'YWxpZ24uY2VudGVyYCxZVj1gJHtFbmV9LmFsaWduLnJpZ2h0YCxXVj1gJHtFbmV9LmFsaWduLmp1c3RpZnlgLEdWPWAke0VuZX0uYWxpZ24udG9wYCwkVj1gJHtFbmV9LmFsaWduLm1pZGRsZWAscVY9YCR7RW5lfS5hbGlnbi5ib3R0b21gLEtWPWAke0VuZX0uYm9yZGVyc2AsWFY9YCR7RW5l'@;
put 'fS5ib3JkZXJzLnRvcGAsSlY9YCR7RW5lfS5ib3JkZXJzLnJpZ2h0YCxRVj1gJHtFbmV9LmJvcmRlcnMuYm90dG9tYCxlQj1gJHtFbmV9LmJvcmRlcnMubGVmdGAsdEI9YCR7RW5lfS5ib3JkZXJzLnJlbW92ZWAsbkI9YCR7RW5lfS5uZXN0ZWRIZWFkZXJzLmluc2VydENoaWxkUm93YCxyQj1g'@;
put 'JHtFbmV9Lm5lc3RlZEhlYWRlcnMuZGV0YWNoRnJvbVBhcmVudGAsaUI9YCR7RW5lfS5oaWRlQ29sdW1uYCxvQj1gJHtFbmV9LnNob3dDb2x1bW5gLHNCPWAke0VuZX0uaGlkZVJvd2AsYUI9YCR7RW5lfS5zaG93Um93YCwkdT0iRmlsdGVyczoiLHlsPWAkeyR1fWNvbmRpdGlvbnNgLExrPWAk'@;
put 'e3lsfS5ub25lYCxsQj1gJHt5bH0uaXNFbXB0eWAsY0I9YCR7eWx9LmlzTm90RW1wdHlgLHVCPWAke3lsfS5pc0VxdWFsVG9gLGRCPWAke3lsfS5pc05vdEVxdWFsVG9gLGhCPWAke3lsfS5iZWdpbnNXaXRoYCxmQj1gJHt5bH0uZW5kc1dpdGhgLHBCPWAke3lsfS5jb250YWluc2AsZ0I9YCR7'@;
put 'eWx9LmRvZXNOb3RDb250YWluYCxqVGU9YCR7eWx9LmJ5VmFsdWVgLG1CPWAke3lsfS5ncmVhdGVyVGhhbmAsdkI9YCR7eWx9LmdyZWF0ZXJUaGFuT3JFcXVhbFRvYCxfQj1gJHt5bH0ubGVzc1RoYW5gLGJCPWAke3lsfS5sZXNzVGhhbk9yRXF1YWxUb2AseUI9YCR7eWx9LmlzQmV0d2VlbmAs'@;
put 'd0I9YCR7eWx9LmlzTm90QmV0d2VlbmAsQ0I9YCR7eWx9LmFmdGVyYCxTQj1gJHt5bH0uYmVmb3JlYCxNQj1gJHt5bH0udG9kYXlgLHhCPWAke3lsfS50b21vcnJvd2AsRUI9YCR7eWx9Lnllc3RlcmRheWAsa0I9YCR7JHV9bGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uYCxBQj1gJHskdX1sYWJl'@;
put 'bHMuZmlsdGVyQnlWYWx1ZWAsVEI9YCR7JHV9bGFiZWxzLmNvbmp1bmN0aW9uYCxSaz1gJHskdX1sYWJlbHMuZGlzanVuY3Rpb25gLE9rPWAkeyR1fXZhbHVlcy5ibGFua0NlbGxzYCxEQj1gJHskdX1idXR0b25zLnNlbGVjdEFsbGAsSUI9YCR7JHV9YnV0dG9ucy5jbGVhcmAsTEI9YCR7JHV9'@;
put 'YnV0dG9ucy5va2AsUkI9YCR7JHV9YnV0dG9ucy5jYW5jZWxgLE9CPWAkeyR1fWJ1dHRvbnMucGxhY2Vob2xkZXIuc2VhcmNoYCxQQj1gJHskdX1idXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlYCxGQj1gJHskdX1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYCxrbmU9e2xhbmd1YWdl'@;
put 'Q29kZToiZW4tVVMiLFtfVl06Ik5vIGF2YWlsYWJsZSBvcHRpb25zIixbYlZdOiJJbnNlcnQgcm93IGFib3ZlIixbeVZdOiJJbnNlcnQgcm93IGJlbG93Iixbd1ZdOiJJbnNlcnQgY29sdW1uIGxlZnQiLFtDVl06Ikluc2VydCBjb2x1bW4gcmlnaHQiLFtTVl06WyJSZW1vdmUgcm93IiwiUmVt'@;
put 'b3ZlIHJvd3MiXSxbTVZdOlsiUmVtb3ZlIGNvbHVtbiIsIlJlbW92ZSBjb2x1bW5zIl0sW3hWXToiVW5kbyIsW0VWXToiUmVkbyIsW2tWXToiUmVhZCBvbmx5IixbQVZdOiJDbGVhciBjb2x1bW4iLFt6Vl06IkFsaWdubWVudCIsW1VWXToiTGVmdCIsW1pWXToiQ2VudGVyIixbWVZdOiJSaWdo'@;
put 'dCIsW1dWXToiSnVzdGlmeSIsW0dWXToiVG9wIixbJFZdOiJNaWRkbGUiLFtxVl06IkJvdHRvbSIsW09WXToiRnJlZXplIGNvbHVtbiIsW1BWXToiVW5mcmVlemUgY29sdW1uIixbS1ZdOiJCb3JkZXJzIixbWFZdOiJUb3AiLFtKVl06IlJpZ2h0IixbUVZdOiJCb3R0b20iLFtlQl06IkxlZnQi'@;
put 'LFt0Ql06IlJlbW92ZSBib3JkZXIocykiLFtOVl06IkFkZCBjb21tZW50IixbVlZdOiJFZGl0IGNvbW1lbnQiLFtCVl06IkRlbGV0ZSBjb21tZW50IixbalZdOiJSZWFkLW9ubHkgY29tbWVudCIsW0ZWXToiTWVyZ2UgY2VsbHMiLFtIVl06IlVubWVyZ2UgY2VsbHMiLFtUVl06IkNvcHkiLFtE'@;
put 'Vl06WyJDb3B5IHdpdGggaGVhZGVyIiwiQ29weSB3aXRoIGhlYWRlcnMiXSxbSVZdOlsiQ29weSB3aXRoIGdyb3VwIGhlYWRlciIsIkNvcHkgd2l0aCBncm91cCBoZWFkZXJzIl0sW0xWXTpbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdLFtSVl06IkN1dCIsW25CXToi'@;
put 'SW5zZXJ0IGNoaWxkIHJvdyIsW3JCXToiRGV0YWNoIGZyb20gcGFyZW50IixbaUJdOlsiSGlkZSBjb2x1bW4iLCJIaWRlIGNvbHVtbnMiXSxbb0JdOlsiU2hvdyBjb2x1bW4iLCJTaG93IGNvbHVtbnMiXSxbc0JdOlsiSGlkZSByb3ciLCJIaWRlIHJvd3MiXSxbYUJdOlsiU2hvdyByb3ciLCJT'@;
put 'aG93IHJvd3MiXSxbTGtdOiJOb25lIixbbEJdOiJJcyBlbXB0eSIsW2NCXToiSXMgbm90IGVtcHR5IixbdUJdOiJJcyBlcXVhbCB0byIsW2RCXToiSXMgbm90IGVxdWFsIHRvIixbaEJdOiJCZWdpbnMgd2l0aCIsW2ZCXToiRW5kcyB3aXRoIixbcEJdOiJDb250YWlucyIsW2dCXToiRG9lcyBu'@;
put 'b3QgY29udGFpbiIsW21CXToiR3JlYXRlciB0aGFuIixbdkJdOiJHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iLFtfQl06Ikxlc3MgdGhhbiIsW2JCXToiTGVzcyB0aGFuIG9yIGVxdWFsIHRvIixbeUJdOiJJcyBiZXR3ZWVuIixbd0JdOiJJcyBub3QgYmV0d2VlbiIsW0NCXToiQWZ0ZXIiLFtT'@;
put 'Ql06IkJlZm9yZSIsW01CXToiVG9kYXkiLFt4Ql06IlRvbW9ycm93IixbRUJdOiJZZXN0ZXJkYXkiLFtPa106IkJsYW5rIGNlbGxzIixba0JdOiJGaWx0ZXIgYnkgY29uZGl0aW9uIixbQUJdOiJGaWx0ZXIgYnkgdmFsdWUiLFtUQl06IkFuZCIsW1JrXToiT3IiLFtEQl06IlNlbGVjdCBhbGwi'@;
put 'LFtJQl06IkNsZWFyIixbTEJdOiJPSyIsW1JCXToiQ2FuY2VsIixbT0JdOiJTZWFyY2giLFtQQl06IlZhbHVlIixbRkJdOiJTZWNvbmQgdmFsdWUifSx6VGU9VixIQj1rbmUubGFuZ3VhZ2VDb2RlLHtyZWdpc3RlcjpVVGUsZ2V0SXRlbTpBbmUsaGFzSXRlbTpaVGUsZ2V0VmFsdWVzOllUZX09'@;
put 'cGQoImxhbmd1YWdlc0RpY3Rpb25hcmllcyIpO2Z1bmN0aW9uIFRuZShjLGwpe2xldCBhPWMsZD1sO3JldHVybiB1cyhjKSYmKGQ9YyxhPWQubGFuZ3VhZ2VDb2RlKSxmdW5jdGlvbiBXVGUoYyxsKXtjIT09SEImJmZ1bmN0aW9uIFBUZShjLGwpe2RzKGwsKGEsZCk9PntMYShjW2RdKSYmKGNb'@;
put 'ZF09YSl9KX0obCxBbmUoSEIpKX0oYSxkKSxVVGUoYSx5dShkKSkseXUoZCl9ZnVuY3Rpb24gRG5lKGMpe3JldHVybiBOQihjKT95dShBbmUoYykpOm51bGx9ZnVuY3Rpb24gTkIoYyl7cmV0dXJuIFpUZShjKX1mdW5jdGlvbiBJbmUoYyxsLGEpe2NvbnN0IGQ9RG5lKGMpO2lmKG51bGw9PT1k'@;
put 'KXJldHVybiBudWxsO2NvbnN0IGg9ZFtsXTtpZihMYShoKSlyZXR1cm4gbnVsbDtjb25zdCBmPWZ1bmN0aW9uICRUZShjLGwpe2xldCBhPWM7cmV0dXJuIERuKGZ1bmN0aW9uIEJUZSgpe3JldHVybiBOVGUoKX0oKSxkPT57YT1kKGMsbCl9KSxhfShoLGEpO3JldHVybiBBcnJheS5pc0FycmF5'@;
put 'KGYpP2ZbMF06Zn1UbmUoa25lKTtjb25zdCBQaz0iYWN0aXZlLWhlYWRlciIsRms9ImFyZWEiLGJ5PSJjZWxsIixWQj0iZmlsbCIseXk9ImhlYWRlciIsQkI9ImN1c3RvbS1zZWxlY3Rpb24iLFFUZT1jbGFzcyBKVGV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnNldHRpbmdzPWwsdGhpcy5jZWxs'@;
put 'UmFuZ2U9YXx8bnVsbCx0aGlzLmluc3RhbmNlQm9yZGVycz17fSx0aGlzLmNsYXNzTmFtZXM9W3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lXSx0aGlzLmNsYXNzTmFtZUdlbmVyYXRvcj10aGlzLmxpbmVhckNsYXNzTmFtZUdlbmVyYXRvcih0aGlzLnNldHRpbmdzLmNsYXNzTmFtZSx0aGlzLnNl'@;
put 'dHRpbmdzLmxheWVyTGV2ZWwpfWdldEJvcmRlcihsKXtyZXR1cm4gdGhpcy5pbnN0YW5jZUJvcmRlcnNbbC5ndWlkXXx8KHRoaXMuaW5zdGFuY2VCb3JkZXJzW2wuZ3VpZF09bmV3IGNsYXNzIEtUZXtjb25zdHJ1Y3RvcihsLGEpe2EmJih0aGlzLmV2ZW50TWFuYWdlcj1sLmV2ZW50TWFuYWdl'@;
put 'cix0aGlzLmluc3RhbmNlPWwsdGhpcy53b3Q9bCx0aGlzLnNldHRpbmdzPWEsdGhpcy5tb3VzZURvd249ITEsdGhpcy5tYWluPW51bGwsdGhpcy50b3A9bnVsbCx0aGlzLmJvdHRvbT1udWxsLHRoaXMuc3RhcnQ9bnVsbCx0aGlzLmVuZD1udWxsLHRoaXMudG9wU3R5bGU9bnVsbCx0aGlzLmJv'@;
put 'dHRvbVN0eWxlPW51bGwsdGhpcy5zdGFydFN0eWxlPW51bGwsdGhpcy5lbmRTdHlsZT1udWxsLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlPXt3aWR0aDoiNnB4IixoZWlnaHQ6IjZweCIsYm9yZGVyV2lkdGg6IjFweCIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJDb2xvcjoiI0ZGRiJ9LHRo'@;
put 'aXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQ9LXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLHRoaXMuY29ybmVyPW51bGwsdGhpcy5jb3JuZXJTdHlsZT1udWxsLHRoaXMuY3JlYXRlQm9yZGVycyhhKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCkpfXJlZ2lz'@;
put 'dGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsKCk9PnRoaXMub25Nb3VzZURvd24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3Vz'@;
put 'ZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSk7Zm9yKGxldCBhPTAsZD10aGlzLm1haW4uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdLCJtb3VzZWVudGVyIixmPT50aGlzLm9uTW91c2VF'@;
put 'bnRlcihmLHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdKSl9b25Nb3VzZURvd24oKXt0aGlzLm1vdXNlRG93bj0hMH1vbk1vdXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIobCxhKXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndvdC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVy'@;
put 'T25Nb3VzZURvd25PdmVyIikpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSx2MihsKTtjb25zdCBkPXRoaXMsaD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keSxmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmV2ZW50TWFuYWdlci5hZGRF'@;
put 'dmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24gVChXKXsoZnVuY3Rpb24gXyhXKXtpZihXLmNsaWVudFk8TWF0aC5mbG9vcihmLnRvcCl8fFcuY2xpZW50WT5NYXRoLmNlaWwoZi50b3ArZi5oZWlnaHQpfHxXLmNsaWVudFg8TWF0aC5mbG9vcihmLmxlZnQpfHxXLmNsaWVudFg+'@;
put 'TWF0aC5jZWlsKGYubGVmdCtmLndpZHRoKSlyZXR1cm4hMH0pKFcpJiYoZC5ldmVudE1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLFQpLGEuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0pfWNyZWF0ZUJvcmRlcnMobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMu'@;
put 'd290O3RoaXMubWFpbj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnN0IGQ9WyJ0b3AiLCJzdGFydCIsImJvdHRvbSIsImVuZCIsImNvcm5lciJdO2xldCBoPXRoaXMubWFpbi5zdHlsZTtoLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC50b3A9MCxoLmxlZnQ9MDtmb3IobGV0IFQ9MDtUPDU7VCsr'@;
put 'KXtjb25zdCBXPWRbVF0saWU9YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZS5jbGFzc05hbWU9YHd0Qm9yZGVyICR7dGhpcy5zZXR0aW5ncy5jbGFzc05hbWV8fCIifWAsdGhpcy5zZXR0aW5nc1tXXSYmdGhpcy5zZXR0aW5nc1tXXS5oaWRlJiYoaWUuY2xhc3NOYW1lKz0iIGhpZGRlbiIpLGg9'@;
put 'aWUuc3R5bGUsaC5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5zZXR0aW5nc1tXXSYmdGhpcy5zZXR0aW5nc1tXXS5jb2xvcj90aGlzLnNldHRpbmdzW1ddLmNvbG9yOmwuYm9yZGVyLmNvbG9yLGguaGVpZ2h0PXRoaXMuc2V0dGluZ3NbV10mJnRoaXMuc2V0dGluZ3NbV10ud2lkdGg/YCR7dGhpcy5z'@;
put 'ZXR0aW5nc1tXXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lkdGh9cHhgLGgud2lkdGg9dGhpcy5zZXR0aW5nc1tXXSYmdGhpcy5zZXR0aW5nc1tXXS53aWR0aD9gJHt0aGlzLnNldHRpbmdzW1ddLndpZHRofXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAsdGhpcy5tYWluLmFwcGVuZENoaWxk'@;
put 'KGllKX10aGlzLnRvcD10aGlzLm1haW4uY2hpbGROb2Rlc1swXSx0aGlzLnN0YXJ0PXRoaXMubWFpbi5jaGlsZE5vZGVzWzFdLHRoaXMuYm90dG9tPXRoaXMubWFpbi5jaGlsZE5vZGVzWzJdLHRoaXMuZW5kPXRoaXMubWFpbi5jaGlsZE5vZGVzWzNdLHRoaXMudG9wU3R5bGU9dGhpcy50b3Au'@;
put 'c3R5bGUsdGhpcy5zdGFydFN0eWxlPXRoaXMuc3RhcnQuc3R5bGUsdGhpcy5ib3R0b21TdHlsZT10aGlzLmJvdHRvbS5zdHlsZSx0aGlzLmVuZFN0eWxlPXRoaXMuZW5kLnN0eWxlLHRoaXMuY29ybmVyPXRoaXMubWFpbi5jaGlsZE5vZGVzWzRdLHRoaXMuY29ybmVyLmNsYXNzTmFtZSs9IiBj'@;
put 'b3JuZXIiLHRoaXMuY29ybmVyU3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmhlaWdodD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsdGhpcy5jb3JuZXJTdHls'@;
put 'ZS5ib3JkZXI9W3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxlLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCIgIiksbTIoKSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFu'@;
put 'ZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTpmfT10aGlzLndvdDtsZXQgXz1mLmJvcmRlcnNIb2xkZXI7X3x8KF89YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxfLmNsYXNzTmFtZT0iaHRCb3JkZXJzIixmLmJvcmRlcnNIb2xkZXI9XyxmLnNwcmVhZGVyLmFwcGVuZENoaWxk'@;
put 'KF8pKSxfLmFwcGVuZENoaWxkKHRoaXMubWFpbil9Y3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy53b3Q7dGhpcy5zZWxlY3Rpb25IYW5kbGVzPXt0b3A6bC5jcmVhdGVFbGVtZW50KCJESVYiKSx0b3BIaXRBcmVhOmwuY3JlYXRlRWxl'@;
put 'bWVudCgiRElWIiksYm90dG9tOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpfSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUiLHRoaXMu'@;
put 'c2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlIGJvdHRv'@;
put 'bVJpZ2h0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXM9'@;
put 'e3RvcDp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLnN0eWxlLHRvcEhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuc3R5bGUsYm90dG9tOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uc3R5bGUsYm90dG9tSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMu'@;
put 'Ym90dG9tSGl0QXJlYS5zdHlsZX0sZHMoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiI0MHB4Iix3aWR0aDoiNDBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDQwLzEuNSwxMCl9cHhgfSwoXyxUKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJl'@;
put 'YVtUXT1fLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYVtUXT1ffSksZHMoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiIxMHB4Iix3aWR0aDoiMTBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDEwLzEuNSwxMCl9cHhgLGJhY2tncm91bmQ6IiNGNUY1'@;
put 'RkYiLGJvcmRlcjoiMXB4IHNvbGlkICM0Mjg1YzgifSwoXyxUKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tW1RdPV8sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BbVF09X30pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMu'@;
put 'dG9wKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhp'@;
put 'dEFyZWEpfWlzUGFydFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLndvdC5zZWxlY3Rpb25zLmNyZWF0ZU9yR2V0QXJlYSgpO3JldHVybiEoIWQuY2VsbFJhbmdlfHxsPT09ZC5jZWxsUmFuZ2UudG8ucm93JiZhPT09ZC5jZWxsUmFuZ2UudG8uY29sKX11cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhh'@;
put 'bmRsZXNQb3NpdGlvbihsLGEsZCxoLGYsXyl7Y29uc3QgVz10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKT8icmlnaHQiOiJsZWZ0Iix7dG9wOmllLHRvcEhpdEFyZWE6Z2UsYm90dG9tOndlLGJvdHRvbUhpdEFyZWE6RWV9PXRoaXMuc2VsZWN0aW9uSGFuZGxlcy5z'@;
put 'dHlsZXMsWmU9cGFyc2VJbnQoaWUuYm9yZGVyV2lkdGgsMTApLG90PXBhcnNlSW50KGllLndpZHRoLDEwKSxldD1wYXJzZUludChnZS53aWR0aCwxMCkseXQ9dGhpcy53b3Qud3RUYWJsZS5nZXRXaWR0aCgpLGt0PXRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0KCk7aWUudG9wPWAke3BhcnNl'@;
put 'SW50KGQtb3QtMSwxMCl9cHhgLGllW1ddPWAke3BhcnNlSW50KGgtb3QtMSwxMCl9cHhgLGdlLnRvcD1gJHtwYXJzZUludChkLWV0LzQqMywxMCl9cHhgLGdlW1ddPWAke3BhcnNlSW50KGgtZXQvNCozLDEwKX1weGA7Y29uc3QgU3Q9TWF0aC5taW4ocGFyc2VJbnQoaCtmLDEwKSx5dC1vdC0y'@;
put 'KlplKSxRdD1NYXRoLm1pbihwYXJzZUludChoK2YtZXQvNCwxMCkseXQtZXQtMipaZSk7d2VbV109YCR7U3R9cHhgLEVlW1ddPWAke1F0fXB4YDtjb25zdCBybj1NYXRoLm1pbihwYXJzZUludChkK18sMTApLGt0LW90LTIqWmUpLHZuPU1hdGgubWluKHBhcnNlSW50KGQrXy1ldC80LDEwKSxr'@;
put 'dC1ldC0yKlplKTt3ZS50b3A9YCR7cm59cHhgLEVlLnRvcD1gJHt2bn1weGAsdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSYmdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSgpPyhpZS5kaXNwbGF5PSJibG9jayIsZ2UuZGlzcGxheT0iYmxvY2siLHRoaXMuaXNQ'@;
put 'YXJ0UmFuZ2UobCxhKT8od2UuZGlzcGxheT0ibm9uZSIsRWUuZGlzcGxheT0ibm9uZSIpOih3ZS5kaXNwbGF5PSJibG9jayIsRWUuZGlzcGxheT0iYmxvY2siKSk6KGllLmRpc3BsYXk9Im5vbmUiLHdlLmRpc3BsYXk9Im5vbmUiLGdlLmRpc3BsYXk9Im5vbmUiLEVlLmRpc3BsYXk9Im5vbmUi'@;
put 'KSxsPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKXx8YT09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT8oaWUuekluZGV4PSI5OTk5IixnZS56SW5kZXg9Ijk5OTkiKTooaWUuekluZGV4PSIiLGdlLnpJ'@;
put 'bmRleD0iIil9YXBwZWFyKGwpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2NvbnN0e3d0VGFibGU6YSxyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMud290O2xldCBmLF8sVCxXLGllLGdlO2NvbnN0IHdlPWEuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtmb3IobGV0IF9yPTA7X3I8'@;
put 'd2U7X3IrPTEpe2NvbnN0IHZ0PWEucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoX3IpO2lmKHZ0Pj1sWzBdJiZ2dDw9bFsyXSl7Zj12dCxpZT1sWzBdO2JyZWFrfX1mb3IobGV0IF9yPXdlLTE7X3I+PTA7X3ItPTEpe2NvbnN0IHZ0PWEucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoX3Ip'@;
put 'O2lmKHZ0Pj1sWzBdJiZ2dDw9bFsyXSl7Xz12dDticmVha319Y29uc3QgRWU9YS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgX3I9MDtfcjxFZTtfcis9MSl7Y29uc3QgdnQ9YS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShfcik7aWYodnQ+PWxbMV0mJnZ0PD1sWzNd'@;
put 'KXtUPXZ0LGdlPWxbMV07YnJlYWt9fWZvcihsZXQgX3I9RWUtMTtfcj49MDtfci09MSl7Y29uc3QgdnQ9YS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShfcik7aWYodnQ+PWxbMV0mJnZ0PD1sWzNdKXtXPXZ0O2JyZWFrfX1pZih2b2lkIDA9PT1mfHx2b2lkIDA9PT1UKXJldHVybiB2'@;
put 'b2lkIHRoaXMuZGlzYXBwZWFyKCk7bGV0IFplPWEuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGYsVCkpO2NvbnN0IG90PWYhPT1ffHxUIT09VyxldD1vdD9hLmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhfLFcpKTpaZSx5dD1xbChaZSksa3Q9b3Q/cWwoZXQp'@;
put 'Onl0LFN0PXFsKGEuVEFCTEUpLFF0PXdhKGEuVEFCTEUpLHJuPXl0LnRvcCx2bj15dC5sZWZ0LE5uPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCBjcj0wLERyPTA7aWYoTm4pe2NvbnN0IF9yPXdhKFplKTtEcj12bitfci1rdC5sZWZ0LGNyPWguaW5uZXJX'@;
put 'aWR0aC12bi1fci0oaC5pbm5lcldpZHRoLVN0LmxlZnQtUXQpLTF9ZWxzZSBEcj1rdC5sZWZ0K3dhKGV0KS12bixjcj12bi1TdC5sZWZ0LTE7aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGYsXykpe2NvbnN0IF9yPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMi'@;
put 'LFQsVyxpZSxTdCk7bGV0IHZ0PW51bGw7X3ImJihbdnQsY3IsRHJdPV9yKSx2dCYmKFplPXZ0KX1sZXQgX2k9cm4tU3QudG9wLTEsbGk9a3QudG9wK2FsKGV0KS1ybjtpZih0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoVCxXKSl7Y29uc3QgX3I9dGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRl'@;
put 'cigicm93cyIsZixfLGdlLFN0KTtsZXQgdnQ9bnVsbDtfciYmKFt2dCxfaSxsaV09X3IpLHZ0JiYoWmU9dnQpfWNvbnN0IG1yPXpwKFplLGgpO3BhcnNlSW50KG1yLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYoX2krPTEsbGk9bGk+MD9saS0xOjApLHBhcnNlSW50KG1yW05uPyJib3JkZXJSaWdo'@;
put 'dFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJihjcis9MSxEcj1Ecj4wP0RyLTE6MCk7Y29uc3QgRWk9Tm4/InJpZ2h0IjoibGVmdCI7dGhpcy50b3BTdHlsZS50b3A9YCR7X2l9cHhgLHRoaXMudG9wU3R5bGVbRWldPWAke2NyfXB4YCx0aGlzLnRvcFN0eWxlLndpZHRoPWAke0Ry'@;
put 'fXB4YCx0aGlzLnRvcFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnN0YXJ0U3R5bGUudG9wPWAke19pfXB4YCx0aGlzLnN0YXJ0U3R5bGVbRWldPWAke2NyfXB4YCx0aGlzLnN0YXJ0U3R5bGUuaGVpZ2h0PWAke2xpfXB4YCx0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0'@;
put 'IFpyPU1hdGguZmxvb3IodGhpcy5zZXR0aW5ncy5ib3JkZXIud2lkdGgvMik7dGhpcy5ib3R0b21TdHlsZS50b3A9X2krbGktWnIrInB4Iix0aGlzLmJvdHRvbVN0eWxlW0VpXT1gJHtjcn1weGAsdGhpcy5ib3R0b21TdHlsZS53aWR0aD1gJHtEcn1weGAsdGhpcy5ib3R0b21TdHlsZS5kaXNw'@;
put 'bGF5PSJibG9jayIsdGhpcy5lbmRTdHlsZS50b3A9YCR7X2l9cHhgLHRoaXMuZW5kU3R5bGVbRWldPWNyK0RyLVpyKyJweCIsdGhpcy5lbmRTdHlsZS5oZWlnaHQ9YCR7bGkrMX1weGAsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJibG9jayI7bGV0IEZuPXRoaXMuc2V0dGluZ3MuYm9yZGVyLmNv'@;
put 'cm5lclZpc2libGU7Rm49ImZ1bmN0aW9uIj09dHlwZW9mIEZuP0ZuKHRoaXMuc2V0dGluZ3MubGF5ZXJMZXZlbCk6Rm47Y29uc3QgRnI9dGhpcy53b3QuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixfLFcpO2xldFtRbixNcl09W18sV107aWYoRnImJkFycmF5LmlzQXJyYXko'@;
put 'RnIpJiYoWywsUW4sTXJdPUZyKSxtMigpfHwhRm58fHRoaXMuaXNQYXJ0UmFuZ2UoUW4sTXIpKXRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7ZWxzZXt0aGlzLmNvcm5lclN0eWxlLnRvcD1faStsaSt0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LTErInB4Iix0aGlzLmNvcm5l'@;
put 'clN0eWxlW0VpXT1jcitEcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LTErInB4Iix0aGlzLmNvcm5lclN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRT'@;
put 'dHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2xldCBfcj12ZyhhLlRBQkxFKTtjb25zdCB2dD1fcj09PWg7dnQmJihfcj1kLmRvY3VtZW50RWxlbWVudCk7Y29uc3QgT3Q9cGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsY249cGFy'@;
put 'c2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yO2lmKFc9PT10aGlzLndvdC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xKXtjb25zdCBFbj12dD9ldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OmV0Lm9mZnNldExlZnQ7bGV0IE9uPSExLEpuPTA7Tm4/'@;
put 'KEpuPUVuLXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLE9uPUpuPDApOihKbj1Fbit3YShldCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsT249Sm4+PWl5KF9yKSksT24mJih0aGlzLmNvcm5lclN0eWxlW0VpXT1gJHtN'@;
put 'YXRoLmZsb29yKGNyK0RyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtT3QpfXB4YCx0aGlzLmNvcm5lclN0eWxlW05uPyJib3JkZXJMZWZ0V2lkdGgiOiJib3JkZXJSaWdodFdpZHRoIl09MCl9Xz09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEmJih2dD9ldC5nZXRC'@;
put 'b3VuZGluZ0NsaWVudFJlY3QoKS50b3A6ZXQub2Zmc2V0VG9wKSthbChldCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yPj1qZihfcikmJih0aGlzLmNvcm5lclN0eWxlLnRvcD1gJHtNYXRoLmZsb29yKF9pK2xpK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRP'@;
put 'ZmZzZXQtY24pfXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPTApLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0iYmxvY2sifW0yKCkmJnRoaXMudXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24oXyxXLF9pLGNyLERyLGxpKX1pc0VudGlyZUNvbHVt'@;
put 'blNlbGVjdGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSYmYT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNFbnRpcmVSb3dTZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRG'@;
put 'aXJzdFJlbmRlcmVkQ29sdW1uKCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWdldERpbWVuc2lvbnNGcm9tSGVhZGVyKGwsYSxkLGgsZil7Y29uc3R7d3RUYWJsZTpffT10aGlzLndvdCxUPV8ud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2xldCBXPW51'@;
put 'bGwsaWU9bnVsbCxnZT1udWxsLHdlPW51bGwsRWU9bnVsbCxaZT1udWxsLG90PW51bGwsZXQ9bnVsbDtzd2l0Y2gobCl7Y2FzZSJyb3dzIjpXPWZ1bmN0aW9uKCl7cmV0dXJuIF8uZ2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyl9LGllPWZ1bmN0aW9uKCl7cmV0dXJuIGFsKC4uLmFyZ3VtZW50'@;
put 'cyl9LGdlPSJodF9fc2VsZWN0aW9uLS1yb3dzIixaZT0idG9wIjticmVhaztjYXNlImNvbHVtbnMiOlc9ZnVuY3Rpb24oKXtyZXR1cm4gXy5nZXRDb2x1bW5IZWFkZXIoLi4uYXJndW1lbnRzKX0saWU9ZnVuY3Rpb24oKXtyZXR1cm4gd2EoLi4uYXJndW1lbnRzKX0sZ2U9Imh0X19zZWxlY3Rp'@;
put 'b24tLWNvbHVtbnMiLFplPSJsZWZ0In1pZihULmNsYXNzTGlzdC5jb250YWlucyhnZSkpe2NvbnN0IHl0PXRoaXMud290LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYob3Q9VyhhLHl0LWgpLGV0PVcoZCx5dC1oKSwhb3R8fCFldClyZXR1cm4hMTtjb25zdCBrdD1xbChv'@;
put 'dCksU3Q9cWwoZXQpO3JldHVybiBvdCYmZXQmJih3ZT1rdFtaZV0tZltaZV0tMSxFZT1TdFtaZV0raWUoZXQpLWt0W1plXSksW290LHdlLEVlXX1yZXR1cm4hMX1jaGFuZ2VCb3JkZXJTdHlsZShsLGEpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZSxoPWFbbF07IWh8fGguaGlkZT9waSh0aGlzW2xd'@;
put 'LCJoaWRkZW4iKTooQm8odGhpc1tsXSwiaGlkZGVuIikmJldvKHRoaXNbbF0sImhpZGRlbiIpLGQuYmFja2dyb3VuZENvbG9yPWguY29sb3IsKCJ0b3AiPT09bHx8ImJvdHRvbSI9PT1sKSYmKGQuaGVpZ2h0PWAke2gud2lkdGh9cHhgKSwoInN0YXJ0Ij09PWx8fCJlbmQiPT09bCkmJihkLndp'@;
put 'ZHRoPWAke2gud2lkdGh9cHhgKSl9Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCl7Y29uc3QgZD10aGlzW2xdLnN0eWxlO2QuYmFja2dyb3VuZENvbG9yPSIjMDAwIixkLndpZHRoPSIxcHgiLGQuaGVpZ2h0PSIxcHgifXRvZ2dsZUhpZGRlbkNsYXNzKGwsYSl7dGhpcy5jaGFuZ2VCb3Jk'@;
put 'ZXJUb0RlZmF1bHRTdHlsZShsKSxhP3BpKHRoaXNbbF0sImhpZGRlbiIpOldvKHRoaXNbbF0sImhpZGRlbiIpfWRpc2FwcGVhcigpe3RoaXMudG9wU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9u'@;
put 'ZSIsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiLG0yKCkmJih0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxh'@;
put 'eT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b20uZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX1kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVu'@;
put 'dHNPbmx5KCksdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX19KGwsdGhpcy5zZXR0aW5ncykpLHRoaXMuaW5zdGFuY2VCb3JkZXJzW2wuZ3VpZF19aXNFbXB0eSgpe3JldHVybiBudWxsPT09dGhpcy5jZWxsUmFuZ2V9YWRkKGwpe3JldHVybiB0aGlzLmlzRW1w'@;
put 'dHkoKT90aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShsKTp0aGlzLmNlbGxSYW5nZS5leHBhbmQobCksdGhpc31yZXBsYWNlKGwsYSl7aWYoIXRoaXMuaXNFbXB0eSgpKXtpZih0aGlzLmNlbGxSYW5nZS5mcm9tLmlzRXF1YWwobCkpcmV0dXJuIHRoaXMuY2Vs'@;
put 'bFJhbmdlLmZyb209YSwhMDtpZih0aGlzLmNlbGxSYW5nZS50by5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS50bz1hLCEwfXJldHVybiExfWNsZWFyKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGwsdGhpc31nZXRDb3JuZXJzKCl7Y29uc3QgbD10aGlzLmNlbGxSYW5nZS5n'@;
put 'ZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmNlbGxSYW5nZS5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19YWRkQ2xhc3NBdENvb3JkcyhsLGEsZCxoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1s0XSYmYXJndW1lbnRzWzRdO2NvbnN0IF89bC53dFRhYmxlLmdldENlbGwodGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpO2lmKCJvYmplY3QiPT10eXBlb2YgXyl7bGV0IFQ9aDtmJiYoVD10aGlzLmNsYXNzTmFtZUdlbmVyYXRvcihfKSx0aGlzLmNsYXNzTmFtZXMu'@;
put 'aW5jbHVkZXMoVCl8fHRoaXMuY2xhc3NOYW1lcy5wdXNoKFQpKSxwaShfLFQpfXJldHVybiB0aGlzfWxpbmVhckNsYXNzTmFtZUdlbmVyYXRvcihsLGEpe3JldHVybiBmdW5jdGlvbiBkKGgpe2xldCBmPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50'@;
put 'c1sxXTotMTtpZigwPT09YXx8MD09PWYpcmV0dXJuIGw7bGV0IF89Zj49MD9mOmEsVD1sO3JldHVybiBfLT0xLFQ9Qm8oaCwwPT09Xz9sOmAke2x9LSR7X31gKT9gJHtsfS0ke18rMX1gOmQoaCxfKSxUfX1kcmF3KGwpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiB2b2lkKHRoaXMuc2V0dGlu'@;
put 'Z3MuYm9yZGVyJiZ0aGlzLmdldEJvcmRlcihsKS5kaXNhcHBlYXIoKSk7Y29uc3QgYT1sLnd0VGFibGUuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxkPWwud3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLGg9dGhpcy5nZXRDb3JuZXJzKCksW2YsXyxULFddPWgse2hpZ2hsaWdodEhl'@;
put 'YWRlckNsYXNzTmFtZTppZSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6Z2UsaGlnaGxpZ2h0Um93Q2xhc3NOYW1lOndlLGhpZ2hsaWdodE9ubHlDbG9zZXN0SGVhZGVyOkVlLHNlbGVjdGlvblR5cGU6WmV9PXRoaXMuc2V0dGluZ3Msb3Q9dm9pZCAwPT09WmV8fFsiYWN0aXZlLWhlYWRlciIs'@;
put 'ImhlYWRlciJdLmluY2x1ZGVzKFplKTtpZihvdCYmbnVsbCE9PV8mJm51bGwhPT1XKXtsZXQgZXQ9MDtmb3IobGV0IHl0PTA7eXQ8ZDt5dCs9MSl7Y29uc3Qga3Q9bC53dFRhYmxlLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHl0KTtpZihrdD49XyYma3Q8PVcpe2xldCBTdD1sLnd0'@;
put 'VGFibGUuZ2V0Q29sdW1uSGVhZGVycyhrdCk7Y29uc3QgUXQ9U3QubGVuZ3RoLTE7RWUmJlN0Lmxlbmd0aD4xJiYoU3Q9W1N0W1F0XV0pO2ZvcihsZXQgcm49MDtybjxTdC5sZW5ndGg7cm4rPTEpe2NvbnN0IHZuPVtdO2xldCBObj1TdFtybl07aWUmJnZuLnB1c2goaWUpLGdlJiZ2bi5wdXNo'@;
put 'KGdlKSxybj1FZT9RdDpybjtjb25zdCBjcj1sLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixrdCxybix7c2VsZWN0aW9uVHlwZTpaZSxjb2x1bW5DdXJzb3I6ZXQsc2VsZWN0aW9uV2lkdGg6Vy1fKzEsY2xhc3NOYW1lczp2bn0pO2NyIT09a3QmJihObj1s'@;
put 'Lnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKGNyLHJuKSkscGkoTm4sdm4pfWV0Kz0xfX19aWYobnVsbCE9PWYmJm51bGwhPT1UKXtsZXQgZXQ9MDtmb3IobGV0IHl0PTA7eXQ8YTt5dCs9MSl7Y29uc3Qga3Q9bC53dFRhYmxlLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHl0KTtpZihvdCYm'@;
put 'a3Q+PWYmJmt0PD1UKXtsZXQgU3Q9bC53dFRhYmxlLmdldFJvd0hlYWRlcnMoa3QpO2NvbnN0IFF0PVN0Lmxlbmd0aC0xO0VlJiZTdC5sZW5ndGg+MSYmKFN0PVtTdFtRdF1dKTtmb3IobGV0IHJuPTA7cm48U3QubGVuZ3RoO3JuKz0xKXtjb25zdCB2bj1bXTtsZXQgTm49U3Rbcm5dO2llJiZ2'@;
put 'bi5wdXNoKGllKSx3ZSYmdm4ucHVzaCh3ZSkscm49RWU/UXQ6cm47Y29uc3QgY3I9bC5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsa3Qscm4se3NlbGVjdGlvblR5cGU6WmUscm93Q3Vyc29yOmV0LHNlbGVjdGlvbkhlaWdodDpULWYrMSxjbGFzc05hbWVzOnZu'@;
put 'fSk7Y3IhPT1rdCYmKE5uPWwud3RUYWJsZS5nZXRSb3dIZWFkZXIoY3Iscm4pKSxwaShObix2bil9ZXQrPTF9aWYobnVsbCE9PV8mJm51bGwhPT1XKWZvcihsZXQgU3Q9MDtTdDxkO1N0Kz0xKXtjb25zdCBRdD1sLnd0VGFibGUuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoU3QpO2t0'@;
put 'Pj1mJiZrdDw9VCYmUXQ+PV8mJlF0PD1XP3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxrdCxRdCx0aGlzLnNldHRpbmdzLmNsYXNzTmFtZSx0aGlzLnNldHRpbmdzLm1hcmtJbnRlcnNlY3Rpb25zKTprdD49ZiYma3Q8PVQ/d2UmJnRoaXMuYWRkQ2xh'@;
put 'c3NBdENvb3JkcyhsLGt0LFF0LHdlKTpRdD49XyYmUXQ8PVcmJmdlJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxrdCxRdCxnZSk7Y29uc3Qgcm49bC5nZXRTZXR0aW5nKCJvbkFmdGVyRHJhd1NlbGVjdGlvbiIsa3QsUXQsdGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTsic3RyaW5nIj09dHlw'@;
put 'ZW9mIHJuJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxrdCxRdCxybil9fX1sLmdldFNldHRpbmcoIm9uQmVmb3JlRHJhd0JvcmRlcnMiLGgsdGhpcy5zZXR0aW5ncy5jbGFzc05hbWUpLHRoaXMuc2V0dGluZ3MuYm9yZGVyJiZ0aGlzLmdldEJvcmRlcihsKS5hcHBlYXIoaCl9ZGVzdHJveSgp'@;
put 'e09iamVjdC52YWx1ZXModGhpcy5pbnN0YW5jZUJvcmRlcnMpLmZvckVhY2gobD0+bC5kZXN0cm95KCkpfX07Y29uc3QgaDc9Y2xhc3MgckRlIGV4dGVuZHMgUVRle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxudWxsKSxmdW5jdGlvbiBlRGUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHRE'@;
put 'ZShjKXt2YXIgbD1mdW5jdGlvbiBuRGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZCly'@;
put 'ZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0o'@;
put 'bCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidmlzdWFsQ2VsbFJhbmdlIixudWxsKSx0aGlzLnZpc3VhbENlbGxSYW5nZT1hfHxudWxsLHRoaXMuY29t'@;
put 'bWl0KCl9YWRkKGwpe3JldHVybiBudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2U/dGhpcy52aXN1YWxDZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy52aXN1YWxDZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy52aXN1YWxD'@;
put 'ZWxsUmFuZ2U9bnVsbCxzdXBlci5jbGVhcigpfXRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seShsKXtsZXR7ZnJvbTphLHRvOmR9PWwsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoYSwxKSxmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhkLC0xKTtpZihudWxsPT09'@;
put 'aHx8bnVsbD09PWYpcmV0dXJuIG51bGw7aWYoaC5yb3c+Zi5yb3d8fGguY29sPmYuY29sKXtpZigiaGVhZGVyIiE9PXRoaXMuc2V0dGluZ3MudHlwZSYmImFjdGl2ZS1oZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlKXJldHVybiBudWxsO2g9YSxmPWR9cmV0dXJuIHRoaXMuc2V0dGluZ3Mu'@;
put 'Y3JlYXRlQ2VsbFJhbmdlKGgsaCxmKX1nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE7Y29uc3QgaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRp'@;
put 'bmdzLnJvd0luZGV4TWFwcGVyKCksbC5yb3csYSk7aWYobnVsbD09PWgpcmV0dXJuIG51bGw7Y29uc3QgZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLmNvbHVtbkluZGV4TWFwcGVyKCksbC5jb2wsZCk7cmV0dXJuIG51bGw9PT1mP251bGw6dGhpcy5zZXR0'@;
put 'aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSxkKXtpZihhPDApcmV0dXJuIGE7Y29uc3QgaD1sLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLGQpO3JldHVybiJoZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlJiYiYWN0aXZlLWhlYWRl'@;
put 'ciIhPT10aGlzLnNldHRpbmdzLnR5cGV8fG51bGwhPT1oP2g6LTF9Y29tbWl0KCl7aWYobnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlKXJldHVybiB0aGlzO2NvbnN0IGw9dGhpcy50cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkodGhpcy52aXN1YWxDZWxsUmFuZ2UpO3JldHVybiB0aGlz'@;
put 'LmNlbGxSYW5nZT1udWxsPT09bD9udWxsOnRoaXMuY3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLmZyb20sbC50byksdGhpc31zeW5jV2l0aChsKXtjb25zdCBhPSJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsZD0iVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlv'@;
put 'bigpPzE6LTEsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMobC5mcm9tLmNsb25lKCkubm9ybWFsaXplKCksYSxkKTtpZihudWxsIT09aCYmbC5vdmVybGFwcyhoKSl7aWYobnVsbD09PXRoaXMuY2VsbFJhbmdlKXtjb25zdCBmPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJh'@;
put 'YmxlQ29vcmRzKGgpO3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGYpfXJldHVybiBsLnNldEhpZ2hsaWdodChoKSx0aGlzfXJldHVybiBsLnNldEhpZ2hsaWdodChsLmZyb20pLHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmNl'@;
put 'bGxSYW5nZSxkPW51bGw9PT1sLnJvd3x8bnVsbD09PWEucm93LGg9bnVsbD09PWwuY29sfHxudWxsPT09YS5jb2wsZj10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoZD9udWxsOk1hdGgubWluKGwucm93LGEucm93KSxoP251bGw6TWF0aC5taW4obC5jb2wsYS5jb2wpKSxfPXRoaXMu'@;
put 'c2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhkP251bGw6TWF0aC5tYXgobC5yb3csYS5yb3cpLGg/bnVsbDpNYXRoLm1heChsLmNvbCxhLmNvbCkpO3JldHVybltmLnJvdyxmLmNvbCxfLnJvdyxfLmNvbF19Z2V0VmlzdWFsQ29ybmVycygpe2NvbnN0IGw9dGhpcy5zZXR0aW5ncy5yZW5kZXJh'@;
put 'YmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSksYT10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKSk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1j'@;
put 'cmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKSxoPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGEpO3JldHVybiB0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShkLGQs'@;
put 'aCl9fSx7cmVnaXN0ZXI6ZjcsZ2V0SXRlbTptRGV9PXBkKCJoaWdobGlnaHQvdHlwZXMiKTtmdW5jdGlvbiBwNyhjLGwpe3JldHVybiBtRGUoYykoe3R5cGU6YywuLi5sfSl9ZjcoUGssZnVuY3Rpb24gaURlKGMpe2xldHthY3RpdmVIZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBu'@;
put 'ZXcgaDcoe2hpZ2hsaWdodEhlYWRlckNsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTpQa30pfSksZjcoRmssZnVuY3Rpb24gc0RlKGMpe2xldHtsYXllckxldmVsOmwsYXJlYUNvcm5lclZpc2libGU6YSwuLi5kfT1jO3JldHVybiBuZXcgaDcoe2NsYXNzTmFtZToiYXJlYSIsbWFya0lu'@;
put 'dGVyc2VjdGlvbnM6ITAsbGF5ZXJMZXZlbDpNYXRoLm1pbihsLDcpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTphfSwuLi5kLHNlbGVjdGlvblR5cGU6Rmt9KX0pLGY3KGJ5LGZ1bmN0aW9uIGxEZShjKXtsZXR7Y2VsbENvcm5lclZpc2libGU6bCwuLi5h'@;
put 'fT1jO3JldHVybiBuZXcgaDcoe2NsYXNzTmFtZToiY3VycmVudCIsYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTpieX0pfSksZjcoQkIsZnVuY3Rpb24gdURlKGMpe2xldHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6'@;
put 'YSwuLi5kfT1jO3JldHVybiBuZXcgaDcoey4uLmwsLi4uZCxzZWxlY3Rpb25UeXBlOkJCfSxhKX0pLGY3KFZCLGZ1bmN0aW9uIGhEZShjKXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IGg3KHtjbGFzc05hbWU6ImZpbGwiLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiI2ZmMDAwMCJ9LC4uLmwsc2Vs'@;
put 'ZWN0aW9uVHlwZTpWQn0pfSksZjcoeXksZnVuY3Rpb24gcERlKGMpe2xldHtoZWFkZXJDbGFzc05hbWU6bCxyb3dDbGFzc05hbWU6YSxjb2x1bW5DbGFzc05hbWU6ZCwuLi5ofT1jO3JldHVybiBuZXcgaDcoe2NsYXNzTmFtZToiaGlnaGxpZ2h0IixoaWdobGlnaHRIZWFkZXJDbGFzc05hbWU6'@;
put 'bCxoaWdobGlnaHRSb3dDbGFzc05hbWU6YSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6ZCwuLi5oLGhpZ2hsaWdodE9ubHlDbG9zZXN0SGVhZGVyOiEwLHNlbGVjdGlvblR5cGU6eXl9KX0pO2NsYXNzIHZEZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bCx0aGlzLmxheWVyTGV2ZWw9'@;
put 'MCx0aGlzLmNlbGw9cDcoYnksbCksdGhpcy5maWxsPXA3KFZCLGwpLHRoaXMuYXJlYXM9bmV3IE1hcCx0aGlzLmhlYWRlcnM9bmV3IE1hcCx0aGlzLmFjdGl2ZUhlYWRlcnM9bmV3IE1hcCx0aGlzLmN1c3RvbVNlbGVjdGlvbnM9W119aXNFbmFibGVkRm9yKGwsYSl7bGV0IGQ9bDtsPT09Ynkm'@;
put 'JihkPSJjdXJyZW50Iik7bGV0IGg9dGhpcy5vcHRpb25zLmRpc2FibGVkQ2VsbFNlbGVjdGlvbihhLnJvdyxhLmNvbCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pLCExPT09aHx8QXJyYXkuaXNBcnJheShoKSYmIWguaW5jbHVkZXMoZCl9dXNlTGF5ZXJMZXZlbCgpe3JldHVy'@;
put 'biB0aGlzLmxheWVyTGV2ZWw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsdGhpc31nZXRDZWxsKCl7cmV0dXJuIHRoaXMuY2VsbH1nZXRGaWxsKCl7cmV0dXJuIHRoaXMuZmlsbH1jcmVhdGVPckdldEFyZWEoKXtjb25zdCBsPXRoaXMu'@;
put 'bGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5hcmVhcy5oYXMobCk/YT10aGlzLmFyZWFzLmdldChsKTooYT1wNyhGayx7bGF5ZXJMZXZlbDpsLC4uLnRoaXMub3B0aW9uc30pLHRoaXMuYXJlYXMuc2V0KGwsYSkpLGF9Z2V0QXJlYXMoKXtyZXR1cm5bLi4udGhpcy5hcmVhcy52YWx1ZXMo'@;
put 'KV19Y3JlYXRlT3JHZXRIZWFkZXIoKXtjb25zdCBsPXRoaXMubGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5oZWFkZXJzLmhhcyhsKT9hPXRoaXMuaGVhZGVycy5nZXQobCk6KGE9cDcoeXksey4uLnRoaXMub3B0aW9uc30pLHRoaXMuaGVhZGVycy5zZXQobCxhKSksYX1nZXRIZWFkZXJz'@;
put 'KCl7cmV0dXJuWy4uLnRoaXMuaGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlT3JHZXRBY3RpdmVIZWFkZXIoKXtjb25zdCBsPXRoaXMubGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5hY3RpdmVIZWFkZXJzLmhhcyhsKT9hPXRoaXMuYWN0aXZlSGVhZGVycy5nZXQobCk6KGE9cDcoUGssey4u'@;
put 'LnRoaXMub3B0aW9uc30pLHRoaXMuYWN0aXZlSGVhZGVycy5zZXQobCxhKSksYX1nZXRBY3RpdmVIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlSGVhZGVycy52YWx1ZXMoKV19Z2V0Q3VzdG9tU2VsZWN0aW9ucygpe3JldHVyblsuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnMudmFsdWVz'@;
put 'KCldfWFkZEN1c3RvbVNlbGVjdGlvbihsKXt0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaChwNyhCQix7Li4udGhpcy5vcHRpb25zLC4uLmx9KSl9Y2xlYXIoKXt0aGlzLmNlbGwuY2xlYXIoKSx0aGlzLmZpbGwuY2xlYXIoKSxEbih0aGlzLmFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9'@;
put 'KSxEbih0aGlzLmhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLERuKHRoaXMuYWN0aXZlSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm5bdGhpcy5jZWxsLHRoaXMuZmlsbCwuLi50aGlzLmFyZWFzLnZhbHVlcygpLC4uLnRo'@;
put 'aXMuaGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zXVtTeW1ib2wuaXRlcmF0b3JdKCl9fWNvbnN0IF9EZT12RGU7Y2xhc3MgYkRle2NvbnN0cnVjdG9yKGwpe3RoaXMucmFuZ2VzPVtdLHRoaXMuY3JlYXRlQ2Vs'@;
put 'bFJhbmdlPWx9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5zaXplKCl9c2V0KGwpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31hZGQobCl7cmV0dXJuIHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFu'@;
put 'Z2UobCkpLHRoaXN9cG9wKCl7cmV0dXJuIHRoaXMucmFuZ2VzLnBvcCgpLHRoaXN9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KDApfXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgoLTEpfWluY2x1ZGVzKGwpe3JldHVybiB0aGlzLnJhbmdlcy5zb21lKGE9PmEu'@;
put 'aW5jbHVkZXMobCkpfWNsZWFyKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9c2l6ZSgpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGh9cGVla0J5SW5kZXgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtj'@;
put 'b25zdCBhPXRoaXMuc2l6ZSgpK2wtMTtsZXQgZDtyZXR1cm4gYT49MCYmKGQ9dGhpcy5yYW5nZXNbYV0pLGR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5yYW5nZXNbU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCB5RGU9YkRlO2NsYXNzIExuZXtjb25zdHJ1Y3RvcihsLGEpe3Ro'@;
put 'aXMucmFuZ2U9bCx0aGlzLm9wdGlvbnM9YX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD10aGlzLm9wdGlvbnMuY3JlYXRlQ2VsbENvb3JkcyhsLGEpLGY9dGhpcy5yYW5nZS5j'@;
put 'dXJyZW50KCkuaGlnaGxpZ2h0LHtyb3c6Xyxjb2w6VH09dGhpcy5vcHRpb25zLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhmKTtsZXQgVz1mLGllPTAsZ2U9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixoKSxudWxsIT09XyYmbnVsbCE9PVQpe2xldCB3'@;
put 'ZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCksRWU9dGhpcy5vcHRpb25zLmNvdW50Q29scygpO2NvbnN0IFplPXRoaXMub3B0aW9ucy5maXhlZFJvd3NCb3R0b20oKSxvdD10aGlzLm9wdGlvbnMubWluU3BhcmVSb3dzKCksZXQ9dGhpcy5vcHRpb25zLm1pblNwYXJlQ29scygpLHl0PXRoaXMu'@;
put 'b3B0aW9ucy5hdXRvV3JhcFJvdygpLGt0PXRoaXMub3B0aW9ucy5hdXRvV3JhcENvbCgpO18rbD53ZS0xP2QmJm90PjAmJiEoWmUmJl8+PXdlLVplLTEpPyh0aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLHdlKSx3ZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCkpOmt0JiYo'@;
put 'aC5yb3c9MS13ZSxoLmNvbD1UK2guY29sPT09RWUtMT8xLUVlOjEpOmt0JiZfK2gucm93PDAmJlQraC5jb2w+PTAmJihoLnJvdz13ZS0xLGguY29sPVQraC5jb2w9PT0wP0VlLTE6LTEpLFQraC5jb2w+RWUtMT9kJiZldD4wPyh0aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUi'@;
put 'LEVlKSxFZT10aGlzLm9wdGlvbnMuY291bnRDb2xzKCkpOnl0JiYoaC5yb3c9XytoLnJvdz09PXdlLTE/MS13ZToxLGguY29sPTEtRWUpOnl0JiZUK2guY29sPDAmJl8raC5yb3c+PTAmJihoLnJvdz1fK2gucm93PT09MD93ZS0xOi0xLGguY29sPUVlLTEpO2NvbnN0IFN0PXRoaXMub3B0aW9u'@;
put 'cy5jcmVhdGVDZWxsQ29vcmRzKF8raC5yb3csVCtoLmNvbCk7aWU9MCxnZT0wLFN0LnJvdzwwPyhpZT0tMSxTdC5yb3c9MCk6U3Qucm93PjAmJlN0LnJvdz49d2UmJihpZT0xLFN0LnJvdz13ZS0xKSxTdC5jb2w8MD8oZ2U9LTEsU3QuY29sPTApOlN0LmNvbD4wJiZTdC5jb2w+PUVlJiYoZ2U9'@;
put 'MSxTdC5jb2w9RWUtMSksVz10aGlzLm9wdGlvbnMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFN0KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixXLGllLGdlKSxXfXRyYW5zZm9ybUVuZChsLGEpe2NvbnN0IGQ9dGhpcy5vcHRpb25zLmNyZWF0ZUNl'@;
put 'bGxDb29yZHMobCxhKSxoPXRoaXMucmFuZ2UuY3VycmVudCgpO2xldCBmPWgudG8sXz0wLFQ9MDt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsZCk7Y29uc3R7cm93OlcsY29sOmllfT10aGlzLm9wdGlvbnMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGguaGlnaGxp'@;
put 'Z2h0KTtpZihudWxsIT09VyYmbnVsbCE9PWllKXtjb25zdCBnZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCksd2U9dGhpcy5vcHRpb25zLmNvdW50Q29scygpLHtyb3c6RWUsY29sOlplfT10aGlzLm9wdGlvbnMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgudG8pLG90PXRoaXMub3B0aW9u'@;
put 'cy5jcmVhdGVDZWxsQ29vcmRzKEVlK2Qucm93LFplK2QuY29sKTtfPTAsVD0wLG90LnJvdzwwPyhfPS0xLG90LnJvdz0wKTpvdC5yb3c+MCYmb3Qucm93Pj1nZSYmKF89MSxvdC5yb3c9Z2UtMSksb3QuY29sPDA/KFQ9LTEsb3QuY29sPTApOm90LmNvbD4wJiZvdC5jb2w+PXdlJiYoVD0xLG90'@;
put 'LmNvbD13ZS0xKSxmPXRoaXMub3B0aW9ucy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMob3QpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtRW5kIixmLF8sVCksZn19VGEoTG5lLE8wKTtjb25zdCB3RGU9TG5lLENEZT1bMywyXSxTRGU9W1sibnVtYmVyIl0sWyJu'@;
put 'dW1iZXIiLCJzdHJpbmciXSxbIm51bWJlciIsInVuZGVmaW5lZCJdLFsibnVtYmVyIiwic3RyaW5nIiwidW5kZWZpbmVkIl1dLHpCPVN5bWJvbCgicm9vdCIpLE9uZT1TeW1ib2woImNoaWxkIik7ZnVuY3Rpb24gZzcoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1'@;
put 'bWVudHNbMV0/YXJndW1lbnRzWzFdOnpCO2lmKGwhPT16QiYmbCE9PU9uZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdXNlZCBpbnRlcm5hbGx5IG9ubHkgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4iKTtjb25zdCBhPUFycmF5LmlzQXJyYXkoYyksZD1sPT09'@;
put 'ekI7bGV0IGg9MDtpZihhKXtjb25zdCBmPWNbMF07MD09PWMubGVuZ3RoP2g9MTpkJiZmIGluc3RhbmNlb2YgWk4/aD0zOmQmJkFycmF5LmlzQXJyYXkoZik/aD1nNyhmLE9uZSk6Yy5sZW5ndGg+PTImJmMubGVuZ3RoPD00JiYhYy5zb21lKChULFcpPT4hU0RlW1ddLmluY2x1ZGVzKHR5cGVv'@;
put 'ZiBUKSkmJihoPTIpfXJldHVybiBofWZ1bmN0aW9uIHd5KGMpe2xldHtrZWVwRGlyZWN0aW9uOmw9ITEscHJvcFRvQ29sOmF9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighQ0RlLmluY2x1ZGVzKGMpKXRocm93IG5ldyBFcnJv'@;
put 'cigiVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0aW9uKGQpe2NvbnN0IGg9Mz09PWM7bGV0IGY9aD9kLmZyb20ucm93OmRbMF0sXz1oP2QuZnJvbS5jb2w6ZFsxXSxUPWg/ZC50by5yb3c6ZFsyXSxXPWg/ZC50by5j'@;
put 'b2w6ZFszXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSYmKCJzdHJpbmciPT10eXBlb2YgXyYmKF89YShfKSksInN0cmluZyI9PXR5cGVvZiBXJiYoVz1hKFcpKSksTGEoVCkmJihUPWYpLExhKFcpJiYoVz1fKSwhbCl7Y29uc3QgaWU9ZixnZT1fLHdlPVQsRWU9VztmPU1hdGgubWluKGllLHdl'@;
put 'KSxfPU1hdGgubWluKGdlLEVlKSxUPU1hdGgubWF4KGllLHdlKSxXPU1hdGgubWF4KGdlLEVlKX1yZXR1cm5bZixfLFQsV119fWZ1bmN0aW9uIEdwKGMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYyYmYz49MCYmYzwoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/'@;
put 'YXJndW1lbnRzWzFdOjEvMCl9Y2xhc3MgUG5le2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpczt0aGlzLnNldHRpbmdzPWwsdGhpcy50YWJsZVByb3BzPWEsdGhpcy5pblByb2dyZXNzPSExLHRoaXMuc2VsZWN0ZWRCeUNvcm5lcj0hMSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXI9bmV3IFNl'@;
put 'dCx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXI9bmV3IFNldCx0aGlzLnNlbGVjdGVkUmFuZ2U9bmV3IHlEZSgoaCxmLF8pPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZixfKSksdGhpcy5oaWdobGlnaHQ9bmV3IF9EZSh7aGVhZGVyQ2xhc3NOYW1lOmwuY3VycmVudEhl'@;
put 'YWRlckNsYXNzTmFtZSxhY3RpdmVIZWFkZXJDbGFzc05hbWU6bC5hY3RpdmVIZWFkZXJDbGFzc05hbWUscm93Q2xhc3NOYW1lOmwuY3VycmVudFJvd0NsYXNzTmFtZSxjb2x1bW5DbGFzc05hbWU6bC5jdXJyZW50Q29sQ2xhc3NOYW1lLGRpc2FibGVkQ2VsbFNlbGVjdGlvbjooaCxmKT0+dGhp'@;
put 'cy50YWJsZVByb3BzLmlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uKGgsZiksY2VsbENvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0NlbGxDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LGFyZWFDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNBcmVhQ29ybmVy'@;
put 'VmlzaWJsZSguLi5hcmd1bWVudHMpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyho'@;
put 'KSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGNyZWF0ZUNlbGxSYW5nZTooaCxmLF8pPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZixfKSxyb3dJbmRleE1hcHBlcjooKT0+dGhpcy50YWJsZVByb3BzLnJv'@;
put 'd0luZGV4TWFwcGVyKCksY29sdW1uSW5kZXhNYXBwZXI6KCk9PnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcigpfSksdGhpcy50cmFuc2Zvcm1hdGlvbj1uZXcgd0RlKHRoaXMuc2VsZWN0ZWRSYW5nZSx7Y291bnRSb3dzOigpPT50aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzVHJh'@;
put 'bnNsYXRlZCgpLGNvdW50Q29sczooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50Q29sc1RyYW5zbGF0ZWQoKSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhp'@;
put 'cy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+bC5maXhlZFJvd3NCb3R0b20sbWluU3BhcmVSb3dzOigpPT5sLm1pblNw'@;
put 'YXJlUm93cyxtaW5TcGFyZUNvbHM6KCk9PmwubWluU3BhcmVDb2xzLGF1dG9XcmFwUm93OigpPT5sLmF1dG9XcmFwUm93LGF1dG9XcmFwQ29sOigpPT5sLmF1dG9XcmFwQ29sfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxI'@;
put 'b29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYp'@;
put 'fSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJi'@;
put 'ZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRz'@;
put 'W19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgp'@;
put 'LF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLC4uLmYpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVpcmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsZj1uZXcgQXJyYXkoaCksXz0wO188aDtfKyspZltfXT1hcmd1bWVudHNbX107cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsLi4uZil9KX1nZXRTZWxlY3RlZFJhbmdlKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZX1iZWdpbigpe3RoaXMuaW5Qcm9n'@;
put 'cmVzcz0hMH1maW5pc2goKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKSksdGhpcy5pblByb2dyZXNzPSExfWlzSW5Qcm9ncmVzcygpe3JldHVybiB0aGlzLmluUHJvZ3Jlc3N9c2V0UmFuZ2VTdGFydChs'@;
put 'LGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibXVsdGlwbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlLGY9TGEoYSk/dGhpcy50YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3Ry'@;
put 'bFByZXNzZWQoKTphLF89bC5yb3c8MCxUPWwuY29sPDAsVz1fJiZULGllPWwuY2xvbmUoKTt0aGlzLnNlbGVjdGVkQnlDb3JuZXI9Vyx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiKyhkPyJPbmx5IjoiIiksaWUpLCghaHx8aCYmIWYmJkxhKGEpKSYmdGhpcy5zZWxl'@;
put 'Y3RlZFJhbmdlLmNsZWFyKCksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChpZSksMD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpJiYodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmNsZWFyKCksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmNsZWFyKCkpLCFXJiZUJiZ0aGlzLnNlbGVjdGVkQnlS'@;
put 'b3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSwhVyYmXyYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksZHx8dGhpcy5zZXRSYW5nZUVuZChsKX1zZXRSYW5nZVN0YXJ0T25seShsLGEpe3RoaXMuc2V0UmFuZ2VTdGFydChsLGEs'@;
put 'ITApfXNldFJhbmdlRW5kKGwpe2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO2NvbnN0IGE9bC5jbG9uZSgpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLGEpLHRoaXMuYmVnaW4oKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50'@;
put 'KCk7InNpbmdsZSIhPT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUmJmQuc2V0VG8odGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYS5yb3csYS5jb2wpKSx0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoYnksZC5o'@;
put 'aWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuYWRkKHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChkKTtjb25zdCBoPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2g8dGhpcy5oaWdobGlnaHQubGF5ZXJMZXZlbCYmKERuKHRo'@;
put 'aXMuaGlnaGxpZ2h0LmdldEFyZWFzKCksVz0+e1cuY2xlYXIoKX0pLERuKHRoaXMuaGlnaGxpZ2h0LmdldEhlYWRlcnMoKSxXPT57Vy5jbGVhcigpfSksRG4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlSGVhZGVycygpLFc9PntXLmNsZWFyKCl9KSksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJM'@;
put 'ZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QXJlYSgpLF89dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRIZWFkZXIoKSxUPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCk7aWYoZi5jbGVhcigpLF8uY2xlYXIoKSxULmNsZWFyKCksdGhp'@;
put 'cy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEZrLGQuaGlnaGxpZ2h0KSYmKHRoaXMuaXNNdWx0aXBsZSgpfHxoPj0xKSYmKGYuYWRkKGQuZnJvbSkuYWRkKGQudG8pLmNvbW1pdCgpLDE9PT1oKSl7Y29uc3QgVz10aGlzLnNlbGVjdGVkUmFuZ2UucHJldmlvdXMoKTt0aGlzLmhpZ2hsaWdodC51'@;
put 'c2VMYXllckxldmVsKGgtMSkuY3JlYXRlT3JHZXRBcmVhKCkuYWRkKFcuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoVyksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKX1pZih0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoeXksZC5oaWdobGlnaHQpKXtjb25zdCBXPTA9PT10aGlz'@;
put 'LnRhYmxlUHJvcHMuY291bnRSb3dzVHJhbnNsYXRlZCgpLGllPTA9PT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzVHJhbnNsYXRlZCgpO2xldCBnZT1kOyhXfHxpZSkmJihnZT1kLmNsb25lKCkpLFcmJihnZS5mcm9tLnJvdz0tMSksaWUmJihnZS5mcm9tLmNvbD0tMSksInNpbmdsZSI9PT10'@;
put 'aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGU/KHRoaXMuaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkmJmdlLmZyb20ubm9ybWFsaXplKCksXy5hZGQoZ2UuZnJvbSkuY29tbWl0KCkpOl8uYWRkKGdlLmZyb20pLmFkZChnZS50bykuY29tbWl0KCksdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkm'@;
put 'JnRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKT09PWQuZ2V0V2lkdGgoKSYmVC5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZC5mcm9tLnJvdywtMSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhkLnRvLnJvdywtMSkpLmNvbW1pdCgpLHRoaXMu'@;
put 'aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpJiZ0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk9PT1kLmdldEhlaWdodCgpJiZULmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxkLmZyb20uY29sKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0x'@;
put 'LGQudG8uY29sKSkuY29tbWl0KCl9dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldFJhbmdlRW5kIixsKX1pc011bHRpcGxlKCl7Y29uc3QgbD1fZyghdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5pc1NpbmdsZSgpKTtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlcklzTXVs'@;
put 'dGlwbGVTZWxlY3Rpb24iLGwpLGwudmFsdWV9dHJhbnNmb3JtU3RhcnQobCxhKXt0aGlzLnNldFJhbmdlU3RhcnQodGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm1TdGFydChsLGEsYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSkpfXRy'@;
put 'YW5zZm9ybUVuZChsLGEpe3RoaXMuc2V0UmFuZ2VFbmQodGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm1FbmQobCxhKSl9Z2V0TGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTF9aXNTZWxlY3RlZCgpe3JldHVybiF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNF'@;
put 'bXB0eSgpfWlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIobCkmJnRoaXMuaXNFbnRpcmVSb3dT'@;
put 'ZWxlY3RlZChsKX1pc0VudGlyZVJvd1NlbGVjdGVkKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybi0xPT09bD90aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuc2l6ZT4wOnRoaXMu'@;
put 'c2VsZWN0ZWRCeVJvd0hlYWRlci5oYXMobCl9aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5l'@;
put 'cigpJiZ0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQobCl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4tMT09PWw/dGhpcy5zZWxl'@;
put 'Y3RlZEJ5Q29sdW1uSGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKGwpfWlzU2VsZWN0ZWRCeUFueUhlYWRlcigpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKC0xKXx8dGhpcy5p'@;
put 'c1NlbGVjdGVkQnlDb3JuZXIoKX1pc1NlbGVjdGVkQnlDb3JuZXIoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEJ5Q29ybmVyfWluSW5TZWxlY3Rpb24obCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5pbmNsdWRlcyhsKX1pc0NlbGxDb3JuZXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMuc2V0dGlu'@;
put 'Z3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiYhdGhpcy5pc011bHRpcGxlKCl9aXNBcmVhQ29ybmVyVmlzaWJsZShsKXtyZXR1cm4oIU51bWJlci5pc0ludGVnZXIobCl8fGw9PT10aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2V0dGluZ3MuZmls'@;
put 'bEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLmlzTXVsdGlwbGUoKX1jbGVhcigpe3RoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCl9ZGVzZWxlY3QoKXt0aGlzLmlzU2VsZWN0ZWQoKSYmKHRoaXMuaW5Qcm9ncmVz'@;
put 'cz0hMSx0aGlzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckRlc2VsZWN0IikpfXNlbGVjdEFsbCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2lmKCEobHx8YXx8MCE9PWQmJjAhPT1oKSlyZXR1cm47Y29uc3QgZj10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhPy0x'@;
put 'OjAsbD8tMTowKSxfPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQtMSxoLTEpO3RoaXMuY2xlYXIoKSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGYpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2VsZWN0ZWRCeUNvbHVt'@;
put 'bkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoXyksdGhpcy5maW5pc2goKX1zZWxlY3RDZWxscyhsKXtjb25zdCBhPWc3KGwpO2lmKDE9PT1hKXJldHVybiExO2lmKDA9PT1hKXRocm93IG5ldyBFcnJvcihBYWBVbnN1cHBvcnRlZCBmb3JtYXQgb2Yg'@;
put 'dGhlIHNlbGVjdGlvbiByYW5nZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NceDIwCiAgICAgICAgdGhlIGNvb3JkaW5hdGVzIGFzIGFuIGFycmF5IG9mIGFycmF5cyAoW1tyb3dTdGFydCwgY29sdW1uU3RhcnQvY29sdW1uUHJvcFN0YXJ0LCByb3dFbmQsXHgyMAogICAgICAg'@;
put 'IGNvbHVtbkVuZC9jb2x1bW5Qcm9wRW5kXV0pIG9yIGFzIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLmApO2NvbnN0IGQ9d3koYSx7cHJvcFRvQ29sOlQ9PnRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woVCksa2VlcERpcmVjdGlvbjohMH0pLGg9dGhpcy50YWJsZVByb3BzLmNvdW50'@;
put 'Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLF89IWwuc29tZShUPT57Y29uc3RbVyxpZSxnZSx3ZV09ZChUKTtyZXR1cm4hKEdwKFcsaCkmJkdwKGllLGYpJiZHcChnZSxoKSYmR3Aod2UsZikpfSk7cmV0dXJuIF8mJih0aGlzLmNsZWFyKCksRG4obCxUPT57Y29uc3RbVyxp'@;
put 'ZSxnZSx3ZV09ZChUKTt0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFcsaWUpLCExKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGdlLHdlKSksdGhpcy5maW5pc2goKX0pKSxffXNlbGVjdENv'@;
put 'bHVtbnMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06LTE7Y29uc3QgaD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy50'@;
put 'YWJsZVByb3BzLnByb3BUb0NvbChsKTpsLGY9InN0cmluZyI9PXR5cGVvZiBhP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woYSk6YSxfPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxUPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxXPUdwKGgsXykmJkdwKGYsXyk7cmV0dXJuIFcm'@;
put 'Jih0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLHRoaXMuc2V0UmFuZ2VFbmQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoVC0xLGYpKSx0aGlzLmZpbmlzaCgpKSxXfXNlbGVjdFJvd3MobCl7bGV0IGE9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06LTE7Y29uc3QgaD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksZj10aGlzLnRhYmxlUHJvcHMu'@;
put 'Y291bnRDb2xzKCksXz1HcChsLGgpJiZHcChhLGgpO3JldHVybiBfJiYodGhpcy5zZXRSYW5nZVN0YXJ0T25seSh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLGQpKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEsZi0xKSksdGhp'@;
put 'cy5maW5pc2goKSksX31yZWZyZXNoKCl7aWYodGhpcy5oaWdobGlnaHQuZ2V0Q3VzdG9tU2VsZWN0aW9ucygpLmZvckVhY2goaD0+e2guY29tbWl0KCl9KSwhdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5oaWdobGlnaHQuZ2V0Q2VsbCgpLGQ9dGhpcy5nZXRMYXllckxl'@;
put 'dmVsKCk7YS5jb21taXQoKS5zeW5jV2l0aCh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpKTtmb3IobGV0IGg9MDtoPHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk7aCs9MSl7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9y'@;
put 'R2V0QXJlYSgpLF89dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRIZWFkZXIoKSxUPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCk7Zi5jb21taXQoKSxfLmNvbW1pdCgpLFQuY29tbWl0KCl9dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChkKX19VGEoUG5lLE8w'@;
put 'KTtjb25zdCBFRGU9UG5lLHtyZWdpc3RlcjprRGUsZ2V0SXRlbTpBRGUsaGFzSXRlbTpGbmUsZ2V0TmFtZXM6VERlfT1wZCgiY2VsbFR5cGVzIik7ZnVuY3Rpb24gVUIoYyl7aWYoIUZuZShjKSl0aHJvdyBFcnJvcihgWW91IGRlY2xhcmVkIGNlbGwgdHlwZSAiJHtjfSIgYXMgYSBzdHJpbmcg'@;
put 'dGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5XG4gICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2Vs'@;
put 'bFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApO3JldHVybiBBRGUoYyl9ZnVuY3Rpb24gYjIoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLkNFTExfVFlQRSk7Y29uc3R7ZWRpdG9yOmEscmVuZGVyZXI6ZCx2YWxpZGF0b3I6aH09bDthJiZSMChjLGEpLGQmJnBoKGMs'@;
put 'ZCksaCYmYTcoYyxoKSxrRGUoYyxsKX1mdW5jdGlvbiBWayhjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpjO2NvbnN0IGQ9InN0cmluZyI9PXR5cGVvZiBsLnR5cGU/VUIobC50eXBlKTpsLnR5cGU7aWYoYy5fYXV0b21h'@;
put 'dGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiZkcyhsLChmLF8pPT57Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzLmRlbGV0ZShfKX0pLCF1cyhkKSlyZXR1cm47YT09PWMmJiFjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMmJihjLl9hdXRvbWF0aWNhbGx5QXNzaWdu'@;
put 'ZWRNZXRhUHJvcHM9bmV3IFNldCk7Y29uc3QgaD17fTtkcyhkLChmLF8pPT57dmFyIFQ7KGZ1bmN0aW9uIEREZShjLGwpe3ZhciBhO3JldHVybiJDRUxMX1RZUEUiIT09YyYmKChudWxsPT09KGE9bC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09YT92b2lkIDA6'@;
put 'YS5oYXMoYykpfHwhYmwobCxjKSl9KShfLGEpJiYoaFtfXT1mLG51bGw9PT0oVD1jLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1UfHxULmFkZChfKSl9KSxLbChjLGgpfWZ1bmN0aW9uIEJrKGMpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPj0wfWZ1'@;
put 'bmN0aW9uIGprKGMsbCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6ICR7bH1gKX1mdW5jdGlvbiB6ayhjKXtyZXR1cm4gbnVsbD09Y31jb25zdCBIbmU9KCk9Pih7X2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xh'@;
put 'c3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxvd0h0bWw6ITEsYWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJbnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93UmVtb3ZlQ29sdW1uOiEwLGFsbG93UmVtb3ZlUm93OiEwLGF1dG9Db2x1bW5TaXpl'@;
put 'OnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYmluZFJvd3NXaXRoSGVhZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAsY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCxjbGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xs'@;
put 'YXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lkIDAsY29sdW1uczp2b2lkIDAsY29sdW1uU29ydGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAsY29sV2lkdGhzOnZvaWQgMCxjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21t'@;
put 'ZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBhc3RlOiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3VycmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhlYWRlckNsYXNzTmFtZToiaHRfX2hpZ2hsaWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3Vz'@;
put 'dG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhU2NoZW1hOnZvaWQgMCxkYXRlRm9ybWF0OiJERC9NTS9ZWVlZIixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkcmFnVG9TY3JvbGw6ITAsZHJvcGRvd25NZW51'@;
put 'OnZvaWQgMCxlZGl0b3I6dm9pZCAwLGVudGVyQmVnaW5zRWRpdGluZzohMCxlbnRlck1vdmVzOntjb2w6MCxyb3c6MX0sZmlsbEhhbmRsZTp7YXV0b0luc2VydFJvdzohMX0sZmlsdGVyOiEwLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ITEsZmlsdGVyczp2b2lkIDAsZml4ZWRDb2x1bW5zTGVm'@;
put 'dDowLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzQm90dG9tOjAsZml4ZWRSb3dzVG9wOjAsZm9ybXVsYXM6dm9pZCAwLGZyYWdtZW50U2VsZWN0aW9uOiExLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29sdW1uczp2b2lkIDAsaGlkZGVuUm93czp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05h'@;
put 'bWU6Imh0SW52YWxpZCIsaXNFbXB0eUNvbChjKXtsZXQgbCxhLGQ7Zm9yKGw9MCxhPXRoaXMuY291bnRSb3dzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChsLGMpLCExPT09cGMoZCkpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3coYyl7bGV0IGwsYSxkLGg7Zm9yKGw9'@;
put 'MCxhPXRoaXMuY291bnRDb2xzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChjLGwpLCExPT09cGMoZCkpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiYoaD10aGlzLmdldENlbGxNZXRhKGMsbCksbGsodGhpcy5nZXRTY2hlbWEoKVtoLnByb3BdLGQpKTtyZXR1cm4hMH0sbGFi'@;
put 'ZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixtYW51YWxDb2x1bW5GcmVlemU6dm9pZCAwLG1hbnVhbENvbHVtbk1vdmU6dm9pZCAwLG1hbnVhbENvbHVtblJlc2l6ZTp2b2lkIDAsbWFu'@;
put 'dWFsUm93TW92ZTp2b2lkIDAsbWFudWFsUm93UmVzaXplOnZvaWQgMCxtYXhDb2xzOjEvMCxtYXhSb3dzOjEvMCxtZXJnZUNlbGxzOiExLG1pbkNvbHM6MCxtaW5Sb3dzOjAsbWluU3BhcmVDb2xzOjAsbWluU3BhcmVSb3dzOjAsbXVsdGlDb2x1bW5Tb3J0aW5nOnZvaWQgMCxuZXN0ZWRIZWFk'@;
put 'ZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEwLHBlcnNpc3RlbnRTdGF0ZTp2b2lkIDAscGxhY2Vob2xkZXI6'@;
put 'dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seTohMSxyZWFkT25seUNlbGxDbGFzc05hbWU6Imh0RGltbWVkIixyZW5kZXJBbGxSb3dzOnZvaWQgMCxyZW5kZXJlcjp2b2lkIDAs'@;
put 'cm93SGVhZGVyczp2b2lkIDAscm93SGVhZGVyV2lkdGg6dm9pZCAwLHJvd0hlaWdodHM6dm9pZCAwLHNlYXJjaDohMSxzZWxlY3Rpb25Nb2RlOiJtdWx0aXBsZSIsc2VsZWN0T3B0aW9uczp2b2lkIDAsc2tpcENvbHVtbk9uUGFzdGU6ITEsc2tpcFJvd09uUGFzdGU6ITEsc29ydEJ5UmVsZXZh'@;
put 'bmNlOiEwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUsc3RhcnRSb3dzOjUsc3RyZXRjaEg6Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFibGVDbGFzc05hbWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAs'@;
put 'dHJpbVdoaXRlc3BhY2U6ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86dm9pZCAwLHZhbGlkYXRvcjp2b2lkIDAsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aXNpYmxlUm93'@;
put 'czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtjbGFzcyBSRGV7Y29uc3RydWN0b3IobCl7dGhpcy5tZXRhQ3Rvcj1jbGFzc3t9LHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSxLbCh0aGlzLm1ldGEsSG5lKCkpLHRoaXMubWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25z'@;
put 'dHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7dmFyIGE7S2wodGhpcy5tZXRhLGwpLFZrKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1sLnR5cGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9'@;
put 'LGwpfX1jbGFzcyBPRGV7Y29uc3RydWN0b3IobCl7Y29uc3QgYT1sLmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe0tsKHRoaXMubWV0YSxsKSxWayh0aGlzLm1ldGEsbCxsKX19Y2xhc3MgWkJ7Y29u'@;
put 'c3RydWN0b3IobCl7dGhpcy52YWx1ZUZhY3Rvcnk9bCx0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVzPW5ldyBTZXR9b2J0YWluKGwpe2prKCgpPT5CayhsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlci4iKTtjb25zdCBhPXRoaXMuX2dldFN0b3JhZ2VJbmRleEJ5'@;
put 'S2V5KGwpO2xldCBkO2lmKGE+PTApZD10aGlzLmRhdGFbYV0sdm9pZCAwPT09ZCYmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5kYXRhW2FdPWQpO2Vsc2UgaWYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmhvbGVzLnNpemU+MCl7Y29uc3QgaD10aGlzLmhvbGVzLnZhbHVlcygp'@;
put 'Lm5leHQoKS52YWx1ZTt0aGlzLmhvbGVzLmRlbGV0ZShoKSx0aGlzLmRhdGFbaF09ZCx0aGlzLmluZGV4W2xdPWh9ZWxzZSB0aGlzLmRhdGEucHVzaChkKSx0aGlzLmluZGV4W2xdPXRoaXMuZGF0YS5sZW5ndGgtMTtyZXR1cm4gZH1pbnNlcnQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7amsoKCk9PkJrKGwpfHx6ayhsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPVtdLGg9dGhpcy5kYXRhLmxlbmd0aDtmb3IobGV0IF89MDtfPGE7'@;
put 'XysrKWQucHVzaChoK18pLHRoaXMuZGF0YS5wdXNoKHZvaWQgMCk7Y29uc3QgZj16ayhsKT90aGlzLmluZGV4Lmxlbmd0aDpsO3RoaXMuaW5kZXg9Wy4uLnRoaXMuaW5kZXguc2xpY2UoMCxmKSwuLi5kLC4uLnRoaXMuaW5kZXguc2xpY2UoZildfXJlbW92ZShsKXtsZXQgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtqaygoKT0+QmsobCl8fHprKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9dGhpcy5pbmRleC5zcGxpY2UoemsobCk/dGhpcy5p'@;
put 'bmRleC5sZW5ndGgtYTpsLGEpO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07Im51bWJlciI9PXR5cGVvZiBmJiZ0aGlzLmhvbGVzLmFkZChmKX19c2l6ZSgpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMuaG9sZXMuc2l6ZX12YWx1ZXMoKXtyZXR1cm4gXzEo'@;
put 'dGhpcy5kYXRhLChsLGEpPT4hdGhpcy5ob2xlcy5oYXMoYSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXtjb25zdCBoPXRoaXMuX2dldEtleUJ5U3RvcmFnZUluZGV4KGQpOy0xIT09aCYmbC5wdXNo'@;
put 'KFtoLHRoaXMuZGF0YVtkXV0pfWxldCBhPTA7cmV0dXJue25leHQ6KCk9PntpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV07cmV0dXJuIGErPTEse3ZhbHVlOmQsZG9uZTohMX19cmV0dXJue2RvbmU6ITB9fX19Y2xlYXIoKXt0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVz'@;
put 'LmNsZWFyKCl9X2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpe3JldHVybiB0aGlzLmluZGV4Lmxlbmd0aD5sP3RoaXMuaW5kZXhbbF06LTF9X2dldEtleUJ5U3RvcmFnZUluZGV4KGwpe3JldHVybiB0aGlzLmluZGV4LmluZGV4T2YobCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5l'@;
put 'bnRyaWVzKCl9fWNvbnN0IFBEZT1bImRhdGEiLCJ3aWR0aCJdO2NsYXNzIEZEZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmdsb2JhbE1ldGE9bCx0aGlzLm1ldGFzPW5ldyBaQigoKT0+dGhpcy5fY3JlYXRlTWV0YSgpKX11cGRhdGVNZXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldE1ldGEobCk7S2wo'@;
put 'ZCxhKSxWayhkLGEpfWNyZWF0ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1nZXRNZXRhKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKX1nZXRNZXRhQ29uc3RydWN0b3IobCl7cmV0dXJuIHRo'@;
put 'aXMubWV0YXMub2J0YWluKGwpLmNvbnN0cnVjdG9yfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZU1ldGEoKXtyZXR1cm4gZnVuY3Rpb24gSURlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtm'@;
put 'dW5jdGlvbiBhKCl7fXpmKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtkXV09dm9pZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCksUERlKS5wcm90b3R5cGV9fWNsYXNzIEhEZXtjb25zdHJ1Y3RvcihsKXt0aGlz'@;
put 'LmNvbHVtbk1ldGE9bCx0aGlzLm1ldGFzPW5ldyBaQigoKT0+dGhpcy5fY3JlYXRlUm93KCkpfXVwZGF0ZU1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7S2woaCxkKSxWayhoLGQpfWNyZWF0ZVJvdyhsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1u'@;
put 'KGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkuaW5zZXJ0KGwsYSl9cmVtb3ZlUm93KGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1yZW1vdmVDb2x1bW4obCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2Qr'@;
put 'Kyl0aGlzLm1ldGFzLm9idGFpbihkKS5yZW1vdmUobCxhKX1nZXRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtyZXR1cm4gdm9pZCAwPT09ZD9oOmhbZF19c2V0TWV0YShsLGEsZCxoKXt2YXIgZjtjb25zdCBfPXRoaXMubWV0YXMub2J0YWluKGwp'@;
put 'Lm9idGFpbihhKTtudWxsPT09KGY9Xy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09Znx8Zi5kZWxldGUoZCksX1tkXT1ofXJlbW92ZU1ldGEobCxhLGQpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSlbZF19Z2V0TWV0YXMoKXtjb25zdCBs'@;
put 'PVtdLGE9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylsLnB1c2goLi4uYVtkXS52YWx1ZXMoKSk7cmV0dXJuIGx9Z2V0TWV0YXNBdFJvdyhsKXtqaygoKT0+QmsobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29u'@;
put 'c3QgYT1uZXcgTWFwKHRoaXMubWV0YXMpO3JldHVybiBhLmhhcyhsKT9BcnJheS5mcm9tKGEuZ2V0KGwpLnZhbHVlcygpKTpbXX1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVSb3coKXtyZXR1cm4gbmV3IFpCKGw9PnRoaXMuX2NyZWF0ZU1ldGEobCkpfV9jcmVhdGVN'@;
put 'ZXRhKGwpe3JldHVybiBuZXcodGhpcy5jb2x1bW5NZXRhLmdldE1ldGFDb25zdHJ1Y3RvcihsKSl9fWNsYXNzIE5uZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107dGhpcy5ob3Q9bCx0aGlzLmdsb2JhbE1ldGE9bmV3IFJEZShsKSx0aGlzLnRhYmxlTWV0YT1uZXcgT0RlKHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jb2x1bW5NZXRhPW5ldyBGRGUodGhpcy5nbG9iYWxNZXRhKSx0aGlz'@;
put 'LmNlbGxNZXRhPW5ldyBIRGUodGhpcy5jb2x1bW5NZXRhKSxkLmZvckVhY2goaD0+bmV3IGgodGhpcykpLHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGEpfWdldEdsb2JhbE1ldGEoKXtyZXR1cm4gdGhpcy5nbG9iYWxNZXRhLmdldE1ldGEoKX11cGRhdGVHbG9iYWxNZXRhKGwpe3RoaXMu'@;
put 'Z2xvYmFsTWV0YS51cGRhdGVNZXRhKGwpfWdldFRhYmxlTWV0YSgpe3JldHVybiB0aGlzLnRhYmxlTWV0YS5nZXRNZXRhKCl9dXBkYXRlVGFibGVNZXRhKGwpe3RoaXMudGFibGVNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0Q29sdW1uTWV0YShsKXtyZXR1cm4gdGhpcy5jb2x1bW5NZXRhLmdldE1l'@;
put 'dGEobCl9dXBkYXRlQ29sdW1uTWV0YShsLGEpe3RoaXMuY29sdW1uTWV0YS51cGRhdGVNZXRhKGwsYSl9Z2V0Q2VsbE1ldGEobCxhLGQpe2xldHt2aXN1YWxSb3c6aCx2aXN1YWxDb2x1bW46Zn09ZDtjb25zdCBfPXRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEpO3JldHVybiBfLnZpc3VhbFJv'@;
put 'dz1oLF8udmlzdWFsQ29sPWYsXy5yb3c9bCxfLmNvbD1hLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsXyksX31nZXRDZWxsTWV0YUtleVZhbHVlKGwsYSxkKXtpZigic3RyaW5nIiE9dHlwZW9mIGQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGNlbGwgbWV0YSBv'@;
put 'YmplY3Qga2V5IGlzIG5vdCBhIHN0cmluZyIpO3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGEobCxhLGQpfXNldENlbGxNZXRhKGwsYSxkLGgpe3RoaXMuY2VsbE1ldGEuc2V0TWV0YShsLGEsZCxoKX11cGRhdGVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS51cGRhdGVNZXRhKGws'@;
put 'YSxkKX1yZW1vdmVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVNZXRhKGwsYSxkKX1nZXRDZWxsc01ldGEoKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhcygpfWdldENlbGxzTWV0YUF0Um93KGwpe3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzQXRSb3cobCl9'@;
put 'Y3JlYXRlUm93KGwpe3RoaXMuY2VsbE1ldGEuY3JlYXRlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfXJlbW92ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLnJlbW92ZVJvdyhsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1jcmVhdGVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5jcmVhdGVDb2x1bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEuY3JlYXRlQ29s'@;
put 'dW1uKGwsYSl9cmVtb3ZlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEucmVtb3ZlQ29sdW1uKGwsYSksdGhpcy5jb2x1bW5NZXRhLnJlbW92ZUNvbHVtbihsLGEpfWNsZWFyQ2VsbHND'@;
put 'YWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpfWNsZWFyQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKSx0aGlzLmNvbHVtbk1ldGEuY2xlYXJDYWNoZSgpfX1UYShObmUsTzApO2NsYXNzIE5EZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy5t'@;
put 'ZXRhU3luY01lbW89bmV3IE1hcCxsLmFkZExvY2FsSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsYT0+dGhpcy5leHRlbmRDZWxsTWV0YShhKSksc28uZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVSZW5kZXIiLGE9PnthJiZ0aGlzLm1ldGFTeW5jTWVtby5jbGVhcigpfSx0aGlzLm1ldGFNYW5h'@;
put 'Z2VyLmhvdCl9ZXh0ZW5kQ2VsbE1ldGEobCl7dmFyIGE7Y29uc3R7cm93OmQsY29sOmh9PWw7aWYobnVsbCE9PShhPXRoaXMubWV0YVN5bmNNZW1vLmdldChkKSkmJnZvaWQgMCE9PWEmJmEuaGFzKGgpKXJldHVybjtjb25zdHt2aXN1YWxSb3c6Zix2aXN1YWxDb2w6X309bCxUPXRoaXMubWV0'@;
put 'YU1hbmFnZXIuaG90LFc9VC5jb2xUb1Byb3AoXyk7bC5wcm9wPVcsVC5ydW5Ib29rcygiYmVmb3JlR2V0Q2VsbE1ldGEiLGYsXyxsKTtjb25zdCBpZT1ibChsLCJ0eXBlIik/bC50eXBlOm51bGw7bGV0IGdlPVJhKGwuY2VsbHMpP2wuY2VsbHMoZCxoLFcpOm51bGw7aWYoaWUpaWYoZ2Upe3Zh'@;
put 'ciB3ZTtnZS50eXBlPW51bGwhPT0od2U9Z2UudHlwZSkmJnZvaWQgMCE9PXdlP3dlOmllfWVsc2UgZ2U9e3R5cGU6aWV9O2dlJiZ0aGlzLm1ldGFNYW5hZ2VyLnVwZGF0ZUNlbGxNZXRhKGQsaCxnZSksVC5ydW5Ib29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsZixfLGwpLHRoaXMubWV0YVN5bmNN'@;
put 'ZW1vLmhhcyhkKXx8dGhpcy5tZXRhU3luY01lbW8uc2V0KGQsbmV3IFNldCksdGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpLmFkZChoKX19Y2xhc3MgVkRle2NvbnN0cnVjdG9yKGwpe3RoaXMubWV0YU1hbmFnZXI9bCx0aGlzLnVzYWdlVHJhY2tlcj1uZXcgU2V0LHRoaXMucHJvcERlc2NyaXB0'@;
put 'b3JzPW5ldyBNYXAoW1siZml4ZWRDb2x1bW5zTGVmdCIse3RhcmdldDoiZml4ZWRDb2x1bW5zU3RhcnQiLG9uQ2hhbmdlKGEpe2lmKHRoaXMubWV0YU1hbmFnZXIuaG90LmlzUnRsKCkmJiJmaXhlZENvbHVtbnNMZWZ0Ij09PWEpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xl'@;
put 'ZnRgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKTtpZih0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc0xlZnQiKSYmdGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNTdGFydCIpKXRocm93'@;
put 'IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBhbmQgYGZpeGVkQ29sdW1uc1N0YXJ0YCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIil9fV0sWyJsYXlvdXREaXJlY3Rpb24iLHtvbkNo'@;
put 'YW5nZShhLGQsaCl7aWYoIWgpdGhyb3cgbmV3IEVycm9yKGBUaGUgXGAke2F9XGAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLmApfX1dXSksdGhpcy5leHRlbmRNZXRhUHJvcHMoKX1leHRlbmRNZXRhUHJvcHMoKXt0aGlz'@;
put 'LnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKChsLGEpPT57Y29uc3R7dGFyZ2V0OmQsb25DaGFuZ2U6aD0oKCk9Pnt9KX09bCxmPSJzdHJpbmciPT10eXBlb2YgZCxfPWY/ZDphLFQ9YF8ke199YDt0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVtUXT10aGlzLm1ldGFNYW5hZ2VyLmds'@;
put 'b2JhbE1ldGEubWV0YVtfXSx0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLFQsaCksZiYmdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoZCxULGgpfSl9aW5zdGFsbFByb3BXYXRjaGVyKGwsYSxkKXtjb25zdCBoPXRoaXM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xv'@;
put 'YmFsTWV0YS5tZXRhLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoZil7Y29uc3QgXz0haC51c2FnZVRyYWNrZXIuaGFzKGwpO2gudXNhZ2VUcmFja2VyLmFkZChsKSxkLmNhbGwoaCxsLGYsXyksdGhpc1thXT1mfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX1jb25zdCBW'@;
put 'bmU9L14oXHJcbnxcblxyfFxyfFxuKS8sQkRlPS9eW15cdFxyXG5dKy8sQm5lPS9eXHQvO2Z1bmN0aW9uIEN5KGMpe2xldCBsLGEsZCxoLF8sZj0iIjtmb3IobD0wLGE9Yy5sZW5ndGg7bDxhO2wrPTEpe2ZvcihoPWNbbF0ubGVuZ3RoLGQ9MDtkPGg7ZCs9MSlkPjAmJihmKz0iXHQiKSxfPWNb'@;
put 'bF1bZF0sInN0cmluZyI9PXR5cGVvZiBfP18uaW5kZXhPZigiXG4iKT4tMT9mKz1gIiR7Xy5yZXBsYWNlKC8iL2csJyIiJyl9ImA6Zis9XzpmKz1udWxsPT1fPyIiOl87bCE9PWEtMSYmKGYrPSJcbiIpfXJldHVybiBmfWNsYXNzIG03e3N0YXRpYyBnZXQgREVTVElOQVRJT05fUkVOREVSRVIo'@;
put 'KXtyZXR1cm4gMX1zdGF0aWMgZ2V0IERFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IoKXtyZXR1cm4gMn1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5pbnN0YW5jZT1sLHRoaXMubWV0YU1hbmFnZXI9ZCx0aGlzLnRhYmxlTWV0YT1kLmdldFRhYmxlTWV0YSgpLHRoaXMuZGF0YVNvdXJj'@;
put 'ZT1hLHRoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKSx0aGlzLmNvbFRvUHJvcENhY2hlPXZvaWQgMCx0aGlzLnByb3BUb0NvbENhY2hlPXZvaWQgMCx0aGlzLmNyZWF0ZU1hcCgpfWNyZWF0ZU1hcCgpe2NvbnN0IGw9dGhpcy5nZXRTY2hlbWEoKTtpZih0eXBlb2YgbD4i'@;
put 'dSIpdGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZpbml0aW9uIGJ1dCB5b3UgZGlkbid0IHByb3ZpZGUgYHNjaGVtYWAgbm9yIGBkYXRhYCIpO2NvbnN0IGE9dGhpcy50YWJsZU1ldGEuY29sdW1ucztsZXQgZDtpZih0aGlzLmNvbFRvUHJvcENhY2hlPVtd'@;
put 'LHRoaXMucHJvcFRvQ29sQ2FjaGU9bmV3IE1hcCxhKXtsZXQgaD0wLGY9MCxfPSExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXtjb25zdCBUPXVrKGwpO2g9VD4wP1Q6dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLF89ITB9ZWxzZSBoPU1hdGgubWluKHRoaXMudGFibGVNZXRhLm1heENvbHMs'@;
put 'YS5sZW5ndGgpO2ZvcihkPTA7ZDxoO2QrKyl7Y29uc3QgVD1fP2EoZCk6YVtkXTtpZih1cyhUKSl7aWYodHlwZW9mIFQuZGF0YTwidSIpe2NvbnN0IFc9Xz9mOmQ7dGhpcy5jb2xUb1Byb3BDYWNoZVtXXT1ULmRhdGEsdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQoVC5kYXRhLFcpfWYrPTF9fX1l'@;
put 'bHNlIHRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMobCl9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gbFYodGhpcy5kYXRhU291cmNlKX1yZWN1cnNpdmVEdWNrQ29sdW1ucyhsLGEsZCl7bGV0IF8saD1hLGY9ZDtyZXR1cm4gdHlwZW9mIGg+InUiJiYoaD0wLGY9IiIpLCJvYmplY3QiPT10'@;
put 'eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJmRzKGwsKFQsVyk9PntudWxsPT09VD8oXz1mK1csdGhpcy5jb2xUb1Byb3BDYWNoZS5wdXNoKF8pLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KF8saCksaCs9MSk6aD10aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKFQsaCxgJHtXfS5gKX0pLGh9'@;
put 'Y29sVG9Qcm9wKGwpe2lmKCExPT09TnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbDtjb25zdCBhPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWE/bDp0aGlzLmNvbFRvUHJvcENhY2hlJiZLaSh0aGlzLmNvbFRvUHJvcENhY2hlW2FdKT90aGlzLmNv'@;
put 'bFRvUHJvcENhY2hlW2FdOmF9cHJvcFRvQ29sKGwpe2NvbnN0IGE9dGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQobCk7aWYoS2koYSkpcmV0dXJuIHRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oYSk7Y29uc3QgZD10aGlzLmluc3RhbmNlLnRvVmlzdWFsQ29sdW1uKGwpO3JldHVybiBudWxs'@;
put 'PT09ZD9sOmR9Z2V0U2NoZW1hKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hO3JldHVybiBsPyJmdW5jdGlvbiI9PXR5cGVvZiBsP2woKTpsOnRoaXMuZHVja1NjaGVtYX1jcmVhdGVEdWNrU2NoZW1hKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5kYXRhU291cmNl'@;
put 'WzBdP3I3KHRoaXMuZGF0YVNvdXJjZVswXSk6e319cmVmcmVzaER1Y2tTY2hlbWEoKXt0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCl9Y3JlYXRlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTox'@;
put 'LHtzb3VyY2U6ZCxtb2RlOmg9ImFib3ZlIn09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IGY9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsZXQgXz1mLFQ9MCxXPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgV3x8'@;
put 'Vz49ZikmJihXPWYpLFc8dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSYmKF89dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KFcpKSwhMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsVyxhLGQpfHxudWxsPT09XylyZXR1cm57ZGVsdGE6MH07Y29uc3QgZ2U9'@;
put 'dGhpcy50YWJsZU1ldGEubWF4Um93cyx3ZT10aGlzLmdldFNjaGVtYSgpLmxlbmd0aCxFZT1bXTtmb3IoO1Q8YSYmZitUPGdlOyl7bGV0IG90PW51bGw7ImFycmF5Ij09PXRoaXMuaW5zdGFuY2UuZGF0YVR5cGU/dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYT9vdD15dSh0aGlzLmdldFNjaGVt'@;
put 'YSgpKToob3Q9W10sdm8od2UtMSwoKT0+b3QucHVzaChudWxsKSkpOiJmdW5jdGlvbiI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlP290PXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEoVytUKToob3Q9e30sbHkob3QsdGhpcy5nZXRTY2hlbWEoKSkpLEVlLnB1c2gob3QpLFQrPTF9dGhpcy5p'@;
put 'bnN0YW5jZS5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKFcsVCksImJlbG93Ij09PWgmJihfPU1hdGgubWluKF8rMSxmKSksdGhpcy5zcGxpY2VEYXRhKF8sMCxFZSk7Y29uc3QgWmU9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyhfKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb3VudFNv'@;
put 'dXJjZVJvd3MoKT09PUVlLmxlbmd0aCYmdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5pbnN0YW5jZS5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksVD4wJiYobnVsbD09bD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhudWxsLFQpOiJhdXRvIiE9'@;
put 'PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KF8sYSkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixaZSxULGQpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLHtkZWx0YTpULHN0YXJ0UGh5c2ljYWxJbmRleDpffX1jcmVhdGVDb2wobCl7bGV0'@;
put 'IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0ic3RhcnQifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYoIXRoaXMuaW5zdGFuY2UuaXND'@;
put 'b2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIG5ldyBjb2x1bW4uIFdoZW4gZGF0YSBzb3VyY2UgaW4gYW4gb2JqZWN0LCB5b3UgY2FuIG9ubHkgaGF2ZSBhcyBtdWNoIGNvbHVtbnMgYXMgZGVmaW5lZCBpbiBmaXJzdCBkYXRhIHJvdywg'@;
put 'ZGF0YSBzY2hlbWEgb3IgaW4gdGhlICdjb2x1bW5zJyBzZXR0aW5nLklmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gYWRkIG5ldyBjb2x1bW5zLCB5b3UgaGF2ZSB0byB1c2UgYXJyYXkgZGF0YXNvdXJjZS4iKTtjb25zdCBmPXRoaXMuZGF0YVNvdXJjZSxfPXRoaXMudGFibGVNZXRhLm1heENv'@;
put 'bHMsVD10aGlzLmluc3RhbmNlLmNvdW50U291cmNlQ29scygpO2xldCBXPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgV3x8Vz49VCkmJihXPVQpLCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlQ29sIixXLGEsZCkpcmV0dXJue2RlbHRhOjB9O2xldCBnZT1UO1c8dGhp'@;
put 'cy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKGdlPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihXKSk7Y29uc3Qgd2U9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsZXQgRWU9dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSxaZT0wLG90PWdlOyJlbmQiPT09aCYmKG90PU1h'@;
put 'dGgubWluKG90KzEsVCkpO2NvbnN0IGV0PW90O2Zvcig7WmU8YSYmRWU8Xzspe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8Vz49RWUpaWYod2U+MClmb3IobGV0IGt0PTA7a3Q8d2U7a3QrPTEpdHlwZW9mIGZba3RdPiJ1IiYmKGZba3RdPVtdKSxmW2t0XS5wdXNoKG51bGwpO2Vsc2UgZi5wdXNo'@;
put 'KFtudWxsXSk7ZWxzZSBmb3IobGV0IGt0PTA7a3Q8d2U7a3QrKylmW2t0XS5zcGxpY2Uob3QsMCxudWxsKTtaZSs9MSxvdCs9MSxFZSs9MX10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoVyxaZSksWmU+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5j'@;
put 'cmVhdGVDb2x1bW4obnVsbCxaZSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4oZXQsYSkpO2NvbnN0IHl0PXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oZXQpO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckNyZWF0ZUNvbCIseXQsWmUs'@;
put 'ZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTpaZSxzdGFydFBoeXNpY2FsSW5kZXg6ZXR9fXJlbW92ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNb'@;
put 'MV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TnVtYmVyLmlzSW50ZWdlcihsKT9sOi1hO2NvbnN0IGY9dGhpcy52aXN1YWxSb3dzVG9QaHlzaWNhbChoLGEpLF89dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtpZihoPShfK2gpJV8sITE9PT10'@;
put 'aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGgsZi5sZW5ndGgsZixkKSlyZXR1cm4hMTtjb25zdCBXPWYubGVuZ3RoO2lmKHRoaXMuZmlsdGVyRGF0YShoLFcsZiksaDx0aGlzLmluc3RhbmNlLmNvdW50Um93cygpKXt0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVy'@;
put 'LnJlbW92ZUluZGV4ZXMoZik7Y29uc3QgZ2U9S2kodGhpcy50YWJsZU1ldGEuY29sdW1ucyl8fEtpKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpOzA9PT10aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJiExPT09Z2UmJnRoaXMuaW5z'@;
put 'dGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKX1yZXR1cm4gZi5zbGljZSgwKS5zb3J0KChnZSx3ZSk9PndlLWdlKS5mb3JFYWNoKGdlPT57dGhpcy5tZXRhTWFuYWdlci5yZW1vdmVSb3coZ2UsMSl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJl'@;
put 'bW92ZVJvdyIsaCxXLGYsZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsITB9cmVtb3ZlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2'@;
put 'b2lkIDA7aWYoIm9iamVjdCI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlfHx0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJlbW92ZSBjb2x1bW4gd2l0aCBvYmplY3QgZGF0YSBzb3VyY2Ugb3IgY29sdW1ucyBvcHRpb24gc3BlY2lmaWVkIik7bGV0IGg9'@;
put 'Im51bWJlciIhPXR5cGVvZiBsPy1hOmw7aD0odGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKStoKSV0aGlzLmluc3RhbmNlLmNvdW50Q29scygpO2NvbnN0IGY9dGhpcy52aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChoLGEpLF89Zi5zbGljZSgwKS5zb3J0KCh3ZSxFZSk9PkVlLXdlKTtpZighMT09'@;
put 'PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlbW92ZUNvbCIsaCxhLGYsZCkpcmV0dXJuITE7bGV0IFc9ITA7Y29uc3QgaWU9Xy5sZW5ndGgsZ2U9dGhpcy5kYXRhU291cmNlO2ZvcihsZXQgd2U9MDt3ZTxpZTt3ZSsrKVcmJmZbMF0hPT1mW3dlXS13ZSYmKFc9ITEpO2lmKFcpZm9y'@;
put 'KGxldCB3ZT0wLEVlPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7d2U8RWU7d2UrKylnZVt3ZV0uc3BsaWNlKGZbMF0sYSksMD09PXdlJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihmWzBdLGEpO2Vsc2UgZm9yKGxldCB3ZT0wLEVlPXRoaXMuaW5zdGFuY2UuY291bnRT'@;
put 'b3VyY2VSb3dzKCk7d2U8RWU7d2UrKylmb3IobGV0IFplPTA7WmU8aWU7WmUrKylnZVt3ZV0uc3BsaWNlKF9bWmVdLDEpLDA9PT13ZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oX1taZV0sMSk7cmV0dXJuIGg8dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKHRoaXMuaW5zdGFu'@;
put 'Y2UuY29sdW1uSW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKSwwPT09dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSkpLHRoaXMuaW5z'@;
put 'dGFuY2UucnVuSG9va3MoImFmdGVyUmVtb3ZlQ29sIixoLGEsZixkKSx0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCksITB9c3BsaWNlQ29sKGwsYSxkKXtjb25zdCBoPXRoaXMuaW5zdGFuY2UuZ2V0RGF0YUF0Q29sKGwpLGY9aC5zbGlj'@;
put 'ZShhLGErZCksXz1oLnNsaWNlKGErZCk7Zm9yKHZhciBUPWFyZ3VtZW50cy5sZW5ndGgsVz1uZXcgQXJyYXkoVD4zP1QtMzowKSxpZT0zO2llPFQ7aWUrKylXW2llLTNdPWFyZ3VtZW50c1tpZV07bk4oVyxfKTtsZXQgZ2U9MDtmb3IoO2dlPGQ7KVcucHVzaChudWxsKSxnZSs9MTtyZXR1cm4g'@;
put 'cWVlKFcpLHRoaXMuaW5zdGFuY2UucG9wdWxhdGVGcm9tQXJyYXkoYSxsLFcsbnVsbCxudWxsLCJzcGxpY2VDb2wiKSxmfXNwbGljZVJvdyhsLGEsZCl7Y29uc3QgaD10aGlzLmluc3RhbmNlLmdldFNvdXJjZURhdGFBdFJvdyhsKSxmPWguc2xpY2UoYSxhK2QpLF89aC5zbGljZShhK2QpO2Zv'@;
put 'cih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFQ+Mz9ULTM6MCksaWU9MztpZTxUO2llKyspV1tpZS0zXT1hcmd1bWVudHNbaWVdO25OKFcsXyk7bGV0IGdlPTA7Zm9yKDtnZTxkOylXLnB1c2gobnVsbCksZ2UrPTE7cmV0dXJuIHRoaXMuaW5zdGFuY2UucG9wdWxhdGVGcm9t'@;
put 'QXJyYXkobCxhLFtXXSxudWxsLG51bGwsInNwbGljZVJvdyIpLGZ9c3BsaWNlRGF0YShsLGEsZCl7aWYoITEhPT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVEYXRhU3BsaWNlIixsLGEsZCkpe2NvbnN0IGY9Wy4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZSgwLGwpLC4uLmQsLi4udGhp'@;
put 'cy5kYXRhU291cmNlLnNsaWNlKGwpXTt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsZi5mb3JFYWNoKF89PnRoaXMuZGF0YVNvdXJjZS5wdXNoKF8pKX19ZmlsdGVyRGF0YShsLGEsZCl7bGV0IGg9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiZmlsdGVyRGF0YSIsbCxhLGQpOyExPT09QXJyYXku'@;
put 'aXNBcnJheShoKSYmKGg9dGhpcy5kYXRhU291cmNlLmZpbHRlcigoZixfKT0+LTE9PT1kLmluZGV4T2YoXykpKSx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5kYXRhU291cmNlLGgpfWdldChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5j'@;
put 'ZS50b1BoeXNpY2FsUm93KGwpO2xldCBoPXRoaXMuZGF0YVNvdXJjZVtkXTtjb25zdCBmPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGQpO2g9aXNOYU4oZik/ZjpoO2xldCBfPW51bGw7aWYoaCYmaC5oYXNPd25Qcm9wZXJ0eSYmYmwoaCxhKSlfPWhbYV07ZWxzZSBp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtjb25zdCBUPWEuc3BsaXQoIi4iKTtsZXQgVz1oO2lmKCFXKXJldHVybiBudWxsO2ZvcihsZXQgaWU9MCxnZT1ULmxlbmd0aDtpZTxnZTtpZSsrKWlmKFc9V1tUW2llXV0sdHlwZW9mIFc+InUiKXJldHVybiBudWxsO189'@;
put 'V31lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGEmJihfPWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGQsZCsxKVswXSkpO2lmKHRoaXMuaW5zdGFuY2UuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBUPV9nKF8pO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeURhdGEiLGQsdGhpcy5w'@;
put 'cm9wVG9Db2woYSksVCwiZ2V0IiksVC5pc1RvdWNoZWQoKSYmKF89VC52YWx1ZSl9cmV0dXJuIF99Z2V0Q29weWFibGUobCxhKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRvQ29sKGEpKS5jb3B5YWJsZT90aGlzLmdldChsLGEpOiIifXNldChsLGEsZCl7'@;
put 'Y29uc3QgaD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3cobCk7bGV0IGY9ZCxfPXRoaXMuZGF0YVNvdXJjZVtoXTtjb25zdCBUPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGgpO2lmKF89aXNOYU4oVCk/VDpfLHRoaXMuaW5zdGFuY2UuaGFzSG9vaygibW9kaWZ5'@;
put 'RGF0YSIpKXtjb25zdCBXPV9nKGYpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeURhdGEiLGgsdGhpcy5wcm9wVG9Db2woYSksVywic2V0IiksVy5pc1RvdWNoZWQoKSYmKGY9Vy52YWx1ZSl9aWYoXyYmXy5oYXNPd25Qcm9wZXJ0eSYmYmwoXyxhKSlfW2FdPWY7ZWxzZSBpZigic3Ry'@;
put 'aW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtjb25zdCBXPWEuc3BsaXQoIi4iKTtsZXQgd2UsaWU9XyxnZT0wO2ZvcihnZT0wLHdlPVcubGVuZ3RoLTE7Z2U8d2U7Z2UrKyl0eXBlb2YgaWVbV1tnZV1dPiJ1IiYmKGllW1dbZ2VdXT17fSksaWU9aWVbV1tnZV1dO2llW1dbZ2Vd'@;
put 'XT1mfWVsc2UiZnVuY3Rpb24iPT10eXBlb2YgYT9hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShoLGgrMSlbMF0sZik6X1thXT1mfXZpc3VhbFJvd3NUb1BoeXNpY2FsKGwsYSl7Y29uc3QgZD10aGlzLmluc3RhbmNlLmNvdW50U291cmNlUm93cygpLGg9W107bGV0IFQsZj0oZCtsKSVkLF89YTtm'@;
put 'b3IoO2Y8ZCYmXzspVD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coZiksaC5wdXNoKFQpLF8tPTEsZis9MTtyZXR1cm4gaH12aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSxoPVtdO2xldCBmPShkK2wpJWQsXz1hO2Zvcig7'@;
put 'ZjxkJiZfOyl7Y29uc3QgVD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4oZik7aC5wdXNoKFQpLF8tPTEsZis9MX1yZXR1cm4gaH1jbGVhcigpe2ZvcihsZXQgbD0wO2w8dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsKyspZm9yKGxldCBhPTA7YTx0aGlzLmluc3RhbmNl'@;
put 'LmNvdW50Q29scygpO2ErKyl0aGlzLnNldChsLHRoaXMuY29sVG9Qcm9wKGEpLCIiKX1nZXRMZW5ndGgoKXtjb25zdCBsPXRoaXMudGFibGVNZXRhLm1heFJvd3M7bGV0IGE7YT1sPDB8fDA9PT1sPzA6bHx8MS8wO2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXROb3RU'@;
put 'cmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihkLGEpfWdldEFsbCgpe2NvbnN0IGw9e3JvdzowLGNvbDowfSxhPXtyb3c6TWF0aC5tYXgodGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKS0xLDApLGNvbDpNYXRoLm1heCh0aGlzLmluc3RhbmNlLmNvdW50Q29scygpLTEsMCl9'@;
put 'O3JldHVybiBsLnJvdy1hLnJvdyE9MHx8dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKT90aGlzLmdldFJhbmdlKGwsYSxtNy5ERVNUSU5BVElPTl9SRU5ERVJFUik6W119Y291bnRDYWNoZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RofWdldFJhbmdl'@;
put 'KGwsYSxkKXtjb25zdCBoPVtdO2xldCBmLF8sVDtjb25zdCBXPXRoaXMudGFibGVNZXRhLm1heFJvd3MsaWU9dGhpcy50YWJsZU1ldGEubWF4Q29scztpZigwPT09V3x8MD09PWllKXJldHVybltdO2NvbnN0IGdlPWQ9PT1tNy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMu'@;
put 'Z2V0Q29weWFibGU6dGhpcy5nZXQsd2U9TWF0aC5taW4oTWF0aC5tYXgoVy0xLDApLE1hdGgubWF4KGwucm93LGEucm93KSksRWU9TWF0aC5taW4oTWF0aC5tYXgoaWUtMSwwKSxNYXRoLm1heChsLmNvbCxhLmNvbCkpO2ZvcihmPU1hdGgubWluKGwucm93LGEucm93KTtmPD13ZTtmKyspe1Q9'@;
put 'W107Y29uc3QgWmU9Zj49MD90aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coZik6Zjtmb3IoXz1NYXRoLm1pbihsLmNvbCxhLmNvbCk7Xzw9RWUmJm51bGwhPT1aZTtfKyspVC5wdXNoKGdlLmNhbGwodGhpcyxmLHRoaXMuY29sVG9Qcm9wKF8pKSk7bnVsbCE9PVplJiZoLnB1c2goVCl9cmV0'@;
put 'dXJuIGh9Z2V0VGV4dChsLGEpe3JldHVybiBDeSh0aGlzLmdldFJhbmdlKGwsYSxtNy5ERVNUSU5BVElPTl9SRU5ERVJFUikpfWdldENvcHlhYmxlVGV4dChsLGEpe3JldHVybiBDeSh0aGlzLmdldFJhbmdlKGwsYSxtNy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKSl9ZGVzdHJv'@;
put 'eSgpe3RoaXMuaW5zdGFuY2U9bnVsbCx0aGlzLm1ldGFNYW5hZ2VyPW51bGwsdGhpcy5kYXRhU291cmNlPW51bGwsdGhpcy5kdWNrU2NoZW1hPW51bGwsdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGg9MCx0aGlzLnByb3BUb0NvbENhY2hlLmNsZWFyKCksdGhpcy5wcm9wVG9Db2xDYWNoZT12'@;
put 'b2lkIDB9fWNvbnN0IHpEZT1tNztmdW5jdGlvbiBqbmUoYyxsLGEsZCl7Y29uc3R7aG90SW5zdGFuY2U6aCxkYXRhTWFwOmYsZGF0YVNvdXJjZTpfLGludGVybmFsU291cmNlOlQsc291cmNlOlcsbWV0YU1hbmFnZXI6aWUsZmlyc3RSdW46Z2V9PWQsd2U9YnUoVCksRWU9aC5nZXRTZXR0aW5n'@;
put 'cygpO2guZGF0YVR5cGU9QXJyYXkuaXNBcnJheShFZS5kYXRhU2NoZW1hKT8iYXJyYXkiOlJhKEVlLmRhdGFTY2hlbWEpPyJmdW5jdGlvbiI6Im9iamVjdCIsZiYmZi5kZXN0cm95KCksYz1oLnJ1bkhvb2tzKGBiZWZvcmUke3dlfWAsYyxnZSxXKTtjb25zdCBaZT1uZXcgekRlKGgsYyxpZSk7'@;
put 'aWYobChaZSksIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyljLnB1c2gmJmMuc3BsaWNlfHwoYz1bY10pO2Vsc2V7aWYobnVsbCE9PWMpdGhyb3cgbmV3IEVycm9yKGAke1R9IG9ubHkgYWNjZXB0cyBhcnJheSBvZiBvYmplY3RzIG9yIGFycmF5IG9mIGFycmF5cyAoJHt0eXBlb2YgY30g'@;
put 'Z2l2ZW4pYCk7e2NvbnN0IG90PVplLmdldFNjaGVtYSgpO2M9W107bGV0IGV0LHl0PTAsa3Q9MDtmb3IoeXQ9MCxrdD1FZS5zdGFydFJvd3M7eXQ8a3Q7eXQrKylpZigib2JqZWN0IiE9PWguZGF0YVR5cGUmJiJmdW5jdGlvbiIhPT1oLmRhdGFUeXBlfHwhRWUuZGF0YVNjaGVtYSlpZigiYXJy'@;
put 'YXkiPT09aC5kYXRhVHlwZSlldD15dShvdFswXSksYy5wdXNoKGV0KTtlbHNle2V0PVtdO2ZvcihsZXQgU3Q9MCxRdD1FZS5zdGFydENvbHM7U3Q8UXQ7U3QrKylldC5wdXNoKG51bGwpO2MucHVzaChldCl9ZWxzZSBldD15dShvdCksYy5wdXNoKGV0KX19QXJyYXkuaXNBcnJheShjWzBdKSYm'@;
put 'KGguZGF0YVR5cGU9ImFycmF5IiksRWUuZGF0YT1jLFplLmRhdGFTb3VyY2U9YyxfLmRhdGE9YyxfLmRhdGFUeXBlPWguZGF0YVR5cGUsXy5jb2xUb1Byb3A9WmUuY29sVG9Qcm9wLmJpbmQoWmUpLF8ucHJvcFRvQ29sPVplLnByb3BUb0NvbC5iaW5kKFplKSxfLmNvdW50Q2FjaGVkQ29sdW1u'@;
put 'cz1aZS5jb3VudENhY2hlZENvbHVtbnMuYmluZChaZSksYShaZSksaC5ydW5Ib29rcyhgYWZ0ZXIke3dlfWAsYyxnZSxXKSxnZXx8KGgucnVuSG9va3MoImFmdGVyQ2hhbmdlIixudWxsLFQpLGgucmVuZGVyKCkpfWNvbnN0IHpuZT1uZXcgTWFwKFtbIiAiLCJzcGFjZSJdLFsic3BhY2ViYXIi'@;
put 'LCJzcGFjZSJdLFsic2Nyb2xsIiwic2Nyb2xsbG9jayJdLFsiZGVsIiwiZGVsZXRlIl0sWyJlc2MiLCJlc2NhcGUiXSxbIm1lZGlhbmV4dHRyYWNrIiwibWVkaWF0cmFja25leHQiXSxbIm1lZGlhcHJldmlvdXN0cmFjayIsIm1lZGlhdHJhY2twcmV2aW91cyJdLFsidm9sdW1ldXAiLCJhdWRp'@;
put 'b3ZvbHVtZXVwIl0sWyJ2b2x1bWVkb3duIiwiYXVkaW92b2x1bWVkb3duIl0sWyJ2b2x1bWVtdXRlIiwiYXVkaW92b2x1bWVtdXRlIl0sWyJtdWx0aXBseSIsIioiXSxbImFkZCIsIisiXSxbImRpdmlkZSIsIi8iXSxbInN1YnRyYWN0IiwiLSJdLFsibGVmdCIsImFycm93bGVmdCJdLFsicmln'@;
put 'aHQiLCJhcnJvd3JpZ2h0Il0sWyJ1cCIsImFycm93dXAiXSxbImRvd24iLCJhcnJvd2Rvd24iXV0pLFVrPWM9PmMubWFwKGw9Pntjb25zdCBhPWwudG9Mb3dlckNhc2UoKTtyZXR1cm4gem5lLmhhcyhhKT96bmUuZ2V0KGEpOmF9KS5zb3J0KCkuam9pbigiKyIpLFVuZT1jPT5jLnRvTG93ZXJD'@;
put 'YXNlKCksV0RlPVsibWV0YSIsImFsdCIsInNoaWZ0IiwiY29udHJvbCJdLFN5PWZ1bmN0aW9uIFlEZSgpe2NvbnN0IGM9bmV3IFNldDtyZXR1cm57cHJlc3MobCl7Yy5hZGQobCl9LHJlbGVhc2UobCl7Yy5kZWxldGUobCl9LHJlbGVhc2VBbGwoKXtjLmNsZWFyKCl9LGlzUHJlc3NlZDpsPT5j'@;
put 'LmhhcyhsKX19KCksJERlPWM9PntsZXR7b3duZXJXaW5kb3c6bCxoYW5kbGVFdmVudDphLGJlZm9yZUtleURvd246ZCxhZnRlcktleURvd246aH09Yztjb25zdCBmPV9rKHtlcnJvcklkRXhpc3RzOlplPT5gVGhlICIke1plfSIgY29udGV4dCBuYW1lIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5g'@;
put 'fSk7bGV0IF89ImdyaWQiO2NvbnN0IFc9KCk9Pl8saWU9WmU9PmYuZ2V0SXRlbShaZSk7bGV0IHdlPSExO2NvbnN0IEVlPWZ1bmN0aW9uIEdEZShjLGwsYSxkLGgpe2NvbnN0IGY9RWU9PldEZS5pbmNsdWRlcyhFZSksXz1mdW5jdGlvbihFZSl7bGV0IFplPWFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3Qgb3Q9W107cmV0dXJuIEVlLmFsdEtleSYmb3QucHVzaCgiYWx0IiksWmUmJihFZS5jdHJsS2V5fHxFZS5tZXRhS2V5KT9vdC5wdXNoKCJjb250cm9sL21ldGEiKTooRWUuY3RybEtleSYmb3QucHVzaCgiY29udHJvbCIp'@;
put 'LEVlLm1ldGFLZXkmJm90LnB1c2goIm1ldGEiKSksRWUuc2hpZnRLZXkmJm90LnB1c2goInNoaWZ0Iiksb3R9LFQ9RWU9PntpZighMT09PWwoRWUpKXJldHVybjtjb25zdCBaZT1hKEVlKTtpZigyMjk9PT1FZS5rZXlDb2RlfHwhMT09PVplfHxiZyhFZSkpcmV0dXJuO2NvbnN0IG90PVVuZShF'@;
put 'ZS5rZXkpO2xldCBldD1bXTtmKG90KT9TeS5wcmVzcyhvdCk6ZXQ9XyhFZSk7Y29uc3QgeXQ9W290XS5jb25jYXQoZXQpOyFoKEVlLHl0KSYmKGhrKCkmJmV0LmluY2x1ZGVzKCJtZXRhIil8fCFoaygpJiZldC5pbmNsdWRlcygiY29udHJvbCIpKSYmaChFZSxbb3RdLmNvbmNhdChfKEVlLCEw'@;
put 'KSkpLGQoRWUpfSxXPUVlPT57aWYoITE9PT1sKEVlKSlyZXR1cm47Y29uc3QgWmU9VW5lKEVlLmtleSk7ITEhPT1mKFplKSYmU3kucmVsZWFzZShaZSl9LGllPSgpPT57U3kucmVsZWFzZUFsbCgpfTtyZXR1cm57bW91bnQ6KCk9PntsZXQgRWU9Yztmb3IoO0VlOylFZS5kb2N1bWVudC5kb2N1'@;
put 'bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVCksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixXKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsaWUpLEVlPWV5KEVlKX0s'@;
put 'dW5tb3VudDooKT0+e2xldCBFZT1jO2Zvcig7RWU7KUVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixUKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLFcpLEVlLmRvY3VtZW50LmRv'@;
put 'Y3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixpZSksRWU9ZXkoRWUpfSxpc1ByZXNzZWQ6RWU9PlN5LmlzUHJlc3NlZChFZSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5TeS5yZWxlYXNlQWxsKCl9fShsLGEsZCxoLChaZSxvdCk9Pntjb25zdCBldD1pZShXKCkpO2xl'@;
put 'dCB5dD0hMTtpZighZXQuaGFzU2hvcnRjdXQob3QpKXJldHVybiB5dDtjb25zdCBrdD1ldC5nZXRTaG9ydGN1dHMob3QpO2ZvcihsZXQgU3Q9MDtTdDxrdC5sZW5ndGg7U3QrKyl7Y29uc3R7Y2FsbGJhY2s6UXQscnVuT25seUlmOnJuLHByZXZlbnREZWZhdWx0OnZuLHN0b3BQcm9wYWdhdGlv'@;
put 'bjpObixjYXB0dXJlQ3RybDpjcn09a3RbU3RdO2lmKCExIT09cm4oWmUpJiYod2U9Y3IseXQ9ITE9PT1RdChaZSxvdCksd2U9ITEsdm4mJlplLnByZXZlbnREZWZhdWx0KCksTm4mJlplLnN0b3BQcm9wYWdhdGlvbigpLHl0KSlicmVha31yZXR1cm4geXR9KTtyZXR1cm4gRWUubW91bnQoKSx7'@;
put 'YWRkQ29udGV4dDpaZT0+e2NvbnN0IG90PShjPT57Y29uc3QgbD1fayh7ZXJyb3JJZEV4aXN0czpXPT5gVGhlICIke1d9IiBzaG9ydGN1dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlICIke2N9IiBjb250ZXh0LmB9KSxhPWZ1bmN0aW9uKCl7bGV0e2tleXM6VyxjYWxsYmFjazppZSxn'@;
put 'cm91cDpnZSxydW5Pbmx5SWY6d2U9KCgpPT4hMCksY2FwdHVyZUN0cmw6RWU9ITEscHJldmVudERlZmF1bHQ6WmU9ITAsc3RvcFByb3BhZ2F0aW9uOm90PSExLHJlbGF0aXZlVG9Hcm91cDpldCxwb3NpdGlvbjp5dH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/'@;
put 'YXJndW1lbnRzWzBdOnt9O2lmKExhKGdlKSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSB0aGUgc2hvcnRjdXQncyBncm91cC4iKTtpZighMT09PVJhKGllKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzaG9ydGN1dCdzIGNhbGxiYWNrIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24u'@;
put 'Iik7aWYoITE9PT1BcnJheS5pc0FycmF5KFcpKXRocm93IG5ldyBFcnJvcihBYWBQYXNzIHRoZSBzaG9ydGN1dFwncyBrZXlzIGFzIGFuIGFycmF5IG9mIGFycmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlx4MjAKICAgICAgaHR0cHM6Ly9k'@;
put 'ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMuYCk7Y29uc3Qga3Q9e2NhbGxiYWNrOmllLGdyb3VwOmdlLHJ1bk9ubHlJZjp3ZSxjYXB0dXJlQ3RybDpFZSxwcmV2ZW50RGVmYXVsdDpaZSxzdG9wUHJvcGFnYXRpb246'@;
put 'b3R9O0tpKGV0KSYmKFtrdC5yZWxhdGl2ZVRvR3JvdXAsa3QucG9zaXRpb25dPVtldCx5dF0pLFcuZm9yRWFjaChTdD0+e2NvbnN0IFF0PVVrKFN0KTtpZihsLmhhc0l0ZW0oUXQpKXtjb25zdCB2bj1sLmdldEl0ZW0oUXQpO2xldCBObj12bi5maW5kSW5kZXgoY3I9PmNyLmdyb3VwPT09ZXQp'@;
put 'Oy0xIT09Tm4/ImJlZm9yZSI9PT15dD9Obi09MTpObis9MTpObj12bi5sZW5ndGgsdm4uc3BsaWNlKE5uLDAsa3QpfWVsc2UgbC5hZGRJdGVtKFF0LFtrdF0pfSl9LGg9Vz0+e2NvbnN0IGllPVVrKFcpO2wucmVtb3ZlSXRlbShpZSl9O3JldHVybnthZGRTaG9ydGN1dDphLGFkZFNob3J0Y3V0'@;
put 'czpmdW5jdGlvbihXKXtsZXQgaWU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O1cuZm9yRWFjaChnZT0+e2RzKGllLCh3ZSxFZSk9PnshMT09PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnZSxFZSkmJihnZVtF'@;
put 'ZV09aWVbRWVdKX0pLGEoZ2UpfSl9LGdldFNob3J0Y3V0czpXPT57Y29uc3QgaWU9VWsoVyksZ2U9bC5nZXRJdGVtKGllKTtyZXR1cm4gS2koZ2UpP2dlLnNsaWNlKCk6W119LGhhc1Nob3J0Y3V0Olc9Pntjb25zdCBpZT1VayhXKTtyZXR1cm4gbC5oYXNJdGVtKGllKX0scmVtb3ZlU2hvcnRj'@;
put 'dXRzQnlLZXlzOmgscmVtb3ZlU2hvcnRjdXRzQnlHcm91cDpXPT57bC5nZXRJdGVtcygpLmZvckVhY2goZ2U9PntsZXRbd2UsRWVdPWdlO2NvbnN0IFplPUVlLmZpbHRlcihvdD0+b3QuZ3JvdXAhPT1XKTswPT09WmUubGVuZ3RoP2goKGM9PmMuc3BsaXQoIisiKSkod2UpKTooRWUubGVuZ3Ro'@;
put 'PTAsRWUucHVzaCguLi5aZSkpfSl9fX0pKFplKTtyZXR1cm4gZi5hZGRJdGVtKFplLG90KSxvdH0sZ2V0QWN0aXZlQ29udGV4dE5hbWU6VyxnZXRDb250ZXh0OmllLHNldEFjdGl2ZUNvbnRleHROYW1lOlplPT57Xz1aZX0saXNDdHJsUHJlc3NlZDooKT0+IXdlJiYoRWUuaXNQcmVzc2VkKCJj'@;
put 'b250cm9sIil8fEVlLmlzUHJlc3NlZCgibWV0YSIpKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PkVlLnJlbGVhc2VQcmVzc2VkS2V5cygpLGRlc3Ryb3k6KCk9PkVlLnVubW91bnQoKX19LHFEZT0iZ3JpZERlZmF1bHQiO2xldCBZQj1udWxsO2Z1bmN0aW9uIFdCKGMsbCl7dmFyIGE7bGV0IGQ9'@;
put 'YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9dGhpcztjb25zdCBfPW5ldyBsbChmKTtsZXQgVCxXLGllLGdlLHdlPSEwOyhmdW5jdGlvbiBvVGUoYyl7cmV0dXJuIGM9PT1uVn0pKGQpJiZmdW5jdGlvbiBpVGUoYyl7bG5lLnNl'@;
put 'dChjLCEwKX0odGhpcyksdGhpcy5yb290RWxlbWVudD1jLHRoaXMucm9vdERvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXcsdGhpcy5pc0Rlc3Ryb3llZD0hMSx0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9MCx0'@;
put 'aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9MDtjb25zdCBFZT1udWxsIT09KGE9bD8ubGF5b3V0RGlyZWN0aW9uKSYmdm9pZCAwIT09YT9hOiJpbmhlcml0IixaZT1bInJ0bCIsImx0ciJdLmluY2x1ZGVzKEVlKT9FZTp0aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlz'@;
put 'LnJvb3RFbGVtZW50KS5kaXJlY3Rpb247dGhpcy5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRpciIsWmUpLHRoaXMuaXNSdGw9ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PVplfSx0aGlzLmlzTHRyPWZ1bmN0aW9uKCl7cmV0dXJuIWYuaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0'@;
put 'b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0x0cigpPzE6LTF9LGwubGFuZ3VhZ2U9ZnVuY3Rpb24gcVRlKGMpe2xldCBsPU1uZShjKTtyZXR1cm4gTkIobCl8fChsPUhCLHhuZShjKSksbH0obC5sYW5ndWFnZSk7Y29uc3Qgb3Q9bmV3IE5uZShmLGwsW05EZSxWRGVdKSxldD1vdC5nZXRUYWJs'@;
put 'ZU1ldGEoKSx5dD1vdC5nZXRHbG9iYWxNZXRhKCksa3Q9X2soKTt0aGlzLmNvbnRhaW5lcj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnJlbmRlckNhbGw9ITEsYy5pbnNlcnRCZWZvcmUodGhpcy5jb250YWluZXIsYy5maXJzdENoaWxkKSxyVih0aGlzKSYm'@;
put 'cnRlKGwubGljZW5zZUtleSxjKSx0aGlzLmd1aWQ9YGh0XyR7YU4oKX1gLHRoaXMuY29sdW1uSW5kZXhNYXBwZXI9bmV3IHZWLHRoaXMucm93SW5kZXhNYXBwZXI9bmV3IHZWLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHZ0PT57'@;
put 'Zi5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdnQpfSksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdnQ9PntmLnJ1bkhvb2tzKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix2dCl9KSxXPW5ldyBfVGUoZiksKCF0'@;
put 'aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsMykpJiYodGhpcy5yb290RWxlbWVudC5pZD10aGlzLmd1aWQpO2NvbnN0IFN0PXZ0PT57Y29uc3R7cm93Ok90LGNvbDpjbn09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoT3Q+'@;
put 'PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE90KTpPdCxjbj49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoY24pOmNuKX07bGV0IHJuPW5ldyBFRGUoZXQse3Jvd0luZGV4TWFwcGVyOigpPT5mLnJvd0lu'@;
put 'ZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOigpPT5mLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50Q29sczooKT0+Zi5jb3VudENvbHMoKSxjb3VudFJvd3M6KCk9PmYuY291bnRSb3dzKCkscHJvcFRvQ29sOnZ0PT5ULnByb3BUb0NvbCh2dCksaXNFZGl0b3JPcGVuZWQ6KCk9PiEhZi5nZXRB'@;
put 'Y3RpdmVFZGl0b3IoKSYmZi5nZXRBY3RpdmVFZGl0b3IoKS5pc09wZW5lZCgpLGNvdW50Q29sc1RyYW5zbGF0ZWQ6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksY291bnRSb3dzVHJhbnNsYXRlZDooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3MoKSxnZXRT'@;
put 'aG9ydGN1dE1hbmFnZXI6KCk9PmYuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksY3JlYXRlQ2VsbENvb3JkczoodnQsT3QpPT5mLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxjcmVhdGVDZWxsUmFuZ2U6KHZ0LE90LGNuKT0+Zi5fY3JlYXRlQ2VsbFJhbmdlKHZ0LE90LGNuKSx2aXN1YWxUb1JlbmRl'@;
put 'cmFibGVDb29yZHM6U3QscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOnZ0PT57Y29uc3R7cm93Ok90LGNvbDpjbn09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoT3Q+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE90KTpPdCxjbj49MD9mLmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoY24pOmNuKX0saXNEaXNhYmxlZENlbGxTZWxlY3Rpb246KHZ0LE90KT0+Zi5nZXRDZWxsTWV0YSh2dCxPdCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbn0pO3RoaXMuc2VsZWN0aW9uPXJuO2NvbnN0IHZuPXZ0PT57'@;
put 'bGV0e2hpZGRlbkluZGV4ZXNDaGFuZ2VkOk90fT12dDtPdCYmdGhpcy5zZWxlY3Rpb24ucmVmcmVzaCgpfTtmdW5jdGlvbiBObih2dCl7Y29uc3QgT3Q9TW5lKHZ0KTtOQihPdCk/KGYucnVuSG9va3MoImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixPdCkseXQubGFuZ3VhZ2U9T3QsZi5ydW5Ib29r'@;
put 'cygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsT3QpKTp4bmUodnQpfWZ1bmN0aW9uIGNyKHZ0LE90KXtjb25zdCBjbj0iY2xhc3NOYW1lIj09PXZ0P2Yucm9vdEVsZW1lbnQ6Zi50YWJsZTtpZih3ZSlwaShjbixPdCk7ZWxzZXtsZXQgRW49W10sT249W107eXRbdnRdJiYoRW49QXJyYXkuaXNBcnJh'@;
put 'eSh5dFt2dF0pP3l0W3Z0XTpvTih5dFt2dF0pKSxPdCYmKE9uPUFycmF5LmlzQXJyYXkoT3QpP090Om9OKE90KSk7Y29uc3QgSm49aU4oRW4sT24pLFByPWlOKE9uLEVuKTtKbi5sZW5ndGgmJldvKGNuLEpuKSxQci5sZW5ndGgmJnBpKGNuLFByKX15dFt2dF09T3R9ZnVuY3Rpb24gRHIoKXts'@;
put 'ZXQgdnQ9ITE7cmV0dXJue3ZhbGlkYXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRkVmFsaWRhdG9yVG9RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWUrPTEsdnQ9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWU9dGhpcy52YWxpZGF0b3Jz'@;
put 'SW5RdWV1ZS0xPDA/MDp0aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9uUXVldWVFbXB0eSgpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eSgpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlJiYhMT09PXZ0JiYodnQ9ITAsdGhpcy5vblF1ZXVlRW1w'@;
put 'dHkodGhpcy52YWxpZCkpfX19ZnVuY3Rpb24gX2kodnQpe2NvbnN0IE90PXZ0LnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihwYXJzZUZsb2F0KE90KSk/cGFyc2VGbG9hdChPdCk6dnR9ZnVuY3Rpb24gbGkodnQsT3QsY24pe2lmKCF2dC5sZW5ndGgpcmV0dXJuO2NvbnN0IEVu'@;
put 'PWYuZ2V0QWN0aXZlRWRpdG9yKCksT249bmV3IERyO2xldCBKbj0hMDtPbi5vblF1ZXVlRW1wdHk9UHI9PntFbiYmSm4mJkVuLmNhbmNlbENoYW5nZXMoKSxjbihQcil9O2ZvcihsZXQgUHI9dnQubGVuZ3RoLTE7UHI+PTA7UHItLSl7Y29uc3RbT3IsJHIsLFlyXT12dFtQcl0sTnI9VC5wcm9w'@;
put 'VG9Db2woJHIpLFJpPWYuZ2V0Q2VsbE1ldGEoT3IsTnIpOyJudW1lcmljIj09PVJpLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgWXImJkx0ZShZcikmJih2dFtQcl1bM109X2koWXIpKSxmLmdldENlbGxWYWxpZGF0b3IoUmkpJiYoT24uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVD'@;
put 'ZWxsKHZ0W1ByXVszXSxSaSxmdW5jdGlvbihYbyxHbyl7cmV0dXJuIGZ1bmN0aW9uKEpzKXtpZigiYm9vbGVhbiIhPXR5cGVvZiBKcyl0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpO2lmKCExPT09SnMmJiExPT09R28uYWxsb3dJbnZh'@;
put 'bGlkKXtKbj0hMSx2dC5zcGxpY2UoWG8sMSksR28udmFsaWQ9ITA7Y29uc3QgZ2E9Zi5nZXRDZWxsKEdvLnZpc3VhbFJvdyxHby52aXN1YWxDb2wpO251bGwhPT1nYSYmV28oZ2EsZXQuaW52YWxpZENlbGxDbGFzc05hbWUpfU9uLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfX0oUHIsUmkp'@;
put 'LE90KSl9T24uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfWZ1bmN0aW9uIG1yKHZ0LE90KXtsZXQgY249dnQubGVuZ3RoLTE7aWYoY248MClyZXR1cm47Zm9yKDtjbj49MDtjbi0tKXtsZXQgT249ITE7aWYobnVsbCE9PXZ0W2NuXSl7aWYobnVsbCE9dnRbY25dWzJdfHxudWxsIT12dFtjbl1bM10p'@;
put 'e2lmKGV0LmFsbG93SW5zZXJ0Um93KWZvcig7dnRbY25dWzBdPmYuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOkpufT1ULmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6T3R9KTtpZigwPT09Sm4pe09uPSEwO2JyZWFrfX1pZigiYXJyYXkiPT09Zi5kYXRhVHlwZSYmKCFldC5j'@;
put 'b2x1bW5zfHwwPT09ZXQuY29sdW1ucy5sZW5ndGgpJiZldC5hbGxvd0luc2VydENvbHVtbilmb3IoO1QucHJvcFRvQ29sKHZ0W2NuXVsxXSk+Zi5jb3VudENvbHMoKS0xOyl7Y29uc3R7ZGVsdGE6Sm59PVQuY3JlYXRlQ29sKHZvaWQgMCx2b2lkIDAse3NvdXJjZTpPdH0pO2lmKDA9PT1Kbil7'@;
put 'T249ITA7YnJlYWt9fU9ufHxULnNldCh2dFtjbl1bMF0sdnRbY25dWzFdLHZ0W2NuXVszXSl9fWVsc2UgdnQuc3BsaWNlKGNuLDEpfWYuZm9yY2VGdWxsUmVuZGVyPSEwLGllLmFkanVzdFJvd3NBbmRDb2xzKCksZi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlUmVuZGVyIix2dCxPdCksZ2UubG9j'@;
put 'a0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLGdlLnVubG9ja0VkaXRvcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsdnQsT3R8fCJlZGl0Iik7Y29uc3QgRW49Zi5nZXRBY3RpdmVFZGl0b3IoKTtFbiYmS2koRW4ucmVmcmVz'@;
put 'aFZhbHVlKSYmRW4ucmVmcmVzaFZhbHVlKCl9ZnVuY3Rpb24gRWkodnQsT3QsY24pe3JldHVybiBBcnJheS5pc0FycmF5KHZ0KT92dDpbW3Z0LE90LGNuXV19ZnVuY3Rpb24gWnIodnQsT3Qpe2NvbnN0IGNuPWYuZ2V0QWN0aXZlRWRpdG9yKCksRW49Zi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdl'@;
put 'Iix2dCxPdHx8ImVkaXQiKSxPbj12dC5maWx0ZXIoSm49Pm51bGwhPT1Kbik7cmV0dXJuITE9PT1Fbnx8MD09PU9uLmxlbmd0aD8oY24mJmNuLmNhbmNlbENoYW5nZXMoKSxbXSk6T259dGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsdm4pLHRoaXMu'@;
put 'cm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLHZuKSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLHZ0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9j'@;
put 'YWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5n'@;
put 'ZUVuZCIsdnQpLHZ0LnJvdzwwJiYodnQucm93PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSksdnQuY29sPDAmJih2dC5jb2w9dGhpcy52aWV3Ll93dC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9v'@;
put 'aygiYWZ0ZXJTZXRSYW5nZUVuZCIsdnQ9Pntjb25zdCBPdD1fZyghMSksY249dGhpcy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLHtmcm9tOkVuLHRvOk9ufT1jbi5jdXJyZW50KCksSm49Y24uc2l6ZSgpLTE7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLEVuLnJvdyxFbi5j'@;
put 'b2wsT24ucm93LE9uLmNvbCxPdCxKbiksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLEVuLnJvdyxmLmNvbFRvUHJvcChFbi5jb2wpLE9uLnJvdyxmLmNvbFRvUHJvcChPbi5jb2wpLE90LEpuKTtjb25zdCBQcj10aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlBbnlIZWFk'@;
put 'ZXIoKSxPcj10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtsZXQgJHI9ITA7aCYmKCRyPSExKSxPdC5pc1RvdWNoZWQoKSYmKCRyPSFPdC52YWx1ZSk7Y29uc3QgWXI9dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTnI9dGhpcy5zZWxlY3Rpb24u'@;
put 'aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7ITEhPT0kciYmKFByP1lyP3RoaXMudmlldy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoZi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0LnJvdykpOk5yJiZ0aGlzLnZpZXcuc2Nyb2xsVmlld3BvcnRIb3Jp'@;
put 'em9udGFsbHkoZi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0LmNvbCkpOk9yJiYhdGhpcy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpP3RoaXMudmlldy5zY3JvbGxWaWV3cG9ydChTdChPci5mcm9tKSk6dGhpcy52aWV3LnNjcm9sbFZpZXdwb3J0KFN0'@;
put 'KHZ0KSkpLFlyJiZOcj9waSh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSk6WXI/KFdvKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSxwaSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0'@;
put 'aW9uLS1yb3dzIikpOk5yPyhXbyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1yb3dzIikscGkodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpKTpXbyh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24t'@;
put 'LWNvbHVtbnMiXSksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLHZ0PT57Y29uc3QgT3Q9dnQubGVuZ3RoLTEse2Zyb206Y24sdG86RW59PXZ0W090XTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNl'@;
put 'bGVjdGlvbkVuZCIsY24ucm93LGNuLmNvbCxFbi5yb3csRW4uY29sLE90KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsY24ucm93LGYuY29sVG9Qcm9wKGNuLmNvbCksRW4ucm93LGYuY29sVG9Qcm9wKEVuLmNvbCksT3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9j'@;
put 'YWxIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHZ0PT57Y29uc3QgT3Q9dGhpcy5ydW5Ib29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dC52YWx1ZSk7dnQudmFsdWUmJih2dC52YWx1ZT1PdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlm'@;
put 'eVRyYW5zZm9ybVN0YXJ0Iix2dD0+e3RoaXMucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybVN0YXJ0Iix2dCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCh2dCxPdCxjbik9Pnt0aGlzLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5z'@;
put 'Zm9ybVN0YXJ0Iix2dCxPdCxjbil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLHZ0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlU'@;
put 'cmFuc2Zvcm1FbmQiLCh2dCxPdCxjbik9Pnt0aGlzLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsdnQsT3QsY24pfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckRlc2VsZWN0IiwoKT0+e2dlLmRlc3Ryb3lFZGl0b3IoKSx0aGlzLl9yZWZyZXNoQm9yZGVy'@;
put 'cygpLFdvKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSx0aGlzLnJ1bkhvb2tzKCJhZnRlckRlc2VsZWN0Iil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHZ0PT57dGhpcy5h'@;
put 'bHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdnQsMSwiYXV0byIpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIix2dD0+e3RoaXMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHZ0LDEsImF1dG8iKX0pLGllPXthbHRlcih2dCxPdCl7dmFyIGNuLEVuO2xl'@;
put 'dCBPbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxKbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxQcj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25zdCBPcj0kcj0+e2lmKDA9'@;
put 'PT0kci5sZW5ndGgpcmV0dXJuW107Y29uc3QgWXI9Wy4uLiRyXTtyZXR1cm4gWXIuc29ydCgoUmksWG8pPT57bGV0W0dvXT1SaSxbSnNdPVhvO3JldHVybiBHbz09PUpzPzA6R28+SnM/MTotMX0pLEFsKFlyLChSaSxYbyk9PntsZXRbR28sSnNdPVhvO2NvbnN0IGdhPVJpW1JpLmxlbmd0aC0x'@;
put 'XSxbdW8sQXRdPWdhLElpPXVvK0F0O2lmKEdvPD1JaSl7Y29uc3QgUXM9TWF0aC5tYXgoSnMtKElpLUdvKSwwKTtnYVsxXSs9UXN9ZWxzZSBSaS5wdXNoKFtHbyxKc10pO3JldHVybiBSaX0sW1lyWzBdXSl9O3N3aXRjaCh2dCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9y'@;
put 'b3dfYWJvdmUiOmNvbnN0ICRyPWYuY291bnRTb3VyY2VSb3dzKCk7aWYoZXQubWF4Um93cz09PSRyKXJldHVybjtjb25zdCBZcj0iaW5zZXJ0X3Jvd19iZWxvdyI9PT12dD8iYmVsb3ciOiJhYm92ZSI7T3Q9bnVsbCE9PShjbj1PdCkmJnZvaWQgMCE9PWNuP2NuOiJiZWxvdyI9PT1Zcj8kcjow'@;
put 'O2NvbnN0e2RlbHRhOk5yLHN0YXJ0UGh5c2ljYWxJbmRleDpSaX09VC5jcmVhdGVSb3coT3QsT24se3NvdXJjZTpKbixtb2RlOllyfSk7aWYoTnIpe2NvbnN0IEF0PXJuLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLElpPUF0Py5mcm9tLFFzPUlpPy5yb3csbGE9Zi50b1Zpc3VhbFJvdyhSaSk7'@;
put 'aWYocm4uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RBbGwoKTtlbHNlIGlmKEtpKFFzKSYmUXM+PWxhKXtjb25zdHtyb3c6RnMsY29sOmVjfT1BdC50bztsZXQgQ2E9SWkuY29sO3JuLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYoQ2E9LTEpLHJuLmdldFNlbGVjdGVkUmFuZ2UoKS5w'@;
put 'b3AoKSxybi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVhdGVDZWxsQ29vcmRzKFFzK05yLENhKSwhMCkscm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhGcytOcixlYykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMoKX1icmVhaztjYXNlImluc2VydF9jb2xfc3RhcnQiOmNhc2Ui'@;
put 'aW5zZXJ0X2NvbF9lbmQiOmNvbnN0IFhvPSJpbnNlcnRfY29sX2VuZCI9PT12dD8iZW5kIjoic3RhcnQiO090PW51bGwhPT0oRW49T3QpJiZ2b2lkIDAhPT1Fbj9FbjoiZW5kIj09PVhvP2YuY291bnRTb3VyY2VDb2xzKCk6MDtjb25zdHtkZWx0YTpHbyxzdGFydFBoeXNpY2FsSW5kZXg6SnN9'@;
put 'PVQuY3JlYXRlQ29sKE90LE9uLHtzb3VyY2U6Sm4sbW9kZTpYb30pO2lmKEdvKXtpZihBcnJheS5pc0FycmF5KGV0LmNvbEhlYWRlcnMpKXtjb25zdCBGcz1bZi50b1Zpc3VhbENvbHVtbihKcyksMF07RnMubGVuZ3RoKz1HbyxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGV0LmNvbEhl'@;
put 'YWRlcnMsRnMpfWNvbnN0IEF0PXJuLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLElpPUF0Py5mcm9tLFFzPUlpPy5jb2wsbGE9Zi50b1Zpc3VhbENvbHVtbihKcyk7aWYocm4uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RBbGwoKTtlbHNlIGlmKEtpKFFzKSYmUXM+PWxhKXtjb25zdHty'@;
put 'b3c6RnMsY29sOmVjfT1BdC50bztsZXQgQ2E9SWkucm93O3JuLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYoQ2E9LTEpLHJuLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKSxybi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVhdGVDZWxsQ29vcmRzKENhLFFzK0dvKSwhMCkscm4uc2V0UmFu'@;
put 'Z2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhGcyxlYytHbykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMoKX1icmVhaztjYXNlInJlbW92ZV9yb3ciOmNvbnN0IGdhPUF0PT57bGV0IElpPTA7RG4oQXQsUXM9PntsZXRbbGEsRnNdPVFzO2NvbnN0IGVjPXBjKGxhKT9mLmNvdW50Um93cygpLTE6'@;
put 'TWF0aC5tYXgobGEtSWksMCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsYSkmJihsYT1NYXRoLm1heChsYS1JaSwwKSksIVQucmVtb3ZlUm93KGxhLEZzLEpuKSlyZXR1cm47Y29uc3QgUmg9Zi5jb3VudFJvd3MoKSxTMT1ldC5maXhlZFJvd3NUb3A7UzE+PWVjKzEmJihldC5maXhlZFJvd3NUb3At'@;
put 'PU1hdGgubWluKEZzLFMxLWVjKSk7Y29uc3QgRGw9ZXQuZml4ZWRSb3dzQm90dG9tO0RsJiZlYz49UmgtRGwmJihldC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKEZzLERsKSksSWkrPUZzfSl9O0FycmF5LmlzQXJyYXkoT3QpP2dhKE9yKE90KSk6Z2EoW1tPdCxPbl1dKSxpZS5hZGp1c3RS'@;
put 'b3dzQW5kQ29scygpLGYuX3JlZnJlc2hCb3JkZXJzKCk7YnJlYWs7Y2FzZSJyZW1vdmVfY29sIjpjb25zdCB1bz1BdD0+e2xldCBJaT0wO0RuKEF0LFFzPT57bGV0W2xhLEZzXT1Rcztjb25zdCBlYz1wYyhsYSk/Zi5jb3VudENvbHMoKS0xOk1hdGgubWF4KGxhLUlpLDApO2xldCBDYT1mLnRv'@;
put 'UGh5c2ljYWxDb2x1bW4oZWMpO2lmKE51bWJlci5pc0ludGVnZXIobGEpJiYobGE9TWF0aC5tYXgobGEtSWksMCkpLCFULnJlbW92ZUNvbChsYSxGcyxKbikpcmV0dXJuO2NvbnN0IFMxPWV0LmZpeGVkQ29sdW1uc1N0YXJ0O1MxPj1lYysxJiYoZXQuZml4ZWRDb2x1bW5zU3RhcnQtPU1hdGgu'@;
put 'bWluKEZzLFMxLWVjKSksQXJyYXkuaXNBcnJheShldC5jb2xIZWFkZXJzKSYmKHR5cGVvZiBDYT4idSImJihDYT0tMSksZXQuY29sSGVhZGVycy5zcGxpY2UoQ2EsRnMpKSxJaSs9RnN9KX07QXJyYXkuaXNBcnJheShPdCk/dW8oT3IoT3QpKTp1byhbW090LE9uXV0pLGllLmFkanVzdFJvd3NB'@;
put 'bmRDb2xzKCksZi5fcmVmcmVzaEJvcmRlcnMoKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gc3VjaCBhY3Rpb24gIiR7dnR9ImApfVByfHxpZS5hZGp1c3RSb3dzQW5kQ29scygpfSxhZGp1c3RSb3dzQW5kQ29scygpe2NvbnN0IHZ0PWV0Lm1pblJvd3MsT3Q9'@;
put 'ZXQubWluU3BhcmVSb3dzLGNuPWV0Lm1pbkNvbHMsRW49ZXQubWluU3BhcmVDb2xzO2lmKDA9PT1mLmNvdW50Um93cygpJiYwPT09Zi5jb3VudENvbHMoKSYmcm4uZGVzZWxlY3QoKSx2dCl7Y29uc3QgT249Zi5jb3VudFJvd3MoKTtPbjx2dCYmVC5jcmVhdGVSb3coT24sdnQtT24se3NvdXJj'@;
put 'ZToiYXV0byJ9KX1pZihPdCl7Y29uc3QgT249Zi5jb3VudEVtcHR5Um93cyghMCk7aWYoT248T3Qpe2NvbnN0IFByPU1hdGgubWluKE90LU9uLGV0Lm1heFJvd3MtZi5jb3VudFNvdXJjZVJvd3MoKSk7VC5jcmVhdGVSb3coZi5jb3VudFJvd3MoKSxQcix7c291cmNlOiJhdXRvIn0pfX17bGV0'@;
put 'IE9uOyhjbnx8RW4pJiYoT249Zi5jb3VudEVtcHR5Q29scyghMCkpO2xldCBKbj1mLmNvdW50Q29scygpO2lmKGNuJiYhZXQuY29sdW1ucyYmSm48Y24pe2NvbnN0IFByPWNuLUpuO09uKz1QcixULmNyZWF0ZUNvbChKbixQcix7c291cmNlOiJhdXRvIn0pfWlmKEVuJiYhZXQuY29sdW1ucyYm'@;
put 'ImFycmF5Ij09PWYuZGF0YVR5cGUmJk9uPEVuKXtKbj1mLmNvdW50Q29scygpO2NvbnN0IE9yPU1hdGgubWluKEVuLU9uLGV0Lm1heENvbHMtSm4pO1QuY3JlYXRlQ29sKEpuLE9yLHtzb3VyY2U6ImF1dG8ifSl9fWlmKHJuLmlzU2VsZWN0ZWQoKSl7Y29uc3QgT249Zi5jb3VudFJvd3MoKSxK'@;
put 'bj1mLmNvdW50Q29scygpO0RuKHJuLnNlbGVjdGVkUmFuZ2UsUHI9PntsZXQgT3I9ITEsJHI9UHIuZnJvbS5yb3csWXI9UHIuZnJvbS5jb2wsTnI9UHIudG8ucm93LFJpPVByLnRvLmNvbDskcj5Pbi0xPygkcj1Pbi0xLE9yPSEwLE5yPiRyJiYoTnI9JHIpKTpOcj5Pbi0xJiYoTnI9T24tMSxP'@;
put 'cj0hMCwkcj5OciYmKCRyPU5yKSksWXI+Sm4tMT8oWXI9Sm4tMSxPcj0hMCxSaT5ZciYmKFJpPVlyKSk6Umk+Sm4tMSYmKFJpPUpuLTEsT3I9ITAsWXI+UmkmJihZcj1SaSkpLE9yJiZmLnNlbGVjdENlbGwoJHIsWXIsTnIsUmkpfSl9Zi52aWV3JiZmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXpl'@;
put 'KCl9LHBvcHVsYXRlRnJvbUFycmF5KHZ0LE90LGNuLEVuLE9uKXtsZXQgSm4sUHIsT3IsJHI7Y29uc3QgWXI9W10sTnI9e30sUmk9W10sWG89dnQucm93LEdvPXZ0LmNvbDtpZihQcj1PdC5sZW5ndGgsMD09PVByKXJldHVybiExO2xldCBKcz0wLGdhPTA7c3dpdGNoKHVzKGNuKSYmKEpzPWNu'@;
put 'LmNvbC1HbysxLGdhPWNuLnJvdy1YbysxKSxPbil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCB1bz1LYihPdCksQXQ9dW8ubGVuZ3RoLElpPU1hdGgubWF4KEF0LEpzKSxRcz1mLmdldERhdGEoKS5zbGljZShYbyksbGE9S2IoUXMpLnNsaWNlKEdvLEdvK0lpKTtmb3IoT3I9MDtPcjxJaTtPcis9'@;
put 'MSlpZihPcjxBdCl7Zm9yKEpuPTAsUHI9dW9bT3JdLmxlbmd0aDtKbjxnYS1QcjtKbis9MSl1b1tPcl0ucHVzaCh1b1tPcl1bSm4lUHJdKTtSaS5wdXNoKHVvW09yXS5jb25jYXQoT3I8bGEubGVuZ3RoP2xhW09yXTpuZXcgQXJyYXkoUXMubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBSaS5w'@;
put 'dXNoKHVvW09yJUF0XS5jb25jYXQobGFbT3JdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheShYbyxHbyxLYihSaSkpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0IEZzPU90Lmxlbmd0aCxlYz1NYXRoLm1heChGcyxnYSksQ2E9Zi5nZXREYXRhKCkuc2xpY2UoWG8pLm1hcCgkYz0+JGMuc2xp'@;
put 'Y2UoR28pKTtmb3IoSm49MDtKbjxlYztKbis9MSlpZihKbjxGcyl7Zm9yKE9yPTAsJHI9T3RbSm5dLmxlbmd0aDtPcjxKcy0kcjtPcis9MSlPdFtKbl0ucHVzaChPdFtKbl1bT3IlJHJdKTtpZihKbjxDYS5sZW5ndGgpZm9yKGxldCAkYz0wOyRjPENhW0puXS5sZW5ndGg7JGMrPTEpT3RbSm5d'@;
put 'LnB1c2goQ2FbSm5dWyRjXSk7ZWxzZSBPdFtKbl0ucHVzaCguLi5uZXcgQXJyYXkoQ2FbMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIE90LnB1c2goT3RbSm4lUHJdLnNsaWNlKDAsZWMpLmNvbmNhdChDYVtKbl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KFhvLEdvLE90KTticmVhaztkZWZh'@;
put 'dWx0Ok5yLnJvdz12dC5yb3csTnIuY29sPXZ0LmNvbDtsZXQgeDIsUmg9MCxTMT0wLERsPSEwO2NvbnN0IHU0PWZ1bmN0aW9uKFNkKXtsZXQgSnU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7Y29uc3QgTTE9T3RbU2QlT3QubGVu'@;
put 'Z3RoXTtyZXR1cm4gbnVsbCE9PUp1P00xW0p1JU0xLmxlbmd0aF06TTF9LE9oPU90Lmxlbmd0aCxDZD1jbj9jbi5yb3ctdnQucm93KzE6MDtmb3IoUHI9Y24/Q2Q6TWF0aC5tYXgoT2gsQ2QpLEpuPTA7Sm48UHImJiEoY24mJk5yLnJvdz5jbi5yb3cmJkNkPk9ofHwhZXQuYWxsb3dJbnNlcnRS'@;
put 'b3cmJk5yLnJvdz5mLmNvdW50Um93cygpLTF8fE5yLnJvdz49ZXQubWF4Um93cyk7Sm4rKyl7Y29uc3QgJGM9Sm4tUmgsU2Q9dTQoJGMpLmxlbmd0aCxKdT1jbj9jbi5jb2wtdnQuY29sKzE6MDtpZigkcj1jbj9KdTpNYXRoLm1heChTZCxKdSksTnIuY29sPXZ0LmNvbCx4Mj1mLmdldENlbGxN'@;
put 'ZXRhKE5yLnJvdyxOci5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09RW4mJiJBdXRvZmlsbC5maWxsIiE9PUVufHwheDIuc2tpcFJvd09uUGFzdGUpe2ZvcihTMT0wLE9yPTA7T3I8JHImJiEoY24mJk5yLmNvbD5jbi5jb2wmJkp1PlNkfHwhZXQuYWxsb3dJbnNlcnRDb2x1bW4mJk5yLmNvbD5m'@;
put 'LmNvdW50Q29scygpLTF8fE5yLmNvbD49ZXQubWF4Q29scyk7T3IrKyl7aWYoeDI9Zi5nZXRDZWxsTWV0YShOci5yb3csTnIuY29sKSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Fbnx8IkF1dG9maWxsLmZpbGwiPT09RW4pJiZ4Mi5za2lwQ29sdW1uT25QYXN0ZSl7UzErPTEsTnIuY29sKz0xLCRy'@;
put 'Kz0xO2NvbnRpbnVlfWlmKHgyLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1Fbil7TnIuY29sKz0xO2NvbnRpbnVlfWxldCBNdT11NCgkYyxPci1TMSksYXU9Zi5nZXREYXRhQXRDZWxsKE5yLnJvdyxOci5jb2wpO2lmKG51bGwhPT1NdSYmIm9iamVjdCI9PXR5cGVvZiBNdSlpZihBcnJh'@;
put 'eS5pc0FycmF5KE11KSYmbnVsbD09PWF1JiYoYXU9W10pLG51bGw9PT1hdXx8Im9iamVjdCIhPXR5cGVvZiBhdSlEbD0hMTtlbHNle2NvbnN0IHgxPXI3KEFycmF5LmlzQXJyYXkoYXUpP2F1OmF1WzBdfHxhdSksRTI9cjcoQXJyYXkuaXNBcnJheShNdSk/TXU6TXVbMF18fE11KTtsayh4MSxF'@;
put 'Mil8fEFycmF5LmlzQXJyYXkoeDEpJiZBcnJheS5pc0FycmF5KEUyKT9NdT15dShNdSk6RGw9ITF9ZWxzZSBudWxsIT09YXUmJiJvYmplY3QiPT10eXBlb2YgYXUmJihEbD0hMSk7RGwmJllyLnB1c2goW05yLnJvdyxOci5jb2wsTXVdKSxEbD0hMCxOci5jb2wrPTF9TnIucm93Kz0xfWVsc2Ug'@;
put 'UmgrPTEsTnIucm93Kz0xLFByKz0xfWYuc2V0RGF0YUF0Q2VsbChZcixudWxsLG51bGwsRW58fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe1cuc2V0RGF0YShldC5kYXRhKSxmLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKG0yKCl8fHlOKCkpJiZwaShmLnJv'@;
put 'b3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKGV0LCEwKSx0aGlzLnZpZXc9bmV3IGhUZSh0aGlzKSxnZT1ja2UuZ2V0SW5zdGFuY2UoZixldCxybiksZi5ydW5Ib29rcygiaW5pdCIpLHRoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMudmlldy5yZW5kZXIoKSx3ZSYm'@;
put 'bnVsbD09PWYucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZwdGUoZi5yb290RWxlbWVudCwoKT0+e2Yudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCksZi5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9KSwib2JqZWN0Ij09dHlwZW9mIHdl'@;
put 'JiYoZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLHdlWzBdLHdlWzFdKSx3ZT0hMSksZi5ydW5Ib29rcygiYWZ0ZXJJbml0Iil9LHRoaXMuX2NyZWF0ZUNlbGxDb29yZHM9ZnVuY3Rpb24odnQsT3Qpe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxDb29yZHModnQsT3QpfSx0aGlzLl9jcmVh'@;
put 'dGVDZWxsUmFuZ2U9ZnVuY3Rpb24odnQsT3QsY24pe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxSYW5nZSh2dCxPdCxjbil9LHRoaXMudmFsaWRhdGVDZWxsPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtsZXQgT249Zi5nZXRDZWxsVmFsaWRhdG9yKE90KTtmdW5jdGlvbiBKbihQcil7aWYo'@;
put 'YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJiFhcmd1bWVudHNbMV18fCEwPT09T3QuaGlkZGVuKXJldHVybiB2b2lkIGNuKFByKTtjb25zdCAkcj1PdC52aXN1YWxDb2wsWXI9T3QudmlzdWFsUm93LE5yPWYuZ2V0Q2VsbChZciwkciwhMCk7aWYoTnImJiJUSCIh'@;
put 'PT1Oci5ub2RlTmFtZSl7Y29uc3QgUmk9Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFlyKSxYbz1mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoJHIpO2Yudmlldy5fd3QuZ2V0U2V0dGluZygiY2VsbFJlbmRlcmVy'@;
put 'IixSaSxYbyxOcil9Y24oUHIpfXZhciBQcjtKZWUoT24pJiYoUHI9T24sT249ZnVuY3Rpb24oT3IsJHIpeyRyKFByLnRlc3QoT3IpKX0pLFJhKE9uKT8odnQ9Zi5ydW5Ib29rcygiYmVmb3JlVmFsaWRhdGUiLHZ0LE90LnZpc3VhbFJvdyxPdC5wcm9wLEVuKSxmLl9yZWdpc3RlckltbWVkaWF0'@;
put 'ZSgoKT0+e09uLmNhbGwoT3QsdnQsUHI9PntmJiYoUHI9Zi5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsUHIsdnQsT3QudmlzdWFsUm93LE90LnByb3AsRW4pLE90LnZhbGlkPVByLEpuKFByKSxmLnJ1bkhvb2tzKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsUHIsdnQsT3QudmlzdWFsUm93LE90LnBy'@;
put 'b3AsRW4pKX0pfSkpOmYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57T3QudmFsaWQ9ITAsSm4oT3QudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgT249RWkodnQsT3QsY24pLEpuPVtdO2xldCBPciwkcixZcixQcj1Fbjtmb3IoT3I9'@;
put 'MCwkcj1Pbi5sZW5ndGg7T3I8JHI7T3IrKyl7aWYoIm9iamVjdCIhPXR5cGVvZiBPbltPcl0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBvciBjaGFuZ2VzIGFycmF5IG9mIGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7'@;
put 'aWYoIm51bWJlciIhPXR5cGVvZiBPbltPcl1bMV0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IGFuZCBjb2x1bW4gbnVtYmVyIGFzIGl0cyBwYXJhbWV0ZXJzLiBJZiB5b3Ugd2FudCB0byB1c2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUsIHVzZSBt'@;
put 'ZXRob2QgYHNldERhdGFBdFJvd1Byb3BgIik7WXI9T25bT3JdWzFdPj10aGlzLmNvdW50Q29scygpP09uW09yXVsxXTpULmNvbFRvUHJvcChPbltPcl1bMV0pLEpuLnB1c2goW09uW09yXVswXSxZcixXLmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coT25bT3JdWzBdKSxPbltPcl1bMV0p'@;
put 'LE9uW09yXVsyXV0pfSFQciYmIm9iamVjdCI9PXR5cGVvZiB2dCYmKFByPU90KTtjb25zdCBOcj1acihKbixFbik7Zi5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRDZWxsIixOcixQciksbGkoTnIsUHIsKCk9PnttcihOcixQcil9KX0sdGhpcy5zZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0'@;
put 'LE90LGNuLEVuKXtjb25zdCBPbj1FaSh2dCxPdCxjbiksSm49W107bGV0IE9yLCRyLFByPUVuO2ZvcihPcj0wLCRyPU9uLmxlbmd0aDtPcjwkcjtPcisrKUpuLnB1c2goW09uW09yXVswXSxPbltPcl1bMV0sVy5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KE9uW09yXVswXSksT25bT3Jd'@;
put 'WzFdKSxPbltPcl1bMl1dKTshUHImJiJvYmplY3QiPT10eXBlb2YgdnQmJihQcj1PdCk7Y29uc3QgWXI9WnIoSm4sRW4pO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsWXIsUHIpLGxpKFlyLFByLCgpPT57bXIoWXIsUHIpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7ZiYm'@;
put 'IWYuaXNMaXN0ZW5pbmcoKSYmKFlCPWYuZ3VpZCxmLnJ1bkhvb2tzKCJhZnRlckxpc3RlbiIpKX0sdGhpcy51bmxpc3Rlbj1mdW5jdGlvbigpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmKFlCPW51bGwsZi5ydW5Ib29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xpc3RlbmluZz1mdW5jdGlv'@;
put 'bigpe3JldHVybiBZQj09PWYuZ3VpZH0sdGhpcy5kZXN0cm95RWRpdG9yPWZ1bmN0aW9uKCl7Zi5fcmVmcmVzaEJvcmRlcnMoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzFdKXx8YXJndW1lbnRzWzFdKX0sdGhpcy5wb3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbih2dCxPdCxjbixFbixPbixKbixQcil7aWYoIm9iamVjdCIhPXR5cGVvZiBjbnx8Im9iamVjdCIhPXR5cGVvZiBjblswXSl0aHJvdyBuZXcgRXJyb3IoInBvcHVsYXRlRnJvbUFycmF5IHBhcmFt'@;
put 'ZXRlciBgaW5wdXRgIG11c3QgYmUgYW4gYXJyYXkgb2YgYXJyYXlzIik7Y29uc3QgT3I9Im51bWJlciI9PXR5cGVvZiBFbj9mLl9jcmVhdGVDZWxsQ29vcmRzKEVuLE9uKTpudWxsO3JldHVybiBpZS5wb3B1bGF0ZUZyb21BcnJheShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxjbixPcixK'@;
put 'bixQcil9LHRoaXMuc3BsaWNlQ29sPWZ1bmN0aW9uKHZ0LE90LGNuKXtmb3IodmFyIEVuPWFyZ3VtZW50cy5sZW5ndGgsT249bmV3IEFycmF5KEVuPjM/RW4tMzowKSxKbj0zO0puPEVuO0puKyspT25bSm4tM109YXJndW1lbnRzW0puXTtyZXR1cm4gVC5zcGxpY2VDb2wodnQsT3QsY24sLi4u'@;
put 'T24pfSx0aGlzLnNwbGljZVJvdz1mdW5jdGlvbih2dCxPdCxjbil7Zm9yKHZhciBFbj1hcmd1bWVudHMubGVuZ3RoLE9uPW5ldyBBcnJheShFbj4zP0VuLTM6MCksSm49MztKbjxFbjtKbisrKU9uW0puLTNdPWFyZ3VtZW50c1tKbl07cmV0dXJuIFQuc3BsaWNlUm93KHZ0LE90LGNuLC4uLk9u'@;
put 'KX0sdGhpcy5nZXRTZWxlY3RlZD1mdW5jdGlvbigpe2lmKHJuLmlzU2VsZWN0ZWQoKSlyZXR1cm4gY3Mocm4uZ2V0U2VsZWN0ZWRSYW5nZSgpLHZ0PT57bGV0e2Zyb206T3QsdG86Y259PXZ0O3JldHVybltPdC5yb3csT3QuY29sLGNuLnJvdyxjbi5jb2xdfSl9LHRoaXMuZ2V0U2VsZWN0ZWRM'@;
put 'YXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBPdDtyZXR1cm4gdnQmJnZ0Lmxlbmd0aD4wJiYoT3Q9dnRbdnQubGVuZ3RoLTFdKSxPdH0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlPWZ1bmN0aW9uKCl7aWYocm4uaXNTZWxlY3RlZCgpKXJldHVybiBBcnJheS5m'@;
put 'cm9tKHJuLmdldFNlbGVjdGVkUmFuZ2UoKSl9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Q9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgT3Q7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE90PXZ0W3Z0Lmxlbmd0aC0xXSksT3R9LHRoaXMuZW1wdHlT'@;
put 'ZWxlY3RlZENlbGxzPWZ1bmN0aW9uKHZ0KXtpZighcm4uaXNTZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IE90PVtdO0RuKHJuLmdldFNlbGVjdGVkUmFuZ2UoKSxjbj0+e2NvbnN0IEVuPWNuLmdldFRvcFN0YXJ0Q29y'@;
put 'bmVyKCksT249Y24uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dm8oRW4ucm93LE9uLnJvdyxKbj0+e3ZvKEVuLmNvbCxPbi5jb2wsUHI9Pnt0aGlzLmdldENlbGxNZXRhKEpuLFByKS5yZWFkT25seXx8T3QucHVzaChbSm4sUHIsbnVsbF0pfSl9KX0pLE90Lmxlbmd0aD4wJiZ0aGlzLnNldERhdGFB'@;
put 'dENlbGwoT3QsdnQpfSx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXIrPTF9LHRoaXMucmVzdW1lUmVuZGVy'@;
put 'PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KHZ0LDApLCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCkmJnZ0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyJiYodGhpcy5yZW5k'@;
put 'ZXJDYWxsP3RoaXMucmVuZGVyKCk6dGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCkpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMucmVuZGVyQ2FsbD0hMCx0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fChnZS5sb2NrRWRp'@;
put 'dG9yKCksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCksZ2UudW5sb2NrRWRpdG9yKCkpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29uc3QgT3Q9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5pc0V4ZWN1dGlv'@;
put 'blN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyKz0xLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJh'@;
put 'dGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgT3Q9dGhpcy5leGVjdXRp'@;
put 'b25TdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KE90LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZPdD09PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcnx8dnQpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5y'@;
put 'ZXN1bWVPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1c3Bl'@;
put 'bmRFeGVjdXRpb24oKTtjb25zdCBjbj12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihPdCksY259LHRoaXMuYmF0Y2g9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpLHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IE90PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1l'@;
put 'RXhlY3V0aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCFmLnZpZXcpcmV0dXJuO2NvbnN0e3dpZHRoOnZ0LGhlaWdodDpPdH09Zi52aWV3LmdldExhc3RTaXplKCkse3dpZHRoOmNuLGhlaWdodDpFbn09Zi5yb290RWxl'@;
put 'bWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxPbj1jbiE9PXZ0fHxFbiE9PU90OyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDp2dCxoZWlnaHQ6T3R9LHt3aWR0aDpjbixoZWlnaHQ6RW59LE9uKSYmKChPbnx8Zi52aWV3Ll93dC53dE92ZXJsYXlz'@;
put 'LnNjcm9sbGFibGVFbGVtZW50PT09Zi5yb290V2luZG93KSYmKGYudmlldy5zZXRMYXN0U2l6ZShjbixFbiksZi5yZW5kZXIoKSksZi5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOnZ0LGhlaWdodDpPdH0se3dpZHRoOmNuLGhlaWdodDpFbn0sT24pKX0sdGhpcy51'@;
put 'cGRhdGVEYXRhPWZ1bmN0aW9uKHZ0LE90KXtqbmUodnQsY249PntUPWNufSxjbj0+e1Q9Y24sZi5jb2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxmLnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dz'@;
put 'KCkpLGllLmFkanVzdFJvd3NBbmRDb2xzKCl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlcsaW50ZXJuYWxTb3VyY2U6InVwZGF0ZURhdGEiLHNvdXJjZTpPdCxtZXRhTWFuYWdlcjpvdCxmaXJzdFJ1bjp3ZX0pfSx0aGlzLmxvYWREYXRhPWZ1bmN0aW9uKHZ0LE90KXtq'@;
put 'bmUodnQsY249PntUPWNufSwoKT0+e290LmNsZWFyQ2VsbHNDYWNoZSgpLGYuaW5pdEluZGV4TWFwcGVycygpLGllLmFkanVzdFJvd3NBbmRDb2xzKCksd2UmJih3ZT1bbnVsbCwibG9hZERhdGEiXSl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlcsaW50ZXJuYWxTb3Vy'@;
put 'Y2U6ImxvYWREYXRhIixzb3VyY2U6T3QsbWV0YU1hbmFnZXI6b3QsZmlyc3RSdW46d2V9KX0sdGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQ9ZnVuY3Rpb24oKXtjb25zdCB2dD1ldC5jb2x1bW5zO2xldCBPdD0wO2lmKEFycmF5LmlzQXJyYXkodnQpKU90PXZ0Lmxlbmd0aDtlbHNlIGlmKFJh'@;
put 'KHZ0KSlpZigiYXJyYXkiPT09Zi5kYXRhVHlwZSl7Y29uc3QgY249dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtmb3IobGV0IEVuPTA7RW48Y247RW4rPTEpdnQoRW4pJiYoT3QrPTEpfWVsc2UoIm9iamVjdCI9PT1mLmRhdGFUeXBlfHwiZnVuY3Rpb24iPT09Zi5kYXRhVHlwZSkmJihPdD1ULmNv'@;
put 'bFRvUHJvcENhY2hlLmxlbmd0aCk7ZWxzZSBpZihLaShldC5kYXRhU2NoZW1hKSl7Y29uc3QgY249VC5nZXRTY2hlbWEoKTtPdD1BcnJheS5pc0FycmF5KGNuKT9jbi5sZW5ndGg6dWsoY24pfWVsc2UgT3Q9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtyZXR1cm4gT3R9LHRoaXMuaW5pdEluZGV4'@;
put 'TWFwcGVycz1mdW5jdGlvbigpe3RoaXMuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpfSx0aGlzLmdldERhdGE9ZnVuY3Rpb24o'@;
put 'dnQsT3QsY24sRW4pe3JldHVybiBMYSh2dCk/VC5nZXRBbGwoKTpULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pLFQuREVTVElOQVRJT05fUkVOREVSRVIpfSx0aGlzLmdldENvcHlhYmxlVGV4dD1mdW5jdGlvbih2dCxPdCxj'@;
put 'bixFbil7cmV0dXJuIFQuZ2V0Q29weWFibGVUZXh0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pKX0sdGhpcy5nZXRDb3B5YWJsZURhdGE9ZnVuY3Rpb24odnQsT3Qpe3JldHVybiBULmdldENvcHlhYmxlKHZ0LFQuY29sVG9Qcm9wKE90KSl9'@;
put 'LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIFQuZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGNuPSh3ZT9mLmxvYWRE'@;
put 'YXRhOmYudXBkYXRlRGF0YSkuYmluZCh0aGlzKTtsZXQgT24sSm4sRW49ITE7aWYoS2kodnQucm93cykpdGhyb3cgbmV3IEVycm9yKCdUaGUgInJvd3MiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/Jyk7'@;
put 'aWYoS2kodnQuY29scykpdGhyb3cgbmV3IEVycm9yKCdUaGUgImNvbHMiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xzLCBtaW5Db2xzIG9yIG1heENvbHM/Jyk7aWYoS2kodnQuZ2FudHRDaGFydCkpdGhyb3cgbmV3IEVycm9yKCdTaW5jZSA4'@;
put 'LjAuMCB0aGUgImdhbnR0Q2hhcnQiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtmb3IoT24gaW4gdnQpImRhdGEiPT09T258fCgibGFuZ3VhZ2UiPT09T24/Tm4odnQubGFuZ3VhZ2UpOiJjbGFzc05hbWUiPT09T24/Y3IoImNsYXNzTmFtZSIsdnQuY2xhc3NOYW1lKToidGFi'@;
put 'bGVDbGFzc05hbWUiPT09T24mJmYudGFibGU/KGNyKCJ0YWJsZUNsYXNzTmFtZSIsdnQudGFibGVDbGFzc05hbWUpLGYudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpKTpzby5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQoT24pfHxzby5nZXRTaW5n'@;
put 'bGV0b24oKS5pc0RlcHJlY2F0ZWQoT24pPyhSYSh2dFtPbl0pfHxBcnJheS5pc0FycmF5KHZ0W09uXSkpJiYodnRbT25dLmluaXRpYWxIb29rPSEwLGYuYWRkSG9vayhPbix2dFtPbl0pKTohT3QmJmJsKHZ0LE9uKSYmKHl0W09uXT12dFtPbl0pKTt2b2lkIDA9PT12dC5kYXRhJiZ2b2lkIDA9'@;
put 'PT1ldC5kYXRhP2NuKG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dnQuZGF0YT9jbih2dC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmNvbHVtbnMmJihULmNyZWF0ZU1hcCgpLGYuaW5pdEluZGV4TWFwcGVycygpKTtjb25zdCBQcj1mLmNvdW50Q29scygpLE9y'@;
put 'PWV0LmNvbHVtbnM7aWYoT3ImJlJhKE9yKSYmKEVuPSEwKSwodm9pZCAwIT09dnQuY2VsbHx8dm9pZCAwIT09dnQuY2VsbHN8fHZvaWQgMCE9PXZ0LmNvbHVtbnMpJiZvdC5jbGVhckNhY2hlKCksUHI+MClmb3IoT249MCxKbj0wO09uPFByO09uKyspe2lmKE9yKXtjb25zdCBOcj1Fbj9PcihP'@;
put 'bik6T3JbSm5dO05yJiZvdC51cGRhdGVDb2x1bW5NZXRhKEpuLE5yKX1Kbis9MX1LaSh2dC5jZWxsKSYmZHModnQuY2VsbCxOcj0+e2Yuc2V0Q2VsbE1ldGFPYmplY3QoTnIucm93LE5yLmNvbCxOcil9KSxmLnJ1bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTtsZXQgJHI9Zi5yb290RWxl'@;
put 'bWVudC5zdHlsZS5oZWlnaHQ7IiIhPT0kciYmKCRyPXBhcnNlSW50KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSk7bGV0IFlyPXZ0LmhlaWdodDtpZihSYShZcikmJihZcj1ZcigpKSxPdCYmZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikmJmYucm9vdEVsZW1lbnQu'@;
put 'c2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIsZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLG51bGw9PT1Zcil7Y29uc3QgTnI9Zi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaW5pdGlhbHN0eWxlIik7TnImJihOci5pbmRleE9mKCJoZWlnaHQiKT4t'@;
put 'MXx8TnIuaW5kZXhPZigib3ZlcmZsb3ciKT4tMSk/Zi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIixOcik6KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9IiIpfWVsc2Ugdm9pZCAwIT09WXImJihmLnJvb3RFbGVtZW50'@;
put 'LnN0eWxlLmhlaWdodD1pc05hTihZcik/YCR7WXJ9YDpgJHtZcn1weGAsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7aWYodHlwZW9mIHZ0LndpZHRoPCJ1Iil7bGV0IE5yPXZ0LndpZHRoO1JhKE5yKSYmKE5yPU5yKCkpLGYucm9vdEVsZW1lbnQuc3R5bGUud2lkdGg9'@;
put 'aXNOYU4oTnIpP2Ake05yfWA6YCR7TnJ9cHhgfU90fHwoZi52aWV3JiYoZi52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpLGYudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSksZi5ydW5Ib29rcygiYWZ0ZXJVcGRh'@;
put 'dGVTZXR0aW5ncyIsdnQpKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldyYmIXdlJiYoZi5mb3JjZUZ1bGxSZW5kZXI9ITAsZ2UubG9ja0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLGYudmlldy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSxnZS51bmxv'@;
put 'Y2tFZGl0b3IoKSksIU90JiZmLnZpZXcmJigiIj09PSRyfHwiIj09PVlyfHx2b2lkIDA9PT1ZcikmJiRyIT09WXImJmYudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtjb25zdCB2dD1mLmdldFNlbGVj'@;
put 'dGVkTGFzdCgpO2lmKGV0LmdldFZhbHVlKXtpZihSYShldC5nZXRWYWx1ZSkpcmV0dXJuIGV0LmdldFZhbHVlLmNhbGwoZik7aWYodnQpcmV0dXJuIGYuZ2V0RGF0YSgpW3Z0WzBdWzBdXVtldC5nZXRWYWx1ZV19ZWxzZSBpZih2dClyZXR1cm4gZi5nZXREYXRhQXRDZWxsKHZ0WzBdLHZ0WzFd'@;
put 'KX0sdGhpcy5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiBldH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCksdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHMoKX0sdGhpcy5hbHRlcj1mdW5jdGlvbih2dCxPdCxjbixFbixPbil7aWUuYWx0ZXIodnQsT3QsY24sRW4s'@;
put 'T24pfSx0aGlzLmdldENlbGw9ZnVuY3Rpb24odnQsT3Qpe2xldCBjbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLEVuPU90LE9uPXZ0O2lmKE90Pj0wKXtpZih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlz'@;
put 'aWNhbENvbHVtbihPdCkpKXJldHVybiBudWxsO0VuPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChPdCl9aWYodnQ+PTApe2lmKHRoaXMucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsUm93KHZ0KSkpcmV0dXJuIG51bGw7'@;
put 'T249dGhpcy5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0KX1yZXR1cm4gbnVsbD09PU9ufHxudWxsPT09RW4/bnVsbDpmLnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKGYuX2NyZWF0ZUNlbGxDb29yZHMoT24sRW4pLGNuKX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rp'@;
put 'b24odnQpe2NvbnN0IE90PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHModnQpO2lmKG51bGw9PT1PdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6Y24sY29sOkVufT1PdDtsZXQgT249Y24sSm49RW47cmV0dXJuIGNuPj0wJiYoT249dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxG'@;
put 'cm9tUmVuZGVyYWJsZUluZGV4KGNuKSksRW4+PTAmJihKbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoRW4pKSxmLl9jcmVhdGVDZWxsQ29vcmRzKE9uLEpuKX0sdGhpcy5jb2xUb1Byb3A9ZnVuY3Rpb24odnQpe3JldHVybiBULmNvbFRvUHJv'@;
put 'cCh2dCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVC5wcm9wVG9Db2wodnQpfSx0aGlzLnRvVmlzdWFsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvVmlzdWFsQ29sdW1uPXZ0PT50aGlzLmNvbHVt'@;
put 'bkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxSb3c9dnQ9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMudG9QaHlzaWNhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBl'@;
put 'ci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2dCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXQodnQsVC5jb2xUb1Byb3AoT3QpKX0sdGhpcy5nZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXQodnQsT3QpfSx0aGlz'@;
put 'LmdldERhdGFBdENvbD1mdW5jdGlvbih2dCl7Y29uc3QgT3Q9W10sY249VC5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsdnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZXQuZGF0YS5sZW5ndGgtMSx2dCksVC5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBFbj0wO0VuPGNuLmxl'@;
put 'bmd0aDtFbis9MSlmb3IobGV0IE9uPTA7T248Y25bRW5dLmxlbmd0aDtPbis9MSlPdC5wdXNoKGNuW0VuXVtPbl0pO3JldHVybiBPdH0sdGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9uKHZ0KXtjb25zdCBPdD1bXSxjbj1ULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCxULnByb3BU'@;
put 'b0NvbCh2dCkpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZXQuZGF0YS5sZW5ndGgtMSxULnByb3BUb0NvbCh2dCkpLFQuREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgRW49MDtFbjxjbi5sZW5ndGg7RW4rPTEpZm9yKGxldCBPbj0wO09uPGNuW0VuXS5sZW5ndGg7T24rPTEpT3QucHVzaChj'@;
put 'bltFbl1bT25dKTtyZXR1cm4gT3R9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IE9uO3JldHVybiBPbj12b2lkIDA9PT12dD9XLmdldERhdGEoKTpXLmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxPdCksZi5fY3JlYXRlQ2VsbENvb3Jkcyhj'@;
put 'bixFbikpLE9ufSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IE9uO3JldHVybiBPbj12b2lkIDA9PT12dD9XLmdldERhdGEoITApOlcuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGNuLEVu'@;
put 'KSwhMCksT259LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVy5nZXRBdENvbHVtbih2dCl9LHRoaXMuc2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgT249RWkodnQsT3QsY24pLEpuPXRoaXMuaGFzSG9vaygiYWZ0ZXJT'@;
put 'ZXRTb3VyY2VEYXRhQXRDZWxsIiksUHI9W107Sm4mJkRuKE9uLCRyPT57bGV0W1lyLE5yLFJpXT0kcjtQci5wdXNoKFtZcixOcixXLmdldEF0Q2VsbChZcixOciksUmldKX0pLERuKE9uLCRyPT57bGV0W1lyLE5yLFJpXT0kcjtXLnNldEF0Q2VsbChZcixOcixSaSl9KSxKbiYmdGhpcy5ydW5I'@;
put 'b29rcygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixQcixFbiksdGhpcy5yZW5kZXIoKTtjb25zdCBPcj1mLmdldEFjdGl2ZUVkaXRvcigpO09yJiZLaShPci5yZWZyZXNoVmFsdWUpJiZPci5yZWZyZXNoVmFsdWUoKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3Jl'@;
put 'dHVybiBXLmdldEF0Um93KHZ0KX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVy5nZXRBdENlbGwodnQsT3QpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIFQuZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCwwKSxm'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKHZ0LHRoaXMuY291bnRDb2xzKCktMSksVC5ERVNUSU5BVElPTl9SRU5ERVJFUilbMF18fFtdfSx0aGlzLmdldERhdGFUeXBlPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtjb25zdCBPbj12b2lkIDA9PT12dD9bMCwwLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3Vu'@;
put 'dENvbHMoKV06W3Z0LE90LGNuLEVuXSxbSm4sUHJdPU9uO2xldFssLE9yLCRyXT1PbixZcj1udWxsLE5yPW51bGw7dm9pZCAwPT09T3ImJihPcj1Kbiksdm9pZCAwPT09JHImJigkcj1Qcik7bGV0IFJpPSJtaXhlZCI7cmV0dXJuIHZvKE1hdGgubWF4KE1hdGgubWluKEpuLE9yKSwwKSxNYXRo'@;
put 'Lm1heChKbixPciksWG89PntsZXQgR289ITA7cmV0dXJuIHZvKE1hdGgubWF4KE1hdGgubWluKFByLCRyKSwwKSxNYXRoLm1heChQciwkciksSnM9PihOcj10aGlzLmdldENlbGxNZXRhKFhvLEpzKS50eXBlLFlyP0dvPVlyPT09TnI6WXI9TnIsR28pKSxSaT1Hbz9OcjoibWl4ZWQiLEdvfSks'@;
put 'Uml9LHRoaXMucmVtb3ZlQ2VsbE1ldGE9ZnVuY3Rpb24odnQsT3QsY24pe2NvbnN0W0VuLE9uXT1bdGhpcy50b1BoeXNpY2FsUm93KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpXTtsZXQgSm49b3QuZ2V0Q2VsbE1ldGFLZXlWYWx1ZShFbixPbixjbik7ITEhPT1mLnJ1bkhvb2tzKCJi'@;
put 'ZWZvcmVSZW1vdmVDZWxsTWV0YSIsdnQsT3QsY24sSm4pJiYob3QucmVtb3ZlQ2VsbE1ldGEoRW4sT24sY24pLGYucnVuSG9va3MoImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLHZ0LE90LGNuLEpuKSksSm49bnVsbH0sdGhpcy5zcGxpY2VDZWxsc01ldGE9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtmb3IodmFyIGNuPWFyZ3VtZW50cy5sZW5ndGgsRW49bmV3IEFycmF5KGNuPjI/Y24tMjowKSxPbj0yO09uPGNuO09uKyspRW5bT24tMl09YXJndW1lbnRzW09uXTtpZihFbi5sZW5ndGg+MCYmIUFy'@;
put 'cmF5LmlzQXJyYXkoRW5bMF0pKXRocm93IG5ldyBFcnJvcigiVGhlIDNyZCBhcmd1bWVudCAoY2VsbE1ldGFSb3dzKSBoYXMgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGNlbGwgbWV0YSBvYmplY3RzIGFycmF5LiIpO090PjAmJm90LnJlbW92ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3co'@;
put 'dnQpLE90KSxFbi5sZW5ndGg+MCYmRG4oRW4ucmV2ZXJzZSgpLEpuPT57b3QuY3JlYXRlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLERuKEpuLChQcixPcik9PnRoaXMuc2V0Q2VsbE1ldGFPYmplY3QodnQsT3IsUHIpKX0pLGYucmVuZGVyKCl9LHRoaXMuc2V0Q2VsbE1ldGFPYmplY3Q9'@;
put 'ZnVuY3Rpb24odnQsT3QsY24peyJvYmplY3QiPT10eXBlb2YgY24mJmRzKGNuLChFbixPbik9Pnt0aGlzLnNldENlbGxNZXRhKHZ0LE90LE9uLEVuKX0pfSx0aGlzLnNldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtpZighMT09PWYucnVuSG9va3MoImJlZm9yZVNldENlbGxNZXRh'@;
put 'Iix2dCxPdCxjbixFbikpcmV0dXJuO2xldCBKbj12dCxQcj1PdDt2dDx0aGlzLmNvdW50Um93cygpJiYoSm49dGhpcy50b1BoeXNpY2FsUm93KHZ0KSksT3Q8dGhpcy5jb3VudENvbHMoKSYmKFByPXRoaXMudG9QaHlzaWNhbENvbHVtbihPdCkpLG90LnNldENlbGxNZXRhKEpuLFByLGNuLEVu'@;
put 'KSxmLnJ1bkhvb2tzKCJhZnRlclNldENlbGxNZXRhIix2dCxPdCxjbixFbil9LHRoaXMuZ2V0Q2VsbHNNZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG90LmdldENlbGxzTWV0YSgpfSx0aGlzLmdldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249dGhpcy50b1BoeXNpY2FsUm93KHZ0KSxF'@;
put 'bj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpO3JldHVybiBudWxsPT09Y24mJihjbj12dCksbnVsbD09PUVuJiYoRW49T3QpLG90LmdldENlbGxNZXRhKGNuLEVuLHt2aXN1YWxSb3c6dnQsdmlzdWFsQ29sdW1uOk90fSl9LHRoaXMuZ2V0Q2VsbE1ldGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0'@;
put 'dXJuIG90LmdldENlbGxzTWV0YUF0Um93KHZ0KX0sdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ZXQuY29sdW1ucyl9LHRoaXMuZ2V0Q2VsbFJlbmRlcmVyPWZ1bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0i'@;
put 'bnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLnJlbmRlcmVyOnZ0LnJlbmRlcmVyO3JldHVybiJzdHJpbmciPT10eXBlb2YgY24/YmsoY24pOkxhKGNuKT9iaygidGV4dCIpOmNufSx0aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24odnQsT3Qpe2NvbnN0IGNuPSJudW1i'@;
put 'ZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxPdCkuZWRpdG9yOnZ0LmVkaXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGNuP3BrKGNuKTpMYShjbik/cGsoInRleHQiKTpjbn0sdGhpcy5nZXRDZWxsVmFsaWRhdG9yPWZ1bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0ibnVtYmVyIj09'@;
put 'dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLnZhbGlkYXRvcjp2dC52YWxpZGF0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjbj9GTihjbik6Y259LHRoaXMudmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCl7dGhpcy5fdmFsaWRhdGVDZWxscyh2dCl9LHRoaXMudmFsaWRhdGVSb3dz'@;
put 'PWZ1bmN0aW9uKHZ0LE90KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZVJvd3MgcGFyYW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhPdCx2dCl9LHRoaXMudmFsaWRhdGVDb2x1bW5zPWZ1bmN0aW9uKHZ0'@;
put 'LE90KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZUNvbHVtbnMgcGFyYW1ldGVyIGBjb2x1bW5zYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhPdCx2b2lkIDAsdnQpfSx0aGlzLl92YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0'@;
put 'LE90LGNuKXtjb25zdCBFbj1uZXcgRHI7dnQmJihFbi5vblF1ZXVlRW1wdHk9dnQpO2xldCBPbj1mLmNvdW50Um93cygpLTE7Zm9yKDtPbj49MDspe2lmKHZvaWQgMCE9PU90JiYtMT09PU90LmluZGV4T2YoT24pKXtPbi09MTtjb250aW51ZX1sZXQgSm49Zi5jb3VudENvbHMoKS0xO2Zvcig7'@;
put 'Sm4+PTA7KXZvaWQgMD09PWNufHwtMSE9PWNuLmluZGV4T2YoSm4pPyhFbi5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksZi52YWxpZGF0ZUNlbGwoZi5nZXREYXRhQXRDZWxsKE9uLEpuKSxmLmdldENlbGxNZXRhKE9uLEpuKSxQcj0+e2lmKCJib29sZWFuIiE9dHlwZW9mIFByKXRocm93IG5ldyBF'@;
put 'cnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1QciYmKEVuLnZhbGlkPSExKSxFbi5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX0sInZhbGlkYXRlQ2VsbHMiKSxKbi09MSk6Sm4tPTE7T24tPTF9RW4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSx0'@;
put 'aGlzLmdldFJvd0hlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE90PWV0LnJvd0hlYWRlcnMsY249dnQ7cmV0dXJuIHZvaWQgMCE9PWNuJiYoY249Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyIixjbikpLHZvaWQgMD09PWNuPyhPdD1bXSx2byhmLmNvdW50Um93cygpLTEsRW49PntPdC5wdXNo'@;
put 'KGYuZ2V0Um93SGVhZGVyKEVuKSl9KSk6QXJyYXkuaXNBcnJheShPdCkmJnZvaWQgMCE9PU90W2NuXT9PdD1PdFtjbl06UmEoT3QpP090PU90KGNuKTpPdCYmInN0cmluZyIhPXR5cGVvZiBPdCYmIm51bWJlciIhPXR5cGVvZiBPdCYmKE90PWNuKzEpLE90fSx0aGlzLmhhc1Jvd0hlYWRlcnM9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4hIWV0LnJvd0hlYWRlcnN9LHRoaXMuaGFzQ29sSGVhZGVycz1mdW5jdGlvbigpe2lmKG51bGwhPWV0LmNvbEhlYWRlcnMpcmV0dXJuISFldC5jb2xIZWFkZXJzO2ZvcihsZXQgdnQ9MCxPdD1mLmNvdW50Q29scygpO3Z0PE90O3Z0KyspaWYoZi5nZXRDb2xIZWFk'@;
put 'ZXIodnQpKXJldHVybiEwO3JldHVybiExfSx0aGlzLmdldENvbEhlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE90PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMTtjb25zdCBjbj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2xIZWFkZXIiLHZ0KTtp'@;
put 'Zih2b2lkIDA9PT1jbil7Y29uc3QgT3I9W10sJHI9Zi5jb3VudENvbHMoKTtmb3IobGV0IFlyPTA7WXI8JHI7WXIrKylPci5wdXNoKGYuZ2V0Q29sSGVhZGVyKFlyKSk7cmV0dXJuIE9yfWxldCBFbj1ldC5jb2xIZWFkZXJzO2NvbnN0IEpuPWYudG9QaHlzaWNhbENvbHVtbihjbiksUHI9ZnVu'@;
put 'Y3Rpb24oT3Ipe2NvbnN0ICRyPVtdLFlyPWYuY291bnRDb2xzKCk7bGV0IE5yPTA7Zm9yKDtOcjxZcjtOcisrKVJhKGV0LmNvbHVtbnMpJiZldC5jb2x1bW5zKE5yKSYmJHIucHVzaChOcik7cmV0dXJuICRyW09yXX0oSm4pO3JldHVybiExPT09ZXQuY29sSGVhZGVycz9Fbj1udWxsOmV0LmNv'@;
put 'bHVtbnMmJlJhKGV0LmNvbHVtbnMpJiZldC5jb2x1bW5zKFByKSYmZXQuY29sdW1ucyhQcikudGl0bGU/RW49ZXQuY29sdW1ucyhQcikudGl0bGU6ZXQuY29sdW1ucyYmZXQuY29sdW1uc1tKbl0mJmV0LmNvbHVtbnNbSm5dLnRpdGxlP0VuPWV0LmNvbHVtbnNbSm5dLnRpdGxlOkFycmF5Lmlz'@;
put 'QXJyYXkoZXQuY29sSGVhZGVycykmJnZvaWQgMCE9PWV0LmNvbEhlYWRlcnNbSm5dP0VuPWV0LmNvbEhlYWRlcnNbSm5dOlJhKGV0LmNvbEhlYWRlcnMpP0VuPWV0LmNvbEhlYWRlcnMoSm4pOmV0LmNvbEhlYWRlcnMmJiJzdHJpbmciIT10eXBlb2YgZXQuY29sSGVhZGVycyYmIm51bWJlciIh'@;
put 'PXR5cGVvZiBldC5jb2xIZWFkZXJzJiYoRW49TWsoY24pKSxFbj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsRW4sdnQsT3QpLEVufSx0aGlzLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE90O2lmKHZ0Pj0wJiYoT3Q9Zi5nZXRDZWxsTWV0'@;
put 'YSgwLHZ0KS53aWR0aCksKHZvaWQgMD09PU90fHxPdD09PWV0LndpZHRoKSYmKE90PWV0LmNvbFdpZHRocyksbnVsbCE9T3Qpe3N3aXRjaCh0eXBlb2YgT3Qpe2Nhc2Uib2JqZWN0IjpPdD1PdFt2dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6T3Q9T3QodnQpfSJzdHJpbmciPT10eXBlb2YgT3Qm'@;
put 'JihPdD1wYXJzZUludChPdCwxMCkpfXJldHVybiBPdH0sdGhpcy5nZXRDb2xXaWR0aD1mdW5jdGlvbih2dCl7bGV0IE90PWYuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gT3Q9Zi5ydW5Ib29rcygibW9kaWZ5Q29sV2lkdGgiLE90LHZ0KSx2b2lkIDA9PT1PdCYmKE90PWVW'@;
put 'LkRFRkFVTFRfV0lEVEgpLE90fSx0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBPdD1ldC5yb3dIZWlnaHRzO2lmKG51bGwhPU90KXtzd2l0Y2godHlwZW9mIE90KXtjYXNlIm9iamVjdCI6T3Q9T3RbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOk90PU90'@;
put 'KHZ0KX0ic3RyaW5nIj09dHlwZW9mIE90JiYoT3Q9cGFyc2VJbnQoT3QsMTApKX1yZXR1cm4gT3R9LHRoaXMuZ2V0Um93SGVpZ2h0PWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9Zi5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gT3Q9Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0'@;
put 'IixPdCx2dCksT3R9LHRoaXMuY291bnRTb3VyY2VSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIFcuY291bnRSb3dzKCl9LHRoaXMuY291bnRTb3VyY2VDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIFcuY291bnRGaXJzdFJvd0tleXMoKX0sdGhpcy5jb3VudFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gVC5n'@;
put 'ZXRMZW5ndGgoKX0sdGhpcy5jb3VudENvbHM9ZnVuY3Rpb24oKXtjb25zdCB2dD1ldC5tYXhDb2xzLE90PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4odnQsT3QpfSx0aGlzLmNvdW50UmVuZGVyZWRSb3dzPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlUm93cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlUm93'@;
put 'c0NvdW50KCk6LTF9LHRoaXMuY291bnRSZW5kZXJlZENvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudFZpc2libGVDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmll'@;
put 'dy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudEVtcHR5Um93cz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE90PTA7cmV0dXJu'@;
put 'IHZrKGYuY291bnRSb3dzKCktMSxjbj0+e2lmKGYuaXNFbXB0eVJvdyhjbikpT3QrPTE7ZWxzZSBpZighMD09PXZ0KXJldHVybiExfSksT3R9LHRoaXMuY291bnRFbXB0eUNvbHM9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFy'@;
put 'Z3VtZW50c1swXSxPdD0wO3JldHVybiB2ayhmLmNvdW50Q29scygpLTEsY249PntpZihmLmlzRW1wdHlDb2woY24pKU90Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLE90fSx0aGlzLmlzRW1wdHlSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBldC5pc0VtcHR5Um93LmNhbGwoZix2dCl9'@;
put 'LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbih2dCl7cmV0dXJuIGV0LmlzRW1wdHlDb2wuY2FsbChmLHZ0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtsZXQgT249IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0'@;
put 'XSxKbj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO3JldHVybiFMYSh2dCkmJiFMYShPdCkmJnRoaXMuc2VsZWN0Q2VsbHMoW1t2dCxPdCxjbixFbl1dLE9uLEpuKX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe2xldCBjbj0h'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdOyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pJiYoaD0hMCk7Y29uc3QgRW49cm4uc2VsZWN0Q2VsbHMoYXJndW1lbnRz'@;
put 'Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltbXV0pO3JldHVybiBFbiYmY24mJmYubGlzdGVuKCksaD0hMSxFbn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gcm4uc2VsZWN0Q29sdW1ucyh2dCxhcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQpfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24odnQpe3JldHVybiBybi5zZWxlY3RSb3dzKHZ0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCl9LHRoaXMuZGVzZWxl'@;
put 'Y3RDZWxsPWZ1bmN0aW9uKCl7cm4uZGVzZWxlY3QoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXtsZXQgdnQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtjb25zdCBPdD12dCYmdGhpcy5oYXNSb3dIZWFkZXJzKCksY249dnQm'@;
put 'JnRoaXMuaGFzQ29sSGVhZGVycygpO2g9ITAscm4uc2VsZWN0QWxsKE90LGNuKSxoPSExfTtjb25zdCBGbj0odnQsT3QpPT52dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoT3QsMSwhMCk7dGhpcy5zY3JvbGxWaWV3cG9ydFRvPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249YXJndW1lbnRzLmxl'@;
put 'bmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxFbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2NvbnN0IEpuPSFjbixQcj0hRW47bGV0IE9yPXZ0LCRyPU90O2lmKCEoYXJndW1lbnRzLmxlbmd0aD40JiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0pe2NvbnN0IFJpPU51bWJlci5pc0ludGVnZXIodnQpLFhvPU51bWJlci5pc0ludGVnZXIoT3QpLEdvPVJpP0ZuKHRoaXMucm93SW5kZXhNYXBwZXIsdnQpOnZvaWQgMCxKcz1Ybz9Gbih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLE90'@;
put 'KTp2b2lkIDA7aWYobnVsbD09PUdvfHxudWxsPT09SnMpcmV0dXJuITE7T3I9Umk/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEdvKTp2b2lkIDAsJHI9WG8/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEpzKTp2'@;
put 'b2lkIDB9Y29uc3QgWXI9TnVtYmVyLmlzSW50ZWdlcihPciksTnI9TnVtYmVyLmlzSW50ZWdlcigkcik7cmV0dXJuIFlyJiZOcj9mLnZpZXcuc2Nyb2xsVmlld3BvcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhPciwkciksSm4sRW4sY24sUHIpOllyJiYhMT09PU5yP2Yudmlldy5zY3JvbGxWaWV3'@;
put 'cG9ydFZlcnRpY2FsbHkoT3IsSm4sY24pOiEoIU5yfHwhMSE9PVlyKSYmZi52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KCRyLEVuLFByKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYoZi5fY2xlYXJUaW1lb3V0cygpLGYuX2NsZWFySW1tZWRpYXRlcygpLGYudmlldyYmZi52'@;
put 'aWV3LmRlc3Ryb3koKSxXJiZXLmRlc3Ryb3koKSxXPW51bGwsdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5kZXN0cm95KCksb3QuY2xlYXJDYWNoZSgpLHJWKGYpKXtjb25zdCB2dD10aGlzLnJvb3REb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7'@;
put 'dnQmJnZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodnQpfWcyKGYucm9vdEVsZW1lbnQpLF8uZGVzdHJveSgpLGdlJiZnZS5kZXN0cm95KCksZi5iYXRjaEV4ZWN1dGlvbigoKT0+e2Yucm93SW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLGYuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rl'@;
put 'ckFsbCgpLGt0LmdldEl0ZW1zKCkuZm9yRWFjaCh2dD0+e2xldFssT3RdPXZ0O090LmRlc3Ryb3koKX0pLGt0LmNsZWFyKCksZi5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9LCEwKSxzby5nZXRTaW5nbGV0b24oKS5kZXN0cm95KGYpLGRzKGYsKHZ0LE90LGNuKT0+e1JhKHZ0KT9jbltPdF09'@;
put 'ZnVuY3Rpb24gRnIodnQpe3JldHVybigpPT57dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7dnR9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGApfX0oT3QpOiJndWlkIiE9PU90JiYoY25bT3RdPW51'@;
put 'bGwpfSksZi5pc0Rlc3Ryb3llZD0hMCxUJiZULmRlc3Ryb3koKSxUPW51bGwsaWU9bnVsbCxybj1udWxsLGdlPW51bGwsZj1udWxsfSx0aGlzLmdldEFjdGl2ZUVkaXRvcj1mdW5jdGlvbigpe3JldHVybiBnZS5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRQbHVnaW49ZnVuY3Rpb24odnQp'@;
put 'e2NvbnN0IE90PWJ1KHZ0KTtyZXR1cm4iVW5kb1JlZG8iPT09T3Q/dGhpcy51bmRvUmVkbzprdC5nZXRJdGVtKE90KX0sdGhpcy5nZXRQbHVnaW5OYW1lPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gdnQ9PT10aGlzLnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lOX0tFWTpr'@;
put 'dC5nZXRJZCh2dCl9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZn0sdGhpcy5hZGRIb29rPWZ1bmN0aW9uKHZ0LE90KXtzby5nZXRTaW5nbGV0b24oKS5hZGQodnQsT3QsZil9LHRoaXMuaGFzSG9vaz1mdW5jdGlvbih2dCl7cmV0dXJuIHNvLmdldFNpbmdsZXRvbigpLmhh'@;
put 'cyh2dCxmKXx8c28uZ2V0U2luZ2xldG9uKCkuaGFzKHZ0KX0sdGhpcy5hZGRIb29rT25jZT1mdW5jdGlvbih2dCxPdCl7c28uZ2V0U2luZ2xldG9uKCkub25jZSh2dCxPdCxmKX0sdGhpcy5yZW1vdmVIb29rPWZ1bmN0aW9uKHZ0LE90KXtzby5nZXRTaW5nbGV0b24oKS5yZW1vdmUodnQsT3Qs'@;
put 'Zil9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24odnQsT3QsY24sRW4sT24sSm4sUHIpe3JldHVybiBzby5nZXRTaW5nbGV0b24oKS5ydW4oZix2dCxPdCxjbixFbixPbixKbixQcil9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbih2dCxPdCl7cmV0dXJuIEluZShldC5sYW5ndWFn'@;
put 'ZSx2dCxPdCl9LHRoaXMudG9IVE1MPSgpPT5UTih0aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHZ0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsVE4odGhpcykpLHZ0LmZp'@;
put 'cnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMuX3JlZ2lzdGVyVGltZW91dD1mdW5jdGlvbih2dCl7bGV0IGNuPXZ0OyJmdW5jdGlvbiI9PXR5cGVvZiBjbiYmKGNuPXNldFRpbWVvdXQoY24sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn'@;
put 'dW1lbnRzWzFdOjApKSx0aGlzLnRpbWVvdXRzLnB1c2goY24pfSx0aGlzLl9jbGVhclRpbWVvdXRzPWZ1bmN0aW9uKCl7RG4odGhpcy50aW1lb3V0cyx2dD0+e2NsZWFyVGltZW91dCh2dCl9KX0sdGhpcy5pbW1lZGlhdGVzPVtdLHRoaXMuX3JlZ2lzdGVySW1tZWRpYXRlPWZ1bmN0aW9uKHZ0'@;
put 'KXt0aGlzLmltbWVkaWF0ZXMucHVzaChzZXRJbW1lZGlhdGUodnQpKX0sdGhpcy5fY2xlYXJJbW1lZGlhdGVzPWZ1bmN0aW9uKCl7RG4odGhpcy5pbW1lZGlhdGVzLHZ0PT57Y2xlYXJJbW1lZGlhdGUodnQpfSl9LHRoaXMuX3JlZnJlc2hCb3JkZXJzPWZ1bmN0aW9uKCl7bGV0IE90PSEoYXJn'@;
put 'dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07Z2UuZGVzdHJveUVkaXRvcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSxmLnZpZXcucmVuZGVyKCksT3QmJnJuLmlzU2VsZWN0ZWQoKSYm'@;
put 'Z2UucHJlcGFyZUVkaXRvcigpfSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1mLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLnJvb3RFbGVtZW50KS5kaXJlY3Rpb259LHRoaXMuaXNMdHI9ZnVuY3Rpb24oKXtyZXR1cm4hZi5pc1J0bCgpfSx0aGlzLmdldERpcmVj'@;
put 'dGlvbkZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBmLmlzTHRyKCk/MTotMX07Y29uc3QgUW49JERlKHtoYW5kbGVFdmVudDp2dD0+Zi5pc0xpc3RlbmluZygpJiZ2b2lkIDAhPT12dD8ua2V5LGJlZm9yZUtleURvd246dnQ9PnRoaXMucnVuSG9va3MoImJlZm9yZUtleURvd24iLHZ0KSxhZnRl'@;
put 'cktleURvd246dnQ9Pnt0aGlzLmlzRGVzdHJveWVkfHxmLnJ1bkhvb2tzKCJhZnRlckRvY3VtZW50S2V5RG93biIsdnQpfSxvd25lcldpbmRvdzp0aGlzLnJvb3RXaW5kb3d9KTt0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsdnQ9PnshMT09PXZ0LmN0cmxLZXkmJiExPT09'@;
put 'dnQubWV0YUtleSYmUW4ucmVsZWFzZVByZXNzZWRLZXlzKCl9KSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBRbn07Y29uc3QgTXI9UW4uYWRkQ29udGV4dCgiZ3JpZCIpLF9yPXtydW5Pbmx5SWY6KCk9PktpKGYuZ2V0U2VsZWN0ZWQoKSkmJmYuY291bnRSZW5k'@;
put 'ZXJlZFJvd3MoKT4wJiZmLmNvdW50UmVuZGVyZWRDb2xzKCk+MCxncm91cDpxRGV9O1FuLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIiksTXIuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT57Zi5zZWxlY3RBbGwoKX19LHtrZXlzOltb'@;
put 'IkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZFJhbmdlKCkse3JvdzpPdCxjb2w6Y259PXZ0W3Z0Lmxlbmd0aC0xXS5oaWdobGlnaHQsRW49Zi5nZXREYXRhQXRDZWxsKE90LGNuKSxPbj1uZXcgTWFwO2ZvcihsZXQgSm49MDtKbjx2'@;
put 'dC5sZW5ndGg7Sm4rKyl2dFtKbl0uZm9yQWxsKChQcixPcik9PntpZihQcj49MCYmT3I+PTAmJihQciE9PU90fHxPciE9PWNuKSl7Y29uc3R7cmVhZE9ubHk6JHJ9PWYuZ2V0Q2VsbE1ldGEoUHIsT3IpOyRyfHxPbi5zZXQoYCR7UHJ9eCR7T3J9YCxbUHIsT3IsRW5dKX19KTtmLnNldERhdGFB'@;
put 'dENlbGwoQXJyYXkuZnJvbShPbi52YWx1ZXMoKSkpfSxydW5Pbmx5SWY6KCk9PmYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRDZWxsc0NvdW50KCk+MX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3JuLnRyYW5zZm9ybVN0YXJ0KC0xLDApfX0se2tleXM6W1siQXJyb3dV'@;
put 'cCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e3JuLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpLGYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGln'@;
put 'aHQuY29sKSl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntybi50cmFuc2Zvcm1FbmQoLTEsMCl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdHtmcm9tOnZ0LHRv'@;
put 'Ok90fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksY249Zi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKTtybi5zZXRSYW5nZVN0YXJ0KHZ0LmNsb25lKCkpLHJuLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sT3QuY29sKSl9LHJ1bk9ubHlJ'@;
put 'ZjooKT0+IShmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Zi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntybi50cmFuc2Zvcm1TdGFydCgxLDApfX0se2tleXM6W1siQXJyb3dEb3duIiwi'@;
put 'Q29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57cm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRSb3dzKCktMSwtMSksZi5nZXRTZWxlY3RlZFJhbmdlTGFz'@;
put 'dCgpLmhpZ2hsaWdodC5jb2wpKX19LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57cm4udHJhbnNmb3JtRW5kKDEsMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2Nv'@;
put 'bnN0e2Zyb206dnQsdG86T3R9PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Um93cygpLTEsLTEpO3JuLnNldFJhbmdlU3RhcnQodnQuY2xvbmUoKSkscm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhjbixPdC5jb2wpKX0scnVuT25seUlmOigpPT4hKGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3JuLnRyYW5zZm9ybVN0YXJ0'@;
put 'KDAsLTEqZi5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd0xlZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxPdD1mLmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5mLmlzUnRsKCk/W2YuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO3JuLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxPdCkpfX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntybi50'@;
put 'cmFuc2Zvcm1FbmQoMCwtMSpmLmdldERpcmVjdGlvbkZhY3RvcigpKX19LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3R7ZnJvbTp2dCx0bzpPdH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGNu'@;
put 'PWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bZi5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSk7cm4uc2V0UmFuZ2VTdGFydCh2dC5jbG9uZSgpKSxybi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LnJvdyxjbikpfSxy'@;
put 'dW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3JuLnRyYW5zZm9ybVN0YXJ0KDAsZi5nZXREaXJlY3Rpb25GYWN0b3Io'@;
put 'KSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csT3Q9Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5k'@;
put 'ZXgoLi4uZi5pc1J0bCgpP1swLDFdOltmLmNvdW50Q29scygpLTEsLTFdKTtybi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpKX19LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e3JuLnRyYW5zZm9ybUVuZCgwLGYuZ2V0RGlyZWN0'@;
put 'aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3R7ZnJvbTp2dCx0bzpPdH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVh'@;
put 'cmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bMCwxXTpbZi5jb3VudENvbHMoKS0xLC0xXSk7cm4uc2V0UmFuZ2VTdGFydCh2dC5jbG9uZSgpKSxybi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LnJvdyxjbikpfSxydW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24u'@;
put 'aXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siSG9tZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0IHZ0PXBhcnNlSW50KGYuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksT3Q9'@;
put 'Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csY249Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodnQsMSk7cm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LGNuKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3LmlzTWFp'@;
put 'blRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntybi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKHJuLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmZyb20ucm93LGYuY29sdW1uSW5kZXhNYXBwZXIu'@;
put 'Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSkpKX19LHtrZXlzOltbIkhvbWUiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1wYXJzZUludChmLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLDEwKSxPdD1wYXJzZUludChmLmdldFNl'@;
put 'dHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LDEpLEVuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LDEpO3JuLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhjbixFbikpfSxydW5Pbmx5SWY6KCk9PmYudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57cm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKGYuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRDb2xzKCktMSwtMSkpKX0scnVuT25seUlmOigpPT5mLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtr'@;
put 'ZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57cm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3Jkcyhybi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5mcm9tLnJvdyxmLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Q29scygp'@;
put 'LTEsLTEpKSl9fSx7a2V5czpbWyJFbmQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1wYXJzZUludChmLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLDEwKSxPdD1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5J'@;
put 'bmRleChmLmNvdW50Um93cygpLXZ0LTEsLTEpLGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRDb2xzKCktMSwtMSk7cm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LGNuKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3Lmlz'@;
put 'TWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9Pntybi50cmFuc2Zvcm1TdGFydCgtZi5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e2NvbnN0e3Rv'@;
put 'OnZ0fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksT3Q9TWF0aC5tYXgodnQucm93LWYuY291bnRWaXNpYmxlUm93cygpLDApLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LDEpO2lmKG51bGwhPT1jbil7Y29uc3QgRW49Zi5fY3JlYXRlQ2VsbENvb3Jk'@;
put 'cyhjbix2dC5jb2wpLE9uPXZ0LnJvdy1mLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxKbj1NYXRoLm1heChFbi5yb3ctT24sMCk7cm4uc2V0UmFuZ2VFbmQoRW4pLGYuc2Nyb2xsVmlld3BvcnRUbyhKbil9fX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pntybi50'@;
put 'cmFuc2Zvcm1TdGFydChmLmNvdW50VmlzaWJsZVJvd3MoKSwwKX19LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHt0bzp2dH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLE90PU1hdGgubWluKHZ0LnJvdytmLmNvdW50VmlzaWJsZVJvd3MoKSxmLmNv'@;
put 'dW50Um93cygpLTEpLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LC0xKTtpZihudWxsIT09Y24pe2NvbnN0IEVuPWYuX2NyZWF0ZUNlbGxDb29yZHMoY24sdnQuY29sKSxPbj12dC5yb3ctZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksSm49'@;
put 'TWF0aC5taW4oRW4ucm93LU9uLGYuY291bnRSb3dzKCktMSk7cm4uc2V0UmFuZ2VFbmQoRW4pLGYuc2Nyb2xsVmlld3BvcnRUbyhKbil9fX0se2tleXM6W1siVGFiIl1dLGNhbGxiYWNrOnZ0PT57Y29uc3QgT3Q9ImZ1bmN0aW9uIj09dHlwZW9mIGV0LnRhYk1vdmVzP2V0LnRhYk1vdmVzKHZ0'@;
put 'KTpldC50YWJNb3Zlcztybi50cmFuc2Zvcm1TdGFydChPdC5yb3csT3QuY29sLCEwKX19LHtrZXlzOltbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOnZ0PT57Y29uc3QgT3Q9ImZ1bmN0aW9uIj09dHlwZW9mIGV0LnRhYk1vdmVzP2V0LnRhYk1vdmVzKHZ0KTpldC50YWJNb3Zlcztybi50cmFu'@;
put 'c2Zvcm1TdGFydCgtT3Qucm93LC1PdC5jb2wpfX1dLF9yKSxQTigpLmZvckVhY2godnQ9Pntjb25zdCBPdD11eSh2dCk7a3QuYWRkSXRlbSh2dCxuZXcgT3QodGhpcykpfSksc28uZ2V0U2luZ2xldG9uKCkucnVuKGYsImNvbnN0cnVjdCIpfWNvbnN0IFpuZT17X2hvb2tzU3RvcmFnZTpPYmpl'@;
put 'Y3QuY3JlYXRlKG51bGwpLGFkZEhvb2soYyxsKXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdlW2NdfHwodGhpcy5faG9va3NTdG9yYWdlW2NdPVtdKSx0aGlzLmhvdC5hZGRIb29rKGMsbCksdGhpcy5faG9va3NTdG9yYWdlW2NdLnB1c2gobCksdGhpc30scmVtb3ZlSG9va3NCeUtleShjKXtE'@;
put 'bih0aGlzLl9ob29rc1N0b3JhZ2VbY118fFtdLGw9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGMsbCl9KX0sY2xlYXJIb29rcygpe2RzKHRoaXMuX2hvb2tzU3RvcmFnZSwoYyxsKT0+dGhpcy5yZW1vdmVIb29rc0J5S2V5KGwpKSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTtmaChabmUsIk1JWElO'@;
put 'X05BTUUiLCJob29rc1JlZlJlZ2lzdGVyZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgWERlPVpuZSxZYz1PYmplY3QuZnJlZXplKHtWSVJHSU46IlNUQVRFX1ZJUkdJTiIsRURJVElORzoiU1RBVEVfRURJVElORyIsV0FJVElORzoiU1RBVEVfV0FJVElORyIsRklOSVNI'@;
put 'RUQ6IlNUQVRFX0ZJTklTSEVEIn0pLEdCPSJiYXNlRWRpdG9yIjtjbGFzcyB2N3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImJhc2UifWNvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5pbnN0YW5jZT1sLHRoaXMuc3RhdGU9WWMuVklSR0lOLHRoaXMuX29wZW5lZD0hMSx0'@;
put 'aGlzLl9mdWxsRWRpdE1vZGU9ITEsdGhpcy5fY2xvc2VDYWxsYmFjaz1udWxsLHRoaXMuVEQ9bnVsbCx0aGlzLnJvdz1udWxsLHRoaXMuY29sPW51bGwsdGhpcy5wcm9wPW51bGwsdGhpcy5vcmlnaW5hbFZhbHVlPW51bGwsdGhpcy5jZWxsUHJvcGVydGllcz1udWxsLHRoaXMuaW5pdCgpfV9m'@;
put 'aXJlQ2FsbGJhY2tzKGwpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0aGlzLl9jbG9zZUNhbGxiYWNrKGwpLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCl9aW5pdCgpe31nZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXNldFZh'@;
put 'bHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9b3Blbigpe3Rocm93IEVycm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9Y2xvc2UoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1w'@;
put 'bGVtZW50ZWQiKX1wcmVwYXJlKGwsYSxkLGgsZixfKXt0aGlzLlREPWgsdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRoaXMucHJvcD1kLHRoaXMub3JpZ2luYWxWYWx1ZT1mLHRoaXMuY2VsbFByb3BlcnRpZXM9Xyx0aGlzLnN0YXRlPVljLlZJUkdJTn1leHRlbmQoKXtyZXR1cm4gY2xhc3MgZXh0'@;
put 'ZW5kcyB0aGlzLmNvbnN0cnVjdG9ye319c2F2ZVZhbHVlKGwsYSl7bGV0IGQsaCxmLF87aWYoYSl7Y29uc3Qgd2U9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7ZD1NYXRoLm1heChNYXRoLm1pbih3ZVswXSx3ZVsyXSksMCksaD1NYXRoLm1heChNYXRoLm1pbih3ZVsxXSx3ZVszXSksMCks'@;
put 'Zj1NYXRoLm1heCh3ZVswXSx3ZVsyXSksXz1NYXRoLm1heCh3ZVsxXSx3ZVszXSl9ZWxzZVtkLGgsZixfXT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtjb25zdCBUPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgpO0FycmF5LmlzQXJyYXkoVCkmJihb'@;
put 'ZCxoXT1UKTtjb25zdCBpZT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKSxnZT17cnVuT25seUlmOigpPT5LaSh0aGlzLmhvdC5nZXRTZWxlY3RlZCgpKSxncm91cDpHQn07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJmllLmFkZFNob3J0Y3V0cyhb'@;
put 'e2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtMSwwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgxLDApfX0se2tleXM6W1siQXJy'@;
put 'b3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFy'@;
put 'dCgwLHRoaXMuaG90LmdldERpcmVjdGlvbkZhY3RvcigpKX19XSxnZSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoZCxoLGwsZixfLCJlZGl0Iil9YmVnaW5FZGl0aW5nKGwsYSl7aWYodGhpcy5zdGF0ZSE9PVljLlZJUkdJTilyZXR1cm47Y29uc3QgZD10aGlzLmhvdCxoPWQucm93SW5k'@;
put 'ZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksZj1kLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpO2lmKGQudmlldy5zY3JvbGxWaWV3cG9ydChkLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpLHRoaXMu'@;
put 'c3RhdGU9WWMuRURJVElORyx0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSl7Y29uc3QgXz0ic3RyaW5nIj09dHlwZW9mIGw/bDpfbCh0aGlzLm9yaWdpbmFsVmFsdWUpO3RoaXMuc2V0VmFsdWUoXyl9dGhpcy5vcGVuKGEpLHRoaXMuX29wZW5lZD0hMCx0aGlzLmZvY3VzKCksZC52aWV3LnJlbmRl'@;
put 'cigpLGQucnVuSG9va3MoImFmdGVyQmVnaW5FZGl0aW5nIix0aGlzLnJvdyx0aGlzLmNvbCl9ZmluaXNoRWRpdGluZyhsLGEsZCl7bGV0IGg7aWYoZCl7Y29uc3QgVD10aGlzLl9jbG9zZUNhbGxiYWNrO3RoaXMuX2Nsb3NlQ2FsbGJhY2s9Vz0+e1QmJlQoVyksZChXKSx0aGlzLmhvdC52aWV3'@;
put 'LnJlbmRlcigpfX1pZih0aGlzLmlzV2FpdGluZygpKXJldHVybjtjb25zdCBfPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO2lmKF8ucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChHQiksXy5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG1rKSx0aGlzLnN0'@;
put 'YXRlIT09WWMuVklSR0lOKXtpZih0aGlzLnN0YXRlPT09WWMuRURJVElORyl7aWYobClyZXR1cm4gdGhpcy5jYW5jZWxDaGFuZ2VzKCksdm9pZCB0aGlzLmhvdC52aWV3LnJlbmRlcigpO2NvbnN0IFQ9dGhpcy5nZXRWYWx1ZSgpO2g9dGhpcy5jZWxsUHJvcGVydGllcy50cmltV2hpdGVzcGFj'@;
put 'ZT9bWyJzdHJpbmciPT10eXBlb2YgVD9TdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChUfHwiIik6VF1dOltbVF1dLHRoaXMuc3RhdGU9WWMuV0FJVElORyx0aGlzLnNhdmVWYWx1ZShoLGEpLHRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxsUHJvcGVydGllcyk/dGhpcy5ob3Qu'@;
put 'YWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIixXPT57dGhpcy5zdGF0ZT1ZYy5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoVyl9KToodGhpcy5zdGF0ZT1ZYy5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoITApKX19ZWxzZSB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgp'@;
put 'PT57dGhpcy5fZmlyZUNhbGxiYWNrcyghMCl9KX1jYW5jZWxDaGFuZ2VzKCl7dGhpcy5zdGF0ZT1ZYy5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoKX1kaXNjYXJkRWRpdG9yKGwpe3RoaXMuc3RhdGU9PT1ZYy5GSU5JU0hFRCYmKCExPT09bCYmITAhPT10aGlzLmNlbGxQcm9wZXJ0aWVz'@;
put 'LmFsbG93SW52YWxpZD8odGhpcy5ob3Quc2VsZWN0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5mb2N1cygpLHRoaXMuc3RhdGU9WWMuRURJVElORyx0aGlzLl9maXJlQ2FsbGJhY2tzKCExKSk6KHRoaXMuY2xvc2UoKSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSEx'@;
put 'LHRoaXMuc3RhdGU9WWMuVklSR0lOLHRoaXMuX2ZpcmVDYWxsYmFja3MoITApLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIikpKX1lbmFibGVGdWxsRWRpdE1vZGUoKXt0aGlzLl9mdWxsRWRpdE1vZGU9ITB9aXNJbkZ1bGxFZGl0TW9k'@;
put 'ZSgpe3JldHVybiB0aGlzLl9mdWxsRWRpdE1vZGV9aXNPcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfWlzV2FpdGluZygpe3JldHVybiB0aGlzLnN0YXRlPT09WWMuV0FJVElOR31nZXRFZGl0ZWRDZWxsUmVjdCgpe3ZhciBsO2NvbnN0IGE9dGhpcy5nZXRFZGl0ZWRDZWxsKCk7aWYoIWEp'@;
put 'cmV0dXJuO2NvbnN0e3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuaG90LnZpZXcuX3d0LGY9dGhpcy5ob3Qucm9vdFdpbmRvdyxfPXFsKGEpLFQ9d2EoYSksVz1xbCh0aGlzLmhvdC5yb290RWxlbWVudCksaWU9d2EodGhpcy5ob3Qucm9vdEVsZW1lbnQpLGdlPWQudG9wT3Zlcmxh'@;
put 'eS5ob2xkZXIsd2U9ZC5pbmxpbmVTdGFydE92ZXJsYXkuaG9sZGVyLEVlPWdlIT09Zj9nZS5zY3JvbGxUb3A6MCxaZT13ZSE9PWY/d2Uuc2Nyb2xsTGVmdDowLG90PWYuaW5uZXJXaWR0aC1XLmxlZnQtaWUse3d0VGFibGU6ZXR9PW51bGwhPT0obD1kLmdldFBhcmVudE92ZXJsYXkoYSkpJiZ2'@;
put 'b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmlldy5fd3QseXQ9ZXQubmFtZSxrdD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKHl0KT9FZTowLFN0PVsibWFzdGVyIiwidG9wIiwiYm90dG9tIl0uaW5jbHVkZXMoeXQpP1plOjA7bGV0IHJuPV8udG9wLVcudG9wLShfLnRvcD09PVcu'@;
put 'dG9wPzA6MSkta3Qsdm49MDt2bj10aGlzLmhvdC5pc1J0bCgpP2YuaW5uZXJXaWR0aC1fLmxlZnQtVC1vdC0xK1N0Ol8ubGVmdC1XLmxlZnQtMS1TdCxbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoeXQpJiYocm4rPWQudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zm'@;
put 'c2V0KCkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyh5dCkmJih2bis9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSk7Y29uc3QgTm49dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLGNyPXRoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLERyPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLGxpPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJ'@;
put 'bmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KE5uJiZjcjw9MHx8Y3I9PT1saSkmJihybis9MSksRHI8PTAmJih2bis9MSk7Y29uc3QgbXI9aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLEVpPWguY29sdW1u'@;
put 'c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixacj1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxGbj1kLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxGcj1JYyh0aGlzLmhvdC5yb290RG9jdW1lbnQpLFFuPWEub2Zmc2V0VG9w'@;
put 'K21yLUZuO2xldCBNcj0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IFlyPWEub2Zmc2V0TGVmdDtNcj1Zcj49MD9ldC5nZXRXaWR0aCgpLWEub2Zmc2V0TGVmdDpNYXRoLmFicyhZciksTXIrPUVpLVpyLVR9ZWxzZSBNcj1hLm9mZnNldExlZnQrRWktWnI7Y29uc3QgX3I9enAodGhpcy5U'@;
put 'RCx0aGlzLmhvdC5yb290V2luZG93KSx2dD10aGlzLmhvdC5pc1J0bCgpPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIixPdD1wYXJzZUludChfclt2dF0sMTApPjA/MDoxLGNuPXBhcnNlSW50KF9yLmJvcmRlclRvcFdpZHRoLDEwKT4wPzA6MSxFbj13YShhKStPdCxPbj1h'@;
put 'bChhKStjbixKbj1kdGUoZ2UpP0ZyOjAsUHI9aHRlKHdlKT9GcjowLE9yPXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoTXIpLUpuK090O3JldHVybnt0b3A6cm4sc3RhcnQ6dm4saGVpZ2h0Ok9uLG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGlt'@;
put 'dW1WaXNpYmxlRWxlbWVudEhlaWdodChRbiktUHIrY24sMjMpLHdpZHRoOkVuLG1heFdpZHRoOk9yfX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Ns'@;
put 'b25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2Ui'@;
put 'dG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtjYXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRD'@;
put 'ZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENlbGwodGhpcy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9yU2VjdGlvbigpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGE9IiI7cmV0dXJuIHRoaXMucm93PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2E9'@;
put 'dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1zdGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tJiZ0aGlzLnJvdz49bC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93'@;
put 'c0JvdHRvbT9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoYT0iaW5saW5lLXN0YXJ0'@;
put 'IiksYX19ZnVuY3Rpb24gUURlKCl7dmFyIGwsYz17bWluSGVpZ2h0OjIwMCxtYXhIZWlnaHQ6MzAwLG1pbldpZHRoOjEwMCxtYXhXaWR0aDozMDB9LGE9ZG9jdW1lbnQuYm9keSxkPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNQQU4iKSxm'@;
put 'PWZ1bmN0aW9uKEVlLFplLG90KXtFZS5hZGRFdmVudExpc3RlbmVyKFplLG90LCExKX0sXz1mdW5jdGlvbihFZSxaZSxvdCl7RWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihaZSxvdCwhMSl9LFQ9ZnVuY3Rpb24oRWUpe3ZhciBaZSxvdDtFZT8vXlthLXpBLVogXC4sXFxcL1x8MC05XSQvLnRlc3Qo'@;
put 'RWUpfHwoRWU9Ii4iKTpFZT0iIix2b2lkIDAhPT1kLnRleHRDb250ZW50P2QudGV4dENvbnRlbnQ9bC52YWx1ZStFZTpkLmRhdGE9bC52YWx1ZStFZSxoLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC5zdHlsZS5mb250U2l6ZT13ZShsKS5mb250U2l6ZSxoLnN0eWxlLmZvbnRGYW1pbHk9'@;
put 'd2UobCkuZm9udEZhbWlseSxoLnN0eWxlLndoaXRlU3BhY2U9InByZSIsYS5hcHBlbmRDaGlsZChoKSxaZT1oLmNsaWVudFdpZHRoKzIsYS5yZW1vdmVDaGlsZChoKSxsLnN0eWxlLmhlaWdodD1jLm1pbkhlaWdodCsicHgiLGwuc3R5bGUud2lkdGg9Yy5taW5XaWR0aD5aZT9jLm1pbldpZHRo'@;
put 'KyJweCI6WmU+Yy5tYXhXaWR0aD9jLm1heFdpZHRoKyJweCI6WmUrInB4IixjLm1pbkhlaWdodD4ob3Q9bC5zY3JvbGxIZWlnaHQ/bC5zY3JvbGxIZWlnaHQtMTowKT9sLnN0eWxlLmhlaWdodD1jLm1pbkhlaWdodCsicHgiOmMubWF4SGVpZ2h0PG90PyhsLnN0eWxlLmhlaWdodD1jLm1heEhl'@;
put 'aWdodCsicHgiLGwuc3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIik6bC5zdHlsZS5oZWlnaHQ9b3QrInB4In0sVz1mdW5jdGlvbigpe3dpbmRvdy5zZXRUaW1lb3V0KFQsMCl9O2Z1bmN0aW9uIHdlKEVlKXtyZXR1cm4gRWUuY3VycmVudFN0eWxlfHxkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRD'@;
put 'b21wdXRlZFN0eWxlKEVlKX1yZXR1cm57aW5pdDpmdW5jdGlvbihFZSxaZSxvdCl7IWZ1bmN0aW9uKEVlLFplLG90KXtsPUVlLGZ1bmN0aW9uKEVlKXtpZihFZSYmRWUubWluSGVpZ2h0KWlmKCJpbmhlcml0Ij09RWUubWluSGVpZ2h0KWMubWluSGVpZ2h0PWwuY2xpZW50SGVpZ2h0O2Vsc2V7'@;
put 'dmFyIFplPXBhcnNlSW50KEVlLm1pbkhlaWdodCk7aXNOYU4oWmUpfHwoYy5taW5IZWlnaHQ9WmUpfWlmKEVlJiZFZS5tYXhIZWlnaHQpaWYoImluaGVyaXQiPT1FZS5tYXhIZWlnaHQpYy5tYXhIZWlnaHQ9bC5jbGllbnRIZWlnaHQ7ZWxzZXt2YXIgb3Q9cGFyc2VJbnQoRWUubWF4SGVpZ2h0'@;
put 'KTtpc05hTihvdCl8fChjLm1heEhlaWdodD1vdCl9aWYoRWUmJkVlLm1pbldpZHRoKWlmKCJpbmhlcml0Ij09RWUubWluV2lkdGgpYy5taW5XaWR0aD1sLmNsaWVudFdpZHRoO2Vsc2V7dmFyIGV0PXBhcnNlSW50KEVlLm1pbldpZHRoKTtpc05hTihldCl8fChjLm1pbldpZHRoPWV0KX1pZihF'@;
put 'ZSYmRWUubWF4V2lkdGgpaWYoImluaGVyaXQiPT1FZS5tYXhXaWR0aCljLm1heFdpZHRoPWwuY2xpZW50V2lkdGg7ZWxzZXt2YXIgeXQ9cGFyc2VJbnQoRWUubWF4V2lkdGgpO2lzTmFOKHl0KXx8KGMubWF4V2lkdGg9eXQpfWguZmlyc3RDaGlsZHx8KGguY2xhc3NOYW1lPSJhdXRvUmVzaXpl'@;
put 'IixoLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIsaC5hcHBlbmRDaGlsZChkKSl9KFplKSwiVEVYVEFSRUEiPT1sLm5vZGVOYW1lJiYobC5zdHlsZS5yZXNpemU9Im5vbmUiLGwuc3R5bGUub3ZlcmZsb3dZPSIiLGwuc3R5bGUuaGVpZ2h0PWMubWluSGVpZ2h0KyJweCIsbC5zdHlsZS5t'@;
put 'aW5XaWR0aD1jLm1pbldpZHRoKyJweCIsbC5zdHlsZS5tYXhXaWR0aD1jLm1heFdpZHRoKyJweCIsbC5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpLG90JiYoZihsLCJjaGFuZ2UiLFQpLGYobCwiY3V0IixXKSxmKGwsInBhc3RlIixXKSxmKGwsImRyb3AiLFcpLGYobCwia2V5ZG93biIsVyks'@;
put 'ZihsLCJmb2N1cyIsVCksZihsLCJjb21wb3NpdGlvbnN0YXJ0IixXKSxmKGwsImNvbXBvc2l0aW9udXBkYXRlIixXKSxmKGwsImNvbXBvc2l0aW9uZW5kIixXKSksVCgpfShFZSxaZSxvdCl9LHVuT2JzZXJ2ZTpmdW5jdGlvbigpe18obCwiY2hhbmdlIixUKSxfKGwsImN1dCIsVyksXyhsLCJw'@;
put 'YXN0ZSIsVyksXyhsLCJkcm9wIixXKSxfKGwsImtleWRvd24iLFcpLF8obCwiZm9jdXMiLFQpLF8obCwiY29tcG9zaXRpb25zdGFydCIsVyksXyhsLCJjb21wb3NpdGlvbnVwZGF0ZSIsVyksXyhsLCJjb21wb3NpdGlvbmVuZCIsVyl9LHJlc2l6ZTpUfX1mdW5jdGlvbiBZbmUoYyxsKXtjb25z'@;
put 'dCBhPWhOKGwpLGQ9bC52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaD1hLGY9MDtmb3IobGV0IF89MDtfPGQubGVuZ3RoO18rKyl7MCE9PV8mJihmKz1kW18tMV0ubGVuZ3RoKzEpO2NvbnN0IFc9ZitkW19dLmxlbmd0aDtpZigiaG9tZSI9PT1jP2g9ZjoiZW5kIj09PWMmJihoPVcpLGE8PVcpYnJl'@;
put 'YWt9b3kobCxoKX1UYSh2NyxYRGUpO2NvbnN0IFprPSJodF9lZGl0b3JfaGlkZGVuIixXbmU9InRleHRFZGl0b3IiO2NsYXNzIGtnIGV4dGVuZHMgdjd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0ZXh0In1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmV2ZW50TWFuYWdl'@;
put 'cj1uZXcgbGwodGhpcyksdGhpcy5hdXRvUmVzaXplPVFEZSgpLHRoaXMuVEVYVEFSRUE9dm9pZCAwLHRoaXMudGV4dGFyZWFTdHlsZT12b2lkIDAsdGhpcy5URVhUQVJFQV9QQVJFTlQ9dm9pZCAwLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT12b2lkIDAsdGhpcy5sYXllckNsYXNzPXZvaWQg'@;
put 'MCx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveSgpKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuVEVYVEFSRUEudmFs'@;
put 'dWU9bH1vcGVuKCl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixhPT50'@;
put 'aGlzLm9uQWZ0ZXJEb2N1bWVudEtleURvd24oYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuYXV0b1Jlc2l6ZS51bk9ic2VydmUoKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuVEVYVEFSRUEmJnRoaXMuaG90Lmxpc3RlbigpLHRo'@;
put 'aXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMucmVtb3ZlSG9va3NCeUtleSgiYWZ0ZXJEb2N1bWVudEtleURvd24iKX1wcmVwYXJlKGwsYSxkLGgsZixfKXtjb25zdCBUPXRoaXMuc3RhdGU7aWYoc3VwZXIucHJlcGFyZShsLGEsZCxoLGYs'@;
put 'XyksIV8ucmVhZE9ubHkpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoITApO2NvbnN0e2FsbG93SW52YWxpZDpXLGZyYWdtZW50U2VsZWN0aW9uOmllfT1fO1cmJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiKSxUIT09WWMuRklOSVNIRUQmJnRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLCFpZSYm'@;
put 'IW0yKCkmJnRoaXMuZm9jdXMoKX19YmVnaW5FZGl0aW5nKGwsYSl7dGhpcy5zdGF0ZT09PVljLlZJUkdJTiYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIsc3VwZXIuYmVnaW5FZGl0aW5nKGwsYSkpfWZvY3VzKCl7dGhpcy5URVhUQVJFQS5zZWxlY3QoKSxveSh0aGlzLlRFWFRBUkVBLHRoaXMu'@;
put 'VEVYVEFSRUEudmFsdWUubGVuZ3RoKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDt0aGlzLlRFWFRBUkVBPWwuY3JlYXRlRWxlbWVudCgiVEVYVEFSRUEiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlz'@;
put 'LlRFWFRBUkVBLnRhYkluZGV4PS0xLHBpKHRoaXMuVEVYVEFSRUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHRoaXMudGV4dGFy'@;
put 'ZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMuVEVYVEFSRUFfUEFSRU5UPWwuY3JlYXRlRWxlbWVudCgiRElWIikscGkodGhpcy5URVhUQVJFQV9QQVJFTlQsImhhbmRzb250YWJsZUlucHV0SG9sZGVyIiksQm8odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSYm'@;
put 'V28odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxwaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxaayksdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlPXRoaXMuVEVYVEFSRUFfUEFSRU5ULnN0eWxlLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFS'@;
put 'RUEpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUFfUEFSRU5UKX1oaWRlRWRpdGFibGVFbGVtZW50KCl7Q3RlKCkmJih0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iLTk5OTk5cHgiKSx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNp'@;
put 'YmxlIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMCIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iMXB4IixXbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULFprKX1zaG93RWRpdGFibGVFbGVt'@;
put 'ZW50KCl7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3ZlcmZsb3c9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnBvc2l0aW9uPSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJsZWZ0Ijoi'@;
put 'cmlnaHQiXT0iYXV0byIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjEiLHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIiLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiI7Y29uc3QgbD10aGlzLlRFWFRBUkVBX1BBUkVOVC5jaGlsZE5vZGVzO2xl'@;
put 'dCBhPSExO3ZvKGwubGVuZ3RoLTEsZD0+e2lmKEJvKGxbZF0sImhhbmRzb250YWJsZUVkaXRvciIpKXJldHVybiBhPSEwLCExfSksQm8odGhpcy5URVhUQVJFQV9QQVJFTlQsWmspJiZXbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCxaayksYT8odGhpcy5sYXllckNsYXNzPSJodF9lZGl0b3Jfdmlz'@;
put 'aWJsZSIscGkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSk6KHRoaXMubGF5ZXJDbGFzcz10aGlzLmdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcygpLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhp'@;
put 'cy5ob3QudG9QaHlzaWNhbFJvdyh0aGlzLnJvdyksYT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsdGhpcy5jb2wpO3RoaXMub3JpZ2luYWxWYWx1ZT1hLHRoaXMuc2V0VmFsdWUoYSksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNpb25zKCl7bGV0IGw9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLnN0YXRlIT09WWMuRURJVElORyYmIWwpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQobHx8dGhpcy5jbG9zZSgpKTtjb25z'@;
put 'dHt0b3A6YSxzdGFydDpkLHdpZHRoOmgsbWF4V2lkdGg6ZixoZWlnaHQ6XyxtYXhIZWlnaHQ6VH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3A9YCR7YX1weGAsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/InJp'@;
put 'Z2h0IjoibGVmdCJdPWAke2R9cHhgLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpO2NvbnN0IFc9enAodGhpcy5URCx0aGlzLmhvdC5yb290V2luZG93KTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXplPVcuZm9udFNpemUsdGhpcy5URVhUQVJFQS5zdHlsZS5mb250RmFtaWx5PVcuZm9u'@;
put 'dEZhbWlseSx0aGlzLlRFWFRBUkVBLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLlRELnN0eWxlLmJhY2tncm91bmRDb2xvcjtjb25zdCBpZT16cCh0aGlzLlRFWFRBUkVBKSxnZT1wYXJzZUludChpZS5wYWRkaW5nTGVmdCwxMCkrcGFyc2VJbnQoaWUucGFkZGluZ1JpZ2h0LDEwKSx3ZT1w'@;
put 'YXJzZUludChpZS5wYWRkaW5nVG9wLDEwKStwYXJzZUludChpZS5wYWRkaW5nQm90dG9tLDEwKSxaZT1fLXdlLG90PWYtZ2UsZXQ9VC13ZTt0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLHttaW5XaWR0aDpNYXRoLm1pbihoLWdlLG90KSxtaW5IZWlnaHQ6TWF0aC5taW4oWmUs'@;
put 'ZXQpLG1heFdpZHRoOm90LG1heEhlaWdodDpldH0sITApfWJpbmRFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuVEVYVEFSRUEsImN1dCIsbD0+bC5zdG9wUHJvcGFnYXRpb24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlz'@;
put 'LlRFWFRBUkVBLCJwYXN0ZSIsbD0+bC5zdG9wUHJvcGFnYXRpb24oKSksYk4oKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMuZmluaXNoRWRpdGluZyghMSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jp'@;
put 'em9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lv'@;
put 'bnMoKSx0aGlzLmZvY3VzKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLmZvY3VzKCl9KX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24oKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlz'@;
put 'LmNsZWFySG9va3MoKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD0oKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VGV4dCIsITEsIlxuIil9O2EuYWRkU2hv'@;
put 'cnRjdXRzKFt7a2V5czpbWyJUYWIiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxUPSJmdW5jdGlvbiI9PXR5cGVvZiBfLnRhYk1vdmVzP18udGFiTW92ZXMoZik6Xy50YWJNb3Zlczt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoVC5yb3cs'@;
put 'VC5jb2wsITApfX0se2tleXM6W1siU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxUPSJmdW5jdGlvbiI9PXR5cGVvZiBfLnRhYk1vdmVzP18udGFiTW92ZXMoZik6Xy50YWJNb3Zlczt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3Jt'@;
put 'U3RhcnQoLVQucm93LC1ULmNvbCl9fSx7a2V5czpbWyJDb250cm9sIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjpmPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWYuYWx0S2V5LHJlbGF0aXZlVG9Hcm91cDpjeSxwb3NpdGlvbjoiYmVmb3Jl'@;
put 'In0se2tleXM6W1siTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6KCk9PiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpLHJlbGF0aXZlVG9Hcm91cDpjeSxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siQWx0IiwiRW50ZXIiXV0sY2FsbGJh'@;
put 'Y2s6KCk9PihoKCksITEpLHJlbGF0aXZlVG9Hcm91cDpjeSxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC10aGlzLmhvdC5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJQ'@;
put 'YWdlRG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh0aGlzLmhvdC5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJIb21lIl1dLGNhbGxiYWNrOihmLF8pPT57bGV0W1RdPV87WW5lKFQsdGhpcy5URVhUQVJFQSl9fSx7a2V5czpb'@;
put 'WyJFbmQiXV0sY2FsbGJhY2s6KGYsXyk9PntsZXRbVF09XztZbmUoVCx0aGlzLlRFWFRBUkVBKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5hdXRvUmVzaXpl'@;
put 'LnJlc2l6ZSgpfSwxMCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5hdXRvUmVzaXplLnJlc2l6ZSgpfSwxMCl9fV0se3J1bk9ubHlJZjooKT0+'@;
put 'S2kodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6V25lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7YS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG1rKSxhLnJlbW92ZVNob3J0Y3V0'@;
put 'c0J5R3JvdXAoV25lKSxhLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoR0IpfW9uQWZ0ZXJEb2N1bWVudEtleURvd24obCl7LTE9PT1bY28uQVJST1dfVVAsY28uQVJST1dfUklHSFQsY28uQVJST1dfRE9XTixjby5BUlJPV19MRUZUXS5pbmRleE9mKGwua2V5Q29kZSkmJnRoaXMuYXV0b1Jlc2l6'@;
put 'ZS5yZXNpemUoU3RyaW5nLmZyb21DaGFyQ29kZShsLmtleUNvZGUpKX19ZnVuY3Rpb24gTXkoYyxsLGEsZCxoLGYsXyl7Y29uc3QgVD1bXSxXPVtdO18uY2xhc3NOYW1lJiZwaShsLF8uY2xhc3NOYW1lKSxfLnJlYWRPbmx5JiZULnB1c2goXy5yZWFkT25seUNlbGxDbGFzc05hbWUpLCExPT09'@;
put 'Xy52YWxpZCYmXy5pbnZhbGlkQ2VsbENsYXNzTmFtZT9ULnB1c2goXy5pbnZhbGlkQ2VsbENsYXNzTmFtZSk6Vy5wdXNoKF8uaW52YWxpZENlbGxDbGFzc05hbWUpLCExPT09Xy53b3JkV3JhcCYmXy5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZULnB1c2goXy5ub1dvcmRXcmFwQ2xhc3NOYW1lKSwh'@;
put 'ZiYmXy5wbGFjZWhvbGRlciYmVC5wdXNoKF8ucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSxXbyhsLFcpLHBpKGwsVCl9ZnVuY3Rpb24gJHAoYyxsLGEsZCxoLGYsXyl7TXkuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsX10pO2xldCBUPWY7aWYoIVQmJl8ucGxhY2Vob2xkZXImJihUPV8ucGxh'@;
put 'Y2Vob2xkZXIpLFQ9X2woVCksXy50cmltV2hpdGVzcGFjZSYmKFQ9VC50cmltKCkpLF8ucmVuZGVyZXJUZW1wbGF0ZSl7ZzIobCk7Y29uc3QgVz1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURU1QTEFURSIpO1cuc2V0QXR0cmlidXRlKCJiaW5kIiwie3t9fSIpLFcuaW5uZXJIVE1M'@;
put 'PV8ucmVuZGVyZXJUZW1wbGF0ZSxIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKFcpLFcubW9kZWw9Yy5nZXRTb3VyY2VEYXRhQXRSb3coYSksbC5hcHBlbmRDaGlsZChXKX1lbHNlIGpwKGwsVCl9TXkuUkVOREVSRVJfVFlQRT0iYmFzZSIsJHAuUkVOREVSRVJfVFlQRT0idGV4dCI7Y29u'@;
put 'c3QgR25lPXtDRUxMX1RZUEU6InRleHQiLGVkaXRvcjprZyxyZW5kZXJlcjokcH07ZnVuY3Rpb24geTIoYyxsKXtjb25zdCBhPW5ldyBXQihjLGx8fHt9LG5WKTtyZXR1cm4gYS5pbml0KCksYX1iMihHbmUpLHkyLmVkaXRvcnM9e0Jhc2VFZGl0b3I6djd9LHkyLkNvcmU9ZnVuY3Rpb24oYyl7'@;
put 'cmV0dXJuIG5ldyBXQihjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuVil9LHkyLkRlZmF1bHRTZXR0aW5ncz1IbmUoKSx5Mi5ob29rcz1zby5nZXRTaW5nbGV0b24oKSx5Mi5DZWxsQ29vcmRzPVNrLHkyLkNlbGxSYW5nZT1aTix5'@;
put 'Mi5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxlIix5Mi5idWlsZERhdGU9IjMxLzA4LzIwMjMgMDg6MjM6MzMiLHkyLnZlcnNpb249IjEzLjEuMCIseTIubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czp6VGUsZ2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5OkRuZSxnZXRMYW5ndWFnZXNEaWN0aW9uYXJp'@;
put 'ZXM6ZnVuY3Rpb24gR1RlKCl7cmV0dXJuIFlUZSgpfSxyZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeTpUbmUsZ2V0VHJhbnNsYXRlZFBocmFzZTpJbmV9O2NvbnN0IG1zPXkyLGlJZT1bImNvbnRhaW5lciJdLCRCPW5ldyBNYXAsJG5lPSJUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJvdW5k'@;
put 'IHRvIHRoaXMgY29tcG9uZW50IHdhcyBkZXN0cm95ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIHByb3Blcmx5LiI7bGV0IEFnPSgoKT0+e2NsYXNzIGN7Z2V0SW5zdGFuY2UoYSl7Y29uc3QgZD0kQi5nZXQoYSk7cmV0dXJuIGQuaXNEZXN0cm95ZWQ/KGNvbnNvbGUud2FybigkbmUpLG51bGwpOmR9'@;
put 'cmVnaXN0ZXJJbnN0YW5jZShhLGQpe3JldHVybiAkQi5zZXQoYSxkKX1yZW1vdmVJbnN0YW5jZShhKXtyZXR1cm4gJEIuZGVsZXRlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c'@;
put 'dTAyNzVmYWN9KSxjfSkoKTtjb25zdCBvSWU9T2JqZWN0LmtleXMobXMuRGVmYXVsdFNldHRpbmdzKSxxbmU9bXMuaG9va3MuZ2V0UmVnaXN0ZXJlZCgpO2xldCBLbmU9KCgpPT57Y2xhc3MgY3ttZXJnZVNldHRpbmdzKGEpe2NvbnN0IGQ9InNldHRpbmdzImluIGEmJiJvYmplY3QiPT10eXBl'@;
put 'b2YgYS5zZXR0aW5ncyxoPWQ/YS5zZXR0aW5nczp7fTtyZXR1cm4gcW5lLmNvbmNhdChvSWUpLmZvckVhY2goXz0+e2NvbnN0IFQ9cW5lLmluZGV4T2YoXyk+LTE7bGV0IFc7ZCYmVCYmKFc9YS5zZXR0aW5nc1tfXSksdm9pZCAwIT09YVtfXSYmKFc9YVtfXSksdm9pZCAwIT09VyYmKGhbX109'@;
put 'Im5nWm9uZSJpbiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgVyYmVD9mdW5jdGlvbiguLi5pZSl7cmV0dXJuIGEubmdab25lLnJ1bigoKT0+Vy5hcHBseSh0aGlzLGllKSl9OlcpfSksaH1wcmVwYXJlQ2hhbmdlcyhhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGY9'@;
put 'PnthLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT1hW2ZdLmN1cnJlbnRWYWx1ZSl9KSxkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx4eT0oKCk9Pntj'@;
put 'bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXI9YSx0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLl9faG90SW5zdGFuY2U9bnVsbCx0aGlzLmNvbHVtbnNDb21wb25lbnRzPVtdLHRoaXMuaG90SWQ9IiJ9Z2V0IGhv'@;
put 'dEluc3RhbmNlKCl7cmV0dXJuIXRoaXMuX19ob3RJbnN0YW5jZXx8dGhpcy5fX2hvdEluc3RhbmNlJiYhdGhpcy5fX2hvdEluc3RhbmNlLmlzRGVzdHJveWVkP3RoaXMuX19ob3RJbnN0YW5jZToodGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlbW92ZUluc3RhbmNlKHRoaXMuaG90SWQpLGNv'@;
put 'bnNvbGUud2FybigkbmUpLG51bGwpfXNldCBob3RJbnN0YW5jZShhKXt0aGlzLl9faG90SW5zdGFuY2U9YX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyh0aGlzKTtpZih0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0'@;
put 'aD4wKXtjb25zdCBkPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57ZC5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSxhLmNvbHVtbnM9ZH10aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFu'@;
put 'Y2U9bmV3IG1zLkNvcmUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCxhKSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVnaXN0ZXJJbnN0YW5jZSh0aGlzLmhvdElkLHRoaXMuaG90SW5zdGFuY2UpLHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpfSl9bmdPbkNoYW5n'@;
put 'ZXMoYSl7aWYobnVsbD09PXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuO2NvbnN0IGQ9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5wcmVwYXJlQ2hhbmdlcyhhKTt0aGlzLnVwZGF0ZUhvdFRhYmxlKGQpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0'@;
put 'aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLmRlc3Ryb3koKX0pLHRoaXMuaG90SWQmJnRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKX11cGRhdGVIb3RUYWJsZShhKXt0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLm5nWm9uZS5ydW5PdXRz'@;
put 'aWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3MoYSwhMSl9KX1vbkFmdGVyQ29sdW1uc0NoYW5nZSgpe2lmKHZvaWQgMCE9PXRoaXMuY29sdW1uc0NvbXBvbmVudHMmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjApe2NvbnN0IGE9W107dGhpcy5j'@;
put 'b2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGg9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGgpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfX1vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpe2NvbnN0IGE9W107dGhpcy5jb2x1'@;
put 'bW5zQ29tcG9uZW50cy5sZW5ndGg+MCYmdGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGQ9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGQpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfWFkZENvbHVtbihhKXt0aGlzLmNv'@;
put 'bHVtbnNDb21wb25lbnRzLnB1c2goYSksdGhpcy5vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpfXJlbW92ZUNvbHVtbihhKXtjb25zdCBkPXRoaXMuY29sdW1uc0NvbXBvbmVudHMuaW5kZXhPZihhKTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLnNwbGljZShkLDEpLHRoaXMub25BZnRlckNv'@;
put 'bHVtbnNOdW1iZXJDaGFuZ2UoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQWcpLHR0KEtuZSksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaG90LXRhYmxlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQp'@;
put 'e2lmKDEmYSYmUm8oaUllLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuY29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntzZXR0aW5nczoic2V0dGluZ3MiLGhvdElkOiJob3RJZCIsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJhY3RpdmVIZWFkZXJDbGFzc05hbWUiLGFsbG93RW1wdHk6'@;
put 'ImFsbG93RW1wdHkiLGFsbG93SHRtbDoiYWxsb3dIdG1sIixhbGxvd0luc2VydENvbHVtbjoiYWxsb3dJbnNlcnRDb2x1bW4iLGFsbG93SW5zZXJ0Um93OiJhbGxvd0luc2VydFJvdyIsYWxsb3dJbnZhbGlkOiJhbGxvd0ludmFsaWQiLGFsbG93UmVtb3ZlQ29sdW1uOiJhbGxvd1JlbW92ZUNv'@;
put 'bHVtbiIsYWxsb3dSZW1vdmVSb3c6ImFsbG93UmVtb3ZlUm93IixhdXRvQ29sdW1uU2l6ZToiYXV0b0NvbHVtblNpemUiLGF1dG9Sb3dTaXplOiJhdXRvUm93U2l6ZSIsYXV0b1dyYXBDb2w6ImF1dG9XcmFwQ29sIixhdXRvV3JhcFJvdzoiYXV0b1dyYXBSb3ciLGJpbmRSb3dzV2l0aEhlYWRl'@;
put 'cnM6ImJpbmRSb3dzV2l0aEhlYWRlcnMiLGNlbGw6ImNlbGwiLGNlbGxzOiJjZWxscyIsY2hlY2tlZFRlbXBsYXRlOiJjaGVja2VkVGVtcGxhdGUiLGNsYXNzTmFtZToiY2xhc3NOYW1lIixjb2xIZWFkZXJzOiJjb2xIZWFkZXJzIixjb2xsYXBzaWJsZUNvbHVtbnM6ImNvbGxhcHNpYmxlQ29s'@;
put 'dW1ucyIsY29sdW1uSGVhZGVySGVpZ2h0OiJjb2x1bW5IZWFkZXJIZWlnaHQiLGNvbHVtbnM6ImNvbHVtbnMiLGNvbHVtblNvcnRpbmc6ImNvbHVtblNvcnRpbmciLGNvbHVtblN1bW1hcnk6ImNvbHVtblN1bW1hcnkiLGNvbFdpZHRoczoiY29sV2lkdGhzIixjb21tZW50ZWRDZWxsQ2xhc3NO'@;
put 'YW1lOiJjb21tZW50ZWRDZWxsQ2xhc3NOYW1lIixjb21tZW50czoiY29tbWVudHMiLGNvbnRleHRNZW51OiJjb250ZXh0TWVudSIsY29weWFibGU6ImNvcHlhYmxlIixjb3B5UGFzdGU6ImNvcHlQYXN0ZSIsY29ycmVjdEZvcm1hdDoiY29ycmVjdEZvcm1hdCIsY3VycmVudENvbENsYXNzTmFt'@;
put 'ZToiY3VycmVudENvbENsYXNzTmFtZSIsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VycmVudEhlYWRlckNsYXNzTmFtZSIsY3VycmVudFJvd0NsYXNzTmFtZToiY3VycmVudFJvd0NsYXNzTmFtZSIsY3VzdG9tQm9yZGVyczoiY3VzdG9tQm9yZGVycyIsZGF0YToiZGF0YSIsZGF0YVNjaGVt'@;
put 'YToiZGF0YVNjaGVtYSIsZGF0ZUZvcm1hdDoiZGF0ZUZvcm1hdCIsZGF0ZVBpY2tlckNvbmZpZzoiZGF0ZVBpY2tlckNvbmZpZyIsZGVmYXVsdERhdGU6ImRlZmF1bHREYXRlIixkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJkaXNhYmxlVmlzdWFsU2VsZWN0aW9uIixkcmFnVG9TY3JvbGw6ImRy'@;
put 'YWdUb1Njcm9sbCIsZHJvcGRvd25NZW51OiJkcm9wZG93bk1lbnUiLGVkaXRvcjoiZWRpdG9yIixlbnRlckJlZ2luc0VkaXRpbmc6ImVudGVyQmVnaW5zRWRpdGluZyIsZW50ZXJNb3ZlczoiZW50ZXJNb3ZlcyIsZmlsbEhhbmRsZToiZmlsbEhhbmRsZSIsZmlsdGVyOiJmaWx0ZXIiLGZpbHRl'@;
put 'cmluZ0Nhc2VTZW5zaXRpdmU6ImZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLGZpbHRlcnM6ImZpbHRlcnMiLGZpeGVkQ29sdW1uc0xlZnQ6ImZpeGVkQ29sdW1uc0xlZnQiLGZpeGVkQ29sdW1uc1N0YXJ0OiJmaXhlZENvbHVtbnNTdGFydCIsZml4ZWRSb3dzQm90dG9tOiJmaXhlZFJvd3NCb3R0'@;
put 'b20iLGZpeGVkUm93c1RvcDoiZml4ZWRSb3dzVG9wIixmb3JtdWxhczoiZm9ybXVsYXMiLGZyYWdtZW50U2VsZWN0aW9uOiJmcmFnbWVudFNlbGVjdGlvbiIsaGVpZ2h0OiJoZWlnaHQiLGhpZGRlbkNvbHVtbnM6ImhpZGRlbkNvbHVtbnMiLGhpZGRlblJvd3M6ImhpZGRlblJvd3MiLGludmFs'@;
put 'aWRDZWxsQ2xhc3NOYW1lOiJpbnZhbGlkQ2VsbENsYXNzTmFtZSIsbGFiZWw6ImxhYmVsIixsYW5ndWFnZToibGFuZ3VhZ2UiLGxheW91dERpcmVjdGlvbjoibGF5b3V0RGlyZWN0aW9uIixsaWNlbnNlS2V5OiJsaWNlbnNlS2V5Iixsb2NhbGU6ImxvY2FsZSIsbWFudWFsQ29sdW1uRnJlZXpl'@;
put 'OiJtYW51YWxDb2x1bW5GcmVlemUiLG1hbnVhbENvbHVtbk1vdmU6Im1hbnVhbENvbHVtbk1vdmUiLG1hbnVhbENvbHVtblJlc2l6ZToibWFudWFsQ29sdW1uUmVzaXplIixtYW51YWxSb3dNb3ZlOiJtYW51YWxSb3dNb3ZlIixtYW51YWxSb3dSZXNpemU6Im1hbnVhbFJvd1Jlc2l6ZSIsbWF4'@;
put 'Q29sczoibWF4Q29scyIsbWF4Um93czoibWF4Um93cyIsbWVyZ2VDZWxsczoibWVyZ2VDZWxscyIsbWluQ29sczoibWluQ29scyIsbWluUm93czoibWluUm93cyIsbWluU3BhcmVDb2xzOiJtaW5TcGFyZUNvbHMiLG1pblNwYXJlUm93czoibWluU3BhcmVSb3dzIixtdWx0aUNvbHVtblNvcnRp'@;
put 'bmc6Im11bHRpQ29sdW1uU29ydGluZyIsbmVzdGVkSGVhZGVyczoibmVzdGVkSGVhZGVycyIsbmVzdGVkUm93czoibmVzdGVkUm93cyIsbm9Xb3JkV3JhcENsYXNzTmFtZToibm9Xb3JkV3JhcENsYXNzTmFtZSIsbnVtZXJpY0Zvcm1hdDoibnVtZXJpY0Zvcm1hdCIsb2JzZXJ2ZURPTVZpc2li'@;
put 'aWxpdHk6Im9ic2VydmVET01WaXNpYmlsaXR5IixvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6Im91dHNpZGVDbGlja0Rlc2VsZWN0cyIscGVyc2lzdGVudFN0YXRlOiJwZXJzaXN0ZW50U3RhdGUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJwbGFj'@;
put 'ZWhvbGRlckNlbGxDbGFzc05hbWUiLHByZXZlbnRPdmVyZmxvdzoicHJldmVudE92ZXJmbG93IixwcmV2ZW50V2hlZWw6InByZXZlbnRXaGVlbCIscmVhZE9ubHk6InJlYWRPbmx5IixyZWFkT25seUNlbGxDbGFzc05hbWU6InJlYWRPbmx5Q2VsbENsYXNzTmFtZSIscmVuZGVyQWxsUm93czoi'@;
put 'cmVuZGVyQWxsUm93cyIscmVuZGVyZXI6InJlbmRlcmVyIixyb3dIZWFkZXJzOiJyb3dIZWFkZXJzIixyb3dIZWFkZXJXaWR0aDoicm93SGVhZGVyV2lkdGgiLHJvd0hlaWdodHM6InJvd0hlaWdodHMiLHNlYXJjaDoic2VhcmNoIixzZWxlY3Rpb25Nb2RlOiJzZWxlY3Rpb25Nb2RlIixzZWxl'@;
put 'Y3RPcHRpb25zOiJzZWxlY3RPcHRpb25zIixza2lwQ29sdW1uT25QYXN0ZToic2tpcENvbHVtbk9uUGFzdGUiLHNraXBSb3dPblBhc3RlOiJza2lwUm93T25QYXN0ZSIsc29ydEJ5UmVsZXZhbmNlOiJzb3J0QnlSZWxldmFuY2UiLHNvdXJjZToic291cmNlIixzdGFydENvbHM6InN0YXJ0Q29s'@;
put 'cyIsc3RhcnRSb3dzOiJzdGFydFJvd3MiLHN0cmV0Y2hIOiJzdHJldGNoSCIsc3RyaWN0OiJzdHJpY3QiLHRhYmxlQ2xhc3NOYW1lOiJ0YWJsZUNsYXNzTmFtZSIsdGFiTW92ZXM6InRhYk1vdmVzIix0aXRsZToidGl0bGUiLHRyaW1Ecm9wZG93bjoidHJpbURyb3Bkb3duIix0cmltUm93czoi'@;
put 'dHJpbVJvd3MiLHRyaW1XaGl0ZXNwYWNlOiJ0cmltV2hpdGVzcGFjZSIsdHlwZToidHlwZSIsdW5jaGVja2VkVGVtcGxhdGU6InVuY2hlY2tlZFRlbXBsYXRlIix1bmRvOiJ1bmRvIix2YWxpZGF0b3I6InZhbGlkYXRvciIsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0'@;
put 'Q29sdW1uUmVuZGVyaW5nT2Zmc2V0Iix2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDoidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLHZpc2libGVSb3dzOiJ2aXNpYmxlUm93cyIsd2lkdGg6IndpZHRoIix3b3JkV3JhcDoid29yZFdyYXAiLGFmdGVyQWRkQ2hpbGQ6ImFmdGVyQWRkQ2hp'@;
put 'bGQiLGFmdGVyQXV0b2ZpbGw6ImFmdGVyQXV0b2ZpbGwiLGFmdGVyQmVnaW5FZGl0aW5nOiJhZnRlckJlZ2luRWRpdGluZyIsYWZ0ZXJDZWxsTWV0YVJlc2V0OiJhZnRlckNlbGxNZXRhUmVzZXQiLGFmdGVyQ2hhbmdlOiJhZnRlckNoYW5nZSIsYWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQ6ImFmdGVy'@;
put 'Q2hhbmdlc09ic2VydmVkIixhZnRlckNvbHVtbkNvbGxhcHNlOiJhZnRlckNvbHVtbkNvbGxhcHNlIixhZnRlckNvbHVtbkV4cGFuZDoiYWZ0ZXJDb2x1bW5FeHBhbmQiLGFmdGVyQ29sdW1uRnJlZXplOiJhZnRlckNvbHVtbkZyZWV6ZSIsYWZ0ZXJDb2x1bW5Nb3ZlOiJhZnRlckNvbHVtbk1v'@;
put 'dmUiLGFmdGVyQ29sdW1uUmVzaXplOiJhZnRlckNvbHVtblJlc2l6ZSIsYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZToiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJDb2x1bW5Tb3J0OiJhZnRlckNvbHVtblNvcnQiLGFmdGVyQ29sdW1uVW5mcmVlemU6ImFmdGVyQ29sdW1uVW5m'@;
put 'cmVlemUiLGFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uczoiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhZnRlckNvbnRleHRNZW51SGlkZToiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLGFmdGVyQ29udGV4dE1lbnVTaG93OiJhZnRlckNvbnRleHRNZW51U2hvdyIsYWZ0ZXJD'@;
put 'b3B5OiJhZnRlckNvcHkiLGFmdGVyQ29weUxpbWl0OiJhZnRlckNvcHlMaW1pdCIsYWZ0ZXJDcmVhdGVDb2w6ImFmdGVyQ3JlYXRlQ29sIixhZnRlckNyZWF0ZVJvdzoiYWZ0ZXJDcmVhdGVSb3ciLGFmdGVyQ3V0OiJhZnRlckN1dCIsYWZ0ZXJEZXNlbGVjdDoiYWZ0ZXJEZXNlbGVjdCIsYWZ0'@;
put 'ZXJEZXN0cm95OiJhZnRlckRlc3Ryb3kiLGFmdGVyRGV0YWNoQ2hpbGQ6ImFmdGVyRGV0YWNoQ2hpbGQiLGFmdGVyRG9jdW1lbnRLZXlEb3duOiJhZnRlckRvY3VtZW50S2V5RG93biIsYWZ0ZXJEcmF3U2VsZWN0aW9uOiJhZnRlckRyYXdTZWxlY3Rpb24iLGFmdGVyRHJvcGRvd25NZW51RGVm'@;
put 'YXVsdE9wdGlvbnM6ImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGFmdGVyRHJvcGRvd25NZW51SGlkZToiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIixhZnRlckRyb3Bkb3duTWVudVNob3c6ImFmdGVyRHJvcGRvd25NZW51U2hvdyIsYWZ0ZXJGaWx0ZXI6ImFmdGVyRmlsdGVyIixh'@;
put 'ZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlOiJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixhZnRlckdldENlbGxNZXRhOiJhZnRlckdldENlbGxNZXRhIixhZnRlckdldENvbEhlYWRlcjoiYWZ0ZXJHZXRDb2xIZWFkZXIiLGFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzOiJhZnRlckdl'@;
put 'dENvbHVtbkhlYWRlclJlbmRlcmVycyIsYWZ0ZXJHZXRSb3dIZWFkZXI6ImFmdGVyR2V0Um93SGVhZGVyIixhZnRlckdldFJvd0hlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGFmdGVySGlkZUNvbHVtbnM6ImFmdGVySGlkZUNvbHVtbnMiLGFmdGVySGlkZVJv'@;
put 'd3M6ImFmdGVySGlkZVJvd3MiLGFmdGVySW5pdDoiYWZ0ZXJJbml0IixhZnRlckxhbmd1YWdlQ2hhbmdlOiJhZnRlckxhbmd1YWdlQ2hhbmdlIixhZnRlckxpc3RlbjoiYWZ0ZXJMaXN0ZW4iLGFmdGVyTG9hZERhdGE6ImFmdGVyTG9hZERhdGEiLGFmdGVyTWVyZ2VDZWxsczoiYWZ0ZXJNZXJn'@;
put 'ZUNlbGxzIixhZnRlck1vZGlmeVRyYW5zZm9ybUVuZDoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGFmdGVyTW9tZW50dW1TY3JvbGw6ImFmdGVyTW9tZW50dW1TY3JvbGwiLGFmdGVyTmFtZWRF'@;
put 'eHByZXNzaW9uQWRkZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZDoiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIixhZnRlck9uQ2VsbENvbnRleHRNZW51OiJhZnRlck9uQ2VsbENvbnRleHRNZW51IixhZnRlck9uQ2VsbENvcm5l'@;
put 'ckRibENsaWNrOiJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGFmdGVyT25DZWxsTW91c2VEb3duOiJhZnRlck9uQ2VsbE1vdXNlRG93biIsYWZ0ZXJPbkNlbGxNb3VzZU91dDoiYWZ0ZXJP'@;
put 'bkNlbGxNb3VzZU91dCIsYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6ImFmdGVyT25DZWxsTW91c2VPdmVyIixhZnRlck9uQ2VsbE1vdXNlVXA6ImFmdGVyT25DZWxsTW91c2VVcCIsYWZ0ZXJQYXN0ZToiYWZ0ZXJQYXN0ZSIsYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQ6ImFmdGVyUGx1Z2luc0luaXRp'@;
put 'YWxpemVkIixhZnRlclJlZG86ImFmdGVyUmVkbyIsYWZ0ZXJSZWRvU3RhY2tDaGFuZ2U6ImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixhZnRlclJlZnJlc2hEaW1lbnNpb25zOiJhZnRlclJlZnJlc2hEaW1lbnNpb25zIixhZnRlclJlbW92ZUNlbGxNZXRhOiJhZnRlclJlbW92ZUNlbGxNZXRhIixh'@;
put 'ZnRlclJlbW92ZUNvbDoiYWZ0ZXJSZW1vdmVDb2wiLGFmdGVyUmVtb3ZlUm93OiJhZnRlclJlbW92ZVJvdyIsYWZ0ZXJSZW5kZXI6ImFmdGVyUmVuZGVyIixhZnRlclJlbmRlcmVyOiJhZnRlclJlbmRlcmVyIixhZnRlclJvd01vdmU6ImFmdGVyUm93TW92ZSIsYWZ0ZXJSb3dSZXNpemU6ImFm'@;
put 'dGVyUm93UmVzaXplIixhZnRlclJvd1NlcXVlbmNlQ2hhbmdlOiJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIixhZnRlclNjcm9sbEhvcml6b250YWxseToiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLGFmdGVyU2Nyb2xsVmVydGljYWxseToiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixhZnRlclNl'@;
put 'bGVjdGlvbjoiYWZ0ZXJTZWxlY3Rpb24iLGFmdGVyU2VsZWN0aW9uQnlQcm9wOiJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsYWZ0ZXJTZWxlY3Rpb25FbmQ6ImFmdGVyU2VsZWN0aW9uRW5kIixhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGFmdGVyU2V0'@;
put 'Q2VsbE1ldGE6ImFmdGVyU2V0Q2VsbE1ldGEiLGFmdGVyU2V0RGF0YUF0Q2VsbDoiYWZ0ZXJTZXREYXRhQXRDZWxsIixhZnRlclNldERhdGFBdFJvd1Byb3A6ImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsOiJhZnRlclNldFNvdXJjZURhdGFBdENlbGwi'@;
put 'LGFmdGVyU2hlZXRBZGRlZDoiYWZ0ZXJTaGVldEFkZGVkIixhZnRlclNoZWV0UmVuYW1lZDoiYWZ0ZXJTaGVldFJlbmFtZWQiLGFmdGVyU2hlZXRSZW1vdmVkOiJhZnRlclNoZWV0UmVtb3ZlZCIsYWZ0ZXJUcmltUm93OiJhZnRlclRyaW1Sb3ciLGFmdGVyVW5kbzoiYWZ0ZXJVbmRvIixhZnRl'@;
put 'clVuZG9TdGFja0NoYW5nZToiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGFmdGVyVW5oaWRlQ29sdW1uczoiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhZnRlclVuaGlkZVJvd3M6ImFmdGVyVW5oaWRlUm93cyIsYWZ0ZXJVbmxpc3RlbjoiYWZ0ZXJVbmxpc3RlbiIsYWZ0ZXJVbm1lcmdlQ2VsbHM6ImFm'@;
put 'dGVyVW5tZXJnZUNlbGxzIixhZnRlclVudHJpbVJvdzoiYWZ0ZXJVbnRyaW1Sb3ciLGFmdGVyVXBkYXRlRGF0YToiYWZ0ZXJVcGRhdGVEYXRhIixhZnRlclVwZGF0ZVNldHRpbmdzOiJhZnRlclVwZGF0ZVNldHRpbmdzIixhZnRlclZhbGlkYXRlOiJhZnRlclZhbGlkYXRlIixhZnRlclZpZXdw'@;
put 'b3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdSZW5kZXI6ImFmdGVyVmll'@;
put 'd1JlbmRlciIsYmVmb3JlQWRkQ2hpbGQ6ImJlZm9yZUFkZENoaWxkIixiZWZvcmVBdXRvZmlsbDoiYmVmb3JlQXV0b2ZpbGwiLGJlZm9yZUNlbGxBbGlnbm1lbnQ6ImJlZm9yZUNlbGxBbGlnbm1lbnQiLGJlZm9yZUNoYW5nZToiYmVmb3JlQ2hhbmdlIixiZWZvcmVDaGFuZ2VSZW5kZXI6ImJl'@;
put 'Zm9yZUNoYW5nZVJlbmRlciIsYmVmb3JlQ29sdW1uQ29sbGFwc2U6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixiZWZvcmVDb2x1bW5FeHBhbmQ6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYmVmb3JlQ29sdW1uRnJlZXplOiJiZWZvcmVDb2x1bW5GcmVlemUiLGJlZm9yZUNvbHVtbk1vdmU6ImJlZm9y'@;
put 'ZUNvbHVtbk1vdmUiLGJlZm9yZUNvbHVtblJlc2l6ZToiYmVmb3JlQ29sdW1uUmVzaXplIixiZWZvcmVDb2x1bW5Tb3J0OiJiZWZvcmVDb2x1bW5Tb3J0IixiZWZvcmVDb2x1bW5VbmZyZWV6ZToiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM6ImJlZm9y'@;
put 'ZUNvbnRleHRNZW51U2V0SXRlbXMiLGJlZm9yZUNvbnRleHRNZW51U2hvdzoiYmVmb3JlQ29udGV4dE1lbnVTaG93IixiZWZvcmVDb3B5OiJiZWZvcmVDb3B5IixiZWZvcmVDcmVhdGVDb2w6ImJlZm9yZUNyZWF0ZUNvbCIsYmVmb3JlQ3JlYXRlUm93OiJiZWZvcmVDcmVhdGVSb3ciLGJlZm9y'@;
put 'ZUN1dDoiYmVmb3JlQ3V0IixiZWZvcmVEZXRhY2hDaGlsZDoiYmVmb3JlRGV0YWNoQ2hpbGQiLGJlZm9yZURyYXdCb3JkZXJzOiJiZWZvcmVEcmF3Qm9yZGVycyIsYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXM6ImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixiZWZvcmVEcm9wZG93bk1l'@;
put 'bnVTaG93OiJiZWZvcmVEcm9wZG93bk1lbnVTaG93IixiZWZvcmVGaWx0ZXI6ImJlZm9yZUZpbHRlciIsYmVmb3JlR2V0Q2VsbE1ldGE6ImJlZm9yZUdldENlbGxNZXRhIixiZWZvcmVIaWRlQ29sdW1uczoiYmVmb3JlSGlkZUNvbHVtbnMiLGJlZm9yZUhpZGVSb3dzOiJiZWZvcmVIaWRlUm93'@;
put 'cyIsYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixiZWZvcmVJbml0OiJiZWZvcmVJbml0IixiZWZvcmVJbml0V2Fsa29u'@;
put 'dGFibGU6ImJlZm9yZUluaXRXYWxrb250YWJsZSIsYmVmb3JlS2V5RG93bjoiYmVmb3JlS2V5RG93biIsYmVmb3JlTGFuZ3VhZ2VDaGFuZ2U6ImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixiZWZvcmVMb2FkRGF0YToiYmVmb3JlTG9hZERhdGEiLGJlZm9yZU1lcmdlQ2VsbHM6ImJlZm9yZU1lcmdl'@;
put 'Q2VsbHMiLGJlZm9yZU9uQ2VsbENvbnRleHRNZW51OiJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsYmVmb3JlT25DZWxsTW91c2VEb3duOiJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGJlZm9yZU9uQ2VsbE1vdXNlT3V0OiJiZWZvcmVPbkNlbGxNb3VzZU91dCIsYmVmb3JlT25DZWxsTW91c2VP'@;
put 'dmVyOiJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGJlZm9yZU9uQ2VsbE1vdXNlVXA6ImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGJlZm9yZVBhc3RlOiJiZWZvcmVQYXN0ZSIsYmVmb3JlUmVkbzoiYmVmb3JlUmVkbyIsYmVmb3JlUmVkb1N0YWNrQ2hhbmdlOiJiZWZvcmVSZWRvU3RhY2tDaGFuZ2Ui'@;
put 'LGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOiJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6ImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixiZWZvcmVSZW1vdmVDZWxsTWV0YToiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLGJlZm9yZVJlbW92ZUNv'@;
put 'bDoiYmVmb3JlUmVtb3ZlQ29sIixiZWZvcmVSZW1vdmVSb3c6ImJlZm9yZVJlbW92ZVJvdyIsYmVmb3JlUmVuZGVyOiJiZWZvcmVSZW5kZXIiLGJlZm9yZVJlbmRlcmVyOiJiZWZvcmVSZW5kZXJlciIsYmVmb3JlUm93TW92ZToiYmVmb3JlUm93TW92ZSIsYmVmb3JlUm93UmVzaXplOiJiZWZv'@;
put 'cmVSb3dSZXNpemUiLGJlZm9yZVNldENlbGxNZXRhOiJiZWZvcmVTZXRDZWxsTWV0YSIsYmVmb3JlU2V0UmFuZ2VFbmQ6ImJlZm9yZVNldFJhbmdlRW5kIixiZWZvcmVTZXRSYW5nZVN0YXJ0OiJiZWZvcmVTZXRSYW5nZVN0YXJ0IixiZWZvcmVTZXRSYW5nZVN0YXJ0T25seToiYmVmb3JlU2V0'@;
put 'UmFuZ2VTdGFydE9ubHkiLGJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDoiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixiZWZvcmVUb3VjaFNjcm9sbDoiYmVmb3JlVG91Y2hTY3JvbGwiLGJlZm9yZVRyaW1Sb3c6ImJlZm9yZVRyaW1Sb3ciLGJlZm9yZVVuZG86ImJlZm9yZVVuZG8i'@;
put 'LGJlZm9yZVVuZG9TdGFja0NoYW5nZToiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixiZWZvcmVVbmhpZGVDb2x1bW5zOiJiZWZvcmVVbmhpZGVDb2x1bW5zIixiZWZvcmVVbmhpZGVSb3dzOiJiZWZvcmVVbmhpZGVSb3dzIixiZWZvcmVVbm1lcmdlQ2VsbHM6ImJlZm9yZVVubWVyZ2VDZWxscyIs'@;
put 'YmVmb3JlVW50cmltUm93OiJiZWZvcmVVbnRyaW1Sb3ciLGJlZm9yZVVwZGF0ZURhdGE6ImJlZm9yZVVwZGF0ZURhdGEiLGJlZm9yZVZhbGlkYXRlOiJiZWZvcmVWYWxpZGF0ZSIsYmVmb3JlVmFsdWVSZW5kZXI6ImJlZm9yZVZhbHVlUmVuZGVyIixiZWZvcmVWaWV3UmVuZGVyOiJiZWZvcmVW'@;
put 'aWV3UmVuZGVyIixjb25zdHJ1Y3Q6ImNvbnN0cnVjdCIsaW5pdDoiaW5pdCIsbW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkOiJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLG1vZGlmeUF1dG9maWxsUmFuZ2U6Im1vZGlmeUF1dG9maWxsUmFuZ2UiLG1vZGlmeUNvbEhlYWRlcjoibW9kaWZ5Q29s'@;
put 'SGVhZGVyIixtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQ6Im1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsbW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWU6Im1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixtb2RpZnlDb2xXaWR0aDoibW9kaWZ5Q29sV2lkdGgiLG1vZGlmeUNvcHlhYmxlUmFuZ2U6Im1v'@;
put 'ZGlmeUNvcHlhYmxlUmFuZ2UiLG1vZGlmeURhdGE6Im1vZGlmeURhdGEiLG1vZGlmeUdldENlbGxDb29yZHM6Im1vZGlmeUdldENlbGxDb29yZHMiLG1vZGlmeVJvd0RhdGE6Im1vZGlmeVJvd0RhdGEiLG1vZGlmeVJvd0hlYWRlcjoibW9kaWZ5Um93SGVhZGVyIixtb2RpZnlSb3dIZWFkZXJX'@;
put 'aWR0aDoibW9kaWZ5Um93SGVhZGVyV2lkdGgiLG1vZGlmeVJvd0hlaWdodDoibW9kaWZ5Um93SGVpZ2h0Iixtb2RpZnlTb3VyY2VEYXRhOiJtb2RpZnlTb3VyY2VEYXRhIixtb2RpZnlUcmFuc2Zvcm1FbmQ6Im1vZGlmeVRyYW5zZm9ybUVuZCIsbW9kaWZ5VHJhbnNmb3JtU3RhcnQ6Im1vZGlm'@;
put 'eVRyYW5zZm9ybVN0YXJ0IixwZXJzaXN0ZW50U3RhdGVMb2FkOiJwZXJzaXN0ZW50U3RhdGVMb2FkIixwZXJzaXN0ZW50U3RhdGVSZXNldDoicGVyc2lzdGVudFN0YXRlUmVzZXQiLHBlcnNpc3RlbnRTdGF0ZVNhdmU6InBlcnNpc3RlbnRTdGF0ZVNhdmUifSxmZWF0dXJlczpbdGkoW0FnLEtu'@;
put 'ZV0pLHZhXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJpZCJdLFsiY29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJkaXYiLDAsMSksMiZhJiZSZSgiaWQiLGQuaG90SWQpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxfNz0oKCk9PntjbGFzcyBj'@;
put 'e3N0YXRpYyBmb3JSb290KCl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOltBZ119fX1yZXR1cm4gYy52ZXJzaW9uPSIxMy4xLjAiLGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSks'@;
put 'Y30pKCk7Y29uc3QgWG5lPSJoYW5kc29udGFibGVFZGl0b3IiO2NsYXNzIHFCIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJoYW5kc29udGFibGUifW9wZW4oKXtzdXBlci5vcGVuKCksdGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5kZXN0cm95KCksIm5v'@;
put 'bmUiPT09dGhpcy5odENvbnRhaW5lci5zdHlsZS5kaXNwbGF5JiYodGhpcy5odENvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSIiKSx0aGlzLmh0RWRpdG9yPW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlzLmh0Q29udGFpbmVyLHRoaXMuaHRPcHRpb25zKSx0aGlzLmh0RWRpdG9yLmluaXQo'@;
put 'KSx0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3Q/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKDAsMCk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKSxveSh0aGlzLlRFWFRBUkVBLDAsdGhpcy5URVhUQVJFQS52'@;
put 'YWx1ZS5sZW5ndGgpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1jbG9zZSgpe3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpfXBy'@;
put 'ZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pO2NvbnN0IFQ9dGhpcyxXPXtzdGFydFJvd3M6MCxzdGFydENvbHM6MCxtaW5Sb3dzOjAsbWluQ29sczowLGNsYXNzTmFtZToibGlzdGJveCIsY29weVBhc3RlOiExLGF1dG9Db2x1bW5TaXplOiExLGF1dG9Sb3dT'@;
put 'aXplOiExLHJlYWRPbmx5OiEwLGZpbGxIYW5kbGU6ITEsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYWZ0ZXJPbkNlbGxNb3VzZURvd24oaWUsZ2Upe2NvbnN0IHdlPXRoaXMuZ2V0U291cmNlRGF0YShnZS5yb3csZ2UuY29sKTt2b2lkIDAhPT13ZSYmVC5zZXRWYWx1ZSh3ZSksVC5p'@;
put 'bnN0YW5jZS5kZXN0cm95RWRpdG9yKCl9LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFibGUmJktsKFcsXy5oYW5kc29udGFibGUpLHRoaXMuaHRPcHRpb25zPVd9YmVnaW5F'@;
put 'ZGl0aW5nKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO2QmJiExPT09ZCgpfHxzdXBlci5iZWdpbkVkaXRpbmcobCxhKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQu'@;
put 'Y3JlYXRlRWxlbWVudCgiRElWIik7bC5jbGFzc05hbWU9ImhhbmRzb250YWJsZUVkaXRvciIsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQobCksdGhpcy5odENvbnRhaW5lcj1sLHRoaXMuYXNzaWduSG9va3MoKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtpZih0aGlzLmh0RWRpdG9y'@;
put 'JiZ0aGlzLmh0RWRpdG9yLmlzTGlzdGVuaW5nKCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRMYXN0KCkpe2NvbnN0IGg9dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpLmdldFZhbHVlKCk7dm9pZCAwIT09aCYmdGhpcy5zZXRW'@;
put 'YWx1ZShoKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSxkKX1hc3NpZ25Ib29rcygpe3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmRlc3Ryb3koKX0pfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5n'@;
put 'ZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO2NvbnN0IGg9KGYsXyk9Pntjb25zdCBUPXRoaXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2UoKTtpZih2b2lkIDAhPT1mJiYoZjwwfHxULmZsaXBwZWQmJmY+VC5jb3VudFJvd3Mo'@;
put 'KS0xP1QuZGVzZWxlY3RDZWxsKCk6VC5zZWxlY3RDZWxsKGYsMCksVC5nZXREYXRhKCkubGVuZ3RoKSlyZXR1cm4gXy5wcmV2ZW50RGVmYXVsdCgpLHYyKF8pLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuVEVYVEFSRUEuZm9jdXMoKSwhMX07YS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93'@;
put 'VXAiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpO2xldCBULFc7cmV0dXJuIV8uZ2V0U2VsZWN0ZWRMYXN0KCkmJl8uZmxpcHBlZD9UPV8uY291bnRSb3dzKCktMTpfLmdldFNlbGVjdGVkTGFzdCgpJiYoXy5mbGlwcGVkPyhXPV8uZ2V0U2VsZWN0'@;
put 'ZWRMYXN0KClbMF0sVD1NYXRoLm1heCgwLFctMSkpOihXPV8uZ2V0U2VsZWN0ZWRMYXN0KClbMF0sVD1XLTEpKSxoKFQsZil9LHByZXZlbnREZWZhdWx0OiExfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpO2xl'@;
put 'dCBULFc7aWYoXy5nZXRTZWxlY3RlZExhc3QoKXx8Xy5mbGlwcGVkKXtpZihfLmdldFNlbGVjdGVkTGFzdCgpKWlmKF8uZmxpcHBlZClUPV8uZ2V0U2VsZWN0ZWRMYXN0KClbMF0rMTtlbHNlIGlmKCFfLmZsaXBwZWQpe2NvbnN0IGllPV8uY291bnRSb3dzKCktMTtXPV8uZ2V0U2VsZWN0ZWRM'@;
put 'YXN0KClbMF0sVD1NYXRoLm1pbihpZSxXKzEpfX1lbHNlIFQ9MDtyZXR1cm4gaChULGYpfSxwcmV2ZW50RGVmYXVsdDohMX1dLHtncm91cDpYbmUscmVsYXRpdmVUb0dyb3VwOm1rLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9y'@;
put 'dGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFhuZSl9fWNvbnN0IEtCPW5ldyBXZWFrTWFwO2NsYXNzIFhCIGV4dGVuZHMgcUJ7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJhdXRv'@;
put 'Y29tcGxldGUifWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIGFJZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gbEllKGMpe3ZhciBsPWZ1bmN0aW9uIGNJZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt'@;
put 'aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci'@;
put 'PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfSh0aGlzLCJzb3J0QnlSZWxldmFuY2UiLGZ1bmN0aW9uKGEsZCxoKXtjb25zdCBmPVtdLF89W10sVD1hLmxlbmd0aDtsZXQgaWUsZ2Usd2UsRWUsVz1kLmxlbmd0aDtpZigwPT09VCl7Zm9yKHdlPTA7d2U8Vzt3ZSsrKV8ucHVzaCh3ZSk7cmV0dXJuIF99Zm9yKHdlPTA7d2U8Vzt3'@;
put 'ZSsrKXtpZihnZT11TihfbChkW3dlXSkpLGgpRWU9Z2UuaW5kZXhPZihhKTtlbHNle2NvbnN0IFplPXRoaXMuY2VsbFByb3BlcnRpZXMubG9jYWxlO0VlPWdlLnRvTG9jYWxlTG93ZXJDYXNlKFplKS5pbmRleE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoWmUpKX0tMSE9PUVlJiYoaWU9Z2UubGVu'@;
put 'Z3RoLUVlLVQsZi5wdXNoKHtiYXNlSW5kZXg6d2UsaW5kZXg6RWUsY2hhcnNMZWZ0OmllLHZhbHVlOmdlfSkpfWZvcihmLnNvcnQoKFplLG90KT0+e2lmKC0xPT09b3QuaW5kZXgpcmV0dXJuLTE7aWYoLTE9PT1aZS5pbmRleClyZXR1cm4gMTtpZihaZS5pbmRleDxvdC5pbmRleClyZXR1cm4t'@;
put 'MTtpZihvdC5pbmRleDxaZS5pbmRleClyZXR1cm4gMTtpZihaZS5pbmRleD09PW90LmluZGV4KXtpZihaZS5jaGFyc0xlZnQ8b3QuY2hhcnNMZWZ0KXJldHVybi0xO2lmKFplLmNoYXJzTGVmdD5vdC5jaGFyc0xlZnQpcmV0dXJuIDF9cmV0dXJuIDB9KSx3ZT0wLFc9Zi5sZW5ndGg7d2U8Vzt3'@;
put 'ZSsrKV8ucHVzaChmW3dlXS5iYXNlSW5kZXgpO3JldHVybiBffSksdGhpcy5xdWVyeT1udWxsLHRoaXMuc3RyaXBwZWRDaG9pY2VzPVtdLHRoaXMucmF3Q2hvaWNlcz1bXSxLQi5zZXQodGhpcyx7c2tpcE9uZTohMSxpc01hY09TOnRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRm'@;
put 'b3JtLmluZGV4T2YoIk1hYyIpPi0xfSl9Z2V0VmFsdWUoKXtjb25zdCBsPXRoaXMucmF3Q2hvaWNlcy5maW5kKGE9PnRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKGEpPT09dGhpcy5URVhUQVJFQS52YWx1ZSk7cmV0dXJuIEtpKGwpP2w6dGhpcy5URVhUQVJFQS52YWx1ZX1jcmVhdGVFbGVtZW50'@;
put 'cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCkscGkodGhpcy5odENvbnRhaW5lciwiYXV0b2NvbXBsZXRlRWRpdG9yIikscGkodGhpcy5odENvbnRhaW5lciwtMT09PXRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIk1hYyIpPyIiOiJodE1hY1Njcm9sbCIp'@;
put 'fW9wZW4oKXtjb25zdCBsPUtCLmdldCh0aGlzKTtzdXBlci5vcGVuKCk7Y29uc3QgYT10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCksZD12b2lkIDA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bnx8dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd247dGhpcy5zaG93'@;
put 'RWRpdGFibGVFbGVtZW50KCksdGhpcy5mb2N1cygpO2xldCBoPUljKCk7MD09PWgmJmwuaXNNYWNPUyYmKGgrPTE1KSx0aGlzLmFkZEhvb2soImJlZm9yZUtleURvd24iLGY9PnRoaXMub25CZWZvcmVLZXlEb3duKGYpKSxhLnVwZGF0ZVNldHRpbmdzKHtjb2xXaWR0aHM6ZD9bd2EodGhpcy5U'@;
put 'RVhUQVJFQSktMl06dm9pZCAwLHdpZHRoOmQ/d2EodGhpcy5URVhUQVJFQSkraDp2b2lkIDAscmVuZGVyZXI6KGYsXyxULFcsaWUsZ2Usd2UpPT57JHAoZixfLFQsVyxpZSxnZSx3ZSk7Y29uc3R7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTpFZSxhbGxvd0h0bWw6WmUsbG9jYWxlOm90fT10aGlz'@;
put 'LmNlbGxQcm9wZXJ0aWVzLGV0PXRoaXMucXVlcnk7bGV0IGt0LFN0LHl0PV9sKGdlKTt5dCYmIVplJiYoa3Q9ITA9PT1FZT95dC5pbmRleE9mKGV0KTp5dC50b0xvY2FsZUxvd2VyQ2FzZShvdCkuaW5kZXhPZihldC50b0xvY2FsZUxvd2VyQ2FzZShvdCkpLC0xIT09a3QmJihTdD15dC5zdWJz'@;
put 'dHIoa3QsZXQubGVuZ3RoKSx5dD15dC5yZXBsYWNlKFN0LGA8c3Ryb25nPiR7U3R9PC9zdHJvbmc+YCkpKSxfLmlubmVySFRNTD15dH0sYXV0b0NvbHVtblNpemU6ITB9KSxsLnNraXBPbmUmJihsLnNraXBPbmU9ITEpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5'@;
put 'Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0pfWNsb3NlKCl7dGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1kaXNjYXJkRWRpdG9yKGwpe3N1cGVyLmRpc2NhcmRFZGl0b3IobCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1xdWVyeUNob2lj'@;
put 'ZXMobCl7Y29uc3QgYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZTt0aGlzLnF1ZXJ5PWwsImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5jYWxsKHRoaXMuY2VsbFByb3BlcnRpZXMsbCxkPT57dGhpcy5yYXdDaG9pY2VzPWQsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVz'@;
put 'SWZOZWVkZWQoZCkpfSk6QXJyYXkuaXNBcnJheShhKT8odGhpcy5yYXdDaG9pY2VzPWEsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoYSkpKTp0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KFtdKX11cGRhdGVDaG9pY2VzTGlzdChsKXtjb25zdCBhPWhOKHRo'@;
put 'aXMuVEVYVEFSRUEpLGQ9Y3RlKHRoaXMuVEVYVEFSRUEpLGg9dGhpcy5jZWxsUHJvcGVydGllcy5zb3J0QnlSZWxldmFuY2UsZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcjtsZXQgXz1udWxsLFQ9bnVsbCxXPWw7aCYmKF89dGhpcy5zb3J0QnlSZWxldmFuY2UodGhpcy5zdHJpcFZhbHVl'@;
put 'SWZOZWVkZWQodGhpcy5nZXRWYWx1ZSgpKSxXLHRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSkpO2NvbnN0IGllPUFycmF5LmlzQXJyYXkoXyk/Xy5sZW5ndGg6MDtpZighMT09PWYpaWUmJihUPV9bMF0pO2Vsc2V7Y29uc3QgZ2U9W107Zm9yKGxldCB3ZT0wLEVl'@;
put 'PVcubGVuZ3RoO3dlPEVlJiYhKGgmJmllPD13ZSk7d2UrKylnZS5wdXNoKGllP1dbX1t3ZV1dOldbd2VdKTtUPTAsVz1nZX10aGlzLnN0cmlwcGVkQ2hvaWNlcz1XLHRoaXMuaHRFZGl0b3IubG9hZERhdGEoS2IoW1ddKSksdGhpcy51cGRhdGVEcm9wZG93bkhlaWdodCgpLHRoaXMuZmxpcERy'@;
put 'b3Bkb3duSWZOZWVkZWQoKSwhMD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShUKSx0aGlzLmhvdC5saXN0ZW4oKSxveSh0aGlzLlRFWFRBUkVBLGEsYT09PWQ/dm9pZCAwOmQpfWZsaXBEcm9wZG93bklmTmVlZGVkKCl7Y29u'@;
put 'c3QgbD12Zyh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRBQkxFKSxhPWw9PT10aGlzLmhvdC5yb290V2luZG93LGQ9dGhpcy5jZWxsUHJvcGVydGllcy5wcmV2ZW50T3ZlcmZsb3c7aWYoYXx8IWEmJihkfHwiaG9yaXpvbnRhbCI9PT1kKSlyZXR1cm4hMTtjb25zdCBoPXFsKHRoaXMuVEVY'@;
put 'VEFSRUEpLGY9YWwodGhpcy5URVhUQVJFQSksXz10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCksVD1sLnNjcm9sbFRvcCxXPWFsKHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQpLGllPXFsKGwpLGdlPWgudG9wLWllLnRvcC1XK1Qsd2U9bC5zY3JvbGxIZWlnaHQtZ2UtVy1mLEVlPV8+'@;
put 'd2UmJmdlPndlO3JldHVybiBFZT90aGlzLmZsaXBEcm9wZG93bihfKTp0aGlzLnVuZmxpcERyb3Bkb3duKCksdGhpcy5saW1pdERyb3Bkb3duSWZOZWVkZWQoRWU/Z2U6d2UsXyksRWV9bGltaXREcm9wZG93bklmTmVlZGVkKGwsYSl7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPTAsXz1udWxsO2Rv'@;
put 'e2Y9dGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQoaCl8fHRoaXMuaHRFZGl0b3Iudmlldy5fd3QuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpLGQrPWYsaCs9MX13aGlsZShkPGwpO189ZC1mLHRoaXMuaHRFZGl0b3IuZmxpcHBlZCYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQu'@;
put 'c3R5bGUudG9wPXBhcnNlSW50KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wLDEwKSthLV8rInB4IiksdGhpcy5zZXREcm9wZG93bkhlaWdodChkLWYpfX1mbGlwRHJvcGRvd24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2EucG9zaXRpb249'@;
put 'ImFic29sdXRlIixhLnRvcD0tbCsicHgiLHRoaXMuaHRFZGl0b3IuZmxpcHBlZD0hMH11bmZsaXBEcm9wZG93bigpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC50b3A9IiIsdGhpcy5odEVkaXRvci5mbGlwcGVkPXZvaWQg'@;
put 'MH11cGRhdGVEcm9wZG93bkhlaWdodCgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKStJYyh0aGlzLmhvdC5yb290RG9jdW1lbnQpKzIsYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bjt0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhp'@;
put 'cy5nZXREcm9wZG93bkhlaWdodCgpLHdpZHRoOmE/dm9pZCAwOmx9KSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfXNldERyb3Bkb3duSGVpZ2h0KGwpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2hlaWdo'@;
put 'dDpsfSl9aGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKGwpeyJudW1iZXIiPT10eXBlb2YgbD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwobCwwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCExKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpfWdldERyb3Bkb3duSGVpZ2h0KCl7Y29uc3Qg'@;
put 'bD10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCkuZ2V0Um93SGVpZ2h0KDApfHwyMyxhPXRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3M7cmV0dXJuIHRoaXMuc3RyaXBwZWRDaG9pY2VzLmxlbmd0aD49YT9hKmw6dGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoKmwrOH1zdHJpcFZh'@;
put 'bHVlSWZOZWVkZWQobCl7cmV0dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbbF0pWzBdfXN0cmlwVmFsdWVzSWZOZWVkZWQobCl7Y29uc3R7YWxsb3dIdG1sOmF9PXRoaXMuY2VsbFByb3BlcnRpZXMsZD1jcyhsLGY9Pl9sKGYpKTtyZXR1cm4gY3MoZCxmPT5hP2Y6dU4oZikpfWFsbG93'@;
put 'S2V5RXZlbnRQcm9wYWdhdGlvbihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkX3Jvdz1hP2EuZnJvbS5yb3c6LTE7bGV0IGg9ITE7cmV0dXJuIGw9PT1jby5BUlJPV19ET1dOJiZkX3Jvdz4wJiZkX3Jvdzx0aGlzLmh0RWRpdG9yLmNvdW50Um93cygp'@;
put 'LTEmJihoPSEwKSxsPT09Y28uQVJST1dfVVAmJmRfcm93Pi0xJiYoaD0hMCksaH1vbkJlZm9yZUtleURvd24obCl7Y29uc3QgYT1LQi5nZXQodGhpcyk7aWYoYS5za2lwT25lPSExLFN0ZShsLmtleUNvZGUpfHxsLmtleUNvZGU9PT1jby5CQUNLU1BBQ0V8fGwua2V5Q29kZT09PWNvLkRFTEVU'@;
put 'RXx8bC5rZXlDb2RlPT09Y28uSU5TRVJUKXtsZXQgZD0xMDtpZihsLmtleUNvZGU9PT1jby5DJiYobC5jdHJsS2V5fHxsLm1ldGFLZXkpKXJldHVybjt0aGlzLmlzT3BlbmVkKCl8fChkKz0xMCksdGhpcy5odEVkaXRvciYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVl'@;
put 'cnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpLGEuc2tpcE9uZT0hMH0sZCl9fX1jbGFzcyBKbmUgZXh0ZW5kcyB2N3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImNoZWNrYm94In1iZWdpbkVkaXRpbmcobCxhKXtpZihhJiYibW91c2V1cCI9PT1hLnR5cGUpe2NvbnN0IGQ9'@;
put 'dGhpcy5URC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyk7Qm8oZCwiaHRCYWRWYWx1ZSIpfHxkLmNsaWNrKCl9fWZpbmlzaEVkaXRpbmcoKXt9aW5pdCgpe31vcGVuKCl7fWNsb3NlKCl7fWdldFZhbHVlKCl7fXNldFZhbHVlKCl7fWZvY3VzKCl7fX12YXIgUW5lPUYo'@;
put 'MTc0ODApO2NvbnN0IGVyZT0iZGF0ZSIsdHJlPSJkYXRlRWRpdG9yIjtjbGFzcyBucmUgZXh0ZW5kcyBrZ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIGVyZX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmRlZmF1bHREYXRlRm9ybWF0PSJERC9NTS9ZWVlZIix0aGlzLmlz'@;
put 'Q2VsbEVkaXRlZD0hMSx0aGlzLnBhcmVudERlc3Ryb3llZD0hMSx0aGlzLiRkYXRlUGlja2VyPW51bGx9aW5pdCgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLbyl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGluY2x1ZGUgbW9tZW50LmpzIHRvIHlvdXIgcHJvamVjdC4iKTtpZigiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgUW5lKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gaW5jbHVkZSBQaWthZGF5IHRvIHlvdXIgcHJvamVjdC4iKTtzdXBlci5pbml0KCksdGhpcy5pbnN0YW5jZS5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWQ9ITAsdGhp'@;
put 'cy5kZXN0cm95RWxlbWVudHMoKX0pfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmRhdGVQaWNrZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZGF0ZVBpY2tlclN0eWxlPXRoaXMuZGF0ZVBpY2tlci5zdHlsZSx0'@;
put 'aGlzLmRhdGVQaWNrZXJTdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS56SW5kZXg9OTk5OSx0aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRo'@;
put 'aXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIpLHBpKHRoaXMuZGF0ZVBpY2tlciwiaHREYXRlcGlja2VySG9sZGVyIiksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kYXRlUGlja2VyKSxuZXcgbGwodGhpcykuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRhdGVQ'@;
put 'aWNrZXIsIm1vdXNlZG93biIsYT0+YS5zdG9wUHJvcGFnYXRpb24oKSl9ZGVzdHJveUVsZW1lbnRzKCl7Y29uc3QgbD10aGlzLmRhdGVQaWNrZXIucGFyZW50Tm9kZTt0aGlzLiRkYXRlUGlja2VyJiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuZGF0'@;
put 'ZVBpY2tlcil9cHJlcGFyZShsLGEsZCxoLGYsXyl7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsXyl9b3Blbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2Vy'@;
put 'KCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIub3BlbigpLHRoaXMuc2hvd0RhdGVwaWNrZXIobCksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazpoPT57aC5zdG9wUHJvcGFnYXRpb24oKX0sZ3JvdXA6dHJlfSl9Y2xvc2UoKXt2YXIgbDt0aGlzLl9vcGVuZWQ9'@;
put 'ITEsbnVsbCE9PShsPXRoaXMuJGRhdGVQaWNrZXIpJiZ2b2lkIDAhPT1sJiZsLmRlc3Ryb3kmJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLHRoaXMuaW5zdGFuY2UuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaW5zdGFuY2UuX3JlZnJlc2hCb3JkZXJzKCl9KSx0aGlzLmhvdC5nZXRT'@;
put 'aG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHRyZSksc3VwZXIuY2xvc2UoKX1maW5pc2hFZGl0aW5nKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYobCl7Y29uc3QgZD10aGlzLm9yaWdpbmFsVmFsdWU7dm9pZCAwIT09ZCYmdGhpcy5zZXRWYWx1ZShkKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSl9c2hvd0RhdGVwaWNrZXIobCl7Y29uc3QgYT10'@;
put 'aGlzLlRELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dGhpcy5jZWxsUHJvcGVydGllcy5kYXRlRm9ybWF0fHx0aGlzLmRlZmF1bHREYXRlRm9ybWF0LGg9dGhpcy5pbnN0YW5jZS52aWV3LmlzTW91c2VEb3duKCksZj0hIWwmJkNOKGwua2V5Q29kZSk7bGV0IF87dGhpcy5kYXRlUGlja2Vy'@;
put 'LnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLiRkYXRlUGlja2VyPW5ldyBRbmUodGhpcy5nZXREYXRlUGlja2VyQ29uZmlnKCkpLHRoaXMuJGRhdGVQaWNrZXIuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe30sdGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPWAke3RoaXMuaG90LnJvb3RXaW5k'@;
put 'b3cucGFnZVlPZmZzZXQrYS50b3ArYWwodGhpcy5URCl9cHhgO2xldCBUPXRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXQ7VD10aGlzLmhvdC5pc1J0bCgpP2EucmlnaHQtd2EodGhpcy5kYXRlUGlja2VyKTphLmxlZnQsdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdD1gJHtUfXB4YCx0'@;
put 'aGlzLm9yaWdpbmFsVmFsdWU/KF89dGhpcy5vcmlnaW5hbFZhbHVlLEtvKF8sZCwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChLbyhfLGQpLCEwKSx0aGlzLmdldFZhbHVlKCkhPT10aGlzLm9yaWdpbmFsVmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy5vcmlnaW5h'@;
put 'bFZhbHVlKSwhZiYmIWgmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlPyhfPXRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGUsS28oXyxkLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KEtvKF8sZCksITApLCFm'@;
put 'JiYhaCYmdGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuJGRhdGVQaWNrZXIuZ290b1RvZGF5KCl9aGlkZURhdGVwaWNrZXIoKXt0aGlzLmRhdGVQaWNrZXJTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRkYXRlUGlja2VyLmhpZGUoKX1nZXREYXRlUGlja2VyQ29uZmlnKCl7Y29uc3QgbD10aGlz'@;
put 'LlRFWFRBUkVBLGE9e307dGhpcy5jZWxsUHJvcGVydGllcyYmdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnJiZseShhLHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyk7Y29uc3QgZD1hLm9uU2VsZWN0LGg9YS5vbkNsb3NlO3JldHVybiBhLmZpZWxkPWws'@;
put 'YS50cmlnZ2VyPWwsYS5jb250YWluZXI9dGhpcy5kYXRlUGlja2VyLGEuYm91bmQ9ITEsYS5mb3JtYXQ9YS5mb3JtYXR8fHRoaXMuZGVmYXVsdERhdGVGb3JtYXQsYS5yZXBvc2l0aW9uPWEucmVwb3NpdGlvbnx8ITEsYS5pc1JUTD0hMSxhLm9uU2VsZWN0PWY9PntsZXQgXz1mO2lzTmFOKF8u'@;
put 'Z2V0VGltZSgpKXx8KF89S28oXykuZm9ybWF0KHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdHx8dGhpcy5kZWZhdWx0RGF0ZUZvcm1hdCkpLHRoaXMuc2V0VmFsdWUoXyksdGhpcy5oaWRlRGF0ZXBpY2tlcigpLGQmJmQoKX0sYS5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0cm95'@;
put 'ZWR8fHRoaXMuZmluaXNoRWRpdGluZyghMSksaCYmaCgpfSxhfX1jbGFzcyBKQiBleHRlbmRzIFhCe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iZHJvcGRvd24ifXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pLHRoaXMuY2VsbFByb3BlcnRp'@;
put 'ZXMuZmlsdGVyPSExLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0PSEwfX1zby5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbihjLGwsYSl7Y29uc3QgZD10aGlzLmdldENlbGxNZXRhKGwsdGhpcy5wcm9wVG9Db2woYSkpO2QuZWRpdG9yPT09SkImJnZvaWQg'@;
put 'MD09PWQuc3RyaWN0JiYoZC5maWx0ZXI9ITEsZC5zdHJpY3Q9ITApfSk7Y2xhc3MgcnJlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJudW1lcmljIn19Y2xhc3MgaXJlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJwYXNzd29y'@;
put 'ZCJ9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuVEVYVEFSRUE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVYVEFSRUEuc2V0'@;
put 'QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lPSJoYW5kc29udGFibGVJbnB1dCIsdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdo'@;
put 'dD0wLGcyKHRoaXMuVEVYVEFSRUFfUEFSRU5UKSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKX19Y29uc3QgUUI9Imh0X2VkaXRvcl92aXNpYmxlIixvcmU9InNlbGVjdEVkaXRvciI7Y2xhc3MgbUllIGV4dGVuZHMgdjd7c3RhdGljIGdldCBFRElUT1Jf'@;
put 'VFlQRSgpe3JldHVybiJzZWxlY3QifWluaXQoKXt0aGlzLnNlbGVjdD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIikscGkodGhpcy5zZWxlY3QsImh0U2VsZWN0RWRpdG9yIiksdGhpcy5zZWxlY3Quc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ob3Qucm9v'@;
put 'dEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuc2VsZWN0LnZhbHVlPWx9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0aGlzLnJlZnJlc2hEaW1lbnNp'@;
put 'b25zKCksdGhpcy5zZWxlY3Quc3R5bGUuZGlzcGxheT0iIix0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMuc2VsZWN0LnN0eWxlLmRp'@;
put 'c3BsYXk9Im5vbmUiLEJvKHRoaXMuc2VsZWN0LFFCKSYmV28odGhpcy5zZWxlY3QsUUIpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJIb29rcygpfWZvY3VzKCl7dGhpcy5zZWxlY3QuZm9jdXMoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRIb29rKCJhZnRlclNjcm9s'@;
put 'bEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1l'@;
put 'bnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpfXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pO2NvbnN0IFQ9dGhpcy5jZWxsUHJvcGVydGllcy5zZWxlY3RPcHRpb25zO2xldCBX'@;
put 'O1c9dGhpcy5wcmVwYXJlT3B0aW9ucygiZnVuY3Rpb24iPT10eXBlb2YgVD9UKHRoaXMucm93LHRoaXMuY29sLHRoaXMucHJvcCk6VCksZzIodGhpcy5zZWxlY3QpLGRzKFcsKGllLGdlKT0+e2NvbnN0IHdlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTt3'@;
put 'ZS52YWx1ZT1nZSxnZyh3ZSxpZSksdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQod2UpfSl9cHJlcGFyZU9wdGlvbnMobCl7bGV0IGE9e307aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGQ9MCxoPWwubGVuZ3RoO2Q8aDtkKyspYVtsW2RdXT1sW2RdO2Vsc2Uib2JqZWN0Ij09dHlwZW9mIGwm'@;
put 'JihhPWwpO3JldHVybiBhfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLnJvdyx0aGlzLnByb3ApO3RoaXMub3JpZ2luYWxWYWx1ZT1sLHRoaXMuc2V0VmFsdWUobCksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNp'@;
put 'b25zKCl7aWYodGhpcy5zdGF0ZSE9PVljLkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZSgpO2NvbnN0e3RvcDpsLHN0YXJ0OmEsd2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVj'@;
put 'dCgpLGY9dGhpcy5zZWxlY3Quc3R5bGU7Zi5oZWlnaHQ9YCR7aH1weGAsZi53aWR0aD1gJHtkfXB4YCxmLnRvcD1gJHtsfXB4YCxmW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2F9cHhgLGYubWFyZ2luPSIwcHgiLHBpKHRoaXMuc2VsZWN0LFFCKX1yZWdpc3RlclNob3J0'@;
put 'Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZD17Z3JvdXA6b3JlfTshMSE9PXRoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpJiZhLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0'@;
put 'IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleC0xO2g+PTAmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgrMTtoPD10aGlzLnNlbGVjdC5sZW5ndGgtMSYm'@;
put 'KHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19XSxkKX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChvcmUpfX1jbGFzcyBzcmUgZXh0ZW5kcyBrZ3tzdGF0aWMg'@;
put 'Z2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRpbWUifXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pLHRoaXMuVEVYVEFSRUEuZGlyPSJsdHIifX1mdW5jdGlvbiBlaihjLGwsYSxkLGgsZixfKXtNeS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksZ2co'@;
put 'bCxmPz8iIiwhMSl9ZnVuY3Rpb24gYjcoYyxsLGEsZCxoLGYsXyl7Y29uc3R7cm9vdERvY3VtZW50OlR9PWMsVz1fLmFsbG93SHRtbD9lajokcCxpZT1ULmNyZWF0ZUVsZW1lbnQoIkRJViIpO2lmKGllLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIsaWUuYXBwZW5kQ2hpbGQoVC5j'@;
put 'cmVhdGVUZXh0Tm9kZShTdHJpbmcuZnJvbUNoYXJDb2RlKDk2NjApKSksVy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksbC5maXJzdENoaWxkfHxsLmFwcGVuZENoaWxkKFQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKSksbC5pbnNlcnRCZWZvcmUoaWUsbC5m'@;
put 'aXJzdENoaWxkKSxwaShsLCJodEF1dG9jb21wbGV0ZSIpLCFjLmFjQXJyb3dMaXN0ZW5lcil7Y29uc3QgZ2U9bmV3IGxsKGMpO2MuYWNBcnJvd0xpc3RlbmVyPWZ1bmN0aW9uKHdlKXtCbyh3ZS50YXJnZXQsImh0QXV0b2NvbXBsZXRlQXJyb3ciKSYmYy52aWV3Ll93dC5nZXRTZXR0aW5nKCJv'@;
put 'bkNlbGxEYmxDbGljayIsbnVsbCxjLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksbCl9LGdlLmFkZEV2ZW50TGlzdGVuZXIoYy5yb290RWxlbWVudCwibW91c2Vkb3duIixjLmFjQXJyb3dMaXN0ZW5lciksYy5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+e2dlLmRlc3Ryb3koKX0pfX1l'@;
put 'ai5SRU5ERVJFUl9UWVBFPSJodG1sIixiNy5SRU5ERVJFUl9UWVBFPSJhdXRvY29tcGxldGUiO2NvbnN0IGFyZT1uZXcgV2Vha01hcCxscmU9bmV3IFdlYWtNYXAsd0llPSJodEJhZFZhbHVlIix5Nz0iZGF0YS1yb3ciLHc3PSJkYXRhLWNvbCIsQ0llPSJjaGVja2JveFJlbmRlcmVyIjtmdW5j'@;
put 'dGlvbiB0aihjLGwsYSxkLGgsZixfKXtjb25zdHtyb290RG9jdW1lbnQ6VH09YztNeS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksZnVuY3Rpb24gU0llKGMpe2xldCBsPWxyZS5nZXQoYyk7aWYoIWwpe2NvbnN0e3Jvb3RFbGVtZW50OmF9PWM7bD1uZXcgbGwoYyksbC5hZGRFdmVudExp'@;
put 'c3RlbmVyKGEsImNsaWNrIixkPT5mdW5jdGlvbiBrSWUoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztpZighbmooYSl8fCFhLmhhc0F0dHJpYnV0ZSh5Nyl8fCFhLmhhc0F0dHJpYnV0ZSh3NykpcmV0dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoeTcpLDEwKSxoPXBhcnNlSW50'@;
put 'KGEuZ2V0QXR0cmlidXRlKHc3KSwxMCk7bC5nZXRDZWxsTWV0YShkLGgpLnJlYWRPbmx5JiZjLnByZXZlbnREZWZhdWx0KCl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIixkPT5mdW5jdGlvbiBFSWUoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztuaihhKSYmKCFhLmhhc0F0'@;
put 'dHJpYnV0ZSh5Nyl8fCFhLmhhc0F0dHJpYnV0ZSh3Nyl8fHNldFRpbWVvdXQobC5saXN0ZW4sMTApKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsImNoYW5nZSIsZD0+ZnVuY3Rpb24gQUllKGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIW5qKGEpfHwhYS5oYXNBdHRyaWJ1dGUoeTcp'@;
put 'fHwhYS5oYXNBdHRyaWJ1dGUodzcpKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKHk3KSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZSh3NyksMTApLGY9bC5nZXRDZWxsTWV0YShkLGgpO2lmKCFmLnJlYWRPbmx5KXtsZXQgXz1udWxsO189Yy50YXJnZXQuY2hl'@;
put 'Y2tlZD92b2lkIDA9PT1mLnVuY2hlY2tlZFRlbXBsYXRlfHxmLmNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAhPT1mLnVuY2hlY2tlZFRlbXBsYXRlJiZmLnVuY2hlY2tlZFRlbXBsYXRlLGwuc2V0RGF0YUF0Q2VsbChkLGgsXyl9fShkLGMpKSxscmUuc2V0KGMsbCl9fShjKTtsZXQgVz1mdW5jdGlv'@;
put 'biBNSWUoYyl7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGwuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJJbnB1dCIsbC50eXBlPSJjaGVja2JveCIsbC5zZXRBdHRyaWJ1dGUoImF1dG9jb21wbGV0ZSIsIm9mZiIpLGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRl'@;
put 'eCIsIi0xIiksbC5jbG9uZU5vZGUoITEpfShUKTtjb25zdCBpZT1fLmxhYmVsO2xldCBnZT0hMTtpZih0eXBlb2YgXy5jaGVja2VkVGVtcGxhdGU+InUiJiYoXy5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBfLnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKF8udW5jaGVja2VkVGVtcGxhdGU9'@;
put 'ITEpLGcyKGwpLGY9PT1fLmNoZWNrZWRUZW1wbGF0ZXx8X2woZikudG9Mb2NhbGVMb3dlckNhc2UoXy5sb2NhbGUpPT09X2woXy5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT9XLmNoZWNrZWQ9ITA6Zj09PV8udW5jaGVja2VkVGVtcGxhdGV8fF9sKGYpLnRv'@;
put 'TG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT09PV9sKF8udW5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT9XLmNoZWNrZWQ9ITE6cGMoZik/cGkoVywibm9WYWx1ZSIpOihXLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHBpKFcsd0llKSxnZT0hMCksVy5zZXRBdHRy'@;
put 'aWJ1dGUoeTcsYSksVy5zZXRBdHRyaWJ1dGUodzcsZCksIWdlJiZpZSl7bGV0IG90PSIiO2lmKGllLnZhbHVlKW90PSJmdW5jdGlvbiI9PXR5cGVvZiBpZS52YWx1ZT9pZS52YWx1ZS5jYWxsKHRoaXMsYSxkLGgsZik6aWUudmFsdWU7ZWxzZSBpZihpZS5wcm9wZXJ0eSl7Y29uc3QgeXQ9Yy5n'@;
put 'ZXREYXRhQXRSb3dQcm9wKGEsaWUucHJvcGVydHkpO290PW51bGwhPT15dD95dDoiIn1jb25zdCBldD1mdW5jdGlvbiB4SWUoYyxsLGEpe2NvbnN0IGQ9Yy5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO3JldHVybiBkLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVyTGFiZWwgIisoYT8iZnVs'@;
put 'bFdpZHRoIjoiIiksZC5hcHBlbmRDaGlsZChjLmNyZWF0ZVRleHROb2RlKGwpKSxkLmNsb25lTm9kZSghMCl9KFQsb3QsITAhPT1pZS5zZXBhcmF0ZWQpOyJiZWZvcmUiPT09aWUucG9zaXRpb24/aWUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKGV0KSxsLmFwcGVuZENoaWxkKFcpKTooZXQu'@;
put 'YXBwZW5kQ2hpbGQoVyksVz1ldCk6KCFpZS5wb3NpdGlvbnx8ImFmdGVyIj09PWllLnBvc2l0aW9uKSYmKGllLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChXKSxsLmFwcGVuZENoaWxkKGV0KSk6KGV0Lmluc2VydEJlZm9yZShXLGV0LmZpcnN0Q2hpbGQpLFc9ZXQpKX1mdW5jdGlvbiBFZSgp'@;
put 'e2xldCBvdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IGV0PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldC5sZW5ndGg7eXQrKyl7Y29uc3R7cm93Omt0LGNvbDpTdH09ZXRbeXRdLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCkse3JvdzpRdCxjb2w6cm59PWV0W3l0XS5nZXRCb3R0b21FbmRDb3JuZXIoKSx2bj1bXTtmb3IobGV0IE5uPWt0O05uPD1RdDtObis9MSlmb3IobGV0IGNyPVN0O2NyPD1ybjtjcis9MSl7Y29uc3QgRHI9Yy5nZXRDZWxsTWV0YShObixjcik7aWYoImNoZWNrYm94IiE9'@;
put 'PURyLnR5cGUpcmV0dXJuO2lmKCEwPT09RHIucmVhZE9ubHkpY29udGludWU7dHlwZW9mIERyLmNoZWNrZWRUZW1wbGF0ZT4idSImJihEci5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBEci51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihEci51bmNoZWNrZWRUZW1wbGF0ZT0hMSk7Y29uc3Qg'@;
put 'X2k9Yy5nZXREYXRhQXRDZWxsKE5uLGNyKTshMT09PW90P1tEci5jaGVja2VkVGVtcGxhdGUsRHIuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCldLmluY2x1ZGVzKF9pKT92bi5wdXNoKFtObixjcixEci51bmNoZWNrZWRUZW1wbGF0ZV0pOltEci51bmNoZWNrZWRUZW1wbGF0ZSxEci51bmNo'@;
put 'ZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpLG51bGwsdm9pZCAwXS5pbmNsdWRlcyhfaSkmJnZuLnB1c2goW05uLGNyLERyLmNoZWNrZWRUZW1wbGF0ZV0pOnZuLnB1c2goW05uLGNyLERyLnVuY2hlY2tlZFRlbXBsYXRlXSl9dm4ubGVuZ3RoPjAmJmMuc2V0RGF0YUF0Q2VsbCh2bil9fWZ1bmN0'@;
put 'aW9uIFplKCl7Y29uc3Qgb3Q9Yy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYob3Qpe2ZvcihsZXQgZXQ9MDtldDxvdC5sZW5ndGg7ZXQrKyl7Y29uc3QgeXQ9b3RbZXRdLmdldFRvcFN0YXJ0Q29ybmVyKCksa3Q9b3RbZXRdLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgU3Q9eXQucm93O1N0'@;
put 'PD1rdC5yb3c7U3QrKylmb3IobGV0IFF0PXl0LmNvbDtRdDw9a3QuY29sO1F0Kyspe2NvbnN0IHJuPWMuZ2V0Q2VsbE1ldGEoU3QsUXQpO2lmKCJjaGVja2JveCIhPT1ybi50eXBlKXJldHVybiExO2NvbnN0IHZuPWMuZ2V0Q2VsbChTdCxRdCk7aWYobnVsbD09dm4pcmV0dXJuITA7aWYodm4u'@;
put 'cXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKS5sZW5ndGg+MCYmIXJuLnJlYWRPbmx5KXJldHVybiEwfX1yZXR1cm4hMX19KCFpZXx8aWUmJiFpZS5zZXBhcmF0ZWQpJiZsLmFwcGVuZENoaWxkKFcpLGdlJiZsLmFwcGVuZENoaWxkKFQuY3JlYXRlVGV4dE5vZGUoIiNi'@;
put 'YWQtdmFsdWUjIikpLGFyZS5oYXMoYyl8fChhcmUuc2V0KGMsITApLGZ1bmN0aW9uIHdlKCl7Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJzcGFjZSJdXSxjYWxsYmFjazooKT0+KEVlKCksIVplKCkpfSx7a2V5czpbWyJl'@;
put 'bnRlciJdXSxjYWxsYmFjazooKT0+KEVlKCksIVplKCkpLHJ1bk9ubHlJZjooKT0+Yy5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZ30se2tleXM6W1siZGVsZXRlIl0sWyJiYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PihFZSghMCksIVplKCkpLHJlbGF0aXZlVG9Hcm91cDpjeSxw'@;
put 'b3NpdGlvbjoiYmVmb3JlIn1dLHtncm91cDpDSWV9KX0oKSl9ZnVuY3Rpb24gbmooYyl7cmV0dXJuIklOUFVUIj09PWMudGFnTmFtZSYmImNoZWNrYm94Ij09PWMuZ2V0QXR0cmlidXRlKCJ0eXBlIil9c28uZ2V0U2luZ2xldG9uKCkuYWRkKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLGZ1'@;
put 'bmN0aW9uKGMsbCxhKXtjb25zdHtsYWJlbDpkLHR5cGU6aCxyb3c6Zixjb2x1bW46Xyxwcm9wOlR9PWw7aWYoImNoZWNrYm94Ij09PWgpe2lmKGQpe2NvbnN0e3ZhbHVlOlcscHJvcGVydHk6aWV9PWQ7bGV0IGdlPWE7aWYoVylnZT0iZnVuY3Rpb24iPT10eXBlb2YgVz9XKGYsXyxULGEpOlc7'@;
put 'ZWxzZSBpZihpZSl7Y29uc3Qgd2U9dGhpcy5nZXREYXRhQXRSb3dQcm9wKGYsaWUpO2dlPW51bGwhPT13ZT93ZTphfWM9Z2V9cmV0dXJuIGN9fSksdGouUkVOREVSRVJfVFlQRT0iY2hlY2tib3giO3ZhciBxcD1GKDExMTcwKSxUSWU9Ri5uKHFwKTtmdW5jdGlvbiByaihjLGwsYSxkLGgsZixf'@;
put 'KXtsZXQgVD1mO2lmKEd1KFQpKXtjb25zdCBXPV8ubnVtZXJpY0Zvcm1hdCxpZT1XJiZXLmN1bHR1cmV8fCItIixnZT1XJiZXLnBhdHRlcm4sd2U9Xy5jbGFzc05hbWV8fCIiLEVlPXdlLmxlbmd0aD93ZS5zcGxpdCgiICIpOltdO2lmKHR5cGVvZiBpZTwidSImJiFxcC5sYW5ndWFnZXMoKVtp'@;
put 'ZV0pe2NvbnN0IFplPWllLnJlcGxhY2UoIi0iLCIiKSxvdD1xcC5hbGxMYW5ndWFnZXM/cXAuYWxsTGFuZ3VhZ2VzW2llXTpxcFtaZV07b3QmJnFwLnJlZ2lzdGVyTGFuZ3VhZ2Uob3QpfXFwLnNldExhbmd1YWdlKGllKSxUPXFwKFQpLmZvcm1hdChnZXx8IjAiKSxFZS5pbmRleE9mKCJodExl'@;
put 'ZnQiKTwwJiZFZS5pbmRleE9mKCJodENlbnRlciIpPDAmJkVlLmluZGV4T2YoImh0UmlnaHQiKTwwJiZFZS5pbmRleE9mKCJodEp1c3RpZnkiKTwwJiZFZS5wdXNoKCJodFJpZ2h0IiksRWUuaW5kZXhPZigiaHROdW1lcmljIik8MCYmRWUucHVzaCgiaHROdW1lcmljIiksXy5jbGFzc05hbWU9'@;
put 'RWUuam9pbigiICIpLGwuZGlyPSJsdHIifSRwKGMsbCxhLGQsaCxULF8pfWZ1bmN0aW9uIGlqKGMsbCxhLGQsaCxmLF8peyRwLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLF9dKTtjb25zdCBXPV8uaGFzaFN5bWJvbHx8IioiO2xldCBpZT0iIjt2bygoXy5oYXNoTGVuZ3RofHxsLmlubmVySFRN'@;
put 'TC5sZW5ndGgpLTEsKCk9PntpZSs9V30pLGdnKGwsaWUpfWZ1bmN0aW9uIG9qKGMsbCxhLGQsaCxmLF8peyRwLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLF9dKSxsLmRpcj0ibHRyIn1mdW5jdGlvbiBFeShjLGwpe2xldCBhPWM7bnVsbD09YSYmKGE9IiIpLHRoaXMuYWxsb3dFbXB0eSYmIiI9'@;
put 'PT1hP2woITApOnRoaXMuc3RyaWN0JiZ0aGlzLnNvdXJjZT8iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2UoYSx1cmUoYSxsKSk6dXJlKGEsbCkodGhpcy5zb3VyY2UpOmwoITApfWZ1bmN0aW9uIHVyZShjLGwpe2NvbnN0IGE9YztyZXR1cm4gZnVuY3Rpb24oZCl7'@;
put 'bGV0IGg9ITE7Zm9yKGxldCBmPTAsXz1kLmxlbmd0aDtmPF87ZisrKWlmKGE9PT1kW2ZdKXtoPSEwO2JyZWFrfWwoaCl9fWZ1bmN0aW9uIGRyZShjKXtjb25zdCBsPW5ldyBEYXRlKGMpO3JldHVybiBpc05hTihuZXcgRGF0ZShgJHtjfVQwMDowMGApLmdldERhdGUoKSk/bDpuZXcgRGF0ZShs'@;
put 'LmdldFRpbWUoKSs2ZTQqbC5nZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBZayhjLGwpe2NvbnN0IGE9QXRlKGVyZSx0aGlzLmluc3RhbmNlKTtsZXQgZD1jLGg9ITA7bnVsbD09ZCYmKGQ9IiIpO2xldCBmPUtvKGQsdGhpcy5kYXRlRm9ybWF0fHxhLmRlZmF1bHREYXRlRm9ybWF0LCEw'@;
put 'KS5pc1ZhbGlkKCksXz1LbyhuZXcgRGF0ZShkKSkuaXNWYWxpZCgpfHxmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1kJiYoXz0hMCxmPSEwKSxffHwoaD0hMSksIV8mJmYmJihoPSEwKSxfJiYhZilpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgVD1mdW5jdGlvbiBGSWUoYyxs'@;
put 'KXtjb25zdCBhPUtvKGRyZShjKSksZD1LbyhjLGwpLGg9Yy5zZWFyY2goL1tBLXpdL2cpPi0xO2xldCBmO3JldHVybiBmPWEuaXNWYWxpZCgpJiZhLmZvcm1hdCgieCIpPT09ZC5mb3JtYXQoIngiKXx8IWQuaXNWYWxpZCgpfHxoP2E6ZCxmLmZvcm1hdChsKX0oZCx0aGlzLmRhdGVGb3JtYXQp'@;
put 'LFc9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyh0aGlzLnJvdyksaWU9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbENvbHVtbih0aGlzLmNvbCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKFcsaWUsVCwiZGF0ZVZhbGlkYXRvciIpLGg9ITB9ZWxzZSBoPSExO2woaCl9ZnVuY3Rpb24gc2oo'@;
put 'YyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSxsKCEoIXRoaXMuYWxsb3dFbXB0eXx8IiIhPT1hKXx8IiIhPT1hJiZHdShjKSl9cmouUkVOREVSRVJfVFlQRT0ibnVtZXJpYyIsaWouUkVOREVSRVJfVFlQRT0icGFzc3dvcmQiLG9qLlJFTkRFUkVSX1RZUEU9InRpbWUiLEV5LlZBTElEQVRP'@;
put 'Ul9UWVBFPSJhdXRvY29tcGxldGUiLFlrLlZBTElEQVRPUl9UWVBFPSJkYXRlIixzai5WQUxJREFUT1JfVFlQRT0ibnVtZXJpYyI7Y29uc3QgTkllPVsiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaIiwiWCIsIngiXTtmdW5jdGlvbiBXayhjLGwpe2NvbnN0IGE9dGhpcy50aW1lRm9ybWF0fHwi'@;
put 'aDptbTpzcyBhIjtsZXQgZD0hMCxoPWM7bnVsbD09PWgmJihoPSIiKSxoPS9eXGR7Myx9JC8udGVzdChoKT9wYXJzZUludChoLDEwKTpoO2NvbnN0IGY9L15cZHsxLDJ9JC8udGVzdChoKTtmJiYoaCs9IjowMCIpO2NvbnN0IF89S28oaCxOSWUsITApLmlzVmFsaWQoKT9LbyhoKTpLbyhoLGEp'@;
put 'O2xldCBUPV8uaXNWYWxpZCgpLFc9S28oaCxhLCEwKS5pc1ZhbGlkKCkmJiFmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1oJiYoVD0hMCxXPSEwKSxUfHwoZD0hMSksIVQmJlcmJihkPSEwKSxUJiYhVylpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgaWU9Xy5mb3JtYXQoYSks'@;
put 'Z2U9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyh0aGlzLnJvdyksd2U9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbENvbHVtbih0aGlzLmNvbCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKGdlLHdlLGllLCJ0aW1lVmFsaWRhdG9yIiksZD0hMH1lbHNlIGQ9ITE7bChkKX1Xay5WQUxJREFU'@;
put 'T1JfVFlQRT0idGltZSI7Y29uc3QgakllPXtDRUxMX1RZUEU6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOlhCLHJlbmRlcmVyOmI3LHZhbGlkYXRvcjpFeX0sekllPXtDRUxMX1RZUEU6ImNoZWNrYm94IixlZGl0b3I6Sm5lLHJlbmRlcmVyOnRqfSxVSWU9e0NFTExfVFlQRToiZGF0ZSIsZWRpdG9y'@;
put 'Om5yZSxyZW5kZXJlcjpiNyx2YWxpZGF0b3I6WWt9LFpJZT17Q0VMTF9UWVBFOiJkcm9wZG93biIsZWRpdG9yOkpCLHJlbmRlcmVyOmI3LHZhbGlkYXRvcjpFeX0sWUllPXtDRUxMX1RZUEU6ImhhbmRzb250YWJsZSIsZWRpdG9yOnFCLHJlbmRlcmVyOmI3fSxXSWU9e0NFTExfVFlQRToibnVt'@;
put 'ZXJpYyIsZWRpdG9yOnJyZSxyZW5kZXJlcjpyaix2YWxpZGF0b3I6c2osZGF0YVR5cGU6Im51bWJlciJ9LEdJZT17Q0VMTF9UWVBFOiJwYXNzd29yZCIsZWRpdG9yOmlyZSxyZW5kZXJlcjppaixjb3B5YWJsZTohMX0sJEllPXtDRUxMX1RZUEU6InRpbWUiLGVkaXRvcjpzcmUscmVuZGVyZXI6'@;
put 'b2osdmFsaWRhdG9yOldrfTtjb25zdCBocmU9bmV3IE1hcChbWyJwbHVnaW4iLGZ1bmN0aW9uIGJrZShjKXtyZXR1cm4hIXV5KGMpfV0sWyJjZWxsLXR5cGUiLEZuZV0sWyJlZGl0b3IiLGt0ZV0sWyJyZW5kZXJlciIsRnRlXSxbInZhbGlkYXRvciIsSHRlXV0pLFRnPW5ldyBXZWFrTWFwLGFq'@;
put 'PVtdO2xldCBfaD1udWxsO3ZhciBmcmU9bmV3IFdlYWtTZXQ7Y2xhc3MgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImJhc2UifXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3RoaXMuUExVR0lOX0tFWV19Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIEtJZShjLGwp'@;
put 'eyhmdW5jdGlvbiBYSWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsZnJlKSxmaCh0aGlzLCJob3QiLGwse3dy'@;
put 'aXRhYmxlOiExfSksVGcuc2V0KHRoaXMse2hvb2tzOnt9fSksX2g9bnVsbCx0aGlzLnBsdWdpbk5hbWU9bnVsbCx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcz1bXSx0aGlzLmlzUGx1Z2luc1JlYWR5PSExLHRoaXMuZW5hYmxlZD0hMSx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMu'@;
put 'aG90LmFkZEhvb2soImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+dGhpcy5vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGE9PnRoaXMub25VcGRhdGVTZXR0aW5ncyhhKSksdGhpcy5ob3QuYWRkSG9vaygiYmVm'@;
put 'b3JlSW5pdCIsKCk9PnRoaXMuaW5pdCgpKX1pbml0KCl7dGhpcy5wbHVnaW5OYW1lPXRoaXMuaG90LmdldFBsdWdpbk5hbWUodGhpcyk7Y29uc3QgbD10aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9ERVBTLGE9QXJyYXkuaXNBcnJheShsKT9sOltdO2lmKGEubGVuZ3RoPjApe2NvbnN0IGg9W107'@;
put 'aWYoYS5mb3JFYWNoKGY9Pntjb25zdFtfLFRdPWYuc3BsaXQoIjoiKTtpZighaHJlLmhhcyhfKSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGx1Z2luIGRlcGVuZGVuY3kgdHlwZSAiJHtffSIgd2FzIGZvdW5kLmApO2hyZS5nZXQoXykoVCl8fGgucHVzaChgIC0gJHtUfSAoJHtffSlgKX0p'@;
put 'LGgubGVuZ3RoPjApe2NvbnN0IGY9W2BUaGUgJHt0aGlzLnBsdWdpbk5hbWV9IHBsdWdpbiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIG1vZHVsZXM6XG5gLGAke2guam9pbigiXG4iKX1cbmBdLmpvaW4oIiIpO2FqLnB1c2goZil9fWlmKF9ofHwoX2g9UE4oKSksX2guaW5kZXhPZigiVW5kb1Jl'@;
put 'ZG8iKT49MCYmX2guc3BsaWNlKF9oLmluZGV4T2YoIlVuZG9SZWRvIiksMSksX2guaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpPj0wJiZfaC5zcGxpY2UoX2guaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpLDEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIs'@;
put 'KCk9Pnt0aGlzLmlzRW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKX0pLDA9PT1faC5sZW5ndGgpe2lmKGFqLmxlbmd0aD4wKXtjb25zdCBoPVtgJHthai5qb2luKCJcbiIpfVxuYCwiWW91IGhhdmUgdG8gaW1wb3J0IGFuZCByZWdpc3RlciB0aGVtIG1hbnVh'@;
put 'bGx5LiJdLmpvaW4oIiIpO3Rocm93IG5ldyBFcnJvcihoKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiKX10aGlzLmluaXRpYWxpemVkPSEwfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZD0hMH1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ldmVudE1hbmFnZXIm'@;
put 'JnRoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCksdGhpcy5jbGVhckhvb2tzKCksdGhpcy5lbmFibGVkPSExfWFkZEhvb2sobCxhKXtUZy5nZXQodGhpcykuaG9va3NbbF09VGcuZ2V0KHRoaXMpLmhvb2tzW2xdfHxbXTtjb25zdCBkPVRnLmdldCh0aGlzKS5ob29rc1tsXTt0aGlzLmhvdC5hZGRI'@;
put 'b29rKGwsYSksZC5wdXNoKGEpLFRnLmdldCh0aGlzKS5ob29rc1tsXT1kfXJlbW92ZUhvb2tzKGwpe0RuKFRnLmdldCh0aGlzKS5ob29rc1tsXXx8W10sYT0+e3RoaXMuaG90LnJlbW92ZUhvb2sobCxhKX0pfWNsZWFySG9va3MoKXtjb25zdCBsPVRnLmdldCh0aGlzKS5ob29rcztkcyhsLChh'@;
put 'LGQpPT50aGlzLnJlbW92ZUhvb2tzKGQpKSxsLmxlbmd0aD0wfWNhbGxPblBsdWdpbnNSZWFkeShsKXt0aGlzLmlzUGx1Z2luc1JlYWR5P2woKTp0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5wdXNoKGwpfW9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKXtEbih0aGlzLnBsdWdp'@;
put 'bnNJbml0aWFsaXplZENhbGxiYWNrcyxsPT5sKCkpLHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLmxlbmd0aD0wLHRoaXMuaXNQbHVnaW5zUmVhZHk9ITB9b25VcGRhdGVTZXR0aW5ncyhsKXtjb25zdCBhPWZ1bmN0aW9uIEpJZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYX0odGhpcyxmcmUsZUxlKS5jYWxsKHRoaXMsbCk7dGhpcy5pc0VuYWJsZWQmJih0aGlzLmVuYWJsZWQmJiF0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmRpc2FibGVQbHVn'@;
put 'aW4oKSwhdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmYSYmdGhpcy51cGRhdGVQbHVnaW4obCkpfXVwZGF0ZVBsdWdpbigpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXImJnRoaXMu'@;
put 'ZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKSxkcyh0aGlzLChsLGEpPT57ImhvdCIhPT1hJiYodGhpc1thXT1udWxsKX0pLGRlbGV0ZSB0aGlzLnQsZGVsZXRlIHRoaXMuaG90fX1mdW5jdGlvbiBlTGUoYyl7aWYoIWMpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNvbnN0'@;
put 'cnVjdG9yLlNFVFRJTkdfS0VZUztpZigiYm9vbGVhbiI9PXR5cGVvZiBsKXJldHVybiBsO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWlmKHZvaWQgMCE9PWNbbFthXV0pcmV0dXJuITA7cmV0dXJuITF9Y29uc3QgbGo9Y2xhc3MgdExle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhp'@;
put 'cy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExLHRoaXMucm93cz1bXSx0aGlzLmNvbHVtbnM9W10sdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5zZXR0aW5ncz17dXNlSGVhZGVyczohMH19YWRkUm93KGwsYSl7aWYodGhpcy5jb2x1bW5zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRv'@;
put 'ZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMucm93cy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtyb3c6bH07dGhpcy5yb3dzLnB1c2goZCksdGhp'@;
put 'cy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLnRhYmxlLnRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlUm93'@;
put 'KGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWFkZENvbHVtbkhlYWRlcnNSb3cobCl7aWYobnVsbCE9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBkPXtyb3c6LTF9O3Ro'@;
put 'aXMucm93cy5wdXNoKGQpLHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSksdGhpcy5zYW1wbGVzPWwsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5j'@;
put 'b2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLmFwcGVuZENvbHVtbkhlYWRlcnNSb3coKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfX1hZGRD'@;
put 'b2x1bW4obCxhKXtpZih0aGlzLnJvd3MubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlIik7dGhpcy5jb2x1bW5zLmxlbmd0aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVt'@;
put 'ZW50LmNsYXNzTmFtZSkpO2NvbnN0IGQ9e2NvbDpsfTt0aGlzLmNvbHVtbnMucHVzaChkKSx0aGlzLnNhbXBsZXM9YSx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLmdldFNldHRpbmcoInVzZUhlYWRlcnMiKSYmbnVsbCE9PXRoaXMu'@;
put 'aG90LmdldENvbEhlYWRlcihsKSYmdGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIobCx0aGlzLnRhYmxlLnRoKSx0aGlzLnRhYmxlLnRCb2R5LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sKGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5m'@;
put 'cmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWdldEhlaWdodHMobCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLERuKHRoaXMucm93cyxhPT57bChhLnJvdyxhbChhLnRhYmxlKS0xKX0pfWdldFdpZHRocyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRh'@;
put 'YmxlKCksRG4odGhpcy5jb2x1bW5zLGE9Pntjb25zdHt3aWR0aDpkfT1hLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2woYS5jb2wsTWF0aC5jZWlsKGQpKX0pfXNldFNldHRpbmdzKGwpe3RoaXMuc2V0dGluZ3M9bH1zZXRTZXR0aW5nKGwsYSl7dGhpcy5zZXR0aW5nc3x8KHRoaXMu'@;
put 'c2V0dGluZ3M9e30pLHRoaXMuc2V0dGluZ3NbbF09YX1nZXRTZXR0aW5ncygpe3JldHVybiB0aGlzLnNldHRpbmdzfWdldFNldHRpbmcobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3M/dGhpcy5zZXR0aW5nc1tsXTpudWxsfWNyZWF0ZUNvbEdyb3Vwc0NvbCgpe2NvbnN0IGw9dGhpcy5ob3Qucm9v'@;
put 'dERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZsLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudCgtMSkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGE9PntEbihhLnN0cmluZ3MsZD0+e2wuYXBwZW5kQ2hpbGQo'@;
put 'dGhpcy5jcmVhdGVDb2xFbGVtZW50KGQuY29sKSl9KX0pLGx9Y3JlYXRlUm93KGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkm'@;
put 'Jih0aGlzLmhvdC52aWV3LmFwcGVuZFJvd0hlYWRlcihsLGgpLGQuYXBwZW5kQ2hpbGQoaCkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGY9PntEbihmLnN0cmluZ3MsXz0+e2NvbnN0IFQ9Xy5jb2wsVz10aGlzLmhvdC5nZXRDZWxsTWV0YShsLFQpO1cuY29sPVQsVy5yb3c9bDtjb25zdCBpZT10'@;
put 'aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoVyksZ2U9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpO2dlLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLGllKHRoaXMuaG90LGdlLGwsVCx0aGlzLmhvdC5jb2xUb1Byb3AoVCksXy52YWx1ZSxXKSxkLmFwcGVuZENoaWxkKGdlKX0pfSksZH1hcHBl'@;
put 'bmRDb2x1bW5IZWFkZXJzUm93KCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZD1bXTtpZih0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkpe2NvbnN0IGg9bC5jcmVhdGVFbGVtZW50KCJ0aCIpO2QucHVzaChbLTEsaF0pLGEuYXBw'@;
put 'ZW5kQ2hpbGQoaCl9dGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e0RuKGguc3RyaW5ncyxmPT57Y29uc3QgXz1mLmNvbCxUPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goW18sVF0pLGEuYXBwZW5kQ2hpbGQoVCl9KX0pLHRoaXMudGFibGUudEhlYWQuYXBwZW5kQ2hpbGQoYSksRG4oZCxo'@;
put 'PT57Y29uc3RbZixfXT1oO3RoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGYsXyl9KX1jcmVhdGVDb2wobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntEbihoLnN0'@;
put 'cmluZ3MsZj0+e2NvbnN0IF89Zi5yb3csVD10aGlzLmhvdC5nZXRDZWxsTWV0YShfLGwpO1QuY29sPWwsVC5yb3c9Xztjb25zdCBXPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihUKSxpZT1hLmNyZWF0ZUVsZW1lbnQoInRkIiksZ2U9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO2llLnNldEF0dHJp'@;
put 'YnV0ZSgiZ2hvc3QtdGFibGUiLDEpLFcodGhpcy5ob3QsaWUsXyxsLHRoaXMuaG90LmNvbFRvUHJvcChsKSxmLnZhbHVlLFQpLGdlLmFwcGVuZENoaWxkKGllKSxkLmFwcGVuZENoaWxkKGdlKX0pfSksZH1jbGVhbigpe3RoaXMucm93cy5sZW5ndGg9MCx0aGlzLnJvd3NbLTFdPXZvaWQgMCx0'@;
put 'aGlzLmNvbHVtbnMubGVuZ3RoPTAsdGhpcy5zYW1wbGVzJiZ0aGlzLnNhbXBsZXMuY2xlYXIoKSx0aGlzLnNhbXBsZXM9bnVsbCx0aGlzLnJlbW92ZVRhYmxlKCl9aW5qZWN0VGFibGUoKXt0aGlzLmluamVjdGVkfHwoKChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw'@;
put 'XT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMuaG90LnJvb3RFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lci5mcmFnbWVudCksdGhpcy5pbmplY3RlZD0hMCl9cmVtb3ZlVGFibGUoKXt0aGlzLmluamVjdGVkJiZ0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZSYm'@;
put 'KHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExKX1jcmVhdGVDb2xFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNy'@;
put 'ZWF0ZUVsZW1lbnQoImNvbCIpO3JldHVybiBhLnN0eWxlLndpZHRoPWAke3RoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCl9cHhgLGF9Y3JlYXRlVGFibGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9h'@;
put 'cmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksZj1hLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksXz1hLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksVD1hLmNyZWF0'@;
put 'ZUVsZW1lbnQoImNvbGdyb3VwIiksVz1hLmNyZWF0ZUVsZW1lbnQoInRyIiksaWU9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmlzVmVydGljYWwoKSYmaC5hcHBlbmRDaGlsZChUKSx0aGlzLmlzSG9yaXpvbnRhbCgpJiYoVy5hcHBlbmRDaGlsZChpZSksZi5hcHBlbmRDaGls'@;
put 'ZChXKSxoLnN0eWxlLnRhYmxlTGF5b3V0PSJhdXRvIixoLnN0eWxlLndpZHRoPSJhdXRvIiksaC5hcHBlbmRDaGlsZChmKSx0aGlzLmlzVmVydGljYWwoKSYmXy5hcHBlbmRDaGlsZChXKSxoLmFwcGVuZENoaWxkKF8pLHBpKGgsbCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCx0YWJs'@;
put 'ZTpoLHRIZWFkOmYsdEJvZHk6Xyxjb2xHcm91cDpULHRyOlcsdGg6aWV9fWNyZWF0ZUNvbnRhaW5lcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0'@;
put 'ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHBpKGgsYGh0R2hvc3RUYWJsZSBodEF1dG9TaXplICR7bC50cmltKCl9YCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCxjb250YWluZXI6aH19aXNWZXJ0aWNhbCgpe3JldHVybiEoIXRoaXMu'@;
put 'cm93cy5sZW5ndGh8fHRoaXMuY29sdW1ucy5sZW5ndGgpfWlzSG9yaXpvbnRhbCgpe3JldHVybiEoIXRoaXMuY29sdW1ucy5sZW5ndGh8fHRoaXMucm93cy5sZW5ndGgpfX07Y2xhc3MgY2p7c3RhdGljIGdldCBTQU1QTEVfQ09VTlQoKXtyZXR1cm4gM31jb25zdHJ1Y3RvcihsKXt0aGlzLnNh'@;
put 'bXBsZXM9bnVsbCx0aGlzLmRhdGFGYWN0b3J5PWwsdGhpcy5jdXN0b21TYW1wbGVDb3VudD1udWxsLHRoaXMuYWxsb3dEdXBsaWNhdGVzPSExfWdldFNhbXBsZUNvdW50KCl7cmV0dXJuIHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ/dGhpcy5jdXN0b21TYW1wbGVDb3VudDpjai5TQU1QTEVfQ09V'@;
put 'TlR9c2V0U2FtcGxlQ291bnQobCl7dGhpcy5jdXN0b21TYW1wbGVDb3VudD1sfXNldEFsbG93RHVwbGljYXRlcyhsKXt0aGlzLmFsbG93RHVwbGljYXRlcz1sfWdlbmVyYXRlUm93U2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygicm93IixhLGwpfWdlbmVyYXRlQ29s'@;
put 'dW1uU2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygiY29sIixhLGwpfWdlbmVyYXRlU2FtcGxlcyhsLGEsZCl7Y29uc3QgaD1uZXcgTWFwLHtmcm9tOmYsdG86X309Im51bWJlciI9PXR5cGVvZiBkP3tmcm9tOmQsdG86ZH06ZDtyZXR1cm4gdm8oZixfLFQ9Pntjb25z'@;
put 'dCBXPXRoaXMuZ2VuZXJhdGVTYW1wbGUobCxhLFQpO2guc2V0KFQsVyl9KSxofWdlbmVyYXRlU2FtcGxlKGwsYSxkKXtpZigicm93IiE9PWwmJiJjb2wiIT09bCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNhbXBsZSB0eXBlIik7Y29uc3QgaD1uZXcgTWFwLGY9InJvdyI9PT1sPyJj'@;
put 'b2wiOiJyb3ciLF89W107cmV0dXJuIHZvKGEuZnJvbSxhLnRvLFQ9Pntjb25zdHt2YWx1ZTpXLGJ1bmRsZVNlZWQ6aWV9PSJyb3ciPT09bD90aGlzLmRhdGFGYWN0b3J5KGQsVCk6dGhpcy5kYXRhRmFjdG9yeShULGQpLGdlPSJzdHJpbmciPT10eXBlb2YgaWUmJmllLmxlbmd0aD4wO2xldCB3'@;
put 'ZTt3ZT1nZT9pZTp1cyhXKT9gJHtPYmplY3Qua2V5cyhXKS5sZW5ndGh9YDpBcnJheS5pc0FycmF5KFcpP2Ake1cubGVuZ3RofWA6YCR7X2woVykubGVuZ3RofWAsaC5oYXMod2UpfHxoLnNldCh3ZSx7bmVlZGVkOnRoaXMuZ2V0U2FtcGxlQ291bnQoKSxzdHJpbmdzOltdfSk7Y29uc3QgRWU9'@;
put 'aC5nZXQod2UpO0VlLm5lZWRlZCYmKCEoXy5pbmRleE9mKFcpPi0xKXx8dGhpcy5hbGxvd0R1cGxpY2F0ZXN8fGdlKSYmKEVlLnN0cmluZ3MucHVzaCh7dmFsdWU6VyxbZl06VH0pLF8ucHVzaChXKSxFZS5uZWVkZWQtPTEpfSksaH19Y29uc3QgcHJlPWNqO3NvLmdldFNpbmdsZXRvbigpLnJl'@;
put 'Z2lzdGVyKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKTtjb25zdCBreT0iYXV0b0NvbHVtblNpemUiLHVqPW5ldyBXZWFrTWFwO2NsYXNzIEF5IGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGt5fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJu'@;
put 'IDEwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx1ai5zZXQodGhpcyx7Y2Fj'@;
put 'aGVkQ29sdW1uSGVhZGVyczpbXX0pLHRoaXMuZ2hvc3RUYWJsZT1uZXcgbGoodGhpcy5ob3QpLHRoaXMuc2FtcGxlc0dlbmVyYXRvcj1uZXcgcHJlKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGQpO2xldCBmPSIiO2guc3Bhbm5lZHx8KGY9dGhpcy5ob3QuZ2V0RGF0'@;
put 'YUF0Q2VsbChhLGQpKTtsZXQgXz0iIjtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIikmJihfPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLF8saCxmKSkse3ZhbHVlOmYsYnVuZGxlU2VlZDpffX0pLHRoaXMuZmly'@;
put 'c3RDYWxjdWxhdGlvbj0hMCx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5tZWFzdXJlZENvbHVtbnM9MCx0aGlzLmNvbHVtbldpZHRoc01hcD1uZXcgV3AsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Db2x1bW5TaXplIix0aGlzLmNvbHVtbldpZHRoc01hcCks'@;
put 'dGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChhLGQsaCk9PnRoaXMub25CZWZvcmVDb2x1bW5SZXNpemUoYSxkLGgpKX1pc0VuYWJsZWQoKXtyZXR1cm4hMSE9PXRoaXMuaG90LmdldFNldHRpbmdzKClba3ldJiYhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5jb2xXaWR0aHN9ZW5h'@;
put 'YmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtreV07YSYmbnVsbCE9YS51c2VIZWFkZXJzJiZ0aGlzLmdob3N0VGFibGUuc2V0U2V0dGluZygidXNlSGVhZGVycyIsYS51c2VIZWFkZXJzKSx0aGlzLnNl'@;
put 'dFNhbXBsaW5nT3B0aW9ucygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixkPT50aGlzLm9uQmVmb3JlQ2hhbmdlKGQpKSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGQ9PnRoaXMub25BZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlKGQpKSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGQ9PnRoaXMub25CZWZvcmVWaWV3UmVuZGVyKGQpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdp'@;
put 'ZHRoIiwoZCxoKT0+dGhpcy5nZXRDb2x1bW5XaWR0aChoLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7Y29uc3QgbD10aGlzLmZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFu'@;
put 'Z2VkKCk7bC5sZW5ndGgmJih0aGlzLmNsZWFyQ2FjaGUobCksdGhpcy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCkpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUi'@;
put 'LChsLGEsZCk9PnRoaXMub25CZWZvcmVDb2x1bW5SZXNpemUobCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCl7aWYoIXRoaXMuaG90LmNvdW50Um93cygpKXJldHVybjtjb25zdCBhPXRoaXMuaG90LnJlbmRlckNhbGwsZD10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigp'@;
put 'LGg9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpOy0xPT09ZHx8LTE9PT1ofHx0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTpkLHRvOmh9LHZvaWQgMCxhKX1jYWxjdWxhdGVDb2x1bW5zV2lkdGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGQ9YXJndW1lbnRzLmxlbmd0aD4y'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9OmwsZj0ibnVtYmVyIj09dHlwZW9mIGE/e2Zyb206YSx0bzphfTphO3ZvKGguZnJvbSxoLnRvLF89PntsZXQgVD10aGlzLmhvdC50b1BoeXNpY2FsQ29s'@;
put 'dW1uKF8pO251bGw9PT1UJiYoVD1fKSwoZHx8bnVsbD09PXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChUKSYmIXRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhUKSkmJkRuKHRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZUNvbHVtblNhbXBsZXMoXyxm'@;
put 'KSxpZT0+e2xldFtnZSx3ZV09aWU7cmV0dXJuIHRoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW4oZ2Usd2UpfSl9KSx0aGlzLmdob3N0VGFibGUuY29sdW1ucy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aHMoKF8sVCk9Pntjb25z'@;
put 'dCBXPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oXyk7dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KFcsVCl9KX0sITApLHRoaXMubWVhc3VyZWRDb2x1bW5zPWgudG8rMSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9Y2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl7bGV0'@;
put 'IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sYT0wO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCktMTtsZXQgaD1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCBm'@;
put 'PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBkeShoKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206YSx0bzpNYXRoLm1pbihhK0F5LkNBTENVTEFUSU9OX1NURVAsZCl9LGwpLGE9YStBeS5DQUxDVUxBVElPTl9TVEVQKzEsYTxkP2g9'@;
put 'eWsoZik6KGR5KGgpLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0sXz10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7dGhpcy5maXJzdENhbGN1bGF0aW9uJiZfPj0wJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206'@;
put 'MCx0bzpffSxsKSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITEsYT1fKzEpLGE8ZD9mKCk6dGhpcy5pblByb2dyZXNzPSExfXNldFNhbXBsaW5nT3B0aW9ucygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtreV0sYT1sJiZibChsLCJzYW1wbGluZ1JhdGlvIik/bC5zYW1wbGluZ1Jh'@;
put 'dGlvOnZvaWQgMCxkPWwmJmJsKGwsImFsbG93U2FtcGxlRHVwbGljYXRlcyIpP2wuYWxsb3dTYW1wbGVEdXBsaWNhdGVzOnZvaWQgMDthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSksZCYmdGhpcy5zYW1wbGVzR2VuZXJh'@;
put 'dG9yLnNldEFsbG93RHVwbGljYXRlcyhkKX1yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe3RoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLmNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpKX1nZXRT'@;
put 'eW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtreV07bGV0IGE9QXkuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLTE7cmV0dXJuIHVzKGwpJiYoYT1sLnN5bmNMaW1pdCxsTihhKT9hPUlOKGQsYSk6'@;
put 'YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Q29sdW1uV2lkdGgobCl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxoPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2b2lk'@;
put 'IDA7cmV0dXJuIHZvaWQgMD09PWgmJihoPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkJiYibnVtYmVyIj09dHlwZW9mIGgmJihoPU1hdGgubWF4KGgsZVYuREVGQVVMVF9XSURUSCkpKSxofWdldEZpcnN0VmlzaWJs'@;
put 'ZUNvbHVtbigpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Q7aWYobC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCk7aWYoLTEhPT1hKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5n'@;
put 'ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpfWlmKGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpO2lmKC0xIT09YSlyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Vmlz'@;
put 'dWFsRnJvbVJlbmRlcmFibGVJbmRleChhKX1yZXR1cm4tMX1nZXRMYXN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Q7aWYobC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4o'@;
put 'KTtpZigtMSE9PWEpcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSl9aWYobC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXtjb25zdCBhPWwud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKTtpZigt'@;
put 'MSE9PWEpcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSl9cmV0dXJuLTF9ZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldENvbEhlYWRlcigpLHtjYWNoZWRDb2x1bW5IZWFk'@;
put 'ZXJzOmF9PXVqLmdldCh0aGlzKTtyZXR1cm4gQWwobCwoaCxmLF8pPT57Y29uc3QgVD1hLmxlbmd0aDtyZXR1cm4oVC0xPF98fGFbX10hPT1mKSYmaC5wdXNoKF8pLFQtMTxfP2EucHVzaChmKTphW19dPWYsaH0sW10pfWNsZWFyQ2FjaGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107bC5sZW5ndGg/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntEbihsLGE9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX0pfSwhMCk6dGhpcy5jb2x1bW5XaWR0aHNNYXAuY2xlYXIoKX1p'@;
put 'c05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhXzEodGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkQ29sdW1ucyksbD0+bnVsbD09PWwpLmxlbmd0aH1vbkJlZm9yZVZpZXdSZW5kZXIoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lk'@;
put 'dGgoKSx0aGlzLmlzTmVlZFJlY2FsY3VsYXRlKCkmJiF0aGlzLmluUHJvZ3Jlc3MmJnRoaXMuY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9b25BZnRlckxvYWREYXRhKCl7dGhpcy5ob3Qudmlldz90aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCk6c2V0VGltZW91dCgoKT0+e3Ro'@;
put 'aXMuaG90JiZ0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9LDApfW9uQmVmb3JlQ2hhbmdlKGwpe2NvbnN0IGE9Y3MobCxkPT57bGV0WyxoXT1kO3JldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHRoaXMuaG90LnByb3BUb0NvbChoKSl9KTt0aGlzLmNsZWFyQ2FjaGUo'@;
put 'QXJyYXkuZnJvbShuZXcgU2V0KGEpKSl9b25CZWZvcmVDb2x1bW5SZXNpemUobCxhLGQpe2xldCBoPWw7cmV0dXJuIGQmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aChhLHZvaWQgMCwhMCksaD10aGlzLmdldENvbHVtbldpZHRoKGEsdm9pZCAwLCExKSksaH1vbkFmdGVySW5pdCgpe3Vq'@;
put 'LmdldCh0aGlzKS5jYWNoZWRDb2x1bW5IZWFkZXJzPXRoaXMuaG90LmdldENvbEhlYWRlcigpfW9uQWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZShsKXtjb25zdCBkPWNzKF8xKGwsaD0+e3ZhciBmO3JldHVybiBLaShudWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5j'@;
put 'b2wpfSksaD0+aC5hZGRyZXNzLmNvbCk7dGhpcy5jbGVhckNhY2hlKEFycmF5LmZyb20obmV3IFNldChkKSkpfWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IERnPXtob3Jpem9udGFsOiJob3Jpem9udGFsIix2ZXJ0aWNhbDoidmVydGlj'@;
put 'YWwifTtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b2ZpbGxSYW5nZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVBdXRvZmlsbCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckF1dG9maWxsIik7Y29uc3QgYUxlPVsiZmlsbEhhbmRs'@;
put 'ZSJdO2NsYXNzIHVMZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJhdXRvZmlsbCJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bImF1dG9maWxsIiwuLi5hTGVdfWNvbnN0cnVj'@;
put 'dG9yKGwpe3N1cGVyKGwpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITEsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITEsdGhpcy5tb3VzZURyYWdPdXRzaWRlPSExLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5kaXJlY3Rpb25z'@;
put 'PVtdLHRoaXMuYXV0b0luc2VydFJvdz0hMX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMubWFwU2V0dGluZ3MoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5hZGRIb29rKCJh'@;
put 'ZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+dGhpcy5vbkFmdGVyQ2VsbENvcm5lck1vdXNlRG93bihsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixsPT50aGlzLm9uQ2VsbENvcm5lckRibENsaWNrKGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2Vs'@;
put 'bE1vdXNlT3ZlciIsKGwsYSk9PnRoaXMub25CZWZvcmVDZWxsTW91c2VPdmVyKGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7'@;
put 'dGhpcy5jbGVhck1hcHBlZFNldHRpbmdzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFNlbGVjdGlvbkRhdGEoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse3JvdzphLGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJv'@;
put 'dHRvbUVuZENvcm5lcigpLF89dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLFt7c3RhcnRSb3c6YSxzdGFydENvbDpkLGVuZFJvdzpoLGVuZENvbDpmfV0pLFQ9W10sVz1bXSxpZT1bXTtyZXR1cm4gRG4oXyxnZT0+e2ZvcihsZXQgd2U9Z2Uuc3RhcnRSb3c7d2U8PWdl'@;
put 'LmVuZFJvdzt3ZSs9MSktMT09PVQuaW5kZXhPZih3ZSkmJlQucHVzaCh3ZSk7Zm9yKGxldCB3ZT1nZS5zdGFydENvbDt3ZTw9Z2UuZW5kQ29sO3dlKz0xKS0xPT09Vy5pbmRleE9mKHdlKSYmVy5wdXNoKHdlKX0pLERuKFQsZ2U9Pntjb25zdCB3ZT1bXTtEbihXLEVlPT57d2UucHVzaCh0aGlz'@;
put 'LmhvdC5nZXRDb3B5YWJsZURhdGEoZ2UsRWUpKX0pLGllLnB1c2god2UpfSksaWV9ZmlsbEluKCl7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0W2wsYSxkLGhdPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0'@;
put 'RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxmPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksXz1mLmdldFRvcFN0YXJ0Q29ybmVyKCksVD1mLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCk7Y29uc3QgVz1bXy5yb3csXy5jb2ws'@;
put 'VC5yb3csVC5jb2xdLGllPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixbTWF0aC5taW4oXy5yb3csbCksTWF0aC5taW4oXy5jb2wsYSksTWF0aC5tYXgoVC5yb3csZCksTWF0aC5tYXgoVC5jb2wsaCldLFcpLHtkaXJlY3Rpb25PZkRyYWc6Z2Usc3RhcnRPZkRyYWdD'@;
put 'b29yZHM6d2UsZW5kT2ZEcmFnQ29vcmRzOkVlfT1mdW5jdGlvbiBpTGUoYyxsLGEpe2xldCBkLGgsZjtyZXR1cm4gbFswXT09PWNbMF0mJmxbMV08Y1sxXT8oZj0ibGVmdCIsZD1hKGxbMF0sbFsxXSksaD1hKGxbMl0sY1sxXS0xKSk6bFsyXT09PWNbMl0mJmxbMF09PT1jWzBdJiZsWzNdPmNb'@;
put 'M10/KGY9InJpZ2h0IixkPWEobFswXSxjWzNdKzEpLGg9YShsWzJdLGxbM10pKTpsWzBdPGNbMF0mJmxbMV09PT1jWzFdPyhmPSJ1cCIsZD1hKGxbMF0sbFsxXSksaD1hKGNbMF0tMSxsWzNdKSk6bFsyXT5jWzJdJiZsWzFdPT09Y1sxXSYmKGY9ImRvd24iLGQ9YShjWzJdKzEsbFsxXSksaD1h'@;
put 'KGxbMl0sbFszXSkpLGQmJmQubm9ybWFsaXplKCksaCYmaC5ub3JtYWxpemUoKSx7ZGlyZWN0aW9uT2ZEcmFnOmYsc3RhcnRPZkRyYWdDb29yZHM6ZCxlbmRPZkRyYWdDb29yZHM6aH19KFcsaWUsKFplLG90KT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoWmUsb3QpKTtpZih3ZSYmd2Uu'@;
put 'cm93Pi0xJiZ3ZS5jb2w+LTEpe2NvbnN0IFplPXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSgpLG90PWYuY2xvbmUoKSxldD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHdlLHdlLEVlKSx5dD10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQXV0b2ZpbGwiLFplLG90LGV0LGdlKTtpZighMT09PXl0'@;
put 'KXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLHRoaXMuaG90LnJlbmRlcigpLCExO2xldCBrdD15dDtjb25zdCBTdD15dDtpZihbInVwIiwibGVmdCJdLmluZGV4T2YoZ2UpPi0xJiYoMSE9PVN0Lmxlbmd0aHx8MCE9PVN0WzBdLmxlbmd0aCkp'@;
put 'aWYoa3Q9W10sInVwIj09PWdlKXtjb25zdCBRdD1FZS5yb3ctd2Uucm93KzEscm49UXQlU3QubGVuZ3RoO2ZvcihsZXQgdm49MDt2bjxRdDt2bisrKWt0LnB1c2goU3RbKHZuKyhTdC5sZW5ndGgtcm4pKSVTdC5sZW5ndGhdKX1lbHNle2NvbnN0IFF0PUVlLmNvbC13ZS5jb2wrMSxybj1RdCVT'@;
put 'dFswXS5sZW5ndGg7Zm9yKGxldCB2bj0wO3ZuPFN0Lmxlbmd0aDt2bisrKXtrdC5wdXNoKFtdKTtmb3IobGV0IE5uPTA7Tm48UXQ7Tm4rKylrdFt2bl0ucHVzaChTdFt2bl1bKE5uKyhTdFt2bl0ubGVuZ3RoLXJuKSklU3Rbdm5dLmxlbmd0aF0pfX10aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJh'@;
put 'eSh3ZS5yb3csd2UuY29sLGt0LEVlLnJvdyxFZS5jb2wsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCxudWxsKSx0aGlzLnNldFNlbGVjdGlvbihpZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQXV0b2ZpbGwiLGt0LG90LGV0LGdlKSx0aGlzLmhvdC5yZW5kZXIoKX1lbHNlIHRoaXMuaG90'@;
put 'Ll9yZWZyZXNoQm9yZGVycygpO3JldHVybiEwfXJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChsKXtyZXR1cm4gbC5yb3c8MCYmKGwucm93PTApLGwuY29sPDAmJihsLmNvbD0wKSxsfWdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0'@;
put 'ZWRSYW5nZUxhc3QoKSxkPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IGg9bDtpZih0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoRGcudmVydGljYWwpJiZ0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoRGcuaG9yaXpvbnRhbCkpe2NvbnN0IGY9YS5nZXRUb3BTdGFydENvcm5lcigpOyhkLmNv'@;
put 'bDw9bC5jb2x8fGYuY29sPj1sLmNvbCkmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKSksKGQucm93PGwucm93fHxmLnJvdz5sLnJvdykmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKSl9ZWxzZSBpZih0aGlzLmRpcmVjdGlvbnMu'@;
put 'aW5jbHVkZXMoRGcudmVydGljYWwpKWg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csZC5jb2wpO2Vsc2V7aWYoIXRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhEZy5ob3Jpem9udGFsKSlyZXR1cm47aD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCl9cmV0'@;
put 'dXJuIHRoaXMucmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkKGgpfXNob3dCb3JkZXIobCl7Y29uc3QgYT10aGlzLmdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpO2EmJnRoaXMucmVkcmF3Qm9yZGVycyhhKX1hZGRSb3coKXt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57'@;
put 'dGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLHZvaWQgMCwxLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGApLHRoaXMuYWRkaW5nU3RhcnRlZD0hMX0sMjAwKX1hZGROZXdSb3dJZk5lZWRlZCgpe2lmKCF0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0Vt'@;
put 'cHR5KCkmJiExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmF1dG9JbnNlcnRSb3cpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZD10aGlzLmhvdC5jb3VudFJv'@;
put 'd3MoKTtsWzJdPGQtMSYmYVsyXT09PWQtMSYmKHRoaXMuYWRkaW5nU3RhcnRlZD0hMCx0aGlzLmFkZFJvdygpKX19Z2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0RGF0YSgpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGg7Zm9yKGxl'@;
put 'dCBmPWxbMl0rMTtmPGQ7ZisrKXtmb3IobGV0IFc9bFsxXTtXPD1sWzNdO1crKylpZihhW2ZdW1ddKXJldHVybi0xOyhhW2ZdW2xbMV0tMV18fGFbZl1bbFszXSsxXSkmJihoPWYpfXJldHVybiBofWFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKXt0aGlz'@;
put 'LmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzBdLGxbMV0pKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYSxsWzNdKSkuY29tbWl0KCl9c2V0U2VsZWN0aW9uKGwpe3RoaXMuaG90LnNlbGVj'@;
put 'dENlbGwoLi4uY3MobCxhPT5NYXRoLm1heChhLDApKSwhMSwhMSl9c2VsZWN0QWRqYWNlbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3cobCk7cmV0dXJuLTEhPT1hJiZ2b2lkIDAhPT1hJiYodGhp'@;
put 'cy5hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGwsYSksITApfXJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKX1yZWRyYXdC'@;
put 'b3JkZXJzKGwpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZnJvbSkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkudG8pLmFkZChsKS5jb21taXQoKSx0aGlzLmhvdC52'@;
put 'aWV3LnJlbmRlcigpfWdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShsKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6YX09dGhpcy5ob3Qucm9vdERvY3VtZW50LGQ9cWwodGhpcy5ob3QudGFibGUpLnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldHx8YS5zY3JvbGxUb3ApK2Fs'@;
put 'KHRoaXMuaG90LnRhYmxlKSxoPXFsKHRoaXMuaG90LnRhYmxlKS5sZWZ0LSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0fHxhLnNjcm9sbExlZnQpK3dhKHRoaXMuaG90LnRhYmxlKTtyZXR1cm4gbC5jbGllbnRZPmQmJmwuY2xpZW50WDw9aH1yZWdpc3RlckV2ZW50cygpe2NvbnN0'@;
put 'e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PnRo'@;
put 'aXMub25Nb3VzZU1vdmUoYSkpfW9uQ2VsbENvcm5lckRibENsaWNrKCl7dGhpcy5zZWxlY3RBZGphY2VudCgpJiZ0aGlzLmZpbGxJbigpfW9uQWZ0ZXJDZWxsQ29ybmVyTW91c2VEb3duKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MSx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMH1v'@;
put 'bkJlZm9yZUNlbGxNb3VzZU92ZXIobCl7dGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXImJiF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCkmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMrPTEsdGhpcy5zaG93Qm9yZGVyKGwpLHRoaXMuYWRkTmV3'@;
put 'Um93SWZOZWVkZWQoKSl9b25Nb3VzZVVwKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4xJiZ0aGlzLmZpbGxJbigpLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITEpfW9uTW91c2VNb3ZlKGwp'@;
put 'e2NvbnN0IGE9dGhpcy5nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobCk7ITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjAmJmE/KHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMCx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITApOnRoaXMubW91c2VEcmFnT3V0'@;
put 'c2lkZT0hMSx0aGlzLm1vdXNlRHJhZ091dHNpZGUmJnRoaXMuYXV0b0luc2VydFJvdyYmdGhpcy5hZGRSb3coKX1jbGVhck1hcHBlZFNldHRpbmdzKCl7dGhpcy5kaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuYXV0b0luc2VydFJvdz0hMX1tYXBTZXR0aW5ncygpe2NvbnN0IGw9ZnVuY3Rpb24g'@;
put 'b0xlKGMpe2NvbnN0IGw9e307cmV0dXJuITA9PT1jPyhsLmRpcmVjdGlvbnM9T2JqZWN0LmtleXMoRGcpLGwuYXV0b0luc2VydFJvdz0hMCk6dXMoYyk/KGwuYXV0b0luc2VydFJvdz0hIUtpKGMuYXV0b0luc2VydFJvdykmJmMuZGlyZWN0aW9uIT09RGcuaG9yaXpvbnRhbCYmYy5hdXRvSW5z'@;
put 'ZXJ0Um93LGwuZGlyZWN0aW9ucz1LaShjLmRpcmVjdGlvbik/W2MuZGlyZWN0aW9uXTpPYmplY3Qua2V5cyhEZykpOiJzdHJpbmciPT10eXBlb2YgYz8obC5kaXJlY3Rpb25zPVtjXSxsLmF1dG9JbnNlcnRSb3c9ITApOihsLmRpcmVjdGlvbnM9W10sbC5hdXRvSW5zZXJ0Um93PSExKSxsfSh0'@;
put 'aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGUpO3RoaXMuZGlyZWN0aW9ucz1sLmRpcmVjdGlvbnMsdGhpcy5hdXRvSW5zZXJ0Um93PWwuYXV0b0luc2VydFJvd31kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCBHaz0iYXV0b1Jvd1NpemUiO2NsYXNzIFR5IGV4dGVuZHMg'@;
put 'WnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEdrfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDQwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lO'@;
put 'Q19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5yb3dIZWlnaHRzTWFwPXZvaWQgMCx0aGlzLmhlYWRlckhlaWdodD1udWxsLHRoaXMuZ2hvc3RUYWJsZT1uZXcgbGoodGhpcy5ob3QpLHRoaXMuc2FtcGxlc0dlbmVyYXRvcj1uZXcg'@;
put 'cHJlKChhLGQpPT57bGV0IGg7cmV0dXJuIGE+PTA/aD10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCk6LTE9PT1hJiYoaD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoZCkpLHt2YWx1ZTpofX0pLHRoaXMuZmlyc3RDYWxjdWxhdGlvbj0hMCx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5tZWFzdXJl'@;
put 'ZFJvd3M9MCx0aGlzLnJvd0hlaWdodHNNYXA9bmV3IFdwLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvUm93U2l6ZSIsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsKGEsZCxoKT0+dGhpcy5vbkJlZm9yZVJvd1Jlc2l6'@;
put 'ZShhLGQsaCkpfWlzRW5hYmxlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtHa107cmV0dXJuITA9PT1sfHx1cyhsKX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0U2FtcGxpbmdPcHRpb25zKCksdGhpcy5hZGRIb29rKCJhZnRlckxv'@;
put 'YWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLGE9PnRoaXMub25CZWZvcmVDaGFuZ2UoYSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5y'@;
put 'ZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixhPT50aGlzLm9uQmVmb3JlVmlld1JlbmRlcihhKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChhLGQpPT50aGlzLmdldFJvd0hlaWdodChkLGEpKSx0aGlzLmFkZEhvb2so'@;
put 'Im1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsKCk9PnRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVS'@;
put 'b3dSZXNpemUiLChsLGEsZCk9PnRoaXMub25CZWZvcmVSb3dSZXNpemUobCxhLGQpKX1jYWxjdWxhdGVSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCkt'@;
put 'MX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVt'@;
put 'YmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTtpZihudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBfPXRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoLTEsZik7dGhpcy5n'@;
put 'aG9zdFRhYmxlLmFkZENvbHVtbkhlYWRlcnNSb3coXy5nZXQoLTEpKX12byhoLmZyb20saC50byxfPT57KGR8fG51bGw9PT10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KF8pKSYmRG4odGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyhfLGYpLFc9Pnts'@;
put 'ZXRbaWUsZ2VdPVc7cmV0dXJuIHRoaXMuZ2hvc3RUYWJsZS5hZGRSb3coaWUsZ2UpfSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKChfLFQpPT57XzwwP3RoaXMuaGVhZGVySGVp'@;
put 'Z2h0PVQ6dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KF8pLFQpfSl9LCEwKSx0aGlzLm1lYXN1cmVkUm93cz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPTA7Y29uc3QgZD10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldCBoPW51bGw7dGhpcy5pblByb2dyZXNzPSEwO2NvbnN0IGY9KCk9PntpZigh'@;
put 'dGhpcy5ob3QpcmV0dXJuIGR5KGgpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206YSx0bzpNYXRoLm1pbihhK1R5LkNBTENVTEFUSU9OX1NURVAsZCl9LGwpLGE9YStUeS5DQUxDVUxBVElPTl9TVEVQKzEsYTxkP2g9eWsoZik6KGR5KGgp'@;
put 'LHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVy'@;
put 'bGF5LmNsb25lLmRyYXcoKSl9LF89dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO3RoaXMuZmlyc3RDYWxjdWxhdGlvbiYmXz49MCYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTowLHRvOl99LGwpLHRoaXMuZmlyc3RDYWxjdWxhdGlvbj0hMSxhPV8rMSksYTxkP2YoKToo'@;
put 'dGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCExKSl9c2V0U2FtcGxpbmdPcHRpb25zKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0drXSxhPWwmJmJsKGwsInNhbXBsaW5nUmF0aW8iKT9sLnNhbXBsaW5nUmF0aW86dm9pZCAwLGQ9'@;
put 'bCYmYmwobCwiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIik/bC5hbGxvd1NhbXBsZUR1cGxpY2F0ZXM6dm9pZCAwO2EmJiFpc05hTihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSxkJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dE'@;
put 'dXBsaWNhdGVzKGQpfXJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe2U3KHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEFCTEUpJiYodGhpcy5jbGVhckNhY2hlKCksdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCkpfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgbD10aGlz'@;
put 'LmhvdC5nZXRTZXR0aW5ncygpW0drXTtsZXQgYT1UeS5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRSb3dzKCktMTtyZXR1cm4gdXMobCkmJihhPWwuc3luY0xpbWl0LGxOKGEpP2E9SU4oZCxhKTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRSb3dIZWlnaHQo'@;
put 'bCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZvaWQgMDtjb25zdCBkPWw8MD90aGlzLmhlYWRlckhlaWdodDp0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpO2xl'@;
put 'dCBoPWE7cmV0dXJuIG51bGwhPT1kJiZkPihhfHwwKSYmKGg9ZCksaH1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWFkZXJIZWlnaHR9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dDtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNp'@;
put 'YmxlQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCk6bC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yP2wud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCk6LTF9Z2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0O3JldHVy'@;
put 'biBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yP2wud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpOmwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCk6LTF9Y2xlYXJDYWNoZSgpe3RoaXMuaGVhZGVySGVpZ2h0'@;
put 'PW51bGwsdGhpcy5yb3dIZWlnaHRzTWFwLmluaXQoKX1jbGVhckNhY2hlQnlSYW5nZShsKXtjb25zdHtmcm9tOmEsdG86ZH09Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bDt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3ZvKE1hdGgubWluKGEsZCksTWF0aC5tYXgoYSxk'@;
put 'KSxoPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChoLG51bGwpfSl9LCEwKX1pc05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhXzEodGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZFJvd3MpLGw9Pm51bGw9PT1sKS5sZW5ndGh9'@;
put 'b25CZWZvcmVWaWV3UmVuZGVyKCl7Y29uc3QgbD10aGlzLmhvdC5yZW5kZXJDYWxsLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sZD10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGg9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO2lmKC0xIT09ZCYmLTEhPT1oKXtp'@;
put 'Zih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206ZCx0bzpofSx2b2lkIDAsbCksYSl7Y29uc3QgZj10aGlzLmhvdC5jb3VudFJvd3MoKS0xO3RoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpmLWEsdG86Zn0pfXRoaXMuaXNOZWVkUmVjYWxjdWxhdGUoKSYmIXRoaXMuaW5Qcm9n'@;
put 'cmVzcyYmdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9fW9uQmVmb3JlUm93TW92ZShsLGEpe3RoaXMuY2xlYXJDYWNoZUJ5UmFuZ2Uoe2Zyb206bCx0bzphfSksdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9b25CZWZvcmVSb3dSZXNpemUobCxhLGQpe2xldCBoPWw7cmV0dXJu'@;
put 'IGQmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoYSx2b2lkIDAsITApLGg9dGhpcy5nZXRSb3dIZWlnaHQoYSkpLGh9b25BZnRlckxvYWREYXRhKCl7dGhpcy5ob3Qudmlldz90aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpOnNldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdCYmdGhpcy5y'@;
put 'ZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKX0sMCl9b25CZWZvcmVDaGFuZ2UobCl7bGV0IGE9bnVsbDsxPT09bC5sZW5ndGg/YT1sWzBdWzBdOmwubGVuZ3RoPjEmJihhPXtmcm9tOmxbMF1bMF0sdG86bFtsLmxlbmd0aC0xXVswXX0pLG51bGwhPT1hJiZ0aGlzLmNsZWFyQ2FjaGVCeVJhbmdl'@;
put 'KGEpfWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IG1yZT1uZXcgTWFwKFtbImluZGV4ZXNTZXF1ZW5jZSIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpjVixnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpneX1dLFsicGh5c2ljYWxseUlu'@;
put 'ZGV4ZWQiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6aFYsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6ZlZ9XV0pLHZyZT1jPT57aWYoITE9PT1tcmUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgQWx0ZXIgc3RyYXRlZ3kgd2l0aCBJRCAnJHtjfScgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJu'@;
put 'IG1yZS5nZXQoYyl9LHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6ZkxlLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOnBMZX09dnJlKCJwaHlzaWNhbGx5SW5kZXhlZCIpLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6dkxlLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOl9MZX09dnJlKCJwaHlz'@;
put 'aWNhbGx5SW5kZXhlZCIpLGRqPSJiaW5kUm93c1dpdGhIZWFkZXJzIixTTGU9bmV3IE1hcChbWyJsb29zZSIsY2xhc3MgZ0xlIGV4dGVuZHMgRWd7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPWRWKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4'@;
put 'ZWRWYWx1ZXM9ZkxlKGQsbCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9cExlKHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9dVYoYSxsKSxzdXBlci5yZW1vdmUobCl9fV0sWyJzdHJpY3QiLGNsYXNzIGJM'@;
put 'ZSBleHRlbmRzIEVne2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPXZMZSh0aGlzLmluZGV4ZWRWYWx1ZXMsbCxhLChkLGgpPT50aGlzLmdldE5leHRWYWx1ZShoKSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhl'@;
put 'ZFZhbHVlcz1fTGUodGhpcy5pbmRleGVkVmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXROZXh0VmFsdWUobCl7cmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuZ2V0VmFsdWVzKCkpKzErbH19XV0pO2NsYXNzIE1MZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBk'@;
put 'an1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5oZWFkZXJJbmRleGVzPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RqXX1lbmFibGVQbHVnaW4oKXtpZih0aGlzLmVuYWJs'@;
put 'ZWQpcmV0dXJuO2xldCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbZGpdOyJzdHJpbmciIT10eXBlb2YgbCYmKGw9Imxvb3NlIik7Y29uc3QgYT1TTGUuZ2V0KGwpO3RoaXMuaGVhZGVySW5kZXhlcz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVh'@;
put 'ZGVycyIsbmV3IGEpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyIixkPT50aGlzLm9uTW9kaWZ5Um93SGVhZGVyKGQpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVh'@;
put 'ZGVycyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1vbk1vZGlmeVJvd0hlYWRlcihsKXtyZXR1cm4gdGhpcy5oZWFkZXJJbmRleGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBoaihjLGwsYSl7'@;
put 'cmV0dXJuIGw9ZnVuY3Rpb24ga0xlKGMpe3ZhciBsPWZ1bmN0aW9uIEFMZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo'@;
put 'Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5'@;
put 'cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIF9yZShjLGwpe3JldHVybiBmdW5jdGlvbiBUTGUoYyxsKXtyZXR1'@;
put 'cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLGJyZShjLGwsImdldCIpKX1mdW5jdGlvbiBmaihjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIERMZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0'@;
put 'ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsYnJlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBicmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBu'@;
put 'b24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9Y29uc3QgcGo9ImNvbGxhcHNpYmxlQ29sdW1ucyIsTExlPVsibmVzdGVkSGVhZGVycyJdLEM3PSJjb2xsYXBzaWJsZUluZGljYXRvciIseXJlPW5ldyBNYXAoW1siY29sbGFwc2UiLHtoaWRlQ29sdW1uOiEwLGJlZm9yZUhvb2s6ImJlZm9y'@;
put 'ZUNvbHVtbkNvbGxhcHNlIixhZnRlckhvb2s6ImFmdGVyQ29sdW1uQ29sbGFwc2UifV0sWyJleHBhbmQiLHtoaWRlQ29sdW1uOiExLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkV4cGFuZCJ9XV0pO3ZhciBTNz1uZXcgV2Vha01hcDtjbGFz'@;
put 'cyBSTGUgZXh0ZW5kcyBac3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksaGoodGhpcywibmVzdGVkSGVhZGVyc1BsdWdpbiIsbnVsbCksaGoodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgbGwodGhpcykpLGhqKHRoaXMsImhlYWRlclN0YXRlTWFuYWdlciIsbnVsbCksZnVuY3Rp'@;
put 'b24geExlKGMsbCxhKXsoZnVuY3Rpb24gRUxlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxTNyx7d3JpdGFi'@;
put 'bGU6ITAsdmFsdWU6bnVsbH0pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyOTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOk5lc3RlZEhlYWRlcnMiXX1zdGF0aWMgZ2V0IFNFVFRJ'@;
put 'TkdfS0VZUygpe3JldHVybltwaiwuLi5MTGVdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwal19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGlu'@;
put 'Z3MoKTthfHxHYSgiWW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIgdG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMuIiksZmoodGhpcyxTNyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRo'@;
put 'aXMucGx1Z2luTmFtZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0U3RhdGVNYW5hZ2VyKCksdGhpcy5hZGRIb29r'@;
put 'KCJpbml0IiwoKT0+dGhpcy5vbkluaXQoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFm'@;
put 'dGVyR2V0Q29sSGVhZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsKGQsaCxmKT0+dGhpcy5vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihkLGgsZikpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1'@;
put 'Z2luKCl7aWYodGhpcy5ob3Qudmlldyl7aWYoIXRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbi5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzKXtjb25zdHtjb2xsYXBzaWJsZUNvbHVtbnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsiYm9vbGVhbiI9PXR5cGVvZiBsP3RoaXMuaGVhZGVyU3Rh'@;
put 'dGVNYW5hZ2VyLm1hcFN0YXRlKGE9Pih7Y29sbGFwc2libGU6YS5vcmlnQ29sc3Bhbj4xfSkpOkFycmF5LmlzQXJyYXkobCkmJih0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZSgoKT0+KHtjb2xsYXBzaWJsZTohMX0pKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tZXJnZVN0YXRl'@;
put 'V2l0aChsKSl9c3VwZXIudXBkYXRlUGx1Z2luKCl9fWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksZmoodGhpcyxTNyxudWxsKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49bnVsbCx0aGlzLmNsZWFyQnV0'@;
put 'dG9ucygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1jbGVhckJ1dHRvbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5USEVBRCxk'@;
put 'PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFELGg9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENv'@;
put 'cm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsLGY9ZnVuY3Rpb24oXyl7XyYmXy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF8pfTt2bygwLGwtMSxfPT57Y29uc3QgVD1hLmNoaWxkTm9kZXNbX10sVz1kLmNoaWxkTm9kZXNbX10saWU9aD9oLmNoaWxkTm9kZXNbX106bnVsbDt2'@;
put 'bygwLFQuY2hpbGROb2Rlcy5sZW5ndGgtMSxnZT0+e2xldCB3ZT1ULmNoaWxkTm9kZXNbZ2VdLnF1ZXJ5U2VsZWN0b3IoYC4ke0M3fWApO2Yod2UpLFcmJlcuY2hpbGROb2Rlc1tnZV0mJih3ZT1XLmNoaWxkTm9kZXNbZ2VdLnF1ZXJ5U2VsZWN0b3IoYC4ke0M3fWApLGYod2UpKSxoJiZpZSYm'@;
put 'aWUuY2hpbGROb2Rlc1tnZV0mJih3ZT1pZS5jaGlsZE5vZGVzW2dlXS5xdWVyeVNlbGVjdG9yKGAuJHtDN31gKSxmKHdlKSl9KX0pfWV4cGFuZFNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJleHBhbmQiKX1jb2xsYXBzZVNlY3Rpb24obCl7dGhpcy50b2dn'@;
put 'bGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBzZSIpfXRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMobCl7Y29uc3QgYT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBOb2RlcyhkPT57Y29uc3R7Y29sbGFwc2libGU6aCxvcmlnQ29sc3BhbjpmLGhlYWRlckxldmVsOl8sY29s'@;
put 'dW1uSW5kZXg6VCxpc0NvbGxhcHNlZDpXfT1kO2lmKCEwPT09aCYmZj4xJiYoVyYmImV4cGFuZCI9PT1sfHwhVyYmImNvbGxhcHNlIj09PWwpKXJldHVybntyb3c6dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubGV2ZWxUb1Jvd0Nvb3JkcyhfKSxjb2w6VH19KTt0aGlzLnRvZ2dsZUNvbGxhcHNp'@;
put 'YmxlU2VjdGlvbihhLGwpfWNvbGxhcHNlQWxsKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJjb2xsYXBzZSIpfWV4cGFuZEFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiZXhwYW5kIil9dG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGwsYSl7aWYo'@;
put 'IXlyZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhY3Rpb24gaXMgcGFzc2VkICgke2F9KS5gKTtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm47Y29uc3QgZD1fMShsLEVlPT57bGV0e3JvdzpaZX09RWU7cmV0dXJuIFplPDB9KTtsZXQgaD1kLmxlbmd0aD4wO0RuKGQs'@;
put 'RWU9Pnt2YXIgWmU7bGV0e3JvdzpvdCxjb2w6ZXR9PUVlO2NvbnN0e2NvbGxhcHNpYmxlOnl0LGlzQ29sbGFwc2VkOmt0fT1udWxsIT09KFplPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKG90LGV0KSkmJnZvaWQgMCE9PVplP1plOnt9O2lmKCF5dHx8a3QmJiJj'@;
put 'b2xsYXBzZSI9PT1hfHwha3QmJiJleHBhbmQiPT09YSlyZXR1cm4gaD0hMSwhMX0pO2NvbnN0IGY9W10sXz1bXTtoJiZEbihkLEVlPT57bGV0e3JvdzpaZSxjb2w6b3R9PUVlO2NvbnN0e2NvbHNwYW5Db21wZW5zYXRpb246ZXQsYWZmZWN0ZWRDb2x1bW5zOnl0LHJvbGxiYWNrTW9kaWZpY2F0'@;
put 'aW9uOmt0fT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihhLFplLG90KTtldD4wJiYoXy5wdXNoKC4uLnl0KSxmLnB1c2goa3QpKX0pO2NvbnN0IFQ9dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCk7bGV0IFc9W107ImNvbGxhcHNlIj09PWE/Vz1yTihb'@;
put 'Li4uVCwuLi5fXSk6ImV4cGFuZCI9PT1hJiYoVz1fMShULEVlPT4hXy5pbmNsdWRlcyhFZSkpKTtjb25zdCBpZT15cmUuZ2V0KGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoaWUuYmVmb3JlSG9vayxULFcsaCkpcmV0dXJuIHZvaWQgRG4oZixFZT0+e0VlKCl9KTt0aGlzLmhvdC5iYXRj'@;
put 'aEV4ZWN1dGlvbigoKT0+e0RuKF8sRWU9PntfcmUodGhpcyxTNykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRWUpLGllLmhpZGVDb2x1bW4pfSl9LCEwKTtjb25zdCB3ZT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKS5sZW5ndGghPT1ULmxlbmd0aDt0aGlz'@;
put 'LmhvdC5ydW5Ib29rcyhpZS5hZnRlckhvb2ssVCxXLGgsd2UpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX1nZXRDb2xsYXBzZWRDb2x1bW5zKCl7cmV0dXJuIF9yZSh0aGlzLFM3KS5nZXRIaWRkZW5JbmRleGVzKCl9b25BZnRlckdldENv'@;
put 'bEhlYWRlcihsLGEsZCl7dmFyIGg7Y29uc3R7Y29sbGFwc2libGU6ZixvcmlnQ29sc3BhbjpfLGlzQ29sbGFwc2VkOlR9PW51bGwhPT0oaD10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhkLGwpKSYmdm9pZCAwIT09aD9oOnt9LFc9ZiYmXz4xJiZsPj10aGlzLmhv'@;
put 'dC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2xldCBpZT1hLnF1ZXJ5U2VsZWN0b3IoYC4ke0M3fWApO3ZhciBnZTtXPyhpZXx8KGllPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxwaShpZSxDNyksYS5xdWVyeVNlbGVjdG9yKCJkaXY6Zmlyc3Qt'@;
put 'Y2hpbGQiKS5hcHBlbmRDaGlsZChpZSkpLFdvKGllLFsiY29sbGFwc2VkIiwiZXhwYW5kZWQiXSksVD8ocGkoaWUsImNvbGxhcHNlZCIpLGpwKGllLCIrIikpOihwaShpZSwiZXhwYW5kZWQiKSxqcChpZSwiLSIpKSk6bnVsbD09PShnZT1pZSl8fHZvaWQgMD09PWdlfHxnZS5yZW1vdmUoKX1v'@;
put 'bkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEpe0JvKGwudGFyZ2V0LEM3KSYmKEJvKGwudGFyZ2V0LCJleHBhbmRlZCIpPyh0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQobC50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbYV0sImNvbGxhcHNlIikp'@;
put 'OkJvKGwudGFyZ2V0LCJjb2xsYXBzZWQiKSYmKHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChsLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFthXSwiZXhwYW5kIikpLHYyKGwpKX1vbkluaXQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfW9uQWZ0ZXJM'@;
put 'b2FkRGF0YShsLGEpe2F8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZGVzdHJveSgpe2ZqKHRoaXMsUzcsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBPTGU9WyJzb3J0RW1wdHlDZWxscyIsImluZGljYXRvciIsImhlYWRlckFjdGlvbiIsImNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiXTtjbGFz'@;
put 'cyBOTGV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1sLHRoaXMuc29ydGluZ1N0YXRlcz1uZXcgRWssdGhpcy5zb3J0RW1wdHlDZWxscz0hMSx0aGlzLmluZGljYXRvcj0hMCx0aGlzLmhlYWRlckFjdGlvbj0hMCx0aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk9dm9pZCAwLHRoaXMubWFw'@;
put 'TmFtZT1hLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGEsdGhpcy5zb3J0aW5nU3RhdGVzKX11cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKXt1cyhsKSYmZHMobCwoYSxkKT0+e09MZS5pbmNsdWRlcyhkKSYmKHRoaXNbZF09YSl9KX1nZXRBbGxDb2x1bW5zUHJv'@;
put 'cGVydGllcygpe2NvbnN0IGw9e3NvcnRFbXB0eUNlbGxzOnRoaXMuc29ydEVtcHR5Q2VsbHMsaW5kaWNhdG9yOnRoaXMuaW5kaWNhdG9yLGhlYWRlckFjdGlvbjp0aGlzLmhlYWRlckFjdGlvbn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSYm'@;
put 'KGwuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT10aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpLGx9Z2V0U29ydE9yZGVyT2ZDb2x1bW4obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4o'@;
put 'bCkpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5zb3J0T3JkZXJ9Z2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpe3JldHVybiBsPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksdGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5maW5kSW5kZXgoYT0+e2xldFtkXT1hO3JldHVy'@;
put 'biBkPT09bH0pfWdldE51bWJlck9mU29ydGVkQ29sdW1ucygpe3JldHVybiB0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0TGVuZ3RoKCl9aXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCl9aXNDb2x1bW5Tb3J0ZWQobCl7'@;
put 'cmV0dXJuIHVzKHRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSkpfWdldFNvcnRTdGF0ZXMoKXtyZXR1cm4gbnVsbD09PXRoaXMuc29ydGluZ1N0YXRlcz9bXTp0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChh'@;
put 'PT57bGV0W2QsaF09YTtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGQpLC4uLmh9fSl9Z2V0Q29sdW1uU29ydFN0YXRlKGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihLaShhKSlyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOmF9fXNldFNv'@;
put 'cnRTdGF0ZXMobCl7dGhpcy5zb3J0aW5nU3RhdGVzLmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKz0xKXRoaXMuc29ydGluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsW2FdLmNvbHVtbikse3NvcnRPcmRlcjpsW2FdLnNvcnRPcmRl'@;
put 'cn0pfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMubWFwTmFtZSksdGhpcy5zb3J0aW5nU3RhdGVzPW51bGx9fWNvbnN0ICRrPSJhc2MiLHFrPSJkZXNjIjtmdW5jdGlvbiB3cmUoYyl7aWYoYyE9PXFrKXJldHVybiBjPT09JGs/cWs6JGt9'@;
put 'ZnVuY3Rpb24gQ3JlKGMpe3JldHVybiBjLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKX1mdW5jdGlvbiBTcmUoYyxsKXtpZihjPDB8fCFsLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgYT1sLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO3JldHVybiBBcnJheS5mcm9tKGEp'@;
put 'LmluZGV4T2YobC5wYXJlbnROb2RlKS1hLmxlbmd0aD09LTF9ZnVuY3Rpb24gZ2ooYyxsLGEpe3JldHVybi0xPT09YyYmbD49MCYmITE9PT1VcChhKX1jb25zdCBNcmU9ImluZGljYXRvckRpc2FibGVkIix4cmU9ImNvbHVtblNvcnRpbmciLEVyZT0ic29ydEFjdGlvbiIsa3JlPW5ldyBNYXAo'@;
put 'W1skaywiYXNjZW5kaW5nIl0sW3FrLCJkZXNjZW5kaW5nIl1dKTtmdW5jdGlvbiBBcmUoYyxsLGEpe2NvbnN0IGQ9bC5sb2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGgsZil7Y29uc3R7c29ydEVtcHR5Q2VsbHM6X309YTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb2NhbGVMb3dl'@;
put 'ckNhc2UoZCkpLCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi50b0xvY2FsZUxvd2VyQ2FzZShkKSksaD09PWY/MDpwYyhoKT9wYyhmKT8wOl8mJiJhc2MiPT09Yz8tMToxOnBjKGYpP18mJiJhc2MiPT09Yz8xOi0xOmlzTmFOKGgpJiYhaXNOYU4oZik/ImFzYyI9PT1jPzE6LTE6IWlzTmFOKGgp'@;
put 'JiZpc05hTihmKXx8KGlzTmFOKGgpfHxpc05hTihmKXx8KGg9cGFyc2VGbG9hdChoKSxmPXBhcnNlRmxvYXQoZikpLGg8Zik/ImFzYyI9PT1jPy0xOjE6aD5mPyJhc2MiPT09Yz8xOi0xOjB9fWNvbnN0e3JlZ2lzdGVyOktrLGdldEl0ZW06RHJlLGhhc0l0ZW06UUxlfT1wZCgic29ydGluZy5j'@;
put 'b21wYXJlRnVuY3Rpb25GYWN0b3J5Iikse3JlZ2lzdGVyOklyZSxnZXRJdGVtOmVSZX09cGQoInNvcnRpbmcubWFpblNvcnRDb21wYXJhdG9yIik7ZnVuY3Rpb24gTHJlKGMpe3JldHVybiBRTGUoYyk/RHJlKGMpOkRyZSgiZGVmYXVsdCIpfUtrKCJudW1lcmljIixmdW5jdGlvbiBHTGUoYyxs'@;
put 'LGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0IGY9cGFyc2VGbG9hdChkKSxfPXBhcnNlRmxvYXQoaCkse3NvcnRFbXB0eUNlbGxzOlR9PWE7aWYoZj09PV98fGlzTmFOKGYpJiZpc05hTihfKSlyZXR1cm4gMDtpZihUKXtpZihwYyhkKSlyZXR1cm4iYXNjIj09PWM/LTE6MTtpZihwYyho'@;
put 'KSlyZXR1cm4iYXNjIj09PWM/MTotMX1yZXR1cm4gaXNOYU4oZik/MTppc05hTihfKT8tMTpmPF8/ImFzYyI9PT1jPy0xOjE6Zj5fPyJhc2MiPT09Yz8xOi0xOjB9fSksS2soImNoZWNrYm94IixmdW5jdGlvbiBxTGUoYyxsLGEpe2NvbnN0IGQ9bC5jaGVja2VkVGVtcGxhdGUsaD1sLnVuY2hl'@;
put 'Y2tlZFRlbXBsYXRlLHtzb3J0RW1wdHlDZWxsczpmfT1hO3JldHVybiBmdW5jdGlvbihfLFQpe2NvbnN0IFc9cGMoXyksaWU9cGMoVCksZ2U9Vz9oOl8sd2U9aWU/aDpULEVlPWdlPT09aHx8Z2U9PT1kLFplPXdlPT09aHx8d2U9PT1kO2lmKCExPT09Zil7aWYoVyYmITE9PT1pZSlyZXR1cm4g'@;
put 'MTtpZighMT09PVcmJmllKXJldHVybi0xfXJldHVybiExPT09RWUmJlplPyJhc2MiPT09Yz8tMToxOkVlJiYhMT09PVplPyJhc2MiPT09Yz8xOi0xOiExPT09RWUmJiExPT09WmU/QXJlKGMsbCxhKShfLFQpOmdlPT09aCYmd2U9PT1kPyJhc2MiPT09Yz8tMToxOmdlPT09ZCYmd2U9PT1oPyJh'@;
put 'c2MiPT09Yz8xOi0xOjB9fSksS2soImRhdGUiLGZ1bmN0aW9uIFhMZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6Zn09YTtpZihkPT09aClyZXR1cm4gMDtpZihwYyhkKSlyZXR1cm4gcGMoaCk/MDpmJiYiYXNjIj09PWM/LTE6MTtpZihwYyhoKSly'@;
put 'ZXR1cm4gZiYmImFzYyI9PT1jPzE6LTE7Y29uc3QgXz1sLmRhdGVGb3JtYXQsVD1LbyhkLF8pLFc9S28oaCxfKTtyZXR1cm4gVC5pc1ZhbGlkKCk/Vy5pc1ZhbGlkKCk/Vy5pc0FmdGVyKFQpPyJhc2MiPT09Yz8tMToxOlcuaXNCZWZvcmUoVCk/ImFzYyI9PT1jPzE6LTE6MDotMToxfX0pLEtr'@;
put 'KCJkZWZhdWx0IixBcmUpO2NvbnN0IG1qPSJjb2x1bW5Tb3J0aW5nIjtJcmUobWosZnVuY3Rpb24gdFJlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Y29uc3RbLC4uLmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbihUKXtjb25zdCBXPWNbMF0saWU9bFswXSxnZT1oWzBdLHdlPWZb'@;
put 'MF0sRWU9aWUuY29sdW1uU29ydGluZztyZXR1cm4oRWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9FZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OkxyZShpZS50eXBlKSkoVyxpZSxFZSkoZ2Usd2UpfSgpfX0pLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Tb3J0Iiks'@;
put 'c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uU29ydCIpO2NsYXNzIE9yZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBtan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0'@;
put 'aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCx0aGlzLmNvbHVtbk1ldGFDYWNoZT1udWxsLHRoaXMucGx1Z2luS2V5PW1qLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVu'@;
put 'YWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW5ldyBOTGUodGhpcy5ob3QsYCR7dGhpcy5wbHVnaW5LZXl9LnNvcnRpbmdTdGF0ZXNgKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1uZXcgV3AoYT0+e2xldCBkPXRoaXMuaG90LnRv'@;
put 'VmlzdWFsQ29sdW1uKGEpO3JldHVybiBudWxsPT09ZCYmKGQ9YSksdGhpcy5nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhkKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCx0aGlzLmNvbHVtbk1ldGFDYWNoZSks'@;
put 'dGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PnRoaXMub25BZnRlckdldENvbEhlYWRlcihhLGQpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZU9uQ2VsbE1vdXNlRG93biguLi5hcmd1bWVudHMp'@;
put 'fSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsKGEsZCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlRG93bihhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRh'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5ob3QudmlldyYmdGhpcy5sb2FkT3JTb3J0QnlTZXR0aW5ncygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7Y29uc3QgbD0oYSxkKT0+e2NvbnN0IGg9Q3JlKGQp'@;
put 'OyExPT09U3JlKGEsZCl8fG51bGw9PT1ofHx0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoaCl9O3RoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImFmdGVy'@;
put 'R2V0Q29sSGVhZGVyIixsKX0pLHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bnVsbCE9PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSks'@;
put 'dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSkpfSwhMCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWApLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5kZXN0cm95'@;
put 'KCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bnVsbCx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c29ydChsKXtjb25zdCBhPXRoaXMuZ2V0U29ydENvbmZpZygpLGQ9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCksaD10aGlzLmFyZVZh'@;
put 'bGlkU29ydENvbmZpZ3MoZCk7ITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uU29ydCIsYSxkLGgpJiYoMD09PWEubGVuZ3RoJiZudWxsPT09dGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZSYmKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9dGhpcy5ob3Qucm93SW5kZXhNYXBw'@;
put 'ZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXksbmV3IHZuZSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5zZXRWYWx1ZXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpKSxoJiYodGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMo'@;
put 'ZCksdGhpcy5zb3J0QnlQcmVzZXRTb3J0U3RhdGVzKGQpLHRoaXMuc2F2ZUFsbFNvcnRTZXR0aW5ncyhkKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uU29ydCIsYSxoP2Q6YSxoKSxoJiYodGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSExLHRoaXMu'@;
put 'aG90LnZpZXcucmVuZGVyKCkpKX1jbGVhclNvcnQoKXt0aGlzLnNvcnQoW10pfWlzU29ydGVkKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpfWdldFNvcnRDb25maWcobCl7cmV0dXJuIEtpKGwpP3Ro'@;
put 'aXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRDb2x1bW5Tb3J0U3RhdGUobCk6dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRTdGF0ZXMoKX1zZXRTb3J0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCk7dGhpcy5hcmVWYWxpZFNvcnRDb25m'@;
put 'aWdzKGEpJiZ0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhhKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/'@;
put 'bC5zbGljZSgwLDEpOltsXX1hcmVWYWxpZFNvcnRDb25maWdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuIGZ1bmN0aW9uIGpMZShjKXtpZihjLnNvbWUoYT0+ITE9PT1mdW5jdGlvbiBCTGUoYyl7aWYoITE9PT11cyhjKSlyZXR1cm4hMTtjb25zdHtjb2x1bW46bCxz'@;
put 'b3J0T3JkZXI6YX09YztyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihsKSYmWyRrLHFrXS5pbmNsdWRlcyhhKX0oYSkpKXJldHVybiExO2NvbnN0IGw9Yy5tYXAoYT0+e2xldHtjb2x1bW46ZH09YTtyZXR1cm4gZH0pO3JldHVybiBuZXcgU2V0KGwpLnNpemU9PT1sLmxlbmd0aH0obCkmJmwuZXZl'@;
put 'cnkoZD0+e2xldHtjb2x1bW46aH09ZDtyZXR1cm4gaDw9YSYmaD49MH0pfXNhdmVBbGxTb3J0U2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKTthLmluaXRpYWxDb25maWc9Y3MobCxoPT57bGV0e2NvbHVtbjpmLC4u'@;
put 'Ll99PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpLC4uLl99fSksdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJjb2x1bW5Tb3J0aW5nIixhKX1nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpe2NvbnN0IGw9e307dGhpcy5ob3QucnVu'@;
put 'SG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJjb2x1bW5Tb3J0aW5nIixsKTtjb25zdCBhPWwudmFsdWU7cmV0dXJuIEtpKGEpJiZBcnJheS5pc0FycmF5KGEuaW5pdGlhbENvbmZpZykmJihhLmluaXRpYWxDb25maWc9Y3MoYS5pbml0aWFsQ29uZmlnLGg9PntsZXR7Y29sdW1uOmYsLi4u'@;
put 'X309aDtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpLC4uLl99fSkpLGF9Z2V0Q29sdW1uTmV4dENvbmZpZyhsKXtjb25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihLaShhKSl7Y29uc3QgaD13cmUoYSk7cmV0'@;
put 'dXJuIEtpKGgpP3tjb2x1bW46bCxzb3J0T3JkZXI6aH06dm9pZCAwfWNvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSYmbD49MCYmbDxkKXJldHVybntjb2x1bW46bCxzb3J0T3JkZXI6d3JlKCl9fWdldE5leHRTb3J0Q29uZmlnKGwpe2xldCBhPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYXBwZW5kIjtjb25zdCBkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCksaD0tMSE9PWQsZj10aGlzLmdldFNvcnRDb25maWcoKSxfPXRoaXMu'@;
put 'Z2V0Q29sdW1uTmV4dENvbmZpZyhsKTtpZihoKXtpZihMYShfKSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKV07aWYoImFwcGVuZCI9PT1hKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShkKzEpLF9dO2lmKCJyZXBsYWNlIj09PWEpcmV0dXJuWy4uLmYu'@;
put 'c2xpY2UoMCxkKSxfLC4uLmYuc2xpY2UoZCsxKV19cmV0dXJuIEtpKF8pP2YuY29uY2F0KF8pOmZ9Z2V0UGx1Z2luQ29sdW1uQ29uZmlnKGwpe2lmKHVzKGwpKXtjb25zdCBhPWxbdGhpcy5wbHVnaW5LZXldO2lmKHVzKGEpKXJldHVybiBhfXJldHVybnt9fWdldE1lcmdlZFBsdWdpblNldHRp'@;
put 'bmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0sZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKSxoPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaCk7cmV0'@;
put 'dXJuIEFycmF5LmlzQXJyYXkoZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhmLmNvbHVtbnNbbF0pKTpSYShmLmNvbHVtbnMpP09iamVjdC5hc3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29sdW1ucyhsKSkpOk9i'@;
put 'amVjdC5hc3NpZ24oZCxhKX1nZXRGaXJzdENlbGxTZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZD1PYmplY3QuY3JlYXRlKGEpO3JldHVybiBkW3RoaXMucGx1Z2luS2V5XT10aGlzLmNvbHVtbk1ldGFDYWNoZS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3Qu'@;
put 'dG9QaHlzaWNhbENvbHVtbihsKSksZH1nZXROdW1iZXJPZlJvd3NUb1NvcnQobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO3JldHVybiBhLm1heFJvd3M8PWw/YS5tYXhSb3dzOmwtYS5taW5TcGFyZVJvd3N9c29ydEJ5UHJlc2V0U29ydFN0YXRlcyhsKXtpZigwPT09bC5sZW5n'@;
put 'dGgpcmV0dXJuIHZvaWQgdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpO2NvbnN0IGE9W10sZD10aGlzLmhvdC5jb3VudFJvd3MoKSxoPWllPT5jcyhsLGdlPT50aGlzLmhvdC5nZXREYXRhQXRD'@;
put 'ZWxsKGllLGdlLmNvbHVtbikpO2ZvcihsZXQgaWU9MDtpZTx0aGlzLmdldE51bWJlck9mUm93c1RvU29ydChkKTtpZSs9MSlhLnB1c2goW3RoaXMuaG90LnRvUGh5c2ljYWxSb3coaWUpXS5jb25jYXQoaChpZSkpKTtjb25zdCBmPWNzKGEsaWU9PmllWzBdKTshZnVuY3Rpb24gV0xlKGMsbCl7'@;
put 'Y29uc3QgYT1lUmUobCk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4yP2QtMjowKSxmPTI7ZjxkO2YrKyloW2YtMl09YXJndW1lbnRzW2ZdO2Muc29ydChhKC4uLmgpKX0oYSx0aGlzLnBsdWdpbktleSxjcyhsLGllPT5pZS5zb3J0T3JkZXIpLGNzKGwsaWU9PnRo'@;
put 'aXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoaWUuY29sdW1uKSkpO2ZvcihsZXQgaWU9YS5sZW5ndGg7aWU8ZDtpZSs9MSlhLnB1c2goW2llXS5jb25jYXQoaChpZSkpKTtjb25zdCBfPWNzKGEsaWU9PmllWzBdKSxUPW5ldyBNYXAoY3MoZiwoaWUsZ2UpPT5baWUsX1tnZV1dKSksVz1jcyh0aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxpZT0+VC5oYXMoaWUpP1QuZ2V0KGllKTppZSk7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFcpfWxvYWRPclNvcnRCeVNldHRpbmdzKCl7Y29uc3QgbD10aGlzLmdldEFsbFNhdmVkU29y'@;
put 'dFNldHRpbmdzKCk7aWYodXMobCkpdGhpcy5zb3J0QnlTZXR0aW5ncyhsKTtlbHNle2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV07dGhpcy5zb3J0QnlTZXR0aW5ncyhhKX19c29ydEJ5U2V0dGluZ3MobCl7aWYodXMobCkpe3RoaXMuY29sdW1uU3RhdGVz'@;
put 'TWFuYWdlci51cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKTtjb25zdCBhPWwuaW5pdGlhbENvbmZpZzsoQXJyYXkuaXNBcnJheShhKXx8dXMoYSkpJiZ0aGlzLnNvcnQoYSl9ZWxzZSB0aGlzLmhvdC5yZW5kZXIoKX1vbkFmdGVyR2V0Q29sSGVhZGVyKGwsYSl7Y29uc3QgZD1DcmUoYSk7'@;
put 'aWYoITE9PT1TcmUobCxhKXx8bnVsbD09PWQpcmV0dXJuO2NvbnN0IGg9dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhsKVt0aGlzLnBsdWdpbktleV07dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGQsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLGwsaC5pbmRpY2F0b3IsaC5oZWFkZXJBY3Rp'@;
put 'b24pfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7aWYoV28obCxmdW5jdGlvbiBZTGUoKXtyZXR1cm4gQXJyYXkuZnJvbShrcmUudmFsdWVzKCkpLmNvbmNhdChFcmUsTXJlLHhyZSl9KCkpLCExIT09dGhpcy5lbmFibGVkKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShh'@;
put 'PjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07cGkobCxmdW5jdGlvbiBaTGUoYyxsLGEsZCl7Y29uc3QgaD1beHJlXTtpZihkJiZoLnB1c2goRXJlKSwhMT09PWEpcmV0dXJuIGgucHVzaChNcmUpLGg7Y29uc3QgZj1jLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO3Jl'@;
put 'dHVybiBLaShmKSYmaC5wdXNoKGtyZS5nZXQoZikpLGh9KC4uLmQpKX19b25VcGRhdGVTZXR0aW5ncyhsKXtzdXBlci5vblVwZGF0ZVNldHRpbmdzKCksbnVsbCE9PXRoaXMuY29sdW1uTWV0YUNhY2hlJiZ0aGlzLmNvbHVtbk1ldGFDYWNoZS5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLmdldE51bWJlck9mSW5kZXhlcygpKSxLaShsW3RoaXMucGx1Z2luS2V5XSkmJnRoaXMuc29ydEJ5U2V0dGluZ3MobFt0aGlzLnBsdWdpbktleV0pfW9uQWZ0ZXJMb2FkRGF0YShsKXshMD09PWwmJnRoaXMuaG90LnZpZXcmJnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKX13YXNDbGlj'@;
put 'a2FibGVIZWFkZXJDbGlja2VkKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYSlbdGhpcy5wbHVnaW5LZXldLmhlYWRlckFjdGlvbiYmIlNQQU4iPT09bC50YXJnZXQubm9kZU5hbWV9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQsaCl7ITEhPT1naihhLnJvdyxh'@;
put 'LmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpJiZ0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJihoLmNvbHVtbj0hMCl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpeyExIT09Z2ooYS5yb3csYS5jb2wsbCkmJnRo'@;
put 'aXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSYmKHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoYS5jb2wpKSx0aGlzLnNvcnQodGhpcy5nZXRDb2x1'@;
put 'bW5OZXh0Q29uZmlnKGEuY29sKSkpfWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB2aihjKXtyZXR1cm4gbnVsbD09Y3x8aXNOYU4oYyl9Y29uc3QgX2o9'@;
put 'ImNvbHVtblN1bW1hcnkiO2NsYXNzIGFSZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMjB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5lbmRwb2ludHM9bnVsbH1pc0VuYWJsZWQo'@;
put 'KXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbX2pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW19qXSx0aGlzLmVuZHBvaW50cz1uZXcgY2xhc3MgaVJle2NvbnN0cnVjdG9yKGwsYSl7'@;
put 'dGhpcy5wbHVnaW49bCx0aGlzLmhvdD10aGlzLnBsdWdpbi5ob3QsdGhpcy5lbmRwb2ludHM9W10sdGhpcy5zZXR0aW5ncz1hLHRoaXMuc2V0dGluZ3NUeXBlPSJhcnJheSIsdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1nZXRFbmRwb2ludChsKXty'@;
put 'ZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxsTWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKVtsXTp0aGlzLmVuZHBvaW50c1tsXX1nZXRBbGxFbmRwb2ludHMoKXtyZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxs'@;
put 'TWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKTp0aGlzLmVuZHBvaW50c31maWxsTWlzc2luZ0VuZHBvaW50RGF0YShsKXtyZXR1cm4gdGhpcy5wYXJzZVNldHRpbmdzKGwuY2FsbCh0aGlzKSl9cGFyc2VTZXR0aW5ncyhsKXtjb25zdCBhPVtdO2xldCBkPWw7aWYoZHx8ImZ1bmN0'@;
put 'aW9uIiE9dHlwZW9mIHRoaXMuc2V0dGluZ3MpcmV0dXJuIGR8fChkPXRoaXMuc2V0dGluZ3MpLERuKGQsaD0+e2NvbnN0IGY9e307dGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmFuZ2VzIixbWzAsdGhpcy5ob3QuY291bnRSb3dzKCktMV1dKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyZXZl'@;
put 'cnNlZFJvd0Nvb3JkcyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uUm93IixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gcm93IGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJv'@;
put 'cGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRpb25Db2x1bW4iLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5hdGlvbiBjb2x1bW4gZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29y'@;
put 'ayBwcm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJzb3VyY2VDb2x1bW4iLGguZGVzdGluYXRpb25Db2x1bW4pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInR5cGUiLCJzdW0iKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJmb3JjZU51bWVyaWMiLCExKSx0aGlz'@;
put 'LmFzc2lnblNldHRpbmcoaCxmLCJzdXBwcmVzc0RhdGFUeXBlRXJyb3JzIiwhMCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImN1c3RvbUZ1bmN0aW9uIixudWxsKSx0aGlzLmFzc2lnblNldHRpbmco'@;
put 'aCxmLCJyZWFkT25seSIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJvdW5kRmxvYXQiLCExKSxhLnB1c2goZil9KSxhO3RoaXMuc2V0dGluZ3NUeXBlPSJmdW5jdGlvbiJ9YXNzaWduU2V0dGluZyhsLGEsZCxoKXtpZigicmFuZ2VzIiE9PWR8fHZvaWQgMCE9PWxbZF0pe2lmKCJyYW5n'@;
put 'ZXMiIT09ZHx8MCE9PWxbZF0ubGVuZ3RoKWlmKHZvaWQgMD09PWxbZF0pe2lmKGggaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBoO2FbZF09aH1lbHNlIGFbZF09ImRlc3RpbmF0aW9uUm93Ij09PWQmJmEucmV2ZXJzZWRSb3dDb29yZHM/dGhpcy5ob3QuY291bnRSb3dzKCktbFtkXS0xOmxbZF19'@;
put 'ZWxzZSBhW2RdPWh9cmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24obCxhLGQpe2lmKCJmdW5jdGlvbiIhPT10aGlzLnNldHRpbmdzVHlwZSlyZXR1cm47Y29uc3QgaD1sLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLGY9dGhpcy5nZXRBbGxFbmRwb2ludHMoKTtEbihm'@;
put 'LF89Pnsicm93Ij09PWgmJl8uZGVzdGluYXRpb25Sb3c+PWEmJigiaW5zZXJ0X3JvdyI9PT1sP18uYWx0ZXJSb3dPZmZzZXQ9ZDoicmVtb3ZlX3JvdyI9PT1sJiYoXy5hbHRlclJvd09mZnNldD0tMSpkKSksImNvbCI9PT1oJiZfLmRlc3RpbmF0aW9uQ29sdW1uPj1hJiYoImluc2VydF9jb2wi'@;
put 'PT09bD9fLmFsdGVyQ29sdW1uT2Zmc2V0PWQ6InJlbW92ZV9jb2wiPT09bCYmKF8uYWx0ZXJDb2x1bW5PZmZzZXQ9LTEqZCkpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhmLCExKX1yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkLGgsZil7bGV0IF89IShhcmd1bWVu'@;
put 'dHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtpZigiZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGUpe2NvbnN0IEVlPSgpPT4odGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlVmlld1JlbmRlciIsRWUpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50'@;
put 'cygpKTtyZXR1cm4gdm9pZCB0aGlzLmhvdC5hZGRIb29rT25jZSgiYmVmb3JlVmlld1JlbmRlciIsRWUpfWNvbnN0IFQ9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixXPWwuaW5kZXhPZigicmVtb3ZlIik+LTE/LTE6MSxpZT10aGlzLmdldEFsbEVuZHBvaW50cygpLGdlPTA9PT1s'@;
put 'LmluZGV4T2YoIm1vdmVfcm93Iiksd2U9YTtEbihpZSxFZT0+eyJyb3ciPT09VCYmRWUuZGVzdGluYXRpb25Sb3c+PXdlJiYoRWUuYWx0ZXJSb3dPZmZzZXQ9VypkKSwiY29sIj09PVQmJkVlLmRlc3RpbmF0aW9uQ29sdW1uPj13ZSYmKEVlLmFsdGVyQ29sdW1uT2Zmc2V0PVcqZCl9KSx0aGlz'@;
put 'LnJlc2V0QWxsRW5kcG9pbnRzKGllLCFnZSksRG4oaWUsZ2U/RWU9Pnt0aGlzLmV4dGVuZEVuZHBvaW50UmFuZ2VzKEVlLHdlLGhbMF0saC5sZW5ndGgpLHRoaXMucmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhFZSksdGhpcy5jbGVhck9mZnNldEluZm9ybWF0aW9uKEVlKX06RWU9Pnt0aGlzLnNo'@;
put 'aWZ0RW5kcG9pbnRDb29yZGluYXRlcyhFZSx3ZSl9KSxfJiZ0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1jbGVhck9mZnNldEluZm9ybWF0aW9uKGwpe2wuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBvaW50UmFuZ2VzKGwsYSxk'@;
put 'LGgpe0RuKGwucmFuZ2VzLGY9PntmWzFdJiYoYT49ZlswXSYmYTw9ZlsxXT9kPmZbMV0/ZlsxXSs9aDpkPGZbMF0mJihmWzBdLT1oKTpkPj1mWzBdJiZkPD1mWzFdJiYoZlsxXS09aCxhPD1mWzBdJiYoZlswXSs9MSxmWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhsKXtjb25z'@;
put 'dCBkPVtdLGg9W107RG4obC5yYW5nZXMsZj0+e2NvbnN0IF89W107aWYoZlsxXSlmb3IobGV0IFQ9ZlswXTtUPD1mWzFdO1QrKylfLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhUKSk7ZWxzZSBfLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmWzBdKSk7aC5wdXNoKF8pfSksRG4o'@;
put 'aCxmPT57bGV0IF89W107RG4oZiwoVCxXKT0+ezA9PT1XP18ucHVzaChUKTpmW1ddIT09ZltXLTFdKzEmJihfLnB1c2goZltXLTFdKSxkLnB1c2goXyksXz1bXSxfLnB1c2goVCkpLFc9PT1mLmxlbmd0aC0xJiYoXy5wdXNoKFQpLGQucHVzaChfKSl9KX0pLGwucmFuZ2VzPWR9c2hpZnRFbmRw'@;
put 'b2ludENvb3JkaW5hdGVzKGwsYSl7bC5hbHRlclJvd09mZnNldCYmMCE9PWwuYWx0ZXJSb3dPZmZzZXQ/KGwuZGVzdGluYXRpb25Sb3crPWwuYWx0ZXJSb3dPZmZzZXR8fDAsRG4obC5yYW5nZXMsZD0+e0RuKGQsKGgsZik9PntoPj1hJiYoZFtmXSs9bC5hbHRlclJvd09mZnNldHx8MCl9KX0p'@;
put 'KTpsLmFsdGVyQ29sdW1uT2Zmc2V0JiYwIT09bC5hbHRlckNvbHVtbk9mZnNldCYmKGwuZGVzdGluYXRpb25Db2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDAsbC5zb3VyY2VDb2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRzKCl7bGV0IGw9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2wuc29tZShoPT57Y29uc3QgXz1oLmFsdGVyQ29sdW1u'@;
put 'T2Zmc2V0fHwwO3JldHVybiBoLmRlc3RpbmF0aW9uUm93KyhoLmFsdGVyUm93T2Zmc2V0fHwwKT49dGhpcy5ob3QuY291bnRSb3dzKCl8fGguZGVzdGluYXRpb25Db2x1bW4rXz49dGhpcy5ob3QuY291bnRDb2xzKCl9KXx8KHRoaXMuY2VsbHNUb1NldENhY2hlPVtdLERuKGwsaD0+e3RoaXMu'@;
put 'cmVzZXRFbmRwb2ludFZhbHVlKGgsYSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10pfXJlZnJlc2hBbGxFbmRwb2ludHMoKXt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxE'@;
put 'bih0aGlzLmdldEFsbEVuZHBvaW50cygpLGw9Pnt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCwiaW5pdCIpfSksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMu'@;
put 'Y2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl7Y29uc3QgYT1bXTt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxEbihsLChkLGgsZik9PntgJHtkWzJdfHwiIn1gIT1gJHtkWzNdfWAm'@;
put 'JkRuKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksKF8sVCk9Pnt0aGlzLmhvdC5wcm9wVG9Db2woZltoXVsxXSk9PT1fLnNvdXJjZUNvbHVtbiYmLTE9PT1hLmluZGV4T2YoVCkmJmEucHVzaChUKX0pfSksRG4oYSxkPT57dGhpcy5yZWZyZXNoRW5kcG9pbnQodGhpcy5nZXRFbmRwb2ludChkKSl9'@;
put 'KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaEVuZHBvaW50KGwpe3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMu'@;
put 'c2V0RW5kcG9pbnRWYWx1ZShsKSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsfXJlc2V0RW5kcG9pbnRWYWx1ZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGg9bC5hbHRlckNvbHVtbk9mZnNldHx8MDt0'@;
put 'aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFt0aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KyhhJiZsLmFsdGVyUm93T2Zmc2V0fHwwKSksdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obC5kZXN0aW5hdGlvbkNvbHVtbisoYT9oOjApKSwiIl0pfXNldEVuZHBvaW50VmFsdWUo'@;
put 'bCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobC5kZXN0aW5hdGlvblJvdz49dGhpcy5ob3QuY291bnRSb3dzKCl8fGwuZGVzdGlu'@;
put 'YXRpb25Db2x1bW4+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybiB2b2lkIHRoaXMudGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKG51bGwhPT1mKXtjb25zdCBfPXRoaXMuaG90LmdldENlbGxNZXRh'@;
put 'KGYsbC5kZXN0aW5hdGlvbkNvbHVtbik7KCJpbml0Ij09PWF8fF8ucmVhZE9ubHkhPT1sLnJlYWRPbmx5KSYmKF8ucmVhZE9ubHk9bC5yZWFkT25seSxfLmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJlc3VsdCIpfWwucm91bmRGbG9hdCYmIWlzTmFOKGwucmVzdWx0KSYmKGwucmVzdWx0PWwu'@;
put 'cmVzdWx0LnRvRml4ZWQobC5yb3VuZEZsb2F0KSksZD90aGlzLmhvdC5zZXREYXRhQXRDZWxsKGgsbC5kZXN0aW5hdGlvbkNvbHVtbixsLnJlc3VsdCwiQ29sdW1uU3VtbWFyeS5zZXQiKTp0aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFtoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHRd'@;
put 'KSxsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQgMH10aHJvd091dE9mQm91bmRzV2FybmluZygpe0dhKCJPbmUgb2YgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbnMnIGRlc3RpbmF0aW9uIHBvaW50cyB5b3UgcHJvdmlkZWQgaXMgYmV5b25kIHRoZSB0'@;
put 'YWJsZSBib3VuZGFyaWVzISIpfX0odGhpcyx0aGlzLnNldHRpbmdzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVySW5pdCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFm'@;
put 'dGVyQ2hhbmdlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNy'@;
put 'ZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk'@;
put 'PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJD'@;
put 'cmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJT'@;
put 'dHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4g'@;
put 'bC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRb'@;
put 'aF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSb3dNb3ZlKC4uLmFyZ3VtZW50'@;
put 'cyl9KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuZW5kcG9pbnRzPW51bGwsdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGx9Y2FsY3VsYXRlKGwpe3N3aXRjaChsLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzdW0iOmwucmVz'@;
put 'dWx0PXRoaXMuY2FsY3VsYXRlU3VtKGwpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgobCxsLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOmwucmVzdWx0PXRoaXMuY291bnRFbnRyaWVzKGwpO2JyZWFrO2Nhc2UiYXZlcmFnZSI6bC5yZXN1'@;
put 'bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGwpO2JyZWFrO2Nhc2UiY3VzdG9tIjpsLnJlc3VsdD1sLmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyxsKX19Y2FsY3VsYXRlU3VtKGwpe2xldCBhPTA7cmV0dXJuIGRzKGwucmFuZ2VzLGQ9PnthKz10aGlzLmdldFBhcnRpYWxTdW0oZCxsLnNvdXJj'@;
put 'ZUNvbHVtbil9KSxhfWdldFBhcnRpYWxTdW0obCxhKXtsZXQgZD0wLGg9bFsxXXx8bFswXSxmPW51bGwsXz0wO2Rve2lmKGY9dGhpcy5nZXRDZWxsVmFsdWUoaCxhKSxmPXZqKGYpP251bGw6ZixudWxsIT09Zil7Y29uc3QgVD0oYCR7Zn1gLnNwbGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7'@;
put 'VD5fJiYoXz1UKX1kKz1mfHwwLGgtPTF9d2hpbGUoaD49bFswXSk7cmV0dXJuIE1hdGgucm91bmQoZCoxMCoqXykvMTAqKl99Y2FsY3VsYXRlTWluTWF4KGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZHMobC5yYW5nZXMsaD0+e2NvbnN0IGY9dGhpcy5nZXRQYXJ0aWFsTWluTWF4KGgsbC5zb3Vy'@;
put 'Y2VDb2x1bW4sYSk7aWYobnVsbD09PWQmJm51bGwhPT1mJiYoZD1mKSxudWxsIT09Zilzd2l0Y2goYSl7Y2FzZSJtaW4iOmQ9TWF0aC5taW4oZCxmKTticmVhaztjYXNlIm1heCI6ZD1NYXRoLm1heChkLGYpfX0pLG51bGw9PT1kPyJOb3QgZW5vdWdoIGRhdGEiOmR9Z2V0UGFydGlhbE1pbk1h'@;
put 'eChsLGEsZCl7bGV0IF8saD1udWxsLGY9bFsxXXx8bFswXTtkb3tpZihfPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksXz12aihfKT9udWxsOl8sbnVsbD09PWgpaD1fO2Vsc2UgaWYobnVsbCE9PV8pc3dpdGNoKGQpe2Nhc2UibWluIjpoPU1hdGgubWluKGgsXyk7YnJlYWs7Y2FzZSJtYXgiOmg9'@;
put 'TWF0aC5tYXgoaCxfKX1mLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW1wdHkobCxhKXtsZXQgZCxoPTAsZj1sWzFdfHxsWzBdO2Rve2Q9dGhpcy5nZXRDZWxsVmFsdWUoZixhKSxkPXZqKGQpP251bGw6ZCxudWxsPT09ZCYmKGgrPTEpLGYtPTF9d2hpbGUoZj49bFswXSk7cmV0'@;
put 'dXJuIGh9Y291bnRFbnRyaWVzKGwpe2xldCBhPTA7cmV0dXJuIGRzKGwucmFuZ2VzLGg9Pntjb25zdCBmPXZvaWQgMD09PWhbMV0/MTpoWzFdLWhbMF0rMSxfPXRoaXMuY291bnRFbXB0eShoLGwuc291cmNlQ29sdW1uKTthKz1mLGEtPV99KSxhfWNhbGN1bGF0ZUF2ZXJhZ2UobCl7cmV0dXJu'@;
put 'IHRoaXMuY2FsY3VsYXRlU3VtKGwpL3RoaXMuY291bnRFbnRyaWVzKGwpfWdldENlbGxWYWx1ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksaD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtsZXQgZj10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsYSksXz0i'@;
put 'IjtpZihudWxsIT09ZCYmbnVsbCE9PWgmJihfPXRoaXMuaG90LmdldENlbGxNZXRhKGQsaCkuY2xhc3NOYW1lfHwiIiksXy5pbmRleE9mKCJjb2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTEpcmV0dXJuIG51bGw7aWYodGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYm'@;
put 'KCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi5yZXBsYWNlKC8sLywiLiIpKSxmPXBhcnNlRmxvYXQoZikpLGlzTmFOKGYpJiYhdGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LnN1cHByZXNzRGF0YVR5cGVFcnJvcnMpdGhyb3cgbmV3IEVycm9yKEFhYENvbHVtblN1bW1hcnkgcGx1Z2lu'@;
put 'OiBjZWxsIGF0ICgke2x9LCAke2F9KSBpcyBub3QgaW4gYVx4MjAKICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3QgZG8gdGhlIGNhbGN1bGF0aW9uLmApO3JldHVybiBmfW9uQWZ0ZXJJbml0KCl7dGhpcy5lbmRwb2ludHMuZW5kcG9pbnRzPXRoaXMuZW5kcG9pbnRzLnBhcnNlU2V0'@;
put 'dGluZ3MoKSx0aGlzLmVuZHBvaW50cy5yZWZyZXNoQWxsRW5kcG9pbnRzKCEwKX1vbkFmdGVyQ2hhbmdlKGwsYSl7bCYmIkNvbHVtblN1bW1hcnkucmVzZXQiIT09YSYmIkNvbHVtblN1bW1hcnkuc2V0IiE9PWEmJiJsb2FkRGF0YSIhPT1hJiZ0aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2hhbmdl'@;
put 'ZEVuZHBvaW50cyhsKX1vbkFmdGVyUm93TW92ZShsLGEpe3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsbFswXSxsLmxlbmd0aCxsLHRoaXMucGx1Z2luTmFtZSksdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0'@;
put 'dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGEsbC5sZW5ndGgsbCx0aGlzLnBsdWdpbk5hbWUpfX1jbGFzcyBNN3tzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5lciJ9c3RhdGljIGdldCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRD'@;
put 'b21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3JldHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGljIGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKGwsYSl7dGhpcy5yb290RG9jdW1lbnQ9bCx0aGlzLmlzUnRsPWEsdGhpcy5jb250'@;
put 'YWluZXI9bnVsbCx0aGlzLmVkaXRvcj10aGlzLmNyZWF0ZUVkaXRvcigpLHRoaXMuZWRpdG9yU3R5bGU9dGhpcy5lZGl0b3Iuc3R5bGUsdGhpcy5oaWRkZW49ITAsdGhpcy5oaWRlKCl9c2V0UG9zaXRpb24obCxhKXt0aGlzLmVkaXRvclN0eWxlLmxlZnQ9YCR7bH1weGAsdGhpcy5lZGl0b3JT'@;
put 'dHlsZS50b3A9YCR7YX1weGB9c2V0U2l6ZShsLGEpe2lmKGwmJmEpe2NvbnN0IGQ9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtkLnN0eWxlLndpZHRoPWAke2x9cHhgLGQuc3R5bGUuaGVpZ2h0PWAke2F9cHhgfX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOndhKHRoaXMuZ2V0SW5wdXRFbGVtZW50'@;
put 'KCkpLGhlaWdodDphbCh0aGlzLmdldElucHV0RWxlbWVudCgpKX19cmVzZXRTaXplKCl7Y29uc3QgbD10aGlzLmdldElucHV0RWxlbWVudCgpO2wuc3R5bGUud2lkdGg9IiIsbC5zdHlsZS5oZWlnaHQ9IiJ9c2V0UmVhZE9ubHlTdGF0ZShsKXt0aGlzLmdldElucHV0RWxlbWVudCgpLnJlYWRP'@;
put 'bmx5PWx9c2hvdygpe3RoaXMuZWRpdG9yU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuaGlkZGVuPSExfWhpZGUoKXt0aGlzLmhpZGRlbnx8KHRoaXMuZWRpdG9yU3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaGlkZGVuPSEwfWlzVmlzaWJsZSgpe3JldHVybiJibG9jayI9PT10aGlzLmVk'@;
put 'aXRvclN0eWxlLmRpc3BsYXl9c2V0VmFsdWUoKXtjb25zdCBhPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIpfHwiIjt0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlPWF9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRJbnB1dEVs'@;
put 'ZW1lbnQoKS52YWx1ZX1pc0ZvY3VzZWQoKXtyZXR1cm4gdGhpcy5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZ2V0SW5wdXRFbGVtZW50KCl9Zm9jdXMoKXt0aGlzLmdldElucHV0RWxlbWVudCgpLmZvY3VzKCl9Y3JlYXRlRWRpdG9yKCl7Y29uc3QgbD10aGlzLnJvb3REb2N1'@;
put 'bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxhPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGwuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250'@;
put 'YWluZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGw/InJ0bCI6Imx0ciIpLHBpKHRoaXMuY29udGFpbmVyLE03LkNMQVNTX0VESVRPUl9DT05UQUlORVIpLHRoaXMucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpLHBpKGwsTTcuQ0xBU1NfRURJVE9S'@;
put 'KSxwaShhLE03LkNMQVNTX0lOUFVUKSxsLmFwcGVuZENoaWxkKGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGwpLGx9Z2V0SW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoYC4ke003LkNMQVNTX0lOUFVUfWApfWRlc3Ryb3koKXtjb25zdCBsPXRo'@;
put 'aXMuY29udGFpbmVyP3RoaXMuY29udGFpbmVyLnBhcmVudE5vZGU6bnVsbDt0aGlzLmVkaXRvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWRpdG9yKSx0aGlzLmVkaXRvcj1udWxsLHRoaXMuZWRpdG9yU3R5bGU9bnVsbCxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX19'@;
put 'Y29uc3QgbFJlPU03LGdzPSItLS0tLS0tLS0iO2Z1bmN0aW9uIFhrKGMpe3JldHVybiBCbyhjLCJodFNlcGFyYXRvciIpfWZ1bmN0aW9uIEprKGMpe3JldHVybiBCbyhjLCJodERpc2FibGVkIil9ZnVuY3Rpb24gUWsoYyl7cmV0dXJuIEJvKGMsImh0U2VsZWN0aW9uRGlzYWJsZWQiKX1mdW5j'@;
put 'dGlvbiBJZyhjKXtjb25zdCBsPWMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bFswXTwwP251bGw6bH1mdW5jdGlvbiBMZyhjLGwpe2NvbnN0IGE9e307cmV0dXJuIERuKGMsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmKGFbaF18fChhW2hdPVtdKSxhW2hdW2ZdPWwoaCxmKSl9'@;
put 'KX0pLGF9ZnVuY3Rpb24gS3AoYyxsLGEsZCxoKXtEbihjLGY9PntmLmZvckFsbCgoXyxUKT0+e18+PTAmJlQ+PTAmJmZ1bmN0aW9uIHBSZShjLGwsYSxkLGgsZil7Y29uc3QgXz1oKGMsbCk7bGV0IFQ9ZDtfLmNsYXNzTmFtZSYmKFQ9InZlcnRpY2FsIj09PWE/ZnVuY3Rpb24gaFJlKGMsbCl7'@;
put 'cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0VG9wIiwiIikucmVwbGFjZSgiaHRNaWRkbGUiLCIiKS5yZXBsYWNlKCJodEJvdHRvbSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfShfLmNsYXNzTmFtZSxkKTpmdW5jdGlvbiBmUmUoYyxsKXtyZXR1cm4tMSE9'@;
put 'PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRMZWZ0IiwiIikucmVwbGFjZSgiaHRDZW50ZXIiLCIiKS5yZXBsYWNlKCJodFJpZ2h0IiwiIikucmVwbGFjZSgiaHRKdXN0aWZ5IiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KF8uY2xhc3NOYW1lLGQpKSxmKGMsbCwiY2xhc3NO'@;
put 'YW1lIixUKX0oXyxULGwsYSxkLGgpfSl9KX1mdW5jdGlvbiB5aChjLGwpe2xldCBhPSExO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZEbihjLGQ9PihkLmZvckFsbCgoaCxmKT0+e2lmKGg+PTAmJmY+PTAmJmwoaCxmKSlyZXR1cm4gYT0hMCwhMX0pLGEpKSxhfWZ1bmN0aW9uIFlmKGMpe3Jl'@;
put 'dHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPiR7U3RyaW5nLmZyb21DaGFyQ29kZSgxMDAwMyl9PC9zcGFuPiR7Y31gfWZ1bmN0aW9uIFByZShjLGwpe2NvbnN0IGE9Yy5zbGljZSgwKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoJiZhW2RdLm5hbWU9PT1sOylhLnNoaWZ0KCk7cmV0dXJuIGF9'@;
put 'Y2xhc3MgRnJle2NvbnN0cnVjdG9yKGwpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkPW51bGwsdGhpcy5oaWRpbmdUaW1lcj1udWxsLHRoaXMudXBkYXRlRGVsYXkobCl9aGlkZSgpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITEsdGhpcy5oaWRpbmdUaW1l'@;
put 'cj1zZXRUaW1lb3V0KCgpPT57ITE9PT10aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoImhpZGUiKX0sMjUwKX1zaG93KGwpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkKGwpfWNhbmNlbEhpZGluZygpe3RoaXMud2FzTGFzdEFj'@;
put 'dGlvblNob3c9ITAsY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpLHRoaXMuaGlkaW5nVGltZXI9bnVsbH11cGRhdGVEZWxheSgpe3RoaXMuc2hvd0RlYm91bmNlZD1tTihhPT57dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJzaG93IixhLmZyb20ucm93'@;
put 'LGEuZnJvbS5jb2wpfSxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MjUwKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKX19VGEoRnJlLE8wKTtjb25zdCB3UmU9RnJlLGJqPSJjb21tZW50cyIsZUE9bmV3IFdlYWtNYXAsd2g9'@;
put 'ImNvbW1lbnQiLHg3PSJ2YWx1ZSIsdEE9InJlYWRPbmx5IjtjbGFzcyBTUmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gYmp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNjB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5lZGl0b3I9'@;
put 'bnVsbCx0aGlzLmRpc3BsYXlTd2l0Y2g9bnVsbCx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMucmFuZ2U9e30sdGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMSxlQS5zZXQodGhpcyx7dGVtcEVkaXRvckRpbWVuc2lvbnM6e30sY2VsbEJlbG93Q3Vyc29yOm51bGx9KX1pc0VuYWJs'@;
put 'ZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbYmpdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuZWRpdG9yfHwodGhpcy5lZGl0b3I9bmV3IGxSZSh0aGlzLmhvdC5yb290RG9jdW1lbnQsdGhpcy5ob3QuaXNSdGwoKSkpLHRoaXMuZXZlbnRNYW5hZ2VyfHwo'@;
put 'dGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpKSx0aGlzLmRpc3BsYXlTd2l0Y2h8fCh0aGlzLmRpc3BsYXlTd2l0Y2g9bmV3IHdSZSh0aGlzLmdldERpc3BsYXlEZWxheVNldHRpbmcoKSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT50aGlz'@;
put 'LmFkZFRvQ29udGV4dE1lbnUobCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsKGwsYSxkLGgsZixfKT0+dGhpcy5vbkFmdGVyUmVuZGVyZXIobCxfKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFm'@;
put 'dGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFmdGVyQmVnaW5FZGl0aW5nIiwoKT0+dGhpcy5oaWRlKCkpLHRoaXMuZGlzcGxheVN3aXRjaC5hZGRMb2NhbEhvb2soImhpZGUiLCgpPT50aGlzLmhpZGUoKSksdGhpcy5kaXNwbGF5U3dpdGNoLmFk'@;
put 'ZExvY2FsSG9vaygic2hvdyIsKGwsYSk9PnRoaXMuc2hvd0F0Q2VsbChsLGEpKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1'@;
put 'Z2luKCksdGhpcy5kaXNwbGF5U3dpdGNoLnVwZGF0ZURlbGF5KHRoaXMuZ2V0RGlzcGxheURlbGF5U2V0dGluZygpKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90O3RoaXMuZXZl'@;
put 'bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixhPT50aGlzLm9uTW91c2VPdmVyKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsYT0+dGhpcy5vbk1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM'@;
put 'aXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmVkaXRvci5nZXRJbnB1dEVsZW1lbnQoKSwiYmx1ciIsKCk9PnRoaXMub25FZGl0b3JCbHVyKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50'@;
put 'TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCksIm1vdXNlZG93biIsYT0+dGhpcy5vbkVkaXRvck1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmVkaXRvci5nZXRJbnB1dEVsZW1lbnQoKSwibW91c2V1cCIsYT0+dGhpcy5v'@;
put 'bkVkaXRvck1vdXNlVXAoYSkpfXNldFJhbmdlKGwpe3RoaXMucmFuZ2U9bH1jbGVhclJhbmdlKCl7dGhpcy5yYW5nZT17fX10YXJnZXRJc0NlbGxXaXRoQ29tbWVudChsKXtjb25zdCBhPU5wKGwudGFyZ2V0LCJURCIsIlRCT0RZIik7cmV0dXJuISEoYSYmQm8oYSwiaHRDb21tZW50Q2VsbCIp'@;
put 'JiZOcChhLFt0aGlzLmhvdC5yb290RWxlbWVudF0pKX10YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShsKXtyZXR1cm4gdGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCk9PT1sLnRhcmdldH1zZXRDb21tZW50KGwpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUg'@;
put 'dXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdCBhPXRoaXMuZWRpdG9yLmdldFZhbHVlKCk7bGV0IGQ9IiI7bnVsbCE9bD9kPWw6bnVsbCE9YSYmKGQ9YSksdGhpcy51cGRhdGVDb21tZW50'@;
put 'TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wse1t4N106ZH0pLHRoaXMuaG90LnJlbmRlcigpfXNldENvbW1lbnRBdENlbGwobCxhLGQpe3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2V0Q29tbWVu'@;
put 'dChkKX1yZW1vdmVDb21tZW50KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCBy'@;
put 'YW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7dGhpcy5ob3Quc2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHdoKSxsJiZ0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhpZGUoKX1yZW1vdmVDb21tZW50QXRDZWxsKGws'@;
put 'YSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnJlbW92ZUNvbW1lbnQoZCl9Z2V0Q29tbWVudCgpe3JldHVybiB0'@;
put 'aGlzLmdldENvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx4Nyl9Z2V0Q29tbWVudEF0Q2VsbChsLGEpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGwsYSx4Nyl9c2hvdygpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdC'@;
put 'ZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtmcm9tOntyb3c6bCxjb2w6YX19PXRoaXMucmFuZ2U7aWYobDwwfHxsPnRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTF8fGE8'@;
put 'MHx8YT50aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKS0xKXJldHVybiExO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sKTtyZXR1cm4gdGhpcy5lZGl0b3Iuc2V0VmFsdWUoZFt3aF0/ZFt3aF1beDddOiIiKSx0aGlz'@;
put 'LmVkaXRvci5zaG93KCksdGhpcy5yZWZyZXNoRWRpdG9yKCEwKSwhMH1zaG93QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2hvdygpfWhpZGUoKXt0aGlzLmVkaXRvci5oaWRlKCl9cmVmcmVzaEVk'@;
put 'aXRvcigpe3ZhciBsLGE7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLnJhbmdlLmZyb20mJnRoaXMuZWRpdG9yLmlzVmlzaWJsZSgpKSlyZXR1cm47Y29uc3R7cm93SW5kZXhNYXBwZXI6aCxjb2x1bW5JbmRleE1hcHBl'@;
put 'cjpmfT10aGlzLmhvdCx7cm93Ol8sY29sOlR9PXRoaXMucmFuZ2UuZnJvbTtsZXQgVz1oLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoXyksaWU9Zi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFQpO2NvbnN0IGdlPW51bGw9PT1XO3RoaXMuZWRpdG9yLnNldFBvc2l0aW9uKDAs'@;
put 'MCksbnVsbD09PVcmJihXPWguZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLC0xKSkpLG51bGw9PT1pZSYmKGllPWYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChULC0xKSkpO2Nv'@;
put 'bnN0IHdlPW51bGw9PT1XLEVlPW51bGw9PT1pZTtXPW51bGwhPT0obD1XKSYmdm9pZCAwIT09bD9sOjAsaWU9bnVsbCE9PShhPWllKSYmdm9pZCAwIT09YT9hOjA7Y29uc3R7cm9vdFdpbmRvdzpaZSx2aWV3Ontfd3Q6b3R9fT10aGlzLmhvdCx7d3RUYWJsZTpldH09b3QseXQ9b3QuZ2V0Q2Vs'@;
put 'bCh7cm93OlcsY29sOmllfSwhMCksa3Q9dGhpcy5nZXRDb21tZW50TWV0YShfLFQsInN0eWxlIik7a3Q/dGhpcy5lZGl0b3Iuc2V0U2l6ZShrdC53aWR0aCxrdC5oZWlnaHQpOnRoaXMuZWRpdG9yLnJlc2V0U2l6ZSgpO2NvbnN0IFN0PUVlPzA6ZXQuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgo'@;
put 'aWUpLFF0PWdlJiYhd2U/YWwoeXQpOjAse2xlZnQ6cm4sdG9wOnZuLHdpZHRoOk5uLGhlaWdodDpjcn09eXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOkRyLGhlaWdodDpfaX09dGhpcy5lZGl0b3IuZ2V0U2l6ZSgpLHtpbm5lcldpZHRoOmxpLGlubmVySGVpZ2h0Om1yfT10aGlz'@;
put 'LmhvdC5yb290V2luZG93LEVpPXRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7bGV0IFpyPXJuK1plLnNjcm9sbFgrU3QsRm49dm4rWmUuc2Nyb2xsWStRdDt0aGlzLmhvdC5pc1J0bCgpJiYoWnItPURyK1N0KSx0aGlzLmhvdC5pc0x0cigpJiZybitObitEcj5saT9acj1y'@;
put 'bitaZS5zY3JvbGxYLURyLTE6dGhpcy5ob3QuaXNSdGwoKSYmWnI8LShFaS5zY3JvbGxXaWR0aC1FaS5jbGllbnRXaWR0aCkmJihacj1ybitaZS5zY3JvbGxYK1N0KzEpLHZuK19pPm1yJiYoRm4tPV9pLWNyKzEpLHRoaXMuZWRpdG9yLnNldFBvc2l0aW9uKFpyLEZuKSx0aGlzLmVkaXRvci5z'@;
put 'ZXRSZWFkT25seVN0YXRlKHRoaXMuZ2V0Q29tbWVudE1ldGEoXyxULHRBKSl9Y2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybiExO2xldCBhPSExO2NvbnN0IGQ9bC5nZXRUb3BTdGFy'@;
put 'dENvcm5lcigpO3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGQucm93LGQuY29sLHg3KSYmKGE9ITApLGF9dXBkYXRlQ29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKVt3aF07bGV0IGY7aD8oZj15dShoKSxseShmLGQpKTpmPWQsdGhpcy5ob3Qu'@;
put 'c2V0Q2VsbE1ldGEobCxhLHdoLGYpfWdldENvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSk7aWYoaFt3aF0pcmV0dXJuIGhbd2hdW2RdfW9uTW91c2VEb3duKGwpe2lmKHRoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcuX3d0JiYhdGhpcy5wcmV2'@;
put 'ZW50RWRpdG9yQXV0b1N3aXRjaCYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCkpe2NvbnN0IGE9TnAobC50YXJnZXQsIlREIiwiVEJPRFkiKTtsZXQgZD1udWxsO2EmJihkPXRoaXMuaG90LmdldENvb3JkcyhhKSksKCFhfHx0aGlzLnJhbmdlLmZyb20mJmQmJih0aGlzLnJhbmdl'@;
put 'LmZyb20ucm93IT09ZC5yb3d8fHRoaXMucmFuZ2UuZnJvbS5jb2whPT1kLmNvbCkpJiZ0aGlzLmhpZGUoKX19b25Nb3VzZU92ZXIobCl7Y29uc3QgYT1lQS5nZXQodGhpcykse3Jvb3REb2N1bWVudDpkfT10aGlzLmhvdDtpZighKHRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2h8fHRoaXMu'@;
put 'ZWRpdG9yLmlzRm9jdXNlZCgpfHxCbyhsLnRhcmdldCwid3RCb3JkZXIiKXx8YS5jZWxsQmVsb3dDdXJzb3I9PT1sLnRhcmdldCkmJnRoaXMuZWRpdG9yKWlmKGEuY2VsbEJlbG93Q3Vyc29yPWQuZWxlbWVudEZyb21Qb2ludChsLmNsaWVudFgsbC5jbGllbnRZKSx0aGlzLnRhcmdldElzQ2Vs'@;
put 'bFdpdGhDb21tZW50KGwpKXtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuZ2V0Q29vcmRzKGwudGFyZ2V0KSk7dGhpcy5kaXNwbGF5U3dpdGNoLnNob3coaCl9ZWxzZSBWcChsLnRhcmdldCxkKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCkmJnRo'@;
put 'aXMuZGlzcGxheVN3aXRjaC5oaWRlKCl9b25Nb3VzZVVwKCl7dGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMX1vbkFmdGVyUmVuZGVyZXIobCxhKXthW3doXSYmYVt3aF1beDddJiZwaShsLGEuY29tbWVudGVkQ2VsbENsYXNzTmFtZSl9b25FZGl0b3JCbHVyKCl7dGhpcy5zZXRDb21t'@;
put 'ZW50KCl9b25FZGl0b3JNb3VzZURvd24obCl7ZUEuZ2V0KHRoaXMpLnRlbXBFZGl0b3JEaW1lbnNpb25zPXt3aWR0aDp3YShsLnRhcmdldCksaGVpZ2h0OmFsKGwudGFyZ2V0KX19b25FZGl0b3JNb3VzZVVwKGwpe2NvbnN0IGE9ZUEuZ2V0KHRoaXMpLGQ9d2EobC50YXJnZXQpLGg9YWwobC50'@;
put 'YXJnZXQpOyhkIT09YS50ZW1wRWRpdG9yRGltZW5zaW9ucy53aWR0aCsxfHxoIT09YS50ZW1wRWRpdG9yRGltZW5zaW9ucy5oZWlnaHQrMikmJnRoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtzdHlsZTp7d2lkdGg6ZCxoZWln'@;
put 'aHQ6aH19KX1vbkNvbnRleHRNZW51QWRkQ29tbWVudCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNoPSEwLHRoaXMuZGlzcGxheVN3aXRjaC5jYW5jZWxIaWRpbmcoKSx0aGlzLnNldFJhbmdlKHtmcm9tOmwuaGln'@;
put 'aGxpZ2h0fSksdGhpcy5zaG93KCksdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5lZGl0b3IuZm9jdXMoKX1vbkNvbnRleHRNZW51UmVtb3ZlQ29tbWVudCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNoPSEw'@;
put 'LGwuZm9yQWxsKChhLGQpPT57YT49MCYmZD49MCYmdGhpcy5yZW1vdmVDb21tZW50QXRDZWxsKGEsZCwhMSl9KSx0aGlzLmhvdC5yZW5kZXIoKX1vbkNvbnRleHRNZW51TWFrZVJlYWRPbmx5KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3RoaXMucHJldmVudEVk'@;
put 'aXRvckF1dG9Td2l0Y2g9ITAsbC5mb3JBbGwoKGEsZCk9PntpZihhPj0wJiZkPj0wKXtjb25zdCBoPSEhdGhpcy5nZXRDb21tZW50TWV0YShhLGQsdEEpO3RoaXMudXBkYXRlQ29tbWVudE1ldGEoYSxkLHtbdEFdOiFofSl9fSl9YWRkVG9Db250ZXh0TWVudShsKXtjb25zdCBhPSgpPT50aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpPjAmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk+MDtsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LHtrZXk6ImNvbW1lbnRzQWRkRWRpdCIs'@;
put 'bmFtZTooKT0+dGhpcy5jaGVja1NlbGVjdGlvbkNvbW1lbnRzQ29uc2lzdGVuY3koKT90aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFZWKTp0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKE5WKSxjYWxsYmFjazooKT0+dGhpcy5vbkNvbnRleHRNZW51QWRkQ29tbWVudCgpLGRpc2Fi'@;
put 'bGVkOigpPT4hYSgpfHwhKHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpJiYhdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX0se2tleToiY29tbWVudHNSZW1vdmUiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEJWKX0sY2FsbGJhY2s6KCk9'@;
put 'PnRoaXMub25Db250ZXh0TWVudVJlbW92ZUNvbW1lbnQoKSxkaXNhYmxlZDooKT0+IWEoKXx8ISh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSYmIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHtrZXk6ImNvbW1lbnRzUmVhZE9ubHkiLG5hbWUoKXtsZXQgZD10'@;
put 'aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoalYpO3JldHVybiB5aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksKGYsXyk9PntsZXQgVD10aGlzLmdldENlbGxNZXRhKGYsXylbd2hdO2lmKFQmJihUPVRbdEFdKSxUKXJldHVybiEwfSkmJihkPVlmKGQpKSxkfSxjYWxsYmFjazooKT0+dGhp'@;
put 'cy5vbkNvbnRleHRNZW51TWFrZVJlYWRPbmx5KCksZGlzYWJsZWQ6KCk9PiFhKCl8fCEodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkmJiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJnRoaXMuY2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCkpfSl9'@;
put 'Z2V0RGlzcGxheURlbGF5U2V0dGluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtial07aWYodXMobCkpcmV0dXJuIGwuZGlzcGxheURlbGF5fWRlc3Ryb3koKXt0aGlzLmVkaXRvciYmdGhpcy5lZGl0b3IuZGVzdHJveSgpLHRoaXMuZGlzcGxheVN3aXRjaCYmdGhpcy5kaXNw'@;
put 'bGF5U3dpdGNoLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fUYoMTYwMDEpO2NvbnN0IE5yZT1jbGFzcyBNUmV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3Q9bCx0aGlzLmNvbW1hbmRzPXt9LHRoaXMuY29tbW9uQ2FsbGJhY2s9bnVsbH1yZWdpc3RlckNvbW1hbmQobCxhKXt0aGlzLmNvbW1h'@;
put 'bmRzW2xdPWF9c2V0Q29tbW9uQ2FsbGJhY2sobCl7dGhpcy5jb21tb25DYWxsYmFjaz1sfWV4ZWN1dGUobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO2NvbnN0IGY9bC5zcGxpdCgiOiIp'@;
put 'LF89ZlswXSxUPTI9PT1mLmxlbmd0aD9mWzFdOm51bGw7bGV0IFc9dGhpcy5jb21tYW5kc1tfXTtpZighVyl0aHJvdyBuZXcgRXJyb3IoYE1lbnUgY29tbWFuZCAnJHtffScgbm90IGV4aXN0cy5gKTtpZihUJiZXLnN1Ym1lbnUmJihXPWZ1bmN0aW9uIHhSZShjLGwpe2xldCBhO3JldHVybiBE'@;
put 'bihsLGQ9Pntjb25zdCBoPWQua2V5P2Qua2V5LnNwbGl0KCI6Iik6bnVsbDtpZihBcnJheS5pc0FycmF5KGgpJiZoWzFdPT09YylyZXR1cm4gYT1kLCExfSksYX0oVCxXLnN1Ym1lbnUuaXRlbXMpKSwhMD09PVcuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBXLmRpc2FibGVkJiYhMD09'@;
put 'PVcuZGlzYWJsZWQuY2FsbCh0aGlzLmhvdCl8fGJsKFcsInN1Ym1lbnUiKSlyZXR1cm47Y29uc3QgaWU9W107ImZ1bmN0aW9uIj09dHlwZW9mIFcuY2FsbGJhY2smJmllLnB1c2goVy5jYWxsYmFjayksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tbW9uQ2FsbGJhY2smJmllLnB1c2godGhp'@;
put 'cy5jb21tb25DYWxsYmFjayksZC51bnNoaWZ0KGYuam9pbigiOiIpKSxEbihpZSxnZT0+Z2UuYXBwbHkodGhpcy5ob3QsZCkpfX0sdmQ9ImFsaWdubWVudCIsbkE9ImNsZWFyX2NvbHVtbiIsRHk9ImNvbF9sZWZ0IixJeT0iY29sX3JpZ2h0IixMeT0ibWFrZV9yZWFkX29ubHkiLHJBPSJyZWRv'@;
put 'IixSeT0icmVtb3ZlX2NvbCIsaUE9InJlbW92ZV9yb3ciLG9BPSJyb3dfYWJvdmUiLHNBPSJyb3dfYmVsb3ciLE95PSJub19pdGVtcyIsYUE9InVuZG8iLFZyZT1bb0Esc0EsRHksSXksbkEsaUEsUnksYUEsckEsTHksdmQsZ3MsT3ldLEJyZT17W2dzXTpmdW5jdGlvbiBjUmUoKXtyZXR1cm57'@;
put 'bmFtZTpnc319LFtPeV06ZnVuY3Rpb24gRlJlKCl7cmV0dXJue2tleTpPeSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfVil9LGRpc2FibGVkOiEwLGlzQ29tbWFuZDohMX19LFtvQV06ZnVuY3Rpb24gT1JlKCl7cmV0dXJue2tleTpvQSxuYW1lKCl7cmV0dXJuIHRo'@;
put 'aXMuZ2V0VHJhbnNsYXRlZFBocmFzZShiVil9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0Fib3ZlIil9LGRpc2FibGVk'@;
put 'KCl7cmV0dXJuIUlnKHRoaXMpfHwodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PXRoaXMuY291bnRSb3dzKCk6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuY291bnRSb3dzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dz'@;
put 'KX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbc0FdOmZ1bmN0aW9uIFBSZSgpe3JldHVybntrZXk6c0EsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeVYpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLmdldEJvdHRvbVJpZ2h0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsYy5yb3csMSwiQ29udGV4dE1lbnUucm93QmVsb3ciKX0sZGlzYWJsZWQoKXtyZXR1cm4hSWcodGhpcyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIo'@;
put 'KSYmKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmNvdW50Um93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW0R5XTpmdW5jdGlvbiBBUmUo'@;
put 'KXtyZXR1cm57a2V5OkR5LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHdWKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfZW5kIjoiaW5zZXJ0'@;
put 'X2NvbF9zdGFydCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtbkxlZnQiKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKXx8IUlnKHRoaXMpfHwodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09'@;
put 'PXRoaXMuY291bnRDb2xzKCk6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuY291bnRDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbSXld'@;
put 'OmZ1bmN0aW9uIFRSZSgpe3JldHVybntrZXk6SXksbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQ1YpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcFJpZ2h0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9j'@;
put 'b2xfc3RhcnQiOiJpbnNlcnRfY29sX2VuZCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtblJpZ2h0Iil9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCl8fCFJZyh0aGlzKXx8IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0'@;
put 'ZWRCeUNvcm5lcigpJiYodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuY291bnRDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbbkFdOmZ1'@;
put 'bmN0aW9uIGtSZSgpe3JldHVybntrZXk6bkEsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQVYpfSxjYWxsYmFjayhjLGwpe2NvbnN0IGE9bFswXS5zdGFydC5jb2wsZD1sWzBdLmVuZC5jb2w7dGhpcy5jb3VudFJvd3MoKSYmdGhpcy5wb3B1bGF0ZUZyb21BcnJheSgw'@;
put 'LGEsW1tudWxsXV0sTWF0aC5tYXgobFswXS5zdGFydC5yb3csbFswXS5lbmQucm93KSxkLCJDb250ZXh0TWVudS5jbGVhckNvbHVtbiIpfSxkaXNhYmxlZCgpe3JldHVybiFJZyh0aGlzKXx8IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfX19LFtpQV06ZnVuY3Rp'@;
put 'b24gUlJlKCl7cmV0dXJue2tleTppQSxuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkKCk7bGV0IGw9MDtpZihjKWlmKGMubGVuZ3RoPjEpbD0xO2Vsc2V7Y29uc3RbYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoU1YsbCl9LGNh'@;
put 'bGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX3JvdyIsZnVuY3Rpb24geERlKGMpe2NvbnN0IGw9ZzcoYyk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9d3kobCksZD1uZXcgU2V0O3JldHVybiBEbihjLF89Pntjb25zdFtULCxXXT1hKF8pLGllPU1hdGgubWF4KFQsMCk7RG4o'@;
put 'QXJyYXkuZnJvbShuZXcgQXJyYXkoVy1pZSsxKSwod2UsRWUpPT5pZStFZSksd2U9PntkLmhhcyh3ZSl8fGQuYWRkKHdlKX0pfSksQWwoQXJyYXkuZnJvbShkKS5zb3J0KChfLFQpPT5fLVQpLChfLFQsVyxpZSk9PigwIT09VyYmVD09PWllW1ctMV0rMT9fW18ubGVuZ3RoLTFdWzFdKz0xOl8u'@;
put 'cHVzaChbVCwxXSksXyksW10pfSh0aGlzLmdldFNlbGVjdGVkKCkpLDEsIkNvbnRleHRNZW51LnJlbW92ZVJvdyIpfSxkaXNhYmxlZCgpe2lmKCFJZyh0aGlzKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRSb3dzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5l'@;
put 'cigpPzA9PT1sOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZVJvd319fSxbUnldOmZ1bmN0aW9uIExSZSgpe3JldHVybntrZXk6UnksbmFtZSgpe2NvbnN0IGM9dGhp'@;
put 'cy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0WyxhLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNVixsKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfY29sIixmdW5jdGlv'@;
put 'biBNRGUoYyl7Y29uc3QgbD1nNyhjKTtpZigwPT09bHx8MT09PWwpcmV0dXJuW107Y29uc3QgYT13eShsKSxkPW5ldyBTZXQ7cmV0dXJuIERuKGMsXz0+e2NvbnN0WyxULCxXXT1hKF8pLGllPU1hdGgubWF4KFQsMCk7RG4oQXJyYXkuZnJvbShuZXcgQXJyYXkoVy1pZSsxKSwod2UsRWUpPT5p'@;
put 'ZStFZSksd2U9PntkLmhhcyh3ZSl8fGQuYWRkKHdlKX0pfSksQWwoQXJyYXkuZnJvbShkKS5zb3J0KChfLFQpPT5fLVQpLChfLFQsVyxpZSk9PigwIT09VyYmVD09PWllW1ctMV0rMT9fW18ubGVuZ3RoLTFdWzFdKz0xOl8ucHVzaChbVCwxXSksXyksW10pfSh0aGlzLmdldFNlbGVjdGVkKCkp'@;
put 'LG51bGwsIkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpfHwhSWcodGhpcykpcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Q29scygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlD'@;
put 'b3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVDb2x1bW59fX0sW2FBXTpmdW5jdGlvbiBIUmUoKXtyZXR1cm57a2V5OmFBLG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHhWKX0sY2FsbGJhY2soKXt0aGlzLnVuZG8oKX0saGlkZGVuKCl7Y29uc3QgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVk'@;
put 'byIpLmlzVW5kb0F2YWlsYWJsZSgpfX19LFtyQV06ZnVuY3Rpb24gSVJlKCl7cmV0dXJue2tleTpyQSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShFVil9LGNhbGxiYWNrKCl7dGhpcy5yZWRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9S'@;
put 'ZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1JlZG9BdmFpbGFibGUoKX19fSxbTHldOmZ1bmN0aW9uIERSZSgpe3JldHVybntrZXk6THksbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBo'@;
put 'cmFzZShrVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT50aGlzLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eWgoYywoYSxkKT0+dGhpcy5nZXRDZWxs'@;
put 'TWV0YShhLGQpLnJlYWRPbmx5KTtEbihjLGE9PnthLmZvckFsbCgoZCxoKT0+e2Q+PTAmJmg+PTAmJnRoaXMuc2V0Q2VsbE1ldGEoZCxoLCJyZWFkT25seSIsIWwpfSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe3JldHVybiEoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5l'@;
put 'cigpJiYwIT09dGhpcy5jb3VudFJvd3MoKSYmMCE9PXRoaXMuY291bnRDb2xzKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYwIT09dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoKX19fSxbdmRdOmZ1bmN0aW9uIEVSZSgpe3JldHVybntrZXk6dmQsbmFtZSgpe3JldHVybiB0aGlz'@;
put 'LmdldFRyYW5zbGF0ZWRQaHJhc2UoelYpfSxkaXNhYmxlZCgpe3JldHVybiAwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCl8fCEodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHN1Ym1lbnU6e2l0'@;
put 'ZW1zOlt7a2V5OmAke3ZkfTpsZWZ0YCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFVWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4'@;
put 'T2YoImh0TGVmdCIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1MZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodExlZnQiO3RoaXMucnVuSG9v'@;
put 'a3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixfLFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06Y2VudGVyYCxuYW1lKCl7'@;
put 'bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFpWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0Q2VudGVyIikpcmV0dXJuITB9KSYmKGM9'@;
put 'WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUxnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0Q2VudGVyIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50Iixs'@;
put 'LGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7dmR9OnJpZ2h0YCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhy'@;
put 'YXNlKFlWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0UmlnaHQiKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBj'@;
put 'PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRSaWdodCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMu'@;
put 'Z2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke3ZkfTpqdXN0aWZ5YCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFdWKTtyZXR1cm4geWgodGhpcy5nZXRT'@;
put 'ZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0SnVzdGlmeSIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCks'@;
put 'bD1MZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixf'@;
put 'LFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixfLFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se25hbWU6Z3N9LHtrZXk6YCR7dmR9OnRvcGAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShHVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChh'@;
put 'LGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodFRvcCIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1MZyhjLChoLGYpPT50aGlzLmdl'@;
put 'dENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRUb3AiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixf'@;
put 'LFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06bWlkZGxlYCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKCRWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxk'@;
put 'KS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0TWlkZGxlIikpcmV0dXJuITB9KSYmKGM9WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUxnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZl'@;
put 'cnRpY2FsIixkPSJodE1pZGRsZSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVk'@;
put 'OiExfSx7a2V5OmAke3ZkfTpib3R0b21gLG5hbWUoKXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocVYpO3JldHVybiB5aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+e2NvbnN0IGg9dGhpcy5nZXRDZWxsTWV0YShhLGQpLmNsYXNzTmFtZTtpZihoJiYtMSE9PWguaW5k'@;
put 'ZXhPZigiaHRCb3R0b20iKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0Qm90dG9tIjt0aGlzLnJ1'@;
put 'bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9XX19fX07ZnVuY3Rpb24ganJlKCl7Y29u'@;
put 'c3QgYz17fTtyZXR1cm4gZHMoQnJlLChsLGEpPT57Y1thXT1sKCl9KSxjfWNvbnN0IHpyZT1jbGFzcyBOUmV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7dGhpcy5ob3Q9bCx0aGlzLnByZWRl'@;
put 'ZmluZWRJdGVtcz1qcmUoKSx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm49YX1zZXRQcmVkZWZpbmVkSXRlbXMobCl7Y29uc3QgYT17fTt0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3RoPTAsZHMobCwoZCxoKT0+e2xldCBmPSIiO2QubmFtZT09PWdzPyhhW2dzXT1kLGY9Z3MpOmlzTmFO'@;
put 'KHBhcnNlSW50KGgsMTApKT8oZC5rZXk9dm9pZCAwPT09ZC5rZXk/aDpkLmtleSxhW2hdPWQsZj1kLmtleSk6KGFbZC5rZXldPWQsZj1kLmtleSksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLnB1c2goZil9KSx0aGlzLnByZWRlZmluZWRJdGVtcz1hfWdldEl0ZW1zKCl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uIFZSZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBkPVtdO2xldCBoPWFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBoJiZoLml0ZW1zP2g9aC5pdGVtczpBcnJheS5pc0FycmF5KGgpfHwoaD1sKSx1cyhoKT9kcyhoLChmLF8pPT57bGV0IFQ9YVsic3RyaW5nIj09dHlwZW9mIGY/ZjpfXTtUfHwoVD1mKSx1cyhmKT9L'@;
put 'bChULGYpOiJzdHJpbmciPT10eXBlb2YgVCYmKFQ9e25hbWU6VH0pLHZvaWQgMD09PVQua2V5JiYoVC5rZXk9XyksZC5wdXNoKFQpfSk6RG4oaCwoZixfKT0+e2xldCBUPWFbZl07IVQmJlZyZS5pbmRleE9mKGYpPj0wfHwoVHx8KFQ9e25hbWU6ZixrZXk6YCR7X31gfSksdXMoZikmJktsKFQs'@;
put 'Ziksdm9pZCAwPT09VC5rZXkmJihULmtleT1fKSxkLnB1c2goVCkpfSksZH0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19O2NsYXNzIGxBe2Nv'@;
put 'bnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9bCx0aGlzLm9wdGlvbnM9YXx8e3BhcmVudDpudWxsLG5hbWU6bnVsbCxjbGFzc05hbWU6IiIsa2VlcEluVmlld3BvcnQ6ITAsc3RhbmRhbG9uZTohMSxtaW5XaWR0aDoyMTUsY29udGFpbmVyOnRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVs'@;
put 'ZW1lbnR9LHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLm9wdGlvbnMubmFtZSksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5ob3RTdWJNZW51cz17fSx0aGlzLnBhcmVudE1lbnU9dGhpcy5vcHRpb25zLnBhcmVu'@;
put 'dHx8bnVsbCx0aGlzLm1lbnVJdGVtcz1udWxsLHRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cz1udWxsLHRoaXMua2V5RXZlbnQ9ITEsdGhpcy5vZmZzZXQ9e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0sdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1udWxsLHRoaXMucmVn'@;
put 'aXN0ZXJFdmVudHMoKX1yZWdpc3RlckV2ZW50cygpe2xldCBsPXRoaXMuaG90LnJvb3RXaW5kb3c7Zm9yKDtsOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsIm1vdXNlZG93biIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGEpKSx0aGlzLmV2ZW50'@;
put 'TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsImNvbnRleHRtZW51IixhPT50aGlzLm9uRG9jdW1lbnRDb250ZXh0TWVudShhKSksbD1leShsKX1zZXRNZW51SXRlbXMobCl7dGhpcy5tZW51SXRlbXM9bH1nZXRTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gdGhpcy5oYXNTZWxlY3Rl'@;
put 'ZEl0ZW0oKT90aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKVswXSk6bnVsbH1oYXNTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCkpfXNldE9mZnNldChsKXt0'@;
put 'aGlzLm9mZnNldFtsXT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MH1pc1N1Yk1lbnUoKXtyZXR1cm4gbnVsbCE9PXRoaXMucGFyZW50TWVudX1vcGVuKCl7dmFyIGw9dGhpczt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZU9wZW4iKSx0'@;
put 'aGlzLmNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0IGE9bU4oRWU9PnRoaXMub3BlblN1Yk1lbnUoRWUpLDMwMCksZD10aGlzLm9wdGlvbnMubWluV2lkdGh8fDIxNTtsZXQgaD0hMSxmPV8xKHRoaXMu'@;
put 'bWVudUl0ZW1zLEVlPT4oRWUua2V5PT09T3kmJihoPSEwKSxmdW5jdGlvbiBnUmUoYyxsKXtyZXR1cm4hYy5oaWRkZW58fCEoImZ1bmN0aW9uIj09dHlwZW9mIGMuaGlkZGVuJiZjLmhpZGRlbi5jYWxsKGwpKX0oRWUsdGhpcy5ob3QpKSk7aWYoZi5sZW5ndGg8MSYmIWgpZi5wdXNoKGpyZSgp'@;
put 'W095XSk7ZWxzZSBpZigwPT09Zi5sZW5ndGgpcmV0dXJuO2Y9ZnVuY3Rpb24gX1JlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpncyxhPWMuc2xpY2UoMCk7cmV0dXJuIGE9UHJlKGEsbCksYT1mdW5jdGlvbiBtUmUoYyxs'@;
put 'KXtsZXQgYT1jLnNsaWNlKDApO3JldHVybiBhLnJldmVyc2UoKSxhPVByZShhLGwpLGEucmV2ZXJzZSgpLGF9KGEsbCksYT1mdW5jdGlvbiB2UmUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gRG4oYywoYSxkKT0+e2Q+MD9sW2wubGVuZ3RoLTFdLm5hbWUhPT1hLm5hbWUmJmwucHVzaChhKTpsLnB1'@;
put 'c2goYSl9KSxsfShhKSxhfShmLGdzKTtsZXQgXz0hMTtjb25zdCBUPXtkYXRhOmYsY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xXaWR0aDpFZT0+S2koRWUpJiZFZTxkP2Q6RWUsYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZWRpdG9y'@;
put 'OiExLGNvcHlQYXN0ZTohMSxtYXhDb2xzOjEsY29sdW1uczpbe2RhdGE6Im5hbWUiLHJlbmRlcmVyOihFZSxaZSxvdCxldCx5dCxrdCk9PnRoaXMubWVudUl0ZW1SZW5kZXJlcihFZSxaZSxvdCxldCx5dCxrdCl9XSxyZW5kZXJBbGxSb3dzOiEwLGZyYWdtZW50U2VsZWN0aW9uOiExLG91dHNp'@;
put 'ZGVDbGlja0Rlc2VsZWN0czohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIixhZnRlck9uQ2VsbE1vdXNlT3ZlcjooRWUsWmUpPT57dGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCk/YShaZS5yb3cpOnRo'@;
put 'aXMub3BlblN1Yk1lbnUoWmUucm93KX0scm93SGVpZ2h0czpFZT0+ZltFZV0ubmFtZT09PWdzPzE6MjMsYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTpFZT0+e0VlLnByZXZlbnREZWZhdWx0KCksd04oKSYmXyYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5jbG9zZSghMCl9LGJlZm9yZU9u'@;
put 'Q2VsbE1vdXNlVXA6RWU9Pnt0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYoXz0hdGhpcy5pc0NvbW1hbmRQYXNzaXZlKHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpLHRoaXMuZXhlY3V0ZUNvbW1hbmQoRWUpKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOkVlPT57KCF3TigpfHwhVXAoRWUpKSYmXyYmdGhp'@;
put 'cy5oYXNTZWxlY3RlZEl0ZW0oKSYmKG0yKCl8fHlOKCk/c2V0VGltZW91dCgoKT0+dGhpcy5jbG9zZSghMCksMzI1KTp0aGlzLmNsb3NlKCEwKSl9LGFmdGVyVW5saXN0ZW46KCk9PnshdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhvdE1lbnUubGlzdGVu'@;
put 'KCl9fTt0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9ITEsdGhpcy5ob3RNZW51PW5ldyBXQih0aGlzLmNvbnRhaW5lcixU'@;
put 'KSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+dGhpcy5vbkFmdGVySW5pdCgpKSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclNlbGVjdGlvbiguLi5hcmd1bWVudHMpfSksdGhpcy5ob3RNZW51Lmlu'@;
put 'aXQoKSx0aGlzLmhvdE1lbnUubGlzdGVuKCk7Y29uc3QgVz10aGlzLmhvdE1lbnUuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksaWU9Vy5hZGRDb250ZXh0KCJtZW51Iiksd2U9e2dyb3VwOiJtZW51IixydW5Pbmx5SWY6RWU9PiExPT09YXkoRWUudGFyZ2V0KXx8ITE9PT10aGlzLmNvbnRhaW5lci5j'@;
put 'b250YWlucyhFZS50YXJnZXQpfTtXLnNldEFjdGl2ZUNvbnRleHROYW1lKCJtZW51IiksaWUuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmtleUV2ZW50PSEwLHRoaXMuY2xvc2UoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siQXJyb3dE'@;
put 'b3duIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgRWU9dGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO3RoaXMua2V5RXZlbnQ9ITAsRWU/dGhpcy5zZWxlY3ROZXh0Q2VsbChFZVswXSxFZVsxXSk6dGhpcy5zZWxlY3RGaXJzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1si'@;
put 'QXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVlP3RoaXMuc2VsZWN0UHJldkNlbGwoRWVbMF0sRWVbMV0pOnRoaXMuc2VsZWN0TGFzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6'@;
put 'W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTtpZih0aGlzLmtleUV2ZW50PSEwLEVlKXtjb25zdCBaZT10aGlzLm9wZW5TdWJNZW51KEVlWzBdKTtaZSYmWmUuc2VsZWN0Rmlyc3RDZWxsKCl9dGhpcy5rZXlFdmVu'@;
put 'dD0hMX19LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVlJiZ0aGlzLmlzU3ViTWVudSgpJiYodGhpcy5jbG9zZSgpLHRoaXMucGFyZW50TWVudSYmdGhpcy5wYXJlbnRN'@;
put 'ZW51LmhvdE1lbnUubGlzdGVuKCkpLHRoaXMua2V5RXZlbnQ9ITF9fSx7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazpFZT0+e2NvbnN0IFplPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLHRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3coWmVb'@;
put 'MF0pLnN1Ym1lbnV8fCh0aGlzLmV4ZWN1dGVDb21tYW5kKEVlKSx0aGlzLmNsb3NlKCEwKSksdGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVl'@;
put 'P3RoaXMuaG90TWVudS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXRoaXMuaG90TWVudS5jb3VudFZpc2libGVSb3dzKCksMCk6dGhpcy5zZWxlY3RGaXJzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlz'@;
put 'LmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxFZT90aGlzLmhvdE1lbnUuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KHRoaXMuaG90TWVudS5jb3VudFZpc2libGVSb3dzKCksMCk6dGhpcy5zZWxlY3RMYXN0Q2VsbCgpLHRoaXMua2V5RXZlbnQ9ITF9fV0sd2Up'@;
put 'LHRoaXMuYmxvY2tNYWluVGFibGVDYWxsYmFja3MoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyT3BlbiIpfWNsb3NlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLmlzT3BlbmVkKCkmJihsJiZ0aGlzLnBhcmVu'@;
put 'dE1lbnU/dGhpcy5wYXJlbnRNZW51LmNsb3NlKCk6KHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMucmVsZWFzZU1haW5UYWJsZUNhbGxiYWNrcygpLHRoaXMuaG90TWVudS5kZXN0cm95KCksdGhpcy5ob3RNZW51PW51bGws'@;
put 'dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpLHRoaXMucGFyZW50TWVudSYmdGhpcy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCkpKX1vcGVu'@;
put 'U3ViTWVudShsKXtpZighdGhpcy5ob3RNZW51KXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTtpZih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSwhYXx8IWZ1bmN0aW9uIGRSZShjKXtyZXR1cm4gQm8oYywiaHRTdWJtZW51Iil9KGEpKXJldHVybiExO2NvbnN0IGQ9'@;
put 'dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxoPW5ldyBsQSh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZTpkLm5hbWUsY2xhc3NOYW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5jb250YWluZXJ9KTty'@;
put 'ZXR1cm4gaC5zZXRNZW51SXRlbXMoZC5zdWJtZW51Lml0ZW1zKSxoLm9wZW4oKSxoLnNldFBvc2l0aW9uKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuaG90U3ViTWVudXNbZC5rZXldPWgsaH1jbG9zZVN1Yk1lbnUobCl7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0'@;
put 'YUF0Um93KGwpLGQ9dGhpcy5ob3RTdWJNZW51c1thLmtleV07ZCYmKGQuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XSl9Y2xvc2VBbGxTdWJNZW51cygpe0RuKHRoaXMuaG90TWVudS5nZXREYXRhKCksKGwsYSk9PnRoaXMuY2xvc2VTdWJNZW51KGEpKX1pc0FsbFN1'@;
put 'Yk1lbnVzQ2xvc2VkKCl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5ndGh9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0'@;
put 'aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZChsKXtpZighdGhpcy5pc09wZW5lZCgpfHwhdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1'@;
put 'cm47Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkSXRlbSgpO2lmKHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0IixhLGwpLHRoaXMuaXNDb21tYW5kUGFzc2l2ZShhKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksaD1kP2Z1bmN0aW9uIHVSZShjKXtyZXR1cm4g'@;
put 'Y3MoYyxsPT4oe3N0YXJ0OmwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxlbmQ6bC5nZXRCb3R0b21FbmRDb3JuZXIoKX0pKX0oZCk6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxI'@;
put 'b29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCl9aXNDb21tYW5kUGFzc2l2ZShsKXtjb25zdHtpc0NvbW1hbmQ6YSxuYW1lOmQsZGlzYWJsZWQ6aCxzdWJtZW51OmZ9PWwsXz0hMD09PWh8fCJmdW5jdGlvbiI9PXR5cGVvZiBoJiYhMD09PWguY2FsbCh0aGlzLmhvdCk7cmV0dXJuITE9'@;
put 'PT1hfHxkPT09Z3N8fCEwPT09X3x8Zn1zZXRQb3NpdGlvbihsKXtjb25zdCBhPW5ldyBjbGFzcyBCUmV7Y29uc3RydWN0b3IobCxhKXtjb25zdCBkPXQ3KGEpLGg9bWcoYSk7bGV0IGYsXyxULFcsaWUsZ2U7dGhpcy5yb290V2luZG93PWEsdGhpcy50eXBlPXRoaXMuZ2V0U291cmNlVHlwZShs'@;
put 'KSwibGl0ZXJhbCI9PT10aGlzLnR5cGU/KGY9cGFyc2VJbnQobC50b3AsMTApLFQ9cGFyc2VJbnQobC5sZWZ0LDEwKSxpZT1sLmhlaWdodHx8MCxnZT1sLndpZHRofHwwLF89ZixXPVQsZis9ZCxUKz1oKToiZXZlbnQiPT09dGhpcy50eXBlJiYoZj1wYXJzZUludChsLnBhZ2VZLDEwKSxUPXBh'@;
put 'cnNlSW50KGwucGFnZVgsMTApLGllPWwudGFyZ2V0LmNsaWVudEhlaWdodCxnZT1sLnRhcmdldC5jbGllbnRXaWR0aCxfPWYtZCxXPVQtaCksdGhpcy50b3A9Zix0aGlzLnRvcFJlbGF0aXZlPV8sdGhpcy5sZWZ0PVQsdGhpcy5sZWZ0UmVsYXRpdmU9Vyx0aGlzLnNjcm9sbFRvcD1kLHRoaXMu'@;
put 'c2Nyb2xsTGVmdD1oLHRoaXMuY2VsbEhlaWdodD1pZSx0aGlzLmNlbGxXaWR0aD1nZX1nZXRTb3VyY2VUeXBlKGwpe2xldCBhPSJsaXRlcmFsIjtyZXR1cm4gbCBpbnN0YW5jZW9mIEV2ZW50JiYoYT0iZXZlbnQiKSxhfWZpdHNBYm92ZShsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZT49bC5v'@;
put 'ZmZzZXRIZWlnaHR9Zml0c0JlbG93KGwpe3JldHVybiB0aGlzLnRvcFJlbGF0aXZlK2wub2Zmc2V0SGVpZ2h0PD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lckhlaWdodCl9Zml0c09uUmlnaHQobCl7'@;
put 'cmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlK3RoaXMuY2VsbFdpZHRoK2wub2Zmc2V0V2lkdGg8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5yb290V2luZG93LmlubmVyV2lkdGgpfWZpdHNPbkxlZnQobCl7cmV0dXJuIHRoaXMu'@;
put 'bGVmdFJlbGF0aXZlPj1sLm9mZnNldFdpZHRofX0obCx0aGlzLmNvbnRhaW5lci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KTt0aGlzLm9wdGlvbnMua2VlcEluVmlld3BvcnQ/KGEuZml0c0JlbG93KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoYSk6YS5m'@;
put 'aXRzQWJvdmUodGhpcy5jb250YWluZXIpP3RoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcihhKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoYSksdGhpcy5ob3QuaXNMdHIoKT90aGlzLnNldEhvcml6b250YWxQb3NpdGlvbkZvckx0cihhKTp0aGlzLnNldEhvcml6b250YWxQb3NpdGlv'@;
put 'bkZvclJ0bChhKSk6KHRoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcihhKSx0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKGEpKX1zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JSdGwobCl7bC5maXRzT25MZWZ0KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZD'@;
put 'dXJzb3IobCk6dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihsKX1zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JMdHIobCl7bC5maXRzT25SaWdodCh0aGlzLmNvbnRhaW5lcik/dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihsKTp0aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZD'@;
put 'dXJzb3IobCl9c2V0UG9zaXRpb25BYm92ZUN1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5hYm92ZStsLnRvcC10aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7dGhpcy5pc1N1Yk1lbnUoKSYmKGE9bC50b3ArbC5jZWxsSGVpZ2h0LXRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCszKSx0'@;
put 'aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9YCR7YX1weGB9c2V0UG9zaXRpb25CZWxvd0N1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5iZWxvdytsLnRvcCsxO3RoaXMuaXNTdWJNZW51KCkmJihhPWwudG9wLTEpLHRoaXMuY29udGFpbmVyLnN0eWxlLnRvcD1gJHthfXB4YH1zZXRQb3NpdGlv'@;
put 'bk9uUmlnaHRPZkN1cnNvcihsKXtsZXQgYT1sLmxlZnQ7aWYodGhpcy5pc1N1Yk1lbnUoKSl7Y29uc3R7cmlnaHQ6ZH09dGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthKz1sLmNlbGxXaWR0aCtkLShsLmxlZnQrbC5jZWxsV2lkdGgpfWVsc2UgYSs9'@;
put 'dGhpcy5vZmZzZXQucmlnaHQ7dGhpcy5jb250YWluZXIuc3R5bGUubGVmdD1gJHthfXB4YH1zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKGwpe2xldCBhPXRoaXMub2Zmc2V0LmxlZnQrbC5sZWZ0LXRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO2lmKHRoaXMuaXNTdWJNZW51KCkpe2NvbnN0'@;
put 'e2xlZnQ6ZH09dGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLT1sLmxlZnQtZH10aGlzLmNvbnRhaW5lci5zdHlsZS5sZWZ0PWAke2F9cHhgfXNlbGVjdEZpcnN0Q2VsbCgpe2NvbnN0IGw9dGhpcy5ob3RNZW51LmdldENlbGwoMCwwKTtYayhsKXx8'@;
put 'SmsobCl8fFFrKGwpP3RoaXMuc2VsZWN0TmV4dENlbGwoMCwwKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbCgwLDApfXNlbGVjdExhc3RDZWxsKCl7Y29uc3QgbD10aGlzLmhvdE1lbnUuY291bnRSb3dzKCktMSxhPXRoaXMuaG90TWVudS5nZXRDZWxsKGwsMCk7WGsoYSl8fEprKGEpfHxRayhh'@;
put 'KT90aGlzLnNlbGVjdFByZXZDZWxsKGwsMCk6KHRoaXMuaG90TWVudS5zZWxlY3RDZWxsKGwsMCx2b2lkIDAsdm9pZCAwLCExKSx0aGlzLmhvdE1lbnUuc2Nyb2xsVmlld3BvcnRUbyhsLDAsITAsITEpKX1zZWxlY3ROZXh0Q2VsbChsLGEpe2NvbnN0IGQ9bCsxLGg9ZDx0aGlzLmhvdE1lbnUu'@;
put 'Y291bnRSb3dzKCk/dGhpcy5ob3RNZW51LmdldENlbGwoZCxhKTpudWxsO2gmJihYayhoKXx8SmsoaCl8fFFrKGgpP3RoaXMuc2VsZWN0TmV4dENlbGwoZCxhKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChkLGEpKX1zZWxlY3RQcmV2Q2VsbChsLGEpe2NvbnN0IGQ9bC0xLGg9ZD49MD90aGlz'@;
put 'LmhvdE1lbnUuZ2V0Q2VsbChkLGEpOm51bGw7aCYmKFhrKGgpfHxKayhoKXx8UWsoaCk/dGhpcy5zZWxlY3RQcmV2Q2VsbChkLGEpOnRoaXMuaG90TWVudS5zZWxlY3RDZWxsKGQsYSkpfW1lbnVJdGVtUmVuZGVyZXIobCxhLGQsaCxmLF8pe2NvbnN0IFQ9bC5nZXRTb3VyY2VEYXRhQXRSb3co'@;
put 'ZCksVz10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksRWU9b3Q9Pm90LmRpc2FibGVTZWxlY3Rpb247bGV0IFplPV87dmFyIG90OyJmdW5jdGlvbiI9PXR5cGVvZiBaZSYmKFplPVplLmNhbGwodGhpcy5ob3QpKSxnMihhKSxwaShXLCJodEl0ZW1XcmFwcGVyIiks'@;
put 'YS5hcHBlbmRDaGlsZChXKSxvdD1ULG5ldyBSZWdFeHAoZ3MsImkiKS50ZXN0KG90Lm5hbWUpP3BpKGEsImh0U2VwYXJhdG9yIik6ImZ1bmN0aW9uIj09dHlwZW9mIFQucmVuZGVyZXI/KHBpKGEsImh0Q3VzdG9tTWVudVJlbmRlcmVyIiksYS5hcHBlbmRDaGlsZChULnJlbmRlcmVyKGwsVyxk'@;
put 'LGgsZixaZSkpKTpnZyhXLFplKSwob3Q9PiEwPT09b3QuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBvdC5kaXNhYmxlZCYmITA9PT1vdC5kaXNhYmxlZC5jYWxsKHRoaXMuaG90KSkoVCk/KHBpKGEsImh0RGlzYWJsZWQiKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVy'@;
put 'KGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKSk6RWUoVCk/KHBpKGEsImh0U2VsZWN0aW9uRGlzYWJsZWQiKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKSk6KG90PT5ibChvdCwic3VibWVu'@;
put 'dSIpKShUKT8ocGkoYSwiaHRTdWJtZW51IiksRWUoVCk/dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVjdENlbGwoKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5zZWxl'@;
put 'Y3RDZWxsKGQsaCx2b2lkIDAsdm9pZCAwLCExLCExKSkpOihXbyhhLFsiaHRTdWJtZW51IiwiaHREaXNhYmxlZCJdKSxFZShUKT90aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKTp0aGlzLmV2ZW50TWFuYWdlci5h'@;
put 'ZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLnNlbGVjdENlbGwoZCxoLHZvaWQgMCx2b2lkIDAsITEsITEpKSl9Y3JlYXRlQ29udGFpbmVyKCl7Y29uc3QgYT10aGlzLm9wdGlvbnMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7bGV0IGgsZD1hcmd1bWVudHMubGVuZ3RoPjAm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZCYmKFJhKGQpJiYoZD1kLmNhbGwodGhpcy5ob3QpLGQ9bnVsbD09PWR8fExhKGQpPyIiOmQudG9TdHJpbmcoKSksZD1kLnJlcGxhY2UoL1teQS16MC05XS9nLCJfIiksZD1gJHt0aGlzLm9wdGlvbnMuY2xh'@;
put 'c3NOYW1lfVN1Yl8ke2R9YCxoPWEucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX0uJHtkfWApKSxofHwoaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHBpKGgsYGh0TWVudSAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9YCksZCYmcGkoaCxkKSx0aGlzLm9wdGlvbnMu'@;
put 'Y29udGFpbmVyLmFwcGVuZENoaWxkKGgpKSxofWJsb2NrTWFpblRhYmxlQ2FsbGJhY2tzKCl7dGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1mdW5jdGlvbigpe30sdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKSx0aGlz'@;
put 'LmhvdC5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayl9cmVsZWFzZU1haW5UYWJsZUNhbGxiYWNrcygpe3RoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2smJih0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHki'@;
put 'LHRoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2spLHRoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKSx0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrPW51bGwpfW9uQWZ0ZXJJbml0KCl7Y29uc3R7d3RUYWJsZTpsfT10'@;
put 'aGlzLmhvdE1lbnUudmlldy5fd3QsYT10aGlzLmhvdE1lbnUuZ2V0U2V0dGluZ3MoKS5kYXRhLGQ9bC5oaWRlci5zdHlsZSxoPWwuaG9sZGVyLnN0eWxlLGY9cGFyc2VJbnQoZC53aWR0aCwxMCksXz1BbChhLChULFcpPT5UKyhXLm5hbWU9PT1ncz8xOjI2KSwwKTtoLndpZHRoPWAke2YrM31w'@;
put 'eGAsaC5oZWlnaHQ9YCR7XyszfXB4YCxkLmhlaWdodD1oLmhlaWdodH1vbkFmdGVyU2VsZWN0aW9uKGwsYSxkLGgsZil7ITE9PT10aGlzLmtleUV2ZW50JiYoZi52YWx1ZT0hMCl9b25Eb2N1bWVudE1vdXNlRG93bihsKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLm9wdGlvbnMuc3RhbmRhbG9u'@;
put 'ZSYmdGhpcy5ob3RNZW51JiYhVnAobC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KXx8KHRoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpfHx0aGlzLmlzU3ViTWVudSgpKSYmIVZwKGwudGFyZ2V0LCIuaHRNZW51IikpJiZ0aGlzLmNsb3NlKCEwKX1vbkRvY3VtZW50Q29udGV4dE1l'@;
put 'bnUobCl7dGhpcy5pc09wZW5lZCgpJiZCbyhsLnRhcmdldCwiaHRDb3JlIikmJlZwKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCkmJmwucHJldmVudERlZmF1bHQoKX19VGEobEEsTzApO2NvbnN0IHlqPWxBLGNBPSJjb250ZXh0TWVudSI7c28uZ2V0U2luZ2xldG9uKCkucmVn'@;
put 'aXN0ZXIoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb250ZXh0TWVudVNob3ciKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudVNob3ciKSxzby5nZXRTaW5nbGV0b24oKS5yZWdp'@;
put 'c3RlcigiYWZ0ZXJDb250ZXh0TWVudUhpZGUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUV4ZWN1dGUiKTtsZXQgWlJlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gY0F9c3RhdGljIGdldCBQTFVH'@;
put 'SU5fUFJJT1JJVFkoKXtyZXR1cm4gNzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW29BLHNBLGdzLER5LEl5LGdzLGlBLFJ5LGdzLGFBLHJBLGdzLEx5LGdzLHZkXX1jb25z'@;
put 'dHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5jb21tYW5kRXhlY3V0b3I9bmV3IE5yZSh0aGlzLmhvdCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCx0aGlzLm1lbnU9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbY0FdfWVuYWJsZVBsdWdpbigpe3ZhciBhPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbY0FdOyJmdW5jdGlvbiI9PXR5cGVvZiBkLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhk'@;
put 'LmNhbGxiYWNrKSx0aGlzLm1lbnU9bmV3IHlqKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0Q29udGV4dE1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjpkLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9y'@;
put 'ZU9wZW4iLCgpPT50aGlzLm9uTWVudUJlZm9yZU9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5vbk1lbnVBZnRlck9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMub25NZW51QWZ0ZXJDbG9zZSgpKSx0'@;
put 'aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gYS5leGVjdXRlQ29tbWFuZC5jYWxsKGEsLi4uZil9KSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGg9PnRoaXMub25BZnRlck9uQ2VsbENvbnRleHRNZW51KGgpKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdp'@;
put 'bigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW9wZW4oYSl7aWYoIXRoaXMubWVudXx8KHRoaXMucHJlcGFyZU1lbnVJdGVtcygpLHRoaXMubWVudS5vcGVu'@;
put 'KCksIXRoaXMubWVudS5pc09wZW5lZCgpKSlyZXR1cm47bGV0IGQ9MCxoPTA7aWYodGhpcy5ob3Qucm9vdERvY3VtZW50IT09dGhpcy5tZW51LmNvbnRhaW5lci5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVsZW1lbnQ6Zn09dGhpcy5ob3Qucm9vdFdpbmRvdyx7dG9wOl8sbGVmdDpUfT1m'@;
put 'LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Q9Xy10NyhhLnZpZXcpLGg9VC1tZyhhLnZpZXcpfWVsc2UgZD0tMSp0Nyh0aGlzLm1lbnUuaG90TWVudS5yb290V2luZG93KSxoPS0xKm1nKHRoaXMubWVudS5ob3RNZW51LnJvb3RXaW5kb3cpO3RoaXMubWVudS5zZXRQb3NpdGlvbih7dG9wOnBh'@;
put 'cnNlSW50KGEucGFnZVksMTApK2QsbGVmdDpwYXJzZUludChhLnBhZ2VYLDEwKStofSl9Y2xvc2UoKXt0aGlzLm1lbnUmJih0aGlzLm1lbnUuY2xvc2UoKSx0aGlzLml0ZW1zRmFjdG9yeT1udWxsKX1leGVjdXRlQ29tbWFuZChhKXtudWxsPT09dGhpcy5pdGVtc0ZhY3RvcnkmJnRoaXMucHJl'@;
put 'cGFyZU1lbnVJdGVtcygpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+MT9kLTE6MCksZj0xO2Y8ZDtmKyspaFtmLTFdPWFyZ3VtZW50c1tmXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGEsLi4uaCl9cHJlcGFyZU1lbnVJdGVtcygpe3RoaXMuaXRlbXNG'@;
put 'YWN0b3J5PW5ldyB6cmUodGhpcy5ob3QsYy5ERUZBVUxUX0lURU1TKTtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbY0FdLGQ9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGEpfTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25z'@;
put 'IixkKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoZC5pdGVtcyk7Y29uc3QgaD10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsaCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhoKSxE'@;
put 'bihoLGY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChmLmtleSxmKSl9b25BZnRlck9uQ2VsbENvbnRleHRNZW51KGEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxoPWQucm93SGVhZGVycyxmPWQuY29sSGVhZGVycyxUPWEudGFyZ2V0O3RoaXMuY2xvc2Uo'@;
put 'KSwhQm8oVCwiaGFuZHNvbnRhYmxlSW5wdXQiKSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLChofHxmfHxmdW5jdGlvbiBfKFcpe3JldHVybiJURCI9PT1XLm5vZGVOYW1lfHwiVEQiPT09Vy5wYXJlbnROb2RlLm5vZGVOYW1lfShUKXx8Qm8oVCwiY3VycmVudCIp'@;
put 'JiZCbyhULCJ3dEJvcmRlciIpKSYmdGhpcy5vcGVuKGEpKX1vbk1lbnVCZWZvcmVPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVTaG93Iix0aGlz'@;
put 'KX1vbk1lbnVBZnRlckNsb3NlKCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVIaWRlIix0aGlzKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fXJldHVybiBj'@;
put 'LlNFUEFSQVRPUj17bmFtZTpnc30sY30pKCk7Y2xhc3MgS1Jle2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhPXt9fXNldERhdGEobCxhKXt0aGlzLmRhdGFbbF09YX1nZXREYXRhKGwpe3JldHVybiB0aGlzLmRhdGFbbF18fHZvaWQgMH19Y2xhc3MgWFJle2NvbnN0cnVjdG9yKCl7dGhpcy5jbGlw'@;
put 'Ym9hcmREYXRhPW5ldyBLUmV9fWNsYXNzIHdqe2NvbnN0cnVjdG9yKGwpe3RoaXMucm9vdERvY3VtZW50PWwuZGVmYXVsdFZpZXc/bDpsLm93bmVyRG9jdW1lbnQsdGhpcy5tYWluRWxlbWVudD1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmxpc3RlbmVyc0NvdW50'@;
put 'PW5ldyBXZWFrU2V0LHRoaXMuY29udGFpbmVyPWx9dXNlU2Vjb25kYXJ5RWxlbWVudCgpe2NvbnN0IGw9ZnVuY3Rpb24gZU9lKGMpe2NvbnN0IGw9ZEEuZ2V0KGMpO2lmKGwpcmV0dXJuIGwucGFyZW50RWxlbWVudHx8Yy5hcHBlbmRDaGlsZChsKSxsO2NvbnN0IGQ9KGMuZGVmYXVsdFZpZXc/'@;
put 'YzpjLm93bmVyRG9jdW1lbnQpLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGRBLnNldChjLGQpLGQuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLGQuY2xhc3NOYW1lPSJIYW5kc29udGFibGVDb3B5UGFzdGUiLGQudGFiSW5kZXg9LTEsZC5hdXRvY29tcGxldGU9'@;
put 'Im9mZiIsZC53cmFwPSJoYXJkIixkLnZhbHVlPSIgIixjLmFwcGVuZENoaWxkKGQpLGR9KHRoaXMuY29udGFpbmVyKTt0aGlzLmxpc3RlbmVyc0NvdW50LmhhcyhsKXx8KHRoaXMubGlzdGVuZXJzQ291bnQuYWRkKGwpLFlyZSh0aGlzLmV2ZW50TWFuYWdlcixsLHRoaXMpKSx0aGlzLm1haW5F'@;
put 'bGVtZW50PWx9c2V0Rm9jdXNhYmxlRWxlbWVudChsKXt0aGlzLmxpc3RlbmVyc0NvdW50LmhhcyhsKXx8KHRoaXMubGlzdGVuZXJzQ291bnQuYWRkKGwpLFlyZSh0aGlzLmV2ZW50TWFuYWdlcixsLHRoaXMpKSx0aGlzLm1haW5FbGVtZW50PWx9Z2V0Rm9jdXNhYmxlRWxlbWVudCgpe3JldHVy'@;
put 'biB0aGlzLm1haW5FbGVtZW50fWZvY3VzKCl7dGhpcy5tYWluRWxlbWVudC52YWx1ZT0iICIsbTIoKXx8ZnRlKHRoaXMubWFpbkVsZW1lbnQpfX1UYSh3aixPMCk7Y29uc3QgdUE9bmV3IFdlYWtNYXAsQ2o9KGMsbCk9PmE9PmwucnVuTG9jYWxIb29rcyhjLGEpO2Z1bmN0aW9uIFlyZShjLGws'@;
put 'YSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsImNvcHkiLENqKCJjb3B5IixhKSksYy5hZGRFdmVudExpc3RlbmVyKGwsImN1dCIsQ2ooImN1dCIsYSkpLGMuYWRkRXZlbnRMaXN0ZW5lcihsLCJwYXN0ZSIsQ2ooInBhc3RlIixhKSl9Y29uc3QgZEE9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gV3JlKGMp'@;
put 'e2lmKCEoYyBpbnN0YW5jZW9mIHdqKSlyZXR1cm47bGV0IGw9dUEuZ2V0KGMuY29udGFpbmVyKTtpZihsPWlzTmFOKGwpPzA6bCxsPjAmJihsLT0xKSxmdW5jdGlvbiBRUmUoYyl7Yy5ldmVudE1hbmFnZXIuY2xlYXIoKX0oYyksbDw9MCl7bD0wO2NvbnN0IGE9ZEEuZ2V0KGMuY29udGFpbmVy'@;
put 'KTthJiZhLnBhcmVudE5vZGUmJihhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksZEEuZGVsZXRlKGMuY29udGFpbmVyKSksYy5tYWluRWxlbWVudD1udWxsfXVBLnNldChjLmNvbnRhaW5lcixsKX1mdW5jdGlvbiBHcmUoYyxsKXskcmUoYyxsKSxsLmFkZChjKX1mdW5jdGlvbiBFNyhjLGws'@;
put 'YSl7JHJlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiAkcmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGhBKGMsbCxhKXtpZighbC5o'@;
put 'YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfWZ1bmN0aW9uIHF1KGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHRPZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMs'@;
put 'cXJlKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIGs3KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gbk9lKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZp'@;
put 'ZWxkIik7bC52YWx1ZT1hfX0oYyxxcmUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIHFyZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIg'@;
put 'WHA9bmV3IFdlYWtNYXAsU2o9bmV3IFdlYWtNYXAsUHk9bmV3IFdlYWtNYXAsTWo9bmV3IFdlYWtNYXAseGo9bmV3IFdlYWtNYXAsRnk9bmV3IFdlYWtNYXAsZkE9bmV3IFdlYWtTZXQsS3JlPW5ldyBXZWFrU2V0O2NsYXNzIHJPZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y291bnRSb3dzOmEsY291'@;
put 'bnRDb2x1bW5zOmQscm93c0xpbWl0OmgsY29sdW1uc0xpbWl0OmYsY291bnRDb2x1bW5IZWFkZXJzOl99PWw7R3JlKHRoaXMsS3JlKSxHcmUodGhpcyxmQSksRTcodGhpcyxYcCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyxTaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAw'@;
put 'fSksRTcodGhpcyxQeSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyxNaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyx4aix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyxGeSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksazcodGhp'@;
put 'cyxTaixhKSxrNyh0aGlzLFB5LGQpLGs3KHRoaXMsTWosaCksazcodGhpcyx4aixmKSxrNyh0aGlzLEZ5LF8pfXNldFNlbGVjdGVkUmFuZ2UobCl7azcodGhpcyxYcCxsKX1nZXRDZWxsc1JhbmdlKCl7aWYoMD09PXF1KHRoaXMsU2opLmNhbGwodGhpcyl8fDA9PT1xdSh0aGlzLFB5KS5jYWxs'@;
put 'KHRoaXMpKXJldHVybiBudWxsO2NvbnN0e3JvdzpsLGNvbDphfT1xdSh0aGlzLFhwKS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6ZCxjb2w6aH09cXUodGhpcyxYcCkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj1oQSh0aGlzLEtyZSxpT2UpLmNhbGwodGhpcyxsLGQpLF89aEEodGhpcyxmQSxF'@;
put 'aikuY2FsbCh0aGlzLGEsaCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmQhPT1mfHxoIT09XyxzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmYsZW5kQ29sOl99fWdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09cXUodGhpcyxQeSkuY2FsbCh0aGlzKXx8MD09PXF1'@;
put 'KHRoaXMsRnkpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PXF1KHRoaXMsWHApLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1xdSh0aGlzLFhwKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPWhBKHRoaXMsZkEsRWopLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1Jhbmdl'@;
put 'VHJpbW1lZDphIT09ZCxzdGFydFJvdzotMSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6ZH19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PXF1KHRoaXMsUHkpLmNhbGwodGhpcyl8fDA9PT1xdSh0aGlzLEZ5KS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDps'@;
put 'fT1xdSh0aGlzLFhwKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09cXUodGhpcyxYcCkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD1oQSh0aGlzLGZBLEVqKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LXF1KHRoaXMsRnkpLmNhbGwodGhp'@;
put 'cyksc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fX1mdW5jdGlvbiBFaihjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrcXUodGhpcyx4aikuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiBpT2UoYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK3F1KHRoaXMs'@;
put 'TWopLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gWHJlKGMpe2NvbnN0IGw9W10sYT1bXTtyZXR1cm4gRG4oYyxkPT57dm8oTWF0aC5taW4oZC5zdGFydFJvdyxkLmVuZFJvdyksTWF0aC5tYXgoZC5zdGFydFJvdyxkLmVuZFJvdyksVz0+ey0xPT09bC5pbmRleE9mKFcpJiZsLnB1c2goVyl9'@;
put 'KSx2byhNYXRoLm1pbihkLnN0YXJ0Q29sLGQuZW5kQ29sKSxNYXRoLm1heChkLnN0YXJ0Q29sLGQuZW5kQ29sKSxXPT57LTE9PT1hLmluZGV4T2YoVykmJmEucHVzaChXKX0pfSkse3Jvd3M6bCxjb2x1bW5zOmF9fWZ1bmN0aW9uIFJnKGMsbCxhKXtKcmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0'@;
put 'aW9uIEpyZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQTcoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHNPZShjKXt2YXIgbD1mdW5j'@;
put 'dGlvbiBhT2UoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBiMShjLGwpe3JldHVybiBmdW5jdGlvbiBjT2UoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLFFy'@;
put 'ZShjLGwsImdldCIpKX1mdW5jdGlvbiBXZihjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIHVPZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVs'@;
put 'ZCIpO2wudmFsdWU9YX19KGMsUXJlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBRcmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9c28uZ2V0'@;
put 'U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29weUxpbWl0Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ3V0Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ3V0'@;
put 'Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVBhc3RlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUGFzdGUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29weSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHki'@;
put 'KTtjb25zdCBwQT0iY29weVBhc3RlIixoT2U9WyJmcmFnbWVudFNlbGVjdGlvbiJdLGVpZT1bJzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iSGFuZHNvbnRhYmxlIi8+JywnPHN0eWxlIHR5cGU9InRleHQvY3NzIj50ZHt3aGl0ZS1zcGFjZTpub3JtYWx9YnJ7bXNvLWRhdGEtcGxh'@;
put 'Y2VtZW50OnNhbWUtY2VsbH08L3N0eWxlPiddLmpvaW4oIiIpO3ZhciBraj1uZXcgV2Vha01hcCxBaj1uZXcgV2Vha01hcCxUaj1uZXcgV2Vha01hcCxUNz1uZXcgV2Vha01hcCxnQT1uZXcgV2Vha01hcCxtQT1uZXcgV2Vha01hcCxENz1uZXcgV2Vha01hcCx0aWU9bmV3IFdlYWtTZXQ7Y2xh'@;
put 'c3MgZk9lIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG9PZShjLGwpe0pyZShjLGwpLGwuYWRkKGMpfSh0aGlzLHRpZSksQTcodGhpcywiY29sdW1uc0xpbWl0IiwxLzApLEE3KHRoaXMsInJvd3NMaW1pdCIsMS8wKSxBNyh0aGlzLCJwYXN0'@;
put 'ZU1vZGUiLCJvdmVyd3JpdGUiKSxBNyh0aGlzLCJ1aUNvbnRhaW5lciIsdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkpLFJnKHRoaXMsa2ose3dyaXRhYmxlOiEwLHZhbHVlOiExfSksUmcodGhpcyxBaix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxSZyh0aGlzLFRqLHt3cml0YWJsZTohMCx2'@;
put 'YWx1ZTohMX0pLFJnKHRoaXMsVDcse3dyaXRhYmxlOiEwLHZhbHVlOiJjZWxscy1vbmx5In0pLFJnKHRoaXMsZ0Ese3dyaXRhYmxlOiEwLHZhbHVlOiExfSksUmcodGhpcyxtQSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxSZyh0aGlzLEQ3LHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgck9lKHtj'@;
put 'b3VudFJvd3M6KCk9PnRoaXMuaG90LmNvdW50Um93cygpLGNvdW50Q29sdW1uczooKT0+dGhpcy5ob3QuY291bnRDb2xzKCkscm93c0xpbWl0OigpPT50aGlzLnJvd3NMaW1pdCxjb2x1bW5zTGltaXQ6KCk9PnRoaXMuY29sdW1uc0xpbWl0LGNvdW50Q29sdW1uSGVhZGVyczooKT0+dGhpcy5o'@;
put 'b3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0pfSksQTcodGhpcywiY29weWFibGVSYW5nZXMiLFtdKSxBNyh0aGlzLCJmb2N1c2FibGVFbGVtZW50Iix2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwQX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVy'@;
put 'bltwQSwuLi5oT2VdfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDgwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwQV19ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtbcEFdOmx9PXRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKCk7dmFyIGEsZDsib2JqZWN0Ij09dHlwZW9mIGwmJih0aGlzLnBhc3RlTW9kZT1udWxsIT09KGE9bC5wYXN0ZU1vZGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5wYXN0ZU1vZGUsdGhpcy5yb3dzTGltaXQ9aXNOYU4obC5yb3dzTGltaXQpP3RoaXMucm93c0xpbWl0Omwucm93c0xpbWl0'@;
put 'LHRoaXMuY29sdW1uc0xpbWl0PWlzTmFOKGwuY29sdW1uc0xpbWl0KT90aGlzLmNvbHVtbnNMaW1pdDpsLmNvbHVtbnNMaW1pdCxXZih0aGlzLGtqLCEhbC5jb3B5Q29sdW1uSGVhZGVycyksV2YodGhpcyxBaiwhIWwuY29weUNvbHVtbkdyb3VwSGVhZGVycyksV2YodGhpcyxUaiwhIWwuY29w'@;
put 'eUNvbHVtbkhlYWRlcnNPbmx5KSx0aGlzLnVpQ29udGFpbmVyPW51bGwhPT0oZD1sLnVpQ29udGFpbmVyKSYmdm9pZCAwIT09ZD9kOnRoaXMudWlDb250YWluZXIpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixoPT50aGlzLm9uQWZ0ZXJDb250ZXh0TWVu'@;
put 'dURlZmF1bHRPcHRpb25zKGgpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VVcCIsKCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlVXAoKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsKCk9PnRoaXMub25BZnRlclNlbGVjdGlvbkVuZCgpKSx0aGlzLmFkZEhvb2so'@;
put 'ImJlZm9yZUtleURvd24iLCgpPT50aGlzLm9uQmVmb3JlS2V5RG93bigpKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQ9ZnVuY3Rpb24gSlJlKGMpe2NvbnN0IGw9bmV3IHdqKGMpO2xldCBhPXVBLmdldChjKTtyZXR1cm4gYT1pc05hTihhKT8wOmEsdUEuc2V0KGMsYSsxKSxsfSh0aGlzLnVpQ29u'@;
put 'dGFpbmVyKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuYWRkTG9jYWxIb29rKCJjb3B5IixoPT50aGlzLm9uQ29weShoKSkuYWRkTG9jYWxIb29rKCJjdXQiLGg9PnRoaXMub25DdXQoaCkpLmFkZExvY2FsSG9vaygicGFzdGUiLGg9PnRoaXMub25QYXN0ZShoKSksc3VwZXIuZW5hYmxlUGx1Z2lu'@;
put 'KCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmZvY3VzYWJsZUVsZW1lbnQmJldyZSh0aGlzLmZv'@;
put 'Y3VzYWJsZUVsZW1lbnQpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1jb3B5KCl7V2YodGhpcyxUNyxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNlbGxzLW9ubHkiKSxXZih0aGlzLGdBLCEwKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxl'@;
put 'RWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpLHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpfWNvcHlDZWxsc09ubHkoKXt0aGlzLmNvcHkoImNlbGxzLW9ubHkiKX1jb3B5Q29sdW1uSGVhZGVyc09ubHkoKXt0aGlzLmNvcHkoImNvbHVtbi1o'@;
put 'ZWFkZXJzLW9ubHkiKX1jb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiKX1jb3B5V2l0aENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWhlYWRlcnMiKX1jdXQoKXtXZih0aGlzLG1BLCEwKSx0aGlzLmdl'@;
put 'dE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpLHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiY3V0Iil9Z2V0UmFuZ2VkQ29weWFibGVEYXRhKGwpe3JldHVybiBDeSh0aGlzLmdldFJhbmdlZERhdGEobCkpfWdldFJhbmdl'@;
put 'ZERhdGEobCl7Y29uc3QgYT1bXSx7cm93czpkLGNvbHVtbnM6aH09WHJlKGwpO3JldHVybiBEbihkLGY9Pntjb25zdCBfPVtdO0RuKGgsVD0+e18ucHVzaChmPDA/dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKFQsZik6dGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGYsVCkpfSksYS5wdXNoKF8pfSks'@;
put 'YX1wYXN0ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2lmKCFsJiYhYSlyZXR1cm47Y29uc3QgZD1uZXcgWFJl'@;
put 'O2wmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixsKSxhJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixhKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMub25QYXN0ZShkKX1zZXRDb3B5YWJsZVRleHQoKXtjb25zdCBsPXRo'@;
put 'aXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2IxKHRoaXMsRDcpLnNldFNlbGVjdGVkUmFuZ2UobCk7Y29uc3QgYT1uZXcgTWFwKFtbImhlYWRlcnMiLG51bGxdLFsiY2VsbHMiLG51bGxdXSk7ImNvbHVtbi1oZWFkZXJzLW9ubHkiPT09YjEodGhpcyxUNyk/YS5z'@;
put 'ZXQoImhlYWRlcnMiLGIxKHRoaXMsRDcpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIj09PWIxKHRoaXMsVDcpP2Euc2V0KCJoZWFkZXJzIixiMSh0aGlzLEQ3KS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOiJ3aXRo'@;
put 'LWNvbHVtbi1ncm91cC1oZWFkZXJzIj09PWIxKHRoaXMsVDcpJiZhLnNldCgiaGVhZGVycyIsYjEodGhpcyxENykuZ2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCkpLGEuc2V0KCJjZWxscyIsYjEodGhpcyxENykuZ2V0Q2VsbHNSYW5nZSgpKSksdGhpcy5jb3B5YWJsZVJhbmdlcz1BcnJheS5m'@;
put 'cm9tKGEudmFsdWVzKCkpLmZpbHRlcihoPT5udWxsIT09aCkubWFwKGg9PntsZXR7c3RhcnRSb3c6ZixzdGFydENvbDpfLGVuZFJvdzpULGVuZENvbDpXfT1oO3JldHVybntzdGFydFJvdzpmLHN0YXJ0Q29sOl8sZW5kUm93OlQsZW5kQ29sOld9fSksdGhpcy5jb3B5YWJsZVJhbmdlcz10aGlz'@;
put 'LmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsdGhpcy5jb3B5YWJsZVJhbmdlcyk7Y29uc3QgZD1hLmdldCgiY2VsbHMiKTtpZihudWxsIT09ZCYmZC5pc1JhbmdlVHJpbW1lZCl7Y29uc3R7c3RhcnRSb3c6aCxzdGFydENvbDpmLGVuZFJvdzpfLGVuZENvbDpUfT1kO3RoaXMu'@;
put 'aG90LnJ1bkhvb2tzKCJhZnRlckNvcHlMaW1pdCIsXy1oKzEsVC1mKzEsdGhpcy5yb3dzTGltaXQsdGhpcy5jb2x1bW5zTGltaXQpfX1nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQg'@;
put 'MD09PWw/dm9pZCAwOmwuVEVYVEFSRUE7YT90aGlzLmZvY3VzYWJsZUVsZW1lbnQuc2V0Rm9jdXNhYmxlRWxlbWVudChhKTp0aGlzLmZvY3VzYWJsZUVsZW1lbnQudXNlU2Vjb25kYXJ5RWxlbWVudCgpfWlzRWRpdG9yT3BlbmVkKCl7dmFyIGw7cmV0dXJuIG51bGw9PT0obD10aGlzLmhvdC5n'@;
put 'ZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNPcGVuZWQoKX1wb3B1bGF0ZVZhbHVlcyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigh'@;
put 'bC5sZW5ndGgpcmV0dXJuO2NvbnN0IGQ9bC5sZW5ndGgsaD1sWzBdLmxlbmd0aCxmPVtdLHtyb3c6Xyxjb2w6VH09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Vyxjb2w6aWV9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IGdlPV8sd2U9VCxFZT1fLFplPVQ7Zm9yKDtmLmxlbmd0aDxk'@;
put 'fHxnZTw9Vzspe2NvbnN0e3NraXBSb3dPblBhc3RlOm90LHZpc3VhbFJvdzpldH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZ2UsVCk7aWYoZ2U9ZXQrMSwhMD09PW90KWNvbnRpbnVlO0VlPWV0LHdlPVQ7Y29uc3QgeXQ9W10sa3Q9Zi5sZW5ndGglZDtmb3IoO3l0Lmxlbmd0aDxofHx3ZTw9aWU7'@;
put 'KXtjb25zdHtza2lwQ29sdW1uT25QYXN0ZTpTdCx2aXN1YWxDb2w6UXR9PXRoaXMuaG90LmdldENlbGxNZXRhKF8sd2UpOyh3ZT1RdCsxLCEwIT09U3QpJiYoWmU9UXQseXQucHVzaChsW2t0XVt5dC5sZW5ndGglaF0pKX1mLnB1c2goeXQpfXJldHVybiB0aGlzLmhvdC5wb3B1bGF0ZUZyb21B'@;
put 'cnJheShfLFQsZix2b2lkIDAsdm9pZCAwLCJDb3B5UGFzdGUucGFzdGUiLHRoaXMucGFzdGVNb2RlKSxbXyxULEVlLFplXX1vbkNvcHkobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFiMSh0aGlzLGdBKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjt0aGlzLnNldENvcHlh'@;
put 'YmxlVGV4dCgpLFdmKHRoaXMsZ0EsITEpO2NvbnN0IGE9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpLGQ9ZnVuY3Rpb24gbE9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5v'@;
put 'bi1pbnN0YW5jZSIpO3JldHVybiBhfSh0aGlzLHRpZSxwT2UpLmNhbGwodGhpcyx0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29weSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzLGQpKXtjb25zdCBmPUN5KGEpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7'@;
put 'Y29uc3QgXz1ETihhKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsZiksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW2VpZSxfXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBi'@;
put 'b2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsZik7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzLGQpfVdmKHRoaXMsVDcsImNlbGxzLW9ubHkiKSxsLnByZXZlbnREZWZhdWx0KCl9b25DdXQobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFi'@;
put 'MSh0aGlzLG1BKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjt0aGlzLnNldENvcHlhYmxlVGV4dCgpLFdmKHRoaXMsbUEsITEpO2NvbnN0IGE9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDdXQiLGEsdGhp'@;
put 'cy5jb3B5YWJsZVJhbmdlcykpe2NvbnN0IGg9Q3koYSk7aWYobCYmbC5jbGlwYm9hcmREYXRhKXtjb25zdCBmPUROKGEpO2wuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixoKSxsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbZWllLGZdLmpvaW4oIiIpKX1l'@;
put 'bHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixoKTt0aGlzLmhvdC5lbXB0eVNlbGVjdGVkQ2VsbHMoIkNvcHlQYXN0ZS5jdXQiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDdXQiLGEsdGhpcy5j'@;
put 'b3B5YWJsZVJhbmdlcyl9bC5wcmV2ZW50RGVmYXVsdCgpfW9uUGFzdGUobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKSlyZXR1cm47bGV0IGE7aWYobCYmbC5wcmV2ZW50RGVmYXVsdCYmbC5wcmV2ZW50RGVmYXVsdCgpLGwmJnR5cGVvZiBsLmNs'@;
put 'aXBib2FyZERhdGE8InUiKXtjb25zdCBUPXJrKGwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L2h0bWwiKSx7QUREX1RBR1M6WyJtZXRhIl0sQUREX0FUVFI6WyJjb250ZW50Il0sRk9SQ0VfQk9EWTohMH0pO2E9VCYmLyg8dGFibGUpfCg8VEFCTEUpL2cudGVzdChUKT9JdGUoVCx0aGlz'@;
put 'LmhvdC5yb290RG9jdW1lbnQpLmRhdGE6bC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnR5cGVvZiB0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGE8InUiJiYoYT10aGlzLmhvdC5yb290V2luZG93LmNs'@;
put 'aXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJihhPWZ1bmN0aW9uIGpEZShjKXtjb25zdCBsPVtbIiJdXTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGw7bGV0IGgsYT0wLGQ9MDtmb3IoO2MubGVuZ3RoPjAmJmghPT1jLmxlbmd0aDspaWYoaD1jLmxl'@;
put 'bmd0aCxjLm1hdGNoKEJuZSkpYz1jLnJlcGxhY2UoQm5lLCIiKSxhKz0xLGxbZF1bYV09IiI7ZWxzZSBpZihjLm1hdGNoKFZuZSkpYz1jLnJlcGxhY2UoVm5lLCIiKSxhPTAsZCs9MSxsW2RdPVsiIl07ZWxzZXtsZXQgZj0iIjtpZihjLnN0YXJ0c1dpdGgoJyInKSl7bGV0IF89MCxUPSEwO2Zv'@;
put 'cig7VDspe2NvbnN0IFc9Yy5zbGljZSgwLDEpOyciJz09PVcmJihfKz0xKSxmKz1XLCgwPT09KGM9Yy5zbGljZSgxKSkubGVuZ3RofHxjLm1hdGNoKC9eW1x0XHJcbl0vKSYmXyUyPT0wKSYmKFQ9ITEpfWY9Zi5yZXBsYWNlKC9eIi8sIiIpLnJlcGxhY2UoLyIkLywiIikucmVwbGFjZSgvWyJd'@;
put 'Ki9nLFc9Pm5ldyBBcnJheShNYXRoLmZsb29yKFcubGVuZ3RoLzIpKS5maWxsKCciJykuam9pbigiIikpfWVsc2V7Y29uc3QgXz1jLm1hdGNoKEJEZSk7Zj1fP19bMF06IiIsYz1jLnNsaWNlKGYubGVuZ3RoKX1sW2RdW2FdPWZ9cmV0dXJuIGx9KGEpKSxhJiYwPT09YS5sZW5ndGh8fCExPT09'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhc3RlIixhLHRoaXMuY29weWFibGVSYW5nZXMpKXJldHVybjtjb25zdFtkLGgsZixfXT10aGlzLnBvcHVsYXRlVmFsdWVzKGEpO3RoaXMuaG90LnNlbGVjdENlbGwoZCxoLE1hdGgubWluKHRoaXMuaG90LmNvdW50Um93cygpLTEsZiksTWF0aC5t'@;
put 'aW4odGhpcy5ob3QuY291bnRDb2xzKCktMSxfKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyl9b25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMobCl7bC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBZUmUo'@;
put 'Yyl7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVFYpfSxjYWxsYmFjaygpe2MuY29weUNlbGxzT25seSgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25z'@;
put 'dCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLGIxKHRoaXMsa2opJiZsLml0ZW1zLnB1c2goZnVuY3Rpb24gJFJlKGMpe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9NYXRoLm1pbihsLmdldFdpZHRoKCktMSwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRFYsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJz'@;
put 'KCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxiMSh0aGlzLEFqKSYmbC5pdGVtcy5wdXNoKGZ1bmN0aW9uIEdSZShjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2dyb3VwX2hlYWRlcnMi'@;
put 'LG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKElWLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVk'@;
put 'KCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhlYWRlcnMpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxiMSh0aGlzLFRqKSYmbC5pdGVtcy5wdXNo'@;
put 'KGZ1bmN0aW9uIFdSZShjKXtyZXR1cm57a2V5OiJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKExW'@;
put 'LGEpfSxjYWxsYmFjaygpe2MuY29weUNvbHVtbkhlYWRlcnNPbmx5KCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFsfHxsLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksbC5pdGVtcy5w'@;
put 'dXNoKGZ1bmN0aW9uIHFSZShjKXtyZXR1cm57a2V5OiJjdXQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFJWKX0sY2FsbGJhY2soKXtjLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4h'@;
put 'MDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpfW9uQWZ0ZXJPbkNlbGxNb3VzZVVwKCl7IXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5m'@;
put 'cmFnbWVudFNlbGVjdGlvbnx8KHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpfW9uQWZ0ZXJTZWxlY3Rpb25FbmQoKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgp'@;
put 'LCghdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVjdGlvbnx8dGhpcy5mb2N1c2FibGVFbGVtZW50LmdldEZvY3VzYWJsZUVsZW1lbnQoKT09PXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50fHwhdXRlKCkpJiYodGhpcy5zZXRDb3B5YWJsZVRleHQoKSx0aGlz'@;
put 'LmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSkpfW9uQmVmb3JlS2V5RG93bigpe2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsYT10aGlzLmhvdC5nZXRBY3Rp'@;
put 'dmVFZGl0b3IoKTshYXx8bCE9PXRoaXMuZm9jdXNhYmxlRWxlbWVudC5nZXRGb2N1c2FibGVFbGVtZW50KCkmJmwhPT1hLnNlbGVjdHx8KHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpfWRlc3Ryb3koKXt0aGlzLmZvY3Vz'@;
put 'YWJsZUVsZW1lbnQmJihXcmUodGhpcy5mb2N1c2FibGVFbGVtZW50KSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQ9bnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBwT2UoYyl7Y29uc3R7cm93czpsfT1YcmUoYyk7bGV0IGE9MDtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoJiYhKGxbZF0+PTAp'@;
put 'O2QrKylhKz0xO3JldHVybntjb2x1bW5IZWFkZXJzQ291bnQ6YX19ZnVuY3Rpb24gbmllKGMsbCl7cmV0dXJuYGJvcmRlcl9yb3cke2N9Y29sJHtsfWB9ZnVuY3Rpb24gRGooYyl7dmFyIGwsYTtyZXR1cm4oS2koYy5zdGFydCl8fEtpKGMubGVmdCkpJiYoYy5zdGFydD1udWxsIT09KGw9Yy5z'@;
put 'dGFydCkmJnZvaWQgMCE9PWw/bDpjLmxlZnQpLChLaShjLmVuZCl8fEtpKGMucmlnaHQpKSYmKGMuZW5kPW51bGwhPT0oYT1jLmVuZCkmJnZvaWQgMCE9PWE/YTpjLnJpZ2h0KSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJpZ2h0LGN9ZnVuY3Rpb24gTnkoYyl7cmV0dXJuIEtpKGMuc3RhcnQp'@;
put 'JiYoYy5sZWZ0PWMuc3RhcnQpLEtpKGMuZW5kKSYmKGMucmlnaHQ9Yy5lbmQpLGN9ZnVuY3Rpb24gSWooYyxsKXtyZXR1cm57aWQ6bmllKGMsbCksYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjMDAwIixjb3JuZXJWaXNpYmxlOiExfSxyb3c6Yyxjb2w6bCx0b3A6e2hpZGU6ITB9LGJvdHRvbTp7'@;
put 'aGlkZTohMH0sc3RhcnQ6e2hpZGU6ITB9LGVuZDp7aGlkZTohMH19fWZ1bmN0aW9uICRmKGMsbCl7bGV0IGE9ITE7cmV0dXJuIERuKGMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGQ9PntkLmZvckFsbCgoaCxmKT0+e2lmKGg8MHx8ZjwwKXJldHVybjtjb25zdCBfPWMuZ2V0Q2VsbE1ldGEoaCxmKS5i'@;
put 'b3JkZXJzO2lmKF8pe2lmKCFsKXJldHVybiBhPSEwLCExO2lmKCFibChfW2xdLCJoaWRlIil8fCExPT09X1tsXS5oaWRlKXJldHVybiBhPSEwLCExfX0pfSksYX1mdW5jdGlvbiB2QShjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj4ke1N0cmluZy5mcm9tQ2hhckNvZGUoMTAwMDMp'@;
put 'fTwvc3Bhbj4ke2N9YH1jb25zdCBiT2U9bmV3IE1hcChbWyJsZWZ0Iiwic3RhcnQiXSxbInJpZ2h0IiwiZW5kIl1dKTtmdW5jdGlvbiB5T2UoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1iT2UuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOmN9ZnVuY3Rpb24gd09lKGMpe3JldHVybntrZXk6ImJv'@;
put 'cmRlcnM6dG9wIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFhWKTtyZXR1cm4gJGYodGhpcywidG9wIikmJihsPXZBKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9JGYodGhpcywidG9wIik7Yy5wcmVwYXJlQm9yZGVyKGEsInRvcCIsZCl9fX1mdW5jdGlvbiBD'@;
put 'T2UoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJzdGFydCI6ImVuZCI7cmV0dXJue2tleToiYm9yZGVyczpyaWdodCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShKVik7cmV0dXJuICRmKHRoaXMsbCkmJihhPXZBKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9'@;
put 'JGYodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24gU09lKGMpe3JldHVybntrZXk6ImJvcmRlcnM6Ym90dG9tIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFFWKTtyZXR1cm4gJGYodGhpcywiYm90dG9tIikmJihsPXZBKGwpKSxsfSxjYWxs'@;
put 'YmFjayhsLGEpe2NvbnN0IGQ9JGYodGhpcywiYm90dG9tIik7Yy5wcmVwYXJlQm9yZGVyKGEsImJvdHRvbSIsZCl9fX1mdW5jdGlvbiBNT2UoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJlbmQiOiJzdGFydCI7cmV0dXJue2tleToiYm9yZGVyczpsZWZ0IixuYW1lKCl7bGV0IGE9dGhpcy5n'@;
put 'ZXRUcmFuc2xhdGVkUGhyYXNlKGVCKTtyZXR1cm4gJGYodGhpcyxsKSYmKGE9dkEoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD0kZih0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9fX1mdW5jdGlvbiB4T2UoYyl7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1l'@;
put 'KCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh0Qil9LGNhbGxiYWNrKGwsYSl7Yy5wcmVwYXJlQm9yZGVyKGEsIm5vQm9yZGVycyIpfSxkaXNhYmxlZCgpe3JldHVybiEkZih0aGlzKX19fWNvbnN0IF9BPSJjdXN0b21Cb3JkZXJzIjtjbGFzcyBET2UgZXh0ZW5kcyBac3tjb25z'@;
put 'dHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRU9lKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBrT2UoYyl7dmFyIGw9ZnVuY3Rpb24gQU9lKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2'@;
put 'ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s'@;
put 'P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h'@;
put 'LGN9KHRoaXMsInNhdmVkQm9yZGVycyIsW10pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfQX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA5MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbX0FdfWVuYWJsZVBsdWdpbigpe3Ro'@;
put 'aXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT50aGlzLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT50aGlzLm9uQWZ0ZXJJbml0KCkpLHN1cGVyLmVuYWJsZVBsdWdp'@;
put 'bigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oaWRlQm9yZGVycygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKSxzdXBlci51cGRhdGVQbHVnaW4o'@;
put 'KX1zZXRCb3JkZXJzKGwsYSl7bGV0IGQ9WyJ0b3AiLCJib3R0b20iLCJzdGFydCIsImVuZCJdLGg9bnVsbDthJiYodGhpcy5jaGVja1NldHRpbmdzQ29oZXNpb24oW2FdKSxkPU9iamVjdC5rZXlzKGEpLGg9RGooYSkpO2NvbnN0IF89d3koZzcobCkpO0RuKGwsVD0+e2NvbnN0W1csaWUsZ2Us'@;
put 'd2VdPV8oVCk7Zm9yKGxldCBFZT1XO0VlPD1nZTtFZSs9MSlmb3IobGV0IFplPWllO1plPD13ZTtaZSs9MSlEbihkLG90PT57dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKEVlLFplLGgseU9lKG90KSl9KX0pLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9Z2V0Qm9yZGVycyhsKXtp'@;
put 'ZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gdGhpcy5zYXZlZEJvcmRlcnM7Y29uc3QgZD13eShnNyhsKSksaD1bXTtyZXR1cm4gRG4obCxmPT57Y29uc3RbXyxULFcsaWVdPWQoZik7Zm9yKGxldCBnZT1fO2dlPD1XO2dlKz0xKWZvcihsZXQgd2U9VDt3ZTw9aWU7d2UrPTEpRG4odGhpcy5z'@;
put 'YXZlZEJvcmRlcnMsRWU9PntFZS5yb3c9PT1nZSYmRWUuY29sPT09d2UmJmgucHVzaChOeShFZSkpfSl9KSxofWNsZWFyQm9yZGVycyhsKXtsP3RoaXMuc2V0Qm9yZGVycyhsKTooRG4odGhpcy5zYXZlZEJvcmRlcnMsYT0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdz'@;
put 'KGEuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoYS5yb3csYS5jb2wsImJvcmRlcnMiKX0pLHRoaXMuc2F2ZWRCb3JkZXJzLmxlbmd0aD0wKX1pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MobCxhKXt0aGlzLmNoZWNrU2F2ZWRCb3JkZXJzKGwp'@;
put 'fHx0aGlzLnNhdmVkQm9yZGVycy5wdXNoKGwpO2NvbnN0IGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxsLmNvbCkpO3RoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zKGwsaCxhKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdo'@;
put 'dC5hZGRDdXN0b21TZWxlY3Rpb24oe2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTpofSl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LmNvdW50Um93cygpLF89dGhpcy5ob3QuY291bnRDb2xzKCk7aWYobD49Znx8YT49XylyZXR1cm47bGV0'@;
put 'IFQ9SWoobCxhKTtkJiYoVD1mdW5jdGlvbiBtT2UoYyxsKXtyZXR1cm4gYmwobCwiYm9yZGVyIikmJmwuYm9yZGVyJiYoYy5ib3JkZXI9bC5ib3JkZXIpLGJsKGwsInRvcCIpJiZLaShsLnRvcCkmJihsLnRvcD8odXMobC50b3ApfHwobC50b3A9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy50'@;
put 'b3A9bC50b3ApOihsLnRvcD17aGlkZTohMH0sYy50b3A9bC50b3ApKSxibChsLCJib3R0b20iKSYmS2kobC5ib3R0b20pJiYobC5ib3R0b20/KHVzKGwuYm90dG9tKXx8KGwuYm90dG9tPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuYm90dG9tPWwuYm90dG9tKToobC5ib3R0b209e2hpZGU6'@;
put 'ITB9LGMuYm90dG9tPWwuYm90dG9tKSksYmwobCwic3RhcnQiKSYmS2kobC5zdGFydCkmJihsLnN0YXJ0Pyh1cyhsLnN0YXJ0KXx8KGwuc3RhcnQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5zdGFydD1sLnN0YXJ0KToobC5zdGFydD17aGlkZTohMH0sYy5zdGFydD1sLnN0YXJ0KSksYmwo'@;
put 'bCwiZW5kIikmJktpKGwuZW5kKSYmKGwuZW5kPyh1cyhsLmVuZCl8fChsLmVuZD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmVuZD1sLmVuZCk6KGwuZW5kPXtoaWRlOiEwfSxjLmVuZD1sLmVuZCkpLGN9KFQsZCksRG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxl'@;
put 'Y3Rpb25zLFc9PntpZihULmlkPT09Vy5zZXR0aW5ncy5pZClyZXR1cm4gT2JqZWN0LmFzc2lnbihXLnNldHRpbmdzLGQpLFQuaWQ9Vy5zZXR0aW5ncy5pZCxULnRvcD1XLnNldHRpbmdzLnRvcCxULmJvdHRvbT1XLnNldHRpbmdzLmJvdHRvbSxULnN0YXJ0PVcuc2V0dGluZ3Muc3RhcnQsVC5l'@;
put 'bmQ9Vy5zZXR0aW5ncy5lbmQsITF9KSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixOeShUKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoVCxoKX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UobCxhKXtjb25zdCBkPU1hdGgubWluKGwudG8ucm93'@;
put 'LHRoaXMuaG90LmNvdW50Um93cygpLTEpLGg9TWF0aC5taW4obC50by5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCktMSk7dm8obC5mcm9tLnJvdyxkLGY9Pnt2byhsLmZyb20uY29sLGgsXz0+e2NvbnN0IFQ9SWooZixfKTtsZXQgVz0wO2Y9PT1sLmZyb20ucm93JiZibChhLCJ0b3AiKSYmKFcr'@;
put 'PTEsVC50b3A9YS50b3ApLGY9PT1sLnRvLnJvdyYmYmwoYSwiYm90dG9tIikmJihXKz0xLFQuYm90dG9tPWEuYm90dG9tKSxfPT09bC5mcm9tLmNvbCYmYmwoYSwic3RhcnQiKSYmKFcrPTEsVC5zdGFydD1hLnN0YXJ0KSxfPT09bC50by5jb2wmJmJsKGEsImVuZCIpJiYoVys9MSxULmVuZD1h'@;
put 'LmVuZCksVz4wJiYodGhpcy5ob3Quc2V0Q2VsbE1ldGEoZixfLCJib3JkZXJzIixOeShUKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoVCkpfSl9KX1yZW1vdmVBbGxCb3JkZXJzKGwsYSl7Y29uc3QgZD1uaWUobCxhKTt0aGlzLnNwbGljZUJvcmRlcihkKSx0aGlzLmNsZWFyQm9y'@;
put 'ZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGwsYSwiYm9yZGVycyIpfXNldEJvcmRlcihsLGEsZCxoKXtsZXQgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpLmJvcmRlcnM7Zj1mJiZ2b2lkIDAh'@;
put 'PT1mLmJvcmRlcj9EaihmKTpJaihsLGEpLGg/KGZbZF09e2hpZGU6ITB9LDQ9PT10aGlzLmNvdW50SGlkZShmKT90aGlzLnJlbW92ZUFsbEJvcmRlcnMobCxhKToodGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9T'@;
put 'ZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLE55KGYpKSkpOihmW2RdPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0sdGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhm'@;
put 'KSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLE55KGYpKSl9cHJlcGFyZUJvcmRlcihsLGEsZCl7RG4obCxoPT57bGV0e3N0YXJ0OmYsZW5kOl99PWg7aWYoZi5yb3c9PT1fLnJvdyYmZi5jb2w9PT1fLmNvbCkibm9Cb3JkZXJzIj09PWE/dGhpcy5yZW1vdmVBbGxCb3JkZXJz'@;
put 'KGYucm93LGYuY29sKTp0aGlzLnNldEJvcmRlcihmLnJvdyxmLmNvbCxhLGQpO2Vsc2Ugc3dpdGNoKGEpe2Nhc2Uibm9Cb3JkZXJzIjp2byhmLmNvbCxfLmNvbCxUPT57dm8oZi5yb3csXy5yb3csVz0+e3RoaXMucmVtb3ZlQWxsQm9yZGVycyhXLFQpfSl9KTticmVhaztjYXNlInRvcCI6dm8o'@;
put 'Zi5jb2wsXy5jb2wsVD0+e3RoaXMuc2V0Qm9yZGVyKGYucm93LFQsYSxkKX0pO2JyZWFrO2Nhc2UiYm90dG9tIjp2byhmLmNvbCxfLmNvbCxUPT57dGhpcy5zZXRCb3JkZXIoXy5yb3csVCxhLGQpfSk7YnJlYWs7Y2FzZSJzdGFydCI6dm8oZi5yb3csXy5yb3csVD0+e3RoaXMuc2V0Qm9yZGVy'@;
put 'KFQsZi5jb2wsYSxkKX0pO2JyZWFrO2Nhc2UiZW5kIjp2byhmLnJvdyxfLnJvdyxUPT57dGhpcy5zZXRCb3JkZXIoVCxfLmNvbCxhLGQpfSl9fSl9Y3JlYXRlQ3VzdG9tQm9yZGVycyhsKXtEbihsLGE9Pntjb25zdCBkPURqKGEpO2EucmFuZ2U/dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3Rv'@;
put 'bUFkZGVkUmFuZ2UoYS5yYW5nZSxkKTp0aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQoYS5yb3csYS5jb2wsZCl9KX1jb3VudEhpZGUobCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsc3RhcnQ6aCxlbmQ6Zn09bDtyZXR1cm4gQWwoW2EsZCxoLGZdLChULFcpPT57bGV0IGllPVQ7cmV0'@;
put 'dXJuIFcmJlcuaGlkZSYmKGllKz0xKSxpZX0sMCl9Y2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwpe2NvbnN0IGE9Y3ModGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGQ9PmQuc2V0dGluZ3MuaWQpLmluZGV4T2YobCk7YT4tMSYmdGhpcy5o'@;
put 'b3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmNsZWFyKCl9Y2xlYXJOdWxsQ2VsbFJhbmdlKCl7RG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLChsLGEpPT57aWYobnVsbD09PWwuY2VsbFJhbmdlKXJldHVybiB0aGlzLmhv'@;
put 'dC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbYV0uZGVzdHJveSgpLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucy5zcGxpY2UoYSwxKSwhMX0pfWhpZGVCb3JkZXJzKCl7RG4odGhpcy5zYXZlZEJvcmRlcnMsbD0+e3RoaXMuY2xlYXJC'@;
put 'b3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCl9KX1zcGxpY2VCb3JkZXIobCl7Y29uc3QgYT1jcyh0aGlzLnNhdmVkQm9yZGVycyxkPT5kLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuc2F2ZWRCb3JkZXJzLnNwbGljZShhLDEpfWNo'@;
put 'ZWNrU2F2ZWRCb3JkZXJzKGwpe2xldCBhPSExO3JldHVybiA0PT09dGhpcy5jb3VudEhpZGUobCk/KHRoaXMuc3BsaWNlQm9yZGVyKGwuaWQpLGE9ITApOkRuKHRoaXMuc2F2ZWRCb3JkZXJzLChoLGYpPT57aWYobC5pZD09PWguaWQpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzW2ZdPWwsYT0h'@;
put 'MCwhMX0pLGF9Y2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGwsYSxkKXtsZXQgaD0hMTtyZXR1cm4gRG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGY9PntpZihsLmlkPT09Zi5zZXR0aW5ncy5pZClyZXR1cm4gZHMoZi5pbnN0YW5j'@;
put 'ZUJvcmRlcnMsXz0+e18udG9nZ2xlSGlkZGVuQ2xhc3MoYSxkKX0pLGg9ITAsITF9KSxofWNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD10aGlzLmNvdW50SGlkZShsKTtsZXQgZj0hMTtyZXR1cm4gND09PWg/KHRoaXMucmVtb3ZlQWxsQm9yZGVycyhsLnJvdyxsLmNvbCks'@;
put 'Zj0hMCk6RG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLF89PntpZihsLmlkPT09Xy5zZXR0aW5ncy5pZClyZXR1cm4gXy52aXN1YWxDZWxsUmFuZ2U9YSxfLmNvbW1pdCgpLGQmJmRzKF8uaW5zdGFuY2VCb3JkZXJzLFQ9PntULmNoYW5nZUJvcmRlclN0'@;
put 'eWxlKGQsbCl9KSxmPSEwLCExfSksZn1jaGFuZ2VCb3JkZXJTZXR0aW5ncygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtfQV07aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgYT15dShsKTt0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihhKSxhLmxlbmd0aHx8KHRoaXMuc2F2'@;
put 'ZWRCb3JkZXJzPWEpLHRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyhhKX1lbHNlIHZvaWQgMCE9PWwmJnRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyh0aGlzLnNhdmVkQm9yZGVycyl9Y2hlY2tTZXR0aW5nc0NvaGVzaW9uKGwpe2NvbnN0IGE9ZnVuY3Rpb24gdk9lKGMpe3JldHVybiBjLnNvbWUo'@;
put 'bD0+S2kobC5sZWZ0KXx8S2kobC5yaWdodCkpfShsKSxkPWZ1bmN0aW9uIF9PZShjKXtyZXR1cm4gYy5zb21lKGw9PktpKGwuc3RhcnQpfHxLaShsLmVuZCkpfShsKTtpZihhJiZkKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIGFuZCAic3RhcnQiLyJlbmQiIG9wdGlvbnMg'@;
put 'c2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpO2lmKHRoaXMuaG90LmlzUnRsKCkmJmEpdGhyb3cgbmV3IEVycm9yKCdUaGUgImxlZnQiLyJyaWdodCIgcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZCBmb3Ig'@;
put 'UlRMLiBQbGVhc2UgdXNlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe3RoaXMuaG90LmdldFNldHRpbmdzKClbX0FdJiZsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LHtrZXk6ImJvcmRlcnMiLG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEtWKX0sZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LHN1Ym1lbnU6e2l0ZW1zOlt3T2UodGhpcyksQ09lKHRoaXMpLFNPZSh0aGlzKSxNT2UodGhpcykseE9lKHRoaXMpXX19KX1vbkFmdGVySW5p'@;
put 'dCgpe3RoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCByaWU9ImRyYWdUb1Njcm9sbCI7Y2xhc3MgTE9lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHJpZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklU'@;
put 'WSgpe3JldHVybiAxMDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYm91bmRhcmllcz1udWxsLHRoaXMuY2FsbGJhY2s9bnVsbCx0aGlzLmxpc3RlbmluZz0hMX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbcmllXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixsPT50aGlzLnNldHVwTGlzdGVuaW5nKGwpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixsPT50aGlzLnNldHVwTGlzdGVu'@;
put 'aW5nKGwpKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlckV2ZW50'@;
put 'cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zZXRCb3VuZGFyaWVzKGwpe3RoaXMuYm91bmRhcmllcz1sfXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1jaGVjayhsLGEpe2xldCBkPTAsaD0wO2E8dGhpcy5ib3VuZGFyaWVzLnRvcD9oPWEtdGhpcy5ib3VuZGFyaWVzLnRvcDphPnRo'@;
put 'aXMuYm91bmRhcmllcy5ib3R0b20mJihoPWEtdGhpcy5ib3VuZGFyaWVzLmJvdHRvbSksbDx0aGlzLmJvdW5kYXJpZXMubGVmdD9kPWwtdGhpcy5ib3VuZGFyaWVzLmxlZnQ6bD50aGlzLmJvdW5kYXJpZXMucmlnaHQmJihkPWwtdGhpcy5ib3VuZGFyaWVzLnJpZ2h0KSx0aGlzLmNhbGxiYWNr'@;
put 'KGQsaCl9bGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITB9dW5saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMX1pc0xpc3RlbmluZygpe3JldHVybiB0aGlzLmxpc3RlbmluZ31yZWdpc3RlckV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5ob3Q7bGV0IGE9bDtmb3IoO2E7KXRoaXMu'@;
put 'ZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwiY29udGV4dG1lbnUiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2V1cCIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1h'@;
put 'bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLGE9ZXkoYSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9c2V0dXBMaXN0ZW5pbmcobCl7aWYoVXAobCkpcmV0dXJuO2NvbnN0IGE9'@;
put 'dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5ob2xkZXI7YSE9PXRoaXMuaG90LnJvb3RXaW5kb3cmJih0aGlzLnNldEJvdW5kYXJpZXMoYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdGhpcy5zZXRDYWxsYmFjaygoZCxoKT0+e2Q8MD9hLnNjcm9sbExlZnQtPTUwOmQ+MCYmKGEuc2Nyb2xs'@;
put 'TGVmdCs9NTApLGg8MD9hLnNjcm9sbFRvcC09MjA6aD4wJiYoYS5zY3JvbGxUb3ArPTIwKX0pLHRoaXMubGlzdGVuKCkpfW9uTW91c2VNb3ZlKGwpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmdGhpcy5jaGVjayhsLmNsaWVudFgsbC5jbGllbnRZKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1z'@;
put 'by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51U2hvdyIp'@;
put 'LHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlIik7Y29uc3QgTGo9ImRyb3Bkb3duTWVudSIsUmo9ImNoYW5nZVR5cGUiO2xldCBPT2U9KCgpPT57Y2xh'@;
put 'c3MgYyBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBMan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxU'@;
put 'X0lURU1TKCl7cmV0dXJuW0R5LEl5LGdzLFJ5LGdzLG5BLGdzLEx5LGdzLHZkXX1jb25zdHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5jb21tYW5kRXhlY3V0b3I9bmV3IE5yZSh0aGlzLmhvdCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCx0'@;
put 'aGlzLm1lbnU9bnVsbCx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGQsaCk9PnRoaXMub25BZnRlckdldENvbEhlYWRlcihkLGgpKX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtMal19ZW5hYmxlUGx1Z2luKCl7dmFyIGE9dGhpcztpZih0'@;
put 'aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuaXRlbXNGYWN0b3J5PW5ldyB6cmUodGhpcy5ob3QsYy5ERUZBVUxUX0lURU1TKTtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbTGpdLGg9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGQpfTt0aGlzLnJlZ2lzdGVyRXZlbnRz'@;
put 'KCksImZ1bmN0aW9uIj09dHlwZW9mIGQuY2FsbGJhY2smJnRoaXMuY29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKGQuY2FsbGJhY2spLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRv'@;
put 'd25NZW51RGVmYXVsdE9wdGlvbnMiLGgpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhoLml0ZW1zKTtjb25zdCBmPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGQpO3RoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bmV3IHlqKHRoaXMuaG90'@;
put 'LHtjbGFzc05hbWU6Imh0RHJvcGRvd25NZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6ZC51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGYpLHRoaXMubWVudS5zZXRN'@;
put 'ZW51SXRlbXMoZiksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PnRoaXMub25NZW51QmVmb3JlT3BlbigpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT50aGlzLm9uTWVudUFmdGVyT3BlbigpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJh'@;
put 'ZnRlckNsb3NlIiwoKT0+dGhpcy5vbk1lbnVBZnRlckNsb3NlKCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgXz1hcmd1bWVudHMubGVuZ3RoLFQ9bmV3IEFycmF5KF8pLFc9MDtXPF87VysrKVRbV109YXJndW1lbnRzW1ddO3Jl'@;
put 'dHVybiBhLmV4ZWN1dGVDb21tYW5kLmNhbGwoYSwuLi5UKX0pLERuKGYsXz0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKF8ua2V5LF8pKX0pfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1'@;
put 'Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RWxlbWVudCwiY2xp'@;
put 'Y2siLGE9PnRoaXMub25UYWJsZUNsaWNrKGEpKX1vcGVuKGEpe3RoaXMubWVudSYmKHRoaXMubWVudS5vcGVuKCksYS53aWR0aCYmdGhpcy5tZW51LnNldE9mZnNldCgibGVmdCIsYS53aWR0aCksdGhpcy5tZW51LnNldFBvc2l0aW9uKGEpKX1jbG9zZSgpe3RoaXMubWVudSYmdGhpcy5tZW51'@;
put 'LmNsb3NlKCl9ZXhlY3V0ZUNvbW1hbmQoYSl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4xP2QtMTowKSxmPTE7ZjxkO2YrKyloW2YtMV09YXJndW1lbnRzW2ZdO3RoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUoYSwuLi5oKX1zZXRMaXN0ZW5pbmcoKXtsZXQg'@;
put 'YT0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO3RoaXMubWVudS5pc09wZW5lZCgpJiYoYT90aGlzLm1lbnUuaG90TWVudS5saXN0ZW4oKTp0aGlzLm1lbnUuaG90TWVudS51bmxpc3RlbigpKX1vblRhYmxlQ2xpY2soYSl7aWYoYS5z'@;
put 'dG9wUHJvcGFnYXRpb24oKSxCbyhhLnRhcmdldCxSaikmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKSl7bGV0IGQ9MCxoPTA7aWYodGhpcy5ob3Qucm9vdERvY3VtZW50IT09dGhpcy5tZW51LmNvbnRhaW5lci5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVsZW1lbnQ6X309dGhpcy5ob3Qucm9v'@;
put 'dFdpbmRvdyx7dG9wOlQsbGVmdDpXfT1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Q9VCxoPVd9Y29uc3QgZj1hLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm9wZW4oe2xlZnQ6Zi5sZWZ0K2gsdG9wOmYudG9wK2EudGFyZ2V0Lm9mZnNldEhlaWdodCszK2Qsd2lkdGg6'@;
put 'Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHR9KX19b25BZnRlckdldENvbEhlYWRlcihhLGQpe2NvbnN0IGg9ZC5wYXJlbnROb2RlO2lmKCFoKXJldHVybjtjb25zdCBmPWgucGFyZW50Tm9kZS5jaGlsZE5vZGVzLF89QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChmLGgpO2lmKGE8MHx8XyE9'@;
put 'PWYubGVuZ3RoLTEpcmV0dXJuO2NvbnN0IFQ9ZC5xdWVyeVNlbGVjdG9yKGAuJHtSan1gKTtpZih0aGlzLmVuYWJsZWQmJlQpcmV0dXJuO2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQoVCYmVC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFQpKTtjb25zdCBXPXRoaXMuaG90LnJvb3REb2N1'@;
put 'bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtXLmNsYXNzTmFtZT1SaixXLnR5cGU9ImJ1dHRvbiIsVy5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGQuZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUoVyxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCl9b25NZW51QmVmb3JlT3Blbigpe3Ro'@;
put 'aXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iix0aGlzKX1vbk1lbnVBZnRlck9wZW4oKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93Iix0aGlzKX1vbk1lbnVBZnRlckNsb3NlKCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImFmdGVyRHJvcGRvd25NZW51SGlkZSIsdGhpcyl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1yZXR1cm4gYy5TRVBBUkFUT1I9e25hbWU6Z3N9LGN9KSgpO2NsYXNzIE9qe3N0YXRpYyBnZXQgREVGQVVM'@;
put 'VF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L3BsYWluIixmaWxlRXh0ZW5zaW9uOiJ0eHQiLGZpbGVuYW1lOiJIYW5kc29udGFibGUgW1lZWVldLVtNTV0tW0REXSIsZW5jb2Rpbmc6InV0Zi04Iixib206ITEsY29sdW1uSGVhZGVyczohMSxyb3dIZWFkZXJzOiExLGV4cG9ydEhp'@;
put 'ZGRlbkNvbHVtbnM6ITEsZXhwb3J0SGlkZGVuUm93czohMSxyYW5nZTpbXX19Y29uc3RydWN0b3IobCxhKXt0aGlzLmRhdGFQcm92aWRlcj1sLHRoaXMub3B0aW9ucz10aGlzLl9tZXJnZU9wdGlvbnMoYSksdGhpcy5kYXRhUHJvdmlkZXIuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpfV9tZXJn'@;
put 'ZU9wdGlvbnMobCl7bGV0IGE9V3UodGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX09QVElPTlMpO2NvbnN0IGQ9bmV3IERhdGU7cmV0dXJuIGE9S2woV3UoT2ouREVGQVVMVF9PUFRJT05TKSxhKSxhPUtsKGEsbCksYS5maWxlbmFtZT1jTihhLmZpbGVuYW1lLHtZWVlZOmQuZ2V0RnVsbFllYXIo'@;
put 'KSxNTTpgJHtkLmdldE1vbnRoKCkrMX1gLnBhZFN0YXJ0KDIsIjAiKSxERDpgJHtkLmdldERhdGUoKX1gLnBhZFN0YXJ0KDIsIjAiKX0pLGF9fWNvbnN0IEhPZT1PaixOT2U9U3RyaW5nLmZyb21DaGFyQ29kZSgxMyksVk9lPVN0cmluZy5mcm9tQ2hhckNvZGUoMzQpLEJPZT1TdHJpbmcuZnJv'@;
put 'bUNoYXJDb2RlKDEwKSxQaj17Y3N2OmNsYXNzIGpPZSBleHRlbmRzIEhPZXtzdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9jc3YiLGZpbGVFeHRlbnNpb246ImNzdiIsYm9tOiEwLGNvbHVtbkRlbGltaXRlcjoiLCIscm93RGVsaW1pdGVyOiJcclxu'@;
put 'In19ZXhwb3J0KCl7Y29uc3QgbD10aGlzLm9wdGlvbnMsYT10aGlzLmRhdGFQcm92aWRlci5nZXREYXRhKCk7bGV0IGQ9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Q29sdW1uSGVhZGVycygpO2NvbnN0IGg9ZC5sZW5ndGg+MCxmPXRoaXMuZGF0YVByb3ZpZGVyLmdldFJvd0hlYWRlcnMoKSxfPWYu'@;
put 'bGVuZ3RoPjA7bGV0IFQ9bC5ib20/U3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3OSk6IiI7cmV0dXJuIGgmJihkPWNzKGQsVz0+dGhpcy5fZXNjYXBlQ2VsbChXLCEwKSksXyYmKFQrPWwuY29sdW1uRGVsaW1pdGVyKSxUKz1kLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIpLFQrPWwucm93RGVsaW1p'@;
put 'dGVyKSxEbihhLChXLGllKT0+e2llPjAmJihUKz1sLnJvd0RlbGltaXRlciksXyYmKFQrPXRoaXMuX2VzY2FwZUNlbGwoZltpZV0pK2wuY29sdW1uRGVsaW1pdGVyKSxUKz1XLm1hcChnZT0+dGhpcy5fZXNjYXBlQ2VsbChnZSkpLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIpfSksVH1fZXNjYXBl'@;
put 'Q2VsbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9X2wobCk7cmV0dXJuIiIhPT1kJiYoYXx8ZC5pbmRleE9mKE5PZSk+PTB8fGQuaW5kZXhPZihWT2UpPj0wfHxkLmluZGV4T2YoQk9lKT49MHx8ZC5pbmRleE9mKHRo'@;
put 'aXMub3B0aW9ucy5jb2x1bW5EZWxpbWl0ZXIpPj0wKSYmKGQ9ZC5yZXBsYWNlKG5ldyBSZWdFeHAoJyInLCJnIiksJyIiJyksZD1gIiR7ZH0iYCksZH19fTtjbGFzcyBHT2UgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iZXhwb3J0RmlsZSJ9c3RhdGljIGdldCBQ'@;
put 'TFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjQwfWlzRW5hYmxlZCgpe3JldHVybiEwfWV4cG9ydEFzU3RyaW5nKGwpe3JldHVybiB0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5leHBv'@;
put 'cnQoKX1leHBvcnRBc0Jsb2IobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUJsb2IodGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkpfWRvd25sb2FkRmlsZShsKXtsZXQgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3R7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmhvdCxmPXRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhKSxfPXRoaXMuX2NyZWF0ZUJsb2IoZiksVD1oLlVSTHx8aC53ZWJraXRV'@;
put 'UkwsVz1kLmNyZWF0ZUVsZW1lbnQoImEiKSxpZT1gJHtmLm9wdGlvbnMuZmlsZW5hbWV9LiR7Zi5vcHRpb25zLmZpbGVFeHRlbnNpb259YDtpZih2b2lkIDAhPT1XLmRvd25sb2FkKXtjb25zdCBnZT1ULmNyZWF0ZU9iamVjdFVSTChfKTtXLnN0eWxlLmRpc3BsYXk9Im5vbmUiLFcuc2V0QXR0'@;
put 'cmlidXRlKCJocmVmIixnZSksVy5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixpZSksZC5ib2R5LmFwcGVuZENoaWxkKFcpLFcuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgiY2xpY2siKSksZC5ib2R5LnJlbW92ZUNoaWxkKFcpLHNldFRpbWVvdXQoKCk9PntULnJldm9rZU9iamVjdFVS'@;
put 'TChnZSl9LDEwMCl9ZWxzZSBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoXyxpZSl9X2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9'@;
put 'O2lmKCFQaltsXSl0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCBmb3JtYXQgdHlwZSAiJHtsfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZnVuY3Rpb24gWk9lKGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUGpbY10/bmV3IFBqW2NdKGwsYSk6bnVsbH0obCxuZXcgY2xhc3Mg'@;
put 'UE9le2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5vcHRpb25zPXt9fXNldE9wdGlvbnMobCl7dGhpcy5vcHRpb25zPWx9Z2V0RGF0YSgpe2NvbnN0e3N0YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZCxlbmRDb2w6aH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksZj10aGlzLm9wdGlv'@;
put 'bnMsXz1bXTtyZXR1cm4gdm8obCxkLFQ9Pntjb25zdCBXPVtdOyFmLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KFQpfHwodm8oYSxoLGllPT57IWYuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oaWUpfHxXLnB1c2godGhpcy5ob3QuZ2V0RGF0'@;
put 'YUF0Q2VsbChULGllKSl9KSxfLnB1c2goVykpfSksX31nZXRSb3dIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMucm93SGVhZGVycyl7Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRSb3dIZWFkZXIoKTt2byhh'@;
put 'LGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coZil8fGwucHVzaChoW2ZdKX0pfXJldHVybiBsfWdldENvbHVtbkhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5IZWFkZXJzKXtjb25zdHtzdGFydENvbDphLGVu'@;
put 'ZENvbDpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldENvbEhlYWRlcigpO3ZvKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9X2dldERhdGFSYW5nZSgp'@;
put 'e2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCktMSxhPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0W2Q9MCxoPTAsZj1hLF89bF09dGhpcy5vcHRpb25zLnJhbmdlO3JldHVybiBkPU1hdGgubWF4KGQsMCksaD1NYXRoLm1heChoLDApLGY9TWF0aC5taW4oZixhKSxfPU1hdGgubWluKF8s'@;
put 'bCkse3N0YXJ0Um93OmQsc3RhcnRDb2w6aCxlbmRSb3c6ZixlbmRDb2w6X319X2lzSGlkZGVuUm93KGwpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1faXNIaWRkZW5Db2x1bW4obCl7cmV0dXJuIHRoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfX0odGhpcy5ob3QpLGEpfV9jcmVhdGVCbG9iKGwpe2xldCBhPW51bGw7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmKGE9bmV3IEJsb2IoW2wuZXhwb3J0KCldLHt0eXBlOmAke2wub3B0aW9ucy5t'@;
put 'aW1lVHlwZX07Y2hhcnNldD0ke2wub3B0aW9ucy5lbmNvZGluZ31gfSkpLGF9fWNsYXNzIGlpZXtjb25zdHJ1Y3RvcihsLGEpe2xldHtpZDpkLHN0YXRlbGVzczpoPSEwfT1hO3RoaXMuaG90PWwsdGhpcy5pZD1kLHRoaXMuZWxlbWVudHM9W10sdGhpcy5oaWRkZW49ITEsdGhpcy5zdGF0ZUlk'@;
put 'PWBGaWx0ZXJzLmNvbXBvbmVudC4ke3RoaXMuaWR9YCx0aGlzLnN0YXRlPWg/bnVsbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQsbmV3IEVrKX1yZXNldCgpe0RuKHRoaXMuZWxlbWVudHMsbD0+bC5yZXNldCgpKX1oaWRlKCl7dGhpcy5oaWRk'@;
put 'ZW49ITB9c2hvdygpe3RoaXMuaGlkZGVuPSExfWlzSGlkZGVuKCl7cmV0dXJuIG51bGw9PT10aGlzLmhvdHx8dGhpcy5oaWRkZW59cmVzdG9yZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZS5nZXRWYWx1ZUF0SW5kZXgobCkpfXNldFN0YXRlKCl7dGhyb3cg'@;
put 'bmV3IEVycm9yKCJUaGUgc3RhdGUgc2V0dGluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1zYXZlU3RhdGUobCl7dGhpcy5zdGF0ZSYmdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmdldFN0YXRlKCkpfWdldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUg'@;
put 'Z2F0aGVyaW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCksdGhpcy5jbGVhckxvY2FsSG9va3MoKSxEbih0aGlzLmVsZW1lbnRzLGw9PmwuZGVzdHJveSgpKSx0aGlzLnN0'@;
put 'YXRlPW51bGwsdGhpcy5lbGVtZW50cz1udWxsLHRoaXMuaG90PW51bGx9fVRhKGlpZSxPMCk7Y29uc3QgYkE9aWllLFZ5PXt9O2Z1bmN0aW9uIEpwKGMsbCl7aWYoIVZ5W2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdHtjb25k'@;
put 'aXRpb246YSxkZXNjcmlwdG9yOmR9PVZ5W2NdO2xldCBoPWw7cmV0dXJuIGQuaW5wdXRWYWx1ZXNEZWNvcmF0b3ImJihoPWQuaW5wdXRWYWx1ZXNEZWNvcmF0b3IoaCkpLGZ1bmN0aW9uKGYpe3JldHVybiBhLmFwcGx5KGYubWV0YS5pbnN0YW5jZSxbXS5jb25jYXQoW2ZdLFtoXSkpfX1mdW5j'@;
put 'dGlvbiBPZyhjKXtpZighVnlbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBWeVtjXS5kZXNjcmlwdG9yfWZ1bmN0aW9uIFhsKGMsbCxhKXthLmtleT1jLFZ5W2NdPXtjb25kaXRpb246bCxkZXNjcmlwdG9yOmF9fWNvbnN0'@;
put 'IFdjPSJub25lIjtYbChXYyxmdW5jdGlvbiAkT2UoKXtyZXR1cm4hMH0se25hbWU6TGssaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiExfSk7Y29uc3QgQnk9ImVtcHR5IjtYbChCeSxmdW5jdGlvbiBxT2UoYyl7cmV0dXJuIHBjKGMudmFsdWUpfSx7bmFtZTpsQixpbnB1dHNDb3VudDow'@;
put 'LHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB5QT0ibm90X2VtcHR5IjtYbCh5QSxmdW5jdGlvbiBLT2UoYyxsKXtyZXR1cm4hSnAoQnksbCkoYyl9LHtuYW1lOmNCLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGp5PSJlcSI7WGwoanksZnVuY3Rpb24gWE9lKGMsbCl7'@;
put 'bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpPT09X2woYSl9LHtuYW1lOnVCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHdBPSJuZXEiO1hsKHdBLGZ1bmN0aW9uIEpPZShjLGwpe3JldHVybiFKcChqeSxs'@;
put 'KShjKX0se25hbWU6ZEIsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksWGwoImd0IixmdW5jdGlvbiBRT2UoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+ZH0se25hbWU6bUIsaW5wdXRz'@;
put 'Q291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksWGwoImd0ZSIsZnVuY3Rpb24gZVBlKGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPj1kfSx7bmFtZTp2QixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRv'@;
put 'cnM6ITB9KSxYbCgibHQiLGZ1bmN0aW9uIHRQZShjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTxkfSx7bmFtZTpfQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxYbCgibHRlIixmdW5j'@;
put 'dGlvbiBuUGUoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8PWR9LHtuYW1lOmJCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEZqPSJkYXRlX2FmdGVyIjtYbChGaixmdW5j'@;
put 'dGlvbiByUGUoYyxsKXtsZXRbYV09bDtjb25zdCBkPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9S28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKT49MH0se25hbWU6Q0IsaW5wdXRzQ291bnQ6MSxzaG93'@;
put 'T3BlcmF0b3JzOiEwfSk7Y29uc3QgSGo9ImRhdGVfYmVmb3JlIjtYbChIaixmdW5jdGlvbiBpUGUoYyxsKXtsZXRbYV09bDtjb25zdCBkPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9S28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFs'@;
put 'aWQoKSkmJmQuZGlmZihoKTw9MH0se25hbWU6U0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgQ0E9ImJldHdlZW4iO1hsKENBLGZ1bmN0aW9uIG9QZShjLGwpe2xldFthLGRdPWwsaD1hLGY9ZDtpZigibnVtZXJpYyI9PT1jLm1ldGEudHlwZSl7Y29uc3QgXz1wYXJz'@;
put 'ZUZsb2F0KGgsMTApLFQ9cGFyc2VGbG9hdChmLDEwKTtoPU1hdGgubWluKF8sVCksZj1NYXRoLm1heChfLFQpfWVsc2UgaWYoImRhdGUiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IF89SnAoSGosW2ZdKSxUPUpwKEZqLFtoXSk7cmV0dXJuIF8oYykmJlQoYyl9cmV0dXJuIGMudmFsdWU+PWgmJmMu'@;
put 'dmFsdWU8PWZ9LHtuYW1lOnlCLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGNpZT0ibm90X2JldHdlZW4iO1hsKGNpZSxmdW5jdGlvbiBzUGUoYyxsKXtyZXR1cm4hSnAoQ0EsbCkoYyl9LHtuYW1lOndCLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2Nv'@;
put 'bnN0IHVpZT0iYmVnaW5zX3dpdGgiO1hsKHVpZSxmdW5jdGlvbiBhUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gX2woYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aChfbChhKSl9LHtuYW1lOmhCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczoh'@;
put 'MH0pLFhsKCJlbmRzX3dpdGgiLGZ1bmN0aW9uIGxQZShjLGwpe2xldFthXT1sO3JldHVybiBfbChjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5lbmRzV2l0aChfbChhKSl9LHtuYW1lOmZCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IE5q'@;
put 'PSJjb250YWlucyI7WGwoTmosZnVuY3Rpb24gY1BlKGMsbCl7bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmluZGV4T2YoX2woYSkpPj0wfSx7bmFtZTpwQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBo'@;
put 'aWU9Im5vdF9jb250YWlucyI7WGwoaGllLGZ1bmN0aW9uIHVQZShjLGwpe3JldHVybiFKcChOaixsKShjKX0se25hbWU6Z0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgZmllPSJkYXRlX3RvbW9ycm93IjtYbChmaWUsZnVuY3Rpb24gZFBlKGMpe2NvbnN0IGw9S28o'@;
put 'Yy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdWJ0cmFjdCgtMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOnhCLGlucHV0c0NvdW50OjB9KTtjb25zdCBwaWU9ImRhdGVfdG9kYXkiO1hsKHBpZSxmdW5jdGlv'@;
put 'biBoUGUoYyl7Y29uc3QgbD1LbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShLbygpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOk1CLGlucHV0c0NvdW50OjB9KTtjb25zdCBnaWU9ImRhdGVfeWVzdGVyZGF5IjtYbChnaWUsZnVu'@;
put 'Y3Rpb24gZlBlKGMpe2NvbnN0IGw9S28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdWJ0cmFjdCgxLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6RUIsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IHZpZT17bnVt'@;
put 'ZXJpYzpbV2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsImd0IiwiZ3RlIiwibHQiLCJsdGUiLENBLGNpZV0sdGV4dDpbV2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsdWllLCJlbmRzX3dpdGgiLGdzLE5qLGhpZV0sZGF0ZTpbV2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsSGosRmosQ0EsZ3MsZmllLHBp'@;
put 'ZSxnaWVdfSxWaj0iYnVpbHQiLEJqPSJidWlsZGluZyIsX2llPVsiY2xpY2siLCJpbnB1dCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwiZm9jdXMiLCJibHVyIiwiY2hhbmdlIl07Y2xhc3MgU0F7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiIiLHZh'@;
put 'bHVlOiIiLHRhZ05hbWU6ImRpdiIsY2hpbGRyZW46W10sd3JhcEl0OiEwfSl9Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1sLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLm9wdGlvbnM9S2woU0EuREVGQVVMVFMsYSksdGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9j'@;
put 'dW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMud3JhcEl0PyJkaXYiOnRoaXMub3B0aW9ucy50YWdOYW1lKSx0aGlzLmJ1aWxkU3RhdGU9bnVsbH1zZXRWYWx1ZShsKXt0aGlzLm9wdGlvbnMudmFsdWU9bCx0aGlzLnVwZGF0ZSgpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMub3B0aW9u'@;
put 'cy52YWx1ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1Caj90aGlzLl9lbGVtZW50OnRoaXMuYnVpbGRTdGF0ZT09PVZqPyh0aGlzLnVwZGF0ZSgpLHRoaXMuX2VsZW1lbnQpOih0aGlzLmJ1aWxkU3RhdGU9QmosdGhpcy5idWlsZCgpLHRoaXMuYnVpbGRTdGF0ZT1W'@;
put 'aix0aGlzLl9lbGVtZW50KX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PVZqfXRyYW5zbGF0ZUlmUG9zc2libGUobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiZsLnN0YXJ0c1dpdGgoJHUpP3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UobCk6bH1idWlsZCgpe2Nv'@;
put 'bnN0IGw9KGEsZCk9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsZCxoPT50aGlzLnJ1bkxvY2FsSG9va3MoZCxoLHRoaXMpKX07aWYodGhpcy5idWlsZFN0YXRlfHwodGhpcy5idWlsZFN0YXRlPUJqKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZwaSh0aGlzLl9lbGVt'@;
put 'ZW50LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMub3B0aW9ucy5jaGlsZHJlbi5sZW5ndGgpRG4odGhpcy5vcHRpb25zLmNoaWxkcmVuLGE9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYS5lbGVtZW50KSk7ZWxzZSBpZih0aGlzLm9wdGlvbnMud3JhcEl0KXtjb25zdCBhPXRoaXMu'@;
put 'aG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy50YWdOYW1lKTtkcyh0aGlzLm9wdGlvbnMsKGQsaCk9Pnt2b2lkIDAhPT1hW2hdJiYiY2xhc3NOYW1lIiE9PWgmJiJ0YWdOYW1lIiE9PWgmJiJjaGlsZHJlbiIhPT1oJiYoYVtoXT10aGlzLnRyYW5zbGF0ZUlmUG9z'@;
put 'c2libGUoZCkpfSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSxEbihfaWUsZD0+bChhLGQpKX1lbHNlIERuKF9pZSxhPT5sKHRoaXMuX2VsZW1lbnQsYSkpfXVwZGF0ZSgpe31yZXNldCgpe3RoaXMub3B0aW9ucy52YWx1ZT0iIix0aGlzLnVwZGF0ZSgpfXNob3coKXt0aGlzLmVsZW1l'@;
put 'bnQuc3R5bGUuZGlzcGxheT0iIn1oaWRlKCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUifWZvY3VzKCl7fWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLmhvdD1udWxsLHRoaXMuX2VsZW1lbnQucGFyZW50'@;
put 'Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbH19VGEoU0EsTzApO2NvbnN0IFFwPVNBLE1BPW5ldyBXZWFrTWFwO2NsYXNzIGpqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBX'@;
put 'dSh7cGxhY2Vob2xkZXI6IiIsdHlwZToidGV4dCIsdGFnTmFtZToiaW5wdXQifSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEtsKGpqLkRFRkFVTFRTLGEpKSxNQS5zZXQodGhpcyx7fSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJj'@;
put 'bGljayIsKCk9PnRoaXMub25DbGljaygpKSx0aGlzLmFkZExvY2FsSG9vaygia2V5dXAiLGw9PnRoaXMub25LZXl1cChsKSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9TUEuZ2V0KHRoaXMpLGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuaW5w'@;
put 'dXQ9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkLHBpKHRoaXMuX2VsZW1lbnQsImh0VUlJbnB1dCIpLHBpKGEsImh0VUlJbnB1dEljb24iKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtjb25zdCBs'@;
put 'PU1BLmdldCh0aGlzKS5pbnB1dDtsLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsbC5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSxsLnZhbHVlPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudmFsdWUpfWZv'@;
put 'Y3VzKCl7dGhpcy5pc0J1aWx0KCkmJk1BLmdldCh0aGlzKS5pbnB1dC5mb2N1cygpfW9uQ2xpY2soKXt9b25LZXl1cChsKXt0aGlzLm9wdGlvbnMudmFsdWU9bC50YXJnZXQudmFsdWV9fWNvbnN0IEk3PWpqLHhBPW5ldyBXZWFrTWFwO2NsYXNzIHpqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBE'@;
put 'RUZBVUxUUygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Iix3cmFwSXQ6ITF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsS2woemouREVGQVVMVFMsYSkpLHhBLnNldCh0aGlzLHt9KSx0aGlzLm1lbnU9bnVsbCx0aGlzLml0ZW1zPVtdLHRoaXMucmVnaXN0ZXJIb29rcygp'@;
put 'fXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygiY2xpY2siLCgpPT50aGlzLm9uQ2xpY2soKSl9c2V0SXRlbXMobCl7dGhpcy5pdGVtcz10aGlzLnRyYW5zbGF0ZU5hbWVzKGwpLHRoaXMubWVudSYmdGhpcy5tZW51LnNldE1lbnVJdGVtcyh0aGlzLml0ZW1zKX10cmFuc2xhdGVO'@;
put 'YW1lcyhsKXtyZXR1cm4gRG4obCxhPT57YS5uYW1lPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShhLm5hbWUpfSksbH1idWlsZCgpe3N1cGVyLmJ1aWxkKCksdGhpcy5tZW51PW5ldyB5aih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFNlbGVjdFVJIGh0RmlsdGVyc0NvbmRpdGlvbnNNZW51Iixr'@;
put 'ZWVwSW5WaWV3cG9ydDohMSxzdGFuZGFsb25lOiEwLGNvbnRhaW5lcjp0aGlzLm9wdGlvbnMubWVudUNvbnRhaW5lcn0pLHRoaXMubWVudS5zZXRNZW51SXRlbXModGhpcy5pdGVtcyk7Y29uc3QgbD1uZXcgUXAodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdENhcHRpb24ifSksYT1u'@;
put 'ZXcgUXAodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdERyb3Bkb3duIn0pLGQ9eEEuZ2V0KHRoaXMpO2QuY2FwdGlvbj1sLGQuY2FwdGlvbkVsZW1lbnQ9bC5lbGVtZW50LGQuZHJvcGRvd249YSxEbihbbCxhXSxoPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGguZWxlbWVudCkp'@;
put 'LHRoaXMubWVudS5hZGRMb2NhbEhvb2soInNlbGVjdCIsaD0+dGhpcy5vbk1lbnVTZWxlY3QoaCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLm9uTWVudUNsb3NlZCgpKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0aGlzLmlzQnVpbHQoKSlyZXR1'@;
put 'cm47bGV0IGw7bD10aGlzLm9wdGlvbnMudmFsdWU/dGhpcy5vcHRpb25zLnZhbHVlLm5hbWU6dGhpcy5tZW51LmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKExrKSx4QS5nZXQodGhpcykuY2FwdGlvbkVsZW1lbnQudGV4dENvbnRlbnQ9bCxzdXBlci51cGRhdGUoKX1vcGVuT3B0aW9ucygpe2Nv'@;
put 'bnN0IGw9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMubWVudSYmKHRoaXMubWVudS5vcGVuKCksdGhpcy5tZW51LnNldFBvc2l0aW9uKHtsZWZ0OnRoaXMuaG90LmlzTHRyKCk/bC5sZWZ0LTU6bC5sZWZ0LTMxLHRvcDpsLnRvcC0xLHdpZHRoOmwud2lkdGgsaGVp'@;
put 'Z2h0OmwuaGVpZ2h0fSkpfWNsb3NlT3B0aW9ucygpe3RoaXMubWVudSYmdGhpcy5tZW51LmNsb3NlKCl9b25NZW51U2VsZWN0KGwpe2wubmFtZSE9PWdzJiYodGhpcy5vcHRpb25zLnZhbHVlPWwsdGhpcy51cGRhdGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsdGhpcy5vcHRpb25z'@;
put 'LnZhbHVlKSl9b25NZW51Q2xvc2VkKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIil9b25DbGljaygpe3RoaXMub3Blbk9wdGlvbnMoKX1kZXN0cm95KCl7dGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCk7Y29uc3R7Y2FwdGlvbjpsLGRyb3Bk'@;
put 'b3duOmF9PXhBLmdldCh0aGlzKTtsJiZsLmRlc3Ryb3koKSxhJiZhLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IGJpZT16aixVaj1jbGFzcyB2UGUgZXh0ZW5kcyBiQXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksdGhpcy5uYW1lPWEu'@;
put 'bmFtZSx0aGlzLmFkZFNlcGFyYXRvcj1hLmFkZFNlcGFyYXRvcix0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGJpZSh0aGlzLmhvdCx7bWVudUNvbnRhaW5lcjphLm1lbnVDb250YWluZXJ9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBJNyh0aGlzLmhvdCx7cGxhY2Vob2xkZXI6UEJ9KSksdGhp'@;
put 'cy5lbGVtZW50cy5wdXNoKG5ldyBJNyh0aGlzLmhvdCx7cGxhY2Vob2xkZXI6RkJ9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygic2VsZWN0IixsPT50aGlzLm9uQ29uZGl0aW9uU2VsZWN0KGwpKSx0'@;
put 'aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLm9uU2VsZWN0VUlDbG9zZWQoKSksRG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksbD0+e2wuYWRkTG9jYWxIb29rKCJrZXlkb3duIixhPT50aGlzLm9uSW5wdXRLZXlEb3duKGEpKX0pfXNl'@;
put 'dFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSwhbClyZXR1cm47Y29uc3QgYT1XdShsLmNvbW1hbmQpO2EubmFtZS5zdGFydHNXaXRoKHlsKSYmKGEubmFtZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGEubmFtZSkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGEpLERu'@;
put 'KGwuYXJncywoZCxoKT0+e2lmKGg+YS5pbnB1dHNDb3VudC0xKXJldHVybiExO2NvbnN0IGY9dGhpcy5nZXRJbnB1dEVsZW1lbnQoaCk7Zi5zZXRWYWx1ZShkKSxmW2EuaW5wdXRzQ291bnQ+aD8ic2hvdyI6ImhpZGUiXSgpLGh8fHNldFRpbWVvdXQoKCk9PmYuZm9jdXMoKSwxMCl9KX1nZXRT'@;
put 'dGF0ZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuZ2V0VmFsdWUoKXx8T2coV2MpLGE9W107cmV0dXJuIERuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLChkLGgpPT57bC5pbnB1dHNDb3VudD5oJiZhLnB1c2goZC5nZXRWYWx1ZSgpKX0pLHtjb21tYW5kOmwsYXJnczphfX11'@;
put 'cGRhdGVTdGF0ZShsLGEpe2NvbnN0IGQ9T2cobD9sLm5hbWU6V2MpO3RoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGEse2NvbW1hbmQ6ZCxhcmdzOmw/bC5hcmdzOltdfSksbHx8RG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksaD0+aC5zZXRWYWx1ZShudWxsKSl9Z2V0U2VsZWN0RWxlbWVu'@;
put 'dCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgYmllKVswXX1nZXRJbnB1dEVsZW1lbnQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnRz'@;
put 'KClbbF19Z2V0SW5wdXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgSTcpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxo'@;
put 'aWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLF8pPT57cGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51Q29uZGl0aW9uIiksdGhpcy5hZGRTZXBhcmF0b3ImJnBpKGEucGFyZW50Tm9kZSwiYm9yZGVyIik7Y29uc3QgVD10aGlzLmhvdC5yb290RG9jdW1l'@;
put 'bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHBpKFQsImh0RmlsdGVyc01lbnVMYWJlbCIpLFQudGV4dENvbnRlbnQ9XyxhLmFwcGVuZENoaWxkKFQpLGEucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fERuKHRoaXMuZWxlbWVudHMsVz0+YS5hcHBlbmRDaGls'@;
put 'ZChXLmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bGV0IGE9W09nKFdjKV07aWYobnVsbCE9PWwpe2NvbnN0e3Zpc3VhbEluZGV4OmR9PWw7YT1mdW5jdGlvbiBtUGUoYyl7Y29uc3QgbD1bXTts'@;
put 'ZXQgYT1jO3JldHVybiB2aWVbYV18fChhPSJ0ZXh0IiksRG4odmllW2FdLGQ9PntsZXQgaDtoPWQ9PT1ncz97bmFtZTpnc306V3UoT2coZCkpLGwucHVzaChoKX0pLGx9KHRoaXMuaG90LmdldERhdGFUeXBlKDAsZCx0aGlzLmhvdC5jb3VudFJvd3MoKSxkKSl9RG4odGhpcy5nZXRJbnB1dEVs'@;
put 'ZW1lbnRzKCksZD0+ZC5oaWRlKCkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGEpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYVswXSl9b25Db25kaXRpb25TZWxlY3QobCl7RG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGEsZCk9'@;
put 'PnthW2wuaW5wdXRzQ291bnQ+ZD8ic2hvdyI6ImhpZGUiXSgpLDA9PT1kJiZzZXRUaW1lb3V0KCgpPT5hLmZvY3VzKCksMTApfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpfW9uU2VsZWN0VUlDbG9zZWQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKX1vbklucHV0'@;
put 'S2V5RG93bihsKXtvNyhsLmtleUNvZGUsIkVOVEVSIik/KHRoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0IiksdjIobCkpOm83KGwua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLHYyKGwpKX19LHp5PXt9O2Z1bmN0aW9uIGJQZShjKXtyZXR1cm4genlb'@;
put 'Y10ubmFtZX1mdW5jdGlvbiBaaihjLGwsYSl7enlbY109e25hbWU6bCxmdW5jOmF9fWNvbnN0IGU0PSJjb25qdW5jdGlvbiI7WmooZTQsVEIsZnVuY3Rpb24gd1BlKGMsbCl7cmV0dXJuIGMuZXZlcnkoYT0+YS5mdW5jKGwpKX0pO2NvbnN0IEVBPSJkaXNqdW5jdGlvbiI7WmooRUEsUmssZnVu'@;
put 'Y3Rpb24gU1BlKGMsbCl7cmV0dXJuIGMuc29tZShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgWWo9ImRpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uIjtaaihZaixSayxmdW5jdGlvbiB4UGUoYyxsKXtpZihjLmxlbmd0aDwzKXRocm93IEVycm9yKCJPcGVyYXRpb24gZG9lc24ndCB3b3JrIG9u'@;
put 'IGxlc3MgdGhlbiB0aHJlZSBjb25kaXRpb25zLiIpO3JldHVybiBjLnNsaWNlKDAsYy5sZW5ndGgtMSkuc29tZShhPT5hLmZ1bmMobCkpJiZjW2MubGVuZ3RoLTFdLmZ1bmMobCl9KTtjb25zdCBrQT1uZXcgV2Vha01hcDtjbGFzcyBXaiBleHRlbmRzIFFwe3N0YXRpYyBnZXQgREVGQVVMVFMo'@;
put 'KXtyZXR1cm4gV3Uoe3R5cGU6InJhZGlvIix0YWdOYW1lOiJpbnB1dCIsY2xhc3NOYW1lOiJodFVJUmFkaW8iLGxhYmVsOnt9fSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEtsKFdqLkRFRkFVTFRTLGEpKSxrQS5zZXQodGhpcyx7fSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9'@;
put 'a0EuZ2V0KHRoaXMpO2wuaW5wdXQ9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkO2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7YS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250'@;
put 'ZW50KSxhLmh0bWxGb3I9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC5odG1sRm9yKSxsLmxhYmVsPWEsdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0aGlzLmlzQnVpbHQoKSlyZXR1cm47Y29uc3QgbD1r'@;
put 'QS5nZXQodGhpcyk7bC5pbnB1dC5jaGVja2VkPXRoaXMub3B0aW9ucy5jaGVja2VkLGwubGFiZWwudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCl9aXNDaGVja2VkKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jaGVja2Vk'@;
put 'fXNldENoZWNrZWQoKXt0aGlzLm9wdGlvbnMuY2hlY2tlZD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLHRoaXMudXBkYXRlKCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYma0EuZ2V0KHRoaXMpLmlucHV0LmZvY3VzKCl9fWNvbnN0'@;
put 'IHlpZT1XaixrUGU9Y2xhc3MgRVBlIGV4dGVuZHMgYkF7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5idWlsZE9wZXJhdG9yc0VsZW1lbnQoKX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRo'@;
put 'aXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihwaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVPcGVyYXRvcnMiKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRl'@;
put 'KCJnaG9zdC10YWJsZSIpfHxEbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpe2NvbnN0IGw9W2U0LEVBXTtEbihsLGE9Pntjb25zdCBkPW5ldyB5aWUodGhpcy5ob3Qse25hbWU6Im9wZXJhdG9yIixsYWJlbDp7'@;
put 'aHRtbEZvcjphLHRleHRDb250ZW50OmJQZShhKX0sdmFsdWU6YSxjaGVja2VkOmE9PT1sWzBdLGlkOmF9KTtkLmFkZExvY2FsSG9vaygiY2hhbmdlIixoPT50aGlzLm9uUmFkaW9JbnB1dENoYW5nZShoKSksdGhpcy5lbGVtZW50cy5wdXNoKGQpfSl9c2V0Q2hlY2tlZChsKXtpZih0aGlzLmVs'@;
put 'ZW1lbnRzLmxlbmd0aDxsKXRocm93IEVycm9yKEFhYFJhZGlvIGJ1dHRvbiB3aXRoIGluZGV4ICR7bH0gZG9lc24ndCBleGlzdC5gKTtEbih0aGlzLmVsZW1lbnRzLChhLGQpPT57YS5zZXRDaGVja2VkKGQ9PT1sKX0pfWdldEFjdGl2ZU9wZXJhdGlvbklkKCl7Y29uc3QgbD10aGlzLmVsZW1l'@;
put 'bnRzLmZpbmQoYT0+YSBpbnN0YW5jZW9mIHlpZSYmYS5pc0NoZWNrZWQoKSk7cmV0dXJuIGw/bC5nZXRWYWx1ZSgpOmU0fWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKX1zZXRTdGF0ZShsKXt0aGlzLnJlc2V0KCksbCYmdGhpcy5nZXRBY3RpdmVPcGVyYXRp'@;
put 'b25JZCgpIT09bCYmRG4odGhpcy5lbGVtZW50cyxhPT57YS5zZXRDaGVja2VkKGEuZ2V0VmFsdWUoKT09PWwpfSl9dXBkYXRlU3RhdGUoKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZTQ7ZD09PVlqJiYoZD1FQSksdGhpcy5z'@;
put 'dGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZCl9cmVzZXQoKXt0aGlzLnNldENoZWNrZWQoMCl9b25SYWRpb0lucHV0Q2hhbmdlKGwpe3RoaXMuc2V0U3RhdGUobC50YXJnZXQudmFsdWUpfX07ZnVuY3Rpb24gVFBlKGMsbCl7bGV0'@;
put 'IGE9YztyZXR1cm4iIj09PWEmJihhPWAoJHtsfSlgKSxhfU50ZSgpO2NvbnN0IEdqPW5ldyBTZXQoWzFdKS5oYXMoMSksRFBlPUdqJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXkuZnJvbTtmdW5jdGlvbiBVeShjKXtsZXQgbD1jO3JldHVybiBHaiYmKGw9bmV3IFNldChsKSksZnVuY3Rpb24o'@;
put 'YSl7bGV0IGQ7cmV0dXJuIGQ9R2o/bC5oYXMoYSk6ISF+bC5pbmRleE9mKGEpLGR9fWZ1bmN0aW9uIENpZShjKXtyZXR1cm4gYz8/IiJ9ZnVuY3Rpb24gJGooYyl7bGV0IGw9YztyZXR1cm4gbD1EUGU/QXJyYXkuZnJvbShuZXcgU2V0KGwpKTpyTihsKSxsPWwuc29ydCgoYSxkKT0+Im51bWJl'@;
put 'ciI9PXR5cGVvZiBhJiYibnVtYmVyIj09dHlwZW9mIGQ/YS1kOmE9PT1kPzA6YT5kPzE6LTEpLGx9ZnVuY3Rpb24gU2llKGMsbCxhLGQpe2NvbnN0IGg9W10sZj1jPT09bDtsZXQgXztyZXR1cm4gZnx8KF89VXkobCkpLERuKGMsVD0+e2xldCBXPSExOyhmfHxfKFQpKSYmKFc9ITApO2NvbnN0'@;
put 'IGllPXtjaGVja2VkOlcsdmFsdWU6VCx2aXN1YWxWYWx1ZTpUUGUoVCxhKX07ZCYmZChpZSksaC5wdXNoKGllKX0pLGh9Y29uc3QgcWo9bmV3IFdlYWtNYXA7Y2xhc3MgS2ogZXh0ZW5kcyBRcHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIFd1KHtocmVmOiIjIix0YWdOYW1lOiJhIn0p'@;
put 'fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxLbChLai5ERUZBVUxUUyxhKSkscWouc2V0KHRoaXMse30pfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxxai5nZXQodGhpcykubGluaz10aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGR9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihxai5nZXQodGhpcyku'@;
put 'bGluay50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnRleHRDb250ZW50KSl9fWNvbnN0IE1pZT1LaixJUGU9bmV3IFdlYWtNYXA7Y2xhc3MgWGogZXh0ZW5kcyBRcHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIFd1KHtjbGFzc05hbWU6Imh0'@;
put 'VUlNdWx0aXBsZVNlbGVjdCIsdmFsdWU6W119KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsS2woWGouREVGQVVMVFMsYSkpLElQZS5zZXQodGhpcyx7fSksdGhpcy5zZWFyY2hJbnB1dD1uZXcgSTcodGhpcy5ob3Qse3BsYWNlaG9sZGVyOk9CLGNsYXNzTmFtZToiaHRVSU11bHRpcGxlU2Vs'@;
put 'ZWN0U2VhcmNoIn0pLHRoaXMuc2VsZWN0QWxsVUk9bmV3IE1pZSh0aGlzLmhvdCx7dGV4dENvbnRlbnQ6REIsY2xhc3NOYW1lOiJodFVJU2VsZWN0QWxsIn0pLHRoaXMuY2xlYXJBbGxVST1uZXcgTWllKHRoaXMuaG90LHt0ZXh0Q29udGVudDpJQixjbGFzc05hbWU6Imh0VUlDbGVhckFsbCJ9'@;
put 'KSx0aGlzLml0ZW1zPVtdLHRoaXMuaXRlbXNCb3g9bnVsbCx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5zZWFyY2hJbnB1dC5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PnRoaXMub25JbnB1dEtleURvd24obCkpLHRoaXMuc2VhcmNoSW5wdXQuYWRkTG9jYWxI'@;
put 'b29rKCJpbnB1dCIsbD0+dGhpcy5vbklucHV0KGwpKSx0aGlzLnNlbGVjdEFsbFVJLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PnRoaXMub25TZWxlY3RBbGxDbGljayhsKSksdGhpcy5jbGVhckFsbFVJLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PnRoaXMub25DbGVhckFsbENsaWNrKGwpKX1z'@;
put 'ZXRJdGVtcyhsKXt0aGlzLml0ZW1zPWwsdGhpcy5pdGVtc0JveCYmdGhpcy5pdGVtc0JveC5sb2FkRGF0YSh0aGlzLml0ZW1zKX1zZXRMb2NhbGUobCl7dGhpcy5sb2NhbGU9bH1nZXRMb2NhbGUoKXtyZXR1cm4gdGhpcy5sb2NhbGV9Z2V0SXRlbXMoKXtyZXR1cm5bLi4udGhpcy5pdGVtc119'@;
put 'Z2V0VmFsdWUoKXtyZXR1cm4gZnVuY3Rpb24gT1BlKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsYT0+e2EuY2hlY2tlZCYmbC5wdXNoKGEudmFsdWUpfSksbH0odGhpcy5pdGVtcyl9aXNTZWxlY3RlZEFsbFZhbHVlcygpe3JldHVybiB0aGlzLml0ZW1zLmxlbmd0aD09PXRoaXMuZ2V0VmFs'@;
put 'dWUoKS5sZW5ndGh9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1uZXcgUXAodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdGlvbkNvbnRyb2xzIixjaGlsZHJlbjpbdGhpcy5zZWxlY3RB'@;
put 'bGxVSSx0aGlzLmNsZWFyQWxsVUldfSk7dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlYXJjaElucHV0LmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpO2NvbnN0IGg9Zj0+e3RoaXMuX2VsZW1l'@;
put 'bnQmJih0aGlzLml0ZW1zQm94JiZ0aGlzLml0ZW1zQm94LmRlc3Ryb3koKSxwaShmLCJodFVJTXVsdGlwbGVTZWxlY3RIb3QiKSx0aGlzLml0ZW1zQm94PW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3RvcihmLHtkYXRhOnRoaXMuaXRlbXMsY29sdW1uczpbe2RhdGE6ImNoZWNrZWQiLHR5cGU6ImNo'@;
put 'ZWNrYm94IixsYWJlbDp7cHJvcGVydHk6InZpc3VhbFZhbHVlIixwb3NpdGlvbjoiYWZ0ZXIifX1dLGJlZm9yZVJlbmRlcmVyOihXLGllLGdlLHdlLEVlLFplKT0+e1cudGl0bGU9WmUuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChpZSxaZS5sYWJlbC5wcm9wZXJ0eSl9LG1heENvbHM6MSxh'@;
put 'dXRvV3JhcENvbDohMCxoZWlnaHQ6MTEwLGNvbFdpZHRoczooKT0+dGhpcy5pdGVtc0JveC5jb250YWluZXIuc2Nyb2xsV2lkdGgtSWMobCksY29weVBhc3RlOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGZpbGxIYW5kbGU6ITEsZnJhZ21lbnRTZWxlY3Rpb246ImNlbGwiLHRh'@;
put 'Yk1vdmVzOntyb3c6MSxjb2w6MH0sbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9KSx0aGlzLml0ZW1zQm94LmluaXQoKSx0aGlzLml0ZW1zQm94LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJF'@;
put 'c2NhcGUiXV0sY2FsbGJhY2s6Vz0+e3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsVyx0aGlzKX0sZ3JvdXA6Im11bHRpcGxlU2VsZWN0Lml0ZW1Cb3gifSkpfTtoKGEpLHNldFRpbWVvdXQoKCk9PmgoYSksMTAwKX1yZXNldCgpe3RoaXMuc2VhcmNoSW5wdXQucmVzZXQoKSx0aGlzLnNl'@;
put 'bGVjdEFsbFVJLnJlc2V0KCksdGhpcy5jbGVhckFsbFVJLnJlc2V0KCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJih0aGlzLml0ZW1zQm94LmxvYWREYXRhKGZ1bmN0aW9uIFJQZShjLGwpe2NvbnN0IGE9VXkobCk7cmV0dXJuIGNzKGMsZD0+KGQuY2hlY2tlZD1hKGQudmFsdWUpLGQpKX0o'@;
put 'dGhpcy5pdGVtcyx0aGlzLm9wdGlvbnMudmFsdWUpKSxzdXBlci51cGRhdGUoKSl9ZGVzdHJveSgpe3RoaXMuaXRlbXNCb3gmJnRoaXMuaXRlbXNCb3guZGVzdHJveSgpLHRoaXMuc2VhcmNoSW5wdXQuZGVzdHJveSgpLHRoaXMuY2xlYXJBbGxVSS5kZXN0cm95KCksdGhpcy5zZWxlY3RBbGxV'@;
put 'SS5kZXN0cm95KCksdGhpcy5zZWFyY2hJbnB1dD1udWxsLHRoaXMuY2xlYXJBbGxVST1udWxsLHRoaXMuc2VsZWN0QWxsVUk9bnVsbCx0aGlzLml0ZW1zQm94PW51bGwsdGhpcy5pdGVtcz1udWxsLHN1cGVyLmRlc3Ryb3koKX1vbklucHV0KGwpe2NvbnN0IGE9bC50YXJnZXQudmFsdWUudG9M'@;
put 'b2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSk7bGV0IGQ7ZD0iIj09PWE/Wy4uLnRoaXMuaXRlbXNdOl8xKHRoaXMuaXRlbXMsaD0+YCR7aC52YWx1ZX1gLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpLmluZGV4T2YoYSk+PTApLHRoaXMuaXRlbXNCb3gubG9hZERh'@;
put 'dGEoZCl9b25JbnB1dEtleURvd24obCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixsLHRoaXMpLHZOKG83LGwua2V5Q29kZSkoIkFSUk9XX0RPV058VEFCIikmJiF0aGlzLml0ZW1zQm94LmlzTGlzdGVuaW5nKCkmJih2MihsKSx0aGlzLml0ZW1zQm94Lmxpc3RlbigpLHRoaXMuaXRl'@;
put 'bXNCb3guc2VsZWN0Q2VsbCgwLDApKX1vblNlbGVjdEFsbENsaWNrKGwpe2NvbnN0IGE9W107bC5wcmV2ZW50RGVmYXVsdCgpLERuKHRoaXMuaXRlbXNCb3guZ2V0U291cmNlRGF0YSgpLChkLGgpPT57ZC5jaGVja2VkPSEwLGEucHVzaChhVihkLGgpWzBdKX0pLHRoaXMuaXRlbXNCb3guc2V0'@;
put 'U291cmNlRGF0YUF0Q2VsbChhKX1vbkNsZWFyQWxsQ2xpY2sobCl7Y29uc3QgYT1bXTtsLnByZXZlbnREZWZhdWx0KCksRG4odGhpcy5pdGVtc0JveC5nZXRTb3VyY2VEYXRhKCksKGQsaCk9PntkLmNoZWNrZWQ9ITEsYS5wdXNoKGFWKGQsaClbMF0pfSksdGhpcy5pdGVtc0JveC5zZXRTb3Vy'@;
put 'Y2VEYXRhQXRDZWxsKGEpfX1jb25zdCB4aWU9WGosUGc9ImJ5X3ZhbHVlIjtYbChQZyxmdW5jdGlvbiBQUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gYShjLnZhbHVlKX0se25hbWU6IkJ5IHZhbHVlIixpbnB1dHNDb3VudDowLGlucHV0VmFsdWVzRGVjb3JhdG9yKGMpe2xldFtsXT1jO3JldHVy'@;
put 'bltVeShsKV19LHNob3dPcGVyYXRvcnM6ITF9KTtjb25zdCBIUGU9Y2xhc3MgRlBlIGV4dGVuZHMgYkF7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyB4aWUodGhpcy5ob3QpKSx0'@;
put 'aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PnRoaXMub25JbnB1dEtleURvd24obCkpfXNldFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSxsJiZsLmNvbW1hbmQua2V5PT09'@;
put 'UGcpe2NvbnN0IGE9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKTthLnNldEl0ZW1zKGwuaXRlbXNTbmFwc2hvdCksYS5zZXRWYWx1ZShsLmFyZ3NbMF0pLGEuc2V0TG9jYWxlKGwubG9jYWxlKX19Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50'@;
put 'KCksYT1sLmdldEl0ZW1zKCk7cmV0dXJue2NvbW1hbmQ6e2tleTpsLmlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXx8IWEubGVuZ3RoP1djOlBnfSxhcmdzOltsLmdldFZhbHVlKCldLGl0ZW1zU25hcHNob3Q6YX19dXBkYXRlU3RhdGUobCl7Y29uc3QgYT0oZCxoLGYsXyxUKT0+e2NvbnN0W1ddPV8x'@;
put 'KGgsd2U9PndlLm5hbWU9PT1QZyksaWU9e30sZ2U9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShPayk7aWYoVyl7Y29uc3Qgd2U9JGooY3MoXyhkLFQpLGV0PT5ldC52YWx1ZSkpO2YmJihXLmFyZ3NbMF09Zik7Y29uc3QgRWU9W10sWmU9U2llKHdlLFcuYXJnc1swXSxnZSxldD0+e2V0'@;
put 'LmNoZWNrZWQmJkVlLnB1c2goZXQudmFsdWUpfSk7aWUubG9jYWxlPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4pLmxvY2FsZSxpZS5hcmdzPVtFZV0saWUuY29tbWFuZD1PZyhQZyksaWUuaXRlbXNTbmFwc2hvdD1aZX1lbHNlIGllLmFyZ3M9'@;
put 'W10saWUuY29tbWFuZD1PZyhXYyk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoZCxpZSl9O2EobC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4sbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3Rvcnkp'@;
put 'LGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzLmxlbmd0aCYmYShsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb2x1bW4sbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5LGwuZWRp'@;
put 'dGVkQ29uZGl0aW9uU3RhY2spfWdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgeGllKVswXX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5k'@;
put 'OiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZixfKT0+e3BpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudVZhbHVlIik7Y29uc3QgVD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7'@;
put 'cmV0dXJuIHBpKFQsImh0RmlsdGVyc01lbnVMYWJlbCIpLFQudGV4dENvbnRlbnQ9XyxhLmFwcGVuZENoaWxkKFQpLGEucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fERuKHRoaXMuZWxlbWVudHMsVz0+YS5hcHBlbmRDaGlsZChXLmVsZW1lbnQpKSxhfX19cmVzZXQo'@;
put 'KXtjb25zdCBsPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoT2spLGE9JGoodGhpcy5fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpKSxkPVNpZShhLGEsbCk7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyhkKSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0TXVsdGlw'@;
put 'bGVTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYSk7Y29uc3QgaD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1oJiZ0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldExvY2FsZSh0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGgu'@;
put 'dmlzdWFsSW5kZXgpLmxvY2FsZSl9b25JbnB1dEtleURvd24obCl7bzcobC5rZXlDb2RlLCJFU0NBUEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksdjIobCkpfV9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5n'@;
put 'ZXRTZWxlY3RlZENvbHVtbigpO3JldHVybiBudWxsPT09bD9bXTpjcyh0aGlzLmhvdC5nZXREYXRhQXRDb2wobC52aXN1YWxJbmRleCksYT0+Q2llKGEpKX19O2NsYXNzIFp5IGV4dGVuZHMgYkF7c3RhdGljIGdldCBCVVRUT05fT0soKXtyZXR1cm4ib2sifXN0YXRpYyBnZXQgQlVUVE9OX0NB'@;
put 'TkNFTCgpe3JldHVybiJjYW5jZWwifWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITB9KSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVudHMucHVzaChuZXcgSTcodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6TEIsY2xhc3NOYW1lOiJodFVJQnV0'@;
put 'dG9uIGh0VUlCdXR0b25PSyIsaWRlbnRpZmllcjpaeS5CVVRUT05fT0t9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBJNyh0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTpSQixjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbkNhbmNlbCIsaWRlbnRpZmllcjpaeS5CVVRUT05f'@;
put 'Q0FOQ0VMfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXtEbih0aGlzLmVsZW1lbnRzLGw9PntsLmFkZExvY2FsSG9vaygiY2xpY2siLChhLGQpPT50aGlzLm9uQnV0dG9uQ2xpY2soYSxkKSl9KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMu'@;
put 'aWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihwaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVBY3Rpb25CYXIiKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJn'@;
put 'aG9zdC10YWJsZSIpfHxEbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWFjY2VwdCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0Iil9Y2FuY2VsKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKX1vbkJ1dHRvbkNsaWNrKGwsYSl7YS5vcHRp'@;
put 'b25zLmlkZW50aWZpZXI9PT1aeS5CVVRUT05fT0s/dGhpcy5hY2NlcHQoKTp0aGlzLmNhbmNlbCgpfX1jb25zdCBOUGU9WnksRWllPSJDb25kaXRpb25Db2xsZWN0aW9uLmZpbHRlcmluZ1N0YXRlcyI7Y2xhc3Mga2lle2NvbnN0cnVjdG9yKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07dGhpcy5ob3Q9bCx0aGlzLmlzTWFwUmVnaXN0cmFibGU9YSx0aGlzLmZpbHRlcmluZ1N0YXRlcz1uZXcgRWssITA9PT10aGlzLmlzTWFwUmVnaXN0cmFibGU/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJN'@;
put 'YXAoRWllLHRoaXMuZmlsdGVyaW5nU3RhdGVzKTp0aGlzLmZpbHRlcmluZ1N0YXRlcy5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmxlbmd0aH1pc01hdGNo'@;
put 'KGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgoYSksZj1udWxsIT09KGQ9aD8uY29uZGl0aW9ucykmJnZvaWQgMCE9PWQ/ZDpbXSxfPWg/Lm9wZXJhdGlvbjtyZXR1cm4gdGhpcy5pc01hdGNoSW5Db25kaXRpb25zKGYsbCxfKX1pc01hdGNo'@;
put 'SW5Db25kaXRpb25zKGwsYSl7cmV0dXJuIWwubGVuZ3RofHxmdW5jdGlvbiBfUGUoYyl7aWYoIXp5W2NdKXRocm93IEVycm9yKGBPcGVyYXRpb24gd2l0aCBpZCAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3QgbD16eVtjXS5mdW5jO3JldHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBs'@;
put 'KGEsZCl9fShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ZTQpKGwsYSl9YWRkQ29uZGl0aW9uKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmU0LGg9YXJndW1lbnRz'@;
put 'Lmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLmxvY2FsZSxfPWNzKGEuYXJncyxnZT0+InN0cmluZyI9PXR5cGVvZiBnZT9nZS50b0xvY2FsZUxvd2VyQ2FzZShmKTpnZSksVD1hLm5hbWV8fGEuY29tbWFuZC5rZXk7dGhpcy5y'@;
put 'dW5Mb2NhbEhvb2tzKCJiZWZvcmVBZGQiLGwpO2NvbnN0IFc9dGhpcy5nZXRPcGVyYXRpb24obCk7aWYoVyl7aWYoVyE9PWQpdGhyb3cgRXJyb3IoQWFgVGhlIGNvbHVtbiBvZiBpbmRleCAke2x9IGhhcyBiZWVuIGFscmVhZHkgYXBwbGllZCB3aXRoIGEgXGAke1d9XGBceDIwCiAgICAgICAg'@;
put 'ZmlsdGVyIG9wZXJhdGlvbi4gVXNlIFxgcmVtb3ZlQ29uZGl0aW9uc1xgIHRvIGNsZWFyIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMgYW5kIHRoZW4gYWRkIG5ldyBvbmVzLlx4MjAKICAgICAgICBNaW5kIHRoYXQgeW91IGNhbm5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mIG9wZXJhdGlvbnMg'@;
put 'KGZvciBpbnN0YW5jZSwgaWYgeW91IHVzZSBcYGNvbmp1bmN0aW9uXGAsXHgyMAogICAgICAgIHVzZSBpdCBjb25zZXF1ZW50bHkgZm9yIGEgcGFydGljdWxhciBjb2x1bW4pLmApfWVsc2UgaWYoTGEoenlbZF0pKXRocm93IG5ldyBFcnJvcihBYWBVbmV4cGVjdGVkIG9wZXJhdGlvbiBuYW1l'@;
put 'ZCBcYCR7ZH1cYC4gUG9zc2libGUgb25lcyBhcmVceDIwCiAgICAgICAgXGBkaXNqdW5jdGlvblxgIGFuZCBcYGNvbmp1bmN0aW9uXGAuYCk7Y29uc3QgaWU9dGhpcy5nZXRDb25kaXRpb25zKGwpOzA9PT1pZS5sZW5ndGg/dGhpcy5maWx0ZXJpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KGws'@;
put 'e29wZXJhdGlvbjpkLGNvbmRpdGlvbnM6W3tuYW1lOlQsYXJnczpfLGZ1bmM6SnAoVCxfKX1dfSxoKTppZS5wdXNoKHtuYW1lOlQsYXJnczpfLGZ1bmM6SnAoVCxfKX0pLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJBZGQiLGwpfWdldENvbmRpdGlvbnMobCl7dmFyIGEsZDtyZXR1cm4gbnVs'@;
put 'bCE9PShhPW51bGw9PT0oZD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1hP2E6W119Z2V0T3BlcmF0aW9uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5maWx0ZXJpbmdTdGF0'@;
put 'ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vcGVyYXRpb259Z2V0RmlsdGVyZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAobD0+e2xldFthXT1sO3JldHVybiBhfSl9Z2V0Q29sdW1uU3RhY2tQb3NpdGlv'@;
put 'bihsKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5pbmRleE9mKGwpfWV4cG9ydEFsbENvbmRpdGlvbnMoKXtyZXR1cm4gQWwodGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLChsLGEpPT57bGV0W2Qse29wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zn1dPWE7cmV0dXJu'@;
put 'IGwucHVzaCh7Y29sdW1uOmQsb3BlcmF0aW9uOmgsY29uZGl0aW9uczpjcyhmLF89PntsZXR7bmFtZTpULGFyZ3M6V309XztyZXR1cm57bmFtZTpULGFyZ3M6V319KX0pLGx9LFtdKX1pbXBvcnRBbGxDb25kaXRpb25zKGwpe3RoaXMuY2xlYW4oKSxEbihsLGE9PntEbihhLmNvbmRpdGlvbnMs'@;
put 'ZD0+dGhpcy5hZGRDb25kaXRpb24oYS5jb2x1bW4sZCkpfSl9cmVtb3ZlQ29uZGl0aW9ucyhsKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJlbW92ZSIsbCksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXJWYWx1ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyUmVtb3ZlIixsKX1j'@;
put 'bGVhbigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ2xlYW4iKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbGVhbiIpfWhhc0NvbmRpdGlvbnMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTtyZXR1cm4gYT9kLnNv'@;
put 'bWUoaD0+aC5uYW1lPT09YSk6ZC5sZW5ndGg+MH1kZXN0cm95KCl7dGhpcy5pc01hcFJlZ2lzdHJhYmxlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKEVpZSksdGhpcy5maWx0ZXJpbmdTdGF0ZXM9bnVsbCx0aGlzLmNsZWFyTG9jYWxIb29rcygpfX1UYShraWUs'@;
put 'TzApO2NvbnN0IEFpZT1raWUsVGllPWNsYXNzIFZQZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06KCk9PltdO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1sLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9'@;
put 'YX1maWx0ZXIoKXtsZXQgbD1bXTtyZXR1cm4gRG4odGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpLChhLGQpPT57bGV0IGg9dGhpcy5jb2x1bW5EYXRhRmFjdG9yeShhKTtkJiYoaD10aGlzLl9nZXRJbnRlcnNlY3REYXRhKGgsbCkpLGw9dGhpcy5maWx0ZXJC'@;
put 'eUNvbHVtbihhLGgpfSksbH1maWx0ZXJCeUNvbHVtbihsKXtjb25zdCBkPVtdO3JldHVybiBEbihhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD0+e3ZvaWQgMCE9PWgmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc01hdGNoKGgs'@;
put 'bCkmJmQucHVzaChoKX0pLGR9X2dldEludGVyc2VjdERhdGEobCxhKXtjb25zdCBkPVtdO3JldHVybiBEbihhLGg9Pntjb25zdCBmPWgubWV0YS52aXN1YWxSb3c7dm9pZCAwIT09bFtmXSYmKGRbZl09bFtmXSl9KSxkfX07Y2xhc3MgRGlle2NvbnN0cnVjdG9yKGwsYSl7bGV0IGQ9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOigpPT5bXTt0aGlzLmhvdD1sLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1hLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9ZCx0aGlzLmNoYW5nZXM9W10sdGhpcy5ncm91cGluZz0hMSx0aGlzLmxhdGVzdEVk'@;
put 'aXRlZENvbHVtblBvc2l0aW9uPS0xLHRoaXMubGF0ZXN0T3JkZXJTdGFjaz1bXSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVSZW1vdmUiLGg9PnRoaXMuX29uQ29uZGl0aW9uQmVmb3JlTW9kaWZ5KGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRk'@;
put 'TG9jYWxIb29rKCJhZnRlclJlbW92ZSIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJBZGQiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5h'@;
put 'ZGRMb2NhbEhvb2soImJlZm9yZUNsZWFuIiwoKT0+dGhpcy5fb25Db25kaXRpb25CZWZvcmVDbGVhbigpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckNsZWFuIiwoKT0+dGhpcy5fb25Db25kaXRpb25BZnRlckNsZWFuKCkpfWdyb3VwQ2hhbmdlcygpe3Ro'@;
put 'aXMuZ3JvdXBpbmc9ITB9Zmx1c2goKXt0aGlzLmdyb3VwaW5nPSExLERuKHRoaXMuY2hhbmdlcyxsPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihsKX0pLHRoaXMuY2hhbmdlcy5sZW5ndGg9MH1fb25Db25kaXRpb25CZWZvcmVNb2RpZnkobCl7dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Q'@;
put 'b3NpdGlvbj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKX11cGRhdGVTdGF0ZXNBdENvbHVtbihsLGEpe3ZhciBkPXRoaXM7aWYodGhpcy5ncm91cGluZylyZXR1cm4gdm9pZCgtMT09PXRoaXMuY2hhbmdlcy5pbmRleE9mKGwpJiZ0aGlzLmNoYW5n'@;
put 'ZXMucHVzaChsKSk7Y29uc3QgaD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpO2xldCBmPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpOy0xPT09ZiYmKGY9dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlv'@;
put 'bik7Y29uc3QgXz1oLnNsaWNlKDAsZiksVD1oLnNsaWNlKGYpO1QubGVuZ3RoJiZUWzBdLmNvbHVtbj09PWwmJlQuc2hpZnQoKTtjb25zdCBXPW10ZShmdW5jdGlvbihnZSx3ZSl7bGV0IEVlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpb'@;
put 'XTtjb25zdCBaZT1uZXcgQWllKGQuaG90LCExKSxvdD1bXS5jb25jYXQoZ2UsRWUpO1plLmltcG9ydEFsbENvbmRpdGlvbnMob3QpO2NvbnN0IGV0PWQuY29sdW1uRGF0YUZhY3Rvcnkod2UpO2xldCB5dDt5dD1aZS5pc0VtcHR5KCk/ZXQ6bmV3IFRpZShaZSxTdD0+ZC5jb2x1bW5EYXRhRmFj'@;
put 'dG9yeShTdCkpLmZpbHRlcigpLHl0PWNzKHl0LFN0PT5TdC5tZXRhLnZpc3VhbFJvdyk7Y29uc3Qga3Q9VXkoeXQpO3JldHVybiBaZS5kZXN0cm95KCksXzEoZXQsU3Q9Pmt0KFN0Lm1ldGEudmlzdWFsUm93KSl9KShfKSxpZT1bXS5jb25jYXQodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdl'@;
put 'dENvbmRpdGlvbnMobCkpO3RoaXMucnVuTG9jYWxIb29rcygidXBkYXRlIix7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbHVtbjpsLGNvbmRpdGlvbnM6aWV9LGRlcGVuZGVudENvbmRpdGlvblN0YWNrczpULGZpbHRlcmVkUm93c0ZhY3Rvcnk6Vyxjb25kaXRpb25BcmdzQ2hhbmdlOmF9KX1f'@;
put 'b25Db25kaXRpb25CZWZvcmVDbGVhbigpe3RoaXMubGF0ZXN0T3JkZXJTdGFjaz10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCl9X29uQ29uZGl0aW9uQWZ0ZXJDbGVhbigpe0RuKHRoaXMubGF0ZXN0T3JkZXJTdGFjayxsPT57dGhpcy51cGRhdGVTdGF0ZXNB'@;
put 'dENvbHVtbihsKX0pfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLGRzKHRoaXMsKGwsYSk9Pnt0aGlzW2FdPW51bGx9KX19VGEoRGllLE8wKTtjb25zdCBCUGU9RGllO2NsYXNzIHpQZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJmaWx0ZXJzIn1z'@;
put 'dGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkRyb3Bkb3duTWVudSIsInBsdWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBlOmNoZWNrYm94Il19Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5l'@;
put 'dmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luPW51bGwsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW51bGwsdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcj1udWxsLHRoaXMuY29tcG9uZW50cz1uZXcgTWFwKFtbImZpbHRlcl9ieV9jb25kaXRpb24i'@;
put 'LG51bGxdLFsiZmlsdGVyX29wZXJhdG9ycyIsbnVsbF0sWyJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbnVsbF0sWyJmaWx0ZXJfYnlfdmFsdWUiLG51bGxdLFsiZmlsdGVyX2FjdGlvbl9iYXIiLG51bGxdXSksdGhpcy5maWx0ZXJzUm93c01hcD1udWxsLHRoaXMuaG90LmFkZEhvb2soImFmdGVy'@;
put 'R2V0Q29sSGVhZGVyIiwoYSxkKT0+dGhpcy5vbkFmdGVyR2V0Q29sSGVhZGVyKGEsZCkpfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWx0ZXJzfWVuYWJsZVBsdWdpbigpe2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5maWx0ZXJzUm93c01hcD10aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsbmV3IG15KSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oImRyb3Bkb3duTWVudSIpO2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsYT1sJiZs'@;
put 'LnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSxkPV89PihfLmFkZExvY2FsSG9vaygiYWNjZXB0IiwoKT0+dGhpcy5vbkFjdGlvbkJhclN1Ym1pdCgiYWNjZXB0IikpLF8uYWRkTG9jYWxIb29rKCJjYW5jZWwiLCgpPT50aGlzLm9uQWN0aW9uQmFyU3VibWl0KCJjYW5j'@;
put 'ZWwiKSksXy5hZGRMb2NhbEhvb2soImNoYW5nZSIsVD0+dGhpcy5vbkNvbXBvbmVudENoYW5nZShfLFQpKSxfKSxoPSgpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGtCKX06YDtpZighdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpKXtjb25zdCBf'@;
put 'PW5ldyBVaih0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24iLG5hbWU6aCxhZGRTZXBhcmF0b3I6ITEsbWVudUNvbnRhaW5lcjphfSk7Xy5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLm9uU2VsZWN0VUlDbG9zZWQoKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmls'@;
put 'dGVyX2J5X2NvbmRpdGlvbiIsZChfKSl9aWYodGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfb3BlcmF0b3JzIixuZXcga1BlKHRoaXMuaG90LHtpZDoiZmlsdGVyX29wZXJhdG9ycyIsbmFtZToiT3BlcmF0b3JzIn0p'@;
put 'KSwhdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKSl7Y29uc3QgXz1uZXcgVWoodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbmFtZToiIixhZGRTZXBhcmF0b3I6ITAsbWVudUNvbnRhaW5lcjphfSk7Xy5hZGRMb2NhbEhvb2soImFmdGVyQ2xv'@;
put 'c2UiLCgpPT50aGlzLm9uU2VsZWN0VUlDbG9zZWQoKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLGQoXykpfXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLGQobmV3'@;
put 'IEhQZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFtZTooKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShBQil9OmB9KSkpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9hY3Rpb25fYmFyIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9hY3Rpb25f'@;
put 'YmFyIixkKG5ldyBOUGUodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYWN0aW9uX2JhciIsbmFtZToiQWN0aW9uIGJhciJ9KSkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbnx8KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1uZXcgQWllKHRoaXMuaG90KSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNl'@;
put 'cnZlcnx8KHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXI9bmV3IEJQZSh0aGlzLmhvdCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sXz0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oXykpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuYWRkTG9jYWxIb29rKCJ1cGRhdGUiLF89PnRo'@;
put 'aXMudXBkYXRlQ29tcG9uZW50cyhfKSkpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKF89Pl8uc2hvdygpKSx0aGlzLmFkZEhvb2soImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixfPT50aGlzLm9uQmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMoXykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJE'@;
put 'cm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsXz0+dGhpcy5vbkFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMoXykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwoKT0+dGhpcy5vbkFmdGVyRHJvcGRvd25NZW51U2hvdygpKSx0aGlzLmFkZEhvb2soImFmdGVy'@;
put 'RHJvcGRvd25NZW51SGlkZSIsKCk9PnRoaXMub25BZnRlckRyb3Bkb3duTWVudUhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsXz0+dGhpcy5vbkFmdGVyQ2hhbmdlKF8pKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSYmdGhpcy5kcm9wZG93bk1lbnVQbHVn'@;
put 'aW4mJih0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5kaXNhYmxlUGx1Z2luKCksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlUGx1Z2luKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbDt0aGlzLmVuYWJsZWQmJihudWxsIT09KGw9dGhpcy5kcm9wZG93'@;
put 'bk1lbnVQbHVnaW4pJiZ2b2lkIDAhPT1sJiZsLmVuYWJsZWQmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGEsZCk9PnthLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGQsbnVsbCl9KSx0aGlzLmNv'@;
put 'bmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWFkZENvbmRpdGlvbihsLGEsZCl7bGV0IGg9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOmU0O2NvbnN0IGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYse2NvbW1hbmQ6e2tleTphfSxhcmdzOmR9LGgpfXJlbW92'@;
put 'ZUNvbmRpdGlvbnMobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfWNsZWFyQ29uZGl0aW9ucyhsKXtpZih2b2lkIDA9PT1sKXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5jbGVhbigpO2Vs'@;
put 'c2V7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfX1maWx0ZXIoKXtjb25zdCBsPXRoaXMuX2NyZWF0ZURhdGFGaWx0ZXIoKSxhPSF0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNFbXB0eSgp'@;
put 'O2xldCBkPVtdO2NvbnN0IGg9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtpZighMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVGaWx0ZXIiLGgpKWlmKGEpe2NvbnN0IF89W107dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmZpbHRl'@;
put 'cnNSb3dzTWFwLmNsZWFyKCksZD1jcyhsLmZpbHRlcigpLFc9PlcubWV0YS52aXN1YWxSb3cpO2NvbnN0IFQ9VXkoZCk7dm8odGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMSxXPT57VChXKXx8Xy5wdXNoKFcpfSksRG4oXyxXPT57dGhpcy5maWx0ZXJzUm93c01hcC5zZXRWYWx1ZUF0SW5k'@;
put 'ZXgoVywhMCl9KX0sITApLGQubGVuZ3RofHx0aGlzLmhvdC5kZXNlbGVjdENlbGwoKX1lbHNlIHRoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGaWx0ZXIiLGgpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSx0aGlzLmhvdC5y'@;
put 'ZW5kZXIoKSx0aGlzLmNsZWFyQ29sdW1uU2VsZWN0aW9uKCl9Z2V0U2VsZWN0ZWRDb2x1bW4oKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGE/e3Zpc3VhbEluZGV4'@;
put 'OmEuY29sLHBoeXNpY2FsSW5kZXg6dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhLmNvbCl9Om51bGx9Y2xlYXJDb2x1bW5TZWxlY3Rpb24oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtudWxsIT09bCYmdGhpcy5ob3Quc2VsZWN0Q2VsbCgwLGwudmlzdWFsSW5kZXgpfWdl'@;
put 'dERhdGFNYXBBdENvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpLGQ9W107cmV0dXJuIERuKHRoaXMuaG90LmdldFNvdXJjZURhdGFBdENvbChhKSwoaCxmKT0+e3ZhciBfO2NvbnN0e3JvdzpULGNvbDpXLHZpc3VhbENvbDppZSx2aXN1YWxSb3c6Z2UsdHlwZTp3'@;
put 'ZSxpbnN0YW5jZTpFZSxkYXRlRm9ybWF0OlplLGxvY2FsZTpvdH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKSxldD1udWxsIT09KF89dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhmKSxhKSkmJnZvaWQgMCE9PV8/XzpoO2QucHVzaCh7bWV0YTp7cm93OlQs'@;
put 'Y29sOlcsdmlzdWFsQ29sOmllLHZpc3VhbFJvdzpnZSx0eXBlOndlLGluc3RhbmNlOkVlLGRhdGVGb3JtYXQ6WmUsbG9jYWxlOm90fSx2YWx1ZTpDaWUoZXQpfSl9KSxkfW9uQWZ0ZXJDaGFuZ2UobCl7bCYmRG4obCxhPT57Y29uc3RbLGRdPWEsaD10aGlzLmhvdC5wcm9wVG9Db2woZCk7dGhp'@;
put 'cy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoaCkmJnRoaXMudXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24oaCl9KX11cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihsKXtjb25zdCBkPSRqKHRoaXMuaG90LmdldERhdGFBdENvbChsKSk7dGhpcy5jb25kaXRpb25V'@;
put 'cGRhdGVPYnNlcnZlci51cGRhdGVTdGF0ZXNBdENvbHVtbihsLGQpfXJlc3RvcmVDb21wb25lbnRzKGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucGh5c2ljYWxJbmRleDtsLmZvckVhY2goaD0+e2guaXNI'@;
put 'aWRkZW4oKXx8aC5yZXN0b3JlU3RhdGUoZCl9KSx0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl9b25BZnRlckRyb3Bkb3duTWVudVNob3coKXt0aGlzLnJlc3RvcmVDb21wb25lbnRzKEFycmF5LmZyb20odGhpcy5jb21wb25lbnRzLnZhbHVlcygpKSl9b25BZnRl'@;
put 'ckRyb3Bkb3duTWVudUhpZGUoKXt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0aW9ucygpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3Nl'@;
put 'T3B0aW9ucygpfW9uQmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMoKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9Pnt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUudXBk'@;
put 'YXRlU2V0dGluZ3Moe2hpZGRlblJvd3M6ITB9KX0pfW9uQWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyhsKXtsLml0ZW1zLnB1c2goe25hbWU6Z3N9KSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChhPT57bC5pdGVtcy5wdXNoKGEuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpfSl9Z2V0'@;
put 'T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyhsLGEsZCxoKXtsZXQgZj1sO3JldHVybiBmPT09RUEmJmEuY29tbWFuZC5rZXkhPT1XYyYmZC5jb21tYW5kLmtleSE9PVdjJiZoLmNvbW1hbmQua2V5IT09V2M/Zj1ZajpoLmNvbW1hbmQua2V5IT09V2MmJihhLmNvbW1hbmQua2V5PT09V2N8fGQu'@;
put 'Y29tbWFuZC5rZXk9PT1XYykmJihmPWU0KSxmfW9uQWN0aW9uQmFyU3VibWl0KGwpe3ZhciBhO2lmKCJhY2NlcHQiPT09bCl7Y29uc3QgaD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7dmFyIGQ7aWYobnVsbD09PWgpcmV0dXJuIHZvaWQobnVsbD09PShkPXRoaXMuZHJvcGRvd25NZW51UGx1'@;
put 'Z2luKXx8dm9pZCAwPT09ZHx8ZC5jbG9zZSgpKTtjb25zdHtwaHlzaWNhbEluZGV4OmZ9PWgsXz10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U3RhdGUoKSxUPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U3RhdGUo'@;
put 'KSxXPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmdldFN0YXRlKCksaWU9dGhpcy5nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS5nZXRBY3RpdmVPcGVyYXRpb25JZCgpLF8sVCxXKTt0aGlz'@;
put 'LmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmdyb3VwQ2hhbmdlcygpO2xldCBnZT10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihmKTstMT09PWdlJiYoZ2U9dm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhmKSxf'@;
put 'LmNvbW1hbmQua2V5IT09V2MmJih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYsXyxpZSxnZSksVC5jb21tYW5kLmtleSE9PVdjJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYsVCxpZSxnZSkpLFcuY29tbWFuZC5rZXkhPT1XYyYmdGhpcy5j'@;
put 'b25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLFcsaWUsZ2UpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCh3ZT0+d2Uuc2F2ZVN0YXRlKGYpKSx0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCksdGhpcy5maWx0ZXIo'@;
put 'KX1udWxsPT09KGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1hfHxhLmNsb3NlKCl9b25Db21wb25lbnRDaGFuZ2UobCxhKXt0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCksbC5jb25zdHJ1Y3Rvcj09PVVqJiYhYS5pbnB1dHNDb3VudCYmdGhp'@;
put 'cy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKX1vblNlbGVjdFVJQ2xvc2VkKCl7dGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKX1zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uc2V0TGlzdGVu'@;
put 'aW5nKCl9dXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKSx7Y29tbWFuZDphfT1sLmdldFN0YXRlKCksZD1bdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIi'@;
put 'KSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIildO2Euc2hvd09wZXJhdG9ycz90aGlzLnNob3dDb21wb25lbnRzKC4uLmQpOnRoaXMuaGlkZUNvbXBvbmVudHMoLi4uZCl9b25BZnRlckdldENvbEhlYWRlcihsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENv'@;
put 'bHVtbihsKTt0aGlzLmVuYWJsZWQmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpP3BpKGEsImh0RmlsdGVyc0FjdGl2ZSIpOldvKGEsImh0RmlsdGVyc0FjdGl2ZSIpfV9jcmVhdGVEYXRhRmlsdGVyKCl7cmV0dXJuIG5ldyBUaWUoYXJndW1lbnRzLmxlbmd0aD4w'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixhPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihhKSl9dXBkYXRlQ29tcG9uZW50cyhsKXt2YXIgYTtpZihudWxsPT09KGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9'@;
put 'PT1hfHwhYS5lbmFibGVkKXJldHVybjtjb25zdHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29uZGl0aW9uczpkLGNvbHVtbjpofX09bCxmPWQuZmlsdGVyKFQ9PlQubmFtZT09PVBnKSxfPWQuZmlsdGVyKFQ9PlQubmFtZSE9PVBnKTtpZihmLmxlbmd0aD49Mnx8Xy5sZW5ndGg+PTMpR2EoQWFg'@;
put 'VGhlIGZpbHRlciBjb25kaXRpb25zIGhhdmUgYmVlbiBhcHBsaWVkIHByb3Blcmx5LCBidXQgY291bGRu4oCZdCBiZSBkaXNwbGF5ZWQgdmlzdWFsbHkuXHgyMAogICAgICAgIFRoZSBvdmVyYWxsIGFtb3VudCBvZiBjb25kaXRpb25zIGV4Y2VlZCB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgZHJv'@;
put 'cGRvd24gbWVudS5ceDIwCiAgICAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGRvY3VtZW50YXRpb24uYCk7ZWxzZXtjb25zdCBUPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRPcGVyYXRpb24oaCk7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLnVw'@;
put 'ZGF0ZVN0YXRlKF9bMF0saCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS51cGRhdGVTdGF0ZShfWzFdLGgpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS51cGRhdGVTdGF0ZShULGgpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRl'@;
put 'cl9ieV92YWx1ZSIpLnVwZGF0ZVN0YXRlKGwpfX1nZXRJbmRleGVzT2ZDb21wb25lbnRzKCl7Y29uc3QgbD1bXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pcmV0dXJuIGw7Y29uc3QgYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'LGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBEbihoLF89PntEbihhLm1lbnVJdGVtcywoVCxXKT0+e1Qua2V5PT09Xy5nZXRNZW51SXRlbURlc2NyaXB0b3IoKS5rZXkmJmwucHVzaChXKX0pfSksbH1jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0'@;
put 'eSgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybjtjb25zdCBkPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuaG90TWVudSxoPWQuZ2V0UGx1Z2luKCJo'@;
put 'aWRkZW5Sb3dzIik7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkoZj4xP2YtMTowKSxUPTE7VDxmO1QrKylfW1QtMV09YXJndW1lbnRzW1RdO2NvbnN0IFc9dGhpcy5nZXRJbmRleGVzT2ZDb21wb25lbnRzKC4uLl8pO2w/aC5zaG93Um93cyhXKTpoLmhpZGVSb3dzKFcp'@;
put 'LGQucmVuZGVyKCl9aGlkZUNvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCExLC4uLmEpfXNob3dDb21wb25lbnRzKCl7Zm9yKHZh'@;
put 'ciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMCwuLi5hKX1kZXN0cm95KCl7dGhpcy5lbmFibGVkJiYodGhpcy5jb21wb25lbnRzLmZvckVhY2goKGwsYSk9Pntu'@;
put 'dWxsIT09bCYmKGwuZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQoYSxudWxsKSl9KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZGVzdHJveSgpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAo'@;
put 'dGhpcy5wbHVnaW5OYW1lKSksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBMaWU9ImludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUiLEpqPXtsaWNlbnNlS2V5OkxpZSx1c2VBcnJheUFyaXRobWV0aWM6ITAsdXNlQ29sdW1uSW5kZXg6ITEsdXNlU3RhdHM6ITEsZXZhbHVhdGVOdWxsVG9aZXJv'@;
put 'OiEwLHByZWNpc2lvbkVwc2lsb246MWUtMTMscHJlY2lzaW9uUm91bmRpbmc6MTQsc21hcnRSb3VuZGluZzohMCxsZWFwWWVhcjE5MDA6ITEsbnVsbERhdGU6e3llYXI6MTg5OSxtb250aDoxMixkYXk6MzB9LG51bGxZZWFyOjMwLGRhdGVGb3JtYXRzOlsiREQvTU0vWVlZWSIsIkREL01NL1lZ'@;
put 'Il0sdGltZUZvcm1hdHM6WyJoaDptbSIsImhoOm1tOnNzLnNzcyJdLG1hdGNoV2hvbGVDZWxsOiEwLHVzZVJlZ3VsYXJFeHByZXNzaW9uczohMSx1c2VXaWxkY2FyZHM6ITAsZnVuY3Rpb25BcmdTZXBhcmF0b3I6IiwiLHRob3VzYW5kU2VwYXJhdG9yOiIiLGRlY2ltYWxTZXBhcmF0b3I6Ii4i'@;
put 'LGxhbmd1YWdlOiJlbkdCIn07ZnVuY3Rpb24gUmllKGMpe3ZhciBsO3JldHVybnttYXhDb2x1bW5zOmMubWF4Q29sdW1ucyxtYXhSb3dzOmMubWF4Um93cyxsYW5ndWFnZTpudWxsPT09KGw9Y1tDdV0pfHx2b2lkIDA9PT1sfHxudWxsPT09KGw9bC5sYW5ndWFnZSl8fHZvaWQgMD09PWw/dm9p'@;
put 'ZCAwOmwubGFuZ0NvZGV9fWZ1bmN0aW9uIE9pZShjKXtyZXR1cm4gT2JqZWN0LmtleXMoYykucmVkdWNlKChsLGEpPT4oImh5cGVyZm9ybXVsYSIhPT1hJiYobFthXT1jW2FdKSxsKSx7fSl9ZnVuY3Rpb24gQUEoKXtjb25zdCBjPSJlbmdpbmVfcmVsYXRpb25zaGlwIixsPXBkKEN1KTtyZXR1'@;
put 'cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lzdGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIFFqKCl7Y29uc3QgYz0ic2hhcmVkX2VuZ2luZV91c2FnZSIsbD1wZChDdSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5j'@;
put 'dGlvbiBQaWUoYyl7dmFyIGw7Y29uc3QgYT1BQSgpLGQ9MD09PWEuc2l6ZT9bXTpBcnJheS5mcm9tKG51bGwhPT0obD1hLmdldChjKSkmJnZvaWQgMCE9PWw/bDpbXSk7cmV0dXJuIG5ldyBNYXAoZC5tYXAoaD0+W2guZ2V0UGx1Z2luKCJmb3JtdWxhcyIpLnNoZWV0SWQsaF0pKX1mdW5jdGlv'@;
put 'biBGaWUoYyxsKXtpZihjKXtjb25zdCBhPUFBKCksZD1hLmdldChjKSxoPVFqKCksZj1oLmdldChjKTtkJiZkLmluY2x1ZGVzKGwpJiYoZC5zcGxpY2UoZC5pbmRleE9mKGwpLDEpLDA9PT1kLmxlbmd0aCYmYS5kZWxldGUoYykpLGYmJmYuaW5jbHVkZXMobC5ndWlkKSYmKGYuc3BsaWNlKGYu'@;
put 'aW5kZXhPZihsLmd1aWQpLDEpLDA9PT1mLmxlbmd0aCYmKGguZGVsZXRlKGMpLGMuZGVzdHJveSgpKSl9fWNvbnN0IEhpZT0iREQvTU0vWVlZWSI7ZnVuY3Rpb24gTmllKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmIiciPT09Yy5jaGFyQXQoMCkmJiI9Ij09PWMuY2hhckF0KDEpfWZ1'@;
put 'bmN0aW9uIGV6KGMsbCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiYiZGF0ZSI9PT1sfWZ1bmN0aW9uIFZpZShjLGwpe3JldHVybiBLbyhjLGwsITApLmlzVmFsaWQoKX1mdW5jdGlvbiBCaWUoYyxsKXtyZXR1cm4gS28oYyxsLCEwKS5mb3JtYXQoSGllKX1mdW5jdGlvbiBlRmUoYyxsKXty'@;
put 'ZXR1cm4gS28oYyxIaWUsITApLmZvcm1hdChsKX1mdW5jdGlvbiBqaWUoYyxsKXtjb25zdCBkPW5ldyBEYXRlKERhdGUuVVRDKDAsMCxjKy0xKSk7cmV0dXJuIEtvKGQpLmZvcm1hdChsKX1mdW5jdGlvbiBGZyhjLGwsYSl7KGZ1bmN0aW9uIHRGZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcmwoYyxsKXtyZXR1cm4gZnVuY3Rpb24gbkZlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6'@;
put 'bC52YWx1ZX0oYyx6aWUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gdDQoYyxsLGEpe3JldHVybiBmdW5jdGlvbiByRmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5'@;
put 'IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHppZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gemllKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwu'@;
put 'Z2V0KGMpfXZhciBZeT1uZXcgV2Vha01hcCxuND1uZXcgV2Vha01hcCx5MT1uZXcgV2Vha01hcCxUQT1uZXcgV2Vha01hcCx0ej1uZXcgV2Vha01hcCxuej1uZXcgV2Vha01hcCxEQT1uZXcgV2Vha01hcDtjb25zdCBVaWU9Y2xhc3MgaUZle2NvbnN0cnVjdG9yKGwsYSxkKXtGZyh0aGlzLFl5'@;
put 'LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGZyh0aGlzLG40LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGZyh0aGlzLHkxLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGZyh0aGlzLFRBLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLEZnKHRoaXMsdHose3dyaXRhYmxlOiEw'@;
put 'LHZhbHVlOltdfSksRmcodGhpcyxueix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRmcodGhpcyxEQSx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx0NCh0aGlzLFl5LGwpLHQ0KHRoaXMsbjQsYSksdDQodGhpcyx5MSxkKX1zZXRSZW1vdmVkSGZJbmRleGVzKGwpe3JldHVybiB0NCh0aGlz'@;
put 'LERBLGwubWFwKGE9Pntjb25zdCBkPXJsKHRoaXMsbjQpLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGEpO3JldHVybiB0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCl9KSkscmwodGhpcyxEQSl9Z2V0UmVtb3ZlZEhmSW5kZXhlcygpe3JldHVybiBybCh0aGlzLERBKX1nZXRI'@;
put 'ZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9cmwodGhpcyxuNCkuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZD1ybCh0aGlzLG40KS5nZXROb3RUcmltbWVkSW5kZXhlcygpO3JldHVybiBhLmluZGV4T2YoZFtsXSl9c3luY01vdmVzKGwpe2NvbnN0IGQ9YG1vdmUke2J1KHJsKHRoaXMs'@;
put 'WXkpKX1zYDtybCh0aGlzLHkxKS5nZXRFbmdpbmUoKS5iYXRjaCgoKT0+e2wuZm9yRWFjaChoPT57aC5mcm9tIT09aC50byYmaC5mcm9tKzEhPT1oLnRvJiZybCh0aGlzLHkxKS5nZXRFbmdpbmUoKVtkXShybCh0aGlzLHkxKS5nZXRTaGVldElkKCksaC5mcm9tLDEsaC50byl9KX0pfXN0b3Jl'@;
put 'TW92ZXNJbmZvcm1hdGlvbihsLGEsZCl7ITEhPT1kJiYodDQodGhpcyx0eixsLm1hcChoPT50aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCkpKSx0NCh0aGlzLG56LHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSkpfWdldE1vdmVMaW5lKGwsYSl7Y29uc3QgZD1ybCh0'@;
put 'aGlzLG40KS5nZXROdW1iZXJPZkluZGV4ZXMoKSxoPUFycmF5LmZyb20oQXJyYXkoZCkua2V5cygpKS5maWx0ZXIoXz0+ITE9PT1sLmluY2x1ZGVzKF8pKTt2YXIgZjtyZXR1cm4gMD09PWE/bnVsbCE9PShmPWhbYV0pJiZ2b2lkIDAhPT1mP2Y6MDpoW2EtMV0rMX1nZXRJbml0aWFsbHlDYWxj'@;
put 'dWxhdGVkTW92ZXMobCxhKXtsZXQgZD10aGlzLmdldE1vdmVMaW5lKGwsYSk7Y29uc3QgaD1bXTtyZXR1cm4gbC5mb3JFYWNoKGY9Pntjb25zdCBfPXtmcm9tOmYsdG86ZH07aC5mb3JFYWNoKFQ9PntULmZyb20+Xy5mcm9tJiZULnRvPD1fLmZyb20mJlQuZnJvbT5ULnRvJiYoXy5mcm9tKz0x'@;
put 'KX0pLF8uZnJvbT49ZCYmKGQrPTEpLGgucHVzaChfKX0pLGh9YWRqdXN0ZWRDYWxjdWxhdGVkTW92ZXMobCl7cmV0dXJuIGwuZm9yRWFjaCgoYSxkKT0+e2wuc2xpY2UoZCsxKS5mb3JFYWNoKGY9PntmLmZyb20+YS5mcm9tJiZmLmZyb208Zi50byYmKGYuZnJvbS09MSl9KX0pLGx9Y2FsY3Vs'@;
put 'YXRlQW5kU3luY01vdmVzKGwsYSl7aWYocmwodGhpcyx5MSkuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKXx8ITE9PT1sfHwhMT09PWEpcmV0dXJuO2NvbnN0IGQ9dGhpcy5hZGp1c3RlZENhbGN1bGF0ZWRNb3Zlcyh0aGlzLmdldEluaXRpYWxseUNhbGN1bGF0ZWRNb3ZlcyhybCh0aGlzLHR6KSxy'@;
put 'bCh0aGlzLG56KSkpO251bGw9PT1ybCh0aGlzLHkxKS5nZXRTaGVldElkKCk/cmwodGhpcyx5MSkuZ2V0UG9zdHBvbmVBY3Rpb24oKCk9PnRoaXMuc3luY01vdmVzKGQpKTp0aGlzLnN5bmNNb3ZlcyhkKX1nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpe2NvbnN0IGw9YHNldCR7YnUocmwo'@;
put 'dGhpcyxZeSkpfU9yZGVyYDtyZXR1cm4gYT0+e2lmKHJsKHRoaXMseTEpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCkpcmV0dXJuO2NvbnN0IGQ9cmwodGhpcyxuNCkuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7aWYoInVwZGF0ZSI9PT1hKXtjb25zdCBoPXJsKHRoaXMsVEEpLm1hcChXPT5kLmluZGV4'@;
put 'T2YoVykpLGY9cmwodGhpcyx5MSkuZ2V0RW5naW5lKCkuZ2V0U2hlZXREaW1lbnNpb25zKHJsKHRoaXMseTEpLmdldFNoZWV0SWQoKSk7bGV0IF87Xz0icm93Ij09PXJsKHRoaXMsWXkpP2YuaGVpZ2h0OmYud2lkdGg7Zm9yKGxldCBXPWgubGVuZ3RoO1c8XztXKz0xKWgucHVzaChXKTtybCh0'@;
put 'aGlzLHkxKS5nZXRFbmdpbmUoKVtsXShybCh0aGlzLHkxKS5nZXRTaGVldElkKCksaCl9dDQodGhpcyxUQSxkKX19aW5pdCgpe3Q0KHRoaXMsVEEscmwodGhpcyxuNCkuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfX07ZnVuY3Rpb24gSGcoYyxsLGEpeyhmdW5jdGlvbiBvRmUoYyxsKXtpZihsLmhh'@;
put 'cyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHFmKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHNGZShjLGwpe3JldHVybiBsLmdldD9s'@;
put 'LmdldC5jYWxsKGMpOmwudmFsdWV9KGMsWmllKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIE5nKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gYUZlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8g'@;
put 'c2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxaaWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFppZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5j'@;
put 'ZSIpO3JldHVybiBsLmdldChjKX12YXIgSUE9bmV3IFdlYWtNYXAsTEE9bmV3IFdlYWtNYXAscno9bmV3IFdlYWtNYXAsaXo9bmV3IFdlYWtNYXAsb3o9bmV3IFdlYWtNYXAsc3o9bmV3IFdlYWtNYXAsYXo9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTDcoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9u'@;
put 'IHVGZShjKXt2YXIgbD1mdW5jdGlvbiBkRmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg'@;
put 'ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhs'@;
put 'KX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBseihjLGwsYSl7KGZ1bmN0aW9uIGhGZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcjQoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBmRmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNl'@;
put 'e2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLFlpZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gUjcoYyxsKXtyZXR1cm4gZnVuY3Rpb24gcEZlKGMsbCl7cmV0dXJuIGwu'@;
put 'Z2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxZaWUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gWWllKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMp'@;
put 'fWNvbnN0IEN1PSJmb3JtdWxhcyIsZ0ZlPVsibWF4Um93cyIsIm1heENvbHVtbnMiLCJsYW5ndWFnZSJdO3NvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9u'@;
put 'UmVtb3ZlZCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0QWRkZWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbW92ZWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbmFtZWQiKSxzby5nZXRTaW5nbGV0'@;
put 'b24oKS5yZWdpc3RlcigiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIpO2NvbnN0IE83PWM9PiJVbmRvUmVkby51bmRvIj09PWN8fCJVbmRvUmVkby5yZWRvIj09PWN8fCJhdXRvIj09PWM7dmFyIEtmPW5ldyBXZWFrTWFwLGN6PW5ldyBXZWFrTWFwLFd5PW5ldyBXZWFrTWFwO2NsYXNzIHZG'@;
put 'ZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7dmFyIGw7c3VwZXIoLi4uYXJndW1lbnRzKSxsPXRoaXMsbHoodGhpcyxLZix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxseih0aGlzLGN6LHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGx6KHRoaXMsV3kse3dyaXRhYmxlOiEwLHZhbHVlOltbInZh'@;
put 'bHVlc1VwZGF0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25FbmdpbmVWYWx1ZXNVcGRhdGVkKC4uLmFyZ3VtZW50cyl9XSxbIm5hbWVkRXhwcmVzc2lvbkFkZGVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lTmFtZWRFeHByZXNzaW9uc0FkZGVkKC4uLmFyZ3VtZW50cyl9XSxbIm5h'@;
put 'bWVkRXhwcmVzc2lvblJlbW92ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25FbmdpbmVOYW1lZEV4cHJlc3Npb25zUmVtb3ZlZCguLi5hcmd1bWVudHMpfV0sWyJzaGVldEFkZGVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lU2hlZXRBZGRlZCguLi5hcmd1bWVudHMpfV0sWyJzaGVl'@;
put 'dFJlbmFtZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25FbmdpbmVTaGVldFJlbmFtZWQoLi4uYXJndW1lbnRzKX1dLFsic2hlZXRSZW1vdmVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lU2hlZXRSZW1vdmVkKC4uLmFyZ3VtZW50cyl9XV19KSxMNyh0aGlzLCJzdGF0aWNSZWdpc3Rl'@;
put 'ciIscGQoImZvcm11bGFzIikpLEw3KHRoaXMsImVuZ2luZSIsbnVsbCksTDcodGhpcywic2hlZXROYW1lIixudWxsKSxMNyh0aGlzLCJpbmRleFN5bmNlciIsbnVsbCksTDcodGhpcywicm93QXhpc1N5bmNlciIsbnVsbCksTDcodGhpcywiY29sdW1uQXhpc1N5bmNlciIsbnVsbCl9c3RhdGlj'@;
put 'IGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEN1fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI2MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltDdSwuLi5nRmVdfWdldCBzaGVldElkKCl7cmV0dXJuIG51bGw9PT10aGlzLnNoZWV0TmFtZT9udWxsOnRoaXMu'@;
put 'ZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYT10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe2lmKHRoaXMuZW5naW5lPW51bGwhPT0obD1mdW5jdGlvbiBXUGUo'@;
put 'Yyl7Y29uc3QgbD1jLmdldFNldHRpbmdzKCksYT1sW0N1XSxkPWE/LmVuZ2luZTtpZighMD09PWF8fExhKGQpKXJldHVybiBudWxsO3ZhciBoO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkLmh5cGVyZm9ybXVsYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGQpcmV0dXJuIGZ1bmN0aW9uIEdQZShjLGws'@;
put 'YSl7Y29uc3QgZD1sW0N1XSxoPWZ1bmN0aW9uIFVQZShjKXt2YXIgbDtjb25zdCBhPWNbQ3VdLGQ9T2llKG51bGwhPWEmJm51bGwhPT0obD1hLmVuZ2luZSkmJnZvaWQgMCE9PWwmJmwuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSxoPVJpZShjKTtyZXR1cm57Li4uSmosLi4uZCwuLi5ofX0o'@;
put 'bCksZj1BQSgpLF89UWooKTsoZnVuY3Rpb24gJFBlKGMsbCl7bCYmbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQscGx1Z2luOmgsdHJhbnNsYXRpb25zOmZ9PWE7dHJ5e2MucmVnaXN0ZXJGdW5jdGlvbihkLGgsZil9Y2F0Y2goXyl7R2EoXy5tZXNzYWdlKX19KX0pKGMsZC5mdW5jdGlvbnMp'@;
put 'LGZ1bmN0aW9uIHFQZShjLGwpe2lmKGwpe2NvbnN0e2xhbmdDb2RlOmF9PWw7dHJ5e2MucmVnaXN0ZXJMYW5ndWFnZShhLGwpfWNhdGNoKGQpe0dhKGQubWVzc2FnZSl9fX0oYyxkLmxhbmd1YWdlKTtjb25zdCBUPWMuYnVpbGRFbXB0eShoKTtyZXR1cm4gZi5zZXQoVCxbYV0pLF8uc2V0KFQs'@;
put 'W2EuZ3VpZF0pLGZ1bmN0aW9uIEtQZShjLGwpe2wmJihjLnN1c3BlbmRFdmFsdWF0aW9uKCksbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQsZXhwcmVzc2lvbjpoLHNjb3BlOmYsb3B0aW9uczpffT1hO3RyeXtjLmFkZE5hbWVkRXhwcmVzc2lvbihkLGgsZixfKX1jYXRjaChUKXtHYShULm1l'@;
put 'c3NhZ2UpfX0pLGMucmVzdW1lRXZhbHVhdGlvbigpKX0oVCxkLm5hbWVkRXhwcmVzc2lvbnMpLFQub24oInNoZWV0QWRkZWQiLCgpPT57VC5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLFQub24oInNoZWV0UmVtb3ZlZCIsKCk9PntULnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksVH0obnVs'@;
put 'bCE9PShoPWQuaHlwZXJmb3JtdWxhKSYmdm9pZCAwIT09aD9oOmQsbCxjKTtpZigib2JqZWN0Ij09dHlwZW9mIGQmJkxhKGQuaHlwZXJmb3JtdWxhKSl7Y29uc3QgZj1BQSgpLF89UWooKS5nZXQoZCk7cmV0dXJuIGYuaGFzKGQpfHxmLnNldChkLFtdKSxmLmdldChkKS5wdXNoKGMpLF8mJl8u'@;
put 'cHVzaChjLmd1aWQpLGQuZ2V0Q29uZmlnKCkubGljZW5zZUtleXx8ZC51cGRhdGVDb25maWcoe2xpY2Vuc2VLZXk6TGllfSksKGQuZ2V0Q29uZmlnKCkubGVhcFllYXIxOTAwIT09SmoubGVhcFllYXIxOTAwfHwhMT09PWxrKGQuZ2V0Q29uZmlnKCkubnVsbERhdGUsSmoubnVsbERhdGUpKSYm'@;
put 'R2EoQWFgSWYgeW91IHVzZSBIeXBlckZvcm11bGEgd2l0aCBIYW5kc29udGFibGUsIGtlZXAgdGhlIGRlZmF1bHQgXGBsZWFwWWVhcjE5MDBcYCBhbmQgXGBudWxsRGF0ZVxgIAogICAgICBzZXR0aW5ncy4gT3RoZXJ3aXNlLCBIeXBlckZvcm11bGEncyBkYXRlcyBtYXkgbm90IHN5bmMgY29y'@;
put 'cmVjdGx5IHdpdGggSGFuZHNvbnRhYmxlJ3MgZGF0ZXMuYCksZH1yZXR1cm4gbnVsbH0odGhpcy5ob3QpKSYmdm9pZCAwIT09bD9sOnRoaXMuZW5naW5lLCF0aGlzLmVuZ2luZSlyZXR1cm4gdm9pZCBHYSgiTWlzc2luZyB0aGUgcmVxdWlyZWQgYGVuZ2luZWAga2V5IGluIHRoZSBGb3JtdWxh'@;
put 'cyBzZXR0aW5ncy4gUGxlYXNlIGZpbGwgaXQgd2l0aCBlaXRoZXIgYW4gZW5naW5lIGNsYXNzIG9yIGFuIGVuZ2luZSBpbnN0YW5jZS4iKTtpZihudWxsIT09dGhpcy5zaGVldE5hbWUmJiF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpe2NvbnN0IGQ9dGhpcy5h'@;
put 'ZGRTaGVldCh0aGlzLnNoZWV0TmFtZSx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKSk7ITEhPT1kJiYodGhpcy5zaGVldE5hbWU9ZCl9dGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0'@;
put 'aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVMb2FkRGF0YSguLi5hcmd1bWVudHMpfSks'@;
put 'dGhpcy5hZGRIb29rKCJhZnRlclVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25Nb2RpZnlEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFk'@;
put 'ZEhvb2soIm1vZGlmeVNvdXJjZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25Nb2RpZnlTb3VyY2VEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbigpe3JldHVybiBhLm9uQmVmb3JlVmFsaWRhdGUoLi4uYXJndW1lbnRzKX0pLHRo'@;
put 'aXMuYWRkSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0RGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyU2V0'@;
put 'RGF0YUF0Q2VsbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlclNldERhdGFBdENlbGwoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBhLm9uQmVmb3JlQ3JlYXRlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUNyZWF0ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gYS5vbkFmdGVyQ3JlYXRlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJDcmVhdGVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlv'@;
put 'bigpe3JldHVybiBhLm9uQmVmb3JlUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZVJlbW92ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJSZW1vdmVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuaW5kZXhTeW5jZXI9bmV3IGNsYXNzIGxGZXtj'@;
put 'b25zdHJ1Y3RvcihsLGEsZCl7SGcodGhpcyxJQSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksSGcodGhpcyxMQSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksSGcodGhpcyxyeix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksSGcodGhpcyxpeix7d3JpdGFibGU6ITAsdmFsdWU6'@;
put 'ITF9KSxIZyh0aGlzLG96LHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLEhnKHRoaXMsc3ose3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxIZyh0aGlzLGF6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksTmcodGhpcyxJQSxuZXcgVWllKCJyb3ciLGwsdGhpcykpLE5nKHRoaXMsTEEsbmV3IFVp'@;
put 'ZSgiY29sdW1uIixhLHRoaXMpKSxOZyh0aGlzLHJ6LGQpfWdldEZvckF4aXMobCl7cmV0dXJuIHFmKHRoaXMsInJvdyI9PT1sP0lBOkxBKX1zZXRQZXJmb3JtVW5kbyhsKXtOZyh0aGlzLGl6LGwpfXNldFBlcmZvcm1SZWRvKGwpe05nKHRoaXMsb3osbCl9aXNQZXJmb3JtaW5nVW5kb1JlZG8o'@;
put 'KXtyZXR1cm4gcWYodGhpcyxpeil8fHFmKHRoaXMsb3opfWdldFNoZWV0SWQoKXtyZXR1cm4gcWYodGhpcyxheil9Z2V0RW5naW5lKCl7cmV0dXJuIHFmKHRoaXMsc3opfWdldFBvc3Rwb25lQWN0aW9uKCl7cmV0dXJuIHFmKHRoaXMscnopfXNldHVwU3luY0VuZHBvaW50KGwsYSl7TmcodGhp'@;
put 'cyxzeixsKSxOZyh0aGlzLGF6LGEpLHFmKHRoaXMsSUEpLmluaXQoKSxxZih0aGlzLExBKS5pbml0KCl9fSh0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixkPT57dGhpcy5ob3QuYWRkSG9va09uY2UoImluaXQiLCgpPT57ZCgpfSl9KSx0aGlzLnJv'@;
put 'd0F4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJyb3ciKSx0aGlzLmNvbHVtbkF4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJjb2x1bW4iKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix0aGlzLnJvd0F4aXNTeW5j'@;
put 'ZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChk'@;
put 'LGgsZixfKT0+e3RoaXMucm93QXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oZCxoLF8pfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGQsaCxmLF8pPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihkLGgsXyl9KSx0aGlz'@;
put 'LmhvdC5hZGRIb29rKCJhZnRlclJvd01vdmUiLChkLGgsZixfLFQpPT57dGhpcy5yb3dBeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhfLFQpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5Nb3ZlIiwoZCxoLGYsXyxUKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxj'@;
put 'dWxhdGVBbmRTeW5jTW92ZXMoXyxUKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LGgpfSks'@;
put 'dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2Vy'@;
put 'LnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVz'@;
put 'KGgsaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2VsbE1ldGFSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyQ2VsbE1ldGFSZXNldCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITAp'@;
put 'LHRoaXMuZW5naW5lLnVuZG8oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVkbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCEwKSx0aGlzLmVuZ2luZS5yZWRvKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZv'@;
put 'cm1VbmRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJEZXRhY2hDaGlsZCguLi5hcmd1bWVudHMp'@;
put 'fSksdGhpcy5hZGRIb29rKCJiZWZvcmVBdXRvZmlsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUF1dG9maWxsKC4uLmFyZ3VtZW50cyl9KSxSNyh0aGlzLFd5KS5mb3JFYWNoKGQ9PntsZXRbaCxmXT1kO3JldHVybiB0aGlzLmVuZ2luZS5vbihoLGYpfSksc3VwZXIuZW5hYmxlUGx1'@;
put 'Z2luKCl9fWRpc2FibGVQbHVnaW4oKXtSNyh0aGlzLFd5KS5mb3JFYWNoKGw9PntsZXRbYSxkXT1sO3JldHVybiB0aGlzLmVuZ2luZS5vZmYoYSxkKX0pLEZpZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2lu'@;
put 'KGwpe2NvbnN0IGE9ZnVuY3Rpb24gWlBlKGMpe3ZhciBsO2NvbnN0IGE9Y1tDdV07cmV0dXJuey4uLk9pZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksLi4uUmllKGMpfX0odGhpcy5ob3QuZ2V0U2V0dGluZ3Mo'@;
put 'KSk7KGZ1bmN0aW9uIFlQZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5zb21lKGE9PnZvaWQgMCE9PWxbYV0mJmxbYV0hPT1jW2FdKX0pKHRoaXMuZW5naW5lLmdldENvbmZpZygpLGEpJiZ0aGlzLmVuZ2luZS51cGRhdGVDb25maWcoYSk7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5n'@;
put 'cygpW0N1XTtpZihLaShkKSYmS2koZC5zaGVldE5hbWUpJiZkLnNoZWV0TmFtZSE9PXRoaXMuc2hlZXROYW1lJiZ0aGlzLnN3aXRjaFNoZWV0KGQuc2hlZXROYW1lKSwhbC5kYXRhJiZudWxsPT09dGhpcy5zaGVldE5hbWUpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV0uc2hl'@;
put 'ZXROYW1lO2gmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGgpP3RoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpOnRoaXMuc2hlZXROYW1lPXRoaXMuYWRkU2hlZXQoaD8/dm9pZCAwLHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKX1zdXBlci51cGRhdGVQbHVnaW4obCl9'@;
put 'ZGVzdHJveSgpe1I3KHRoaXMsV3kpLmZvckVhY2gobD0+e3ZhciBhO2xldFtkLGhdPWw7cmV0dXJuIG51bGw9PT0oYT10aGlzLmVuZ2luZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEub2ZmKGQsaCl9KSxyNCh0aGlzLFd5LG51bGwpLEZpZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdp'@;
put 'bmU9bnVsbCxzdXBlci5kZXN0cm95KCl9YWRkU2hlZXQobCxhKXtpZihLaShhKSYmIXBuZShhKSlyZXR1cm4gR2EoIlRoZSBwcm92aWRlZCBkYXRhIHNob3VsZCBiZSBhbiBhcnJheSBvZiBhcnJheXMuIiksITE7aWYobnVsbCE9bCYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QobCkpcmV0'@;
put 'dXJuIEdhKCJTaGVldCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpLCExO3RyeXtjb25zdCBkPXRoaXMuZW5naW5lLmFkZFNoZWV0KGw/P3ZvaWQgMCk7cmV0dXJuIGEmJnRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLmVuZ2luZS5nZXRTaGVldElkKGQp'@;
put 'LGEpLGR9Y2F0Y2goZCl7cmV0dXJuIEdhKGQubWVzc2FnZSksITF9fXN3aXRjaFNoZWV0KGwpe2lmKCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChsKSlyZXR1cm4gdm9pZCBTTihgVGhlIHNoZWV0IG5hbWVkIFxgJHtsfVxgIGRvZXMgbm90IGV4aXN0LCBzd2l0Y2ggYWJvcnRlZC5gKTt0'@;
put 'aGlzLnNoZWV0TmFtZT1sO2NvbnN0IGE9dGhpcy5lbmdpbmUuZ2V0U2hlZXRTZXJpYWxpemVkKHRoaXMuc2hlZXRJZCk7YS5sZW5ndGg+MCYmdGhpcy5ob3QubG9hZERhdGEoYSxgJHtidShDdSl9LnN3aXRjaFNoZWV0YCl9Z2V0Q2VsbFR5cGUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkO2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7cmV0dXJuIG51bGwhPT1oJiZudWxsIT09Zj90aGlzLmVuZ2luZS5nZXRDZWxsVHlw'@;
put 'ZSh7c2hlZXQ6ZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSk6IkVNUFRZIn1pc0Zvcm11bGFDZWxsVHlwZShsLGEpe3JldHVybiB0aGlzLmVu'@;
put 'Z2luZS5kb2VzQ2VsbEhhdmVGb3JtdWxhKHtzaGVldDphcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1'@;
put 'bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSl9KX1yZW5kZXJEZXBlbmRlbnRTaGVldHMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPW5ldyBTZXQ7bC5mb3JFYWNoKGg9Pnt2YXIg'@;
put 'Zjtjb25zdCBfPW51bGw9PWh8fG51bGw9PT0oZj1oLmFkZHJlc3MpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNoZWV0O3ZvaWQgMCE9PV8mJihkLmhhcyhfKXx8ZC5hZGQoXykpfSksUGllKHRoaXMuZW5naW5lKS5mb3JFYWNoKChoLGYpPT57dmFyIF87KGF8fGYhPT10aGlzLnNoZWV0SWQpJiZk'@;
put 'LmhhcyhmKSYmKGgucmVuZGVyKCksbnVsbD09PShfPWgudmlldyl8fHZvaWQgMD09PV98fF8uYWRqdXN0RWxlbWVudHNTaXplKCkpfSl9dmFsaWRhdGVEZXBlbmRlbnRDZWxscyhsKXtjb25zdCBkPWY9Pnt2YXIgXztjb25zdHtyb3c6VCxjb2w6VyxzaGVldDppZX09bnVsbCE9PShfPWY/LmFk'@;
put 'ZHJlc3MpJiZ2b2lkIDAhPT1fP186e307cmV0dXJuIEtpKGllKT9gJHtpZX06JHtUfXgke1d9YDoiIn0saD1uZXcgU2V0KChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10pLm1hcChmPT5kKGYpKSk7bC5mb3JFYWNoKGY9Pnt2YXIgXyxU'@;
put 'O2NvbnN0e3JvdzpXLGNvbDppZX09bnVsbCE9PShfPWYuYWRkcmVzcykmJnZvaWQgMCE9PV8/Xzp7fTtpZighMT09PUtpKFcpfHwhMT09PUtpKGllKXx8Vz49dGhpcy5ob3QuY291bnRSb3dzKCl8fGllPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgZ2U9bnVsbD09Znx8bnVs'@;
put 'bD09PShUPWYuYWRkcmVzcyl8fHZvaWQgMD09PVQ/dm9pZCAwOlQuc2hlZXQsd2U9ZChmKTtpZih2b2lkIDAhPT1nZSYmIWguaGFzKHdlKSl7Y29uc3QgRWU9UGllKHRoaXMuZW5naW5lKS5nZXQoZ2UpO2lmKCFFZSlyZXR1cm47RWUudmFsaWRhdGVDZWxsKEVlLmdldERhdGFBdENlbGwoVyxp'@;
put 'ZSksRWUuZ2V0Q2VsbE1ldGEoVyxpZSksKCk9Pnt9KX19KX1zeW5jQ2hhbmdlV2l0aEVuZ2luZShsLGEsZCl7Y29uc3QgaD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21W'@;
put 'aXN1YWxJbmRleChhKSxzaGVldDp0aGlzLnNoZWV0SWR9O2lmKCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhoKSlyZXR1cm4gdm9pZCBHYShgTm90IHBvc3NpYmxlIHRvIHNldCBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShoKX1gKTtjb25zdCBmPXRo'@;
put 'aXMuaG90LmdldENlbGxNZXRhKGwsYSk7cmV0dXJuIGV6KGQsZi50eXBlKSYmKFZpZShkLGYuZGF0ZUZvcm1hdCk/ZD1CaWUoZCxmLmRhdGVGb3JtYXQpOiExPT09ZnVuY3Rpb24gUVBlKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmYy5zdGFydHNXaXRoKCI9Iil9KGQpJiYoZD1gJyR7'@;
put 'ZH1gKSksdGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKGgsZCl9b25CZWZvcmVWYWxpZGF0ZShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5wcm9wVG9Db2woZCk7aWYodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShhLGgpKXtjb25zdCBmPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5k'@;
put 'ZXhGcm9tVmlzdWFsSW5kZXgoYSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLHNoZWV0OnRoaXMuc2hlZXRJZH0sXz10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGgpO2xldCBUPXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShmKTtyZXR1cm4i'@;
put 'ZGF0ZSI9PT1fLnR5cGUmJkd1KFQpJiYoVD1qaWUoVCxfLmRhdGVGb3JtYXQpKSwib2JqZWN0Ij09dHlwZW9mIFQmJm51bGwhPT1UP1QudmFsdWU6VH1yZXR1cm4gbH1vbkJlZm9yZUF1dG9maWxsKGwsYSxkKXtjb25zdHtyb3c6aCxjb2w6Zn09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6'@;
put 'Xyxjb2w6VH09YS5nZXRCb3R0b21FbmRDb3JuZXIoKSx7cm93OlcsY29sOmllfT1kLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpnZSxjb2w6d2V9PWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCksRWU9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5k'@;
put 'ZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoXyksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5n'@;
put 'ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFQpLHNoZWV0OnRoaXMuc2hlZXRJZH19LFplPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFcpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChp'@;
put 'ZSksc2hlZXQ6dGhpcy5zaGVldElkfSxlbmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChnZSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHdlKSxzaGVldDp0aGlzLnNoZWV0SWR9fTtpZighMT09'@;
put 'PXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKFplKSlyZXR1cm4hMTtjb25zdCBvdD10aGlzLmVuZ2luZS5nZXRGaWxsUmFuZ2VEYXRhKEVlLFplKSx7cm93OmV0LGNvbDp5dH09RWUuc3RhcnQse3JvdzprdCxjb2w6U3R9PUVlLmVuZCxRdD1rdC1ldCsxLHJuPVN0'@;
put 'LXl0KzE7Zm9yKGxldCB2bj0wO3ZuPG90Lmxlbmd0aDt2bis9MSlmb3IobGV0IE5uPTA7Tm48b3Rbdm5dLmxlbmd0aDtObis9MSl7Y29uc3QgY3I9b3Rbdm5dW05uXSxEcj12biVRdCxfaT1ObiVybixsaT10aGlzLmhvdC5nZXRDZWxsTWV0YShEcixfaSk7ZXooY3IsbGkudHlwZSkmJihjci5z'@;
put 'dGFydHNXaXRoKCInIik/b3Rbdm5dW05uXT1jci5zbGljZSgxKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoRHIsX2ksdGhpcy5zaGVldElkKSYmKG90W3ZuXVtObl09ZUZlKGNyLGxpLmRhdGVGb3JtYXQpKSl9cmV0dXJuIG90fW9uQmVmb3JlTG9hZERhdGEobCxhKXsoYXJndW1lbnRz'@;
put 'Lmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhidShDdSkpfHxyNCh0aGlzLGN6LExhKHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGF0YSkpfW9uQWZ0ZXJDZWxsTWV0YVJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRh'@;
put 'QXJyYXkoKTtsZXQgYT0hMTtsLmZvckVhY2goKGQsaCk9PntkLmZvckVhY2goKGYsXyk9Pntjb25zdCBUPXRoaXMuaG90LmdldENlbGxNZXRhKGgsXyksVz1ULmRhdGVGb3JtYXQ7ZXooZixULnR5cGUpJiYoYT0hMCxWaWUoZixXKT9sW2hdW19dPUJpZShmLFcpOiExPT09dGhpcy5pc0Zvcm11'@;
put 'bGFDZWxsVHlwZShoLF8pJiYobFtoXVtfXT1gJyR7Zn1gKSl9KX0pLCEwPT09YSYmKHI0KHRoaXMsS2YsITApLHRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsbCkscjQodGhpcyxLZiwhMSkpfW9uQWZ0ZXJMb2FkRGF0YShsLGEpe2lmKCEoYXJndW1lbnRzLmxlbmd0'@;
put 'aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhidShDdSkpKWlmKHRoaXMuc2hlZXROYW1lPWZ1bmN0aW9uIFhQZShjLGwpe3JldHVybihMYShsKXx8IWMuZG9lc1NoZWV0RXhpc3QobCkpJiYobD1jLmFkZFNoZWV0KGwpKSxsfSh0aGlzLmVuZ2lu'@;
put 'ZSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0N1XS5zaGVldE5hbWUpLFI3KHRoaXMsY3opKXRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKTtpZih0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlcGxhY2VT'@;
put 'aGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpKXtyNCh0aGlzLEtmLCEwKTtjb25zdCBmPXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsaCk7dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVu'@;
put 'ZGVyRGVwZW5kZW50U2hlZXRzKGYpLHI0KHRoaXMsS2YsITEpfX19b25Nb2RpZnlEYXRhKGwsYSxkLGgpe2lmKCJnZXQiIT09aHx8UjcodGhpcyxLZil8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29u'@;
put 'c3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsKTtpZihudWxsPT09Znx8bnVsbD09PWEpcmV0dXJuO2lmKCF0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGYsYSkmJiJBUlJBWSIhPT10aGlzLmdldENlbGxUeXBlKGYsYSkpcmV0dXJuIHZvaWQoTmllKGQudmFsdWUpJiYoZC52YWx1ZT1mdW5jdGlv'@;
put 'biBKUGUoYyl7cmV0dXJuIE5pZShjKT9jLnN1YnN0cigxKTpjfShkLnZhbHVlKSkpO2NvbnN0IFQ9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSks'@;
put 'c2hlZXQ6dGhpcy5zaGVldElkfTtsZXQgVz10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoVCk7Y29uc3QgaWU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKTsiZGF0ZSI9PT1pZS50eXBlJiZHdShXKSYmKFc9amllKFcsaWUuZGF0ZUZvcm1hdCkpLGQudmFsdWU9Im9iamVjdCI9PXR5cGVvZiBX'@;
put 'JiZudWxsIT09Vz9XLnZhbHVlOld9b25Nb2RpZnlTb3VyY2VEYXRhKGwsYSxkLGgpe2lmKCJnZXQiIT09aHx8UjcodGhpcyxLZil8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29uc3QgZj10aGlzLmhv'@;
put 'dC50b1Zpc3VhbFJvdyhsKSxfPXRoaXMuaG90LnByb3BUb0NvbChhKTtpZihudWxsPT09Znx8bnVsbD09PV98fCF0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGYsXykmJiJBUlJBWSIhPT10aGlzLmdldENlbGxUeXBlKGYsXykpcmV0dXJuO2NvbnN0IFc9dGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1l'@;
put 'bnNpb25zKHRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtpZigwPT09Vy53aWR0aCYmMD09PVcuaGVpZ2h0KXJldHVybjtjb25zdCBpZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLGNvbDp0aGlzLmNvbHVtbkF4aXNT'@;
put 'eW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChfKSxzaGVldDp0aGlzLnNoZWV0SWR9O2QudmFsdWU9dGhpcy5lbmdpbmUuZ2V0Q2VsbFNlcmlhbGl6ZWQoaWUpfW9uQWZ0ZXJTZXREYXRhQXRDZWxsKGwsYSl7aWYoTzcoYSkpcmV0dXJuO2NvbnN0IGQ9W10saD1bXSxmPXRoaXMuZW5n'@;
put 'aW5lLmJhdGNoKCgpPT57bC5mb3JFYWNoKF89PntsZXRbVCxXLCxpZV09Xztjb25zdCBnZT10aGlzLmhvdC5wcm9wVG9Db2woVyksd2U9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhUKSxFZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGdlKSxaZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5n'@;
put 'ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFQpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChnZSksc2hlZXQ6dGhpcy5zaGVldElkfTtudWxsIT09d2UmJm51bGwhPT1FZT90aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKFQsZ2UsaWUpOmQucHVz'@;
put 'aChbVCxnZSxpZV0pLGgucHVzaCh7YWRkcmVzczpaZX0pfSl9KTtkLmxlbmd0aCYmdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IF89dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntkLmZvckVhY2goVD0+e2xldFtXLGllLGdlXT1UO3RoaXMuc3luY0NoYW5nZVdp'@;
put 'dGhFbmdpbmUoVyxpZSxnZSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKF8sITApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGYsaCl9b25BZnRlclNldFNvdXJjZURhdGFBdENlbGwobCxhKXtpZihPNyhhKSlyZXR1'@;
put 'cm47Y29uc3QgZD1bXSxoPVtdO2wuZm9yRWFjaChmPT57bGV0W18sVCwsV109Zjtjb25zdCBpZT10aGlzLmhvdC5wcm9wVG9Db2woVCk7aWYoIUd1KGllKSlyZXR1cm47Y29uc3QgZ2U9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChfKSxjb2w6dGhp'@;
put 'cy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaWUpLHNoZWV0OnRoaXMuc2hlZXRJZH07dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoZ2UpPyhoLnB1c2goe2FkZHJlc3M6Z2V9KSxkLnB1c2goLi4udGhpcy5lbmdpbmUuc2V0Q2Vs'@;
put 'bENvbnRlbnRzKGdlLFcpKSk6R2EoYE5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNlIGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KGdlKX1gKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhkLGgpfW9uQmVmb3JlQ3JlYXRl'@;
put 'Um93KGwsYSl7bGV0IGQ9dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCk7aWYobD49dGhpcy5ob3QuY291bnRSb3dzKCkmJihkPWwpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0'@;
put 'aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZFJvd3ModGhpcy5zaGVldElkLFtkLGFdKSlyZXR1cm4hMX1vbkJlZm9yZUNyZWF0ZUNvbChsLGEpe2xldCBkPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpO2lmKGw+PXRoaXMuaG90LmNvdW50Q29s'@;
put 'cygpJiYoZD1sKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbZCxhXSkpcmV0dXJuITF9b25CZWZvcmVSZW1vdmVSb3cobCxh'@;
put 'LGQpe3JldHVybiExIT09dGhpcy5yb3dBeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoZCkuZXZlcnkoXz0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbXywxXSkpJiZ2b2lkIDB9b25CZWZvcmVSZW1vdmVDb2wobCxhLGQpe3JldHVybiEx'@;
put 'IT09dGhpcy5jb2x1bW5BeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoZCkuZXZlcnkoXz0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbXywxXSkpJiZ2b2lkIDB9b25BZnRlckNyZWF0ZVJvdyhsLGEsZCl7aWYoTzcoZCkpcmV0dXJu'@;
put 'O2NvbnN0IGg9dGhpcy5lbmdpbmUuYWRkUm93cyh0aGlzLnNoZWV0SWQsW3RoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGFdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKX1vbkFmdGVyQ3JlYXRlQ29sKGwsYSxkKXtpZihPNyhkKSlyZXR1cm47'@;
put 'Y29uc3QgaD10aGlzLmVuZ2luZS5hZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksYV0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGgpfW9uQWZ0ZXJSZW1vdmVSb3cobCxhLGQsaCl7aWYoTzcoaCkp'@;
put 'cmV0dXJuO2NvbnN0IGY9dGhpcy5yb3dBeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCkucmV2ZXJzZSgpLF89dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntmLmZvckVhY2goVD0+e3RoaXMuZW5naW5lLnJlbW92ZVJvd3ModGhpcy5zaGVldElkLFtULDFdKX0pfSk7dGhpcy5y'@;
put 'ZW5kZXJEZXBlbmRlbnRTaGVldHMoXyl9b25BZnRlclJlbW92ZUNvbChsLGEsZCxoKXtpZihPNyhoKSlyZXR1cm47Y29uc3QgZj10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKS5yZXZlcnNlKCksXz10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2YuZm9y'@;
put 'RWFjaChUPT57dGhpcy5lbmdpbmUucmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW1QsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhfKX1vbkFmdGVyRGV0YWNoQ2hpbGQobCxhLGQpe3ZhciBoO3I0KHRoaXMsS2YsITApO2NvbnN0IGY9dGhpcy5ob3QuZ2V0U291cmNlRGF0'@;
put 'YUFycmF5KGQsMCxkKygobnVsbD09PShoPWEuX19jaGlsZHJlbil8fHZvaWQgMD09PWg/dm9pZCAwOmgubGVuZ3RoKXx8MCksdGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCkpO3I0KHRoaXMsS2YsITEpLGYuZm9yRWFjaCgoXyxUKT0+e18uZm9yRWFjaCgoVyxpZSk9Pnt0aGlzLmVuZ2luZS5z'@;
put 'ZXRDZWxsQ29udGVudHMoe2NvbDppZSxyb3c6ZCtULHNoZWV0OnRoaXMuc2hlZXRJZH0sW1tXXV0pfSl9KX1vbkVuZ2luZVZhbHVlc1VwZGF0ZWQobCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGwpfW9uRW5naW5lTmFtZWRFeHByZXNzaW9uc0FkZGVk'@;
put 'KGwsYSl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGwsYSl9b25FbmdpbmVOYW1lZEV4cHJlc3Npb25zUmVtb3ZlZChsLGEpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGwsYSl9b25FbmdpbmVTaGVldEFkZGVk'@;
put 'KGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0QWRkZWQiLGwpfW9uRW5naW5lU2hlZXRSZW5hbWVkKGwsYSl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW5hbWVkIixsLGEpfW9uRW5naW5lU2hlZXRSZW1vdmVkKGwsYSl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hl'@;
put 'ZXRSZW1vdmVkIixsLGEpfX1mdW5jdGlvbiBXaWUoYyxsLGEpeyhmdW5jdGlvbiB5RmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNl'@;
put 'dChjLGEpfWZ1bmN0aW9uIHcxKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHdGZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsR2llKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIEd5KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gQ0ZlKGMsbCxhKXtpZihsLnNldClsLnNldC5j'@;
put 'YWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxHaWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIEdpZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1zby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZUNvbHVtbnMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJI'@;
put 'aWRlQ29sdW1ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVDb2x1bW5zIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlQ29sdW1ucyIpO2NvbnN0IHV6PSJoaWRkZW5Db2x1bW5zIjt2YXIgQ2g9bmV3IFdlYWtNYXAsU2g9bmV3IFdl'@;
put 'YWtNYXA7Y2xhc3MgTUZlIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLFdpZSh0aGlzLENoLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLFdpZSh0aGlzLFNoLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJu'@;
put 'IHV6fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMxMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdXpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbdXpdO3VzKGEpJiYoR3kodGhpcyxDaCxhKSxMYShhLmNvcHlQYXN0ZUVuYWJsZWQpJiYoYS5jb3B5UGFzdGVFbmFibGVkPSEwKSksR3kodGhpcyxTaCxuZXcgeGspLHcxKHRoaXMsU2gpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnRoaXMub25NYXBJbml0KCkpLHRoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSx3MSh0aGlzLFNoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMoLi4uYXJndW1l'@;
put 'bnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsKGQsaCxmKT0+dGhpcy5vbkFmdGVyR2V0Q2VsbE1ldGEoZCxoLGYpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoZCxoKT0+dGhpcy5vbk1vZGlmeUNvbFdpZHRoKGQsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJH'@;
put 'ZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldENvbEhlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixkPT50aGlzLm9uTW9kaWZ5Q29weWFibGVSYW5nZShkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRl'@;
put 'UGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLEd5KHRoaXMsQ2gse30pLHN1cGVy'@;
put 'LmRpc2FibGVQbHVnaW4oKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd0NvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9dzEodGhpcyxTaCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxfPWwubGVu'@;
put 'Z3RoPjA7ZCYmXyYmKERuKGwubWFwKGllPT50aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGllKSksaWU9PntmW2llXT0hMX0pLGg9QWwoZiwoaWUsZ2Usd2UpPT4oZ2UmJmllLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4od2UpKSxpZSksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tz'@;
put 'KCJiZWZvcmVVbmhpZGVDb2x1bW5zIixhLGgsZCYmXykmJihkJiZfJiZ3MSh0aGlzLFNoKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhLGgsZCYmXyxkJiZoLmxlbmd0aDxhLmxl'@;
put 'bmd0aCkpfXNob3dDb2x1bW4oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnNob3dDb2x1bW5zKGEpfWhpZGVDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlz'@;
put 'LmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZUNvbHVtbnMiLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxfPT57dzEodGhp'@;
put 'cyxTaCkuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oXyksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlQ29sdW1ucyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX1oaWRlQ29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5n'@;
put 'dGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5oaWRlQ29sdW1ucyhhKX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIGNzKHcxKHRoaXMsU2gpLmdldEhpZGRlbkluZGV4ZXMoKSxsPT50aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSl9aXNIaWRk'@;
put 'ZW4obCl7cmV0dXJuIHcxKHRoaXMsU2gpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKXx8ITF9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPjApJiZsLmV2'@;
put 'ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9cmVzZXRDZWxsc01ldGEoKXtEbih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxsPT57bCYmKGwuc2tpcENvbHVtbk9uUGFzdGU9ITEpfSl9b25Nb2RpZnlDb2xXaWR0aChsLGEpe3JldHVybiB0aGlzLmlzSGlkZGVuKGEpPzA6'@;
put 'dzEodGhpcyxDaCkuaW5kaWNhdG9ycyYmKHRoaXMuaXNIaWRkZW4oYSsxKXx8dGhpcy5pc0hpZGRlbihhLTEpKSYmIm51bWJlciI9PXR5cGVvZiBsJiZ0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCk/bCsxNTp2b2lkIDB9b25BZnRlckdldENlbGxNZXRhKGwsYSxkKXtpZighMT09PXcxKHRoaXMs'@;
put 'Q2gpLmNvcHlQYXN0ZUVuYWJsZWQmJnRoaXMuaXNIaWRkZW4oYSkmJihkLnNraXBDb2x1bW5PblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGEtMSkpZC5jbGFzc05hbWU9ZC5jbGFzc05hbWV8fCIiLC0xPT09ZC5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKSYmKGQuY2xh'@;
put 'c3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBpZihkLmNsYXNzTmFtZSl7Y29uc3QgaD1kLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKGgubGVuZ3RoPjApe2NvbnN0IGY9aC5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVtbiIpO2Y+LTEmJmguc3BsaWNlKGYsMSksZC5jbGFzc05h'@;
put 'bWU9aC5qb2luKCIgIil9fX1vbk1vZGlmeUNvcHlhYmxlUmFuZ2UobCl7aWYodzEodGhpcyxDaCkuY29weVBhc3RlRW5hYmxlZClyZXR1cm4gbDtjb25zdCBhPVtdLGQ9KGgsZixfLFQpPT57YS5wdXNoKHtzdGFydFJvdzpoLGVuZFJvdzpmLHN0YXJ0Q29sOl8sZW5kQ29sOlR9KX07cmV0dXJu'@;
put 'IERuKGwsaD0+e2xldCBmPSEwLF89MDt2byhoLnN0YXJ0Q29sLGguZW5kQ29sLFQ9Pnt0aGlzLmlzSGlkZGVuKFQpPyhmfHxkKGguc3RhcnRSb3csaC5lbmRSb3csXyxULTEpLGY9ITApOihmJiYoXz1UKSxUPT09aC5lbmRDb2wmJmQoaC5zdGFydFJvdyxoLmVuZFJvdyxfLFQpLGY9ITEpfSl9'@;
put 'KSxhfW9uQWZ0ZXJHZXRDb2xIZWFkZXIobCxhKXtpZighdzEodGhpcyxDaCkuaW5kaWNhdG9yc3x8bDwwKXJldHVybjtjb25zdCBkPVtdO2w+PTEmJnRoaXMuaXNIaWRkZW4obC0xKSYmZC5wdXNoKCJhZnRlckhpZGRlbkNvbHVtbiIpLGw8dGhpcy5ob3QuY291bnRDb2xzKCktMSYmdGhpcy5p'@;
put 'c0hpZGRlbihsKzEpJiZkLnB1c2goImJlZm9yZUhpZGRlbkNvbHVtbiIpLHBpKGEsZCl9b25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMobCl7bC5pdGVtcy5wdXNoKHtuYW1lOmdzfSxmdW5jdGlvbiBfRmUoYyl7cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfaGlkZSIsbmFtZSgp'@;
put 'e2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0WyxkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpQixhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5jb2wsYS5jb2wpLDApLGg9TWF0aC5tYXgobC5jb2wsYS5jb2wpLGY9W107Zm9yKGxldCBXPWQ7Vzw9aDtXKz0xKWYucHVzaChXKTtjLmhpZGVDb2x1bW5zKGYpO2NvbnN0IFQ9dGhpcy5jb2x1bW5JbmRleE1hcHBl'@;
put 'ci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKFQpJiZUPj0wP3RoaXMuc2VsZWN0Q29sdW1ucyhUKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGRp'@;
put 'c2FibGVkOiExLGhpZGRlbigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBiRmUoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fY29s'@;
put 'dW1uc19zaG93IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShvQixsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMuY29sdW1uSW5k'@;
put 'ZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudENvbHMoKS0xLGMuc2hv'@;
put 'd0NvbHVtbnMobCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSxmLWgrMT09PXRoaXMuY291bnRDb2xzKCl8fHRoaXMuc2VsZWN0Q29sdW1ucyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPWNzKGMuZ2V0SGlkZGVuQ29sdW1ucygpLHdl'@;
put 'PT50aGlzLnRvUGh5c2ljYWxDb2x1bW4od2UpKTtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLF89dGhpcy5jb2x1bW5JbmRleE1hcHBlcixUPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxXPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl'@;
put 'eChmKSxpZT1fLmdldE5vdFRyaW1tZWRJbmRleGVzKCksZ2U9W107aWYoaCE9PWYpe2lmKGYtaCsxPlctVCsxKXtjb25zdCBaZT1pZS5zbGljZShoLGYrMSk7Z2UucHVzaCguLi5aZS5maWx0ZXIob3Q9PmEuaW5jbHVkZXMob3QpKSl9fWVsc2UgaWYoMD09PVQmJlQ8aClnZS5wdXNoKC4uLmll'@;
put 'LnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PVQpZ2UucHVzaCguLi5pZS5zbGljZSgwLHRoaXMuY291bnRDb2xzKCkpKTtlbHNle2NvbnN0IHdlPXRoaXMuY291bnRDb2xzKCktMTtXPT09Xy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4'@;
put 'KHdlLC0xKSkmJndlPmYmJmdlLnB1c2goLi4uaWUuc2xpY2UoZisxKSl9cmV0dXJuIERuKGdlLHdlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxDb2x1bW4od2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9b25NYXBJbml0KCl7QXJyYXkuaXNBcnJheSh3MSh0aGlzLENoKS5jb2x1bW5zKSYm'@;
put 'dGhpcy5oaWRlQ29sdW1ucyh3MSh0aGlzLENoKS5jb2x1bW5zKX1kZXN0cm95KCl7R3kodGhpcyxDaCxudWxsKSxHeSh0aGlzLFNoLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gJGllKGMsbCxhKXsoZnVuY3Rpb24ga0ZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBfZChjLGwpe3JldHVybiBmdW5jdGlvbiBBRmUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVl'@;
put 'fShjLHFpZShjLGwsImdldCIpKX1mdW5jdGlvbiAkeShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIFRGZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0'@;
put 'ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMscWllKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBxaWUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9'@;
put 'c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVSb3dzIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZVJvd3MiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlUm93cyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJh'@;
put 'ZnRlclVuaGlkZVJvd3MiKTtjb25zdCBkej0iaGlkZGVuUm93cyI7dmFyIFhmPW5ldyBXZWFrTWFwLE1oPW5ldyBXZWFrTWFwO2NsYXNzIElGZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSwkaWUodGhpcyxYZix7d3JpdGFibGU6ITAsdmFsdWU6e319KSwk'@;
put 'aWUodGhpcyxNaCx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBken1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2R6XX1lbmFibGVQ'@;
put 'bHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2R6XTt1cyhhKSYmKCR5KHRoaXMsWGYsYSksTGEoYS5jb3B5UGFzdGVFbmFibGVkKSYmKGEuY29weVBhc3RlRW5hYmxlZD0hMCkpLCR5KHRoaXMsTWgsbmV3IHhr'@;
put 'KSxfZCh0aGlzLE1oKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50aGlzLm9uTWFwSW5pdCgpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsX2QodGhpcyxNaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25z'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChkLGgsZik9PnRoaXMub25BZnRlckdldENlbGxNZXRhKGQsaCxmKSksdGhpcy5hZGRIb29rKCJtb2RpZnlS'@;
put 'b3dIZWlnaHQiLChkLGgpPT50aGlzLm9uTW9kaWZ5Um93SGVpZ2h0KGQsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJh'@;
put 'bmdlIixkPT50aGlzLm9uTW9kaWZ5Q29weWFibGVSYW5nZShkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93'@;
put 'SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLCR5KHRoaXMsWGYse30pLHN1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd1Jvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhs'@;
put 'KTtsZXQgaD1hO2NvbnN0IGY9X2QodGhpcyxNaCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxfPWwubGVuZ3RoPjA7ZCYmXyYmKERuKGwubWFwKGllPT50aGlzLmhvdC50b1BoeXNpY2FsUm93KGllKSksaWU9PntmW2llXT0hMX0pLGg9QWwoZiwoaWUsZ2Usd2UpPT4oZ2UmJmllLnB1c2godGhpcy5o'@;
put 'b3QudG9WaXN1YWxSb3cod2UpKSxpZSksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhpZGVSb3dzIixhLGgsZCYmXykmJihkJiZfJiZfZCh0aGlzLE1oKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlUm93cyIsYSxoLGQmJl8sZCYmaC5s'@;
put 'ZW5ndGg8YS5sZW5ndGgpKX1zaG93Um93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Um93cyhhKX1oaWRlUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5p'@;
put 'c1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVSb3dzIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0RuKGwsXz0+e19kKHRoaXMsTWgp'@;
put 'LnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KF8pLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZVJvd3MiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5'@;
put 'KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZVJvd3MoYSl9Z2V0SGlkZGVuUm93cygpe3JldHVybiBjcyhfZCh0aGlzLE1oKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxSb3cobCkpfWlzSGlkZGVuKGwpe3JldHVybiBfZCh0aGlzLE1o'@;
put 'KS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFJvd3MoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQp'@;
put 'JiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7RG4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wmJihsLnNraXBSb3dPblBhc3RlPSExKX0pfW9uTW9kaWZ5Um93SGVpZ2h0KGwsYSl7cmV0dXJuIHRoaXMuaXNIaWRkZW4oYSk/MDpsfW9uQWZ0ZXJHZXRDZWxsTWV0YShsLGEsZCl7'@;
put 'aWYoITE9PT1fZCh0aGlzLFhmKS5jb3B5UGFzdGVFbmFibGVkJiZ0aGlzLmlzSGlkZGVuKGwpJiYoZC5za2lwUm93T25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihsLTEpKWQuY2xhc3NOYW1lPWQuY2xhc3NOYW1lfHwiIiwtMT09PWQuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuUm93'@;
put 'IikmJihkLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlblJvdyIpO2Vsc2UgaWYoZC5jbGFzc05hbWUpe2NvbnN0IGg9ZC5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihoLmxlbmd0aD4wKXtjb25zdCBmPWguaW5kZXhPZigiYWZ0ZXJIaWRkZW5Sb3ciKTtmPi0xJiZoLnNwbGljZShmLDEpLGQuY2xh'@;
put 'c3NOYW1lPWguam9pbigiICIpfX19b25Nb2RpZnlDb3B5YWJsZVJhbmdlKGwpe2lmKF9kKHRoaXMsWGYpLmNvcHlQYXN0ZUVuYWJsZWQpcmV0dXJuIGw7Y29uc3QgYT1bXSxkPShoLGYsXyxUKT0+e2EucHVzaCh7c3RhcnRSb3c6aCxlbmRSb3c6ZixzdGFydENvbDpfLGVuZENvbDpUfSl9O3Jl'@;
put 'dHVybiBEbihsLGg9PntsZXQgZj0hMCxfPTA7dm8oaC5zdGFydFJvdyxoLmVuZFJvdyxUPT57dGhpcy5pc0hpZGRlbihUKT8oZnx8ZChfLFQtMSxoLnN0YXJ0Q29sLGguZW5kQ29sKSxmPSEwKTooZiYmKF89VCksVD09PWguZW5kUm93JiZkKF8sVCxoLnN0YXJ0Q29sLGguZW5kQ29sKSxmPSEx'@;
put 'KX0pfSksYX1vbkFmdGVyR2V0Um93SGVhZGVyKGwsYSl7aWYoIV9kKHRoaXMsWGYpLmluZGljYXRvcnN8fGw8MClyZXR1cm47Y29uc3QgZD1bXTtsPj0xJiZ0aGlzLmlzSGlkZGVuKGwtMSkmJmQucHVzaCgiYWZ0ZXJIaWRkZW5Sb3ciKSxsPHRoaXMuaG90LmNvdW50Um93cygpLTEmJnRoaXMu'@;
put 'aXNIaWRkZW4obCsxKSYmZC5wdXNoKCJiZWZvcmVIaWRkZW5Sb3ciKSxwaShhLGQpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe2wuaXRlbXMucHVzaCh7bmFtZTpnc30sZnVuY3Rpb24geEZlKGMpe3JldHVybntrZXk6ImhpZGRlbl9yb3dzX2hpZGUiLG5hbWUoKXtjb25z'@;
put 'dCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFtkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShzQixhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5yb3csYS5yb3cpLDApLGg9TWF0aC5tYXgobC5yb3csYS5yb3cpLGY9W107Zm9yKGxldCBXPWQ7Vzw9aDtXKz0xKWYucHVzaChXKTtjLmhpZGVSb3dzKGYpO2NvbnN0IFQ9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0'@;
put 'Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKFQpJiZUPj0wP3RoaXMuc2VsZWN0Um93cyhUKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGRpc2FibGVkOiExLGhpZGRl'@;
put 'bigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBFRmUoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19zaG93IixuYW1lKCl7cmV0'@;
put 'dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShhQixsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhp'@;
put 'ZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudFJvd3MoKS0xLGMuc2hvd1Jvd3MobCksdGhpcy5yZW5kZXIoKSx0aGlz'@;
put 'LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSxmLWgrMT09PXRoaXMuY291bnRSb3dzKCl8fHRoaXMuc2VsZWN0Um93cyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPWNzKGMuZ2V0SGlkZGVuUm93cygpLHdlPT50aGlzLnRvUGh5c2ljYWxSb3cod2UpKTtpZighdGhpcy5z'@;
put 'ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLnJv'@;
put 'dyxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93LF89dGhpcy5yb3dJbmRleE1hcHBlcixUPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxXPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKSxpZT1fLmdldE5vdFRyaW1tZWRJbmRleGVzKCksZ2U9W107aWYoaCE9'@;
put 'PWYpe2lmKGYtaCsxPlctVCsxKXtjb25zdCBaZT1pZS5zbGljZShoLGYrMSk7Z2UucHVzaCguLi5aZS5maWx0ZXIob3Q9PmEuaW5jbHVkZXMob3QpKSl9fWVsc2UgaWYoMD09PVQmJlQ8aClnZS5wdXNoKC4uLmllLnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PVQpZ2UucHVzaCguLi5pZS5z'@;
put 'bGljZSgwLHRoaXMuY291bnRSb3dzKCkpKTtlbHNle2NvbnN0IHdlPXRoaXMuY291bnRSb3dzKCktMTtXPT09Xy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHdlLC0xKSkmJndlPmYmJmdlLnB1c2goLi4uaWUuc2xpY2UoZisxKSl9cmV0'@;
put 'dXJuIERuKGdlLHdlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxSb3cod2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9b25NYXBJbml0KCl7QXJyYXkuaXNBcnJheShfZCh0aGlzLFhmKS5yb3dzKSYmdGhpcy5oaWRlUm93cyhfZCh0aGlzLFhmKS5yb3dzKX1kZXN0cm95KCl7JHkodGhpcyxY'@;
put 'ZixudWxsKSwkeSh0aGlzLE1oLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbkZyZWV6ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbkZyZWV6ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVy'@;
put 'KCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblVuZnJlZXplIik7Y29uc3QgS2llPSJtYW51YWxDb2x1bW5GcmVlemUiLHF5PW5ldyBXZWFrTWFwO2NsYXNzIFBGZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgp'@;
put 'e3JldHVybiBLaWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHF5LnNldCh0aGlzLHthZnRlckZpcnN0VXNlOiExfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0tpZV19ZW5hYmxlUGx1'@;
put 'Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGw9PnRoaXMuYWRkQ29udGV4dE1lbnVFbnRyeShsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwobCxhKT0+dGhpcy5vbkJlZm9yZUNvbHVtbk1vdmUobCxh'@;
put 'KSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtxeS5nZXQodGhpcykuYWZ0ZXJGaXJzdFVzZT0hMSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVn'@;
put 'aW4oKX1mcmVlemVDb2x1bW4obCl7Y29uc3QgYT1xeS5nZXQodGhpcyksZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGg9ZC5maXhlZENvbHVtbnNTdGFydDx0aGlzLmhvdC5jb3VudENvbHMoKSYmbD5kLmZpeGVkQ29sdW1uc1N0YXJ0LTE7YS5hZnRlckZpcnN0VXNlfHwoYS5hZnRlckZpcnN0'@;
put 'VXNlPSEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5GcmVlemUiLGwsaCkmJihoJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxkLmZpeGVkQ29sdW1uc1N0YXJ0KSxkLl9maXhlZENvbHVtbnNTdGFydCs9MSksdGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImFmdGVyQ29sdW1uRnJlZXplIixsLGgpKX11bmZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXF5LmdldCh0aGlzKSxkPXRoaXMuaG90LmdldFNldHRpbmdzKCksaD1kLmZpeGVkQ29sdW1uc1N0YXJ0PjAmJmw8PWQuZml4ZWRDb2x1bW5zU3RhcnQtMTthLmFmdGVyRmlyc3RVc2V8fChhLmFm'@;
put 'dGVyRmlyc3RVc2U9ITApLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblVuZnJlZXplIixsLGgpJiYoaCYmKGQuX2ZpeGVkQ29sdW1uc1N0YXJ0LT0xLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsZC5maXhlZENvbHVtbnNTdGFydCkpLHRoaXMu'@;
put 'aG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblVuZnJlZXplIixsLGgpKX1hZGRDb250ZXh0TWVudUVudHJ5KGwpe2wuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gTEZlKGMpe3JldHVybntrZXk6ImZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFu'@;
put 'c2xhdGVkUGhyYXNlKE9WKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy5mcmVlemVDb2x1bW4oZCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTts'@;
put 'ZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPD10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSkmJihhPSEwKSxhfX19KHRoaXMpLGZ1bmN0aW9uIFJGZShjKXtyZXR1cm57'@;
put 'a2V5OiJ1bmZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFBWKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy51bmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1Np'@;
put 'emUoITApfSxoaWRkZW4oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVybih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJvbS5jb2w+PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNT'@;
put 'dGFydCkmJihhPSEwKSxhfX19KHRoaXMpKX1vbkJlZm9yZUNvbHVtbk1vdmUobCxhKXtpZihxeS5nZXQodGhpcykuYWZ0ZXJGaXJzdFVzZSl7Y29uc3QgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2lmKGE8aHx8bC5zb21lKGY9PmY8aCkpcmV0dXJuITF9fX1j'@;
put 'b25zdCBQNz0icHgiLFFpZT1jbGFzcyBGRmV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3Q9bCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wLHRoaXMuaW5saW5lUHJvcGVydHk9bC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWFwcGVuZFRvKGwpe2wuYXBwZW5kQ2hpbGQodGhpcy5fZWxl'@;
put 'bWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRF'@;
put 'bGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXtHdShsKSYmKHRoaXMuX2Vs'@;
put 'ZW1lbnQuc3R5bGUudG9wPWwrUDcpLEd1KGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZVt0aGlzLmlubGluZVByb3BlcnR5XT1hK1A3KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fZWxlbWVudC5zdHlsZTtyZXR1cm57dG9wOmwudG9wP3BhcnNlSW50KGwudG9wLDEwKTowLHN0YXJ0Omxb'@;
put 'dGhpcy5pbmxpbmVQcm9wZXJ0eV0/cGFyc2VJbnQobFt0aGlzLmlubGluZVByb3BlcnR5XSwxMCk6MH19c2V0U2l6ZShsLGEpe0d1KGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK1A3KSxHdShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWErUDcpfWdldFNpemUoKXty'@;
put 'ZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0T2Zmc2V0'@;
put 'KGwsYSl7R3UobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1sK1A3KSxHdShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbYG1hcmdpbiR7YnUodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YF09YStQNyl9Z2V0T2Zmc2V0KCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxlLGE9YG1h'@;
put 'cmdpbiR7YnUodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YDtyZXR1cm57dG9wOmwubWFyZ2luVG9wP3BhcnNlSW50KGwubWFyZ2luVG9wLDEwKTowLHN0YXJ0OmxbYV0/cGFyc2VJbnQobFthXSwxMCk6MH19fSxWRmU9Y2xhc3MgTkZlIGV4dGVuZHMgUWlle2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxw'@;
put 'aSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0Iil9fSx6RmU9Y2xhc3MgakZlIGV4dGVuZHMgUWlle2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxwaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lIil9fTtzby5nZXRTaW5n'@;
put 'bGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uTW92ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbk1vdmUiKTtjb25zdCBmej0ibWFudWFsQ29sdW1uTW92ZSIsaTQ9bmV3IFdlYWtNYXAsZW9lPSJodF9fbWFudWFsQ29sdW1uTW92ZSIsUkE9InNob3ctdWki'@;
put 'LHB6PSJvbi1tb3ZpbmctLWNvbHVtbnMiLGd6PSJhZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMiO2NsYXNzIFpGZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBmen1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMjB9Y29uc3RydWN0b3IobCl7'@;
put 'c3VwZXIobCksaTQuc2V0KHRoaXMse2NvbHVtbnNUb01vdmU6W10sY291bnRDb2xzOjAsZml4ZWRDb2x1bW5zOjAscHJlc3NlZDp2b2lkIDAsdGFyZ2V0OntldmVudFBhZ2VYOnZvaWQgMCxjb29yZHM6dm9pZCAwLFREOnZvaWQgMCxjb2w6dm9pZCAwfSxjYWNoZWREcm9wSW5kZXg6dm9pZCAw'@;
put 'fSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYmFja2xpZ2h0PW5ldyBWRmUobCksdGhpcy5ndWlkZWxpbmU9bmV3IHpGZShsKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbZnpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5l'@;
put 'bmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9u'@;
put 'QmVmb3JlT25DZWxsTW91c2VPdmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMub25BZnRlclNjcm9sbFZlcnRpY2FsbHkoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0'@;
put 'ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHBpKHRoaXMuaG90LnJvb3RFbGVtZW50LGVvZSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5h'@;
put 'YmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtXbyh0aGlzLmhvdC5yb290RWxlbWVudCxlb2UpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLHRoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRl'@;
put 'bGluZS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVDb2x1bW4obCxhKXtyZXR1cm4gdGhpcy5tb3ZlQ29sdW1ucyhbbF0sYSl9bW92ZUNvbHVtbnMobCxhKXtjb25zdCBkPWk0LmdldCh0aGlzKSxoPWQuY2FjaGVkRHJvcEluZGV4LGY9dGhpcy5pc01vdmVQb3NzaWJsZShs'@;
put 'LGEpLF89dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtbk1vdmUiLGwsYSxoLGYpO2lmKGQuY2FjaGVkRHJvcEluZGV4PXZvaWQgMCwhMT09PV8pcmV0dXJuO2YmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3QgVD1mJiZ0aGlzLmlzQ29sdW1u'@;
put 'T3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbk1vdmUiLGwsYSxoLGYsVCksVH1kcmFnQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMuZHJhZ0NvbHVtbnMoW2xdLGEpfWRyYWdDb2x1bW5zKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJbmRl'@;
put 'eChsLGEpO3JldHVybiBpNC5nZXQodGhpcykuY2FjaGVkRHJvcEluZGV4PWEsdGhpcy5tb3ZlQ29sdW1ucyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGg9bC5sZW5ndGgrYT5k'@;
put 'LGY9YTwwLF89bC5zb21lKFc9Plc8MCksVD1sLnNvbWUoVz0+Vz49ZCk7cmV0dXJuIShofHxmfHxffHxUKX1pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2NvbnN0IGQ9QWwobCwoaCxmKT0+KGY8YSYm'@;
put 'KGgrPTEpLGgpLDApO3JldHVybiBhLWR9Z2V0Q29sdW1uc1dpZHRoKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7Zis9MSl7Y29uc3QgXz1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7ZjwwP2grPXRoaXMu'@;
put 'aG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKXx8MDpudWxsIT09XyYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoXyl8fDApfXJldHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhv'@;
put 'dC5nZXRTZXR0aW5ncygpW2Z6XTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZUNvbHVtbnMobCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZUNvbHVtbnMoYSwwKX19aXNGaXhlZENvbHVtbnNT'@;
put 'dGFydChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0fXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbENvbHVtbk1vdmUiLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy'@;
put 'LmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxDb2x1bW5Nb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZUNvbHVtbnNUb01vdmlu'@;
put 'ZyhsLGEpe2NvbnN0IGQ9W107cmV0dXJuIHZvKGwsYSxoPT57ZC5wdXNoKGgpfSksZH1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD1pNC5nZXQodGhpcyksYT10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KGwuaG92'@;
put 'ZXJlZENvbHVtbikmJmE+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh2b2lkIDAsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEtMSwtMSkpO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxoPXRoaXMuaG90LnZpZXcuX3d0'@;
put 'Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1lbnQsZj0ibnVtYmVyIj09dHlwZW9mIGguc2Nyb2xsWD9oLnNjcm9sbFg6aC5zY3JvbGxMZWZ0O2xldCBfPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0TGVmdCt0aGlzLmdldENvbHVtbnNXaWR0aCgwLGwuaG92ZXJlZENvbHVtbi0xKTtjb25z'@;
put 'dCBUPWQuaGlkZXIub2Zmc2V0V2lkdGgsVz1kLlRCT0RZLm9mZnNldExlZnQsaWU9dGhpcy5iYWNrbGlnaHQuZ2V0T2Zmc2V0KCkuc3RhcnQsZ2U9dGhpcy5iYWNrbGlnaHQuZ2V0U2l6ZSgpLndpZHRoO2xldCB3ZT0wLEVlPTA7aWYodGhpcy5ob3QuaXNSdGwoKSl7Y29uc3QgZXQ9dGhpcy5o'@;
put 'b3Qucm9vdFdpbmRvdyx5dD13YSh0aGlzLmhvdC5yb290RWxlbWVudCk7RWU9ZXQuaW5uZXJXaWR0aC1sLnRhcmdldC5ldmVudFBhZ2VYLShldC5pbm5lcldpZHRoLWwucm9vdEVsZW1lbnRPZmZzZXQteXQpLSh2b2lkIDA9PT1oLnNjcm9sbFg/ZjowKX1lbHNlIEVlPWwudGFyZ2V0LmV2ZW50'@;
put 'UGFnZVgtKGwucm9vdEVsZW1lbnRPZmZzZXQtKHZvaWQgMD09PWguc2Nyb2xsWD9mOjApKTtsLmhhc1Jvd0hlYWRlcnMmJih3ZT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENvbHVtbkhlYWRlcigtMSkub2Zmc2V0V2lk'@;
put 'dGgpLHRoaXMuaXNGaXhlZENvbHVtbnNTdGFydChsLmhvdmVyZWRDb2x1bW4pJiYoXys9ZiksXys9d2UsbC5ob3ZlcmVkQ29sdW1uPDA/bC50YXJnZXQuY29sPWwuZml4ZWRDb2x1bW5zU3RhcnQ+MD8wOmE+MD9hLTE6YTpsLnRhcmdldC5URC5vZmZzZXRXaWR0aC8yK188PUVlPyhsLnRhcmdl'@;
put 'dC5jb2w9KGwuaG92ZXJlZENvbHVtbj49bC5jb3VudENvbHM/bC5jb3VudENvbHMtMTpsLmhvdmVyZWRDb2x1bW4pKzEsXys9bC50YXJnZXQuVEQub2Zmc2V0V2lkdGgpOmwudGFyZ2V0LmNvbD1sLmhvdmVyZWRDb2x1bW47bGV0IFplPUVlLG90PV87RWUrZ2UraWU+PVQ/WmU9VC1nZS1pZTpF'@;
put 'ZStpZTxXK3dlJiYoWmU9Vyt3ZStNYXRoLmFicyhpZSkpLF8+PVQtMT9vdD1ULTE6MD09PW90P290PTE6dm9pZCAwIT09aC5zY3JvbGxYJiZsLmhvdmVyZWRDb2x1bW48bC5maXhlZENvbHVtbnNTdGFydCYmKG90LT1sLnJvb3RFbGVtZW50T2Zmc2V0PD1oLnNjcm9sbFg/bC5yb290RWxlbWVu'@;
put 'dE9mZnNldDowKSx0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLFplKSx0aGlzLmd1aWRlbGluZS5zZXRQb3NpdGlvbihudWxsLG90KX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIu'@;
put 'YWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PnRoaXMub25Nb3VzZU1vdmUoYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVh'@;
put 'cigpfW9uQmVmb3JlT25DZWxsTW91c2VEb3duKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxfPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxUPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksVz1pNC5nZXQodGhp'@;
put 'cyksaWU9Qm8obC50YXJnZXQsInNvcnRBY3Rpb24iKTtpZighVHx8IV98fFcucHJlc3NlZHx8MCE9PWwuYnV0dG9ufHxpZSlyZXR1cm4gVy5wcmVzc2VkPSExLFcuY29sdW1uc1RvTW92ZS5sZW5ndGg9MCx2b2lkIFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtweixSQV0pO2NvbnN0IGdlPXRo'@;
put 'aXMuZ3VpZGVsaW5lLmlzQnVpbHQoKSYmIXRoaXMuZ3VpZGVsaW5lLmlzQXBwZW5kZWQoKSx3ZT10aGlzLmJhY2tsaWdodC5pc0J1aWx0KCkmJiF0aGlzLmJhY2tsaWdodC5pc0FwcGVuZGVkKCk7Z2UmJndlJiYodGhpcy5ndWlkZWxpbmUuYXBwZW5kVG8oZi5oaWRlciksdGhpcy5iYWNrbGln'@;
put 'aHQuYXBwZW5kVG8oZi5oaWRlcikpO2NvbnN0e2Zyb206RWUsdG86WmV9PVQsb3Q9TWF0aC5taW4oRWUuY29sLFplLmNvbCksZXQ9TWF0aC5tYXgoRWUuY29sLFplLmNvbCk7aWYoYS5yb3c8MCYmYS5jb2w+PW90JiZhLmNvbDw9ZXQpe2guY29sdW1uPSEwLFcucHJlc3NlZD0hMCxXLnRhcmdl'@;
put 'dC5ldmVudFBhZ2VYPWwucGFnZVgsVy50YXJnZXQuZXZlbnRPZmZzZXRYPWwub2Zmc2V0WCxXLmhvdmVyZWRDb2x1bW49YS5jb2wsVy50YXJnZXQuVEQ9ZCxXLnRhcmdldC5jb2w9YS5jb2wsVy5jb2x1bW5zVG9Nb3ZlPXRoaXMucHJlcGFyZUNvbHVtbnNUb01vdmluZyhvdCxldCksVy5oYXNS'@;
put 'b3dIZWFkZXJzPSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzLFcuY291bnRDb2xzPXRoaXMuaG90LmNvdW50Q29scygpLFcuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxXLnJvb3RFbGVtZW50T2Zmc2V0PXFsKHRo'@;
put 'aXMuaG90LnJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IHl0PVcuaGFzUm93SGVhZGVycz8tMTowLGt0PWYuaG9sZGVyLnNjcm9sbFRvcCtmLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxLFN0PWEuY29sPFcuZml4ZWRDb2x1bW5zU3RhcnQsUXQ9TWF0aC5hYnModGhpcy5ob3Qudmlldy5fd3Qu'@;
put 'd3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSkscm49TWF0aC5hYnMobC5vZmZzZXRYLSh0aGlzLmhvdC5pc1J0bCgpP2wudGFyZ2V0Lm9mZnNldFdpZHRoOjApKSx2bj10aGlzLmdldENvbHVtbnNXaWR0aChvdCxhLmNvbC0xKStybixObj10aGlzLmdl'@;
put 'dENvbHVtbnNXaWR0aCh5dCxvdC0xKSsoU3Q/UXQ6MCkrdm47dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24oa3QsTm4pLHRoaXMuYmFja2xpZ2h0LnNldFNpemUodGhpcy5nZXRDb2x1bW5zV2lkdGgob3QsZXQpLGYuaGlkZXIub2Zmc2V0SGVpZ2h0LWt0KSx0aGlzLmJhY2tsaWdodC5zZXRP'@;
put 'ZmZzZXQobnVsbCwtdm4pLHBpKHRoaXMuaG90LnJvb3RFbGVtZW50LHB6KX1lbHNlIFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LGd6KSxXLnByZXNzZWQ9ITEsVy5jb2x1bW5zVG9Nb3ZlLmxlbmd0aD0wfW9uTW91c2VNb3ZlKGwpe2NvbnN0IGE9aTQuZ2V0KHRoaXMpO2lmKGEucHJlc3NlZCl7'@;
put 'aWYobC50YXJnZXQ9PT10aGlzLmJhY2tsaWdodC5lbGVtZW50KXtjb25zdCBkPXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS53aWR0aDt0aGlzLmJhY2tsaWdodC5zZXRTaXplKDApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihkKX0pfWEudGFyZ2V0'@;
put 'LmV2ZW50UGFnZVg9bC5wYWdlWCx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX19b25CZWZvcmVPbkNlbGxNb3VzZU92ZXIobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLF89aTQuZ2V0KHRoaXMpOyFmfHwhXy5wcmVzc2VkfHwoXy5jb2x1bW5zVG9Nb3Zl'@;
put 'LmluZGV4T2YoYS5jb2wpPi0xP1dvKHRoaXMuaG90LnJvb3RFbGVtZW50LFJBKTpwaSh0aGlzLmhvdC5yb290RWxlbWVudCxSQSksaC5yb3c9ITAsaC5jb2x1bW49ITAsaC5jZWxsPSEwLF8uaG92ZXJlZENvbHVtbj1hLmNvbCxfLnRhcmdldC5URD1kKX1vbk1vdXNlVXAoKXtjb25zdCBsPWk0'@;
put 'LmdldCh0aGlzKSxhPWwudGFyZ2V0LmNvbCxkPWwuY29sdW1uc1RvTW92ZS5sZW5ndGg7aWYobC5ob3ZlcmVkQ29sdW1uPXZvaWQgMCxsLnByZXNzZWQ9ITEsbC5iYWNrbGlnaHRXaWR0aD0wLFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtweixSQSxnel0pLHRoaXMuaG90LnNlbGVjdGlvbi5p'@;
put 'c1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmcGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsZ3opLGQ8MXx8dm9pZCAwPT09YSlyZXR1cm47Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwuY29sdW1uc1RvTW92ZVswXSksXz10aGlzLmRyYWdDb2x1bW5zKGwuY29sdW1uc1RvTW92'@;
put 'ZSxhKTtpZihsLmNvbHVtbnNUb01vdmUubGVuZ3RoPTAsITA9PT1fKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCk7Y29uc3QgVD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKTt0aGlzLmhv'@;
put 'dC5zZWxlY3RDb2x1bW5zKFQsVCtkLTEpfX1vbkFmdGVyU2Nyb2xsVmVydGljYWxseSgpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxoPWwuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KDApKzErbC5ob2xkZXIuc2Nyb2xsVG9wO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKGgp'@;
put 'LHRoaXMuYmFja2xpZ2h0LnNldFNpemUobnVsbCxsLmhpZGVyLm9mZnNldEhlaWdodC1oKX1idWlsZFBsdWdpblVJKCl7dGhpcy5iYWNrbGlnaHQuYnVpbGQoKSx0aGlzLmd1aWRlbGluZS5idWlsZCgpfW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1kZXN0'@;
put 'cm95KCl7dGhpcy5iYWNrbGlnaHQuZGVzdHJveSgpLHRoaXMuZ3VpZGVsaW5lLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IE9BPSJtYW51YWxDb2x1bW5SZXNpemUiLHRvZT0ibWFudWFsQ29sdW1uV2lkdGhzIixtej1uZXcgV2Vha01hcDtjbGFzcyBXRmUgZXh0ZW5kcyBac3tz'@;
put 'dGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gT0F9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTMwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdDt0aGlzLmN1cnJlbnRUSD1udWxsLHRoaXMuY3VycmVudENvbD1u'@;
put 'dWxsLHRoaXMuc2VsZWN0ZWRDb2xzPVtdLHRoaXMuY3VycmVudFdpZHRoPW51bGwsdGhpcy5uZXdTaXplPW51bGwsdGhpcy5zdGFydFk9bnVsbCx0aGlzLnN0YXJ0V2lkdGg9bnVsbCx0aGlzLnN0YXJ0T2Zmc2V0PW51bGwsdGhpcy5oYW5kbGU9YS5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlz'@;
put 'Lmd1aWRlPWEuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMucHJlc3NlZD1udWxsLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsLHRoaXMuY29sdW1uV2lkdGhz'@;
put 'TWFwPXZvaWQgMCxtei5zZXQodGhpcyx7Y29uZmlnOnZvaWQgMH0pLHBpKHRoaXMuaGFuZGxlLCJtYW51YWxDb2x1bW5SZXNpemVyIikscGkodGhpcy5ndWlkZSwibWFudWFsQ29sdW1uUmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdo'@;
put 'dCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW09BXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmNvbHVtbldpZHRoc01hcD1uZXcgV3AsdGhpcy5jb2x1bW5XaWR0aHNNYXAuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5v'@;
put 'bk1hcEluaXQoKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLHRoaXMuY29sdW1uV2lkdGhzTWFwKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwobCxhKT0+dGhpcy5vbk1vZGlmeUNvbFdpZHRoKGwsYSkpLHRoaXMuYWRkSG9v'@;
put 'aygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIiwobCxhKT0+dGhpcy5vbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aChsLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKGwsYSxkKT0+dGhpcy5vbkJlZm9yZUNvbHVtblJlc2l6ZShsLGEsZCkpLHRoaXMuYmlu'@;
put 'ZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXttei5nZXQodGhpcykuY29uZmlnPXRoaXMuY29sdW1uV2lkdGhzTWFw'@;
put 'LmdldFZhbHVlcygpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbENvbHVtbldpZHRocygpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIix0b2UsdGhp'@;
put 'cy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsdG9lLGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9TWF0aC5tYXgo'@;
put 'YSwyMCksaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3JldHVybiB0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxkKSxkfWNsZWFyTWFudWFsU2l6ZShsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb2x1bW5XaWR0aHNNYXAu'@;
put 'c2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9b25NYXBJbml0KCl7Y29uc3QgbD1tei5nZXQodGhpcyksYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW09BXSxkPXRoaXMubG9hZE1hbnVhbENvbHVtbldpZHRocygpO3R5cGVvZiBkPCJ1Ij90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2QuZm9y'@;
put 'RWFjaCgoaCxmKT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSl9LCEwKTpBcnJheS5pc0FycmF5KGEpPyh0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2EuZm9yRWFjaCgoaCxmKT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChm'@;
put 'LGgpfSl9LCEwKSxsLmNvbmZpZz1hKTohMD09PWEmJkFycmF5LmlzQXJyYXkobC5jb25maWcpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuY29uZmlnLmZvckVhY2goKGgsZik9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCl9c2V0dXBI'@;
put 'YW5kbGVQb3NpdGlvbihsKXtpZighbC5wYXJlbnROb2RlKXJldHVybjt0aGlzLmN1cnJlbnRUSD1sO2NvbnN0e193dDphfT10aGlzLmhvdC52aWV3LGQ9YS53dFRhYmxlLmdldENvb3Jkcyh0aGlzLmN1cnJlbnRUSCksaD1kLmNvbDtpZihoPDApcmV0dXJuO2NvbnN0IGY9YWwodGhpcy5jdXJy'@;
put 'ZW50VEgpLF89dGhpcy5jdXJyZW50VEguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IFc7aDxhLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikmJihXPWEud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5j'@;
put 'dXJyZW50VEgsZC5yb3csZC5jb2wpKSxXfHwoVz1hLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxkLnJvdyxkLmNvbCkpLHRoaXMuY3VycmVudENvbD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVu'@;
put 'ZGVyYWJsZUluZGV4KGgpLHRoaXMuc2VsZWN0ZWRDb2xzPVtdO2NvbnN0IGllPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkm'@;
put 'JmllJiZEbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksd2U9Pnt2byh3ZS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCx3ZS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsb3Q9Pnt0aGlzLnNlbGVjdGVkQ29scy5pbmNsdWRlcyhvdCl8fHRoaXMuc2VsZWN0ZWRDb2xzLnB1c2gob3QpfSl9'@;
put 'KSx0aGlzLnNlbGVjdGVkQ29scy5pbmNsdWRlcyh0aGlzLmN1cnJlbnRDb2wpfHwodGhpcy5zZWxlY3RlZENvbHM9W3RoaXMuY3VycmVudENvbF0pLHRoaXMuc3RhcnRPZmZzZXQ9Vy5zdGFydC02LHRoaXMuc3RhcnRXaWR0aD1wYXJzZUludChfLndpZHRoLDEwKSx0aGlzLmhhbmRsZS5zdHls'@;
put 'ZS50b3A9YCR7Vy50b3B9cHhgLHRoaXMuaGFuZGxlLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHt0aGlzLnN0YXJ0T2Zmc2V0K3RoaXMuc3RhcnRXaWR0aH1weGAsdGhpcy5oYW5kbGUuc3R5bGUuaGVpZ2h0PWAke2Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu'@;
put 'aGFuZGxlKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXt0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7dGhpcy5zdGFydE9mZnNldCt0aGlzLmN1cnJlbnRXaWR0aH1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgbD1wYXJzZUludChhbCh0aGlzLmhhbmRsZSksMTAp'@;
put 'LGE9cGFyc2VJbnQodGhpcy5oYW5kbGUuc3R5bGUudG9wLDEwKStsLGQ9cGFyc2VJbnQodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoMCksMTApO3BpKHRoaXMuaGFuZGxlLCJhY3RpdmUiKSxwaSh0aGlzLmd1aWRlLCJhY3RpdmUiKSx0aGlzLmd1aWRlLnN0eWxl'@;
put 'LnRvcD1gJHthfXB4YCx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCksdGhpcy5ndWlkZS5zdHlsZS5oZWlnaHQ9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5ndWlkZSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXt0aGlzLmd1aWRlLnN0eWxlW3RoaXMu'@;
put 'aW5saW5lRGlyXT10aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl19aGlkZUhhbmRsZUFuZEd1aWRlKCl7V28odGhpcy5oYW5kbGUsImFjdGl2ZSIpLFdvKHRoaXMuZ3VpZGUsImFjdGl2ZSIpfWNoZWNrSWZDb2x1bW5IZWFkZXIobCl7cmV0dXJuISFOcChsLFsiVEhFQUQiXSx0aGlz'@;
put 'LmhvdC5yb290RWxlbWVudCl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1vbk1vdXNlT3ZlcihsKXtpZighZ04obC50YXJnZXQpJiYhMCE9'@;
put 'PXRoaXMuaXNUcmlnZ2VyZWRCeVJNQiYmdGhpcy5jaGVja0lmQ29sdW1uSGVhZGVyKGwudGFyZ2V0KSl7Y29uc3QgYT10aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnRhcmdldCk7aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKTthJiYobnVsbD09PWR8fCIx'@;
put 'Ij09PWQpJiYodGhpcy5wcmVzc2VkfHx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oYSkpfX1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMuaG90LnZpZXcucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVt'@;
put 'ZW50c1NpemUoITApfSxhPShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIix0aGlzLm5ld1NpemUsZCwhMCk7dm9pZCAwIT09ZiYmKHRoaXMubmV3U2l6ZT1mKSwiYWxsIj09PXRoaXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEg/dGhpcy5j'@;
put 'bGVhck1hbnVhbFNpemUoZCk6dGhpcy5zZXRNYW51YWxTaXplKGQsdGhpcy5uZXdTaXplKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLHRoaXMubmV3U2l6ZSxkLCEwKSxoJiZsKCl9O3RoaXMuZGJsY2xpY2s+PTIm'@;
put 'Jih0aGlzLnNlbGVjdGVkQ29scy5sZW5ndGg+MT8oRG4odGhpcy5zZWxlY3RlZENvbHMsaD0+e2EoaCl9KSxsKCkpOkRuKHRoaXMuc2VsZWN0ZWRDb2xzLGg9PnthKGgsITApfSkpLHRoaXMuZGJsY2xpY2s9MCx0aGlzLmF1dG9yZXNpemVUaW1lb3V0PW51bGx9b25Nb3VzZURvd24obCl7Qm8o'@;
put 'bC50YXJnZXQsIm1hbnVhbENvbHVtblJlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSx0aGlzLnByZXNzZWQ9ITAsbnVsbD09PXRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQmJih0aGlzLmF1dG9yZXNpemVU'@;
put 'aW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQpKSx0aGlzLmRibGNsaWNrKz0xLHRoaXMuc3RhcnRYPWwucGFnZVgsdGhpcy5uZXdTaXplPXRoaXMuc3Rh'@;
put 'cnRXaWR0aCl9b25Nb3VzZU1vdmUobCl7aWYodGhpcy5wcmVzc2VkKXtjb25zdCBhPShsLnBhZ2VYLXRoaXMuc3RhcnRYKSp0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKTt0aGlzLmN1cnJlbnRXaWR0aD10aGlzLnN0YXJ0V2lkdGgrYSxEbih0aGlzLnNlbGVjdGVkQ29scyxkPT57dGhp'@;
put 'cy5uZXdTaXplPXRoaXMuc2V0TWFudWFsU2l6ZShkLHRoaXMuY3VycmVudFdpZHRoKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpfX1vbk1vdXNlVXAoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRo'@;
put 'aXMuaG90LnZpZXcucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxhPShkLGgpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsdGhpcy5uZXdTaXplLGQsITEpLGgmJmwoKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0'@;
put 'aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLHRoaXMubmV3U2l6ZSxkLCExKX07dGhpcy5wcmVzc2VkJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLnByZXNzZWQ9ITEsdGhpcy5uZXdTaXplIT09dGhpcy5zdGFydFdpZHRoJiYodGhpcy5zZWxlY3RlZENvbHMu'@;
put 'bGVuZ3RoPjE/KERuKHRoaXMuc2VsZWN0ZWRDb2xzLGg9PnthKGgpfSksbCgpKTpEbih0aGlzLnNlbGVjdGVkQ29scyxoPT57YShoLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpKX1vbkNvbnRleHRNZW51KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUo'@;
put 'KSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmhhbmRsZSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5ndWlkZSksdGhpcy5wcmVzc2VkPSExLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMCx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9'@;
put 'Pnt0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITF9KX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3RFbGVtZW50OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VvdmVyIixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSx0aGlzLmV2'@;
put 'ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50'@;
put 'TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5oYW5kbGUsImNvbnRleHRtZW51IiwoKT0+dGhpcy5vbkNvbnRleHRNZW51KCkpfW9uTW9kaWZ5Q29sV2lkdGgobCxhKXtsZXQgZD1sO2lmKHRo'@;
put 'aXMuZW5hYmxlZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpLGY9dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KGgpO3RoaXMuaG90LmdldFNldHRpbmdzKClbT0FdJiZmJiYoZD1mKX1yZXR1cm4gZH1vbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0'@;
put 'aChsLGEpe2xldCBkPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChhKTtyZXR1cm4gbnVsbD09PWQmJihkPWwpLGR9b25CZWZvcmVDb2x1bW5SZXNpemUoKXt0aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtl'@;
put 'ZCgpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWNvbnN0IEY3PSJweCIsaW9lPWNsYXNzIEdGZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvdD1sLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0'@;
put 'YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3Zl'@;
put 'Q2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe3ZvaWQgMCE9PWwmJih0aGlzLl9lbGVtZW50LnN0'@;
put 'eWxlLnRvcD1sK0Y3KSx2b2lkIDAhPT1hJiYodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0PWErRjcpfWdldFBvc2l0aW9uKCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLnRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQu'@;
put 'c3R5bGUubGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQsMTApOjB9fXNldFNpemUobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK0Y3KSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStGNyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlz'@;
put 'Ll9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXtsJiYodGhpcy5f'@;
put 'ZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtGNyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD1hK0Y3KX1nZXRPZmZzZXQoKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wLDEw'@;
put 'KTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdCwxMCk6MH19fSxLRmU9Y2xhc3MgcUZlIGV4dGVuZHMgaW9le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxwaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFs'@;
put 'Um93TW92ZS0tYmFja2xpZ2h0Iil9fSxRRmU9Y2xhc3MgSkZlIGV4dGVuZHMgaW9le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxwaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lIil9fTtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUm93TW92ZSIp'@;
put 'LHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJvd01vdmUiKTtjb25zdCBfej0ibWFudWFsUm93TW92ZSIsbzQ9bmV3IFdlYWtNYXAsb29lPSJodF9fbWFudWFsUm93TW92ZSIsUEE9InNob3ctdWkiLGJ6PSJvbi1tb3ZpbmctLXJvd3MiLHl6PSJhZnRlci1zZWxlY3Rpb24tLXJv'@;
put 'd3MiO2NsYXNzIHRIZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfen1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksbzQuc2V0KHRoaXMse3Jvd3NUb01vdmU6W10scHJlc3NlZDp2b2lkIDAs'@;
put 'dGFyZ2V0OntldmVudFBhZ2VZOnZvaWQgMCxjb29yZHM6dm9pZCAwLFREOnZvaWQgMCxyb3c6dm9pZCAwfSxjYWNoZWREcm9wSW5kZXg6dm9pZCAwfSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYmFja2xpZ2h0PW5ldyBLRmUobCksdGhpcy5ndWlkZWxpbmU9bmV3IFFG'@;
put 'ZShsKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbX3pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxN'@;
put 'b3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VPdmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+'@;
put 'dGhpcy5vbkFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxwaSh0aGlz'@;
put 'LmhvdC5yb290RWxlbWVudCxvb2UpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7'@;
put 'V28odGhpcy5ob3Qucm9vdEVsZW1lbnQsb29lKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmJhY2tsaWdodC5kZXN0cm95KCksdGhpcy5ndWlkZWxpbmUuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlUm93KGwsYSl7cmV0dXJuIHRoaXMubW92ZVJvd3MoW2xdLGEp'@;
put 'fW1vdmVSb3dzKGwsYSl7Y29uc3QgZD1vNC5nZXQodGhpcyksaD1kLmNhY2hlZERyb3BJbmRleCxmPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxfPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dNb3ZlIixsLGEsaCxmKTtpZihkLmNhY2hlZERyb3BJbmRleD12b2lkIDAsITE9PT1fKXJl'@;
put 'dHVybjtmJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IFQ9ZiYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixsLGEsaCxmLFQpLFR9ZHJhZ1JvdyhsLGEpe3JldHVybiB0aGlz'@;
put 'LmRyYWdSb3dzKFtsXSxhKX1kcmFnUm93cyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gbzQuZ2V0KHRoaXMpLmNhY2hlZERyb3BJbmRleD1hLHRoaXMubW92ZVJvd3MobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5k'@;
put 'ZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCxfPWwuc29tZShXPT5XPDApLFQ9bC5zb21lKFc9Plc+PWQpO3JldHVybiEoaHx8Znx8X3x8VCl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1h'@;
put 'KX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPUFsKGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldFJvd3NIZWlnaHQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyO2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKyspe2NvbnN0IF89ZC5n'@;
put 'ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO251bGwhPT1fJiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoXyl8fDIzKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtfel07aWYoQXJy'@;
put 'YXkuaXNBcnJheShsKSl0aGlzLm1vdmVSb3dzKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVSb3dzKGEsMCl9fWlzRml4ZWRSb3dUb3AobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3Mo'@;
put 'KS5maXhlZFJvd3NUb3B9aXNGaXhlZFJvd0JvdHRvbShsKXtyZXR1cm4gbD50aGlzLmhvdC5jb3VudFJvd3MoKS0xLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tfXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2'@;
put 'ZSIsIm1hbnVhbFJvd01vdmUiLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxSb3dNb3ZlIixsKSxs'@;
put 'LnZhbHVlP2wudmFsdWU6W119cHJlcGFyZVJvd3NUb01vdmluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPVtdO2lmKCFsKXJldHVybiBhO2NvbnN0e2Zyb206ZCx0bzpofT1sO3JldHVybiB2byhNYXRoLm1pbihkLnJvdyxoLnJvdyksTWF0aC5tYXgoZC5y'@;
put 'b3csaC5yb3cpLFQ9PnthLnB1c2goVCl9KSxhfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPW80LmdldCh0aGlzKSxhPWwudGFyZ2V0LmNvb3JkcyxkPXRoaXMuaG90LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxoPXRoaXMuaG90LnZpZXcuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJv'@;
put 'dygpLGY9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5pc0ZpeGVkUm93VG9wKGEucm93KSYmZD4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLTEsLTEpKSx0aGlzLmlzRml4ZWRSb3dCb3R0b20o'@;
put 'YS5yb3cpJiZoPGYmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgrMSwxKSx2b2lkIDAsITApO2NvbnN0IF89dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxUPWwudGFyZ2V0LlRELFc9dGhpcy5ob3Qu'@;
put 'cm9vdEVsZW1lbnQsaWU9cWwoVyksZ2U9dmcoVyk7bGV0IEVlO0VlPXRoaXMuaG90LnJvb3RXaW5kb3c9PT1nZT9nZS5zY3JvbGxZOmdlLnNjcm9sbFRvcDtjb25zdCBvdD1sLnRhcmdldC5ldmVudFBhZ2VZLShpZS50b3AtRWUpK18uaG9sZGVyLnNjcm9sbFRvcCxldD1fLmhpZGVyLm9mZnNl'@;
put 'dEhlaWdodCx5dD1fLlRCT0RZLm9mZnNldFRvcCxrdD10aGlzLmJhY2tsaWdodC5nZXRPZmZzZXQoKS50b3AsU3Q9dGhpcy5iYWNrbGlnaHQuZ2V0U2l6ZSgpLmhlaWdodCxRdD1ULm9mZnNldEhlaWdodC8yLHJuPVQub2Zmc2V0SGVpZ2h0O2xldCB2bj10aGlzLmhvdC52aWV3LlRIRUFELm9m'@;
put 'ZnNldEhlaWdodCt0aGlzLmdldFJvd3NIZWlnaHQoMCxhLnJvdy0xKTtjb25zdCBObj1vdD49dm4rUXQ7dGhpcy5pc0ZpeGVkUm93VG9wKGEucm93KSYmKHZuKz1fLmhvbGRlci5zY3JvbGxUb3ApLGEucm93PDA/bC50YXJnZXQucm93PWQ+MD9kLTE6ZDpObj8obC50YXJnZXQucm93PWEucm93'@;
put 'KzEsdm4rPTA9PT1hLnJvdz9ybi0xOnJuKTpsLnRhcmdldC5yb3c9YS5yb3c7bGV0IGNyPW90LERyPXZuO290K1N0K2t0Pj1ldD9jcj1ldC1TdC1rdDpvdCtrdDx5dCYmKGNyPXl0K01hdGguYWJzKGt0KSksdm4+PWV0LTEmJihEcj1ldC0xKSx0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihj'@;
put 'ciksdGhpcy5ndWlkZWxpbmUuc2V0UG9zaXRpb24oRHIpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+dGhpcy5vbk1vdXNlTW92'@;
put 'ZShhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQsaCl7Y29uc3R7d3RUYWJs'@;
put 'ZTpmLHd0Vmlld3BvcnQ6X309dGhpcy5ob3Qudmlldy5fd3QsVD10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksVz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGllPW80LmdldCh0aGlzKTtpZighV3x8IVR8fGllLnByZXNzZWR8fDAhPT1sLmJ1dHRv'@;
put 'bilyZXR1cm4gaWUucHJlc3NlZD0hMSxpZS5yb3dzVG9Nb3ZlLmxlbmd0aD0wLHZvaWQgV28odGhpcy5ob3Qucm9vdEVsZW1lbnQsW2J6LFBBXSk7Y29uc3QgZ2U9dGhpcy5ndWlkZWxpbmUuaXNCdWlsdCgpJiYhdGhpcy5ndWlkZWxpbmUuaXNBcHBlbmRlZCgpLHdlPXRoaXMuYmFja2xpZ2h0'@;
put 'LmlzQnVpbHQoKSYmIXRoaXMuYmFja2xpZ2h0LmlzQXBwZW5kZWQoKTtnZSYmd2UmJih0aGlzLmd1aWRlbGluZS5hcHBlbmRUbyhmLmhpZGVyKSx0aGlzLmJhY2tsaWdodC5hcHBlbmRUbyhmLmhpZGVyKSk7Y29uc3R7ZnJvbTpFZSx0bzpaZX09VyxvdD1NYXRoLm1pbihFZS5yb3csWmUucm93'@;
put 'KSxldD1NYXRoLm1heChFZS5yb3csWmUucm93KTtpZihhLmNvbDwwJiZhLnJvdz49b3QmJmEucm93PD1ldCl7aC5yb3c9ITAsaWUucHJlc3NlZD0hMCxpZS50YXJnZXQuZXZlbnRQYWdlWT1sLnBhZ2VZLGllLnRhcmdldC5jb29yZHM9YSxpZS50YXJnZXQuVEQ9ZCxpZS5yb3dzVG9Nb3ZlPXRo'@;
put 'aXMucHJlcGFyZVJvd3NUb01vdmluZygpO2NvbnN0IHl0PWYuaG9sZGVyLnNjcm9sbExlZnQrXy5nZXRSb3dIZWFkZXJXaWR0aCgpO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKG51bGwseXQpLHRoaXMuYmFja2xpZ2h0LnNldFNpemUoZi5oaWRlci5vZmZzZXRXaWR0aC15dCx0aGlzLmdl'@;
put 'dFJvd3NIZWlnaHQob3QsZXQpKSx0aGlzLmJhY2tsaWdodC5zZXRPZmZzZXQoLTEqKHRoaXMuZ2V0Um93c0hlaWdodChvdCxhLnJvdy0xKStsLm9mZnNldFkpLG51bGwpLHBpKHRoaXMuaG90LnJvb3RFbGVtZW50LGJ6KSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX1lbHNlIFdvKHRoaXMuaG90'@;
put 'LnJvb3RFbGVtZW50LHl6KSxpZS5wcmVzc2VkPSExLGllLnJvd3NUb01vdmUubGVuZ3RoPTB9b25Nb3VzZU1vdmUobCl7Y29uc3QgYT1vNC5nZXQodGhpcyk7aWYoYS5wcmVzc2VkKXtpZihsLnRhcmdldD09PXRoaXMuYmFja2xpZ2h0LmVsZW1lbnQpe2NvbnN0IGQ9dGhpcy5iYWNrbGlnaHQu'@;
put 'Z2V0U2l6ZSgpLmhlaWdodDt0aGlzLmJhY2tsaWdodC5zZXRTaXplKG51bGwsMCksc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKG51bGwsZCl9KX1hLnRhcmdldC5ldmVudFBhZ2VZPWwucGFnZVksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9fW9uQmVm'@;
put 'b3JlT25DZWxsTW91c2VPdmVyKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxfPW80LmdldCh0aGlzKTshZnx8IV8ucHJlc3NlZHx8KF8ucm93c1RvTW92ZS5pbmRleE9mKGEucm93KT4tMT9Xbyh0aGlzLmhvdC5yb290RWxlbWVudCxQQSk6cGkodGhp'@;
put 'cy5ob3Qucm9vdEVsZW1lbnQsUEEpLGgucm93PSEwLGguY29sdW1uPSEwLGguY2VsbD0hMCxfLnRhcmdldC5jb29yZHM9YSxfLnRhcmdldC5URD1kKX1vbk1vdXNlVXAoKXtjb25zdCBsPW80LmdldCh0aGlzKSxhPWwudGFyZ2V0LnJvdyxkPWwucm93c1RvTW92ZS5sZW5ndGg7aWYobC5wcmVz'@;
put 'c2VkPSExLGwuYmFja2xpZ2h0SGVpZ2h0PTAsV28odGhpcy5ob3Qucm9vdEVsZW1lbnQsW2J6LFBBLHl6XSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiZwaSh0aGlzLmhvdC5yb290RWxlbWVudCx5eiksZDwxfHx2b2lkIDA9PT1hKXJldHVybjtjb25zdCBm'@;
put 'PXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobC5yb3dzVG9Nb3ZlWzBdKSxfPXRoaXMuZHJhZ1Jvd3MobC5yb3dzVG9Nb3ZlLGEpO2lmKGwucm93c1RvTW92ZS5sZW5ndGg9MCwhMD09PV8pe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcu'@;
put 'YWRqdXN0RWxlbWVudHNTaXplKCEwKTtjb25zdCBUPXRoaXMuaG90LnRvVmlzdWFsUm93KGYpO3RoaXMuaG90LnNlbGVjdFJvd3MoVCxUK2QtMSl9fW9uQWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkoKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsaD10aGlzLmhvdC52aWV3Ll93'@;
put 'dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCkrbC5ob2xkZXIuc2Nyb2xsTGVmdDt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLGgpLHRoaXMuYmFja2xpZ2h0LnNldFNpemUobC5oaWRlci5vZmZzZXRXaWR0aC1oKX1idWlsZFBsdWdpblVJKCl7dGhpcy5iYWNrbGlnaHQu'@;
put 'YnVpbGQoKSx0aGlzLmd1aWRlbGluZS5idWlsZCgpfW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1kZXN0cm95KCl7dGhpcy5iYWNrbGlnaHQuZGVzdHJveSgpLHRoaXMuZ3VpZGVsaW5lLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IEZBPSJt'@;
put 'YW51YWxSb3dSZXNpemUiLHNvZT0ibWFudWFsUm93SGVpZ2h0cyIsd3o9bmV3IFdlYWtNYXA7Y2xhc3MgckhlIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEZBfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwfWNvbnN0cnVjdG9yKGwpe3N1'@;
put 'cGVyKGwpO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdDt0aGlzLmN1cnJlbnRUSD1udWxsLHRoaXMuY3VycmVudFJvdz1udWxsLHRoaXMuc2VsZWN0ZWRSb3dzPVtdLHRoaXMuY3VycmVudEhlaWdodD1udWxsLHRoaXMubmV3U2l6ZT1udWxsLHRoaXMuc3RhcnRZPW51bGwsdGhpcy5z'@;
put 'dGFydEhlaWdodD1udWxsLHRoaXMuc3RhcnRPZmZzZXQ9bnVsbCx0aGlzLmhhbmRsZT1hLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZ3VpZGU9YS5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5wcmVzc2VkPW51bGwsdGhpcy5pc1Ry'@;
put 'aWdnZXJlZEJ5Uk1CPSExLHRoaXMuZGJsY2xpY2s9MCx0aGlzLmF1dG9yZXNpemVUaW1lb3V0PW51bGwsdGhpcy5yb3dIZWlnaHRzTWFwPXZvaWQgMCx3ei5zZXQodGhpcyx7Y29uZmlnOnZvaWQgMH0pLHBpKHRoaXMuaGFuZGxlLCJtYW51YWxSb3dSZXNpemVyIikscGkodGhpcy5ndWlkZSwi'@;
put 'bWFudWFsUm93UmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZBXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnJvd0hl'@;
put 'aWdodHNNYXA9bmV3IFdwLHRoaXMucm93SGVpZ2h0c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50aGlzLm9uTWFwSW5pdCgpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soIm1v'@;
put 'ZGlmeVJvd0hlaWdodCIsKGwsYSk9PnRoaXMub25Nb2RpZnlSb3dIZWlnaHQobCxhKSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2lu'@;
put 'KCl9ZGlzYWJsZVBsdWdpbigpe3d6LmdldCh0aGlzKS5jb25maWc9dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbFJvd0hlaWdo'@;
put 'dHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsc29lLHRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVhbFJvd0hlaWdodHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsc29l'@;
put 'LGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPU1hdGgubWF4KGEsb25lLkRFRkFVTFRfSEVJR0hUKTtyZXR1cm4gdGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChkLGgpLGh9c2V0dXBIYW5kbGVQb3NpdGlv'@;
put 'bihsKXt0aGlzLmN1cnJlbnRUSD1sO2NvbnN0e3ZpZXc6YX09dGhpcy5ob3Qse193dDpkfT1hLGg9ZC53dFRhYmxlLmdldENvb3Jkcyh0aGlzLmN1cnJlbnRUSCksZj1oLnJvdztpZihmPDApcmV0dXJuO2NvbnN0IF89d2EodGhpcy5jdXJyZW50VEgpLFQ9dGhpcy5jdXJyZW50VEguZ2V0Qm91'@;
put 'bmRpbmdDbGllbnRSZWN0KCksVz1mPGQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksaWU9Zj49YS5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoMCwxKS1kLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpO2xldCBnZTtXP2dlPWQud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5l'@;
put 'ck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5jdXJyZW50VEgsaC5yb3csaC5jb2wpOmllJiYoZ2U9ZC53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxoLnJvdyxoLmNvbCkp'@;
put 'LGdlfHwoZ2U9ZC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxoLnJvdyxoLmNvbCkpLHRoaXMuY3VycmVudFJvdz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYp'@;
put 'LHRoaXMuc2VsZWN0ZWRSb3dzPVtdO2NvbnN0IHdlPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJndlJiZEbih0aGlzLmhvdC5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlKCksWmU9Pnt2byhaZS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxaZS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyx5dD0+e3RoaXMuc2VsZWN0ZWRSb3dzLmluY2x1ZGVzKHl0KXx8dGhpcy5zZWxlY3RlZFJvd3MucHVzaCh5dCl9KX0pLHRoaXMuc2VsZWN0ZWRS'@;
put 'b3dzLmluY2x1ZGVzKHRoaXMuY3VycmVudFJvdyl8fCh0aGlzLnNlbGVjdGVkUm93cz1bdGhpcy5jdXJyZW50Um93XSksdGhpcy5zdGFydE9mZnNldD1nZS50b3AtNix0aGlzLnN0YXJ0SGVpZ2h0PXBhcnNlSW50KFQuaGVpZ2h0LDEwKSx0aGlzLmhhbmRsZS5zdHlsZS50b3A9YCR7dGhpcy5z'@;
put 'dGFydE9mZnNldCt0aGlzLnN0YXJ0SGVpZ2h0fXB4YCx0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7Z2Uuc3RhcnR9cHhgLHRoaXMuaGFuZGxlLnN0eWxlLndpZHRoPWAke199cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaGFuZGxlKX1yZWZy'@;
put 'ZXNoSGFuZGxlUG9zaXRpb24oKXt0aGlzLmhhbmRsZS5zdHlsZS50b3A9YCR7dGhpcy5zdGFydE9mZnNldCt0aGlzLmN1cnJlbnRIZWlnaHR9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQod2EodGhpcy5oYW5kbGUpLDEwKSxhPXBhcnNlSW50KHRoaXMuaGFuZGxl'@;
put 'LnN0eWxlW3RoaXMuaW5saW5lRGlyXSwxMCkrbCxkPXBhcnNlSW50KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoMCksMTApO3BpKHRoaXMuaGFuZGxlLCJhY3RpdmUiKSxwaSh0aGlzLmd1aWRlLCJhY3RpdmUiKSx0aGlzLmd1aWRlLnN0eWxlLnRvcD10aGlzLmhh'@;
put 'bmRsZS5zdHlsZS50b3AsdGhpcy5ndWlkZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7YX1weGAsdGhpcy5ndWlkZS5zdHlsZS53aWR0aD1kLWwrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmd1aWRlKX1yZWZyZXNoR3VpZGVQb3NpdGlvbigpe3RoaXMuZ3Vp'@;
put 'ZGUuc3R5bGUudG9wPXRoaXMuaGFuZGxlLnN0eWxlLnRvcH1oaWRlSGFuZGxlQW5kR3VpZGUoKXtXbyh0aGlzLmhhbmRsZSwiYWN0aXZlIiksV28odGhpcy5ndWlkZSwiYWN0aXZlIil9Y2hlY2tJZlJvd0hlYWRlcihsKXt2YXIgYTtyZXR1cm4gTnAobCxbIlRIIl0sdGhpcy5ob3Qucm9vdEVs'@;
put 'ZW1lbnQpJiYiVEJPRFkiPT09KG51bGw9PT0oYT1sLnBhcmVudE5vZGUpfHx2b2lkIDA9PT1hfHxudWxsPT09KGE9YS5wYXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6YS50YWdOYW1lKX1nZXRDbG9zZXN0VEhQYXJlbnQobCl7cmV0dXJuIlRBQkxFIiE9PWwudGFnTmFtZT8iVEgiPT09'@;
put 'bC50YWdOYW1lP2w6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC5wYXJlbnROb2RlKTpudWxsfWdldEFjdHVhbFJvd0hlaWdodChsKXtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpO3JldHVybiB2b2lkIDAhPT1hJiZ0aGlzLm5ld1NpemU8YT9hOnRo'@;
put 'aXMubmV3U2l6ZX1vbk1vdXNlT3ZlcihsKXtpZighZ04obC50YXJnZXQpJiYhMCE9PXRoaXMuaXNUcmlnZ2VyZWRCeVJNQiYmdGhpcy5jaGVja0lmUm93SGVhZGVyKGwudGFyZ2V0KSl7Y29uc3QgYT10aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnRhcmdldCk7YSYmKHRoaXMucHJlc3NlZHx8'@;
put 'dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGEpKX19YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sYT0oZCxoKT0+'@;
put 'e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCk7dm9pZCAwIT09ZiYmKHRoaXMubmV3U2l6ZT1mKSx0aGlzLnNldE1hbnVhbFNpemUoZCx0aGlzLm5ld1NpemUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl'@;
put 'clJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCksaCYmbCgpfTt0aGlzLmRibGNsaWNrPj0yJiYodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoPjE/KERuKHRoaXMuc2VsZWN0ZWRSb3dzLGg9PnthKGgpfSksbCgpKTpEbih0aGlzLnNlbGVjdGVkUm93cyxoPT57YSho'@;
put 'LCEwKX0pKSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsfW9uTW91c2VEb3duKGwpe0JvKGwudGFyZ2V0LCJtYW51YWxSb3dSZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9u'@;
put 'KCksdGhpcy5wcmVzc2VkPSEwLG51bGw9PT10aGlzLmF1dG9yZXNpemVUaW1lb3V0JiYodGhpcy5hdXRvcmVzaXplVGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCh0aGlzLmF1dG9yZXNpemVU'@;
put 'aW1lb3V0KSksdGhpcy5kYmxjbGljays9MSx0aGlzLnN0YXJ0WT1sLnBhZ2VZLHRoaXMubmV3U2l6ZT10aGlzLnN0YXJ0SGVpZ2h0KX1vbk1vdXNlTW92ZShsKXt0aGlzLnByZXNzZWQmJih0aGlzLmN1cnJlbnRIZWlnaHQ9dGhpcy5zdGFydEhlaWdodCsobC5wYWdlWS10aGlzLnN0YXJ0WSks'@;
put 'RG4odGhpcy5zZWxlY3RlZFJvd3MsYT0+e3RoaXMubmV3U2l6ZT10aGlzLnNldE1hbnVhbFNpemUoYSx0aGlzLmN1cnJlbnRIZWlnaHQpfSksdGhpcy5yZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCkpfW9uTW91c2VVcCgpe2NvbnN0IGw9KCk9Pnt0'@;
put 'aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5ob3Qudmlldy5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGE9KGQsaCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEx'@;
put 'KSxoJiZsKCksdGhpcy5zYXZlTWFudWFsUm93SGVpZ2h0cygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMSl9O3RoaXMucHJlc3NlZCYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5wcmVzc2VkPSExLHRo'@;
put 'aXMubmV3U2l6ZSE9PXRoaXMuc3RhcnRIZWlnaHQmJih0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGg+MT8oRG4odGhpcy5zZWxlY3RlZFJvd3MsaD0+e2EoaCl9KSxsKCkpOkRuKHRoaXMuc2VsZWN0ZWRSb3dzLGg9PnthKGgsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0aGlzLmN1'@;
put 'cnJlbnRUSCkpfW9uQ29udGV4dE1lbnUoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuaGFuZGxlKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmd1aWRlKSx0aGlzLnByZXNzZWQ9ITEsdGhpcy5p'@;
put 'c1RyaWdnZXJlZEJ5Uk1CPSEwLHRoaXMuaG90Ll9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e3RoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMX0pfWJpbmRFdmVudHMoKXtjb25zdHtyb290RWxlbWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0'@;
put 'ZW5lcihsLCJtb3VzZW92ZXIiLGQ9PnRoaXMub25Nb3VzZU92ZXIoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixkPT50aGlzLm9uTW91c2VEb3duKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlbW92ZSIs'@;
put 'ZD0+dGhpcy5vbk1vdXNlTW92ZShkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhhbmRsZSwiY29udGV4dG1lbnUiLCgpPT50aGlzLm9u'@;
put 'Q29udGV4dE1lbnUoKSl9b25Nb2RpZnlSb3dIZWlnaHQobCxhKXtsZXQgZD1sO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleChoKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZBXSYm'@;
put 'ZiYmKGQ9Zil9cmV0dXJuIGR9b25NYXBJbml0KCl7Y29uc3QgbD13ei5nZXQodGhpcyksYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZBXSxkPXRoaXMubG9hZE1hbnVhbFJvd0hlaWdodHMoKTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3R5cGVvZiBkPCJ1Ij9kLmZvckVhY2goKGgs'@;
put 'Zik9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGYsaCl9KTpBcnJheS5pc0FycmF5KGEpPyhhLmZvckVhY2goKGgsZik9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGYsaCl9KSxsLmNvbmZpZz1hKTohMD09PWEmJkFycmF5LmlzQXJyYXkobC5jb25m'@;
put 'aWcpJiZsLmNvbmZpZy5mb3JFYWNoKChoLGYpPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSl9LCEwKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCB4aD1jbGFzcyBpSGV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe3RoaXMucm93PWwsdGhpcy5j'@;
put 'b2w9YSx0aGlzLnJvd3NwYW49ZCx0aGlzLmNvbHNwYW49aCx0aGlzLnJlbW92ZWQ9ITEsdGhpcy5jZWxsQ29vcmRzRmFjdG9yeT1mLHRoaXMuY2VsbFJhbmdlRmFjdG9yeT1ffXN0YXRpYyBORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xh'@;
put 'cmVkIHdpdGgge3JvdzogJHtsLnJvd30sIGNvbDogJHtsLmNvbH0sXHgyMAogICAgICByb3dzcGFuOiAke2wucm93c3Bhbn0sIGNvbHNwYW46ICR7bC5jb2xzcGFufX0gY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBpc1x4MjAKICAgICAgbm90IHN1cHBvcnRlZC4gSXQgd2lsbCBu'@;
put 'b3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpe3JldHVybiBBYWBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7bC5yb3d9LCAke2wuY29sfV0gaXMgcG9zaXRpb25lZFx4MjAKICAgICAgKG9yIHBvc2l0aW9uZWQg'@;
put 'cGFydGlhbGx5KSBvdXRzaWRlIG9mIHRoZSB0YWJsZSByYW5nZS4gSXQgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZSBmaXggeW91ciBzZXR1cC5gfXN0YXRpYyBJU19TSU5HTEVfQ0VMTChsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93'@;
put 'fSwgJHtsLmNvbH1dIGhhcyBib3RoICJyb3dzcGFuIlx4MjAKICAgICAgYW5kICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMSIsIHdoaWNoIG1ha2VzIGl0IGEgc2luZ2xlIGNlbGwuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBaRVJPX1NQQU5fV0FSTklO'@;
put 'RyhsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93fSwgJHtsLmNvbH1dIGhhcyAicm93c3BhbiJceDIwCiAgICAgIG9yICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0'@;
put 'aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBjb250YWluc05lZ2F0aXZlVmFsdWVzKGwpe3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvd3NwYW48MHx8bC5jb2xzcGFuPDB9c3RhdGljIGlzU2luZ2xlQ2VsbChsKXtyZXR1cm4gMT09PWwuY29sc3BhbiYmMT09PWwucm93c3Bhbn1zdGF0aWMg'@;
put 'Y29udGFpbnNaZXJvU3BhbihsKXtyZXR1cm4gMD09PWwuY29sc3Bhbnx8MD09PWwucm93c3Bhbn1zdGF0aWMgaXNPdXRPZkJvdW5kcyhsLGEsZCl7cmV0dXJuIGwucm93PDB8fGwuY29sPDB8fGwucm93Pj1hfHxsLnJvdytsLnJvd3NwYW4tMT49YXx8bC5jb2w+PWR8fGwuY29sK2wuY29sc3Bh'@;
put 'bi0xPj1kfW5vcm1hbGl6ZShsKXtjb25zdCBhPWwuY291bnRSb3dzKCksZD1sLmNvdW50Q29scygpO3RoaXMucm93PDA/dGhpcy5yb3c9MDp0aGlzLnJvdz5hLTEmJih0aGlzLnJvdz1hLTEpLHRoaXMuY29sPDA/dGhpcy5jb2w9MDp0aGlzLmNvbD5kLTEmJih0aGlzLmNvbD1kLTEpLHRoaXMu'@;
put 'cm93K3RoaXMucm93c3Bhbj5hLTEmJih0aGlzLnJvd3NwYW49YS10aGlzLnJvdyksdGhpcy5jb2wrdGhpcy5jb2xzcGFuPmQtMSYmKHRoaXMuY29sc3Bhbj1kLXRoaXMuY29sKX1pbmNsdWRlcyhsLGEpe3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5jb2w8PWEmJnRoaXMucm93K3RoaXMucm93'@;
put 'c3Bhbi0xPj1sJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49YX1pbmNsdWRlc0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5jb2w8PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1sfWluY2x1ZGVzVmVydGljYWxseShsKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMucm93K3RoaXMu'@;
put 'cm93c3Bhbi0xPj1sfXNoaWZ0KGwsYSl7Y29uc3QgZD1sWzBdfHxsWzFdLGg9YStNYXRoLmFicyhsWzBdfHxsWzFdKS0xLGY9bFswXT8iY29sc3BhbiI6InJvd3NwYW4iLF89bFswXT8iY29sIjoicm93IixUPU1hdGgubWluKGEsaCksVz1NYXRoLm1heChhLGgpLGllPXRoaXNbX10sZ2U9dGhp'@;
put 'c1tfXSt0aGlzW2ZdLTE7aWYoaWU+PWEmJih0aGlzW19dKz1kKSxkPjApYTw9Z2UmJmE+aWUmJih0aGlzW2ZdKz1kKTtlbHNlIGlmKGQ8MCl7aWYoVDw9aWUmJlc+PWdlKXJldHVybiB0aGlzLnJlbW92ZWQ9ITAsITE7aWYoaWU+PVQmJmllPD1XKXtjb25zdCB3ZT1XLWllKzEsRWU9TWF0aC5h'@;
put 'YnMoZCktd2U7dGhpc1tfXS09RWUrZCx0aGlzW2ZdLT13ZX1lbHNlIGllPD1UJiZnZT49Vz90aGlzW2ZdKz1kOmllPD1UJiZnZT49VCYmZ2U8VyYmKHRoaXNbZl0tPWdlLVQrMSl9cmV0dXJuITB9aXNGYXJ0aGVyKGwsYSl7cmV0dXJuIWx8fCgiZG93biI9PT1hP2wucm93K2wucm93c3Bhbi0x'@;
put 'PHRoaXMucm93K3RoaXMucm93c3Bhbi0xOiJ1cCI9PT1hP2wucm93PnRoaXMucm93OiJyaWdodCI9PT1hP2wuY29sK2wuY29sc3Bhbi0xPHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xOiJsZWZ0Ij09PWE/bC5jb2w+dGhpcy5jb2w6bnVsbCl9Z2V0TGFzdFJvdygpe3JldHVybiB0aGlzLnJvdyt0'@;
put 'aGlzLnJvd3NwYW4tMX1nZXRMYXN0Q29sdW1uKCl7cmV0dXJuIHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xfWdldFJhbmdlKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlRmFjdG9yeSh0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5'@;
put 'KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMuZ2V0TGFzdFJvdygpLHRoaXMuZ2V0TGFzdENvbHVtbigpKSl9fTtmdW5jdGlvbiBDeihjLGwsYSxkKXtsP2wucm93PT09YSYmbC5jb2w9PT1kPyhjLnNldEF0dHJpYnV0ZSgicm93c3BhbiIsbC5yb3dzcGFu'@;
put 'LnRvU3RyaW5nKCkpLGMuc2V0QXR0cmlidXRlKCJjb2xzcGFuIixsLmNvbHNwYW4udG9TdHJpbmcoKSkpOihjLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksYy5zdHlsZS5kaXNwbGF5PSJub25lIik6KGMucmVtb3ZlQXR0cmlidXRlKCJy'@;
put 'b3dzcGFuIiksYy5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxjLnN0eWxlLmRpc3BsYXk9IiIpfWNsYXNzIFN6e2NvbnN0cnVjdG9yKGwpe3RoaXMucGx1Z2luPWwsdGhpcy5tZXJnZWRDZWxscz1bXSx0aGlzLmhvdD1sLmhvdH1zdGF0aWMgSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhsKXty'@;
put 'ZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93fSwgJHtsLmNvbH1dLCBvdmVybGFwc1x4MjAKICAgICAgd2l0aCB0aGUgb3RoZXIgZGVjbGFyZWQgbWVyZ2VkIGNlbGwuIFRoZSBvdmVybGFwcGluZyBtZXJnZWQgY2VsbCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0'@;
put 'YWJsZSwgcGxlYXNlXHgyMAogICAgICBmaXggeW91ciBzZXR1cC5gfWdldChsLGEpe2xldCBoPSExO3JldHVybiBEbih0aGlzLm1lcmdlZENlbGxzLGY9PiEoZi5yb3c8PWwmJmYucm93K2Yucm93c3Bhbi0xPj1sJiZmLmNvbDw9YSYmZi5jb2wrZi5jb2xzcGFuLTE+PWEmJihoPWYsMSkpKSxo'@;
put 'fWdldEJ5UmFuZ2UobCl7bGV0IGQ9ITE7cmV0dXJuIERuKHRoaXMubWVyZ2VkQ2VsbHMsaD0+IShoLnJvdzw9bC5mcm9tLnJvdyYmaC5yb3craC5yb3dzcGFuLTE+PWwudG8ucm93JiZoLmNvbDw9bC5mcm9tLmNvbCYmaC5jb2wraC5jb2xzcGFuLTE+PWwudG8uY29sKXx8KGQ9aCxkKSksZH1n'@;
put 'ZXRXaXRoaW5SYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxscyxoPVtdO2xldCBmPWw7aWYoIWYuaW5jbHVkZXNSYW5nZSl7Y29uc3QgXz10aGlzLmhvdC5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhmLmZyb20ucm93LGYuZnJvbS5jb2wpLFQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi50by5yb3csZi50by5jb2wpO2Y9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShfLF8sVCl9cmV0dXJuIERuKGQsXz0+e2NvbnN0IFQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo'@;
put 'Xy5yb3csXy5jb2wpLFc9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoXy5yb3crXy5yb3dzcGFuLTEsXy5jb2wrXy5jb2xzcGFuLTEpLGllPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoVCxULFcpO2E/Zi5vdmVybGFwcyhpZSkmJmgucHVzaChfKTpmLmluY2x1ZGVzUmFuZ2UoaWUpJiZo'@;
put 'LnB1c2goXyl9KSwhIWgubGVuZ3RoJiZofWFkZChsKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHMsZD1sLnJvdyxoPWwuY29sLFQ9bmV3IHhoKGQsaCxsLnJvd3NwYW4sbC5jb2xzcGFuLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UpLFc9dGhp'@;
put 'cy5nZXQoZCxoKSxpZT10aGlzLmlzT3ZlcmxhcHBpbmcoVCk7cmV0dXJuIFd8fGllPyhHYShTei5JU19PVkVSTEFQUElOR19XQVJOSU5HKFQpKSwhMSk6KHRoaXMuaG90JiZULm5vcm1hbGl6ZSh0aGlzLmhvdCksYS5wdXNoKFQpLFQpfXJlbW92ZShsLGEpe2NvbnN0IGQ9dGhpcy5tZXJnZWRD'@;
put 'ZWxscyxoPXRoaXMuZ2V0KGwsYSksZj1oP3RoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihoKTotMTtyZXR1cm4hKCFofHwtMT09PWYpJiYoZC5zcGxpY2UoZiwxKSxoKX1jbGVhcigpe2NvbnN0IGE9W10sZD1bXTtEbih0aGlzLm1lcmdlZENlbGxzLGg9Pntjb25zdCBmPXRoaXMuaG90LmdldENl'@;
put 'bGwoaC5yb3csaC5jb2wpO2YmJmEucHVzaChbZix0aGlzLmdldChoLnJvdyxoLmNvbCksaC5yb3csaC5jb2xdKX0pLHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoPTAsRG4oYSwoaCxmKT0+e3ZvKDAsaC5yb3dzcGFuLTEsXz0+e3ZvKDAsaC5jb2xzcGFuLTEsVD0+e2lmKDAhPT1UfHwwIT09Xyl7'@;
put 'Y29uc3QgVz10aGlzLmhvdC5nZXRDZWxsKGgucm93K18saC5jb2wrVCk7VyYmZC5wdXNoKFtXLG51bGwsbnVsbCxudWxsXSl9fSl9KSxhW2ZdWzFdPW51bGx9KSxEbihhLGg9PntDeiguLi5oKX0pLERuKGQsaD0+e0N6KC4uLmgpfSl9aXNPdmVybGFwcGluZyhsKXtjb25zdCBhPXRoaXMuaG90'@;
put 'Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoMCwwKSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxsLmNvbCksdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crbC5yb3dzcGFuLTEsbC5jb2wrbC5jb2xzcGFuLTEpKTtsZXQgZD0hMTty'@;
put 'ZXR1cm4gRG4odGhpcy5tZXJnZWRDZWxscyxoPT4hdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcygwLDApLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgucm93LGguY29sKSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLnJvdytoLnJv'@;
put 'd3NwYW4tMSxoLmNvbCtoLmNvbHNwYW4tMSkpLm92ZXJsYXBzKGEpfHwoZD0hMCwhMSkpLGR9aXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpO3JldHVybiBkJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5k'@;
put 'ZXgoZC5yb3csMSk9PT1sJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk9PT1hfWdldEZpcnN0UmVuZGVyYWJsZUNvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtpZighZHx8dGhpcy5pc0ZpcnN0UmVuZGVyYWJsZU1l'@;
put 'cmdlZENlbGwobCxhKSlyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKTtjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLnJvdywxKSxmPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRk'@;
put 'ZW5JbmRleChkLmNvbCwxKTtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1zaGlmdENvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPVswLDBdO3N3aXRjaChsKXtjYXNlInJpZ2h0IjpoWzBdKz1kO2JyZWFrO2Nhc2UibGVmdCI6aFswXS09ZDticmVhaztjYXNlImRvd24i'@;
put 'OmhbMV0rPWQ7YnJlYWs7Y2FzZSJ1cCI6aFsxXS09ZH1Ebih0aGlzLm1lcmdlZENlbGxzLGY9PntmLnNoaWZ0KGgsYSl9KSx2ayh0aGlzLm1lcmdlZENlbGxzLmxlbmd0aC0xLDAsZj0+e2NvbnN0IF89dGhpcy5tZXJnZWRDZWxsc1tmXTtfJiZfLnJlbW92ZWQmJnRoaXMubWVyZ2VkQ2VsbHMu'@;
put 'c3BsaWNlKHRoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihfKSwxKX0pfX1jb25zdCBvSGU9U3o7c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZU1lcmdlQ2VsbHMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJNZXJnZUNlbGxzIiksc28uZ2V0U2luZ2xldG9uKCku'@;
put 'cmVnaXN0ZXIoImJlZm9yZVVubWVyZ2VDZWxscyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVubWVyZ2VDZWxscyIpO2NvbnN0IEt5PSJtZXJnZUNlbGxzIixhb2U9bmV3IFdlYWtNYXAsbG9lPUt5O2NsYXNzIGhIZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tF'@;
put 'WSgpe3JldHVybiBLeX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksYW9lLnNldCh0aGlzLHtsYXN0RGVzaXJlZENvb3JkczpudWxsfSksdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bnVsbCx0aGlzLmF1dG9maWxsQ2Fs'@;
put 'Y3VsYXRpb25zPW51bGwsdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbS3ldfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3'@;
put 'IG9IZSh0aGlzKSx0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyBjbGFzcyBzSGV7Y29uc3RydWN0b3IobCl7dGhpcy5wbHVnaW49bCx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbj10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24sdGhpcy5jdXJyZW50RmlsbERhdGE9bnVs'@;
put 'bH1jb3JyZWN0U2VsZWN0aW9uQXJlYVNpemUobCl7aWYobFswXT09PWxbMl0mJmxbMV09PT1sWzNdKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsWzBdLGxbMV0pO2EmJihsWzJdPWxbMF0rYS5yb3dzcGFuLTEsbFszXT1sWzFdK2EuY29sc3Bhbi0xKX19Z2V0RGly'@;
put 'ZWN0aW9uKGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hWzBdPT09bFswXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJkb3duIjphWzJdPT09bFsyXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJ1cCI6YVsxXT09PWxbMV0mJmFbMl09PT1sWzJdPyJyaWdodCI6ImxlZnQiLGR9c25h'@;
put 'cERyYWdBcmVhKGwsYSxkLGgpe2NvbnN0IGY9YS5zbGljZSgwKSxfPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxbVCxXLGllLGdlXT1sLEVlPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMT9pZS1UKzE6Z2UtVysxLG90PV8tTWF0aC5mbG9vcihfL0VlKSpFZSxldD10aGlzLmdldEZh'@;
put 'cnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZihldClpZigiZG93biI9PT1kKXtjb25zdCB5dD1ldC5yb3crZXQucm93c3Bhbi1ULW90O2ZbMl0reXQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9mWzJdLT1vdDpmWzJdKz1vdD95dDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0'@;
put 'IHl0PWV0LmNvbCtldC5jb2xzcGFuLVctb3Q7ZlszXSt5dD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2ZbM10tPW90OmZbM10rPW90P3l0OjB9ZWxzZSBpZigidXAiPT09ZCl7Y29uc3QgeXQ9aWUtb3QtZXQucm93KzE7ZlswXSt5dDwwP2ZbMF0rPW90OmZbMF0tPW90P3l0OjB9ZWxz'@;
put 'ZSBpZigibGVmdCI9PT1kKXtjb25zdCB5dD1nZS1vdC1ldC5jb2wrMTtmWzFdK3l0PDA/ZlsxXSs9b3Q6ZlsxXS09b3Q/eXQ6MH1yZXR1cm4gdGhpcy51cGRhdGVDdXJyZW50RmlsbENhY2hlKHtiYXNlQXJlYTpsLGRyYWdEaXJlY3Rpb246ZCxmb3VuZE1lcmdlZENlbGxzOmgsZmlsbFNpemU6'@;
put 'XyxkcmFnQXJlYTpmLGN5Y2xlTGVuZ3RoOkVlfSksZn11cGRhdGVDdXJyZW50RmlsbENhY2hlKGwpe3RoaXMuY3VycmVudEZpbGxEYXRhfHwodGhpcy5jdXJyZW50RmlsbERhdGE9e30pLEtsKHRoaXMuY3VycmVudEZpbGxEYXRhLGwpfWdldEF1dG9maWxsU2l6ZShsLGEsZCl7Y29uc3RbaCxm'@;
put 'LF8sVF09bCxbVyxpZSxnZSx3ZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuIGgtVztjYXNlImRvd24iOnJldHVybiBnZS1fO2Nhc2UibGVmdCI6cmV0dXJuIGYtaWU7Y2FzZSJyaWdodCI6cmV0dXJuIHdlLVQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2Nv'@;
put 'bnN0W2gsZixfLFRdPWwsW1csaWUsZ2Usd2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybltXLGllLGgtMSxUXTtjYXNlImRvd24iOnJldHVybltfKzEsZixnZSxUXTtjYXNlImxlZnQiOnJldHVybltXLGllLF8sZi0xXTtjYXNlInJpZ2h0IjpyZXR1cm5baCxUKzEsZ2Usd2VdO2RlZmF1'@;
put 'bHQ6cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKXtjb25zdFtmLF8sVCxXXT1sLGllPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMSxnZT1pZT9UOlcsd2U9aWU/ZjpfLEVlPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxaZT1pZT9ULWYrMTpXLV8rMSxl'@;
put 'dD1FZS1NYXRoLmZsb29yKEVlL1plKSpaZTtsZXQgeXQ9bnVsbCxrdD1udWxsLFN0PW51bGw7c3dpdGNoKGQpe2Nhc2UidXAiOnl0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLFN0PWdlLWV0KzE7YnJlYWs7Y2FzZSJsZWZ0Ijp5dD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLFN0PWdlLWV0KzE7YnJl'@;
put 'YWs7Y2FzZSJkb3duIjp5dD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixTdD13ZStldC0xO2JyZWFrO2Nhc2UicmlnaHQiOnl0PSJpbmNsdWRlc0hvcml6b250YWxseSIsU3Q9d2UrZXQtMX1yZXR1cm4gRG4oaCxRdD0+e1F0W3l0XShTdCkmJlF0LmlzRmFydGhlcihrdCxkKSYmKGt0PVF0KX0pLGt0'@;
put 'fXJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihsKXtpZighdGhpcy5jdXJyZW50RmlsbERhdGEpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRSYW5nZUZyb21DaGFuZ2VzKGwpLGQ9dGhpcy5jdXJyZW50RmlsbERhdGEuZm91bmRNZXJnZWRDZWxscyxoPXRoaXMuY3VycmVudEZpbGxEYXRhLmRy'@;
put 'YWdEaXJlY3Rpb24sZj0oaWUsZ2UpPT57c3dpdGNoKGgpe2Nhc2UidXAiOnJldHVybiBpZS5yb3ctZ2U+PWEuZnJvbS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gaWUucm93K2llLnJvd3NwYW4tMStnZTw9YS50by5yb3c7Y2FzZSJsZWZ0IjpyZXR1cm4gaWUuY29sLWdlPj1hLmZyb20uY29sdW1u'@;
put 'O2Nhc2UicmlnaHQiOnJldHVybiBpZS5jb2wraWUuY29sc3Bhbi0xK2dlPD1hLnRvLmNvbHVtbjtkZWZhdWx0OnJldHVybiBudWxsfX07bGV0IF89MCxUPW51bGwsVz0xO2Rve2ZvcihsZXQgaWU9MDtpZTxkLmxlbmd0aDtpZSs9MSl7aWYoVD1kW2llXSxfPVcqdGhpcy5jdXJyZW50RmlsbERh'@;
put 'dGEuY3ljbGVMZW5ndGgsZihULF8pKXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6VC5yb3ctXyxyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wsY29sc3BhbjpULmNvbHNwYW59KTticmVhaztjYXNlImRvd24iOnRoaXMucGx1'@;
put 'Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpULnJvdytfLHJvd3NwYW46VC5yb3dzcGFuLGNvbDpULmNvbCxjb2xzcGFuOlQuY29sc3Bhbn0pO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LHJvd3NwYW46'@;
put 'VC5yb3dzcGFuLGNvbDpULmNvbC1fLGNvbHNwYW46VC5jb2xzcGFufSk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LHJvd3NwYW46VC5yb3dzcGFuLGNvbDpULmNvbCtfLGNvbHNwYW46VC5jb2xzcGFufSl9aWU9PT1k'@;
put 'Lmxlbmd0aC0xJiYoVys9MSl9fXdoaWxlKGYoVCxfKSk7dGhpcy5jdXJyZW50RmlsbERhdGE9bnVsbCx0aGlzLnBsdWdpbi5ob3QucmVuZGVyKCksZC5sZW5ndGg+MCYmdGhpcy5wbHVnaW4uaWZDaHJvbWVGb3JjZVJlcGFpbnQoKX1nZXRSYW5nZUZyb21DaGFuZ2VzKGwpe2NvbnN0IGE9e21p'@;
put 'bjpudWxsLG1heDpudWxsfSxkPXttaW46bnVsbCxtYXg6bnVsbH07cmV0dXJuIERuKGwsaD0+e2NvbnN0IGY9aFswXSxfPXRoaXMucGx1Z2luLmhvdC5wcm9wVG9Db2woaFsxXSk7KG51bGw9PT1hLm1pbnx8ZjxhLm1pbikmJihhLm1pbj1mKSwobnVsbD09PWEubWF4fHxmPmEubWF4KSYmKGEu'@;
put 'bWF4PWYpLChudWxsPT09ZC5taW58fF88ZC5taW4pJiYoZC5taW49XyksKG51bGw9PT1kLm1heHx8Xz5kLm1heCkmJihkLm1heD1fKX0pLHtmcm9tOntyb3c6YS5taW4sY29sdW1uOmQubWlufSx0bzp7cm93OmEubWF4LGNvbHVtbjpkLm1heH19fWRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9u'@;
put 'cyhsLGEsZCl7Y29uc3QgaD10aGlzLmdldERyYWdBcmVhKGwsYSxkKSxbZixfLFQsV109aCxpZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZixfKSxnZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVCxXKSx3ZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNl'@;
put 'bGxSYW5nZShpZSxpZSxnZSk7cmV0dXJuISF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZSh3ZSwhMCl9fSh0aGlzKSx0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucz1uZXcgY2xhc3MgbEhle2NvbnN0cnVjdG9yKGwpe3RoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5o'@;
put 'b3QsdGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZT0iZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwifXNuYXBEZWx0YShsLGEsZCl7Y29uc3QgaD1hLnRvLF89aC5jb2wrbC5jb2w7bC5yb3c/dGhpcy5qdW1wT3Zlck1lcmdlZENlbGwobCxkLGgucm93K2wucm93KTpsLmNvbCYm'@;
put 'dGhpcy5qdW1wT3Zlck1lcmdlZENlbGwobCxkLF8pfWp1bXBPdmVyTWVyZ2VkQ2VsbChsLGEsZCl7bGV0IGg9bC5yb3d8fGwuY29sLGY9bnVsbCxfPW51bGwsVD1udWxsO2wucm93PyhmPWEuaW5jbHVkZXNWZXJ0aWNhbGx5KGQpLF89YS5yb3csVD1hLmdldExhc3RSb3coKSk6bC5jb2wmJihm'@;
put 'PWEuaW5jbHVkZXNIb3Jpem9udGFsbHkoZCksXz1hLmNvbCxUPWEuZ2V0TGFzdENvbHVtbigpKSwwIT09aCYmKGg+MD9mJiZkIT09XyYmKGgrPVQtZCsxKTpmJiZkIT09VCYmKGgtPWQtXysxKSxsLnJvdz9sLnJvdz1oOmwuY29sJiYobC5jb2w9aCkpfWdldFVwZGF0ZWRTZWxlY3Rpb25SYW5n'@;
put 'ZShsLGEpe3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGwuaGlnaGxpZ2h0LGwuZnJvbSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnRvLnJvdythLnJvdyxsLnRvLmNvbCthLmNvbCkpfWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShsLGEsZCxoKXtjb25zdCBm'@;
put 'PU1hdGgubWluKGRbMF0sZFsyXSksXz1NYXRoLm1pbihkWzFdLGRbM10pLFQ9TWF0aC5tYXgoZFswXSxkWzJdKSxXPU1hdGgubWF4KGRbMV0sZFszXSk7aWYodm9pZCAwPT09aHx8IXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwo'@;
put 'bCxhKSlyZXR1cm47Y29uc3QgZ2U9dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2lmKCFnZSlyZXR1cm47Y29uc3Qgd2U9Z2UuZ2V0TGFzdFJvdygpLEVlPWdlLmdldExhc3RDb2x1bW4oKTtyZXR1cm4gZjw9Z2Uucm93JiZfPD1nZS5jb2wmJlQ+PXdlJiZXPj1F'@;
put 'ZT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS0ke2h9YDp0aGlzLnBsdWdpbi5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuaXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGdlLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxl'@;
put 'Y3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGwsYSl7Y29uc3QgZD1bXTtpZighYXx8IWwpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxsLnJvd3NwYW47aCs9MSlmb3IobGV0IGY9MDtmPGwuY29sc3BhbjtmKz0xKWQucHVz'@;
put 'aCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdytoLGwuY29sK2YpKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grPTEpe2NvbnN0IGY9W107Zm9yKGxldCBfPTA7XzxhLmxlbmd0aDtfKz0xKWZbX109YVtfXS5pbmNsdWRlcyhkW2hdKTtpZighZi5pbmNsdWRlcyghMCkpcmV0dXJu'@;
put 'ITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8PTc7YSs9MSlsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHthfWApO3JldHVybiBsLnB1c2goYCR7dGhpcy5m'@;
put 'dWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgKSxsfX0odGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckluaXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlUcmFuc2Zvcm1TdGFydCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCguLi5hcmd1bWVudHMpfSksdGhp'@;
put 'cy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlUcmFuc2Zvcm1FbmQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUdldENlbGxDb29yZHMo'@;
put 'Li4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVNldFJhbmdlU3RhcnQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGwub25CZWZvcmVTZXRSYW5nZVN0YXJ0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlRW5kIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlU2V0UmFuZ2VFbmQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0'@;
put 'aW9uIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclJlbmRlcmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFm'@;
put 'dGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5hZGRNZXJnZUFjdGlvbnNUb0NvbnRleHRNZW51KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldENlbGxNZXRh'@;
put 'KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3Bv'@;
put 'cnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUF1dG9maWxsUmFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2Rp'@;
put 'ZnlBdXRvZmlsbFJhbmdlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDcmVhdGVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGwu'@;
put 'b25BZnRlclJlbW92ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyQ3JlYXRlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBs'@;
put 'Lm9uQWZ0ZXJSZW1vdmVSb3coLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNoYW5nZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcmF3Qm9yZGVycyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5v'@;
put 'bkJlZm9yZURyYXdBcmVhQm9yZGVycyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckRyYXdTZWxlY3Rpb24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ2VsbENsYXNz'@;
put 'TmFtZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLChhLGQpPT57aWYoIk1lcmdlQ2VsbHMiPT09ZClyZXR1cm4hMX0pLHRoaXMucmVnaXN0ZXJTaG9y'@;
put 'dGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xsZWN0aW9ucygpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LnJlbmRlcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtjb25zdCBsPXRoaXMu'@;
put 'aG90LmdldFNldHRpbmdzKClbS3ldO3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncyhsKSxzdXBlci51cGRhdGVQbHVnaW4oKX1pZkNocm9tZUZvcmNlUmVwYWludCgpe2lmKCFfTigpKXJldHVybjtjb25zdCBsPVtdO2xl'@;
put 'dCBhPVtdO3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmZvckVhY2goZD0+e2NvbnN0e3JvdzpoLHJvd3NwYW46Zn09ZDtmb3IobGV0IF89aCsxO188aCtmO18rKylhLnB1c2goXyl9KSxhPVsuLi5uZXcgU2V0KGEpXSxhLmZvckVhY2goZD0+e2NvbnN0IGg9dGhpcy5o'@;
put 'b3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkKTt0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmdldE92ZXJsYXlzKCEwKS5tYXAoZj0+Im1hc3RlciI9PT1mPy5uYW1lP2Y6Zi5jbG9uZS53dFRhYmxlKS5mb3JFYWNoKGY9Pntjb25zdCBfPWYuZ2V0'@;
put 'Um93KGgpO18mJihfLnN0eWxlLmJhY2tncm91bmQ9bjcoXywiYmFja2dyb3VuZENvbG9yIikucmVwbGFjZSgiKSIsIiwgMC45OSkiKSxsLnB1c2goXykpfSl9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57bC5mb3JFYWNoKGQ9PntkLnN0eWxlLmJhY2tncm91bmQ9bjcoZCwiYmFj'@;
put 'a2dyb3VuZENvbG9yIikucmVwbGFjZSgiLCAwLjk5KSIsIikiKX0pfSwxKX12YWxpZGF0ZVNldHRpbmcobCl7bGV0IGE9ITA7cmV0dXJuISFsJiYoeGguY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKT8oR2EoeGguTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCkpLGE9ITEpOnhoLmlzT3V0T2ZC'@;
put 'b3VuZHMobCx0aGlzLmhvdC5jb3VudFJvd3MoKSx0aGlzLmhvdC5jb3VudENvbHMoKSk/KEdhKHhoLklTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKSksYT0hMSk6eGguaXNTaW5nbGVDZWxsKGwpPyhHYSh4aC5JU19TSU5HTEVfQ0VMTChsKSksYT0hMSk6eGguY29udGFpbnNaZXJvU3Bhbihs'@;
put 'KSYmKEdhKHhoLlpFUk9fU1BBTl9XQVJOSU5HKGwpKSxhPSExKSxhKX1nZW5lcmF0ZUZyb21TZXR0aW5ncyhsKXtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBhPVtdO2lmKERuKGwsZD0+e2lmKCF0aGlzLnZhbGlkYXRlU2V0dGluZyhkKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC5fY3Jl'@;
put 'YXRlQ2VsbENvb3JkcyhkLnJvdyxkLmNvbCksZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdytkLnJvd3NwYW4tMSxkLmNvbCtkLmNvbHNwYW4tMSksXz10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGgsaCxmKTt0aGlzLm1lcmdlUmFuZ2UoXywhMCwhMCksdm8oZC5yb3csZC5y'@;
put 'b3crZC5yb3dzcGFuLTEsVD0+e3ZvKGQuY29sLGQuY29sK2QuY29sc3Bhbi0xLFc9PntUPT09ZC5yb3cmJlc9PT1kLmNvbHx8YS5wdXNoKFtULFcsbnVsbF0pfSl9KX0pLDA9PT1hLmxlbmd0aClyZXR1cm47dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChhKX19Y2xlYXJDb2xsZWN0aW9ucygpe3Ro'@;
put 'aXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmNsZWFyKCl9Y2FuTWVyZ2VSYW5nZShsKXtyZXR1cm4hIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKXx8dGhpcy52YWxpZGF0ZVNldHRpbmcobCl9dG9nZ2xlTWVyZ2VPblNlbGVjdGlvbigp'@;
put 'e2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24odGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudG9nZ2xlTWVyZ2UobCksdGhpcy5ob3Quc2VsZWN0Q2VsbChh'@;
put 'LnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9bWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24o'@;
put 'dGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMubWVyZ2VSYW5nZShsKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX11bm1lcmdlU2VsZWN0aW9uKCl7'@;
put 'bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMuaG90LnNlbGVj'@;
put 'dENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfW1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNb'@;
put 'Ml07Y29uc3QgaD1sLmdldFRvcFN0YXJ0Q29ybmVyKCksZj1sLmdldEJvdHRvbUVuZENvcm5lcigpLF89e3JvdzpoLnJvdyxjb2w6aC5jb2wscm93c3BhbjpmLnJvdy1oLnJvdysxLGNvbHNwYW46Zi5jb2wtaC5jb2wrMX0sVD1bXTtsZXQgVz1udWxsO3JldHVybiEhdGhpcy5jYW5NZXJnZVJh'@;
put 'bmdlKF8sYSkmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTWVyZ2VDZWxscyIsbCxhKSx2bygwLF8ucm93c3Bhbi0xLGdlPT57dm8oMCxfLmNvbHNwYW4tMSx3ZT0+e2xldCBFZT1udWxsO1RbZ2VdfHwoVFtnZV09W10pLDA9PT1nZSYmMD09PXdlP0VlPXRoaXMuaG90LmdldFNvdXJjZURh'@;
put 'dGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhfLnJvdyksdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihfLmNvbCkpOnRoaXMuaG90LnNldENlbGxNZXRhKF8ucm93K2dlLF8uY29sK3dlLCJoaWRkZW4iLCEwKSxUW2dlXVt3ZV09RWV9KX0pLHRoaXMuaG90LnNldENlbGxNZXRhKF8u'@;
put 'cm93LF8uY29sLCJzcGFubmVkIiwhMCksIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZChfKXx8KGQ/Vz1bXy5yb3csXy5jb2wsVF06dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoXy5yb3csXy5jb2wsVCx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2luTmFtZSksYXx8dGhpcy5pZkNo'@;
put 'cm9tZUZvcmNlUmVwYWludCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck1lcmdlQ2VsbHMiLGwsXyxhKSxXKSl9dW5tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD10aGlzLm1lcmdlZENl'@;
put 'bGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShsKTtkJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVubWVyZ2VDZWxscyIsbCxhKSxEbihkLGg9Pnt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5yZW1vdmUoaC5yb3csaC5jb2wpLHZvKDAsaC5yb3dzcGFuLTEsZj0+e3ZvKDAsaC5j'@;
put 'b2xzcGFuLTEsXz0+e3RoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrXywiaGlkZGVuIiksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCtfLCJjb3B5YWJsZSIpfSl9KSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdyxoLmNvbCwic3Bhbm5lZCIp'@;
put 'fSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5tZXJnZUNlbGxzIixsLGEpLHRoaXMuaG90LnJlbmRlcigpKX10b2dnbGVNZXJnZShsKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLmZyb20ucm93LGwuZnJvbS5jb2wpO2Eucm93PT09bC5mcm9tLnJvdyYmYS5j'@;
put 'b2w9PT1sLmZyb20uY29sJiZhLnJvdythLnJvd3NwYW4tMT09PWwudG8ucm93JiZhLmNvbCthLmNvbHNwYW4tMT09PWwudG8uY29sP3RoaXMudW5tZXJnZVJhbmdlKGwpOnRoaXMubWVyZ2VTZWxlY3Rpb24obCl9bWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhsLGEpLF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsXykpfXVubWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLF89dGhpcy5ob3QuX2Ny'@;
put 'ZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLnVubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGYsZixfKSl9b25BZnRlckluaXQoKXt0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKHRoaXMuaG90LmdldFNldHRpbmdzKClbS3ldKSx0aGlzLmhvdC5yZW5kZXIoKX1yZWdpc3Rl'@;
put 'clNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwibSJdXSxjYWxsYmFjazooKT0+e3RoaXMudG9nZ2xlTWVyZ2UodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSksdGhp'@;
put 'cy5ob3QucmVuZGVyKCl9LHJ1bk9ubHlJZjpkPT4hZC5hbHRLZXksZ3JvdXA6bG9lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGxvZSl9b25BZnRlcklzTXVsdGlw'@;
put 'bGVTZWxlY3Rpb24obCl7aWYobCl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscyxkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0xKWlmKGQuZnJvbS5yb3c9PT1hW2hdLnJvdyYmZC5mcm9tLmNv'@;
put 'bD09PWFbaF0uY29sJiZkLnRvLnJvdz09PWFbaF0ucm93K2FbaF0ucm93c3Bhbi0xJiZkLnRvLmNvbD09PWFbaF0uY29sK2FbaF0uY29sc3Bhbi0xKXJldHVybiExfXJldHVybiBsfW9uTW9kaWZ5VHJhbnNmb3JtU3RhcnQobCl7Y29uc3QgYT1hb2UuZ2V0KHRoaXMpLGQ9dGhpcy5ob3QuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKTtsZXQgaD17cm93Omwucm93LGNvbDpsLmNvbH0sZj1udWxsO2NvbnN0IF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5oaWdobGlnaHQucm93LGQuaGlnaGxpZ2h0LmNvbCksVD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoXy5yb3csXy5j'@;
put 'b2wpO2lmKGEubGFzdERlc2lyZWRDb29yZHN8fChhLmxhc3REZXNpcmVkQ29vcmRzPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG51bGwsbnVsbCkpLFQpe2NvbnN0IGllPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFQucm93LFQuY29sKSxnZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhULnJvdytULnJvd3NwYW4tMSxULmNvbCtULmNvbHNwYW4tMSk7dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShpZSxpZSxnZSkuaW5jbHVkZXMoYS5sYXN0RGVzaXJlZENvb3Jkcyl8fChhLmxhc3REZXNpcmVkQ29vcmRzPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG51bGwsbnVs'@;
put 'bCkpLGgucm93PWEubGFzdERlc2lyZWRDb29yZHMucm93P2EubGFzdERlc2lyZWRDb29yZHMucm93LV8ucm93Omgucm93LGguY29sPWEubGFzdERlc2lyZWRDb29yZHMuY29sP2EubGFzdERlc2lyZWRDb29yZHMuY29sLV8uY29sOmguY29sLGwucm93PjA/aC5yb3c9VC5yb3crVC5yb3dzcGFu'@;
put 'LTEtXy5yb3crbC5yb3c6bC5yb3c8MCYmKGgucm93PV8ucm93LVQucm93K2wucm93KSxsLmNvbD4wP2guY29sPVQuY29sK1QuY29sc3Bhbi0xLV8uY29sK2wuY29sOmwuY29sPDAmJihoLmNvbD1fLmNvbC1ULmNvbCtsLmNvbCl9Zj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLmhpZ2hs'@;
put 'aWdodC5yb3craC5yb3csZC5oaWdobGlnaHQuY29sK2guY29sKTtjb25zdCBXPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLnJvdyxmLmNvbCk7aWYoVyl7Y29uc3QgaWU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0Rmlyc3RSZW5kZXJhYmxlQ29vcmRzKFcucm93LFcu'@;
put 'Y29sKTthLmxhc3REZXNpcmVkQ29vcmRzPWYsaD17cm93OmllLnJvdy1fLnJvdyxjb2w6aWUuY29sLV8uY29sfX0wIT09aC5yb3cmJihsLnJvdz1oLnJvdyksMCE9PWguY29sJiYobC5jb2w9aC5jb2wpfW9uTW9kaWZ5VHJhbnNmb3JtRW5kKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0'@;
put 'ZWRSYW5nZUxhc3QoKSxkPVd1KGwpLGg9dGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0VXBkYXRlZFNlbGVjdGlvblJhbmdlKGEsbCk7bGV0IGY9V3UoZCk7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShoLCEwKTtkb3tmPVd1KGQpLHRoaXMu'@;
put 'c2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFVwZGF0ZWRTZWxlY3Rpb25SYW5nZShhLGQpLERuKF8sVD0+e3RoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLnNuYXBEZWx0YShkLGEsVCl9KX13aGlsZShkLnJvdyE9PWYucm93fHxkLmNvbCE9PWYuY29sKTtsLnJvdz1kLnJvdyxsLmNvbD1kLmNv'@;
put 'bH1vbk1vZGlmeUdldENlbGxDb29yZHMobCxhKXtpZihsPDB8fGE8MClyZXR1cm47Y29uc3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtpZighZClyZXR1cm47Y29uc3R7cm93OmgsY29sOmYsY29sc3BhbjpfLHJvd3NwYW46VH09ZDtyZXR1cm5baCxmLGgrVC0xLGYr'@;
put 'Xy0xXX1hZGRNZXJnZUFjdGlvbnNUb0NvbnRleHRNZW51KGwpe2wuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gdUhlKGMpe3JldHVybntrZXk6Im1lcmdlQ2VsbHMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYobCl7Y29uc3QgYT1jLm1l'@;
put 'cmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTtpZihhLnJvdz09PWxbMF0mJmEuY29sPT09bFsxXSYmYS5yb3crYS5yb3dzcGFuLTE9PT1sWzJdJiZhLmNvbCthLmNvbHNwYW4tMT09PWxbM10pcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShIVil9cmV0dXJuIHRoaXMu'@;
put 'Z2V0VHJhbnNsYXRlZFBocmFzZShGVil9LGNhbGxiYWNrKCl7Yy50b2dnbGVNZXJnZU9uU2VsZWN0aW9uKCl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO3JldHVybiFsfHx4aC5pc1NpbmdsZUNlbGwoe3JvdzpsWzBdLGNvbDpsWzFdLHJvd3NwYW46bFsyXS1s'@;
put 'WzBdKzEsY29sc3BhbjpsWzNdLWxbMV0rMX0pfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKX0saGlkZGVuOiExfX0odGhpcykpfW9uQWZ0ZXJSZW5kZXJlcihsLGEsZCl7Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYSxkKSxmPXVzKGgpP1d1KGgp'@;
put 'OnZvaWQgMDtpZih1cyhmKSl7Y29uc3R7cm93SW5kZXhNYXBwZXI6Xyxjb2x1bW5JbmRleE1hcHBlcjpUfT10aGlzLmhvdCx7cm93OlcsY29sOmllLGNvbHNwYW46Z2Uscm93c3Bhbjp3ZX09ZixbRWUsWmVdPXRoaXMudHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShXLHdlLGllLGdl'@;
put 'KSx5dD1FZS1fLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYSkrMSxrdD1aZS1ULmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZCkrMTtmLnJvdz1fLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLnJvdywxKSxmLmNvbD1ULmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNv'@;
put 'bCwxKSxmLnJvd3NwYW49TWF0aC5taW4oZi5yb3dzcGFuLHl0KSxmLmNvbHNwYW49TWF0aC5taW4oZi5jb2xzcGFuLGt0KX1DeihsLGYsYSxkKX1vbkJlZm9yZVNldFJhbmdlU3RhcnQobCl7aWYodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxs'@;
put 'KGwucm93LGwuY29sKSl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobC5yb3csbC5jb2wpO1tsLnJvdyxsLmNvbF09W2Eucm93LGEuY29sXX19b25CZWZvcmVTZXRSYW5nZUVuZChsKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7YS5oaWdo'@;
put 'bGlnaHQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5oaWdobGlnaHQucm93LGEuaGlnaGxpZ2h0LmNvbCksYS50bz1sO2xldCBkPSExO2lmKCF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5'@;
put 'Um93SGVhZGVyKCkpZG97ZD0hMTtmb3IobGV0IGg9MDtoPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtoKz0xKXtjb25zdCBfPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2hdLmdldFJhbmdlKCk7YS5leHBhbmRCeVJhbmdlKF8p'@;
put 'JiYobC5yb3c9YS50by5yb3csbC5jb2w9YS50by5jb2wsZD0hMCl9fXdoaWxlKGQpfW9uQWZ0ZXJHZXRDZWxsTWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtoJiYoaC5yb3chPT1sfHxoLmNvbCE9PWE/ZC5jb3B5YWJsZT0hMTooZC5yb3dz'@;
put 'cGFuPWgucm93c3BhbixkLmNvbHNwYW49aC5jb2xzcGFuKSl9b25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSksdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChs'@;
put 'LGEpfW1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCBfPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u'@;
put 'LmdldChoLGYpO2lmKHVzKF8pKXtjb25zdCBUPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLnJvdywxKSk7aWYoVDxsLnN0YXJ0Um93KXJldHVybiBsLnN0YXJ0Um93PVQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQo'@;
put 'bCxhKX19fW1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IF89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24u'@;
put 'Z2V0KGgsZik7aWYodXMoXykpe2NvbnN0IFc9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KF8ucm93K18ucm93c3Bhbi0xLC0xKSk7aWYoVz5sLmVuZFJvdylyZXR1cm4gbC5lbmRSb3c9Vyx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRS'@;
put 'b3dFbmQobCxhKX19fW9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZShsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEpLHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKX1tb2RpZnlWaWV3'@;
put 'cG9ydENvbHVtblN0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Q29sdW1uKTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQo'@;
put 'ZixoKTtpZih1cyhfKSl7Y29uc3QgVD1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoXy5jb2wsMSkpO2lmKFQ8bC5zdGFydENvbHVtbilyZXR1cm4gbC5zdGFydENvbHVtbj1ULHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0'@;
put 'YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCBfPXRoaXMubWVyZ2VkQ2Vs'@;
put 'bHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKHVzKF8pKXtjb25zdCBXPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLmNvbCtfLmNvbHNwYW4tMSwtMSkpO2lmKFc+bC5lbmRDb2x1bW4pcmV0dXJuIGwuZW5kQ29sdW1uPVcsdm9pZCB0'@;
put 'aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl9fX10cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKGwsYSxkLGgpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6X309dGhpcy5ob3Q7bGV0IFQsVztyZXR1cm4gVD0wPT09YT9mLmdldE5lYXJlc3RO'@;
put 'b3RIaWRkZW5JbmRleChsLDEpOmYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwrYS0xLC0xKSxXPTA9PT1oP18uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk6Xy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCtoLTEsLTEpLFtsPj0wP2YuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJ'@;
put 'bmRleChUKTpsLGQ+PTA/Xy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFcpOmRdfW9uTW9kaWZ5QXV0b2ZpbGxSYW5nZShsLGEpe3RoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuY29ycmVjdFNlbGVjdGlvbkFyZWFTaXplKGEpO2NvbnN0IGQ9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9u'@;
put 'cy5nZXREaXJlY3Rpb24oYSxsKTtsZXQgaD1sO2lmKHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGEsaCxkKSlyZXR1cm4gaD1hLGg7Y29uc3QgZj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZSh7ZnJvbTp7cm93'@;
put 'OmFbMF0sY29sOmFbMV19LHRvOntyb3c6YVsyXSxjb2w6YVszXX19KTtyZXR1cm4gZiYmKGg9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5zbmFwRHJhZ0FyZWEoYSxoLGQsZikpLGh9b25BZnRlckNyZWF0ZUNvbChsLGEpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVj'@;
put 'dGlvbnMoInJpZ2h0IixsLGEpfW9uQWZ0ZXJSZW1vdmVDb2wobCxhKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJsZWZ0IixsLGEpfW9uQWZ0ZXJDcmVhdGVSb3cobCxhLGQpeyJhdXRvIiE9PWQmJnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0'@;
put 'Q29sbGVjdGlvbnMoImRvd24iLGwsYSl9b25BZnRlclJlbW92ZVJvdyhsLGEpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInVwIixsLGEpfW9uQWZ0ZXJDaGFuZ2UobCxhKXsiQXV0b2ZpbGwuZmlsbCI9PT1hJiZ0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25z'@;
put 'LnJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihsKX1vbkJlZm9yZURyYXdBcmVhQm9yZGVycyhsLGEpe2lmKGEmJiJhcmVhIj09PWEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtEbih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShk'@;
put 'KSxmPT57ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3c9PT1mLmdldExhc3RSb3coKSYmZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w9PT1mLmdldExhc3RDb2x1bW4oKSYmKGxbMl09Zi5yb3csbFszXT1mLmNvbCl9KX19b25BZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0KGwsYSxkKXtpZigh'@;
put 'dGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLnJvdyxsLmNvbCk7aWYoIWgpcmV0dXJuO2NvbnN0IGY9YT4wLF89YTwwLFQ9ZDwwLFc9ZD4wLGllPWgucm93K2gucm93c3Bhbi0xPT10aGlzLmhvdC5jb3VudFJvd3MoKS0xLGdlPTA9'@;
put 'PT1oLnJvdyx3ZT1oLmNvbCtoLmNvbHNwYW4tMT09dGhpcy5ob3QuY291bnRDb2xzKCktMTsoZiYmaWV8fF8mJmdlfHxXJiZ3ZXx8VCYmMD09PWguY29sKSYmKGwucm93PWgucm93LGwuY29sPWguY29sKX1vbkFmdGVyRHJhd1NlbGVjdGlvbihsLGEsZCxoKXtpZihkKXJldHVybiB0aGlzLnNl'@;
put 'bGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUobCxhLGQsaCl9b25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcygpe3JldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgp'@;
put 'fX1mdW5jdGlvbiBjb2UoKXtHYShBYWBQbHVnaW5zIFxgY29sdW1uU29ydGluZ1xgIGFuZCBcYG11bHRpQ29sdW1uU29ydGluZ1xgIHNob3VsZCBub3QgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseS4gCiAgICBPbmx5IFxgbXVsdGlDb2x1bW5Tb3J0aW5nXGAgd2lsbCB3b3JrLmApfWNvbnN0'@;
put 'IE16PSJtdWx0aUNvbHVtblNvcnRpbmciLGRvZT0iY29sdW1uU29ydGluZyI7SXJlKE16LGZ1bmN0aW9uIGZIZShjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24gXyhUKXtjb25zdCBXPWNbVF0saWU9bFtUXSxnZT1oW1Rd'@;
put 'LHdlPWZbVF0sRWU9aWUubXVsdGlDb2x1bW5Tb3J0aW5nLG90PShFZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5P0VlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6THJlKGllLnR5cGUpKShXLGllLEVlKShnZSx3ZSk7aWYoMD09PW90KXtjb25zdCBldD1UKzE7aWYodHlwZW9mIGxbZXRdPCJ1Iily'@;
put 'ZXR1cm4gXyhldCl9cmV0dXJuIG90fSgwKX19KTtjbGFzcyBfSGUgZXh0ZW5kcyBPcmV7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIE16fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE3MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLnBsdWdpbktleT1N'@;
put 'en1pc0VuYWJsZWQoKXtyZXR1cm4gc3VwZXIuaXNFbmFibGVkKCl9ZW5hYmxlUGx1Z2luKCl7IXRoaXMuZW5hYmxlZCYmdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0mJnRoaXMuaG90LmdldFNldHRpbmdzKClbZG9lXSYmY29lKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9'@;
put 'ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1zb3J0KGwpe3N1cGVyLnNvcnQobCl9Y2xlYXJTb3J0KCl7c3VwZXIuY2xlYXJTb3J0KCl9aXNTb3J0ZWQoKXtyZXR1cm4gc3VwZXIuaXNTb3J0ZWQoKX1nZXRTb3J0Q29uZmlnKGwpe3JldHVybiBzdXBlci5nZXRTb3J0Q29u'@;
put 'ZmlnKGwpfXNldFNvcnRDb25maWcobCl7c3VwZXIuc2V0U29ydENvbmZpZyhsKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bDpb'@;
put 'bF19dXBkYXRlSGVhZGVyQ2xhc3NlcyhsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07c3VwZXIudXBkYXRlSGVhZGVyQ2xhc3NlcyhsLC4uLmQpLFdvKGwsZnVuY3Rpb24gZ0hlKGMpe2Nv'@;
put 'bnN0IGw9Yy5jbGFzc05hbWUuc3BsaXQoIiAiKSxhPW5ldyBSZWdFeHAoIl5zb3J0LVswLTldezEsMn0kIik7cmV0dXJuIGwuZmlsdGVyKGQ9PmEudGVzdChkKSl9KGwpKSwhMSE9PXRoaXMuZW5hYmxlZCYmcGkobCxmdW5jdGlvbiBwSGUoYyxsLGEpe2NvbnN0IGQ9W107cmV0dXJuITE9PT1h'@;
put 'fHxjLmlzQ29sdW1uU29ydGVkKGwpJiZjLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpPjEmJmQucHVzaChgc29ydC0ke2MuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpKzF9YCksZH0oLi4uZCkpfW9uVXBkYXRlU2V0dGluZ3MobCl7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlz'@;
put 'LnBsdWdpbktleV0mJnRoaXMuaG90LmdldFNldHRpbmdzKClbZG9lXSYmY29lKCksc3VwZXIub25VcGRhdGVTZXR0aW5ncyhsKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7ITEhPT1naihhLnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wp'@;
put 'JiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpPyh0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSx0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhhLmNvbCwiYXBwZW5kIikpKTp0aGlzLnNvcnQo'@;
put 'dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKSkpfX1jbGFzcyB3SGUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ibXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNjB9Y29uc3RydWN0b3Io'@;
put 'bCl7c3VwZXIobCksdGhpcy5kcmFnZ2VkPVtdLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5sYXN0U2V0Q2VsbD1udWxsfWlzRW5hYmxlZCgpe3JldHVybiBtMigpfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuZXZlbnRNYW5hZ2VyfHwodGhpcy5ldmVudE1hbmFnZXI9'@;
put 'bmV3IGxsKHRoaXMpKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLHtyb290RWxlbWVudDphfT10aGlzLmhvdDtmdW5jdGlvbiBkKGgpe2lmKDE9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybiBs'@;
put 'LmRyYWdnZWQuc3BsaWNlKDAsbC5kcmFnZ2VkLmxlbmd0aCksITA7Y29uc3QgZj1sLmRyYWdnZWQuaW5kZXhPZihoKTtpZigtMT09PWYpcmV0dXJuITE7MD09PWY/bC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgwLDEpOjE9PT1mJiYobC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgtMSkpfXRo'@;
put 'aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hzdGFydCIsaD0+e2xldCBmO3JldHVybiBCbyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJ0b3AiKSxsLnRv'@;
put 'dWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZlbnREZWZhdWx0KCksITEpOkJvKGgudGFyZ2V0LCJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNl'@;
put 'bGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1c2goImJvdHRvbSIpLGwudG91Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwfSksdGhp'@;
put 'cy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaGVuZCIsaD0+Qm8oaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJ0b3AiKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTpCbyhoLnRhcmdl'@;
put 'dCwiYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsImJvdHRvbSIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaG1vdmUiLGg9Pntj'@;
put 'b25zdHtyb290RG9jdW1lbnQ6Zn09dGhpcy5ob3Q7bGV0IF8sVCxXLGllLGdlLHdlO2lmKDA9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybjtjb25zdCBFZT1mLmVsZW1lbnRGcm9tUG9pbnQoaC50b3VjaGVzWzBdLmNsaWVudFgsaC50b3VjaGVzWzBdLmNsaWVudFkpOyFFZXx8RWU9PT1sLmxh'@;
put 'c3RTZXRDZWxsfHwoKCJURCI9PT1FZS5ub2RlTmFtZXx8IlRIIj09PUVlLm5vZGVOYW1lKSYmKF89bC5ob3QuZ2V0Q29vcmRzKEVlKSwtMT09PV8uY29sJiYoXy5jb2w9MCksVD1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLFc9VC5nZXRXaWR0aCgpLGllPVQuZ2V0SGVpZ2h0KCksZ2U9'@;
put 'VC5nZXREaXJlY3Rpb24oKSwxPT09VyYmMT09PWllJiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoXyksd2U9bC5nZXRDdXJyZW50UmFuZ2VDb29yZHMoVCxfLGwudG91Y2hTdGFydFJhbmdlLmRpcmVjdGlvbixnZSxsLmRyYWdnZWRbMF0pLG51bGwhPT13ZS5zdGFydCYmbC5ob3Quc2Vs'@;
put 'ZWN0aW9uLnNldFJhbmdlU3RhcnQod2Uuc3RhcnQpLGwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZCh3ZS5lbmQpLGwubGFzdFNldENlbGw9RWUpLGgucHJldmVudERlZmF1bHQoKSl9KX1nZXRDdXJyZW50UmFuZ2VDb29yZHMobCxhLGQsaCxmKXtjb25zdCBfPWwuZ2V0VG9wU3RhcnRDb3Ju'@;
put 'ZXIoKSxUPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksVz1sLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCksaWU9bC5nZXRUb3BFbmRDb3JuZXIoKTtsZXQgZ2U9e3N0YXJ0Om51bGwsZW5kOm51bGx9O3N3aXRjaChkKXtjYXNlIk5FLVNXIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6Y2FzZSJOVy1TRSI6'@;
put 'Z2U9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxsLmhpZ2hsaWdodC5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhXLnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3cs'@;
put 'YS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09ZiYmKGdlPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhULnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRz'@;
put 'KGEucm93LF8uY29sKX0pfWJyZWFrO2Nhc2UiTlctU0UiOnN3aXRjaChoKXtjYXNlIk5FLVNXIjoidG9wIj09PWY/Z2U9e3N0YXJ0OmEsZW5kOld9OmdlLmVuZD1hO2JyZWFrO2Nhc2UiTlctU0UiOiJ0b3AiPT09Zj9nZT17c3RhcnQ6YSxlbmQ6VH06Z2UuZW5kPWE7YnJlYWs7Y2FzZSJTRS1O'@;
put 'VyI6InRvcCI9PT1mP2dlPXtzdGFydDphLGVuZDpffTpnZS5lbmQ9YTticmVhaztjYXNlIlNXLU5FIjoidG9wIj09PWY/Z2U9e3N0YXJ0OmEsZW5kOmllfTpnZS5lbmQ9YX1icmVhaztjYXNlIlNXLU5FIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6Z2U9ImJvdHRvbSI9PT1mP3tzdGFydDp0aGlz'@;
put 'LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFcucm93LGEuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3cs'@;
put 'VC5jb2wpfTticmVhaztjYXNlIlNXLU5FIjpnZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LFQuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVD'@;
put 'ZWxsQ29vcmRzKGEucm93LF8uY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoXy5yb3csYS5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWY/Z2U9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LGllLmNvbCksZW5kOnRoaXMuaG90Ll9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKF8ucm93LGEuY29sKX06InRvcCI9PT1mJiYoZ2U9e3N0YXJ0OlcsZW5kOmF9KX1icmVhaztjYXNlIlNFLU5XIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6Y2FzZSJORS1TVyI6Y2FzZSJTVy1ORSI6InRvcCI9PT1mJiYoZ2UuZW5kPWEpO2JyZWFrO2Nhc2UiU0UtTlci'@;
put 'OiJ0b3AiPT09Zj9nZS5lbmQ9YTpnZT17c3RhcnQ6YSxlbmQ6X319fXJldHVybiBnZX1pc0RyYWdnZWQoKXtyZXR1cm4gdGhpcy5kcmFnZ2VkLmxlbmd0aD4wfX1mdW5jdGlvbiB4eigpe2xldHtsYWJlbDpjPSIiLGNvbHNwYW46bD0xLG9yaWdDb2xzcGFuOmE9MSxjb2xsYXBzaWJsZTpkPSEx'@;
put 'LGNyb3NzSGlkZGVuQ29sdW1uczpoPVtdLGlzQ29sbGFwc2VkOmY9ITEsaXNIaWRkZW46Xz0hMSxpc1Jvb3Q6VD0hMSxpc1BsYWNlaG9sZGVyOlc9ITF9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm57bGFiZWw6Yyxjb2xz'@;
put 'cGFuOmwsb3JpZ0NvbHNwYW46YSxjb2xsYXBzaWJsZTpkLGlzQ29sbGFwc2VkOmYsY3Jvc3NIaWRkZW5Db2x1bW5zOmgsaXNIaWRkZW46Xyxpc1Jvb3Q6VCxpc1BsYWNlaG9sZGVyOld9fWZ1bmN0aW9uIEV6KGMsbCxhKXsoZnVuY3Rpb24gU0hlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3MihjLGwpe3JldHVybiBmdW5jdGlvbiBNSGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTps'@;
put 'LnZhbHVlfShjLGZvZShjLGwsImdldCIpKX1mdW5jdGlvbiBYeShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIHhIZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkg'@;
put 'cHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsZm9lKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBmb2UoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5n'@;
put 'ZXQoYyl9Y29uc3QgcG9lPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciBKZj1uZXcgV2Vha01hcCxWZz1uZXcgV2Vha01hcCxrej1uZXcgV2Vha01hcDtjbGFzcyBFSGV7Y29uc3RydWN0b3IoKXtFeih0aGlzLEpmLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLEV6KHRoaXMsVmcse3dyaXRh'@;
put 'YmxlOiEwLHZhbHVlOjB9KSxFeih0aGlzLGt6LHt3cml0YWJsZTohMCx2YWx1ZToxLzB9KX1zZXRDb2x1bW5zTGltaXQobCl7WHkodGhpcyxreixsKX1zZXREYXRhKCl7WHkodGhpcyxKZixmdW5jdGlvbiBDSGUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu'@;
put 'dHNbMV0/YXJndW1lbnRzWzFdOjEvMDtjb25zdCBhPVtdO2lmKDA9PT1sKXJldHVybiBhO0RuKGMsaD0+e2NvbnN0IGY9W107bGV0IF89MDthLnB1c2goZiksRG4oaCxUPT57Y29uc3QgVz14eigpO2lmKHVzKFQpKXtjb25zdHtsYWJlbDpnZSxjb2xzcGFuOndlfT1UO1cubGFiZWw9X2woZ2Up'@;
put 'LCJudW1iZXIiPT10eXBlb2Ygd2UmJndlPjEmJihXLmNvbHNwYW49d2UsVy5vcmlnQ29sc3Bhbj13ZSl9ZWxzZSBXLmxhYmVsPV9sKFQpO18rPVcub3JpZ0NvbHNwYW47bGV0IGllPSExO2lmKF8+PWwmJihXLmNvbHNwYW49Vy5vcmlnQ29sc3Bhbi0oXy1sKSxXLm9yaWdDb2xzcGFuPVcuY29s'@;
put 'c3BhbixpZT0hMCksZi5wdXNoKFcpLFcuY29sc3Bhbj4xKWZvcihsZXQgZ2U9MDtnZTxXLmNvbHNwYW4tMTtnZSsrKWYucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO3JldHVybiFpZX0pfSk7Y29uc3QgZD1NYXRoLm1heCguLi5jcyhhLGg9PmgubGVuZ3RoKSk7cmV0dXJuIERu'@;
put 'KGEsaD0+e2lmKGgubGVuZ3RoPGQpe2NvbnN0IGY9Y3MobmV3IEFycmF5KGQtaC5sZW5ndGgpLCgpPT54eigpKTtoLnNwbGljZShoLmxlbmd0aCwwLC4uLmYpfX0pLGF9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSx3Mih0aGlzLGt6'@;
put 'KSkpLFh5KHRoaXMsVmcsdzIodGhpcyxKZikubGVuZ3RoKX1nZXREYXRhKCl7cmV0dXJuIHcyKHRoaXMsSmYpfW1lcmdlV2l0aChsKXtEbihsLGE9PntsZXR7cm93OmQsY29sOmgsLi4uZn09YTtjb25zdCBfPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MoZCxoKTtudWxsIT09XyYmS2woXyxmLHBv'@;
put 'ZSl9KX1tYXAobCl7RG4odzIodGhpcyxKZiksYT0+e0RuKGEsZD0+e2NvbnN0IGg9bCh7Li4uZH0pO3VzKGgpJiZLbChkLGgscG9lKX0pfSl9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZDtpZihsPj13Mih0aGlzLFZnKXx8bDwwKXJldHVybiBudWxsO2NvbnN0IGg9dzIodGhpcyxKZilb'@;
put 'bF07cmV0dXJuIGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJzU2V0dGluZ3MobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+'@;
put 'PXcyKHRoaXMsVmcpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj13Mih0aGlzLEpmKVtsXTtsZXQgXz0wO2ZvcihsZXQgVD1hO1Q8Zi5sZW5ndGg7VCsrKXtjb25zdCBXPWZbVF07aWYoVy5pc1BsYWNlaG9sZGVyKXRocm93IG5ldyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5u'@;
put 'b3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKF8rPVcuY29sc3BhbixoLnB1c2goVyksVy5jb2xzcGFuPjEmJihUKz1XLmNvbHNwYW4tMSksXz09PWQpYnJlYWs7aWYoXz5kKXRocm93IG5ldyBFcnJvcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVy'@;
put 'bGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gdzIodGhpcyxWZyl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHcyKHRoaXMsVmcpPjA/dzIodGhpcyxKZilbMF0ubGVuZ3RoOjB9Y2xlYXIoKXtYeSh0aGlzLEpmLFtdKSxYeSh0'@;
put 'aGlzLFZnLDApfX1mdW5jdGlvbiBBeihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24ga0hlKGMpe3ZhciBsPWZ1bmN0aW9uIEFIZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh'@;
put 'ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o'@;
put 'Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IF9vZT1uZXcgTWFw'@;
put 'KFtbIkRGLXByZS1vcmRlciIsZnVuY3Rpb24gZ29lKGMsbCl7bGV0IGE9Yy5jYWxsKGwsdGhpcyk7Zm9yKGxldCBkPTA7ZDx0aGlzLmNoaWxkcy5sZW5ndGg7ZCsrKXtpZighMT09PWEpcmV0dXJuITE7YT1nb2UuY2FsbCh0aGlzLmNoaWxkc1tkXSxjLGwpfXJldHVybiBhfV0sWyJERi1wb3N0'@;
put 'LW9yZGVyIixmdW5jdGlvbiBtb2UoYyxsKXtmb3IobGV0IGE9MDthPHRoaXMuY2hpbGRzLmxlbmd0aDthKyspaWYoITE9PT1tb2UuY2FsbCh0aGlzLmNoaWxkc1thXSxjLGwpKXJldHVybiExO3JldHVybiBjLmNhbGwobCx0aGlzKX1dLFsiQkYiLGZ1bmN0aW9uIElIZShjLGwpe2NvbnN0IGE9'@;
put 'W3RoaXNdOyFmdW5jdGlvbiBkKCl7aWYoMD09PWEubGVuZ3RoKXJldHVybjtjb25zdCBoPWEuc2hpZnQoKTthLnB1c2goLi4uaC5jaGlsZHMpLCExIT09Yy5jYWxsKGwsaCkmJmQoKX0oKX1dXSk7Y2xhc3MgSEF7Y29uc3RydWN0b3IobCl7QXoodGhpcywiZGF0YSIse30pLEF6KHRoaXMsInBh'@;
put 'cmVudCIsbnVsbCksQXoodGhpcywiY2hpbGRzIixbXSksdGhpcy5kYXRhPWx9YWRkQ2hpbGQobCl7bC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcy5wdXNoKGwpfWNsb25lVHJlZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0'@;
put 'aGlzO2NvbnN0IGE9bmV3IEhBKHsuLi5sLmRhdGF9KTtmb3IobGV0IGQ9MDtkPGwuY2hpbGRzLmxlbmd0aDtkKyspYS5hZGRDaGlsZCh0aGlzLmNsb25lVHJlZShsLmNoaWxkc1tkXSkpO3JldHVybiBhfXJlcGxhY2VUcmVlV2l0aChsKXt0aGlzLmRhdGE9ey4uLmwuZGF0YX0sdGhpcy5jaGls'@;
put 'ZHM9W107Zm9yKGxldCBhPTA7YTxsLmNoaWxkcy5sZW5ndGg7YSsrKXRoaXMuYWRkQ2hpbGQobC5jaGlsZHNbYV0pfXdhbGtEb3duKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiQkYiO2lmKCFfb2UuaGFzKGEpKXRocm93'@;
put 'IG5ldyBFcnJvcihgVHJhdmVyc2FsIHN0cmF0ZWd5ICIke2F9IiBkb2VzIG5vdCBleGlzdGApO19vZS5nZXQoYSkuY2FsbCh0aGlzLGwsdGhpcyl9d2Fsa1VwKGwpe2NvbnN0IGE9dGhpcyxkPWg9PnshMSE9PWwuY2FsbChhLGgpJiZudWxsIT09aC5wYXJlbnQmJmQoaC5wYXJlbnQpfTtkKHRo'@;
put 'aXMpfX1mdW5jdGlvbiBUeihjLGwsYSl7KGZ1bmN0aW9uIFJIZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rp'@;
put 'b24gS3UoYyxsKXtyZXR1cm4gZnVuY3Rpb24gT0hlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxib2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gYm9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHBy'@;
put 'aXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBINz1uZXcgV2Vha01hcCxCZz1uZXcgV2Vha01hcCxONz1uZXcgV2Vha01hcDtjbGFzcyBISGV7Y29uc3RydWN0b3IobCl7VHoodGhpcyxINyx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLFR6KHRo'@;
put 'aXMsQmcse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxUeih0aGlzLE43LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZnVuY3Rpb24gUEhlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gRkhlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxib2UoYyxsLCJzZXQiKSxhKSxhfSh0aGlzLE43LGwpfWdldFJvb3RzKCl7cmV0dXJuIEFycmF5LmZyb20oS3UodGhpcyxINykudmFsdWVzKCkpfWdldFJv'@;
put 'b3RCeUNvbHVtbihsKXtsZXQgYTtyZXR1cm4gS3UodGhpcyxCZykuaGFzKGwpJiYoYT1LdSh0aGlzLEg3KS5nZXQoS3UodGhpcyxCZykuZ2V0KGwpKSksYX1nZXROb2RlKGwsYSl7Y29uc3QgZD10aGlzLmdldFJvb3RCeUNvbHVtbihhKTtpZighZClyZXR1cm47Y29uc3QgaD1hLUt1KHRoaXMs'@;
put 'QmcpLmdldChhKTtsZXQgXyxmPTA7cmV0dXJuIGQud2Fsa0Rvd24oVD0+e2NvbnN0e2RhdGE6e29yaWdDb2xzcGFuOlcsaGVhZGVyTGV2ZWw6aWV9fT1UO2lmKGw9PT1pZSl7aWYoaD49ZiYmaDw9ZitXLTEpcmV0dXJuIF89VCxfLmRhdGEuaXNSb290PWE9PT1fLmRhdGEuY29sdW1uSW5kZXgs'@;
put 'ITE7Zis9V319KSxffXJlYnVpbGRUcmVlSW5kZXgoKXtsZXQgbD0wO0t1KHRoaXMsQmcpLmNsZWFyKCksRG4oS3UodGhpcyxINyksYT0+e2xldFsse2RhdGE6e2NvbHNwYW46ZH19XT1hO2ZvcihsZXQgaD1sO2g8bCtkO2grKylLdSh0aGlzLEJnKS5zZXQoaCxsKTtsKz1kfSl9YnVpbGRUcmVl'@;
put 'KCl7dGhpcy5jbGVhcigpO2NvbnN0IGw9S3UodGhpcyxONykuZ2V0Q29sdW1uc0NvdW50KCk7bGV0IGE9MDtmb3IoO2E8bDspe2NvbnN0IGQ9S3UodGhpcyxONykuZ2V0SGVhZGVyU2V0dGluZ3MoMCxhKSxoPW5ldyBIQTtLdSh0aGlzLEg3KS5zZXQoYSxoKSx0aGlzLmJ1aWxkTGVhdmVzKGgs'@;
put 'YSwwLGQub3JpZ0NvbHNwYW4pLGErPWQub3JpZ0NvbHNwYW59dGhpcy5yZWJ1aWxkVHJlZUluZGV4KCl9YnVpbGRMZWF2ZXMobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXToxO2NvbnN0IGY9S3UodGhpcyxONykuZ2V0'@;
put 'SGVhZGVyc1NldHRpbmdzKGQsYSxoKTtkKz0xLERuKGYsXz0+e2NvbnN0IFQ9ey4uLl8saGVhZGVyTGV2ZWw6ZC0xLGNvbHVtbkluZGV4OmF9O2xldCBXOzE9PT1kPyhsLmRhdGE9VCxXPWwpOihXPW5ldyBIQShUKSxsLmFkZENoaWxkKFcpKSxkPEt1KHRoaXMsTjcpLmdldExheWVyc0NvdW50'@;
put 'KCkmJnRoaXMuYnVpbGRMZWF2ZXMoVyxhLGQsXy5vcmlnQ29sc3BhbiksYSs9Xy5vcmlnQ29sc3Bhbn0pfWNsZWFyKCl7S3UodGhpcyxINykuY2xlYXIoKSxLdSh0aGlzLEJnKS5jbGVhcigpfX1mdW5jdGlvbiB5b2UoYyxsKXtjLndhbGtEb3duKGE9PntsZXR7ZGF0YTpkLGNoaWxkczpofT1h'@;
put 'O2lmKCFkLmlzSGlkZGVuJiYobChkLmNvbHVtbkluZGV4KSwwPT09aC5sZW5ndGgpKWZvcihsZXQgZj0xO2Y8ZC5jb2xzcGFuO2YrKylsKGQuY29sdW1uSW5kZXgrZil9KX1mdW5jdGlvbiBOQShjLGwpe2xldHtjaGlsZHM6YX09YztpZigwIT09YS5sZW5ndGgpcmV0dXJuIGFbMF0uZGF0YVts'@;
put 'XX1mdW5jdGlvbiBWQShjKXtyZXR1cm4gTkEoYywib3JpZ0NvbHNwYW4iKT09PWMuZGF0YS5vcmlnQ29sc3Bhbn1mdW5jdGlvbiBEeihjKXtjb25zdHtkYXRhOmwsY2hpbGRzOmF9PWM7aWYoIWwuaXNDb2xsYXBzZWR8fGwuaXNIaWRkZW58fGwub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxi'@;
put 'YWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihWQShjKSlyZXR1cm4gRHooYVswXSk7bC5pc0NvbGxhcHNlZD0hMTtjb25zdCBoPWEuc2xpY2UoMSksZj1uZXcgU2V0O2xldCBfPTA7aWYoaC5sZW5ndGg+MClEbihoLFQ9'@;
put 'PntULnJlcGxhY2VUcmVlV2l0aChULmRhdGEuY2xvbmVkVHJlZSksVC5kYXRhLmNsb25lZFRyZWU9bnVsbCxfKz1ULmRhdGEuY29sc3Bhbix5b2UoVCxpZT0+e2YuYWRkKGllKX0pfSk7ZWxzZXtjb25zdHtjb2xzcGFuOlQsb3JpZ0NvbHNwYW46Vyxjb2x1bW5JbmRleDppZX09bDtfPVctVDtm'@;
put 'b3IobGV0IGdlPTE7Z2U8VztnZSsrKWYuYWRkKGllK2dlKX1yZXR1cm4gYy53YWxrVXAoVD0+e2NvbnN0e2RhdGE6V309VDtXLmNvbHNwYW4rPV8sVy5jb2xzcGFuPj1XLm9yaWdDb2xzcGFuPyhXLmNvbHNwYW49Vy5vcmlnQ29sc3BhbixXLmlzQ29sbGFwc2VkPSExKTpWQShUKSYmKFcuaXND'@;
put 'b2xsYXBzZWQ9TkEoVCwiaXNDb2xsYXBzZWQiKSl9KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pkl6KGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKGYpLGNvbHNwYW5Db21wZW5zYXRpb246X319ZnVuY3Rpb24gSXooYyl7dmFyIGw7Y29uc3R7ZGF0YTphLGNoaWxkczpkfT1jO2lm'@;
put 'KGEuaXNDb2xsYXBzZWR8fGEuaXNIaWRkZW58fGEub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihWQShjKSlyZXR1cm4gSXooZFswXSk7YS5pc0NvbGxhcHNlZD0hMDtj'@;
put 'b25zdCBmPWQuc2xpY2UoMSksXz1uZXcgU2V0O2lmKGYubGVuZ3RoPjApRG4oZixXPT57eW9lKFcsaWU9PntfLmFkZChpZSl9KSxXLmRhdGEuY2xvbmVkVHJlZT1XLmNsb25lVHJlZSgpLFcud2Fsa0Rvd24oaWU9PntsZXR7ZGF0YTpnZX09aWU7Z2UuaXNIaWRkZW49ITB9KX0pO2Vsc2V7Y29u'@;
put 'c3R7b3JpZ0NvbHNwYW46Vyxjb2x1bW5JbmRleDppZX09YTtmb3IobGV0IGdlPTE7Z2U8VztnZSsrKV8uYWRkKGllK2dlKX1jb25zdCBUPWEuY29sc3Bhbi0obnVsbCE9PShsPU5BKGMsImNvbHNwYW4iKSkmJnZvaWQgMCE9PWw/bDoxKTtyZXR1cm4gYy53YWxrVXAoVz0+e2NvbnN0e2RhdGE6'@;
put 'aWV9PVc7aWUuY29sc3Bhbi09VCxpZS5jb2xzcGFuPD0xPyhpZS5jb2xzcGFuPTEsaWUuaXNDb2xsYXBzZWQ9ITApOlZBKFcpJiYoaWUuaXNDb2xsYXBzZWQ9TkEoVywiaXNDb2xsYXBzZWQiKSl9KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9PkR6KGMpLGFmZmVjdGVkQ29sdW1uczpBcnJh'@;
put 'eS5mcm9tKF8pLGNvbHNwYW5Db21wZW5zYXRpb246VH19Y29uc3Qgd29lPW5ldyBNYXAoW1siY29sbGFwc2UiLEl6XSxbImV4cGFuZCIsRHpdLFsiaGlkZS1jb2x1bW4iLGZ1bmN0aW9uIE5IZShjLGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3Nl'@;
put 'ZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoQWFgVGhlIHBhc3NlZCBub2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwg'@;
put 'dGhlIGhpZGUgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKGEuaW5jbHVkZXMobCkpcmV0dXJuO2xldCBkPSExO2Mud2Fsa1VwKGg9Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJl'@;
put 'dHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hpZGRlbkNvbHVtbnMucHVzaChsKSxmLmNvbHNwYW4+MT9mLmNvbHNwYW4tPTE6Zi5pc0hpZGRlbj0hMH0pfV0sWyJzaG93LWNvbHVtbiIsZnVuY3Rpb24gVkhlKGMsbCl7aWYoIU51bWJlci5p'@;
put 'c0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihBYWBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24g'@;
put 'dGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgc2hvdyBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczphfT1jLmRhdGE7aWYoIWEuaW5jbHVkZXMobCkpcmV0dXJuO2xldCBkPSExO2Mud2Fsa1VwKGg9'@;
put 'Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJldHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hpZGRlbkNvbHVtbnMuc3BsaWNlKGYuY3Jvc3NIaWRkZW5Db2x1bW5zLmluZGV4T2YobCksMSksIWYuaXNIaWRkZW4mJmYu'@;
put 'Y29sc3BhbjxmLm9yaWdDb2xzcGFuJiYoZi5jb2xzcGFuKz0xKSxmLmlzSGlkZGVuPSExfSl9XV0pO2Z1bmN0aW9uIEJBKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsYT0+e2Eud2Fsa0Rvd24oZD0+e2NvbnN0IGg9ZC5kYXRhLHtvcmlnQ29sc3BhbjpmLGNvbHVtbkluZGV4Ol8saGVhZGVy'@;
put 'TGV2ZWw6VCxjcm9zc0hpZGRlbkNvbHVtbnM6V309aCxpZT1mdW5jdGlvbiB6SGUoYyxsKXtsZXQgYTtyZXR1cm4gQXJyYXkuaXNBcnJheShjW2xdKT9hPWNbbF06KGE9W10sY1tsXT1hKSxhfShsLFQpO2xldCBnZT0hMTtmb3IobGV0IHdlPV87d2U8XytmO3dlKyspaWYoVy5pbmNsdWRlcyh3'@;
put 'ZSl8fGdlKWllLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtlbHNle2NvbnN0IFplPWpIZShoKTtaZS5pc1Jvb3Q9ITAsaWUucHVzaChaZSksZ2U9ITB9fSl9KSxsfWZ1bmN0aW9uIGpIZShjKXtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6bCwuLi5hfT14eihjKTtyZXR1cm4g'@;
put 'YX1mdW5jdGlvbiBMeihjLGwsYSl7KGZ1bmN0aW9uIFVIZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24g'@;
put 'SnkoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBaSGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLENvZShj'@;
put 'LGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gVGwoYyxsKXtyZXR1cm4gZnVuY3Rpb24gWUhlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxDb2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gQ29lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'YXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBFaD1uZXcgV2Vha01hcCxDMT1uZXcgV2Vha01hcCxqZz1uZXcgV2Vha01hcDtjbGFzcyBXSGV7Y29uc3RydWN0b3IoKXtMeih0aGlzLEVoLHt3cml0YWJsZTohMCx2'@;
put 'YWx1ZTpuZXcgRUhlfSksTHoodGhpcyxDMSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEhIZShUbCh0aGlzLEVoKSl9KSxMeih0aGlzLGpnLHt3cml0YWJsZTohMCx2YWx1ZTpbW11dfSl9c2V0U3RhdGUobCl7VGwodGhpcyxFaCkuc2V0RGF0YShsKTtsZXQgYT0hMTt0cnl7VGwodGhpcyxDMSku'@;
put 'YnVpbGRUcmVlKCl9Y2F0Y2h7VGwodGhpcyxDMSkuY2xlYXIoKSxUbCh0aGlzLEVoKS5jbGVhcigpLGE9ITB9cmV0dXJuIEp5KHRoaXMsamcsQkEoVGwodGhpcyxDMSkuZ2V0Um9vdHMoKSkpLGF9c2V0Q29sdW1uc0xpbWl0KGwpe1RsKHRoaXMsRWgpLnNldENvbHVtbnNMaW1pdChsKX1tZXJn'@;
put 'ZVN0YXRlV2l0aChsKXtjb25zdCBhPWNzKGwsZD0+e2xldHtyb3c6aCwuLi5mfT1kO3JldHVybntyb3c6aDwwP3RoaXMucm93Q29vcmRzVG9MZXZlbChoKTpoLC4uLmZ9fSk7VGwodGhpcyxFaCkubWVyZ2VXaXRoKGEpLFRsKHRoaXMsQzEpLmJ1aWxkVHJlZSgpLEp5KHRoaXMsamcsQkEoVGwo'@;
put 'dGhpcyxDMSkuZ2V0Um9vdHMoKSkpfW1hcFN0YXRlKGwpe1RsKHRoaXMsRWgpLm1hcChsKSxUbCh0aGlzLEMxKS5idWlsZFRyZWUoKSxKeSh0aGlzLGpnLEJBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKX1tYXBOb2RlcyhsKXtyZXR1cm4gQWwoVGwodGhpcyxDMSkuZ2V0Um9vdHMoKSwoYSxk'@;
put 'KT0+KGQud2Fsa0Rvd24oaD0+e2NvbnN0IGY9bChoLmRhdGEpO3ZvaWQgMCE9PWYmJmEucHVzaChmKX0pLGEpLFtdKX10cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLGEsZCl7YTwwJiYoYT10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoYSkpO2NvbnN0IGg9VGwodGhpcyxDMSkuZ2V0Tm9kZShhLGQp'@;
put 'O2xldCBmO3JldHVybiBoJiYoZj1mdW5jdGlvbiBCSGUoYyxsLGEpe2lmKCF3b2UuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIG5vZGUgbW9kaWZpZXIgYWN0aW9uICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiB3b2UuZ2V0KGMpKGwsYSl9KGwsaCxkKSxKeSh0aGlzLGpn'@;
put 'LEJBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKSksZn10cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGwsYSl7cmV0dXJuIHRoaXMudHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCwtMSxhKX1yb3dDb29yZHNUb0xldmVsKGwpe2lmKGw+PTApcmV0dXJuIG51bGw7Y29uc3QgYT1sK01hdGgubWF4'@;
put 'KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYTwwP251bGw6YX1sZXZlbFRvUm93Q29vcmRzKGwpe2lmKGw8MClyZXR1cm4gbnVsbDtjb25zdCBhPWwtTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPj0wP251bGw6YX1nZXRIZWFkZXJTZXR0aW5ncyhs'@;
put 'LGEpe3ZhciBkLGg7cmV0dXJuIGw8MCYmKGw9dGhpcy5yb3dDb29yZHNUb0xldmVsKGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6bnVsbCE9PShkPW51bGw9PT0oaD1UbCh0aGlzLGpnKVtsXSl8fHZvaWQgMD09PWg/dm9pZCAwOmhbYV0pJiZ2b2lkIDAhPT1k'@;
put 'P2Q6bnVsbH1nZXRIZWFkZXJUcmVlTm9kZURhdGEobCxhKXtpZihsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKSlyZXR1cm4gbnVsbDtjb25zdCBkPVRsKHRoaXMsQzEpLmdldE5vZGUobCxhKTtyZXR1cm4gZD97Li4u'@;
put 'ZC5kYXRhfTpudWxsfWZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omh9PW51bGwhPT0oZD10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsYSkpJiZ2b2lkIDAhPT1kP2Q6e2lzUm9vdDohMH07aWYoaClyZXR1cm4gYTtsZXQgZj1hLTE7Zm9yKDtmPj0wOyl7'@;
put 'dmFyIF87Y29uc3R7aXNSb290OlR9PW51bGwhPT0oXz10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsZikpJiZ2b2lkIDAhPT1fP186e2lzUm9vdDohMH07aWYoVClicmVhaztmLT0xfXJldHVybiBmfWdldExheWVyc0NvdW50KCl7cmV0dXJuIFRsKHRoaXMsRWgpLmdldExheWVyc0NvdW50KCl9'@;
put 'Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIFRsKHRoaXMsRWgpLmdldENvbHVtbnNDb3VudCgpfWNsZWFyKCl7SnkodGhpcyxqZyxbXSksVGwodGhpcyxFaCkuY2xlYXIoKSxUbCh0aGlzLEMxKS5jbGVhcigpfX1mdW5jdGlvbiBReShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gR0hlKGMpe3Zh'@;
put 'ciBsPWZ1bmN0aW9uICRIZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGlu'@;
put 'IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFNvZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gWEhlKGMpe3ZhciBsPWZ1bmN0aW9uIEpIZShjLGwpe2lmKCJv'@;
put 'YmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q'@;
put 'cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs'@;
put 'bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIE1vZShjLGwsYSl7KGZ1bmN0aW9uIFFIZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy'@;
put 'aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gakEoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBlTmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'ImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHhvZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gU2woYyxsKXtyZXR1cm4gZnVuY3Rpb24gdE5lKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyx4b2UoYyxs'@;
put 'LCJnZXQiKSl9ZnVuY3Rpb24geG9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IEVvZT0ibmVzdGVkSGVhZGVycyI7dmFyIEpsPW5l'@;
put 'dyBXZWFrTWFwLHM0PW5ldyBXZWFrTWFwO2NsYXNzIHJOZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxNb2UodGhpcyxKbCx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFdIZX0pLE1vZSh0aGlzLHM0LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksU29lKHRo'@;
put 'aXMsImdob3N0VGFibGUiLG5ldyBjbGFzcyBxSGV7Y29uc3RydWN0b3IobCxhKXtReSh0aGlzLCJob3QiLHZvaWQgMCksUXkodGhpcywibmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIiLHZvaWQgMCksUXkodGhpcywibGF5ZXJzQ291bnQiLDApLFF5KHRoaXMsImNvbnRhaW5lciIsdm9pZCAw'@;
put 'KSxReSh0aGlzLCJ3aWR0aHNNYXAiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyPWEsdGhpcy53aWR0aHNNYXA9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCgibmVzdGVkSGVhZGVycy53aWR0aHNN'@;
put 'YXAiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpfXNldExheWVyc0NvdW50KGwpe3JldHVybiB0aGlzLmxheWVyc0NvdW50PWwsdGhpc31nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53aWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfWJ1aWxkV2lk'@;
put 'dGhzTWFwKCl7dGhpcy5jb250YWluZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhhbmRzb250YWJsZSIsImh0R2hvc3RUYWJsZSIsImh0QXV0b1NpemUiKSx0aGlzLl9idWlsZEdob3N0VGFibGUodGhp'@;
put 'cy5jb250YWluZXIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtjb25zdCBsPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoInRyOmxhc3Qtb2YtdHlwZSB0aCIpLGE9bC5sZW5ndGg7dGhpcy53aWR0aHNNYXAuY2xlYXIoKTtm'@;
put 'b3IobGV0IGQ9MDtkPGE7ZCsrKXtjb25zdCBoPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGgpO3RoaXMud2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChmLGxbZF0ub2Zmc2V0V2lk'@;
put 'dGgpfXRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGx9X2J1aWxkR2hvc3RUYWJsZShsKXtjb25zdHtyb290RG9jdW1lbnQ6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT10aGlzLmhvdCxoPWEuY3JlYXRlRG9jdW1l'@;
put 'bnRGcmFnbWVudCgpLGY9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLF89ISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxUPWQuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTtmb3IobGV0IFc9MDtXPHRoaXMubGF5ZXJzQ291bnQ7VysrKXtjb25zdCBpZT1hLmNyZWF0'@;
put 'ZUVsZW1lbnQoInRyIik7Zm9yKGxldCBnZT0wO2dlPFQ7Z2UrKyl7bGV0IHdlPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChnZSk7bnVsbD09PXdlJiYod2U9Z2UpO2NvbnN0IEVlPWEuY3JlYXRlRWxlbWVudCgidGgiKSxaZT10aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVy'@;
put 'KFcsd2UpO2lmKFplJiYoIVplLmlzUGxhY2Vob2xkZXJ8fFplLmlzSGlkZGVuKSl7bGV0IG90PVplLmxhYmVsO18mJihvdCs9JzxidXR0b24gY2xhc3M9ImNoYW5nZVR5cGUiPjwvYnV0dG9uPicpLGdnKEVlLG90KSxFZS5jb2xTcGFuPVplLmNvbHNwYW4saWUuYXBwZW5kQ2hpbGQoRWUpfX1m'@;
put 'LmFwcGVuZENoaWxkKGllKX1oLmFwcGVuZENoaWxkKGYpLGwuYXBwZW5kQ2hpbGQoaCl9Y2xlYXIoKXt0aGlzLndpZHRoc01hcC5jbGVhcigpLHRoaXMuY29udGFpbmVyPW51bGx9fSh0aGlzLmhvdCwobCxhKT0+dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSksU29lKHRoaXMsImRldGVj'@;
put 'dGVkT3ZlcmxhcHBlZEhlYWRlcnMiLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gRW9lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI4MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbRW9lXX1lbmFibGVQbHVnaW4oKXt2'@;
put 'YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyghQXJyYXkuaXNBcnJheShhKXx8IUFycmF5LmlzQXJyYXkoYVswXSkpJiZHYShBYWBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBjb25maWd1cmF0'@;
put 'aW9uIGlzIGludmFsaWQuIFRoZSBzZXR0aW5ncyBoYXMgdG8gYmVceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBhcnJheXMgZS5xLiBbWydBMScsIHsgbGFiZWw6ICdBMicsIGNvbHNwYW46IDIgfV1dYCksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+'@;
put 'dGhpcy5vbkluaXQoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNl'@;
put 'bGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlck9uQ2VsbE1vdXNlRG93biguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZU92ZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGQ9PnRoaXMub25BZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyhkKSksdGhpcy5hZGRIb29rKCJtb2RpZnlD'@;
put 'b2xXaWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUNvbFdpZHRoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUoLi4uYXJndW1lbnRzKX0pLHRo'@;
put 'aXMuYWRkSG9vaygiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvcHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZv'@;
put 'cmVDb3B5KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKC4uLmFyZ3VtZW50cyl9KSxzdXBlci5lbmFibGVQ'@;
put 'bHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7U2wodGhpcyxKbCkuc2V0Q29sdW1uc0xpbWl0KHRoaXMuaG90LmNvdW50Q29scygpKSxB'@;
put 'cnJheS5pc0FycmF5KGwpJiYodGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzPVNsKHRoaXMsSmwpLnNldFN0YXRlKGwpKSx0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMmJkdhKEFhYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIHNldHVwIGNvbnRhaW5zIG92ZXJsYXBwaW5n'@;
put 'IGhlYWRlcnMuIFRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5gKSx0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdl'@;
put 'ZFZhbHVlcygpLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPSEwPT09YT8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7U2wodGhpcyxKbCkudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihoLGQpfSksIVNsKHRoaXMsczQpJiZ0aGlzLmVuYWJsZWQmJmpBKHRoaXMsczQsdGhpcy5ob3QuY29s'@;
put 'dW1uSW5kZXhNYXBwZXIuY3JlYXRlQ2hhbmdlc09ic2VydmVyKCJoaWRpbmciKS5zdWJzY3JpYmUoYT0+e2EuZm9yRWFjaChkPT57bGV0e29wOmgsaW5kZXg6ZixuZXdWYWx1ZTpffT1kO2lmKCJyZXBsYWNlIj09PWgpe2NvbnN0IFQ9ITA9PT1fPyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1u'@;
put 'IjtTbCh0aGlzLEpsKS50cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKFQsZil9fSksdGhpcy5naG9zdFRhYmxlLmJ1aWxkV2lkdGhzTWFwKCl9KSksdGhpcy5naG9zdFRhYmxlLnNldExheWVyc0NvdW50KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkuYnVpbGRXaWR0aHNNYXAoKSxzdXBlci51cGRh'@;
put 'dGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbHNwYW5zKCksU2wodGhpcyxKbCkuY2xlYXIoKSxTbCh0aGlzLHM0KS51bnN1YnNjcmliZSgpLGpBKHRoaXMsczQsbnVsbCksdGhpcy5naG9zdFRhYmxlLmNsZWFyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFN0YXRl'@;
put 'TWFuYWdlcigpe3JldHVybiBTbCh0aGlzLEpsKX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBTbCh0aGlzLEpsKS5nZXRMYXllcnNDb3VudCgpfWdldEhlYWRlclNldHRpbmdzKGwsYSl7cmV0dXJuIFNsKHRoaXMsSmwpLmdldEhlYWRlclNldHRpbmdzKGwsYSl9Y2xlYXJDb2xzcGFucygpe2lm'@;
put 'KCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtfd3Q6bH09dGhpcy5ob3QudmlldyxhPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxkPWwud3RUYWJsZS5USEVBRCxoPWwud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsZj1sLnd0T3Zlcmxh'@;
put 'eXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P2wud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsO2ZvcihsZXQgXz0wO188YTtfKyspe2NvbnN0IFQ9ZC5jaGlsZE5vZGVzW19dO2lmKCFUKWJyZWFrO2NvbnN0IFc9aC5j'@;
put 'aGlsZE5vZGVzW19dLGllPWY/Zi5jaGlsZE5vZGVzW19dOm51bGw7Zm9yKGxldCBnZT0wLHdlPVQuY2hpbGROb2Rlcy5sZW5ndGg7Z2U8d2U7Z2UrKylULmNoaWxkTm9kZXNbZ2VdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKFQuY2hpbGROb2Rlc1tnZV0sImhpZGRlbkhlYWRlciIp'@;
put 'LFcmJlcuY2hpbGROb2Rlc1tnZV0mJihXLmNoaWxkTm9kZXNbZ2VdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKFcuY2hpbGROb2Rlc1tnZV0sImhpZGRlbkhlYWRlciIpKSxmJiZpZSYmaWUuY2hpbGROb2Rlc1tnZV0mJihpZS5jaGlsZE5vZGVzW2dlXS5yZW1vdmVBdHRyaWJ1dGUo'@;
put 'ImNvbHNwYW4iKSxXbyhpZS5jaGlsZE5vZGVzW2dlXSwiaGlkZGVuSGVhZGVyIikpfX1oZWFkZXJSZW5kZXJlckZhY3RvcnkobCl7dmFyIGE9dGhpcztjb25zdCBkPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7cmV0dXJuKGgsZik9Pnt2YXIgXztj'@;
put 'b25zdHtjb2x1bW5JbmRleE1hcHBlcjpULHZpZXc6V309dGhpcy5ob3Q7bGV0IGllPVQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKTtudWxsPT09aWUmJihpZT1oKSxmLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKGYsImhpZGRlbkhlYWRlciIpO2NvbnN0e2NvbHNwYW46'@;
put 'Z2UsaXNIaWRkZW46d2UsaXNQbGFjZWhvbGRlcjpFZX09bnVsbCE9PShfPVNsKHRoaXMsSmwpLmdldEhlYWRlclNldHRpbmdzKGwsaWUpKSYmdm9pZCAwIT09Xz9fOntsYWJlbDoiIn07aWYoRWV8fHdlKXBpKGYsImhpZGRlbkhlYWRlciIpO2Vsc2UgaWYoZ2U+MSl7dmFyIFplLG90O2NvbnN0'@;
put 'e3d0T3ZlcmxheXM6ZXR9PVcuX3d0LHl0PW51bGw9PT0oWmU9ZXQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KXx8dm9pZCAwPT09WmU/dm9pZCAwOlplLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksa3Q9bnVsbD09PShvdD1ldC5pbmxpbmVTdGFydE92ZXJsYXkpfHx2b2lk'@;
put 'IDA9PT1vdD92b2lkIDA6b3QuY2xvbmUud3RUYWJsZS5USEVBRC5jb250YWlucyhmKSxTdD15dHx8a3Q/TWF0aC5taW4oZ2UsZC1oKTpnZTtTdD4xJiZmLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsU3QpfXRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGllLGYsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gYS5nZXRDb2x1bW5IZWFkZXJWYWx1ZSguLi5hcmd1bWVudHMpfSxsKX19Z2V0Q29sdW1uSGVhZGVyVmFsdWUobCxhKXt2YXIgZDtjb25zdHtpc0hpZGRlbjpoLGlzUGxhY2Vob2xkZXI6Zn09bnVsbCE9PShkPVNsKHRoaXMsSmwpLmdldEhlYWRlclNldHRpbmdzKGEsbCkpJiZ2b2lkIDAh'@;
put 'PT1kP2Q6e307cmV0dXJuIGZ8fGg/IiI6dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwsYSl9b25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIobCxhLGQpe2NvbnN0IGg9U2wodGhpcyxKbCkuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsbCk7aWYoIWgpcmV0dXJuIGw7Y29uc3R7Y2xhc3NO'@;
put 'YW1lczpmLGNvbHVtbkN1cnNvcjpfLHNlbGVjdGlvblR5cGU6VCxzZWxlY3Rpb25XaWR0aDpXfT1kLHtpc1Jvb3Q6aWUsY29sc3BhbjpnZX09U2wodGhpcyxKbCkuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKTtpZihUPT09eXkpe2lmKCFpZSlyZXR1cm4gaC5jb2x1bW5JbmRleH1lbHNlIFQ9PT1Q'@;
put 'ayYmKGdlPlctX3x8IWllKSYmKGYubGVuZ3RoPTApO3JldHVybiBsfW9uQmVmb3JlQ29weShsLGEsZCl7bGV0e2NvbHVtbkhlYWRlcnNDb3VudDpofT1kO2lmKDAhPT1oKWZvcihsZXQgXz0wO188YS5sZW5ndGg7XysrKXtjb25zdHtzdGFydFJvdzpULHN0YXJ0Q29sOlcsZW5kUm93OmllLGVu'@;
put 'ZENvbDpnZX09YVtfXSx3ZT1pZS1UKzE7aWYoVD49MHx8MT09Vy1nZSsxKWJyZWFrO2ZvcihsZXQgWmU9VztaZTw9Z2U7WmUrKylmb3IobGV0IG90PVQ7b3Q8PWllO290Kyspe3ZhciBmO2NvbnN0IGV0PXdlK290LHl0PVplLVc7MCE9PXl0JiYhMT09PShudWxsPT09KGY9U2wodGhpcyxKbCku'@;
put 'Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKG90LFplKSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuaXNSb290KSYmKGxbZXRdW3l0XT0iIil9fX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCxoKXt0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKSYmKGguY29sdW1uPSEwKX1v'@;
put 'bkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7Y29uc3QgZD10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKTtpZighZClyZXR1cm47Y29uc3R7c2VsZWN0aW9uOmh9PXRoaXMuaG90LGY9aC5pc1NlbGVjdGVkKCk/aC5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51'@;
put 'bGwsXz1bXSx7Y29sdW1uSW5kZXg6VCxvcmlnQ29sc3BhbjpXfT1kLGllPSFoLmluSW5TZWxlY3Rpb24oYSk7bC5zaGlmdEtleSYmZj9hLmNvbDxmLmZyb20uY29sP18ucHVzaChmLmdldFRvcEVuZENvcm5lcigpLmNvbCxULGEucm93KTpfLnB1c2goYS5jb2w+Zi5mcm9tLmNvbD9mLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCkuY29sOlQsVCtXLTEsYS5yb3cpOihmayhsKXx8VXAobCkmJmllKSYmXy5wdXNoKFQsVCtXLTEsYS5yb3cpLGguc2VsZWN0Q29sdW1ucyguLi5fKX1vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcihsLGEsZCxoKXtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpKXJl'@;
put 'dHVybjtjb25zdCBmPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGEpO2lmKCFmKXJldHVybjtjb25zdHtjb2x1bW5JbmRleDpfLG9yaWdDb2xzcGFuOlR9PWYsVz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGllPVcuZ2V0VG9wU3RhcnRDb3JuZXIoKSxnZT1X'@;
put 'LmdldEJvdHRvbUVuZENvcm5lcigpLHtmcm9tOndlfT1XO2guY29sdW1uPSEwLGguY2VsbD0hMDtjb25zdCBFZT1bXTthLmNvbDx3ZS5jb2w/RWUucHVzaChnZS5jb2wsXyk6RWUucHVzaChhLmNvbD53ZS5jb2w/aWUuY29sOl8sXytULTEpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoLi4uRWUp'@;
put 'fW9uQWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMobCl7bC5sZW5ndGg9MDtmb3IobGV0IGE9MDthPFNsKHRoaXMsSmwpLmdldExheWVyc0NvdW50KCk7YSsrKWwucHVzaCh0aGlzLmhlYWRlclJlbmRlcmVyRmFjdG9yeShhKSl9b25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92'@;
put 'ZXJyaWRlKGwpe2NvbnN0IGE9U2wodGhpcyxKbCkuZ2V0TGF5ZXJzQ291bnQoKTtsZXQgZD1sLnN0YXJ0Q29sdW1uLGg9ISFhO2ZvcihsZXQgZj0wO2Y8YTtmKyspe2NvbnN0IF89U2wodGhpcyxKbCkuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoZixsLnN0YXJ0Q29sdW1uKSxUPXRoaXMuaG90'@;
put 'LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoXyk7aWYoXz49MCYmKGg9ITEpLEd1KFQpJiZUPGwuc3RhcnRDb2x1bW4pe2Q9VDticmVha319bC5zdGFydENvbHVtbj1oP1NsKHRoaXMsSmwpLmdldEhlYWRlclRyZWVOb2RlRGF0YSgwLGQpLmNvbHVtbklu'@;
put 'ZGV4OmR9b25Nb2RpZnlDb2xXaWR0aChsLGEpe2NvbnN0IGQ9dGhpcy5naG9zdFRhYmxlLmdldFdpZHRoKGEpO3JldHVybiBsPmQ/bDpkfW9uTW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUobCxhLGQpe3ZhciBoO2NvbnN0e2xhYmVsOmZ9PW51bGwhPT0oaD1TbCh0aGlzLEpsKS5nZXRIZWFkZXJU'@;
put 'cmVlTm9kZURhdGEoZCxhKSkmJnZvaWQgMCE9PWg/aDp7bGFiZWw6IiJ9O3JldHVybiBmfW9uSW5pdCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9b25BZnRlckxvYWREYXRhKGwsYSl7YXx8dGhpcy51cGRhdGVQbHVnaW4oKX1kZXN0cm95KCl7akEodGhpcyxKbCxudWxsKSxudWxsIT09U2wodGhp'@;
put 'cyxzNCkmJihTbCh0aGlzLHM0KS51bnN1YnNjcmliZSgpLGpBKHRoaXMsczQsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCl7aWYoIShsLnJvdz49MHx8bC5jb2w8MCkpcmV0dXJuIFNsKHRoaXMsSmwpLmdldEhlYWRlclRyZWVOb2RlRGF0'@;
put 'YShsLnJvdyxsLmNvbCl9fWNvbnN0IFJ6PWNsYXNzIHNOZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG90PWEsdGhpcy5wbHVnaW49bH19O2NsYXNzIFFmIGV4dGVuZHMgUnp7c3RhdGljIGdldCBDU1NfQ0xBU1NFUygpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZl'@;
put 'bHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVudCIsaW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWwiLGVtcHR5SW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1'@;
put 'dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1u'@;
put 'dWxsfWFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93TGV2ZWwoZCksZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCksXz1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJESVYi'@;
put 'KVswXSxUPV8ucXVlcnlTZWxlY3Rvcigic3Bhbi5yb3dIZWFkZXIiKTtpZihEbihfLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzc149Imh0X25lc3RpbmciXScpLGllPT57aWUmJl8ucmVtb3ZlQ2hpbGQoaWUpfSkscGkoYSxRZi5DU1NfQ0xBU1NFUy5pbmRpY2F0b3JDb250YWluZXIpLGgpe2Nv'@;
put 'bnN0e3Jvb3REb2N1bWVudDppZX09dGhpcy5ob3QsZ2U9VC5jbG9uZU5vZGUoITApO18uaW5uZXJIVE1MPSIiLHZvKDAsaC0xLCgpPT57Y29uc3Qgd2U9aWUuY3JlYXRlRWxlbWVudCgiU1BBTiIpO3BpKHdlLFFmLkNTU19DTEFTU0VTLmVtcHR5SW5kaWNhdG9yKSxfLmFwcGVuZENoaWxkKHdl'@;
put 'KX0pLF8uYXBwZW5kQ2hpbGQoZ2UpfWlmKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikpe2NvbnN0IGllPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtwaShhLFFmLkNTU19DTEFTU0VTLnBhcmVudCksdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRy'@;
put 'ZW5Db2xsYXBzZWQoZCk/cGkoaWUsYCR7UWYuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1FmLkNTU19DTEFTU0VTLmV4cGFuZEJ1dHRvbn1gKTpwaShpZSxgJHtRZi5DU1NfQ0xBU1NFUy5idXR0b259ICR7UWYuQ1NTX0NMQVNTRVMuY29sbGFwc2VCdXR0b259YCksXy5hcHBlbmRDaGlsZChpZSl9'@;
put 'fXVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7YXx8KGE9dGhpcy5kYXRhTWFuYWdlci5jYWNoZS5sZXZlbENvdW50KSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9TWF0aC5tYXgoNTAsMTErMTAqYSsyNSksdGhpcy5ob3QucmVuZGVyKCl9fWNvbnN0IGtvZT1RZixsTmU9Y2xhc3Mg'@;
put 'YU5lIGV4dGVuZHMgUnp7Y29uc3RydWN0b3IobCxhKXt2YXIgZDtzdXBlcihsLGEpLGQ9dGhpcyx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2VkUm93cz1bXSx0aGlzLmNvbGxhcHNlZFJvd3NTdGFzaD17c3Rhc2g6ZnVuY3Rpb24oKXtsZXQg'@;
put 'aD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2QubGFzdENvbGxhcHNlZFJvd3M9ZC5jb2xsYXBzZWRSb3dzLnNsaWNlKDApLGQuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLGgpfSxzaGlmdFN0YXNoOmZ1'@;
put 'bmN0aW9uKGgsZil7bGV0IF89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7bnVsbD09ZiYmKGY9MS8wKSxEbihkLmxhc3RDb2xsYXBzZWRSb3dzLChULFcpPT57VD49aCYmVDxmJiYoZC5sYXN0Q29sbGFwc2VkUm93c1tXXT1UK18pfSl9'@;
put 'LGFwcGx5U3Rhc2g6ZnVuY3Rpb24oKXtkLmNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pLGQubGFzdENvbGxhcHNlZFJvd3M9dm9pZCAwfSx0cmltU3Rh'@;
put 'c2g6KGgsZik9Pnt2byhoLGgrZi0xLF89Pntjb25zdCBUPXRoaXMubGFzdENvbGxhcHNlZFJvd3MuaW5kZXhPZihfKTtUPi0xJiZ0aGlzLmxhc3RDb2xsYXBzZWRSb3dzLnNwbGljZShULDEpfSl9fX1jb2xsYXBzZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107bGV0IGY9bnVsbCxfPW51bGwsVD1udWxsO3JldHVybiBpc05hTihsKT8oZj1sLF89dGhpcy5kYXRhTWFu'@;
put 'YWdlci5nZXRSb3dJbmRleChmKSk6KGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLF89bCksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmRG4oZi5fX2NoaWxkcmVuLFc9PntoLnB1c2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChXKSl9KSxUPXRoaXMu'@;
put 'Y29sbGFwc2VSb3dzKGgsITAsITEpLGQmJnRoaXMudHJpbVJvd3MoVCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSwtMT09PXRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKF8pJiZ0aGlzLmNvbGxhcHNlZFJvd3MucHVzaChfKSxUfWNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihsKXtsZXQg'@;
put 'YT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO0RuKGwsZj0+e2gucHVzaCguLi50aGlzLmNvbGxhcHNl'@;
put 'Q2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlUm93KGwpe3RoaXMuY29sbGFwc2VSb3dzKFtsXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX1j'@;
put 'b2xsYXBzZVJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gRG4obCxmPT57'@;
put 'aC5wdXNoKGYpLGEmJnRoaXMuY29sbGFwc2VDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksaH1jb2xsYXBzZUNoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVu'@;
put 'Z3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJkRuKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLF89Pntjb25zdCBUPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgo'@;
put 'Xyk7YS5wdXNoKFQpLHRoaXMuY29sbGFwc2VDaGlsZFJvd3MoVCxhKX0pLGgmJnRoaXMudHJpbVJvd3MoYSl9ZXhwYW5kUm93KGwpe3RoaXMuZXhwYW5kUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9ZXhwYW5kUm93'@;
put 'cyhsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPVtdO3JldHVybiBEbihsLGY9PntoLnB1c2goZiks'@;
put 'YSYmdGhpcy5leHBhbmRDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxofWV4cGFuZENoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJkRuKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLF89PntpZighdGhpcy5pc0FueVBhcmVudENvbGxhcHNlZChfKSl7Y29uc3QgVD10aGlzLmRh'@;
put 'dGFNYW5hZ2VyLmdldFJvd0luZGV4KF8pO2EucHVzaChUKSx0aGlzLmV4cGFuZENoaWxkUm93cyhULGEpfX0pLGgmJnRoaXMudW50cmltUm93cyhhKX1leHBhbmRDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRz'@;
put 'WzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsXz1udWxsLFQ9bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9bCxfPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpOihmPXRoaXMu'@;
put 'ZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxfPWwpLHRoaXMuY29sbGFwc2VkUm93cy5zcGxpY2UodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YoXyksMSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmRG4oZi5fX2NoaWxkcmVuLFc9Pntjb25zdCBpZT10aGlzLmRhdGFN'@;
put 'YW5hZ2VyLmdldFJvd0luZGV4KFcpO2gucHVzaChpZSl9KSxUPXRoaXMuZXhwYW5kUm93cyhoLCEwLCExKSxkJiZ0aGlzLnVudHJpbVJvd3MoVCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSxUfWV4cGFuZE11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtEbihsLGY9PntoLnB1c2goLi4udGhpcy5leHBhbmRDaGlsZHJlbihmLCExLCExKSl9KSxkJiZ0'@;
put 'aGlzLnVudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZUFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtEbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmNvbGxhcHNl'@;
put 'TXVsdGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfWV4cGFuZEFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtEbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmV4cGFuZE11bHRp'@;
put 'cGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX10cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0RuKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKX11bnRyaW1Sb3dzKGwpe3RoaXMu'@;
put 'aG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMSl9KX0sITApfWFyZUNoaWxkcmVuQ29sbGFwc2VkKGwpe2xldCBhPWlzTmFOKGwpP2w6dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwp'@;
put 'LGQ9ITA7cmV0dXJuIG51bGw9PT1hJiYoYT17X19jaGlsZHJlbjp0aGlzLmRhdGFNYW5hZ2VyLmRhdGF9KSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGEpJiZEbihhLl9fY2hpbGRyZW4saD0+e2NvbnN0IGY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChoKTtpZighdGhpcy5w'@;
put 'bHVnaW4uY29sbGFwc2VkUm93c01hcC5nZXRWYWx1ZUF0SW5kZXgoZikpcmV0dXJuIGQ9ITEsITF9KSxkfWlzQW55UGFyZW50Q29sbGFwc2VkKGwpe2xldCBhPWw7Zm9yKDtudWxsIT09YTspe2E9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoYSk7Y29uc3QgZD10aGlzLmRhdGFNYW5h'@;
put 'Z2VyLmdldFJvd0luZGV4KGEpO2lmKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKGQpPi0xKXJldHVybiEwfXJldHVybiExfXRvZ2dsZVN0YXRlKGwsYSl7aWYoYS5jb2w+PTApcmV0dXJuO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGEucm93KTtCbyhsLnRhcmdldCxrb2Uu'@;
put 'Q1NTX0NMQVNTRVMuYnV0dG9uKSYmKHRoaXMuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZCk/dGhpcy5leHBhbmRDaGlsZHJlbihkKTp0aGlzLmNvbGxhcHNlQ2hpbGRyZW4oZCksdjIobCkpfXRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCl9dW50'@;
put 'cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1Zpc3VhbFJvdyhsKX1yZW5kZXJBbmRBZGp1c3QoKXt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfX0sQW9lPW5ldyBXZWFrTWFwLHVOZT1jbGFzcyBjTmUgZXh0ZW5kcyBS'@;
put 'entjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksQW9lLnNldCh0aGlzLHtyb3dfYWJvdmU6KGQsaCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoaFtoLmxlbmd0aC0xXS5zdGFydC5yb3csImFib3ZlIil9LHJvd19iZWxvdzooZCxoKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2li'@;
put 'bGluZyhoW2gubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYmVsb3ciKX19KSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyfWFwcGVuZE9wdGlvbnMobCl7Y29uc3QgYT1be2tleToiYWRkX2NoaWxkIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShu'@;
put 'Qil9LGNhbGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3codGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pLGg9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpO3RoaXMuZGF0YU1hbmFnZXIuYWRkQ2hpbGQoaCl9LGRpc2Fi'@;
put 'bGVkOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtyZXR1cm4hZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7'@;
put 'a2V5OiJkZXRhY2hfZnJvbV9wYXJlbnQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHJCKX0sY2FsbGJhY2s6KCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmRldGFjaEZyb21QYXJlbnQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkpfSxkaXNhYmxlZDooKT0+e2NvbnN0'@;
put 'IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksaD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZFswXSk7cmV0dXJuIXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGgpfHwhZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1u'@;
put 'SGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7bmFtZToiLS0tLS0tLS0tIn1dO3JldHVybiB2bygwLGwuaXRlbXMubGVuZ3RoLTEsZD0+e2lmKDA9PT1kKXJldHVybiBEbihhLChoLGYpPT57bC5pdGVtcy5zcGxpY2UoZCtm'@;
put 'LDAsaCl9KSwhMX0pLHRoaXMubW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKX1tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpe2NvbnN0IGE9QW9lLmdldCh0aGlzKTtyZXR1cm4gdm8oMCxsLml0ZW1zLmxlbmd0aC0xLGQ9Pntjb25zdCBoPWFbbC5pdGVtc1tkXS5rZXldO251bGwhPWgm'@;
put 'JihsLml0ZW1zW2RdLmNhbGxiYWNrPWgpfSksbH19O2NsYXNzIGROZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90LHRoaXMuZGF0YU1hbmFnZXI9bC5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNpbmdVST1sLmNvbGxhcHNpbmdVSX1vbkJlZm9yZVJvd01vdmUo'@;
put 'bCxhLGQsaCl7aWYodGhpcy5kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcoe3Jvd3M6bCxmaW5hbEluZGV4OmEsZHJvcEluZGV4OmQsbW92ZVBvc3NpYmxlOmh9KSlyZXR1cm4hMTt0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9ITE7Y29uc3QgXz1kPT09dGhpcy5ob3QuY291bnRSb3dzKCks'@;
put 'VD1fP3RoaXMuaG90LmNvdW50U291cmNlUm93cygpOnRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhkKTtsZXQgVz0hMDtjb25zdCBpZT1sLm1hcChvdD0+e2lmKCFXKXJldHVybiExO2NvbnN0IGV0PXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhvdCk7'@;
put 'cmV0dXJuIFc9dGhpcy5zaG91bGRBbGxvd01vdmluZyhldCxUKSxldH0pLGdlPS0xPT09aWUuaW5kZXhPZihUKTtpZighV3x8IWdlKXJldHVybiExO2NvbnN0IHdlPXRoaXMuZ2V0QmFzZVBhcmVudChpZSksRWU9dGhpcy5nZXRUYXJnZXRQYXJlbnQoXyxUKSxaZT13ZT09PUVlO3JldHVybiB0'@;
put 'aGlzLm1vdmVkVG9Db2xsYXBzZWQ9dGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoRWUpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuc2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMoaWUsVCxaZSksdGhpcy5tb3Zl'@;
put 'Um93cyhpZSxULEVlKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpLHRoaXMubW92ZUNlbGxzTWV0YShpZSxUKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCghMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGQsaCxo'@;
put 'JiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSkpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuc2VsZWN0Q2VsbHMobCxkKSwhMX1kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcobCl7Y29uc3R7cm93czphLGZpbmFsSW5kZXg6ZCxkcm9wSW5kZXg6aCxtb3ZlUG9zc2libGU6Zn09bDts'@;
put 'ZXQgXz0hMTtyZXR1cm4gTGEoaCkmJihHYShBYWBTaW5jZSB2ZXJzaW9uIDguMC4wIG9mIHRoZSBIYW5kc29udGFibGUgdGhlICdtb3ZlUm93cycgbWV0aG9kIGlzbid0IHVzZWQgZm9yIG1vdmluZyByb3dzXHgyMAogICAgICB3aGVuIHRoZSBOZXN0ZWRSb3dzIHBsdWdpbiBpcyBlbmFibGVk'@;
put 'LiBQbGVhc2UgdXNlIHRoZSAnZHJhZ1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLmApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGEsZCxoLGYsITEpLF89ITApLF99c2hvdWxkQWxsb3dNb3ZpbmcobCxhKXtyZXR1cm4hKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQobCl8fHRoaXMu'@;
put 'ZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCl8fGw9PT1hfHwwPT09YSl9Z2V0QmFzZVBhcmVudChsKXtyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobFswXSl9Z2V0VGFyZ2V0UGFyZW50KGwsYSl7bGV0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQo'@;
put 'bD9hLTE6YSk7cmV0dXJuIG51bGw9PWQmJihkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEtMSkpLGR9c2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMobCxhLGQpe2R8fChNYXRoLm1heCguLi5sKTw9YT90aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gu'@;
put 'c2hpZnRTdGFzaChsWzBdLGEsLTEqbC5sZW5ndGgpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbFswXSxsLmxlbmd0aCkpfW1vdmVSb3dzKGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGQpK3RoaXMuZGF0'@;
put 'YU1hbmFnZXIuY291bnRDaGlsZHJlbihkKSsxO3RoaXMuaG90LmJhdGNoUmVuZGVyKCgpPT57bC5mb3JFYWNoKGY9Pnt0aGlzLmRhdGFNYW5hZ2VyLm1vdmVSb3coZixhLHRoaXMubW92ZWRUb0NvbGxhcHNlZCxoKX0pfSl9bW92ZUNlbGxzTWV0YShsLGEpe2NvbnN0IGQ9W10saD1NYXRoLm1h'@;
put 'eCguLi5sKTxhO2wuZm9yRWFjaChmPT57ZC5wdXNoKHRoaXMuaG90LmdldENlbGxNZXRhQXRSb3coZikpfSksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGxbMF0sbC5sZW5ndGgpLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShhLShoP2QubGVuZ3RoOjApLDAsLi4uZCl9c2VsZWN0Q2VsbHMo'@;
put 'bCxhKXtjb25zdCBkPWwubGVuZ3RoO2xldCBoPTAsZj0wLF89bnVsbCxUPW51bGw7aWYodGhpcy5tb3ZlZFRvQ29sbGFwc2VkKXtsZXQgVz1udWxsO1c9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGxbZC0xXTxhP2EtZDphKTtjb25zdCBpZT10aGlzLmRhdGFNYW5hZ2Vy'@;
put 'LmdldFJvd1BhcmVudChudWxsPT09Vz90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xOlctMSksZ2U9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChpZSk7aD10aGlzLmRhdGFNYW5hZ2VyLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhnZSksZj1ofWVsc2UgbFtkLTFdPGE/KGY9YS0xLGg9'@;
put 'Zi1kKzEpOihoPWEsZj1oK2QtMSk7Xz10aGlzLmhvdC5zZWxlY3Rpb24sVD10aGlzLmhvdC5jb3VudENvbHMoKS0xLF8uc2V0UmFuZ2VTdGFydCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLDApKSxfLnNldFJhbmdlRW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsVCksITAp'@;
put 'fWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9fWNvbnN0IE96PSJuZXN0ZWRSb3dzIixlMz1uZXcgV2Vha01hcDtjbGFzcyBwTmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gT3p9c3RhdGljIGdldCBQTFVHSU5f'@;
put 'UFJJT1JJVFkoKXtyZXR1cm4gMzAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZGF0YU1hbmFnZXI9bnVsbCx0aGlzLmhlYWRlcnNVST1udWxsLHRoaXMuY29sbGFwc2VkUm93c01hcD1udWxsLGUzLnNldCh0aGlzLHttb3ZlZFRvQ29sbGFwc2VkOiExLHNraXBSZW5kZXI6bnVsbCxz'@;
put 'a2lwQ29yZUFQSU1vZGlmaWVyczohMX0pfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPel19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmNvbGxhcHNlZFJvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0'@;
put 'ZXJNYXAoIm5lc3RlZFJvd3MiLG5ldyBteSksdGhpcy5kYXRhTWFuYWdlcj1uZXcgY2xhc3MgaU5le2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9YSx0aGlzLmRhdGE9bnVsbCx0aGlzLnBsdWdpbj1sLHRoaXMucGFyZW50UmVmZXJlbmNlPW5ldyBXZWFrTWFwLHRoaXMuY2FjaGU9e2xldmVs'@;
put 'czpbXSxsZXZlbENvdW50OjAscm93czpbXSxub2RlSW5mbzpuZXcgV2Vha01hcH19c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2Rp'@;
put 'ZmllcnMoKSxsPXRoaXMuaG90LmdldFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11cGRhdGVXaXRoRGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10s'@;
put 'bGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9LHZvKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlzLmNhY2hlTm9kZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVs'@;
put 'c1thXT1bXSx0aGlzLmNhY2hlLmxldmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5yb3dzLnB1c2gobCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhp'@;
put 'cy5oYXNDaGlsZHJlbihsKSYmRG4obC5fX2NoaWxkcmVuLGg9Pnt0aGlzLmNhY2hlTm9kZShoLGErMSxsKX0pfWdldERhdGFPYmplY3QobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSxfPWE7aWYoaXNOYU4o'@;
put 'XykmJl8uZW5kKXJldHVybiBfO2xldCBUPWw7cmV0dXJuIFR8fChUPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sZj0hMCxfLT0xKSxudWxsIT1kJiZfPT09ZD97cmVzdWx0OlQsZW5kOiEwfTpudWxsIT1oJiZUPT09aD97cmVzdWx0Ol8sZW5kOiEwfTooXys9MSxULl9fY2hpbGRyZW4mJkRuKFQu'@;
put 'X19jaGlsZHJlbixXPT57aWYodGhpcy5wYXJlbnRSZWZlcmVuY2Uuc2V0KFcsZj9udWxsOlQpLF89dGhpcy5yZWFkVHJlZU5vZGVzKFcsXyxkLGgpLGlzTmFOKF8pJiZfLmVuZClyZXR1cm4hMX0pLF8pfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2No'@;
put 'aWxkcmVuPXRoaXMuZGF0YSxsfW1vY2tOb2RlKCl7Y29uc3QgbD17fTtyZXR1cm4gZHModGhpcy5kYXRhWzBdLChhLGQpPT57bFtkXT1udWxsfSksbH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdp'@;
put 'dGhpblBhcmVudChsKXtsZXQgYT1udWxsO2E9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdldFJvd1BhcmVudChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXty'@;
put 'ZXR1cm4gdGhpcy5jb3VudENoaWxkcmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oRG4oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGgu'@;
put 'X19jaGlsZHJlbiYmKGErPXRoaXMuY291bnRDaGlsZHJlbihoKSl9KSxhKTowfWdldFJvd1BhcmVudChsKXtsZXQgYTtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSx0aGlzLmdldFJvd09iamVjdFBhcmVudChhKX1nZXRSb3dPYmplY3RQYXJlbnQobCl7cmV0dXJu'@;
put 'IGwmJiJvYmplY3QiPT10eXBlb2YgbD90aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbChsKXtsZXQgYT1udWxsO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLGE/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChhKTpudWxsfWdl'@;
put 'dFJvd09iamVjdExldmVsKGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkubGV2ZWx9aGFzQ2hpbGRyZW4obCl7bGV0IGE9bDtyZXR1cm4gaXNOYU4oYSl8fChhPXRoaXMuZ2V0RGF0YU9iamVjdChhKSksISghYS5fX2NoaWxkcmVufHwhYS5fX2NoaWxk'@;
put 'cmVuLmxlbmd0aCl9aXNDaGlsZChsKXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50KGwpfWdldENoaWxkKGwsYSl7dmFyIGQ7cmV0dXJuKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2FdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbChsKXtyZXR1'@;
put 'cm4hdGhpcy5pc0NoaWxkKGwpfWlzUGFyZW50KGwpe3ZhciBhO2xldCBkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJiEhZC5fX2NoaWxkcmVuJiYwIT09KG51bGw9PT0oYT1kLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCl9'@;
put 'YWRkQ2hpbGQobCxhKXtsZXQgZD1hO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxkKTtsZXQgaD1udWxsO2wmJihoPXRoaXMuZ2V0Um93SW5kZXgobCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGgrdGhpcy5jb3VudENoaWxkcmVuKGwpKzEsMSk7'@;
put 'bGV0IGY9bDtsfHwoZj10aGlzLm1vY2tQYXJlbnQoKSksZi5fX2NoaWxkcmVufHwoZi5fX2NoaWxkcmVuPVtdKSxkfHwoZD10aGlzLm1vY2tOb2RlKCkpLGYuX19jaGlsZHJlbi5wdXNoKGQpLHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3QgXz10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoXywxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLF8sMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsZCl9YWRkQ2hpbGRBdEluZGV4KGwsYSxkKXtsZXQgZixoPWQ7aWYoaHx8KGg9dGhpcy5tb2Nr'@;
put 'Tm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsaCxhKSxsKXtjb25zdCBUPXRoaXMuZ2V0Um93SW5kZXgobCkrYSsxO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLFQsMSksbC5fX2NoaWxkcmVuLnNwbGljZShhLG51bGwsaCksdGhpcy5yZXdy'@;
put 'aXRlQ2FjaGUoKSx0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSwiX19jaGlsZHJlbiIsbC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIp'@;
put 'LHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoVCwxKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixULDEpLGY9VH1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJz'@;
put 'KCksdGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGEsMSwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZj10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVthXSk7aD10aGlzLmdldERhdGFPYmplY3QoZiks'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsaCxhKX1hZGRTaWJsaW5nKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYmVsb3ciO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGwpLGg9dGhp'@;
put 'cy5nZXRSb3dQYXJlbnQoZCksZj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpO3N3aXRjaChhKXtjYXNlImJlbG93Ijp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYrMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYsbnVsbCl9fWRldGFjaEZy'@;
put 'b21QYXJlbnQobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPW51bGw7Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPyh2byhsWzBdLGxbMl0sRWU9Pntjb25zdCBaZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3co'@;
put 'RWUpO2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoWmUpKX0pLHZvKDAsaC5sZW5ndGgtMixFZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVudChoW0VlXSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksXz10aGlzLmNvdW50Q2hpbGRyZW4oZCks'@;
put 'VD10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpLFc9dGhpcy5nZXRSb3dQYXJlbnQoZCksaWU9dGhpcy5nZXRSb3dQYXJlbnQoVyksZ2U9dGhpcy5nZXRSb3dJbmRleChpZSk7bGV0IHdlPW51bGw7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURldGFjaENoaWxkIixXLGQpLG51'@;
put 'bGwhPVQpe2NvbnN0IEVlPUFycmF5LmZyb20obmV3IEFycmF5KGYrXysxKS5rZXlzKCkpLnNwbGljZSgtMSooXysxKSk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsZixfKzEsRWUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksVy5fX2NoaWxkcmVuLnNwbGljZShULDEp'@;
put 'LHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixmLF8rMSxFZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxpZSl7d2U9Z2UrdGhpcy5jb3VudENoaWxkcmVuKGllKTtjb25zdCBaZT10aGlzLmdldENoaWxkKGllLHRoaXMuY291bnRDaGlsZHJl'@;
put 'bihpZSktMSksb3Q9dGhpcy5nZXRSb3dJbmRleChaZSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsb3QrMSxfKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksaWUuX19jaGlsZHJlbi5wdXNoKGQpfWVsc2Ugd2U9dGhpcy5ob3QuY291bnRSb3dzKCkrMSx0aGlzLmhvdC5y'@;
put 'dW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93Iix3ZS0yLF8rMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmRhdGEucHVzaChkKX10aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsd2UtMixfKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSks'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGV0YWNoQ2hpbGQiLFcsZCx0aGlzLmdldFJvd0luZGV4KGQpKSxhJiZ0aGlzLmhvdC5yZW5kZXIoKX1maWx0ZXJEYXRhKGwsYSxkKXtjb25zdCBoPVtdO0RuKGQsZj0+e2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoZikpfSksRG4oaCxmPT57Y29u'@;
put 'c3QgXz10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGYpLFQ9dGhpcy5nZXRSb3dQYXJlbnQoZik7bnVsbD09PVQ/dGhpcy5kYXRhLnNwbGljZShfLDEpOlQuX19jaGlsZHJlbi5zcGxpY2UoXywxKX0pLHRoaXMucmV3cml0ZUNhY2hlKCl9c3BsaWNlRGF0YShsLGEsZCl7Y29uc3QgaD10'@;
put 'aGlzLmdldERhdGFPYmplY3QobC0xKTtsZXQgZj1udWxsLF89bDtoJiZoLl9fY2hpbGRyZW4mJjA9PT1oLl9fY2hpbGRyZW4ubGVuZ3RoPyhmPWgsXz0wKTpsPHRoaXMuY291bnRBbGxSb3dzKCkmJihmPXRoaXMuZ2V0Um93UGFyZW50KGwpLF89dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVu'@;
put 'dChsKSksZj9kP2YuX19jaGlsZHJlbi5zcGxpY2UoXyxhLC4uLmQpOmYuX19jaGlsZHJlbi5zcGxpY2UoXyxhKTpkP3RoaXMuZGF0YS5zcGxpY2UoXyxhLC4uLmQpOnRoaXMuZGF0YS5zcGxpY2UoXyxhKSx0aGlzLnJld3JpdGVDYWNoZSgpfXN5bmNSb3dXaXRoUmF3U291cmNlKGwpe2xldCBh'@;
put 'PWwsZD1udWxsO2Rve2Q9dGhpcy5nZXRSb3dQYXJlbnQoZCksbnVsbCE9PWQmJihhPWQpfXdoaWxlKG51bGwhPT1kKTt0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleChhKSwiX19jaGlsZHJl'@;
put 'biIsYS5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLnN5bmNSb3dXaXRoUmF3U291cmNlIiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpfW1vdmVSb3cobCxhLGQsaCl7Y29uc3QgZj1hPT09dGhpcy5ob3QuY291bnRSb3dzKCksXz10aGlzLmdldFJvd1BhcmVudChsKSxUPXRo'@;
put 'aXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksVz1fLl9fY2hpbGRyZW4uc2xpY2UoVCxUKzEpLGllPWw+YTtsZXQgZ2U9dGhpcy5nZXRSb3dQYXJlbnQoZj9hLTE6YSk7bnVsbD09Z2UmJihnZT10aGlzLmdldFJvd1BhcmVudChhLTEpKSxudWxsPT1nZSYmKGdlPXRoaXMuZ2V0RGF0YU9i'@;
put 'amVjdChhLTEpKSxnZT9nZS5fX2NoaWxkcmVufHwoZ2UuX19jaGlsZHJlbj1bXSk6KGdlPXRoaXMuZ2V0RGF0YU9iamVjdChhKSxnZS5fX2NoaWxkcmVuPVtdKTtjb25zdCB3ZT1mfHxkfHxoP2dlLl9fY2hpbGRyZW4ubGVuZ3RoOnRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoYSksRWU9'@;
put 'Xz09PWdlO2dlLl9fY2hpbGRyZW4uc3BsaWNlKHdlLDAsV1swXSksXy5fX2NoaWxkcmVuLnNwbGljZShUKyhpZSYmRWU/MTowKSwxKSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKF8pLEVlfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKGdlKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3Jl'@;
put 'dHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50'@;
put 'cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9fSh0aGlzLHRoaXMuaG90KSx0aGlzLmNvbGxhcHNpbmdVST1uZXcgbE5lKHRoaXMsdGhpcy5ob3QpLHRoaXMuaGVhZGVyc1VJPW5ldyBrb2UodGhpcyx0aGlzLmhvdCksdGhpcy5jb250ZXh0TWVudVVJPW5ldyB1TmUodGhpcyx0aGlzLmhvdCksdGhp'@;
put 'cy5yb3dNb3ZlQ29udHJvbGxlcj1uZXcgZE5lKHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJJbml0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZv'@;
put 'cmVWaWV3UmVuZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0RhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlSb3dEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5v'@;
put 'bk1vZGlmeVNvdXJjZUxlbmd0aCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEYXRhU3BsaWNlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlRGF0YVNwbGljZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJmaWx0ZXJEYXRhIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBsLm9uRmlsdGVyRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0'@;
put 'ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRz'@;
put 'KX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSZW1vdmVSb3coLi4uYXJndW1l'@;
put 'bnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVBZGRDaGlsZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckFkZENoaWxkIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJBZGRDaGlsZCguLi5hcmd1bWVu'@;
put 'dHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZURldGFjaENoaWxkKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckRldGFjaENoaWxk'@;
put 'KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25B'@;
put 'ZnRlckNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUm93TW92ZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsYT0+dGhpcy5vbkJlZm9yZUxvYWREYXRh'@;
put 'KGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGE9PnRoaXMub25CZWZvcmVMb2FkRGF0YShhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIiksc3VwZXIuZGlz'@;
put 'YWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpO2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCk7dGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmRhdGFNYW5hZ2VyLnVwZGF0ZVdpdGhEYXRhKGwpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfW9uQmVm'@;
put 'b3JlUm93TW92ZShsLGEsZCxoKXtyZXR1cm4gdGhpcy5yb3dNb3ZlQ29udHJvbGxlci5vbkJlZm9yZVJvd01vdmUobCxhLGQsaCl9ZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKXtlMy5nZXQodGhpcykuc2tpcENvcmVBUElNb2RpZmllcnM9ITB9ZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpe2Uz'@;
put 'LmdldCh0aGlzKS5za2lwQ29yZUFQSU1vZGlmaWVycz0hMX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xlU3RhdGUobCxhLGQpfW9uTW9kaWZ5Um93RGF0YShsKXtpZighZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVy'@;
put 'biB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCl9b25Nb2RpZnlTb3VyY2VMZW5ndGgoKXtpZighZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfW9uQmVmb3JlRGF0YVNwbGljZShsLGEsZCl7cmV0'@;
put 'dXJuISghZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzJiYhdGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKSYmKHRoaXMuZGF0YU1hbmFnZXIuc3BsaWNlRGF0YShsLGEsZCksMSkpfW9uRmlsdGVyRGF0YShsLGEsZCl7Y29uc3QgaD1lMy5nZXQodGhpcyk7cmV0'@;
put 'dXJuIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC50cmltU3Rhc2goZFswXSxhKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChkWzBdLG51bGwsLTEq'@;
put 'YSksdGhpcy5kYXRhTWFuYWdlci5maWx0ZXJEYXRhKGwsYSxkKSxoLnNraXBSZW5kZXI9ITAsdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKXtyZXR1cm4gdGhpcy5jb250ZXh0TWVudVVJLmFwcGVuZE9wdGlvbnMo'@;
put 'bCl9b25BZnRlckdldFJvd0hlYWRlcihsLGEpe3RoaXMuaGVhZGVyc1VJLmFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpfW9uTW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7cmV0dXJuIHRoaXMuaGVhZGVyc1VJLnJvd0hlYWRlcldpZHRoQ2FjaGV8fGx9b25BZnRlclJlbW92ZVJvdyhsLGEsZCxo'@;
put 'KXtpZihoPT09dGhpcy5wbHVnaW5OYW1lKXJldHVybjtjb25zdCBmPWUzLmdldCh0aGlzKTtzZXRUaW1lb3V0KCgpPT57Zi5za2lwUmVuZGVyPW51bGwsdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBw'@;
put 'bHlTdGFzaCgpfSwwKX1vbkJlZm9yZVJlbW92ZVJvdyhsLGEsZCl7Y29uc3QgaD1BcnJheS5mcm9tKGQucmVkdWNlKChmLF8pPT57aWYodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChfKSl7Y29uc3QgVD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoXykuX19jaGlsZHJlbjtyZXR1'@;
put 'cm4gZi5hZGQoXyksQXJyYXkuaXNBcnJheShUKSYmVC5mb3JFYWNoKFc9PmYuYWRkKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoVykpKSxmfXJldHVybiBmLmFkZChfKX0sbmV3IFNldCkpO2QubGVuZ3RoPTAsZC5wdXNoKC4uLmgpfW9uQmVmb3JlQWRkQ2hpbGQoKXt0aGlzLmNvbGxh'@;
put 'cHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1vbkFmdGVyQWRkQ2hpbGQobCxhKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGEpKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRS'@;
put 'b3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9b25CZWZvcmVEZXRhY2hDaGlsZCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfW9uQWZ0ZXJEZXRhY2hDaGlsZChsLGEsZCl7dGhpcy5jb2xsYXBz'@;
put 'aW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goZCxudWxsLC0xKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9b25BZnRlckNyZWF0ZVJvdygpe3RoaXMuZGF0YU1h'@;
put 'bmFnZXIucmV3cml0ZUNhY2hlKCl9b25BZnRlckluaXQoKXtjb25zdCBsPU1hdGgubWF4KC4uLnRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxzKTtsPjAmJnRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpfW9uQmVmb3JlVmlld1JlbmRlcihsLGEpe2UzLmdldCh0aGlz'@;
put 'KS5za2lwUmVuZGVyJiYoYS5za2lwUmVuZGVyPSEwKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfW9uQmVmb3JlTG9hZERhdGEobCl7aWYoIWduZShsKSlyZXR1cm4gU04oIlRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0cyBhcyBhIGRhdGFzZXQg'@;
put 'dG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQuIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPel09ITEsdm9pZCB0aGlzLmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEobCksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX19'@;
put 'c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVNhdmUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlTG9hZCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIpO2NvbnN0IFRvZT0icGVy'@;
put 'c2lzdGVudFN0YXRlIjtjbGFzcyBfTmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gVG9lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5zdG9yYWdlPXZvaWQgMH1pc0VuYWJsZWQoKXty'@;
put 'ZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbVG9lXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnN0b3JhZ2V8fCh0aGlzLnN0b3JhZ2U9bmV3IGNsYXNzIGdOZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3RoaXMucm9vdFdpbmRvdz1hLHRoaXMucHJlZml4PWwsdGhpcy5zYXZlZEtleXM9W10sdGhpcy5sb2FkU2F2ZWRLZXlzKCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV8k'@;
put 'e2x9YCxKU09OLnN0cmluZ2lmeShhKSksLTE9PT10aGlzLnNhdmVkS2V5cy5pbmRleE9mKGwpJiYodGhpcy5zYXZlZEtleXMucHVzaChsKSx0aGlzLnNhdmVTYXZlZEtleXMoKSl9bG9hZFZhbHVlKGwsYSl7Y29uc3QgaD10aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7'@;
put 'dGhpcy5wcmVmaXh9XyR7dHlwZW9mIGw+InUiP2E6bH1gKTtyZXR1cm4gbnVsbD09PWg/dm9pZCAwOkpTT04ucGFyc2UoaCl9cmVzZXQobCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke2x9YCl9cmVzZXRBbGwoKXtEbih0aGlzLnNh'@;
put 'dmVkS2V5cywobCxhKT0+e3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHt0aGlzLnNhdmVkS2V5c1thXX1gKX0pLHRoaXMuY2xlYXJTYXZlZEtleXMoKX1sb2FkU2F2ZWRLZXlzKCl7Y29uc3QgbD10aGlzLnJvb3RXaW5kb3cubG9jYWxT'@;
put 'dG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCksYT0ic3RyaW5nIj09dHlwZW9mIGw/SlNPTi5wYXJzZShsKTp2b2lkIDA7dGhpcy5zYXZlZEtleXM9YXx8W119c2F2ZVNhdmVkS2V5cygpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0'@;
put 'SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgLEpTT04uc3RyaW5naWZ5KHRoaXMuc2F2ZWRLZXlzKSl9Y2xlYXJTYXZlZEtleXMoKXt0aGlzLnNhdmVkS2V5cy5sZW5ndGg9MCx0aGlzLnNhdmVTYXZlZEtleXMoKX19KHRoaXMuaG90LnJvb3RFbGVtZW50LmlkLHRo'@;
put 'aXMuaG90LnJvb3RXaW5kb3cpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVNhdmUiLChsLGEpPT50aGlzLnNhdmVWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZUxvYWQiLChsLGEpPT50aGlzLmxvYWRWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNp'@;
put 'c3RlbnRTdGF0ZVJlc2V0IiwoKT0+dGhpcy5yZXNldFZhbHVlKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5zdG9yYWdlPXZvaWQgMCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFi'@;
put 'bGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1sb2FkVmFsdWUobCxhKXthLnZhbHVlPXRoaXMuc3RvcmFnZS5sb2FkVmFsdWUobCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5zdG9yYWdlLnNhdmVWYWx1ZShsLGEpfXJlc2V0VmFsdWUobCl7dHlwZW9mIGw+InUiP3RoaXMuc3RvcmFnZS5y'@;
put 'ZXNldEFsbCgpOnRoaXMuc3RvcmFnZS5yZXNldChsKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCBQej0ic2VhcmNoIix3TmU9ZnVuY3Rpb24oYyxsLGEsZCxoKXtjLmdldENlbGxNZXRhKGwsYSkuaXNTZWFyY2hSZXN1bHQ9aH0sQ05lPWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm4h'@;
put 'KExhKGMpfHxudWxsPT09Y3x8IWMudG9Mb2NhbGVMb3dlckNhc2V8fDA9PT1jLmxlbmd0aHx8TGEobCl8fG51bGw9PT1sKSYmLTEhPT1sLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoYS5sb2NhbGUpLmluZGV4T2YoYy50b0xvY2FsZUxvd2VyQ2FzZShhLmxvY2FsZSkpfTtjbGFzcyBT'@;
put 'TmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUHp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTkwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuY2FsbGJhY2s9d05lLHRoaXMucXVlcnlNZXRob2Q9Q05lLHRoaXMuc2VhcmNoUmVz'@;
put 'dWx0Q2xhc3M9Imh0U2VhcmNoUmVzdWx0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQel19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQel07dGhpcy51cGRh'@;
put 'dGVQbHVnaW5TZXR0aW5ncyhhKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUmVuZGVyZXIoLi4uYXJndW1lbnRzKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbD10aGlzO2NvbnN0IGE9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gbC5vbkJlZm9yZVJlbmRlcmVyKC4uLmFyZ3VtZW50cyl9O3RoaXMuaG90LmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixhKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVJlbmRlcmVyIixh'@;
put 'KX0pLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXF1ZXJ5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt'@;
put 'ZW50c1sxXTp0aGlzLmdldENhbGxiYWNrKCksZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5nZXRRdWVyeU1ldGhvZCgpO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dzKCksZj10aGlzLmhvdC5jb3VudENvbHMoKSxfPVtdLFQ9'@;
put 'dGhpcy5ob3Q7cmV0dXJuIHZvKDAsaC0xLFc9Pnt2bygwLGYtMSxpZT0+e2NvbnN0IGdlPXRoaXMuaG90LmdldERhdGFBdENlbGwoVyxpZSksd2U9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoVyxpZSksRWU9d2Uuc2VhcmNoLmNhbGxiYWNrfHxhLG90PSh3ZS5zZWFyY2gucXVlcnlNZXRob2R8fGQp'@;
put 'KGwsZ2Usd2UpO290JiZfLnB1c2goe3JvdzpXLGNvbDppZSxkYXRhOmdlfSksRWUmJkVlKFQsVyxpZSxnZSxvdCl9KX0pLF99Z2V0Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja31zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Z2V0UXVlcnlNZXRob2QoKXtyZXR1cm4gdGhp'@;
put 'cy5xdWVyeU1ldGhvZH1zZXRRdWVyeU1ldGhvZChsKXt0aGlzLnF1ZXJ5TWV0aG9kPWx9Z2V0U2VhcmNoUmVzdWx0Q2xhc3MoKXtyZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzc31zZXRTZWFyY2hSZXN1bHRDbGFzcyhsKXt0aGlzLnNlYXJjaFJlc3VsdENsYXNzPWx9dXBkYXRlUGx1Z2lu'@;
put 'U2V0dGluZ3MobCl7dXMobCkmJihsLnNlYXJjaFJlc3VsdENsYXNzJiZ0aGlzLnNldFNlYXJjaFJlc3VsdENsYXNzKGwuc2VhcmNoUmVzdWx0Q2xhc3MpLGwucXVlcnlNZXRob2QmJnRoaXMuc2V0UXVlcnlNZXRob2QobC5xdWVyeU1ldGhvZCksbC5jYWxsYmFjayYmdGhpcy5zZXRDYWxsYmFj'@;
put 'ayhsLmNhbGxiYWNrKSl9b25CZWZvcmVSZW5kZXJlcihsLGEsZCxoLGYsXyl7Y29uc3QgVD1fLmNsYXNzTmFtZXx8W107bGV0IFc9W107InN0cmluZyI9PXR5cGVvZiBUP1c9VC5zcGxpdCgiICIpOlcucHVzaCguLi5UKSx0aGlzLmlzRW5hYmxlZCgpJiZfLmlzU2VhcmNoUmVzdWx0P1cuaW5j'@;
put 'bHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcyl8fFcucHVzaChgJHt0aGlzLnNlYXJjaFJlc3VsdENsYXNzfWApOlcuaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcykmJlcuc3BsaWNlKFcuaW5kZXhPZih0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSwxKSxfLmNsYXNzTmFtZT1XLmpv'@;
put 'aW4oIiAiKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jbGFzcyBFTmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4idG91Y2hTY3JvbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygp'@;
put 'e3JldHVybiEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuc2Nyb2xsYmFycz1bXSx0aGlzLmNsb25lcz1bXSx0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsdGhpcy5mcmVlemVPdmVybGF5cz0hMX1pc0VuYWJsZWQoKXtyZXR1cm4gSE4oKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJs'@;
put 'ZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9PnRoaXMub25BZnRlclZpZXdSZW5kZXIoKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsc3VwZXIudXBkYXRlUGx1'@;
put 'Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuYWRkSG9vaygiYmVmb3JlVG91Y2hTY3JvbGwiLCgpPT50aGlzLm9uQmVmb3JlVG91Y2hTY3JvbGwoKSksdGhpcy5hZGRIb29rKCJhZnRlck1vbWVudHVtU2Nyb2xsIiwoKT0+'@;
put 'dGhpcy5vbkFmdGVyTW9tZW50dW1TY3JvbGwoKSl9b25BZnRlclZpZXdSZW5kZXIoKXtpZih0aGlzLmxvY2tlZENvbGxlY3Rpb24pcmV0dXJuO2NvbnN0e3RvcE92ZXJsYXk6bCxib3R0b21PdmVybGF5OmEsaW5saW5lU3RhcnRPdmVybGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5'@;
put 'OmgsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmZ9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xsYmFycy5sZW5ndGg9MCx0aGlzLnNjcm9sbGJhcnMucHVzaChsKSxhLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMu'@;
put 'cHVzaChhKSx0aGlzLnNjcm9sbGJhcnMucHVzaChkKSxoJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChoKSxmJiZmLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChmKSx0aGlzLmNsb25lcz1bXSxsLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGwuY2xvbmUud3RUYWJsZS5ob2xk'@;
put 'ZXIucGFyZW50Tm9kZSksYS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChhLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGQubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goZC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxoJiZ0aGlzLmNs'@;
put 'b25lcy5wdXNoKGguY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksZiYmZi5jbG9uZSYmdGhpcy5jbG9uZXMucHVzaChmLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpfW9uQmVmb3JlVG91Y2hTY3JvbGwoKXt0aGlzLmZyZWV6ZU92ZXJsYXlzPSEwLERuKHRoaXMuY2xv'@;
put 'bmVzLGw9PntwaShsLCJoaWRlLXR3ZWVuIil9KX1vbkFmdGVyTW9tZW50dW1TY3JvbGwoKXt0aGlzLmZyZWV6ZU92ZXJsYXlzPSExLERuKHRoaXMuY2xvbmVzLGw9PntXbyhsLCJoaWRlLXR3ZWVuIikscGkobCwic2hvdy10d2VlbiIpfSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+'@;
put 'e0RuKHRoaXMuY2xvbmVzLGw9PntXbyhsLCJzaG93LXR3ZWVuIil9KX0sNDAwKSxEbih0aGlzLnNjcm9sbGJhcnMsbD0+e2wucmVmcmVzaCgpLGwucmVzZXRGaXhlZFBvc2l0aW9uKCl9KSx0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNTY3JvbGxXaXRoTWFzdGVyKCl9fWNvbnN0'@;
put 'IHpBPSJ0cmltUm93cyI7Y2xhc3MgQU5lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHpBfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLnRyaW1tZWRSb3dzTWFwPW51bGx9aXNFbmFi'@;
put 'bGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pBXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIsbmV3IG15KSx0aGlzLnRyaW1tZWRSb3dzTWFw'@;
put 'LmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnRoaXMub25NYXBJbml0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbekFdO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhp'@;
put 'cy50cmltbWVkUm93c01hcC5jbGVhcigpLERuKGwsYT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgidHJpbVJv'@;
put 'd3MiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0VHJpbW1lZFJvd3MoKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRUcmltbWVkSW5kZXhlcygpfXRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7'@;
put 'ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRyaW1Sb3ciLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxfPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgo'@;
put 'XywhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclRyaW1Sb3ciLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9dHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudHJp'@;
put 'bVJvd3MoYSl9dW50cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9dGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgpLF89bC5sZW5ndGg+MDtkJiZfJiYoRG4obCxXPT57ZltX'@;
put 'XT0hMX0pLGg9QWwoZiwoVyxpZSxnZSk9PihpZSYmVy5wdXNoKGdlKSxXKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVudHJpbVJvdyIsYSxoLGQmJl8pJiYoZCYmXyYmdGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVy'@;
put 'VW50cmltUm93IixhLGgsZCYmXyxkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXVudHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudW50cmltUm93cyhhKX1pc1RyaW1tZWQobCl7cmV0dXJu'@;
put 'IHRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGwpfHwhMX11bnRyaW1BbGwoKXt0aGlzLnVudHJpbVJvd3ModGhpcy5nZXRUcmltbWVkUm93cygpKX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7cmV0dXJuIGwuZXZlcnkoZD0+'@;
put 'TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1vbk1hcEluaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbekFdO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxhPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0'@;
put 'SW5kZXgoYSwhMCl9KX0sITApfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHRvKGMpe2NvbnN0IGw9dGhpczt0aGlzLmluc3RhbmNlPWMsdGhpcy5kb25lQWN0aW9ucz1bXSx0aGlzLnVuZG9uZUFjdGlvbnM9W10sdGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMuZW5h'@;
put 'YmxlZD0hMSxjLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbihhLGQpe2NvbnN0IGg9YSYmYS5sZW5ndGg7aCYmYS5maW5kKFQ9Pntjb25zdFssLFcsaWVdPVQ7cmV0dXJuIFchPT1pZX0pJiZsLmRvbmUoKCk9Pntjb25zdCBUPWEucmVkdWNlKChpZSxnZSk9PihpZS5wdXNoKFsuLi5n'@;
put 'ZV0pLGllKSxbXSk7RG4oVCxpZT0+e2llWzFdPWMucHJvcFRvQ29sKGllWzFdKX0pO2NvbnN0IFc9aD4xP3RoaXMuZ2V0U2VsZWN0ZWQoKTpbW1RbMF1bMF0sVFswXVsxXV1dO3JldHVybiBuZXcgdG8uQ2hhbmdlQWN0aW9uKFQsVyl9LGQpfSksYy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIs'@;
put 'KGEsZCxoKT0+e2wuZG9uZSgoKT0+bmV3IHRvLkNyZWF0ZVJvd0FjdGlvbihhLGQpLGgpfSksYy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLChhLGQsaCxmKT0+e2wuZG9uZSgoKT0+e2NvbnN0IFQ9Yy50b1BoeXNpY2FsUm93KGEpLFc9eXUobC5pbnN0YW5jZS5nZXRTb3VyY2VEYXRhKFQs'@;
put 'MCxUK2QtMSxsLmluc3RhbmNlLmNvdW50U291cmNlQ29scygpLTEpKTtyZXR1cm4gbmV3IHRvLlJlbW92ZVJvd0FjdGlvbihULFcsYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSxjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLGMucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1Nl'@;
put 'cXVlbmNlKCkpfSxmKX0pLGMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChhLGQsaCk9PntsLmRvbmUoKCk9Pm5ldyB0by5DcmVhdGVDb2x1bW5BY3Rpb24oYSxkKSxoKX0pLGMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIiwoYSxkLGgsZik9PntsLmRvbmUoKCk9Pntjb25zdCBUPWwuaW5z'@;
put 'dGFuY2UuZ2V0U291cmNlRGF0YUFycmF5KCksVz0obC5pbnN0YW5jZS5jb3VudENvbHMoKSthKSVsLmluc3RhbmNlLmNvdW50Q29scygpLGllPVtdLGdlPVtdLHdlPVtdO3ZvKFQubGVuZ3RoLTEsb3Q9Pntjb25zdCBldD1bXSx5dD1UW290XTt2byhXLFcrKGQtMSksa3Q9PntldC5wdXNoKHl0'@;
put 'W2MudG9QaHlzaWNhbENvbHVtbihrdCldKX0pLGllLnB1c2goZXQpfSksdm8oZC0xLG90PT57d2UucHVzaChjLnRvUGh5c2ljYWxDb2x1bW4oVytvdCkpfSksQXJyYXkuaXNBcnJheShjLmdldFNldHRpbmdzKCkuY29sSGVhZGVycykmJnZvKGQtMSxvdD0+e2dlLnB1c2goYy5nZXRTZXR0aW5n'@;
put 'cygpLmNvbEhlYWRlcnNbYy50b1BoeXNpY2FsQ29sdW1uKFcrb3QpXXx8bnVsbCl9KTtjb25zdCBFZT1jLmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLFplPWMucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7cmV0dXJuIG5ldyB0by5SZW1vdmVDb2x1'@;
put 'bW5BY3Rpb24oVyx3ZSxpZSxnZSxFZSxaZSxjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpfSxmKX0pLGMuYWRkSG9vaygiYmVmb3JlQ2VsbEFsaWdubWVudCIsKGEsZCxoLGYpPT57bC5kb25lKCgpPT5uZXcgdG8uQ2VsbEFsaWdubWVudEFjdGlvbihhLGQsaCxmKSl9KSxjLmFk'@;
put 'ZEhvb2soImJlZm9yZUZpbHRlciIsYT0+e2wuZG9uZSgoKT0+bmV3IHRvLkZpbHRlcnNBY3Rpb24oYSkpfSksYy5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoYSxkKT0+eyExIT09YSYmbC5kb25lKCgpPT5uZXcgdG8uUm93TW92ZUFjdGlvbihhLGQpKX0pLGMuYWRkSG9vaygiYmVmb3JlTWVy'@;
put 'Z2VDZWxscyIsKGEsZCk9PntkfHxsLmRvbmUoKCk9Pm5ldyB0by5NZXJnZUNlbGxzQWN0aW9uKGMsYSkpfSksYy5hZGRIb29rKCJhZnRlclVubWVyZ2VDZWxscyIsKGEsZCk9PntkfHxsLmRvbmUoKCk9Pm5ldyB0by5Vbm1lcmdlQ2VsbHNBY3Rpb24oYyxhKSl9KSxjLmFkZEhvb2soImFmdGVy'@;
put 'SW5pdCIsKCk9PntsLmluaXQoKX0pfWZ1bmN0aW9uIElvZShjLGwpe2lmKCJsb2FkRGF0YSI9PT1sKXJldHVybiB0aGlzLnVuZG9SZWRvLmNsZWFyKCl9dG8ucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oYyxsKXtpZih0aGlzLmlnbm9yZU5ld0FjdGlvbnN8fCJVbmRvUmVkby51bmRvIj09PWx8'@;
put 'fCJVbmRvUmVkby5yZWRvIj09PWx8fCJhdXRvIj09PWwpcmV0dXJuO2NvbnN0IGQ9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO2lmKCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixkLGwpKXJldHVybjtjb25zdCBmPWMoKSxfPXRoaXMudW5kb25l'@;
put 'QWN0aW9ucy5zbGljZSgpO3RoaXMuZG9uZUFjdGlvbnMucHVzaChmKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsZCx0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsXyks'@;
put 'dGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixfLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKX0sdG8ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oKXtpZih0aGlzLmlzVW5kb0F2YWlsYWJsZSgpKXtjb25z'@;
put 'dCBjPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGMpO2NvbnN0IGw9dGhpcy5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsYyx0aGlzLmRv'@;
put 'bmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IGE9eXUobCk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvIixhKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGg9dGhpcyxmPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaW5zdGFu'@;
put 'Y2UucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsZiksbC51bmRvKHRoaXMuaW5zdGFuY2UsKCk9PntoLmlnbm9yZU5ld0FjdGlvbnM9ITEsaC51bmRvbmVBY3Rpb25zLnB1c2gobCl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsZix0aGlz'@;
put 'LnVuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJVbmRvIixhKX19LHRvLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1JlZG9BdmFpbGFibGUoKSl7Y29uc3QgYz10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3Rh'@;
put 'bmNlLnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGMpO2NvbnN0IGw9dGhpcy51bmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixjLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBhPXl1KGwpO2lm'@;
put 'KCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVkbyIsYSkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBoPXRoaXMsZj10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixm'@;
put 'KSxsLnJlZG8odGhpcy5pbnN0YW5jZSwoKT0+e2guaWdub3JlTmV3QWN0aW9ucz0hMSxoLmRvbmVBY3Rpb25zLnB1c2gobCl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsZix0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaW5zdGFuY2UucnVu'@;
put 'SG9va3MoImFmdGVyUmVkbyIsYSl9fSx0by5wcm90b3R5cGUuaXNVbmRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPjB9LHRvLnByb3RvdHlwZS5pc1JlZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmRvbmVBY3Rpb25zLmxl'@;
put 'bmd0aD4wfSx0by5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MH0sdG8ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuYWJsZWR9LHRvLnByb3RvdHlwZS5lbmFi'@;
put 'bGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXJldHVybjtjb25zdCBjPXRoaXMuaW5zdGFuY2U7dGhpcy5lbmFibGVkPSEwLGZ1bmN0aW9uIExOZShjKXtjLnVuZG89ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby51bmRvKCl9LGMucmVkbz1mdW5jdGlvbigpe3JldHVybiBj'@;
put 'LnVuZG9SZWRvLnJlZG8oKX0sYy5pc1VuZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5pc1VuZG9BdmFpbGFibGUoKX0sYy5pc1JlZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5pc1JlZG9BdmFpbGFibGUoKX0sYy5jbGVhclVuZG89ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5jbGVhcigpfX0oYyksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLGMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLElvZSl9LHRvLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFbmFibGVkKCkpcmV0dXJuO2NvbnN0IGM9dGhp'@;
put 'cy5pbnN0YW5jZTt0aGlzLmVuYWJsZWQ9ITEsZnVuY3Rpb24gUk5lKGMpe2RlbGV0ZSBjLnVuZG8sZGVsZXRlIGMucmVkbyxkZWxldGUgYy5pc1VuZG9BdmFpbGFibGUsZGVsZXRlIGMuaXNSZWRvQXZhaWxhYmxlLGRlbGV0ZSBjLmNsZWFyVW5kb30oYyksdGhpcy51bnJlZ2lzdGVyU2hvcnRj'@;
put 'dXRzKCksYy5yZW1vdmVIb29rKCJhZnRlckNoYW5nZSIsSW9lKX0sdG8ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCksdGhpcy5pbnN0YW5jZT1udWxsLHRoaXMuZG9uZUFjdGlvbnM9bnVsbCx0aGlzLnVuZG9uZUFjdGlvbnM9bnVsbH0sKHRvLkFjdGlvbj1mdW5j'@;
put 'dGlvbigpe30pLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKCl7fSx0by5BY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oKXt9LHRvLkNoYW5nZUFjdGlvbj1mdW5jdGlvbihjLGwpe3RoaXMuY2hhbmdlcz1jLHRoaXMuc2VsZWN0ZWQ9bCx0aGlzLmFjdGlvblR5cGU9ImNoYW5nZSJ9LHpm'@;
put 'KHRvLkNoYW5nZUFjdGlvbix0by5BY3Rpb24pLHRvLkNoYW5nZUFjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9eXUodGhpcy5jaGFuZ2VzKSxkPWMuY291bnRFbXB0eVJvd3MoITApLGg9Yy5jb3VudEVtcHR5Q29scyghMCk7Zm9yKGxldCBmPTAsXz1hLmxlbmd0'@;
put 'aDtmPF87ZisrKWFbZl0uc3BsaWNlKDMsMSk7Yy5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGwpLGMuc2V0RGF0YUF0Q2VsbChhLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpO2ZvcihsZXQgZj0wLF89YS5sZW5ndGg7ZjxfO2YrKyl7Y29uc3RbVCxXXT1hW2ZdO2MuZ2V0U2V0dGluZ3Mo'@;
put 'KS5taW5TcGFyZVJvd3MmJlQrMStjLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzPT09Yy5jb3VudFJvd3MoKSYmZD09PWMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3MmJihjLmFsdGVyKCJyZW1vdmVfcm93IixwYXJzZUludChUKzEsMTApLGMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJv'@;
put 'd3MpLGMudW5kb1JlZG8uZG9uZUFjdGlvbnMucG9wKCkpLGMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMmJlcrMStjLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzPT09Yy5jb3VudENvbHMoKSYmaD09PWMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMmJihjLmFsdGVyKCJyZW1vdmVf'@;
put 'Y29sIixwYXJzZUludChXKzEsMTApLGMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMpLGMudW5kb1JlZG8uZG9uZUFjdGlvbnMucG9wKCkpfWMuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9LHRvLkNoYW5nZUFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2Nv'@;
put 'bnN0IGE9eXUodGhpcy5jaGFuZ2VzKTtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspYVtkXS5zcGxpY2UoMiwxKTtjLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsbCksYy5zZXREYXRhQXRDZWxsKGEsbnVsbCxudWxsLCJVbmRvUmVkby5yZWRvIiksdGhpcy5zZWxlY3RlZCYmYy5z'@;
put 'ZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKX0sdG8uQ3JlYXRlUm93QWN0aW9uPWZ1bmN0aW9uKGMsbCl7dGhpcy5pbmRleD1jLHRoaXMuYW1vdW50PWwsdGhpcy5hY3Rpb25UeXBlPSJpbnNlcnRfcm93In0semYodG8uQ3JlYXRlUm93QWN0aW9uLHRvLkFjdGlvbiksdG8uQ3JlYXRl'@;
put 'Um93QWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmNvdW50Um93cygpLGQ9Yy5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93czt0aGlzLmluZGV4Pj1hJiZ0aGlzLmluZGV4LWQ8YSYmKHRoaXMuaW5kZXgtPWQpLGMuYWRkSG9va09uY2UoImFmdGVyUmVtb3Zl'@;
put 'Um93IixsKSxjLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9LHRvLkNyZWF0ZVJvd0FjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlUm93IixsKSxjLmFsdGVyKCJpbnNl'@;
put 'cnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9LHRvLlJlbW92ZVJvd0FjdGlvbj1mdW5jdGlvbihjLGwsYSxkLGgpe3RoaXMuaW5kZXg9Yyx0aGlzLmRhdGE9bCx0aGlzLmFjdGlvblR5cGU9InJlbW92ZV9yb3ciLHRoaXMuZml4ZWRSb3dzQm90'@;
put 'dG9tPWEsdGhpcy5maXhlZFJvd3NUb3A9ZCx0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZT1ofSx6Zih0by5SZW1vdmVSb3dBY3Rpb24sdG8uQWN0aW9uKSx0by5SZW1vdmVSb3dBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPWMuZ2V0U2V0dGluZ3MoKSxkPVtdO2Eu'@;
put 'Zml4ZWRSb3dzQm90dG9tPXRoaXMuZml4ZWRSb3dzQm90dG9tLGEuZml4ZWRSb3dzVG9wPXRoaXMuZml4ZWRSb3dzVG9wLHRoaXMuZGF0YS5mb3JFYWNoKChoLGYpPT57T2JqZWN0LmtleXMoaCkuZm9yRWFjaChfPT57Y29uc3QgVD1wYXJzZUludChfLDEwKTtkLnB1c2goW3RoaXMuaW5kZXgr'@;
put 'Zixpc05hTihUKT9fOlQsaFtfXV0pfSl9KSxjLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMuc2V0U291cmNlRGF0YUF0Q2VsbChkLG51bGwsbnVs'@;
put 'bCwiVW5kb1JlZG8udW5kbyIpLGMucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKX0sdG8uUmVtb3ZlUm93QWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Yy5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGwpLGMu'@;
put 'YWx0ZXIoInJlbW92ZV9yb3ciLHRoaXMuaW5kZXgsdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8ucmVkbyIpfSx0by5DcmVhdGVDb2x1bW5BY3Rpb249ZnVuY3Rpb24oYyxsKXt0aGlzLmluZGV4PWMsdGhpcy5hbW91bnQ9bCx0aGlzLmFjdGlvblR5cGU9Imluc2VydF9jb2wifSx6Zih0by5D'@;
put 'cmVhdGVDb2x1bW5BY3Rpb24sdG8uQWN0aW9uKSx0by5DcmVhdGVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsbCksYy5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1Jl'@;
put 'ZG8udW5kbyIpfSx0by5DcmVhdGVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZUNvbCIsbCksYy5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfSx0'@;
put 'by5SZW1vdmVDb2x1bW5BY3Rpb249ZnVuY3Rpb24oYyxsLGEsZCxoLGYsXyl7dGhpcy5pbmRleD1jLHRoaXMuaW5kZXhlcz1sLHRoaXMuZGF0YT1hLHRoaXMuYW1vdW50PXRoaXMuZGF0YVswXS5sZW5ndGgsdGhpcy5oZWFkZXJzPWQsdGhpcy5jb2x1bW5Qb3NpdGlvbnM9aC5zbGljZSgwKSx0'@;
put 'aGlzLnJvd1Bvc2l0aW9ucz1mLnNsaWNlKDApLHRoaXMuYWN0aW9uVHlwZT0icmVtb3ZlX2NvbCIsdGhpcy5maXhlZENvbHVtbnNTdGFydD1ffSx6Zih0by5SZW1vdmVDb2x1bW5BY3Rpb24sdG8uQWN0aW9uKSx0by5SZW1vdmVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24o'@;
put 'YyxsKXtjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5maXhlZENvbHVtbnNTdGFydDtjb25zdCBkPXRoaXMuaW5kZXhlcy5zbGljZSgwKS5zb3J0KCksaD0oaWUsZ2Usd2UpPT53ZVt0aGlzLmluZGV4ZXMuaW5kZXhPZihkW2dlXSldLGY9dGhpcy5kYXRhLmxlbmd0aCxf'@;
put 'PVtdO2ZvcihsZXQgaWU9MDtpZTxmO2llKyspXy5wdXNoKGNzKHRoaXMuZGF0YVtpZV0saCkpO2NvbnN0IFQ9Y3ModGhpcy5oZWFkZXJzLGgpLFc9W107Yy5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRleGVzWzBdLHRoaXMuaW5kZXhlcy5sZW5ndGgsIlVuZG9SZWRvLnVuZG8i'@;
put 'KSxEbihjLmdldFNvdXJjZURhdGFBcnJheSgpLChpZSxnZSk9PntEbihkLCh3ZSxFZSk9PntpZVt3ZV09X1tnZV1bRWVdLFcucHVzaChbZ2Usd2UsaWVbd2VdXSl9KX0pLGMuc2V0U291cmNlRGF0YUF0Q2VsbChXLHZvaWQgMCx2b2lkIDAsIlVuZG9SZWRvLnVuZG8iKSx0eXBlb2YgdGhpcy5o'@;
put 'ZWFkZXJzPCJ1IiYmRG4oVCwoaWUsZ2UpPT57Yy5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbZFtnZV1dPWllfSksYy5iYXRjaEV4ZWN1dGlvbigoKT0+e2Mucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93UG9zaXRpb25zKSxjLmNvbHVtbkluZGV4TWFwcGVyLnNl'@;
put 'dEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmNvbHVtblBvc2l0aW9ucyl9LCEwKSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMucmVuZGVyKCl9LHRvLlJlbW92ZUNvbHVtbkFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9va09uY2UoImFmdGVyUmVt'@;
put 'b3ZlQ29sIixsKSxjLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9LHRvLkNlbGxBbGlnbm1lbnRBY3Rpb249ZnVuY3Rpb24oYyxsLGEsZCl7dGhpcy5zdGF0ZUJlZm9yZT1jLHRoaXMucmFuZ2U9bCx0aGlzLnR5cGU9YSx0aGlzLmFs'@;
put 'aWdubWVudD1kfSx0by5DZWxsQWxpZ25tZW50QWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7RG4odGhpcy5yYW5nZSxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZjLnNldENlbGxNZXRhKGQsaCwiY2xhc3NOYW1lIix0aGlzLnN0YXRlQmVmb3JlW2RdW2hdfHwi'@;
put 'IGh0TGVmdCIpfSl9KSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMucmVuZGVyKCl9LHRvLkNlbGxBbGlnbm1lbnRBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtLcCh0aGlzLnJhbmdlLHRoaXMudHlwZSx0aGlzLmFsaWdubWVudCwoYSxkKT0+Yy5nZXRD'@;
put 'ZWxsTWV0YShhLGQpLChhLGQsaCxmKT0+Yy5zZXRDZWxsTWV0YShhLGQsaCxmKSksYy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxjLnJlbmRlcigpfSx0by5GaWx0ZXJzQWN0aW9uPWZ1bmN0aW9uKGMpe3RoaXMuY29uZGl0aW9uc1N0YWNrPWMsdGhpcy5hY3Rpb25UeXBlPSJm'@;
put 'aWx0ZXIifSx6Zih0by5GaWx0ZXJzQWN0aW9uLHRvLkFjdGlvbiksdG8uRmlsdGVyc0FjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQbHVnaW4oImZpbHRlcnMiKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGEuY29uZGl0aW9uQ29s'@;
put 'bGVjdGlvbi5pbXBvcnRBbGxDb25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrLnNsaWNlKDAsdGhpcy5jb25kaXRpb25zU3RhY2subGVuZ3RoLTEpKSxhLmZpbHRlcigpfSx0by5GaWx0ZXJzQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmdldFBsdWdp'@;
put 'bigiZmlsdGVycyIpO2MuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYS5jb25kaXRpb25Db2xsZWN0aW9uLmltcG9ydEFsbENvbmRpdGlvbnModGhpcy5jb25kaXRpb25zU3RhY2spLGEuZmlsdGVyKCl9LHRvLk1lcmdlQ2VsbHNBY3Rpb249Y2xhc3MgRE5lIGV4dGVuZHMgdG8u'@;
put 'QWN0aW9ue2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmNlbGxSYW5nZT1hO2NvbnN0IGQ9dGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSxoPXRoaXMuY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmFuZ2VEYXRhPWwuZ2V0RGF0YShkLnJvdyxkLmNv'@;
put 'bCxoLnJvdyxoLmNvbCl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKTtjb25zdCBoPXRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29y'@;
put 'bmVyKCk7bC5wb3B1bGF0ZUZyb21BcnJheShoLnJvdyxoLmNvbCx0aGlzLnJhbmdlRGF0YSx2b2lkIDAsdm9pZCAwLCJNZXJnZUNlbGxzIil9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubWVy'@;
put 'Z2VSYW5nZSh0aGlzLmNlbGxSYW5nZSl9fSx0by5Vbm1lcmdlQ2VsbHNBY3Rpb249Y2xhc3MgSU5lIGV4dGVuZHMgdG8uQWN0aW9ue2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmNlbGxSYW5nZT1hfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5h'@;
put 'ZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNl'@;
put 'bGxSYW5nZSwhMCksbC5yZW5kZXIoKX19LHRvLlJvd01vdmVBY3Rpb249ZnVuY3Rpb24oYyxsKXt0aGlzLnJvd3M9Yy5zbGljZSgpLHRoaXMuZmluYWxJbmRleD1sLHRoaXMuYWN0aW9uVHlwZT0icm93X21vdmUifSx6Zih0by5Sb3dNb3ZlQWN0aW9uLHRvLkFjdGlvbiksdG8uUm93TW92ZUFj'@;
put 'dGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKSxkPVtdLmNvbmNhdCh0aGlzLnJvd3MpLGg9ZC5maWx0ZXIoVD0+VD50aGlzLmZpbmFsSW5kZXgpLGY9ZC5maWx0ZXIoVD0+VDw9dGhpcy5maW5hbEluZGV4KSxfPWgu'@;
put 'c29ydCgoVCxXKT0+Vy1UKS5jb25jYXQoZi5zb3J0KChULFcpPT5ULVcpKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpO2ZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7VCs9MSl7Y29uc3QgVz1jLnRvVmlzdWFsUm93KF9bVF0pO2EubW92ZVJvdyhXLF9bVF0pfWMucmVuZGVyKCks'@;
put 'Yy5kZXNlbGVjdENlbGwoKSxjLnNlbGVjdFJvd3ModGhpcy5yb3dzWzBdLHRoaXMucm93c1swXSt0aGlzLnJvd3MubGVuZ3RoLTEpfSx0by5Sb3dNb3ZlQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpO2MuYWRk'@;
put 'SG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYS5tb3ZlUm93cyh0aGlzLnJvd3Muc2xpY2UoKSx0aGlzLmZpbmFsSW5kZXgpLGMucmVuZGVyKCksYy5kZXNlbGVjdENlbGwoKSxjLnNlbGVjdFJvd3ModGhpcy5maW5hbEluZGV4LHRoaXMuZmluYWxJbmRleCt0aGlzLnJvd3MubGVuZ3Ro'@;
put 'LTEpfSx0by5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2NvbnN0IGM9dGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnVuZG8sbD10eXBlb2YgYz4idSJ8fGM7dGhpcy5pbnN0YW5jZS51bmRvUmVkb3x8KHRoaXMuaW5zdGFuY2UudW5kb1JlZG89dGhpcyksbD90aGlzLmluc3RhbmNlLnVu'@;
put 'ZG9SZWRvLmVuYWJsZSgpOnRoaXMuaW5zdGFuY2UudW5kb1JlZG8uZGlzYWJsZSgpfSx0by5wcm90b3R5cGUucmVnaXN0ZXJTaG9ydGN1dHM9ZnVuY3Rpb24oKXt0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlz'@;
put 'OltbIkNvbnRyb2wvTWV0YSIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnVuZG8oKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMucmVkbygpfX1dLHtydW5Pbmx5SWY6aD0+IWguYWx0S2V5LGdy'@;
put 'b3VwOiJ1bmRvUmVkbyJ9KX0sdG8ucHJvdG90eXBlLnVucmVnaXN0ZXJTaG9ydGN1dHM9ZnVuY3Rpb24oKXt0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKCJ1bmRvUmVkbyIpfTtjb25zdCBldz1zby5n'@;
put 'ZXRTaW5nbGV0b24oKTtldy5hZGQoImFmdGVyVXBkYXRlU2V0dGluZ3MiLGZ1bmN0aW9uKCl7dmFyIGM7bnVsbD09PShjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpKXx8dm9pZCAwPT09Y3x8Yy5pbml0KCl9KSxldy5yZWdpc3RlcigiYmVmb3JlVW5kbyIpLGV3LnJlZ2lzdGVyKCJhZnRl'@;
put 'clVuZG8iKSxldy5yZWdpc3RlcigiYmVmb3JlUmVkbyIpLGV3LnJlZ2lzdGVyKCJhZnRlclJlZG8iKSx0by5QTFVHSU5fS0VZPSJ1bmRvUmVkbyIsdG8uU0VUVElOR19LRVlTPSEwO2NvbnN0IE9OZT10bztmdW5jdGlvbiBGeigpeyhmdW5jdGlvbiBfSWUoKXtSMCh2NyksUjAoWEIpLFIwKEpu'@;
put 'ZSksUjAobnJlKSxSMChKQiksUjAocUIpLFIwKHJyZSksUjAoaXJlKSxSMChtSWUpLFIwKGtnKSxSMChzcmUpfSkoKSxmdW5jdGlvbiBSSWUoKXtwaChiNykscGgoTXkpLHBoKHRqKSxwaChlaikscGgocmopLHBoKGlqKSxwaCgkcCkscGgob2opfSgpLGZ1bmN0aW9uIEJJZSgpe2E3KEV5KSxh'@;
put 'NyhZayksYTcoc2opLGE3KFdrKX0oKSxmdW5jdGlvbiBxSWUoKXtiMihqSWUpLGIyKHpJZSksYjIoVUllKSxiMihaSWUpLGIyKFlJZSksYjIoV0llKSxiMihHSWUpLGIyKEduZSksYjIoJEllKX0oKSxmdW5jdGlvbiBQTmUoKXtqcyhBeSksanModUxlKSxqcyhUeSksanMoTUxlKSxqcyhSTGUp'@;
put 'LGpzKE9yZSksanMoYVJlKSxqcyhTUmUpLGpzKFpSZSksanMoZk9lKSxqcyhET2UpLGpzKExPZSksanMoT09lKSxqcyhHT2UpLGpzKHpQZSksanModkZlKSxqcyhNRmUpLGpzKElGZSksanMoUEZlKSxqcyhaRmUpLGpzKFdGZSksanModEhlKSxqcyhySGUpLGpzKGhIZSksanMoX0hlKSxqcyh3'@;
put 'SGUpLGpzKHJOZSksanMocE5lKSxqcyhfTmUpLGpzKFNOZSksanMoRU5lKSxqcyhBTmUpLGpzKE9OZSl9KCl9bGV0IEMyPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAy'@;
put 'NzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgpLFY3PSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbYVAs'@;
put 'bFBdLGltcG9ydHM6W29vLCRsLGRjLF91LEMyXX0pLGN9KSgpLHR3PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgp'@;
put 'LExvZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbywkbF19KSxjfSkoKSxCNz0oKCk9PntjbGFzcyBje31yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbywkbCxfdSxkYyxWNyx0dyxDMixMb2VdfSksY30pKCk7dmFyIEh6LE56LFZ6LEJ6LGp6LEdjPUYoODM0MTcpLHQzPUYoMTIw'@;
put 'NzApO2NsYXNzIFJvZXtjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W119YWRkVG9RdWV1ZShsKXt0aGlzLnF1ZXVlLnB1c2goLi4ubCl9fUZ6KCksZnVuY3Rpb24gRk5lKGMpe2NvbnN0IGw9ISh0eXBlb2Ygd2luZG93PiJ1IikmJndpbmRvdy5qUXVlcnk7bCYmKGwuZm4uaGFuZHNvbnRhYmxl'@;
put 'PWZ1bmN0aW9uKGEpe2NvbnN0IGQ9dGhpcy5maXJzdCgpO2xldCBmLGg9ZC5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IGllPWF8fHt9O3JldHVybiBoP2gudXBkYXRlU2V0dGluZ3MoaWUpOihoPW5ldyBjLkNvcmUoZFswXSxpZSksZC5kYXRhKCJo'@;
put 'YW5kc29udGFibGUiLGgpLGguaW5pdCgpKSxkfWlmKGgpe2lmKCEodHlwZW9mIGhbYV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7YX1gKTtmb3IodmFyIF89YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheShfPjE/Xy0xOjAp'@;
put 'LFc9MTtXPF87VysrKVRbVy0xXT1hcmd1bWVudHNbV107Zj1oW2FdLmNhbGwoaCwuLi5UKSwiZGVzdHJveSI9PT1hJiZkLnJlbW92ZURhdGEoKX1yZXR1cm4gZn0pfShtcyksbXMuX19HaG9zdFRhYmxlPWxqLG1zLl9nZXRMaXN0ZW5lcnNDb3VudGVyPWZ1bmN0aW9uIGxrZSgpe3JldHVybiBn'@;
put 'a30sbXMuX2dldFJlZ2lzdGVyZWRNYXBzQ291bnRlcj1mdW5jdGlvbiBNVGUoKXtyZXR1cm4gcFZ9LG1zLkV2ZW50TWFuYWdlcj1sbDtjb25zdCBITmU9W2FlLFIsaixCLEUsTSx4LGssTyxtLHosSV0sTk5lPVtsZSxLXTttcy5oZWxwZXI9e30sbXMuZG9tPXt9LERuKEhOZSxjPT57RG4oT2Jq'@;
put 'ZWN0LmdldE93blByb3BlcnR5TmFtZXMoYyksbD0+eyJfIiE9PWwuY2hhckF0KDApJiYobXMuaGVscGVyW2xdPWNbbF0pfSl9KSxEbihOTmUsYz0+e0RuKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKG1zLmRvbVtsXT1jW2xdKX0pfSksbXMu'@;
put 'Y2VsbFR5cGVzPW51bGwhPT0oSHo9bXMuY2VsbFR5cGVzKSYmdm9pZCAwIT09SHo/SHo6e30sRG4oVERlKCksYz0+e21zLmNlbGxUeXBlc1tjXT1VQihjKX0pLG1zLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlPWIyLG1zLmNlbGxUeXBlcy5nZXRDZWxsVHlwZT1VQixtcy5lZGl0b3JzPW51'@;
put 'bGwhPT0oTno9bXMuZWRpdG9ycykmJnZvaWQgMCE9PU56P056Ont9LERuKGlrZSgpLGM9Pnttcy5lZGl0b3JzW2Ake2J1KGMpfUVkaXRvcmBdPXBrKGMpfSksbXMuZWRpdG9ycy5yZWdpc3RlckVkaXRvcj1SMCxtcy5lZGl0b3JzLmdldEVkaXRvcj1wayxtcy5yZW5kZXJlcnM9bnVsbCE9PShW'@;
put 'ej1tcy5yZW5kZXJlcnMpJiZ2b2lkIDAhPT1Wej9Wejp7fSxEbihNa2UoKSxjPT57Y29uc3QgbD1iayhjKTsiYmFzZSI9PT1jJiYobXMucmVuZGVyZXJzLmNlbGxEZWNvcmF0b3I9bCksbXMucmVuZGVyZXJzW2Ake2J1KGMpfVJlbmRlcmVyYF09bH0pLG1zLnJlbmRlcmVycy5yZWdpc3RlclJl'@;
put 'bmRlcmVyPXBoLG1zLnJlbmRlcmVycy5nZXRSZW5kZXJlcj1iayxtcy52YWxpZGF0b3JzPW51bGwhPT0oQno9bXMudmFsaWRhdG9ycykmJnZvaWQgMCE9PUJ6P0J6Ont9LERuKGtrZSgpLGM9Pnttcy52YWxpZGF0b3JzW2Ake2J1KGMpfVZhbGlkYXRvcmBdPUZOKGMpfSksbXMudmFsaWRhdG9y'@;
put 'cy5yZWdpc3RlclZhbGlkYXRvcj1hNyxtcy52YWxpZGF0b3JzLmdldFZhbGlkYXRvcj1GTixtcy5wbHVnaW5zPW51bGwhPT0oano9bXMucGx1Z2lucykmJnZvaWQgMCE9PWp6P2p6Ont9LERuKFBOKCksYz0+e21zLnBsdWdpbnNbY109dXkoYyl9KSxtcy5wbHVnaW5zW2Ake2J1KFpzLlBMVUdJ'@;
put 'Tl9LRVkpfVBsdWdpbmBdPVpzLG1zLnBsdWdpbnMucmVnaXN0ZXJQbHVnaW49anMsbXMucGx1Z2lucy5nZXRQbHVnaW49dXk7Y29uc3QgVk5lPW1zLHp6PShjLGwsYSk9Pntmb3IobGV0IGQgb2YgYyl7Y29uc3QgaD1sLmZpbmQoXz0+Xy5kYXRhPT09ZC5OQU1FKSxmPWEudmFyc1tkLk5BTUVd'@;
put 'O2YmJihkLlRZUEU9WyJEQVRFIiwiREFURVRJTUUiLCJUSU1FIl0uaW5jbHVkZXMoZC5ERFRZUEUpPyJudW0iOmYudHlwZSksaCYmZC5ERVNDJiYoaC5kZXNjPWQuREVTQyksaCYmZi5sZW5ndGgmJihoLmxlbmd0aD1wYXJzZUludChmLmxlbmd0aCkpLGgmJmQuQ0xTX1JVTEUmJihoLmNsc1J1'@;
put 'bGU9ZC5DTFNfUlVMRSl9cmV0dXJuIGx9O2Z1bmN0aW9uIFV6KGMsbCl7aWYobnVsbD09Y3x8IWlzTmFOKGMpJiZpc0Zpbml0ZShjKSlyZXR1cm4gbCYmbCghMCksITA7Y29uc3QgYT0oMCx0My5pc1NwZWNpYWxNaXNzaW5nKShjKTtyZXR1cm4gbCYmbChhKSxhfWNvbnN0IE9vZT17Q0FTRToo'@;
put 'YyxsKT0+e3N3aXRjaChsKXtjYXNlIlVQQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO2Nhc2UiTE9XQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmlu'@;
put 'Y2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfXJldHVybiEwfSxNSU5WQUw6KGMsbCk9Pntjb25zdCBhPVV6KGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4oIWF8fCFpc05hTihkKSkmJmQ+PU51bWJlcihsLnRv'@;
put 'U3RyaW5nKCkpfSxNQVhWQUw6KGMsbCk9Pntjb25zdCBhPVV6KGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4hKCFhfHwhaXNOYU4oZCkpfHxkPD1OdW1iZXIobC50b1N0cmluZygpKX0sTk9UTlVMTDooYyxsKT0+bnVsbCE9YyYmYy50b1N0cmluZygpLmxlbmd0aD4wfTt2YXIgWno9Rig0NDMx'@;
put 'Nik7Y2xhc3MgWk5le2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfKXt0aGlzLnJ1bGVzPVtdLHRoaXMuZHFydWxlcz1bXSx0aGlzLmRxZGF0YT1bXSx0aGlzLmhpZGRlbkNvbHVtbnM9W10sdGhpcy5wcmltYXJ5S2V5cz1bXSx0aGlzLmV4ZWN1dGVIb3RWYWxpZGF0b3I9KFQsVyxpZSk9Pntjb25z'@;
put 'dCBnZT17Li4uVCx2YWxpZGF0b3I6dm9pZCAwLGNvcnJlY3RGb3JtYXQ6ITEscm93OjAsY29sOjAsaW5zdGFuY2U6bmV3IFZOZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx7fSksdmlzdWFsUm93OjAsdmlzdWFsQ29sOjAscHJvcDowfTtudWxsPT1XJiYoVz0iIiksVCYmVC52YWxp'@;
put 'ZGF0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBULnZhbGlkYXRvcj9ULnZhbGlkYXRvci5jYWxsKGdlLFcsd2U9PntpZSYmaWUod2UpfSk6aWUmJmllKCExKX0sdGhpcy5zYXNwYXJhbXM9bCx0aGlzLmhvdEluc3RhbmNlPV8sdGhpcy5ydWxlcz0oYz0+e3RyeXtyZXR1cm4gSlNPTi5wYXJzZShg'@;
put 'WyR7Y31dYCl9Y2F0Y2h7cmV0dXJuW119fSkobC5DT0xUWVBFKSx0aGlzLnJ1bGVzPXp6KGQsdGhpcy5ydWxlcyxhKSx0aGlzLnJ1bGVzPShjPT57aWYoIVp6W3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKXJldHVybiBjO2ZvcihsZXQgYSBvZiBjKSJudW1lcmljIj09PWEudHlwZSYmKGEu'@;
put 'bnVtZXJpY0Zvcm1hdD17cGF0dGVybjoiMCwwIixjdWx0dXJlOndpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V9KTtyZXR1cm4gY30pKHRoaXMucnVsZXMpLHRoaXMuZHFydWxlcz1oLHRoaXMuZHFkYXRhPWYsdGhpcy5wcmltYXJ5S2V5cz1sLlBLLnNwbGl0KCIgIiksdGhpcy51cGRhdGVEcURh'@;
put 'dGEoKSx0aGlzLnNldHVwVmFsaWRhdGlvbnMoKX1nZXRSdWxlcygpe3JldHVybiB0aGlzLnJ1bGVzfWdldFJ1bGUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGVJbmRleChsKTtyZXR1cm4gdGhpcy5ydWxlc1thXX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIHRoaXMuaGlkZGVuQ29sdW1uc311'@;
put 'cGRhdGVSdWxlKGwsYSl7bGV0IGQ9dGhpcy5nZXRSdWxlSW5kZXgobCk7dGhpcy5ydWxlc1tkXT17Li4udGhpcy5ydWxlc1tkXSwuLi5hfX1yZW1vdmVSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7dGhpcy5ydWxlcy5zcGxpY2UoYSwxKX1nZXREcURldGFpbHMobCl7cmV0'@;
put 'dXJuIGw/dGhpcy5kcXJ1bGVzLmZpbHRlcihhPT5hLkJBU0VfQ09MPT09bCk6dGhpcy5kcXJ1bGVzfWlzRHFDb2wobCl7cmV0dXJuISF0aGlzLmRxcnVsZXMuZmluZChhPT5hLkJBU0VfQ09MPT09bCl9aGFzRHFSdWxlcyhsLGEsZD0hMSl7cmV0dXJuIGQ/dGhpcy5kcXJ1bGVzLmZpbHRlciho'@;
put 'PT5oLkJBU0VfQ09MPT09bCYmYS5pbmNsdWRlcyhoLlJVTEVfVFlQRSkpLmxlbmd0aD09PWEubGVuZ3RoOiEhdGhpcy5kcXJ1bGVzLmZpbmQoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKX1nZXREcURyb3Bkb3duU291cmNlKGwpe2xldCBhPVtdO3JldHVybiB0'@;
put 'aGlzLmRxcnVsZXMuZm9yRWFjaChkPT57ZC5CQVNFX0NPTC50b1N0cmluZygpPT09bC5kYXRhJiZsLmRhdGEudG9TdHJpbmcoKSYmWyJIQVJEU0VMRUNUIiwiU09GVFNFTEVDVCIsIkhBUkRTRUxFQ1RfSE9PSyIsIlNPRlRTRUxFQ1RfSE9PSyJdLmluY2x1ZGVzKGQuUlVMRV9UWVBFLnRvU3Ry'@;
put 'aW5nKCkpJiZ0aGlzLmRxZGF0YS5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWQuQkFTRV9DT0wpLmZvckVhY2goaD0+e2EucHVzaChsLnR5cGUmJiJudW1lcmljIj09PWwudHlwZT9OdW1iZXIoaC5SVUxFX0RBVEEpOmguUlVMRV9EQVRBKX0pfSksYX11cGRhdGVEcURhdGEoKXt0aGlzLmRxZGF0'@;
put 'YS5sZW5ndGg+MCYmKGM9Pntjb25zdCBsPVtdO3JldHVybiB0aGlzLmRxZGF0YS5mb3JFYWNoKGE9PntsLmluY2x1ZGVzKGEuQkFTRV9DT0wpfHxsLnB1c2goYS5CQVNFX0NPTCl9KSxsfSkoKS5mb3JFYWNoKGE9PntsZXQgZD0hMTt0aGlzLmRxcnVsZXMubGVuZ3RoPjAmJnRoaXMuZHFydWxl'@;
put 'cy5mb3JFYWNoKGg9PntoLkJBU0VfQ09MPT09YSYmKCJTT0ZUU0VMRUNUIj09PWguUlVMRV9UWVBFfHwiSEFSRFNFTEVDVCI9PT1oLlJVTEVfVFlQRSkmJihkPSEwKX0pLGR8fHRoaXMuZHFydWxlcy5wdXNoKHtCQVNFX0NPTDphLFJVTEVfVFlQRToiU09GVFNFTEVDVCIsUlVMRV9WQUxVRTph'@;
put 'LFg6MX0pfSl9c2V0dXBWYWxpZGF0aW9ucygpe2ZvcihsZXQgbD0wO2w8dGhpcy5ydWxlcy5sZW5ndGg7bCsrKXtjb25zdCBhPXRoaXMucnVsZXNbbF0uZGF0YXx8IiI7aWYoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hKXtpZih0aGlzLmlzRHFDb2woYSkpe2xldCBoPXRo'@;
put 'aXMuZ2V0RHFEcm9wZG93blNvdXJjZSh0aGlzLnJ1bGVzW2xdKTtoLmxlbmd0aD4wJiYodGhpcy5ydWxlc1tsXS5zb3VyY2U9aCx0aGlzLnJ1bGVzW2xdLnR5cGU9ImF1dG9jb21wbGV0ZSIsdGhpcy5ydWxlc1tsXS5maWx0ZXI9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVCJd'@;
put 'KSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMSksdGhpcy5oYXNE'@;
put 'cVJ1bGVzKGEsWyJIQVJEU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKGEsWyJOT1ROVUxMIl0pJiYodGhpcy5ydWxlc1tsXS5hbGxvd0VtcHR5PSExKX0idHJ1ZSI9PT10aGlzLnJ1bGVzW2xdLmNvcnJlY3RGb3JtYXQmJih0aGlzLnJ1'@;
put 'bGVzW2xdLmNvcnJlY3RGb3JtYXQ9ITApLHRoaXMuc2V0RGVmYXVsdFZhbGlkYXRvcih0aGlzLGwpLHRoaXMuc2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKX19dGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaCgwKX1zZXREZWZhdWx0VmFsaWRhdG9yKGws'@;
put 'YSl7dGhpcy5ydWxlc1thXS52YWxpZGF0b3I9ZnVuY3Rpb24oZCxoKXtjb25zdCBmPWwucnVsZXNbYV0uZGF0YT8udG9TdHJpbmcoKSxfPWwucnVsZXNbYV0udHlwZXx8IiI7bGV0IFQ9bnVsbDtyZXR1cm4iYXV0b2NvbXBsZXRlIiE9PXRoaXMuZWRpdG9yfHwobC5nZXRIYW5kc29udGFibGVW'@;
put 'YWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxkLFc9PntUPVd9KSxUKT8obC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IoXykuY2FsbCh0aGlzLGQsVz0+e1Q9V30pLFQ/bC5sZW5ndGhDaGVjayhkLGwucnVsZXNbYV0ubGVuZ3RoLF8pP2wuaXNEcUNvbChmfHwiIikmJiEoKGMs'@;
put 'bCk9Pntmb3IobGV0IGEgb2YgYylpZihPb2VbYS5SVUxFX1RZUEVdJiYhT29lW2EuUlVMRV9UWVBFXShsLGEuUlVMRV9WQUxVRSkpcmV0dXJuIGNvbnNvbGUud2FybihgRFEgSW52YWxpZCBSZWFzb246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtsfSlcblJ1bGUgVmFsdWU6ICR7YS5SVUxF'@;
put 'X1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShsLmdldERxRGV0YWlscyhmfHwiIiksZCk/KGNvbnNvbGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQg'@;
put 'aCghMSkpOnZvaWQgaCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKSk6'@;
put 'KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRvY29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSl9fWxlbmd0aENoZWNrKGwsYSxkKXtpZigoMCx0My5pc1NwZWNpYWxNaXNzaW5nKShsKXx8bnVsbD09bHx8bnVsbD09YSlyZXR1cm4h'@;
put 'MDtpZigibnVtZXJpYyI9PT1kKXtpZig4PT09YSlyZXR1cm4hMDtpZihhPDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGNvbnNvbGUud2FybigiaW52YWxpZCBsZW5ndGggZnJvbSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGludGVnZXIgYmV0d2VlbiAzLTgi'@;
put 'KSwhMTtjb25zdCBoPU51bWJlcihsKT09PWwmJmwlMSE9MDtpZihhPDgmJmgpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5ndGggbnVtZXJpY3MgY2Fubm90IGNvbnRhaW4gZGVjaW1hbHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIpLCExO3N3aXRjaChhKXtjYXNl'@;
put 'IDM6cmV0dXJuIGw8PTgxOTI7Y2FzZSA0OnJldHVybiBsPD0yMDk3MTUyO2Nhc2UgNTpyZXR1cm4gbDw9NTM2ODcwOTEyO2Nhc2UgNjpyZXR1cm4gbDw9MTM3NDM4OTUzNDcyO2Nhc2UgNzpyZXR1cm4gbDw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBsLnRvU3RyaW5nKCkubGVuZ3RoPD1hfWdl'@;
put 'dEhhbmRzb250YWJsZVZhbGlkYXRvcihsKXtzd2l0Y2gobCl7Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiBFeTtjYXNlIm51bWVyaWMiOnJldHVybiBVejtjYXNlImRhdGUiOnJldHVybiBZaztjYXNlInRpbWUiOnJldHVybiBXaztkZWZhdWx0OnJldHVybihhLGQpPT5kP2QoITApOm51bGx9'@;
put 'fWdldFJ1bGVJbmRleChsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bDp0aGlzLnJ1bGVzLmZpbmRJbmRleChhPT5hLmRhdGE9PT1sKX1zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpe2lmKCF0aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcpcmV0dXJuO2NvbnN0IGE9dGhpcy5ydWxlc1tsXTtp'@;
put 'Zih0aGlzLnByaW1hcnlLZXlzLmluY2x1ZGVzKGEuZGF0YSkmJihhLmNsc1J1bGU9IlJFQUQiKSwiSElERSI9PT1hLmNsc1J1bGUmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKGwpLCJSRUFEIj09PWEuY2xzUnVsZSYmKGEucmVhZE9ubHk9ITApLCJFRElUIj09PWEuY2xzUnVsZSl7YS5yZWFk'@;
put 'T25seT0hMTtjb25zdCBkPXRoaXMuaGlkZGVuQ29sdW1ucy5pbmRleE9mKGwpO3RoaXMuaGlkZGVuQ29sdW1ucy5zcGxpY2UoZCwxKX19fWNvbnN0IFVBPXtudW1lcmljOjAsZGVmYXVsdDoiIn0sWU5lPShjLGwpPT5jPyJhdXRvY29tcGxldGUiPT09Yz9sJiZsLnNvdXJjZT9sLnNvdXJjZVsw'@;
put 'XTpbXTpVQS5oYXNPd25Qcm9wZXJ0eShjKT9VQVtjXTpVQS5kZWZhdWx0OlVBLmRlZmF1bHQsUG9lPWM9PntsZXQgbD0oIjAiK2MuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdl'@;
put 'dFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpLGx9LFl6PWM9PmMuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoYy5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrYy5nZXREYXRlKCkpLnNsaWNlKC0yKSxXej1jPT5uZXcgRGF0ZShNYXRoLnJvdW5kKDg2NDAwKihjLTI1NTY5KSoxZTMp'@;
put 'KSwkTmU9KGMsbCk9Pntjb25zdCBhPVtdLGQ9W107cmV0dXJuIGwuZm9yRWFjaChoPT57LTE9PT1jLmluZGV4T2YoaCk/YS5wdXNoKGgpOmQucHVzaChoKX0pLFthLGRdfSxxTmU9KGMsbCxhLGQsaCxmLF8pPT4obC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxjbHItaWNvbiBz'@;
put 'aGFwZT0iZXhjbGFtYXRpb24tY2lyY2xlIiBzdGF0dXM9Indhcm5pbmciPjwvY2xyLWljb24+YCxsKSxHej0oYyxsLGEsZCxoLGYsXyk9PihsLmlubmVySFRNTD1mfHwiIixsKSxLTmU9KGMsbCxhLGQsaCxmLF8pPT4obC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxzcGFuIGNs'@;
put 'YXNzPSJzcGlubmVyIHNwaW5uZXItc20gdmVydGljYWwtYWxpZ24tbWlkZGxlIj48L3NwYW4+YCxsKSwkej1jPT4hIS9eLXswLDF9XGQrJC8udGVzdChjKSxGb2U9Yz0+ISEvXlxkK1wuXGQrJC8udGVzdChjKSxxej1mdW5jdGlvbiBKTmUoYyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBjfHxs'@;
put 'OChjKSYmIltvYmplY3QgU3ltYm9sXSI9PWk4KGMpfTt2YXIgUU5lPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGVWZT0vXlx3KiQvO2Z1bmN0aW9uIEt6KGMsbCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGN8fG51bGwhPWwmJiJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBsKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgYT1mdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50cyxoPWw/bC5hcHBseSh0aGlzLGQpOmRbMF0sZj1hLmNhY2hlO2lmKGYuaGFzKGgpKXJldHVybiBmLmdldChoKTt2YXIgXz1jLmFwcGx5KHRo'@;
put 'aXMsZCk7cmV0dXJuIGEuY2FjaGU9Zi5zZXQoaCxfKXx8ZixffTtyZXR1cm4gYS5jYWNoZT1uZXcoS3ouQ2FjaGV8fGdQKSxhfUt6LkNhY2hlPWdQO2NvbnN0IGlWZT1Lejt2YXIgbFZlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4p'@;
put 'Kj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGNWZT0vXFwoXFwpPy9nLHVWZT1mdW5jdGlvbiBzVmUoYyl7dmFyIGw9aVZlKGMsZnVuY3Rpb24oZCl7cmV0dXJuIDUwMD09PWEuc2l6ZSYmYS5jbGVhcigpLGR9KSxhPWwuY2FjaGU7cmV0dXJuIGx9KGZ1bmN0aW9uKGMp'@;
put 'e3ZhciBsPVtdO3JldHVybiA0Nj09PWMuY2hhckNvZGVBdCgwKSYmbC5wdXNoKCIiKSxjLnJlcGxhY2UobFZlLGZ1bmN0aW9uKGEsZCxoLGYpe2wucHVzaChoP2YucmVwbGFjZShjVmUsIiQxIik6ZHx8YSl9KSxsfSk7Y29uc3QgZFZlPXVWZTt2YXIgSG9lPW1wP21wLnByb3RvdHlwZTp2b2lk'@;
put 'IDAsTm9lPUhvZT9Ib2UudG9TdHJpbmc6dm9pZCAwO2NvbnN0IGdWZT1mdW5jdGlvbiBWb2UoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBjO2lmKGM4KGMpKXJldHVybiBmdW5jdGlvbiBoVmUoYyxsKXtmb3IodmFyIGE9LTEsZD1udWxsPT1jPzA6Yy5sZW5ndGgsaD1BcnJheShk'@;
put 'KTsrK2E8ZDspaFthXT1sKGNbYV0sYSxjKTtyZXR1cm4gaH0oYyxWb2UpKyIiO2lmKHF6KGMpKXJldHVybiBOb2U/Tm9lLmNhbGwoYyk6IiI7dmFyIGw9YysiIjtyZXR1cm4iMCI9PWwmJjEvYz09LTEvMD8iLTAiOmx9LGJWZT1mdW5jdGlvbiBfVmUoYyxsKXtyZXR1cm4gYzgoYyk/YzpmdW5j'@;
put 'dGlvbiB0VmUoYyxsKXtpZihjOChjKSlyZXR1cm4hMTt2YXIgYT10eXBlb2YgYztyZXR1cm4hKCJudW1iZXIiIT1hJiYic3ltYm9sIiE9YSYmImJvb2xlYW4iIT1hJiZudWxsIT1jJiYhcXooYykpfHxlVmUudGVzdChjKXx8IVFOZS50ZXN0KGMpfHxudWxsIT1sJiZjIGluIE9iamVjdChsKX0o'@;
put 'YyxsKT9bY106ZFZlKGZ1bmN0aW9uIG1WZShjKXtyZXR1cm4gbnVsbD09Yz8iIjpnVmUoYyl9KGMpKX0sQ1ZlPWZ1bmN0aW9uIHdWZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGN8fHF6KGMpKXJldHVybiBjO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSxpbD1m'@;
put 'dW5jdGlvbiB4VmUoYyxsLGEpe3ZhciBkPW51bGw9PWM/dm9pZCAwOmZ1bmN0aW9uIFNWZShjLGwpe2Zvcih2YXIgYT0wLGQ9KGw9YlZlKGwsYykpLmxlbmd0aDtudWxsIT1jJiZhPGQ7KWM9Y1tDVmUobFthKytdKV07cmV0dXJuIGEmJmE9PWQ/Yzp2b2lkIDB9KGMsbCk7cmV0dXJuIHZvaWQg'@;
put 'MD09PWQ/YTpkfTtsZXQgYmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yZXNwb25zZT1uZXcgYmUsdGhpcy5jaGFuZ2VkVGFibGU9bmV3IGJlLHRoaXMuZGV0'@;
put 'YWlscz1uZXcgYmUsdGhpcy5kaWZmcz1uZXcgYmUsdGhpcy5jb2x1bW5zPW5ldyBiZSx0aGlzLnZhbHVlcz1uZXcgYmUsdGhpcy5maWx0ZXI9bmV3IGJlLHRoaXMucXVlcnk9bmV3IGJlLHRoaXMuc3VibWl0dERldGFpbD1uZXcgYmUsdGhpcy5yZW1vdmVRdWVyeT1uZXcgYmUsdGhpcy5zZXRT'@;
put 'dWJtaXQ9bmV3IGJlLHRoaXMuc2V0U3VibWl0TGlzdD1uZXcgYmV9Y2FsbFNlcnZpY2UoYSxkLGgsZil7dmFyIF89dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Xy5saWJkcz1mO2NvbnN0IFQ9e307cmV0dXJuIFRbZF09W2FdLHtkYXRhOnlpZWxkIF8uc2FzU2VydmljZS5yZXF1ZXN0KGgs'@;
put 'VCksbGliZHM6Xy5saWJkc319KSgpfXVwZGF0ZVRhYmxlKGEsZCxoLGYsXyl7dmFyIFQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IFc9e2pzZGF0YTpkfTtpZihfKXtsZXQgZ2U9VC5wYXJzZUZvcm1hdHMoXyk7Vy4kanNkYXRhPXtmb3JtYXRzOmdlfX1yZXR1cm4gV1toXT1bYV0s'@;
put 'eWllbGQgVC5zYXNTZXJ2aWNlLnJlcXVlc3QoZixXKX0pKCl9Z2V0QXBwcm92YWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfKX0pKCl9c2VuZERldGFpbHMoYSxk'@;
put 'LGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPU9iamVjdC5hc3NpZ24oe3N1YjohMH0sYSk7Zi5zdWJtaXR0RGV0YWlsLm5leHQoe2RhdGE6aFtkXSx2aWV3RGF0YTpffSl9KSgpfWdldFN1Ym1pdHRzKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7'@;
put 'cmV0dXJuIHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHN1Ym1pdHMiLG51bGwpfSkoKX12aWV3TGlicygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKX0pKCl9'@;
put 'cmVmcmVzaExpYkluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVmcmVzaGxpYmluZm8iLHtsaWIycmVmcmVzaDpbe2xpYnJlZjphfV19KX0pKCl9dmVyc2lvbkhpc3RvcnkoYSl7dmFyIGQ9dGhpczty'@;
put 'ZXR1cm4gZmkoZnVuY3Rpb24qKCl7Y29uc3QgaD17aXdhbnQ6W3tMSUJEUzphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldHZlcnNpb25oaXN0b3J5IixoKX0pKCl9dmlld1RhYmxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXts'@;
put 'ZXQgaD17U0FTQ29udHJvbFRhYmxlOlt7TVBMSUI6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3dGFibGVzIixoKX0pKCl9dmlld0RhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxl'@;
put 'Olt7TElCRFM6YSxGSUxURVJfUks6ZH1dfTtyZXR1cm4geWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsZil9KSgpfXZpZXdEYXRhU2VhcmNoKGEsZD0hMSxoLGYpe3ZhciBfPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBXPXtTQVNDb250cm9sVGFi'@;
put 'bGU6W3tTRUFSQ0hUWVBFOmEubGVuZ3RoPjA/ZD8iTlVNIjoiQ0hBUiI6Ik5PTkUiLFNFQVJDSFZBTDphLExJQkRTOmgsRklMVEVSX1JLOmZ9XX07cmV0dXJuIHlpZWxkIF8uc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2RhdGEiLFcpfSkoKX1nZXRYTE1hcFJ1bGVzKGEpe3ZhciBk'@;
put 'PXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2dldHhsbWFwc19pbjpbe1hMTUFQX0lEOmF9XX07cmV0dXJuIHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHhsbWFwcyIsaCl9KSgpfWdldERldGFpbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZp'@;
put 'KGZ1bmN0aW9uKigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLF8pfSkoKX1zaG93RGlmZnMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZp'@;
put 'Y2UucmVxdWVzdChoLF8se3VzZUNvbXB1dGVBcGk6ITF9KX0pKCl9cmVqZWN0aW5nKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfLHt1c2VDb21wdXRlQXBpOiExfSl9'@;
put 'KSgpfWFwcHJvdmVUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e307cmV0dXJuIF9bZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsXyl9KSgpfWdldEhpc3RvcnkoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9u'@;
put 'Kigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLF8pfSkoKX1zZXRRdWVyeVZhcmlhYmxlcyhhLGQpe3RoaXMuY29sdW1ucy5uZXh0KHtkYXRhOntjb2xzOmR9LGxpYmRzOmF9KX1nZXRDaGFuZ2VJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJu'@;
put 'IGZpKGZ1bmN0aW9uKigpe2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tUQUJMRTphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGNoYW5nZWluZm8iLGYpfSkoKX1nZXRRdWVyeVZhbHVlcyhhLGQsaCxmLF8pe3ZhciBUPXRoaXM7cmV0dXJuIGZpKGZ1'@;
put 'bmN0aW9uKigpe2xldCBXPXtpd2FudDpbe2xpYmRzOmQsY29sOmEsLi4uZiYme1NUQVJUUk9XOmZ9LC4uLl8mJntST1dTOl99fV19O3JldHVybiBoLmxlbmd0aD4wJiYoVy5GSUxURVJRVUVSWT1oKSx5aWVsZCBULnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGNvbHZhbHMiLFcpLmNh'@;
put 'dGNoKGdlPT57dGhyb3cgZ2V9KX0pKCl9c2F2ZVF1ZXJ5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGY9e2l3YW50Olt7ZmlsdGVyX3RhYmxlOmF9XSxmaWx0ZXJxdWVyeTpkfSxfPXlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmFsaWRhdGVm'@;
put 'aWx0ZXIiLGYpO3JldHVybiBoLmZpbHRlci5uZXh0KF8pLF99KSgpfW9wZW5UYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgaD17aXdhbnQ6W3t0YWJsZV9pZDphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiYXVkaXRvcnMvZ2V0c3Rh'@;
put 'Z2V0YWJsZSIsaCl9KSgpfWNoZWNrT3BlcmF0b3IoYSxkLGgpe2xldCBmO3N3aXRjaChhKXtjYXNlIkJFVFdFRU4iOmQgaW5zdGFuY2VvZiBBcnJheSYmKCIiIT09ZFswXSYmIiIhPT1kWzFdP2Y9ZFswXSsiIEFORCAiK2RbMV06IiIhPT1kWzBdJiYiIj09PWRbMV0/KGRbMV09Ii4iLGY9ZFsw'@;
put 'XSsiIEFORCAiK2RbMV0pOiIiPT09ZFswXSYmIiIhPT1kWzFdPyhkWzBdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKTooZFswXT0iLiIsZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSkpO2JyZWFrO2Nhc2UiSU4iOmNhc2UiTk9UIElOIjpsZXQgVD1bXTtpZih0eXBlb2YgZDwidSIpZm9y'@;
put 'KGxldCBXPTA7VzxkLmxlbmd0aDtXKyspITA9PT1kW1ddLmNoZWNrZWQmJigiY2hhciI9PT1oPygic3RyaW5nIj09dHlwZW9mIGRbV10udmFsJiYoZFtXXS52YWw9ZFtXXS52YWwucmVwbGFjZSgiJyIsIicnIikpLFQucHVzaCgiJyIrZFtXXS52YWwrIiciKSk6KG51bGw9PT1kW1ddLnZhbCYm'@;
put 'KGRbV10udmFsPSIuIiksVC5wdXNoKGRbV10udmFsKSkpO2Q9IigiK1QrIikiO2JyZWFrO2Nhc2UiQ09OVEFJTlMiOmE9Ij8iO2JyZWFrO2Nhc2UiTk9UIEVRVUFMIjphPSJuZSJ9cmV0dXJuIm51bSI9PT1oJiZudWxsPT09ZCYmKGQ9Ii4iKSwiUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1kJiYo'@;
put 'ZD0iIiksLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YoYSkmJiJudW0iPT09aCYmIiI9PT1kJiYoZD0iLiIpLCJCRVRXRUVOIj09PWE/e3ZhbHVlOmYsb3BlcmF0b3I6YX06e3ZhbHVlOmQsb3BlcmF0b3I6YX19d2hlcmVDbGF1c2VDcmVhdG9yKGEsZCxoKXtsZXQg'@;
put 'Vyx3ZSxmPSIiLGllPSIiLGdlPVtdO2ZvcihsZXQgWmU9MDtaZTxhLnF1ZXJ5T2JqLmxlbmd0aDtaZSsrKXtsZXQgb3Q9IiIsZXQ9YS5xdWVyeU9ialtaZV07Zm9yKGxldCB5dD0wO3l0PGV0LmVsZW1lbnRzLmxlbmd0aDt5dCsrKXtsZXQgU3Qsa3Q9ZXQuZWxlbWVudHNbeXRdO1c9eXQ8ZXQu'@;
put 'ZWxlbWVudHMubGVuZ3RoLTE/ZXQuY2xhdXNlTG9naWM6IiI7Zm9yKGxldCBEcj0wO0RyPGt0LnZhbHVlcy5sZW5ndGg7RHIrKyl7aWYoInN0cmluZyI9PXR5cGVvZiBrdC52YWx1ZSYmIm51bWJlciI9PXR5cGVvZiBrdC52YWx1ZXNbRHJdLmZvcm1hdHRlZClrdC52YWx1ZT09PUpTT04uc3Ry'@;
put 'aW5naWZ5KGt0LnZhbHVlc1tEcl0uZm9ybWF0dGVkKSYmKFN0PWt0LnZhbHVlc1tEcl0udW5mb3JtYXR0ZWQpO2Vsc2V7bGV0IGxpPSJudW1iZXIiIT10eXBlb2Yga3QudmFsdWVzW0RyXS5mb3JtYXR0ZWQmJm51bGwhPT1rdC52YWx1ZXNbRHJdLmZvcm1hdHRlZD9rdC52YWx1ZXNbRHJdLmZv'@;
put 'cm1hdHRlZC50cmltKCk6a3QudmFsdWVzW0RyXS5mb3JtYXR0ZWQ7a3QudmFsdWU9PT1saSYmKFN0PWt0LnZhbHVlc1tEcl0udW5mb3JtYXR0ZWQpfSJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PWt0LnZhbHVlJiYtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihrdC5v'@;
put 'cGVyYXRvcikmJihTdD0iIiksKCJDT05UQUlOUyI9PT1rdC5vcGVyYXRvcnx8IkxJS0UiPT09a3Qub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1rdC5vcGVyYXRvcikmJihTdD1rdC52YWx1ZSl9aWYoU3R8fChTdD1rdC52YWx1ZSksa3QudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmIkJFVFdF'@;
put 'RU4iPT09a3Qub3BlcmF0b3Ipe1N0PVtdLFN0LnB1c2goa3QudmFsdWVbMF0pLFN0LnB1c2goa3QudmFsdWVbMV0pO2ZvcihsZXQgRHI9MDtEcjxrdC52YWx1ZXMubGVuZ3RoO0RyKyspU3RbMF09PT1rdC52YWx1ZXNbRHJdLmZvcm1hdHRlZCYmKFN0WzBdPWt0LnZhbHVlc1tEcl0udW5mb3Jt'@;
put 'YXR0ZWQpLFN0WzFdPT09a3QudmFsdWVzW0RyXS5mb3JtYXR0ZWQmJihTdFsxXT1rdC52YWx1ZXNbRHJdLnVuZm9ybWF0dGVkKX1pZihrdC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYoIklOIj09PWt0Lm9wZXJhdG9yfHwiTk9UIElOIj09PWt0Lm9wZXJhdG9yKSl7U3Q9W10sU3Q9a3QudmFs'@;
put 'dWU7Zm9yKGxldCBEcj0wO0RyPGt0LnZhbHVlcy5sZW5ndGg7RHIrKylTdFtEcl0mJlN0W0RyXS52YWw9PT1rdC52YWx1ZXNbRHJdLmZvcm1hdHRlZCYmKFN0W0RyXS52YWw9a3QudmFsdWVzW0RyXS51bmZvcm1hdHRlZCl9bGV0IFF0PWt0LnR5cGU7Y29uc3Qgcm49a3QudmFsdWVWYXJpYWJs'@;
put 'ZTtsZXQgY3Isdm49bnVsbD09PWt0LnZhcmlhYmxlPyIiOmt0LnZhcmlhYmxlLE5uPW51bGw9PT1rdC5vcGVyYXRvcj8iIjprdC5vcGVyYXRvcjtjcj10aGlzLmNoZWNrT3BlcmF0b3IoTm4sU3QsUXQpLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgY3ImJiIoIiE9PWNyWzBdJiYoY3I9Y3IucmVw'@;
put 'bGFjZSgiJyIsIicnIikpLE5uPXRoaXMuY2hlY2tPcGVyYXRvcihObixjcixRdCkub3BlcmF0b3IsImNoYXIiPT09UXQmJiJJTiIhPT1ObiYmIk5PVCBJTiIhPT1Obj8odHlwZW9mIGNyPiJ1IiYmKGNyPSIiKSxjcj1ybj8iICIrY3IrIiAiOiIgJyIrY3IrIicgIixvdD1vdCsiICIrdm4rIiAi'@;
put 'K05uK2NyK1cpOigibnVtIj09PVF0JiZ0eXBlb2YgY3I+InUiJiYoY3I9Ii4iKSxjcj10eXBlb2YgY3I+InUiPyIiOiIgIitjcisiICIsb3Q9b3QrIiAiK3ZuKyIgIitObitjcitXKX1nZS5wdXNoKG90KX1pZT0iIjtmb3IobGV0IFplPTA7WmU8Z2UubGVuZ3RoO1plKyspd2U9WmU8Z2UubGVu'@;
put 'Z3RoLTE/ZDoiIixpZT0xPT09Z2UubGVuZ3RoP2dlWzBdOmllKyIgKCIrZ2VbWmVdKyIpICIrd2U7cmV0dXJuIGY9aWUuc3Vic3RyKDEpLnNsaWNlKDAsLTEpLGllPSJXSEVSRSIraWUrIjsiLHRoaXMucXVlcnkubmV4dCh7d2hlcmVDbGF1c2U6aWUsc3RyaW5nOmYsb2JqOmEsbGliZHM6aH0p'@;
put 'LHt3aGVyZUNsYXVzZTppZSxzdHJpbmc6Zn19Y3JlYXRlRmlsdGVyUXVlcnlUYWJsZShhKXtjb25zdCBkPVtdO3JldHVybiBhLmZpbHRlckdyb3Vwcy5mb3JFYWNoKChoLGYpPT57aC5maWx0ZXJDbGF1c2VzLmZvckVhY2goXz0+e2xldCBUPSIiOyJCRVRXRUVOIj09PV8ub3BlcmF0b3I/VD1g'@;
put 'JHtfLnZhbHVlWzBdfSBBTkQgJHtfLnZhbHVlWzFdfWA6IklOIj09PV8ub3BlcmF0b3J8fCJOT1QgSU4iPT09Xy5vcGVyYXRvcj8oXy52YWx1ZS5mb3JFYWNoKFc9PntpZihXLmNoZWNrZWQpe2NvbnN0IGllPVcudmFsOyJzdHJpbmciIT10eXBlb2YgaWV8fCgwLHQzLmlzU3BlY2lhbE1pc3Np'@;
put 'bmcpKGllKSYmImNoYXIiIT09Xy50eXBlP1QubGVuZ3RoPjA/VCs9YCwke2llfWA6VD1gKCR7aWV9YDpULmxlbmd0aD4wP1QrPWAsJyR7aWUucmVwbGFjZSgvJy9nLCInJyIpfSdgOlQ9YCgnJHtpZS5yZXBsYWNlKC8nL2csIicnIil9J2B9fSksVC5sZW5ndGg+MCYmKFQrPSIpIikpOiIiPT09'@;
put 'Xy52YWx1ZT9UPSJjaGFyIj09PV8udHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09Xy50eXBlJiYhXy52YWx1ZVZhcmlhYmxlJiYoVD1gJyR7Xy52YWx1ZS5yZXBsYWNlKC8nL2csIicnIil9J2ApLGQucHVzaCh7R1JPVVBfTE9HSUM6YS5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOmguY2xhdXNl'@;
put 'TG9naWN8fCJBTkQiLFNVQkdST1VQX0lEOmYsVkFSSUFCTEVfTk06Xy52YXJpYWJsZSxPUEVSQVRPUl9OTTpfLm9wZXJhdG9yLFJBV19WQUxVRTpUfHxfLnZhbHVlfSl9KX0pLGR9aW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShhLGQpe2NvbnN0IGg9e3F1ZXJ5T2JqOltdLGNsYXVzZUxv'@;
put 'Z2ljOltdLGdyb3VwTG9naWM6aWwoR24sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDfTtpbChHbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGgpLGlsKEduLGEpLmZpbHRlci5ncm91cExvZ2ljPWlsKEduLGEpLmZpbHRlci5xdWVyeVswXS5H'@;
put 'Uk9VUF9MT0dJQztsZXQgZj0iIixfPXtlbGVtZW50czpbXX0sVD0wO2lsKEduLGEpLmZpbHRlci5xdWVyeS5mb3JFYWNoKFc9Pntjb25zdCBpZT17fTtmb3IobGV0IGdlPTA7Z2U8ZC5sZW5ndGg7Z2UrKylpZihkW2dlXS5OQU1FPT09Vy5WQVJJQUJMRV9OTSl7aWYoZj1XLlNVQkdST1VQX0xP'@;
put 'R0lDLGllLmRkdHlwZT1kW2dlXS5ERFRZUEUsaWUudHlwZT1kW2dlXS5UWVBFLGllLm9wZXJhdG9ycz0ibnVtIj09PWRbZ2VdLlRZUEU/R24ub3BlcmF0b3JzLm51bU9wZXJhdG9yczpHbi5vcGVyYXRvcnMuY2hhck9wZXJhdG9ycyxpZS5sb2dpYz1udWxsLGllLm9wZXJhdG9yPVcuT1BFUkFU'@;
put 'T1JfTk0saWUudmFyaWFibGU9Vy5WQVJJQUJMRV9OTSwiY2hhciI9PT1kW2dlXS5UWVBFKWlmKCJJTiI9PT1XLk9QRVJBVE9SX05NfHwiTk9UIElOIj09PVcuT1BFUkFUT1JfTk0pe2NvbnN0IHdlPVtdLFplPVcuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCInLCciKTsxPT09WmUubGVu'@;
put 'Z3RoP3dlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOlplWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOlplLmZvckVhY2goKG90LGV0KT0+e3dlLnB1c2goMD09PWV0P3tjaGVja2VkOiEwLHZhbDpvdC5zbGljZSgxKS5yZXBsYWNlKC8nJy9nLCInIil9OmV0PT09WmUubGVuZ3Ro'@;
put 'LTE/e2NoZWNrZWQ6ITAsdmFsOm90LnNsaWNlKDAsLTEpLnJlcGxhY2UoLycnL2csIiciKX06e2NoZWNrZWQ6ITAsdmFsOm90LnJlcGxhY2UoLycnL2csIiciKX0pfSksaWUudmFsdWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh3ZSl9ZWxzZSBpZS52YWx1ZT1XLlJBV19WQUxVRS5z'@;
put 'bGljZSgxLC0xKS5yZXBsYWNlKC8nJy9nLCInIik7ZWxzZSBpZigiSU4iPT09Vy5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1XLk9QRVJBVE9SX05NKXtjb25zdCB3ZT1bXTtXLlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLmZvckVhY2goKG90LGV0KT0+e3dlLnB1c2goe2NoZWNr'@;
put 'ZWQ6ITAsdmFsOm90fSl9KSxpZS52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHdlKX1lbHNlIGlmKCJCRVRXRUVOIj09PVcuT1BFUkFUT1JfTk0pe2NvbnN0IHdlPVcuUkFXX1ZBTFVFLnNwbGl0KCIgQU5EICIpO2llLnZhbHVlPXdlfWVsc2UgaWUudmFsdWU9Vy5SQVdfVkFM'@;
put 'VUU7aWUudmFsdWVzPVtdLFQ9PT1XLlNVQkdST1VQX0lEfHwoaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKF8pKSxpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtUXS5jbGF1c2VMb2dpYz1mLGlsKEduLGEp'@;
put 'LmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW1RdLmludmFsaWRDbGF1c2U9ITEsVCsrLF8uZWxlbWVudHM9W10pLF8uZWxlbWVudHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGllKSk7YnJlYWt9fSksXy5lbGVtZW50cy5sZW5ndGg+MCYmKGlsKEduLGEpLmZpbHRlci5jbGF1'@;
put 'c2VzLnF1ZXJ5T2JqLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShfKSksaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbVF0uY2xhdXNlTG9naWM9ZixpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtUXS5pbnZhbGlkQ2xhdXNlPSExKSxpbChHbixhKS5m'@;
put 'aWx0ZXIucXVlcnk9W119cmVtb3ZlQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIGEucmVtb3ZlUXVlcnkubmV4dCghMCksITB9KSgpfXNwZWNDb252ZXJzaW9uKGEpe2xldCBkPXt9LGg9W107aWYoaD1hLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5O'@;
put 'QU1FLnRvVXBwZXJDYXNlKCl9KSxhIGluc3RhbmNlb2YgQXJyYXkpZm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspZFtoW2ZdXT0xPT09YVtmXS5UWVBFP3tjb2xUeXBlOiJudW0iLGNvbExlbmd0aDphW2ZdLkxFTkdUSH06e2NvbFR5cGU6InN0cmluZyIsY29sTGVuZ3RoOmFbZl0uTEVOR1RI'@;
put 'fTtyZXR1cm4gZH1zZXRTdWJtaXRSZWFkeSgpe3RoaXMuc2V0U3VibWl0Lm5leHQoITApfXBhcnNlRm9ybWF0cyhhKXtjb25zdCBkPXt9LGg9YS52YXJzO2ZvcihsZXQgZiBvZiBPYmplY3Qua2V5cyhoKSl7Y29uc3QgXz1oW2ZdLnR5cGUsVD1oW2ZdLmxlbmd0aDsibnVtIj09PV8/ZFtmXT0i'@;
put 'YmVzdC4iOiJjaGFyIj09PV8mJihkW2ZdPWAkY2hhciR7VH0uYCl9cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKG9hKSxhcihBYyksYXIodzApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9'@;
put 'KSxjfSkoKTtmdW5jdGlvbiBhNChjKXtyZXR1cm4gbnVsbCE9YyYmImZhbHNlIiE9YCR7Y31gfWZ1bmN0aW9uIEJvZShjLGw9MCl7cmV0dXJuIGZ1bmN0aW9uIEVWZShjKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChjKSkmJiFpc05hTihOdW1iZXIoYykpfShjKT9OdW1iZXIoYyk6bH1mdW5j'@;
put 'dGlvbiBQMChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIE5pP2MubmF0aXZlRWxlbWVudDpjfWNvbnN0IG53PXtzY2hlZHVsZShjKXtsZXQgbD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1jYW5jZWxBbmltYXRpb25GcmFtZTtjb25zdHtkZWxlZ2F0ZTpkfT1udztkJiYobD1kLnJlcXVlc3RBbmlt'@;
put 'YXRpb25GcmFtZSxhPWQuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO2NvbnN0IGg9bChmPT57YT12b2lkIDAsYyhmKX0pO3JldHVybiBuZXcgZWUoKCk9PmE/LihoKSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1udztyZXR1cm4obD8ucmVxdWVzdEFuaW1h'@;
put 'dGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1udztyZXR1cm4obD8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sZGVsZWdhdGU6dm9pZCAw'@;
put 'fSxqb2U9bmV3IGNsYXNzIFRWZSBleHRlbmRzIEJQe2ZsdXNoKGwpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBhPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShs'@;
put 'LnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgQVZlIGV4dGVuZHMgTlB7'@;
put 'Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8'@;
put 'fChsLl9zY2hlZHVsZWQ9bncucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5sLmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0'@;
put 'aW9uczpmfT1sO251bGwhPWEmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKG53LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpLGwuX3NjaGVkdWxlZD12b2lkIDApfX0pO2xldCBYeixEVmU9MTtjb25zdCBaQT17fTtmdW5jdGlvbiB6b2Uo'@;
put 'Yyl7cmV0dXJuIGMgaW4gWkEmJihkZWxldGUgWkFbY10sITApfWNvbnN0IElWZT17c2V0SW1tZWRpYXRlKGMpe2NvbnN0IGw9RFZlKys7cmV0dXJuIFpBW2xdPSEwLFh6fHwoWHo9UHJvbWlzZS5yZXNvbHZlKCkpLFh6LnRoZW4oKCk9PnpvZShsKSYmYygpKSxsfSxjbGVhckltbWVkaWF0ZShj'@;
put 'KXt6b2UoYyl9fSx7c2V0SW1tZWRpYXRlOkxWZSxjbGVhckltbWVkaWF0ZTpSVmV9PUlWZSxZQT17c2V0SW1tZWRpYXRlKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PVlBO3JldHVybihsPy5zZXRJbW1lZGlhdGV8fExWZSkoLi4uYyl9LGNsZWFySW1tZWRpYXRlKGMpe2NvbnN0e2RlbGVnYXRl'@;
put 'Omx9PVlBO3JldHVybihsPy5jbGVhckltbWVkaWF0ZXx8UlZlKShjKX0sZGVsZWdhdGU6dm9pZCAwfTtuZXcgY2xhc3MgUFZlIGV4dGVuZHMgQlB7Zmx1c2gobCl7dGhpcy5fYWN0aXZlPSEwO2NvbnN0IGE9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7Y29uc3R7YWN0'@;
put 'aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlmdCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxoKXtmb3IoOyhsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlm'@;
put 'dCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19fShjbGFzcyBPVmUgZXh0ZW5kcyBOUHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gbnVsbCE9PWQmJmQ+MD9zdXBlci5yZXF1'@;
put 'ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5wdXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3NjaGVkdWxlZD1ZQS5zZXRJbW1lZGlhdGUobC5mbHVzaC5iaW5kKGwsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXt2YXIgaDtpZihudWxsIT1kP2Q+MDp0aGlzLmRlbGF5'@;
put 'PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9PWw7bnVsbCE9YSYmKG51bGw9PT0oaD1mW2YubGVuZ3RoLTFdKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYoWUEuY2xlYXJJbW1lZGlhdGUoYSksbC5fc2NoZWR1bGVkPT09YSYmKGwu'@;
put 'X3NjaGVkdWxlZD12b2lkIDApKX19KTtmdW5jdGlvbiBVb2UoYyxsPWliKXtyZXR1cm4gZnVuY3Rpb24gSFZlKGMpe3JldHVybiBYZSgobCxhKT0+e2xldCBkPSExLGg9bnVsbCxmPW51bGwsXz0hMTtjb25zdCBUPSgpPT57aWYoZj8udW5zdWJzY3JpYmUoKSxmPW51bGwsZCl7ZD0hMTtjb25z'@;
put 'dCBpZT1oO2g9bnVsbCxhLm5leHQoaWUpfV8mJmEuY29tcGxldGUoKX0sVz0oKT0+e2Y9bnVsbCxfJiZhLmNvbXBsZXRlKCl9O2wuc3Vic2NyaWJlKFVlKGEsaWU9PntkPSEwLGg9aWUsZnx8S3IoYyhpZSkpLnN1YnNjcmliZShmPVVlKGEsVCxXKSl9LCgpPT57Xz0hMCwoIWR8fCFmfHxmLmNs'@;
put 'b3NlZCkmJmEuY29tcGxldGUoKX0pKX0pfSgoKT0+alAoYyxsKSl9bGV0IEp6O3RyeXtKej10eXBlb2YgSW50bDwidSImJkludGwudjhCcmVha0l0ZXJhdG9yfWNhdGNoe0p6PSExfWxldCBydyxReixab2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybUlkPWEs'@;
put 'dGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9Scyh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5U'@;
put 'PXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFKeikmJnR5cGVvZiBDU1M8InUiJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lU'@;
put 'PXRoaXMuaXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2Vu'@;
put 'dCkmJiEoIk1TU3RyZWFtImluIHdpbmRvdyksdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJB'@;
put 'Z2VudCkmJiF0aGlzLlRSSURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoR3MpKX0sYy5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBpdyhjKXtyZXR1cm4gZnVuY3Rpb24gTlZlKCl7aWYobnVsbD09cncmJnR5cGVvZiB3aW5kb3c8InUiKXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIs'@;
put 'bnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6KCk9PnJ3PSEwfSkpfWZpbmFsbHl7cnc9cnd8fCExfXJldHVybiByd30oKT9jOiEhYy5jYXB0dXJlfWZ1bmN0aW9uIFdvZShjKXtpZihmdW5jdGlvbiBWVmUoKXtpZihudWxsPT1Reil7Y29uc3QgYz10eXBlb2Yg'@;
put 'ZG9jdW1lbnQ8InUiP2RvY3VtZW50LmhlYWQ6bnVsbDtRej0hKCFjfHwhYy5jcmVhdGVTaGFkb3dSb290JiYhYy5hdHRhY2hTaGFkb3cpfXJldHVybiBRen0oKSl7Y29uc3QgbD1jLmdldFJvb3ROb2RlP2MuZ2V0Um9vdE5vZGUoKTpudWxsO2lmKHR5cGVvZiBTaGFkb3dSb290PCJ1IiYmU2hh'@;
put 'ZG93Um9vdCYmbCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gR0EoYyl7cmV0dXJuIGMuY29tcG9zZWRQYXRoP2MuY29tcG9zZWRQYXRoKClbMF06Yy50YXJnZXR9bGV0IGpWZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlz'@;
put 'Ll9uZ1pvbmU9YSx0aGlzLl9wbGF0Zm9ybT1kLHRoaXMuX3Njcm9sbGVkPW5ldyBiZSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9aH1yZWdpc3RlcihhKXt0aGlz'@;
put 'LnNjcm9sbENvbnRhaW5lcnMuaGFzKGEpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGEsYS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoYSkpKX1kZXJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5zY3JvbGxDb250YWluZXJzLmdldChhKTtk'@;
put 'JiYoZC51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5kZWxldGUoYSkpfXNjcm9sbGVkKGE9MjApe3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/bmV3IEtlKGQ9Pnt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb258fHRoaXMuX2FkZEdsb2JhbExpc3RlbmVyKCk7Y29u'@;
put 'c3QgaD1hPjA/dGhpcy5fc2Nyb2xsZWQucGlwZShVb2UoYSkpLnN1YnNjcmliZShkKTp0aGlzLl9zY3JvbGxlZC5zdWJzY3JpYmUoZCk7cmV0dXJuIHRoaXMuX3Njcm9sbGVkQ291bnQrKywoKT0+e2gudW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxlZENvdW50LS0sdGhpcy5fc2Nyb2xsZWRD'@;
put 'b3VudHx8dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKX19KTpXaSgpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoYSxkKT0+dGhpcy5kZXJlZ2lzdGVyKGQpKSx0aGlzLl9zY3JvbGxlZC5jb21wbGV0'@;
put 'ZSgpfWFuY2VzdG9yU2Nyb2xsZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpO3JldHVybiB0aGlzLnNjcm9sbGVkKGQpLnBpcGUoSWEoZj0+IWZ8fGguaW5kZXhPZihmKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhhKXtjb25zdCBk'@;
put 'PVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoaCxmKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZixhKSYmZC5wdXNoKGYpfSksZH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFi'@;
put 'bGVDb250YWluc0VsZW1lbnQoYSxkKXtsZXQgaD1QMChkKSxmPWEuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYoaD09ZilyZXR1cm4hMH13aGlsZShoPWgucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0'@;
put 'aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bjIodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9u'@;
put 'JiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihObyksYXIoWm9lKSxhcihMcyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksVVZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3BsYXRmb3JtPWEsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLl9jaGFuZ2VMaXN0ZW5lcj1mPT57dGhpcy5fY2hhbmdl'@;
put 'Lm5leHQoZil9LHRoaXMuX2RvY3VtZW50PWgsZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKGEuaXNCcm93c2VyKXtjb25zdCBmPXRoaXMuX2dldFdpbmRvdygpO2YuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksZi5hZGRFdmVudExpc3RlbmVyKCJv'@;
put 'cmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgYT10aGlzLl9nZXRXaW5kb3coKTth'@;
put 'LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0aGlzLl92'@;
put 'aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IGE9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6'@;
put 'ZT1udWxsKSxhfWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IGE9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDphLnRvcCxsZWZ0OmEubGVmdCxib3R0b206YS50b3AraCxyaWdodDphLmxl'@;
put 'ZnQrZCxoZWlnaHQ6aCx3aWR0aDpkfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25zdCBhPXRoaXMuX2RvY3VtZW50LGQ9dGhpcy5fZ2V0V2luZG93KCksaD1hLmRvY3VtZW50RWxlbWVudCxm'@;
put 'PWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotZi50b3B8fGEuYm9keS5zY3JvbGxUb3B8fGQuc2Nyb2xsWXx8aC5zY3JvbGxUb3B8fDAsbGVmdDotZi5sZWZ0fHxhLmJvZHkuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxYfHxoLnNjcm9sbExlZnR8fDB9fWNoYW5nZShhPTIwKXty'@;
put 'ZXR1cm4gYT4wP3RoaXMuX2NoYW5nZS5waXBlKFVvZShhKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7Y29uc3QgYT10aGlzLl9nZXRXaW5kb3coKTt0aGlzLl92aWV3cG9y'@;
put 'dFNpemU9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP3t3aWR0aDphLmlubmVyV2lkdGgsaGVpZ2h0OmEuaW5uZXJIZWlnaHR9Ont3aWR0aDowLGhlaWdodDowfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoWm9lKSxhcihObyksYXIoTHMsOCkp'@;
put 'fSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFpWZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30p'@;
put 'LGMuXHUwMjc1aW5qPW1pKHt9KSxjfSkoKTtjb25zdCBhQmU9bmV3IE1pKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gbEJlKCl7cmV0dXJuIEZpKExzKX19KSxjQmU9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlst'@;
put 'X10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2k7bGV0IEtvZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmFsdWU9Imx0ciIsdGhpcy5jaGFuZ2U9bmV3IEVyLGEmJih0aGlzLnZhbHVlPWZ1bmN0'@;
put 'aW9uIHVCZShjKXtjb25zdCBsPWM/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PWwmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP2NCZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT1sPyJydGwiOiJsdHIifSgo'@;
put 'YS5ib2R5P2EuYm9keS5kaXI6bnVsbCl8fChhLmRvY3VtZW50RWxlbWVudD9hLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShhcihhQmUsOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2Z1bmN0aW9uIGVVKGMsbCxhKXtmb3IobGV0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07aD9jLnNldFBy'@;
put 'b3BlcnR5KGQsaCxhPy5oYXMoZCk/ImltcG9ydGFudCI6IiIpOmMucmVtb3ZlUHJvcGVydHkoZCl9cmV0dXJuIGN9ZnVuY3Rpb24gejcoYyxsKXtjb25zdCBhPWw/IiI6Im5vbmUiO2VVKGMuc3R5bGUseyJ0b3VjaC1hY3Rpb24iOmw/IiI6Im5vbmUiLCItd2Via2l0LXVzZXItZHJhZyI6bD8i'@;
put 'Ijoibm9uZSIsIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciI6bD8iIjoidHJhbnNwYXJlbnQiLCJ1c2VyLXNlbGVjdCI6YSwiLW1zLXVzZXItc2VsZWN0IjphLCItd2Via2l0LXVzZXItc2VsZWN0IjphLCItbW96LXVzZXItc2VsZWN0IjphfSl9ZnVuY3Rpb24gWG9lKGMsbCxhKXtlVShj'@;
put 'LnN0eWxlLHtwb3NpdGlvbjpsPyIiOiJmaXhlZCIsdG9wOmw/IiI6IjAiLG9wYWNpdHk6bD8iIjoiMCIsbGVmdDpsPyIiOiItOTk5ZW0ifSxhKX1mdW5jdGlvbiAkQShjLGwpe3JldHVybiBsJiYibm9uZSIhPWw/YysiICIrbDpjfWZ1bmN0aW9uIEpvZShjKXtjb25zdCBsPWMudG9Mb3dlckNh'@;
put 'c2UoKS5pbmRleE9mKCJtcyIpPi0xPzE6MWUzO3JldHVybiBwYXJzZUZsb2F0KGMpKmx9ZnVuY3Rpb24gdFUoYyxsKXtyZXR1cm4gYy5nZXRQcm9wZXJ0eVZhbHVlKGwpLnNwbGl0KCIsIikubWFwKGQ9PmQudHJpbSgpKX1mdW5jdGlvbiBuVShjKXtjb25zdCBsPWMuZ2V0Qm91bmRpbmdDbGll'@;
put 'bnRSZWN0KCk7cmV0dXJue3RvcDpsLnRvcCxyaWdodDpsLnJpZ2h0LGJvdHRvbTpsLmJvdHRvbSxsZWZ0OmwubGVmdCx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCx4OmwueCx5OmwueX19ZnVuY3Rpb24gclUoYyxsLGEpe2NvbnN0e3RvcDpkLGJvdHRvbTpoLGxlZnQ6ZixyaWdodDpf'@;
put 'fT1jO3JldHVybiBhPj1kJiZhPD1oJiZsPj1mJiZsPD1ffWZ1bmN0aW9uIG93KGMsbCxhKXtjLnRvcCs9bCxjLmJvdHRvbT1jLnRvcCtjLmhlaWdodCxjLmxlZnQrPWEsYy5yaWdodD1jLmxlZnQrYy53aWR0aH1mdW5jdGlvbiBRb2UoYyxsLGEsZCl7Y29uc3R7dG9wOmgscmlnaHQ6Zixib3R0'@;
put 'b206XyxsZWZ0OlQsd2lkdGg6VyxoZWlnaHQ6aWV9PWMsZ2U9VypsLHdlPWllKmw7cmV0dXJuIGQ+aC13ZSYmZDxfK3dlJiZhPlQtZ2UmJmE8ZitnZX1jbGFzcyBlc2V7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnBvc2l0aW9ucz1uZXcgTWFwfWNsZWFyKCl7dGhpcy5w'@;
put 'b3NpdGlvbnMuY2xlYXIoKX1jYWNoZShsKXt0aGlzLmNsZWFyKCksdGhpcy5wb3NpdGlvbnMuc2V0KHRoaXMuX2RvY3VtZW50LHtzY3JvbGxQb3NpdGlvbjp0aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX0pLGwuZm9yRWFjaChhPT57dGhpcy5wb3NpdGlvbnMuc2V0KGEse3Njcm9s'@;
put 'bFBvc2l0aW9uOnt0b3A6YS5zY3JvbGxUb3AsbGVmdDphLnNjcm9sbExlZnR9LGNsaWVudFJlY3Q6blUoYSl9KX0pfWhhbmRsZVNjcm9sbChsKXtjb25zdCBhPUdBKGwpLGQ9dGhpcy5wb3NpdGlvbnMuZ2V0KGEpO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5zY3JvbGxQb3NpdGlvbjts'@;
put 'ZXQgZixfO2lmKGE9PT10aGlzLl9kb2N1bWVudCl7Y29uc3QgaWU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7Zj1pZS50b3AsXz1pZS5sZWZ0fWVsc2UgZj1hLnNjcm9sbFRvcCxfPWEuc2Nyb2xsTGVmdDtjb25zdCBUPWgudG9wLWYsVz1oLmxlZnQtXztyZXR1cm4gdGhpcy5w'@;
put 'b3NpdGlvbnMuZm9yRWFjaCgoaWUsZ2UpPT57aWUuY2xpZW50UmVjdCYmYSE9PWdlJiZhLmNvbnRhaW5zKGdlKSYmb3coaWUuY2xpZW50UmVjdCxULFcpfSksaC50b3A9ZixoLmxlZnQ9Xyx7dG9wOlQsbGVmdDpXfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJue3RvcDp3aW5k'@;
put 'b3cuc2Nyb2xsWSxsZWZ0OndpbmRvdy5zY3JvbGxYfX19ZnVuY3Rpb24gdHNlKGMpe2NvbnN0IGw9Yy5jbG9uZU5vZGUoITApLGE9bC5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIiksZD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7bC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7Zm9yKGxldCBoPTA7'@;
put 'aDxhLmxlbmd0aDtoKyspYVtoXS5yZW1vdmVBdHRyaWJ1dGUoImlkIik7cmV0dXJuImNhbnZhcyI9PT1kP2lzZShjLGwpOigiaW5wdXQiPT09ZHx8InNlbGVjdCI9PT1kfHwidGV4dGFyZWEiPT09ZCkmJnJzZShjLGwpLG5zZSgiY2FudmFzIixjLGwsaXNlKSxuc2UoImlucHV0LCB0ZXh0YXJl'@;
put 'YSwgc2VsZWN0IixjLGwscnNlKSxsfWZ1bmN0aW9uIG5zZShjLGwsYSxkKXtjb25zdCBoPWwucXVlcnlTZWxlY3RvckFsbChjKTtpZihoLmxlbmd0aCl7Y29uc3QgZj1hLnF1ZXJ5U2VsZWN0b3JBbGwoYyk7Zm9yKGxldCBfPTA7XzxoLmxlbmd0aDtfKyspZChoW19dLGZbX10pfX1sZXQgaEJl'@;
put 'PTA7ZnVuY3Rpb24gcnNlKGMsbCl7ImZpbGUiIT09bC50eXBlJiYobC52YWx1ZT1jLnZhbHVlKSwicmFkaW8iPT09bC50eXBlJiZsLm5hbWUmJihsLm5hbWU9YG1hdC1jbG9uZS0ke2wubmFtZX0tJHtoQmUrK31gKX1mdW5jdGlvbiBpc2UoYyxsKXtjb25zdCBhPWwuZ2V0Q29udGV4dCgiMmQi'@;
put 'KTtpZihhKXRyeXthLmRyYXdJbWFnZShjLDAsMCl9Y2F0Y2h7fX1jb25zdCBvc2U9aXcoe3Bhc3NpdmU6ITB9KSxxQT1pdyh7cGFzc2l2ZTohMX0pLGlVPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBwQmV7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhKCF0aGlz'@;
put 'Ll9kcm9wQ29udGFpbmVyfHwhdGhpcy5fZHJvcENvbnRhaW5lci5kaXNhYmxlZCl9c2V0IGRpc2FibGVkKGwpe2NvbnN0IGE9YTQobCk7YSE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9YSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxl'@;
put 'cy5mb3JFYWNoKGQ9Pno3KGQsYSkpKX1jb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7dGhpcy5fY29uZmlnPWEsdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWYsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1fLHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09'@;
put 'e3g6MCx5OjB9LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSExLHRoaXMuX21vdmVFdmVudHM9bmV3IGJlLHRoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uPWVlLkVNUFRZLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj1lZS5F'@;
put 'TVBUWSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZWUuRU1QVFksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPWVlLkVNUFRZLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1udWxsLHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9ITAsdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxl'@;
put 'ZEhhbmRsZXM9bmV3IFNldCx0aGlzLl9kaXJlY3Rpb249Imx0ciIsdGhpcy5kcmFnU3RhcnREZWxheT0wLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgYmUsdGhpcy5zdGFydGVkPW5ldyBiZSx0aGlzLnJlbGVhc2VkPW5ldyBiZSx0aGlzLmVuZGVkPW5ldyBiZSx0'@;
put 'aGlzLmVudGVyZWQ9bmV3IGJlLHRoaXMuZXhpdGVkPW5ldyBiZSx0aGlzLmRyb3BwZWQ9bmV3IGJlLHRoaXMubW92ZWQ9dGhpcy5fbW92ZUV2ZW50cyx0aGlzLl9wb2ludGVyRG93bj1UPT57aWYodGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3Qg'@;
put 'Vz10aGlzLl9nZXRUYXJnZXRIYW5kbGUoVCk7VyYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoVykmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKFcsVCl9ZWxzZSB0aGlzLmRpc2FibGVkfHx0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKHRoaXMu'@;
put 'X3Jvb3RFbGVtZW50LFQpfSx0aGlzLl9wb2ludGVyTW92ZT1UPT57Y29uc3QgVz10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoVCk7aWYoIXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyl7aWYoTWF0aC5hYnMoVy54LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpK01hdGguYWJz'@;
put 'KFcueS10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KT49dGhpcy5fY29uZmlnLmRyYWdTdGFydFRocmVzaG9sZCl7Y29uc3QgWmU9RGF0ZS5ub3coKT49dGhpcy5fZHJhZ1N0YXJ0VGltZSt0aGlzLl9nZXREcmFnU3RhcnREZWxheShUKSxvdD10aGlzLl9kcm9wQ29udGFpbmVyO2lmKCFa'@;
put 'ZSlyZXR1cm4gdm9pZCB0aGlzLl9lbmREcmFnU2VxdWVuY2UoVCk7KCFvdHx8IW90LmlzRHJhZ2dpbmcoKSYmIW90LmlzUmVjZWl2aW5nKCkpJiYoVC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz0hMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9zdGFydERy'@;
put 'YWdTZXF1ZW5jZShUKSkpfXJldHVybn1ULnByZXZlbnREZWZhdWx0KCk7Y29uc3QgaWU9dGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24oVyk7aWYodGhpcy5faGFzTW92ZWQ9ITAsdGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPVcsdGhpcy5fdXBkYXRlUG9pbnRlckRp'@;
put 'cmVjdGlvbkRlbHRhKGllKSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoaWUsVyk7ZWxzZXtjb25zdCBnZT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2luaXRpYWxDbGllbnRSZWN0OnRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLHdl'@;
put 'PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybTt3ZS54PWllLngtZ2UueCt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLngsd2UueT1pZS55LWdlLnkrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55LHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0od2UueCx3ZS55KX10aGlzLl9tb3ZlRXZlbnRzLm9i'@;
put 'c2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9tb3ZlRXZlbnRzLm5leHQoe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjppZSxldmVudDpULGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShpZSksZGVsdGE6dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRl'@;
put 'bHRhfSl9KX0sdGhpcy5fcG9pbnRlclVwPVQ9Pnt0aGlzLl9lbmREcmFnU2VxdWVuY2UoVCl9LHRoaXMuX25hdGl2ZURyYWdTdGFydD1UPT57aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IFc9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKFQpO1cmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMu'@;
put 'aGFzKFcpJiYhdGhpcy5kaXNhYmxlZCYmVC5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgdGhpcy5kaXNhYmxlZHx8VC5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLndpdGhSb290RWxlbWVudChsKS53aXRoUGFyZW50KGEucGFyZW50RHJhZ1JlZnx8bnVsbCksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5l'@;
put 'dyBlc2UoZCksXy5yZWdpc3RlckRyYWdJdGVtKHRoaXMpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlcn1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRWaXNpYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlzRHJhZ2dp'@;
put 'bmcoKT90aGlzLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnRoaXMuZ2V0Um9vdEVsZW1lbnQoKX13aXRoSGFuZGxlcyhsKXt0aGlzLl9oYW5kbGVzPWwubWFwKGQ9PlAwKGQpKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goZD0+ejcoZCx0aGlzLmRpc2FibGVkKSksdGhpcy5fdG9nZ2xlTmF0aXZl'@;
put 'RHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9bmV3IFNldDtyZXR1cm4gdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmZvckVhY2goZD0+e3RoaXMuX2hhbmRsZXMuaW5kZXhPZihkKT4tMSYmYS5hZGQoZCl9KSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9YSx0aGlzfXdpdGhQcmV2aWV3VGVtcGxhdGUo'@;
put 'bCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1sLHRoaXN9d2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9bCx0aGlzfXdpdGhSb290RWxlbWVudChsKXtjb25zdCBhPVAwKGwpO3JldHVybiBhIT09dGhpcy5fcm9vdEVsZW1l'@;
put 'bnQmJih0aGlzLl9yb290RWxlbWVudCYmdGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixxQSks'@;
put 'YS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixvc2UpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQscUEpfSksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fcm9vdEVsZW1lbnQ9YSks'@;
put 'dHlwZW9mIFNWR0VsZW1lbnQ8InUiJiZ0aGlzLl9yb290RWxlbWVudCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQmJih0aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcm9vdEVsZW1lbnQub3duZXJTVkdFbGVtZW50KSx0aGlzfXdpdGhCb3VuZGFyeUVsZW1lbnQobCl7cmV0dXJuIHRoaXMuX2Jv'@;
put 'dW5kYXJ5RWxlbWVudD1sP1AwKGwpOm51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksbCYmKHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxMCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jb250YWluSW5zaWRlQm91bmRh'@;
put 'cnlPblJlc2l6ZSgpKSksdGhpc313aXRoUGFyZW50KGwpe3JldHVybiB0aGlzLl9wYXJlbnREcmFnUmVmPWwsdGhpc31kaXNwb3NlKCl7dGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuaXNEcmFnZ2luZygpJiZ0aGlzLl9yb290RWxlbWVu'@;
put 'dD8ucmVtb3ZlKCksdGhpcy5fYW5jaG9yPy5yZW1vdmUoKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVtb3ZlRHJhZ0l0ZW0odGhpcyksdGhpcy5fcmVtb3ZlU3Vic2NyaXB0aW9ucygpLHRoaXMuYmVm'@;
put 'b3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuc3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVsZWFzZWQuY29tcGxldGUoKSx0aGlzLmVuZGVkLmNvbXBsZXRlKCksdGhpcy5lbnRlcmVkLmNvbXBsZXRlKCksdGhpcy5leGl0ZWQuY29tcGxldGUoKSx0aGlzLmRyb3BwZWQuY29tcGxldGUoKSx0'@;
put 'aGlzLl9tb3ZlRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxlZEhhbmRsZXMuY2xlYXIoKSx0aGlzLl9kcm9wQ29udGFpbmVyPXZvaWQgMCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xl'@;
put 'YXIoKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9dGhpcy5fcm9vdEVsZW1lbnQ9dGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9dGhpcy5fcHJldmlld1RlbXBsYXRlPXRoaXMuX2FuY2hvcj10aGlzLl9wYXJlbnREcmFnUmVmPW51bGx9aXNEcmFnZ2luZygp'@;
put 'e3JldHVybiB0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcmJnRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKX1yZXNldCgpe3RoaXMuX3Jvb3RFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtfHwiIix0aGlzLl9hY3RpdmVUcmFuc2Zvcm09'@;
put 'e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9fWRpc2FibGVIYW5kbGUobCl7IXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMobCkmJnRoaXMuX2hhbmRsZXMuaW5kZXhPZihsKT4tMSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5hZGQobCksejcobCwhMCkpfWVuYWJs'@;
put 'ZUhhbmRsZShsKXt0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmRlbGV0ZShsKSx6NyhsLHRoaXMuZGlzYWJsZWQpKX13aXRoRGlyZWN0aW9uKGwpe3JldHVybiB0aGlzLl9kaXJlY3Rpb249bCx0aGlzfV93aXRoRHJvcENvbnRhaW5lcihsKXt0'@;
put 'aGlzLl9kcm9wQ29udGFpbmVyPWx9Z2V0RnJlZURyYWdQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5fYWN0aXZlVHJhbnNmb3JtOnRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07cmV0dXJue3g6bC54LHk6bC55fX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGwpe3JldHVybiB0'@;
put 'aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD1sLngsdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PWwueSx0aGlzLl9kcm9wQ29udGFpbmVyfHx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwueCxsLnkpLHRoaXN9d2l0aFByZXZp'@;
put 'ZXdDb250YWluZXIobCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdDb250YWluZXI9bCx0aGlzfV9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbjtsJiZ0aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl91cGRhdGVBY3RpdmVE'@;
put 'cm9wQ29udGFpbmVyKHRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpLGwpfV9yZW1vdmVTdWJzY3JpcHRpb25zKCl7dGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0'@;
put 'aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fZGVzdHJveVByZXZpZXcoKXt0aGlzLl9wcmV2aWV3Py5yZW1vdmUoKSx0aGlzLl9wcmV2aWV3UmVmPy5kZXN0cm95KCksdGhpcy5fcHJldmlldz10aGlzLl9wcmV2aWV3UmVmPW51bGx9X2Rlc3Ryb3lQbGFjZWhvbGRlcigp'@;
put 'e3RoaXMuX3BsYWNlaG9sZGVyPy5yZW1vdmUoKSx0aGlzLl9wbGFjZWhvbGRlclJlZj8uZGVzdHJveSgpLHRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX3BsYWNlaG9sZGVyUmVmPW51bGx9X2VuZERyYWdTZXF1ZW5jZShsKXtpZih0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhp'@;
put 'cykmJih0aGlzLl9yZW1vdmVTdWJzY3JpcHRpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMmJih0aGlzLl9yb290RWxlbWVudC5zdHlsZS53ZWJraXRUYXBIaWdo'@;
put 'bGlnaHRDb2xvcj10aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKSlpZih0aGlzLnJlbGVhc2VkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX2Ryb3BDb250YWluZXIuX3N0b3BTY3JvbGxp'@;
put 'bmcoKSx0aGlzLl9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKS50aGVuKCgpPT57dGhpcy5fY2xlYW51cERyYWdBcnRpZmFjdHMobCksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX0pO2Vsc2V7dGhp'@;
put 'cy5fcGFzc2l2ZVRyYW5zZm9ybS54PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54O2NvbnN0IGE9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpO3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSx0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5l'@;
put 'bmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoYSksZHJvcFBvaW50OmEsZXZlbnQ6bH0pfSksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX19X3N0YXJ0RHJh'@;
put 'Z1NlcXVlbmNlKGwpe3N3KGwpJiYodGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lPURhdGUubm93KCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPXRoaXMuX2Ryb3BDb250YWluZXI7aWYoYSl7Y29uc3QgZD10aGlzLl9yb290RWxlbWVudCxoPWQucGFyZW50'@;
put 'Tm9kZSxmPXRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpLF89dGhpcy5fYW5jaG9yPXRoaXMuX2FuY2hvcnx8dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIiksVD10aGlzLl9nZXRTaGFkb3dSb290KCk7aC5pbnNlcnRCZWZvcmUoXyxkKSx0'@;
put 'aGlzLl9pbml0aWFsVHJhbnNmb3JtPWQuc3R5bGUudHJhbnNmb3JtfHwiIix0aGlzLl9wcmV2aWV3PXRoaXMuX2NyZWF0ZVByZXZpZXdFbGVtZW50KCksWG9lKGQsITEsaVUpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaC5yZXBsYWNlQ2hpbGQoZixkKSksdGhpcy5fZ2V0UHJl'@;
put 'dmlld0luc2VydGlvblBvaW50KGgsVCkuYXBwZW5kQ2hpbGQodGhpcy5fcHJldmlldyksdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSxhLnN0YXJ0KCksdGhpcy5faW5pdGlhbENvbnRhaW5lcj1hLHRoaXMuX2luaXRpYWxJbmRleD1hLmdldEl0ZW1JbmRleCh0aGlz'@;
put 'KX1lbHNlIHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5faW5pdGlhbENvbnRhaW5lcj10aGlzLl9pbml0aWFsSW5kZXg9dm9pZCAwO3RoaXMuX3BhcmVudFBvc2l0aW9ucy5jYWNoZShhP2EuZ2V0U2Nyb2xsYWJsZVBhcmVudHMoKTpbXSl9X2luaXRpYWxp'@;
put 'emVEcmFnU2VxdWVuY2UobCxhKXt0aGlzLl9wYXJlbnREcmFnUmVmJiZhLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGQ9dGhpcy5pc0RyYWdnaW5nKCksaD1zdyhhKSxmPSFoJiYwIT09YS5idXR0b24sXz10aGlzLl9yb290RWxlbWVudCxUPUdBKGEpLFc9IWgmJnRoaXMuX2xhc3RUb3VjaEV2'@;
put 'ZW50VGltZSYmdGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lKzgwMD5EYXRlLm5vdygpLGllPWg/ZnVuY3Rpb24gaUJlKGMpe2NvbnN0IGw9Yy50b3VjaGVzJiZjLnRvdWNoZXNbMF18fGMuY2hhbmdlZFRvdWNoZXMmJmMuY2hhbmdlZFRvdWNoZXNbMF07cmV0dXJuISghbHx8LTEhPT1sLmlkZW50'@;
put 'aWZpZXJ8fG51bGwhPWwucmFkaXVzWCYmMSE9PWwucmFkaXVzWHx8bnVsbCE9bC5yYWRpdXNZJiYxIT09bC5yYWRpdXNZKX0oYSk6ZnVuY3Rpb24gckJlKGMpe3JldHVybiAwPT09Yy5idXR0b25zfHwwPT09Yy5vZmZzZXRYJiYwPT09Yy5vZmZzZXRZfShhKTtpZihUJiZULmRyYWdnYWJsZSYm'@;
put 'Im1vdXNlZG93biI9PT1hLnR5cGUmJmEucHJldmVudERlZmF1bHQoKSxkfHxmfHxXfHxpZSlyZXR1cm47aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IEVlPV8uc3R5bGU7dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQ9RWUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3J8fCIiLEVl'@;
put 'LndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPXRoaXMuX2hhc01vdmVkPSExLHRoaXMuX3JlbW92ZVN1YnNjcmlwdGlvbnMoKSx0aGlzLl9pbml0aWFsQ2xpZW50UmVjdD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0Ns'@;
put 'aWVudFJlY3QoKSx0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJNb3ZlLnN1YnNjcmliZSh0aGlzLl9wb2ludGVyTW92ZSksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlclVw'@;
put 'LnN1YnNjcmliZSh0aGlzLl9wb2ludGVyVXApLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKEVlPT50aGlzLl91cGRhdGVPblNjcm9sbChFZSkpLHRoaXMuX2JvdW5kYXJ5RWxl'@;
put 'bWVudCYmKHRoaXMuX2JvdW5kYXJ5UmVjdD1uVSh0aGlzLl9ib3VuZGFyeUVsZW1lbnQpKTtjb25zdCBnZT10aGlzLl9wcmV2aWV3VGVtcGxhdGU7dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQ9Z2UmJmdlLnRlbXBsYXRlJiYhZ2UubWF0Y2hTaXplP3t4OjAseTowfTp0aGlzLl9nZXRQ'@;
put 'b2ludGVyUG9zaXRpb25JbkVsZW1lbnQodGhpcy5faW5pdGlhbENsaWVudFJlY3QsbCxhKTtjb25zdCB3ZT10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGEpO3RoaXMuX3BvaW50'@;
put 'ZXJEaXJlY3Rpb25EZWx0YT17eDowLHk6MH0sdGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlPXt4OndlLngseTp3ZS55fSx0aGlzLl9kcmFnU3RhcnRUaW1lPURhdGUubm93KCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdGFydERyYWdnaW5nKHRoaXMsYSl9X2Ns'@;
put 'ZWFudXBEcmFnQXJ0aWZhY3RzKGwpe1hvZSh0aGlzLl9yb290RWxlbWVudCwhMCxpVSksdGhpcy5fYW5jaG9yLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMuX3Jvb3RFbGVtZW50LHRoaXMuX2FuY2hvciksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xk'@;
put 'ZXIoKSx0aGlzLl9pbml0aWFsQ2xpZW50UmVjdD10aGlzLl9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fbmdab25lLnJ1bigoKT0+e2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcixkPWEuZ2V0SXRlbUluZGV4KHRo'@;
put 'aXMpLGg9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpLGY9dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGgpLF89YS5faXNPdmVyQ29udGFpbmVyKGgueCxoLnkpO3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksdGhpcy5k'@;
put 'cm9wcGVkLm5leHQoe2l0ZW06dGhpcyxjdXJyZW50SW5kZXg6ZCxwcmV2aW91c0luZGV4OnRoaXMuX2luaXRpYWxJbmRleCxjb250YWluZXI6YSxwcmV2aW91c0NvbnRhaW5lcjp0aGlzLl9pbml0aWFsQ29udGFpbmVyLGlzUG9pbnRlck92ZXJDb250YWluZXI6XyxkaXN0YW5jZTpmLGRyb3BQ'@;
put 'b2ludDpoLGV2ZW50Omx9KSxhLmRyb3AodGhpcyxkLHRoaXMuX2luaXRpYWxJbmRleCx0aGlzLl9pbml0aWFsQ29udGFpbmVyLF8sZixoLGwpLHRoaXMuX2Ryb3BDb250YWluZXI9dGhpcy5faW5pdGlhbENvbnRhaW5lcn0pfV91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHt4OmwseTphfSx7'@;
put 'eDpkLHk6aH0pe2xldCBmPXRoaXMuX2luaXRpYWxDb250YWluZXIuX2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24odGhpcyxsLGEpOyFmJiZ0aGlzLl9kcm9wQ29udGFpbmVyIT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmdGhpcy5faW5pdGlhbENvbnRhaW5lci5faXNPdmVyQ29u'@;
put 'dGFpbmVyKGwsYSkmJihmPXRoaXMuX2luaXRpYWxDb250YWluZXIpLGYmJmYhPT10aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5leGl0ZWQubmV4dCh7aXRlbTp0aGlzLGNvbnRhaW5lcjp0aGlzLl9kcm9wQ29udGFpbmVyfSksdGhpcy5fZHJvcENvbnRh'@;
put 'aW5lci5leGl0KHRoaXMpLHRoaXMuX2Ryb3BDb250YWluZXI9Zix0aGlzLl9kcm9wQ29udGFpbmVyLmVudGVyKHRoaXMsbCxhLGY9PT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZmLnNvcnRpbmdEaXNhYmxlZD90aGlzLl9pbml0aWFsSW5kZXg6dm9pZCAwKSx0aGlzLmVudGVyZWQubmV4dCh7'@;
put 'aXRlbTp0aGlzLGNvbnRhaW5lcjpmLGN1cnJlbnRJbmRleDpmLmdldEl0ZW1JbmRleCh0aGlzKX0pfSksdGhpcy5pc0RyYWdnaW5nKCkmJih0aGlzLl9kcm9wQ29udGFpbmVyLl9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGQsaCksdGhpcy5fZHJvcENvbnRhaW5lci5fc29ydEl0ZW0odGhp'@;
put 'cyxsLGEsdGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhKSx0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpOnRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LngsYS10aGlzLl9waWNr'@;
put 'dXBQb3NpdGlvbkluRWxlbWVudC55KSl9X2NyZWF0ZVByZXZpZXdFbGVtZW50KCl7Y29uc3QgbD10aGlzLl9wcmV2aWV3VGVtcGxhdGUsYT10aGlzLnByZXZpZXdDbGFzcyxkPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBoO2lmKGQmJmwpe2NvbnN0IGY9bC5tYXRjaFNpemU/dGhpcy5faW5pdGlh'@;
put 'bENsaWVudFJlY3Q6bnVsbCxfPWwudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZCxsLmNvbnRleHQpO18uZGV0ZWN0Q2hhbmdlcygpLGg9YXNlKF8sdGhpcy5fZG9jdW1lbnQpLHRoaXMuX3ByZXZpZXdSZWY9XyxsLm1hdGNoU2l6ZT9sc2UoaCxmKTpoLnN0eWxlLnRyYW5zZm9y'@;
put 'bT1LQSh0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpfWVsc2UgaD10c2UodGhpcy5fcm9vdEVsZW1lbnQpLGxzZShoLHRoaXMuX2luaXRpYWxDbGllbnRSZWN0KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtJiYoaC5zdHlsZS50cmFuc2Zv'@;
put 'cm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSk7cmV0dXJuIGVVKGguc3R5bGUseyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLG1hcmdpbjoiMCIscG9zaXRpb246ImZpeGVkIix0b3A6IjAiLGxlZnQ6IjAiLCJ6LWluZGV4IjpgJHt0aGlzLl9jb25maWcuekluZGV4fHwxZTN9YH0saVUpLHo3KGgs'@;
put 'ITEpLGguY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcHJldmlldyIpLGguc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuX2RpcmVjdGlvbiksYSYmKEFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGY9PmguY2xhc3NMaXN0LmFkZChmKSk6aC5jbGFzc0xpc3QuYWRkKGEpKSxofV9hbmltYXRlUHJl'@;
put 'dmlld1RvUGxhY2Vob2xkZXIoKXtpZighdGhpcy5faGFzTW92ZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGw9dGhpcy5fcGxhY2Vob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5fcHJldmlldy5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1hbmltYXRpbmciKSx0'@;
put 'aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obC5sZWZ0LGwudG9wKTtjb25zdCBhPWZ1bmN0aW9uIGRCZShjKXtjb25zdCBsPWdldENvbXB1dGVkU3R5bGUoYyksYT10VShsLCJ0cmFuc2l0aW9uLXByb3BlcnR5IiksZD1hLmZpbmQoVD0+InRyYW5zZm9ybSI9PT1UfHwiYWxsIj09PVQpO2lm'@;
put 'KCFkKXJldHVybiAwO2NvbnN0IGg9YS5pbmRleE9mKGQpLGY9dFUobCwidHJhbnNpdGlvbi1kdXJhdGlvbiIpLF89dFUobCwidHJhbnNpdGlvbi1kZWxheSIpO3JldHVybiBKb2UoZltoXSkrSm9lKF9baF0pfSh0aGlzLl9wcmV2aWV3KTtyZXR1cm4gMD09PWE/UHJvbWlzZS5yZXNvbHZlKCk6'@;
put 'dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uZXcgUHJvbWlzZShkPT57Y29uc3QgaD1fPT57KCFffHxHQShfKT09PXRoaXMuX3ByZXZpZXcmJiJ0cmFuc2Zvcm0iPT09Xy5wcm9wZXJ0eU5hbWUpJiYodGhpcy5fcHJldmlldz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNp'@;
put 'dGlvbmVuZCIsaCksZCgpLGNsZWFyVGltZW91dChmKSl9LGY9c2V0VGltZW91dChoLDEuNSphKTt0aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpfSkpfV9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKXtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyVGVt'@;
put 'cGxhdGUsYT1sP2wudGVtcGxhdGU6bnVsbDtsZXQgZDtyZXR1cm4gYT8odGhpcy5fcGxhY2Vob2xkZXJSZWY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhLGwuY29udGV4dCksdGhpcy5fcGxhY2Vob2xkZXJSZWYuZGV0ZWN0Q2hhbmdlcygpLGQ9YXNlKHRoaXMuX3BsYWNl'@;
put 'aG9sZGVyUmVmLHRoaXMuX2RvY3VtZW50KSk6ZD10c2UodGhpcy5fcm9vdEVsZW1lbnQpLGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wbGFjZWhvbGRlciIpLGR9X2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudChsLGEsZCl7Y29uc3Qg'@;
put 'aD1hPT09dGhpcy5fcm9vdEVsZW1lbnQ/bnVsbDphLGY9aD9oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOmwsXz1zdyhkKT9kLnRhcmdldFRvdWNoZXNbMF06ZCxUPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57eDpmLmxlZnQtbC5sZWZ0KyhfLnBhZ2VYLWYubGVm'@;
put 'dC1ULmxlZnQpLHk6Zi50b3AtbC50b3ArKF8ucGFnZVktZi50b3AtVC50b3ApfX1fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpe2NvbnN0IGE9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLGQ9c3cobCk/bC50b3VjaGVzWzBdfHxsLmNoYW5nZWRUb3VjaGVzWzBdfHx7cGFn'@;
put 'ZVg6MCxwYWdlWTowfTpsLGg9ZC5wYWdlWC1hLmxlZnQsZj1kLnBhZ2VZLWEudG9wO2lmKHRoaXMuX293bmVyU1ZHRWxlbWVudCl7Y29uc3QgXz10aGlzLl9vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCk7aWYoXyl7Y29uc3QgVD10aGlzLl9vd25lclNWR0VsZW1lbnQuY3JlYXRlU1ZH'@;
put 'UG9pbnQoKTtyZXR1cm4gVC54PWgsVC55PWYsVC5tYXRyaXhUcmFuc2Zvcm0oXy5pbnZlcnNlKCkpfX1yZXR1cm57eDpoLHk6Zn19X2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcj90aGlzLl9kcm9wQ29udGFpbmVyLmxvY2tBeGlz'@;
put 'Om51bGw7bGV0e3g6ZCx5Omh9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5jb25zdHJhaW5Qb3NpdGlvbihsLHRoaXMsdGhpcy5faW5pdGlhbENsaWVudFJlY3QsdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQpOmw7aWYoIngiPT09dGhpcy5sb2NrQXhpc3x8IngiPT09YT9oPXRo'@;
put 'aXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnk6KCJ5Ij09PXRoaXMubG9ja0F4aXN8fCJ5Ij09PWEpJiYoZD10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54KSx0aGlzLl9ib3VuZGFyeVJlY3Qpe2NvbnN0e3g6Zix5Ol99PXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LFQ9dGhpcy5f'@;
put 'Ym91bmRhcnlSZWN0LHt3aWR0aDpXLGhlaWdodDppZX09dGhpcy5fZ2V0UHJldmlld1JlY3QoKSxnZT1ULnRvcCtfLHdlPVQuYm90dG9tLShpZS1fKTtkPXNzZShkLFQubGVmdCtmLFQucmlnaHQtKFctZikpLGg9c3NlKGgsZ2Usd2UpfXJldHVybnt4OmQseTpofX1fdXBkYXRlUG9pbnRlckRp'@;
put 'cmVjdGlvbkRlbHRhKGwpe2NvbnN0e3g6YSx5OmR9PWwsaD10aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEsZj10aGlzLl9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2UsXz1NYXRoLmFicyhhLWYueCksVD1NYXRoLmFicyhkLWYueSk7cmV0dXJuIF8+dGhpcy5fY29uZmln'@;
put 'LnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihoLng9YT5mLng/MTotMSxmLng9YSksVD50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueT1kPmYueT8xOi0xLGYueT1kKSxofV90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCl7aWYo'@;
put 'IXRoaXMuX3Jvb3RFbGVtZW50fHwhdGhpcy5faGFuZGxlcylyZXR1cm47Y29uc3QgbD10aGlzLl9oYW5kbGVzLmxlbmd0aD4wfHwhdGhpcy5pc0RyYWdnaW5nKCk7bCE9PXRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQmJih0aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkPWws'@;
put 'ejcodGhpcy5fcm9vdEVsZW1lbnQsbCkpfV9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyhsKXtsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24scUEpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24s'@;
put 'b3NlKSxsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LHFBKX1fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShsLGEpe2NvbnN0IGQ9S0EobCxhKSxoPXRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlO251bGw9PXRoaXMuX2luaXRpYWxUcmFuc2Zv'@;
put 'cm0mJih0aGlzLl9pbml0aWFsVHJhbnNmb3JtPWgudHJhbnNmb3JtJiYibm9uZSIhPWgudHJhbnNmb3JtP2gudHJhbnNmb3JtOiIiKSxoLnRyYW5zZm9ybT0kQShkLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pfV9hcHBseVByZXZpZXdUcmFuc2Zvcm0obCxhKXtjb25zdCBkPXRoaXMuX3ByZXZp'@;
put 'ZXdUZW1wbGF0ZT8udGVtcGxhdGU/dm9pZCAwOnRoaXMuX2luaXRpYWxUcmFuc2Zvcm0saD1LQShsLGEpO3RoaXMuX3ByZXZpZXcuc3R5bGUudHJhbnNmb3JtPSRBKGgsZCl9X2dldERyYWdEaXN0YW5jZShsKXtjb25zdCBhPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiBhP3t4'@;
put 'OmwueC1hLngseTpsLnktYS55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQgMCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXts'@;
put 'ZXR7eDpsLHk6YX09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09bCYmMD09PWF8fHRoaXMuaXNEcmFnZ2luZygpfHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVybjtjb25zdCBkPXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9dGhpcy5fYm91bmRh'@;
put 'cnlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1oLndpZHRoJiYwPT09aC5oZWlnaHR8fDA9PT1kLndpZHRoJiYwPT09ZC5oZWlnaHQpcmV0dXJuO2NvbnN0IGY9aC5sZWZ0LWQubGVmdCxfPWQucmlnaHQtaC5yaWdodCxUPWgudG9wLWQudG9wLFc9ZC5ib3R0b20taC5i'@;
put 'b3R0b207aC53aWR0aD5kLndpZHRoPyhmPjAmJihsKz1mKSxfPjAmJihsLT1fKSk6bD0wLGguaGVpZ2h0PmQuaGVpZ2h0PyhUPjAmJihhKz1UKSxXPjAmJihhLT1XKSk6YT0wLChsIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54fHxhIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhp'@;
put 'cy5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHt5OmEseDpsfSl9X2dldERyYWdTdGFydERlbGF5KGwpe2NvbnN0IGE9dGhpcy5kcmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpzdyhsKT9hLnRvdWNoOmE/YS5tb3VzZTowfV91cGRhdGVPblNjcm9sbChsKXtjb25zdCBhPXRo'@;
put 'aXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7aWYoYSl7Y29uc3QgZD1HQShsKTt0aGlzLl9ib3VuZGFyeVJlY3QmJmQhPT10aGlzLl9ib3VuZGFyeUVsZW1lbnQmJmQuY29udGFpbnModGhpcy5fYm91bmRhcnlFbGVtZW50KSYmb3codGhpcy5fYm91bmRhcnlSZWN0LGEudG9w'@;
put 'LGEubGVmdCksdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9YS5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkrPWEudG9wLHRoaXMuX2Ryb3BDb250YWluZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueC09YS5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT1hLnRv'@;
put 'cCx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2Rv'@;
put 'Y3VtZW50KT8uc2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkU2hhZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9V29lKHRoaXMu'@;
put 'X3Jvb3RFbGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PWQpcmV0dXJuIGw7aWYoImdsb2JhbCI9PT1kKXtjb25zdCBoPXRoaXMu'@;
put 'X2RvY3VtZW50O3JldHVybiBhfHxoLmZ1bGxzY3JlZW5FbGVtZW50fHxoLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxoLm1vekZ1bGxTY3JlZW5FbGVtZW50fHxoLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGguYm9keX1yZXR1cm4gUDAoZCl9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlz'@;
put 'Ll9wcmV2aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVpZ2h0KSYmKHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsQ2xpZW50UmVjdCks'@;
put 'dGhpcy5fcHJldmlld1JlY3R9X2dldFRhcmdldEhhbmRsZShsKXtyZXR1cm4gdGhpcy5faGFuZGxlcy5maW5kKGE9PmwudGFyZ2V0JiYobC50YXJnZXQ9PT1hfHxhLmNvbnRhaW5zKGwudGFyZ2V0KSkpfX1mdW5jdGlvbiBLQShjLGwpe3JldHVybmB0cmFuc2xhdGUzZCgke01hdGgucm91bmQo'@;
put 'Yyl9cHgsICR7TWF0aC5yb3VuZChsKX1weCwgMClgfWZ1bmN0aW9uIHNzZShjLGwsYSl7cmV0dXJuIE1hdGgubWF4KGwsTWF0aC5taW4oYSxjKSl9ZnVuY3Rpb24gc3coYyl7cmV0dXJuInQiPT09Yy50eXBlWzBdfWZ1bmN0aW9uIGFzZShjLGwpe2NvbnN0IGE9Yy5yb290Tm9kZXM7aWYoMT09'@;
put 'PWEubGVuZ3RoJiZhWzBdLm5vZGVUeXBlPT09bC5FTEVNRU5UX05PREUpcmV0dXJuIGFbMF07Y29uc3QgZD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmZvckVhY2goaD0+ZC5hcHBlbmRDaGlsZChoKSksZH1mdW5jdGlvbiBsc2UoYyxsKXtjLnN0eWxlLndpZHRoPWAke2wud2lk'@;
put 'dGh9cHhgLGMuc3R5bGUuaGVpZ2h0PWAke2wuaGVpZ2h0fXB4YCxjLnN0eWxlLnRyYW5zZm9ybT1LQShsLmxlZnQsbC50b3ApfWZ1bmN0aW9uIGNzZShjLGwsYSl7Y29uc3QgZD1hdyhsLGMubGVuZ3RoLTEpLGg9YXcoYSxjLmxlbmd0aC0xKTtpZihkPT09aClyZXR1cm47Y29uc3QgZj1jW2Rd'@;
put 'LF89aDxkPy0xOjE7Zm9yKGxldCBUPWQ7VCE9PWg7VCs9XyljW1RdPWNbVCtfXTtjW2hdPWZ9ZnVuY3Rpb24gYXcoYyxsKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihsLGMpKX1jbGFzcyBtQmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fZHJhZ0Ryb3BSZWdp'@;
put 'c3RyeT1hLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX3ByZXZpb3VzU3dhcD17ZHJhZzpudWxsLGRlbHRhOjAsb3ZlcmxhcHM6ITF9fXN0YXJ0KGwpe3RoaXMud2l0aEl0ZW1zKGwpfXNvcnQobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9p'@;
put 'dGVtUG9zaXRpb25zLF89dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKTtpZigtMT09PV8mJmYubGVuZ3RoPjApcmV0dXJuIG51bGw7Y29uc3QgVD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLFc9Zi5maW5kSW5kZXgoeXQ9Pnl0LmRyYWc9PT1s'@;
put 'KSxpZT1mW19dLHdlPWllLmNsaWVudFJlY3QsRWU9Vz5fPzE6LTEsWmU9dGhpcy5fZ2V0SXRlbU9mZnNldFB4KGZbV10uY2xpZW50UmVjdCx3ZSxFZSksb3Q9dGhpcy5fZ2V0U2libGluZ09mZnNldFB4KFcsZixFZSksZXQ9Zi5zbGljZSgpO3JldHVybiBjc2UoZixXLF8pLGYuZm9yRWFjaCgo'@;
put 'eXQsa3QpPT57aWYoZXRba3RdPT09eXQpcmV0dXJuO2NvbnN0IFN0PXl0LmRyYWc9PT1sLFF0PVN0P1plOm90LHJuPVN0P2wuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6eXQuZHJhZy5nZXRSb290RWxlbWVudCgpO3l0Lm9mZnNldCs9UXQsVD8ocm4uc3R5bGUudHJhbnNmb3JtPSRBKGB0cmFu'@;
put 'c2xhdGUzZCgke01hdGgucm91bmQoeXQub2Zmc2V0KX1weCwgMCwgMClgLHl0LmluaXRpYWxUcmFuc2Zvcm0pLG93KHl0LmNsaWVudFJlY3QsMCxRdCkpOihybi5zdHlsZS50cmFuc2Zvcm09JEEoYHRyYW5zbGF0ZTNkKDAsICR7TWF0aC5yb3VuZCh5dC5vZmZzZXQpfXB4LCAwKWAseXQuaW5p'@;
put 'dGlhbFRyYW5zZm9ybSksb3coeXQuY2xpZW50UmVjdCxRdCwwKSl9KSx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9clUod2UsYSxkKSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1pZS5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1UP2gueDpoLnkse3ByZXZpb3VzSW5kZXg6Vyxj'@;
put 'dXJyZW50SW5kZXg6X319ZW50ZXIobCxhLGQsaCl7Y29uc3QgZj1udWxsPT1ofHxoPDA/dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCk6aCxfPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsVD1fLmluZGV4T2YobCksVz1sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgp'@;
put 'O2xldCBpZT1fW2ZdO2lmKGllPT09bCYmKGllPV9bZisxXSksIWllJiYobnVsbD09Znx8LTE9PT1mfHxmPF8ubGVuZ3RoLTEpJiZ0aGlzLl9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChhLGQpJiYoaWU9X1swXSksVD4tMSYmXy5zcGxpY2UoVCwxKSxpZSYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0'@;
put 'cnkuaXNEcmFnZ2luZyhpZSkpe2NvbnN0IGdlPWllLmdldFJvb3RFbGVtZW50KCk7Z2UucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoVyxnZSksXy5zcGxpY2UoZiwwLGwpfWVsc2UgUDAodGhpcy5fZWxlbWVudCkuYXBwZW5kQ2hpbGQoVyksXy5wdXNoKGwpO1cuc3R5bGUudHJhbnNmb3Jt'@;
put 'PSIiLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhJdGVtcyhsKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPWwuc2xpY2UoKSx0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoU29ydFByZWRpY2F0ZShsKXt0aGlzLl9zb3J0UHJlZGljYXRlPWx9cmVzZXQoKXt0aGlzLl9hY3Rp'@;
put 'dmVEcmFnZ2FibGVzLmZvckVhY2gobD0+e2NvbnN0IGE9bC5nZXRSb290RWxlbWVudCgpO2lmKGEpe2NvbnN0IGQ9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kKGg9PmguZHJhZz09PWwpPy5pbml0aWFsVHJhbnNmb3JtO2Euc3R5bGUudHJhbnNmb3JtPWR8fCIifX0pLHRoaXMuX2l0ZW1Qb3Np'@;
put 'dGlvbnM9W10sdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1bXSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1udWxsLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT0wLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz0hMX1nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCl7cmV0dXJuIHRoaXMuX2FjdGl2'@;
put 'ZURyYWdnYWJsZXN9Z2V0SXRlbUluZGV4KGwpe3JldHVybigiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiYicnRsIj09PXRoaXMuZGlyZWN0aW9uP3RoaXMuX2l0ZW1Qb3NpdGlvbnMuc2xpY2UoKS5yZXZlcnNlKCk6dGhpcy5faXRlbVBvc2l0aW9ucykuZmluZEluZGV4KGQ9PmQu'@;
put 'ZHJhZz09PWwpfXVwZGF0ZU9uU2Nyb2xsKGwsYSl7dGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7Y2xpZW50UmVjdDpkfSk9PntvdyhkLGwsYSl9KSx0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtkcmFnOmR9KT0+e3RoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhk'@;
put 'KSYmZC5fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl9KX1fY2FjaGVJdGVtUG9zaXRpb25zKCl7Y29uc3QgbD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO3RoaXMuX2l0ZW1Qb3NpdGlvbnM9dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5tYXAoYT0+e2NvbnN0IGQ9YS5nZXRW'@;
put 'aXNpYmxlRWxlbWVudCgpO3JldHVybntkcmFnOmEsb2Zmc2V0OjAsaW5pdGlhbFRyYW5zZm9ybTpkLnN0eWxlLnRyYW5zZm9ybXx8IiIsY2xpZW50UmVjdDpuVShkKX19KS5zb3J0KChhLGQpPT5sP2EuY2xpZW50UmVjdC5sZWZ0LWQuY2xpZW50UmVjdC5sZWZ0OmEuY2xpZW50UmVjdC50b3At'@;
put 'ZC5jbGllbnRSZWN0LnRvcCl9X2dldEl0ZW1PZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2xldCBmPWg/YS5sZWZ0LWwubGVmdDphLnRvcC1sLnRvcDtyZXR1cm4tMT09PWQmJihmKz1oP2Eud2lkdGgtbC53aWR0aDphLmhlaWdodC1sLmhl'@;
put 'aWdodCksZn1fZ2V0U2libGluZ09mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sZj1hW2xdLmNsaWVudFJlY3QsXz1hW2wrLTEqZF07bGV0IFQ9ZltoPyJ3aWR0aCI6ImhlaWdodCJdKmQ7aWYoXyl7Y29uc3QgVz1oPyJsZWZ0IjoidG9wIixp'@;
put 'ZT1oPyJyaWdodCI6ImJvdHRvbSI7LTE9PT1kP1QtPV8uY2xpZW50UmVjdFtXXS1mW2llXTpUKz1mW1ddLV8uY2xpZW50UmVjdFtpZV19cmV0dXJuIFR9X3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGwsYSl7aWYoIXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubGVuZ3RoKXJldHVybiExO2NvbnN0'@;
put 'IGQ9dGhpcy5faXRlbVBvc2l0aW9ucyxoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247aWYoZFswXS5kcmFnIT09dGhpcy5fYWN0aXZlRHJhZ2dhYmxlc1swXSl7Y29uc3QgXz1kW2QubGVuZ3RoLTFdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bD49Xy5yaWdodDphPj1fLmJvdHRvbX17'@;
put 'Y29uc3QgXz1kWzBdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bDw9Xy5sZWZ0OmE8PV8udG9wfX1fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKXtjb25zdCBmPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sXz10aGlzLl9pdGVtUG9zaXRpb25zLmZpbmRJbmRl'@;
put 'eCgoe2RyYWc6VCxjbGllbnRSZWN0Old9KT0+VCE9PWwmJigoIWh8fFQhPT10aGlzLl9wcmV2aW91c1N3YXAuZHJhZ3x8IXRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwc3x8KGY/aC54OmgueSkhPT10aGlzLl9wcmV2aW91c1N3YXAuZGVsdGEpJiYoZj9hPj1NYXRoLmZsb29yKFcubGVmdCkm'@;
put 'JmE8TWF0aC5mbG9vcihXLnJpZ2h0KTpkPj1NYXRoLmZsb29yKFcudG9wKSYmZDxNYXRoLmZsb29yKFcuYm90dG9tKSkpKTtyZXR1cm4tMSE9PV8mJnRoaXMuX3NvcnRQcmVkaWNhdGUoXyxsKT9fOi0xfX1jbGFzcyB2QmV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLl9kcmFnRHJvcFJl'@;
put 'Z2lzdHJ5PWEsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsU3RlcD0yLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRo'@;
put 'aXMuc29ydFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBiZSx0aGlzLmVudGVyZWQ9bmV3IGJlLHRoaXMuZXhpdGVkPW5ldyBiZSx0aGlzLmRyb3BwZWQ9bmV3IGJlLHRoaXMuc29ydGVkPW5ldyBiZSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQ9bmV3IGJlLHRoaXMucmVj'@;
put 'ZWl2aW5nU3RvcHBlZD1uZXcgYmUsdGhpcy5faXNEcmFnZ2luZz0hMSx0aGlzLl9kcmFnZ2FibGVzPVtdLHRoaXMuX3NpYmxpbmdzPVtdLHRoaXMuX2FjdGl2ZVNpYmxpbmdzPW5ldyBTZXQsdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249ZWUuRU1QVFksdGhpcy5fdmVydGljYWxT'@;
put 'Y3JvbGxEaXJlY3Rpb249MCx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPTAsdGhpcy5fc3RvcFNjcm9sbFRpbWVycz1uZXcgYmUsdGhpcy5fY2FjaGVkU2hhZG93Um9vdD1udWxsLHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWw9KCk9Pnt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksZnVu'@;
put 'Y3Rpb24gc0JlKGM9MCxsPWliKXtyZXR1cm4gYzwwJiYoYz0wKSxqUChjLGMsbCl9KDAsam9lKS5waXBlKGFoKHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMpKS5zdWJzY3JpYmUoKCk9Pntjb25zdCBfPXRoaXMuX3Njcm9sbE5vZGUsVD10aGlzLmF1dG9TY3JvbGxTdGVwOzE9PT10aGlzLl92ZXJ0'@;
put 'aWNhbFNjcm9sbERpcmVjdGlvbj9fLnNjcm9sbEJ5KDAsLVQpOjI9PT10aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiYmXy5zY3JvbGxCeSgwLFQpLDE9PT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uP18uc2Nyb2xsQnkoLVQsMCk6Mj09PXRoaXMuX2hvcml6b250YWxTY3Jv'@;
put 'bGxEaXJlY3Rpb24mJl8uc2Nyb2xsQnkoVCwwKX0pfSx0aGlzLmVsZW1lbnQ9UDAobCksdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLndpdGhTY3JvbGxhYmxlUGFyZW50cyhbdGhpcy5lbGVtZW50XSksYS5yZWdpc3RlckRyb3BDb250YWluZXIodGhpcyksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5l'@;
put 'dyBlc2UoZCksdGhpcy5fc29ydFN0cmF0ZWd5PW5ldyBtQmUodGhpcy5lbGVtZW50LGEpLHRoaXMuX3NvcnRTdHJhdGVneS53aXRoU29ydFByZWRpY2F0ZSgoXyxUKT0+dGhpcy5zb3J0UHJlZGljYXRlKF8sVCx0aGlzKSl9ZGlzcG9zZSgpe3RoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9z'@;
put 'dG9wU2Nyb2xsVGltZXJzLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5j'@;
put 'b21wbGV0ZSgpLHRoaXMuc29ydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLmNvbXBsZXRlKCksdGhpcy5fYWN0aXZlU2libGluZ3MuY2xlYXIoKSx0aGlzLl9zY3JvbGxOb2RlPW51bGwsdGhpcy5fcGFyZW50UG9z'@;
put 'aXRpb25zLmNsZWFyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcm9wQ29udGFpbmVyKHRoaXMpfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZ31zdGFydCgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl9'@;
put 'ZW50ZXIobCxhLGQsaCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksbnVsbD09aCYmdGhpcy5zb3J0aW5nRGlzYWJsZWQmJihoPXRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKSksdGhpcy5fc29ydFN0cmF0ZWd5LmVudGVyKGwsYSxkLGgpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCks'@;
put 'dGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzLGN1cnJlbnRJbmRleDp0aGlzLmdldEl0ZW1JbmRleChsKX0pfWV4aXQobCl7dGhpcy5fcmVzZXQoKSx0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVy'@;
put 'OnRoaXN9KX1kcm9wKGwsYSxkLGgsZixfLFQsVz17fSl7dGhpcy5fcmVzZXQoKSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTpsLGN1cnJlbnRJbmRleDphLHByZXZpb3VzSW5kZXg6ZCxjb250YWluZXI6dGhpcyxwcmV2aW91c0NvbnRhaW5lcjpoLGlzUG9pbnRlck92ZXJDb250YWluZXI6Zixk'@;
put 'aXN0YW5jZTpfLGRyb3BQb2ludDpULGV2ZW50Old9KX13aXRoSXRlbXMobCl7Y29uc3QgYT10aGlzLl9kcmFnZ2FibGVzO3JldHVybiB0aGlzLl9kcmFnZ2FibGVzPWwsbC5mb3JFYWNoKGQ9PmQuX3dpdGhEcm9wQ29udGFpbmVyKHRoaXMpKSx0aGlzLmlzRHJhZ2dpbmcoKSYmKGEuZmlsdGVy'@;
put 'KGg9PmguaXNEcmFnZ2luZygpKS5ldmVyeShoPT4tMT09PWwuaW5kZXhPZihoKSk/dGhpcy5fcmVzZXQoKTp0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aEl0ZW1zKHRoaXMuX2RyYWdnYWJsZXMpKSx0aGlzfXdpdGhEaXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rp'@;
put 'b249bCx0aGlzfWNvbm5lY3RlZFRvKGwpe3JldHVybiB0aGlzLl9zaWJsaW5ncz1sLnNsaWNlKCksdGhpc313aXRoT3JpZW50YXRpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5vcmllbnRhdGlvbj1sLHRoaXN9d2l0aFNjcm9sbGFibGVQYXJlbnRzKGwpe2NvbnN0IGE9UDAodGhp'@;
put 'cy5lbGVtZW50KTtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzPS0xPT09bC5pbmRleE9mKGEpP1thLC4uLmxdOmwuc2xpY2UoKSx0aGlzfWdldFNjcm9sbGFibGVQYXJlbnRzKCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50c31nZXRJdGVtSW5kZXgobCl7cmV0dXJuIHRo'@;
put 'aXMuX2lzRHJhZ2dpbmc/dGhpcy5fc29ydFN0cmF0ZWd5LmdldEl0ZW1JbmRleChsKTp0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCl9aXNSZWNlaXZpbmcoKXtyZXR1cm4gdGhpcy5fYWN0aXZlU2libGluZ3Muc2l6ZT4wfV9zb3J0SXRlbShsLGEsZCxoKXtpZih0aGlzLnNvcnRpbmdEaXNh'@;
put 'YmxlZHx8IXRoaXMuX2NsaWVudFJlY3R8fCFRb2UodGhpcy5fY2xpZW50UmVjdCwuMDUsYSxkKSlyZXR1cm47Y29uc3QgZj10aGlzLl9zb3J0U3RyYXRlZ3kuc29ydChsLGEsZCxoKTtmJiZ0aGlzLnNvcnRlZC5uZXh0KHtwcmV2aW91c0luZGV4OmYucHJldmlvdXNJbmRleCxjdXJyZW50SW5k'@;
put 'ZXg6Zi5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMsaXRlbTpsfSl9X3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkobCxhKXtpZih0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZClyZXR1cm47bGV0IGQsaD0wLGY9MDtpZih0aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmZvckVhY2go'@;
put 'KF8sVCk9PntUPT09dGhpcy5fZG9jdW1lbnR8fCFfLmNsaWVudFJlY3R8fGR8fFFvZShfLmNsaWVudFJlY3QsLjA1LGwsYSkmJihbaCxmXT1mdW5jdGlvbiBfQmUoYyxsLGEsZCl7Y29uc3QgaD1oc2UobCxkKSxmPWZzZShsLGEpO2xldCBfPTAsVD0wO2lmKGgpe2NvbnN0IFc9Yy5zY3JvbGxU'@;
put 'b3A7MT09PWg/Vz4wJiYoXz0xKTpjLnNjcm9sbEhlaWdodC1XPmMuY2xpZW50SGVpZ2h0JiYoXz0yKX1pZihmKXtjb25zdCBXPWMuc2Nyb2xsTGVmdDsxPT09Zj9XPjAmJihUPTEpOmMuc2Nyb2xsV2lkdGgtVz5jLmNsaWVudFdpZHRoJiYoVD0yKX1yZXR1cm5bXyxUXX0oVCxfLmNsaWVudFJl'@;
put 'Y3QsbCxhKSwoaHx8ZikmJihkPVQpKX0pLCFoJiYhZil7Y29uc3R7d2lkdGg6XyxoZWlnaHQ6VH09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxXPXt3aWR0aDpfLGhlaWdodDpULHRvcDowLHJpZ2h0Ol8sYm90dG9tOlQsbGVmdDowfTtoPWhzZShXLGEpLGY9ZnNlKFcs'@;
put 'bCksZD13aW5kb3d9ZCYmKGghPT10aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbnx8ZiE9PXRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb258fGQhPT10aGlzLl9zY3JvbGxOb2RlKSYmKHRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPWgsdGhpcy5faG9yaXpvbnRhbFNjcm9s'@;
put 'bERpcmVjdGlvbj1mLHRoaXMuX3Njcm9sbE5vZGU9ZCwoaHx8ZikmJmQ/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWwpOnRoaXMuX3N0b3BTY3JvbGxpbmcoKSl9X3N0b3BTY3JvbGxpbmcoKXt0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLm5l'@;
put 'eHQoKX1fZHJhZ2dpbmdTdGFydGVkKCl7Y29uc3QgbD1QMCh0aGlzLmVsZW1lbnQpLnN0eWxlO3RoaXMuYmVmb3JlU3RhcnRlZC5uZXh0KCksdGhpcy5faXNEcmFnZ2luZz0hMCx0aGlzLl9pbml0aWFsU2Nyb2xsU25hcD1sLm1zU2Nyb2xsU25hcFR5cGV8fGwuc2Nyb2xsU25hcFR5cGV8fCIi'@;
put 'LGwuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPSJub25lIix0aGlzLl9zb3J0U3RyYXRlZ3kuc3RhcnQodGhpcy5fZHJhZ2dhYmxlcyksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRo'@;
put 'aXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl9X2NhY2hlUGFyZW50UG9zaXRpb25zKCl7Y29uc3QgbD1QMCh0aGlzLmVsZW1lbnQpO3RoaXMuX3BhcmVudFBvc2l0aW9ucy5jYWNoZSh0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHMpLHRoaXMuX2NsaWVudFJlY3Q9dGhpcy5fcGFyZW50UG9zaXRp'@;
put 'b25zLnBvc2l0aW9ucy5nZXQobCkuY2xpZW50UmVjdH1fcmVzZXQoKXt0aGlzLl9pc0RyYWdnaW5nPSExO2NvbnN0IGw9UDAodGhpcy5lbGVtZW50KS5zdHlsZTtsLnNjcm9sbFNuYXBUeXBlPWwubXNTY3JvbGxTbmFwVHlwZT10aGlzLl9pbml0aWFsU2Nyb2xsU25hcCx0aGlzLl9zaWJsaW5n'@;
put 'cy5mb3JFYWNoKGE9PmEuX3N0b3BSZWNlaXZpbmcodGhpcykpLHRoaXMuX3NvcnRTdHJhdGVneS5yZXNldCgpLHRoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9p'@;
put 'c092ZXJDb250YWluZXIobCxhKXtyZXR1cm4gbnVsbCE9dGhpcy5fY2xpZW50UmVjdCYmclUodGhpcy5fY2xpZW50UmVjdCxsLGEpfV9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKGwsYSxkKXtyZXR1cm4gdGhpcy5fc2libGluZ3MuZmluZChoPT5oLl9jYW5SZWNlaXZlKGwsYSxk'@;
put 'KSl9X2NhblJlY2VpdmUobCxhLGQpe2lmKCF0aGlzLl9jbGllbnRSZWN0fHwhclUodGhpcy5fY2xpZW50UmVjdCxhLGQpfHwhdGhpcy5lbnRlclByZWRpY2F0ZShsLHRoaXMpKXJldHVybiExO2NvbnN0IGg9dGhpcy5fZ2V0U2hhZG93Um9vdCgpLmVsZW1lbnRGcm9tUG9pbnQoYSxkKTtpZigh'@;
put 'aClyZXR1cm4hMTtjb25zdCBmPVAwKHRoaXMuZWxlbWVudCk7cmV0dXJuIGg9PT1mfHxmLmNvbnRhaW5zKGgpfV9zdGFydFJlY2VpdmluZyhsLGEpe2NvbnN0IGQ9dGhpcy5fYWN0aXZlU2libGluZ3M7IWQuaGFzKGwpJiZhLmV2ZXJ5KGg9PnRoaXMuZW50ZXJQcmVkaWNhdGUoaCx0aGlzKXx8'@;
put 'dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGgpPi0xKSYmKGQuYWRkKGwpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQubmV4dCh7aW5pdGlhdG9yOmwscmVjZWl2ZXI6dGhpcyxpdGVtczphfSkp'@;
put 'fV9zdG9wUmVjZWl2aW5nKGwpe3RoaXMuX2FjdGl2ZVNpYmxpbmdzLmRlbGV0ZShsKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMucmVjZWl2aW5nU3RvcHBlZC5uZXh0KHtpbml0aWF0b3I6bCxyZWNlaXZlcjp0aGlzfSl9X2xpc3RlblRvU2Ny'@;
put 'b2xsRXZlbnRzKCl7dGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZShsPT57aWYodGhpcy5pc0RyYWdnaW5nKCkpe2NvbnN0IGE9dGhpcy5fcGFyZW50UG9zaXRpb25z'@;
put 'LmhhbmRsZVNjcm9sbChsKTthJiZ0aGlzLl9zb3J0U3RyYXRlZ3kudXBkYXRlT25TY3JvbGwoYS50b3AsYS5sZWZ0KX1lbHNlIHRoaXMuaXNSZWNlaXZpbmcoKSYmdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKX0pfV9nZXRTaGFkb3dSb290KCl7aWYoIXRoaXMuX2NhY2hlZFNoYWRvd1Jv'@;
put 'b3Qpe2NvbnN0IGw9V29lKFAwKHRoaXMuZWxlbWVudCkpO3RoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bHx8dGhpcy5fZG9jdW1lbnR9cmV0dXJuIHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3R9X25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl7Y29uc3QgbD10aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0QWN0'@;
put 'aXZlSXRlbXNTbmFwc2hvdCgpLmZpbHRlcihhPT5hLmlzRHJhZ2dpbmcoKSk7dGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdGFydFJlY2VpdmluZyh0aGlzLGwpKX19ZnVuY3Rpb24gaHNlKGMsbCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsaGVpZ2h0Omh9PWMsZj0uMDUqaDtyZXR1cm4g'@;
put 'bD49YS1mJiZsPD1hK2Y/MTpsPj1kLWYmJmw8PWQrZj8yOjB9ZnVuY3Rpb24gZnNlKGMsbCl7Y29uc3R7bGVmdDphLHJpZ2h0OmQsd2lkdGg6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj8xOmw+PWQtZiYmbDw9ZCtmPzI6MH1jb25zdCBYQT1pdyh7cGFzc2l2ZTohMSxjYXB0'@;
put 'dXJlOiEwfSk7bGV0IGJCZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5fZHJvcEluc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2RyYWdJbnN0YW5jZXM9bmV3IFNldCx0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzPVtdLHRoaXMuX2dsb2JhbExpc3Rl'@;
put 'bmVycz1uZXcgTWFwLHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlPWg9PmguaXNEcmFnZ2luZygpLHRoaXMucG9pbnRlck1vdmU9bmV3IGJlLHRoaXMucG9pbnRlclVwPW5ldyBiZSx0aGlzLnNjcm9sbD1uZXcgYmUsdGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nPWg9Pnt0aGlzLl9h'@;
put 'Y3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiZoLnByZXZlbnREZWZhdWx0KCl9LHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcj1oPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGg+MCYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuc29tZSh0aGlzLl9kcmFn'@;
put 'Z2luZ1ByZWRpY2F0ZSkmJmgucHJldmVudERlZmF1bHQoKSx0aGlzLnBvaW50ZXJNb3ZlLm5leHQoaCkpfSx0aGlzLl9kb2N1bWVudD1kfXJlZ2lzdGVyRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmhhcyhhKXx8dGhpcy5fZHJvcEluc3RhbmNlcy5hZGQoYSl9cmVnaXN0'@;
put 'ZXJEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmFkZChhKSwxPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3Rl'@;
put 'bnRUb3VjaG1vdmVMaXN0ZW5lcixYQSl9KX1yZW1vdmVEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuZGVsZXRlKGEpfXJlbW92ZURyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZGVsZXRlKGEpLHRoaXMuc3RvcERyYWdnaW5nKGEpLDA9PT10aGlzLl9kcmFnSW5z'@;
put 'dGFuY2VzLnNpemUmJnRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLFhBKX1zdGFydERyYWdnaW5nKGEsZCl7aWYoISh0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk+LTEpJiYo'@;
put 'dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5wdXNoKGEpLDE9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCkpe2NvbnN0IGg9ZC50eXBlLnN0YXJ0c1dpdGgoInRvdWNoIik7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNldChoPyJ0b3VjaGVuZCI6Im1vdXNldXAiLHtoYW5kbGVy'@;
put 'OmY9PnRoaXMucG9pbnRlclVwLm5leHQoZiksb3B0aW9uczohMH0pLnNldCgic2Nyb2xsIix7aGFuZGxlcjpmPT50aGlzLnNjcm9sbC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5zZXQoInNlbGVjdHN0YXJ0Iix7aGFuZGxlcjp0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmcsb3B0aW9u'@;
put 'czpYQX0pLGh8fHRoaXMuX2dsb2JhbExpc3RlbmVycy5zZXQoIm1vdXNlbW92ZSIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyTW92ZS5uZXh0KGYpLG9wdGlvbnM6WEF9KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgo'@;
put 'ZixfKT0+e3RoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXyxmLmhhbmRsZXIsZi5vcHRpb25zKX0pfSl9fXN0b3BEcmFnZ2luZyhhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKTtkPi0xJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zcGxp'@;
put 'Y2UoZCwxKSwwPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJnRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCkpfWlzRHJhZ2dpbmcoYSl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKT4tMX1zY3JvbGxlZChhKXtjb25zdCBkPVt0aGlzLnNj'@;
put 'cm9sbF07cmV0dXJuIGEmJmEhPT10aGlzLl9kb2N1bWVudCYmZC5wdXNoKG5ldyBLZShoPT50aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBfPVQ9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCYmaC5uZXh0KFQpfTtyZXR1cm4gYS5hZGRFdmVudExp'@;
put 'c3RlbmVyKCJzY3JvbGwiLF8sITApLCgpPT57YS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLF8sITApfX0pKSksaXMoLi4uZCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcmFnSXRlbShhKSksdGhpcy5fZHJvcEluc3RhbmNl'@;
put 'cy5mb3JFYWNoKGE9PnRoaXMucmVtb3ZlRHJvcENvbnRhaW5lcihhKSksdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSx0aGlzLnBvaW50ZXJNb3ZlLmNvbXBsZXRlKCksdGhpcy5wb2ludGVyVXAuY29tcGxldGUoKX1fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKXt0aGlzLl9nbG9iYWxMaXN0'@;
put 'ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxhLmhhbmRsZXIsYS5vcHRpb25zKX0pLHRoaXMuX2dsb2JhbExpc3RlbmVycy5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihO'@;
put 'byksYXIoTHMpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCB5QmU9e2RyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NX07bGV0IG9VPSgoKT0+e2Ns'@;
put 'YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl92aWV3cG9ydFJ1bGVyPWgsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1mfWNyZWF0ZURyYWcoYSxkPXlCZSl7cmV0dXJuIG5ldyBwQmUoYSxkLHRoaXMuX2RvY3VtZW50LHRoaXMu'@;
put 'X25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkpfWNyZWF0ZURyb3BMaXN0KGEpe3JldHVybiBuZXcgdkJlKGEsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcil9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExzKSxhcihObyksYXIoVVZlKSxhcihiQmUpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBzVT1uZXcgTWkoIkNE'@;
put 'S19EUkFHX1BBUkVOVCIpLGFVPW5ldyBNaSgiQ2RrRHJvcExpc3RHcm91cCIpO2xldCBwc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1zPW5ldyBTZXQsdGhpcy5fZGlzYWJsZWQ9ITF9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNh'@;
put 'YmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hNChhKX1uZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdEdy'@;
put 'b3VwIiwiIl1dLGlucHV0czp7ZGlzYWJsZWQ6WyJjZGtEcm9wTGlzdEdyb3VwRGlzYWJsZWQiLCJkaXNhYmxlZCJdfSxleHBvcnRBczpbImNka0Ryb3BMaXN0R3JvdXAiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6YVUsdXNlRXhpc3Rpbmc6Y31dKV19KSxjfSkoKTtj'@;
put 'b25zdCBnc2U9bmV3IE1pKCJDREtfRFJBR19DT05GSUciKTtsZXQgd0JlPTA7Y29uc3QgbXNlPW5ldyBNaSgiQ2RrRHJvcExpc3QiKTtsZXQgdnNlPSgoKT0+e2NsYXNzIGN7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhIXRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5k'@;
put 'aXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZHJvcExpc3RSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQ9YTQoYSl9Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyl7dGhpcy5lbGVtZW50PWEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aCx0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWYs'@;
put 'dGhpcy5fZGlyPV8sdGhpcy5fZ3JvdXA9VCx0aGlzLl9kZXN0cm95ZWQ9bmV3IGJlLHRoaXMuY29ubmVjdGVkVG89W10sdGhpcy5pZD0iY2RrLWRyb3AtbGlzdC0iK3dCZSsrLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRoaXMuc29ydFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5kcm9wcGVk'@;
put 'PW5ldyBFcix0aGlzLmVudGVyZWQ9bmV3IEVyLHRoaXMuZXhpdGVkPW5ldyBFcix0aGlzLnNvcnRlZD1uZXcgRXIsdGhpcy5fdW5zb3J0ZWRJdGVtcz1uZXcgU2V0LHRoaXMuX2Ryb3BMaXN0UmVmPWQuY3JlYXRlRHJvcExpc3QoYSksdGhpcy5fZHJvcExpc3RSZWYuZGF0YT10aGlzLFcmJnRo'@;
put 'aXMuX2Fzc2lnbkRlZmF1bHRzKFcpLHRoaXMuX2Ryb3BMaXN0UmVmLmVudGVyUHJlZGljYXRlPShpZSxnZSk9PnRoaXMuZW50ZXJQcmVkaWNhdGUoaWUuZGF0YSxnZS5kYXRhKSx0aGlzLl9kcm9wTGlzdFJlZi5zb3J0UHJlZGljYXRlPShpZSxnZSx3ZSk9PnRoaXMuc29ydFByZWRpY2F0ZShp'@;
put 'ZSxnZS5kYXRhLHdlLmRhdGEpLHRoaXMuX3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKHRoaXMuX2Ryb3BMaXN0UmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJvcExpc3RSZWYpLGMuX2Ryb3BMaXN0cy5wdXNoKHRoaXMpLFQmJlQuX2l0ZW1zLmFkZCh0aGlzKX1hZGRJdGVtKGEp'@;
put 'e3RoaXMuX3Vuc29ydGVkSXRlbXMuYWRkKGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfXJlbW92ZUl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5kZWxldGUoYSksdGhpcy5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlz'@;
put 'Ll9zeW5jSXRlbXNXaXRoUmVmKCl9Z2V0U29ydGVkSXRlbXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl91bnNvcnRlZEl0ZW1zKS5zb3J0KChhLGQpPT5hLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZC5fZHJhZ1JlZi5nZXRWaXNpYmxl'@;
put 'RWxlbWVudCgpKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORz8tMToxKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9Yy5fZHJvcExpc3RzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJvcExpc3RzLnNwbGljZShhLDEpLHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZGVs'@;
put 'ZXRlKHRoaXMpLHRoaXMuX3Vuc29ydGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9kcm9wTGlzdFJlZi5kaXNwb3NlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24oYSl7dGhpcy5fZGlyJiZ0aGlzLl9k'@;
put 'aXIuY2hhbmdlLnBpcGUoY3AodGhpcy5fZGlyLnZhbHVlKSxhaCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZD0+YS53aXRoRGlyZWN0aW9uKGQpKSxhLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBrVmUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXko'@;
put 'Yyk/YzpbY119KHRoaXMuY29ubmVjdGVkVG8pLm1hcChoPT4ic3RyaW5nIj09dHlwZW9mIGg/Yy5fZHJvcExpc3RzLmZpbmQoXz0+Xy5pZD09PWgpOmgpO2lmKHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZm9yRWFjaChoPT57LTE9PT1kLmluZGV4T2YoaCkmJmQucHVzaChoKX0p'@;
put 'LCF0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkKXtjb25zdCBoPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuZWxlbWVudCkubWFwKGY9PmYuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQpO3RoaXMuX2Ryb3BMaXN0UmVm'@;
put 'LndpdGhTY3JvbGxhYmxlUGFyZW50cyhoKSx0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkPSEwfWEuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5zb3J0aW5nRGlzYWJsZWQ9YTQodGhpcy5zb3J0aW5nRGlzYWJsZWQpLGEuYXV0b1Njcm9s'@;
put 'bERpc2FibGVkPWE0KHRoaXMuYXV0b1Njcm9sbERpc2FibGVkKSxhLmF1dG9TY3JvbGxTdGVwPUJvZSh0aGlzLmF1dG9TY3JvbGxTdGVwLDIpLGEuY29ubmVjdGVkVG8oZC5maWx0ZXIoaD0+aCYmaCE9PXRoaXMpLm1hcChoPT5oLl9kcm9wTGlzdFJlZikpLndpdGhPcmllbnRhdGlvbih0aGlz'@;
put 'Lm9yaWVudGF0aW9uKX0pfV9oYW5kbGVFdmVudHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJl'@;
put 'ZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSksdGhpcy5fY2hhbmdlRGV0ZWN0'@;
put 'b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnNvcnRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuc29ydGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSl9KSxhLmRyb3Bw'@;
put 'ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxp'@;
put 'dGVtOmQuaXRlbS5kYXRhLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGlz'@;
put 'KGEucmVjZWl2aW5nU3RhcnRlZCxhLnJlY2VpdmluZ1N0b3BwZWQpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHtsb2NrQXhpczpkLGRyYWdnaW5nRGlzYWJsZWQ6aCxzb3J0aW5nRGlzYWJsZWQ6'@;
put 'ZixsaXN0QXV0b1Njcm9sbERpc2FibGVkOl8sbGlzdE9yaWVudGF0aW9uOlR9PWE7dGhpcy5kaXNhYmxlZD1oPz8hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD1mPz8hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD1fPz8hMSx0aGlzLm9yaWVudGF0aW9uPVR8fCJ2ZXJ0aWNhbCIsZCYmKHRoaXMu'@;
put 'bG9ja0F4aXM9ZCl9X3N5bmNJdGVtc1dpdGhSZWYoKXt0aGlzLl9kcm9wTGlzdFJlZi53aXRoSXRlbXModGhpcy5nZXRTb3J0ZWRJdGVtcygpLm1hcChhPT5hLl9kcmFnUmVmKSl9fXJldHVybiBjLl9kcm9wTGlzdHM9W10sYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KSh0dChOaSksdHQob1UpLHR0KFVhKSx0dChqVmUpLHR0KEtvZSw4KSx0dChhVSwxMiksdHQoZ3NlLDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3QiLCIiXSxbImNkay1kcm9wLWxpc3QiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJvcC1saXN0'@;
put 'Il0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigiaWQiLGQuaWQpLGRyKCJjZGstZHJvcC1saXN0LWRpc2FibGVkIixkLmRpc2FibGVkKSgiY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyIsZC5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpKSgiY2RrLWRyb3At'@;
put 'bGlzdC1yZWNlaXZpbmciLGQuX2Ryb3BMaXN0UmVmLmlzUmVjZWl2aW5nKCkpKX0saW5wdXRzOntjb25uZWN0ZWRUbzpbImNka0Ryb3BMaXN0Q29ubmVjdGVkVG8iLCJjb25uZWN0ZWRUbyJdLGRhdGE6WyJjZGtEcm9wTGlzdERhdGEiLCJkYXRhIl0sb3JpZW50YXRpb246WyJjZGtEcm9wTGlz'@;
put 'dE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iXSxpZDoiaWQiLGxvY2tBeGlzOlsiY2RrRHJvcExpc3RMb2NrQXhpcyIsImxvY2tBeGlzIl0sZGlzYWJsZWQ6WyJjZGtEcm9wTGlzdERpc2FibGVkIiwiZGlzYWJsZWQiXSxzb3J0aW5nRGlzYWJsZWQ6WyJjZGtEcm9wTGlzdFNvcnRpbmdEaXNh'@;
put 'YmxlZCIsInNvcnRpbmdEaXNhYmxlZCJdLGVudGVyUHJlZGljYXRlOlsiY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZSIsImVudGVyUHJlZGljYXRlIl0sc29ydFByZWRpY2F0ZTpbImNka0Ryb3BMaXN0U29ydFByZWRpY2F0ZSIsInNvcnRQcmVkaWNhdGUiXSxhdXRvU2Nyb2xsRGlzYWJsZWQ6'@;
put 'WyJjZGtEcm9wTGlzdEF1dG9TY3JvbGxEaXNhYmxlZCIsImF1dG9TY3JvbGxEaXNhYmxlZCJdLGF1dG9TY3JvbGxTdGVwOlsiY2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcCIsImF1dG9TY3JvbGxTdGVwIl19LG91dHB1dHM6e2Ryb3BwZWQ6ImNka0Ryb3BMaXN0RHJvcHBlZCIsZW50ZXJlZDoi'@;
put 'Y2RrRHJvcExpc3RFbnRlcmVkIixleGl0ZWQ6ImNka0Ryb3BMaXN0RXhpdGVkIixzb3J0ZWQ6ImNka0Ryb3BMaXN0U29ydGVkIn0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTphVSx1c2VWYWx1ZTp2b2lkIDB9LHtwcm92aWRl'@;
put 'Om1zZSx1c2VFeGlzdGluZzpjfV0pXX0pLGN9KSgpO2NvbnN0IGxVPW5ldyBNaSgiQ2RrRHJhZ0hhbmRsZSIpO2xldCBfc2U9KCgpPT57Y2xhc3MgY3tnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWE0KGEpLHRoaXMu'@;
put 'X3N0YXRlQ2hhbmdlcy5uZXh0KHRoaXMpfWNvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50PWEsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBiZSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9wYXJlbnREcmFnPWR9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KHNVLDEyKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWdIYW5kbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZy1oYW5kbGUiXSxpbnB1dHM6'@;
put 'e2Rpc2FibGVkOlsiY2RrRHJhZ0hhbmRsZURpc2FibGVkIiwiZGlzYWJsZWQiXX0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdGkoW3twcm92aWRlOmxVLHVzZUV4aXN0aW5nOmN9XSldfSksY30pKCk7Y29uc3QgYnNlPW5ldyBNaSgiQ2RrRHJhZ1BsYWNlaG9sZGVyIikseXNlPW5ldyBNaSgi'@;
put 'Q2RrRHJhZ1ByZXZpZXciKTtsZXQgd3NlPSgoKT0+e2NsYXNzIGN7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmRyb3BDb250YWluZXImJnRoaXMuZHJvcENvbnRhaW5lci5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YTQoYSksdGhp'@;
put 'cy5fZHJhZ1JlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZH1jb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLGdlLHdlLEVlKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRyb3BDb250YWluZXI9ZCx0aGlzLl9uZ1pvbmU9Zix0aGlzLl92aWV3Q29udGFpbmVyUmVmPV8sdGhpcy5fZGlyPVcsdGhp'@;
put 'cy5fY2hhbmdlRGV0ZWN0b3JSZWY9Z2UsdGhpcy5fc2VsZkhhbmRsZT13ZSx0aGlzLl9wYXJlbnREcmFnPUVlLHRoaXMuX2Rlc3Ryb3llZD1uZXcgYmUsdGhpcy5zdGFydGVkPW5ldyBFcix0aGlzLnJlbGVhc2VkPW5ldyBFcix0aGlzLmVuZGVkPW5ldyBFcix0aGlzLmVudGVyZWQ9bmV3IEVy'@;
put 'LHRoaXMuZXhpdGVkPW5ldyBFcix0aGlzLmRyb3BwZWQ9bmV3IEVyLHRoaXMubW92ZWQ9bmV3IEtlKFplPT57Y29uc3Qgb3Q9dGhpcy5fZHJhZ1JlZi5tb3ZlZC5waXBlKE1lKGV0PT4oe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjpldC5wb2ludGVyUG9zaXRpb24sZXZlbnQ6ZXQuZXZl'@;
put 'bnQsZGVsdGE6ZXQuZGVsdGEsZGlzdGFuY2U6ZXQuZGlzdGFuY2V9KSkpLnN1YnNjcmliZShaZSk7cmV0dXJuKCk9PntvdC51bnN1YnNjcmliZSgpfX0pLHRoaXMuX2RyYWdSZWY9aWUuY3JlYXRlRHJhZyhhLHtkcmFnU3RhcnRUaHJlc2hvbGQ6VCYmbnVsbCE9VC5kcmFnU3RhcnRUaHJlc2hv'@;
put 'bGQ/VC5kcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOlQmJm51bGwhPVQucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZD9ULnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NSx6SW5kZXg6VD8uekluZGV4fSksdGhpcy5fZHJh'@;
put 'Z1JlZi5kYXRhPXRoaXMsYy5fZHJhZ0luc3RhbmNlcy5wdXNoKHRoaXMpLFQmJnRoaXMuX2Fzc2lnbkRlZmF1bHRzKFQpLGQmJih0aGlzLl9kcmFnUmVmLl93aXRoRHJvcENvbnRhaW5lcihkLl9kcm9wTGlzdFJlZiksZC5hZGRJdGVtKHRoaXMpKSx0aGlzLl9zeW5jSW5wdXRzKHRoaXMuX2Ry'@;
put 'YWdSZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcmFnUmVmKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKX1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFJvb3RFbGVtZW50KCl9'@;
put 'cmVzZXQoKXt0aGlzLl9kcmFnUmVmLnJlc2V0KCl9Z2V0RnJlZURyYWdQb3NpdGlvbigpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldEZyZWVEcmFnUG9zaXRpb24oKX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpe3RoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbihhKX1uZ0FmdGVyVmll'@;
put 'd0luaXQoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShpZCgxKSxhaCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX3NldHVwSGFuZGxlc0xpc3RlbmVy'@;
put 'KCksdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX0pfSl9bmdPbkNoYW5nZXMoYSl7Y29uc3QgZD1hLnJvb3RFbGVtZW50U2VsZWN0b3IsaD1hLmZyZWVEcmFnUG9zaXRpb247ZCYmIWQuZmlyc3RD'@;
put 'aGFuZ2UmJnRoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksaCYmIWguZmlyc3RDaGFuZ2UmJnRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9bmdPbkRlc3Ryb3koKXt0aGlzLmRyb3BDb250YWluZXIm'@;
put 'JnRoaXMuZHJvcENvbnRhaW5lci5yZW1vdmVJdGVtKHRoaXMpO2NvbnN0IGE9Yy5fZHJhZ0luc3RhbmNlcy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2RyYWdJbnN0YW5jZXMuc3BsaWNlKGEsMSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZGVzdHJveWVkLm5l'@;
put 'eHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9kcmFnUmVmLmRpc3Bvc2UoKX0pfV91cGRhdGVSb290RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7bGV0IGQ9YTt0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJihkPXZvaWQgMCE9PWEuY2xv'@;
put 'c2VzdD9hLmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKTphLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKSksdGhpcy5fZHJhZ1JlZi53aXRoUm9vdEVsZW1lbnQoZHx8YSl9X2dldEJvdW5kYXJ5RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5i'@;
put 'b3VuZGFyeUVsZW1lbnQ7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoYSk6UDAoYSk6bnVsbH1fc3luY0lucHV0cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57aWYoIWEuaXNEcmFnZ2luZygpKXtjb25zdCBk'@;
put 'PXRoaXMuX2RpcixoPXRoaXMuZHJhZ1N0YXJ0RGVsYXksZj10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS5kYXRhLHZpZXdDb250YWluZXI6dGhp'@;
put 'cy5fdmlld0NvbnRhaW5lclJlZn06bnVsbCxfPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcHJldmlld1RlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcHJldmlld1RlbXBsYXRlLmRhdGEsbWF0Y2hTaXplOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5tYXRj'@;
put 'aFNpemUsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsO2EuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5kcmFnU3RhcnREZWxheT0ib2JqZWN0Ij09dHlwZW9mIGgmJmg/aDpCb2UoaCksYS5jb25zdHJhaW5Qb3NpdGlv'@;
put 'bj10aGlzLmNvbnN0cmFpblBvc2l0aW9uLGEucHJldmlld0NsYXNzPXRoaXMucHJldmlld0NsYXNzLGEud2l0aEJvdW5kYXJ5RWxlbWVudCh0aGlzLl9nZXRCb3VuZGFyeUVsZW1lbnQoKSkud2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUoZikud2l0aFByZXZpZXdUZW1wbGF0ZShfKS53aXRoUHJl'@;
put 'dmlld0NvbnRhaW5lcih0aGlzLnByZXZpZXdDb250YWluZXJ8fCJnbG9iYWwiKSxkJiZhLndpdGhEaXJlY3Rpb24oZC52YWx1ZSl9fSksYS5iZWZvcmVTdGFydGVkLnBpcGUoaWQoMSkpLnN1YnNjcmliZSgoKT0+e2lmKHRoaXMuX3BhcmVudERyYWcpcmV0dXJuIHZvaWQgYS53aXRoUGFyZW50'@;
put 'KHRoaXMuX3BhcmVudERyYWcuX2RyYWdSZWYpO2xldCBkPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDtkOyl7aWYoZC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1kcmFnIikpe2Eud2l0aFBhcmVudChjLl9kcmFnSW5zdGFuY2VzLmZpbmQoaD0+aC5lbGVt'@;
put 'ZW50Lm5hdGl2ZUVsZW1lbnQ9PT1kKT8uX2RyYWdSZWZ8fG51bGwpO2JyZWFrfWQ9ZC5wYXJlbnRFbGVtZW50fX0pfV9oYW5kbGVFdmVudHMoYSl7YS5zdGFydGVkLnN1YnNjcmliZShkPT57dGhpcy5zdGFydGVkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFu'@;
put 'Z2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEucmVsZWFzZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnJlbGVhc2VkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OmQuZXZlbnR9KX0pLGEuZW5kZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZGVkLmVtaXQoe3NvdXJjZTp0aGlzLGRpc3RhbmNl'@;
put 'OmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVt'@;
put 'OnRoaXMsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4fSl9KSxhLmV4aXRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpc30pfSksYS5kcm9wcGVkLnN1YnNjcmliZShkPT57dGhpcy5kcm9wcGVkLmVtaXQoe3By'@;
put 'ZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpkLmlzUG9pbnRlck92ZXJD'@;
put 'b250YWluZXIsaXRlbTp0aGlzLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KX0pfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHtsb2NrQXhpczpkLGRyYWdTdGFydERlbGF5OmgsY29uc3RyYWluUG9zaXRpb246ZixwcmV2aWV3Q2xhc3M6'@;
put 'Xyxib3VuZGFyeUVsZW1lbnQ6VCxkcmFnZ2luZ0Rpc2FibGVkOlcscm9vdEVsZW1lbnRTZWxlY3RvcjppZSxwcmV2aWV3Q29udGFpbmVyOmdlfT1hO3RoaXMuZGlzYWJsZWQ9Vz8/ITEsdGhpcy5kcmFnU3RhcnREZWxheT1ofHwwLGQmJih0aGlzLmxvY2tBeGlzPWQpLGYmJih0aGlzLmNvbnN0'@;
put 'cmFpblBvc2l0aW9uPWYpLF8mJih0aGlzLnByZXZpZXdDbGFzcz1fKSxUJiYodGhpcy5ib3VuZGFyeUVsZW1lbnQ9VCksaWUmJih0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3I9aWUpLGdlJiYodGhpcy5wcmV2aWV3Q29udGFpbmVyPWdlKX1fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKXt0aGlzLl9o'@;
put 'YW5kbGVzLmNoYW5nZXMucGlwZShjcCh0aGlzLl9oYW5kbGVzKSx6YyhhPT57Y29uc3QgZD1hLmZpbHRlcihoPT5oLl9wYXJlbnREcmFnPT09dGhpcykubWFwKGg9PmguZWxlbWVudCk7dGhpcy5fc2VsZkhhbmRsZSYmdGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiZkLnB1c2godGhpcy5lbGVt'@;
put 'ZW50KSx0aGlzLl9kcmFnUmVmLndpdGhIYW5kbGVzKGQpfSksU2EoYT0+aXMoLi4uYS5tYXAoZD0+ZC5fc3RhdGVDaGFuZ2VzLnBpcGUoY3AoZCkpKSkpLGFoKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShhPT57Y29uc3QgZD10aGlzLl9kcmFnUmVmLGg9YS5lbGVtZW50Lm5hdGl2ZUVs'@;
put 'ZW1lbnQ7YS5kaXNhYmxlZD9kLmRpc2FibGVIYW5kbGUoaCk6ZC5lbmFibGVIYW5kbGUoaCl9KX19cmV0dXJuIGMuX2RyYWdJbnN0YW5jZXM9W10sYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQobXNlLDEyKSx0dChMcyksdHQoTm8pLHR0KGFzKSx0'@;
put 'dChnc2UsOCksdHQoS29lLDgpLHR0KG9VKSx0dChVYSksdHQobFUsMTApLHR0KHNVLDEyKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgseXNlLDUpLElvKGgs'@;
put 'YnNlLDUpLElvKGgsbFUsNSkpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuX3ByZXZpZXdUZW1wbGF0ZT1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5faGFuZGxlcz1mKX19LGhvc3RBdHRyczpbMSwiY2RrLWRy'@;
put 'YWciXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNkay1kcmFnLWRpc2FibGVkIixkLmRpc2FibGVkKSgiY2RrLWRyYWctZHJhZ2dpbmciLGQuX2RyYWdSZWYuaXNEcmFnZ2luZygpKX0saW5wdXRzOntkYXRhOlsiY2RrRHJhZ0RhdGEiLCJkYXRhIl0s'@;
put 'bG9ja0F4aXM6WyJjZGtEcmFnTG9ja0F4aXMiLCJsb2NrQXhpcyJdLHJvb3RFbGVtZW50U2VsZWN0b3I6WyJjZGtEcmFnUm9vdEVsZW1lbnQiLCJyb290RWxlbWVudFNlbGVjdG9yIl0sYm91bmRhcnlFbGVtZW50OlsiY2RrRHJhZ0JvdW5kYXJ5IiwiYm91bmRhcnlFbGVtZW50Il0sZHJhZ1N0'@;
put 'YXJ0RGVsYXk6WyJjZGtEcmFnU3RhcnREZWxheSIsImRyYWdTdGFydERlbGF5Il0sZnJlZURyYWdQb3NpdGlvbjpbImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiZnJlZURyYWdQb3NpdGlvbiJdLGRpc2FibGVkOlsiY2RrRHJhZ0Rpc2FibGVkIiwiZGlzYWJsZWQiXSxjb25zdHJhaW5Qb3Np'@;
put 'dGlvbjpbImNka0RyYWdDb25zdHJhaW5Qb3NpdGlvbiIsImNvbnN0cmFpblBvc2l0aW9uIl0scHJldmlld0NsYXNzOlsiY2RrRHJhZ1ByZXZpZXdDbGFzcyIsInByZXZpZXdDbGFzcyJdLHByZXZpZXdDb250YWluZXI6WyJjZGtEcmFnUHJldmlld0NvbnRhaW5lciIsInByZXZpZXdDb250YWlu'@;
put 'ZXIiXX0sb3V0cHV0czp7c3RhcnRlZDoiY2RrRHJhZ1N0YXJ0ZWQiLHJlbGVhc2VkOiJjZGtEcmFnUmVsZWFzZWQiLGVuZGVkOiJjZGtEcmFnRW5kZWQiLGVudGVyZWQ6ImNka0RyYWdFbnRlcmVkIixleGl0ZWQ6ImNka0RyYWdFeGl0ZWQiLGRyb3BwZWQ6ImNka0RyYWdEcm9wcGVkIixtb3Zl'@;
put 'ZDoiY2RrRHJhZ01vdmVkIn0sZXhwb3J0QXM6WyJjZGtEcmFnIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdGkoW3twcm92aWRlOnNVLHVzZUV4aXN0aW5nOmN9XSksdmFdfSksY30pKCksQ3NlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbb1VdLGltcG9ydHM6W1pWZV19KSxjfSkoKTtjb25zdCBVZz12b2lkIDAsRUJlPVsiZW4tR0IiLFtbImEiLCJwIl0sWyJhbSIsInBtIl0sVWddLFtbImFtIiwicG0iXSxVZyxVZ10s'@;
put 'W1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1Iiwi'@;
put 'V2UiLCJUaCIsIkZyIiwiU2EiXV0sVWcsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXB0IiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVi'@;
put 'cnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxVZyxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDEsWzYsMF0s'@;
put 'WyJkZC9NTS95IiwiZCBNTU0geSIsImQgTU1NTSB5IiwiRUVFRSwgZCBNTU1NIHkiXSxbIkhIOm1tIiwiSEg6bW06c3MiLCJISDptbTpzcyB6IiwiSEg6bW06c3Mgenp6eiJdLFsiezF9LCB7MH0iLFVnLCJ7MX0gJ2F0JyB7MH0iLFVnXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJc'@;
put 'eGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIkdCUCIsIlx4YTMiLCJCcml0aXNoIFBvdW5kIix7SlBZOlsiSlBceGE1IiwiXHhhNSJdLFVTRDpbIlVTJCIsIiQiXX0sImx0ciIsZnVuY3Rpb24geEJl'@;
put 'KGMpe2NvbnN0IGE9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksZD1jLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09YSYmMD09PWQ/MTo1fV0sa0JlPVsiaW5wdXQiXTtmdW5jdGlvbiBBQmUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDcp'@;
put 'LE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGdyKCIgIixhLmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9BRCBNT1JFIiwiICIpfX1jb25zdCBUQmU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57IndpZHRoLnB4IjpjLCJtYXgtaGVpZ2h0LnB4IjpsfX0sREJlPVsiKiJdO2xl'@;
put 'dCBTc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNkcj1hLHRoaXMuaW5wdXRJZD0iIix0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuYXV0b2NvbXBsZXRlPSJvZmYiLHRoaXMudGFiaW5k'@;
put 'ZXg9IiIsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy5vbklucHV0S2V5ZG93bj1uZXcgRXIsdGhpcy5vbklucHV0Q2hhbmdlPW5ldyBFcix0aGlzLnZhbHVlQ2hhbmdlPW5ldyBFcix0aGlzLm9uTG9hZGluZ01vcmU9bmV3IEVyLHRoaXMuZGF0'@;
put 'YWxpc3RPcGVuPSExLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5PTE1MCx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5pbnB1dENsaWVudFJlY3Q9e30sdGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmxvYWRpbmdNb3JlPSExfW5nT25Jbml0'@;
put 'KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX0sNTAwKX1vbklucHV0RmlyZWQoYSxkLGgpe3RoaXMub3BlbkRhdGFsaXN0KCJjbGljayIhPT1oKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMuZmlsdGVyT3B0'@;
put 'aW9uc0xpc3QoKSwoIXRoaXMuZW1pdE9ubHlTZWxlY3RlZHx8ZCkmJih0aGlzLm9uSW5wdXRDaGFuZ2UuZW1pdCh7dGFyZ2V0Ont2YWx1ZTp0aGlzLnZhbHVlfX0pLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSl9b25JbnB1dENsaWNrKGEpe3RoaXMub3BlbkRhdGFsaXN0KCl9'@;
put 'b3BlbkRhdGFsaXN0KGE9ITApe3RoaXMuZGF0YWxpc3RPcGVuPSEwLGEmJih0aGlzLmFmdGVyT3BlbkxvY2s9ITAsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmFmdGVyT3BlbkxvY2s9ITF9LHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5KSl9Y2xv'@;
put 'c2VEYXRhbGlzdCgpe2NsZWFyVGltZW91dCh0aGlzLmFmdGVyT3BlbkxvY2tEZWxheVRpbWVvdXQpLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmRhdGFsaXN0T3Blbj0hMX1yZXNldERhdGFsaXN0RmlsdGVyKCl7dGhpcy5maWx0ZXJPcHRpb25zTGlzdCghMCl9b25JbnB1dEZvY3VzaW4o'@;
put 'YSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITB9b25JbnB1dEZvY3Vzb3V0KGEpe3RoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9b25JbnB1dE1vdXNlZW50ZXIoYSl7dGhpcy5pbnB1dENsaWVudFJlY3Qud2lkdGh8fHRoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlv'@;
put 'bigpfWZpbHRlck9wdGlvbnNMaXN0KGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb25gKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO2lmKDA9PT10aGlzLnZhbHVlLmxlbmd0aCl7Zi5j'@;
put 'bGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1pZihhKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWNvbnN0IF89Zi5pbm5lclRleHR8fCIiLFQ9Zi52YWx1ZXx8IiI7KF8rVCk/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy52YWx1ZS50b0xvd2Vy'@;
put 'Q2FzZSgpKT9mLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOmYuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fXNldFRvQ2xvc2VEYXRhbGlzdCgpe3RoaXMuZGF0YWxpc3RDbG9zZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2V8fHRoaXMuYWZ0ZXJP'@;
put 'cGVuTG9ja3x8KHRoaXMuY2xvc2VEYXRhbGlzdCgpLHRoaXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5yZXNldERhdGFsaXN0RmlsdGVyKCkpfSwxMDApfWNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKXtjb25zdCBkPXRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5k'@;
put 'aW5nQ2xpZW50UmVjdCgpO2Qud2lkdGg+MCYmZC5oZWlnaHQ+MCYmKHRoaXMuaW5wdXRDbGllbnRSZWN0PXt3aWR0aDpkLndpZHRoLGJvdHRvbTpkLmJvdHRvbX0pLHRoaXMuaW5uZXJIZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0fW9uRGF0YUxpc3RNb3VzZUVudGVyKGEpe3RoaXMucHJldmVu'@;
put 'dERhdGFsaXN0Q2xvc2U9ITB9b25EYXRhTGlzdE1vdXNlTGVhdmUoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9b25EYXRhTGlzdFNjcm9sbChhKXt0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uRGF0YUxp'@;
put 'c3RDbGljayhhKXtjb25zdCBkPWEudGFyZ2V0OyJsb2FkLW1vcmUiIT09ZC5kYXRhc2V0Py50eXBlPyJPUFRJT04iIT09ZC50YWdOYW1lfHx0aGlzLnNldE9wdGlvblZhbHVlKGQuaW5uZXJUZXh0LGQudmFsdWUpOnRoaXMubG9hZE1vcmUoKX1sb2FkTW9yZSgpe3RoaXMub25Mb2FkaW5nTW9y'@;
put 'ZS5lbWl0KHtsb2FkTW9yZUZpbmlzaGVkOmE9Pnt0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9YX19KSx0aGlzLmxvYWRpbmdNb3JlPSEwfXNldE9wdGlvblZhbHVlKGEsZCl7KGF8fGQpJiYoZHx8KGQ9YSkpLGQmJih0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEx'@;
put 'LHRoaXMudmFsdWU9ZCx0aGlzLm9uSW5wdXRGaXJlZChudWxsLCEwLCJjbGljayIpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCkpfW9uTWFpbktleWRvd24oYSl7c3dpdGNoKGEua2V5KXtjYXNlIkFycm93VXAiOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygidXAiKTticmVhaztjYXNlIkFy'@;
put 'cm93RG93biI6dGhpcy5nZXRPcHRpb25zTW92ZUZvY3VzKCJkb3duIik7YnJlYWs7Y2FzZSJFbnRlciI6dGhpcy5zZWxlY3RGb2N1c2VkT3B0aW9uKCl9fW9uSW5wdXRLZXl1cChhKXtyZXR1cm4hdGhpcy5kYXRhbGlzdE9wZW58fCgiRXNjYXBlIj09PWEua2V5PyhhLnN0b3BQcm9wYWdhdGlv'@;
put 'bigpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSwhMSk6dm9pZCAwKX11bnNlbGVjdEFsbE9wdGlvbnMoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9y'@;
put 'KGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2VkIil9c2VsZWN0Rm9jdXNlZE9wdGlvbigpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb24uZm9jdXNlZGApO2EmJnRoaXMub25E'@;
put 'YXRhTGlzdENsaWNrKHt0YXJnZXQ6YX0pLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9Z2V0T3B0aW9uc01vdmVGb2N1cyhhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uOm5vdCguaGlkZGVuKWApO2xldCBoPTA7'@;
put 'Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0IF89ZFtmXTtpZihfLmNsYXNzTGlzdC5jb250YWlucygiZm9jdXNlZCIpKXtoPSJkb3duIj09PWE/ZisxOmYtMSxoPDAmJihoPWQubGVuZ3RoLTEpLGg+ZC5sZW5ndGgtMSYmKGg9MCksXy5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2Vk'@;
put 'Iik7YnJlYWt9fWRbaF0uY2xhc3NMaXN0LmFkZCgiZm9jdXNlZCIpfW9uUmVzaXplKGEpe3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJhcHAtYXV0b2NvbXBsZXRlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oa0JlLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXRFbGVtZW50PWguZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgicmVzaXpl'@;
put 'IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblJlc2l6ZShmKX0sMCxtNil9LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsYXV0b2NvbXBsZXRlOiJhdXRvY29tcGxl'@;
put 'dGUiLHRhYmluZGV4OiJ0YWJpbmRleCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7b25JbnB1dEtleWRvd246Im9uSW5wdXRLZXlkb3duIixvbklucHV0Q2hhbmdlOiJvbklucHV0Q2hhbmdlIix2'@;
put 'YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uTG9hZGluZ01vcmU6Im9uTG9hZGluZ01vcmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6REJlLGRlY2xzOjksdmFyczoxNSxjb25zdHM6W1sxLCJhdXRvY29tcGxldGUtd3JhcHBlciIsMywia2V5ZG93biJdLFsidHlwZSIsInRleHQiLCJhdXRvY29t'@;
put 'cGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJ0YWJpbmRleCIsIjAiLDEsImlucHV0LXZhbCIsMywiaWQiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJmb2N1cyIsImZvY3Vzb3V0Iiwia2V5dXAiXSxb'@;
put 'ImlucHV0IiwiIl0sWzEsIm92ZXJsYXkiXSxbMSwiZGF0YWxpc3QiLDMsIm5nU3R5bGUiLCJpZCIsImNsaWNrIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJzY3JvbGwiXSxbIm9wdGlvbnMiLCIiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsImNsYXNzIiwibG9hZC1tb3JlIiw0LCJu'@;
put 'Z0lmIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLDEsImxvYWQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSx4dCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25NYWluS2V5ZG93bihmKX0pLG1lKDEsImlucHV0Iiwx'@;
put 'LDIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC52YWx1ZT1mfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbklucHV0Q2xpY2soZil9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25JbnB1dEZpcmVkKGYpfSkoIm1vdXNlZW50'@;
put 'ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uSW5wdXRNb3VzZWVudGVyKGYpfSkoImZvY3VzIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbklucHV0Rm9jdXNpbihmKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25JbnB1dEZvY3Vzb3V0KGYpfSkoImtleXVwIixmdW5jdGlv'@;
put 'bihmKXtyZXR1cm4gZC5vbklucHV0S2V5dXAoZil9KSx5ZSgpLHF0KDMsImRpdiIsMyksbWUoNCwiZGl2Iiw0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRGF0YUxpc3RDbGljayhmKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRhdGFMaXN0TW91'@;
put 'c2VFbnRlcihmKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRhdGFMaXN0TW91c2VMZWF2ZShmKX0pKCJzY3JvbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRGF0YUxpc3RTY3JvbGwoZil9KSxtZSg1LCJkaXYiLG51bGwsNSksa3IoNykseWUoKSxRZSg4LEFCZSwy'@;
put 'LDEsIm9wdGlvbiIsNikseWUoKSgpKSwyJmEpe2NvbnN0IGg9JGkoNik7Q2UoMSksUmUoImlkIixkLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlcikoIm5nTW9kZWwiLGQudmFsdWUpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksVHIoImxpc3QiLCJkYXRhbGlzdF8iK2QuaW5w'@;
put 'dXRJZCksQ2UoMiksZHIoImhpZGRlbiIsIWQuZGF0YWxpc3RPcGVuKSxDZSgxKSxkcigiaGlkZGVuIiwhZC5kYXRhbGlzdE9wZW4pLFJlKCJuZ1N0eWxlIixRMigxMixUQmUsZC5pbnB1dENsaWVudFJlY3Qud2lkdGgsZC5pbm5lckhlaWdodCYmZC5pbnB1dENsaWVudFJlY3QuYm90dG9tP2Qu'@;
put 'aW5uZXJIZWlnaHQtZC5pbnB1dENsaWVudFJlY3QuYm90dG9tOnZvaWQgMCkpKCJpZCIsImRhdGFsaXN0XyIrZC5pbnB1dElkKSxDZSg0KSxSZSgibmdJZiIsaC5jaGlsZHJlbi5sZW5ndGg+MCYmZC5lbmFibGVMb2FkTW9yZSl9fSxkZXBlbmRlbmNpZXM6W1ppLHJHLGwxLGMxLFdhLEJzLE9z'@;
put 'XSxzdHlsZXM6WyIuaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1pbnB1dFtfbmdjb250'@;
put 'ZW50LSVDT01QJV06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tdG9wOi01cHh9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6'@;
put 'MTUwMH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtiYWNrZ3JvdW5kOndoaXRlO2JveC1zaGFkb3c6MCAzcHggMTBweCAtMXB4ICMwMDAwMDAyYjtvdmVyZmxvdzphdXRvO3otaW5k'@;
put 'ZXg6MjAwMH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgb3B0aW9ue3BhZGRpbmc6NXB4IDEwcHg7Y3Vyc29yOnBvaW50ZXJ9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbjpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA1ODgyMzUyOTQpfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVdICAgICBvcHRpb24u'@;
put 'Zm9jdXNlZHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA1ODgyMzUyOTQpfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9hZC1tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2fSJd'@;
put 'fSksY30pKCksSUJlPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aDwxKXJldHVybiBhO3N3aXRjaChkKXtjYXNlImRhdGUiOnJldHVybiBLbyhhLCJERE1NTVlZWVk6aGg6bW06c3MiKS5mb3JtYXQoIkREL01NL1lZWVkiKTtjYXNl'@;
put 'InRpbWUiOntpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBwYXJzaW5nIHRpbWUuIFZhbHVlIGlzIG5vdCBzdHJpbmcuIik7Y29uc3QgaD1wYXJzZUludChhLnNwbGl0KCI6IilbMF0pLGY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzFdKSxfPXBhcnNlSW50KGEu'@;
put 'c3BsaXQoIjoiKVsyXSk7cmV0dXJuYCR7aDwxMD8iMCIraDpofToke2Y8MTA/IjAiK2Y6Zn06JHtfPDEwPyIwIitfOl99YH19cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP2E6YS50b1N0cmluZygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVwaXBlPU5hKHtuYW1lOiJkYXRlVGltZUZvcm1hdHRlciIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKTtjb25zdCBMQmU9WyJpbnB1dCJdO2Z1bmN0aW9uIFJCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLE5lKDEsIiAvICIpLG1lKDIsInNwYW4iLDQpLHh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25DaGFuZ2VMYWJlbCgic2Vjb25kIikpfSksTmUoMykseWUoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxkcigidmFsdWUtdHlwZS1zZWxlY3RlZCIsInNlY29uZCI9PT1hLmxhYmVsU2VsZWN0ZWQpLENlKDEpLG9y'@;
put 'KGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBPQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJsYWJlbCIsMykoMSwic3BhbiIsNCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uQ2hhbmdlTGFiZWwoImZpcnN0IikpfSksTmUoMikseWUoKSxR'@;
put 'ZSgzLFJCZSw0LDMsIm5nLWNvbnRhaW5lciIsNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtkcigic2Vjb25kTGFiZWxBY3RpdmUiLGEuc2Vjb25kTGFiZWwmJmEuc2Vjb25kTGFiZWwubGVuZ3RoPjApLENlKDEpLGRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwiZmlyc3QiPT09YS5sYWJl'@;
put 'bFNlbGVjdGVkKSxDZSgxKSxvcihhLmxhYmVsKSxDZSgxKSxSZSgibmdJZiIsYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIFBCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImNsci1kYXRlLWNvbnRhaW5lciIpKDIsImlucHV0Iiw2KSx4dCgiY2xyRGF0ZUNoYW5nZSIs'@;
put 'ZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25EYXRlSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pbnB1dEZv'@;
put 'Y3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gQnQoYSksanQoVmUoKS5vbklucHV0TW91c2VPdXQoKSl9KSxiYSgzLCJkYXRlVGltZUZvcm1hdHRlciIpLHllKCkoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJpZCIsYS5pbnB1dElkKSgicGxhY2Vob2xkZXIiLE01KDMsNSxhLnRlbXAsImRhdGUiKSkoImNs'@;
put 'ckRhdGUiLGEudmFsdWUpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksVHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIEZCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImlucHV0Iiw3KSx4dCgiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiBC'@;
put 'dChhKSxqdChWZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1'@;
put 'bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbklu'@;
put 'cHV0TW91c2VPdXQoKSl9KSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoInZhbHVlIixhLnZhbHVlKSgiaWQiLGEuaW5wdXRJZCkoImRpc2FibGVkIixhLmRpc2FibGVkKSxUcigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gSEJlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwiYXBwLWF1dG9jb21wbGV0ZSIsOCw5KSx4dCgib25JbnB1dENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dEZpcmVkKGgpKX0pKCJvbkxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQo'@;
put 'YSksanQoVmUoKS5hdXRvY29tcGxldGVMb2FkaW5nTW9yZShoKSl9KSxrcigzKSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoImlucHV0SWQiLGEuaW5wdXRJZCkoInZhbHVlIiwobnVsbD09YS52YWx1ZT9udWxsOmEudmFsdWUudG9TdHJpbmcoKSl8fCIiKSgiZW5h'@;
put 'YmxlTG9hZE1vcmUiLGEuZW5hYmxlTG9hZE1vcmUpKCJlbWl0T25seVNlbGVjdGVkIixhLmVtaXRPbmx5U2VsZWN0ZWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCl9fWNvbnN0IE5CZT1bIioiXTtsZXQgTXNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmlucHV0SWQ9IiIsdGhp'@;
put 'cy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5kaXNhYmxlU29mdHNlbGVjdD0hMSx0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBFcix0aGlzLm9uSW5wdXRFdmVudD1uZXcg'@;
put 'RXIsdGhpcy5mb2N1c2luSW5wdXQ9bmV3IEVyLHRoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZT1uZXcgRXIsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlPW5ldyBFcix0aGlzLnRlbXA9IiIsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5sYWJlbFNlbGVjdGVkPSJmaXJzdCJ9bmdPbkNo'@;
put 'YW5nZXMoYSl7YS52YWx1ZSYmYS52YWx1ZS5jdXJyZW50VmFsdWUhPT1hLnZhbHVlLnByZXZpb3VzVmFsdWUmJnRoaXMudmFsdWVDaGFuZ2UuZW1pdChhLnZhbHVlLmN1cnJlbnRWYWx1ZSl9bmdPbkluaXQoKXt9YXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoYSl7dGhpcy5vbkF1dG9jb21wbGV0'@;
put 'ZUxvYWRpbmdNb3JlLmVtaXQoYSl9b25JbnB1dEZpcmVkKGEpe2NvbnN0IGQ9YS50YXJnZXQudmFsdWU7dGhpcy50ZW1wPWQsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGQpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25EYXRlSW5wdXRGaXJlZChhKXt0aGlzLnRlbXA9YSx0aGlzLnZhbHVl'@;
put 'Q2hhbmdlLmVtaXQoYSksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbklucHV0TW91c2VPdXQoKXt0aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy52YWx1ZT10aGlzLnRlbXAsdGhpcy50ZW1wPSIiKX1vbklucHV0TW91c2VPdmVyKCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRo'@;
put 'aXMudGVtcD10aGlzLnZhbHVlP3RoaXMudmFsdWU6IiIsdGhpcy52YWx1ZT0iIil9b25Gb2N1c2luSW5wdXQoYSl7dGhpcy5mb2N1c2luSW5wdXQuZW1pdChhKX1vbkNoYW5nZUxhYmVsKGEpe3RoaXMubGFiZWxTZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KCJmaXJz'@;
put 'dCI9PT1hP3RoaXMubGFiZWw6dGhpcy5zZWNvbmRMYWJlbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc29mdC1zZWxlY3QiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7'@;
put 'aWYoMSZhJiZSbyhMQmUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5pbnB1dEVsZW1lbnQ9aC5maXJzdCl9fSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLGxhYmVsOiJsYWJlbCIsc2Vjb25kTGFiZWw6InNlY29uZExhYmVsIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxl'@;
put 'ZCIsdHlwZToidHlwZSIsZGlzYWJsZVNvZnRzZWxlY3Q6ImRpc2FibGVTb2Z0c2VsZWN0IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uSW5wdXRF'@;
put 'dmVudDoib25JbnB1dEV2ZW50Iixmb2N1c2luSW5wdXQ6ImZvY3VzaW5JbnB1dCIsb25BdXRvY29tcGxldGVMb2FkaW5nTW9yZToib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsc2VsZWN0ZWRMYWJlbENoYW5nZToic2VsZWN0ZWRMYWJlbENoYW5nZSJ9LGZlYXR1cmVzOlt2YV0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOk5CZSxkZWNsczo1LHZhcnM6NSxjb25zdHM6W1siY2xhc3MiLCJjbHItY29udHJvbC1sYWJlbCIsMywic2Vjb25kTGFiZWxBY3RpdmUiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzMsImNs'@;
put 'aWNrIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMywiaWQiLCJwbGFjZWhvbGRlciIsImNsckRhdGUiLCJkaXNhYmxlZCIsImNsckRhdGVDaGFuZ2UiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Il0sWyJ0eXBlIiwi'@;
put 'dGltZSIsInN0ZXAiLCIxIiwxLCJpbnB1dC12YWwiLDMsInZhbHVlIiwiaWQiLCJkaXNhYmxlZCIsImlucHV0IiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMi'@;
put 'LCIiLDEsImlucHV0LXZhbCIsMywiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJlbWl0T25seVNlbGVjdGVkIiwiZGlzYWJsZWQiLCJvbklucHV0Q2hhbmdlIiwib25Mb2FkaW5nTW9yZSJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgp'@;
put 'LFFlKDAsT0JlLDQsNiwibGFiZWwiLDApLEJyKDEsMSksUWUoMixQQmUsNCw4LCJuZy1jb250YWluZXIiLDIpLFFlKDMsRkJlLDIsNCwibmctY29udGFpbmVyIiwyKSxRZSg0LEhCZSw0LDUsIm5nLWNvbnRhaW5lciIsMiksVXIoKSksMiZhJiYoUmUoIm5nSWYiLGQubGFiZWwpLENlKDEpLFJl'@;
put 'KCJuZ1N3aXRjaCIsZC50eXBlKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJ0aW1lIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsInRleHQiKSl9LGRlcGVuZGVuY2llczpbWmksbmQsdGgsVXMsTGIsJEYscUYsU3NlLElCZV0sc3R5'@;
put 'bGVzOlsiLmlucHV0LXZhbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9aW5wdXRbX25nY29udGVudC0l'@;
put 'Q09NUCVdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAgIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTVweH1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgICBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi1y'@;
put 'aWdodDoyMHB4O21hcmdpbi10b3A6LTVweH1sYWJlbC5zZWNvbmRMYWJlbEFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLnZhbHVlLXR5cGUtc2VsZWN0ZWQpe3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7Y3Vyc29yOnBvaW50ZXI7'@;
put 'b3BhY2l0eTouNn0iXX0pLGN9KSgpLFU3PSgoKT0+e2NsYXNzIGN7c2V0IG5nVmFyKGEpe3RoaXMuY29udGV4dC4kaW1wbGljaXQ9dGhpcy5jb250ZXh0Lm5nVmFyPWEsdGhpcy5oYXNWaWV3fHwodGhpcy52Y1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZix0aGlzLmNv'@;
put 'bnRleHQpLHRoaXMuaGFzVmlldz0hMCl9Y29uc3RydWN0b3IoYSxkKXt0aGlzLnRlbXBsYXRlUmVmPWEsdGhpcy52Y1JlZj1kLHRoaXMuY29udGV4dD17JGltcGxpY2l0Om51bGwsbmdWYXI6bnVsbH0sdGhpcy5oYXNWaWV3PSExfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKSh0dCh6YSksdHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdWYXIiLCIiXV0saW5wdXRzOntuZ1ZhcjoibmdWYXIifX0pLGN9KSgpLFZCZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1h'@;
put 'fXRyYW5zZm9ybShhLGQ9ImRheXMiLGg9ITEpe2lmKHZvaWQgMD09PWEmJihhPSIiKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksMD09PWEubGVuZ3RoKXtpZigiZGF5cyI9PT1kKXJldHVybiBudWxsO2lmKCJzZWNvbmRzIj09PWQpcmV0dXJuIGg/IjExOjAwOjAwIjpu'@;
put 'dWxsfWxldCBmPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZCk7aWYoND09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IFQ9YS5zcGxpdCgiOiIpO2Y9bmV3IERhdGUoVFswXSksZi5zZXRIb3VycyhwYXJzZUludChUWzFdKSksZi5zZXRNaW51dGVzKHBh'@;
put 'cnNlSW50KFRbMl0pKSxmLnNldFNlY29uZHMocGFyc2VJbnQoVFszXSkpfWVsc2UgaXNOYU4oTnVtYmVyKGEpKSYmKGY9bmV3IERhdGUoYSkpO2xldCBfPWAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldEhvdXJzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJT'@;
put 'ZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldFNlY29uZHMoKS50b1N0cmluZygpKX1gO3JldHVybiBoP186Zn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykodHQoQWMsMTYpKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJzYXNUb0pzRGF0ZSIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKSxCQmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmhlbHBlclNlcnZpY2U9YX10cmFuc2Zvcm0oYSl7aWYobnVsbD09YXx8IiI9'@;
put 'PT1hKXJldHVybiIiO2xldCBkLGgsZjtpZigic3RyaW5nIj09dHlwZW9mIGEmJjM9PT1hLnNwbGl0KCI6IikubGVuZ3RoKXtjb25zdCBfPWEuc3BsaXQoIjoiKTtkPV9bMF0saD1fWzFdLGY9X1syXX1lbHNlIm51bWJlciIhPXR5cGVvZiBhJiYoYT1wYXJzZUludChhKSksZD1NYXRoLmZsb29y'@;
put 'KGEvMzYwMCksaD1NYXRoLmZsb29yKGElMzYwMC82MCksZj1NYXRoLmZsb29yKGElMzYwMCU2MCk7cmV0dXJuYCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGQpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhoKX06JHt0aGlzLmhlbHBlclNlcnZpY2Uu'@;
put 'YWRkTGVhZGluZ1plcm8oZil9YH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQWMsMTYpKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJzZWNvbmRzUGFyc2VyIix0eXBlOmMscHVyZTohMH0pLGN9KSgpO2Z1bmN0aW9uIGpCZShjLGwpe2lmKDEm'@;
put 'YyYmKG1lKDAsIm9wdGlvbiIsMjIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgic2VsZWN0ZWQiLFZlKCkubG9naWNPcGVyYXRvcnNbMF0pLENlKDEpLGdyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHpCZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMjMpLE5lKDEsIlxu'@;
put 'ICAgICAgICAiKSxxdCgyLCJwcm9ncmVzcyIpLE5lKDMsIlxuICAgICAgIikseWUoKSl9ZnVuY3Rpb24gVUJlKGMsbCl7MSZjJiZxdCgwLCJkaXYiKX1mdW5jdGlvbiBaQmUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDIyKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj'@;
put 'aXQ7UmUoInNlbGVjdGVkIixWZSgyKS5sb2dpY09wZXJhdG9yc1swXSksQ2UoMSksZ3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gWUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5h'@;
put 'ZGRHcm91cENsYXVzZSgpKX0pLHF0KDEsImNsci1pY29uIiwzMyksbWUoMiwic3BhbiIpLE5lKDMsIkdyb3VwIikseWUoKSgpfX1mdW5jdGlvbiBXQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMzQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z'@;
put 'dCBoPVZlKCkuaW5kZXg7cmV0dXJuIGp0KFZlKCkucmVtb3ZlR3JvdXBDbGF1c2UoaCkpfSkseWUoKX19ZnVuY3Rpb24gR0JlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLGdyKCIgIixhLk5BTUUsIiAiKX19'@;
put 'ZnVuY3Rpb24gJEJlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLG9yKGEpfX1mdW5jdGlvbiBxQmUoYyxsKXsxJmMmJmphKDApfWNvbnN0IEtCZT1mdW5jdGlvbihjLGwsYSl7cmV0dXJue3F1ZXJ5OmMscXVl'@;
put 'cnlJbmRleDpsLGNsYXVzZUluZGV4OmF9fTtmdW5jdGlvbiBYQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKS5pbmRleCxmPVZlKCkuaW5kZXgsXz1WZSgpO3Jl'@;
put 'dHVybiBfLmN1cnJlbnRRdWVyeUluZGV4PWgsanQoXy5jdXJyZW50Q2xhdXNlSW5kZXg9Zil9KSxOZSgyLCIgQ2hvb3NlIHZhbHVlcyAiKSx5ZSgpLFFlKDMscUJlLDEsMCwibmctY29udGFpbmVyIiw1MykseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5k'@;
put 'ZXgsZj1WZSgpLmluZGV4O1ZlKCk7Y29uc3QgXz0kaSgzNyk7Q2UoMyksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLF8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIseV8oMixLQmUsZCxoLGYpKX19ZnVuY3Rpb24gSkJlKGMsbCl7MSZjJiZqYSgwKX1jb25zdCBRQmU9ZnVuY3Rpb24oYyxsLGEs'@;
put 'ZCl7cmV0dXJue3F1ZXJ5OmMscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfX07ZnVuY3Rpb24gZWplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw1NCksUWUoMSxKQmUsMSwwLCJuZy1jb250YWluZXIiLDUzKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5uZ1Zhcixk'@;
put 'PVZlKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsXz1WZSgpLmluZGV4LFQ9VmUoKSxXPSRpKDMxKSxpZT0kaSgzMyk7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJlQudXNlUGlja2Vycz9XOmllKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFdNKDIsUUJlLGgsZixfLGEpKX19'@;
put 'ZnVuY3Rpb24gdGplKGMsbCl7MSZjJiZqYSgwKX1mdW5jdGlvbiBuamUoYyxsKXsxJmMmJmphKDApfWNvbnN0IHJqZT1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm57cmFuZ2U6InN0YXJ0IixxdWVyeTpjLHF1ZXJ5VmFsdWVJbmRleDowLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0'@;
put 'ZVRpbWU6ZH19LGlqZT1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm57cmFuZ2U6ImVuZCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MSxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9fTtmdW5jdGlvbiBvamUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDU1KSgxLCJk'@;
put 'aXYiLDU2KSxRZSgyLHRqZSwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLHllKCksbWUoMywiZGl2Iiw1NyksUWUoNCxuamUsMSwwLCJuZy1jb250YWluZXIiLDUzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyLGQ9VmUoKSxoPWQuJGltcGxpY2l0LGY9ZC5pbmRleCxfPVZlKCkuaW5k'@;
put 'ZXgsVD1WZSgpLFc9JGkoMzEpLGllPSRpKDM1KTtDZSgyKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmVC51c2VQaWNrZXJzP1c6aWUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsV00oNCxyamUsaCxmLF8sYSkpLENlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZULnVzZVBpY2tl'@;
put 'cnM/VzppZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixXTSg5LGlqZSxoLGYsXyxhKSl9fWZ1bmN0aW9uIHNqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTgpKDEsImxhYmVsIiwzKSxOZSgyLCJWYWx1ZSIpLHllKCksbWUoMywiaW5wdXQiLDU5KSx4dCgibmdN'@;
put 'b2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLiRpbXBsaWNpdC52YWx1ZT1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDIpLmluZGV4LF89VmUoKS5pbmRleDtyZXR1cm4ganQoVmUoKS5zZXRWYXJpYWJsZVZhbHVl'@;
put 'cyhoLGYsXykpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQ7Q2UoMyksUmUoIm5nTW9kZWwiLGEudmFsdWUpfX1mdW5jdGlvbiBhamUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ2KSxRZSgxLFhCZSw0LDYsImRpdiIsNDcpLFFlKDIsZWplLDIsNywiZGl2Iiw0'@;
put 'OCksUWUoMyxvamUsNSwxNCwiZGl2Iiw0OSksUWUoNCxzamUsNCwxLCJkaXYiLDUwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCJJTiI9PT1hLm9wZXJhdG9yfHwiTk9UIElOIj09PWEub3BlcmF0b3IpLENlKDEpLFJlKCJuZ0lmIiwiQkVUV0VF'@;
put 'TiIhPT1hLm9wZXJhdG9yJiYiSU4iIT09YS5vcGVyYXRvciYmIk5PVCBJTiIhPT1hLm9wZXJhdG9yJiYiTElLRSIhPT1hLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09YS5vcGVyYXRvciYmIkJFR0lOU19XSVRIIiE9PWEub3BlcmF0b3IpLENlKDEpLFJlKCJuZ0lmIiwiQkVUV0VFTiI9PT1hLm9w'@;
put 'ZXJhdG9yKSxDZSgxKSxSZSgibmdJZiIsIkxJS0UiPT09YS5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWEub3BlcmF0b3J8fCJDT05UQUlOUyI9PT1hLm9wZXJhdG9yKX19ZnVuY3Rpb24gbGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2KSgxLCJkaXYiLDM1KSgy'@;
put 'LCJkaXYiLDM2KSgzLCJhcHAtc29mdC1zZWxlY3QiLDM3KSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQudmFyaWFibGU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25zdCBmPUJ0KGEpLF89Zi4kaW1wbGljaXQsVD1mLmlu'@;
put 'ZGV4LFc9VmUoKS5pbmRleDtyZXR1cm4ganQoVmUoKS52YXJpYWJsZUlucHV0Q2hhbmdlKF8udmFyaWFibGUsVCxXLGgpKX0pLFFlKDQsR0JlLDIsMSwib3B0aW9uIiwzOCkseWUoKSgpKCksbWUoNSwiZGl2IiwzOSkoNiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg3LCJsYWJlbCIpLE5lKDgs'@;
put 'Ik9wZXJhdG9yIikseWUoKSxtZSg5LCJzZWxlY3QiLDQwKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5vcGVyYXRvcj1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe2NvbnN0IGg9QnQoYSksZj1oLmluZGV4LF89aC4kaW1w'@;
put 'bGljaXQsVD1WZSgpLmluZGV4O3JldHVybiBqdChWZSgpLnNldFZhcmlhYmxlT3BlcmF0b3IoZixfLm9wZXJhdG9yLFQpKX0pLFFlKDEwLCRCZSwyLDEsIm9wdGlvbiIsMzgpLHllKCkoKSgpLFFlKDExLGFqZSw1LDQsImRpdiIsNDEpLG1lKDEyLCJkaXYiLDQyKSgxMywiYnV0dG9uIiw0Myks'@;
put 'eHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXgsXz1WZSgpLmluZGV4O3JldHVybiBqdChWZSgpLnJlbW92ZUNsYXVzZShmLF8pKX0pLHF0KDE0LCJjbHItaWNvbiIsNDQpKDE1LCJzcGFuIikseWUoKSxtZSgxNiwiYnV0dG9uIiw0NSkseHQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe0J0KGEpO2NvbnN0IGg9VmUoKS5pbmRleDtyZXR1cm4ganQoVmUoKS5hZGRDbGF1c2UoaCkpfSkscXQoMTcsImNsci1pY29uIiwzMykoMTgsInNwYW4iKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoKS5pbmRleCxmPVZlKCk7ZHIoImlu'@;
put 'dmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLENlKDMpLFJlKCJpZCIsInNlbGVjdF92YWxzX3Zhcl9pZCIrZCsiXyIraCkoImlucHV0SWQiLCJ2YWxzX3Zhcl9pZCIrZCsiXyIraCkoImVtaXRPbmx5U2VsZWN0ZWQiLCEwKSgidmFsdWUiLGEudmFyaWFibGUpLENlKDEpLFJlKCJuZ0Zv'@;
put 'ck9mIixmLmNvbHMpLENlKDUpLFJlKCJuZ01vZGVsIixhLm9wZXJhdG9yKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5vcGVyYXRvcnMpLENlKDEpLFJlKCJuZ1ZhciIsIkRBVEUiPT09YS5kZHR5cGV8fCJEQVRFVElNRSI9PT1hLmRkdHlwZXx8IlRJTUUiPT09YS5kZHR5cGUpLENlKDIpLFJlKCJk'@;
put 'aXNhYmxlZCIsMT09PWYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50cy5sZW5ndGgpfX1mdW5jdGlvbiBjamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDI0KSgxLCJkaXYiLDYpKDIsImRpdiIsMjUpKDMsImRpdiIsMjYpKDQsImNsci1zZWxlY3QtY29udGFpbmVy'@;
put 'IikoNSwibGFiZWwiKSxOZSg2LCJMb2dpYyIpLHllKCksbWUoNywic2VsZWN0IiwyNykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQuY2xhdXNlTG9naWM9aCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoKS5zZXRMb2dpYygpKX0pLFFlKDgsWkJlLDIsMiwib3B0aW9uIiw5KSx5ZSgpKCkoKSxxdCg5LCJiciIpLFFlKDEwLFlCZSw0LDAsImJ1dHRvbiIsMjgpLHllKCksbWUoMTEsImRpdiIsMjkpLFFlKDEyLFdCZSwxLDAsImNsci1pY29uIiwzMCksUWUoMTMsbGplLDE5LDExLCJkaXYi'@;
put 'LDMxKSx5ZSgpKCkscXQoMTQsImJyIikseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLGRyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xhdXNlKSxDZSg2KSxSZSgibmdNb2RlbCIsYS5jbGF1c2VMb2dpYykoImRpc2FibGVkIixhLmVsZW1lbnRzLmxl'@;
put 'bmd0aDwyKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5sb2dpY09wZXJhdG9ycyksQ2UoMiksUmUoIm5nSWYiLGQuaW5uZXJXaWR0aD43NjgpLENlKDIpLFJlKCJuZ0lmIixkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPjEpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmVsZW1lbnRzKX19ZnVuY3Rpb24g'@;
put 'dWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MikseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleCxpZT1mLnF1ZXJ5VmFs'@;
put 'dWVJbmRleDtyZXR1cm4ganQoVmUoKS5kYXRlQ2hhbmdlKGgsXyxULFcsaWUpKX0pLGJhKDIsInNhc1RvSnNEYXRlIiksYmEoMywic2FzVG9Kc0RhdGUiKSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCksZD1hLnF1ZXJ5SW5kZXgsaD1hLmNsYXVzZUluZGV4LGY9YS5xdWVyeVZhbHVl'@;
put 'SW5kZXgsXz1hLnF1ZXJ5O0NlKDEpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitkKyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/VWwoMiwzLF8udmFsdWVbZl0pOlVsKDMsNSxfLnZhbHVlKSl9fWZ1bmN0aW9uIGRqZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO0JyKDApLG1lKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjMpLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLF89Zi5jbGF1c2VJbmRleCxUPWYucXVlcnlJbmRleDtyZXR1cm4ganQoVmUoKS5nZXRRdWVyeURhdGVUaW1lKF8sVCkuZGF0ZT1o'@;
put 'KX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLGY9aC5xdWVyeSxfPWgucXVlcnlJbmRleCxUPWguY2xhdXNlSW5kZXgsVz1oLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4ganQoVmUoKS5kYXRlVGltZUNoYW5nZShmLF8sVCxXKSl9KSxiYSgyLCJzYXNUb0pz'@;
put 'RGF0ZSIpLGJhKDMsInNhc1RvSnNEYXRlIikseWUoKSxtZSg0LCJhcHAtc29mdC1zZWxlY3QiLDY0KSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKSxfPWYuY2xhdXNlSW5kZXgsVD1mLnF1ZXJ5SW5kZXg7cmV0dXJuIGp0KFZlKCkuZ2V0UXVlcnlEYXRl'@;
put 'VGltZShfLFQpLnRpbWU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKSxmPWgucXVlcnksXz1oLnF1ZXJ5SW5kZXgsVD1oLmNsYXVzZUluZGV4LFc9aC5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIGp0KFZlKCkuZGF0ZVRpbWVDaGFuZ2UoZixfLFQsVykp'@;
put 'fSksYmEoNSwic2FzVG9Kc0RhdGUiKSxiYSg2LCJzYXNUb0pzRGF0ZSIpLHllKCksVXIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKSxkPWEucXVlcnlJbmRleCxoPWEuY2xhdXNlSW5kZXgsZj1hLnF1ZXJ5VmFsdWVJbmRleCxfPWEucXVlcnk7Q2UoMSksUmUoImRpc2FibGVTb2Z0c2VsZWN0Iiwh'@;
put 'MCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2QrIl8iK2gpKCJ2YWx1ZSIsdm9pZCAwIT09Zj9NNSgyLDYsXy52YWx1ZVtmXSwic2Vjb25kcyIpOk01KDMsOSxfLnZhbHVlLCJzZWNvbmRzIikpLENlKDMpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc190aW1lIitk'@;
put 'KyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/RFIoNSwxMixfLnZhbHVlW2ZdLCJzZWNvbmRzIiwhMCk6RFIoNiwxNixfLnZhbHVlLCJzZWNvbmRzIiwhMCkpfX1mdW5jdGlvbiBoamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJhcHAtc29mdC1zZWxlY3QiLDY1KSx4'@;
put 'dCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleCxpZT1mLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4ganQoVmUoKS50aW1lQ2hhbmdlKGgsXyxULFcsaWUpKX0pLGJhKDIsInNlY29uZHNQ'@;
put 'YXJzZXIiKSxiYSgzLCJzZWNvbmRzUGFyc2VyIikseWUoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9YS5xdWVyeUluZGV4LGg9YS5jbGF1c2VJbmRleCxmPWEucXVlcnlWYWx1ZUluZGV4LF89YS5xdWVyeTtDZSgxKSxSZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIs'@;
put 'InZhbHNfIitkKyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/VWwoMiwzLF8udmFsdWVbZl0pOlVsKDMsNSxfLnZhbHVlKSl9fWZ1bmN0aW9uIGZqZShjLGwpezEmYyYmKEJyKDAsNjApLFFlKDEsdWplLDQsNywibmctY29udGFpbmVyIiw2MSksUWUoMixkamUsNywyMCwibmctY29udGFpbmVy'@;
put 'Iiw2MSksUWUoMyxoamUsNCw3LCJuZy1jb250YWluZXIiLDYxKSxVcigpKSwyJmMmJihSZSgibmdTd2l0Y2giLGwucXVlcnkuZGR0eXBlKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiREFURSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJEQVRFVElNRSIpLENlKDEpLFJlKCJuZ1N3aXRj'@;
put 'aENhc2UiLCJUSU1FIikpfWZ1bmN0aW9uIHBqZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNjgpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEudW5mb3JtYXR0ZWQpLENlKDEpLGdyKCIgIixhLmZvcm1hdHRlZC50cmltKCksIiAiKX19ZnVu'@;
put 'Y3Rpb24gZ2plKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksUWUoMSxwamUsMiwyLCJvcHRpb24iLDY3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5xdWVyeTtDZSgxKSxSZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBtamUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDY4'@;
put 'KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7UmUoInZhbHVlIixhLk5BTUUpLENlKDEpLGdyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gdmplKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxtamUsMiwyLCJvcHRpb24iLDY5KSxVcigpKSwyJmMpe2NvbnN0IGE9'@;
put 'bC4kaW1wbGljaXQsZD1WZSgyKS5xdWVyeTtDZSgxKSxSZSgibmdJZiIsYS5UWVBFPT09ZC50eXBlKX19ZnVuY3Rpb24gX2plKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksUWUoMSx2amUsMiwxLCJuZy1jb250YWluZXIiLDM4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUo'@;
put 'Im5nRm9yT2YiLGEuY29scyl9fWZ1bmN0aW9uIGJqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImFwcC1zb2Z0LXNlbGVjdCIsNjYpLHh0KCJzZWxlY3RlZExhYmVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLnF1ZXJ5O3JldHVybiBqdChWZSgpLnNlbGVjdGVk'@;
put 'TGFiZWxDaGFuZ2UoaCxfKSl9KSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS5xdWVyeS52YWx1ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5SW5kZXgsVD1mLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgp'@;
put 'LnNldFZhcmlhYmxlVmFsdWVzKGgudGFyZ2V0LnZhbHVlLF8sVCkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleDtyZXR1cm4ganQoVmUoKS5vbkF1dG9jb21wbGV0'@;
put 'ZUxvYWRpbmdNb3JlKGgsXy52YXJpYWJsZSxULFcpKX0pLFFlKDEsZ2plLDIsMSwiZGl2IiwxNiksUWUoMixfamUsMiwxLCJkaXYiLDE2KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9bC5xdWVyeUluZGV4LGg9bC5jbGF1c2VJbmRleDtSZSgic2Vjb25kTGFiZWwiLCJWYXJpYWJs'@;
put 'ZSIpKCJlbWl0T25seVNlbGVjdGVkIixhLnZhbHVlVmFyaWFibGUpKCJpbnB1dElkIiwidmFsc18iK2QrIl8iK2gpKCJ2YWx1ZSIsYS52YWx1ZSkoImVuYWJsZUxvYWRNb3JlIixhLm5vYnM+YS52YWx1ZXMubGVuZ3RoKSxDZSgxKSxSZSgibmdJZiIsIWEudmFsdWVWYXJpYWJsZSksQ2UoMSks'@;
put 'UmUoIm5nSWYiLGEudmFsdWVWYXJpYWJsZSl9fWZ1bmN0aW9uIHlqZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNjgpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEuZm9ybWF0dGVkKSxDZSgxKSxncigiICIsYS5mb3JtYXR0ZWQsIiAiKX19'@;
put 'ZnVuY3Rpb24gd2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw3MCkseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPUJ0KGEpO3JldHVybiBqdChmLnF1ZXJ5LnZhbHVlW2YucXVlcnlWYWx1ZUluZGV4XT1oKX0pKCJvbklucHV0'@;
put 'RXZlbnQiLGZ1bmN0aW9uKCl7Y29uc3QgaD1CdChhKSxmPWgucXVlcnksXz1oLnF1ZXJ5SW5kZXgsVD1oLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgpLnNldFZhcmlhYmxlVmFsdWVzKGYudmFsdWUsXyxUKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29u'@;
put 'c3QgZj1CdChhKSxfPWYucXVlcnksVD1mLnF1ZXJ5SW5kZXgsVz1mLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCxfLnZhcmlhYmxlLFQsVykpfSksUWUoMSx5amUsMiwyLCJvcHRpb24iLDY3KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLnJh'@;
put 'bmdlLGQ9bC5xdWVyeSxoPWwucXVlcnlWYWx1ZUluZGV4O1JlKCJpbnB1dElkIiwidmFscy0iK2ErIl8iK2wucXVlcnlJbmRleCsiXyIrbC5jbGF1c2VJbmRleCkoInZhbHVlIixkLnZhbHVlW2hdKSgiZW5hYmxlTG9hZE1vcmUiLGQubm9icz5kLnZhbHVlcy5sZW5ndGgpKCJkaXNhYmxlZCIs'@;
put 'dm9pZCAwIT09aCYmInN0YXJ0IiE9PWEmJiFkLnZhbHVlWzBdKSxDZSgxKSxSZSgibmdGb3JPZiIsZC52YWx1ZXMpfX1mdW5jdGlvbiBDamUoYyxsKXsxJmMmJihtZSgwLCJoNSIsNzgpLE5lKDEsIiBObyB2YWx1ZXMgYXZhaWxhYmxlLiAiKSx5ZSgpKX1mdW5jdGlvbiBTamUoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEsImlucHV0Iiw4MCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLnF1ZXJ5LnZhbHVlW19dLmNoZWNrZWQ9aCl9KSgibmdNb2RlbENo'@;
put 'YW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKSxfPWYucXVlcnlJbmRleCxUPWYuY2xhdXNlSW5kZXg7cmV0dXJuIGp0KFZlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCxfLFQpKX0pLHllKCksbWUoMiwibGFiZWwiKSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGlt'@;
put 'cGxpY2l0LGQ9bC5pbmRleCxoPVZlKDIpLnF1ZXJ5O0NlKDEpLFJlKCJuZ01vZGVsIixoLnZhbHVlW2RdLmNoZWNrZWQpLENlKDIpLGdyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBNamUoYyxsKXtpZigxJmMmJihtZSgwLCJzZWN0aW9uIiw3OSkoMSwiY2xyLWNoZWNrYm94LWNv'@;
put 'bnRhaW5lciIpLFFlKDIsU2plLDQsMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDM4KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpLnF1ZXJ5O0NlKDIpLFJlKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIHhqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1tb2Rh'@;
put 'bCIsNzEpKDEsImgzIiw3MiksTmUoMiwiU2VsZWN0IHZhbHVlcyIpLHllKCksbWUoMywiZGl2Iiw3MyksUWUoNCxDamUsMiwwLCJoNSIsNzQpLFFlKDUsTWplLDMsMSwic2VjdGlvbiIsNzUpLHllKCksbWUoNiwiZGl2Iiw3NikoNywiYnV0dG9uIiw3NykseHQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4gaC5jdXJyZW50UXVlcnlJbmRleD0tMSxqdChoLmN1cnJlbnRDbGF1c2VJbmRleD0tMSl9KSxOZSg4LCIgQXBwbHkgIikseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4LGY9VmUo'@;
put 'KTtSZSgiY2xyTW9kYWxPcGVuIixmLmN1cnJlbnRRdWVyeUluZGV4PT09ZCYmZi5jdXJyZW50Q2xhdXNlSW5kZXg9PT1oKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDQpLFJlKCJuZ0lmIiwhZi5pc0FycihhLnZhbHVlKSksQ2UoMSksUmUoIm5nSWYiLGYuaXNBcnIoYS52YWx1ZSkpfX0h'@;
put 'ZnVuY3Rpb24gZjBlKGMsbCxhKXsoZnVuY3Rpb24gVU0oYyxsLGEpeyJzdHJpbmciIT10eXBlb2YgbCYmKGE9bCxsPWNbcW8uTG9jYWxlSWRdKSxsPWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSwkZFtsXT1jLGEmJigkZFtsXVtxby5FeHRyYURhdGFdPWEpfSkoYyxsLGEpfShF'@;
put 'QmUpO2xldCBjVT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLmNkZj1mLHRoaXMuY2FjaGluZz0hMCx0aGlzLnJvd3NfaW5jcmVtZW50PTEwMCx0aGlz'@;
put 'LmluaXRpYWxfcm93cz0xZTMsdGhpcy5jbGF1c2VBbXQ9WyIiXSx0aGlzLm51bU9wZXJhdG9ycz1bIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJCRVRXRUVOIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMuY2hhck9wZXJhdG9ycz1bIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJDT05UQUlOUyIsIklO'@;
put 'IiwiTk9UIElOIiwiTkUiXSx0aGlzLm5vdEluPSExLHRoaXMubm90QXJyPSEwLHRoaXMud2FzQmV0d2Vlbj0hMSx0aGlzLndoZXJlQ2xhdXNlTG9hZGluZz0hMSx0aGlzLmR5bmFtaWNXaGVyZUNsYXVzZT0hMCx0aGlzLnVzZVBpY2tlcnM9ITEsdGhpcy5xdWVyeU9iaj17ZWxlbWVudHM6W3ts'@;
put 'b2dpYzpudWxsLHR5cGU6bnVsbCxkZHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZVZhcmlhYmxlOiExLHN0YXJ0cm93OjAscm93czowLG5vYnM6MCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV0sY2xhdXNlTG9naWM6IiIsaW52YWxpZENsYXVz'@;
put 'ZTohMX0sdGhpcy5zZWxWYXI9e2luZGV4Om51bGwsZm9ybWF0Om51bGwsdHlwZTpudWxsfSx0aGlzLmluT2JqPVt7Y2hlY2tlZDohMSx2YWx1ZTpudWxsfV0sdGhpcy5ncm91cExvZ2ljPSJBTkQiLHRoaXMuY2xhdXNlcz17cXVlcnlPYmo6W3RoaXMucXVlcnlPYmpdLGNsYXVzZUxvZ2ljOltd'@;
put 'LGdyb3VwTG9naWM6dGhpcy5ncm91cExvZ2ljfSx0aGlzLmxvZ2ljT3BlcmF0b3JzPVsiQU5EIiwiT1IiXSx0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhpcy5jdXJyZW50Q2xhdXNlSW5kZXg9LTEsdGhpcy5jdXJyZW50UXVlcnlJbmRleD0tMSx0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD1udWxs'@;
put 'LHRoaXMuaW5uZXJXaWR0aD13aW5kb3cuc2NyZWVuLndpZHRoLHRoaXMuaW5uZXJXaWR0aD43NjgmJih0aGlzLm5vQm9yZGVyPSJib3JkZXItbGVmdDogMnB4IHNvbGlkIGdyYXk7Iil9Z2V0UXVlcnlEYXRlVGltZShhLGQpe2xldCBoPXRoaXMucXVlcnlEYXRlVGltZS5maW5kKGY9PmYuY2xh'@;
put 'dXNlSW5kZXg9PT1hJiZmLnF1ZXJ5SW5kZXg9PT1kKTtpZighaCl7Y29uc3QgZj10aGlzLnF1ZXJ5RGF0ZVRpbWUucHVzaCh7Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmQsZGF0ZToiIix0aW1lOiIifSktMTtoPXRoaXMucXVlcnlEYXRlVGltZVtmXX1yZXR1cm4gaH11c2VQaWNrZXJzQ2hh'@;
put 'bmdlKCl7dGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMudXNlUGlja2VycyYmdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goYT0+e2EuZWxlbWVudHMuZm9yRWFjaChkPT57WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoZC5kZHR5cGUpJiZkLnZhbHVlVmFyaWFibGUm'@;
put 'JihkLnZhbHVlPSIiLGQudmFsdWVWYXJpYWJsZT0hMSl9KX0pfXJlc2V0RmlsdGVyKCl7dGhpcy53aGVyZVN0cmluZz12b2lkIDAsdGhpcy53aGVyZUNsYXVzZT12b2lkIDAsdGhpcy5xdWVyeU9iaj17ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCxkZHR5cGU6bnVsbCx2YXJpYWJs'@;
put 'ZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19LHRoaXMuY2xhdXNlcz17cXVlcnlPYmo6W3RoaXMucXVlcnlPYmpdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6dGhpcy5ncm91cExvZ2ljfSx0aGlzLndoZXJlQ2xhdXNlRm4oITApfXNl'@;
put 'dFRvR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBhPSIiOyJob21lIj09PUduLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Hbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Hbi5yb290'@;
put 'UGFyYW0mJihhPSJ2aWV3ZXIiKSxpbChHbixhKS5maWx0ZXIuZ3JvdXBMb2dpYz10aGlzLmdyb3VwTG9naWMsInN0cmluZyI9PXR5cGVvZiB0aGlzLndoZXJlQ2xhdXNlJiYoaWwoR24sYSkuZmlsdGVyLndoZXJlQ2xhdXNlPXRoaXMud2hlcmVDbGF1c2UpLCJzdHJpbmciPT10eXBlb2YgdGhp'@;
put 'cy5saWJkcyYmKGlsKEduLGEpLmZpbHRlci5saWJkcz10aGlzLmxpYmRzKSxpbChHbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmNsYXVzZXN9Z2V0RnJvbUdsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVybjtsZXQgYT0iIjsiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09'@;
put 'R24ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/YHZpZXdib3hlcy4ke3RoaXMudmlld2JveElkfWA6ImVkaXRvciI6InZpZXciPT09R24ucm9vdFBhcmFtJiYoYT0idmlld2VyIiksaWwoR24sYSkuZmlsdGVyLmNvbHMubGVuZ3RoPjAmJih0aGlzLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0'@;
put 'cmluZ2lmeShpbChHbixhKS5maWx0ZXIuY29scykpKSxpbChHbixhKS5maWx0ZXIudmFscy5sZW5ndGg+MCYmKHRoaXMudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlsKEduLGEpLmZpbHRlci52YWxzKSkpLCIiIT09aWwoR24sYSkuZmlsdGVyLmdyb3VwTG9naWMmJih0aGlzLmdy'@;
put 'b3VwTG9naWM9aWwoR24sYSkuZmlsdGVyLmdyb3VwTG9naWMsdGhpcy53aGVyZUNsYXVzZT1pbChHbixhKS5maWx0ZXIud2hlcmVDbGF1c2UsdGhpcy5saWJkcz1pbChHbixhKS5maWx0ZXIubGliZHMsdGhpcy5jbGF1c2VzPWlsKEduLGEpLmZpbHRlci5jbGF1c2VzLHRoaXMud2hlcmVDbGF1'@;
put 'c2VGbigpKX1zZXRHcm91cExvZ2ljKGEpe3RoaXMuZ3JvdXBMb2dpYz1hLHRoaXMuY2xhdXNlcy5ncm91cExvZ2ljPWEsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1kYXRlQ2hhbmdlKGEsZCxoLGYsXyl7bGV0IFQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRK'@;
put 'c0RhdGVUb1Nhc0RhdGUoYSk7IkJFVFdFRU4iPT09ZC5vcGVyYXRvciYmdm9pZCAwIT09XyYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZVtfXT1UKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKFQsaCxmKX1kYXRlVGltZUNoYW5nZShhLGQsaCxmKXtjb25zdCBf'@;
put 'PXRoaXMuZ2V0UXVlcnlEYXRlVGltZShoLGQpO2lmKCIiPT09Xy5kYXRlKXtpZigiIj09PWEudmFsdWUpcmV0dXJuO18uZGF0ZT1hLnZhbHVlLnNwbGl0KCI6IilbMF19Y29uc3QgVD1wYXJzZUludChfLnRpbWUuc3BsaXQoIjoiKVswXSksVz1wYXJzZUludChfLnRpbWUuc3BsaXQoIjoiKVsx'@;
put 'XSksaWU9cGFyc2VJbnQoXy50aW1lLnNwbGl0KCI6IilbMl0pfHwwO2xldCBnZT1uZXcgRGF0ZShfLmRhdGUpLHdlPW5ldyBEYXRlKGdlLmdldEZ1bGxZZWFyKCksZ2UuZ2V0TW9udGgoKSxnZS5nZXREYXRlKCksVCxXLGllKSxFZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRv'@;
put 'U2FzRGF0ZSh3ZSwic2Vjb25kcyIpOyJCRVRXRUVOIj09PWEub3BlcmF0b3ImJnZvaWQgMCE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVbZl09RWUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoRWUsZCxoKX10aW1lQ2hhbmdlKGEsZCxoLGYsXyl7YT1h'@;
put 'LnRhcmdldC52YWx1ZTtsZXQgRWU9NjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzBdKSo2MCs2MCpwYXJzZUludChhLnNwbGl0KCI6IilbMV0pKyhwYXJzZUludChhLnNwbGl0KCI6IilbMl0pfHwwKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAhPT1fJiYodGhpcy5jbGF1c2VzLnF1'@;
put 'ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW19dPUVlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKEVlLGgsZil9ZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihhLGQpe2xldCBoPVtdO2lmKHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Fd'@;
put 'LmVsZW1lbnRzLmxlbmd0aD4xKWZvcihsZXQgZj0wO2Y8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDtmKyspZm9yKGxldCBfPTA7Xzx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHMubGVuZ3RoO18rKyl7aWYoZj09PWEmJl89PT1kfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVz'@;
put 'KHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YXJpYWJsZSl8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLm9wZXJhdG9yKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpb'@;
put 'Zl0uZWxlbWVudHNbX10udmFsdWUpKWNvbnRpbnVlO2xldCBUPSIiO2NvbnN0IFc9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLm9wZXJhdG9yLGllPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YXJpYWJsZTsiQkVUV0VFTiI9PT1XP1Q9YCR7dGhp'@;
put 'cy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhbHVlWzBdfSBBTkQgJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl1bX10udmFsdWVbMV19YDoiSU4iPT09V3x8Ik5PVCBJTiI9PT1XPyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl1bX10udmFsdWUuZm9yRWFjaChnZT0+e2lmKGdl'@;
put 'LmNoZWNrZWQpe2xldCB3ZT1nZS52YWw7InN0cmluZyIhPXR5cGVvZiB3ZXx8KDAsdDMuaXNTcGVjaWFsTWlzc2luZykod2UpP1QubGVuZ3RoPjA/VCs9YCwke3dlfWA6VD1gKCR7d2V9YDpULmxlbmd0aD4wP1QrPWAsJyR7d2V9J2A6VD1gKCcke3dlfSdgfX0pLFQubGVuZ3RoPjAmJihUKz0i'@;
put 'KSIpKToiIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YWx1ZT9UPSJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS50eXBlPyInICciOiIuIjoiY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udHlw'@;
put 'ZSYmKFQ9YCcke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YWx1ZX0nYCksaC5wdXNoKHtHUk9VUF9MT0dJQzp0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzp0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdS'@;
put 'T1VQX0lEOmYsVkFSSUFCTEVfTk06aWUsT1BFUkFUT1JfTk06VyxSQVdfVkFMVUU6VHx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhbHVlfSl9cmV0dXJuIGh9Z2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil7dmFyIF89dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7'@;
put 'Y29uc3QgVD1fLmxpYmRzfHwiIjt0cnl7aWYodm9pZCAwIT09Xy5jb2xzKXtmb3IobGV0IGV0PTA7ZXQ8Xy5jb2xzLmxlbmd0aDtldCsrKV8uY29sc1tldF0uTkFNRT09PWQmJihfLnNlbFZhci5pbmRleD1ldCk7Y29uc3QgVz1fLmNvbHNbXy5zZWxWYXIuaW5kZXhdLkREVFlQRSx7c3RhcnRy'@;
put 'b3c6aWUscm93czpnZX09Xy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLHdlPV8ucm93c19pbmNyZW1lbnQsRWU9aWUrZ2U7bGV0IFplPVtdO18uZHluYW1pY1doZXJlQ2xhdXNlJiYoWmU9Xy5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGYsaCkpO2NvbnN0IG90PVsiREFURVRJ'@;
put 'TUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKFcpO18uc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGQsVCxaZSxFZSx3ZSkudGhlbihldD0+e2NvbnN0IHl0PWV0LnZhbHMse1NUQVJUUk9XOmt0LFJPV1M6U3QsTk9CUzpRdH09ZXQubWV0YVswXTtpZihfLmNsYXVzZXMucXVlcnlP'@;
put 'YmpbZl0uZWxlbWVudHNbaF0uc3RhcnRyb3c9a3QsXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnJvd3M9U3QsXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLm5vYnM9UXQsMT09PXl0Lmxlbmd0aCYmIiI9PT15dFswXS5GT1JNQVRURUQmJiIiPT09eXRbMF0uVU5G'@;
put 'T1JNQVRURUQ/YS5sb2FkTW9yZUZpbmlzaGVkKCExKTooXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5wdXNoKC4uLnl0Lm1hcChObj0+e2NvbnN0IGNyPSJudW0iPT09ZXQuJHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBfaT1jciYmKDAsdDMuaXNTcGVj'@;
put 'aWFsTWlzc2luZykoTm4uVU5GT1JNQVRURUQpPyIuIitObi5VTkZPUk1BVFRFRDpObi5VTkZPUk1BVFRFRDtyZXR1cm4gY3ImJm51bGw9PT1faSYmKF9pPSIuIikse2Zvcm1hdHRlZDpvdD9Obi5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTpObi5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6X2l9fSkp'@;
put 'LGEubG9hZE1vcmVGaW5pc2hlZChRdC1fLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVzLmxlbmd0aD4wKSksXy53aGVyZUNsYXVzZUZuKCksXy5zZXRUb0dsb2JhbHMoKSxfLndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09Xy5wZW5kaW5nSU5WYWx1ZXNTZXQpe2Nv'@;
put 'bnN0e2NsYXVzZUluZGV4OnJuLHF1ZXJ5SW5kZXg6dm59PV8ucGVuZGluZ0lOVmFsdWVzU2V0O18uc2V0SU5WYWx1ZXMocm4sdm4pLF8ucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9Xy5jZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2goZXQ9PntfLndoZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1j'@;
put 'YXRjaChXKXtfLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjb2x2YWxzIixXKX19KSgpfWdldFZhbHVlcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITA7bGV0IF89IiI7dm9pZCAwIT09Zi5s'@;
put 'aWJkcyYmKF89Zi5saWJkcyksZi5jbGVhclZhbHVlcyhkLGgpLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9W10sZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPSIiLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRv'@;
put 'cj0iPSIsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhcmlhYmxlPWE7dHJ5e2lmKHZvaWQgMCE9PWYuY29scyl7Zm9yKGxldCBnZT0wO2dlPGYuY29scy5sZW5ndGg7Z2UrKylmLmNvbHNbZ2VdLk5BTUU9PT1hJiYoZi5zZWxWYXIuaW5kZXg9Z2UpO2NvbnN0IFQ9Zi5jb2xz'@;
put 'W2Yuc2VsVmFyLmluZGV4XS5ERFRZUEU7Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLmRkdHlwZT1ULGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlPWYuY29sc1tmLnNlbFZhci5pbmRleF0uVFlQRSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNb'@;
put 'ZF0ub3BlcmF0b3JzPSJudW0iPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnR5cGU/Zi5udW1PcGVyYXRvcnM6Zi5jaGFyT3BlcmF0b3JzO2xldCBXPVtdO2YuZHluYW1pY1doZXJlQ2xhdXNlJiYoVz1mLmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoaCxkKSk7Y29uc3Qg'@;
put 'aWU9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoVCk7Zi5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoYSxfLFcsMSxmLmluaXRpYWxfcm93cykudGhlbihnZT0+e2NvbnN0IHdlPWdlLnZhbHMse1NUQVJUUk9XOkVlLFJPV1M6WmUsTk9CUzpvdH09Z2UubWV0YVsw'@;
put 'XTtpZihmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uc3RhcnRyb3c9RWUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnJvd3M9WmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm5vYnM9b3QsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRz'@;
put 'W2RdLnZhbHVlcz13ZS5tYXAoZXQ9Pntjb25zdCB5dD0ibnVtIj09PWdlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgU3Q9eXQmJigwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKGV0LlVORk9STUFUVEVEKT8iLiIrZXQuVU5GT1JNQVRURUQ6ZXQuVU5GT1JNQVRURUQ7cmV0dXJuIHl0'@;
put 'JiZudWxsPT09U3QmJihTdD0iLiIpLHtmb3JtYXR0ZWQ6aWU/ZXQuRk9STUFUVEVELnNwbGl0KCIuIilbMF06ZXQuRk9STUFUVEVELHVuZm9ybWF0dGVkOlN0fX0pLnNsaWNlKDAsMmUzKSxmLndoZXJlQ2xhdXNlRm4oKSxmLnNldFRvR2xvYmFscygpLGYud2hlcmVDbGF1c2VMb2FkaW5nPSEx'@;
put 'LG51bGwhPT1mLnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6ZXQscXVlcnlJbmRleDp5dH09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQ7Zi5zZXRJTlZhbHVlcyhldCx5dCksZi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1mLmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChn'@;
put 'ZT0+e2Yud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKFQpe2YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLFQpfX0pKCl9Z2V0bG9naWMoYSl7dGhpcy5sb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpfXNldExvZ2ljKCl7dGhpcy53'@;
put 'aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1pc0FycihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5JiZhLmxlbmd0aD4wJiZ0eXBlb2YgYVswXS5jaGVja2VkPCJ1In1zZWxlY3RlZExhYmVsQ2hhbmdlKGEsZCl7ZC52YWx1ZVZhcmlhYmxlPSJWYXJpYWJsZSI9PT1hLGQu'@;
put 'dmFsdWU9IiIsdGhpcy53aGVyZUNsYXVzZUZuKCl9dmFyaWFibGVJbnB1dENoYW5nZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlcyhhLGQsaCl9c2V0VmFyaWFibGVWYWx1ZXMoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcjsiQkVUV0VF'@;
put 'TiIhPT1mJiYiSU4iIT09ZiYmIk5PVCBJTiIhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPWEudG9TdHJpbmcoKSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRWYXJpYWJsZU9wZXJhdG9yKGEsZCxoKXtsZXQgZj10'@;
put 'aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU7ZiBpbnN0YW5jZW9mIEFycmF5JiYiSU4iIT09ZCYmIk5PVCBJTiIhPT1kJiYoZj1mIGluc3RhbmNlb2YgQXJyYXkmJjI9PT1mLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBmWzBdP2ZbMF06IiIpLHRoaXMuY2xlYXJW'@;
put 'YWx1ZXNPcGVyYXRvcihhLGgpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS5vcGVyYXRvcj1kLCgiPSI9PT1kfHwiPiI9PT1kfHwiPCI9PT1kfHwiPD0iPT09ZHx8Ij49Ij09PWR8fCJORSI9PT1kKSYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52'@;
put 'YWx1ZT1mKSwiQkVUV0VFTiI9PT1kJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPVtdLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKGYpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5w'@;
put 'dXNoKCIiKSksKCJJTiI9PT1kfHwiTk9UIElOIj09PWQpJiZ0aGlzLnNldElOVmFsdWVzKGgsYSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRJTlZhbHVlcyhhLGQpe2NvbnN0IGg9W10sZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0u'@;
put 'dmFsdWVzO2YubGVuZ3RoPDEmJih0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD17Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmR9KTtmb3IobGV0IF89MDtfPGYubGVuZ3RoO18rKyloLnB1c2goe2NoZWNrZWQ6ITEsdmFsOmZbX10uZm9ybWF0dGVkfSk7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Fd'@;
put 'LmVsZW1lbnRzW2RdLnZhbHVlPWh9Y2xlYXJWYWx1ZXMoYSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWU9IiJ9Y2xlYXJWYWx1ZXNPcGVyYXRvcihhLGQpe2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS5vcGVyYXRvcjsoIkJF'@;
put 'VFdFRU4iPT09aHx8IklOIj09PWh8fCJOT1QgSU4iPT09aHx8IkNPTlRBSU5TIj09PWgpJiZ0aGlzLmNsZWFyVmFsdWVzKGEsZCl9aGFzSW52YWxpZENsdWFzZShhKXtmb3IobGV0IGQgb2YgYSl7aWYobnVsbD09PWQudmFyaWFibGV8fG51bGw9PT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YWx1'@;
put 'ZXx8IiI9PT1kLnZhbHVlKXJldHVybiBkLmludmFsaWRDbGF1c2U9ITAsITA7ZC5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiBhLmludmFsaWRDbGF1c2U9ITEsITF9aGFzSW52YWxpZEdyb3VwQ2x1YXNlKCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2ErKyl7'@;
put 'aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSEwLCEwO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiExfWFk'@;
put 'ZENsYXVzZShhKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBj'@;
put 'bGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpO3RoaXMuY2xhdXNlQW10LnB1c2goIiIpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10s'@;
put 'b3BlcmF0b3JzOltdfSk7bGV0IGQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYz10eXBlb2YgZD4idSI/IkFORCI6Ik9SIj09PWQ/Ik9SIjoiQU5EIix0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRv'@;
put 'R2xvYmFscygpfWFkZEdyb3VwQ2xhdXNlKCl7dGhpcy5oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5'@;
put 'LiIpOih0aGlzLmNsYXVzZXMucXVlcnlPYmoucHVzaCh7ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19KSx0aGlzLnNldFRvR2xvYmFscygpKX1pc0luSHRtbENvbGxl'@;
put 'Y3Rpb24oYSxkKXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylpZihkW2hdLnZhbHVlPT09YSlyZXR1cm4hMDtyZXR1cm4hMX1yZW1vdmVHcm91cENsYXVzZShhKXt0aGlzLmNsYXVzZXMucXVlcnlPYmouc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCl9cmVtb3ZlQ2xhdXNlKGEs'@;
put 'ZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9d2hlcmVDbGF1c2VGbihhPSExKXtjb25zdCBkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5jbGF1c2VzKTtpZihh'@;
put 'JiYoZC5xdWVyeU9ialswXS5lbGVtZW50cz1bXSksdm9pZCAwIT09dGhpcy5saWJkcyl7bGV0IGg9dGhpcy5zYXNTdG9yZVNlcnZpY2Uud2hlcmVDbGF1c2VDcmVhdG9yKGQsdGhpcy5ncm91cExvZ2ljLHRoaXMubGliZHMpO2F8fCh0aGlzLndoZXJlQ2xhdXNlPWgud2hlcmVDbGF1c2UsdGhp'@;
put 'cy53aGVyZVN0cmluZz1oLnN0cmluZyl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EuX3JlbW92ZVFyeT1hLnNhc1N0b3JlU2VydmljZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+PTEmJihh'@;
put 'LmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1ZXJ5T2JqWzBd'@;
put 'LmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KSxhLndoZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5zU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNvbHVtbnMuc3Vi'@;
put 'c2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29sczsiaG9tZSIhPT1Hbi5yb290UGFyYW0mJiJlZGl0b3IiIT09R24ucm9vdFBhcmFtfHwoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEduLmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksInZpZXciPT09'@;
put 'R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmlsdGVyLmNvbHMubGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsR24udmlld2VyLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRzfHwoYS5saWJkcz1kLmxpYmRzKX0pLGEudmFsdWVzU3Vi'@;
put 'PWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5zdWJzY3JpYmUoZD0+eygiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9vdFBhcmFtKSYmR24uZWRpdG9yLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxHbi5lZGl0b3IuZmlsdGVyLnZhbHM9SlNPTi5w'@;
put 'YXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSksInZpZXciPT09R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLEduLnZpZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKX0pfSkoKX1v'@;
put 'bkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJf'@;
put 'aWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KEFjKSx0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcXVlcnkiXV0saW5wdXRzOntjYWNoaW5nOiJjYWNoaW5nIix2aWV3Ym94SWQ6InZpZXdib3hJZCJ9LGZlYXR1cmVzOlt0aShbe3Byb3Zp'@;
put 'ZGU6S2QsdXNlVmFsdWU6ImVuLUdCIn1dKV0sZGVjbHM6MzgsdmFyczoxMSxjb25zdHM6W1sxLCJjbHItZmxleC1yb3ciLCJjbHItZm9ybS1jb250cm9sIiwibS0wIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5n'@;
put 'TW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsIm1sLTE1Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImlkIiwidXNlUGlja2VycyIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2Ui'@;
put 'LCJjaGFuZ2UiXSxbMSwiY2xyLXJvdyJdLFsxLCJzZWxlY3QiLCJjbHItY29sLW1kLTIiLCJtYi0zMCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJkaXNhYmxlZCIsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsInNlbGVjdGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWNvbC1t'@;
put 'ZC0xMCIsIm1iLTMwIl0sWzEsImxpbmUtbnVtYmVycyIsImxhbmd1YWdlLW1hcmt1cCJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwibGFuZ3VhZ2Utc3FsIl0sWzEsImNvbnRlbnQiXSxbMSwiY2xhdXNlcy1jb250YWluZXIiLCJjbHItY29s'@;
put 'LW1kLTEyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiY2xhdXNlLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJwaWNrZXIiLCIiXSxbIm5vdFBpY2tlciIsIiJdLFsibm90UGlja2VyUmFuZ2UiLCIiXSxbImNoZWNrYm94VmFsdWVzIiwiIl0sWzMsInNlbGVjdGVkIl0sWzEsInByb2dyZXNT'@;
put 'dGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwiY2xhdXNlLXJvdyJdLFsxLCJjbGF1c2UtbG9naWMiLCJjbHItY29sLW1kLTIiXSxbMSwic2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwiYnRuIGJ0bi1w'@;
put 'cmltYXJ5IGJ0bi1ibG9jayBtdC0xMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2xhdXNlLXF1ZXJ5IiwiY2xyLWNvbC1tZC0xMCJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsImNsYXNzIiwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0s'@;
put 'WyJjbGFzcyIsImNsci1yb3ciLDMsImludmFsaWQtY2xhdXNlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLCJtdC0xMCIsMywiY2xpY2siXSxbInNoYXBlIiwicGx1cyJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsMSwicmVt'@;
put 'b3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIl0sWzEsInZhcmlhYmxlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbMSwiZGF0YWxpc3Qtd3JhcHBlciJdLFsibGFiZWwiLCJWYXJpYWJsZSIsMywiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZh'@;
put 'bHVlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm9wZXJhdG9yLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsclNlbGVjdCIsIiIsMSwibXQtMiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNz'@;
put 'IiwidmFsdWUtY29sIGZvcm0tZ3JvdXAgY2xyLWNvbC1tZC0zIiw0LCJuZ1ZhciJdLFsxLCJjbGF1c2UtYnV0dG9ucyIsImNsci1jb2wtbWQtMiIsImJ0bi1ncm91cCJdLFsxLCJidG4iLCJidG4td2FybmluZyIsImJ0bi1ibG9jayIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJt'@;
put 'aW51cyJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbMSwidmFsdWUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xhc3MiLCJjaGVja2JveC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpbmdsZS1maWVsZC12YWxzIiw0LCJu'@;
put 'Z0lmIl0sWyJjbGFzcyIsInJhbmdlLXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGFpbnMtdmFscyIsNCwibmdJZiJdLFsxLCJjaGVja2JveC12YWxzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5n'@;
put 'VGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsInNpbmdsZS1maWVsZC12YWxzIl0sWzEsInJhbmdlLXZhbHMiXSxbMSwiZnJvbSJdLFsxLCJ0byJdLFsxLCJjb250YWlucy12YWxzIl0sWyJ0eXBlIiwidGV4dCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsz'@;
put 'LCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJkaXNhYmxlU29mdHNl'@;
put 'bGVjdCIsImlucHV0SWQiLCJ2YWx1ZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Il0sWyJ0eXBlIiwidGltZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJ0'@;
put 'aW1lIiwzLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSIsIm9uSW5wdXRFdmVudCJdLFsibGFiZWwiLCJWYWx1ZSIsMywic2Vjb25kTGFiZWwiLCJlbWl0T25seVNlbGVjdGVkIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJzZWxlY3RlZExhYmVsQ2hh'@;
put 'bmdlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMywidmFsdWUiLDQsIm5nSWYiXSxbImxhYmVsIiwiVmFsdWUiLDMsImlucHV0SWQiLCJ2YWx1ZSIs'@;
put 'ImVuYWJsZUxvYWRNb3JlIiwiZGlzYWJsZWQiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiXSxbMSwiaW4tdmFsdWVzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEs'@;
put 'Im1vZGFsLWJvZHkiXSxbImNsYXNzIiwibm8tdmFsdWVzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZvcm0tYmxvY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwibm8tdmFsdWVzIl0sWzEs'@;
put 'ImZvcm0tYmxvY2siXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDMsImlu'@;
put 'cHV0IiwyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZHluYW1pY1doZXJlQ2xhdXNlPWZ9KSx5ZSgpLG1lKDQsImxhYmVsIiwzKSxOZSg1LCJEeW5hbWljIHdoZXJlIGNsYXVzZSIpLHllKCkoKSgpLG1lKDYsImRpdiIsNCkoNywiY2xyLWNoZWNrYm94LXdyYXBw'@;
put 'ZXIiKSg4LCJpbnB1dCIsNSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnVzZVBpY2tlcnM9Zn0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudXNlUGlja2Vyc0NoYW5nZSgpfSkseWUoKSxtZSg5LCJsYWJlbCIsMyksTmUoMTAsIiBVc2UgcGlja2VycyAi'@;
put 'KSx5ZSgpKCkoKSgpLG1lKDExLCJkaXYiLDYpKDEyLCJkaXYiLDcpKDEzLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDE0LCJsYWJlbCIpLE5lKDE1LCJHcm91cCBsb2dpYyIpLHllKCksbWUoMTYsInNlbGVjdCIsOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmdy'@;
put 'b3VwTG9naWM9Zn0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnNldEdyb3VwTG9naWMoZC5ncm91cExvZ2ljKX0pLFFlKDE3LGpCZSwyLDIsIm9wdGlvbiIsOSkseWUoKSgpKCksbWUoMTgsImRpdiIsMTApKDE5LCJwcmUiLDExKSxOZSgyMCwiICAgICAgIiksUWUoMjEs'@;
put 'ekJlLDQsMCwiZGl2IiwxMiksTmUoMjIsIlxuXG4gICAgICAiKSxtZSgyMywiY29kZSIsMTMpLE5lKDI0KSx5ZSgpLE5lKDI1LCJcbiAgICAiKSx5ZSgpKCkoKSxtZSgyNiwiZGl2IiwxNCkoMjcsImRpdiIsMTUpLFFlKDI4LFVCZSwxLDAsImRpdiIsMTYpLFFlKDI5LGNqZSwxNSw4LCJkaXYi'@;
put 'LDE3KSx5ZSgpKCksUWUoMzAsZmplLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMTgsRWMpLFFlKDMyLGJqZSwzLDcsIm5nLXRlbXBsYXRlIixudWxsLDE5LEVjKSxRZSgzNCx3amUsMiw1LCJuZy10ZW1wbGF0ZSIsbnVsbCwyMCxFYyksUWUoMzYseGplLDksNCwibmctdGVtcGxhdGUiLG51bGws'@;
put 'MjEsRWMpKSwyJmEmJihDZSgzKSxSZSgibmdNb2RlbCIsZC5keW5hbWljV2hlcmVDbGF1c2UpLENlKDUpLFJlKCJuZ01vZGVsIixkLnVzZVBpY2tlcnMpLENlKDgpLFJlKCJkaXNhYmxlZCIsKG51bGw9PWQuY2xhdXNlc3x8bnVsbD09ZC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6ZC5jbGF1c2Vz'@;
put 'LnF1ZXJ5T2JqLmxlbmd0aCk8MSkoIm5nTW9kZWwiLGQuZ3JvdXBMb2dpYyksQ2UoMSksUmUoIm5nRm9yT2YiLGQubG9naWNPcGVyYXRvcnMpLENlKDQpLFJlKCJuZ0lmIixkLndoZXJlQ2xhdXNlTG9hZGluZyksQ2UoMyksb3IoZC53aGVyZUNsYXVzZSksQ2UoMyksZHIoImNsci1jb2wtbWQt'@;
put 'MTAiLChudWxsPT1kLmNsYXVzZXN8fG51bGw9PWQuY2xhdXNlcy5xdWVyeU9iaj9udWxsOmQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09ZC5jbGF1c2VzfHxudWxsPT1kLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpkLmNsYXVzZXMucXVlcnlPYmou'@;
put 'bGVuZ3RoKT4xKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5jbGF1c2VzLnF1ZXJ5T2JqKSl9LGRlcGVuZGVuY2llczpbeHMsWmkscmQsbmQsdGgsa2Esb3Usc3UsVXMsRDAsRDgsVDAsTjgsSDgsbDEsYzEsV2EsUzAsTTAsQnMsT3MsTXNlLFU3LFZCZSxCQmVdLHN0eWxlczpbJ0BjaGFyc2V0ICJV'@;
put 'VEYtOCI7LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNvbnRlbnRbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtbG9naWNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNlOWU5ZTk7'@;
put 'cGFkZGluZzoxNXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjMwcHggMCAyMHB4IDIwcHg7YmFja2dyb3VuZDojZmJmOGY4O2Rpc3Bs'@;
put 'YXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gPiAuY2xyLXJvd1tfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0l'@;
put 'Q09NUCVdID4gLmNsci1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7cGFkZGluZy1ib3R0b206MTVweDttYXJnaW4tYm90dG9tOjE1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTYpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j'@;
put 'bGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDtjb2xvcjpncmF5'@;
put 'fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpm'@;
put 'bGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5kYXRhbGlzdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhcmlhYmxlLWNvbFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuZGF0YWxpc3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNs'@;
put 'YXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zZWxlY3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX0uY29udGVudFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5n'@;
put 'LWJvdHRvbToxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hlY2tib3gtdmFsc1tf'@;
put 'bmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nOjAgNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWNoZWNrYm94LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5jb250ZW50W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgc2VjdGlvbltfbmdj'@;
put 'b250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMjBweDtvdmVyZmxvdy15OnNjcm9sbH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29s'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWlu'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1'@;
put 'dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNp'@;
put 'bmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVl'@;
put 'cnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1j'@;
put 'b250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0'@;
put 'LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFu'@;
put 'Z2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjEwcHh9LmNvbnRlbnRbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUt'@;
put 'Y29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25n'@;
put 'Y29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxz'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjEwMHB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWlu'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12'@;
put 'YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVz'@;
put 'ZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAl'@;
put 'O3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlu'@;
put 'cy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNv'@;
put 'bnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFk'@;
put 'ZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpm'@;
put 'bGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY2xhdXNlLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6YXV0b30uaW52YWxpZC1jbGF1c2VbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0YjMxfS5jbGF1c2Utcm93'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0uY2xhdXNlLXJvd1tfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7cG9zaXRpb246cmVsYXRpdmU7Y29udGVudDoiIjtoZWlnaHQ6LjQxNjY3cmVtO3dpZHRoOi40MTY2N3JlbTt0b3A6LjI5'@;
put 'MTY3cmVtO3JpZ2h0Oi4yNXJlbTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmdcXDIwMjYlMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzEl'@;
put 'MkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46MH1bX25nY29udGVudC0lQ09NUCVdOm5vdChwcmUpID4gY29kZVtjbGFzcyo9bGFuZ3Vh'@;
put 'Z2UtXVtfbmdjb250ZW50LSVDT01QJV0sIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmJmOGY4fXByZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo4cHg7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1'@;
put 'czoxcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6NjZweDtwb3NpdGlvbjpyZWxhdGl2ZX1wcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5zcGlubmVyW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7dG9wOjEwcHh9cHJlW2NsYXNzKj1sYW5ndWFnZS1dIGNvZGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3Jk'@;
put 'ZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjow'@;
put 'O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2IzYjNiM31pbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOm5vbmV9LmluLXZhbHVlcy1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZDhkOGQ4O21hcmdpbi10b3A6MTBweH0ucHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jlc3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3dpZHRoOjEw'@;
put 'MCU7aGVpZ2h0OjRweDt0b3A6M3B4fSddfSksY30pKCk7Y29uc3QgRWplPVsic2VhcmNoTGliVHJlZUlucHV0Il07ZnVuY3Rpb24ga2plKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsOSl9ZnVuY3Rpb24gQWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEw'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBUamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwz'@;
put 'KSgxLCJkaXYiLDQpKDIsImlucHV0Iiw1LDYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJpZXNTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9uRmlsdGVyKCkpfSkseWUo'@;
put 'KSxRZSg0LGtqZSwxLDAsImNsci1pY29uIiw3KSxRZSg1LEFqZSwxLDAsImNsci1pY29uIiw4KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxD'@;
put 'ZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIERqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIElqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZl'@;
put 'KCk7Y29uc3QgaD0kaSgzKSxmPVZlKDIpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLHllKCl9fWZ1bmN0aW9uIExqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Wbigp'@;
put 'O21lKDAsImNsci10cmVlLW5vZGUiLDMpKDEsImRpdiIsNCkoMiwiaW5wdXQiLDE3LDE4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3Qg'@;
put 'aD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLHllKCksUWUoNCxEamUsMSwwLCJjbHItaWNvbiIsNyksUWUoNSxJamUsMSwwLCJjbHItaWNvbiIsOCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKDIpLiRpbXBsaWNp'@;
put 'dDtDZSgyKSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFJqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBPamUoYyxs'@;
put 'KXsxJmMmJnF0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gUGplKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLHllKCkpfWZ1bmN0aW9uIEZqZShjLGwpe2lmKDEmYyYmKG1l'@;
put 'KDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxRZSgxLFBqZSwyLDAsInNwYW4iLDI1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcjtDZSgxKSxSZSgibmdJZiIsYSl9fWZ1bmN0aW9uIEhqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIE5qZShjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKDMpLiRpbXBsaWNpdCxfPVZlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVy'@;
put 'KGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLHllKCl9fWZ1bmN0aW9uIFZqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDMpKDEsImRpdiIsNCkoMiwiaW5wdXQiLDI5LDE4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEp'@;
put 'LGp0KFZlKDMpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpLFFlKDQsSGplLDEsMCwiY2xyLWlj'@;
put 'b24iLDcpLFFlKDUsTmplLDEsMCwiY2xyLWljb24iLDgpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgzKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYi'@;
put 'LGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBCamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0LF89VmUoMykuJGltcGxpY2l0LFQ9VmUo'@;
put 'MikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbHVtbk9uQ2xpY2soZixULF8pKX0pLHF0KDIsImNsci1pY29uIiwzMSksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDYpO0NlKDEpLGRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShh'@;
put 'LkNPTFVSSSkpLENlKDIpLGdyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gamplKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxWamUsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSxRZSgyLEJqZSw0LDMsImNsci10cmVlLW5vZGUiLDEpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1w'@;
put 'bGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEuY29sdW1ucyksQ2UoMSksUmUoIm5nRm9yT2YiLGEuY29sdW1ucyl9fWZ1bmN0aW9uIHpqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0'@;
put 'IGY9QnQoYSkubmdWYXIsXz1WZSgpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdCxXPVZlKCk7cmV0dXJuIGp0KGY/IiI6Vy50YWJsZU9uQ2xpY2soXy5UQUJMRVVSSSxfLFQpKX0pLEJyKDIsMjEpLFFlKDMsUmplLDEsMCwiY2xyLWljb24iLDIyKSxRZSg0LE9qZSwxLDAsImNsci1pY29u'@;
put 'IiwyMyksVXIoKSxOZSg1KSx5ZSgpLFFlKDYsRmplLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMjQpLFFlKDcsamplLDMsMiwibmctY29udGFpbmVyIiwyNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVZlKCkuJGltcGxpY2l0LGg9VmUoMikuJGltcGxpY2l0LGY9VmUoKTtD'@;
put 'ZSgxKSxkcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1hY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksQ2UoMSksUmUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITApLENlKDEpLFJlKCJuZ1N3aXRjaENh'@;
put 'c2UiLCExKSxDZSgxKSxncigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLENlKDIpLFJlKCJuZ0lmIixmLmhhc0NvbHVtbnMpfX1mdW5jdGlvbiBVamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxMikseHQoImNsaWNrIixmdW5jdGlvbihoKXtj'@;
put 'b25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlTm9kZUNsaWNrZWQoaCxfLFQudGFibGVzKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxRZSgx'@;
put 'LHpqZSw4LDksImNsci10b29sdGlwIiwxOSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoMyk7ZHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1u'@;
put 'cyYmIWEuY29sdW1ucyksQ2UoMSksUmUoIm5nVmFyIixkKzE+aC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBaamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxMiwxMykseHQoImNsaWNrIixmdW5j'@;
put 'dGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8ubGlicmFyeUxpc3QpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVk'@;
put 'PWgpfSksbWUoMiwicCIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPSRpKDEpLGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBfLmxpYj1mLkxJQlJBUllJRCxqdChfLmxpYnJhcnlPbkNsaWNrKF8ubGlifHwiIixmLGgpKX0pLHF0KDMsImNsci1pY29uIiwx'@;
put 'NSksTmUoNCkseWUoKSxRZSg1LExqZSw2LDMsImNsci10cmVlLW5vZGUiLDApLFFlKDYsVWplLDIsNSwiY2xyLXRyZWUtbm9kZSIsMTYpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5l'@;
put 'eHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSg0KSxncigiICIsYS5MSUJSQVJZTkFNRSwiICIpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gWWplKGMsbCl7aWYoMSZjJiYo'@;
put 'QnIoMCksUWUoMSxaamUsNyw3LCJjbHItdHJlZS1ub2RlIiwxMSksVXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gV2plKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMikoMSwic3BhbiIsMzMp'@;
put 'LE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9bGV0IEdqZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2VhcmNoTGliSW5wdXRMaXN0PW5ldyBlaCx0aGlzLnRhYmxlT25DbGlja0VtaXR0'@;
put 'ZXI9bmV3IEVyLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyPW5ldyBFcix0aGlzLmhhc0NvbHVtbnM9ITEsdGhpcy5wYWdpbmc9ITAsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpY2VuY2VT'@;
put 'dGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZWFyY2hMaWJJbnB1dExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9bmdPbkNoYW5nZXMoYSl7YS5saWJyYXJ5TGlz'@;
put 'dD8uY3VycmVudFZhbHVlJiZ0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0KX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhp'@;
put 'cy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEduLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNl'@;
put 'Ij09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe2QuaW5Gb3JlZ3JvdW5kPSEwO2NvbnN0IGY9KCk9PnNldFRpbWVvdXQoKCk9PmguY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVl'@;
put 'cnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpKTtpZihkLnRhYmxlcylkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMH0pO2Vsc2V7ZC5sb2FkaW5nVGFibGVzPSEwLHRoaXMubGli'@;
put 'cmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMX0pO2NvbnN0IF89c2V0SW50ZXJ2YWwoKCk9PntkLmxvYWRpbmdUYWJsZXN8fChmKCksY2xlYXJJbnRlcnZhbChfKSl9LDUwMCl9ZC5leHBhbmRlZCYmZigpLHRoaXMuY29sbGFwc2VUcmVl'@;
put 'SXRlbXModGhpcy5saWJyYXJ5TGlzdCxkKX10YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2YuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoNTAsKCk9PntmLmhhc0NvbHVtbnM/KGQuY29sdW1ucz8oZC5leHBhbmRlZD0hZC5leHBhbmRlZCwh'@;
put 'MD09PWQuZXhwYW5kZWQmJihmLnRhYmxlPWEsZi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMH0pKSk6KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5sb2FkaW5nQ29sdW1ucz0hMCxmLnRhYmxlPWEsZi50'@;
put 'YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pKSxmLmNvbGxhcHNlVHJlZUl0ZW1zKGgudGFibGVzLGQpKTpmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJh'@;
put 'cnk6aCxjb2x1bW5zTG9hZGVkOiExfSl9KX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJSQVJZSUQsdGhpcy50YWJsZT1oLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09MVVJJfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkm'@;
put 'JmE9PT10aGlzLmxpYiYmZD09PXRoaXMudGFibGV9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19Y29sbGFwc2VU'@;
put 'cmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNl'@;
put 'cnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9aGFuZGxlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2QmJmQuc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5sb2FkTW9yZUxp'@;
put 'YnJhcmllcygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBYyksdHQoQzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZGMtdHJlZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKEVqZSw1KSwy'@;
put 'JmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLnNlYXJjaExpYklucHV0TGlzdD1oKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoInNjcm9sbCIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlU2Nyb2xsKGYpfSl9LGlucHV0czp7aGFzQ29sdW1uczoiaGFzQ29sdW1ucyIs'@;
put 'cGFnaW5nOiJwYWdpbmciLGxpYnJhcnlMaXN0OiJsaWJyYXJ5TGlzdCJ9LG91dHB1dHM6e3RhYmxlT25DbGlja0VtaXR0ZXI6InRhYmxlT25DbGlja0VtaXR0ZXIiLGxpYnJhcnlPbkNsaWNrRW1pdHRlcjoibGlicmFyeU9uQ2xpY2tFbWl0dGVyIn0sZmVhdHVyZXM6W3ZhXSxkZWNsczo0LHZh'@;
put 'cnM6Myxjb25zdHM6W1siY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIi'@;
put 'LCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0'@;
put 'aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4'@;
put 'cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbImxpYlRyZWVOb2RlIiwiIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHIt'@;
put 'ZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5'@;
put 'dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQs'@;
put 'Im5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxn'@;
put 'Il0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiQ29sdW1ucyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwib2JqZWN0'@;
put 'cyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLXRyZWUiKSxRZSgxLFRqZSw2LDMsImNsci10cmVlLW5vZGUiLDApLFFlKDIsWWplLDIsMSwibmctY29udGFpbmVyIiwx'@;
put 'KSx5ZSgpLFFlKDMsV2plLDMsMCwiZGl2IiwyKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQubGlicmFyeUxpc3QpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxpYnJhcnlMaXN0KSxDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJpZXNQYWdpbmcpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxuZCx0aCxk'@;
put 'ZCxnMSxEcCxrYSxadSxjMixmMSxqYixVYix6YixXYSxCcyxPcyxVN10sc3R5bGVzOlsiY2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH1jbHItdHJlZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5j'@;
put 'bHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzIC5jbHItdHJlZW5vZGUtbGlua3tiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yLCAjZThlOGU4KTt0ZXh0LWRlY29yYXRpb246bm9uZX0iXX0pLGN9KSgpO2NvbnN0'@;
put 'ICRqZT1bInJlc2l6ZUJveCJdLHFqZT1bImRyYWdIYW5kbGVDb3JuZXIiXTtmdW5jdGlvbiBLamUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiwzMiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksamMoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52'@;
put 'YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIFhqZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMzMpLHF0'@;
put 'KDEsImNsci1zcGlubmVyIiwzNCkseWUoKSl9ZnVuY3Rpb24gSmplKGMsbCl7MSZjJiYobWUoMCwicCIsMzUpLE5lKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSx5ZSgpKX1mdW5jdGlvbiBRamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkYy10cmVlIiwzNiks'@;
put 'eHQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnRhYmxlT25DbGljayhoKSl9KSx5ZSgpfTImYyYm'@;
put 'UmUoImxpYnJhcnlMaXN0IixWZSgpLmxpYnJhcmllcyl9ZnVuY3Rpb24gZXplKGMsbCl7MSZjJiYobWUoMCwicCIsMzcpLE5lKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIikseWUoKSl9ZnVuY3Rpb24gdHplKGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIs'@;
put 'NDUpfWZ1bmN0aW9uIG56ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBfLm1pbmltaXplKGYpLGp0KF8uc3RvcFByb3BhZ2F0aW9uKGgpKX0pLHF0'@;
put 'KDEsImNsci1pY29uIiwxNSksbWUoMiwic3BhbiIsMTQpLE5lKDMsIk1pbmltaXplIHZpZXdib3giKSx5ZSgpKCl9fWZ1bmN0aW9uIHJ6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1w'@;
put 'bGljaXQsXz1WZSgpO3JldHVybiBfLnJlc3RvcmUoZiksanQoXy5zdG9wUHJvcGFnYXRpb24oaCkpfSkscXQoMSwiY2xyLWljb24iLDE2KSxtZSgyLCJzcGFuIiwxNCksTmUoMywiUmVzdG9yZSB2aWV3Ym94IikseWUoKSgpfX1mdW5jdGlvbiBpemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4o'@;
put 'KTttZSgwLCJkaXYiLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuc2VsZWN0Vmlld2JveChmKSl9KSxtZSgxLCJkaXYiLDM5KSxOZSgyKSxRZSgzLHR6ZSwxLDAsImNsci1zcGlubmVyIiw0MCkseWUoKSxtZSg0LCJkaXYi'@;
put 'KSg1LCJhIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPVZlKCk7cmV0dXJuIFQucmVzZXRQb3NTaXplKF8pLGp0KFQuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLHF0KDYsImNsci1pY29uIiw0MiksbWUoNywic3BhbiIsMTQpLE5lKDgsIlJlc2V0'@;
put 'IHBvc2l0aW9uIGFuZCBzaXplIikseWUoKSgpLFFlKDksbnplLDQsMCwiYSIsNDMpLFFlKDEwLHJ6ZSw0LDAsImEiLDQzKSxtZSgxMSwiYSIsMTIpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1WZSgpO3JldHVybiBULmNsb3NlKF8pLGp0KFQuc3Rv'@;
put 'cFByb3BhZ2F0aW9uKGgpKX0pLHF0KDEyLCJjbHItaWNvbiIsNDQpLG1lKDEzLCJzcGFuIiwxNCksTmUoMTQsIkNsb3NlIHZpZXdib3giKSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7ZHIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxlY3RlZFZpZXdib3g/'@;
put 'bnVsbDpkLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxDZSgyKSxiMCgiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLENlKDEpLFJlKCJuZ0lmIixhLmxvYWRpbmdEYXRhKSxDZSgyKSxkcigiZGlzYWJsZWQiLDA9PT1hLngmJjA9PT1hLnkpLENlKDQpLFJlKCJu'@;
put 'Z0lmIiwhYS5taW5pbWl6ZWQpLENlKDEpLFJlKCJuZ0lmIixhLm1pbmltaXplZCl9fWZ1bmN0aW9uIG96ZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiBzemUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJkaXYiLDQ4KSgyLCJhcHAtYXV0b2NvbXBsZXRlIiw0OSw1MCkseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPSRpKDMpLF89VmUoKS5uZ1ZhcjtyZXR1cm4ganQoVmUoKS5vbkNvbHNlYXJjaENoYW5n'@;
put 'ZShmLGgsXy5jb2xIZWFkZXJzSGlkZGVuKSl9KSxRZSg0LG96ZSwyLDEsIm9wdGlvbiIsNTEpLHllKCkoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyO0NlKDIpLFJlKCJpbnB1dElkIiwidmlld2JveC1jb2x1bW4tc2VhcmNoIikoImVtaXRPbmx5U2VsZWN0ZWQiLCEwKSxDZSgy'@;
put 'KSxSZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzSGlkZGVuKX19ZnVuY3Rpb24gYXplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNTcpfWZ1bmN0aW9uIGx6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiw1OCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEp'@;
put 'O2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLm9uQ29sUmVtb3ZlKGgpKX0pLHllKCl9fWZ1bmN0aW9uIGN6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNTQpKDEsInNwYW4iKSxOZSgyKSxRZSgzLGF6ZSwxLDAsImNsci1pY29uIiw1NSkseWUoKSxRZSg0LGx6ZSwx'@;
put 'LDAsImNsci1pY29uIiw1NikseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMikubmdWYXIsaD1WZSgpO0ZNKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLGRyKCJjdXJzb3ItZGVmYXVsdC1pIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlIZWFkZXJTdHls'@;
put 'ZSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLFJlKCJjZGtEcmFnRGF0YSIsYSkoImNka0RyYWdEaXNhYmxlZCIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLENlKDIpLGpjKCIgIixhLCIgIiwibnVtIj09PShudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVk'@;
put 'Vmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1hdHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoiIiwiICIpLENlKDEpLFJlKCJuZ0lmIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksQ2UoMSksUmUoIm5nSWYiLCFk'@;
put 'LmhlYWRlclBrcy5pbmNsdWRlcyhhKSl9fWZ1bmN0aW9uIHV6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsInAiLDUpLE5lKDIsIkNvbHVtbnMgVG8gRGlzcGxheSAoZHJhZyBhbmQgcmUtb3JkZXIpIikseWUoKSxtZSgzLCJkaXYiLDUyKSx4dCgiY2RrRHJvcExpc3RE'@;
put 'cm9wcGVkIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY29sdW1uc0Ryb3AoaCkpfSksUWUoNCxjemUsNSwxMywiZGl2Iiw1MykseWUoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyO0NlKDMpLFJlKCJjZGtEcm9wTGlzdERhdGEiLGEuY29sSGVhZGVyc1Zpc2li'@;
put 'bGUpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gZHplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0NiksUWUoMSxzemUsNSwzLCJuZy1jb250YWluZXIiLDQ3KSxRZSgyLHV6ZSw1LDIsIm5nLWNvbnRhaW5lciIsNDcpLHllKCkpLDImYyl7Y29u'@;
put 'c3QgYT1sLm5nVmFyO0NlKDEpLFJlKCJuZ0lmIixhLmNvbEhlYWRlcnNIaWRkZW4pLENlKDEpLFJlKCJuZ0lmIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gaHplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDg1KSx4dCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jb2xsYXBzZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiBmemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsODYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZl'@;
put 'KCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmV4cGFuZChoKSl9KSx5ZSgpfX1mdW5jdGlvbiBwemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsODcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9JGkoMTYp'@;
put 'O3JldHVybiBqdChWZSgpLnNlYXJjaFRhYmxlKGYsaCkpfSkseWUoKX19ZnVuY3Rpb24gZ3plKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsODgpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIG16ZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDg5KSxOZSgxLCJMb2FkaW5nLi4u'@;
put 'IikseWUoKSl9ZnVuY3Rpb24gdnplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDkwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPSRpKDE2KTtyZXR1cm4gVmUoKS5yZWxvYWRUYWJsZURhdGEoaCksanQoZi52'@;
put 'YWx1ZT0iIil9KSx5ZSgpfX1mdW5jdGlvbiBfemUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDk0KSxxdCgxLCJjbHItc3Bpbm5lciIsMzQpLHllKCkpfWZ1bmN0aW9uIGJ6ZShjLGwpe2lmKDEmYyYmcXQoMCwiaG90LXRhYmxlIiw5NSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXIsZD1WZSgpLiRp'@;
put 'bXBsaWNpdCxoPVZlKCk7UmUoImhvdElkIiwiaG90SW5zdGFuY2Vfdmlld2JveF8iK2QuaWQpKCJyZWFkT25seSIsITApKCJtb2RpZnlDb2xXaWR0aCIsaC5tYXhXaWR0aENoZWtlcikoImNvcHlQYXN0ZSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvcHlQYXN0ZSkoImNvbnRleHRN'@;
put 'ZW51IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29udGV4dE1lbnUpKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixoLnZpZXdi'@;
put 'b3hUYWJsZXNbYV0uaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2x1bW5zKSgiZmlsdGVycyIsITApKCJkcm9wZG93bk1lbnUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGgudmll'@;
put 'd2JveFRhYmxlc1thXS5ob3RUYWJsZS5oZWlnaHQpKCJjZWxscyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgibGljZW5zZUtleSIsaC52aWV3'@;
put 'Ym94VGFibGVzW2FdLmhvdFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiB5emUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDkxKSxRZSgxLF96ZSwyLDAsImRpdiIsOTIpLFFlKDIsYnplLDEsMTcsImhvdC10YWJsZSIsOTMpLHllKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9VmUoKS4k'@;
put 'aW1wbGljaXQ7SHUoImRpc3BsYXkiLGQuY29sbGFwc2VkPyJub25lIjoiIiksQ2UoMSksUmUoIm5nSWYiLGQubG9hZGluZ0RhdGEmJmE8MCksQ2UoMSksUmUoIm5nSWYiLGE+LTEpfX1jb25zdCB3emU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57eDpjLHk6bH19O2Z1bmN0aW9uIEN6ZShjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTksNjApLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuZm9jdXNWaWV3Ym94KGYpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGlt'@;
put 'cGxpY2l0O3JldHVybiBqdChWZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxfKSl9KSxtZSgyLCJkaXYiLDYxKSgzLCJzcGFuIiw2MiksTmUoNCkseWUoKSxtZSg1LCJkaXYiLDYzKSxRZSg2LGh6ZSwxLDAsImNsci1pY29uIiw2NCksUWUoNyxmemUsMSwwLCJjbHItaWNvbiIsNjUpLG1lKDgsImNs'@;
put 'ci1pY29uIiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLm1pbmltaXplKGYpKX0pLHllKCksbWUoOSwiY2xyLWljb24iLDY3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJu'@;
put 'IGp0KFZlKCkuY2xvc2UoZikpfSkseWUoKSgpKCksbWUoMTAsInNwYW4iLDY4LDY5KSx4dCgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPSRpKDExKSxXPSRpKDEpO3JldHVybiBqdChWZSgpLmRyYWdNb3ZlKFQsVyxfLGgpKX0pLHllKCksbWUo'@;
put 'MTIsImZvcm0iLDcwKSgxMywiZGl2Iiw3MSkoMTQsImRpdiIsNzIpKDE1LCJpbnB1dCIsNzMsNzQpLHh0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdCxfPSRpKDE2KTtyZXR1cm4ganQoVmUoKS5zZWFyY2hUYWJsZShfLGYpKX0pLHllKCksUWUoMTcs'@;
put 'cHplLDEsMCwiY2xyLWljb24iLDc1KSxRZSgxOCxnemUsMiwwLCJzcGFuIiw3NikseWUoKSxtZSgxOSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDIwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIxLCJpbnB1dCIsNzcpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4g'@;
put 'anQoQnQoYSkuJGltcGxpY2l0LnNlYXJjaE51bWVyaWM9aCl9KSx5ZSgpLG1lKDIyLCJsYWJlbCIpLE5lKDIzLCJOdW1lcmljIikseWUoKSgpKCkoKSxtZSgyNCwiZGl2IiwzOSksUWUoMjUsbXplLDIsMCwic3BhbiIsNzgpLFFlKDI2LHZ6ZSwxLDAsImNsci1pY29uIiw3OSksbWUoMjcsImEi'@;
put 'LDgwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz0kaSgxNik7cmV0dXJuIFZlKCkub3BlbkZpbHRlcihmKSxqdChfLnZhbHVlPSIiKX0pLHF0KDI4LCJjbHItaWNvbiIsODEpLG1lKDI5LCJzcGFuIiw4MiksTmUoMzApLHllKCkoKSxtZSgzMSwiY2xy'@;
put 'LWljb24iLDgzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkub3BlblRhYmxlRWRpdChmKSl9KSx5ZSgpKCkoKSxRZSgzMix5emUsMyw0LCJkaXYiLDg0KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7'@;
put 'SHUoImRpc3BsYXkiLGEubWluaW1pemVkPyJub25lIjoiIikoIndpZHRoIixhLndpZHRoLCJweCIpKCJoZWlnaHQiLGEuaGVpZ2h0LCJweCIpKCJwb2ludGVyLWV2ZW50cyIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSgiYm94LXNoYWRvdyIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxkcigiZm9j'@;
put 'dXNlZCIsYS5mb2N1c2VkKSxSZSgiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLFEyKDM0LHd6ZSxhLngsYS55KSkoImlkIiwidmlld2JveF8iK2EuaWQpLENlKDQpLGIwKCIgIyIsYS5pZCwiICIsYS5saWJyYXJ5LCIuIixhLnRhYmxlLCIgIiksQ2UoMiksUmUoIm5nSWYiLCFhLmNvbGxhcHNl'@;
put 'ZCksQ2UoMSksUmUoIm5nSWYiLGEuY29sbGFwc2VkKSxDZSgzKSxSZSgiaWQiLCJoYW5kbGVfdmlld2JveF8iK2EuaWQpLENlKDIpLEh1KCJkaXNwbGF5IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLENlKDMpLFJlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxDZSgy'@;
put 'KSxSZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksQ2UoMyksUmUoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksQ2UoNCksUmUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nRGF0YSksQ2Uo'@;
put 'MiksZHIoImZpbHRlci1hY3RpdmUiLCIwIiE9PWEuZmlsdGVyX3BrKSxDZSgyKSxvcihhLmZpbHRlclRleHQpLENlKDEpLGRyKCJkaXNhYmxlZCIsIWQudGFibGVFZGl0RXhpc3RzKGEpKSxDZSgxKSxSZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiBTemUo'@;
put 'YyxsKXtpZigxJmMmJnF0KDAsImFwcC1xdWVyeSIsOTYsOTcpLDImYyl7Y29uc3QgYT1WZSgpO1JlKCJ2aWV3Ym94SWQiLG51bGw9PWEuZmlsdGVyaW5nVmlld2JveD9udWxsOmEuZmlsdGVyaW5nVmlld2JveC5pZCl9fWNvbnN0IE16ZT1mdW5jdGlvbihjLGwsYSl7cmV0dXJue2NvbEhlYWRl'@;
put 'cnNIaWRkZW46Yyxjb2xIZWFkZXJzVmlzaWJsZTpsLGhlYWRlclBrczphfX07bGV0IHhzZT0oKCk9PntjbGFzcyBje2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52'@;
put 'aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVj'@;
put 'dG9yKGEsZCxoLGYsXyxULFcsaWUsZ2Usd2Upe3RoaXMubmdab25lPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Xyx0aGlzLmxvZ2dlclNlcnZpY2U9VCx0aGlzLmhlbHBlclNlcnZpY2U9'@;
put 'Vyx0aGlzLnJvdXRlcj1pZSx0aGlzLmFjdGl2YXRlZFJvdXRlPWdlLHRoaXMuY2RmPXdlLHRoaXMuX3ZpZXdib3hNb2RhbD0hMSx0aGlzLnZpZXdib3hNb2RhbENoYW5nZT1uZXcgRXIsdGhpcy5saWJpbmZvPW51bGwsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSEwLHRoaXMudmlld2JveGVzPVtd'@;
put 'LHRoaXMuZGVmYXVsdENvbmZpZz17aWQ6LTEsbGlicmFyeToiIix0YWJsZToiIix3aWR0aDo1MDAsaGVpZ2h0OjMwMCx4OjAseToxNTAsY29sdW1uczpbXX0sdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5ob3RUYWJsZURlZmF1bHQ9e2RhdGE6W10saGVhZGVyUGtz'@;
put 'OltdLCRkYXRhZm9ybWF0czp7fSxhbGxDb2xIZWFkZXJzOltdLGNvbEhlYWRlcnNIaWRkZW46W10sY29sSGVhZGVyc1Zpc2libGU6W10sY29sSGVhZGVyczpbXSxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQ'@;
put 'YXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxjb2x1bW5zOltdLGNvbHM6W10saGVpZ2h0OiIxMDAlIixzZXR0aW5nczp7fSxoaWRkZW5Db2x1bW5zOiEwLG1hbnVhbENvbHVtbk1vdmU6ITEsYWZ0ZXJHZXRDb2xIZWFkZXI6dm9pZCAwLGxpY2Vu'@;
put 'c2VLZXk6dm9pZCAwLGRyb3Bkb3duTWVudTp2b2lkIDB9LHRoaXMudmlld2JveFRhYmxlcz1bXSx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRl'@;
put 'LHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubWF4Vmlld2JveGVzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ9PT0xLzA/Njp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0fHw2LHRoaXMuaG90VGFibGVSZWdpc3RlcmVyPW5ldyBBZ31uZ09uSW5pdCgp'@;
put 'e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihkPT57dGhpcy5saWJyYXJpZXM9ZC5zYXNsaWJzfSkuY2F0Y2goZD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihkKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITF9KSx0aGlzLl9xdWVyeT10aGlz'@;
put 'LnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e3RoaXMuY2xhdXNlcz1kLm9iaix0aGlzLmZpbHRlckxpYmRzPWQubGliZHN9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vf'@;
put 'a2V5LnN1YnNjcmliZShkPT57dGhpcy5ob3RUYWJsZURlZmF1bHQubGljZW5zZUtleT1kfSk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnZpZXdib3hlczthJiYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94PyhzZXRUaW1lb3V0'@;
put 'KCgpPT50aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkxpbmtpbmcgVmlld2JveGVzIikpLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6e319KSk6KHRoaXMudmlld2JveGVzPXRoaXMuZGVjb2Rl'@;
put 'VXJsRGF0YShhKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pKSksdGhpcy5yZUxvYWRWaWV3Ym94dGFibGVzKHRoaXMudmlld2JveGVzKX1uZ0FmdGVyVmlld0luaXQoKXt9Z2V0IHZpZXdib3hMaW1pdFJlYWNoZWQoKXtyZXR1cm4gdGhpcy52aWV3Ym94'@;
put 'ZXMubGVuZ3RoPj10aGlzLm1heFZpZXdib3hlc31jbHJNb2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdChhKX1saWJyYXJ5T25DbGljayhhKXthLnRhYmxlc0xvYWRlZHx8dGhpcy5sb2FkVGFibGVzKGEubGlicmFyeS5MSUJSQVJZUkVGLGEubGlicmFyeSl9'@;
put 'dGFibGVPbkNsaWNrKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGQudmlld2JveExpbWl0UmVhY2hlZClyZXR1cm47Y29uc3QgaD17Li4uZC5kZWZhdWx0Q29uZmlnLHRhYmxlOmEubGliVGFibGUsbGlicmFyeTphLmxpYnJhcnkuTElCUkFSWU5BTUUsbG9hZGluZ0Rh'@;
put 'dGE6ITAsZmlsdGVyX3BrOiIwIixpZDpkLnZpZXdib3hlcy5sZW5ndGgrMSx4OndpbmRvdy5pbm5lcldpZHRoLWQuZGVmYXVsdENvbmZpZy53aWR0aCx5OjE1MH07ZC52aWV3Ym94ZXMucHVzaChoKSxzZXRUaW1lb3V0KCgpPT57ZC5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pO2NvbnN0IGY9'@;
put 'YCR7YS5saWJyYXJ5LkxJQlJBUllSRUZ9LiR7YS5saWJUYWJsZX1gO3lpZWxkIGQubG9hZERhdGEoZixoKSxoLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpLGQuc25hcFRvR3JpZCgpfSkoKX1sb2FkVGFibGVzKGEsZCl7dGhpcy5zYXNTdG9y'@;
put 'ZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKGg9PntsZXQgZj1oLm1wdGFibGVzLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5NRU1OQU1FfSk7dGhpcy5saWJpbmZvPWgubGliaW5mb3x8W10sdGhpcy50YWJsZXM9ZixkJiYoZC50YWJsZXM9ZixkLmxpYmluZm89dGhpcy5saWJpbmZvLGQu'@;
put 'bG9hZGluZ1RhYmxlcz0hMSxmLmxlbmd0aD4wJiYoZC5leHBhbmRlZD0hMCkpfSkuY2F0Y2goaD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihoKX0pfXJlbG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsXyk9Pnts'@;
put 'ZXQgVD1oLnZpZXdib3hUYWJsZXMuZmluZChXPT5XLnZpZXdib3hJZD09PWQuaWQpO2guc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oVz0+e1QmJihULmhvdFRhYmxlLmRhdGE9Vy52aWV3ZGF0YSksZihudWxsKX0pLmNhdGNoKCgp'@;
put 'PT57XygpfSl9KX0pKCl9bG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsXyk9PntsZXQgVD0hMSxXPWgudmlld2JveFRhYmxlcy5maW5kKGllPT5pZS52aWV3Ym94SWQ9PT1kLmlkKTtXJiYoIjAiPT09ZC5maWx0ZXJf'@;
put 'cGt8fCFkLmZpbHRlcl9waykmJmYoKSxoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpKS50aGVuKGllPT57Vz9UPSEwOlc9e3ZpZXdib3hJZDpkLmlkLHZpZXdib3hMaWJEYXRhc2V0OmEsaG90VGFibGU6engoaC5ob3RUYWJsZURlZmF1bHQp'@;
put 'fSxXLmhvdFRhYmxlLmRhdGE9aWUudmlld2RhdGEsVy5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9aWUuJHZpZXdkYXRhLFcuaG90VGFibGUuY29scz1pZS5jb2xzLHp6KFcuaG90VGFibGUuY29scyxbXSxpZS4kdmlld2RhdGEpO2xldCBnZT1bXSx3ZT1bXTtmb3IobGV0IEVlIGluIGllLnZpZXdk'@;
put 'YXRhWzBdKUVlJiZ3ZS5wdXNoKEVlKTtmb3IobGV0IEVlPTA7RWU8d2UubGVuZ3RoO0VlKyspZ2UucHVzaCh7ZGF0YTp3ZVtFZV19KTtXLmhvdFRhYmxlLmhlYWRlclBrcz16eChpZS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIikpLFcuaG90VGFibGUuYWxsQ29sSGVhZGVycz13'@;
put 'ZS5maWx0ZXIoRWU9PiFXLmhvdFRhYmxlLmhlYWRlclBrcy5pbmNsdWRlcyhFZSkpLFcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbj16eChXLmhvdFRhYmxlLmFsbENvbEhlYWRlcnMpLFcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9d2UuZmlsdGVyKEVlPT5XLmhvdFRhYmxlLmhlYWRl'@;
put 'clBrcy5pbmNsdWRlcyhFZSkpLFcuaG90VGFibGUuY29sSGVhZGVycz13ZSxXLmhvdFRhYmxlLmNvbHVtbnM9Z2UsZC5jb2x1bW5zJiZkLmNvbHVtbnMubGVuZ3RoPjA/KFcuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZT1kLmNvbHVtbnMsZC5jb2x1bW5zPy5tYXAoKEVlLFplKT0+e2NvbnN0'@;
put 'IG90PXdlW0VlXSxldD1XLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uaW5kZXhPZihvdCk7ZXQ+LTEmJihXLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKGV0LDEpLFcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGVbWmVdPW90KX0pKTpXLmhvdFRhYmxlLmNvbEhlYWRlcnNW'@;
put 'aXNpYmxlLnB1c2goLi4uVy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZSgwLDEwKSksVy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1XLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmZpbHRlcihFZT0+RWUpLFR8fGgudmlld2JveFRhYmxlcy5wdXNoKFcpLGQucXVlcnk9'@;
put 'aC5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShpZS5xdWVyeSksZC5maWx0ZXJUZXh0PWllLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxzZXRUaW1lb3V0KCgpPT57aC51cGRhdGVIb3RDb2x1bW5zKFcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbnx8W10sZC5pZCk7Y29uc3QgRWU9aC5nZXRW'@;
put 'aWV3Ym94SG90SW5zdGFuY2UoZC5pZCk7RWU/LnVwZGF0ZVNldHRpbmdzKHttYW51YWxDb2x1bW5Nb3ZlOlcuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZSxhZnRlckdldENvbEhlYWRlcjooWmUsb3QpPT57Y29uc3QgZXQ9RWU/LmNvbFRvUHJvcChaZSk7ZXQmJlcuaG90VGFibGUuaGVhZGVy'@;
put 'UGtzLmluZGV4T2YoZXQpPi0xJiZvdC5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKX19KSxFZT8ucmVuZGVyKCksaC5zZWxlY3RlZFZpZXdib3gmJmgucmVzZXRTZWxlY3RlZFZpZXdib3goZCl9KSxmKCl9KS5jYXRjaChpZT0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihp'@;
put 'ZSksXygpfSl9KX0pKCl9cmVMb2FkVmlld2JveHRhYmxlcyhhKXthLm1hcChkPT57Y29uc3QgaD1gJHtkLmxpYnJhcnl9LiR7ZC50YWJsZX1gO2QubG9hZGluZ0RhdGE9ITAsdGhpcy5sb2FkRGF0YShoLGQpLnRoZW4oKCk9PntkLmxvYWRpbmdEYXRhPSExfSl9KX1tYXhXaWR0aENoZWtlcihh'@;
put 'LGQpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRWaWV3Ym94VGFibGVJbmRleChhKXtyZXR1cm4gdGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChoPT5oLnZpZXdib3hJZD09PWEuaWQpfXJlc2l6ZShhLGQpe2NvbnN0IGg9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWQuZ2V0Qm91bmRp'@;
put 'bmdDbGllbnRSZWN0KCksXz1oLmxlZnQtZi5sZWZ0K2gud2lkdGgsVD1oLnRvcC1mLnRvcCtoLmhlaWdodDtyZXR1cm4gZC5zdHlsZS53aWR0aD1fKyJweCIsZC5zdHlsZS5oZWlnaHQ9VCsicHgiLHRoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhpcy5oZWxwZXJTZXJ2aWNlLmRlYm91'@;
put 'bmNlQ2FsbCgxZTMsKCk9Pnt0aGlzLnZpZXdib3hDaGFuZ2VkKCksdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSx7d2lkdGg6XyxoZWlnaHQ6VH19ZHJhZ01vdmUoYSxkLGgsZil7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBfPXRo'@;
put 'aXMucmVzaXplKGEsZCk7aC53aWR0aD1fLndpZHRoLGguaGVpZ2h0PV8uaGVpZ2h0fSl9c2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl7dGhpcy5yZXNpemVCb3hRdWVyeS5mb3JFYWNoKGE9Pntjb25zdCBkPWEubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWBoYW5kbGVf'@;
put 'JHthLm5hdGl2ZUVsZW1lbnQuaWR9YCxmPXRoaXMuZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5LmZpbmQoKF8sVCk9Pl8ubmF0aXZlRWxlbWVudC5pZD09PWgpO3RoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKGY/Lm5hdGl2ZUVsZW1lbnQsZCwiYm90aCIpfSl9c2V0SGFuZGxlVHJhbnNmb3JtKGEsZCxo'@;
put 'KXtjb25zdCBmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IF89ZC53aWR0aC1mLndpZHRoLFQ9ZC5oZWlnaHQtZi5oZWlnaHQ7Xys9NSxUKz01LCJ4Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7X31weCwgMClgKSwieSI9PT1oJiYoYS5zdHlsZS50cmFuc2Zv'@;
put 'cm09YHRyYW5zbGF0ZSgwLCAke1R9cHgpYCksImJvdGgiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHtffXB4LCAke1R9cHgpYCl9Zm9jdXNWaWV3Ym94KGEpe3RoaXMudmlld2JveGVzLm1hcChkPT57ZC5mb2N1c2VkPSExfSksYS5mb2N1c2VkPSEwfXZpZXdib3hEcmFn'@;
put 'RW5kZWQoYSxkKXtsZXQgZj1hLnNvdXJjZS5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2QueD1mLmxlZnQsZC55PWYudG9wLHRoaXMudmlld2JveENoYW5nZWQoKX1zbmFwVG9HcmlkKCl7Y29uc3QgYT13aW5kb3cuaW5uZXJXaWR0aCxkPXdpbmRvdy5pbm5lckhl'@;
put 'aWdodCxUPU1hdGguY2VpbCh0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksVz1NYXRoLmZsb29yKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSx3ZT0oYS01KihUKzEpKS9ULEVlPShhLTUqKFcrMSkpL1c7bGV0IG90PTAseXQ9KGQtMjUwLTYwKS8yLGt0PTAsU3Q9MDtmb3IobGV0IFF0PTA7UXQ8'@;
put 'dGhpcy52aWV3Ym94ZXMubGVuZ3RoO1F0Kyspe2xldCBybj10aGlzLnZpZXdib3hlc1tRdF0sdm49IShRdD5ULTEpO2NvbnN0IE5uPXZuP3dlOkVlOyF2biYmMD09PVN0JiYoa3Q9MCxTdCsrLG90PTApLHJuLng9NStvdCtrdCooTm4rNSkscm4ueT0yNTArU3QqKHl0KzUpLHJuLndpZHRoPU5u'@;
put 'LHJuLmhlaWdodD15dCxrdCsrfXRoaXMudmlld2JveENoYW5nZWQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pfW1pbmltaXplQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITB9KSx0aGlzLnZpZXdib3hDaGFuZ2Vk'@;
put 'KCl9cmVzdG9yZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1pemVkPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc2V0UG9zU2l6ZShhKXthLng9d2luZG93LmlubmVyV2lkdGgtdGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEueT10aGlzLmRlZmF1bHRDb25m'@;
put 'aWcueSxhLndpZHRoPXRoaXMuZGVmYXVsdENvbmZpZy53aWR0aCxhLmhlaWdodD10aGlzLmRlZmF1bHRDb25maWcuaGVpZ2h0LHRoaXMudmlld2JveENoYW5nZWQoKX1taW5pbWl6ZShhKXthLm1pbmltaXplZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZShhKXthLm1pbmltaXpl'@;
put 'ZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y29sbGFwc2UoYSl7YS5jb2xsYXBzZWQ9ITAsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWV4cGFuZChhKXthLmNvbGxhcHNlZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y2xvc2UoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kSW5kZXgo'@;
put 'Zj0+Zi5pZD09PWEuaWQpLGg9dGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChmPT5mLnZpZXdib3hJZD09PWEuaWQpO2Q+LTEmJnRoaXMudmlld2JveGVzLnNwbGljZShkLDEpLGg+LTEmJnRoaXMudmlld2JveFRhYmxlcy5zcGxpY2UoaCwxKSx0aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ9'@;
put 'PT1hLmlkJiZ0aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCksR24udmlld2JveGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoUE8pLHRoaXMudmlld2JveENoYW5nZWQoKX1zZWxlY3RWaWV3Ym94KGEpe3ZvaWQgMD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUmJnZv'@;
put 'aWQgMD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94P3RoaXMucmVzZXRTZWxlY3RlZFZpZXdib3goYSk6YS5pZD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD90aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCk6dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKX1jb2x1bW5zRHJvcChhKXt0aGlz'@;
put 'LnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuJiYoYS5wcmV2aW91c0NvbnRhaW5lcj09PWEuY29udGFpbmVyP2NzZShhLmNvbnRhaW5lci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCk6ZnVuY3Rpb24gZ0JlKGMsbCxhLGQpe2NvbnN0'@;
put 'IGg9YXcoYSxjLmxlbmd0aC0xKSxmPWF3KGQsbC5sZW5ndGgpO2MubGVuZ3RoJiZsLnNwbGljZShmLDAsYy5zcGxpY2UoaCwxKVswXSl9KGEucHJldmlvdXNDb250YWluZXIuZGF0YSxhLmNvbnRhaW5lci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCksdGhpcy5zZWxlY3Rl'@;
put 'ZFZpZXdib3hUYWJsZS5ob3RUYWJsZSYmIm9iamVjdCI9PXR5cGVvZiB0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnMpJiZ0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGEuaXRlbS5kYXRhLGEuY3VycmVudEluZGV4LHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFi'@;
put 'bGUudmlld2JveElkKX1vbkNvbHNlYXJjaENoYW5nZShhLGQsaCl7Y29uc3QgZj1oLmluZGV4T2YoZCk7aC5zcGxpY2UoZiwxKSxhLnZhbHVlPSIiLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlJiYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFk'@;
put 'ZXJzVmlzaWJsZS5wdXNoKGQpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGQsdGhpcy5z'@;
put 'ZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgtMSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkpfW9uQ29sUmVtb3ZlKGEpe2lmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlKXtjb25zdCBkPXRoaXMuc2Vs'@;
put 'ZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuaW5kZXhPZihhKTt0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnNwbGljZShkLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVy'@;
put 'c0hpZGRlbi5wdXNoKGEpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGEsdGhpcy5zZWxl'@;
put 'Y3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfX1yZXNldFNlbGVjdGVkVmlld2JveChhKXt0aGlzLnNlbGVjdGVkVmlld2JveD1hLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dGhp'@;
put 'cy52aWV3Ym94VGFibGVzLmZpbmQoZD0+ZC52aWV3Ym94SWQ9PT1hLmlkKX11bnNldFNlbGVjdGVkVmlld2JveCgpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PXZvaWQgMCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXZvaWQgMH1zdG9wUHJvcGFnYXRpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24o'@;
put 'KX1vcGVuRmlsdGVyKGEpe3RoaXMuc2VsZWN0Vmlld2JveChhKTtjb25zdCBkPXRoaXMudmlld2JveFRhYmxlc1t0aGlzLmdldFZpZXdib3hUYWJsZUluZGV4KGEpXTt0aGlzLmZpbHRlckxpYmRzPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWAsdGhpcy5maWx0ZXJpbmdWaWV3Ym94PWEsdGhp'@;
put 'cy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMuZmlsdGVyTGliZHMsZC5ob3RUYWJsZS5jb2xzKX1vcGVuVGFibGVFZGl0KGEpe2NvbnN0IGQ9YS5saWJyYXJ5KyIuIithLnRhYmxlO2xldCBoPWxv'@;
put 'Y2F0aW9uLmhyZWYuc2xpY2UoMCxsb2NhdGlvbi5ocmVmLmluZGV4T2YoIiMiKSk7aD1gJHtofSMvZWRpdG9yLyR7ZH1gLHdpbmRvdy5vcGVuKGgsIl9ibGFuayIpfXJlc2V0RmlsdGVyKCl7dGhpcy5maWx0ZXJpbmdWaWV3Ym94JiYodGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz0i'@;
put 'MCIsdGhpcy5yZWxvYWRUYWJsZURhdGEodGhpcy5maWx0ZXJpbmdWaWV3Ym94KSx0aGlzLmZpbHRlcj0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCksR24udmlld2JveGVzW3RoaXMuZmlsdGVyaW5nVmlld2JveC5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShQTykpfXNlbmRDbGF1'@;
put 'c2UoKXt0aGlzLmZpbHRlckxvYWRpbmc9ITA7bGV0IGE9W10sZD1bXTtpZih0eXBlb2YgdGhpcy5jbGF1c2VzPiJ1IilyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0ZXJMb2FkaW5nPSExKTt7bGV0IGg9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqO2ZvcihsZXQgZj0w'@;
put 'O2Y8aC5sZW5ndGg7ZisrKXtjb25zdCBfPWhbZl0uZWxlbWVudHM7YT1fLmZpbHRlcihmdW5jdGlvbihUKXtyZXR1cm4gbnVsbD09PVQudmFyaWFibGV9KSxhLmxlbmd0aCYmZC5wdXNoKF8pfX1pZihkLmxlbmd0aClyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0'@;
put 'ZXJMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09dGhpcy5jbGF1c2VzJiZ0aGlzLmZpbHRlckxpYmRzKXtjb25zdCBoPXtncm91cExvZ2ljOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goXz0+e2NvbnN0IFQ9'@;
put 'e2ZpbHRlckNsYXVzZXM6W119O18uZWxlbWVudHMuZm9yRWFjaChXPT57VC5maWx0ZXJDbGF1c2VzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShXKSl9KSxULmNsYXVzZUxvZ2ljPV8uY2xhdXNlTG9naWMsaC5maWx0ZXJHcm91cHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2Uu'@;
put 'ZGVlcENsb25lKFQpKX0pO2NvbnN0IGY9dGhpcy5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShoKTt0aGlzLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkodGhpcy5maWx0ZXJMaWJkcyxmKS50aGVuKF89Pnt0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPV8u'@;
put 'cmVzdWx0WzBdLkZJTFRFUl9SSyx0aGlzLmxvYWREYXRhKHRoaXMuZmlsdGVyTGliZHMsdGhpcy5maWx0ZXJpbmdWaWV3Ym94KS50aGVuKCgpPT57dGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfSkuY2F0Y2goXz0+e3RoaXMuZmls'@;
put 'dGVyTG9hZGluZz0hMX0pfX1jYXRjaHt0aGlzLmZpbHRlckxvYWRpbmc9ITF9fXNlYXJjaFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xldCBmPWEudmFsdWUsXz1kLmxpYnJhcnkrIi4iK2QudGFibGUsVD1wYXJzZUludChk'@;
put 'LmZpbHRlcl9wa3x8IjAiKTtjb25zdCBXPWgudmlld2JveFRhYmxlcy5maW5kKGllPT5pZS52aWV3Ym94SWQ9PT1kLmlkKTtXJiYoeWllbGQgaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2goZixkLnNlYXJjaE51bWVyaWMsXyxUKS50aGVuKGllPT57aWUuc2FzcGFyYW1zfHxpZS52'@;
put 'aWV3RGF0YT9XLmhvdFRhYmxlLmRhdGE9aWUudmlld2RhdGE6ZC5zZWFyY2hMb2FkaW5nPSEwfSkuY2F0Y2goaWU9PntoLmxvZ2dlclNlcnZpY2UuZXJyb3IoaWUpfSksZC5zZWFyY2hMb2FkaW5nPSExKX0pKCl9cmVsb2FkVGFibGVEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0'@;
put 'aW9uKigpe2NvbnN0IGg9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDthLmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0YShoLGEpLGEubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoYSxkKXt0'@;
put 'aGlzLnVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENvbHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2NvbnN0IF89Zi5wcm9wVG9Db2woYSk7Zi5nZXRQbHVnaW4oIm1h'@;
put 'bnVhbENvbHVtbk1vdmUiKS5tb3ZlQ29sdW1uKF8sZCksZi5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVkaXRFeGlzdHMoYSl7Y29uc3QgZD1Hbi5lZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFyeTtyZXR1cm4hIWRbaF0mJmRbaF0uaW5jbHVkZXMoYS50YWJs'@;
put 'ZSl9c2V0Q29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBoPXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIoYSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNvbHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNv'@;
put 'bHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1kLmdldENvbEhlYWRlcigpLGY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZighZilyZXR1cm5bXTtjb25zdCBfPXRo'@;
put 'aXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsVD1bXTtyZXR1cm4gaC5tYXAoKFcsaWUpPT57aWYoaWU8Xyl7Y29uc3QgZ2U9Zi5pbmRleE9mKFcpO2dlPi0xJiZULnB1c2goZ2UpfX0pLFR9dXBkYXRlSGlkZGVuQ29sdW1uc0hv'@;
put 'dChhLGQpe2NvbnN0IGg9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZCk7aWYoaCl7Y29uc3QgZj1hLm1hcChfPT5oLnByb3BUb0NvbChfKSk7aC51cGRhdGVTZXR0aW5ncyh7aGlkZGVuQ29sdW1uczp7Y29sdW1uczpmfX0pLGgucmVuZGVyKCl9fWdldFZpZXdib3hIb3RJbnN0YW5jZShh'@;
put 'KXtyZXR1cm4gYT90aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZShgaG90SW5zdGFuY2Vfdmlld2JveF8ke2F9YCk6dm9pZCAwfXZpZXdib3hDaGFuZ2VkKCl7bGV0IGE7Y29uc3QgZD10aGlzLmVuY29kZVVybERhdGEodGhpcy52aWV3Ym94ZXMpO2QubGVuZ3RoPjAmJihhPXt2'@;
put 'aWV3Ym94ZXM6ZH0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6YX0pLHRoaXMucHJlcGFyZUZpbHRlckNhY2hlKCl9cHJlcGFyZUZpbHRlckNhY2hlKCl7Zm9yKGxldCBhIG9mIHRoaXMudmlld2JveGVzKWlmKEdu'@;
put 'LnZpZXdib3hlc1thLmlkXXx8KEduLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFBPKSksYS5xdWVyeSYmYS5xdWVyeS5sZW5ndGg+MCl7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXMuZmluZChmPT5mLnZpZXdib3hJZD09PWEuaWQpLGg9YHZpZXdib3hl'@;
put 'cy4ke2EuaWR9YDtHbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLnF1ZXJ5PWEucXVlcnksR24udmlld2JveGVzW2EuaWRdLmZpbHRlci5saWJkcz1hLmxpYnJhcnkrIi4iK2EudGFibGUsdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShoLGQ/LmhvdFRh'@;
put 'YmxlLmNvbHMpfX1lbmNvZGVVcmxEYXRhKGEpe2xldCBkPSIiO3JldHVybiBhLm1hcCgoaCxmKT0+e2QrPWAke2guaWR9LSR7aC5saWJyYXJ5fS0ke2gudGFibGV9LSR7aC53aWR0aH0tJHtoLmhlaWdodH0tJHtoLnh9LSR7aC55fS0ke2guY29sbGFwc2VkPzE6MH0tJHtoLm1pbmltaXplZD8x'@;
put 'OjB9LSR7aC5maWx0ZXJfcGt8fDB9JHtoLmNvbHVtbnMmJmguY29sdW1ucy5sZW5ndGg+MD8iLSIraC5jb2x1bW5zPy5qb2luKCIsIik6IiJ9YCxmIT09YS5sZW5ndGgtMSYmKGQrPSI7Iil9KSxkfWRlY29kZVVybERhdGEoYSl7bGV0IGg9W107cmV0dXJuIGEuc3BsaXQoIjsiKS5tYXAoXz0+'@;
put 'e2NvbnN0IFQ9Xy5zcGxpdCgiLSIpO2gucHVzaCh7aWQ6cGFyc2VJbnQoVFswXSksbGlicmFyeTpUWzFdLHRhYmxlOlRbMl0sd2lkdGg6cGFyc2VJbnQoVFszXSksaGVpZ2h0OnBhcnNlSW50KFRbNF0pLHg6cGFyc2VJbnQoVFs1XSkseTpwYXJzZUludChUWzZdKSxjb2xsYXBzZWQ6ISFwYXJz'@;
put 'ZUludChUWzddKSxtaW5pbWl6ZWQ6ISFwYXJzZUludChUWzhdKSxjb2x1bW5zOlRbMTBdPy5zcGxpdCgiLCIpLm1hcChXPT5wYXJzZUludChXKSl8fFtdLGZpbHRlcl9wazpUWzldfSl9KSxofW5nT25EZXN0cm95KCl7dGhpcy5fcXVlcnk/LnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5vKSx0dChDMCksdHQob2EpLHR0KHZsKSx0dChiZCksdHQodzApLHR0KEFjKSx0dChEcyksdHQoV2wpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3Ym94ZXMiXV0sdmlld1F1'@;
put 'ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oJGplLDUpLFJvKHFqZSw1KSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5yZXNpemVCb3hRdWVyeT1oKSxzaShoPWFpKCkpJiYoZC5kcmFnSGFuZGxlQ29ybmVyUXVlcnk9aCl9fSxpbnB1dHM6e3ZpZXdib3hNb2RhbDoidmlld2JveE1v'@;
put 'ZGFsIn0sb3V0cHV0czp7dmlld2JveE1vZGFsQ2hhbmdlOiJ2aWV3Ym94TW9kYWxDaGFuZ2UifSxkZWNsczo1Nix2YXJzOjIzLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsInJvb3QtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9z'@;
put 'YWJsZSIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJsaWNlbmNlLW5vdGljZSIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4Il0sWzEsImFkZC1uZXciLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxb'@;
put 'MSwibXQtMC1pIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibS0wIHZpZXdib3gtbGltaXQtbm90aWNlIiw0LCJuZ0lmIl0sWzMsImxpYnJhcnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVP'@;
put 'bkNsaWNrRW1pdHRlciIsNCwibmdJZiJdLFsxLCJjdXJyZW50bHktb3BlbiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1i'@;
put 'b3R0b20tbGVmdCIsIm1sLTMiLDMsImNsaWNrIl0sWyJzaGFwZSIsImdyaWQtdmlldyIsInNpemUiLCIxOSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwiMTkiXSxbInNoYXBlIiwid2luZG93LXJlc3RvcmUiLCJzaXplIiwiMTkiXSxbImNsYXNzIiwi'@;
put 'dGV4dC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wZW4tdmlld2JveCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkLWZs'@;
put 'ZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwibXQtMTAiXSxbMSwibS0wIl0sWyJjbGFzcyIsImNvbmZpZ3VyYXRpb24td3JhcHBlciIsImNka0Ryb3BMaXN0R3JvdXAiLCIiLDQsIm5nVmFyIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsi'@;
put 'dHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInZpZXdib3hlcy1jb250YWluZXIiXSxbImNsYXNzIiwidmlld2JveCIsImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4'@;
put 'IiwiMCIsMywiZm9jdXNlZCIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsInBvaW50ZXItZXZlbnRzIiwiYm94LXNoYWRvdyIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJmaWx0ZXIt'@;
put 'bW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMywidmll'@;
put 'd2JveElkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsxLCJsaWNlbmNl'@;
put 'LW5vdGljZSJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJtLTAiLCJ2aWV3Ym94LWxpbWl0LW5vdGljZSJdLFszLCJsaWJyYXJ5TGlzdCIsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiXSxbMSwidGV4'@;
put 'dC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJvcGVuLXZpZXdib3giLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFs'@;
put 'bCIsIiIsImNsYXNzIiwibWwtMyIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjdXJzb3ItbW92ZSIsInNpemUiLCIxMyJd'@;
put 'LFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsImNsYXNzIiwidG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtYm90dG9tLWxlZnQgbWwtMyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMTkiXSxbImNsclNtYWxsIiwiIiwxLCJt'@;
put 'bC0zIl0sWyJjZGtEcm9wTGlzdEdyb3VwIiwiIiwxLCJjb25maWd1cmF0aW9uLXdyYXBwZXIiXSxbNCwibmdJZiJdLFsxLCJjb2xzLXNlYXJjaCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBjb2x1bW5z'@;
put 'IiwidGFiaW5kZXgiLCIwIiwzLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlQ2hhbmdlIl0sWyJpbnB1dCIsIiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0Ryb3BMaXN0IiwiIiwxLCJjb2xzLWxpc3QiLDMsImNka0Ryb3BMaXN0RGF0YSIsImNka0Ryb3BMaXN0RHJv'@;
put 'cHBlZCJdLFsiY2RrRHJhZyIsIiIsMywiY2xhc3MiLCJjdXJzb3ItZGVmYXVsdC1pIiwicHJpbWFyeUtleUhlYWRlclN0eWxlIiwiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJhZyIsIiIsMywiY2RrRHJhZ0RhdGEiLCJjZGtEcmFn'@;
put 'RGlzYWJsZWQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRyYXNoIiwiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwia2V5Il0sWyJzaGFwZSIsInRyYXNoIiwxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNk'@;
put 'a0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMSwidmlld2JveCIsMywiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCJdLFsicmVzaXplQm94IiwiIl0sWyJjZGtEcmFn'@;
put 'SGFuZGxlIiwiIiwxLCJkcmFnLWhhbmRsZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGFibGUtdGl0bGUiXSxbMSwiYWN0aW9ucyJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIiw0LCJuZ0lmIl0s'@;
put 'WyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsIm1pbnVzIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbImNka0RyYWciLCIiLDEsImRyYWdIYW5kbGUiLCJjb3JuZXIiLDMsImlkIiwiY2RrRHJhZ01vdmVkIl0sWyJkcmFn'@;
put 'SGFuZGxlQ29ybmVyIiwiIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItZmxleC13cmFwIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVy'@;
put 'IiwiY2xyLWZsZXgtd3JhcCJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIsMywidHlwZSIsImtleXVwLmVudGVyIl0sWyJzZWFyY2hFbCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNr'@;
put 'Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bp'@;
put 'bm5lci1zbSIsNCwibmdJZiJdLFsic2hhcGUiLCJyZWZyZXNoIiwiY2xhc3MiLCJjbGljay1pY29uIiwzLCJjbGljayIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbGciLCJ0b29sdGlwLWJvdHRvbS1sZWZ0'@;
put 'IiwibWwtNSIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIiwxLCJjbGljay1pY29uIl0sWzEsInRvb2x0aXAtY29udGVudCIsInRvb2x0aXAtbG9uZyJdLFsic2hhcGUiLCJwZW5jaWwiLDEsImNsaWNrLWljb24iLCJtbC01IiwzLCJjbGljayJdLFsiY2xhc3MiLCJjb250ZW50IiwzLCJk'@;
put 'aXNwbGF5Iiw0LCJuZ1ZhciJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWzEsInNwaW5uZXIiLCJzcGlubmVy'@;
put 'LXNtIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsImNsaWNrLWljb24iLDMsImNsaWNrIl0sWzEsImNvbnRlbnQiXSxbImNsYXNzIiwiaG90LXNwaW5uZXIgbXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJ'@;
put 'ZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhl'@;
put 'aWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiLDQsIm5nSWYiXSxbMSwiaG90LXNwaW5uZXIiLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImlkIiwiaG90VGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywiaG90SWQiLCJyZWFk'@;
put 'T25seSIsIm1vZGlmeUNvbFdpZHRoIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJj'@;
put 'ZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJsaWNlbnNlS2V5Il0sWzMsInZpZXdib3hJZCJdLFsicXVlcnlGaWx0ZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKGYpe3JldHVybiBkLmNsck1vZGFsT3BlbkNoYW5nZShmKX0pLG1lKDEsImgzIiwxKSxOZSgyLCIgVmlld2JveGVzICIpLFFlKDMsS2plLDIsMiwic3BhbiIsMikseWUoKSxtZSg0LCJkaXYiLDMpKDUsImRpdiIsNCkoNiwicCIsNSksTmUoNywiQWRkIG5ldyIpLHllKCkscXQoOCwiaHIi'@;
put 'LDYpLFFlKDksWGplLDIsMCwiZGl2Iiw3KSxRZSgxMCxKamUsMiwwLCJwIiw4KSxRZSgxMSxRamUsMSwxLCJkYy10cmVlIiw5KSx5ZSgpLG1lKDEyLCJkaXYiLDEwKSgxMywiZGl2IiwxMSkoMTQsInAiLDUpLE5lKDE1LCJDdXJyZW50bHkgb3BlbiIpLHllKCksbWUoMTYsImRpdiIpKDE3LCJh'@;
put 'IiwxMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNuYXBUb0dyaWQoKX0pLHF0KDE4LCJjbHItaWNvbiIsMTMpLG1lKDE5LCJzcGFuIiwxNCksTmUoMjAsIlNuYXAgdmlld2JveGVzIHRvIGdyaWQiKSx5ZSgpKCksbWUoMjEsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGQubWluaW1pemVBbGwoKX0pLHF0KDIyLCJjbHItaWNvbiIsMTUpLG1lKDIzLCJzcGFuIiwxNCksTmUoMjQsIk1pbmltaXplIGFsbCB2aWV3Ym94ZXMiKSx5ZSgpKCksbWUoMjUsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzdG9yZUFsbCgpfSkscXQo'@;
put 'MjYsImNsci1pY29uIiwxNiksbWUoMjcsInNwYW4iLDE0KSxOZSgyOCwiUmVzdG9yZSBhbGwgdmlld2JveGVzIikseWUoKSgpKCkoKSxxdCgyOSwiaHIiKSxRZSgzMCxlemUsMiwwLCJwIiwxNyksUWUoMzEsaXplLDE1LDEwLCJkaXYiLDE4KSxtZSgzMiwiZGl2IiwxOSkoMzMsInAiLDIwKSxO'@;
put 'ZSgzNCkseWUoKSgpLHF0KDM1LCJociIpLFFlKDM2LGR6ZSwzLDIsImRpdiIsMjEpLHllKCkoKSxtZSgzNywiZGl2IiwyMikoMzgsImJ1dHRvbiIsMjMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC52aWV3Ym94TW9kYWw9ITF9KSxOZSgzOSwiIE9rICIpLHllKCkoKSgpLG1lKDQw'@;
put 'LCJkaXYiLDI0KSxRZSg0MSxDemUsMzMsMzcsImRpdiIsMjUpLHllKCksbWUoNDIsImNsci1tb2RhbCIsMjYpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmZpbHRlcj1mfSksbWUoNDMsImgzIiwyNyksTmUoNDQsIiBGaWx0ZXIgZm9yIHZpZXdib3ggdGFi'@;
put 'bGU6ICIpLG1lKDQ1LCJzcGFuIiksTmUoNDYpLHllKCkoKSxtZSg0NywiZGl2IiwyOCksUWUoNDgsU3plLDIsMSwiYXBwLXF1ZXJ5IiwyOSkseWUoKSxtZSg0OSwiZGl2IiwyMikoNTAsImJ1dHRvbiIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNldEZpbHRlcigpfSks'@;
put 'TmUoNTEsIiByZXNldCBmaWx0ZXIgIikseWUoKSxtZSg1MiwiYnV0dG9uIiwyMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmZpbHRlcj0hMX0pLE5lKDUzLCIgQ2FuY2VsICIpLHllKCksbWUoNTQsImJ1dHRvbiIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5z'@;
put 'ZW5kQ2xhdXNlKCl9KSxOZSg1NSwiIE9rICIpLHllKCkoKSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixkLnZpZXdib3hNb2RhbCkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxDZSgzKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUudmlld2Jv'@;
put 'eF9saW1pdCE9PWQuSW5maW5pdHkpLENlKDYpLFJlKCJuZ0lmIixkLmxpYnJhcmllc0xvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLnZpZXdib3hMaW1pdFJlYWNoZWQpLENlKDEpLFJlKCJuZ0lmIixkLnZpZXdib3hNb2RhbCksQ2UoMTkpLFJlKCJuZ0lmIixkLnZpZXdib3hlcy5sZW5ndGg8'@;
put 'MSksQ2UoMSksUmUoIm5nRm9yT2YiLGQudmlld2JveGVzKSxDZSgzKSxncigiIENvbmZpZ3VyYXRpb24gKCIsbnVsbCE9ZC5zZWxlY3RlZFZpZXdib3hUYWJsZSYmZC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldD8iIyIrKG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFi'@;
put 'bGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkrIiAiKyhudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldCk6InNlbGVjdCB2aWV3Ym94IGZyb20gYWJvdmUiLCIpICIpLENlKDIpLFJl'@;
put 'KCJuZ1ZhciIseV8oMTksTXplLG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sbnVsbD09ZC5zZWxlY3RlZFZpZXdib3hU'@;
put 'YWJsZXx8bnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUsbnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJs'@;
put 'ZT9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuaGVhZGVyUGtzKSksQ2UoNSksUmUoIm5nRm9yT2YiLGQudmlld2JveGVzKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLmZpbHRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg0'@;
put 'KSxqYygiICMiLG51bGw9PWQuZmlsdGVyaW5nVmlld2JveD9udWxsOmQuZmlsdGVyaW5nVmlld2JveC5pZCwiICIsZC5maWx0ZXJMaWJkcywiICIpLENlKDIpLFJlKCJuZ0lmIixkLmZpbHRlciksQ2UoNiksUmUoImNsckxvYWRpbmciLGQuZmlsdGVyTG9hZGluZykpfSxkZXBlbmRlbmNpZXM6'@;
put 'W3hzLFppLGthLG91LHN1LFp1LGRoLFVzLFhKLEQwLEQ4LFQwLGYxLHUyLENwLGwxLGMxLFMwLEJzLHdwLE9zLHIyLGNVLHh5LHZzZSxwc2Usd3NlLF9zZSxTc2UsR2plLFU3LFliXSxzdHlsZXM6WyIubGljZW5jZS1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2Rp'@;
put 'c3BsYXk6YmxvY2s7b3BhY2l0eTouNn1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoxMzAwfWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6Y2FsYygxMDAlIC0gNjBweCl9'@;
put 'Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtY29udGVudHtoZWlnaHQ6ODB2aH1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9Y2xyLW1vZGFs'@;
put 'LnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6MTAwJTtoZWlnaHQ6MTAwJX1kYy10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6MX0udG9vbHRpcC1sb25nW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFkZC1uZXdbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJTtwYWRkaW5nLXJpZ2h0OjVweH0udmlld2JveC1saW1pdC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY30uY3VycmVudGx5LW9w'@;
put 'ZW5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJX0uY3VycmVudGx5LW9wZW5bX25nY29udGVudC0lQ09NUCVdICAgLm9wZW4tdmlld2JveFtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzozcHggNXB4fS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAub3Blbi12aWV3Ym94LnNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoNjAsMTMzLDAsLjE4MDM5MjE1NjkpfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV0gICAub3Blbi12aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNr'@;
put 'Z3JvdW5kOiNlOGU4ZTh9LnZpZXdib3hlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjIwMHB4O21pbi1oZWlnaHQ6'@;
put 'MjAwcHg7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO3BvaW50ZXItZXZlbnRzOmFsbDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMCAxMHB4IC0z'@;
put 'cHggIzAwMH0udmlld2JveC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjExMDA7b3V0bGluZTpub25lfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMwMTk2MDc4'@;
put 'NDMpO2JhY2tncm91bmQ6d2hpdGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtmbGV4OjE7b3ZlcmZsb3cteDphdXRvfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3Vu'@;
put 'ZC1jb2xvcjojM2M4NTAwO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9pbnRlci1ldmVudHM6YWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAudGFibGUtdGl0bGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstYWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdj'@;
put 'b250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O21pbi13aWR0aDozNXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17'@;
put 'Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7dHJhbnNm'@;
put 'b3JtOnNjYWxlKDEuMyl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmNsaWNrLWljb25bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGljay1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnt0cmFuc2Zv'@;
put 'cm06c2NhbGUoMS4zKX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUuY29ybmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0'@;
put 'aDoxNXB4O2hlaWdodDoxNXB4O2N1cnNvcjpud3NlLXJlc2l6ZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZS5yaWdodFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9LnZpZXdib3hbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLmRyYWdIYW5kbGUuYm90dG9tW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7Y3Vyc29yOm5zLXJlc2l6ZX0uY29scy1zZWFyY2hbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHg7Ym9yZGVyOjFweCBzb2xpZCByZ2Jh'@;
put 'KDAsMCwwLC4yNzg0MzEzNzI1KTtib3JkZXItcmFkaXVzOjNweH0uY29scy1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMXB4ICNjY2M7bWluLWhlaWdodDo2MHB4O2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6'@;
put 'YmxvY2s7d2lkdGg6NDAwcHg7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHh9LmNvbC1ib3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLWJvdHRvbTpzb2xpZCAxcHggI2NjYztjb2xvcjojMDAwMDAwZGU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9u'@;
put 'OnJvdzthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjptb3ZlO2JhY2tncm91bmQ6d2hpdGU7Zm9udC1zaXplOjE0cHh9LmNvbC1ib3guc2VhcmNoW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tiYWNr'@;
put 'Z3JvdW5kOnJnYmEoMCwwLDAsLjEwMTk2MDc4NDMpfS5jb2wtYm94LnByaW1hcnlLZXlIZWFkZXJTdHlsZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC4xNDExNzY0NzA2KX0uY2RrLWRyYWctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemlu'@;
put 'Zzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggIzAwMDMsMCA4cHggMTBweCAxcHggIzAwMDAwMDI0LDAgM3B4IDE0cHggMnB4ICMwMDAwMDAxZjt6LWluZGV4OjEzMDAhaW1wb3J0YW50fS5jZGstZHJhZy1wbGFjZWhvbGRlcltfbmdjb250'@;
put 'ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstZHJhZy1hbmltYXRpbmdbX25nY29udGVudC0lQ09NUCVde3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX0uY29sLWJveFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHtib3JkZXI6bm9uZX0uY29s'@;
put 'cy1saXN0LmNkay1kcm9wLWxpc3QtZHJhZ2dpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmNvbC1ib3hbX25nY29udGVudC0lQ09NUCVdOm5vdCguY2RrLWRyYWctcGxhY2Vob2xkZXIpe3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX0uZGlzYWJsZWRb'@;
put 'X25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjU7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOm5vbmV9LmZpbHRlci1hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDcyYTN9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmZpcnN0Q29s'@;
put 'dW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsIGhvdC10YWJsZVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAgIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC42OTAxOTYwNzg0KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tn'@;
put 'cm91bmQ6cmdiYSg0OCwxMDcsMCwuNDMxMzcyNTQ5KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0aC5yZWFkb25seUNlbGwgZGl2e29wYWNpdHk6LjR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGQucmVhZG9ubHlDZWxse29wYWNpdHk6LjV9Il19KSxjfSko'@;
put 'KSxFc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBFcix0aGlzLmZpbGVEcm9wPW5ldyBFcix0aGlzLmVsZW1lbnQ9YX1vbkRyb3AoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihk'@;
put 'KWZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGgpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhpcy5maWxlRHJvcC5lbWl0KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRh'@;
put 'dGFUcmFuc2ZlcjtpZihkKXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ZC5kcm9wRWZmZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQoITApfW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3By'@;
put 'ZXZlbnRBbmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIs'@;
put 'IiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJkcm9wIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyb3AoZil9KSgiZHJhZ292ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJhZ092ZXIoZil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRy'@;
put 'YWdMZWF2ZShmKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJmaWxlT3ZlciIsZmlsZURyb3A6ImZpbGVEcm9wIn19KSxjfSkoKSxrc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVTZWxlY3RlZD1uZXcgRXIsdGhpcy5l'@;
put 'bGVtZW50PWF9aXNFbXB0eUFmdGVyU2VsZWN0aW9uKCl7cmV0dXJuISF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzLm11bHRpcGxlfW9uQ2hhbmdlKCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5maWxlczt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVl'@;
put 'KGEpLHRoaXMuZmlsZVNlbGVjdGVkLmVtaXQoYSksdGhpcy5pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKSYmKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVk'@;
put 'aXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRmlsZVNlbGVjdCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DaGFuZ2UoKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6'@;
put 'e2ZpbGVTZWxlY3RlZDoiZmlsZVNlbGVjdGVkIn19KSxjfSkoKTtmdW5jdGlvbiB4emUoYyxsKXsxJmMmJihtZSgwLCJwIiw4KSxOZSgxLCIgTm8gZGF0YXNldCBtZXRhIHRvIHNob3cuICIpLHllKCkpfWZ1bmN0aW9uIEV6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kZy1yb3ciKSgxLCJj'@;
put 'bHItZGctY2VsbCIpLE5lKDIpLHllKCksbWUoMywiY2xyLWRnLWNlbGwiKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLk5BTUUpLENlKDIpLG9yKGEuVkFMVUUpfX1mdW5jdGlvbiBremUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRl'@;
put 'bnQiLDExKSgxLCJjbHItZGF0YWdyaWQiKSgyLCJjbHItZGctY29sdW1uIiksTmUoMywiTmFtZSIpLHllKCksbWUoNCwiY2xyLWRnLWNvbHVtbiIpLE5lKDUsIlZhbHVlIikseWUoKSxRZSg2LEV6ZSw1LDIsImNsci1kZy1yb3ciLDUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxp'@;
put 'Y2l0O0NlKDYpLFJlKCJuZ0Zvck9mIixhLmRzbWV0YSl9fWZ1bmN0aW9uIEF6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWIiKSgxLCJidXR0b24iLDkpLE5lKDIpLHllKCksUWUoMyxremUsNywxLCJjbHItdGFiLWNvbnRlbnQiLDEwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj'@;
put 'aXQsZD1sLmluZGV4O0NlKDIpLG9yKGEuZ3JvdXApLENlKDEpLFJlKCJjbHJJZkFjdGl2ZSIsMD09PWQpfX1sZXQgQXNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm9wZW49ITEsdGhpcy5kc21ldGE9W10sdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcix0aGlzLmRzbWV0YUdyb3Vw'@;
put 'cGVkPVtdfW5nT25Jbml0KCl7fW5nT25DaGFuZ2VzKGEpe2EuZHNtZXRhPy5jdXJyZW50VmFsdWU/Lmxlbmd0aD4wJiZ0aGlzLnBhcnNlRFNNZXRhKCl9cGFyc2VEU01ldGEoKXt0aGlzLmRzbWV0YUdyb3VwcGVkPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmRzbWV0YSl7bGV0IGQ9dGhpcy5kc21l'@;
put 'dGFHcm91cHBlZC5maW5kSW5kZXgoaD0+aC5ncm91cD09PWEuT0RTX1RBQkxFKTtkPDAmJihkPXRoaXMuZHNtZXRhR3JvdXBwZWQucHVzaCh7Z3JvdXA6YS5PRFNfVEFCTEUsZHNtZXRhOltdfSktMSksdGhpcy5kc21ldGFHcm91cHBlZFtkXS5kc21ldGEucHVzaChhKX19b25PcGVuQ2hhbmdl'@;
put 'KGEpe3RoaXMub3Blbj1hLHRoaXMub3BlbkNoYW5nZS5lbWl0KGEpfW9uQ2xvc2VDbGljaygpe3RoaXMub25PcGVuQ2hhbmdlKCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFw'@;
put 'cC1kYXRhc2V0LWluZm8iXV0saW5wdXRzOntvcGVuOiJvcGVuIixkc21ldGE6ImRzbWV0YSJ9LG91dHB1dHM6e29wZW5DaGFuZ2U6Im9wZW5DaGFuZ2UifSxmZWF0dXJlczpbdmFdLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJN'@;
put 'b2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2ZXJ0'@;
put 'aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxbImlk'@;
put 'IiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uT3BlbkNoYW5nZShmKX0pLG1lKDEsImgzIiwxKSxOZSgyLCJEYXRhc2V0IE1ldGEiKSx5ZSgpLG1lKDMsImRpdiIsMiksUWUoNCx4emUsMiwwLCJwIiwz'@;
put 'KSxtZSg1LCJjbHItdGFicyIsNCksUWUoNixBemUsNCwyLCJjbHItdGFiIiw1KSx5ZSgpKCksbWUoNywiZGl2Iiw2KSg4LCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkNsb3NlQ2xpY2soKX0pLE5lKDksIiBDbG9zZSAiKSx5ZSgpKCkoKSksMiZhJiYoUmUo'@;
put 'ImNsck1vZGFsT3BlbiIsZC5vcGVuKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLENlKDQpLFJlKCJuZ0lmIixkLmRzbWV0YUdyb3VwcGVkLmxlbmd0aDwxKSxDZSgyKSxSZSgibmdGb3JPZiIsZC5kc21ldGFHcm91cHBlZCkpfSxkZXBlbmRlbmNpZXM6W3hz'@;
put 'LFppLFc4LFRwLHRnLG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LG91LHN1LEU4LExwLE9wLGRnLFJwLElwLGNnXSxzdHlsZXM6WyIubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItdGFic1tfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDo3MHZofS5tb2RhbC1ib2R5W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgICAgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b30ubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICAgIC50YWItY29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfSJdfSksY30pKCk7ZnVuY3Rpb24gVHpl'@;
put 'KGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxvcihhLmdlbmVyYXRlZFJlY29yZFVybCl9fWZ1bmN0aW9uIER6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsKCkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7UmUoImRpc2FibGVkIixhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmcpLENlKDEpLGdyKCIgIixhLmdlbmVyYXRlZFJlY29y'@;
put 'ZFVybD8iY29weSB0byBjbGlwYm9hcmQiOmEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz8iR2VuZXJhdGluZyB1cmwuLi4iOiJMaW5rIHRvIHRoaXMgcmVjb3JkIiwiICIpfX1mdW5jdGlvbiBJemUoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLFR6ZSwyLDEsInNwYW4iLDExKSxRZSgy'@;
put 'LER6ZSwyLDIsImJ1dHRvbiIsMTIpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpLENlKDEpLFJlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJy'@;
put 'ZW50UmVjb3JkLm5vTGlua09wdGlvbikpfX1mdW5jdGlvbiBMemUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE1KSgxLCJzcGFuIiwxNiksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBSemUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gT3plKGMs'@;
put 'bCl7MSZjJiYobWUoMCwic3BhbiIsMzApLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIFB6ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBGemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaW5wdXQtY29udGFpbmVyIiwzMyko'@;
put 'MSwiaW5wdXQiLDM0KSx4dCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgzKS5pbmRleDtyZXR1cm4ganQoVmUoMikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoNSkucmVjb3JkSW5wdXRQYXN0'@;
put 'ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuJGltcGxpY2l0LF89VmUoMik7cmV0dXJuIF8ucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSksanQoXy5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o'@;
put 'aCl7QnQoYSk7Y29uc3QgZj1WZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgzKS4kaW1wbGljaXQsZD1WZSgyKTtkcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29s'@;
put 'cy5pbmNsdWRlcyhhLmtleSkpLENlKDEpLFJlKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gSHplKGMsbCl7MSZjJiZqYSgwKX1jb25zdCB1VT1mdW5jdGlvbihjLGwpe3JldHVybntjb2w6Yyxjb2xJbmRleDpsfX07ZnVuY3Rpb24gTnplKGMsbCl7aWYoMSZj'@;
put 'JiYobWUoMCwiZGl2IiksUWUoMSxIemUsMSwwLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7VmUoMik7Y29uc3QgZj0kaSgxNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0'@;
put 'Q29udGV4dCIsUTIoMix1VSxkLGgpKX19Y29uc3QgVnplPWZ1bmN0aW9uKCl7cmV0dXJuWyJudW1lcmljIix2b2lkIDBdfSxUc2U9ZnVuY3Rpb24oKXtyZXR1cm5bImF1dG9jb21wbGV0ZSJdfTtmdW5jdGlvbiBCemUoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLEZ6ZSwyLDMsImNsci1pbnB1'@;
put 'dC1jb250YWluZXIiLDMyKSxRZSgyLE56ZSwyLDUsImRpdiIsMiksVXIoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdCxkPVZlKDIpO2xldCBoLGY7Q2UoMSksUmUoIm5nSWYiLCRzKDIsVnplKS5pbmNsdWRlcyhudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PSho'@;
put 'PWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLmVkaXRvcikpLENlKDEpLFJlKCJuZ0lmIiwkcygzLFRzZSkuaW5jbHVkZXMobnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZj1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVs'@;
put 'ZShhLmtleSkpP251bGw6Zi5lZGl0b3IpKX19ZnVuY3Rpb24ganplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIpKDEsInRleHRhcmVhIiwzNiwzNykseHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuaW5k'@;
put 'ZXg7cmV0dXJuIGp0KFZlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDUpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDMpLiRpbXBsaWNpdDtyZXR1'@;
put 'cm4ganQoVmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pLE5lKDMsIiAgICAgICAgICAgICAgICAg'@;
put 'ICIpLHllKCksbWUoNCwiY2xyLWNvbnRyb2wtaGVscGVyIiksTmUoNSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgyKSxkPVZlKDMpLiRpbXBsaWNpdCxoPVZlKDIpO2xldCBmLF8sVDtDZSgxKSxkcigiaW52YWxpZC1kYXRhIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRl'@;
put 'cyhkLmtleSkpKCJub3QtY2hhciIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZj1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6Zi50eXBlKSxSZSgicm93cyIsZC52YWx1ZS5sZW5ndGg+ODA/NjoxKSgibmdNb2RlbCIsaC5jdXJy'@;
put 'ZW50UmVjb3JkW2Qua2V5XSkoIm1heExlbmd0aCIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oXz1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6Xy5sZW5ndGgpLENlKDQpLGpjKCIiLGEudmFsdWUubGVuZ3RoLCIgLyAiLG51bGw9'@;
put 'PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KFQ9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOlQubGVuZ3RoLCIiKX19ZnVuY3Rpb24genplKGMsbCl7MSZjJiZqYSgwKX1mdW5jdGlvbiBVemUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxR'@;
put 'ZSgxLHp6ZSwxLDAsIm5nLWNvbnRhaW5lciIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtWZSgyKTtjb25zdCBmPSRpKDE2KTtDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixRMigyLHVV'@;
put 'LGQsaCkpfX1jb25zdCBaemU9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX07ZnVuY3Rpb24gWXplKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxqemUsNiw5LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwyKSxRZSgyLFV6ZSwyLDUsImRpdiIsMiksVXIoKSksMiZjKXtjb25zdCBhPVZlKDIp'@;
put 'LiRpbXBsaWNpdCxkPVZlKDIpO2xldCBoLGY7Q2UoMSksUmUoIm5nSWYiLCRzKDIsWnplKS5pbmNsdWRlcyhudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLmVkaXRvcikpLENlKDEp'@;
put 'LFJlKCJuZ0lmIiwkcygzLFRzZSkuaW5jbHVkZXMobnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZj1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6Zi5lZGl0b3IpKX19ZnVuY3Rpb24gV3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMzgpKDEsInRleHRhcmVhIiwzOSkseHQoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoNCkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGlt'@;
put 'cGxpY2l0O3JldHVybiBqdChWZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpfSkseWUoKSxtZSgyLCJj'@;
put 'bHItY29udHJvbC1oZWxwZXIiKSxOZSgzLCJISDptbTpzcyIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0LGQ9VmUoMik7bGV0IGg7Q2UoMSksZHIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSgibm90LWNo'@;
put 'YXIiLG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmgudHlwZSksUmUoInJvd3MiLGEudmFsdWUubGVuZ3RoPjgwPzY6MSkoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0p'@;
put 'fX1mdW5jdGlvbiBHemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDM4KSgxLCJ0ZXh0YXJlYSIsNDApLHh0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXtCdChh'@;
put 'KTtjb25zdCBmPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5jdXJyZW50UmVjb3JkW2Yua2V5'@;
put 'XT1oKX0pLHllKCksbWUoMiwiY2xyLWRhdGUtY29udGFpbmVyIiw0MSkoMywiaW5wdXQiLDQyKSx4dCgiY2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnJlY29yZERhdGVDaGFuZ2UoaCxmLmtleSkpfSkseWUo'@;
put 'KSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdCxkPVZlKDIpO0NlKDEpLGRyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSksUmUoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiAkemUo'@;
put 'YyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIHF6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLFFlKDEsJHplLDEsMCwibmctY29udGFpbmVyIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O1ZlKDIpO2NvbnN0IGY9JGkoMTYpO0NlKDEpLFJl'@;
put 'KCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFEyKDIsdVUsZCxoKSl9fWZ1bmN0aW9uIEt6ZShjLGwpe2lmKDEmYyYmKEJyKDApLG1lKDEsImRpdiIsMTgpKDIsImRpdiIsMTkpKDMsInAiLDIwKSxOZSg0KSxRZSg1LFJ6ZSwxLDAsImNsci1pY29uIiwy'@;
put 'MSkseWUoKSxtZSg2LCJwIiwyMiksTmUoNykseWUoKSgpLG1lKDgsImRpdiIsMjMpLFFlKDksT3plLDIsMCwic3BhbiIsMjQpLFFlKDEwLFB6ZSwxLDAsImNsci1pY29uIiwyNSksUWUoMTEsQnplLDMsNCwibmctY29udGFpbmVyIiwyNiksUWUoMTIsWXplLDMsNCwibmctY29udGFpbmVyIiwy'@;
put 'NiksUWUoMTMsV3plLDQsNiwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMjcpLFFlKDE0LEd6ZSw0LDMsImRpdiIsMjcpLFFlKDE1LHF6ZSwyLDUsImRpdiIsMjYpLHllKCkoKSxxdCgxNiwiaHIiLDI4KSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleCxm'@;
put 'PVZlKDIpO2xldCBfLFQ7Q2UoNCksZ3IoIiAiLGQua2V5LCIgIiksQ2UoMSksUmUoIm5nSWYiLGYuaXNDb2xQayhkLmtleSkpLENlKDIpLGdyKCIgIixudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShfPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5'@;
put 'KSk/bnVsbDpfLmRlc2MsIiAiKSxDZSgxKSxSZSgibmdTd2l0Y2giLG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KFQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOlQudHlwZSksQ2UoMSksUmUoIm5nSWYiLGYuY3VycmVudFJlY29y'@;
put 'ZExvYWRpbmdzLmluY2x1ZGVzKGgpKSxDZSgxKSxSZSgibmdJZiIsZi5jdXJyZW50UmVjb3JkRXJyb3JzLmluY2x1ZGVzKGgpKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwibnVtZXJpYyIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLHZvaWQgMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIs'@;
put 'InRpbWUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJhdXRvY29tcGxldGUiKX19ZnVuY3Rpb24gWHplKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxLemUsMTcsMTEsIm5nLWNvbnRhaW5lciIsMiksVXIoKSksMiZjKXtjb25zdCBh'@;
put 'PWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwiQWN0aW9uIiE9PWEua2V5JiYiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEua2V5JiYibm9MaW5rT3B0aW9uIiE9PWEua2V5KX19ZnVuY3Rpb24gSnplKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxYemUsMiwxLCJuZy1j'@;
put 'b250YWluZXIiLDE3KSxiYSgyLCJrZXl2YWx1ZSIpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0Zvck9mIixNNSgyLDIsYS5jdXJyZW50UmVjb3JkLGEub3JpZ2luYWxPcmRlcikpKCJuZ0ZvclRyYWNrQnkiLGEudHJhY2tCeUZuKX19ZnVuY3Rpb24gUXplKGMsbCl7MSZj'@;
put 'JiYobWUoMCwiY2xyLWFsZXJ0Iiw0MykoMSwiY2xyLWFsZXJ0LWl0ZW0iKSgyLCJzcGFuIiw0NCksTmUoMywiIERhdGEgVmFsaWRhdGlvbiBFcnJvcnMgLSBQbGVhc2UgUmV2aWV3ICIpLHllKCkoKSgpKSwyJmMmJihIdSgidmlzaWJpbGl0eSIsVmUoKS5jdXJyZW50UmVjb3JkSW52YWxpZENv'@;
put 'bHMubGVuZ3RoPjA/InZpc2libGUiOiJoaWRkZW4iKSxSZSgiY2xyQWxlcnRDbG9zYWJsZSIsITEpKCJjbHJBbGVydFR5cGUiLCJkYW5nZXIiKSl9ZnVuY3Rpb24gZVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw0NSkoMSwiYnV0dG9uIiw0NikseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uUHJldmlvdXNSZWNvcmRDbGljaygpKX0pLHF0KDIsImNsci1pY29uIiw0NykseWUoKSxtZSgzLCJwIiksTmUoNCwiIEN1cnJlbnQgcm93OiAiKSxtZSg1LCJzdHJvbmciKSxOZSg2KSx5ZSgpKCksbWUoNywiYnV0dG9uIiw0NikseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uTmV4dFJlY29yZENsaWNrKCkpfSkscXQoOCwiY2xyLWljb24iLDQ4KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+'@;
put 'MCksQ2UoNSksZ3IoIiAiLGEuY3VycmVudFJlY29yZEluZGV4KzEsIiAiKSxDZSgxKSxSZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKX19ZnVuY3Rpb24gdFVlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiw1MyksTmUoMSkseWUoKSksMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0O1JlKCJuZ1ZhbHVlIixhKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiBuVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiKSgxLCJhcHAtc29mdC1zZWxlY3QiLDUxKSx4dCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7QnQoYSk7Y29u'@;
put 'c3QgZj1WZSgpLmNvbEluZGV4O3JldHVybiBqdChWZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLmNvbDtyZXR1cm4ganQoVmUoKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pKCJvbklucHV0RXZlbnQi'@;
put 'LGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLGY9aC5jb2wsXz1oLmNvbEluZGV4O3JldHVybiBqdChWZSgpLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoZi5rZXksXykpfSksUWUoMix0VWUsMiwyLCJvcHRpb24iLDUyKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuY29sLGQ9VmUo'@;
put 'KTtsZXQgaDtDZSgxKSxSZSgidmFsdWUiLGQuY3VycmVudFJlY29yZFthLmtleV0pKCJpbnB1dElkIixhLmtleSksQ2UoMSksUmUoIm5nRm9yT2YiLG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkp'@;
put 'KT9udWxsOmguc291cmNlKX19ZnVuY3Rpb24gclVlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiw1NiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYSksQ2UoMSksZ3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gaVVlKGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPVZuKCk7bWUoMCwic2VsZWN0Iiw1NCkseHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2xJbmRleDtyZXR1cm4ganQoVmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1W'@;
put 'ZSgpLmNvbDtyZXR1cm4ganQoVmUoKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pLFFlKDEsclVlLDIsMiwib3B0aW9uIiw1NSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS5jb2wsZD1WZSgpO2xldCBoO1JlKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKSxDZSgxKSxSZSgi'@;
put 'bmdGb3JPZiIsbnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC5zb3VyY2UpfX1jb25zdCBvVWU9ZnVuY3Rpb24oKXtyZXR1cm5bIlNPRlRTRUxFQ1QiLCJTT0ZUU0VMRUNUX0hPT0si'@;
put 'XX07ZnVuY3Rpb24gc1VlKGMsbCl7aWYoMSZjJiYoUWUoMCxuVWUsMywzLCJkaXYiLDQ5KSxRZSgxLGlVZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDUwLEVjKSksMiZjKXtjb25zdCBhPWwuY29sLGQ9JGkoMiksaD1WZSgpO1JlKCJuZ0lmIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0'@;
put 'b3I/bnVsbDpoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuaGFzRHFSdWxlcyhhLmtleSwkcygyLG9VZSkpKSgibmdJZkVsc2UiLGQpfX1sZXQgYVVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMu'@;
put 'cmVjb3JkQWN0aW9uPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5jdXJyZW50UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50'@;
put 'UmVjb3JkRXJyb3JzPVtdLHRoaXMub25SZWNvcmRDaGFuZ2U9bmV3IEVyLHRoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQ9bmV3IEVyLHRoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQ9bmV3IEVyLHRoaXMub25SZWNvcmRFZGl0Q2xvc2U9bmV3IEVyLHRoaXMub25SZWNvcmRFZGl0Q29uZmly'@;
put 'bT1uZXcgRXIsdGhpcy5vbk5leHRSZWNvcmQ9bmV3IEVyLHRoaXMub25QcmV2aW91c1JlY29yZD1uZXcgRXIsdGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHM9W10sdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhp'@;
put 'cy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5vcmlnaW5hbE9yZGVyPShoLGYpPT4wfW5nT25Jbml0KCl7fXZhbGlkYXRlUmVjb3JkQ29sKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rp'@;
put 'b24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLF8pPT57aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5leGVjdXRlSG90VmFsaWRhdG9yKGEsZCxUPT57ZihUKX0pfSl9KSgpfXJlY29yZERhdGVDaGFuZ2UoYSxkKXtsZXQgaD10aGlzLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUo'@;
put 'ZCksZj1oP2guZGF0ZUZvcm1hdDoiIjt0aGlzLmN1cnJlbnRSZWNvcmQmJih0aGlzLmN1cnJlbnRSZWNvcmRbZF09SUcoKShhKS5mb3JtYXQoZikpfWNvbmZpcm1SZWNvcmRFZGl0KCl7dGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEmJnRoaXMub25SZWNvcmRDaGFuZ2Uu'@;
put 'ZW1pdCh0aGlzLmN1cnJlbnRSZWNvcmQpfWNsb3NlUmVjb3JkRWRpdCgpe3RoaXMub25SZWNvcmRFZGl0Q2xvc2UuZW1pdCgpfW9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoYSxkKXt0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkLmVtaXQoe2NvbE5hbWU6YSxjb2w6ZH0pfW9uUmVjb3JkSW5w'@;
put 'dXRGb2N1cyhhLGQpe3RoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQuZW1pdCh7ZXZlbnQ6YSxjb2xOYW1lOmR9KX1yZWNvcmRJbnB1dFBhc3RlKGEpe3NldFRpbWVvdXQoKCk9PnthLnRhcmdldC52YWx1ZT1hLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9ccyskLywiIil9LDApfXJlY29yZElucHV0'@;
put 'Q2hhbmdlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Y29uc3QgZj1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksXz1hLnRhcmdldC52YWx1ZTtoLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDMwMCwoKT0+e2gudmFsaWRhdGVSZWNvcmRDb2wo'@;
put 'ZixfKS50aGVuKFQ9Pntjb25zdCBXPWguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluZGV4T2YoZCk7VD9XPi0xJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5zcGxpY2UoVywxKTpXPDAmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnB1c2goZCl9KX0pfSkoKX1vbk5leHRSZWNv'@;
put 'cmRDbGljaygpe3RoaXMub25OZXh0UmVjb3JkLmVtaXQoKX1vblByZXZpb3VzUmVjb3JkQ2xpY2soKXt0aGlzLm9uUHJldmlvdXNSZWNvcmQuZW1pdCgpfWNvcHlUb0NsaXAoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVjb3JkTW9kYWxSZWYgLm1vZGFsLXRpdGxlIik7'@;
put 'aWYoZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2guc3R5bGUucG9zaXRpb249ImZpeGVkIixoLnN0eWxlLmxlZnQ9IjAiLGguc3R5bGUudG9wPSIwIixoLnN0eWxlLm9wYWNpdHk9IjAiLGguc3R5bGUuekluZGV4PSI1MDAwIixoLnZhbHVlPWEsZC5hcHBl'@;
put 'bmRDaGlsZChoKSxoLmZvY3VzKCksaC5zZWxlY3QoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGQucmVtb3ZlQ2hpbGQoaCksdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9YX19Z2VuZXJhdGVFZGl0UmVjb3JkVXJsKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYo'@;
put 'YS5nZW5lcmF0ZWRSZWNvcmRVcmwpYS5jb3B5VG9DbGlwKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKTtlbHNle2EuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMDtjb25zdCBkPVtdO2EuaGVhZGVyUGtzLmZvckVhY2goaD0+e2xldCBmPSJDIixfPSIiO2ZvcihsZXQgVD0wO1Q8YS5jZWxs'@;
put 'VmFsaWRhdGlvbi5sZW5ndGg7VCsrKXtjb25zdCBXPWEuY2VsbFZhbGlkYXRpb25bVF07aWYoVy5kYXRhPT09aCl7KCJudW1lcmljIj09PVcudHlwZXx8ImRhdGUiPT09Vy50eXBlfHwidGltZSI9PT1XLnR5cGUpJiYoZj0iTiIpO2JyZWFrfX1fPSJDIj09PWY/YCcke2EuY3VycmVudFJlY29y'@;
put 'ZFtoXX0nYDphLmN1cnJlbnRSZWNvcmRbaF0udG9TdHJpbmcoKSxkLnB1c2goe0dST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0lEOjAsVkFSSUFCTEVfTk06aCxPUEVSQVRPUl9OTToiPSIsUkFXX1ZBTFVFOl99KX0pLGQubGVuZ3RoPjAmJmEubGliZHMm'@;
put 'Jih5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyxkKS50aGVuKGg9PnthLnF1ZXJ5RmlsdGVyPXtpZDpoLnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6aC5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfTtjb25zdCBUPWxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSsi'@;
put 'Iy9lZGl0b3IvZWRpdC1yZWNvcmQvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkO2EuY29weVRvQ2xpcChUKSxhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsYS5maWx0ZXI9ITF9KS5jYXRjaChoPT57YS5zdWJtaXRMb2FkaW5nPSExfSkpfX0pKCl9'@;
put 'aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX10cmFja0J5Rm4oYSxkKXtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KEFjKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbImFwcC1lZGl0LXJlY29yZCJdXSxpbnB1dHM6e2N1cnJlbnRSZWNvcmQ6ImN1cnJlbnRSZWNvcmQiLHJlY29yZEFjdGlvbjoicmVjb3JkQWN0aW9uIixsaWJkczoibGliZHMiLHF1ZXJ5RmlsdGVyOiJxdWVyeUZpbHRlciIsZmlsdGVyOiJmaWx0ZXIiLHN1Ym1pdExvYWRpbmc6InN1'@;
put 'Ym1pdExvYWRpbmciLGhlYWRlclBrczoiaGVhZGVyUGtzIixjZWxsVmFsaWRhdGlvbjoiY2VsbFZhbGlkYXRpb24iLGN1cnJlbnRSZWNvcmRJbmRleDoiY3VycmVudFJlY29yZEluZGV4IixjdXJyZW50UmVjb3JkTG9hZGluZ3M6ImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsY3VycmVudFJlY29y'@;
put 'ZEVycm9yczoiY3VycmVudFJlY29yZEVycm9ycyIsY3VycmVudFJlY29yZFZhbGlkYXRvcjoiY3VycmVudFJlY29yZFZhbGlkYXRvciJ9LG91dHB1dHM6e29uUmVjb3JkQ2hhbmdlOiJvblJlY29yZENoYW5nZSIsb25SZWNvcmRJbnB1dEZvY3VzZWQ6Im9uUmVjb3JkSW5wdXRGb2N1c2VkIixv'@;
put 'blJlY29yZERyb3Bkb3duQ2hhbmdlZDoib25SZWNvcmREcm9wZG93bkNoYW5nZWQiLG9uUmVjb3JkRWRpdENsb3NlOiJvblJlY29yZEVkaXRDbG9zZSIsb25SZWNvcmRFZGl0Q29uZmlybToib25SZWNvcmRFZGl0Q29uZmlybSIsb25OZXh0UmVjb3JkOiJvbk5leHRSZWNvcmQiLG9uUHJldmlv'@;
put 'dXNSZWNvcmQ6Im9uUHJldmlvdXNSZWNvcmQifSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpbWyJpZCIsInJlY29yZE1vZGFsUmVmIiwxLCJyZWNvcmQtZWRpdC1tb2RhbCIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFs'@;
put 'LXRpdGxlIl0sWzQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgcHktMTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwicC0wIiwiY2xyLWdhcC01IiwiY2xyLWdhcC1t'@;
put 'ZC0wIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWyJjbGFzcyIsInZhbGlkYXRpb24taW5mby1hbGVydCIsMywidmlzaWJpbGl0eSIsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiLDQsIm5nSWYiXSxbImNsYXNzIiwicHJldi1uZXh0Iiw0LCJuZ0lmIl0s'@;
put 'WyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZm9jdXNhYmxlIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJhdXRvY29tcGxldGUiLCIiXSxbImNsYXNzIiwi'@;
put 'cG9zaXRpb24tYWJzb2x1dGUgZ2VuZXJhdGUtcmVjb3JkLXVybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJidG4gYnRuLWxpbmsgZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24gcG9zaXRpb24tYWJzb2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicG9zaXRpb24tYWJz'@;
put 'b2x1dGUiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsIl0sWzEsImJ0biIsImJ0bi1saW5rIiwiZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24t'@;
put 'aXRlbXMtY2VudGVyIiwidy0xMDAiLCJweS0xMCJdLFsxLCJzcGlubmVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjb2x1bW4tZW50cnkiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbMSwibmFtZS1pbnB1dC1yb3ciXSxbMSwiZm9u'@;
put 'dC13ZWlnaHQtYm9sZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbMSwiY2VsbC1kZXNjIl0sWzEsImlucHV0cy13cmFwcGVyIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUgZmxleC11bnNldCBwb3NpdGlvbi1h'@;
put 'YnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiwic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDQsIm5nSWYiXSxbNCwi'@;
put 'bmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImRhdGUtZmllbGQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtdC0xMCJdLFsic2hhcGUiLCJrZXkiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1v'@;
put 'ZmZzZXQiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiwxLCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJdLFsiY2xhc3MiLCJudW1lcmljLWlucHV0IiwzLCJpbnZhbGlkLWRhdGEiLDQsIm5nSWYi'@;
put 'XSxbMSwibnVtZXJpYy1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwidGV4dCIsMSwibm90LWNoYXIiLDMsIm5nTW9kZWwiLCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0'@;
put 'Il0sWyJjbHJUZXh0YXJlYSIsIiIsMywicm93cyIsIm5nTW9kZWwiLCJtYXhMZW5ndGgiLCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNoYXJUZXh0YXJlYSIsIiJdLFsxLCJkYXRlLWZpZWxkIl0sWyJjbHJUZXh0YXJlYSIsIiIsMywicm93cyIsIm5nTW9k'@;
put 'ZWwiLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSJdLFsiY2xyVGV4dGFyZWEiLCIiLCJyb3dzIiwiMSIsImNvbHMiLCJhdXRvIiwxLCJub3QtY2hhciIsMywibmdNb2RlbCIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImRhdGUtcGlja2VyIl0sWyJ0eXBlIiwi'@;
put 'ZGF0ZSIsIm5hbWUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMSwiZC1ub25lIiwzLCJjbHJEYXRlQ2hhbmdlIl0sWzEsInZhbGlkYXRpb24taW5mby1hbGVydCIsMywiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFsZXJ0VHlwZSJdLFsxLCJhbGVydC10ZXh0Il0sWzEsInByZXYtbmV4dCJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUgbGVmdCIsInNpemUiLCIyMyJdLFsic2hhcGUiLCJhbmdsZSByaWdodCIsInNpemUiLCIyMyJdLFs0LCJuZ0lmIiwi'@;
put 'bmdJZkVsc2UiXSxbIm90aGVyX3RoYW5fc29mdF9zZWxlY3QiLCIiXSxbMywidmFsdWUiLCJpbnB1dElkIiwiZm9jdXNpbiIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Il0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl0sWyJjbHJTZWxlY3QiLCIi'@;
put 'LDMsIm5nTW9kZWwiLCJmb2N1c2luIiwibmdNb2RlbENoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiwwKSgxLCJoMyIsMSksTmUoMiksUWUoMyxJemUsMywyLCJu'@;
put 'Zy1jb250YWluZXIiLDIpLHllKCksbWUoNCwiZGl2IiwzKSxRZSg1LEx6ZSwzLDAsImRpdiIsNCksUWUoNixKemUsMyw1LCJuZy1jb250YWluZXIiLDIpLHllKCksbWUoNywiZGl2Iiw1KSxRZSg4LFF6ZSw0LDQsImNsci1hbGVydCIsNiksUWUoOSxlVWUsOSwzLCJkaXYiLDcpLG1lKDEwLCJk'@;
put 'aXYiKSgxMSwiYnV0dG9uIiw4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITEsZC5jbG9zZVJlY29yZEVkaXQoKX0pLE5lKDEyLCIgQ2FuY2VsICIpLHllKCksbWUoMTMsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3JldHVybiBkLmNvbmZpcm1SZWNvcmRFZGl0KCl9KSxOZSgxNCwiIENvbmZpcm0gIikseWUoKSgpKCksUWUoMTUsc1VlLDMsMywibmctdGVtcGxhdGUiLG51bGwsMTAsRWMpLHllKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLCEwKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDIpLGIw'@;
put 'KCIgIiwiQUREIj09PWQucmVjb3JkQWN0aW9uPyJBZGQiOiJFZGl0IiwiIHJlY29yZCBpbiAiLG51bGw9PWQubGliZHM/bnVsbDpkLmxpYmRzLnNwbGl0KCIuIilbMF0sIi4iLG51bGw9PWQubGliZHM/bnVsbDpkLmxpYmRzLnNwbGl0KCIuIilbMV0sIiAiKSxDZSgxKSxSZSgibmdJZiIsIkVE'@;
put 'SVQiPT09ZC5yZWNvcmRBY3Rpb24pLENlKDIpLFJlKCJuZ0lmIixkLmFkZFJlY29yZExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhZC5hZGRSZWNvcmRMb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIixk'@;
put 'LmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSksQ2UoNCksUmUoImRpc2FibGVkIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLHJkLG5kLHRoLGwxLGMxLFdhLE0wLEJzLE9zLEhiLFBRLE5iLGhILGthLG91LHN1LEhG'@;
put 'LExiLCRGLHFGLGYxLGpGLE44LG93ZSx1USxNc2UsZHhdLHN0eWxlczpbIi5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnJlY29y'@;
put 'ZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLm5hbWUtaW5wdXQtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21heC13aWR0aDoyNjBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAubmFtZS1pbnB1dC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLmNlbGwtZGVzY1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjMwcHg7bWFyZ2luLXRvcDoxMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbnB1dHMtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLmlucHV0cy13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICA+Kjpub3QoLmRhdGUtZmllbGQpOm5vdChjbHItc2VsZWN0LWNvbnRhaW5lcil7ZmxleDoxfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItdGV4dGFyZWEtd3Jh'@;
put 'cHBlcnttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdHtkaXNwbGF5OmJsb2NrO3dpZHRoOjIyNHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtwYWRkaW5nOmNhbGMoLjI1'@;
put 'cmVtICsgMnB4KSAuNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07Zm9udC1zaXplOi41NDE2NjdyZW07bWFyZ2luLXJpZ2h0OjZweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNl'@;
put 'bGVjdCBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDpmb2N1c3tiYWNrZ3Jv'@;
put 'dW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCAucmVjb3JkLWVk'@;
put 'aXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0ucmVjb3JkLWVkaXQtbW9k'@;
put 'YWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGQgICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZp'@;
put 'ZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVde3dp'@;
put 'ZHRoOjIzMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1waWNrZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjRweH0ucmVjb3JkLWVkaXQtbW9k'@;
put 'YWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtcGlja2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVye2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6'@;
put 'LjEyNXJlbTttYXJnaW4tcmlnaHQ6NXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1bnNldH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'ICBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdHtoZWlnaHQ6YXV0bztwYWRkaW5nOjEwcHggMjBweCAxMHB4IDEw'@;
put 'cHg7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdDpmb2N1c3tiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAg'@;
put 'Y2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lcnt3aWR0aDoyMjRweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAj'@;
put 'OTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQxNjY3cmVtO21hcmdpbi1yaWdodDo2cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRh'@;
put 'aW5lciBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCAucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9u'@;
put 'ey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIuaW52YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'ICAgLm1vZGFsLWRpYWxvZ3t3aWR0aDo4MHZ3fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFp'@;
put 'bmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7cmVzaXplOm5vbmU7Ym9yZGVyLWNvbG9yOiM5OTl9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYS5pbnZhbGlkLWRhdGF7Ym9yZGVyLWNvbG9yOnJlZDtvdXRsaW5l'@;
put 'OjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYS5ub3QtY2hhcntmb250LWZhbWlseTpMdWNpZGEgQ29uc29sZSxNb25hY28sbW9ub3NwYWNlfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAgIC5nZW5lcmF0ZS1yZWNvcmQtdXJse3JpZ2h0OjQwcHg7dG9wOjQwcHg7Zm9udC1zaXplOjEycHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9ue3JpZ2h0OjI1cHg7dG9wOjVweH0ucmVjb3JkLWVkaXQt'@;
put 'bW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtaGVhZGVye3BhZGRpbmc6MCAwIDFyZW19LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpz'@;
put 'cGFjZS1iZXR3ZWVufS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1mb290ZXIgLmFsZXJ0e21hcmdpbjowfS5wcmV2LW5leHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnByZXYtbmV4dFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMTBweH0uZm9jdXNhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tib3gtc2hhZG93OjAg'@;
put 'MCAzcHggIzVhYTIyMH0uZW50cnktaW5wdXQtbGVmdC1vZmZzZXRbX25nY29udGVudC0lQ09NUCVde2xlZnQ6LTMwcHh9LnZhbGlkYXRpb24taW5mby1hbGVydFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzEwcHh9Il19KSxjfSkoKTtmdW5jdGlvbiBsVWUoYyxsKXtpZigxJmMmJihtZSgw'@;
put 'LCJwIiwzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGEsIiAiKX19bGV0IGNVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVz'@;
put 'cz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigie2ZpbmlzaH0iPT09YSlyZXR1cm4gdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEpLHRo'@;
put 'aXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5wb3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVu'@;
put 'Z3RoLTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIi'@;
put 'KSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXBsb2FkLXN0YXRlciJdXSxkZWNsczo1LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJtLTAiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVy'@;
put 'Iiwic3Bpbm5lci1zbSIsInZlcnRpY2FsLWFsaWduLW1pZGRsZSJdLFsxLCJtLTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiKSxRZSgxLGxVZSwyLDEsInAiLDApLHllKCksbWUoMiwiZGl2IiwxKSgzLCJzcGFuIiwyKSxOZSg0LCJMb2FkaW5nLi4uIikseWUo'@;
put 'KSgpKSwyJmEmJihDZSgxKSxSZSgibmdGb3JPZiIsZC5wcm9jZXNzZWRTdGF0ZXMpKX0sZGVwZW5kZW5jaWVzOlt4c10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyfSJdfSksY30p'@;
put 'KCksdVVlPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBhLnJlcGxhY2UoL1x8L2csIiB8ICIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJwa1NwYWNlU2VwYXJhdGUiLHR5cGU6YyxwdXJl'@;
put 'OiEwfSksY30pKCksRHNlPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7cmV0dXJuIHRoaXMuYWRkU2VwYXJhdG9ycyhhLnRvU3RyaW5nKCksZCl9YWRkU2VwYXJhdG9ycyhhLGQ9IiAiKXtjb25zdCBoPShhKz0iIikuc3BsaXQoIi4iKTtsZXQgZj1oWzBdO2NvbnN0IF89aC5sZW5ndGg+'@;
put 'MT8iLiIraFsxXToiIixUPS8oXGQrKShcZHszfSkvO2Zvcig7VC50ZXN0KGYpOylmPWYucmVwbGFjZShULCIkMSIrZCsiJDIiKTtyZXR1cm4gZitffX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJ0aG91c2Fu'@;
put 'ZFNlcGFyYXRvciIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKTtjb25zdCBkVWU9WyJodCJdLGhVZT1bInVwbG9hZFN0YXRlciJdLGZVZT1bInF1ZXJ5RmlsdGVyIl0scFVlPVsiaG90SW5zdGFuY2UiXSxnVWU9WyJmaWxlVXBsb2FkSW5wdXQiXTtmdW5jdGlvbiBtVWUoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9Vm4oKTttZSgwLCJkaXYiLDYxKSgxLCJzcGFuIiw2MikoMiwibGFiZWwiLDYzKSxOZSgzLCIgQnJvd3NlICIpLHllKCkoKSxtZSg0LCJpbnB1dCIsNjQsNjUpLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmdldEZpbGVEZXNjKGgpKX0pLHllKCko'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSg0KSxSZSgidXBsb2FkZXIiLGEudXBsb2FkZXIpfX1mdW5jdGlvbiB2VWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDY2KSgxLCJidXR0b24iLDY3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZl'@;
put 'KCkuZ2V0RmlsZSgpKX0pLE5lKDIsIiBVcGxvYWQgIikseWUoKSgpfTImYyYmKENlKDEpLFJlKCJkaXNhYmxlZCIsITApKX1mdW5jdGlvbiBfVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDY4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLE5lKDEsIiBDbG9zZSAiKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO1JlKCJkaXNhYmxlZCIsYS5leGNlbEZpbGVQYXJzaW5nfHxhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBiVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgw'@;
put 'LCJidXR0b24iLDY5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLE5lKDEsIiBTa2lwICIpLHllKCl9fWZ1bmN0aW9uIHlVZShjLGwpezEmYyYmKG1lKDAsImRpdiIsNzApLHF0KDEsImFwcC11cGxvYWQtc3RhdGVyIixu'@;
put 'dWxsLDcxKSx5ZSgpKX1mdW5jdGlvbiB3VWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhcHAtZWRpdC1yZWNvcmQiLDcyKSx4dCgib25SZWNvcmRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY29uZmlybVJlY29yZEVkaXQoKSl9KSgib25SZWNvcmRJ'@;
put 'bnB1dEZvY3VzZWQiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoKSl9KSgib25SZWNvcmRFZGl0Q2xvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY2xvc2VSZWNvcmRFZGl0KCkpfSkoIm9uTmV4dFJlY29yZCIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbk5leHRSZWNvcmQoKSl9KSgib25QcmV2aW91c1JlY29yZCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vblByZXZpb3VzUmVjb3JkKCkpfSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtSZSgiY3VycmVudFJlY29yZCIsYS5j'@;
put 'dXJyZW50RWRpdFJlY29yZCkoInJlY29yZEFjdGlvbiIsYS5yZWNvcmRBY3Rpb24pKCJsaWJkcyIsYS5saWJkcykoInF1ZXJ5RmlsdGVyIixhLnF1ZXJ5RmlsdGVyKSgiZmlsdGVyIixhLmZpbHRlcikoInN1Ym1pdExvYWRpbmciLGEuc3VibWl0TG9hZGluZykoImhlYWRlclBrcyIsYS5oZWFk'@;
put 'ZXJQa3MpKCJjZWxsVmFsaWRhdGlvbiIsYS5jZWxsVmFsaWRhdGlvbikoImN1cnJlbnRSZWNvcmRJbmRleCIsYS5jdXJyZW50RWRpdFJlY29yZEluZGV4KSgiY3VycmVudFJlY29yZExvYWRpbmdzIixhLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MpKCJjdXJyZW50UmVjb3JkRXJyb3JzIixh'@;
put 'LmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzKSgiY3VycmVudFJlY29yZFZhbGlkYXRvciIsYS5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcil9fWZ1bmN0aW9uIENVZShjLGwpezEmYyYmKG1lKDAsImRpdiIsNzMpLHF0KDEsInByb2dyZXNzIikseWUoKSl9Y29uc3QgU1VlPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuWyIvaG9tZSJdfTtmdW5jdGlvbiBNVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDc0KSgxLCJzcGFuIiw3NSkscXQoMiwiY2xyLWljb24iLDc2KSxOZSgzLCJCYWNrIHRvIHRhYmxlIHNlbGVjdGlvbiAiKSx5ZSgpLG1lKDQsInNwYW4iLDc3KSx4dCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudmlld2JveE1hbmFnZXIoKSl9KSxxdCg1LCJjbHItaWNvbiIsNzgpLE5lKDYsIiBWaWV3Ym94ZXMgIikseWUoKSgpfTImYyYmKENlKDEpLFJlKCJyb3V0ZXJMaW5rIiwkcygxLFNVZSkpKX1mdW5jdGlvbiB4VWUoYyxsKXsxJmMm'@;
put 'JnF0KDAsImNsci1pY29uIiw4Myl9ZnVuY3Rpb24gRVVlKGMsbCl7aWYoMSZjJiYoQnIoMCksTmUoMSksYmEoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksdzUoIiAoIixNNSgyLDQsYS5kYXRhU291cmNlLmxlbmd0aCwiLCIpLCIgIiwxPT09'@;
put 'YS5kYXRhU291cmNlLmxlbmd0aD8icm93Ijoicm93cyIsIiwgIixhLmNvbHMubGVuZ3RoLCIiLDE9PT1hLmNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBrVWUoYyxsKXsxJmMmJihCcigwKSxOZSgxLCIgKDAgcm93cykgIiksVXIoKSl9ZnVuY3Rpb24gQVVlKGMs'@;
put 'bCl7aWYoMSZjJiYoQnIoMCksUWUoMSxFVWUsMyw3LCJuZy1jb250YWluZXIiLDM1KSxRZSgyLGtVZSwyLDAsIm5nLWNvbnRhaW5lciIsMzUpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsIWEuemVyb0ZpbHRlclJvd3MpLENlKDEpLFJlKCJuZ0lmIixhLnplcm9G'@;
put 'aWx0ZXJSb3dzKX19ZnVuY3Rpb24gVFVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiaDQiLDc5KSgxLCJjbHItaWNvbiIsODApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5kYXRhc2V0SW5mbz0hMCl9KSx5ZSgpLFFlKDIseFVlLDEsMCwiY2xy'@;
put 'LWljb24iLDgxKSxOZSgzKSxtZSg0LCJhIiw4MiksTmUoNSkseWUoKSxRZSg2LEFVZSwzLDIsIm5nLWNvbnRhaW5lciIsMzUpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLnRhYmxlTmFtZS5pbmNsdWRlcygiLUZDIikpLENlKDEpLGdyKCIg'@;
put 'IixhLmxpYk5hbWUsIi4iKSxDZSgxKSxSZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIitkLmxpYmRzKSxDZSgxKSxvcihhLnRhYmxlTmFtZS5yZXBsYWNlKCItRkMiLCIiKSksQ2UoMSksUmUoIm5nSWYiLGQuZGF0YVNvdXJjZSl9fWZ1bmN0aW9uIERVZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1WbigpO21lKDAsImJ1dHRvbiIsOTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykub25TaG93VXBsb2FkTW9kYWwoKSl9KSxxdCgxLCJjbHItaWNvbiIsOTEpLG1lKDIsInNwYW4iKSxOZSgzLCJVcGxvYWQiKSx5ZSgpKCl9fWZ1bmN0aW9uIElVZShjLGwp'@;
put 'e2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImJ1dHRvbiIsODUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub3BlblFiKCkpfSkscXQoMiwiY2xyLWljb24iLDg2KSxtZSgzLCJzcGFuIiksTmUoNCwiRmlsdGVyIikseWUoKSgpLG1lKDUsImJ1'@;
put 'dHRvbiIsODcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZWRpdFRhYmxlKCkpfSkscXQoNiwiY2xyLWljb24iLDg4KSxtZSg3LCJzcGFuIiksTmUoOCwiRWRpdCIpLHllKCkoKSxRZSg5LERVZSw0LDAsImJ1dHRvbiIsODkpLFVyKCl9aWYoMiZjKXtjb25z'@;
put 'dCBhPVZlKDIpO0NlKDkpLFJlKCJuZ0lmIiwhYS5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyl9fWZ1bmN0aW9uIExVZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoMSksamMoIlRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2Vu'@;
put 'Y2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoicm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIFJVZShjLGwpe2lmKDEmYyYmKG1l'@;
put 'KDAsImNsci10b29sdGlwLWNvbnRlbnQiLDk4KSxRZSgxLExVZSwyLDIsInNwYW4iLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoIm5nSWYiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gT1VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7'@;
put 'QnIoMCksbWUoMSwiYnV0dG9uIiw5MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jYW5jZWxFZGl0KCkpfSkscXQoMiwiY2xyLWljb24iLDkzKSxtZSgzLCJzcGFuIiksTmUoNCwiQ2FuY2VsIikseWUoKSgpLG1lKDUsImNsci10b29sdGlwIikoNiwiYnV0'@;
put 'dG9uIiw5NCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGp0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUm93KCkpfSkscXQoNywiY2xyLWljb24iLDk1KSxOZSg4LCJBZGQgUm93ICIpLHllKCksUWUoOSxSVWUsMiwxLCJj'@;
put 'bHItdG9vbHRpcC1jb250ZW50Iiw5NikseWUoKSxtZSgxMCwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jaGVja1NhdmUoKSl9KSxxdCgxMSwiY2xyLWljb24iLDk3KSxOZSgxMiwiU3VibWl0ICIpLHllKCksVXIoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9VmUoMik7Q2UoNiksZHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyksUmUoImNsckxvYWRpbmciLGEuYWRkaW5nTmV3Um93KX19ZnVuY3Rpb24gUFVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwxMDIpLHh0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykubWFudWFsRmlsZUVkaXRNb2RhbD0hMCl9KSxxdCgxLCJjbHItaWNvbiIsODgpLG1lKDIsInNwYW4iKSxOZSgzLCJFZGl0IikseWUoKSgpfX1mdW5jdGlvbiBGVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigw'@;
put 'KSxtZSgxLCJidXR0b24iLDk5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmRpc2NhcmRTb3VyY2VGaWxlPSEwKX0pLHF0KDIsImNsci1pY29uIiw5MyksbWUoMywic3BhbiIpLE5lKDQsIkRpc2NhcmQgZmlsZSIpLHllKCkoKSxRZSg1LFBVZSw0LDAsImJ1'@;
put 'dHRvbiIsMTAwKSxtZSg2LCJidXR0b24iLDEwMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5zdWJtaXRFeGNlbCgpKX0pLHF0KDcsImNsci1pY29uIiw5NyksTmUoOCwiIFN1Ym1pdCAiKSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUp'@;
put 'LFJlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5KSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsYS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gSFVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4NCksUWUoMSxJVWUsMTAsMSwibmctY29udGFpbmVyIiwzNSksUWUoMixPVWUsMTMsMywibmct'@;
put 'Y29udGFpbmVyIiwzNSksUWUoMyxGVWUsOSwyLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksQ2UoMSksUmUoIm5nSWYiLCFhLmhvdFRhYmxlLnJlYWRPbmx5JiYh'@;
put 'YS51cGxvYWRQcmV2aWV3KSxDZSgxKSxSZSgibmdJZiIsYS51cGxvYWRQcmV2aWV3KX19ZnVuY3Rpb24gTlVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDMpKDEsInNwYW4iKSxOZSgyLCJGSUxURVIgOiAiKSxtZSgzLCJiIiksTmUoNCkseWUoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgp'@;
put 'O0NlKDQpLG9yKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gVlVlKGMsbCl7MSZjJiYoQnIoMCksbWUoMSwic3BhbiIsMTA2KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLG1lKDMsImRpdiIpKDQsImgzIiksTmUoNSwiTG9hZGluZyB0YWJsZSIpLHllKCkoKSxVcigpKX1mdW5jdGlvbiBCVWUo'@;
put 'YyxsKXsxJmMmJihCcigwKSxtZSgxLCJzcGFuIikscXQoMiwiY2xyLWljb24iLDEwNykseWUoKSxtZSgzLCJkaXYiKSg0LCJoMyIpLE5lKDUsIkxvYWRpbmcgdGFibGUgZXJyb3IiKSx5ZSgpKCksVXIoKSl9ZnVuY3Rpb24galVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDQpKDEsImRp'@;
put 'diIsMTA1KSxRZSgyLFZVZSw2LDAsIm5nLWNvbnRhaW5lciIsMzUpLFFlKDMsQlVlLDYsMCwibmctY29udGFpbmVyIiwzNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJZiIsIWEuZ2V0ZGF0YUVycm9yKSxDZSgxKSxSZSgibmdJZiIsYS5nZXRkYXRhRXJyb3IpfX1m'@;
put 'dW5jdGlvbiB6VWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLGpjKCJUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRl'@;
put 'LnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBVVWUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTApLFFlKDEselVlLDIsMiwic3BhbiIsMzUpLHll'@;
put 'KCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBaVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMTA4KSx4dCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJlY29yZEJ1dHRvbkNsaWNrKCkpfSkscXQoMiwiY2xyLWljb24iLDk1KSxOZSgzLCIgQWRkIFJlY29yZCAiKSx5ZSgpLFFlKDQsVVVlLDIsMSwiY2xyLXRvb2x0aXAt'@;
put 'Y29udGVudCIsMTA5KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBZVWUoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwxMTEpLE5lKDEpLHF0KDIsImNvbnRhY3QtbGlu'@;
put 'ayIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGdyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gV1VlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTIz'@;
put 'KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksamMoIk9ubHkgIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PyJyb3ciOiJyb3dzIiwiIHdpbGwgYmUgc3VibWl0'@;
put 'dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gR1VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxMjQpKDEsImRpdiIsMTI1KSgyLCJsYWJlbCIsMTI2KSxOZSgzLCJNZXNzYWdl'@;
put 'IikseWUoKSxtZSg0LCJ0ZXh0YXJlYSIsMTI3KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm1lc3NhZ2U9aCl9KSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNCksUmUoIm5nTW9kZWwiLGEubWVzc2FnZSkoImRpc2FibGVk'@;
put 'IiwhYS52YWxpZGF0aW9uRG9uZSkoInZhbHVlIixhLnZhbGlkYXRpb25Eb25lPyIiOiJQbGVhc2Ugd2FpdCB3aGlsZSB3ZSB2YWxpZGF0ZSAiK2EuY29scy5sZW5ndGgqYS5tb2RpZmVkUm93c0luZGV4ZXMubGVuZ3RoKyIgY2VsbHMuIil9fWZ1bmN0aW9uICRVZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO21lKDAsImRpdiIsMTEyKSgxLCJkaXYiLDExMykoMiwiZGl2IiwxMTQpKDMsImRpdiIsMTE1KSg0LCJidXR0b24iLDExNikscXQoNSwiY2xyLWljb24iLDExNykseWUoKSxtZSg2LCJoMyIsMiksTmUoNykseWUoKSgpLG1lKDgsImRpdiIsMyksUWUoOSxXVWUsMiwyLCJzcGFu'@;
put 'IiwxMTgpLFFlKDEwLEdVZSw1LDMsImRpdiIsMTE5KSx5ZSgpLG1lKDExLCJkaXYiLDEyMCkoMTIsImJ1dHRvbiIsMTIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnNhdmVUYWJsZShoLmhvdFRhYmxlLmRhdGEpKX0pLE5lKDEzLCIgU3Vi'@;
put 'bWl0ICIpLHllKCksbWUoMTQsImJ1dHRvbiIsMTIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBoLmNhbmNlbFN1Ym1pdCgpLGguc3VibWl0PSExLGp0KGgudmFsaWRhdGlvbkRvbmU9MCl9KSxOZSgxNSwiIENhbmNlbCAiKSx5ZSgpKCkoKSgpKCl9'@;
put 'aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNyksYjAoIiBTdWJtaXQgZm9yIEFwcHJvdmFsICgiLGEucm93c0NoYW5nZWQucm93c0FkZGVkLCIgYWRkZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCwiIHVwZGF0ZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCwiIGRlbGV0ZWQp'@;
put 'ICIpLENlKDIpLFJlKCJuZ0lmIixhLnRvdGFsUm93c0NoYW5nZWQ+YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQmJmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09YS5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVUcnVlKSxDZSgy'@;
put 'KSxSZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKX19ZnVuY3Rpb24gcVVlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTI4KSxOZSgxKSxiYSgyLCJwa1NwYWNlU2VwYXJhdGUiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLGpjKCIgT24gcm93'@;
put 'ICIsYSsxLCI6ICIsVWwoMiwyLGQucGtGaWVsZHNbYV0ucmVwbGFjZSgifCIsIiIpKSwiICIpfX1mdW5jdGlvbiBLVWUoYyxsKXtpZigxJmMmJihtZSgwLCJwIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLGIwKCIgIixhLmNvbCwiKCIsYS5sZW4sIiksICIs'@;
put 'YS52YWwsIiAiKX19ZnVuY3Rpb24gWFVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxMjkpKDEsImRpdiIsMTMwKSgyLCJkaXYiLDExNCkoMywiZGl2IiwxMTUpKDQsImJ1dHRvbiIsMTE2KSxxdCg1LCJjbHItaWNvbiIsMTE3KSx5ZSgpLG1lKDYsImgzIiwyKSxOZSg3'@;
put 'LCJFcnJvciIpLHllKCkoKSxtZSg4LCJkaXYiLDMpKDksInAiKSxOZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLHllKCkoKSxtZSgxMSwiZGl2IiwxNykoMTIsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5udWxs'@;
put 'VmFyaWFibGVzPSExKX0pLE5lKDEzLCIgT2sgIikseWUoKSgpKCkoKSgpfX1mdW5jdGlvbiBKVWUoYyxsKXsxJmMmJnF0KDAsImFwcC1xdWVyeSIsbnVsbCwxMzEpfWZ1bmN0aW9uIFFVZShjLGwpezEmYyYmKG1lKDAsInAiLDEzMiksTmUoMSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRy'@;
put 'eSBhZ2Fpbi4gIikseWUoKSl9Y29uc3QgZVplPWZ1bmN0aW9uKGMsbCl7cmV0dXJue2xpYk5hbWU6Yyx0YWJsZU5hbWU6bH19LElzZT1mdW5jdGlvbigpe3JldHVyblsiIiwiICJdfSx0WmU9ZnVuY3Rpb24oYyl7cmV0dXJue2hlYWRlckJhckZpbHRlcjpjfX0sTHNlPUYoNTMpLFJzZT1GKDM5'@;
put 'MDA3KS5CdWZmZXI7bGV0IEpBPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLmhlbHBl'@;
put 'clNlcnZpY2U9Xyx0aGlzLnJvdXRlcj1ULHRoaXMucm91dGU9Vyx0aGlzLnNhc1NlcnZpY2U9aWUsdGhpcy5jZGY9Z2UsdGhpcy5ob3RSZWdpc3RlcmVyPXdlLHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3Q9bmV3IGVoLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgZWgsdGhpcy5ob3RJ'@;
put 'bnN0YW5jZUNvbXBMaXN0PW5ldyBlaCx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PW5ldyBlaCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmNvbHM9W10sdGhpcy5yZXN0cmljdGlvbnM9e30sdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1b'@;
put 'XSx0aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10saGlkZGVuOiEwLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixtaW5TcGFyZVJvd3M6MSxsaWNlbnNlS2V5OnZvaWQgMCxyZWFkT25seTohMCxjb3B5UGFzdGU6'@;
put 'e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sc2V0dGluZ3M6e2NvbnRleHRNZW51OntpdGVtczp7ZWRpdF9yb3c6e25hbWU6IkVkaXQgcm93IixoaWRkZW4oKXtjb25zdCBvdD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtpZighb3QpcmV0dXJuITE7Y29u'@;
put 'c3QgZXQ9b3RbMF07cmV0dXJuIGV0LmZyb20ucm93IT09ZXQudG8ucm93fSxjYWxsYmFjazooWmUsb3QsZXQpPT57bGV0IHl0PW90WzBdO3l0LnN0YXJ0LnJvdz09PXl0LmVuZC5yb3cmJnRoaXMuZWRpdFJlY29yZChudWxsLHl0LnN0YXJ0LnJvdyl9fSxyb3dfYWJvdmU6e25hbWU6Ikluc2Vy'@;
put 'dCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifSxyZW1vdmVfcm93OntuYW1lOiJJZ25vcmUgcm93In0sY29weTp7bmFtZToiQ29weSB3aXRob3V0IGhlYWRlcnMifSxjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnM6e25hbWU6IkNvcHkgd2l0aCBoZWFkZXJz'@;
put 'In0sY29weV9jb2x1bW5faGVhZGVyc19vbmx5OntuYW1lOiJDb3B5IGhlYWRlcnMgb25seSJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0sdW5kbzp7bmFtZToiVW5kbyJ9LHJlZG86e25hbWU6IlJlZG8ifX19fX0sdGhpcy5ob3RDZWxsc1Byb3BSb3c9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlz'@;
put 'LnN1Ym1pdExvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOjAscm93c0RlbGV0ZWQ6MCxyb3dzQWRkZWQ6MH0sdGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5xdWVyeUVycj0hMSx0aGlzLnN1Y2Nlc3NFbmFibGU9ITEs'@;
put 'dGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMucGtGaWVsZHM9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMuYmFkRWRpdD0hMSx0aGlzLnNhdmVMb2FkaW5nPSExLHRoaXMuYXBwcm92ZXJzPVtdLHRoaXMuZXJyVmFsaWRhdGlvbj0hMSx0aGlzLnBr'@;
put 'TnVsbD0hMSx0aGlzLm5vUGtOdWxsPSExLHRoaXMudGFibGVEYXRhPVtdLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIsdGhpcy5zaG93QXBwcm92ZXJzPSExLHRoaXMucGtEdXBzPSExLHRoaXMudmFsaWRhdGlvbkRvbmU9MCx0aGlzLmR1cGxpY2F0ZVBrSW5kZXhl'@;
put 'cz1bXSx0aGlzLmNvbHVtbkhlYWRlcj1bXSx0aGlzLnNwZWNJbmZvPVtdLHRoaXMudG9vTG9uZz0hMSx0aGlzLmV4Y2VlZENlbGxzPVtdLHRoaXMudXBsb2FkZXI9bmV3IFJvZSx0aGlzLnVwbG9hZFVybD0iIix0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkUHJldmlldz0hMSx0'@;
put 'aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGwsdGhpcy5kYXRhPVtdLHRoaXMuaGVhZGVyQXJyYXk9W10sdGhpcy5ob3REYXRhU2NoZW1hPXt9LHRoaXMuaGVhZGVyU2hvdz1bXSx0aGlzLmhlYWRlclZpc2libGU9ITEsdGhpcy5oYXNCYXNlRHJvcFpv'@;
put 'bmVPdmVyPSExLHRoaXMuaGFzQW5vdGhlckRyb3Bab25lT3Zlcj0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSExLHRoaXMuZGF0ZVRpbWVIZWFkZXJzPVtdLHRoaXMudGltZUhlYWRlcnM9W10sdGhpcy5kYXRlSGVhZGVycz1bXSx0aGlzLnhsUnVs'@;
put 'ZXM9W10sdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMuaGVhZGVyQ29sdW1ucz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuZmlsZVBhc3N3b3JkU3ViamVjdD1uZXcgYmUsdGhpcy5maWxlVW5sb2NrRXJyb3I9ITEsdGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMSx0aGlzLnNob3dV'@;
put 'cGxvYWRNb2RhbD0hMSx0aGlzLmRpc2NhcmRTb3VyY2VGaWxlPSExLHRoaXMubWFudWFsRmlsZUVkaXRNb2RhbD0hMSx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzPVtdLHRoaXMuY3Vy'@;
put 'cmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0h'@;
put 'MSx0aGlzLnNpbmdsZVJvd1NlbGVjdGVkPSExLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMuZ2V0ZGF0YUVycm9yPSExLHRoaXMuemVyb0ZpbHRlclJvd3M9ITEsdGhpcy50YWJsZUZpbGVEcmFnT3Zlcj0hMSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdLHRoaXMudmFsaWRhdGlvblRh'@;
put 'YmxlTGltaXQ9MjAsdGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRVhUUkFfQ09MX05BTUU6MSxESVNQTEFZX1ZBTFVFOjIsRElTUExBWV9UWVBFOjMsUkFXX1ZBTFVFX05VTTo0LFJBV19WQUxVRV9DSEFSOjUsRk9SQ0VfRkxBRzo2fSx0aGlzLmNl'@;
put 'bGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRElTUExBWV9WQUxVRToxLFJBV19WQUxVRToyfSx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXA9W10sdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhp'@;
put 'cy50aW1lc0NsaWNrZWQ9MCxaelt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSYmVEllKCkucmVnaXN0ZXJMYW5ndWFnZShaelt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSksdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBBZyx0aGlzLnBhcnNlUmVzdHJpY3Rpb25zKCksdGhpcy5zZXRSZXN0'@;
put 'cmljdGlvbnMoKX1wYXJzZVJlc3RyaWN0aW9ucygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRl'@;
put 'LnZhbHVlLmVkaXRSZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZH1zZXRSZXN0cmljdGlvbnMoYSl7YSYmKHRoaXMucmVzdHJpY3Rpb25zPXsuLi50aGlzLnJlc3RyaWN0aW9ucywuLi5hfSks'@;
put 'dGhpcy5yZXN0cmljdGlvbnMucmVtb3ZlRWRpdFJlY29yZEJ1dHRvbiYmZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMuZWRpdF9yb3csdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cmJihkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGlu'@;
put 'Z3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYWJvdmUsZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2JlbG93LGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJlbW92ZV9yb3cpfWNoZWNrUm93'@;
put 'TGltaXQoKXt0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnfHx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09MS8wJiYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c9dGhpcy5kYXRhU291cmNlPy5sZW5ndGg+PXRoaXMubGljZW5jZVN0YXRl'@;
put 'LnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0'@;
put 'RmlsZVVwbG9hZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkZpbGUgVXBsb2FkIik6dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJJbmZvcm1hdGlvbiIsIlVwbG9hZCBmZWF0dXJlIGlzIGRpc2FibGVk'@;
put 'IHdoaWxlIENvbHVtbiBMZXZlbCBTZWN1cml0eSBydWxlcyBhcmUgYWN0aXZlIik6dGhpcy51cGxvYWRQcmV2aWV3fHwodGhpcy5zaG93VXBsb2FkTW9kYWw9ITApfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX11cGRhdGVfc2hlZXRfcmFuZ2UoYSl7dmFyIGQ9'@;
put 'e3M6e3I6MS8wLGM6MS8wfSxlOntyOjAsYzowfX07T2JqZWN0LmtleXMoYSkuZmlsdGVyKGZ1bmN0aW9uKGgpe3JldHVybiIhIiE9aC5jaGFyQXQoMCl9KS5tYXAoR2MudXRpbHMuZGVjb2RlX2NlbGwpLmZvckVhY2goZnVuY3Rpb24oaCl7ZC5zLmM9TWF0aC5taW4oZC5zLmMsaC5jKSxkLnMu'@;
put 'cj1NYXRoLm1pbihkLnMucixoLnIpLGQuZS5jPU1hdGgubWF4KGQuZS5jLGguYyksZC5lLnI9TWF0aC5tYXgoZC5lLnIsaC5yKX0pLGFbIiFyZWYiXT1HYy51dGlscy5lbmNvZGVfcmFuZ2UoZCl9Z2V0UmFuZ2VBbmRTaGVldChhKXtsZXQgZD0wLGg9MCxmPS0xLF89LTEsVD0iIixXPSExLGll'@;
put 'PVtdLHdlPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi50aGlzLmhlYWRlckFycmF5XS5tYXAob3Q9Pm90LnRvTG93ZXJDYXNlKCkpLEVlPXdlLnJlZHVjZSgob3QsZXQpPT4ob3RbZXRdPS0xLG90KSx7fSk7cmV0dXJuIGEuU2hlZXROYW1lcy5mb3JFYWNoKG90PT57aWYo'@;
put 'VylyZXR1cm47aWU9W10sVD1vdDtjb25zdCBldD1hLlNoZWV0c1tUXTtpZih0aGlzLmRhdGE9R2MudXRpbHMuc2hlZXRfdG9fanNvbihldCx7aGVhZGVyOjEsYmxhbmtyb3dzOiExLGRlZnZhbDoiIn0pLHRoaXMuZGF0YS5sZW5ndGg8PTEpcmV0dXJuO2xldCB5dD1bXTt0aGlzLmhlYWRlckFy'@;
put 'cmF5LmZvckVhY2goKCk9Pnl0LnB1c2goIiIpKSx0aGlzLmRhdGEucHVzaCh5dCk7bGV0IGt0PSExO2lmKHRoaXMuZGF0YS5mb3JFYWNoKChTdCxRdCk9PntpZighVylpZihrdCl7bGV0IHJuPSEwLHZuPSExO3dlLmZvckVhY2goTm49Pntjb25zdCBjcj1FZVtObl07IiIhPT1TdFtjcl0mJnZv'@;
put 'aWQgMCE9PVN0W2NyXT9ybj0hMTotMSE9PXRoaXMuaGVhZGVyUGtzLmluZGV4T2YoTm4udG9VcHBlckNhc2UoKSkmJih2bj0hMCl9KSxybnx8dm4/KF89UXQsVz0hMCk6LTE9PT1mJiYoZj1RdCl9ZWxzZXtjb25zdCBybj1TdC5tYXAoTm49Pk5uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7'@;
put 'aWYoIXJuLmluY2x1ZGVzKCJfX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18iKSl7Y29uc3QgTm49d2UuaW5kZXhPZigiX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fIik7Tm4+LTEmJndlLnNwbGljZShObiwxKX1rdD0hMCx3ZS5mb3JFYWNoKE5uPT57LTE9PT1ybi5pbmRleE9m'@;
put 'KE5uKSYmKGt0PSExKX0pO2xldCB2bj1bXTt2bj10aGlzLmZpbmRWYWxpZEhlYWRlcnMocm4sd2UsUXQsVCksITE9PT12blswXT8oa3Q9ITEsdm5bMV0ubGVuZ3RoPjAmJnZuWzFdLmZvckVhY2goTm49PntpZS5wdXNoKE5uKX0pKTpFZT12blsxXX19KSxXJiYodGhpcy51cGRhdGVfc2hlZXRf'@;
put 'cmFuZ2UoZXQpLGV0WyIhcmVmIl0pKXtjb25zdCBRdD1HYy51dGlscy5kZWNvZGVfcmFuZ2UoZXRbIiFyZWYiXXx8IiIpO2Q9UXQucy5yLGg9UXQucy5jfX0pLC0xPT09ZiYmKFc9ITEpLHtmb3VuZERhdGE6VyxzaGVldE5hbWU6VCxzdGFydFJvdzpmLGVuZFJvdzpfLGNzdkFycmF5SGVhZGVy'@;
put 'c01hcDpFZSxtaXNzaW5nSGVhZGVyczppZSxyYW5nZVN0YXJ0Um93OmQscmFuZ2VTdGFydENvbDpofX1wcm9tcHRFeGNlbFBhc3N3b3JkKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57dGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMCxzZXRUaW1lb3V0KCgpPT57Y29uc3QgaD1kb2N1bWVu'@;
put 'dC5xdWVyeVNlbGVjdG9yKCIjZmlsZVBhc3N3b3JkSW5wdXQiKTtoJiYoaC5mb2N1cygpLGgudmFsdWU9IiIpfSwxMDApLHRoaXMuZmlsZVBhc3N3b3JkU3ViamVjdC5zdWJzY3JpYmUoaD0+e3RoaXMuZmlsZVVubG9ja0Vycm9yPSExLGEoaHx8dm9pZCAwKX0pfSl9Z2V0RmlsZURlc2MoYSxk'@;
put 'PSExKXt2YXIgaD10aGlzO2xldCBmO3RoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iTG9hZGluZyIsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSEwLGY9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy5maWxlbmFtZT0iIjtsZXQgXz1mLm5hbWU7dGhpcy5m'@;
put 'aWxlbmFtZT1fLHRoaXMuYXBwZW5kVXBsb2FkU3RhdGUoYExvYWRpbmcgJHtffSBpbnRvIHRoZSBicm93c2VyYCk7bGV0IFc9Xy5zbGljZShfLmxhc3RJbmRleE9mKCIuIikrMSxfLmxhc3RJbmRleE9mKCIuIikrNCk7aWYoInhscyI9PT1XLnRvTG93ZXJDYXNlKCkpe2xldCBpZT1uZXcgRmls'@;
put 'ZVJlYWRlcjtpZS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgd2U9ZmkoZnVuY3Rpb24qKEVlKXtjb25zdCBaZT1oLnRvQnN0cihFZS50YXJnZXQucmVzdWx0KTtsZXQgb3QsZXQ9ITE7Y29uc3QgeXQ9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6'@;
put 'ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7b3Q9R2MucmVhZChaZSx7Li4ueXR9KX1jYXRjaChEcil7aWYoRHIubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKWZvcihldD0hMDtldDspe2NvbnN0IF9pPXlpZWxkIGgucHJvbXB0RXhjZWxQYXNzd29yZCgp'@;
put 'O2lmKF9pKXRyeXtvdD1HYy5yZWFkKFplLHsuLi55dCxwYXNzd29yZDpfaX0pLGV0PSExLGguZmlsZVVubG9ja0Vycm9yPSExfWNhdGNoKGxpKXtoLmZpbGVVbmxvY2tFcnJvcj0hMCxsaS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChldD0hMSl9ZWxzZSBl'@;
put 'dD0hMX1lbHNlIGguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsRHIsdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUiKX1pZighb3QpcmV0dXJuIGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkKGguc2hvd1VwbG9hZE1vZGFsPSExKTtsZXQga3Q9ITEsU3Q9W107Y29uc3QgUXQ9'@;
put 'WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmguaGVhZGVyQXJyYXldO2xldCBybj1RdC5tYXAoRHI9PkRyLnRvTG93ZXJDYXNlKCkpLHZuPXJuLnJlZHVjZSgoRHIsX2kpPT4oRHJbX2ldPS0xLERyKSx7fSksTm49W107Y29uc3QgY3I9aC5nZXRSYW5nZUFuZFNoZWV0KG90'@;
put 'KTtpZihTdD1jci5taXNzaW5nSGVhZGVycyxjci5mb3VuZERhdGEpe2t0PSEwLHZuPWNyLmNzdkFycmF5SGVhZGVyc01hcDtjb25zdCBEcj1vdC5TaGVldHNbY3Iuc2hlZXROYW1lXTtoLmFwcGVuZFVwbG9hZFN0YXRlKGBUYWJsZSBmb3VuZCBvbiBzaGVldCAke2NyLnNoZWV0TmFtZX0gb24g'@;
put 'cm93ICR7Y3Iuc3RhcnRSb3d9YCk7bGV0IF9pPSIiLGxpPSIiO2ZvcihsZXQgbXI9Y3Iuc3RhcnRSb3c7bXI8Y3IuZW5kUm93OysrbXIpe2NvbnN0IEVpPVtdO3JuLmZvckVhY2goRm49Pntjb25zdCBRbj1HYy51dGlscy5lbmNvZGVfY2VsbCh7cjpjci5yYW5nZVN0YXJ0Um93K21yLGM6Y3Iu'@;
put 'cmFuZ2VTdGFydENvbCt2bltGbl19KTtsZXQgTXI7IiI9PT1faSYmKF9pPVFuKSxsaT1RbixNcj1EcltRbl0/RHJbUW5dOnt2OiIifSxFaS5wdXNoKE1yKX0pLEVpLmZpbmQoRm49PiIiIT09Rm4udikmJk5uLnB1c2goRWkpfWguZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlRhYmxlIEZv'@;
put 'dW5kIixgU2hlZXQ6ICR7Y3Iuc2hlZXROYW1lfVxuUmFuZ2U6ICR7X2l9OiR7bGl9YCl9ZWxzZSBTdD1jci5taXNzaW5nSGVhZGVycztpZihTdC5sZW5ndGg+MCl7U3Quc29ydChmdW5jdGlvbihsaSxtcil7cmV0dXJuIGxpWzFdPT09bXJbMV0/MDpsaVsxXT5tclsxXT8tMToxfSk7bGV0IERy'@;
put 'PVN0Lm1hcChfaT0+X2lbMF0pLnNsaWNlKDAsNSkuam9pbigiXG4iKTtyZXR1cm4gaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxEciksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9KSxoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBv'@;
put 'cCgpfWlmKDA9PT1Obi5sZW5ndGh8fDA9PT1OblswXS5sZW5ndGgpcmV0dXJuIGguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIiksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9KSxoLmV4Y2VsRmlsZVBhcnNp'@;
put 'bmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpO2lmKChoLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MHx8aC5kYXRlSGVhZGVycy5sZW5ndGg+MHx8aC50aW1lSGVhZGVycy5sZW5ndGg+MCkmJihObj1oLnVwZGF0ZURhdGVUaW1lQ29scyhRdCxObikpLGgueGxSdWxlcy5sZW5ndGg+'@;
put 'MCYmKE5uPWgudXBkYXRlWExSdWxlQ29scyhRdCxObikpLCFrdCl7aWYoMD09PVN0Lmxlbmd0aCloLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISIpLHNldFRpbWVvdXQoKCk9PntoLmZpbGVuYW1lPSIifSk7ZWxzZXtT'@;
put 'dC5zb3J0KGZ1bmN0aW9uKGxpLG1yKXtyZXR1cm4gbGlbMV09PT1tclsxXT8wOmxpWzFdPm1yWzFdPy0xOjF9KTtsZXQgRHI9U3QubWFwKF9pPT5faVswXSkuc2xpY2UoMCw1KS5qb2luKCJcbiIpO2guZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsRHIpfXJldHVybiBoLmV4Y2Vs'@;
put 'RmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfXtoLmhlYWRlclNob3c9UXQsTm49Tm4ubWFwKF9pPT5faS5tYXAobGk9PiJuIj09PWxpLnQ/bGkudjpsaS53KSksTm49Tm4ubWFwKF9pPT5faS5tYXAoKGxpLG1yKT0+eyFsaSYmMCE9PWxpJiYobGk9IiIpLGlzTmFO'@;
put 'KGxpKSYmKGxpPWxpLnJlcGxhY2UoLyIvZywnIiInKSkuc2VhcmNoKC8sL2cpPi0xJiYobGk9JyInK2xpKyciJyk7Y29uc3QgRWk9aC5oZWFkZXJTaG93W21yXTtyZXR1cm4ibnVtZXJpYyI9PT1oLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEVpKT8udHlwZSYmKDAsdDMuaXNTcGVjaWFsTWlzc2lu'@;
put 'ZykobGkpJiYhbGkuaW5jbHVkZXMoIi4iKSYmKGxpPSIuIitsaSksbGl9KSksaC5kYXRhPU5uO2xldCBEcj1RdC5qb2luKCIsIikrIlxuIjtpZihEcis9Tm4uc2xpY2UoMCxoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCkubWFwKF9pPT5faS5qb2luKCIsIikpLmpvaW4o'@;
put 'IlxuIiksIldMQVRJTjEiPT09aC5lbmNvZGluZyl7bGV0IF9pPUxzZS5kZWNvZGUoUnNlLmZyb20oRHIpLCJDUC0xMjUyIiksbGk9bmV3IEJsb2IoW19pXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pLG1yPWguYmxvYlRvRmlsZShsaSxoLmZpbGVuYW1lKyIuY3N2Iik7aC51cGxvYWRlci5h'@;
put 'ZGRUb1F1ZXVlKFttcl0pfWVsc2V7bGV0IF9pPW5ldyBCbG9iKFtEcl0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSxsaT1oLmJsb2JUb0ZpbGUoX2ksaC5maWxlbmFtZSsiLmNzdiIpO2gudXBsb2FkZXIuYWRkVG9RdWV1ZShbbGldKX1oLmV4Y2VsRmlsZVJlYWR5PSEwfWlmKDA9PT1oLmRh'@;
put 'dGEubGVuZ3RoKXJldHVybiBoLnNob3dVcGxvYWRNb2RhbD0hMSxoLnVwbG9hZFByZXZpZXc9ITEsaC5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiVGFibGUgaW4gdGhlIGZpbGUgaXMgZW1wdHkuIERhdGEgZm91bmQgb24gc2hl'@;
put 'ZXQ6ICIpO2guZXhjZWxGaWxlUmVhZHk9ITAsaC5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl9KTtyZXR1cm4gZnVuY3Rpb24oRWUpe3JldHVybiB3ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGllLnJlYWRBc0FycmF5QnVmZmVyKGYpfWVsc2UgaWYoImNzdiI9PT1XLnRvTG93ZXJDYXNl'@;
put 'KCkpe2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09MS8wKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJFeGNlbCBmaWxlcyBvbmx5LiBUbyB1bmxvY2sgQ1NWIHVwbG9hZHMsIHBsZWFzZSBjb250YWN0IHN1cHBv'@;
put 'cnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIHRoaXMudXBsb2FkZXIucXVldWUucG9wKCk7aWYoIldMQVRJTjEiPT09dGhpcy5lbmNvZGluZyl7bGV0IGllPW5ldyBGaWxlUmVhZGVyO2llLm9ubG9hZD13'@;
put 'ZT0+e2xldCBFZT1Mc2UuZGVjb2RlKFJzZS5mcm9tKHdlLnRhcmdldC5yZXN1bHQpLCJDUC0xMjUyIiksWmU9bmV3IEJsb2IoW0VlXSx7dHlwZTpXfSksb3Q9dGhpcy5ibG9iVG9GaWxlKFplLHRoaXMuZmlsZW5hbWUpO3RoaXMudXBsb2FkZXIucXVldWUucG9wKCksdGhpcy51cGxvYWRlci5h'@;
put 'ZGRUb1F1ZXVlKFtvdF0pLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITB9LHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLGllLnJlYWRBc0FycmF5QnVmZmVyKGYpLHRoaXMuZ2V0RmlsZSgpfWVsc2UgdGhpcy5leGNlbEZpbGVSZWFkeT0hMCx0aGlzLmV4Y2Vs'@;
put 'RmlsZVBhcnNpbmc9ITEsdGhpcy5nZXRGaWxlKCl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBjc3Ygb3IgZXhjZWwgZmlsZS4nKSx0aGlzLmV4Y2Vs'@;
put 'RmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy5nZXRGaWxlKCk6dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0h'@;
put 'MH1nZXRGaWxlKCl7aWYodGhpcy5jaGVja0ludmFsaWQoKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJJbnZhbGlkIHZhbHVlcyBhcmUgcHJlc2VudC4iKTtpZih0aGlzLnZhbGlkYXRlUHJpbWFyeUtleXMoKSwwIT09dGhpcy5kdXBsaWNhdGVQ'@;
put 'a0luZGV4ZXMubGVuZ3RoKXJldHVybiB0aGlzLnBrRHVwcz0hMCx2b2lkKHRoaXMuc3VibWl0PSExKTt0aGlzLnBrRHVwcz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITA7bGV0IGE9W107Zm9yKGNvbnN0IGQgb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6ZCxmaWxlTmFtZTpk'@;
put 'Lm5hbWV9KTt0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSh0aGlzLnVwbG9hZFVybCxhLHt0YWJsZTp0aGlzLmxpYmRzfSkudGhlbihkPT57aWYodHlwZW9mIGQuc2FzanNBYm9ydD4idSIpe2lmKHR5cGVvZiBkLnNhc3BhcmFtcz4idSIpcmV0dXJuO3t0aGlzLnVwbG9hZExvYWRpbmc9ITE7'@;
put 'bGV0IGg9ZC5zYXNwYXJhbXNbMF07dGhpcy5zdWNjZXNzRW5hYmxlPSEwLHRoaXMudGFibGVJZD1oLkRTSUQsdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZUlkKX19ZWxzZXtjb25zdCBoPWQsZj1oLnNhc2pzQWJvcnRbMF0uTVNHLF89aC5zYXNqc0Fib3J0'@;
put 'WzBdLk1BQzt0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtd'@;
put 'LHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLGYse1NZU1dBUk5JTkdURVhUOmguU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOmguU1lTRVJST1JURVhULE1BQzpffSl9fSxkPT57dGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Qu'@;
put 'Zmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsZCl9KX1nZXRQZW5kaW5nRXhjZWxQcmV2'@;
put 'aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2xldCBhPVtdO3RoaXMuZGF0YS5tYXAoaD0+e2xldCBmPXt9'@;
put 'O3RoaXMuaGVhZGVyU2hvdy5tYXAoKF8sVCk9PntmW19dPWhbVF19KSxmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KGYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPSJObyIpLGEucHVzaChmKX0pLHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNl'@;
put 'cnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5kYXRhU291cmNlPWEsdGhpcy5ob3RUYWJsZS5kYXRhPWE7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlO3RoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iVmFsaWRhdGluZy1IT1QiLGQudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5k'@;
put 'YXRhU291cmNlLG1heFJvd3M6MS8wfSwhMSksZC5yZW5kZXIoKSx0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKCJWYWxpZGF0aW5nIHJvd3MiKSxkLnZhbGlkYXRlQ2VsbHMoKCk9Pnt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITAsdGhpcy5leGNlbEZpbGVQYXJz'@;
put 'aW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsfSl9ZGlzY2FyZFBlbmRpbmdFeGNlbChhKXt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHttYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR9KSxhJiZ0aGlzLmNhbmNlbEVkaXQo'@;
put 'KSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtd'@;
put 'LGlzTmFOKHBhcnNlSW50KHRoaXMucm91dGVyLnVybC5zcGxpdCgiLyIpLnBvcCgpfHwiIikpfHx0aGlzLnF1ZXJ5VGV4dFNhdmVkLmxlbmd0aD4wJiYodGhpcy5xdWVyeVRleHQ9dGhpcy5xdWVyeVRleHRTYXZlZCx0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiKX1wcmV2aWV3VGFibGVFZGl0Q29u'@;
put 'ZmlybSgpe3RoaXMuZGlzY2FyZFBlbmRpbmdFeGNlbCgpLHRoaXMuY29udmVydFRvQ29ycmVjdFR5cGVzKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5lZGl0VGFibGUoITApfWFwcGVuZFVwbG9hZFN0YXRlKGEsZD0hMSl7dGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMudXBsb2FkU3RhdGVy'@;
put 'Q29tcExpc3QuZmlyc3QmJihkP3RoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QucmVwbGFjZUxhc3RTdGF0ZShhKTp0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LmFwcGVuZFN0YXRlKGEpKX1maW5kVmFsaWRIZWFkZXJzKGEsZCxoLGYpe2xldCBfPSExLFQ9W10sVz0wO2Zv'@;
put 'cig7VzxhLmxlbmd0aDspe2lmKCFfJiYtMSE9PWQuaW5kZXhPZihhW1ddKSl7bGV0IGllLGdlPTAsd2U9MCxFZT0wLFplPVtdLG90PSExO2ZvcihsZXQga3Q9VztrdDxhLmxlbmd0aDtrdCsrKXtpZigiIj09PWFba3RdfHwtMSE9PVplLmluZGV4T2YoYVtrdF0pJiZ0aGlzLmlzQ29sSGVhZGVy'@;
put 'KGFba3RdKSl7IiI9PT1hW2t0XSYmKG90PSEwKSxpZT1rdDticmVha31aZS5wdXNoKGFba3RdKX1sZXQgZXQ9W107dm9pZCAwIT09aWU/KGV0PWEuc2xpY2UoVyxpZSksRWU9Vyx3ZT1pZSxvdD8oZ2U9VyxXPWllKTooZ2U9VyxXPWllLTEpKTooZXQ9YS5zbGljZShXKSxnZT1XLEVlPVcsd2U9'@;
put 'YS5sZW5ndGgsVz1hLmxlbmd0aCk7bGV0IHl0PSEwO2lmKGQuZm9yRWFjaChrdD0+ey0xPT09ZXQuaW5kZXhPZihrdCkmJih5dD0hMSl9KSx5dCl7Xz0hMDtsZXQgU3Q9ZC5yZWR1Y2UoZnVuY3Rpb24ocm4sdm4pe3JldHVybiByblt2bl09LTEscm59LHt9KSxRdD1hLnNsaWNlKGdlLHdlKTty'@;
put 'ZXR1cm4gZC5mb3JFYWNoKHJuPT57U3Rbcm5dPVF0LmluZGV4T2Yocm4pK2dlfSksWyEwLFN0XX17bGV0IGt0PSROZShldCxkKTtULnB1c2goWyI8Yj5UQUIoIitmKyIpPC9iPiAtICIra3RbMV0uam9pbigiLCIpKyIgKCBtaXNzaW5nICIra3RbMF0uam9pbigiLCIpKyIgKSIsa3RbMV0ubGVu'@;
put 'Z3RoXSl9fVcrK31yZXR1cm5bITEsVF19aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFk'@;
put 'ZXJBcnJheS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX11cGRhdGVEYXRlVGltZUNvbHMoYSxkKXtpZih0aGlzLmRhdGVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLmRhdGVIZWFkZXJz'@;
put 'LmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKF89Pntjb25zdCBUPWZbX107aWYoJHooVC52KSl7Y29uc3QgVz1XeihOdW1iZXIoVC52KSk7VC52PVcuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoVy5n'@;
put 'ZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrVy5nZXREYXRlKCkpLnNsaWNlKC0yKX1lbHNlIGlmKFQmJlQudiYmLTE9PT1ULnYudG9TdHJpbmcoKS5pbmRleE9mKCI6Iikpe2NvbnN0IFc9bmV3IERhdGUoVC52KTsiSW52YWxpZCBEYXRlIiE9PVcudG9VVENTdHJpbmcoKSYmKFQu'@;
put 'dj1ZeihXKSl9ZltfXT1UfSl9KX1pZih0aGlzLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLnRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKF89Pntjb25zdCBU'@;
put 'PWZbX107aWYoJHooVC52KXx8Rm9lKFQudil8fFQudi5pbmNsdWRlcygiRS0iKSl7Y29uc3QgVz1XeihOdW1iZXIoVC52KSk7VC52PVBvZShXKX1mW19dPVR9KX0pfWlmKHRoaXMuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLmRhdGVUaW1lSGVhZGVycy5mb3JFYWNo'@;
put 'KGY9PnstMSE9PWEuaW5kZXhPZihmKSYmaC5wdXNoKGEuaW5kZXhPZihmKSl9KSxkLmZvckVhY2goZj0+e2guZm9yRWFjaChfPT57Y29uc3QgVD1mW19dO2lmKCR6KFQudil8fEZvZShULnYpKXtsZXQgVz1XeihOdW1iZXIoVC52KSk7VC52PVl6KFcpKyIgIitQb2UoVyl9ZWxzZXtpZigtMT09'@;
put 'PVQudi5pbmRleE9mKCIgIikmJi0xIT09VC52LmluZGV4T2YoIjoiKSl7bGV0IGllPVQudi5zdWJzdHJpbmcoMCxULnYuaW5kZXhPZigiOiIpKTtpZT1pZSsiICIrVC52LnN1YnN0cmluZyhULnYuaW5kZXhPZigiOiIpKzEpLFQudj1pZX1sZXQgVz1uZXcgRGF0ZShULnYpOyJJbnZhbGlkIERh'@;
put 'dGUiIT09Vy50b1VUQ1N0cmluZygpJiYoVC52PVl6KFcpKyIgIisoYz0+e2xldCBsPSgiMCIrYy5nZXRIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksbH0p'@;
put 'KFcpKX1mW19dPVR9KX0pfXJldHVybiBkfXVwZGF0ZVhMUnVsZUNvbHMoYSxkKXtpZih0aGlzLnhsUnVsZXMubGVuZ3RoPjApe2NvbnN0IGg9W107dGhpcy54bFJ1bGVzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYuWExfQ09MVU1OKSYmKGYuaW5kZXg9YS5pbmRleE9mKGYuWExfQ09M'@;
put 'VU1OKSxoLnB1c2goZikpfSksZC5mb3JFYWNoKGY9PntoLmZvckVhY2goXz0+e2NvbnN0IFQ9ZltfLmluZGV4XTsiRk9STVVMQSI9PT1fLlhMX1JVTEUmJiJmImluIFQmJigibiI9PT1ULnQ/VC52PSI9IitULmY6VC53PSI9IitULmYpLGZbX109VH0pfSl9cmV0dXJuIGR9YmxvYlRvRmlsZShh'@;
put 'LGQpe2NvbnN0IGg9YTtyZXR1cm4gaC5sYXN0TW9kaWZpZWREYXRlPW5ldyBEYXRlLGgubmFtZT1kLGh9dG9Cc3RyKGEpe2xldCBkPW5ldyBVaW50OEFycmF5KGEpLGg9IiIsZj1kLmJ5dGVMZW5ndGg7Zm9yKGxldCBfPTA7XzxmO18rKyloKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGRbX10pO3Jl'@;
put 'dHVybiBofXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W10saD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7bGV0'@;
put 'IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuKCJob21lIj09PUduLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Hbi5yb290UGFyYW0pJiYoR24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEduLmVkaXRvci5maWx0ZXIucXVlcnk9W10sR24uZWRp'@;
put 'dG9yLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IF89MDtfPGYubGVuZ3RoO18rKyl7Y29uc3QgVD1mW19dLmVsZW1lbnRzO2Q9VC5maWx0ZXIo'@;
put 'ZnVuY3Rpb24oVyl7cmV0dXJuIG51bGw9PT1XLnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChUKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PWEuY2xhdXNlcyYmYS5saWJkcyl7Y29uc3Qg'@;
put 'Zj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKFQ9Pntjb25zdCBXPXtmaWx0ZXJDbGF1c2VzOltdfTtULmVsZW1lbnRzLmZvckVhY2goaWU9PntXLmZpbHRlckNsYXVzZXMucHVzaChhLmhlbHBlclNl'@;
put 'cnZpY2UuZGVlcENsb25lKGllKSl9KSxXLmNsYXVzZUxvZ2ljPVQuY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFcpKX0pO2NvbnN0IF89YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNh'@;
put 'c1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyxfKS50aGVuKFQ9PnthLnF1ZXJ5RmlsdGVyPXtpZDpULnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6VC5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfSxhLnJvdXRlci5uYXZpZ2F0ZShbIi8iXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1'@;
put 'ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PmEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWRdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSksYS5maWx0ZXI9ITF9KS5jYXRj'@;
put 'aChUPT57YS5zdWJtaXRMb2FkaW5nPSExfSl9fWNhdGNoKGYpe2EucXVlcnlFcnI9ITAsYS5zdWJtaXRMb2FkaW5nPSExLGEucXVlcnlFcnJNZXNzYWdlPWZ9fSkoKX1vcGVuUWIoKXt0aGlzLmxpYmRzJiYodGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3Vi'@;
put 'bWl0TG9hZGluZz0hMSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYmRzLHRoaXMuY29scykpfWVkaXRUYWJsZShhLGQpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITApO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtsZXQgZj1oLmdl'@;
put 'dFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksXz1mLmdldFNvcnRDb25maWcoKSxUPUFycmF5LmlzQXJyYXkoXyk/XzpbX107c2V0VGltZW91dCgoKT0+e2F8fCh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2Up'@;
put 'LGQmJnRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5wb3AoKSksdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLGgudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHl9LCExKSxoLnJlbmRlcigpO2Zv'@;
put 'cihsZXQgVyBvZiBUKWYuc29ydChXKTt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0sMCl9Y29udmVydFRvQ29ycmVjdFR5cGVzKGEpe2ZvcihsZXQgZCBvZiBhKWZvcihsZXQgaCBpbiBkKXtsZXQgZj10aGlzLmNvbHMuZmluZChfPT5fLk5BTUU9PT1oKTtmJiYiIiE9PWRbaF0m'@;
put 'JiJudW0iPT09Zi5UWVBFJiYhZi5ERFRZUEUuaW5jbHVkZXMoIlRJTUUiKSYmIWYuRERUWVBFLmluY2x1ZGVzKCJEQVRFIikmJihkW2hdPXBhcnNlSW50KGRbaF0pKX19Y2FuY2VsRWRpdCgpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMuY2VsbFZhbGlkYXRp'@;
put 'b25Tb3VyY2U9W107Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2xldCBkPWEuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxoPWQuZ2V0U29ydENvbmZpZygpLGY9QXJyYXkuaXNBcnJheShoKT9oOltoXTt0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQmJih0aGlzLmRhdGFTb3VyY2U9'@;
put 'dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLHRoaXMuaG90VGFibGUucmVhZE9ubHk9ITAsYS51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25s'@;
put 'eSxkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKTtmb3IobGV0IF8gb2YgZilkLnNvcnQoXyk7dGhpcy5jaGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5ob3RUYWJsZS5y'@;
put 'ZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSwwPT09dGhpcy50aW1lc0NsaWNrZWQmJih0aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnRpbWVzQ2xpY2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJzVG9nZ2xlKCl7'@;
put 'dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNob3dBcHByb3ZlcnN9YWRkUm93KCl7dGhpcy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTtsZXQgZD10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2EuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ci'@;
put 'LGQsMSksYS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnNlbGVjdENlbGwodGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLDApLGEucmVuZGVyKCksdGhpcy5kYXRhU291cmNlW2RdJiYodGhpcy5kYXRhU291cmNlW2RdLm5vTGlua09wdGlvbj0hMCksdGhpcy5h'@;
put 'ZGRpbmdOZXdSb3c9ITEsdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9KX1jYW5jZWxTdWJtaXQoKXt0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQpLHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1p'@;
put 'dD1bXSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9k'@;
put 'aWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gMD09PWg/NjA6ZD41MDA/NTAwOmR9fSwhMSksYS5zZWxlY3RDZWxsKDAsMCksYS5yZW5kZXIoKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9Z2V0'@;
put 'Um93c1N1Ym1pdHRpbmdDb3VudCgpe3RoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmRlYnVnJiYodGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSk7bGV0IGE9MCxkPTAs'@;
put 'aD0wO3RoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMuZGF0YU1vZGlmaWVkPVtdO2ZvcihsZXQgZj0wO2Y8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmKyspe2xldCBfPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2ZdKTtpZigiWWVzIj09PV8uX19f'@;
put 'X19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fKXRoaXMuZGF0YU1vZGlmaWVkLnB1c2goXyksZCsrO2Vsc2V7bGV0IFQ9dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLmZpbmQoVz0+e2ZvcihsZXQgaWUgb2YgdGhpcy5oZWFkZXJQa3MpaWYoV1tpZV0hPT1fW2llXSlyZXR1cm4hMTtyZXR1cm4h'@;
put 'MH0pO1Q/SlNPTi5zdHJpbmdpZnkoXykhPT1KU09OLnN0cmluZ2lmeShUKSYmKHRoaXMuZGF0YU1vZGlmaWVkLnB1c2goXyksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxhKyspOih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKF8pLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2go'@;
put 'ZiksaCsrKX19dGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6YSxyb3dzRGVsZXRlZDpkLHJvd3NBZGRlZDpofX12YWxpZGF0ZVByaW1hcnlLZXlzKCl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2xldCBkPWEuZ2V0RGF0YSgpO3RoaXMucGtGaWVsZHM9W107Zm9yKGxldCBUPTA7VDxk'@;
put 'Lmxlbmd0aDtUKyspe2xldCBXPSIiO2ZvcihsZXQgaWU9MTtpZTx0aGlzLnJlYWRPbmx5RmllbGRzKzE7aWUrKylXPVcrInwiK2RbVF1baWVdO3RoaXMucGtGaWVsZHMucHVzaChXKX1sZXQgXyxoPVtdLGY9dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmb3IobGV0IFQ9MDtUPHRoaXMucGtGaWVs'@;
put 'ZHMubGVuZ3RoO1QrKylmb3IobGV0IFc9MDtXPHRoaXMucGtGaWVsZHMubGVuZ3RoO1crKyl0aGlzLnBrRmllbGRzW1RdPT09dGhpcy5wa0ZpZWxkc1tXXSYmVyE9PVQmJmgucHVzaChXKTtpZih0aGlzLnBrRmllbGRzLmxlbmd0aD5mKWZvcihsZXQgVD1mO1Q8dGhpcy5wa0ZpZWxkcy5sZW5n'@;
put 'dGg7VCsrKWZvcihsZXQgVz1mO1c8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7VysrKVQ8VyYmdGhpcy5wa0ZpZWxkc1tUXT09PXRoaXMucGtGaWVsZHNbV10mJmgucHVzaChXKTtmb3IobGV0IFQ9MDtUPGgubGVuZ3RoO1QrKylmb3IobGV0IFc9MTtXPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtXKysp'@;
put 'Xz1hLmdldENlbGxNZXRhKGhbVF0sVyksXy52YWxpZD0hMSxfLmR1cEtleT0hMCxhLnJlbmRlcigpO3RoaXMuZHVwbGljYXRlUGtJbmRleGVzPVsuLi5uZXcgU2V0KGguc29ydCgpKV19cmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyhhPSExLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtm'@;
put 'b3IobGV0IGYgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgXz1mLnZhbHVlcy5tYXAoVD0+VFt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2guYmF0Y2goKCk9Pntjb25zdCBUPWguZ2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wpLFc9dGhpcy5kY1ZhbGlk'@;
put 'YXRvcj8uZ2V0UnVsZShULmRhdGF8fCIiKTtsZXQgaWU7VyYmKGllPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoVykpLGllfHwoaWU9W10pO2NvbnN0IGdlPVsuLi5uZXcgU2V0KFsuLi5pZSwuLi5fXSldO3RoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVw'@;
put 'ZGF0ZVJ1bGUoZi5jb2wse3NvdXJjZTpnZX0pLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInNvdXJjZSIsZ2UpLGYudmFsdWVzLmxlbmd0aD4wJiYoaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29s'@;
put 'LCJlZGl0b3IiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzdHJpY3QiLGYuc3RyaWN0KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGYuY29sLHtyZW5k'@;
put 'ZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZSIsc3RyaWN0OmYuc3RyaWN0LGZpbHRlcjohMX0pKSx0aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhmLHZvaWQgMCxhLGQpLGgucmVuZGVyKCl9KX19cmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9u'@;
put 'VmFsdWVzKGEsZCxoPSExLGYpe2lmKGEpe2R8fChkPWEucm93KTtjb25zdCBUPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhhLGQsVCxoLGYpfWVsc2UgZm9yKGxldCBUIG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3Vy'@;
put 'Y2Upe2NvbnN0IFc9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKFQpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKFQsVC5yb3csVyxoLGYpfX1zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLGgsZj0hMSxfKXtjb25zdCBUPXRoaXMuaG90SW5zdGFuY2U7bGV0IFc9'@;
put 'W107Zm9yKGxldCBpZSBvZiBoKVcuaW5kZXhPZihpZS5FWFRSQV9DT0xfTkFNRSk8MCYmVy5wdXNoKGllLkVYVFJBX0NPTF9OQU1FKTtmb3IobGV0IGllIG9mIFcpe2NvbnN0IGdlPWguZmlsdGVyKFN0PT5TdC5FWFRSQV9DT0xfTkFNRT09PWllKTtsZXQgd2U9Z2UubWFwKFN0PT4iQyI9PT1T'@;
put 'dC5ESVNQTEFZX1RZUEU/U3QuUkFXX1ZBTFVFX0NIQVI6U3QuUkFXX1ZBTFVFX05VTSk7Y29uc3QgRWU9VC5wcm9wVG9Db2woaWUpO3RoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKFN0PT5TdC5yb3c9PT1kJiZTdC5jb2w9PT1FZSl8fHRoaXMuZGlzYWJs'@;
put 'ZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5wdXNoKHtyb3c6ZCxjb2w6RWUsYWN0aXZlOiExfSksVC5zZXRDZWxsTWV0YShkLEVlLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLFQuc2V0Q2VsbE1ldGEoZCxFZSwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlIiksVC5zZXRDZWxsTWV0'@;
put 'YShkLEVlLCJzdHJpY3QiLGEuc3RyaWN0KSxULnNldENlbGxNZXRhKGQsRWUsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoRWUse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlIixzdHJpY3Q6YS5zdHJp'@;
put 'Y3QsZmlsdGVyOiExfSk7Y29uc3Qgb3Q9VC5nZXRDZWxsTWV0YShkLEVlKSxldD10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKG90LmRhdGF8fCIiKTtsZXQgeXQ7ZXQmJih5dD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKGV0KSkseXR8fCh5dD1bXSksIm51bWVyaWMi'@;
put 'PT09ZXQ/LnR5cGU/KHl0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoeXQsIm51bWJlciIpLHdlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMod2UsIm51bWJlciIpKTooeXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh5'@;
put 'dCwic3RyaW5nIiksd2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh3ZSwic3RyaW5nIikpO2NvbnN0IGt0PVsuLi5uZXcgU2V0KFsuLi55dCwuLi53ZV0pXTtpZihULnNldENlbGxNZXRhKGQsRWUsInNvdXJjZSIsa3QpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxp'@;
put 'ZGF0b3I/LnVwZGF0ZVJ1bGUoRWUse3NvdXJjZTprdH0pLGYpe2lmKF8mJl8hPT1kKXJldHVybjtjb25zdCBTdD1nZS5maW5kKFF0PT4xPT09UXQuRk9SQ0VfRkxBRyk7U3QmJnNldFRpbWVvdXQoKCk9PntULnNldERhdGFBdENlbGwoZCxFZSwiQyI9PT1TdC5ESVNQTEFZX1RZUEU/U3QuUkFX'@;
put 'X1ZBTFVFX0NIQVI6U3QuUkFXX1ZBTFVFX05VTSwiZm9yY2VfY2VsbF92YWxpZGF0aW9uX3ZhbHVlIiksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PT09ZCYmKHRoaXMuZGF0YVNvdXJjZVt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXhdW2llXT0iQyI9PT1TdC5ESVNQTEFZX1RZUEU/'@;
put 'U3QuUkFXX1ZBTFVFX0NIQVI6U3QuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSxkKXtjb25zdCBmPXRoaXMuaG90SW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbChkfHxhLnJvdyxhLmNvbCksXz0oYS52YWx1ZXMuZmluZChnZT0+Z2VbdGhpcy5jZWxsVmFs'@;
put 'aWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdPT09Zil8fFtdKVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLkRJU1BMQVlfSU5ERVhdLFQ9YS5leHRlbmRlZF92YWx1ZXM/LmZpbHRlcihnZT0+Z2VbMF09PT1fKSxXPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5leHRlbmRlZENl'@;
put 'bGxWYWxpZGF0aW9uRmllbGRzKSxpZT1bXTtmb3IobGV0IGdlIG9mIFR8fFtdKXtsZXQgd2U9e307Zm9yKGxldCBFZSBvZiBPYmplY3Qua2V5cyhXKSl3ZVtFZV09Z2VbV1tFZV1dO2llLnB1c2god2UpfXJldHVybiBpZX1jaGVja1NhdmUoKXtpZih0aGlzLmdldFJvd3NTdWJtaXR0aW5nQ291'@;
put 'bnQoKSwwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZClyZXR1cm4gdGhpcy5iYWRFZGl0VGl0bGU9Ik5vIGNoYW5nZXMgdG8gc3VibWl0Iix0aGlzLmJhZEVkaXRD'@;
put 'YXVzZT0iUGxlYXNlIG1vZGlmeSBzb21lIHZhbHVlcyBhbmQgdHJ5IGFnYWluLiIsdm9pZCh0aGlzLmJhZEVkaXQ9ITApO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3Vy'@;
put 'Y2UpO2ZvcihsZXQgaD0wO2g8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtoKyspZGVsZXRlIHRoaXMuZGF0YVNvdXJjZVtoXS5ub0xpbmtPcHRpb247YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlz'@;
put 'LmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGgsZil7cmV0dXJuIGg+NTAwPzUwMDpofX0sITEpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLGMuY250PTAsYy5ub25Qa0NudD0wO2xldCBkPWEuZ2V0RGF0YSgpO2lmKGQubGVuZ3RoPjEmJmEuaXNFbXB0'@;
put 'eVJvdyhkLmxlbmd0aC0xKSYmYS5hbHRlcigicmVtb3ZlX3JvdyIsZC5sZW5ndGgtMSksdGhpcy52YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gdGhpcy5wa0R1cHM9ITAsdGhpcy5zdWJtaXQ9ITEsdm9pZCB0aGlzLmNhbmNl'@;
put 'bFN1Ym1pdCgpO3RoaXMucGtEdXBzPSExLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLCgpPT57dGhpcy5jaGVja0ludmFsaWQoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNl'@;
put 'bnQiKToodGhpcy5zdWJtaXQ9ITAsdGhpcy52YWxpZGF0aW9uRG9uZT0xLHNldFRpbWVvdXQoKCk9Pntkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184IikuZm9jdXMoKX0pKX0pfXNhdmVUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihkLmhv'@;
put 'dEluc3RhbmNlLmdldERhdGEoKSxhPShhPWEuZmlsdGVyKF89PiEhZC5kYXRhTW9kaWZpZWQuZmluZChXPT57Zm9yKGxldCBpZSBvZiBkLmhlYWRlclBrcylpZihXW2llXSE9PV9baWVdKXJldHVybiExO3JldHVybiEwfSkpKS5tYXAoXz0+e2xldCBUPV8uX19fX19ERUxFVEVfX1RISVNfX1JF'@;
put 'Q09SRF9fX19fO3JldHVybiBkZWxldGUgXy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18sXy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189VCxPYmplY3Qua2V5cyhfKS5tYXAoVz0+eyJudW1lcmljIj09PWQuZGNWYWxpZGF0b3I/LmdldFJ1bGUoVyk/LnR5cGUmJiIuIj09'@;
put 'PV9bV10mJihfW1ddPW51bGwpfSksX30pLGQubG9nZ2VyU2VydmljZS5sb2coIkRhdGEgc3VibWl0dGVkIixhKSxkLmNoZWNrSW52YWxpZCgpKXJldHVybiBkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQi'@;
put 'KSxkLmNhbmNlbFN1Ym1pdCgpLHZvaWQoZC5zdWJtaXQ9ITEpO2lmKGQudmFsaWRhdGlvbkRvbmU9MCxkLnNhdmVMb2FkaW5nPSEwLGMuY250PDEmJjA9PT1kLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgmJmMubm9uUGtDbnQ8MSl7ZC5zYXZlTG9hZGluZz0hMCxkLmRpc2FibGVTdWJtaXQ9'@;
put 'ITEsZC5zdWJtaXQ9ITA7bGV0IF89e0FDVElPTjoiTE9BRCJ9O2lmKGQubWVzc2FnZT1kLm1lc3NhZ2UucmVwbGFjZSgvXG4vZywiLiAiKSxfLk1FU1NBR0U9ZC5tZXNzYWdlLF8uTElCRFM9ZC5saWJkcyxkLmNvbHMpe2NvbnN0IFQ9YS5zbGljZSgwLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1'@;
put 'Ym1pdF9yb3dzX2xpbWl0KTtpZih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShfLFQsIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixkLiRkYXRhRm9ybWF0cykudGhlbihpZT0+e2lmKHR5cGVvZiBpZS5zYXNwYXJhbXM8InUiKXJldHVybiBkLnJvdXRl'@;
put 'ci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitpZS5zYXNwYXJhbXNbMF0uRFNJRCksITA7bGV0IGdlPSJTdWJtaXQgcmVxdWVzdCBmYWlsZWQiO2llJiYoZ2UrPWBcbiR7InN0cmluZyI9PXR5cGVvZiBpZT9pZTpKU09OLnN0cmluZ2lmeShpZSl9YCksZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0'@;
put 'TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixnZSxudWxsLCJTdWJtaXQgZXJyb3IiKX0pLmNhdGNoKGllPT57Y29uc29sZS5sb2coImVyciIsaWUpLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMCxkLnN1Ym1pdD0hMTtsZXQgZ2U9InN0cmluZyI9PXR5cGVvZiBpZT9p'@;
put 'ZTpKU09OLnN0cmluZ2lmeShpZSk7cmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIsYFN1Ym1pdCByZXF1ZXN0IGZhaWxlZFxuJHtnZX1gLG51bGwsIlN1Ym1pdCBlcnJvciIpLCExfSkpcmV0dXJufX1jLmNudD49MT8oZC5wa051bGw9ITAs'@;
put 'ZC5zdWJtaXQ9ITApOmQuc3VibWl0PSExLGMubm9uUGtDbnQ+PTE/KGQubm9Qa051bGw9ITAsZC5zdWJtaXQ9ITApOmQuc3VibWl0PSExLGQuY2FuY2VsU3VibWl0KCksYy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwfSkoKX12YWxpZGF0b3JSdWxlU291cmNlKGEpe3Jl'@;
put 'dHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpfWNoZWNrSW52YWxpZCgpe3JldHVybiB0aGlzLmhvdEluc3RhbmNlQ29tcExpc3QuZmlyc3QuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmh0SW52YWxpZCIpLmxlbmd0aD4wfWdvVG9FZGl0b3IoKXt0'@;
put 'aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvIil9Y2xvc2VSZWNvcmRFZGl0KGEpe3RoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXZvaWQgMCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPXZvaWQgMCwiQUREIj09PXRoaXMucmVj'@;
put 'b3JkQWN0aW9uJiYhYSYmKHRoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMucHJldkRhdGFTb3VyY2UpLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSkpfWNvbmZpcm1SZWNvcmRFZGl0KGE9ITAp'@;
put 'e2NvbnN0IGQ9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4O2EmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEpLHRoaXMuY29sdW1uSGVhZGVyLm1hcChmPT57Y29uc3QgXz10aGlzLmN1cnJlbnRFZGl0UmVjb3JkW2ZdLFQ9Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFy'@;
put 'c1tmXT8udHlwZSxXPSgwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKF8pO1QmJiFpc05hTihfKSYmIVcmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkW2ZdPTEqXyl9KSx0aGlzLmRhdGFTb3VyY2VbZF09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhvdFRhYmxlLmRhdGFbZF09dGhpcy5jdXJy'@;
put 'ZW50RWRpdFJlY29yZCx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXZvaWQgMCl9b25OZXh0UmVjb3JkKCl7dGhpcy5jb25maXJtUmVjb3JkRWRpdCghMSksdGhpcy5jdXJyZW50RWRp'@;
put 'dFJlY29yZEluZGV4PXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD49dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KzEsdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KX1vblByZXZpb3VzUmVjb3Jk'@;
put 'KCl7dGhpcy5jb25maXJtUmVjb3JkRWRpdCghMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleDw9MD90aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE6dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LTEsdGhpcy5lZGl0UmVjb3JkKG51bGws'@;
put 'dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KX1hZGRSZWNvcmRCdXR0b25DbGljaygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiQWRkIFJlY29yZCIpOnRoaXMuYWRkRWRpdE5ld1JlY29yZCgpfWFk'@;
put 'ZEVkaXROZXdSZWNvcmQoKXt0aGlzLmFkZFJlY29yZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITApfSwxZTMpfWFkZFJlY29yZCgpe3RoaXMuYWRkUm93KCl9ZWRpdFJlY29yZChhLGQsaCl7aWYodGhpcy5yZXN0cmlj'@;
put 'dGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKXRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiRWRpdCBSZWNvcmQiKTtlbHNlIGlmKCEodm9pZCAwPT09ZHx8ZDwwfHx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpKXtpZih0aGlzLnJlY29yZEFjdGlvbj1o'@;
put 'PyJBREQiOiJFRElUIix0aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmVkaXRUYWJsZSghMSxoKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kY1ZhbGlkYXRvciksaCl0aGlzLnByZXZEYXRhU291cmNlPXRoaXMu'@;
put 'aGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSx0aGlzLnByZXZEYXRhU291cmNlLnBvcCgpO2Vsc2V7Y29uc3QgZj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGFBdFJvdyhkKSk7Zm9yKGxldCBfIG9mIGYpaWYo'@;
put 'Xyl7Y29uc3QgVD1fLnByb3A/LnRvU3RyaW5nKCk7ZGVsZXRlIF8ucHJvcCxkZWxldGUgXy5kYXRhLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoXy5jb2wsey4uLl8sZGF0YTpUfSl9fXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD1kLHRoaXMuY3VycmVu'@;
put 'dEVkaXRSZWNvcmQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZF0pfX10b2dnbGVIb3RQbHVnaW4oYSxkKXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aC5iYXRjaCgoKT0+e2xldCBmPWguZ2V0UGx1Z2luKGEpO2Y/KHNldFRpbWVvdXQoKCk9PntkP2Yu'@;
put 'ZW5hYmxlUGx1Z2luKCk6Zi5kaXNhYmxlUGx1Z2luKCl9LDEwMCksaC5yZW5kZXIoKSk6Y29uc29sZS53YXJuKCJUb2dnbGUgSG90IFBsdWdpbiBmYWlsZWQgLSBQbHVnaW4gbmFtZWQ6ICIrYSsiIC0gY291bGQgbm90IGJlIGZvdW5kLiIpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJs'@;
put 'ZWQoYSxkKXtyZXR1cm4hIXRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKGY9PmYucm93PT09YSYmZi5jb2w9PT1kJiYhZi5hY3RpdmUpfWR5bmFtaWNDZWxsVmFsaWRhdGlvbihhLGQpe2lmKHRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQo'@;
put 'YSxkKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2lmKGguZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSlyZXR1cm47Y29uc3QgXz1oLmdldERhdGFBdENlbGwoYSxkKSxUPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2FdKSxXPU9iamVjdC5r'@;
put 'ZXlzKFQpW2RdLGllPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaChULFtXLCJub0xpbmtPcHRpb24iXSwhMSksZ2U9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgod2U9PndlLmhhc2g9PT1pZSk7aWYoZ2U+LTEpe2xldCB3ZT10aGlzLmNlbGxWYWxpZGF0'@;
put 'aW9uU291cmNlW2dlXS52YWx1ZXMubWFwKG90PT5vdFt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2NvbnN0IEVlPShoLmdldENlbGxNZXRhKGEsZCkuc291cmNlfHxbXSkubGVuZ3RoPDEsWmU9IiAiIT09XztoLmJhdGNoKCgpPT57Y29uc3Qgb3Q9aC5nZXRDZWxsTWV0'@;
put 'YShhLGQpLGV0PXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUob3QuZGF0YXx8IiIpO2xldCB5dDtldCYmKHl0PXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoZXQpKSx5dHx8KHl0PVtdKSwibnVtZXJpYyI9PT1ldD8udHlwZT8oeXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNv'@;
put 'bnZlcnRBcnJheVZhbHVlcyh5dCwibnVtYmVyIiksd2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh3ZSwibnVtYmVyIikpOih5dD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHl0LCJzdHJpbmciKSx3ZT10aGlzLmhlbHBlclNlcnZpY2UuY29u'@;
put 'dmVydEFycmF5VmFsdWVzKHdlLCJzdHJpbmciKSk7Y29uc3Qga3Q9Wy4uLm5ldyBTZXQoWy4uLnl0LC4uLndlXSldO2lmKGguc2V0Q2VsbE1ldGEoYSxkLCJzb3VyY2UiLGt0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3NvdXJjZTprdH0pLHRoaXMu'@;
put 'Y2VsbFZhbGlkYXRpb25Tb3VyY2VbZ2VdLnZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgU3Q9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtnZV0uc3RyaWN0O2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJlZGl0b3IiLCJhdXRv'@;
put 'Y29tcGxldGUiKSxoLnNldENlbGxNZXRhKGEsZCwic3RyaWN0IixTdCksaC5zZXRDZWxsTWV0YShhLGQsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUi'@;
put 'LHN0cmljdDpTdCxmaWx0ZXI6ITF9KX10aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyh0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2dlXSxhLEVlJiZaZSksaC5yZW5kZXIoKX0pfWlmKGdlPDApe2NvbnN0IHdlPXtTQVNDb250cm9sVGFibGU6W3tsaWJkczp0aGlzLmxp'@;
put 'YmRzLHZhcmlhYmxlX25tOld9XSxzb3VyY2Vfcm93OltUXX0sRWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKFcpLmZpbmQoWmU9PiJTT0ZUU0VMRUNUX0hPT0siPT09WmUuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVF9IT09LIj09PVplLlJVTEVfVFlQRSk7RWUmJih0aGlzLmNlbGxW'@;
put 'YWxpZGF0aW9uU291cmNlLnB1c2goe3JvdzphLGNvbDpkLHN0cmljdDoiSEFSRFNFTEVDVF9IT09LIj09PUVlLlJVTEVfVFlQRSx2YWx1ZXM6W10saGFzaDppZSxjb3VudDp0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aCsxfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixL'@;
put 'TmUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5wdXNoKGQpLGgucmVuZGVyKCksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0ZHluYW1pY2NvbHZhbHMiLHdlLHZvaWQgMCx7c3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDohMCxzdXBwcmVzc0Vycm9yQWJvcnRN'@;
put 'b2RhbDohMH0pLnRoZW4oWmU9PntpZihaZS5keW5hbWljX3ZhbHVlcy5tYXAoZXQ9PmV0W3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSkubGVuZ3RoPjApe2NvbnN0IGV0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KHl0PT55dC5oYXNoPT09aWUpO2V0'@;
put 'Pi0xJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtldF09ey4uLnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbZXRdLHJvdzphLGNvbDpkLHZhbHVlczpaZS5keW5hbWljX3ZhbHVlcyxleHRlbmRlZF92YWx1ZXM6WmUuZHluYW1pY19leHRlbmRlZF92YWx1ZXN9KSxoLnNldENlbGxNZXRh'@;
put 'KGEsZCwicmVuZGVyZXIiLEd6KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSxoLmJhdGNoKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMu'@;
put 'cmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyghMCxhKSxoLnJlbmRlcigpLGgudmFsaWRhdGVSb3dzKFthXSl9LDEwMCl9KX1pZihoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLEd6KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNv'@;
put 'cmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aD50aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0KXtjb25zdCBldD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnJlZHVjZSgoa3QsU3QpPT5r'@;
put 'dC5jb3VudDxTdC5jb3VudD9rdDpTdCkseXQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5pbmRleE9mKGV0KTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZSh5dCwxKX19KS5jYXRjaChaZT0+e2NvbnN0IG90PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KGV0'@;
put 'PT5ldC5oYXNoPT09aWUpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKG90LDEpLGguYmF0Y2goKCk9PntoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLHFOZSksaC5yZW5kZXIoKX0pLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50'@;
put 'RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5wdXNoKGQpLHNldFRpbWVvdXQoKCk9PntoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLEd6KSxoLnJlbmRlcigpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuc3BsaWNl'@;
put 'KHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuaW5kZXhPZihkKSwxKX0sM2UzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCJnZXRkeW5hbWljY29sdmFscyBlcnJvcjoiLFplKX0pKX19Y2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIo'@;
put 'KXt0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHR5cGVvZiB0aGlzLmZpbHRlcl9wazwidSImJjE9PT10aGlzLmhvdFRhYmxlLmRhdGEubGVuZ3RoJiZbbnVsbCwiIl0uaW5jbHVkZXModGhpcy5ob3RUYWJsZS5kYXRhWzBdW3RoaXMuaGVhZGVyUGtzWzBdXSkmJih0aGlzLnplcm9GaWx0ZXJSb3dz'@;
put 'PSEwKX1vblJlY29yZElucHV0Rm9jdXMoYSl7dGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24odGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LGEuY29sTmFtZSl9ZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShhLGQsaCl7Y29uc3QgZj10aGlzLmhlbHBlclNlcnZp'@;
put 'Y2UuZGVsZXRlS2V5c0FuZEhhc2godGhpcy5kYXRhU291cmNlW2hdLFthLCJub0xpbmtPcHRpb24iXSksXz10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmQoVD0+VC5oYXNoPT09ZiYmZD09PVQuY29sKTtpZihfJiZfLmV4dGVuZGVkX3ZhbHVlcyYmXy5leHRlbmRlZF92YWx1ZXMubGVu'@;
put 'Z3RoPjApe2NvbnN0IFQ9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKF8saCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoXyxoLFQsITApfX12aWV3Ym94TWFuYWdlcigpe3RoaXMudmlld2JveGVzPSEwfWdldCB0b3RhbFJvd3NDaGFuZ2VkKCl7cmV0dXJuIHRoaXMu'@;
put 'cm93c0NoYW5nZWQucm93c1VwZGF0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZH1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmli'@;
put 'ZShoPT57YS5ob3RUYWJsZS5saWNlbnNlS2V5PWh9KSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoaD0+e2gubGliZHM9PT1hLmxpYmRzJiYoYS53aGVyZVN0cmluZz1oLnN0cmluZyxhLmNsYXVzZXM9aC5vYmopfSk7bGV0IGQ9e307dHlwZW9mIGEucm91dGUu'@;
put 'c25hcHNob3QucGFyYW1zLmxpYk1lbTwidSImJihhLmxpYmRzPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxhLmZpbHRlcl9waz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCwiZWRpdC1yZWNvcmQiPT09YS5yb3V0ZS5zbmFwc2hvdC51cmxbMF0ucGF0aCYmKGEucmVj'@;
put 'b3JkQWN0aW9uPXR5cGVvZiBhLmZpbHRlcl9wazwidSI/IkVESVQiOiJBREQiKSxkLkxJQkRTPWEubGliZHMsdHlwZW9mIGEuZmlsdGVyX3BrPCJ1IiYmKGQuRklMVEVSX1JLPXBhcnNlSW50KGEuZmlsdGVyX3BrKSksZC5PVVRERVNUPSJXRUIiLGEubGliZHMmJihHbi5lZGl0b3IubGlicmFy'@;
put 'eT1hLmxpYmRzLnNwbGl0KCIuIilbMF0sR24uZWRpdG9yLnRhYmxlPWEubGliZHMuc3BsaXQoIi4iKVsxXSkpLGEubGliZHMmJihhLmdldGRhdGFFcnJvcj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5jYWxsU2VydmljZShkLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEi'@;
put 'LGEubGliZHMpLnRoZW4oaD0+e2EuaW5pdFNldHVwKGgpfSkuY2F0Y2goaD0+e2EuZ2V0ZGF0YUVycm9yPSEwLGEudGFibGVUcnVlPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0luaXQoKXt9aW5pdFNldHVwKGEpe2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3Rh'@;
put 'bmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuZ2V0ZGF0YUVycm9yfHwhYXx8IWEuZGF0YSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPWEuZGF0YS5kc21ldGE7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlLGg9YS5kYXRhLmFwcHJvdmVyczt0aGlzLmNvbHMmJih0aGlz'@;
put 'LmhlYWRlckFycmF5PShjPT57Y29uc3QgbD1bXTtmb3IobGV0IGEgb2YgYykiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEuTkFNRSYmbC5wdXNoKGEuTkFNRSk7cmV0dXJuIGx9KSh0aGlzLmNvbHMpKSxoLmZvckVhY2goXz0+e3RoaXMuYXBwcm92ZXJzLnB1c2goXy5QRVJT'@;
put 'T05OQU1FKX0pLHRoaXMudGFibGVUcnVlPSEwLHRoaXMubGliZHM9YS5saWJkcyx0aGlzLmhvdFRhYmxlLmRhdGE9YS5kYXRhLnNhc2RhdGEsdGhpcy5oZWFkZXJDb2x1bW5zPWEuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuaGVhZGVyUGtzPWEuZGF0YS5z'@;
put 'YXNwYXJhbXNbMF0uUEsuc3BsaXQoIiAiKSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSEhYS5kYXRhLnNhc3BhcmFtc1swXS5DTFNfRkxBRyx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnJiZ0aGlzLnNldFJlc3RyaWN0aW9ucyh7cmVzdHJpY3RBZGRSb3c6ITAscmVtb3ZlRWRp'@;
put 'dFJlY29yZEJ1dHRvbjohMCxyZW1vdmVBZGRSZWNvcmRCdXR0b246ITB9KSx0aGlzLmNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCksLTEhPT10aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJih0aGlzLmhlYWRlckNvbHVtbnNbdGhp'@;
put 'cy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLHRoaXMuaGVhZGVyQXJyYXk9dGhpcy5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJih0aGlzLmRhdGVIZWFkZXJz'@;
put 'PWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJih0aGlzLnRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYm'@;
put 'KHRoaXMuZGF0ZVRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksYS5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYodGhpcy54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnhsX3J1bGVzKSksdGhpcy5kY1ZhbGlkYXRv'@;
put 'cj1uZXcgWk5lKGEuZGF0YS5zYXNwYXJhbXNbMF0sYS5kYXRhLiRzYXNkYXRhLHRoaXMuY29scyxhLmRhdGEuZHFydWxlcyxhLmRhdGEuZHFkYXRhKSx0aGlzLmNlbGxWYWxpZGF0aW9uPXRoaXMuZGNWYWxpZGF0b3IuZ2V0UnVsZXMoKSx0aGlzLmRhdGFTb3VyY2U9YS5kYXRhLnNhc2RhdGEs'@;
put 'dGhpcy4kZGF0YUZvcm1hdHM9YS5kYXRhLiRzYXNkYXRhO2ZvcihsZXQgXz0wO188dGhpcy5oZWFkZXJDb2x1bW5zLmxlbmd0aDtfKyspdGhpcy5ob3REYXRhU2NoZW1hW3RoaXMuY2VsbFZhbGlkYXRpb25bX10uZGF0YV09WU5lKHRoaXMuY2VsbFZhbGlkYXRpb25bX10udHlwZSx0aGlzLmNl'@;
put 'bGxWYWxpZGF0aW9uW19dKTt0aGlzLmNoZWNrUm93TGltaXQoKSxkLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24saGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGZv'@;
put 'cm11bGFzOnRoaXMuaG90VGFibGUuZm9ybXVsYXMsc3RyZXRjaEg6ImFsbCIscmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxoaWRkZW5Db2x1bW5zOntpbmRpY2F0b3JzOiEwLGNvbHVtbnM6dGhpcy5kY1ZhbGlkYXRvci5nZXRIaWRkZW5Db2x1bW5zKCl9LG1vZGlmeUNvbFdpZHRo'@;
put 'OmZ1bmN0aW9uKF8sVCl7cmV0dXJuIDA9PT1UPzYwOl8+NTAwPzUwMDpffSxjb3B5UGFzdGU6dGhpcy5ob3RUYWJsZS5jb3B5UGFzdGUsbWFudWFsQ29sdW1uRnJlZXplOiExLG11bHRpQ29sdW1uU29ydGluZzohMCxtYW51YWxDb2x1bW5SZXNpemU6ITAsZmlsdGVyczohMSxtYW51YWxSb3dS'@;
put 'ZXNpemU6ITAsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6NTAscm93SGVhZGVyczpfPT4iICIscm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyNCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR8fDEvMCxpbnZhbGlkQ2VsbENsYXNzTmFt'@;
put 'ZToiaHRJbnZhbGlkIixkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooXyxULFcs'@;
put 'aWUsZ2Usd2UpPT57Y29uc3QgRWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBaZSxvdD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgZXQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSx5dD1ldD9ldFswXVsxXTotMSxrdD10'@;
put 'aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoeXQpO1plPXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2t0XSxaZSYmKG90PWBMQUJFTDogJHtaZT8ubGFiZWx9PGJyPlRZUEU6ICR7WmU/LnR5cGV9PGJyPkxFTkdUSDogJHtaZT8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7WmU/LmZvcm1hdH1gKX1y'@;
put 'ZXR1cm4gRWUuaW5uZXJIVE1MPW90LEVlfX19fSxkYXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihfLFQpPT57'@;
put 'Y29uc3QgVz10aGlzLmNvbHVtbkhlYWRlcltfXSxpZT1XJiZ0aGlzLmlzQ29sUGsoVyksZ2U9VyYmdGhpcy5pc1JlYWRvbmx5Q29sKFcpO2llJiZULmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLGdlJiYhaWUmJlQuY2xhc3NMaXN0LmFkZCgicmVhZG9ubHlDZWxsIiks'@;
put 'MD09PV8mJlQuY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpfSxhZnRlckdldENlbGxNZXRhOihfLFQsVyk9PntUJiZ0aGlzLmlzUmVhZG9ubHlDb2woVCkmJihXLmNsYXNzTmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhp'@;
put 'cy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0i'@;
put 'RGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05UO2xldCBmPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO2YmJmYuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfPT57dGhpcy51cGxvYWRQcmV2aWV3fHx0aGlzLmhv'@;
put 'dENsaWNrZWQoKSxzZXRUaW1lb3V0KCgpPT57bGV0IFQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtUJiZULmNsaWNrKCl9LDEwMCl9KSxkLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoXyxULFcsaWUsZ2Usd2UpPT57Xz09PVcmJlQ9PT1p'@;
put 'ZSYmITE9PT10aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbihfLFQpfSksZC5hZGRIb29rKCJiZWZvcmVLZXlEb3duIixfPT57Y29uc3QgVD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCksVz1UJiZUWzBdO2lmKFcpe2NvbnN0IGllPVdbMF0s'@;
put 'd2U9V1sxXTtpZihpZT09PVdbMl0mJndlPT09V1szXSl7Y29uc3QgWmU9dGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YShpZSx3ZSk7WmUmJiExPT09WmUuZmlsdGVyJiZ0aGlzLmhvdEluc3RhbmNlLnNldENlbGxNZXRhKGllLHdlLCJmaWx0ZXIiLCEwKX19fSksZC5hZGRIb29rKCJhZnRl'@;
put 'ckNoYW5nZSIsKF8sVCk9PntpZigiZWRpdCI9PT1UKXtjb25zdCBXPXRoaXMuaG90SW5zdGFuY2UsaWU9X1swXVswXSxnZT1fWzBdWzFdLHdlPVcucHJvcFRvQ29sKGdlKSxFZT1XLmdldENlbGxNZXRhKGllLHdlKTtFZSYmITE9PT1FZS5maWx0ZXImJlcuc2V0Q2VsbE1ldGEoaWUsd2UsImZp'@;
put 'bHRlciIsITApLHRoaXMuZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShnZSx3ZSxpZSl9fSksZC5hZGRIb29rKCJhZnRlclJlbmRlciIsXz0+e3RoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSksZC5hZGRIb29rKCJhZnRlckNyZWF0ZVJv'@;
put 'dyIsKF8sVCk9PntpZihfPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2xldCBXPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53dEhvbGRlciIpO3NldFRpbWVvdXQoKCk9PntXJiYoVy5zY3JvbGxUb3A9Vy5zY3JvbGxIZWlnaHQpfSl9fSksZC5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsKF8sVCk9'@;
put 'Pntjb25zdCBXPVRbMF0uc3RhcnRDb2w7X1swXT1fWzBdLm1hcCgoaWUsZ2UpPT57Y29uc3Qgd2U9dGhpcy5jb2x1bW5IZWFkZXJbVytnZV0sRWU9Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1t3ZV0/LnR5cGUsWmU9KDAsdDMuaXNTcGVjaWFsTWlzc2luZykoaWUpO3JldHVybiBF'@;
put 'ZSYmIWlzTmFOKGllKSYmIVplJiYoaWUqPTEpLGllfSl9KSxkLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksZC5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLHRoaXMudXBsb2FkVXJsPSJzZXJ2'@;
put 'aWNlcy9lZGl0b3JzL2xvYWRmaWxlIixudWxsIT09dGhpcy5yZWNvcmRBY3Rpb24mJigiQUREIj09PXRoaXMucmVjb3JkQWN0aW9uPyh0aGlzLmFkZFJlY29yZCgpLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCkpOjE9PT10aGlzLmRhdGFTb3VyY2Uu'@;
put 'bGVuZ3RoJiZ0aGlzLmVkaXRSZWNvcmQobnVsbCwwKSksYS5kYXRhLnF1ZXJ5Lmxlbmd0aD4wJiYoImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbSkmJjA9PT1Hbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXMubGVuZ3RoJiYoR24uZWRpdG9yLmZpbHRlci5xdWVy'@;
put 'eT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEuZGF0YS5xdWVyeSksR24uZWRpdG9yLmZpbHRlci5saWJkcz10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZSgiZWRpdG9yIix0aGlz'@;
put 'LmNvbHMpKSxkLnJlbmRlcigpfX1yZXR1cm4gYy5jbnQ9MCxjLm5vblBrQ250PTAsYy5sYXN0Q2VsbD0wLGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQzApLHR0KHZsKSx0dCh3MCksdHQoYmQpLHR0KEFjKSx0dChEcyksdHQoV2wpLHR0KG9hKSx0dChVYSks'@;
put 'dHQoQWcpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWVkaXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhkVWUsNyksUm8oaFVlLDUpLFJvKGZVZSw1KSxSbyhwVWUsNSksUm8oZ1VlLDUpKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkm'@;
put 'JihkLmh0PWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLnVwbG9hZFN0YXRlckNvbXBMaXN0PWgpLHNpKGg9YWkoKSkmJihkLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9aCksc2koaD1haSgpKSYmKGQuaG90SW5zdGFuY2VDb21wTGlzdD1oKSxzaShoPWFpKCkpJiYoZC5maWxlVXBsb2FkSW5wdXRDb21w'@;
put 'TGlzdD1oKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxNzcsdmFyczo3Myxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJyZWxhdGl2ZSIsMywidXBsb2FkZXIiLCJjbHJN'@;
put 'b2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiIsImZpbGVPdmVyIiwiZmlsZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxb'@;
put 'MSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC1hdXRvIl0sWzEsImVuY29kaW5nLWJsb2NrIl0sWyJjbHJJbmxpbmUiLCIiLDEsIm10LTAtaSJdLFsidHlw'@;
put 'ZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIlVURi04IiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiV0xBVElOMSIsIm5hbWUiLCJlbmNvZGluZyIs'@;
put 'MywibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZmlsdGVyQnRuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBlZGl0QnRuIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1h'@;
put 'cnkgbXItMCIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4Y2VsLXBhcnNpbmcgY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJtb2Rh'@;
put 'bC1mb290ZXIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3Mi'@;
put 'LCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLDQsIm5nSWYiXSxbMSwiY2xyLWZsZXgt'@;
put 'MSJdLFsiaHQiLCIiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJib3JkZXItMCIsImJveC1zaGFkb3ctbm9uZS1pIiwicG9zaXRpb24tcmVsYXRpdmUiLCJoLTEwMCIsImQtZmxleCIsImNsci1m'@;
put 'bGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsxLCJjYXJkLWhlYWRlciIsImNsci1yb3ciLCJidXR0b25CYXIiLCJoZWFkZXJCYXIiLCJjbHItZmxleC1tZC1yb3ciLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1qdXN0'@;
put 'aWZ5LWNvbnRlbnQtbGctZW5kIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1sZy00IGJhY2tCdG4iLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImVkaXRv'@;
put 'ci10aXRsZSB0ZXh0LWNlbnRlciBtdC0wLWkiLDQsIm5nVmFyIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1sZy00IGJ0bkN0cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJjbHItZmxl'@;
put 'eC0xIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5nSWYiXSxbMSwiY2FyZC10ZXh0IiwiaG90RWRpdG9yIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50Il0sWzEs'@;
put 'ImhvdC13cmFwcGVyIiwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLDEsImVkaXQtaG90IiwzLCJsaWNlbnNlS2V5Il0sWyJob3RJbnN0YW5jZSIsIiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwi'@;
put 'bmdJZiJdLFsiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibS0wIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0'@;
put 'biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJkdXBsaWNhdGUta2V5cy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWyJjbGFzcyIsImQtYmxvY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwi'@;
put 'bW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwi'@;
put 'Y29sb3ItZGFya2VyLWdyYXkiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4t'@;
put 'c20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVu'@;
put 'Q2hhbmdlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImRhdGEtbHBpZ25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBs'@;
put 'ZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiXSxbImZpbGVQYXNzd29yZElucHV0IiwiIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0'@;
put 'b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMywib3BlbiIsImRzbWV0YSIsIm9wZW5DaGFuZ2UiXSxbMywidmlld2JveE1vZGFsIiwidmlld2JveE1vZGFsQ2hhbmdlIl0sWzEsImNsci1jb2wtbWQtMyIsImZpbHRlckJ0'@;
put 'biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsImFwcEZpbGVTZWxl'@;
put 'Y3QiLCIiLDMsInVwbG9hZGVyIiwiY2hhbmdlIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZWRpdEJ0biJdLFsxLCJidG5WaWV3IiwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCIsMywiZGlzYWJsZWQiLCJj'@;
put 'bGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImV4Y2VsLXBhcnNpbmciLCJjbHItY29sLW1kLTEy'@;
put 'Il0sWyJ1cGxvYWRTdGF0ZXIiLCIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVj'@;
put 'b3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiXSxbMSwicHJvZ3Jl'@;
put 'c1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00IiwiYmFja0J0biJdLFsxLCJidG4iLCJidG4tc20iLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsImJ0biIsImJ0bi1zbSIs'@;
put 'InZpZXdib3gtb3BlbiIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyIsInNpemUiLCIyMCJdLFsxLCJlZGl0b3ItdGl0bGUiLCJ0ZXh0LWNlbnRlciIsIm10LTAtaSJdLFsic2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBv'@;
put 'aW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyIsNCwibmdJZiJdLFsxLCJtci0xMCIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCIsImJ0bkN0'@;
put 'cmwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0blZpZXciLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi1ibG9jayIsMywi'@;
put 'Y2xpY2siXSxbInNoYXBlIiwibm90ZSJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2VzcyBidG4tYmxvY2sgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJs'@;
put 'b2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwidHlw'@;
put 'ZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsic2hhcGUiLCJwbHVzIiwic2l6ZSIsIjE2Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbInNoYXBlIiwi'@;
put 'Y2hlY2siLCJzaXplIiwiMjAiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsi'@;
put 'dHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByZXZpZXctc3VibWl0IiwzLCJjbHJMb2FkaW5n'@;
put 'IiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJjYXJkLXRleHQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlm'@;
put 'eS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLDEsImVycm9yLWljb24iXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNt'@;
put 'IiwiYnRuLXN1Y2Nlc3MiLCJtdC01LWkiLDMsImNsaWNrIl0sWyJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2Vu'@;
put 'dGVyIl0sWzEsIm1vZGFsIl0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciLCJtb2RhbC1sZyJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwi'@;
put 'Y2xvc2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbImNsYXNzIiwiZC1ibG9jayB3LTEwMCB0ZXh0LWNlbnRlciBjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLW9mZnNldC1tZC0yIGNsci1jb2wtbWQtOCIsNCwibmdJZiJdLFsxLCJtb2RhbC1m'@;
put 'b290ZXIiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyLWkiXSxbImlkIiwic3VibWl0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsIm0tMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiaWQiLCJjYW5jZWxTdWJtaXRCdG4iLCJ0eXBl'@;
put 'IiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiZC1ibG9jayIsInctMTAwIiwidGV4dC1jZW50ZXIiLCJjb2xvci1yZWQiXSxbMSwiY2xyLW9mZnNldC1tZC0yIiwiY2xyLWNvbC1tZC04Il0sWzEsImZvcm0tZ3JvdXAiXSxbImZvciIsImZv'@;
put 'cm1GaWVsZHNfOCJdLFsidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsInJvd3MiLCI1IiwxLCJ3LTEwMCIsMywibmdNb2RlbCIsImRpc2FibGVkIiwidmFsdWUiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImQtYmxvY2siXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJv'@;
put 'bGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwibS0wIiwiY29sb3ItcmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPVZuKCk7bWUoMCwiZGl2IiwwKSgxLCJjbHItbW9kYWwi'@;
put 'LDEpLHh0KCJmaWxlT3ZlciIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZmlsZU92ZXJCYXNlKF8pfSkoImZpbGVEcm9wIixmdW5jdGlvbihfKXtyZXR1cm4gZC5nZXRGaWxlRGVzYyhfLCEwKX0pKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnNob3dVcGxvYWRNb2Rh'@;
put 'bD1ffSksbWUoMiwiaDMiLDIpLE5lKDMsIlVwbG9hZCBGaWxlIikseWUoKSxtZSg0LCJkaXYiLDMpKDUsImRpdiIsNCkoNiwic3BhbiIpLE5lKDcsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIikseWUoKSgpLG1lKDgsImRpdiIsNSkoOSwiZGl2Iiw2KSgxMCwiZGl2Iiw3KSgxMSwi'@;
put 'ZGl2Iiw4KSgxMiwiY2xyLXJhZGlvLWNvbnRhaW5lciIsOSkoMTMsImNsci1yYWRpby13cmFwcGVyIikoMTQsImlucHV0IiwxMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmVuY29kaW5nPV99KSx5ZSgpLG1lKDE1LCJsYWJlbCIpLE5lKDE2LCJVVEYtOCIpLHll'@;
put 'KCkoKSxtZSgxNywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxOCwiaW5wdXQiLDExKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZW5jb2Rpbmc9X30pLHllKCksbWUoMTksImxhYmVsIiksTmUoMjAsIldMQVRJTjEiKSx5ZSgpKCkoKSgpKCksUWUoMjEsbVVlLDYsMSwi'@;
put 'ZGl2IiwxMiksUWUoMjIsdlVlLDMsMSwiZGl2IiwxMyksbWUoMjMsImRpdiIsNyksUWUoMjQsX1VlLDIsMSwiYnV0dG9uIiwxNCksUWUoMjUsYlVlLDIsMCwiYnV0dG9uIiwxNSkseWUoKSxRZSgyNix5VWUsMywwLCJkaXYiLDE2KSx5ZSgpKCkoKSxxdCgyNywiZGl2IiwxNykseWUoKSxRZSgy'@;
put 'OCx3VWUsMSwxMiwiYXBwLWVkaXQtcmVjb3JkIiwxOCksbWUoMjksImRpdiIsMTksMjApLFFlKDMxLENVZSwyLDAsImRpdiIsMjEpLG1lKDMyLCJkaXYiLDIyKSx4dCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uU2hvd1VwbG9hZE1vZGFsKCl9KSxtZSgzMywiZGl2'@;
put 'IiwyMyksUWUoMzQsTVVlLDcsMiwiZGl2IiwyNCksbWUoMzUsImRpdiIsMjUpLFFlKDM2LFRVZSw3LDUsImg0IiwyNikseWUoKSxRZSgzNyxIVWUsNCwzLCJkaXYiLDI3KSxRZSgzOCxOVWUsNSwxLCJkaXYiLDI4KSx5ZSgpLG1lKDM5LCJkaXYiLDI5KSxRZSg0MCxqVWUsNCwyLCJkaXYiLDMw'@;
put 'KSxtZSg0MSwiZGl2IiwzMSkoNDIsImRpdiIsMzIpLHF0KDQzLCJob3QtdGFibGUiLDMzLDM0KSx5ZSgpLG1lKDQ1LCJkaXYiKSxRZSg0NixaVWUsNSwyLCJjbHItdG9vbHRpcCIsMzUpLFFlKDQ3LFlVZSwzLDEsInAiLDM2KSx5ZSgpLFFlKDQ4LCRVZSwxNiw2LCJkaXYiLDM3KSxtZSg0OSwi'@;
put 'Y2xyLW1vZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuc3VibWl0TGltaXROb3RpY2U9X30pLG1lKDUwLCJoMyIsMiksTmUoNTEsIk5vdGljZSIpLHllKCksbWUoNTIsImRpdiIsMykoNTMsInAiLDM5KSxOZSg1NCkseWUoKSgpLG1lKDU1LCJk'@;
put 'aXYiLDE3KSg1NiwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnN1Ym1pdExpbWl0Tm90aWNlPSExfSksTmUoNTcsIiBDYW5jZWwgIikseWUoKSxtZSg1OCwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmdldEZpbGUoKSxkLnN1'@;
put 'Ym1pdExpbWl0Tm90aWNlPSExfSksTmUoNTksIiBTdWJtaXQgIikseWUoKSgpKCksbWUoNjAsImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmJhZEVkaXQ9X30pLG1lKDYxLCJoMyIsMiksTmUoNjIpLHllKCksbWUoNjMsImRpdiIs'@;
put 'MykoNjQsInAiKSxOZSg2NSkseWUoKSgpLG1lKDY2LCJkaXYiLDE3KSg2NywiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmJhZEVkaXQ9ITF9KSxOZSg2OCwiIE9rICIpLHllKCkoKSgpLG1lKDY5LCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hh'@;
put 'bmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5wa051bGw9X30pLG1lKDcwLCJoMyIsMiksTmUoNzEsIkVycm9yIikseWUoKSxtZSg3MiwiZGl2IiwzKSg3MywicCIpLE5lKDc0LCIgTnVsbCB2YWx1ZXMgb3IgaW5jb3JyZWN0IGRhdGEgdHlwZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJp'@;
put 'bWFyeSBLZXkgY29sdW1ucyAiKSx5ZSgpKCksbWUoNzUsImRpdiIsMTcpKDc2LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGtOdWxsPSExLGQuYmFkRWRpdD0hMX0pLE5lKDc3LCIgT2sgIikseWUoKSgpKCksbWUoNzgsImNsci1tb2RhbCIsMzgpLHh0KCJj'@;
put 'bHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLm5vUGtOdWxsPV99KSxtZSg3OSwiaDMiLDIpLE5lKDgwLCJFcnJvciIpLHllKCksbWUoODEsImRpdiIsMykoODIsInAiKSxOZSg4MywiSW5jb3JyZWN0IGRhdGEgdHlwZXMgaW4gbm9uLVByaW1hcnkgS2V5IGNvbHVtbnMi'@;
put 'KSx5ZSgpKCksbWUoODQsImRpdiIsMTcpKDg1LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubm9Qa051bGw9ITEsZC5iYWRFZGl0PSExfSksTmUoODYsIiBPayAiKSx5ZSgpKCkoKSxtZSg4NywiY2xyLW1vZGFsIiw0MikseHQoImNsck1vZGFsT3BlbkNoYW5n'@;
put 'ZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQucGtEdXBzPV99KSxtZSg4OCwiaDMiLDIpLE5lKDg5LCJFcnJvciIpLHllKCksbWUoOTAsImRpdiIsMykoOTEsInAiKSxOZSg5MiwiIER1cGxpY2F0ZSB2YWx1ZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSx5'@;
put 'ZSgpLG1lKDkzLCJwIiksTmUoOTQsIkR1cGxpY2F0ZXMgZm91bmQ6IikseWUoKSxRZSg5NSxxVWUsMyw0LCJzcGFuIiw0MykseWUoKSxtZSg5NiwiZGl2IiwxNykoOTcsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wa0R1cHM9ITF9KSxOZSg5OCwiIE9rICIp'@;
put 'LHllKCkoKSgpLG1lKDk5LCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC50b29Mb25nPV99KSxtZSgxMDAsImgzIiwyKSxOZSgxMDEsIkVycm9yIikseWUoKSxtZSgxMDIsImRpdiIsMykoMTAzLCJwIiksTmUoMTA0LCIgVGhlIGZv'@;
put 'bGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBsaW1pdHM6ICIpLHllKCksUWUoMTA1LEtVZSwyLDMsInAiLDQ0KSx5ZSgpLG1lKDEwNiwiZGl2IiwxNykoMTA3LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQudG9vTG9uZz0h'@;
put 'MSxkLmNsZWFuRXhjZWVkKCl9KSxOZSgxMDgsIiBPayAiKSx5ZSgpKCkoKSgpKCkoKSgpKCksUWUoMTA5LFhVZSwxNCwwLCJkaXYiLDQ1KSxtZSgxMTAsImNsci1tb2RhbCIsNDYpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmZpbHRlcj1ffSksbWUoMTEx'@;
put 'LCJoMyIsNDcpLE5lKDExMiwiIEZpbHRlciBmb3IgdGFibGU6ICIpLG1lKDExMywic3BhbiIpLE5lKDExNCkseWUoKSgpLG1lKDExNSwiZGl2IiwzKSxRZSgxMTYsSlVlLDIsMCwiYXBwLXF1ZXJ5IiwzNSkseWUoKSxtZSgxMTcsImRpdiIsMTcpKDExOCwiYnV0dG9uIiw0OCkseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBkLnJlc2V0RmlsdGVyKCl9KSxOZSgxMTksIiByZXNldCBmaWx0ZXIgIikseWUoKSxtZSgxMjAsImJ1dHRvbiIsNDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5maWx0ZXI9ITF9KSxOZSgxMjEsIiBDYW5jZWwgIikseWUoKSxtZSgxMjIsImJ1'@;
put 'dHRvbiIsNTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZW5kQ2xhdXNlKCl9KSxOZSgxMjMsIiBPayAiKSx5ZSgpKCkoKSxtZSgxMjQsImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnF1ZXJ5RXJyPV99KSxtZSgx'@;
put 'MjUsImgzIiwyKSxOZSgxMjYsIkVycm9yIikseWUoKSxtZSgxMjcsImRpdiIsMykoMTI4LCJwIiksTmUoMTI5KSx5ZSgpKCksbWUoMTMwLCJkaXYiLDE3KSgxMzEsImJ1dHRvbiIsNTEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVyeUVycj0hMX0pLE5lKDEzMiwiIENhbmNl'@;
put 'bCAiKSx5ZSgpLG1lKDEzMywiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnF1ZXJ5RXJyPSExfSksTmUoMTM0LCIgT2sgIikseWUoKSgpKCksbWUoMTM1LCJjbHItbW9kYWwiLDUyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4g'@;
put 'ZC5kaXNjYXJkU291cmNlRmlsZT1ffSksbWUoMTM2LCJoMyIsNDcpLE5lKDEzNywiV2FybmluZyIpLHllKCksbWUoMTM4LCJkaXYiLDMpLE5lKDEzOSwiIFRoaXMgYWN0aW9uIHdpbGwgZGlzY2FyZCB0aGUgc291cmNlIGZpbGUgYW5kIGl0J3MgbG9hZGVkIGRhdGEgIiksbWUoMTQwLCJiIiks'@;
put 'TmUoMTQxKSx5ZSgpLE5lKDE0MiwiIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLHllKCksbWUoMTQzLCJkaXYiLDE3KSgxNDQsImJ1dHRvbiIsNDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kaXNjYXJkU291cmNlRmlsZT0hMX0pLE5lKDE0NSwiIENhbmNlbCAiKSx5ZSgp'@;
put 'LG1lKDE0NiwiYnV0dG9uIiw1MykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmRpc2NhcmRTb3VyY2VGaWxlPSExLGQuZGlzY2FyZFBlbmRpbmdFeGNlbCghMCl9KSxOZSgxNDcsIiBPayAiKSx5ZSgpKCkoKSxtZSgxNDgsImNsci1tb2RhbCIsNTIpLHh0KCJjbHJNb2RhbE9wZW5D'@;
put 'aGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmZpbGVQYXNzd29yZE1vZGFsPV99KSxtZSgxNDksImgzIiw0NyksTmUoMTUwLCIgUGFzc3dvcmQgUHJvdGVjdGVkIEZpbGUgIikseWUoKSxtZSgxNTEsImRpdiIsNTQpKDE1MiwicCIsMzkpLE5lKDE1MywiUGxlYXNlIGVudGVyIHBhc3N3b3Jk'@;
put 'OiIpLHllKCkscXQoMTU0LCJpbnB1dCIsNTUsNTYpLHllKCksbWUoMTU2LCJkaXYiLDE3KSxRZSgxNTcsUVVlLDIsMCwicCIsNTcpLG1lKDE1OCwiYnV0dG9uIiw0OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmZpbGVQYXNzd29yZE1vZGFsPSExLGQuZmlsZVBhc3N3b3JkU3Vi'@;
put 'amVjdC5uZXh0KHZvaWQgMCl9KSxOZSgxNTksIiBDYW5jZWwgdXBsb2FkICIpLHllKCksbWUoMTYwLCJidXR0b24iLDU4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoaCk7Y29uc3QgXz0kaSgxNTUpO3JldHVybiBkLmZpbGVQYXNzd29yZE1vZGFsPSExLGp0KGQuZmlsZVBhc3N3b3JkU3Vi'@;
put 'amVjdC5uZXh0KF8udmFsdWUpKX0pLE5lKDE2MSwiIFVubG9jayAiKSx5ZSgpKCkoKSxtZSgxNjIsImNsci1tb2RhbCIsNTIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLm1hbnVhbEZpbGVFZGl0TW9kYWw9X30pLG1lKDE2MywiaDMiLDQ3KSxOZSgxNjQs'@;
put 'Ildhcm5pbmciKSx5ZSgpLG1lKDE2NSwiZGl2IiwzKSxOZSgxNjYsIiBNYW51YWxseSBlZGl0aW5nIHRoaXMgZGF0YSB3aWxsIG1lYW4gdGhlIHNvdXJjZSBmaWxlICIpLG1lKDE2NywiYiIpLE5lKDE2OCkseWUoKSxOZSgxNjksIiB3aWxsIGJlIGRpc2NhcmRlZC4gRG8geW91IHdpc2ggdG8g'@;
put 'cHJvY2VlZD8gIikseWUoKSxtZSgxNzAsImRpdiIsMTcpKDE3MSwiYnV0dG9uIiw0OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITF9KSxOZSgxNzIsIiBDYW5jZWwgIikseWUoKSxtZSgxNzMsImJ1dHRvbiIsNTMpLHh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gZC5tYW51YWxGaWxlRWRpdE1vZGFsPSExLGQucHJldmlld1RhYmxlRWRpdENvbmZpcm0oKX0pLE5lKDE3NCwiIE9rICIpLHllKCkoKSgpLG1lKDE3NSwiYXBwLWRhdGFzZXQtaW5mbyIsNTkpLHh0KCJvcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5kYXRh'@;
put 'c2V0SW5mbz1ffSkseWUoKSxtZSgxNzYsImFwcC12aWV3Ym94ZXMiLDYwKSx4dCgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC52aWV3Ym94ZXM9X30pLHllKCl9aWYoMiZhKXtjb25zdCBoPSRpKDE1NSk7Q2UoMSksUmUoInVwbG9hZGVyIixkLnVwbG9hZGVyKSgi'@;
put 'Y2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwiVmFsaWRhdGluZy1EUSI9PT1kLmV4Y2VsVXBsb2FkU3RhdGUpKCJjbHJNb2RhbE9wZW4iLGQuc2hvd1VwbG9hZE1vZGFsKSxDZSgxMyksUmUoIm5nTW9kZWwiLGQuZW5j'@;
put 'b2RpbmcpKCJkaXNhYmxlZCIsIiIhPWQuZmlsZW5hbWUpLENlKDQpLFJlKCJuZ01vZGVsIixkLmVuY29kaW5nKSgiZGlzYWJsZWQiLCIiIT1kLmZpbGVuYW1lKSxDZSgzKSxSZSgibmdJZiIsIWQuZXhjZWxGaWxlUGFyc2luZyYmIWQudXBsb2FkTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFk'@;
put 'LmV4Y2VsRmlsZVBhcnNpbmcmJiFkLnVwbG9hZExvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIiwiVmFsaWRhdGluZyIhPT1kLmV4Y2VsVXBsb2FkU3RhdGUpLENlKDEpLFJlKCJuZ0lmIiwiVmFsaWRhdGluZy1EUSI9PT1kLmV4Y2VsVXBsb2FkU3RhdGUpLENlKDEpLFJlKCJuZ0lmIixkLmV4Y2Vs'@;
put 'RmlsZVBhcnNpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+LTEpLENlKDMpLFJlKCJuZ0lmIiwhZC52YWxpZGF0aW9uRG9uZSYmZC5zdWJtaXQpLENlKDMpLFJlKCJuZ0lmIixkLnRhYmxlVHJ1ZSksQ2UoMSksZHIoImNsci1jb2wtbGctMTIiLCFkLnRhYmxl'@;
put 'VHJ1ZSksQ2UoMSksUmUoIm5nVmFyIixRMig2NixlWmUsbnVsbD09ZC5saWJkcz9udWxsOmQubGliZHMuc3BsaXQoIi4iKVswXSxudWxsPT1kLmxpYmRzP251bGw6ZC5saWJkcy5zcGxpdCgiLiIpWzFdKSksQ2UoMSksUmUoIm5nSWYiLGQudGFibGVUcnVlKSxDZSgxKSxSZSgibmdJZiIsISRz'@;
put 'KDY5LElzZSkuaW5jbHVkZXMoZC5xdWVyeVRleHQpKSxDZSgxKSxSZSgibmdDbGFzcyIsSjIoNzEsdFplLCEkcyg3MCxJc2UpLmluY2x1ZGVzKGQucXVlcnlUZXh0KSkpLENlKDEpLFJlKCJuZ0lmIiwhZC50YWJsZVRydWUpLENlKDMpLGRyKCJoaWRkZW4iLGQuaG90VGFibGUuaGlkZGVuKSxS'@;
put 'ZSgibGljZW5zZUtleSIsZC5ob3RUYWJsZS5saWNlbnNlS2V5KSxDZSgzKSxSZSgibmdJZiIsZC50YWJsZVRydWUmJiFkLnJlc3RyaWN0aW9ucy5yZW1vdmVBZGRSZWNvcmRCdXR0b24pLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09'@;
put 'ZC5JbmZpbml0eSYmZC5kYXRhU291cmNlJiZkLmRhdGFTb3VyY2UubGVuZ3RoPmQubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpLENlKDEpLFJlKCJuZ0lmIixkLnN1Ym1pdCksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5zdWJtaXRMaW1pdE5vdGljZSksQ2UoNSks'@;
put 'Z3IoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9s'@;
put 'bGVyLmlvICIpLENlKDYpLFJlKCJjbHJNb2RhbE9wZW4iLGQuYmFkRWRpdCksQ2UoMiksb3IoZC5iYWRFZGl0VGl0bGV8fCJFcnJvciIpLENlKDMpLG9yKGQuYmFkRWRpdENhdXNlKSxDZSg0KSxSZSgiY2xyTW9kYWxPcGVuIixkLnBrTnVsbCksQ2UoOSksUmUoImNsck1vZGFsT3BlbiIsZC5u'@;
put 'b1BrTnVsbCksQ2UoOSksUmUoImNsck1vZGFsT3BlbiIsZC5wa0R1cHMpLENlKDgpLFJlKCJuZ0Zvck9mIixkLmR1cGxpY2F0ZVBrSW5kZXhlcyksQ2UoNCksUmUoImNsck1vZGFsT3BlbiIsZC50b29Mb25nKSxDZSg2KSxSZSgibmdGb3JPZiIsZC5leGNlZWRDZWxscyksQ2UoNCksUmUoIm5n'@;
put 'SWYiLGQubnVsbFZhcmlhYmxlcyksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5maWx0ZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNCksZ3IoIiAiLGQubGliZHMsIiAiKSxDZSgyKSxSZSgibmdJZiIsZC5maWx0ZXIpLENlKDYpLFJlKCJjbHJM'@;
put 'b2FkaW5nIixkLnN1Ym1pdExvYWRpbmcpLENlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGQucXVlcnlFcnIpLENlKDUpLG9yKGQucXVlcnlFcnJNZXNzYWdlKSxDZSg2KSxSZSgiY2xyTW9kYWxPcGVuIixkLmRpc2NhcmRTb3VyY2VGaWxlKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxD'@;
put 'bG9zYWJsZSIsITEpLENlKDYpLG9yKGQuZmlsZW5hbWUpLENlKDcpLFJlKCJjbHJNb2RhbE9wZW4iLGQuZmlsZVBhc3N3b3JkTW9kYWwpKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoOSksUmUoIm5nSWYiLGQuZmlsZVVubG9ja0Vycm9yKSxDZSgzKSxS'@;
put 'ZSgiZGlzYWJsZWQiLGgudmFsdWUubGVuZ3RoPDEpLENlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGQubWFudWFsRmlsZUVkaXRNb2RhbCkoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg2KSxvcihkLmZpbGVuYW1lKSxDZSg3KSxSZSgib3BlbiIsZC5kYXRh'@;
put 'c2V0SW5mbykoImRzbWV0YSIsZC5kc21ldGEpLENlKDEpLFJlKCJ2aWV3Ym94TW9kYWwiLGQudmlld2JveGVzKX19LGRlcGVuZGVuY2llczpbeHNlLHVjLHhzLFppLFdhLGxFLEJzLE9zLEJ1LGthLG91LHN1LFp1LGMyLGRoLFVzLFhGLHR3ZSxLRixqYixVYix6Yix4eSxVNyxZYixFc2Usa3Nl'@;
put 'LEFzZSxqRSxjVSxhVWUsY1VlLHVVZSxEc2VdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7Ym9yZGVyOjB9LmJ1dHRvbkJhcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMTBweDthbGlnbi1pdGVtczpjZW50ZXJ9LnRlc3RSZWRbX25nY29u'@;
put 'dGVudC0lQ09NUCVde2NvbG9yOiNmZmY7YmFja2dyb3VuZDpyZ2JhKDI1NSwwLDAsLjgpIWltcG9ydGFudH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9aG90LXRhYmxlW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSwgaG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJT'@;
put 'dHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjY5MDE5NjA3ODQpfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC40MzEzNzI1NDkpfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAgIHRoLnJlYWRvbmx5Q2VsbCBkaXZ7b3BhY2l0eTouNH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0ZC5yZWFkb25seUNlbGx7b3BhY2l0eTouNX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxNHB4O2JhY2tncm91bmQ6IzQ5NTk2Nztjb2xvcjoj'@;
put 'ZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2ZvbnQtc2l6ZToxNnB4O2hlaWdodDozMHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXt3aWR0aDo4MCV9LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWx9LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6dW5zZXR9LnBrSGVhZGVy'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiM2ODc2ODI7Y29sb3I6I2ZmZjttYXJnaW46LTFweH0uaGVhZGVyQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojZmZmZmZmO2JhY2tncm91bmQ6I2Y1ZjZmZX0uZXJyb3ItaWNvbltfbmdj'@;
put 'b250ZW50LSVDT01QJV17d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtjb2xvcjpyZWR9LmJ0bkN0cmxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBz'@;
put 'b2xpZCB0cmFuc3BhcmVudH0uaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OmhpZGRlbn0ubXktZHJvcC16b25lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMXB4IGxpZ2h0Z3JheTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp3aGl0ZXNtb2tlO2Jv'@;
put 'eC1zaGFkb3c6aW5zZXQgMCAwIDRweCAycHggI2E3YTVhNTJiO2hlaWdodDo1MHZofS5udi1maWxlLW92ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjpzb2xpZCAycHggZ3JlZW59LmZpbGUtZHJvcC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn1AbWVkaWEg'@;
put 'c2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnByb2dyZXNTdGF0aWNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6OXB4IWltcG9ydGFudH0ucHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jlc3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDpjYWxj'@;
put 'KDEwMCUgLSAxNHB4KX19LmhvdEVkaXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmV4Y2VsLXBhcnNpbmdbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0'@;
put 'aXZlfS5leGNlbC1wYXJzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTQ1cHh9LmVkaXQtcmVjb3JkLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5'@;
put 'LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjYpO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3dpZHRoOjEwMCU7ei1pbmRleDo1MDB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpey5wcm9n'@;
put 'cmVzU3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjMycHghaW1wb3J0YW50fS5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNhcmQtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMCAwfX0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtwYWRkaW5nOjAgLjhyZW0gLjhyZW0haW1wb3J0YW50O3BhZGRpbmctdG9wOjB9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MXB4O2JvcmRlcjoycHggZGFz'@;
put 'aGVkICNmZmY7ei1pbmRleDotMX0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4O21hcmdpbi10b3A6MjBweDtjb2xvcjojZmZmfSNzdWJtaXRCdG5bX25nY29udGVudC0lQ09NUCVdLCAjY2FuY2VsU3VibWl0QnRu'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNTBweH0iXX0pLGN9KSgpO2NvbnN0IG5aZT1be3BhdGg6IjpsaWJNZW0iLGNvbXBvbmVudDpKQX0se3BhdGg6IjpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6SkF9LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtIixjb21wb25lbnQ6SkF9'@;
put 'LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OkpBfV07bGV0IHJaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1p'@;
put 'KHtpbXBvcnRzOltvbyxkYy5mb3JDaGlsZChuWmUpLGRjXX0pLGN9KSgpLFFBPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLF91'@;
put 'LG9vLCRsLEMyXX0pLGN9KSgpLGlaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'YXBwLWhvbWUtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCk7Y29uc3Qgb1plPVsic2lkZWJhck5h'@;
put 'diJdO2Z1bmN0aW9uIHNaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImEiLDE4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLm5hdmlnYXRlVG9WaWV3ZXIoKSl9KSxOZSgxLCJEYXRhIikseWUoKX19ZnVuY3Rpb24gYVplKGMsbCl7MSZjJiYo'@;
put 'bWUoMCwiYSIsMTkpLE5lKDEsIkFQSSBFeHBsb3JlciIpLHllKCkpfWZ1bmN0aW9uIGxaZShjLGwpezEmYyYmKG1lKDAsImEiLDIwKSxOZSgxLCJMaW5lYWdlIikseWUoKSl9ZnVuY3Rpb24gY1plKGMsbCl7MSZjJiYobWUoMCwiYSIsMjEpLE5lKDEsIk1ldGFkYXRhIikseWUoKSl9ZnVuY3Rp'@;
put 'b24gdVplKGMsbCl7MSZjJiYobWUoMCwiYSIsMjIpLE5lKDEsIiBVc2VycyIpLHllKCkpfWZ1bmN0aW9uIGRaZShjLGwpezEmYyYmKG1lKDAsImEiLDIzKSxOZSgxLCJTdWJtaXR0ZWQiKSx5ZSgpKX1mdW5jdGlvbiBoWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyNCksTmUoMSwiVG8gQXBwcm92'@;
put 'ZSIpLHllKCkpfWZ1bmN0aW9uIGZaZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kcm9wZG93bi1tZW51IiksUWUoMSxzWmUsMiwwLCJhIiwxMSksUWUoMixhWmUsMiwwLCJhIiwxMiksUWUoMyxsWmUsMiwwLCJhIiwxMyksUWUoNCxjWmUsMiwwLCJhIiwxNCksUWUoNSx1WmUsMiwwLCJhIiwx'@;
put 'NSksUWUoNixkWmUsMiwwLCJhIiwxNiksUWUoNyxoWmUsMiwwLCJhIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVNWSVlBIj09PWEuc2Vy'@;
put 'dmVyVHlwZSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2'@;
put 'aWV3IikpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpfX1mdW5jdGlvbiBwWmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDcpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsOCks'@;
put 'TmUoMykscXQoNCwiY2xyLWljb24iLDkpLHllKCksUWUoNSxmWmUsOCw3LCJjbHItZHJvcGRvd24tbWVudSIsMTApLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksZ3IoIiAiLGEuZ2V0U3ViUGFnZSgpLCIgIil9fWZ1bmN0aW9uIGdaZShjLGwpezEmYyYmcXQoMCwiY2xyLXRhYi1j'@;
put 'b250ZW50Iil9ZnVuY3Rpb24gbVplKGMsbCl7MSZjJiZxdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1jb25zdCB2WmU9ZnVuY3Rpb24oKXtyZXR1cm5bIi92aWV3L3VzZXJuYXYvcm9sZXMiXX07ZnVuY3Rpb24gX1plKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsMjYp'@;
put 'KDIsInAiLDI3KSxxdCgzLCJjbHItaWNvbiIsMzIpLE5lKDQsIiBSb2xlcyAiKSx5ZSgpKCksUWUoNSxtWmUsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoInJvdXRlckxpbmsiLCRzKDIsdlplKSksQ2UoNCksUmUoImNscklmQWN0'@;
put 'aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L3JvbGVzIikpfX1jb25zdCBiWmU9ZnVuY3Rpb24oKXtyZXR1cm5bIi92aWV3L3VzZXJuYXYvdXNlcnMiXX0seVplPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldy91c2VybmF2L2dyb3VwcyJdfTtmdW5jdGlvbiB3WmUoYyxsKXtpZigx'@;
put 'JmMmJihtZSgwLCJjbHItdGFicyIsMjUpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDI2KSgzLCJwIiwyNykscXQoNCwiY2xyLWljb24iLDI4KSxOZSg1LCIgVXNlcnMiKSx5ZSgpKCkscXQoNiwiY2xyLXRhYi1jb250ZW50IikseWUoKSxtZSg3LCJjbHItdGFiIikoOCwiYnV0dG9uIiwyNiko'@;
put 'OSwicCIsMjcpLHF0KDEwLCJjbHItaWNvbiIsMjkpLE5lKDExLCIgR3JvdXBzIikseWUoKSgpLFFlKDEyLGdaZSwxLDAsImNsci10YWItY29udGVudCIsMzApLHllKCksUWUoMTMsX1plLDYsMywiY2xyLXRhYiIsMzEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJyb3V0ZXJM'@;
put 'aW5rIiwkcyg0LGJaZSkpLENlKDYpLFJlKCJyb3V0ZXJMaW5rIiwkcyg1LHlaZSkpLENlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9ncm91cHMiKSksQ2UoMSksUmUoIm5nSWYiLCJTQVM5Ij09PWEuc2VydmVyVHlwZSl9fWZ1bmN0aW9uIENaZShj'@;
put 'LGwpezEmYyYmKG1lKDAsImNsci1kcm9wZG93bi1tZW51IikoMSwiYSIsMzMpLE5lKDIsIlRhYmxlcyIpLHllKCksbWUoMywiYSIsMzQpLE5lKDQsIkZpbGVzIikseWUoKSgpKX1mdW5jdGlvbiBTWmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDcpKDEsImNsci1kcm9wZG93biIpKDIsImJ1'@;
put 'dHRvbiIsOCksTmUoMykscXQoNCwiY2xyLWljb24iLDkpLHllKCksUWUoNSxDWmUsNSwwLCJjbHItZHJvcGRvd24tbWVudSIsMTApLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksZ3IoIiAiLGEuZ2V0U3ViUGFnZSgpLCIgIil9fWNvbnN0IE1aZT1bIioiXTtsZXQgbjM9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcm91dGVyPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLl9zYXNTZXJ2aWNlPWgsdGhpcy5zY3JvbGxlZFRvQm90dG9tPW5ldyBFcix0aGlzLnNpZGViYXJPcGVuPSEwLHRoaXMuc2lkZWJhcldpZHRoPW51bGwsdGhpcy5zaWRlYmFy'@;
put 'TWF4V2lkdGg9bnVsbCx0aGlzLnJlc2l6aW5nPSExLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuc2FzanNDb25maWc9dGhpcy5fc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLl9zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUo'@;
put 'KX1uZ09uSW5pdCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2lkZWJhclRvZ2dsZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2lkZWJhck9wZW49YT9hLm9wZW46IXRoaXMuc2lkZWJhck9wZW4sdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KX1vblRyZWVTY3JvbGwoYSl7'@;
put 'bGV0IGQ9YS50YXJnZXQ7ZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLnNjcm9sbGVkVG9Cb3R0b20uZW1pdCgpfWlzTWFpblJvdXRlKGEpe3JldHVybiB0aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfWdldFN1YlBhZ2UoKXtyZXR1cm4gdGhp'@;
put 'cy5fcm91dGVyLnVybC5zcGxpdCgiLyIpWzJdfW5hdmlnYXRlVG9WaWV3ZXIoKXtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0iIix0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXJlc2l6ZVN0YXJ0KCl7dGhpcy5yZXNpemluZz0hMCxkb2N1bWVudC5nZXRFbGVt'@;
put 'ZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9InVzZXItc2VsZWN0OiBub25lIn1yZXNpemVFbmQoKXt0aGlzLnJlc2l6aW5nPSExLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0iIn1vbk1vdXNlTW92ZShhKXtpZih0'@;
put 'aGlzLnJlc2l6aW5nKXt0aGlzLnNpZGViYXJXaWR0aD1hLmNsaWVudFg7bGV0IGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibmF2LXRyZWUiKVswXTt0aGlzLnNpZGViYXJXaWR0aCYmdGhpcy5pc092ZXJmbG93bihkKSYmKHRoaXMuc2lkZWJhck1heFdpZHRoPXRoaXMuc2lk'@;
put 'ZWJhcldpZHRoPj0zNzU/dGhpcy5zaWRlYmFyV2lkdGgrMTA6dGhpcy5zaWRlYmFyTWF4V2lkdGgpfX1vbk1vdXNlVXAoYSl7dGhpcy5yZXNpemluZyYmdGhpcy5yZXNpemVFbmQoKX1pc092ZXJmbG93bihhKXtyZXR1cm4gYS5zY3JvbGxXaWR0aD5hLmNsaWVudFdpZHRofX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQodmwpLHR0KG9hKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zaWRlYmFyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8ob1plLDUpLDImYSl7bGV0IGg7'@;
put 'c2koaD1haSgpKSYmKGQuc2lkZWJhck5hdj1oLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoIm1vdXNlbW92ZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Nb3VzZU1vdmUoZil9LDAsZmYpKCJtb3VzZXVwIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1vdXNl'@;
put 'VXAoZil9LCExLGZmKX0sb3V0cHV0czp7c2Nyb2xsZWRUb0JvdHRvbToic2Nyb2xsZWRUb0JvdHRvbSJ9LG5nQ29udGVudFNlbGVjdG9yczpNWmUsZGVjbHM6OSx2YXJzOjEzLGNvbnN0czpbWyJpZCIsInNpZGViYXJOYXYiXSxbInNpZGViYXJOYXYiLCIiXSxbImNsYXNzIiwiZC1mbGV4IGp1'@;
put 'c3RpZnktY29udGVudC1jZW50ZXIgc3ViLWRyb3Bkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInAtMTAiLDQsIm5nSWYiXSxbMSwibmF2LWRpdmlkZXIiXSxbMSwibmF2LXRyZWUiLDMsInNjcm9sbCJdLFsxLCJyZXNpemUtaGFuZGxlIiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVz'@;
put 'dGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJkcm9wZG93bi10b2dnbGUiLCJidG4iLCJidG4tbGluayJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwi'@;
put 'cm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2'@;
put 'TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJ'@;
put 'ZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJv'@;
put 'dXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwi'@;
put 'cm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxp'@;
put 'bmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVy'@;
put 'TGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGlu'@;
put 'ayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsxLCJwLTEwIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMsInJvdXRlckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbInNoYXBlIiwi'@;
put 'dXNlciJdLFsic2hhcGUiLCJ1c2VycyJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL3RhYmxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNs'@;
put 'clZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9maWxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLG1lKDAsImNsci12ZXJ0aWNhbC1uYXYiLDAsMSksUWUoMixwWmUsNiwxLCJkaXYiLDIpLFFl'@;
put 'KDMsd1plLDE0LDYsImNsci10YWJzIiwzKSxRZSg0LFNaZSw2LDEsImRpdiIsMikscXQoNSwiZGl2Iiw0KSxtZSg2LCJkaXYiLDUpLHh0KCJzY3JvbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uVHJlZVNjcm9sbChmKX0pLGtyKDcpLHllKCksbWUoOCwic3BhbiIsNikseHQoIm1vdXNlZG93'@;
put 'biIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNpemVTdGFydCgpfSkseWUoKSgpKSwyJmEmJihIdSgid2lkdGgiLGQuc2lkZWJhcldpZHRoLCJweCIpKCJtYXgtd2lkdGgiLGQuc2lkZWJhck1heFdpZHRoLCJweCIpLGRyKCJjbG9zZWQiLCFkLnNpZGViYXJPcGVuKSgicmVzaXppbmciLGQucmVz'@;
put 'aXppbmcpLENlKDIpLFJlKCJuZ0lmIixkLmlzTWFpblJvdXRlKCJ2aWV3IikpLENlKDEpLFJlKCJuZ0lmIixkLmlzTWFpblJvdXRlKCJ2aWV3L3VzZXJuYXYiKSksQ2UoMSksUmUoIm5nSWYiLGQuaXNNYWluUm91dGUoImhvbWUiKSksQ2UoNCksZHIoInJlc2l6aW5nIixkLnJlc2l6aW5nKSl9'@;
put 'LGRlcGVuZGVuY2llczpbWmksa2EsRTgsYzIsTHAsT3AsZGcsUnAsSXAsY2csWlEsWVEsTmYsYWcsbGcsQnUsR19dLHN0eWxlczpbImNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6Mzc1'@;
put 'cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYhaW1wb3J0YW50fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnN1bi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDoz'@;
put 'NnB4fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Y2xyLXZlcnRpY2FsLW5hdi5jbG9zZWRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0Oi0yNzJweH1jbHIt'@;
put 'dmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtjdXJzb3I6Y29sLXJlc2l6ZTtvcGFj'@;
put 'aXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2UtaW4tb3V0fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnJlc2l6ZS1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdOmhvdmVye29wYWNpdHk6LjV9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAu'@;
put 'cmVzaXplLWhhbmRsZS5yZXNpemluZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfWNsci12ZXJ0aWNhbC1uYXYucmVzaXppbmdbX25nY29udGVudC0lQ09NUCVde3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9Lm5hdi1kaXZpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDti'@;
put 'b3JkZXItdG9wOjFweCBzb2xpZCAjZDNkM2QzO21hcmdpbi1ib3R0b206MH0ucGFnZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7Zm9udC1zaXplOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lnplcm8tbWFyZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0udXNlci1u'@;
put 'YXYtYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgMnB4fSNzaWRlYmFyTmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjIwMH1AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpeyNzaWRlYmFyTmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206'@;
put 'MDt0b3A6MH19Il19KSxjfSkoKTtmdW5jdGlvbiB4WmUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gRVplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTty'@;
put 'ZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBrWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDkpLHh0KCJuZ01vZGVsQ2hhbmdl'@;
put 'IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJpZXNTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LHhaZSwxLDAsImNsci1pY29uIiwxMCksUWUoNSxFWmUsMSwwLCJj'@;
put 'bHItaWNvbiIsMTEpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24g'@;
put 'QVplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIFRaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKDIpLiRpbXBsaWNpdCxfPVZlKCk7'@;
put 'cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwidGFibGVzIikpfSkseWUoKX19ZnVuY3Rpb24gRFplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsMTgsMTkp'@;
put 'LHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuJGltcGxpY2l0LnNlYXJjaFN0cmluZz1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlT25GaWx0ZXIoaCwidGFi'@;
put 'bGVzIikpfSkseWUoKSxRZSg0LEFaZSwxLDAsImNsci1pY29uIiwxMCksUWUoNSxUWmUsMSwwLCJjbHItaWNvbiIsMTEpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgyKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJ'@;
put 'ZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBJWmUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyNil9ZnVuY3Rpb24gTFplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIFJaZShjLGwpezEmYyYm'@;
put 'KG1lKDAsInNwYW4iKSxOZSgxLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSx5ZSgpKX1mdW5jdGlvbiBPWmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksUWUoMSxSWmUsMiwwLCJzcGFuIiwy'@;
put 'OSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXI7Q2UoMSksUmUoIm5nSWYiLGEpfX1mdW5jdGlvbiBQWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLm5n'@;
put 'VmFyLF89VmUoKS4kaW1wbGljaXQsVD1WZSgyKS4kaW1wbGljaXQsVz1WZSgpO3JldHVybiBqdChmPyIiOlcub25UYWJsZUNsaWNrKF8sVCkpfSksQnIoMiwyMiksUWUoMyxJWmUsMSwwLCJjbHItaWNvbiIsMjMpLFFlKDQsTFplLDEsMCwiY2xyLWljb24iLDI0KSxVcigpLE5lKDUpLHllKCks'@;
put 'UWUoNixPWmUsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwyNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVZlKCkuJGltcGxpY2l0LGg9VmUoMikuJGltcGxpY2l0LGY9VmUoKTtDZSgxKSxkcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1hY3RpdmUiLGYubGliVGFi'@;
put 'QWN0aXZlKGguTElCUkFSWVJFRixkKSksQ2UoMSksUmUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITApLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCExKSxDZSgxKSxncigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlv'@;
put 'biBGWmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiksUWUoMSxQWmUsNyw4LCJjbHItdG9vbHRpcCIsMjApLHllKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9VmUoMyk7Q2UoMSksUmUoIm5nVmFyIixhKzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJh'@;
put 'cnlfbGltaXQpfX1mdW5jdGlvbiBIWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gXy50cmVlTm9kZUNsaWNrZWQoaCxmKSxq'@;
put 'dChfLmxpYj1mLkxJQlJBUllSRUYpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwxNikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQs'@;
put 'Zj1WZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllSRUYsanQoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSkscXQoMiwiY2xyLWljb24iLDE3KSxOZSgzKSx5ZSgpLFFlKDQsRFplLDYsMywiY2xyLXRyZWUtbm9kZSIsMCksUWUoNSxGWmUsMiwxLCJjbHItdHJlZS1ub2RlIiwx'@;
put 'KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtkcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksQ2UoMyksZ3IoIiAiLGEuTElCUkFSWVJFRiwi'@;
put 'ICIpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gTlplKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxIWmUsNiw3LCJjbHItdHJlZS1ub2RlIiwxNCksVXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJl'@;
put 'KCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBWWmUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSgyLCJzcGFuIiwzMiksTmUoMywiIExvYWRpbmcuLi4gIikseWUoKSgpKCkpfWZ1bmN0aW9uIEJaZShjLGwpezEmYyYmKG1lKDAsImgzIiwzNiksTmUoMSwiIFBsZWFz'@;
put 'ZSBzZWxlY3QgYSB0YWJsZSAiKSx5ZSgpKX1mdW5jdGlvbiBqWmUoYyxsKXsxJmMmJihtZSgwLCJoMyIsMzYpLE5lKDEsIiBObyBFZGl0YWJsZSBUYWJsZXMgQ29uZmlndXJlZCAiKSx5ZSgpKX1mdW5jdGlvbiB6WmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDMzKSxxdCgxLCJjbHItaWNv'@;
put 'biIsMzQpLFFlKDIsQlplLDIsMCwiaDMiLDM1KSxRZSgzLGpaZSwyLDAsImgzIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLENlKDEpLFJlKCJu'@;
put 'Z0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKTwxKX19bGV0IFVaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLnJvdXRlPWEsdGhpcy5yb3V0ZXI9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgs'@;
put 'dGhpcy5oZWxwZXJTZXJ2aWNlPWYsdGhpcy5ldmVudFNlcnZpY2U9Xyx0aGlzLnNhc1NlcnZpY2U9VCx0aGlzLnRyZWVOb2RlTGlicmFyaWVzPW51bGwsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5s'@;
put 'b2FkaW5nPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllJRCE9PWQuTElCUkFSWUlEJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxk'@;
put 'KXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeU9uQ2xpY2soYSxkKXtkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQuZXhwYW5kZWQmJiF0aGlzLnRhYmxlJiZ0aGlzLnNlbGVjdExpYnJhcnkoYSwh'@;
put 'MSxkKSx0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfXNlbGVjdExpYnJhcnkoYSxkLGgpe2gubG9hZGluZ1RhYmxlcz0hMDtsZXQgZixfPVtdO2lmKHRoaXMubGlic0FuZFRhYmxlcyYmKGY9dGhpcy5saWJzQW5kVGFibGVzW2FdLHRoaXMudGFibGU9dm9pZCAw'@;
put 'LCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YSkpe2xldCBUPWYuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybi0xPT09Xy5pbmRleE9mKFcpJiYoXy5wdXNoKFcpLCEwKX0pO3RoaXMudGFibGVzPVQsR24uZWRpdG9yLmxpYnJhcmllcz10aGlzLmxpYnJhcmllc31Hbi5lZGl0b3IubGlicmFy'@;
put 'eT1hLGR8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9ITB9c2VsZWN0VGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtoLmxpYlRhYj1oLmxpYisiLiIraC50YWJsZSxoLnNhc1NlcnZpY2UuZ2V0U2FzanND'@;
put 'b25maWcoKSxHbi5lZGl0b3IudGFibGU9YSxkfHxoLmNsZWFyR2xvYmFsc0ZpbHRlcigpfSkoKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtHbi5lZGl0b3IuZmlsdGVyLmxpYmRzPSIiLEduLmVkaXRvci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsR24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIi'@;
put 'LEduLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxHbi5lZGl0b3IuZmlsdGVyLnZhbHM9W10sR24uZWRpdG9yLmZpbHRlci5jb2xzPVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmE9PT10aGlzLmxpYiYmZD09PXRoaXMudGFibGV9dHJlZU9u'@;
put 'RmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy50cmVlTm9kZUxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWVJFRiIpLEduLmxp'@;
put 'bmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofW9uVGFibGVDbGljayhhLGQpe3RoaXMudGFibGU9YSx0aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy5zZWxlY3RUYWJsZShhKSx0aGlzLmVkaXRUYWJsZSgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGUubmF2aWdhdGVC'@;
put 'eVVybCgiL2VkaXRvci8iK3RoaXMubGliKyIuIit0aGlzLnRhYmxlKX1nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpe2lmKG51bGwhPT1Hbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMmJih0aGlzLnRyZWVOb2RlTGlicmFyaWVzPUduLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyksIiIhPT1Hbi5l'@;
put 'ZGl0b3IubGlicmFyeSl7dGhpcy5saWI9R24uZWRpdG9yLmxpYnJhcnk7bGV0IGE9bnVsbDt0aGlzLnRyZWVOb2RlTGlicmFyaWVzJiYoYT10aGlzLnRyZWVOb2RlTGlicmFyaWVzLmZpbmQoZD0+ZC5MSUJSQVJZUkVGPT09dGhpcy5saWIpKSx0aGlzLnNlbGVjdExpYnJhcnkoR24uZWRpdG9y'@;
put 'LmxpYnJhcnksITAsYSl9fWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVzPUduLmVkaXRvci5saWJzQW5kVGFibGVzLHRoaXMubGlicmFyaWVzPUduLmVkaXRvci5saWJyYXJpZXMsdGhpcy5nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpLHRoaXMubG9hZGluZz0hMX1uZ0FmdGVyQ29u'@;
put 'dGVudEluaXQoKXtHbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8YykodHQoRHMpLHR0KFdsKSx0dChDMCksdHQoQWMpLHR0KHZsKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJob21lLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OCx2YXJzOjQsY29u'@;
put 'c3RzOltbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkLWJsb2NrIl0sWyJjbGFzcyIsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxl'@;
put 'Y3RlZCIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIs'@;
put 'ImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwi'@;
put 'Y2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNo'@;
put 'YXBlIiwicmFjay1zZXJ2ZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFs0LCJuZ1ZhciJd'@;
put 'LFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20t'@;
put 'cmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFs0LCJuZ0lmIl0sWzEsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJs'@;
put 'b2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJd'@;
put 'LFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIpKDEsImNsci10cmVlIiksUWUoMixrWmUsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSxRZSgzLE5aZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkseWUoKSgp'@;
put 'LG1lKDQsImRpdiIsMikoNSwiZGl2IiwzKSxRZSg2LFZaZSw0LDAsImRpdiIsNCksUWUoNyx6WmUsNCwyLCJkaXYiLDUpLHllKCkoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLChudWxsPT1kLnRyZWVOb2RlTGlicmFyaWVzP251bGw6ZC50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLENl'@;
put 'KDEpLFJlKCJuZ0Zvck9mIixkLnRyZWVOb2RlTGlicmFyaWVzKSxDZSgzKSxSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W1dhLEJzLE9zLGRkLGcxLERwLGthLFp1LGMyLGYxLGpiLFViLHpiLG4zLHhzLFppLG5kLHRoLFU3'@;
put 'XSxzdHlsZXM6WyJjbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwYWRkaW5nOjB9Lm5vLXRhYmxlLXNlbGVjdGVkW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MTAwJX0gIGNsci1pY29uLmlzLWJsdWUsICAgY2xyLWljb24uaXMtaW5mb3tmaWxsOiM2YTkyMzV9LnNwaW5uZXItd3JhcHBlci1mdWxscGFnZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnkt'@;
put 'Y29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Il19KSxjfSkoKTtjb25zdCBaWmU9Yz0+e2Zvcihjb25zdCBsIGluIGMpaWYoIl9fcm93TnVtX18iIT09bClyZXR1cm4hMTtyZXR1cm4hMH0sZFU9Yz0+e2NvbnN0IGE9Yy5tYXRjaCgvUlxb'@;
put 'KFxkKylcXUNcWyhcZCspXF0vKTtyZXR1cm4gYT97cm93OnBhcnNlSW50KGFbMV0sMTApLGNvbHVtbjpwYXJzZUludChhWzJdLDEwKX06bnVsbH0sT3NlPShjLGwpPT57aWYoYy5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGM9Yy5yZXBsYWNlKCJBQlNPTFVURSAiLCIiKSksYy5zdGFydHNX'@;
put 'aXRoKCJSRUxBVElWRSAiKSl7Y29uc3QgYT1kVShjKTtpZihhKXtjb25zdHtyb3c6ZCxjb2x1bW46aH09YTtjPUdjLnV0aWxzLmVuY29kZV9jZWxsKHtyOmQtMSxjOmgtMX0pfX1pZihjLnN0YXJ0c1dpdGgoIk1BVENIICIpKXtsZXQgYT0iIjtjb25zdCBkPWMubWF0Y2goL0NcW1xkK1xdOigu'@;
put 'KykvKTtkJiYoYT1kWzFdKTtjb25zdCBmPWMuc3BsaXQoIiAiKVsxXTtsZXQgXz0iIixUPS0xLFc9IiI7aWYoaXNOYU4oTnVtYmVyKGYpKT9fPWY6VD1wYXJzZUludChmKSwtMSE9PVQpe2NvbnN0IHdlPWxbVC0xXTtmb3IoY29uc3QgRWUgaW4gd2UpaWYoIl9fcm93TnVtX18iIT09RWUmJndl'@;
put 'W0VlXT09PWEpe1c9RWUrVDticmVha319ZWxzZSBmb3IobGV0IHdlPTA7d2U8bC5sZW5ndGg7d2UrKylpZihsW3dlXVtfXT09PWEpe1c9Xysod2UrMSk7YnJlYWt9Y29uc3QgaWU9R2MudXRpbHMuZGVjb2RlX2NlbGwoVyksZ2U9ZFUoYyk7aWYoZ2Upe2NvbnN0e3Jvdzp3ZSxjb2x1bW46RWV9'@;
put 'PWdlO2M9R2MudXRpbHMuZW5jb2RlX2NlbGwoe3I6aWUucit3ZSxjOmllLmMrRWV9KX19cmV0dXJuIGN9LCRaZT1bImZpbGVVcGxvYWRJbnB1dCJdO2Z1bmN0aW9uIHFaZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMjgpLHF0KDEsImNsci1zcGlubmVyIiwyOSkseWUoKSl9ZnVuY3Rpb24gS1pl'@;
put 'KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uIFhaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwzMSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4gaC5zZWFyY2hTdHJpbmc9IiIsanQoaC54bG1h'@;
put 'cExpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIEpaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImNsci10cmVlLW5vZGUiKSgyLCJidXR0b24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZl'@;
put 'KCkueGxtYXBPbkNsaWNrKGYpKX0pLHF0KDMsImNsci1pY29uIiwzMyksTmUoNCkseWUoKSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtDZSgyKSxkcigidGFibGUtYWN0aXZlIixkLmlzQWN0aXZlWExNYXAoYS5pZCkpLENlKDIpLGdyKCIgIixhLmlkLCIgIil9'@;
put 'fWZ1bmN0aW9uIFFaZShjLGwpezEmYyYmKG1lKDAsImgzIiwzNyksTmUoMSwiIFBsZWFzZSBzZWxlY3QgYSBtYXAgIikseWUoKSl9ZnVuY3Rpb24gZVllKGMsbCl7MSZjJiYobWUoMCwiaDMiLDM3KSxOZSgxLCIgTm8gZXhjZWwgbWFwIGlzIGZvdW5kICIpLHllKCkpfWZ1bmN0aW9uIHRZZShj'@;
put 'LGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzQpLHF0KDEsImNsci1pY29uIiwzNSksUWUoMixRWmUsMiwwLCJoMyIsMzYpLFFlKDMsZVllLDIsMCwiaDMiLDM2KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lm'@;
put 'IixhLnhsbWFwcy5sZW5ndGg8MSl9fWZ1bmN0aW9uIG5ZZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzgpKDEsInNwYW4iLDM5KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLG1lKDMsImRpdiIpKDQsImg0IiksTmUoNSkseWUoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDUpLG9y'@;
put 'KGEuaXNMb2FkaW5nRGVzYyl9fWZ1bmN0aW9uIHJZZShjLGwpezEmYyYmcXQoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gaVllKGMsbCl7MSZjJiZxdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBvWWUoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIHNZZShjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNDApLHh0KCJmaWxlRHJhZ2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25TaG93VXBsb2FkTW9kYWwoKSl9KSxtZSgxLCJjbHItdGFicyIpKDIsImNsci10YWIiKSgzLCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnNlbGVjdGVkVGFiPWguVGFic0VudW0uUnVsZXMpfSksTmUoNCwiUnVsZXMiKSx5ZSgpLFFlKDUsclllLDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MikseWUoKSxtZSg2LCJjbHItdGFiIikoNywiYnV0dG9uIiw0MSkseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLkRhdGEpfSksTmUoOCwiRGF0YSIpLHllKCksUWUoOSxpWWUsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDQyKSx5ZSgpKCksUWUoMTAsb1llLDEsMCwibmctY29udGFp'@;
put 'bmVyIiw0MyksbWUoMTEsImRpdiIsNDQpKDEyLCJoMyIsNDUpLE5lKDEzKSx5ZSgpLG1lKDE0LCJpIiw0NSksTmUoMTUpLHllKCksbWUoMTYsImg1Iiw0NSksTmUoMTcsIiBSdWxlcyBTb3VyY2U6ICIpLG1lKDE4LCJhIiw0NiksTmUoMTkpLHllKCkoKSxtZSgyMCwiaDUiLDQ1KSxOZSgyMSwi'@;
put 'IFRhcmdldCBkYXRhc2V0OiAiKSxtZSgyMiwiYSIsNDYpLE5lKDIzKSx5ZSgpKCkoKSxtZSgyNCwiZGl2Iiw0NykscXQoMjUsImhvdC10YWJsZSIsNDgpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKSxkPSRpKDQxKTtDZSg1KSxSZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1h'@;
put 'LlRhYnNFbnVtLlJ1bGVzKSxDZSg0KSxSZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLkRhdGEpLENlKDEpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKSxDZSgzKSxncigiICIsYS5zZWxlY3RlZFhMTWFwLmlkLCIgIiksQ2UoMiksb3IoYS5zZWxlY3RlZFhMTWFw'@;
put 'LmRlc2NyaXB0aW9uKSxDZSgzKSxSZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnJ1bGVzU291cmNlKSxDZSgxKSxncigiICIsYS5ydWxlc1NvdXJjZSwiICIpLENlKDMpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2Euc2VsZWN0ZWRYTE1hcC50YXJnZXREUyksQ2UoMSks'@;
put 'Z3IoIiAiLGEuc2VsZWN0ZWRYTE1hcC50YXJnZXREUywiICIpLENlKDIpLFJlKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzOmEueGxEYXRh'@;
put 'KSgiY29sSGVhZGVycyIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzSGVhZGVyczphLnhsVXBsb2FkSGVhZGVyKSgiY29sdW1ucyIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzQ29sdW1uczphLnhsVXBsb2FkQ29sdW1u'@;
put 'cykoImZpbHRlcnMiLCEwKSgiaGVpZ2h0IiwiMTAwJSIpKCJtb2RpZnlDb2xXaWR0aCIsYS5tYXhXaWR0aENoZWNrZXIpKCJjZWxscyIsYS5nZXRDZWxsQ29uZmlndXJhdGlvbikoIm1heFJvd3MiLGEuaG90VGFibGVNYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoInJvd0hlYWRl'@;
put 'cnMiLGEucm93SGVhZGVycykoInJvd0hlYWRlcldpZHRoIiwxNSkoInJvd0hlaWdodHMiLDIwKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpfX1mdW5jdGlvbiBhWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSx4dCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSkscXQoMiwiY2xyLWljb24iLDUzKSxtZSgzLCJzcGFuIiksTmUoNCwiVXBsb2FkIikseWUoKSgpKCl9fWZ1bmN0aW9uIGxZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAs'@;
put 'ImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuc3VibWl0RXhjZWwoKSl9KSxxdCgyLCJjbHItaWNvbiIsNTMpLG1lKDMsInNwYW4iKSxOZSg0LCJTdWJtaXQiKSx5ZSgpKCkoKX19ZnVuY3Rpb24gY1llKGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1NCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5kaXNjYXJkRXh0cmFjdGVkRGF0YSgpKX0pLHF0KDIsImNsci1pY29uIiw1NSksbWUoMywic3BhbiIpLE5lKDQsIkRpc2NhcmQi'@;
put 'KSx5ZSgpKCkoKX19ZnVuY3Rpb24gdVllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0OSksUWUoMSxhWWUsNSwwLCJkaXYiLDUwKSxRZSgyLGxZZSw1LDAsImRpdiIsNTApLFFlKDMsY1llLDUsMCwiZGl2Iiw1MCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEu'@;
put 'c3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9VcGxvYWQpLENlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvU3VibWl0KSxDZSgxKSxSZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCl9fXZhciB5ZD1mdW5jdGlvbihj'@;
put 'KXtyZXR1cm4gY1tjLk5vTWFwU2VsZWN0ZWQ9MF09Ik5vTWFwU2VsZWN0ZWQiLGNbYy5GZXRjaGluZ1J1bGVzPTFdPSJGZXRjaGluZ1J1bGVzIixjW2MuUmVhZHlUb1VwbG9hZD0yXT0iUmVhZHlUb1VwbG9hZCIsY1tjLkV4dHJhY3RpbmdEYXRhPTNdPSJFeHRyYWN0aW5nRGF0YSIsY1tjLlJl'@;
put 'YWR5VG9TdWJtaXQ9NF09IlJlYWR5VG9TdWJtaXQiLGNbYy5TdWJtaXR0aW5nRXh0cmFjdGVkRGF0YT01XT0iU3VibWl0dGluZ0V4dHJhY3RlZERhdGEiLGNbYy5TdWJtaXR0aW5nPTZdPSJTdWJtaXR0aW5nIixjfSh5ZHx8e30pLFo3PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUnVsZXM9MF09'@;
put 'IlJ1bGVzIixjW2MuRGF0YT0xXT0iRGF0YSIsY30oWjd8fHt9KTtsZXQgUHNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRo'@;
put 'aXMucm91dGVyPV8sdGhpcy5zYXNTdG9yZVNlcnZpY2U9VCx0aGlzLnNhc1NlcnZpY2U9Vyx0aGlzLmNvbnRlbnRDb250YWluZXJDbGFzcz0hMCx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PW5ldyBlaCx0aGlzLlN0YXR1c0VudW09eWQsdGhpcy5UYWJzRW51bT1aNyx0aGlzLnNlbGVj'@;
put 'dGVkVGFiPVo3LlJ1bGVzLHRoaXMucnVsZXNTb3VyY2U9R24uZGNMaWIrIi5NUEVfWExNQVBfUlVMRVMiLHRoaXMueGxtYXBzPVtdLHRoaXMuc2VsZWN0ZWRYTE1hcD12b2lkIDAsdGhpcy5zZWFyY2hTdHJpbmc9IiIsdGhpcy54bG1hcHNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nPSExLHRo'@;
put 'aXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz15ZC5Ob01hcFNlbGVjdGVkLHRoaXMueGxtYXBSdWxlc0hlYWRlcnM9WyJYTE1BUF9TSEVFVCIsIlhMTUFQX1JBTkdFX0lEIiwiWExNQVBfU1RBUlQiLCJYTE1BUF9GSU5JU0giXSx0aGlzLnhsbWFwUnVsZXNDb2x1bW5zPVt7ZGF0YToi'@;
put 'WExNQVBfU0hFRVQifSx7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiWExNQVBfU1RBUlQifSx7ZGF0YToiWExNQVBfRklOSVNIIn1dLHRoaXMueGxtYXBSdWxlcz1bXSx0aGlzLnhsVXBsb2FkSGVhZGVyPVsiWExNQVBfUkFOR0VfSUQiLCJST1dfTk8iLCJDT0xfTk8iLCJWQUxVRV9U'@;
put 'WFQiXSx0aGlzLnhsVXBsb2FkQ29sdW1ucz1be2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlJPV19OTyJ9LHtkYXRhOiJDT0xfTk8ifSx7ZGF0YToiVkFMVUVfVFhUIn1dLHRoaXMueGxEYXRhPVtdLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zl'@;
put 'cj0hMSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy51cGxvYWRlcj1uZXcgUm9lLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGVMaWNlbnNlS2V5PXZvaWQgMCx0aGlzLmhvdFRhYmxl'@;
put 'TWF4Um93cz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzB9eGxtYXBPbkNsaWNrKGEpe2EuaWQhPT10aGlzLnNlbGVjdGVkWExNYXA/LmlkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWEsdGhpcy54bERhdGE9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnVw'@;
put 'bG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMuc2VsZWN0ZWRUYWI9WjcuUnVsZXMsdGhpcy52aWV3WExNYXBSdWxlcygpLHRoaXMu'@;
put 'cm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lL2ZpbGVzLyIrYS5pZCkpfXhsbWFwTGlzdE9uRmlsdGVyKCl7dGhpcy54bG1hcHM9dGhpcy5zZWFyY2hTdHJpbmcubGVuZ3RoPjA/R24ueGxtYXBzLmZpbHRlcihkPT5kLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hTdHJp'@;
put 'bmcudG9Mb3dlckNhc2UoKSkpOkduLnhsbWFwc31pc0FjdGl2ZVhMTWFwKGEpe3JldHVybiB0aGlzLnNlbGVjdGVkWExNYXA/LmlkPT09YX1tYXhXaWR0aENoZWNrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Q2VsbENvbmZpZ3VyYXRpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fXJv'@;
put 'd0hlYWRlcnMoKXtyZXR1cm4iICJ9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMH1maWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9Z2V0RmlsZURlc2MoYSxkPSExKXt2YXIgaD10aGlzO2NvbnN0IGY9ZD9hWzBdOmEudGFyZ2V0LmZp'@;
put 'bGVzWzBdO2lmKCFmKXJldHVybjtjb25zdCBfPWYubmFtZTtpZih0aGlzLmZpbGVuYW1lPV8sInhscyI9PT1fLnNsaWNlKF8ubGFzdEluZGV4T2YoIi4iKSsxLF8ubGFzdEluZGV4T2YoIi4iKSs0KS50b0xvd2VyQ2FzZSgpKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmlzTG9hZGlu'@;
put 'Zz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IkV4dHJhY3RpbmcgRGF0YSIsdGhpcy5zdGF0dXM9eWQuRXh0cmFjdGluZ0RhdGE7Y29uc3QgVz1uZXcgRmlsZVJlYWRlcjtXLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBpZT1maShmdW5jdGlvbiooZ2Upe2NvbnN0IHdlPShjPT57Y29uc3QgbD1uZXcg'@;
put 'VWludDhBcnJheShjKTtsZXQgYT0iIjtjb25zdCBkPWwuYnl0ZUxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKWErPVN0cmluZy5mcm9tQ2hhckNvZGUobFtoXSk7cmV0dXJuIGF9KShnZS50YXJnZXQucmVzdWx0KTtsZXQgRWU7Y29uc3QgWmU9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiEx'@;
put 'LGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7RWU9R2MucmVhZCh3ZSx7Li4uWmV9KX1jYXRjaChvdCl7aC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxvdCx2b2lkIDAsIkVycm9yIHJlYWRpbmcgZmlsZSIpfWlmKCFFZSly'@;
put 'ZXR1cm4gaC5pc0xvYWRpbmc9ITEsaC5pc0xvYWRpbmdEZXNjPSIiLGguc3RhdHVzPXlkLlJlYWR5VG9VcGxvYWQsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpO2guZXh0cmFjdERhdGEoRWUpfSk7cmV0dXJuIGZ1bmN0aW9uKGdlKXtyZXR1cm4gaWUuYXBwbHkodGhpcyxhcmd1bWVudHMp'@;
put 'fX0oKSxXLnJlYWRBc0FycmF5QnVmZmVyKGYpfWVsc2UgdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXlkLlJlYWR5VG9VcGxvYWQsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITAsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLmV2ZW50U2Vy'@;
put 'dmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBleGNlbCBmaWxlLicpfWRpc2NhcmRFeHRyYWN0ZWREYXRhKCl7dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRo'@;
put 'aXMuc3RhdHVzPXlkLlJlYWR5VG9VcGxvYWQsdGhpcy54bERhdGE9W10sdGhpcy5zZWxlY3RlZFRhYj1aNy5SdWxlcyx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0'@;
put 'Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnN1Ym1pdCgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9c3VibWl0KCl7aWYoIXRoaXMuc2VsZWN0'@;
put 'ZWRYTE1hcHx8IXRoaXMueGxEYXRhLmxlbmd0aClyZXR1cm47dGhpcy5zdGF0dXM9eWQuU3VibWl0dGluZyx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IlN1Ym1pdHRpbmcgZXh0cmFjdGVkIGRhdGEiO2NvbnN0IGE9W107Zm9yKGNvbnN0IFQgb2YgdGhpcy51cGxvYWRl'@;
put 'ci5xdWV1ZSlhLnB1c2goe2ZpbGU6VCxmaWxlTmFtZTpULm5hbWV9KTtjb25zdCBkPU9iamVjdC5rZXlzKHRoaXMueGxEYXRhWzBdKS5qb2luKCIsIikrIlxuIit0aGlzLnhsRGF0YS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KS5tYXAoVD0+T2Jq'@;
put 'ZWN0LnZhbHVlcyhUKS5qb2luKCIsIikpLmpvaW4oIlxuIiksZj0oKGMsbCk9Pm5ldyBGaWxlKFtjXSx0aGlzLmZpbGVuYW1lKyIuY3N2Iix7bGFzdE1vZGlmaWVkOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSkpKG5ldyBCbG9iKFtkXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pKTthLnB1c2go'@;
put 'e2ZpbGU6ZixmaWxlTmFtZTpmLm5hbWV9KSx0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsYSx7dGFibGU6dGhpcy5zZWxlY3RlZFhMTWFwLnRhcmdldERTfSkudGhlbihUPT57VC5zYXNqc0Fib3J0P3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dB'@;
put 'Ym9ydE1vZGFsKCIiLFQuc2FzanNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOlQuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOlQuU1lTRVJST1JURVhULE1BQzpULnNhc2pzQWJvcnRbMF0uTUFDfSk6VC5zYXNwYXJhbXMmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFn'@;
put 'ZS8iK1Quc2FzcGFyYW1zWzBdLkRTSUQpfSkuY2F0Y2goVD0+e3RoaXMuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLFQpfSkuZmluYWxseSgoKT0+e3RoaXMuc3RhdHVzPXlkLlJlYWR5VG9TdWJtaXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRp'@;
put 'bmdEZXNjPSIifSl9ZXh0cmFjdERhdGEoYSl7Y29uc3QgZD1bXTt0aGlzLnhsbWFwUnVsZXMuZm9yRWFjaChoPT57bGV0IGY9aC5YTE1BUF9TSEVFVDtpZihmLnN0YXJ0c1dpdGgoIi8iKSl7Y29uc3QgRWU9Zi5zcGxpdCgiLyIpWzFdLFplPXBhcnNlSW50KEVlKS0xO2Y9YS5TaGVldE5hbWVz'@;
put 'W1plXX1jb25zdCBfPWEuU2hlZXRzW2ZdLFQ9R2MudXRpbHMuc2hlZXRfdG9fanNvbihfLHtyYXc6ITAsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9KSxXPU9zZShoLlhMTUFQX1NUQVJULFQpLGllPSgoYyxsLGEpPT57aWYoIiI9PT1sKXJldHVybiBjO2lmKGwuc3RhcnRzV2l0aCgiQUJTT0xV'@;
put 'VEUgIikmJihsPWwucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGwuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGQ9ZFUobCk7aWYoZCl7Y29uc3R7cm93OmgsY29sdW1uOmZ9PWQse3I6XyxjOlR9PUdjLnV0aWxzLmRlY29kZV9jZWxsKGMpO2w9R2MudXRpbHMuZW5jb2RlX2NlbGwo'@;
put 'e3I6XytoLGM6VCtmfSl9fWlmKGwuc3RhcnRzV2l0aCgiTUFUQ0ggIikmJihsPU9zZShsLGEpKSwiTEFTVERPV04iPT09bCl7Y29uc3R7cjpkLGM6aH09R2MudXRpbHMuZGVjb2RlX2NlbGwoYyksZj1HYy51dGlscy5lbmNvZGVfY29sKGgpO2xldCBfPWQ7Zm9yKGxldCBUPWQrMTtUPGEubGVu'@;
put 'Z3RoJiZhW1RdW2ZdO1QrKylfPVQ7bD1mKyhfKzEpfWlmKCJCTEFOS1JPVyI9PT1sKXtjb25zdHtyOmR9PUdjLnV0aWxzLmRlY29kZV9jZWxsKGMpO2xldCBoPWQ7Zm9yKGxldCBXPWQrMTtXPGEubGVuZ3RoJiYhWlplKGFbV10pO1crKyloPVc7bD1PYmplY3Qua2V5cyhhW2hdKS5maWx0ZXIo'@;
put 'Vz0+Il9fcm93TnVtX18iIT09VykucmVkdWNlKChXLGllKT0+aWU+Vz9pZTpXLCIiKSsoaCsxKX1yZXR1cm4gbH0pKFcsaC5YTE1BUF9GSU5JU0gsVCksd2U9R2MudXRpbHMuc2hlZXRfdG9fanNvbihfLHtyYXc6ITAscmFuZ2U6YCR7V306JHtpZX1gLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEw'@;
put 'fSk7Zm9yKGxldCBFZT0wO0VlPHdlLmxlbmd0aDtFZSsrKXtjb25zdCBaZT13ZVtFZV0sb3Q9T2JqZWN0LmtleXMoWmUpLmZpbHRlcihldD0+Il9fcm93TnVtX18iIT09ZXQpO2ZvcihsZXQgZXQ9MDtldDxvdC5sZW5ndGg7ZXQrKylkLnB1c2goe0xPQURfUkVGOiIwIixYTE1BUF9JRDpoLlhM'@;
put 'TUFQX0lELFhMTUFQX1JBTkdFX0lEOmguWExNQVBfUkFOR0VfSUQsUk9XX05POkVlKzEsQ09MX05POmV0KzEsVkFMVUVfVFhUOlplW290W2V0XV19KX19KSx0aGlzLnN0YXR1cz15ZC5SZWFkeVRvU3VibWl0LHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnhs'@;
put 'RGF0YT1kLHRoaXMuc2VsZWN0ZWRUYWI9WjcuRGF0YX12aWV3WExNYXBSdWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc2VsZWN0ZWRYTE1hcCYmKGEuaXNMb2FkaW5nPSEwLGEuaXNMb2FkaW5nRGVzYz0iTG9hZGluZyBleGNlbCBydWxlcyIsYS5zdGF0dXM9eWQu'@;
put 'RmV0Y2hpbmdSdWxlcyx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRYTE1hcFJ1bGVzKGEuc2VsZWN0ZWRYTE1hcC5pZCkudGhlbihkPT57YS54bG1hcFJ1bGVzPWQueGxtYXBydWxlcyxhLnN0YXR1cz15ZC5SZWFkeVRvVXBsb2FkfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2VydmljZS5lcnJv'@;
put 'cihkKX0pLGEuaXNMb2FkaW5nPSExLGEuaXNMb2FkaW5nRGVzYz0iIil9KSgpfWxvYWQoKXt0aGlzLnhsbWFwcz1Hbi54bG1hcHMsdGhpcy54bG1hcHNMb2FkaW5nPSExO2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQ7aWYoYSl7Y29uc3QgZD10aGlzLnhsbWFwcy5maW5k'@;
put 'KGg9PmguaWQ9PT1hKTtkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWQsdGhpcy52aWV3WExNYXBSdWxlcygpKX19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVyVmlld0lu'@;
put 'aXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7R24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5sb2FkKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxvYWQoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKSh0dCh2bCksdHQoQzApLHR0KHcwKSx0dChXbCksdHQoRHMpLHR0KGJkKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbygkWmUsNSksMiZhKXtsZXQgaDtz'@;
put 'aShoPWFpKCkpJiYoZC5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1oKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY29udGVudC1jb250YWluZXIiLGQuY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6NDIsdmFyczoxNixjb25zdHM6W1siY2xh'@;
put 'c3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgSWQiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYi'@;
put 'LDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQt'@;
put 'YXJlYSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwiY2xhc3MiLCJjYXJkIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciIs'@;
put 'NCwibmdJZiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIiwiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNo'@;
put 'YW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLTMi'@;
put 'LCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJh'@;
put 'cHBGaWxlU2VsZWN0IiwiIiwzLCJ1cGxvYWRlciIsImNoYW5nZSJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtLTAiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20i'@;
put 'LCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImFjdGlvbkJ1dHRvbnMiLCIiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGlu'@;
put 'ayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsZSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYi'@;
put 'XSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbImNsclRhYkxpbmsi'@;
put 'LCIiLDMsImNsaWNrIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXJvdyIsIm0tMCIsIm1iLTEwLWkiLCJ2aWV3ZXJUaXRsZSJdLFsxLCJkLWZsZXgiLCJjbHItY29sLTEyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC01LWkiXSxb'@;
put 'MSwibWwtMTAiLDMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90LXRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhl'@;
put 'YWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImhlaWdodCIsIm1vZGlmeUNvbFdpZHRoIiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwicm93SGVhZGVycyIsInJvd0hlYWRlcldpZHRoIiwicm93SGVpZ2h0cyIsImxpY2Vuc2VLZXkiXSxbMSwiY2xyLXJvdyIsIm0t'@;
put 'MCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItY29sLTEyIGNsci1jb2wtbGctNCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1jb2wtMTIi'@;
put 'LCJjbHItY29sLWxnLTQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZS1kYW5n'@;
put 'ZXIiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiksUWUoMSxxWmUsMiwwLCJkaXYiLDApLG1lKDIsImNsci10cmVlIikoMywiY2xyLXRyZWUtbm9kZSIsMSko'@;
put 'NCwiZGl2IiwyKSg1LCJpbnB1dCIsMyw0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc2VhcmNoU3RyaW5nPWZ9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGQueGxtYXBMaXN0T25GaWx0ZXIoKX0pLHllKCksUWUoNyxLWmUsMSwwLCJjbHItaWNvbiIsNSks'@;
put 'UWUoOCxYWmUsMSwwLCJjbHItaWNvbiIsNikseWUoKSgpLFFlKDksSlplLDUsMywibmctY29udGFpbmVyIiw3KSx5ZSgpKCksbWUoMTAsImRpdiIsOCksUWUoMTEsdFllLDQsMiwiZGl2Iiw5KSxRZSgxMixuWWUsNiwxLCJkaXYiLDEwKSxRZSgxMyxzWWUsMjYsMjQsImRpdiIsMTEpLG1lKDE0'@;
put 'LCJjbHItbW9kYWwiLDEyKSx4dCgiZmlsZU92ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmZpbGVPdmVyQmFzZShmKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZ2V0RmlsZURlc2MoZiwhMCl9KSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5z'@;
put 'aG93VXBsb2FkTW9kYWw9Zn0pLG1lKDE1LCJoMyIsMTMpLE5lKDE2LCJVcGxvYWQgRmlsZSIpLHllKCksbWUoMTcsImRpdiIsMTQpKDE4LCJkaXYiLDE1KSgxOSwic3BhbiIpLE5lKDIwLCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLHllKCkoKSxtZSgyMSwiZGl2IiwxNikoMjIs'@;
put 'ImRpdiIsMTcpKDIzLCJkaXYiLDE4KSgyNCwic3BhbiIsMTkpKDI1LCJsYWJlbCIsMjApLE5lKDI2LCIgQnJvd3NlICIpLHllKCkoKSxtZSgyNywiaW5wdXQiLDIxLDIyKSx4dCgiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5nZXRGaWxlRGVzYyhmKX0pLHllKCkoKSgpKCkoKSgpLG1l'@;
put 'KDI5LCJjbHItbW9kYWwiLDIzKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT1mfSksbWUoMzAsImgzIiwxMyksTmUoMzEsIk5vdGljZSIpLHllKCksbWUoMzIsImRpdiIsMTQpKDMzLCJwIiwyNCksTmUoMzQpLHllKCkoKSxt'@;
put 'ZSgzNSwiZGl2IiwyNSkoMzYsImJ1dHRvbiIsMjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT0hMX0pLE5lKDM3LCIgQ2FuY2VsICIpLHllKCksbWUoMzgsImJ1dHRvbiIsMjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zdWJtaXQo'@;
put 'KSxkLnN1Ym1pdExpbWl0Tm90aWNlPSExfSksTmUoMzksIiBTdWJtaXQgIikseWUoKSgpKCkoKSxRZSg0MCx1WWUsNCwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyNyxFYykpLDImYSl7Y29uc3QgaD0kaSg2KTtDZSgxKSxSZSgibmdJZiIsZC54bG1hcHNMb2FkaW5nKSxDZSg0KSxSZSgibmdNb2Rl'@;
put 'bCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixoLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsaC52YWx1ZS5sZW5ndGg+MCksQ2UoMSksUmUoIm5nRm9yT2YiLGQueGxtYXBzKSxDZSgyKSxSZSgibmdJZiIsIWQuc2VsZWN0ZWRYTE1hcCksQ2UoMSksUmUoIm5nSWYi'@;
put 'LGQuaXNMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWQuaXNMb2FkaW5nJiZkLnNlbGVjdGVkWExNYXApLENlKDEpLFJlKCJ1cGxvYWRlciIsZC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsITAp'@;
put 'KCJjbHJNb2RhbE9wZW4iLGQuc2hvd1VwbG9hZE1vZGFsKSxDZSgxMyksUmUoInVwbG9hZGVyIixkLnVwbG9hZGVyKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLnN1Ym1pdExpbWl0Tm90aWNlKSxDZSg1KSxncigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixkLmxpY2VuY2VT'@;
put 'dGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fSxkZXBlbmRlbmNpZXM6W3h5LEJ1LFdhLEJzLE9zLGRkLGcx'@;
put 'LERwLGthLG91LHN1LEU4LFVzLGYxLExwLE9wLGRnLFJwLElwLGNnLHUyLG4zLHhzLFppLHJkLFliLEVzZSxrc2VdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Y2xyLXRyZWUt'@;
put 'bm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubm8tdGFibGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRs'@;
put 'ZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLm9wdGlvbnMtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5zd1tf'@;
put 'bmdjb250ZW50LSVDT01QJV17bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfS52aWV3ZXJUaXRsZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcmRGbGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY29u'@;
put 'dGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEw'@;
put 'NywwLC40MzEzNzI1NDkpfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9LmRyb3AtYXJlYVtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweDttYXJnaW4tdG9wOjIwcHg7Y29sb3I6I2ZmZn0iXX0pLGN9KSgpO2NvbnN0IGRZZT1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9'@;
put 'bmdPbkRlc3Ryb3koKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFy'@;
put 'czowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCksY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDpQc2V9LHtwYXRoOiI6aWQiLGNvbXBvbmVudDpQc2V9XX1dO2xldCBoWWU9KCgpPT57Y2xhc3Mg'@;
put 'Y3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbZGMuZm9yQ2hpbGQoZFllKSxkY119KSxjfSkoKTtGeigpO2xldCBmWWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbXzcsaFllLCRsLF91LEI3LG9vLFFBLEMyXX0pLGN9KSgpO2NvbnN0IHBZZT1be3BhdGg6IiIsY29tcG9uZW50OmlaZSxjaGls'@;
put 'ZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0YWJsZXMifSx7cGF0aDoidGFibGVzIixjb21wb25lbnQ6VVplfSx7cGF0aDoiZmlsZXMiLGxvYWRDaGlsZHJlbjooKT0+ZlllfV19XTtsZXQgZ1llPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2RjLmZvckNoaWxkKHBZZSksZGNdfSksY30pKCksaFU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu'@;
put 'ZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbZ1llLCRsLF91LEI3LG9vLFFBLEMyXX0pLGN9KSgpLGZVPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3'@;
put 'NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLF91LG9vLCRsLEI3LHR3LEMyXX0pLGN9KSgpLEZzZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30p'@;
put 'LGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbywkbCxmVSxfNyxDc2UsTG9lLFFBLEMyXX0pLGN9KSgpO0Z6KCk7bGV0IG1ZZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6'@;
put 'Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltGc2Usb28sJGwsclplLF91LF83LmZvclJvb3QoKSxCNyxDMixWNyxoVSx0dyxRQSxDc2UsZlVdfSksY30pKCkscFU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnJvdXRlcj1kfWNh'@;
put 'bkFjdGl2YXRlKGEsZCl7cmV0dXJuISEodm9pZCAwIT09ZD8ucm9vdC5xdWVyeVBhcmFtcy5mb3JjZXx8ZD8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvdXBkYXRlIikmJnRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWR8fG51bGwhPT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBw'@;
put 'QWN0aXZhdGVkLnZhbHVlJiYhMT09PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKSwhMSl9Y2FuRGVhY3RpdmF0ZShhLGQsaCxmKXtyZXR1cm4hKGg/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3Jl'@;
put 'Z2lzdGVyIil8fHRoaXMubGljZW5jZVNlcnZpY2UuYXBwTG9ja2VkLnZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoQzApLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7'@;
put 'ZnVuY3Rpb24gSHNlKGMsbCl7KGZ1bmN0aW9uIHZZZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfWZ1bmN0aW9uIGdVKGMs'@;
put 'bCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfWZ1bmN0aW9uIGx3KGMpe3JldHVybihsdz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9m'@;
put 'IFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihsKXtyZXR1cm4gdHlwZW9mIGx9OmZ1bmN0aW9uKGwpe3JldHVybiBsJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZsLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZsIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgbH0pKGMpfWZ1'@;
put 'bmN0aW9uIEYwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBiWWUoYyl7dmFyIGw9ZnVuY3Rpb24gX1llKGMsbCl7aWYoIm9iamVjdCIhPT1sdyhjKXx8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8'@;
put 'fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1sdyhkKSlyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy'@;
put 'biJzeW1ib2wiPT09bHcobCk/bDpTdHJpbmcobCl9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWxldCBsND17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczoh'@;
put 'MSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxs'@;
put 'LHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O2Z1bmN0aW9uIE5zZShjKXtsND1jfWNvbnN0IFZzZT0vWyY8PiInXS8seVllPW5ldyBSZWdFeHAoVnNlLnNvdXJjZSwiZyIpLEJzZT0vWzw+IiddfCYoPyEoI1xkezEsN318'@;
put 'I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFx3Kyk7KS8sd1llPW5ldyBSZWdFeHAoQnNlLnNvdXJjZSwiZyIpLENZZT17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sanNlPWM9PkNZZVtjXTtmdW5jdGlvbiBTdShjLGwpe2lmKGwpe2lm'@;
put 'KFZzZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2UoeVllLGpzZSl9ZWxzZSBpZihCc2UudGVzdChjKSlyZXR1cm4gYy5yZXBsYWNlKHdZZSxqc2UpO3JldHVybiBjfWNvbnN0IFNZZT0vJigjKD86XGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiB6c2UoYyl7'@;
put 'cmV0dXJuIGMucmVwbGFjZShTWWUsKGwsYSk9PiJjb2xvbiI9PT0oYT1hLnRvTG93ZXJDYXNlKCkpPyI6IjoiIyI9PT1hLmNoYXJBdCgwKT8ieCI9PT1hLmNoYXJBdCgxKT9TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGEuc3Vic3RyaW5nKDIpLDE2KSk6U3RyaW5nLmZyb21DaGFyQ29k'@;
put 'ZSgrYS5zdWJzdHJpbmcoMSkpOiIiKX1jb25zdCBNWWU9LyhefFteXFtdKVxeL2c7ZnVuY3Rpb24gZmEoYyxsKXtjPSJzdHJpbmciPT10eXBlb2YgYz9jOmMuc291cmNlLGw9bHx8IiI7Y29uc3QgYT17cmVwbGFjZTooZCxoKT0+KGg9KGg9aC5zb3VyY2V8fGgpLnJlcGxhY2UoTVllLCIkMSIp'@;
put 'LGM9Yy5yZXBsYWNlKGQsaCksYSksZ2V0UmVnZXg6KCk9Pm5ldyBSZWdFeHAoYyxsKX07cmV0dXJuIGF9Y29uc3QgeFllPS9bXlx3Ol0vZyxFWWU9L14kfF5bYS16XVthLXowLTkrLi1dKjp8Xls/I10vaTtmdW5jdGlvbiBVc2UoYyxsLGEpe2lmKGMpe2xldCBkO3RyeXtkPWRlY29kZVVSSUNv'@;
put 'bXBvbmVudCh6c2UoYSkpLnJlcGxhY2UoeFllLCIiKS50b0xvd2VyQ2FzZSgpfWNhdGNoe3JldHVybiBudWxsfWlmKDA9PT1kLmluZGV4T2YoImphdmFzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoInZic2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJkYXRhOiIpKXJldHVybiBudWxsfWwmJiFF'@;
put 'WWUudGVzdChhKSYmKGE9ZnVuY3Rpb24gRFllKGMsbCl7ZVRbIiAiK2NdfHwoZVRbIiAiK2NdPWtZZS50ZXN0KGMpP2MrIi8iOm5UKGMsIi8iLCEwKSk7Y29uc3QgYT0tMT09PShjPWVUWyIgIitjXSkuaW5kZXhPZigiOiIpO3JldHVybiIvLyI9PT1sLnN1YnN0cmluZygwLDIpP2E/bDpjLnJl'@;
put 'cGxhY2UoQVllLCIkMSIpK2w6Ii8iPT09bC5jaGFyQXQoMCk/YT9sOmMucmVwbGFjZShUWWUsIiQxIikrbDpjK2x9KGwsYSkpO3RyeXthPWVuY29kZVVSSShhKS5yZXBsYWNlKC8lMjUvZywiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiBhfWNvbnN0IGVUPXt9LGtZZT0vXlteOl0rOlwv'@;
put 'KlteL10qJC8sQVllPS9eKFteOl0rOilbXHNcU10qJC8sVFllPS9eKFteOl0rOlwvKlteL10qKVtcc1xTXSokLyx0VD17ZXhlYzpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFpzZShjLGwpe2NvbnN0IGQ9Yy5yZXBsYWNlKC9cfC9nLChmLF8sVCk9PntsZXQgVz0hMSxpZT1fO2Zvcig7LS1pZT49'@;
put 'MCYmIlxcIj09PVRbaWVdOylXPSFXO3JldHVybiBXPyJ8IjoiIHwifSkuc3BsaXQoLyBcfC8pO2xldCBoPTA7aWYoZFswXS50cmltKCl8fGQuc2hpZnQoKSxkLmxlbmd0aD4wJiYhZFtkLmxlbmd0aC0xXS50cmltKCkmJmQucG9wKCksZC5sZW5ndGg+bClkLnNwbGljZShsKTtlbHNlIGZvcig7'@;
put 'ZC5sZW5ndGg8bDspZC5wdXNoKCIiKTtmb3IoO2g8ZC5sZW5ndGg7aCsrKWRbaF09ZFtoXS50cmltKCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0dXJuIGR9ZnVuY3Rpb24gblQoYyxsLGEpe2NvbnN0IGQ9Yy5sZW5ndGg7aWYoMD09PWQpcmV0dXJuIiI7bGV0IGg9MDtmb3IoO2g8ZDspe2Nv'@;
put 'bnN0IGY9Yy5jaGFyQXQoZC1oLTEpO2lmKGYhPT1sfHxhKXtpZihmPT09bHx8IWEpYnJlYWs7aCsrfWVsc2UgaCsrfXJldHVybiBjLnNsaWNlKDAsZC1oKX1mdW5jdGlvbiBZc2UoYyxsLGEsZCl7Y29uc3QgaD1sLmhyZWYsZj1sLnRpdGxlP1N1KGwudGl0bGUpOm51bGwsXz1jWzFdLnJlcGxh'@;
put 'Y2UoL1xcKFtcW1xdXSkvZywiJDEiKTtpZigiISIhPT1jWzBdLmNoYXJBdCgwKSl7ZC5zdGF0ZS5pbkxpbms9ITA7Y29uc3QgVD17dHlwZToibGluayIscmF3OmEsaHJlZjpoLHRpdGxlOmYsdGV4dDpfLHRva2VuczpkLmlubGluZVRva2VucyhfKX07cmV0dXJuIGQuc3RhdGUuaW5MaW5rPSEx'@;
put 'LFR9cmV0dXJue3R5cGU6ImltYWdlIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0OlN1KF8pfX1jbGFzcyByVHtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8bDR9c3BhY2UobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyhsKTtpZihhJiZhWzBdLmxlbmd0'@;
put 'aD4wKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OmFbMF19fWNvZGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzphWzBdLGNvZGVCbG9ja1N0eWxl'@;
put 'OiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/ZDpuVChkLCJcbiIpfX19ZmVuY2VzKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5mZW5jZXMuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0saD1mdW5jdGlvbiBSWWUoYyxsKXtjb25zdCBhPWMubWF0Y2goL14oXHMr'@;
put 'KSg/OmBgYCkvKTtpZihudWxsPT09YSlyZXR1cm4gbDtjb25zdCBkPWFbMV07cmV0dXJuIGwuc3BsaXQoIlxuIikubWFwKGg9Pntjb25zdCBmPWgubWF0Y2goL15ccysvKTtpZihudWxsPT09ZilyZXR1cm4gaDtjb25zdFtfXT1mO3JldHVybiBfLmxlbmd0aD49ZC5sZW5ndGg/aC5zbGljZShk'@;
put 'Lmxlbmd0aCk6aH0pLmpvaW4oIlxuIil9KGQsYVszXXx8IiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6ZCxsYW5nOmFbMl0/YVsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzJdLHRleHQ6aH19fWhlYWRpbmcobCl7Y29uc3QgYT10aGlzLnJ1'@;
put 'bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnRyaW0oKTtpZigvIyQvLnRlc3QoZCkpe2NvbnN0IGg9blQoZCwiIyIpOyh0aGlzLm9wdGlvbnMucGVkYW50aWN8fCFofHwvICQvLnRlc3QoaCkpJiYoZD1oLnRyaW0oKSl9cmV0dXJue3R5cGU6ImhlYWRpbmciLHJh'@;
put 'dzphWzBdLGRlcHRoOmFbMV0ubGVuZ3RoLHRleHQ6ZCx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZCl9fX1ocihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJociIscmF3OmFbMF19fWJsb2NrcXVvdGUobCl7Y29uc3QgYT10aGlzLnJ1'@;
put 'bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0ucmVwbGFjZSgvXiAqPlsgXHRdPy9nbSwiIiksaD10aGlzLmxleGVyLnN0YXRlLnRvcDt0aGlzLmxleGVyLnN0YXRlLnRvcD0hMDtjb25zdCBmPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoZCk7cmV0dXJuIHRo'@;
put 'aXMubGV4ZXIuc3RhdGUudG9wPWgse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzphWzBdLHRva2VuczpmLHRleHQ6ZH19fWxpc3QobCl7bGV0IGE9dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMobCk7aWYoYSl7bGV0IGQsaCxmLF8sVCxXLGllLGdlLHdlLEVlLFplLG90LGV0PWFbMV0udHJpbSgp'@;
put 'O2NvbnN0IHl0PWV0Lmxlbmd0aD4xLGt0PXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDp5dCxzdGFydDp5dD8rZXQuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O2V0PXl0P2BcXGR7MSw5fVxcJHtldC5zbGljZSgtMSl9YDpgXFwke2V0fWAsdGhpcy5vcHRpb25zLnBlZGFu'@;
put 'dGljJiYoZXQ9eXQ/ZXQ6IlsqKy1dIik7Y29uc3QgU3Q9bmV3IFJlZ0V4cChgXiggezAsM30ke2V0fSkoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpYCk7Zm9yKDtsJiYob3Q9ITEsKGE9U3QuZXhlYyhsKSkmJiF0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QobCkpOyl7aWYoZD1hWzBdLGw9'@;
put 'bC5zdWJzdHJpbmcoZC5sZW5ndGgpLGdlPWFbMl0uc3BsaXQoIlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyxybj0+IiAiLnJlcGVhdCgzKnJuLmxlbmd0aCkpLHdlPWwuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KF89MixaZT1nZS50cmltTGVmdCgpKTooXz1hWzJd'@;
put 'LnNlYXJjaCgvW14gXS8pLF89Xz40PzE6XyxaZT1nZS5zbGljZShfKSxfKz1hWzFdLmxlbmd0aCksVz0hMSwhZ2UmJi9eICokLy50ZXN0KHdlKSYmKGQrPXdlKyJcbiIsbD1sLnN1YnN0cmluZyh3ZS5sZW5ndGgrMSksb3Q9ITApLCFvdCl7Y29uc3Qgcm49bmV3IFJlZ0V4cChgXiB7MCwke01h'@;
put 'dGgubWluKDMsXy0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgoPzpbIFx0XVteXFxuXSopPyg/OlxcbnwkKSlgKSx2bj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxfLTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksTm49bmV3'@;
put 'IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsXy0xKX19KD86XGBcYFxgfH5+filgKSxjcj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxfLTEpfX0jYCk7Zm9yKDtsJiYoRWU9bC5zcGxpdCgiXG4iLDEpWzBdLHdlPUVlLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHdlPXdlLnJlcGxh'@;
put 'Y2UoL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZywiICAiKSksIShObi50ZXN0KHdlKXx8Y3IudGVzdCh3ZSl8fHJuLnRlc3Qod2UpfHx2bi50ZXN0KGwpKSk7KXtpZih3ZS5zZWFyY2goL1teIF0vKT49X3x8IXdlLnRyaW0oKSlaZSs9IlxuIit3ZS5zbGljZShfKTtlbHNle2lmKFd8fGdlLnNl'@;
put 'YXJjaCgvW14gXS8pPj00fHxObi50ZXN0KGdlKXx8Y3IudGVzdChnZSl8fHZuLnRlc3QoZ2UpKWJyZWFrO1plKz0iXG4iK3dlfSFXJiYhd2UudHJpbSgpJiYoVz0hMCksZCs9RWUrIlxuIixsPWwuc3Vic3RyaW5nKEVlLmxlbmd0aCsxKSxnZT13ZS5zbGljZShfKX19a3QubG9vc2V8fChpZT9r'@;
put 'dC5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KGQpJiYoaWU9ITApKSx0aGlzLm9wdGlvbnMuZ2ZtJiYoaD0vXlxbWyB4WF1cXSAvLmV4ZWMoWmUpLGgmJihmPSJbIF0gIiE9PWhbMF0sWmU9WmUucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpKSxrdC5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0'@;
put 'X2l0ZW0iLHJhdzpkLHRhc2s6ISFoLGNoZWNrZWQ6Zixsb29zZTohMSx0ZXh0OlplfSksa3QucmF3Kz1kfWt0Lml0ZW1zW2t0Lml0ZW1zLmxlbmd0aC0xXS5yYXc9ZC50cmltUmlnaHQoKSxrdC5pdGVtc1trdC5pdGVtcy5sZW5ndGgtMV0udGV4dD1aZS50cmltUmlnaHQoKSxrdC5yYXc9a3Qu'@;
put 'cmF3LnRyaW1SaWdodCgpO2NvbnN0IFF0PWt0Lml0ZW1zLmxlbmd0aDtmb3IoVD0wO1Q8UXQ7VCsrKWlmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSExLGt0Lml0ZW1zW1RdLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGt0Lml0ZW1zW1RdLnRleHQsW10pLCFrdC5sb29zZSl7Y29uc3Qg'@;
put 'cm49a3QuaXRlbXNbVF0udG9rZW5zLmZpbHRlcihObj0+InNwYWNlIj09PU5uLnR5cGUpLHZuPXJuLmxlbmd0aD4wJiZybi5zb21lKE5uPT4vXG4uKlxuLy50ZXN0KE5uLnJhdykpO2t0Lmxvb3NlPXZufWlmKGt0Lmxvb3NlKWZvcihUPTA7VDxRdDtUKyspa3QuaXRlbXNbVF0ubG9vc2U9ITA7'@;
put 'cmV0dXJuIGt0fX1odG1sKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD17dHlwZToiaHRtbCIsYmxvY2s6ITAscmF3OmFbMF0scHJlOiF0aGlzLm9wdGlvbnMuc2FuaXRpemVyJiYoInByZSI9PT1hWzFdfHwic2NyaXB0Ij09PWFbMV18fCJz'@;
put 'dHlsZSI9PT1hWzFdKSx0ZXh0OmFbMF19O2lmKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSl7Y29uc3QgaD10aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6U3UoYVswXSk7ZC50eXBlPSJwYXJhZ3JhcGgiLGQudGV4dD1oLGQudG9rZW5zPXRoaXMubGV4'@;
put 'ZXIuaW5saW5lKGgpfXJldHVybiBkfX1kZWYobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksaD1hWzJdP2FbMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2Uo'@;
put 'dGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIsZj1hWzNdP2FbM10uc3Vic3RyaW5nKDEsYVszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpkLHJhdzphWzBdLGhyZWY6aCx0aXRs'@;
put 'ZTpmfX19dGFibGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD17dHlwZToidGFibGUiLGhlYWRlcjpac2UoYVsxXSkubWFwKGg9Pih7dGV4dDpofSkpLGFsaWduOmFbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8'@;
put 'ICovKSxyb3dzOmFbM10mJmFbM10udHJpbSgpP2FbM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3BsaXQoIlxuIik6W119O2lmKGQuaGVhZGVyLmxlbmd0aD09PWQuYWxpZ24ubGVuZ3RoKXtkLnJhdz1hWzBdO2xldCBmLF8sVCxXLGg9ZC5hbGlnbi5sZW5ndGg7Zm9yKGY9MDtmPGg7Zisr'@;
put 'KWQuYWxpZ25bZl09L14gKi0rOiAqJC8udGVzdChkLmFsaWduW2ZdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3QoZC5hbGlnbltmXSk/ImxlZnQiOm51bGw7Zm9yKGg9ZC5yb3dzLmxlbmd0aCxmPTA7ZjxoO2YrKylkLnJv'@;
put 'd3NbZl09WnNlKGQucm93c1tmXSxkLmhlYWRlci5sZW5ndGgpLm1hcChpZT0+KHt0ZXh0OmllfSkpO2ZvcihoPWQuaGVhZGVyLmxlbmd0aCxfPTA7XzxoO18rKylkLmhlYWRlcltfXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZC5oZWFkZXJbX10udGV4dCk7Zm9yKGg9ZC5yb3dzLmxlbmd0'@;
put 'aCxfPTA7XzxoO18rKylmb3IoVz1kLnJvd3NbX10sVD0wO1Q8Vy5sZW5ndGg7VCsrKVdbVF0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKFdbVF0udGV4dCk7cmV0dXJuIGR9fX1saGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhsKTtpZihhKXJldHVy'@;
put 'bnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDoiPSI9PT1hWzJdLmNoYXJBdCgwKT8xOjIsdGV4dDphWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzFdKX19cGFyYWdyYXBoKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhsKTtpZihhKXtjb25z'@;
put 'dCBkPSJcbiI9PT1hWzFdLmNoYXJBdChhWzFdLmxlbmd0aC0xKT9hWzFdLnNsaWNlKDAsLTEpOmFbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OmFbMF0sdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fXRleHQobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRl'@;
put 'eHQuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6YVswXSx0ZXh0OmFbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMF0pfX1lc2NhcGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJlc2NhcGUiLHJh'@;
put 'dzphWzBdLHRleHQ6U3UoYVsxXSl9fXRhZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKGwpO2lmKGEpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0'@;
put 'ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEw'@;
put 'OnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6YVswXSxpbkxp'@;
put 'bms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOlN1KGFbMF0pOmFb'@;
put 'MF19fWxpbmsobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZCkpe2lmKCEvPiQvLnRlc3QoZCkpcmV0dXJuO2NvbnN0IF89blQoZC5zbGljZSgwLC0x'@;
put 'KSwiXFwiKTtpZigoZC5sZW5ndGgtXy5sZW5ndGgpJTI9PTApcmV0dXJufWVsc2V7Y29uc3QgXz1mdW5jdGlvbiBJWWUoYyxsKXtpZigtMT09PWMuaW5kZXhPZihsWzFdKSlyZXR1cm4tMTtjb25zdCBhPWMubGVuZ3RoO2xldCBkPTAsaD0wO2Zvcig7aDxhO2grKylpZigiXFwiPT09Y1toXSlo'@;
put 'Kys7ZWxzZSBpZihjW2hdPT09bFswXSlkKys7ZWxzZSBpZihjW2hdPT09bFsxXSYmKGQtLSxkPDApKXJldHVybiBoO3JldHVybi0xfShhWzJdLCIoKSIpO2lmKF8+LTEpe2NvbnN0IFc9KDA9PT1hWzBdLmluZGV4T2YoIiEiKT81OjQpK2FbMV0ubGVuZ3RoK187YVsyXT1hWzJdLnN1YnN0cmlu'@;
put 'ZygwLF8pLGFbMF09YVswXS5zdWJzdHJpbmcoMCxXKS50cmltKCksYVszXT0iIn19bGV0IGg9YVsyXSxmPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3QgXz0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaCk7XyYmKGg9X1sxXSxmPV9bM10pfWVsc2UgZj1h'@;
put 'WzNdP2FbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIGg9aC50cmltKCksL148Ly50ZXN0KGgpJiYoaD10aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3QoZCk/aC5zbGljZSgxKTpoLnNsaWNlKDEsLTEpKSxZc2UoYSx7aHJlZjpoJiZoLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUu'@;
put 'X2VzY2FwZXMsIiQxIiksdGl0bGU6ZiYmZi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxhWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGwsYSl7bGV0IGQ7aWYoKGQ9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGwpKXx8KGQ9dGhpcy5ydWxlcy5pbmxp'@;
put 'bmUubm9saW5rLmV4ZWMobCkpKXtsZXQgaD0oZFsyXXx8ZFsxXSkucmVwbGFjZSgvXHMrL2csIiAiKTtpZihoPWFbaC50b0xvd2VyQ2FzZSgpXSwhaCl7Y29uc3QgZj1kWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OmYsdGV4dDpmfX1yZXR1cm4gWXNlKGQsaCxkWzBdLHRo'@;
put 'aXMubGV4ZXIpfX1lbVN0cm9uZyhsLGEsZD0iIil7bGV0IGg9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWMobCk7aWYoISghaHx8aFszXSYmZC5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFoWzFdJiYhaFsyXXx8IWR8fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0'@;
put 'aW9uLmV4ZWMoZCkpKXtjb25zdCBfPWhbMF0ubGVuZ3RoLTE7bGV0IFQsVyxpZT1fLGdlPTA7Y29uc3Qgd2U9IioiPT09aFswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltVW5kO2Zvcih3ZS5sYXN0SW5k'@;
put 'ZXg9MCxhPWEuc2xpY2UoLTEqbC5sZW5ndGgrXyk7bnVsbCE9KGg9d2UuZXhlYyhhKSk7KXtpZihUPWhbMV18fGhbMl18fGhbM118fGhbNF18fGhbNV18fGhbNl0sIVQpY29udGludWU7aWYoVz1ULmxlbmd0aCxoWzNdfHxoWzRdKXtpZSs9Vztjb250aW51ZX1pZigoaFs1XXx8aFs2XSkmJl8l'@;
put 'MyYmISgoXytXKSUzKSl7Z2UrPVc7Y29udGludWV9aWYoaWUtPVcsaWU+MCljb250aW51ZTtXPU1hdGgubWluKFcsVytpZStnZSk7Y29uc3QgRWU9bC5zbGljZSgwLF8raC5pbmRleCtXKzEpO2lmKE1hdGgubWluKF8sVyklMil7Y29uc3Qgb3Q9RWUuc2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6'@;
put 'ImVtIixyYXc6RWUsdGV4dDpvdCx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMob3QpfX1jb25zdCBaZT1FZS5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6RWUsdGV4dDpaZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoWmUpfX19fWNvZGVzcGFuKGwp'@;
put 'e2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0ucmVwbGFjZSgvXG4vZywiICIpO2NvbnN0IGg9L1teIF0vLnRlc3QoZCksZj0vXiAvLnRlc3QoZCkmJi8gJC8udGVzdChkKTtyZXR1cm4gaCYmZiYmKGQ9ZC5zdWJzdHJpbmcoMSxkLmxlbmd0'@;
put 'aC0xKSksZD1TdShkLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzphWzBdLHRleHQ6ZH19fWJyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJiciIscmF3OmFbMF19fWRlbChsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmRlbC5l'@;
put 'eGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImRlbCIscmF3OmFbMF0sdGV4dDphWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhhWzJdKX19YXV0b2xpbmsobCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMobCk7aWYoZCl7bGV0IGgsZjtyZXR1cm4i'@;
put 'QCI9PT1kWzJdPyhoPVN1KHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzFdKTpkWzFdKSxmPSJtYWlsdG86IitoKTooaD1TdShkWzFdKSxmPWgpLHt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19dXJsKGwsYSl7'@;
put 'bGV0IGQ7aWYoZD10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhsKSl7bGV0IGgsZjtpZigiQCI9PT1kWzJdKWg9U3UodGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMF0pOmRbMF0pLGY9Im1haWx0bzoiK2g7ZWxzZXtsZXQgXztkb3tfPWRbMF0sZFswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFj'@;
put 'a3BlZGFsLmV4ZWMoZFswXSlbMF19d2hpbGUoXyE9PWRbMF0pO2g9U3UoZFswXSksZj0id3d3LiI9PT1kWzFdPyJodHRwOi8vIitkWzBdOmRbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzpkWzBdLHRleHQ6aCxocmVmOmYsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmgsdGV4dDpofV19fX1p'@;
put 'bmxpbmVUZXh0KGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMobCk7aWYoZCl7bGV0IGg7cmV0dXJuIGg9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5p'@;
put 'dGl6ZXIoZFswXSk6U3UoZFswXSk6ZFswXTpTdSh0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/YShkWzBdKTpkWzBdKSx7dHlwZToidGV4dCIscmF3OmRbMF0sdGV4dDpofX19fWNvbnN0IFRvPXtuZXdsaW5lOi9eKD86ICooPzpcbnwkKSkrLyxjb2RlOi9eKCB7NH1bXlxuXSsoPzpcbig/OiAq'@;
put 'KD86XG58JCkpKik/KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5dKikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86XG58JCkpKD86IHswLDN9XDFbfmBdKiAqKD89XG58JCl8JCkvLGhyOi9eIHswLDN9KCg/Oi1bXHQgXSopezMsfXwoPzpf'@;
put 'WyBcdF0qKXszLH18KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLyxsaXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRd'@;
put 'W15cbl0rPyk/KD86XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xc'@;
put 'c1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmli'@;
put 'dXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCkpIixkZWY6'@;
put 'L14gezAsM31cWyhsYWJlbClcXTogKig/OlxuICopPyhbXjxcc11bXlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTp0VCxsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wt'@;
put 'KykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8s'@;
put 'X3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvfTtUby5kZWY9ZmEoVG8uZGVmKS5yZXBsYWNlKCJsYWJlbCIsVG8uX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsVG8uX3RpdGxlKS5nZXRSZWdleCgpLFRvLmJ1bGxldD0v'@;
put 'KD86WyorLV18XGR7MSw5fVsuKV0pLyxUby5saXN0SXRlbVN0YXJ0PWZhKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgiYnVsbCIsVG8uYnVsbGV0KS5nZXRSZWdleCgpLFRvLmxpc3Q9ZmEoVG8ubGlzdCkucmVwbGFjZSgvYnVsbC9nLFRvLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89'@;
put 'XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89IitUby5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKSxUby5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1'@;
put 'b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxs'@;
put 'aXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixUby5fY29tbWVudD0vPCEtLSg/IS0/'@;
put 'PilbXHNcU10qPyg/Oi0tPnwkKS8sVG8uaHRtbD1mYShUby5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsVG8uX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIsVG8uX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidb'@;
put 'Xidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxUby5saGVhZGluZz1mYShUby5saGVhZGluZykucmVwbGFjZSgvYnVsbC9nLFRvLmJ1bGxldCkuZ2V0UmVnZXgoKSxUby5wYXJhZ3JhcGg9ZmEoVG8uX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLFRvLmhyKS5yZXBsYWNl'@;
put 'KCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5d'@;
put 'KlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixUby5fdGFnKS5nZXRSZWdleCgpLFRvLmJs'@;
put 'b2NrcXVvdGU9ZmEoVG8uYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixUby5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksVG8ubm9ybWFsPXsuLi5Ub30sVG8uZ2ZtPXsuLi5Uby5ub3JtYWwsdGFibGU6Il4gKihbXlxcbiBdLipcXHwuKilcXG4gezAsM30oPzpcXHwgKik/KDo/LSs6PyAq'@;
put 'KD86XFx8ICo6Py0rOj8gKikqKSg/OlxcfCAqKT8oPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkifSxUby5nZm0udGFibGU9ZmEoVG8uZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsVG8uaHIp'@;
put 'LnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5y'@;
put 'ZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsVG8uX3RhZykuZ2V0UmVnZXgoKSxUby5nZm0ucGFyYWdy'@;
put 'YXBoPWZhKFRvLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixUby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsVG8uZ2ZtLnRhYmxlKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJl'@;
put 'cGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5'@;
put 'bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsVG8uX3RhZykuZ2V0UmVnZXgoKSxUby5wZWRhbnRpYz17Li4uVG8ubm9ybWFsLGh0bWw6ZmEoIl4gKig/OmNvbW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/'@;
put 'OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLFRvLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNv'@;
put 'ZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsi'@;
put 'KF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczp0VCxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpmYShUby5ub3JtYWwuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLFRv'@;
put 'LmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLFRvLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwi'@;
put 'IikuZ2V0UmVnZXgoKX07Y29uc3QgWGk9e2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6dFQsdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0q'@;
put 'XFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0'@;
put 'aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxz'@;
put 'Kl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFc'@;
put 'KilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/'@;
put 'PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89'@;
put 'W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOnRULHRleHQ6L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1c'@;
put 'bikpKS8scHVuY3R1YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pL307ZnVuY3Rpb24gT1llKGMpe3JldHVybiBjLnJlcGxhY2UoLy0tLS9nLCJcdTIwMTQiKS5yZXBsYWNlKC8tLS9nLCJcdTIwMTMiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQxXHUyMDE4'@;
put 'IikucmVwbGFjZSgvJy9nLCJcdTIwMTkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDFcdTIwMWMiKS5yZXBsYWNlKC8iL2csIlx1MjAxZCIpLnJlcGxhY2UoL1wuezN9L2csIlx1MjAyNiIpfWZ1bmN0aW9uIFdzZShjKXtsZXQgYSxkLGw9IiI7Y29uc3QgaD1j'@;
put 'Lmxlbmd0aDtmb3IoYT0wO2E8aDthKyspZD1jLmNoYXJDb2RlQXQoYSksTWF0aC5yYW5kb20oKT4uNSYmKGQ9IngiK2QudG9TdHJpbmcoMTYpKSxsKz0iJiMiK2QrIjsiO3JldHVybiBsfVhpLl9wdW5jdHVhdGlvbj0iXFxwe1B9JCs8PT5gXnx+IixYaS5wdW5jdHVhdGlvbj1mYShYaS5wdW5j'@;
put 'dHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csWGkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxYaS5hbnlQdW5jdHVhdGlvbj0vXFxbcHVuY3RdL2csWGkuX2VzY2Fw'@;
put 'ZXM9L1xcKFtwdW5jdF0pL2csWGkuX2NvbW1lbnQ9ZmEoVG8uX2NvbW1lbnQpLnJlcGxhY2UoIig/Oi0tXHgzZXwkKSIsIi0tXHgzZSIpLmdldFJlZ2V4KCksWGkuZW1TdHJvbmcubERlbGltPWZhKFhpLmVtU3Ryb25nLmxEZWxpbSwidSIpLnJlcGxhY2UoL3B1bmN0L2csWGkuX3B1bmN0dWF0'@;
put 'aW9uKS5nZXRSZWdleCgpLFhpLmVtU3Ryb25nLnJEZWxpbUFzdD1mYShYaS5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksWGkuZW1TdHJvbmcuckRlbGltVW5kPWZhKFhpLmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3Ui'@;
put 'KS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5hbnlQdW5jdHVhdGlvbj1mYShYaS5hbnlQdW5jdHVhdGlvbiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5fZXNjYXBlcz1mYShYaS5fZXNjYXBlcywi'@;
put 'Z3UiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LyxYaS5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17'@;
put 'MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxYaS5hdXRvbGluaz1mYShYaS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixYaS5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsWGkuX2VtYWlsKS5n'@;
put 'ZXRSZWdleCgpLFhpLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sWGkudGFnPWZhKFhpLnRhZykucmVwbGFjZSgiY29tbWVudCIsWGkuX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJp'@;
put 'YnV0ZSIsWGkuX2F0dHJpYnV0ZSkuZ2V0UmVnZXgoKSxYaS5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sWGkuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sWGkuX3RpdGxlPS8iKD86XFwiP3xb'@;
put 'XiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8sWGkubGluaz1mYShYaS5saW5rKS5yZXBsYWNlKCJsYWJlbCIsWGkuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixYaS5faHJlZikucmVwbGFjZSgidGl0bGUiLFhpLl90aXRsZSkuZ2V0UmVnZXgoKSxYaS5y'@;
put 'ZWZsaW5rPWZhKFhpLnJlZmxpbmspLnJlcGxhY2UoImxhYmVsIixYaS5fbGFiZWwpLnJlcGxhY2UoInJlZiIsVG8uX2xhYmVsKS5nZXRSZWdleCgpLFhpLm5vbGluaz1mYShYaS5ub2xpbmspLnJlcGxhY2UoInJlZiIsVG8uX2xhYmVsKS5nZXRSZWdleCgpLFhpLnJlZmxpbmtTZWFyY2g9ZmEo'@;
put 'WGkucmVmbGlua1NlYXJjaCwiZyIpLnJlcGxhY2UoInJlZmxpbmsiLFhpLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsWGkubm9saW5rKS5nZXRSZWdleCgpLFhpLm5vcm1hbD17Li4uWGl9LFhpLnBlZGFudGljPXsuLi5YaS5ub3JtYWwsc3Ryb25nOntzdGFydDovXl9ffFwqXCovLG1pZGRs'@;
put 'ZTovXl9fKD89XFMpKFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVuZEFzdDovXCpcKig/IVwqKS9nLGVuZFVuZDovX18oPyFfKS9nfSxlbTp7c3RhcnQ6L15ffFwqLyxtaWRkbGU6L14oKVwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKil8'@;
put 'Xl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXykvLGVuZEFzdDovXCooPyFcKikvZyxlbmRVbmQ6L18oPyFfKS9nfSxsaW5rOmZhKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixYaS5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpmYSgvXiE/XFsobGFiZWwpXF1c'@;
put 'cypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsWGkuX2xhYmVsKS5nZXRSZWdleCgpfSxYaS5nZm09ey4uLlhpLm5vcm1hbCxlc2NhcGU6ZmEoWGkuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhA'@;
put 'KVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChb'@;
put 'XildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19g'@;
put 'e1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSxY'@;
put 'aS5nZm0udXJsPWZhKFhpLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFpbCIsWGkuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxYaS5icmVha3M9ey4uLlhpLmdmbSxicjpmYShYaS5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6ZmEoWGkuZ2ZtLnRleHQp'@;
put 'LnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfTtjbGFzcyBraHtjb25zdHJ1Y3RvcihsKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1sfHxsNCx0'@;
put 'aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyByVCx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVR'@;
put 'dWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2NvbnN0IGE9e2Jsb2NrOlRvLm5vcm1hbCxpbmxpbmU6WGkubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KGEuYmxvY2s9VG8ucGVkYW50aWMsYS5pbmxpbmU9WGkucGVkYW50aWMpOnRoaXMu'@;
put 'b3B0aW9ucy5nZm0mJihhLmJsb2NrPVRvLmdmbSxhLmlubGluZT10aGlzLm9wdGlvbnMuYnJlYWtzP1hpLmJyZWFrczpYaS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWF9c3RhdGljIGdldCBydWxlcygpe3JldHVybntibG9jazpUbyxpbmxpbmU6WGl9fXN0YXRpYyBsZXgobCxhKXtyZXR1'@;
put 'cm4gbmV3IGtoKGEpLmxleChsKX1zdGF0aWMgbGV4SW5saW5lKGwsYSl7cmV0dXJuIG5ldyBraChhKS5pbmxpbmVUb2tlbnMobCl9bGV4KGwpe2xldCBhO2ZvcihsPWwucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMobCx0aGlzLnRva2Vucyk7YT10aGlzLmlubGlu'@;
put 'ZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKGEuc3JjLGEudG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9YmxvY2tUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsXztmb3IobD10aGlzLm9wdGlvbnMucGVkYW50aWM/bC5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiAr'@;
put 'JC9nbSwiIik6bC5yZXBsYWNlKC9eKCAqKShcdCspL2dtLChULFcsaWUpPT5XKyIgICAgIi5yZXBlYXQoaWUubGVuZ3RoKSk7bDspaWYoISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2smJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2Nr'@;
put 'LnNvbWUoVD0+ISEoZD1ULmNhbGwoe2xleGVyOnRoaXN9LGwsYSkpJiYobD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKSwhMCkpKSl7aWYoZD10aGlzLnRva2VuaXplci5zcGFjZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLDE9PT1kLnJhdy5sZW5ndGgmJmEu'@;
put 'bGVuZ3RoPjA/YVthLmxlbmd0aC0xXS5yYXcrPSJcbiI6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuY29kZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSwhaHx8InBhcmFncmFwaCIhPT1oLnR5cGUmJiJ0ZXh0IiE9PWgudHlw'@;
put 'ZT9hLnB1c2goZCk6KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnRleHQsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmZlbmNlcyhsKSl7bD1sLnN1YnN0cmluZyhkLnJh'@;
put 'dy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5ocihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEu'@;
put 'cHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saXN0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQp'@;
put 'O2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHRtbChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmRlZihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSwhaHx8InBh'@;
put 'cmFncmFwaCIhPT1oLnR5cGUmJiJ0ZXh0IiE9PWgudHlwZT90aGlzLnRva2Vucy5saW5rc1tkLnRhZ118fCh0aGlzLnRva2Vucy5saW5rc1tkLnRhZ109e2hyZWY6ZC5ocmVmLHRpdGxlOmQudGl0bGV9KTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QucmF3LHRoaXMuaW5saW5l'@;
put 'UXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50YWJsZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKGwpKXts'@;
put 'PWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGY9bCx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayl7bGV0IFQ9MS8wO2NvbnN0IFc9bC5zbGljZSgxKTtsZXQgaWU7dGhpcy5vcHRpb25zLmV4'@;
put 'dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZT1nZS5jYWxsKHtsZXhlcjp0aGlzfSxXKSwibnVtYmVyIj09dHlwZW9mIGllJiZpZT49MCYmKFQ9TWF0aC5taW4oVCxpZSkpfSksVDwxLzAmJlQ+PTAmJihmPWwuc3Vic3RyaW5nKDAsVCsxKSl9aWYodGhpcy5zdGF0'@;
put 'ZS50b3AmJihkPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChmKSkpe2g9YVthLmxlbmd0aC0xXSxfJiYicGFyYWdyYXBoIj09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5p'@;
put 'bmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpLF89Zi5sZW5ndGghPT1sLmxlbmd0aCxsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50ZXh0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2Eu'@;
put 'bGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVl'@;
put 'fWlmKGwpe2NvbnN0IFQ9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihUKTticmVha310aHJvdyBuZXcgRXJyb3IoVCl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxhfWlubGluZShsLGE9W10p'@;
put 'e3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzpsLHRva2VuczphfSksYX1pbmxpbmVUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsVCxXLGllLF89bDtpZih0aGlzLnRva2Vucy5saW5rcyl7Y29uc3QgZ2U9T2JqZWN0LmtleXModGhpcy50b2tlbnMubGlua3MpO2lmKGdlLmxlbmd0'@;
put 'aD4wKWZvcig7bnVsbCE9KFQ9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhfKSk7KWdlLmluY2x1ZGVzKFRbMF0uc2xpY2UoVFswXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKF89Xy5zbGljZSgwLFQuaW5kZXgpKyJbIisiYSIucmVwZWF0KFRbMF0u'@;
put 'bGVuZ3RoLTIpKyJdIitfLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7bnVsbCE9KFQ9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKF8pKTspXz1fLnNsaWNlKDAsVC5pbmRleCkrIlsiKyJh'@;
put 'Ii5yZXBlYXQoVFswXS5sZW5ndGgtMikrIl0iK18uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7bnVsbCE9KFQ9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMoXykpOylfPV8uc2xpY2UoMCxU'@;
put 'LmluZGV4KSsiKysiK18uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtsOylpZihXfHwoaWU9IiIpLFc9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlz'@;
put 'Lm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShnZT0+ISEoZD1nZS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuZXNjYXBlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3'@;
put 'Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFnKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQp'@;
put 'OmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpbmsobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5yZWZsaW5rKGwsdGhpcy50b2tlbnMubGlua3MpKXtsPWwuc3Vic3RyaW5nKGQucmF3'@;
put 'Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGwsXyxpZSkpe2w9bC5zdWJzdHJpbmcoZC5y'@;
put 'YXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2Rlc3BhbihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCks'@;
put 'YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVsKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsobCxXc2UpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNo'@;
put 'KGQpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKGQ9dGhpcy50b2tlbml6ZXIudXJsKGwsV3NlKSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5z'@;
put 'aW9ucy5zdGFydElubGluZSl7bGV0IGdlPTEvMDtjb25zdCB3ZT1sLnNsaWNlKDEpO2xldCBFZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKFplKXtFZT1aZS5jYWxsKHtsZXhlcjp0aGlzfSx3ZSksIm51bWJlciI9PXR5cGVvZiBFZSYmRWU+'@;
put 'PTAmJihnZT1NYXRoLm1pbihnZSxFZSkpfSksZ2U8MS8wJiZnZT49MCYmKGY9bC5zdWJzdHJpbmcoMCxnZSsxKSl9aWYoZD10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGYsT1llKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLCJfIiE9PWQucmF3LnNsaWNlKC0xKSYmKGllPWQucmF3'@;
put 'LnNsaWNlKC0xKSksVz0hMCxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihsKXtjb25zdCBnZT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2wuY2hhckNvZGVBdCgwKTtpZih0aGlz'@;
put 'Lm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGdlKTticmVha310aHJvdyBuZXcgRXJyb3IoZ2UpfX1yZXR1cm4gYX19Y2xhc3MgaVR7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fGw0fWNvZGUobCxhLGQpe2NvbnN0IGg9KGF8fCIiKS5tYXRjaCgvXFMqLylbMF07aWYodGhp'@;
put 'cy5vcHRpb25zLmhpZ2hsaWdodCl7Y29uc3QgZj10aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KGwsaCk7bnVsbCE9ZiYmZiE9PWwmJihkPSEwLGw9Zil9cmV0dXJuIGw9bC5yZXBsYWNlKC9cbiQvLCIiKSsiXG4iLGg/JzxwcmU+PGNvZGUgY2xhc3M9IicrdGhpcy5vcHRpb25zLmxhbmdQcmVmaXgr'@;
put 'U3UoaCkrJyI+JysoZD9sOlN1KGwsITApKSsiPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhkP2w6U3UobCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4ifWJsb2NrcXVvdGUobCl7cmV0dXJuYDxibG9ja3F1b3RlPlxuJHtsfTwvYmxvY2txdW90ZT5cbmB9aHRtbChsLGEpe3JldHVybiBs'@;
put 'fWhlYWRpbmcobCxhLGQsaCl7cmV0dXJuIHRoaXMub3B0aW9ucy5oZWFkZXJJZHM/YDxoJHthfSBpZD0iJHt0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4K2guc2x1ZyhkKX0iPiR7bH08L2gke2F9PlxuYDpgPGgke2F9PiR7bH08L2gke2F9PlxuYH1ocigpe3JldHVybiB0aGlzLm9wdGlvbnMu'@;
put 'eGh0bWw/Ijxoci8+XG4iOiI8aHI+XG4ifWxpc3QobCxhLGQpe2NvbnN0IGg9YT8ib2wiOiJ1bCI7cmV0dXJuIjwiK2grKGEmJjEhPT1kPycgc3RhcnQ9IicrZCsnIic6IiIpKyI+XG4iK2wrIjwvIitoKyI+XG4ifWxpc3RpdGVtKGwpe3JldHVybmA8bGk+JHtsfTwvbGk+XG5gfWNoZWNrYm94'@;
put 'KGwpe3JldHVybiI8aW5wdXQgIisobD8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giJysodGhpcy5vcHRpb25zLnhodG1sPyIgLyI6IiIpKyI+ICJ9cGFyYWdyYXBoKGwpe3JldHVybmA8cD4ke2x9PC9wPlxuYH10YWJsZShsLGEpe3JldHVybiBhJiYoYT1g'@;
put 'PHRib2R5PiR7YX08L3Rib2R5PmApLCI8dGFibGU+XG48dGhlYWQ+XG4iK2wrIjwvdGhlYWQ+XG4iK2ErIjwvdGFibGU+XG4ifXRhYmxlcm93KGwpe3JldHVybmA8dHI+XG4ke2x9PC90cj5cbmB9dGFibGVjZWxsKGwsYSl7Y29uc3QgZD1hLmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKGEuYWxp'@;
put 'Z24/YDwke2R9IGFsaWduPSIke2EuYWxpZ259Ij5gOmA8JHtkfT5gKStsK2A8LyR7ZH0+XG5gfXN0cm9uZyhsKXtyZXR1cm5gPHN0cm9uZz4ke2x9PC9zdHJvbmc+YH1lbShsKXtyZXR1cm5gPGVtPiR7bH08L2VtPmB9Y29kZXNwYW4obCl7cmV0dXJuYDxjb2RlPiR7bH08L2NvZGU+YH1icigp'@;
put 'e3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxici8+IjoiPGJyPiJ9ZGVsKGwpe3JldHVybmA8ZGVsPiR7bH08L2RlbD5gfWxpbmsobCxhLGQpe2lmKG51bGw9PT0obD1Vc2UodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD0n'@;
put 'PGEgaHJlZj0iJytsKyciJztyZXR1cm4gYSYmKGgrPScgdGl0bGU9IicrYSsnIicpLGgrPSI+IitkKyI8L2E+IixofWltYWdlKGwsYSxkKXtpZihudWxsPT09KGw9VXNlKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxsKSkpcmV0dXJuIGQ7bGV0IGg9YDxpbWcg'@;
put 'c3JjPSIke2x9IiBhbHQ9IiR7ZH0iYDtyZXR1cm4gYSYmKGgrPWAgdGl0bGU9IiR7YX0iYCksaCs9dGhpcy5vcHRpb25zLnhodG1sPyIvPiI6Ij4iLGh9dGV4dChsKXtyZXR1cm4gbH19Y2xhc3MgdlV7c3Ryb25nKGwpe3JldHVybiBsfWVtKGwpe3JldHVybiBsfWNvZGVzcGFuKGwpe3JldHVy'@;
put 'biBsfWRlbChsKXtyZXR1cm4gbH1odG1sKGwpe3JldHVybiBsfXRleHQobCl7cmV0dXJuIGx9bGluayhsLGEsZCl7cmV0dXJuIiIrZH1pbWFnZShsLGEsZCl7cmV0dXJuIiIrZH1icigpe3JldHVybiIifX1jbGFzcyBfVXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2Vlbj17fX1zZXJpYWxpemUobCl7'@;
put 'cmV0dXJuIGwudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgvPFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUmKCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxhY2UoL1xzL2csIi0iKX1nZXROZXh0U2Fm'@;
put 'ZVNsdWcobCxhKXtsZXQgZD1sLGg9MDtpZih0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoZCkpe2g9dGhpcy5zZWVuW2xdO2Rve2grKyxkPWwrIi0iK2h9d2hpbGUodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKX1yZXR1cm4gYXx8KHRoaXMuc2VlbltsXT1oLHRoaXMuc2VlbltkXT0wKSxk'@;
put 'fXNsdWcobCxhPXt9KXtjb25zdCBkPXRoaXMuc2VyaWFsaXplKGwpO3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhkLGEuZHJ5cnVuKX19Y2xhc3MgQWh7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fGw0LHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVy'@;
put 'ZXJ8fG5ldyBpVCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyB2VSx0aGlzLnNsdWdnZXI9bmV3IF9VfXN0YXRpYyBwYXJzZShsLGEpe3JldHVybiBuZXcgQWgoYSkucGFy'@;
put 'c2UobCl9c3RhdGljIHBhcnNlSW5saW5lKGwsYSl7cmV0dXJuIG5ldyBBaChhKS5wYXJzZUlubGluZShsKX1wYXJzZShsLGE9ITApe2xldCBoLGYsXyxULFcsaWUsZ2Usd2UsRWUsWmUsb3QsZXQseXQsa3QsU3QsUXQscm4sdm4sTm4sZD0iIjtjb25zdCBjcj1sLmxlbmd0aDtmb3IoaD0wO2g8'@;
put 'Y3I7aCsrKWlmKFplPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW1plLnR5cGVdJiYoTm49dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW1plLnR5'@;
put 'cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxaZSksITEhPT1Obnx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMoWmUudHlwZSkpKWQrPU5ufHwiIjtlbHNlIHN3aXRjaCha'@;
put 'ZS50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjpkKz10aGlzLnJlbmRlcmVyLmhyKCk7Y29udGludWU7Y2FzZSJoZWFkaW5nIjpkKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShaZS50b2tlbnMpLFplLmRlcHRoLHpzZSh0aGlzLnBhcnNlSW5saW5l'@;
put 'KFplLnRva2Vucyx0aGlzLnRleHRSZW5kZXJlcikpLHRoaXMuc2x1Z2dlcik7Y29udGludWU7Y2FzZSJjb2RlIjpkKz10aGlzLnJlbmRlcmVyLmNvZGUoWmUudGV4dCxaZS5sYW5nLFplLmVzY2FwZWQpO2NvbnRpbnVlO2Nhc2UidGFibGUiOmZvcih3ZT0iIixnZT0iIixUPVplLmhlYWRlci5s'@;
put 'ZW5ndGgsZj0wO2Y8VDtmKyspZ2UrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoWmUuaGVhZGVyW2ZdLnRva2Vucykse2hlYWRlcjohMCxhbGlnbjpaZS5hbGlnbltmXX0pO2Zvcih3ZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhnZSksRWU9IiIsVD1aZS5yb3dz'@;
put 'Lmxlbmd0aCxmPTA7ZjxUO2YrKyl7Zm9yKGllPVplLnJvd3NbZl0sZ2U9IiIsVz1pZS5sZW5ndGgsXz0wO188VztfKyspZ2UrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoaWVbX10udG9rZW5zKSx7aGVhZGVyOiExLGFsaWduOlplLmFsaWduW19dfSk7RWUrPXRo'@;
put 'aXMucmVuZGVyZXIudGFibGVyb3coZ2UpfWQrPXRoaXMucmVuZGVyZXIudGFibGUod2UsRWUpO2NvbnRpbnVlO2Nhc2UiYmxvY2txdW90ZSI6RWU9dGhpcy5wYXJzZShaZS50b2tlbnMpLGQrPXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShFZSk7Y29udGludWU7Y2FzZSJsaXN0Ijpmb3Iob3Q9'@;
put 'WmUub3JkZXJlZCxldD1aZS5zdGFydCx5dD1aZS5sb29zZSxUPVplLml0ZW1zLmxlbmd0aCxFZT0iIixmPTA7ZjxUO2YrKylTdD1aZS5pdGVtc1tmXSxRdD1TdC5jaGVja2VkLHJuPVN0LnRhc2ssa3Q9IiIsU3QudGFzayYmKHZuPXRoaXMucmVuZGVyZXIuY2hlY2tib3goUXQpLHl0P1N0LnRv'@;
put 'a2Vucy5sZW5ndGg+MCYmInBhcmFncmFwaCI9PT1TdC50b2tlbnNbMF0udHlwZT8oU3QudG9rZW5zWzBdLnRleHQ9dm4rIiAiK1N0LnRva2Vuc1swXS50ZXh0LFN0LnRva2Vuc1swXS50b2tlbnMmJlN0LnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAmJiJ0ZXh0Ij09PVN0LnRva2Vuc1swXS50'@;
put 'b2tlbnNbMF0udHlwZSYmKFN0LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD12bisiICIrU3QudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0KSk6U3QudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6dm59KTprdCs9dm4pLGt0Kz10aGlzLnBhcnNlKFN0LnRva2Vucyx5dCksRWUrPXRo'@;
put 'aXMucmVuZGVyZXIubGlzdGl0ZW0oa3Qscm4sUXQpO2QrPXRoaXMucmVuZGVyZXIubGlzdChFZSxvdCxldCk7Y29udGludWU7Y2FzZSJodG1sIjpkKz10aGlzLnJlbmRlcmVyLmh0bWwoWmUudGV4dCxaZS5ibG9jayk7Y29udGludWU7Y2FzZSJwYXJhZ3JhcGgiOmQrPXRoaXMucmVuZGVyZXIu'@;
put 'cGFyYWdyYXBoKHRoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKSk7Y29udGludWU7Y2FzZSJ0ZXh0Ijpmb3IoRWU9WmUudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKTpaZS50ZXh0O2grMTxjciYmInRleHQiPT09bFtoKzFdLnR5cGU7KVplPWxbKytoXSxFZSs9IlxuIisoWmUu'@;
put 'dG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKTpaZS50ZXh0KTtkKz1hP3RoaXMucmVuZGVyZXIucGFyYWdyYXBoKEVlKTpFZTtjb250aW51ZTtkZWZhdWx0Ontjb25zdCBEcj0nVG9rZW4gd2l0aCAiJytaZS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0'@;
put 'aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihEcik7dGhyb3cgbmV3IEVycm9yKERyKX19cmV0dXJuIGR9cGFyc2VJbmxpbmUobCxhKXthPWF8fHRoaXMucmVuZGVyZXI7bGV0IGgsZixfLGQ9IiI7Y29uc3QgVD1sLmxlbmd0aDtmb3IoaD0wO2g8VDtoKyspaWYoZj1sW2hd'@;
put 'LHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdJiYoXz10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZi50eXBlXS5jYWxsKHtwYXJzZXI6dGhp'@;
put 'c30sZiksITEhPT1ffHwhWyJlc2NhcGUiLCJodG1sIiwibGluayIsImltYWdlIiwic3Ryb25nIiwiZW0iLCJjb2Rlc3BhbiIsImJyIiwiZGVsIiwidGV4dCJdLmluY2x1ZGVzKGYudHlwZSkpKWQrPV98fCIiO2Vsc2Ugc3dpdGNoKGYudHlwZSl7Y2FzZSJlc2NhcGUiOmNhc2UidGV4dCI6ZCs9'@;
put 'YS50ZXh0KGYudGV4dCk7YnJlYWs7Y2FzZSJodG1sIjpkKz1hLmh0bWwoZi50ZXh0KTticmVhaztjYXNlImxpbmsiOmQrPWEubGluayhmLmhyZWYsZi50aXRsZSx0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImltYWdlIjpkKz1hLmltYWdlKGYuaHJlZixmLnRpdGxl'@;
put 'LGYudGV4dCk7YnJlYWs7Y2FzZSJzdHJvbmciOmQrPWEuc3Ryb25nKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiZW0iOmQrPWEuZW0odGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJjb2Rlc3BhbiI6ZCs9YS5jb2Rlc3BhbihmLnRleHQp'@;
put 'O2JyZWFrO2Nhc2UiYnIiOmQrPWEuYnIoKTticmVhaztjYXNlImRlbCI6ZCs9YS5kZWwodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7ZGVmYXVsdDp7Y29uc3QgVz0nVG9rZW4gd2l0aCAiJytmLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25z'@;
put 'LnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFcpO3Rocm93IG5ldyBFcnJvcihXKX19cmV0dXJuIGR9fWNsYXNzIGN3e2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxsNH1wcmVwcm9jZXNzKGwpe3JldHVybiBsfXBvc3Rwcm9jZXNzKGwpe3JldHVybiBsfX1GMChjdywi'@;
put 'cGFzc1Rocm91Z2hIb29rcyIsbmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKSk7dmFyIGJVPW5ldyBXZWFrU2V0LEdzZT1uZXcgV2Vha1NldDtmdW5jdGlvbiAkc2UoYyxsKXtyZXR1cm4oYSxkLGgpPT57ImZ1bmN0aW9uIj09dHlwZW9mIGQmJihoPWQsZD1udWxsKTtjb25z'@;
put 'dCBmPXsuLi5kfTtkPXsuLi50aGlzLmRlZmF1bHRzLC4uLmZ9O2NvbnN0IF89Z1UodGhpcyxHc2UsRlllKS5jYWxsKHRoaXMsZC5zaWxlbnQsZC5hc3luYyxoKTtpZih0eXBlb2YgYT4idSJ8fG51bGw9PT1hKXJldHVybiBfKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBp'@;
put 'cyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIF8obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKGZ1'@;
put 'bmN0aW9uIExZZShjLGwpeyFjfHxjLnNpbGVudHx8KGwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3Jl'@;
put 'IGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy91c2luZ19wcm8jYXN5bmMiKSwoYy5zYW5pdGl6ZXx8Yy5zYW5pdGl6ZXIpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjcu'@;
put 'MCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMiKSwoYy5oaWdobGlnaHR8fCJsYW5ndWFnZS0iIT09Yy5sYW5nUHJlZml4'@;
put 'KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGlnaGxpZ2h0IGFuZCBsYW5nUHJlZml4IHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2Ug'@;
put 'aHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWhpZ2hsaWdodC4iKSxjLm1hbmdsZSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogbWFuZ2xlIHBhcmFtZXRlciBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFu'@;
put 'ZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJuaW5nLCBpbnN0YWxsIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1tYW5nbGUsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge21hbmdsZTogZmFsc2V9YC4iKSxjLmJhc2VVcmwmJmNv'@;
put 'bnNvbGUud2FybigibWFya2VkKCk6IGJhc2VVcmwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3Bh'@;
put 'Y2thZ2UvbWFya2VkLWJhc2UtdXJsLiIpLGMuc21hcnR5cGFudHMmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNtYXJ0eXBhbnRzIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRo'@;
put 'ZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1zbWFydHlwYW50cy4iKSxjLnhodG1sJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiB4aHRtbCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQg'@;
put 'bm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQteGh0bWwuIiksKGMuaGVhZGVySWRzfHxjLmhlYWRlclByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhlYWRl'@;
put 'cklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgIGh0dHBz'@;
put 'Oi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVhZGluZy1pZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpKX0oZCxoKSxkLmhvb2tzJiYoZC5ob29rcy5vcHRpb25zPWQpLGgpe2NvbnN0IFQ9ZC5oaWdobGlnaHQ7bGV0IFc7dHJ5e2Qu'@;
put 'aG9va3MmJihhPWQuaG9va3MucHJlcHJvY2VzcyhhKSksVz1jKGEsZCl9Y2F0Y2god2Upe3JldHVybiBfKHdlKX1jb25zdCBpZT13ZT0+e2xldCBFZTtpZighd2UpdHJ5e2Qud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKFcsZC53YWxrVG9rZW5zKSxFZT1sKFcsZCksZC5ob29rcyYmKEVl'@;
put 'PWQuaG9va3MucG9zdHByb2Nlc3MoRWUpKX1jYXRjaChaZSl7d2U9WmV9cmV0dXJuIGQuaGlnaGxpZ2h0PVQsd2U/Xyh3ZSk6aChudWxsLEVlKX07aWYoIVR8fFQubGVuZ3RoPDN8fChkZWxldGUgZC5oaWdobGlnaHQsIVcubGVuZ3RoKSlyZXR1cm4gaWUoKTtsZXQgZ2U9MDtyZXR1cm4gdGhp'@;
put 'cy53YWxrVG9rZW5zKFcsd2U9PnsiY29kZSI9PT13ZS50eXBlJiYoZ2UrKyxzZXRUaW1lb3V0KCgpPT57VCh3ZS50ZXh0LHdlLmxhbmcsKEVlLFplKT0+e2lmKEVlKXJldHVybiBpZShFZSk7bnVsbCE9WmUmJlplIT09d2UudGV4dCYmKHdlLnRleHQ9WmUsd2UuZXNjYXBlZD0hMCksZ2UtLSww'@;
put 'PT09Z2UmJmllKCl9KX0sMCkpfSksdm9pZCgwPT09Z2UmJmllKCkpfWlmKGQuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkLmhvb2tzP2QuaG9va3MucHJlcHJvY2VzcyhhKTphKS50aGVuKFQ9PmMoVCxkKSkudGhlbihUPT5kLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxr'@;
put 'VG9rZW5zKFQsZC53YWxrVG9rZW5zKSkudGhlbigoKT0+VCk6VCkudGhlbihUPT5sKFQsZCkpLnRoZW4oVD0+ZC5ob29rcz9kLmhvb2tzLnBvc3Rwcm9jZXNzKFQpOlQpLmNhdGNoKF8pO3RyeXtkLmhvb2tzJiYoYT1kLmhvb2tzLnByZXByb2Nlc3MoYSkpO2NvbnN0IFQ9YyhhLGQpO2Qud2Fs'@;
put 'a1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKFQsZC53YWxrVG9rZW5zKTtsZXQgVz1sKFQsZCk7cmV0dXJuIGQuaG9va3MmJihXPWQuaG9va3MucG9zdHByb2Nlc3MoVykpLFd9Y2F0Y2goVCl7cmV0dXJuIF8oVCl9fX1mdW5jdGlvbiBGWWUoYyxsLGEpe3JldHVybiBkPT57aWYoZC5tZXNzYWdl'@;
put 'Kz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGMpe2NvbnN0IGg9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIrU3UoZC5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1cm4gbD9Qcm9taXNlLnJlc29sdmUoaCk6'@;
put 'YT92b2lkIGEobnVsbCxoKTpofWlmKGwpcmV0dXJuIFByb21pc2UucmVqZWN0KGQpO2lmKCFhKXRocm93IGQ7YShkKX19Y29uc3QgWmc9bmV3IGNsYXNzIFBZZXtjb25zdHJ1Y3RvciguLi5sKXtIc2UodGhpcyxHc2UpLEhzZSh0aGlzLGJVKSxGMCh0aGlzLCJkZWZhdWx0cyIse2FzeW5jOiEx'@;
put 'LGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5p'@;
put 'dGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfSksRjAodGhpcywib3B0aW9ucyIsdGhpcy5zZXRPcHRpb25zKSxGMCh0aGlzLCJwYXJzZSIsZ1UodGhpcyxiVSwkc2UpLmNhbGwodGhp'@;
put 'cyxraC5sZXgsQWgucGFyc2UpKSxGMCh0aGlzLCJwYXJzZUlubGluZSIsZ1UodGhpcyxiVSwkc2UpLmNhbGwodGhpcyxraC5sZXhJbmxpbmUsQWgucGFyc2VJbmxpbmUpKSxGMCh0aGlzLCJQYXJzZXIiLEFoKSxGMCh0aGlzLCJwYXJzZXIiLEFoLnBhcnNlKSxGMCh0aGlzLCJSZW5kZXJlciIs'@;
put 'aVQpLEYwKHRoaXMsIlRleHRSZW5kZXJlciIsdlUpLEYwKHRoaXMsIkxleGVyIixraCksRjAodGhpcywibGV4ZXIiLGtoLmxleCksRjAodGhpcywiVG9rZW5pemVyIixyVCksRjAodGhpcywiU2x1Z2dlciIsX1UpLEYwKHRoaXMsIkhvb2tzIixjdyksdGhpcy51c2UoLi4ubCl9d2Fsa1Rva2Vu'@;
put 'cyhsLGEpe2xldCBkPVtdO2Zvcihjb25zdCBoIG9mIGwpc3dpdGNoKGQ9ZC5jb25jYXQoYS5jYWxsKHRoaXMsaCkpLGgudHlwZSl7Y2FzZSJ0YWJsZSI6Zm9yKGNvbnN0IGYgb2YgaC5oZWFkZXIpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoZi50b2tlbnMsYSkpO2Zvcihjb25zdCBmIG9m'@;
put 'IGgucm93cylmb3IoY29uc3QgXyBvZiBmKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKF8udG9rZW5zLGEpKTticmVhaztjYXNlImxpc3QiOmQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGguaXRlbXMsYSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlz'@;
put 'LmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdLmZvckVhY2goZj0+e2Q9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGhb'@;
put 'Zl0sYSkpfSk6aC50b2tlbnMmJihkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLnRva2VucyxhKSkpfXJldHVybiBkfXVzZSguLi5sKXtjb25zdCBhPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGwuZm9yRWFjaChkPT57'@;
put 'Y29uc3QgaD17Li4uZH07aWYoaC5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxoLmFzeW5jfHwhMSxkLmV4dGVuc2lvbnMmJihkLmV4dGVuc2lvbnMuZm9yRWFjaChmPT57aWYoIWYubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoZi5yZW5kZXJl'@;
put 'cil7Y29uc3QgXz1hLnJlbmRlcmVyc1tmLm5hbWVdO2EucmVuZGVyZXJzW2YubmFtZV09Xz9mdW5jdGlvbiguLi5UKXtsZXQgVz1mLnJlbmRlcmVyLmFwcGx5KHRoaXMsVCk7cmV0dXJuITE9PT1XJiYoVz1fLmFwcGx5KHRoaXMsVCkpLFd9OmYucmVuZGVyZXJ9aWYoZi50b2tlbml6ZXIpe2lm'@;
put 'KCFmLmxldmVsfHwiYmxvY2siIT09Zi5sZXZlbCYmImlubGluZSIhPT1mLmxldmVsKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2FbZi5sZXZlbF0/YVtmLmxldmVsXS51bnNoaWZ0KGYudG9rZW5pemVyKTphW2YubGV2ZWxd'@;
put 'PVtmLnRva2VuaXplcl0sZi5zdGFydCYmKCJibG9jayI9PT1mLmxldmVsP2Euc3RhcnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChmLnN0YXJ0KTphLnN0YXJ0QmxvY2s9W2Yuc3RhcnRdOiJpbmxpbmUiPT09Zi5sZXZlbCYmKGEuc3RhcnRJbmxpbmU/YS5zdGFydElubGluZS5wdXNoKGYuc3Rh'@;
put 'cnQpOmEuc3RhcnRJbmxpbmU9W2Yuc3RhcnRdKSl9Zi5jaGlsZFRva2VucyYmKGEuY2hpbGRUb2tlbnNbZi5uYW1lXT1mLmNoaWxkVG9rZW5zKX0pLGguZXh0ZW5zaW9ucz1hKSxkLnJlbmRlcmVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBpVCh0aGlzLmRlZmF1bHRz'@;
put 'KTtmb3IoY29uc3QgXyBpbiBkLnJlbmRlcmVyKXtjb25zdCBUPWZbX107ZltfXT0oLi4uVyk9PntsZXQgaWU9ZC5yZW5kZXJlcltfXS5hcHBseShmLFcpO3JldHVybiExPT09aWUmJihpZT1ULmFwcGx5KGYsVykpLGllfX1oLnJlbmRlcmVyPWZ9aWYoZC50b2tlbml6ZXIpe2NvbnN0IGY9dGhp'@;
put 'cy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyByVCh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgXyBpbiBkLnRva2VuaXplcil7Y29uc3QgVD1mW19dO2ZbX109KC4uLlcpPT57bGV0IGllPWQudG9rZW5pemVyW19dLmFwcGx5KGYsVyk7cmV0dXJuITE9PT1pZSYmKGllPVQuYXBwbHkoZixXKSks'@;
put 'aWV9fWgudG9rZW5pemVyPWZ9aWYoZC5ob29rcyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgY3c7Zm9yKGNvbnN0IF8gaW4gZC5ob29rcyl7Y29uc3QgVD1mW19dO2ZbX109Y3cucGFzc1Rocm91Z2hIb29rcy5oYXMoXyk/Vz0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0'@;
put 'dXJuIFByb21pc2UucmVzb2x2ZShkLmhvb2tzW19dLmNhbGwoZixXKSkudGhlbihnZT0+VC5jYWxsKGYsZ2UpKTtjb25zdCBpZT1kLmhvb2tzW19dLmNhbGwoZixXKTtyZXR1cm4gVC5jYWxsKGYsaWUpfTooLi4uVyk9PntsZXQgaWU9ZC5ob29rc1tfXS5hcHBseShmLFcpO3JldHVybiExPT09'@;
put 'aWUmJihpZT1ULmFwcGx5KGYsVykpLGllfX1oLmhvb2tzPWZ9aWYoZC53YWxrVG9rZW5zKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztoLndhbGtUb2tlbnM9ZnVuY3Rpb24oXyl7bGV0IFQ9W107cmV0dXJuIFQucHVzaChkLndhbGtUb2tlbnMuY2FsbCh0aGlzLF8pKSxmJiYo'@;
put 'VD1ULmNvbmNhdChmLmNhbGwodGhpcyxfKSkpLFR9fXRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4uaH19KSx0aGlzfXNldE9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4ubH0sdGhpc319KGw0KTtmdW5jdGlvbiBwYShjLGwsYSl7'@;
put 'cmV0dXJuIFpnLnBhcnNlKGMsbCxhKX1wYS5vcHRpb25zPXBhLnNldE9wdGlvbnM9ZnVuY3Rpb24oYyl7cmV0dXJuIFpnLnNldE9wdGlvbnMoYyksTnNlKHBhLmRlZmF1bHRzPVpnLmRlZmF1bHRzKSxwYX0scGEuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24gbVUoKXtyZXR1cm57YXN5bmM6ITEsYmFz'@;
put 'ZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXpl'@;
put 'OiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxwYS5kZWZhdWx0cz1sNCxwYS51c2U9ZnVuY3Rpb24oLi4uYyl7cmV0dXJuIFpnLnVzZSguLi5jKSxOc2UocGEuZGVmYXVsdHM9WmcuZGVm'@;
put 'YXVsdHMpLHBhfSxwYS53YWxrVG9rZW5zPWZ1bmN0aW9uKGMsbCl7cmV0dXJuIFpnLndhbGtUb2tlbnMoYyxsKX0scGEucGFyc2VJbmxpbmU9WmcucGFyc2VJbmxpbmUscGEuUGFyc2VyPUFoLHBhLnBhcnNlcj1BaC5wYXJzZSxwYS5SZW5kZXJlcj1pVCxwYS5UZXh0UmVuZGVyZXI9dlUscGEu'@;
put 'TGV4ZXI9a2gscGEubGV4ZXI9a2gubGV4LHBhLlRva2VuaXplcj1yVCxwYS5TbHVnZ2VyPV9VLHBhLkhvb2tzPWN3LHBhLnBhcnNlPXBhO2NvbnN0IE5ZZT1bIm1hcmtkb3duQ2FyZCJdO2Z1bmN0aW9uIFZZZShjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDgpfWxldCBCWWU9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmFncmVlQ2hlY2tlZD0hMSx0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuZXVsYV9tYXJrZG93bj0nXG5MaWNlbmNlIEFncmVlbWVudCBmb3IgRGF0YSBDb250cm9sbGVy'@;
put 'IGZvciBTQVNceGFlXG49PT09PT09PT09PT09PT09PT09PVxuXG5Db3B5cmlnaHQgKGMpIEJvd2UgSU8gTHRkXG5cbkRhdGEgQ29udHJvbGxlciBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBieSA0R0wgQXBwcywgYSBicmFuZCBvd25lZCBieSBCb3dlIElPIEx0ZCwgYSBVSyBMaW1pdGVkIENv'@;
put 'bXBhbnkgaGVhZHF1YXJ0ZWQgaW4gMjkgT2xkZmllbGQgUmQsIEN1bWJyaWEsIHJlZ2lzdGVyZWQgYXQgQ29tcGFuaWVzIEhvdXNlIHdpdGggY29tcGFueSBudW1iZXIgMDg3NzcxNzEsIFZBVCBudW1iZXI6IDIwMzkxNDI0MFxuXG5UaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBhcHBs'@;
put 'aWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJuYXRpb25hbCB0cmVhdGllcywgYW5kIGR1YWwtbGljZW5zZWQgXHUyMDEzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdXIgdXNlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLCBtZWFuaW5nIGludGVuZGVkIGZvciBvciByZXN1'@;
put 'bHRpbmcgaW4gY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBvciBub3QuXG5cbklmIHlvdXIgdXNlIGlzIHN0cmljdGx5IHBlcnNvbmFsIG9yIHNvbGVseSBmb3IgZXZhbHVhdGlvbiBwdXJwb3NlcywgbWVhbmluZyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRl'@;
put 'c3RpbmcgdGhlIHN1aXRhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5kIHVzZWZ1bG5lc3Mgb2YgdGhpcyBzb2Z0d2FyZSBvdXRzaWRlIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB5b3UgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGluY2x1ZGVkIGluIHRoZSAibGljZW5jZS1u'@;
put 'b24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZCIgZmlsZSBhdmFpbGFibGUgaGVyZTogIGh0dHBzOi8vZ2l0LmRhdGFjb250cm9sbGVyLmlvL2RjL2RjL3NyYy9icmFuY2gvbWFpbi9saWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kXG5cbllvdXIgdXNlIG9mIHRo'@;
put 'aXMgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgaW5jbHVkZWQgaW4gYW4gYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudC5cblxuSW4gYW55IGNhc2UsIHlvdSBtdXN0IG5vdCBtYWtlIGFueSBzdWNoIHVzZSBvZiB0aGlzIHNvZnR3'@;
put 'YXJlIGFzIHRvIGRldmVsb3Agc29mdHdhcmUgd2hpY2ggbWF5IGJlIGNvbnNpZGVyZWQgY29tcGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLlxuXG5VTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIDRHTCBBUFBTIFBST1ZJREVTIFRISVMgU09GVFdBUkUgT04gQU4gIkFTIElT'@;
put 'IiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBTSEFMTCA0R0wgQVBQUyBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIERJUkVDVCwg'@;
put 'SU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcgRlJPTSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLlxuXG5cbid9bmdPbkluaXQoKXtjb25zdCBhPXBhLnNldE9wdGlvbnMo'@;
put 'e30pO3RoaXMuZXVsYV9tYXJrZG93bj1hLnBhcnNlKHRoaXMuZXVsYV9tYXJrZG93bil9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMubWFya2Rvd25DYXJkJiZ0aGlzLm1hcmtkb3duQ2FyZC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50'@;
put 'KCJzY3JvbGwiKSl9KX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5hZ3JlZUNoZWNrZWQmJih0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVnaXN0ZXJ1c2VyIix7U0FTQ29udHJvbFRhYmxlOlt7QUND'@;
put 'RVBURUQ6InllcyJ9XX0pLnRoZW4oZD0+e2QucmV0dXJuJiZkLnJldHVyblswXSYmIlNVQ0NFU1MiPT09ZC5yZXR1cm5bMF0uTVNHJiZsb2NhdGlvbi5yZWxvYWQoKX0pLmNhdGNoKGQ9PmQpLmZpbmFsbHkoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5hZ3JlZUJveExvY2tlZD0hMSx0aGlz'@;
put 'LmFncmVlQ2xpY2tlZD0hMSx0aGlzLmFncmVlQ2hlY2tlZD0hMX0sMWUzKX0pKX1vbkNhcmRCbG9ja1Njcm9sbChhKXtpZighdGhpcy5hZ3JlZUNsaWNrZWQpe2xldCBkPWEudGFyZ2V0O2QmJih0aGlzLmFncmVlQm94TG9ja2VkPSEoZC5zY3JvbGxUb3ArZC5vZmZzZXRIZWlnaHQ+PWQuc2Ny'@;
put 'b2xsSGVpZ2h0LTIwKSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdGVybXMiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhOWWUsNSks'@;
put 'MiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5tYXJrZG93bkNhcmQ9aC5maXJzdCl9fSxkZWNsczoxMyx2YXJzOjYsY29uc3RzOltbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJpbm5lckhUTUwiLCJzY3JvbGwiXSxbIm1hcmtkb3duQ2FyZCIsIiJdLFsx'@;
put 'LCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImFjY2VwdC1jaGVja2JveCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbImNscklubGluZSIsInNtYWxsIiw0'@;
put 'LCJuZ0lmIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxOZSgyLCIgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgIiksbWUoMywicCIpLE5lKDQsIiBXZWxjb21lIHRvIERhdGEgQ29udHJvbGxl'@;
put 'ciBmb3IgU0FTISBQbGVhc2UgcmV2aWV3IGFuZCBhY2NlcHQgYWdyZWVtZW50IGJlbG93IGluIG9yZGVyIHRvIHByb2NlZWQuICIpLHllKCkoKSxtZSg1LCJkaXYiLDIsMykseHQoInNjcm9sbCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DYXJkQmxvY2tTY3JvbGwoZil9KSx5ZSgpLG1lKDcs'@;
put 'ImRpdiIsNCkoOCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDUpKDksImlucHV0Iiw2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYWdyZWVDaGVja2VkPWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnRlcm1zQWdyZWVDaGFuZ2UoKX0pLHllKCksbWUo'@;
put 'MTAsImxhYmVsIiksTmUoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIikseWUoKSgpLFFlKDEyLFZZZSwxLDAsImNsci1zcGlubmVyIiw3KSx5ZSgpKCkpLDImYSYmKENlKDUpLFJlKCJpbm5lckhUTUwiLGQuZXVsYV9tYXJrZG93bixxMiksQ2UoMyks'@;
put 'ZHIoImRpc2FibGVkIixkLmFncmVlQm94TG9ja2VkKSxDZSgxKSxSZSgibmdNb2RlbCIsZC5hZ3JlZUNoZWNrZWQpKCJkaXNhYmxlZCIsZC5hZ3JlZUJveExvY2tlZCksQ2UoMyksUmUoIm5nSWYiLGQuYWdyZWVCb3hMb2NrZWQmJmQuYWdyZWVDbGlja2VkKSl9LGRlcGVuZGVuY2llczpbWmks'@;
put 'UzAsQnMsT3MsVXMsRDAsVDAsdTJdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZjVmNmZmfS5jbHItY2hlY2tib3gtd3JhcHBlci5kaXNhYmxlZFtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNX0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17'@;
put 'aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXJnaW4tdG9wOjB9LmNhcmRbX25nY29udGVudC0lQ09NUCVdICAgLmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTtvdmVyZmxvdzphdXRvO2JhY2tncm91bmQtY29sb3I6I2Y0ZjRmNH0u'@;
put 'YWNjZXB0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMTVweH0iXX0pLGN9KSgpO2Z1bmN0aW9uIGpZZShjLGwpezEmYyYmKG1lKDAsInAiLDI3KSxOZSgxLCIgTGljZW5jZSBrZXkgaXMgaW52YWxpZC4gV2UgY2FuJ3QgcHJvdmlkZSB5b3UgbW9yZSBkZXRhaWxz'@;
put 'IGF0IHRoZSBtb21lbnQgIikseWUoKSl9ZnVuY3Rpb24gelllKGMsbCl7aWYoMSZjJiZxdCgwLCJwIiwyOCksMiZjKXtjb25zdCBhPVZlKDMpO1JlKCJpbm5lckhUTUwiLGEubGljZW5zZUVycm9yc1thLmtleUVycm9yXSxxMil9fWZ1bmN0aW9uIFVZZShjLGwpe2lmKDEmYyYmKG1lKDAsInAi'@;
put 'KSgxLCJzdHJvbmciKSxOZSgyLCJEZXRhaWxzOiIpLHllKCksTmUoMykseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDMpLGdyKCIgIixhLmVycm9yRGV0YWlscywiIil9fWZ1bmN0aW9uIFpZZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsalllLDIsMCwicCIsMjUpLFFlKDIselllLDEs'@;
put 'MSwicCIsMjYpLFFlKDMsVVllLDQsMSwicCIsMSksVXIoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIiwhYS5rZXlFcnJvciksQ2UoMSksUmUoIm5nSWYiLGEua2V5RXJyb3IpLENlKDEpLFJlKCJuZ0lmIixhLmVycm9yRGV0YWlscyl9fWZ1bmN0aW9uIFlZZShjLGwpezEm'@;
put 'YyYmKEJyKDApLG1lKDEsInAiLDI3KSxOZSgyLCIgVGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIHJlYWNoZWQgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbmNlLiBQbGVhc2UgY29udGFjdCAiKSxxdCgzLCJjb250YWN0LWxpbmsiLDI5KSxOZSg0LCIgb3IgeW91ciBy'@;
put 'ZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZXMgZm9yIHRoaXMgcHJvZHVjdC4gIikseWUoKSxVcigpKX1mdW5jdGlvbiBXWWUoYyxsKXsxJmMmJihCcigwKSxtZSgxLCJwIiwyNyksTmUoMiwiIFVwZGF0ZSB0aGUgbGljZW5zZSBrZXkgYnkgdXBsb2FkaW5nIHRoZSBsaWNl'@;
put 'bmNlIGZpbGUgb3IgYnkgcGFzdGluZyBhIGxpY2Vuc2Uga2V5IGFuZCBhY3RpdmF0aW9uIGtleSBpbiB0aGUgaW5wdXRzIGJlbG93LiAiKSx5ZSgpLFVyKCkpfWZ1bmN0aW9uIEdZZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj'@;
put 'aXQsZD1sLmluZGV4LGg9VmUoMik7ZHIoIm1pc3NrZXkiLGgubWlzc21hdGNoZWRLZXkmJmgubWlzc21hdGNoZWRLZXk9PT1hKSxDZSgxKSxqYygiICIsYSwiIixkPT09KG51bGw9PWguc3lzc2l0ZS52YWx1ZT9udWxsOmguc3lzc2l0ZS52YWx1ZS5sZW5ndGgpLTE/IiI6IiwiLCIgIil9fWZ1'@;
put 'bmN0aW9uICRZZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDMwKSgxLCJzdHJvbmciKSxOZSgyLCJBbGxvd2VkIHVzZXJzOiIpLHllKCksTmUoMykseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDMpLGdyKCIgIixhLmxpY2Vuc2VLZXlEYXRhLnVzZXJzX2FsbG93ZWQsIiAiKX19ZnVuY3Rp'@;
put 'b24gcVllKGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsMzEpfWZ1bmN0aW9uIEtZZShjLGwpezEmYyYmKG1lKDAsImRpdiIpLE5lKDEsIiBEcm9wIC8gQnJvd3NlIGxpY2VuY2UgZmlsZSAiKSx5ZSgpKX1mdW5jdGlvbiBYWWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxOZSgxLCIg'@;
put 'U2VsZWN0ZWQgZmlsZTogIiksbWUoMiwic3Ryb25nIiksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMyksb3IoYS5saWNlbmNlZmlsZS5maWxlbmFtZSl9fWZ1bmN0aW9uIEpZZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsInN0cm9uZyIpLE5lKDIpLHllKCkoKSks'@;
put 'MiZjKXtjb25zdCBhPVZlKDMpO0NlKDIpLG9yKGEubGljZW5jZUZpbGVFcnJvcil9fWZ1bmN0aW9uIFFZZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsS1llLDIsMCwiZGl2IiwxKSxRZSgyLFhZZSw0LDEsImRpdiIsMSksUWUoMyxKWWUsMywxLCJkaXYiLDEpLFVyKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsIiI9PT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxDZSgxKSxSZSgibmdJZiIsYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gZVdlKGMsbCl7MSZjJiYobWUoMCwi'@;
put 'YnV0dG9uIiwzMiksTmUoMSwiIENvbnRpbnVlIHdpdGggZnJlZSB0aWVyICIpLHllKCkpfWZ1bmN0aW9uIHRXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMikoMSwiZGl2IiwzKSxOZSgyLCJMaWNlbmNpbmciKSx5ZSgpLG1lKDMsImRpdiIsNCksUWUoNCxaWWUsNCwz'@;
put 'LCJuZy1jb250YWluZXIiLDUpLFFlKDUsWVllLDUsMCwibmctY29udGFpbmVyIiw1KSxRZSg2LFdZZSwzLDAsIm5nLWNvbnRhaW5lciIsNSksbWUoNywicCIpKDgsInN0cm9uZyIpLE5lKDksIlNZU1NJVEU6IikseWUoKSxRZSgxMCxHWWUsMiw0LCJzcGFuIiw2KSxtZSgxMSwiYSIsNykseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMTMpLGY9JGkoMTUpLF89VmUoKTtyZXR1cm4ganQoXy5jb3B5U3lzc2l0ZShoLGYsXy5zeXNzaXRlLnZhbHVlfHxbXSkpfSkscXQoMTIsImNsci1pY29uIiw4LDkpLG1lKDE0LCJzcGFuIiwxMCwxMSksTmUoMTYsIkNvcHkgdG8g'@;
put 'Y2xpcGJvYXJkIikseWUoKSgpKCksUWUoMTcsJFllLDQsMSwicCIsMTIpLG1lKDE4LCJjbHItdGFicyIpKDE5LCJjbHItdGFiIikoMjAsImJ1dHRvbiIsMTMpLE5lKDIxLCJVcGxvYWQgbGljZW5jZSIpLHllKCksbWUoMjIsImNsci10YWItY29udGVudCIpKDIzLCJpbnB1dCIsMTQsMTUpLHh0'@;
put 'KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uRmlsZUNhcHR1cmUoaCkpfSkseWUoKSxtZSgyNSwiZGl2IiwxNikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdCgkaSgyNCkuY2xpY2soKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGgpe3Jl'@;
put 'dHVybiBCdChhKSxqdChWZSgpLm9uRmlsZUNhcHR1cmUoaCwhMCkpfSksUWUoMjYscVllLDEsMCwiY2xyLXNwaW5uZXIiLDE3KSxRZSgyNyxRWWUsNCwzLCJuZy1jb250YWluZXIiLDEpLHllKCkoKSgpLG1lKDI4LCJjbHItdGFiIikoMjksImJ1dHRvbiIsMTMpLE5lKDMwLCJQYXN0ZSBsaWNl'@;
put 'bmNlIikseWUoKSxtZSgzMSwiY2xyLXRhYi1jb250ZW50IikoMzIsImZvcm0iLDE4KSgzMywicCIpLE5lKDM0LCJMaWNlbmNlIGtleToiKSx5ZSgpLG1lKDM1LCJkaXYiLDE5KSgzNiwidGV4dGFyZWEiLDIwKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkubGljZW5jZUtleVZhbHVlPWgpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudHJpbUtleXMoKSl9KSx5ZSgpKCkoKSxtZSgzNywiZm9ybSIsMjEpKDM4LCJwIiksTmUoMzksIkFjdGl2YXRpb24ga2V5OiIpLHllKCksbWUoNDAsImRpdiIsMTkp'@;
put 'KDQxLCJ0ZXh0YXJlYSIsMjIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5hY3RpdmF0aW9uS2V5VmFsdWU9aCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS50cmltS2V5cygpKX0pLHllKCkoKSgpKCko'@;
put 'KSgpLG1lKDQyLCJidXR0b24iLDIzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYXBwbHlLZXlzKCkpfSksTmUoNDMsIiBBcHBseSBsaWNlbmNlIGtleXMgIikseWUoKSxRZSg0NCxlV2UsMiwwLCJidXR0b24iLDI0KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PVZlKCk7Q2UoMyksUmUoIm5nU3dpdGNoIixhLmFjdGlvbiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsImtleSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJsaW1pdCIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJ1cGRhdGUiKSxDZSg0KSxSZSgibmdGb3JPZiIsYS5zeXNzaXRlLnZh'@;
put 'bHVlKSxDZSg3KSxSZSgibmdJZiIsYS5saWNlbnNlS2V5RGF0YSYmYS51c2VyQ291bnRMaW1pdGF0aW9uKSxDZSg5KSxSZSgibmdJZiIsYS5saWNlbmNlRmlsZUxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5saWNlbmNlRmlsZUxvYWRpbmcpLENlKDkpLFJlKCJuZ01vZGVsIixhLmxpY2Vu'@;
put 'Y2VLZXlWYWx1ZSksQ2UoNSksUmUoIm5nTW9kZWwiLGEuYWN0aXZhdGlvbktleVZhbHVlKSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsYS5hcHBseWluZ0tleXMpKCJkaXNhYmxlZCIsYS5kaXNhYmxlQXBwbHlCdXR0b24pLENlKDIpLFJlKCJuZ0lmIixhLmlzQXBwRnJlZVRpZXIudmFsdWUpfX1m'@;
put 'dW5jdGlvbiBuV2UoYyxsKXsxJmMmJnF0KDAsImFwcC10ZXJtcyIpfXZhciBxc2U9ZnVuY3Rpb24oYyl7cmV0dXJuIGMua2V5PSJrZXkiLGMucmVnaXN0ZXI9InJlZ2lzdGVyIixjLmxpbWl0PSJsaW1pdCIsYy51cGRhdGU9InVwZGF0ZSIsY30ocXNlfHx7fSk7Y29uc3QgcldlPVt7cGF0aDoi'@;
put 'OmFjdGlvbiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5yb3V0ZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmFwcFNlcnZpY2U9Zix0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5zZUVycm9ycz17bWlz'@;
put 'c2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxv'@;
put 'dy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtl'@;
put 'eXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2'@;
put 'YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhlIGxpY2VuY2Uga2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1'@;
put 'cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5jZUtleVZhbHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0'@;
put 'ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVU'@;
put 'aWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24sdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxl'@;
put 'bmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShhPT57dGhpcy5r'@;
put 'ZXlFcnJvcj1hLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5taXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVycm9yRGV0YWlscz1hdG9iKGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFjdGlvbjtkJiZPYmplY3QudmFsdWVzKHFz'@;
put 'ZSkuaW5jbHVkZXMoZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZh'@;
put 'dGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3QgZj1oLmpvaW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksYS5zZXRB'@;
put 'dHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9'@;
put 'KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJrZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1d'@;
put 'fSkudGhlbihkPT57ZC5yZXR1cm4mJmQucmV0dXJuWzBdJiYiU1VDQ0VTUyI9PT1kLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlcGxhY2UobG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmFwcGx5aW5nS2V5cz0hMX0pfW9uRmlsZUNhcHR1cmUoYSxk'@;
put 'PSExKXtsZXQgaD1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYodGhpcy5saWNlbmNlZmlsZS5maWxlbmFtZT1oLm5hbWUsIWgpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSEwO2NvbnN0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9Xz0+e2lmKHRoaXMubGljZW5jZUZpbGVF'@;
put 'cnJvcj0iRXJyb3IgcmVhZGluZyBmaWxlLiIsIV98fCFfLnRhcmdldHx8MiE9Xy50YXJnZXQucmVhZHlTdGF0ZXx8Xy50YXJnZXQuZXJyb3J8fCFfLnRhcmdldC5yZXN1bHQpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZUZpbGVFcnJvcj12b2lkIDA7Y29u'@;
put 'c3QgVD1fLnRhcmdldC5yZXN1bHQudG9TdHJpbmcoKS5zcGxpdCgiXG4iKTt0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT1UWzFdLHRoaXMubGljZW5jZUtleVZhbHVlPVRbMF19LGYucmVhZEFzVGV4dChoKX1zd2l0Y2hUeXBlKGEpe3RoaXMuaW5wdXRUeXBlPWF9Z2V0IGRpc2FibGVBcHBseUJ1'@;
put 'dHRvbigpe3JldHVybiB0aGlzLmxpY2VuY2VLZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMubGljZW5jZUtleVZhbHVlPT09dGhpcy5jdXJyZW50TGljZW5jZUtleSYmdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRB'@;
put 'Y3RpdmF0aW9uS2V5fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChXbCksdHQoQzApLHR0KG9hKSx0dChVeCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGljZW5zaW5nIl1dLGRlY2xzOjIsdmFyczoyLGNvbnN0'@;
put 'czpbWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFszLCJtaXNza2V5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwidG9vbHRpcCIs'@;
put 'InRvb2x0aXAtbWQiLCJ0b29sdGlwLXRvcC1yaWdodCIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSIsInNpemUiLCIxNSIsMSwiY3Vyc29yLXBvaW50ZXIiXSxbImNvcHlJY29uIiwiIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsiY29weVRvb2x0aXAiLCIiXSxbImNsYXNzIiwibS0wIiw0'@;
put 'LCJuZ0lmIl0sWyJjbHJUYWJMaW5rIiwiIl0sWyJ0eXBlIiwiZmlsZSIsImhpZGRlbiIsIiIsMywiY2hhbmdlIl0sWyJsaWNlbmNlRmlsZSIsIiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsImRyb3AtYXJlYSIsMywiY2xpY2siLCJmaWxlRHJvcCJdLFsiY2xhc3MiLCJzcGlubmVyLXNtIiw0LCJu'@;
put 'Z0lmIl0sWzEsImNsci1mb3JtIiwibGljZW5zZS1rZXktZm9ybSJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbIm5hbWUiLCJsaWNlbnNlLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBsaWNlbmNlIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWwiLCJu'@;
put 'Z01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSJdLFsxLCJjbHItZm9ybSIsImFjdGl2YXRpb24ta2V5LWZvcm0iXSxbIm5hbWUiLCJhY3RpdmF0aW9uLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBhY3RpdmF0aW9uIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWwi'@;
put 'LCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImFwcGx5LWtleXMiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJyb3V0ZXJMaW5rIiwiLyIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tbGluayIsNCwibmdJZiJdLFsiY2xh'@;
put 'c3MiLCJrZXktZXJyb3IiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiLDQsIm5nSWYiXSxbMSwia2V5LWVycm9yIl0sWzEsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIl0sWyJjbGFzc2VzIiwiY29sb3ItZ3JlZW4iXSxbMSwibS0wIl0sWzEsInNwaW5uZXIt'@;
put 'c20iXSxbInJvdXRlckxpbmsiLCIvIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFFlKDAsdFdlLDQ1LDEzLCJkaXYiLDApLFFlKDEsbldlLDEsMCwiYXBwLXRlcm1zIiwxKSksMiZhJiYoUmUoIm5nSWYiLCJyZWdpc3RlciIhPT1k'@;
put 'LmFjdGlvbiksQ2UoMSksUmUoIm5nSWYiLCJyZWdpc3RlciI9PT1kLmFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLG5kLHRoLENwLFdhLEJzLHdwLE9zLHIyLGthLFp1LGRoLExwLE9wLGRnLFJwLElwLGNnLHUyLEJ1LEJZZSxqRV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtoZWln'@;
put 'aHQ6Y2FsYygxMDAlIC0gOTZweCk7cGFkZGluZzoyMHB4fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LmtleS1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1pc3NrZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlNzRjM2N9LmxpY2Vu'@;
put 'c2Uta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAu'@;
put 'YWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAl'@;
put 'O2hlaWdodDoxNzBweDttYXgtaGVpZ2h0OjE3MHB4O21pbi1oZWlnaHQ6MTcwcHg7cmVzaXplOm5vbmV9LmFwcGx5LWtleXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo0MHB4O3dpZHRoOjIwMHB4fS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5'@;
put 'LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjE1cHg7Ym9yZGVyOjJweCBkYXNoZWQgI2IyYjJiMjtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcjttYXJnaW46MTBweCAwfWNsci10YWJzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250'@;
put 'ZW50LSVDT01QJV17Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0iXX0pLGN9KSgpLGNhbkFjdGl2YXRlOltwVV0sY2FuRGVhY3RpdmF0ZTpbcFVdfV07bGV0IGlXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltkYy5mb3JDaGlsZChyV2UpLGRjXX0pLGN9KSgpLG9XZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30p'@;
put 'LGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbywkbCxfdSxpV2UsVjddfSksY30pKCk7ZnVuY3Rpb24gc1dlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDE5KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO1JlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIr'@;
put 'ZC5qc1BhcmFtc1thXSksQ2UoMSksZ3IoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gYVdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMSksZ3IoIiAiLGQuanNQYXJhbXNbYV0sIiAi'@;
put 'KX19ZnVuY3Rpb24gbFdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsNCksTmUoMikseWUoKSxRZSgzLHNXZSwyLDIsInRkIiwxNyksUWUoNCxhV2UsMiwxLCJ0ZCIsMTgpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhKSxDZSgxKSxSZSgibmdJZiIs'@;
put 'YS5pbmNsdWRlcygiVEFCTEVfSUQiKSksQ2UoMSksUmUoIm5nSWYiLCFhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKX19ZnVuY3Rpb24gY1dlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsNCksTmUoMikseWUoKSxtZSgzLCJ0ZCIsNCksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'bC4kaW1wbGljaXQsZD1WZSgzKTtDZSgyKSxvcihhKSxDZSgyKSxvcihkLnN1Ym1pdERldGFpbHNbYV0pfX1mdW5jdGlvbiB1V2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMykoMywidGhlYWQiKSg0LCJ0ciIpKDUsInRoIiw0'@;
put 'KSxOZSg2LCJOYW1lIikseWUoKSxtZSg3LCJ0aCIsNCksTmUoOCwiVmFsdWUiKSx5ZSgpKCkoKSxtZSg5LCJ0Ym9keSIpLFFlKDEwLGNXZSw1LDIsInRyIiw1KSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMTApLFJlKCJuZ0Zvck9mIixhLnN1Ym1pdEFycil9fWZ1bmN0aW9u'@;
put 'IGRXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDQpLE5lKDIpLHllKCksbWUoMywidGQiLDQpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMik7Q2UoMiksb3IoYSksQ2UoMiksb3IoZC5qc1BhcmFtc1thXSl9fWZ1bmN0aW9uIGhXZShjLGwp'@;
put 'e2lmKDEmYyYmKG1lKDAsImNsci10YWJzIikoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjApLE5lKDMsIlN1Ym1pdHRlZCBUYWJsZSBEZXRhaWxzIikseWUoKSxRZSg0LHVXZSwxMSwxLCJjbHItdGFiLWNvbnRlbnQiLDIxKSx5ZSgpLG1lKDUsImNsci10YWIiKSg2LCJidXR0b24iLDIwKSxO'@;
put 'ZSg3LCJCYXNlIFRhYmxlIERldGFpbHMiKSx5ZSgpLG1lKDgsImNsci10YWItY29udGVudCIpKDksImRpdiIsMjIpKDEwLCJ0YWJsZSIsMykoMTEsInRoZWFkIikoMTIsInRyIikoMTMsInRoIiw0KSxOZSgxNCwiTmFtZSIpLHllKCksbWUoMTUsInRoIiw0KSxOZSgxNiwiVmFsdWUiKSx5ZSgp'@;
put 'KCkoKSxtZSgxNywidGJvZHkiKSxRZSgxOCxkV2UsNSwyLCJ0ciIsNSkseWUoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsITApLENlKDE0KSxSZSgibmdGb3JPZiIsYS5rZXlzQXJyYXkpfX1mdW5jdGlvbiBmV2UoYyxsKXsxJmMmJihtZSgw'@;
put 'LCJwIiw3NCksTmUoMSwiIFRoZXJlIGFyZSBubyBkZXRhaWxzIHRvIHNob3cgIikseWUoKSl9ZnVuY3Rpb24gcFdlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwiZGl2Iiw3NSkoMiwic3BhbiIpLE5lKDMsIlRhYmxlIElkOiIpLHllKCksbWUoNCwic3Ryb25nIiw3NiksTmUoNSkseWUoKSgp'@;
put 'LG1lKDYsImRpdiIpKDcsInNwYW4iKSxOZSg4LCJTdWJtaXR0ZXI6IikseWUoKSxtZSg5LCJzcGFuIiw3NyksTmUoMTApLHllKCkoKSxtZSgxMSwiZGl2IikoMTIsInNwYW4iKSxOZSgxMywiU3VibWl0dGVkIG9uOiIpLHllKCksbWUoMTQsInNwYW4iLDc3KSxOZSgxNSkseWUoKSgpLG1lKDE2'@;
put 'LCJkaXYiKSgxNywic3BhbiIpLE5lKDE4LCJTdWJtaXR0ZWQgUmVhc29uOiIpLHllKCksbWUoMTksInNwYW4iLDc3KSxOZSgyMCkseWUoKSgpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxSZSgicm91dGVyTGluayIsIi9zdGFnZS8iKyhudWxsPT1hLnRhYmxlRGV0YWlscz9udWxs'@;
put 'OmEudGFibGVEZXRhaWxzLlRBQkxFX0lEKSksQ2UoMSksZ3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiAiKSxDZSg1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfQllfTk0s'@;
put 'IiAiKSxDZSg1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLENlKDUpLGdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9SRUFTT05fVFhULCIgIil9fWZ1'@;
put 'bmN0aW9uIGdXZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDc4KSxxdCgxLCJjbHItaWNvbiIsNzkpLE5lKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIikseWUoKSl9ZnVuY3Rpb24gbVdlKGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPVZuKCk7bWUoMCwiZGl2Iiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2Iiw1MSksUWUoMyxmV2UsMiwwLCJwIiw0NSksUWUoNCxwV2UsMjEsNSwibmctY29udGFpbmVyIiw4KSx5ZSgpLG1lKDUsImRpdiIsNTIpKDYsImRpdiIsNTMpKDcsImRpdiIsNTQpKDgsImRpdiIsNTUpKDksImJ1dHRv'@;
put 'biIsNTYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDQpO3JldHVybiBqdChoLmdvVG9CYXNlKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxOZSgxMCwiIEdvIHRvIGJhc2UgdGFibGUgc2NyZWVuICIpLHllKCksbWUoMTEsImJ1'@;
put 'dHRvbiIsNTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDQpO3JldHVybiBqdChoLmdldFRhYmxlKGgudGFibGVJZCkpfSksTmUoMTIsIiBHbyB0byBlZGl0ZWQgc2NyZWVuICIpLHllKCksbWUoMTMsImJ1dHRvbiIsNTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtC'@;
put 'dChhKTtjb25zdCBoPVZlKDQpO3JldHVybiBqdChoLmdvQmFjayhudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksTmUoMTQsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSx5ZSgpKCkoKSgpLG1lKDE1LCJkaXYiLDU5KSgxNiwiYnV0dG9uIiw2MCkseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5hcHByb3ZlVGFibGUoKSl9KSxOZSgxNywiIEFDQ0VQVCAiKSx5ZSgpLG1lKDE4LCJidXR0b24iLDYxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnJlamVjdE9wZW49ITApfSksTmUoMTksIiBS'@;
put 'RUpFQ1QgIikseWUoKSxtZSgyMCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDYyKSgyMSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjIsImlucHV0Iiw2MykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSg0KS5mb3JtYXR0ZWRWYWx1ZXM9aCl9KSgiY2hh'@;
put 'bmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLHllKCksbWUoMjMsImxhYmVsIiw2NCksTmUoMjQpLHllKCkoKSgpKCksbWUoMjUsImRpdiIsNjUpLFFlKDI2LGdXZSwzLDAsInNwYW4iLDY2KSxtZSgyNywiZGl2IiwzMSkoMjgsImRp'@;
put 'diIsNjcpKDI5LCJzcGFuIiw2OCksTmUoMzAsIiBDaGFuZ2VkIFJvd3MgIiksbWUoMzEsInNwYW4iLDY5KSxOZSgzMikseWUoKSgpLG1lKDMzLCJzcGFuIiw3MCksTmUoMzQsIiBBZGRlZCBSb3dzICIpLG1lKDM1LCJzcGFuIiw3MSksTmUoMzYpLHllKCkoKSxtZSgzNywic3BhbiIsNzIpLE5l'@;
put 'KDM4LCIgRGVsZXRlZCBSb3dzICIpLG1lKDM5LCJzcGFuIiw3MyksTmUoNDApLHllKCkoKSgpKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoMyksUmUoIm5nSWYiLCFhLnRhYmxlRGV0YWlscyksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVEZXRhaWxzKSxDZSgxMiksUmUoImNs'@;
put 'ckxvYWRpbmciLGEuYWNjZXB0TG9hZGluZykoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLENlKDIpLFJlKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51'@;
put 'bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2VzKSxDZSg0KSxSZSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLENlKDIpLG9yKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLENlKDIpLFJlKCJuZ0lmIixhLmRp'@;
put 'ZmZzTGltaXQpLENlKDYpLG9yKGEubGVucy51cGRhdGVkKSxDZSg0KSxvcihhLmxlbnMubmV3KSxDZSg0KSxvcihhLmxlbnMuZGVsZXRlZCl9fWZ1bmN0aW9uIHZXZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24g'@;
put 'X1dlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4MCkoMSwic3BhbiIsODEpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCksUWUoMyx2V2UsMywwLCJkaXYiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgzKSxSZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24gYldl'@;
put 'KGMsbCl7MSZjJiYobWUoMCwicCIsNzQpLE5lKDEsIiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzaG93ICIpLHllKCkpfWZ1bmN0aW9uIHlXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRoIiw0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksb3IoYSl9fWZ1bmN0'@;
put 'aW9uIHdXZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDg2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5pbmRleCxkPVZlKDIpLmluZGV4LGg9VmUoNCk7Q2UoMSksZ3IoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19Y29uc3QgS3NlPWZ1'@;
put 'bmN0aW9uKGMpe3JldHVybnsiY2ggdG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtdG9wLXJpZ2h0IjpjfX07ZnVuY3Rpb24gQ1dlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDg0KSxOZSgxKSxRZSgyLHdXZSwyLDEsInNwYW4iLDg1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQs'@;
put 'ZD1sLmluZGV4LGg9VmUoMikuaW5kZXgsZj1WZSg0KTtSZSgibmdDbGFzcyIsSjIoMyxLc2UsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxDZSgxKSxncigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLENlKDEpLFJlKCJuZ0lmIiwxPT1mLmFy'@;
put 'ckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIFNXZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsQ1dlLDMsNSwidGQiLDgzKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKS5pbmRleCxkPVZlKDQpO0NlKDEpLFJlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0p'@;
put 'fX1mdW5jdGlvbiBNV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMikuaW5kZXgsaD1WZSg0KTtDZSgxKSxncigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiB4V2UoYyxsKXtpZigx'@;
put 'JmMmJihCcigwKSxRZSgxLE1XZSwyLDEsInRkIiw0NyksVXIoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSg0KTtDZSgxKSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19Y29uc3QgWHNlPWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm57YWRkZWRSb3c6YyxkZWxldGVkUm93OmwsdXBk'@;
put 'YXRlZFJvdzphfX07ZnVuY3Rpb24gRVdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDgyKSxRZSgxLFNXZSwyLDEsIm5nLWNvbnRhaW5lciIsOCksUWUoMix4V2UsMiwxLCJuZy1jb250YWluZXIiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9VmUoNCk7UmUoIm5nQ2xhc3MiLHlf'@;
put 'KDMsWHNlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLENlKDEpLFJlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIGtX'@;
put 'ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMjkpKDEsImRpdiIsMzApKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDMzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmdvVG9BcHByb3ZhbHNMaXN0KCkpfSkscXQoNSwi'@;
put 'Y2xyLWljb24iLDM0KSxOZSg2LCJCYWNrIHRvIGFwcHJvdmFscyBsaXN0ICIpLHllKCkoKSxtZSg3LCJkaXYiLDM1KSg4LCJoMyIsMzYpLE5lKDkpLHllKCkoKSxtZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmdl'@;
put 'dERldGFpbHMoKSl9KSxxdCgxMiwiY2xyLWljb24iLDM5KSx5ZSgpKCkoKSxtZSgxMywicCIsNDApLE5lKDE0KSx5ZSgpKCksbWUoMTUsImRpdiIsNDEpLFFlKDE2LG1XZSw0MSwxMSwiZGl2Iiw0MikseWUoKSxRZSgxNyxfV2UsNCwxLCJkaXYiLDQzKSxtZSgxOCwiZGl2Iiw0NCksUWUoMTks'@;
put 'YldlLDIsMCwicCIsNDUpLG1lKDIwLCJ0YWJsZSIsMykoMjEsInRoZWFkIikoMjIsInRyIiw0NiksUWUoMjMseVdlLDIsMSwidGgiLDQ3KSx5ZSgpKCksbWUoMjQsInRib2R5IiksUWUoMjUsRVdlLDMsNywidHIiLDQ4KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgzKTtDZSg5KSxn'@;
put 'cigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfTk0sIiAiKSxDZSg1KSxncigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfREVTQywiICIpLENlKDIpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRp'@;
put 'bmdUYWJsZSksQ2UoMiksUmUoIm5nSWYiLGEubG9hZGluZ1RhYmxlJiZhLm5vQ2hhbmdlcyksQ2UoNCksUmUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxDZSgyKSxSZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gQVdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyNyksUWUoMSxr'@;
put 'V2UsMjYsNywiZGl2IiwyOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIFRXZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDgxKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBEV2UoYyxsKXsxJmMmJihtZSgw'@;
put 'LCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgcHJldmlldyIpLHllKCkoKSl9ZnVuY3Rpb24gSVdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4NyksUWUoMSxUV2UsMiwwLCJzcGFuIiw4OCksUWUoMixEV2UsMywwLCJkaXYiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgx'@;
put 'KSxSZSgibmdJZiIsIWEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gTFdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMyksUWUoMSxBV2UsMiwxLCJkaXYiLDI0KSxtZSgyLCJkaXYiLDI1KSxRZSgzLElXZSwzLDIsImRpdiIsMjYpLHllKCkoKSksMiZj'@;
put 'KXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgyKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gUldlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsNzgpLHF0KDEsImNsci1pY29uIiw3OSksTmUoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1'@;
put 'cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSx5ZSgpKX1mdW5jdGlvbiBPV2UoYyxsKXsxJmMmJnF0KDAsImRpdiIsNDkpfWZ1bmN0aW9uIFBXZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gRldl'@;
put 'KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDMpKDEsInNwYW4iLDgxKSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLFFlKDMsUFdlLDMsMCwiZGl2Iiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoMyksUmUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIEhXZShj'@;
put 'LGwpe2lmKDEmYyYmKG1lKDAsInRoIiw0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksb3IoYSl9fWZ1bmN0aW9uIE5XZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDg2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5pbmRleCxkPVZlKDIpLmlu'@;
put 'ZGV4LGg9VmUoNCk7Q2UoMSksZ3IoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gVldlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDg0KSxOZSgxKSxRZSgyLE5XZSwyLDEsInNwYW4iLDg1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w'@;
put 'bGljaXQsZD1sLmluZGV4LGg9VmUoMikuaW5kZXgsZj1WZSg0KTtSZSgibmdDbGFzcyIsSjIoMyxLc2UsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxDZSgxKSxncigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLENlKDEpLFJlKCJuZ0lmIiwx'@;
put 'PT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIEJXZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsVldlLDMsNSwidGQiLDgzKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKS5pbmRleCxkPVZlKDQpO0NlKDEpLFJlKCJuZ0Zvck9mIixkLnJvd0tl'@;
put 'eXNbYV0pfX1mdW5jdGlvbiBqV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMikuaW5kZXgsaD1WZSg0KTtDZSgxKSxncigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiB6V2UoYyxs'@;
put 'KXtpZigxJmMmJihCcigwKSxRZSgxLGpXZSwyLDEsInRkIiw0NyksVXIoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSg0KTtDZSgxKSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gVVdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDgyKSxRZSgxLEJXZSwyLDEs'@;
put 'Im5nLWNvbnRhaW5lciIsOCksUWUoMix6V2UsMiwxLCJuZy1jb250YWluZXIiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9VmUoNCk7UmUoIm5nQ2xhc3MiLHlfKDMsWHNlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFy'@;
put 'clthXSkpLENlKDEpLFJlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIFpXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsOTMpKDEsImRpdiIsOTQpKDIsImRpdiIsMzEp'@;
put 'KDMsImRpdiIsMzIpKDQsInNwYW4iLDk1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmdvVG9TdWJtaXRMaXN0KCkpfSkscXQoNSwiY2xyLWljb24iLDM0KSxOZSg2LCJCYWNrIHRvIHN1Ym1pdHRlZCBsaXN0ICIpLHllKCkoKSxtZSg3LCJkaXYiLDk2KSg4'@;
put 'LCJoMyIsOTcpLE5lKDkpLHllKCkoKSxtZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnRhYmxlRmxhZz0hMCl9KSxxdCgxMiwiY2xyLWljb24iLDM5KSx5ZSgpKCkoKSxtZSgxMywicCIsOTgpLE5lKDE0KSx5ZSgp'@;
put 'KCksbWUoMTUsImRpdiIsNTApKDE2LCJkaXYiLDUxKSgxNywiZGl2Iiw3NSkoMTgsInNwYW4iKSxOZSgxOSwiVGFibGUgSWQ6IikseWUoKSxtZSgyMCwic3Ryb25nIiw3NikoMjEsInNwYW4iKSxOZSgyMikseWUoKSgpKCksbWUoMjMsImRpdiIpKDI0LCJzcGFuIiksTmUoMjUsIlN1Ym1pdHRl'@;
put 'ZCBvbjoiKSx5ZSgpLG1lKDI2LCJzcGFuIiw3NyksTmUoMjcpLHllKCkoKSxtZSgyOCwiZGl2IikoMjksInNwYW4iKSxOZSgzMCwiU3VibWl0IE1lc3NhZ2U6IikseWUoKSxtZSgzMSwic3BhbiIpLE5lKDMyKSx5ZSgpKCkoKSxtZSgzMywiZGl2Iiw1MikoMzQsImRpdiIsNTMpKDM1LCJkaXYi'@;
put 'LDU0KSgzNiwiZGl2Iiw1NSkoMzcsImJ1dHRvbiIsNTYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDMpO3JldHVybiBqdChoLmdvVG9CYXNlKGguc3ViT2JqLmJhc2UpKX0pLE5lKDM4LCIgR28gdG8gYmFzZSB0YWJsZSBzY3JlZW4gIikseWUoKSxtZSgzOSwiYnV0'@;
put 'dG9uIiw1NykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMyk7cmV0dXJuIGp0KGguZ2V0VGFibGUoaC5zdWJPYmoudGFibGVJZCkpfSksTmUoNDAsIiBHbyB0byBlZGl0ZWQgc2NyZWVuICIpLHllKCksbWUoNDEsImJ1dHRvbiIsNTgpLHh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtCdChhKTtjb25zdCBoPVZlKDMpO3JldHVybiBqdChoLmdvQmFjayhoLnN1Yk9iai5iYXNlKSl9KSxOZSg0MiwiIEdvIGJhY2sgdG8gZWRpdG9yICIpLHllKCkoKSgpKCksbWUoNDMsImRpdiIsNjUpLFFlKDQ0LFJXZSwzLDAsInNwYW4iLDY2KSxtZSg0NSwiZGl2IiwzMSkoNDYsImRp'@;
put 'diIsNjcpKDQ3LCJzcGFuIiw2OCksTmUoNDgsIiBDaGFuZ2VkIFJvd3MgIiksbWUoNDksInNwYW4iLDY5KSxOZSg1MCkseWUoKSgpLG1lKDUxLCJzcGFuIiw3MCksTmUoNTIsIiBBZGRlZCBSb3dzICIpLG1lKDUzLCJzcGFuIiw3MSksTmUoNTQpLHllKCkoKSxtZSg1NSwic3BhbiIsNzIpLE5l'@;
put 'KDU2LCIgRGVsZXRlZCBSb3dzICIpLG1lKDU3LCJzcGFuIiw3MyksTmUoNTgpLHllKCkoKSgpKCkoKSxtZSg1OSwiZGl2Iiw1MykoNjAsImNsci10b2dnbGUtY29udGFpbmVyIiw5OSkoNjEsImNsci10b2dnbGUtd3JhcHBlciIpKDYyLCJpbnB1dCIsNjMpLHh0KCJuZ01vZGVsQ2hhbmdlIixm'@;
put 'dW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZm9ybWF0dGVkVmFsdWVzPWgpfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSx5ZSgpLG1lKDYzLCJsYWJlbCIpLE5lKDY0KSx5ZSgpKCkoKSgpKCkoKSxtZSg2'@;
put 'NSwiZGl2IiwxMDApLFFlKDY2LE9XZSwxLDAsImRpdiIsNDIpLHllKCksUWUoNjcsRldlLDQsMSwiZGl2IiwxMDEpLG1lKDY4LCJkaXYiLDEwMikoNjksInRhYmxlIiwzKSg3MCwidGhlYWQiKSg3MSwidHIiLDQ2KSxRZSg3MixIV2UsMiwxLCJ0aCIsNDcpLHllKCkoKSxtZSg3MywidGJvZHki'@;
put 'KSxRZSg3NCxVV2UsMyw3LCJ0ciIsNDgpLHllKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDMpO0NlKDkpLGdyKCIgIixhLnN1Yk9iai5iYXNlLCIgIiksQ2UoNSksZ3IoIiAiLGEudGFibGVEZXNjcmlwdGlvbiwiICIpLENlKDYpLFJlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrYS5zdWJP'@;
put 'YmoudGFibGVJZCksQ2UoMiksZ3IoIiAiLGEuc3ViT2JqLnRhYmxlSWQsIiIpLENlKDUpLGdyKCIgIixhLnN1Yk9iai5zdWJtaXR0ZWQsIiAiKSxDZSg1KSxncigiICIsYS5zdWJPYmouc3VibWl0UmVhc29uLCIgIiksQ2UoMTIpLFJlKCJuZ0lmIixhLmRpZmZzTGltaXQpLENlKDYpLG9yKGEu'@;
put 'bGVucy51cGRhdGVkKSxDZSg0KSxvcihhLmxlbnMubmV3KSxDZSg0KSxvcihhLmxlbnMuZGVsZXRlZCksQ2UoNCksUmUoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxDZSgyKSxvcihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxDZSgyKSxSZSgibmdJ'@;
put 'ZiIsYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLENlKDUpLFJlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksQ2UoMiksUmUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIFlXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsOTEpLFFlKDEsWldlLDc1LDE2'@;
put 'LCJkaXYiLDkyKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gV1dlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gR1dlKGMsbCl7'@;
put 'aWYoMSZjJiYobWUoMCwiZGl2IiwxMDQpKDEsImRpdiIsMTA1KSgyLCJzcGFuIiw4MSksTmUoMywiIExvYWRpbmcuLi4gIikseWUoKSxRZSg0LFdXZSwzLDAsImRpdiIsOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNCksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uICRX'@;
put 'ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLFFlKDEsWVdlLDIsMSwiZGl2Iiw4OSksUWUoMixHV2UsNSwxLCJkaXYiLDkwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1jb25zdCBxV2U9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm57c3RhbmRhbG9uZTohMH19O2xldCBKc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5kZXRhaWxzT3Blbj0hMSx0'@;
put 'aGlzLnJlamVjdE9wZW49ITEsdGhpcy5sZW5zPXtuZXc6MCx1cGRhdGVkOjAsZGVsZXRlZDowfSx0aGlzLmxvYWRlZD0hMSx0aGlzLmxvYWRpbmdUYWJsZT0hMSx0aGlzLnN1Ym1pdFJlYXNvbj0iIix0aGlzLmluc3RhbmNlPSJob3RJbnN0YW5jZSIsdGhpcy5hY2NlcHRMb2FkaW5nPSExLHRo'@;
put 'aXMucmVqZWN0TG9hZGluZz0hMSx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLnRhYmxlRmxhZz0hMSx0aGlzLnJvd0tleXM9W10sdGhpcy5jaEFycj1bXSx0aGlzLnNlY29uZE9wZW49ITEsdGhpcy5mb3JtYXR0ZWRWYWx1ZXM9ITAsdGhpcy5jaGFuZ2VzQXJyPVtdLHRoaXMuZGlmZlRhYmxlPXtk'@;
put 'YXRhOltdfSx0aGlzLmRpZmZzTGltaXQ9ITEsdGhpcy5yZWNvcmRzTGltaXQ9MTAwfWdldCBub0NoYW5nZXMoKXtyZXR1cm4gMD09PXRoaXMubGVucy5uZXcmJjA9PT10aGlzLmxlbnMudXBkYXRlZCYmMD09PXRoaXMubGVucy5kZWxldGVkfWdvVG9CYXNlKGEpe3RoaXMucm91dGUubmF2aWdh'@;
put 'dGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdvVG9BcHByb3ZhbHNMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmUiKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvQmFjayhhKXt0aGlzLnJvdXRlLm5hdmln'@;
put 'YXRlQnlVcmwoIi9lZGl0b3IvIithKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd0RldGFpbHNTZWxlY3QoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31nZXREZXRhaWxzKCl7dGhpcy5k'@;
put 'ZXRhaWxzT3Blbj0hMH1vbkhvdFNlbGVjdGlvbihhKXt0aGlzLmhvdFNlbGVjdGlvbj1hLnNsaWNlKDAsNCl9b25Ib3REZXNlbGVjdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFNlbGVjdGlvbj1udWxsfSwxMDApfXJlamVjdGluZygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9u'@;
put 'Kigpe2EucmVqZWN0TG9hZGluZz0hMCxhLnN1Ym1pdFJlYXNvbj1hLnN1Ym1pdFJlYXNvbi5yZXBsYWNlKC9cbi9nLCIuICIpO2xldCBkPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxTVFBfUkVBU09OOmEuc3VibWl0UmVhc29ufTt5aWVsZCBhLnNhc1N0b3Jl'@;
put 'U2VydmljZS5yZWplY3RpbmcoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKS50aGVuKGg9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMSxhLnJlamVjdExvYWRpbmc9ITF9KX0pKCl9'@;
put 'YXBwcm92ZVRhYmxlKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5hY2NlcHRMb2FkaW5nPSEwO2xldCBkPXtBQ1RJT046IkFQUFJPVkVfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRTphLnBhcmFtcz8uRElGRlRJTUUsTElCRFM6YS5wYXJhbXM/LkxJQkRTfTt5'@;
put 'aWVsZCBhLnNhc1N0b3JlU2VydmljZS5hcHByb3ZlVGFibGUoZCwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pfSkoKX1n'@;
put 'b1RvU3VibWl0TGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQiKX1jYWxsQ2hhbmdlc0luZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2UuZ2V0Q2hhbmdlSW5mbyhhKS50aGVuKGg9Pntk'@;
put 'LnRhYmxlRGV0YWlscz1oLmpzcGFyYW1zWzBdLGQuanNQYXJhbXM9aC5qc3BhcmFtc1swXTtsZXQgZj1bXTtmb3IoY29uc3QgXyBpbiBkLmpzUGFyYW1zKWQuanNQYXJhbXMuaGFzT3duUHJvcGVydHkoXykmJmYucHVzaChfKTtkLmtleXNBcnJheT1mfSkuY2F0Y2goaD0+e2QuYWNjZXB0TG9h'@;
put 'ZGluZz0hMX0pLmZpbmFsbHkoKCk9PntkLmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJlc3BvbnNlKXJldHVybjtsZXQgYT10aGlzLnJlc3BvbnNlLm5ldyxkPXRoaXMucmVzcG9uc2UudXBkYXRlcyxoPXRo'@;
put 'aXMucmVzcG9uc2UuZGVsZXRlZCxmPXRoaXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoYT10aGlzLnJlc3BvbnNlLmZtdF9uZXcsZD10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5mbXRfZGVsZXRlZCxmPXRoaXMucmVzcG9uc2Uu'@;
put 'Zm10X29yaWdpbmFscyksdGhpcy5vcmlnaW5hbHM9Zix0aGlzLnJvd0tleXM9W107Zm9yKGxldCBTdD0wO1N0PGQubGVuZ3RoO1N0Kyspe2xldCBRdD1PYmplY3Qua2V5cyhkW1N0XSk7Zm9yKGxldCBybj0wO3JuPFF0Lmxlbmd0aDtybisrKWRbU3RdW1F0W3JuXV0hPT1mW1N0XVtRdFtybl1d'@;
put 'JiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7aW5kOlN0LGZpZWxkOlF0W3JuXSxwcm9wOmRbU3RdW1F0W3JuXV0sb3JpZ2luYWw6ZltTdF1bUXRbcm5dXX0pfXRoaXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlzLnBhcmFtcz8uTlVNX1VQREFURUR8fDAs'@;
put 'ZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVNX0RFTEVURUR8fDB9O2xldCBpZT1bXSxnZT1kLmNvbmNhdChhLGgpO2ZvcihsZXQgU3Q9MDtTdDx0aGlzLnJlc3BvbnNlLmNvbHMubGVuZ3RoO1N0KyspaWUucHVzaCh0aGlzLnJlc3BvbnNlLmNvbHNbU3RdLk5BTUUpO2xldCB3ZT10aGlzLmxlbnMu'@;
put 'bmV3PnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy5uZXcsRWU9dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5zLnVwZGF0ZWQ7dGhpcy5kaWZmc0xpbWl0PXRoaXMubGVucy5uZXc+dGhpcy5y'@;
put 'ZWNvcmRzTGltaXR8fHRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMuZGVsZXRlZD50aGlzLnJlY29yZHNMaW1pdCx0aGlzLmFkZENvdW50PXdlO2xldCBvdD1bXSxldD1bXTtmb3IobGV0IFN0PTA7U3Q8aWUubGVuZ3RoO1N0KyspZXQucHVzaCh7ZGF0YTpp'@;
put 'ZVtTdF0scmVhZE9ubHk6ITB9KTt0aGlzLmRpZmZUYWJsZS5kYXRhPWdlO2ZvcihsZXQgU3Q9MDtTdDxnZS5sZW5ndGg7U3QrKyl7bGV0IHJuPU9iamVjdC5rZXlzKGdlW1N0XSk7dGhpcy5yb3dLZXlzLnB1c2gocm4pfWxldCB5dD1bXSxrdD1bXTtmb3IobGV0IFN0PTA7U3Q8dGhpcy5kaWZm'@;
put 'VGFibGUuZGF0YS5sZW5ndGg7U3QrKyl7aWYoU3Q8RWUmJjAhPT1FZSl7eXQucHVzaChbXSksa3QucHVzaChbXSksb3QucHVzaCgidXBkYXRlZCIpO2xldCBRdD1PYmplY3Qua2V5cyh0aGlzLmRpZmZUYWJsZS5kYXRhW1N0XSk7Zm9yKGxldCBybj0wO3JuPFF0Lmxlbmd0aDtybisrKXtsZXQg'@;
put 'dm49UXRbcm5dO2ZbU3RdW3ZuXSE9PWRbU3RdW3ZuXT8oeXRbU3RdLnB1c2goITApLGt0W1N0XS5wdXNoKGZbU3RdW3ZuXSkpOih5dFtTdF0ucHVzaCghMSksa3RbU3RdLnB1c2gobnVsbCkpfXRoaXMuYXJyQ2hhbmdlZD15dCx0aGlzLmFyck9mQ2hhbmdlcz1rdH1TdD49RWUmJlN0PEVlK3dl'@;
put 'JiZvdC5wdXNoKCJhZGRlZCIpLFN0PndlK0VlLTEmJm90LnB1c2goImRlbGV0ZWQiKX10aGlzLmNoQXJyPW90LHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlzLmRpZmZUYWJsZS5kYXRhPWdlfW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9u'@;
put 'Kigpe2lmKGEuX2RldGFpbHNTdWI9YS5zYXNTdG9yZVNlcnZpY2Uuc3VibWl0dERldGFpbC5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgaD1maShmdW5jdGlvbiooZil7YS5zdWJPYmo9Zi52aWV3RGF0YSxhLnRhYmxlSWQ9Zi52aWV3RGF0YS50YWJsZUlkLGEuc3VibWl0dGVkPWYudmlld0Rh'@;
put 'dGEuc3ViLGEuc3VibWl0RGV0YWlscz1mLmRhdGEsYS5zdWJtaXRBcnI9W107Zm9yKGxldCBUIGluIGEuc3VibWl0RGV0YWlscykic3ViIiE9PVQmJmEuc3VibWl0QXJyLnB1c2goVCk7bGV0IF89e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0'@;
put 'ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKF8sIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihUPT57YS5wYXJhbXM9VC5wYXJhbXNbMF0sYS5yZXNwb25zZT1ULGEuY2FsY0RpZmYoKX0pLmNhdGNoKFQ9PlQpLmZpbmFsbHko'@;
put 'KCk9PnthLmxvYWRpbmdUYWJsZT0hMH0pLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJZCl9KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkPiJ1IilyZXR1cm47YS50'@;
put 'YWJsZUlkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2xldCBkPXtBQ1RJT046IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyhkLCJTQVNDb250cm9sVGFibGUi'@;
put 'LCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucGFyYW1zPWgucGFyYW1zWzBdLGEucmVzcG9uc2U9aCxhLmNhbGNEaWZmKCl9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExfSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwLGEuc2V0Rm9jdXMoKX0pLGEuY2FsbENo'@;
put 'YW5nZXNJbmZvKGEudGFibGVJZCl9KSgpfW5nT25EZXN0cm95KCl7dGhpcy5fZGV0YWlsc1N1YiYmdGhpcy5fZGV0YWlsc1N1Yi51bnN1YnNjcmliZSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNjZXB0QnRuIik7'@;
put 'YSYmYS5mb2N1cygpfSwyMDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KFdsKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZS1kZXRhaWxzIl1dLGhvc3RBdHRy'@;
put 'czpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0Mix2YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zv'@;
put 'ck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbImlkIiwiZm9ybUZp'@;
put 'ZWxkc184Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJpbm5lckhUTUwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0'@;
put 'bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCIsNCwibmdJZiJdLFsx'@;
put 'LCJsZWZ0IiwibGluay1pdCIsMywicm91dGVyTGluayJdLFsiY2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIi'@;
put 'LDQsIm5nSWYiXSxbMSwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVt'@;
put 'biIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiY2FyZCIsImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0'@;
put 'bi1zbSIsImJ0bi1vdXRsaW5lIiwibS0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIl0sWzEs'@;
put 'ImNsci1jb2wtbWQtNCIsImFwcHJvdmFsSW5mbyJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJjYXJkLWJsb2Nr'@;
put 'IiwicC0wIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCIsIm10LTAiXSxbImNsYXNzIiwidGV4'@;
put 'dC1jZW50ZXIgZm9udC1zaXplLTE4Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImNsci1yb3ciLCJm'@;
put 'b250LXNpemUtMTUiXSxbMSwiY2xyLWNvbC1tZC01Il0sWzEsImNsci1jb2wtbWQtNyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMCJdLFsxLCJjbHItcm93IiwiY2xy'@;
put 'LWdhcC01IiwiY2xyLWdhcC1zbS0wIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJi'@;
put 'dG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNs'@;
put 'ci1nYXAtc20tMCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiYWNjZXB0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJpZCIsInJlamVjdEJ0biIsMSwiYnRuIiwi'@;
put 'YnRuLXNtIiwiYnRuIiwiYnRuLWRhbmdlciIsIm1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwibS0wIiwibWwtMjBpIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImNoYW5nZSJdLFsxLCJm'@;
put 'b3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZSJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJyb3dzLW5vdGljZSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2Fw'@;
put 'LTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiXSxbMSwibGFiZWwiLCJsYWJlbC13YXJuaW5nIl0sWzEsImJhZGdlIiwiYmFkZ2Utd2FybmluZyJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwiYmFkZ2UiLCJiYWRnZS1zdWNjZXNzIl0sWzEsImxhYmVsIiwibGFi'@;
put 'ZWwtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC1zaXplLTE4Il0sWzEsIm10LTE1Il0sWzEsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbMSwibXQtMTAiXSxbMSwicm93cy1ub3RpY2UiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24t'@;
put 'dHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1vcmFuZ2UiXSxbMSwiaC0yNHZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwiZC1mbGV4IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIs'@;
put 'ImxlZnQiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJsZWZ0IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvb2x0aXAtY29udGVudCIsNCwibmdJZiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRl'@;
put 'ciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayIsNCwibmdJZiJdLFsx'@;
put 'LCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiY2FyZCBtLTAiLDQsIm5nSWYiXSxbMSwiY2FyZCIsIm0tMCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiY2xy'@;
put 'LWNvbC1tZC00Il0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtLTAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm0tMCIsIm1sLTIwLWkiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsIm92ZXJmbG93LWF1dG8iLCJtci0xMiJd'@;
put 'LFsiY2xhc3MiLCJoLTI1dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCJdLFsxLCJoLTI1dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIi'@;
put 'LCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJsb2FkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRldGFpbHNPcGVuPWZ9KSxt'@;
put 'ZSgxLCJoMyIsMSksTmUoMiwiQXBwcm92YWwgRGV0YWlscyIpLHllKCksbWUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxOZSg4LCJOYW1lIikseWUoKSxtZSg5LCJ0aCIsNCksTmUoMTAsIlZhbHVlIikseWUoKSgpKCksbWUoMTEsInRib2R5'@;
put 'IiksUWUoMTIsbFdlLDUsMywidHIiLDUpLHllKCkoKSgpLG1lKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kZXRhaWxzT3Blbj0hMX0pLE5lKDE1LCIgT2sgIikseWUoKSgpKCksbWUoMTYsImNsci1tb2RhbCIsMCkseHQoImNsck1v'@;
put 'ZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudGFibGVGbGFnPWZ9KSxtZSgxNywiaDMiLDEpLE5lKDE4LCJBbGwgRGV0YWlscyIpLHllKCksbWUoMTksImRpdiIsMiksUWUoMjAsaFdlLDE5LDIsImNsci10YWJzIiw4KSx5ZSgpLG1lKDIxLCJkaXYiLDYpKDIyLCJidXR0b24i'@;
put 'LDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZUZsYWc9ITF9KSxOZSgyMywiIE9rICIpLHllKCkoKSgpLG1lKDI0LCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlamVjdE9wZW49Zn0pLG1lKDI1LCJoMyIs'@;
put 'MSksTmUoMjYsIlJlYXNvbiBNZXNzYWdlIikseWUoKSxtZSgyNywiZGl2IiwyKSgyOCwiZm9ybSIpKDI5LCJzZWN0aW9uIiw5KSgzMCwiZGl2IiwxMCkoMzEsImxhYmVsIiwxMSksTmUoMzIsIlJlYXNvbiBmb3IgcmVqZWN0aW5nPyIpLHllKCksbWUoMzMsInRleHRhcmVhIiwxMikseHQoIm5n'@;
put 'TW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnN1Ym1pdFJlYXNvbj1mfSkseWUoKSgpKCkoKSgpLG1lKDM0LCJkaXYiLDYpKDM1LCJidXR0b24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVqZWN0T3Blbj0hMX0pLE5lKDM2LCIgQ2FuY2VsICIpLHllKCks'@;
put 'bWUoMzcsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZWplY3RpbmcoKX0pLE5lKDM4LCIgT0sgIikseWUoKSgpKCksbWUoMzksImRpdiIsMTUpLFFlKDQwLExXZSw0LDIsImRpdiIsMTYpLFFlKDQxLCRXZSwzLDIsImRpdiIsOCkseWUoKSksMiZhJiYoUmUo'@;
put 'ImNsck1vZGFsT3BlbiIsZC5kZXRhaWxzT3BlbiksQ2UoMTIpLFJlKCJuZ0Zvck9mIixkLmtleXNBcnJheSksQ2UoNCksUmUoImNsck1vZGFsT3BlbiIsZC50YWJsZUZsYWcpLENlKDQpLFJlKCJuZ0lmIixkLnRhYmxlRmxhZyksQ2UoNCksUmUoImNsck1vZGFsT3BlbiIsZC5yZWplY3RPcGVu'@;
put 'KSxDZSg5KSxSZSgibmdNb2RlbCIsZC5zdWJtaXRSZWFzb24pKCJuZ01vZGVsT3B0aW9ucyIsJHMoMTEscVdlKSkoImlubmVySFRNTCIsZC5zdWJtaXRSZWFzb24scTIpLENlKDQpLFJlKCJjbHJMb2FkaW5nIixkLnJlamVjdExvYWRpbmcpLENlKDMpLFJlKCJuZ0lmIiwhZC5zdWJtaXR0ZWQp'@;
put 'LENlKDEpLFJlKCJuZ0lmIixkLnN1Ym1pdHRlZCkpfSxkZXBlbmRlbmNpZXM6W3VjLHhzLFppLENwLFdhLFMwLEJzLHdwLE9zLHIyLEJ1LGthLG91LHN1LFp1LEU4LGRoLFVzLEQwLEQ4LFQwLExwLE9wLGRnLFJwLElwLGNnXSxzdHlsZXM6WycubG9hZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtk'@;
put 'aXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6NzV2aDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tb2RhbExhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MHJlbSFpbXBvcnRhbnR9LmFkZGVkUm93W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtiYWNrZ3JvdW5kOnJnYigxNDYsMjA4LDE1NCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksNzcsMTE3LC4yKTtib3JkZXItcmFkaXVzOjVweH0uZGVsZXRlZFJvd1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2IoMjMwLDE3OSwxNzkpO2JvcmRlcjoxcHggc29saWQgcmdi'@;
put 'YSg3MCw3MSw3MCwuMik7Ym9yZGVyLXJhZGl1czo1cHh9LnVwZGF0ZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2ZhZmRhODtib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSwxMTcsOSwuMik7Ym9yZGVyLXJhZGl1czo1cHh9LmNoW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3Jv'@;
put 'dW5kOnJnYmEoMCwwLDAsLjEpO2JvcmRlcjoxcHggc29saWQgcmdiYSgxMDQsMTAwLDAsLjQpO2JvcmRlci1yYWRpdXM6NXB4fS5jaFtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1MiwxMzUsMTIwLC40KX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAu'@;
put 'dG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouNTQxNjdyZW07Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kOiMzMTQzNTE7Ym9yZGVyLXJhZGl1czouMTI1cmVtO2NvbG9yOiNmMGYxZWM7bGluZS1oZWlnaHQ6'@;
put 'Ljc1cmVtO21hcmdpbjowO3BhZGRpbmc6LjM3NXJlbSAuNXJlbTt3aWR0aDoyMzVweDtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIGF1dG8gMTAwJSAxMnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOi42NjY2N3JlbX0udG9vbHRpcFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwg'@;
put 'LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjM3NXJlbTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1sZWZ0Oi4yNXJlbSBz'@;
put 'b2xpZCAjMzE0MzUxO2JvcmRlci10b3A6LjIwODMzcmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCB0cmFuc3BhcmVudH0udGFibGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowcHgg'@;
put 'c29saWR9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMx'@;
put 'NDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0udGFibGVDb250W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO21hcmdpbjoxNXB4IDEwcHggMTBweH0udGFibGVDb250'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFwcHJvdmFsSW5mb1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uYXBwcm92YWxCYWNrW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5hcHByb3ZhbEluZm9bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MTVw'@;
put 'eH0uYXBwcm92YWxCYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjE1cHh9LmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MHJlbSFpbXBvcnRhbnQ7bWluLWhlaWdodDpjYWxjKDEwMHZoICsg'@;
put 'LTBweCkhaW1wb3J0YW50fS50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoLmxlZnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdDt3aWR0aDoxNTBweCFpbXBvcnRhbnQ7'@;
put 'ZmxleDowfX0udGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGQubGVmdFtfbmdjb250ZW50LSVDT01QJV0sIC50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxO3dpZHRoOjMwMHB4IWltcG9ydGFudH0u'@;
put 'dG9vbGxbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2U2YjNiMztjb2xvcjojMzE0MzUxO3RvcDowO2hlaWdodDozNnB4O3dpZHRoOjEwMCU7bGVmdDowO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Zmxl'@;
put 'eH0jYWNjZXB0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXSwgI3JlamVjdEJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTc1cHh9LmZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6NzVweH1jbHItbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'ICAubW9kYWwtYm9keS13cmFwcGVye292ZXJmbG93OmF1dG99LnJvd3Mtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDoxMHB4O2NvbG9yOiM2YTZhNmE7Zm9udC1zaXplOjE1cHh9LnJvd3Mtbm90aWNlW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0nXX0pLGN9KSgpO2Z1bmN0aW9uIEtXZShjLGwpezEmYyYmKG1lKDAsImRpdiIsOSkoMSwiZGl2IiwxMCkscXQoMiwiY2xyLWljb24iLDExKSxtZSgzLCJoMyIsMTIpLE5lKDQsIlRoZXJlIGFyZSBu'@;
put 'byBhcHByb3ZhbHMgcmVtYWluaW5nIikseWUoKSgpKCkpfWZ1bmN0aW9uIFhXZShjLGwpezEmYyYmKG1lKDAsImgzIiwxMyksTmUoMSwiIFJFVklFVyAiKSx5ZSgpKX1mdW5jdGlvbiBKV2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwxNCksTmUoMSwiIFlvdSBoYXZlICIpLG1lKDIsInNwYW4i'@;
put 'KSxOZSgzKSx5ZSgpLE5lKDQsImFwcHJvdmFscyByZW1haW5pbmcgIikseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksZ3IoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBRV2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxNyksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVu'@;
put 'Y3Rpb24gZUdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIGFwcHJvdmFscyBsaXN0IikseWUoKSgpKX1mdW5jdGlvbiB0R2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE1KSxRZSgxLFFXZSwyLDAsInNwYW4iLDE2KSxRZSgyLGVHZSwzLDAsImRpdiIs'@;
put 'OCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIG5HZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDM4KX1mdW5jdGlvbiByR2UoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVy'@;
put 'IiwzOSksMiZjJiZSZSgiY2xyU21hbGwiLCEwKX1mdW5jdGlvbiBpR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxOZSgyKSx5ZSgpLG1lKDMsImNsci1kZy1jZWxsIiksTmUoNCkseWUoKSxtZSg1LCJjbHItZGctY2VsbCIp'@;
put 'LE5lKDYpLHllKCksbWUoNywiY2xyLWRnLWNlbGwiKSxOZSg4KSx5ZSgpLG1lKDksImNsci1kZy1jZWxsIikoMTAsImRpdiIsMjYpKDExLCJhIiwyNykseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLmdldENsaWNrZWQoZikpfSkscXQo'@;
put 'MTIsImNsci1pY29uIiwyOCksbWUoMTMsInNwYW4iLDI5KSxOZSgxNCwiR28gdG8gcmV2aWV3IHBhZ2Ugc2NyZWVuIikseWUoKSgpLG1lKDE1LCJhIiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9QnQoYSksZj1oLiRpbXBsaWNpdCxfPWguaW5kZXgsVD1WZSgyKTtyZXR1cm4g'@;
put 'anQoZi5yZWplY3RMb2FkaW5nPyIiOlQucmVqZWN0aW5nKF8pKX0pLFFlKDE2LG5HZSwxLDAsImNsci1pY29uIiwzMSksUWUoMTcsckdlLDEsMSwiY2xyLXNwaW5uZXIiLDMyKSxtZSgxOCwic3BhbiIsMjkpLE5lKDE5LCJSZWplY3QiKSx5ZSgpKCksbWUoMjAsImEiLDMzKSx4dCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLmdldFRhYmxlKGYudGFibGVJZCkpfSkscXQoMjEsImNsci1pY29uIiwzNCksbWUoMjIsInNwYW4iLDI5KSxOZSgyMywiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIikseWUoKSgpKCkoKSxtZSgyNCwi'@;
put 'Y2xyLWRnLWNlbGwiLDM1KSgyNSwiYnV0dG9uIiwzNikseHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4gVmUoMikuZG93bmxvYWQoXy50YWJsZUlkKSxqdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLHF0KDI2LCJjbHItaWNvbiIsMzcpLHllKCko'@;
put 'KSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLnN1Ym1pdHRlciksQ2UoMiksb3IoYS5iYXNlVGFibGUpLENlKDIpLG9yKGEuc3VibWl0dGVkKSxDZSgyKSxvcihhLnN1Ym1pdFJlYXNvbiksQ2UoOCksUmUoIm5nSWYiLCFhLnJlamVjdExvYWRpbmcpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixhLnJlamVjdExvYWRpbmcpLENlKDgpLFJlKCJpZCIsYS50YWJsZUlkKX19ZnVuY3Rpb24gb0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwxOCkoMiwiY2xyLWRnLWNvbHVtbiIsMTkpLE5lKDMsIlNVQk1JVFRFUiIpLHll'@;
put 'KCksbWUoNCwiY2xyLWRnLWNvbHVtbiIsMTkpLE5lKDUsIkJBU0UgVEFCTEUiKSx5ZSgpLG1lKDYsImNsci1kZy1jb2x1bW4iLDE5KSxOZSg3LCJTVUJNSVRURUQiKSx5ZSgpLG1lKDgsImNsci1kZy1jb2x1bW4iLDE5KSxOZSg5LCJTVUJNSVQgUkVBU09OIikseWUoKSxtZSgxMCwiY2xyLWRn'@;
put 'LWNvbHVtbiIpLE5lKDExLCJBQ1RJT04iKSx5ZSgpLG1lKDEyLCJjbHItZGctY29sdW1uIiksTmUoMTMsIkRPV05MT0FEIikseWUoKSxRZSgxNCxpR2UsMjcsNywiY2xyLWRnLXJvdyIsMjApLG1lKDE1LCJjbHItZGctZm9vdGVyIiwyMSkoMTYsInNwYW4iKSxOZSgxNywiaXRlbXMgcGVyIHBh'@;
put 'Z2UiKSx5ZSgpLG1lKDE4LCJzZWxlY3QiLDIyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaXRlbXNOdW09aCl9KSxtZSgxOSwib3B0aW9uIiwyMyksTmUoMjAsIjMiKSx5ZSgpLG1lKDIxLCJvcHRpb24iLDIzKSxOZSgyMiwiNSIpLHllKCks'@;
put 'bWUoMjMsIm9wdGlvbiIsMjMpLE5lKDI0LCIxMCIpLHllKCksbWUoMjUsIm9wdGlvbiIsMjMpLE5lKDI2LCIxNSIpLHllKCkoKSxtZSgyNywiY2xyLWRnLXBhZ2luYXRpb24iLDI0LDI1KSxOZSgyOSkseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMjgpLGQ9VmUoKTtDZSgyKSxSZSgi'@;
put 'Y2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwiYmFzZVRhYmxlIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLENlKDYpLFJlKCJjbHJEZ0l0ZW1zT2YiLGQuYXBwcm92'@;
put 'ZUxpc3QpLENlKDQpLFJlKCJuZ01vZGVsIixkLml0ZW1zTnVtKSxDZSgxKSxSZSgibmdWYWx1ZSIsMyksQ2UoMiksUmUoIm5nVmFsdWUiLDUpLENlKDIpLFJlKCJuZ1ZhbHVlIiwxMCksQ2UoMiksUmUoIm5nVmFsdWUiLDE1KSxDZSgyKSxSZSgiY2xyRGdQYWdlU2l6ZSIsZC5pdGVtc051bSks'@;
put 'Q2UoMiksYjAoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBhcHByb3ZhbHMgIil9fWNvbnN0IHNHZT1mdW5jdGlvbihjKXtyZXR1cm57bm9Cb3JkZXI6Y319O2xldCBhR2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'LF8pe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9Xyx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwfWdldFRhYmxlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdl'@;
put 'LyIrYSl9Z2V0Q2xpY2tlZChhKXt2b2lkIDAhPT10aGlzLmFwcHJvdmVMaXN0JiYodGhpcy50YWJsZUlkPXRoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCx0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoInJldmlldy9hcHByb3ZlRGV0LyIrdGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkKSl9'@;
put 'cmVqZWN0aW5nKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3ZvaWQgMCE9PWQuYXBwcm92ZUxpc3QmJihkLnRhYmxlSWQ9ZC5hcHByb3ZlTGlzdFthXS50YWJsZUlkKTtsZXQgaD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTpkLnRhYmxlSWQsU1RQX1JFQVNP'@;
put 'TjoicXVpY2sgcmVqZWN0aW9uIn07dHJ5eyhkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMCwoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGgsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikpLmZyb21zYXNbMF0uUkVTUE9OU0UuaW5j'@;
put 'bHVkZXMoIlNVQ0NFU1MiKSYmKChkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMSxkLmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxkLnJlbWFpbmVkLS0sZC5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1jYXRjaChmKXtkLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3Io'@;
put 'ImFwcHJvdmVycy9yZWplY3Rpb24iLGYpfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmZldGNoQXBwcm92YWxzKCl9KSgpfWZldGNoQXBwcm92YWxzKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5pdGVtc051bT0xMDtsZXQg'@;
put 'ZD17U1RQX0FDVElPTjoiT1BFTl9BUFBST1ZBTFMifTt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0QXBwcm92YWxzKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIik7YS5yZW1haW5lZD1oLmZyb21zYXMubGVuZ3RoO2xldCBmPWguZnJvbXNh'@;
put 'cy5tYXAoZnVuY3Rpb24oXyl7cmV0dXJue3RhYmxlSWQ6Xy5UQUJMRV9JRCxzdWJtaXR0ZXI6Xy5TVUJNSVRURURfQllfTk0sc3VibWl0dGVkOl8uU1VCTUlUVEVEX09OX0RUVE0sYmFzZVRhYmxlOl8uQkFTRV9UQUJMRSxzdWJtaXRSZWFzb246Xy5TVUJNSVRURURfUkVBU09OX1RYVH19KTth'@;
put 'LmFwcHJvdmVMaXN0PWYsYS5sb2FkZWQ9ITB9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIixoKX19KSgpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJV'@;
put 'cmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KERzKSx0dChvYSksdHQoVWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjksdmFyczo4LGNvbnN0czpbWzEsImNvbnRl'@;
put 'bnQtYXJlYSJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIs'@;
put 'InRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciIsNCwibmdJZiJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0'@;
put 'aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siLCJub2FwcHJvdmFscy1pbmZvLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxb'@;
put 'MSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVy'@;
put 'Il0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtc3RhcnQiXSxbMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2Ui'@;
put 'XSxbMywibmdWYWx1ZSJdLFsxLCJjZW50ZXIiLDMsImNsckRnUGFnZVNpemUiXSxbInBhZ2luYXRpb24iLCIiXSxbInJvbGUiLCJ0b29sdGlwIiwxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlw'@;
put 'LW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyNCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJv'@;
put 'dHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiLDQsIm5nSWYiXSxbMywiY2xyU21hbGwiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0'@;
put 'IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJpZCIsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFw'@;
put 'ZSIsImJhbiIsInNpemUiLCIyMiJdLFszLCJjbHJTbWFsbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxRZSgyLEtXZSw1LDAsImRpdiIsMiksbWUoMywiZGl2IiwzKSxRZSg0LFhXZSwyLDAsImgzIiw0KSxRZSg1LEpXZSw1LDEsInAi'@;
put 'LDUpLHllKCksUWUoNix0R2UsMywyLCJkaXYiLDYpLG1lKDcsImRpdiIsNyksUWUoOCxvR2UsMzAsMTQsImRpdiIsOCkseWUoKSgpKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwwPT09ZC5yZW1haW5lZCksQ2UoMSksUmUoIm5nQ2xhc3MiLEoyKDYsc0dlLCFkLmxvYWRlZCkpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixkLmxvYWRlZCYmMCE9PWQucmVtYWluZWQpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRlZCYmMCE9PWQucmVtYWluZWQpLENlKDEpLFJlKCJuZ0lmIiwhZC5sb2FkZWQpLENlKDIpLFJlKCJuZ0lmIixkLmFwcHJvdmVMaXN0JiYwIT09ZC5yZW1haW5lZCkpfSxkZXBlbmRlbmNpZXM6'@;
put 'W3VjLFppLGwxLGMxLE0wLEJzLE9zLFc4LFRwLHRnLFBFLFU4LEZFLG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LGthLHUyXSxzdHlsZXM6WyIuY29sdW1uLWNlbnRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6'@;
put 'Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFncmlkLWNvbHVtbltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWdyaWQtY29sdW1uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5saW5r'@;
put 'c1tfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVu'@;
put 'dC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMz'@;
put 'cmVtIHNvbGlkICMzMTQzNTF9Lm5vQm9yZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmFwcHJvdmFscy1saXN0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo3MHZoO2Rpc3BsYXk6ZmxleDtqdXN0'@;
put 'aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9Lm5vYXBwcm92YWxzLWluZm8td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2Fs'@;
put 'aWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX0iXX0pLGN9KSgpO2Z1bmN0aW9uIGxHZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLHF0KDIsImNsci1pY29uIiwxNCksbWUoMywiaDMiLDE1KSxOZSg0LCIgWW91IGhhdmUgbm90IHN1Ym1p'@;
put 'dHRlZCBhbnkgdGFibGVzICIpLHllKCkoKSgpKX1mdW5jdGlvbiBjR2UoYyxsKXsxJmMmJihtZSgwLCJoMyIsMTYpLE5lKDEsIiBTVUJNSVQgUVVFVUUgIikseWUoKSl9ZnVuY3Rpb24gdUdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMTcpLE5lKDEsIiBZb3UgaGF2ZSAiKSxtZSgyLCJzcGFu'@;
put 'IiksTmUoMykseWUoKSxOZSg0LCJzdWJtaXNzaW9ucyB3YWl0aW5nIHRvIGJlIGFwcHJvdmVkICIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgzKSxncigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIGRHZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDIwKSxOZSgxLCIgTG9hZGlu'@;
put 'Zy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBoR2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgc3VibWl0dGVkIGxpc3QiKSx5ZSgpKCkpfWZ1bmN0aW9uIGZHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTgpLFFlKDEsZEdlLDIsMCwic3BhbiIsMTkpLFFl'@;
put 'KDIsaEdlLDMsMCwiZGl2IiwyKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIHBHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1kZy1yb3ciLDMwKSx4dCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDUpLmdvVG9EZXRhaWxzKGYudGFibGVJZCkpfSksbWUoMSwiY2xyLWRnLWNlbGwiKSxOZSgyKSx5ZSgpLG1lKDMsImNsci1kZy1jZWxsIiksTmUoNCkseWUoKSxtZSg1LCJjbHItZGctY2VsbCIp'@;
put 'LE5lKDYpLHllKCksbWUoNywiY2xyLWRnLWNlbGwiKSg4LCJkaXYiLDMxKSg5LCJhIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSg1KS5nb1RvU3RhZ2UoZi50YWJsZUlkKSl9KSxxdCgxMCwiY2xyLWljb24iLDMzKSxtZSgx'@;
put 'MSwic3BhbiIsMzQpLE5lKDEyLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSx5ZSgpKCkoKSgpLG1lKDEzLCJjbHItZGctY2VsbCIsMzUpKDE0LCJidXR0b24iLDM2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0O3JldHVybiBWZSg1KS5kb3dubG9h'@;
put 'ZChfLnRhYmxlSWQpLGp0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSkscXQoMTUsImNsci1pY29uIiwzNykseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuYmFzZSksQ2UoMiksb3IoYS5zdWJtaXR0ZWQpLENlKDIpLG9yKGEuc3VibWl0UmVhc29uKX19ZnVu'@;
put 'Y3Rpb24gZ0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwyMikoMiwiY2xyLWRnLWNvbHVtbiIpLE5lKDMsIkJBU0UgVEFCTEUiKSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iLDIzKSxOZSg1LCJTVUJNSVRURUQiKSx5ZSgpLG1lKDYs'@;
put 'ImNsci1kZy1jb2x1bW4iLDIzKSxOZSg3LCJTVUJNSVQgUkVBU09OIikseWUoKSxtZSg4LCJjbHItZGctY29sdW1uIiwxMiksTmUoOSwiQUNUSU9OIikseWUoKSxtZSgxMCwiY2xyLWRnLWNvbHVtbiIsMTIpLE5lKDExLCJET1dOTE9BRCIpLHllKCksUWUoMTIscEdlLDE2LDMsImNsci1kZy1y'@;
put 'b3ciLDI0KSxtZSgxMywiY2xyLWRnLWZvb3RlciIsMjUpKDE0LCJzcGFuIiksTmUoMTUsIml0ZW1zIHBlciBwYWdlIikseWUoKSxtZSgxNiwic2VsZWN0IiwyNikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSg0KS5pdGVtc051bT1oKX0pLG1lKDE3'@;
put 'LCJvcHRpb24iLDI3KSxOZSgxOCwiMyIpLHllKCksbWUoMTksIm9wdGlvbiIsMjcpLE5lKDIwLCI1IikseWUoKSxtZSgyMSwib3B0aW9uIiwyNyksTmUoMjIsIjEwIikseWUoKSxtZSgyMywib3B0aW9uIiwyNyksTmUoMjQsIjE1IikseWUoKSgpLG1lKDI1LCJjbHItZGctcGFnaW5hdGlvbiIs'@;
put 'MjgsMjkpLE5lKDI3KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgyNiksZD1WZSg0KTtDZSg0KSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksQ2UoNiksUmUoImNsckRnSXRlbXNPZiIsZC5zdWJtaXR0ZXJM'@;
put 'aXN0KSxDZSg0KSxSZSgibmdNb2RlbCIsZC5pdGVtc051bSksQ2UoMSksUmUoIm5nVmFsdWUiLDMpLENlKDIpLFJlKCJuZ1ZhbHVlIiw1KSxDZSgyKSxSZSgibmdWYWx1ZSIsMTApLENlKDIpLFJlKCJuZ1ZhbHVlIiwxNSksQ2UoMiksUmUoImNsckRnUGFnZVNpemUiLGQuaXRlbXNOdW0pLENl'@;
put 'KDIpLGIwKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgc3VibWlzc2lvbnMgIil9fWZ1bmN0aW9uIG1HZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjEpLFFlKDEsZ0dlLDI4LDEyLCJkaXYiLDIpLHllKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5zdWJtaXR0ZXJMaXN0JiYwIT09YS5yZW1haW5lZCl9fWNvbnN0IHZHZT1mdW5jdGlvbihjKXtyZXR1cm57bm9Cb3JkZXI6Y319O2Z1bmN0aW9uIF9HZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNSksUWUoMSxsR2UsNSwwLCJkaXYiLDYpLG1l'@;
put 'KDIsImRpdiIsNyksUWUoMyxjR2UsMiwwLCJoMyIsOCksUWUoNCx1R2UsNSwxLCJwIiw5KSx5ZSgpLFFlKDUsZkdlLDMsMiwiZGl2IiwxMCksUWUoNixtR2UsMiwxLCJkaXYiLDExKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLDA9PT1hLnJlbWFpbmVkJiZhLmxv'@;
put 'YWRlZCksQ2UoMSksUmUoIm5nQ2xhc3MiLEoyKDYsdkdlLCFhLmxvYWRlZCkpLENlKDEpLFJlKCJuZ0lmIiwwIT09YS5yZW1haW5lZCksQ2UoMSksUmUoIm5nSWYiLGEubG9hZGVkJiYwIT09YS5yZW1haW5lZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLGEu'@;
put 'bG9hZGVkKX19ZnVuY3Rpb24gYkdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzKSxRZSgxLF9HZSw3LDgsImRpdiIsNCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLCFhLnN1YlJlYWR5KX19ZnVuY3Rpb24geUdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikscXQo'@;
put 'MSwiYXBwLWFwcHJvdmUtZGV0YWlscyIpLHllKCkpfWxldCBRc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLnNhc1NlcnZpY2U9Xyx0'@;
put 'aGlzLnJlbWFpbmVkPTAsdGhpcy5sb2FkZWQ9ITEsdGhpcy5zdWJSZWFkeT0hMSx0aGlzLmRldGFpbHNPcGVuPSExfWdvVG9TdGFnZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb1RvRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvcmV2'@;
put 'aWV3L3N1Ym1pdHRlZC8iK2EpfWdldERldGFpbHMoYSxkKXt0aGlzLnN1YlJlYWR5PSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNhc1N0b3JlU2VydmljZS5zZW5kRGV0YWlscyhhLGQsdGhpcy5zdWJtaXREYXRhKX0sMCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlv'@;
put 'biooKXtjb25zdCBkPWEucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7YS5pdGVtc051bT0xMDt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0U3VibWl0dHMoKTtpZihhLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGgsYS5yZW1haW5lZD4wKXthLnN1Ym1pdHRlcj1o'@;
put 'LmZyb21zYXNbMF0uU1VCTUlUVEVEX0JZX05NO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24oXyl7cmV0dXJue3RhYmxlSWQ6Xy5UQUJMRV9JRCxiYXNlOl8uQkFTRV9UQUJMRSxzdWJtaXR0ZWQ6Xy5TVUJNSVRURURfT05fRFRUTSxzdWJtaXR0ZXI6Xy5TVUJNSVRURURfQllfTk0sc3Vi'@;
put 'bWl0UmVhc29uOl8uU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7aWYoYS5zdWJtaXR0ZXJMaXN0PWYsYS5zdWJtaXREYXRhPWguZnJvbXNhcyx0eXBlb2YgZDwidSIpe2NvbnN0IF89YS5zdWJtaXR0ZXJMaXN0LmZpbmRJbmRleChUPT5ULnRhYmxlSWQ9PT1kKTtfPi0xJiZhLmdldERldGFpbHMo'@;
put 'YS5zdWJtaXR0ZXJMaXN0W19dLF8pfX1hLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImVkaXRvcnMvZ2V0c3VibWl0cyIsaCl9fSkoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9yZWFkeVN1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRT'@;
put 'dWJtaXQuc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PWF9KSx0aGlzLl9iYWNrVG9TdWI9dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0U3VibWl0TGlzdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9IXRoaXMuc3ViUmVhZHksdGhpcy5kZXRhaWxzT3Blbj0hMX0pfWRvd25sb2FkKGEp'@;
put 'e2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0Zmls'@;
put 'ZSZ0YWJsZT0iK2EpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KERzKSx0dChXbCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN1Ym1pdHRlciJdXSxob3N0QXR0cnM6WzEs'@;
put 'ImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbMSwidy0xMDAiXSxbImNsYXNzIiwiY29udGVudC1hcmVhIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiY2FyZCJdLFsiY2xhc3Mi'@;
put 'LCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAg'@;
put 'Y29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJq'@;
put 'dXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm5vLXN1Ym1pdHRlZC10YWJsZXMiLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXpl'@;
put 'IiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJoLTcwdmgiLCJkLWZs'@;
put 'ZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3Rv'@;
put 'bS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LXN0YXJ0Il0sWzMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMs'@;
put 'Im5nVmFsdWUiXSxbMSwiY2VudGVyIiwzLCJjbHJEZ1BhZ2VTaXplIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsicm9sZSIsInRvb2x0aXAiLDEsInJvdyIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxp'@;
put 'bmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRl'@;
put 'ciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApLFFlKDEsYkdlLDIsMSwiZGl2IiwxKSxRZSgyLHlHZSwyLDAsImRpdiIsMikseWUoKSksMiZhJiYoQ2UoMSks'@;
put 'UmUoIm5nSWYiLCFkLnN1YlJlYWR5KSxDZSgxKSxSZSgibmdJZiIsZC5zdWJSZWFkeSkpfSxkZXBlbmRlbmNpZXM6W3VjLFppLGwxLGMxLE0wLEJzLE9zLFc4LFRwLHRnLFBFLFU4LEZFLG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LGthLEpzZV0sc3R5bGVzOlsiLm5vQm9yZGVyW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdj'@;
put 'b250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLWJvdHRvbTou'@;
put 'MjA4MzNyZW0gc29saWQgIzMxNDM1MX0ubm8tc3VibWl0dGVkLXRhYmxlc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KSxjfSkoKTtmdW5jdGlvbiB3R2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDEyKSxxdCgxLCJjbHItaWNvbiIsMTMpLG1lKDIs'@;
put 'ImgzIiwxNCksTmUoMywiVGhlcmUgaXMgbm8gaGlzdG9yeSB0byBzaG93IikseWUoKSgpKX1mdW5jdGlvbiBDR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj1WZSgpO3Jl'@;
put 'dHVybiBqdChmLmdldFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtDZSgxKSxvcihkLmFwcHJvdmVEYXRhW2FdKX19ZnVuY3Rpb24gU0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2'@;
put 'IikoMSwiYSIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4ganQoZi5nZXRCYXNlVGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTmUoMiwiVklFVyIpLHllKCksbWUoMywic3BhbiIpLE5lKDQsIiAvICIpLHllKCks'@;
put 'bWUoNSwiYSIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4ganQoZi5nZXRFZGl0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTmUoNiwiRURJVCIpLHllKCkoKX19ZnVuY3Rpb24gTUdlKGMsbCl7aWYoMSZjJiYo'@;
put 'bWUoMCwic3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMSksb3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIHhHZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDYpLE5lKDIpLHllKCksbWUoMywidGQiLDYpLFFlKDQs'@;
put 'Q0dlLDIsMSwiYSIsMTUpLFFlKDUsU0dlLDcsMCwiZGl2IiwxNiksUWUoNixNR2UsMiwxLCJzcGFuIiwxNikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O0NlKDIpLG9yKGEpLENlKDIpLFJlKCJuZ0lmIixkPDEpLENlKDEpLFJlKCJuZ0lmIixkPDImJmQ+PTEp'@;
put 'LENlKDEpLFJlKCJuZ0lmIixkPj0yKX19ZnVuY3Rpb24gRUdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsMjApLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIGtHZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyBoaXN0b3J5IikseWUoKSgp'@;
put 'KX1mdW5jdGlvbiBBR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE4KSxRZSgxLEVHZSwyLDAsInNwYW4iLDE5KSxRZSgyLGtHZSwzLDAsImRpdiIsMTYpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2Fk'@;
put 'ZWQpfX1mdW5jdGlvbiBUR2UoYyxsKXsxJmMmJihtZSgwLCJoMyIsMjgpLE5lKDEsIkhJU1RPUlkiKSx5ZSgpKX1mdW5jdGlvbiBER2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwyOSksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgVG8gdW5sb2NrIG1vcmUgdGhh'@;
put 'biAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkLCIgcmVjb3JkcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX1jb25zdCBJR2U9ZnVuY3Rpb24oYyxsKXtyZXR1cm57cmVqZWN0ZWQ6YyxhY2NlcHRlZDpsfX07ZnVuY3Rpb24gTEdlKGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRnLXJvdyIsMzMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMykuZ2V0QXBwckluZGV4KGYpKX0pLG1lKDEsImNsci1kZy1jZWxsIiwzNCkoMiwiYSIsMzUpLHh0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMykuZ2V0QmFzZVRhYmxlKGYuYmFzZXRhYmxlKSl9KSxOZSgzKSx5ZSgpKCksbWUoNCwiY2xyLWRnLWNlbGwiLDM2KSxOZSg1KSx5ZSgpLG1lKDYsImNsci1kZy1jZWxsIiwzNCksTmUoNykseWUo'@;
put 'KSxtZSg4LCJjbHItZGctY2VsbCIsMzQpLE5lKDkpLHllKCksbWUoMTAsImNsci1kZy1jZWxsIiwzNCksTmUoMTEpLHllKCksbWUoMTIsImNsci1kZy1jZWxsIiwzNCksTmUoMTMpLHllKCksbWUoMTQsImNsci1kZy1jZWxsIiwzNykoMTUsImJ1dHRvbiIsMzgpLHh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIFZlKDMpLmRvd25sb2FkKF8udGFibGVJZCksanQoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxxdCgxNiwiY2xyLWljb24iLDM5KSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMyksb3IoYS5iYXNldGFi'@;
put 'bGUpLENlKDEpLFJlKCJuZ0NsYXNzIixRMig3LElHZSwiUkVKRUNURUQiPT09YS5zdGF0dXMsIkFQUFJPVkVEIj09PWEuc3RhdHVzKSksQ2UoMSksb3IoYS5zdGF0dXMpLENlKDIpLG9yKGEuc3VibWl0dGVyKSxDZSgyKSxvcihhLnN1Ym1pdHRlZFJlYXNvbiksQ2UoMiksb3IoYS5zdWJtaXR0'@;
put 'ZWQpLENlKDIpLG9yKGEucmV2aWV3ZWQpfX1mdW5jdGlvbiBSR2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItZGF0YWdyaWQiLDMwKSgxLCJjbHItZGctY29sdW1uIiwzMSksTmUoMiwiQkFTRV9UQUJMRSIpLHllKCksbWUoMywiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDQsIlNUQVRVUyIpLHll'@;
put 'KCksbWUoNSwiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDYsIlNVQk1JVFRFUiIpLHllKCksbWUoNywiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDgsIlNVQk1JVCBSRUFTT04iKSx5ZSgpLG1lKDksImNsci1kZy1jb2x1bW4iLDMxKSxOZSgxMCwiU1VCTUlUVEVEIikseWUoKSxtZSgxMSwiY2xyLWRn'@;
put 'LWNvbHVtbiIsMzEpLE5lKDEyLCJBUFBST1ZFRCAvIFJFSkVDVEVEIikseWUoKSxtZSgxMywiY2xyLWRnLWNvbHVtbiIpLE5lKDE0LCJET1dOTE9BRCIpLHllKCksUWUoMTUsTEdlLDE3LDEwLCJjbHItZGctcm93IiwzMikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJjbHJE'@;
put 'Z0ZpZWxkIiwiYmFzZXRhYmxlIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdGF0dXMiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxD'@;
put 'ZSgyKSxSZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiksQ2UoNCksUmUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24gT0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChW'@;
put 'ZSgyKS5sb2FkRGF0YSgpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO1JlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxDZSgxKSxncigiIExvYWQgIixhLnJvd3NMZWZ0VG9Mb2FkLCIgbW9yZSAiKX19ZnVuY3Rpb24gUEdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2'@;
put 'IiwyMSkoMSwiZGl2IiwyMiksUWUoMixUR2UsMiwwLCJoMyIsMjMpLFFlKDMsREdlLDIsMSwicCIsMjQpLHllKCksUWUoNCxSR2UsMTYsNywiY2xyLWRhdGFncmlkIiwyNSksbWUoNSwiZGl2IiwyNiksUWUoNixPR2UsMiwyLCJidXR0b24iLDI3KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgp'@;
put 'O0NlKDIpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgyKSxSZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlz'@;
put 'dG9yeV9yb3dzX2FsbG93ZWQ9PT1hLkluZmluaXR5JiZhLnJvd3NMZWZ0VG9Mb2FkPjApfX1jb25zdCBGR2U9W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6YUdlfSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJZCIsY29tcG9uZW50OkpzZX0se3BhdGg6InN1Ym1pdHRlZCIsY29tcG9uZW50'@;
put 'OlFzZX0se3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9uZW50OlFzZX0se3BhdGg6Imhpc3RvcnkiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVu'@;
put 'dFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2VydmljZT1fLHRoaXMuaGlzdG9yeT1bXSx0aGlzLnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMub3Blbk1vZGFsPSExLHRoaXMubm9EYXRhPSExLHRo'@;
put 'aXMuYXBwcm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5oaXN0UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0'@;
put 'YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0QmFzZVRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwo'@;
put 'Ii92aWV3L2RhdGEvIithKX1nZXRFZGl0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdldEFwcHJJbmRleChhKXtjb25zdCBkPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgoaD0+aC5UQUJMRV9JRD09PWEudGFibGVJZCk7ZD4tMSYmKHRoaXMuYXBw'@;
put 'cm92ZURhdGE9dGhpcy5oaXN0b3J5QXJyW2RdLHRoaXMub3Blbk1vZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xvYWQoKXtjb25zdCBhPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsZD10aGlzLmhpc3RQYXJhbXMuSElTVDtyZXR1cm4gYTw9MD8wOmE+ZD9kOmF9ZG93'@;
put 'bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLF89dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK18rIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0'@;
put 'YXVkaXRmaWxlJnRhYmxlPSIrYSsiJl9jb250ZXh0bmFtZT0iK3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGQ9e1NUQVJUUk9XOmEuaGlzdFBhcmFtcy5ISVNUK2EuaGlzdFBhcmFtcy5TVEFSVFJP'@;
put 'V307YS5sb2FkaW5nTW9yZT0hMDt0cnl7bGV0IGYsaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRIaXN0b3J5KGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIpO2EubG9hZGluZ01vcmU9ITEsYS5oaXN0UGFyYW1zPWguaGlzdHBhcmFtc1swXTtjb25zdCBfPWgu'@;
put 'ZnJvbXNhcy5zbGljZSgwLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKTtpZihfLmxlbmd0aD4wKXtjb25zdCBUPV87YS5oaXN0b3J5QXJyPV8sZj1PYmplY3Qua2V5cyhUWzBdKSxhLnRhYmxlVGl0bGVzPWY7bGV0IFc9Xy5tYXAoZnVuY3Rpb24oaWUpe3JldHVy'@;
put 'bnt0YWJsZUlkOmllLlRBQkxFX0lELHN1Ym1pdHRlcjppZS5TVUJNSVRURVIsc3VibWl0dGVkUmVhc29uOmllLlNVQk1JVFRFRF9SRUFTT05fVFhULHN1Ym1pdHRlZDppZS5TVUJNSVRURUQsc3RhdHVzOmllLlNUQVRVUyxyZXZpZXdSZWFzb246aWUuUkVWSUVXX1JFQVNPTl9UWFQscmV2aWV3'@;
put 'ZXI6aWUuUkVWSUVXRVIscmV2aWV3ZWQ6aWUuUkVWSUVXRUQsbnVtT2ZBcHByb3ZhbHM6aWUuTlVNX09GX0FQUFJPVkFMU19SRVFVSVJFRCxiYXNldGFibGU6aWUuQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCguLi5XKSxhLmxvYWRlZD0hMH1lbHNlIGEubG9hZGVkPSEwLDA9PT1hLmhp'@;
put 'c3RvcnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGgpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Eu'@;
put 'bG9hZERhdGEoKX0pKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChiZCksdHQodmwpLHR0KERzKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaGlzdG9yeSJdXSxob3N0QXR0cnM6WzEs'@;
put 'ImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MjAsdmFyczo2LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLCJjbGFzcyIsImNhcmQtYmxvY2sgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2Vu'@;
put 'dGVyIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3Rl'@;
put 'ciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJ'@;
put 'ZiJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLDEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJd'@;
put 'LFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIi'@;
put 'LCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsi'@;
put 'Y2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWhpc3RvcnkgZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJdLFsxLCJsb2FkLW1vcmUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250'@;
put 'ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwiYnRuIGJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13'@;
put 'ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImRhdGFncmlkLWhpc3RvcnkiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIl0s'@;
put 'WzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwibS0wIiwzLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiLDMsIm5nQ2xhc3MiXSxbMSwidmVyQ2VudGVyIiwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxb'@;
put 'InNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCksUWUoMSx3R2UsNCwwLCJkaXYiLDEpLG1lKDIsImNsci1tb2RhbCIsMikseHQoImNsck1vZGFs'@;
put 'T3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3Blbk1vZGFsPWZ9KSxtZSgzLCJoNCIsMyksTmUoNCwiQXBwcm92YWwgZGV0YWlscyIpLHllKCksbWUoNSwiZGl2Iiw0KSg2LCJ0YWJsZSIsNSkoNywidGhlYWQiKSg4LCJ0ciIpKDksInRoIiw2KSxOZSgxMCwiTmFtZSIpLHllKCks'@;
put 'bWUoMTEsInRoIiw2KSxOZSgxMiwiVmFsdWUiKSx5ZSgpKCkoKSxtZSgxMywidGJvZHkiKSxRZSgxNCx4R2UsNyw0LCJ0ciIsNykseWUoKSgpKCksbWUoMTUsImRpdiIsOCkoMTYsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm9wZW5Nb2RhbD0hMX0pLE5lKDE3'@;
put 'LCIgT0sgIikseWUoKSgpKCksUWUoMTgsQUdlLDMsMiwiZGl2IiwxMCksUWUoMTksUEdlLDcsNCwiZGl2IiwxMSkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQubm9EYXRhKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLm9wZW5Nb2RhbCkoImNsck1vZGFsU2l6ZSIsInhsIiksQ2Uo'@;
put 'MTIpLFJlKCJuZ0Zvck9mIixkLnRhYmxlVGl0bGVzKSxDZSg0KSxSZSgibmdJZiIsIWQubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWQubm9EYXRhJiZkLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3VjLHhzLFppLFc4LFRwLHRnLFU4LG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LGthLG91LHN1'@;
put 'LFp1LGRoXSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmhzQ2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlz'@;
put 'cGxheTpmbGV4IWltcG9ydGFudDtmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50O2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnQ7cGFkZGluZzo3cHh9LmJ0Q2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4'@;
put 'IWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0udmVyQ2VudGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5sb2FkLW1vcmVbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRb'@;
put 'X25nY29udGVudC0lQ09NUCVde3dpZHRoOjkwcHh9I25vRGF0YUNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KSxjfSkoKX1dO2xldCBIR2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sZGMuZm9yQ2hpbGQoRkdlKSxkY119KSxjfSkoKSxOR2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sJGwsSEdlLF91LF83LmZvclJvb3QoKSxDMixWN119KSxjfSkoKSxWR2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXIt'@;
put 'b3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCk7ZnVuY3Rpb24gQkdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsNiksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gakdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHN1Ym1p'@;
put 'dHRlZCB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gekdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0KSxRZSgxLEJHZSwyLDAsInNwYW4iLDUpLFFlKDIsakdlLDMsMCwiZGl2IiwzKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKSxDZSgxKSxS'@;
put 'ZSgibmdJZiIsIWEubG9hZGVkKX19Y29uc3QgVUdlPWZ1bmN0aW9uKGMsbCl7cmV0dXJue3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH19O2Z1bmN0aW9uIFpHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIpKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJoNCIsOSksTmUoNCwi'@;
put 'U3RhZ2VkIERhdGEiKSx5ZSgpKCkoKSxtZSg1LCJkaXYiLDEwKSg2LCJkaXYiLDExKSg3LCJkaXYiLDEyKSg4LCJkaXYiLDgpLE5lKDksIkJhc2ljIFN1Ym1pdHRlZCBEZXRhaWxzIikseWUoKSgpLG1lKDEwLCJkaXYiKSgxMSwic3BhbiIpLE5lKDEyLCJUYWJsZSBJZDoiKSx5ZSgpLG1lKDEz'@;
put 'LCJzdHJvbmciKSgxNCwic3BhbiIpLE5lKDE1KSx5ZSgpKCkoKSxtZSgxNiwiZGl2IikoMTcsInNwYW4iKSxOZSgxOCwiQmFzZSBUYWJsZToiKSx5ZSgpLG1lKDE5LCJhIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkp'@;
put 'fSksTmUoMjApLHllKCkoKSxtZSgyMSwiZGl2IikoMjIsInNwYW4iKSxOZSgyMywiU3VibWl0IERhdGU6IikseWUoKSxtZSgyNCwic3BhbiIsMTQpLE5lKDI1KSx5ZSgpKCksbWUoMjYsImRpdiIpKDI3LCJzcGFuIiksTmUoMjgsIlJldmlldyBTdGF0dXM6IikseWUoKSxtZSgyOSwic3BhbiIs'@;
put 'MTUpLE5lKDMwKSx5ZSgpKCkoKSxtZSgzMSwiZGl2IiwxNikoMzIsImRpdiIsMTIpKDMzLCJkaXYiLDgpLE5lKDM0LCJBY3Rpb25zIikseWUoKSgpLG1lKDM1LCJkaXYiLDE3KSgzNiwiZGl2IiwxOCkoMzcsImJ1dHRvbiIsMTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLE5lKDM4LCIgR28gdG8gYmFzZSB0YWJsZSBzY3JlZW4gIikseWUoKSxtZSgzOSwiYnV0dG9uIiwyMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmFwcHJvdmVUYWJsZVNjcmVlbigpKX0pLE5lKDQwLCIg'@;
put 'R28gdG8gYXBwcm92YWxzIHNjcmVlbiAiKSx5ZSgpLG1lKDQxLCJidXR0b24iLDIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZ29CYWNrKCkpfSksTmUoNDIsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSx5ZSgpLG1lKDQzLCJidXR0b24iLDIyKSx4dCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLmRvd25sb2FkKG51bGw9PWgudGFibGVEZXRhaWxzP251bGw6aC50YWJsZURldGFpbHMuVEFCTEVfSUQpKX0pLHF0KDQ0LCJjbHItaWNvbiIsMjMpLHllKCkoKSgpKCkoKSxtZSg0NSwiZGl2IiwyNCkscXQoNDYs'@;
put 'ImhvdC10YWJsZSIsMjUpLHllKCkscXQoNDcsImRpdiIsMjYpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMTUpLGdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIiKSxDZSg1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/'@;
put 'bnVsbDphLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFLCIgIiksQ2UoNSksZ3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxDZSg0KSxSZSgibmdDbGFzcyIsUTIoMTMsVUdlLCJSRUpFQ1RFRCI9PT0obnVsbD09YS50'@;
put 'YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKSxDZSgxKSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDph'@;
put 'LnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lELCIgIiksQ2UoOSksUmUoImRpc2FibGVkIiwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCl8fCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/'@;
put 'bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSksQ2UoNyksUmUoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGEuaG90VGFibGUuY29sdW1ucykoIm1heFJvd3MiLGEuaG90VGFibGUubWF4Um93'@;
put 'cykoImhlaWdodCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlLmxpY2Vuc2VLZXkpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscyl9fWNvbnN0IFlHZT1be3BhdGg6Ijp0YWJsZUlkIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'LF8sVCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9Xyx0aGlzLnNhc1NlcnZpY2U9VCx0aGlzLmxvYWRlZD0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2'@;
put 'aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6NTAwLHNldHRpbmdzOnt9LGxpY2Vuc2VLZXk6dm9pZCAwLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkfHwxLzB9fXN1'@;
put 'Ym1pdHRlZFRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIit0aGlzLnRhYmxlX2lkKX1hcHByb3ZlVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZURldC8iK3RoaXMudGFibGVfaWQpfXZpZXdlclRhYmxl'@;
put 'U2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9Z29CYWNrKCl7R24ueGxtYXBzLmZpbmQoZD0+ZC50YXJnZXREUz09PXRoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpP3RoaXMucm91dGUubmF2aWdh'@;
put 'dGVCeVVybCgiL2hvbWUvZmlsZXMvIit0aGlzLmhvdFRhYmxlLmRhdGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0Nv'@;
put 'bmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfW5nT25Jbml0KCl7dmFyIGE9dGhp'@;
put 'cztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2EudGFibGVfaWQ9YS5yb3V0ZXIu'@;
put 'c25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIp'@;
put 'O2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZp'@;
put 'Y2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sXz1bXTtmb3IobGV0IFcgaW4gaCloJiZmLnB1'@;
put 'c2goVyk7Zm9yKGxldCBXPTA7VzxmLmxlbmd0aDtXKyspXy5wdXNoKHtkYXRhOmZbV119KTtsZXQgVD1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5ob3RUYWJsZS5jb2x1bW5zPV8s'@;
put 'YS5ob3RUYWJsZS5jZWxscz1ULGEubG9hZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSxhLmxvYWRlZD0hMX19fSko'@;
put 'KX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsLWJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQzApLHR0KGJkKSx0'@;
put 'dCh2bCksdHQoRHMpLHR0KFdsKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3RhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjbHItY29s'@;
put 'LW1kLTEyIiwiY2FyZCJdLFsiY2xhc3MiLCJoLTgwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiaC04MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZs'@;
put 'ZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtdGl0bGUiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtdC0wIl0sWyJuZy1pZiIsImxv'@;
put 'YWRlZCIsMSwiY2xyLXJvdyJdLFsxLCJjYXJkLWJsb2NrIiwiY2xyLWNvbC1tZC02Il0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJdLFsxLCJiYXNlVGFibGVMaW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsxLCJtdC0xMCIsMywibmdDbGFzcyJdLFsxLCJjbHItY29sLW1kLTYiLCJjYXJk'@;
put 'LWJsb2NrIl0sWzEsIm10LTIwIl0sWzEsInJvdyJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIl0sWyJpZCIsImFwcHJvdmFsLWJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2Vu'@;
put 'dGVyIiwibXQtMjAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4dC1jZW50ZXIiLCJtdC0yMCIsIm1pbi13'@;
put 'LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsImNhcmQtYmxvY2siXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsIm1heFJvd3MiLCJoZWlnaHQiLCJsaWNl'@;
put 'bnNlS2V5IiwiY2VsbHMiXSxbMSwiY2FyZC1mb290ZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFFlKDIsekdlLDMsMiwiZGl2IiwyKSxRZSgzLFpHZSw0OCwxNiwiZGl2'@;
put 'IiwzKSx5ZSgpKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwhZC5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3VjLFppLGthLHh5XSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6'@;
put 'NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmJhc2VUYWJsZUxpbmtbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6MTBweDtjb2xvcjojMDA3Y2JifSJdfSksY30pKCl9XTtsZXQgV0dlPSgo'@;
put 'KT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLF91LGRjLmZvckNoaWxkKFlHZSksXzcuZm9yUm9vdCgpXX0pLGN9KSgpO2Z1bmN0aW9u'@;
put 'IEdHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBWaWV3ZXIgcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19ZnVuY3Rp'@;
put 'b24gJEdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIEVkaXRvciByb3dzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfX1mdW5j'@;
put 'dGlvbiBxR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgU3RhZ2Ugcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5j'@;
put 'dGlvbiBLR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgSGlzdG9yeSByb3dzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKX19'@;
put 'ZnVuY3Rpb24gWEdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIFN1Ym1pdCByb3dzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KX19'@;
put 'ZnVuY3Rpb24gSkdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIFRhYmxlcyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJy'@;
put 'YXJ5X2xpbWl0KX19ZnVuY3Rpb24gUUdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIFZpZXdib3hlcyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xp'@;
put 'bWl0KX19ZnVuY3Rpb24gZSRlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIExpbmVhZ2UgZGFpbHkgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWls'@;
put 'eV9saW1pdCl9fWZ1bmN0aW9uIHQkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTcpLE5lKDEsIiBSZWZyZXNoIERhdGEgTGluZWFnZSAiKSxtZSgyLCJidXR0b24iLDE4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnJlZnJlc2hE'@;
put 'YXRhTGluZWFnZSgpKX0pLE5lKDMsIiBSRUZSRVNIICIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksUmUoImNsckxvYWRpbmciLGEucmVmcmVzaGluZ0RhdGFMaW5lYWdlKX19ZnVuY3Rpb24gbiRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksUWUoMSx0JGUs'@;
put 'NCwxLCJkaXYiLDE2KSxtZSgyLCJkaXYiLDE3KSxOZSgzLCIgUmVmcmVzaCBEYXRhIENhdGFsb2cgIiksbWUoNCwiYnV0dG9uIiwxOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnJlZnJlc2hEYXRhQ2F0YWxvZygpKX0pLE5lKDUsIiBSRUZSRVNIICIpLHll'@;
put 'KCkoKSxtZSg2LCJkaXYiLDE3KSxOZSg3LCIgRG93bmxvYWQgQ29uZmlndXJhdGlvbiAiKSxtZSg4LCJidXR0b24iLDE5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZG93bmxvYWRDb25maWd1cmF0aW9uKCkpfSksTmUoOSwiIERPV05MT0FEICIpLHllKCko'@;
put 'KSxtZSgxMCwiZGl2IiwxNyksTmUoMTEsIiBVcGRhdGUgTGljZW5jZSBLZXkgIiksbWUoMTIsImJ1dHRvbiIsMjApLE5lKDEzLCIgVVBEQVRFICIpLHllKCkoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwiU0FTOSI9PT1hLnNlcnZlclR5cGUpLENlKDMpLFJl'@;
put 'KCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZyl9fWNvbnN0IHIkZT1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlz'@;
put 'LmFwcEluZm89e2FkYXB0ZXJWZXJzaW9uOiI0LjEwLjEiLGFwcFZlcnNpb246InY2LjUuMiIucmVwbGFjZSgidiIsIiIpLGJ1aWxkVGltZXN0YW1wOklHKCkocGFyc2VJbnQoIjE3MDcyNDU3MjM1MTgiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpfSx0aGlzLmh0dHA9Imh0dHA6Ij09'@;
put 'PWxvY2F0aW9uLnByb3RvY29sLHRoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3BvbnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5saWNlbmNlU3RhdGU9'@;
put 'dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5saWNlbmNlSW5mbz10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCksdGhpcy5lbnZpcm9ubWVudEluZm89dGhpcy5h'@;
put 'cHBTZXJ2aWNlLmdldEVudmlyb25tZW50SW5mbygpLHRoaXMuZW52aXJvbm1lbnRJbmZvJiYodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUM9ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSl9bmdPbkluaXQoKXt9ZG93bmxvYWRDb25maWd1cmF0'@;
put 'aW9uKCl7bGV0IGE9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksZD1hLnNlcnZlclVybCxoPWEuYXBwTG9jLGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vZXhwb3J0Y29u'@;
put 'ZmlnIil9cmVmcmVzaERhdGFDYXRhbG9nKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2hjYXRhbG9nIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhKSx0aGlzLnJlc3Bv'@;
put 'bnNlTW9kYWw9ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExfSl9cmVmcmVzaERhdGFMaW5lYWdlKCl7dGhpcy5yZWZyZXNoaW5n'@;
put 'RGF0YUxpbmVhZ2U9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2h0YWJsZWxpbmVhZ2UiLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNl'@;
put 'PXRoaXMucGFyc2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITF9KX1wYXJzZVJlc3BvbnNlKGEpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTphfX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVeCksdHQob2EpLHR0KEMwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0iXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEzMCx2YXJzOjM0LGNv'@;
put 'bnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwicC0xMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCJdLFsxLCJ3LTEwMCIsImxpZ2h0'@;
put 'Il0sWzEsImNvbnRlbnQtYm94IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInN5cy1pbmZvIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1sZy1yb3ciXSxbMSwibS0wIl0sWzEsImRhcmsiXSxbMSwiZC1m'@;
put 'bGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVy'@;
put 'Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwiYWRtaW4tYWN0aW9uIiw0LCJuZ0lmIl0sWzEsImFkbWluLWFjdGlvbiJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xyTG9hZGluZyIsImNsaWNr'@;
put 'Il0sWzEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIiwzLCJjbGljayJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJo'@;
put 'NCIsMiksTmUoMywiU3lzdGVtIGluZm9ybWF0aW9uIikseWUoKSxxdCg0LCJociIsMyksbWUoNSwiZGl2Iiw0KSg2LCJkaXYiLDUpKDcsImRpdiIpKDgsImg2Iiw2KSxOZSg5LCJFbnZpcm9ubWVudCBEZXRhaWxzICIpLHF0KDEwLCJzcGFuIiw3KSx5ZSgpLG1lKDExLCJwIiw2KSxOZSgxMiwi'@;
put 'IFNZU1NJVEU6ICIpLG1lKDEzLCJzcGFuIiw3KSxOZSgxNCkseWUoKSgpLG1lKDE1LCJwIiw2KSxOZSgxNiwiIFNZU1NDUEw6ICIpLG1lKDE3LCJzcGFuIiw3KSxOZSgxOCkseWUoKSgpLG1lKDE5LCJwIiw2KSxOZSgyMCwiIFNZU1RDUElQSE9TVE5BTUU6ICIpLG1lKDIxLCJzcGFuIiw3KSxO'@;
put 'ZSgyMikseWUoKSgpLG1lKDIzLCJwIiw2KSxOZSgyNCwiIFNZU1ZMT05HOiAiKSxtZSgyNSwic3BhbiIsNyksTmUoMjYpLHllKCkoKSxtZSgyNywicCIsNiksTmUoMjgsIiBNRU1TSVpFOiAiKSxtZSgyOSwic3BhbiIsNyksTmUoMzApLHllKCkoKSxtZSgzMSwicCIsNiksTmUoMzIsIiBTWVNQ'@;
put 'Uk9DRVNTTU9ERTogIiksbWUoMzMsInNwYW4iLDcpLE5lKDM0KSx5ZSgpKCksbWUoMzUsInAiLDYpLE5lKDM2LCIgU1lTSE9TVE5BTUU6ICIpLG1lKDM3LCJzcGFuIiw3KSxOZSgzOCkseWUoKSgpLG1lKDM5LCJwIiw2KSxOZSg0MCwiIFNZU0hPU1RJTkZPTE9ORzogIiksbWUoNDEsInNwYW4i'@;
put 'LDcpLE5lKDQyKSx5ZSgpKCksbWUoNDMsInAiLDYpLE5lKDQ0LCIgU1lTRU5DT0RJTkc6ICIpLG1lKDQ1LCJzcGFuIiw3KSxOZSg0NikseWUoKSgpLG1lKDQ3LCJwIiw2KSxOZSg0OCwiIEFVVE9FWEVDOiAiKSxtZSg0OSwic3BhbiIsNyksTmUoNTApLHllKCkoKSxtZSg1MSwicCIsNiksTmUo'@;
put 'NTIsIiBEQyBBRE1JTiBHUk9VUDogIiksbWUoNTMsInNwYW4iLDcpLE5lKDU0KSx5ZSgpKCkoKSxtZSg1NSwiZGl2Iiw4KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxOZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLHF0KDU5LCJzcGFuIiw3KSx5ZSgpLG1lKDYwLCJwIiw2KSxOZSg2'@;
put 'MSwiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLG1lKDYyLCJzcGFuIiw3KSxOZSg2MykseWUoKSgpLG1lKDY0LCJwIiw2KSxOZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIiksbWUoNjYsInNwYW4iLDcpLE5lKDY3KSx5ZSgpKCksbWUoNjgsInAiLDYpLE5lKDY5LCIgQWRhcHRlciB2ZXJzaW9u'@;
put 'OiAiKSxtZSg3MCwic3BhbiIsNyksTmUoNzEpLHllKCkoKSxtZSg3MiwicCIsNiksTmUoNzMsIiBIVFRQOiAiKSxtZSg3NCwic3BhbiIsNyksTmUoNzUpLHllKCkoKSgpKCksbWUoNzYsImRpdiIpKDc3LCJoNiIsNiksTmUoNzgsIkxpY2VuY2UgZGV0YWlscyAiKSxxdCg3OSwic3BhbiIsNyks'@;
put 'eWUoKSxtZSg4MCwicCIsNiksTmUoODEsIiBWYWxpZCB1bnRpbDogIiksbWUoODIsInNwYW4iLDcpLE5lKDgzKSx5ZSgpKCksbWUoODQsInAiLDYpLE5lKDg1LCIgVXNlcnMgYWxsb3dlZDogIiksbWUoODYsInNwYW4iLDcpLE5lKDg3KSx5ZSgpKCksbWUoODgsInAiLDYpLE5lKDg5LCIgU2l0'@;
put 'ZSBJRHM6ICIpLG1lKDkwLCJzcGFuIiw3KSxOZSg5MSkseWUoKSgpLG1lKDkyLCJwIiw2KSxOZSg5MywiIEZyZWUgVGllcjogIiksbWUoOTQsInNwYW4iLDcpLE5lKDk1KSx5ZSgpKCksUWUoOTYsR0dlLDQsMSwicCIsOSksUWUoOTcsJEdlLDQsMSwicCIsOSksUWUoOTgscUdlLDQsMSwicCIs'@;
put 'OSksUWUoOTksS0dlLDQsMSwicCIsOSksUWUoMTAwLFhHZSw0LDEsInAiLDkpLFFlKDEwMSxKR2UsNCwxLCJwIiw5KSxRZSgxMDIsUUdlLDQsMSwicCIsOSksUWUoMTAzLGUkZSw0LDEsInAiLDkpLG1lKDEwNCwicCIsNiksTmUoMTA1LCIgVmlld2JveGVzOiAiKSxtZSgxMDYsInNwYW4iLDcp'@;
put 'LE5lKDEwNykseWUoKSgpLG1lKDEwOCwicCIsNiksTmUoMTA5LCIgRmlsZSBVcGxvYWQ6ICIpLG1lKDExMCwic3BhbiIsNyksTmUoMTExKSx5ZSgpKCksbWUoMTEyLCJwIiw2KSxOZSgxMTMsIiBFZGl0IHJlY29yZDogIiksbWUoMTE0LCJzcGFuIiw3KSxOZSgxMTUpLHllKCkoKSxtZSgxMTYs'@;
put 'InAiLDYpLE5lKDExNywiIEFkZCByZWNvcmQ6ICIpLG1lKDExOCwic3BhbiIsNyksTmUoMTE5KSx5ZSgpKCkoKSgpLHF0KDEyMCwiaHIiLDMpLFFlKDEyMSxuJGUsMTQsMiwibmctY29udGFpbmVyIiwxMCkseWUoKSgpKCksbWUoMTIyLCJjbHItbW9kYWwiLDExKSx4dCgiY2xyTW9kYWxPcGVu'@;
put 'Q2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5yZXNwb25zZU1vZGFsPWZ9KSxtZSgxMjMsImgzIiwxMiksTmUoMTI0LCJSZXNwb25zZSIpLHllKCksbWUoMTI1LCJkaXYiLDEzKSxOZSgxMjYpLHllKCksbWUoMTI3LCJkaXYiLDE0KSgxMjgsImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gZC5yZXNwb25zZU1vZGFsPSExfSksTmUoMTI5LCIgT2sgIikseWUoKSgpKCkpLDImYSYmKENlKDE0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1NJVEUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZv'@;
put 'P251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTU0NQTCksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNUQ1BJUEhPU1ROQU1FKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZ'@;
put 'U1ZMT05HKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLk1FTVNJWkUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTUFJPQ0VTU01PREUpLENlKDQpLG9yKG51bGw9PWQuZW52'@;
put 'aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVE5BTUUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52'@;
put 'aXJvbm1lbnRJbmZvLlNZU0VOQ09ESU5HKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLkRDX0FETUlOX0dST1VQKSxD'@;
put 'ZSg5KSxvcihkLmFwcEluZm8uYXBwVmVyc2lvbiksQ2UoNCksb3IoZC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxDZSg0KSxvcihkLmFwcEluZm8uYWRhcHRlclZlcnNpb24pLENlKDQpLG9yKGQuaHR0cD8iWUVTIjoiTk8iKSxDZSg4KSxvcihudWxsPT1kLmxpY2VuY2VJbmZvP251bGw6ZC5s'@;
put 'aWNlbmNlSW5mby52YWxpZF91bnRpbCksQ2UoNCksb3IobnVsbD09ZC5saWNlbmNlSW5mbz9udWxsOmQubGljZW5jZUluZm8udXNlcnNfYWxsb3dlZCksQ2UoNCksb3IobnVsbD09ZC5saWNlbmNlSW5mbz9udWxsOmQubGljZW5jZUluZm8uc2l0ZV9pZF9tdWx0aXBsZSksQ2UoNCksb3IobnVs'@;
put 'bCE9ZC5saWNlbmNlSW5mbyYmZC5saWNlbmNlSW5mby5kZW1vPyJZRVMiOiJOTyIpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9y'@;
put 'b3dzX2FsbG93ZWQhPT1kLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0'@;
put 'eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQu'@;
put 'bGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1kLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWQuSW5maW5pdHkpLENlKDQpLG9yKGQubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5P'@;
put 'IiksQ2UoNCksb3IoZC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxDZSg0KSxvcihkLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLENlKDQpLG9yKGQubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSxDZSgy'@;
put 'KSxSZSgibmdJZiIsMT09PShudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLnJlc3BvbnNlTW9kYWwpLENlKDQpLGdyKCIgIixkLnJlc3BvbnNlLCIgIikpfSxkZXBlbmRlbmNpZXM6W1ppLEJ1'@;
put 'LG91LHN1LFp1LGRoXSxzdHlsZXM6WyIuY29udGVudC1ib3hbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMjg5cHh9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGRpdltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfS5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBk'@;
put 'aXZbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJnaW46MCAzMHB4fS5hZG1pbi1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMTBweDtib3Jk'@;
put 'ZXItcmFkaXVzOjZweDtib3JkZXI6MXB4IHNvbGlkICNkZWRlZGU7bWFyZ2luLWJvdHRvbTo1cHh9LmFkbWluLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoxMDJweH0uZGFya1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6'@;
put 'IzAwMH1AbWVkaWEgKG1heC13aWR0aDogOTkzcHgpey5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJnaW46MH0uc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJn'@;
put 'aW46MjBweCAwfX0iXX0pLGN9KSgpfV07bGV0IGkkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltkYy5mb3JDaGlsZChyJGUpLGRj'@;
put 'XX0pLGN9KSgpLG8kZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxpJGUsX3VdfSksY30pKCk7ZnVuY3Rpb24gcyRlKGMsbCl7'@;
put 'MSZjJiZxdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGEkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGguZ3JvdXBTZWFyY2g9IiIsanQoaC5ncm91cExpc3RP'@;
put 'bkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIGwkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmdyb3Vw'@;
put 'U2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LHMkZSwxLDAsImNsci1pY29uIiwxMCksUWUoNSxhJGUsMSwwLCJjbHItaWNvbiIsMTEpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyks'@;
put 'ZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmdyb3VwU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBjJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1u'@;
put 'b2RlIiwxNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLG1lKDEsInAiLDE2KSxxdCgyLCJjbHItaWNvbiIsMTcpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1w'@;
put 'bGljaXQsZD1WZSgpO2RyKCJ0YWJsZS1hY3RpdmUiLGEuR1JPVVBVUkk9PT1kLmdyb3VwVXJpKSxDZSgzKSxncigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gdSRlKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxjJGUsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksVXIoKSksMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBkJGUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBoJGUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYi'@;
put 'LDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjQpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjUpKDYsInAiLDI2KSg3LCJiIiksTmUoOCkseWUoKSgpKCkoKSxtZSg5LCJ0ciIpKDEwLCJ0ZCIsMjUpKDExLCJpIiksTmUoMTIpLHllKCkoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1W'@;
put 'ZSgyKTtDZSg4KSxvcihhLmdyb3VwTmFtZSksQ2UoNCksb3IoYS5ncm91cERlc2N8fCJubyBkZXNjcmlwdGlvbiIpfX1mdW5jdGlvbiBmJGUoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIHAkZShjLGwpezEmYyYmKEJyKDAp'@;
put 'LG1lKDEsInRkIiwzMSkoMiwiYiIpLE5lKDMsIk5BTUUiKSx5ZSgpKCksbWUoNCwidGQiLDMxKSg1LCJiIiksTmUoNiwiRU1BSUwiKSx5ZSgpKCksbWUoNywidGQiLDMxKSg4LCJiIiksTmUoOSwiQ1JFQVRFRCIpLHllKCkoKSxtZSgxMCwidGQiLDMyKSgxMSwiYiIpLE5lKDEyLCJVUERBVEVE'@;
put 'IikseWUoKSgpLFVyKCkpfWZ1bmN0aW9uIGckZShjLGwpezEmYyYmKEJyKDApLG1lKDEsInRkIiwzMSkoMiwiYiIpLE5lKDMsIklEIikseWUoKSgpLG1lKDQsInRkIiwzMSkoNSwiYiIpLE5lKDYsIkRJU1BMQVkgTkFNRSIpLHllKCkoKSxtZSg3LCJ0ZCIsMzEpKDgsImIiKSxOZSg5LCJVU0VS'@;
put 'IE5BTUUiKSx5ZSgpKCksVXIoKSl9ZnVuY3Rpb24gbSRlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwidGQiLDMyKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMiksTmUoNCkseWUoKSxtZSg1LCJ0ZCIsMzIpLE5lKDYpLHllKCksbWUoNywidGQiLDMyKSxOZSg4KSx5ZSgpLFVyKCkpLDImYyl7'@;
put 'Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgyKSxvcihhLk1FTUJFUk5BTUUpLENlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuTUVNQkVSQ1JFQVRFRCksQ2UoMiksb3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gdiRlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwidGQiLDMyKSxO'@;
put 'ZSgyKSx5ZSgpLG1lKDMsInRkIiwzMiksTmUoNCkseWUoKSxtZSg1LCJ0ZCIsMzIpLE5lKDYpLHllKCksVXIoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDIpLG9yKGEuSUQpLENlKDIpLG9yKGEuRElTUExBWU5BTUUpLENlKDIpLG9yKGEuVVNFUk5BTUUpfX1mdW5jdGlvbiBf'@;
put 'JGUoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIsMzMpLFFlKDEsbSRlLDksNCwibmctY29udGFpbmVyIiw1KSxRZSgyLHYkZSw3LDMsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoNCk7UmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3Vz'@;
put 'ZXJzLyIrKGEuVVJJTUVNfHxhLklEKSksQ2UoMSksUmUoIm5nSWYiLGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24gYiRlKGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUi'@;
put 'LDI5KSgxLCJ0aGVhZCIpKDIsInRyIiksUWUoMyxwJGUsMTMsMCwibmctY29udGFpbmVyIiw1KSxRZSg0LGckZSwxMCwwLCJuZy1jb250YWluZXIiLDUpLHllKCkoKSxtZSg1LCJ0Ym9keSIpLFFlKDYsXyRlLDMsMywidHIiLDMwKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgzKSxS'@;
put 'ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIHkkZShjLGwpe2lmKDEmYyYmKG1lKDAsImRp'@;
put 'diIpKDEsImgzIiksTmUoMikseWUoKSxRZSgzLGYkZSwyLDAsImg1Iiw1KSxtZSg0LCJkaXYiLDI3KSxRZSg1LGIkZSw3LDMsInRhYmxlIiwyOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksZ3IoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIpIiksQ2UoMSksUmUo'@;
put 'Im5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIHckZShjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gTWVtYmVycyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24gQyRlKGMsbCl7aWYoMSZjJiYo'@;
put 'bWUoMCwidHIiLDMzKSgxLCJ0ZCIsMzIpLE5lKDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuTUVNQkVSSUQpLENlKDIpLG9yKGEuTUVNQkVSTkFNRSl9fWZ1bmN0aW9uIFMkZShjLGwpe2lmKDEmYyYm'@;
put 'KG1lKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIikoNCwiYiIpLE5lKDUpLHllKCkoKSgpKCksbWUoNiwidGJvZHkiKSxRZSg3LEMkZSwzLDIsInRyIiwzMCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoNSksZ3IoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJl'@;
put 'ckNvdW50LCIpIiksQ2UoMiksUmUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gTSRlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLFFlKDMsdyRlLDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjcpLFFlKDUsUyRlLDgsMiwidGFibGUiLDI4'@;
put 'KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxvcihhLmdyb3VwTmFtZSksQ2UoMSksUmUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIHgkZShjLGwpe2lmKDEmYyYmKG1lKDAsImRp'@;
put 'diIpLFFlKDEsaCRlLDEzLDIsImRpdiIsMjApLG1lKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLFFlKDUseSRlLDYsMywiZGl2Iiw1KSxRZSg2LE0kZSw2LDMsImRpdiIsNSkscXQoNywiYnIiKSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDQpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19bGV0IGVhZT0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT1fLHRoaXMuZ3JvdXBTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0i'@;
put 'Iix0aGlzLmdyb3VwVXJpPSIiLHRoaXMuZ3JvdXBOYW1lPSIiLHRoaXMuZ3JvdXBEZXNjPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMubG9hZGluZz0hMSx0aGlzLlNlcnZlclR5cGU9VWMuRCx0aGlzLnNhc2pzQ29uZmlnPXRoaXMu'@;
put 'c2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2Vs'@;
put 'ZWN0aW9uPSJ2aWV3L3VzZXJuYXYvZ3JvdXBzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksR24udXNlcm5hdi5ncm91cExpc3QmJiF0aGlz'@;
put 'LnBhcmFtUHJlc2VudD8odGhpcy5ncm91cHM9R24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Hbi51c2VybmF2Lmdyb3VwU2VhcmNoKToodm9pZCAwPT09R24udXNlcm5hdi5ncm91cExpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pz'@;
put 'Q29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGY9Pih7R1JPVVBVUkk6Zi5pZCxH'@;
put 'Uk9VUE5BTUU6Zi5uYW1lLEdST1VQREVTQzpmLmRlc2NyaXB0aW9ufSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1oLEduLnVzZXJuYXYuZ3JvdXBMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGdyb3VwcyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2Fk'@;
put 'aW5nPSExLHRoaXMuZ3JvdXBzPWEuZ3JvdXBzLEduLnVzZXJuYXYuZ3JvdXBMaXN0PWEuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Hbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUduLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5sb2Fk'@;
put 'aW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgp'@;
put 'KS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9aC5sZW5ndGgsdGhpcy5ncm91'@;
put 'cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihkPT57dGhpcy5ncm91cE1lbWJlcnM9'@;
put 'ZC5zYXNtZW1iZXJzLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1kLnNhc21lbWJlcnMubGVuZ3RoLHZvaWQgMCE9PWQuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWQuc2FzbWVtYmVyc1swXS5VUklNRU18fHRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9'@;
put 'ZC5zYXNtZW1iZXJzWzBdLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1kLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5'@;
put 'T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiksR24udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFj'@;
put 'ZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRp'@;
put 'ZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdS'@;
put 'T1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCBfPWYuaXRlbXMubWFwKFQ9Pih7TUVNQkVSTkFNRTpULm5hbWUsTUVNQkVSSUQ6VC5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz1fLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1fLmxl'@;
put 'bmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBO'@;
put 'QU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWYuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSksdHQo'@;
put 'QWMpLHR0KERzKSx0dChKZCksdHQoV2wpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWdyb3VwIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJz'@;
put 'ZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQi'@;
put 'LCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBHcm91cHMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBh'@;
put 'ZGRpbmciXSxbInNoYXBlIiwidXNlcnMiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJncm91cC1kYXRhIl0sWzEsInRhYmxlIiwiZ3JvdXAtaW5m'@;
put 'byJdLFsxLCJsZWZ0Il0sWzEsImdyb3VwLWluZm8tdGV4dCJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsx'@;
put 'LCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiwwKSgxLCJjbHItdHJlZSIpLFFlKDIsbCRlLDYsMywiY2xyLXRyZWUtbm9kZSIsMSksUWUoMyx1JGUsMiwxLCJuZy1jb250YWluZXIiLDIp'@;
put 'LHllKCkoKSxtZSg0LCJkaXYiLDMpLFFlKDUsZCRlLDMsMCwiZGl2Iiw0KSxRZSg2LHgkZSw4LDMsImRpdiIsNSkseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLGQuZ3JvdXBzKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5ncm91cHMpLENlKDIpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENlKDEp'@;
put 'LFJlKCJuZ0lmIixkLmdyb3VwTWVtYmVycyYmIWQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1LFdhLEJzLE9zLGRkLGcxLGthLGYxLG4zXSxzdHlsZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5ncm91cC1pbmZvLXRleHRbX25n'@;
put 'Y29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS5ncm91cC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4'@;
put 'ICNkYWQ3ZDd9Lmdyb3VwLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2Jv'@;
put 'cmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6YXV0b30uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5ncm91cC1kYXRhW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7d2lkdGg6MTAwJX0uZ3JvdXAt'@;
put 'ZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgLm1lbWJlci10YWJsZVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0gICB0cltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99QG1lZGlh'@;
put 'IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KSxjfSkoKTtmdW5jdGlvbiBFJGUoKXt9ZnVuY3Rpb24geVUoYyl7cmV0dXJuIG51bGw9PWM/RSRlOmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMucXVlcnlTZWxlY3RvcihjKX19ZnVuY3Rpb24gdGFlKGMpe3JldHVybiBudWxsPT1jP1tdOkFycmF5LmlzQXJyYXkoYyk/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIEEkZSgpe3JldHVybltdfWZ1bmN0aW9uIG5hZShjKXtyZXR1cm4gbnVsbD09Yz9BJGU6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGMpfX1mdW5jdGlvbiByYWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhjKX19ZnVuY3Rpb24gaWFlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5tYXRjaGVzKGMpfX12YXIgSSRlPUFycmF5LnByb3Rv'@;
put 'dHlwZS5maW5kO2Z1bmN0aW9uIFIkZSgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBQJGU9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBGJGUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBvYWUoYyl7cmV0dXJuIG5ldyBBcnJh'@;
put 'eShjLmxlbmd0aCl9ZnVuY3Rpb24gb1QoYyxsKXt0aGlzLm93bmVyRG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWMubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9Yyx0aGlzLl9fZGF0YV9fPWx9ZnVuY3Rpb24geiRlKGMsbCxhLGQs'@;
put 'aCxmKXtmb3IodmFyIFQsXz0wLFc9bC5sZW5ndGgsaWU9Zi5sZW5ndGg7XzxpZTsrK18pKFQ9bFtfXSk/KFQuX19kYXRhX189ZltfXSxkW19dPVQpOmFbX109bmV3IG9UKGMsZltfXSk7Zm9yKDtfPFc7KytfKShUPWxbX10pJiYoaFtfXT1UKX1mdW5jdGlvbiBVJGUoYyxsLGEsZCxoLGYsXyl7'@;
put 'dmFyIFQsVyxaZSxpZT1uZXcgTWFwLGdlPWwubGVuZ3RoLHdlPWYubGVuZ3RoLEVlPW5ldyBBcnJheShnZSk7Zm9yKFQ9MDtUPGdlOysrVCkoVz1sW1RdKSYmKEVlW1RdPVplPV8uY2FsbChXLFcuX19kYXRhX18sVCxsKSsiIixpZS5oYXMoWmUpP2hbVF09VzppZS5zZXQoWmUsVykpO2ZvcihU'@;
put 'PTA7VDx3ZTsrK1QpWmU9Xy5jYWxsKGMsZltUXSxULGYpKyIiLChXPWllLmdldChaZSkpPyhkW1RdPVcsVy5fX2RhdGFfXz1mW1RdLGllLmRlbGV0ZShaZSkpOmFbVF09bmV3IG9UKGMsZltUXSk7Zm9yKFQ9MDtUPGdlOysrVCkoVz1sW1RdKSYmaWUuZ2V0KEVlW1RdKT09PVcmJihoW1RdPVcp'@;
put 'fWZ1bmN0aW9uIFokZShjKXtyZXR1cm4gYy5fX2RhdGFfX31mdW5jdGlvbiBXJGUoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiYibGVuZ3RoImluIGM/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIEokZShjLGwpe3JldHVybiBjPGw/LTE6Yz5sPzE6Yz49bD8wOk5hTn1vVC5wcm90b3R5'@;
put 'cGU9e2NvbnN0cnVjdG9yOm9ULGFwcGVuZENoaWxkOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGMsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihjLGwpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGMsbCl9LHF1ZXJ5U2Vs'@;
put 'ZWN0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGMpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChjKX19O3ZhciB3VT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7'@;
put 'Y29uc3Qgc2FlPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3VSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3ht'@;
put 'bG5zLyJ9O2Z1bmN0aW9uIHNUKGMpe3ZhciBsPWMrPSIiLGE9bC5pbmRleE9mKCI6Iik7cmV0dXJuIGE+PTAmJiJ4bWxucyIhPT0obD1jLnNsaWNlKDAsYSkpJiYoYz1jLnNsaWNlKGErMSkpLHNhZS5oYXNPd25Qcm9wZXJ0eShsKT97c3BhY2U6c2FlW2xdLGxvY2FsOmN9OmN9ZnVuY3Rpb24g'@;
put 'b3FlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBzcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBhcWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlz'@;
put 'LnNldEF0dHJpYnV0ZShjLGwpfX1mdW5jdGlvbiBscWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsKX19ZnVuY3Rpb24gY3FlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVs'@;
put 'bD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTp0aGlzLnNldEF0dHJpYnV0ZShjLGEpfX1mdW5jdGlvbiB1cWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2Fs'@;
put 'KTp0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxhKX19ZnVuY3Rpb24gYWFlKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8Yy5kb2N1bWVudCYmY3x8Yy5kZWZhdWx0Vmlld31mdW5jdGlvbiBocWUoYyl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19ZnVuY3Rpb24gZnFlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbCxhKX19ZnVuY3Rpb24gcHFlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1sLmFwcGx5KHRoaXMs'@;
put 'YXJndW1lbnRzKTtudWxsPT1kP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGQsYSl9fWZ1bmN0aW9uIFk3KGMsbCl7cmV0dXJuIGMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShsKXx8YWFlKGMpLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5n'@;
put 'ZXRQcm9wZXJ0eVZhbHVlKGwpfWZ1bmN0aW9uIG1xZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tjXX19ZnVuY3Rpb24gdnFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tjXT1sfX1mdW5jdGlvbiBfcWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP2RlbGV0ZSB0aGlzW2NdOnRoaXNbY109YX19ZnVuY3Rpb24gbGFlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBDVShjKXtyZXR1cm4gYy5jbGFzc0xpc3R8fG5ldyBjYWUoYyl9ZnVuY3Rpb24gY2FlKGMpe3RoaXMu'@;
put 'X25vZGU9Yyx0aGlzLl9uYW1lcz1sYWUoYy5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB1YWUoYyxsKXtmb3IodmFyIGE9Q1UoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLmFkZChsW2RdKX1mdW5jdGlvbiBkYWUoYyxsKXtmb3IodmFyIGE9Q1UoYyksZD0tMSxoPWwu'@;
put 'bGVuZ3RoOysrZDxoOylhLnJlbW92ZShsW2RdKX1mdW5jdGlvbiB5cWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dWFlKHRoaXMsYyl9fWZ1bmN0aW9uIHdxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtkYWUodGhpcyxjKX19ZnVuY3Rpb24gQ3FlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7KGwuYXBw'@;
put 'bHkodGhpcyxhcmd1bWVudHMpP3VhZTpkYWUpKHRoaXMsYyl9fWZ1bmN0aW9uIE1xZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24geHFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319ZnVuY3Rpb24gRXFlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBs'@;
put 'PWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fWZ1bmN0aW9uIEFxZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIFRxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1jfX1mdW5jdGlvbiBEcWUoYyl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bD8/IiJ9fWZ1bmN0aW9uIExxZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBPcWUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5w'@;
put 'YXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBGcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5vd25lckRvY3VtZW50LGE9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIGE9PT13VSYmbC5kb2N1bWVudEVsZW1l'@;
put 'bnQubmFtZXNwYWNlVVJJPT09d1U/bC5jcmVhdGVFbGVtZW50KGMpOmwuY3JlYXRlRWxlbWVudE5TKGEsYyl9fWZ1bmN0aW9uIEhxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlv'@;
put 'biBoYWUoYyl7dmFyIGw9c1QoYyk7cmV0dXJuKGwubG9jYWw/SHFlOkZxZSkobCl9ZnVuY3Rpb24gVnFlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24ganFlKCl7dmFyIGM9dGhpcy5wYXJlbnROb2RlO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVXFlKCl7dmFyIGM9dGhpcy5jbG9u'@;
put 'ZU5vZGUoITEpLGw9dGhpcy5wYXJlbnROb2RlO3JldHVybiBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiBacWUoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMCksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5l'@;
put 'eHRTaWJsaW5nKTpjfWZ1bmN0aW9uIHFxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9fb247aWYobCl7Zm9yKHZhciBmLGE9MCxkPS0xLGg9bC5sZW5ndGg7YTxoOysrYSlmPWxbYV0sYy50eXBlJiZmLnR5cGUhPT1jLnR5cGV8fGYubmFtZSE9PWMubmFtZT9sWysrZF09Zjp0'@;
put 'aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZi50eXBlLGYubGlzdGVuZXIsZi5vcHRpb25zKTsrK2Q/bC5sZW5ndGg9ZDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gS3FlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXMuX19vbixmPWZ1bmN0aW9uIEdxZShjKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24obCl7Yy5jYWxsKHRoaXMsbCx0aGlzLl9fZGF0YV9fKX19KGwpO2lmKGQpZm9yKHZhciBfPTAsVD1kLmxlbmd0aDtfPFQ7KytfKWlmKChoPWRbX10pLnR5cGU9PT1jLnR5cGUmJmgubmFtZT09PWMubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGgudHlw'@;
put 'ZSxoLmxpc3RlbmVyLGgub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyPWYsaC5vcHRpb25zPWEpLHZvaWQoaC52YWx1ZT1sKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYy50eXBlLGYsYSksaD17dHlwZTpjLnR5cGUsbmFtZTpjLm5hbWUsdmFsdWU6bCxs'@;
put 'aXN0ZW5lcjpmLG9wdGlvbnM6YX0sZD9kLnB1c2goaCk6dGhpcy5fX29uPVtoXX19ZnVuY3Rpb24gZmFlKGMsbCxhKXt2YXIgZD1hYWUoYyksaD1kLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBoP2g9bmV3IGgobCxhKTooaD1kLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIp'@;
put 'LGE/KGguaW5pdEV2ZW50KGwsYS5idWJibGVzLGEuY2FuY2VsYWJsZSksaC5kZXRhaWw9YS5kZXRhaWwpOmguaW5pdEV2ZW50KGwsITEsITEpKSxjLmRpc3BhdGNoRXZlbnQoaCl9ZnVuY3Rpb24gSnFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGZhZSh0aGlzLGMsbCl9fWZ1bmN0'@;
put 'aW9uIFFxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmYWUodGhpcyxjLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19Y2FlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGMpe3RoaXMuX25hbWVzLmluZGV4T2YoYyk8MCYmKHRoaXMuX25hbWVzLnB1c2goYyksdGhpcy5fbm9kZS5z'@;
put 'ZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBsPXRoaXMuX25hbWVzLmluZGV4T2YoYyk7bD49MCYmKHRoaXMuX25hbWVzLnNwbGljZShsLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFt'@;
put 'ZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGMpPj0wfX07dmFyIFNVPVtudWxsXTtmdW5jdGlvbiBYdShjLGwpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bH1mdW5jdGlvbiBwYWUoKXtyZXR1cm4gbmV3IFh1KFtb'@;
put 'ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sU1UpfVh1LnByb3RvdHlwZT1wYWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYdSxzZWxlY3Q6ZnVuY3Rpb24gayRlKGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz15VShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9'@;
put 'bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgVyxpZSxmPWxbaF0sXz1mLmxlbmd0aCxUPWRbaF09bmV3IEFycmF5KF8pLGdlPTA7Z2U8XzsrK2dlKShXPWZbZ2VdKSYmKGllPWMuY2FsbChXLFcuX19kYXRhX18sZ2UsZikpJiYoIl9fZGF0YV9fImluIFcmJihpZS5fX2RhdGFfXz1X'@;
put 'Ll9fZGF0YV9fKSxUW2dlXT1pZSk7cmV0dXJuIG5ldyBYdShkLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gRCRlKGMpe2M9ImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24gVCRlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0YWUoYy5hcHBseSh0aGlzLGFyZ3Vt'@;
put 'ZW50cykpfX0oYyk6bmFlKGMpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPVtdLGg9W10sZj0wO2Y8YTsrK2YpZm9yKHZhciBXLF89bFtmXSxUPV8ubGVuZ3RoLGllPTA7aWU8VDsrK2llKShXPV9baWVdKSYmKGQucHVzaChjLmNhbGwoVyxXLl9fZGF0YV9fLGllLF8pKSxo'@;
put 'LnB1c2goVykpO3JldHVybiBuZXcgWHUoZCxoKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24gTyRlKGMpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT1jP1IkZTpmdW5jdGlvbiBMJGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEkkZS5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgYz9jOmlhZShjKSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbiBOJGUoYyl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PWM/RiRlOmZ1bmN0aW9uIEgkZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUCRlLmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBjP2M6aWFlKGMpKSl9LGZpbHRlcjpmdW5jdGlvbiBWJGUoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXJhZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgVyxmPWxbaF0sXz1m'@;
put 'Lmxlbmd0aCxUPWRbaF09W10saWU9MDtpZTxfOysraWUpKFc9ZltpZV0pJiZjLmNhbGwoVyxXLl9fZGF0YV9fLGllLGYpJiZULnB1c2goVyk7cmV0dXJuIG5ldyBYdShkLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIFkkZShjLGwpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBB'@;
put 'cnJheS5mcm9tKHRoaXMsWiRlKTt2YXIgYT1sP1UkZTp6JGUsZD10aGlzLl9wYXJlbnRzLGg9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1mdW5jdGlvbiBqJGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShjKSk7Zm9yKHZhciBmPWgubGVuZ3RoLF89bmV3'@;
put 'IEFycmF5KGYpLFQ9bmV3IEFycmF5KGYpLFc9bmV3IEFycmF5KGYpLGllPTA7aWU8ZjsrK2llKXt2YXIgZ2U9ZFtpZV0sd2U9aFtpZV0sRWU9d2UubGVuZ3RoLFplPVckZShjLmNhbGwoZ2UsZ2UmJmdlLl9fZGF0YV9fLGllLGQpKSxvdD1aZS5sZW5ndGgsZXQ9VFtpZV09bmV3IEFycmF5KG90'@;
put 'KSx5dD1fW2llXT1uZXcgQXJyYXkob3QpO2EoZ2Usd2UsZXQseXQsV1tpZV09bmV3IEFycmF5KEVlKSxaZSxsKTtmb3IodmFyIHJuLHZuLFN0PTAsUXQ9MDtTdDxvdDsrK1N0KWlmKHJuPWV0W1N0XSl7Zm9yKFN0Pj1RdCYmKFF0PVN0KzEpOyEodm49eXRbUXRdKSYmKytRdDxvdDspO3JuLl9u'@;
put 'ZXh0PXZufHxudWxsfX1yZXR1cm4oXz1uZXcgWHUoXyxkKSkuX2VudGVyPVQsXy5fZXhpdD1XLF99LGVudGVyOmZ1bmN0aW9uIEIkZSgpe3JldHVybiBuZXcgWHUodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAob2FlKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiBHJGUoKXty'@;
put 'ZXR1cm4gbmV3IFh1KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAob2FlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiAkJGUoYyxsLGEpe3ZhciBkPXRoaXMuZW50ZXIoKSxoPXRoaXMsZj10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYz8oZD1jKGQpKSYm'@;
put 'KGQ9ZC5zZWxlY3Rpb24oKSk6ZD1kLmFwcGVuZChjKyIiKSxudWxsIT1sJiYoaD1sKGgpKSYmKGg9aC5zZWxlY3Rpb24oKSksbnVsbD09YT9mLnJlbW92ZSgpOmEoZiksZCYmaD9kLm1lcmdlKGgpLm9yZGVyKCk6aH0sbWVyZ2U6ZnVuY3Rpb24gcSRlKGMpe2Zvcih2YXIgbD1jLnNlbGVjdGlv'@;
put 'bj9jLnNlbGVjdGlvbigpOmMsYT10aGlzLl9ncm91cHMsZD1sLl9ncm91cHMsaD1hLmxlbmd0aCxfPU1hdGgubWluKGgsZC5sZW5ndGgpLFQ9bmV3IEFycmF5KGgpLFc9MDtXPF87KytXKWZvcih2YXIgWmUsaWU9YVtXXSxnZT1kW1ddLHdlPWllLmxlbmd0aCxFZT1UW1ddPW5ldyBBcnJheSh3'@;
put 'ZSksb3Q9MDtvdDx3ZTsrK290KShaZT1pZVtvdF18fGdlW290XSkmJihFZVtvdF09WmUpO2Zvcig7VzxoOysrVylUW1ddPWFbV107cmV0dXJuIG5ldyBYdShULHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24gbktlKCl7cmV0dXJuIHRoaXN9LG9yZGVyOmZ1bmN0aW9uIEskZSgp'@;
put 'e2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0tMSxhPWMubGVuZ3RoOysrbDxhOylmb3IodmFyIF8sZD1jW2xdLGg9ZC5sZW5ndGgtMSxmPWRbaF07LS1oPj0wOykoXz1kW2hdKSYmKGYmJjReXy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmKSYmZi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShf'@;
put 'LGYpLGY9Xyk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gWCRlKGMpe2Z1bmN0aW9uIGwod2UsRWUpe3JldHVybiB3ZSYmRWU/Yyh3ZS5fX2RhdGFfXyxFZS5fX2RhdGFfXyk6IXdlLSFFZX1jfHwoYz1KJGUpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZD1hLmxlbmd0aCxoPW5ldyBBcnJh'@;
put 'eShkKSxmPTA7ZjxkOysrZil7Zm9yKHZhciBpZSxfPWFbZl0sVD1fLmxlbmd0aCxXPWhbZl09bmV3IEFycmF5KFQpLGdlPTA7Z2U8VDsrK2dlKShpZT1fW2dlXSkmJihXW2dlXT1pZSk7Vy5zb3J0KGwpfXJldHVybiBuZXcgWHUoaCx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0'@;
put 'aW9uIFEkZSgpe3ZhciBjPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsYy5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gZXFlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24gdHFlKCl7Zm9yKHZhciBjPXRoaXMu'@;
put 'X2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpe3ZhciBfPWRbaF07aWYoXylyZXR1cm4gX31yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBucWUoKXtsZXQgYz0wO2Zvcihjb25zdCBsIG9mIHRoaXMpKytjO3JldHVy'@;
put 'biBjfSxlbXB0eTpmdW5jdGlvbiBycWUoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gaXFlKGMpe2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT0wLGQ9bC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIFQsaD1sW2FdLGY9MCxfPWgubGVuZ3RoO2Y8XzsrK2YpKFQ9aFtmXSkmJmMu'@;
put 'Y2FsbChULFQuX19kYXRhX18sZixoKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBkcWUoYyxsKXt2YXIgYT1zVChjKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBkPXRoaXMubm9kZSgpO3JldHVybiBhLmxvY2FsP2QuZ2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKTpkLmdl'@;
put 'dEF0dHJpYnV0ZShhKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP2EubG9jYWw/c3FlOm9xZToiZnVuY3Rpb24iPT10eXBlb2YgbD9hLmxvY2FsP3VxZTpjcWU6YS5sb2NhbD9scWU6YXFlKShhLGwpKX0sc3R5bGU6ZnVuY3Rpb24gZ3FlKGMsbCxhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0'@;
put 'aD4xP3RoaXMuZWFjaCgobnVsbD09bD9ocWU6ImZ1bmN0aW9uIj09dHlwZW9mIGw/cHFlOmZxZSkoYyxsLGE/PyIiKSk6WTcodGhpcy5ub2RlKCksYyl9LHByb3BlcnR5OmZ1bmN0aW9uIGJxZShjLGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1sP21xZToi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgbD9fcWU6dnFlKShjLGwpKTp0aGlzLm5vZGUoKVtjXX0sY2xhc3NlZDpmdW5jdGlvbiBTcWUoYyxsKXt2YXIgYT1sYWUoYysiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9Q1UodGhpcy5ub2RlKCkpLGg9LTEsZj1hLmxlbmd0aDsrK2g8Zjsp'@;
put 'aWYoIWQuY29udGFpbnMoYVtoXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/Q3FlOmw/eXFlOndxZSkoYSxsKSl9LHRleHQ6ZnVuY3Rpb24ga3FlKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1jP01x'@;
put 'ZTooImZ1bmN0aW9uIj09dHlwZW9mIGM/RXFlOnhxZSkoYykpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIElxZShjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09Yz9BcWU6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP0RxZTpUcWUpKGMpKTp0'@;
put 'aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIFJxZSgpe3JldHVybiB0aGlzLmVhY2goTHFlKX0sbG93ZXI6ZnVuY3Rpb24gUHFlKCl7cmV0dXJuIHRoaXMuZWFjaChPcWUpfSxhcHBlbmQ6ZnVuY3Rpb24gTnFlKGMpe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6aGFl'@;
put 'KGMpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24gQnFlKGMsbCl7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpoYWUoYyksZD1udWxsPT1sP1ZxZToiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgbD9sOnlVKGwpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIHpxZSgpe3JldHVy'@;
put 'biB0aGlzLmVhY2goanFlKX0sY2xvbmU6ZnVuY3Rpb24gWXFlKGMpe3JldHVybiB0aGlzLnNlbGVjdChjP1pxZTpVcWUpfSxkYXR1bTpmdW5jdGlvbiBXcWUoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGMpOnRoaXMubm9kZSgpLl9fZGF0YV9f'@;
put 'fSxvbjpmdW5jdGlvbiBYcWUoYyxsLGEpe3ZhciBoLF8sZD1mdW5jdGlvbiAkcWUoYyl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihsKXt2YXIgYT0iIixkPWwuaW5kZXhPZigiLiIpO3JldHVybiBkPj0wJiYoYT1sLnNsaWNlKGQrMSksbD1sLnNsaWNlKDAs'@;
put 'ZCkpLHt0eXBlOmwsbmFtZTphfX0pfShjKyIiKSxmPWQubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKFQ9bD9LcWU6cXFlLGg9MDtoPGY7KytoKXRoaXMuZWFjaChUKGRbaF0sbCxhKSk7cmV0dXJuIHRoaXN9dmFyIFQ9dGhpcy5ub2RlKCkuX19vbjtpZihUKWZvcih2YXIg'@;
put 'Z2UsVz0wLGllPVQubGVuZ3RoO1c8aWU7KytXKWZvcihoPTAsZ2U9VFtXXTtoPGY7KytoKWlmKChfPWRbaF0pLnR5cGU9PT1nZS50eXBlJiZfLm5hbWU9PT1nZS5uYW1lKXJldHVybiBnZS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gZUtlKGMsbCl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIGw/UXFlOkpxZSkoYyxsKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKnRLZSgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIF8sZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpKF89ZFtoXSkmJih5aWVs'@;
put 'ZCBfKX19O2NvbnN0IFlnPXBhZTtmdW5jdGlvbiBNVShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IFh1KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGMpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFh1KFt0YWUoYyldLFNVKX1mdW5jdGlvbiBrcyhjKXtyZXR1'@;
put 'cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IFh1KFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgWHUoW1tjXV0sU1UpfXZhciByS2U9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gZ2FlKCl7Zm9yKHZhciBkLGM9MCxsPWFyZ3VtZW50'@;
put 'cy5sZW5ndGgsYT17fTtjPGw7KytjKXtpZighKGQ9YXJndW1lbnRzW2NdKyIiKXx8ZCBpbiBhfHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7YVtkXT1bXX1yZXR1cm4gbmV3IGFUKGEpfWZ1bmN0aW9uIGFUKGMpe3RoaXMuXz1jfWZ1bmN0aW9u'@;
put 'IG9LZShjLGwpe2Zvcih2YXIgaCxhPTAsZD1jLmxlbmd0aDthPGQ7KythKWlmKChoPWNbYV0pLm5hbWU9PT1sKXJldHVybiBoLnZhbHVlfWZ1bmN0aW9uIG1hZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1jLmxlbmd0aDtkPGg7KytkKWlmKGNbZF0ubmFtZT09PWwpe2NbZF09cktlLGM9Yy5zbGlj'@;
put 'ZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVybiBudWxsIT1hJiZjLnB1c2goe25hbWU6bCx2YWx1ZTphfSksY31hVC5wcm90b3R5cGU9Z2FlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YVQsb246ZnVuY3Rpb24oYyxsKXt2YXIgaCxhPXRoaXMuXyxkPWZ1bmN0aW9uIGlL'@;
put 'ZShjLGwpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGQ9IiIsaD1hLmluZGV4T2YoIi4iKTtpZihoPj0wJiYoZD1hLnNsaWNlKGgrMSksYT1hLnNsaWNlKDAsaCkpLGEmJiFsLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcigidW5r'@;
put 'bm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpkfX0pfShjKyIiLGEpLGY9LTEsXz1kLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitsKTtm'@;
put 'b3IoOysrZjxfOylpZihoPShjPWRbZl0pLnR5cGUpYVtoXT1tYWUoYVtoXSxjLm5hbWUsbCk7ZWxzZSBpZihudWxsPT1sKWZvcihoIGluIGEpYVtoXT1tYWUoYVtoXSxjLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2Y8XzspaWYoKGg9KGM9ZFtmXSkudHlwZSkmJihoPW9LZShhW2hd'@;
put 'LGMubmFtZSkpKXJldHVybiBofSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGM9e30sbD10aGlzLl87Zm9yKHZhciBhIGluIGwpY1thXT1sW2FdLnNsaWNlKCk7cmV0dXJuIG5ldyBhVChjKX0sY2FsbDpmdW5jdGlvbihjLGwpe2lmKChoPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGgsZixh'@;
put 'PW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZClhW2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKGQ9MCxoPShmPXRoaXMuX1tjXSkubGVuZ3RoO2Q8aDsrK2QpZltkXS52YWx1ZS5hcHBs'@;
put 'eShsLGEpfSxhcHBseTpmdW5jdGlvbihjLGwsYSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IodmFyIGQ9dGhpcy5fW2NdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpZFtoXS52YWx1ZS5hcHBseShsLGEpfX07Y29u'@;
put 'c3QgeFU9Z2FlO3ZhciBsVCxodyxXNz0wLHV3PTAsZHc9MCx2YWU9MWUzLGNUPTAsV2c9MCx1VD0wLGZ3PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLF9hZT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVl'@;
put 'c3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihjKXtzZXRUaW1lb3V0KGMsMTcpfTtmdW5jdGlvbiBFVSgpe3JldHVybiBXZ3x8KF9hZShzS2UpLFdnPWZ3Lm5vdygpK3VUKX1mdW5jdGlvbiBzS2UoKXtXZz0wfWZ1bmN0'@;
put 'aW9uIGRUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBiYWUoYyxsLGEpe3ZhciBkPW5ldyBkVDtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9uIHlhZSgpe1dnPShjVD1mdy5ub3coKSkrdVQsVzc9dXc9MDt0cnl7IWZ1bmN0aW9uIGFL'@;
put 'ZSgpe0VVKCksKytXNztmb3IodmFyIGwsYz1sVDtjOykobD1XZy1jLl90aW1lKT49MCYmYy5fY2FsbC5jYWxsKHZvaWQgMCxsKSxjPWMuX25leHQ7LS1XN30oKX1maW5hbGx5e1c3PTAsZnVuY3Rpb24gY0tlKCl7Zm9yKHZhciBjLGEsbD1sVCxkPTEvMDtsOylsLl9jYWxsPyhkPmwuX3RpbWUm'@;
put 'JihkPWwuX3RpbWUpLGM9bCxsPWwuX25leHQpOihhPWwuX25leHQsbC5fbmV4dD1udWxsLGw9Yz9jLl9uZXh0PWE6bFQ9YSk7aHc9YyxrVShkKX0oKSxXZz0wfX1mdW5jdGlvbiBsS2UoKXt2YXIgYz1mdy5ub3coKSxsPWMtY1Q7bD52YWUmJih1VC09bCxjVD1jKX1mdW5jdGlvbiBrVShjKXtX'@;
put 'N3x8KHV3JiYodXc9Y2xlYXJUaW1lb3V0KHV3KSksYy1XZz4yND8oYzwxLzAmJih1dz1zZXRUaW1lb3V0KHlhZSxjLWZ3Lm5vdygpLXVUKSksZHcmJihkdz1jbGVhckludGVydmFsKGR3KSkpOihkd3x8KGNUPWZ3Lm5vdygpLGR3PXNldEludGVydmFsKGxLZSx2YWUpKSxXNz0xLF9hZSh5YWUp'@;
put 'KSl9ZnVuY3Rpb24gaFQoYyxsLGEpe3ZhciBkPW5ldyBkVDtyZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9ZFQucHJvdG90eXBlPWJhZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRULHJlc3RhcnQ6ZnVuY3Rpb24oYyxsLGEpe2lmKCJm'@;
put 'dW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT9FVSgpOithKSsobnVsbD09bD8wOitsKSwhdGhpcy5fbmV4dCYmaHchPT10aGlzJiYoaHc/aHcuX25leHQ9dGhpczpsVD10aGlzLGh3PXRoaXMpLHRo'@;
put 'aXMuX2NhbGw9Yyx0aGlzLl90aW1lPWEsa1UoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsa1UoKSl9fTt2YXIgdUtlPXhVKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGRLZT1bXSx3YWU9MCxUVT0yLGZU'@;
put 'PTMsRFU9NSxwVD02O2Z1bmN0aW9uIGdUKGMsbCxhLGQsaCxmKXt2YXIgXz1jLl9fdHJhbnNpdGlvbjtpZihfKXtpZihhIGluIF8pcmV0dXJufWVsc2UgYy5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uIGhLZShjLGwsYSl7dmFyIGgsZD1jLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBfKGllKXt2'@;
put 'YXIgZ2Usd2UsRWUsWmU7aWYoMSE9PWEuc3RhdGUpcmV0dXJuIFcoKTtmb3IoZ2UgaW4gZClpZigoWmU9ZFtnZV0pLm5hbWU9PT1hLm5hbWUpe2lmKFplLnN0YXRlPT09ZlQpcmV0dXJuIGhUKF8pOzQ9PT1aZS5zdGF0ZT8oWmUuc3RhdGU9cFQsWmUudGltZXIuc3RvcCgpLFplLm9uLmNhbGwo'@;
put 'ImludGVycnVwdCIsYyxjLl9fZGF0YV9fLFplLmluZGV4LFplLmdyb3VwKSxkZWxldGUgZFtnZV0pOitnZTxsJiYoWmUuc3RhdGU9cFQsWmUudGltZXIuc3RvcCgpLFplLm9uLmNhbGwoImNhbmNlbCIsYyxjLl9fZGF0YV9fLFplLmluZGV4LFplLmdyb3VwKSxkZWxldGUgZFtnZV0pfWlmKGhU'@;
put 'KGZ1bmN0aW9uKCl7YS5zdGF0ZT09PWZUJiYoYS5zdGF0ZT00LGEudGltZXIucmVzdGFydChULGEuZGVsYXksYS50aW1lKSxUKGllKSl9KSxhLnN0YXRlPVRVLGEub24uY2FsbCgic3RhcnQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLGEuc3RhdGU9PT1UVSl7Zm9yKGEuc3RhdGU9'@;
put 'ZlQsaD1uZXcgQXJyYXkoRWU9YS50d2Vlbi5sZW5ndGgpLGdlPTAsd2U9LTE7Z2U8RWU7KytnZSkoWmU9YS50d2VlbltnZV0udmFsdWUuY2FsbChjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSkmJihoWysrd2VdPVplKTtoLmxlbmd0aD13ZSsxfX1mdW5jdGlvbiBUKGllKXtmb3IodmFy'@;
put 'IGdlPWllPGEuZHVyYXRpb24/YS5lYXNlLmNhbGwobnVsbCxpZS9hLmR1cmF0aW9uKTooYS50aW1lci5yZXN0YXJ0KFcpLGEuc3RhdGU9RFUsMSksd2U9LTEsRWU9aC5sZW5ndGg7Kyt3ZTxFZTspaFt3ZV0uY2FsbChjLGdlKTthLnN0YXRlPT09RFUmJihhLm9uLmNhbGwoImVuZCIsYyxjLl9f'@;
put 'ZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksVygpKX1mdW5jdGlvbiBXKCl7Zm9yKHZhciBpZSBpbiBhLnN0YXRlPXBULGEudGltZXIuc3RvcCgpLGRlbGV0ZSBkW2xdLGQpcmV0dXJuO2RlbGV0ZSBjLl9fdHJhbnNpdGlvbn1kW2xdPWEsYS50aW1lcj1iYWUoZnVuY3Rpb24gZihpZSl7YS5zdGF0'@;
put 'ZT0xLGEudGltZXIucmVzdGFydChfLGEuZGVsYXksYS50aW1lKSxhLmRlbGF5PD1pZSYmXyhpZS1hLmRlbGF5KX0sMCxhLnRpbWUpfShjLGEse25hbWU6bCxpbmRleDpkLGdyb3VwOmgsb246dUtlLHR3ZWVuOmRLZSx0aW1lOmYudGltZSxkZWxheTpmLmRlbGF5LGR1cmF0aW9uOmYuZHVyYXRp'@;
put 'b24sZWFzZTpmLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTp3YWV9KX1mdW5jdGlvbiBJVShjLGwpe3ZhciBhPVMyKGMsbCk7aWYoYS5zdGF0ZT53YWUpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gYX1mdW5jdGlvbiBUaChjLGwpe3ZhciBhPVMy'@;
put 'KGMsbCk7aWYoYS5zdGF0ZT5mVCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gYX1mdW5jdGlvbiBTMihjLGwpe3ZhciBhPWMuX190cmFuc2l0aW9uO2lmKCFhfHwhKGE9YVtsXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3Vu'@;
put 'ZCIpO3JldHVybiBhfWZ1bmN0aW9uIG1UKGMsbCl7dmFyIGQsaCxfLGE9Yy5fX3RyYW5zaXRpb24sZj0hMDtpZihhKXtmb3IoXyBpbiBsPW51bGw9PWw/bnVsbDpsKyIiLGEpKGQ9YVtfXSkubmFtZT09PWw/KGg9ZC5zdGF0ZT5UVSYmZC5zdGF0ZTxEVSxkLnN0YXRlPXBULGQudGltZXIuc3Rv'@;
put 'cCgpLGQub24uY2FsbChoPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGMsYy5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBhW19dKTpmPSExO2YmJmRlbGV0ZSBjLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gRGgoYyxsKXtyZXR1cm4gYz0rYyxsPStsLGZ1bmN0aW9uKGEpe3JldHVybiBj'@;
put 'KigxLWEpK2wqYX19dmFyIHZULFNhZT0xODAvTWF0aC5QSSxMVT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBNYWUoYyxsLGEsZCxoLGYpe3ZhciBfLFQsVztyZXR1cm4oXz1NYXRoLnNxcnQoYypjK2wqbCkp'@;
put 'JiYoYy89XyxsLz1fKSwoVz1jKmErbCpkKSYmKGEtPWMqVyxkLT1sKlcpLChUPU1hdGguc3FydChhKmErZCpkKSkmJihhLz1ULGQvPVQsVy89VCksYypkPGwqYSYmKGM9LWMsbD0tbCxXPS1XLF89LV8pLHt0cmFuc2xhdGVYOmgsdHJhbnNsYXRlWTpmLHJvdGF0ZTpNYXRoLmF0YW4yKGwsYykq'@;
put 'U2FlLHNrZXdYOk1hdGguYXRhbihXKSpTYWUsc2NhbGVYOl8sc2NhbGVZOlR9fWZ1bmN0aW9uIHhhZShjLGwsYSxkKXtmdW5jdGlvbiBoKGllKXtyZXR1cm4gaWUubGVuZ3RoP2llLnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oaWUsZ2Upe3ZhciB3ZT1bXSxFZT1bXTtyZXR1cm4gaWU9'@;
put 'YyhpZSksZ2U9YyhnZSksZnVuY3Rpb24gZihpZSxnZSx3ZSxFZSxaZSxvdCl7aWYoaWUhPT13ZXx8Z2UhPT1FZSl7dmFyIGV0PVplLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbCxudWxsLGEpO290LnB1c2goe2k6ZXQtNCx4OkRoKGllLHdlKX0se2k6ZXQtMix4OkRoKGdlLEVlKX0pfWVsc2Uo'@;
put 'd2V8fEVlKSYmWmUucHVzaCgidHJhbnNsYXRlKCIrd2UrbCtFZSthKX0oaWUudHJhbnNsYXRlWCxpZS50cmFuc2xhdGVZLGdlLnRyYW5zbGF0ZVgsZ2UudHJhbnNsYXRlWSx3ZSxFZSksZnVuY3Rpb24gXyhpZSxnZSx3ZSxFZSl7aWUhPT1nZT8oaWUtZ2U+MTgwP2dlKz0zNjA6Z2UtaWU+MTgw'@;
put 'JiYoaWUrPTM2MCksRWUucHVzaCh7aTp3ZS5wdXNoKGgod2UpKyJyb3RhdGUoIixudWxsLGQpLTIseDpEaChpZSxnZSl9KSk6Z2UmJndlLnB1c2goaCh3ZSkrInJvdGF0ZSgiK2dlK2QpfShpZS5yb3RhdGUsZ2Uucm90YXRlLHdlLEVlKSxmdW5jdGlvbiBUKGllLGdlLHdlLEVlKXtpZSE9PWdl'@;
put 'P0VlLnB1c2goe2k6d2UucHVzaChoKHdlKSsic2tld1goIixudWxsLGQpLTIseDpEaChpZSxnZSl9KTpnZSYmd2UucHVzaChoKHdlKSsic2tld1goIitnZStkKX0oaWUuc2tld1gsZ2Uuc2tld1gsd2UsRWUpLGZ1bmN0aW9uIFcoaWUsZ2Usd2UsRWUsWmUsb3Qpe2lmKGllIT09d2V8fGdlIT09'@;
put 'RWUpe3ZhciBldD1aZS5wdXNoKGgoWmUpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtvdC5wdXNoKHtpOmV0LTQseDpEaChpZSx3ZSl9LHtpOmV0LTIseDpEaChnZSxFZSl9KX1lbHNlKDEhPT13ZXx8MSE9PUVlKSYmWmUucHVzaChoKFplKSsic2NhbGUoIit3ZSsiLCIrRWUrIikiKX0o'@;
put 'aWUuc2NhbGVYLGllLnNjYWxlWSxnZS5zY2FsZVgsZ2Uuc2NhbGVZLHdlLEVlKSxpZT1nZT1udWxsLGZ1bmN0aW9uKFplKXtmb3IodmFyIHl0LG90PS0xLGV0PUVlLmxlbmd0aDsrK290PGV0Oyl3ZVsoeXQ9RWVbb3RdKS5pXT15dC54KFplKTtyZXR1cm4gd2Uuam9pbigiIil9fX12YXIgbUtl'@;
put 'PXhhZShmdW5jdGlvbiBwS2UoYyl7Y29uc3QgbD1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShjKyIiKTtyZXR1cm4gbC5pc0lkZW50aXR5P0xVOk1hZShsLmEsbC5iLGwuYyxsLmQsbC5lLGwuZil9LCJweCwgIiwicHgpIiwiZGVn'@;
put 'KSIpLEVhZT14YWUoZnVuY3Rpb24gZ0tlKGMpe3JldHVybiBudWxsIT1jJiYodlR8fCh2VD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx2VC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsYyksYz12VC50cmFuc2Zvcm0uYmFzZVZh'@;
put 'bC5jb25zb2xpZGF0ZSgpKT9NYWUoKGM9Yy5tYXRyaXgpLmEsYy5iLGMuYyxjLmQsYy5lLGMuZik6TFV9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gdktlKGMsbCl7dmFyIGEsZDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1UaCh0aGlzLGMpLGY9aC50d2VlbjtpZihmIT09YSlmb3IodmFyIF89'@;
put 'MCxUPShkPWE9ZikubGVuZ3RoO188VDsrK18paWYoZFtfXS5uYW1lPT09bCl7KGQ9ZC5zbGljZSgpKS5zcGxpY2UoXywxKTticmVha31oLnR3ZWVuPWR9fWZ1bmN0aW9uIF9LZShjLGwsYSl7dmFyIGQsaDtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKCl7dmFyIGY9VGgodGhpcyxjKSxfPWYudHdlZW47aWYoXyE9PWQpe2g9KGQ9Xykuc2xpY2UoKTtmb3IodmFyIFQ9e25hbWU6bCx2YWx1ZTphfSxXPTAsaWU9aC5sZW5ndGg7VzxpZTsrK1cpaWYoaFtXXS5uYW1lPT09bCl7aFtXXT1UO2JyZWFrfVc9PT1pZSYmaC5wdXNoKFQpfWYu'@;
put 'dHdlZW49aH19ZnVuY3Rpb24gUlUoYyxsLGEpe3ZhciBkPWMuX2lkO3JldHVybiBjLmVhY2goZnVuY3Rpb24oKXt2YXIgaD1UaCh0aGlzLGQpOyhoLnZhbHVlfHwoaC52YWx1ZT17fSkpW2xdPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaCl7cmV0dXJuIFMyKGgsZCkudmFs'@;
put 'dWVbbF19fWZ1bmN0aW9uIE9VKGMsbCxhKXtjLnByb3RvdHlwZT1sLnByb3RvdHlwZT1hLGEuY29uc3RydWN0b3I9Y31mdW5jdGlvbiBrYWUoYyxsKXt2YXIgYT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTtmb3IodmFyIGQgaW4gbClhW2RdPWxbZF07cmV0dXJuIGF9ZnVuY3Rpb24gcHco'@;
put 'KXt9dmFyIF9UPTEvLjcsRzc9IlxccyooWystXT9cXGQrKVxccyoiLG13PSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixJaD0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHlLZT0vXiMoWzAtOWEt'@;
put 'Zl17Myw4fSkkLyx3S2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7Rzd9LCR7Rzd9LCR7Rzd9XFwpJGApLENLZT1uZXcgUmVnRXhwKGBecmdiXFwoJHtJaH0sJHtJaH0sJHtJaH1cXCkkYCksU0tlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtHN30sJHtHN30sJHtHN30sJHttd31cXCkkYCksTUtlPW5l'@;
put 'dyBSZWdFeHAoYF5yZ2JhXFwoJHtJaH0sJHtJaH0sJHtJaH0sJHttd31cXCkkYCkseEtlPW5ldyBSZWdFeHAoYF5oc2xcXCgke213fSwke0lofSwke0lofVxcKSRgKSxFS2U9bmV3IFJlZ0V4cChgXmhzbGFcXCgke213fSwke0lofSwke0lofSwke213fVxcKSRgKSxBYWU9e2FsaWNlYmx1ZTox'@;
put 'NTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAy'@;
put 'LGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxj'@;
put 'eWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVl'@;
put 'bjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6'@;
put 'MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6'@;
put 'MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxn'@;
put 'cmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5'@;
put 'MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEz'@;
put 'ODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0'@;
put 'eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBs'@;
put 'ZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEy'@;
put 'MTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0'@;
put 'MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1'@;
put 'bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246'@;
put 'MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmlu'@;
put 'Z2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2'@;
put 'MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gVGFlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gRGFlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gR2coYyl7dmFyIGwsYTtyZXR1cm4g'@;
put 'Yz0oYysiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGw9eUtlLmV4ZWMoYykpPyhhPWxbMV0ubGVuZ3RoLGw9cGFyc2VJbnQobFsxXSwxNiksNj09PWE/SWFlKGwpOjM9PT1hP25ldyBIMChsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKDE1JmwpPDw0fDE1JmwsMSk6OD09PWE/YlQo'@;
put 'bD4+MjQmMjU1LGw+PjE2JjI1NSxsPj44JjI1NSwoMjU1JmwpLzI1NSk6ND09PWE/YlQobD4+MTImMTV8bD4+OCYyNDAsbD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgoMTUmbCk8PDR8MTUmbCkvMjU1KTpudWxsKToobD13S2UuZXhlYyhjKSk/bmV3IEgwKGxbMV0sbFsyXSxsWzNd'@;
put 'LDEpOihsPUNLZS5leGVjKGMpKT9uZXcgSDAoMjU1KmxbMV0vMTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAsMSk6KGw9U0tlLmV4ZWMoYykpP2JUKGxbMV0sbFsyXSxsWzNdLGxbNF0pOihsPU1LZS5leGVjKGMpKT9iVCgyNTUqbFsxXS8xMDAsMjU1KmxbMl0vMTAwLDI1NSpsWzNdLzEw'@;
put 'MCxsWzRdKToobD14S2UuZXhlYyhjKSk/T2FlKGxbMV0sbFsyXS8xMDAsbFszXS8xMDAsMSk6KGw9RUtlLmV4ZWMoYykpP09hZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLGxbNF0pOkFhZS5oYXNPd25Qcm9wZXJ0eShjKT9JYWUoQWFlW2NdKToidHJhbnNwYXJlbnQiPT09Yz9uZXcgSDAoTmFO'@;
put 'LE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBJYWUoYyl7cmV0dXJuIG5ldyBIMChjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMsMSl9ZnVuY3Rpb24gYlQoYyxsLGEsZCl7cmV0dXJuIGQ8PTAmJihjPWw9YT1OYU4pLG5ldyBIMChjLGwsYSxkKX1mdW5jdGlvbiB5VChjLGwsYSxkKXtyZXR1cm4g'@;
put 'MT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24gVEtlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgcHd8fChjPUdnKGMpKSxjP25ldyBIMCgoYz1jLnJnYigpKS5yLGMuZyxjLmIsYy5vcGFjaXR5KTpuZXcgSDB9KGMpOm5ldyBIMChjLGwsYSxkPz8xKX1mdW5jdGlvbiBIMChjLGwsYSxkKXt0'@;
put 'aGlzLnI9K2MsdGhpcy5nPStsLHRoaXMuYj0rYSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gTGFlKCl7cmV0dXJuYCMke3FnKHRoaXMucil9JHtxZyh0aGlzLmcpfSR7cWcodGhpcy5iKX1gfWZ1bmN0aW9uIFJhZSgpe2NvbnN0IGM9d1QodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8i'@;
put 'cmdiKCI6InJnYmEoIn0keyRnKHRoaXMucil9LCAkeyRnKHRoaXMuZyl9LCAkeyRnKHRoaXMuYil9JHsxPT09Yz8iKSI6YCwgJHtjfSlgfWB9ZnVuY3Rpb24gd1QoYyl7cmV0dXJuIGlzTmFOKGMpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGMpKX1mdW5jdGlvbiAkZyhjKXtyZXR1cm4gTWF0'@;
put 'aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChjKXx8MCkpfWZ1bmN0aW9uIHFnKGMpe3JldHVybigoYz0kZyhjKSk8MTY/IjAiOiIiKStjLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBPYWUoYyxsLGEsZCl7cmV0dXJuIGQ8PTA/Yz1sPWE9TmFOOmE8PTB8fGE+PTE/Yz1sPU5hTjpsPD0w'@;
put 'JiYoYz1OYU4pLG5ldyBNMihjLGwsYSxkKX1mdW5jdGlvbiBQYWUoYyl7aWYoYyBpbnN0YW5jZW9mIE0yKXJldHVybiBuZXcgTTIoYy5oLGMucyxjLmwsYy5vcGFjaXR5KTtpZihjIGluc3RhbmNlb2YgcHd8fChjPUdnKGMpKSwhYylyZXR1cm4gbmV3IE0yO2lmKGMgaW5zdGFuY2VvZiBNMily'@;
put 'ZXR1cm4gYzt2YXIgbD0oYz1jLnJnYigpKS5yLzI1NSxhPWMuZy8yNTUsZD1jLmIvMjU1LGg9TWF0aC5taW4obCxhLGQpLGY9TWF0aC5tYXgobCxhLGQpLF89TmFOLFQ9Zi1oLFc9KGYraCkvMjtyZXR1cm4gVD8oXz1sPT09Zj8oYS1kKS9UKzYqKGE8ZCk6YT09PWY/KGQtbCkvVCsyOihsLWEp'@;
put 'L1QrNCxULz1XPC41P2YraDoyLWYtaCxfKj02MCk6VD1XPjAmJlc8MT8wOl8sbmV3IE0yKF8sVCxXLGMub3BhY2l0eSl9ZnVuY3Rpb24gTTIoYyxsLGEsZCl7dGhpcy5oPStjLHRoaXMucz0rbCx0aGlzLmw9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIEZhZShjKXtyZXR1cm4oYz0oY3x8'@;
put 'MCklMzYwKTwwP2MrMzYwOmN9ZnVuY3Rpb24gQ1QoYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSxjfHwwKSl9ZnVuY3Rpb24gUFUoYyxsLGEpe3JldHVybiAyNTUqKGM8NjA/bCsoYS1sKSpjLzYwOmM8MTgwP2E6YzwyNDA/bCsoYS1sKSooMjQwLWMpLzYwOmwpfWZ1bmN0aW9uIEhh'@;
put 'ZShjLGwsYSxkLGgpe3ZhciBmPWMqYyxfPWYqYztyZXR1cm4oKDEtMypjKzMqZi1fKSpsKyg0LTYqZiszKl8pKmErKDErMypjKzMqZi0zKl8pKmQrXypoKS82fU9VKHB3LEdnLHtjb3B5KGMpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsYyl9LGRpc3Bs'@;
put 'YXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlRhZSxmb3JtYXRIZXg6VGFlLGZvcm1hdEhleDg6ZnVuY3Rpb24ga0tlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24gQUtlKCl7cmV0dXJuIFBhZSh0aGlzKS5m'@;
put 'b3JtYXRIc2woKX0sZm9ybWF0UmdiOkRhZSx0b1N0cmluZzpEYWV9KSxPVShIMCx5VCxrYWUocHcse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/X1Q6TWF0aC5wb3coX1QsYyksbmV3IEgwKHRoaXMucipjLHRoaXMuZypjLHRoaXMuYipjLHRoaXMub3BhY2l0eSl9LGRhcmtlcihjKXty'@;
put 'ZXR1cm4gYz1udWxsPT1jPy43Ok1hdGgucG93KC43LGMpLG5ldyBIMCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IEgwKCRnKHRoaXMuciksJGcodGhpcy5nKSwkZyh0aGlzLmIpLHdUKHRoaXMu'@;
put 'b3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6TGFlLGZvcm1hdEhleDpM'@;
put 'YWUsZm9ybWF0SGV4ODpmdW5jdGlvbiBES2UoKXtyZXR1cm5gIyR7cWcodGhpcy5yKX0ke3FnKHRoaXMuZyl9JHtxZyh0aGlzLmIpfSR7cWcoMjU1Kihpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSl9YH0sZm9ybWF0UmdiOlJhZSx0b1N0cmluZzpSYWV9KSksT1UoTTIsZnVu'@;
put 'Y3Rpb24gSUtlKGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9QYWUoYyk6bmV3IE0yKGMsbCxhLGQ/PzEpfSxrYWUocHcse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/X1Q6TWF0aC5wb3coX1QsYyksbmV3IE0yKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5v'@;
put 'cGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IE0yKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGM9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxsPWlzTmFOKGMpfHxpc05hTih0aGlzLnMpPzA6'@;
put 'dGhpcy5zLGE9dGhpcy5sLGQ9YSsoYTwuNT9hOjEtYSkqbCxoPTIqYS1kO3JldHVybiBuZXcgSDAoUFUoYz49MjQwP2MtMjQwOmMrMTIwLGgsZCksUFUoYyxoLGQpLFBVKGM8MTIwP2MrMjQwOmMtMTIwLGgsZCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IE0yKEZhZSh0aGlz'@;
put 'LmgpLENUKHRoaXMucyksQ1QodGhpcy5sKSx3VCh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1h'@;
put 'dEhzbCgpe2NvbnN0IGM9d1QodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8iaHNsKCI6ImhzbGEoIn0ke0ZhZSh0aGlzLmgpfSwgJHsxMDAqQ1QodGhpcy5zKX0lLCAkezEwMCpDVCh0aGlzLmwpfSUkezE9PT1jPyIpIjpgLCAke2N9KWB9YH19KSk7Y29uc3QgRlU9Yz0+KCk9PmM7ZnVu'@;
put 'Y3Rpb24gVmFlKGMsbCl7dmFyIGE9bC1jO3JldHVybiBhP2Z1bmN0aW9uIE5hZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYythKmx9fShjLGEpOkZVKGlzTmFOKGMpP2w6Yyl9Y29uc3QgU1Q9ZnVuY3Rpb24gYyhsKXt2YXIgYT1mdW5jdGlvbiBQS2UoYyl7cmV0dXJuIDE9PShj'@;
put 'PStjKT9WYWU6ZnVuY3Rpb24obCxhKXtyZXR1cm4gYS1sP2Z1bmN0aW9uIE9LZShjLGwsYSl7cmV0dXJuIGM9TWF0aC5wb3coYyxhKSxsPU1hdGgucG93KGwsYSktYyxhPTEvYSxmdW5jdGlvbihkKXtyZXR1cm4gTWF0aC5wb3coYytkKmwsYSl9fShsLGEsYyk6RlUoaXNOYU4obCk/YTpsKX19'@;
put 'KGwpO2Z1bmN0aW9uIGQoaCxmKXt2YXIgXz1hKChoPXlUKGgpKS5yLChmPXlUKGYpKS5yKSxUPWEoaC5nLGYuZyksVz1hKGguYixmLmIpLGllPVZhZShoLm9wYWNpdHksZi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiBoLnI9XyhnZSksaC5nPVQoZ2UpLGguYj1XKGdlKSxo'@;
put 'Lm9wYWNpdHk9aWUoZ2UpLGgrIiJ9fXJldHVybiBkLmdhbW1hPWMsZH0oMSk7ZnVuY3Rpb24gQmFlKGMpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgXyxULGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSk7Zm9yKF89MDtfPGE7KytfKVQ9eVQo'@;
put 'bFtfXSksZFtfXT1ULnJ8fDAsaFtfXT1ULmd8fDAsZltfXT1ULmJ8fDA7cmV0dXJuIGQ9YyhkKSxoPWMoaCksZj1jKGYpLFQub3BhY2l0eT0xLGZ1bmN0aW9uKFcpe3JldHVybiBULnI9ZChXKSxULmc9aChXKSxULmI9ZihXKSxUKyIifX19QmFlKGZ1bmN0aW9uIExLZShjKXt2YXIgbD1jLmxl'@;
put 'bmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1hPD0wP2E9MDphPj0xPyhhPTEsbC0xKTpNYXRoLmZsb29yKGEqbCksaD1jW2RdLGY9Y1tkKzFdO3JldHVybiBIYWUoKGEtZC9sKSpsLGQ+MD9jW2QtMV06MipoLWYsaCxmLGQ8bC0xP2NbZCsyXToyKmYtaCl9fSksQmFlKGZ1bmN0aW9u'@;
put 'IFJLZShjKXt2YXIgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9TWF0aC5mbG9vcigoKGElPTEpPDA/KythOmEpKmwpO3JldHVybiBIYWUoKGEtZC9sKSpsLGNbKGQrbC0xKSVsXSxjW2QlbF0sY1soZCsxKSVsXSxjWyhkKzIpJWxdKX19KTt2YXIgSFU9L1stK10/KD86XGQr'@;
put 'XC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLE5VPW5ldyBSZWdFeHAoSFUuc291cmNlLCJnIik7ZnVuY3Rpb24gamFlKGMsbCl7dmFyIGQsaCxmLGE9SFUubGFzdEluZGV4PU5VLmxhc3RJbmRleD0wLF89LTEsVD1bXSxXPVtdO2ZvcihjKz0iIixsKz0iIjsoZD1IVS5leGVjKGMp'@;
put 'KSYmKGg9TlUuZXhlYyhsKSk7KShmPWguaW5kZXgpPmEmJihmPWwuc2xpY2UoYSxmKSxUW19dP1RbX10rPWY6VFsrK19dPWYpLChkPWRbMF0pPT09KGg9aFswXSk/VFtfXT9UW19dKz1oOlRbKytfXT1oOihUWysrX109bnVsbCxXLnB1c2goe2k6Xyx4OkRoKGQsaCl9KSksYT1OVS5sYXN0SW5k'@;
put 'ZXg7cmV0dXJuIGE8bC5sZW5ndGgmJihmPWwuc2xpY2UoYSksVFtfXT9UW19dKz1mOlRbKytfXT1mKSxULmxlbmd0aDwyP1dbMF0/ZnVuY3Rpb24gSEtlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKSsiIn19KFdbMF0ueCk6ZnVuY3Rpb24gRktlKGMpe3JldHVybiBmdW5jdGlv'@;
put 'bigpe3JldHVybiBjfX0obCk6KGw9Vy5sZW5ndGgsZnVuY3Rpb24oaWUpe2Zvcih2YXIgd2UsZ2U9MDtnZTxsOysrZ2UpVFsod2U9V1tnZV0pLmldPXdlLngoaWUpO3JldHVybiBULmpvaW4oIiIpfSl9ZnVuY3Rpb24gemFlKGMsbCl7dmFyIGE7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgbD9E'@;
put 'aDpsIGluc3RhbmNlb2YgR2c/U1Q6KGE9R2cobCkpPyhsPWEsU1QpOmphZSkoYyxsKX1mdW5jdGlvbiBOS2UoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIFZLZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5T'@;
put 'KGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIEJLZShjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89dGhpcy5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIF89PT1oP251bGw6Xz09PWQ/ZjpmPWwoZD1fLGEpfX1mdW5jdGlvbiBqS2UoYyxsLGEpe3ZhciBkLGYs'@;
put 'aD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBfPXRoaXMuZ2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTtyZXR1cm4gXz09PWg/bnVsbDpfPT09ZD9mOmY9bChkPV8sYSl9fWZ1bmN0aW9uIHpLZShjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciBfLFcsVD1h'@;
put 'KHRoaXMpO3JldHVybiBudWxsPT1UP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6KF89dGhpcy5nZXRBdHRyaWJ1dGUoYykpPT09KFc9VCsiIik/bnVsbDpfPT09ZCYmVz09PWg/ZjooaD1XLGY9bChkPV8sVCkpfX1mdW5jdGlvbiBVS2UoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oKXt2YXIgXyxXLFQ9YSh0aGlzKTtyZXR1cm4gbnVsbD09VD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTooXz10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCkpPT09KFc9VCsiIik/bnVsbDpfPT09ZCYmVz09PWg/ZjooaD1XLGY9'@;
put 'bChkPV8sVCkpfX1mdW5jdGlvbiBHS2UoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBXS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNw'@;
put 'YWNlLGMubG9jYWwsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1yZXR1cm4gaC5fdmFsdWU9bCxofWZ1bmN0aW9uICRLZShjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYmKGE9KGQ9ZikmJmZ1bmN0aW9uIFlLZShj'@;
put 'LGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBLS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtJVSh0aGlzLGMpLmRlbGF5PStsLmFwcGx5KHRoaXMsYXJndW1lbnRz'@;
put 'KX19ZnVuY3Rpb24gWEtlKGMsbCl7cmV0dXJuIGw9K2wsZnVuY3Rpb24oKXtJVSh0aGlzLGMpLmRlbGF5PWx9fWZ1bmN0aW9uIFFLZShjLGwpe3JldHVybiBmdW5jdGlvbigpe1RoKHRoaXMsYykuZHVyYXRpb249K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBlWGUoYyxsKXty'@;
put 'ZXR1cm4gbD0rbCxmdW5jdGlvbigpe1RoKHRoaXMsYykuZHVyYXRpb249bH19dmFyIGdYZT1ZZy5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gVWFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fXZhciBSWGU9MDtmdW5jdGlvbiBMaChj'@;
put 'LGwsYSxkKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWwsdGhpcy5fbmFtZT1hLHRoaXMuX2lkPWR9ZnVuY3Rpb24gVlUoYyl7cmV0dXJuIFlnKCkudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBaYWUoKXtyZXR1cm4rK1JYZX12YXIgcjM9WWcucHJvdG90eXBlO0xoLnByb3RvdHlwZT1W'@;
put 'VS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkxoLHNlbGVjdDpmdW5jdGlvbiBmWGUoYyl7dmFyIGw9dGhpcy5fbmFtZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz15VShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtf'@;
put 'PGg7KytfKWZvcih2YXIgZ2Usd2UsVD1kW19dLFc9VC5sZW5ndGgsaWU9ZltfXT1uZXcgQXJyYXkoVyksRWU9MDtFZTxXOysrRWUpKGdlPVRbRWVdKSYmKHdlPWMuY2FsbChnZSxnZS5fX2RhdGFfXyxFZSxUKSkmJigiX19kYXRhX18iaW4gZ2UmJih3ZS5fX2RhdGFfXz1nZS5fX2RhdGFfXyks'@;
put 'aWVbRWVdPXdlLGdUKGllW0VlXSxsLGEsRWUsaWUsUzIoZ2UsYSkpKTtyZXR1cm4gbmV3IExoKGYsdGhpcy5fcGFyZW50cyxsLGEpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gcFhlKGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9bmFlKGMpKTtm'@;
put 'b3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1bXSxfPVtdLFQ9MDtUPGg7KytUKWZvcih2YXIgZ2UsVz1kW1RdLGllPVcubGVuZ3RoLHdlPTA7d2U8aWU7Kyt3ZSlpZihnZT1XW3dlXSl7Zm9yKHZhciBaZSxFZT1jLmNhbGwoZ2UsZ2UuX19kYXRhX18sd2UsVyksb3Q9UzIoZ2Us'@;
put 'YSksZXQ9MCx5dD1FZS5sZW5ndGg7ZXQ8eXQ7KytldCkoWmU9RWVbZXRdKSYmZ1QoWmUsbCxhLGV0LEVlLG90KTtmLnB1c2goRWUpLF8ucHVzaChnZSl9cmV0dXJuIG5ldyBMaChmLF8sbCxhKX0sc2VsZWN0Q2hpbGQ6cjMuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46cjMuc2VsZWN0Q2hp'@;
put 'bGRyZW4sZmlsdGVyOmZ1bmN0aW9uIHNYZShjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9cmFlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBXLGY9bFtoXSxfPWYubGVuZ3RoLFQ9ZFtoXT1bXSxpZT0w'@;
put 'O2llPF87KytpZSkoVz1mW2llXSkmJmMuY2FsbChXLFcuX19kYXRhX18saWUsZikmJlQucHVzaChXKTtyZXR1cm4gbmV3IExoKGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gYVhlKGMpe2lmKGMuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVy'@;
put 'cm9yO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1jLl9ncm91cHMsZD1sLmxlbmd0aCxmPU1hdGgubWluKGQsYS5sZW5ndGgpLF89bmV3IEFycmF5KGQpLFQ9MDtUPGY7KytUKWZvcih2YXIgRWUsVz1sW1RdLGllPWFbVF0sZ2U9Vy5sZW5ndGgsd2U9X1tUXT1uZXcgQXJyYXkoZ2UpLFplPTA7'@;
put 'WmU8Z2U7KytaZSkoRWU9V1taZV18fGllW1plXSkmJih3ZVtaZV09RWUpO2Zvcig7VDxkOysrVClfW1RdPWxbVF07cmV0dXJuIG5ldyBMaChfLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiBtWGUoKXtyZXR1cm4gbmV3IGdYZSh0aGlzLl9n'@;
put 'cm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gSVhlKCl7Zm9yKHZhciBjPXRoaXMuX25hbWUsbD10aGlzLl9pZCxhPVphZSgpLGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBXLF89ZFtmXSxUPV8ubGVuZ3RoLGllPTA7aWU8VDsr'@;
put 'K2llKWlmKFc9X1tpZV0pe3ZhciBnZT1TMihXLGwpO2dUKFcsYyxhLGllLF8se3RpbWU6Z2UudGltZStnZS5kZWxheStnZS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmdlLmR1cmF0aW9uLGVhc2U6Z2UuZWFzZX0pfXJldHVybiBuZXcgTGgoZCx0aGlzLl9wYXJlbnRzLGMsYSl9LGNhbGw6'@;
put 'cjMuY2FsbCxub2RlczpyMy5ub2Rlcyxub2RlOnIzLm5vZGUsc2l6ZTpyMy5zaXplLGVtcHR5OnIzLmVtcHR5LGVhY2g6cjMuZWFjaCxvbjpmdW5jdGlvbiB1WGUoYyxsKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1MyKHRoaXMubm9kZSgpLGEpLm9uLm9uKGMp'@;
put 'OnRoaXMuZWFjaChmdW5jdGlvbiBjWGUoYyxsLGEpe3ZhciBkLGgsZj1mdW5jdGlvbiBsWGUoYyl7cmV0dXJuKGMrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihsKXt2YXIgYT1sLmluZGV4T2YoIi4iKTtyZXR1cm4gYT49MCYmKGw9bC5zbGljZSgwLGEpKSwhbHx8'@;
put 'InN0YXJ0Ij09PWx9KX0obCk/SVU6VGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89Zih0aGlzLGMpLFQ9Xy5vbjtUIT09ZCYmKGg9KGQ9VCkuY29weSgpKS5vbihsLGEpLF8ub249aH19KGEsYyxsKSl9LGF0dHI6ZnVuY3Rpb24gWktlKGMsbCl7dmFyIGE9c1QoYyksZD0idHJhbnNmb3JtIj09'@;
put 'PWE/RWFlOnphZTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oYywiZnVuY3Rpb24iPT10eXBlb2YgbD8oYS5sb2NhbD9VS2U6ektlKShhLGQsUlUodGhpcywiYXR0ci4iK2MsbCkpOm51bGw9PWw/KGEubG9jYWw/VktlOk5LZSkoYSk6KGEubG9jYWw/aktlOkJLZSkoYSxkLGwpKX0sYXR0clR3ZWVu'@;
put 'OmZ1bmN0aW9uIHFLZShjLGwpe3ZhciBhPSJhdHRyLiIrYztpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGE9dGhpcy50d2VlbihhKSkmJmEuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oYSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJy'@;
put 'b3I7dmFyIGQ9c1QoYyk7cmV0dXJuIHRoaXMudHdlZW4oYSwoZC5sb2NhbD9HS2U6JEtlKShkLGwpKX0sc3R5bGU6ZnVuY3Rpb24gd1hlKGMsbCxhKXt2YXIgZD0idHJhbnNmb3JtIj09KGMrPSIiKT9tS2U6emFlO3JldHVybiBudWxsPT1sP3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIHZY'@;
put 'ZShjLGwpe3ZhciBhLGQsaDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1ZNyh0aGlzLGMpLF89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksWTcodGhpcyxjKSk7cmV0dXJuIGY9PT1fP251bGw6Zj09PWEmJl89PT1kP2g6aD1sKGE9ZixkPV8pfX0oYyxkKSkub24oImVuZC5zdHlsZS4i'@;
put 'K2MsVWFlKGMpKToiZnVuY3Rpb24iPT10eXBlb2YgbD90aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBiWGUoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz1ZNyh0aGlzLGMpLFQ9YSh0aGlzKSxXPVQrIiI7cmV0dXJuIG51bGw9PVQmJih0aGlzLnN0eWxlLnJlbW92'@;
put 'ZVByb3BlcnR5KGMpLFc9VD1ZNyh0aGlzLGMpKSxfPT09Vz9udWxsOl89PT1kJiZXPT09aD9mOihoPVcsZj1sKGQ9XyxUKSl9fShjLGQsUlUodGhpcywic3R5bGUuIitjLGwpKSkuZWFjaChmdW5jdGlvbiB5WGUoYyxsKXt2YXIgYSxkLGgsVCxmPSJzdHlsZS4iK2wsXz0iZW5kLiIrZjtyZXR1'@;
put 'cm4gZnVuY3Rpb24oKXt2YXIgVz1UaCh0aGlzLGMpLGllPVcub24sZ2U9bnVsbD09Vy52YWx1ZVtmXT9UfHwoVD1VYWUobCkpOnZvaWQgMDsoaWUhPT1hfHxoIT09Z2UpJiYoZD0oYT1pZSkuY29weSgpKS5vbihfLGg9Z2UpLFcub249ZH19KHRoaXMuX2lkLGMpKTp0aGlzLnN0eWxlVHdlZW4o'@;
put 'YyxmdW5jdGlvbiBfWGUoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBfPVk3KHRoaXMsYyk7cmV0dXJuIF89PT1oP251bGw6Xz09PWQ/ZjpmPWwoZD1fLGEpfX0oYyxkLGwpLGEpLm9uKCJlbmQuc3R5bGUuIitjLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9u'@;
put 'IE1YZShjLGwsYSl7dmFyIGQ9InN0eWxlLiIrKGMrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGQ9dGhpcy50d2VlbihkKSkmJmQuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oZCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJy'@;
put 'b3I7cmV0dXJuIHRoaXMudHdlZW4oZCxmdW5jdGlvbiBTWGUoYyxsLGEpe3ZhciBkLGg7ZnVuY3Rpb24gZigpe3ZhciBfPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBfIT09aCYmKGQ9KGg9XykmJmZ1bmN0aW9uIENYZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuc3R5'@;
put 'bGUuc2V0UHJvcGVydHkoYyxsLmNhbGwodGhpcyxkKSxhKX19KGMsXyxhKSksZH1yZXR1cm4gZi5fdmFsdWU9bCxmfShjLGwsYT8/IiIpKX0sdGV4dDpmdW5jdGlvbiBrWGUoYyl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIEVYZShjKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fShSVSh0aGlzLCJ0ZXh0IixjKSk6ZnVuY3Rpb24geFhlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319KG51bGw9PWM/IiI6YysiIikpfSx0ZXh0VHdlZW46ZnVuY3Rp'@;
put 'b24gRFhlKGMpe3ZhciBsPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGw9dGhpcy50d2VlbihsKSkmJmwuX3ZhbHVlO2lmKG51bGw9PWMpcmV0dXJuIHRoaXMudHdlZW4obCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRo'@;
put 'aXMudHdlZW4obCxmdW5jdGlvbiBUWGUoYyl7dmFyIGwsYTtmdW5jdGlvbiBkKCl7dmFyIGg9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGghPT1hJiYobD0oYT1oKSYmZnVuY3Rpb24gQVhlKGMpe3JldHVybiBmdW5jdGlvbihsKXt0aGlzLnRleHRDb250ZW50PWMuY2FsbCh0aGlz'@;
put 'LGwpfX0oaCkpLGx9cmV0dXJuIGQuX3ZhbHVlPWMsZH0oYykpfSxyZW1vdmU6ZnVuY3Rpb24gaFhlKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uIGRYZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBhIGluIHRoaXMuX190'@;
put 'cmFuc2l0aW9uKWlmKCthIT09YylyZXR1cm47bCYmbC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIGJLZShjLGwpe3ZhciBhPXRoaXMuX2lkO2lmKGMrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBfLGQ9UzIodGhpcy5ub2RlKCksYSkudHdl'@;
put 'ZW4saD0wLGY9ZC5sZW5ndGg7aDxmOysraClpZigoXz1kW2hdKS5uYW1lPT09YylyZXR1cm4gXy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP3ZLZTpfS2UpKGEsYyxsKSl9LGRlbGF5OmZ1bmN0aW9uIEpLZShjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJn'@;
put 'dW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBjP0tLZTpYS2UpKGwsYykpOlMyKHRoaXMubm9kZSgpLGwpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiB0WGUoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgYz9RS2U6ZVhlKShsLGMpKTpTMih0aGlzLm5vZGUoKSxsKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiByWGUoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uIG5YZShjLGwpe2lmKCJmdW5jdGlvbiIhPXR5'@;
put 'cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtUaCh0aGlzLGMpLmVhc2U9bH19KGwsYykpOlMyKHRoaXMubm9kZSgpLGwpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uIG9YZShjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJu'@;
put 'IHRoaXMuZWFjaChmdW5jdGlvbiBpWGUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7VGgodGhpcyxjKS5lYXNlPWF9fSh0aGlzLl9pZCxjKSl9LGVuZDpmdW5jdGlvbiBM'@;
put 'WGUoKXt2YXIgYyxsLGE9dGhpcyxkPWEuX2lkLGg9YS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGYsXyl7dmFyIFQ9e3ZhbHVlOl99LFc9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1oJiZmKCl9fTthLmVhY2goZnVuY3Rpb24oKXt2YXIgaWU9VGgodGhpcyxkKSxnZT1pZS5v'@;
put 'bjtnZSE9PWMmJigobD0oYz1nZSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKFQpLGwuXy5pbnRlcnJ1cHQucHVzaChUKSxsLl8uZW5kLnB1c2goVykpLGllLm9uPWx9KSwwPT09aCYmZigpfSl9LFtTeW1ib2wuaXRlcmF0b3JdOnIzW1N5bWJvbC5pdGVyYXRvcl19O3ZhciBQWGU9e3RpbWU6bnVs'@;
put 'bCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIE9YZShjKXtyZXR1cm4oKGMqPTIpPD0xP2MqYypjOihjLT0yKSpjKmMrMikvMn19O2Z1bmN0aW9uIEZYZShjLGwpe2Zvcih2YXIgYTshKGE9Yy5fX3RyYW5zaXRpb24pfHwhKGE9YVtsXSk7KWlmKCEoYz1jLnBhcmVudE5vZGUp'@;
put 'KXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2x9IG5vdCBmb3VuZGApO3JldHVybiBhfVlnLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gZktlKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttVCh0aGlzLGMpfSl9LFlnLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0'@;
put 'aW9uIEhYZShjKXt2YXIgbCxhO2MgaW5zdGFuY2VvZiBMaD8obD1jLl9pZCxjPWMuX25hbWUpOihsPVphZSgpLChhPVBYZSkudGltZT1FVSgpLGM9bnVsbD09Yz9udWxsOmMrIiIpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7ZjxoOysrZilmb3IodmFyIFcsXz1kW2Zd'@;
put 'LFQ9Xy5sZW5ndGgsaWU9MDtpZTxUOysraWUpKFc9X1tpZV0pJiZnVChXLGMsbCxpZSxfLGF8fEZYZShXLGwpKTtyZXR1cm4gbmV3IExoKGQsdGhpcy5fcGFyZW50cyxjLGwpfTt2YXIgTlhlPVtudWxsXTtjb25zdCBCVT17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5jdGlvbiBqVShjKXtj'@;
put 'LnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBZYWUoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKSsxL2MpLzJ9Y29uc3QgWVhlPWZ1bmN0aW9uIGMobCxhLGQpe2Z1bmN0aW9uIGgoZixfKXt2YXIgeXQsa3QsVD1mWzBdLFc9ZlsxXSxpZT1m'@;
put 'WzJdLEVlPV9bMl0sWmU9X1swXS1ULG90PV9bMV0tVyxldD1aZSpaZStvdCpvdDtpZihldDwxZS0xMilrdD1NYXRoLmxvZyhFZS9pZSkvbCx5dD1mdW5jdGlvbihjcil7cmV0dXJuW1QrY3IqWmUsVytjcipvdCxpZSpNYXRoLmV4cChsKmNyKmt0KV19O2Vsc2V7dmFyIFN0PU1hdGguc3FydChl'@;
put 'dCksUXQ9KEVlKkVlLWllKmllK2QqZXQpLygyKmllKmEqU3QpLHJuPShFZSpFZS1pZSppZS1kKmV0KS8oMipFZSphKlN0KSx2bj1NYXRoLmxvZyhNYXRoLnNxcnQoUXQqUXQrMSktUXQpLE5uPU1hdGgubG9nKE1hdGguc3FydChybipybisxKS1ybik7a3Q9KE5uLXZuKS9sLHl0PWZ1bmN0aW9u'@;
put 'KGNyKXt2YXIgRHI9Y3Iqa3QsX2k9WWFlKHZuKSxsaT1pZS8oYSpTdCkqKF9pKmZ1bmN0aW9uIFpYZShjKXtyZXR1cm4oKGM9TWF0aC5leHAoMipjKSktMSkvKGMrMSl9KGwqRHIrdm4pLWZ1bmN0aW9uIFVYZShjKXtyZXR1cm4oKGM9TWF0aC5leHAoYykpLTEvYykvMn0odm4pKTtyZXR1cm5b'@;
put 'VCtsaSpaZSxXK2xpKm90LGllKl9pL1lhZShsKkRyK3ZuKV19fXJldHVybiB5dC5kdXJhdGlvbj0xZTMqa3QqbC9NYXRoLlNRUlQyLHl0fXJldHVybiBoLnJobz1mdW5jdGlvbihmKXt2YXIgXz1NYXRoLm1heCguMDAxLCtmKSxUPV8qXztyZXR1cm4gYyhfLFQsVCpUKX0saH0oTWF0aC5TUVJU'@;
put 'MiwyLDQpO2Z1bmN0aW9uIEtnKGMsbCl7aWYoYz1mdW5jdGlvbiBXWGUoYyl7bGV0IGw7Zm9yKDtsPWMuc291cmNlRXZlbnQ7KWM9bDtyZXR1cm4gY30oYyksdm9pZCAwPT09bCYmKGw9Yy5jdXJyZW50VGFyZ2V0KSxsKXt2YXIgYT1sLm93bmVyU1ZHRWxlbWVudHx8bDtpZihhLmNyZWF0ZVNW'@;
put 'R1BvaW50KXt2YXIgZD1hLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGQueD1jLmNsaWVudFgsZC55PWMuY2xpZW50WSxbKGQ9ZC5tYXRyaXhUcmFuc2Zvcm0obC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGQueV19aWYobC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBoPWwuZ2V0'@;
put 'Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2MuY2xpZW50WC1oLmxlZnQtbC5jbGllbnRMZWZ0LGMuY2xpZW50WS1oLnRvcC1sLmNsaWVudFRvcF19fXJldHVybltjLnBhZ2VYLGMucGFnZVldfWNvbnN0IE1UPWM9PigpPT5jO2Z1bmN0aW9uIEdYZShjLHtzb3VyY2VFdmVudDpsLHRhcmdl'@;
put 'dDphLHRyYW5zZm9ybTpkLGRpc3BhdGNoOmh9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTpjLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2'@;
put 'YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOmQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOmh9fSl9ZnVuY3Rpb24gaTMoYyxsLGEpe3RoaXMuaz1jLHRoaXMueD1sLHRoaXMueT1hfWkzLnByb3RvdHlwZT17Y29u'@;
put 'c3RydWN0b3I6aTMsc2NhbGU6ZnVuY3Rpb24oYyl7cmV0dXJuIDE9PT1jP3RoaXM6bmV3IGkzKHRoaXMuaypjLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gMD09PWMmMD09PWw/dGhpczpuZXcgaTModGhpcy5rLHRoaXMueCt0aGlzLmsqYyx0aGlzLnkr'@;
put 'dGhpcy5rKmwpfSxhcHBseTpmdW5jdGlvbihjKXtyZXR1cm5bY1swXSp0aGlzLmsrdGhpcy54LGNbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueX0saW52'@;
put 'ZXJ0OmZ1bmN0aW9uKGMpe3JldHVyblsoY1swXS10aGlzLngpL3RoaXMuaywoY1sxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVY'@;
put 'OmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0scmVzY2FsZVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5t'@;
put 'YXAoYy5pbnZlcnQsYykpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgeFQ9bmV3IGkzKDEsMCwwKTtmdW5jdGlvbiBFVChjKXtmb3IoOyFjLl9fem9vbTspaWYoIShjPWMucGFyZW50'@;
put 'Tm9kZSkpcmV0dXJuIHhUO3JldHVybiBjLl9fem9vbX1mdW5jdGlvbiB6VShjKXtjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHZ3KGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uICRYZShjKXtyZXR1cm4hKGMu'@;
put 'Y3RybEtleSYmIndoZWVsIiE9PWMudHlwZXx8Yy5idXR0b24pfWZ1bmN0aW9uIHFYZSgpe3ZhciBjPXRoaXM7cmV0dXJuIGMgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhjPWMub3duZXJTVkdFbGVtZW50fHxjKS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyhjPWMudmlld0JveC5iYXNlVmFs'@;
put 'KS54LGMueV0sW2MueCtjLndpZHRoLGMueStjLmhlaWdodF1dOltbMCwwXSxbYy53aWR0aC5iYXNlVmFsLnZhbHVlLGMuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW2MuY2xpZW50V2lkdGgsYy5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBXYWUoKXtyZXR1cm4gdGhpcy5fX3pvb218'@;
put 'fHhUfWZ1bmN0aW9uIEtYZShjKXtyZXR1cm4tYy5kZWx0YVkqKDE9PT1jLmRlbHRhTW9kZT8uMDU6Yy5kZWx0YU1vZGU/MTouMDAyKSooYy5jdHJsS2V5PzEwOjEpfWZ1bmN0aW9uIFhYZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31m'@;
put 'dW5jdGlvbiBKWGUoYyxsLGEpe3ZhciBkPWMuaW52ZXJ0WChsWzBdWzBdKS1hWzBdWzBdLGg9Yy5pbnZlcnRYKGxbMV1bMF0pLWFbMV1bMF0sZj1jLmludmVydFkobFswXVsxXSktYVswXVsxXSxfPWMuaW52ZXJ0WShsWzFdWzFdKS1hWzFdWzFdO3JldHVybiBjLnRyYW5zbGF0ZShoPmQ/KGQr'@;
put 'aCkvMjpNYXRoLm1pbigwLGQpfHxNYXRoLm1heCgwLGgpLF8+Zj8oZitfKS8yOk1hdGgubWluKDAsZil8fE1hdGgubWF4KDAsXykpfWZ1bmN0aW9uIEdhZShjKXt2YXIgbD17fSxhPWMubm9kZSgpLm5vZGVOYW1lO2wudGFnPWEsIiN0ZXh0Ij09YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50'@;
put 'Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbC5hdHRyaWJ1dGVzPXt9O3ZhciBkPWMubm9kZSgpLmF0dHJpYnV0ZXM7aWYoZClmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl7dmFyIGY9ZFtoXTtsLmF0dHJpYnV0ZXNbZi5uYW1lXT1mLnZhbHVlfXZhciBnZSxXPWMubm9kZSgpLnRyYW5z'@;
put 'Zm9ybTtpZihXJiYwIT1XLmJhc2VWYWwubnVtYmVyT2ZJdGVtcyl7dmFyIGllPVcuYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1hdHJpeDtsLnRyYW5zbGF0aW9uPXt4OmllLmUseTppZS5mfSxsLnNjYWxlPWllLmF9aWYoImVsbGlwc2UiPT1hJiYobC5jZW50ZXI9e3g6bC5hdHRyaWJ1dGVzLmN4'@;
put 'LHk6bC5hdHRyaWJ1dGVzLmN5fSksInBvbHlnb24iPT1hKXt2YXIgd2U9KGdlPWMuYXR0cigicG9pbnRzIikuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc3BsaXQoIiwiKVswXX0pLEVlPWdlLm1hcChmdW5jdGlvbihRdCl7cmV0dXJuIFF0LnNwbGl0KCIsIilbMV19'@;
put 'KSxaZT1NYXRoLm1pbi5hcHBseShudWxsLHdlKSxvdD1NYXRoLm1heC5hcHBseShudWxsLHdlKSxldD1NYXRoLm1pbi5hcHBseShudWxsLEVlKSx5dD1NYXRoLm1heC5hcHBseShudWxsLEVlKTtsLmJib3g9e3g6WmUseTpldCx3aWR0aDpvdC1aZSxoZWlnaHQ6eXQtZXR9LGwuY2VudGVyPXt4'@;
put 'OihaZStvdCkvMix5OihldCt5dCkvMn19InBhdGgiPT1hJiYoKGdlPWMuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKSx3ZT1nZS5tYXAoZnVuY3Rpb24obXIpe3JldHVybittci5zcGxpdCgiLCIpWzBdfSksRWU9Z2UubWFwKGZ1bmN0aW9uKG1yKXtyZXR1cm4rbXIuc3BsaXQo'@;
put 'IiwiKVsxXX0pLFplPU1hdGgubWluLmFwcGx5KG51bGwsd2UpLG90PU1hdGgubWF4LmFwcGx5KG51bGwsd2UpLGV0PU1hdGgubWluLmFwcGx5KG51bGwsRWUpLHl0PU1hdGgubWF4LmFwcGx5KG51bGwsRWUpLGwuYmJveD17eDpaZSx5OmV0LHdpZHRoOm90LVplLGhlaWdodDp5dC1ldH0sbC5j'@;
put 'ZW50ZXI9e3g6KFplK290KS8yLHk6KGV0K3l0KS8yfSxsLnRvdGFsTGVuZ3RoPWMubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCkpO3JldHVybiJ0ZXh0Ij09YSYmKGwuY2VudGVyPXt4OmMuYXR0cigieCIpLHk6Yy5hdHRyKCJ5Iil9KSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1l'@;
put 'bnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsfWZ1bmN0aW9uIFhnKGMpe3ZhciBsPUdhZShjKTtyZXR1cm4gbC5jaGlsZHJlbj1bXSxNVShjLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9WGcoa3ModGhpcykpO2QucGFyZW50PWwsbC5jaGlsZHJlbi5wdXNo'@;
put 'KGQpfSksbH1mdW5jdGlvbiBVVShjKXtyZXR1cm4iI3RleHQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik6IiNjb21tZW50Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChjLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5v'@;
put 'cmcvMjAwMC9zdmciLGMudGFnKX1mdW5jdGlvbiBaVShjKXt2YXIgbD1VVShjKSxhPWtzKGwpLGQ9Yy5hdHRyaWJ1dGVzO2Zvcih2YXIgaCBvZiBPYmplY3Qua2V5cyhkKSlhLmF0dHIoaCxkW2hdKTtyZXR1cm4gbH1mdW5jdGlvbiAkYWUoYyxsKXt2YXIgYT1rcyhjLm5vZGUoKS5wYXJlbnRO'@;
put 'b2RlKSxkPVpVKGwpLGg9YS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gZH0sZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCl9KTtyZXR1cm4gYy5yZW1vdmUoKSxofWZ1bmN0aW9uIFlVKGMsbCl7IWZ1bmN0aW9uIGVKZShjLGwpe2MuZGF0dW0obCksYy5kYXRhKFtsXSxmdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gYS5rZXl9KX0oYyxsKSxNVShjLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKGQsaCl7WVUoa3ModGhpcyksbC5jaGlsZHJlbltoXSl9KX1mdW5jdGlvbiBfdyhjLGw9MCl7dmFyIGE9a3ModGhpcyksaD1jLmF0dHJpYnV0ZXMsZj1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lm'@;
put 'KGYpZm9yKHZhciBfPTA7XzxmLmxlbmd0aDtfKyspe3ZhciBUPWZbX10sVz1ULm5hbWU7aWYoInhtbG5zIiE9Vy5zcGxpdCgiOiIpWzBdJiZULm5hbWVzcGFjZVVSSSl7dmFyIGllPVQubmFtZXNwYWNlVVJJLnNwbGl0KCIvIik7Vz1pZVtpZS5sZW5ndGgtMV0rIjoiK1d9VyBpbiBofHwoaFtX'@;
put 'XT1udWxsKX1mb3IodmFyIHdlIG9mIE9iamVjdC5rZXlzKGgpKWEuYXR0cih3ZSxoW3dlXSk7Yy50ZXh0JiZhLnRleHQoYy50ZXh0KSxmdW5jdGlvbiB0SmUoYyxsKXt2YXIgYT1jLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKS5jaGlsZE5vZGVzfSksZD0oYT1hLmRhdGEo'@;
put 'ZnVuY3Rpb24oXyl7cmV0dXJuIF8uY2hpbGRyZW59LGZ1bmN0aW9uKF8pe3JldHVybiBfLnRhZysiLSIrbH0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihfKXtyZXR1cm4gVVUoXyl9KSxoPWEuZXhpdCgpO2g9aC5yZW1vdmUoKSxhPWQubWVyZ2UoYSk7dmFyIGY9e307YS5lYWNoKGZ1bmN0'@;
put 'aW9uKF8pe3ZhciBUPV8udGFnO251bGw9PWZbVF0mJihmW1RdPTApO3ZhciBXPWZbVF0rKztfdy5jYWxsKHRoaXMsXyxXKX0pfShhLGwpfWZ1bmN0aW9uIHFhZShjLGwpe3ZhciBfLGE9bD9sLmxlbmd0aDowLGQ9Yz9NYXRoLm1pbihhLGMubGVuZ3RoKTowLGg9bmV3IEFycmF5KGQpLGY9bmV3'@;
put 'IEFycmF5KGEpO2ZvcihfPTA7XzxkOysrXyloW19dPWtUKGNbX10sbFtfXSk7Zm9yKDtfPGE7KytfKWZbX109bFtfXTtyZXR1cm4gZnVuY3Rpb24oVCl7Zm9yKF89MDtfPGQ7KytfKWZbX109aFtfXShUKTtyZXR1cm4gZn19ZnVuY3Rpb24gbkplKGMsbCl7dmFyIGE9bmV3IERhdGU7cmV0dXJu'@;
put 'IGM9K2MsbD0rbCxmdW5jdGlvbihkKXtyZXR1cm4gYS5zZXRUaW1lKGMqKDEtZCkrbCpkKSxhfX1mdW5jdGlvbiBySmUoYyxsKXt2YXIgaCxhPXt9LGQ9e307Zm9yKGggaW4obnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSwobnVsbD09PWx8fCJvYmplY3QiIT10eXBlb2Yg'@;
put 'bCkmJihsPXt9KSxsKWggaW4gYz9hW2hdPWtUKGNbaF0sbFtoXSk6ZFtoXT1sW2hdO3JldHVybiBmdW5jdGlvbihmKXtmb3IoaCBpbiBhKWRbaF09YVtoXShmKTtyZXR1cm4gZH19ZnVuY3Rpb24gaUplKGMsbCl7bHx8KGw9W10pO3ZhciBoLGE9Yz9NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0'@;
put 'aCk6MCxkPWwuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGg9MDtoPGE7KytoKWRbaF09Y1toXSooMS1mKStsW2hdKmY7cmV0dXJuIGR9fWZ1bmN0aW9uIGtUKGMsbCl7dmFyIGQsYT10eXBlb2YgbDtyZXR1cm4gbnVsbD09bHx8ImJvb2xlYW4iPT09YT9GVShsKTooIm51bWJlciI9'@;
put 'PT1hP0RoOiJzdHJpbmciPT09YT8oZD1HZyhsKSk/KGw9ZCxTVCk6amFlOmwgaW5zdGFuY2VvZiBHZz9TVDpsIGluc3RhbmNlb2YgRGF0ZT9uSmU6ZnVuY3Rpb24gb0plKGMpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYykmJiEoYyBpbnN0YW5jZW9mIERhdGFWaWV3KX0obCk/aUplOkFy'@;
put 'cmF5LmlzQXJyYXkobCk/cWFlOiJmdW5jdGlvbiIhPXR5cGVvZiBsLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBsLnRvU3RyaW5nfHxpc05hTihsKT9ySmU6RGgpKGMsbCl9ZnVuY3Rpb24gS2FlKCl7dmFyIGM9dGhpcyxkPWtzKHRoaXMuX3NlbGVjdGlvbi5ub2RlKCkucXVlcnlTZWxl'@;
put 'Y3Rvcigic3ZnIikpO2lmKDA9PWQuc2l6ZSgpKXJldHVybiB0aGlzO3RoaXMuX3pvb21TZWxlY3Rpb249ZDt2YXIgaD1mdW5jdGlvbiBRWGUoKXt2YXIgZ2Usd2UsRWUsYz0kWGUsbD1xWGUsYT1KWGUsZD1LWGUsaD1YWGUsZj1bMCwxLzBdLF89W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sVD0y'@;
put 'NTAsVz1ZWGUsaWU9eFUoInN0YXJ0Iiwiem9vbSIsImVuZCIpLFplPTUwMCxvdD0xNTAsZXQ9MCx5dD0xMDtmdW5jdGlvbiBrdChGbil7Rm4ucHJvcGVydHkoIl9fem9vbSIsV2FlKS5vbigid2hlZWwuem9vbSIsRHIse3Bhc3NpdmU6ITF9KS5vbigibW91c2Vkb3duLnpvb20iLF9pKS5vbigi'@;
put 'ZGJsY2xpY2suem9vbSIsbGkpLmZpbHRlcihoKS5vbigidG91Y2hzdGFydC56b29tIixtcikub24oInRvdWNobW92ZS56b29tIixFaSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsWnIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCww'@;
put 'LDApIil9ZnVuY3Rpb24gU3QoRm4sRnIpe3JldHVybihGcj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sRnIpKSk9PT1Gbi5rP0ZuOm5ldyBpMyhGcixGbi54LEZuLnkpfWZ1bmN0aW9uIFF0KEZuLEZyLFFuKXt2YXIgTXI9RnJbMF0tUW5bMF0qRm4uayxfcj1GclsxXS1RblsxXSpGbi5r'@;
put 'O3JldHVybiBNcj09PUZuLngmJl9yPT09Rm4ueT9GbjpuZXcgaTMoRm4uayxNcixfcil9ZnVuY3Rpb24gcm4oRm4pe3JldHVyblsoK0ZuWzBdWzBdKyArRm5bMV1bMF0pLzIsKCtGblswXVsxXSsgK0ZuWzFdWzFdKS8yXX1mdW5jdGlvbiB2bihGbixGcixRbixNcil7Rm4ub24oInN0YXJ0Lnpv'@;
put 'b20iLGZ1bmN0aW9uKCl7Tm4odGhpcyxhcmd1bWVudHMpLmV2ZW50KE1yKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe05uKHRoaXMsYXJndW1lbnRzKS5ldmVudChNcikuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgX3I9dGhp'@;
put 'cyx2dD1hcmd1bWVudHMsT3Q9Tm4oX3IsdnQpLmV2ZW50KE1yKSxjbj1sLmFwcGx5KF9yLHZ0KSxFbj1udWxsPT1Rbj9ybihjbik6ImZ1bmN0aW9uIj09dHlwZW9mIFFuP1FuLmFwcGx5KF9yLHZ0KTpRbixPbj1NYXRoLm1heChjblsxXVswXS1jblswXVswXSxjblsxXVsxXS1jblswXVsxXSks'@;
put 'Sm49X3IuX196b29tLFByPSJmdW5jdGlvbiI9PXR5cGVvZiBGcj9Gci5hcHBseShfcix2dCk6RnIsT3I9VyhKbi5pbnZlcnQoRW4pLmNvbmNhdChPbi9Kbi5rKSxQci5pbnZlcnQoRW4pLmNvbmNhdChPbi9Qci5rKSk7cmV0dXJuIGZ1bmN0aW9uKCRyKXtpZigxPT09JHIpJHI9UHI7ZWxzZXt2'@;
put 'YXIgWXI9T3IoJHIpLE5yPU9uL1lyWzJdOyRyPW5ldyBpMyhOcixFblswXS1ZclswXSpOcixFblsxXS1ZclsxXSpOcil9T3Quem9vbShudWxsLCRyKX19KX1mdW5jdGlvbiBObihGbixGcixRbil7cmV0dXJuIVFuJiZGbi5fX3pvb21pbmd8fG5ldyBjcihGbixGcil9ZnVuY3Rpb24gY3IoRm4s'@;
put 'RnIpe3RoaXMudGhhdD1Gbix0aGlzLmFyZ3M9RnIsdGhpcy5hY3RpdmU9MCx0aGlzLnNvdXJjZUV2ZW50PW51bGwsdGhpcy5leHRlbnQ9bC5hcHBseShGbixGciksdGhpcy50YXBzPTB9ZnVuY3Rpb24gRHIoRm4sLi4uRnIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUW49Tm4o'@;
put 'dGhpcyxGcikuZXZlbnQoRm4pLE1yPXRoaXMuX196b29tLF9yPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSxNci5rKk1hdGgucG93KDIsZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksdnQ9S2coRm4pO2lmKFFuLndoZWVsKShRbi5tb3VzZVswXVswXSE9PXZ0WzBdfHxRbi5tb3VzZVsw'@;
put 'XVsxXSE9PXZ0WzFdKSYmKFFuLm1vdXNlWzFdPU1yLmludmVydChRbi5tb3VzZVswXT12dCkpLGNsZWFyVGltZW91dChRbi53aGVlbCk7ZWxzZXtpZihNci5rPT09X3IpcmV0dXJuO1FuLm1vdXNlPVt2dCxNci5pbnZlcnQodnQpXSxtVCh0aGlzKSxRbi5zdGFydCgpfXZ3KEZuKSxRbi53aGVl'@;
put 'bD1zZXRUaW1lb3V0KGZ1bmN0aW9uIE90KCl7UW4ud2hlZWw9bnVsbCxRbi5lbmQoKX0sb3QpLFFuLnpvb20oIm1vdXNlIixhKFF0KFN0KE1yLF9yKSxRbi5tb3VzZVswXSxRbi5tb3VzZVsxXSksUW4uZXh0ZW50LF8pKX19ZnVuY3Rpb24gX2koRm4sLi4uRnIpe2lmKCFFZSYmYy5hcHBseSh0'@;
put 'aGlzLGFyZ3VtZW50cykpe3ZhciBRbj1Gbi5jdXJyZW50VGFyZ2V0LE1yPU5uKHRoaXMsRnIsITApLmV2ZW50KEZuKSxfcj1rcyhGbi52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uIEVuKEpuKXtpZih2dyhKbiksIU1yLm1vdmVkKXt2YXIgUHI9Sm4uY2xpZW50WC1PdCxPcj1K'@;
put 'bi5jbGllbnRZLWNuO01yLm1vdmVkPVByKlByK09yKk9yPmV0fU1yLmV2ZW50KEpuKS56b29tKCJtb3VzZSIsYShRdChNci50aGF0Ll9fem9vbSxNci5tb3VzZVswXT1LZyhKbixRbiksTXIubW91c2VbMV0pLE1yLmV4dGVudCxfKSl9LCEwKS5vbigibW91c2V1cC56b29tIixmdW5jdGlvbiBP'@;
put 'bihKbil7X3Iub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksZnVuY3Rpb24galhlKGMsbCl7dmFyIGE9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZD1rcyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2wmJihkLm9uKCJjbGljay5kcmFnIixqVSxCVSksc2V0'@;
put 'VGltZW91dChmdW5jdGlvbigpe2Qub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gYT9kLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooYS5zdHlsZS5Nb3pVc2VyU2VsZWN0PWEuX19ub3NlbGVjdCxkZWxldGUgYS5fX25vc2VsZWN0KX0oSm4udmlldyxN'@;
put 'ci5tb3ZlZCksdncoSm4pLE1yLmV2ZW50KEpuKS5lbmQoKX0sITApLHZ0PUtnKEZuLFFuKSxPdD1Gbi5jbGllbnRYLGNuPUZuLmNsaWVudFk7KGZ1bmN0aW9uIEJYZShjKXt2YXIgbD1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWtzKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsalUsQlUp'@;
put 'OyJvbnNlbGVjdHN0YXJ0ImluIGw/YS5vbigic2VsZWN0c3RhcnQuZHJhZyIsalUsQlUpOihsLl9fbm9zZWxlY3Q9bC5zdHlsZS5Nb3pVc2VyU2VsZWN0LGwuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfSkoRm4udmlldykselUoRm4pLE1yLm1vdXNlPVt2dCx0aGlzLl9fem9vbS5pbnZl'@;
put 'cnQodnQpXSxtVCh0aGlzKSxNci5zdGFydCgpfX1mdW5jdGlvbiBsaShGbiwuLi5Gcil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBRbj10aGlzLl9fem9vbSxNcj1LZyhGbi5jaGFuZ2VkVG91Y2hlcz9Gbi5jaGFuZ2VkVG91Y2hlc1swXTpGbix0aGlzKSxfcj1Rbi5pbnZlcnQo'@;
put 'TXIpLE90PWEoUXQoU3QoUW4sUW4uayooRm4uc2hpZnRLZXk/LjU6MikpLE1yLF9yKSxsLmFwcGx5KHRoaXMsRnIpLF8pO3Z3KEZuKSxUPjA/a3ModGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKFQpLmNhbGwodm4sT3QsTXIsRm4pOmtzKHRoaXMpLmNhbGwoa3QudHJhbnNmb3JtLE90LE1y'@;
put 'LEZuKX19ZnVuY3Rpb24gbXIoRm4sLi4uRnIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdnQsT3QsY24sRW4sUW49Rm4udG91Y2hlcyxNcj1Rbi5sZW5ndGgsX3I9Tm4odGhpcyxGcixGbi5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1NcikuZXZlbnQoRm4pO2Zvcih6VShGbiks'@;
put 'T3Q9MDtPdDxNcjsrK090KUVuPVtFbj1LZyhjbj1RbltPdF0sdGhpcyksdGhpcy5fX3pvb20uaW52ZXJ0KEVuKSxjbi5pZGVudGlmaWVyXSxfci50b3VjaDA/IV9yLnRvdWNoMSYmX3IudG91Y2gwWzJdIT09RW5bMl0mJihfci50b3VjaDE9RW4sX3IudGFwcz0wKTooX3IudG91Y2gwPUVuLHZ0'@;
put 'PSEwLF9yLnRhcHM9MSshIWdlKTtnZSYmKGdlPWNsZWFyVGltZW91dChnZSkpLHZ0JiYoX3IudGFwczwyJiYod2U9RW5bMF0sZ2U9c2V0VGltZW91dChmdW5jdGlvbigpe2dlPW51bGx9LFplKSksbVQodGhpcyksX3Iuc3RhcnQoKSl9fWZ1bmN0aW9uIEVpKEZuLC4uLkZyKXtpZih0aGlzLl9f'@;
put 'em9vbWluZyl7dmFyIHZ0LE90LGNuLEVuLFFuPU5uKHRoaXMsRnIpLmV2ZW50KEZuKSxNcj1Gbi5jaGFuZ2VkVG91Y2hlcyxfcj1Nci5sZW5ndGg7Zm9yKHZ3KEZuKSx2dD0wO3Z0PF9yOysrdnQpY249S2coT3Q9TXJbdnRdLHRoaXMpLFFuLnRvdWNoMCYmUW4udG91Y2gwWzJdPT09T3QuaWRl'@;
put 'bnRpZmllcj9Rbi50b3VjaDBbMF09Y246UW4udG91Y2gxJiZRbi50b3VjaDFbMl09PT1PdC5pZGVudGlmaWVyJiYoUW4udG91Y2gxWzBdPWNuKTtpZihPdD1Rbi50aGF0Ll9fem9vbSxRbi50b3VjaDEpe3ZhciBPbj1Rbi50b3VjaDBbMF0sSm49UW4udG91Y2gwWzFdLFByPVFuLnRvdWNoMVsw'@;
put 'XSxPcj1Rbi50b3VjaDFbMV0sJHI9KCRyPVByWzBdLU9uWzBdKSokcisoJHI9UHJbMV0tT25bMV0pKiRyLFlyPShZcj1PclswXS1KblswXSkqWXIrKFlyPU9yWzFdLUpuWzFdKSpZcjtPdD1TdChPdCxNYXRoLnNxcnQoJHIvWXIpKSxjbj1bKE9uWzBdK1ByWzBdKS8yLChPblsxXStQclsxXSkv'@;
put 'Ml0sRW49WyhKblswXStPclswXSkvMiwoSm5bMV0rT3JbMV0pLzJdfWVsc2V7aWYoIVFuLnRvdWNoMClyZXR1cm47Y249UW4udG91Y2gwWzBdLEVuPVFuLnRvdWNoMFsxXX1Rbi56b29tKCJ0b3VjaCIsYShRdChPdCxjbixFbiksUW4uZXh0ZW50LF8pKX19ZnVuY3Rpb24gWnIoRm4sLi4uRnIp'@;
put 'e2lmKHRoaXMuX196b29taW5nKXt2YXIgdnQsT3QsUW49Tm4odGhpcyxGcikuZXZlbnQoRm4pLE1yPUZuLmNoYW5nZWRUb3VjaGVzLF9yPU1yLmxlbmd0aDtmb3IoelUoRm4pLEVlJiZjbGVhclRpbWVvdXQoRWUpLEVlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtFZT1udWxsfSxaZSksdnQ9MDt2'@;
put 'dDxfcjsrK3Z0KU90PU1yW3Z0XSxRbi50b3VjaDAmJlFuLnRvdWNoMFsyXT09PU90LmlkZW50aWZpZXI/ZGVsZXRlIFFuLnRvdWNoMDpRbi50b3VjaDEmJlFuLnRvdWNoMVsyXT09PU90LmlkZW50aWZpZXImJmRlbGV0ZSBRbi50b3VjaDE7aWYoUW4udG91Y2gxJiYhUW4udG91Y2gwJiYoUW4u'@;
put 'dG91Y2gwPVFuLnRvdWNoMSxkZWxldGUgUW4udG91Y2gxKSxRbi50b3VjaDApUW4udG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChRbi50b3VjaDBbMF0pO2Vsc2UgaWYoUW4uZW5kKCksMj09PVFuLnRhcHMmJihPdD1LZyhPdCx0aGlzKSxNYXRoLmh5cG90KHdlWzBdLU90WzBdLHdlWzFd'@;
put 'LU90WzFdKTx5dCkpe3ZhciBjbj1rcyh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpO2NuJiZjbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4ga3QudHJhbnNmb3JtPWZ1bmN0aW9uKEZuLEZyLFFuLE1yKXt2YXIgX3I9Rm4uc2VsZWN0aW9uP0ZuLnNlbGVjdGlvbigpOkZuO19yLnBy'@;
put 'b3BlcnR5KCJfX3pvb20iLFdhZSksRm4hPT1fcj92bihGbixGcixRbixNcik6X3IuaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe05uKHRoaXMsYXJndW1lbnRzKS5ldmVudChNcikuc3RhcnQoKS56b29tKG51bGwsImZ1bmN0aW9uIj09dHlwZW9mIEZyP0ZyLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKTpGcikuZW5kKCl9KX0sa3Quc2NhbGVCeT1mdW5jdGlvbihGbixGcixRbixNcil7a3Quc2NhbGVUbyhGbixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2YgRnI/RnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkZyKX0sUW4sTXIpfSxrdC5zY2Fs'@;
put 'ZVRvPWZ1bmN0aW9uKEZuLEZyLFFuLE1yKXtrdC50cmFuc2Zvcm0oRm4sZnVuY3Rpb24oKXt2YXIgX3I9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdnQ9dGhpcy5fX3pvb20sT3Q9bnVsbD09UW4/cm4oX3IpOiJmdW5jdGlvbiI9PXR5cGVvZiBRbj9Rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6'@;
put 'UW4sY249dnQuaW52ZXJ0KE90KSxFbj0iZnVuY3Rpb24iPT10eXBlb2YgRnI/RnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkZyO3JldHVybiBhKFF0KFN0KHZ0LEVuKSxPdCxjbiksX3IsXyl9LFFuLE1yKX0sa3QudHJhbnNsYXRlQnk9ZnVuY3Rpb24oRm4sRnIsUW4sTXIpe2t0LnRyYW5zZm9y'@;
put 'bShGbixmdW5jdGlvbigpe3JldHVybiBhKHRoaXMuX196b29tLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgRnI/RnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkZyLCJmdW5jdGlvbiI9PXR5cGVvZiBRbj9Rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UW4pLGwuYXBwbHkodGhpcyxhcmd1'@;
put 'bWVudHMpLF8pfSxudWxsLE1yKX0sa3QudHJhbnNsYXRlVG89ZnVuY3Rpb24oRm4sRnIsUW4sTXIsX3Ipe2t0LnRyYW5zZm9ybShGbixmdW5jdGlvbigpe3ZhciB2dD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxPdD10aGlzLl9fem9vbSxjbj1udWxsPT1Ncj9ybih2dCk6ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIE1yP01yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpNcjtyZXR1cm4gYSh4VC50cmFuc2xhdGUoY25bMF0sY25bMV0pLnNjYWxlKE90LmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgRnI/LUZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRnIsImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFFuPy1Rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LVFuKSx2dCxfKX0sTXIsX3IpfSxjci5wcm90b3R5cGU9e2V2ZW50OmZ1bmN0aW9uKEZuKXtyZXR1cm4gRm4mJih0aGlzLnNvdXJjZUV2ZW50PUZuKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYo'@;
put 'dGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihGbixGcil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT1GbiYmKHRoaXMubW91c2VbMV09RnIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNo'@;
put 'IiE9PUZuJiYodGhpcy50b3VjaDBbMV09RnIuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT1GbiYmKHRoaXMudG91Y2gxWzFdPUZyLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209RnIsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30s'@;
put 'ZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKEZuKXt2YXIgRnI9a3ModGhpcy50aGF0KS5kYXR1bSgpO2llLmNhbGwoRm4sdGhpcy50aGF0LG5ldyBH'@;
put 'WGUoRm4se3NvdXJjZUV2ZW50OnRoaXMuc291cmNlRXZlbnQsdGFyZ2V0Omt0LHR5cGU6Rm4sdHJhbnNmb3JtOnRoaXMudGhhdC5fX3pvb20sZGlzcGF0Y2g6aWV9KSxGcil9fSxrdC53aGVlbERlbHRhPWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgRm4/Rm46TVQoK0ZuKSxrdCk6ZH0sa3QuZmlsdGVyPWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgRm4/Rm46TVQoISFGbiksa3QpOmN9LGt0LnRvdWNoYWJsZT1mdW5jdGlvbihGbil7cmV0dXJuIGFyZ3VtZW50cy5s'@;
put 'ZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIEZuP0ZuOk1UKCEhRm4pLGt0KTpofSxrdC5leHRlbnQ9ZnVuY3Rpb24oRm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBGbj9GbjpNVChbWytGblswXVswXSwrRm5bMF1bMV1dLFsrRm5bMV1bMF0sK0Zu'@;
put 'WzFdWzFdXV0pLGt0KTpsfSxrdC5zY2FsZUV4dGVudD1mdW5jdGlvbihGbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K0ZuWzBdLGZbMV09K0ZuWzFdLGt0KTpbZlswXSxmWzFdXX0sa3QudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0'@;
put 'aD8oX1swXVswXT0rRm5bMF1bMF0sX1sxXVswXT0rRm5bMV1bMF0sX1swXVsxXT0rRm5bMF1bMV0sX1sxXVsxXT0rRm5bMV1bMV0sa3QpOltbX1swXVswXSxfWzBdWzFdXSxbX1sxXVswXSxfWzFdWzFdXV19LGt0LmNvbnN0cmFpbj1mdW5jdGlvbihGbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n'@;
put 'dGg/KGE9Rm4sa3QpOmF9LGt0LmR1cmF0aW9uPWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0rRm4sa3QpOlR9LGt0LmludGVycG9sYXRlPWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVz1GbixrdCk6V30sa3Qub249ZnVuY3Rpb24oKXt2YXIg'@;
put 'Rm49aWUub24uYXBwbHkoaWUsYXJndW1lbnRzKTtyZXR1cm4gRm49PT1pZT9rdDpGbn0sa3QuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihGbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGV0PShGbj0rRm4pKkZuLGt0KTpNYXRoLnNxcnQoZXQpfSxrdC50YXBEaXN0YW5jZT1mdW5jdGlvbihG'@;
put 'bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHl0PStGbixrdCk6eXR9LGt0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZShrVCkub24oInpv'@;
put 'b20iLGZ1bmN0aW9uIGwoXyl7a3MoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLF8udHJhbnNmb3JtKSxjLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPWtzKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImci'@;
put 'KSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fEdVLmNhbGwodGhpcyxmKSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1FVChkLm5vZGUoKSksdGhpc31mdW5jdGlvbiBXVShjKXt2YXIgbD10aGlzLl90cmFuc2xhdGlvbixhPXRoaXMuX3NjYWxlLGQ9Yy5kYXR1bSgpLnRyYW5zbGF0'@;
put 'aW9uLGg9Yy5kYXR1bSgpLnNjYWxlLGY9RVQodGhpcy5fem9vbVNlbGVjdGlvbi5ub2RlKCkpO3JldHVybiBsJiYoZj0oZj1mLnNjYWxlKDEvYSkpLnRyYW5zbGF0ZSgtbC54LC1sLnkpKSwoZj1mLnRyYW5zbGF0ZShkLngsZC55KSkuc2NhbGUoaCl9ZnVuY3Rpb24gR1UoYyl7dGhpcy5fem9v'@;
put 'bUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLFdVLmNhbGwodGhpcyxjKSksdGhpcy5fdHJhbnNsYXRpb249Yy5kYXR1bSgpLnRyYW5zbGF0aW9uLHRoaXMuX3NjYWxlPWMuZGF0dW0oKS5zY2FsZSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT14VC50cmFuc2xhdGUoYy5k'@;
put 'YXR1bSgpLnRyYW5zbGF0aW9uLngsYy5kYXR1bSgpLnRyYW5zbGF0aW9uLnkpLnNjYWxlKGMuZGF0dW0oKS5zY2FsZSl9ZnVuY3Rpb24gaEplKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgYT1jLm1hcChmdW5jdGlvbihkKXtyZXR1cm4ga1QoW2RbMF1bMF0sZFswXVsxXV0sW2RbMV1b'@;
put 'MF0sZFsxXVsxXV0pfSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiBkPDE/Ik0iK2EubWFwKGZ1bmN0aW9uKGgpe3JldHVybiBoKGQpfSkuam9pbigiTCIpOmx9fX1mdW5jdGlvbiBYYWUoYyl7cmV0dXJuImVkZ2UiPT1jLmF0dHJpYnV0ZXMuY2xhc3N8fCJhIj09Yy50YWcmJiJnIj09Yy5w'@;
put 'YXJlbnQudGFnJiYiZWRnZSI9PWMucGFyZW50LnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzfWZ1bmN0aW9uIEphZShjKXtyZXR1cm4gYy5wYXJlbnQmJlhhZShjLnBhcmVudCl9ZnVuY3Rpb24gUWFlKGMpe3ZhciBsPXRoaXMuX3RyYW5zaXRpb24sYT10aGlzLl9vcHRpb25zLmZhZGUmJm51bGwh'@;
put 'PWwsZD10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaD10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzLGY9dGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zLF89dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyYmbnVsbCE9bCxUPXRoaXMuX2F0dHJpYnV0ZXIsVz10'@;
put 'aGlzO3ZhciB3ZT10aGlzLl9zZWxlY3Rpb247aWYobnVsbCE9bCl7dmFyIEVlPXRoaXMuX2pvYnM7aWYoVy5fYWN0aXZlKXJldHVybiBFZS5wdXNoKG51bGwpLHRoaXM7d2UudHJhbnNpdGlvbihsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oImVuZCIsZnVuY3Rpb24oKXtXLl9hY3Rp'@;
put 'dmU9ITEsMCE9RWUubGVuZ3RoJiYoRWUuc2hpZnQoKSxXLnJlbmRlcigpKX0pLHRoaXMuX2FjdGl2ZT0hMH1udWxsIT1sJiZ3ZS50cmFuc2l0aW9uKGwpLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtXLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uU3RhcnQiLFcpfSkub24oImVuZCIsZnVuY3Rp'@;
put 'b24oKXtXLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uRW5kIixXKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Vy5fZGlzcGF0Y2guY2FsbCgicmVzdG9yZUVuZCIsVyksVy5fZGlzcGF0Y2guY2FsbCgiZW5kIixXKSxjJiZjLmNhbGwoVyl9KTt2'@;
put 'YXIgWmU9dGhpcy5fZGF0YSxvdD13ZS5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoW1plXSxmdW5jdGlvbihldCl7cmV0dXJuIGV0LmtleX0pO3JldHVybiBvdD1vdC5lbnRlcigpLmFwcGVuZCgic3ZnIikubWVyZ2Uob3QpLGZ1bmN0aW9uIGdlKGV0KXt2YXIgeXQ9a3ModGhpcyk7aWYoInN2ZyI9'@;
put 'PWV0LnRhZyl7dmFyIGt0PVcuX29wdGlvbnM7aWYobnVsbCE9a3Qud2lkdGh8fG51bGwhPWt0LmhlaWdodCl7dmFyIFN0PWt0LndpZHRoLFF0PWt0LmhlaWdodDtudWxsPT1TdD9TdD00KmV0LmF0dHJpYnV0ZXMud2lkdGgucmVwbGFjZSgicHQiLCIiKS8zOih5dC5hdHRyKCJ3aWR0aCIsU3Qp'@;
put 'LGV0LmF0dHJpYnV0ZXMud2lkdGg9U3QpLG51bGw9PVF0P1F0PTQqZXQuYXR0cmlidXRlcy5oZWlnaHQucmVwbGFjZSgicHQiLCIiKS8zOih5dC5hdHRyKCJoZWlnaHQiLFF0KSxldC5hdHRyaWJ1dGVzLmhlaWdodD1RdCksa3QuZml0fHwoeXQuYXR0cigidmlld0JveCIsYDAgMCAkezMqU3Qv'@;
put 'NC9rdC5zY2FsZX0gJHszKlF0LzQva3Quc2NhbGV9YCksZXQuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHszKlN0LzQva3Quc2NhbGV9ICR7MypRdC80L2t0LnNjYWxlfWApfTEhPWt0LnNjYWxlJiYoa3QuZml0fHxudWxsPT1rdC53aWR0aCYmbnVsbD09a3QuaGVpZ2h0KSYmKFN0PWV0LmF0'@;
put 'dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzJdLFF0PWV0LmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzNdLHl0LmF0dHIoInZpZXdCb3giLGAwIDAgJHtTdC9rdC5zY2FsZX0gJHtRdC9rdC5zY2FsZX1gKSxldC5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAke1N0L2t0LnNjYWxl'@;
put 'fSAke1F0L2t0LnNjYWxlfWApfVQmJnl0LmVhY2goVCk7dmFyIHJuPWV0LnRhZyx2bj1ldC5hdHRyaWJ1dGVzLE5uPXl0Lm5vZGUoKS5hdHRyaWJ1dGVzO2lmKE5uKWZvcih2YXIgY3I9MDtjcjxObi5sZW5ndGg7Y3IrKyl7dmFyIERyPU5uW2NyXSxfaT1Eci5uYW1lO2lmKCJ4bWxucyIhPV9p'@;
put 'LnNwbGl0KCI6IilbMF0mJkRyLm5hbWVzcGFjZVVSSSl7dmFyIGxpPURyLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO19pPWxpW2xpLmxlbmd0aC0xXSsiOiIrX2l9X2kgaW4gdm58fCh2bltfaV09bnVsbCl9dmFyIEVpPSExLFpyPSExO2lmKGgmJmwpe2lmKCgicG9seWdvbiI9PXRoaXMubm9k'@;
put 'ZU5hbWV8fCJlbGxpcHNlIj09dGhpcy5ub2RlTmFtZSkmJmV0LmFsdGVybmF0aXZlT2xkJiYoWnI9ITApLCgicG9seWdvbiI9PXJufHwiZWxsaXBzZSI9PXJuKSYmZXQuYWx0ZXJuYXRpdmVOZXcmJihFaT0hMCksInBvbHlnb24iPT10aGlzLm5vZGVOYW1lJiYicG9seWdvbiI9PXJuJiZldC5h'@;
put 'bHRlcm5hdGl2ZU9sZCl7dmFyIEZuPUdhZSh5dCk7aWYoIWYpe3ZhciBRbj1Gbi5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpLmxlbmd0aDsoTXI9ZXQuYXR0cmlidXRlcy5wb2ludHMpLnNwbGl0KCIgIikubGVuZ3RoPT1RbiYmKEVpPSExLFpyPSExKX19aWYoWnIpe3ZhciBPdD0kYWUo'@;
put 'eXQsZXQuYWx0ZXJuYXRpdmVPbGQpO090LmRhdGEoW2V0XSxmdW5jdGlvbigpe3JldHVybiBldC5rZXl9KSx5dD1PdH1FaSYmKHJuPSJwYXRoIix2bj1ldC5hbHRlcm5hdGl2ZU5ldy5hdHRyaWJ1dGVzKX12YXIgRW49eXQ7aWYobCYmKEVuPUVuLnRyYW5zaXRpb24obCksYSYmRW4uZmlsdGVy'@;
put 'KGZ1bmN0aW9uKElpKXtyZXR1cm4iIyI9PUlpLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMSksRW4uZmlsdGVyKGZ1bmN0aW9uKElpKXtyZXR1cm4iIyI9PUlpLnRhZ1swXT9udWxsOnRoaXN9KS5vbigiZW5kIixmdW5jdGlvbihJaSl7a3ModGhpcykuYXR0cigic3R5bGUi'@;
put 'LElpJiZJaS5hdHRyaWJ1dGVzJiZJaS5hdHRyaWJ1dGVzLnN0eWxlfHxudWxsKX0pKSxfJiYicGF0aCI9PXJuJiZldC5vZmZzZXQpe3ZhciBKbj1ldC50b3RhbExlbmd0aDt5dC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixKbisiICIrSm4pLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixKbiku'@;
put 'YXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZXQub2Zmc2V0LngrIiwiK2V0Lm9mZnNldC55KyIpIiksdm5bInN0cm9rZS1kYXNob2Zmc2V0Il09MCx2bi50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIixFbi5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsdm5bInN0cm9rZS1kYXNob2Zm'@;
put 'c2V0Il0pLmF0dHIoInRyYW5zZm9ybSIsdm4udHJhbnNmb3JtKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7a3ModGhpcykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXtrcyh0aGlzKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsbnVsbCkuYXR0cigic3Ryb2tl'@;
put 'LWRhc2hhcnJheSIsbnVsbCkuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfWlmKF8mJiJwb2x5Z29uIj09cm4mJkphZShldCkmJmV0Lm9mZnNldCYmInBhdGgiPT1ldC5wYXJlbnQuY2hpbGRyZW5bM10udGFnKXt2YXIgT3I9a3MoeXQubm9kZSgpLnBhcmVudE5vZGUucXVlcnlTZWxlY3Rvcigi'@;
put 'cGF0aCIpKSwkcj1Pci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCgwKSxZcj1Pci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChldC50b3RhbExlbmd0aCksTnI9T3Iubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoZXQudG90YWxMZW5ndGgtMSksUmk9MTgwKk1hdGguYXRhbjIoWXIueS1Oci55LFly'@;
put 'LngtTnIueCkvTWF0aC5QSSxYbz0kci54LVlyLngrZXQub2Zmc2V0LngsR289JHIueS1Zci55K2V0Lm9mZnNldC55O3l0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1hvKyIsIitHbysiKSIpLEVuLmF0dHJUd2VlbigidHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlv'@;
put 'bihJaSl7dmFyIFFzPU9yLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKGV0LnRvdGFsTGVuZ3RoKklpKSxsYT1Pci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChldC50b3RhbExlbmd0aCpJaSsxKSxGcz0xODAqTWF0aC5hdGFuMihsYS55LVFzLnksbGEueC1Rcy54KS9NYXRoLlBJLVJpO3JldHVy'@;
put 'biJ0cmFuc2xhdGUoIisoWG89UXMueC1Zci54K2V0Lm9mZnNldC54KigxLUlpKSkrIiwiKyhHbz1Rcy55LVlyLnkrZXQub2Zmc2V0LnkqKDEtSWkpKSsiKSByb3RhdGUoIitGcysiICIrWXIueCsiICIrWXIueSsiKSJ9fSkub24oInN0YXJ0IixmdW5jdGlvbigpe2tzKHRoaXMpLnN0eWxlKCJv'@;
put 'cGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7a3ModGhpcykuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfXZhciBKcz1kJiZsJiYicGF0aCI9PXJuJiZudWxsIT15dC5hdHRyKCJkIik7Zm9yKHZhciBnYSBvZiBPYmplY3Qua2V5cyh2bikpe3ZhciB1bz12bltnYV07aWYoSnMm'@;
put 'JiJkIj09Z2Epe3ZhciBNcjsoTXI9KGV0LmFsdGVybmF0aXZlT2xkfHxldCkucG9pbnRzKSYmRW4uYXR0clR3ZWVuKCJkIixoSmUoTXIsdW8pKX1lbHNle2lmKCJ0cmFuc2Zvcm0iPT1nYSYmZXQudHJhbnNsYXRpb24paWYobCl7dmFyIEF0PUVuLm9uKCJlbmQiKTtFbi5vbigic3RhcnQiLGZ1'@;
put 'bmN0aW9uKCl7Vy5fem9vbUJlaGF2aW9yJiZFbi50d2VlbigiYXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIElpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKFFzKXtJaS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsRWFlKEVUKFcuX3pvb21TZWxlY3Rpb24ubm9kZSgpKS50b1N0cmluZygp'@;
put 'LFdVLmNhbGwoVyx5dCkudG9TdHJpbmcoKSkoUXMpKX19KX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7QXQuY2FsbCh0aGlzKSxXLl96b29tQmVoYXZpb3ImJkdVLmNhbGwoVyx5dCl9KX1lbHNlIFcuX3pvb21CZWhhdmlvciYmKEdVLmNhbGwoVyx5dCksdW89V1UuY2FsbChXLHl0KS50b1N0cmlu'@;
put 'ZygpKTtFbi5hdHRyKGdhLHVvKX19RWkmJkVuLm9uKCJlbmQiLGZ1bmN0aW9uKElpLFFzLGxhKXskYWUoT3Q9a3ModGhpcyksSWkpLmRhdGEoW0lpXSxmdW5jdGlvbigpe3JldHVybiBJaS5rZXl9KX0pLGV0LnRleHQmJkVuLnRleHQoZXQudGV4dCksZnVuY3Rpb24gaWUoZXQpe3ZhciB5dD1l'@;
put 'dC5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gZXQubm9kZSgpLmNoaWxkTm9kZXN9KSxrdD0oeXQ9eXQuZGF0YShmdW5jdGlvbihybil7cmV0dXJuIHJuLmNoaWxkcmVufSxmdW5jdGlvbihybil7cmV0dXJuIHJuLmtleX0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihybil7dmFyIHZu'@;
put 'PVVVKHJuKTtyZXR1cm4iI3RleHQiPT1ybi50YWcmJmEmJih2bi5ub2RlVmFsdWU9cm4udGV4dCksdm59KTsoYXx8XyYmWGFlKGV0LmRhdHVtKCkpKSYma3QuZmlsdGVyKGZ1bmN0aW9uKHJuKXtyZXR1cm4iIyI9PXJuLnRhZ1swXT9udWxsOnRoaXN9KS5lYWNoKGZ1bmN0aW9uKHJuKXt2YXIg'@;
put 'dm49a3ModGhpcyk7Zm9yKHZhciBObiBvZiBPYmplY3Qua2V5cyhybi5hdHRyaWJ1dGVzKSl2bi5hdHRyKE5uLHJuLmF0dHJpYnV0ZXNbTm5dKX0pLmZpbHRlcihmdW5jdGlvbihybil7cmV0dXJuInN2ZyI9PXJuLnRhZ3x8ImciPT1ybi50YWc/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHki'@;
put 'LDApO3ZhciBRdD15dC5leGl0KCk7VCYmUXQuZWFjaChUKSxsJiYoUXQ9UXQudHJhbnNpdGlvbihsKSxhJiZRdC5maWx0ZXIoZnVuY3Rpb24ocm4pe3JldHVybiIjIj09cm4udGFnWzBdP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKSksUXQ9UXQucmVtb3ZlKCksKHl0PWt0Lm1lcmdl'@;
put 'KHl0KSkuZWFjaChnZSl9KHl0KX0uY2FsbChvdC5ub2RlKCksWmUpLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvciYmS2FlLmNhbGwodGhpcyksVy5fZGlzcGF0Y2guY2FsbCgicmVuZGVyRW5kIixXKSxudWxsPT1sJiYodGhpcy5fZGlzcGF0Y2guY2FsbCgiZW5kIix0'@;
put 'aGlzKSxjJiZjLmNhbGwodGhpcykpLHRoaXN9RVQucHJvdG90eXBlPWkzLnByb3RvdHlwZTt2YXIgYkplPUFycmF5QnVmZmVyLFFsPVVpbnQ4QXJyYXksQVQ9VWludDE2QXJyYXkseUplPUludDE2QXJyYXksVFQ9SW50MzJBcnJheSwkVT1mdW5jdGlvbihjLGwsYSl7aWYoUWwucHJvdG90eXBl'@;
put 'LnNsaWNlKXJldHVybiBRbC5wcm90b3R5cGUuc2xpY2UuY2FsbChjLGwsYSk7KG51bGw9PWx8fGw8MCkmJihsPTApLChudWxsPT1hfHxhPmMubGVuZ3RoKSYmKGE9Yy5sZW5ndGgpO3ZhciBkPW5ldyBRbChhLWwpO3JldHVybiBkLnNldChjLnN1YmFycmF5KGwsYSkpLGR9LGJ3PWZ1bmN0aW9u'@;
put 'KGMsbCxhLGQpe2lmKFFsLnByb3RvdHlwZS5maWxsKXJldHVybiBRbC5wcm90b3R5cGUuZmlsbC5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOysrYSljW2FdPWw7cmV0dXJuIGN9LHdKZT1mdW5j'@;
put 'dGlvbihjLGwsYSxkKXtpZihRbC5wcm90b3R5cGUuY29weVdpdGhpbilyZXR1cm4gUWwucHJvdG90eXBlLmNvcHlXaXRoaW4uY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDspY1tsKytdPWNbYSsr'@;
put 'XX0sQ0plPVsiaW52YWxpZCB6c3RkIGRhdGEiLCJ3aW5kb3cgc2l6ZSB0b28gbGFyZ2UgKD4yMDQ2TUIpIiwiaW52YWxpZCBibG9jayB0eXBlIiwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoIiwibWF0Y2ggZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwidW5leHBlY3RlZCBFT0YiXSxnYz1mdW5jdGlv'@;
put 'bihjLGwsYSl7dmFyIGQ9bmV3IEVycm9yKGx8fENKZVtjXSk7aWYoZC5jb2RlPWMsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGQsZ2MpLCFhKXRocm93IGQ7cmV0dXJuIGR9LGVsZT1mdW5jdGlvbihjLGwsYSl7Zm9yKHZhciBkPTAsaD0wO2Q8YTsr'@;
put 'K2QpaHw9Y1tsKytdPDwoZDw8Myk7cmV0dXJuIGh9LFNKZT1mdW5jdGlvbihjLGwpe3ZhciBhLGg9Y1swXXxjWzFdPDw4fGNbMl08PDE2O2lmKDMxMjY1Njg9PWgmJjI1Mz09Y1szXSl7dmFyIGY9Y1s0XSxfPWY+PjUmMSxUPWY+PjImMSxXPTMmZixpZT1mPj42OzgmZiYmZ2MoMCk7dmFyIGdl'@;
put 'PTYtXyx3ZT0zPT1XPzQ6VyxFZT1lbGUoYyxnZSx3ZSksWmU9aWU/MTw8aWU6XyxvdD1lbGUoYyxnZSs9d2UsWmUpKygxPT1pZSYmMjU2KSxldD1vdDtpZighXyl7dmFyIHl0PTE8PDEwKyhjWzVdPj4zKTtldD15dCsoeXQ+PjMpKig3JmNbNV0pfWV0PjIxNDUzODY0OTYmJmdjKDEpO3ZhciBr'@;
put 'dD1uZXcgUWwoKDE9PWw/b3R8fGV0Omw/MDpldCkrMTIpO3JldHVybiBrdFswXT0xLGt0WzRdPTQsa3RbOF09OCx7YjpnZStaZSx5OjAsbDowLGQ6RWUsdzpsJiYxIT1sP2w6a3Quc3ViYXJyYXkoMTIpLGU6ZXQsbzpuZXcgVFQoa3QuYnVmZmVyLDAsMyksdTpvdCxjOlQsbTpNYXRoLm1pbigx'@;
put 'MzEwNzIsZXQpfX1pZigyNTQ4MTg5Mz09KGg+PjR8Y1szXTw8MjApKXJldHVybiA4KygoKGE9YylbNF18YVs1XTw8OHxhWzZdPDwxNnxhWzddPDwyNCk+Pj4wKTtnYygwKX0sSmc9ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPTA7MTw8bDw9YzsrK2wpO3JldHVybiBsLTF9LHl3PWZ1bmN0aW9uKGMs'@;
put 'bCxhKXt2YXIgZD00KyhsPDwzKSxoPTUrKDE1JmNbbF0pO2g+YSYmZ2MoMyk7Zm9yKHZhciBmPTE8PGgsXz1mLFQ9LTEsVz0tMSxpZT0tMSxnZT1mLHdlPW5ldyBiSmUoNTEyKyhmPDwyKSksRWU9bmV3IHlKZSh3ZSwwLDI1NiksWmU9bmV3IEFUKHdlLDAsMjU2KSxvdD1uZXcgQVQod2UsNTEy'@;
put 'LGYpLGV0PTUxMisoZjw8MSkseXQ9bmV3IFFsKHdlLGV0LGYpLGt0PW5ldyBRbCh3ZSxldCtmKTtUPDI1NSYmXz4wOyl7dmFyIFN0PUpnKF8rMSksUXQ9ZD4+Myxybj0oMTw8U3QrMSktMSx2bj0oY1tRdF18Y1tRdCsxXTw8OHxjW1F0KzJdPDwxNik+Pig3JmQpJnJuLE5uPSgxPDxTdCktMSxj'@;
put 'cj1ybi1fLTEsRHI9dm4mTm47aWYoRHI8Y3I/KGQrPVN0LHZuPURyKTooZCs9U3QrMSx2bj5ObiYmKHZuLT1jcikpLEVlWysrVF09LS12biwtMT09dm4/KF8rPXZuLHl0Wy0tZ2VdPVQpOl8tPXZuLCF2bilkb3t2YXIgX2k9ZD4+MztXPShjW19pXXxjW19pKzFdPDw4KT4+KDcmZCkmMyxkKz0y'@;
put 'LFQrPVd9d2hpbGUoMz09Vyl9KFQ+MjU1fHxfKSYmZ2MoMCk7Zm9yKHZhciBsaT0wLG1yPShmPj4xKSsoZj4+MykrMyxFaT1mLTEsWnI9MDtacjw9VDsrK1pyKXt2YXIgRm49RWVbWnJdO2lmKEZuPDEpWmVbWnJdPS1GbjtlbHNlIGZvcihpZT0wO2llPEZuOysraWUpe3l0W2xpXT1acjtkb3ts'@;
put 'aT1saSttciZFaX13aGlsZShsaT49Z2UpfX1mb3IobGkmJmdjKDApLGllPTA7aWU8ZjsrK2llKXt2YXIgRnI9WmVbeXRbaWVdXSsrLFFuPWt0W2llXT1oLUpnKEZyKTtvdFtpZV09KEZyPDxRbiktZn1yZXR1cm5bZCs3Pj4zLHtiOmgsczp5dCxuOmt0LHQ6b3R9XX0sTUplPXl3KG5ldyBRbChb'@;
put 'ODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSwwLDYpWzFdLHhKZT15dyhuZXcgUWwoWzMzLDIwLDE5NiwyNCw5OSwxNDAsMzMsMTMyLDE2LDY2LDgsMzMsMTMyLDE2LDY2LDgsMzMsNjgsNjgsNjgsNjgsNjgsNjgsNjgsNjgs'@;
put 'MzYsOV0pLDAsNilbMV0sRUplPXl3KG5ldyBRbChbMzIsMTMyLDE2LDY2LDEwMiw3MCw2OCw2OCw2OCw2OCwzNiw3MywyXSksMCw1KVsxXSx0bGU9ZnVuY3Rpb24oYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGgsZD1uZXcgVFQoYSksaD0wO2g8YTsrK2gpZFtoXT1sLGwrPTE8PGNbaF07cmV0dXJu'@;
put 'IGR9LHFVPW5ldyBRbChuZXcgVFQoWzAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTM0Njc4MDIwLDIwMjA1MDA1NywyNjk0MjIwOTNdKS5idWZmZXIsMCwzNiksa0plPXRsZShxVSwwKSxLVT1uZXcgUWwobmV3IFRUKFswLDAsMCwwLDAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5'@;
put 'MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1MyksQUplPXRsZShLVSwzKSx3dz1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9Yy5sZW5ndGgsaD1sLmxlbmd0aCxmPWNbZC0xXSxfPSgxPDxhLmIpLTEsVD0tYS5iO2Z8fGdjKDApO2Zvcih2YXIgVz0wLGllPWEuYixnZT0oZDw8'@;
put 'MyktOCtKZyhmKS1pZSx3ZT0tMTtnZT5UJiZ3ZTxoOyl7dmFyIEVlPWdlPj4zO2xbKyt3ZV09YS5zW1c9KFc8PGllfChjW0VlXXxjW0VlKzFdPDw4fGNbRWUrMl08PDE2KT4+KDcmZ2UpKSZfXSxnZS09aWU9YS5uW1ddfWdlPT1UJiZ3ZSsxPT1ofHxnYygwKX0sVEplPWZ1bmN0aW9uKGMsbCxh'@;
put 'KXt2YXIgZD02LGg9bC5sZW5ndGgrMz4+MixmPWg8PDEsXz1oK2Y7d3coYy5zdWJhcnJheShkLGQrPWNbMF18Y1sxXTw8OCksbC5zdWJhcnJheSgwLGgpLGEpLHd3KGMuc3ViYXJyYXkoZCxkKz1jWzJdfGNbM108PDgpLGwuc3ViYXJyYXkoaCxmKSxhKSx3dyhjLnN1YmFycmF5KGQsZCs9Y1s0'@;
put 'XXxjWzVdPDw4KSxsLnN1YmFycmF5KGYsXyksYSksd3coYy5zdWJhcnJheShkKSxsLnN1YmFycmF5KF8pLGEpfSxESmU9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSxfPWY+PjEmMztsLmw9MSZmO3ZhciBUPWY+PjN8Y1toKzFdPDw1fGNbaCsyXTw8MTMsVz0oaCs9MykrVDtp'@;
put 'ZigxPT1fKXJldHVybiBoPj1jLmxlbmd0aD92b2lkIDA6KGwuYj1oKzEsYT8oYncoYSxjW2hdLGwueSxsLnkrPVQpLGEpOmJ3KG5ldyBRbChUKSxjW2hdKSk7aWYoIShXPmMubGVuZ3RoKSl7aWYoMD09XylyZXR1cm4gbC5iPVcsYT8oYS5zZXQoYy5zdWJhcnJheShoLFcpLGwueSksbC55Kz1U'@;
put 'LGEpOiRVKGMsaCxXKTtpZigyPT1fKXt2YXIgaWU9Y1toXSxnZT0zJmllLHdlPWllPj4yJjMsRWU9aWU+PjQsWmU9MCxvdD0wO2dlPDI/MSZ3ZT9FZXw9Y1srK2hdPDw0fCgyJndlJiZjWysraF08PDEyKTpFZT1pZT4+Mzoob3Q9d2Usd2U8Mj8oRWV8PSg2MyZjWysraF0pPDw0LFplPWNbaF0+'@;
put 'PjZ8Y1srK2hdPDwyKToyPT13ZT8oRWV8PWNbKytoXTw8NHwoMyZjWysraF0pPDwxMixaZT1jW2hdPj4yfGNbKytoXTw8Nik6KEVlfD1jWysraF08PDR8KDYzJmNbKytoXSk8PDEyLFplPWNbaF0+PjZ8Y1srK2hdPDwyfGNbKytoXTw8MTApKSwrK2g7dmFyIGV0PWE/YS5zdWJhcnJheShsLnks'@;
put 'bC55K2wubSk6bmV3IFFsKGwubSkseXQ9ZXQubGVuZ3RoLUVlO2lmKDA9PWdlKWV0LnNldChjLnN1YmFycmF5KGgsaCs9RWUpLHl0KTtlbHNlIGlmKDE9PWdlKWJ3KGV0LGNbaCsrXSx5dCk7ZWxzZXt2YXIga3Q9bC5oO2lmKDI9PWdlKXt2YXIgU3Q9ZnVuY3Rpb24oZ2EsdW8pe3ZhciBBdD0w'@;
put 'LElpPS0xLFFzPW5ldyBRbCgyOTIpLGxhPWdhW3VvXSxGcz1Rcy5zdWJhcnJheSgwLDI1NiksZWM9UXMuc3ViYXJyYXkoMjU2LDI2OCksQ2E9bmV3IEFUKFFzLmJ1ZmZlciwyNjgpO2lmKGxhPDEyOCl7dmFyIFJoPXl3KGdhLHVvKzEsNiksRGw9UmhbMV0seDI9UmhbMF08PDMsdTQ9Z2FbdW8r'@;
put 'PWxhXTt1NHx8Z2MoMCk7Zm9yKHZhciBPaD0wLENkPTAsJGM9RGwuYixTZD0kYyxKdT0oKyt1bzw8MyktOCtKZyh1NCk7ISgoSnUtPSRjKTx4Mik7KXt2YXIgTTE9SnU+PjM7aWYoRnNbKytJaV09RGwuc1tPaCs9KGdhW00xXXxnYVtNMSsxXTw8OCk+Pig3Jkp1KSYoMTw8JGMpLTFdLChKdS09'@;
put 'U2QpPHgyKWJyZWFrO0NkKz0oZ2FbTTE9SnU+PjNdfGdhW00xKzFdPDw4KT4+KDcmSnUpJigxPDxTZCktMSxGc1srK0lpXT1EbC5zW0NkXSwkYz1EbC5uW09oXSxPaD1EbC50W09oXSxTZD1EbC5uW0NkXSxDZD1EbC50W0NkXX0rK0lpPjI1NSYmZ2MoMCl9ZWxzZXtmb3IoSWk9bGEtMTI3O0F0'@;
put 'PElpO0F0Kz0yKXt2YXIgTXU9Z2FbKyt1b107RnNbQXRdPU11Pj40LEZzW0F0KzFdPTE1Jk11fSsrdW99dmFyIGF1PTA7Zm9yKEF0PTA7QXQ8SWk7KytBdCkoZDQ9RnNbQXRdKT4xMSYmZ2MoMCksYXUrPWQ0JiYxPDxkNC0xO3ZhciB4MT1KZyhhdSkrMSxFMj0xPDx4MSwkNz1FMi1hdTtmb3Io'@;
put 'JDcmJDctMSYmZ2MoMCksRnNbSWkrK109SmcoJDcpKzEsQXQ9MDtBdDxJaTsrK0F0KXt2YXIgZDQ9RnNbQXRdOysrZWNbRnNbQXRdPWQ0JiZ4MSsxLWQ0XX12YXIgU3c9bmV3IFFsKEUyPDwxKSxlbT1Tdy5zdWJhcnJheSgwLEUyKSxNdz1Tdy5zdWJhcnJheShFMik7Zm9yKENhW3gxXT0wLEF0'@;
put 'PXgxO0F0PjA7LS1BdCl7dmFyIHh3PUNhW0F0XTtidyhNdyxBdCx4dyxDYVtBdC0xXT14dytlY1tBdF0qKDE8PHgxLUF0KSl9Zm9yKENhWzBdIT1FMiYmZ2MoMCksQXQ9MDtBdDxJaTsrK0F0KXt2YXIgdG09RnNbQXRdO2lmKHRtKXt2YXIgRXc9Q2FbdG1dO2J3KGVtLEF0LEV3LENhW3RtXT1F'@;
put 'dysoMTw8eDEtdG0pKX19cmV0dXJuW3VvLHtuOk13LGI6eDEsczplbX1dfShjLGgpO1plKz1oLShoPVN0WzBdKSxsLmg9a3Q9U3RbMV19ZWxzZSBrdHx8Z2MoMCk7KG90P1RKZTp3dykoYy5zdWJhcnJheShoLGgrPVplKSxldC5zdWJhcnJheSh5dCksa3QpfXZhciBRdD1jW2grK107aWYoUXQp'@;
put 'ezI1NT09UXQ/UXQ9MzI1MTIrKGNbaCsrXXxjW2grK108PDgpOlF0PjEyNyYmKFF0PVF0LTEyODw8OHxjW2grK10pO3ZhciBybj1jW2grK107MyZybiYmZ2MoMCk7Zm9yKHZhciB2bj1beEplLEVKZSxNSmVdLE5uPTI7Tm4+LTE7LS1Obil7dmFyIGNyPXJuPj4yKyhObjw8MSkmMztpZigxPT1j'@;
put 'cil7dmFyIERyPW5ldyBRbChbMCwwLGNbaCsrXV0pO3ZuW05uXT17czpEci5zdWJhcnJheSgyLDMpLG46RHIuc3ViYXJyYXkoMCwxKSx0Om5ldyBBVChEci5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09Y3I/KGg9KGQ9eXcoYyxoLDktKDEmTm4pKSlbMF0sdm5bTm5dPWRbMV0pOjM9PWNyJiYo'@;
put 'bC50fHxnYygwKSx2bltObl09bC50W05uXSl9dmFyIF9pPWwudD12bixsaT1faVswXSxtcj1faVsxXSxFaT1faVsyXSxacj1jW1ctMV07WnJ8fGdjKDApO3ZhciBGbj0oVzw8MyktOCtKZyhaciktRWkuYixGcj1Gbj4+MyxRbj0wLE1yPShjW0ZyXXxjW0ZyKzFdPDw4KT4+KDcmRm4pJigxPDxF'@;
put 'aS5iKS0xLF9yPShjW0ZyPShGbi09bXIuYik+PjNdfGNbRnIrMV08PDgpPj4oNyZGbikmKDE8PG1yLmIpLTEsdnQ9KGNbRnI9KEZuLT1saS5iKT4+M118Y1tGcisxXTw8OCk+Pig3JkZuKSYoMTw8bGkuYiktMTtmb3IoKytRdDstLVF0Oyl7dmFyIE90PUVpLnNbTXJdLGNuPUVpLm5bTXJdLEVu'@;
put 'PWxpLnNbdnRdLE9uPWxpLm5bdnRdLEpuPW1yLnNbX3JdLFByPW1yLm5bX3JdLE9yPTE8PEpuLCRyPU9yKygoY1tGcj0oRm4tPUpuKT4+M118Y1tGcisxXTw8OHxjW0ZyKzJdPDwxNnxjW0ZyKzNdPDwyNCk+Pj4oNyZGbikmT3ItMSk7RnI9KEZuLT1LVVtFbl0pPj4zO3ZhciBZcj1BSmVbRW5d'@;
put 'KygoY1tGcl18Y1tGcisxXTw8OHxjW0ZyKzJdPDwxNik+Pig3JkZuKSYoMTw8S1VbRW5dKS0xKTtGcj0oRm4tPXFVW090XSk+PjM7dmFyIE5yPWtKZVtPdF0rKChjW0ZyXXxjW0ZyKzFdPDw4fGNbRnIrMl08PDE2KT4+KDcmRm4pJigxPDxxVVtPdF0pLTEpO2lmKEZyPShGbi09Y24pPj4zLE1y'@;
put 'PUVpLnRbTXJdKygoY1tGcl18Y1tGcisxXTw8OCk+Pig3JkZuKSYoMTw8Y24pLTEpLEZyPShGbi09T24pPj4zLHZ0PWxpLnRbdnRdKygoY1tGcl18Y1tGcisxXTw8OCk+Pig3JkZuKSYoMTw8T24pLTEpLEZyPShGbi09UHIpPj4zLF9yPW1yLnRbX3JdKygoY1tGcl18Y1tGcisxXTw8OCk+Pig3'@;
put 'JkZuKSYoMTw8UHIpLTEpLCRyPjMpbC5vWzJdPWwub1sxXSxsLm9bMV09bC5vWzBdLGwub1swXT0kci09MztlbHNle3ZhciBSaT0kci0oMCE9TnIpO1JpPygkcj0zPT1SaT9sLm9bMF0tMTpsLm9bUmldLFJpPjEmJihsLm9bMl09bC5vWzFdKSxsLm9bMV09bC5vWzBdLGwub1swXT0kcik6JHI9'@;
put 'bC5vWzBdfWZvcihObj0wO05uPE5yOysrTm4pZXRbUW4rTm5dPWV0W3l0K05uXTt5dCs9TnI7dmFyIFhvPShRbis9TnIpLSRyO2lmKFhvPDApe3ZhciBHbz0tWG8sSnM9bC5lK1hvO2ZvcihHbz5ZciYmKEdvPVlyKSxObj0wO05uPEdvOysrTm4pZXRbUW4rTm5dPWwud1tKcytObl07UW4rPUdv'@;
put 'LFlyLT1HbyxYbz0wfWZvcihObj0wO05uPFlyOysrTm4pZXRbUW4rTm5dPWV0W1hvK05uXTtRbis9WXJ9aWYoUW4hPXl0KWZvcig7eXQ8ZXQubGVuZ3RoOylldFtRbisrXT1ldFt5dCsrXTtlbHNlIFFuPWV0Lmxlbmd0aDthP2wueSs9UW46ZXQ9JFUoZXQsMCxRbil9ZWxzZSBpZihhKXtpZihs'@;
put 'LnkrPUVlLHl0KWZvcihObj0wO05uPEVlOysrTm4pZXRbTm5dPWV0W3l0K05uXX1lbHNlIHl0JiYoZXQ9JFUoZXQseXQpKTtyZXR1cm4gbC5iPVcsZXR9Z2MoMil9fTt2YXIgUkplPSh0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiZkb2N1bWVudCxmdW5jdGlv'@;
put 'bihjKXt2YXIgbCxhLGQ9dm9pZCAwIT09KGM9Y3x8e30pP2M6e307ZC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihzdCxndCl7bD1zdCxhPWd0fSk7dmFyIGgsZj1PYmplY3QuYXNzaWduKHt9LGQpLF89Ii4vdGhpcy5wcm9ncmFtIixUPShzdCxndCk9Pnt0aHJvdyBndH0sVz1kLnByaW50'@;
put 'fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGllPWQucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oZCxmKSxmPW51bGwsZC50aGlzUHJvZ3JhbSYmKF89ZC50aGlzUHJvZ3JhbSksZC5xdWl0JiYoVD1kLnF1aXQpLGQud2FzbUJpbmFyeSYmKGg9'@;
put 'ZC53YXNtQmluYXJ5KTt2YXIgZ2Usd2U9ZC5ub0V4aXRSdW50aW1lfHwhMDsib2JqZWN0IiE9dHlwZW9mIFdlYkFzc2VtYmx5JiZFbigibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpO3ZhciBFZT0hMTtmdW5jdGlvbiBaZShzdCxndCl7c3R8fEVuKGd0KX12YXIgb3QsZXQseXQs'@;
put 'a3QsU3QsUXQscm4sdm49dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gTm4oc3QsZ3QsUnQpe2Zvcih2YXIgdG49Z3QrUnQsd249Z3Q7c3Rbd25dJiYhKHduPj10bik7KSsrd247aWYod24tZ3Q+MTYmJnN0LmJ1ZmZlciYmdm4p'@;
put 'cmV0dXJuIHZuLmRlY29kZShzdC5zdWJhcnJheShndCx3bikpO2Zvcih2YXIgc3I9IiI7Z3Q8d247KXt2YXIgbHI9c3RbZ3QrK107aWYoMTI4JmxyKXt2YXIgUnI9NjMmc3RbZ3QrK107aWYoMTkyIT0oMjI0JmxyKSl7dmFyIGdvPTYzJnN0W2d0KytdO2lmKChscj0yMjQ9PSgyNDAmbHIpPygx'@;
put 'NSZscik8PDEyfFJyPDw2fGdvOig3JmxyKTw8MTh8UnI8PDEyfGdvPDw2fDYzJnN0W2d0KytdKTw2NTUzNilzcis9U3RyaW5nLmZyb21DaGFyQ29kZShscik7ZWxzZXt2YXIgTW89bHItNjU1MzY7c3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8TW8+PjEwLDU2MzIwfDEwMjMmTW8pfX1l'@;
put 'bHNlIHNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZscik8PDZ8UnIpfWVsc2Ugc3IrPVN0cmluZy5mcm9tQ2hhckNvZGUobHIpfXJldHVybiBzcn1mdW5jdGlvbiBjcihzdCxndCl7cmV0dXJuIHN0P05uKHl0LHN0LGd0KToiIn1mdW5jdGlvbiBEcihzdCxndCxSdCx0bil7aWYoISh0bj4w'@;
put 'KSlyZXR1cm4gMDtmb3IodmFyIHduPVJ0LHNyPVJ0K3RuLTEsbHI9MDtscjxzdC5sZW5ndGg7Kytscil7dmFyIFJyPXN0LmNoYXJDb2RlQXQobHIpO2lmKFJyPj01NTI5NiYmUnI8PTU3MzQzJiYoUnI9NjU1MzYrKCgxMDIzJlJyKTw8MTApfDEwMjMmc3QuY2hhckNvZGVBdCgrK2xyKSksUnI8'@;
put 'PTEyNyl7aWYoUnQ+PXNyKWJyZWFrO2d0W1J0KytdPVJyfWVsc2UgaWYoUnI8PTIwNDcpe2lmKFJ0KzE+PXNyKWJyZWFrO2d0W1J0KytdPTE5MnxScj4+NixndFtSdCsrXT0xMjh8NjMmUnJ9ZWxzZSBpZihScjw9NjU1MzUpe2lmKFJ0KzI+PXNyKWJyZWFrO2d0W1J0KytdPTIyNHxScj4+MTIs'@;
put 'Z3RbUnQrK109MTI4fFJyPj42JjYzLGd0W1J0KytdPTEyOHw2MyZScn1lbHNle2lmKFJ0KzM+PXNyKWJyZWFrO2d0W1J0KytdPTI0MHxScj4+MTgsZ3RbUnQrK109MTI4fFJyPj4xMiY2MyxndFtSdCsrXT0xMjh8UnI+PjYmNjMsZ3RbUnQrK109MTI4fDYzJlJyfX1yZXR1cm4gZ3RbUnRdPTAs'@;
put 'UnQtd259ZnVuY3Rpb24gX2koc3Qpe2Zvcih2YXIgZ3Q9MCxSdD0wO1J0PHN0Lmxlbmd0aDsrK1J0KXt2YXIgdG49c3QuY2hhckNvZGVBdChSdCk7dG48PTEyNz9ndCsrOnRuPD0yMDQ3P2d0Kz0yOnRuPj01NTI5NiYmdG48PTU3MzQzPyhndCs9NCwrK1J0KTpndCs9M31yZXR1cm4gZ3R9ZnVu'@;
put 'Y3Rpb24gbGkoc3Qpe290PXN0LGQuSEVBUDg9ZXQ9bmV3IEludDhBcnJheShzdCksZC5IRUFQMTY9a3Q9bmV3IEludDE2QXJyYXkoc3QpLGQuSEVBUDMyPVN0PW5ldyBJbnQzMkFycmF5KHN0KSxkLkhFQVBVOD15dD1uZXcgVWludDhBcnJheShzdCksZC5IRUFQVTE2PW5ldyBVaW50MTZBcnJh'@;
put 'eShzdCksZC5IRUFQVTMyPVF0PW5ldyBVaW50MzJBcnJheShzdCksZC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoc3QpLGQuSEVBUEY2ND1ybj1uZXcgRmxvYXQ2NEFycmF5KHN0KX12YXIgbXIsRWksWnIsRm4sRnI9W10sUW49W10sTXI9W10sX3I9MCx2dD1udWxsO2Z1bmN0aW9uIE90KHN0'@;
put 'KXtfcisrLGQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKF9yKX1mdW5jdGlvbiBjbihzdCl7aWYoX3ItLSxkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJmQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhfciksMD09X3ImJnZ0KXt2YXIgZ3Q9dnQ7dnQ9'@;
put 'bnVsbCxndCgpfX1mdW5jdGlvbiBFbihzdCl7ZC5vbkFib3J0JiZkLm9uQWJvcnQoc3QpLGllKHN0PSJBYm9ydGVkKCIrc3QrIikiKSxFZT0hMCxzdCs9Ii4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciBndD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9y'@;
put 'KHN0KTt0aHJvdyBhKGd0KSxndH1mdW5jdGlvbiBPbihzdCl7cmV0dXJuIHN0LnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKX1Pbihtcj0iZ3JhcGh2aXpsaWIud2FzbSIpfHwoRWk9bXIsbXI9ZC5sb2NhdGVGaWxlP2QubG9jYXRlRmlsZShFaSwi'@;
put 'Iik6IiIrRWkpO3ZhciBPcj17MTc1NjY0OihzdCxndCk9Pnt2YXIgUnQ9Y3Ioc3QpLHRuPWNyKGd0KTtBdC5jcmVhdGVQYXRoKCIvIixSaS5kaXJuYW1lKFJ0KSksQXQud3JpdGVGaWxlKFJpLmpvaW4oIi8iLFJ0KSx0bil9fTtmdW5jdGlvbiAkcihzdCl7dGhpcy5uYW1lPSJFeGl0U3RhdHVz'@;
put 'Iix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitzdCsiKSIsdGhpcy5zdGF0dXM9c3R9ZnVuY3Rpb24gWXIoc3Qpe2Zvcig7c3QubGVuZ3RoPjA7KXN0LnNoaWZ0KCkoZCl9ZnVuY3Rpb24gTnIoc3Qpe3RoaXMuZXhjUHRyPXN0LHRoaXMucHRyPXN0LTI0LHRo'@;
put 'aXMuc2V0X3R5cGU9ZnVuY3Rpb24oZ3Qpe1F0W3RoaXMucHRyKzQ+PjJdPWd0fSx0aGlzLmdldF90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIFF0W3RoaXMucHRyKzQ+PjJdfSx0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKGd0KXtRdFt0aGlzLnB0cis4Pj4yXT1ndH0sdGhpcy5nZXRfZGVz'@;
put 'dHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBRdFt0aGlzLnB0cis4Pj4yXX0sdGhpcy5zZXRfcmVmY291bnQ9ZnVuY3Rpb24oZ3Qpe1N0W3RoaXMucHRyPj4yXT1ndH0sdGhpcy5zZXRfY2F1Z2h0PWZ1bmN0aW9uKGd0KXtldFt0aGlzLnB0cisxMj4+MF09Z3Q9Z3Q/MTowfSx0aGlzLmdldF9j'@;
put 'YXVnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9ZXRbdGhpcy5wdHIrMTI+PjBdfSx0aGlzLnNldF9yZXRocm93bj1mdW5jdGlvbihndCl7ZXRbdGhpcy5wdHIrMTM+PjBdPWd0PWd0PzE6MH0sdGhpcy5nZXRfcmV0aHJvd249ZnVuY3Rpb24oKXtyZXR1cm4gMCE9ZXRbdGhpcy5wdHIrMTM+PjBd'@;
put 'fSx0aGlzLmluaXQ9ZnVuY3Rpb24oZ3QsUnQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKGd0KSx0aGlzLnNldF9kZXN0cnVjdG9yKFJ0KSx0aGlzLnNldF9yZWZjb3VudCgwKSx0aGlzLnNldF9jYXVnaHQoITEpLHRoaXMuc2V0X3JldGhyb3duKCExKX0sdGhpcy5h'@;
put 'ZGRfcmVmPWZ1bmN0aW9uKCl7U3RbdGhpcy5wdHI+PjJdPVN0W3RoaXMucHRyPj4yXSsxfSx0aGlzLnJlbGVhc2VfcmVmPWZ1bmN0aW9uKCl7dmFyIGd0PVN0W3RoaXMucHRyPj4yXTtyZXR1cm4gU3RbdGhpcy5wdHI+PjJdPWd0LTEsMT09PWd0fSx0aGlzLnNldF9hZGp1c3RlZF9wdHI9ZnVu'@;
put 'Y3Rpb24oZ3Qpe1F0W3RoaXMucHRyKzE2Pj4yXT1ndH0sdGhpcy5nZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKCl7cmV0dXJuIFF0W3RoaXMucHRyKzE2Pj4yXX0sdGhpcy5nZXRfZXhjZXB0aW9uX3B0cj1mdW5jdGlvbigpe2lmKHRtKHRoaXMuZ2V0X3R5cGUoKSkpcmV0dXJuIFF0W3RoaXMu'@;
put 'ZXhjUHRyPj4yXTt2YXIgZ3Q9dGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7cmV0dXJuIDAhPT1ndD9ndDp0aGlzLmV4Y1B0cn19dmFyIFJpPXtpc0FiczpzdD0+Ii8iPT09c3QuY2hhckF0KDApLHNwbGl0UGF0aDpzdD0+L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwu'@;
put 'W14uXC9dKnwpKSg/OltcL10qKSQvLmV4ZWMoc3QpLnNsaWNlKDEpLG5vcm1hbGl6ZUFycmF5OihzdCxndCk9Pntmb3IodmFyIFJ0PTAsdG49c3QubGVuZ3RoLTE7dG4+PTA7dG4tLSl7dmFyIHduPXN0W3RuXTsiLiI9PT13bj9zdC5zcGxpY2UodG4sMSk6Ii4uIj09PXduPyhzdC5zcGxpY2Uo'@;
put 'dG4sMSksUnQrKyk6UnQmJihzdC5zcGxpY2UodG4sMSksUnQtLSl9aWYoZ3QpZm9yKDtSdDtSdC0tKXN0LnVuc2hpZnQoIi4uIik7cmV0dXJuIHN0fSxub3JtYWxpemU6c3Q9Pnt2YXIgZ3Q9UmkuaXNBYnMoc3QpLFJ0PSIvIj09PXN0LnN1YnN0cigtMSk7cmV0dXJuKHN0PVJpLm5vcm1hbGl6'@;
put 'ZUFycmF5KHN0LnNwbGl0KCIvIikuZmlsdGVyKHRuPT4hIXRuKSwhZ3QpLmpvaW4oIi8iKSl8fGd0fHwoc3Q9Ii4iKSxzdCYmUnQmJihzdCs9Ii8iKSwoZ3Q/Ii8iOiIiKStzdH0sZGlybmFtZTpzdD0+e3ZhciBndD1SaS5zcGxpdFBhdGgoc3QpLFJ0PWd0WzBdLHRuPWd0WzFdO3JldHVybiBS'@;
put 'dHx8dG4/KHRuJiYodG49dG4uc3Vic3RyKDAsdG4ubGVuZ3RoLTEpKSxSdCt0bik6Ii4ifSxiYXNlbmFtZTpzdD0+e2lmKCIvIj09PXN0KXJldHVybiIvIjt2YXIgZ3Q9KHN0PShzdD1SaS5ub3JtYWxpemUoc3QpKS5yZXBsYWNlKC9cLyQvLCIiKSkubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4t'@;
put 'MT09PWd0P3N0OnN0LnN1YnN0cihndCsxKX0sam9pbjpmdW5jdGlvbigpe3ZhciBzdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBSaS5ub3JtYWxpemUoc3Quam9pbigiLyIpKX0sam9pbjI6KHN0LGd0KT0+Umkubm9ybWFsaXplKHN0KyIvIitndCl9LFhv'@;
put 'PXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBzdD0iIixndD0hMSxSdD1hcmd1bWVudHMubGVuZ3RoLTE7UnQ+PS0xJiYhZ3Q7UnQtLSl7dmFyIHRuPVJ0Pj0wP2FyZ3VtZW50c1tSdF06QXQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiB0bil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1'@;
put 'bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKCF0bilyZXR1cm4iIjtzdD10bisiLyIrc3QsZ3Q9UmkuaXNBYnModG4pfXJldHVybihndD8iLyI6IiIpKyhzdD1SaS5ub3JtYWxpemVBcnJheShzdC5zcGxpdCgiLyIpLmZpbHRlcih3bj0+ISF3biksIWd0KS5qb2lu'@;
put 'KCIvIikpfHwiLiJ9LHJlbGF0aXZlOihzdCxndCk9PntmdW5jdGlvbiBSdChNbyl7Zm9yKHZhciBmbz0wO2ZvPE1vLmxlbmd0aCYmIiI9PT1Nb1tmb107Zm8rKyk7Zm9yKHZhciBKbz1Nby5sZW5ndGgtMTtKbz49MCYmIiI9PT1Nb1tKb107Sm8tLSk7cmV0dXJuIGZvPkpvP1tdOk1vLnNsaWNl'@;
put 'KGZvLEpvLWZvKzEpfXN0PVhvLnJlc29sdmUoc3QpLnN1YnN0cigxKSxndD1Yby5yZXNvbHZlKGd0KS5zdWJzdHIoMSk7Zm9yKHZhciB0bj1SdChzdC5zcGxpdCgiLyIpKSx3bj1SdChndC5zcGxpdCgiLyIpKSxzcj1NYXRoLm1pbih0bi5sZW5ndGgsd24ubGVuZ3RoKSxscj1zcixScj0wO1Jy'@;
put 'PHNyO1JyKyspaWYodG5bUnJdIT09d25bUnJdKXtscj1ScjticmVha312YXIgZ289W107Zm9yKFJyPWxyO1JyPHRuLmxlbmd0aDtScisrKWdvLnB1c2goIi4uIik7cmV0dXJuKGdvPWdvLmNvbmNhdCh3bi5zbGljZShscikpKS5qb2luKCIvIil9fTtmdW5jdGlvbiBHbyhzdCxndCxSdCl7dmFy'@;
put 'IHRuPVJ0PjA/UnQ6X2koc3QpKzEsd249bmV3IEFycmF5KHRuKSxzcj1EcihzdCx3biwwLHduLmxlbmd0aCk7cmV0dXJuIGd0JiYod24ubGVuZ3RoPXNyKSx3bn12YXIgSnM9e3R0eXM6W10saW5pdDpmdW5jdGlvbigpe30sc2h1dGRvd246ZnVuY3Rpb24oKXt9LHJlZ2lzdGVyOmZ1bmN0aW9u'@;
put 'KHN0LGd0KXtKcy50dHlzW3N0XT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczpndH0sQXQucmVnaXN0ZXJEZXZpY2Uoc3QsSnMuc3RyZWFtX29wcyl9LHN0cmVhbV9vcHM6e29wZW46ZnVuY3Rpb24oc3Qpe3ZhciBndD1Kcy50dHlzW3N0Lm5vZGUucmRldl07aWYoIWd0KXRocm93IG5ldyBBdC5F'@;
put 'cnJub0Vycm9yKDQzKTtzdC50dHk9Z3Qsc3Quc2Vla2FibGU9ITF9LGNsb3NlOmZ1bmN0aW9uKHN0KXtzdC50dHkub3BzLmZzeW5jKHN0LnR0eSl9LGZzeW5jOmZ1bmN0aW9uKHN0KXtzdC50dHkub3BzLmZzeW5jKHN0LnR0eSl9LHJlYWQ6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe2lmKCFz'@;
put 'dC50dHl8fCFzdC50dHkub3BzLmdldF9jaGFyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYwKTtmb3IodmFyIHNyPTAsbHI9MDtscjx0bjtscisrKXt2YXIgUnI7dHJ5e1JyPXN0LnR0eS5vcHMuZ2V0X2NoYXIoc3QudHR5KX1jYXRjaHt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOSl9aWYo'@;
put 'dm9pZCAwPT09UnImJjA9PT1zcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2KTtpZihudWxsPT1ScilicmVhaztzcisrLGd0W1J0K2xyXT1Scn1yZXR1cm4gc3ImJihzdC5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxzcn0sd3JpdGU6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe2lmKCFz'@;
put 'dC50dHl8fCFzdC50dHkub3BzLnB1dF9jaGFyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYwKTt0cnl7Zm9yKHZhciBzcj0wO3NyPHRuO3NyKyspc3QudHR5Lm9wcy5wdXRfY2hhcihzdC50dHksZ3RbUnQrc3JdKX1jYXRjaHt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOSl9cmV0dXJuIHRu'@;
put 'JiYoc3Qubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksc3J9fSxkZWZhdWx0X3R0eV9vcHM6e2dldF9jaGFyOmZ1bmN0aW9uKHN0KXtpZighc3QuaW5wdXQubGVuZ3RoKXt2YXIgZ3Q9bnVsbDtpZih0eXBlb2Ygd2luZG93PCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5wcm9tcHQ/'@;
put 'bnVsbCE9PShndD13aW5kb3cucHJvbXB0KCJJbnB1dDogIikpJiYoZ3QrPSJcbiIpOiJmdW5jdGlvbiI9PXR5cGVvZiByZWFkbGluZSYmbnVsbCE9PShndD1yZWFkbGluZSgpKSYmKGd0Kz0iXG4iKSwhZ3QpcmV0dXJuIG51bGw7c3QuaW5wdXQ9R28oZ3QsITApfXJldHVybiBzdC5pbnB1dC5z'@;
put 'aGlmdCgpfSxwdXRfY2hhcjpmdW5jdGlvbihzdCxndCl7bnVsbD09PWd0fHwxMD09PWd0PyhXKE5uKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKTowIT1ndCYmc3Qub3V0cHV0LnB1c2goZ3QpfSxmc3luYzpmdW5jdGlvbihzdCl7c3Qub3V0cHV0JiZzdC5vdXRwdXQubGVuZ3RoPjAmJihX'@;
put 'KE5uKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKX19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyOmZ1bmN0aW9uKHN0LGd0KXtudWxsPT09Z3R8fDEwPT09Z3Q/KGllKE5uKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKTowIT1ndCYmc3Qub3V0cHV0LnB1c2goZ3QpfSxmc3luYzpm'@;
put 'dW5jdGlvbihzdCl7c3Qub3V0cHV0JiZzdC5vdXRwdXQubGVuZ3RoPjAmJihpZShObihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSl9fX07ZnVuY3Rpb24gZ2Eoc3Qpe3N0PTY1NTM2Kk1hdGguY2VpbChzdC82NTUzNik7dmFyIFJ0LGd0PXh3KDY1NTM2LHN0KTtyZXR1cm4gZ3Q/KHl0LmZp'@;
put 'bGwoMCxSdD1ndCxSdCtzdCksUnQpOjB9dmFyIHVvPXtvcHNfdGFibGU6bnVsbCxtb3VudDpmdW5jdGlvbihzdCl7cmV0dXJuIHVvLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCl9LGNyZWF0ZU5vZGU6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe2lmKEF0LmlzQmxrZGV2KFJ0KXx8QXQuaXNG'@;
put 'SUZPKFJ0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7dW8ub3BzX3RhYmxlfHwodW8ub3BzX3RhYmxlPXtkaXI6e25vZGU6e2dldGF0dHI6dW8ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOnVvLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOnVvLm5vZGVfb3BzLmxvb2t1cCxta25vZDp1'@;
put 'by5ub2RlX29wcy5ta25vZCxyZW5hbWU6dW8ubm9kZV9vcHMucmVuYW1lLHVubGluazp1by5ub2RlX29wcy51bmxpbmsscm1kaXI6dW8ubm9kZV9vcHMucm1kaXIscmVhZGRpcjp1by5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6dW8ubm9kZV9vcHMuc3ltbGlua30sc3RyZWFtOntsbHNlZWs6'@;
put 'dW8uc3RyZWFtX29wcy5sbHNlZWt9fSxmaWxlOntub2RlOntnZXRhdHRyOnVvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2Vlazp1by5zdHJlYW1fb3BzLmxsc2VlayxyZWFkOnVvLnN0cmVhbV9vcHMucmVhZCx3cml0ZTp1by5zdHJl'@;
put 'YW1fb3BzLndyaXRlLGFsbG9jYXRlOnVvLnN0cmVhbV9vcHMuYWxsb2NhdGUsbW1hcDp1by5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6dW8uc3RyZWFtX29wcy5tc3luY319LGxpbms6e25vZGU6e2dldGF0dHI6dW8ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOnVvLm5vZGVfb3BzLnNldGF0dHIs'@;
put 'cmVhZGxpbms6dW8ubm9kZV9vcHMucmVhZGxpbmt9LHN0cmVhbTp7fX0sY2hyZGV2Ontub2RlOntnZXRhdHRyOnVvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06QXQuY2hyZGV2X3N0cmVhbV9vcHN9fSk7dmFyIHduPUF0LmNyZWF0ZU5vZGUo'@;
put 'c3QsZ3QsUnQsdG4pO3JldHVybiBBdC5pc0Rpcih3bi5tb2RlKT8od24ubm9kZV9vcHM9dW8ub3BzX3RhYmxlLmRpci5ub2RlLHduLnN0cmVhbV9vcHM9dW8ub3BzX3RhYmxlLmRpci5zdHJlYW0sd24uY29udGVudHM9e30pOkF0LmlzRmlsZSh3bi5tb2RlKT8od24ubm9kZV9vcHM9dW8ub3Bz'@;
put 'X3RhYmxlLmZpbGUubm9kZSx3bi5zdHJlYW1fb3BzPXVvLm9wc190YWJsZS5maWxlLnN0cmVhbSx3bi51c2VkQnl0ZXM9MCx3bi5jb250ZW50cz1udWxsKTpBdC5pc0xpbmsod24ubW9kZSk/KHduLm5vZGVfb3BzPXVvLm9wc190YWJsZS5saW5rLm5vZGUsd24uc3RyZWFtX29wcz11by5vcHNf'@;
put 'dGFibGUubGluay5zdHJlYW0pOkF0LmlzQ2hyZGV2KHduLm1vZGUpJiYod24ubm9kZV9vcHM9dW8ub3BzX3RhYmxlLmNocmRldi5ub2RlLHduLnN0cmVhbV9vcHM9dW8ub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLHduLnRpbWVzdGFtcD1EYXRlLm5vdygpLHN0JiYoc3QuY29udGVudHNbZ3Rd'@;
put 'PXduLHN0LnRpbWVzdGFtcD13bi50aW1lc3RhbXApLHdufSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheTpmdW5jdGlvbihzdCl7cmV0dXJuIHN0LmNvbnRlbnRzP3N0LmNvbnRlbnRzLnN1YmFycmF5P3N0LmNvbnRlbnRzLnN1YmFycmF5KDAsc3QudXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShz'@;
put 'dC5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCl9LGV4cGFuZEZpbGVTdG9yYWdlOmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9c3QuY29udGVudHM/c3QuY29udGVudHMubGVuZ3RoOjA7aWYoIShSdD49Z3QpKXtndD1NYXRoLm1heChndCxSdCooUnQ8MTA0ODU3Nj8yOjEuMTI1KT4+PjApLDAh'@;
put 'PVJ0JiYoZ3Q9TWF0aC5tYXgoZ3QsMjU2KSk7dmFyIHRuPXN0LmNvbnRlbnRzO3N0LmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGd0KSxzdC51c2VkQnl0ZXM+MCYmc3QuY29udGVudHMuc2V0KHRuLnN1YmFycmF5KDAsc3QudXNlZEJ5dGVzKSwwKX19LHJlc2l6ZUZpbGVTdG9yYWdlOmZ1bmN0'@;
put 'aW9uKHN0LGd0KXtpZihzdC51c2VkQnl0ZXMhPWd0KWlmKDA9PWd0KXN0LmNvbnRlbnRzPW51bGwsc3QudXNlZEJ5dGVzPTA7ZWxzZXt2YXIgUnQ9c3QuY29udGVudHM7c3QuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkoZ3QpLFJ0JiZzdC5jb250ZW50cy5zZXQoUnQuc3ViYXJyYXkoMCxNYXRo'@;
put 'Lm1pbihndCxzdC51c2VkQnl0ZXMpKSksc3QudXNlZEJ5dGVzPWd0fX0sbm9kZV9vcHM6e2dldGF0dHI6ZnVuY3Rpb24oc3Qpe3ZhciBndD17fTtyZXR1cm4gZ3QuZGV2PUF0LmlzQ2hyZGV2KHN0Lm1vZGUpP3N0LmlkOjEsZ3QuaW5vPXN0LmlkLGd0Lm1vZGU9c3QubW9kZSxndC5ubGluaz0x'@;
put 'LGd0LnVpZD0wLGd0LmdpZD0wLGd0LnJkZXY9c3QucmRldixndC5zaXplPUF0LmlzRGlyKHN0Lm1vZGUpPzQwOTY6QXQuaXNGaWxlKHN0Lm1vZGUpP3N0LnVzZWRCeXRlczpBdC5pc0xpbmsoc3QubW9kZSk/c3QubGluay5sZW5ndGg6MCxndC5hdGltZT1uZXcgRGF0ZShzdC50aW1lc3RhbXAp'@;
put 'LGd0Lm10aW1lPW5ldyBEYXRlKHN0LnRpbWVzdGFtcCksZ3QuY3RpbWU9bmV3IERhdGUoc3QudGltZXN0YW1wKSxndC5ibGtzaXplPTQwOTYsZ3QuYmxvY2tzPU1hdGguY2VpbChndC5zaXplL2d0LmJsa3NpemUpLGd0fSxzZXRhdHRyOmZ1bmN0aW9uKHN0LGd0KXt2b2lkIDAhPT1ndC5tb2Rl'@;
put 'JiYoc3QubW9kZT1ndC5tb2RlKSx2b2lkIDAhPT1ndC50aW1lc3RhbXAmJihzdC50aW1lc3RhbXA9Z3QudGltZXN0YW1wKSx2b2lkIDAhPT1ndC5zaXplJiZ1by5yZXNpemVGaWxlU3RvcmFnZShzdCxndC5zaXplKX0sbG9va3VwOmZ1bmN0aW9uKHN0LGd0KXt0aHJvdyBBdC5nZW5lcmljRXJy'@;
put 'b3JzWzQ0XX0sbWtub2Q6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3JldHVybiB1by5jcmVhdGVOb2RlKHN0LGd0LFJ0LHRuKX0scmVuYW1lOmZ1bmN0aW9uKHN0LGd0LFJ0KXtpZihBdC5pc0RpcihzdC5tb2RlKSl7dmFyIHRuO3RyeXt0bj1BdC5sb29rdXBOb2RlKGd0LFJ0KX1jYXRjaHt9aWYo'@;
put 'dG4pZm9yKHZhciB3biBpbiB0bi5jb250ZW50cyl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NSl9ZGVsZXRlIHN0LnBhcmVudC5jb250ZW50c1tzdC5uYW1lXSxzdC5wYXJlbnQudGltZXN0YW1wPURhdGUubm93KCksc3QubmFtZT1SdCxndC5jb250ZW50c1tSdF09c3QsZ3QudGltZXN0YW1w'@;
put 'PXN0LnBhcmVudC50aW1lc3RhbXAsc3QucGFyZW50PWd0fSx1bmxpbms6ZnVuY3Rpb24oc3QsZ3Qpe2RlbGV0ZSBzdC5jb250ZW50c1tndF0sc3QudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyOmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9QXQubG9va3VwTm9kZShzdCxndCk7Zm9yKHZhciB0'@;
put 'biBpbiBSdC5jb250ZW50cyl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NSk7ZGVsZXRlIHN0LmNvbnRlbnRzW2d0XSxzdC50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcjpmdW5jdGlvbihzdCl7dmFyIGd0PVsiLiIsIi4uIl07Zm9yKHZhciBSdCBpbiBzdC5jb250ZW50cylzdC5jb250'@;
put 'ZW50cy5oYXNPd25Qcm9wZXJ0eShSdCkmJmd0LnB1c2goUnQpO3JldHVybiBndH0sc3ltbGluazpmdW5jdGlvbihzdCxndCxSdCl7dmFyIHRuPXVvLmNyZWF0ZU5vZGUoc3QsZ3QsNDE0NzEsMCk7cmV0dXJuIHRuLmxpbms9UnQsdG59LHJlYWRsaW5rOmZ1bmN0aW9uKHN0KXtpZighQXQuaXNM'@;
put 'aW5rKHN0Lm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gc3QubGlua319LHN0cmVhbV9vcHM6e3JlYWQ6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe3ZhciBzcj1zdC5ub2RlLmNvbnRlbnRzO2lmKHduPj1zdC5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgbHI9'@;
put 'TWF0aC5taW4oc3Qubm9kZS51c2VkQnl0ZXMtd24sdG4pO2lmKGxyPjgmJnNyLnN1YmFycmF5KWd0LnNldChzci5zdWJhcnJheSh3bix3bitsciksUnQpO2Vsc2UgZm9yKHZhciBScj0wO1JyPGxyO1JyKyspZ3RbUnQrUnJdPXNyW3duK1JyXTtyZXR1cm4gbHJ9LHdyaXRlOmZ1bmN0aW9uKHN0'@;
put 'LGd0LFJ0LHRuLHduLHNyKXtpZihndC5idWZmZXI9PT1ldC5idWZmZXImJihzcj0hMSksIXRuKXJldHVybiAwO3ZhciBscj1zdC5ub2RlO2lmKGxyLnRpbWVzdGFtcD1EYXRlLm5vdygpLGd0LnN1YmFycmF5JiYoIWxyLmNvbnRlbnRzfHxsci5jb250ZW50cy5zdWJhcnJheSkpe2lmKHNyKXJl'@;
put 'dHVybiBsci5jb250ZW50cz1ndC5zdWJhcnJheShSdCxSdCt0biksbHIudXNlZEJ5dGVzPXRuLHRuO2lmKDA9PT1sci51c2VkQnl0ZXMmJjA9PT13bilyZXR1cm4gbHIuY29udGVudHM9Z3Quc2xpY2UoUnQsUnQrdG4pLGxyLnVzZWRCeXRlcz10bix0bjtpZih3bit0bjw9bHIudXNlZEJ5dGVz'@;
put 'KXJldHVybiBsci5jb250ZW50cy5zZXQoZ3Quc3ViYXJyYXkoUnQsUnQrdG4pLHduKSx0bn1pZih1by5leHBhbmRGaWxlU3RvcmFnZShscix3bit0biksbHIuY29udGVudHMuc3ViYXJyYXkmJmd0LnN1YmFycmF5KWxyLmNvbnRlbnRzLnNldChndC5zdWJhcnJheShSdCxSdCt0biksd24pO2Vs'@;
put 'c2UgZm9yKHZhciBScj0wO1JyPHRuO1JyKyspbHIuY29udGVudHNbd24rUnJdPWd0W1J0K1JyXTtyZXR1cm4gbHIudXNlZEJ5dGVzPU1hdGgubWF4KGxyLnVzZWRCeXRlcyx3bit0biksdG59LGxsc2VlazpmdW5jdGlvbihzdCxndCxSdCl7dmFyIHRuPWd0O2lmKDE9PT1SdD90bis9c3QucG9z'@;
put 'aXRpb246Mj09PVJ0JiZBdC5pc0ZpbGUoc3Qubm9kZS5tb2RlKSYmKHRuKz1zdC5ub2RlLnVzZWRCeXRlcyksdG48MCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIHRufSxhbGxvY2F0ZTpmdW5jdGlvbihzdCxndCxSdCl7dW8uZXhwYW5kRmlsZVN0b3JhZ2Uoc3Qubm9kZSxn'@;
put 'dCtSdCksc3Qubm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgoc3Qubm9kZS51c2VkQnl0ZXMsZ3QrUnQpfSxtbWFwOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighQXQuaXNGaWxlKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDMpO3ZhciBzcixscixScj1zdC5ub2Rl'@;
put 'LmNvbnRlbnRzO2lmKDImd258fFJyLmJ1ZmZlciE9PW90KXtpZigoUnQ+MHx8UnQrZ3Q8UnIubGVuZ3RoKSYmKFJyPVJyLnN1YmFycmF5P1JyLnN1YmFycmF5KFJ0LFJ0K2d0KTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChScixSdCxSdCtndCkpLGxyPSEwLCEoc3I9Z2EoZ3QpKSl0aHJv'@;
put 'dyBuZXcgQXQuRXJybm9FcnJvcig0OCk7ZXQuc2V0KFJyLHNyKX1lbHNlIGxyPSExLHNyPVJyLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjpzcixhbGxvY2F0ZWQ6bHJ9fSxtc3luYzpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7cmV0dXJuIHVvLnN0cmVhbV9vcHMud3JpdGUoc3QsZ3QsMCx0bixS'@;
put 'dCwhMSksMH19fSxBdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2VzOnt9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLEVycm5vRXJyb3I6bnVsbCxnZW5lcmljRXJyb3Jz'@;
put 'Ont9LGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxsb29rdXBQYXRoOihzdCxndD17fSk9PntpZighKHN0PVhvLnJlc29sdmUoc3QpKSlyZXR1cm57cGF0aDoiIixub2RlOm51bGx9O2lmKChndD1PYmplY3QuYXNzaWduKHtmb2xsb3dfbW91bnQ6ITAscmVjdXJzZV9jb3VudDow'@;
put 'fSxndCkpLnJlY3Vyc2VfY291bnQ+OCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMik7Zm9yKHZhciBSdD1zdC5zcGxpdCgiLyIpLmZpbHRlcihNbz0+ISFNbyksdG49QXQucm9vdCx3bj0iLyIsc3I9MDtzcjxSdC5sZW5ndGg7c3IrKyl7dmFyIGxyPXNyPT09UnQubGVuZ3RoLTE7aWYobHIm'@;
put 'Jmd0LnBhcmVudClicmVhaztpZih0bj1BdC5sb29rdXBOb2RlKHRuLFJ0W3NyXSksd249Umkuam9pbjIod24sUnRbc3JdKSxBdC5pc01vdW50cG9pbnQodG4pJiYoIWxyfHxsciYmZ3QuZm9sbG93X21vdW50KSYmKHRuPXRuLm1vdW50ZWQucm9vdCksIWxyfHxndC5mb2xsb3cpZm9yKHZhciBS'@;
put 'cj0wO0F0LmlzTGluayh0bi5tb2RlKTspe3ZhciBnbz1BdC5yZWFkbGluayh3bik7aWYod249WG8ucmVzb2x2ZShSaS5kaXJuYW1lKHduKSxnbyksdG49QXQubG9va3VwUGF0aCh3bix7cmVjdXJzZV9jb3VudDpndC5yZWN1cnNlX2NvdW50KzF9KS5ub2RlLFJyKys+NDApdGhyb3cgbmV3IEF0'@;
put 'LkVycm5vRXJyb3IoMzIpfX1yZXR1cm57cGF0aDp3bixub2RlOnRufX0sZ2V0UGF0aDpzdD0+e2Zvcih2YXIgZ3Q7Oyl7aWYoQXQuaXNSb290KHN0KSl7dmFyIFJ0PXN0Lm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGd0PyIvIiE9PVJ0W1J0Lmxlbmd0aC0xXT9SdCsiLyIrZ3Q6UnQrZ3Q6UnR9'@;
put 'Z3Q9Z3Q/c3QubmFtZSsiLyIrZ3Q6c3QubmFtZSxzdD1zdC5wYXJlbnR9fSxoYXNoTmFtZTooc3QsZ3QpPT57Zm9yKHZhciBSdD0wLHRuPTA7dG48Z3QubGVuZ3RoO3RuKyspUnQ9KFJ0PDw1KS1SdCtndC5jaGFyQ29kZUF0KHRuKXwwO3JldHVybihzdCtSdD4+PjApJUF0Lm5hbWVUYWJsZS5s'@;
put 'ZW5ndGh9LGhhc2hBZGROb2RlOnN0PT57dmFyIGd0PUF0Lmhhc2hOYW1lKHN0LnBhcmVudC5pZCxzdC5uYW1lKTtzdC5uYW1lX25leHQ9QXQubmFtZVRhYmxlW2d0XSxBdC5uYW1lVGFibGVbZ3RdPXN0fSxoYXNoUmVtb3ZlTm9kZTpzdD0+e3ZhciBndD1BdC5oYXNoTmFtZShzdC5wYXJlbnQu'@;
put 'aWQsc3QubmFtZSk7aWYoQXQubmFtZVRhYmxlW2d0XT09PXN0KUF0Lm5hbWVUYWJsZVtndF09c3QubmFtZV9uZXh0O2Vsc2UgZm9yKHZhciBSdD1BdC5uYW1lVGFibGVbZ3RdO1J0Oyl7aWYoUnQubmFtZV9uZXh0PT09c3Qpe1J0Lm5hbWVfbmV4dD1zdC5uYW1lX25leHQ7YnJlYWt9UnQ9UnQu'@;
put 'bmFtZV9uZXh0fX0sbG9va3VwTm9kZTooc3QsZ3QpPT57dmFyIFJ0PUF0Lm1heUxvb2t1cChzdCk7aWYoUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoUnQsc3QpO2Zvcih2YXIgdG49QXQuaGFzaE5hbWUoc3QuaWQsZ3QpLHduPUF0Lm5hbWVUYWJsZVt0bl07d247d249d24ubmFtZV9uZXh0'@;
put 'KWlmKHduLnBhcmVudC5pZD09PXN0LmlkJiZ3bi5uYW1lPT09Z3QpcmV0dXJuIHduO3JldHVybiBBdC5sb29rdXAoc3QsZ3QpfSxjcmVhdGVOb2RlOihzdCxndCxSdCx0bik9Pnt2YXIgd249bmV3IEF0LkZTTm9kZShzdCxndCxSdCx0bik7cmV0dXJuIEF0Lmhhc2hBZGROb2RlKHduKSx3bn0s'@;
put 'ZGVzdHJveU5vZGU6c3Q9PntBdC5oYXNoUmVtb3ZlTm9kZShzdCl9LGlzUm9vdDpzdD0+c3Q9PT1zdC5wYXJlbnQsaXNNb3VudHBvaW50OnN0PT4hIXN0Lm1vdW50ZWQsaXNGaWxlOnN0PT4zMjc2OD09KDYxNDQwJnN0KSxpc0RpcjpzdD0+MTYzODQ9PSg2MTQ0MCZzdCksaXNMaW5rOnN0PT40'@;
put 'MDk2MD09KDYxNDQwJnN0KSxpc0NocmRldjpzdD0+ODE5Mj09KDYxNDQwJnN0KSxpc0Jsa2RldjpzdD0+MjQ1NzY9PSg2MTQ0MCZzdCksaXNGSUZPOnN0PT40MDk2PT0oNjE0NDAmc3QpLGlzU29ja2V0OnN0PT40OTE1Mj09KDQ5MTUyJnN0KSxmbGFnTW9kZXM6e3I6MCwicisiOjIsdzo1Nzcs'@;
put 'IncrIjo1NzgsYToxMDg5LCJhKyI6MTA5MH0sbW9kZVN0cmluZ1RvRmxhZ3M6c3Q9Pnt2YXIgZ3Q9QXQuZmxhZ01vZGVzW3N0XTtpZih2b2lkIDA9PT1ndCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZmlsZSBvcGVuIG1vZGU6ICIrc3QpO3JldHVybiBndH0sZmxhZ3NUb1Blcm1pc3Npb25T'@;
put 'dHJpbmc6c3Q9Pnt2YXIgZ3Q9WyJyIiwidyIsInJ3Il1bMyZzdF07cmV0dXJuIDUxMiZzdCYmKGd0Kz0idyIpLGd0fSxub2RlUGVybWlzc2lvbnM6KHN0LGd0KT0+QXQuaWdub3JlUGVybWlzc2lvbnN8fCghZ3QuaW5jbHVkZXMoInIiKXx8MjkyJnN0Lm1vZGUpJiYoIWd0LmluY2x1ZGVzKCJ3'@;
put 'Iil8fDE0NiZzdC5tb2RlKSYmKCFndC5pbmNsdWRlcygieCIpfHw3MyZzdC5tb2RlKT8wOjIsbWF5TG9va3VwOnN0PT5BdC5ub2RlUGVybWlzc2lvbnMoc3QsIngiKXx8KHN0Lm5vZGVfb3BzLmxvb2t1cD8wOjIpLG1heUNyZWF0ZTooc3QsZ3QpPT57dHJ5e3JldHVybiBBdC5sb29rdXBOb2Rl'@;
put 'KHN0LGd0KSwyMH1jYXRjaHt9cmV0dXJuIEF0Lm5vZGVQZXJtaXNzaW9ucyhzdCwid3giKX0sbWF5RGVsZXRlOihzdCxndCxSdCk9Pnt2YXIgdG47dHJ5e3RuPUF0Lmxvb2t1cE5vZGUoc3QsZ3QpfWNhdGNoKHNyKXtyZXR1cm4gc3IuZXJybm99dmFyIHduPUF0Lm5vZGVQZXJtaXNzaW9ucyhz'@;
put 'dCwid3giKTtpZih3bilyZXR1cm4gd247aWYoUnQpe2lmKCFBdC5pc0Rpcih0bi5tb2RlKSlyZXR1cm4gNTQ7aWYoQXQuaXNSb290KHRuKXx8QXQuZ2V0UGF0aCh0bik9PT1BdC5jd2QoKSlyZXR1cm4gMTB9ZWxzZSBpZihBdC5pc0Rpcih0bi5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1h'@;
put 'eU9wZW46KHN0LGd0KT0+c3Q/QXQuaXNMaW5rKHN0Lm1vZGUpPzMyOkF0LmlzRGlyKHN0Lm1vZGUpJiYoInIiIT09QXQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZ3QpfHw1MTImZ3QpPzMxOkF0Lm5vZGVQZXJtaXNzaW9ucyhzdCxBdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhndCkpOjQ0'@;
put 'LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZDooc3Q9MCxndD1BdC5NQVhfT1BFTl9GRFMpPT57Zm9yKHZhciBSdD1zdDtSdDw9Z3Q7UnQrKylpZighQXQuc3RyZWFtc1tSdF0pcmV0dXJuIFJ0O3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtOnN0PT5BdC5zdHJlYW1zW3N0'@;
put 'XSxjcmVhdGVTdHJlYW06KHN0LGd0LFJ0KT0+e0F0LkZTU3RyZWFtfHwoQXQuRlNTdHJlYW09ZnVuY3Rpb24oKXt0aGlzLnNoYXJlZD17fX0sQXQuRlNTdHJlYW0ucHJvdG90eXBlPXt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF0LkZTU3RyZWFtLnByb3RvdHlwZSx7b2JqZWN0OntnZXQ6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlfSxzZXQ6ZnVuY3Rpb24od24pe3RoaXMubm9kZT13bn19LGlzUmVhZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNXcml0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDAhPSgyMDk3MTU1JnRoaXMu'@;
put 'ZmxhZ3MpfX0saXNBcHBlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9fSxmbGFnczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfSxzZXQ6ZnVuY3Rpb24od24pe3RoaXMuc2hhcmVkLmZsYWdzPXdufX0scG9zaXRpb246e2dldDpmdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKHduKXt0aGlzLnNoYXJlZC5wb3NpdGlvbj13bn19fSkpLHN0PU9iamVjdC5hc3NpZ24obmV3IEF0LkZTU3RyZWFtLHN0KTt2YXIgdG49QXQubmV4dGZkKGd0LFJ0KTtyZXR1cm4gc3QuZmQ9dG4sQXQuc3Ry'@;
put 'ZWFtc1t0bl09c3Qsc3R9LGNsb3NlU3RyZWFtOnN0PT57QXQuc3RyZWFtc1tzdF09bnVsbH0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW46c3Q9Pnt2YXIgZ3Q9QXQuZ2V0RGV2aWNlKHN0Lm5vZGUucmRldik7c3Quc3RyZWFtX29wcz1ndC5zdHJlYW1fb3BzLHN0LnN0cmVhbV9vcHMub3BlbiYm'@;
put 'c3Quc3RyZWFtX29wcy5vcGVuKHN0KX0sbGxzZWVrOigpPT57dGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApfX0sbWFqb3I6c3Q9PnN0Pj44LG1pbm9yOnN0PT4yNTUmc3QsbWFrZWRldjooc3QsZ3QpPT5zdDw8OHxndCxyZWdpc3RlckRldmljZTooc3QsZ3QpPT57QXQuZGV2aWNlc1tzdF09'@;
put 'e3N0cmVhbV9vcHM6Z3R9fSxnZXREZXZpY2U6c3Q9PkF0LmRldmljZXNbc3RdLGdldE1vdW50czpzdD0+e2Zvcih2YXIgZ3Q9W10sUnQ9W3N0XTtSdC5sZW5ndGg7KXt2YXIgdG49UnQucG9wKCk7Z3QucHVzaCh0biksUnQucHVzaC5hcHBseShSdCx0bi5tb3VudHMpfXJldHVybiBndH0sc3lu'@;
put 'Y2ZzOihzdCxndCk9PnsiZnVuY3Rpb24iPT10eXBlb2Ygc3QmJihndD1zdCxzdD0hMSksQXQuc3luY0ZTUmVxdWVzdHMrKyxBdC5zeW5jRlNSZXF1ZXN0cz4xJiZpZSgid2FybmluZzogIitBdC5zeW5jRlNSZXF1ZXN0cysiIEZTLnN5bmNmcyBvcGVyYXRpb25zIGluIGZsaWdodCBhdCBvbmNl'@;
put 'LCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmsiKTt2YXIgUnQ9QXQuZ2V0TW91bnRzKEF0LnJvb3QubW91bnQpLHRuPTA7ZnVuY3Rpb24gd24obHIpe3JldHVybiBBdC5zeW5jRlNSZXF1ZXN0cy0tLGd0KGxyKX1mdW5jdGlvbiBzcihscil7aWYobHIpcmV0dXJuIHNyLmVycm9yZWQ/'@;
put 'dm9pZCAwOihzci5lcnJvcmVkPSEwLHduKGxyKSk7Kyt0bj49UnQubGVuZ3RoJiZ3bihudWxsKX1SdC5mb3JFYWNoKGxyPT57aWYoIWxyLnR5cGUuc3luY2ZzKXJldHVybiBzcihudWxsKTtsci50eXBlLnN5bmNmcyhscixzdCxzcil9KX0sbW91bnQ6KHN0LGd0LFJ0KT0+e3ZhciB0bix3bj0i'@;
put 'LyI9PT1SdCxzcj0hUnQ7aWYod24mJkF0LnJvb3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2lmKCF3biYmIXNyKXt2YXIgbHI9QXQubG9va3VwUGF0aChSdCx7Zm9sbG93X21vdW50OiExfSk7aWYoUnQ9bHIucGF0aCxBdC5pc01vdW50cG9pbnQodG49bHIubm9kZSkpdGhyb3cgbmV3'@;
put 'IEF0LkVycm5vRXJyb3IoMTApO2lmKCFBdC5pc0Rpcih0bi5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NCl9dmFyIFJyPXt0eXBlOnN0LG9wdHM6Z3QsbW91bnRwb2ludDpSdCxtb3VudHM6W119LGdvPXN0Lm1vdW50KFJyKTtyZXR1cm4gZ28ubW91bnQ9UnIsUnIucm9vdD1nbyx3'@;
put 'bj9BdC5yb290PWdvOnRuJiYodG4ubW91bnRlZD1Scix0bi5tb3VudCYmdG4ubW91bnQubW91bnRzLnB1c2goUnIpKSxnb30sdW5tb3VudDpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3dfbW91bnQ6ITF9KTtpZighQXQuaXNNb3VudHBvaW50KGd0Lm5vZGUpKXRocm93IG5l'@;
put 'dyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgUnQ9Z3Qubm9kZSx0bj1SdC5tb3VudGVkLHduPUF0LmdldE1vdW50cyh0bik7T2JqZWN0LmtleXMoQXQubmFtZVRhYmxlKS5mb3JFYWNoKGxyPT57Zm9yKHZhciBScj1BdC5uYW1lVGFibGVbbHJdO1JyOyl7dmFyIGdvPVJyLm5hbWVfbmV4dDt3bi5p'@;
put 'bmNsdWRlcyhSci5tb3VudCkmJkF0LmRlc3Ryb3lOb2RlKFJyKSxScj1nb319KSxSdC5tb3VudGVkPW51bGw7dmFyIHNyPVJ0Lm1vdW50Lm1vdW50cy5pbmRleE9mKHRuKTtSdC5tb3VudC5tb3VudHMuc3BsaWNlKHNyLDEpfSxsb29rdXA6KHN0LGd0KT0+c3Qubm9kZV9vcHMubG9va3VwKHN0'@;
put 'LGd0KSxta25vZDooc3QsZ3QsUnQpPT57dmFyIHRuPUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGUsd249UmkuYmFzZW5hbWUoc3QpO2lmKCF3bnx8Ii4iPT09d258fCIuLiI9PT13bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIHNyPUF0Lm1heUNyZWF0ZSh0bix3'@;
put 'bik7aWYoc3IpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Ioc3IpO2lmKCF0bi5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7cmV0dXJuIHRuLm5vZGVfb3BzLm1rbm9kKHRuLHduLGd0LFJ0KX0sY3JlYXRlOihzdCxndCk9PihndD12b2lkIDAhPT1ndD9ndDo0Mzgs'@;
put 'Z3QmPTQwOTUsQXQubWtub2Qoc3QsZ3R8PTMyNzY4LDApKSxta2Rpcjooc3QsZ3QpPT4oZ3Q9dm9pZCAwIT09Z3Q/Z3Q6NTExLGd0Jj0xMDIzLEF0Lm1rbm9kKHN0LGd0fD0xNjM4NCwwKSksbWtkaXJUcmVlOihzdCxndCk9Pntmb3IodmFyIFJ0PXN0LnNwbGl0KCIvIiksdG49IiIsd249MDt3'@;
put 'bjxSdC5sZW5ndGg7Kyt3bilpZihSdFt3bl0pe3RuKz0iLyIrUnRbd25dO3RyeXtBdC5ta2Rpcih0bixndCl9Y2F0Y2goc3Ipe2lmKDIwIT1zci5lcnJubyl0aHJvdyBzcn19fSxta2Rldjooc3QsZ3QsUnQpPT4odm9pZCAwPT09UnQmJihSdD1ndCxndD00MzgpLEF0Lm1rbm9kKHN0LGd0fD04'@;
put 'MTkyLFJ0KSksc3ltbGluazooc3QsZ3QpPT57aWYoIVhvLnJlc29sdmUoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTt2YXIgUnQ9QXQubG9va3VwUGF0aChndCx7cGFyZW50OiEwfSkubm9kZTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO3ZhciB0bj1SaS5iYXNl'@;
put 'bmFtZShndCksd249QXQubWF5Q3JlYXRlKFJ0LHRuKTtpZih3bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcih3bik7aWYoIVJ0Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3JldHVybiBSdC5ub2RlX29wcy5zeW1saW5rKFJ0LHRuLHN0KX0scmVuYW1lOihz'@;
put 'dCxndCk9Pnt2YXIgUnQsdG4sd249UmkuZGlybmFtZShzdCksc3I9UmkuZGlybmFtZShndCksbHI9UmkuYmFzZW5hbWUoc3QpLFJyPVJpLmJhc2VuYW1lKGd0KTtpZihSdD1BdC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlLHRuPUF0Lmxvb2t1cFBhdGgoZ3Qse3BhcmVudDohMH0p'@;
put 'Lm5vZGUsIVJ0fHwhdG4pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO2lmKFJ0Lm1vdW50IT09dG4ubW91bnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzUpO3ZhciBnbyxNbz1BdC5sb29rdXBOb2RlKFJ0LGxyKSxmbz1Yby5yZWxhdGl2ZShzdCxzcik7aWYoIi4iIT09Zm8uY2hhckF0'@;
put 'KDApKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0oZm89WG8ucmVsYXRpdmUoZ3Qsd24pKS5jaGFyQXQoMCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTUpO3RyeXtnbz1BdC5sb29rdXBOb2RlKHRuLFJyKX1jYXRjaHt9aWYoTW8hPT1nbyl7dmFyIEpvPUF0LmlzRGly'@;
put 'KE1vLm1vZGUpLFlpPUF0Lm1heURlbGV0ZShSdCxscixKbyk7aWYoWWkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoWWkpO2lmKFlpPWdvP0F0Lm1heURlbGV0ZSh0bixScixKbyk6QXQubWF5Q3JlYXRlKHRuLFJyKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihZaSk7aWYoIVJ0Lm5vZGVfb3Bz'@;
put 'LnJlbmFtZSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7aWYoQXQuaXNNb3VudHBvaW50KE1vKXx8Z28mJkF0LmlzTW91bnRwb2ludChnbykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2lmKHRuIT09UnQmJihZaT1BdC5ub2RlUGVybWlzc2lvbnMoUnQsInciKSkpdGhyb3cgbmV3'@;
put 'IEF0LkVycm5vRXJyb3IoWWkpO0F0Lmhhc2hSZW1vdmVOb2RlKE1vKTt0cnl7UnQubm9kZV9vcHMucmVuYW1lKE1vLHRuLFJyKX1jYXRjaChZcyl7dGhyb3cgWXN9ZmluYWxseXtBdC5oYXNoQWRkTm9kZShNbyl9fX0scm1kaXI6c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCx7cGFyZW50'@;
put 'OiEwfSkubm9kZSxSdD1SaS5iYXNlbmFtZShzdCksdG49QXQubG9va3VwTm9kZShndCxSdCksd249QXQubWF5RGVsZXRlKGd0LFJ0LCEwKTtpZih3bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcih3bik7aWYoIWd0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtp'@;
put 'ZihBdC5pc01vdW50cG9pbnQodG4pKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEwKTtndC5ub2RlX29wcy5ybWRpcihndCxSdCksQXQuZGVzdHJveU5vZGUodG4pfSxyZWFkZGlyOnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohMH0pLm5vZGU7aWYoIWd0Lm5vZGVfb3Bz'@;
put 'LnJlYWRkaXIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTQpO3JldHVybiBndC5ub2RlX29wcy5yZWFkZGlyKGd0KX0sdW5saW5rOnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGU7aWYoIWd0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTt2YXIgUnQ9'@;
put 'UmkuYmFzZW5hbWUoc3QpLHRuPUF0Lmxvb2t1cE5vZGUoZ3QsUnQpLHduPUF0Lm1heURlbGV0ZShndCxSdCwhMSk7aWYod24pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Iod24pO2lmKCFndC5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO2lmKEF0LmlzTW91bnRw'@;
put 'b2ludCh0bikpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2d0Lm5vZGVfb3BzLnVubGluayhndCxSdCksQXQuZGVzdHJveU5vZGUodG4pfSxyZWFkbGluazpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0KS5ub2RlO2lmKCFndCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYo'@;
put 'IWd0Lm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWG8ucmVzb2x2ZShBdC5nZXRQYXRoKGd0LnBhcmVudCksZ3Qubm9kZV9vcHMucmVhZGxpbmsoZ3QpKX0sc3RhdDooc3QsZ3QpPT57dmFyIFJ0PUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzoh'@;
put 'Z3R9KS5ub2RlO2lmKCFSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoIVJ0Lm5vZGVfb3BzLmdldGF0dHIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3JldHVybiBSdC5ub2RlX29wcy5nZXRhdHRyKFJ0KX0sbHN0YXQ6c3Q9PkF0LnN0YXQoc3QsITApLGNobW9kOihzdCxn'@;
put 'dCxSdCk9Pnt2YXIgdG47aWYoISh0bj0ic3RyaW5nIj09dHlwZW9mIHN0P0F0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohUnR9KS5ub2RlOnN0KS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTt0bi5ub2RlX29wcy5zZXRhdHRyKHRuLHttb2RlOjQwOTUmZ3R8'@;
put 'LTQwOTYmdG4ubW9kZSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2htb2Q6KHN0LGd0KT0+e0F0LmNobW9kKHN0LGd0LCEwKX0sZmNobW9kOihzdCxndCk9Pnt2YXIgUnQ9QXQuZ2V0U3RyZWFtKHN0KTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7QXQuY2htb2QoUnQubm9k'@;
put 'ZSxndCl9LGNob3duOihzdCxndCxSdCx0bik9Pnt2YXIgd247aWYoISh3bj0ic3RyaW5nIj09dHlwZW9mIHN0P0F0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohdG59KS5ub2RlOnN0KS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTt3bi5ub2RlX29wcy5zZXRh'@;
put 'dHRyKHduLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd246KHN0LGd0LFJ0KT0+e0F0LmNob3duKHN0LGd0LFJ0LCEwKX0sZmNob3duOihzdCxndCxSdCk9Pnt2YXIgdG49QXQuZ2V0U3RyZWFtKHN0KTtpZighdG4pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7QXQuY2hvd24odG4u'@;
put 'bm9kZSxndCxSdCl9LHRydW5jYXRlOihzdCxndCk9PntpZihndDwwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgUnQ7aWYoIShSdD0ic3RyaW5nIj09dHlwZW9mIHN0P0F0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohMH0pLm5vZGU6c3QpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cg'@;
put 'bmV3IEF0LkVycm5vRXJyb3IoNjMpO2lmKEF0LmlzRGlyKFJ0Lm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDMxKTtpZighQXQuaXNGaWxlKFJ0Lm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgdG49QXQubm9kZVBlcm1pc3Npb25zKFJ0LCJ3Iik7aWYodG4pdGhy'@;
put 'b3cgbmV3IEF0LkVycm5vRXJyb3IodG4pO1J0Lm5vZGVfb3BzLnNldGF0dHIoUnQse3NpemU6Z3QsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlOihzdCxndCk9Pnt2YXIgUnQ9QXQuZ2V0U3RyZWFtKHN0KTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoISgy'@;
put 'MDk3MTU1JlJ0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7QXQudHJ1bmNhdGUoUnQubm9kZSxndCl9LHV0aW1lOihzdCxndCxSdCk9Pnt2YXIgdG49QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiEwfSkubm9kZTt0bi5ub2RlX29wcy5zZXRhdHRyKHRuLHt0aW1lc3RhbXA6'@;
put 'TWF0aC5tYXgoZ3QsUnQpfSl9LG9wZW46KHN0LGd0LFJ0KT0+e2lmKCIiPT09c3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO3ZhciB0bjtpZihSdD12b2lkIDA9PT1SdD80Mzg6UnQsUnQ9NjQmKGd0PSJzdHJpbmciPT10eXBlb2YgZ3Q/QXQubW9kZVN0cmluZ1RvRmxhZ3MoZ3QpOmd0'@;
put 'KT80MDk1JlJ0fDMyNzY4OjAsIm9iamVjdCI9PXR5cGVvZiBzdCl0bj1zdDtlbHNle3N0PVJpLm5vcm1hbGl6ZShzdCk7dHJ5e3RuPUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohKDEzMTA3MiZndCl9KS5ub2RlfWNhdGNoe319dmFyIHduPSExO2lmKDY0Jmd0KWlmKHRuKXtpZigxMjgmZ3Qp'@;
put 'dGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjApfWVsc2UgdG49QXQubWtub2Qoc3QsUnQsMCksd249ITA7aWYoIXRuKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTtpZihBdC5pc0NocmRldih0bi5tb2RlKSYmKGd0Jj0tNTEzKSw2NTUzNiZndCYmIUF0LmlzRGlyKHRuLm1vZGUpKXRocm93'@;
put 'IG5ldyBBdC5FcnJub0Vycm9yKDU0KTtpZighd24pe3ZhciBzcj1BdC5tYXlPcGVuKHRuLGd0KTtpZihzcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihzcil9NTEyJmd0JiYhd24mJkF0LnRydW5jYXRlKHRuLDApLGd0Jj0tMTMxNzEzO3ZhciBscj1BdC5jcmVhdGVTdHJlYW0oe25vZGU6dG4s'@;
put 'cGF0aDpBdC5nZXRQYXRoKHRuKSxmbGFnczpndCxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6dG4uc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBsci5zdHJlYW1fb3BzLm9wZW4mJmxyLnN0cmVhbV9vcHMub3BlbihsciksIWQubG9nUmVhZEZpbGVz'@;
put 'fHwxJmd0fHwoQXQucmVhZEZpbGVzfHwoQXQucmVhZEZpbGVzPXt9KSxzdCBpbiBBdC5yZWFkRmlsZXN8fChBdC5yZWFkRmlsZXNbc3RdPTEpKSxscn0sY2xvc2U6c3Q9PntpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7c3QuZ2V0ZGVudHMmJihzdC5nZXRk'@;
put 'ZW50cz1udWxsKTt0cnl7c3Quc3RyZWFtX29wcy5jbG9zZSYmc3Quc3RyZWFtX29wcy5jbG9zZShzdCl9Y2F0Y2goZ3Qpe3Rocm93IGd0fWZpbmFsbHl7QXQuY2xvc2VTdHJlYW0oc3QuZmQpfXN0LmZkPW51bGx9LGlzQ2xvc2VkOnN0PT5udWxsPT09c3QuZmQsbGxzZWVrOihzdCxndCxSdCk9'@;
put 'PntpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoIXN0LnNlZWthYmxlfHwhc3Quc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApO2lmKDAhPVJ0JiYxIT1SdCYmMiE9UnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgp'@;
put 'O3JldHVybiBzdC5wb3NpdGlvbj1zdC5zdHJlYW1fb3BzLmxsc2VlayhzdCxndCxSdCksc3QudW5nb3R0ZW49W10sc3QucG9zaXRpb259LHJlYWQ6KHN0LGd0LFJ0LHRuLHduKT0+e2lmKHRuPDB8fHduPDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO2lmKEF0LmlzQ2xvc2VkKHN0KSl0'@;
put 'aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5NzE1NSZzdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoQXQuaXNEaXIoc3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMSk7aWYoIXN0LnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcg'@;
put 'QXQuRXJybm9FcnJvcigyOCk7dmFyIHNyPXZvaWQgMCE9PXduO2lmKHNyKXtpZighc3Quc2Vla2FibGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApfWVsc2Ugd249c3QucG9zaXRpb247dmFyIGxyPXN0LnN0cmVhbV9vcHMucmVhZChzdCxndCxSdCx0bix3bik7cmV0dXJuIHNyfHwoc3Qu'@;
put 'cG9zaXRpb24rPWxyKSxscn0sd3JpdGU6KHN0LGd0LFJ0LHRuLHduLHNyKT0+e2lmKHRuPDB8fHduPDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO2lmKEF0LmlzQ2xvc2VkKHN0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZighKDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5l'@;
put 'dyBBdC5FcnJub0Vycm9yKDgpO2lmKEF0LmlzRGlyKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMzEpO2lmKCFzdC5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtzdC5zZWVrYWJsZSYmMTAyNCZzdC5mbGFncyYmQXQubGxzZWVrKHN0'@;
put 'LDAsMik7dmFyIGxyPXZvaWQgMCE9PXduO2lmKGxyKXtpZighc3Quc2Vla2FibGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApfWVsc2Ugd249c3QucG9zaXRpb247dmFyIFJyPXN0LnN0cmVhbV9vcHMud3JpdGUoc3QsZ3QsUnQsdG4sd24sc3IpO3JldHVybiBscnx8KHN0LnBvc2l0aW9u'@;
put 'Kz1SciksUnJ9LGFsbG9jYXRlOihzdCxndCxSdCk9PntpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoZ3Q8MHx8UnQ8PTApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO2lmKCEoMjA5NzE1NSZzdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5vRXJy'@;
put 'b3IoOCk7aWYoIUF0LmlzRmlsZShzdC5ub2RlLm1vZGUpJiYhQXQuaXNEaXIoc3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0Myk7aWYoIXN0LnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTM4KTtzdC5zdHJlYW1fb3BzLmFsbG9jYXRl'@;
put 'KHN0LGd0LFJ0KX0sbW1hcDooc3QsZ3QsUnQsdG4sd24pPT57aWYoMiZ0biYmISgyJnduKSYmMiE9KDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyKTtpZighc3Quc3Ry'@;
put 'ZWFtX29wcy5tbWFwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQzKTtyZXR1cm4gc3Quc3RyZWFtX29wcy5tbWFwKHN0LGd0LFJ0LHRuLHduKX0sbXN5bmM6KHN0LGd0LFJ0LHRuLHduKT0+c3Quc3RyZWFtX29wcy5tc3luYz9zdC5zdHJlYW1fb3BzLm1zeW5jKHN0LGd0LFJ0LHRuLHduKTow'@;
put 'LG11bm1hcDpzdD0+MCxpb2N0bDooc3QsZ3QsUnQpPT57aWYoIXN0LnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTkpO3JldHVybiBzdC5zdHJlYW1fb3BzLmlvY3RsKHN0LGd0LFJ0KX0scmVhZEZpbGU6KHN0LGd0PXt9KT0+e2lmKGd0LmZsYWdzPWd0LmZsYWdz'@;
put 'fHwwLGd0LmVuY29kaW5nPWd0LmVuY29kaW5nfHwiYmluYXJ5IiwidXRmOCIhPT1ndC5lbmNvZGluZyYmImJpbmFyeSIhPT1ndC5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW5jb2RpbmcgdHlwZSAiJytndC5lbmNvZGluZysnIicpO3ZhciBSdCx0bj1BdC5vcGVuKHN0LGd0'@;
put 'LmZsYWdzKSx3bj1BdC5zdGF0KHN0KS5zaXplLHNyPW5ldyBVaW50OEFycmF5KHduKTtyZXR1cm4gQXQucmVhZCh0bixzciwwLHduLDApLCJ1dGY4Ij09PWd0LmVuY29kaW5nP1J0PU5uKHNyLDApOiJiaW5hcnkiPT09Z3QuZW5jb2RpbmcmJihSdD1zciksQXQuY2xvc2UodG4pLFJ0fSx3cml0'@;
put 'ZUZpbGU6KHN0LGd0LFJ0PXt9KT0+e1J0LmZsYWdzPVJ0LmZsYWdzfHw1Nzc7dmFyIHRuPUF0Lm9wZW4oc3QsUnQuZmxhZ3MsUnQubW9kZSk7aWYoInN0cmluZyI9PXR5cGVvZiBndCl7dmFyIHduPW5ldyBVaW50OEFycmF5KF9pKGd0KSsxKSxzcj1EcihndCx3biwwLHduLmxlbmd0aCk7QXQu'@;
put 'd3JpdGUodG4sd24sMCxzcix2b2lkIDAsUnQuY2FuT3duKX1lbHNle2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZ3QpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7QXQud3JpdGUodG4sZ3QsMCxndC5ieXRlTGVuZ3RoLHZvaWQgMCxSdC5jYW5Pd24pfUF0LmNsb3Nl'@;
put 'KHRuKX0sY3dkOigpPT5BdC5jdXJyZW50UGF0aCxjaGRpcjpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ITB9KTtpZihudWxsPT09Z3Qubm9kZSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoIUF0LmlzRGlyKGd0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVy'@;
put 'cm5vRXJyb3IoNTQpO3ZhciBSdD1BdC5ub2RlUGVybWlzc2lvbnMoZ3Qubm9kZSwieCIpO2lmKFJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFJ0KTtBdC5jdXJyZW50UGF0aD1ndC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXM6KCk9PntBdC5ta2RpcigiL3RtcCIpLEF0Lm1rZGly'@;
put 'KCIvaG9tZSIpLEF0Lm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlczooKT0+e0F0Lm1rZGlyKCIvZGV2IiksQXQucmVnaXN0ZXJEZXZpY2UoQXQubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihndCxSdCx0bix3bixzcik9PndufSksQXQubWtkZXYo'@;
put 'Ii9kZXYvbnVsbCIsQXQubWFrZWRldigxLDMpKSxKcy5yZWdpc3RlcihBdC5tYWtlZGV2KDUsMCksSnMuZGVmYXVsdF90dHlfb3BzKSxKcy5yZWdpc3RlcihBdC5tYWtlZGV2KDYsMCksSnMuZGVmYXVsdF90dHkxX29wcyksQXQubWtkZXYoIi9kZXYvdHR5IixBdC5tYWtlZGV2KDUsMCkpLEF0'@;
put 'Lm1rZGV2KCIvZGV2L3R0eTEiLEF0Lm1ha2VkZXYoNiwwKSk7dmFyIHN0PWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgZ3Q9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuKCk9Pihjcnlw'@;
put 'dG8uZ2V0UmFuZG9tVmFsdWVzKGd0KSxndFswXSl9cmV0dXJuKCk9PkVuKCJyYW5kb21EZXZpY2UiKX0oKTtBdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLHN0KSxBdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixzdCksQXQubWtkaXIoIi9kZXYvc2htIiksQXQubWtkaXIo'@;
put 'Ii9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXM6KCk9PntBdC5ta2RpcigiL3Byb2MiKTt2YXIgc3Q9QXQubWtkaXIoIi9wcm9jL3NlbGYiKTtBdC5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLEF0Lm1vdW50KHttb3VudDooKT0+e3ZhciBndD1BdC5jcmVhdGVOb2RlKHN0'@;
put 'LCJmZCIsMTY4OTUsNzMpO3JldHVybiBndC5ub2RlX29wcz17bG9va3VwOihSdCx0bik9Pnt2YXIgc3I9QXQuZ2V0U3RyZWFtKCt0bik7aWYoIXNyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO3ZhciBscj17cGFyZW50Om51bGwsbW91bnQ6e21vdW50cG9pbnQ6ImZha2UifSxub2RlX29w'@;
put 'czp7cmVhZGxpbms6KCk9PnNyLnBhdGh9fTtyZXR1cm4gbHIucGFyZW50PWxyLGxyfX0sZ3R9fSx7fSwiL3Byb2Mvc2VsZi9mZCIpfSxjcmVhdGVTdGFuZGFyZFN0cmVhbXM6KCk9PntkLnN0ZGluP0F0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGluIixkLnN0ZGluKTpBdC5zeW1saW5rKCIv'@;
put 'ZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxkLnN0ZG91dD9BdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsZC5zdGRvdXQpOkF0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxkLnN0ZGVycj9BdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsZC5z'@;
put 'dGRlcnIpOkF0LnN5bWxpbmsoIi9kZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiksQXQub3BlbigiL2Rldi9zdGRpbiIsMCksQXQub3BlbigiL2Rldi9zdGRvdXQiLDEpLEF0Lm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sZW5zdXJlRXJybm9FcnJvcjooKT0+e0F0LkVycm5vRXJyb3J8fChBdC5FcnJu'@;
put 'b0Vycm9yPWZ1bmN0aW9uKHN0LGd0KXt0aGlzLm5vZGU9Z3QsdGhpcy5zZXRFcnJubz1mdW5jdGlvbihSdCl7dGhpcy5lcnJubz1SdH0sdGhpcy5zZXRFcnJubyhzdCksdGhpcy5tZXNzYWdlPSJGUyBlcnJvciJ9LEF0LkVycm5vRXJyb3IucHJvdG90eXBlPW5ldyBFcnJvcixBdC5FcnJub0Vy'@;
put 'cm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BdC5FcnJub0Vycm9yLFs0NF0uZm9yRWFjaChzdD0+e0F0LmdlbmVyaWNFcnJvcnNbc3RdPW5ldyBBdC5FcnJub0Vycm9yKHN0KSxBdC5nZW5lcmljRXJyb3JzW3N0XS5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiJ9KSl9LHN0YXRp'@;
put 'Y0luaXQ6KCk9PntBdC5lbnN1cmVFcnJub0Vycm9yKCksQXQubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxBdC5tb3VudCh1byx7fSwiLyIpLEF0LmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLEF0LmNyZWF0ZURlZmF1bHREZXZpY2VzKCksQXQuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVz'@;
put 'KCksQXQuZmlsZXN5c3RlbXM9e01FTUZTOnVvfX0saW5pdDooc3QsZ3QsUnQpPT57QXQuaW5pdC5pbml0aWFsaXplZD0hMCxBdC5lbnN1cmVFcnJub0Vycm9yKCksZC5zdGRpbj1zdHx8ZC5zdGRpbixkLnN0ZG91dD1ndHx8ZC5zdGRvdXQsZC5zdGRlcnI9UnR8fGQuc3RkZXJyLEF0LmNyZWF0'@;
put 'ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0OigpPT57QXQuaW5pdC5pbml0aWFsaXplZD0hMTtmb3IodmFyIHN0PTA7c3Q8QXQuc3RyZWFtcy5sZW5ndGg7c3QrKyl7dmFyIGd0PUF0LnN0cmVhbXNbc3RdO2d0JiZBdC5jbG9zZShndCl9fSxnZXRNb2RlOihzdCxndCk9Pnt2YXIgUnQ9MDtyZXR1'@;
put 'cm4gc3QmJihSdHw9MzY1KSxndCYmKFJ0fD0xNDYpLFJ0fSxmaW5kT2JqZWN0OihzdCxndCk9Pnt2YXIgUnQ9QXQuYW5hbHl6ZVBhdGgoc3QsZ3QpO3JldHVybiBSdC5leGlzdHM/UnQub2JqZWN0Om51bGx9LGFuYWx5emVQYXRoOihzdCxndCk9Pnt0cnl7c3Q9KHRuPUF0Lmxvb2t1cFBhdGgo'@;
put 'c3Qse2ZvbGxvdzohZ3R9KSkucGF0aH1jYXRjaHt9dmFyIFJ0PXtpc1Jvb3Q6ITEsZXhpc3RzOiExLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ITEscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVjdDpudWxsfTt0cnl7dmFyIHRuPUF0Lmxv'@;
put 'b2t1cFBhdGgoc3Qse3BhcmVudDohMH0pO1J0LnBhcmVudEV4aXN0cz0hMCxSdC5wYXJlbnRQYXRoPXRuLnBhdGgsUnQucGFyZW50T2JqZWN0PXRuLm5vZGUsUnQubmFtZT1SaS5iYXNlbmFtZShzdCksdG49QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiFndH0pLFJ0LmV4aXN0cz0hMCxSdC5w'@;
put 'YXRoPXRuLnBhdGgsUnQub2JqZWN0PXRuLm5vZGUsUnQubmFtZT10bi5ub2RlLm5hbWUsUnQuaXNSb290PSIvIj09PXRuLnBhdGh9Y2F0Y2god24pe1J0LmVycm9yPXduLmVycm5vfXJldHVybiBSdH0sY3JlYXRlUGF0aDooc3QsZ3QsUnQsdG4pPT57c3Q9InN0cmluZyI9PXR5cGVvZiBzdD9z'@;
put 'dDpBdC5nZXRQYXRoKHN0KTtmb3IodmFyIHduPWd0LnNwbGl0KCIvIikucmV2ZXJzZSgpO3duLmxlbmd0aDspe3ZhciBzcj13bi5wb3AoKTtpZihzcil7dmFyIGxyPVJpLmpvaW4yKHN0LHNyKTt0cnl7QXQubWtkaXIobHIpfWNhdGNoe31zdD1scn19cmV0dXJuIGxyfSxjcmVhdGVGaWxlOihz'@;
put 'dCxndCxSdCx0bix3bik9Pnt2YXIgc3I9Umkuam9pbjIoInN0cmluZyI9PXR5cGVvZiBzdD9zdDpBdC5nZXRQYXRoKHN0KSxndCksbHI9QXQuZ2V0TW9kZSh0bix3bik7cmV0dXJuIEF0LmNyZWF0ZShzcixscil9LGNyZWF0ZURhdGFGaWxlOihzdCxndCxSdCx0bix3bixzcik9Pnt2YXIgbHI9'@;
put 'Z3Q7c3QmJihzdD0ic3RyaW5nIj09dHlwZW9mIHN0P3N0OkF0LmdldFBhdGgoc3QpLGxyPWd0P1JpLmpvaW4yKHN0LGd0KTpzdCk7dmFyIFJyPUF0LmdldE1vZGUodG4sd24pLGdvPUF0LmNyZWF0ZShscixScik7aWYoUnQpe2lmKCJzdHJpbmciPT10eXBlb2YgUnQpe2Zvcih2YXIgTW89bmV3'@;
put 'IEFycmF5KFJ0Lmxlbmd0aCksZm89MCxKbz1SdC5sZW5ndGg7Zm88Sm87KytmbylNb1tmb109UnQuY2hhckNvZGVBdChmbyk7UnQ9TW99QXQuY2htb2QoZ28sMTQ2fFJyKTt2YXIgWWk9QXQub3Blbihnbyw1NzcpO0F0LndyaXRlKFlpLFJ0LDAsUnQubGVuZ3RoLDAsc3IpLEF0LmNsb3NlKFlp'@;
put 'KSxBdC5jaG1vZChnbyxScil9cmV0dXJuIGdvfSxjcmVhdGVEZXZpY2U6KHN0LGd0LFJ0LHRuKT0+e3ZhciB3bj1SaS5qb2luMigic3RyaW5nIj09dHlwZW9mIHN0P3N0OkF0LmdldFBhdGgoc3QpLGd0KSxzcj1BdC5nZXRNb2RlKCEhUnQsISF0bik7QXQuY3JlYXRlRGV2aWNlLm1ham9yfHwo'@;
put 'QXQuY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgbHI9QXQubWFrZWRldihBdC5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gQXQucmVnaXN0ZXJEZXZpY2UobHIse29wZW46UnI9PntSci5zZWVrYWJsZT0hMX0sY2xvc2U6UnI9Pnt0biYmdG4uYnVmZmVyJiZ0bi5idWZmZXIubGVu'@;
put 'Z3RoJiZ0bigxMCl9LHJlYWQ6KFJyLGdvLE1vLGZvLEpvKT0+e2Zvcih2YXIgWWk9MCxZcz0wO1lzPGZvO1lzKyspe3ZhciBJbDt0cnl7SWw9UnQoKX1jYXRjaHt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09SWwmJjA9PT1ZaSl0aHJvdyBuZXcgQXQuRXJybm9FcnJv'@;
put 'cig2KTtpZihudWxsPT1JbClicmVhaztZaSsrLGdvW01vK1lzXT1JbH1yZXR1cm4gWWkmJihSci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxZaX0sd3JpdGU6KFJyLGdvLE1vLGZvLEpvKT0+e2Zvcih2YXIgWWk9MDtZaTxmbztZaSsrKXRyeXt0bihnb1tNbytZaV0pfWNhdGNoe3Rocm93'@;
put 'IG5ldyBBdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gZm8mJihSci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxZaX19KSxBdC5ta2Rldih3bixzcixscil9LGZvcmNlTG9hZEZpbGU6c3Q9PntpZihzdC5pc0RldmljZXx8c3QuaXNGb2xkZXJ8fHN0Lmxpbmt8fHN0LmNvbnRlbnRzKXJldHVy'@;
put 'biEwO3Rocm93IHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSI/bmV3IEVycm9yKCJMYXp5IGxvYWRpbmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1dCBpdCB3YXMgbm90LiBMYXp5IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3'@;
put 'ZWIgd29ya2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIG9uIHRoZSBtYWluIHRocmVhZC4iKTpuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIHdpdGhvdXQgcmVhZCgpIG9yIFhNTEh0dHBSZXF1ZXN0LiIpfSxjcmVhdGVMYXp5RmlsZTooc3QsZ3QsUnQsdG4s'@;
put 'd24pPT57ZnVuY3Rpb24gc3IoKXt0aGlzLmxlbmd0aEtub3duPSExLHRoaXMuY2h1bmtzPVtdfWlmKHNyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZm8pe2lmKCEoZm8+dGhpcy5sZW5ndGgtMXx8Zm88MCkpe3ZhciBKbz1mbyV0aGlzLmNodW5rU2l6ZTtyZXR1cm4gdGhpcy5nZXR0ZXIoZm8v'@;
put 'dGhpcy5jaHVua1NpemV8MClbSm9dfX0sc3IucHJvdG90eXBlLnNldERhdGFHZXR0ZXI9ZnVuY3Rpb24oZm8pe3RoaXMuZ2V0dGVyPWZvfSxzci5wcm90b3R5cGUuY2FjaGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZm89bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGZvLm9wZW4oIkhFQUQiLFJ0LCEx'@;
put 'KSxmby5zZW5kKG51bGwpLCEoZm8uc3RhdHVzPj0yMDAmJmZvLnN0YXR1czwzMDB8fDMwND09PWZvLnN0YXR1cykpdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBsb2FkICIrUnQrIi4gU3RhdHVzOiAiK2ZvLnN0YXR1cyk7dmFyIEpvLFlpPU51bWJlcihmby5nZXRSZXNwb25zZUhlYWRlcigi'@;
put 'Q29udGVudC1sZW5ndGgiKSksWXM9KEpvPWZvLmdldFJlc3BvbnNlSGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiYiYnl0ZXMiPT09Sm8sSWw9KEpvPWZvLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LUVuY29kaW5nIikpJiYiZ3ppcCI9PT1KbyxNbD0xMDQ4NTc2O1lzfHwoTWw9WWkpO3Zh'@;
put 'ciBRdT10aGlzO1F1LnNldERhdGFHZXR0ZXIoY2w9Pnt2YXIgQWk9Y2wqTWwsam89KGNsKzEpKk1sLTE7aWYoam89TWF0aC5taW4oam8sWWktMSksdm9pZCAwPT09UXUuY2h1bmtzW2NsXSYmKFF1LmNodW5rc1tjbF09KChxYyxMbCk9PntpZihxYz5MbCl0aHJvdyBuZXcgRXJyb3IoImludmFs'@;
put 'aWQgcmFuZ2UgKCIrcWMrIiwgIitMbCsiKSBvciBubyBieXRlcyByZXF1ZXN0ZWQhIik7aWYoTGw+WWktMSl0aHJvdyBuZXcgRXJyb3IoIm9ubHkgIitZaSsiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTt2YXIgdGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKHRjLm9wZW4o'@;
put 'IkdFVCIsUnQsITEpLFlpIT09TWwmJnRjLnNldFJlcXVlc3RIZWFkZXIoIlJhbmdlIiwiYnl0ZXM9IitxYysiLSIrTGwpLHRjLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHRjLm92ZXJyaWRlTWltZVR5cGUmJnRjLm92ZXJyaWRlTWltZVR5cGUoInRleHQvcGxhaW47IGNoYXJzZXQ9eC11'@;
put 'c2VyLWRlZmluZWQiKSx0Yy5zZW5kKG51bGwpLCEodGMuc3RhdHVzPj0yMDAmJnRjLnN0YXR1czwzMDB8fDMwND09PXRjLnN0YXR1cykpdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBsb2FkICIrUnQrIi4gU3RhdHVzOiAiK3RjLnN0YXR1cyk7cmV0dXJuIHZvaWQgMCE9PXRjLnJlc3BvbnNl'@;
put 'P25ldyBVaW50OEFycmF5KHRjLnJlc3BvbnNlfHxbXSk6R28odGMucmVzcG9uc2VUZXh0fHwiIiwhMCl9KShBaSxqbykpLHZvaWQgMD09PVF1LmNodW5rc1tjbF0pdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIFF1LmNodW5rc1tjbF19KSwhSWwmJllpfHwoTWw9WWk9'@;
put 'MSxZaT10aGlzLmdldHRlcigwKS5sZW5ndGgsTWw9WWksVygiTGF6eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD1ZaSx0aGlzLl9jaHVua1NpemU9TWwsdGhpcy5sZW5ndGhLbm93'@;
put 'bj0hMH0sdHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyJDYW5ub3QgZG8gc3luY2hyb25vdXMgYmluYXJ5IFhIUnMgb3V0c2lkZSB3ZWJ3b3JrZXJzIGluIG1vZGVybiBicm93c2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIjt2YXIgbHI9e2lz'@;
put 'RGV2aWNlOiExLHVybDpSdH0sUnI9QXQuY3JlYXRlRmlsZShzdCxndCxscix0bix3bik7bHIuY29udGVudHM/UnIuY29udGVudHM9bHIuY29udGVudHM6bHIudXJsJiYoUnIuY29udGVudHM9bnVsbCxSci51cmw9bHIudXJsKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhScix7dXNlZEJ5dGVz'@;
put 'OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBnbz17fTtmdW5jdGlvbiBNbyhmbyxKbyxZaSxZcyxJbCl7dmFyIE1sPWZvLm5vZGUuY29udGVudHM7aWYoSWw+PU1sLmxlbmd0aClyZXR1cm4gMDt2YXIgUXU9TWF0aC5taW4oTWwubGVuZ3RoLUls'@;
put 'LFlzKTtpZihNbC5zbGljZSlmb3IodmFyIGNsPTA7Y2w8UXU7Y2wrKylKb1tZaStjbF09TWxbSWwrY2xdO2Vsc2UgZm9yKGNsPTA7Y2w8UXU7Y2wrKylKb1tZaStjbF09TWwuZ2V0KElsK2NsKTtyZXR1cm4gUXV9cmV0dXJuIE9iamVjdC5rZXlzKFJyLnN0cmVhbV9vcHMpLmZvckVhY2goZm89'@;
put 'Pnt2YXIgSm89UnIuc3RyZWFtX29wc1tmb107Z29bZm9dPWZ1bmN0aW9uKCl7cmV0dXJuIEF0LmZvcmNlTG9hZEZpbGUoUnIpLEpvLmFwcGx5KG51bGwsYXJndW1lbnRzKX19KSxnby5yZWFkPShmbyxKbyxZaSxZcyxJbCk9PihBdC5mb3JjZUxvYWRGaWxlKFJyKSxNbyhmbyxKbyxZaSxZcyxJ'@;
put 'bCkpLGdvLm1tYXA9KGZvLEpvLFlpLFlzLElsKT0+e0F0LmZvcmNlTG9hZEZpbGUoUnIpO3ZhciBNbD1nYShKbyk7aWYoIU1sKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gTW8oZm8sZXQsTWwsSm8sWWkpLHtwdHI6TWwsYWxsb2NhdGVkOiEwfX0sUnIuc3RyZWFtX29wcz1n'@;
put 'byxScn0sY3JlYXRlUHJlbG9hZGVkRmlsZTooc3QsZ3QsUnQsdG4sd24sc3IsbHIsUnIsZ28sTW8pPT57dmFyIFlpLElsLFF1LGZvPWd0P1hvLnJlc29sdmUoUmkuam9pbjIoc3QsZ3QpKTpzdDtmdW5jdGlvbiBKbyhZaSl7ZnVuY3Rpb24gWXMoSWwpe01vJiZNbygpLFJyfHxBdC5jcmVhdGVE'@;
put 'YXRhRmlsZShzdCxndCxJbCx0bix3bixnbyksc3ImJnNyKCksY24oKX1Ccm93c2VyLmhhbmRsZWRCeVByZWxvYWRQbHVnaW4oWWksZm8sWXMsKCk9PntsciYmbHIoKSxjbigpfSl8fFlzKFlpKX1PdCgpLCJzdHJpbmciPT10eXBlb2YgUnQ/KElsPWxyLFF1PSJhbCAiKyhZaT1SdCksKHZvaWQg'@;
put 'MCkoWWksY2w9PntaZShjbCwnTG9hZGluZyBkYXRhIGZpbGUgIicrWWkrJyIgZmFpbGVkIChubyBhcnJheUJ1ZmZlcikuJyksKFlpPT57Sm8oWWkpfSkobmV3IFVpbnQ4QXJyYXkoY2wpKSxRdSYmY24oKX0sY2w9PntpZighSWwpdGhyb3cnTG9hZGluZyBkYXRhIGZpbGUgIicrWWkrJyIgZmFp'@;
put 'bGVkLic7SWwoKX0pLFF1JiZPdCgpKTpKbyhSdCl9LGluZGV4ZWREQjooKT0+d2luZG93LmluZGV4ZWREQnx8d2luZG93Lm1vekluZGV4ZWREQnx8d2luZG93LndlYmtpdEluZGV4ZWREQnx8d2luZG93Lm1zSW5kZXhlZERCLERCX05BTUU6KCk9PiJFTV9GU18iK3dpbmRvdy5sb2NhdGlvbi5w'@;
put 'YXRobmFtZSxEQl9WRVJTSU9OOjIwLERCX1NUT1JFX05BTUU6IkZJTEVfREFUQSIsc2F2ZUZpbGVzVG9EQjooc3QsZ3QsUnQpPT57Z3Q9Z3R8fCgoKT0+e30pLFJ0PVJ0fHwoKCk9Pnt9KTt2YXIgdG49QXQuaW5kZXhlZERCKCk7dHJ5e3ZhciB3bj10bi5vcGVuKEF0LkRCX05BTUUoKSxBdC5E'@;
put 'Ql9WRVJTSU9OKX1jYXRjaChzcil7cmV0dXJuIFJ0KHNyKX13bi5vbnVwZ3JhZGVuZWVkZWQ9KCk9PntXKCJjcmVhdGluZyBkYiIpLHduLnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZShBdC5EQl9TVE9SRV9OQU1FKX0sd24ub25zdWNjZXNzPSgpPT57dmFyIHNyPXduLnJlc3VsdC50cmFuc2Fj'@;
put 'dGlvbihbQXQuREJfU1RPUkVfTkFNRV0sInJlYWR3cml0ZSIpLGxyPXNyLm9iamVjdFN0b3JlKEF0LkRCX1NUT1JFX05BTUUpLFJyPTAsZ289MCxNbz1zdC5sZW5ndGg7ZnVuY3Rpb24gZm8oKXswPT1nbz9ndCgpOlJ0KCl9c3QuZm9yRWFjaChKbz0+e3ZhciBZaT1sci5wdXQoQXQuYW5hbHl6'@;
put 'ZVBhdGgoSm8pLm9iamVjdC5jb250ZW50cyxKbyk7WWkub25zdWNjZXNzPSgpPT57KytScitnbz09TW8mJmZvKCl9LFlpLm9uZXJyb3I9KCk9PntnbysrLFJyK2dvPT1NbyYmZm8oKX19KSxzci5vbmVycm9yPVJ0fSx3bi5vbmVycm9yPVJ0fSxsb2FkRmlsZXNGcm9tREI6KHN0LGd0LFJ0KT0+'@;
put 'e2d0PWd0fHwoKCk9Pnt9KSxSdD1SdHx8KCgpPT57fSk7dmFyIHRuPUF0LmluZGV4ZWREQigpO3RyeXt2YXIgd249dG4ub3BlbihBdC5EQl9OQU1FKCksQXQuREJfVkVSU0lPTil9Y2F0Y2goc3Ipe3JldHVybiBSdChzcil9d24ub251cGdyYWRlbmVlZGVkPVJ0LHduLm9uc3VjY2Vzcz0oKT0+'@;
put 'e3ZhciBzcj13bi5yZXN1bHQ7dHJ5e3ZhciBscj1zci50cmFuc2FjdGlvbihbQXQuREJfU1RPUkVfTkFNRV0sInJlYWRvbmx5Iil9Y2F0Y2goWWkpe3JldHVybiB2b2lkIFJ0KFlpKX12YXIgUnI9bHIub2JqZWN0U3RvcmUoQXQuREJfU1RPUkVfTkFNRSksZ289MCxNbz0wLGZvPXN0Lmxlbmd0'@;
put 'aDtmdW5jdGlvbiBKbygpezA9PU1vP2d0KCk6UnQoKX1zdC5mb3JFYWNoKFlpPT57dmFyIFlzPVJyLmdldChZaSk7WXMub25zdWNjZXNzPSgpPT57QXQuYW5hbHl6ZVBhdGgoWWkpLmV4aXN0cyYmQXQudW5saW5rKFlpKSxBdC5jcmVhdGVEYXRhRmlsZShSaS5kaXJuYW1lKFlpKSxSaS5iYXNl'@;
put 'bmFtZShZaSksWXMucmVzdWx0LCEwLCEwLCEwKSwrK2dvK01vPT1mbyYmSm8oKX0sWXMub25lcnJvcj0oKT0+e01vKyssZ28rTW89PWZvJiZKbygpfX0pLGxyLm9uZXJyb3I9UnR9LHduLm9uZXJyb3I9UnR9fSxJaT17REVGQVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0OmZ1bmN0aW9uKHN0'@;
put 'LGd0LFJ0KXtpZihSaS5pc0FicyhndCkpcmV0dXJuIGd0O3ZhciB0bjtpZih0bj0tMTAwPT09c3Q/QXQuY3dkKCk6SWkuZ2V0U3RyZWFtRnJvbUZEKHN0KS5wYXRoLDA9PWd0Lmxlbmd0aCl7aWYoIVJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTtyZXR1cm4gdG59cmV0dXJuIFJpLmpv'@;
put 'aW4yKHRuLGd0KX0sZG9TdGF0OmZ1bmN0aW9uKHN0LGd0LFJ0KXt0cnl7dmFyIHRuPXN0KGd0KX1jYXRjaChScil7aWYoUnImJlJyLm5vZGUmJlJpLm5vcm1hbGl6ZShndCkhPT1SaS5ub3JtYWxpemUoQXQuZ2V0UGF0aChSci5ub2RlKSkpcmV0dXJuLTU0O3Rocm93IFJyfVN0W1J0Pj4yXT10'@;
put 'bi5kZXYsU3RbUnQrOD4+Ml09dG4uaW5vLFN0W1J0KzEyPj4yXT10bi5tb2RlLFF0W1J0KzE2Pj4yXT10bi5ubGluayxTdFtSdCsyMD4+Ml09dG4udWlkLFN0W1J0KzI0Pj4yXT10bi5naWQsU3RbUnQrMjg+PjJdPXRuLnJkZXYsRm49W3RuLnNpemU+Pj4wLChacj10bi5zaXplLCtNYXRoLmFi'@;
put 'cyhacik+PTE/WnI+MD8oMHxNYXRoLm1pbigrTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KSk+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sU3RbUnQrNDA+PjJdPUZuWzBdLFN0W1J0KzQ0Pj4yXT1GblsxXSxTdFtSdCs0'@;
put 'OD4+Ml09NDA5NixTdFtSdCs1Mj4+Ml09dG4uYmxvY2tzO3ZhciB3bj10bi5hdGltZS5nZXRUaW1lKCksc3I9dG4ubXRpbWUuZ2V0VGltZSgpLGxyPXRuLmN0aW1lLmdldFRpbWUoKTtyZXR1cm4gRm49W01hdGguZmxvb3Iod24vMWUzKT4+PjAsKFpyPU1hdGguZmxvb3Iod24vMWUzKSwrTWF0'@;
put 'aC5hYnMoWnIpPj0xP1pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoWnIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0KzU2Pj4yXT1GblswXSxTdFtSdCs2MD4+Ml09Rm5bMV0sUXRb'@;
put 'UnQrNjQ+PjJdPXduJTFlMyoxZTMsRm49W01hdGguZmxvb3Ioc3IvMWUzKT4+PjAsKFpyPU1hdGguZmxvb3Ioc3IvMWUzKSwrTWF0aC5hYnMoWnIpPj0xP1pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoWnIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFpy'@;
put 'LSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0KzcyPj4yXT1GblswXSxTdFtSdCs3Nj4+Ml09Rm5bMV0sUXRbUnQrODA+PjJdPXNyJTFlMyoxZTMsRm49W01hdGguZmxvb3IobHIvMWUzKT4+PjAsKFpyPU1hdGguZmxvb3IobHIvMWUzKSwrTWF0aC5hYnMoWnIpPj0xP1py'@;
put 'PjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoWnIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0Kzg4Pj4yXT1GblswXSxTdFtSdCs5Mj4+Ml09Rm5bMV0sUXRbUnQrOTY+PjJdPWxyJTFl'@;
put 'MyoxZTMsRm49W3RuLmlubz4+PjAsKFpyPXRuLmlubywrTWF0aC5hYnMoWnIpPj0xP1pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoWnIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0'@;
put 'KzEwND4+Ml09Rm5bMF0sU3RbUnQrMTA4Pj4yXT1GblsxXSwwfSxkb01zeW5jOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighQXQuaXNGaWxlKGd0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDMpO2lmKDImdG4pcmV0dXJuIDA7dmFyIHNyPXl0LnNsaWNlKHN0LHN0'@;
put 'K1J0KTtBdC5tc3luYyhndCxzcix3bixSdCx0bil9LHZhcmFyZ3M6dm9pZCAwLGdldDpmdW5jdGlvbigpe3JldHVybiBJaS52YXJhcmdzKz00LFN0W0lpLnZhcmFyZ3MtND4+Ml19LGdldFN0cjpmdW5jdGlvbihzdCl7cmV0dXJuIGNyKHN0KX0sZ2V0U3RyZWFtRnJvbUZEOmZ1bmN0aW9uKHN0'@;
put 'KXt2YXIgZ3Q9QXQuZ2V0U3RyZWFtKHN0KTtpZighZ3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7cmV0dXJuIGd0fX0sUXM9W107ZnVuY3Rpb24gRnMoc3Qpe3RyeXtyZXR1cm4gZ2UuZ3JvdyhzdC1vdC5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLGxpKGdlLmJ1ZmZlciksMX1jYXRjaHt9'@;
put 'fXZhciBlYz17fTtmdW5jdGlvbiBDYSgpe2lmKCFDYS5zdHJpbmdzKXt2YXIgc3Q9e1VTRVI6IndlYl91c2VyIixMT0dOQU1FOiJ3ZWJfdXNlciIsUEFUSDoiLyIsUFdEOiIvIixIT01FOiIvaG9tZS93ZWJfdXNlciIsTEFORzooIm9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRv'@;
put 'ci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixfOl98fCIuL3RoaXMucHJvZ3JhbSJ9O2Zvcih2YXIgZ3QgaW4gZWMpdm9pZCAwPT09ZWNbZ3RdP2RlbGV0ZSBzdFtndF06c3RbZ3RdPWVjW2d0XTt2YXIgUnQ9W107Zm9y'@;
put 'KHZhciBndCBpbiBzdClSdC5wdXNoKGd0KyI9IitzdFtndF0pO0NhLnN0cmluZ3M9UnR9cmV0dXJuIENhLnN0cmluZ3N9ZnVuY3Rpb24gRGwoc3Qpe3JldHVybiBzdCU0PT0wJiYoc3QlMTAwIT0wfHxzdCU0MDA9PTApfXZhciB4Mj1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAs'@;
put 'MzFdLHU0PVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sQ2Q9ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3N0fHwoc3Q9dGhpcyksdGhpcy5wYXJlbnQ9c3QsdGhpcy5tb3VudD1zdC5tb3VudCx0aGlzLm1vdW50ZWQ9bnVsbCx0aGlzLmlkPUF0Lm5leHRJbm9kZSsrLHRoaXMu'@;
put 'bmFtZT1ndCx0aGlzLm1vZGU9UnQsdGhpcy5ub2RlX29wcz17fSx0aGlzLnN0cmVhbV9vcHM9e30sdGhpcy5yZGV2PXRufTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDZC5wcm90b3R5cGUse3JlYWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiAzNjU9PSgzNjUmdGhpcy5tb2RlKX0sc2V0OmZ1'@;
put 'bmN0aW9uKHN0KXtzdD90aGlzLm1vZGV8PTM2NTp0aGlzLm1vZGUmPS0zNjZ9fSx3cml0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDE0Nj09KDE0NiZ0aGlzLm1vZGUpfSxzZXQ6ZnVuY3Rpb24oc3Qpe3N0P3RoaXMubW9kZXw9MTQ2OnRoaXMubW9kZSY9LTE0N319LGlzRm9sZGVyOntnZXQ6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gQXQuaXNEaXIodGhpcy5tb2RlKX19LGlzRGV2aWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQXQuaXNDaHJkZXYodGhpcy5tb2RlKX19fSksQXQuRlNOb2RlPUNkLEF0LnN0YXRpY0luaXQoKTt2YXIgSnU9e2I6ZnVuY3Rpb24oc3QsZ3QsUnQpe3Rocm93IG5l'@;
put 'dyBOcihzdCkuaW5pdChndCxSdCksc3R9LGw6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3RyeXtpZihndD1JaS5nZXRTdHIoZ3QpLGd0PUlpLmNhbGN1bGF0ZUF0KHN0LGd0KSwtOCZSdClyZXR1cm4tMjg7dmFyIHduPUF0Lmxvb2t1cFBhdGgoZ3Qse2ZvbGxvdzohMH0pLm5vZGU7aWYoIXduKXJl'@;
put 'dHVybi00NDt2YXIgc3I9IiI7cmV0dXJuIDQmUnQmJihzcis9InIiKSwyJlJ0JiYoc3IrPSJ3IiksMSZSdCYmKHNyKz0ieCIpLHNyJiZBdC5ub2RlUGVybWlzc2lvbnMod24sc3IpPy0yOjB9Y2F0Y2gobHIpe2lmKHZvaWQgMD09PUF0fHwhKGxyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikp'@;
put 'dGhyb3cgbHI7cmV0dXJuLWxyLmVycm5vfX0saTpmdW5jdGlvbihzdCxndCxSdCl7SWkudmFyYXJncz1SdDt0cnl7dmFyIHRuPUlpLmdldFN0cmVhbUZyb21GRChzdCk7c3dpdGNoKGd0KXtjYXNlIDA6cmV0dXJuKHduPUlpLmdldCgpKTwwPy0yODpBdC5jcmVhdGVTdHJlYW0odG4sd24pLmZk'@;
put 'O2Nhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNzpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIHRuLmZsYWdzO2Nhc2UgNDp2YXIgd249SWkuZ2V0KCk7cmV0dXJuIHRuLmZsYWdzfD13biwwO2Nhc2UgNTpyZXR1cm4gd249SWkuZ2V0KCksa3Rbd24rMD4+MV09MiwwO2Nhc2UgMTY6Y2FzZSA4OmRl'@;
put 'ZmF1bHQ6cmV0dXJuLTI4O2Nhc2UgOTpyZXR1cm4gU3RbTXcoKT4+Ml09MjgsLTF9fWNhdGNoKGxyKXtpZih2b2lkIDA9PT1BdHx8IShsciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IGxyO3JldHVybi1sci5lcnJub319LHc6ZnVuY3Rpb24oc3QsZ3Qpe3RyeXt2YXIgUnQ9SWku'@;
put 'Z2V0U3RyZWFtRnJvbUZEKHN0KTtyZXR1cm4gSWkuZG9TdGF0KEF0LnN0YXQsUnQucGF0aCxndCl9Y2F0Y2godG4pe2lmKHZvaWQgMD09PUF0fHwhKHRuIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgdG47cmV0dXJuLXRuLmVycm5vfX0seDpmdW5jdGlvbihzdCxndCxSdCl7SWku'@;
put 'dmFyYXJncz1SdDt0cnl7dmFyIHRuPUlpLmdldFN0cmVhbUZyb21GRChzdCk7c3dpdGNoKGd0KXtjYXNlIDIxNTA5OmNhc2UgMjE1MDU6Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6Y2FzZSAyMTUwNjpjYXNlIDIxNTA3OmNhc2UgMjE1MDg6Y2FzZSAyMTUyMzpjYXNlIDIxNTI0'@;
put 'OnJldHVybiB0bi50dHk/MDotNTk7Y2FzZSAyMTUxOTppZighdG4udHR5KXJldHVybi01OTt2YXIgd249SWkuZ2V0KCk7cmV0dXJuIFN0W3duPj4yXT0wLDA7Y2FzZSAyMTUyMDpyZXR1cm4gdG4udHR5Py0yODotNTk7Y2FzZSAyMTUzMTpyZXR1cm4gd249SWkuZ2V0KCksQXQuaW9jdGwodG4s'@;
put 'Z3Qsd24pO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaChzcil7aWYodm9pZCAwPT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBzcjtyZXR1cm4tc3IuZXJybm99fSx1OmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXt0cnl7Z3Q9SWkuZ2V0U3RyKGd0KTt2YXIgd249MjU2'@;
put 'JnRuLHNyPTQwOTYmdG47cmV0dXJuIHRuJj0tNjQwMSxndD1JaS5jYWxjdWxhdGVBdChzdCxndCxzciksSWkuZG9TdGF0KHduP0F0LmxzdGF0OkF0LnN0YXQsZ3QsUnQpfWNhdGNoKGxyKXtpZih2b2lkIDA9PT1BdHx8IShsciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IGxyO3Jl'@;
put 'dHVybi1sci5lcnJub319LGQ6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe0lpLnZhcmFyZ3M9dG47dHJ5e2d0PUlpLmdldFN0cihndCksZ3Q9SWkuY2FsY3VsYXRlQXQoc3QsZ3QpO3ZhciB3bj10bj9JaS5nZXQoKTowO3JldHVybiBBdC5vcGVuKGd0LFJ0LHduKS5mZH1jYXRjaChzcil7aWYodm9p'@;
put 'ZCAwPT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBzcjtyZXR1cm4tc3IuZXJybm99fSx2OmZ1bmN0aW9uKHN0LGd0KXt0cnl7cmV0dXJuIHN0PUlpLmdldFN0cihzdCksSWkuZG9TdGF0KEF0LnN0YXQsc3QsZ3QpfWNhdGNoKFJ0KXtpZih2b2lkIDA9PT1BdHx8'@;
put 'IShSdCBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IFJ0O3JldHVybi1SdC5lcnJub319LHA6ZnVuY3Rpb24oc3QsZ3QsUnQpe3RyeXtyZXR1cm4gZ3Q9SWkuZ2V0U3RyKGd0KSxndD1JaS5jYWxjdWxhdGVBdChzdCxndCksMD09PVJ0P0F0LnVubGluayhndCk6NTEyPT09UnQ/QXQu'@;
put 'cm1kaXIoZ3QpOkVuKCJJbnZhbGlkIGZsYWdzIHBhc3NlZCB0byB1bmxpbmthdCIpLDB9Y2F0Y2godG4pe2lmKHZvaWQgMD09PUF0fHwhKHRuIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgdG47cmV0dXJuLXRuLmVycm5vfX0sajpmdW5jdGlvbigpe3JldHVybiEwfSxxOmZ1bmN0'@;
put 'aW9uKHN0LGd0LFJ0LHRuLHduLHNyLGxyKXt0cnl7dmFyIFJyPUlpLmdldFN0cmVhbUZyb21GRCh0biksZ289QXQubW1hcChScixzdCx3bixndCxSdCksTW89Z28ucHRyO3JldHVybiBTdFtzcj4+Ml09Z28uYWxsb2NhdGVkLFF0W2xyPj4yXT1NbywwfWNhdGNoKGZvKXtpZih2b2lkIDA9PT1B'@;
put 'dHx8IShmbyBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IGZvO3JldHVybi1mby5lcnJub319LHI6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24sc3Ipe3RyeXt2YXIgbHI9SWkuZ2V0U3RyZWFtRnJvbUZEKHduKTsyJlJ0JiZJaS5kb01zeW5jKHN0LGxyLGd0LHRuLHNyKSxBdC5tdW5t'@;
put 'YXAobHIpfWNhdGNoKFJyKXtpZih2b2lkIDA9PT1BdHx8IShSciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IFJyO3JldHVybi1Sci5lcnJub319LGE6ZnVuY3Rpb24oKXtFbigiIil9LHk6ZnVuY3Rpb24oc3QsZ3QsUnQpe3JldHVybiBmdW5jdGlvbiBsYShzdCxndCxSdCl7dmFy'@;
put 'IHRuPWZ1bmN0aW9uKHduLHNyKXt2YXIgbHI7Zm9yKFFzLmxlbmd0aD0wLHNyPj49Mjtscj15dFt3bisrXTspc3IrPTEwNSE9bHImc3IsUXMucHVzaCgxMDU9PWxyP1N0W3NyXTpybltzcisrPj4xXSksKytzcjtyZXR1cm4gUXN9KGd0LFJ0KTtyZXR1cm4gT3Jbc3RdLmFwcGx5KG51bGwsdG4p'@;
put 'fShzdCxndCxSdCl9LGU6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sazpmdW5jdGlvbihzdCxndCxSdCl7eXQuY29weVdpdGhpbihzdCxndCxndCtSdCl9LG86ZnVuY3Rpb24oc3Qpe3ZhciBndCx0bj15dC5sZW5ndGgsd249MjE0NzQ4MzY0ODtpZigoc3Q+Pj49MCk+d24pcmV0dXJu'@;
put 'ITE7Zm9yKHZhciBzcj0xO3NyPD00O3NyKj0yKXt2YXIgbHI9dG4qKDErLjIvc3IpO2lmKGxyPU1hdGgubWluKGxyLHN0KzEwMDY2MzI5NiksRnMoTWF0aC5taW4od24sKGd0PU1hdGgubWF4KHN0LGxyKSkrKDY1NTM2LWd0JTY1NTM2KSU2NTUzNikpKXJldHVybiEwfXJldHVybiExfSxzOmZ1'@;
put 'bmN0aW9uKHN0LGd0KXt2YXIgUnQ9MDtyZXR1cm4gQ2EoKS5mb3JFYWNoKGZ1bmN0aW9uKHRuLHduKXt2YXIgc3I9Z3QrUnQ7UXRbc3QrNCp3bj4+Ml09c3IsZnVuY3Rpb24obHIsUnIsZ28pe2Zvcih2YXIgTW89MDtNbzxsci5sZW5ndGg7KytNbylldFtScisrPj4wXT1sci5jaGFyQ29kZUF0'@;
put 'KE1vKTtldFtScj4+MF09MH0odG4sc3IpLFJ0Kz10bi5sZW5ndGgrMX0pLDB9LHQ6ZnVuY3Rpb24oc3QsZ3Qpe3ZhciBSdD1DYSgpO1F0W3N0Pj4yXT1SdC5sZW5ndGg7dmFyIHRuPTA7cmV0dXJuIFJ0LmZvckVhY2goZnVuY3Rpb24od24pe3RuKz13bi5sZW5ndGgrMX0pLFF0W2d0Pj4yXT10'@;
put 'biwwfSxmOmZ1bmN0aW9uKHN0LGd0KXshZnVuY3Rpb24gUmgoc3Qpe3dlfHwoZC5vbkV4aXQmJmQub25FeGl0KHN0KSxFZT0hMCksVChzdCxuZXcgJHIoc3QpKX0oc3QpfSxjOmZ1bmN0aW9uKHN0KXt0cnl7dmFyIGd0PUlpLmdldFN0cmVhbUZyb21GRChzdCk7cmV0dXJuIEF0LmNsb3NlKGd0'@;
put 'KSwwfWNhdGNoKFJ0KXtpZih2b2lkIDA9PT1BdHx8IShSdCBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IFJ0O3JldHVybiBSdC5lcnJub319LGc6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3RyeXt2YXIgd249ZnVuY3Rpb24oc3IsbHIsUnIsZ28pe2Zvcih2YXIgTW89MCxmbz0wO2Zv'@;
put 'PFJyO2ZvKyspe3ZhciBKbz1RdFtscj4+Ml0sWWk9UXRbbHIrND4+Ml07bHIrPTg7dmFyIFlzPUF0LnJlYWQoc3IsZXQsSm8sWWksdm9pZCAwKTtpZihZczwwKXJldHVybi0xO2lmKE1vKz1ZcyxZczxZaSlicmVha31yZXR1cm4gTW99KElpLmdldFN0cmVhbUZyb21GRChzdCksZ3QsUnQpO3Jl'@;
put 'dHVybiBRdFt0bj4+Ml09d24sMH1jYXRjaChzcil7aWYodm9pZCAwPT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBzcjtyZXR1cm4gc3IuZXJybm99fSxtOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXt0cnl7dmFyIHNyPShnbz1SdCkrMjA5NzE1Mj4+PjA8NDE5'@;
put 'NDMwNS0hIShScj1ndCk/KFJyPj4+MCkrNDI5NDk2NzI5NipnbzpOYU47aWYoaXNOYU4oc3IpKXJldHVybiA2MTt2YXIgbHI9SWkuZ2V0U3RyZWFtRnJvbUZEKHN0KTtyZXR1cm4gQXQubGxzZWVrKGxyLHNyLHRuKSxGbj1bbHIucG9zaXRpb24+Pj4wLChacj1sci5wb3NpdGlvbiwrTWF0aC5h'@;
put 'YnMoWnIpPj0xP1pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoWnIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W3duPj4yXT1GblswXSxTdFt3bis0Pj4yXT1GblsxXSxsci5nZXRkZW50'@;
put 'cyYmMD09PXNyJiYwPT09dG4mJihsci5nZXRkZW50cz1udWxsKSwwfWNhdGNoKE1vKXtpZih2b2lkIDA9PT1BdHx8IShNbyBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IE1vO3JldHVybiBNby5lcnJub312YXIgUnIsZ299LGg6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3RyeXt2YXIg'@;
put 'd249ZnVuY3Rpb24oc3IsbHIsUnIsZ28pe2Zvcih2YXIgTW89MCxmbz0wO2ZvPFJyO2ZvKyspe3ZhciBKbz1RdFtscj4+Ml0sWWk9UXRbbHIrND4+Ml07bHIrPTg7dmFyIFlzPUF0LndyaXRlKHNyLGV0LEpvLFlpLHZvaWQgMCk7aWYoWXM8MClyZXR1cm4tMTtNbys9WXN9cmV0dXJuIE1vfShJ'@;
put 'aS5nZXRTdHJlYW1Gcm9tRkQoc3QpLGd0LFJ0KTtyZXR1cm4gUXRbdG4+PjJdPXduLDB9Y2F0Y2goc3Ipe2lmKHZvaWQgMD09PUF0fHwhKHNyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgc3I7cmV0dXJuIHNyLmVycm5vfX0sbjpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIE9oKHN0LGd0LFJ0LHRuKXt2YXIgd249U3RbdG4rNDA+PjJdLHNyPXt0bV9zZWM6U3RbdG4+PjJdLHRtX21pbjpTdFt0bis0Pj4yXSx0bV9ob3VyOlN0W3RuKzg+PjJdLHRtX21kYXk6U3RbdG4rMTI+PjJdLHRtX21vbjpTdFt0bisxNj4+Ml0sdG1feWVhcjpTdFt0bisy'@;
put 'MD4+Ml0sdG1fd2RheTpTdFt0bisyND4+Ml0sdG1feWRheTpTdFt0bisyOD4+Ml0sdG1faXNkc3Q6U3RbdG4rMzI+PjJdLHRtX2dtdG9mZjpTdFt0biszNj4+Ml0sdG1fem9uZTp3bj9jcih3bik6IiJ9LGxyPWNyKFJ0KSxScj17IiVjIjoiJWEgJWIgJWQgJUg6JU06JVMgJVkiLCIlRCI6IiVt'@;
put 'LyVkLyV5IiwiJUYiOiIlWS0lbS0lZCIsIiVoIjoiJWIiLCIlciI6IiVJOiVNOiVTICVwIiwiJVIiOiIlSDolTSIsIiVUIjoiJUg6JU06JVMiLCIleCI6IiVtLyVkLyV5IiwiJVgiOiIlSDolTTolUyIsIiVFYyI6IiVjIiwiJUVDIjoiJUMiLCIlRXgiOiIlbS8lZC8leSIsIiVFWCI6IiVIOiVN'@;
put 'OiVTIiwiJUV5IjoiJXkiLCIlRVkiOiIlWSIsIiVPZCI6IiVkIiwiJU9lIjoiJWUiLCIlT0giOiIlSCIsIiVPSSI6IiVJIiwiJU9tIjoiJW0iLCIlT00iOiIlTSIsIiVPUyI6IiVTIiwiJU91IjoiJXUiLCIlT1UiOiIlVSIsIiVPViI6IiVWIiwiJU93IjoiJXciLCIlT1ciOiIlVyIsIiVPeSI6'@;
put 'IiV5In07Zm9yKHZhciBnbyBpbiBScilscj1sci5yZXBsYWNlKG5ldyBSZWdFeHAoZ28sImciKSxScltnb10pO3ZhciBNbz1bIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZm89WyJKYW51YXJ5IiwiRmVicnVh'@;
put 'cnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdO2Z1bmN0aW9uIEpvKEFpLGpvLHFjKXtmb3IodmFyIExsPSJudW1iZXIiPT10eXBlb2YgQWk/QWkudG9TdHJpbmcoKTpBaXx8'@;
put 'IiI7TGwubGVuZ3RoPGpvOylMbD1xY1swXStMbDtyZXR1cm4gTGx9ZnVuY3Rpb24gWWkoQWksam8pe3JldHVybiBKbyhBaSxqbywiMCIpfWZ1bmN0aW9uIFlzKEFpLGpvKXtmdW5jdGlvbiBxYyh0Yyl7cmV0dXJuIHRjPDA/LTE6dGM+MD8xOjB9dmFyIExsO3JldHVybiAwPT09KExsPXFjKEFp'@;
put 'LmdldEZ1bGxZZWFyKCktam8uZ2V0RnVsbFllYXIoKSkpJiYwPT09KExsPXFjKEFpLmdldE1vbnRoKCktam8uZ2V0TW9udGgoKSkpJiYoTGw9cWMoQWkuZ2V0RGF0ZSgpLWpvLmdldERhdGUoKSkpLExsfWZ1bmN0aW9uIElsKEFpKXtzd2l0Y2goQWkuZ2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4g'@;
put 'bmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIEFpO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUo'@;
put 'QWkuZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKS0xLDExLDMxKTtjYXNlIDY6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIE1sKEFpKXt2YXIgam89ZnVuY3Rpb24oVHJ0LFZUKXtmb3Io'@;
put 'dmFyIEUxPW5ldyBEYXRlKFRydC5nZXRUaW1lKCkpO1ZUPjA7KXt2YXIgRHJ0PURsKEUxLmdldEZ1bGxZZWFyKCkpLGFaPUUxLmdldE1vbnRoKCksU2xlPShEcnQ/eDI6dTQpW2FaXTtpZighKFZUPlNsZS1FMS5nZXREYXRlKCkpKXJldHVybiBFMS5zZXREYXRlKEUxLmdldERhdGUoKStWVCks'@;
put 'RTE7VlQtPVNsZS1FMS5nZXREYXRlKCkrMSxFMS5zZXREYXRlKDEpLGFaPDExP0UxLnNldE1vbnRoKGFaKzEpOihFMS5zZXRNb250aCgwKSxFMS5zZXRGdWxsWWVhcihFMS5nZXRGdWxsWWVhcigpKzEpKX1yZXR1cm4gRTF9KG5ldyBEYXRlKEFpLnRtX3llYXIrMTkwMCwwLDEpLEFpLnRtX3lk'@;
put 'YXkpLHFjPW5ldyBEYXRlKGpvLmdldEZ1bGxZZWFyKCksMCw0KSxMbD1uZXcgRGF0ZShqby5nZXRGdWxsWWVhcigpKzEsMCw0KSx0Yz1JbChxYyksQXJ0PUlsKExsKTtyZXR1cm4gWXModGMsam8pPD0wP1lzKEFydCxqbyk8PTA/am8uZ2V0RnVsbFllYXIoKSsxOmpvLmdldEZ1bGxZZWFyKCk6'@;
put 'am8uZ2V0RnVsbFllYXIoKS0xfXZhciBRdT17IiVhIjpmdW5jdGlvbihBaSl7cmV0dXJuIE1vW0FpLnRtX3dkYXldLnN1YnN0cmluZygwLDMpfSwiJUEiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gTW9bQWkudG1fd2RheV19LCIlYiI6ZnVuY3Rpb24oQWkpe3JldHVybiBmb1tBaS50bV9tb25dLnN1'@;
put 'YnN0cmluZygwLDMpfSwiJUIiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gZm9bQWkudG1fbW9uXX0sIiVDIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKChBaS50bV95ZWFyKzE5MDApLzEwMHwwLDIpfSwiJWQiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gWWkoQWkudG1fbWRheSwyKX0sIiVlIjpmdW5jdGlv'@;
put 'bihBaSl7cmV0dXJuIEpvKEFpLnRtX21kYXksMiwiICIpfSwiJWciOmZ1bmN0aW9uKEFpKXtyZXR1cm4gTWwoQWkpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpfSwiJUciOmZ1bmN0aW9uKEFpKXtyZXR1cm4gTWwoQWkpfSwiJUgiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gWWkoQWkudG1faG91ciwy'@;
put 'KX0sIiVJIjpmdW5jdGlvbihBaSl7dmFyIGpvPUFpLnRtX2hvdXI7cmV0dXJuIDA9PWpvP2pvPTEyOmpvPjEyJiYoam8tPTEyKSxZaShqbywyKX0sIiVqIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKEFpLnRtX21kYXkrZnVuY3Rpb24oam8scWMpe2Zvcih2YXIgTGw9MCx0Yz0wO3RjPD1xYztM'@;
put 'bCs9am9bdGMrK10pO3JldHVybiBMbH0oRGwoQWkudG1feWVhcisxOTAwKT94Mjp1NCxBaS50bV9tb24tMSksMyl9LCIlbSI6ZnVuY3Rpb24oQWkpe3JldHVybiBZaShBaS50bV9tb24rMSwyKX0sIiVNIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKEFpLnRtX21pbiwyKX0sIiVuIjpmdW5jdGlv'@;
put 'bigpe3JldHVybiJcbiJ9LCIlcCI6ZnVuY3Rpb24oQWkpe3JldHVybiBBaS50bV9ob3VyPj0wJiZBaS50bV9ob3VyPDEyPyJBTSI6IlBNIn0sIiVTIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKEFpLnRtX3NlYywyKX0sIiV0IjpmdW5jdGlvbigpe3JldHVybiJcdCJ9LCIldSI6ZnVuY3Rpb24o'@;
put 'QWkpe3JldHVybiBBaS50bV93ZGF5fHw3fSwiJVUiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gWWkoTWF0aC5mbG9vcigoQWkudG1feWRheSs3LUFpLnRtX3dkYXkpLzcpLDIpfSwiJVYiOmZ1bmN0aW9uKEFpKXt2YXIgam89TWF0aC5mbG9vcigoQWkudG1feWRheSs3LShBaS50bV93ZGF5KzYpJTcp'@;
put 'LzcpO2lmKChBaS50bV93ZGF5KzM3MS1BaS50bV95ZGF5LTIpJTc8PTImJmpvKyssam8pe2lmKDUzPT1qbyl7dmFyIHFjPShBaS50bV93ZGF5KzM3MS1BaS50bV95ZGF5KSU3OzQ9PXFjfHwzPT1xYyYmRGwoQWkudG1feWVhcil8fChqbz0xKX19ZWxzZXtqbz01Mjt2YXIgTGw9KEFpLnRtX3dk'@;
put 'YXkrNy1BaS50bV95ZGF5LTEpJTc7KDQ9PUxsfHw1PT1MbCYmRGwoQWkudG1feWVhciU0MDAtMSkpJiZqbysrfXJldHVybiBZaShqbywyKX0sIiV3IjpmdW5jdGlvbihBaSl7cmV0dXJuIEFpLnRtX3dkYXl9LCIlVyI6ZnVuY3Rpb24oQWkpe3JldHVybiBZaShNYXRoLmZsb29yKChBaS50bV95'@;
put 'ZGF5KzctKEFpLnRtX3dkYXkrNiklNykvNyksMil9LCIleSI6ZnVuY3Rpb24oQWkpe3JldHVybihBaS50bV95ZWFyKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpfSwiJVkiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gQWkudG1feWVhcisxOTAwfSwiJXoiOmZ1bmN0aW9uKEFpKXt2YXIgam89'@;
put 'QWkudG1fZ210b2ZmO3JldHVybihqbz49MD8iKyI6Ii0iKSsoIjAwMDAiKyhqbz0oam89TWF0aC5hYnMoam8pLzYwKS82MCoxMDAram8lNjApKS5zbGljZSgtNCl9LCIlWiI6ZnVuY3Rpb24oQWkpe3JldHVybiBBaS50bV96b25lfSwiJSUiOmZ1bmN0aW9uKCl7cmV0dXJuIiUifX07Zm9yKHZh'@;
put 'ciBnbyBpbiBscj1sci5yZXBsYWNlKC8lJS9nLCJcMFwwIiksUXUpbHIuaW5jbHVkZXMoZ28pJiYobHI9bHIucmVwbGFjZShuZXcgUmVnRXhwKGdvLCJnIiksUXVbZ29dKHNyKSkpO3ZhciBjbD1Hbyhscj1sci5yZXBsYWNlKC9cMFwwL2csIiUiKSwhMSk7cmV0dXJuIGNsLmxlbmd0aD5ndD8w'@;
put 'OihldC5zZXQoY2wsc3QpLGNsLmxlbmd0aC0xKX0oc3QsZ3QsUnQsdG4pfX07KGZ1bmN0aW9uKCl7dmFyIHN0PXthOkp1fTtmdW5jdGlvbiBndCh3bixzcil7ZC5hc209d24uZXhwb3J0cyxsaSgoZ2U9ZC5hc20ueikuYnVmZmVyKSxRbi51bnNoaWZ0KGQuYXNtLkEpLGNuKCl9ZnVuY3Rpb24g'@;
put 'UnQod24pe2d0KHduLmluc3RhbmNlKX1mdW5jdGlvbiB0bih3bil7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gUHIoc3Qpe3RyeXtpZihzdD09bXImJmgpcmV0dXJuIG5ldyBVaW50OEFycmF5KGgpO3Rocm93ImJvdGggYXN5bmMgYW5k'@;
put 'IHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChndCl7RW4oZ3QpfX0obXIpfSkudGhlbihmdW5jdGlvbihzcil7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHNyLHN0KX0pLnRoZW4oZnVuY3Rpb24oc3Ipe3JldHVybiBzcn0pLnRoZW4od24sZnVuY3Rpb24o'@;
put 'c3Ipe2llKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK3NyKSxFbihzcil9KX1pZihPdCgpLGQuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gZC5pbnN0YW50aWF0ZVdhc20oc3QsZ3QpfWNhdGNoKHduKXtpZSgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxs'@;
put 'YmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIit3biksYSh3bil9KGh8fCJmdW5jdGlvbiIhPXR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ3x8T24obXIpfHxmdW5jdGlvbiBKbihzdCl7cmV0dXJuIHN0LnN0YXJ0c1dpdGgoImZpbGU6Ly8iKX0obXIpfHwiZnVuY3Rpb24i'@;
put 'IT10eXBlb2YgZmV0Y2g/dG4oUnQpOmZldGNoKG1yLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih3bil7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHduLHN0KS50aGVuKFJ0LGZ1bmN0aW9uKHNyKXtyZXR1cm4gaWUoIndhc20gc3Ry'@;
put 'ZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK3NyKSxpZSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSx0bihSdCl9KX0pKS5jYXRjaChhKX0pKCksZC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4oZC5fX193YXNtX2NhbGxfY3RvcnM9ZC5h'@;
put 'c20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgTTE9ZC5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihNMT1kLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPWQuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1l'@;
put 'bnRzKX0sTXU9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9ZnVuY3Rpb24oKXtyZXR1cm4oTXU9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9ZC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxhdT1kLl9lbXNjcmlwdGVuX2JpbmRfR3Jh'@;
put 'cGh2aXpfdmVyc2lvbl8wPWZ1bmN0aW9uKCl7cmV0dXJuKGF1PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9ZC5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4MT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4oeDE9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPWQuYXNtLkUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRTI9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1mdW5jdGlvbigpe3JldHVybihFMj1kLl9lbXNjcmlwdGVuX2JpbmRfR3Jh'@;
put 'cGh2aXpfY3JlYXRlRmlsZV8yPWQuYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sJDc9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RSZXN1bHRfMD1mdW5jdGlvbigpe3JldHVybigkNz1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdFJlc3VsdF8wPWQuYXNtLkcp'@;
put 'LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZDQ9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPWZ1bmN0aW9uKCl7cmV0dXJuKGQ0PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1kLmFzbS5IKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFN3PWQuX2Vtc2Ny'@;
put 'aXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFN3PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPWQuYXNtLkkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07ZC5fZnJlZT1mdW5jdGlvbigpe3JldHVybihkLl9mcmVlPWQu'@;
put 'YXNtLkspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZC5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuKGQuX21hbGxvYz1kLmFzbS5MKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBlbSxNdz1kLl9fX2Vycm5vX2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKE13PWQuX19fZXJybm9fbG9j'@;
put 'YXRpb249ZC5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4dz1kLl9lbXNjcmlwdGVuX2J1aWx0aW5fbWVtYWxpZ249ZnVuY3Rpb24oKXtyZXR1cm4oeHc9ZC5fZW1zY3JpcHRlbl9idWlsdGluX21lbWFsaWduPWQuYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdG09ZC5fX19j'@;
put 'eGFfaXNfcG9pbnRlcl90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuKHRtPWQuX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1kLmFzbS5PKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIEV3KHN0KXtmdW5jdGlvbiBndCgpe2VtfHwoZW09ITAsZC5jYWxsZWRSdW49ITAsRWV8fChkLm5vRlNJ'@;
put 'bml0fHxBdC5pbml0LmluaXRpYWxpemVkfHxBdC5pbml0KCksQXQuaWdub3JlUGVybWlzc2lvbnM9ITEsWXIoUW4pLGwoZCksZC5vblJ1bnRpbWVJbml0aWFsaXplZCYmZC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLGZ1bmN0aW9uKCl7aWYoZC5wb3N0UnVuKWZvcigiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgZC5wb3N0UnVuJiYoZC5wb3N0UnVuPVtkLnBvc3RSdW5dKTtkLnBvc3RSdW4ubGVuZ3RoOylSdD1kLnBvc3RSdW4uc2hpZnQoKSxNci51bnNoaWZ0KFJ0KTt2YXIgUnQ7WXIoTXIpfSgpKSl9X3I+MHx8KGZ1bmN0aW9uKCl7aWYoZC5wcmVSdW4pZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBk'@;
put 'LnByZVJ1biYmKGQucHJlUnVuPVtkLnByZVJ1bl0pO2QucHJlUnVuLmxlbmd0aDspUnQ9ZC5wcmVSdW4uc2hpZnQoKSxGci51bnNoaWZ0KFJ0KTt2YXIgUnQ7WXIoRnIpfSgpLF9yPjB8fChkLnNldFN0YXR1cz8oZC5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9u'@;
put 'KCl7c2V0VGltZW91dChmdW5jdGlvbigpe2Quc2V0U3RhdHVzKCIiKX0sMSksZ3QoKX0sMSkpOmd0KCkpKX1pZihkLl9fX3N0YXJ0X2VtX2pzPTE3NTgyOCxkLl9fX3N0b3BfZW1fanM9MTc1OTI2LHZ0PWZ1bmN0aW9uIHN0KCl7ZW18fEV3KCksZW18fCh2dD1zdCl9LGQucHJlSW5pdClmb3Io'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGQucHJlSW5pdCYmKGQucHJlSW5pdD1bZC5wcmVJbml0XSk7ZC5wcmVJbml0Lmxlbmd0aD4wOylkLnByZUluaXQucG9wKCkoKTtmdW5jdGlvbiBNZCgpe31mdW5jdGlvbiBOVChzdCl7cmV0dXJuKHN0fHxNZCkuX19jYWNoZV9ffWZ1bmN0aW9uIHNaKHN0LGd0'@;
put 'KXt2YXIgUnQ9TlQoZ3QpLHRuPVJ0W3N0XTtyZXR1cm4gdG58fCgodG49T2JqZWN0LmNyZWF0ZSgoZ3R8fE1kKS5wcm90b3R5cGUpKS5wdHI9c3QsUnRbc3RdPXRuKX1FdygpLChNZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNZC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1NZCxNZC5wcm90'@;
put 'b3R5cGUuX19jbGFzc19fPU1kLE1kLl9fY2FjaGVfXz17fSxkLldyYXBwZXJPYmplY3Q9TWQsZC5nZXRDYWNoZT1OVCxkLndyYXBQb2ludGVyPXNaLGQuY2FzdE9iamVjdD1mdW5jdGlvbihzdCxndCl7cmV0dXJuIHNaKHN0LnB0cixndCl9LGQuTlVMTD1zWigwKSxkLmRlc3Ryb3k9ZnVuY3Rp'@;
put 'b24oc3Qpe2lmKCFzdC5fX2Rlc3Ryb3lfXyl0aHJvdyJFcnJvcjogQ2Fubm90IGRlc3Ryb3kgb2JqZWN0LiAoRGlkIHlvdSBjcmVhdGUgaXQgeW91cnNlbGY/KSI7c3QuX19kZXN0cm95X18oKSxkZWxldGUgTlQoc3QuX19jbGFzc19fKVtzdC5wdHJdfSxkLmNvbXBhcmU9ZnVuY3Rpb24oc3Qs'@;
put 'Z3Qpe3JldHVybiBzdC5wdHI9PT1ndC5wdHJ9LGQuZ2V0UG9pbnRlcj1mdW5jdGlvbihzdCl7cmV0dXJuIHN0LnB0cn0sZC5nZXRDbGFzcz1mdW5jdGlvbihzdCl7cmV0dXJuIHN0Ll9fY2xhc3NfX307dmFyIE9hPXtidWZmZXI6MCxzaXplOjAscG9zOjAsdGVtcHM6W10sbmVlZGVkOjAscHJl'@;
put 'cGFyZTpmdW5jdGlvbigpe2lmKE9hLm5lZWRlZCl7Zm9yKHZhciBzdD0wO3N0PE9hLnRlbXBzLmxlbmd0aDtzdCsrKWQuX2ZyZWUoT2EudGVtcHNbc3RdKTtPYS50ZW1wcy5sZW5ndGg9MCxkLl9mcmVlKE9hLmJ1ZmZlciksT2EuYnVmZmVyPTAsT2Euc2l6ZSs9T2EubmVlZGVkLE9hLm5lZWRl'@;
put 'ZD0wfU9hLmJ1ZmZlcnx8KE9hLnNpemUrPTEyOCxPYS5idWZmZXI9ZC5fbWFsbG9jKE9hLnNpemUpLFplKE9hLmJ1ZmZlcikpLE9hLnBvcz0wfSxhbGxvYzpmdW5jdGlvbihzdCxndCl7WmUoT2EuYnVmZmVyKTt2YXIgUnQsd249c3QubGVuZ3RoKmd0LkJZVEVTX1BFUl9FTEVNRU5UO3JldHVy'@;
put 'biBPYS5wb3MrKHduPXduKzcmLTgpPj1PYS5zaXplPyhaZSh3bj4wKSxPYS5uZWVkZWQrPXduLFJ0PWQuX21hbGxvYyh3biksT2EudGVtcHMucHVzaChSdCkpOihSdD1PYS5idWZmZXIrT2EucG9zLE9hLnBvcys9d24pLFJ0fSxjb3B5OmZ1bmN0aW9uKHN0LGd0LFJ0KXtzd2l0Y2goUnQ+Pj49'@;
put 'MCxndC5CWVRFU19QRVJfRUxFTUVOVCl7Y2FzZSAyOlJ0Pj4+PTE7YnJlYWs7Y2FzZSA0OlJ0Pj4+PTI7YnJlYWs7Y2FzZSA4OlJ0Pj4+PTN9Zm9yKHZhciB0bj0wO3RuPHN0Lmxlbmd0aDt0bisrKWd0W1J0K3RuXT1zdFt0bl19fTtmdW5jdGlvbiBrdyhzdCl7aWYoInN0cmluZyI9PXR5cGVv'@;
put 'ZiBzdCl7dmFyIGd0PUdvKHN0KSxSdD1PYS5hbGxvYyhndCxldCk7cmV0dXJuIE9hLmNvcHkoZ3QsZXQsUnQpLFJ0fXJldHVybiBzdH1mdW5jdGlvbiBvMygpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIG1jKHN0LGd0'@;
put 'KXtzdCYmIm9iamVjdCI9PXR5cGVvZiBzdCYmKHN0PXN0LnB0ciksZ3QmJiJvYmplY3QiPT10eXBlb2YgZ3QmJihndD1ndC5wdHIpLHRoaXMucHRyPU11KHN0LGd0KSxOVChtYylbdGhpcy5wdHJdPXRoaXN9cmV0dXJuKG8zLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE1kLnByb3RvdHlwZSkp'@;
put 'LmNvbnN0cnVjdG9yPW8zLG8zLnByb3RvdHlwZS5fX2NsYXNzX189bzMsbzMuX19jYWNoZV9fPXt9LGQuVm9pZFB0cj1vMyxvMy5wcm90b3R5cGUuX19kZXN0cm95X189bzMucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7TTEodGhpcy5wdHIpfSwobWMucHJvdG90eXBlPU9iamVj'@;
put 'dC5jcmVhdGUoTWQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9bWMsbWMucHJvdG90eXBlLl9fY2xhc3NfXz1tYyxtYy5fX2NhY2hlX189e30sZC5HcmFwaHZpej1tYyxtYy5wcm90b3R5cGUudmVyc2lvbj1tYy5wcm90b3R5cGUudmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiBjcihhdSh0aGlz'@;
put 'LnB0cikpfSxtYy5wcm90b3R5cGUubGFzdEVycm9yPW1jLnByb3RvdHlwZS5sYXN0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gY3IoeDEodGhpcy5wdHIpKX0sbWMucHJvdG90eXBlLmNyZWF0ZUZpbGU9bWMucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oc3QsZ3Qpe3ZhciBSdD10aGlz'@;
put 'LnB0cjtPYS5wcmVwYXJlKCksc3Q9c3QmJiJvYmplY3QiPT10eXBlb2Ygc3Q/c3QucHRyOmt3KHN0KSxndD1ndCYmIm9iamVjdCI9PXR5cGVvZiBndD9ndC5wdHI6a3coZ3QpLEUyKFJ0LHN0LGd0KX0sbWMucHJvdG90eXBlLmxhc3RSZXN1bHQ9bWMucHJvdG90eXBlLmxhc3RSZXN1bHQ9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gY3IoJDcodGhpcy5wdHIpKX0sbWMucHJvdG90eXBlLmxheW91dD1tYy5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKHN0LGd0LFJ0KXt2YXIgdG49dGhpcy5wdHI7cmV0dXJuIE9hLnByZXBhcmUoKSxzdD1zdCYmIm9iamVjdCI9PXR5cGVvZiBzdD9zdC5wdHI6a3co'@;
put 'c3QpLGd0PWd0JiYib2JqZWN0Ij09dHlwZW9mIGd0P2d0LnB0cjprdyhndCksUnQ9UnQmJiJvYmplY3QiPT10eXBlb2YgUnQ/UnQucHRyOmt3KFJ0KSxjcihkNCh0bixzdCxndCxSdCkpfSxtYy5wcm90b3R5cGUuX19kZXN0cm95X189bWMucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9u'@;
put 'KCl7U3codGhpcy5wdHIpfSxjLnJlYWR5fSk7bGV0IEN3LFhVO2Z1bmN0aW9uIE9KZShjKXtyZXR1cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9E'@;
put 'VEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0iJHtjLndpZHRofSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19Y2xhc3MgRFR7Y29uc3RydWN0b3IobCl7dGhpcy5fbW9kdWxlPWx9c3Rh'@;
put 'dGljIGxvYWQoKXtyZXR1cm4oWFV8fChYVT1mdW5jdGlvbiBMSmUoYyl7cmV0dXJuIGZ1bmN0aW9uIElKZShjLGwpe2Zvcih2YXIgYT0wLGQ9W10saD0rIWwsZj0wO2MubGVuZ3RoOyl7dmFyIF89U0plKGMsaHx8bCk7aWYoIm9iamVjdCI9PXR5cGVvZiBfKXtmb3IoaD8obD1udWxsLF8udy5s'@;
put 'ZW5ndGg9PV8udSYmKGQucHVzaChsPV8udyksZis9Xy51KSk6KGQucHVzaChsKSxfLmU9MCk7IV8ubDspe3ZhciBUPURKZShjLF8sbCk7VHx8Z2MoNSksbD9fLmU9Xy55OihkLnB1c2goVCksZis9VC5sZW5ndGgsd0plKF8udywwLFQubGVuZ3RoKSxfLncuc2V0KFQsXy53Lmxlbmd0aC1ULmxl'@;
put 'bmd0aCkpfWE9Xy5iKzQqXy5jfWVsc2UgYT1fO2M9Yy5zdWJhcnJheShhKX1yZXR1cm4gZnVuY3Rpb24oVyxpZSl7aWYoMT09Vy5sZW5ndGgpcmV0dXJuIFdbMF07Zm9yKHZhciBnZT1uZXcgUWwoaWUpLHdlPTAsRWU9MDt3ZTxXLmxlbmd0aDsrK3dlKXt2YXIgWmU9V1t3ZV07Z2Uuc2V0KFpl'@;
put 'LEVlKSxFZSs9WmUubGVuZ3RofXJldHVybiBnZX0oZCxmKX0oZnVuY3Rpb24oYSl7Y29uc3QgZD1hLmxlbmd0aCxoPVtdO2xldCBmPTAsXz0wLFQ9LTE7Zm9yKGxldCBXPTA7VzxkO1crKyl7Y29uc3QgaWU9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1'@;
put 'dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjs8PT4/QFtdXl9ge3x9fiInLmluZGV4T2YoYVtXXSk7aWYoLTEhPT1pZSlpZihUPDApVD1pZTtlbHNle1QrPTkxKmllLGZ8PVQ8PF8sXys9KDgxOTEmVCk+ODg/MTM6MTQ7ZG97aC5wdXNoKDI1NSZmKSxmPj49OCxfLT04fXdoaWxlKF8+Nyk7'@;
put 'VD0tMX19cmV0dXJuIFQ+LTEmJmgucHVzaCgyNTUmKGZ8VDw8XykpLG5ldyBVaW50OEFycmF5KGgpfShjKSl9KCd2NyNhU1hqOl1DWzkwPnlLbWE6S2AyaHR6OHsvWy4lWStOQUU+aXJVLz9fSmheTWl9ViJ+Znl6UyEoMXk2JVNdYnFoRmh3Pn5+cnVAXlBhYzd+TjRuOUJrT2pjWj1GOE4kd0Ii'@;
put 'c11pbl0lVEdePUpENExiZ04sVys2YFU3KilwaiQyLkddPHAwfUA2dzFYPGl7Lmc8NzJ2dV0yK1UvRHsvY352Q3N0PXpjUXJvcF43STZiOWRNenxba1ohcyJBR3lURSV5Mzw0RFtAP2Z8fCRTYmZ1JktuVVhQOSFGZzU9YForKUFKY1o8K3hoL2I8TER3W1hyZEwhWVoofmMyQ2Z4enFHJV94K0t6'@;
put 'P0ZEXj04RWV6R3doP11sODhLc0NTJjpWKC8ybncqKGFdVTtaeXdlI1VSfFR1OTUsQm9fImVXcUNBUWIkXk1DVDYkKmJkNWdWZ3VYT104Uml1ZUBpZSFsPEZhazshWyxwakZjfThne3toWSxbTDRxMSt5TkNlKGlkMClSdFZEIVtEPkJ8WFcpMlM/MHJIPUZ4VUFXSndpRSJ6dVpmMClSQn4yS2Jl'@;
put 'P1JLRkJlM3g7N0xST31mOzU5Z3EvWVcpSFBnVmF0a29DZ1JZQl1xeUJQNDR+bz9tQ0BCWnIlTUxZVDg+dUNRYFF5JW09TjgzSnhXMlRYQCJdYWhedHMhTWY1Lzw5YkVNQWtZciwjQD94SFthTTkqbU08TU8qI15HZ21gdldXeXREM3Q8UXlSdXh8SWVXKTpXTXRfd29tOHZHUFBSVGN6bUd2Jnsz'@;
put 'dmx7eldtfT1Ybz1JOU89VWo/bHttfjxVbS5SR15RZ2VMVzw5RkZGbTpVVSlrdFhLSyFlRllJZ10rVlVzcyJZSFRWZ3A4cyxkS244cnk4JW84Ynk4JVFodGczbEx4NzhKWE9JUHN9N3Refl50diF7emBAN2N7XVAvbn52VFRCNmVrOHBJIyZNKmRSI20zTlRVZGU9KiEybC5SNUtXZkgxMlZGTGIk'@;
put 'YXk6akRJcDxnb2I8S0BgV2Z0ZHQ7Wy5yNTdIMUZzNTc7JTlMb2V3QyRHL1AlTl5IbHZ1dDlyOE0iNHxAdWprVXQ2QixeeiIvNGs/bCZnVktgI0F4YFpoOHZOR29MeFthY3U0JjpFV1U5Lkp4SVRBKmdDP2M4MkpLakRMaFhGVTFDVVcqMnYzbEFhZjkma099cyE+TH0xIUV+citaX2ddNU9QaS9J'@;
put 'eEBGO2VjPFRaLHJ+ImR+NEliTTw7LDVRaT16UUJscy81JmVeKGNbVTttVWVQNGdJUkpxJnB5VG9CVGckMnFwfnYqRmVGb3JnWis0dkxPb3BvdE0rbDNpayglKkREeWtLMzAvYStaWy58ayMvZkw4MFMuXkFaVCE4ZTF1LlhlfVcjNmZyJlFPdSxCeGJAKHlvKjMpQGdgXyslLz9pUHpSRl4jeFli'@;
put 'Vkx7QEg8SClMREUyVyouO00xdEUham5jLktAZV9GLktaXlAoaW9nSSE2VD5Sfjd+M1Z9TDB8Qkg+I0xpSmNhUU5qKlk4VWJeNG9xcF0mP3NfO2sqPk4vM3htVmhwOHxDMXNaT29aOFVvOHdwOWx4P0okLCFtPkIkLylCOTRKSDMwL2JmLnByPDxuW1s/dnJiWnM2K0olYE9qUk1HdnlmQDosSWVR'@;
put 'cllIeUgzRkEyXUYvTEt1fUMvSVFjJUYiSWkrQWtBU2VQaTtae1loVCt7bVp9PCxQfFk0bD5BMmRfLCZTX3Q5bD8yQ1EjWXBjU2VNQVBBOEhoWjE7XmFnP1JJTiZLWEpqSXhIUGRtd1lLcHUoL31iWl8sJnhdSmorOX0me0RBdUhyOEViRXg6az1BOCVhIWYiYjY+NDpffjVkZWBFdF97S3l9SUp8'@;
put 'STxYcFt9ITkoOWE3Yl9CZ34mezxiNnJrUDxsSml4I00seFRHWj4mMXUval0wdzBrNUJidllJTkppX08hQjt4KShaOTc7KjtzPnxrPjEzV1tkJjkyLjl4clQrMyQkdipyRjhBZWBAQjtNOWhdUEZpKy44U0ZVZ1hpVCRWUWtwTiFGPEIuTFJteTxAfXAuQ08jNVZGLGczR1M6e3c6dSxqcFYkRFEs'@;
put 'XWQhI115czxpN2dMM3Uxb2JSaWMjYVtdYCV1MC5LQGhlQjgyJkNlI10rO1U3RiNwe3EkOyU2fl1gczJ3fGo3R3BFVjk9U3hxXkZ6RTl2VnhqRnJgM1lnWHxxZnBFZzoqcjQ1cFslLkIobFd0c09tZWtxL2V4QlYrYkQqT3xOKUkyK1lPREgpTHlRdWxTeTJscEBWPlUmemY4bGl8JiFvLlMmfTAv'@;
put 'cXc1O245VXlOOV89QFMjeCMvSS81cXE1VG03ZG9oNDBQYXk1Rj91Skc6SlRRcnhKZlg/d3REI04hWUhMe1JKcD5HM2h4Smk1QHRXWF9SeDt9LCpFIy8xMGlNQ28zXTNOJXJvUDBieEJXcnsoQDc/XWA5L1k5bG16emB7M0c5Z3B3OjlNRVssWCpZdHhrcE9dcSRWOz96emBrSnlVRzJDXjxfMlZa'@;
put 'LF08MV8hYHpDcDs3NCxOKiJVcmwiR1QyZjU6N0VFZmR7JWwmOzAzU0h5dilbZyN6bUc3Jk5LW0E3Z1p8aTpmU3RCcURPKU1XLk16WmMibDkuNiFiU0FPSCpZVV1GU0t7WSRVRCM0fjpJQUhdMms1SWxENU1xd0NUWSE5K2xYPXN8M1MvV0Jtfng8IWxNSk58OVZSX1kvNltvKDhgS2t2P2tlRmk9'@;
put 'JS43cFQjeDJIVEh2ZmA9NTpHXSpAW2cuTzZAdCJAZTw5SmdIbi56QnR4bU1sU0I7enkhKV5gc25zX2F7elBfKisqQClxOSpIYFc3TGtWfTc1UG5mQlt6Jj9DXktrUnIuYihiJVBEQThWK0FJLjY6IyFEQDY4fV9GamsmcGhXc1RJMkNeWGA3Oz1FeTkpYHxOUVtyJFRmRlcqVGxvQj1JXjZdS2tM'@;
put 'JCg+MiM+JCE5X3lDJj8mTH4qZyYlaH12eHs4MklyZTs3JUMqYjglbmR3ZXNURThSVU01USMyUHA3JS9AZU1kTnc1KWw3SHB5OUhwKDZhPHw9NFNgWSpSYDEodGIlbSZfamYkWF5gRitic1QkTzY9fm1yKFU3PGF1Q2kvbktAZWliQ1NvRUJXPGlaPlcjUnxLc3k7OWk7cERPXV1KVDsmdik2ZFpf'@;
put 'QTBkPngySjhYOF8xVi5nME04ViMoUkUzTTMwL1RfS09+IyZgXWApJDRseD8rOCtJVUNMSzN9alZ2QHk1VDFWTyxdcWxseF9yfnJPJC50THJ3NTZicHBDSjpMLCVKbTxqcDIiQEYqTXliaDlNKW0xQnRjT0RuWVQ9JjpRWVZaYkg1SUBKWGxjYXIzR0hCSndDZD9TYlVzLyl5KjlNJkhWZVUmUk9l'@;
put 'XWoyYzJvMEZ6Q2ZtK0FrQVNYb2Q5L0dJe2M9RklZN2JeSH1OZ3l4ISlUeUpvUkN4LmRUS2N2VGhkLnRrc1lWMiM5WF9DYDZeLDxjeDFxO3BvfHsmVFlpb1NPTXlZIm47PUZHTD07cURlUndDXTdVblcxWSZwRzNGR3JPTEhWXTA0TVcjNU1LX2Q4bChjRi45XiRGXy9zIzJ7cCM6Y0t2aUYyXyJA'@;
put 'cFI/fExvLzI1WWtHPDt3M207RipPfDpmZXF+dmhoYXphLDY0SXEhbS99RklmTTtYZShfPXkmZ0Y5JCM6IzIjbTNPXVFLXypwRFY2XiROe0BJcStxOzUkL2cqeiYsNnNjRFkoa1dZaF8kSC5KcmxZMT5MYj5lflU7TU97VTM8TUhESmFyVVRLPnN3QDI1PzYuQV47KSZueG9halY2UWg8UzhsYExZ'@;
put 'cXoyVCN5RHt9ejwiZVs1c2M4b1NrK1Q4YGdPfSNecXwka2hic3RZIilGU0w9Z2R0WXJbQjJtdlVzIm1WeWtJb1IkVnhLeXNib1s/NU1dMSJEVmV6OFdbUm15MzRIRXxMNHMvfn1AOj1xa041RWhpVl1ndiQ8SyNbOyEwU2xrKG48R3E0ZmouPGRVRFglZyYyMytqNXpnfTZwOSVISmsjVC5qPEos'@;
put 'PXxpYjw1YTt3JEpuJU57QHV5cCt2fGhLaX0/LFIpIUM4M2Asdj43XW09LHlzM1FscTRXKzU9WD0vMSguSmZgNjFySFQ7NjFqKUwpKHJid0RIZzFtPS45Lip+SDlDa3RATz5hPl02ZWsyYUI1MXp5OzNjWCVGNERuI2BOSGRBbmVxTHZ5W1cuNnVENy8mOjlxUHZ0SjkmIll5Zkd1RlZ7U3kxen1k'@;
put 'RVtTOXNbOltuTzhzdHg1dWg3ODk3KEJzNS9YOy85eSQ5NCZ5byQydz5iKSEiRiUzXSVkZj9eS0FQe1hXfUosWC9KVE5nMFUqOTUhSV49YFNaW0hqMmEldGl3KDRCciNofFo+JHA4bDhDZzdzcTV2eE84OEZyPDxmcThDY3xPPkRXMS9FT2s+PS81clFrS1t0S3F9JGA1MCNdVGtWPH5CTWBWfXc+'@;
put 'JExWa3daVlpUZj17dEs+PCRnUDJgLFlye0B3dVRUdExSRC9deyg0WndDeDovRyZ3eksiVUZ7LylvYHBuRkRvXmg5V09UNEFvKjpZU0BwPyNpSmo8KE5xQ1Y7ZE4lTTI7UnhLb2F2aT14Z0J6UzRKMXFaInBIXSY7Ok01ZUtRJWdjZio5KlM+ZE9JJip3I2M6L0dUMk99VTBHOW9ZcGhtQjFELHJ8'@;
put 'd2svTitKaVAuKz9GIXBlbEQxW0dqJlh2OTluZy4yIzVlOmIyRiR7e1U+MVNqWFZpSlsicnJUVH09b2BxWlEjYGg/PTJuUkM0OTk+cn1fQDhzKTYsRE5WSXJIcygjWXJ+NENuO3E9JE5BP3VaYktgSXk9QjtsbytPfSY6dnQ6T31vcDlYKFsmYykqUzsoXWpzdntLV31PPmIqXiw1PU98NWA2eWBX'@;
put 'bHQ/NiwyMH1iSU81STllOjdJViwraWQvfnxETylNUFsmViFNMnJAVSlicnRqYkshNC9CTDk/UDpzY2ZARE8/TDUjNktBeCtlYWp3QlVZdnsrdiJdVitASFs8UnQ/LixGSXE8TFk3dnhWcFdZKHUlN3dGQW0oRlkpRUc2RjpHbzR2MmtNQ207Rk1tc0NDbTh5YWJ2b31+b29VMU0hX1A6bT4xUGs6'@;
put 'bXQrRjEkN1NNUy5ANlBWTDh8Q3AwXzIrL1koWSo5Yy9FUCtfPS98TTkve0s4QzVJMkB8d1YkNmErKypKe3soWSp7KHJAcXszKFBnNVp+eXtLUkRyM1VXMSRfVV9uaGElXi9mJjdDQiJ5OSt8TWtkKFpNM1pmJDklVzU9a2V1dDRzKldlXU5pZ01AO2JoNVVHSDJTU2BoeHBJYW9sJkw0ISkoI2oi'@;
put 'Mzw9VWVoJjM7P2dYJUkxeXFWbiMhPzdJSlQpamhMQkxgQWMpO3YvUnEsLHlZPmQ3bXAuSUFIW3guWzFGKCYqYkojX3gmVTdJQEpsSXJaUTN5PSQ5ezdJOWNHbjA5dyJWczs3OjYwJDcwMyQ6KH4zaTteYH19JnkyY19jfVpeWEJ6fTspX2I6RUY+Vioma1QjXkp9QFRbRjd9PXwsJVU6e1pSXy9R'@;
put 'SiI8TVV2bW4oaXs9fCp7cWxILHxWS1Z9YiJHQT08K0E1aD8vQyRCcnNsPUtRMXh+elJfTyM+Tjw8aUZuRH04UEFLflcvb2ddfEZja0Zse0t5Tmk7ekcuLio6X1QrNU5SfEtRPGltfWcuPGVfK1A+dnlfaXJVWSpUJnlzZW5mKkxRPmJLZSxJInxmbHVsPm52XWQhQzgzMXRIRDhqcHZbc3dnYUda'@;
put 'PExBZn54b1k+N25PRTdNRDhwVlArY0lmbmVtd0MzXS5+ck0mQ0YrI3JAQ2VoRzkuQktGQGtGNk5qPC8zdCsyQENhMGhnLEFdYDpVMHZsUWBlVTUmPXlQZXc9fFBxXkpudipPYGkrTEVxajF9ZjtnOlBDIXJ+QDImQFBESVEwI2R2Y204ITl1RFhbNnB9Yi5JRE9udmhXazh7KjM1WmJKKGw3Zz5q'@;
put 'amxySjlTXiouOGhHP0dyIzJzVHcscmgjJjRqeG4/bHlgNj9nLm0hTl92a2U6aV8xcDpVQzlkUUd5OStPUmxEaV9WPEdxVyt+YTc2ZzBYckNdS3BoSlZdcUxVPioqdnw3dm9iZTdhKVdXXl1LcHo5JnY3SURAKUJHKkY3bFd6S15LbSMuXT07OiM1NGNRI3g0L3N3YDNXOz16OjtuOEozUl82P0tn'@;
put 'YTM7cXMmVyxvY0I5PmJLIWJoez0pcyk2c21CUG9HMlhUdkxHbyt0STtDRyVkNUMpaDVjdCVZNiIlWTkiJVk8aV9RfnwpYXg/NVlPKU5oPitaZEosNVlMSmhFPkkoQ1FmJHc6aFQ5WWV1SWxFeEgvWmU1WUdvR1IqVkhseldYOyIlWSwpQG8jelFeZjdeaCMvKkkudllqPnl9KDVfPD5GaW90KHUp'@;
put 'RFcpdnBIPFhpQkM9UikwKGFoNSU1fmVQTWZZc1U6U2hNcFJtMFUsPVtoeCF1bztmN3FaJUx8IlhIRVA2ZSErWHgydVYwOS9GUklHT282WXtpcU8oZmQ8ZloqV0lDSFJseFVYSEIybnNMS0IwUFlrOVpoKy5XYERfUGskIUcySlFvenFnWjpXS0U3SztLQUxGenhYU0VMSy90L0laWHNNKFRbcG1P'@;
put 'Jk1tTFJDd1o9V21FUUw6Ii5JcXVQTmZQJWozREpvJnlOdSpNb0x3QmxNZkQrRCtrNktmRz5oVDlhNDd1T0MuRmRIbnQwRzZJdUhDZUNxc3VldXk2ZkQ0MC8qRThNOE0mOkwrS1VAXlFjI2YvVGYiaHt0UlMyOnB1aEJ0N1dTMjBeVjxyKy5jYy9GKEZuamVTUTBieGZ2MnU4YylJRHlvOzkvcXhF'@;
put 'K21tMisxSUtGUWlUOTZZbik1ZDIrKXkhWCFIXi9WWDtpIk9fZGU1Vml2UFEwYXhfWTxVPGt6SUZFdUghOmF4SHZBKE9HTlJ5SSI0UnpOUiZJQ01XWFcpTG45ZGJ4WHY1Lk9HTERxeD5VZU99QzJ4XXRQekZSIklCR2RNTml3TVEwIVlkKXFhZjd4SSF4KTNPR0pSTkgzUmc1PzRbRFc6MDAmTXor'@;
put 'N0xeQiIwYzxoWmBXIUVLTjlSSm8iOTlCSVQ4NEAkd1AjTFRaO3g6S2ZPS2FKb0ZmImh8InZIP09lZSowckxdQmNkSipSanRMIkJvVGskR2VxMS55RXVrSV4oLklqWkVYaUVoaixyNSEreTZYR0tQP0lZU2p4TGZDfVQwQHdnI01SIXJ0I0hkVUY9YFtqWltMcEMuVCFpUWp6TDJ2R0taW11hJHlh'@;
put 'dW1LR2s4ODUhV3RhT1E2OTV8eV1BYGMoemVaMSJSSiVkOXl8QilmciNpWjQiVVF0JWVaNiJrUXo/bzcoTX55R0N1aFUwOXk7QjZkPTU4eTp1Ik8oZmVadSJQUGhsZVp3ImNJfW9pWnkiOEk8TTl5YEJ0VVBEK3lNQz1VOVpial9MN0NMYmBrK3lmQi9yZUd3TCxDbSI8YyFXXUlURCE1aXR+UnNV'@;
put 'I01qdFFNZmoheWFDR1pQRGdMNUVaN1UwIXk1QnswZUclVy5HUW9mWlF1PlMicWZaU3VLTzxNI3k7Qn43SVkjeT9Cajk8YylXYEhjKWZaVXVFUUoqI3lHQyUoPGMrVzZJQX1mWklCWWpuNyx5LEIhODxjOldTSSJxJDV6dH5SfW8keXFDOWttT2tMOUVkKmd6ekwlRWEhITUmTEdGPjxmei9XVUt1'@;
put 'Ji9Jd0wuRHNuUDcpeTBDUm9fa3MrbEJSXlF3PiRrWThPK3A8Y3x5UURCfkE4UlFBP3RIUypgW1MwUVNtNjpndU80VyVYVVBZd0xPL3c9ZnZ6WGNPRXYlRTZ3NDxJNnVIYUdYalN2N01PYHdeViJoQzorRk9FT2UjejFWNHxrQEhhYzVfUTE/RGFFZDpJQ35DNjE0WlJUYERhZzVyTHVTdzhBIX1X'@;
put 'Q2xgJVl3TWEvdE5MK0cvN0JYX0ZuMzJ4Vi92QipZYnZoI1tXaEdQKFhEUjB4QkdsbDU9UFcvNUJ2YU54RlRfXzdmczQ0RDg2PDhYL2BCV0lAIXw3Wz4rNH1EIyVJLlkvSUNHIUhiWi9TQ1FuVFBkU0dYSUpJKTFFYS9jQ21sRThNODJrKVhGS3g7ZW0ma1R1TU8lbCM8bi8oQmBvZnJkUz80QkVO'@;
put 'M0hiJWs9dDNORCNkIzMvJFl2U2tVIzwva1d1YFRVOFIyMDRHRj9bSS4ma2J1IlVSfmojdmM9RjpCI1p0Y0V3PHU1ZCo1PXZjWSJPI2ZfWHR0ZWU2Oj12QkJXaHQvPkZMQ2IqRG4pRlRDUGciQ1YmQVhCSjZtfUxGP0JFXzp9NChMYEhnbUF6a0xLSSg9fEw6V2tRdj9ZN0RNN2NTRk41VCxQdC51'@;
put 'M3BbYH1YNnRzVSJDfHZOdjxVdFp8dmRCejZpU35YIXRbVkF3fHZqQlN0c2NuTF1JUkR+ND9XflJvVSJMQFdRTVhqP3ZidkZaIkMmRjVFWTdNMD92NUJgMH5GcUwuR01vYFhQQjpPaiN+WEB0R210QkB2bHYwY1ZwIlhsWH5VUzIvNzdBKURiZn40SUckRF5kWUx9V1BQQG9AdmBCLCEieXRMI0oo'@;
put 'cCQ8dThOd0NDP1VbZFlMckFYSmVdYFhEQkRmKlspRlZFLnV9TEpHZEUzeH1MRlh6VDpPe1hMQmQ5OldlU00wW3ZydmhsV09+dmdDTjx0L0Z3eHZRbzY6W3ZtQytbKlsrRmBFYip+NFtMRUt9Z0UwW3Z3Q1dJdi9pPX1YYkJqVC5NOVkrUmRIQzgxWiZZI2k4SS5NWXh0KlRQSXcjeUlKL3c8ZlB6'@;
put 'QVJPRSx0NVkmaUVRVTJVWCNpeEo5ZFl4fXVYSFJ7UEghWVIpcm4mOlJAeStmdEd2TUkvJXlxLCRwK2owYVl2TypaTzBlWTZkWzVHMEc2Ik87dERhWDVFUSQhRGFaNVtKKzpIYSZPfDZHS1s1SDA2WXlWWERPT3F4NHV2emZPeXhDd0JkZGNZR01hY1M+KHRIYnQ7UFYvVUNMRXRnYUM2a0h1UlA3'@;
put 'PU04YHYwQ0BeKltrNXl4Yio1ZC81WHhuKmlTSXdneGt1Tjx5cVZAJVdPMFcwNl19dnk7ZkNHdHg/Tk0xMH10T3d3IzhTN2x6TkkofXd5XUN3Sms+bzA4PE9IeiwjRVhlanIheHcySFdaSyNWMyxPeHBYSEBJMDA1WEkjRDhmcjxydThTRyY/LmcuSWtiaVJWJmxLKy4jOT1IR2lgRThOZUl0ZHYq'@;
put 'c0s6KSlldn1LOEEhdTh4Nzc5MDFgd29mIWFlMXtkTywpOFUxKiNqKiVQaTtNTGhXbGZSZmFmQilnZVI4NWo7IUEuUXtAQH46ci9eLC9qRSIzPlModyxzZGxBS15BfDcqTVIma3lEVWp+KW9YLHU+Z3NRSVNjJXhEYU5nY2w1algsdVBKLFNnWCRNWFhfbntQWyFGbGhlYyxwfGAjNHg0Jk9uYl9W'@;
put 'KSpvaWBuUjBJQ1hodDxpTChLfFg1OmdjUS9GJG1BUkhDPkZuJXQqaipUMXskVzZEbUI4d09BOGZSMEl2KmFpTyFJOX4oRmYsIzpLPSVKbUImaHRNZXdQfHRBaF5tbyxvZUJQRH1WZXZdOmpre1VtYXB9LH04TFBJUD5pQUlmTH5CSU91LmUmem5UTV1DVFkyTFtPLERVZT8wJU1VWH0+e0lbIVMv'@;
put 'S3NSJXpGNFdrWXFMSHJOaSp2dEF4ZG09bT1sfEFMPCxHc1NmSzE6Nz1sVGUmOGg7aS9PUHkoYGtuOUM7OHFZQSFLdVE/MFI4b2UmUDAxIyZuZmBUfHArdHluQmUveVVbKU9kdUdleDhNNjwkRXtVWEM4LkNCMmRpcCtbZDtLIm0yJGgibVpgPiwmIUwobGFwNUYwImdYLmlOdExULnEsSzlsMEJp'@;
put 'RmJEPVo8Q21Gcm80M0NlbTR6OERXUV9YXVhsKURDOEpQTFdlPSVdWGVNdDRHczg4OG5BIXV8UX1DeCNAUC8mSER0SFtXZGNNP0MiYj5ASlk0LiZyNDFfJVlAfUlJOG1BdjlhfFl7XW5TX1M/W3hyO1AoZlhlVF97dDskeChMQUI4QUFrNlBnQjg6Z1I3Ond8OlhOWHQ6SDBlS1JsZ3ZdLyExSntt'@;
put 'fDZGIXIqeGdfUEVXZ3R9JDhpR3ZQUixqUDcrdls8ZT1vLFJYX14qTFB2NVluTDssYn02IUshKiNGNGN7TUNvZjokYWE4Y3gwayFgUGRnIjZgJUZmJEw0KX1kVz5qUkR2I0V+cHdGZysxOmk0eCl+KURYLiRCaSRDP1dAQkg6d24/e1hlWSl5YSIiL2xbPF4hfHRjYz9fPFNFdCNIQHxJQUV7Sm8l'@;
put 'UC8hez14JW98Rz1zeE07NWtHQkdCfSRNNiN0PSt7IlZSdWE8QysjKldheD5MbmZRdiFEPSl+N0haRHBGVzZ1VVh8RDtERCJpO0F2I0R6SFVRfGo5cjElTTlBZWxQezZ0WCZnNDFOLkllS2RmO3FtfDp5SSthREhwdUxpOWFqMGgkLiEiOmlqbUo7SGcmMyRvc3BMZT0saVNmc3RDZjFbb0JFMEhd'@;
put 'SnV3dSxPTnZaKz8oVHM/QWxCeE9CUFJyPWF7UDQpKUZCV2hMWyFzYXJPK1MraEFJQ3RiQWcmd2tyaUI+fkQ9ODI5KkBdUk82Oz1dQjd1Qjh+N1cpcWdXbDRIc0hXKSVMZnRzTFhJbUspPFA2JSh5ckwhLGkxWmAlOis8KUIoXjhSQF1CRClqezQhbmZFRVB7aGtZfHwzUF51UC43T1VeOTNMPE1O'@;
put 'cEppfDYoU2NEMGFVXyReLiZqRm91ZVIhV1F0cnRXXXtmZSxYQlA7dSQ3KkZ3VSlRdnIrd2dGZUg6PCZoUmE8R0E7dmJCJGRpYjI7I1p1SVlhPmhAI3ZGSG1FXiNxfldnI0ddRkN5NzZ1PlpRO2ZSRGVWOExXfSNeRlQoRiRfJWZeV0kzKXlaQVBKN2d1K1csO3x0NElocHYoLF91eTA/ZE1qOWo4'@;
put 'eHJxfTxZKlZFc05ZWVZGYF06dV9Ncl5IQDVtTDphQEMxfkhicyY3SExqNDQ2QEFHZEZWP2NdZ0JXMTMoQnlpSVFffDtZMlVlaHZ4OS4mZyZsN0dJPykxTGMmeCloImZFbkJSRGZMT0NGYyElezh7dVRKSnMhaUQlITxmNylqJls6YCVQWXtUYTBWQGZuUSxEQCZBZXxLSXNRQjtIbCUuRlgxOFJI'@;
put 'KiwxLjE0TDdyLkZ0LDQ0fDZPfEApKndLP2h1akV7cnshI0M1NFZQW3YzKVRfWGVjOFQsT3slRkheOF1KV0Y7UGNMaTRPaXlwLHMmJFYuZVVYXSlyYEtpUX0sMUBYOCwkOWJgeXIkOXA3Okg2WVc1ZUUpRG4+Yz1bT1k/eSFTV3gxentbRj1ibWhDZUdzSH06OFphTn0xTFZlQmI6UDg5aip7Nzs9'@;
put 'TCpCbDhLU2JbTjwicUwwMytTR2VNRGpKanY3YmpKeGxOMzlMb3VNOEFeOkJQMjcjLygsNXplfmV5cyZhZEIjRSZlOHRmQ3JSREYrUzsje2FqSkdXN0cjRVhQbkNqSk1rIUUrU01zdztVRUtyPSJKO3kvcFFqXWNEaC8+QmFCPW8+PHNheDU8bDZkclV8WlJRa1hzWEVIPV8kV3x1SU8sL0x5V05l'@;
put 'MCJjY2N6ajpOTE9kTlFPXnRJT3lhPWYwY3Awb3VJT10iXWcpOmBmXzo8WUk1TDZ4NSlkc1VEYnJVa2Z4YTZPSHpLQCZaZWRlMzdHSUgiNUJOO1pXOEpPaWN2RDhHUGFyVV0iSU8sL2pdZHdtNC9OLDo3LjVHazxzNFN7JUQ6Wn5EZDQ+TyokcjdKMEZkeGFQI2JOMWZdW1oxWmQ7UDUuSTZWSzwo'@;
put 'eGMiNTZhZ2MqQmk0YGRkd3tvUCNJNSwvel1pISZaYns0R2xRejY5NyQ4eGMsYVhhUlF6NjZhPjxhPitrPyVyN15PS2g7RjJHWmU2JT8oZzQxa31vK0pLSUMwb29sUHYyTipuYVFvc2MpRl5dQGd8RHNzS0p0K1goTH5YWmYwb0JLOHxDYTh2TmVTcHhVTy55OWc2Rzg2e2xiJFRtLk8obXNdPVhQ'@;
put 'bkh4UV1Gej9iQTVJXiYqZ3smVyhrRD1eZlVtSS9Kb0dgJlgmJkYlfV0mQT9jODJ0c1BLPTppRiFZVywmdEdCVXJvbDY6dm5rRVs5VFBIejZWKjh3aiVsO1JdJk9od2NJMD04TzVULzQiRVRkNDlTVUk+T3dzYWw7SCZYKmR6NS9YVy8sTkNwPEU+PSxCUF88RWhQI3luOyIodyYsTmlwaEY0X3o8'@;
put 'WSo5S1BsQz1CKk93dyw4JjRKJlUqdTpQJWVRM3l0eTR4KyxPc2xWR1o8YGc2TlcxWC9zJGEvUDgxST1dQnIuZzh3Y2syRDIub0Auc1s7aWA4OSh4aTVxRHVbVEgpU1p1JG5vISVkYldWKUhbMm48YCpLUDcoOzM9PDwrfTIyfj4we31oam1veHF7VTdoayJiUihVOzJve1ZTVjk5LE52aT9vUnho'@;
put 'RkJVTyNOMjBVQm1USTpMPz1gI3JVJTtocFdaUFRqPEhGe3BKNyRYRi57KS5lIiNXPTRtQGBMPWVraDNHPWVrX3FrXktVVDRjeyszdk4rcX0/XjxOcCF9UyQwNHIldVlBbFtHS21eMUQuPzJtbXBTW2chdytANyNoRW9aMloqYjRKLCU5Xkh8O2YuMFVhZ2Q7bDxEbVJNWm9Efjc0IUtuW2toN1ZE'@;
put 'eDwoeXpuIjcqW3A+MV5lZXkpImRjZlYkM3RBOFBebWQ3VWIzcVFXeTVKOGtOQl0yRlJSQ2hATVNlO19jMDFPbmN4RTx5bSRMe05mPUY5JCVbXSl4d2osfEBuK0pFNlZrN1k3XTspPj0lWWR4JHFUR1Z9Vzs5ZFNeR3N7QFAsUWB4MyRxZD9sU1M0MTEiem1oO0BveEljbXJ2MUMoSlEsVVVBeWwm'@;
put 'amZYPCpnPE5iVyMqRkdnXUBKP0Yqdk5yVlZTQVd8Wkx9JkdYWml2QSwub2tMOkdsRGFKX2VgITlMK1NMIlUkY3IxbHJ6fjxkRkpnQDAscjxAWGtSYSx9SWdAMGoscyVEfVpzfU1eTjJIR2ByVjh7cVNNamFleiprLmFtdndEW1cxamg9Oj9JN2JuQ2NrNlVTZzExTmh7IzwzajltYGdtc2YjNV5v'@;
put 'R2s2P3UlIktDeCNHPXJQI1ZgdVNNamFlbUB9alFOdGo9O0NzV296M1M+fnFHUW9hZnJxa2NWajojWWtZb1grK3ssQTZCNEZLW055VFNmVVV+I057ayQ3WkUxP3ZqcDhfTDRyY303ez53ajxZZjRuWEUueEk2OXxmQWhOPDZOVHJocT9Kc0NeSH0/JVtjXkV1WVFqPUlHKn5UaCZMSTlJdCJHLl0m'@;
put 'dyRJNHFYNzEzUXRbMiJGaEZqIjZiZV16US5MQDtVVjJ1JlhGc01NfEg9Nmk4eC85eUcmQTgzUnVIV19gVWM+MzIsWnlJZiN7MjZdKD5XU2V+JnhRQ21Mc1lyUi9LPUhfWUw4dipMckRmYEpJUHVuKGdCRUBEdTVAdGhpRGY2eG5dcE9LMGxnI2UocVZPOyRWSEVnOl48LFokXm9wLE1WOC99Ry5y'@;
put 'WXVwaEdiem4hQHRfUFZ4dU5GMiE/dnlJMytFIXc1XV58Uks+RGNfPGliXVY/ZCtddmldbWtYKG1vUk4jUUZ0NFouK1dnKFApXnFRT2YmeXFuWGA2MihePGdFV1lmV21fVEQ9WHBtK3U4NyRMck1aX2ZEc2M2PWFYW21oOExNamoqUFVbTTM9SWVOUXshSkZUQyFncmdiU0BJJkh1Q2AqZHFpWXQ5'@;
put 'S3d9THJ4PDldO3MvO2o+dDIqbEZ8ckchOTMxeXQkSWt2YmppeiFUZH04STNwTHU2fWFHdG9PMylwWU9oVEJlQEFGNTA/X0N2MjRtamNYQnYyR3VidnRHOE9ndi5ScHIkZiNfbVA1Tnl4SSgrPzBFNlA2NlheOngue315bmdvVWQ4UXAlZklVUzQqbk9zN3BaS1BTWTU+TXAlQktaOFBEbjVhOm12'@;
put 'S1M6Q01UJlk7WW08V09TfU9mLFR+MT5vdXBLeV9kcn1NPVtlaEdLWjIrfFYmQ016PWUkRkxHKGUuZXlfJWZ3aG0zKVtUMWRkbEZRfClJVjhDaztnTVBnODUhZ3I7b1NaRFs7YmtdOGdzfGRrc0AjITIuRn4/TjVpOW8uTSNZWFghSlY7N1MkdzpTUDIxPH1TdEA9N05dPGclYUVsOSFKOjE8OCJJ'@;
put 'OjE8Rl07KSE5aUpdMHVVJGxDfko5TjNMRGVkeH00P2VmN2tSfD9DaEVbaERLeFt8ak4iMyRNTW5YUXxDbDJ9YVorLjJ+NFlDKUFJcHNMallMV3R4ZzBMIWs2TWZ2NEJsSl1RQmxmLzE8YWlUL2FJU3tES241XWllZD95dj15NXRAaztzfD4yYzRWKUJIWWxsRys+WHY/e3Z1KEY5JFokI25weXcs'@;
put 'QzF2OHdGWjg5ZkladEI1d05OKE1jNWY3InklTCtScmEycyE3SXpBbDB3KDosT2VtOztgQU9NcTV0K090PThAQkwscTV8QSU3Sk8lPz1vZ2NTPXNFPWdiTGpUUnZgXjZGI0p0NUxvSWg3WHE5RHcpQ2ZfYTF7PTFoYDZLd01bMHBqPjY/VU9zVG5QYEZQZ1RoMEJRWFF7X3dAMiouV3V4bj95dm1+'@;
put 'eDZNRHlsSCk6T3NwYlFAMm5waVB7YTx4ZzxYKHJySz9aYkJzc34iQV9AdDkoJVgudTYoKFtQO3ZCL1thWjhVYjFwd0NvOUAoZSYjTU5NQ3U0cEsmZisoMHlfWUtadXVQZVZSIkVmSihXS1FIfWpPQiVWJVFMUE1udUU8KFRVZDo+Jk5CckJsPyhBXT1lKjl+KFQkUDFeOG9pM1l7IkVAW2tPflko'@;
put 'LjlAeXYzXkI7SSYxUEtNJnZzSmVjJkw0Z1ovVWZxWXlybjVFNSZMNm9STCpobmZbR1ZlKlBbVCFGXUgsYDsxQGpDTmpURCk+TkYsWVYwMEoqN0BBM3QsSSpBUzswLmZDIjtQMXVMbVFGdTklXmRlPSpzITB8I0I4QkhXcj06cG5PSEsvVzclQkkqcU05TiFsaCtZNTB3JDhnfG8pR213UWM7ZTQq'@;
put 'U0V6fjt7b09zMFIzQmRbYzNKRkgvNiV5Y24yXWZvXyE0JEk2aWVeQEVMdHIvbjJLWWNISShpSFRLLiltbHokbm1Sfn1FcTU6LiE0ST0sQjRDRVExRGMmVyF3OilGPTZORThdQHhOaExmTmx3aCtMMiVFPk5fV1o/OlVtd3VGN2RLPTdXW204X05ucS5xS0hXJDl3alAiU1UzVFZjdEU+LEIyd2FP'@;
put 'IlNbNjouSWFFdThVITZWOVU3VTF8XWhiNTFjZD8+IX5UbHcjKiQ0RDFxKmk2Jmx2WHBTRk5nYUliOzk8UioqeUI7PnQvZFZhJiJxYz05SFNDPEQ2dHh1cGlFREpkQzxvJktudWIvTSprMSMkK1pWdEVPZDRtcV0zWlVabFpPfX0mNXdjZVleNyQ5M3QqaVJiVnc0T2YqZUg9WisrT3w9WkxyMWxL'@;
put 'bDxjMzx1Qj48U0ZoL3x9JHdiNC5xb0d+emhsO1U2aWsyOkFUdWxQYntOY002LklLT3VpJlgvZGNzUkNPX19BRitCVjlJKT1Hfkp2XWc9SX53SERKcnpXMkdkeEpUYWwsIi57IndOd1hUJn0lO0dZb1hWWilzU31dVy83VylCdCwzZ1R+aHNGWENdVihkOkp1V2xyUHBuWW8hQExCZW05PGMhTmM6'@;
put 'Yi9KNjkpVHA5NnMjX3U2YyY+OmpzaE5zR3EiLmMhblNkOT1YP2tMM0VqOkckNGVyfU4qeFZVLnNTdj5gR2owcEttb3tTU1defEkpc1omN3B5blg9IX1gU0Rvb3hwI1JqSFhRWzJuWH1EI0YmdUVlZCxOWl5lJFJQKDQxS2djfWttSEtaWX1HYC57QTowRzVRPnRlWTtgVmIqNWRLMTtJTk8jKTxo'@;
put 'KjxLMjQ9ZzxGeWBWazxrejJjLmtlcHhwI3hqaHAhTzVJOURJcnlKIllGZShHa1ZWITRddyNHbyp5XiwjXTc0KypFUW44djxkRUB2NjE5dm1taVdsVV1GaUpSY2x5eVRqRk99ZGFleG0hS0M1JEk1XUVNSD1uYV5GXUwsSSMzVVp6VD1+WjNtUmJrPFtdeUNRPil2PEM6JV1XO3JhJVVlWCo1TmJ8'@;
put 'IiFvWCg5cEchWU89JHVaVkE8S1hsKF8rP0lQQyM0WnA5N05uZ3YwTU9rPFdpfWojMnxgX216W31yNVNYWjtkUEsjIUUifH5NcDdmQE0oSFEieHh4Om5dPDpGaEBTR0VOZjBfaWNRM0p5Ymh2SVZRMEA3UnxFYWZhKmN0bCl0eTNJP0JMcWZRUld8OSlyQEZWfENWbXc/TypqcUpOJDoxSyUvVktH'@;
put 'ImI0LkhaTj1gbG19cjE5O1ZYPnZAbjdQJjBzc19Ycz43bjlGS20iQ3xXKiJgcjZAQjRkWFdDVjxdNGRSI1N6bTRWR2s/L1JwRG58I2I1Ki8pZi40KFRIWiFeUzBCTzlMS11VektdfSovRksjIyNCNjtJcn1oTCwxbyNLWn1YekY3Ok1+fUYwXzdSKE9HQVBMZSJPWFcpPEpnV2o0JVFYL3RVO2J5'@;
put 'Yzw3bVtveS8kJWVjJkw2RWImejxrcldOV3Bgfn12cHIpdG4yODpidTNWLkVtZCNVejt2SyJsIjw3L2tVV1RUbyY6fCkkcWc/WHViL3FoKXJ6TEtkPExbNmw4ayxlM05ocVpGZXZdYDBtejYwSDFQNlBvbChlMFFxIzlbUDN9JT54UURfMEt5LD5YPHFsVlgzWFE6fElAJXZzfTBNXT96YXl8KHkk'@;
put 'cmU2MmcjfTslI0lQdDMsQXBDMUZNKVJsW2h3QSw6JltaX05WcS4xQU9nWjksNU5tMklLOG8vU1FVKn5fRmsmPyg+d05oYGhVejBwMHFsd2JpKUtxLHFkMWZbMzYuUSs8Yk1uMU0lXTAsMlZ2JkBQRm8yZ2N4M3trOFMkRnBDNkFwWGhJe1F6Ki8mPDFKcTVGWVVYSUVVIXFHfXp2eywxOzNDIUM3'@;
put 'ZDFkcj9SeWBLdWxvQzRDIXE5e008enB5V2BpbWFWX0xmNiptLktKM04+LHgpNUZ7fj59PmExPiFeNik1X1Y9am88PilxfXZyfD9ga2N8LkBAdGMiTWh8Wippaz5HbjBmdiprLlB0YVt7W0ZvSFspRlA/bD5NXXNiVGY7JVpGWiZzfX1vR2srcmxgeiFIQzpWKC8iKzUlITZMdyIrTHIySnxOd3B1'@;
put 'TXpzNFtvVUVbZUtvXTk1JC8xPFdLYWswO1c9Nj0wOVtHQ1cuIXQyUmomI2htRD55O1tLQTt2bHV3eWZbPE1lKzkoSjBxdTxIay8jYiE2eSZOfUVhR1NAfERwQkYhQDE/XjFxMTxtM2loKFU/bzttaHBnWiJwWyJsY0xzZ25CR0c7QF11JmghRDhtODgmUF9sdko4IVpiPlkucDUmZXNUJj0+RWsk'@;
put 'KVZXeFs2PCE7ZHUlLyNTJCV8c3VUJlchVCopRnIkfGxXdlZVUW56OXZWJHEjL05efkBMOWp3bDI4Kz9JX2I4ZXg8cnsoeUheWnAuPFkkUGkhP2czIjkkJT8lJip6TG9xPVViYlBTRFdKXnZmOVtZJHA4Pj1OL2hDIiZNbSRbViRjMj5gTjQobl9LeDs7XXg+ZzNZYVdyTSR8aTVWMn1NZ0MhRk1C'@;
put 'VkZGPXE6LD5gNjVIaUs8diMrLGZTaUpaMzV9cGd7VltARWVwMjQuQkJJI0R2RyZiNVNCbHhBPlY4Yy8qMFpqMyVFX0NIaGhwQGxyKVR7XSgpcXIuLGh3XUM5eXhaLzlVPGJMR0ApRzd9fj4ra1c/ODNGcCw3OSkwOCZPa3tOSTt6Y2I2VSxIRDp5O2tKcFBSP1A8SExXPzB1XTUvLlliI2hYVW07'@;
put 'diw9SWZxSHkvZkRTTWRQNm1kdmk5ZGxaKCooYmhSUFAiaGlscG9wclF2SFMqUDIxOy44MS8sI3FQRGtaVjRfVGhsJFJ9PXZsejw8TH0sIkJwcjNMZVNVKVhmS20yamB8X0B6Qk1Pel17KGNLImA8LCwrU0tEPlJ+MENyS117OEtTey99SkVde045WkBpazgxXjhlR1BFVWEsNUY3S2dQYTdyNG9K'@;
put 'ZW83fXReSHguIkVZKUFdSnF2MkhiXVBsTD5sWiU4NitsWWghVl52PHY+TDB+eHxqWilfRGh3SGBic0kuIU5rZWtTQmZdYSlhS2YqNV98OV9VUnZ7YGlaPUZxWTJEY2Y8NHJULiQmS0VHb1pramA3NlpvbWxFOTA2ZGBbbjcqOXg+RlJVaHdnWCk8P2orP115cksjen1zSm44fV5nWEU4LHAxOXU7'@;
put 'bWZLamR7YV8mcGF6ZD5re2NfS2xQPGBhWXM5Vj5YRyghXyh2OC9DV1MqfV5nTHt7K1s7S1peKEJKfHIyc1lKe1RDPWxSIT9JRWxVJE1OXl0jLmt7bSEyVj5PRHtgO283TDs4W2U2alIsRT08eUkoV2tpZGhUPi5LQGRKJmA+PWcrYC5dI3Rke3pgekp6fHxGX3kkZjRsVWt3K1Jdc2JyPHp2N0xe'@;
put 'allNLCxHV2VTXTZXWFgpLGJ0dU1PSEUxRWU1YEc+Vn14dXdEZVIhYChXdWN2WGRLYG97aitzKztld3BQMm07TCNpNXp5fjFWO0FFXmI7JVV5TiVGW0o6JilVWChRO1d4dldbSFY9Vy5JRTtlIl4qdyE+TE5NW2MzPFdwL0cyOF83SV5qKyU+e2R6fCVFZjU3LyErL0pzR219P3ZzKlFqX08sblhD'@;
put 'fW9HUGd8PGthWm9LNTl7dXlNTHNoT0shTUhse0xrRCM0W01yKSQhX216RVY2Xi91KS4pTSxeUlN8MlFffHxGSUhZeTtTTVNzeWg2cCU4Ok5LKGkkOXMwUVBMNF5KZl48M3U6ImoqSzU6RURvd2gwRCxtQlhgendWK2xjQnZLPGVke15UKiNNPUU+QnNBbH0/fiM6TjM0fVBaYlU8YHl6ZXFkIkhg'@;
put 'RFdoSnAsLCw3TVYhNnk1PWVKWlUlSVkrX0dWS1MzaCE5fFdMfFU+Nl9PfCpKe0A+ZXl9PmV9P1c/ckAvPCxLWzZgRysjW1I6T1BebkxaXyVqTXIkWW9aX3c4K1hNfUssOix3YkM0VT8pZ0ZocXJkXjYmZldga2tAMHw3PjVyU2NZPlVnJSM1YE8lTEdkcW45a3dUWWIqSU5rQWFsa0dMUHE2RVNp'@;
put 'QGM/dEdNezlRM0RuY3lmOmtIcCE1LmwvYi8qUXNVYlF3SWNeP3hRVi8vRkNXXUdTazVGXTFNU2VofTxFKF9hYX14OWJfW196ZXImX3Y3LHw1ZkwuOFZyKDdLblZpXnQmQix4bGYrLkkjI1BvJF1xWi5mVSsvPFokQUcwZm4jYSg9b1ErJFl3bCoiNHtYS182eXh5Y3M/MVB8eUZgPDN3VmtbYXJR'@;
put 'R0xXVF81QEZxb19oS244KTNKQHk4NkNwI2c5aXtwP2JLXk8+NkRXaDo6SGhxPiljVnIoeTNKQD0mUF0mVE42JHZnRkdyI05WPltzY1ZXNXE3Nj5fenFuKUMsVkI3QV4iK3RTaEJKNkVAUFNxWnlOYXV3RD1feHBSI2xLaFsiVkdwZDd6M0IzQWQ5b2lXQ1J6akZUJT0ifD5pWSw/W1FsMSgjRG11'@;
put 'N1dmY0l3YHk+dnxPRTZuTzo8JS5NbWwlPVREPVoqZHkzSTZdcVo8ej1jQk8wTWQpaV11ezRMcDooaWp0aiFbS3FWRzA2IzRNZGIjW3JzeW1BZGA/TWdMQEozdHMsL1NJIyMmMSZNckg/eUV1ck08Ukk3N1dWeThYOm8hJDl+WHxIN31gSmpmQFcmX2p0MXk6ZTQsQTJGY3RMV2ZfX2ZiNGslbHx7'@;
put 'X1ZvTVk4MSFpVHUiWmt3Y149TlAjSE5JYmchNCJsO2MiKDpBXk1RJnc1W2BQa1prd3M0ZUpFN29oYzRENytOeUlmL0wueHh3Ok9bTEZ5Km9LXnFRJE5pRSVIXSlrRE54QEgrT0UlRSEvcl9dMzVyQlcqKjRjU2FARTxpd0Vdd08rMXlHJkJEVT1ZNVRAT3xQZ29LKF1eaENYSjE1Z29EYDcrIyVD'@;
put 'ZmlzOVVHJmQuXjZkYFtLZV19eDFdSlFHeGNjKkFGYUo4YkUyTy5JMjMrKSEzImNBUXxfJClkOE0iZk1PZm0vYG44TmssUERES35IUiNKKFo6YkAiN250VnxEaEx5e0FsPX0pXzdtSThgcyppJFJheFNiV0wmeFk/Y2YvVy41JTs8bCtsOW0yczk4JnNVVShwRkt9QEx+L3xWPGltNkZoVk5YO2wu'@;
put 'QFhHcVtATGRfQWdVcE90PXhwNzMmcFVpXV1HTXxMfFd3ViU0JGQpUExdNiZOfEB9X083b2U4Ty5DbzUjczFSUjt9OjB1K0JZQXJWK1U+XTFqKzRGeVFucSsmS2EqISsqWEJqRlo4a29abz8qMi5dLFhFNHlSM2RoWlR0aE90byZ3QW1qO3U/Z0dTRWtLJClyLmQ8dntGJmdQT20mMTgqN3QzdnIh'@;
put 'fVJ4WW07OU0hRExxW2N3UktGdzhoK3Bma0psSTU5Oy9UflJAbHducHNzfjwoV0RsI1UmV2pRSCRqMiJAUzIrV2hMK1dzOVEsbVhTfWchanB7Km1YM1JacSF1eEJicSFGL0dFaiMyQiRWamdaa2psO2JfOlN7QChWQmc4dEApOyVTP3N7aEVuQ0o7PjF5ck9yZUUyM2dHRVZSRkt4IzZ7bCsjZl1g'@;
put 'RGBuRTlIYFJFcFFbR2g+bDIrU2MpdHVnWmZMcXdSXjFWaHMjVWYzWjxBeWhHNkV+dzo+MURXVS5RYylwMm5eOU1UWUBYZFsrRWYvc19WbTJ1bEtQRn0/QEw6alF8SmZAVmh7aCt9I2JlIik9eCNNKzcmaDkjQVpaK3RASXp9SmlVc1RJSnFkfm5nQCpPdUFwckVEWSF5c290b29ITVlaZjddL0s7'@;
put 'NVRVfnA3eGFMKGs2elomMWBpRkZCRGhrOm12dUp8JHk4YURsLF1OaXVlJjpyYyxNTHxLMjpiXzUkT31nWkd2dTlnMVhVPCJGY0xKfV4sZ0B2bHpmaEhiVlZAPjVTbT0zUElbRGF+SHcoSUYyaU0vc2o9KkxgYEw9Lnp1XSFJOSRRdDxrNUt2dlBhX3tLc3ptTXYlfkdWJU1ecllCcVMsXzxEeTJB'@;
put 'UEt9b3UvXSl5RTFfUGQiSF5xWiM7eD50WjwjXzN9RkssRERmOiVJOnR5MzFmI18jPD9BZC5nYV9LQ0k5NCNZa0hxISVJbVFheEdDV3AkNkNYR3N2WTAsKnlmW0V1THJFSXhjcGglZCloJWQsSVB0N05gdkdDV3BrJmh0d1UwUWxzSnErOVt5S2tFflhXYExdPXVoWk94PnREV3dIOXlEK150X0he'@;
put 'cnN4O0BwT0hnIXk8aCo3Tm8mcUg0SnA/Y084aURUdGQ8IzV9OE45WTpHQ25kYTp1Viw4Lkl3fDtAVlkrbUckfGNrQDpNSD1uNStfYFF6e3FaNWt4ZzQzLF16SlZzRnJzd2AkTmpqeDolSSNXeWJZK21HRW8ib0JOPnxISkJHPjI3dDJFTmpUREpLOyVzTiZXQ3tWVyouRFZzc0gmSCtwNlY3Mm1Z'@;
put 'Mjd0Vnw1YXp4KWEubUY6XS9AS2ZjYS5wdDM8K3hkW3BTXkdbYzgyNGIobW9SNHVaWnksTkZUXmM1S2EraEd8ek45STZOfVozVWspKylSK0hILzxRTCRafmAjN0pPZ19YMiM/REpuXUQsUWEhLy9QRWQ4MjcsUE9oZC5tOFZSYSEvPl5qSGY8KlY4bXgmbjdjbWl6KSFsKS5dTyEkQkYpcTBuLEY3'@;
put 'V01CTkNYbGZuY21RYF0lTW41QFNNdiwqe0dwbSFOZHg4N1MyYV9VbENwTjRrMDVkI19jTzM+VVpTMCZLYCEjNmxEZjp8fWIsVmNHNUJoRzU4dyg+OjFsQGN6fnV1WUlqYnRXREsvVzdyYiU0XXx6eVZISE9yd09jYHpjU2l9TDQ2a0s0VjYqRTBZfTViVDdOfDR+YyMjbTNyIlZXOE5heGNzKmR+'@;
put 'RXNEb3FCPlEuc2hudUt8UklFb3Z7NCloeUEwbWh1alcrXlt8WGBXdz5iNlgrdipqL1lZU2NKQjN4SSZ4Z3E9U09vIUE3ZlNdcnRYUX4mRkMqLi8sO35ZTyR0cVRaLHouWXZLWWV3bFNvNnhFU0VHZXtxJEtTR2NtYixMeldOW0djQz47KkNKP01DZTNVUk8yN1Yra01RQ0xVVDQuKE5Yak5tMFF+'@;
put 'OSliKVJfe2JdenE3eWNQazkuVkIhSl8qPmtobUVAdSt1THU/YUlOVkE8KUZRcU9iaVFbdCZXPWNlPDgwRl1PT0thKyNJJDc0eUtMZ0MmSFQhQD03anddIl44MiNKPDJKbzpyXnt3aFp5I1pVfVk7KVUuJFRBTysyUF4lZEZTezxSalM+KDZTeVd9I0RgYko5M3NNNUAzITJFPWxKQUh1XTJpP2tX'@;
put 'M2lnO0pkenpaa35qW05EL0t9WCxCfl1PRnpjdyRoSEE9NG03VUVJcm1jZ15ZYnU5WGhecWdkeF1lYz9iKSh8ZiFadmtzWVNBbTBCJj1HJSlbclpUZVJ2e3VEYnBaJHlWU09fcih6Ry8lMiZOK1J1cGg0MTJGUD8iR3suNStRbHBFeVZwJmZTbCtVREtJK0YkciRkTXowNVNzJTA4dGZtRHRmYzRV'@;
put 'U2UrI2RrZWRGbypkdnc+TEkyMDpHLlMyKkpXMHtgeyV3RCFwZiNUazdPYGRKN1RwO0IufEpoKls5c0VOTCNUJnQvWSpXUDcjO20/Y1s6Q0VGQGJAPyRVVSZoRWc8ZyE1PmYjZTc4QHU+U1YuMyFPRXE+JHY2Rj48V1VATylwXXt8K2NhKU58KzBTImJ0Sk50UXFRYXUrX0YuczdrZ3AoTSJubjdJ'@;
put 'OmN4eCtaOEJ2IiNwVVhHUnxgKyJsKygrU35IUD9fRlp3W0UwLClGYixuWmgmdGNXZm45NlolZWo7PysmcG94blpFcCIlejtDTUt9Ki9oNT5jbTtUYn5ILlV8WztOeFRoWlhuTTBHQ1dwN2IzXXVaNU5aUFpJezpkS04wMFluXnEwV3QkbGRXSD43Xmhsb2QpL0pzbHc9ZlY4UXRwYnlSZUttUkU1'@;
put 'JEYoJjIuTDtxJUN4N1VrJGl5Myo9Y0JPcHRTJjwoPHYqYCFJcmpGRld9KFB0PGYrcGZJaCJQUkRfWChXNzkyIWh3MFhUPUNnMSpKbzM8ZEtPPHssV30iIStyVDt6Y1RoQFJUQD1EYDpKKk1MbTwkYjU+QX5kS2xYaEZLOyIpNEp1WVR0ZFN8WW1ZezIxeHd9aEk9IiZrRy5ue0w0fH1MRF9dekgx'@;
put 'cEROPVlhe3hseXJGRkEhTktzNHNbIk5LV35yOW43IyVjTW4vU3soNX1lbm1XW0B1e29dJChtYm0rP09xckc/RUlYIWtaakAhS25VNSExeTh7ZDR2TDVfazNLKzErbElUd0okMDR9fVlHSmcwcEd7IStyIX4+RDIiO3ZBKksqdTprTTx4L2h4cEJGRTpgR3dleTx6VnkpTTVnRjUlIWVSSSEqIlMy'@;
put 'O25DLEpYKVtWPCpkaFNmTTg1PHhSOGtVO2t5T1EqR0hFLEAhYjY5IVVjai85U1JUVSRxaCEweFVFOls8disyP3ZiOnl8RGE1eDIyc1B4PCEodmA9Sj1GbFlZaFJpPDA5LlBrU3trQEpKMG8sZGxUQ2t5fHd2akhidldCdGYheUN3LHc6K0h2TSZVSGA1JmtYaXd5Sz5+WyRZcixxTHFSRm1bdGNR'@;
put 'dHd3MiNwNldnNXpvLCVqPyE4KyVqViVXV05qY3U6KilLVXk0ZnJ4TkkmbDdhZTd5bTpCbS85R3ZacEdmeWlma1gpWy57XkssdXEhMG9yYWVJQzEzWTJZQCYhIWFHK0hhcltgbWtwIU9WOXpiK2BLU0k/LnkkYiNKZ0c6PyFQNmJmVnZ8MFZWYWlUSzRpdSJjXU8vei95RGdyPzd+WSx8Sj9JTDl7'@;
put 'Nkx+LEw1WHR8TipKenw8LGNGVDpLWVMrJUclKXpCcDVqYFlobnY0e200NVBGR1NGeVkrPzpPT1g5QUU3YkVyb0ldZ0RNM2RxQWswLlRXPCNiVzl6ISpIRDkmMns5aDJxU1Ntd11wQExVKkBwKSwuQ2JWMzEpQmBLOSYwNFcvbEY4UVFVVC8lPGUuVm4rclB2M2lgNGFUdyVTP3AscG96MnMpbUFD'@;
put 'cVRVSnxJNERuY01mQkBAQ0FAUX0sI0M7RzJLTUc5NzE0b0JSVHQ+dXZTRmB1KE9fTXxeXkApfWh8anlHPXMhUSwvcElAQGlaJCNLPXtscXg6bj9+MUhpUit6KV5AXmdmdTkhQ1VvcnkybGlQPVBsOl49UFtQW256eX1QN2drb2M8VU1aXkdROGF9UX59OGs+LG5gIjt4WmtRSEN7UV89aUwsKTpV'@;
put 'SUt1LD4jTWd8V0V7NktCSWw2S0pvYCttTHlOJHRCa2kkPG1VezJpd2puZmR1aktAdmpAKDtqJkBzOTRtQFZCPHU8ayxROkdye2spNVo8XjxlL2IvZ0VlL05eTWs+Oy47MHVVKyh5KjxEIz4zI3pmen5QK0BlaHMraGg7JU9ZSVk3SXclK2xxUVlGa1ZZVnlEbSx8dT96QlRWPHtDSHx1ZVM0RTcy'@;
put 'el1NcVFaPFVtMllmRUgrc21JITtrUXpKXShNVjFfV1dmIl9OWz1QSEVmMCs5OFJvQiVqciEzKkl1eXssc3oxPUhbaF5ScHZgUmRjLnBtaDBwYjxBOHwxKlo9KC90fFgjeTBaeXxiQGFqIUs1dSZ7N0xyOCkyQmF0JWd3WE9qQ0VZS1IwcClVcXUjSU5nOlomPFdbVT1QbGdAQH5RK2M8cToqJGwr'@;
put 'VD08KUxXcT9waSRDL0dyZ2EmL3RtSWhJKF1uaiErNm91N2F1Q0VnYzFCSlZLQGk6aV1JQXYoR3JYQU9PLilQPUhKVHcxJCM8Z3V5UCUvWWFHUCxXIm91JHlRb0lUSzVdQihzcTAzRiU6bTZlIk97cUk4eyo9MEcyaSslcEc2Yn0kcj1vOnEjQ3hmbVZ3OnssfjNpVmtzbH12MkdETGxTY2xDbVYq'@;
put 'OWBqeTo3XWwvfkguNmY2ZFF6YjJmakRBZ1JNQls2Q1UwO21be2g1QWxMLj5VVDlASyo7P0kuNSUySGBAV0BLQjAhW2xbJWBWQE0uTUcsWDVOfnROPXtXTzhiLzNOY2hqZTxbd1YmO28sQUZMOVNGdzhhOSNRaUU8ejtTdkAiJTJ2SGl8bC9HeGh8UCJ9XiNgU3p5PSYoKnNAfCFIWDA+IWwmYFpN'@;
put 'OzlJXlYkdEFtVlBEflszITh2aHV1S2hxNE1mLih9TlpqJkFXUCF6OzFqUTYrdlhzSGpTV2U2Y3xoZiJzWyp0WE17Mm14WHVqaS5NaHFVZEpFYzlKXixDV1AhNXBqOmAyMEZFMSw1NmhGdU1lTFtSQDpuLlhKcmV1UkJ2YXNyRWN2VDFzTFYlVGEkRzEwYlRCbmttWC98LHZFW2BQXWBGbVJiPy9m'@;
put 'eWFtSD1MPDpneGVSRXpdKj9rPCI9aioyYFtqdmpOUWB7bTxfbTJmWz5leUIsUysyNXtqMHZ4eWd5VWJ3eWJoeDs4NGprc05zb1loLlVgXmxQfUAxVllVdFVkcUREO0kiTk1+O2xaK25vYjxRIlZGbTc/Wy5LRWxbOGBudUw8eFtvS0ZaMmQkXTdte0xYKztgOlRacjdKfjVGXSxWIUJFTTNRWzhy'@;
put 'KmBnfmUjJisuXXQ8ZDcjJWhrbz00bXp1YnJGVlZoekd3bXArQWt1PEh2cnN5U0pPODkqOUxoUFhYRmJndVFdckMkM2xqJHE1eXEpdXsxZSp0c1hiTltZTHVqZyJNISQ7OEExbiNkLF1kM2lUWykhPWV5eGcrUkBsV1U2Ll82IjZtXmhRMS9Kaz0sRDl6MjAxKlNfeHpeeDthLkZnT21vZmB3Pilk'@;
put 'TF1yK3srLDVVTDxrdWUlKW8wRi42bWBiJDFMOyk6R3V+JnouMSsjVSpwfkoqOlFhYmVJeSVqcjZYNlVNJD8sT2hjYTtDP0BEKn0jbnBkXmRiVy5tfG4ySXQ6R3Rvc2ZbeHhXN2w8RXJvPkgjZnU5UTlWO2M4cGluOV9iVnJmTWVwLlsvIUNjWmxLKihlIXRGVkgzZlhZNk8/aXN0cTVkJTI3ST8r'@;
put 'NztRKmx3QSwsZltlSXBrdSJhLHlfPG04TWBldUlKeVZiRV1WYl5IOU1sLzkoSi9ORzV8JjA9aXlXMzJ+Y3UmdkI8NUY4bT1BP2M3SkBJSF8zKSI5Ky5qPCZNcUk0SyosODY5JG8zNl0jSUolaHxSbnREPzRKMHFHMEl+QyJFPCZpd1dlVzFHKjF2Tm0xRWtkbVMqNDNHOSlPemFDOnI2aSRNOFp9'@;
put 'TyNlQEhiZTNGWS9+fW9XRyFCPz5gVHgrL25bNjY3S0VvXl1TcyFNdj5lZFErSkBFMzx6c2pvfkt4JS8iUDc2W0lhYm5+akNqNSJmNzZZRDIsaDE5WUtfcl4wc35JNWgjI0hVOn1DeDQ8bj4+cGw4Ly47UTYve0NRXlVGXlVJY1dRcnElVlVmR3o/SX1wbDhbLnVqZjM9YmQ7YHF9SypjVH0/OUdn'@;
put 'M3ZYTU84R2dKW192WGdQLlQuMzFSWF5ObTM/VUwzcGt4WFdnIy9uOUVMbHsoUHErV2lDQyFyJV83K2NZP2AkSEhgMSs2L21FfDN2TEVKSEUoT3VnYHIwMzQ2d315cFM7Vno7LH4/ZUBaTCsoRTt5V0wrPGsrbVoheUxIbkJPQkYzOz47O2UhYkZXZWYwYkR5eSpydmZVKXhKYlRFOTdrKlklL2ki'@;
put 'TlVqOHtYcUwzbjR2aVNSUVheJTxiO3cxc0pDTyNxczVwfnZ1Rk9TRihIdTBmbTdJfnAudzcxdVB0RkQ3OFR9U0V3aD1XYWosbzFLR2BbY1glWD47b2o1PkRvNW5TWWNjJlRhdV5OeHVLQzE2JksuZUh0JSVlWztWclsmRytnLiQ8NG1fYEIxS1p5Tkw9VUtQazkpWE9LajQwLiM/cUpCMVIvaixY'@;
put 'dzVDIXl3amA2MkB1eHB3IzdIMTxNcHU0dXN4XlZZaVpoYT0mO2Q+RnlOaTR4dXd7V20vR21YWnUhW14obF5KdSkvZSkvblVtPyk+VyFYI114KXc0bzxhRSl5VUY/aT1QKE5Qa0Eybyx1WTpaViVXKzs9PG86Xyg/fD1NNiEjYDEwK3MhPU1LTngjVmReWnkxKSo8b3dvZkQ6P0M8bmpuOTJ1Yno3'@;
put 'UWR2I2Q8VCplNi84K09FW3BUWn4sbmdEQjgxYjxLViN2OTIhQUVBMFlPfUR4dlc/Vm5Ca0VeVG8wVkNZJXFVeDJ+LzRdKD8hI2s7aUw2TEl4YFdPS2M8YzpLVXErTWp0PU02SnVuLDN0Z0MyWnssOUghY1JQPTFIRkRsXlAlXkYjYiEuaUMzO3l9Rl0yNUZBQVhMb2k8RzVMb0ZQWHV1QWs6VVpa'@;
put 'W2hhTVVRelJBSntbektYaVp3SVV2Wj5IKiJAZ0trfihCLkZgW2JsY106SlZnfHxpMiJhMyxddEpiZ3YqVzZqbyUvPiEwUG1ZUkNVbFVNLlE3WClEI2VIQ0g6N3ZxbCt0NVkyMy4qIT94cUNXWVUrWVYrPWldW11DMk1NITRlfHlxakJLNENRNVdqYzxvaC94cy9FWDlIe0Q1L2ZfIzFZRD48cXlY'@;
put 'TXEsNUIsMlcran0zSmUqIytSUUZQYil6dkMrO2s3LyMrMDMvIytiOWp9T0JDTVY7P15vW3lNd1k+eDh4QnA1fSFxeXQpL21jKS9tYyksND08NENNSi5UaVRvWk5eWnBfcE87PD84RXQhKEo7fHheQ0BHdyNwJks+QlkvVXlDO2RqRCIxXk5pe3dFZlBUJSlVZip3ejBgWFhSRFdJKyl3YCFGYEQr'@;
put 'OE1gJjs/NltnQGosO0l9T2dTYmguL0Q2V2V0M1oyWmtrPzNQUmpaX0B4KlBYKTRrJlcybDkjJixbPFNoaHp2Y1tMQ2BkIyJ3RyJXSUVLVWxKRjdOTW9dTHYhQld9TGpxPClpUnVVREZEXWcuXXFiVFF1fGQqR0VLQ1hnKnI8MiI8QTRjPFRSWFtHJUJpOTwyWVd6S0pBMmxNezZTeyh+QXl9YV5X'@;
put 'XVopazRnQDdIKE92dihwTzZSaypNeWZ2X1BKKV46PFlwO2V9bXd5OUpMPXA0NDhBfHZ1KEZJLkY7VyZsKDxFN2g+I2dRPyMlbVZ5PSF8OE5neCI5ZnRZcUtFS1g1a0pPcSV7fj4yQm87RlpZKklyfHsrNUkyZ0BeSEFIWSo7XzVRJDpuZWBbNkZtND5TfjVndTR5Oj1aNEM7fWVYVytwa1c8VGA0'@;
put 'OFZ5JEdWRXBQeUNdcnlPelB8LklYSVFBQj5VMXgzUVh0Ym58VjN7O35jM2FvUmFYO3U/X0Y9Kmc7dTQvJHhQNzRfOm9LPWZhc2hnOHpaTHhXWW0zNDNycFZtTltlMTFeZ08/ODpHQnB3b3h4cnBbOGBMQENsRDBXWGJJXUVwO25lYWFYd0M1aWUkfXR5KnM3WVg1PVEjPHJedV83Lyo6W2UzY0Qv'@;
put 'O1s8XUVecEpvQURVQz4wP0NBSF1qcElEbSM1VHFSI2V2K2VZKS88OUpBRjt6JURIeG1ufXJRV0FvMjlOXkNhIUpTbjpHP1QwQ301M1hhakwrKSgrUn11eDBJWFprXkRvJl9fQ21ve31wUypsQm9afEc9cWgpLEhtR0ZNKnQ2XThGViVAdSVwJSZ+ckQ+XXdycDtKcSZBRCpLXXF0bGVtTTk0W2BW'@;
put 'NkQidnBwJUhjdUVyUzVpM3tCVSorWFh9b0pPdT5oeCt1Mkh+JD5pLzsxJlFVQ0JhK0o5I2I2K2kiKm1BeWgjLkxGXlpfQk16SnM+OXhfWDdlOWA2fUVWaUohKFVNRl5aKSo7cnpLeUA8SCZpOyk1IUspJjA9IyNabkJETSVTS0VZTCI0WVhMSU16cy98Rz50TjAzekFpNTp2L3pwPmFYRCJ2a0Nb'@;
put 'ZT9FdVkiclU6WGJUIUx7NWYiZj1mLnV+Z0xgYylvOm85ZmhLIT1Vc3p2M3Jwfnx3IT1ddTJjfUVLbHAqOTgqVERyOiViKVhCQCpmbnV2WSMvfnwvJHRrLkVrYjt+VnZ2NDx4SmhMNEpET1NoYkEkaXplZjx3OC9hKmxVRzZ1dl1bZ0AjYiUhOj00NXxvJThAbWFGREsrVn13LnMzNVJhaFMoPFRQ'@;
put 'PGRxVTxJS2FoU2U7KkowLj1YLCl7YDo2KjMqYSZdM0RnTSQ2Zyk/eG92VGFvJFA5LmU5XTAhQHZMKWxefkpQakxmRkR6bWghQ1chbSVifWIlNWI0NyF7Rjp8Lio3eDk1S0g9WD5yLHEpW2FWQVlPQTo9YE5ZPy5JeDtzXSVmX1hMNV4/NnJERjF8JU9de3wvWFd4PXdMbVJAQz5pdVU7NVdNO3tF'@;
put 'WE9HUFJgNGZFazZ2ZllAelJ4MUFXKUh5ZFM+JVlLTHlUQSpZeWlFWHhnUXNWWVd8JCtDMiNQKXluSnhucytDREBUSXJvMCY3KlVaaU8wRVBZQENxWCpTOS5hdVpPKHVidV9BSnNmUjFMSF5qdjxRWjlAeWl1S3BALj5nRF87TEglRXY9YjhlKXJZQH5AeVlCV0chTzdWSzs5Sj91VXc8VVFybU5n'@;
put 'K1krVmRlJCtgeldxLztHez4qRTVZbGBgMC9jSXhSK0U0dzsvXy4zV3hCbzZFWGd8TEMpWV52ZHJCOXpMX0JhOV1AKmpGRjZPSl1oZGQ+bUhybHoyQzpjZHRaL1oua3J7WyZ5WCF3JXAhbzhpRFJ3QzE6QGZaUjlyOkpTfXw5TVdLVXUzTHt7I3AjP3hieCEpQ2Q2OStFZ0h7fEQzWzFiaFpVP0dp'@;
put 'T3ZTRW86UzB9SWZANjFlX29qKU5BU3soY1BdXjRvTyZdRDI6eWxMaikiSnFKb2xqM247ITRtZC5MSV5LZTdOJGJONjtlNGImWDpNJlhJUT95SzV3KWB5PXlwL3Irdywvbmh6M3FMbyIvc3c+TFFGd05wdnEyTmBgWEJZayZGVUhDPkohTWM3YzxILD1veTVubDcsPkwrcSgiR3pNM3pzUVZiJiFf'@;
put 'bWhrcnlBQDg0amFjY3VMfHN6VzdnI01fa0BjVEdOcXJKYmZyQWhoZ247fEdGRilxa2FdJEouY1A7TDIjcil7YFtHQ2g1PURaeDo2Yz9lIjtzUGVDKCkxJns0Qm8+YHk7TmZzdGRkXSwkaUxfLCZCX3B1Uj0wPmd4WCVDOm1PLF16ITVYUnVjdGQ5WFpJMnIvR2hPP0JlLCJ4cjkqX1k5JHpLazJo'@;
put 'QFkqIUtGc0cpYkJ+WGcsZEF+fjVOSW9JdH5zViUrczozbXA0P2R2REVsOll3JU9DdW5dMmdFRW0kRiRBSTtBNypvIjdKYSkud1liRz4jaWJEfX03Z24hRyJ5M0JUeXguNCFWV2RLS19OSUM6MGB5VWwzNmBQekJtLHIrdUY6W2QvVDNYWGlvP2NXWEE1QWNJfTVjP0JFJGgrSkZ3IU92NHFoQk5Y'@;
put 'OFY7M143KkN4ITtLQjBIZWRRWHQpUnJTMDAkaUx9bCYoNF5oa3kuZHdBL3IqSjx3MHtfaXNJN3lrQlozIX59fVZjPFgqZDNqO1V2Ry9VMzwreCwxMCtre21LOlI0WT81RllWRT1KJlsmNUdBImQza1dXYEAyRkNVNCY3PF5eeFYob0AyUF5GWXc0QDhFPSg6L114YCpMOm0rYnQlLzJldEdxdF56'@;
put 'LDY5QUc7VE5oejtKdzBEOERmZntgTTlufCs4e2ciOC9NJWRPSSNKcTU6NzJVZHY2S0RyKF9VI3MlTEFvPm4wUUBxcCspLkl0WUBbNzRTeHJaN3xGI05ONGc3T0F2QFsmRC5LWml7UV5bb3hTMFhqTn5ZQyV0b0M6NGhgTCp3PlYrbi4rNDxgJWV5ITlwaTlJTXl0PnN0cEx6YTUxPC9vKDs4Tzp2'@;
put 'SzwiR3poOWVvPTFmejhtJCtXQjhNQWFqVyx8NCNrdERrcGMvPkkiTk9xcSIvZ3F7NlloTCVRXWd7b0E+bzV3cUVYM0ZxPmRsIUwucVlEa0tXJEF+LDFqIj96QTw8MnwoY34vKTFCPlN5disyfjA7WW5YS1hSclQ3LnkiY3ptOVpKXz5aR1lPfTk2fC9FUkt8LDhgTDN8SmtIfip6VVVNZ3ZuWzNo'@;
put 'MFs0Z3txZj15clp9I3NOJm1vLHRIfmdrKFJuLHRfe0dCaF9nTD43Jk1xd24mQ2hoQCRmXWVDfDE5LjlyPyhVcT51RS52XU1Ld1EkUTomO0hxWklDRHptfkB1KTJTYThQRzh+OmJmTHc4cmlHOWZFVGhDTENrVGhoaGF6cShnO0k+X0ZydXgjbEBKbnF3e0tWRDljaE9Oa2ByLFhVJjZXKHI0ekcp'@;
put 'cFVxRTcvWFo/KGxednVFPEFNMUk1TWNyIXRgdChuOSt0MmdNU3RRfndKM3w4Y2tGZlAlUmFrOUVzMz90UVJZel5tSSNmdjV+OCF1RWhFLztVRFVzRzFfeTU2fj5ycCNHLk8oSCk0e3l0SElPWEA0KEAyakgudz1jb1g0ZyEhX0NVJSVkP3lMdCVbXiF5dF1takw9QX1RIUhYYmM8YjZgX0YjbmZ5'@;
put 'PUBDUF8pTVBEX3JKSz1xJnIzdCxIXip4OjRvdktXJCkyXUpGPzIyRlt0a2daKDN0dlBsPVM4ZzRBfX1SQkw2UGpRMXtAYnI4ZzJNcHJRJHVGXXtXWHdLbDYldHxTKW5pdlZGTzUhQnRTNUkwYTRnYHlwKHo/NHdXS0I7eVc2QmosV1JScnAsM09MQS8kZ0RDdXl0Y2V5KzxoInhgNXxKNlpjS34h'@;
put 'MWQlR2Y3KTJ4Y2hfYmk1YmZpXTxUdGZnRm53MiRJJil0anFtazBTYyVfOWdqVixVU2ZkOTg2KVJCNzZVXSxwKTMoRiwkdGtCZ05hUyREalcjWGp9VSlZYklNZjM6WGUjK0BoRyxza2I3JUY3KmY7dzZMZiEwXjNDbDN9b3NMZV0yRWBuRF51fHA3ai5RZVo5KSUxO2hNSnNwe15QOF0oOCklaERI'@;
put 'bVg9YHo9PEtnej9IL3JzUTZtKlF3QmNseXFeMlc8UmpTKV0oRj0/LE1FSXkpNDg/eV1JI0NaTGNYU0UoJiVIS2BwWkBXW3Zrc3hwODlkQkxzV2dkbTAzS3lfO2J5VTtgdDs0MUlecn47ZG5IUnVxRkAlWU5taz19elg+UFtWcTQzITpUYzhLZSxveCZVR2RTPilMeTEiXiRVeH0pZHF4dEI1ZT1M'@;
put 'MXBtMnNCZkhUeSlEVSFue3NzKlU1OWkke0pPY3khI08/Qkw8Lm8pNGJLZGR9ZGJUUkZOM15kKTwvYHRaYiVDVV5HPDowLClGUlhrZDxRYnw2TjlPQHUwMkorVHBWYmhJb1VXbVlAP0MwW0V4WCl7RTdUQy5lNllnKiRzcltrXX1QOz5bVH5fJntSSHZKWCgkW1FvSUMrcXY3RFhLVSlBaTAoREg9'@;
put 'Qmg/QzxwSlBwKyxRSWVZKnl1Y3RKVnU8VG00QlF+eEEpMjFIPjRJJCk3RTxkNnBxMn1WeGdnaEdpOj5rYktpeTcmfWh2Vi8oVzxFTkM/WzQuK0NhTEo8e1A6WXB1XiF+KE1oeEVVUlB0aXtgSWBkQkdsMVVPWUAhYFoiITw8YSs5eF8/YEh4ejRLYmYoPCs8dVs7am86LzZ5aj57Xm8lUSQ+LltF'@;
put 'M3s9NitKaF4hYjE5RDV0MitVaDdMfTM1MjJwNGleSHtnbWNwR0NvRFd3NzkwPU9HRVFFdGwpJSI2NSlCN3UvWDdxJnRvI3QuVFgxcD9XbVBmPHxPRiJPYyMhTT05YEkrKUZfLnM+ZiY/KEtzQTVpXjtLInI9ZVVKRVZ9SChhVjBvIyNPSWIyNklDUklXM04pdXBnbkh+UHlJJjsqLnkjbGolW0BY'@;
put 'Yj5uY3s8Tmo/LyNZRmEvMV5nLmxKPiRkS3ltQk8pTVl7aFhJO3NYKDZBKXFncD1bJj0hMEMkTG5QKVtkJVNqd2Y1RjIhMHlqcmZ1Okd5Vk5DMl9nWFRSJXQ/Zzw3WFpwbDNCX0xMPj1Je2g0d048dGhvND0jTVc5I2lALEZXfk1GQFljQk5md3MudGkyRGtiWiVkb1tmcURoQyNdKD06bCF1K2t4'@;
put 'LF9aeWc5TG84cGNdN1htPzI6eWRGVjgqZSEiOFplKEhlbSsqVERpRlVFTyVXVkBRdjloP0lkRnxCSC9CaVcuWGBXSlppNGd8OUpFREJUVTRrMHR+KUVdImlbI0t2V31XSkBQSzxpP3lNcVJ4NGUkeXsoVFkoZUU1Z0hLRzpReUxTI3h7ZitoVTJZLiZ0dTBSXXNEUS9VYGdaTDQ6dE1MK2dqOiNd'@;
put 'KDhjJmxTMG5Tc294V2J6Wih7azByaSs/LGBNLC5WJE19JSkhb2JYZy5sSElJTFtWY105Z2djRS87ckRydEBmQSV4MjI6cFcvV3RYInQzd3cmOixeQjN0cXtTUC87akRTe2NPNyN4ZlU8X2ddVyh5MCloZVlkZ25yZ0xgeEVJJUJtRWsyK0VVMjNbRElCdz5gSjMvX2tiLFAveGAwOUJSUHp7UCF1'@;
put 'VVdsLEZCJStKdT5rPlFLWi9uSnQsYCE8Umo4OWBmVjMjeitdX1pJbm4rNF5kRTJVVjYsXzp9TVJ5dWJoNGw1bGQzJnxfaWB9aCxbdjViT0ouO3A7VkQxbVlKPUJBSD8zIk5jRSVfcXwibUN4a1tMRz1pZkhCQ2J8WSRUZkhJZ34wXj4zakxoS1VnS25oQ1s9a0NeKn0/NT1rKFJfSGIibzh4MTRS'@;
put 'SThlWXZpSEsjdDJLanNxQDppI348TyRgQChtYz8xNl9YMUtfQ0VLTyNUcC49bjZrXmo5QDpHOV9HIWh1ISJpOiojL3UyYH55RVFdZFFVXnNxVHVLNUJUOVErJTZRcjQsblhiMGlmWWFqen0zcXRpUnAzdlhqVWA+a2UkRmQ7NjtwdXZWYiNROXJHVk5bZjxfTj5LeHtbWCRdPzZBJlVNKXFUT2Bx'@;
put 'e0JicV4yLnJsdTlpInxpKzlHVl9Yej9YayY2Z1Y7Kn5yQnVNLmVDXn5AaF8hMlFFN1YyVFVRQD1gOHA/emlRayxlOSYqRmNRT2dwbyhlOTJjVjE4dFBFWEM0QUdJYEhVNSZvYDFSQDZKKkwzPENxWClCKikiV1FgMSZmR3R2allgNkAifVEvQkU8TERAZVN6I1k1dGVpT1ZfP3oxSXd9LF5bVSNS'@;
put 'L3dBQy4iYVpsZ35qLzg5fXgyfCgjKFtbXU5KVkU5W3xRL0JFPGxbcDRvbHdqUSNeVUV6IjlmIXJJKWBGXV90S01BXjxCN088X2w9OlguWF4xeHVRN3JaK040bDIpQGNpNT0ybz9XO15qNmQhclBdbTAoSzh7TX0vUS5hPz07OXdiaTVbU3FkSHVARXJvYDg1UFszWTcyIS4hS3RkJlI2YkR8cmFL'@;
put 'R0pJPVA/PihVVXs8aUlPXzpXdTh0REl5c3R3REY6cVdzezkzRltuLiZOLHwsfTx4MzxIP00+Qzx7KG8vaV0kbk12SDdZNGpDSW9XSFJyNFFwN19ARGYwW2ZaSCZxSjsrJnVZZ2NpY1grNEF3cHl0cVRbZCYhfUJEOS5IeF84NXhodl5kNnl5flNDPV82QCFbckg5NWh6PTFpO2JQa0VDb0dxOH1m'@;
put 'TCRXQT40UzpHPEpnVD5rL3FGK3cmQExlY10mNy40ektwW1chRUFsTDN4WHRSTl89dFRdVCZpb3p8ejxneHJ8JCt0MTJIdSU0XT96flEkbFt2V3doTCVRT00maGNZPjhaRTcqV1hoZW5YSERvVWxxJnBdVEVbSjt1MlEpPiQhJVpiO0twTW1oUXJLeGR5Zys+bDpAcU4zLFRTay81aUlRLmE8ZzMo'@;
put 'NFRpK1JuUUQkSEBGJWRvWClbc0lTWWheVyt1eCh5O0thN30mP1c7YGNRKVJPUiJObkVrYUVYYCx4d0JILmtYZDUhUm1oOWhXViV0KjxTWk02TmJIPGAqL3MkOi8hMUIhQDFWVkFPaV53JCY2QTAhcGNkdWpBOCVMbGAoekRPcE5+Ymk8Yi5WYmxwUUlNSCxnTmw5Q1AvWTMxUG5KVSwlJU9VYUtE'@;
put 'Tz5LdXAuPTtNZ0A7c1hiYlB4RmFrJXJCS1Y4U0RyQC5VPU04bUw5eWNVRjtlRnlhV3N1TSlfPF83NzpoezA7dktrNmwrRUo6TGNLRHhfWW4yU25rRU1MXz5EVHpxc1JyelVVX0c8aTsxbjdkPlA+Vl9QeTxVI303NHtWVU5mUl8rfDJZa1JLJU0uaiFaMSEzQS5JR3kmOjg5ZU9xdk00YXk5OUNd'@;
put 'WSRPWTNxTHdVVUUodTRsVTdJOj9kPVh+b29FPzQuTiVRMHt4Qm1RT0RSK1Q1TixpM30mRndgSiQjPDduVVVzO2BXI25Kd3hqZm0oOHZ6X0ldRFFdOEQ+KjY0Vn5Idjl4VkNxcm9GS2piRlZIIWtCR2gmanNuQjouT2MqSHVHVS5VcX1tKTY0dWxCTUZsWmZoUyopPGZxVkRbcGxtM0VEVkl7XXJj'@;
put 'YDcqV1dUW3pJOm1MTDZRc302MXo8amFCVHAkO1kwI1FfI2s0SlcjUl9weUZtRSZ8VlRSRHMraW1IfVFdUEMycEVeXSFxW1BqKDBwVEtmVThPfSZtYjB6WltSbS91UTN5byFNcVVPJGBLbHZCVGNiYVJ3R2RkYEprQ1tKcXJea1RJT15vPHBEUzF4TUcrZ2lpNVQ3QXtZW1N2WEV0dSJpWj4kWlUp'@;
put 'UWllKCJqcGNHaV1UR1liMihKREdjckh1RXJuKUxJUWIpQE01bkMxeUN4IXEvSCxkYDFkM0lUdm0uO29qPlJKP3NQQHZtbDBZLiE+a3xxZGJfRiRwOS5icis6L20lUUJSNXFWMTZ2QCMqbUZeYFc2KzRUVDI8ZX1tVHpuT0o4XWpiOjcvRW0sZzhYZ21XYCNaWlEwQDEkYD1uejAsTjpLWUVWRjEs'@;
put 'TlZHNlpFUVtyd21MKzBRZG4jI1U3Z3Z3e01SQDwzdnRZa2RNc3oxT3ZJUEtASklZd05eQiE6PWVIbERhXjsjL3xEdmtXVSFCfVhRNU5WSUo4YFldcmFHa3Jib0E8R3JNa3RsZ2oybEw3VlV4fD8lYnlFPShOTm17KCxfQWpiWX1GKiwlQH50b29YPzZgNjZJMnE8cj4rR3hNMnN9dERbYFAsQnEh'@;
put 'S3ZBVH48ZUl2MTBGV18+LE1SanB2Z0VFRStAKyU/VzN9ZkY9b0ZrRC42cDlpWCZ6VTNnO3soZmtAS0ksbioxUn5RR3opMjtfTzpwbWVrLmkpQksjcXRadk00ZlQjW3BaWSIuZl1Ac1ViS208NlY1WHkyPFtmMnc9aDR0JSZ7ZWJNI2d+O3BZJEkycDVfSjkuYGBgKzl2dipOe2dvSlFOT3IvUGxa'@;
put 'KyxOJVZDLjlrOSMjS1A8VDJZVC9Ie18pZz8lfDJ+RFhiK3I0Wjpxe0hvbylnPyUzR0RaPVhiJCRac1gve2taTDMvRSNtXyg1WiYscmMxfmt1LCxAdGJVdTVbMVNNdml5ai80RyFlclVNSDlTK31QZT5GeikyV0dIZiR5Il5lSitxQlYmSmEvRSx2R1dNZ2RgTUshLyZwR2A2bXpOLCE8dzB6VlRO'@;
put 'I2tDXkIxNl9tR11rJiojPFFeLmomXUZXWGVmZmhdNmhjOXlaZSlLe2pmQkNLS28kb2FnPWNJQllaaG0+LGhWYSNVe21wQEUpV3ldQ3hFNVN7YyJgOG0+azN1eTQpQiNnYTxlZipaVVU4OEssSXJ0QnRIQC9AZyZQKH1OcHAhdXV+TWdWPWpIdDVbezRkcU1gZDxiL21gYzp8RUgvdyZLKSFrJks/'@;
put 'KStMY2t9fkxxMVEye25pYiRVO1pJXkR6TVo+NGosVyZVX2hUS3MvZDcsLDpgUSReKDpXUEZ9Rnk8dl1LZXhMUGlaPnFHbWk9NnVYPGBhMFR+djtGb287e2p+ezZZa0ZAL2AhbWQsNGpdeyVTK3Z2MDNGKEgkWywkZl9Cdk18aVZpR31eKHcmO28hRn1vOE94cVBdIjRTWmw3STU2Pk8jVClCbk1y'@;
put 'YWJPOk4zZUp0eixiczJOc287QT0ydXRsQGtxcFBkYSZpTT5VK0hQWi5FQHRAOENpQ356RHA9blQsXjVVZ0BMc2h2cmhvN3Z3RT1fa3VpUjx5QikjO2V0e3FMWU90X0prNE52JFozVkJRezJOLmEvMTx3M0ddLFo3fSFgOTdVREpVTklpPTl2Lk5SMltQRnFAeSpWcXNzV2BRfS8pO0tkOiNZOEBW'@;
put 'IzRdS2sxMTxvbEZXYDRVeSE3S1NdQ15PQj9gK3M4VkliLEkxMEFMRmxrLiFncXd6QyhqJExGTGlgPGg5VkoqOXc0aSkjPlVgfCRaT1N0VGo8dHtmekg8SCs7e2ZCT1JBTysyYnc1bVpAd1srVmZqUXMrWT5uK09NKS8oLjdRc19ZUF84VkIvPWtRX3BJaDU2VjdXbk9YKjhXaDVPfl1OaVg3JUZK'@;
put 'TG10RGhbMVpYRVtJfmxRMmspcD1OL01Pd3F6QlVSYVNlZkR1Xl5nOThva1dyKXw4Ty9ZKjg/cExAdDBpYzQ+NmxTaX1lUGl4UVZuP2p5M0sqdUBeRCZNV1EpUzlxQ0VqbV5wT0t+THg0L0IsPjh3RmhxImdaeGJoQlc7UTc4UXNydng2Vj5wNGNWXz9jcUM0M1BkdFpLZ2x1V3VEYXdSMHg0NVdk'@;
put 'TSopRFJqZyUuYUc1QnlWM25XOD1ddXB0Y3F2Z0U2dTdQIVVmeChLb3BmbDglZF5tZTltKHEwSmV+RElve3JqMl43dHJwIU0xJU48YnExJVtsImJwMzZwNDZQPEhWJGtbR2hoT2kwck9pSzVjS2lVdV5vXz90UztRP1srZ3o7VStmdEpDQzVTQnhHITwqanAzPXJQIyV5V2lQKiQifUY9bVJPOCRm'@;
put 'dG08cHZeZ2s7VTskRURlMnFsZWNuLm5MSltIKWgqWE12XjlmcmJhOkZCNFduK306KGJIVF9dNXUpLjA5RXc+QmZtIVNmaEl2RF1QO3FNKTopQkUqeCtqSldodSpJd3VgMC4uWyllTmhjMCF3UUYjclVua2BGclhyZC5VPEIyOSooXixeOU1SdncyYHBuUjFEaTFtR1NhfClgUT04S2JqeW1ZN3Jm'@;
put 'UFtXKEouWDVDU144L34kY2tdcVZ6MCteRlBlJSojTD9gdjtHcHBxK08zXTJNdmYhTGo9PF9WK044P2taV0glS3dLNlBydEdSPWFJeDt6RFVnNlg1LF00b2QqL1NLPl1GXj94VEd3XjN4b3tyZTB+R0EoZllWV3JRaW00Km1OXX4+OFBKQD8xdmxRYG4lZlpwPUkiPVp9NDxSbHhwTyU7JngyIT1Y'@;
put 'XnQrU1hZLCV6eHNSUD9pL2d2XSY+N25kP1QrZSFlIiN2PiMxOyk8MjQ3dj1eYlNzbC5pSjt0UEhRdUtHUSZGW2xSPT9pOEQ/OGNYVVVdckx9PmwvW3llRDk1KmglZkN2VDtEdD5bdzdDbiZiVklBWTNxZz9XYVQ7eWEvNFVFdGhJQWZKR148OH1MIX5hWWF0VTwzMy9sYlgjPyprWzZgU2c7NTJF'@;
put 'TSlSNmNlTU57W04kM2BgT3xNRWRpc3VVVWQkQWhjXnBIITVVZDkpZGVoMG1wMzVvXV4sYlAzXU1Re0U4IjVlRGRKOEFxMVloL3k7eXgvS2w+LiZXfj5YQUArPEUmc0U3JnNWXjQiYzhPKFRGWmhhKyMsVChUakJZOUMyIipRZnk1aF1UZkAobFV1RWpzQU9eSnU1YCtMcD04cE0zXUk7a0JsfXg+'@;
put 'WHZGXVdgT3h2NGVickkocHleb3YhJXl9b0BTNl5ZIlNNNW17ImM/IWx3NTtDPlo4KnFETVgzUX4qRTJxVixTazpkMF0/Y0FJUko5Kj8oL3BJJXk1PTVPWTh6dXUoJjhbaSt1V2ZbNEl5fV0mQW1vPjI8QSF+UXBKW1YpNz42YHFkPTNeIy9pVlVgdGA3L2A8YDxzNX4ifih2TGE9bj0uRWw/aXlv'@;
put 'UTJNb0I2dnVEIjwjQjBeMnYvU3JVTyZ6djxzWlRdazxaQWEjI2ZNW0UmOjY4Yy4wMUV8WWhnJEplPWpaVF5iZkZoPFQhQmFFKDcvJTw1SDpMOzVDZDdmWzsjMWc8S1padk9aellUYGg1Xk91L2guYW9DRDFtc0xffCZGQkplK1NSPWBSM1hfPjZMb0Z8dy9WajA+YVMjV0V2NDYzMko7V0NmQDFf'@;
put 'QEVEeF5LVmptZ1koP3VEQyQ8JjxsYHRgUzg1OGkrMS5hVV1vR2cuLC93bDM+ZFV1NX52dSxlYTdFUylvWEI4aTtXLl9PRXZQXTksXT1SbERMZ1hfKnkqdjBtQWlCM0VJcFVdeThuNUVGcSY1Q3s+eVNudEQuVHlwOEVsNSZ2bVgrWV9IIX4xd28rcndeRHF4VTYzalJabTAyNVUsdjNgdSZZQ1Zd'@;
put 'SVRlTHUlN1YhTVhjV2RaNDhPUHorUSFkeEE+Ik5oaEx8a3Q9V2l1ezRIKUkodEhdey4zeU13eSJGYmhHMTxGTnMreWIsO1NCZWd6Yjh0SCMjbWZTVTM+KTIuR0xGXj1wUz5xejFtWGd0JTFzRkxHeHFHO042Ink7LGNOWnVtN1RrOHtyMClbXjcrdiwqWl4zViphKVtvbWQ4fXZ2SzJsKnZZQ3hY'@;
put 'cW1qPjhjKjlQNFA7VH5eaWRkMlRgRkFMV00lfEFUMzJ9OUdNSnszQmBNOVJweUBvOi97YCxNfHdwSiV4VHgsSFtjaVR0Sz1mZWpmT2VmNWg+aXUrYGIsXy9LNiEzRVBhRXp5aS9JUDo+WzVic3lRXjdmfEQqNGcjQUkiNFFgd2NzLF5TdlIzOFdoc1RMLlheIUgoZEcodEhsPEloJEBGYEdsdSxr'@;
put 'VDYud0pocSlAJk90USYsPyFtW1prd3J8P2p5Wit2X31vOCtaK19STWpOVkZganlDM2QxRzR9eUk2OkBZXWImWiYoR1csPHNKamJ5YTxnaV1JaDFnaV1JfntZYjVqd1FfWnxhTm1BZSM2LEowRzptRVt5d1ZNX2BKT29aPEgsY2lpbGdZOWF1bjcpUml3SVhDcHo4dyp4ZENJUS8mR2cmZDFdMFcv'@;
put 'WmdmWGEhPXQhJG1OfTB5L04jTVExR2cvc1JJYlFpL0A9LmhEWl47I15HaUdOZFM8Tl9qb3YmKis6JHErbEpXYTxOVUZJXmZMbDpuMVYpOylDUCM1KDJRWG59V21ESm0zPEFGb2Emc0NWc29OaVpVMSVMS2pYTW0jeTJ3bThQeDt2LEtFLnk1QyhtUlFRZSQxNHR+dCtpNWYmbSNsU1B7VzdKa1FQ'@;
put 'UFtXWihddEApLjdgV3EuV2MmOjZrSzgkNW1JekxzUiRwUWNgQ0NIWmlFVG5IZTtecylpYG8vUlRLIkIyblduYXxacWdaRkoiTE4oPTIuTEZuLGRJe35JVl0+YHFOfkREXV5bbkUkO2w0Vk5xPldAXi9Dc2BufXoibHBvOGN2X0VANWc0Ti9wQXE6YmB5d1ZuQ0t2OiFQT20rImtATncjMkVIWCRm'@;
put 'MXguOkglYngwdW14Jnt5azhZKzArUnFrNj5xTG1wfEhlNVRtNn0zUkNFNy8zfVVLJStqezxmX3dbSHZYdl9NNF9VInc4L2N6e148TU89P2Y+UF91QHlpd0EsbTp2d1M8PEh5NWwkUTQ4K0FwN2dmR0ZzKXEvVEI3Xy9OTEpRWEt0OzVsaXt9dkVPUHQ/OCZYO3R1amNQTG1vKzFtOWRTQ1FeeC8k'@;
put 'UUtzez1VOGlZUTZBMGVKOEhzZ0Rxb2luWD0jPGRHOCw1TjsseVpmMTplSmB4aSFOeXNYTWE3OFM5YWFlO1tkU31jOkArLDAsQHNmbHg8IUV9I3YwJF5qTFNkLHpReVJYYyhdJHhiXmJ5QUwsZDkwWyw3bDVofmRRNkxlNnUsNXFaMnExNWMubHp3VlgxRntVbVZ6RmBHJVJ3ZXlzTnV9djt3SktU'@;
put 'LDFyMjomRTtfZF9GNiVtOGFEXlp+VUoqOixzYEpxJSV2UnE6XTddR2sucT14Xik1ek9oP2FYIW0yU3ZSUGt1MnQiWVQiOzx3YW11REYuIWAhWW1VR2d+PiZuU1I+MzxzbHBESkt9RnJPVmldQXY/a3BQPHs/Y1A2U2J6MnoqPltCPXVVIngpP28jWmJVelkrV2lAUCQ+aVReXXFmU3lXJFosZU1X'@;
put 'RGoveUImfmdRakRNM0tGfV5acyRWSSFnO09QfXkiY2p+WXJoLjMobVc5OXMxeG1jMztLX3pwNERLfl9IVWA/dHV1Mj1NOkczfVhrKktKPCheeiFrSio7JktYaSlSZz5od3tDQU8+UGtRNGlZaW19Tj0kZFQpbnReeDJbSiQ5c0wsXzJnPz9mIWojMjFZRkw4Vk1TKX1QaHNAUGoxej51Uk57Q2cp'@;
put 'bEREO346UlAwWHVHcXVudHJ1UGk9aFVxVWNvdVJOPmk/VzgyOXUwez9XODI3dTB7dUhocGJ7bVJkYzdVRGpGTSwsITVVKTpXfX1HeUhjMl0/eDwvUVNVL1Qub1NhLzZlO242M2dYTXJAXW51Z1hxRl9TbVA5d0hnaEh4PkJUS2RzVHUmd2UvanJ8JjkpMjhJMzlUfnl5MFBAZUtCSEI+V0VPdU9O'@;
put 'QGZNMXpBKyZPdERpfXwyfSFkZE49dWphNkwzYy4zKChObDd5QUB9NGtfamNgInY6LGsre0wiPC5hKkdPVGhHSGAoTWFKLDgzdWdKXioxdTYkajJTQEl1XjBNO0pZeSZVVylNPDZzezBKc0UpTDVOJWA4TzRubCtpUHxOaFY/N1lMZm0wVWtAcmwrL1Z4PHc7aDZlTDEsfDMzcFpyQFdOV0FPQnV1'@;
put 'akFeRDB0ZC9Lb213QDFxVDU7WW4wdyZzRjw3YlI2TX5JMlhiNCN8YFQrPThFOCY6NCtYY1ddSTAsW1QiPkwqRElYLzRtNFB6RE9NRVBEKih3ITxrU2hbeVByVCtBZUZ3PVVsbjxpKjtlLypySDt8PnE5KWZvbWd1SzgkWFFfRX46RUVUS3hpdFg3MW53Kn0kc3F2MG9fRmUoZE9NfVB1L0lYUVQp'@;
put 'cjcye05PYFU7V0gmbDkjaGNKNWxJTD0kP3htczw5WFROPy8xdk9GPCV2Q0tlSDtYIzQmezhmS21iWiowcDVxZTxXUDc7bytSU2RiYDI9dllyWDdAcWdCOFlGekgmUz9pMDtQcFpDX1pwd180YFs8MSpDRmo/MlFXbyw3ZFFTZ1tjW2hmcUxeO299NEUvViVhK21BLF1lQiFXRUcweHk6a2ZxSnNs'@;
put 'fUNjX2V3ciRZfXFAUl9WVF5iPWJgMlNAbUY0ZUc8UFBRWXY5L0Z7OHlLe1Ipd2UkVE5XbkxMMDhORHlqVkhneSh0ND8yLFRQZXpifDJqM2Vpe0E/X3R9WiwsRkAuVHgpbnQ5VHtULHJrRjg2Q1g1IygpdyQsbC97LlIvZ187aypbTD9lU3d9ODw6LE06cXFvdVdNYFgwRXMlbSxYQXVAW3ZXey49'@;
put 'PH01Rmpidjx7ZW57fDpsM3lZYSFSNj5vaFBGKGY4em5pM082PmkvcHlyZncwPmxnOzZsbSQ1SXMqeGglZCVaa0tUfFZdW15VO2p6QDEqTCpnPlkpTW9TNUo5bjpZJjVfdlYqWSkyOXZWcVZHSSFERi54PCUrYEtIVStyY0NDWyI4ekEwUHJJaGpJdFY0dUw3Pm08dCFEamo1NUxgPTlacUxsaTxq'@;
put 'UGpeNzEmWUlnOFJJRSt4c3JgX0d9NSNYL1t4a3JYNVpzWVFzcF9NQUt9aCNyJklgbjUyTkxtflosX1okXlt7LH1wUkkiMm46SVg0RXFIcGZYWT5jS0pxLy80JTZaN3puMjJCLHQ1OkclTjBmdFtafld5RFozR2F5RSFyYTF7Q1JDUGU6KkQsKUYqUnViW2pJS2VKKk8vOV9xZiNJRkthVm1pK31p'@;
put 'aVVVZ0s2ZWRhMHlUQ0RAeHQyc0wrKHhxcSQ8PE5lZX0odTB8M0hYR3RZLj1bKHhJdUBhSFJjUDM/Q319R2hieHg5ekZHUmMpPUx5WEc6Y0BgMXJtNyFmOnxHNi5nTUpmNU1wZ2V6QnAzcHY1SSlOaSlbOHt6eyhlVUJxPjZbc0wxYmh4WUN7WmsmYiU5emJyc2Z+WyN6LnEjbHFwc2p9VCEueSJH'@;
put 'PC4hTCp0JFRsK2tYWnNXS1J6P29HOVJqWExKa3dJMyYpImZMZUBIN0s1N0RAYW5fYn5uX2FzdlpCYz5HPDw0d2lQTjBlITRdbCldZmBeSDdnfGBQNkV0fix2R019fXlGfGElNFB0XVluYyM3SW4rKH01NFlWMCk3PDxyVFU/Yl5GIXY2MiErdH5wNz5rUm9MTEN1eEV2S2BXWlg9LGBoekc3c0pn'@;
put 'empDPjRSNHk9c3RAPH40bjVIPXIjUXdSd15lMnRedmsrITlvTH1OU0BmTnRyJV5Dcm5hU1oqYmxxKWFjd2VjIU1AazduYiwpRmdLL1MvWkt3P2heL0RlK2w2OjxTfFprcE9pSzkjVSkvdyVIOk95LjZGVlskdmIsSTEwSnFNfDF8VVMxLFtQK1ZeTENwTU5OVUl7UXolTH5yVF8xWTsvVX1+ZjNq'@;
put 'MlkuJj47QX5HXShMTlAkZFszd2k+dHQ6ImUqZmRNbDh7W0FNWD9LNmhMbDU9eVhEelphMGgzPzVdSTo1ekc0eyQrIUwiZH1YKEJkcT1YTlM5TTt0Jnk0b2ssIWwxP1pkYXdbOCZ1UCsjWTdqc31IRHF4QGlxRSJeTzYwKVp2UDBIZjFHJlhnaUdDKFNuLGJJezo4OGUmbjdWajspeCYuSSFNfFAz'@;
put 'RUYzPnU/KSQvVUohSmVkNVFpKT4rJGNbY3VqVDVjUXllJVIlUD8wZFkze21JI29YV1pyIWVII3h7aSVob0Rvb0VtZHYkLjJ5NkA9WFpYeipSUXh8IyMuKSFRfHg+cFE0PiEuWihidz5MQjVIbjhrSVkxVUlYUC5geXgrdFpJait2OlVHenEvd3Q7JUZbS3hpYitTZXpUXmt6O3U9YmpENmdkRHFM'@;
put 'RE47dHJ3SEVCJmAvfGYufH1rOSFSdTNwUiNjKnRqT1lLTTZvcFhgS1ohTDFPX3BaPFQkUmNDXi9GXlV2a2pRN1hEei8zM3xEKFlXaSlQK2QyZFtIP09ZVSZEMEl8a3pmT3dmP0gjJC43cGhCaz5jJmt4VCw6Wj9XTUsld1V6IWw5QFV2azV4fCZTMDc+W1cmM1o4cUNKJUVBYF9pMjlQVnJ+fHhs'@;
put 'MjlxZmk8fCNVSmokYEVTc3k7QG8/eF4wIXo2fnFLVyl1Tm16IXo2UFZddWF8PXR+cXVTW0RaJmFbWSowZHRYfDBRITZ7VytQN19jaU5WdyErazw9RGFKa2UzcDtVMzx3cjovWD4zVUxsKi9uPCUueG4zbipsQmRlSU18RHgqZjE1S2I6WUlWZkArTipzPFpLWSVNcmwuUT1VOSNoVFIjbEtOM3RC'@;
put 'TGFoaGNqZkBaMlhdSi5XSlksWiw3cGY/IzteSFhqez8kbVgycXkmZGssTWR8WiUrNT4rMDViZFgmNVY2bTp7aUp3RzpobzpZIjNHPV8/Zk1TTW5NM0BETWB9UVRgYmRyaC4+Vl1jT1Z6Uk5QKGd9M2s0JUQ2RSJYSGxANCUuN3A9KnJzLGAkK21QeGZPNn5wKEIsa2thOHV1QlFEeTtXT0F6Pkwx'@;
put 'Pz9DYDZKNiUrYnt+YGpRZXIyTVI6RHo/ST5AXXs0KUwuTXtfb0hbR21CVV0/fEM7eXdUZVNIdUtudy4zMzJHXyhTMjJHZ2Y3cS9ifTpTKmBhez0sRyUhc1h+UTcmRWFPWV1gNnU/UGh5RXAmMFQ7N3ZKX2hAKkUpZkZyZmlwQGlGJDNdT24yek5HcnIzNXEmbyM5KDU4M315Ok1MYjsxV10+W3ss'@;
put 'YStoXi4kY15oW3E8JS4/dGdAanA8aileT3pOKzN1W0NZRUorPy5vdHxdWUdYLkZHN0xQSjluYlhdMntUKlVBLE19dWpIfnRRTWAlSWw8SS52PTgkPFVkZlY4ZXVacVdlNjR0SnBHMkxvLjRveX5lJDRAUXokY1U7fDY7P3RtaWh5Mzt9XX5KayV2a1RkUCg5V1EvU1IlR11XVHp4RkxEJSFhdHF0'@;
put 'JUdya28mQGptKWc3Si5QWTV7VE44JEc6QE1qYWVnS25eJDJUPFBqXSx9eWMhQDFVVmRyVTJ4ajs8Zm1NKVIjbTMoW2EkJSttcGg8NDpNYSR0SDFpUn4vc3k7L2RMaHVBLC8lcio5Wj05NEp5bStwaSQ4I1F6Xj0wMz1jfDxKKHVrMnVkTiZYbUBqK31DbHF+NEpoRXI2dWMmZ09nemwyMUxSLkBi'@;
put 'SD0iTCtxdTwlbkQwMXNdKyQvcyUjXSY4JGQiUktVUX15UlRLL1hYVXhdUkZFV2VwRWF+KWkpfXZmWGhDNUE8OEYlNT9nI0R7R3dSQSxGaUZ4NHZ5RXRHd1hOO24sckwueWRYQCw4aSQmZlpSSUpkWnIvOWZ0Kz92RltVdjNtMj4uMVhiO3MmdDhrZnpUQCo7ZFt9d3srZlVoKWxeOT5hcmc9Syk6'@;
put 'WktLJkgucmNoIlZPWjtQPFM/Y3k7W0tmJEJ6YTB9dlllPltdVExVZiloZl1IUD9yeipNYDY/SVc0a31qIz9lLF5RQjc6Ui53bE1mIlZRenRaem1ZNChdXl9GUVBwRX5sYm0rI28vV2UjSzgwTHN5T2JmaiM4aUNLfiUoeTM2ZDJybHF+X1F6L24weztzejkhWXVlTmdGLitZbSsvZkhhNUI7Tilk'@;
put 'N1d7fDZaM2w8Z2ZxdCZdI0lEWkp1Y3JBTTdpL2YjOnk/UltCMlY9ZWZNPX5aIzJKRG1YKGUhZ1NfMUQmPXFwQXtROn1SMCJoR0JANE10b2E0VFJyQklGLn4/QUprWVdQZGNKVyY7aDlJTFtpWSY1STVSanlHclhGW0tQX2I+OGwqI35iYD5sPlcsd1Z3JFszVDFPRmdOOyoxZztTLjFbVj5bXjx9'@;
put 'PmZHYysmVDZWZ1Y+WzdVeiwlWDMsI0V2Z3RqI1ZvZXVeb29KKD10OmNWOy5vJltjPlVOKGx2eEt8OXpqYiRJLjFgTlgmfDwzNTMzUz45NC4oS0tsPTczakB9aC9mYiVRNSQvQkgydis5ITREU11nLjElKW4qVzRVayhmZVNWOkk3dzJ+WmE7ZXl4ZyN3UXYrOShKaGVAMGxwYSgsbFBgc0VgVndp'@;
put 'V2RPU3xtfT9qYX16MnAiTnssW2h6YldVI1d1dHU2PFZAanFMKld9OldddkcpUlRGQmJYXSZpem81ZG1lIStxSC55fGdASmp6e1ptJEFvIWglWlV4PH0uNWwoNHdhTWBLUWx2WUUzMEhuOCZLS2xqY3BWI1olW2QqKypEUChfIS9sNTxmRCV9bWFNMXdwOS81LzwiSXt5c0tMV0ZMSkxgb2dyMT1D'@;
put 'b0gwT2hUSWJWZi9bZzdKdzMwWXE0em9iYmd4W1ZXLiFySVlTdzQwVHtPT2ZOZk5Sdj9mfGg/PENtdVJKNVo6N1pCdG4wRzZjSUxCMGozVks8R24oJiZ5KSozVjVYUz0zIXRFSyFpckhHMCRZPDFOYiNPK2w1L1lYaUE7UjZMeioiMXRmQjRFQFs6SzF1aSM0ejQwYClGNl84YmJTKyhQWG5SK3lN'@;
put 'Yy5XL3JVOTd3I2dyUCNaOUdLIkJdcjhQdFlxWV9pejYsbTQjeloxPFVQNyFfdzsrPGk0Sz9jeTNtZU5oOHQvUndsP3d5cTA7YGdTK2U2WitTYDh2Wz9pL0t4ZHhWem1HZFoqe0w1ZFNKdU4kSyJTaHNFPm02ZVZOL30iSzlvclZSWiVkUFh4aTc3R3l7ajcwSCRPaExrcSt1YlJUXVg4OmFWRDks'@;
put 'TkwpLDF+QEhsaSk9VjYpOixDXUJgSUw7XjFmQXVDeGZhXUgicl93RGI3cEUxIyMidWpETEtIKyhacVZyQmIuXXl+WyRZKVpXSCsxRytROl9tZDZWaDpCO01WUXNLREpiY0dHPnlJOl5xUnglW096T3ojcW14cyZWSFo8X20yQnJvM1giLlRQLCk0Z21HP2A4Kys8OVpfPV5aSSozdGZqJS82a2or'@;
put 'UD0hcVlRU0huUzoxJHBkZH5xY09YSU9JL3IlIWdsUiE9KEBLTHdQVD9sTWRVO2RwJi5VZEBpKzRfVlBeYmJtRnczMDEkWzdgLyRIYUd4RmthR1VJImBJS1dVNGIsW3YmLGs2KVBCU0ZAJUJoKHA8WFV4RERXVUhTYFM/fWBOYSRedC9bVjx4L21gZ2VJWXFCYEhvJTpUT04sT316U2RLfTZHJWNx'@;
put 'NDJYWGQlL0VBIyhSTkMie0UxUDduRmAqQlU5dnNVQW8iW2hnITl0dEwvYS9JPWljRVFBQUFBQUFBZ0FBQV5VNCw+d0s6NUhMTUx0MkkpMmAxdGpMe2l2VWYoYURZLGIiNGQvKXlObjIoekdvaFhkSCttIkkxfnJrV0piSTM6U0BEamBZM0M0c19LN1s7TCR6bzBbMDEmQGgpMn4oWHp1IVtDM3pI'@;
put 'dEUscCpiXldLU0xZNipuYGUqejJ3SmhzQkZ3NDZJIVQhPn1LRTRUZWgzJmxDLjE8TCZedzR6N2hZNUUseVgxPHxtcH1EQzhwMHsvOWtpcmk3QTxAOEAxXiU2VnsxdjZ7XmgzSXwjaDB7RiFSaitgOCRpJmJVP0AvQ2J2YDgjU1lUJV5Ba101YF1aUTVLOFRge2lYLzEyJUxsJDJqSl10SmBzPkVs'@;
put 'QCNaRjZlbmZFLExYZ0N4ZmYpb2tRJSt3VSEmU0VVWDxtTXtmOF4sWjRoUUhUVGswZ2RCJXY6c3d9S1ErazdqREMmOWxwKEVnK0ZFZkBRRGNYaTlqRHl6aVQvdH13V3Q1bW8menkjJjIlTlQiJnIlOXYjVzp0U2V4W3w6TWNaTGNvMG80d2hROjchQUZnKkxYazZsQzRTWUNGV1ZSWCNLOyVMY1Vv'@;
put 'IXF0T2tkTWRGQ10kXUU2czVbTVpTZjUxUEpabT81KjB0Ujk8W0YxKkA8RHJtNVVxZjVxc3Q1LGRdcmhjP0JobGtOalh7ejE8fSllQjYhfi9hd312XnldSmxufkgyc1o1TlBSO2tmKmY2b1NUPHkye3tFb2A8JlskRTRKUD9XNi5MW0RHTnxGMz1AOS8wdCpDJXoqYilOMEU7KUl5PWppX0okQnUw'@;
put 'S2l2KERicDU3ZD08QkRRV3k3YVUmZyplSHgiWFIjWUNaaSNsQjIyNUUjfEoqUyU7NywxfEosLDpzUHgian5FRWs6UjwwO3Mwb3FxWXhdMGpnaE51YiFSKk5IaUAxemszJW9CQktCZUs/YiwyVFduMXVjYEIhfiVGKGNPXWVeZ3o4IzZxZTFQREQqVyRoVlB5dDd8MH1DaS8rdTpfQX56KTwmazcm'@;
put 'I09UKlM1OkBmMDY3b1k1KTNGcV1JUC5COzNeXW5dQXM1O3QwcExQeWZlJWchPTZJLClheWhaeVN1fnE5OXhgJjtUclNZWjs1WVJ9MmdVRFQ1L2ZTeip4Ums6L3JuaFI4PFghQDwlbHBUeHJLdFlXP1hyWyxkfWV+NTJARVVhWDl+YFhrfVJHWVdwNDNNZS9BeShfJmlDRU4ucTEsa3ByRWo2Mzl+'@;
put 'ZW5UcTlUYFdpb3wxO2oiXllJfl9rMDJrNygyTWlKV2ltTV5DRjBLcm5EQFgqIWt2Y21oYTtHfHN4KnBrbyx2YXheI1s0Y3JGTFZTV080N2M+YmNiMl8md1dQOkYjYyJtN1hkeks5ZUsvN3VQJEdFTlBYQDpRSXAoV1VsQjhnITpTYXQrYlB7NDhtR2pXQ2xCODBlQElHPHUzSHg5ME9fNl48Ok06'@;
put 'KypRMTBWX1FASmd7N0pYN2Z4NX5UQ1tMRiU6SXcoZ09lTyQxKEpJRX5hY3RmKDQ3Ok1IV0w1QGIwW2QqXmpfLGZtMlJEXVksKVhfNUlRQXg0QE57fkMmNkkoQ2wjNHlpNlpSISIhPExENig3WDlmPWtLRjt1L2R7Mj05YCIlKjlYal5qejFuL24scz18JWU2NjsqaDBdKyt3dU0ja3Q9TCRFTkpL'@;
put 'Wlk2a1QvbmwvdyFBb3B9WzgkTHpyYTZlL0hVdHJgJkh3L0VKLFE/eSFLYEh7N1t7aFVfQUFEO3U1YVtMRTU4LDREJkVPTmBfUSY3dyIuZDo+KmFhZWZ2VSg1bCUoMWsqe1JyLEIrWld2Q2wvQjojdFJwVX5NT0orIWhpNF5lYCYhbVFoPT9IVHREYXRFU2whdUY6a3hpNXJiV1FHSkZkNzssaTlM'@;
put 'Z0hrOnpWeXx7UFIheEtSOmF3WXsrWEo/TUQ4YTxeI31eRjpSIX0yW2gwaUg/c2Z2PStIP1Z1WihJSlZKP0IjSiwpT3thUG9YT1NPKWIqSk1hQz83dnRPT0BmYkx9KXRzd0IxL0d1VXNJZXx8dk9aRihgfnlgOj8wUGFIPlkmcDxdWkVJcXJoW3M1eFY8MH1oeypbQU9ZMmx3V3RfZDkzXlRUeDEj'@;
put 'NE16KnFrcWRJZURpcGlefTc4IWVqVlJgVmh5UFlRO1pmQXc7W0dDdWRPKmtoLi9WXUY8cUNCNXBrSihoPV5KKzVXI2lGPy8lJD5CUC5hek17TEhefCx7e3xQdXNNL2omNkp6WW8sfCx3fSRCMWFJeTxdSDVhejRoMSVZR2UremBqdzgmN0BFcE92K0RsKiM1LD1nMTxgPU12LCgvUFJFaDwhQkVR'@;
put 'PTdAeHdLbD8yWTRwTiNlNTttenZ5JEF1ZVExXXEvWW9gKjpWNG4pW15SWiU5TnImNFhYcHBWNylFITg8bmhsXyJIUnBUJFNSYEdLUFtKbGcqfW0oV1guISkmWFQuN3ZtUkVMaGBHWDVqUjJjdklDbXluUkxHeT8jY2ZNRW1UfS5zO2MjcF1zRiN3YXd8JCJaKEt0IzREKkooTj1ed3MlVkc2cjZa'@;
put 'cFVkP1NNOF0+aEdXS2xXYHhxXz1YLz4+bWdUISZgdiU9fkJ8XWYqTDsjV0xERno/KnFaWSsmTXtZWiYubF9YUHpjQylJYmt6TFJWR1tELG5Zb2NeIz8rMHo8WyNYem5RWENGKShvUFVNSWlGPTtKTiw6bnpxcz18dzVFSEwuVzJwJElLbWUqaTlOWWNFXnIheWApN05ZY249RWkpYUwsfUNQTjku'@;
put 'bWpDfUdDIzVYcHZ+bTtmSzovMixDWl4iQVZNYTVmR2drVSx5TEYoUEFBQEciWlslbDVMTzxXWVd4ZyJWeXhIJn0qIj9wM1pBaTd8aWlhcV9ZJUhRI1Qidyt8TytTclY2WVNUVUU1T1UxPSMjOz52RXdCTyFkS29kPXBVN2A9eCNKPjNtYVclLEgsXzw7M1VGNkNbUVohOUo5dDU8UWAjN1t1NnNe'@;
put 'Jk0uNEN7eDNKNld5aSNXMlVhUSJHYmJqP1pQVCg8flBbfkVPQCJsM1NDLzhFfmxIbTMjbSFXUyIkZFh1RSp4KzU1a1EyQEl9JiU1TkR4bm1RRURWe3NTZXJ8VTsmIVdMR249aG1tekVTRXJGdm55ditzS1tAWTRhKEokYnI/JWdfQ1cpMF9bRlYuTE9nKl12ZVhSQTg/NjFGdHZQd3c/PVA7VXFP'@;
put 'KlRUXXw8ZDJOW2I5JF8sTldrZ2dRMG42IkU5biFKIlhKRz5PR3NzZj4rc3pIXnUyKzJMfXBnU08uWUB+PkZ5RnBDVjojeylXXSVdPCh7KzVaXzJOIy9Bb3BgfSFsPnlaNzg/PVA5eH1jJG1BNihxM2xyWWorJk9DJVhNfCpGcVJxZiF9d1NqO30jWUxINiVIIW5GWUl3LEU2RzVGYGJ6Oy8haSFN'@;
put 'dGlAZi92OXs+b0UkK0s1WXpHb0EraUQ/LzBZfEdHMmBeZntkWF80OlNsZXVDb3BtOE1JO0kwQi5yRDhLfmU0fWgxTH5VfGRIJWhOYHtVXylWM3I4MWx8b2c6ZTxXMm9hQiRhS3MmOHQ7WD0lRDtLLltlLiRkJmdaa19GaE9pO0twTCxwI35yfD9CXyNyJT51MSI0TUJyVWA+d2RNSVoiWnZpUz5Y'@;
put 'QiE8PXNTaTxGdyZsJDJGUElZX1lMPCZHYHkuRzE9ITEiNChDbms6dUBpPj9xWjZOQm1fQG0pd1kwOG47QippODs4cjx8eSVEUUA9dHAkM3UzRVRbOGBfXll7eVp1L24zZ3tMJmZ6eHM5b3Apajk+aW5edjM3dj9HZ2EseXs+JnIsM1RdUVFWN3piPiE0Y21gcjtvQj8lWWBFQWtqWDB7aCxteSpQ'@;
put 'PCo5Y3F9Ty9dQTd9RVFmbDNOcW88e1hlYXhlRi9JJFJIVSRrP3hKYHAzMSRYOTlfJCp8Vm80LD4kS0g8WFBPYz9FeH1vVHgxSjNXNWg4L2Z7TlEveHQ4SlAhIyE5XT5ROzM+VCM7MD59R3NLMzRIL2VsLk9WNHFmYCN4Rm4lYF4xeF1aKXNNQmokI0xZT3hFfG45OW4lKDl6e0U8JiVic1RGIS4q'@;
put 'L2YvSHpZYWMvaCgwP1F2TVEsJWwoYzgxUkVoenIhLGJ0Tz1UeXZITjAjSWlZNCUydzpVNCEzL1UsV0x0K01AR31IK31acUxrNTE8M2tMNkNrfH1Xdkl6Om0vKDZwcWNjUXBeZW5pemp1JGNFQkY/cDRjb18oYX59Z1Zyblc1SzchOXAoaj8oZ1tbYkkuIjBFdTNDez8jfkZiS3h9WTkyZkZ5dGNF'@;
put 'P3xkKGEkRU0xcl1eRlcmZXkrcWlofXtpfCl0PmpjSlR9OX19V1lyfWkwNkdoKnx2Ukl4LGIiX0Z9LlNLTV8sdyxDcjoxRHAqPEwmVWxsL3g8NjdHL11QLG9DeXtlQkc+bz4pZ1YodmhBY0tEcDhDVE8/fTAqcjBebTY7MUozSUQlUjRAV1pyY0N6KHh5Pi5uMjdyYFpnTSlNWmByLzZ6OmRbMzo6'@;
put 'Pk9KNFQzRSVeQ2tBXWtsJl8xPzFjMVZeZXdOSH15S0hJdi9Ga1QqVyhPKSYkcV5SXllSdk9jbCVlRSgyZjs2fkZoRW1xM181VkhybGhsJHdwfkArNCxEZ1lsT0klUSlIOHJyVHY5STJmbWlhK3xpP2RfLHRJJWolaj8hRHE3Oix6X10zPFUyQFs9clFBR01PMyElPW1sI0JGQ05HVjB+QUA5fSpL'@;
put 'PEZBNFUyYW8zPCVlUHRhRVV8QTx3Z3NmeDNCR247JF9FZVQxK1JNMTVKa0NsJEQ7QTcyJjBlPk9bIXBqKWw7fSV2N1cqWmFYQD5jW35uaXNuTypPUzNxY1ckPyN2aUYxdlhMcCZwdG19YSwjSis0MEg6eGVVKWVmWXVye2psejh6JHxsUWpFIjxQOXw7bGVvQXBiI09eKGV4JXlFZVRoV21sVCld'@;
put 'NTVGcz5SMComLzFqakd4UjNibWNuYlVEWVhGbyk2S31nVVhwU0Q6XVpDPDklXiUsfSFYVDAhU1V8WU8yTVIlckVHP1M5Si9LfXVCdF01a2x+Wz1DeUcjZ0Y2b0JBOiF2YGt4OzVwOF4xZFFJaFRHVT1MWmoubSRUYV8/T1tSRWQ8ang4STcleFkqQXlIN0F5aH4yQkkyI3FwV1EycFA6N090c0xT'@;
put 'NWZRPjZGLkJDeTw3cj5KUSUuZV9iKyJvbkpEREY9dXdhN0ZVYTJOM2A1OEAyZkppbDtsKmdvVXEjdCtbVWVAPjxocXA5a0xBLENNNG5WZ2YmW0xdWi5WT2ltQUNPIjR2U1c4LHArPThHbXtdelBZQmpFLy4hciIxaCkhWHh7NUtnMGJ9TzpncnQxTmVJbzBfWmQsJndqNn5nPVklfCUxcUsrIU9L'@;
put 'ckdMayE/XnRBRWRnO19wO3V8ImZ1WCxkQCEkYWJEfkxRNH5uenpIMGA2eyFfUV44Y1ZtSipQVClfP1l8dUBYKzYwVT9rNVhKYVl2UTpGWDNzX1twbzZuVWIqcDd1UTRRZD1VdCJtSmsieFZtTTcrUjA1UkhQU31qbS58XUVDWlA+NS98OEk9ZkU2PWxCTmE+YkVfYTZaKFlNW3I8JHAxUl5FX2tl'@;
put 'NlZyaTErNXAsdFImfCVNNU0mMVtuRENwJiQ/TG98LyYxMVM9SEhHJG0zPlpxZUQ1S3hEI0tTPG09YnJCeCJXPDV8L2h0Ry8iJkBFaE96fmA0RERrWnZXZnpeXlM9ZF4re0lFRFJJPT1yRHssaF15Lnt5YSNFX2o9OkN+Z0hBP25nP1dwU3Zue0BsPH10THtiMWZIazRPXX1WUnw3ajBrLmYqaUJv'@;
put 'NF8yN2p5ckxjXy41dDluU3JVNDErSX14Vkt3NUZoTSRwOX1WVEBpW2hGRndhXUAzUEouWmRrVTY0NHQ/dFhsa2pSOD9vKmRCUDZLSDgmQ3BuZChITGprajZvTkdYWWM2bSVsX2g5OXNVIitjR0Q6QEYxdTAoYjFoVns4QzhbOVZaT2FFZGJhcy5CKXZnTCRhLzo+M15UI0g0MHp8ZS8yNGt5OGYj'@;
put 'KUlPUTF4bD4zJDQ5SmdeLDUhMkApbWhmcEwrZ2E7bUclTnJdI3ciR3phSmQ7KkBKdjg1N1gkdmImSWc2WE9nVSt3Yks7UjNJbF1pRGQhJCVQRTQqSWd4WW5IZ09AIVBpPXx6QlAkd0BHfGZgOGt9WCFiMipmdmx3N0l0O1tBIWtIIXM2ZD91SXRHRERIZl1zVG0wcW82dnE7SjlYbXdGUTo0dFFv'@;
put 'dXtaK0xWNkMsU041T2lRd2IrM28jY3A1ZVsmZyU2TCo2TG80dm1mcygrIUVwOj0hNUd5TnspKWFdVlF2SEBncE1iXU11eXlYQnFkfG49dHtPTj56Z2dmIyJXNmZpLmpHUiF7WyQkMFUzZGpLX3N6bmJ+R1JHJltSSy90fCpCa0M2RnwqVSFDI3hLKD9TQ1s2SSVKJV0ieHRaaUNXYEchIThJTlJ2'@;
put 'dlR8QkQvMGtmYCpAYUkpNXEvTExAXnhwMVhVX0JkWmk3Zm80Njd4Il02W0dnY0BERVozZkM/e1MkUUQ1M1o8NWZuZkRnLiNKRzJsKU1uQF4+I3U5KUZeYmNdeyJ3K0tpJDVfZV10XzUsYH56WkA7YW9KNXFnXkAwJUw3eWd6Z2MsW0pyK2c5b09UQlhpRnpdNHAxTjZ6TCNad2Q+Pzc8JEJLaS9+'@;
put 'UGI3P3UuWzhucU8+LDxLOUIsKTE+R2ZxbTsuLztyYkt9JnZudUY7bkBaci8yTCpPWnheanp2VEkqcXFERGdMciJOSyUpMmBCMmVUYSRAT0tedWpddyx7TjhucihAey9UNF1ROl1vPHltdHZRdmw5SFM3P0VoVykyKy5xNj1dWmI7RHpdZkQ3SkdbeDRoPzE3RDAuQ0EkcS5UKml7KG0vZzJCdGZu'@;
put 'SjJVTTx+fVdaRCgrajI+eGFZL1F1c2U5YyJqVTIoZl4/JXVPYzh8MixtK2tVPFFoSlZLXU9WZUQ3dXs5SEJNQzsmfGdhLFpoWUFheGh3RDh0Wk5lbCxrTWwvNyJnWENTUl90NHldTGR9bHN6P0l3aC86STkpe1RsWXMhRiksUTtKbFVRSkpiTnd9ITJraS4vMHkiJWszK3J1YEg7Mnc6OmxDfV5Z'@;
put 'SCx8MnM0Ynk9WmBzJFtEc15WSUFpdH1tQTU6NVRiSFM4RjhmJjxGbX1XRGsyKkNqa1lVWHNZRnhGVVBXLDJGLmRWUGljWVI1e1kuS24iJmpRJkEzKWtgdytrREJXe0szcjJFKDpCaFhxaWBKPnoiS2FFVUgyPyJ5LExSYHlmez86W1lzWU5bQDd2QWR4MExYInVIKF9KQ2J5ITBgWnhKOmBRS2p9'@;
put 'UStndXhFdFJ6LzpJNXVgT0k4bzlVRUMsUkBxZFsiS3JZSD1zQnVqQ30iQW1MLHA+SH5WImxRaGJQfTQhI3wxNj1xUHRTP3syPSVYTVBuKVhVKGNPU0ldNm9ofUYsTWxKXSo/Iz0sdFt3SmNvYDF1fTUsYVtwWFdqRG9tckZKUTYxbmQ/Ol9AOl4yZGlbKD4ranBxfC8zOV5saWRULFkkSSQ/S2BX'@;
put 'by58Rj49eEtUZ1lWNGdxRyV8cCFgb1hWeSEiQXsjMmV5fmRNdCh9bGNWWjZKIyVDNSZtczI4fUA0N0JKXVJpTHY8JGZLamEwWD44fTJlVGxdOkkpMHVWUWc8MEp3V0lIcXEjSiN+P09pZjRZMjB4aE9zRT05NWs0VGV3Nyk2NVdAIyMlW3EvZFdNSWhDS2ZhaU9XNi5FWGQ2cTJ0allnYTdTY0tj'@;
put 'LE9aU1dkQkApLDhmLkwoPEYxMGsqNngsVEckPzY3Yn1DTCZ9UXd6LzwjWjpAbVNCLHxRXVpGeV9jP089ZGY2PltTSzBvQUFORSI+cDEmdzJ9ImwqbSgwYXNaRVdoNl0/clJ0JTRPTiFbfHEpbEJNZUo0LissJk08O3dEJHgiRSpPLzUrPFFsYUZBZG0wP1lSXXQoMXdZeHd8Lndie298PFs+dE5R'@;
put 'WHcjNj9CIkldJks6Nmt7UlJBTFghWihpSG59UGFObDJXI1hAbit4SjhDKk1FTz40ZzdiKV02e2Y0d0t8OEBgNCR5LCRDNyFbWiM4biI5V3RWUERTPE5TU2owI3F1T00hTElAVmB5SHJbJExLelhRTH5WNTImTDM2Lzd9UCpHUF5FOmwlfmcuLiNFL0hjOmtgWzBAd1JSQjRObDkxb1Q+e0xHWExA'@;
put 'STd4aW5UO2NbIyIzVD5KeGZGbEhpU0ovYFteTDkiV2JASmtNVk04NnhzYDYxIVlabV8/fnY8ayN2fVZGYm9BMHVrSmBRZWxDU3gvUyxdb2JUUWRVZiowMls9ZldQWVdlNGBOWnQ4UktIWChqNzF2PlBHMmh1b215PHBDSTMrem1MPUM/T0tNaFVKMXcoS3xxUHl5X3wxUWpHT1oyYSpxfVtsX3RF'@;
put 'MGRrTDU3Xlc5ZGZZNE57VnZwSDZuVj4mXUBuMiMpL01aa1ouWCs+NCZIPlgsQ19AVU5Ib1JbZV1oI2s3MkFkMCRmNj0oOX5dLkxgeyFIOCM8e29qWlBbVzk8Oy42KFdvcj51X0podHNGPFZ0ZlVqWG1kRXJZJHcuX2sxfHh3QnhsOlJHVldeWGRZKmw1Y2F+ei52cE9yfE8re05yIlgqTFU7biNa'@;
put 'RDcvL25mc0dGUmhWYHN9aFIzR0Z6QkohTGErRmlBdUE+cC48RztjJEkzbFdQdmx+KkAjUCp6JDIueTJTbjRNeFlkRHcxJEA2REJ6S0tBMilhe0gzd1orZWpiMGZSQCQpM11qVSZzYkJrcmNncjZ9NipvRTE/QSM3YlMuR3Q/czFMWWo/eikvWkFzfWA7KmRHX1M/ciMlcWlwOTdgalJiUEJDTDU6'@;
put 'ZkNHa20kako/Z1VJNWR2bVErbjo4R31xZCojK3pkUndLMG0pZjdiKSoweH5WViFle1EuIVh5fnlaMiYhYnFLZWtRREl7K1BXQFtlPzomeTBGXiwlejZPYW9tOCxgZX58cndOUCVGdS9LdmIxSjdHXTFSOCNBO1kwd2hMWD12Y0t3aD1jc0I+RU8pTlFOKF9eTnA6S01EYUk3UmArdzg/YztHd0Uq'@;
put 'b0U3XTR3bjF4VzFla2ZgJDQ1dz4hQUNldW1fbk1kc0cvX2lQd1RmODcqWjJQbSJ+NmFofCkjZUx0XUpbLyJeXVBrclckaW5ua19DdGsvPURkX0dbIlt4bDNJeEsxOmtnSCNwNUB3WWd6RT1KMEU+PF9FNl8sXy9qOGZOU3xtSmhRVGxiWEd2RUhHT2V5YD4wSC9aNDY0b0g2NGlASS95LCRHbm5N'@;
put 'Tkg8VTphNmNhVXppKkk+Sy4qIUl9NEgvPUh3PlpGInQmdT1TUERPbjE4UEY9L2A1T2tWTTt2UEcpd2h+aiFfSEBzXzYxT3xbSExLdn5EdiYyIl8iY1FxfDlXSH1EflZIY3l8MFtOVVFjdTJbIlk+QEpZeEI/bEY+LnBuWUkment8P0UheHtAeGdtNlMxYDFiIjVDRXFHaGFkJShXazVrVld2Tkpu'@;
put 'elVyXzc9MFhOWzEyaSI/aj9+KlhjT0t5VnckKHwkTU1bUUlnRVMkdjB7aF5ALkxAYUdFdXI6OTIqZjk9KXF0OFMmY3dOdXgzIntReGFmRmArVjQiWUxQM2l8Vy5OTyl6LlBreE5Fa09RUzRUS0w3XjVjOjshYC9xSGRLbHd5NSI+UjE+RTUobytxeDV5QHZ7eTYxQlBoTUF1YjZAPnIhWiliSXRH'@;
put 'RTB6VXY5UUopUUt7cVZsZ2JeMiYhKW1BIVRWd0hKMFl9IX1DJD5VMjdwVXdYYytkRVVDa0RlOVdMP0BSP3RuPihYJC5sRk5PLHtza2U1ImsvRjVsJHUmR25CMWpUdnFfODIlRV86YURISys8IT9WQ3tqWDNAITxiWGhWOHJmQXp+N35DKl92eCVteDpnRHo1ImZRc0JlZGlrXlEsM11NMGE2VGNH'@;
put 'RSVzU2ttN0h4Ry85W1VNfjVyUDUkeHVlTUVEPDopXVp2Mzped2BoL0UwL2g3QU9vJGM0NUh5aWtxMGF5WipCX1FQOV5xeTg3K01VWWtATStCMVV+eF1XUWxYXk96cFR8LHR5cDZaU2NjQVNzUlA/Ki47Mj5xIlhybFJPQkl1RHxOX00sOF0vM1ZUNUgvNm5qeyw3OTlsQ1gwdndJTzpHUUtROylS'@;
put 'WzVdRl5LMFBXOHk0VmVtRlE+MXp2SmVKbWd7Omw5QlQ+RXRCZnJ9KHlAUEIlWWRsVSliL0w7M1o9QC50PSw2dEswdm9+LEsqZzFkTTxfXT9PXitCM3dCUCpbJCJDdDVyKXdjZ0xpWmxAbEpIa2AvZmA0LEk/LGVBKiV6OjdUQk9rb0lWQiVwSlVwLndib0Y6YXRYZmtQLjtvdDVHPHl6XSUiW0ZD'@;
put 'PnV0WnBXdkwsUUFWKyY+eEs9V0ZEe0kiPUR8ZX0iWkNdIjBuXV1bJkI1Kn4rU1Blb0R3aC94b202dyVvTDY7Xm8mInhaRCpkPklINGZoTmteInxUcm5ySmkwJFYoelpRN2led2VGV0pnMFtrXjdtUDVUfXU2TmF5blhTKTZkcztUeiR+aE1ZaylsdXJoUSslOSFRN2M/MGdUKWd8ZDFDd3NGdiJE'@;
put 'Z0dMQUsxPklMbTEuKSI/cURrU1g6NlcxITdOL2MvXmMhfXtaNFV0OTlkdzdEbk43SCVRJkF+UlM+W1N1OVpKMXBSNXpGYlA7QHt7eUpXOFtqaEo+Nnp9ZjFuQUsmPHckVmFFaixvaTxnbTAwPkpfdzpHKDJffUtQSyh8Yyl0P0kkL2xtZit7fEUqO3gidVl2YCNvfWFxOVRCXnhhRU18cWopR0Qy'@;
put 'VF55IVkqTSxVWVc1cSF6PGtLIm8vRjhqZ1BGISZ3QDl7JS9hUD5zW2NKKTteNE5MYDY+SHJZcHZpR2xnK0c7RX4qO1d4MT4wVCNWbmkpO3tMenZMIXlPZSRqKDAjXiorekFaflFfMytMT3k1OV51bFB2LG86T3JJbj9kbDxpY1p6Ul9bUE4lSGR3QCpNQzJUTTl9XWJPZk9VVEAuJi9uN2NtVjB6'@;
put 'Vzt5fVpacW44K2RldUx+OTc4P0QuI1E0XT9JTTE8MylGXyooMjlnRXIlLCRmXWtgYTtJTU0iV19iI3Jvcl8qSltLYUtGSntKUUw8Qnl1SntGKkU+KGBDRXcqZ2BxSlBHSkNjcnwuLF9wP3NIK11QKmZ6ZlIwLiUhVTs+YyVHNXxoLHg2VCFwSmhXSyY0YWpncmNbeGIvdnBzPz1+emFsMEhHSTxO'@;
put 'a1A9S09vQl5Ce1Nsd3s+Wy9IdnZucCQuTmomLFNvZ2Zpby9YRjlvWkNLTEdsT2xbKm85dm1ienFwLm0sVEczS2tGTl98a0N6dVdnZV9MNGIxSTExJndzcE9XcDopWWFpbz5BZ3lFdzZiXUFlNV1ZYzhuVDgucnlWb0VJVltwPElMajUvXXlyV0tMQFgwN01SUmg/ezUyJX56U31FdkRIZEshUSpa'@;
put 'R302PS91MColKSI7VE9rXTV+bUlsfWFvYFduXmNNO15XalBkeEdgYSNBKyElN118fTFhWWpgIU5ZdnszUS5tK2E/YmR+XmRIXVE6eSJ8c0A9SHwpcXMrIWRiWDh+Y1B+OGI3KHNTYUhic2ZhK2wsPn5LREdCPjFVPEZOdXh3PiwsNEssc3JTbC85MXVgTnY3bTBBO0FaejNfcEZ6eVFfVUI3fUpZ'@;
put 'K0UpbT5EQEB1QWlvQ1lqdUBxeUcrXV80eGA2Tj1CTGFGW21ERTxYQyNKaGUjLlpHL1UkUUwrInJGUTVPTj81N1Ire34yQEI5TV9FZV5JNTpCIlBmJmJOaXtJMD59TmMwN0tCJE12dTc2fFRPRzNFMn49ZkU+SDdfXnhbTi9sRiFWcDlLREY/PGAoa01LRCRndFhWY05XWjUxWVFDPFFyPE8xLE9d'@;
put 'OkYibjRwOFtgcTYialQ4SSF4RTRnTXFHUFdHUnNVTXg7SSRGUXNpaiRQO1l5ZGQlfUl7OHZ9akx3bEpIZz5sfXpkKWBMeWFoWjIkTXBpbDo0c3FOblcuKHQwTXs5OU9vUTRwdHtSJSs/OmhHJUJeRWlmfEUwOi8qKGNFdWh3JlZFNUxdd3g3eWIoaG1MQlU5VFBNUUZjeDhzPj0qUmx3WC5hfTdj'@;
put 'TGI3Z00hNVFtbnNQbGg6O0IrIztHfnhBPGouYTV1QWM2OSxMOXp5YnYmN3d1Yi8ue0Z6P1Q4V3dPPVZBUE9WOkVUamJrQCFlP0lYYHUhIm8pQDY6XSFPcjxjVFk4PjxPKjV9e1FpPkszWD5LLjIoU1ZNXSF6KThwPCw5YS5RSShlTD9nQyhbaT1VRjs7UHdCQT4hPWFLVmh6fWc8NyVtWT54bFhM'@;
put 'RjhnfChXZTdPdFgiP0ZKN0U0IyFDOW51ZlZyQi89ZGE1ZUJpcFBKTSwwaUVSNzE9NHdMTl4vazpdXWlsSFFydSloaChRQng1SVMubnx9e3p2IkpiaVpNJmRrOkEjeEBLUHJgazVSSjZTTktyLEheO093ZktoSn5WLCR1XW5xPG0+eEkiS049RTM9aVo0fTIzNTlhMDltZXc+PlVuZmMsT1JJMjBL'@;
put 'W1d+WnNGZ0BINmt6LiJqO11PWFhMZlgvVzllP2JHcColOC9QYj9GWDZLaiE7MzE1WSNbV2JqZjAoMFRjZiJCQF9ua2FxamQkfVdCeWRLM1IjLzpUaVZERGZXOT4lS1tWRVl7bmgvVnpYdFRAP11pIiRQOXUzQGI0ayQwXkoyWjloZ2UiLmMiQCsvZkxvNC5+LixGRk4ye2IyaSpdcXYvaSFkRUg/'@;
put 'X18lYklnQD5RLF51UjUjKl5xZFl9cVksOi4mMFYjTXhPNnhEXl4pXzUhTWZdcGtyQFlQVFp9P3BTfHolamI9PW8yQnMkKk5nS1lRaDY4O1htZG4xImpiKGJsYyh4TGhDQS9jdkpfeWh0QipPdj18bSVqYStKXTMvc2BjemdiOkw5R31GYUR+QFQoUHFOWWkoal8rd3Qma0svRCI5M10udlI9XXwh'@;
put 'JF96K2E1P3p6W0hQL2tXR0d7VmtgZnZCKFR2YTV7blgpKHlHYDl5a3ZFLjZSW1ZnIWptdlIjZjU9djtucDdKVFE9Lz9MSjRWWnJnOUZvMzI2WT5UWDF3fmlbSnoyRyt9aUl3KVdtdURYZmEkZkdYUSU9LipqaVt1bWxqQHUmfDtiN3hPWCxnYnNLPGZlXlFSdG16V2Q5MVJkVjRDJEdsYkZzVSNN'@;
put 'MEFKKEt3bGdaQH5bVTBYLnJtaSo6dClZVXdsVDJqbWlqcG4oe1ZrRng9UWVROWJZTUx4QXk9PEwsTkNsQlZFSDhYIWhTY1M6dGdTeEk5LDNCbi4uQ0laeiMjYk4sdW91UF1XWEJpeUNbdVZldTp4Z05bMSZbOHU/bmxjflI1Uiw3KSMoZn4qT0ROcmh+b3drbS5fSzw7VURIUkh1fitrPCN2TGwv'@;
put 'Mm5xKGBDKTVAKT9PeVI7aj0+QGwzdGVBLnRsYDAjOiEyX1BkRGtEYjVMKjxIUERxZzkmcjd5dF40W0ZpUHFJXmYoVHEqYG8kWWxvMCZifVNIdi9GSCFXQmJROEVicT1bOktCWFJQfDl4QUo+TyJWLGRmODBKQ05NaXJNJDVuVDRMUXkiSSp3LFIhZCRuUnUiN2ZJPSoyTVl6IVlDVG1fRmJMMVFa'@;
put 'dGlhY2IqUG9lSjNlSjE9b2ZFZ0owbVdDTl4hSlAySkxjdHhYJmIkVFolSl5VWTZyMiIsSmAmSj16VVZTQV9VUXExUnNrdEZsPn0rc244MkpsRTxJe24uYHouK2xaZDljY1pLa2pHa3tjQFQ/bGY5R1dAIVVEUXBWTG5XdSE+e0tmR1IlIz1FNX5VJllMe3FUR2c5Oy9FOVpxZVpPXlRjOGtLaCVM'@;
put 'SVBveDJULFRfY2RCZmVJcndgRHIpd19iaG9+SzxuWyhmUjJ0dUk3bVlDJWQldkQoIWh2Wmd+UWdQPjg4MXtOYTskXytWITxdaEpnUHVZR3pLJTZAITtDZm9AR1UlYkxUNjhMfSRrZ2xxS3ZIX2VkOWEvekc4ajcsJC4iaUp+ITgqZ3d+OSZJd0wkaX1GPD9gak98Q1MwejNvU35bMDspQntWUFc+'@;
put 'SjJwOXckMCRieCRrbkxwTjdASzg2PklmZkIjWSE2TyRXQzhpSHtATEdAKjdgTj9+Xk98YWdbY1JIeVkhInRZO0pHT05gJG5vOiZVXjN8KC9nX1tsZTZZbVhVa3AhQlIuVWJ8VjRzakFFNjJuQG8/PDd5eHYoKTFHOlppKjhPaFZZbFVLUkdheVFIT1A3I2VKQXQsPnYrfC5FXXZoUDosfEVUb0Bj'@;
put 'R3MiOyg1bnsoN3FUMnIzX1EsPT9WQlZmaEIzLl14IzpEPyNBaXM6SE9reHVbVGNRKy5gbGZ6VzFBRmd7N29UWHxKREBUb2RYN1spRSRsMyVwNmx3IkVVVj9+eFUyYEQ4VCNrM0soS1pSSVN0fCZFbDZqc2thOTBGVXB8Z11tRT0uR1ZlS1UiQSlbM1t7NnF5YW43PklOZD1lRmVrenFLa3pPS2l2'@;
put 'bUxIal46bmJkPHdhW3tuIzNtOTN7dD12V2VCWGtVV2t5aDwhTk5qfWZ2JCRTMV9pRGFMTHxTUjIqfkxOJnhCfkUiVlViajleY3B2MjMqSE96S0skVXI9bDtvZjZkQDF8PTFpYSEqfTBPUGZzbUBaZ0VyUWg/NVc0fVhvQT1wLDhgVlFNYld+SnBjaGA+V2IlNnU9a2wpQSUoc19Obkk9S28xN0Z+'@;
put 'YW4oKih3dHh9V1BXcVtgRk9MdF4xYk1wTUd0QHUqOU0qMDNbQHJ7L2AmfCZLSXI1fnVPekYmIjNiVGAuMFRTM2tySUw3YXxNdSwsei5iRlIxTjBSeVMzVSlTNXRjcHI2L0dyIl1ycEt8MVdGOlQ9YVo2MkhnbWMhKXdMPTQ9M3BoOzVaMzxSej8+alt+XXF2QCRRLmBWSzF6UWw3NT1sJSxwOXlD'@;
put 'KXpyIn5jVmZEaVRoYy9gP0QuIj9YdGtEWnI8N11JOk0scCojWUw0VDVhT182Zi5kan1IT3V8XU5BUHhdUGB3bjJveWcuaFYpMzJ7ND9jTEM2Y247fi4+c2lFMHFbSWpAQF95dXpidFF4N2dNfHM5dEdHWWdmQ0VGZEhSfTE3O3VJYj9JdG9IZ1M3QS5NZztDMWhuJFJ8LkJgLy8+a1V3QVN5Szs3'@;
put 'MDopKEw9VmNmWThObXZSI3g7NVNkX2JiNXYwKmF0bXxzYTdZVkI0R14ubSE/cFoqK0FCUm1FajZ4Lz5wWHdiOEN1UkYlSV5oSDovI1ciVj18KHdDMCw0dHIkOkdHKHIqPDxJJEN9TE5JZlMlaGV0UjNQSVg7QlFVcGIqaT5WT0QuPWFzUSF6IW5KSigmJU5QOVdvaCNIXTRLYDdqaUVqbk48Zzlu'@;
put 'PVtgT0pZTCEsVE4qfkk1TXd7LzN1aTlHPXRYPlo9OCEsdHlRPDc5fiF3SW1ocnp3ITIvPCkoZjNLXV40SntlK1coQitXanRnXlhaKnp4S0hWTTZWPjZPXk5TTFU+Z0Zab35MO0hgNUdDI2tdJWtdY2d4fFY4cipdYnVPL3sjJkN7SmtNdUx2UzQ4LGY2Q3RGLjYxZVRjamxpWH5lbWpYPnkvTy9O'@;
put 'OHJgNXdjSF53NXR6ang8a0xXUmdEVX0zdSE0IU5WTVJHI2EmTXp3QD9FcVBtTTRbWW9TM1g1NSlZe1tpaztqYUM9ciQ0PSs9YCV4fVJzTW14cE9NYSU3MlIkXko1fE1FZTFGWW9WUUFGJkJQO1QoKSlSbkFUZjR7eC9Sckt1Y31EciRQbk1rcE95ZG5nQT9bbF40VUo4YVM6WGskWTRvViRsOzVk'@;
put 'ZCgsUHoyM0hfTigkQjJ+SzlrZkpNdTdWKzJtSE4ydjNvYlgmSHN7QXZHS2E3I2p0Ri5kN3lKVksoTHtPa0JuUXRNLjkxI0o0Zk9BSFduPkRNVmp2OyUiR1U5a1tZeHgjRXRBandvZmo8VHRxWSs3RilAOnk9X3B2T0lgU2lDL3BsSTZ1d11BSCtsYmtscH42JHNVOyNuRkdXRm9JN2JBfj4oaExi'@;
put 'VkAyYno6KktXPjB1T3htaUU8cn49bXNfdkh0Q1p8TGprUSxLbGthXkZiLjEudUZ7SH5HTEk4QUdBand7QytAVChIS28+RG9ueHtISkhOYjQpcCF7Z18yNCxuJiM2MjlLOnpTQSQrbFoqOEh+U2x0MDN9eko9ZG0xOVd7OnU1OWpwNEpeNSh8YTArS2ZFMlFGZjdlUkJmPjJVfi8xRiMmRjVXSTc5'@;
put 'TzZsMyhvTklPUDFFQGYvUGQzcSx9Y1p5fCtQOWV1OWBBSmwvT3soWE80L2ZZQUtlVmFZa2M8Q1hNWGc2W1psOFpUWj5ofDo1ezVUOktAaGtFPDpzVDB1clEhbClRbj02LERrXj1vMChifClpR34udy95Tz58XV5QYk9KJFYiajVXJHF1QnJEfHRERD5IcjR7c1pbWDguYW4/I3ooOGJ2JipINEE+'@;
put 'KVk4YDdZZ3crdk9wO25JakZuXmd3ZTwlYCxBW2UoZyYkJXVie3doUk13YGJgIV9XYXNfNVF+W3ZPUVVCX01sKDh8ZEsmWV8mfVs5JnRCSFNXTHB3PG5tdmdMTmtuJUtyLnM4c15UeC55O1BaYE56VXxycm9MNjkjSTAkZmpqdi5TOjFxbW1TN3BJcmBedU1ZYXxUKGw6Q1hBdChCdD8+PDF1VFdH'@;
put 'WVdRb1BsJWdVb1V0YndvQ2xoLEhzRVN7IyRENDB6THRpb05SVSFfdmBHI1RYcmhZVjddSjZMc01RWUJ7MTJAekl9TEMlfHQpN0RLIUR1fmd8XmUqTiROUSU/d1MvVU9EWjdOPDlYI0ZjSVdqTmpJUko4RmAvdmJOMXElNkR0X3psTmJJejV+by9CcmFgMUglcWU+a3VxeWtuNlFxQVNEUVpOeUY7'@;
put 'cXt8U3BjfEArIXgiYn5raEpMMTZQR0NDfGlQLHx5O1BPR2BVRGR+eCNOPC9ZOz5nQ1ZdYkJHcDNPP01qdWt8WUZRSG15NUVRVSkucSEmbEEkfmhDTEh6Tz5OKXJWcnR1KnY/LmJyfjROZEtkZXpkJSguLFhvRF5bNFRFPDU/VF5VL1h1ZE4he1grWEBPN0NgNThJQ1JWeGVZQDEucFExNT5ZPS9C'@;
put 'VH1DOHY5YjtEKFRuJCI9JExacmM5Pit2fj9iPWwmdF5RcXk3Tm90M31uIi5ZOldBdyZPX141Qm5tbWFSPyNUT1V2N2IqW1FuTi9nSDtFfl5WSXwrND5adHdjNX5PPXdFR0tWa014bXtZUmA+XmVqPUBzQnVkYVRnbkFKe1c4Wjc5PkB1Z0R5KXd6a1o6LywsPko4KC8hSyUzOmwlNEB7UVVYMDdf'@;
put 'VGM7byE1IzE5TEJpQmQlRDElelZ4XUdOc1l5bz9MPkJQdEp8Lzh3Ol9SQHJHZShKcHYhcC5yXzJ6YjdOdGhkaXpyRmtFeWJyUmUpLmFTRTpKXVtWQDRdUDwzMUx5RyhoUEo9eTRyO3w6Zn0zcCRBfSNRVFAkPVJYYjBTWzhGVE97YyZ0eEFKak5HfHNdcXZnd1ZTZ2RtNm15dlA9cGFObm0qbmo0'@;
put 'cHl8LGxSbj8zUiNZLG1sVHZbOHdAMHBmVWlGX0k/OWVXJiRIQHQrdyVAcjFSZDFXYjNIXmE/JClJKXVjYX4uQishMXE4UiIoamY/UHFre2RvQnVXTS5mLyF1OWd6OG1zUzQhNXt3eVdBMmQ+XVUxS0tIekBJKV1UL35pR3pUYyEkSXhXNDk2c3FaJjhmMnJuPHVQJVVAK0Q0UF9oN0xeSFpqNHhN'@;
put 'djZWfi5hfCRTempIRGsoNl9kMEUuLk1vfmFYUCpAYUBJSihUKHMyI1JaUSVydm9RK1puS0BzMD9iYjUwVXxzQHEsJSgzL3pAQkNNQzplM1YuaExKUHVGIXFzVkh5PXhAdT5tN0dTKGpuRWhZeHwiZj5+Qz8uTlQ+UFlzfnFXQTZgV21VK1prJXNhNXJsQnxoQC9mfEsufWZuS0dWKjk2TXwjbWJo'@;
put 'QE1wL01IKiJGdj52Ryo9WzQ0Vz44cDdZYHdQMD1ic08jL3YoRVgsKU8rdWduPjt6eTErZGEzSmNQaWB4ZzpoX3s4ayI+KjFzYTx4QCMvaVFCZDYoT29yPl8/Q3Q7Yzw0Uy9WLkxGUnNKa2tKcW06QntWJGlkT2BuWDw2TjxafmtaVGsrI0t0UVNodlZ+QWZreDtfUD9PeDRIUG5ufT92Jmt5ak4j'@;
put 'eXciNVhWSG5wN05KSW5kMG9BKSlIUFNjUnZSeVFuTE5IUzhVc0Rlal5EPTpKc1djaE5RVSEkaFBUYUQpe29nVilkW0lJZXpmIyFAdmxmX1pAWjxicCJnWmBwM3BBSDY0ZWZPUGtGVEVdQT80XkJHLnsraj5aNlhnSjh4R3ZaPWV7VTBYUVBpTjpCUEM/dnV8RHhyJGhmZDkpVjolViFLUW0yK0Zx'@;
put 'Ylc7MTlWblo8dXhFUSltbC47Jn49VnlaKSUyN1kyXX1qLGowN0p4JkVIZllLXnw4fS43fGJsRltCXklCLypaPVFuOlIlW2tiNHlnUC5QSC4oaS9QKjV9eVVbbCV1Y1NmJWcqNWNJcDppMS49RV1FPDVlZTBUSUk/RD84S111PFRUcDZCfkRbfUNHRll2LjskaTV4ZUZGW0B2fHp3VktbPiV2W1pZ'@;
put 'fTpsTl1ONyRfbThELzhaIXVRaiNGUng9c3MsY2lyYGFHck9eKmpJR3wzYzhtTTdtMWRTMVoqIU8sXi52dEFrbnZ0WjQ/NHViYk4iKV5qaWp9Wj9aTGlpdG8kPzdMW2ldTUMzYT9lKjdOcXA9ISh4LzdsPDptcmooRCJWI3NVUGR9XTc3Qy9wZU9NdHopNjsqeF5yLyF4WVE7Y0E7aFdUNVZoRU54'@;
put 'dU1dLkZfaHVZTUpuX1BHcUw1SWlaNShxVGFWL3c7R0NjOztqeDoyQEdkV2JgUGpnP2BpI3JDekhAaWhYY2dgOWBGZzFgZX5TTTlzbSZEflpSS0lJPjV6L14vKjYjYlBfLzh7YVQ9cjptW1kjZyRyc0F8QUx+PEhCeGF+OEg9NEI6dXkqWDs7RE43aEAhT1FCPFlFSkBBTjtGNEMwPHApfGY8OXAr'@;
put 'Pl03P24yMCV3K2pBJVJSU3QyXnF0SFttTDJRPHg1Ll83cn1RM2pudkU0K0w2MiRKR2ViWGg7WjchZnpBJmRyfTl5QG1FY3U9bHVVWyYzY284KitbaEhxWTdkTWdjS2Y3ZF5ia2tGWzc5Tit5Xn1Menx5MU1kS0BOOH56JXQxP0NLfVM6Pkl3ITE1VmlaSXo9OFRjTE90e14yJF93MllPXURDQXh1'@;
put 'SG8kNGBWUz08QlY/dzVwWXo7a0VtYjZLMHt2b2puTihiUnYsN10vUlRjP3kkNSptTE1XJTNQMFRBT3VKPWJDPW9uT3VwVColNVEuY1hpN0oyPXx1Si9wLF15aEI6PEYubXciO2hHdz05UDRkIUZ2UCkoK1t0XkJQKT5ZZXYpKWU2a3h2N3sweE5ifjYkTDpUXlR0ZEh7KFNpSGw+MmdBbUhtTiZp'@;
put 'P3ArWEgoQj0rVEBiKCN3NTk8c3REbWhiOV1mUVdnOU94ZW9bNzhMQXA0dVpvIzF1Kz1vVmUlND4rb1kwOH0kYF50eHxxdVg0WFlGOk05UD04emc0YmlILiNQXkxgaSM9VzxbRylfUmFveUR8VHkpRkgyZnMrOT1uNXw3OkFQQHIlNGVSPV1NTW1BXSFvc2R1PCJFKTBrKV49IlhYNVdfRSVWVEN3'@;
put 'TnFbaV93KDVdS0t5K2FVVnJlT3RRNzAwdGp3b2pIMiV8TCJZbW04JGk2VDUqXmtGOEg/Tyx3UGZeaV5mI2Ffam5RRXckOyxicSkpbWZ1RSYlKDNZfXQ6fDFQPjt5UCJTWlBVQUkqXilnWGQ0InQ2NlcjWTNHZjxCJTVbZSt0SDl0M0V7NF5PVlYuaGU/WFl1M1Y8bnIyZENwVHJdd0Q/S0BYUFNt'@;
put 'VmlsI0Jfbyk0SF0wd3JnLlRmJCQiJUlgMGxgbyx0en42dT9sdFswRVFZbHUmQkBuKD1QSkIiMCR9fU84L31sbG5TSHh0VWgqK2kyNXYsQ1E4XSh3a3h3Z3NXUkV0V1UqNUojdkUhMWhoZzB5UEw1SV8mMC8rNEp9cWo+TVB9bXZlZmh0bCQ3VHJFaX0+SC5OaF9YTWlgJjNtSXZvXWpOYSR6Tl9v'@;
put 'fnVmPXhjOVd+ZGUvbS58U3UuVnJbNSQ6LEkweDluLnBKb0ZJMipqdWtVVEdWTi58fUYyXTJtN315cVd2aHJ1PHYwdXw9TzArMV9EOSx7Wz00Lk1DIjV2TlhbeGdJfXUqMi5Jaz9DQVJaVV19YiNZPkp7fj9ReGMyLDNZclVVSWtQcyp7X2B8LCptLC9pfmtEXj8kK35jYzFjZCNPenB9T3wkenQw'@;
put 'ZTckc1BoIUlvUjl3SDQ8aG9Ad0ojJC5GVHhxYzI/OGp0YjB9d1dTJT1VNEhDNWBganhOUnZTJSo8eDIkJDphMDJEUCwrRFhEOkBhWTxKKlQoYWJPJDtUYXt6fmVwVnR4KSxFZlRWSDxQPypbYEMpanl7QV14QUQjWDB6eiQmUkJ3M2Jzd21wPXtYe3BmOzxMeTpGS1ZlKS8jUCJobzBGbzd1eUY9'@;
put 'LiYoZylNR2BvMSNMMkAhYDxrV3g8O2gzaitCNV0oRndhSjsiWDs6Yzp9IlRAfE43ZzJRT1Q+TDg+SFI+YiVQc0pWNmJ6WDFPT3RJd1VQX1FgTGJrM0FOeW9zWF1SYWVTJCFWaSxbVjdCczFnSzZBcnklUSohNT5eW3NNREZHSz52ckI2bTsyRGd1eUhTMWJIUGRbdnhJeiFSaGpYanEuaDBVJmcu'@;
put 'QiZtWltnYzlSTVA3L2ZxZDtXKldnVmdgcXlbSCtqdnJ8ITM+fFNGTnZ4WUglcypOblJ4KWRPRWt7aF1wc0p2XkVieGM6VCtdbzx0Ikk5TjE8YHohOHNOTzU9fHwkUy9ya0BnWU5jUyJfVW0sPGcmbkRKbio9fT5zYkkqIzM5OiF8MD9hQSl9Q29ENlN0dWRnQ19gJVVia3QhNTMhNCNsJW4zfHxi'@;
put 'ZnRman5oMWVTcCMsKjksUld1cl83eUx9U2gwVllrQ05GSCxDPC9+WChsQmpmPWBfSjNqbS87SS5DS0RlbihJdywkYSYzYzA/MzBkbVZCd09PO2BjNFUsWWQ2dTYwVz1gVTIlaDVCSFUya3ExMj08TndYZl4qdFpXbmpiNGJKWldCOiNpP29OTEQiUG8iUk4vZ0h4YD5zYX4kKEpmJkR2OEJZe0c1'@;
put 'dERsYU1lUy5OUSo3dEE+PVM4cyhMQHpXWig9a3VVdyJOTXciMXgjQWh2PFZqTCY+fTBeJjVVayY8YSxyYzdqPjkiNHBlcV0zSEV9P3UlPVY/Z1sjW2t5XnVzXVRkT1YuZXRTMllTJG5sN0pEeTYuXlAkQSN1dDlBU0BuWUM7UndhK3NfQ3VCbTBZJnBdO0d2JnhmQDRWZmA3VCpXLnFpZ2pYdXNu'@;
put 'UU8raHw3JUsjcXhHSlllXiszNHo8OWxGJmlzOylaTEJLLjAkdkR0ZkgrPj96TEl9RStUNEJ0YGh4Tz89bEFLbyRiMz8qTGorUXRFKTg7T3R6Uk5GO2pAWyFYenVMdStdVW9VQn1MR2Z+dXc7WnNxX3tuSVBAb0QsTCNuSUt6TkduRV1vcVBUbGk0c2xFNiMuYTkrIX1MMk86IU5FTzhfdUtTYzhH'@;
put 'Lk9PQFsoNWNfUUpAeE1me3VwdWIlPz5ZISYzVEdIR2JuW3Y3fHhpb1k3eXtJSjMza2lYdkRLPmcuNWtoMGdaN1BaeEZoRVh1Z240KHplIVFbd0h3R30yKj03TEA2W3haZXRxcUcze3AzKitMQ2E5MVJ7cWhMKS9WaT5iSE1LSG0jV3FQeXw5L2ImYTtGWHcsKDAzbERFOkJCdT9wd34lfGhtNDJe'@;
put 'fFpGJENgc2g7U1pwM0twZURTQyshZmhaJlNGPCJlQiE7THQ4fV8pJCRgbUJYNEkpcWNXR3NfWnxLX0ZHXzNWTyxpQWNKVXZaLlJSMHZPRHpfOT53ZX17dG5ASHJgWlRSSns4XjxZV082Rn5XX145P1V2eis6Q01DT2x0amRjXSV8YF4qYT1tTHR2N3pXR05yYkNXJG1YdmdLM1Z5cWZJKyw7YyZu'@;
put 'LkBVUTJeN30kemdnMV5CfDska3RiMiMsQjNwNW1FRnAiNn13PWJwS0VuTl0/KVlMRmxxSCRFRlBpNWNVZmZdK3cuSEp8STAxfUVBQTAsRU4xZHM0LkQ2TXFPa25MRChDWHNUZHYkVy56K1JERSJsZ2kzdzlPLyhlPDlSWjEoMnM+Yjs4fGVmSUh7Jm5LI0p4RHtfVGk/XlcvezFoIX1+KyF9UGxO'@;
put 'Umo4QDJIeHd3MkR6L3huZ01ebjVXRWEkZDA0Y3grUmxzRy8rfDtfMSxoKkxZYjYjc01OdFVaPFJlOSYpcD1IdSVaVFtqcSkxXUosPSwydGJpWDNld3dGJl0weHtqT3UjWSN3eCxFYngiTnw2TVIsZkkrMjhrTG5ePlNqXU5LKiZ3Ql1PQDB6dXN9TSFRSjZ3ZiVVX1t6eiJHc155Km5kKmZLY3pv'@;
put 'YGdDTWBZMHNHL11lcW1yRltxPEdIMU9ZSSQoe1BzMHR0fnpWWVtIfWJLY0xLMl1PI243bjlMMj0jMWhqTGZAdUJDQl1kc0FJMVIvTF5bR0t6ZUc0ITo/UT8iR11STV1aRUFjMy5ldT1rVTxhOklnWWN1bmBuInEydGRZUDx2czhJN1BVeD1IZGxCUj8hfkAxZFMsfGQpfl8zZW1OfDRkZlRHeyFs'@;
put 'Qz0ra1ROcEYrZzRFK2pydmImJjE7eU4yO2EiQkx3M3p7W3xRTDQ+Yl8rKFllY0ZnZDZKNWZsPTxKe0FnYCtoQVhvYnRMRF1tLmlWdC4pW1MiPGlAU3cucz55PGY4e25FXmEuUkRzezVoekRPY09ue1FFWVNUL3w9OkR7ZzslWUVLeShCPmsxMXhQPSFZfng7RUV3LGAxYj4qLE5fbDFxX1N3TCI+'@;
put 'WE5ocmtLNlFjKCsrNzI7ZT1gezdJfWVCUH1kOHxqZSNIOCshdW0zQUA0M1ImdUNxIyxLSU8mYzs3Q20jeUhFR303dzE9V0J3fEs4ajxUMm50M10lL0JiJl4wTVcqOyJiRDZ2VDVJUmxjYCwhK2BYVDVydGthVyRGPkpUIzpsSXZEPUdpS0IxSSZjbDAzbVIme19rPz0+IVs2Z1o6L0ByS0c7bkVP'@;
put 'U0c2SU9dSjAialRTfCsvbkFDPzVVTlRPVl1teVU7JmpCUkJhNTAmP1YobldCd0t5cHhAInJROD8mVyk4MjRRekIqIiQlTTM3biM+Q2MpRlJUdEhMZzJ4OGxZP0xRZiRaVCNEYF5WIXdsai9gJGVtLG48UF5HXTY1QEE8IiYkODpfP347aXFBR3lTW2osXj5oYHt+LGsxLko0OywqenVuY3clRFEr'@;
put 'Ji95OVYhUnYhfHxpOEd7RXU9O1dadll5YjQxYjpQT2xFSikma0M0N2FaUWlCLjU/cilTWWN7RVVfTCwlcklTQll9Ll5wMC9zQGVQcldBN2FvU2Fqen5OZik4OUBbSClPe1FHUiFKTjx0dk9BU2ZTUHZ1JG84MS5UMkNgalhZIVUrfDo4Uz1Waks/TDFUW1BULnlbWGRDUSl3YVVzRVE7b2pkNmRf'@;
put 'QCV2MjokWyt8bUhlP1MwTjhUPmt7d3pKYCw8QGtsUGtpLHJdaSlOciU+ZEordTtDTVVoTUUuSTp1QCRgSCVVQ1ojeCJuLmdkVFMjYjs+Omg2RFtbeEMzPF0vXTluVExDIjpWd2NKLk16Wml5dk5DLyowWmNdSC9uYDlRTEx9NEZoMkVqSixmZj81TWFRTVtsezZgdE0wR0pCRWpOa24xNzVLRVI2'@;
put 'UXJRIThCTEJCRzlEQ3pHTXQ6NWw5VXBuOyh3MWtXc0srM3lvdkE0LzJfejNAYWdVNXM5aHh3JUIuNHt6cVF4Ij5RZCVvcHpFOypjYjhqWl94Ym5JW1lGJF4oSEh1aDpFTS8xUXpjI2xgRD5sXj9KPGc9N0IrJi5kXjFEIVZmdkAmIiFUKH5VWVJIPi5CYlo/WmpzJFU0SihVfF8lXjFzOS4lVFFq'@;
put 'YkVrc1hkb29xeEMmRyNHekYkYChoJTFhQyNXcTgpc10vd2VKeCswbGE8RXh8QC5tPnF0a2QmYnM0Kig5L0QiVXxTInVEOjArX1Bdd3l8cXZ5bVt4Qip5c1s5dyQvLDt0Y2ldRVBNe1hoTEpOVT4rc3NgQUpHbypzMlt3WChRMCx4RGVCY1BCZ0FlVEslPnhpUEh0V0cla3MoVU0lajY8PmpnQ01o'@;
put 'R3hqSXkpckQiXSxoL1A6S25AXzBfbXM3Um5ddiwxXj14SnM0PCxGTjJHYSR1amdhLCo5K1ZFR0BdRWN9RTt8MGI/Yj89XSFdSFl8SD9CRnMpcVQoTV1dXiNaWit1U082TVYqZ0RgWyZqM0o0TipPXVN1NUY1PklCTDRYaTQiODA1eGphNSozfUJJW0x3LkAsbXwuJmRrd05FajE5MnUwKCxSam9e'@;
put 'ZlA2RXQvKmshT2k6fF8lcU5tKFgyam5aejZJZGt1fC8qdz12TW5LNjtVV21IeH5XYmN0MT5+O3xxYyFZQ0EocS8vQGlhb1MieGNCMjEoQ1NQKUJXeWsoclt4fFRLaixXWnhFYmoyPlQ6JmRfLjRbXj4pdCYrM3FsfW96MEElM1pwYW9lTEd6eXZIW0I6bzFSfD9mK1RqQ0BiRUArZ298cmxPW28l'@;
put 'QjJOInMhNXpEbF5gK29uIW0kIlNQPGxmPE5MRjQqakUheUMqbEtoY3tidD4oayZqcFhsTzUyUClbbUdlMD5wPXdbOmM7PEQzTlQrdGlWemF1VUh1JGNNKjRFO0RJUEc+Jm5NYVFiQDxQP0thS3JebkYvciVweUpoQnZ6cTRDVUc/aDxBMGtFQUQjWyxxPyNHIkM1Yng5KkxefmJJaGt9fio+cCku'@;
put 'RHchMzxSTlVbWU1jYitFPUhQTSkxMDw4WyVHdnAqbEIwbzFTYzFgNEpAdE9SeC9+OkNwZ3Uza0Y2M3R9PSovUCJFdU9QY3Q5aE4iOTFZUUN3IyN8aUB5W2lKckNGemA6QFlLen5na3pFdE58MWdqYWs1K0deRm5SaXJDfnltdXglViYuXk1OT3l2V0wjLmcuY24idzNzIlR5dyxhS106Zng9TnFX'@;
put 'LEpqMVdleW9RP0hvcnNrO3VlNVVzLzh7O0UqVnxLb1Fqck42UlhSRDp7QEJvNCg7fl5FMC9qVkg5d3I+TmMvTjB7YDZiajIma1pqZHU/UjVJYWhXUUFiX0d6eWZeZ1ZRMWNFU0cmMXh1S2NidE1QcihtcEUpd2g+KSVQWChpJUx3YU80RmtGYkxTajwzMGFjWFNaQFopcEo6VGZOVzVoKltqMnhI'@;
put 'OVprfnw1Rig3e0pgNX0hMkxHfWhRb1hrc016K1JjIUJHSl0oU3c2QEFiJkJCZW1qS2dYXk5wbkkyaj9MVWpOd01GeSxnNDB4PWhteGBXREopMUIjelBIcmdbJlpdckRhe3UsdVNPcjsiaCpIcj8/QF0iUVRpPHpSJEVCcHhZRW5rZjB2YVBrWF0ubSw8MXJJI0dPSVlvczY6PmZ8fXg0RDoke1dy'@;
put 'PloqfChCUj98NCJPbyFpbylWPmQ0OVoySlNxUkd2STdrMT9EPSEwOlFuZGtaciJbUj0hT3d8YS83OnV4YklTQHFEMiE5XUZCfWUqMVcrMVZqPFphQmwmVHFOeDAqOit7czZxKHVVOTlQJjYoUkE4OWhOQGAjYUUpUFUySC5GJElkNGBaZltXdSRAZXhVTWdmPXg2InM9KSRQSClNPn1dOz1oL00/'@;
put 'WylTW2gzJj5OZ3ZTUS4zKl04XnNCSUAuPU8zOCR9VC89VVRXbUslelRfNjVpTFp7RlZ3XSgmckosNkdMeVU0MjQoZkNAY15hNnpAXzdXeF5nVTt2UClgbylhb0orbnR5YzlUQkdXTj1PLilUXi8pSCxVP3hQWFpOYCh7YmZMeH5XOzpKcUViNHV+WmRZdSRGMncsMlslMzBES3AmaChrWWRIaWV+'@;
put 'MDBzOTg6Wl9bOSNNQCJkc1hGb3dPTk5KYjQ+WUBoKGw1b2ROPls+PkJEa311QlpTZDp3Znw6LGVycjJKLj5ZLCspMDZqTCYsWVUoS0gjcShBaHloI3VBcCRsK2xtLC9WRWZYMVsyMjNxflFIWVtOZXUyfjUxTFMhJUdecUJKPGcpel1iKVNFSC5baHBUR28jVm9kNlgpWSI/bV5UNkokNWxkPiZ7'@;
put 'NlZvYklZOjJ9TnF3KkZUfVRwOyo4R28yX15Ja29KIzNgdnZiRkA7XnAmY2llRDlkNSh8M2hlL246bkAvRSgsNmJKNVFRV28zYCJ4RXd8aEh9YEN7bkQ9Km4pQ21YWyg9dFk8RSZgcyNxO3pKdD4vKEwwdzxAJUpOaz8qNng3YF8odF5qcWZUNSNlIn4+Vmc8RnJEdEdWSzRDdTo6NSImY3tJKXls'@;
put 'dSZ+QFBjU3ZTPmMrK1NOcTtHVzBMZCNldEQyMXZgMUI1akBKbDc2ZS5GZDAhM2g2PzZSYSokeVlUUC4pZUp8Snl3UCJlQjBiYTskQTl3MTBHJiI2Nzk6ZT9XLj5kcT1zaEI7ZiRZPnd9YFZELDtOcmR7LktgdClyNSFEd0hvVmJSbERrdi9wYlRmb0x5Omk3JWVDX3c3akt0bXNiTE5UdkM+Wzgk'@;
put 'O35wTFRdKC87Sj9EOGg+O0JMKGl5d3AuQExFQiI7P0NDXUI4RWEuck1QfTcwOE14fCgwJn1oYzswYVkjS0ZoKGpBOSpVPXhqUn1YdXNzTSMySj8mTnZacjEvKUl9VUJqRVQuZSxCV19saCJDVjpOSl0obHorU2d2cz85aV86KSY/OFZlWE45aE0ydVspVX54PnU4ZXk3WUhJPDdLYTtDcTw9aSxN'@;
put 'JmlAKHRwUVpvSmk+Rzkpa3hXXWJJWlpwblt0U00kSlV+Wl9lZmxlNUhFRUZZL0tOdVRsTkcodmJCVyF4VT9fTHohNU13dT9UVyo8cjhLXXZ9SyYqWlN0Ll9mUXB3Kkk0Lj0lem5VX3N2SEBDeFEpSnImdntUUV1XbUMwQkdqKi9YX0RNPnRIbmlpZVE5eT5ifF5wYmMsMnZ7eTRBd2x5Z1YkK3wp'@;
put 'QmZ2PWZVZ3dnbSNrL05UNWlsQm9dP2xSaWA1Jj9YVlcmWzFIK0cxPCN6XiMvN29eXzNlV24oXWkvXj01d2pWXnlSZWVJdnt8KUBOTklRYWEzbW1nV1I7c3J1bTouRWpvVVZTclVwbjxxYWh1SjFNNCR5WXNiWFdLZ2AwWTk0SiI5TT0sXnkxem5URCZmUEohcz1Fe1M8RF4vZGRIaE85SmFodm5o'@;
put 'd2tBOEo3SzU4cHBuO3Iha0VSay9EWT46YXJvVFNoUGZPM3hbXmM2dio6QjQ4NTQlNF5tXTk+KmgoeUlpM0hVSCZjO007eFBBMThEQ1ppZSRSenM6fjpSO0ZoaXxKKWs4b1IlNCMpbkRgQVtBMkJ0OVFEK0AmfD16XktGWFtscyp9Lzx6Wk9SQ2hIK0lEPiE3Z0l5MW9tI3tbVTlXayF8Onh3LmtC'@;
put 'PlQ3IWM0Nm1OWFgmT3tDODdYLD9yaWFKWWVyMlhGJD0uRnhafCZ5YytJPz8zbXN1OEdlbylPVjo8JlBkXVA7WzR9Sy9ZXVE+eFhGW28+cVp3eWNEZlRGdlgpN2R3O1J8YmZnTjFwO3Q/PzZoRSswezwyIiQiYV43ZU01YWUoRE8uQ11zXkVzWUxKJW9kal0paEU8bT54bn5vdDhRW1s/WGZbPFBT'@;
put 'XikxLzNQPmw+NHw/LyZVd1VebWFkO0FkdV1MRG4jXnZ+OkZUTzA9ITZLTnMzQUVpVCtjWEBbYkdVSDs0fiYmSk8rekRddmE3Njs7PEM4TkFHa0JaOGl1Im5BL1pdLzNrfW5JUlEpKE5eKitnQHBXOFRYbURVTkEsNkRnbHFJQEc0SWMrXVBgXnhpfXFFUSRnUD1rem5TU1tyXn46RyVUSm05ZHBI'@;
put 'SCVsdUxhM1o4d3ZCWWsxOkAsZ1h6UmU2OytLWTIuSzpmZz97ZDgiVUZNK3NFakovY251fEkjdiptYk4+SXAxLnB0aTd1flB3dl9zei5YZWtjUkE+Z1I4e10rJmkkU1RDfWMkUEA3N051NnxFck94aj48OH5zbGxrVj5qRnYoQ2t+Umo4JkxvdUNUOW4zT3cuWEBPTl5LeUhUfmtYJVRrWjhoVH5j'@;
put 'KUZsMyg/N35Md3gydm8oIkl1IilOfCh3WUJJfW8/U3NkTy5zJmEhR217ZGxfUiRiRWBgXzpyT25pQ35mODNiaCtrZktOZjAjMndvQl5IO3B2VDZPNSRJdjYofE1YNF9ZclQ2K0QpWjR0Nz97cERsTCF+bE1hbTZhakhSW2opOzplOltjSnQzaUZVJi8yXXBQOWB+Nz5dISQkVG9NbT5zfFQwTGlS'@;
put 'R3E0eDx4LkhdW1hAam4idjd0Y1oiUHdBQ3xUTC5PMXhZdTFvODRXa20kMz8/Xl9NWGQufHZPQU1FX2NARz1BR0luW2tqVmlgL31OciVIWE9QbT8jQ1dafnpSVD5qP1hXVVclOlBfUFtnXUw2fEAsX3V0OjNjflc4T1MjQywxPCFga2lZRXpGamM0PmNfLGFlLCEidWQ4XiQzcU5wOml+d1BmRixu'@;
put 'TlE0dm8xKS9gSnBzTU56cHRjX1BtRig2dlk4SkgzLnlRb0JKUSIkVn4zN2BhMD5ZdTcvW3kpPVl3ViZaQ2pmYGY3IX0wQVgpXlBQKGEoLzVeMSVbTU1OMysuUyFfMFlBaHBhOkd3Nj88Wjc1TDxMaV0kPHVFSV9hKXJDImV5diVtcV8yKVUvLD0qV1pHOHZhO35mLm0jSUI3YmpQRS5pOkJVc197'@;
put 'b20yKWx2bWc1eWhGTCE5X30uflU/R119VjJHX00hIyNbWmJWbG5eTT9OVXs1eWZBNmt5Nz49XXhaZH5eOnRqPmN8RmoqNTcvc0pYUTIyN0NsKGhMQSEoR2pGWT99Rm9hXTFgTW9DIip5TTlnSDY5QHtAWUFNZyZxSzN6Slt0Zi9dcGYvTXxXJCM0ektHenBqS2BdOkxCeGJWSHQxQ1kxczhpYyM8'@;
put 'bSxZPnQ0YkV5UTYhQXdpdnVAZllgRnVyI35oPns4fjYrKDReUTguc1RfOXhJUFN3QDN9fGV+VFslXUw6Mk9NWjMyblNbNSpRRWYyfH1wXyklVylFXnFhcGVWYld6fGRkKEY3dHtVfHIrWXRTIVVNOUxZdygobmk1PWt0ezBFYEs6TD1rblFjMHZZVUhkNEAuZkFTfjA+RTFaa2BuQlBnZVU7MDJd'@;
put 'RG1Hd2JwJklOYitvYnJdeD5eO0d7R256YU1GQHxHOyYwZnxhOE15KyVrQFYxSSJVeyMsdFhkYCpWJFN3RitHNix+Q0Q+dDglNUc5OklbJVBwa2U7MUN0Wjw9aF5Cbj4xXlldKy50ekVEYi4iRGoxS2FnYWcwP2xCMWNeUUFpMER0XkxYRWoqc3RQPTlBY3olSHpRVSZFYkFYW0FyQXg7YUkuWFtH'@;
put 'b15ZS19BKFhnfjRlJFU4WzYuSHE+XSFIJHk9T09STWtCL35iIUchNDAxPX59NExzKjhNTXZVQDIyRWo4dUdJaXttTTArSVVnVmBBMDdyM2FIQ3NTdm9RYH0odyEud3xePT5EJVoyKDFMZ2pRRTM3RjFGVU54Wl5PeDxeYjVXTE0+KDZ4UigmalVwaFthKzM4cW4zYFpDRl40VyV0Q21EVz4qSUs8'@;
put 'PUd9e0BMYzg1ejgoPz1XdURrSS97cSxsUCt7anRwK0pjcjw9RC5KV0x+bSMiMF1aTkcvfXxTI31UUlh8IytVVmR2JEUvbUVUZXhxd1dNIVI7dF02QVNmPWdAKT4zIWpyXmxAR21ScEQ2SkxLTiEhbkZgVW9hSEJgL1JZZiEhZGFRV1ZeJlVZTXkkZEdbQyNjdC55RzpTMGdUX35qdlowbjYzVCJf'@;
put 'M1MhIj5PZipyYGxtTyghT2hhb0BDXkRBQ0E4X3N6OUFAYn08TzImL0F0JWNqMmE+T1dbZWlmOF9DdlVYcEclMF4kPHJGPXtDQjZJYyU1LksjRmFOfF82IVY3IldVZWUqY3tpcmM8OVp3Pn1wRjFAcHYxJFArUEEzV3EmaWVgdlNRVEBmRCk/IWN7Ky5Jd0tRdChlfUN9TDcmMjVkcyZEeHklPHFZ'@;
put 'KkRWe0ZwWmdDRERGZC8oSW0yUyZOMDlXJXlodiY8MyhxYWk8ZTY2Y3FWXmlANUFUX2Q3KjZPRj4vVUsiRltVdGs4Wn1iaSx4JkZIcUJeRClhSk8+T1lKM19vWVFxWywwOmthfml8UVREb3pYTWFVd3JaaFtsdHc2MzZlKzVrVGFjclY/Y1tWQjpvb2diT1R5YnYlI3N8ZnJeN2ddLiljdjdpPzdW'@;
put 'RXRhSkI7an5ST0Vba3FOU0ppai9qWHhlRExkaUNePlolfGMycFp0fUlbIV10OTZGZFlpaFZiYkRDbGB5Wk96bHJLUW5mWWptVShdP0U9X0A+enlqQHRPMEZQcnxSW2E8a1JTTV9vSiQqZD8pLC58KnVucjo6NkQ7PTssNDIsVHJzTk03X094JWJwI2ByI1paendqSExeMS5DMXFLN2NaITlBK0Up'@;
put 'PHo8JnBpbSQpbFBeNk9tZ2xEMFQvbFM2VEIlM3RSTnZLZHdSPTl3M15hT1ljQT9GT3MmSCo1Klo3eT1yU3VneD5veUVBTVZPNyN6UEkxI21nW1ZCVylXdTg3SlJNXyp7JjE8c3s9fnY7S2RGImZCQEQobSpteSZicVZuVHJpSy9QXm4wdE5GWFhYIjw7KF1Raz5QUGRELEhWbHgvZ1QkSFgvZjd5'@;
put 'SCpkQ001LmtAOCsrbDEvJG9MbmYzLiFHe00sOGN5OyRGVzByOCQhWXxEeypyIz8/IT17aSQ0ay85UXp0Om98LFpRTWRgfUt4SXJeQjQkZi5xWVt+NCNSMSVqZXFmY2Jpc3A4UHprKiZMaTRUVlk0bj5bOih4V0ljZlAzQER6YWE9WD85KW9AflkxOTspa1I/SnpGIl0mQnglMjptVDBiJTNJfDVJ'@;
put 'S1lxP1h2RGpQcGtzcS8qKHs2PCgxZGMrVTF9PilRWTtpViI1eSUqZyh3WEBmX31XZD04MUA0MzFodD4/UVJWc29DPlA+eVA+RT49XjBDSVlYI2t0KVcqcjJNMUo9UGteMyFEenx3N0NddEVpSVhNNGJCIlE+JERQV18hTzZnRGA+VjU3LHFfX2UoODFRX3BiV3krJFcyO08jNio7KDtuUU4wbHYu'@;
put 'KmVkK2NFQVAkIXY/b2ZTajcmUGxlMU5OWXZgc2szPi9kQFA9Vnc7VDRzNzFLNWBUMSZOdiJQPlEidXJnKyFwbFA6Q35WX3pbWnZicmZEI0A0cWc0bzZKb1d3UztLe0hnX1A7XjUibk1YS2VVallXUXpfdVZyeElfVyxjQ0RkKmN1M1I/ZF1uRGVvb10mWT5HNjAhfHJ0WDJmWCUzWCNPbkdlfTBP'@;
put 'KDwkP21fTD91SWNyUjsxfWYpSTpQZTs3JU4yS1h8eSomUmhuKWlkeSRRJEZ8WEYhWiU9bDRAV3sxYUhROTxYRC97dXMreEgkL1ZMMnU5SzRaWypNSkBwVCxOXW1jRGk3dn1JQns9b2NjUnR5Mj9SR0pMNCJ7PjUlZFhKI3hZOjJhSDUwaExle2xLLzp8WWBEXXwrPEUyaDhIT2ZkKChSXjAzdWV2'@;
put 'e1Y6dD1oSyxoVkFFKUcyeyZaOWlReEw4UTgkMlIoJF1SJXI+JVMoSW9gajtEYHlTaTluJH4mR3JRZSNwYSltUXs4Y09YTTJRK3N0MyRiNExEPkpoNWJ+YClfOmFzfSkwXkJgQUNjcypEdD01XyJOJVtJZGhfQk93YWs8dzBIeW94NGJBU0NfTiZDIzdffmQsa1FdSDxkQj0/PihhK1hvTFA6d25X'@;
put 'W187T01MVkVGL1hoPWYheCVWUGluQm5bKU9wVDV4PiRUN1RxdTVbbFspVCIoSlBTQmQ6X01bJmJMW2MwZ19uZHJkMjVMKiErSzVFaHpfNX0+RkJQOVpNOS86dGl+UXJDPGAiTnVnPkM7P1VWYGpeYntFVmxWS2BwLmtLQXVCK1ZocUc4OkRqMUUkbGF5UDdkM15icE06Xz9NI0hwRUtmbGBZVT4/'@;
put 'e3ZGKj08WG40d0ZffiVedn0/byF7XVM6JiVAbDMlKiQlUmdIPWNzdmgvezB9W1VrUTc6LGxnbV0vbFhLUDpWT2YvZHszQSg6M14hUFA8VnA2YnUrY2skYTwsUW9fNio0WD5USTE1d09CN3c+e1NfRXBLJlJefnYkcnFOW0E1fiMzTV12WjpnaF9WOXZbeEtEJUYxQXlDNDdeVEIxaXp2Tj9Tdncr'@;
put 'Y0UxdCtlYClBPXFqKyokcEswc0w+aFBULipmWzlPWjtpQ29AQTdZaXczQThnZTJIWkFVK29IQlVFQiV2TWhqUG4zX1t1fGNxMSNCXVM6fEdnYlJeRVMwXU4hPzF1bS92P313QzRzTGI5KDU3YCRJNVByWkZsYGYrbjBSZ0FEMmU1ayx0TV1bU2clMH1Je3MqXlssO2UjYSs7ZWB5K2B9X0Y5dTph'@;
put 'eFd9JTpsKUB5PDpRT3xUa0IyZ3E4RXQve3BoNkxWYHR2c0NOaFAwcGgyMzUmNk01QzpvTHA5fkZpWmdjTWRrcTlgSHQvQyZxSlR8Y3BaaSRpI3FXUzVjfnJMWjZMY2pIWzxkTHYudlR8Z1tYXy89SzRUUV1xI1YrbWo5Nl5gTngzY082KHRmcyxHKW9SI1ppeDRZbDdeenU1Sk5rRyV3Z0IjJWZm'@;
put 'RzQ8ZkVNM1FbTyptIl5ATldsYCYzPkdmd1AmVClCMn1oM2RpQFRAKmdOY1tGYHNEL2c2VEQsM2M9STouVmlja2tvRSF4Z2BgfjFnWlsxNSgqXyw9ZTU/SkkrXVBzTTp5UCxmTmRvXTAzeiIyTDopaXIwaX5xNXo7N1tuKTclem08c04/ZXplXn5HbWt8NGI1cXlJQnJ3OU1afEZMJHhwUnVFT2Bj'@;
put 'KHJHVTV6fkE9S14kSjN2QT0obFlUKD4iJWRgYnp5ZWFMJHJvVHI9Z0dBT2lMYGZ1enVwKzhoZU1ZaiFLQWpzamxhJVN6fVl+TlAoIWUwfG9wakxman1VSDhrfSsmeFE5eCprZnB8MSg5Z1FMcFh4Y25eViw/SVBMXm0qeTR4KH1KLkB3flpMVGhHezpLa0gscUJoeFNhQGY5LnFpK0piOiw0WEBn'@;
put 'al1ORnl2VEhxX3phRzhgPms/SklzNy5zY0xYNzhqSkRKPH0yNCEyYDIxbitAfiModT5mMTlUTXBJRzp9WCRkW3lyeW94KlZBZ0BTQ3UiTzJaLzkqW0Rhak1oLC9uL1tifikibDl8OHtVQHJhNmMjekJvfjhbPWdeMkYlbm9oeTdnQEdSeVtOSUEpN2ROfk51QnYwcUB8STo8IyU3MS9BKSheeGlT'@;
put 'Mm1HMSNzZVU7eTdQISx8bmw1KXhzTlJKSHVJMEJzSV5uRW4qTWxMXURmelp2TEhVd2lIQ2FrKmJEcnguI3srV3U4aW9FNSVqZ0xreXg4RStrbVldQkRkSnE/VHBVIVt9PCV8TXs/R09NTDM9WzYuJU5MYjBZQ1AxTCNdd09nLmolcG8jQnMhOFdZVj1sK05JNDUkQ3ZmKzFDPnlOLCFxcVNtdFRu'@;
put 'diMzTVp3a0c6fSYlb1BPbkZUVGozP0FrczlRLlEmJFVrNkJVZ0FmISQ2RSRNVHBHWEhWbWZ4TksyOE9tdVo1Qz9iQk8xVEVGVjlsRDxNTTV0OWdzWSo/P0ZbSjVGI15wSChEZXc7TnchbCVqbjUkeCpQNHNnMmcwIzpFdVJyTFBLTDx4OUN4dnt+YWNpey92LlNuRVZ8Njtfa15XYW03LmVARlVv'@;
put 'dVd4T0ZrQys9dCljOXN6al8zaExaQmwsOC4mLiQyTWI4STgpYWZ2cUxNRDApTWgxeCt0cix6MWU/MWosWGhKLzUpJnxKakE9R1s5PylscEVCUS8sYlZYNVY/REEzZHQqbW90SWs3Oj1NJnsyVTModlRUZFRtPmBXc3IrNjZgKz83Tm9uPUMjfU8kXlFeKSpsQWk6U0NHU0l2ajhwU3p0JEF7Tzs2'@;
put 'NFM0R3dfdU4uNC8uYl5FJGgmKTkzLF98fDU8cGtfLkxud19qbk1MT2hYJTsqOUNCbiVXd3hOb0pSNHdoaXdqWyJ+T2N7djhLNjRMPG42VC9RQkl7RkVBTChPUStPdSxqWjM1eFdeUWZEcH5IS2NsJmUsQFJwLlcoX1V4UVtuQ3JLbSRhJTxKKi8jQXFuaFRAN3Y/QD8qQHx1LitZNDBndzQ2SiRo'@;
put 'Ly9qO3VOKDYlbE5gIipwOFtUKVk6ZVRveCouVGUoXjtdPjYlVlJVXzhlYXc8OyNqMW89R2RAOENOJnxnaihBVCVMTXslOSY5R15TY0p1Qm9gVi5ZTkFhMmtxIyhCaSNxPHJ2WW80fU5scndYM3IhVjNnQ31SYmIxensuckAxPyhwbkd1SUJKWEB0bnVDL3hjKzgjSEt2Z0YpX2VOdmBXRlg7cjsh'@;
put 'OzImLnJOSjZRfWNsfEA8SG5NXVg7XTlgYnY0XXU2QWIrejgmNVJBUFRaLEVsczI8clJ7JWk3fmYlPUMhZVokSipfLnIzQGdrMHRYL1paQi5QX1hJZ1dmcUFOSE1hdkVSPTQkVnJoZ1VIIWtRbFkrZE9kJFFOTih0RSNfIi89Z3ovZHYle2M2RkVEbHQ5MUJ4TShWfWEwKEspdjVvIkZ0LihGQ2te'@;
put 'TSJ+L1pJeyEwVFB5OVpeLHFtfW42YHtQQyQ0bkltRTc9RHRweip0R1N8V19DeUpxbUJmbnk9VSs8Yjh7UH1Tal9+SzNqLGVxS2R4YiVaXlI/JDZqSnEoWCJENGldLnFITShbJm9uYkdWZllbanZQdEhsKFtdJGBoV24uSWIvJHVyXzRsKWlgbSMuVFR2ODNJaUlJM3YiU1BEPmA0XlhwbVooPGJ8'@;
put 'UShuZ21vXno0azU2Ly4hfWdlQE5FNXt2YkR3MyxYakwvI1hNRHxwaWY+NlUjPTF1YjZJSVg7YDBJb0dwU29EJCNjfSU1XmxKX3ZKRFtTcHZqKispTEMjUTBZMFAhWytUOD8lMU9IUjhbXT5ASltXXn58TXRWI1JjQ054RWVwVGIkdUhoS20haXhFeV9fXipfMzlobHRlS2dSQmZOWkNxUTEpWFB1'@;
put 'YTU0UWMhUFl6Q2oyIiZqRVR0dl4xZDw9THtHMntkRnNEWUteZE02dVBGZEhFSyFDV3UqfTNORm9xTmY6TzYlVDtkKWl7blFLMXwsJnlCPzVjOiouK21GQjZbWFEueG0+XWpTfHtJZzYmJE9bVk1wZjAvLypxeHcqXTdaYmhTamhMKmpoMFZyVEpbTE8/MGpWdzMieWNaYXUjImhgKkZ0R3piQVMm'@;
put 'S2lVVkEuQWNpelQvVnVkVlkiXnR7bjFQUjFue3JZdm1WYkVBbHVjWmlhKCh8Kjg2IlBeTUhLalpDP3phamlRSm55TjF+LHg1PXA6XWslPlhHXVNIam0meGdVPC5TNE0xM3RJR0N6PWZHandlLD1RI30jezsxTCRLSjUyflhrZThKbUouX1kpTVRRcUFuUG41fnxoXmdPZ1VMYFc8Q2skZno3dXdY'@;
put 'MzFoJDBpR2hIK20iSzBMKXMlJSxGPXlMTSlWZFFMLHA7SzZ0UU1mTlRdcHM3NVpIZm4+UWBrTX5KQ21MLzd+VEl7RV4kNj5KMUNWVCY3NyFzWD9mL2VbZWAqeC9NITVgYkJePn5YLi5eQiVuKzc3OV1sdyFMWXlNTWVlS2RJRSkqTEBqaEFocT9NaFMkUVp2MV01OSQ/WWtfdll+ZTFSaTtzfVg5'@;
put 'bis2W35WJF1pRm8oOExnfndVRX1+ekFAaiQ8SVBnbHw9Tk5SOWAwT0NZMWQwa0EyYkBJfmJ+XnM4OExnSEpRfSslNFZhV357Tns4ci9oWDdwWFAjdU4oL2YxKl5mVjBiY0ZSTzttcipWaC5ecWdNSDRjQDg4dlgzanUoYHIxPlQ1R1J9aX5WazRgI0AoXjlJZj9yd1smRipoImdmPEhQT2xCVU5r'@;
put 'NjZEM0YzbzlKRnJXdXFWfGJmPDdheys3JWcpTFU+OyJ4el1IJDt8MENdKzpLaV41Q2tLQmReLHZ+dV9FeVV5cTQvLyNhYUNSX2NNOUlKdSlFPzVmWk80bkxmalVFYiksbGtiUCl2KEY/aXo1YVFsOVhUZXFVYFJKN1JtfjE5aXZHeCRpTGEpWWErJF1GczQzZTpfJXFib1tJamNIUT4zKnRdTUx0'@;
put 'TFI9dSpxa2I5NTRWUm1zezdIQHc+YzRyKFlbVUZCMTYoNi4vLHhLRVYrKi9rdkZVaiM8TGA6X3RVVW0iLD4qSTljZX0mM1Q9W0czaW5aaHdPe2hbTG03QnR5JnNlRF9WbnpLTUleL3lBWU9wRCpIRWl6bD5jUT1qOUNVRTNnXTA+e003JkkiQGZBRUZXN3l8a2FyenMxWmh0P2htPXN5fXBkTlUv'@;
put 'flAkSj0jQ1NKY29BXyFyRmlqZ19EW2k/P1k+bl97fDR6OVN7dTdmJiNiZHlnVTYpZS8/SmJFeU5Sc0o8eChnUFhadlEmZFZBaixTPi4uIUVqdHJOL3RVPUxVMy42fnE7MFFkQHN7eGFMJGBrN3FpNWg6NkxPSFdGI0p0YSttTmJlYVVsSEVPViphRG8vTTNiWSpMeXRMbU5XRnxkfi9iO28mPjZp'@;
put 'fFt7amBWbTo9In5UXzo0aDlqYCRTZHFlLlZdRDtAXlVaPzVHeCteTlBMeUl6M01VI1NtaWVSSSh3ezx1PC9dM1U5IkI7LiJsPW1qend0eC41XmYsdjIiSytOO3psZ0FOOzcvN11QZWQ9L3NkW3B6N2BdTSYyVTJyMysrdXxbRGl4czd9Y29LU3ZqSnd8fG58NG5HIzx0U35+M1ljJHl2fFA0YGdb'@;
put 'MExabGh+JStZSCY6S3JzKCYrVkwqV0crd1YwT3dpP0BGcEBaXjQkU3dmT2pPTmlHWDIyUl5DSmdOTmJ9LyVsPXtQQDVrM3piVEMxWm4rPjxgYUIqT1FYRXIyJmQhQSNScUlDRUVtTkhDJCFYMHRwdzMlYVdUIl8kPzE0bTpqakhNXkBTdWlvXTheWjluc0s5XzBuNyMkUThBTltXeFhlPjI4WCZV'@;
put 'Pih6bXQlOEFZRi8mOlNkfjRXfDBYMXIsJiFoazI9bCZCPHxrUGo8I0lJZSpycnRfSUlacVN6Q31lWCNNW1Y8QnxrR25UVUl6SVY0KlB0USJESDN8R2Q6XkAzcH1xazN4NnNNSDAwUiZLWXJ5Jkw/fnQoWmJkfEE0O1F+Sn5IQWJhKzk3ejlWVThMWHxRSCsibHVfRChYK3EoVHErfjw9L0tpNEZ3'@;
put 'bExLTEFlZ111Oy91Ul4/alhaI0RpTEIxSUkmTj1bZl5ZQkl3b0NucXV2OD1eNmxRUClaZk1oP1IyK2N3NG93N0p0VDl0XUlzTmZbe3IsPXVqSyZOO11Ee1BILk9vYWJ+bzVoTiJtNlM5XmBmIVNGaiFxT1JadVMvfkdQQzVUVl8sMD9Saj5xV1pufmY+LH12T3x+KC5aPjoxZVN4TnhBKX10KD5f'@;
put 'IWt1PjBtbVM3dXBQZXJFQEJ9c2dSay99bCNCSXt0QiVVZkxjTk1yXk9tcktYKlppSkJ6a3RJIUkhSTt1YTMiVVg8UEMqN2hiVEs9JXBEOnReUDJXel9tT3Erczw+bjlpfiV8SExySEw5OE1OYDF+RGU6cT0oSFB1VXA7M2cjQWltMUNqQCRxNmtFeDU2Vjt4fWpRP3hgaEMjezJVJkZ2TE9CRCRP'@;
put 'eDVQWzYqdVU4eGh9LngpOVpKW2IhTmo1MXR4OzE1Ln0/SDFoUm9ZeFJfcHxGSSY9YFV1ak13V0J9e1UoSHhFP0hMS0lyOFFFKEQvXU80dERkVWhTIWprcjxqMX11NyN6PkhEVWpBVzZgQypxSWlsLDtXcUtwLClmYmh4eWloMT9UcHhhdkgzeV5LS2JSM2g2QCtNRk47KFk3QDo+Pz5XRnQxaiRy'@;
put 'aClfXWw1TUl8RlZwRFosdlhwZlRuK2dhb05UbVVnP3tPR3IhRHJjNGt8JDhqVFZMUipfZFMkZH5GI29iJTFkQDBIJVo8fVFMa2N5fDF8MCNNeiZbKEpyZkVwSkdVZ1ozUiE3P29IM2p5JjV9dSwoM1NUS0JRbUd0WWp0cFBpOVA4JD0oZUdyczAiXjNYPV8yKWpYTmc/ZyxEWEBbLCoyQlh2My4y'@;
put 'OnQiSG9yJTh6aVJrWGNxKTJXPkNJa0I5fjBfRz4mTDZiYmN4fCZ1bis5RkJNXnhnIlEocEJjOGRTWl44aUN5fElUW15uUkA7c0J7I3dkWXVMK2MwXyg6IStYTDxRTE4iUUJ7OXliNzUpW01GYV9UQCQ5NSIlcyEmJWNCZ0R7dnkoJiI0MSZ0LHVVam5ETUhXW1ZrcHdbUUl5V1VrZWQlfD15fDls'@;
put 'ZG5sZTZmVS5ZNmsxNkAuSFdMX1hgZW0hWSJ4ekJTT3oqcTQzfWN4TkFvYVdFc3tHWWlHNVRgJCE6W0pGUCsrZ0JLYGBzcjxXcGJsOyx4OGpZJV9zMyFdfFY8OTkwNzQ2X2NEPzVscS9GOTlnSERKWj43WiF4SyMudHFDYHR+L31PbkV6VFszPSQkNGh4YispbDZKNHY4blZofkFvUmsieEkzUWM8'@;
put 'flZ0UDR5S249ZFN1aGtNO0NHSkV6fmp6aTRadm1mIzxseHspfXBveEFJaj59IWJpOUNrJFRHX0AwMV8xfnwuVi59UV5xUTUpTTpZbVNnSVtyXyt0YEVWLjpraH0xPzJQb248IW14TX5GJk10eEQ9XWspVEN6W3o3a205UXtlSEMkZFglSkI8eWghK143OyRvT3R9c0JaUm9Ga0IsW2wwVVRPNyNQ'@;
put 'Sj9SViIrRS94R1g7OlY0X1JFOE5hOE93Z15UOnFaPUtCIlJuWWlTTWZIfUBhIXEpWHZRUkA1Ij9qS2FxIWNrQkJdZCFpZWZxSTl9JFEid0QkJFtsS3djPE9acmV8P15+OCpjOnlQczYvWDZueHovaXZ1RjxLVHpPdml+Ul9INnAiNkN9eGBMMlV3fWVXOG8jLHEsej1CdUwpa2FDMyFnV3w0QHRe'@;
put 'b19GR2JEJWpqKTp4MndmUSl7VHI9YlA0SEhhMXRFW3I0Nkhpaz56KFV+YzExLDhhXlkyI31GRFchI1VkbGJ4MkhAUkp8M2VKW2kzQEglclQiJHRyZ0tGSytwZ0NpUnRgJktvVExQQUFkek1XW0o/MVk4ME0qSno2STBJVVVHbmxHRClJUmI+U0ZreTNMJSZ7YzBtaEhpfUUsN25JOVFlZVtie0da'@;
put 'cmtCRllkcHxhX3hvQjAxK05hW0k7WUExcHI/MCxmL2xBQ2JTcjchPUdSa1Erezt+cTByZlh3XW8qWn11JTh+UGJvXlpJZT0oUj9ZSnd7SEJkOiI5OTNSaD13KUlnVjtXK2twfEE/cjBmNXMxIzJWJj1qcEU6P242N1N9dDMlSzIhZyZTdEJwT1lASmJASDJwfFBgVW93enQiM1dSfTRHTnFbdWR+'@;
put 'fXNdNXVzZGdpOnxaLG9IPSp9MStYVztdYGg0PDlPbCZ6WUVEaH5COHp8IjwoYmM9dkhHUFpgSEp4TWArZ2k8P29bTHFQdklCPDFuKyl7LCNQVVlHLmJ5I0szSz5zR051SHEpSW50ZnlpSlJaO2dFfiJWayREU3tSNyFZJktjd3ZKYisrYjx+eiokLHVzcjEoXkJ9VDhrUzNYUVBocU1DelF5dy5L'@;
put 'STxgeG1RQXFJTl9WTFtqeG9aOHxPTStITV5Zey48T1k+JGFnNlBvNWJ6QHB8MFVvNkhWNnZ9M1hhVV9gN0JGJWVeayQpRCJhLld6LEV0V2xNSl4jS3pzdjAsN09EI0ZOTWdvPCV5eX1EUXFgJF9FWl1YKm0yL2xsK10rallhcEhkX0JdZVAxKXoqeywoTVFraktbSUo0MUQ6WCkpWW9UIlBLNEZk'@;
put 'I1RqRiNqYj49djhNfkNsRmFmP3UzInBuMUpqWnFqfC9eOlZJOkJ4PzUlKjUyUDt8ZDEscDguPU8zW2RLSmxZVXU9eGtyaUF1fm03QFpSR3hjVE9QN2JiXyMiUU9PLGMrOHQ5OF0+WEovZ3ZRLjB1aDN0QGFJb055SkhCd0wvfCguaHpheS5xbSRmVVhSKiojTGw6MEBvWGxCXUlDNioqNT4vVCpj'@;
put 'KHoxJT10dXFZSGddbWwjMzlELyE5XzxsdGNsTGt+PTJtYX5NSGlYVF5tSDJJWmMud2x5YThINkcrWXJ4dWpdJXxLMkxeTjs3e1s0JXxGS3hSPHg5KWdRaXteYV9YSlVgc1pbeUBsRzkodHJ7XVpqb1t5IihdeHx8Iy5+dDkkc0UlR2YwUG9SO1lyNCokT21HaT1YezlnXl0vPjF0bHIlWEIiQiJk'@;
put 'JmZoZTtmI15GU21ybmZOOm5hWyN+IWMiQGIpPUJfYWAoeVt6cEN9ZXZVNzxUfnF6T3hjeDFTWn5LfntfYGZYbyJnUjhvUnZTYzdPIS9jXWVVcks/MSpOLGg+bmEzNngwWmhFYj5yPWNHRFQuYE9aQilCK0c2RDlVSExDdnRgLFNDVSl3PiZQJXcvRi5aajBkT29RMmpGN1UzTkp8SU1maUpSb2VI'@;
put 'aUdkOmFTfHg8Qio9STxhVTBqTklVPHZ7bEliYSs9LEolTVV3VXtALGRXPCp4fGIyPD1nYGQqYUhOfV1Gb0hKNnU4bjFnYk1fQTQ9MHsyb2B9YSMvJFE7SHQ8K3RLYEoqemNGUlpmRGpAO1tsfTBoSiZ8N2pjOzB8UURPZ0NaQEIvXSs7amJPMC5FVFdXMUc3QjZNWS96K0k8bSUxamR9eT43aUZj'@;
put 'RVZOLDY0fVVtZzkqcCxSWV5JaUFRaWNoNVs3UDVLWDtZVXhBbVEuT013cjtbOUdmJiVuRGVrWm1nQ0RyfkM5eUx2WCR5SHUyPXFjVyZeWH43QXghMGpob2hBIkddY2h6Xmw5cmJKZ1BULDpqdnVnOHFIVXw0ImUyP1YpbURJJnBCfWBwNERTfmh0SVV5W1d0czNqZ1JjITJyV1lKIXhXY20kY1F7'@;
put 'Jit3UiRRTT1Tant4QU4mTz0+bXEuMWBCSj9iSF9XXysraUhMKUJBZTEoNk5sPnx4QWF2aWgjOFZWPmtOSj1SdWYlbDdxJX5fTiF9XjdEJSVzPyFZSm1zYkp+I3RocWhbfCtfeGRkcDppWm4wYntDLyZBVSMsTUM4dVtwaG8xczV3KGYyUGopMndbKXlPWkF1e29oZjprVSVBNX5HYTkoYkAqYTpE'@;
put 'YG54YShobUAhVjxJfCNyK19OfTZdeFVeK2sjY2YhWSosZU8zOj9VPkJbOFNnSi5pTlJmRSowNmlBfVVkJX1DTGxlNklWYkc2eVAvfUU5JE8oRSMqdnp1OV47UWcubEo4ekhgVWM8LilfRzZQTys7OjRVWHk3fnFwJkdiKDhhVDRCPiYlKkBHcnMhXlJTPmdWMygqMF9aQE5jSyR4LjJEU2I/LDRU'@;
put 'OisuJjFQaX0vWlElVFcmRXEhNF9qX0hxfnNbVjNefkdPTnxpVU9uey5HJSFJWjkxI00xWDQ+RzN1QDFRTmcwO3gyUThmKHcxWG5ke0VDNE43Iy4iVmEiUHIsaHpVP0FxPWl2IW5sMU1uK1skSyJWbzFwZmUqLFdCeGJdXiZnTkpFKlR2TDVzO0lsSWNAS1UqKyNgeGEkflAqZShSakZlR21vP1ZK'@;
put 'ckArWkg3M25KLFVKIVA7PG1oUjYlLnpqTnw7OUNjSy8pOypldXVRUWs0Q2p6VzFYeFt2fkhLcz5jZHpzUCozPVE8Rm1WPmhrfCN9N1JAWShwLDd2cFJOfV0yMVt3SU5UTHFXeDomaUd7U1g3PTV+UTVaRGRkdHRVTV13ZTZsIVQ/dz54fng5a2ZGXixCdVl7enQ1Mk8wI05ZOmZncTxjS1tuX2lM'@;
put 'YS9wdWUiMjxucmUsWXc2UTp+LiN3JE5LeypvTS94Rmw4SyxgOS5rcHoyU3t+SGxDI2gofldmdTlNekZXMVkheU9RK2FFWHg6Xy95aFF9fktUQFloIzhkWTVMNDd5clJ1Wj1gdjAmbzVuYWZiSWQxe1dwaDVkXkx6KCx1REE/fG5pcykqdzc7K1dOKXR5JWgjfldNJEoxXltvOkkwVFg9TUhYNmc7'@;
put 'VCgjNDE6QXAzVWF9LG5SYlJYSVV7W2s9XVMlJCpoUld1QF4pR2I/WT10MWkseXVkQUJhUzAjeltfRXE0SHZHUlZDPDZROyVRKDxNNig6UzJZZTR9Yjded356Kn1QXTZuJE0xcHBAOChOZTlDVjtyMmVGemllOG5KQCkmbEZFOTtFdSZwXnQrWEpVOFo3Uj89PXpMRXtfLmJnSVZvZmxLcSZ3SG0q'@;
put 'QFt+VisvbV4uTXAqQEM1YWV7RSU6aH5gaEx0NWB1aXBkQmJWUSwvR2t9PWBfK0s9ejFbdDp5UkNgI2UoRSpaUjdkbUF+VCpZbTYha18mYSYzfWV0TTQhMzU3XSt5Ty9MUlFfYFF6JG9lcz8oPHMvPmE8ezNILlFoJiwkL1Nlemw1O08sQFNeRkg8VUhlJChjXWpdJXViVCRtS145ezxxeC8/SSZJ'@;
put 'akAzSEBRP35YVUV3MldKejhjXUNpS2NMJUNzfj9BcCtpW21TNXgjXURlRCk8YVcqPFVZdEdiWD1oYEkqLE9FUUdPRH5WOlsxQzlANTVRRnI1UmNVKWNWd3kuakRHfixjQXBfKkZNTHFfSC9VRjR6fG9rVi9JcElxMnY6PkNESUhzVS4yZFswMzpRRCtGZTZNeXlWIiZzSkBWZ1NxVlJ8YWJ6cj1z'@;
put 'eD9MNjFPPD9obUAhSURxJEUwOnpwKShncDhQQmAxPSt3TGdXQG5yWFNJKCh7U0dMcDwwPS9JaktNeDBBUiZldXNhQk4pNj1QOjo6aDRXWWp4aGtoJVZiJSVyLkhCTWBIN3tvP2lYYncsUEwzekxTSHZwNThiUHY0eF0/KShSSyVNPiUwJGdJS3FqSCYiTEQ3ZEBVSnFFXzJodlp8IkpvdmU7MSlS'@;
put 'TDFTSVREcHt4LiZ1SWw5WUtZW2lTXihNPmw+O0JuS1lpWlR6TUpyJERDWDlpfj4oPHlpW0xWQDt0O29PVDhSY3s+fi5kImJ2Uyw2PF1IRyl6JiYqaHM4XkpMa0FBQyMva2A8PG53Qm8kSlVIIXJXN2JoYVR5VW5qPXRXLiZMTHtHJSN0RC50fVpNMDZgdmJsbDZ8cGxeMmlRbm8sK0JofnduQTJ0'@;
put 'RTVFPz9PbHwkZVRDekd2dGhHMUlNOkZoUmxyZUU6Mz4jX3xmdGNyL3wrQlBCcC9fIXJsSTx7IlhseEdILkNeeyQ/PjVKVUMjJE5vQ3VsTDZ9czx3Jmd1V2FjO3xxM08pflgpIUR9UUIzaHRVOls6VkYlRkY+NUl6V0daUGttY2piNHB8bXw6K014ITZPVyYkOn1rV3xCWmdCVT4wSjtXe3tlME95'@;
put 'Ik1wSElpT2hlOCkzdkpeJkAqamd+I0RER3txdGRvPUZZQEtid1E1Pk1YMjtgaVklV1ZBc3ZSJjRFdztET1V1aWozcS4mfjpedDYsKCMwRj9NW18hWk8vOWgkXlVzZ0RIRmt0SmMyS0VJQEk0d18jQis1Vj9GUzl2dHJ2Wi8yaH00Z2lXNi9qSVRrQVRRb2Bsb2dFVj46QHt8aXJ4Tnlqd0ZLKjNT'@;
put 'NnpXL300YnFYfSIiVTcjKnYuTzciRDpFKmplQ0t8UVNMZEgsR0d6RF9DU2AqMSR8eHRyeiEmNDJWUHVeZ3UwUkV5bykhVXRvYCp3Rm09VVYzPlhoNGM1S0teIzkkNEE5ZiFhVE02TTEvaCZ1QmtOeDVfaj99PD9GdywhdVtLekw/TmgkdkJMLGI3K1t6RFN5ZEU6ZCgkIWdvSm9BNSN9UDB2fHRj'@;
put 'bWcoKW1OP3RDPktHe19CI0p9RVs4JmJ3c2ZEeClFe0lNTCRsLDQvMVhXfmg4RjVwTDFfbCJjU1hGVmdkSFlWJWg9U1QrNlI0aypmdURrUV0zbUN7d0s8SEZNclRnX203cHBCTkRJfTBxbWdRL2B1QDp0U2h2QVNWUlA1SmgldWA7KHc/NWdJemEsKVlgRWNVRDBTVXMpclUyKFJVSXxOMHhfakNN'@;
put 'PDwuaUJeMHs/Mjo0RlgkQElxIVZCV2p7fkd3eC9vTmh4UCFPaG9BZ0VOfD0kOFlrST8kbnQ0QHkpd34mNX0oJWUqUH5QYX5IXXZlL1E8LDA/SF8xRXU/cFlDXWpaKW9zc3xhbDlKKGMzeSluVDV6NE4uPUckZkhoLlpCcTB2PGcqSCk1YHpkMF8/N1J4VVJAKyIrLnRSZDhJdTE2blYoMWtkJVQk'@;
put 'cnZWYkZkMiMyNzRdIyNoMkI4T0IsO3osWTdFdExCYUFUQ2JiY3U5fHFAPGBAY21NS0lBLjhkNH4/ei50YzolcE9rSS5geW4rMDB9NUFefjlrKmdEMFI1V0ZhVFBqdjZYSEtUayxUdVlXJllSKjp3bjtbPDEyTHUmWEA8Qyx5Tzp9dCt4KiR3W2JXU05LWT90Xj1ga2kySVVNdSs7aEF1Mip3YG0x'@;
put 'QWtYUSJFMHR1dn1hLmVveGZeb19HVDN9Q0Q0SEtpJnR7RHpmeG1TLF16enQzKnN4a1FEZ3cqcEssOi88fXxHKk5Yell+YUs1Wz1oQ3J0LzU0QmghbmV4Sz9RcDImIyIqcUNXUG1lWWUlRktgInVIMDhGdnNUWGw/KG0mfFJJSSlYX1FiZFt5RHdDOEBmYDA9OS5QM2EyP1lEU0MlJmUlS3ZKVV5R'@;
put 'KlpwYV5WZ2g9TyFLYzY4cGI1fjN9KntWMjRRRWRwRkI/Z1MsZmJ+KUZuPFlgMmtAfkIxbkFiMzVTOmw4W2EmX0VtX0dqcmQ5JDFfU2p1eCEsL2NdTClKLmA1P0FENiVndyZ+Lzo0aSwodXtaM3leRVBrO3JgZ0dOOGRBLDEyQkl7ZTtaYFFmbyUsd1UjRzwpXyVDSWQ/cyxZQCFWMlU4RVBrcWoq'@;
put 'cTl0ZDljcHw4OUs2a1F4I3VqUClVUmU+cHkmX21JN20xRkd8aVtLW2xWK3FNI081UGB4VDAuPyFnak1bTUApP0k2WG5LUnpsfHklZnVuampwZT4zXm81Kn0/P21QNVJqV0NVUHx+S0kuTFFocWpRVD4lZlBsdUw4SXlUOTZ2VUw7JTlSWW5NR3lzUygkMCI7QDg4KWRwVmxwVFRHNHsiWit4VlQy'@;
put 'RiRUMF80R0kwSXNsO0QuYUlNXyZBUSRwe3tQMHJuLGRuWD88by9tbiFAW3JJeClybDBCNH5bbGl7LHhyVC4qSykjNCFXRF42Z1dkfF5dVl55ZytOWlh3JSZXXTJ5dUIsYUtVKGc0bEtKNSxxRitVJFt6UTNVJEEhRSIwN2tvQzEyWyh5QlBeZUNTRTV0UVA7QjJFUDAuKT1NOVtOdkImSE1QKFdL'@;
put 'dihjSyxyOS9tR1lZOHtRRm44PnBbTzFyRHN9aj5QZ1MjXzZQM3J5NSpbUjdxZ2xSfmhDRilGLzBja05Hayg1OT1Efn5mbFRqPEZWWDJ7Mz1jaXVIfjg4a0hhT3oxLllbWDVDJUs8fEg8REBbbHB5R0R7JF9lPGJUTlkufH12MmVYKyRVJWw3Sk06U2hXSyRLY1tZSUwrNTl0aHc4MllFb3RebmA2'@;
put 'UWN5UjpbQHZtcV5iNWNsfm80QS85WDVoIXRDLDd4Wis+Q3BscDEvKnI9T3FsZ0s+ejVOQnRaRG1dU2FHS0VdMDUsW1RwOG80VktnQHhdU1ZOPGEocEJkeHYrUDtiIXBlNkloZjJNWlowd0xTNVhoTE5zJlNoaTJKK110WHpKNmRoUXUrVStnOSNdbFZwajcwTVJbYypCJXM6RSNqKiZwIXZDSksh'@;
put 'WlEjfVlleS9eaS53TE52VXpoZ2wqMzV8KzRPYkVlVjNzZW9mUCM3LjNpPChzalBNMWREYFZfTzcqcjJ5UU0lJCFQR05kdC5eOl54KDMsZDJWTVIrVkxZIUJzWyZyMlIrJXd1bDgySishP2YyUitPKGUjUUdWNklaImRobHBecGREYG0wcU0jbG4xLk9TVCx8KCU+XWR4W2ppWSs9cz5eNjdkbnBn'@;
put 'XyhkRm1MVmJjaXQ1dFFGbU0jbHdLVFR+Qik4eVZ9RSFhMjZDJWs/Kjw6OD9bTUtyL3FVbW04Mi5uQlQ9Rz00Ok8qSF50cWcoTk41LEd4Y3dxVTdtbClTZi5ANVA3I19eUGdERCU0XyZTfSElI35kVTZIbVNoNmRnSnZKO2RMIWd6ejx5Nj4ucShsfklGbi4hbH44bzleIWdTMmR8JlAzR1dbMTJB'@;
put 'Z0R5Y3RjOjJuL09kaF50UmBKTU44OV1sczJ7dlJzTk8kXXg3SUVCUTtOdGhMfUtoKGVETklHeiFUSGoxUTpRY0h+UVd3Vkc2YzUmb1QzP1REdWF7Sn4lZyJnPTN7ZjhbcjVyJXU6NDEzIWVfTmhHKlRLVzZpdlErdFlLbGgyM0JXd3YlQjNSVnMyUVs7MzdDN0c/VGRofnI3RkQ8UzMzRDRXNG0u'@;
put 'OiZLc0NvcGUyKG5haTRobihQfS9KX2x+PlMwdSEsVUMobktQT0FqIkhfamJVWCEpZEM7VVR0ZXFRPiE6O2FFcVtjPkZpT1hAbC9PQ3JlKVZGTl16I2Q9WTp6LiNQSnh9SzosVUVbckdwI0t+S0lbK0VXWEtMWWhCbFBmY0VmIXc1XldfIUE7cTExN1BpMlpoNVYrYHBdenx5dFRHXiZhakJSPypZ'@;
put 'TiIpUGdCTCVKUylDVmBPfk59OnM/YkhAYms/fmxLdF1scmdrKDlkRUFkVWx8JmJSQ2FCV0RTVE12alNMOjNje3tgRDIwS1NUNmtKSUBZWC9DM1F0RD1MSGIqblNLLGwpfWg3WGk0OFNNSzsyS0kkYyNXejtSdkddUTAvdSUvaDdyUnh4RFpHYjhNZUMxb0trPUI/aXFvPnhqciMhTVViMTxidlVV'@;
put 'IV5zaWAvKkRreURlSCJQX1VdOzdSXnZ7OVZgUEBDcV80KnJqczdWdCs+aDd7Q20lciYkKEAxL3dxPGg2Tm5mSyE9Xy5lYFlbK006LGFjV1UwV2E5LiZwK1hrOzRPZl1gRmVIeXZQKilackI1UzRMYD95UTpnO0JUSTslWzR8YFskfHlodlo3KEQ5cjxZdkZ8bHVBMzk8SUk+R2EiaDYheW5ie3tg'@;
put 'PmxNVSNnUWZmcW1dfVV5L3JhblNpXlpiIkZmN3M9dTJpJH0yMG4iYjtVYDdjRkBCZy9ZLmMzfUJAZExWbkVUWGw6akhgN1ZhIXUjWWx5ITJvNSUxOWdfWVsmRiZJUX4udH1AVSwpczp5XTEzNCtmSllUNGFYK0t4Tlsld1klX0lQcSRfb11gQDtJfD8zUEcoN19nVll8IV0zUEVjIjZrJlgmbEtZ'@;
put 'ZVBTJj9GJTUuayk6bmtwUkhZXWwkc1VaLFAuUHYvVTQlN3pfJm0kJSRZeHRZeWM9cCNqWWAqSmFWQitnP25eQUBZZnZVeERmbTw0b150NWA/Pnp8WV4pWi97PzloJiZOZHpAQ19tPS58XjNVSXlRZEZUYT9ReDJNWzRPfUhKd0w6SkBwaWRkOGQoLHh6Int1VlFQe2RtMDgyLmRIQDs3N2FoeU1b'@;
put 'ViUmW0gwRzUoVUw1Nz1QMU9YKzVRcCluMjBZd2RkRVhyajkyYWNoXnBkQXRuY20wP2RTaDFhJDZDVE9YSTV2TChSMWZ6d3M/YTY6VSRreF1eIUJdNyw5cFlmWGNseF5lRTssYUNSIixNUjlnVzouaipmaVF6R0goWz1EdFY0aXYkM3U6YGkxQXJ6QmJWbUV5LkJqYVJvJXAhIXpEcy5yNzghTlU9'@;
put 'eFlDckBGSzRuezZjO0l3NXorYXRza0pyKW1NNldMSWdTMUJmP3dfMkhRXW9YX0lvR0E2LjFXai9jNj5vdmBAJmwkWzMkclNlX3w/cmBjYSM6c3M2WFNSWUpffGpPWyxdQD9uPVBLMjpWVilHTVM4cmtafF5EMzh9TDY+VkNSZnMxN3Y2UjdgUGVDKmF7di5+Onk2WkZ7JiklU2UvKVJ4ajZhNl5A'@;
put 'engrNCwudSlbIXB3N002cjhDcz4xJnwhOGxfSCo3NXtDbXckanJlJERqcno5cUVhbiphcUp1ezdddXs3OjhYYiIwUmRTRmssUmJtbFF1S3cyMT4zIVJiW0d5bCw/TCxzP1dMUikwKCxVMjY3ai5OOFhPZDlGOnRNb0B0fGBqN2VAamM4O1A1aExSUjIzLjJreGAld0U/TlNfMzQ3IT53Uk99RzNt'@;
put 'Sj88OzY4fmozYSpGU25IMm53XyZnLisuJHlCZ2llZCl8UDVfaV9gPylBbWUwJTROUGdgampZOnU8biFtISNeYnJ+O3lqR2FeNT5rSmhIelUxdTJWKnQ/X3c9dm18XW56ZihGY1J+R3syfHpgVGh4PnQ8MyNeN3YjVklxWU91ekkrazxhPDYsc1l1YjtDZmJrR29PT3dCWHRUSDxHcU0+PltQfWVB'@;
put 'cz4+fF9EVSowcEM8aStoWjQ9ZyMyLD4/OSZGbVVoSGdQe0B2MUVxfCprLCkqUUpEPkg/S20pP186KStRcHFRP18lRm4vYW13PFhgVkcmYjFzen5QVlo3XyxZSUFoV0RyX0hrYVY/fHF3N2swPE9TQUVdVEczbDg4JHkjOTRkUX14Qn5IbERuOEI3e0B0UyMzWjApfT07bVNPcT8pbm8kfGFfR2Bv'@;
put 'aEF+RDtJZ0wmPlksInMyc0pDTFE8TERAckBGWXR6OU9qTyNyRCopdDEvRnsyak16aThgZWtPPGFtKHVMYDN5d3V0c0h1Nj97LkJyOmNAYm13czd3SSlMSSY7VnFGPE4yM2ZrZkNyaGJzbys3bW0kR0EvP101MXdPeChdOUt0ayp7bTw/XylVPGVfNTU3V2gzfEwrUzZ3KSslZUlnclUyaDc7Wyw1'@;
put 'NWpReCZNYkA5Jms8YWRXeXFKREcrRDowNU0iPCNjZ20iaDYhSSpSP0taKU9IOW81Zk82ZGcyKG5CO3guZTtKR3E4PU87el5HPCMmcT8rekNVPXgkN1pZLjRqJV8xaUlfKGtYYip3OFUvJn5RP1cvLFU2Nj1jMk8lWWI9PGtoJGtmUkJ5LGh7QG9ZKnx7Jkp3JjFjMEIqaklbcVBxbGM4fEdfWCVO'@;
put 'PGRSc1hdaSxdSFJZVihxdUxbMW9IODFleSx1JClYSHZ8T2EjIU9INDh4TnhEMGsmVzNYanZoNGJYeHhoPyZUWkkpdSxXYWV1NncrQD4uZ2BKOSVRZEheTVIrU345VEQjXzZJek12O2FkVyV8YXsuVD8qIVA9bEtGdzc7SmVzZ0pnKi5TZStqV3k7LG1JYzQjRXs7ai5ueysjJUdVc35nOG1tL0lQ'@;
put 'P3tLSntRJXxxazE4KiJDZW50ZFEyV1B9ZEkhZW9OTn5LODh1ZiNrQlZpS3g/Kigjai9BL3lzXnIjI1AqSEohcG50c15oKltXRl1ST3hvblJKelFZMzdeQFpEQlh5Myp6ZDJmT2xARkkzcig7QGRFfnZPMEc1b0YqRz4sVT9sYV90P2lQXXtLXzNaWDUoOmJOTEdoS2xvNzJrbCl6dkluIWw8OFpu'@;
put 'S10qZTNHTjo0cFkobHBKLGlIZ2M2YSxmREE5Lj5icG58Yk5+ISxgW3Jbd08jYDt+KUR1T2VrQXEoWUpHbCNOKkMpdXMhUVBXYlQ4IWYkVExuIj9SXmZOcGIpUHIhPllQVjhYSl4yMGZaaXQsW25fekhZQGk4ITg5Z2RbOTRvPCwkfG8vI3BlJngpc21PMTc/MnNzXXhJXiwqQWlXfThJY3pqI1M6'@;
put 'WFpqV1UwRCYyeUleQmo6XUw5PjBzSSJyI2Y1d01Ibzw+N2VqZExHSjdCWjRqWmhGWCFZNEEmWSlWPVdgUitGKVpwLkR6bkhXVzgzdj5iQi5RcWZ0ZnVWMSp3d1NSV1tOb0Vlc2ZHQUMlVyl4Nz5UXlczViUoRV4sTVtFbDZaXnF6cUh+SEMre3F7ZFMlXitodnAhU1VAfnVEJTh5PFNLMz4raHlX'@;
put 'aG4yYGkjM3F0Z10uTllWQltOYGVYOF19SVtsYnhVfS9PYF8jaTlJXTEzOCp3ZXtEUERCXUBaYl1PSlFaITtFL3tlX3UxLGlufXloWGJmRzZ3Ik5zPlRJK1o1T2E9TVNVNnBAfnRjfEFZL15qbzx0TzlTc3xeME5VIW54OXBBTkIuQkBWbnwwV3hVWzh6I05tUEp3Iy46OE1PJGgxX2NrdGVyb2Nn'@;
put 'M0NXbipjR04+QFBrLDF9bU8zQi5CQCtSK3I4P2l5PzNfcmBVYkJFRGNAZ0RjP1JPKUdmNissKDtmOXNDd1hCJTZpd2k2ZEBYNVZ1WHxGWGFYeyZnU3Z6K1B4dDVsTmlZX1Y9WnVdQTVkWSlxMjsqaCxWWTwydjY/YUFtJGJwL1gpQC5HMXciLGgyaSowLG1lSilpZXQ+PnpOX2tYIlRtSCVJNDVK'@;
put 'dT98fSZ3ZVZtIm89ay9qZiRuNVhgViQ7PXdAaXlSR3ErI20sYXFvMSZZLyRobyRXOyRvJCVpN0xtOjhLej9fQitje1QxOXdeZTAqaXJxW0wrXmNEaVluPyxWZVpwbzVwWmU6XytnL3BoJlg5ajcxU1VDWzNhdyZfM141R3EwczpKUGw2enJndThHSFJlYCxzZyJ4YFN4LEIydC4uJGhDQlFnLj9w'@;
put 'QTxWbT5rREk2TCxIfTF6YXNdPlJMWn58ZTEyTXlsPGVCODRheDEoVX1lW2chZ05lMTVLaWtvLllmM0V4U3ozQ1J1I1glKUwlYnphek5nei49aGZFK0hIZXYmOXtFezQsOmdeeTQpTCU0TW9HckBxSSwsNTwsVDhXbnZNfl82L3dGViQmdkc4MWtRRGhOKTQ8Un5tTEF6Wk41eFJGfkFXdGVlTlh1'@;
put 'cShyRCosQjM0c0pbXldVLlFdOGQ2b2dRcWFmPnI5UklHVktWLEUuKGVWNTh9cEwje3hofSEiZXh1N2gsQDldaiU+QF41ajFERDV2OUdWNnRILyQyM15ZTlM9ZzBde3BVRjFtPHBYIUg6fD4zRmFXM0xOUyJSXjEqcSYlPyVsMlprdFY5ZXRvPzFISUdfRCFXaHZIL3JyNkJNaUlER0FeO1FHTTU7'@;
put 'UHcyWUdaelZUeE15QXc4JWlwSmVPUEw7ZXlxdlE4XyVPeW1vQ01dbWlROHo4OzksZlptclUpa20iRGhTanh2UmhYYDN+fHQuazVSYmw2eCk/P2s2cip7X0Q/U1Q6dyI1RUk/aVIvRTFyRy97P2BPZVtaJWw6Pyp+bEhCV3ZCTz1yaV1Ub3l5QT0+OCt7KDk9V1dWRj0sTmtiN05rX3dFK2NUdGRC'@;
put 'M0kvOm4+a1EyZW5+Tk4zaWJBMCRkeG9PYmIva2NpLmN2QzV8YmMqJGRnNVhiLEssdSN3dUcqdUB0b14mVXV3a29JO3B2SX41LkJLWUFZWyI3cjV0ZnlXRGp0XmMkRzxIOThHezs+S0FIcVRvLkp0Rytmbko9aV52NXdITTt1PE5iN2B9emh6YiQ2YDNHQVVWbStuQWFBbUdFak0hIzUsaiZgJV50'@;
put 'ZHQ+cD5CcjxQZD4rNW9vM2EyaV5gL358JmNJOSVPWWI7WWclb2wvUkk4a3l9JDo8UTs0Y08qTmI0JVliR2k3Wnc1Y3VXWm4zWkp4djFNOzJCVGBAZj9oQlIyaFZCUF5hNjNtZ01mLjR9OTxpRGo7MmFJPVRFc19LTypEfkdDQjZ5fkBFRCtFMnUkM2VjNGNjWDg6ZkFAPFVueUEwekp8VjBdNEhs'@;
put 'bCxpZzFKMDY2R240JTtDZjhUYUtpVCR6THJDRG01JHJDbCRjLjBHIjM/NDtaR1Qhbj1zbm1sZXJwMF5ie3hUUU06Lyl8IUlYOnl3Vnp4IWY2JDZudm57L0QsWFNrallqXUg/cFQoPHRvdWVVLEhGIVFJbUMzS2Y+LDVgLmJBVGo2OHVgZE4uSEBXVUlAVmA6OzJiYVU+c3VnInJUR2xZXy9TaSN4'@;
put 'Vzh8Sj9ZcktqK0U3XnxKLnxnaFVvJGZ1aERoaV5YTH1mKiQ6dE9rY0wlIURdRX5LYnA9bFY9NHgrKW5UamltLER2SD1vL302R3NoQSlyY0ZjMkBbYkpDL19GKUllOU8qbF5CPDN8JlA4dVhzUGQyc1olOEsmSSgudVt9dkEva2w4YFZLYFlMK1FKREFxaUpJRWo0NSRHcHFeJHVjWCE1YDE4JGRR'@;
put 'Q1s6d0osSHV3T2h0aX1iW0p+ZSI2bEomR3pNVnlaJj0kWyhYKUJUKURecUJLRzJPZVZnRlJjcDIhQjgzdVhiczl5fjVGLjN+YDlMdHF5MkhZRkA7V3xiL3RuXUM5PVBGdy5mOWE3IUAjcn1bOClqSzxJUypIVCF2Q3I1OFE8dCZSeXhLPyJHd1JNK1tsSkEjI0NQRndONW14dF4pLmA9O25eVEI7'@;
put 'S0sqY3BQLC9ddDA2SWZ+Ti88RTVJOHJXO3x9d21SO19Qbyk4JlQoXzIrM09gMml8eFJ+Tmp4bnc/TG89QUF8VjFpMTEzbD8/KUtXPUpPfmY0K3hmViZpYyU1PjNIU2hjYmFUd2dGXnJObGExfSpjSzI0Lng9KUdUcEhYbCZuR1FTaFIzXSY0QVBsOHBQakYhZXg5YzhtfVZNQEdUUCE7YWJVV1NB'@;
put 'P3osa3YlbWV4Ol00Z0kicjZybGxvIXhHb0c4eSgpK0UuUncmcikpKEMoTTQ0WkxsU3NlIk0sVFhZNit6eXx5MGRxRzIhd3YiYjQsKV87NldWNWBYe04uJFssTiRhc2I2NjhUL1ZAdnN6Nzx8OzN8VyFTYF5hRG19bS5vckkwPXZ3MEhuS1Ajc2Y/bzAuR1ZXKVZxPVtnWT4oRW9nQi9lUHksVVAp'@;
put 'aktuT1FHXz5IRD5vdF9lW1IxdTIpZzBPek1FTjY2O0A0OTwwdTI+aXpudl17TjA9Knx7N2IuTlshcWhGSXBqP2s4dTBZYT5ANXdJcHsmfCYsUiUqY1FgdW5ncSM1LGReZy85Mi5bZiMvZ2xRP3dNSSRWdCY2JG5kRDlKKUZgbVtXW0tibVomeG5nanFNKVZ0KmExRWdKOzsmLn14MlcyVjpyemxy'@;
put 'RUI2SmteaWpPLGtSSlkqRz0jbm5vVTw1eEpHMD4xdmxFZjA1a3thKlRhUUgwKyo9NUw8PmU6KSl2OXFUaig8fGtLfGFVNmAxSD19OlZyaDcjMDgvX0whaH0md3VLTyNKd0sufnRuL2p2P15xVkcie1Y1YCZgPzJWPjg4LmNwb0k3Qk1lSjdbQEhFNkxranJKUHc3dkp3eE9MX3VgT0RnJEk6SXBx'@;
put 'Pkl0ZDImfSJ2KH1SNzVRaEc7MDNkR3lwZWtvdjY/c3B2d2NweltTTVk1PlRWISFgSUhDKml8VHBKWTdISUxhKCpqTCRbeHY9VEZLWUVncSVzQU9laS8+LGx9P2pPW1BuMXc3LER9KlZwJnNbYkl1aDhJd21raG5CIjNFOEpoUTw/ZD99JDJYV0NFYzUwUUE8NittSFhZWS5OMCh5fjk1PGcmb0VZ'@;
put 'Kk51aCl8O3NZbUhTeHcyMnxEbU8kPWlDd1JSWCM6UmAzPyg0RHZtWHUsZC5fKS5UZV1bMSxWODkyczFeY1A9aV5CODNvW1g3czx3Yzh0JmJGcis1W1oqc3A2MUgrUkxybVNKJGtuUGkuImRROzhVK2NZTV5yPTdiamsqe3lENzdGdGREOGIqdyYyO010WGJATiJaMHdZSnZlIlZwSFRpJDYuWn16'@;
put 'JkVrSSNWWCl0QkI5NkBvNUFQITlmOUFlRzg4USx0N3UuTDt8YjtdV3kydig0M151NWlrdHJuOy9IRjZyMDZhbDpWUDZmbDBRRlBLR3xWUWc2K1UrTnc6fEtxfTR9PSxUeXw/cipjIlYldDY/bXIvQkJUdmE7Vj1LREdJOEw5ck5HITMydXliL2tIZlpCdEtMZHolMnAvVnFLeSEocVYlUkQiSj9f'@;
put 'RTMrOz87YTVwbFYsWGhsWmRyU2xLZjA/bkd5cDovRS5POFkiUG1UVVIxbWo/fm1QOWY9NSx8SkZMXStIeW1ueSYqOChQQS47Sjo0bnUvPHd1Wkt2TT97VWhwNiM5aCYkZCtjUVUudT9ZQ0g5bUw/fj58Zz1qallDPV1KSkpPMzZuZHpPWypWKSxUYG5OSkxlP2o3MWFkZSZ4YzZ4KVlIIV4/X19k'@;
put 'S2lUJEVbV0tWUSFwPW1IfFJ6TXhgbD0ldE9qYGtpYzFHSnZaVSkuPVk4cGNdVzo+LDVWXmJgTlF9RTsiN3JMOyFkbSQvSS9MaVAqJEglW08hdUM4bSJ5KCMpY1omVT9aPGM6NDR4Kyk3SENWUXhbfSN9JG9yR2U6TnI2RntdeH4uSWNeOFJRTTI2ZjpvJDp0N350dihUYXBrRjM5MV1SZlRSSV5+'@;
put 'OUhmfix3KF56XSVbdDdxNywlYmEzO0Ngb1RUUm8kMk5MMl8uM3hGVW9eQEwxckdrYSFdXk4scE0sVjp5bSp7Z0xtUD9lODcrTH1Yczl8VUghKz8+QE1lT0hGNihpaWpfcWlPSSJYTF52N3BdM0hMNGpOci44aXo4O1RvK18kOWhETX18OGhELERbKDk5PVA9a2VMXShkXlBTQkwrUz8+LiNkPWhS'@;
put 'ZX55cnpOXSwhIk1udlJ0dl5KX1hle18zMngiYkohUDl9S1siYjldWkdzJEJXZ05lPHw+IllRflF7MjA4JFNPJltMXk13bGdlKHVvdzFuLEl8YDo7bnM6KWdFSXYlfmNwRCJjZ0F6LzIrfVdLNTQmMTVWQ2FxYE58NkBOY3UxMWguQFM8JVpTKGdETDhEU203c30iLzpGLn53RHhNYlhrI3BvQj5w'@;
put 'LGtxcUlpQy9OQUVidkZePkwqN2tlZWpVOVshbmZLOnojTl5dPTRmSCtuR34kMlkyaGN0PnFOQnR2Py5oTDU/cD4oV1VZbyZ0dG93KGkkK0A+dzZ2eUp6NT18bDYvUHlyZWU7WSVTSkYkNEA/VUJOKG5gNk5bMzNSITBYKHxHQ1laYno1PWJKRjphaCVqRShiPygsPU9majVwVWhFQClWRV08aFN9'@;
put 'bUlpQmMhfXRecjAwPmc2elEkPkBpdVBWOFc4IWVjJVtUMTtrPiUrL1NkV2p0OFQ9WGFqLkVITEY4WH10OypFNio0anREPXswfDldaUdLfVhANzVjUkgoQiZqPyFmUnFdXzo7Ki5rPzc2eEFsZXgzWyxxKXkiMWpDbEsjd2hIUG13RThPX0Y7JX1Oe2IvdGAoJl9iJjxlYjB3PEhzNnJUTzIqJXB2'@;
put 'XWkmOyNxYG04KzF5fmo/ViVOQU91O3A7ZSRkM0xNTUchZHJkc1hoekx6XmNqVkB7WW95SmAjejI7QlhXdHxiOll1MjlMPiRXOHBEQjt5SEU8KERtSD9CT2czdyQvdEA5aTdVQTtlaHR4U3xKNHlMPnJ0dlpJQzxBTWc8fUlbUlh2RT9HKTUpd18lS00hWWpYYk9xZWpaJVgqXSxLZjVOTUUiMSVb'@;
put 'L1ZgSltWVmlXLF4zQH0iTG9LQ0hdOyJSe2hybGRlTGVIZmBZL157KTBMNjI9cGgsaj8kS1JmQV5FfF5CVStlM28pRzVxWz9QZ3NuKSxnK3I0RiZqP3ZJLzExdHN0WSQ2WGJlcG1RfktCIz9UQ0RoZiVEQl1TUHU6MCtlSFBsLFZwQG1zQlR7VlR6S0pUR0g4TStaNTpWdXA7T2NZfGNuT1ZmPGVW'@;
put 'RWw6Mjg0RXhJNk5tI04maGpKJkZuUVZpdE0pKkw/VGR7YWg4NX4udT5ucTkiVE9GKDlxfXQsJkZYJCEiPkczPUJVPWM1QE0uTVhwKG58WHExKz9EST1LZChoaXMidk91Mih8TkV6XXFOcmsvYX5qXkxlVkQpZypzekR1OTBxaXZwSnFhX2k7LyxLK1JmQF1KYClrOG8xbGlZaXpuNlVJOVBweUpp'@;
put 'Smw5fVUoZ0R7PW04ZlJKaTh6ZzRCMWYkVTtwYHljJWw4cDlfTDZZIV19JncxbGA7QD5fcV1CJDR0ZW1HMjwlYyUuaiYiIVM0LkhEUH4yP2gsVm9DSTNSNUY1UDgpRFh8SCUob2dHS2FoSVVGVDZNdTwpfWZiWUxOa1tpMEJoNCxRaXA5NGZxcHM0aGY8Um0yTmA0SkxiIUhGfDtOcy5SWE1JcDF+'@;
put 'fkpGRyFTMXFHXVQ+QHZCdzF9SUJLQHQ+dGFYbnAlcEE5KjZkViNkcUcrPmMlQEU2L2U5VFFmJG5jMi94UV95ciFoK1pCQ3VRXl5YM2BZOXRfTngoNXZuYFhpeV5gM0dgVyVLRGNVN3R4KmNtUiZQaS5yWSgrZXUlI1lbemFsPFZfV2dbWmVraUszd3UoKkxncXk2eU1yT2YuS34vVUNAQ2B4ej05'@;
put 'djxQMm1IMzk3SkxOZ19iY1QhJDt5WG51eSVmOTxDUV07OTE0MXlzezhXWztxRHVoNUN8fFVTLmRWd2AwT0V+aWomYzhvb1hefX0/amwkanprSzdjQndvb2x5bG9gfk0zakJoVzBuS3FBVVJSV2FgVENxPiFEbHZYW012a0F8bXtVNjhKLGMiVkg4TWZPdz04T3VycX44MHJyTCs9REcudnxEe2JW'@;
put 'OGpIVyohQD5wV0BOdHFWekhJQiVbUzlbRkR8cWBsPzFaTC4/eVFWU0U9cVhmZUZ3Ty9VVnIxakxnYWQqUXtFSUZZRjw6WSYsVCE2OldQMHIuaVRfSHd2d093PzZgQW86cUt5I2RbWzV0fVNwb3hleWBII3U8K2NaVnp2cixKZmJsQm1fakNlaF4/KUdpVkQkQkFkP2MmZDBsKzBvaXx4QlFdVz9k'@;
put 'R2QjdDs6SkA8NzBPJDxaSUUoeXNnXixjM1kjYHMwYmBYcUUuZzU5QzFlTnc0VkptLCVlaU9IPjd9LG1FO3spWyZDOEZaOSthRHkrQyRCXkV8ai5aRS9dWDFXcEJVYyhWdVdddDV0WHdORCRCaEslWE8qfGh9aHdaeEBQKCRFMl9OUkFhS19yYC9RdkBFS0BOYnN2JCUlXTV5VjYrbSVaViVpJSNA'@;
put 'TX1GZVJzbF9qKmJMWn5kXipidjFmJkpYZy84SEppSShQJXVfZDAyVFFfbkp3Im8rJXwqZkRGZUQ7MkhjcFp8bCxsXnwzL2RRU3xYa0VXQ0REeWQidVFSSz4/OEFFXklgLCkuTzsqaG5aVTVvMnt1NClQbVUwTkc4M3g1Q2F7djdzeHBeRDk4bCxLbz45VkhdNVdtVXwvS3V7V3g1TW5geTF2In5D'@;
put 'bF9wV2NzUSpyWHMhSSpRYElnSXRzfGxJJHUxN3EkMSR9ZExHWGZSOi9jSExMSHZPczdeZGM+Q0c/Kkg1Z0lCOEFNMjhyRyxJenxxPixjIlZuWUQ3WjEqUn1NNl1ZODZVNEI1b0x9dkpfe3FHO2I0Vz9yIixuRUA4UWhyUWJNTCsuXTxhWD5tN25EVX10P3MuXnVaamY1YlJqKihuaVksK0w1TWlS'@;
put 'PF5vZGcmQi5Hcz9GTS9oSWJBQyg0KEZ4KCJ5dzBnWURQaThXOHt2JEpsRCQyIUdqKlBncT5SOF8xb2V8RDlUWGxBcDtDZyZ3aUZPclNrSzFLb2gqLk9XMjdSP1hBZU00dmUxcVhIWSEzXV9UX2RmMC8kZSVfa1pWc1BYPT8qS2lzblBxfW0kVC4/anZmPyxBMSs0KjgiTS5WV011Ml4pcHNeRFFp'@;
put 'eXUhOzNxWWZEb0BWfEIhdllmZSFPPjhueDI4c1d4d0xaP1NKUWY8ST57VWhkSUc6d2dhYUhFRV15cFpRNlkmfFMrUCY0UTdfTWlWPSpmR0d4Mlh6XzdCO1VqVEA8IWo2SnhSXjNPe1s7YThMTndnSFd1JEw4WzJXfC9Rb1IyZXpYVz48LiR+fFtWc2ZJR1FnMjp9SjBOWGwkSnM+LyliW1UzNUJe'@;
put 'KGxSNUczcHM/KmprdkRUPDc5NUQ0M3Q7aWRQJDIrP2FicXovPHlTWWI5cVdoUik8QF9qIyw1KS9SOkdCa3piaUQ3SWp5WnhDbFtAcVJ+KFNlbT87fGA2ZDBdTzo5d20kKV0hMzIwX1NgbFBLaW18X1NIeGAmfWIxN2pLcVNYOW8rKURzSSp9OlYmKix3aGM/LHBAdSF4MmdebGxXSWtTTDFSTDM2'@;
put 'MDQ8N0RkXmNQbzU3SG9pY0NHeXN4Uk9yPitmT0d5LyVfRElKeHs5XSVaSml+diY4by9jPjMyWlZQPDFeVFVqfnhpUE5ZXmJhMSN2PUU7SVRNRF44dHIkbjhnMjlJaSpEWXZ2diQxYTFFOEpbMFpZTihecmBXMW1LeyYmJT5nOjNdVngyMiZ7LHMzbSR0JWoyTjo7WiFmcHpCVXwmKjZdbHFhRzUw'@;
put 'OW1we1NJRkxkSiElb2JUSnlMWWtsRTZCezVifFpaVixjWDJaVitjY1I2Sz5yKVE7YldwKW4sP2goNTV2LEQ+JlNGWjhmVj1jJkpZMmRvJWZTTikqQCV3QHFPUCIxWyFUNUVVWSpAPGcpQDwqKnAsJWQ3b25TIXdNNGFrTjNnWWl6SlVvb31PSXcxPCNoUCx3RElhN3YvTCl0Q01LJi8mZ1MvUmpX'@;
put 'am0yRjk3OzlYaH1dcDh0cjEpZiw9a1A8KUAmPz5PTXUpdTN4N3Z8Vi50THw9PyZyR2ZrcnRkL2k3NlA9JmoxWV1iakk7M2I6TGx8dlU7QD9rMi57clZNOS5TO0pBbjNDR0pxMT08OSpoMG83ODMqUkY7TE91cHIkdjIyaSM4Kjp8IS4mN3Iwbjp0Y1lUWVE2eGw5XW13SGUvJGo5XjwqOHUwUHJR'@;
put 'ayVVMDg+Z1V6eTd8W058NiV1SEo6NiVNbDhmMTJwM0UkbittOEJCU2xgM2V7Il5lZG91VFRPZmVQMUNGS3VgPmxIak43XngpfFZmRDhuajR3THUuRTYjdGl6azVreHg7SkJtOUh5T35lKVlKSnU6VTJ2K3cmYUhlSGhNbEBibGpISSouSnlnfXc+a0A7dykla1pRPFlic0RdJVApOWpDSEVIXVhR'@;
put 'bnZ4I0FLIVlVJUM7Q25JX0xXXjtvfV5vLkpNUj1HfXF+YiplQThMPzgvUnl2KUEzbUJCeUclVkVxclhoL3k8dEZ1LG0+ZUBGUHxkTXVKOVB8YjdCZUgiUFpSRHxndS5yYkBGdmIrYXd8MShuYDU+VToydUFGVjg5NzUodyQ9eWFWVjJKZm9fP2NGe3pfcn4+b1N3SEduMFpTRHw7MmhgYnIzSGY2'@;
put 'VVVqa29BIX1VeV14IWMrTnd8d21TMy86YSowTWVeKU9OaUt7P1F2M3RHJiF5TCpYXlNNRl53IUg4OzclfEFHNiU+bE5ZbzlZRDxsfjtRTjN7SDw1JllqVzt3ODglZDJ+ZEdgemkkSEw4RTg6QEtZd1JgLmMrSE9rI2VyZy9OXiRkMTt2OiRNdnpbVmxiTz5TNC9oZjY8SWIxU1lUbU5ZQk0zcGJ7'@;
put 'TE5VJjYlMHc7IVlPWmVFWG0mKStKP1t5Z2RSOy9HYllrQE5AV2hNVX5iQiV7UEZwYU4jMVV5bCovOVFoQXUsWUU7XmtLSHpsMShobWgwYnFGOX5eKDxVfms1V2khPyg8RlpNdUQ5czxDaFQ+R3N7PV0hOj04T1trM3lwZUwiTn0kL11GM0VAeDBZWFFETXNlc0tlS094WUcrZCZpVWUoPz1rey89'@;
put 'UFA+LFpTTS5ySmNTUDAuN1VzeD54QSZ3Kyo5KFYwbSEvXSVIPWQkRF1uKDc/JiEvW0hRKWJESSJyKHAvdU5zV3plL0ZrRUAoIz9rX284JChKbXhZJiRyZWNQfSx9fGRXenVMKndAano4NGxJTmQ/SGk0fSpnVmkwPmI6c2k2PmxpJGQvbiYxaDBTQ0VWek95PiViT0hkZHg1TU9aPC56NTt2TlYr'@;
put 'XS9oOGF3WkorKT0lRF1+RWNjZCw3cGtlTzw3YllqOW5zVWBeNFEkSmJgSGV7ZSI7dz9mTCh6SHNOOjBKYFZYbTY/Qzs/SXJ6RFZEZD5AWzlEWXg0QHRNfGgsfkBlSFhfY2dAUk1QP0R7JnlYbFRdY280Wmo/JEArbWllcyFqckZmTVVJdWZIfGlaUGhlaChAQmk+anw+Zi5kTSF+cEYjMFJ+d2Z+'@;
put 'UXY3XnE/XjFmLkZuOVpydFU8U3ZpPltFYU0yP31kJU06ZW47U3hgRGdhP1h9Mzw9bG1gT1FnQ085bXd3bDZ7XXcvMTFIOkt2KCxOdmJvTFA1Z2NDTEVCUmZuYmJQQGMqZFd0KjBXMGgqQUIqNTdYZkJPVVVxaUtpWVVjUXM5WHpCRlgwKGB4SkkmQyo1djd0Y3spJEFIVSJGRnQ0d343OVApIl1W'@;
put 'e0d+KG1MUDVmdiErNCttRXBwJk5AYztMekxDQ1JubEpRR2tIVTYuaHR1Qk1oXmpTWEtGT1lmKmc1ZCs6bGlDZDRSb25AYys6L0ZlWmZkYmVBPH5MSGFyKzdfLEd6QituTXQ0d2ZKMEs0b29PYkQsQiJ5RTZXQHFfd3c8RTJuSUJVSHIrLltwVnhYJEhQZCpkYk9YZSxESkc/aU9HKjV2N1pEeFdj'@;
put 'KTooe1J8TFA1QTghQ2JvcG5wNDNjNkYxY0FlWkIpTFJDXkhwdn5XY1lHZDBRWUByVVE/X1g3fn5mNDA2JkZkLDkkbWhtfUUld3A8TXlBNXdQck9UVEFQQCFPKCZhQjFqIWN5Wkdra2NjbUhIQS9KYGlMJEVAT2Q6QTo3dntpekllZ2IzTC9KNTdFd15gTzBeRj9Ccm5Qdnt1WjQ4RjFjZFhfMDJS'@;
put 'L0ZHQ19oOUZJem80JTxWUntDS01UaiJDfH1FNnN1e1FgWE8wdTB5V1NPdXhlT2FTfExqR2dtNmFjdjQoXU5ZKUZHc3dRVyNmdEI1MjomQ1BVd31PX3l7RywmQVlTSik6MlkiZFhHUUFEdFhMOkNlR29PMy8mXy9reDdSd3lRJXFYbTlTInlFNmoqTWhrU0l1O2FfWCtNanpTS0V1eChOJnFGdFo5'@;
put 'WEZCSUNiP3ooKUhJQlVIQHZEKSNbR0IpdSU0X3Y6JmdZb1lVXy5ERjhQVl5zSThFXSwsZjwwZUJIUj84fTJfYnZWZmNJNEMuQyhBeDZvSGhvfTtRISxuYUt0YTchNlg9XSE4dlMpaCh2NDp8ZiRHVT1+fGB9M3FkXTs0Kik2SlVSKXxCQjY0OD9+V3paXzR4ZE88a0lXeF1xTjpDM1tjd0MxY2Qw'@;
put 'YFA2NndiWWJBL1djTmZzYSlWNF49TzdNPl5xI10mbUNqfG95R0omKls8fElme11mSGsjL3FYYkQ+JTR2X2NKaVBSVHMxdV1+bEZpfFpOQC9FVyJZJXM7PVpEWkAsdTtmMTt0dWA4UXNVK2o4c2F7ZnAlUnkhYn1udCRyOHwlZSZsb3pte19oOHYqeWk+OVRgcj4lSEpjP2xPXkxrcjkxZkpXKHBI'@;
put 'b3c/RzlrNWNdcDhse2A7aUxJcEZtOXhGSVRaIzkjY2deYltHczN3KkVwbyYkbEsvYlc8KltvWV5pWHtzQ3N1IiVgKDxaRlJ3SU44bn0jfUpYUHJnTCZIM280Z15Nd0liS3c8OTI9U3dtYixPM1VMTCtsLjR6MEM1cjJYMTRZezpaRyExO1E/W0NHI1BtPV1RWzBvOWgpbjpmX3lZJHt5Lj99YzdS'@;
put 'Ly5JKTB9SEs7RG9QfTl1cytpMEt+QCVuI1lbP01wViUrLCtES0I9MXB5YnoqJk0hSWRSbj18KHxyWmdaSWI7Rjk6fDMxLiVIdUY9eWpaZ1BNTihoSyJ1cz9XQ3s6ZD1PXihdODQxLGVnRWZxT3lQRDZLJjtPKHVpbXl8bVg2W0s6Qm4vNEleMy9kIyN2dDByeDJtRiRgZHVIJCg8byhNbTw1WVlH'@;
put 'SDw+UWNfW2tmSWJqRnM2X1YkRyZYe0k0YjczNS5KS081P1pkNVQxVFV5Y3ZpW0ZnaUU8JEA5Qm08aVNPMVVgVUckSCV8NjpEK3FHcmBwJFExJVBRdCVze1dPRCRFYGlmKUBuPj9GQ3h9bUs/JjNXKUV5LGMmdUByUls7ek4vJChtKzR0aXxDOigyT2BxeyNkUVE8V3RWVGpjVz84USJyTHJkRWdR'@;
put 'S2U2Y3EmUzBYUC5SJkgySCxROztidllua0JIJDZXV3lnVjwubyQ3anxWMzlDX0JFVzkmJkkkbmZHO1dXbFMwJDpeY04/ZyY/Ji84cCRbVkkuez9QYmxdQFZLfUtAXkIoX3s/Slc2RDQ7ZVM+VHs6JDRNTToiJUJwfCImVTIyand0UVhhcj9NOHxVO14oa1tMZWp+fDFpVWksWj9Ue2J2SWdkJDVg'@;
put 'KmxtOnBDNnBgZ24qZkU1WChmQnsmZFQoVXByVzg8YTQkUzJKJERHbWMza1ZKbyF+XlcxXToyaWZpP3xoKncoSW41UnpPUD11bU5xeFtOWypWRGhiTiEkWSFzNW83KFt2Q0ZTZGlSIyhdYnZmLmkpY15AJCVCbUpjZFAsbitDXkw5JTslajtrK1pOeihuMjAkdSNdL2srU3M/YnJFalc2Xih4fFpw'@;
put 'WmJWeXE1JGQ1TixgQW1kdl4hPXRNKUEyfURhYj5fLkpdeyNGP3J5djZsRjkpMC42R1JHY1FKViw7OmJ2P2Z0MVJrLEFNfH1OX1UoWFp+MXczLG9hNT5oVV8zUjNILEgwUz9gR3VzZV55ZiJ6SjZ+KSNRdjFddDQzN3ZfWUZpIWZlQ35UZWYpWXg0KjgjUX5OInZJVEdsL1tFYzJJZnZuYExAJHgi'@;
put 'VkQyMWhHQytWeyxkTz9UI1FFVEdgPkhUKnJeMX0xdjdLVzVkeSFzTnIueXMmcEwrR30lPmBuQkQyPFEiQ0JFZjtJay83UFdJLixIaE1jZCt8QXUwN1IuaXVGfHkyOSZ1W3ghMi88OT5rXSlDUzFUdlE8VmY6TG5JZjx4M3JEbWtdajF1R1pWL2c2aF9BY1dMKXNPZ1Q2NlJMPmQoPz13Pm4zS2hx'@;
put 'SiYpfXtIWVZ5YXhpVTt2WXl4KUoxMF51M1Byby91ISEjek1qe0wjPFZBeDxWQVZuYWpiPEt+cDFsPjVeTlNbU34/UFIhMVg2QDtkTXVVNyopXSVKUUh+IXk7VVRxRWYqPyxiXyEsW0B8PWRKWz96XWBXaCNeRDVdd2NFS1AsKGUlUXQxYkFsUzV5biNiU1VDJEJbIThCJEpHR1FCOHYhXzJQYCZZ'@;
put 'YmgwOjZiaTtpQCtRQiFKYTxwQFBCKDJDJSpLK3JeTG5hUCtKPiEvQlMoQkA2aF13e2FTWSx6MiR3dD9wZkJwOSpgKH0rX3R4QHdlKmNbKi4odFBUflM1RHx0OFNPQylLVzJNUG0pYVBhKmZMckZkLkRSZkQmdFBLQiVsaDwpZCxQbFFlSHpDNEFPRG9vWXZYL3goQDAhJWJRIyZIazclaU9mO0Em'@;
put 'MzM8KSJTK08/IXImOm4lXj1zWWAsQkQkaXg4dWw9PStxYTgvZXlzP0BASFJvM0ZGMixURlRwbkVjaiI3TE5VXUQ0KXxxJUhdJmE2KWIvXyNgPVJSazJ5UilRVj1ycT0sKUopRXVpWTp6YHxba3NgMEoqQlBNJmoiPXtoTVkwVGVJLG07aDUkSnZdWDtQZWBoY05DPCI7YShbMXRpakF9bSZwK3cx'@;
put 'eCtXZzJOSTxvPGAqWGheclVaOEJ8Tk8raztXdjAvXz9TYWZ8VSNwV3lpNTpgQnZmPUUuOXpUeWA9eTdRb1lHdjFIZH12VEdRbDc1Z1E2ODNSMDZjcmxSeVlwdi5XbGU0XThwOnQrU31zXltVaCQ5OXpxPDB0MFN9czpVNmp+OzxrSy83T082fClFRHMvVH1RWjFkQzFRJj1JdlltTUg7SyRdY280'@;
put 'PHRQWWo9OClTblZiPWM9P1o+PiU6alYofGdLXz5zODAsaHU4dzl7fFtjXWtTMXJHc0ZWaCtGdFNkRkpgVlUjKmM1Q0tkTX5SfEFTQjE+NCxjJmpCPEMoeiVOYis9TTxWX3xRUWE/IVlEdkUzNzgqeThIbUlUUXF1cEcrfFJnYmoscyI2aj5PUnRyaCZVYSl5a1VXWGF8OXN3KjVbe2hqS0FPP3g3'@;
put 'U11GJkwxa3N1OSg9T1EiKWxCMXA8dn57Sk9jcXFbQ3JocEx0dWxBU0JKWEBWfDdINEUkdkJCWF5kWUg3dF05V1g9LDhqclJDSEY+WU9aI3JNblprMyEhfmk2W3hsJlQ1Llg3MWJYO1s3WCxVbVQ6L20kazdYMmE0JngkRmdZNk0qeCx0TDZWVmhVSilVJTVIRGFfdHZnU2FPVmYlKEN1eXsoOnBu'@;
put 'UTIqXyNkcUc+KGNhPHJ6WDhAJV8leWc+ViVJX1JHMjF4bGU8P3I2diJgaXlSSj1jbzZxYFg2QlI1dzt6bGw4bTU1Py9xLGMhOjVMRHJoe0w9TWw2cXhhVSQ0InklW05KYUMkd0FfTCRNaltAd1B4JVpsS0g4YFJnNT5jOWc0SUV7bD9lYEA5SzVdTkk5LE5SVX45QFg9ZV8ibywpMH1NUyVeQjsz'@;
put 'ZEtHbVdQPz9OT14scXsoMywoY1JuIzk9LChLZEd2Q3UwTn5DSnM8Tz0lbFopM1leZ0FhIjFZIzRTaktucXl7I2tKWl1OYS9pZX09NmwhZHEhKkVARXNiLHtqKnJbPCNqcks4K3tTZSxlLzAmOn5oeGcqaDwhSFtOYShme1phLE9oaDhzQDVkQWRTYiZOOkd5LHRDbWY+LHA4QmlZQihhezQhV0Nt'@;
put 'REA9LF5yZHZYQnIxb1l3SSlMbD9STGkyUFV8R0ZsUGZEeElGXjFvTyptREZYNSMrIkk5fCpQZUxkKCVTM1VYQD9UWGIpY3pJbnQ0NGgvPGA3UT1NdGQvOGY4dElpQyhCfE0zJm4vRDNPT2Q7MnFeTjdpTm9MNnNZNmU4QnFqelNXZDRAZippamJlUE5kO3I1a1spXnxUQSksUlg9QEoxXlJRNyQ5'@;
put 'OCIwMnc7dXtpZzFnZmJ2UF5UWjpHYTxnKGwyJiQxS31uP2hFUiJ2KTZyP2JQb3RRWG9uO1VtTSkoSj90Y28wW2JKfnJhZkhyM0JVQDk4KCVfO3xPWG4kTj5xNyNeTlp+az8pQW1bQCI0I1poeWcwcik/dilOcis7IjJsYGkpTUFsK2xUN0I2bkQiNiJIPHd+T0NsfjcoZVFZfEphKmgpeDs/ent9'@;
put 'VGg4bUR6PXR+WiN1MVAiO3IsMl5aVXI3OmshIXk2WjdxMHRsOkBEYi52SUZkSEM0SWJhKl4iczJGdTA0ai4iMT1NVFdeQnE1Zi5pelIoT2VFdyp1JXcmajp5dXFEYlJIT3t6PEUuLlcsNX11ZkhwSDVINktqOT9ENjB6VE8zIlY9dWIvIlY1cCxQcHM0RTQ6ai81bGgkJFQ1WzdyYlYmbnVfIVJD'@;
put 'RSkvfjBFciQ4fWxRSUNieG5JKm4vdSUhe3whNnJIW3hpKEtFUWVPdGRAUGFVaylQLnNGKnUjd2tINzN4N3F0KDdhWTVXP2RbInxXN1pPLk0uL3ApekRUSSM+VVMxUj5qciEpeHhxe2JVJGJTQHtbbiFkenwyaCljKUVNekNMWVZhQ217USRGN2RqUyp1azEpKmhMOUdbbWUyNWJJWVdLV0QiWSxV'@;
put 'fUw4UWRZdi9YMUx2LkNET1VVJk5+MS5kTE51RVhOKnxGeXlRIjNnZlRONTdlIUE7U2RQWUU8dV0yNyV0XzczbCNVfXcmTV5vKDdYaFRsfXciKUltaEgwYldIWE4rMDtvQVNSPEJpOEUvOEx2RWZIKyYvfTxSdSpxUUo0R09Gb0d9RVg9TjVYUmdbKkxLRWN6On5PQ3RTM18ufGdANzgkKmsmQ2lW'@;
put 'di88eVE5c2VlRSl4cC86OzVCdl9eJk06bXZ9UiRCbjF5ZmI4bWpibGlwRTIjWjwvbTIlPFFzWXd3Z1Y5enhEbyhuWFlMI0x4cUFVc3NuYH0/Rn5dbEFVKWdJT0FAPnNpMTVbNmhydHMycGcrc11rcSwiZz1Eb307X2YvJU1YIUd5ajdEWHg3alZAVi54I3dzaVA2fU90TE15YXdZdnRUO2QqRj8u'@;
put 'bSU9ND9NdERdQD5YfFZHOENbPDlddDo0dz9MViY8PUBFVSNkIXlQPDtHfVBRZiFtKXxidkBMLE5yYl8uO3BuMkguJWAjMV8vTWd7JmU9QWB5YEsoMkJhZjojb29lUytjOXIyOGxYPVtOZ2QuYmJ+UyxkKWlnQkguQCx4eVUzZSNARytrWUh9RVpTS2UmVyRfIVgwVmApfkkzX2JnYGdnMFVXKHBJ'@;
put 'Myx8OyNOJkhbZm9nK0ZLVyh9RzczTjNLUGhMRGtxc1lIZEZlW0o6NXJvdSlpRG1XPjQ6eFRmUGwqanwmKnx6alJLWyFmclMwJFVkWiQoUCRqLjBHWyQqQ2VHNXU0cFlsNmlTOSM5KjxJSW1Mb0YpXWsyWFk8PTdAKGNeez5mOGcpUmlvLCVqK3A+NmxIOktAKTVDLFN7OWF8P01eUDVbUmJ5YHBR'@;
put 'PnJRUlslPiFmc1ZIfiFacG4rbSNOXUg9Q14mfTkuZnZEYEIlWFZNaGgyRntuL1dTN0V7Vl16dCVtbE02UVspZyV5SU5dWz1aY1I7KlV7Ii9qXSQqbi9nMkkuREBbWmcyTXltL3h6TltZJW1sa1M8eFMwRCM5N1lVfFBGLFs5ZmQ1U3FlbS9+fGVkZTteQ08lYzUrblh3ZnhIRj0za0g1IU0rY3d3'@;
put 'U25dOjpnSyNgJXA0czdHYDolanZ0eDUvYXg+ZndHekNteVlJSjV9JWN6R2xEZmAyTy8mNzskSEhiSVUxeFltNj45RXN0YVV9LjdLUXRuOjAxO1FXdWZxOGp0SkQ+JW4oVyhFUnU2Nj5SL3g5anUxZmpAdzRJNXhZRWtibiVwLEVEN3dQVmsvZ1JqYFJFK1Y5ZnkkbHxBUmNJOWs/TDtCLEpeRlY8'@;
put 'UDJkWVplVyEuazAhN1NXN1YhZjtpK3FlU1dBeEV5fXEvUnZ9ZWYoTVtxUEslI1h9L0UscTVjOjtCaUtLWTQxd187VUZbUCIwZXhHQDB7a1dAZzwyL2M7OnJheGhhVzpLfGFRJSRxX153Qzw9VlJkQzJQbGwzd01wSmxvWERpUnIraUF1cFhtU3U/d2FhUE5FQFpvSlA1JUVIejcvPlllJlVkW25o'@;
put 'QyQ4c1B7WUxnP2NMZG9KRDpBUFA5WGNYWlg7OT9wWWQ2Qzs5P1AwMzluT3tWP2NvMnU8ISp7WSpNfTh4YHZLJmNoVy57KExRQXJveSpAKnZvWFMzJFN1THFEUEIreiMwdVd+YDo6UV9vRyVlaHlpVCRjNFtISzs0L08iRzkoTXByZ0pTU20kaEtdTFNbOiY5I2p4OENJOmVheVdWZ2BnMG1HdmFh'@;
put 'PT1wXl9nUyZ2NSFPZ1lwZUsxKSo2SnZDaypRVDxxQn0mUSIzNGw3bnx9UzdjOXV+XUNlSDB4LkNFPG1xPyhmKkFkM0dHdlAqKDhxWGVnJEhKVz1QVlU0R3U7TE4objAmb05rSFkjY1lPOnteZjguIV9HaWV1VG1wPlVAajlGcGN7VCpELiFgPSlJfn05NWNQLzJ+N1oyKG5wQihOZj0vRmZlbis/'@;
put 'OCMpcm9QNnZ9Rnwkbzc4RktaYUJeJk5QPG0zKGNpdCovYClUJnFVI2ZRU2ltcStMN20zajswVTNVJl9zaXN0NCFFVTgoNkdbdUs+dyUrLzFpbDEjW0k/fCVEdnEwWDpMbDlFcFkyP2cqTll6bEFlMnVxeHpZW3VNOWFENktXMVFWe1FnPF8zW0Z1dCROJi9fKFc1LkEqKS5jPGVoejNdUUQre2py'@;
put 'Rm1QJCRZSks4XTZAS0lffUh4QiF3TyVVfWEhcjdGdXc1RzB6dUpgb2NRVTE0QkJAdGZodUhNWFNHaCV5ODBFRSliNkt1W2wlOz9qJUcyP1B2Tm0oOUpvciNITCV9bTdoPG10MW1IPSlNMDFhM0NQOH5RNSxPKk5kdm9kS15OYEB4QktqPz0hWk5oZ1tQeFM+ZVo9Jj15USZHeWthWSYlTHpxS0ZY'@;
put 'e3J0OUVgMGwjUXM0LFk1am1NemU+JVN4Snw6QDdqbFNJaTlXOCt3ai94eipbOGQsYkpgempSOCVfIjQ2ITMvXWdkZjh5ZGV4YyhtbjBXYWw1ZmZATTg0Q1RLaHVTPixhaV56P3ZLNzxWW0BTNipuTHE0UWkvZ0UwbypKdTJscFRwTD9qQGEoS3k+d0RGM3szNEhKciU/VGVmdDk9UHhzcGxOeFQ1'@;
put 'bEpUUj1HbVlbdXRoX0EzYGZpZUczV0lpOHAuUV1OeXFnSztKakdeTHB6Q2VnSj1QPWs/JUdNISNiZGRvLD1UOkQrJHdLNUVmS2JjNzE/YUJrOXp2cWFRYlRyakc3dmRHNzM+MGxMdk4sLH4pITFzRm1dXjlIMmk+UzxWKjZ4VUw7WVImUCRRYEF2SmA2S2ApQlkiU2NSTWIpJGlxZEdoa05uVmcl'@;
put 'YT82KzN+VXtUKGc7SDNRbD5+cmBrTFMvamk8ODRoMWZ4YUo5Lnp5d3EuLHFsIUxtMX1gQiZYIzopdlI9T3MiMS5sXVdLcCk+aWIwfDtdRTEjbzVAckMyPDoxQnRNak0mWjg3SUAkb3U2VXsrKUBAUnlnR1pWeiYwWUk0O0F8RzRoMUc4N3x6WDFYfVV0XzQ6OVt9MHlKYHROYU1iNjJAMSx+NXxv'@;
put 'OygwLH41WDUjK35MQm8vKC9CaXxrU2ZmWj0ja3w+ZUlXTUFHTXZaRzV+LmI8JWhwW0A9ImBAKGdZamdofXdPTXYvaXlpMV8pU059UlYxJVBzKntgSmVtVWQ2WCMxNTB4c21IOE09MG1ESTFtWjEoWUMsVTNtWjtVKVklKzRnIlNqPD8pLE5Eb3Z6UUkiWUtVSHpfKT9HNDdZRGppYmReR0ErOz1Q'@;
put 'JWI2ZFltcUpLTGh9QGxiTFZYV1ZweXtlbEIvW1JXVTprfFtedjVsPl9JNDchWik3ODV6PXlJanB2TkVtaXd5YmRpd1daVXhfLDRRQE1rYzhXOFA4ZH1YInJ0P21HbU5+WFJ6dS98LHJvLkl2ZSwsPFlqMElqa2VUZGJScWk9RFM4NGxzJD09WFo2T1soO0BJJTJTSCIlZi5HIlllM0o4QF5VVSRs'@;
put 'dV8lcVhWQnl+TSE/aHlaPG9MZjJMVkd5QitOXkdNNDZRV1IrWTwpQjtiR3lwb3tbeGxuNWRIWloiLF09VjM8UDEsM1lyYWx0P3I8V1BgcnBlZiEvY2g6fSJEYSVOQ2dsIlEiLEJAbUgsdTM2bW9MS2dsbjUlMSVLRnZ+dk1IM1k7azxJdy9uInsrZ0szZGZMZjlXdl0wUThEd1FiU2htN1I3ImZX'@;
put 'VVtkLF14I0VDMG9MfldCWjt2bEw8QGtJRW9ZPlhPPDhnbm9leltFJnVeblY3U2RFJlNuXTNkSkYmfHosRnVDM3xqWHlxVixhTVlSP2djR1F4THRsOHxkcU9CbFlYU1tPNypyXTk/cWo1c1tZUm0qZEUuRDl7PSE/VUghKSU8TzdjKFM0Z146RHU7MUs1QSpHL116aEFPL1U6ejI2Y19vM0I2YDt8'@;
put 'ckRtd2BlUGU0dTQ/bDxNbHFSWS5pKkZ3TUluW0FqSn5xYC9FY2xjUUs6MCxVQGNOMCtRaU9+YU17ZiFRWzpeMyhWSil8ZHdkRjZbbCV9MCFDdy5OaSl9Okt8RXtBLDFsXzNmdk0hWy5+MnNSensrYWUlak92UF9TL1MhdUFGW0ElRFhYWClGLnY9bG9fezVYU21vO1h2Ni9kTlopIzw+YkFKRTZE'@;
put 'MnxlPHdyNWh7RGJeKHJ+aUp2USJeM3Y6Nj45QEM3aGNQTUwqLlNlai44eypqTCRbeDlqRWIzbU1vQHFCW0xqWWY+U3pBTWIrfFB2Q2xCbDEiJGY4bTYpdFN5eDk/P2BFUzIzJGNuIVVhb1pReDBYMD41e0twMTFzJmRtXTo+SU92Z09vQ11NNTl8KVpNUWtNaXsuQ087fUNTeyJsY3JpeEpmaiRF'@;
put 'PmlPdDtmJSpuL2pgY2xvay97T0MiV2tvWTVDKkEwRl5sRXt2W14xPF9WZmF7dkc5Y1BybWl4bzs/Kk8hTXU4M3hrcUBIZnx6WnZPVmFkW1ErK1olRXVoL19BNmshaSJHVHA0Z0hYI2tMOnFFTDohajwwbW86I0MjcStSVERhaWNOX2FHK1guWT1bbSo0NlFvUSEqM31XOiNxQzkpIWsvW0tKfXVG'@;
put 'KXBnS11xVUNFKS9XUEVFcX4zMWBsOSlgb1swcnpCPVIraUp9WTQrYlJSS11YO252KGxSUWB+KWU3Xiw6WHshZG53dThlZ2RvMk9SdVZVM3lpIkcjVnx4eXciNX0+eXopSU5bNSVQY0JtUiFWRDk3LDVUbm4rNyw/aHx0W1JwUmZLPkBJR0BoJT9DUDVYc2BUMjoxVTssRVEjIzReZ3kkZSpiWmIw'@;
put 'Ni9VMU48Ni92JmYxO3lmJCVqYG96R1Z9KWtdRlk/MGhrfDpPUWVdYGcjPH5zbV0jKk5+WDd3TU1fdmBzO3JQMCRkJUIjQlglNlcoL1VgUGQsaDF5NGtWS35dViVAaSF5SSgsXXU5LFJWOH45UH1ZRDckNSZoe1MjeyxJITpBVH5oLC4od2hxOXp3KlMvPkp9UHNCUGI7UjFwcDEoUGNzKW08fkBU'@;
put 'NS9GI1suR0RaJFdXRWo1ZGlZKH0vSjVjQF14OHVAQHdpKnRSXiReJXdmTU1oJWlxcyx2Nk8jKkwsWSlVcHd8eGk4YC85S017ZFNaTVNkeVdrO2l7dTVyfFd7IWFecSE9YEwucEBAL0xtQnosX1FZdXVKTVU6TjxRS1V8c2BNRER6Mk1odEVQWUVkZyhSfClrSXF1O0p6YHJ3PEZlX2dkfF5zJHZJ'@;
put 'aUxgfCVfeXdUdHNPZF0/KDBlYzU+Om5pIkYrLlpHPjNIUXs1X3lvdTUlOG16MSNiPWAmamNQV3QmW3ZofD9JZm1sYyE3L14wdTFyJVgoYDZ8YjFnS1NtaUNYNmY+WiNGaWRHWHkzX3RRKS51SXRZKUR+XTp6fkhOeDEuTyI0JUd+eHdQX0E7JFB9PkhTMD92OV1BZjJSblIoQ0JUISUlM141fX1G'@;
put 'NzI5N1csMTQ6LEtEdUEpQCJeTCsqMXBIPlgoaGV2TUttZnBCSEJITUc7SWNZLyZiZjVoNlE+VitkSmhMbmUvbFFwbTNpRVNZYi46JElkbldONltHanpYP2MoZ0p6aXZzcj9gT0VKOEpqWS9+fGtyayhwdCg3aCpGamgvYmY3QkBkSnpqdjxwciZYWDglRSQvd3JgVmciVzVyeDdqI2NJdyUvajFe'@;
put 'PXlZY1Vxfm50JkZ2SmA0TUV5aFhYZnxZRVhYZm4hMk0lclpEMXI9YFNFM115Z3AsZHZKOGlZfUAzJGZVeHovMDIrcjVGKmR4aCl8MXA8K2EsPHNzVk0hWyk7OGpVb2ZqXkRnNU8iZm1bck81Z1NsKm9taHxLdWEva1tJYjJ2aVcoRWssN1AsQ0VOOVtTUEVFNFBWclIpYyRbQkFtOjExel9uTUUo'@;
put 'JlFiQmtFSXgpWlhBYUJOInU3SFswaSEzMWcrJnIqRjA4KzcxLExgJDU1Kk9zLnNkcHhdJCFGQFl6Y2tYKG8mdT43YEw6anRKJmJqTT9reyV5JlE9O3JaeUJdRVhqX1tqaiMpWmEvTGpENTRjen11K0NEZEVOQyQ/cX5NYjBAPDFRRzxnUjh3WjMhLk9CX2AwYS9MX2NLWihtVCoyT2F3X2dTZ09N'@;
put 'RXw/RzxOOlUxUzgxfDRnNW1MLHZ8REBkfjBtJDB7eF9vcnVpIjhudG4lPDgkTFBXTXY2c3NSTks3K2B5NkYrJHJpdElhQzsrdGBJLFkvTWxNX1dkYX5iY0Z1aC80NV41I3I0XWhxT04hdUA7ITlmPzR8cVoqVGglYmpYPklCIkd9UWtoQkpYNU1SfGBadlgvWVprcyVkMnVPbVJGQHVOaSpTLG9M'@;
put 'Q3E0OkJKRW4sRHBZLCRNNWMwZCZOO0w6aypKdE4/MU1EaTJDLiJRREhIa3RJeUNDJXtydSl7YHwhPzdsI10mRz9CclVjJT89RVtJVHVdVitpbiljfEtPZy5zb3VfTDYsRENtUS45P0kseSVdUHwmUEhrNkZSOCMrcVkySTFBaXFwWUR+ay9YUmJybE07XXQ+W30pbzdQNFEuSmJJJjp8WGxKN3ta'@;
put 'aGI9azUvPjZIa3JoO1VlVSFNNUJya2xlfVg2PFRZazJIe3gvUDl0IyVae2dBYU9zZTM3elU4R1BYOW4rRnZqPz5NcGU4P11QMipJYlpELj9fTSxeeFVuJik0fXFgTTkjSV9KIXRfe1AxeD59MH1LbVBEMFkzRzV8Yzk4N29qK0xvIzIhd0d9KGZMbEgwOCZpKmZKJGt7TGdCTEB5NUkiayhLP3sw'@;
put 'RmtXaXtESU5LYntZZiFGOTl6X29PLEAkSnU6VHR+WmxzbisrTXlxJCFUJWJMUmFMWzk0TltYRDczdz5UfEh8Lyw4VHwvKW57d2N9Qk0/O3szYDA3QjFTIUg9cExFYkAkNiZyTXkoOH1ldXVKIV5OZyUwITcucV5wZERgPHFeTCkxaTVeYChwMzcrfSNXWmZoJXh8Wko9ZUhJOz5OWndEYl0iZU9X'@;
put 'VkRvSWhjS3ZzXVhiQm9CdDxDZjBNMWtIQlREKyZYZjx7S1ZNZjA9XWUhMUJDTkErb29RVncuLlI7KS5YNFcoN19yLzYiKilVPjNGM1RfMDllQW91TXtNRjtKclA3JXtyRipJdXhGamZ2RkBxZCVLRUEkS3B1aUsxISIpX18ofXgqLGdhPmEmXz42bXAsYSVuJW5PaTV2ZXJBRTslfF5DJjIzfHl0'@;
put 'MTh0Tjh5RDdTL1h8aDl2Q1B2Mm5ZLCwrPmw/YDRILC9PO0wpc3ozWFk/PF1CKGdxNiJNQi52Njg9S1UuXStma2dkTVskLiYwVURaZUBscH5OYC5XQl8zN1Y2MzlTcDFyP2hiXko0UVFpNyVncU4vci53cDtQKyomOzdAaU9OeFV7JDc7IVk1XiFUfURxXTQmLnZnSVh4MzJGPzk+KH10KnxiWV5Y'@;
put 'azZncT8kdEYzVXlrJVRyJnhzZ1ExSkY5I3RWOGRYL2V3RjtkekRwTGY/alJyb0dbbz9vOSlfZH0wczNjLDttTDpoSUVAckxfSklQYTUoSkZKQy8saFJZRnJeNF12XTozYmN2MzxXfitUO35rMTl+VzxpJTVoW3EhQ2VeNEdOJS5UQD1xd2claTo6Sy4+Nz9qSy8/OWI6RmBoI0FLbUVLWGI4dWdV'@;
put 'L3ZoMjZUaS5ZTm9dNFBoLkF+cV1CZHRrcCxPN212YjU6LlopOHtnLHR8Zk1QbDVlTX0xImI5JFIhdFVSO00jcjIlZV04fEBaJVZsYWskS1AuTS5HXUMyW1RVT1tKM180UTh3O1ghPGtpbyRbeWBXS1lEZn1MTlVFYj1kai4kX2ZHSTB4Vi95THJudDZiZGlzeWBXbzx4Z3ApaHEzS0pVfHVTXWpd'@;
put 'KERlNDh3ZH1vJFVYYnJuIyguMH1yL3xKJVBqfTNDKHlISmkrfik0I2J9ek58bXkvKyhFU2BmTE5LPjolO2UodHxCcz8iNEI8YSw5cEd0T2dxQihlViNid284YXJzeH05VjEofHFmWEMkaSluTFBvOlAsLEJ3clQlcTJTXVNNaGxoTTJpbz8yVjglSmxTUkVpSG4kSHJ8bFEzP14jUWlWWmdSQkB3'@;
put 'R3tLPVBBb0s5LGVsbEJ5fnEjR1YobTBHUkJAVEY8bEJ5bUhxYF1uQV4+WzlPOlVBVXZHLEM/SGNRSHVMQ3swQ1Nwb3hJfldDPml1M2pudSgsbzNwX0FeNCM9KS5gPGtzWSp1ZW1tJTJ7SmlhWEF1KV8yTE8+W0BIO1hXfUhMe3RdWXQlLmN1Zl5fOmg2ck9Ye0Fld1M7U1toUDlhaSRMRmQjYCJ5'@;
put 'XjRvXnBbYmBKMHlLfTYvRCpuWl1iYDpofHl0d0N3bzkqTG5YfGl5MWxRUissXkB6bEVZZWF3amxyQGxDWiFSKmREPnQuRChCUDw+dHpdZGgrWioke2Nac1pFSzt0VUlHeDJBfSRrU1ZgcClzSUB5dTFTbz01JFl1OXVGKFIyMkVbYFgwIW8sLiZgUEtvZVQpQV10Ui5HfTVqJCxgKGBle0VtTXlZ'@;
put 'JUhaWF5nOkRgdzZReXZ9bzs1b0d5I0VTOGY4UG17RS9qOWk+Z2BdLDVgJGY8VWUrYWsvejt6WU15dk1YYiNjUmNLK2VycXgzW2UxNiJkfT4yK3s/UHVwR2Jtd1t+XjNIOXA+QFs7SDE5Ml08NFdNQENiR1RnaThpKy9WZlhmaSN5RjVVNXM8V2whcDUkMztoZDY6SGxqSmtYK3Z9XmRga05CLFUo'@;
put 'XzNXUyJnfV1SNTZ4Zk5Oc15lc0wkLmgsJE94Rzk5LDF1VWx1PyVgRi81WD4yd3V6VkVxUS8iU2Z7UXd9W2A6SUdYdG1sPTFsck0yfHFzVX0rdT50flZpZSpFM0VzdTQkX1Z8VlBnPUZLZV52eUQ1QjdDVSwsaERMbFExdTxINiFPXmY8PT4idGR9Wyp9LHQha3gqTE4lQ1l3eURMNUxSTVJWPEZB'@;
put 'aU8+Ilc/VDF2U1t5RkZIO3REdih2algmRkZRckhzP3M/ayksaFBac0VLSW0wQWZ3eUpaRENNTTNyYn1le3NjInQye18sL2p2OVFeXzkmWVk0U1g0Yi95NDRqZDlCUGN6Kit2Nl11ezVOYDlHVHZIVVpZbj5LTChUIXNfTVBvNEpWJihsQnJNVnY0OkpvOSlRT1pGfUVjRTl0RFJORlI7ekg3ZCpH'@;
put 'cTljbW0jelpXTlQ8MkV1aHBKayU8dWsvTm9pXmZTVUFXQklkVVFBRVVMcFZ8KDE5OEJ+ZGFwOC9fbXApN2Y5SCQxOlliaXFVcSopRyYpYk5XU15db1Z5aD5reXt3SXtDcUZsVWhzbU9iTWtzQURHbFpRSTZYNk8qPUh4NCVyMUV6eyYhdCZIUl8wSSZ6OmtNcWBqLkdMKCglYn06P1B8JmcmJGtT'@;
put 'YFVYTHVbUjhrPDYvQ0RsbyZlZShWN2N4N0VsdnQwalAjQHN2cmI1QDoifT1+PX42Q1FiLENRJVhoaCFYaFMzK212Jis3UixEe2dDfXwwWUY6KDdgTFJEeWZzKSt5ZmE9eEhUQkZnc1B4d0dYQlpJbVtpR1hCUlEidW0jLkw1cVlPVUxiNUZkTDZgZjF0YzAzRmlIRV1+NjtbNTpyVmhsPDZXTSVu'@;
put 'YlN5WUtvbzd6RF82IzVkN15BV0JXQmYydTBqVl5CXXkiX0RHTXUpTH1PcEJpMW9He1I+TzxrZHNtT2NNUlZZUWRsaUxTMlVVS0cyOk5IZCM+Q05wKW4pbitLNGtpRmFdcz9zPyI6TV5rPV10JnRgdklsbzRWWFYvTV5rPThMYXRRL3smMlMuUmU6UWhtb1gyTUhCa3cxbDJQLkBrUGRASn1FPD9P'@;
put 'MSVNXUN9REJOUlZ7MnBvKFljc0dMM3o9bVd8dUt5VndOdl4od2tyZTY2RmYvVW1SQXM/UHlHdSsvNSZ5O2JJT1JSczplNWN8MTdQKkNaWmQ3SU1oais5dHJoS2xvRCR2LEV7KGZdW2c+Zyk+bV5Fc2M0NlghOHpYZCtUdiU0Jm9Ca0wsL0QmOWxbQmNDJXQxOztzO2BwKGNAfSZNcTs8LENebD5J'@;
put 'SCZUXSJxbF5jZytdL2FVe3FrQGZhL3JIIWUvZSNFP3A9ZT5SIWI9UDU7bSh2YE9yNX1vJmZhYlgjVWU6UVNBXjA7ZD5ybEpxJD9qUCsycT5ZOl1YcjB3Tlkue106Q1kqdH1CXm85dTdoUXArYy8yKkxhdml2S2BtJX1VRHdlJGdnKTA5SEgwQlFuZTpRaHFsZE9ZOlFoRGgwXSZ8UWgkS21LeXNh'@;
put 'TjNQc3o7OUtsZm5qTSY4JXJAVWJSKSFIfEBkP318OG41KiVPcUdjeklJYlRTOWM6SylFRzwza0BebShKWzopM2N9cV9seVpbKTtWNXA5JiRuakxgcVAxXzNAT0Z8THV5ZGI9YHpUfiJWQSl5Y1VSOGg5SlVTe0wyYn0qI1FkSVhDS2BkZi5iXVs8YUJmRjIyaTcvXy9FNUJ+ZkNod3Y7eVJeeXxS'@;
put 'T35wJTNNQVc1cFVdNHY8Il1vJDtfMzg+KkxaVkdYLHJbZTVmb0x+JXomcDojTSFIVTRRSXR2W08uJCY/bEVTZkRvSVhOfih4P29AQy5lXmdsaUFhKiZeQDo0aWhJbSlhNDg/QjwsVFNpbV5AZ1l+eV9pTEJzMWw2KSF8V19lZDZDWXJMWl15TCo5PixGOmtjSGsib0xneTZUMnIkbDVRVGk2eFBH'@;
put 'YTNZUVQkY3EyejJlaVZrTExoRV5jWjB+KT5CP1VsSClMP3R0SmF3TzRtc1osSVhCOXl+Mj5YMEYlI0hLOih8OndKaVh5aHVYcmFrT1VxYEdESyw+VSRvR2RfdUM4ezo7LiVfPFsmU0N3XjxVdm9CIlR8MXM/RW9jN30+b29LYGBKQmA0NHYmcmQ0SG5QKHkuQjVnWGFfKVplS3MuRkE+XkZ4JDFJ'@;
put 'b3lDbFNxTDJFWyhFL084NEtxPDVXSCxJTTpiOzY3b0dhZlgrOyZbRHRNSHVNfUUsaVZRP0U1UXtVWXg9V3JiNWxIKUxyWnlYNitQWE5EdzkuXylvS2AxTGRWMkQ5dlJEezIvc2o+RzVjVH45NSY0ZDZ3Tkh+UlNdQTVsZzAuMC83YjdjWlZednZqUnw/PWthXyVsbHs+TW4lLDpaUmglfjR8cmtu'@;
put 'M15Mdmd6aSN4WFRDKEEpTy4jbih+RGIvOHIpKmZ6UGB1RHtCNGNWdVJvYW5vKyhmU3AzUXY1L1hLaitBSjMjTUk7M2k5RkxrUHNZTXBJXlJKcGh8VlJvZ3ViemNbIXhWKURYM0guO1FOeSZGcmwpYCg6elE9U1ZSSCVxTVlYR1pGR2ZaX1RNbiMjSGU1W3lmWUtgbjcuZX13az4xYFJRV2oqLG1l'@;
put 'UTJdeWteXk46Vi9AJXxjUVspRS4jK0NLNj5GW2NRMix5cUtHPjVLeyxCZnUlcDtTVi8oPUFtPSwkL219YHR+TkhKaSszZ2B6b3VwSDBRVV1Ec3pxYkomSj9DSUhfK2dlRypeWm5vTm9FYkU2NDUlTmVOODElN2F4aUN2ezwhQy84JSpGWDU/NCZDNUFmezBEMVNwdU1hIXBqI1slMiVxbGQ3TyE6'@;
put 'Olc2YS92ZlpjTl9CaytzeGZpaXgkRihXJCgleGpdd2BXai8pRSkkMUVJcF1VJndxNEM9d3Z3WF5gZjF6LE0zIW9MUnJVe0Q4YDZJQ2RLYG43e3Y9XSZ0dWxqT3R5TnJSRXc1fjhGaDFCdDBuWzlGfWRLVTtSM2VAaFN9WVpYMEF2Ij0pO31hKn1bJTJOSFJBN3IpfjErYSg7TDszY1heUD0mPF9E'@;
put 'd0Z8YHokPVlsNUhlME96IiVmWDUkIWs1VFNPKEBKUjZjNXJmLylFQXFYayV4fmpiKEMuU2lOWDNXKygkMyE2JGs8RypwcGEocThpfVQ8TjpYKG9JVTQ7Qj03PXJNd0xINUxzcG5PKGE9UH54WnA2UmU6WWEzKy9WcWN6KnpEPy8sNFUyJE5dZU5geHI/L1ZRPCkmKHQxTi5LOkxeTHRkYSsuTU0o'@;
put 'IVoqV3tdXXdsQ1laKWh8LHM5d1dhOlE0MmAuSk1UKC9XSix6di5maVUiaEkrOVt3PnZCWixYYkk4WVJAaSExW0xkWiNpWjttdjVpVzQ1OHg9bUg2NWR5ayoheUdVZUg5cWdEO2JRb3l1OyNLXnJgVm95dVUpTmJteCZBQlRjUElpM2hIPkdUTzNaV0lwRjg0ZUZSZk1VQGFYdW9TR2smWm9xdTpS'@;
put 'ZWIrfHc2JVEyWTd4NkhjNTMyIjcuJmZHezM0bWIkZllkM1VoWTo4a0lfdHhsUmRFUEp4fVRgVmllOiZyYiQxLmsqI1Y6Iz4+QmVEdjljeD0oTTFdMj97PC9FNiMpdERSYnVFZjd5OUhuN2EjaCZlLnFnLmNTPX1hSnJQPUArWFlUNjtUSmk6Uk1memVhIVtIL0lIZnwsTjw2Nmg7em15TXBrUjhI'@;
put 'VDk3SVdbXl09Qy5LOHJ+JjpxajImNHVXWE45SmlKTERfNWpAaG1DfF1WYEYjemptUk4mQGltaUAwY3JYdmxJW2s+QyFaWlZwUXJwSjkwS3NlOTUzRnZsXztMYDxAekw4fVk7QktzeHlrOD40PX5lM3lFfTYqJjs6KVdYOWhqVyMjfD53cX1jK1VGXiw1VE5yOmhqUCZWVkZzcClnNVVgNEdqK3x5'@;
put 'U31TN0hNSFlmPF8kfEhgWzhrWzsxUVJMLjVzUlhna2hHPjVeQCxRYSEhb0Bbc0lBRn0yTX1IdWRhelEhRnxVOyJLKUt6ckFwezNreyk1TihhOzF+XzhFdj5ScjNleE9vTm1Wd1MjKXR+SVBlLC4/UyhYdHg8clByWEUvazMzYS9uUWokNmdUKWdhJCUzKnE+T0U6VTMlRFZJcFZne0w3Pkxgcz1V'@;
put 'MSVjW2Y3eUBlM3lrKGlqPFZBWFtOLkVBK1t5SlVkOD18R3ZKTSZfTTJRUXgxUVckaXM7JUcrWmlEPW10MT1+PyExX15rKWdCeHBgd1hpYn5vUV1Wb2svay8pMEddMUkhWWI4ZUkmISUxNlYwZHJ5SVhoKVEwWnBCYitTWCRbRjVja3F9JCZ4bHM7YSZlWzc7UD1oYmYiQ0xFM09yRGF0USIkQVtY'@;
put 'QTw2LHB9czB8REB6UkVpZFBLcmJnVUdNYE05ZU07OjxMczhvQSVMTkUoKDgvX0IkPVZ4eXUxLkx5THMlW1thb0N0KENAbmMkSUdAITAmcXxQP1dnd3wmJT0laztycDEjIndMQGNFXk4/Q08/MzRrKHFRR0dJdXZMPC5yL1NAT1F3UE5EIzElXXw9RFZLM0oyRkNHaE96VFNicHBte2lDVC9NWEd2'@;
put 'bUpRS151fkVhdzI9NyM2UWhgKiIrSVhZXW9vPStSOmxmZylLaWQoWFhze0osVmlxYT8obV5iY01RRSYuXzNNWSlpZiYiQjV8YmVwSVRPMF4zPGkzUzVyQWViVWtfPiw7KVYoYFdzQzlhN19bI1pCMSgsJCFBbUxPc1U3UVFlX2xDRWE2Q1NBe0p4Tm5YSCFOdXlkeVNdPzl5Z2FNTVdhRGE8LFU/'@;
put 'Xz0vMCY0dFlmSl8jRXoiPFhoZzQ3NFtzbTpxKVd6ST8uLDdTM0hfez8vMTc0Ym43ZGZOZSJlNmR1QnhxK1tMOSFOfG14Y0J3Y3lyZVZlVVR5KjI3aDBzRyh1YjJDUTRnbk5uUEtxeWJ3IVJyb08iNlFGP3BhJCFlaVhgQFRVPzllRV97QFdvLCVqTn1ifjxfTC4janxSPn5aemxiWkkiYFhhMVE2'@;
put 'NlRpIjdtPFgqbTxtJnVEM0tDZFpwRntUNGU3RmU8aUdeUnk2JTxZVzEybDM9QWg2LCohaXJPfTJ8Sys/P3B7KDtaZSp1JnFnbmkrfnImJWtQeCM3UmlhPSJabH5HYncpOHB2IXRiSCo3Ny5iSXYzP2VHPWgyKm1sciQrdEo7ejw7THE0Zj4iayU7cT9JdTo7eEMhOlYxKVsqRT85aXkyWUM2XyJk'@;
put 'fVNMajt5XXlDMngvV0M8Y1llSCtNPygqREhnK0BJTXVAdGRNei5kNTpWJnRMeSJIakpjbHpKZFc4RXlzJHoyaUIkdlNtYVsrI2xKPC9QbDhwUEo8L1BVI0drTzgjRVFRTjpsQFBtTm1AZUZ9ZnBjKD0lUEwse3U2MCo/VWg5Kno6Z1lmWmNrKE1HUWcqamgkW3gjRlYvX15eQFk2UnNATFk7W3Fp'@;
put 'NUxlYChRZUE7MzpebXplUSEpN2E4UnJxfFBxdyV2SmRXfFBWekU3a2loQ1NnIU0iL19eZ35oUCJfXSl9cGY+UXRbISs9Nls2Wk5OZ3NkXW0qYWkzYVZyVX5lOmBeUDhIeEgpJno9WSY/fWVGOVtXRGglSD04bT5ONkc6cFNqZHZYO2Nrc2FYbS9UTjFxM300MURrVHhjb2dTXkxvOFl7Nz4hWEM0'@;
put 'KiNnTVtxVmhaK0VdS24sczJseDYpUiJDWno6NGFTVzZbTy9MdTsmcls9RDwzcTJIRSVfKENVRyVwN1krQj1OaHZTM293UU9mNSl8ZDx3cHAkJWImUjFJcj1FPHxzazhgbT5BUStsUj5JZ0QzSypHajhXV11iZn5dN2U7N01lWykuIkFCPGtwbVQ3bj52VHdleTg4bV8+NmtUT11vciNzcDYxfjh6'@;
put 'WyZ4Y2UyQl1zKVVaezJ+QyZSTU9aNjY1Tio0NlF5d2djdyVKaF4vSXNKaUhtaVNvPlp0dnE7aFklRl18SlYvZ1lQP2pwfURWWHxEQCFDZTgkdVJHY0lIMHdTfEQ7WSs6Zk9yKGpOb3dpcV5IVUY3VVMzazlaVUAwImBJWkMkVyFjUURpUEU4Uih9LFdXTn1Bdl4zPkYpdyVpJjhyPW09PWRHZU99'@;
put 'T2ZiZW85LCRwd2ouMThhVXluOGBvbTQ4WTEzYU9IazF1SDhmMWYvKWs4bHZGa2BIM0g9aTNIb2Z0OzFIM2NnLjwsJWo/IXcwYlU9c1BARip3aGpXITE+JlVWNVFWY2I+MGJaYSRrdWh9Kld5bXVXeUhecSR7V18wUXpSR0ZwZS9BOGprL3dPb1hHUCtmN3lzNCpJRHglekYvZyxLT1thdU8zfXdh'@;
put 'emtlY353ei5XU25APFhmXTwhZTRuOGA1SENlWzxreVdKYitCTGw4N0h4JDtxKipaSnlbcXhmTnxIZ3s/bjpsdDFdeEdyL0p3N2grT2Y1YnBdSmA1Ki5sZjQ4aFkudzttK0QpcWt6aWJzLyRhZkJmZmo0eFpqbUo4ZUY9PmAybzhVeyZVIj1gZj1eUUxrPUI3dGNxQEBueD00WkNxdF5AZUkxMUN0'@;
put 'I1Y8dDJ0bGY7LHZUVTA8ZD4rO2lUQVUwMSxxRnpNcnVnUyJlYSNnPyV3T21tODlEaWU6RzImZCo5KmJSbkxgaHp3Pj1TUnFCQDs1VWVIUUQ1OXBAKjR6O1ZtXllxXSY1emVXYW9lKTFRW1VtbDZLPGJMTkttWSR2RyZ2SF9ZfC5iMCxpXm84Yjd4Sl5LKihuN34pKXoyR3xFcWshRnY/T2E+bCZj'@;
put 'Q05+OWF3PyNKcil3fXZfJEtoMVckZEpQT1VvdCRnNUN2KCZ5c3JFSFJaTDlXT0VFXXYuTF9pSkRxZ1pyN0p3UD5eS2xOa1taRDAjb2cuS3hRcnVZXmNobWBdVkopMytFajRfUzUpODZARlIoNEEoZF5uUXdkfjwkPTw4YHoxe3Y4bks+cHhwKEokXUVSKSYpZ1VxMXFNXiF4JjUqa3xiOzM1blt5'@;
put 'LnI0RzV8eH1efXEmcFZNfEptfEZSKEN6XTszNz9yaDYuNUxqUU8uLjZDYWdNQ2QjU0A5e3wuVFdqLmApUnZbcDtAblRQMSVHMl9mQTZNczgrP14qZStmc0RuMyhLJTdKWyVfWUUleVd8RmMhQloxQG1NdDZfN2JFZDBDLix6QUEwKVNBS0NeSmVjaSFzKVArPTE/Xkl0RSIkTXtIKiM9NUB2LkxT'@;
put 'anx2dEJBQUFBQUFBQUFBTWN+YUVnWy8lZ2lXQkpHeSYmakZYLltkJmpbSX1vcDNgUmxaR2tkY248Ylh4Ri9IWllna2tHSCxBMExjVDM9LDdefnF3O2pVLFl0Xi5EZyFPPFh4OXBBdDQ5VjY/dkdpeChYWXVeQSlUNFFRNTtTKFVoPEo0bmtiNU5ZNVlDRkwqJSR4Omp+aThPNHNoRVJtPUxNZV5i'@;
put 'dX1ZZWk1ZmJ7aXQmXnh1X3olQmJGMSJBKn0kMyVSLzhxYT0qeC9yKDUjbDN8QCh+VCNZZXp5XlQob0p6RylIU0pRR2RYRWhZaT8lViIsU3ptXzh5ODw5b0VQZDxQIyZBJlJgd0UvJGxpLyt+aHhWVl0xUn12KG0sdU1pZWk3VSZqUEsmRGlCQG4/aTxlNTBgM3BrIks8LDc/QUloNys9ayJEfUQu'@;
put 'SXolcT0wM2txUEFfISlJYEFFVkwvXk5NZC9dNkhleE1Fcm9DSEV2VnRedmM5XyhIKj0oRXNtOilSJEo5UD1ITFRbfV0vaGw1R0pjVl85KXg+cChDJFs7YEJxLGt5P2ZBcTIxJlI2dCxNPiM5RCFyfVUvV3whLFVvSXIpfUN3VV8oIXZAKVkjJGZTVHZuVlYmNH0+I0grblcrNHU9LiFpXkxOR0Iy'@;
put 'QWxYak1ESFd6dnR0VSJ7SHxwOnNEXTgjeiRUXjZeRDJidE1KWUJifDhZSVkjbnVsYGVIZzwkXmo9YTV2NCtQX3ojMiw8L3k0fVFzbkh8VmdyPHhCR0t1RyU+Mit5WEFgc3NAPiJkJVpvP1JaV3I8Qzxwd1hWNXBaa3NCUld1fjFXSnVxLipeLiFQYSlNPmxUNnNHPC5tTmNUZCZJZmY5czd+S31a'@;
put 'ZWU0a350VmxCKkJdQkYzcHZQRiRWejcjXzU0ZUQ6MTJUdDRIWENnaV5YUHdacDZPJlVgRFt7TkgpQCZCZXtiXUVBZyUpdVFkOD81ZTQ4QHxHLz5WO1hCW3QxbXlZI1MhcUFHZDY2fSR1anM3PmNIcUM2KX0keDt8ISgrVz1SdE4le2tgXkksPEZhdUQxRUQjNSomIUYxL3V9M3ooLCZ4W0pXenpF'@;
put 'N3M6TktOJVV+citXeV4kSjNeYmIieG9aZHFfQzAqT0o9NmdyJkwvVFUxdFB7di5VKC4qelg5c0YvdDkhZlFwV3lFKSQ7JjVYPmt7UGpxdDxfPCR0Yy49fEBMZTVdP2thdTNlZyIkdlhTY0wwU1koVF1KOiZDUGRMdTxtYnRnJXR4RypkT151KC5ec3Q3V1VPP0I9TFJsaDcwbjY2bXNORXdVZj1Z'@;
put 'WldCVD8zL1QiLykyRSFvdTNkeyJGMmpraHFqe188an1+YCtXaXN6fl9Vc2VjTyk3YltTIkVLMkZ0X0grUmZIfSxVOiNeSkpmYmBUIUJRUnhzdzNWUn1acXQ7OGZSdmxFNTVdVWI4WSh1d1UsSnwwTyYyOzlbbjVMKFlzMkkjVSF+VDkxRStoUEpuSTVEOnZlYXQsfForNkp0PXpATVl3QkVnanYy'@;
put 'fGgmc0Y6VlBJfH5lI0lbLFNafjo9eWR0ek8kVkNQNk9RY3xPSz5rezt8cElLc1lsc3xfb3s6X0crZmFSd0AjKUg+YCk9O2llfipDSkJ3Pk9rXkN1SCgwUkp6WDJ+YEgwOmVHUiIwJVBRMyshTH0/UXQ7TiZSeGJJQmBmdjwpPjs3UnhXTlk+IVMsSDVFJXRwRGo3Y1hQaCJXNSEiP01Md3IqWUVI'@;
put 'dDZ0NXRRdlIoNTljeFtLPjpuISZxKDdoNU9sdWBxUzFabGwpQ1BiMkdXeDVnQF1DSUlGXzJnVENUM21RQjpiUjUuI0M/Ql87R0JTfUxHTDl8UD18eWgmMEJyfCVVY0U9aGM0QjFBRUdLNldjUkZ4W0gxcittPDViS2pTbFJ9JjpRVmtpS2h+ZzYmZElPKyRucGFsa1JhKUE4SVhwMih5X2VAMExp'@;
put 'MlovflcoeSYxVSIkX0Voelg+Nkk0Q3lRRz5YLnN0KERbe3RKeCpCYSpqbShuK0k/UGZqTFgudjNPPWlsNGFEdlJbKkpqMUdUaihKakBTbDpxVkN7bmBRdndOaHQqZm05WiU+KF5PcD5CZi9+PDJBOFpAdzB6dS9OZXxYcEEycnRXdyU3ZjBxPUYqN3x1KHspcGxPd3Y8fC9pYnRJIlp2QEBqa2Vg'@;
put 'NFtoSyZ4RzRlU0dYaThWcHdKRjF1O0xGVEtabmNQakdkTis+anJYLHRtblBddipOMH18K1laSG4/a0UmPlh9ak9KNnI1LD96fVBCXkUsNFFmQVBka3ZhWVJERyhfTmRMTnxlN2BDPX1damFdaSE7fHh1RDxnTmgyWig8RyRMOW0hdDdFUixRRVJUYkkxUTYkXlhHYz9bYTgqNlchajduNjc2TVV6'@;
put 'a2J8dVNsWSMkbFlrbzg3KGlJfnsrcHg4Rio4SW9TYl8qRm44PVE/NUleX3E7IVY4MUgoOXByd3Uiak5Bcio5I2ZFaV9yd0Mzey9IW3dwY0B1cFY2fV4reTg3ZzBEfmV4RDd7eDp7JVp2MWw0XXFeYm5qV11XXy5rKUJ0a3tEKFM8KWlCXSJWYVQwTU9UaHc6Z1QmNU02V2hIJUxxa0JJWWU4NT9f'@;
put 'UjNOQ3lYdTJjczxQYSVNPU9pT1ZpPmg/MCFLTUYjNjs8cFBMTGU7OCZxP31geiZQR312fUs1T1trMWhJUStkM014eUQhaVthJnpALEQxJmRTInlCMzJ3JUs4aTYpNkVzZD5+UjEwfF1EJXRbdlRlM3JzMSs1W1NrSHY3O2grNX4/Vms4IkxHYlUyJEo3ZHw5eXo2IVg2TkZUNkB2QWQ1bltUP3Ix'@;
put 'Q2JNc3lQK3xYI2BISUtsWVdMOGFAelo9O0ptZn1DJVZAV1Z+Lmdxbl9zbUcwSS96Vk8vVntDOy5IQ3N7e2JSNU43TyZsTnhqYWl+eDAlMXFJZnJVMzh9KygrWiF7Mj49UCNQeylxIkkjODUsQS9+bUhdKVclKkJuYmlDQ101dCtCanpUKTtIRjtQdklKeFRfLDZaTjRITTwwIWdCQksyQTIoakZU'@;
put 'Nm5WU1I2eX1HITo3QiloTXU/LCklUzUqe2tOSD0rSCZtVU9qUmRoMltdayhgNklhP1plLDtZZVVMU14kPn5WbDBkLDhLb1RCR1g4ZldHJXQ/S1MmcEw4K1MwOnlLKk97aDZCbFBQJU93fm8wPUZVdUt6LilJS2BxbGQkQ2U0QHQpTE1zejVATEdVYUZQWjM5MDtaQUkzYkdmV1EzYiYyP0dZa1pl'@;
put 'KEJaR08rZUYwQmhPTG1FS0NdbUlhTnpKaWlgcWg6OkVyTiIkR3J9YUgqVVpPTEByT0NOaW9ZbShfVG5MejUmWz1qI2g0JDtvLyY1ZjRvRG01JkgsS30zMTNETkBbfHp7XjhqOlFxajBALn16dTkhczhQMTp1LEFbUnx1N3oxTH5bOFF1VnNLJFtqW258Z3g5TXspMVBpNkFqcGVgOXAyTmpafTo0'@;
put 'U1tkMU1HIUc/cXlObkxRTylPb311UTI/X3Mxbj9WOChzXSFNI25pVyFSaThzS2hpU31uVCxSIVpFQiFNeS9YcHY4aHZYPmhUQyg0VGRjMDR6e2QwPDVFQ2Rxek5aZHRFVGgjZ1UjZGd4TCNmZXssNWBfW21SenswYSpqPjQrQEFZXW09SixEezEoVy9sanpSRHIkXV9mL2NtODNKXjJCWUpsTzhh'@;
put 'Y01ELzRLZExueyxvJVtydlVrPipFYipmW1d9P1RmaGE7e0Q8bSVQdll3QDN0KmUyOnFWbjg9X2thbzA1Kkx0RkVOd0d0XUhZIjZRNVRKbVQrd2pFXk1VRTsuPUtzUT9tRG4/I2tMMD4qdTE0cEdBR3FdKCxVMjZFYytbYDZ0W0IkM0VmV3RAeDtga0RLSH0+P0d+KzJMRygjWVB8YGBVRl01dFo/'@;
put 'eFtuMytaYU5HYmVHPWlfKjM5elZBQHVDdG9DWSM+dUNGez5GWFtePkp8ZSZjMjV1cUIwS0pOSEZnKW45M2dETjAkZHklYDtObyNDe1pDXTRIZF5NR1p6d2xbakkjRFAlbWZdS0cmRjQmeXU2OmkkLEVUOEtoKkY7UmBqPDxkNS5eVXdVKzl2enJOJUVXNUZCX0RCVWIrdj1UeyQ9MzswWU9VLFla'@;
put 'OlVVIjYvUzlUUnMpQSRtM1NddVFITmlod1FCTy57JTpvbWNzV3JrSFtMWjA8STpSMTl4V107QXRNMixEPTpgVDdIfWt0YDYveXAlNXFKT29ZQUouOSo1anEvdW8jNlIrNWs/Ti9wa2VWISRQVD4lOVE+OSM5bzcpTHhdWUU3QHZfVUdKbnYxTnRlb3A0PFYjdHshUn43dlp4QmRSYkNeRUlGb3dn'@;
put 'bXx5MEMybl8jaVR2Iz5lRlkwMUJ0fmpGamQ5QCsvMVhCXSwvMyVVN05bbzRkTmhaJCZJV0BEVXlhJClJPE1TXnFKemtSXjlzb0srRTlMVFprSHpFWzhAcW5eVGkzSXVjYzN2WXRQZ2xmYylNNSN1UnR6PnFbYCkjU0o8T0VMJWNfVHxAJUpjTEA1XXxEWGZALFd0dU1jO196Xk1vRGlaJlE3OmFY'@;
put 'MFNZYCI1P10ifUNBcXF8SWxFOmMub3l4a3MxUGB2c3ZscC9tQnhxQUd4VTtNaVFzeElZXVkzZWE2bTNIST1ZO0psI0U1UGdKbE8vX2RLOGVMd11TNjo9ezh1NGt8N34zKU5AT2xkKlhMRz1SMz9APExleXokRTF3KCpFa25MJWZzbCkqfnkkRUlhSHcuO0c2dW06bXFfVkRLXktIPms8eHEyZGhq'@;
put 'ImAlI3Z5UFJkczM+MWg7d1BWamhwKE9gKiY+KFpnODs9JXttXUR2KTExS2djYlpbdTR5ZkJ1WUwrOjsxaElMT05VTz8oKGVCJEgheCYuYHBoeiZkKnlxOHY/T3VzajRTPiJPPShaXlJdV1A2YjB2QDtQayxzJEhpYUFvfEh2SDtoX2tWRjJjUS9oPDMsJVM4Tk52QXFfQiUyY1lWQExhOHR4cVNY'@;
put 'e3tNWVNAZnlyJWVMTzNAdW9sWmprOHU3PVhBL082PGZQQFRfVEJGTW9uNUs6Kzt2Y35zRkAlYj9FN0FrWHB+eWRBSSheSil9Ty4uazZePUJjMGo2R3ZhUFk/TnwzfCFbMHEvUS9pVW9ANlcjJmpGQXlqd1Z6SXZEI3FUXlhqeD5sbXxuIz5iQFduaV9AIWl+PUI2Qkh5YlRlQkdSdUopPEx2ImJe'@;
put 'WGY+UiRzd2cyc0lYTTdiQi9MIW5oOnx8JVhDaUcxL0NXWT0kQnJVQm5bLFlFfiN5VywsVlcvTylsL0xNcGRlSksrUn1ZZTpINCxVI3ZtPHhjbWVtRDA3Z3VqdHdUOnFuPyVDUzY4RDA1OW1EKzIpZixaNCNCQGwwV200SXBrQkNsLGk+Z1J+T3AiYVoiWn5rd0psIUx6USUhP19FMEBwb3V0NyMh'@;
put 'S2ZBJltdJSQ9YWtJVXVsajZ+ZXNNem02eSFKdTAucXEkaEdrXnRYLD9hYDpddVNgIT5iMEJfNV48MCFLI1c0KXFsITYkeVZTIUhkLmNNPCZAZiNYZj96KDRDWkFuQl8rUCU3Jl1jQH1YT2tAS3deQlVAJUtQWlZkST4jQyFjRyFibXhDYjQvVHU7Oykyd29bfTV+TGRhaSgoMnBZYW1MSno+I2tn'@;
put 'V1ZLYztMRTlwaCkxcSQzVW9jTzZYP0dKWTM1PjkwUnsmfW8oSDVmQEttcTxpei9obmhvdGFPfTluKyVnMCh0YnBjNnBFI3ZROkV+Y3VEOTtsOUdBTjQxQCpERUVKaHR4Wm0lRjBJOTxxVjgyTHBBQWx2dlJJMGFeOUUzPmUrI2xafF5aakhId3IvWWV0TyQmOSRKXWEwOXJeaEtkIyReIjcqVXl5'@;
put 'a2J5ejEje0hRcCVWS1Ixd0w/bmh7Qn1NUVZ8QFpofV9BenVXWDsjSWg+d0B3MjBpQzcmQkBHeHp9aG52dlNaOXxbZUZyWGxudjI1I2Z9Z008UGNbTiRlUiMlOUlSXyVrNjAkVDZWQ0s1OFgzTSQ/I1VzM0FhWXF4bHgvS1BeKyZMIjBlODNZNmltPzVoOHBDbVVzbGZERGp7R05WTnExTElOTnZ8'@;
put 'TWsjZm5jUTNgcnk5O1JeSWZiYXNEL3F2e3tabnsuZlFvUC9FWk8uJkYyNm8qS2Q6ImIzaXB9MD14eyklNT1ZeyR6ZD5bI20zX2VUQ3coXkFSIjAjX0M2KlFAPUhaNC5YYlleWkwjaz0laGVRRlBIYSY1dlRObFVHVTJXJkYzU0VmY09QUlglfGo+RFRZLCElaUVyI3tiYDg1JkxxUHRzKkcmKFdZ'@;
put 'cTVyMkZdaXlWVUhnJl5Sa0kiMjRtbkpTSGo/U0ZraUAoKCt1MEhiYUYvdHVDa1MlaClCb1A9SnJMJDF+fnlrPGUjWmted3MrTWN3azElcnNUJEtkLEFTbTBeSHIqeXElI1kreDN+RSZIN3wyfWdJITFMUnBDen1DUXsqIkZ2Z11pV2J5IUh2bDZPIikoSzE5KTl8K2JmSXlsZjdoS1RvSXZfKExg'@;
put 'ZEtPPzRYSS9VWT15VCwuRjpGT1deUmdGQnJ7O2BHdjx5dXlQWTlVTFosfWUlQDBjc2pCaWs3azBTUTF1MHpqOnlZUXRhYDh3eFpOVFtLLjFUbE1ZT3VrZl9YO0w3TTB4Ll5OfG4hby9PO3dmSUYqfH5PaXZeSVlmLyFyU0o4clQ7WXI6RXtgTFoyNWtnPj1VYTo/enRsIUpKOkF0WV5nPkk4eSZx'@;
put 'Mj0xXkkxK0QiJV1dal9bdkZDdlM7eHd9U15bKjw0ZWJ+JVtEUltKWDpgUnx0STlDQzxAMiIqRUgoSCspUjlxXVQ3U3dwZHAweiQjNm5CcV1GaX1maGslM0tzP019e2ppMV08UjhocXprXjhfSzNIS258KzxoezRibGh1IWFUPHNbK1UhJUMmJitKbCxALCRCQT1SMnwvYjVRaHoiKTl0SEdvIn4v'@;
put 'RE9nUThqNmAoZS4kOFldUXc8T1BWc3gjZF8zaXlCSEJiMDd5cjQ2SX1KPDY+dnZjZEU/Un0rZzlGfDJNfDgpQlJrS2RLZGRdRjxQPj92K2p7S3UqJFl3em5KTS8jdkdRNFYsOTpnd2pPM2xbMmImNUVkKkJJKWdlQlJzMjgzOjpfR0JkPzA0OHZwVXsjIj4zYD1Vaz9bMVN0PzM0TGBAXTk7XmZ5'@;
put 'YjJ3aCNuV0I0MSpJNi44dHRAIWYob2l6TyJZUX5EIWYoS19wczZIc0duVzE1QnBbPVBNU1MpTXhdIW8yOn1aaGd8Y0Q1WTlRI0tveUB3VHBqV01MVmUscmZtZUVgQlZ+U1R6YFVFWD5iZT8kNFtzSHNiaVU2NGR1UUQvYV5BW29rRCtwVX4hYC8mdldYTmVyZW9Fd0F7VUJLZEJtI2AieTo6c3hv'@;
put 'SVlFXzswaHBBS2N8STZpJVU2aVVJO2pBeD9FKjpkUmxnZiQyaUVAeVJwN0VHfXNxP1Y1ZCFZYVNuY0g9KE92fXkxWF90a152JlA5Z1ZuZlBRPExQJipYL1U6JWlZYlo/Zn16e187azIjI2RhbF4vczYoUn0wK2Fwe003K3d4RnhyajQvKjpQaGJtIU1mZlJmfil5SToyUnQkbEhCWn5kcSM+bHRM'@;
put 'LilFO2xEQUw+NDZWY1UsPlcjYz1kJmZFTihRdUdCeFRCJXgjRS9wdjVbQV9dY0NEaHZrZnhmNVJfOm1MSTtjMioqK2FHWWlTUypwWDc8bjpnT3lIVkFxXiFPZW8ke0FRMWFgM01zaDpxUU1ldD55a2EyRzlUKjFkSXRCYW1dSTFyRFZqOSgre0lvVT5KZ1V3T0EjOCgjbWY1KCU8R3pzYHtsYXxo'@;
put 'ZX5jdHRUWTpuJjUzaGZkazNdOTBrQSlzcGx9IywqNFEvWzsofTBMPXIzNEtjZU1dWV1adnVWMlR6dH5SLDlDYiNNWFtTdTEqXU9QTngxOV1vaFpsQUddJV8veT5zUm04dV9wQT5XYSUwInBbPUdpT0xHYVlvdSZkXzFwOVtNKEwpeGE6LFciPngqUj1hVHtTe3MiUmZYKXFlMnBGdkE1M1klclIk'@;
put 'MnVWW2toOVBnWnFVQFliIWpqak02X1hxSjUwKUtwTHlecFcpekM4M30vLmxtVFYlNyssX21mLDp8LEZEaDBLSFhLQjU8RjFMW19uak9jVTxMeDRlOyxhOnI/QjIlRFZRW1ViVn50fkFbNlhfK2soa1kyOSQ4TWU7MmF7My49TEduTVVmPDFqcXFnYSg3dHxnPlhiKi5dT2RxQV8hSD1sQnk2VD0x'@;
put 'ZWpvN090WmN4TTVkVUVJPT1oXlRLJXB4YS5RZFE4KCI+bXRKUGdWYl43blh5PmBtKm1KX3UkbXdIJU1LRGt+JmJZUVc4JnBJWmY2Q0MqazEjai88PT1sRlpLJD8sWCRjLm1aLGJXJFZnZk9bO2FCbWtkMTVsXzhuOjkoWyRwQi93RlJrLFpLZlt6ejhOPkJhMip8L3Z8bklHYHclVn08S3RrUS9t'@;
put 'XlF6Y1hEfSZLL0QoR147Mnk6T1smZ2lka0k5TE5pLFJSSUJ8cTBgJlhbfCtPREBRQSJqaD0qZjJOTzt4bXs9TjNQfUwsOHlZdnp8ZEpzdG5SMyZhelpEQjBGPyNPT2N7S3JgTUx0KUshfmBePyh1dU5rXUloQjUlXk17T2REIT8yRGxocSxbREhNOXp+ckZ4VndEQnpIcUchfGozX18vZExNWyos'@;
put 'UCtFfGh5aC8oXXRAUFRVe1F3OTQrd3dmVUJ1bkYkV1tTZ3Iqel1ZYzM2YU0mTEMkNHJ4fmQmU0c3OTVWZlFeYn5lPElJU0ZgOjdoTzIyUWE+eipgN2BqUiQ6Oj9hckkxRyE3VzlxR2l2dV5vd3wvQmZXbmV5SD0kOD51NVg3bkN8fGhpcnVaUVM4K2lkRCpUPzRaZDpOYFZ1YSFCKSohUktuPWwu'@;
put 'WjAlNSJpak02OjxLNEs2VSFhUHVNfnltSEFMNixAJEBXQCsqTlhgXVglUiVFOllDSXlpd1F9VHIpO3AuPGEsSVEsfX1PVGRSWkNKbEhVQjglQGczM0NORis+N1QvTHdhYl8wPCI3MkkzOGgpZCVrbGkkZ3U9Rl11Y0ReU2NfYFI9UHdjKlV4N31jU1ZReGIyUWAvXl9uKjBMLGhzfmFQPTpVIncq'@;
put 'V3V5SnRYe3NMMG1ZYEhVN3VHO15sRk1qPDNOOWleYXA/SUs9Z2lfJm9bNiNafjIyIW9SfUYqNEU1fkRNZCxFMFgiR3cvZioxM1ZRJSFfR2RCQjRoWEIjI0kldHJUIzIpdjoqYHJwVX40ODZhajojZGJAL1E0IVVUbm5VOUpJPmF3aXV9UVJuaiRMI0BDSDQidEJpZj4wPWNiOXQ/e2F+d0BHeyQh'@;
put 'PmdUYD19T05tOihjZVBsKTdJY1h2Vj1ScmUuU0wublBfZnJ8dVVLUTQ1Vy5dRCtoRnp1ZjNTJGlBbShjXWE6YXEyWDI/diElc1gwLFU8fWJbZkczPj08MUM4elVIbFFzeSVzNjRUY3xuaj5PZEpJel5sPWYobn5RWX5OWGBbW0lFbk59QHw4VTkrI1BvPFU/JWR1YzwyV1Q8cG9UZFNNSH40VnNn'@;
put 'PmttX25TPFIwN09aLDFOMXtTa3FjJm9wPjdVXVI+NigpUVp6K2JoQ092OUNaZ2FraDpwKUY/WCJ8Vlp2P1U5MGliQV00U2o+RX1NSGFPSCNHUGBORlpRYmQ3QWxFXV0xcE1veXt+Mk85YGMjYlhtd2xHYEsufHRQcnQ0QSt0Sm4sLy51XiZOck5OSVp3N0VXKGMlRl5AVVR6ejJxaDw/N1RpaHVp'@;
put 'TzRWOzdSXndUaD4lLHV7PlRSdTJqS0AxcVZPQ31TQC5xSXhfdlcjLyZZciZbKyV2fXNgO3duR2dFUGJydDBeZ05XJHk6I2dGaXQ2Nkk7OG42fWF+dSVnJmB2W2kiWTQuMnNwIztXe0owTzcuTkxXKXc/Rk89OGAyKG0+X3R3SCFPM0lJKXk5WkUyP2JZJCVVZS5gRkh6RnlfZm5LZ0AuLHQ/PlAl'@;
put 'N1ldZXo+PSUvdXk3YD8ifUErUGlTVV5oW3l2UThLLjBXTW1UOHErfGZaUUYqfH0hbEFbeWFLIyF2eFo9eGp0OF56RWgubGBTOGJRM0R6aX1WMD0ufTcmZzFLOHUjYSZuSipwKk47MUljMEJdL2tFTC5hXmJCMVYvL1pVQyF8dHswVko4WzxseyFjYEF1UXpZOG1fWS9XSyFwbkw1dVZ+WDJYOSlq'@;
put 'LiFaQlJ7Rm5XRkBUPEVrW0VMOTolZ3BqNjpeWzwpPVVlQjtRb2N0JkFVNGg0QildT3JZLjgrPmQyWWMuMipqQVVGLFIsOikjMzZ6Zj58OXp2S0AxQWo9ZDdAMFNaUWMhWl1SO2A3e3hIQy47JTVkeD5wV1NUfSpNRWM2MSUmM2ZUMWdePTF6M353UD0xTUs0VzFFR0R0LG9fclg3QHY4T3ZlPS8h'@;
put 'MEA6R3hUNU18PUpRWG1Oan1JNnl1NEhlUWYyZjd5R1Vae0ZYRmVlKHhjVjR+NSZRckBHbUFMSHB3RypIb0cmYU8sfCJifSMhIUEyamxKfVc9NHdDdiEuIntsO1dMZXtsR19MQllGeVIsYDJuXnosZiIpb3lzXVYuMHtXV0JKSXM4bWF+ezJILllWMChidz5ea34lSStiU1gxUzZQKGtjKm58TDdi'@;
put 'TCMjVyRIdFBwKXxoaGd2fmZjOWFicFk8Zl9nZnFsMXtnYiV5R3BkezBqfmUyen1kKHBKZH43fHlvOHlsd2c8KCpEejBsXVN8JHwxUThDOUJ6WVZ1TjBLOFVtMHpGYyo9aTRpYylPVVR4e1Upb0g6ZUg3aDJmSDFPU3x7YylCL0JgfT84Nmp4InZ2NFtfZTIsKUwpSSJuTW5DbmA7WGYzNX1Tfnwq'@;
put 'VHp5QEU/UXE8YiYuV2RESjs6XmlKKXxzO2gjZTBQZDssVVZTezteRkdAT0NjbENmd0JNPFlTKDMqVHhFamhCRi4kNy91YFFWP0RTc2tiOV9OQUA+JCIlT0hMakduNWU1azRgKn4+Wn4kfU8sSjB8RChALzxtZF95VGJ5RW4pRXMoTVN+MEZKLGR1OnpdbnpgUERCWltIQXRKITokL3U/OSpUS29D'@;
put 'fCFCJXB2TkxgY09KXVkpbkpyOj1wO0QjczBqc2VIUGsieEJ7I25SZCN0SjteNSY0I1ZaOmFZdV57Sm11PiIub2l3V285KW9XcHVGUHFiQSEsaCwxMXpQb3Q3PFpxLzUhZV5WZFZZVFFiNTk5cSpsJVRzMTZAZzRyY05JZ2YrWT5ZYy5uMkNFYiU4Rk1yXUc/TH5venJSPFksUSw8L2RONFFqNT1k'@;
put 'UVpvIj5gUVRDIVQvIXhxJlFgeV1tX0A2fVReKnpnKHxganMwXmo9dGlQOWIkeG5WJVZjVnI5OkNTT142MVU7KkZIOyUlc0E8ek9QQTtQb1JnRVZLQzdqdkVRI1ZrMXBNYFl2WFs+fCN6JnV1cjhRQkJQWSNYRkJ9aDRsWlUsNUdYTVt7YXVVdVtrNGlpdWxmPEFCJXpZOmZaVzR1eU06MjxOcWcp'@;
put 'd1hCL0Jzaz5kdEthSGxlOGg8YmIpeWFPSUt8b1hLaztlYWZ3NlVYY1ksOzBuaG0ieURLT3k6fStVXmh8e11sPE03MyV0OXwmK0U5VkI9e1lWaSYjR0tyOWFFXjV7ZTtkK2spfGdvflEuKXp3Ryw0MHVDPHc+dDNrOm97e0dFUCpVSnBmMnB8aURGSCgrXU9TKXBQeF52NDR3UWleQFEuSz04dkYy'@;
put 'byYyWSVFSzdWbGBHMkY0RkEvXXJ4QHAjbkcxbFhoYmpaM3ojVnlPU0UqY2M4TkgzZnVNPURrUihhJHhYcXI9T0Z9Wi8+WTVgdyhmV308T1NzalYuPzF4KTJ5cS9FZCpbLnpUMXxwfT5+Ul8zL0BGWjNVMiJ3RjxbXzlubGN4JjEicT9BbVlpW31QY256Lk8+ZWRiZForcyJBVjEuMk5dOmRgfV0j'@;
put 'XiVhLCsjOTBlJTssc1JjW2Z9VTkrXT5sW2UvU11RR1VjY2dFIW9uUCh7cjV3KTZfO0dWN1oxNFQxcSp2VX04Q0lCfDl5Ym9mYjA+Ni46eVRyUGR+ODsqbjEqcV81PnFNZVNiQTpPSFJ9Ok95Xl0rNjxiUUphITlbW25KekFKa3NGSmQ5cXRVemZGd2FELE1abS5WZ2lGI2EmdDQzKDcvZ09zY1oh'@;
put 'UEc5NFI7WD1USEw5YEY6bSg0Qk5KS2BeZH5BRlVoeV9sd0ptZ1tURXU5P3F4N3wuUUZPPldGSXh7c3hSdmlpViI3US9NSXJLaHRscnNTT3d7e2UlTVsjRUBKd19kM002SnJMS0NoPjcrYEt4ekpAZS9na3RQbV5uOUtCbVt7KENeIWMzNjpzfjV8W0wpd2FWaF5HTnF+fkl+PTZOWX5WZ2VzcHwo'@;
put 'cFtWfSI7JGwzcDolSzY3RG5tP3wzSGlSQk43Pz5VQSt3TXBIQXJ2c3teLjQuaHBjSmA0Oztze3hLTn5xZEZvZzk4XzZ8Nkw2KmNiOXg3eWh7OFZ8VkxZMWxQWVhQazJlVzAqezhWTmR5KkQiInxZUXw8dHI/IW87LlhDJHBzYXZvWSVENFdpKFZnQXEoaUROdlloajMsbnhZPWdmMSU9Q011QCEo'@;
put 'aVUwU0suVTVSNEIzQkw7JWBuV3clOjlvMWl9aCwyZXg1KExFOU9VfU5UWTAuOkdEKSFKSFBFU2czU1FJdSpsZldTayIlSjRvVm13ZShaZHBGPllscXJvaComSDxWTUBRbXBfRTdsKDYsRFUjS2YmYmVJV1tQJF4rZyQ7VF4yUCx6e0pIb21pWDF8RCNCXzYsXU5RSGt6eyVFemROdUlpKyFsS2hS'@;
put 'Y318Pm82d1k+OShleD1PSVp+QHomYjIhIkRJbnImfjlQb0QuMUQiaVclRzIrI2AoN1liSllyc1Y5PDd0RyZeNFFVeWciQ11mOVljRCFCTSJXQjsuOzExITxuRk9IJkBbWFYoU1lTUC9aKCwoPDA6eWJ5Kmx5S29IVDssa1NRVSZTXz5AR3NKQDVSO29+ZWNPTkgjLD0jJTc6SGtuOkhSVm95MEc/'@;
put 'YDZZNWB6dUZmclt4cTp2QkBiZllebHprWG9mOnc0OX5vLzJIbX1IUHRCMDohdUJBMSFHKUUjemMwZiVscC8xbGosXjNKdXpxdjt3XTdHYytHYnRefGFsNltvOGB3P3xEPk8xM10qR2lUTUJWckRzK2Z4SzRkJDFUL20sYzJLMVFUa09ZZDFkVnd3bzkheUtLalhldzZpKjM8b1dMZzV2T344ZHxH'@;
put 'dnQkNTR6NmNjWGtaJVdVVG0lV0dsIX5CVUMyNCpUQmM7M0Y6V0NoNDRvOEUxQl52L01Gcj5wW0dHRHVXK05HSVdGJXhnKVtCbE5CQlpDInc9I3tVNSw6KTBeJlVHZUYkR3hOZWxDcEQrYTZ1eVchKUYxODJlJVh8ITN4XURFS3p1eF9GZyNOYWM+PyY+ZiZSZDl5OEIqKDBdQVA9Py42VF0rUS5H'@;
put 'KkZafjp8XUh3OV1mMWFUJCZmZ2xtbX0kZSM3MksmPT0uUVQ9JWdXVWZofWtHJlNvQlt+N1t+bEZpSUd9OCxCbWN1TiRLLkpVYysmSnR+b18yaFdnWU1KS0Jfa0Z4bTRfR2JOWyU2azdwcl4ofGZPaUl3cyQqZl5lZmhjJiFjeDFJQ0x0MlVLYnRKZk8pfnsmKi5IJmo3NT1ubSwxL0BAUH55T1Ay'@;
put 'TjpROmpFSlMoNWdHMHwzSG5HV0A2VF53XjN1R2h6NUMsSShodFA/JkFuTEwxRi9jbi9LQmZePUVZTFdabSZifDl3VklxUWJKbGB+PEN7Wm1YL21dO0YhMUBxbU5nZW1lT0FyKWNmfDo7T0JjclkxN2MpeVo9PFljSl9dYyRHVH5fMnEjNTgkaU4sI0NzekQ0UDdkaj1VSmRhVTU+fVJpZChhPVIj'@;
put 'RiR8VnAyfCVEJFpvRFg7eTREQnQ1R0g5UkgvTTJxLyN1ISNyYWF8ZS5UZl1PSXwsQGBuXjlLeHY2bnB0JCk0WltWLEhdKlR2eDIldkgqUDh2P2UmJWpmOmUmOC8qNThhNCU2K1AsaC8rbUQxI2Z3XT1AW0RyMi4uKykmZ3hCOkpycjBCSzFSSyFMUilxUjcqbGZPIU8yVHZHT0hNUm82Oj1zNXxT'@;
put 'cG44TEghWm8yQCQsakZMempRaVlaSCJsfW16eVcqQk4lWG0/XnQxMn1FZSx2KFZofGBDPExfPFVZaiEpLl07O115c2hRbENOY0FYMXYpYkNoIU0hcVM3YyZ9WWZFZjZQKWx8YDBGcz8pZDlLeWJ4MzViVGJgMiV3Jn1tInkoX09ubkRPOEtNT0MjUClTTWRdeEdWL0Bxanw9KSkwdDs9cFl7SGhJ'@;
put 'UWw1TmUkRm1PMTBpKE8iI29SO14vfiwzdEE2LDJha1Z7fUBtTGFJekE5UDNeS3ZbP2dpfDMuTjdMTnROeGNlTiU1U1JzWm1PWVk9K0prRFJNdVd8RHpKfllXVjpCIkRtNXFJNiQ+SCtkM1shMkFvbWB0Tm5QaFAieFtIeTB8QH10K1ZyaHVCKVVyIWB3bXlfR3QkUVhscVE8aWVteWEzNXl4KyRt'@;
put 'IVk1elAuZDhBYX1SekNrRmtlWVVmS1k3ImshJWwqWjswP1ooUTZbMFFvMXpJYk1RfCopWGlURS9SM0tHQVsvVEBFaVF5KUIwRHV5L0FyTVVBfFtle0pXZkliWmpBalpFaD5jaDImbFs9anV0WFVNYjorbjY7bjE9fi9XYDAmJC5qeT08aWM5dS5vMH5tU0NyPG5DdCp9NUEhRFg4eXp7WyJUPi5a'@;
put 'e1FUPHVEO1BPNmA+L3w0SFFpOCs4RFNHWzlZXzk9ciEzKXZre3JkbSx9SnV8KzcsRHtzZHJ2aXNgfnlzOmB2UGl3UE1tRSpWT349QFRmRHdOMypaLjNCPW1VU2QzInswM2NpZnwuOnc1VXk+fnhjYm80aV51VjciVnc5Q0Y0QnFXTGcxJVFQaT97fEk8QWoxQyMzITQ7NmAicFZYTCUpJD4xTnFT'@;
put 'dlJ0RWpsVlY4N3N8T2smZHc6cXIxaV8pTU5EK0hvZGZIZyk8Xjk7MnhOPkF5VGFSUHs3PGYqcy9PNnRdUy4pKE4+V2FVbSVbTlsvIixoNU4qdW4oV3gzcmY1MCReJCliXS5gbnw5Qk4pNH4xX0VlLFhzb0dWPWxhNnB6ZitTKWBib0J4a192WU9tZEVfKy9Hcll6TkpHLyVpfHhzM1ByLyhLQFZd'@;
put 'MnhoRFFAMkBnK1VyfEVeS2kvaDpOWm5YRHBde3B1NFkvZUNzITssZW5UYVtKQy5HTk9PbGtzYDgjazwuTktsNSIpeG4hZHFWUSZmc2N1T0chRSlBb3ZbP2FaNSI5ME1XaTpbJWRgKihLWnA6TkdXMnNuY2J5OHwxNkdWTEdHYGl7MitNRlI0OTdsaXlbb3EoQitDfWdeVlcwPitOYCMxWU1xZ25V'@;
put 'ZVNDa2Q5bSlEOH1kSSZ6JkptJU1Ha3QvdzJEbigzMF42eUk5R3RnO2ArOnV7KE4qcztST0o3IkM+VkwpSlE2ZldJLnVWPmQlenwvbV1BVGdnQzdqRHpqaXIjWT5Gbj9+Vl9JV1g0dE1OP2pxZnZCY25qZFRmSDJuVlh2P0ZZUV1pXUpBRjJdXV4rUCw3KyNuOGF1LEhHMVZ0enc3UXVDYmkoKDg5'@;
put 'OH1YWERsYkQkZDdAU0MhSTUueys2T3d0eFg/VDpuJTpJWD4/dzJufFIiekxdIVFXVVUhXUlJXnRKcDJeY1ZgQTkvOnhUS1lRU0tmKSlCJiw7NHVPcm1OQkxQXWZCYnJpb3RxWVs6b18zMlpWSDMuSXZ5ZE8kYTdQayJ0Q3o+Uzp3VXsvaU1CaXg/WSxsOT59fFQsRV89WXc/dlp2QDRjOTF1Y0d4'@;
put 'L3sxPTZOYkNQaTlJQFVaUF5NXlZWMF1oQzV0R2tRU3BvY0ouZHVOWVVOcmBHIWYoRWp8MUUpTDNnVkh2MCpvVXYzYn4la3YyQipVTGxjWmQrQnJMRXlfIiptIkJuNUIvcD0vUzc/SXd1VjRrOXQ7ZDJINVA+bmpIL19tQlJvI0t7bV1OUkpgbmspQCMubnVUQTo9TE5YdjNaR3JWSE04KyJzeEIq'@;
put 'RU9QbDN4c08zZWVZJlYhPE1wXlhvZVlwJit2IldVOD8oV1hkJmdYcyVkY3J4dT56I3haWz07eWRKMVI+S0U7ZlhubWJRQmspU1FwSFl1ZyJrZGhZfSpNfUM9UiRKfEMxbyk5OE5ZTS9xZDwmNE9kPXdnOmRII3UrKk5PPz92cTJ3NkRiITcyPCVDJCV1MEVYcTgybWdpaX5YVShBMVM9TE80c3FU'@;
put 'WWxdaC41Nzg5d04qKHQoNlM6ZyRTNGVnR0peRUA6M0BjYSMhUHcpZ2JYZ1R4MFtkbzNhPDpWcGBTOXBOKEdhIlRLYkwiOjJpRXtLUUVofWJEXyteKVlhOGRtKlFLQGgybSZ1ZCRiUTlzRi5sN11yXmtzUC9OdltOR05FRHVAXzhJY10zT3w/X0xFYSxeQjorWSlfSj1dNWhbPldKOFV8ckw3eCFG'@;
put 'OXdnKFtyP19CeU5pV1ZWdEoic1d0SmBBXVg/SjUvQ1ZIQipfUz57R34yeEx+KlI1THlDVHRidW09IUVUXyJkPXhbdERVLEdJeiVhLHJHPDFde1pyRn15bVp+VU1TMEZjcEMiOGM8dTFfJGh7O0JxeSZ+Ky9YcWs1VU4idkZdNjdAU3MzU1VrYTk4bFN1InwpK3N0elsyKX5IK14lOXspJT9mPyo/'@;
put 'M1VQQ1IvYXV6JnRySkM4YT1TdnsuNjRBWT1FNXtwUChQVmk5R3Y5SXs7fE9KcnVaaFhgWk1iTklxPWJSUlE0UDFZMjJ9fWk3bmZ9NlBrWCNYdS5JLzxeZGtobHUjMyUoQTRTQF9yImZaa1BYcExpfXEmKnRWYU1Cb3dzW0A6Ki87eCwoKVkkWnEpYVJnUiVWQyh9fDRLZX41W2dFITxlRGc5OFhR'@;
put 'VGNTQGgiXVlWKzBEWmhFLkYjZUcrdlgpNis2W2MxMGAyUVUwK1plbjR6ZSlndDZhX3lUcTJROHc1e2wsO3tRUHl0KSJ5eEl1SmA3bncrdGUuQlhENCZQUyJCTCo+ZyQqKFBaSjA/OENFV2pxQD57SmdvPVV6O0A/SylpSjdadjw3S2paQkhIfWFtVWFQTE1EWiYzV0ddYDFRKX1ocWc4T0cmaygj'@;
put 'YjtMdUBzeG5EcWRxQncvbytmbEwubSMhJjUlUVZzbW5ud0FKaylDdUYpcHZnVyNYQCYzPVB2cUVXPHxmT2FeaSFuLixRdSEiZFJkQGY8VTl1SjU4fkFwVT90e3VhQls8MD1dLDB5OUx7IVtaME9wM2dbakVLMkR2SUxfV29ieCpAcXlMR2NyaD4mIXxnK3BTKStvSmJIV3IjNWdvUCk0VVRjZWs4'@;
put 'TnY5N29VdGQ2fSluSEZhYTtLUCg7LDtkVyEmaFdsIWprejpfPmZNdHxUOSQrVG9LaEt0alVZZ2guI1MxRkFsVD15JGRkU3hfRlIvdmovfCN3c0k3c2wkOSlPMCVAYmxPYkhQPH56LHwoZjZKazt2Vk91XjBSMmM7Knxpfmksem0xPSoyXVtYe29abllVWihLPHlfLHdKIXtFYzsvWlpGV1pudn5K'@;
put 'PT4vM0t3PiNgLDNYJU81YVJwTCp0YF00RCxrVS5lXWZaV29eaGBxeHIlaGw6UDsvMTFSWCg8KywlMj1GaUx+ZD83PjtdemM5djVQZnhCRjcuVVhjdkdUbkMjJDU7Ry5AY2lyNHFsUm5RdiRhWGtGMjlEXWUwXWV7bHRFclkhajJQMF5iTFA3dzZ2OSMlLntjdFtveWZuZjVTKV5TOExQNi4pQiIo'@;
put 'KDs1R31jbzJsJGVueGZZIyJjOmxxXm44YmpPYEJpKiFsY3koVlhUQWN6dHdRQCZbdzhbJitfUDhJdyteNUpiJTVxUiJvYkRCbTx2Y0NIXSFlI2lVc0NLdUdVIjxoPjJJZXw7dHEwMWFZIyYwaGd5a1YuK2VPc1ZEdSE9MSh8VywhV1dIQ0JeNihaNHpQKDlETS85Yy9AbnJhLGorOyhiKFdnU3VM'@;
put 'c3FBZjxPfHJlYVE0PThieFteKCx5IWA2XTV7KTlMWHd1WEg+ZX1bfDJrdkwxKDM7aik3WD5dPX5wI0RVJUZfcVorb1dDPVh+XVdEd0trY2NFWyokcTxFV0VzVEJTSGtfYm5AW0w9RUpQNz0yYkVgPCMhWkIjUnJAUEJJTT11JTNqSUZRayhHLmtpLntfaD9uU1VjWUVjWS52Y2ZsNUc4UjohInUr'@;
put 'ajp+JEoiKHpCTWZURUJ5SkokMmtTamN5aUgjUl1xbnFhYH16SHFTLjlgdjsiSmNKbFhFTHkvJFF3Q2xsVVN3SXYxKUlXU056Um9FdGlxTjcwQ0oiYExnIT1CbUJjMDtjR1NZXW8vVCFzcj16en5LKCx9cUpEZ2cmbXQqdlY8WjA/XmNzR3s/QkVIQzNIRilqYnt+NmIhfGZefHs4S2NlW29LTUB4'@;
put 'OSI7cEdTQ2dhaVViNVlwND0/VjV0QlBgIVZ5aEpPQnxIeFhGPWB9amEiPSs2e1toS0t6ZD1JI2RlMG52enArXkFudFY2PlZ9REFwWDsuaGVQaSNaJUo9fV53RXd2cDpNTlMlfnVKKD85bjZzbE5DKEZ4S3hIITlIT1FzRnNpdXY1UlRXVWlFMjxILzY8bClXIkljU0BFM28iOjdoXi9DWiI1cClQ'@;
put 'OmxAL09fbihPS2hKckI3YDVUdnJ4OVtgbDZnY3pEZ1gkPkY/Z3lIMXRpbVZ3N0U/JmlDPS4qeHVwZCFDeVg+JjIvOSpDaDkyYypkaSFHXz9fODN5YyomeiZvako5PyhCVDJFa35PZU4jPlluIXNvJltzQ3ZXNF4/PlhBI2ZMR0VVSnVwOSlBWFM1ZV5aZF9MIXx4N24vVmwpMU0kezpvM09SLHIv'@;
put 'NHI1WVFsKDtqdGgxWV9vTjBKS0BaOmA7aHVaVXJmYGhYaC5eV09sMEhJe2E/VjtALEFmLkFWUVdHTlJwW0NeNC5UUDNTbmtsSkBfakZrZ3h2dmhsKHpVRmpjZ0cmWlU7fj1JV3lgPDVGJjpjQCkyZ1UzIkFIUCs1WFYrW3ppd3UlM0RxZzxwTHB6TDlTc3JDbWB5KC8lZE9wW1heQFg+NHZNW29I'@;
put 'WTxTUHp5fUIsel1EZlExUnRMZT5LLGppbGE0WDwyUzAyX1B9bEsuL0x+JS9ySC8rKzE9blIpRVU0X0lOWGpfeDRMWWs7aGtYPSo+fisyLj5vOnEheC44Yns3NHhbPklTTCN5bT1FZSMrbDp4c35NZSUqNk59Ikk1YHhLZzFNR3ZKK25wa15PM15DL1ZYaWBwYkRINnw5RVM1byVvME48XXc/Ql44'@;
put 'd25gWUg4cTBjOGB2ZW1dXS8hM3ViZ0pGKFZdfV1YTVkweXIidntIdHVNfEtgant7TFQzYGk3QHlGM2dbVC9bci86OUd6Q19wKU1ebC9obWdDPExZa3N5bTVyOUU7TXZ0UiJBRjB2YyxFM3h+b3hPVSNkQjhPTlZ5eU55ZHAjYGRbbXVvOVZ+I2spbEMjR1h+RzhaOS9CdkVGVXA4eF9OWV5RZl0/'@;
put 'eilYIjY5WlQjeSVNTjgvNitEZzxkUVhsQDhLYntFNzpAQHg8ZTM8WW4kZClsa0wuTz8lXThJfHZNL2shNnx2S3JEeGc8emkoMkMhd1soYnYlSF5KZVhrW04iIk8/SWJrNEdQZD0vPTRdU1AwcSFhYipsSEZrVS5bIThNbjsqUndJL2ZRRXYrQjU9dn1Lfnpaa0E8SipmMU9zXVFtODIyO013Nzcm'@;
put 'cTJ+TyNUeGNhNEN3cXBrfHA5Lltyb1M3YmlXWVB5d3VDeV47fjgyeD9UPzIsdSlHN2doUC4rdnU0RiUqeTV0eD4rJDRJY3s3Q0JnXTFgQFB8UjIxeXQuZz4sfnsqdnE/bjxuezgsOT97MHc/PUptK052K00vMjVKQnVlNFRoYExEY2NiemMvNCtnczIiUjtgbzRIfD5ZMEAsI2ZjSWNiOXRfekhK'@;
put 'N3pbJk5kIS96Nmx0N2dSfDV0fHVmK09pejMxO01Mb1t9WGpwZGlFcSY5T0ZkVHVjWmEzWjF8STJGKHRnXjUxRH47Z01PNjJ1JU13VnNfQ1liWV51QkNwQWYjIV9udmYwfTZQOHcqcCtGVjErMCxieGdEaiNFbFIwe2U8RSEicmheeG0sZ05IRE5QP2REOHtgIWxwWEpGMj45NDFqLmMvMyVvbVto'@;
put 'JS89VyF2OGVIT2F8fEM7fH1LNyVbPmlBSmpHN3IrWTJQM0dYdzcpUXx2Z2JXT1VMTTo+V2d1VHpbOjkmaWExUFNVVjBGVSFgL153T2x2PmNYO0hWWEQpdWVrJSZSP1Nge256XS9KMlJVbzlbIk53Q0wzfTFaOE9jbHxlV3c0Kns4Mjs+Rm1WcnRXbkhkfXc0OnFac2cwYkBgT2tVe0g+eUF4ViNn'@;
put 'U2FGaVRHOUk9T20/NlZrNj19Ny90NFY8OXUvYFJtPHhbTFIhd2lpXk0waERfRkJHKEU2WVM/K34oZiZUJUd4ZUUxVHg5ZEtyPTA8bXZkM2JuUE8iOStpOS8wciglMStmdDIrPF1VayxkITxja2d7Nlo3Q1hwI2J1M3prY2JfYyohPzlOOyEiTjF9fGVFP3AkRUg6RGgwZUk9PXJGIWx2MG15UU5J'@;
put 'WjNeQ2N1PUNtWXZiKWNmXl9FLEV4TDUpIT0xNHx1Tz9hOlAkW0hqcGdBMWJFTFpybF5sOjVELk5LfXM7Kk81YF8wTVR3RnV2QSVCfC5idUs5bTpTdUtrNWt9SkI2WWVHPnY+cXVDXmwuKFdlR113SiNaPGw8czpMYGIpRGUrcHYvJDFyWikxU3M9I1ZDfXV5VyxpZHZNTCl1cUpSS3N7Mix+enpT'@;
put 'UkxwQUMpNEk2QExFL1Z1aSExKl9YRnk9TD4kaSl9TCFadEo5UlYqfldxW01keTtiMjRSREIiUnp4PDVhYHlkOGFyTGozdURPOENSVC5LU0NnbTxKRTxLMHFzNGImdkxgbkdsUD5LP1AvJXEpXWBWKDJqZmFOO2ddR1Yhc1pUak9jU2FkYlcmJTdpVmd7UllZWyVebyFmQEB0c1JDelFSLzZVZndQ'@;
put 'PXFmfHE4VGI4YV48ZGVkSngsOFZzTnc0YjxmfmxeWzxse2ZmMT46QFdZUF47Zj8hUkd0aTJVKl4ucD9bLFZHITpPJWQlTnA6Lnl8JUVOcF1XMHxIa3NvZ31yYlE8YVRTNGxjbztkcW98NzQwUnNhajNXeWxuZkF1amdEMCM5NEBpP1Jnb3wuMiheN2U4PU5bU1BAISt8PFU9N2Flb0A8SSZbbXZS'@;
put 'bWhWeGA/YndgL1lub1lhOHk3cnBIMzJaVX5sdV0/Jm0wKGdVfWtpaVZ2JD8sYkVpJjl5NEokNSpCWSlPbW9senBbKVteaXp+ZD0hb2M2LkliVWF4JmNXIX5rbkxgPUxEJXVmbGI8UTNsPypnbis6ZllaM2M+NDplaF5QXiUwWUxybTlxMV15dXJCOG0oXkVVUFRWYTJJQl5+OiIjNms9MGtmPjE0'@;
put 'SnZeJHVrZUtNQ3t2XTszeHNtS1dzayZ3RT9jKyw5eUQ7U04wWWl+bCp6MHI4MHY6WkFsJWczYig1SHxBKCohVWtaKkJBYGNPUSp4JG5ubyp8NEg7TSglYTteOU06VH1NP3tofnpDL0lFO1s0PXoyIVZYVTBiUFJ9Wz1KTDZMOVBVXXt3ME5yUW9YZyFpL2w/aEBUPj1lRzFec2lEKCJEP2JkcHFA'@;
put 'fGxNQEs2cGApUzI7PVR0c2hhSEBpKXhdaUMoajNrVFRwJWpQfE5NMGtWLncoKilgJE0sRSYoUnNfekBUYGZzVnR6P2FlXXl9OHVxWUMjK3dbSll3YzdmSUU1OExQI3VzTSt1dDY3Qy8hPk5CfT9scjB8ZDw+c3c5Xlo+cGAoL0N5WzJ3fV1fJTAzXltmKHZaSTg+JE5BUSJXJWo/YXVIQWhkZSNp'@;
put 'cyohWWlxYV11Y2dpa2trU3taVDtiWyFOU1ZHVH18YGk7cHEwTCNeZVluOzEsRCojdm5FMD1bOSR6L0NxaU1fKSlRKShhQ1hoaFgmdzYxTG5nO1Bed2lyL05IT3BnVEdXVGlFODdqLypsY1VZbm16OSY9fUtIQiZ7RCNqKm4pb2JDYCJWPXJhJXdpQywlJnUuVkJkOi89R11gKXIjZmgjTSVGMm0m'@;
put 'QEVMbGtYQiQrcUk1VyZAb3Q6OTxPakJQXUlsblgsJTJESDBWWjRJfG5JI2RWLEY+a3VGQk4jZlZIdl1KXVIuVlgwSCM+PCYxRSRdT2Q9N0o9ZmJ1MlA9UUhlM2RlMWpVZm03PVVtWUxSaXJnejs1IXdCJiZAUkRMJHBHSFtgdFQ1QUFRZ1tmIW5RI2Q9R0JlbC5sKXxAO2NjRVhldXNudHFGe0Vp'@;
put 'OlltPzgxMFhmN1N+cEh6ciJZb0g5UiMmdkRLcThbIXtrfFlna2QkRmpLUnk6a102NDdxej0yIk5Mc3FTTnooOTU+XnY+SXxkUiNgckwkZFtfUEthOTQuaF87JStpNStUSEczTDx2ZTtdbE53ck1tPWNiSGRrKW5HVk9XMnZKeGIjcU98OmNxaURXe24oXi82ei5BYEhEUkRsb2k0KXpJJm00YlJH'@;
put 'NCV5ZWBZS200S0ROVGVROkNiazY/Rnp6cXtCbzM9LmY3ckQ0ZlZOJCtHIUpEdlRveSx+PldjVDZbJHokdD8uWDsrMm85VzR0WnZwJmFuM1s/cSs3Umh6T0s0JUpeJVlieE4pM0MsKC9qWFVeXXVxSTJoQyUzcU5wTEF2WUVVWD89QDkkW3lzWGVNImNZUk9BNTw8cDopUkZXNyksS1hOMit5SSVY'@;
put 'SG9leD49VCEmY3A2YVNwOlZVP0xUUiNyLColenhkJC46Skt6fHJtYTlIJTgkQFA2WnlecFF0bEVlPj0uUGNXYW1vfWpFLF5DcW59fmtLQXQ7fXNCMShUUVo0Lz92ZXEuMWpmQls7M0REKnwmXVs4MEshTFspZXZsQUNrM2BeIWthQ1lsPj45bzl1ZD1BaSJjXzMhYWtieDxGUzt5IXcoM1RSYnpT'@;
put 'PmYwJEdYYzs+MThORXRkWWcoI1RNdWxgWjB7eXVXbShsbHshL1kiUjNeMm11ZyMsbG57K1ZaJkpTT3NAcG1yWWFgOVJLV0hPU2l8YVBMfk9aOTtFVFNZN0MsfHpeMy93VUdnKFZDTygrKT0jdEwrLGdYMXFaSlF1fXJtYC8mTEMqND8qSW1oIW5hZmtSIl12QDV4YH1bdiVmMUFJU1EoL0pBWHki'@;
put 'OVNXUEljeVhKUHtCe2EpMHhiRVRWNHosKVgpSm5ZTFQ7VW4hTEAjTX4xdU0/X2tVSG4mPUZYSj5lUSspWH1QZlBCfDY4I3FCZnFBbSN7aTQsVl94ejAmaUthPXpSUnhLQWYuSEFnSnEpZVtiOSZTbnlkNT03dSF8PEtUSjVsUHFUYSNeN0R5bTUxO2U8b1d6TjZ8WnZGYTJ6UT1ZaUU8Y3FvK2lI'@;
put 'UmklMzpXN0B6eCpmKzRzX15SPXBScilFNThISClkKXRXV3xvYFU6cUx0QEB4YWd8anRNNUZqNFRuKTUhMDZ6OFg9QUg9PlR0PyIoeWshPCFsPWRmdkZLNygidDM9dkIsPXc3RSlGOm5TRnV7OE5Qe013MDldeD1bPGcjYkciNDtgUDpgMGhZQHAxQUkiRFgsIXVGX21kQEpTMTlSZWZmeCxtfSZr'@;
put 'VURrZUUhPDd2KFYqaj04TSlPREtLTjAkYl1EbXR7eXhNTTVpelQiXWw5VyksOTlCcjxtSF1ML2dBS1U3dDZbXjR4OzNsej4xPmVqfEYkMFQpd3g2alNCdjg6MloyeUFtYThWWHYuViYhVnNFPlR8STBYSGY4MjdrLkZ1P1U9XiNBKkN0MFpBQWJ4e2o3NERCMm0pNz1SSUYiQndAaXlCR0doN0JH'@;
put 'Q3xZbngxU3dRLEtHMVk0fDxoZnFYVEhncmJYe0tKLG92Z1p8aHlnXUQ8JCtPeWdNdVNwL0VFOGtOY3JvRVtwYjByO3wxTlpWXk1rMW4zOzwmIVBsOyV+X05aelRWLGZbMWBGITo9V2c+Nig2KHo5bGdhc1tbeU48SE8peis0bWRxXnBLfnxlRn5XVyt+Zn56JG1EPVY0VC9TNlpuYTBkLHJ4NUl1'@;
put 'YVlNeVZAfkpfSUMobmIsTUx7Rkl1RHdlXzRnOndFUlpoKjI2dzYmSi8+S2x6O2QkZnE6U3QpSnEzOyg0JGxwZ1EqTD1jbSNdeFN+OXombHkuWERIMVRITUIjSEcoKkoocGElZEc2ZW9yMzA7eE9SSDZWYiFDVGl4aUFJZCQ8KlYxSXl4VllVJE0iKTBVZyV4KlVmeWRQbkYjRU9geV8uKlA2KCt8'@;
put 'QjRQPUchYEU9PkVeQD5wamN5cWBecHk9LFN4WHkhVFtHT2pxRTwpSE12PHdwUEZAe3FwTFNocD16b0pdWmo0QyshYFZLP2BXSm0xJXV0bXAkX0B9P1kxNn44OSsyR0ZgVipsWiVUST00dU5oXWZ8VFs+OD5GIlp8dXdCIW9EN2d7R2spakFfWj9ga11POmwkeVRyNjpSOHpdTWEkeUNsLERLeE1h'@;
put 'e3c9aDx+WlgvLnBVMklBQ1M2UTpiLFdWXiE/dkkpKl5SVT5iYzt3dHZdcGVbKFsuPkx+UU9YUkAjSzl3Kl1veCtQKlkrUXk+XzZgOWxfRGd6I0dsbSlOaWs0XTRXUDN8UGYuJX5rXXArcjVPO213My5kY3NvR0FRZHdrQiIhZkVmX3tvZHFGUjklcSUpY3A2Z1Y6KCI2MFZsV3YlfnwjW21bXnF7'@;
put 'd0xWdU93WUhMVUBkV3ssZzRITlNXN0ZJeTZLeUtTRiRlU2dXT3QzcXwhRU41XmBeUVpxe04iRWZkOVMubl5mOithSGJ7YXw9SnBdLG8lOTNpbkhnSUVmaCpDJnM0byxkZyZ8cWI9T3xQcXVtQk5OXVtCYm5Ec1tYSEhtPlVXOUEyQ112KkU8ekk1XzBmIWo6NUlWKiVxOUBkbU9dLjl3WlU6ZzVn'@;
put 'alNsNWA+M1BmemNmRSVFKColQzAoNSlrY3xLL1JSKiVPWzpvVWtmQkt7Sy59I2kqPVcmWGMjLF1vUSNGSDYvSkVnP0l3M2pHck4sVFEjTjckI0JQTixYWiN+cENDc2RFX0hYImUyfmBHdyglXyxpTnp3R29+WkpmRkpLKlJfKUZBNU5PbGh2ejE3a1YuWjZ4X0NTQ01SW3J7NX42cjZDYk9+Ikoy'@;
put 'XXROY0pAZTtdUUVPKEhXe2w0NSlTcSFEcF5TSmNNPE4rfk9xMld8d2dfaGk8OnJfZ0oqJTAyeTtwU0NzaDB9dDRwejMrR2hFZTlmN28/fGxjPm5EX2JePk5gZVlxXVNleF1yLmNbS0ozOihZNisxP1FjbWIzPVYsIU14L35aYjN6QnQ8TyZtWzlQNCFbZkghSk0md1FtTjowemEudSVjRkkoUDhj'@;
put 'QE89ej9tLFRoPVBgcygwTWBiYGw0fSxTdTFPdlpVNzFadWZBV0d+UmA0RHxEUjNocUxsNHdgOE9MQilxNiNZVDsxRC4pRXc2OyRsXT5+TjFdRGh8eDp2Z3VsJmIyQ1dUNk1xX2BoTT11PT9nPHZLQjtQTXhMdCw7UUtEREB0XVc4QjA7ZjVEdT1kVSNyZXtwKz5NZmFDMzI6MWRuPyJSZW5tQD1V'@;
put 'RkR7b0BLWXhIRlhhaE50fFtUZnRrfEJ0Z3xdck9kJVg3XkokOWhtLi4vU1ltWV1XQ00oWmE1QSgkVkxlcHNkUF8qSW5qKUQkbk1VSTdJPXkjSlFlKFV4S29iRmx1QEZ4KGl9VjIhZEMmaXg3Nyh4ISY1MkcuQjBYMT1uYGs1TDFgOktQU2olNmEkNUEkRWN+ZFVALGJrLn5fZCp5dilkPFt6X1lR'@;
put 'IS8rU0VWbTAxOjgqUDN9NyM5MEVASl8oW21mUmgyMlJhc203KWlRXXkraF1hYU9FMEliXT52LD1HIUJ0UEZwfGVYISV6QE1ZWihuYE1aWDRuXk1yKT9VVyh+S0dHb1twNn0rXmt1YiNveFZhVzRffFR6T0NLZXZvIlJGITd+QCQzRTNbNDlZOFZ8WXlqLD4/UXgoYFhUVFdGOzV3MyZRfmxfTjRx'@;
put 'JWF8bGBhI3dtNFVQdko2Z3xuKWI0KXM+bywvbEVvcz5Yc3Eld21tZCQpQUpXI0RkRTR3aWBhOXQ1Pmk4dTYhKSk+TEJSW3U8UzUvWmszJSIyRkF5N3p7SVc/OzMxMWgwZjx9MDYoM25wQW5ILGdNbl8xUFhPQzVFZTthYTQ6TEtpPUA3TnxoNGM+bSlpX3JEWmchUGs4WyJLXmFnazxvLzhFM01o'@;
put 'amA2W3JvR0JfPSFoQ0UhaFFUaWFGR0xDJGIwUm06PWVzPy5oZmFqTjtxcm9Veik0OldKQXdNYksvaEpSeEg8X09qand5Q2UpbDlMSCFxMj16eEMydCskZX1JLE9mNHg8fThFOSVvbTMkVnV4aGlvQnUqSig6JXI1TjtrTDQ+U1IjPSw2ZXxBa08qKmgiVzMmc3MqdkxVOVouZVF3JmJnflZmI0Y8'@;
put 'ZDpON1EiNngzVUc0fU13PkF6LyFLQzFLL0Q8cypKNV49cnY+MyFbU2FyPjtkbWROZnE4RkF3Xz1ucC81IzlHY25YdTxdUWRXRFE5PG40dWJSW3h4dmRqbVU9OUhmW0JRKGE6c2RQMCpjb2VJdFpaPlM1Jjd5WlVHdiJlcl8icjJfNHlqbXZ9cEcyWWlpfUNkY285ZlloK0xXWUd5N2hLKl9Nfl1N'@;
put 'KFNkZmR6bmFlJXBnYTxAdV9dYl5hNl59MldOc0ZOT35tLFRiNCUiJihqdSQkezUxImVzSG59MTpTK2hCS1YlTiRnaTExfnYrPFQsa2N5NiFTISNYND1wWzpyRGlXbUBhODF4Z11zflRaX0xoSjI0OyIpT3o2IW5ZU0ZkbD15dzhQKVpYUFEpZ2tpd35nJWgrc1daXWlFWEoqaGQobmp0bno3d198'@;
put 'XSk6a0BfZiFTZlF3fEYhOHdBPTc+O15HejlgUHVQTW1ReTZXTzIlR10mIihFREVgMHFWVC41YyNiJmlhfEdYVlE6Iz0oT353Ymc9TzxBcyx+JTo3LEVQW19PVFsoeVNdfSx5YCRXeFRZWTUkfDwzO1I4LyVwQThHKnVZLzxdMWZ4TiVWRzBoPj5NNEUvZW8rPCgjM3xGI2BrQmt4I21ELEh1eGxI'@;
put 'R3VHKklRRnciWD1RYzttNn44Qj9hWlNlTCMmSFRYbV8wRilQXlZTKy5KPFlYZyt+YUBvbW1yJTYiNWtgUHtaTi4sTnFkJjwxdzsvbitbM2dGfT0yLE1Ua3BlVU9NcmlHdy5nK3ovNip4O0BOWExNMnhDcjIvc1RzMUAzQ00rKy8udXs/aldQJldHbyFZUn0vY197az4hMFd0eXlPO2c3MUhAJHtq'@;
put 'ckZoMjhNTWBOdWQxZUBbOD8iI25zajFRXiNaMnU1Ukh0Jl1WX0A4dHJIbDtuVTl2TjhZJTA/TTpuIV5JSGFNa29RMmxeJlR+Wj1oYlMuZlR+NUtnJEN0TXpgMlRpMk01WUUsYTImcVAkdkk8KHA7aVZTbmhtNyNBVWxOQm86Ml1gMjteSixMZiF6dF1YeD4xPkN8RXZMPFA7a2VHKU5UYyZAKDo+'@;
put 'UGY5c3BHTWFYQF9Nemh6RklzTDlRLiM+SyNYNCRLSjtofGZmIW9yXlJOJSkoP01yb3kwN2owQy5wVlJIaHVySHBYaWZGYlN0aDBpMDh6enpyUFd0ZWxfbTx5Tj1BWU5gSjdPXiI+YSNAbnFsLFkwfSZLXVBuOiM4fHR8Z2dYPVRlI3R0cDdMVFhPMGU5c1BQVno+TE9Zal9+MlVHI2pzOXkiI3By'@;
put 'NiZPPG9KTmN3aWVIeiQ0JkwqNDVYKms9ZURGdU1VNTkxYD9ieE1keTJbVl4xVmw0UWpaeE1WOCg0RVZDMVJ2OH1MTC9nRStlc3dtVkIzeyIzaD1TTl5tIS9lZnxYSkJsYGErRmEqNylJZUlwVGRUQ2kzKTJ2Q2MycVtEZk9Wc2I/S0cxZEImR3dMKExEen1GTW1ySi5VZHEzXS5LdV9RWHNJJF42'@;
put 'WjBrOF4iWjFab1BHRFNAO2wpVio8YVc6S1VNLFhlaUxBNjMvQHtobWdGTWVNaDN9USoqb2UsKSJGXzkxOk1RVDJoclQ3SiI6UmhxJVd5UF00UEwkLl8+Tl5VJFF5RyRwbVo9bW0hLn46TmJJbmxIWkFrS315LFFGTCtKKFNoXjRUXWZFZTh0bFNeSD9lPk8vWUBefEJ8ekw4fElPeCZuUntUNlUr'@;
put 'MDtuN11KbkhRdmpQKHJSJDdOMis5dmxmfTg+bWBEaX4wU0JwZkVQU0cyTnZjV3QrQkFlRVE1JndYNV1eWUxOTDppRV5laXxiaFAvPEJKLlZlMEBYRmpWPnN1TGVzO2Q9JUpTXU1+Ui47O3ZaZEE4WkVbXjAwMSRdS081QyQ+cUJtUWY3KGx+R3lHe2cmTVF3bDA/YGIvPF1UeHAvQmxCOC5zPFRg'@;
put 'dXxUPUk2e11+Kkt+K2NlPjwjJFlGc0FVQjNCM09MQjxYVl9rRCVVYEk7KiQ0VykxKWJAJHw8JT5OfiRFeklOUyJOfWdPQnoyMjxhcWVKPCprI0dxK2Q1Yyp+aD0xYSx9dSZpK2cpbEQ0W2gmaHVvbzJnVklsSUJZdkR8ND8jUlBzR05xfjZ3b1MrPm5pX3ZVS0dLUSpRQyVUPyV+WHQrTD42TVMv'@;
put 'T2c0NHRXKmlOb2FPRENOXXcwc1JpWShRclUxbyYqXVAibmpYWTchNk03M3kkNm98SD00WGlRJUBga0YxPEVMZGJPO2pwdDYlaiZnL30pJThrYlpLMi59NDI+eSRFJW1rajZzU2lfWzo0XTh1LixiIkRPYyp3bFoiYGFGPWpFSkk4eHY5OEssPXJLWCYxR3ksaHpnV3dHfU5AYl1ldW19aHVCekxR'@;
put 'Mk93c2pORG9LaUBFNy9yXnwlTj8me0dvIkh7X2dwYTJzYlI1N35YfXVNckQ/KlZya2BfSVp3XUxuVEplSm9IdkVNbFhGYng8fFdLL0YhQ2BjKCFjYSRlOHlEUjQscl9HJld5dWxxVk90aDxfXyMwaSlWMHl3Kys9SFQqdmhgUl1EU1BtPCw0TlhlX3hSOF12PXFXIy5wVG9ETHFRZCxfez5wYXha'@;
put 'I1RZKn4xI1RRbixJRmVWdl4pP21+fjp4bSIpaTN6UFRVbTNzL0glckFZMy4zOjUvOz1ufFBAQzN+MjcrNDMyNEt+I1UmPXo/OnQxclNhOlBgY2U4ODxbaF04JjpdTFlmTEIseVIhYlk7RSFPZWlSY3whJSRmX2lJRT0kKEIudnRNTlg6aWBHeip2Q0kvPyYzcmAoQER0NlU7Ojk5TTFQRm5GRmd3'@;
put 'RmozWE9AfVhlRHBuc3I9cjRxNT5SfkAzI0JJRWlmbXYoWSwiXmZMITAiandmZyhjSVR3ej81e0siciV7SlFZWU1hMGl7UTFrKWhgaSp5ZmlNfSFINEZGfnwkWVRJNmEmU0pyZGMlVzleQG4lTl1DelAkYlI6XnIqOzp4PzFoQVJpfl5oLjBAaCx8IWp3Kl1UYl5BUj05LkdYVTlnOXo4MHFTeEJB'@;
put 'IWhLQUYxLjhZZUBjSV18Uyg1NH4yIylKJSJRXzI1X2R3KFVKVk17YjdLdUxkLjY1ZC5yL01RSG9gXmJjQnUiUiRALnhMK2VHbEpkSDFdajBjUlheTF1CX2UiaUtWOywjenksY1ghaXxPYk87WiJKOCMiU35AO3NDXSVCXW18UFVxST92RGc/R2RrUyN4YTRuSnhdb2BTWnpwSTUxfDNQYHxUMjdN'@;
put 'RUNOW10ham5eL2h+TU8mM1kpUWJwPnh5MW1gV2ckPVtXPFIoMF1qZFYpNGI9U2BVal59Vn5faEx2YTt3QEhLZU17KzFfO1pAIXsvSl5jNUoiRlkxT1dOcjIhel0vbHRaMnooNm41NXZCamwsTHV0UWdNKnEjeXZLNF9RPzY0V2ZTdWZPJXR4WyNYJD5vXm5CKT5neS56RCQsSEJgMFM1JXhTMEhk'@;
put 'Rlk/I11MVy4uenU5dG9hfDglOHc+OSpvbD9SLkFzVypbeFRUPnRDRTBjYEdMaTZ8d2QzY01xVlthTGNjPyRZYEt0KV8kcmN5dF1gei8wYT47YDZCJVEwY2g2YmVHQmNkXTE6cnQqTjhnX1ZKSHVee0VMelAjTTg2WC9xKkZCQ0AhaDo/YXMlIzBpaWhfWk4qOWwhPD9+WUMkSll7OVMwSnZjbEtI'@;
put 'ZHNPP3dCNTsvY3lTVzRRJGpEJXJ2fFVGdEQ2Rzxzbi5KJUI4fH0rV2MvbXdRRHlUWHM2ZChtS20lKCZTPT93YXhBQXRLOFZKRCVQY1c4KmU4ZEliTlt6UHRvdkNfVkhgQU96WGpNZTVuNllPaUwxVVtoT1NLclJGTDAqK1thcWkyKntNOUsqMXlVOXdObDMjJV91dUx+fmJpPUZ1TSJUPjA8MVgv'@;
put 'Sy48V2dVKSMjPyMsUU12eTteTHIzRHtBZXx+fUN6TyhMZj9mWldSKDhlW2RYXnpxTXN5KE0hc0tKMlZmWlBIcyNPP1lHaTBERCs8N3VJaSpCZVd+P0hkP3hiLkM6M1lVem0xY0BuLi9gJX5RKDo1RHQrZklOL15aTyNTcWZBe3B0eVVKVjQqMnByJExPMEUzOHlaNFUoVG9QNzp4MGwvc1NCOHxn'@;
put 'Zzk6Py8wVFIlU3h5blp1VSlSJGV0ITkwfjRUV09JQVcrOVFAbFcmYzFQaSNFJTA0dSQvL2ZHRCZjcVRMOGNzfjRAUz1QXVU+Smw6QzFMY1JlT3A1YjJQbXxQPT1FXT9rdyZecns7aTJbRVskVm46dnxWSk98e0RPd3MybUVgR1sqdCY5YWI/UFJ7dSQkal00Yjh1aiZWYVBBMTxHRyVJTnlLd0pD'@;
put 'OzN2YV8yJm91byUhRG5lOEVJMGYseEJyaUBmcn4/N3IiSiNUNypAbVhBMGR8K3A9QmZIX3ZDJmNGTGZgJnB0NkcuT3ZKKH1DZG5IOilhKHpMbn5uaVJJZG8zbEd9REBJO2dzMDA6QF5wb1ZXZjgxNTVmSTFAdTFzNCgscDs7dV85SzQqeXc3e3pPczUqdVhIdlszYWJzNkUyViF0TGs7TEx7aXla'@;
put 'NSxEKm8hNl5HR2p8N25zVzxmLjhObEB7dUcwXlgkTWtAIVBFPk5PNzZsbT5xYWFXQWtIcEY1YiplSDhbfTExbC5meCQmWCp3IkJxQjwjcjhtekwuRmF0bmMkWD43RHt3cVtuSyUlN1FqN09CaXFvW01bXXVFMkE6QDEzayNtL1RAa1VRO2FiUUk5PUJUJnsxNlgxdH14IyUmV20qdEU2OEUlfGxs'@;
put 'OFI5NG9xbllRfnozZk08REdkbzxIe1hRYDpCU0h+cjkwUXE4RWc1X1NxXihFI2w9RlQ3PzMqaHRmeGhJMmczeW9NY3s7RnxHKW9kKlBfcihOJjY+JTtsOj93YjFlXSZaektAS1lEdm5rW25uJGx2YSJhMWEySFo8QkxYV2RyWlVfUnl7OSM6R2Z6Uyh1eEgrSHsyZ0JFVSxyLkdLU0c7WHJLIldn'@;
put 'M0J+VE55Xjs+L3FCUTY6KkhSOyVxemZkKnt3JmxWXXx7Pk9YS2xOajtHWiNOZk44Qi4kbUdQUCk8JER3fUlFa0sqI2Qwb15INS8pM3pUOC9gKjRoekNTJFMoOU9oLHorSUJSUERISyVeV2IofVFreFArXyM2bHM5dk8hNy5uNSFPITpQN248TEhmU09eblVWKGRqUEQjSDo6aG9kY29OPFgzNiso'@;
put 'NFdlYCsoW0Z6NEhMIz16Q3gzRjFOVU0md0B+STF3YX07dWQrL2wpOi4sSVBrTEYxVHgxdmpFI3sme0Nye2gsQjdxUWRhMyx2fjEweU43Kip4UVtGSHR4ez1RfV5nM1JsakImbXEucnB1P0lOajVlL3k4TFFXUl14RV5kLDxELGlsTmQ9eS5jRlM9LnlLPG4jPjt2InsmQDVEbTdHTTdjfEJlP0BA'@;
put 'VFgySjsmJG5VX3cyK3ksaz5oUTJUMFQ8fUdgaFUjS1BrfiU5LHs9QHQ9NlRlLzVAZSlfa00yIkp3d3xyeGJeVkp1NH5WYkUkLzAoOSpzTCwuTmRJZSIrQG0yR2kiOj1MKSsiR1ssRmlmTykzLGNYL20uPUdmTVh0TStmRTVMR0JdVWNCellrNDdIeFA8RiZ9Z2Y+fnBiTHRQdXJqP0JIcmBiZ2p5'@;
put 'LjF4U2A5XXsiZ3VZRXpPPk5CJiVJYT9CKFdEQDB1VmVPKHldLlQ3T3orakVZfSZvNlRpPFpwVm43LmM1UEtEWWZJT151fFFzNnNDbHU6VUZAcUo5cEdGIU82JD1KTl91KG1UT351QjY2aCghWVIrVkwoISpoezNPeXomY144VChIc3Z0VndFZiw/RGVeXmxnLE11eTghTzl8V1piJHJIQyZLN3FH'@;
put 'PUdQTXFaYD1GMTphM2BGSDZ3ITUuWXNzQVI7ckU+cGBwXUhod3dVQy5uLD9pXnN7UC58WzU5PUJwajIwLFVqNkYpWFtsRXVRO0JeSi50ZS9MMzJsV3xOSHVbZmd3VHR8blgjfl5UTHxdJjA2UE8jSkF7b04+RDhmfUNAaDhDWUVlWHx5LyopXjhYOS8xIyNsL1JeWSFbMjk8aD1Xe0YlTm1JO3gl'@;
put 'Yzl4d2VyaTpGVTpkWVJWUD9aRDhjVjJlMyE1OjxkNFE5R2xfYkVGKDw8eTI9ZXs0UD5xQUtdUmspez1PNltXWXR4dmBofi9+fEBjdjRwNz5PYFk7L3lKQGhBIzd8UW9YX2dfO29tQlkqIVJBXTwqNzk8I30vZF9ZUClqWjRDdVAldipKdiF9cDR4VzRDWEBwOk96LFN3Y1BsRztVX2xtVHJ6aHtI'@;
put 'SUgjOFBAI0d1e2E4QXBJPmosJnRXOmV0cyg5L3JlLkZ+R2dEUWFsKSRSYnRBPSxPR30wSXE4IyFCczY0N09dRFFlQTV9ZH4hV2tXRnVpdDtUYyU+JlIkPWdVLm5nKD9CcVMmNlh5UGlZNm9xMmsrMHA2M0NIbm1JJF1kfnc1Jl1lZjoobyZVbztYVFM6b3koTXdtS2hnWFI/aUlweDNmUn41L31E'@;
put 'cT5nQW5fT0dtMlh+d3MrfE9sSWM9WU56Wk8uPGg9M3dfNmJSVUU9aU5tOW14MG4lS1k0PCE2cFh8bU8jVCh1cEQ1bSRoTkUua2Q1VmNVOyZ1NndqeHJOUXBje3FvWSYrcWlmM1tEZTkwXyNrO29lRjoiXWVIOH1FPW19eHUsI1Y9Z34sT2wudDMhdjs+NjtbdS9pTl5PIkZrOXRBUmtdP1ROIkZw'@;
put 'YnMlWDM/cXRsaDhTUCgsanxUdD5VU3dIW016ZD9ScSNfKUJ3IXdGbUYuWlliU1RjL1pSXncuMlJDR2VTLDcwcCIrfUhERjNTa0RnUFFHW3dJc1N7QkhSe0YldDdgTj5DcGpKZnNTc0hgWXRbSG4uNF91QDY2RWclPXEhVCVmOjJNeCJXIXdoWTFQVi9MW1p0W34+TlgyfSk+b0N5VHVuJXlwZzQh'@;
put 'YiRPSk9DOFowNiFbK11lNUZhOCtFazB3Z1ddUlRvdEMoQTlLVDJlcEVVQjl1QGpgTikzR0RFQl9+T1l7YHs6TV40QXU4azRdUEg7OXV3YG4/ekl5NUkoW24lcnhufDF7b2dINkEmdVZQT3Y/Ry5XeSErW2lCK2NeZENSPklWPTlwIlVbdVtNOSwhRWs8PkB3VyQ4UWxdRlhebWYicCV3Qj8oPWYk'@;
put 'TjYhWVdRPG1mNVEqe1spNzNXR3JkZV55TGFfWXQ0a311PyxOISIxJHJHIl9KNE5aV0xtWG5qQ1pjQ0dlISo6JmBRYj4sRnZCPDJ+KU9vVWsxYUB9WjlvVV5jKElPWDosWzVPVmFCZDU5ZkQ5UVRQfTxMJX5MViROYG1BWEdgPGBKdzU2OS4qLkgyQSJWK3dCfV5mSF9pSHp0SHQ4JT1TUy4yMm9a'@;
put 'dToqKk4jfG9NRGVVLDEmLnVpYTw0KzdTIz4lNjhzY1VZIUIjTSV7a3A0UUo8XWRZOU9EVHNJTmNfYCFlWmolWz9TQTFnbW1NeExTeyVBVGk8K3BBZVZmeUtyOUs1XiVUZUFRTG5GVE0vQ2FtLE0uciNmSmNXSnhuWTYkcktzM3Z4VisvL1VFV3xXWlltP05WZGBeeWRVSWhwYCZpYzJfR2lIREcr'@;
put 'MSRNaFh7Iix2M0FGJHJGaGJoO0RuND0+Oll4P0FpIXA6eiIpInZgSE5DS21OcFQmJGdQXiNmQjckaCxKeCs6N2JLS1YwJEBbOkpQezM0K05QRFRhdS4oTk1MTSZhaGF2MUluTD1oJWAzZWlpTipVYWw2bSs0cD1+OUtYb3tZcVcufmZ+LlFIanpHZV4rdXAxbkJVKV5fQHRoYS5JMkw1IitmO1Y/'@;
put 'Plo/WCh9bC92KzBuMy42UVZ7NDBzMC5MMztKPCtXUjIoOkgqcEdJcyN0dzR8NVR3fjcsUSI4ZyJRaC5MPFBSIUpMcDBVe2UoOztIc2ZFJlNOVzRNWCN5Vm5SU3Z3aDBzSDJgOGptVkJlPHBFLGVRUXd4azw4UVY1fm1XeFcvKTIvd2gyeEVYW0RRNzI4PClUdktNRSQuZmp0VmxtfG1oWjxWJnV0'@;
put 'MGkqeFE+b2xUeGskK3RNb3hoe3VHK19yTzBYdGA6az5LbEYuIXxPWyVYfFFkLkJrPXdOdX41N2c7UVBZSiFCeCpfLz5FN3FHLGtPXztPV05wMnovRV4oVWxwQyxnenBTPnIzb3RefF1KVEBZR1RMelYwezFpdChDY2c0Nm5veFdGa3AmVWN7dXxfVTx6Uz52WXU8d0ZTSHJBdVRAczdZeTJVelAj'@;
put 'R0MzR1F8JStkYDNTWzBWRVk7XiYwT2FUI0t+PktKdjUjRT5YYD9DOVckR25bP0RGViNNdjp7fkFPKlJJUylSRVBJaFM7MzoibHYkaiklNmlzPGxhYU9zKVY+LCtAUnBNS3MrX1hASyNhQ0lTUXpHXjk9LyVEL2p2VFNhY3Q+RzpOdGpBJihLTFJsV05BNiF7ejF3WDhERz4qdlhHdVAvKkUzUj5w'@;
put 'KjxtOHVwTHl6eDZYNkByR1IlN3V3aTMqLzdycS50Q0g3VVBoSEEoYnJoMT1eVH5aeF83XyxIVXAiZihON30/bmF4Q201Ui5AMmhwTlEhfE4mQ3JPXklpcGkhd1JFd3I/Lmslb3Vwelp5VW9vKzF1SGBfIisxfiE6SXBJMUVHKEN4VFI5flpBNj9bKXUje2kjIiZXOCl6OktXbS81LmpoRl9aQFAx'@;
put 'RTcuPT5VMyFQRTpVemBSQ3Z1OHM0OGw3KVRZbl0hNipnKzw4OCZ3dDM8RE4lYk1qZykhJVJSW0hqRThhOiN7Oz5jVzFvSyY4fFhOOmAkRDJmZC4uKUo7XmFBMFN2RkJjbVJGPzlCcE4kVltmQXlkMDxOfHIzKFkrO1ZyKzVeYHprajRRJTAjL2JKIjxoQ1ZSenFkXWNjZFk1KGArJGhwPSo2UXVu'@;
put 'ZX1dRlkvUSxmUlY+UFdYRFs5Ol5tSDEpSk5VKWUqTHxpfF95XiVYMVJ8eFpxJXE5bXcjYFQrczBoWSZrQEtycTVhVGouNlA1dkluSW5MdWFEOi96JG9mMmlnRilUJDVfJjBmfEJfKCVIeDN0LztuWF8sQW0kdEI9ISJXeCRiUzF5Rz9sK1ZeX0s7RH1jNHE8aWVdPn58MEovfEVhUW1iTFUsO3c0'@;
put 'N1s5aHpYfjpwRFJ5VVRhSGRbTlg/QkBZPHJCdGoyflM+L3FeeUd4Mz9tcWtZUWFTb243KjMkeSxULiU1fmUjO342O0dvVyZpaXNdKll0bVZVQiFjfE91Wip6P3FuLyptT1U8LiEkaD1pQT5gKzxyI309SVpDWX45RnJ1SmxwbnpAMiM2fSpVUEpeMys8RkxuKEBLRFB2eCspPCQwN0ltQUxnOjps'@;
put 'fDNiVi4rfkA4JXNCXTVBcG0scV1UQGIqWy9bU3FSTE8xTnwpaEl5YGxEI3VzYUcuXV9WKyJgZ2E+KGxUOllFNyJoKnZ2Vng2b3NbaU11VmMkUGlJViV+RGZrR1h5T0U4IzNDfUlmcXpYR2l1UD5aWipSaXovST9dJnJIYHZIQ0VwMnVKIXVOcCYpOGwrTVtUJCZidTt7MVQrZDVacXRZM0thfWZb'@;
put 'ektvUTRHWjlLUUsyakZDQ25qMm9pQ1VOWDZwei4wdFJ1bWsjR0tJaVFLLn1DYDglUEJpJG9pKy8ydVMvRFZ3TFZJI2FwdyNHSE8rc1pZKV9Ce2hseVo+P2J0MVAyVXQ+Y3xZYy9lLj5BIXNvbGo0UTRSJlVmPl5CQl0waURhL2ZRTl5idz57LlBISTJoQDdzNiR2d3pbS110dn05WFReKjpRbDZe'@;
put 'bX5UTyZqempyOSp9aHcvPWtKa01RRFtvUmdDckVeRndNbTpMKiQzeDxGRG8qQjJuZSwzbWtuNURLMCldXVhTR2tJbT49WEF6Yj1KT2lGfmVKNSpEancsTFhyJi4uUmJFaHlvaCl6bX1MS0hlKlJ1fmJ9OiVIfD5CS00pNH02P3dpSjsvVVFBRFA7Py9lRzMiSCFvUUVWRClvej0/TUZYYGhrR0BL'@;
put 'd343OS9rMENVIShLTm9vTl8zTXB2fSQ+djZGTG06Q2MmbHF3fmM7MFRWbl4yOzB0QllIZU5dLCt9Lzs8KXg0L3gqUi9DNSpQS2FJdFIuaF5zTW01KHlrdFFDRUdGS04uXnxgan4zVW4rKD5vajFXK3txdU0kaSRjM2VnTEcvdCg8XzcmUjFGdEpSTCM5Zj5BT09aMzFhTV5qfDFrJWY1WTghQ3J9'@;
put 'OUgqbFdiWSVZejRPZWxaekZseC4yUjk1Qj50UVM9VjU6cnlOP1o1b0dsLnd5ZCZDTD99bHx0YmZ8eEsxOFJrWVJOekdyZGcrbkwwLiw1dCNDcnZ1TmZtV0M/Q3tTSyIseDlecyxBfTVjMkI3LyZfdWVXPjJgRV9dfVBBWS4uRTZuTnxUYWQ8aXtbWF9qLGslOnViTzg3T0xqeXhQflBwMWZYJXg5'@;
put 'YEdxMExPQ1MlUHJWIXd3X3RuRV56dj1KN0wmZytZfUxHQkVpPGZ9cFU5UCJEM3YzdG8rTXdlMSxgaj1QaXEwQCpoOFByZ0dFam06QHJbKno3Yi9ZIz1yay9qaU1KPiEucEsiPk9wWDEuMEN5IU1dQENZVCEhcG8pQ1M8ZVM8S053cC8mMSZgQE05TSxmIT55RlU8KlpVNi9sJWFZS1R+QUMuQVdg'@;
put 'OU1dfGclVnwyaiQpVHdXcF48XylvU3QxdzZvMEE2azNDSywqZzhnNTdrOn1zS31LQm13aEVZJD9eMT49cmZeO2tkanB5X2g4VEU4Q10oJld+YFo1eiY2XlU6IzYvNWE3LiQ1aix4X1o+cCx5NFBNKV4vX2tkflZYUV5EOCFyZkBgLCYidWJNWmZjJFp7VUFeQFFZKVRaQUhtLkx1OXQ8Rl13PEhL'@;
put 'ND9WN2BZNCV5K3coYV0pVT5jREhIXlEpKn0lJjJwcntMRCZ+N2M/N0dnZFR7UlBQKzcuUmFnW3dLTXdWYkV+YlNAbGBPV21XfDgyU2lmWEJ5TnA7bXNCdmlQNXEsJV1eTjRhe09DPVs6cTRANG5eN2BkO2BPJmVLan5dPTh6b2tjVXJqVnZnSnZtRGNbNltWRmQpeEJLTUB8MEoySUwhbU8oanUr'@;
put 'OVdubWBEWjp9KVd8b0hYXj54OXIvSExESz1+fEtSN1daJShnfTFxYD19QFI/MDFvMX0wR24lZTAsdm5RTG95JSkuJGMiW2NJfkJEQjV4PCE9P2lRQW1hQT5zc3EpL0NAKitSMDZdVlsvUTJJeGEvWWgwaV4kaWQjNSM9UmZZfjt9JktRNHRNL3FJSDh8U3xeZlJaLjRXXyk5eWF+UmYzWGdpYmM2'@;
put 'XzM/eSoyU201PT5dJGdJZipbZGZZYyUxMUhuM3RXQUhCbi48VVIxJHM3eEFGUWNbJEJDcmZZJWo7I0tIVl9nYy42JUQ4dn1ndixfXmhvRCszLG50KVspc1lwbXRaPj1AYjR7YjN7aFg5IjI+LE84ZnYiY01vUCwjJHMsJHJValQwfTIpJE5APkxLTzhUfWFCaTBzMm0uZHs8KWtQdDs+XnlKNDRv'@;
put 'a3ZIcjdkSlAvZmEqSnhIZlBIMn1xM3YxZzomMTZILHIqWE9eUEJmUDFvVlJzNWpse2Y3KE1OdDQ1S1VEMGZBNV9CZn03czNUOW9ufj5vL0V2fkIwV2EhVjM0d0xacDljcV1wcClTOUNRdz5dOS9bekQlMUdQM2V0OCZ8Tnc/TE01aDVRbmY9eX51e1lKdGxYfmV2V3gubDk2aCw5PSRzfWdhbVh4'@;
put 'LnlEUXdYc3B0aGw2WXpvaGBjTlk5VzorOXU6LjgwZHU+JSpJSUloaj9iPC8haG1MO1FyTTJOeT90NSlCeyRkOUJSdVRxbSwsT21Zbj80cTVKe0QrImRObWE2cDwxczV2Vm8xSDdYP0RJWHx1MVMmXXRQTTt5dXFAbl4xJVldajRjfTdpJT5oX1FYYWVPUytUVjljfUBqN2MkX15OVDszfTdCMT5j'@;
put 'NV9jUCNeNTI+YFhzZV5JfiN1U2doP1hAVCRtX1NYI3ZpOD9nPigmQWpAYUk9KDBoMDcwa24jeENENCVTP3lsVUFEaWNbQ2p2MEMlYnNnVmA3XXlQaltIdWM0JTYsX0ZzX0ZBITh0aFUxKHNiOiFUUmNKVCg5ZSp+WmQsPFducDAyQkklY2gyYjleM0dfK2tjU198blRJKEdTPTM9QEtrdkB2KlJO'@;
put 'JCxXN0N2THhZYyVLfWxgVGwzWWRnIUNLbGhCak8wTmkrY1FWeDlmc05LPFU8OzowdDlrZkJRPX5oITNYPU19flc1fnp9XnAmK0JgXmp1VThlKU8wdj8kLmc+OVY2Lm1UJEhuKmBZJmQyV3JubksvLmppMko2WmAvRWlge316d1A0fj0vT3RSXj9ofnN2THNTV09ldHMuZGhTXyo8RjJTJlFCYnp0'@;
put 'Mm1GZiVkO0ozP3paem9Jc01RKlBfN1dgPiJ2els1aUR8eDsoLChdcHVZPzQ3S2dRMzZEJCRPYSthZz5mZnAwQjoveitMJHwoJT01N3tTfTVlPVNeTm5JS29rd31LKylhMCZ8W0Mzek98b3BOeFpoeXN8RVF0Rzl4QSJEIiN1JCosYjJNNFdSZDg5Mlk6QU42SD8wXmJobGxOams8MT87fHwsVE5N'@;
put 'YER5cD8/c3c6WysmU2ZwI3p2ckN7NyldeElvOjF3dyw6ezJqZTtULD1OSn5yTX5bMXIlbEIhUElqQEc9PnZgSn1CZXdDXj4hPlBoNzRtdm80UF9kL1ZGeSJ8X3FuZWAhIkNbXnFPYU91IilQcD9gMWM8L0tReWR3WUl+PU9GbypeQ31nPztKX29sUHZlZjBrKWgpM21weVFeXSxKKjwycHNjbSpM'@;
put 'OGF2bGs0fnpacDg9bHRDLyFGTEIsc1RBQ0QocTRqSDN1JiJeamhWUUsqVzpzOEY6K2w+Z2kwe3lqKXdlXzd0I1F0VUhuZTc6RmoqOns7LzR2YnZ2clJKVnVCQX5nVT9GL2t6PEdvd1lAPjN3KGRIWDxMYWY8OmQyLnc+PCYjPT8pJndfKHdhWjokKjVMJGQ5bFZ1KlliSFFwczoyL3FdUkF6QUNo'@;
put 'NmAoNVJTe0lORE9VQVVbeTtle1o2TSZYdUg2TmB8fUd6SSRsM0I3PkUjUEtJMyM5c0kjSG1vdTdiYXFWUjNKWF1BR3xGdCgxPlVSb0NCWWl3QmJ2Y3EpTnh5dzV9eGxKflNFM1kvMzlraXEwe256cT9ZbXxTTWkqRj5aXmRiJU1HWnQvJH55OFh8PzJXb1dBfi9dQywrVF8jfFlFLihdYn0od2dU'@;
put 'SFhxeDFCbkNOTGJsVHFWeTxbfC96eyhAYDZKVFkyVHAvfHMkSkReW2tfMVduJm0hZUIkbjhIKWo3KHRGMjBuV0MwJG1hbmYpV1p8Ni5RUVpqblUjPztIK1FJIWU6OHt4a2NZUT1QWS5GJjBmV3Z0SHtuTTZIMSZeOl09Vj54V0tYbysjfE18OyF2ZiZQMktKPGEyPVYjWmxpdV86L2EoNFByd146'@;
put 'LEc+eDo3ZksmTGVRKS9jX3dLJWN4VnppUEpBY11XJSRZZD1lTXpKMS5gZzhYeiowK1JnIkg6ZjMxZ1NwUC9zVyYkMHs1bmkhM19zfUtYNVhQSjUkJXJROUQrd0dEd3J2WExmaGUzenk3ZVJUflgsV08xMyxiIUJtOWxOaCsuITM6L1o3PmBjflRUQ0R1YFBrXl1MQkJLTmZmIzdESjRiOVVtNj1O'@;
put 'ZHhYOCtnREQvaVJ+N2g+fkBoOzUsdkJHP10/OT02KS54Km9xSm0iNTxkV1IiOn1NbGJ6cWhFPWp2bFhSL0hWdHtJIVB2JXVlUWImYGtxSTcqan5XXiRARSJqQEdiI1hgOXFgX1lkbj42ZlRCdSQqSmp6amBdZ19Zb0U/aWpuJGFBVyR5K01ePll3VnNUdyFXe1chKFlDNk1iLlpbc0p1MDNLS2kv'@;
put 'MWJlRXhLWjJrV0ZYJkkyTD1UdVduMHQ9SldzQi4+VjIoZG08YE5ePyMqby9xaHwvWywpOHh6cntfN2l4dTlIPzRRdmwvYWx8SnFRflM7bSVFdUlsbUF2IWU9QzUhe1soW3cwZzxVZDMweWcxIzVVOHw/JjQpJGFLdD8vP0k4KCVOTCUiW2RedlJYQHEhVDBqYXVQJlZFUzp7NHdjL3EpdHdEdEBj'@;
put 'aTlkMExuO3U9SVp2Pk1mTGZFXnVVb3o7XzlmS3VgKGZWIkd7ZGpmdnRAYDE5UV1oaGF5LHhSPDxuQCV7YC9ZSDxsPVgqczo/UXlYeEE2TWlsbCo0VG5YWDRIO0dEPUs0UjFwKl50TTk+Oik5NjoqV3lOSEB2WDhxeXRvMCNQU0tBPHJlIm9zVV42RE4+SmRZb1FySFEjSjdsRGgoNm9STVtmL3wq'@;
put 'NCwxQmlsRS85RmRDRHhPW0ExLE5YSnY2Ui53KiN1YHQmSiZgQn1KLnpqQ0swPGZ9NU1ecGUvO05jVFFhSkhDbTw1RjJ0cip9YFAsaTlAMyZ3cVpUSVBpezBoPV8sIW5YeXIxYTN9YHNDdjc3PV4xKGN9KSxeIzRuRFZsUkw1Ky8jM2o2MWJPPCVjSXcqYDBITzcucXQ8VzlDYjZzKFg6YH5se0t8'@;
put 'bn0pK2F8fHkoKk42bEVXU0hDW1g0ODt1TllKZ3tQWzQ+eUgyI2NjK3pDPGhlMG9FTFtSX1tCdih2fiROQGNEd0AoQUk/RlRvYzMkMkNEQWIxMVIwMW1OQzVXRmAiU2R1Z3IhNy52PVpOTF5NQXRMMz1AfkU6VX5eO0w8eHZPVGhRUlFhez48WHhZYEEzMGp1WUI7YmdBOEVWYSFWVkN6VGl2Ql9R'@;
put 'fGJqOVl9cU0yOnsicDs+QEwwSENGPGpwY3sqTjdiUkhOaEx3UUhsSy5RdmNdImZbaUteX21GdmsoWEswZTYlbjU0fWs2SkQ2LiJaVHU7SUV+ZDg0Mml6QDAoeFdJUFJQX3NkfHV0O21WSDE9LFlYRmxoIVpZZDVLVXshWk1mdngzZGdEYG00KWp9TzNoM1NFbTh+aDM+RVZEOyV5XVh5VylQb3tD'@;
put 'RDA3JDF0eD93U0YqaDElYFsxQDp9VHUwfE0jb11Kc0J8cWZPXytTL2B7VU13KyhNYmtLY3UyPSNzQkhDI30pNVpJVyYid0Bley9IJEI0YW9VQF88O3oheVN1ZTBRWjckZHM3MDssZkxCYUE2b0kpPlg6eSs/VFI1LEdPJD9KZk1VUnZoS1B1NHh1Lm93VU8xQnxdXyhoYD8xOSQ6Q3VHT19gQzVM'@;
put 'QXVQQX5hYXVXMVVlPCMvVz5VOlR8UD9SN0l8ZV9GKWs9WSFrZmt8ITEqYD0yUEA8ait6TTY8aTNdWmVlXSVpYmsxZUc4bjhAV34rTD1bLkFeQXJUZEIoYkhIMSRaNWhNR35UbE89emN1VlpBUl9QOS4mMzs+M304MnF8UWFjOyVkZFpNKn1XJiNgW0tsZVUjRk9PNSowRjN4Sjx4Yk43d3NxcTRz'@;
put 'TXYvKEtMNFJwd0lYcEN+cVMrWW94OjkpKEJMTV87d2g6THo8eXZhQFQjOEUkNnp+KnM3bjp9SXFTQjlxMn0yVltGZCkxKE5kWDgrd0ZRemYqVm5rL314IyJ+OnswWWBuZWc4T0xTbzxeQThpSjZLTWVqNlMieil4aFtnUSI3PiFOZGhoZkkiMClSTVtAeEpYLCg+Om0zL3pmanV8czx6UGQ4QX1N'@;
put 'WDsldF9xOyxoTjdicis1KFlXfEJ9Smw0PSRhWWN0JUNCQGgleFVzPmRMZj9WeDBEOzd5b1hUSGdvYlsxPXEyWyxle3lWMWxYQ2UjYCI8SU9ZcSF5ekJ3VkNlSTBNNFNpQmZfPkd5fFtiQnpbRWk6ZH5zfExRXy5vYjsjSztHL2x6X2R4fnpNTjwpcCg2eSlabW9eRT51Nlo7SmhBOjhWQXY/XnJd'@;
put 'bGoyZVRsX0JbKDhMNUV+TjRFWlB4SUsvJWNvbXUoOy57fGtKemd3Ty5TYUwkR011e1hvRChbcWpYLCYxPTxidjs8cj1DWm5Wa1Yre2BjaE0yakFTSStnV05XR1NWdzdzfixJdFowJkt5Q3xIWEVRMUVHR09pfC8lfSpoZGQ5V1NJXzMuQjoxcl0wcUs2UTokO2ZKb0YlITJkOURKKTxFZzV7Ojgj'@;
put 'eGFqODwyNHMufE0lcndkWyhsdUVyeltsU0VpZTR1fj15fDt8NF9TTSlee3NQMj9ua3Q+fj4ocSksRXsvajdSeXdpaU9WaWhtWzA6eTlKJT5bOkVeRiRQYyxeJDhkcipvUTxMXWdgVitPOSheaWBAOlJ4N0smLFk7PjBbRzRxUS9eZjhWbiN8b1J8WzBoUTk2VVR9KGBzMCtvVDwiQ31veU90Qyo7'@;
put 'Nl1IR2wiKz8jaWUoT1hBaCtgUEdfOz5Cdk0sJnMrWzR5Wy5eVCR1YU5bfSJBKyRWcHFGYk8ma0tGfStedT09KEFLKFooaWkwUmNUTUllfEVzXlJAPzVhPUZ0eClMdH1jUFRKPygze0J5dyI+anMkOFBmPmtFb292S1ZxaUxlT24lYiJsJjRSaXx9W0NPfnpjbXpsck5JWFZlZiJqWFAoWyhMMlpG'@;
put 'c257aFVYQ2N4TTRyPUJ9KltFISk0SHx2cjFVN05BQ0B6NF1Edlc+YF5ORWZHdSRJdTNRLiojLDAoIXRtW0cieFdnSS4kTE9zZCo0LyVqV19ePyoiYTBNIjc6I3hDbmI0dzkhQ0lBVzdocl9CLkBpX1h5R1slPj8yPXhwSmVSL0JYYkVUWi45NF9tInp9bFJmNSZbPV1lSW1xZ3EuYHhfREFLVTdM'@;
put 'VVVvYSRXKEZ3PT0/ZUM+c0JIW1grfX1bMWk5RzhWUnU4NEkkKEJVJXtbfXU7SGAvWU5RR1VUSjl6dlVUaHRMT2g2KD9XS29EVlZaMl01Li46S0g9ZFVTfmM2aEk4QD5gaHRuej1kWjdXTVdZK0xmI1RaZS9Tcmgucm1wWG1AfSU3U0Aqfk48RT1vYD1KYDhTYFNGM1A4ZTMheGlOWCt2PVtIZFsy'@;
put 'W2c/cmBHJEk5S3dDT1JLW0tFXkhzeWJTPjd5aUZBQHJsMkN5RWt9VzNGYysrcDckKCUsKDFoezlAI0pIT3FNdDFKbTNRX1RgKjhMMSlBaGR1blp2JXN9ZX19JXheKz5HbC5oVzBTc1E8RUxXJU58bH07eGQ/WklPNWtNNlc9Mm5ffnNfYmtaUyFhXXBiYjY7bkRBeyp2O0RFUFREJFBCdH43Sjdo'@;
put 'XzJmdU52S3EvZjBSQT1PNzwyRVk6NXhXcE4ifjx1PmZaeHkmWjVPU0FdNno3fkIqR1o9UD5oO3VqOjxKJXhGVHZFJWQiTyxycVNxdHldTXQ/ZlNqYl1PeGYyPDFhNHwmQ15HKjM0WjVWan02YmdIaXdWVGNKeHMjPWQ9OmhuYW58bForLHIqRUlBcj1Kcj4lKnAoJDpoXjBhQ2Zkcis0RmEoTkBw'@;
put 'ZSRKLz0jcktIYzlYdjdQSz0/L0dEK0RTS3o4YCtKV2Y1ZSkicGViKSx6ZT15Pkw3KiZJQHZsX09+VHVmTW9KV3lQXy86bmhZZG5rIUhMOyMobWF5KUhxWEwxcDUkRFR0JUpKQEttVi9WTCtWX0ZGJnZ1VCtVfjBAYzF4VjBAZTA9aCZ4dFUiPCZdUT1LUjBKXVJQRDwvRUZQdXovbCRxOFNPM3k1'@;
put 'Y2V+KSpfSyJVYSlHfDNWKShrUkJjYzFiZHJjSmNAcVhXMmdPflY5Xnt9aUojaGM9Pkg8KmxlO2cwY0Z3UV5wZ0NqK09uOkxAPXY+WzFsYkx+QEswKE1uZXZUTGYkX2VMTiFkWiw6dyxAfTRwbXptS0FDS0g/ZW8rMm4zOjgwNH4/RFhOKDBwLkNjQGB9KUBFSihxNyZ+WkNZUGdffF1POldGdUt2'@;
put 'IVY5Wnk2a2pEcnNJNzgmNlkyQkQpNEtwYyhFZjU4MTVNPm12QzJ1IXRMWF9yTHVNVV9MRWw2L2EuRUBwSSZYTWYkSTx6KDEpLDZXS1NKKlhxU3BpWS8zMHkkKWZmRDcxSmdFelMqYFdmek00Uzc3Yyx2UXtyYUs/QlBKYEA1KGdVKUlIQkA+KDU/PU1xTVVAZHIsSnw/UFBmTjQ2Q11vY0QiLHto'@;
put 'SX49YD84QTJKYjMqQ1lNbnBAfUomVXE3Pj50TUR+KUh2WmM3KiVUcjJdLnBXOmBiWDxeSlYwRH1FUERgLGAxNmRwQ2MqJnlXPENlSnlESzg9JSlOTSFzTyxOPipNUGUyYjImMnNxSWR2dDlUQiI6X1NHXnAzOn5aJjpFcnFrYDxqX1pKfDZuU1AsKEVJcWdlSkQjaDcmTkR5fnZJamtwUmxLQiMp'@;
put 'MVQvS3hddG4sRDprelt3amlrMnI3NTk/ZDRgMzVefWgicT0pdld8e3FfaSlJRjNDLG15TChSYjtteldWdixQTCxLfXdMRyRHIjp4fSJ4Ly9lb2kzMT1hJX5HLE0qekMiWHw6SGcxXiskL25ZT2hXUzo4ei9XbURxU0JgJFM0JTJQU2c9UUApeT5zJVsqeTkmRm85XUdvLEV8UXpiT342IjY0ImJz'@;
put 'PXQ7QTlRfTBUSyNjNWJGUzhkXTpdOTVZalRbPW5LL1YpUGU/Q1IrT3hpU2lBJDJAWS8wK0kkcm4iOyZBTEdSSHpkeEczMHB6SzV5Wl9OdmFTfjw6OixdKS94TzRHRUZrTkpLSShONXxrWElEaGUmRT5TTEd4PDRgaURIaC9vdjVNS3lFdig4NjBOOWkhQiI+Ty5nLmc8JmhdYkRVa2hFLCZBbCFA'@;
put 'RXc4WHtmcGYlLFlnRnxqMjxfRS8vZy5RbCxQdCp1R3ZbX145TGYsZGQkcjcqVHhDUmQ/RnE+e14qbXZrWFBAa2gmKzIwYTAvQ141bUEwRF4mVDJeMVAsNEIufkcyfXs2OTl+SVFuX1M8PXh6IUoyQTw5MSt6cDd3SitlRzdEWTB+RVMyYDM4JF9pekNNeS43N3gqRk5oTHxzYDhMUzg1LmFPPy81'@;
put 'ZGI/Kys9K3UwW2JZL0I2UXxhRjZrNy9zX01QQl89TX4pcW9bRiFJdCNLL3VXdHteI1EufXtGdlordFZtZDpxNC5rJWFMLkUwU3M4N0dAVSt1cksoWUxhfXRgPUMqKTZockY7NzpHOFtkSTYkcTdjdWlNJm9SOnhuU2N8L2ssdDtmc0lVLE5YbU52PjlQMGciUDYpTEJJaiRzdHVEJUxiPlU4Xyp4'@;
put 'V3VYd0p2IyVKe2EoP3U+dSFMNiEqUHRDMGQ8blR4KlZDfGNDK3thPU9AXU48Nl4sREVBXSJLODIsU11MOlBqM19BT1V3Q2tGL2ZAJl5GTFQwIyQxZl5XPUN8VVt0aXNwLkZdVChiNmtgLEQiXmRvRWplMls4fnh0Zn45cSVnJDhvOWRUOyZ9TTw+VyZaJWtYL0V5REVAQWt6bHBWP1QsMypGLDJm'@;
put 'bls+JGNKIlh5QEQyZCoiZmdTTFJsaipOXiRnO188N2A5VytYNnNCeiFmPSwhfEA3TW1baSUpVjwwUD1SJFlUISU5Vls+RElqVEN3QyhHLDhqbVN0Sz9zYCl6M3BoJUQ2a3ZMVVF8fVBkQDV2TTh0ekJWcjAsXmErRndIIXEpJF1xQnk2amRPYWtyfWVmbDxRZzooVStFSC49dFh2eW9fX2l+QUZm'@;
put 'RC9fUEM6XzxfZ2VzPGdeTElAKzxdQlZWTXx8fT41WUY1Qn1vbHR+OHFTVkpmPVozMXxaSmxHaTxpYkpIKX1xOH1yWmlOMCRzeFlTdVFXMjBnVTYwUno7OVUkeX1CLyZodzE1KTdnQmNwQ2YiPFYpbFN9bk81OlgvWH4qQW5WKFIqIihXeCNvJipTSShmST1DPmlOQXJPUCtNJCYjNiJlfTdzWUQr'@;
put 'a10iZHtqdnk7Q357PWJuXU1gbGVuYi8sLn1tVkRVdV5OaXswdkAvTWh7b352RmlLZURSYnwiWCs6SThyPXh3LCNKTX15NU5pbE12JFZMdkBpej41Kiw9UkRXOzt0TDJwPVhGRCUjSH4hXUZVV2MySTx4MTxiZW5gaD0lfGFHM1JGQi5AcWxsVVQvd3ZgeXV2NHYhM0dybyt3TE8jVyZ1b0tbQ3Ru'@;
put 'Pjcjd0x8XjtlJFJ1e2FfZShGTnFhe2wvPkhgRGhOfUR8SCg3Yj9MfWElPHp3eExDaStwWCZUQC9zfDtdMk42Q3hUfDp2OClHQ15HWiVpT3JZQUwvNDZYaHQuL1NRMHdVOlUpWTN0PnhedTEofXtxL1tCJj9EfUJ6bVNRa3k+P2lBVXp7bkdfLlNSYHYzZ3BQeSs7XVNZcVA4Ung1OV4wIlZnTHU7'@;
put 'NHd3UURjI3prclA/VjgoYDZgT1BSKUVycksjN305eGRUdzI0dnxATWQsT1ouVV83Xkc9QGNYTmpHc3hzODltUkJTNzdENDtgKnd0WitXLz1LXjBeYnlPLGV9ZyhgWFk8YFouOCVWOUx9Xz5aKklxbHlfdi9pUF1DTWIzPEUmcixjLCokOjN5Ymoxbk56MHZyZ1BhQVFAQW1pRnM1WUIyYWJLYWdq'@;
put 'Y3F8K3MyZzNuSzpybS41UDk7N3tpMTNmV3MlL0kvaExoUCkmKTRDdjlLJSh7JkxOX2RaNn0+NmE5QUFlbzMsOUxXW3Yve3BwUTNsfTpLZ0BLUzlaUGB7IUU8eSpibFNebG92RUVNe3VzJj46cy94ditZKGxacjB2VE10cltWNiEoPGQ0ZWtIW0Mye3AuOEc7JTFYTmhhQnAjR0ZoQWBUJmZYVlY6'@;
put 'JEoic35ZJE1kR1FhUWFmKHJrLEk7aWYsQ2heLG8xRkVmNXhkdzQvKHpoZ1BaaF1uVjY4bS84c3c1Q11EU0BUZEhUSjtjQVtbJihOLz5MdTlZaUEiTGJ1Nz1ZY21mQ3B0dSV4LlEoeGs9R1NZWE1kQTJeQC5WaURLP0N1JFopK2RPPEo0VU0rWG5iIlM/WTgqaFF1STNmW0xSN2ltMEMsa2tOeHpH'@;
put 'a0ZyLjIjfWhVNEdZSCElUkR8ViF1WG59ZUhPb0s2cHBsUX4oZERUNzF5RjwjYUBHdi9QbzIiM0VHIzE+Xj4jLGdvbiNiKUUoUzhaNDM9Ryl4RVJiIj5GMDw4YGBdPTI+M2ooOm0xYH5uUWluOFJyPEszIX44Wz93NFhTMXUvfVd2OVFuXXl6S3QsR0c2UUxPKW9HS1k0aWU0bkl3XTA9Tk9zSFBI'@;
put 'N1JsaGhzREV6L0dbQyRqLCJ9Ik5jJVlCZXdeY3ZfK0tpJVF8QDZlQUZPdUYqQUQhPihtUENfQl59Mis4eShfaUJeNys5KyZFKHpGUk47OThvQWFqSS8waWZUIyFjcFVhbEpuIzQsZGszNjokeUVsdipYJHQ/bWJkUHVefXgpTW57cnlIUT9ARjh4S2Fdd0lnXTQ5RzxQc2hXdnVMMls6PnxJKFBd'@;
put 'TUZdNCNpbltfTEVtTEdrfGd3OGBSQlFSXnw7eEoyK3ldMWxSTl1xVjNsRnwmWkI1ITlsZzEsTiZ7TSxRMkEsN2BvalhtQllIXjZeIUthYXk8YzRibSViaWw0PndmNG5ROHJBIlJUZDg4Okx1Oyw7RlYodj1IYE9OSHU5I0c+X0oyQXxHbD5Bfk9uS1JvIjwkMHd8OFVNKClfOXxrKnhURUViPi4+'@;
put 'ZHc2MWd0cEgxSHw6bG9nPm9VOm5MS3ZXNV9TMGtDYHNqQnQ0aHx4Nm9MPmwuVDNUXiEvTEFdc28hR1FtNlozdzpIIztgKj9JUTtEWFJhaDIkUWNGLFI9JEM5dSF7L11lJSVdOWkqM08lb1JNQ0woWlpGRkFAMH1kfXJQa3pjY1lval5YTS8jU3Q2LzUvbnlYUTQ5QHdnQnFmTz9iNU1+KzxeQzhd'@;
put 'Rl1HQXFBfjUkUjAzJmc3UVtAXXx2VVU+djFFfSx5Yj9AUU14eyV3ZFJgaUkuIXhSRi9hOzI3T3ZhWWtOeWdzJVNgS21rI2FgNHdbOlIidyhmdjU7OE4vZkw0NHR2bXp7XihIT1RnaEghZSwzeUFTSjBed2NjY2YhJWZ8LGRnfGMuJHA1ai4xaTlkeG05dCZCcUJmTSFDLkJuWE9DUlMoOWRIekVt'@;
put 'NDJrJCFzIk1sMW86TDNlamtBTmEkb0NVRFQ7P0g6M05IbXg5K1tmZkR0XlJ1QiFPO1E6V21WczY0UVJxO15lNl01bF56TG8rc2R5dDRpe1NNL1ArX0lvQFZYMTRfXiQxey8xTEtdYXd2TSlDP0hdPTJTKH5aT0JabEBENzlkblB+KmlZKnZNIlJndV1bfEx0R11lMGVbdWBNODIxaGlNY2ExazA2'@;
put 'WGhoTTR+cW13UEghJDhyMFB5IjRSWWVXWWUmezJ5bCIxKT1gYmJdTm0qTmdAQEkqXltYTj1eYVddRyRIVGdOQmNmPlFWTURQeWdmMGpMOztJKjQqNihRbVdCUTZ1SVFKTDphZnhBX2piQSFDWGBaPFV6SmhzTjQiP2x7SD0wdU88eEZ8PXhidjxsdn5BPFZfV0x1b2g6K3dSXioxUlptc1JsL3ZH'@;
put 'dllsSnthcHROaWlsVSlUSmJVQStDQHJQPCZBYHN5R09qJi8jaU1Cfi90TU9AT3dwWjkkPng9IlVNXnFsfFRYTE9xTDlsdDkmLENsUj1MQUQ5RncifDhtOXw8b0lDb2w5UlRzLjR+LEhTckFAV29LaSMvfTZqdGtGcnVnfTB2WDU8aWhxenUhcmxkZEF7OUFAM3oiZVEoOzpwY1F3WU07PmU7OklT'@;
put 'UlArL2V7K2tqO3F7bGtvLGdZYFtRIXNKZFdrdzV0bzd6PFEhKSJvIzBOMFVWMlU6Vl12VXFNaUFlX0t4JFdWQHhRK1UsXkdWUHteUDEld0lWIUpXbjJ4ejpBQUBLeytCdVQmVzpZMnRAfmMyTXh9OFc/cH1QK3AwQlRUfE0sNGJLKHtJYUM4LEphaFhJKDd5SnRCfj9KUzp6IUtLfnRHd1ghdE13'@;
put 'R1dNdmdxXiNdV2BUeT91IWIsfUszemVVdzN2MWt3T3lCfTRqMXdsO0VDeC8yWjhYTXFVNjdzZGwhNih5JFtMNl54OzR3dCk1VEJndndrSmtfPnshYGRkP3pWTE1wL20vZyQxOyZ2cGI6NTQwdileV3xUX1dKWVg4a2g7YUs7YVRVci8+YXouWnErPUw0WmEoJStudW5HL19GWlQ9b0Y0X3NyfFdx'@;
put 'K1pve1Ftdz97XlEwM1NRKUtBb2FEaUgrLFt4TEtUcCpWTz5vUFN1IlNEJklUNk5fSyZLaTtHN1tfLEZpQndtZCU0Q0hYOVJEPmJqZXM5IXQ5WUxxSU0ocExeUmNWWyFrKXwxREJrQmpkNGxgaS46WW50cGoyaz9TXThoXlNIM30uInBMe3hmTT57XXQ6QzpdRnFSZl0qJl4lUzdBZTw6fjs8ayE1'@;
put 'O3xIPjxxOWlNJThtJWE8RnF3dEhoNXQ0Y1IsW2t4OTR0SURWeDM2ZCx0RHg9VHYmPiQiVXx5Wjk8eClCfmsqQTUrcy9uUFhVWFpwI0Njaj5oJEFERUM3dD1VeTVULDgzW1Y0ZT5teW1CdiRGaVNmUHZzJTo2JnB6I3lFbkQ1aT89NTZ6bWxjUWxbdVE5dGpaVDtteyU/cTlpQ35ldTI2ZSUhIUwu'@;
put 'XnBdaiFhVzAyOV9TI2dfOy9FbyNmd3dweGMwWmk/b31TTUY3e3BxRnc+cWUvcUYqRlJefVFTcX1tfVhCQzFkNkJ1ZD5Dc0JjXWZaITRHak80NixsL0d1STojZ3g0Rzk3SG5iaT9KZWRkZkA8OWtaTGxnM35Ra3JCQmV8XVpKe3NlUmFQdTcxYjxCMz53MFBuKmJCIVBMTF42OkEkVXE0YTlYdixq'@;
put 'K0g6M1ROSHZTNW53Z0IlV0JbR25ESF43VChTYG0xXT84OldTPCRkUEZMOWpWR1FnMlJ+bTttXyYxTXBAQ01udEpWX1huJFlMV2tQUjVyaFAkXlclSU5GTTJWempMbVlhXmFwdHRMT01ddjpEfEZQZC8xW2V2amFfal9lVF0yXWFLOjU9NH11dUpnXTlPfG8wLnNOOXh3Pj4wTylIfFQ4PHpvRlhg'@;
put 'Qi9DQSkiRzg+fkM1bDErYVIvQj9TR0ZSKTo2Y2FFYE0/KiNvRER3WWl4QE9RRU5DNHFQN21sR3A/ZVtddCMxPkpAPXE/XyEyMTBOdVp9OFZSPD5QNVE5UDQ5RHxHVmhZQFJGeDgoaG8uJkMpV3NwO0hXeEJDRUlMT09NNylvVnFCImM9MC5PMXwiPEYpQTM+I3RfTzFwP1VoNi49OzthTW1GYiEz'@;
put 'M14jTUcyXmEseXB5YXExP1JyY3xFakk4WCZ3bVRgclpzOH5iPiMvPiZ5WDMmWlI/cmtqMkkuRVdELmwvbTtgM0JuZHszRzEsSkIveHVlSmd1eCplUSJ5ekA7b2RLOmYlSXpadSp7TXdrUmxFO1JhS1t1YFl9Ki9Kb3JPNkFGIkBkKHZyRj18ako+aFJqZCpYV2I2QGhWcVh5bSgufDpeT0g3WHNl'@;
put 'VEc9UnI2e0tjXittRWNiWXk+b0dLZCVWOzxKa3l6L35YXkAkRFJOcnVwPGhJbHdsaSUvTUt0dUVMbng9cWxmYStBPTwmNCsreVtDVCheYzQ6S3NiP2tuMUtea3MuK1V2OWZvO3x3NCRnRWtDYVQoeHpFbCF2JUdlNT8pOkVGOnY0UTs6ZkRra1V9bzZaPShaQlZXfio/KFBsMWQrRCg1S0RxSkNa'@;
put 'fGRyeCRSN1psUXsrdXVOayxoTDtWeTpwPEBgYkRMRVhwKGE8KGRbIi40emYsOV5maTpbYnNjOkpMRVgsbX5bdFJdTCFTbHBMaShALCU/c2BpXXpEblc5eWsrb0xzTSxsTktrQzQ7fnxUYHl5JShucUspNitFSDkzeCxIaGtfPDsiXlMhTXR7UnJnV04uaFU/PSp8anNCNUdZJEpVTnFZUmUuXUQ6'@;
put 'PWE7K3RGOGZXNDo8Ui9RKEsySV9rX1o9Q3V2cGE0S2Z7ZUhHUWBVPk5+KDZxVTxMbFZrQUMrOE1saExyTWFnViJWRUJsbWFuTkVofUcicWxORDZkOFE2TU5aOXFzck5zWlRgSXZGQ05WKGEoNiF8MTVbfCV+S2RtP3JbfHZ4Pl1DK01OV0ksJlYvKD1uSCthcmRtQl5tPS4kOD96L0MjbUU1W0VY'@;
put 'cXk+WkpFMkkyfE56Jj12TGlaXjxCXWUobl4zKnBHOkghbmV2YGpYdmNMcENfNVN4VnI5cFUrJU9UaUJlMDNTS3VbWCZaa2d+PHY6WHgyNXIhZEpTP0A6OUsvfHZhWysvI0NwO3RibzFgfmguRCJ5MylIKFJSWClgeTZdRV08KU9USyM7aFBEYUZBeFJ+cWtiQio8O1BKJnJwekwxK0M8JE5AaCxD'@;
put 'angyNSxedGdGaHY2K219UWlqYyIofGh2W1lGeGhYLk9LZ3E2RHd9X3sjIl0qPGNBcW99ZHRtfmo1Rm9MVyMkRyhub15mb3BnNmUhNClSPlcpJGYlbnM2YTFxZkZIX1hkME1mWDNEUTcvJjNFME0mMml5aj56NDgxN2ZuJSNdWFBiZkQ0KyI8Z3I9Ulk0R1ZeXmBEW30sbWlUazBYPXVzREB3QEFy'@;
put 'cG5eUnJMclVjezZ6WFtoXSMke09ObV0rTTdZd1MzN313fF0zTkp5VnVnWF5OdDY2JDJiSmpsY1AuPH5fIiViVCl0YH5bN0lvUT1JJlRtWm1qQm0uNWAwQmlGXyElcEVOJXUyVExlc0x9fUpMPyl1d0VJIUVMSn5rLzx0NnN+cls/cz53Ll40U1lRUlNqNzgyMCVYZT5KWiEwRz1kOVYwIWRwPFBZ'@;
put 'bj8oY3hGfClaLDNRaFBrXi4uO25EKUVXKUhYbXl6Siw+eTc8JkBZU35TQS5xMzVtWyJScllsWnQ+fnshKTNQNkglSm48KDEvM0pySn1jTzdTZnNPTVtzaTRQSn0lQXB5KEo/UCUmZHdKUjFpVSIvfFtXUURhdz8/XnBXWzkzPWRuUDZPVlB6QFZbbzBWYm0vT2JmPjtybFg6U2I5fGVpMioifSRd'@;
put 'I0VtVmY2LCQ3ZzUvfnwrREB3KkUlQiFYR2Q3RGw9Yk9HWnpxNGVpQ3l2eVBgVkpKVSExYn5ObVZVPlhtP1FdNllGMDVOdXN3Z3p6fDd7fTdhKz1KS2U3NS4+PGtSPE5DS2o8VjQiSVUzfnFwVDVAOWx8YVhtdik8cU1xdVBeUyVMdVlIeDRhU2orb29dZW9rdWBbY3k9W0BYWk1nNCk6eyRwKixs'@;
put 'K21+ZH4vVlcyYUAmZmA5T34uJD4+LktUYlc8VndPdzRnUngsUioqV1kvSEQ+UmQvMWxFMytWQittOThZaTBdak4oYmZsMzRKYD96czNmeW1xQiZCPmM8bkdINTV7eylSaD9jfiNGbERJTVI4fjh1RS5zRl97NnZCSythbjFGQ0dnUyo4TXpyeSlvb0g0OXY8PltiU1NzWyJoYXNGXkgwcSYuRjpE'@;
put 'dUlObT9yeCM+K1FYeEloc2UpZWFtT1lqSGhkLGpOJWg/Wz1POSQ3UCV0SWw1eH1fempVYXpyQHgvWitWSmlMU0Y2eyYqQ0NMfi44dWFKajVZPUYhXmdle2t8QXI7K0xEdG4pS3dEfC92UlNmN0huL3UxTyttYz10MlIyRT9rWlVsbG1qMlppI2d7d2h9NzwhTl47Z1omM0ssR2hEVXhlQURlL2Fu'@;
put 'Mik/KUo3M1NAMX0rX3EkbHJ0byYlbmYrXWZwJVE7MW1RPWdZO0tSSnN5O2NGT2wlOl9pOCR2SV9ed3Y4P1A4RmUhQ3FycClQPmA+VmU1WT8mX3BEMSFsP2ckUVJEYW8kU3FyTDpgUT5mKl8vdnNiWHNYYD4paC9Za1s5OEVUVS5mfUZpQkNqRCkyUy5Md3M9Ik5NQkskVXJjdG5pcTsoWlRUb3Z7'@;
put 'fCVzRUosOGFTZiVMTVllNVBQKk12WjI3M2IxTClHSjNsTno3XU9BcylmOV4/WG83aGBVI0w9bWA2LmB8fCV2elE6RzUkfH58P1p1JSRbbzh9Y1MxRGtsezJ1clAueVJOUTNpUTAkLCl4VkcpPks8TTZ0fiozNDF0UihgKURGM3YmRUFAWmlzd1k7e3gpQyRCOEN7LDt7ME1aIW1FO25QZSZ8aUw1'@;
put 'SW9IfGNKdCw1KyNlPTdJSHVMQ3F6cHRNJH41R3ZnK0ddYDFDT3lYLEJMbHJWamJDZXAxVksqLHJ5N3JfeWcme3EkRyRxe3A3YWp6RD4kJUljNiZqKFFpSlJoJiFDIzI6aVNRI3c6JTozMHwvNHlaRDBQbmZlQXI5S19AU3IxNHBOW1gwXjR+P0J8KkdFfHk2USYsP3d5Uyg/fnR+KEtVaHNmPUk1'@;
put 'ZypiOV1AJTNnK0Y6NEtaN0pgKGptKShafU92VFoxMCMlWj55QD5ePkk1aGRIKlFjamx0aG9sdEI6Rj03JDVHazRVIU98QzkyQV13aDFYKEJHUiw1PVtEIm9vTVoxeHQ0V2JhMWBkQHUxd3Z4XzVRLl88fFNDayMzc3NGbWcrdWZsMnksYUY0Qm1rO2drcnouZlI9T1pWKj1IamdxIU9aVnw6fjdK'@;
put 'YFc2QCtgel0wck5ua1BHfVteeVUjKlZ6aT9HXTNkPHNHUDxxJEFwNi5eaik3fjttVnouPmMrRisyPDBkSGpicW1+fU81YG8qNT9AR2VOcE9AOERkRldwKjVPdntkLzB8QHIoJUxEVzQiaT9kNn52VHtjN311RG5AX0khMW4kV3EiJk5jTWAyTDVRQFk3Sk8iV3B0XkxnanExRG5uUkQ8UWNUOF1B'@;
put 'fTdrSCpNbnVmI29VRGopYiVXbVZxdG1pZVtJLEMhdSF2Tm9HdDdNdUVKLGhHcUtLLEViMz1PWlZaajcmKD9iLChCOVNWSD5ZaShPaD9WYzs4K1JUUTBzU0gkOSUvWE96fXFScyl8QX1+QCk8Rm43WWJlXVN7JkZ4anBNZTo5P0cyPGl5KXB4a1VnODVpTnpFIy8yfmtMSFQrOF88YG9FLn03aXw6'@;
put 'c0FBdFFDVXAhIyp0OClhRi42YTBMKmYwQ2k1RjYodzBXYDJBTEtTTFNHOyE/eVg8b111cG9lS3B4IXdXZENMeTt7KTU1PmMuMlRKdU84MURnNTxgVFVtemZCL0Fybk11aH4hZUp7LyMvdDFhMSN0Q2A5UDU/NUdKLC4kOkdjZTc9WUVvL3EyNj5IIkhSc2FOP0Q2N1A7OUBkUTBfaGp4WkVaPCY5'@;
put 'JUVGfUBAdFtSS0pCcG8sYyN6cFAzWlFPMUhmbHFPUDdCLkhTcktfe0dDYypCY1BDXUB0YT1yYSFdeWomeVVEZ2JQYj0yYmtjTH4uJD9pNEVsSCxmX1tTT09iSkhCZXxAa2ZYKDs0OGM2K0h1LCErc1heZnAlIWNBOjtWZ2U3MFVHbiExPU5QSCZ2PUlMXmRrVVpmdmVqSTdXPm1GWFZmb1V0NVlj'@;
put 'O3J0Nnc+bVNRTiZGWyM0TyhtP3t2V1I2WTduOzEycFhSbjM9TStWUi51aTRVNiguT0dSNkl8NXtaTnBFfUJEY1BEaTkxek1TYzljLGdyJjdNWXhQeCUkNEF9SmZOZEN+K0wma1B0SFcueVNZSW5YV2RjWT0sKzIkbWZyZntrM1k7NjMmVyJNT3hnKz9jSVBxQl0rbTdlaXcxQGM2dVFpSWtle0RL'@;
put 'RFo9eXZvOmJGeUtKPGVmeVgmOHFgaFVVPClHRzA6RjBIUk5wczxAemY/RWBzUypOS1YvKyRXO1dTaXQ0bExvTCEocUR8VXFaK1pBXThYcTBnd3ZhR0l9RyxreWR5cDlOQlBXRDJkVXFXfFFIZERARWNnJDR2aFZgUCk9MWR2SC4zMVRddTJlaVVHJGRYM1prLGR+MEsmXzNaQnw6Tk5EbjBNU1JL'@;
put 'P1VkJU5LdUhYSlg7W0ExUGd9S0QjVEp6WjZrQTxmc2M8MWRhMWchW2JwMFc4MzRQWiJASy4+QnFoUk5nfHgqLnJ5ZC9NfFA5P1hddSpHZ1pwV1U+LEE1SjdpYX1qXjtDOnJvNWk5LlgjTyJqMlpBLyMqKlNXdng0Xl5JPCVdZyZiRDhDazclYiIjTFVJMWVweCxDPHhSKUdYZFg3fDR3a3hlcHAx'@;
put 'UnBKensxL3RLRixOVGcvMT9uaUxuVyU5Ynh0T3FHM09RWFE5KCxyKHxoYWpLYE9WNXw2aU9HLmlKaER3UDVIfm9XaD5rMis7ZF5mJXM2LmN9eiYkTmdtbG5nLyFLaUpmJldmPkt1JDxrYiVydXZweW9MPkpseytJJkY9KWtabVN6fCM5am9MLCZxMy85a2Q1dXJwTVYlIUZJJVo4VzJ5eWdtbDBX'@;
put 'OHhAaTpiVDRsW2BrP2w/Qzs/UShOWD1nc0RERkRQWlhLVjt9bzJtYzxGfl1PakBSbCJzcmh9dj4uUFd+QSpjR2QpI21jJDMlbTNVNCVtY1Y3ODddNFd3IVVTMnd+THJvMkg+UzZJT3hzT2J6R1ExbTNgdFREREd6dz1FMGgvYnd3I0xzST0sMjFAM1tUWmdKN1NeaFVKJDRbbWVuVT1RfmpiWjRY'@;
put 'NjdBZGA3Z2RAdVVjemMwY1E3S2E0Kmx0RmBOcEwxSmBySGFORjpuWWdHeX13Skx6amthZ1ZiSWdRbUIpcHZUeSpjQn0vQGtbLm4+W3NqOCtKelFxPEdYTnlEOzspPVtKelRpeXwjcXVtUmZsR1duVT50aT80NFE1QilNRmZnblg1PUMvflY5UiRPOSxiM2FrPHgzPWU8P0Z9e3tDWnFDXnBeRz4q'@;
put 'JUVTSC5ocn0yLEhEPCh3T2BgZnJHO15lMHB0fU9sWDVbMWQmdXZiJUJla1RjTnBPTU5IRF1KcV1PZV0qbWk0V295cSNEOC42ZXo6aHcsTXFPUHFNRzguMzE3VyI1STAsbkQjMGRmWkN+VjdRY289JFcjZHtOI2BoKTtOOnZ9K0FvWSg8VVhSRTZVYUBxd3x7R0tkWy5Ge35oTUhtWmd6aCRNRVZ6'@;
put 'TEsuUENubjVvSD9qO3ohL1hLbT9uYUEyYmhGUFhjV2gjeT0wPGxOOWxPN0ZnMVRXaGBreTAuN355QkZLdVZIY3BmYHBRen5SPzVbY04wcWh9bWsrNk9CKHY9QiovMzVhOjVXViNZVkwvS2pTUUB6TT5NKk1ZREFyM3NMOykhXnpiI1c9SCpZYUtAX0dEO2BNcnt9dS9VfitINVQpZ3MvUl9IY2x0'@;
put 'a2FfKkRXNnUkUkpRTXk0UXtuLFU2QmBoNyExUHlhOEgpODphbT5NP00mYW15Sk1CPFpnZzlzXTtheyZZXz1OfTVKNVF2bW8zZ0hLKkorbz1QWUkvOjVFSUdaYywhVWJLU1h1aT9icVRnJTl8eD4hbVo8eEhbRXBKM3QpN2BfVnJzN3BKZFlOUCV6RlVpIk4zXU83InVzNyZdYyl0U3VRblg7LHVY'@;
put 'cUI0Z01DZ3k7YWImbSRNKStJPik8PFt4e2BsUyRKQnNxQi5NfXQvdFg/S28vJEo9ViUiX2xMJiF6JkhSfHRdNk1pZSJfLjpNIk45Y2clUylecVRVYW80W155PClSdyJgOlF4c0RESzhXK3xFZXBtV2MhQXhXKiZ9QlYuTHs4dFsoKmY5IWYwM3VESyM5SlA8TVRvRXtZLjVYKWh8Zi5WfE81RGld'@;
put 'ckAhOztQZ0J2KS9vbTU9ajVJeEl4PnAuSWc3MUpNfC87Ll4sVWo5Pkh8ZW0wNCwvOz9rfkpmQz5wPT1vPFhxa3NCUFNoTGZKP2tML1V9W1BXSkdPPHI+Kl5zaz8hRCV7XU58RlkiWFtYKGdydzlrdGVwQCMhZHt4V2Y3Zk5CLlJ8MG1JKUZWJXY6UkBFZ01majVRaXlGWXoofExdcF1QZXtbbjQo'@;
put 'XlRtI35GKjduRGtRIXZ3V3dLZUlsRFhfaURyYF5lKiZtaG5DO1hoQ0llIXUsQSFyTHlObDBNPlM3P05MZChDRH57P3t9cEZAZiRhUmR7eng0cW0ybCsyR3AhY2hJSUxkLGZMKXxxdEMzKyZTbFQsOyFiQGM1fHtoVmByRWBARFteUkohOWs+WWJzbkV9S3NZLCwlc3h9TEouZnVHWDViM2JHKHY5'@;
put 'UmxvWkNwKjxIa2dvN3lTXUBaV2NpJDJNSmJIRkZ7UihwSUo+ZEwlKUNQMUdoUSJ2eWAuRkxlT18uXylmQDNZTj02OWVrY2UyJilhdCR1UTdFSzUoOUxhakcqMEBaJmJHOHZOXTdAXSxLfDJpPSJHWDIyNVtAJDp3VUhaUWlySkM7dmZMLkJjdTFmd3VzYCUsQ0h4VXJ2dnN8VjRJUjtrTFYhI0k6'@;
put 'Imk4KUU9MzVXNXRlczxTWmd+K0J8V19WL3JJQFFqOEdQSFhnIndRe1MoaWZPN2cxWDU4RShTSFhpYn5XQnJ+R2MhVFZkPHpxZTI0XlFIXnQqOz00UjROayJsb2t7ImxsRlshXjQ4bkxIfFVGV2shUjZeRVlxaG4uVmk2W3o+aTw3dSY0KXZdIXhgQm9iSHBzYVc1VDA1a1NaU2tSYEphZ14wOChe'@;
put 'cSpPbGwpKTRzIVNFNjI3SE9YOWlxfGNXdSs0KFVQT1Z4ZDM9SyF4OSMoejF4ViVFTGNXLkxOYGBAWU9+IS9hVUdiWj17YEBfITMzMFVlKUw3VU5WN19OemZNZilaSy41PUwuPzFUd1pvXmlLblpSR149LnJSL3l5MTBocW8vMThjOHkzUS5YQW98JFV3UT9tVX1SY0lsL0AoUlJnUFZENDpmeWww'@;
put 'a0VNP2s9YW12ZyN3d1hCQDdbWUVuaEB1O2ArOUI3LCwlQGxpcHh5K2dhQntSRGVjNnZ4WSwxeHwuOE9eKTZebyhOZjpRIytddzdHd1BPZjcrI19wZV9IUlZEc2plWG9ONkskKTdye0AjTmRGXixKS3BOKnJeTnE2OUt0YFlxUGo6QDFSIj87QkByZnUzP2B4XTRCV2koYUR2fFgmQThgN08uSWtb'@;
put 'IlJ7Z11PJnVwMSlhaUxSdixCJWJePmlXb2NdZEJxOSlFZnQ8SDR3NkJadXZSUEs3amE9byRqXWRtI1FRdChHX3szUWF3K1tdVlczXUIrRDVpekk0T3UrfDZVSGJRNjc/JnI+XzxmSnd4WHU+cSM+NXdNSDAuL3JPVHpxQ3UsLFFyY0kkMTBzJUBVSDwhbFtnek9Ze2AxVHxOYk8xOUkqclQjWWpz'@;
put 'NypiOzBDJnFhIUVYfj4hW05nO0VfZEAxOWJqIVUyMl4iWSJ3Ji8kalJoRU1zIXdbPTRIemlQJUUvdih+TENuRVIhWixpJkQ3Rnk8a0tLViF+T2xgcEJ+aX5NWzt4aT5CYFdXPVtJWHh9ezI6OWQ9ZVNKZk57USs0cDUzJmIkUiRManJ+TXFeLlZGJFhxcj5eIWlMPD9oW2lKLFJuPz5HUl9aYkgm'@;
put 'SSt3LCx4LnJrdFBFIWYlLCw7bVMuKGZBSjVZaE93LDlKSHx+LlMvcyZEMmg+N0x7YFdNXUBhPEpSUFkzdEt3NWJqRylqbDU7O2hmOyQxakJCPz87MjghY2tibF88e1ZTUlRDdG1KUCpSREcmb2lRT2RYZHZgMVEwcFg6Pl1ve29ZXjJvT2Y/MXdNRChRLFkxYW4vYnYmTURaSXhlb3ghblV6dlMq'@;
put 'JElhQjJ2cXo/KlUuLylkaVApMnkzQ3xVK0tjYWhqSzt6P0sqUzFqd3piIXJSSn0wQEVIbUA1LyxyfDltTGBufTZaNT1rUik6ViV6YiFyNj1OXkAkKiw3PSV9azBQZyN9YXxxVnE/Z3slZHdZXkBYQHlGNFYjWXtgPVdOfW4+Kll2ZEd8Z3dVUiI7W04sRGhpaj18diZuV1pnR0tMfXZBaXpkSnpo'@;
put 'ND5BKCosLCoye1FreT1Eb1tKYFMienN3KmcmRCtAPExxTEppRUdAKHpoS2J+REpuVlteP10scFk/ez09IyVtO1VIS1kofHB5cSV5c2AqeXFPcm8iYDRnWDMwJHhSI3EyaTlLLCl8aFhOPyp0TmgjbEMwOl8ofltXaXQkeXU0XnxeJlE1e3woN3Y2QF9kPj5VfFdINTlIfUBid1RzOkxea1A0SzN2'@;
put 'Znh3MXM5Z2IjWX5EYVpIWGs7SnYwX2ZfQS5PcVgsJkxjRVJePXM8fDdVRjsuYnt4bCh1b2ovRHdCW2BdfjFAL2hDc0M8P25LYWMqQXgzdil+fHVPVFAvP2NeK0xzUEwlczpNJCgiSWo9RmxYKDN+fCxHNUY4NzZZeldddnM6IjprcyZVLFZYX3VgNFl0UFlWdytTRSM7UHNgSF5dQVJUMnElW0Qp'@;
put 'bipfIWlOPDQleVIhbWU8WDheITkrMGB0OyZPanB6KE9pV18xLGUwMWksLDYpUSkjLGIuJSU1THBwaVtsPHROVUZXbDFwPkF4M1YiYFA2Xyw9OWZeNDtjQzJnKnlqQTEyTmYyTFNdMCNtaFVdUk9IYkZpZ0A9U21CZnwsJmg4MlB4XiU/YEMyaXhBYHVVOkc7dF5iZ0xiY0pdeGFURHxMIUt1VU8w'@;
put 'dnVbTmhWKmQrY3ooRl1xfWU6LGU3RGIrLC9uZU1FcHNuIjAySis/XyokRH1scippRlQmUERWRUAoV2xVIlFPXzV3Szl2UiwpMV9wQjxYSyYlSkpdVWg4YytxWShecWUwdXgqLFtNUGlLSyQzSl5fI0ZHOTxDaXM+dkd5alIuJHpxaE4zalo0Z2p5KixEe09BbCYhNTJlL2FxUVsjXlYxLlklSE1R'@;
put 'diV6OFlWOFlVJWtFZTsxNGY1Oyl2cW94NksyWzZiS2hOLmYxRDJ3UjpqJFRSYUU0NWVHMUQ3QEBySl1LVWxgSkhaR1M4b3N8Uy58eTtoMiJqfmpOLEZGSjE7OjAsNnssamRyLGptQSxqL240b10xN0tkQmBDWlZVVXorVFFNbCosVXdiLi56a3J4Qjc6JTZ0cjsyS0RQPF8jI3ombnhxUV5HKng+'@;
put 'bFY1QlVzSkZtW3ooa0Iqd3NoW0xnVWtufncrSylNRloyQnc3Z2Z7IXA+UVtkJDNCbEsuPDRNPEh4TFFZOXtXaSE1PC9tLjYxbzVrSXhkZHomQXtEaSQycFRQeipgUExPezVEdGRYJURabEd0RyZeQ21GJDNXayh0YHZ7dilfMDtTRF52czpRY2dnUyYkJGlxWDdPYm43XXZQZkBDJV9CJWtfPm5J'@;
put 'R2liXS9QWE1NbEU7dnJBbFgjRFAyOmdmRnA/XTZzaylwcS85aShHR285Z2B7fTcoRkNIeWheQ30oViJtS15SVWNXUjV9ZXVaTj9NNGtYN09iT1dGN0ROSExARnd3KUxyWGFlKF9zNChbVXVuSlZ9dFpFKnoqPlYhbUBGWlQ2bi9dbkxSMSRgaVQrcyx0JnQ6d0t6Z3VoMXA6d2YudyZMMkszM0w5'@;
put 'N0hVTShwTClfOVdXYEoofXBkcmVednt2KjJKQDt1cSZHVTtKQEZ6UzVedXE6VGI5OE9paCFZckdeSGl0bzVzZntvPHx9YFk4WVgkeDhwKXliKDo4TFosLCQvbHl3PCNjYEx3WEM0LzlrX2AuaFQ5XnQ/bG9sYlVjJkxDbX1DT25KPW4+O0pDe2R3OUVOZl55MTNnUyRZc3A+T216TTljUlYvVkpg'@;
put 'OVErInw/XSZMdUFDJn12OnlpZ29MezgjN0IqTWBqP2cjTFFCdHFXKkxUMTxYNUVnfGhZRyU+VSw+KG9WPVNYIix1P246UVtfXUR0O0JGQUQrI25EN3d3QW5QMSxfU3lKJllYVyNnKn1QRn4rQEM6VVV2fCVbTEt2PVRjUVJfSklGb0csKTZgVDNGRkBWVXk1MX5sKkwwT3xZPitnWGdaT3xdW3N4'@;
put 'YS4kI05KPmRLR0oob1hTYWhlZSsuL1FbP1clcG1aSEBpKj4oe3l8YFI1KWskVHNIfStRa2ZtazkmbCNYQnJSNSMvOWQ2MUhMYzduI0FrNGN2JEUubTB5Tno2XjI2eCt5VDg9RmB4XU4xRVkiQmY8TSVJTD5wZGpYTkRJfE85Pz93dGxNMm0+Kiw+PUhYXys5KFUpI2JrI1VnMD00KGNhSypdNmU7'@;
put 'fGNMQWsvamVpbDkuJW9tIXNSOSMiR3ZZby8mYGc/VUVXTTghbFtvMVdSellZRHYwX3RxKlBBLFV5fkV2JFohWHV7b2chZCFzJT9vRVFtWlhKMHVOXmQ4ejVaMmx3LyxMK05eMTszMXZ4eGtqeF9iNCUuJXpmJWtYXmxsUDlyVTQ7P3o8e0pKJHU4KDkjNmh2P1RhU3IlcmIiRE1QclNTa3c8WyM/'@;
put 'WiZja20pYXMzJDsxL3tVYzBBK3A8cCV5cCs6THl5OVRraTxEQFpyWm1JfHldZUkoUXY+Zy83ZEYlZXxtUUQuVnNWaE54UiVMQTUvT2dYOjhbWHhiZW56cW5XeGwoYUNMZ24hXTtkSX5rMHUsJjhfYDtMQX46WWNKPVA3WTVpZU0pO2tEbS98OjVVVF56U3RINlUhXXpnMTlgSz92c0lALzxjfmp2'@;
put 'eG8hZGxSWnFYX29EeyFlU2FsLyhnU05ybXBaKixWSSVbaTlrMF1NX2l8KEZWPnY4YUdOeCMwIVhmRFN4UXwqS2BnTWYzRXgzKEc4VnFCR1R7bT9oRzN8fihWVmVQQ1tCR3JNOCklYncmX1RwIT9hZGZ1WCQlZDdVS1h8OXo1QnJzNjxJbmcjflJBI2UsPT9peXU1MXFZUG19fHtwLHU2fFJfOCo3'@;
put 'cGBlTnYlM0U8bDQ3ZFNla0ZSOjIkSX0jKWFTNT95S1MvSlpKNj18RkhtQVNWd21ONWk2NTN1WCp9R11iOX5lU15kIlplNl9qeUc1fGs/bmQ2LlZhJnlKYTxxfmNKYmVsfmFWd3NjVlhFYXFJN3VtflR0PHEodE9jPmJnTF9oPHFuR2t6bFoqWkRuTn5kd21OKGc3WkU2X2lfbyExY0AxZCN8eEcq'@;
put 'SkpaNyo7Wls8ISRvX0M8KCt4RXpZOH41QmVrZEhnc31XbiY5a3NvQE13QyR+b19AW00qSFlZKj0seXEiTUIsV1VGaXx0TD9VY2EhI3s5S2xRV0oxRHJMIyw/bmZLNStiTkBDUXMkJitRK1FDIUZlSlZJQkBXTkMlUnlIQUxFXVFSfkZVZ0xkR0I/MUJjejlwN0YsYiZre1ghbGBzP1FNRl5RUk15'@;
put 'ImVNTWRhU2p3NkFfaHFCcXxLPEhxT0UiKH4rNl1wQEJtQVRIKygjUDpWYShCWGlTbmZUNk5oSmlzdX4uYzZDeHFVUTJmR3YpSGpwNipxYWVmfVglaGtPRFQ3WGguNEEhaDdnKzp4On0xKiNHdHhTSCt6aDYmK0lOclhBcmw+Tl95UjI9dUZJaTgrNCE/XkBLI1V+QkBiNyVRfShIUEgmS3RMc2ZG'@;
put 'Zj99NTRGSSU9eXpmTm1Ob2BwOyhBdXIkIVQkQH0sMFJWXUsuO2tVMmg5aW9eejEkLnwrNmQhPEtSbzNGMDRHWlZgMz57YkwsWVomYGR3bF5UQEA+bDlHM1I/ZztnLnZOKmdPRG56OWk5W1hFeV0ya1hffDNCI05fZUFSQmdwTm1STllUYykpWHgqSGQ5Mzh8b01+eipzQyRbKnJlQGJ8eVAoJSg/'@;
put 'fkJfX05OOWR+NkhabiZuUUVXdjlkTi9JeGk9NnFAJHZ0bzc0eWQkTzQ2MUhQdkolPGM/LG4oO0g1IVgoV00qZXshRk0qR202SlJwb1BNMH1aSi9jVDB4UF0wOEhbbl1zeEFCSCF1eVhqUH5ASityIn0xZUUsTX1xPlRgcyJBN1tMMlV4bXM4MkBCRV1yV1V+InVmLyJUK2JxU0NhUjZ4Wn5JUEh2'@;
put 'U1MxNXRiLyZiVlUjNChOZTU2ZH1YPz8/dT5gKjdzMjl0NVk5WXkvMTNiVik0YHc/IWAxWXQ9YCNOTV9Kc20qZnB8XUVeMztbY2dPfVJ2PGN+dmpbWjF7bEc+W3w8TWlZQSxeQUdecVQ0Y2NeSC4yWHhjYVUjVEh5fSMrJWpDMXk2YjooQnVadk9hKnYrYVc1JitWPU0pVzJORURnfD1PTUNmdmQ1'@;
put 'ZjNvaz8hK1NVVil9RkYiW0IwMnUqY19xbUxmN3QlRks8TzAyNFpmJXJQSHwxaj8hQlIwUy88bDUvWUJ+dy80RChTLmY/VDR4MWU3X25pRV0lRVAsQ0s8RElyR05bJjMkKkN9MToqKDU7czJoQDRYMmg2YFNMREtUTnhsXnFpI1VUN1c+KUw3WzYsPmhPUT5KRG5OfTx3OWRLfEFXbEtEYExFeUIh'@;
put 'ey9GWjpyZEM+IkosdDJ9SVJqQVU9Vkp6RFM1KnVXQzJ5TWlqV1p9TSsvRnZebnJ7dDxYTyZrS3pEb0F0LntHc1gxPiksbiI0dG01X34oejNlTV9NKlF4Y10+OUFpbX09fDI/M1dYTzcvXk1jUVtmcDVXZCJTW0wxSj8/Z0pYdnE4bGk8XV9+MGMpSTpydF5te3BXdXYmL0JPQ043Qn55X2BTSEEo'@;
put 'ZWl5MEFHMihpe2xPbEhMbDpSTSxeQ2xNb09ZIUI+Xk1jUTtCcTVXZFBUXmxSKyR0aXsvRWB6KTxEYkguUnl3fFRlYUQ5PHdCS1VVcW8lRmIpPCZxRm9FbihOW3hOVlFsM3BiMzd7M14ob0RgRzlWZiwsT2dxVUNnVGkmTXlnSXBZeiVSYkRDeFRDQDRxUiNHM1JoL3BXfStZPDZ5UWkleV5dUWkv'@;
put 'eV5dPyFsK2l7NnAvMUVXaCl0JU1zcCUpNz9MXW5eLmZqSUwsIWN9aVN9IVtIfW01LF1nXjt7Onc2VWVKc1RJfCpoej4sJHQlcCwsTkFUTEt6Rj5EaVdVcmRbJGlJPC4qflZwWUg3RmNKXj11OTd+TUc/K3h6QnYvMChqNFpQQ11sXzlXVkRmRFNYfSM1YSYmQnVCd0haNV5rcGhBUyJJPk1UUUJi'@;
put 'cSpzU2MmX2tYUCl5V18+LDE3VVdGWDk6Y3o0TEEyZ2R0O2J0NGU3UEBud1EpejZQMS8/Smgxe1V3OVRuLCFDd0clbG9IU2I0YDh4dkJJQi43LGcpX0MhXTszUDpMN1Y6WDNsUjljJXRpeFp9aFUzT1UxSVthS1V0QHc9SmVsVik1QmZwPkh9cS9FU3I8aVl5aihLdlY7dm4yVDojQFs2dm5Le0ol'@;
put 'JjN7QH0iYGsvU25Pc3JZPkJBbT1OX2FAPzR1MERDQkQpInFaemt5RFRsejxvWjRsZERLTkZya21eXyhmKDwrcDtvZiklb28oSSVNWHUjPi4xQFUyVEg0LzJhOiNOUFYmcVUzOUtSKkNXWygiJnB0aT9AVnhjYkdOUUVuSk0mc3VSOiQxZFtaX3hkXWFHRkVqTjAxKXZ1YyVwX3E6dCslWzxhbFYp'@;
put 'bixWQGBnaEgzay9HPysxVDd2THFTejRTPkomLHQ6Smh8cFVCIj8pNFJrcDZNU1FuWEY/PG5ueH5TcFJuMUxRRV91W0hLOytoLjZ3WEU1OzhELHtbJiUmNmlDWnN7VXtkWztOODlMbGxSeVdaMmRfMFBncipxZV1CTWZ4VkFkbV00Z2hpQnJ1XnUxZCloaGI5fTtNP2ZecU58I3N+e2R4MDg7I1p7'@;
put 'RFh7WjkxN2R6disqYUtLUWl5cF5dMk9GPjJNRDQiUSUmIiIjW21WaH1EL2MkbXZEOnJ0Ijw+SU5SJSZpPjp6cW9AdDcvJmJObzptY05panhFKTk3Xzc2ViVac2lXZVdudmhDLCx8U0ppZChRMzNCciY1TXM+bTd9SXNeKkN2c3RlRWpMcH1xYjg4flR2KmM3MWhLPlNBNVc+ZC5SUFlRL0osWj5R'@;
put 'fn1yMUxTfUxmY2U7Um43SlYpWUllTDVodU41bj5gODkvVGBbYlJtXnpBaCl+cFcwLnpqJnYraCl8LH1SfUd3WTRhOCs4U0QjRyYkPTIjQjtNWys3SlRKeXFIM3VMOnZ7UjNsPE9wPCkjXUxgPTVoJkc2WG9VciJQUWQzYG5XajBeViV3dCg0TUx7Yyl2bDtqV3d0cFtPYnNPN2dyOSZhYyV7Ol9N'@;
put 'WEBsY2xnPlV9ZVs9XjQ/UWQ7QFAjZXImWzh7aTxGXWk+Yjt3SE1VeGtwWVBaPX1lbVkjTnZEZGJvYnZDZDBqJmpCVHgmWXZHK0RARGB1cSZbOFhHQC58WSYmTS55R1RCXTZ0Ly9Aei4pPi5QbFZOJVpMaCYrJTFKOmV2cjsqb1YqPG9GaHYuJUd2N0FdQmR9SSxdKEE8cHZ9MTduVS9COWslZUc+'@;
put 'KmpKczBiV1hCIkRzYi84MUN5TVs4N1siSnkxQ3R3Nzp+fkQ0VHIxLiQ1dT9rVXRoQl08dF10dUYleiRxbClBaW41bWVsbDh+I2hbU1QlbG98PHsqfildITQrMWw1OWkrU3djQ2d2Z2Ema0Uie3EpS2hzNWJjQksjUjZZME4meWxzcX1vT09iN016Z21bTkY5MlZqR2lwaFEuPDc3JSNPdlNsMiNK'@;
put 'LjJsKWV4QUVUMUkzYWI1KUk/XXdUOWNKO3RsPyEhc3FRS016clJ2TGZwfjxVPmZpYiw8ajZ4WWVAe3lOUlEwKlEpekxLKzIodT5xbHUufSxEYkBhJWZ+Pjk7aXJeKU1ybz0zeE5DOkEySzRvXlZyVVdkV2pyN3N6LGtGX209WTJ3e2FuZzIoJFVVPSR8LnA2IUZLMUQ8VVpzVTRuQkRWezo2PWBJ'@;
put 'Qn5FbHBzbClZNXFxVnFlOVRUN0VEeU1bO0w3dE5RUC54b3d8amw5Zy82I3NqcEdMKyNPPkR7S3N+KkFWZzZsezdtZU89cl0jQ3o2Wk9IbVBfRHlwUDAsNlRUUjZBYzZSdjIqZiE/PChtJUwmWDFOeW03O0wscWklSSUsVVI8O11oMTxVc201TT1IczpLZn1dSldnRCNoZjU2fDJLRH5lVTRAYW9e'@;
put 'TFpxbHExNEIsbUkrUF8+Tzt7dz1dRlhMNTdhbE9VL3R+eVB8LjpOUkx4TD5KOj9LYTNwJG9UI0k/ODE0W3xXQ300UTVNajdyU0J+ZGxzKkdaa2d5I1JHL01WVTgxWEVadXR9dnxXcFRySDY5NkN7PkImWG5wIiZudD5MPVFfZ08uPWFhKENfQTspZ0AhVWk1PT9dODx7Kk5zRFNecCUwdW9eYzRr'@;
put 'NVdRPSFvS2RdbH4yUEEie31tZkQyQjU1K1FzPlt5Q0UuM0NPX0NtWkk+V2NCLzVrO21kek8oRiNAajt4SihBLmhIM3dQZzQyQiQ1MkBqbChfJSpMO151QFdufjJTUzx4QmM7LGM7anQwdHxtTDJWRWtedykpanQkTllscEJoYmRtUnowJjh7a2Qxd3pvWDlkSE8kLEltQmVELHVJUCNbLDl3SWo4'@;
put 'bSVJYzZLZShHay47dzUjJmtWOyhucno2bUh3KHwuXT9aST5NRzJSYE9ORGk7cyo+a1YleiFhcW4wX21HPmE2Uj40MTRWfS48OyExNHp4Ukd2K31wanw5THllXlZFfSVMQmt3WFNPMjZuJXApeE0xcVtqZT9jN3pMLD4pVjBydVpnVVRkOWgjQVNYYSJbZzNgM1cwKzM3bGdqJTAhTV42TTZHMFJi'@;
put 'cGNxL18+d25OPSlzOi5oKEFYMDpRelFTPn57d1VFUntGclQwWTo4Lj5VPk5+O142bSg4ZUMuMXFzXk1vRWo2fkIwc1NYMkxTV29OZCRDXkB4XmdZVnJ0bGQjcG9xZiRke1JIeCRbUllzYVReflVFRC9zKnswKWxLKkosKHglKmRGMG5wREN+M34xKzRuIjMlPFNYXz5zYz4zOi8sLCZYSH14I1ZH'@;
put 'dz1lZClBUXhQUTFBYmw/ZlZtb2ZWRCUoWUk8Mil1TThbJSlhbXRELykxS2N0ISIrdCEiTjJpN2p+UzojaD53MG9LSysyPkw5N1BxUVI7PUsqV15wPD82fU9DWzVRVTx0aHdNeyhuI0ksKWcoOHYwY2UrRml2MllsODAuSnM6LH5VTzg9SWA6ND5xYVM3dzBsWGtGem9KTj0kJDVSJD9kIVd1QEpG'@;
put 'QXB1Qy9FeClrVj5RMko9WlY2PjNIZVR9VHR5IUNGZXRRRk1LWVV2VHttRyxIPk04TndwNTY+Y0YkQiZrQkEsdSo0S35eQ21rQG9Xe2w8Tysie002NGssc2VYRmVKVHJpMUo9Ol46djBhLnhHYjNyMDJ1cXVFImNzQEN6I2QzKlJfUyo5QVc3cWAiNHRKNjdjQTQrZE1QU3heVj5NfltBZkVGfTFA'@;
put 'TGlBISMoUVZ9V0sqLCslMFlqQSwpbW0sfntQJiw4JComKmB2bDFeZDFkMzBmSSpgI3hdZztYfSNyaW84OTJSeztiVChXQVMqSjU9NzpDKDQ6JkdrLkp+elVFblJkdEtxKllyWTN2VD4jWkdxXmRQcDR4MUd2bX0jeD9qe0Z6YlRxPkJWMHpvYS5OYkEyanorLF1VNnh7bGZhYkRYaUd5JXx4MHpw'@;
put 'eFVLS3plVkl5O0ZlcWByQ1YudSVHVFJASTdvW3NJb0whKHxPQmskOEMyVl0rI0s7T31rRDguT0hGd10pZEd4dyVXMmM6QlFjQk1FVTV+SFh1b31zVE9eLHZxU2hQdS48cXtYSHBOQzNKLGZVNzNqN0AvbVtLcUE4LFhbJjsueks9OiluO0UkZGAkaEwwPSUpeU5UcTldT1hidWREKkpeLnYyeTdI'@;
put 'WHEjWGg8biZbSTM4WVtVYmVKM1prPnhpN0MyT11jaC9XfWFlWnR+dWw3O0slOExaUUMleGs9WWUsaW8vSV1EXzAka3Ywc19mIXZISTo8bmpedmpMIU15NFV+Myp5fHExT3lEaFNnKlMyKjg5XV16XXRaQkJCaVkiOFR9cWBnTWxoZkBGQChjWjlPQC5hQ3RKPlQ7biJdd15AU2lkalBEakwrJXhJ'@;
put 'Yk9TR0VAbmFxeVh4MilZeCI9WiMoQFBfJnNpLiJLKX1eX10pakl2Z1YlW19dKURJNFYvfkloZCZVIXwrRUhaTV5XRXw6cjhfQyxkZXp1aSVHOjMhSWl6NiVSfFE9KG9vbClJdURxaX5IIiZsMTFsW0J6cmUwVmtrJlFzSU9JOV0uVUsqPmNZRzd4RE1YX3swTlI6P1djPmBeLmhrOCl7XSxhaC8z'@;
put 'b2NqQn1NckdbLFdBe2NiS3wxaT8lUnlXWiZXbllNOHhjTmpMfC4uTVoxWzpKZEI2fUkiSEtSRncsdnhhVCg7Wnw8RUhOPltZT2BnWWl5KiswJFJyeyNnYHl1e2JIcil6azNGS21bYW0kOlZtKXR7OXReS2x5RkdEcUUmNSw5MnB7c01UZkg/YjN1RjNQSmZmW1NNPGdNPlNJLjFUQD5XLGV9Kl5L'@;
put 'OytHI2x6czluQzxlUCkrS257VHZ8Y3VaM2Zwb0JzTX12Qj1pdFYhYXdoNT1BXVoxXmVrYC4zPzcsN0JIYm5mJEtScnouXTAxOXEpPCw6Mj4qaDVNJjwzVzx5Sz5CKi5YekkzODooZyE9SHFvTSljXUhHdWpsez0oNVpoNUoufCl2bHMrSklNbkJHd2lyV31KZz1VWTkoSn11fHYwMHF1cT1hTTh7'@;
put 'LGBZSWg7I3s2bEpiUX5eekRRTTc8Lyw0dDcjRmpoNyprND0sTlJAJmRpeEk5NlhgWHoxPXkucztjQkoxOylOYFpfT1BwejE1e0pacS44Kyt7VUNlUC5EdFA9YmcrUjI8JTRFa2peTl4hKSVXOE0lRU8xaCJaa1c8LHJ0NWwlXShXd2ZCMDBaOHRpdkhYR1ROOXsoJCRMUSZbIVBPI3JYblVPbzda'@;
put 'eWpASDdkXXcsMDltN0NbOTdiT0lpNTN2OVZXVXNqSmZzOylnPGFjentQVmlRMUVbR2U8Q1QmbEhqK1hKbysySDtYQyZeSClqIndxe2l1TlJzWSVWO01eNSUmcl9iVnJocytJSGNiJXFoNSh+YjE+ciFjQn5Jbix7SWEvajFUZyk6RGtOMHZLUnoxYDwhdUlYLCVmeSkpfCx0dkA7fFdLYWhiZGBJ'@;
put 'I052JlZNSDFEQS8yUWNpfDBtT1tLez47SVhxa3pkOHExaGVdQCJrRlR7JmFrJClZY2Y4SSFjJk1SQ2V4STpLJEJnV2opbiVlX2xFTT9AZVBQbHQxPW55Z0tESy5dMzF4dWslPmdZQzNgJHJdfEB3Zk0hdHB5b0gpdzY4Kjl6MVJlSC5vWUZDa1BSRDU5bHtsRVZeOUx5c3ZqOzAsS1E7dVY6d3kh'@;
put 'WForQVF9MDh0PEAxSm1KQCFvX0Q5Y2R3KTRBR0pMYyhxTW4zVSswNHB7S0sqKjVddGs/WWk1RFJwWUhpNEt7IytQYWlaZj5OOlA/Q0k1XXFQS2FvYFQrZXtoYlp+JSFwZFVlOG1oRFA7Z1A2NTxvMzs7LkBkaCQvSTtyZXpdeDcsZnBjcX5iWXVSSy5SMSlHRUteKyVRay4qcmhdZ1sqQjU7S3B7'@;
put 'U3s9JjtgbCksd2ovMnVxJCZUeShrMlRDYGo+SlpTL2hbUGJETSUlOTtlSls7N3R9fCxdTHl8SVhLNVUzVUldR2ElN1VNb1lkXVtkWGhYPHsiclheeXVDVkoqTC9RVkswUXV1dFBYV0FdVCE8YEptIS81YjhZdVRhIXxJMkZ5aXc0Q21AO0NqVCxTPj1MO0BCO0tSRkZSfUI/PkRsNjYlekZFXStf'@;
put 'amtHTXhqWkRvaihkQzglcjImTnZwUXAqRUlPcUJRbmhAZi4jWmooZEM4bi91X0JQM19nIT9CS2Zvaitkbk56TEdJd2taVil0P3dnfWBMSSY0fV8qeHAydjlCJSwrYSE+bV9ZMVkzIXUpazFyIXVSdF5HcHZhcTQxMztRPEdFIiFePkQybzU5MSUxXT1vRSFnN3BJWVJ4OGlJNlo8e1h8MGA5Ynd9'@;
put 'N0VqU3lwY0t1eSE6M0oqLkl4eUIue0M3UXZgI0M6Tm5PdCorO3JLdCNrK3xAKGMib3s+KUY2SUc3fUBlJHJaaDVAOD1XMkNfXVgxVWZPS0M8MyYqKCJHQnYsLCJxNS9wUls7UnUld0FifF12KSImTl5oYjptZEBRJGp4PF1SNU80bH1AWWo5R0sxKT4raEBiSUYsZm0rVlBSMElxcHBNX117JShJ'@;
put 'QHAsaCtwUTB9NWcqSWRPWjY2d0h6Qzx2XlppL0ttT15LLGdLOloiZi5pb09wTWU6Yz5lZlV5Zj1PNlRLe1R3NHZTbkU5JHpmKC8iJEorQmw5VmhrMXAoRXtCQ2o5MUFSKDhYSyxIK1Y8UkhFbSRPdEcmTCxQejlqemo+IkFyVE5mN0p0PGY2fTx1YWQ9JissfGhqUiYkdFJpX2M/M3haMFhkcG95'@;
put 'TzZlO1pTNmhbclYyfnNAJkM9N0RqWUZgaFUkYn1+dktpN2JMRzZZJUA7M2A5ckFfKFd7fUlxIUI6fFB0JmpePDxRbGZPSE5mYV9ZRzFYSj4sOEJGNipAI2JRY3N3fChiM350YVoydWYyMHAhSSZ1e0BCaiVhNlkjQ3g0XT0pelQyWnxaSnYsKDZVVXE1OHA2K2E+YXBMU1JeIWksWTNzV3UudH5F'@;
put 'eVY5TjhpKVhISnViOFlnektGazxpYER3ZWVWTTIsSDJjQkJ+W1o8bHg2L1UqWXVWUjx7My4/OWRdIz0uVH4jZnlXJXxscmgjLz4/Kj1mI2ZTL0AlSWt+YU9kL0gkSmJLbHtZOGZqZUdtNVAqOE14O2daTT5ZeCRJNTxxYEBtKEQmallfQWZHaUJ0Zy9BYFNfNWtvPGtoZXs5OElPRiYrU3dQT3ZO'@;
put 'UWU1VSFOPSlZJlk7OF8uMVZDKXwoeS9WSiRucCV+Mjo8TSw8KVdDTGV5T1heRCVdaXdOKDwmPFdTLC5Dazs2aFQweChmIy9PNGxXVndkd3QpZ0lgRDIpYWkre1t3N1ZLOnlwRCFLeXVSJG5AVVhmPVRGXldVenYqQyEhVTk7b0JGbT86JU9BPzVJMTU1KSZNOk5RYEVSTDg5S1gqJn5rbXksdWde'@;
put 'MClNX3lYT1hRe1hwbW4jQiY4XjV0KnpQYUFFbV1AIy85MWIkcEpBSmJAKThvcEgqejkxKyYxclkyMCIxUFAxaixpU0BrKDNkdns9Qnt0WU0qalVjQjQyJU8+XTVDNjRNVCtIZ1gpTCVdXytKanFpRztgQjwheWxTKF8qKjdqT15aSTpqUG1Rcil0SzlJSDhZS0dMdXgiYCkrWVA4ajV4USFfT11n'@;
put 'bTdYdng6WTk0X0h0Z11AZU1HJkR0NGc4Y10sRiQ8PWdaYHc5JmVsKkBrel9EXURpMHhsTXYxKW5mYTArXVhlNXVwcF9WMWBQR3cpTXFAQVtAP3A4IiNiSkI1WShPSGU1dVtbeUJ5Py9ZbztrPGw1V0ZHXWpsKDsrOGY1RWUoXz87P0RybVMrZUh9MT4lUXRoNWQ6LHh2O3RyQHd2RnldM2xxRlNv'@;
put 'PihZTWEpN1FnQGt1d2kxdVElWGhRJmRQRD4hXj17bn17V1cwKyx0b10jekRvb0BrOytWVkpIOm1VQCJqK0FFK08ySEwsQkZgV1E4e3lSUEpGRHFaYT5bQ2MqfjBBUjVhcWg+amR7QUdtQ3BiTj48JT1vW3hJd3ovN2YpNHh1M1sqSmBFMXQ1NT4/TTljMFJNVGEkTTg0ZHo3NG5VfSIhJnZJb1VU'@;
put 'SSNmTTkrUz4sOz9rYClxc3g7ISx6VG4le2Q+Kll9WWQ6TGw+ISNMJWciVlJedG1ublAjaExKc35ic289SzpLWmh8UFZdOSNtPF4oL0UuYXIrPUBXSENMKi9iaGZENjcsT3k/RjQkUWE4QEM+VS5JImRATyNHWkRmYzo+VyFeeiUvOTxUM1NhdG1QP2soRCFeViR6W3UrNExzSTYoJmYzLyJlL1Jr'@;
put 'NUc3RmEoc0tIO2QkOGtwT0VxVjAyPDBXd2NrTWBwZT5gKXN7WThqIn5GTThaTEFzIUM+WjpSYlhLb11BX00uSG5IZlk6JkVXYmI7S3pEfUo7S0thRlNEOX1kLF15Y3lOLF1xSEE6JWRqMUpSOy5xKSthYCxTV3xRaSlGUm1CXXolUmVDTDJEbXwrbmc7SGZLV1hxSGtCISwpKXxUL3pvTlkwMiI/'@;
put 'R2RueDFKMnY1NGJOcyFPfjkxS1pmeDBEcH1PI3RxcE5QSF1hZV5sRHdad2w9NVQsYUVjQGUqYSR7c2F7QFI7TX1zZlB3Y25Jc19ZYXhrTj5xVypeaHpYb3g6MGtePzFYQnN+RHJVVW13fmdBfn0/VWk1LCJrMWZNYkg4KjFaZThIUU8vJEx0cSNoRDp9MzozZTJxPS87OkdQTSZrSmZlXUA9aj5a'@;
put 'K2JwUUlfP28iUDE5UiZQUXEjQU9yaVZJQlI6SUBZR3xLMjRYbnhTQygvJDdxRnpObDNOXmtlK0Zfe3A3WlYrPighbkxQZUIsUzp3JipxRilOMXJQOyhzcGorKjY6bSoyWk00WTQsNUIuQipkZmtUQDBVLzZGSzgxRWVFV0A8KzFWYz9JNyV2cHZIJENxOy5kZGhseHddbkVCIy5pQkNfTissM0F0'@;
put 'eHhnaEZDLDhuKFVzW0JAeTxuUFM8OixBfGl5QHVSek5TdmJnXXJfdVRgNSRHKjVDSmhIQiNmS2o2V1dEWm9RTTRkTHhMLjxaL1h8Y31QTi5Gfnx9RCk0Q24rJVtCT1tyNHpCR25VYzxCeik6NlpyOVY/JnEqcFlzYXtpUnFAeH5FNSxIUStVPGJwb1FSZjtVTmFPYl5XQ3FZMmEyMTE+ZXdxYF4q'@;
put 'aSkzI3ZIcV5rOlsha1pydWt9UENrUmQvY3cldVc7Mmh2bnRvd2AiQF9PJDBWc2czcShbV0tzMDpFUlJGIVVhdUJiLGFuKD5XbzIjTXwlek9qKz18QzhvTHZ7PFhYUkZELlNIWzJNaVhVMExCNltTZjBgZy56Nk54KH5ucn5jLD5tNyUqeFZxNGAhP0kwLlhkX2h9Uz5rXTF+d203P3IiYGZDe0hf'@;
put 'aEVtc3Vre28je1lLeTxyRS5YZ0MydytZaSxbSCFQa2tYMkJSdEY9Sk4uTCwjY0dbW291W058Ims6cnlKQmtZNCFoWDYjTXY8ciElI109W1B5PSpqMyh1LmpzVm9Nd2c7S0B3Vl4qME9Ta1NiN2ZAKyU/YjBzRUQkMEVsUnwjQzF0Rn59dU9JRHFrNEFXRnxpQmtVImpkL2tGLlBFWFB5U1pda2M3'@;
put 'TjMqd3k4WjVaaVIkUjFkMV9HYzolWiN3LnlVKzV0O3p5Y2hFO31zXnRSWmo8TVhIfS85MmpjVyVEZU5FRClZPDN7MEREQDBCOVglMlVFdUk7XjljWC5mL0BHT0k1WXJFQTpuMC8ueTEjRShnMFdYV0QpeSZRT3lpSS89YTZseUMyaGcqeHd5bnFaQTtKUHljOn57NCh7I1VqWkdPTihaYXAwVGZt'@;
put 'JXBvU3xePEYkY3swZFR0KGQjPChrNlsvLH1IaiNgUjhKU3RFdTJ1LHRWakU6Q0YiIlRueVclOSw+PkZtWmRbOlc/QmRNNDhAK3R1L0ZSdkxTTigkRyh7MCZic01fZSxoWi9MbWh8OkkqNkZTT2BBRSllRTEwX2l9RWo3LndlPD9YYXtobUZKT1lvTFdrSER1P2hfeTchWXBFeU4iQzEpK2haRUk7'@;
put 'M0lvYktrNEU6NHlJR19nUjwzJkgjZyNZcXxNQSNfXVcydVRqRGU4TUUsPUE9VFU5MjIkVHdFVTVuYXBeW2djI115OyJJMHdMXUhzX1hNO0FpTFklL1hXTW0yTExTUylbRUdGLDJGOikpOE5IdnkmIj9iKyImJTBHT2NdInRqNWd6TW47Q0V2cF5AM3FdODkvalNoOSV1Wm8xR108YG9vUXxOTEpu'@;
put 'SC8xajFBa2c8IX4sRHx2b3ZPJSxYfX4qcF92dUlSTT9YfG43ZVE2b2BRJWRQRD5wYEBNO2ZOXnQ8fVAjWXhtVUgjMFElQG1yJm18LE80Wkg4dUN0NXUvb29kdDlLKXZPdSV3KFc4Umc5Oyh8WGs9SVgsWHgvRnd4KllXQiomKTZ1dCFJR34/Z11kWHZEQXErYXBfaTx5WDlNQyhBYS9vaFVWSWk0'@;
put 'UF80cmldbHFXR3VsYClmJDRaW3kod01rc0JNXUY8W2R8PCFGZjFLPCFkakM1LzozUjFbYkM1RmU3KGVDQW0sRHwsNltPQUMoVjN7Il1SZm9+eWVyaGtRZXp3QjBddnRLImx8aTh3TEclQkNiaytRfiF7V1EpOWRCOHlBZ0MrQllHUkY5RDBxZEVYRnRBW0FgeHMhR3g0QUFUWCpFe0NCJW1dUSR4'@;
put 'SCU1Wng/aG9hTVFsNG9PZmE8bEoiOFhjbXx5U2BzJT5MSWBrYktlcVJ3dSZUIXVtXV1haDhodFMofTdjYXhNPjZ8O1dKJldEUlJOekR+UXl7Q00oQl8/cm45eWI3OVJwWWt6fXJHSCY6UVtaT3VTMHU/NGB1bU8mU0s6MDoyZT9EYChiZWZ6d0B2VFhZN1NLVjFKcCl5TH58SEpAdWQvUFkrT3p6'@;
put 'OypuWH1YcGpURGNDQHYpX01WbyVxRj1jNllgUV1EZ3cqaEdtdWxuIzpgWmM8Y3RLOF1yUF4sL0JQWEBbSVoqSnlZT0BiOWY/YGhuPSImIncqJWRQZm8vMWJLWWVmRVdFTmwpeX5iOVkmcG1RZk5FIWNRPD03I318QClpKSxQITE8MWdiSnZ9akFTLng3cW5OIj50cCJLJDdub0R6LF5NQlh1bX5V'@;
put 'YThkV0NXNUJ6cWxRakszcDhfTENyYnNSS0psUkdCWztPdzVTRVFqLCxOdjxDaV9aK3I5KWJCVEVCRjhiP0dQIzU2UUAhOWpMaS40ejModU4pPUx6dW9nNzwkYWpOU15rcCo1PkwyaXo4MmpsT2pZZGZTL3JIcD1vM1dnN3NraH5vISthKWtoKUNBOms1aDNRaiRjU1RYU3YucW5JPmhCL2BWOmZr'@;
put 'Lkk+ZF8uY09aNGI3YnlEfDgyUEEqNX5KIko/S0RgdHd1RjZ3ImdAd0FxMUUpUzt5KWM/ckVYO1tGSWpaSzg1W2ptPlA4WlFYP2tUW3I0MTtoZTU9Y0IlSjc+VjJjU1VTbGk0XXo2MXg+fSE1dmY2c3lDZX0udig+fnFwaU12dDR2dWVrckhaaz05SWFoQHpSYzUodENhPHpETURaLix5PnFaLjRv'@;
put 'RWY1PU8+djV6bnc0YkJNfjQ4ZU5wMGhxezkvQT1vb2ZoaFokVXlYZjMwW3UxaTcoUkpSXjgsJSRZWTVEOmkqKS9nNWZHPDk9Q31RcXwhUWN8PVs7T2lCZWl2dEU4UmtPN21CUntEWyErLzl5JX5xSnpLfE1eSHw2UztjTlJXXlQ0TDZdR1RJfSwwcipOOHhlPVYpOnskTUdRLCxidSU3dkxFMTRp'@;
put 'Un1ReDZZJTAsZXVJaHNtKXx0e1MuLDZLRUBiLyJtfGNaSDk6ZXRbPiEoZWcyQTNiMjo8fjlNZWMwWmRYaT5iX1FbJlRzdXlZIU13cz1fLnB5e0N9UVhvcmcrRil4Wn5Oeks4eSFbO0MhRGUiclBdYXNmPHRmTHc7OUJne3lKW1csRVtXI1U5ITxQSWc/U256ZSJyVDtoMXVeSWFyRG04dyUwPUw+'@;
put 'Q0F6MUI5V2BSUURtWjphKXQ2dXF1bWFYfCM/OXk5a0E8QC9JenlXZStmTlJWVDl0WiNMNUYodGsiOG4peX1+QWcraHE+Riw3cSM1MyE1Wj9LL101IX1dXUlJNnxrc1MrJldPSlM0RCRUWlM1bWwwUDFtaE1ffVBKbz56ZlNjUS9mfV0mUWkmVDFAY19QMDI/fWRBZHU/ZVMsMGZWJU1YMCtnYWJR'@;
put 'ZVFTaWNXKEE7JXlmMk9pb1pVSXg/LGshXll4SyJEODokIjYpVjFJTGRDXmdReU1aSFpxJldERWZ5MjhwT109QEcuUSNkVXh2PXcyLzA7NGQ9dE0qX1lId345I01OX1E6KUM5X2BUdyhdfixmWiZ1OHR5bkMhaVZZeyZ6VztabUg7U2htfjw8cC45NyF1WCF6R2smbEhjUV5DcFFeP0Y1JUc6JU9P'@;
put 'OSpBOTxkbn00d0MybTp4TWU5TW96P31jQ1Naai4ocSQsLmNsKEw5TFVtQVgoVX5DJCpfZFcxPnVXIWNzPCwmak1TaTx3KXwoUmhCbENOU1hVZHN5O2IzKUR7UHZBWHxpNUg7VVJKc09TKXd2Tj0qOy9eeSlncFV4OChaPCpKVkxuailmaVBadlM9OTgqLGI3SCx1bHNlL09JOkdRelclUHlWbH5S'@;
put 'QHdVXl1AM3hyeFg8LiwicCR6InxOZyUvQE5qPXI/Ozl9aU1SXWA3fFQwdGFDcyg4b0BHVGFJV3ovSVdVQ0BOPEA0fmFYQzgvSlhpL2F6RT9xJW5TJD0qZUpQenI/YVNqKHJMJi51TXxadnBRIylqQEAvIllOMEU1Tk92VG45Jm9VcV53PipoaH4jUzo9fD1NWF5sbF4uTnAzOTpzc0pEeT5VWldP'@;
put 'PGwlT1lHMUx0N2AjLyNnZnE4UWRgQCY4YUFIZl4yXmdXb3QuY1tAN2NqNkArKXI+MXxAViVvSHY9VWcpY3BAZmxqYzlAfCVBVSYwbV19aGg9KUEwYVtFfEpoOGhWVHBuVGc6eilfaT03eDtQR0tgLkB6fnNAWmtMMUIrcm8sc10iYkswXXAwYGNsUjhUezRKS2FrTDFFWzU3LDdgUVlkKE0od1Fw'@;
put 'ZFIwenNueFJMRShHQiV1blNhamZqY3xhdlRyRD1HTElbeU99LE9NeCQ7Q1J7PWUrfV1WblpnKXNBfWRbe1ZAclNXV3NwMzRVNXpwM3l7WGoxdTxUbTcmJVtAP2s8PjpUeyE3eGtYVm9FN2JsKTplV0hZMFVBZCQ2NSo+RWwvW2tgTzFnMjRqRGV5ImRYOiNOTTlacD1eZTlKXj9bKURIM3pwOWRy'@;
put 'Uk9oNSpkMzFNUlsqZTh5ISxYPn4xVlU/aDYpQGoieTBoLDg3ezghcE8+RUdYVSlxUDZSfHdsUzdzZT13dzJEYWs7MWdwLD0zNnhwaTtBcilBdzw8KC97PiJZeUBmZ1hMW18ueDFlZkV8eX1fYVNPZit0b35NSlQ5ZHdscW9xKEg0S2Z4cXVOWDtOPkB5c1M7Xl82Tj9kOyVVMFklcT8rUWo1ODpN'@;
put 'WFU9K29vdXlXQ3F0dmwkW0w2LEAyISpieTkpM3YlcWtdRl4zTzYwW1lmJC9LPHk5OnJtXVUxbVFtTVN9OVBBKDFyM3NZeTU6TCxlNUF9UjFRPV1IKFtiSCpDRXsmMSYxO31iJitBfjJmN3wiNXhxe0hxeVBlIUp0ZDUsTkdmJnd6IURKanlQbSlncSFHNSlwNT1peWQxLkd0KGt7fTxLc2ZPdXhK'@;
put 'eEd3VC8iLG1PIlpFKiU1NnwrJiNxPT1LWkNDcHs0Sm1fNUpeOVh6WCR6K0UoMTc5WTNeYjF9YVNqNkZGUjhdP2BKPV1Ie2AjYH1LdS9+bSxdT1s/YFZ6d0x2Jkx3UkY2XmssUUdGe3w2JU44d0s/JFswV1MjSGA6YzFETSxvJGEjcTU9e0o8WCM3WCU+Q010Smd9aCNqbSZqX150YWdPSzZSWjlW'@;
put 'KGNOWFduMFFjfW0hfkpuT20za1JpQmBoODJeQGYxQlI7KWJUOixfdn08R09NYlN+ZkhSVEQuPlVacDQoN2c/Zz1IZXojK0l8Y3old3Bpe0kjcFNsJCtka0EsbWQ2VnEyeHdnT1oqdHZ4cU9tNFZZQ0tYZ35sP0tnZj8vKS5ZSDxkNX55VDhRMHFFI0ttZVA3RH1nNyg7ZSQ/YiN8QSZMay5qVXd6'@;
put 'aTMxdG0kR05DKChTYWUhYlpFYDo6LDFhZWJOSVgmW2JXK2VRNjVdc3tnUU4mNVlnUUIwd3oqezYvP1s+OGN2WG5HNVRNKmV6aiNJbWd1UUYsX2h0ViRxOmZ1UUBDekQ6LlVJUWBaWER+TnR6U082XnxSPX4zbnkzcyglPVpkMXNwcG84RyltJnx9NVMyYE9Dd0IuImdKcCk/fE5MU29mX0JtJHp1'@;
put 'Jk5KTWQwMClCLnA1RXZdQGI/el1fL3dBckIwLk9UOFoiInZQR3lbYkZlbUgyLEBrWzsyNU08dFZtJEhufm8kX2gkPiR0VisqSGtvfkFLezZ5MUhWMFB0dCM+ITwqQFU2azVvMm9VaF4/ZDovd1hgKWBnTmxCYHRvYFlZRmx7bDshY308fFpDTGFve3F2eEBOS1pHdmZOaGVIWTtAKnlDJnt3OTtY'@;
put 'Rlk5VjhATFUvYEJYUTxiU316UF1SaEdfKjFVNFtgSCZJVmEmV0YyKXwjMGZWVVo9Z24waWI0W2oqZD03amJjS0clYkM1b2ttO2IxcSR0Nlg2RmpLOWtlV0YqcVdjfVp6bClrIiNCdXwoc1lDZ1lGLygkaCExWFVNW3NnYnNxbjpaQkBQXWZiYj02WEpTVWRSNiJSIlJINmM5PGo/M1B2fDF4Tz9F'@;
put 'Z1ZSPEFKRmxNJHNRIXFoSTl2RiZrdH1NeT1DMnoxREB6WFNsZndvOl9pczIjUGlaclZ+O1tZRVFOU0AlUz5mU2ZGelBbYWlbTDF+dWhEQzNUd2okc1Z+b2I2W017JltSRFEkYnZpMlEjNkZ7Ozp0byt8XU9bbzhOL2o7NVJDZ1NtUEpZYE9mQzdhdiYuWmxhWWNLXVBaOzpyJVVHZkN2OS9AP1t1'@;
put 'SEY6d0d+MzI2WnM9bFVmW2JyUSh3M35RMjNTa2ZCUjJeQkdIR2VodEdpQTI8M1FiI2QqVSw8aSI4IlRCa0pNP3NfeD15UUF3VyN3T0NFRE1nWiQ0OEY9NFgyVkByZyoydUxxaiYhamZSUGlhc107NlQ2a0NEeXlFNUR5RHwkMiExa1tAS2YzcUp4OTtAZGRPcz1MInJJPn54cSQre0lJUz8hZHI5'@;
put 'I2lZKWxgPmx+Ono4KDVNXXlSd2dxaiJJKEczX3YxfTYvYjhOZEZsXXR9Qnh7Ond8QEA5Wn03aTF6eFgqOXtKIVQ4ZCFNOFpWKml2bEdULCwwcXA4NCtOcmthVFcsVnZmQGtic3IzXmBvN0JqeG48THxhdlRfSj9pSVFAOEhpNWZQKTB9QyFNaV1VRVdXJTE2Un1YVHB4cXlfQEt8K0l9ImxwbyhA'@;
put 'cnd8VF83JWdubSRoKClvNH0vdEtpUUNwbzBqcmhhRXgxYFUsXjw/JTx2e2hzajZIcXZtVVhNaXUuX19FdVR5Q3NQMjppUihKQ0lSaj5aIUAxOWI5U3NvNzVSVk9UQ3VqaHYrJWoocEQxRlJUOHlQWywvd1IpVlVHZmhrX2luQGlSRSNtTlgyWFdCOiEmSjMyMWBTdXJbRS9AJXE3RFFaZnArLE5U'@;
put 'ZUsvbHFUYjY4O1N9Uzcja0FFKmcqSn55dmhsd3RtTEpfO040YldfJUZHZG1yOH01eiN1aCROYEB1PlVMMkYkL3ttUEsjYV4pJCVwWDxJfFdMMygrXWlXZ0VsT252SlcveHA2KmJqV0lkY3AmMFJOV1YpLjhQUSRQNVl+PC5dZWlwUjM8MHc+bFsreWloZT8oW0BdQ1tDOVMpU2U4W3ZRI1c5NHhI'@;
put 'bDNafWtMPF1GZDY6bHJOPjFiMXVPbU9AbUdWVylTaSZXPU5+UVQ4Xmp1b1dwOix8Ii9GYWsiWjhjezphITh6Q0gkKGJ+em9QQy48Qmxxen1wTDNjTFUuYShIbHhsPSxSfX0iYDUqOnxRKzxpMyRwcjJLdiYlWWl+UyIzaztuYWJHO2coY0M2Q0lJPUp3fl13e3wxcGt2a3RNajtVXl8rVmREXkIx'@;
put 'eSR7aHkkYDVvXkJuPDZdd3dAJCRZKiZPSSR2UV5pWGFxVDU9VShLfG1NJVIxRCF3WzRBV0hfYEguRyh1YCtgPzp1cG9HKDZmbUc1cGF6YWk7clU2PXA8a3smVEZ3Jk55JSUxNCJLLiMudCFfWUtzX0w1XUojM10pa1UvO1hBXlFBdklnL2tSPVJTSE58PnM4VC8rI2ZCI1BYMDtLcXtGKj85LE5O'@;
put 'JnAkLCtAa3RGNVliV3QxPixKQEpRbnlQMCJyI1clI0d+aHI6Q09JY2RCUV9NNjV1amtfK09RRSY0N3NBR0cofl09T1FFVj9eb3BLLmg/dUNYbT1xJlZfTnNzWVY5TjM8S3kvdVZ0RmMkWD1KZ1R7SWckZG14a3tSfV9AWjczMD8lYnswOCl7OGhxR1cxeG08YWxMM3QyZ2dscXpRUlppfmkqUlJH'@;
put 'OTg4ISY8TiRiS0AlL2FfNjdQN2EsMXN5dHRbaHJGIToyb2d1SXJLZn1oRklMbXshOzh3PDVIZzxqUnE1clMvVCthezA3UihjcWtLUjteNktdPHcvVXtifCtFbUgidH1eTmhtdjBmeiFCdSg/MiszbngxdTkwaGVyJXgvIlB3Wy9MSH1DKFE4WjMwRz0kTTlSPSx3MTwjb3B9alU2WEVPI29PQ1tZ'@;
put 'UzghYFJtSWNUMUlSPEw+S3deL0xaKVUzTV04WGAhdSIoZmNPeHFPezVqckU3RGp8LlBDNlk4YXRlVWo3Y049bWAiVnQ+N2BTTVQpcXNFW1RaZmxAQl9LcG0je0paVTxzeHZwKkgmanVTQUo3OlMyRDpPUypALi8pQDx4a3ZwbngxRT9vI3IpPiJ+QF1nMFYkbW5mbiNZamlOKCF+Xm01MnhHISFL'@;
put 'W25CayJ4USRIMWVEencoQ2hXdkJ2OEdrLEJ3TUdgTlhYPz59PGNZOkBgb29LXVp6az5pYjtePGk0Pj0mPyRsdigmUUgsK35hRUFgMX1UJE05azo6Ry5VQ1g8QFFZakg2InxWJGNHfENHNk5fI0NEeT08QUshKiVDRW48ZyQ5N1p1X0BqTEtWRz95MHI4SSUxJjEsRTRqeV1pIzpmYmM+UzNwT0hW'@;
put 'U21Neng2K2x5QEtjISZiVyN2SHwlYWk/IU5oPE56cSxdd10oW3IkZTVIdDFNL0shLDp7JEdqOXUpLDhvS3FeSWVfYjhmQFtPZlh3QWE+OyEuUTFNTFZ3MTFNPD9dRnZPRm9vNCpUdldsND1fbjBhb3I1aDhbS0pga14uSjJIW0FqK1lmQl0zVjJFZkgyRkJ5fDF8LHt5cmJuJnlhMUEyKmckXXZg'@;
put 'aFFeazFEJWdXSSVfZmtYYF03cDgkUn40ZF1YJUg/cmwiWkZwelo8az0lP20+ZGouK0s7aVZnYXhrI0owT0lOLl5JOjs5Xm9RamF3Tm81PywjR0JANSJHRCU3dkxOPGhvdjBHPUNbIzBld0FTWyM9SHxKMjZrY2wvamMuW3dOV3A7L0JoM1hxTXZPP3J2dDtbNix4SSxrTCVddjFHbHhgRCpRSDZC'@;
put 'WlN3QGNObWFUWm1kMSYxKC5ETH0wIXxvWWBsO0srPDZXYlkiL0MxK0ExREE8ekdQSFRMUUI8NFlyOk5ZRS9CP2s/MFdOIyk+RT9pc3RaUFQ1ZVNzSDk0bFNkYUVpPm5DJF1RLGZRMlA2NChCTk4keVFWdmoyXnVCISRQfE9uWm5SJEV0Y3VKSnVOWVNkWnZnUi5oQUlQNUkwWE9hYXthX0hZbVVq'@;
put 'LmNmR3c8YHY0OlhQfnQ9YkQjN3VCJEROWFB7dE9ORjxzNkFnOkZqRU91U3Y3cVEyUkN2T2VmeExtSGpMTV0rRiRaL0ZUXnNFTUNWY1J2ZiFhOyRJVVk3VzgqQFFndTRxQDJsUk1FcSJtblpJbzd1dXoiPDdLUk1PSWpsYStjOSw5eF1kLERpR1MuTUBwYiZ3eiEmJFBULCouV2w2R0dsL3g4MEV0'@;
put 'KV15ZGwwd1Y3UWovW19gWldIWHEreHhrdW9PZFgxWjo3YFomRCNfRWFESD1CUVJGJDtIL0JZQWdNSikmPHh6WCsiKFNHPmtURHxTemxiN1tdeWpFRTFqcjZSUGI3d2Z5ZDdCJC84Q1F9fHp9IXZiKCpbbld1RC89RERPSjBzUFgoOFtBZG1dNT0zTzY+Nlg9SH0lUFZ+fSJNRVcldlowI1BudHJs'@;
put 'Yj85WzVhR3Q4P1d0SU42a0d0LCF5fXVJd0RkNSlVXyo8XjdQL0RkNVpyaVQ1YTFKd3xAe1tEXzAjazNUe1JXV2ddNXpvXldjcDteQjdTcUo3bWdpNU08LGY6PlduejhCMjFxT3dqfWUuQzpbWlpMeW9AaDpMSFU9dCk0Sj4/JEZbPX5AUThbUWtCb1p2R21XNlkzU3F3eGx8Rzp8SEIiaCNZR0xO'@;
put 'dD9gd101PThQOlFyb0kiZHxfcUhjb1pffDVNciF0OCEoQWRPSjAkIjNHM1l9L0JaP05FfiJ2a0VFPTR9WGBreEZYKitUQEpeMlg+WkRgVkdHbyV1b0BScilCZFk6O0ZbUH57eWRIU1p6PTx5MHY8I0clPkc5STJ7Xks3SDtOaSVMLGZuZ2IoeDljNkoyU1IqJnxsSGZoayVfKVJzRWg3VHl0S1No'@;
put 'ZUxEaTZrbEpzdndMR2N2MWxVLzBjIzo2WnJ+QjIvO01lUiF+T3NjdlJxe3ZecSJCPzQ1JGU1Wm55MTZ2WkJYXkBTRFsqN09PfXcxciY8MWEqZzBRTyIzN0UobzxySWNYYnN3YGhrYXN3YDU8Yk9Bfi4yKHpBZEBGPU1NT1Y6LkxbeS46ZHNNUHc2K1soJXJOUDR0TDd9O0dmdkZeQE8/Jkg/MFBN'@;
put 'bT1Yc21oNVJmeHE4PyVHIz12KGJ6MXEoRUpWfihGaXpHNUIyODNJT3h1aVI1NitkY09aZDRRfUh6e1Q8NCg/eUs0Nlh6Oyx6Pk9+MHpIdlhtMFNmX2dFYiRUbitzeHpaSjBdTzdwfjRYWj9Mb3puOHRpP1o2aVV2VCRVZlE7VXssWzwwKUQlJVVub1EmcntKc09RWUZYNmw7Y140UGBJU25wakBK'@;
put 'K2RbSXpiQUpYZGVYIjldTk5wP1pNSGtJO09hSzBHNktSaF0kRE9eUCRCSCo8UUFgUSoqVjdSW0tTPyIudEh4Kz9YdHlaZ1szRUc1PnhWe2B1fEVvZ3dBJWcobFkjQkFLdGJHe2gmdWJfQHxkfGFoYUtfP0dYVXB+NUg/R0R+JCMjWS81T2J+Km1gQ1UiMXM6KXNAYklSQjhWKF9hKXo4IzxRcy9m'@;
put 'bj9YUyU5S0x9aUAkYyhHJXFDclYqUVtGOihzLDBrfG5END0vJEQofls+W2kqQD5Jbns1YmMpMlBtbHtePjBUdl4/ImhpQH1KX3c3cEQ/fVR7PkJyTVUqNUc7X2lAd0RqYlV0Wmc9N2kpVHteQ3B2STF2W1dLUHZ9cjwiaT9TcnNpdDRKZm46TTN2UERUeXFWJXdiSUU9KUskZE5tQClQaWV+Lldg'@;
put 'QVlLUUspdD89MUNzST5bUlFucFIzV3xXWE9UUiNYZXc4eT1PTVJFUDpfO0FRWi5kPzEsIThkWT43TEt4ey83JD5tSzFPdn1DLHhTNWMmJXNoKUYxMURIPk1nQ1NwSCsyIUwpVyg4JHMkJndGTlh3I1c6MmNwa3hKYE9QdGx5ZSI+dWprSk42VSElbTwifGljPiVfNDtOVTF4PGZlN2VNSFllOmRE'@;
put 'bnJSPz5qZTEyWUR5ZyZ0XjtqWiNYRVgialpydkhBWDkyPSwjblk+K2gpMkEzTHFyJGU1NDRrRWZbWTlERDslIUB1Q3dDP1I6WTAjRU1hR3Ehc2I/LGBUTjwoTktnVVlvNXNiVSRvd0JJMC8lLyQwX2ZWKngqU1Z5OG1VWG0uejpRbVglR3B1Mk1EWCpmTWFnKjprSX1XcGI9fFIxN0dRNXBpPkhR'@;
put 'UWk2My4qPVt0SS5ZZyowSFheOlYhdEZOb0VdVys7XXZWJXZ5Ki5JVGBOZXlXQ1FOdUVxWGM7PEZrLiZEI041KDdnYSFwaDpZVHFXfCM0Vn15XT5CVUJNMWRaYzZVd0k9RiFga28sOklPUTowOFFnTFAkN0xZREBFXzRbQiJJdGAzd2xqJGtRbiVZNnxSWjErIzBdI1JMMzkwQnYxV2hJKGNHTlJq'@;
put 'bXFVeVptNio5fEokNHZGN042SyozJFlaUlZxSjorImZvQnNAY2xyWD91Rj8odUZOcF4sLzF0dEQ9bEVhWkdSYEg5dilmJHF8ZHw6O0N4MGdHIzxFZXlvOyV+QSpnSSZNOSxoL0AiWFFlb141LERrTmVCPVRXZDFyTl9OOlJbfVNhZ1YxbihHRy9dNC8xMlJ2VWAmbG85T0tFQUgxUlFqT1l2UDc/'@;
put 'eWlxRUhgdSozemBZekI5OCpDe2UjblB3cHc/YEFhJEVHdHJddVkqWWJ1R1BnfGpWNVlfXl90LFk+dChSeWxHKy5hVjJGVDkpQmxfaUdvTDRsazdCYkt3TCJ5Nj0hRGR0RWYmJjxRVk41dHFDfGFKZDs8dkBnc2FPR05FT3AyIkxoTz9LOm04IVtjbWNBNk4/SDR1fjtpR1VSd2JacDRHPnozfE1B'@;
put 'M3EmSU1KSF9HPXpQVm0mMkVRbD8hPFpdPUJPYEBDK2wreHhKbjovJik4W2NHZy9ybHY1MU5sU2A6dTVlaTswVHE1R3BlSyNhUzF0YXt9NlU8Wzxbd1I6LjxdPSYjKXg+VTpLVVRdbj94YFg5bXVENTsocEgkZWA7eUZfTSpzQyllWEpVNjAkPkl5VmErTWw2TUgkeiZFZCFNTXZUdUJJdHhYJmAv'@;
put 'ODY8ZHx1RVRwMGcuOVUuMClfdSxjd0FSa3B9IXJAKD1tTilwZDBIfFcpOWZXSWAya2dhYltAXVNmY1ZtIlFkWDlkXVB4SWZTemJ3NEAxSHI7Nl0vODZ0NmpGMUQ8X0lSSTtPU3FneG9fQD85NVtPSjIxV2JpdUJ8ZlhCX0Q+Q11mJllrfCpBLmlDcGdFUkp6eSoyVmBfK3hWPFckc1JyaENUXT5q'@;
put 'ZztIcFZAV2ZpSlRISWZjWD4vTSJfb1lIVXU8TFNxN3ZJU1ouLFFyenosXUlqcm97RWJHIyErVDxPPkhsS3omYHtTPiUxSyhQUiNKMVp0Jk85NF18UjpiWklpbzBOMW1pbT4hS3ozJjRQa21PNX18TjReVE5je081aFowRjVlNVdnZEo7OSp1TFBVRWY1QDEoQC4sZE9BbmUpK2pZImN7NFNJOnxm'@;
put 'Znl4MW01Ulc6T1lmO00mdyxZWXZVRlB6aEwxd2BSbkJLaS9ONnk9TzNzUzpaYjU9bDYpJTQ1UyR7ISR2ZlB7Jl48MWFKWzdVdVZkSF41U3BQVClBVF8uT2J1KC96QVBhMTRvI2BhWD57VlE1QHBAUld6YnQ1YmVwZCN8dVA/W2guSTUmIy5PeSEyNlBjUjpqLF1Dcl9mJl02PEg4WlJRUiFoLn1D'@;
put 'IWlSUX4wVXVmejxyZkAmXnpVd0hdbWFVUy43STI8TlM1KHcpImVOMExvYSlaKjNaVm45UjJfe2Q7Z1RYNT10Z0RdPHs5dG0vTFFqPklzb05bTVhMdXlvX3kuMSwlPE1eaGhTR1FrbUJuMG1tNEFVYGxSfGQuMmAsR0RFd21NZzVwUT1CaDo8OTttW2FdUlthVTEyUVs/NHArQ1RzIWFOSixnPE9+'@;
put 'b3sqZDJzS051JW1OJGJfU3JOeWwxK35QVCR8W3s6d2pDbz1hZXlsSShHYDxWQGhLMD91K1ltczU2OzFUK2NiU2BTbGV1cmdKQUszeVkmPi5ecUB7dXEwYnJWZDhXWHchQXBEO3IxNixhLDMxRmVhZyYweFt5Xj0kc1pwMFZQSTwrPFQ6MyUvRHh7WXBFPDxnXnVaPEk7UCZUeUN8bWdtbCMqKFsq'@;
put 'Ql5kMkolVFdJQWU4PlZaVlVRaFVLMF1PN2BCe0M0Z2g/WnVON3pvOk57L3tfbH1nVCYoKy49PHFwP2dmc107R1BfU1s1VGlMeH5NMWw+O3NRLCl4O0B+QGUicjRVSCxncygjOSxRZFhAM2hCXTZqSC5sMiIsMnomLFEkfG99Zmh9bV1XOCJWWFpMOE8xL2dhcDY1LzptOVVSVTlfRUdCK2QyWFRy'@;
put 'Vm97U3V3UEtKSz8rX1Z6XkRsaGFuSyYwa1NLUFFWWSpReVtMPVlILmlKOndVKHkwRVNoOD59dltaYUZndislL1dkaSNFXSFiNG09NyFmMkoxLF48cThAK19WNG0lfERqbHtuRD5JQFhUJW08SWQwdlI2TV1lM31dRXAhISxGYl1LeVFaQXxqVkhsaGdnRlFbRjBbJjpiW0AlPWZGNG1dW0MlJE00'@;
put 'dkZGfl45b3Z2YjJ5eVF7b3dXPCZPcUtJRjVedHx5eyhbS3E0QG1rbD8oemFjdWE7JUU1ZS4pVkRsdkVrcnwiNDxoJENGZi4/d3lxd29rVlFmejpmbXcjaSk9Oj9YMTdFP21sX2V+Pm1sQW9WPU9YOWFRRmc4OiE9TmhVSkZMNnx1cmhwMGxZVzpNNT9jbHMrZClHWGFoOHkwNHtGdzJpLzcuTCxh'@;
put 'VGlGVEJkNzJxSHNkMTk6emJMUmFBb1dWfW1lUGYrP2N2XTUzY1QvfFR0Vmw8LGhvTks0V1UhYlRDSFpWZ3A6YVYsODIyRDZLYT0hU3IpUTpWdV91IjVTdmJwdFFiRTNdWFpoJmUhck40akY4e3k3JS5KLFpIKWAodlB3bEZROVZbZW5RRj5UKmhEX1ZMO21OQEtkIXVsKjBdNHcjan1HPEg2YGQp'@;
put 'I3Qsa2BLWzNRa3hNNjp3WmtUYU07MiRuUD1yIjw5JlNwWiNIPT06SzZkLDRVezp6YCh8JTt+aUl+JDZyaFg2clpNOzYlcmxbZTRqcG08cHZ8RiNRNm97R2Rrdkx+M3dMfjxhKnI+elcxQnwhfXo0LHs5cmgyT3ZIPT06PHNhIXtbRHhOW25eJlVNaF5sdER8R3t3IWQoOXIlKTxIcmgvUi5FWVRB'@;
put 'QUFdekFBe1F7eWpYWlldd29OR3AsJUdIXlhWUnsxVFB6aXBMbVgjKkF3QUFBQUFBQUFBQUlBeiE+b2dELC5kazJgbnU1bn5yZzcheEkvSi93eTwsKWI0d047Yz45L1gsUmZhIVVudlVUbkkiOVJ5Vl1QeSRbSzw2YTU5dWtXUHtFKnw/K2FhPUJhZ3lbTGpIPjJgZWZCZHd2cVhWdEI0aHU8dzNh'@;
put 'I35IMDc1KX4oQVhkdD00cjNPNTdQbSR2Z2VDV3BiJl0oY0wjanw9OExQM1V4VjhzbUN9NEpVc0t7Zj9PKUZpfE95TTtKck1dQ1JCVG8wTnVVYDM5bXJFSHZUeDZdKFJnLEtBNmtgSjA7KF11R1MlJmswcXEkMFB+JF5zRnk4RVl7bCE7PjVmUCs/VXpHU1YzeD9PZnpQd0VjYkdFYHovcVhBeURL'@;
put 'd0RDQGAqUUZEYDNDRHBeSD5tS1t8Rk1wfTNzfV17O0QmWiVbOzFCc1FXcSlOPlcsSiYmIUd9L3VjYSlnfU1Sc3B+ZCp0RkowTipgVHl+VzUwPTBYWkV+QTg8XUlYb14uenRzKmloTiMpYUE7eFlleEN9bGFLaFhLKEI2d18+UzI4THp7dlg0RFE/bW0wYzpKe1RHaygjYDpaP31kXkYvfCg0fSRp'@;
put 'NnlsKjtHQntkUl1YSkxLelBGeCo0Nj1nTThHbyNjZDlaZ3xdUEBxVG00YUFPUSY4cUp0I3k2RCE0dFttQGF5Yk94Z2RrPVQ7WEloaCRea1dgRVpLY3dXVUJRbW9MMj0mY1d+fiQ3OkxkNVtFIVg7OjQmcnQhRSRVRzBYeT1GR19vOjVyemNATGYrVTN3PSUvfkxMK0s7ODIwND4jLlAuW2d1d3BC'@;
put 'aFgwUUYrWVI/dEJUXUciTHIhREhba1FhT0ZHNVt9SSRyWyNBVE9LZkZCfDZ3RiZzWnxjaCwlKjdJXnQkL25aTHomWnRNPWR4NTlYamUhOUw/eSVbNkNfO2pqYDBAdVF4cHBbTjVucyY8Vk43RElRb2l8PVJ8OWUpS3Y2NmpXPGEjLEVjTldQJXVNMDgxUEgpOmReLnFTOm47TmFyaGBZQFtzLiYu'@;
put 'OC92d3pNdWdiOj5hdF1uPEleMGh5U2coVDIjXkYrcD54aD16cFE2TSZHVEt7Il4hfktQakpieiFdUHtrNlRkLlZLdUdCVlsidzQ7cmhSUHtHQ3cwd3JBPGBXPF13fmMjTy9hdnVfQmNsPDFRTTY8ZGNibTpGUnQ+KkxUbnZ8UzRReGlbT3N9ZVZnVHJ0dCN6b0soTDRiYHUvVjYicEZwLyV+RFUz'@;
put 'V3g3ISI6QSZAWFtyZk9+UyxrbEZrYnNPNClTXlpdPD9QRjFzVmFUNi9nW3l3PnM0S0xdSytbeCQhVFlVUzA9aUVwLHJ7IWImVl5JWGddMmApLG9VaVhwK15NbEFoemB2fElUMlY8IWdiKWBJdXIudUlxbzlpTi4lMkpiZDoiWERXfisoaUZXJkQ8L2kqUHQhJnJFfUpTTihvIXVvNnloaXxea1pk'@;
put 'PmlFN29xIWJyS1YrY1NqYGlbLlcvUFtValdSeSRjWG1SMilQb3kwLzNpP0tNOGRqTS9YU2pOYG4hIkZrSzQ7YSgyVU89VnhnZCtUZU8mPCNRc3oiQGFZZFJ+LkJ6PCpnP1IsfU1YVmA0UmJtfG0vSTU4IypAOEMreCRUciN2SiFZNDdGa1U9YF9SWGteKCZXbVNLPzdVNVFxPlo4Nn0+UShxXTRR'@;
put 'bWx7JGcqamgwPTFWKzVLaTBRLDx+THZYXVNGJj4wMXg2UFJmdjU5eC9ffl93UnRFWHt5RW96MWgmT2tQTmUvMlhGR3doYHVDLm9YRzpDWS5vbWhtYSxyYl0xQT1oMW5CRihIMGNBeSYqTU9kTldOaE46bFZCOlYpbT9oMyp2R0ZXdjNVbGo/RUUqQmMlQT5tYyMsIXZbfV4qQnR2RlFyVHdPeHI1'@;
put 'eDc2K3BFfColYmg5UkMxW2lTQm9QPmlheUdQZTN4cldAMkdyUHhPdUpCNFtJSHYweCJJRnswMEcyfCRoI0JaLH19cnN1UFNEUUc5NVk3PCNiR2xPQmQqJXJqdDVOLz9fY1M4RlglaGMxPl1OdlsoUVJKfVdnW0l7UTRYKl8wYjQqLF1sOClKRWh4TDQpcmVqSEEodkczZT8uR11VKEglP3xEI2ln'@;
put 'TEpYbkJseFk5aUZVcExrQ1BrXkImKUQlIT99Zl0jfG5TWnNUMSl3SC8uZmlZUEZDeExJSV9bSU4oWjNLJjlLSC43I2Jue2hEb090Zy4pJENEN1JRbipSdzRNX3JSRUtLUXptUyo+L1dSIVEyaUR8UyEudEY4XSNPQ2ZRSHNNVkxfJjAmXlhLRntlSXFidXJXYzwlZ0l3dV4oQng6aj81Ozw7LFE4'@;
put 'fXtPMm17eiNadzcmSUVgUVZwLkQoR2U8cy5RIj1QdDlKIW8mLmVJPG9TKG0sV0JUN2tBSTZFPCk7NUU/KmQ0RHZLPCs5by8/L251Kld8VjZVSWhyZiN0L11ZJS5wYDpjYD1nSUliRVNpQCpBd0AzLnltdXhkeHExSGg9e1tsdWF4ZHV0fi9aZWFlPnJebGtEMTEoMUooWWFwIlZ3byooRnwzdyZ3'@;
put 'e0lYV2ZvbFpHYG8uZllUdUUxITFdMUFSInFURDk6ZDQqMG4xdFBdfk14KXdJbUsqeVlMVEteUT5dZm9GKmxlSnZYPEsqVjJJMDcoY2ZjdFY6TXpVamBQViprdEMsLG86K3hRZ1hrJXNYdnV9MUJTYkg8LzBbX2VRL18iZVdDTG5zKTA0dDtFUE9lNlFoN3pDQnAxXlZFbFAmNXNVVmZXRGNNNkVd'@;
put 'cnVQNEJrPV03eTVJIXQhaVpFcGJNRkgmN0NIY11fWDBNQ3RyP2VCIWkkMSpQbzFxOTh6UEppLjB5UFBDPlM7TmZafnl3XntQMlNXazc4Jj1AJjx2KnJUM3k2eTJbJVdxXnRLSHRFamU7ZXVCTzdGeHw/NE8ib1BzUmBEXWF3T01lYSl+QjBrZylSQD5feDV3ZkdPWW4zbT5xdiR8NiokKDhqVUA7'@;
put 'dW1tRDU7Nz8iUz5fMV9ed3goNGM8W3pBb3puRU0xYWMhfkg1dktITEE0MGw0T31jWUNASmk0MlVgN08pUCVeSz5DPmgzIzsoQiZbNWo5LGhXUz5Rb1YyQSlZPk14YTVYKlE6aHA9cE5EKEhoWCJWI3pzWmhEbUo1KllbI1V0XmM0YXcjX1VwWmpvcENAd3BxPjw/Uk8/WiVuPj5hWjBCUztDODBD'@;
put 'eWYhUXV2a1RKaHYpQnNVKTkqMzQjYzl4aXYrfjVRZGMkO1IqTkxJUz9pTz0vKi9qKlhBPUpqWnEvd1tFYDo1cH1XIi9EUnxkM2AkJF18fnIxWEE4JWY0aT56VzQyM10oSGUuPytgIzs2VmZzNDIpaGo6WFYmNCI5RipSOipgV3M0OjlwX1omNTB7W1tqPkFXMUsqSFBhMDoyVVdCa3g4PklYQ21C'@;
put 'ZmFvYTBQXnFfSDIkLkZrSXB6InlwWjdtU2JnPWV7en1xV086QkNhezF2PjNodndJRko4SVA1I2x3d3p3Ykc3PCRLTFkxLldpZHF+MW80UjdpRClDcHV3LkhuI2RaSCxLbDFJMD49dld+NEQ3S3ltTDtYPHRnV3JMKjJBKGMmPkdddSRGKkgrRlBfNiVUfWFHKy9QV0RfTD08JkUwVTUvfU1NM1ku'@;
put 'MWo2IkczMDkxQHptS0ExbXprUkFlfkE/STJZKzlTZFc/QDRkWWxvaUxfQCgpTDlGXTU6Kl51JiwlfS86L31yU0xZUTsicVU5VVtIaSljNTEwb2JLMko3N2huK3Y9e2IocGZCISxsVzxyOGJzWSFhUzBkITtQe0J7Szg/XVQva1IwWUlrISVPdywlTHtYQXJ4T0dXTTJuZUwxTXYwWVlCIn1FJEhG'@;
put 'fU8mdTgoenx0KkAxfC5ldlo0djVnNWxYSj1qN1FZPjxJU1liak4qUkBGUExVVCM6XXVjMkt6bDhARDYpaFlmRjZ7ZSZqajM9YGpha2VKczRuI2NGNWFsQmd6Mkg8LEtTJjdLNjZ7azglRm5zb1dmcilfNXtBfHB4YWx3Oyo7KmVvQ1NKOVU1Y0g4SmpReEtRJXNNImhUPj9VMEF4VSM6YSxzN3dm'@;
put 'dDs2KmldbWRkcEQpYXRsZSYhKmJVPGEqO2lsW18maEgxUnZTKy9vfVBuN0kzKzNmJFFZWiQsN0t6YEJMUnVrIi5iKndaVFVqRGVrajk+KDRJYz9QMU4+NXMoU0N0aXBWTUdnd0dZQG8wZ0BIWnM/Om12JTQ/KkFjfGk3fjFuWW9eSXlBeXVOflA5XUh6Ok9IIiRMTmtJfDBgNlNabEBZcVsiKEVs'@;
put 'V1hmbXs0bFYuTD94WShfJFY7Y0QwYjQoJnVfZHFmPDxdMmdhMjRqSFgmfkd2cG12NDF3Wjs1cmh2KXlyYjdRYDZqQU0icmFKU2l7fGQ7cHAlRHRVIjYqVnc3UXZReUIqZ35aSntsdCMjQGBbPU4vVktnRkBMbkhYV0NKZiNedFQ6eUoyaVB9X3FZOUsvOEY1aiwkZzBPYGFoNX5ldDRQez4pcnlT'@;
put 'RlslZlliMzN2Ikp+V2hAVjVaKFFWQVYpMXZgSV8vPyo2VGA5fn56XVl9d2dMU3NnRW9lNWR+bFo3P0g0RzJKP3pYJWw9fSFHXkgyW0lDRVUmZGJ4JkZ7VGB6bTckKDtvTXF7TCxfWEtrRkYlLnBvOmw1VWohfnk0S1Jge1JKTzUoOGEjV2kuRzlxQ0gyZ3c2LztjPHMvaENAbT9FVnc6eU9vbW5H'@;
put 'OW0sWmwzK2tLciMqNFpAJWpSSFAlRWIzYEBBWyg9bmJRIXNbdjVgRG5xUH5CKSs2InpOJG0pdS4oXTlPTDIjTk06SXJnITVCV3xYK0tYcEJrRElua2Iwbzk3Qn16O0QzLikrTCUyZUtARV46KFYzVXNBZkBWOEhdKm81bll+LENPXjptJTNTdVdKWyFwby85YEpLXnlXeERsWDBZKVErKyMoOkhF'@;
put 'NTIlKkZmQkFZXSNfNXpWUCltWDcjIzRGM0RkM1hNQH55UGVfKS5qT0JIMGgjNXI6X2VZWzRUfSQ0em8iVj5DdkxSaVlZWEtlMFpbQih6Lj5fN1JmMSs6UUdDWCQ7ISRIciQxfG9sVXpjJEUsUHUuZ19+Pi9OYjgyMU5tKU9Hb2BaPzczYHhoKlhAZz15RWBiLzBvNEBmeyZ8azBUeCk4VDZIZU4h'@;
put 'OkFTRSN0IjpNTXl0TDd2SVZWZzM4KW1lOT5ldiN1WypQbyVMbHAjX2F6JEtlK2t8SkJCSDNje21kQD9SIlEpUjJXWEpnU0poNjQkV2hAandnYWI9IkZgYzZMbV1lZi4jJkYoUlRveXBKMyVqMGQ8eUlMVWk9bCVwNyFNMS4ySENiTl1kfC8pTWlCQStySV4hJCZdOSlYbyQqVzY0S0krYSU9KWtT'@;
put 'YzFKdDoyWWFAQShydV1lOTgwIXx7P0ZPaGFEdDFqNmdFcGU+PCIoTkQ5X0RlRkM2ZyE6ZDt6XTx5eWAsXTJpQmo0WmFCRE53UXdacHZFfWtAYVU2Ti5VeDVOXlUoT3lNfjxfc295cGZQUnlZSXpkaXp4KV1ddSRoLlJnUn02NHcrRC9OeTQkNU9uOihIZzlBWl9zI2UsITZ1fHZhamw2K2l+TUE0'@;
put 'PT59LCsxMy4rcHd3XWFiVVdqV11uUWBfeH49dGQxd0xrOld5SHp4cnNUIXwyViFJPEBPJm1XNkV2WmxVYUl4PnFRc3RvTCVmKURLWHJ7ZmlKTXNdYV4mOUlVPHdQVEgianJwS30zMjUlYXQmI3UybnJlZURiRi84MXQ3TGdTVGVkamNCbFVyP0tbIzBxTF9kbk1mTDZDWGpmRyVWRFArKTI6bTU0'@;
put 'eU8pMlVkYX16WCFFUTNYe1FVKFtNKHYzKWp9e0omYCFXWWJ4MHVKRCx+bUt8U01eTXROUV9gfGB5ND1tMGBEcChhYC5EQyRDWzI6UiZDTjN7YVJmMWteKShqWlFCXy80S1E3PXAhdS5RQ3shRzZlQylRaVh5JHsia1hyI1ttKUEkbXl3dS5jXkMiTlE1OGhyIyZQaUJiTDw2U2BeTXl8UWxIQnMy'@;
put 'NHwuM0whfG1ZZFN2b3V3d3poOXw7bn4vUExHYWhpTS9ESGRTVDkvZ1c9JWY3LF9TajRmMH1uSE14QV1CdHR+TVNRfWckZSVAWl57WVRIWT08U0EpKWF2JXVjXXd5ejZgIm46RmcyU3ArYSUzKCNqQE94Ml8yYCMuIzg5cllZMl1gcmpDfXdDeFZwVXpEfU01IWZnODlqZ0RKSzMpZX5eKSNoPCUh'@;
put 'fiRBS18jI2lLIkQpJjB4IlIkPG99RlBJdXcxQ2FwU2dINW9ROFJ7OnIoVURCaEBAP2YiMUcsUVBkU1deOSY/d0d9ZT1rbTMzQThzJjM2TVRCOTJ3NCJUVWloQGV3fmN9Lj41KW5aTVZ8NUYlOT43LkkvWS91TmciWSUmVEI0RVBbTz95Q2hTLmwzOUApJHQ/X11SKVQ9fXViW0ZhMW51Uk1xeE8h'@;
put 'JktpMHNSLHUlcSFIMVRzNzJ3W3dyIzxNLkZKWXMjTz8vTDt7L3EyLnIyI0s4TkkhKiUiYW0oK0ljW2o+eD1IX0VfJCNnOGRpPldhRHMuMy4icTllQGBITFA/Kn5vUHNNZE5VRWJrNUZic1t2Q3dmRTlXSkVxOTQ4Q0g8fkw/Z2lZO0xeWVRNQjd3eUBnJTZ0KDJkek9eRnI0a0IsX1VHQFF4dFto'@;
put 'fE5BK0N5U1ZqJm9KaWY4NVFZOGJgKmg5dS5McUFhUEVeeTUxWSYmOjBoV2lAJmt0MzdudmlMc1VnKkN6TjdfNmE+fCElPVQ4NlV+PV0pPF5HS21aP09ISDtaZiYsMEBpMVk0N0BPcW55XjE0YEJmOWVHazBKWnQxcSY/cShsZWZdQ2NkUyFORTxgKl1GUTM/KFs7WzkqNHJAd3MvbXM3PU0qXWgu'@;
put 'ZCgpQm42YEBWd0Z6XyVjOUkkLEcmUVpPQnFTbExROnltVHchfi9UQUx6bzRyKEtdZ15CLlJ1ciE6XnZASEpsOmlyTzZIPUN9ZSRDMG1QdSMiUX5IRF44ODlQQEc8WiZkSlRAIT9wUEdMLiVjMFA5SnllRDlAIj5oVWRJQlNlIWMwPk5KN0NGY1RNYW19OyVhJUBEPSI+e348aTF5blJCOUAxMTBf'@;
put 'Ll8ub1tsPV9yIjEpNS9uPi84UjMrUnRxZk1iK3FlO3oyUF0jfDVhP0N+PmRCS1ZWPndKdEdUYEtFVXhGfkksdG5sOzRXQ1RJNj5UYlkkYVldVC83WlVWZ1kqPjBjLnZqKCRHekRoOiZFaFBJPV1RQylvS0xCYU5sNlA3d0trbCR1ZG91Pl1Gc01NN0hYYURTPjtgZGVKan4oWCVHOi4qdDJLfEIm'@;
put 'ejJdZCJ1K2QxdWxfdzpuMFVCYFlZIURpRGZ2T2M6QThVTUIlOWs0UTRnQituMC9HUXtdRHczZDBrMCJLZkxZPS4uM3E5KlNVdVV8dGFEIkxUR2Y0PzMvbSJpLDI5IUs8SXJqTT5pOnV4OFJzRitmVTwvZ0VaI1UrfCY+TkJJIzcjRV5eQjEuSk49PWJ2a0lKMDRtZl88VnFQR3xPMTduMShoVzVs'@;
put 'fiIiUyZgMD1sIjtiRDgxZkhVX01mYW5ra01SdkQvdCUleGB9KGZhVE0hM2Z+cEI5MXlARTlgJSFiNFIzRi9jRClXL2kzbzQ8SUwyc0YvVUQ1d090WnVxJUlLMjVGNWgrPmQ6QGUhd15SVk91ZFo3JD43JXgmPnMhTTdfTWNnViZhfjk0Z08kTlNHZi9jU2l5OiFWSnImey5nN2cqfWRUaGAwcFFn'@;
put 'cmZnJWRSRSZkL2xdbXJRaGBHSz9XWjg6Zy5KOWdPUGByOUZiKGlCMjByZGlAWDQiZmNYZF0lIkEuWU5gJEJUODhdVU9+X1dHanxmMDlSQSxRRGJKODYrT0RfTVoyN0FnInwpaXFNXVV9KEh7XUAvdzRAXVZmR3VVdn4sW3psNGlLQjx3SWFoSl1sOUM8JCY+M2pVM31HZFJ+IXBJPyl5YSFxUiFV'@;
put 'V0hQWUV3ZU0jKDQ7RDs3dC5gMzYjRmxNISx2dTdnLDkoOkxlMW1DT0J2NGArbz47KSosLjYqeHYqRlQhUGR5b3Vndz9+S0AmYD4qPUpnOCJEXTIreCQ3YXNYMTo1SWshWSsmOiM5I25fWWIldGRzPGxUXShHb3R8d0smRWB8YjpMP1FKOHo6NnFlbG8pLnVbb31rbmpnNER6QCR1QTJXRitgLGZS'@;
put 'I0E7Vl1uIWBXMihaX1p7QlswNVk8diJEV3YufHdGQTVaaSghVmBkYjJPYkdJQnJwPCtxUX1uLjRPPGtReFtdVGA5ZmdxRihlOTpqL1QqY3lwdCo6YFFzSTlXeSUobHVPQ304MUtKUj9lZ0pQREpKdEhFKjJBZW93dV1qUHFFbzBLTH0we3lqU1p6UHtyQ0VwS184Rl1bMDkwfUtDWlVyZTg9Tnsk'@;
put 'Z3Eva29kY0hlPEpxUj0oRFRiO3g2R0xDNWdHPi8wTV5+PT9jN1pGYGxeKHhPZVNdfUUwbGBeMGQkM3VuTzZnI0MzNUJWSV5nOjl4ak90UjFiZmBJVU9oQVJjPTUjQk0jbEtkZlIqV3lCYUY6S2cmYjp+TkN9I19bbWlJNUE0Zz5IP3p3Mj5WXzMmZkx0YGZqUSJeLER8YlA+XWkxfDBlUFtjK2Rb'@;
put 'cDgyT1FgUEwoM0EyaiIvQCQjYXNYWWppWmhHViZ3ZmxZZTNCOEB8VTd6eVh9KndPND49c1ZhNi5CWiJ7KklfXT1eZiNmakN2OVJWc0k9QF4qYW5maDQrTTt5anApLndQQWZSclIleHB4YUhmTEU2TEZmSkddR1VFaiYjZX5qTnNDV3MxT0VySyw8dFd0cHM1KlNTPDNxQ3hHe29dOEl7V35iRipC'@;
put 'eC52WWt9anVrZnB6Rn0yWix1JV5HIyt5WCRNaUcrJjcoNX1FKG06W216cXFEfXdxUUR+dk5BVWUyJWAzIXUrb2x1SCFmeD1qXlhRdzkxQkJ9VUxsckMpQkspdF17Qko1Zi43NXQ3PX1LfipgM0RvenNlUiNSN1d3dixEVD0pTF59US9tSCwmP2V4aH1gRWl4VF0qJlAwe2hMSm9tXj9FbW5VZklH'@;
put 'Tzk7Zj49U3AyWV8rPjUpSWAvPyRmW1hkTDB3a2t8TjUwO3c1eWhQKnxHSj1VKyZ1d3NtMTEpTG9bJmZ1YjA3X09XRm9bX3s5LGIkPEJWcTp+JDE1X2dCNXVoe0NzL2g9emd9diRRaUdNUFQ9cWosM0RZLmcicnVGdnVxd0k8PjBBbzwzdGRfV1N8KHMyWCk3ZntmQ3s/QXtJPkUrdiNnJUB6JnRA'@;
put 'U0xCWjh5KS9IcVFqb2V3KHVKKGNrYX40cygvJGZyW3RmXXM9IV1uQFV7NixDZVA3Ojd1NXdYaHVOXnFhP3tSSH1tXjJ1XnBkWDo7RTVmN3x9b3tzQSJiczQlbnU/RzUqdlhqK35CX1VrNz46T2tlN1EvLkEjRzpWcD0rKzROQnIvYitVQndYQHJ3Z2lOUCxxO1A4fVF0VD9HcHJyL0d9MF1VYzYo'@;
put 'cERDO11sL0dJS2VXMj5PfiRvPUB4MyVHcEZgfSppcipYUlh8Q2RZZHRHTyomaEZgUjk2PlhuPFcvOEtZb2smWl4lUFEoeTpSYCo8Z0ZtQT5ld294LGBqby99QDw2ZCNFazwkKmhjc2RzRXxPMUl1Yjlea29dWlhqR3F2TSlxWH4jO05SM31BUX5aI3cmdlc/fHxiNix9TGRFZVhfIXdrPnNyTjEq'@;
put 'bGZhNkcmWW5jOytRRFt+PFcuSVpEdEMoP3hGKTBMNDkhTW56ZHdpKEReaEVhVzN+eWEkfktMe3M1SFQqRV9GclNLS3A+WT9rNU4jeF5lcGU8Wz00RkU2fDshK0xVVzdXPiwlMENePz9sXXN8V1lfeWMhYnZ8fm5rWW9DdFs3WS9UWUA/LyN3Wy9qRCs+KTBCe2Z8V15jdVZVRE9NLyt+InRGZlBG'@;
put 'NlIrUVV5O0V0fVRVXnFFSXBkbVpQPGA1RUgva2pUWlEiQjM8U3ZHe11ZaGNBP2k7MDY2PGcqP3xQV1pte0dpbyZGYzhgLmcrPkI4I1AlSWppSXE1VXt1dnc2Y3p7PUcwP1Y8KHJAUG1DZ05ye0x8bCFdJjFLQ1lmdCZxXV5ZOy8vJDwjcFVHNHMsQDh2bTNFfGFFSXYpVSpjTWQlbjk3fU8pdD95'@;
put 'Jj8kKn0qZ31KWmJBYS5tYyErbn1oSWNMLCo1Ozx+VmZbImIjQm03dlN+LE45T3ZobyRdVFN6QywxTj89JCR1a24xRnd+bDY7RylNPEcySyRDbmV0Kjh9UHQzRFY+R0MuXzhuX2t3YFl3SjZoeFF0d3wpRyFdUFA9fF9CQldSMzcjR2h0R240SkpWNjNYczFoamhAJDJKNyV0KkxzO3E3OT16ajFe'@;
put 'TDkyamVeXVk8dmRwJlh+fXtERypiRXk/ajY7fld7e35Ud2p+Y0Y1UEtZNDkwYGQ1WmB9Q04reFdLYykpU1Q1JjJ+JXZYKX40T1QqfCVSUWIqJDFXbU1UenJGYXI9RjQhRHtQKFgvXWAmO2wyQ0NfNVdTLlRTXjBnIzBbN3JBO3dyLnZxeUo+SkVQOSNVQ0ZfMDFKMHBFZnRVKnFkSTI1JVVGV1U3'@;
put 'Tz0iN0J6a3B6XXJLREgufXtOLHYkInddcUYlQE10ZkJqXVk5PyxOcTtbQTU6OVdwaGd4bl9lMVtFeChuVXk3UGpgUjUzKm0waC8uR2JwNTUvPSI4Ml9hO0k/YGNOTj4lVEpYSFRNWWhqJSZAeS5qLiw8VTVxXmR9ZllFOlpoanxFX0tDWzFWQFhHVDJDZWxJTiVwTjRNZk57S2kmJVp4QX4ha0Zm'@;
put 'TTRSVjFSKnxbPHFSeVRzaT0/Pm1AJkcsSlVoTWxJJWkhXyhkTGQ/RUZyeG15PV9Re01MJVU8Ul57SXkpQjVkd1VxOC90cUNVQCRqRjEvN0UsW2VXbWg6UmR5bmk+aGdnNlkvd29+bD9XZVciay9CfFsoSWNVSzs7RCFhYGRKN1ArTkI3Wj5NWjYpbE11SG5xalM3cV0mWiE9cGkwbWl0dyxQe2Vi'@;
put 'cEo5WD9MRWUyLm88I0JBMVM0PHckQGolbkwlSUcvZzghTTl6eCFSRTlFLi5VIzo9ZUNtMT81dlpVcWI7bClhIjlML3oyRXtlUStgUTpzX2QwelcpV3RFKGF+N2heVFV4YnB7XlIlTWpfP1k1JEdecGIrT3ZfM3V9MHY0V3g2X0l1WjxPJjBpVFBkb0BmQ0FeNDhLcCphflNzLnhxKy49Pzl6VHFf'@;
put 'PSRxdCJ4Ult7QnNRS19DRmhIUUMucFIrIXpnNUZyRlBbJUZaNzkwRD1IfUpgT3tXN05tdTdsR0Z5Y0gsQkEzQ3RCd01lNHRUTX1dMmh9SlFxXytZTnxnM3IpKmhARER8SGNsTDEwSjN7OS9YOFcqfklycHE0M0JTcERRO0JtdzY+OjNLSWRxZVA1cyxMW0lUXlhBeXdaRW1pQ0dWJV1LQlRebUEs'@;
put 'N1ZGVWR0YzIhLjB6ZUUqQ15udHhpYnF8VUwye3RecXU1X0UpLGs0YV1QYmBDfSh5cSkjdzF3bTMkTS81VThXaEI+Jm09bn1BJH1VQUBnZ1l2WnVTe0IuWmIldWJmamFveVFGJFZZU3lzSnZQQyJDdnJ7XWRWY1pJUDNvZ3VxVF5WfTZmZmlTUXQ1SDc5Uj8jT3BdKHh+OE0xUzc2UWtFQFlwTGpx'@;
put 'JGgiSEomOjJKKEZJVnlaP1JVQUxKMmtnKkhDLiJrJjp1aHoxa0lYeF1IY2xtWHxHcTUmbm9nTGhxM2dSJWx5KyI0fiRDcSlgaTlDJSUjKnNaPjw3L1ttKnVYPEg/bDZ3UzFsVE8sLkgpM3FDUzcsejVbI09DLlFCPCU1WC86XyZuTCFVW181UnhSIWlbRVEhMXw2MGxwODY7OzVCOGg9UiQ4O3Zw'@;
put 'PkxzWVVOO1BpZWZ+TkdEU1Y6bFpfR25HWGBgbj1qRl8+OEQwV0hSQmMzbSNNeyVIIXdDXzA0eHkuTyokaWpPIXIrbltGV2RBYm12RXVqRGVPeld9P2IlOFZuNFtAfUBNZTUkR3dqKTtqRjpbISI5L2hIPz4hJEVJS1RsYHwhWHM+Uz5QYUxJNEhLdWBZXmJxTnsrWjhdZFJOXVJ8eCxoRjEqTSle'@;
put 'LGJJM35xN24iY2YjeyVRfk1dKFZLakxGVzwkSVZ9T2txOV1ucklwSmR7bjY4aDF0fEh7RlcwMFNyPTRKKFE7PEkvVXZ4SDpIWjJVYmp6Knt1NS9tdTtvJFpvSSsseF0+Xm5DfVtjbTVTJTtNVnlHR21XeWNgVEZGO1REI2pzPiM5MykxTCNXe3dQJTI/NDxCR1MxJHF3MWUiI00mOGh5cWI8ZCVF'@;
put 'RzRxNHc1bFI9TjZLaWFzRnI3cDJNWGF1InlINEFnRDEuOSM3dTRgS1tMfHxPNS9iV1BaTVhZYiVNYTxHJCZWT2U4TFc1dklkfWNbUzU7LjlsRTRxK0E0NlV6W19kN2E+b1htYl9lPElteDV7WUApeSFyTy5ud2d9NiZ+PiNFMCk2PzFgKlEscDZZfX0pY3YlZHRnVXtUMlVSODxAQE1iWGMsSXs7'@;
put 'UFhySHcmOyJ2aCtKeV48RFRIY0sqUkhBN1J7ISluc3NnZG9qfVR6Pl5LMEpKaSNXOFlRPD56MDx9I3ZnN3RWaUt3bUdaM3pXQGxUZ0Q4PDcxKWZ4bDVCTihLdzZJQ3x0OmsmNEBJZitaYX45dzVefk5beldEVGlhejBWWmtNLjlTTHVHPy8jSUhwIy5+dStDWElrcVFieEtAK0k+az5TcG04Lk1i'@;
put 'NCY2SEYmW3ZqYG53LCUzRnpLfiVCNDEsKXR2aWMmZWhDfUFncCVXJjVVTWAmaERHS1I3QGw2UkpBND51b1hdMXwyNDhOdV9iN0RRKlJKMD1ALE0yZkVOW31fdSZVdUI6fl5hZ1FKPzUoIytCVGNnZ1NgRyY2fmYwXzM6PE15dUIsSldAbzF3bmNPZ1k3IkxPTTl8InpLYW9eQn5IazlbdWAraGFD'@;
put 'eloyaTdXSVM4Xzg+b1QhJCg6VCpmIWhMPyMmSk9UZF5LOG1EfXN9YVBieGxSalVPcmhzXmhISiZGXnlIREtYcjpLeDh0ITdrUChxNmhLRU57MS5WVVV+PWVXbE9qYnFgITpkR3B5aTMrNV11P29SMDp3L2txOjF3WygpVjt8bTJldTk/VG8mPj5Ea2EkLD0kQEtFdywpSHBGYWxFIlNGSTt2KXNH'@;
put 'c1BKfTwoOCJEOGR8e0ZrVXNvSW5HSW9xbHxLUCFoRmFFK3xOISVaOk57bnd5P3d8NXNkTUJUNStvLEdLWFVtI14qNV5BJVRZYkxxczp4WldpSiguNUcseFNHYGt8MUkibEB6O3xPI3JjYUVjPSxpfV0pdWFHbnFjT0lZK3dwYmxdVTtYVW00K3dXSTJYfDVaQFZVblMjKGNmMiRfV2NCLzNQNV9U'@;
put 'OklGJGZwd04ieldxN3dJb31TQFlfQSk9cGk3dj86WFEudnIifDZrTEM5IV4jemRiUVZvPE90TDh2NUgrSD56UFNycGluQFFAZjdDXn08azw5TVZoRyJecz0+Wi8mbzFZTEQ8UDJNYU4scnp5U3hmejV2bzVKMGM6OmAmeUgvNS5XN3pUR246JklLN1lkYmNAfCV6emkvJT94Zj17UzFPWmQvRzdT'@;
put 'S1pkNn1dVmZQSXR6OEx7Un1nVHxBPmNeSGdeNHc2T2dZTVdMMmRHTk5Sck8ldmhbV1NkbWJ0LnNLW3FISllKdj4rXiJZS09AZHZJOzsiU3pxcy4jUTBJfFlsKzU0NTBeQldWX1cpYipqN3d6d30kfXkldF98RUdeKkVMQzRuPHB4YypiWkFnaGZTIXVLRmFZIztJS30qXks1NDxQYmo2XT9KX3Fu'@;
put 'fFs9RXIlL2dDRT87KUtmN2RqXS5YaShtW0MsaXt1ZWBeZiEiNipoaThWQGt7L1NVeXoscVRzKy5hd3JCTHFPSUJqQl42e3h1Xk4qaHssK1QmXnd0ZnhQakFSSDY0cnBBQzhuXnpfZ1NfN2Fbb2R5ZldFZFVMXjxlaSQ2OTRaLyhyUm95KXgxQEdZYisyTjR3K3pXP1NnfldqLHtMVClBOlRIMkQ+'@;
put 'aTk2XTZeUDZFTF9GMi8xLyxEeG1PJF4/aiE0NXJ9QGZGb1p0Q1hyKnh0fjVyQmVTTjdlTVtZOHRJXSFDTzN5MjhjZV9AMUdMXXQucjwwaD58NU9UKTBmWTtFdjM1ejhJIlJ6UldtSUlVdHRNJlQveH4uSGt6VnhJRHJ0WXdbOnVWR2IjSnxFSC9rJXNzVWFFK3BTTFAhIStaJnVuPnluVl9Tdil0'@;
put 'YUc6OiN6UWJ8TkRpJiVnSiZWMjU8I208dW5PVWVRPSpFWl9hdGpqcih2RFVkMj1WSVhAKFo+IXdSNF06dFRvc1JqVFl0T0NsdlNhbk58Sz1xbn1+aG5aY2JkQ21KKCI3PDcvaTpxKlApWl9MOzw8XkdtRV9iN31TIzYleD42Z34sZ0wpS1cySGJ2OSIwbS48RUwkbmEmS1g1X1s3bDRxUDYjWzE+'@;
put 'NEJPfSghR1VXRzN5NnRoQGN6KTtRXmYlYElsbGVbJUVTUEZ1MnhLMnY1I1klcG5WMjFiY29RLC9USm15V1VAV0RuUjZMXXZTcj8icClnMk9ITms9X2JgMkgvdS59OW9CKjEsTThBLiJKNHswfXZrcjl3SS44NkQrUlg7VFA4fixfW0J9L2F1cy9+a3MkKT8rRHY0Qnd3O1l8LFs7LyxGQV5jOC9F'@;
put 'UTkhPiY4NV1wLjMuOH5ROUdnTz4+XU49bkp4e19NQ2MsTUp8dFRmVyhDPTtVazN8PkZ6TzQlWCVNZ0NpNWxHeCgrYyldTihCcSg/fSR2cCtJL1NRTzM2V246N1U4PW8iQyh4XUhrL1g+cVZ9MFhjXm15V1RSQTE9TV4xKzZXNGFxKmw4UlpvJm1rY0kyLityYVQ0NCNrMyU6Q3UuXmR7SyRDUEk3'@;
put 'e218Lkd8MzdlYXldKUkvajRuayp9KmxZMjVid3tCa3MpbHl2R3F9b0lCRSY+STtMZnxWXzdoXVtbRyQlNyZAZVBJcjhFaTRsWDA+ZzI8S0FnbHt+OUJXKU9CJF8uKExnclk4V0pzKTpiUV9SUEx7WjFiKGoqIVVWL1BpYGw+YlhrYG1CJntnNTtnIWpdSUA4OGYmZy5TPH58XTVDYj1Pb09UQENq'@;
put 'Kmw9YHZdPS5fREJxLyg4WUQuRVA7NVpTdFk1V2dwWWRpJEdTMWcsTC95TlQ3ajU3ZURvKWNIMEtvalAyZHtGSUEuaig9OzVKQmM0LCljYnNJNyRyeXcuayF0MmFGPDBlRzxYOig4Q1BOcVY3N3FpKS5wcUNgSnpISGZ8TDdRM2sjLDY6c3REOE1CZn1qKCYpT21GZitVO18jezRIND8sXkY9KWxp'@;
put 'QFhMZmNoS1VhUGE8QUdAKjQoeXY0fkNmMi5CS0B8SV9kN2o0PTJvYzorQGhLPXtQZiV9YzZyXSJydHF7NG84QGx4WlA4fk1wbGV6VD1eZUk4e0twZWZ+STNUS2F1IzB9QGAuY0hSLE9mdSFLXkVfOUg9fmRsSF5GcDtWazI2TWZ6ciN7WT0vbjRAW04wQ0NpPTlGLjdeP3YjN1lrRFtiRGpuMixo'@;
put 'dD9LKzdDMFZiQyh8P3NEI3RHMGVTd1VDaFp8fFhIZCFQRHRVbzhGY1h9Sk5qK0g1VkJvPmokNnEmQmB9SCNJM1sjazJWL29gJl49OlREdj5DQ0t4ZjFsZyZxeUJGTj07SX5sOVVUPDZZTjs0V0B4Izk6USFiOSs9Wys0enRoMlAlNjF3djtNdmhuQUhUNHdSQ2U/ayRdfntWej1gN3hMJk9FKjVg'@;
put 'ZCR9QXspIT9qc1MhImtHQUcxTVNieFpVJjteUE5VPWh2TGRIM3Y1fWlpM2lDc15SbHF2NTdqayJXfTU/S24jd2psOHZyXW9EcTYzRTsqW1lTOUpwbiglOi80aH1xZGIyMWJTSEw4ZmRNbnYqY0N+OE0+W2IkNjNxTVUiaEglSCI/VW0hVXJbYnJffTFiRGwsMWQqamtNSSRRWUlIZzJeK2lJW1hI'@;
put 'dWdlM0FIT301aUw9MyssKFt5QipIfWIiNUEyWkJjdEtTY3ooLlk4TEB2ZEtJamN5RDJBLjwrUUZGWlE5MyZWbCV7U3ZUfilTMH0vNjc2P3o6ZXNwKkZ5cyNEeCYkJWRHYHU6RGFMYVV+W01sI3U0Pk41U3xxQXA3cD8iKD5jTnI3N1hrSkQuZ0tUS2o8RHFYbGQ0cVRKdV53WSt3Nk4jbVBMQHFI'@;
put 'W21MXlZnZSx1ZCsicllPUlpOU2FANFBgNkowViFGLk1yVGNFY1laR1h9WVYwa2M1KEw0WU5zYSwqbFd8XSVzKSwxMi5TYkpCYls9OVlPNFUySDFKVjMzfWFTNH01amRwZFBXTz0/Wz8od1dTeCpMPk95b1Qhbl48NHtyN3x0ZVM7cSppOUA7RTpMcDt1TVIzMlJrMyVqemV9Z3VuLm9bc3Z5Ui81'@;
put 'K09AcWtbNmFDSF8/N2QwO2R+OnlZQn03P2B4dlI1R2cxVjNDSiVkTjEkX2lVL18wYHBTI3QsdS5gISY2Jk57MFA4QG4jbUIySz5wfmVjW3N0UUFpZENQVncpX0BfQjBIKDxqcihHTikzOl9SKyZPam95XmtdV0RTMlNlUCpdZE1dZDhGcy4/VkFyeypWcDZDM3czbFFSXlhXKlhxcDVKKSYqSE40'@;
put 'UVplZ3dXQmZXOU5paG40dCZ2PEx5Pn4zKUppIjdaIztiM1YifiVnWzFYL0ImQSZBSXp+Izw9N1dmNTZURjJMRF5zO1leXyp8KWpkVSh1azA+Q3RVRmExb2N+PklZI045ZHJsaGZybnRwc0UzUTg3SCwpRFRMSzVFYHx0X216dShsT1RrST9XTGVCSG4iNC92V1A4dTF7V3FGYDpkOjNUdX4mN1Zx'@;
put 'aW9+M0JKbURgMTJubDJWcjI4YEdiVktvR35kQF5OdyhtPURlZ2NBb2tOZ0hPNnBUYGV7Skh8RyFXY3d1XXV7SFVzI0UmWDdjMjowbT03eTV6XiF1dyxxWnw3S2cvNmM2SStBO0toM1pdVFhAaVpMKnBMV2U8JkEpVFFeckw1aClaOlBdUnRYMnM5XWE+KEk4RFlIJmR0M0kzQ3s1NjZwVSJSKmgu'@;
put 'Z0RvXmhxZE1JNXhBZ2lbQ28hMjxoP290cz9uVFowfXtKVUUoPDJiaCJRcytROSw9XmhiV3wsOVVUKSo0fUwkWFI5YENdIlg7JWdeUWJzNy9WaFZNXUF6JF5HVWBHbn5zKlljez09bFV9LyZzVW8/PGFaU0tRdTVIUSpteWRdNmVWfGREOz5fMis0VlIkLkQqd0FZMWExQnBPRDxxJkgjZm5BPVhW'@;
put 'XkVePjpFdXcwPWwrPVM7JX4uRz5vclFJfGh6MWt5Vz13Z3V0Xl55Nks8cCk+QmBva2c2PmQvTytHZjttZ2swfFdNbG9YKjNTd3xWQ282XSQkOnxmKjklOTZ4O0JTaSpLQ3ZlPjZlYlhYIk1XIkJIKHtbdnRhJDIpQXcucEkhO0M+RDEzPndaQkZMfkwhU0hmLzppX2Emem9NeChdIkR5KWYzcVtg'@;
put 'cGVwJX4qSzI4T0ZgaG5ia3R3UygwP1c5SU1nX09nZHZCUFttPT5vckhOZkNUbXx1OyR1Wl9OW3BKJVJUMThqXkc1TlpVZ2FTXUNzajI7d0VzR0lCPEUuYnBfcSM3e2tOWSRRcF97M3FyfVVgUio3ImRCaHE1Tk0uSzJHfShdVyV3K341MnFkWXZWfUtGS3grblBEMD5gcn1CZG07KjBnakBldTdL'@;
put 'cHEzJmQmfkMjezgzeGMmbS8kZEs0M2NUSFlOKWxba0JLXm9IVj16SXh9eCxARHt0SzMoZCJFR0VYbWU4JVYyb0dDK0BubkoyOWVnU0xrW117V3E4Q1FfKkZffHNDSDxINGd7a0RBXWV0dkNBTitpbTZfZ3skS05iRE9nb2AsV0NGT2cpZmB6SFoxVExEZFV6cDp4XT5eWip2aVJzaW08UGZeYUJq'@;
put 'elt1Vl1QUG8pPitPckdNUHh7ezskenxieyw2MX5Zaml3NXNzREw4e2tlMHt2bThPLFtMIlFfcDh7WW9SYH1dWE9LYVBNUjQpUGJ4NHR3XV5OYCR+PFZeVSZGRCMmeFkjS0w+bjFsM3t7fHZWY281Sn5PVSJVNCV+JW1NOTgqWTI9WjFbai8sMSltZTtqIjpmcE1jYTJKRmltPF9JMkNlXWJ7Tlo5'@;
put 'N0UoWCJlZDhKOTkpOyVOTzcjdmx4WkYvYUIua0dmTnYlZThmIT0mSHUhRjZZVGlIZFUpa1VkOi5sdyxQcDlxZjhRQldBUExtW1QjIjVDInVhJjl5P1hpMSs3ZTNzRX40bGRZcj9SeV9GWC82Ujh7UytWQDMqVWA7Wz5tNGk3NXgjMEZuTkQpU3JYUlBUTkQzOioqNiUvW0lieURzPm4xKyY5WClI'@;
put 'alMvI1dkUX0/XmNzfkhSNmg+e1YjK2Q8XVVwMVpFWUM9YkRMLm1DSUM4OjZiOGljcGMvdDVgTEpKbGkyJmlPNVQmIVlkLmNsMyFZc3N6SSh2cDh8NihaZzVaSWA1X0c9X34hdXRPdz9yMTAvPyp4XmMoV0VkSz9SdUF4fmNURTAsKHc2UmJMSjo6NSNKcXJNR09AdCowO3hNIiUqOCY0TDFHciVL'@;
put 'ay41NE5tS2Vgc1QuZDVMLkY9SU46YnQqVVs1PEEifVl0TyMwdClVSGRmJU9CQ01vTCU4W2RtM2FHMWxgbyViSytkbTEjP3B5dH54VWs8ZmZHZSlPaH53dzFAMXR+JXBANVh3cXVxTHN8RE1EX3ZmUj83PUhhZy40TWlWaVFtTVN7RGtxVGdaNDdPeDo2fl57Mn13TV80L0xKdF0rNjZIdXFlfT4l'@;
put 'ZSYqalY7SE1pbGlwU3B1dWokTU1TV09mfF5NI0NrbkxHRC5rKzBJR15pS3VwT01DNVI2czNmUklLOywwRVd9PUxrcmYyX1dfd3lnXUdZUSkmcTA6Ik0pYXBoKHVtKjVNJl1RQjdrbmFFSEM0Y1AkQ087aDdjL146cmk3RGRoaHt5MDdlZXRWbShpSjYxLl1ORFh2MHZeRSVnIUdtbXlDRm9bOVdz'@;
put 'ZVFIUktFZy9FNHNUP1h9eSJ3VXdSYylCUUZNaktIYC5BJV4jOEZXYF9PeVJUMkRKaG03XlokXyg8cGReOH5jK2RENCt0byJjbH5GWlpNZENrVzZpXnFNPlhVR3pDRXU2U01ZRUJVXS9LIzhEQHx4XjshdDl7ZFt2NWM/KlFhLiZoRT8rUFVrUHVGJX44QmtnWFpsKHJMclpue0p3OVJjInIhRGwu'@;
put 'anAsP0NLaCEocVFWIXthX2AiPjluWXpKTiU4amYkXVBHYlc1RTpdbm0kP2pSVWZMMjBCa0IvYmNMNjZPZ0BSdDlfajppR2M2U2BSUHhUYT00ZkhRX3Q+by50UmVtTDc6LDIzN01BKEVWUXNDR08+XT4zPC5+TDMyMV47V1tJUGVeXn5+am5LZWJ5SVk5WDgibkxmfWNNajdPTHRQSUh9OWslRlRn'@;
put 'bTIyeXN4SGtBKUs6c0BrVCpzITImZVQxcW1KXzU5Mn5XQlJJQC47TSNrT0NfWCokNmJGYHl8XUYlbCR3Izk5fG5xdCMxTDdPLjZeaXwkWU1UTUR6dFlUbCF3RjtWdGQyKWF1WTEqKmY1KklWRWIvRHFSQCl1S1luITVKMGk4aEM7IzwvZUVeUHRkUH1leHJuaHNTRj5SJHt8el9eVTF9V2FAd1dF'@;
put 'ZUxANDpvJiE/QFF4VmchIn1QQ01RMzNuQ3UoS0I9TWZDNFJjVF9hZVU1dzcvV3gmJlptVVZMKj5oW0Y5ZWBsUXcralA4QVdyVSNAL1NYLDNIKX5GXSslODwrJGpjSkB9NC45RX1aUHgpIX5wRXV1eGs5RFc5Oy8lSy5VPz1SMW19bVdQM2p4ODJMTmI8dnw0UGJkQEhZc2NofW42eUkxRCNNJDUj'@;
put 'dmQuUjpnc116eTBQMU5kUnEyYlBqbEg/VnNHVFhTR15PSmpvKDZpOFouKilMRkBwQy9panMpZlNLOCt1XX11eDVCL09XZSNkNEtaSTBuZSEkWFZXVlsuIUg2R0pBbzZrKU5FWnRmSE44dSZuLj9XVmV5blBIazRgLl4xJHZLQXVoZXh+QC5bc0peZ2w7Qm91TVcqfXFEN1pSXndjRlZ7KyVTfCNe'@;
put 'TjlAcT5xTkl8V15xVWdoNk4seGZdMThDYm5qKSkhfnk8ZFF3dWlPPXNCTUtFSk1CMj12dHY9L3tOc30qIVchOlkkRm5uXl5nRTQmS25fbG51UEoiSkRPN2dZTitaRj1xayMvLn5kUUhHd2IiTjFSa2t3KSJdNXIzWl5vUWdjWnNQIjVxT2IwbFRJaGNocm5WRn1lOD9gLEF4Y3c8blE/QmAyczJK'@;
put 'd28yXV9FSzp9JW5IeWp9JSxvKXRAUGx7ZXdaKlM+OFJtN3pCJlZ7Q25wWXpaIyEmIVUxdSJXS29jT15HYXpRdncrWzROPCNRVVJAV2Y3W0BxRy5ITUwjY1FZXkcjRGZkcmFtcXlKT1dWe2tKZ0c+eCNuTXF5Il1hQlF+dHs2LioqUkJvTTt4fSFifT1xfm1ydDk8Lkh2WGlsMzVJM146ZHRzMEci'@;
put 'SGNieGVCSE53NysuKCxPQmd+K15VX05Qa3ozQWBPbn0zV2YhQmBHUl9RZEM4cUliO1lEUjgmI3M2eXFwXW1hMEtfckY4VnVnYHc9KDZdZk9oQH54M3kqSS9DeD5XeHF3P2lkZVRRJGIyc3t4Snd3MVs0bVlffDtRZE0sKCR0JHU1T2NJU0NIYHxIVH50MjEoRWhUSj9rWl5ETWFmSjUhYVV1QmV8'@;
put 'SS5JPjNMMUt7S3RVImF2djRKN0Ilb1VpZlB8aW1iWHZ0c0Z+QDA2SVY+e1AxRU92R0JGQDNKN3tWZG4+Oz5RP3AsZnBCbzsqbnIqPDBZazU4V2lIS2ZwWzp9aUBdUXk0P1V8cFFWWVpmfjg7KyZAU0RZYWIvUVdqQno6eit1aWhyWTw7Si4iSDo4YHgjMGZwTlhDW3lqMzFPb1NWQSp1IyVFfE1+'@;
put 'TXlNJjZRPU1rfDJONiY/PEcmPlozOS4wenlUTW1ldmcwdE1iTWNhIkMhb1dJQ3FgQ0gjfTV3NlBLfCo5MDomdXp2M1ZMcXMlbUBAa3lHdDdTfl9aQngpfX5OVXUqRldCbyp9I0RGKSRmRCZ6cDU3VSUpI1B0TFI8RGZAKCo5dSNTbkk/PEYkNzd9Wy5oPkpnLi8hWiZfSnpbMGY2bndHWjowIUoj'@;
put 'fmorPGZRXk1DME9CTTFIIn4zXz89YkhTMUA1OEYzSyIsdiZtYVFsMC9FaHxYMH0+RzN6Sy5aW1gpdVN7KCJBZ2pOU3NCPFg8KWlgQDBHQSFOWDQ/VFNYRz4ifDRielg4VW8+cHd7TlRzMGs1Z3Bne3g0XTJqXkMyPnBTLzZHa3pUbGsvJmx+Q01+Wn5+MW9TTHo2MG1ZOippbD83a3MiYCY9OzVp'@;
put 'MiN6VV1sS1sobykhcXx0Z15+JGhzRHdVIi5Qa2tdP0VpSUskXV5tNW9RKjUmdUNnNjFlfUdZPyY1K3NtUys8cjhbY2FXNk5ePz5LTjFgZW5IfkB1QEQscWclPkIjSHMpZFFfbWkqQUpXPGQiOzkyWzBIX3ZBI3hvdiFyPEQqK31JOTgsdUQkOVVAYENHU2BFPzJXUy9zfWZZVERmbT0/LEBjTi5m'@;
put 'XiFRI1J0Z04lV1MqY1d5JXRYK25YLG1hPzx5JkV9N09gQHhiKDI7O0IpVFhiZjFMQXkkQGJIeHYhW1M7d1ZWYmZ8TiZpZU0iSjRXc0lqIm10PyRLQWF6QmBofD09OD9xOkkrdXxqZH1UU3k2RHc2T3JBcyVMQnsoTnBjLm85M24qP0koR00sej5OSCs4UUdofjsyVHsxenBKfjZuKSFoTTs0ZEhD'@;
put 'OV8vWFFlfTFyMkxJaCNxRVBYKVdzcWI3TThicjFRIylQSWtBbls9LjE7Rlh9WXZVUU1jISUyKD0rMiQhbyZdUjY6WDAlPWJWWFRifGRJMD5oMWIjIiJWfHtiRnAqP2FBWVhgKC9ONFdEVGVzUz1YJSsiUEM1TENvXyp0YCUqQjxzPitDMSlAdyUsb2JiUGIzTF4mMFJhV2FfbV0+fVcqeCxlZXtB'@;
put 'I088Ij15I1NYcmZGNTA/NmM7JGR3Y2RmKEFzYU5UUE5oREQvSy9+YywmYHFGUXIkcXRuQE0yUS9OeFV6WW9qPzZdOV5nUz16XT9deiR7ZkUjSGc6U2Nvc0k5MTNqYyhmMHhaOXpMWzFKMXs3Q0RLcm55aUJ8LDx4dVg4fXw+ZnwsY3l3RSRhTVIuOFlKeVQ6P0V3eGopbnFNZ35xfkl6JXxtMW53'@;
put 'XU1AWXpxTiF9aTpRd012bVFTfipmXWB+UmFWbWxIPDBiWzRCKTNXY1FyXm9QZmosWElhY1V5TWZgUXIiUH1lXWc1Rn50Vlh7PzBpKzw0K1huYzRuVVF1cns0QldSWTRnQGI0W2dKTX5gTDplZSlyUTpbdUF6SUAoUWVQMXxYeTNyXUgvKVkyZ2cvX0syWT5gNVdhIy87JlVTcHpWOHpPZXd8K2d9'@;
put 'SG8qWVdWXj5namYsQW9FZyImbWg7PkJ1JFdEVChJMzEyYnJGUWQ7VC9he21XbixwM2VORm1vc0l0XiNNL01xNC8wJDtgUDBMV3daSG5mJUNBNiNGU0tHcj4/fVs8MGkmZkp5OGROY3s6MkxMYC4jTn1JXjFMNGt2UDE4fT1PQno5aCptfWpTMTtZQTtAMEU4XW5QcEhfYn5AJDNSLnoiNisoJHRz'@;
put 'IyY9bkIwaFpKUU4jTD0sbzpBITxzYFoxd1NsKFBXa0M5JDl2PzQlQ2M3YEE6TTVTKyMyVis+RFA6fmAlTTRBNDROS2lNaCMrZ2c1bW5qbEUkZGtie04oU0NYJihja1sqVyhzMSE3JSZVYyg5XywhcTxiKkEwS2dPbz5DeTVpKTJLLCtteHUwOT9AV0JlQURleFFAQ346JW1WLjNJPGlUUVllSkIh'@;
put 'eyg6fWdNUDdZPEtObGxQZnUsN050Nl5HRTg+aWppb0wiKWs3eik7VFk1Uk1NITdzbCEjR1dYXVYlfmNPeX1ic1AjLyhkK3E9Ul8qI2o9NEcqZFM4IWcuVjAxTFM5eVhGalhCOyx6e3ZhRiVGZEdpRTpveDwsITs3YDtga013dTlSY0phUG8lO1I3ZFJbUERuckhmM0R3Sm5OWWRteyZKJGJhe21T'@;
put 'RipDSikwTytqW2o5Rjh6eEI7ZS8wNVRYNVt+UUsiaz9ncGQ6ZXtxKnRrZ0x4fUc1VTErc3RxW0lhJV1DXk5IYTVVX2lJOWlVWUdwLjFHSkouLm0ubGJTXn5RZlc9YlNqZkQpcis8I1cxYiFlSy9zLkleI111RH58YEFEWDk7MSN5JU5iW2kiQWM8eW1XLEsycSMvLEk3Yjl8UDJDRFt9NXNuXkM3'@;
put 'eWtgKkVyW3Z6I21lOmhYMDJPZGZELzVoWSJ0Pk4xYnJZekpuLkhtPzJdRkN0TmxXYDR7WXQ/PitfJiQ0SnVSOGlUbGh7bjtvX1l6cT4zVlRXV0MrcipILClNZ054MXlmW3ZsZFpvUCh0Jk5GTldmXU81YkhINEZMakR3M05deXI9bURIKjpeQD5+bVVRWzZQVlBtb31OOH5bOmQjT3xseVRre1Mm'@;
put 'V0VvdENyMTxVOzxEUEtkZEJDKTleZnVOb0lMVVk2VnMrX18vJEY5ST50eUlRbkRdJUM6SDl2QzQ9eVQzK0s2fW5gNlhQalNOWnA0emVlRkJ6M1M/cUNkalV1Z0RwO2hGTWRWMV0vcmBfN2hCUXs3NiZtYyRHWUNPcUJ8RVAwQ0VYJWU/ZlUue0Uoc05MK2RsRmopUTtWcyhIbUdCODZvW2R8PCVe'@;
put 'YzNgKWxkayt+Zldmd04oMHxKQFs6L3VKcUouaSZKaDB8KzIvUT8jd3hbKiRDYm1gKTxXVnRgInFUXiJnZDdnSkhRb01YX1heOi5TdzJtJSV1W2VsKTs8UHN9SmF9ZVU4cGV8al1RfmhVNHBhJHt8eG91NT5rdFZ7MXVIOSZ2eXsrOjMhb314SDIoYGc4SyxDQkw6cFBbUio1azlUZzNKSXpEX1Z3'@;
put 'dn4qKSJ6RnZ6VTVeS15CNkxKKyMzeHVmWGs2RD4mR1lYfj8zKSV8R0hATC83UXQ5U0dMKEJye2Rnb2AmWTtuZ05tV0FkbCouLjVAY2R5YWp9PE52RVhrNTdVQmllUWt7S2VJb1JMIXZYeEhhQiFXaTBfNHk5ZHJ1MyowcldDSzE/YkxMX1NsaTNJd1p8Qm98STV6eDNZZUtqV2lDXWdKJVZZTnVx'@;
put 'PmpJNis9PHw2U3A6T0ZEPj9+eG99ZFRhN0JgO3clUWkkdyU7IXs7MzFoZngmY21hfkdtfDQoI3hoNlVBeFhWRXBZRTlEMjk+TU5WVDJyZEZIbHduczoqXnI1ZDpATWo3eVI5cTVYNmEsMUhUOGxLQS46KDBVZnZnNXd6bEVxMDFUdnElfHxaZV8ibUQ1MyNmdTZZfi9fMUNfJVhyS0pPakpUekRw'@;
put 'WEI1NU9xTlYwKiNZZmtXVVFVal46eWYxL0k7IUNfbXsudnd5MWxINSFAM3hSbF1rOkZCQiNmW2ppeFZ4LjF3bWskcT5wRUd+WS5EJEkmJnJYTlZfN247bUMoS1pZW25KT1FtTTpvQVAsZFVBaU5Oanc4ISo4RiJ7TURuXSYvaUsyNiVQKH57NjxNRyk5fT9ebX1SQ2dSal1RO0h3aTdzVD9TWUJU'@;
put 'aSM6USo2dGVYLCIpVGc3ITs6aDVqN1guXzxNYGY0QFRgSlFpLDVhO3E/SHVEYCZGOltLQyFaMipDTnVLPjA2a3NwO2tXY04lNUlTb3lDQXJOXkIkTFUvcz9sQUJNPzM6TkR0RiZBOW08Xj4uJVtsOkRDMHp3RyIpaVRedTZXbHRoUDVZSGIzVXNFSj1Va3BhZS5AK19rMSl9UH1GVlhAWHMoRX13'@;
put 'dEhuc1g/Y2RiJHxbTlUmO2RbWSNaKSwzeThCLDlAZl9wTylhPHVmXjR0IkE/OVs9bGhhcmpGKjpIKzohO0JxPSZnVm5yPUdOemJNXzRuaVJ4TmlPd3EoYHp9YkgscDN4VV1BUGByMGhKRCRga3tuSWRicClsalpLW099YDdhZnxfTnBoKDhadzJXaWEpWyovVHF2V0l6RGVkJCQlWy9NIi8oZ0c3'@;
put 'YytvRT1ZLzRZcTBVflAqTDs1TEFoI2M+OyxPYltvY2w3MGs6RTFvSjwpI1QoWzs4eSlUJX0qcjRWZmZbZUhLWitUVEQ0PT1icWIzOnU3aW1xQToxRUx2RVM4PWZQOD0xPzNybFZHViV4NnVEPy5edkdhKCxwd3A8blZ8eXBUSzIyeEBUMStkKERmYDVoMXlmPUBHUll1XUJkQElZWkB7Ml1ffi95'@;
put 'QEE9Y2ZmWzMrYEhLNTg+T151NCVROGpTdkh6IT9MaUNhfUJYJXpEZjNPcnI2IV9vNFFpYm1ULGJHXUc1Ryg6fSNbW0RrZlswU1gybiVzfHxmSmd8NU04e0xLdU1Db2hvMD1ZJWVHVWxnd1V4QmNaPUk3MGo4VltTK29dfGlKYWY1d2FvNV0/JDsmNVIkP1JCJSl8MjBqd248Py9qbUQkfGQhckUm'@;
put 'b2F5c05MYVUxZHtuZFNzMWl+PCY4Wz5+OlhsRnxRTDRYRzVrRW5rK1VIbjcjJnttdW5+RWkkPTg3dUJkU097IXpIaSQ+b0RRTHwmTyZIQFAsK1cwayokcCk4WlhSV0VseUUpOT9VcnV7Q1l8W3NXTGFNQSFGT2NlMngseSU5S01ELDtmNFsiYCt5VV4lWkxqZTh0bk85XTpHaytzVnx2YExNeTEr'@;
put 'Tms9eDpKIzcmWl1KaFcua2xCL3peeklVOjUiVSolOS5rTmteeEhOQCFoISxaNlZkRHVjdSxSe2NYdHEpdz05WmRwS3Z0SDt2Qi5+RklYUkAiTlYsfSZMbzwsQHdvWGU1M1d5PjtdX2lsRWFaIXRsTD9ZdyFGYCIsOzx+KkZgKTNNTEh0MGtlLjA0Wz5+RzxvV293WDdqZ04hJWI8TDw3Uk5rLk1z'@;
put 'KWtETVpvNWBQPiZ6LnxdL3U0IyhWZC9KbFs0RD9LJU5vTUFEJik/cUNmKnAqdGN3Kls3MyRwbXVPbDEkKF1dTiUjU3xnQXxUMzAiSm5uV2VtUUxpKUJKRE1bbDY5UntSImFUJEV7Ti5+Ui82TCVvblorXWRfMik/NDRqMWZaUTxsekNrRSFERyhySkB4eFJGdVldMHUhalA+OHJgRlQvPmdCY1Fd'@;
put 'eDZpX0ZdekxuYksqUnFCSzo4cSFGdlVfVGFWVFE3MD5zQlQmV2BGVTBlJkNwcjZCPn1FaCFiQFMrckcmeTJFJVBHMEUzN1F7NCwpUHB2bjFPR2Z6LnxiWy4yYzJ3RmYsSEVaOUQiOzgkT2gqKnk/WC8mX3VYKXQ/YG9bJCRHb0ZeJTNYPzBpPyJxfl5IUH05UzVwNXI6QHpgQWopcV8yd25rYnJ3'@;
put 'emRKUiY3fk5fSkc+STRfWT9zQ34qZ043VzF3KjlCMkZ3PihVOT1MQFJ5elgueH5FfXpVUF5hOFBlLCFwbF9CeztBVUkseThQXW8+fGpoUCVgZTlUdllUTTM9YHldUCZQfWFLZHBrfCtlZTVXL3ZqJUUmfSs4N09HNCI7cmY9cSsyPnFUaj1rfm1MKytmZmpTPitpZkBbc1EjWF8jQDZrPW9ld0VL'@;
put 'fCVDP1YiQ3Mrc29gODhyOEZ6RDtPckx8ZWp8Z0NRQyJyXUt7ckxCX3goKWYpOiYhQmNUNWBHMm0zKFZ7UUJXNCY1UiNGXWJJZWs9VXdVeyhaY3xqIXI8dTJ5M0w7amkxei5jSEE2RElNcTZvdjdCaUxQTWVSRDUleypFNlR+UV96bmcla2VTNSw5dkIzUW88NispUSNdNSpAb2tXIWBGVnlsVDs7'@;
put 'eUU2Y3QkbmZuRzd0cSwrdk9EPmlldDc5cHZZTnxbSCkiYi97Ryg6cEQ/ZmNSUT1zTmZuSUxnKGdrbTFFUVV6b1VaM2E9YF0rREZOdVNaImAzc156biZ3RFZKViZaMFtnfE5ReWFabnRjZGB9PyZKNX1KRUNoST9Ne09dPz4+Sl5WY3JIWkImQSZAZFpRZiR1UFd5XmE5PElxb2ZhWW5oYXpGN2Ui'@;
put 'ZyxZKHdqKVBydkQ/O0s/a2AvdUEqXUtrLzlLUXo7X3g2WmUoZz9nSFpqb2k2fCxBPERVez5oJDU2a2c/TUV1T1IiQzBXY3hLcHFARGl5USI2UktgTVdAfDYqNEEkcFpUdCwoeTJ8NWR6eENtQDFtI35FdiF1VVlvQGgkVE4yKndLTSQ7YFZEVXIhN1EmYCw0NSM9Mn1RIkpxWHJ4Nn1uKjl7JCF7'@;
put 'Mz1RJH0pIllEUyNNSHBgRz84XVlIWy8wNGUzeyRbIjU3WGtARj1LZ2B7N1kwYG5PLk1qZXJmRW93RHRiV1d5SyEsInhYX1ZrPSowQ15CKnxNO01ELilUalptQyE3SV5WTTppPTRgRDBAXXtFJE4oXmhOX1R8U3gqaVhwMVs7TlF0X3lSQCtve1hUeTx4T0tfLn41WDwlOEN1dlspZ3dxYGhqSnZr'@;
put 'P2Z5Wn0wYDxbPVMsYFJGY30jXkEjZkNyKCw5I0UrT25ZLkkyWUdaKGppQlo3KnlgVVExcVlZTWAwantfIiU2ZVV3Y1IrNXI9RTBVX3xnSkpyMGFUWENkd1VaZStRbjtLZmFYeXlfdGIza1d6eUtFSVolcS90bnA8bHJAeV5ZbXtYOF49VjpFeEhEOGxAIUJtNTUze0UhemM6KWsxaCxVaiUxR108'@;
put 'UH5ZT3Vta3k5YSRYOWVKKEhjaUVrczwifUpLWjFEaFU3RFVmLkchKHlIRXBOMENVIlRucnEwT0QyMCshXWdxN0l5WTBBTkc/MyR4QCxJbVtWXjBUek1RMiFXNFYwPzoleXIrK1MvdHIuZEhPKyZgXz54fD9xN00mdEtQNHxDX0EsSm1ieyMuI25xSjdyP0NqcWBRS1MvR3x2RyNMV2Y2RTJdT15u'@;
put 'Q0g3YU83cjRlNCZmTEozemEldG08SEtYR0tZLnQ+eDZMVTBuQ04wTEVaOCNCKlU9NkA6aTMmO1AmNFklYmRUVW9bJDE/aHQyWVVEUGB5SFRPR21wP0JdbHhGZDVzQlg9LlU0MTJXc2JZWHtqPmklVFVobCZqc2QmOHRwPXZ6aVE5X0N0XnJxNi9XNls+OzxneTYiJX5Ocl0vVkIqW0F0KXcvM0Be'@;
put 'Ojg7e1A1NnYyRlZzcVRKIVU7WFtGIikzNmIleHFEe3pkTiVCJGZXdFBqaitkOnZvZGNWdD1mcF5oR1hoI0R5a15NOiVzPVQ4fnpYS1ZNe1ErfFttWjN3cGY+I3d+Nzo3QHZ4ci9XbE1dLHZoTHlqViJIYWtWaFcmdnVoezJdNU9DdyU0Ui4wKWs5SyJ6WDl6XWpeUG9Xd1ZhdT1pYWtjMDJEM0ZH'@;
put 'M14mMiF8cTJLS3JCcExWK0lrbmY+YnVuYXVYfGg/S2g6fDEzRElQbSQvVGMqLyt8NHgwWjQ9MENpW2U9cVZGRWtUUj87dnUzV008Sy57fHg7RWZQVDVrdXdnQC8kPCs/P0hZTSk+ZVosTyltWUZFTywoSkM6IkpbVGxGL2wvOVNEIXcyRWhCZFhOMz5TT0ooQG9DezYkZjw7QWo8a3Vvb1I5PF41'@;
put 'VjE3bVhRcUMkZW5UYjx0U3xYTFAwREYzVGtHV3ZgM3hrKj08cypLNzQmQmJxJGpjKjNkOTguRHloZDI6ZERIczF4flFwOyVhZDZUcCpFOmt8ZXtdL1FSZzNicyU2TltbfE5VJDFqaUdgMHsqSGlXdD43dmh7ImJxO0BEdVluPlYmPlM5MC9mXltmfkJ3LE1QVnNadUcseHpIO3daJFN8WG03VzVz'@;
put 'aGphP3tfSUxIY1slSiNaY2wvKmU+NWxXdnI6RjpfXzpSciM0MHloR1J1bDZXOnZXNS46TWREbmtEWV13PUZ7O2YlKE1mYCEvSVlAVyszYWIhJGBtJXVbPFRWTkphRmYvUCZzcUNwOkVPTSQwP0ZEU35Qdiw2ak9TMytlWlRwUyxQUXExdnNRdzpsSW47XjxQMCI0SyFbP3prWygiXzhhZz9qaXF0'@;
put 'QD91cCEjOXRxNHBsUmg1WCpDRHU0Q0VHOXs8RF0pJipgSWVyLEh9OmZmYXRjc1Y4Wik/d21iZHV6OS8qJGg5blV2IlV0NFU4MXc9USsqS2dKaUR0KFA/UV80IlMmOU94dlc3V2dHUC8yI1tfSWEzQnZLfjlVYEB+KGk2O2cyKGR8OVVKaEJKY3cod1Rpay9Lfkh6dy5qX0A4ZFZPNGcwZn00fHdn'@;
put 'XyZkfm1Pa05AQXxATXdINCVpVjVQdTZBUSYiJnMoZDBWaTJgRy5XOGcmZ3JaZnYoIm48OE1uRUwyRD02KjE3UmErYFZaOzliVi9HJlV9diRqbHM/bV9lcWByKnN5WWRGcn0mfCJgYGAlfEskQzRrLyt3N2pha215OWJrTWE3SUAoNilteWomR0JhJS5uTCxDRE0/dVFXV3hXT0ghPHFEUTFeTj4v'@;
put 'XU0ydS8oIyIvTDoyYzU/ezJdVX5NTC9fald5LDlkME83KU46OC92LyN1PWZZJkMqcmFkY3t6SlB6ZzhqYUZ9YWBGUlJJT0hsfThmUSx3KkAqPitifFJoLi50QntCRDxeeW5qNWFpImM/fXhyOC5jNCh7aGNYfTtNNnhEKGVvRUtVXzFlTVlhZXB2SCkiUHp7KVhDN1VxdkVXOjAqNkgsUlhlcCY3'@;
put 'SFNdMix3OyhdT29yQC5mSE08Wyg5KzBAXjA8XkZoS0hnfjghND5DKD4pbU1TeENRYkx4UTdLeyFYeERbIUJ1KVMocnx1Rm89aDBLKDR6Nmk6dVFGSXQjUClKeWB1eTsiVEViRiM3Ym4/QD5oVUB3bHZMPmJbJFZIQHVTSkN5WXk2S2ohU0ZwMmJNKVdNOnhPWllUNlFgMCtpdDw4IzQ3OVc4VTVl'@;
put 'K24xYTx2dFAqVEAsNzIrcDFRLHJeIjRsZTdgNzBAPH1qR2h7WWxffHgkUXxYQF4qZjd4d1l7PW43QntiRkQyK09ScFM6Mkl5Vip9JkdRL3kmJF4hZ0Qjek9EZlo2R21RQkc1RlJ6SzcxJFh6ezYpRE86e1F7cnY9WlU0fHw1Oj1abElGZUlZSmpubHolNlNwJWs4JnZzcn1gbG5xZjFrZWFPJntw'@;
put 'UFN+Q35IdV4lVjQ2YXFJLnchb0Zvfj9iMkZZTzV0W3chMGl9XlNYWDNzKFN1MnJ4UXVWejNCPX0sbG5WVSwzWCNrVF5we2pOPyx0fmhFbXJmaXdtIToienBxYGlLM2xGUW1GbjUyQnY1Qnk9dzlGclBSX2lFcz59SWBxZytuKnVoSGYqKEU6YWZraUJ6L1hzVT4uRkp1ZDNRWml1Ym5NNVIpRGFx'@;
put 'N1hhPFVGQkNhKz1pZkIhIzhaU0MjM0dBZEZlW3lML15NPSNoaHUzPkZdeD4jSCtiL0BaNiRtLFEqW3ZqalpySHBLdDV9ViFbe2d1fClTS09WaU4oK0JNOkdXdV5VXV85Z2ZLTkFWdCIuPmFSTEZte09+dl4yXjg/RSlHKTQ6c11ubzp5XXNfZ00/bn0idV90RVhuUC9CSEpecWtGITlvbEZRaDJW'@;
put 'JSV4ZmYuNX0lS2d3aVU7b1psazR0cWsue00pdz9nYCUxLEhSLFFoW08oajtoZT9TZGkwRFgodno1Z1V+USRwSU45VndjZkZYM3BzfUxAQnBzVFkxVi53QFZwI1lJK1tJIyg8T2c1MShwfX02cFoxdyhuP3osejUoT24oUipEUWpzJl0pZGBSVkMlR0NDTWx+QThsTipnb05HXShjdD1pXzM2b14q'@;
put 'N31FeGt5eixCVHVCRjRsbm00ISUyeWM4R21DRX52cVpsfnteWm9oUDYoIkksN246SDp+YU02cy9mblYvSShxdTxoOE46Nn1vWjdaQVtpKWM2fSlXXiQmenFXTS5TJHRGVVJkXS94UT9+YCtgYWhOTFpEbnY0az5Na3RtdFchVGdFej9fUjBKUWhneCVeb04ydnowLmA2MkIkO11XRSN7fnAyWWpM'@;
put 'UnFHdVNiaihNT2BULlRURHFuUUg1Lz8zYjgmPH05PCRKKiwzKk4qPz8lSjgwVUEhPV5xLCVIUGJiSj18OEk6OmBkU0BGRjJkYEMmLE8oYlVEam1sRy57Im5qU1tsYjo6VGhYP019TT9Kbmh3JjRgK3tqT20oKk1+dkg3JVBuNFUlNFNzVSI3JS9La0N6anpaPDtdT3lvQzFPSG1bVDE5KyxheXd5'@;
put 'REMsM1t7NlRWKW8qcXcpfUl+K3dBNWtKUCpRTUZjMXo4InxhNUkheGkrQE1zNFtkamRxI21Ud3NEeS5pMlMoVzR6eWI8RzU3YTpNMHtUQFZtbH43bitMZTtsX3pULkw2eXp0eXxYIX49NSRxfDdDQj1UYyEiZ1J7QzY3KEYhTWVzeS5oLlNXYU02RG54bEgpYyZgZTRCKkpWalIoUyZONj5ZZzgh'@;
put 'dmksWGlLODNvSypHUzwwOntnS1pdR0ZlYGh0Zkg8T3AvIjRQeVcqeCVLLzokVGhJUFtAYTZiPFA4QzBUfSRMbCk+JmI/Z0xYMDpZTSI5Q0tAdSs3TW1zTzBGJWZzMzc6WD84M3RXdm5aTUNDSlVDQ21NTF8yVyhSbDAuQmIsPz94IjIxVnpJelhzSjE8dEpQOSptTlpMKjhReSExej49LCJQT0tH'@;
put 'PzZOV2w9eGxYRzZ2WHR+b30rQkcsRFh7ZDtKZjNSSWk3bjJ9eUAzSEV8dUs8V3ohYC56OnYkfEpseWAxRDdCdGdTSm9qMCRnfVswP35OQnM2UkU3fkIwfHd+Vz1oY3gqP3E2MWdKXmkhYFsxM3ZOPUBRIUpGYDUxOS52TUNVPjNgPl4/dUVucUguXlFBIiRnfl1acHQqUlVOVyl8YFBVazY9eWE0'@;
put 'UGRESys1N10zJTUoQ1l6dztGQ3xARn5jKzdFN0Z6OS4+PHFhezciWHNffV9rJSRxZEg6bztOanFVdHcsK31+a3YqTV12WllNbUtgJTI9QCgqTXZYPFJ5S2tsX0NWQzBWQDMmZEhqPFA7KXUrRGx8LjtJWmkxQFNkP3VFWC41QFImQyhtX1Z6TDkwQiVvcXcuQDtGRCsoJkpNPExULGwuRHVbd1Vz'@;
put 'N0clfHhddXFjK1RTRW1QPUM0VyNyanoqSWFHfCw+WngpQFFjTlBVT3g+Vj1rIW19LF9dRF5oWW1WVFNHaCx3eW8mbkJ2QF48TSI+VlhAVjJycEFHXTdNMmljIldudTh8TSVEPXQsJWtRMVIhY00zS2VIfk55TyFuJTBUSyp1a0RRUVZ0dSpOUSpLYVR9WXZAVDFMW2V7KjdFO2EkJDsuZH1NKT9p'@;
put 'NiFvWzxycS9XeElWYlA7UGx4MXV8RSo3VUk+UER8SmcmfmEyYXghaillb3V5N01fOil4YHB1Zj1DQmohSlR4SjFoZFpvbzshSX5MXl51YDlwYUw/cXxaaEhNPSJ6fWUxT3ZMWyU8SCk2MU4obS4mYGVEXkd6WCRjaEVfN21rXSsmLyswe2lmcHlPc0lJaGMkZj11PGV+Rz9hZ0NNb01MZ0YhVTZz'@;
put 'KWBjUE0walFlQms5Q1NIYWJiVyR3JDNRWyRIcisrfmQ5a0VzeU0sIlEqKn5GfnZWV3p1KkxyWjU1c0U/L0xzNmVKPl9jPntkZDdlL3BWa2o/Z2B0SXZZT1duV106VX1Ze2ZIcy5JfUslPGBONl1AYk8odWdlO3EhTDhWOmx+O0hgKV8hSktocHM6ZmhFcm5reTYwfkFSWnshWVhRMVBsUlQpMTZy'@;
put 'Z00rfUsoNUA2U3l4VjVdeFRVfERKcT5HL2JpalIiUyNjaDFucnkzWlQqe1AjMD8vfTsmbWooPXN8Zjtyd2lbTCM5QXoweDFaYj47KnN+aXksPGhSS0VPQGM3P19NI0lMJTp7ZHV5XWN0bEQ+eEtsY1dlSjJVb0I1YFVNV1kzUlY6Ul8ucWxMUEZ+JWRxL0M1WDFOYlc7QV5EZkoxSUVsdzhhTFpg'@;
put 'MDtNJEdWeT8+NUE/fFE+RT9FJnpkOykkLldEIzU+OTRQUTRaK1FEamRyS3E8a2dWXjt8Xio9aSN3YVtAamUlPGoxQGcme3VzNyhBb3hGLkhRVG1je3A7cGozNGNZSCEpKGVSK3lxcnRKMFtaamVWZnNjJTROJSEoOCNJR25Dbm1XNncpfGpldC5qX1ZmWHJXaUNLTDB4QDB8YURtfjIyWHRRTGMi'@;
put 'IUFUOjZJU1NdXlN2a1lFQjYhbVJTfHhvdiV5TFk8V1poS01bNnBzYXhbJmQoMmcwciY1N1Q2PHJ1YCUrTyRAd2BFLFhEI2V0RHJbTVF0NWg7d3MjTzhFfiZQNVV7V2poR206O0gwImQjLE5DWHM+Rnd6OzFmazlEKnleYVNRakU0UiM9Mj4vJUo6bz59NCZeYmxhektzbENaPFVgOWJpU20/e0J4'@;
put 'TkQuQUVQMihbXjVYMFBUMzB0bCY5QjNga2BuWj1EdGx3aG01cDJ5dVUyRTY1V2g2JC9ZKGEhKSpfeDhYRChGakRiUU87b0B9b0FabytpITRpK2wpK0lSNnEvanY5OkJPdFojTzRIJjtLdjo+PD5ORnk2WH0/TGojLCFxcCo8TXlVYCMhfkIlZlVrfFhPSkAlKU9NXXJwUC5hMVl4MiZFN1lJP0Uz'@;
put 'UkJabzd9VHRoJWdHOVFESmYrZU5CXj1+byFPZWd5R2RBKCtVd2BaOS9HTFZiRmBVY1ZJJGxKKGRQPERkWTRGfGM8d21WT1dHWDA1NEksJDBVYWZteCtIK31ZTHc1Nj9ZW3tycEI4KENWaGlNY34uOmpCakxYKjRmRiJAZXQ/cV5gPldsX0dvXkxrTCZDXUV6c2xgMl42djFoPStgdDwkc0JgbH1f'@;
put 'KVhFN18iMjJ8V34+SmJ8VVdAVDZXJnVuaDckMT1sXjhdalJ5L0goUVMsKmU3K1dKdm5CO2lWZ081NXtoYG8rVi5OdnJqW1d8Y3N3VzxROiReMztPRUJRc19nT0t2TXA3TipDc1gwVVt9Zj5xdiU9IzNGUm9YTHEyK3BlakdDKSkxbGU2e0x+K1MpIkNiVj5OazNtXy83LEs7MU8qRENDeEoiOn56'@;
put 'XWs1b0JYWWxkYFdbeEZlNyI3JXJTLjo3dSZVLzgscS55TDhBUnVvdHVnaU9bUDc0bD92MFkuIz8mLjF0YTY9SlE7TD5pcWx3ampsWj1wXTojJC99YTQ+P0VKNlN8eyRTfnpMaGlMP2hOYz9zIjd+UHpKP1B9aW1DT3J4YS5gdS90KSVNNDVye3g4ZEplT1V2e1s7OEAuMWd8b0UubTJyNjY1QGFX'@;
put 'QkR8fVVUfURPRWNtIlJJL2Uqa1luIUdXRHYhb2o/TlMyRTkjeF1qUTw9dHI+eV5hTnA/R1osPSxxMHxEanc6WD1FbHQ7NkFCQ0R4ez8rfS54Yyk8ODpjdnAmJEgpb14uLDZeREhvb3t+ZDZOYW91NiEsdW9nW2okW2k5RXJtNlpdRWdLM0dTRXtWeGZjMC9AdWdrdHN7MTNgdUVzNUBNTXEqQUVt'@;
put 'UyMlWXFCNzpXZ0VYMiFrN00pa2k3OWFAUm14eEBLajJ+MkRnb0htLDtzKFduRXdWaHptdENhLmp8SXhRLlMlWD1DbjZRW2A8aDZOW2JGc0RBOmBzbVNwSWcxbkJvQF53V3g2b1p5ZW4/dzxlI3thTz4ia2U8K1F4Z0ohJVgkVzhtYkJDRCVrQlVMVGpIb3tDQkRmQSsjdD4kVmloYUtldWJ9SVFd'@;
put 'Im9ZMlRYUSlkMjc8VHZuYEFDZSRBTFRTZU4lKExkPzArVTxnRFdFKzBEeHY6UFk8OikjdCtZeGZ1dmU8fnRnbGZXakh9P1tOdF5qdTtyMzVYWnZ8KkgsRXBVJXczSEZWX2JRTXh4TD4hRnoqPjlLT2ZVeGouTUZ3cC80QEFUPnJJbCwjI2tnTzwhP25CcFguKFhKYjJJSVBxQn5oeVVHdSNsNSZp'@;
put 'YS9xUzlYV1FmTGU4ODF1dWtjLEU4R0AlYHgleVhHSHlvWGVsUV48VW5yV1B5andQQ0QobF8veHcmNGwuNFFQPF9rKzhpNURHfiZIPGhMdnokcjoyYVp9O0NhVEVsRSp2NXR7OnpKZCVTJGR8WVUkOEtNQn5NVXZsUHxrQylGPUxdNldIXWdUTlFrXzI6bzVEU3g0PH5uUmVAZDclPzxPSnV2fEIh'@;
put 'Sil7ezwwfiNCIUA2TnZ2dy46a2d3blthW1MzL3ZtLCFhZ241KnB4aiswUzh3Pig8ZnBnakJ4W2pWZXZqMk8oclRKXj5xLl9wRnFFWF4oQjtXbk41SSFWdEhwPXJnMj1NfkFDO3RfJChZUGhHczx2K2MpSCNnTk97LkVyKUQhS3R8XywvVGFKeTJPez5HdTMobnpgU2pBUHszR0B+aXpoOmBhUSYl'@;
put 'YFs6bWtnSlAxLzdKckNpPFgvd1B2W14hVHA5WXN5dy51IiVqKURWV1soZ21bRFZ0SSRCd31XI3ZVQlZ3YjxVI0YhQEdMZ0xvaGdxNSh7RkkuSlVUPlg0dSwxRVA3JWR7NVFhTTluejV5OCR5KyxkN0N9dnBoSSF4alFTdWoicj9KazttL3FvKkwhVn4lWmBGSj9xOT0zWT9hRyxMSzcyRn1eUXhD'@;
put 'VFkxbD5yVkFTUGtdfW92aWYkMTR3dm4uU0BTZ1ZieV1nKmpnbFVBOkFgV2lFN2c7OzBNS0skYEYuSzNpTHhaaThtWCkpSDdleUA1NV5rV25OQjksciwxVlBeVF9Wc2BjYSNTVzEwdjQ8RkhVZzpaK3tROGcqfkFJa1QkOFhlLER7akFiQ3VXQFYmdGNYcXBhVDU4dHw6SU5NdUhSJHxZSFBJOFtq'@;
put 'WiY6IlQkITlHQVYmSUNvSXNwbS40L1RQWHhHTHdaQnBdbS93TWowVGFyKD03e099XiFMOD5xX2wxNnlIP343Tj5fdDZfaS85I3J3OCM+bixdVnJFJEsmaTZjRHJQWHooTmU7OyYxMlkiPWlKNFN4cU1COEQ5QF5kI3ZjN35gK1AlKC9peEZiYEcwKXlXUDheSXwsMjExIVgjUz5ZT0t3UW9WXjRz'@;
put 'TyM7fEk9alF7RTlMQnFdI1tOdUFNVGA2RlkoWWhTPGRbZyNJJDlgK3h2aDgyLEo1bmUyamRpKjRiNHVPc3o2Zk1UOVhuNFspTT5TeUwmc3VoJG8ocVBERjFITUh0TiNXMXV0MFd1ZW1KQkwxfis1WXZRYVssWSwzODtSU0B9Tk9kZUNXdSgrRSxfaTtDN0Q5dDdIW087UVAyPX19PDJTV017bXZh'@;
put 'fUVhX2NfRTZncihWRi9nOX5heUV2ZjZwfTBEJjBAJV9SSHEmRiwhQHt5Jl0vdmxsITxIS1I1WGB6ZjxBSForbDA7Mks5N3IwI18se0BgV1RtQ29qKDpRdE1YUkBxWmdtb3c/TjAwQG5FL3QoVkZxJDJMZmAlZ3A+P1leMVtacSpZWEpXOSReTmMmJVh2W2x5PWxQISIlNy8/M1QuUGBZdDt0ZjV1'@;
put 'Jiw/PT91Q3xmU2NUVXtvIV4kQU5tfEgwUyxmd1FRQTZRLG0zaEJ9Q1MrKFA2M30/Q3olI1pyVF5gLFdNJFRaVSN9dWdKLlVhRGlnTVJwR1N7MEthPVNNZjEzPEx1TiZ5eipwK0hOcXEkX1t6SDUoLDhEcSN+QD50OjFyQiUsMFVENWB9amJLO155RE9tTEtlPGBJXnMxdVc6WS42Tz5nNy9bQEtR'@;
put 'ISpqZ31daUshbmdOdDMybF82dyZ6dW9dZFk4fF58JDJyX0tOfHxLTj1CVUlOSXdyb2txW2tjK2xJOCNfY1dWRXFLJF5kbTNMaXtJLzlVKy85dWtLfjlIdCpEM3hiZURzJGZBPio9NTh5NExZQj86UTxabkYvfUdXdzNzdTJ1PiZEM3xgUlpaTmZsYkJFXjlkVmE3IlhkYXs+dlNpIWdCNjx9KF05'@;
put 'ejNjUk0+bDR4JmBKKnJLKmM7UEw9VXdhMG5rI096MWY4UW80UzFAM0x3QXhDJFtHZ2hea2dWPFtvXmQucGdoYTVNWEdpWSpkdipQa2tDXSZyZmBCTHo1Mkh0e0FCS3lofGhLYGJMOV0rNU9bKzREL3JpKyREKHVbQ04hPTsxVE43SVFuVk5WQj10UkpSOHBZdzdCXn1RWiVkeTUzZkZtVTM1LHRa'@;
put 'WW0wZFE3XTxrQGhPWlhFOUVqI0RUaWZTOjE0KmhFSmdFcmZ5bzkoITc1JTlrQn5bRV1uKj5yPDleYndgdiE+N01MUCRVSTk/cjEsN2ZyM1NrYyN1T1slLkE1dCRXV1BndmNBdmR9YjxRKWRiZHhRdXhwfCJiTCtaRWlwRzh2SikyKnAiKXxhSEgiRCk2IT1Hb0JoLEgpPUFpIyN6YUtEXlcmMUsv'@;
put 'YDFiVjVJaSM3WWw7MihhcmZ0Jj5NTDJffi9tcytuNilsOSo/TyU5SmtKeH0udXB9dVdOQF0pWylUVT1BXWN6I1RZM24kUV5uWi5zOHpQOjVSTC5JWXBZUTR6MjBhZD4rZlNxa2hMKjMjcTl2YTJeSnwrQU0uXXxGQENrdUFGcSw2LzA/aEgqbiJLUl92UTpAPDlBO0xMJiE9TnxOQj5qdkZEZDR9'@;
put 'U0pZOHtIaTNXbjYoOXIxRkczOWs7Zn13NGBjYUUsQXxMKU1MK1R2QHJ8M2FrU0goVHlMYStCREgyNml8fCs6QXUuJUZNLy9rcj1vfkYhW2NIbHZdXnVNQDt1SkdUd25ET0tqZlpZUGM6cClzIWQ9OH09OV8hXTxeO0dheHt0N2RtJCMsaSleOkMpcFRbflU6PzozX35MZDFrcWQ+WEx1PXAoXUk+'@;
put 'fSNkTmMoWXpkXUYhdi48QztgRkF7UzZ2blVrUi9lMjMzWUhQW29SQCJQZT57MVFjOV0rUElScUVRRjBDfXxVMnluU3tpLkkoNkdLbnZVZzpmLmh8QVJTS04kdWJ2dHRdK21ZaldOIjVIRlB1ZldFQWcyND8/RitJMVJ+Z05Sc1JKPyl8bl98UTNfV18xcSMwdjEkaXQyakIhSUMiK2xFa2Nfb0xZ'@;
put 'Xygpckh3bEBIQUgrZTVuLGdoWylrfi5NQEZgNjJlNWozLl9+ZDRUN31Lfi53XkdxOmJQbClLUncvejAzVmZgLmNsLGhPeDhHJGYqezFhZGU/a2MxfTN+dC9dRk9ueWJbJC99TG5he2lOPit+anNnWSNOZys3VFkoRGRreDJjakw2TygocV8wRl8wdGZHaDRFJnokRWVIeipsQCVCdUtUKUFiKWtD'@;
put 'SyQpUzdKXkpmRDMzdXNFKXF9QUd7Umlgb2lyX0dCNW92SnFgbzZOOyooQyFHcWVyQDBVWmk+TX44U0BeLzBNUlBtW2hXR3M5RnVVREoselFldWZkNlR5bGtJOG4vamgjcHZgKkwyTEtnQGkuYHVLOlYlezxDVHYmKmkuRVhITl5rSTNfb3x9fmZ9Z11ONlU7fld7Wjg2JjZRPF5FJjNpIS86eCEv'@;
put 'cXI6XTBULz1PRj1BJmtiY0Y3KUVDZXZ9ejxhaUlhQmhra1Q8SkxQcUp1fEhxYDcpVkVNVSFHXmBtOG4vV0VNciwiKDpDIyR5MXM4NXF0QHE6MDJ4eFA6WnM8TG4uMCs5MWhjTHY6SWFmZC88NmhVZ0hvVG1VYEh2STdWQXo3YkooZk5ZXSNTQTAxK35BKl1mNmJrXlAhcEp0WjBOJV0/WVE3JXV4'@;
put 'M2JQOHglTlpfclopLGA0aD5AYDRbKTtJcktVQjpHVGZ6dCRvfj5bJmYkYW0iazh+aHQ3fF0/RVJ8aEdBQ0F1O3dpP0tXPjE0JDBKPEc/U05JR2kmKWdram0yKmZXMzUsbjQlK0ksfl5XeVQ+YyEofDYrXkErdSkwJFYvbl9xWWJbL0NRJWA7WnleRjhrLil6RiVyOHIxOW59JiVpNWUiKnsxLF9w'@;
put 'eDV3MSpwdFQhcDtYQ3RZdGFnL3BPPmxhYX55az1mVEo8XkVxYyRITFZ7RWheNmlzVTYrTUBPOWBPbWBbSGxPbl9YWjY7JWhafUU1RVtPQHJeVS5wdF5YaDsmcGBxfi92dnFdPjBLP0YrMTJjc2I0KyV2NDppQik2KldAfTlvfERdfShjW0hOcDs1eXBlJEJtPHwrVmNoJGpWZkBUPC8vXlcqVFZX'@;
put 'eikhYVE2ZDVxWjY+fDpxUTdWU0I0djRiOD9fS2BGJTQpZX5OLzRmSy9KVG9hPmpAbGhuTyVrIVJIWTExNiF1RXAkZyhmKDAlQVgiWT1yRHNXcEAjYk13PFVwbUB6XkcyIVgwZVtEX3hPUnZmen5tOmdjZTNYVG4pX21NNjsicC8xa05gPTdSRn0mYSplPzZCdXNdeVB3QUJZJmlGakVYNC5uPC5D'@;
put 'VSpaUjgqYnRKaFlySGJwTENPUlNRSCQ+ck48O0h2UH5GZ3FLQl0zOEIvREJGOlJ+PTJHV3YpWm4mZDVqOX0+L09aUWVbYlMrdkFHeUtsI196TGk7UFY7K0leelBSZC4xW1ZiemY1YmU8MEZ+P1RLc3MuQG5PTC9IN3k1T3hwfDB1fChoKkQ/R192NlQkUE5nVDV0VF5qPytSIj9mMyNELm9Hd3s6'@;
put 'MywrY3cvQTYuI1loZEJbaVh6UDFRbDVLZXM0Q1Mwd2MpZllJdT1KXXQ4SnU3MH5pKF9IeUFkVzVwbztmM3UibyoyRDsiO2doW3RrKE5qYiNtcUlXfCRhTE00XjZhZ2U0YThUMV8hZ2pXYmBPQ29wbm1oMStxdns5QTdUT0RNVXgzYHZafkl6YmhFQXY+N1BrJDR5VEJpb1IkSFZDd0k9fihvIyhC'@;
put 'SX5wUGc6JD1lXyNdSW8hbyxgTVA+ZiZ1dTUyQ0V0ZiwmbUwsa3kjSCljPHwoezpOQ2lKbzVOLytda0V+LFZpSHReZVVUXl1CNGNCenpKNHVCRX0mfS9nPDBhcW9GLGRhZGMyWWxzLispO0B+THNuKG4jTFZUZjEke151fGZWWUxQbXV8ai9UNVp4bmE4P0NEbzA9OTFNUzdycT18W3QxOTBRJDJn'@;
put 'W1NqNlZ7KyNfQXpbOylhdkRNaTw3aW1xPkg1bUFWJUg6YXkjRCUxNmRNeHVFR2Q3O35XJnovRSIja1IyVys1bjtrR2xMKHAmLjdyd0AlNlhePnNsNG9lbjN9XU1yc2g9RFlPWkxgMXZXM3V+TUdZQFVteTNgQTkkeThhQy9qK2w9VFN3JXppbi9FKExzQ051MFBQPzddaihKSXokeVh3JkJ9JF4q'@;
put 'VihhMG9YW1VdVSEyTE1MYlovUz5FUldkNE4oNTBJa1pRaHUqPjRsYTtYOmRQc1paUWEhRS5dSyhXY1pyWXh9SHNFQHBIYDNCbG8/c1JSZWlqUDc8dGMuW2M/JSJgXmVnUXQ3aXA2WFZYVyhAXyJmVV4hYD9ZSWgpVTRbNUtPQTZ6OkZuUnQhcXZ+ckIhbFFjUS5XLkYwRFBeMUh3U3IkRSlXVmQ8'@;
put 'cjI6KXo2bG9DbXxdImUyb1ZeK000ZCRxTntAP1NiLGBTUjFdNGw0SVpsQFVxKmVHMF9wInpuYVlKcFZpdmxkfFlpeksjMXx8SV5AMnVPO3BlZ0MsbSNXK2ovektqLE9IWFA9bj5gI3JrIX00Nz95eSZ7InNAb1ZpOWF3WGImKCZCPSlFeTRxX0FhZz5YRFU7Ml5SUndiK200ZHk4ZihmWDlTOXoh'@;
put 'LiovbkxLRUBiYF42b3Y1T3NOWDpWc21YdWkoXW9EOllKbnZaQSltWXQ3cFdrKncibGt0V3guX1NxQHo2WzwrYiEzMk53WVQ5YGtDaUFeMDxrW14sbWZNMVh7alZ2bnlzPXFnekcrIltsK3tiTlo0eTw8QmFwQ0t9fSM0R143Ji51WTQzY15qOj1XPEZJQmp5KGFlUmBCP1V0KTFyYjBALGVVKkcm'@;
put 'VGMibXt+dXJUfENeOX1DZD0/d1FycXJSIyVZVDhzUjB0QndzeyR9MVlNS3UucT04Pk1RJCExIywpPGVBKkRWX3lkMW8wdStMQTtwTHFkUU4xSEBbMGRxYiJoPVFzayElIzd2ZW1AQCM8fnlJTHpXbkJDbCpwaWQrKHBbc0AibjdTL0VOIXd9WSRJKlY7aXs6PWZwdD96a0hYcE5OJSF5ZlNZcURW'@;
put 'a1MjcG8hTT4mU0FzISkwZm9mR0heclJbeS53S1JpWUc+enNYYFU6TCg6QytOalFeZFNkfCF9NUFKOThLVSRBZXpkQltPaCgqWVJTY0VFOFk1RlJEOUV4PilHSzlHakM6NEUkdWBIKmZqfTY0aCpJMGMwZS4ienNQW3oyN3s/dXsqY0UjK3R7fUk5PSssXnB4K1REfHhQc2NldzcuT0U+PUNfZHFl'@;
put 'JCJzaShbaFJ2NHVFKV8lfi5vUk14dkplaVZjYzdbaVJPfSpOaVNfKlVHRTg9RGdhR0pwck5zWUZDfXp5YXZzMjBELEF2U1UydEFuWGsjdTY1KjMzUThnRUJMNUhLP0hxcXgjSlFFSkk3PXFAdy4pTkB7Lz5EKiQ3X25kV35td2UhcFROXTh7Ik56VzF7LHQuPHBWOkg8JjVlb0VeRihiT0Ureiln'@;
put 'bzUyIWlVb28hZUt+eypqUkdkKyZEe0trLn52VEMzcnBlaFt7NEl1O2d2JixnT108VmZsOHY0fE04RlVdeVhRKS5ja0E4PyozQiFCS0p3SGxzeFtfYjpNJHQ7Py4kWUZMd3hAQDV4fW94WCFyYUh7QVRLVyxWdiZdbE0/V15hUnhRYG0uMFEpdz1hQE09OH1iYF1VVW41IVptM0s2N0ZiPzNjfiJR'@;
put 'WDsqbz1GIUs/SUFATl5nJFcjKDRPOFl3NSxhK004JGBbbGVNeH1TMzl3cmhiKyEpc3hoTStANlEyOyxJXmBDVWFmV2lYUnBGZXlOdzRke05IVHJMfldXT2ReaVQsVWFdSHI0aVF3UDJVO3cwI1cjNXB5WGA8NHBgYUUjKDR8PUdmSysxU3xIKkJNSXMqZUl+QzZPQUBsNXUmdjooMU1pOnJoSzJV'@;
put 'ayYjWXF6aWNicEMmUmosUWxqPV1kZkVdfTpMfDZQTHtWW0BHLkF7XVFGcmVNITdyYWpoY3xGKiNLRmNMPTR1WStId1NZUHR9I3FtNlo2ZTBEIWFkZUJCW3V9eW9Me1MlOTpPWWwoX3AkP1Q4UWMkLEs3NHRATWI4PjVlXj47RDA7R09OfE5qcSZrKGFTcyM6RUA8NHZyeWUyb0w4TWY2U2hZZGhJ'@;
put 'IjwhPW0hOGt0NDEyXzAyRzciWlo2ZjdleT8ze11vWSwkb21GfDMxZjQ4JkJGRVk2OE1xQmhjXXU/Ij9IVyFATEVCMjt8SS9yUEt6LkN7WiVQa35idXk4dUlWS0goOU8oYXh7Km9SeX5YP35ALlIhPVVXfCVqPSt9Iyo2OncwOCNXak0sOE42fFlucz1ROTRmLz9yPHZ+SUB5PEAwMylJNH0wR11p'@;
put 'LkxDKW40MTErVUVISHRoImJ6OSgvSS5XV0khI2tRQCk+dGZoL3s6SjlOITNzemQ/UnJ0emN6UlpWa2hkTEoiYzt6b3Q/M2E/OHckTEFiLzd5dWgxRVh0Y3IjRnc8e3ksKFdkNVA9Yno/aGVAU2BtI3hzMUBmV09+bj1gO0NwNk5AWUkzVio3VFt7fFZ1fUtTMzUsVDgjfj06NGxMV3UlUjI3VlN7'@;
put 'djBOYGhYV20iTFRDLks3IXFjcjBwMHEwcXgqfHRRbDpyTGg+S35hPW0xRGohVGo/UFlnejR9NXtLPHpLWENFaDoxXW1MOFdTQWRFPVhYJFZpVCUjMjw7SVRGUHBsR0ApOGoiSTBKZUJMeWg4QCpTRiE8SDo3YHQwUUNJUnxFfWxdRnhUTGxVaF9sIkNSMlR5WSVKcyNQbDBBJXc8W3slNiNbfihr'@;
put 'WEVnN00hUXhyYl1jKz05P2FtfDlNOSx+QmRQOlklTGY0JWhAXyg3Z19PclBROnIjNmxRYz1eOFAzWVM3QGtxTzRQRSt1eDRGa3FFe3R9fHJiJHYvSD9EeCE1aF1JJC9TV1REM1hAJXsjLDI5WzpoeDNzOUllbD9YbDpTWDBnSURCI2NTQVUvWSVpN3hpLygvfGkiRGd7fDRnJWxdK00relZgZ1tx'@;
put 'S1Z+MFVCPntXRnMpOCQ4Un19Ii52aGk9RTRkfipvQEZ8ZUNkNWpvSWk2TTF8TF1uaW47e3B8PHomVE91NW1rTlYzQCpfT35pZHMpczFKVW1vPCVGaXZZOV9wc3pFIz1JQlM8eXVlJl1VQjJFWUlBSWUzc2laVUg0Rz9ecTRpT3R7RGQuIkEzayh6NHhdXSkiPCR0PkNhVmlYQUJWfFd6OTVhOH1z'@;
put 'NEt0OnZlaCFaVD9LZFNnLkwhUF8xKlJMUSsmSUhkSUlIMDxaZCk/UXF9UkVyV3Q6ZD8zcmc3TjExeXxiJGN6TipRVG9APG9ARzE+W0ImMnpKPWgxb1QhcHBFa2IwdEplaiw1e3w4Rmg8P24+OElfOkw+ImBIeXUib2hOP15Pc1JsTV5CXT8vREo9LGEkO2A3eWhgbHJ7NShvZlE/XT18aWNTRSJI'@;
put 'bj5CZTJ2MUU9dCV9VnFyUXpda1R2TEQwLmdyfVttU0hoSj9Zd2hRal1Fc3xHNFA8W150K15dNUdjcDZNYHciPWt8KzRzYTB2SEBeTXAuS2RnOUJEIyliZ1Nnais9e293fk5KMH5OdC5hPWMsfFEyTS59OmN5Lz9jMXdRYjk1VT52eTM8KyZUZiNrTFFAZiJDYz0ybiZ1VyQ0X21aIk9SbkR8IypP'@;
put 'PDopb2x1fiVFYSFgZl1LUWhNb1AxbXNJcERoRmt+eEI6TWY9eFVteEdmS3Zlem01WCI0PCg5WWs9ZUVIai4pIkIiPjRbfUBsTnlSeWU+aUQpOUtyJlE1YygmOEtPNmEse2liZCpndmd9W1R0Rlg+dSM1YDY0eHs6Uyt4bjVvcG9kQGc5XUtkeTwsLD02U0giSiFWR3lsaDMhIll3KEVRRXkrOkRi'@;
put 'K3MxYE9iRzoiYiQsVmRlMmxMUlY8fUQxM2V5dCtTWmp8bXslYSVvKyYwJC9wZy5zJGM+dkleNmkhfVBPdmVaWzI7dWUhblMxWiN0WjE3NGJmUk5iLm1LXUMsVTR7ZGZKXyNZY1IhJVFOeF14Y3RHblM8Q3NUNXx2fU1jaDxZOkMkUWBRODQmOjpdTjE0fnB4KEd+JUgrZHBNPTl7PTNqO1h5UWk+'@;
put 'eFtie0d+a2tLbUBiJUw1Z0AvYipKT2AiJntVZUNBKz4/XjQ0U0l6WW1fMiNYI31HXXlwXmFjOkMrLzxjVyRATTxfPH01QUNVfilJeT5eZ2E2USQ0a3FZSWhsKEhMeEE7JGgmQjwyQn5nIWFXKXQ9dW9BMUFxWXc+LyVdaSZhZyReQy4vZ1pHeyxyJC4ySlU4WWFNbUNhOypPeWZyR2VyXj1qRTwh'@;
put 'U3t1eCxUUztKUnRlamZ5VFJoOyVmS2N8OHgiSmpZXVgxbmJ1P0llNTdML256eXVdPk1nKWl6cV5BK0U7TStOSz1wRjlCeDElaDteRTthTk1mMSoyXlJZcVFxfW16bTtadDZXXUh9c18oSkBGRTpeZVh1N2oycEA1SE9HWDNXJldCYFhTJHw4VyZbUkgvQ0U8NXRZUXdKVDZCTU9ELF9+UjJQIk4h'@;
put 'Mi5BZk5KYFkxPyhWMT4+aVpTMERVQ0JuZXVXTz9TW2VtLzBYfFpRcktYMn5rfVIjVEF4YShNVHEyND1kTF1HWzxCLFQ6U1JRJW1fSXZzbTw8bF4yPWdRS0dTS1BldV85e0BUcGpmcjc3WF1RWm9XU0BFb3QyaHwkKFJiRU5sWjUrcT5pZyNmM3h3Jj9uRExuNGF5UEJ+JmMySiZ3eUBfVUEoZyk6'@;
put 'VyFkZkBTP11NNCR5Y1lYSGVaYnJCSzsqSCVPdWlvV3FxR01ISiVgXUpoVEo5em41VkBmRiRAVyt4PVVnemtqYXFCMURCaW0pSypmaihtNGlKdCJPQkc8S3tCXXddQGNDQCh+YjBieiVtbGElaTE4S3s+Kl5dX2M/S2ZuI3JURilUJjo3JjJsVTZoVCNZQ3BCZ18sQjxTVHVPQSJdO1s8V24uL2NL'@;
put 'MHp4KShSals0VW0/LD43eS4pYjA1IldyMjtwTDJeQnk5RkIzeitNYT06eXFvclV1TV42WlJONGFCb3U9aTNHVFo7eCYvWnJkUltBeGV9ezxWN0NePWFLNWFqYip6Q30rcTQ0O0Qobl88P0BHYHRlRD5SJi9HaXhRKXJERFR8e0pCbGhtclE8YXZhLmUhcXdULH4qaU9CL2NTI3VhJXhjdWZfbHNv'@;
put 'cTcwRDROVDUoSURzMGJxcDk2NWUxa0EhYmBnU3VFYzJLYHZpVzBuTlZXJjIyViordEpBdE10TTBvIi99Nz9XYlV9O2dbM0tmVVZvai89T0I/V2UoPXVPOy4rcUpSdStHMGp4fmxNbzhvQ156Ym5ATi9HejIzRk09UEB+VGswVWhyTHh7JF19VXsmVyl+JjVUfVc8NXh7TG5AamQ9MlUqIlB7USZH'@;
put 'ZFssPkJFd0hHbDVVPUdqWUgvTFRqOkY0bmxeSGJ9bTE+KWw8IzR8SWtjXnZiZmR2eiI+RkgofC9kJEVITmt9fjQifU1vUU5dU0w8PkhoVXBUTShfc1AhQStDY3xrX0ZxVUgpcHtJYT5tcyJdR1RrRVpPMEM5Jj09IXFbODZrbDw3KVsid1F+QVU0VnxxcV1wdWB3LG06UzpLYTYuKD5dUmpqTjEu'@;
put 'OltfL2IrRmhqVHs1LntEdE1JPk9QMWFDL2oqdF1uMXpnTixidT9GRjZabURRQlgvYGJReysoV1gyN1VfW0tuZiZacDJ4QUZ9QSMjVj0/ZEJiTCxHcWdTcVhJTmYoeSVyUSluWlhbQigmbnFGPGAjTX0oIVJzJWNOKFN0am97azdpclZJfj1OOG5Vci9FMj8kOjwmO2FWYjN4Um80M3d9PHk2PXBj'@;
put 'fiJJLzAzcHBOYUJxV2BhODwrTTptdDdXcz9dait6KkpAbHpRQTFfQDo5d3pCSXBRSSZLclVdPkUhJnlUM1VHdEJnQDR4UyorX3RaSEpdfVo3YDgwMl9bRHxFKTxUPz96PHBVdHQ8aFd8XilocypkPFNDMkV6K0Y0ZmxnPH5gUX48PyY0WDF2fFszUmFaM3lxPD85LmRDVD9+SkxxXm04OkNVOVFJ'@;
put 'eDVRP35dRElNX3Umdj5KRGxMY1o1ViRiUTtJaW1rRVl4Yi90ZTRpJSp5KGBdUDA4SlAjcEhmLzslclEsdiEmSmMoczEiSyROail7QVJOViZ4cSs2eE55XiMqbzIle2drYXNJZV51UiF5dHhpNDErfmJLPE5tOjRdQTAqYk5sJFJKVFtaeyZdVk8hfkpGfkVVJWt6Ml93N3YzJHYrSGg7UiFtbnJM'@;
put 'KVFOZ3FOUmAqeVI4flFeRExhbEs5dDJ0VVZWIUcoRSwvJDRaRENFXk99ZXVeXXU3TVhNJV4wfVM5fDcpQCMjQEBFXTdeOGZ4JUlYbEE7JSw3RXpTZkIlSFMyJjRJLix8bGNWQG9DSz8saHFPPz01TXc6Rk5QVkpeRD4vOCVFNnQ7QHFsO0NvZEVddjJ9ZnZAZWtxLERdYV1VRCQsWVR7MmljdGkj'@;
put 'ailXWklyR3JAZXd8VjFXNjdfZUBvdnZyOjxoVnFCd11+Y3BdODNRQSNQR0VpXTFqJmZCfnBOaSwwJi9EeS47XitjNylFUEJpYkU7UGp1VkY1fVMsPTZvOjcrZG01amByazEjKkE1Jmh0O3tZSGtsOio/cGBXWjoqPmJbblIqb0JYTUUkfl85YCp4IW5kWnZVRmFmc1R1MmFpTEJLZChvVl1gWnRf'@;
put 'TzNXPTt4Pjw1KShueE8qZEh1WXZ3KlIyMGk+Nk5udDk0fiJKRX47RVJNTnNbQDxrX1pENC5aI3ArM24hISR6Xk0ueXpvdTB9V2VGOypFNERXdSI4NCExPipJailpeUNtR21dUWsxZGRpWEp9N1dKQjE/KGBKP3I7Vmc8R1F+JTdVOGpJd29RTCU2KnVmK25nOShyPStFNz5eckN5SUI3KHd7VSxh'@;
put 'WWd0aHhjcnduZCNYNFQsZFVBVzd4cHpMdywjPzhqR0NGT2V6L2dyOkYvIk8jJiErek5YS250WGYhUjZwJCF9MVA5dHckPndYTkd2ZFJMPSFyfHRBLyZNR3QyK2F9fSg2OCRDV3x8IkgkcUJDQG1OKSV0fU1AW1oifG0+PzkkTE5efE17TlZFWVd2JGtDfUdiOld2bmU8OVgrOFd1bXVVI3UpIms8'@;
put 'RVlMM0c3VXplPU9zbmk3RywwO30lOFAzPS9BPSxMLClpUUEqVHAiZW1pdCw+XSFyRVJUNysmPF97TSooMzFEZj8/VXIsTHZ8dTdJRXVUenhjU1gldH5tZChKWXssNWV2TEFrWD45LmVoN3sxenVtW2BieUBUUytpdnJJUS8sRzhSdEd4YTMlNj5LQDFTYEBWV0V6Nl4wMiEwNDhyUD11ZjE9Nm5o'@;
put 'dGc8WTp1ZE81TWQ4ZU04YSkrRCZgRmRsW3NaT2VIe3hdTnI1e00oQltCO1hiTnVuSCltWDIiWCovPj5+KF83KiwhUyozPWI2U0hYYHw/aVVSVnlYZ1pOJUBrQH0jK3syX1BaRCgzakRtX29qXjVAOyhRTCRwKFNIL0MpRHBFKkZzcXR5eUBefSE/JCU3fCUqPj5tOyUmc1J9RSh3YjE0ZFBkQG5C'@;
put 'OChKYVFlPUc1dDZofVA2RjQ+dyVGcDU/JEUxODg0fERebDw0fFhHflQuPXxFNUk0Uz51WjV+JHQmc30vSkd1XTJ1c2ZqY2hlZjIoZjZNbCx2KncufXd2NnwjYygrLnMveV92L0FdcWpCOnVNfX5xVz43XkFvfTl2PG9CcFlqYnZtWHI/UEwoaDEyJD1GVEN8XUBBcVouejMlL1dRQ3VUSWtEP31u'@;
put 'PiZiMkNlYnYudztqKlVGfkB9angxdUR4LkJfQncwRTMraz1kZSwjeCRtUG86cFtZWUIlKzVqOVt7MSpHITpGc1ZhV0ZjNW5MLEVPT3NMe118XlQrbyRJVzw/KnsuXXFRdTBFKSRtKl89TGNDNEV3IWxbd0srIk9dL2B2Oio8PVdHSikkL3lsQCZ6V3E6QnJSZEBUT25OOz1+RTJLX145aCU7TyY1'@;
put 'NkQlOEQkXks2VFMyUHB7ez0vWCg8e2tFeDw0VjxlJTIxJlMqPV90amEkLzUjeG1dW115O150XT4+fi8rNisrS1NgKihDOTBFY19EM001cW5mTTVeeExoLik6WTJ7UDRme1F0Y0F9Slg1TlRATEJsPEZqbV5GMlQmUktnd35mKXNHS2FfIWNkVlAiXSV3IypCUlojW29CJCEqWG9pfVJIKWd8IjUj'@;
put 'TzlSM35XP31RQl86YEpgfWxZYWw/OEU5QkYqaDFmPC9ZfTYzP0hnYjd3L3BrMTVeNVImTF50JTV5clIzdmM8QjdLSS8/ODs1QWxmWmUlNDhxc2MwRlYrISU9dzw4MjlWbmh6RlJ6VEwubihHfDQzOnR8QS9wSlcrO0QudV5gdlNFSmtRZz17b0poTUYuY3JeNnlebT4hezdbVVc3IjQ0WTN7fTh6'@;
put 'fjoueWkye1V1X0ZISCtHd14zbTlZSVBBR3wudnFwNUwvJGx6Lk8mMSV4RE1VflkrajVgUkdPRS4vNkRFZ3Z7T1tDPUNhMyF4dGpgQH05P0tmX0NafVNOIi9UI0gzZ30+WEB0ZFB4TmFVaXQ2M0J1eyp4b3EsOjBxR1I+UCQvT3ozXV5vYlVHdT5nQVlCKzxwb19nbGYlZFhMY3s9N1BuZT1KNWFh'@;
put 'LF9Wa2p7cWNKJiJYUzJtIUFmX2h9U2dZIyxSbWJIaEw3bj5lbllXanFmISZtRDNoQ0BWTSR3USUmMjRIdV8vMHBMbWJ2JTJxXWxPRk44Uil8LkheWz5hOHhSTU1uI3djM1dlRSEuRyMpIzxNc01TbVgkfDQ7eDlTMCVKbnB0WzJeOyIofkRfXlp8Mjk5LGN2QkdrU1t5OGxtNm5DUUQyVj9XNVQs'@;
put 'QlNnVmUxSntWbEUyQmFjUVN+KmZ3OHcofm08RSl7TzFecytBJEU5N1B8SXhPS3VzK3IrQ1RtYlk0fiNbcXJje3RtVXIrZiVbdlhPJUNYakd5SzJrcWI5WixmQDNSPGJWZUpoe2ksXn4/IihwVkVjTGE2c1ZYcGBhTT88bVlyVUcmQlh6eUdJNG13P3V2ZDE2eW57bChKU2xSPj5ROEh7cmpzOFld'@;
put 'UzJXWHJddXdfakxTM2YhXU4zLiRick0mYFdhXSRDUEdgIWJyeFl5RDU4IUQpIjtzKVdnSjI0O3R0UHt6JCQ4YnVRb3t3VSl1eXQxPkdSOGxab21uZXorJnZMbElNLG8+LExLM1YqU28vXSs4YHlkeGE/JWxeQlI3bz5aMk52UT9bLFYxa1lneFFZTGhYMlJNTmtyOEgyb2EkVVtMXi95TWswb2sr'@;
put 'Ty54UklWUiIwU1p5bGAxPktQLEVOWDo5P09LTy9WYHdaayk+RndbM3VRQmx9OVdRL3ZNOHohIWlqQj4kTyIjYXN0dFppNDxQYE9lJH08MGRvQ2M3eTtnWi4lImsrQn5HLCpRRCtldlJGXn1TZX1FUVB7MXVRcSpnakE3e1swcn12KV5rJj5ZYGg4ayM3KW1JSXVeYl58fTgsUEVyW3hOMk1DJm9k'@;
put 'THdFcX1oXU8uQmlmbH48SmliP2krNiRXSzl5L2tXQ1d0e1hjSF18aCwqVEpHRjhnLkJBPE5LM0ZROCx+QSteJEl1Tyt2MHtEdS5SejtheEhyKTl0eFNfYl1RQXdlRy5JSCZiKERSYWhoITFYaltQVU1oYlNjeV8hZDtrSEJ5aztPRSYpcldgYGxneXduSldLbFUqWEshOD5sdCU/ZTh2XiEzTkB2'@;
put 'VHQobXZpPiVhLG4ocX1FQysiLHhPfUhIc1FQfl1FN3Q1Iz48XXhKd1g9aHEzYFJKc3lOQiZPKD0sW3ArS0d6NVpjXitKYmRUKWAoUylZcUNQd215WmdsQmhuIUkiYkc3IihDYG5BXVRzYntuKmwkT3l4ViM3OkhfaTBFV3UkayZlW0Y/SmJ7bHhwZnJ6X2k2cVdyPGVhOWArempQSXpyNktjamRs'@;
put 'L2IyZXJELDtdQHhwL0t6MiwzNCFNbFssJVZMdUxlU09yNntHQ2NLcWN0e35bOFlDQzlfSGJUbEN4IkNnWmhfV11TLm1KVFkhUlFIRiExS3t2Tj1TPllJPmdTKj9QN1dmLyVQXTtGQ0djJDEjaUhgVzNoJmhuX3g7NDslbyltSWlyenR2aTxtZlVmaC92fEQwNz86Ky5KayQ6L0EzcExPcCNnPHZ3'@;
put 'cmhfaVRvNzpKd00wQDkuY3Blam86VDwzTCx2YSsoWnl3UXxJZGw+aGpUbndSTk8sUSg6Vmd5cElJVypEInc1LF1oSjZmcSRrWlo6T08xNzZOWk1aYHhrUSx0OE0jZ15BZl01dT93RF80V3goKD9xeFoxLk05KC5hfCZ+O2x1cVoqXlgkQnpFTnl9VnFaS1k7O1NBJXdPVl9Gems4bGAsO1QrY1g+'@;
put 'ODIjOWpXMHh1NCEsd3hJRnNBQld5SlNETmF3cnRhKUZ8a0VkTkdVP091cHdaY0ApRW1QYTo+Sl40fXk+NkBHcns1eC9mT1V8Lmt+d1J7UnxlRWFfMEVeRz1AKnpLN05qZyFzOHsrP3dFdSU6V3cxWX07ZytTa2g1emA6WVchWStJW11ITH4pOn4wK2NSTj5IbGYmdmR4anZ6Y2clPUtvVjlnPXoi'@;
put 'dGdhImNLUkd1KC57fk5ES0t2IURZcSZWKkBaVTFAd3F8LGBvMiFpV3p4Zko7JmUyLGd2cWhtN3xeQFVaNWJ5ZVhARHRoPiFLWkRIfFRfaXk4TFcleChnU0R7bD1PVGVzRDhXZztwWCRBcFIqSm8ySXpebFFvdWAxOXU/KkJ1b259eGV5LCopLEwvTCsyaDNrMWN1QmsxSi9ONz53bX09YilkKGhz'@;
put 'VnwwOzUsPjtZIWM8djR6aXF1d1FDelZTMlNZKD9zX1cyJTwwIWpPVEZlWVowQmRMK1BZdCVBTHVyMzJYLlZkXm9HVzZQZlZeb3haPUN7VysuKCUiJiY/NSRZcTZCOWVjTVI7NCpZKlNkTlcrfjtaWyVwKXZGP3UxRiJML3FvUEBeKixwX2Y/PGFvZEBgMVE6TT5GcC9rVC92UX5DYEYjVXdJR0Ix'@;
put 'cjFyWXxiRThsQkplN3pEdHExNytKWV58IUkzVSRMfG8wSmksQyxgYVp5Oz8mO089R31bYEc+eEBBa2thaSlkJl0raV9kQGJvWyZIPFEkJlR0RW1UWU15LkhGYWRjYX5JaU4xPDR+I0xscnxkRGB4MUp9aWRydi8hbjQ+dUc1WzFgdnU8QlM9K0I7WlAxLmNKUD1AWXF8WXNmSzpkVSRHenZhWix1'@;
put 'R0xXQilVNWZDTy5NcDtKTGclVUMmR1ZFTGBUI0BETSRLYz5RTmhaZHE7OmRML097TDlveD1rZTUocnFjJkFPT2tgd31VQzpYdEg9dVZXdyVxSHtSM1hreE53bCM3fFtPTm1XUHhrfm1yY2RzRmU5VnNJK2RfQkJOVVpWTlV3Qz1STipiJXJqcHxpTitMPndaW3h2PzZEWnAjWWNqOk10WEZvUCRA'@;
put 'eixLOlF2b3N9SCRGbTosWUdxS2hmY2AvLks0TypYPDc5UUZ0a0UlP1tdU0B8XkZ6aHB6eG9vY3xWXn1dZF9eeHAoaT4vZU0wKih+R0gyez5GbjQ0amhuVUo9OygwOVJzZ29lT2khZUFLPCFJRVFmZC8xPDtkfmV8RC8rclBOeC8pd194MnFbYShpa3Q6SGZOU3R5UHp5eT9jSU4rej1JJn5HREBz'@;
put 'bHlUPztGO0JKXX5hZFtFfVJkZFkoZC9Dcix5XSpuXyNjPT9MQ0JrUGd1T3cyNH0uUWdgQiwsfGIjRSJ8Q3RAU3xKalJjUltAYEs6W2l9cmkxYFZSV1BAR0RqR2ZDIk1DWEowa2JtZk1dM11mR1F8eFUoMlFWM0VEZXBCQkFUZ21kWE5ifEdGVW8lcGA/d0BffHJDcHw3SFJERk49LyFvNnZCXyJX'@;
put 'RUw6OGlkdyRRJGg6NUYrSHFIW31bL1V+NWAoe3xPPjspJXx6aiYxIVVycipoRCslMHBKd1toMUlLcXBwIj1ZSD5kYlA9bGZpbS9FPTdlL1E2Yls4TjdWdlcrX2VlO2FOfjddZjBWXSpmZnQmUilMNF0kdiQ1VThhc1dEZz17TWA8MUNNUlh9Qnh5bEBqbjxjJjg9O2NlJXNCa04uWDc/bDZqNTg2'@;
put 'bmxeVzJ6cXNLOjlONlFdeSlrdCZ4cVsqdlBYVmVKODgxTCQ1QksvfGk2VywkRXYhOHVbM088OFgmXmUqfDtAfX5DOntAPT5DR25TYThLeil6fXhPOklrTUdPYDtoV00xSm4hYFkrOC5FKmpJbSVUbys7XkBRJit1YUdAVmZRYGF1XX09cXFtZXQufkE5eUU8MnszMHNjSTNzPlNdaHdhTHNAVyx+'@;
put 'VExye0ImS3Y5bjt9MXpAQXA1Y0thamN4WXNxWXNGck9OYGNYO0JHUmFEZSNweCxQMnNwPEx8enRQbFg2OERTNW8qUytMcX5nUU9JM3AjZzshd1Z9VGB6SSNsJFZFaVtdbmp3U0UyRFNEeDA+LmREV05SailGa3dnLm9re34/O3oqa1c4TGd+XVkqIjU1Z2d9XXdRU2taTjpxQXRsayZhX3hGUHI3'@;
put 'XUNkd2M8In1uajdRQEA6UjxiW1VxVVEib1Eiby4mUSttSiMiPXdFK3ojIUNvKl9ZO2U/aTJOeXZgemNGdz4mbjtLVkpOOTVJTzJ1NmxPdGdWKVUiRT5xdUI4KmZMS21eWyJOc0Qse0tqTDxCVXtSWSEmXUNiQS5BNG1aRzlWNHJGdThpXXo2ZmdOU11BQlJCeDBdMlVrUGZTNyU2IlpwJV57czxY'@;
put 'IkhlLjpyQ2F7RnpqSTBRLGhKdVpqaXhKfT5YJDdfKVtxZkRXOCxtUyY5dmYjTnBNTzRudUdpbWF4ITxTRkZ5P0FlSENmY3spdldRZztvdkdkcTNJeWA0bkA0WzA2Z1tzdnxKNUckaEhpaWlQa2lJLDo9ITFkd29aTmYze1tqZzlsKkZUN1RbLD8qMC5McDZkNm0uUyN8S1NAazZXSGdeLGQ0dkZ1'@;
put 'KFV+OXUvfCM8a2JuT3NNQS9OcyNgNjdVVnNtOzU/XnFkZnhPfUVUS0dJbCtKJDhCJTdFVEw7e0IwOEFUZCY1cTNkUztvenU9P2ouNDhUNnNeWzRzUnBMT2YsNXppekF1fFo1fERSSUZyX0hBP2o5Ykd3YlR7ez81V3BhSV8zSjt6e04wa2ZvNzFQNj9nIj0kfXE6bz5zL0ZZZTRSJE9hX3g6Ln41'@;
put 'LCVvN2IyUVFKSWJaMkdKIjVjPWpWRTYzS2trLjBgOFJYQDgkeChqOzYhTWcrWH1kUnosdTZLdSs4Kmt4RlpCfEtYYldFVE5hWCxURnJtJFJKLH1vRjh1Vj55ezUyZ3M7MHtEMSV1QFZjNztucS5JPjJxdyw3UF1CXUc1JUQ0Z35dV0sjWXNTYSQ1eF8wMkwkcl1RPStzKXFifTAyO1BTWXBSb2xE'@;
put 'TjxKfSUvNkRYfk5ISEBxanJyRlVsTHtCSiZgK1ZFRnk0YW1IYGUobXFdd3dJN1JfaGolOGwzfkIudj5Ua0wxQXo4ck9dRmZ0dXVKfmcoLitkYURteGdna04kIn1aXV04MWpnTlJSJG82bCsvbH14SH0+Yis1d0kwZCFbO2FjL2I7Plg5e3N+MTBRSUV8MFkhUyEzL048ZmhqRT9UcktQMCZAQHhZ'@;
put 'QkN+YFBTZ015Q0I6XTglbyRKbl97S0YkS1csW1RqXSM9amR8bHRScEVrbD9IYkRbcyxCbnEwej8vU0NuPW87ZngyQzJYbCVxKkhPIVhwZT0uXW98Pz9jVzh+QGd+YVk3Tjs7cWJdVS9LOndlUExZZXNUdV16MDdsSWZLc2kmeyxuenkuPVd6bGYkTFt9OjJlcTYkN3U2ekZBdmJWRE51VnlSK0FP'@;
put 'P2xMfW14SkpxaXJaYW5pN1JQIXJyLjwqcFkxO1I5I19lT09ta0dEY1pKYD1ycE5ZI1cuW0pJYGspfmtRLDl4aTt2aV5vTDZhfGtWalN6UmRubyxsK3hnOzdCaig0LH5mOCI5eVF4bVNfXUlMTlZqRF5AaFd0aCReb25WS0YjKkN3eCJGSlRAVUxNKVouTTEwdn09TDZ8XTRwfmUkZjtELGNZJSt8'@;
put 'JDVacWp9K082eGM6On5UfkFYNi9Yc3AjSU9BTlZMYyhKeFZTUz9JPVZPeCtmdFIhJixten5ia1BeVFI+flV3PjxjL21ZN3lVc0ZMRlF3K0NqSU1nNGh+K2V9UExgNF12alpZMjI8PjRFaihKWV9aVk4wdz1CYSpDVlE1ZjFqYj8xLz98Q2RNa1tXdWRLQWVaYDBRQlZUfFVvaUo1R15CMklEOSZA'@;
put 'QD1yLHBffXN3SXM+I24rUi9TbFNqeyNTJkk7RHNudnZxfm1xQzp1PjxFOCtjNkZpTylBajB4SSRWPiZ1Rzc7Q3V7eld6NjwkUzRJLC8sbWEyTzUvLEhmbV1jZT1yRz1LUXhre1l2NENOYkE1andbZ0doJE9PUXEuaSglOWdYcEZtT0dTNEd2OCRLYGNASEFZMk1BTzpzSm83Yi5ASD4razM6a2N0'@;
put 'YSN7KHVQRnV1SjJ2NCMqS2p7dyhFYCNqcWVgM3wqT25Td1ZMZSg+QGVOPn1lKXQxUDhnfDRUN0ZkZTlNS3M5fHd+aCFiSTkkYSQiWkpnbV1uQERtX0RdOHArMEM4VT4lNlRKUnpCSXk7S1Q/YlQ8ITA/SlNmVjBZe1cuKz9kP09PVX5yJWAiSWVDR1dyVUhmbT46cU1EZXhORGBiQ1kkPXg8LkFu'@;
put 'YD1hZyhIRXlVWHclK0o7LkI3PllaXU5HQjA6Wm53WCg+SmJEfW88PVd3fm8yVXVYcmNbaCRgVytsI3VDI1ZQaExgTT8sKWQzQVomNCxkMU57OWw6NVJJUjBESWM1PC54PTFGL103K0VHaWgsbHxwPDJUa2UxcFtwd3JkMSIrUHxNQXRrR0pQL1IhaHRDWDglNnFXLDdbPG9aWHNyVWhNMWAoZXxH'@;
put 'S1h+cFgldzNlVyw5Jm9JUXE4LlY/ZGhIOUEua09ZYzhwYGhpS1NDNDBsKkIzYUJaYHppanMkZHAwfnMjZEFsWUY/LGldUmF7XWFHKDx0ZyFeRUxDbWRHMnEsSTpFKEJgInVlQkVPJFcoMHVFbFZjOUwwLl5PZkk0S0BQY0BISTl+emo+XjN0dXwzcGAkRnZYMzRoJElKd1JLdjZIZXdQIUksWTIy'@;
put 'cjVIRC9BOyJJOkFySmU8eWFlfVhlcGhFbGp4fCIyUGtwYVhvOU89Myg/REhWOS42Jn5qfSZYRFsscUs+Y1ZDPyp9Mnc9OjJQUE14Ul5uWDFsXkIiWkdAaThxdDpJfVZEYCMxYTZlSWFgS1I7WyJ2NW5JJkI0TlQySkdNT2paKV1sd20hOk4xfUF8L1gxP0V0QjhSXXI2ZE04aEVzaXdnRFRaJHw8'@;
put 'K0JFJCpLeTU1c1BWOStZOjdDMntXVl9JaTM/XjN3REFTR1Z5S0R7TEZQdFdkdmB9RikqQWdUUH5+RjhpSV10YHksYTd1ZyEsQXwsMkxSL1A9MEUjNDswcS9Qdzd3O2lNeFFbKWkxeHhJfVo2MCNUZ21tPlhJUld6ZEw/KCp0VXRIU2pGTltudS5MWCo0JmRNdXl9emZhd3csQWB4VzszU05Oa3NJ'@;
put 'cikrUHBNXmNOMWdKNT1YdTIhRTZEc007MUtGJikzcTtDZDMmRXBAa3BtUlZRe3hmNCFuKzlMeXI6XkhpSURqWmBWdTgobn1ZblhyVnpMPmg5c2xvJiJxdkReQ2k0fGxvWTYrOixrP2hieT4pSy9XWiE0XT5kPCgvTHMqaW8rP3lFKl5OMiEhVytRNHBiVSt0Y009R0B3ZVN1SCE+fkdAV3opWi9D'@;
put 'XTZtNHokaiVBIUk7JTBhcThQZzdEdSl7eW9gdlkrJV4yQ0trWypGPDQ5TE1bSFpOVXlLX3UlOXA+alBJXl1xOiw/ckdlLmhnYUVZbzpLRCg7TCNiT0tHa3xuIiNPT3Q7YVsiKEc3Sz09KlhKMEZ6fllCPWFYJk1BMnA9JDFGaXdoOTZGLGpAUmlnZndDWkQyTj4sRCFyRyxheE5fV18reXc7Kz8v'@;
put 'aWhXYVZYOzM0K31lZEhlPkgoVzskfWwwLnBwTmhbdm9vSU4vRlBFLE02O3Q4JmllQkxRJjxddjQvaztzPmVtKj5bMHJAOG5WYmlGIXI6VH0mQDZwQy5CY30+QnNoUDdNMCorTjYpZFY1VlF6T0UmWHEwaWA4S3w4ekdVd2lbWi9oeE5NMTEiaE5bcjpoYGZIQypXNVtYTEBSU2VeYyo0NDVqdElT'@;
put 'bWFSTXttZDdxOWdYS0JfPz9Oc1RYS2xITnM6KzNTdDF7Uz1MWFdWSzZaQ0h1Wj9fQk1OeT88KVoqRV1dVX0ifiI4X3YlMzBlLiZ1bWV4OW4/MyVyJC5ra1ZOenBvS0tLQzg8Vmk0Jn1JP0Q0aGV3bnxFKFVTZ3lPPVo1YlYla2ptQ159dHFKMV5YMVh2UCFNYVIrJFFWRnMpS20xKV1EcCRiXlpp'@;
put 'TEgsMmhjVkAoU25YUWkzNENwMEpeXkJ0emx9dVlPdiEiOV4raGNjWWt1P3VZT35nUVtIYWc6cypzYWE8O3d0eyU/WGs9fTEqbS9wc3tLSTEvImdHKkNHSE48UElBcGFkfjlJNCh0YDQ0d3ROcHF0SjlEQCNmbHFXe3UpRWNbUEM5c3Rgem5fZW5MRUxPbzdSPTg8YzxYLl5zX3k3ai5oaEdMMilx'@;
put 'OFlaZXkrYEVPTVd7bVVkZD5kR1VQaC4oK3toc3AlciJlKyE8USFPNEk0KHQhWWtBc3BOJVVMczp3XXIwXVsmKW1GfE53TXxbcFZkM2g5M2xzK3pDOF5nZnhLPkNiMTdpUy8zJVg2eEFgUzlRYGByL2JKX0R3ezVHQkl9SzhaZV0pdFp0Rng6WGtJX007K1ckZHN3MStlKitLdFMrQ3ReM2EsKGJA'@;
put 'KS99eHNMN0ZsT003ZWUiJX10RyFnZkNgWiw/TnZrTTBDZSY/OyspU2djSz1DTVo5Sn1ySkcvdVNfaX1oTyxoY2VhcThjN0JHfXpJWmJPMXFbNkFGNChkY3k/R2A8LkBWMHVaellHSFo+Z1RSX05pSC9AUE1qTW18UWAhOzsuIzhiVnVNMS5PPmhHP3JFcyh8NmlXTXtLd0JFbUNiQylbSFpVKT1g'@;
put 'OXRtZjw0VntNUitdSzUzI01nKWFVbmpxeVRqZU0/Iko4O3JmNjZLQU1eKkNKR3p9VFNSUjNOaWtpOX5NMDJJYTY6OmlHUmkvRzAhP2FSd0NpTUtmfE0weWE0N1MmaHooUjFaYyt8QzcsPE42fSV+cThwanBVbVljLGwxYCE9MExJY2l6cCM4NTkrP28kPkBgYDR4JHFXIyhxbnBCPkByInA2MXAs'@;
put 'X092WXkxbig8cVhtMEZXZztwYiFDUiVpNSFQcUZUUThTUjZ2TG1AMlMmXmFvc01QM1IsMUhveD9GTng/JjIiTXZpZ3lPeD1ab3pZd0J3UCtfWTUqdWBpT296anRKamFNdiUjMzhZJnVoKUQ1LilPZWBJUjxpeEoyQ3JeRzQlLDFCZW1dK2MwcHBvXXkxI2A2ZVg/QzUsSnVdJE9qdCUwKjwqZUN8'@;
put 'PDF0eXhpVl1mP01BbUQhQlU6Zi9eKzI9YygxfFtDM3YreFJETTd9LmksNUM7dGdvZHJOS3hYMywsKkteNnVsV0dZJD15I106Z3hAcj0+NUdLXk9FN0RrXm4xVXFJa3hSSXhNPzFROkksS2FdLHNgNWIiLHVgd35GbmVNa2RfSU1xS3Z+USRxdiU6P3ptaWlIUTg7Sj52XUBQREQvMV4/N2FAa083'@;
put 'eW0jTXZUdU1VYnsxREt+Lk5fMnx6SXd5eSFfTi45TShLfEg7cTtSclFUL0pIWmhLKi5QRTckPXExYDNsKXY1Zl9WSVdINHJkNDR+bWFae0x0MzxwOzQ2c0lyTyEpbSg9eD4qTF1ob2BGIUM3LnxRbl1geklELzdoRS8sSFp9c1leRWlycXJfVkMvVkxbOlo+bz0pak9bI10ifStyNVZYczQmNjpD'@;
put 'KFZyaUtJLHA5L1l5NXFycGkkLzVLcE5gZiRDKzljZVBdTmFfSEMrT25QSFU5djBjaVdEJjNZJnYvI0RDNjo7JVVwUVU3QS4pVXs7eUcmRCldSHMkYEJ0JmA1SU4xeURbflVVJksoV0NISj43I1JYVmBAIjwsbitDLz8+WW5YcipGRmN6N19RVWBiWCZTbyl6OHYocXx5SW0qWE49bnFnJWksSWRq'@;
put 'W15Ben0ubWFyPkxKdktwPmNfJi5RM3V9VGRULm5WXlskeyEmLnNeVHlKYWJSZlRHUk1TZXZDbXIvdUsvSj0+eF1ffXBETWI1fVlkT1JWS1EuXW42WiohfSx0ITJyXlVoe287KE9LPlsqdklITkw9UVNrNUVVaGZYVFI+MG9hbGp8KDchPTBeb0FUJUhfQ2tUQmlKMHI6VFU8e3I6N2NgYCovQVpC'@;
put 'YzYoOjFYMkhndGViS3lRQl1oZi8yaUd9alkwfGBteVIoVjI4Vmk7V0c7USZZS3MsYFQrLyM1aUpAbThNSyNvZ2QrJkt8ckJZOUxPMlFXc3VSbjgjT0V2ZyosdmBbe2sxPjRiLDRGXjVnWyw+UWlQQH0jSkkvWWsmRyN3XXYjaWU+eypBYWMqe11NMVdkTFtHcmM/THwoe1VJdmRnZl5LPFt3W3pk'@;
put 'fmAsIVs1LE1Sei8ufXh1JVhHPWN+bj0/d2hnZkNaPXtoUW81Jm9OPy9ZYT1remNteH0zWiN6PU1tLnwwKkc2Sz49cylRdE4oaF5YVDFCaXBXTmExNSx7MFQ6MlQvU1E4N2wrWkJwamE5bCo/NlImOixgQERkNHI0WTRAY2BYc01rWHNfMVIibFo0QihfPzljJmVOaDpzfHJBfl9TaTwic3VFZHE/'@;
put 'YFQoaCIxNG8+JXd6X3tse29xJSJHRXtDe01KYTV3fjNwbzx8cVlLU19fVkBEc0pgIkt+OjYjalkuYzJOd3khWGk2ViI8I3VMdWBAdlA3dV13M0tUSSwjeEhNZXttVDBpKSYpP1IxUD07SX1QQjJIWyVPJn5VTDohVk5GZlIiKG5OWn1eQnV8U3NgMlNbbzhqeTxObHZhR0hmUWBaaWBKbWtlalE7'@;
put 'MzBvPCo3YUlBaXQpeUVUUmQ0MnMzaUBCJml8NCtXK2VgTWp1KitUVUVxaysvI28sUSZLfV49bUFlfFtIUk9kKyJla0VEUUJ2UWtAd2s3MXE+VFgpV25iM2s4RlVEaFdWWHF9THdDTVA9MlV0P09yUi4lcXt2TVl7SkVeQSxoO2lLU0MrTiJlLjZRS0FXJUQ5L0FDWFNlJDRKVSt3e0Z0dlQ3PUkq'@;
put 'Jk5zejhdUXVXR1pUSTV6OWNLdCpUYFF9OXUsTlJmSFlBQipLUlVAP31QPXMzOnRPcUM8a200Y2NvJSZwOD0wWy9mYXY5N1pKXyJvN3AySVtFfmxXXW9+VEJ0SmExOG9QQz18SHxAaFVSfShMKn5NNF8iUVFwIU9tIk9TMmlxPGBZcjgiLFhdXkIiYnlIdTkiIVA3VVJwKXRnTWZbfTQ6VUBKPzxG'@;
put 'c1lgdVkwcFBnTHhFRTlpfU9dblsvfTFFTj5KX29MTnAhU2JKKEVqTD82OmwjSVMoXUVTVVUlSXFXenFrWCRQKWpyYiRoLiNEO2xmSVhLfSQ6KUx2Vm9ofSxlKStwTl85W3NULlNdXT1ralk8cSVrKndZNixmYTslXSF9P3Y1Q315O0pYNkpkJFR1Qy5gISJLYEAraUE6RnVDQHNnfiRfbl81bms8'@;
put 'c09TUmh9fCJseCFQMCRQTVA4LDg1ZGk/enRCQ2BOemtjTFJKYG8hVChCQjgsSW9zSlNTKmxuLDIvMXxEPHtJOmpMRllMRGs5I3k0OWZjZmVeQWEpSEE8KjNNe0wsY2RPbiU/IipFJHRRXjltV3Fvb1Y8c2AyUyQwSENYQEAmfSJnSyJfNHsqYl1NPV9ZLyN6ZDNoOTYuQ2FNfiIoM147KC9Sdi4r'@;
put 'dG1obXtDbXNTWEE/W0QyYCwlSy5weUROVWd7elY1S0MvKnl3X0owMDZEQFVWPjZKXjImSHZJRlVoLDE0TFVFPG8oZ0x8SWxEd1NhX0o8KCldL1VsOzA1RFkwP05bcXE9KT1bQCU4b11vI1dyPSRXciZwJSZZeT1ePyVvJF4lYHBEamx7bEhkR0lHNSs/bDxwc1QjL2lyQj1XYFpJellJMzhPNV5J'@;
put 'YkErMElgUVhAQSNgYDVET016czpZP2VBcjdhQikxP1RtRUcmYGZPPndFK3xFU1ZVUjdxdk9jQyEsciRWbUhMd3dydFh8WjRESE1AYk42ZSt1RSJhO21QUjlOenc5QSlqTnBxb1kxVnhWaywqSGFzPUl1bzV0emVHO0U8Vk0lQHVNaXE+N3tDOC9OXylTIj06Z1JudTlFUERlfmorcCRsfT83L1VC'@;
put 'Q0xtTElXSnk8S3xWRmJHYz1JPWBJXV5AU3svbTo/byR8OlAvVSVjKypIYHEualt3cVZ5VUElIj9bbjNkNTJTejIxYTtdPTxtYkA2byRzW3BLPn5PVXsmXiFuP2BiLi4kbXJOMUVOLHQ7NGpSWHFdKG0vVWROWismcERjW2tGVnNARW0oLzpmWzA+a2xsUV5AbXQ5X1BbdXtJRCtZXTY+JU4mTi8y'@;
put 'bFlkOjcjSDldVTVoYUloUl4yKXZSLEIiXzoiO1IjKXo3ZWNIKGNaMndSTD8ob34mQl96P106Oz9nd0VPeDRKYjxDbUZVWTo4aHJRYkRoLlpVLF9AS2pNLGk+XzBWWXFQa09GWjtdZGxpK0RZWlU1cWQwaXZnNSwoLkQ4ajNhS0BRXyU6KSxQRF8hcTo/TVQxMUxWe3lZJDAqJmVjUj0maHVaXmRR'@;
put 'eGwzb3VwfVMuW0dYY3MzfjJPfUM2VWk4I0d2OEQvZkYjMTRudXYsb1ZALHE0OVlsQ0JXU2JLWCxWWnwoPT5gbig4Iih4KGQ1X2AxX3g+eGwmN3t7WW5CPUFxZ3lBc0tLXkZDMkpgPFlTU3RsfG0yMD0vPSNrUndPfCk3fF5vdFV4dTFAeHBCZjcsanhkMW12OnZHYCk6fSEmeyZqPyFUJCVrMWVP'@;
put 'YV1dV2ZZclI8eWw8PV8/Z0xgQyRqPThrYWBSO1IkLnY0Sl5AQFdQO1RjZWpLImFHdl9yZil5NlYxezZUSnFCXzYrQGI3V1U9ZSFQOWRdNW5UbjJzb0JNb3E4Nz9wZ28lOnpOeW08MX0lWTMyIVo8Jk9uXTg3WGteUEElXWhiPF9zZVlJK11GZGt1c1dUQDYqeFVwbyp4PnMwfm4hJXlRRCk9TEBw'@;
put 'fHFjPXgqclpFQzYuYG5tUDBRNHB1UiNKQnFBJVdGI09RenV8Tm1vY3tDVjFHaEBqaiZdMHV7aVc7WkpaM2xwLDk9KnNqYklOemlwLGdVW3o3Kkt7NC9qQWVPTUltaTptdyFBKXtAT1MxanB+Q18oT3JSbnd8S2w7Kn0mTTBWaz09eE98ZiptKXRUdEklMVA/ImhXd2U4e1tVVTxedHlCJX1WKiM0'@;
put 'U3ZHemkwVEtPWyIhdCohbE1gWHg1alZ7JmA6UmNkRiwkOl81VGNpayZPS0UvSCQuNmAsRF1Ze15KTkcmX1J4N2MrPmNzOkojX11JblZBbVkjYSw7cSx9QDlVQjZoI0hYOS8rUEg1LEd3fjt1a2pQYm5KVns1fFQhVm1ae3UjMlkyIWgkYSMoZXE0Wl4haEIlSHRSL3Vsd2NmX19lTTVPMU9wQ1lK'@;
put 'JFgkaC5FOVFqKnQ9dD50KUhbQm8+ayVHS3ZFMUxJbCwzOnYvKyRDKFdpREBZVW8jUV44LzghNm4pNUJUfFE/SFNPLmtrPXlgSD9kREQ8dDQqUmo4e2tHNGMvMDFdYnJ9P1hGeXdbc2B0SH09ND1UXndfdytWVjRCZDp8aEZ9YUQ4ZSJwKCU8Y1txSjovUH14aklxezU4d1VOXitLWVNMPV8/Mm0l'@;
put 'VFRfWCJ5Yzw3YHhlfCJoIyhfSUQ4THU4PEhMcDhJXjVMb0ZRUFMscWZrRShYTEtgRlh2MmJ9TnxVKERxWW95O14hM1Jnc2YreHlIRlEiVyxlY19ZZUBEIj9ocVQrRD53WTcrWCZlbnVLSkgibkxTcFtiMXdoMCtzfSVqOnUsU0kocCxWUS49bWEoISl8JXZ6UXVvIjloZmlbUHRwanVrV1ReJVVo'@;
put 'fVtVT0xqSF9tIUIpPEs9ek8hWX14XmMoMS54Xzg7RXVvenomNjczJWVycSRBJkFhRD5pSEtjWihKYil3Z1ZqfnVNdCFtVTFXSGlkTHNQQXo3KlFDNDVoN30kdWZuNmtGelF4UTwsTUxDaGpnW2hAP05+IWRpQyY9XjxlWVV3KWVYVTtlYztQayIlel12PXI6PzM4N2BwcTJaakRSJDZLLkNJa316'@;
put 'el59JHhPeEZFIUhUPlY7VmA6KWpyLlJ1VXw1KlE1eFFzQTZTOzhnNzFRbkhTdG1WP3AsYTs0eV82MW0xe0I8Imh5JGg2dSQ+OUNmUiE8Sz5CYWMjOG9qb2BCciZ9KFZEQjUvR3xMdDExQSZCYnhKLChfbyozZH1qZm1nfllSWUF+RllETiR6aSR7NndWR0pXcCRjNnB1WmpQcGQ1PS5VZUU0ZzYl'@;
put 'JXs8cXxfTytWeEZRTllJNUtvWms7L0UlP1dVXV48XzMhaGxDS19XWyZ1M11gPDkrOVM0IyFYYTVeQCZnX2xaVGs8P2pWL2Z0YShYM0dMYEttMT0+IltPOnMlUmJjQjl6WnY4LEFSZmw1Iz9JOEIlMlJIdW9qKT1qdS9KWH48WF1BaCgxeVlGXz9qV2FNUkQ4NXYqSCg9cVs/SHJvOGVbY0wsc0Q3'@;
put 'd2ZpVDNCfSo2YzEiW3BabGtZPSFPOnhFcFNmO0xQUlZYbG1ALyMmRTppOWZ4M2lkKTh0WygrY2l4NWckODFOS1FBay5ne0FzLEVkXn4yLFkxXmo2dT9qYz1oQ0B5JlBLUGJXQ0IoQFpNNDF1OTJNLiQuOzk5Im42OzllfioiP0A9JlQiaXhOQUA1dFt1TnJqOUx1NFQjOW9LQWJCPjNCfV1nS01q'@;
put 'fllZfWJ2YDE0Vm9wS0J2OFkwOytjYSY5YkA4Zm18T3cqeyg7RWooZzxFM215XlM9QEhDPFssPFIwJURvTEByWzc3LkB1YE8xTEhBejo6eXJBPlB2cFgoXkR7NT9wSF8uIXA4SzYzQi9kUnxKMiZXX1ZpcitVJXQ6bihqalBFLHlub0gmdnVfSnxMcXJ2JTt9diMzaUYrOUwmaiVYRDpgXitlTz9X'@;
put 'Kn0qQ0BbP35pPmJVQmBdOGA1NnIrYikub10mNnM8XVNBMTQ8Zl1jczB3IXNQeVs4PVl+VCFzeWZvPUk0cHcvSDZtJllpWUleITZ3KFN4PnBmXiE/MG4mR3FCPERvKmc3Myl4JWhqYiNlLjk+bk0+MHBwOV4sT09CTkU9RT41QVYlfFlwdSg5RyFdTTo3PEglRCRFclRdT1YpQ0RyIkA4Q1FTYThH'@;
put 'PVNWQG4yWSpLdDByNFZ0M3ZsS3JKPGszK1VpWSsmQTFgUHFdOkFhXzEpSiMpJWtpamVWUjNPTCEmZEE+OUxTcjgpfjE/WjA1bmN4PmxMPnFFcUw/UDBDUUg2MjpAY3tFQEBtVjdMbSh+UjNCXkIjZjBtYS5JKXouQWdaOT11eyRdSn1yUCNpaT9te2c7Xy9INzU0L11wOVFxa2xdXSo5Y1s4TSsx'@;
put 'Z2FWbD8qTXB2QHh6dkpDRm52P149dVVuNktDPWNxRlljW3g+VEVJMHU7QntQVG1zPWppYFQzejsyQlRUJkxGfE1JYVlRdklTY34saCheWDJZLGVeKy5GTCR9U019X2kxJEQkeHFSYyV+S01jY2BEZXx+REgoZ34wQWwqIUdbcHlGTVoyPXEuK1d1aUskJjd2Unw5LHxwcz9mUjkkKjRVfV5MKlkk'@;
put 'cHtIajRXVyt4RHpYenl4P2tmTSE8T0Y8OVNGKGJ7ZUZNWjNGQ0QiYVdoT3JXTXMlXSF8PT5WUGZDe25mKC4xLHYpVlhxUSxNQF8rcE5mSVc9cyVWVFt9MzUmJFFGVygufFtZP2xacHt9RGFYeWl6XkJ2NzQ3VXxlTiM5bWZAOnNFVU9pTnMxfjF+MXszfktMPyk2XVsqUlJ3KnZ3IXBbKVFDOUtK'@;
put 'YDs8cG97PVd9Tn4hcDt+c3Z8PGxieSlnaWFySnZiXllGeGVFdE4jNE58KnxLPU15fVZrNFFEe3M5NjgiS1NSe1QkYi5faU1YPmclTmlXTjcqcjlZV28oV1ZsSl1EfiM6Ql47PGVYITdPIiVjRShvIkF8P0s8THFbeTtWL2Z+bF9JQnZ3MER6PjZRWWJ0PjZhSXA/dnpPRDpJVUNKWG8hfSFaKFp9'@;
put 'JEBUQi9Eckt3cjFaQFl3KGVMNGQwPmM8bTV7dS9Se3VURTRHfHRHdG47LGtOYzRNcV9SIVBvTTcyUmllP09KVmR6VTt9cXh2T01lanBRIUUxcE58Vl5RKzRkJURaKn5rIy9MYUM9TDglRyJLNjFgO2xhUVR8Wz4/OS4sOSxMdUNbdztpM1tkU185bzlQfSN6dyxANmJkVGlXUnMvd2FRVCZRR3M1'@;
put 'ZGNGPTBXWztqRU01VEV7NVYhJVFOIUlHTGRZOCsyNFoiWXJePWYiQn43eEYyQFc8LlFmT051Lj1Kb19nbTZ7YmozWzY7MHpRVEY9N3hMVi4wOEQ1UlFJaDpeRih+WVNrZ29WOF5UZGlBaEQ7Ynl1VFhLWmphQ20veGxKQ0VNRU9FLkdwTUosPz1sWWdzeWl3RXJYW2ZWNXdOV18iODJkW00laDIx'@;
put 'KmwiKX52KmhFQ1UqdjJ9VVo0dTNqQlMxdGlKLj9ERmc3WT8vcj40IW1lTykuZDZWU2tBeUdoZHxnSkIiL0xaMzdhWEtxXz0hSEl0eVs/fV9WJCpKLyhsWX5JT3o1Lkg5V1EqU0dJKn14fGZwYF9dP2ZwTUo/UUNMR1Y8UVNrPT5gXl8/I18jUjdKV25te2B7Jmk0UU5oWnBSZ3xuflRvUC4oczxQ'@;
put 'alp4a2kuVCwldnxxa3kyTXZ7cDFJWCUrPTY9R3BAKjpTSmgvVTd7RDkyYDZ9dVBESntuQlJOWkcxbHI2Rlp3anEuKiFsTT47Vi9IXVY9Jmp6cjkvejM1MmBEVkI5OHRedWU5SlBJKGtYTXNhRHlxUTppI15PaDMxIWJQJEBNc2A1cjg1SWR9Vi4wOHtuLmBZcDxDWn1KeFh7XT96fioqekd8ZUZK'@;
put 'SUcwdDY1Wnp+JFEmJHsuKllWKCR3dUo6WjFeakR6VDB6czEpTVo0fHF1PiooazAzKDcwWUN7cC9DITkkT21OYUswMnRNVF1BPUI9ZT14SztzUDguRV50Qm1PPHU+X2YjI0R0QmoiO1ZrUkZ3X1EpJWwjfDpGInd7KzB6YTI2ai4+dnRUUTtFPGBfQ2hYUntwZT5YYlBEcXtHaS5KdmtMOSNQRThH'@;
put 'OlcoN0Y5e296YHB4PVA2c3QkLGFQQGcpdj98fktaVHxJPWhLMjkpSnh0fGg3YzROaEBqQXJVPnlxWEdrOkQmRSRkZyhDUyMkRDdiJC5+JUo6TGZVPFghOlNBPmhteDFmK1NDRCgsa0ohS107KXBSajNoSTk5R3BEPHJWRlsxbXkvL0k3bHJtTXh9SStVLEhHZ04hOXZ7cE8yTl1EKXkpVC5DKyVt'@;
put 'YjYhOEY0KC9YIXl6LEhQJX0kYDErSXRtemhIeWRqLE5MeXZxd0pwNUNdVzM/JVg8QWdmfnNQQ15hcUh8QHQ1JCRsQHJiZ1hLcV8jUipPRTdZXSswdXBmc35jeyZBKDkwZGorJD9dLD0uKWU6MkZDNF45JGs7OGtZYzBkMTRKWDp7ZyNQP2FyOGZxemk+d3dNfXI7anU2NmNxJVo1dnQqdn5nNzFu'@;
put 'e3BAY3l2YUIpJD5rY2hLZHt2Xksvc1pVfnNaK1deTmlaV2dBaXs+KWA5KT5UX2xSflhwYjVqQl8qKkh7fDZeX0Q8VWl8ayxBXX5vYyNGcX1UYiljR0gqeT02cHAodXwzbE5lNVpPVlRyV0VNO2N9ZEQrJU58cmJtQ1opV0E2cn4qeCNXfHZySFk9KGVKOWp3X0RxUk1gPnpEdVNoZ3tHPSJHPF9L'@;
put 'dm1rc0ZHYVY1YDBXSE9XK0RJI1F3K2c1a2ZIW2VKcWNrREkwcSs7T28wMTE+cCpEYjE0c0l5XXVeRj4rWyk7Yks9W04/QDxoZD9CcGZJVUJXOyUodHQ9SSgwcEQlPjlsMDl0aXBvaSZSS2kmfnZzREY7QD9bJkRkPDoqYEU7JFVQel52Vi54b1giJUVDRTskRmh2YjgoVkVjWFYvR3suaSlTKldP'@;
put 'LjtheVopfnU6Uy5GQDlAUmw1UHFuVD5LLmFCb35HK3lgNz1fW3ozdFBwLzV+R2U6Oy5jc2tBISZpTTtWLExbSF1scGkrclVBUVdJaDJaYUt3bFN4JiYwVD5KbDV8YTJ7VSklJVIyKi9SPzYkOHBzfEdSRzNJXlpeN0w0SjxUbWlzPUY9eUJAMG1YRTA5QWNKWkRrcHdvVUZ6Pkk3PVc8SyskOkZb'@;
put 'Qio+R0hbY2Q4bF9QRiQ+amA4QCN0Oz48YUF1e2RpQ3RfRjF+QUFDIm1GJEZ3IzU6PDBvLCVqL0xvM3RsOGo6Q1NMUUslYz0rODBGMDJCbVsxNWl5JUNLY1kmcmVfViNjTVZPQU9BIkdvX2dxKnJgaldDVzdlSkpddiZbZkNMMm9NcCUmbEYlJllzQEBtbyg8MnBOXTdTK2V6SH1WXkpWLn1rZW5z'@;
put 'NDtxYyRPdUQwMDlQZS5nb2NkdDxFQV4hKCo3M2U0eFRKOjUjbGohbVF4KTd2U1J3L3VJVmc3aDF0OW9Oc2Bwfl5WbkMpdGBHaT8hbmZELzxZJHA+azx4NSxnfSZrPEsjPDRsPz92aGBMUVNpR2g6e0VWYDZtU0VrbUFeUWglS3dLckpkU0FhNWVBJmpJIjdqOjloQEVrU0BpbzZ0PVdoNWVoUyNq'@;
put 'QiYoMFJRSFQ0K19nNj19YCJ7KCtseH0vRHU6QHExM0VLRz53LGA7Z0JWMCl+JWoxMVhZKmc2MllBJmwvYy5yfE1JQjVpcnlaellfPHxdUE5RVE9OWyRseTthZ3Z0bSxCXSp9PC9pbUc2SkhDPi5vbyU5RDwyK2lYW1dfdTFdQSooKighdy9kYiZoeWBHZitxYldCb0JVMGV7M0doOipDI2RTZndp'@;
put 'PFRtPGhTaW4/QD0jXU1HUEZiMCEqKGlHW0kpa1IsSzc3bnBqUDJWN3Y7TXRLJTsmcWozQV4sWk0/Y21VL3FXRlZwZnBpSFs5X1I3X2BsLzJTOkh+ZDZnJl8jKChOTXRbdGB9bjpLM2xUU2NQYlteMEs1dlJGazhFPyJbN15ePXB9Y21LdWwyb1FoeXY0LjsxeH0kKz1TKnh+cWhscXkvNjlAKkFA'@;
put 'dCp4UmVoTl1BQGshXlU1LDQpTzQ4X2dQX0QzWTUsaFlQLltnWWRDRyt5XnswSW16Q2MjLGI1LjxhW0h4VTZnMX4jdDtdSS86ezloKF41TWQkLEtUQ1MkLkN2fnAzP0N9KkpOM3N7IndFKyRRQDZLOXw0bXAuY0MrRDg7OExxbzhyS0o5MGNqdyhALGpMK0RAWiU1L045PChFYDZneXNbbEd1Xyk6'@;
put 'P090IW0udk1afnNkfiZsWyYmVGA5bkRhTH5oYilsY14va3hAZ0NALiZaMmwxTjp4RVomKCx4JUF+ITMybUhFXmMxMHRpdTdqM11TJnd6e1FPSzsidlYkfncoez5FYTsmJUdRV3JeL3VsLzxNO2E8bEhIWGZ0I3RQUzFeIV9OXnFnRl47TWQ5dkpdd187JFhOc1Y8QSomVUEmfnd9IypVdjE4NXok'@;
put 'LCt9ZX1ePmc3X0ltNykxMVRzZyVUfUJqRWxUdixYW3lNflMrOk5+PyEkNEdRO246aTxKWEtkTj0lJld6Sj11aFQkMUV4X1VBcXBHXlZsfH5KbGx0ZjVqcjQpcl55VFBjV2x5VTdRQ1I3UWY7XXApSHtWUXh3dlZASW4lJnhWSTx4Iiw/XUc1PnpyK0V6USFwcGA4WXFJRGAhOHJlMm0mVUsqejRO'@;
put 'dFU+PTBvcGAyTT9fd35NdSoqSCI0IWhnQHxTQi9+PUBtbFNvKlVnbT0mITpSOXtUZCxxOlRFYWBVUiZzSD5Mfn1fbDpzXylCVXQ/ampJRTgsYyRzVEAmPVFROV9uZ2pMdzZZRjwrTjolYzl5byl8OUs5WXVJdl1HRXpRTVIvPSF+YFU/alhGeWVDPCN9dGtiRUsuNGFdL3ReXiU8Kzwle2dSUyRi'@;
put 'SjU/TnZaNFVFJGtteEddYGBfaCZtQ0siUkZEOHk3T2Z5c0lAcT8wNzApcD5AekldYjs3ZXUlKmxHWj45VWhpcD9mTEB1UipLcD9ONGVKWXpyZCF0WnolQ0kmNTZaMV9AWD4lbXJ9RnhnTVhtKWJIfF9VZzVAclhRNVdIKU5dTDVOK14pMkYkKn5lQShEMX18SlRfYCJocVlMOCNQQGVbKyJ9IUUu'@;
put 'TTNnOz9MVUgxRGtXfVRkfF8uKEJvKiJGQUp5IiQ5UlJMfmhVSj0uN3Y7OnRlWSZ9M2c3Ljt9VlMmPT5FP3RgKjF+SWY3IiRRbzNTY0dyKzloLE4wUVQpUmxHQCxWND0yX31wV0tqfnBCdmc/KGV1bHhFRileUEFjOENGTUtAI3EpIT5QdWtPeUksOHFFRyxhW2dHUjBGPDM4MUtxb2VPMDs4WXhH'@;
put 'enF1UlFLPFRRK3NGQSh0KV93cCVQZSEqOGJwOmpLOVg7TFQ1X2AxIyVrTEhpKEMiTit9cGMkR0BxaSteUXRTeXNLa3tuU2BOMjs8KmFePEVTaFI6eHFLTFd9IzowUDM4Rj9zRWA0MDY8YWI+TzE0aXRvXTVkOWM6XSFFQCtxRi4qckFTRGBldD11dWdYUXZVTVN2OE9QK2tlLjJDSj80O0p1bmcu'@;
put 'TTB+QTp3XzopXVNARWp+bkRiOkwoMW1MLlQyajR6PlZqaTM9bFomd3s0bVFLUC5CfXwjbk0jK286O2NNZFRiTH51fUhsbHJTQ207dHA0U1YlOUtsV3tMWTkoKlpZYS58Q0lzQ0BGSnxbLCpwO3AvVEtTWExMNmNbRnlSOzcjR2pKVmJNeEJvaGFIQUQ4L2Q5dFN5XSQ3aWRwImdqN0xbfDpNPnlM'@;
put 'Vmp2fGFUcWZ+Wmp+TTFXMyZQQ3VpPixEfkRhWEhlJjZQOnw5I2JZeG97WCskcFdedFFLamB5RSVDeUd6cDdHUGUuYFE7P0wuTkMrNU1bSFtuZ01oRkBZNnA+VEtsV140dXZ4eEZbWT8wRWJYNjpKWytxPV51bDgyWyxnZUIzVVdCbzFJI3d2fEZ5aGVZJjNLZ0ZGVnh7QCZoenRxMVkjXzlJPzZx'@;
put 'UVFtMnJxeHZZeiRpdWJGYiVdPnc0Tnp2M09JaysudTEzYUYwWlBsdFIrSThuIW5Lfkoua2BPeDIvQWQrPmtSITFSQ3NCKVdgRkEhPDtXfSRSOU8uSjw0ZDh7PGU9LE93TCxxWVRsV0NgR0d+O203QmxGOz4kcEc0aHMrRCt2QyFtPWhtQnZGSHk6TDQ9VWZ4TFAydTssP2pEXitzUC5CYnh1Q19y'@;
put 'K3hGRV1eOz9ZJVNwdkl0JktvdHs/fWB3RXUzdTQ1c1AwUSUyQX5oSmBUMzFHYn1HUFp4U2JVd2EufCpVRUB2Wn5vcXxVeVB+Y1lINUFoJTlaKSFKLmc6SCZpMj8weiwiUXZ7WXNNT0JHQXB1TnhpKnFUSmFCaiFTREU0ZDVGWy5RekVpdC8yU10jXjJ1QTAmLmFURVkzI2hnTl4qdTleWC5wZywu'@;
put 'I1d6fHxtTjYvXVtsJF8kK2A2WUVxfV5hLn4lYihjaG81U0IiYjl7VTFsRDRKOHhBXmM5aFdMUlBAbEJaWHt1VXY3QD9oR3JYXTJxYiQreEk9MUpzOipLNSteUVhdQGIrclsqN3dudEw8KzJGeXtgPUx8TkFXRSQhZ11oTSpBeUY2b1RkUTlwKnZSLitlN3hvWVJgNjg4L2pHNHZ4fXw2P3leOyRx'@;
put 'NGc4LEU3UCFJKGdHYC5BOnFYUl4kLGgzUVIwSTdHUzxvYHNOOSRCQ1oyYCFabj13Vmlxe0MpT14hTUkkNHJaJDJwSFB8InNINGc0Zyssa0ZveDNwUElLM0drNT04KEEkUTFQeUwjM0p2PG4kWDkmLntgdm8qc1NHaCxNe0R+RDgzbThVJnxbNlI9UUVyc1JNY1Q0MU5DLylSUiYsZUksPUx7Wj4h'@;
put 'U2x6OyluWGhYN35ecCY+WEZYP1ZpbHJ9OTIxIl5NcDdlP0Qocy5zKExBcHBxWmRfPkRTKExrQC85L2p8dk9WOVZdS1RyeDBIMlZfa0ssMGZvRCpLa1ZQbyE8cj5JMVp9aXhxdl5DSVdpJDZeUWpBaXJBXVVeK0ZJS2JFQXB0YTlKWD1LaXElfjlmZVV5TjhYYj5nUlMsZH4lLy5KZFRPRjwqPWxJ'@;
put 'YCpBeUxkJnlYbD1ZW2ZSPCE7Xmd4e359RV5FP0xHI3RoKSp2dzZlfWF3anEsWVt4VXZHVkBXPW59WTVbNWRGNSRsWlQ9U3RROi58KFRgP0g2eitqUTdSamNmOi43OyQqP3lZZHZ1STxgOWJxTXN2KTt5Llp5WHNeNSNDUjQuY3A+aHgsbHR7WiVuPjZwWHR0eUhzS3khb3cmNEx0KCkpRn1Ja2E5'@;
put 'NiVhIUJ7dnBfPm1NRV1RXlVWUVp9VHhma1s6RVVdeyEjbFJQI3hmX0VhNVBzJmlVQGY9ZCM3UEZke3V1VDRITnE5aD9HIl95MUtvM3J2JExtP0lMUGJ1WEpBZjxYMi94ZmssbUVlKiNlP0hZNkp6WmliVThAYCFNczx0amohT3JDSWk3KTYhSiE1WF51JT8/QypQcDUre3JjMig9SU9EWUJLS15N'@;
put 'JDpDPUk0aSNHVVI1KXtUdCJBWU46d3B4W3QkLG4hW3xeSEg1QWhKZHQzVU9IT3BfQkVwWilUcWtOPiRyamF3cTpjMzI/RG8xJmJuP1hiWjtdOW5RYFdmTGVMQnEiXVcjTilIaD1FTlZ7eWB1WDUrPSVrLz1FVD1EeCxEcH1kMjpIW0tGJm1zKT1qfSRXKiVte3AickNtdTNGNS8xLzs9IyxbRCNR'@;
put 'JVo1MEkmUH1hM1l3Zjh0dmVPaCEkKixqfUoheS5gTWd5Oyw+UjEpP0RMaHEuYWl6PSY2TkNZQnphM0IiN2xNQzNLXS54c3hHeDNtflk+T0tORjVdSik0KXwqa3JDdW5xPUlCZ2ZTbzFaOkB6eTZzdT1xb2Ypc3VkPTU/SCosbEZhWyw9aEhjbiwvSlZdQzx1THQhNzhkTmIsRHxyPnttS10pZUl5'@;
put 'bHhSaHRvOylBV0ZEQ1h9YVt4dm54UDImWX0sMV8xeGFRW0NaNWd6eHQlVSk/TXYhbVd8ejZsRitdISwxd3VTPW42Pit6WEtLcn1yUSpYSSxsTSlxIUtCbWliUDsra15OM2Frd0k8LEhtYlpRXmNkcSQya3NWfFR4USNWTyJPdTlWT0d0WX0mQF1YJl9Zel15NihGXTh7NmtxfVNdR3wqVEd4NEN2'@;
put 'WWR1IWlBZmxaNUU8I0FJO2VuPSg9fDZKcEI0WX1rS3Z7QjBCITtzXUhjfUcufjlINEJeUHMwUHJhJUU2fUFEVWpVan1+IjFpdDd2VktGTyJfMWdQNzJgRSQ+RDk0ez5xXUE8O1RVJC5EVjdwe05mPWZWOD9ETyZodH0zYSFxeyRXRGFrP0RwSHc2OUgoeU8uSF5SWD9gOHJYVFBVNW1VKEhxVTdd'@;
put 'fDttZmIqSFo6Y2xHO0BeR1R+eTEubkk8YExHS3c+VmlHS2xffjlZMUp9UEJYMGlQNWdWOCt7elF7Q3M3VSI7ZnV1cStlWl5MW11kdEN1XXkjUl5MVEp0QnZMIkRsQFdZUD9EVjFUJGpWV3hMYkBAcm1gVCpaMUFjLkN4Tzs8cUpTI1dfUEJQe2ZDQi8pRilFR05+ZGVNZjY5dDAwOkt1QmFWZUdp'@;
put 'eSYwdGJiRkphd1Q8S1JxJi9ZTC5zaUd2KywwTmhvNCx9bl97KUZ5OEJ4fHNWYi5RWmsrYDpxTTxYcGlrcl03bHRRamhpU3dDbDBTajA1OUU/PiVWSV53QWslU2BtbzMmL3JVLDxTfm97VCo/ayk4eyRhUC4zeS99fEksR3NjN30hMT9WclgxZDRuRkJ3KFNqWVRkQUg7YXtCal5Mek1xWX4rcF07'@;
put 'PXFeaXc5N0c2MU52IjVYTWEpfCV7bGRyPyFfcFJ9Y3Z6dSh7SjxrNSppUHcmVUJhJUtRTFJHRWgjMEFlUjc/dDR8cmVxOnVMY3xSTlc3JDkxUzJ7Q2hBPGYqWnR9UHptI0QhPC54TkQjYDE0Pj12e1c+SmQ5OXNZdl5WN2d0aVZWPDpNfWg3dHtwQ11jfWxnKkhmYCZ8SlJ0UXdwbEkpR1BIJDVX'@;
put 'bm5jRmIhTyQjcGpvbEciRXM8fk9kXig/cFZ1aVh3KEhvMV9pS3JMdUhfTHh4YFpmcnM6T3IlSGthPnFiciFlK3thWyo2JFd2N1lfeyhAJnV9OlZudGt4fExkMl5DKEclfTlMJigqK180OS8mIzpfQ3NHV35wMDBzTHR8NkJfezU9QlRrUyNsV1EyfEB9UHBUKCt+aClhe30uPSp0QyJlJng5Ok5t'@;
put 'fW5JUj02PiMlbXszdikoKnB5U3xdSWU3U0R3TztCdDpTW2lCJXVdWn0sfjpPQz98PXhKe1NpVDkjfFcrVlcpNGc6NU1MSTdmbj9pITBVczYqNmV8SDtiRlJdb3doR2p8QHZsUitDQ2B+L24/SixYZSltdDMzUit1SCtdRnQ2Nkh2Q0UxKHl6QTpsfDd3VkNgSWBMXUR+UVh0VGtlO01AVG1DTUdn'@;
put 'KUt+OHd3W3A2KSoyJUVmMDhkayR7Z0RDVFt3Wk9rKWR6aGdoRF97Mk9uOFJJayhwSkxdU2k6a1AsKj80PSwycGZEfk9RT3lbak9wd2tzeE8sKkgpWD5JZE9OaTRqW2pYK2c4SjttNnY5YD9FMXg9RTEsaEh9SGZtP0JfazpfP3hqSV8zU0JISixTJit6ei5URlJdbT95a3dDIy8+bHwuV1FZV29v'@;
put 'R1ZFSTB1PHN2YClkP0s5XkhCQyk4N1t8Nmx+MyM+V2Yifkg3QzwvNltTWXhSekxLeTU8czwyfjFDMm9rT2dyUkVeLGl5SWVOIyhUcjFQJk0wKk8zbDtZN0EyRkxKIUtmZzNndyF1XkdpKEZgRjtIVURobV0pdmtEK3Z0LjtmbSpNODlJSjkiNyQ7cUhEeDtxRGBVJV9ucSpQMFclR3M/RzgxfVRD'@;
put 'NGcoLyYuNj5ISX5+JGFLdXhKe31UPTtnVjdxY1kvOUFoMHhjYFEvOUtkeS9AUThCIjpAPT8uQ1d7XjEwU2shRTBXVXdaVSYqPDRSamFgWCxDeyZ3Om1oWFVMNEBxWCIwREJDSHwlMV9ua0I+XV4xTVNsPndCcjFoSyM7el0ldStSNkl5dENIWnZadDpwKjsiTWUxNnQ8cis9RiVlfF1SfTlpcFQy'@;
put 'QyM3dz1EPiV7LGMxYD1sWTVPQ2hCbD5qUCFkbDBpYT5BI1deZFAjQFJmV2hGZXl1dThvZztofGd4e1pvYWlbTHhsV1UqeGBjTCZqITl1Jm03Ji92MHkiTkpnMGk7REUhMH4/OkpoZGNHZX5AVXdbMD5UM2xdZ1UsTHw4LCY7SDomSitCWit2Q0R4Kn1TTH5oNFZQcDddJFU0XUJfbUVLXkJfdWtU'@;
put 'JUZ7ZEVWS3JkSkpgXXZSTFAuMXxlSWowaWgkR1dfSVdHQSFEe0ZmaWVwP2BbJElIKy40RzNJIkdGOjg2ZWQhej1AdHYmPGNWIzdZK3hqMC49dGs2Wl5WbEFJRHdwXVgzRkBwKjtpW281cT81VXBpU3ZSdXBKYG9ROzEob3hxSm5TX10iUV1qMWF6RzdpPGJ3R3h0fmw+cmtvRkJ6QTckNipBTl0+'@;
put 'JSVhfj4pWkFfe2Z5Pl9ZWC9AIn06JSkuYiw1LyU1UyQhNVteQEFpKjVIfj9CWFAlVGA+N1lzUUc0cFR4Mjttd2MwOjBBcXNvVyZjS0E8cDp7V1RvbnYzKWc6KFZSKUg1MmBTRT4zIVVNazFtPVJ7aUgoQXh0TyFaeThELylsfGlURG5VPCNRViowa0UieihfIjUkIUs8dTtzUG9zZ2hmdiMpR19u'@;
put 'YjtxdlJBW25Ydl5FaWdHZWpQcEVFLHRPVj5GSCM0KWs1OnR1VkFtcjg0K3M5Zi8vWns/WF1wMD1jYml0M2FFfkdwbyRqJml6IzpqVGY0T00hNC89TnJYInJpdVAxQ3gkLEYsWHAyKFZASXo/RGhLKEJTWEZeVXZZZ0pOQ3ZIKS8ka3M3Mj1MN1VkY1R4X1oiXSlgZGZlOCxrXmE0Ql07aD9YZSFZ'@;
put 'bHg7eXBvX3o9TE5iLlVaSSRiQnZuRXVgNFVsY31pSXt7K2xqfiROcylSellpeFpDbl42Rlg/KDRmTGw+KnxjRGRAaylgSSNAXmtBaUomZVZfI2okVm0rSExAUGZxYnhnKSFKJH15M1dRaV49PGkheVVxSUJDMF8vSl4uPEl9M2A/TDU1XTZJcG54KGNaXTsyaylYbH5ZaEZKVHB4IWgyZjdmLj8r'@;
put 'figjUGppLClpNGIkNFZ+ZlAmZ2R9fXAiMWoua09RZWY6RXpOd31dIVdyd3R7T3cyL0cpYUBXXjNfQFc5ZFpWT0E7NEM+NyZJZ2l2ZU5CVEg9dEJyfURkMy87T0FZNix6USJRUFkiYEB9YFE3VWtxNHxSQyNAYUkkMC4wNi9mYTQwOkpROW1La2F+UHheZTNEW1pmT3NQLCZHYEQlTWs+fHUydUNv'@;
put 'amNBIUdXM2BbP3ZwbTlmOkNYeiw+cFtNUTA1diopPCIqfUFrZ2dZJVUuRlZZWX0qPVB2NTNYJVhPYXAsMmFycXQ2Uns5K3ozVnw7KyljYG5leD8hNDdHUnh4QztGSUhaU1JJUX1Ud2FxXzpmVS5EdiVqV0N7dzJ3OlskYzhAS0JLRDp6PmFRbCYyOWojeipxQWZIIX5bQWJJbCltVWRUd2cpezF7'@;
put 'SV5rQi8hbSN1WlMjTVV9TDd5MjpjXVtxO0hwbHFmZnsxPEdwWiRaM01AS0wvMjtoOl5pVzRzPTN4UntBT0cwOj9aY1EhbWEuXVZjQi4hWGdmcmJfbklmVE5NTjw1dXcsK0xNVGBWJkIuZmlkY3xsWDwjKT1QSWVMU0FWUChMKCoxcCt8cGRoQHBNIip+aUwoSXxuYlNlXyFGZi8+RFNza2YqdXkr'@;
put 'QD1SezNXZmVxTno6V31jNE4xKEJRJVFqVldOM0RXendpUCFPWypxWDRDcEZwWWlDY1B+QjhIW3paJVRDJkwhdm8obi8hYykoMi59JS8rO15rWCthSDR6PzBiYlV2InA2aSllKiFpdzUkdDhyeCVzYDNoaVA/fV1vYiYvK1JSOz9Ee09ZR05DUik0XyRxeyVKc2J2Im9XN0dBW25bMSxNaiswdVph'@;
put 'QEdFLkJkdjRlOmttXUQpMGomSGsxWDopUmJHRGM3VWBUSGBlcz8jKCxmVHQ/MVdpVXFwaXcheVBfSXBdbng/JE1lKjJMXzVhfjlidURsRH5HdkZUMSMyTXNFfWJxJU0oK3dZQDNeN2ExYzpCLGwwI11BRmpHflE9UnVJcCxuVHk4UFZ+ekJNYGpZeWBjMHdwPTo8STsuRWExQGJhQm9KQm0uXmJZ'@;
put 'elFac2ksLE8+dW15WSQsSUs9OTs/XVhJQzAzZ35eYSlaYVhVKHVlKjJialU2bF5hVFl4SX1OOTZxdyorWHlCJDlsO2RGWFc4T2ZlPGpTJiopY0Jwbz49IlhHX1p7Lj0oN2hWWVlgTT1Ad3orRikjMXp8cHdFek98YlJQZGYheFR1ZDBwWHJXW1pGa31tUkAiZG4xa2o8MmZ4aWBXdCkxWCpPMHtx'@;
put 'eGJ7Uys6M3BmRn5ERUFsMUJmJWVafERtIkZSTTt2eE1wMChQeDliSjlCV1MoPWUwOC8kWDpdP0lFW3VQXVllTjh4KWU6Ukl9QFZeLD0kPS4qUENkdlc1Vi5LQyR7TnkweW15LH1EbVdzQ3x9M0lTdTIqb2d4Lig4e0xLVz1meExvfCsjaiNiKElHbnBBT3pYLk45W206UXU6PkZZSnRdeEBHZkI5'@;
put 'NG5PUGxhPWI0KjIjR302OU01WDpFckFIc3osc30pUHAwKC51djI1ViM2MVNVPXx4NmljJHNNTHJmeEVbLD1ZaGdUQ1dMNE9nV0djXS82UXBdXjJiKFBbbTEzazYkKj1vW00lKF1GTC92bntQVV5HclM3TEtUK3xiPywsakNbRn4oOEl3VTM0eXBxbDplM2tjVHhiVUF2Nkw1bjtCKltlM1lJdVJh'@;
put 'OGN8Z00rZ3B4SnBrNjQ3RDR4WTMrb3N1a3c6MiVhSyR6cnA/JmMlU0RGOFZdNGxCWClzdHdGel5nP3Raak55VCFwNiVPUCEwP090ZD9Me01udyErM1c6aE9zfD1PeiNpKXp6PEI+bWhbZTMwMF5JWl1NT01OeUIhSTIwQ2ViUTVJUS5fWXUkWiwuIzIkPzt0e2ZhYHpbPXNtaXd0aiFQUUgseGIw'@;
put 'KmsscmtYYlR7Sks6Ii83KnY1PUsjMkY7OHYpIU5BUzs9XS5ibWVGXkR5Sil7cTxdZiRCJGdoRmUiPlg8L3MlYzRWd2FGcHV+cUc+OTViNyZHfU5FbWJbSXdobTd9RGUsMzNIbjF7fCQvSVRJOTBTVkokZGh1a1pUZHRbeFd6LDVRSTovRFopSWs/TyF0OVVka31MYUImbnJyZFRFXlpeNzFiJSVH'@;
put 'YFZsPk95PT91NjsyT01FUXteNkohbisqZi5fZVlBWWB6MXV7InwofXg5aEVsSDAvSVYoO2h3U2p+ZjI0Q1EqfCF+JWxaKz0+Vk55eX17NixZYmhWOzMsMTpsSTpLVllEI1thfiNKfSMyWVosQ1dvMlg3cTV0X2pdbTJGcFRFN1NMeH4xOjU0bTZ6JVklY2NUZGU+encqPElFfkduKVMiYXhtJSxe'@;
put 'Qzt4ZkRhJipOXiI0NkxDNkdDYTF7QipVS1BiVHJ9WHFjISwsUyQ7OipIZSxufSJHYncldVsyOyY7SFR+dH1IPSVuQyQlKl9lQSpiZngoJE1LaE1NNzJHJFt5R002VyhNImw/aGt3QUlNNnZIUzw8eWprLDJtVzl+NTk3Ry5YVHtEYXE/aVI2R3FHbXpOUFBDUF5pRlBIVkpBbDczXkpVYVdCWVpE'@;
put 'TEM0fkt1RjZIXXw+TVpQNTs2I0x+PiZ8S11dIXdIaltmTDRYSDUyT3s3SyV9YFY2LiVPeGx6PSVyfXN+ejZ6Vm1OJDpfeDZoVl93bzY5LzwxbSp1UyNoK3ouYXpLYWM1Sj9nN1pGemo+Yl0hM1QwTm1nIVkxQlZXMEhBMjUpUlZYNGN3aGpidzBkTyUrJXxWMWVPSSVfLDk6Z2p7cjlyT3lOcCJl'@;
put 'NTp4ZyZxWkhfdGhKSFkhNEAzOSNtcXszbihwPSRtWDYhRShQIm1KY209dzpkSGIxS00lIVRgIiU7TmNZKnpBR2I8Wih5dHo1MWs4bkY8KjhhQG51em4mU0MkZz18eHs+X0RASyI0MiFOTHBaJHEuakRedkZaUUdXJHE1UUdXQn5WUXR7YUBmWl1RfVZ1JnBbTTFLKE19WEpQMXg6IkZ3VFclY2dx'@;
put 'OzFJNHxaTkM8KTVNeE8lYlRabjY/WXIlWmspVSY4LH1bKnZdL0xATzEuSDpONzFZV15wRF1xWTZZVGFKYXt6Nix3aD5ncGZQPzVuVUBgMzQ9VFdVO08xLilKcGpdODp6dmcoUlJkTzNndiM0ZzohQntpJlI3KUZNXTl2WCkkcUlSMTFYNiJfSTY4KlMoQDJiVj5UYFEwT0AvYVJ0YXdqUTo6dClY'@;
put 'SkdzJS4iKSxYeHZ3KHhTQ1VOa2RBfEthKFAsKEQsb3kydTR6TENAT3xORUlxcnooUlt8JD5LR2hnSTo/d0JdJSMmcClKPDRsIWl6PEJpc2g4SiJfc2Z5WWkwRDNsX1IvV1BCOUV+c2FhWSIqZyhlLi96cWslPCpxNiUiemdUdUBffGV4T3RIRmtfXz5EcC9xZXFVSm82fF10VmVoVChlLkRmPF1P'@;
put 'PFhoZ21UdlouTmlmZX5AMWw0UkYhQ2wsOHxCVFdLPU82VE9AVno5RVUzcTV0KmgwNCJpUEMqfT4qOyl5ST5GcGM5NlU1RixSZ2pqPW5sQCIqLGE1OnhmQ3hFSyVhSSkyKWFpTVdQT3lXL0RZP11Db0htfT51WDxgdkxaN3I2d29eSyJtQ08wdHZ7Wk5SKyRvai5vS3MrP1VWNyx8OGlwZTFwQV8s'@;
put 'JXFIOX5naldKbzEmT2EsRnowOEhye3wlKlNeTUNYXnl0bjxjKj15WltdPEk0WD5fUGRWP15bLkxlOW1zT29senphck9RejQ4QyQxT2hbL0B1Rj5UJCZPaGlxTzgsVUROQFZRYTk2fXAjX29HU29TZXh6WGg3S0pmP09demJCcUxHKVYzXVBRTlpUfG1IU1lXSTIsVjwyIiN8JkJMTUwiMSZ3MCts'@;
put 'bzZ7TGhbY0R5aCZkaWM/VFB0UWthbWs+TyVuNlNkRnJVc0ZINUZlLjBJUj1SQl19M3Z0ciwlcUAkYyVqWXhATHx9Z3NiRHloeVJlfE5DYEFvVTV3ekhfJl56MTEreCR+Zz1ZRHlIQWlQJE9DYHI/X3ViYSt9PyRWaXZ6UygmXmxmakA/O31ncWxES2NKajghZF08STBvaCJnZU5NVVlTajhCaXpd'@;
put 'WVhDYEtxWzxGS1s6SjhBYSt9dT1BUFBVbDdSZWgwdXFBJUM7d0BLcWo4MVBDYERvMnp3ejA5QHBWd0pVLFY1fjgwbm99V3Y4KkZ9b1BQclorWCpRLGUuUFpnbWY/VkhtZTxMXz4wJlk+aCohKTopcDFZekMzOWEjamU7IktDJW02Knw9U0Y9KTtddmZ+M0VVcmN0bXYqSH5zXSkybTY+Z1J5dVZd'@;
put 'ZjlfaisoOHp6VEIqJXNTS2BfemMrKCtqSVZNI0g/SCJaMHxfXTZyOGNtS00zJTVuP0h6azd4Xj8pS0kmTkZxaDNRWnMpTzJZVVNhYXhSem84UjNJUGpMI2RZcWE5OjBrb2ldTEMiIS5rMVNuPVFHenhBSFZ2T0I7eURVWzxaakdsekgmYEQhK1g1ISZnSSlINUIkdz9XQjd2d2dvKzp4PUx6RlFn'@;
put 'bCMiRm15OUZdfSpIJEVIMkohI1FEOEZ1TFkxPUk6eGYuZkR5fmNtYzc1IkZDMmRgUyJtKywsO2YuXzpfb1loYnxYfVBPYCpaTWE+SEsqTX1eQz0pd09HX2F+UD4xRDlJW089SXJgWjFDWCYvcmZCO3pEQUxuYGJ+X3l1M1p2UVllKyF5VkZ8JlFnV0doaiJkKHdKWUYkT2tWXnJadn1LPjwsU0Zz'@;
put 'ODhbeFJ1SzBJb2cvU2JHb3RgcDxmI3Y3cFFNQno/b1N3fV9JRz12V0lbZX1qdHQrKn1ldUAvSCxkZ3Z6PEkhQzEkQCYqQ3EpdVlpUHs3SD1xeVlGbmIjQldTOGFxRFYpck9kP086bDR4VHIzVyh+eXVvNj1YWEokR0NEIVFBe3QzJVBsdjRzNHBdRztaaFFJNSJqQG8/UFM7V2laNSJMKjVZUTxN'@;
put 'Tio0UVshXzF9P3RnRm5BTV1gNXtvOWs5anQ4byJvNlNAO309TXJwaDUmcjk7QDN+Z1ltSjVNQDBhWjxbQU94dkBqQ3ByfFFoOXNiI3JJVT1BRzNPM2drMURWJDtnNls9WXlscismSyE5dWlSMElaNmFIX3cqamEvfGJNcyYsPCZDS2tmYEl7bkRQOU09UnVKVk9mXUJPSiFweWl8IX5HQjtDOSY7'@;
put 'JXxJeUgkOXxNJnEzRiM4PXZIdXo9X2hAJE1KYT9pfCU1USNiK2dzQmA0b04mVD10d2cwYHBDUSJZW0socHI9WF1jMk1PUnV6MWw+eXIqZUYzW11Ab1E/OGkueXZ6fnkrcjU/eDhlXVA3c3g4eWV4N0ZLcXBheloxWjE6UzBEZCFZeE9jbHNwZjVrb0J6Y3MhO2Z7WGNVSUJMUG52eTpycn10c3te'@;
put 'SWlsbitgZ29bRHV0XlcvRk43R2o3ZW4qdiU3Olh3X0YwfnpIWEM9dk0leHFvTlpMMV85Sk0iejFHcn5jVVJic0QvPDFfUnN0YWp8aV5IOytWbGhGblg4fEclbTNzdVF6fEYoVUxqKkgrSTxEZCxdSi80QnB8JEpPJjVgcFtBRXQ8KHEidVIzSTpoR1lWRXRwfUdFWlAzQmQ3ZFVmOnpGVTwsK0gs'@;
put 'SzFSTTUidXx0TE8xS2FVQWxiY1JVQypNVW0qP0hgQ1RZUjA7elYucz5ZfWpWJC4sRDNoQyxgcih7RWZFVEJCMkw5aXpFWDlucUd2ZiFKKiwrUSt4ekg2PTluTmJsezpHRT5qInkuRTE6bXdMbzRPOjl9P0BjcCxMUGcqXUAvISQoezRBbyMldFprZy8+fHYsZyZCVGBNMUhrWjtjNCx2JlQ8RXop'@;
put 'XSw4TWZEfnQkZFJpWjBpcDhQd3omQlNvX35EQjxOSk03VTNHWGA8SUN0cSlsI2RRdUtzRV51X2hvNylVQV5GeU4pW3lvYHEwR3lIZlRQIjwwNDl4RGRBNnl7cC5bNE0/SVEsRFNGKUVwN3szMU9lM1ptYDlKNC8hTDd7KlRuMT9LJSU1UGhnQFZ3JEQqfE16cDg2SlY3djpNKUFhOlFYP3pAVUlA'@;
put 'eUR4R1ZYS3k+cSxZfX5mJmp7NXorPl8pNFJmI2lrMllEYjBMUCpFdntjNn4lX3s2O0JzTFA6UCZEOTlwYUFeV3ZedHpGTCsmRSMwa0QwR0sscGl0cDAyXjBjVCopSi5iS0NYdzA0WFFqTCFRfC59QWpjMHJKeThgLGREQ2MyLnxFaGsrcTEpO2t8eVQrRGhKbU1QYV8vL243amNuWVt3VGVBIUJL'@;
put 'SVk0NDBoIi5Rc2ZrU1sqaDB9WHB9MHpQVjVGallJJDw/RE9eTykuOkQhQD1PaG5RbyouLm5neW1TNlV1On5MYSlIUmVtUkMhUCtbdGJFVnYxejB6Zld1PlpDalk5W2llQ2YoUHU5SGhdV2lKO0Jfe0o9KGZzRXleOE9ZUGJSd2t+Q007YnJyMi5hOm5ycDA2OGYzdixyPH04KiRJOXIyaDJwSHdO'@;
put 'OFlBdEVSQS9KTVpbP3Rha2s6KURdeV9GOCJDUSM4eWdWTkN7UHNLM2wvPlV2TyFiOWR8SFdgTyE6TWkjX3NNcFhpZU5uN1BLTHtpYF9jKy8pWnBEZHpMOCVgIntdVzNiLFssfmwxZWskfmhvWFJVSGgvKnVwNjo+ZS9bRmk1ND15bDgiW1cmPDEpVl9MbW8/d1N9O2x8YGJGUEo6bCx3TkI6eXwh'@;
put 'eVczWEFZXllwR3F9KyhFM0EmYj4xKjJXe3prUlU3ImwzSEclK0x3TVhYI35KSFpDOytbPTtZSyV0MnA/eFJdT3t0JjQld0woLjBbVzMmW15MezI9Yj8laUNwWGMmbm84KkBZdV9RNFdFaSZXZyVGTFJfNjEifUB4KXBMQCVyK3lLM0FaVCx3UDNILFNYVGFKNHVTPD95Rjl6SEcyWEgmOm8rXV17'@;
put 'ZT9feylueSllMToiaHJ4PVJ4SkM8bVd6UHRROURhOEN9WVlaVGt6SmghVy52emJYUkFbUlZaQ2V8WD5HSEtJd2dqVFJISFpJOEs+TSp9eC9LXjkwUGBuTzcmIjR6YmVCfVhue3UleXJFKHVaMHFjTllwQzgsUmA9cCRATktISD5UbmhOWWtxa3FXR3pAO19sMWYsPkdYakwhcTRbZCIoOjNwY0pt'@;
put 'LlZBPFVQfF5xQkJePDtzfnR2YGdpeDc1U0xqOHhVbVs/dUVkUUByLGlhezljcCVII2BwaCMwbElDMGAhLixjRkpoNDs+b3BiR1d5L3FKcER1fDYsX05jOV41LGU6SyRqRUkkeXFgSzhiaUdHY2lSdiU5RXx1JUs7aT1XRSMpJjdVdm5YK0A5ayJoTXBZfXZ1MztSZDo3YlY4V3E+ZzBOeExHWTBf'@;
put 'SkE1OWNKbzIoNEsvP0t8QXxFRUtKNlojIV4qNF9BWSJnWlJGdylWZDUieWMwIkp5Wlt4LiRdSlB7ZHdTJlFEYDpgWm9vTHhNWUJoW15Qbi8kZWVbPUNeNm44cjFVWkk9IV8pL2pVZGFJMFllW35VPFN+Kyola0hOYCx4KVZYeWlmbmA0KTckNSljJDl+VVBmSnpnRT09ZkEqMH1lRyNNe0ArPCZj'@;
put 'Wkw3emkrMH0zR1hLRTR9RjNJc0xHV2pFUCRgLFVCIisoOVNhVChsXysrSHZbfmhqQiouVkF9PyQzTTlAXlZ7KH5MVDteRG03TTROWnp3InA2bz1EXkMkI1NodS4wYXlDaC4sNiUpb3hwJUo9JjpQLyNkOlkicTpUUXUrZjRRNzN4ZWclRzZGeEsyZVNaJElQUjRCaWowdlhCQ30vb2A+O1R0Jmcs'@;
put 'P2BIelU+QEROWTFYaygjXlp4P0FtUkAwYTZZfm9beWxgPy9sb1BAdU1TVVhXbCVDdWtCLHwuZCQ/U2hRZ0hvWmdHKVVoR0k7Xmgoc1FRbC52MCRLdVkqTVFDaU95fVksVFZYSndbaEE6fVJhTmZHRkp6Rmp5dns8LEFIaz1RREQ/RSU8UUdXVSVVaDhHaz1bMmImUChJOG9ZSF53YiZkdU5RLlAw'@;
put 'eFJETFRJJWhHV0dOITV2KXdLfUB+a3B4Qz87ZkxfS0ZhSVkza0lIMyQvLmp3Tn56Mn1kUXo/aCQoP1V3OEg/NGVpJjBqYTBJfUM5PmlhRENPfHFzOzA9SWhNQ1BnfFZYQW53RURDZmtTJll9X09jfSRLJkxuYyNEQl44VG42Qmc6ITZ2JEtQN0k8R1QkUz1pPzR+JXdJOElLbEdlZjtVLztqfm9g'@;
put 'bWB0Tmg/aHVPUmoxOy5RMllycCFqSVIyUmQ5VCY3eTgkVisvM3RqTUhgRClNdlopZ0IxZDRKQzNrblYkM1lhJT91SThAeCIydSwsQnpiSCojeWlSNzI4KzNib2thaGNGTXQuRCl4P3dPdDN5QzksQVIyUDhpQ0hLeFBvU0U7eH1QZ115fUQsK2h+dlJqa2chSkJya29gKVQkWHksLCosVk02Lnkw'@;
put 'VUl7WyZ8L21LKkBNUzFYYWxQUzF8OmIvcH57OjhXdk9YQHN2aHE/TC41fVp+LzByIlovclJRaXdpNUBodnRvIWlbKkw2Snp6by43XlVdbXJqYmlBfWcxc3wsLytWYWx2STpCOmlSRzojLm5mIlZ4LmpSdUowdlo9d34ye2lJSDlEJHxJekM0fn5wRjY9LzQyTXU6W01kP0RvUi9ZL3FlWCshTUBS'@;
put 'an1wZmhnVE1nSEB1bXA6RzZIOVR1KXkyNVpCKnF1fHNyMDA0PklSVmppUmIuMn5KUEQpJktIbmBNRjtZaTxYOytGcjVnJGN5P1t6V0lJPEw3cHFPYUV1VHZsQHJDTU9UV2NpSVFyWHJYSSNbWmsuVWRjMElJe3A8RkBoWDdOIVpvMTpKNylUREJNaH4qSm03MjpLeW06O3ZARHlUb11wLjBpaExD'@;
put 'VFdNd01mb1omTGw6KT0zaXJ0LD96cGRRImd9L1lpWCEvKjN+PWAoPWElMDB9bG8lSm1IaXAmJXxTViVRZEVqWXdpOixjVmdXOWpmTG4/O0hSaUE/SyU1N2ovRDgkZ0MrJFVjNGJPdGlOQFV1P2pJXkA/NiVFfSY7Y0xvOU5hJSVZLmRVZmloKGZSdzBqbEJmZSFmaGZpVDtiSUh7KWlqS3dweS9T'@;
put 'UjBJPkxfIVplWGVoVCglaj8lZSl9KyZhaVVeWmxsY1ZqVFd5NEl1MX0vSkd1VSEhOngoLDpLUUw8TUNpWnE/O3AiPUk9az9kRSJCfEVFLH14KEw+aDl6X0omdCVfIWojISwxI0J9e34lYXI0dDdueGBHaFVhWXc1NDB1NlRFPF1eZUtHbjZRMCprQHhPKWtTR2FefihOdn5URFVdQmdhSnY7R109'@;
put 'YVE/bjR8VV5fLiVlQE4uJEg2KEopRlF2R2RnZjIpNyNIdmd6NFBpRGt9QSFHKEsueUd3UiNIc3VKPlI2dDpPYCFPQWl9cnY3c0ZLKj9ma2x9SUxpe3VKPH1lOzN+SnIiUDVMQ35tJEc5cFhlTzcvU1JiMz12MnA5fEJQV0Z8cnlKaHhRXywoZ1JaIiQ4MWxLbn1jPStlaHFZalp2XTF0YDNEZ3pp'@;
put 'JmleQy98Ki8rYUdseik4L1U8eVkqJi4rYGoqbDw5SEk0eCZDO1c6VWhtQDpuJTptNnoqL1s2VmVZfl1fdH4wZTYufWpwOz4mLzFsI3M7PjF3czNFVnRmTkNlaW1KdWNGeiJacWhSTkBtKXE0dltsUyZ0SDBveHZ+RGBdYmAiaW5+PCJ6OVkmNUwhfFN3aFkvR34lWyoldH5hXXUrJmdxXkc3Jm43'@;
put 'N206b3I0VmZdUE44d1E5MDZWfUMwSX5EMUQrdmspV3UoP2RFS04pTWZqLjA4dHUra1JXcTtbLE19On0veUZsaUkzQWdZfXRmYE43MT0jaj1rRUtMTipaMWYsNUk8X2BtJEJ1OXUlMD05PGV4WXV9aUlpbl1LYHFianV0d1RpL19yfHw+KEZiayFIRW5TUGl5PG5DUHJSM0hEYj9eUihDQl1abm9k'@;
put 'T0JHZT14MVJNNDd1YnRIa3pXbjFJNyk3bnR7Omc8cDBCdFRhLCltKVYodDZpQDRqOGFpWCR7dXNwaHdleS8zS1gpO0QrLlZwSDtRbjZBdV16Q0UhY1BwSEgyM2x6ejJHTXB2b0M7UXtoOVVTb21gUjxmXWlTQWlFUkpOOUQpMX5EP0ZeY0hqekg/N1VoNytkbExld3tuQ3hNPDsmX2V0WCo6KHpo'@;
put 'JldyV2hYVlJ9MGg2cF51ImN1K2BucWBXbz5maDxhMFhWSk8oS0VYfD1iQztaSXQsdnlPVGpMO1RZRUBCfUJZRXpVdXt5W0UjaGBsY1tdJDh1NHl1NyQoKWYlcWk7PTE/NVYwUzpLLmZBPlBtP24xRzNPKlAkLnk/JHlDd09lZSIxfUtSSltrVTddMzNKMDRDWn13R31CKSR4OEdVMCV+QV9dTUc5'@;
put 'Ukw3UGZ2XiNFaHU+QkJESVlKPTZpfk4xXntlNC9xZXt1L0ZzaSxXcl9YTkEwU30zSmt7W2deRH4oaUJzYWxDJEhlfG9OZXt7NitCX2xIVHJ3UkZCQ113amFTfElXUHZVPFAzPXlxZzBNSmRoTFV5SjtIO0spZmA7YiFPR2F0TCF8KVlIO0tGdTBeMWJuYl4yOEZoOTA1dnppfmJWZFRqb15EdXlo'@;
put 'QWF7emlYfnV5aDlEM0guUXBpNyZVTzchc1J8aDR6IiooTFBnVUBYUSNKZHsyXV1XXyNlKi8/Nk01ZklLP0ZFIXR5M28mIks6a287N3x4dl5xaSFeYjJHaHtwT1IkMEA2MXNtdnwhJmkoUCZnKFBYJmgyIyxMaHd6dWxBS2tacSVtSFI1O0dObWsxLnRlZHF0TUlRKn0kck9hdzVHZUo0ekk6Mi8u'@;
put 'TUlBKkIueEFBS083bmJYYSp8eFpRIW5nLlNIXlg4OEp6Q09aRUF1OUQ6RiJMQ0FBQUFBQUFBQUMiQ2gzbGt8WDlMaEQ1ZDBmNSs8IkhqfXhOc2t3MGowIUcmTSNZKnRPQChpS0hkV20uQFkkM006OjkmazY1PC47U195Zy9rfEhCOEpfYWN0QlZYIVptcj8yKS49YXZYPy9Wc01HPUhpODAkV2l0'@;
put 'KEZ3X0JQYGhQVT1YIixKe2N0Sz4yazkvVT9fMzthXUtSRmdGR216OnReTiswRk5wTVU4ajtQMEZTS2NaNz5pMmxYVVtGMHVdKCE5bTAmKDxGe3YyT2IodyRNeThDNztzdkN0IT1SSy9ObGFedkcyUUlrVmIrSkZeNjU8Wz5LLyI2MkxEIUBaZSpkPVBfcSUvMTpzWmU6Q1NRZW1ifE1ldSM2OE9h'@;
put 'I1Iue3tKTixJUjVQTFtbcDlGMmgkQHlyVTh4fSgkSFtEbk93S3l3ZlhhSC5vSUNCOXNnfHQmeGlxWG5wQ0NyZn5TQEZleUJPTT0xXnNHN0lVNUxfeCZJa1tfdWgwX1RnRDUlIi9IZ0dDTEVEUkwiVGJWOm40aUdNNzQsK0p5c2RMcVlndjBkRWMlPFB+dTFOLywyMUspPG05ZEQva1F2UXF7OUxT'@;
put 'KG8+eUVpQX5IVzI7cUhUdDdXciJeKHg0KEVrUz5JajU/aERqTXk0a0MhIjxWSUJfQFRQUHkqflV+aCpqKk1wemspemg7KW1gIW51L0JXYDJienhKLGIzc1ZmM1loK3h0UChtM3FlcXd6ZVszMlBqPHEkWXFbW3ldNy4+W2I/dTVCLEZvSEpER01hO2lqQXViUTVTSlFJTHMwXUBAc3ZzU2wve0FF'@;
put 'alJHZTFzRWt0djliNUtCSiJ5TGIhQllteF59RShMLlgxIUYvQ20wNS9zOj89UHdmOkN2ZXZgLz5TN1cvb31YQCZsJCYoS0NPc14uKWJLNlFvU2F7ZDtbPHwyZT84Ujh1OmhiLGdJYFpDYSs8SjRgRzJ5clUjR3J2eDh4bit5XmBNQzA3ZFJCbyMzTlU9IXUzcmN2S2lyMHBqfEUkejtle3VEcTdy'@;
put 'RX58dCZESTIma00kdlUpSSozX15OX1UhcXVsZDpbcy5De0dvfmg9eEhHKkNhO2RsVDw9MFhuNzpZSVZpTHRzUF0rajBfRnAzZHNkRG8jUD9JYVAwdW5MNDUodllpRjVFLn5KQCQoZTZtXWA1RFVtT0c6ZCRWNWswNFBWQGU/WzNoLkpnRXJgcW57X3tGfWskN04hKVdwPHpoYHZEWEIpJHxORCpg'@;
put 'OkE9LFkmJiZdb2ddJE5bL19RK0YwaVRZMlVqaFVEMWcsZk5NZGReRStUPEZXWmlaPThNTilORyFUZUdoPmtPPl57fFl7S3JhMnF7VlpocE97VS4hNV47JEUqLEMzUmVkVyMoVXo8ZDpAVjlXaHFrS1pGaShPJjx8cExiSFlafmN0KW4jdTx+TTw+fHN7NW5pPnNeb058bENAY10pelRpQWtBS0pq'@;
put 'Nm8mLlhRJkQyOyl1OFssWzV8X29JIUJ2VzJbVFkwKl4rcT9vcTNVSCMse0lHdTZ2LjowKEN1WkN7KGg4Y2twWzMlYXxrMDEiV2hmUylxbXVvN1NySlFwcnROOmsydHhafTZCdjxdRkthNTtDYWd0X0wlYiZeQ2smfFBgPVQzSjxHSTczdTh2PSlbblI0Y2RbbCRELl5sM1ZnfHlDJEJGPiw4LGdQ'@;
put 'VD98PENfXXdjbV18SmxtbX1ecDAqSVQ0UD9dPC9UZSlCYn1GUltoSEZ8VUJsPD9BRjddR20pUmdBZWgqM34pclUuc3F0YnY8M3E7K2IyXj1JL3NBaHRfOzNAKH1TTkooRXVvO35kLm0kXiRsVlpdfTI4KjBNQnprbzNULztFMzxJez0yV0gwOl03MGlSSl1gXWJIKXkqPTMwe3k3SzdrZHFkWWYz'@;
put 'ejBQUmk3JUJGSFFiUnxtaUNHTiQpIlZjIjgvLHsyVG97X11AX2VUVithWl5Ac1YleXhpZjU2TFpnMWd2SGMqfmhDejcsfSJWZmVkUDZDODJgR0p0fThiPUwoMjZRVXklfV9UMj86ej1dXTA5P3dsM29tUVZ6Wj0lVS90WywwP2E0RHJtZiVKfWQ2OWp8JmlaInpVPS9kUWYkJkssSCNONiVNUTMs'@;
put 'YVRdKCpOZXdFfCJuP1hgTEcrPExUK1E2eHtCLEJJNzJdeSpPN1QrYG5kPzAoKzBQRjZkMDh1X1I1YnBgPnQsO0ksfmsra1IqMFg5KF1mRiI3XkIhbDhgfXwralZWMWM2Sj1dT1pmXlQ5Z0pjMk5COWtxaUU3dDZeLDIrIXUqOFpLbDxYZmgvQWNWU0hjdzhBLjBQUTxFWztQI2RMZlJ5KXJUcmwi'@;
put 'NTp3PXtjTFhkJU9dNDw+S0hAMXImMzY1MWdkN2BLcWZCNnRkMnNEYzNgLl4jSV9pV08sQ1NLcEhyeTskV3UkMT9MW0h1NUI0fT0+NngmUkZMPSFNQDhoR2UkbUdOQDU8VGkhfHQwfGZQWk58IX5OKHNUXiQ8dyVGU11hPiFWOjVqMkthQE8rRXsqeDFKK1FbL1JUOjlFcnBvTFlBZkc8JihJYj95'@;
put 'LzNMJmU8TUdtXVVdalckRX0oTkskXlBOcHVoRD1xW3xzIlNsYG0/QEAiUkUvNm4qVTNRUVZLQHUkd290SnBYRSkvL3s0Jl0yM1ZZeGMoflg+Q0Ymbk80cW55PypENU4vQGFAUXxZYTcxcCldZzl6WmxjL2xdOUhRLlF1ZGkpcmhGaz94TlI8JTR0RndIJGJrY3M/OEl0NGRuUHZnLjZZZjhKWTxg'@;
put 'Kks6V0w2bmpuNF5lOiE2P0dScnAjZkZWelZGN3RlV19qZnBuYT1XbSU/fW85RH1iS1Vqd0VOb3RTNiN+M3l3LmtqWSRqOz88R2RCTiZfSD8iL3dLTWNlKldkfWwlNGU8P1lvRDBndSNwKHo+VVYzdHxCeWoyI1A/YXEvJGZjRG46anFBW2RYOmIpSjNqXjZCd2NOITddU29jZ0tpMkxqMiNgQzdG'@;
put 'XjBEeTJpcEsoTkNQMHs+QnRlTyNXV29nbTwsPU48bUZ7JU48P3JvVkZlWWthezlGQEg9I2JYPztsSnUkMSJsVkJ4UV45b2ZoTCtIS2RZRUcpJiZ3VmFXQTk2TE5sSlV0dXA8a09zMjtTOW1qMnpZVG9eUnVAaF1tKGdFJXYjZXVCJSkuQlFpblAkUGNUan5VJWlqJi40UjUwImoqRnAzWU13OXl0'@;
put 'aXl6IXFEdylhYiVJNzY6a0hvNTV2MV0haVZndWNENkc1di4sNVtgcy52P2t9PVM3anp5V1FTR1NwNjpRJGhtY3A9QEIpR0xiMSpFVHlAelsxfSp3YTsoT2Q+NEc5U3JALmIlIU91fjplIklVMlVUMHRDZV5TUzxFW2k8QHx7TTt4LCpuTzN6QWJpWjZgK303T0Z2RSg9MlkmSUpAU3N1KVdJcSQy'@;
put 'IiQxIXhBSDYrKi9IUzN+TDc9Lz4jejdkalVWYy47Q0NzLF16VCxdRGoxJTtoWDZOMz9CdEZZbyJhb09QU0NidzBQQ11NREhNaHx9ZEYofnpxY1U8cjFgbjtuQF5ZZTl1IVk0USRUPzUoSFpEa3hCPSs0T2JUQF8rS2NoZXVyLElmcVJFVFMmQzkjZ0dyMm5IIyxFeylVKlVwPV94QE5ANlRNajFv'@;
put 'cEdrOHtSO3liI3hxTVJ+a1ZSI08yel5ZaSZtPH5EaG50RF4uVGozWT12VTxgQjZTdXVKKjN5aj9jWzVRPiYiXy9wfkg0IlY/QSRFe0hAYlZhXUA9SWJ9fVFjM2VBSl58KFh0YnlRUHhCIVRGR1U4Tl5rSUMrOnJMb2k7e2xYUCxudE9CdVV+WUU0Rkl8SkF7YnhXSlhrdn1TY051aGV1aztUSl5n'@;
put 'UXNiU0o9YFhQXTBnfjhKbUp8Wj5leyM4JHslaX1sVG0qVVUhbns6VngoQ2UxYyxsUHlMQGFwcG48bGpPJXY0cEpfNCtLdTVXQ1k5fkNJVHFddmd0VFhlZTE4JC49dHo8QHpfO1YrLHdgOEpANHNeY08xW3NIZmRQVnI5MkcpLFdFOyxCNXlCZ11CM3A8NDBdb35PMUVmdERrTSY6XzM3TVd6Z0dw'@;
put 'PztNVk1DTGh7UHYrT1ROa1FaO2VdVUhiSEw8SXkoL2ApYFluPHtrOiZ3bFQ9OHJ1cEdEPVloTXdzekZXIltbME9QImhKI1FeXXBJPWVdVyRLI1VNSDB2bFVVdCxmXXtGKyMqPFNlcVVDZkxvNyY/an59VTdhPkRhYjNuM2tuclFXR29JK11DaiJFPCM2KT51YV0wbnh0IlVjTTgjRFdJRHBabH07'@;
put 'dXVbMDVqSk1RRCtoLkkqdCF0fFhSfURudWhkKTBgPE9wdD57bUIrIjAwV0MwPXlRUjYxUXNzfVEza15wTCZLfFZVWUpyN3w1R0x8aFQoY2Y6ODRrVEFwOUUxczRqOzFSOEtkO1p4entoT3hhUEM4Q1E6JXBfNTNbP1RARFg2dDt3VDVnYno3QXpfe0EhT0tQMGo8SVFIVkREPi4sWVUpXUxXLiFu'@;
put 'SjVpbXFKOClORWs0Y298aCZDRylrcCUiTjRmdWFhR2RvJTMpQWpfbCg6ViFTSzRFOSZ5cTo0a2s0OF8qYGsxNWFzZWtRRzlNYCl2USFOMzQiPzhiaVZ7RWU2byJEXm1QSEY8V0AraTVFX2IudmVfUXF0UlVISmwvfWJxYVVVcCQ1eGdbVHZHLlt7V1AiU0BtRG9gPi5nIWpQfGtQckJ1eUlHIXxI'@;
put 'L0JJe3AzZ3kkaXY1UlRzIXR1Snxddzg4X1RuX1U9aH5iImNJKTBoO1tZW1EzbipbZzU9KFtRN0dOZXloQUNVMkU+RV59UEg4MVJvKmdRIy8lKT1AfGRMU3I7NzUrP0ZLQlUlRDFQU0A0KXVPJEQ9U2NKSzlLZ2VdXXQ9NVsxXlIxazU6cCE1Ild2aCV6PVh8aCNAJHAydThCb3ElQCM8Sng0KT5e'@;
put 'KGAsanMoey9HO1FPZ2MpXlhOW10hTndsOn1TbCE5JXsxW2ovclFUVCx0dHdZczY3USt6ZGEhZlNTe3JlamxmN1IoPzxeaXNRaW1qb1d7Z1VEdGp7QGBrbHcxQilTe3dtX0gwPGRAYn5yK11pTCMpak5OPnJ7b3IrU3NgTTF6YiwrZHh8MkRxRloxSXskQXkkcGspRVczKUoudzs6KVVpJVlpe2FI'@;
put 'M3Z3IywxKVJRais0MFgrX0VORV97UCsyc3IvdjZQXiV3WkUwU11BTkg6bTdWfn5FTzkkJDErVFpeW3k2Uz4iTFNoMkRgQ3pwRzdFKlZCTUxZMlhRKjphVWA3bD0wU1BkW3A6aytbS2hsSUk1SWQmI10vJlRmKUdpTTV7eXNNSFVrT213emx3bkhufVZnRGtVRmk0YFlQSnpwV0hOSD1ONHx3UWY6'@;
put 'Zzp9R35hJTg2Xm5zOHwkaU9YSTpTRms3anYiS3djPHk7IWJ6JFdmN0c3NVttXz9MYlo0NEdUd1t7RnIqaSVtdSxjY2t3KEp3ZlM9NFQ1MyQoYSp1MDtvdFF5KC8uQEtyaz8rb2BULm9ya2UyJDs2Z3g4N1smM3Y2QWlVeE1mPWYjT2thXkViMjpoJU9ZRGpWamVtYk9WfCE4S3ZtTHhLMiFDaFJf'@;
put 'MmR9KDJsT0pyRjQ9YCowYzdFU0NhQHQpKEAzPjY4OGZFT0hVXVlXZEk7R04pL2NNZitCQHFYRXQ4ZXFWeW4xam01YkBkfSkhIXNGVTIzMnlqbTg+THY2O1RkVmwhRTpGOyY7ITxWJG1vSms4LmBCeUVRSE15OnAuKzRRJGt6Jlo8WSUvSCRjU0N6XVBQaWJdWW1XJn5rUC5QPlUyZE9dTjxaMShA'@;
put 'fWI6JHtXa3EmMWNyP3ZOLGwzZiklc3tJMH5dUm9CP1NvRjlGO29kX1A3Slg0USpQKThuPCxpP1o8WzwkKlV6RyNPM1V+Lld5UmN8ZXJIW3RLVCF0RHNRNnNaSyx8aSRHTD8sbW1EPzFMbDI1KGhSc3NRU1hSX19nTUBNV30+dD5vcjQhcEZFaWpWeSxaUXs7TGVzdH1bPlt1aEomL31IUmN+KlV5'@;
put 'XTh4W05+JG9iWFFxPWUmP2hNIkdmKSt3bWchPDd6WXtjbUpOOHB8PzJAZypoZjhBNyI2WDJESnRQOFBzfVs6Oy82SHo9WH17eGtlQndoMjZ9d35+RD5ZZn51Oyh8SG9kJDh2ZCRpKXtGVnpgeVkhVHA6RjNtQEgyWmBaSVlRNno5UzhIdHFddEpiO2AkakxKVTpHNWU7LkMsLHZtM2hhP0A+b0k+'@;
put 'Ti85cF59biY9X2BzcGoqdGVLYmViTXhPKCpUWURnLDhFXTE0ajZrLjpWYlpPeWNdLF4sJCJyQDtPWzA2Qkg6NzBne3NnKD9GWjdubS9nM2x7bXEzNTE2YTYsaHEpKDwobGYwUz0vJFomdiwpSXlSTEBZfmlFZ1IiaTJwfHNZMjQrajYrKnFLZlJoIyF+NSFdZGpGT10/PnBOfHhWWSwlPklFbiwp'@;
put 'KHJnbXV2VlJmIUx5Mj9WQCpoRSZrM25+dykoRnVxeSFUU25QUXJbNi5OSGdea1NAbUlZPDJCR3k/fWU7QChCTTZDRUZLSWZ7cUFMfGQybG1Fai5rQHooYEtPaytIRFRkLmZkP34+V0E9KH5HdlpISHVKOT8rdlYpckJTLEExZm8zODRzLzVdPDled25VZlVBY2wwa25Aa3N7X3B7VHFPfWl2OD8w'@;
put 'NnpgRUtPXWlzcUpMQ2F6LCQwUHlbVXQqVjpxZ3dGZ0IvYys8WGM6fEBART11XWZDe303O3t0fDA+Rmp7MXEqaywoI3NaYyRzN11+UjFiQGhpNHB+PGJQbFcoQ34rYFZtbmI+dDxDYkZvPlZIbk43MkpbMTomV09YcWp2XV1kay98P088b2gvR1ZDdFZaVl1XcXw+O3U/MEJQMnBCWms8d1pFNk14'@;
put 'VihPc141aEc7RW97UiwlaFtJbmIzRzJpS2F3OGdkajJ4Y0VWempFRkdacDlCIm0qaUEhMGttPD5pNmQkUE1EJk5kZCF9Xy5vM0BJPj5kOWlAZFlVSCxGKTBdWSFHZH12NFolWmFQPy99JEhVLz5OIkI8QiYuaTxjd0sqLCxEWW9Fd3k8JGkzSWE/X0dZdlR9M150Jj5rZDFJX0JodDwwenkuZnpx'@;
put 'WG5sQCJrSTckI3YyKVAqIUV6YkopUk0/Oip2IUldbWtrejImPkZNZV9+fSN1dXAkJkxrLkhkQUxYVUMvNXR0Tk9tclgkUmk3MWVMfTBkZUIjZkMqZzQiPUVKX3JDZHg8LE1KYzxAVDA3VihqNW5jNXZfL2B0RnA7a1lwdHMuMnhQM0EzQnBtKnpMT29HSCZwdXU9e197PlFqPi8kKiF8bGZ6UylN'@;
put 'QkxyeiZpYmlebjRKMTYxY21fPTslfkxXL18hfm9pXUM3XWBbcFMkQkl6UFk6XzwmRiVvJFBGKi9GS3sxeD1jfUhJIkkjPlJ5KipjSWRDWDwrPCY8OWgofkJLUSQyUXIxKmQ8dntTWjA6N1l+ZXxAdTZuI2NKP0ZFVFpLO3s1cFk4TGNEXjRmLy8hWEhFUDA4cThSaGhTYkg6UUV1UjNLdXgmKF1P'@;
put 'bzVhN0ZyeVhYMU83a3I9JHVyIVI2aTxfbmdpKCQoYz0yYFhbI2ZVdz9xKktiN05PSGQmO1Ire25DU3Q/ZU9daU87Wkddamg3KjxqdEdlaF9DQnEyRTlFamY1I2IyblhmWUpjIjh3MTUiMWFJU18uPjBWJjlzL3s+XTp9fmY2cTExVVBuMnAjdH5mLC5YeyksLzIhKWttWU5XUHU4KjgyTiNPLnNt'@;
put 'PiRCQHApQSpPeWh2V2c2WlhxSDUjXytDQVBKTzRXVlZ1STVqTGZAbV5jUy5QUSJTVVZ2TUV4TExablp7QnJvYSkwfW5waXYoVGdKVk49bXZ6SC8+JGBdaFoyLl5GQT1GTnhlXWNKQkRiZDBmbVFgcih5dihfJURgandYTlYvelpHLHxSO002U2IsVE4vfD5dTkVKUHUvN3ZUdis3RiEoaGdTRjpe'@;
put 'dyg5TD8lX1MucXk0IWBLRSJ3TDQvbj9fNnEoa2AwJF9LJG8sKl9paXArVyJTbVokNTR3NlY2Qk1oQj1lNElCKEBFJVk4Tk44VEVNW3I4IyFXXzFYUiMsTVtocH5Rdzpda2RgdX1rM15EQyMwYTJ4N1Zzb1tlPFlVfVZQcVBtKSk6Wk9qIV5JbyVvcHlKaEI2YE5aP2Q5I2xrZEEsRkMuOiJaZ1gw'@;
put 'Un1YWl5FJU4wJSMuI0JSdlA/dEV4MDI1WT1TQl1PRlF2VkRBRD07YX52Zks9TGt0bWF7anJKRDVobUBjTUVCPXNsPn4yPllEY0EpM2g7MDJvIjY5QDxsNz9QI1UmUksuaUlXWENWaGwuSFB9VlM5Qi5CO0FCUl5EOSpNMGkhcUlIc1p0dStEXjFxU1l5XiVQRH1qU0BfRUJ+OXxXST1DeFBieUFE'@;
put 'N1tdbnhkLHNCcDdgUXhwRGdOL3BQXWdMfnlTXTZCYWdwYkpRWCpfMDpMdXQlMC8kY1k4cHdJYEJBIVE/ezd8bGNwLkRdJmM7KDRSSShrKVNMai9bKzZ7TUZmNX1iVF9JUkhwX2gsZCVMZmtzYGkuNX1qS0opYUxLRHtbciZWQ3xwfXxBKGhVJXMpaT92OzhXSTFmbHNIZDZXcyZ8R0tYP2R4eyo/'@;
put 'MSpgTTIhUGVCeyQyK1s2VDw7R29Xazh1TzFZWGZ8ImUlfmdZUXslSUIiVD5hUFR7UTw6fUg5ZFRSUXM3bkwrdU1dYnByJj5ZUVtkYnxuNHNbaEIicEI5M3NXN2tpSy5va00sMnBYbDlHQmBiY154I2lDZE5hcDkrNyN3Xj4xaXU7Si9UQ3xVUUpEX3pMPGY/Zm1Nb1pzYGM0XnNJUTFQMlMxPltN'@;
put 'XWlIZm5Pe31KRzhmeiZqNmppc3trMzwsPzk8SlltOiFKeltJPWJJRXhsPGw3OFVaVDdtVzpnI3xtdWE7cWE+bCNUP1A1akdWLkVJZzx1JF55bi95LlcmYkdZJnpycSpkaGUjQnBgMzE6UXJ0X1tKYkhGMiZjOlQkeChYMFlGdXQyQks8OUMobz1HQHtlQ2dxREBRNlo5aHo7bWJLaF9vRW4yTlM+'@;
put 'LnxPPkR6aXhoX00seiJvMiI+ZyZMblZ8c1olJEBLKkR7YVNgW19CUj0sdipnNChhOTpCN2paPFh3O2AhWnhqYT9DcD9SaUNbUG5aVX1MdGh+aF1RJGUrXj5TLFE3ajFbIWwuJG9GW052TjoraWJJI3Neemo2OFNYMGdeWltZZmlzVXRyR3pTXiFLKjIhWXl7aDVEI2ghK3A3VCwkL1FOYWQzTFlp'@;
put 'eXp8VkthP05zS3tfV1ksPSQwYSxVZlZUJl92ZEhDSGhZdk0oOThGU0JiV2w4KiwwIkNvLGQ0X3hOcCNDLGA9NV1oMEhkeFFVXlNgfmcodDsscyN2I18kQlNJbWtUeXZ6IyVxSDU+TS8ldGs3VkYzT0FEQjNJeipuW3ZLNSRmQyhyYz88NWRMNSZ0JSxnLitROXgiaSt5WCg/NF0lWzEjfFp2bWZB'@;
put 'IU9jLzIzeGEqfWdNP3svcyVdZCwwMTQyKFtsOCElclBYKCNOb2Q3PjUrKktXTTdwbk8ySUM8YDtgRzA2SGBYSy5aLCpDYzopSz1CSkN0b0khWUtsaX12PDcsZnM7M2hUVlEpckNUWSZZImBhIkBEMGpILktwIjVvYW9PNjVDeCNEdkNiRD1mUHlbTXU3LDFBflE2Pzt2UVhVJEB9el5kN3JPKE5e'@;
put 'e3o7I3VvZFpGYUVNOWtkMGVsSEBPYXY5VysmNTVBRjZgc1EiNV9KczhIdnU8b3o0Y3g3cnNwcFckVyhMXz1LZDFDc2lGdHppaklsa2xTIlZsRnAlJkNIXXRfNGoyTW17SVt3Mz49aGUpVW9iImpfPVdlNC5WQUBWWSowJWtsPEtNbWY8XypwKjVqbCYmbzNBVkw5az59aDFje01ObzxxSEE8bC4/'@;
put 'NHZDeVQmKkk5IzE+dWx+elpaWzxgIiQrQ1Qudj9vSX00PWtUXjVqWzd3KjdNLGdNPXhWbnQ0S1BLWHxMLCxyRXs3V0Mkc2E9akZ7XSNwSnw9UUs9InBnYlI3akgsKls8ZjAzO3ZHaGloYmBxWjQxVGlKM2xrcSYwaXJ4NF5aZjc4KjR3SX1afmcpRH52Llo9JEVoQlhkTEVlIkBNekt3dVV7b1hC'@;
put 'dU54eDs/SzN+T18iYzYuKUhzPE55fTdiRVhsNk1UZCt6Qlt0O001RFk3NG8jfkYvQUY/VEldQitjPWtQVWBaKUAqKyx3WW1dRm8/RnM7PmYwUGQ1NkxTeytLSXZ4L2l3SUhGOUBdMm8sOj8+U19tJGZxZX0kV2Z9al97MiFganp4VSxVbkxfYUVgfVRFPmFkZD15Wzc3e1EmX3guaDAqYSsuUjN1'@;
put 'dWIvY2JRN0Q/K1pLUCUkZl1sKWwzYWlrdSkkQXdzb2QhT0NSfDIwVkF1WmQ2X25sLFo3aC9OPjJxVWp+X3smOVZfPXJYRCwlYmNUSypVR2l1fS8rcVJoQEs6PE4lY28oPl5sbmNhXWIqOHQ1eTF2JnJkcTNyZUtQYF87WyUlbSVRJF1vIyRAZ3p9XW1qT3V7Sm5dMnoxZE9jZGkhO2gvNDw7cG1y'@;
put 'MHsmb2t1IjdpTFBsfisvNX0pSnZiY3x1ZCFqN3dNWyojUUcvOlREMyw3X2g0eHRwJCYsKEN6Z3REW1VVfTVia3YhejpGPF06OCpxbSFMU1F6ayg4SlJAb19gX1hsWT8jSHBzdTdhWSFdWiZmNV4uRUBubnRbUXBvbHQrRSUhcSU6Uzk2QG1hTzJQK3ZlZmZGQCt1JnZmbzQ4M2UmdE18diNIdSM5'@;
put 'Kl8kU0c0YHt6LDllKmxbUUdANjF9O2hgPCN+SnFjVFJsIXoyIVJyJCNoS0ouXjhhX09iPXFVKT9AT18oZX4zUHYkZ3ZoQXtzfTV1OCFzdlFuNDAuZ3l5SkkjWTYsLz14Om50W09mRUx7JiN8N0RjI2k3XkU9fCp1NzVweUloKilgZkJKdSRuR0lUJTVYbXomZiE1PEdwRE8mTldTKyUzK2c3eXBf'@;
put 'S0ZAS1p1VXAxInlvdzRmezBRbjZxME1RZDVaLzxgeXVlKjsrSiJkNFpZUUAjbGZ2QyQ6YzthYiUkbXwraE05fihJWk93cEp3RndDOVQyLFh9fGVxRDxmIW1fJkBOTSosSiVVTzVtYVdseHRjWWEuTGElU2dnRVIoS1d5VypFPCMuaU10RSp9aGs8JWlWQmA/W2BEI1EhfHdOSEk7a0JoUX1xXSlY'@;
put 'RWJ6V0U7dksvVHA3allhITB+UW0paCY6NVVid0hgeTc3PkNvbH1vU1tWWzVpfFMuMHtTSCZhIlNII2IpO2o0SlhzLkF+XmgjRlY0ITc5eTxnKTI6JGYqJElLVzl7ZkMrbn4hRm9hViJ3YiQvUV54P31eVFRPSGNMO1t5OzJZSHxRQEJfckRDXnRkVCosRy8zZzRnOTZ9JWtJekovTER7YnMse3c3'@;
put 'U2dwand7LF5EXn4mSn1sXVVdSFhYZng2ZWlvSy53O1NNfldTM0Vdcm9tdHFha2goeD5LYSVGeFZJUjlPQm86TShxZkR1fWRVb05POSFNJn44VHBdR0Q/Z3hwUCwpV3g5InFnQXp6flQ0PEN8SkRZaUdlSD9+dnhgPXdEbUl9dFtDMF5wYjVpeWkmRFFeeFFWYlFxP0h7OztbXSswMyksTEV4WVUi'@;
put 'YDYsOXZTS19kSE5kVGo6XXpINSpPPzI2cGpJI2B5QCk/Q3c+eipxL0kpSS80LmtNMk0zLHZ3LjdVUDFVZHc4aFQyfX5iXm99I1ZGMkI4RnJpIVdJPzkjNVdNW2s6LzJMLy9TfXtDYnhLT1BXcDZvPW1gbnx+dExkaHBuPkp6ZFtGQ1c7RXpKPDhPdiJ+XikmSDUrU283Ol01VWRZY2BCdF9mUGdI'@;
put 'PXpCdz4jV3FCUFZlNHQ7VkBbe29ZSmRIQ15BVSlLfU1lY1QjI0I4RWs0RnJUSkBXV1clLDR+aXdDW2s4Z31Va0YvNlp8dGwudEVNQz8pdWdhekoyXksldmhbbkJqR2NdIyhiQ0ArPnlJZn1oPmp4PjV3WSFdRiF6VkY7YC4kdW5pVVVQPEZKKG1IaFpiIkpmQW5qajJgRGZ0e3YkRE5ifUgsdHBA'@;
put 'TlMqQixGXXxxXXxQR3YmI1EpNkVvRyQoRl1RcX4vbWkpJCY5SExNY2dOS19BQnpyOktPPnFBVXBqeDJvNShZTzxne3kjIz1pbFBSYHxERX51ME53UlI1SCNGQSQxRzhmO3VbZ05dMF99ZmJ7PmxgcUFUOSRoIzldKDtCW24wdCI9NmFFK0JnQThqJWFgKWJiVDkkWnI8VUVZclouVE99Um5XezFu'@;
put 'ME9Ue2ZEM3BqQ3YhengzbTI9LklhM1s0WUw4JFN1eXcwXzt4fCg6dHEoKj1HXjRfJV5nfjIzWUYoLH5mW2VJVnZodE1yRHdyfiN1VH4jTHZTXnorIkJiVDxNJlNbVDAqVnwqKFFiSlY9RyF9NUF2b304JTlUaS9Rfk9rRU8zIWNHVj1jfSlNT1shcm5RRlM1UGVLelI7NDpEKHFZKV5LVHA8fihW'@;
put 'WVZJKzhMOUY7XkxHKkZOIXBWUnVQPFJBNGI2TTQ0SSI5UiwmKilQcURyUjtfUiQ0QzNSQUc/Tm54cjFWb317d0U2VUd9WTB7XT48bWZzLGVHNHRDTFVpfHs8KkNNQ3lDUChmR15ZTV1oeztRd2olcV4qTkk0dGRjZyNsbClBQF5GYkp3QURPYDM3YHE9e3VsOSY9NGl7IjxJZ29GQ3whWSYqUFlO'@;
put 'fX45fTFwVnJQNGElKHd3eGliMnErblowY1d0d25QV18iW3B8YnJjK1Z8V3t8b0Y9dlVvR3FvYj9RZWYzYXVZSGM8N1lyZDROe2g5JjBkeUVNeXsyUEpXb2RPIWE7SH50Jj9WNnRjOi90K1UuQm5vPXEoNmxDVExIQVhAZlp4Ki9GV3JEdUlsSVBPTXBFWG43OjZQOkcwNlY4ISVmKGA9e1B3KCxt'@;
put 'JlBJYW5bLyZyKz0za2A/Vzk5KEs6YElhSlJaLnxZOmpqPXhaI09nOkw2OSQ9VkEmVmYzclM1ZHxedGM6Ujg0S3c3LnN1NlJbMlpXbjdlS2J2TlZHNmpIIjc2Mjd4dmFFajZyaW1nSFRLMWQ7JHBOS0UjZmUmPU1Ocn0qa2prQjV4dUI9b05LJkd6Q05fKTY3LClIZX1dUUp0XntSUCkufnVJI3sv'@;
put 'MzkwY1VEemhFd11WLlRtUkhOeWIoTnplVihRfDxzOUV4WltbQlFNMkMwbHpbfl9wT11tUi4kYEZsWnNZLkBOZW8qNTZdekVPIWgmVXM7eDJFOV5YRnU7UnUucSVaTFtVM3AvJU52bXMmIjNybVNAK302KjE+YXtFP19zfGxTNHd7LFB5T2h6c0R6fSJYWDoxd0BUPlpje2IkXXQ6SW8mUUw0VVUu'@;
put 'b3BRWXxYK2xbZ0heUFR7JCxxNll+ZC8meDQ3I00yeTBlUEpQcjhgYkZfKWZQe3loKCE6UDIjK2tucmlAUDBdTC9fWXY5KV92PjxhSVtAa197UCFTNTBfXUpjeE4yXj5WS1FJLEZHa2ZLMFBAai5eRTdfOFtMUDMoLFBYRVR0NVZob1pUN3AzRT8oMiVdKmxqV2VCYClZd20/eip9T1t4X1t4O1kk'@;
put 'ejYrLnp0RzswI0FNXytlPW9NT2MoZHpZfnsvTUNEQmJgW2syKmMiJTZUJlFqeEZlQ2RyeF5SfkthelFqZzpyUS4yQmxTZCtrLGJsdHkyYEVyRTFNMzU0OEZyQ1IpM1VhRDFVXS9PP2p7TyE3XjE3W0VeIiZ9dGw/X3xPazpoblI6KV43UU0peWVxejBmOWZUWSMqdmRfNy9eUCFublp+WXRucC42'@;
put 'a1RAeCVxYWYqUCFrL3g5Ll9FRUZJcG52MXdVeGcocWljb2VCdFZ6VGhHT21YTDhGNH55K3YxU1ZjQ1VVUnB8blBjI1JSbkJSTz1wdHBXZktDIilGbm1mZmlVal81SkQ3Q0U6PDsuYE5YWXRrVXR9SWouVjVlbXZxfnoxdihiWTdXTCZvMEZ7O29gJHx5eilRe2lyOFJNSUlBbTZVezJ1PiJub3Ar'@;
put 'eSFtciw7SzA6Yz1Kdj1pdFZ4JnBlfWhjJUchK3AoaHgzSGN5IltgW0V0UD5yL2Y1bkhIT3ZuaEMsIkw+KFV+e0h6ejIsJXh1ailmVEk7YjElKGAxTW1ZWn5qfVhJfiZFbk9nPVt9UkhUIUosQUwufm02eDBibStOczQxVnA1WDxiLHMiP1drT3w+PzZRU3RIaCRfaVAoP2FRb29ITEZVLzlXWnck'@;
put 'KGgoZUBiaGBCU3pxSDU5UCJ6OU8pOil1PD55OzNreXpRbEpLemNhbW5nImd7PEs6XXkvJCVgfXRtMDQsW1F4ImB3ZDdJWSpTPilQXlNue0xTX0xyayQqKUtYRSlhcV9wP25dczxxOEIiMGk/JVVJWkxFNCQ6e3I4UjBhL3chdzouX3ssSlg5UXdHa08+dSFKV2RSYCtDQU0/W1E/cjYpNiI+Jmla'@;
put 'KXVKbjJjTmJ3cXJRWjVaQ0s3MzFBLyF2QT9QQ2UhemxIcjErOlE9P05hSEV4MD1DQ3lsU3YuTXRIQHQySSMuM3x3OFZlXXd1ZkFTR0k5Q2Y2OnVvTGopNnVIZEBMZ0UqKHZzdXFpSVsqZ150XlBhalFfdHBYKy8vQ1pTdVdXVUEyNDV7PWEjcHk8OHAjfUxyQkcmV1JGJWcrYUxaXT4lMyhJZzBg'@;
put 'c3tEMVJmIiFLNHNuY3RROlUyczVaRWtkI3E9bWV3RnkyKmosdXxKR11iSCJRc3YqWDwmb3dYfit0P25raUcvRTZuWSQpSFJERDlwckZLMCNIbW05ayxEQCFSQXt1eXZPQitPOUUhZngiJS52RX1GVjtee09leSJYdlpCNG5daC9ZOmkjOHt1ZyJgNjQ5JH4obXcyOG5uIytUQ210I1N9WzlrIWE3'@;
put 'K2siPl5FMTRIajsxRHd8cXE3YmldSDZRJls8ZF9AU2Z+JGNbNTYsb3s2MFBFMlN1NSMmR0UqZVUyQ01qUVd+Q2wre2NaeGQyaEB4c1ZBOFJ1KXU0KEQjRihbOXZyUyRnZSJZY0trX1FvNHBtZHIxOWx9YUpGKkckUXZlPls2VWxrQ01Ib0MzTm5DPzduN21RIXBHcUlFKFA7OyQ4KkgzOD0rRDls'@;
put 'a1psW1hIWjZVVTUyMkdLOSNdRyxqdy9HZE48NHhnWj9qZ0hATHt+NDQ9TUhrL250WEEoTWkmZUcpW3F9VHUxNVtfUm9QLEQ/LzpefDdUIT1UfjFsfl9HR08mMCYrWF8yWX1IaEZILCIsfTtJNXAjbWZGPXtZdUJFUz9ocnIrJV17QWpkWWtNRHlSLCkxblM+Omw1RWRZbkxOX2YkP0l0bHxGcVFk'@;
put 'akwrYDVzeVd3MTZpbjFbcmZ8fCl+YmdJfDVALkpGV3h7aiRLIiUmYVRuLHEiOU85SXFlLG1WYnU3WVEqeTdrUXNGcDdPRiJPYDIiWW0sfTk3Tm4pKE0/U0ZjZ1JkSyZDYDhVWD9NZXFkSDszYSEpYX1fUy5xU2RRelRuRnwzN3xbRGs4VC9jQ2dTNFQmY0UpKn5qb3NYUE84JHZxVSMjP2A/JHo+'@;
put 'RVZxaXlVaTdqQ2FPQ21nUXg2LmowPXFQemJrVyI/fUZAZERfOThCcjY5T2ZeW1UwOTZkZnJzPSM3Q2laanAvbUJSOFpZLCJzQW4sRVpkT1VvK3I9fitZdntTOGlIVl5pJmRXe1spUytqfGNuJVB3bmNkLmNQRDhqNiQ8fFg8Qj94enM5TE9ZaHY5bFp6SkFzKzYhIUBMa05oX0hWV2khbEdvb1pP'@;
put 'ZSw9VTsqU1U3WjFpQyYkb0RMYSx4SnhVKERlSmBhNF08L0suaVtJPCFiLjJYOVdmfUlrWF8/XzdiVk1oT0JpN183Zl5hLGNGNkBleTkhSUQpZyMiTCl2OFVtVFt+IyY9TWtEST5bNSpFajhrYGRzYns6ZVUmfC9daXhHdV9pJCt0MmBvPzpkPzc1JG1ZTW5aS28vP1V0VzclZG1PPUVDSmVdTyRv'@;
put 'I110WkUxL0N5bjNeOUlSVnVjVVd1NUUzRHN6Py87eDokdExHMz9MPlQsWkpkN0FVK1BTJTE4TS9eOXc0IWlRKEAoRk1ZMUh3fXRnSkw0NDhtOFd0IzlKbGtlaH5oPFhHeC5PKl9fY3JofWE1Tk02ViNzbFBpIXdgcmFodVdiNEs+LiRmKDl4L3RUZFEjJE5YOD0pWi8vUSM3LCMhWTZXNilkXWNJ'@;
put 'byt9KEI4eyRKVyFPM142cXd3VjJiRWNzSmlZazlmMGNXQStEIj14bD0yOH1ET0xeW2dvNFt8U19LaHspTUhzVWA8M2tbKE1TZSNwXmoick5saSJMWSkpQ1ZUK0k2cj0zbTswZmVDMUl5NiM+ZWNrIX5AYnNVa1MveiolJntdPGE0Lm9jb3AiNXExKzV1PDF6cW8laltSZWgrdHNAYEZGRD8qJXhS'@;
put 'VTRFeS9HM0Z6JV9tOT53QCwwQ0V7eCFmZSxSfEtGOEckcHxdWj9tMSo7ZUt6dnojYG1RaGczbW59XzBdWSJKPCsqRkdCVltdXkZOIipXKyJ5ZDhIRj17cTNQZ1YpWzEqVmZlci5eYEtXV2IlaEpyMCtCOm9dMihJR1d3cWF0eW43Ukk+PVFyMnppLChXc2ZwfDVoJlFNeVEoX0t7Y2J+TmcpQCgs'@;
put 'Ym98SGU0dUYiejN5c2p0QkRSL21hVUtXI1d9ZXJ+fjFafCJWfDlMMVVUSFYrKDwlZnh9UGRkL0g6MTNscVFvLyxESzt5Okp4a21BUVZVPHluczcvRTMxYTMxKkU+LFh3NGU6OWlnOD1jbHVdOUxQX1MqdzFkPHRMW2FPR0c6ei9TKjZscCNraS8zX2dHRUh0I09gU3Z8dC9mW1VPcT5RKnhWeDgj'@;
put 'MH1USlhJfC42MSJ+empeKFlKbixaaU5Zb1ZMZSlDfGQoNEJML0NuUENncD93YVNFVjp2JG9vOiNld0NKZj0sUUtZSCZMWHhgdihDR1RiSzZkWHU5fWhMSHA2TH5oL3RyVHl0PHczNzwoSVNtYi4wV0dMWD5DR05mQnF+UkhJeGV8R3JPK2luVU14Zj9HcE0/YltJS3hkUF18IlZKPUx5REArISw2'@;
put 'N0UrfmJyL0V+aCFHQU9bUmQkYnFAcE43NUN3KDFUIUFebG1wLD0pbC81Wkc+KnAyXXM5OlAmIT92K115d29EbSQ1SH1sOTAyPkA2UTokTH1oMjA8ZDhlIWxWLElnUV5RWWsuSkw0cGZKUXdJcVVyKXtHQUc+OShLWVd2Zm8qUzxOOSYqVnM0d2JEfm5yWlBYfDdjaD03eWNCfHZON2pWZCUiISlz'@;
put 'PC4wXXZHenA0WEIlajM6dGp7QCZlT2xMbVAiZ0FNeFB0bDB1JUhIRUMrKWdranElLmxjdVFVT1BPUlF3ZylbdXBCUHwzJFZXMT5CLHMzY3BVXiMmX28uWSwuaCVZIUY2Ul52KVMjWlJDJWZEJTA/TTAoUzw8MiJMYn46PktDRi5veHxCb08/bDFudGdVVzA6fiUhUG4wUzlDfWNmeDxCcEwvcyJS'@;
put 'Xy9jNmImWGQhKVAkfDhZT1dkfjFLO2RWPSJIUUx9ci5hYzk2Sndoa09MdT5PKXIpPDQ/ZUdxQV11LHB3MEVaaSNrRU56P0R9di5iSSV9OUVzVisrcEszfihlTWo/SDE8ezJAUTl9N0JbZ1VCRiNdVzNiSHlpR01WODA6YTk6Ul0kb3BfeT8md1AqQW1WP1RMI182M1doNEFGUVZHRE96NXFFTlEk'@;
put 'YTc3VTEsMkIvbUp4SHNya3ljaSh6TjMhTU1OOm8+Izt7Lj4lWjpNM1B6VTlCWzZOcmcidChfYDosRE55STIhZ1h3KX49KV5eV1tIKDdsJGg4UCw7M3UjNnE8WjsqZFRVKS8ifCZdYDgrdkUoMVhPWmZgKCo4SkorUnxHRWwmSjIsW09xSyk9JUkwZmtaRTtHZF9Ld3JVW0FBdSpzMkpab1c6KXhH'@;
put 'aSx9OGEjSFldT0JfLzN3QVNZPHQ0I0omeHtHSGVyPGtndCZVO0NQT24rXSxOQm1meCgmRkhPNTs2dForLDx0RG5gWTtzcUBtWkpaUz9qSz9+OSltQio6dEd4d3B3ZENPXzJjWFRwfnF7PyNyJkNIQns7NDYkZ3tpQGNlYXV7cF4+JHZZSXN+aVFuRW1YeDdiOltGYzdJZHB+dDYvJU0vMFt1JSkw'@;
put 'OlhZd3NOXy5GIWQmS0ZKSS95XTtMJFUqVHF9Nl41WjxaUms7e0lzdCYkU1RITFk7MGJeNmk/Okh2XyRhPmFnfiMmeXJdPnklZFFpQjdELGVFW25YWHlJUkBGb1prdVApT15SZT5RemIyI2RFWnk4SiVZSlROJVVoOTE/W0tRTElANiJyT2lMRDkuRX14RG0qQ3xzP3NBSVY2M1VAeERrPE9pR21F'@;
put 'PF1RblN6LG92KmxHdy5lSCxFbzM8fUltdU1aKjZuKURJdmh1ZWIoLzZsSzk5OVh4Sk5BXj5KLCMhVUtGaVVeW0F5dXQ0Sz4+aUtjd1chU1k2V35TWHgwbSE/LkI1L1JxZ2VOJiMiLyQheTxZXUNZWFI3IUx1RT1pUi9kclhGUTVjc3w1PGBsSD8xQmMrd1VfUCZdMlNHVFNXcCoqclVxTCImVE48'@;
put 'Ql42eCs0Y1h2VTloWmBKQUNYRGF5aV5XWXs2Qm9BNVtOcUhHbVA1SkBdMHw7KE8+NFNTOlFwMnx4RWZ1YU5DUE1hMH1sMjh3WTNQQ2trZSlhN3RiTWUpanh7NUk2VHV6Y35rcSREXlJGNT56SUp6b15iYS5eIjZ6X1gmeUsoPE1YbzFpVUg2W0tPOTxiWFVnImh+QFgkYnYkYD4kVWQ+Slc7OmN2'@;
put 'd3dzN11QQ1FqTmBANUxSZUJ9dWtKPXM4RCZRMj5Mej1FQnR1JC53fFJ1XTFeUHB5LlglQihPZWVOZ2wqNjYvaztnQCVpIzcxMXxkNU5JT31iRDYpb15dXWFxNWJTQFc2STxAYzp6ezRubCskPEklK3N4MTpqLlF3UkdbV2kmMFRsdHV3YkMrInopcGlnemBEZjRqYmBfMnYqSXZqXix5VWMwe2Zt'@;
put 'NTgvbzx+SCZeN21uZ1RtSHB7R1tPYHwzKjAxMDU7anh3P3Y1ajlsV19NSW94LDlraGZmdywxQjN8YS5mVmo7T0Nkc1pGRUw6Z2UhPVZKVnw7cTA7WC5rcnxBQCViS1Fna2lVciVdZCg3IXFuKUNSeUs+RThCUzVMPndBc3dRWEk1fmI1SWdxfmV+b01oQ0xFT211SlgxVSkhaH4oQnQ/R14/cXUr'@;
put 'Zm09fSVYcV1SRF1sSTxuI0t2T1UqOEAlcDJuYXF4aikvTHtIYTVed1BAbGI8QSpfITxyaGYjIltQVUppKnlaPjxCW34+MD5XUWBnJGFtI1tuOjRHMiU3dGglOnltOjU5KTUjZ0pjZVF3Z1dXR1tUVHFLVHdZWy52SzwiVzp7Q0Q+TTFdSztqaSZdUmp9R2gkTmYhOU5PKEhON3peXlNsKEFJMC5A'@;
put 'M2pdMS9NdUM8UmVEPGRTOnFRUTwzc1NnfWkuLzVUOExOQ1l7P0R0bFhQIzNwZFdvJTc7dC4pOixIcXdOR3kwYFI/Z0pYYjppJldUPl9yKmJZWH4uZ353PWAkb0Z4Y1JdRVBOQnF6LEt7NFJmTF9kKWcoTTtkakRzayQxXmE0dys+VmIuSTJVUEtsVSNGR1RISz5eIiRbVmg0WmJdXXppSHNlZWVQ'@;
put 'XzRHMzF2fk42OmRfTSRydm14b2oqV2ldfCxjM11NTWRSUjEya1FpeXlLZjUwK3JwbFhkUCRHTyhmdllwbEsyYnthR0tkXkYrUXN1QFNiUzk0SjVxdnVlbXkuWUMiOUdjdTl6KDwrQCpTXm8zVVIxNXRlUDVSI2liMC5WZHFCX2heWUo/eChlLllrUnBnLklbY2ttamwmWDNPel1eclk9ZkxUQXVl'@;
put 'WDtoJj1QW1ByVl1WTEZFbCYpam1HaEo0NFd1K3B7Z1A1M24oOjVVfUB5OCNoZDs8UjhtR0g2ZUtjc0BbPU1UZWhnSUVRQkZ5ZG9hclFLbmZpRGZSWDE9U0oyZS9IJTQpc0d4KEpNXSpJNTFTd3Zdcn07PjNxXStaRWJ2cn5kO3JuPmJHdWk0I2tTakQoUER9ODAsaVhsQTckbEpsLFE6eSw1TkR5'@;
put 'ZWAhPEBJVnVnKDtpSlgwLzRUfE9OdV80dEJvaDtrQiNZU18scXM2OilFfHJdQkcsJD1CV3YmWnBoeSs/KmUwIT5rO31AXVBjZis/MHxLYmd6PVEkZVpCOEl9blV+VkQ6UFljcC5ndzkjcXxOMHBVaVt6LnZCT3QwKEdrYU0pc1VrKzNObkw3N2EvI3R3PFE8KzhTYzA4S0hXV0IhV1k+anlYU1lN'@;
put 'cSEzQEBxOEJOOXBNPHV5Im9zaHYjK1BfUEE9Vn0jeSRUX05qTDs8aUh6MkY+LkRnYSw7UzlzRUwjP3xtUGU0T2ZBTz9RTl1KUTY/VkR3cixJRGc3MkExRWhodV93PnNPQ2BAOCEuOzFZP3U8Q0xnUE8we2QlOTR2c10sQ149Rm13KUMuazRjfl1XaiIqdGxib31WXSxMYypHZGgxdlVOMWVlcyFD'@;
put 'SGApV3ZeLjhmcjVPLD11QXo8OUF2I2h2SilhXmF3X1ZUb2V5bFRAcS8mQzVWdjFfMTRBdV5vWj53QT9QayEmPF5YYiRZS0tZSFgoZj5UREJoNT9WPm8oMm5nc2JIPzJaL0ZAP2QzaE5VaGAxTjRaPmJHSUd3dl43My8uRDdoT0NtYStzViEjU0pEVmRWOF1mUmR4L1B9KkM5UkRfNGBpP1ssJU5k'@;
put 'bj5MKFJUMzpKaS9aeW5Pfn54bWZLNyxxSlFWfFYwLDNGZFJhdjkoUHclWEZINE51V0Rpei9nUUJ6bjhKd3dyREtHUz14Wzd7bmNYciI3e2UuamZwZWJaeXcrQ3VKYkxjbmJSb0I6SVFOcWFHVX1bRDFQWkV8ekdLPnlVUSp1VmVEYiM1Vkc+MT8/X1phV2ZOO2gvJTUxRDJEPXp8LFAheWdpeGd5'@;
put 'bjg+eihnVDQueFBlcTIyTVNtQTtpPGs0TVhWPkBaXjJ0e3hkfFEoXW90ZSE2O084I0d0KWMxYWRaSyNhTStKYGFbUFR0OGJJVzdiaCtPX1V3ZTZLQEJoYERPI0dZP29+ViJJN1NDQVpGbX12UV5dR0FnJSFmfkF0ej47aTY+fWdUMCx1UiVAXyVTTkhgMjg7RD4oZWYyeXc3dCVLNVJpQXN0Lks4'@;
put 'PDdxNVEwJVBhfjt8O0poUyNVX2FAeG1LUkNYcER3Nk53MHNCPVVSOip8PmtxJDB7Smh9b1l0Xk02d2JYJXN+Z3pkRi58anhZJjxXSlhRN1ooZ3k4OWQpc2wxYF5hbzU2bUdvSzopOmFeZlN3eGEyYSY3aT8vcFNiUnc5VHQsKDRfZ1pWdEM+STtLXWw6bEpzZT59ZXk5dm95QUdpNC92aikreE9t'@;
put 'MElqZipZaVZOUnpqYHM8YzVZeHlEekV4aSIhQ3dfJkU9UTFXN212e3Q1NWU3bjVId3FWUWU3QC8mQmZ3ITdiQDM+OnoofiZLMFIsZS8xQ2o5ZkZfQSJ7UjltR2E0fWdPb18oPz4lM0ROMytOb0BIMyJoaz1ELDFwUCRCa0llRiVnb2FSOGxBZmhONlBTUUl0JkZVMW5EcjtDcGgxQnomaWcyN31F'@;
put 'SW8hRSJPSl5HRytNWX0uWTdxV1puaH1yZSlufjpSLiEpXVhJQSU1OkkkW1UrdDlYTzsyJEpifSNKRkoyMHB1T2FUUVRuX1FqZlhrfWh3L3ZJd3I8Z2B4fW5aQmEhbkdya143ajp2O1dDeHtDKn5BNDh8KEEldWRtcV9wdixSWV8wRGU4ZF5qTCxIaFYmcWdwMj9eSGJbKHclZDJ9KWxDQ0R8aT02'@;
put 'NDJRNHZRcVpfYlk1ZHtSektqe3ZAfTVzTVtUXURuRDlUK2pEOUxrWyM7Nio3VywwJWZ2e3Y+X0Uldlt6Py8uP30pNk1uVWQ8fHopcSVLeEZfYXswU25PRVp4aU12KUtOfT88enBLeSEmRXpzRzFyWTxDREd6OH02VmdIU1djP0JKYzgxZ0tmKXhjRj9QOnZ7MjklayR1WDtLWW05NXledVFjeHJ1'@;
put 'UGQ3JkVlUDdRQ3dmRXZGYW92cTJocXlCSHJvNDlIJCRGTl9Db147UUgkdUVeZzBqQ3gye0E4ZlRHIzEpUmYiP29EO249LHlCUClVPFVBYmVyfG54YD98XyE7LEg8eD9qOS9XLk47MHAmUEtpaE1aQnsiSUltNFpZIix6UEM/Y2MyV1tlfGJvRE5BeT0/KSE2NzBQYzFhM3dkVGVNN25vbixXVCZt'@;
put 'bjYze31KW3VrMT0iaSl7Rk95TE4rdjQpKS4+LkF3TWxmRG4xbyVbbmlkXX1lX3FwPnBZVEdaa0ZIKz5mez4/MzojP0FvPXFVZ3pscWE+LiN6SjJ0aHlsaUR0Pkw9VXgyVmZ4V2NqQVAlSHs7M3NuM31JLGlJdTxTd2c7MCNIUFNVPWNbPnVVcSRaL2VnOSo/MlVpPThISDJYeUBHQlkzbEZBM1pg'@;
put 'e0Y1fXFAXnEufXZ0SS9kMH5xKWgjMVpNUEJoNmYvMDQvenFnfFBpSF8yeFZvdHwwX2ApOEBASHJHPXBxUy9qS3BNejh8NDVKajBaenUkV35wY3RYOX1CNHNCYHttOyhSQ3ExPXB1KGhFbyR5ez0ybz9pcHVwbTo3V31KWFhTWklBJX05U0N1cFF1VixYcGRLczxBZX5LLjJUaE99Q2pHWUc+T1sl'@;
put 'YDlmbW1hfGlnKDArbmsveWFTIjlePzlRTT9aJUY2fC9jTVMmWV8pNGtVJlhIRXU9WDt9OnJ7KGh6MEYhK0ZnOk5sZWAmO1UxeHYyTSJNMzFDWzR0O1lhYlAhZzE+KUxUO0h2fCl0fXtWUiZeZ2htUjJ8Wkx1TkZTZXBrZFBDampTNVkrYVg4PHIsMGskeEY/eTs7QktfZ0h7ck96Ml5OX0daekg2'@;
put 'TzF6UkRiLktvI2d1eHM7aChyQFtSO0ohOkREbUp7JnNmKmtuOXtBZiRWTkVPY2Y8KXx4dyg7PkBqRGpzdnh1TU1BRjJlWVc0fUY5dlV8Vlo8YUlUNnRobHxkNWQ8RHVVWz0iQykoOEpta0ZWMVN+K045WHZsNWRrRWNqX3l7aXNyJXx4Rl1fUDBfQF1iVThNUyEmPlVAdnxgKFB0RzooZixYWmkp'@;
put 'QTF2U3BgV3lWSzQoOjkxTWFtfmBMSE5NWH1dWEpsMCtZWD0vViUsP1Q5cDdEPUgmUXdMeHBRLEY6Qi5tak57LHwxT3szbilMOCh5X1FQNl5SQn0wPjV7ezV3eCxeXyJgdF0qWzFhVCkpKEBUOkV7ezZaeEU/NT4zVkJYcmtbRj5+MVAlOChfaGpYJkBgdktDTD98cjssOjFhZWJtKlk2UmxFVzV9'@;
put 'eiN5WUhPITZeUmx6d00pRzwrYDd0bE95Pn5ET0pYM1tEdGVzbGhoe0MlV0d3cXtKWnI2YHVNYjRQdHshN0ZWXmFxUmhgJUBOfVJaYyw+bzJ3I2w7eVR0XyM1RWhSR35GbX18UnlrPCIveWdSVS8zfGtMNGgzX2twcVlEeXxwWzpBclhLTUhZODZAfEQ8InxOU3QrekswVCEvJkcrIkwiPj9oP3g1'@;
put 'd15rSjhvbXl8dWA8V2xeSl4zMXdgWzxxRHt3LGJyV1dZUGZoeVRiNTtzciJrLEVJSy9NeEYlanhfOHFGIl5yJlo8bEklRGddMCZlaTtzPW90ImxKV0pYckZwZUZNe0BdVlAucz9AVnl5MiM2QE57SmYyPWhLU2UoaCtgK2AiP09jMCEhNDMmYjdLNG5fTntrTHwlZiFpO2k4d2NBOlFzSHBFbUZ1'@;
put 'RXgheVVvUUQueH5TIUdIYkQxSXZ5YCV6Sj5ZKmlXbzUybEUicVRPMFtGdCNNZnNzQzw1cH4vUm1EWG4qWyN1fER8LEcyRlAoZnZ2bXFdWkQ5V1pPYiF4aEZ2Y2E6QHF+aVNXJjRbPnRxMFQ2IyRZSXo0Z0M0Iz1Ddlk5KXQzSFJEIWAmZ1tzYmFee0ZoRWxzMH1pW0IiIX4oWztKfFZjX1gpT2de'@;
put 'djg+VXkvNmhLI1BLcTF7MTRFel41WHY1dndITkYxSnI0UzBodGdxVT4ianc+fDtTUGI2fTs+d1FaTVI5Yz49O00sV1IiN3VaWWAkeSNnLiY6aS8+WFd+ND5YL1lVZVA0ODo4PF1VNCpeV1tmbFVaISFfdUs1WmglL0ZgKF8uW1F+b0chSmE5IUh+T0VZZ0Zdak5vPkI2cmo/TW1CY2NzdzAlJmRE'@;
put 'XnQ2Omcmdl1VIlFCclFuPmh3L31GOGRRRkIxOz82cXJ0IU1leG1LKyFhZyFzW1Z3NG5HbCFPdiJRJU5UbDdgOChVVmZNYj45Kllrckw2U2ttS05ebj1UWHFgUmQkV2V7VCx0b1ZZQ35jMSp5NGU6KTBKMmdHVkRyeHlQVkw3eDkoXURQQy52VERlZFByQVhSM3FhZEBOdTN7fS8lXj1XeVI1QFs/'@;
put 'Yzt8WnZ5PkU4UjZ+RDdiZzdELjNMLiZbbjo0RypzJFd9eEAhPH5kYVg4YzpiJltPVXp6cUlLPzJnOyE9ME0jO1YrJmdjZDEvRmR5RitYTHM+fnFMfjB1bGtxcSJLKHtYPjBIWEp8QyR6dVd9ezNAKSZSPXVRRDVmZ31jZihgcjY3bE5ZakBxV2ZoL0taPCR6OSpZYzw+b202N0UjTTRZOFV1OlJg'@;
put 'OHFWaUZqIk87YHlIeml4NX1RMmxQZD9JckY8M3FvQWdiWDhDXVVPRHtwOjRpLkVIOUdYOCM9ZjN1RWc5cWxmcVpmdHVmYDFpNVJYMUo6O18+YVlGSk4hcU52Lll5NH4vKFE9JHgrRz9LbWpOTlljIjtSNEB8RiNfRkNOJiRwaktMeig5Km5ZWXsreHFvOlU+Tj8wTDQkPGoqX2hWbzsyLzQrYHA5'@;
put 'TDVdW0JDckdhX1s7KTJvYj51PlIwcEUrWXA5NWFyc3pMNl06T0w2Lno9NXIvcHhmcFshISo5RkBHVl9DbXk6ejg3Y0R9YHVJPXl8Kyx0TENBYWglPjFxcE5Le1RLejFgWnR4OmxNST5hJDBiI3pKajVhRUIzb3lQUTFhQ1FzTWZYYypITUBdfk4+NCRpfmlKViFRSXx9OTMobSQmPEM8IXVLX2g/'@;
put 'e2RxPmc7Xmd2cGJDXSM2OkNRYnpZVllgOURuTjU+KyN6JUd+cHlgJUtzbS4/XVlja0hAK1Z+WVd8I3J6PStZKiphcnU/IjFZOEs+QHc0I3xqdnh3SzBqUHlJZDMwKTBrXUFyfT03VHhANV0xfUBZQVJAZWhlaH50eVkpKkQpUUF7OXcsTDgze00lLGUsfj12Wk4zX0FLbS40IV5BWDM1WFIpX2FG'@;
put 'cldrcmdbP1AubDluS1lpe3xXNGRgU2lYOX5LMChsQSVTa2wkfmxae0VsRmdOZU5Vb2YrNkRwV1AheTt2WHlzM0khQWJUdDlIUDpWbDx2NWpZYD9aRyxnNkR8REdzYUtLJTFrclJONkpVSk5WfXAjO31mOVc1dCVqWld0NG0oN2pZRWpwJWxCZ3loUlBZLH0uQzZkQDZqSXJkaSNsUWI+IVE7TyV2'@;
put 'VDtDNn10SHMjfDdWMCJQSklxaEAldFolRW90K30zYVdON2B9P1FERkNmMS9MYkcqZ2NYe1FqWig8Pjl8ODdVU0pwbzFPaXF8MGFwWzF9LFMkQ11Tb2MkOkNGQSxAfnRxKmVsTlszanZAazcuKyI/diloVD5OJmlBI3NgSUhOWFJrNU0ieSEqX0dHRlJRPjU+TC49THE4Rn05cXdUU1dEQysqIV56'@;
put 'ZUtsTXElKXh8MmUyZkZ8e28rW2hAKEZ5dj9wV05VVGI5dDo6X142WFdvLjRSPUMwMHFjZSt3P3x6O1RsRGI1Z3Y5Ry8ibj9mR2l3RyJNdm19TV14Z3puK1tRUGdQUFVaKSxyU3tROzszbVluIjlJfVlMUXZ3VmVsSz4kRXQlezwxQE8ja017Xl12O3QrQHR9NUZAYGZ4cztCejBDail5YEFPbmlP'@;
put 'NkA5XzFVS0RZWFBfMVpkZH1XVlFVfmRgS28sNik4bjRNZms1ITFHaXMkPy91bHNrbytROy9NX1NROilzWWAxZiM4cypuOFE4eTZuLmpKeCxaWl1PUSRSd2RNcCR9RC9VdUNzMS49UVh3RGgidVRfLCplNkF3ZSRraVVeKlhbaF1fOjlHTmdDdzZeNXcxNlhZMFU/Y2BVP1BkNWRQQGlIUSYiY14h'@;
put 'Q283dG8vWVRLezpmRHRLNi9XNmAsQm8raE5bbzNHTFpNc2s1MVUrbGM6MEkuMzFFRUpwUW1OTUx8LDFKOHl4LnN6Wy9sW19SL05gZDIwLmVwVXVORjZldF9tbXgzeFpbZlhpdShDL3o2c2QzJmR4Y2BvJm5BIXBsU3ckWWY8T0RvUzJbMW9Gfiove0pudFhHTGh3WDBdSVI/IUN2I3VTKnApO0BB'@;
put 'JEokdyx1V2d2XzBsI1NWQjZMNSkxeCp1eTtfez5+XV1hcVc/W1dAJiNmOCR1VjRsKFc7WkpIPGsjMFN9WEkxI2xnPz1yPCpEQ0oyZCwwJVtRczJ8SUI2XV86JmxedT93NXNyY2VHMWJeWDI1PCh5bHsvVmJoaE4kW1ZoOm1fayIjNTVlYExkRnFEPnhxfmldfiRjaXw8eWN7Iz9FQH11YXI/L1VV'@;
put 'QmJOd0BXS1JDUzs3YmRrbD4lN0VOP3dSOWVaWHg4IUd7R1lmaU54ZyFYP0A/STxmOC83ZCRYWGZJSF5JVyNMcCs5ImFSNHdXWHZHJD4rW3p2Rjx2WXw1U0JpelJ+QHF2ZVt2c3FpQDB1LHRyYm9XQiE9WFRWa3BQTGdHYX1sMGg4UX5majtCUnN8InJBPTI9MmtiV1FuIjYkKUBMSXI4KHIjcT97'@;
put 'ZjNUanpsMkt2dkA2Q3pSY2oqfjBuUWsvNU8wOiFeRTZMQUpWRUFeYStLJThzYEZ9Y1Q5NlZhTDtSLCI7PyNEcWwzJWhSfG51U2d2PXRRayFySV1jOCZOTEh9NE59aUJmdjRmZW5UYiNMIjYiMUdOUkM7bmBLM115OjpiI0dWLCY4RVcwOlR1S05vcTRPN1huYjQvWDRqUWxqQV13dVQ4MiQrOEx0'@;
put 'MkVyLDl9W0hqQGlYSTlsQGNYfWJGTlg0bjdKKTZaQCojNWp1e3xjeUVDVlQ6akZXQX5PMXhkVzt8JGspamZgOytEVzYqWWx6QHF6PjghdHZCbl9FVHIqQDhLe2hCQGpsRU5RSi8qYSlXc2p2TTBpXlFtLjxoVUlyNGBaUlZkTF5fbzBOLy9vN3x2eTprVj9IaU4lXjB2d3xXPFpZeHNsTjV6eFd5'@;
put 'P21NcyxYaVE8XjVTJTsvbjMoYTFEZVVVYG5QOE5SfX1NK11KWE0qaD5vIVZJcjQ9Q2MkIXdlfU1lfipuSSF6Rj1BTmdrWCxORG5ScFVuLD8yeFNzYGpkYFRZXkRqS2NjQ1J6bC93YGtbRVNmOTdFVkdNfWFNZ2ppJCoyXVZmMi9Ea0ZyYiEud3J9UH4wYS84SDM5cmpOe3dSImBlYTIyQy4lRCQh'@;
put 'YjdJdGN3UF5Wait2SHlYc3sxPWNoWTF6YCY+bGwjXyIsdHhzP0lJYUd8W1srTkIpRF4oKFtpK1pETzI+TU9CYG5FV2VnRGksPHZUfCROMURASktUekMpc3hjfEJNbiVPKDY+JH5jI2xBJkRvTjwuMy9CQ2NvTzljbjZJXzpXUSRJalBjJmo+Yi5IRWZiO0gqQlosfSxrKWpLZ1IjNSpzR3tiJXI2'@;
put 'WXxBJDxsfmNwcDMkIXckQGxPOUF1PjAkPGpOX3VxcUt2I1tZI15EWWReYSgxOCx9QypmRV5nWlk9UjEuIkU2aV94K3t9LC9fOGpCb0JvbV5XX1Zbdyt6aFJqdjVlc3d1JVd0Ljo3cCFwInlJe2U9XmMuRn00fntqfTQ7fE1gKkxFXVE0dGZqVlV9aTdSQX14Q312NHp5bz1PJiRNS2lUKVslODFG'@;
put 'QXlZYTBqO1tQM0FoWSFbNEdubC5RMk9ELkl9UXN7endGcmlPaWlAczBlWC59e2Q9OU49VUMlSHcmdCw7UUtnekYrTnB4cUNxaU9nS0ZMRUp4PGpiJnNtbltUdWUoZkFEWn1DISglRmBxVTw0aWNSPnxHQFdWdSUvNCYkTTdpYWZsQ3RQeGg2SnNwdXNzVyUwS2x6VntaQDg5IkwoLEc3TU5DP3th'@;
put 'cGhoTT0lMjZVckN5Wn1VIzozJUNoIUpWfT9uZXdhLnYyMj5PN20yN3EuVVA2JjxkeW4uQ3RDV0gmNl8+amo+JmFPP0ArTjllR0FHcDxhYnFocE18WWsve3wjZFpMUH1aeDVtcFs6Ul0jbEJ4JklRPFB4cyo5KCZwbD1YQShbPkMjbFd4K1JwMH0iL1Q9c1J7d0A6TnFTbixmOVE4a195Vk99bjc0'@;
put 'NElPR3c+bnUrMHJrMEUob2hSfEJJYSkzIzVeaTFwcWVHIWlkND09bzVuRmheXVBxKERMXVIiOVRdeDY2Zm9nZVR7JHM/QkliKHxPLyQ1Lj4ycTgre1VRXmdVVyxtPnhMIylBUDwubSVoXzpDZFp2aVpSU1BhQmdgZk1gKjovIzx6OF5GUj9UQ1ZtN0ZWUUtmTWJ2VTZSLyEwemFOWWd6NWt7QiN+'@;
put 'Ykl2WDVlPlcrOkcoelRveGdeUWFEYTdheUg4ZEZ+WzNxfDx2ZEROWWlgVCpIR28+cy4pLjIyVV4maE83OVAxZ2hyUiUhMnVhQnRETmFDaiUkRG8pLmdPLCZxX2JUJHN7KEZdQUlxZDMwR1hHZGFGR2wpTlosTE0sd0Q7SF1Dd1s0NVBlbmwhfT5yJSpvemc6a291UyZjYzw9ayVlLDcwMmQ2Z2Ir'@;
put 'Y21kWls7L1JUWm5AQVg0LEM3fCpudHhGaFVCXTV1Zkw4PjMxMyRANGh9anpaIztjX3ZCcjZ5eE43MUttKD1dY3ZCJShPUCZBdU9+aXplYEl2WyQuXmxIXTcqVUxxWjdJVH1UcWg1WnosZiNgUypra0dzSSpQZ0NDbntpZFV0UmI+WiNZPGt1OztkV0srTn4uei9XKnpuNkFkamR6SUhadzU6PXFE'@;
put 'SkdyckA+VjJ6Y1JwPVZnZV5PKVtoMyV3WCold2t7WGlJLHcxXmo/JXIkaVVudlByXntuWTM0QEIuYl5hViRJM1p+L3Z9bldpIXk5UHRTX10oNk1wdHlpb1B4eDc7fC5laHJAUjZXUHpqXndRcCZCQ206Ozo3JElUTCI0aDQpeV13Ril6NTUjNz9xJUEiIz9mP05wPEBqOGFgIl91OyQqRilJPkw5'@;
put 'TEt2WUJpbm9Ld1hSQ1Z4OEkwaXRsZ31wZiU2WmlwYXoje2EwUiNVQCZBN2tuRkx1WSpFe1U/OlhXYzNrc1U4WjVFUVN9Wk1LPiZHOj5XO31OVDRdQzspbzVJSl8yam5PKHAiZERiUmtgamxSaCghWUY3WXB+Nl1HK1ZMKD0sKkZ4JjBrZGlybkszNGJlJGovdDE0QS52XjdtNykuOTpHVy5eTV9T'@;
put 'dWwoOHhqV1VYfS9scSpzLn1WI0hFUHNEbUx7fChXLy5xN2ssSmpATkNSU0lZSTQ8fURyPFhsT3BGXilCTiZ6UU9iQUcyUTI6LHFyUHs/ZlIiYmgpd2VzSGIieE07Z0JPZF0qOEZ4dkM7UmtkWkZbeGBKakloXT5dNCIkdT1KKG9gI3R8Y1cwbDh1Uj47NFQvd0hVcTZQMHRQQ05pPkAqbHhdXnpa'@;
put 'b0hdVixPX3dpXn18Rm92Z31WWGBoSHxCOE11RFJSNCRiVnw+bFRXaGBCfm1AXWh3PlY9TlpwLjJhTCojUFo5MjtrXzU0STdrPGAuWVd9LzpVUXt1RDh0I0VZXjVGZmZxbUZrKXBbS3VTbSElKDs2QjZXM2dJWTVNTyRQZUouMCkxQHBLWSpmdX5UKnk0WDBKbn09WjB+O0hoZihuSXt4UmozajVB'@;
put 'O0pTRU5ZT2A/W00wNldHbXApYVdFdFZhP3hGMzxyWjlRYCR5QGJEOD9RZUdVYyIiOCZtTXlUcVQ2dG41KG15IyFzbCRVZVFuV0NmfU1Lcz9kRDApWVV+dyJDd31EZnxTPjIzKT5dUlldMDNJVHtfJDxrQ0BVZFZLdXRuO25GR0kuUykuYWhMWzcmdSZrQ2E7L0dOMzp3WGJyMW11a1tfSFFRaVBn'@;
put 'OlhybyldeXFGbVZmdmRbSSZ3dkxdWUNbSTp3Jl9mLiNJezohMTBaKWhgV1F9WkV+cmZzK1U/ZF1zXXc+cGw6aFMvPVBwemwmM0xkUmQqRXU8XyQhNix5U19GfCY7el55R1lxeW5lbllQdkFBdiRdKGFWKWsxcGNYQTJFeHVlPXdsM1RILCVtPTc9YjVnZlhsLyZXelljXmM7JFd7SlsiOmEhZlZ3'@;
put 'XXQ1KDoqXzExPVJUUzNATFR6P0IxaiFyVE5SKkt0QSFMeUU1WSxIS20sW2lwPX1QTV5+UGJ9RkRmME9XQD8xZiM/S2ZFYHV+TyY7SSFgQGIzQF5oVjQmSSJ9RWFVVThLZ3BCaiw+VU8uTiR1L2E2QEMoXVcuZlhdY3xUKylSSChLSXBSRFdHTGAwc191eUUwXzs6OD9+QEwzdEJjVTYkXUwiV3Ur'@;
put 'QnMiWkxpVzJUPCl1Z0srQiE+IyJHdURsPlY2LCxvI29gNVM0OTxTRjZFMXZWb3cvKHZ3d3E9WWE9ell1MzNebTF0XSxhWFhVWm48KyZxODFWTXc4djhwQ3pZbDlVZWttOHR5eURWTFlWeVBMbTwoW2l+OiVDNEdkM3p1b3lSX2VgVSJjbGhdOElVWm9MX0lmcDtrQjoja0s5dj5NRSQlNHR4VUVJ'@;
put 'JGJwUEpyNVdPXjh+KUdqVSYkez07QUFgUG16UnB3TDQqI0kmRi5mLz5VMkY5fll9WC5fRzlIOW9oQDhPYW4ydUtOVzxiRHlgZy4kK3NqTjEzbTQ+UGJ2Ym0pZD1MVjAsfnlUI001ZGRwM3gwLEEufDhMd2wofHksdHtuXzt6T35TakNSR2ltS1U9KWUwOWY9Q25MZ0JJLDRJTXBnSnMjfGVifTI0'@;
put 'Jjg3RnRwXyhTNi8wdkcpUT9qTFV5QHV5OWQqaVBKP2tzM1RNcmYhYjlQVD9sQFpEfVpGVkxgMUgxNFkzaFs8M19maiwsKVdbPixmcnxNOmkiK008THBIRnQsdnhULGZ1VDdaZEZBPHxUOTV9cktUWDRCNEAxUilGWnhQPUk1aFk2SGJHeDciK2BqR0heSXRlaVkme1Vld3pgN1V8QzkqJl1IT1lW'@;
put 'W2RPPy5EUCUsamFoWVhdaWlVdWdCOVd0cVVCTClNZEwyWzFAZVVjXU1DVCFGPUpzNXtOTV9Fa2FAK2o7Sjd1RjEiLFtfa0x8V2N3QVQ3SCwoRUU0LlJXW3VXVC9SVF9LKHYqWGNgT30zZC5eaEReUHh5bWt+fjczUEY/ZH1jPVdkU0crbCU4OjxBKVZUYHEwQz5INyMkaFU7VXp1IUpZZy5VbUtN'@;
put 'Tj4ySkojV1hPSUdsN1dIZC5qSWsveC5pW1l7JVQ6M0hebDE1YCYsOXlrPlR6bT9oSk8lSl8rTD5ePFFpSE5qZWRTTVFUcGtAYiNEIXc0JlVXMCk9c0pqMjNmcnB4UD4wSDtFYXJ0W2l2RXNQJHxUP3drJDBDeXNDLmQ2JWI7KD1qTXFCW3lpYnh+NVlwMGprNzh6T3pGRV9aPEJhNGVVWG5qOSo9'@;
put 'MkN3ZTVJLFt5a3R5MTdjZkxhSSlIKlI/KFVnZDw5ZW0/bi44TGpJREtLN3Vxe047NXZEY3kmZ0khSlV4QnlTS05GVkgyVURlKUYmRjJOVi9gaUZPZlVgUko8V2spYVhPMT1UJG1zXT4kYSt3USZRcXplYUJyfXg6UCxgM1RWYXRAcTE4U0YvRHBpd3pHZ3BqOFRfW2hOPT9Jc1V6ckRkVSxGeitR'@;
put 'Iz9PV0Z+V1BBbDsqPFREKVIlTHV4QnNsJWBCTXkwd342SERqIV9nZCwmdWxuaGAkfFpFN0glTXEiRltXTGk3P3ZYcTYhMkwyTWwuI2pQRERUPnhbYjtJNVJLQXVgXWhvW0YuOTVbanklLmYoPU0+XXshSndoOHZhO0NDJTJMPChTezclcTpGcF1BP21UbnpYZ09gVmpDRzU3Knk3YkR0ZFpKaVJl'@;
put 'Y315My8ocWkpK1lmJC8ub1kubWVffGBoLEt3b1I9cjdfWTRjUkRhJF1pLFsmOnhUJUk/ZlEpPSEzQj5jLjJZRn1yUSR8O2dQLkMqLzc+O05ARmhZMEl0RlBzQEMsX2RVfHw+YllgRSJrNUZAYzgyVnB6MUNJLkQqOUUya3tPZVB2LyNyWmszdlI6OjFqelRXSH5Gfnt4fEBBWzJTdSEjPEVfan1Z'@;
put 'TDl7UGBlQjh1KiNXVykjPG87OWRNJXh2OVBBOj0jdyR4Z3lfc0xgKil5OGV5dCZsPkpPaXgyfWl0YG1FamtWRSomdkVbYjhlL3JQSVMpS0xmcWlhIVBLdD5YbEJjLFt6bXpbS3RNWCM/T0hUIkt8SjxeUEQ1Z2xBdjdIOD1rIloyTjFTYzx6SlhBcGBDNEZPUjJbaz5Xck9Nc1YseF5baFVqVj9B'@;
put 'NHE8MTNMX2I/K3ElR0VsciNZM3wmTTVMNmV9d2ZbblFuWUU0Pys9SUImalJ8Kl5jcTZ9PFkuYyskNno+JCEhd1loc0BwRnhDdU95OFcoPFRLOj5VL19XQWElQiVHTEs0Oml3JW07Nm9dUFA0THgrXTNXT1E6NjZtPjUuIUBkQjBuc2tiakZwTiVBIl12WFkmNmZETyE1M09OLl1lQSkpMTpsbH14'@;
put 'Sl45YiNFOmtCSHdKcVdJT3lzMXpXeSEsdCo3ITt5a28paXVCPktUeikpNTw8SWNmTEUyMUIxYlpke2MjL2FANzNMPlIzNXI4fl59dTAkN1hNXixBXXI6dDgrKT9zY0BVIjJDWklMX3xMQHg+Q15DO31tX21bSDdRO2pibFJieHJmSUlCWEp2JEc1VSFKS3J2a0kzb3Y2LGRsLmw1P3NiUD1oKm5k'@;
put 'MmxmPkJlW0MpLGpFRihHNEM7WXFdeE8oN2U2TXMmVyMuNTkrM2BeSHQsWXdEfklZPTl6RDp2fDFXK3FPW2phanRpPyxmZSkwN0xQOikiOjdqOnBtKX0jM2F7ZiF7TkooXWYpQVFCPi56X2hdU2F2KVRfZCxXQ01yZEV3ZGYlKWEpYVZaIXpGLmVxbEpaQU9XWFJUOHc9NUh5LGdYK1R+cUVfXn1h'@;
put 'UWJ4OCZUeDUsfDVKNDlQfF41LHJAaUxDK3ZJIT5iR00pWkdiL3ZpaHpKT3hmST5ZSnw+OHQ9U35sKUFAaiJNdCZXeHFQOmN2KT1eeFdHOWslWU1DWD5Efm5oRGp4eShqS0JIYGo8WUZSdTczJXZrayJpfVchRD10LytpX35NQlNlSWlVbWB3Q2BNe35TVD1DKlYkYWp2K0NKNWI2OUxySktLLjd+'@;
put 'aiJpXnMlNl95QXp1dSlqbE80bHMuKz1MVVolSGVkdCR8OmkjRmM7SkVDLjZATjMvdlR8cyFJTUlPOXhwdXVMQU5IPkBge3NTb3AlaiRRVXdGPEVGQi8oRUdkYjJ+XWQ8czU8djp2Z29Jd3FRKnRSNmY2amhKJmB3Qkk7TUt3NloxIU8iIW9NT2I0VW1UTnkuKko/QUVReDhraWI6QkV6VlpwKDB2'@;
put 'UlM1dmxkXT0xKXBmQXZJOFY/eyN2TiEuSjg2YyRpQF9+QCMqeS5fc31GMyUhME1+SWtfbG99XVEpczMxN3BWSFJ+ZjhfTF41Nnp2Wi9xTHdMVj55fnY6PCYkc0tZZ1tTRl9TbjdSWWwmc0U0WGI5Z0A3NWJeYlkpXmEmcSw6Q2NPc1giQypRMnVeVEMrMy48ckFDaChdSVFbcnZxV1swc3NFL0pJ'@;
put 'fWY/Sy90XVI0dEY1TWBrJWN3dX1ZLjBoK35KOTpCXyY0Y0lveXskMGB6JW1CJERYNE5rbUh8dCE1MyMpQFJjSShLN2FWSDRXTyRIVXk/fSV6PHNEQEo0Y1Y2KFgofngqeDpaVUkrZVhzK1pDYDshRWBLXko4fFhbWjhdZS82NG9acyNNSl8+TFdGMX1VKklSPiEqNiw6MjI/Olk0YVo3Ji95cFRo'@;
put 'NEcxZys7Snh8dHc8MkM6SntjZCk/OnVxfmpXeipDfnBJZXJOTyFncXAlSD9yOHh0fDd4ckFZbV5RI1U3ODJDPX13S1pEUlVLNXlBeiglOGlAcj83ejJrJWF2ci5FazE8VWcoPUtsMnEmRzBPW0tFLCMqeEdvQHNLTTJMN0RkL1dqVTYpUUJuNDkjOkp1N091L0NYa1QyJig3ZnA1aCo3I3YhI2tn'@;
put 'dWBQM1BFXSg7Yzw6Tz8ySE47IVR2RnxVR0RAfW44SllqaTROIz5MOWJUbFphbG1jNzBIfjZWVTdFWEhfRT1IaHB8ZDsrcmA2QU81QypOW2FDKiE9W1RtcHdIMVolNVJhcUJuOXIlZmxma1VOeC5FOTIhOnN3UE5xK1ElWiN4QHlRbV1jOVdBX0hfbH5GQj9GfmF5THVDKWVEQVYuJl16KXdxWCsy'@;
put 'VGFaUG8uPyNfVXNYOC46LEY5Pld7TmEmXVFtW3JuZ1NJKSRjRj1HMWE4WFlrc1oofG8payE0UHVZLyR3XzxEI29mPnptZHtJdjVadXZNXVhTZ2pnKXBNQVEkN2FYUzclPDtFNF5+PXZtXl5WNElBeDxRXUguPyl0ZSZ5cnVJZjMkTEMhOlJzY35nPFRJVVg6QUsrNUFDMSU4emEvfjF6U1t1P1gs'@;
put 'MnBZIWw/Qn1gOz84S2MwSnluJXp+PnEveCEuOSZwI1F+YUhhPDM1UE8+T3d4LmpCPXlIKyNZMnNGTlFAckY+eFR0QjZKOVRhZkJvJXchTEBQazlVaFMzZzNobGEvTGtvbTd5Mj5abiUxQjtoOjx0O0x1ciwmTFEpZWFJWDZpQDZvVTJDfHNVa044WDxsdytOMHtBJUJMViR4TGBGK29aekI5eWZ7'@;
put 'aGg/MDhqQjR5ciV0cWIlSkxtNnpYYF5UbChmQ3hDIz5PVj84Nnw+P25YRGUoYTExKkUlKD8uMUx1JU1Ffn0vKmckK2tmUEFGRyNBZyNZYWpEVTduTFBzKW9MWntORi9LPEghMiNuK1lxbGBOXUJbMCVYM2ovTmw3az1oPytJTDc5KkVXfDFOWj1XfltqejNKQCR0SzViZF4vZWpJJTtCTzdMVGlg'@;
put 'fXlKLjFYOTNCbS41fSx1dkt5Z1ZpMVVmU2kzKGlmJTpEMjJYN1hiY1tAIW0mI21GZTguYCk2PlIxI2o3KkN3aypAYzA4czJQWnVSVE5NOkR4enVCIz9SLlYpN1ZoPiE6PHFfejA4filLdXRhIjtNWG4yTFY1ISk3MFtsYE18KksvRUI/RVR2S2FBKzc0QXN5XWpGWlZScyxPNktRPExlP2lVUVpM'@;
put 'fi5RNyVxPVRLbX5RbGAuVXFfV0FGPXlKTD9gJS80dUhGQy5yRik/RCwrX3BRUWdDcT5Yb2pkbEczeU1oLERWNUZpbW8qNE53O2pnXzRVcyErUSomKHJAVnVQPXUoOSFqcjxscVE2RnpPRyRUXXgvPm1RUkMpTFtgTlFebUE0Z3p5di4uY2YhTWViam5UWXxOMWwrTz5DJFA4VTZDc3U/Ln1TbTJ3'@;
put 'Q0t2JnpZKkhoSjt7NSUocHo4Nks0Kl9HKywvYVJ6W1MudVgsTl0xWEhVRCVZN2pjKVh5d1ZMemIlST44TH0wVndRZFpSI1NxeX5rWkxLKzs9eFpnUXMxOl02aFo8VmxhNTRmdXc8bE5wODx+fmQlVzhFQnNObDRsNVFYTUVwYEZIJHVZU0UpZHhUYk90fSlnITIuRjsoXyVCNnN+TmVmYjhMfEFL'@;
put 'S1suR0FeNXtqazd3YElmOzpYRiJlRzk4fWBIY1k2ei5hVy58dmRxUHY8cVlEXnNHLHl4LHZFfjBmZCx+fE1wNjs4c3JZfFRSQTdKRUVQYzAzV30zSjE5L2NXVVlXU2tWanBkdD5HRFVfeDtQUC9UJE0zXWxaY3A8Q2MifU9pcyM7dSV1ZzljYnJmWnVNd2d1MTdsI291bTY7aj0uSnxzQlBfU1pH'@;
put 'ZlpyTTdfenZ7L0hEJmJ9M101TmwuMCl6M3koQVA0VGRHUWpoPWcjWGVBXV4xdDZTIWpuMkt3I3BWSi9TNHsxYlA0TzJAZilLU3R7TDhoLGQ2Q2ZgVmlEYFB4KSNweT5iUS5vOjhVT2EuRU5bOTNLS2ZBZmxdbk0xY0U6UixbV3QzQlpIOEt0U30mLE9HN2QvNnc+eGheQV5VR2hXfHhJSSlgeTZp'@;
put 'SisyeWNRN15kcE5NWWB3Sl0/NT1FNjRaL2o0O2VJXVguVCsjZSheTWs8XVRPR11PaS5bYn5NJHh7ODhdQyZUMH40bj4hamlWKTp0Ol5DRVlXMVFxXUNEK1lhTUZOJTVPKGxNZG9BUiojRG5+bWEqSlFHaCxBTXJjJFtsI0BNeTJITjhhRmxMOy9JPUl6b1chck1gSGVxNkRhfHB0OnIlfjMuTzdX'@;
put 'U0NOOEgoM3Q2UTp5ez9ELl5TcnVGSzNxb3RaTWUhSzJCI310cW9QJnxzI0wuVTR4ZlhjND1RUltjXTRUSU4qVm4jPmdibjh6I0ojYyt3RiV2c314KnNYUG4hbnBNWWlqXykkUlA/bU9GYnw4PktpeWl4LnFfdHxRNkg6S1VQNV0sND4xZVtXWXgkIV1tKzVbKXJTcitoLipBcWpnMlc0THhrISZv'@;
put 'WUJTcSlhKTRSVEklMW9dfDtgOG9NaD1bQUlbOnFUVlRYVmZMT2FkI1g0O1c0cWYrbiVjKX09Zi56OT1XOWxtKT89d2tEcHFaWVBpWElDenUyTzp5TlclI1lhMjgiIjEibSt0NCVvOzZvTkokRkEzRU5UWFk8VD08OW1KT003P0Q1Rm8iKV1ASmJzIk8rPEJ+e2xFMUFuTWwjI3htLHxvKUR3VmVt'@;
put 'NDJJMW8jYmxYMk17N1ouNWhqbHRDWEFZKHZ+S1Qvdj92ZW1RV04oLkAyMlloLj9vaiR6aClUJGsqMSVjLGZ6byxFVit4eUB8KTRLSWZjSUBEOyM+Z1lwLkM0LFhQQmFDLyhsLjs/JkhTOEQpSD4lWEBtOSRVaSl3RHxLR085cC9wN1VBSzFpc1ZgL3RCdV8oYHd2XzJ+NjwmSyNIT2VnL0p8Y2xQ'@;
put 'LH5ha00vbzlgWGNFcnVUY15WflhHSz5DNXxVOnBDfWdOVCJKOihTZlZgNklATChDTUtwfE96aTl6MnZueU55bX53XjBKUikpVlBaT3ljOig+R0p9TXQ1XT1sU1c7cks5L3VTV2lWQT9EMV4kXX1+LjxRckwrTmtFLigxNUI3UkQ3IyhIM2lTY2l8UFhmZ0syOUA5bWY4YmFTLE1VUHJAcUImfH4l'@;
put 'S3xDR244RylOXVpyJUlZUHZgL0tmdCNoQitKKns/ZFJUKVRiZk84bW5FSCxwWD5oWD5jTE01bXcod3F+VyVCa2VVRzRpc0hKRFI4N1AxbEF2K1ZzYExYMyU6WG1XL3xvVldsKm03cnAwbG0oYkNQbD8kZjp2ckBtI0c5ZSZxT0NJdl46bD10I3BXU1cmOWh5PyRDTlVvPjxkXWM5TypRXkwhXzJV'@;
put 'OSNnOjc2bkN6bGJEPTQ4fWpJQ3pWcWNQPG5EenVXXURjRlZ3VzdJeEJEMk94MH4weT59b2lNfGlVQjkoc3B7akouTFQpaXA2KGp7Wnt0Xm41JU9PQE1Wa2NhJVpDNXI+Z0ZbPmxoc3RbSSRKblJLPzdTO14pVXo4fkd5dzcjJWFUfC9Xb094Rj16PjF7NC5GbC5ZOVVlVSFhVCtFKlcsVy5fWG1r'@;
put 'X3Q1dlIpdj06N2JZLEZ6U04uKFtxfHVoa2B6XSxdTVBYbDosUD9oWVMyKDRzYEZ5XyVgZlZAVzNJOzA0V2crWVlnM35PNzVrOTlwVnUkWXlReTAxWFB1MCVZXyMub3lLflZ+LjUuVnxbWE1CVHxKPExhWUxtVWNOfkYjTHddWU16VDo7aVFuQj1NVlYjSE9KPnYwO0ZaRXB7RFVMfCoyKXxvPFF4'@;
put 'SzY0TGUsN1ZiSF41Sy5TZk9dIkdOQklveWZmTF9VdV9PYXdWTjtRamRKO29RK10/OkIrLnN7QXBbbnhRSCUmcWs0SH41QjcrIzYpe3xkaXs3cSxONHUpX19MYjEwNGB5KWNGSD9dKnRPTnlmKmEjYSJjcVJUaVE9Ji9KSz5QUWMrZDE6QW1iRTw/KiFGMFtXNGlkWzd6Y1s1YEowOEh4UVp4Rk56'@;
put 'OTNtbHdjci5FN3V8KTlrXjx8ZDtOTFosSmE5YypTU1Z4VEFzXkdRaEszOH1uR3pJVH1ANW1IQEpbOiRkYkZMcF1jTCkqeGFlN2VCKHI0bGNlTjxpbnRRSF5XNEk+STEpWzdXUl5BU2loZmdkKFA5WmtFYno4a2M9UUQ4THtNdD4wdjVOUHJxMkl4XkBiN2kzJCtoNCNGWWArdFpmbjdyUDNga25C'@;
put 'dmp1ejw1JCllWUl9R2tPN1gvalAqVSs4ZypZMnJPVShkKmpVXTI5UUt4NipgNEU4TWc4eGZsVT1gPz0jXk5AdGpQY0hhMVQxIUtxeXZqeERRd257Pmg+fVF5eVBfNT5SK05EMW1ZeHh0NlkxTyFNRU4mdUhCKCtLW3xhaTk2LiMkdWI0bFhYKCVHTnxed3szL2JGeUddfnNHPEt+M3FwRyp3TW43'@;
put 'XkhITFtKV3IyT1NRJXlEcDcvQCg5YygwVjNzfEw0SCExKCMpfD9DI3VWJiMzMTVLQyU5T3JfQkdyc2NzW1JAajs8YXpqbWVvaTJ3S3ZBRFcjdngqVUMzPjB0V0svPXU0M0lvbTJ6Nzw8aENdMFJEV3BDSXVucEdHPmJ1OHJtQDQzWkVGMHZaRVU/V21oPWBvJGpeYGZ6UFh+RmRoWW5uOXlhSHo8'@;
put 'cHB+U0V3fWdRITdROU4/TGZtT1ZydiVAdGloI2hdN0Flbn4lcGxWWls0JjooflVeSXdbbTZJY1lFZGh7ZG9MPUB6U2s0R0Z1TFtxM1pUPy5NTj8ld2ZNJiVDM110U0ZBV3Z0QztoTH1ke2tnR35SbyZ8WyhMaHowODRnN18vKjlJZ3R3d3FOYEVZSlJmWH5FIzZ4Sz5gM0xxLn4/dXtAXXBVTUtM'@;
put 'e31QOlcyW2FUYl98P2ouJERILEhPeHhAaWQ+QFZmclIrJmYhPDhuLGQoNV0qcW0wVTNJVmZlRnElTDtGa0xhZDBVK2Jqanc0YTBaLFFgdHI9MFcuaGdYUHpuQl5mW01yWnBzI15aVWlzMD1vXmA5X3g6bHdJKzJ8QFRabj4leDI9Tks0YWxtMXhCYT1RQjYqUHZAXz5oJVszMkVXIS9IUmlnfi92'@;
put 'Nix7TWJvQDY9UEhEZ2J5NmlNIk0lb2kjVC8iOXpOO0M1cG5uQGhQfT9IYkptRUhRQ1tPKWN2RWdkM1M9flUhbUU/KS44UmQoU0VdMHdBKSpgZiNRc3xtYjgpYHVUOEFEOz8+aCo1OHleVlEoM2M7azc+L0o1ZCM6bjlRN1J0byttO25dc3tuc3JRST9xJDVHSUElbWVsXzc3IlpmP2RyQlNFaWFB'@;
put 'cmtKbUtJd3gwdEVfWFhydHkueWIufTwucnd4SDcwQmwqcCpHTXQjVTczez03S21NK1ZaWXxgWlhYWDlMQlR6d3xfTDVfQDh7bEE2R1QoRElGWzdESSwsbCs6UVJ5cngsTmZQX1FhdmxzUCJMPEU5N1lQWUsyeX5EfUImX344LHtiVlZfVXJkcGBKTkJVMkZsPl1YXUZDVUdGcH1XRFdiVUVQS31Z'@;
put 'VC5+Z3RTIXIkayhQSHdLbCw6MFcwSGIubzVBMCNZfExDW34xOWxeIS9lKTpJK3lCcDBUfjk4IjFeSCllMC4yLmJhN25QU05pZzQ/aGc7bXJRRUw9RjNdRiQjXjg6JnhmPitoN080ITRFMHt1JSErWSR0MjVGSCshLDUyY3BsJjZuIUZYXz9XKCImfjwuQmgmS290VEg7IjhXfWdtLE9eLixGK3pk'@;
put 'e15QK1hyT3FsI2paVj55RGx6YkpRSHYpeUg0fXFFW0REP3A9ajRmTmZqWU9zKVAkVFk3PmU4czh8d28lL2xfTzxVLnJkOF9HSyNWKCh0c2tLdlszY11YKktdNl0rJE9FRkx8MjNwJWkwKzFjc2pJUT1PMTUhXS9OajQoRFFOPVZgbltGRz1hLGhELlZZTXs1RWJtUlBeQmp1cDs5KUt0ZVhqb2Bw'@;
put 'azxhRl1RRHN1X0xpUWtsNSJzY2lPdks1OS9aRE5xKkg4Y1t6RjFueiRQLlE5M245bF5pQFFeWU1dX0NXZGRTbSpzYT9PMG99NHowKGkoTyh4REhkPjhfME1VQHczUnkzaC9MNW0pcipzcFRKc01oZWBkd0VlSDJGeEJtUWBhTEhOVj4wbWgjdXVDNjZ4NzNwUSFfIXUpJlIzS1pBNk1tJV9ZMCtr'@;
put 'cEJhKChHaDZDYENEeEdTSzNfRyZMbUs0ajA1X1djSDgzJUppc0M+JGZyLChtPFBhMVJqai9rWkB4UUA0dCJMNXxzcDREdXUlPi5lOHpRI2tLbEs1L0RNdzpxaU5DQXoxSlhPKjB+IT9uJTMjcGklUzlXM1dRbGZYUjNIPSQraX5TN2gvdVRyV1R9RkpqWGB6MDtQQTNuR0JmK21YM0BrPSpsQSla'@;
put 'NXs/VVszWUopOHNLMFdBUDQhN3A7fSxrXzVfenswQjtWaXdXIWVHU11hem0yRjFWJSVgW2UqfDBVZz9OeCE0Yj1qVV4zKWBCR0JBTHJQZD5YejM3XW4zPTQsMCwwSVFgKjp2OU4qYkl1dURePFk0enNeQyE+RzBNKnhvOm1CNiQ/K2M3Jik0JHpoVkN8TCY8djtsV1E7cl06Im1OUH1NVGddSTAu'@;
put 'NnRlemVBTi5vQShVMH0uJVtUYXZRbC9JQEdgPGhQcE8uZXA7KDJIPi5BWG1De0p4X30rclgvfHkuelpJV31WIlAqOzxFcFIzaFVqNElgPyxQX1FHL0xla1E4c0xDPztLVEJLM0tpLFQrfVdLblhqeVQhajwwRSR5Pl1QNUM4VlhIYi9NQnU2WW5UOmF5RkplL3c2Zn14L09LTlkoOmBoJTxHQDRM'@;
put 'N1ZPSHhyNEdVRyo6OyxuPGNOdExHU05LfFo7YylQMCpDUkNaTVgyOltaI1NeRjd7UUVNdEJORXg/YXNoaygjSlo2XzNjTVFSYnMwV15hYHNtYyE5d04/WX0/ZiwjKDN+ei9+M245TDFeZkRiaWskO0haJEt3NyUubV1ZKzR5WEx1R0A8K0lEUlljLE1vW1RHaCVUX0U4ZXZRZzpILHs7e1g3SmFe'@;
put 'LiR8WnVjRmljPnZ4bEhQI0IzQzNMNjFOM3sqbUwyKW09NEpNOFRWSXQoUlVbSi9Ye11rITw5ISxXYl5qaklnY3FHKD1hfTFEO1MkR3N1U0ZXc0xdbXQ/alYid3QmaEBtSXMsVEQoOWUuYkZ7MkBASnd9cCF7LikjKXJmek11cU1LL2k1YX10LDlFY2RLUn0zcG9FZXl2SXdnRX12alhoN0JuRFFg'@;
put 'dUw4WEZgakI9Mz53XUo7KkBTfXU/RV45TzQhbGtHdkpEJnFRfCNvT0coKHR3MWJfXm14IylrKWhYS2Q8U01KVyR7cFQxSChtO3BeJiFPUDcuO19DKH58PnUiKCpsR3pZOUlGa2lzSXIhQE9OKUklfTl0U1tpRmtuamBtdFBtVzdmQk1ANyYwOnV9QWA4JFM9XVRlUXkvfS4wKz9oJDxWMkQ5VEc+'@;
put 'OmRmPVVvezNEYXorYWBYMUVnfE05OElbMCI2bkR+RkAsN1c6fkFzKDA9dEZqcWI9OSo9fUhmfFV3JU98KUw4MlZeRmJQTV1XdFtnczF6PnxDVjE5d1tsaHRkX3BSazYhejpjN1peJVJqaUVIbT40THhlNyJlTGZUZjUoYEQuanRoNkA9I08wUylFbTcqUD89ZHs9b2MzWClmUHd1WncrUyRdPyN2'@;
put 'NXZ3JmY9SlF1dCpAZy9NODxMSFRdZmJTS006VDhTIz5Fe2dONE1TXyIqREh9NW8hejM7P1YoYzc8amU1bz1Ccjw0Nlo6Uyo/KDZqeXFYYW5MY0RvOXcmX1JPbkhvMHUsJShLWXZGODNBNjpqNVFFM2tWVmhsKz8lW0JIIXp2OElrbGAxUWVJR0w4aXhCeHN8MjlnUWBeWEdNLz9ZUGxfcVA6NGMq'@;
put 'LyQyYGh1X2ZnJnI+JT5eZ2xUT1ZHXWY5TTUvIW10Xm1DQzhTeG4/dFhmZlQmVTJLaWQ7cjYkaiJvRjRublVpMCMzTDc9aFshc0J+UnFzV0osIkMjZGF2NSlIKUJSPTd1WHk9ejRMRjo4VGhmeTJMRm1FZU99bE9CXXs3bXJ3Vk1zYmlydj1RVHdKLC4uYW87TWd+NSU9Uy9UREhvZTh5cnhQTmZT'@;
put 'SSlsJFtKZDxWNHNKcztyITo0dWJAR3FxdG9gRDtpX0Z4Z1IzW01bQG4xVCRBP21JTHpWckhub1hhJTV8IiFPdmhxakQ0fit4ZlFHKT5Zd0RAYnpZOVR1WT1UMD40V1lSIWRRPlZfcjF8L2EldytYMFpgWEVzLnFnX3lzamtLIkNMTWJscHErZFciY3czckJHRE1kbyRsZHpHZT1Ed1BGRXJteGN7'@;
put 'fl5FZ2tmKV9ZRX02RlNrO1soI1hMNnpTWnpSdGxmQV93bmYxLHo9YVhiJCRRTX5WbT1JJDZPejlvLzY7ZDt0eFY5YEw8NVM5aGMwJEZNaTtPbTBuLGBJUXxRVkFfIW93OCp8PEk2bjtId0Muc2coZG0lQjJ2JixZOV9tSih3X2gpUl0sdmgrcVozTSFHYHRsJWlZLDVte3YxTmgsI1UyMGU7Vmll'@;
put 'KFQxUDYoVzJwSE1Nd08oOjNYWDgkUitSTSU9WzZpOVJiWC4+XlRBOjNJenFRbzlbLHFfL3dGJkRJbTMpU2R2ZDBSWkNpYzlIUzNvUChtKG4kV0w/Sm9OIX47NUxnR1FFPiQzWGBNMV1TUzVhJHhqPE8jMWBjakgyS2Iial5jSWZhRClXbGJZTlJ0ZzJ5V2lheDZpNGchP3l7amwye2BPc2tGPlMz'@;
put 'JXRWWSM3LzFSa0JXeCNGVT41YHZHWntFeyswQXlmNFp3d0w+IUByVDwrS2hhPFAuJmxvO0Q5SG9ySjBva2F6Plh5NDU4Jk9NRlgxRDF5QGFQdEA/RmNxQytEPltha0YqKnd7WXYkeFJ6UlBWXlFmST8ie2JsYXhxRDtAT1FFWThbSmB6WFJPKEprTVleSU4lc2tyNC9MXUwkKGF4PHN9QEEpdX49'@;
put 'enBORip2TTZudWJXdiJUKGNQbGZ6ejdiQHxSYCNtSEVJMjxpVncpI08pQyp2QlZSYEFKPS9XSVBvZWZsLzdiYD82fC4rbll1Xmt0amcxZXA5XTNTMjNzb1ROdG4qJFlCNjZ8KDpjV0JuLlA2OyFUdEM2NU1sZ3gwfT9JaC58PV9qfnJwZlZuJGtVR1RjPCRGV3dMUiYlKlprczg3UDg9d3xMWjlp'@;
put 'I3AmNFpVUyshbj8iI2MpPXlqVEAjKWojd1ZEWUB9Xzl7MUl7L3dGKGo4JUAuXSY4Y0llRGBYeURnaFVVQ3ElcmRmS0lNQCFqbHU5OCtSRlBvUz5bNUwzS1dxI1BQcTVJWVZXRF1KMix6cjBiZCEkTEZ2Y00jIiN2W2F0Vj89YjprJDMiTjBNTSRrYERVPDNJVW4jaXxvPVUqIl5RXjc7JShPSF9f'@;
put 'NjVpTExTM31tPEV2IysvX2R9IiQzaWp0MiRJaFhIMitbM1dzUmd4Z3hqaW5xT19TQ15GMXhdcVolTXszUTJwM0xmLy4pRlBKQSJPeXVQMFpsUnZIMVRZO3UpSTJ7OU8wfGNiZWtOeytmfX4yL0Q1dVl6RSo6fW53QkB1T1MwSzF3blphdEdEflskQltKWzVzYilZdVAjbkI2Yzh0MnlvTUYhQFBE'@;
put 'WHAqJiwpN089ST91el5JQTAyN1N3QUA/Qzt4KjNVYClPJWN8Njc4Sj4lO21mQCpGR2FmbE9UUWZCU1hUYHUzZmYkLigmKWcmUnpgNEttRXFFbHpCRFZwT3djYTZRaGJHKVgrWjxFNjxaVkoiW184XTMwfmU0XTpHQEwzZ1ZZcUkvOjpRfVs+Ulg/LE9zS2lhVyFSYzdqcClrInkwMFZxTik/a2x1'@;
put 'Lko7MFFbVlgkPmdLL1JSKm5oOTlqZl9uOz1zXyUrTkRzIjxhOk0rfTZlIWNCWTMpPm1vLEFSKUE4OCE4d2YldilQPlgjSDxKREdAejcwR2xhVzI+WWtWe2NUO0Z8Kj1QXms4Zm53Zk05dGgsdlMlbyJ8SmpedExJVj8xT3hFanxLSjF0KnhuIUhIR1RXZ1tjTURaKll9dCVCLm1US3pQTEY7YFhf'@;
put 'VV9aOlhQaG1Oa31SeHBZY2dEL3IwL05PXmdman1mfkNGcD94Q0NlbWVGVEd9bGZKPXlpVSh2YThgYXhgQkpuSU42fEBvP1d7RSlkUm04YkIzaz1ESmVYWlZka0ZJXjo5KipASmE5Zip+UVtgWlpzanx8Wl4xJjhUNi9dbHRveVBHIkhLYnM2SkQxZi5UNXAxfnpIcV87YE9EZSg8YnhodnxCeEF2'@;
put 'JX1CM1ZnSXlJPC54SSRRbzgwY3F7ITt0UHA8V08wRk4uWCg0OTdiSTRAaVg/IWNuOCNBanF+eCZ2fkAoJCYhPmRMdl46JEgyOzNKYFFeRGNlTC43a0xSR0h3Jm56TVBrZjo6TjEzMThvclpYVm1UJCo8Qy9WYmNzSD8lKyQ2eVApUCJ5cnJVZltNZ3BQeGpFTk41e3pzYml5NVpeVCImJGAsI0lS'@;
put 'SmpJPWpxWFRfbncxaWkraj1kWz0landFYnZTTFYxQ1dzJmFNdXs2QVRfelRGfTRWO1BZMWIyKkhwSTxZclhVeilLOTVeTGFddTE4TEFna1lhW1JCRS4yM1VQJkg3SHE8eitdVWEoV1d5M1FiejgvQjcjfjpZWE1+bzV5OUQ8PEJIZk10OjdgOiJsZkk+NXNXflEhR2lGJmxMbylNWCNVcTRZJTUo'@;
put 'NjpZcmEwa1I0bUpHK1NEMlNpQX5+SjI1QHZ2fT9geDZbZFs4NmpfJTp1UU4mMytDPkZLUG9VfEglaF5tNnovWytjQVFfUCxqQFN9cXM0QzJzMmdXdSQ0a04wY0YuZXRaI0d0PWZePz5HW1FofG9vI29JeFM8IXsvNUo4Nzl0XnZ9SkYkVV92VSNWS0N7PCZyYWtVVUxiK2gpPGZ+VTFaaitvOzo9'@;
put 'JGo3aCxzJGhVVFFESWo4ekZxOn5DcWdsbnRhW1RxeXBdSWJbQlcqe0I7UDF0Qm9Xe0A2WiMlbitiaWZpIy5ISSZgPCx4WDdLQHt3eEVocDokNCs2M0xCUj58N0cxZy5JVi8mSEBVTlYiI3MmIyEqU31HelBQIXRJbW00VnlxbjB+e05BXyJafUwuaGQzUHJ6LEY+ZU93UCJhfWcrQCFgTk1deH4u'@;
put 'Qm5dT15ELCJhengieVRGWlkzQjB8OnVtcCJnOHk0QnQ/Ty5pTVRCV2VPMVh+KEg4Zj4ubSRkOns5a2RfY24jQlthQHJHaV1WOF47NDw7TGYiLzorJTs6U2w7dEkjTHtqIj0lW1t9QT1nSSI4cVBSMDNuNU9CIU1UIVhiakN0I09ETFUpbS5YbU95KHw7bWVzIlYwfkt9Oz97XiYqOEYvIUI+KzVM'@;
put 'LFhGdFtMc1lmfnAhSCtlZlQhZS5GeWJMRnc6TFg2YStFY19OcU1wX35pJkIwaz9OJGpQTGZNNTAqTThuciVMTnxJflNYI1hFI1lHYlBiK08/bEZSZklzPlY9fWhMezYmQHtVJVRPQHh8dzVFPFQ9RyxOWj9TWVo1eDQjJHdfVCUrS0kmKUl3KWx9dGsjaT5jTV07aVVUaHVIJEJJdCl5cywkdDxO'@;
put 'WEtEWGZjaHpWOl1LcV0iWyRDfTIrVGpuTWgoTHVsPXBkVSsxbmRWUyxvPlNSVGVQZihvSDN7IzRPLGJGY295WjVzPVtFeTFCXVRaIXshKiwyWlNUJVd0PUEwYjQmLmY6JT0rbWM3XVE/JkRHT15Na3d1VVZCPkVqU2ZpSyVUM0VYPS40KH5WbXRCVnNAOTJQMmxuR3lwe1YkTXc+VD1xO304aHFJ'@;
put 'ZitNfGw1SCtVaT1ZX0Q6L2h5KTs5eykhPlJMOSt2K24yJEI/ZG5YM1JKfSo4eGRGKCU1K1JmMnMhPWE8W3opekokRSp0YmlnYC5wTVEiO3lXemJKQnsrNFdDNjVwdjM6NSY/alldSlo6QGpfRjxFT2IwKVdRR2REfGY3UmJoW1NwQ0crR2ZUYyZsSys1LDlxayZwMW94KnY/LDBGXVZvM15eTCJg'@;
put 'Lj8kZD1ISiE4STBQXmx8IVdkczhrbk5KJWBJIyVsRXkkTSw1SHZ6Y3A2ZHlSeVpHZWp9JE5NczFrXTApKyQyXV5OfGRwc2ksN3NtXk8wU0RUMHowW0ZIZzZLYHlWOUFBO3ZMOyRxMzpZa2kqd3Bua0YyJSYkVDd6Wj9XSyFHe34vV3IxNEsmb2VMcW8+SiZPY2lbQ0leN2JCWWU0PW5gJlRRSHZy'@;
put 'ZClafDd1PTE6fTJedEs8Ly5lN3VXYD8pW28+Ymd2LExdNWhAJCYoR2ddWCNeO1RYbjkyZmp7VT5Ecm5tY1tmKEQ5P2VpO1koPjN9aGp3T2lXc1R6QGReUjVZI0xZUHtTLHpgcHI6Lk0hJVUzeSxKWmhPVzFba0FlMjVuV05nOS5IQVY7SW5Va1hlXjloOVEuNG87RGAjLiIpZV1QUC9tbEpZeHxo'@;
put 'P081WmBPez5JMGhMVEooZnV9XldaI3hSSFh+emd+RH18QTJ7cTxjVUV5R3kzLGZhYD0+XUFyQWxpIU55QyExSWdxPU5HZXklJXdsWnNwL0BaZD8wYEdbPVorN2xzTDJ3IUszI3duOEJLQnxsakE8bW5MN0swJVZzSnFXWnUzKiouNXZxdDxefHZOIWZKN2khQ1F2MSsmZjVCVjBNNU0oWU5VdD5+'@;
put 'KzlrQGYiXX41ZzF7MVleMmEvKSgkWHo+SUVMMnd2Rzk+KFcsQmVleTc8LkxxXlF8ZWslcysvTjYrKSNhSGhGRURbYyZ7Wn1XLHRSI0VYcT9IfVB5VCJWJkw9SDpeMkckJGNJeGYhZU9aYWNhOGB0W2N+VHxGTmJeNWBFJncqNFNuNn07aFdWUk5XUjRNUXN+Ql8welNvYWs0fjB0UmByenFYSE4o'@;
put 'TTQ2MmAybGJqXy4jNSM5cSx0TC5aa1l7Nlt8Tl9lRWBaJWFpfTNOLDx0NGtZS2w6bm91LE1APHNIaX5MbV0uPjVGQ1prTiRMUzN2R20kQkdBenhTVlhzfEF3IiJmdyp0MlRFQ0VJaHNhYS4rPSN3Mll5K0ZSIkUrR1BCVHR2MiFUeUhwYTRAY30uLiJpWW4jZDAkQEA8bzlbYltKL0xXXzxMZWRh'@;
put 'ampXP2ElUWIjOHNQVHEjRy5AI0NwX3QsRSUvZ1JrKGxSOHVmdU0uaU8mTnlveD9gZSowey5oYCFqUGRuJTlYanF1dlJRJWcoVCtGWEFdJCF3JFd2RHB3fiVpOj1fTD5xaVdudnQrV2ppQDB8OlAjRzw7KGQ8RGNPUEl8eSReflU0K0JyZj1ieT1KN0F3T01oQUJlZEtBWEVDamMqbmo0blJEelBA'@;
put 'PitXbUk+Uzlpfn5jXWBvWXw+anBYd2g5PV9lPVlVczt6PE1lejddY0lMalVaN0ZCLjlKVk00dDVeSX41eUpJQkZaIyNpS2RCKlVEZl1sJCoiQlU6MXB+KC87LEdyLH0/TXNfZjt3PnYyWVVZU3RCIShzTW1MOnFBelcpNWxOWENAZUxRPUN1RVQ2cDp6eUtNOGsxd3o0Nng5MnMhc3lvOGl+all+'@;
put 'Z1txWDdvQSpQWm5kfFJIckJqbjZ4bDR1TiJ8fUpoYCsrJWttUVN+OSNEXT8yMSJDKnMrS3UoUmN0fkE3THV7YDBnZmIjNz9+JWkrYUFNaUhMQE9IUHlnPi47e3pCISQwbTooW0FYPmliWzlKW0A2YiRiS2khb083KEJue155Ij1yPDZUcm1RMntBPFtDKDY3W25HUFBLPFtBS0V1fjoiLDJqbFIm'@;
put 'VCoqKChHZWUmWlV6Z1dydS97Kj89ekhKR0NndSxfZTFzTXBCM1svTm00bVdjUDNTLlE5enF4KkclPzRGMThkezlDMnNFLkVgVGxtK10sKXNuNWE+Ml9RU1AzcTtzbiw4MzRtWWVPc2Q5SmFWPlZrKVtaeTI3ayVwcXMjO0goZWhzKmxtOnJUYyhXNylWTzFgKDNFSW9OM2ZRTGt+VmthLnxdeToq'@;
put 'RjApZz48XjpxQ3dvW0o0fWJfKihuNzZKcXUrYUZselBrOjA6aURWYTsmUn06dSs+T3loS0Rfdm4pTVFIKXo2d0pSK1FPUjBEY0RQSzxFayh3LkttTU0pbGpoZyFkMUo1SVg1enh6Nz15a0QsPUdUfGs6WXRVOmpOWzpZIUZDNmEwbDZwVmclck1VT0smJj1IT2pTUj0yVXs7Y3FjISp9ZlUubFB9'@;
put 'K0JKQVdXSGQqR0x1MSl5Vj9ZW3RveCReQXpHNl16PjZrcSxJNVZde3VWKHJ6NEpOWDpudG4kKCMuLkxua2swe0k8Q3h5UVlEdzhDcE4+dWBaMSxVOlMvclZoVVplNitDK29TeWN5K3JrWDJ3MXApfE86V2M7QTNXP1Y9JkVxSUI1YlUvKFFFNmFDKmk5MzxCPSlHdX1mbz5nOFgkSipKTFI1NW8m'@;
put 'az1rLERgbFlbZX5NanZ3ZUlMencwTDZecDZSdSw+el5gY1teR2toNC8/ek1gel8rNkRVbU5HOE8sOEtAez80UkNzeTpSXSM1bnc2Rjp2WyptLyNtJXdea15QLE1VN2B+TD1nRF8mKHwjczZ0KCp1ZVJaPnVqaj1XOSNYeSopPkVhcCpxd1VhY3JgVXAja0oqREB3WmoySEQlIW5Kc3wjRUF2b1As'@;
put 'ZFpPJS4zPmQ+SyFqMDthIyhMQHJWTERtRDBfclJ0fnAuOjE8VVVtQjV4WCVnQTZkJjloKXM0RSRZWX0rbzBqcWgsfk08PDlsSiNOUjU+ZjpPKlYjP3gzKF5NOTl6Pi9HfWJpNmMqITZYZTpAVjZ0d2xndXNaSy5bdmUkXnpDcSNvbFs2IlJBSVN6d2JvPixgWlZ7MlhqUHV5PFZZKlU+NXolMjJ4'@;
put 'azRTUndsIz8lWixwIVE3JHosK1ZUP14kUSRwRHJHU3g2QS43XXs2TGRae3t+en1WfjhEVm96TlNCajlXS1lPZCshdUkqQWxyamk3L097aWgzPyEwSVlKZXNEXkNzZWhQREJYTEZORFIvX2kzX3VNVVRCU3x+MG09eHFJfWE8R2Y/ezUiWz0pMnk9KVZmZyVROE8sTlMkKjZhU317fFMmVEx5e1Iy'@;
put 'd1JPQVooMGRII2RlVG1xUXo6aGlDfGF+TFg3a28kNXQ8aUt7LHMsPmJiNGpXNH19PDQ6d0YzRnk5dzYrPUY0XnFaUWUkRHovQUxiby9DUjdIRkU7QjdGOypIcn0jQEBJZHR7LilIXV4lT2R4U2c3aVUsanp6ODttbCpkJU9+aDhHKGZ2In4/ci40T190KS4mYz16QEQjQWdtfmxuZEgkJEUmfUtz'@;
put 'fkhmSyRtVUxdK2JxXSJDanUjMHdHaSElRGVSXX59b1tRUkZ6NTE1dlZ3ME9oN1QoRVtUfmohQUhVY1FQK18vfHZVazhZKTRyeXQpPzVHLmVkSmFMX2hKfU9YT2Z0Tz0iOWsuOFRHSG15VVc3TjF1NlFydGF0U3V5JixVc3k9LDtZenZnfkNOQVVNWF1yWHVeQDlDfG01KzdGd2pqYiNTR2x1eikh'@;
put 'aCUhISkuNCw4Si5iRDM8aXglX0g0e3pQY3RJWERucjI0PUsyR1M7djBFSyZKNUkxYzxAW09leVlQQnQzVH5Zbzl5QFIvJChvLz5gMlVnZmtSe1RtVmQxd3tSSCROSHJJfHdsIVZ+Lz1IKDM0SWVLJVMlWDNlLnlxd1UyeyNoQCY8IkRDYUc7NCokKC55W0QsQE1YRkpNbkBwMjFiTmY/NVguX0ZX'@;
put 'YDoreEEvSVgoNWhOZk1zSkNYXi9FSSVGSzd8c3J6JntmYHV0ZTJSfiohYE1QW1hpQkMwUloyTyQqcnh5dHlAQ3VjSGxCdVEmby5jLiM8Z3t+Vn5HcnhlO251KVE7UzldVTBVRGc8am5dYGp2Rzp1aj1YKyw5ZDtFNSVCbz9maDxhTHlYKioyP2QpLGFVPj0lX1guXzo3QVJLVHt2SF9fPmZ7RlIu'@;
put 'ekt7eWh1bzl+WDFwfitjSXRTbi5zbj9mT0BzOCZDZDtpbEJ3bUZfbUwuWlRHeHh+JlhbVltyZkJnTkZZMXhUPDJlVFtCO2s/c357aFghK3tHVT00T099dXJLTTF0dXo4KGN9RzM8S3hibiQqInhEflhQUGV7bypBUnA1OD5NSWEkQn5GT0BORHYjPXgiYWpmZ0NSMWh8fUJiNFtXPU90aGBjNThn'@;
put 'cH1bO2kxbnwwKWxLIWd1NlY6VDZOX0xdTGhEb01pR0leO2RDYXlMZyFuU10zSlo9PDU5ZERZXk5CLCNKaWZ2QSZAcH1gRT1DWSgxcXIxfUo2WVRKLy5sLyxiYnRpMUJxPlV1aG1oSDNbIl04Li5OZ1QhNGB7YW1laTx3dz9LcHt2d0MoWjlFUHV7YVdIXlFiPGMqZH1oNWs3dmRWfGVuPjNga0J0'@;
put 'eXlCWTBdNV8iQyZ6NHhFZiUzMj1fOix0MGFhYGFfWmssJEN1QFJgQ0dae0pLNDhxbFEvVUEhcCUjV24kY1lRKDhkQD53SjE0SCt6Ky5AJFhUP0I4U0BHRFVxU2Ymem0palpzWyM6O2hkRXJ4aiY6cllZOylYYltNUnEicl19PndHOWNFIjZNW0ZWODZLYSQ/KVtxLENtZi5LZ0I/YEw/XWJbYkZA'@;
put 'ITNeWXZqR0RxPnRMfDdZdzRjU2tdYF45dSZKKUd4I2ZOfW51bixVJUJ5V0JedkYib1s7Z09EQl5UNWdpQ2lqNTVuTllFPiUlXzxURi9tN0M0e0RbS2F1PmZ9N19uKikobXI9QCZQY1F5KHM+VCR3LFRgZ1pOSmA+PnpUSFFSOWowIVZAMnNfeipaRlMiRUk8cXo0WTsqRTJaSzs8OnIzVTBPaiZA'@;
put 'JEBNR0srNTE8L1gpQ0t4aCZLT2NhYTRsKT1SVm04fFU7YDFpVFR9cG83ZV1MOFFwImRhZFFdLHF4KWh3UyxPeE5LVkt+YFZRSnlwW1NYMSYiTG1welR4O0EieU1FWjx1eDYzMy5JKlN0cUleTVdidD5HejArSGtSOnohZz8meVdNLnJMJURhd258NztLdnlhMSlDIk80XVcoYlRUS29rQVFMIWh6'@;
put 'cjwmOlFUQHxoL3o4eEphYnJFRUtaJn1TbjI3eUx2ZUozNF9delRkPFt1U2UqZU0rU1VvTT0iNiU4c1VMVlU4RSFSWGdgRFJKIWA9b3FIWTsmKTtwI0l8YjUqM05vOExJZTZuNyFua2ElU1dHcCNMeiF0K0xFcVsmU2kqTls3NC5Dc2okUVhHWzRSWT98VHJ+PyRkMGMwfHdQLEtxNy5Ja3pmWE83'@;
put 'czJTaVZgNGN2VC9GPzBRfXw1b2RtUDU8e15WT1o4JGJJRVc6WTorM3l5RkYuMzs1PltCNSEqZFZiUSh1JFAwfGtQVVFqP3NKT2sxfVBbaDNzTHxRdF1zSjVLOGNIYHg4UkA7L015TWxWTl5UUUJwa2AvXXBUVjRTZyZ+O2tSMVVjR359ODRLaH1AYyNKUjp9e3wpYnc0K2A5OHNuaWFBNmdmNkdp'@;
put 'VXtMcXdMNzBEcWIsRHd6Pnt6elhFZWtBdj1OZzg+ZCIlOm97JHd5TCF7VVBMVFpSY3llM0pqVSxEemBYNWcvKFpnfmdnZz9UR1FVZ3c7SFJjSS9WV35ybnFvck1RZURFSGU/aTM1K1RZOzBFVjdOZCphTysoYHdpb21tMkVZdWh5RE1lb012OGw5PHUqSmo/XWdealRfclRPSCtKX1k8YVZWZCZq'@;
put 'cXRkX10pVV1xMnhbVkYuRXRyKSxHMjgwKkc8Pzc5TyZEYkV+YmE4RyhsPFF7XkdJNHpaPGZzUH17fHg6VEFnfER9L2gzfjJxVW9bRzlARl8uc1BEWHA5dU4mWX1wKGpSUUV3aXBTLH4iTXYvYXkyY0ZROlYsWkRRaVUjVjAlKXtgVERPTiEqI1E5Vj4wQTZJTnxSPTk8UEM8TyoiPXdfSHV8LjRE'@;
put 'JEx1e2BZKkQ6JSVrKV41bVMjY19tMWEidW9ZeFs1IjJFImd2SDxfZWBbZ1I3e0RTXkFFaFlZY0ZPVU5Idl87ckwhSW1ZXm9uQUN1d0lCdVIrdWgodU9xWF46ZUtdfXwod1p4elk2LHZ3QkdGZ2lYbmpsJEhBX1R1NGRiaiFVfCJFIUM3NzdOVGM2LD92OElhTWg4fTk1dVpAYGI5eTBFJFtrPCZF'@;
put 'QGZrVnthNVY1XX1GWF1TeEN3dWxII31jZGwqcSQrVHgzN24oXX1vKWddTmo5Tk15PTtjLntMSDFROztEa0IkJGtpanJdKiFtMnFESH47YSEoPFg4Qj1dc2p3WXV8cTtic2RWcilbMC5kTWZyIlIwc31oRW1JVUpOM0VeQ1JBL19hTGhLK2A9OCxBQEYzI2t9ezthdFlrPDcyY3NaJkYhUE8wP2Mr'@;
put 'MjU5ak48fC5EUX08WFRaYHdCbzZ1JDN8eTlMaXFKMnY9OUNgbntpRkh9OyR3WyZ8P01jRWw7Uk9iX0wlM2BUX0B6Jl5laWpAYHZRMih0LkNoXiRII0F9Qj5xVGZ1TT95LDptazJ+bTQuRj0vIlZNKElHXnlLeF9HVVs2UGdnVmNMZzx0O28jckc7V3t4WCw6cDBRfHoiXW5zJmIkcGB3ZSRhMFFT'@;
put 'RSgpMi5eNk44LilvfG5kXSVCclRJWmZaU1kqY2RXR315PncvOVBmNEpwdzkwZDFqYFpBVCJjaWIvfE0oRFJeYipxKDRLbCkjP3YuKk1ZSV1hWVAveGNwLzJGVX18UlZKc3xLeyYxSFsrPktvalF+d0ldYXV+XTt2PFBZNlAmcWorTCkqZCw3KjEqTz81XWR3LnlbKlZpY3tbPC5WRHtIWlhOQF8h'@;
put 'W35RXjtGJHx4SDVZenFoQmNvMEJoYm19VVcrPTxVbD0hODRsUXZqLHEjb1doZlswO01wWWBOKmZDcXFsQ0c3WyIxKClWcCo7c05ffE9PYzQrPG1SWmF4L28lKEdhc3g5dDEmdTltS0lxcGBfOStHXjNGWyxPT006ZXBaNysoYT0mVn12SFtBfUg/PUxraTIrRCxEQGUrVTNqX18yJnl4dis8cXth'@;
put 'UGYmZjdwI3RbSHdnU25eJndVMjxUMiZyNGtKa1RDdGNJLFMsVFk2K0o/e31bNmosYkhUMFUmbGovJUhQYlJ+QkpOfDtXS2UwL3EpNFA/aF1ASUM1TDxzTDJCd31WVDpteypkfV9MPVlQMGhCXm58fStbLCU+Wi4+JissRldoKVF+VVlgOHIrXSRuXiMjQEJkdEowP0JWVCk8VjAxczhuOGg6MT1y'@;
put 'dTZnaDRyfWpQPWpvdlpZIlE9T2cqKHZXcX5hPzRjOitYPkVFOWF0MTR7PmZIZyNhWiVmIzxXeGFjd0l1VmdnWG1CXyhfRDpyck9HTi5kQFtjYGlZI2d6OFZgOm5QYz1ubiNeNVlIPW9ndDdEMnU9akB7YGouX0A/N3BpUU07TFshRl1gLkE9c19TRjBGPUMvTEpGPn46SHtqaEs8SjJkX3xsZlY8'@;
put 'JU5zQz5uI1M7VE1zJnREMnxuSnhiTTBpRCJ7QXM7dGoyQy9fVllbKCErX1FhPm9RcyF1V0Ymc1BFV0ZgSGJ9XkJPQEpBPnN4JDRDU298b0ZSTnAzOmJSVj8iPENxdis5enZse0xbTiNod2xXO29yL01Ie2wmJj91YTRhT11uby89TWhsPEBKeGZvaE5yR29uNXZiO1lvRTVBWUNXVGFxKXs8TFhj'@;
put 'OD1sPE48NDcpPllTdzokRVZaKiQ5KEd6P3F1OkNGM2ImWE58LD8rTlYidi9yYGpleEo1aSssV0soVH4oKTBYUDlBYDMvR2ZpPEl1eFt6KnxkSld0KSJ0K3hjfXFgJHcjYzg4PS81OV1BbTBHVUhodUxJTTBgR3d9WFc3JndLYitNW0h1al0qZTxPbk17Z2d8dnFnX21OWHZGViZPT2c6Y3lGRSVV'@;
put 'KmQ6ZCtxX2pOIStNeiNNRmQ0L2wxJjlyeG1nK1lKXzxuIzhJaFtvLypVaFM2byhfOlNkcFhPdTxEPGA9fU9jeWZ4VWBNRikvcERVcjkycDI6cFRyd3gmYXskPEVgR1AvYFc7YmtqbW0rZiN1QmNobmB1eiNwe1t2YjpuN2xDeipzfGpUWmhVU1JeeEg8WXkwdUY2Q3IyekpdKm10NEdPPU9KbCtZ'@;
put 'KixQTF1CJXJ1c0JRT2BScXJUUFIwYE8hNkpvXiN2els5Xjg/R35tOTdMIV9PNl87S1I7fEFtKlVlbDRIMGg2YkFaQEFRVFdyeDVEWHooQ3o0dypyPzx6W1JCLHFvLlE0bCMzSkhoLGhAJjp3VTciP2hOTk4jdyEhWVFIIUhzJTxRWW1mdGAvUEs6SW1ee3pgMVlUMyZwMTpee3REYXFDRTQxXVlG'@;
put 'V059MkhIJHxyOFVwLFVbZ3FCZClFMGdoNkBQbkF+RGpHYS9VLmRHNVVdSDRsTFFpd3RFYGI1QypsfnR9Sip2K0YsSiNVek56XmYlS1tmZjk4Wns6PFREQjZUSCx6WmgpWkV5ZCVwVE19Y0BtKiZFeEg2LGNxZ2A3P05OLkhvUyk7al00VihDfU5fPiNjXVUrbkk4d3UzNDNnMjIyLjpeTHh6blh7'@;
put 'QGxGdjJPTCp4fkRGXT07RmF+UChVcTtObEp8Pk0qTiZMbCY3ej9XZFdtLiUzcWFtKHlBMF53T2s4SCR1Rj0wM1c1LCl6NyhuJDRDSFl2IzVGTSxXbWhFbl9ieW1DdihpOGN+a2lJd01FXWAqPSFYR0pxQFZAXSNucT04SDpWVGFiSVliYk9JMkc2LGV6WDo6JUhFWm1RPzdiZ2ZASnwrSlY1fV9A'@;
put 'I3c3VEVISGt1XSRsLHo6L0VgN2p+OlEpXkVRcyEhUCFLbGE8X1d9KShQYHoqLHF9LGxFOEF1KiloXlc8VlUhRVQ1Nkh+alcmRVQoLjY6X09uIS9rTWxTcy9qYnI9T0tKPnY/P2VNIWRrJk57STwqO3V2Im4xaHdFbXdTMSNUJEhoLkpqcnQiWkJrWWt0fEJ1LmhDKC5ER05CM1MjJD8yfS40Lk5x'@;
put 'RkMuUllDdjtZYjUzYzE0R2Z6czV7KlI3d2N0fkJEbmwwMyVAbSxAb2gqM0tFI3tLP3dvRE5AUnc1IlV7PWE6ZDReXXg/PVc7WmU+c1hZTSZMbWFrRjAzTXg7bipPSSFkNHM5N25vTXosd0VFQnw4O20xTWdXJStZfVJGYmsuREAoIlNkZmlNbyolRFhZKDV3MkIxYFF+dU1jPDZQdnhKJWx2aEVU'@;
put 'fjxuJEZqXSguTzk3OnU0TSxhM0MqJT5OPWxLOS5vUyZiT0o1cnZDKm1lLyRCJUwwNUFDajpMeGBtNyxlZFdmTzdwJDFFTDZnN1VwaFJHSk04NmN0N0NTYCl+bkFAblFqX3l9Qzw2IyFDVUlUVSkhdUhBNSNHWHMqeDxHTSMpN2Q9bmtdQzk3cUVmInh4NjshaVNERE9gOTFwXkdXZHNVOF5bRnY+'@;
put 'dUg+cVtpeGQ2LiYzdjRJK2BxNCJaKSRoUEw1YWw8a0wsUD0/eiJiNWljd3RzUCEjdmN2IWJdWms6MixKXk1RaSpAd1Y2TTw9QltIVVE6ZTEwXj9gJH1ZK0lHZzhFUkNCJno5Q3M3bk1SSEU6bTpxbTBkI2NRNT41WXIuMH1ffSNsSlBPTyUmbEhVa2FQTjBpMGB2PD42ND1Ga2kqOTc7aVA5ekFy'@;
put 'QSQ6UDp3QVM2JSRPaGNZKkFpIWEwNXtHNTRSdUIsPU1hTHNvRkYjP0VZUkwmQ1heJmM/L0lDbXU1SywvTXU2USwpN2w/dlZWfjQzNVZIKiQmVWJrT2lYZHBwNytSN0MmP0dOLkhdZFoyQS4ucjYqSmwzVm5SbXREKm02dFhdaDhATmFFdks8RywmRVdVPG11UHZnb0tmezBac3FfQ1FjXWZtRmhM'@;
put 'XTtSTComOjR1VSkqPjpvREolWX1XP2VgfDVaUXBoRVpmYWF9akAvUS54TWtTbVdnWW1TUU8re2VOfFtUNzcjLGw8NlY+enZHWiFeNms5aFBbfjl8fjo6RDpmZ1hIVH5tfD53N2ticXFpLitGdm4yREo6LDMxd3xgMD1adHU4b2ZPVSQ3Rm5bRFQ9ZHB1UD8zKkBCLH1ScTVJImIvTDN+IXk2IUpu'@;
put 'QEBxazd1PUJNWFUlanc/WCopKUUzVFQlOUo7V1REdj5tMjhRUkRzWlk4OGByQiRGJWVrb0kpJn1gdSJ7P1dmQG4ueSV3fXZZR0teImkuczkyJkh2XiRGTSJSQF8hRVlVaWVte0VCPXhid1UpZnR3cEJkciRediwjPmJEZlpRY2FXbU4uOENsQnFCJUQ0ezEuYntxNy5iJSZYdStWJn5LbXd1NXsk'@;
put 'ZVEsQiEid2VLfWh3K3ZhcnppKCRpYVtdQnB0Vn1XJWB0PG5rOF4pX3tyTH5QYD1+YEhKSGVReEM0KUVIUEBKdF18Y3JoJik8NjhAMkpZLFBoL1IpITNZVFh4WChSLmJFLnJGckBuVTlbST1tSEFxPSpuPmx9VU9ofT0vVUFpYXlWVjNBW2BEcmxLYD40c2ZjS2ImOS89fCYpbVgkUHpVVnxSJlM/'@;
put 'XW5gWiN1STU1TThPUG95XXU+WyFbK1ZnWD1XT2t4SG5NVVFrfDorQm94T1RQSCtEYk9AZzV9Um9He11xVHJIZm5UWzwya1lmRn1QQG0sbyh7QkEyems6VTA/X3tULFNXKiZbZDJ9KGtBWkZiWnloYWZrVVhwJWg5cXFoTHtDaGtmSz4vcjtSclYmV0RPdTQoREsqXj9HOE18VT1dbj9Xa01pcDcj'@;
put 'RzdQNzFgSColXUA5LGo6TDxfa2R9b11qTGd4fHd5NTlsImwlKjMiK0BQeH1QajZMc1kpdmB2MGsrLH4pSGVjdnFJej1fOShHJmRjSWc2aiMmeF45UjZ7MCJBTSVEbVBGc3lFPj51WC5CeEZ9R2MuY2c2aFtodDl5ZGx3ZUxhLnNreWJNeEgxZlZ6d0JMfG5XMUhDeyNkUykodiYxfWZ0ez40b2or'@;
put 'XWklbF1gYEk2QTNHdlhpKmQuK2cobiRWJTFiUnczTW48SjcwXWZ9ZiMlRWB6WWspNFt8a09RTnEvKDNYV2d6Rks3Z0wpaXw1Zlg5a3M1JShKJDYwQylZd010ZGI9V2dKW2ZOeVJvcDtecz4sVilwa0lbd2hzfHk/K11NOFhHclYvKFlCb3d0YzRtIkc6Znh5cU59S14zMD14cnAlU04zWEpvZi4q'@;
put 'NTZyOzxnOEd7UDUrYDZPd3UvRVRsbmtPMzJndUBAeHM1L0FGRV9Ue1p1LGBdWFlhM0VaPl5NVSRlWUgoemApOjB7YHgrJHAuIk4hQCFOJUVBdFlFQlVBIWVXcztpdnBSfjZ8RD9nJm1jey8keiZOXXZfLmA/LiVCLG1IcUdBMypWeVttfHZvJT8uJH1Hc0g1cXFtbytaPTR3I2IvVTFwJExsSWVU'@;
put 'ZSksWHJYbX57OUFCZzFzXSlNPi9KQlUvYG08V209dmc5USt1L3dWTjlKWHQwIXtDUDlzLzV3NT0kX3kwbUY0M3hMMHlmYVVzK3tPTEckM0c6fGNBW3h7Jkk8Ukxabl17UTU+QEMkRiZsNXchQTxucDF4LkYya3FLOXFMVmM+d258OEkjQXRUQEdNaWZbdGcuQkwzXlpqJGUwYTF1a2k8NjlTXV19'@;
put 'ZnU5Kj4yd19rYil2ZDFFb3IuejRCYmclJVBgQVl+MFUmJTsjZTcke2BKbDd1W1U5ZiF6dD4+Qjk3QX42RikjTnBAfmNVaFRbLDZ1VnNudmY+Zn1VQUd6PTlnWVheNXtLLE4sVVdLQjBfQ24oLzEkaVVBOCtKOikscDFyKS4lez1odmpbdCs0LkxuVTVGQ35mWW5DckU7KDl4bE84dzo1eXFLWEQz'@;
put 'JHFyLGB3JjFrRXpnVHwrIz9ZNjo6X2hlKn0pLHhrdyFXQjM/eHIwfE5QL1dCb21aRWZLVn4wY1N4cVohMG08bjw+S3oxNXJLeTkodC5ZcDpUSyxvZXY/Wi5uJkltX1h8PSlOR2lVMGBwclMrV09IdCFkbXAlQkpgajIsX1l7RUcmMDZXPiUuLmc7JThXT0Q+XnpyY2BdQSRDViMyRWB3eShSbjty'@;
put 'LEhjU3coIiZ6cDVlKWxYTnk6WXAhZX5VdWZ4KjtmSF5vKllpMlt6TytrNmpASFNIdXR4QmVyXV5baFBlXyN7W2AraCZYR2tIOEwqSWVqPz53bClCWzxtb1VZNTspWVdjWUdeQVhFSC9aYF40S1lTUz8+KjYwVywkcXd9N0BiUVFEK3llZGZHTUdXS21jeHhxY0J4Sz4jVkUuSjR6RHhpbX16dSZW'@;
put 'Q3JLKEFHI1FqL0lYJnFBSVUsQi9SPlJnK0tuKHB2fCMrYXYvWTtDUEROJU5hUX51ZVBZX2owR29ddVYseWAqcCIyeGh8L09MdCNLNkI7Yzt2aWxiNGBGXkBZQHszc2UrOGhbUCt3W115WDoyaiUkLmlWSSlIIzcsTUlRMWRDT0NDSDt3bHVXIXszZChnOjUsTHVZMjY4al9hd0xkTjZMemV8Zmsw'@;
put 'Q09KWmE8aiZ8L2JHfXI7JmFlK3xxJiFdeUwsW2YuWVpUPGhOWipMNWVWP0UlX0NSak5lW0A0VXhETFB2ViY9WjReTmZia3pjY3FCaiFrJCt4anpybS4jMyJdKVlkOk1eQltMcE1eLypvc1YoLlIzeFZfWGwpbWB8cyV7YikiTUhtQiNraWo2WX4kU1Z9O0A3PW4/Umg7YSVqRzZZfVJbfGdZY1tb'@;
put 'amoqRnd4SyV8N0pPQlhuYjU2cEdjW0d0RHchOmp4RV5FSVsxWEtnI21wPSN6azMhMEAhX2dZajdWe1dDQkwiYkZKSXZYPjZTdVY7eF05KitQekRHfilraGlUKFhENCpXdExMY2V6Zl8zNzUkQEc7P19KWjt+Rjx8I2NUL0N2M0x4WjVsMDAmRWkqMjZQWmwkPHBeem89PTZnRF8oRW08NytrNSor'@;
put 'QWwoPFpxVUYyb05QSTdDQzMsP29VeW07eCp9KHgiOXQqIVJ3RjljPHhbNDQlNGs/Jj4lZkVCZGlOMj9EbigzOFlmcj07WXxnT24obVFrdypmMmc9Lz4qLjspUyE+bldaJiwrRyoxOCZDdzx+MGAwQ0dIRDN1In5ASEo0Mz0rUFhYPSZVVH4xKVJrekxjeSJ7RThRRUdVPkBRfUwlb2pAZ0FEcSZ0'@;
put 'fHJQOiw9ZyxtPWN9RTghQCpzODgwW0FhXU9bU3d0LzUiYkhgdF4+SlchMExWbGJLXnM2eTgpaWJaTWRJQyZOTzpTYFYyKE5kYUg6RDwrIj4oP0pLS2QyNiZXZCIpa21PQ152NUwiJSovQFpRcVBjTkkle11XKnFVS0AyRThYcEJQXnpdfEpwY21RPT5bS14peUFwPlcjZF1Wdl4hLjZzX298OGVD'@;
put 'ZkR4W0hdVStIeTdyfTBjOiFLfSVwR1BTdTw8Nio4OXlgfjc4cVood2I4K1RZPVZeQ1lPOnR+R0I8d05nM2JaZnx4MGU0ci9jVXlRL1kuKl1ROzd3fU9jfV9hbT5fTF41eTlFJm4jTyJuSHB0SCxGZSpdbThue0NGfkBSfFs2UWs+ayhzPGF8RFk1bDN0fSt+eT59QmZCV1Yrb0hJJiZJcWBPV2hv'@;
put 'Wy44MFRJPkRVVTlKcDIyclZ0KzZzX1smJiU7diRsSld9Z1lxLERLNHE9bjFZTHRsKCF0O2pUQ31KaFtyK3ZBX2ozXldCdDBsNmNwMXxCaDhbXjh2fDEwR1Q7e3x3Lnh2Nj0wbylka3c9LmN7dmNiOjJkS1gxeGFTQGlyeHglQHVLN3EmT0tCZl9JMDJaTnpoUWdOIjB4bEtUX0FHJHs+e2l+Y1hq'@;
put 'fVRTWHtfeUFYMTpiKnpeaiMjYWF0QkVRWEwyNFsoaTl2WVpvWVhSbWY1QkZKdEYpN1BtfWY5S19heDkjc0dhMWQvQ0xvblg+RDR4K2AvUCM7XUkkYnVbflk/UGEmd0lTbi5MMVBFMlFmRl4qNC4zZTxtQjVdeDtCejc1YmE4c0RqTk4hNCtwMVI0VGNlT3UlQVZmfDVXbVA7OSZpezkkbDFqezhj'@;
put 'eShbMWc/Il5PPz9JSEh5SkNxP2NYO2NSd1l3JFhNMmhYQzVoU3F+OTxyJiZsWzIqK19vMzJePkEqWyREPzB2bkVVUT57LzRUcTEhO0xReTF1cDlZUCZITTliT3Y6UCUrKE5rWkZhWTQpVCYhe1ZEVFE5WkhtbjdZWmE8T2o2PzZRR3dIKip6eCY8QXpjVSRpTXw6Lyp3akVBKnM5aTd9RTx5UXJE'@;
put 'RmZjLms7KGV1N3Yyen43MGxWN0pvVVdUYmJiYXY0Vz49fV5KYGFlNipQaEVLam0hNmVVUHY0fk96PXxeZz4+VC9oa3JJODxWc24udFBsdzRQQCskYml2ODY6amMlQiRUSHpFRWc2Sz57QVE5SGJuKHp5NF8+XzgwWkA8b3w4N3E4Jj51fHI4bFNWPHFFQDBiTUI3PzJ5ayZXPGElQWo4PzU+bl9f'@;
put 'IndWTn5UMU9sRWwqKGc0Q29WXUszN2VXVypveiRZQ3Q0VD9xKlg2dkZmaCNXQn1DSyQmWkIieDpORipqIVp3Z1txejg1TlhYSmN2VVsjTTk7eWdYXUNkPGpvNUMydVQ5bnwudVtPaWp5Tn5iIkcmWDFNWXdqKmlEcXY9Zjs3eVF4WSJPY0dGVG8jZEZBPld7fEIiVCx1QnNHSzk1O2YjNFs9JkZu'@;
put 'UnAqZFJyW0EoOEBYTEFmT0AoW0tUfmZQbSZ1KzBtNzMrYGorJWBZW2g1ZWR2fTN6NWRlWGEmYlljSCt1O2hXT3c/NCZlM1dgUSE8MEYlYkdHdyFXYCVSRVRfRFh2Z0NXVUUmRTBsKTArMCthW3V7V2VPQmVyN0Jdc2M5R2AkV3Jna29NKnRoWGJPTT99TE8/fTg7YD95S2AqT1hTOzc2XUAsQ2NK'@;
put 'TCFnMFIqNzZiOnltWEYqJU89XlpEKWYqRyxCQGxwd3FkZG4/YGpFbW85JWU6L1khPG43biglZWxMUWlZNVpsfGB6RCJbL2M4QndmP2ZvNSM1SmdGSis0IyYjIj1EUG9Ud11sNlBhTDRUbmJiTHFEWUVpOiVMZSohX1ZKNSpuelM2Nl0pO211PG4+TilJXSFHKFM9IlprSD5TZClPWSt5IkpicWZF'@;
put 'Ki5BYCZDT0NlMm56WiJWXXNfSTdES2pycW9PVjFRLC8jcTBJLF9gKFtEaV5gOjBdTi9qc3c+d2J4I1J8UkQ8W011bzd2TipGRnovRGJ7S2MsMkZDWztsY2RWaXp5bTV1b0k0MC5Nb3ssUlkxekgyJG9PMDd+diw3NTtGZTtrfUk3bEohal1sczgieUBZKXJVT1JWNmopNllRdXpLdyl4aEMpTX1u'@;
put 'WXRTYH5iNE4yMV9TaWRATXxJfDVTVk88L2xBK2Z5JXFLMitHJVMiaXpRND0laVd1L20vPjdRP1kqYzFIYksmcyFoREIwK0NafFM6JnpYKXo6X1clT3RVJXBKQ1oiZCJrIXM8SS56Ol9wdH1NPV8+Y04qX1ojQ1cwNlk2dVhlRSxyeiE3QzIlR0RTRFNvTnwsUyohPU04e1NTKjgsWnxxTlRoRn5I'@;
put 'YS9uMSVremVgMSxZb1cqRzxPKzRoXVR+bixNaSpPMXBTLEdzSiFibCpXVnN7MSghbmNBIj8hfTBXI18oKCJUUSI5RS5QIW5LJS4uaH4xKFUzLDolOExWbXxkVUJdZUZROG0+KERZYSt3cHFAJH4hPlh8Sj1ydGNeazt1XiFxZzdLWEQqU3dkQCpBJkJpOyErIXUldG5KZjdLKF53Z1tiP2V0TG8w'@;
put 'PkNFUCJHJU9+I3A3byp5ZzRvUnBPMWtrSDkkUWksQlQqNSk4dml6ZlhLM10hT1p6ciVaNVNybytwQVZZaC9CUUMqUl1+WTdsZU1gIXU0P31hIUdOWzBlPXFObVJOXVkocS89SyJVdngvQTBJKl5GZnZPZVpYO3hHWnpwS3M4XmBqYGVsfjtCMV1PXVR6aSNzfU9dVDA/Z1ciTjxbMjVlQCEzdjV1'@;
put 'QGBYXVRfYyR+fmd4VTRqQSsxUWtkL258PykrfkR6LFFQIi9LPmZ5SU5UKiF4azE+fDxvK0cpWltmP2ozX0ghX2tzaSY9Jk45QlJXRytNe14/SFVKN3hpRnd9RzRKZi4sd29jWkBzalZSUGQ/KFF7c25iT25VYll4MGdWXSRTalQ7KDl2WkFzd0B4Ql5Jd2MqZjlEZWQuV1IpR31ITURTRlVHdFsq'@;
put 'VW1HKVd6ek9SYCNaRFFfbjsmSG07TmFhKjx6ZGdrYixlPCxaeFAlMF9NMUN+XygyeHpUSCR0c3FeX0AhXXteUTNRN0R2MlFaYEkoXmosVyFONytaaEphIUd6Z2w0cXMkRnIsOnV2RG09eGVoJGRiJFcsVG5hdUI4XjhuN1A8dFQ5TkNqPVtTKHdMPmgsMXt2NHRSKXReVEZeUXVvMFBDIV5VPTNS'@;
put 'QFQsNkcwMUp1cElDaiIkSUJxdzNmOENPfFs2e21zSjJEPDtQVFZyYHRLNlZLKzF0Xk8pUWw4LGxvYz1RPWVvWl4+X0lmR31gYGdsRFojd0xHZVk/MGRufTxIMkA2ZCR0VElzVl5UcG4vO0I2PHxdciFkPW8sSW0leHNxXl1sXVhjS1h0bHwkRHZWbllzLnBdalhtbUN9N046ezAsMzhUXyJRW0Mh'@;
put 'eSwmKXRUNWRoRW1dPWhyZn1iTjJGcj1reCZkXldnbVh6OWBadVB4diI9I2p6WF8qQz5QOH1nIzBAdD0kN2lFfCYpQjthLj8hVmhVV0YpU0w6WGIlY35meSE7Ijs9fVMrVTwwZE0pbURybE5dPVVfPlQsdlZycjpFfFFMVGFpTlIwSWFFT3YxKT4iflUsKFM3aTdQN3xNWVhTUlF6cjwybVJSdll2'@;
put 'ZiVQImp6d3NWR2V7UnxJSF5yeXZlLFA/MG8sLGpdIW5mJVA/MCNpJW5Ublh+Kz59NXdVUyN6ajpAVW0zUE8hXi48T0QuXlU0PEwxdzUibTwwbn1BbGd1enVFODk5Rm0sd2UqZmhRSzBKK3c6ajVDNEEybHZdTSlzUko4UjVmaU9tO0VBS2F8Wlh3JmJwWzlOSCwkT3d+ZnJkMThyLDRWIXNWQj5Y'@;
put 'MjJuRkVycS87JmA4ZygmYWx9Uj5yeyI7N1M4WGRZNS5rOlRAVF0yczlTJVg0JVttPkxXbCJxe1hLWz9iNVFTXnRRWEMwQ3YwJTA0VG4sVl55OGxtNVM+PXJdJGkyek9OZGE2MFhQLytJfSQhWFBuN1A8R2VASzJvcyxxaHhNb3A0PGhrM3czbyU7TyhKJipVL34iZ2dlNnBeRSVjZUU7ckJeeFIw'@;
put 'SS5LUixBS3cwQzhvPkt7Pz12PDNqKjZHI3slIi9UIzpsPzRLX1FDRDxPT3BjMCo/YjBwfFdXSVFVW2VgTjtObzo2XiVtNzh4SW9VWlQqLz9KT0t8KHQpMDNEcW07az41eFk9YV1eKkRPV1ZAPEtqV3VQeVtIdiloaTg6UkxoW199Z0dnSVNDVHs0MT93fmcqVSI/MEk/Uz5ZelUvSmc2PyExViFD'@;
put 'OyhsMFZeU1QvSik7eThtRXxZPnwmPFd+dkgpSnc5QjNNRit3W0t1VHRiMlpKdVhYIUIlKT1ue1F7TFp9YGFmLjxHPmVtXyYoSHdTOlkjOCtRd0M6Jk8veEw2aTY4WDc2JWV+V1QhKzVfM0s3LDV+WWMhJC5LSnFufTUmKlRUXVRLV2o6TXIwcDg/LDRmYFhrPTtMIWFWQDBUKVlPOSl1ZVg+MG1X'@;
put 'YiJdY2IsaGNycjVgIW5UTXZjIztFfSo7OzwqbExFIX0yb1RAbyolSzh7UUxAanFBRDFGVCZRXzQ6NEUuS0RQcyRgRSpEKHd2XUtdR2VrKVNKNHpvXSomamEkeCpaanNBO3VfeThwI2lNUzU/OFpuSSheanEsMG0qSXZFMCYqS3oyNDVUVHNSUzFEQldqdkwsLylVQzF0ZGN6bHMqNT9UXU1jbEx5'@;
put 'L2JSbzlNRENIIy4lfXEpPXYvbzVaZyx8O2FyWkg2JGBPPHZDcXVJVGVKTzNeaCNdey94TVc2KUA8ZVJMP0sjQCpzRCgpS103aSNrbGFIISFYQD5GVHlGRiEyNWU8MTA2L0ouWUk2JWl9cm1FZWxrPGVoI09rM2xtWn1jZWU1Q2UlcDR0fG0oZCtTd0ddRmN5UnY+LmByc0wqYSFXN1ZydyxPTG08'@;
put 'JG1VcFB6SmVKW3RtQSNgKWR+dEg/W3wjSy4qPW83a0dKfVprVEcre3YxbU5lWyZJaXFqNk1vSk0wR2ZeK0Bjc0U2ckt5fkF8Pz1rX3cwIWlsKXdvPkF9Jm0oL2o6WUtBRmgwMTgucj01PE1bT2VwIjRgTmBQLGkpMT4lSHU3LF1xNiFUaT1PL3pGWDl4QmtCTEI9aEJ0cTcyUSRjOXw5eENROjtV'@;
put 'TU4rUCp1c3FpUihgb15kY0omYnJkMUJ7Uis5d1sxVmpXLGVpZnl5UlNtMXlDXy8lT0NBdUNVLyg7JWRJNU53UnR3Y150P3NFLkVbdWU1LmcpX2B6P2BTKzRgezlFfERya0lyYm50PkxvRDwzYSEzTEErcjxPMF42YTFbV1FhR11xUn5tc3FeLlklLihXb34kUTJ5bFpGNz1baDxKMXRBI2t5RnQ2'@;
put 'cFhKIUMybEFsNSprW0hnb3g+d3ZHPSNZJCZMd3g9aT43e3liLGNtQ0YwUFFsb347TGtMN0RTJSIvO3ZuSnghOXZka1d2JD9RXkplRUlIPSM8UFY1eGxvMnQxJTwhP0lVZiF3JDZITj93d09oTUhAImQ7PUUoSGw2KCxWJFl2VkpDOT85Nj5YanNZdGxAemNMIk4kcjZCckZ0T0ZfL3gkTHl7SnA8'@;
put 'eGZqS3JATTxtcXRzSEJaa31JNktdWndwZkpwV2hzflpsa09RSWAuOHo9VmJyRitLYn5ZNV1xYUhOcls3I30iNmV1eEUiQFhIRVtoTSUiVVMocUlXSWlILjZtV3JNc2F9eSZ4aDlXT3s6ey5Vfl1qJlpKWitDXmtGJUNnL0NPPGJ3eThSUnpOODwuLisuJUJDMWY8OFBLe3hXSCNgczlHVi90aEd0'@;
put 'UXBUSFYhPHs9PnU/MSZFciFdYiNBbGtIYGFdQGIoOz5mI0Fsa25gYV1taCxWaks/KXJFc049cSVWTk84Lj1aLjouT088MkB6TUtfPG1iOzczaz46eSpGSXh3d0JyJjBATytoUlcmKmxMXiFsazYvfT4mKCQuIWJjeHtGaFA5Y3xSP1M4TU48aGYraGBAYiF2VlJ2NUR6Wm5qaGIxajxjSSteVTdm'@;
put 'N0M2XW9qTGxxXlQ7MDVHUWFUb2pgI0hrUWQ9M292NTB7O1piWEBddkVyRTF7bElHclB2Li9SYDFNOFRiVXs5eEp7PXx4SU9Db2tPRyVmKkQvND8uZSljJUlLNStjL3ZtMWQsL1A3cSFMa31UVTxfYjB1YE5hWEZIQTo/aHZRXl9heT06Xn5vfSE2e2dgckAxIShmZmx9X1ZFL2NCKSs0MnN+Y3lS'@;
put 'K1U1KjcuKiZePXI8bDxsZjhMQjE8THlObGs/PDE/UD8wV2R3RytkY0g9PVFsQ01QT2lON3pSSk02ZGA0fC9yRE5XMWh8QG8sWHhAaTVycFQ1ZzhJZjZpeWQldz1OPFQrNEhyVzJlXkBpVDxDNSUrKVNodCRqdj18T3pNTFpzaUxaOjI7M3JMNy41U2NbbCksZjJfSC5OPG9PQ3tZVUJdXmFmSGso'@;
put 'Y0tYcDQ/fCNBL2o4IjR8MiZufTd7Y3BTNmB6dyFvRypNcSQ6N0lrKFczSGNuL1FPV2JffWM4W0Ryel9eOH12MVE4PE53anpzOW9rKXpwLzlCclgqd0RuPCJeVyI4Ym9RK3dBTl5gOlt0TCl7LEN4VkQ5bVZjLiwuR3JJZ1hzcWkoIVFaL3xRIm0yOTlrVmVRJEBLc0tUI3EuRiZKbTB8Mm05JXJA'@;
put 'KDg2UGlaMHZqQSsqeiY8cy5TSV1adjhhelU/c1NNI0tRK0Vlb2JdUiZzVTVdQ2UkYiE7cy5VVnt5L244OmBxOHxVSEdmdztgYnQ+bkY2Sy5ZPiI8c2UrWFsjIXRwZyV7KDZNRUJOWVtRKERyVlBHOkl3R3A3VDlIR2NJRHdWWCo1OSpYei5JN1lMKjduUURlaXooS1NrQVlIMlIiKSRJN0ZiP1dX'@;
put 'S0NZP15Rc3d+dit3WEI0d2xMI0NaaT9NNisuT0N6RjBTLCx5SklaakF3V3ZSdjxbY0V4e2FJNzV5X3BPSSFicFsvQzpAKCpqdVUrO1czd1RucCYlVV9NR2oyP0NiPV5ONT5sO2hAIXJzcjc4UXpVez09TXpVe0ZeLDFEPj5GSihbN0YmI11xP3hraVdZTTddXipvPE1URV50TFosczJbRU84P2JP'@;
put 'JTQ9MVE6aUwpZTw2NE02U1BDbX40Ims1OVAhKC5UQzp0O3tufmgkQ2VJMW89Kjh4czBrR0t2JlpqbE55JWRTRXlSXjlJZWFYYkEhNyZQS2BofGdhRUdRJTZZfEg9KFNqLHopSl5wW2RDSkw5bFdiW2UwNGUsditxTX5qUCQlVX5QQjliMCJEMiYmTHR0YHo2RT0zbWhCPVB7PGVdTmp6RyRId1dP'@;
put 'PUJVS1BHay9pQyR5LzQ2SjhffFhrWCY1UERjJm1HP3lheEQsXyR1dSUqWUljbF1oKUlpXV0mdztsRTo0P1AuQlVbXSYrT3txZU01UkZOTV5LWWlZLiU9bGtTJENVOyQuQjVdaUBGOFNoUDsmdnsuSTdZVzxNKjduciFTRCUve21zLl1pOEIzVGRoWHxDPEEqJElfaSV5ISM6ayJ7bj4qJX52Vzws'@;
put 'dzsqakJLYS4lbExyISVDOC97bUA1enBIP0ZpckV1U11zWEplbkR2dFEvSnMkYjVOc3tITV5BYzYmVnhZdEx5Q0ZEcFcvTUU3PSkxPyFadTEkSiRLPFFJXkY8Jjt5a0JgVSQiTF99aXcjKTtmPTxIUDw5NiJgTGopVz1gVHprQHxocD44RGpdZmQ8Y1Y+SVUkZmwoVD42M3k+bHt7ZmElIT1CcWY4'@;
put 'MEZSQjd2N2dZMn1PP3FJOkZGTFpOU1d5M1RCZ3w1MmpEWj1PcCkjP0ErWXxSUCU5dGVFczBUPztSN0QlQjZ+Z21vd3ppZl46KT1qJHYwWDIrNURXSElNYiRfKmB7MWl3MkhHcjY8bGg9PUhhL25Xa103MSUvbk9TQU1KS1MqN11GcV1sWFshck9RL1J1NUEvXU00P2lXSElNVThdO1s0SDs9IzV8'@;
put 'MiNkImtvUzZgWSxNLndrdjgjQWQ3eTMxQ284VHNzaGFgYVM5ZndGbSs3cGV0UEdoeGxoPT10ZWUoPGhNZiwuZUIzKkE+LkRFKDEmTGVkOmh3bEtEJV0vMGZFL3xdUiZ1XkpEeDtGQiRKPHBSV1ZMSFFqKWZXZHBYfXhRUU09JFphc35JdFZ6bj0jXXYwfDJhc0MvQGUoLnR0cyEuek5sL0swKlhl'@;
put 'RGZbZTleKmBkJUEkMjlMRWAuYW4+PjA4QGoiZUVeUEJ6MjckfWBNU2pFMm9Vbk5sR3MzOVcyOnFxWz98YGx6TlRoPDQ7YUdWcXtsc3pme3I8entKdkAhZS5uRFo9T05TaSgqZShHNDk5ZyIzTVooR0BWTnB+L2ZyOVc0WnleISJZRzkpWUY1ZDRFWUtYN1ZKInNlK1F1Z1lidDNoPyR2KXZSK1g1'@;
put 'R1UwKT5VN2JkXSg1aj47WmJ8VSNvYiQiIzM1TmJTOyR1ajIvRER8Zl5bOGN8VTI8ZVVoOnp6Kz1EJXAxPilKSFZwOnVvTTs/N2E2WSxAPnlvbmVDM10rfCh5fU0kPnFDUWRbJmA6aTJ0OTg7PUFAYSU1MVBFOml9biIwZ05sWWh1TTk7V3g7IjE6N2t+aDleXyRlUSlLOjgqbCh9azBTLzxeTV4+'@;
put 'VUlfSWwxal59L15NIUV5ckYkM04iW0QzcmFzJnk7en5kXjNkayg7ckkkaXwmdjdnbkpdZUZBNVYiSnQ6IU81RFgwNSw4e2ApaERCRUZpPmpJKERJLCswPnpOSkFxQkUuQWZLK0wqSEN9NkpXcD5hJkNbcXlaK3I+WFFYJHVLPUNtLCUwRVRWO15ESm1VfUFnZEBfb3E+SEQ/W0VdakM3SDJGJS8v'@;
put 'SiJVL21oa14/dDk8VjUqR0pqJVBRVUZzMyhASXklcVFJYG5WW1E8fUk/W1grblBadiskU2lob31HflRHVmBVY31LZX0lcmE4JjZpfjx+L299KVN+Z0AoMjxPbF4mcixEflVMaFBWZVouakExNWpuT0l4aE9ufDtSXiNfbV9OcTB0MHxyOXIyOjBzbH46el5XOn5QRFNoU01bIVdLLkIuY1pha2d5'@;
put 'ci5CQlAuLjM6I05jQF1QfFohVnVqckFnOntyfkEwWW1yXm1gRkM9TlZveCxlJWghfFEwbWlDflZoPHF2JTYrdSVteXlCckUrXzVIMnFkPyhxWFs9JFF8cSwpLCUodEAjIT9mXmYqYHs/P0ZCI198Y2tCUW5sXlQuRV1pQitqVz08T3I7e2dTXk8kbntLOU1yIWBRalhbYDImWDYkTCwoaz1jKTVx'@;
put 'WDpTZiQzRHIkPDBlSEk8PEtod1dyMXBIZkMkW1pOe0M8ek47PzRFTm4uekxLTDgwLlM+bFRdKy4zP0FoaSEzYE5qblIySkhHdG8vQjVuVmxuRCRDYSYzREM2XlouOXZMWT45Lm1LVEAsMUMobC8xamlfQCYhNVpxb2k8aXxeSzhwWFMrend2dz1UbXlzdX01Wk99dVUsLiZgNnc3fkheV01tSGFw'@;
put 'byYwOGFuUU1jPmJJYnsmblghSnk9Vj99OWdMXy93cGtvRmFLeXFGaGpBZnVee2V0OCJCNnlGaj5saEBTdCp3TTpPT3lCIzomb01EIWNCOyYkd0kpI2Q1eCxRK0MvflVMY2NnaFMie3x3cEFiWXdtMm55eHEzXj5wZVhSYThPa3YwNHMxdG0pRSZ2QCZUd11MQj4jRU5aXUVHRmFUe2R8OlU/Wm1j'@;
put 'JWZARz98al4kb1dlKX4wPy5eY3U0XlYiQG5LNkttRDhYKHIibjdlMW1HUDczO1NfNntyPSUiW1dYOE1mZnprLit9SGN5eHtKa2oyTj4rOlJSLHw6V1AqbTRTMyRJK21lXygqNCsmelEpX2k1Q3wldmArVzJLamExaXtAT2g0MWlxYkljMzw8UVdPJHhbc3kwTUZsOUViTFBELjtDLF5pTGNuSDNn'@;
put 'KUxHXS9+YEVnbCMrNz1EMCM8S0xRJHFyISovT3h8Y0YldSZkPTE6ZDI8NnQ/fGYrdHUpQEBYTTlwZDgrUH1eY19QW01PdjdwJkZoK000eDZVL2EuV3I/P3JBJSElc04xKGA3QyE8PiVucVI0NXR9Tm9La0JTcE1AW09qK1Y6XXwmaU9eenRYJFR2fDV7cHlEdnt2cGA6TCtgOyhKL2t7I3RTdnln'@;
put 'aHo8NlZSZSIvK0twR0FxV180L1o8L1NJYFsiLHUrMkJFL3Y4MVV1VmhuWilGNTNAYztpRFFDOTtyXWo6KE4sPmFwNUchem5WYTlKKko4OSF8YVQxTSxgQlBjPGBfdGA5ajhPelFSODM5UGo/W0tVOjU2VWphYFN9IXZwZl1zYGddeVYjdyxjeFA7Y1k0aWh4fCw9aGVwLCJsSjlDOCJTOztEZCYj'@;
put 'dUhJSzpYaXdtMl9Gb1J8P2ZNI2RDPGdtTmpuamRoIllkQDxkIlNkejIsUFNuQl1uSCQ6PHRpTDw6QnBbKCgqWj8jPGNoSEZTVShqVileXiwpQWBnW2gyOUJtSWM4ejBBdHFeNVJBQW1ARSFWejtncnxeTyMpXiIpZF5XKSElNkoyXmIkdT0vVV9VPUxmLkRmMDBAKj50cWt0KzhwcnUyIyI5OztK'@;
put 'QnAyNlpbUHUzPzdTPS5tLypsQnAyXnRPdFA0OVd5JmNYWGVYMDUvJUQ5eG07RFR6O3kkMjkpI0l6TXlbeVs1O2FOT3QqPnkxcHQyOU9sdFlmNkh5XU04LzlUbXREfiN2W0g8c2ghYnxYclIwSUchcUA9N0ZNOU1QbH40d1VDbWo+SnclcztAOCQ8VE04Mm5VW2w9TF18O0B7dFRTbV5oRWxySnB3'@;
put 'bGxRZlpPdG1HUzZgYS41eHpWRXc6aytJaClOZ0ZSMDJ9N15tXVQxdyslQEJrVyQuMWUuWCxUbTk/VUdnKl03bjFzK3NbRU9hSGNlZDU1VVpeciJuMDZAcH0uOCJAbTRMO0I8TiJVcVZfTGd6RHlXMFQqNE1yIXBPQ3smfXA5R21VY0RdNi9fYHBbZkEvbTcvKH1rJkosUkljdWFKJEF0dGBbWX0w'@;
put 'Ln5oMXgwa3xrM3xONzxLX1h5SGpZM10wM0xZa3UxNUVCPFd2SGI9ZS59aVYkNFQ2W0UkekV9NFEsOElHIW5tdysyKUE0Sz52TjAwUUZSIT5fWzlOOHFLTWZCVSw3QGx2QDl0Mj1JLCYuWG1RZmZzNElNRk1UVClwSDhsbUEsKHBVSjxyL303VkplZ248MUpQdX1mcXlZMFtpe08vdTVjcmtORzYs'@;
put 'U2lQMEVnZGNzUS96dmAuKCY0LFooTiIueUUjLEE6SkpddnhUM2IxOTRyeWwhdWxSVmU0eF5SM3BsU25TX3g6RGV1YWtUMm1QSEl0c3dLOF9WQz1idV5IK34/NXhVVDZ4djVJXz5UYzV6OUcvM29ZU3plSGwpRX0/fWRSYlAzXyYsZ1I+LjFpbyxULyJsLmQ9WmJ6OC5GMiM1YWtiPDpRZz5YbFl0'@;
put 'IUI7PkkuJV86NT96Yl9ddjgpa0B8cXF8Z1hKQjwmP0ZZJnwmP3tgaVQ+Vk1jbTN3cSFuWilpS1hrR0tdXlo8OkUiMmp3WEdqdS9jJGhaMzEmVDJ+XTckTj55I30lUzFHfFhLdlEoRWJiQ2l2bytTdm8pdyNESiRlciN5fDJ4XStWUXh5Q2NZMkshQnBQRnxYNV1XakBJZzVrRVFDe15oITh2KkxH'@;
put 'S057MmdAUnAuN1U0ekZtJDtqZUJyOyNQYzh8O0FYMGpCZFk5WSJpdUs2QnBabHxLVUYhfFsmV2FHKUBML3dqS1g6RzghXkZOS25UYDJsZXJdPWtAVDZJX3YrW3xHYGVgWkdQNVcyeU0qWGRZL3dsIzxqa3d5ZE58VmMza0BaWF87KExHT3lYMnEjKU5MbU1fflsibGVCeV5qPkN4XVBaJEpxWzZu'@;
put 'Y0NjUmRRJS86Lm1HY1JDJSNHRXdNajNuViI0LjlBM0ttVF0jVl10cUxFXmRKZl0vbyZpSU8me3ZERlFbMWlYQ3V0Um9IelZsYm1WLGRYeSJhWztUIXV5Si5sMEssV2VyTk9nbXh4IUtiRSVsWUdJWz0pMzxjOjk9Tm1SIypGNktKMm0pVlE9S0tyN315I2EpWCE6Lit9ZXg3LjB+OW1rUFRiLFlo'@;
put 'Nyp0LFpqNlYqTTsmbkc6Ilh8alpoWjBfPnRIREpRZ29OdUlKRXs9ZlRifXEjdVp2ZyNLVUo4TmZiLFFCbGlHTk4+ez5yQigvXjkuL3NSMiFiVkBZdjRBZWBLYCpfTyQjWEAyP2FhKCRMYU5FVW40UDVNInEmI3RKPDpMNFYsXUh0aXdGelRTbWt5Pi9GLlZWezQ0VDB3SlMoKVJtW0xqdTlgdntx'@;
put 'JE11LHVZb1VMYjZ4LDBXIy8iakdxUFovU2BXaltLeTtTe21MaGRdcHwhczprYjVicE1vazAqLEEkPDF0eStQTWEia2V1NmpWS2F0aUdfaHtme1t4VigwUXREREw2WDJ8K35lQ3p2P2FFQlo1QE8sZks4SllkSTprWmNpT0JWQ3hlfjArdT1aN0tdbV1UKlF1VE1xQU96JipIVl1uPGBvVV1LSlZ3'@;
put 'dj5Rc1FQdlApMk1DSCo5JHVPLl8rY25aNVpQbksjRClEQldnWyReY1QmfDkkWUNuYyY1OVpvNUJlfUFtKjIkPEhDaSFZNXJUVyNZNXZMdXp4WWhFfmxDe2YyUHgqcm15KXJaT2tgSGVPRXtYVjJQUT1EJGJba1hKek18L3RwO3RsfT9GWjBlKUgqP1ZbUF1MIkEuJVkscUtCdXYmKWtOSUV7XWtW'@;
put 'O0NmTHFIQi5tY1JhWUVhdiNbeFdsb0JEaj0/Sl5wfHBkK055OFpGTGw/KFdQWylNPmosb0t6WWgvelRgOVFHLDgmJEMpJGkiYCZKVGssVkFFVTVqeXtCPytGKj1eYlBvOiJoXlJgOTZgVWdUYjBaak5pL2dXck4vJTdIKzZ+KTw8N2kyTjRhLl9nWCNPaEVbOTA3T0pucXNWJUpzYDsjYUc5b04h'@;
put 'TERPUCJmQ3pnQ2xdMz1GdiwkSUokKU57WSQsXildQSQmKSUpLFV7OUVzMTZQOlIhViUrJmphUDh3LG51aTA7IU80WTsjSjlNS1kwX1gmeXlhWC4yTG9OeEJkPiV8U0tTbUclX2ZvYixhakFgTiRhZ1U8IjdjOV0xVm5iJGJlI0dmJE5nbzltLHU9aiwiPSh6Ukl9IWE6TmxZZkNZTEU7UzMrK11M'@;
put 'dlUlYmpzb2hNO0lvam0pLGBucCtqL2tiXzZzTyhHTC9tY3E2TFtsWl1JLH1FKkZ3OSFORShCOjlwJHV4SkE8ZCxvYEJtOUAlfE90bWgmMH1CJVsoOSVgJFVVI2xrcnRvfi87TDBjbD42fm5qU25wc2o1X3wmQkt+OS82Q2pARDpLNmIlS1U2KXA2Yl9wNmJhM1EyQ19nT3NEZXFwKDIsKGo1NmQk'@;
put 'dHpteEtFZygjX08xbXhiaipMUV14dkAldD90VDMsQkFBQUFBODAvUlB1d1hfSVlvLDVbPXFjUWFRIiohN2BxM3NUUHJNKDdiUz9QcmwhaT8yQSE/X2x3dnt5VTlNPFEmQDI3IS5aQkVYPV1qVHMyMnpwTCFWOkJ3Jl4sRXwjdjk6YHFvKTFeQD0oRD9NY0l0dHpvUHoxLkpWVERNSDxnfEc2VG4k'@;
put 'KXZDbUsjc1BTXmY7Wn54QiFoKl0wbyxqWGpHdHB+RDs0TWR0b3dVWTx9MzM/dnYlKygsLD5BbF1nSXRQYnBqQT9AIz93cyJPW0x2PFMsSyF8Ljl7Oko+KiZPLHRPXmtRJX05NyRmWCkuVDVmYFdKMTQ7b0pGRDhYMi5TYD9oIWp6IyZ7MWBUNG9XRzl8K1I2QitHNnVQKnJmey5xTTA+Qmw4TVol'@;
put 'JUtsNiVHRDxyRyYrNjxlbF8wd0ZEL0x3MitiLExybERtWGpzUSl8JmBjYzVRXzE3IlNSYXJ1IiZ8SV0lTHlmM1ZOT1hFNkVAUjA6W1pFTHpIITx6aCNlZX45X2I+dVUjJnJfcFlydDNPfjY8czFuPmwyND5XKERIRUBKRUJMOnFOdXgvX2VLRSl8WUNTYD4wcTVBXlMxNSkoQlUrbjhCPCZ6KXJK'@;
put 'Y3ZWUTp5cmtiblY2Ymc1fFFuLDMmfXRGUU9bVHwqVV1xcDJsbVQ+MmZSOX5sSmtzaSJRQW1PPStxbU96ZlE4JnAxan1UT3lNIz8oNypHRWNbfXYjU30xJHh2NVI1dHxNPT95T1t7KUBGQCUxQXxPOSxLUDJjKn1yPiJrdnBbeT0wWXRgeitnaXFXRXFCKWxlMXYifDR7VjYoZG1xfjUoYjxwJk18'@;
put 'KyR1O1R8MTNGNFRFVGZzYEV6OlUrbClwVSMrMX1xclo9Km9gIiRbPGwyPU5oWz1Ve1kkRXcjPls5LzQvT3gifW5kKFUkbClTXip7PyhRTkdHeXZbWGkldDJBUUJuM3BSPVFeM2t9LFJqPm9ZI2FCQGc2bnBNZEtTS31PQWZ2T0FfVylgKlZoKyJsfTUmUDRwb2B7VVBjJk5aSXFvYzw2elNSfHNj'@;
put 'fUJmRiQpL2JCL09JTmAmPjphdS51NHtAJWkpQ1BSR29tY0BdaDNRalFdfSJxanVVKDdJa10vOWRfUHZLIT81LilPW1IhY2VRSzNJVH1+OU9vJCE3fmU9KnpbN1gyYiQ6MnduJiwrZj4hMGFZTjlNQ11HKjY5bi9US3RTc0ZPOCNsajdXSk95WWYhOFkiOnIyRHJ6fUglTkJucjFGbiRgbTh+Onli'@;
put 'O3Q+dXMpOzM9Kn1RN0R3fH1RQUU3K0lHJGd+Qnd8aFdWU2g/WmM8b1kwL2JJe0FDPjBtT0crJSpNPjg2anomPFZuRFB0cTNkTHlpNUEjTkpaQiVONytaemdIeEZxOXooXUxvT1dDOFlNaz86O2taREdlJVdaeG8mZSZVKSV8VWJlbnM5LDM1QmR5bnBfTmRzSWJzSmFiOTdgJGcjSG5ZJHc2U009'@;
put 'a3hyOk8majRQI2tpIWgjZntdUDJPcDAkYzY3Yzc9b31FTkhFWm1hLHpTTjVAX3U4MGdPZT5KTjMvPTR2LGkjYDQ2eD54NFE5eEEyXSw2ODpZK1MjYGdSPmprVF81YWNKVX4oMHtpWEt5Ljdod1liZyg9d1M4SE9MMzA9JFhYPCp0RDZqeGBfXTxgdzJHPFBtcmlSIypfJSFJPWlTVyM1YSQkSSY/'@;
put 'KkwhWTpOOEBXLyEmOWdUSl0odUdUdEFnQ1F9PFBIN1s9UCgwVTIxKVB2ZlZGXk92Wn1RKGQhd147SDE4RDZ8X2ZgWlhnWjtNOGt6aCQuVWBTMTF4RSs4RCNxMmMlVFFhZT5LMDxacyw+T3NecVkmOi5lNXJLcjJNJC5AJU9BUlFsYnoxeT06WTtTKGpCSkw1dCZiUG5KZ1BbaHM/Ong8az8wNyR7'@;
put 'YHpdPXE2Kyg0Y3tkLl93YjttQ15oZ29beSxeJG9AaEU9MkhaNVU1bzwwUU11aStWRW5zLjxRYTNKakQ3K1JtZF5xYnQqJFE6TThrWlE9MGFmeTptcVtWTVdJX3E0MVUpVUJUJkV2cTUsaXNueDpMfFhYRnBRUzxEZDNETG05Wz8+PmB7VG0lfmpLIVAvJj1FVWhGfnQkTDFXYHF6WnRMdUR+WG9M'@;
put 'SWVZd3drYk9xfXI0aiRCLj9rRzAhWnpXYGtHK2RleltrTGYjVjdOdTV2UGRsckF3dEY9L3RebSk+TGMjOnZLKj5MYlNUdDpAQkxPQiJOJU57Wz40K052QzBiZ0c2V3xlZzYzbj1QLmBaITc0QEE5cTlsY2tYZSleXSZWZGRKN0kzPD92PFBadV00QFBAM1J3cWhPRU5za1IrKVJQK1VCYUw0fCpY'@;
put 'MntyKj5lZTZ+cltNcl9SRXFYfXI1cnxrJkBzPiVKLEBxb3huIytgL3Z5cCs7WVF4JlcpLCVaaSRWbShObklfI3wwYCVmMGYyfUtbM3VrVGZlZ2hCdVUmPCEibShefHFjKjdIb1k3Ui57M2dgUzEsa3o5OW1bPHMrdTsjeENiaDZsR0swanZpWlcoVTBobyohNkBbJjJmPX42aE9YS3J3M09xSmN+'@;
put 'c2tmOCwpPkYlLm4+V1s9fkswfnMjNVp0cl1+aFdycns+RVZHPVQ6bUxyXW1icntgNSZ+Zj54Z281PXA9MiV4Z3ReUHA2dlV8eHtwX3o4PTtxV10+aWIoTms/SiwiTSNAMUIlInJQb0leUWtVP3N3dnhJY1MsRDBaRHVqeH5mKWoxMWZUc3duTG5VLiJvenc4L1ZgNXVCPVlMVWdBSiQpbiRUPGNP'@;
put 'U21MREQlKDJXbEFibVFEWXdIcDxQZ15EMyY0MjplKyt5ZFNibXZHd0VTJTFFUkJlKWBUM0JxIl4oI2svTDI8ejlaaUVIfE9yaS9sX3FDeTYxa0EqV0xVWSkrVXJCYjd3V2w9RkhIREx0Uj9bb01TI1BhWXFaNXJQRH5CazVOTzRSMShlNERRVEJsND9iMkc2NERIbDU2Vzx2Z3dFcHVZYy98cSxi'@;
put 'JChtJSkwWT9rPSRRKU0ocipCM2JhY1FRcCUpd1F0SjdzY1ZCKzwxa2FdQlpbdi9iUUEzaSVyKz8yTj4pNnlDYSNYTFVWdGRjJEp8V09gTTd4d0tTeFo/RjpvQUMlRGZEcTZUL1dKU01DMitXPWg5WjU1Rkt+aFZxUDJvZzBvVkg8c3xEIVdiL3diI1d3TT8xX0FDZnd2UT86JE9Db2Nka0hLQUNk'@;
put 'aX5qPClkTHlJQDR0LihUY2t1bnRNfHYjK0l1UiFsKTtUfUR5KHFfbVVATFROS0EiTG50LiRhbEwhc0ljd0ZYTFVqejBOPis4UHBCNCFAQVkhSExWWExVWmBfXU50aU5rKXhue2VZTFMpJX1rVXVYM3BdQ2NAfFg/R0xlOnkmV29JKDMvV0xVbSIkWWFTWXc4V2B2U0FCdiN5VEBtXVlrQypUWGR4'@;
put 'akgpdnkiQW0mQyojZyJXb2hqNltAQTdjbE4/IkI8dTVsdEoiNC5GRCVtXjxpZytHR2lyQiRnMVs4TU9KL05rWis8NExQemcvVUBvRW1EZkImKExVM2JMNWdFayFWd0YqQWd3RShBN1o+NzQ0RkttUm9uemppdnUvOWMrcyF3aUs3RG0qe2RsVUFCZ3w1THVHQFcqVz1vKnokMFM0RU5mRE90U29O'@;
put 'LyNbKk47PmVafnpFMFBqNC42bX1RWXF1Mjl5NC4jMTpvWUlKWDVuOlgjWVI2VkxYIi8+VkRUaEtDZVV5QU9YQHZSTkJOJFtlTzc+Q3okNUFVK0JQQkAiYSI6bztSMEReTDBENmE5WzptO0VvWTszZ0dBY053YCQ8W1N4e1liKVFhQU5yUUNtb2RlV1slbEN0Wn4/PmtfbCZPJTlbbT1sVF5VJTFB'@;
put 'cnV6e1l0cGlbZ2ZPO3ouVXxOK3BndW1EYlRPQmhIPUZwaT8ufD47Jn5lfXRqJjN1RCxPWFJYK0tNTkNWYU8zY2FudzA+JE0pcnRiSS9FbHdTXlhoWGNQMUZEPUxvU0FJRFgzdHV0KTBDTy8/fGozPWo9UC9JLjN3OiFsPTdbLzljUnpSOj1gMV9AWmFKa35oSDZwPWQ8Wlh4MS8vIzkjQ0FfTllv'@;
put 'aClSeWg9bXw5UiwvX01ZV3llS0FmMG98ViowenVrfDBNYkM2LHR4RlF1SENeVUZgQ2Zga2QwMFQ+c2lNc2J6bil8bXluO3R8aDNAMW48dD19fj1bX3pndGZ8WGEwLkNgVUVhdS95fH1MXmh8YWFlU2gockZhRXpEdDRhVEMmMWR6blh7WGYwcmgzeF9JQFNbKj5XbyhAcnpgXUdARSw8cFFYUXw/'@;
put 'SDMoZDFAeFpkZl1seTpsUlNkezR5dkhXQTd+bUheP3JbMW5aPyo/L29aX21YPi40WWFjaT4/aHUwVyFSaFtRTkVpW0lia0Bod2tbT1VIMiF8VXdsdV5gPVhSNW84O0I9OWd8aGguRjtaPSVVKEhiZ21PNSxDWD0lK2spWSowcHUiTlsqVGcrazBFMmc8Jk4wR01mdV83RDx7M1o7LHhoOGErYHF2'@;
put 'YUQjTlVOST52W3YpY2I7OHc/VCF4Wi8oamZtMCpHImgwRmlWbU5gcFJYRHchQFoyTD8qQmZDVlJhRmdEIWFJayZvKk9VTzF8bUtUOysiK01Ea2RbMTBnVXlRXzAwVDBzaTJMfjlkMUJ1bVZ+PjRaU2l+TTtPLHUseVZiaTM+UygpfmAjY3crQiN5UypSJXlyOUFFd25yOWdIRUc9fUdValIjWTZ4'@;
put 'USxCTWUyN3JYK0ZXOFgzVWAzLFFXREtJK3dVOnFZV0R7MEpaOXVPdWhmI0JramldMFU8WiVxMDA4V08hcnlGayI7cTooXzc1RlQzWWg+YHNRWTwlNi9wLFlORG8wYExtNTk4KlY+cmQveFAvJn16YGtLS25gQ0czUjVITlh8Vm5UfCFhSHQmfEd0JXF6cDpRPntDKnhjV2N4VkJaSChtTC5ySzNG'@;
put 'cSh9TGFWLyEzVi85OnZ1e0ZvazlMNXJ8KXFPQCgxLENEMmdvQ2dENjF0aW9DV2hNVyMrIXM+KSZpdVtpZlsjbitgKDNYYC81Mm44YWtAZ3xAVyZENEdKaFtTO3dFUiMqYHppbm9qa1kkXWdbI19pe0xLT3lZZmZJfGVHSEdSIV9NVDR3Ljh0NVJHS3ddRFk9I1c2N3AjKWE2U3B0ckM2TF9Ld09p'@;
put 'fFUmK3JWcXZUYTw/RTpja19CJXU0TWRLNU5uajx2OitpTE5TZT4wd1lBOis5SyRqdVtbLjNJSllEVENZTzp7MExuNTF7QyhgWmM1MXtDa3VhQG88QS8zWEpwXUVBR3FbKVtEO3o0KW5eXUxxZWVyfm9UTHtbdjR3LjgqQmdEK1tGcj5JSjckcHMvPyFLWEAvLztCJk9KaVE3WGVvNDU1di5ASFhm'@;
put 'WHJiS1g1IXNTaGBIMU57WWhzfi9efW9NeC9taGJObzliIXxvVDdYeT5vUDpYaW8pQ312WF18KXxYRnBkU1dLVUhnaiIldT14QFJOSTFCT25sJHpYISQyVXUiKVhGLzgzPTlMLkRXY2J2KylVXTVSR0tbZmFNOVBiUk51RWJ1dWtiKkdOP1Q9ZD5VM0pfR3dtYXBQfW5EWWd7MGEuXyNyP28yZzgy'@;
put 'KU1JaGosb0NtcCEwL08kK3QsekdOUzApVyRxcjNONFEuRCpncml+TGZmdEYlek0/THtqWjgrd0V0cmdgWlVDXlVhXXdWKltyKlpWPSRNU2IoQlkybU9HWmpkPE1oWSt3RzpNTV9gQ041X2VmZDFUdispJEcxLilVV1VRWmsyTFBNUCZHW1k7WztHYSs6NFIvc2lrdzJQZk46NEN0LnxHVXEqMGEu'@;
put 'XyNMVzttMkk0KCx8MUUkbWRAJVNNOmEqdHYjaUxdfj9YPEcqbllVSk8mJTFpP3dGRGFQaEw1UjJiO0NfLGJPL0ZEcXlGRHpdbnJhPCI5OE5fd1thPVNzTE1wYV03LzVEdzRJVzxMP1tTVFVzfjxALClAQ19SWFo/YUdRfD9qJFo8LFNyTkJaPSo/MSR3cmheVjtJYikiZWhbTnhJRCt3Q2ZdKGlZ'@;
put 'OUomKFN5KG1jVEJQPDljckpFcyRiLnNNLHxNOzo7YmUsU0V1WXQ1LmA9TFBwInw2fFhDXXkiOm9eOTpsUkZtbTdKdyNzZWVdTnV2SkVQSWlnciold3A8dmZpdThhLjlCTUdUPEJpLiw9KG1vaVAwZGNheD8uNWRQV3hKdSpoWkk0cGkwQSkoenx7Wl9WcSNlNFhSLkJ3YXJ1WEEzfldIZStSXjRA'@;
put 'K3RKK245UkRpPS4zd3x2Y3hrO0RtWXQ2SUtybnxSTHohdnRkZ213fTNGbV99SUw5KFtoMVFgOjx3NHs6cmVhYD5iT2l8OFdtKk8vczx+ZT1yYl5BXmQuWio5M0NmQ2x6ZDBnJDpEOnQqfHlGWDhjNzE9OHREP0ZxWyxXKnhOZzBXLkxUfTVDRGdHNjswQWYjUHxoOls7dVlwSGZmakU6WG0uKUM8'@;
put 'dU57Zil2RCthaSVVMElyK0FufldpSSIpfjdzXX4/VTB6Uk0pQVd4cGdFcSVqd3s6fCEmT0hCeVBqP2l1bjRXNTBXYmlqOT5yakpmT3lQd2k+eEJ2UlRMaWxvIVExeFEwRjZWIVQlVSVzUUhRYEdWIzR9L0IkKTBNUzYpKyxacCNQYW5ZXUh8NzVKWntPPUF5O0A6MX1xSjJ3SS9UTSxDIy5CRH0z'@;
put 'JjFBOyNQVyVsOHA4Xj0qIypEdzxvKj0kOmk/TUFBXmVWQU0vSnMkPipXZW88S0p0blRHcV5PdU0qXVdoTDdGMHUxUWwsRS4kaWlSNVFpLGFNImtePW50ek4jJVM2QUY3WDp6X0FtVThTSmZLU0d2OGpId3d3e0pidmdDdTF4MXgxRTxRdipuTk95REx4K0IjMG1WcHh2dStCQkt8Q1YydFJOSE0i'@;
put 'K0B0NH5sKytVaktGcTl0anRrX1YyN2t3ZzV9SFdPIkFUNSJrQmw1MWQ0IjVKLlI5PWJ5cTVwKTJLQ2MsK1ddbyt5Liw0X1ZFLHh9dHVTdkwpMTFkSmp6WFtgaFNAaFU/RTpXeVpiO3NwYDQzWypWaSRrRFhebz10UG5GSk5YPUxhN3Z1K1h6KmpYeVAqZW82RUB9RTpeZkUiZSUuRCwmTEZBe3Y1'@;
put 'PzooMzpRPEZmOjF4N1NHQmUvRXI+fSlSLGZSLFUldkpTSmYuPEplOTNPVFVmKkZpYSYzM1JqYkBiUGdHclRUZXtHOVd8NGVjSVtdNHJhaClseV5QeWppVU9eUktSeTw6RmIuRTE3K09rLiJ6QiVjUj8oNUckdywoNWk1e1B8O3peYTR0YG4zbUxeP2FNKjs+WktiUDhObHpTdTJjels+XnFmOEdM'@;
put 'YD4zY3hDeloiJUsuPUxYQ09wRTkkUG5ERlQwIXw6SCQ0R1U4ZCl9cVc/OkR8LzJoMyZ0OHRkVSlhJCtDMktWbmhzeX5yYWREI0ZjLyt9RGtUa0orVl06QjRrPWU0MHpQY2MxTUllMXQoOyRwdWUsRGdQWWN6QEBoVTVlekxFTU53dFQoR0hRfSszcVEzZCFCXUlqZ3d8TnsmR2w2RUB+Ry5vfGRu'@;
put 'TDU6cXFIflQoQlI4XlZqOSteaSpXOlo5dSV0eiNNZ0FoJXpfTm4uQUxLbEpCPWkpciF7Nm0jeyMjKkkhWD9pSWZqQmJGMVZUNm87UXNKMnR4ajdydSkxLkY0WV1pTX54Z2VrbTtPYzIkVUdZRCZ1SSolL04yXk9jW2glSmdnV1UrVVdzLy5XWCFvQkxdUG5ZVEEmXmokKm4vUXIjeEJzSWNudEFv'@;
put 'MT4+JFRgelF5bU83PV8haXxPek8zSFgmS09xT0l0L0RGS1dTP0x4emtabE1iLDlpTlJJPCk7d1A8WlskKSFAcFBuNioiJWZdRCp4fTBgP0soJlp+VmRfb0R5SUtbK15sJSQxLjczNzxGJnRtaSxxaEd8NXQ8NzVDR3dvcH5sOGpATWloUjAqPUhDUiVzSkNaXVZ3P1d8ZCxGPjVyQ1ZRaDR0TShU'@;
put 'KnomUmBkOFg9UHN9M1gyN1cvbitdOFZJLyY/SDY2WkZyKzxqRyszJHtrOVskLE1SJT1LVWRyOSQ7dT5YJiRMMTBsSWF0anhZdTMzK3BULFRxaHdzSnUrMUg7SyUiYyJWXk8iflFFMkFeekJnL2Rjdk8jTDNnNC9kTHFZTm1mNSolJSt+WCZARVJ5I0JKW3ZnUz55Ilh4OFlLajdPMSpueEI9TCJ2'@;
put 'cUpdST40Tzp3ZzB3OFNHJHo5aS8rNE1HQWxCNlRSaXRVLCl4NCFSZ30vWDs0ZF9iXjZOYmZyUThCcnNpSGVGXTVLdXhHel5vPHcydGQwdWV0cHs0KDhCcik3XmkibixUUTdQIUFrZXtCVC9YKXgsQzlJYm94eGF0JltnUGlhcTVwVlUrSyt1Y0glfHIjRj58Xi5Gaj8oTz1TJSI/Q28oYnVwUmtD'@;
put 'NE5FOl52VHZSV3RSMCV2QzVxITU0O15SQFhOXUN2cWRVYmF3fCRJOVpDZTlGVyxkZnhydzBQIUF1Kndfel1vKDRpR11oIVY7O0RLOTR8SGpPfjtEM05GIjNPUDYhYnUsOkFUcGhDZjdhdiJ+bCRZSStYQFJwMWBnLEckU0I4QEluQXdBTkNUQlpyYU0uRSlLMGtdUTR0cFIzPiZmR0VsJUR6Ukgj'@;
put 'Ykk4QFdwIUt8aiZrdllCWzFwMGZkandgTWxAWldTTDAhR05TTk4hdUxtRGopbDUwI3dpQzE4X3F7NHRZdSUvbmxwdD5sWkh3NHVwL00ueT1FW31vUDpsd0tyfEZPJH0laDw7UDBDajJDMixYclhPUzZ6SUVbYjhqJGw0Pjg6Z2x1PXtbemRtITIqcUt8ZFthcD17W2ZadUw1dklFM2w+TUNCJjh4'@;
put 'YjFOY2ppTT42dEZaRW5ufU1JbihzfmU4WnsjQSFlVDJWXzR7PVRmPmYxbSl7UlozSTlJPjQpazVTRjA4dFBxcEhhXjN0Y2olOGosb1BzRyIhYWkkVnBIWz1KYGVMbDNeK2BKZz5PPTgiSDE7U2BmcTlSIzZFO3JaclReaWhpNSIyJSNhOl5hYVdgYj5VQyk3VisxRzJxUEB4N2BXSlN9IWN7b3Zq'@;
put 'U1RDSUJNRVllMHh8WmJgP2tEVDpHWHdPQmE6UDorbiNEN0k2L14oZjBqO3xRYXI0QXdVelljR15UY0ose0c7S0BKQ2V7PUJve2xhcl9wQnxsWG8+VHNxKHw3ZlZKe3QkJFkqY3I9SV18WXFbSl96ITUzb3x4KUdlN09QTWFgQUVbWlZ3ZnRNW0smWSZuSCZSe2kqSz5YfGxfdUllTDgoRz5bO3JC'@;
put 'el8wUyx6YypmbmBJYmg1fEspdX0wK3I+aDMyZ3tOayJQImxROEx2JWtla2l8T3heNG5VcShxS0IvZzoxYz5JPHlpIk05NjgufCFVK1dKVCRSS1RPLFVtdTRvNkRJKmxNOkBRVUVGQit1LzdmVTh5XmFWRlhHYXVkIylVZytKayVGL0dmKz1CSE00NjNwW3R1S31MQj0/Uy4+Xyg3Sj1pYjtiRCl7'@;
put 'dEBMZyhwSGZQaHU4RDd7KSs4Nk0vOltXVnRKRGlBMUlkN2BKW0FAUFN5fkZFcyswcD06RiheZnp1VW97X1d7L0BNQURKZGVKQHBqNyF3P1loSVp4Nkk2bkt4XjFGdVgma0k4QFZ3I2JjIWJib3taPjxoR3JnRSolUSthK3hyb3NUYl0sT15WK2ErSigmPGRmR1V1QlVHQG9RRj59SmsrXj54QSVS'@;
put 'ekBPYywkTD5uaF95VWNIYWFNaUI4Snh0JUVPSHdYREM4XyFOcWF1SDZ3WiNYRlBNZVhlLjNqbEBGb1s4JCwwSUdbKiQqLHdCJDpjMn1Qant6fWgpRTg/WSF0Y3wmN2EpSj99ZDQ2KF5oeFBNZyg5M2M0NHY4OFRDOFdFeCM0SFh7ZDw/V1RiUHIhSSQpPWdBYF5Pc3N9R3xNMDh5VjY/Tl55Q2Vu'@;
put 'JGZRYnZARGMpYUdwbGJxdFI4Rmp5JT1oYnU3TzckIVA/MG5DKXthNVsqW08vdyJTXyFgZ1orfEV9NVpvKHBEUUoxMztSJXw0LlM9Z0JeZE4+RD1yN2FlZjo5N3pOMC9GcThTMWRNVVdmYD1OOEB5M0RDRHdwa14oVm5vTiQuNkRkOHRJQ21LcXJXRFhtMktDQz1HOFBfVkVRe3QiVilfMmp6WSlS'@;
put 'XXxYL2dyY1o3eUJxdlB4I0YkWCJTYGRqOTFHXnh7XVY4ZW1NeU1YfmQ1I3BuSyFAVCVweil1TWY1QSRKLCgzQCQrbiV5a3l2XihWYWBbe0gheT9TdlhdP1I+WSZZYTArOnFlTGt+UGcqWk9AR3pPZyo8ZjdsP084On5iR0NWZCt4QCo0K3Y1MFVaJFkkWSQidSs9c15YV1A2YztBZiNPWGdKM1VN'@;
put 'Q0J1LzZia3hsaV1IUmZsUktrbCRoPG1mVF0jby5mYyxnZTtMamE5eG0yJD9CMzxnWUl1TGpheEYsP2IxL1MjKUFmNV9+ZTQvY0Q9ckE8bl4uZTpTfmw1YWY8ey48K0RURT5eaGR5KURrV3w9JGIqcEh1R0VWekV2WCZpVlNEVUdLK3xYR3AoTHI7QE95OFg9azhfR1I3YEptZltlWSI2Jk8peXNM'@;
put 'PjUoNmI6L2JKQzcmSUFqLGFeUDpPXUJTcmZoe1pWXWsjWyJ+YnFtSEpvOWJUVm4+ISNKLiF+bFIkLGhGfXFOUGFUWmNeeVN+YD9gPCt4OGY0biZPOkEhamhJakBZVVAwcyorZCFqa1AsLlJ8UjlZTERtYH1QfC5hVGRrQTxKTjBzYXZ4ODN2JCVrekg8fVZFZ0Q8ZlFXKXNeeCJ8NFMlcDxgVzh8'@;
put 'fDluT29IMlAiVyNePCE7KEJudVkkQHBDKlNhajxiWnUmNDs1WV9MQmZFJHM9cTc6cloyJls7QlgkQGJpfEtVdjxyRE1dR3U4TGpPImxAWjJNUCY1WTJHQiVwOCFjJiJZPTpnT2RNTzBHNilWQzklY1RIaVpxSktoRGpATSREQjolY1RIQ1pmYVJjdGMmMkgsQXBvSEBNYWQ0MFNhSWR+WSZ1PG5W'@;
put 'ZCEwIWtpZyR8ImNqdmk3LExTcH5jQ3BSUXlZaC89dnI3OnpJNk0xO1Bpb35RezB7Y3QsJU8iL11aQ31eZFs1KWdYMDZPTnh1Jl9TbVpiNSh5OzU6ellZIlFJT2VdfDViWX5Zb1NsOUFySU8pd1h3NGU0TmtEZzJbWkNwc3piVlNkWEQzJUFdR05GeHY0PWxNeVBEPD9DeV9TQlkraSpae3FqOVdK'@;
put 'SFo2TF1vSWd0UyNQOUg+YUhlREZKWlQlfTx8ZUVxPjBmUCtXSStvTmxaY25BV2xOM0MjcSZkcSVXRSNMZCNFMDEvImg1WmRxdTUyLyJoIitTInVzek4xWn10eU4odDMlWDJ8TDxETGg8RGIsOCNZczJ4XkJBWm91TVUzUjlIKkZONGt3eUBfb3RJYnBWRjFsOCw0YD9wdWViPy96TH5eZCtZdyM8'@;
put 'aDUic15FYW97WGNIRzBZaSM2aFNhKUp0UHtoWXZlVmpFSTpnWV00Ynp1JEVeJWt8bUc8QjE6ZU8rZlJEPiwvdXtnU25FUWhhYDxFdTl8OUU6O09HX0FwQEVZUDVfSmhyN34pJWM2WVphUmFFOnNpRWVGIz0oYjk9Kl53ZldhLiQ4PENFOHVsKER0S3xSSF5VOC5PMF4ldk1hZzttTSROT01FRCgx'@;
put 'PSpXdSEqSzY0NF5WcDtUZmtORDpKNDcrcDdyOzRdIngoaihZZGtEbVFGTzhuMyI5WEpBSGdpdzApe35WO1A8RHNZR1RrRTsmaCQmPnRZS3JIYF5OLEs6VyNvcVg7Yn1meVZ9REREV0EySDM9aTVzfVFDNnQodVBUIVg+L2B4aGlZUDJEejRHPVZuLl0hQ1NjXzAuZnBCTjxPa0ZSeDdHKl5hVip9'@;
put 'PEdCU015Rjk6SUJTd0chLmcrMXc8dDBWYjROcXNWNXReKlhdVFcpJjxMZmR5Tyw2XiYqQkAjL0NrL1pRYGIyInVyMz1rKjMrdTZdYU5qKUswQzo9M15qclpNLj1rdGUkamVaQCFRWEFUTVltOE9sJmMiL3Y/O3owPz9rY2lUbjU5RURAaXJhTmFUUTNnK1Nral1bKllpLCE1NWwpPFRURXMueEJr'@;
put 'QT93anlmQE5KLEojWWwjPWJ7Nk0jVjJOWCYmX1QlY2hXe2cqM0kzcEU5bFYhX0NCdSN4aDlyJTJnTD5TLExSXWJpTyE5OnMuSWE5bVRaUS5nSDExZ0dSYkVpYmwkYlJ3YFp7SGBQYWJtTD1tL0dtLElmSjJELGRUWHVMNyVLQ0pfQyZNWCxAKU11Xm9CUyQ6WjV+KXM0KWtCXzQvQ1VfaXMhKSx9'@;
put 'UkNYMk4zaU4vazlIJS5xT3FgOXR8VStJODBtYjN5SiwpcyloPUouJSFQSlQrTVpOcD5McTFqc0RNeHYwLGNkc2NVeGd8IVJRIyQwKCkqaTIzPkVwXVlYY1RTZWd1PHYxSzpuKSlFcmNyeiIibjAxIWooTl97cGBiT1lPe0VfeG5ZQjBZZldndF1EYWR1ak9QZllhVHt2SiNYL208RTg3PShtNGw3'@;
put 'eCYqIUJXSm58JmMrTjlge0FJcW84c3JiKDF9KSN1ajMxUVIlanxsZ3ZZI3JpWW9QS3w4TGxEQXgyZixOJDQqTCMqZU5xOERzQW1nYilCKClCSEh8ZmZ5bWVhbFpOUnhwMkJHeVVdakdBYGkmQEt1SkA6fmdsdGZzWmVHSSxMMCY7ZSVYQChAIjZTNWlnfWtJfHRGeW5uPXh0U1UlaD9YOSI1NlZw'@;
put 'VDpAOkBabXM4XTl1Ris1JilqRz1LKzMySUpLUS5DeiJMMz1TKDx6bj09TERoITR1aUJre2gjaXxePXZtL1VLSjJdTiQyVmh2TCk6cGRPSmhbelNJN2cwZTp6QmUqdEpebCwrOi59VmNWZ3kxbHZPZjpqVWUxZjtjdCtvNlF2MiMqV15IVT8vciFTTEtaI3F7W2pgPC8uOksoRy46bltzUzhQO3JR'@;
put 'NkQzcil9RmNpZnQsN0t6N3JPIypyNVVBSWMzSXhpelhZJSg1X2IpQ0kuOm4ydFZ+KDwyJWE8Okc3VXNnK2M9Q1dXMVc5S2JYQFNTfEMjOEJuYVhfcSMofi82bFBnPFhvNz0rQyo5UWBeQWFvVSpbfFpWJnorTHBRaTFMakFXcXlhWi9KWVJpZXM4VmtHZCNGUmBMVXNePS9UJV8/JF48ISpLW1Y8'@;
put 'Lkx2TSxWOlh2P0g1eF8wXSxoQFRPXmc6VnxZcHZ6XiZgZm1gMURrcm9bcyspXUxPXlshYzE0R1JWfGU4dzNWW1V2OEsrY1U3ZXkhTiFOZWZQZDcmZ3x1QmU2Jip4ZXJqYW1qdW5PeFhIWjVQVmVJJVBjZT96ditrQHl6U2lLenJ5PkxVK0hEZCNdZDhNWjxOJSl3ZUBXSWpbVnI2KDl2ZkY3K25V'@;
put 'PFdQdj9ITkdROFdlWypLVShnX0IzJUdORnhHRGYqQ1RtJU8uYHE3YX5vJnh+VG0lbHY+aGtOLDd5V3A4TXlGJUZ0VkV+b2l4P0lYX2F8W29HRk1YNTN7JnMvQkFbQmxqZlBCPyJZNFBjIjFPVVVOTihrSTk0NXpCeFksQXBGeFZmLlU9eVR+eEYiWVZ9Tyt3RiZxT09CdVdnb0MzKzBLeSE3KXY4'@;
put 'VVFLTi8pLn5ZTlMrMHo1XXlmIzZtJiphQUUiUT5Ba2N1cEtifjF4MStGMj13bGc4els1T25UbntHRjgxQ05HZ2NBW1Y7X1RWbHxoaC9LOChBSUF2V1hMRktDKXV2Y3QseHNxemFHZlBsUCEmMXBoaFp9UCg7PndLaHpHUEglRWFHe0p4NVVBPjtkfmNRMDdHdFQ0Zk8zcUtxOCpGNFchWHo+d14l'@;
put 'KHQ3R2VxIjtiZD1EbDxwKj55fGguSEgjaWFsOSVpczYxWmNobk9xWHYlbVlIQDlIbDVfQj5rNCZ1Y2xQOTMwfHE6L291PUl3NkxHUVg3QGJJYDlsdWtVa0ZSbWBNKT8lZ1JHYHNDUFVLYj8xTV8uLCQ6TSheOWliQmRuWXVTaTlySFAlV2tEakczNGIzPjhEVE1iSzRUciltI3dnc297dWBmZSo/'@;
put 'KlkvXWVoPCM/MkYpW3A+RmEoQzZyYiJUbURGcWU4KDNoJUB0Smc1RiFYeD5dVmMuMj1AUyFnVEZBVHs8NEswXnhrXjFQKjVBIzJlRGE7ZXosNThnODRrd3JRXT1XVW53OnZjXm81aSkqQzhhRXRxP0ZXdkAjPURVP0ZpZE0yaHs3eFJIJTsmbXhaR3Eqe1A/d2xnPERdRGQsMnY4L1piYU8+dVkw'@;
put 'MmVRTWh2LkJNTi5CdUhoWWVPZzVZMGExXXRTNVkhSkgpRUN6PnV4QXtrNU8kKUU5MHpKdmJPdTI1IXp2S1ljYnAqKTp+OXEqTCoxUHBCaSFXSyopM3AuSH0vIjQ1KD98T2ZbWlphQE5kbnpjOGtXUjpoMjM/aEwxe1AoVWhNMVdrbnFxVUtvR1c5YkhhJmpEWHZAeXFPcyxidzVENzMlWSJvKlpE'@;
put 'KG1oYmgyUmpgKGRucnRNI3hTT25mKzp8NjFQNWR8dXMjLEhRNT4/SCokWltYMzFtYFlhOUg0WytgajpbQ1B7cWtvUTduUmVYaEp9aSY+bnQ9fjRsampYfU12dzl8QE84a2BqL0Q8ZEFkJCwiX2hRalc0dysyeHAsVF9jWSJtTUlqdmkod2dWdysoPEc4cntFUTRAO2VHW0tQVSYjLEdmYllDck1v'@;
put 'NEBmTn4mbzJ3LiImLEJeTkFDLGVIWFtjYTtJYX09aXQsOlUyTXk/WXJ5SWRHSTgzMGhfNnNnKnhVcnJORVRbIz1DdGM6RmZYdEt0P2p1bmBJPEZ3RnJaa0ksPlB8UG1TUlZ2UEJKWVVFIy89L25fS1U7WW1BITJoQFlDMDAiTXkvSmxiT2hILjRwTHVtIztbcDl+SldONmExOmY3I3hKNE1SY11d'@;
put 'Jk9bJTJ2TCx0PX0qUGVZKntTSyhpa1N0e083IXszVHthayYxZDdrVWUvSk1LLHwoVzNUYm0kLltPTkVCYiI0Jm98RSNfTVRsMm1ML0pHJXZSK1A5UU8vUlt0LGouMHtKWmc3PW80OEleQEhTNnMsU3ZjZXZaT0AuSjpeRjV0Tmd4O2R2ZyZJcTBiRisqaCksWl1sMnRbX3V2JHdzRGYwWCM4V09R'@;
put 'JD5OaEJJZ2tDeCtJSDZJOUsrQGcjOyFyYUw2JHkyV31RQGRzOEFHKk1QZyFnIW1UTE41Tl41O09FTlpDMFQsS0NPP0EjWlEmQCE2PWZmVG5ISDMpQHRhcDcmSX5OUFRfZCExTS5vMXVlWVsmRW0kRTdHJS9nKkk0aix7cVQrRFh9L2MmdlV7WSk8bEVYalQ+YEpxKT1fbUN1SElIS2RIZWllejki'@;
put 'fT5WWF9qWTtZXmVjQCRJSW49VkBObCNPVzZhX0MmOWJEcExod3tyR2VTNihuMEQyZ1h4dFBuKlBMVCheZEBRIy8pJHVAbV9NMEwxYzlYRixyWmQsMHgjRERCRDoyckYmb3I0Oi9idmJRSHcmcSE/enEmMGI1KFpOPHV0KiMxWGdpfEMpam43eWo/XytrQmgsVyRlRDVsZHA/NUtQLHdgXWlZZG93'@;
put 'ekJ0dVtMU3VCeCEhX0siNzdPeXE2fVssRHc9RzlQT1FqTjsrKCk9UGlgKkVtIzNmTWQpKnNjY2RyeSVfdnErI1M2dSlYTnghSSwrcnZuUzY5T0d0M11TeT99cTdQR2IpMmlzY2Z3NFUjclpGLEI4W1kqdGw3ZT1XJHJ7TzJvanZtSyFedy4hM3pYall1Rk4qTjdyeUNbXXJ8NGdWYyFeVUJwVldf'@;
put 'PVduVTc9X1RXVkNFbFFwRC5JTGI2VHtMPDg7eCtqU0BRQWdEVGhSeEllZk5sOVpWe0tib3dDbHBiT2FjeCtmNHJ8dmZrOEBASjNnY3s6eXlicFtpWyVbJVtFOjo2bkJJbElmbkpkSFhQYmB3Z0xkVWhEZEpReXk9MzlARzNqQVReTE0/b0IqQkcoOkEkdnYrKT1QQlRPKX17Yk9RL2VmdVpHd1NP'@;
put 'eVBpSWdqcH01VS9GciYzaU17QiU4TiF1Vi9+Jjc6dn19b2loZkdTVnhiKl5GRHJaLygkaXcjOUkrRTw9ckdOUyF1dDVYMVN5bHNNMCFHTlNTeXxlMThDIUtXQ1B1UHZ9dj8zJUtedm51SGFJYHd8ZVltcmFzXnpbOndkPHAqWkNzZTNMW15yInRaRS9PVEdqVCg4UUNee3kkTHkuIXU2UUAmQUNi'@;
put 'akNWWWFBLEw8cWc1ZXRfdTZQZT4pMilZRmlxfSFGWz52eGlza3ZgQnhwXm1fUy5ycTsiUGJNLyNuKCYqU3c1ZTgkd1A8bn4mRjtpPlssSi9QLC5BZEB+dXA4UVJkTDRXLm0vSltQS0l1VVQqeH5xNTs6RjEuIiYiJkt7UVp1b3N3QX0uUSR9ZnJzPSN8Jn1sbn1Ta2pZQ1c9dFt0U00zPTh4JHNR'@;
put 'VEV7bDYoMjVQT1YyY1hOM3guPHk8Om4jYGw1V2oxYlYuejU2W1pFZDxbKltkY3VjcVg5M1p0aSkoS2tYSWJhWXJWZEgsNWQ/XlFTOXRUUUJQMz1TSDF6TF4yRzpuP3NbcDpwRUppRWZ8cFd5N2g8YypmdG8/YCpkN0pzWiw6b2t7KD8qbjZNSVF4VWFDKC5DUzx3Z05TO0w8ZThJMWxiPTt2a0Ro'@;
put 'THxONWltYEpLWkc4U2FkdiJZN1suYFIiV2J+U1B3Kls9KF8yaUk1W2VNc2tUPUZuVnZGUDcmNUd2UkxaTlh+Z1dZfio1ezA5Tyg7cDY8JU1uS3BzVFBIbyU+UVchTC5QIUJCSXV0UEdaXXlJe3IhY0xITmRkQHVbME44WHgiUSNTX0QlQnUlXzBBKmgqaE06MjcsOFA0OF88e3IwfU14fEgrMFNm'@;
put 'fFEsS2c/bTg0Xi82U3BEe24zOlloVyNRQjEmWzYkaTYoYGw6MyU+MWpsTTIva0s5eixBQm13KW5tcEk7eSR8dk9SIVkzbnU4Mz1qSCpFa1kyQUZxQCssOW0kXTYjU1E1bWhESFp6MHpzLD5TazR7UTc7Vi57P2tafldFNCZoTD0jJlZRMF55a0k9Jn5sOjJVISY7V11zWT1GPiJKMXA3KSRJbClt'@;
put 'OTRPWSp3ZyFDM15bUn5Td2BsPVlFOHJnc3YrdSN6bns/WlJrcUZmJHJnc05oTGBkPUh1a3cocHl6cVM2WCJmeDhmSHtka0hWPEQ2ZzJBKl1fR1JZNzpTRXo9K0FsSU9+cWhNTzgkdUo3ZGV7PEVIKSRSfHIvIjhyLCFIckkpZ1A4Zlg8LHRFXlM2WGp5dFp5WVkjTjM3eUdKe01FWWlHUS9NUzNH'@;
put 'd21sKXM4WyxtL1BrWnZ3Onw5UFp0UCZ2UGw8OkhSYisla01GZUMiaS9ATXR5YnMzaU1MKnJ+eU1BSEFCN1soLlB2ZT18e2gxcDJEbUdqP3czdUtjUy9nX3smOmgrPG1gWSIxNUl+Q2FHR1UyWFFdRWZqUitLUjtAIihrQGVGMl5WNSlrPUAxSWlNNndHVHwmNG56eWcvY2tMRXZMPTA0cCtnJUhX'@;
put 'RlJ0MztyQGVGKGsuJmpNZDMrIyJ1bVJEL2RFaV5kY3Q2aD5sdHdvUUtYXitXRCZiI1EucnFUMC5UfTVrYHByREVEUEI2fkBrNGo3WWo8eTB1Nk9TbzdsJGZGLCIkSWVha0txOTAjP1lFW2dvKWFYRk5VJXh6PHg5IXh6JixlZn1ufmhYMUw0ITJnd2tje29DV1NCbmM3fmErS257SW9NS3pwPjpo'@;
put 'NSlRQHg3NWl7P1t6MVpuKTBpRGxdY2w6Qj1jJndjV2ojU351JVRRQk9LTjNHcGRFI3E5aXAxRnA0PTMsV1BrbztvazIzelo+ckY0Oy9eSU9tK0c1QklYYiEhaW9FUGRkTDRUYEpbQy88TiojImxdMFE4ekhDSSUhZyhuP284U0ZyLF81SyU+YDhYYVg2ZU86UyQvRnxjT2hOUyx2S1lmPkBRKF1T'@;
put 'K3gsO0dTUFlRTkdSUH18ZyZ2MXVHdyI4UDEoOmhROEpyOThZdDk4VV1nKGNua25LOXQpVGhwN3dkYlNBQ3tpL0BqWiZANm8rdVBUQTFaUjcpVEVrTXsiJWM/LGV9VnldZUFfWCkhdT5VKyFBQmpaPSNOM0M9MVtQTWFrJkNUTnkjNUM1bWg9QHU6eD9AIUlkcFBlMS5razQkTTM7aSJTJGxXR2JR'@;
put 'aF12WnAqci9lWW1De1BPSzF4fjA9KFVQWHhzbSNPaXxbQSElYzc9bzkkajRzUll0MGZJK3gyUnYxKVBCOkchOHR8LkdOQ3NlTWk6JUlpUFNPQGFGaEVbZW1YYWJ2UjRkTWlhUjExL00iejU4MC94dTJ4RCZwOkgpMURHJT0/PyRlPGwuIyouSXUrdCx6QF5JTnEyUUlgKmw2MmVqI0tTS2IpQ2tw'@;
put 'Umpadzg/fC8rYTB6TmwyRDA+aE0ucVg/cnZFeU5tOmNBRFh6e3JkT0NvKzdlXmBlPmA5OSFfaWBtNzY7SV9rd1dqS3t1bWBzRk5URGRIQiV1SWZPSk15RV4lUnc5USpiRT90Y1ZgIyl9SGo3Ojszc15GWmRMelJKTCxybEIjcXw8KTM3b1FgKDd5YDUkQkQpMXF1WXdiNWdWXXg3ZG1xQXIuMk5g'@;
put 'QnVHTXR7WEhUNTJxV2h7WWIxc3BvZTRhJTl4fWMmV2h9cUNaTk8oRm0pVjM+b2BgeGJKQSQkJFFaQk5gM1s9W0hLMihMdHNTQ3tKaERqOmVNbUJ0OkxSUFhibVV9cXd2PGJLTUg3LndDWCNZS3RRIUgwOnlpUlVxVTNmb3d1JThsKjd4I1cjWSNAT0N6PypGM3tOb0crNTkjbj1KfWc9di9kSCs1'@;
put 'OV99VDM1eDtpS0NScGBgRXlXdiVbSEtDKWw0Zk1qdE8iJGcsRCx0VXwubylzPG8zOStbJWN4QjhCJmtteWxoSGE9VXcrb35qbmFZQ2x3RlhqW1VMKkBWc2gjYjUscm9lUnVHIltEbE49e0ZJdSRvLFo1OGV6cX5RQ2p3JXdsZ1QlXylOZF9UMDpGWz9XXWN2WiZ4SCRAdnZ2d3UkVWo2d1NCNzlu'@;
put 'UHkhdGYmdHNqSFs+ckZoXlNsUi5sV11QRzlrY19oVD40THhYMzZLLGkydkRqV0wydSYjQC9pI0AibU55a1FePFlLMU9FXjY5UCssPDg8XjtLN0AlOHxIKEYmI184byxANy4jNkpqWzgkOUpQKkpKOGw4YWBDNy5vSTNtXjRDeGZdZT88L2Z0XlYmNDg3Q3F9VS9PbzJLTThIMiQzKEptUDklM3N6'@;
put 'bWA2KGFYK3MyLkVhV2lxNmVZWnxTdk9Sfjt3WzxfZ2tDYz57PVc0TE1QLzc+Yl9EV2A9MDB0eXp+Vn14cE85cSkxcik8NiNvbXptKU5NOE1UTn5FYFBuYmUsXVlzTzc/S1o5V0VFaE05JXRQYU8vRT52I116YHQocCsjX0Y9aHBwR11JQ2RCYm8oJkp7MUBQPD9LclFNfm5iYiFRVVJoLmhuXXN9'@;
put 'ZjxOKDRlUjY1W0VdbSpdYGg0aDhpJWVVb28kQiFLYDwlSEtCZGY8KDtyImc+WE5rRCYvPGArKiwkdFhYYWJjWjE2T0JpYFVdJkJ8JTEoYlBje3E0a0w+fHc7WEZtbk0wdTFZQkMqMFApOGlPc2MwW1UkXVFScTZ6MkY9aCllZH5OOVVMPDBEbG1MUnR2O2o+ZGdYJDEqZ3gsY0loQ3tBVDEqTEs8'@;
put 'dFh4MStzUnA4bmomaS9OKSp2NjkrVHtgJno5UDt5IlQuWG10bVArTkBOMDlmX2xdKyh6XTc9YTBTU0kwWjZuW25TKm9RW256YU9JYGExak0lb0AvNyM2bW9iV0U3MmtWSW4sUUI8d0hza107X1lRQnwoTUs6PjwzOE0ofkZDN0hpYXJbdTNSUWw0MHxOcztrdXJNSWpyJEVnY05VNjJJLlU6USlw'@;
put 'Ll5jRkxwM2M4KDEwIXx1X358VlFNOHVhZVc3QihbSz89Ol95TktCeU0pKyo5bk13WzJpKyEqOW44cypgSG1iZ2VCUVJJYVVCVFZlOEQ+QW1IVytAdUxEPXNXM1Q1bFE4PmkvQ1deQXh7OCNlYDJbeUJJKyE2dFZrKXBVYGFLWGguJGhNJDojJXlAU0Y/fVZ0Z0JSQHJ7S0g0V1JRIUhKWyZUWiUo'@;
put 'SSlYMXlDSSshail6cTh8Ym5hWH1QQzdUZTVEcV42IzRWMSVJOSs7LFg6M0pPJlhFKzlucmokRW1eM2h8bzlwRzRoNC5FYWl8YF5+bT4kWWEhcmY2WWYmRipIIUBWeXEkNT15LCg+YzB3SHJHMDsiSzdQbWpuVzd+b3VgeFdiYjd5dmNVIjlpayRWOG1WRzs3WU0lI2A/JTtIPmZ8ZiFnMjYiRyVP'@;
put 'NiQ4cWV5QWpfdG1kR2VAc0B2c1VFLD1fN313OChGIywpUjZQblZAakJpPSooekFtZTo8Vz8qTEtMIkRHVkJbTkEjPyw3REpRXVhQcT16N3BveTxwLiZQQiF0amhLOV5tUSh8VStePXsyW3tEcixob19rPUV8Ukl4L2k0OCpLfFFCbippaHgiVGtSfVNHKUhqQltKa0ZeK0suWmVlQVd4XWxzOjJM'@;
put 'SUU8ZnVHZHM8Xi5xWihRU0ojWDF6X09gJDZyXixCWyZ5XTVpfTopJEludihhIiVRKVRLSlRuYXAjY2cmTT8wdllPN0RpaWBKM3UpUC9mPUMxWzkvSkNwUHF7Z0JPQjVIZiJTYDAkQlMlfS8uUFgpMHkvRl13cj43eX5we0QjTDZVUHpFKn1WXlhqcTBmJXw7Q0VZLDVaa3YhQChoKFZGKkBAK2FR'@;
put 'YWUrQ19RMUlHIXArYjkxKWRjU3oyNDg1ZTFYO3JpM0VGPXh4byxlZlMlQHw4Rn5efkFON2p+N2BETT4iTGZ9bip1Nkc9YVJ+XXAoZl0wL1NBQmhEb2A4RiYucDZ0aUlJNnV6cGNsLkYociJwfXx8MDlGcEpmVXBQak4vRjdRPWVqQm5CIUd3UEtYJXE6Xissa0ldYTYmOz59b2khRmBzRlcuOHls'@;
put 'cztYMncsKD5jLHwiKWxCe15NQG5Qbi5ZVkBVZDsyOl50MjQ1UUg2XlpWNGk0ZjpbfkBiQ0dRUzQzSkQ3T2Y2WEhtKyx8Y3o8KHpQSWU1bUNSZyU6aktxbEQjZnI/VCY5Zk5xX2c6U0lQN21VNDleOl0xQlskIjsmcFtoTE1qLyxlIztWTj11KyVzd3JYdnJPWHB2P28sOUd6JVtvV2dTVl4jZmFL'@;
put 'ZHoka2JmeT5QL0FNPWEmQ3MhSH1iI0w0ZFIidSRRSlcxSCVnc0p7bltbOSpMYU0sfU1CeUIrVlV7SVpkZ1IvZ3QyK2BIbXVSPiFzUXtSQjJlaH5FPGd3Olo2NzVHeiRbP1IhMDAvI1suMnZwI3RTa1YxQyM3TS5vJnoiWntRMk83QiE/ITMhT2BJez8iMUJyPGtHNmE+RzZsN3MlbDYkaWUvM1Mo'@;
put 'MzVbQV5pTitMPTNOUn4laE80Ql9WLHlWYixJbk00Qm5jUGxJcFttYzB0K2ttTUYqanwwO1NjLjNoXjZiX098QUQ+fHhPMVFPRl00OlhRaFVmVksrY2BKckxLMzwsQi48WjpUTipFLk5OdnBodk0qQ2llZk1TMDBgW3BLJjFNZ3hGdmwkMkRqfnZ1ZnBbWHU9RzM6YzFjZVo3dXYhR3F3VUJpY0dY'@;
put 'WGV4ZiEpZkszUVlbK2wsYF42SzRyPy92ayM1NXZIYCZPQz1GV1daYnpARGs7VUI8bz5IZHI/XW0mKlduTGdHNzlJSkx9RjNzRmQ0VjxTOyp+el1hSi5tdUFBQFFkRHYoKkI5RitNUGY1LzE1cGIoOFF0Q0E4fVllIWtMYlQwK1glKi5JayJBQUNBQUFBQTFCUzZGU0dzeWxdOD98Lk1lX05rUFQs'@;
put 'cyFkQkVNbik9YzNtfl92QU5VTCFzJnl6RXJ4JFp5Y2QlfXM4dF1Nb0lbOFd0RXwzQ1c+cDt0PTFiKClsIz8vL3ZQQk83KV0+b2tYYTh6aDRSQG5jcXk9PUR9NnYkZ2VjNjc0fU5LRXxnWyxpI3xKP3YsaXpBcypdamxmJS5mOjQ3ODBAaj93SE51YmxsP3dvZihHTVdyLHRZOTU+Ol9EKzgsTX1S'@;
put 'Ikx1czx6VG9LPy4xWFgpdXFnRkdVY0p+JSt9SWtxQnhXYC4qbyglSHdNTj9HUylSXzJJJCZGZXxqLDQzM0dUV312WVJHKmdzRiFeN3tPYGdeam14UTVZWHI/bHc5MldWN2NAPVhWcjQ1LmdzaT5ubiglOSlBbUhVJTNgIllbKUlFYUNDSz81MXY/U0ReKkEuKmZpeEh0bG8vbnQoWUN9JDRaKDgp'@;
put 'bTwxKl01WUwwUGJCV1NmZi9bdyVJXVt6aHNsJEQ+aDFQTGp3OXIyT0k4OElAJCV8Njc/KCxnQlBgfStpM049LiRqZVJSPjh9MFJrJkdWMCoqSElmXlBrdClQXXFxTXJuRiEjenNVcTZSeGUlN14sUVlsRH1eLHJaOTdzTmo6SHFIMlV6MVEmSiJGRzFPK31ReTtTeFBHWnx2VnAlI3pleGcrcWQ6'@;
put 'TylUQ15sUERKPEo2Ul5ITStTXXVLPCpRX2sjVzE5Mmh3IyomVTNgVSQ+KlNDXmspO35PL05FdHB5VWBYZW82e204N2wxUnIxTWEpVmNyWlpiRjE+JGlESC9ZQUBYR0VyQUhQYzVuOkxeY1kmYFJvaFFyKz55JmRidSVaI3J9InUlaiZEejZ4IX11eTA5K1Eydj1HVllmQXVxbWxmfCs1N24ubi48'@;
put 'SEsvJiJ+TWBMdG4qcFJFbThqPXhsWXQ5UFdCZW8uME0jNUZdcCFQa0Q3TWk4dFAsRV0oTDU1VzFTP256QFZvO1Q4TSlzOUJxQ2hzQFFpVjVMP1MmPD5XREpxaS4rSzUvWSNQeDBJRXpKN2lSaTN8cVhlP251OWU4YDV+UWJyQz1+MldtYl8uNHV+cjtvPllSLFNqXSxmciRNQyooUDZtMWtEc0xE'@;
put 'PmpCWm8qRUs6V3w3dWg0O2JecXZPaUApT0pxW15ZRnhwL2ZKenp+eFYyUTNtQlpHPiV8Uj1ZcTBZaVpPK24oQih0KXsrbX07bC44MmckKi53NVspTiNrRWRGRCQxYEVBZj9PLj5HelsiMT5KLGRaMXQhdFM5LmY4NSxKRXV6L3VUL2AjbFduNEImOCZ3OSoiTiZ+S3FacEwkeDI8bCVLaC9oSiEs'@;
put 'MTxFIXtCa3FWdW0pfVg9K1RuYSFkKXxiZSNXRWEpImwhezdZSnolaUl4USFRO2I2dCpaN3pPIyt7ZDhRZ2ZoaVl1PkxgXkVVR0tgdHNVbjBddn5gOlFDUEorLjRkMVt1NUc0dyE3Q0pUNFVbZCFzbS42eGB1M3FlbGI9Kil5cHR9fSNDcFBWIj9zJUcpPzRdUjBdXzohKyJjbD55MStBcl84T1p4'@;
put 'OVZ+Y3BxM2VyJDZfVlglZiFdIjw1T2t2UWFaNDZYKyJXdDR3WXMlV1pqNzp1THg6eFgocl11K0UhPXxNUVllKTRTLGdSMlNgK3Z2QnlPJEZ5WFpmOztEZyg1disqa1QhRERDTS9PUHBeRVI4VER0dDAodktSUChOWyxWaytbSVM5ZXQuR2hBb0ZjWU5ULyVSUDw8WyF+T2NgTTYhVj5hK3Y0SUNw'@;
put 'IS4ycTMsbiZCO3hBQmY3cGBHZV1tc0tWZGR2UjBwU0tIXnxdYmZpTUchdk03ZTpPVGY4YSt9eWN8a3RNRG8qdzpAa3MyeF5jc2JjLz8iekxvTlg9ZE1gNHZzdXZtLF50UHkxRTFFeV5qcS9aQ1gyW0BmZ0FVTzZIOSREMlVFWWdjfC9nOmB6bCkuYHd2PHBjViFHTnkvTHlZKjhNYGUoVnRfXThP'@;
put 'WjNgLlFhIm5Ke0BjdCg3JU5CRXNsTGs7eDNiaioidU45W1ZJODhbW1opVn1UOWJvTjI1OiltLkh3M2pnPUwyYkQ6dFBgKX5iJF07Kik+QTBCbEQhKjd0azI8STJ2fmdjSVVELDBOcmRvYVpEZ1FvPm5Ad0U+e0cxUiRzfVs6RyZ+al9NY3IxdW9tfnojfW5xTCMoIkImaT1qWTU9QG1ddip5VHVF'@;
put 'RktsJEQ3UVE0K287Iz9lcGY1c2NnOV5Se2BeZGI5Z0IyMFdgKzFrd2FuJEdQOzdxOVZwOWE/QDdGJiYwazh1TDxFSVcqNVBSOURFLnBTPEt0ST87bSZsQCoyP2lReTl0ci5kJXh5TTkySl8sUF0yT2hBa0ZpeCtjXk99VUh2M25DJHxEOHc9bFh8U29idjZAZ21qSmxpYlU+JmghbGU7M1lgWSk4'@;
put 'OzUhaXQ5TjJbfCQ/WjxJLiU8LG5AVCokTFNwYSUrSV1oRX5fRnZ2TzB7T0cqQkI9OkNXI3xGJWozSEI8KiRRQCpSe2Q6Z1s8Ji9YS1B8Mkg4SCUwK3RoZjIsTk5bKSxsMDZPfHk8MlVwV3woR2g7LkdZUl42NFo9PGZjRH51d35DdiYyKENgYkVFJGpLfF1DezV5QyxlVTwuajdKLnVCLjwwanlN'@;
put 'NExieCF+XXE1U1RfWkZ2MnAoWVduUWNzcE5CNkt3MmsjZStXdUlxZVc0Lz1AJWd3b3l3bnVTMG1zOng9by9+WntlTzdPTnJ+aDx0eDAwYGhYaHt9YEdzdiNhUy5rM3NGWSJnciFlMn45NWcubFZ2ZmI4OUBUejdCY0hZRCIoX3tnUkV2amhZRTZhZ3pkbF5NcHlyNUVfYkRgWHIzczZESFA6PWVi'@;
put 'K0s6V2NGLk9xT0NTVVU/Zl1ZZmVjaGw5Tk46N21+XlZiemdMJT5PMCQ3YlUhUWwoNFM2cEdQI2J4Wmo0LlE5X2M2Ym1CJipmejtvOjhbelQ3cGZkOFdQN2dzNzBQX3k9Nlk8eTl+IUZTXjZsciFOQnZgT2ldWGw6IS95Mm8ocUdLJU1jLGZuRmtbVCw1eFEqcUhidS9lY2trKzxqQXhReUlGentH'@;
put 'eHNHeHBwXUFGN0Y8Y2dQWUNxLF87V1g9dmJFRXZ3JmIufjJgSGhOZkRzVD5lK3RUeCsxelhEbkh8JT5RSU9ycldxYCxYY2pxSDg4OjtCTylgTUd6NlRzcm5xajBvTEt5fTpDemh7Nm92RSNuRkxYPz9kYFpnZl44ZVAse0p8Ri5vSjpgbC8lUH1CZllWcC9AYjx+PEA1KjxvPDt3cG9MeD94WDE2'@;
put 'dW04bTdYZzd4TFA5SlJ9QjRSSlBybEJzOWwwdElnaV8jNy5gTFkwenhhNjRjVnxsZTlbRikkSz1EUV58W2VyTn4hX0EwTVA4aHZAOT09QF1NN2Y3ekBKRDk1cmZrWTNEZi9VUnt6YEB4Nj5FR25VVjBiZHddUj5oVFFGI103bU9vdU40Tk1JdllPNkFdRSxdfFVOXSIuUUlpb3M7SXt3aENAY1dP'@;
put 'fmVOLytXNjByL1ZEXmFqcyMyeSUqNFR6YTk9fWpudkQpVW4kUylmIk0hYkwrcG8vMkVOJHFGbSJYUVJwRFJsdl12VkIuQHVNRTRwTzMkdkAmY296PzR+W24iYTAhdjAlLy55QXdqNHhta0RTJFouIklIWV1bZkwqbnRfUkB+K042djZlaj1VaENpeU1gQWQ1WUpWanBoMTZbVG5qMUpNQTglQzZn'@;
put 'Qm5gaE1XVWtLciZ6SjRHaERibylBLz88V0xgIypvYHZWKzJRYnsrT3lYNm5VdFgjNSRsVWU8Wy9eNURNOkhYKjFAe3N2aUx4KlA/LzF+cyU1eWBTWjxFfn4vXnBtXTg1ZGcpJjU9U1JxKnJTd3VPKkxlU0A4SXBnb0hedzVheXBkWkxuQjJsRjwoZXBUSyNrYGkvJCgiOS44bmxsRXEvMH14JmB4'@;
put 'Umw8OCFseDg8Mmg4Q2JLNGkxej0mUWsoZVc7eEp1PXEzN0M8VmZed2hrSVRCYCxhLih4LEh3flhkRmg8aHl5P24icE44VE5IJVQ6XiNESmgqWFhjRiFmI1I/KmVtXixqS0ZxSzMkJVtNb1lUZkx1QThecylddjkqXmp8WDwlLHlzNzxPaWdpPTxFQmAwZnV4YUB8bVpSNDl+YCtsQF1uXls4Skkp'@;
put 'WFUzfW1EWiNXeHhjdWJXcls4RX5AYjJ4K0U5aStJQ2laK0N3SG1WeHdmPV9deUVvYV9XVSIoRzBnQWtLSD5zUXRZfFsiTlB8Tjorbyhkfkx3VGBJUnxVP1Z8WHVMKm4jJDZ7fDtKPyMmc30sL2dYUShdcmBpalRTZihpYD9SKihjaWBIcURzOjlHM1pDJlAzZEZMMltYI2M2MWdzTy5BXyhwa20w'@;
put 'OnhNMHxzOVkjPVNCajp3R085c3skQzxsZGVLU3hQVzg5Rm1hSiFhWU9FUD9xPEZDVH1BJEUxcT9lZCNeLEAhRVVxN2IkVEg+JDYrIjspLk9ya3pIQl5dUU1rLCpJN19hJEgsbi5TRVZLXnZ7W0VsMW4kSHBTXzAjQm16UispLlRML0IuazFzY2E2fVYpdVdKNi8rMyhIX3JKZzhJWWwrTSl2ZEFQ'@;
put 'SlBrXnZ7em19OSVAV3svMzQ8b3U8TWoyVi9rSkp3ezBnMmQpaHUuMVt6VlFAV2Y4YllVeGY+TnA9UTYjPSZzVCUrcSNlNHZ7KHVfTTpeLzkoRk9ERzRpcjtye2o5cnB4dSFWbURddnRgbUhpUyQxKl5hZSozQjV1TFt6WHtUblEkWS8wVTpZIXZEXntoYT4hckJeRDVKLHpHaUxZMWNJMktPRl4m'@;
put 'TTBzPEIoZkxKJSguTzFrSz43QzAxUCkqJWxbO31qaTpJbTZlNVduOEc/VEhQI10oI34vL3JEdEIob3xqNDVfaitTblpXVXZ4fUtSS2FKOXlGWFI7OUlvaSsiKlRgYGckI0pYeGp+K2tTODd7e1JZM1cwU3UhUktkJlQwNHc3ajtIMFl9aF4iQW1ITFNsNXkjIyMlaFRgWl57ZE5LO1VvbDl+TVtt'@;
put 'TCxYLEdnVjFmSnJJNm88OVhpJCpjaHJuIm9OM2xOXUleTz50R0JUbSQ0TEpFaUN3ZHBiQzEjbWovYE90YiR7aUlxJTpBMUUoRDVUdjFQWlspaENoLjQqTzQ2K3QrY2NtfW1AS1RPaUsheXpEfk01b086YiRRV0ZJSVdQRjJTTDxucncoTEI4ZWpLUzdZZXtual5qXTtZeyZacDc6dHV4L05PUV5u'@;
put 'NyZYL0Flci9gODhjRVVqZFVbY35AUjAlY3ZxaTI0a0pZQkEoTX1GPkNfTml4S3JUUC4oanJaSVBnfUY7Xi5PRGszJS5kKVojU2xmfW8xd3wrSllNYVdEUlBNU2ZffmQiTDk3bE0oMj85L258REYyYDVRailSYDcuPVcqcF1kMDt0c2FfSnMzdntsXVddKndUUlhHelhwbFNJKHpSNiFZU1JzQllo'@;
put 'I00+RCNTYlIsbzI1Mk1YQFVJOEY0KCtiNWU8cmhra3RsSSZZXXgvZVJpKTZtZzpGLyMwfCwoOSRqYVZbVkhubUxVckZANyMvJmlSa2hFTGBlWCE1JHBaUVo7TGh3KFF1W1o6R3tqKFlxRUg1PT4sVT1IOEkhaUBQTVdmLFBJbUYoUj0xKVh4cGJmWVBjOEsleTpAImJ5T0NMVWhtImtdVCF1R1J0'@;
put 'fDJpaSNbUD1WOFZYWz1HXXUqTDd+Pyt1dDNmOjM3OThLWXY6bEw6QyxUVUY0XndgdSpZQXp6ajI1PCglKm5lKylKWWR0XUR3WntQOCxNT1AoKER3e3tHRWBLaVdWdlg2a29ufDtWJGx0MWlEXyMuIVtYcHNxVXBsMWsocj09U3k3RGpPQWlSe1RIMFk2R2xLOTQqK0shPWhUN3IxYVlaWElzS09b'@;
put 'ZW1QJD9XSVRmb1lnXjh8YHArYzg2cjt5RF1aIXo/SF4ucHU1PS5LYjImUnE8W2pGNEsueVVFZSFxTmJDK2xQbjBqfVhPNWRiP2ZLbF8wYXBjbEVAenlFaW5QUk9Fe25RK29pYXNuRjpqRTY7TFciVTtKIS84LiVJdGVdZX0hJWs3aDhWVmpwLjdeP2duZzFXejdBLlV6fTlFVXB8aj8/dV1CYkhU'@;
put 'T2FhbkVbNE06c29eRFVINWd1V2JlLFFEW2F3OmtUM3orIVUhNXRaRmk/OlFUOCowSV5PKFNDfG0pXWo+Xm09ZE5XPE8yK1lFR0pWIW93YkZVT2c2Uz96RHl8dmVPXXA0NlhHZm55Qn57QnZwVmdocEE+fW5+QFIlJGNoa1khPUAzIW85cShGWXRKODU9OyhyUiRJTUoha1hEYk5sd2A+azBiIXBt'@;
put 'KkZgfClOTDN2TF5lNEA7OVNsfk0zZk9NZUJ0MFp1SGlVZHgrYVpIZkxsK0giXnpEbGtyIyUlbm0vPHFvT2coJjtZLD07YjEqI2wuRUcoIno7Lks2LFBnbjkxI34lcUlDYEEzQ0lFNyR4SmJ4PEFCel4yRGY4RCR7Qk9aem1zUmd5R21QdFc8WC49KVdYWzJ2MTRUTzwuPX5FUzdQe3wuZ0tKPSs/'@;
put 'ZjZnfXxrR00kKkFQZmFBOj9HdG5IbldCZmZxU2lzdm1zZU5yYDNCQHtdMTpYYClFIWs2dU1nIypWMW1CR3VpKCt2PmM2bDolN0ErJXJVKmVsTFVEdkJUblRGYUN+R3JaUTZhVXRYMGlpVEQiaXgpTElPNjZ4NGluOCVMb1I/bTcydDYmfUZFbzhlSkpHbW5UJDFNP3FLL2xmPXFwTjJsPWVUKUpD'@;
put 'MDtLJWhiZixCKSEzLmEjN0Q5Y34pXnQ8L0g8dEM+c0hnUDA3MVsiYSMrOTklfkZHN24mbmVWfV02MGZ5bHRZYyhPdExnIWtgfltiaW9XaD9PSU1kbHd6OX5nVi9Gdz0lcF5zP31ETGFsQ19gJUBgXkUrYDU7VTR7K1IzZV5eR0x8Sj5faVVsRiw4WGZQSn0xNk15cCVKODEmOX1DVDhBUE0/PVtS'@;
put 'V2tId2gjeyhsWW0oVz5kPmwzWlQmZEM7UFJwcUJsfSwjZTludGlVcFZ+V3l1Jl0zcCJkIk88QjlTZW8xOFpdeHc/MSZiYVVuSSkyNiMrZVlaSXFBeD1UeUcofUhJdjA+Ulo9d1RAOlczOSY4K1dCMDwmOFVyJChuRj9Idz4/O3s+dzFQMzdxNF96NDk4S3c8M042UWhOKFlhbXdjO0JsO3NqWSZb'@;
put 'XmR1b259R1Mub1B9XToifF9iWHouXS4vNml0PHJtV1B8NSpEO1lmJV1Dc3tJcVYjKnl5NCssSEtWU3Z5IXZoP31OQXZbZHJbKHI1XnF3aT5NZEgjQG9LVm1aZTMlM2NTT0NASkF+TjJtaipQU1khQy5xfm5hOCgkPCV4bG1uWCsidXN5Jj1SNzxzZVRtZD05KWhdOWRmeXJrUkBhZGdvNSVwSklS'@;
put 'c2Y4LyxJJTRbWShkP3BASWFRKWRMTWU0RS4yMDQ2OHQmS0lfWkhEKFNWeUNqJkhAaCNlO2U0NyN3Mmo7YitVY0t7V2JoPk8sSlR8S0VqTDhYRC5RTG07Ln5DdltoI3c6bnR6emNxbiR9ITd+OmpjTHl7Q3EvT0paJnB6NWguUGp7QlJjd3BXSVUjQlEuQGQlU0NaPGk4ZlVRZ2dKVlNaW2RyVGh8'@;
put 'bzRdJSxHYk87R2pEZHprZHovQENmZ3h6UnNNSVkvLnJaS0AsQ1NofHxqUmNTamI3PnY5QE9JW2E7ZTRVNmxFaHFIYHtGVyIxX09vM3EhbF98flAoXSFMeWRMTFNXeTdFfiNFMjIldVcyU0dyQWphW35pI24vdCokSFU8TW45K3xdMk1ULnovPD55NDtgZCk0bHI4PlAiVVdIVGkydCQ9Q2p0MSJk'@;
put 'UTZ9RWtpYU0oaWEzXXQyXXJYZz0kUiM1PyJFUTQiTGFkMElNOmx9RCZFYWxqZWJ7KEViWSpneX4wQCY/YV5yPGRFJk1aYGIyXWIjeUNSNTh6Y0UiQUQjUXdSM0M6ZiVzWXl4Q043Myx0XklgdFtMISJkMU82Pis0dj5CcHs4ODx8ZjcwV1NUensqNiF+eFM1LjZFRWliPyVhfGkkQFY6Z05Xc3x9'@;
put 'KGx2Qls8TW0zKWMxcyVKL1ZvejMzaW9HbEssTloiaj4oOEE8V1hPV2BKU0JkMndUWyQ0XlhQRVlkMElVRlU1Rj5UNUloVFJpSjEuWEg0fSx3RFc+TCk1PTooOVtHL00pZWg4c2F4Jl94LDFHM2lmYVYkWENBYmYyLDNlMnt0R0AuRih0QDpCL3Z9M1gvPD1UXlRxdXNYI05QcSNOKXthWD9LIURp'@;
put 'bUM4SyMhWiJjS0I0Zy9KQDJpWW13bzgwW3ozSFZRcUJDZE5QP1FwIXAkVER3e2E1XThCcDRnR1I1PG1rPGVQQCQsXVNGNiUoKzAoS0poJitGcENFaFg5Wi9dKSlEbV8jVU1MOmVuOlpnQVEvUnFLWiwuUS8jQHA5WEF9ZWxXSEd0cVZhWXhEV1ssY3k5fGBKdGlNcyxAMTVKR1JmS1o6VTptQCp1'@;
put 'UThRJj49XmNOL2Qid0Z6cEBzejR7Rj12Q1k8Xmc1Z01xPXFbVTtCdClJWiQoMjZNNXkoI15SUElYcj0xRHVDSUc6VWc/dzBGU1lmSztzUTpoR29AJVNlLEtVQ1F1ZkJEI1ZsPC4+MyxKRDNUR2NpeXpjfVFOXzNHKVBEJDAxVExQdHl+KHZxSz1gOUQ7SWFgeU1lNEZZe3NFfVk9a1UpYUd0Q35Q'@;
put 'N2c1e31qREhZbElQYGVvMGQ9ZT5pJCEvJGIrM0AqMStNRWVod3V8LFtCZS55S3hUQlNRMUU5Z0FlfFRlV3k7Tj1dfi5nTX07eHIjfUpwUDtHWU9nJGZPanRiPDgoT1U1X0hTUjU/VEFKS0QvVGkmRW1JWUQpcjdlTkEiLkx2blp1KiFHKHgyPXxDQmp0cEBMY3xEPVhJPEdlN1VYfDl+STh2SGwm'@;
put 'eHQrfUFXJjl+KUZudlcvZChydFBFfXU6OkddWTs1MG9FVEhfSHtvdypYRShWezozbmAidDFYKTAyZndmfjFaeGA7bWNfb0QoVyI6KkJWNHUzXU5LLGdsKCQ+V2gycnFHUkpzXnVIMyk1LG0qVipqUGxGRW0zRC9hQiFAUF9RckMmISZAYXtqUEtpZ1F9IkM4Rj1vMnAxUWkxYG0rZyZSR2w0Sl41'@;
put 'O3IuMFFpdXdZQn5JL09XZm5ORkdGQHBpIXlDPkt+eDMpfD9lPzxuUCRVNGZPfUk1TjV8VDoxd3xtbz5RQGI1JGFVdzI9ZGx2dDcobkwiUz0oOT8uK0JrKWdBcCI2NGhaMlM+OUJIJTRsMHZGU1RXeG1dSyg7QXBvR3F6Rmc2UzAyVkRKYGt1MjE0ZzkoTCl0TGRRL1hjMCwkXWJhfU1fYChge1gl'@;
put 'N301fjgjMk9uN2BNclY1Zj0qUUUmcFsmb01hTkNCKzkuKVl6NixPeSVEXWt8L2ExQnA/JWZwaXljYjxVJXtgaTZuV0hjL041JVMvOVJpJTNeXSRlUyojNXlDV1IkR21dNS59dmpjPWlhbmUieyZuYl5aO1pLR1FSYnRmNWdPImxUIlFUIVNKeDE3JChfdVNYfGk3MEhCM0JhOUJ8c3B2T2JPdk9y'@;
put 'd2ZMPS9qOmdeKytZI2Y8YVgwZGR4YCpVQzFvVG45VmhPJmZufUtoJH18OXV1YltgWHB5MVpGQFk7Xk5lUn46NSlKX3BEL1owZS43KDRuVnkiXil9SXZCTUw1U2RIN2J9JFV8YDRHRz1AUlU/U1RCfmwjZkJrJmxKQElEaT55fTQyLnRqcTksRF5QWDtiJXBMZFc/byRJa0lUVENtNkl2YjRLKHJT'@;
put 'VG5+NUhiTFkxfGJGZntuK2w9QUcqTFpPZChqUTBJTTt9MiMhQjo0QTxPV3FzcjJKJS96MnFVdHx8QUlsOmhCTVNReF9eJH5VVn5UaiZGU3tCcVpjKEFKP0o5d0AxSXBvXWZnfTcmSDNrdERSSFlpJmJKRXhHWVYxYlJyImZUdCt7V0FWfn5jLls7UiNUbClZfXspZnJscmZIeVI9ZzEwT20wV1t5'@;
put 'SmQ7eFkpV35ucTA/WlJ8QCklTFRxfVQ0WTNsN3NuIU4rPmRRVVIvYjxwNit6N2AuaF9VYmM1MHBsd3pRTGNpP1UqYVUkWiprYWEpaFlZdT4yRyReKHBLfX5ITCRiSjRVcSJlTFVNMVFWN1ZjIVlqVn12V3RAVHwofjhuVHo2QlV2dDldUW8yPHc3JlRCLFFrKDVLd2w9ZSlsaTZTPytNezxmP2I0'@;
put 'UVdfeGJ7b1Q7WV1ZOj03czxefkNzS1BhcVNJX1krL21KVDRFUilnaXMjLzlvMzJaPCN0cnVMTWZ1RUlxP0RLbTV4dlNBO2ozQyQ9cmlyJTQrUFVlXURnR1k1Ojx5YUsrWVZCMGQyQ3Mxe1lJeWNNJCxqPWZrLGR4Ojt8eWtmaiQuQyRnND9uI2oySFlPMCx+Nno5ZWNmdnpIfXI4TndNSGJuZFVK'@;
put 'MmZTIS5aVSRgZ1EjY189Q29GNllJS1lGZmlob25Ofl1SUHlKJV41cEFNdWc3Tn5BXmtjYXl4MXIhQmg4L21XXXxsKG85Zk9AWCNiUWpaWXgwcy93dzQqZ1dnLlQpdC8seXZINyVATy9OQmNdMDAqOVk9KF5CS3dePyE3PHBedComSUIuWXRnRHV7Lkc+LGZkI19hRF0vMnVUX1p6WDJEQENaYUND'@;
put 'XzMxVz1+KH02fHc/Wko2bCNjWSZtRllqYkpGTE09blVJY1BFZXg8bDMwNDRRbz5DTDNPNVAkLlM1IiFbTUd4TDRAaUUrYXlaZS5oeDh0YGZqNll8cWtHL1ZpPGBiKHMxN04+dmRFL3MlSHFdVF8zfnRKb2h2dnJpWDBvY1lvUn5+YCs4cmh0e3NDQXQ0PzAkV1p3KG5JQTBqIVRNfTA6WT99clYu'@;
put 'dDo2SVdBVTFJTXxgZVpfIWMkRks6Qy9CR2FDQ00ieUZ6TXAhJVNWR1dxNyxAUmdiZ2csJjo5JGcmOm9xbE9TTztEKjJqUFh6JkxbTXIwJUxMQnttdWZmeSl1WFpyYDkiWz4yPk9VU3JjIztzT1E6fiYoc3Q/Lj0veV5pWnJLflc5RyU5JEMxNCpJflJTb1Z5Q2t8WC85QHVqcmdUO1VhSSkpVEVq'@;
put 'Ni5TND9edjVndDtHbiZUIWh3QVModylJWT4mSmZjVjEsLjB5M31kOWYzLzYmW0BeOC49Z1o8LHx+aUhuRWs6e1VENmBvcDoxcHR8K19fV157OXIzVC9TKjNHZjp+ayxXOiR2XmNEWDs/RCw9Rn1sIXNseShYczNGI2FEJHtxSWVhVVchVlI0NmlBJjgkM0JJKF9eflczd2hPdEp+bCgpZzRzJXN4'@;
put 'WHFPRm8oSENsYmNCVkRdVEoqLj9XMjMlYSx8QldaI0g0SzFEaHwvZk53PjN4bCE+YkNQVTtnOk9leWthPiFoaVF5QGdOaVtBRnpHQFJzdyV7UH55LzhgT15LUjFlPVhodnAxXmApRGBrIjBCI1ZYSmBhPTxwPEkwQ0teaWUvM2laXm1id0tjR2AuQGAsZVovfVRoZ0VZQXVnNj46RD97MCwiSD5s'@;
put 'K10pUTtuN1tOOiN4TmVhXlJJKV4oIVZocThBMXNfUHtCbWQsYzh+PmNXNWswRldeRko4cStpdGQ2UnAjTFtlNShtPDRaQlpHeTIzIVQwPkM4RGxCVUlaQ284TnV7UjEjb2pEOX5rKW1hNV9mI1EsM2IpP215dHtKXnYsNWgvfDR7e3N2UEpBfXd8VWJXdDdDVFQxa3R8IkByPTNoQ210Jloldmgx'@;
put 'R24iU3g0cXcjI3VNKXs/RXgwdksvQnBvXWxneUc0UjBiOFFmKFdYT0F8SVBqNWRhUWsvbWl+NSYuIm9TTUM2ZFpsRnE9fXk7OSRtJHo3RyJMa0xFTTpaJnt3M1FhSSV8UzM3K2NuK0leUTVnXishUztiOXgkfD5FPUVVdj1UVC8laDo2UDlCXjtSMENddFgmL3FlXXhvTWg3WkRzYkIzOF52Yl1n'@;
put 'Okkkcn5CJnRJc2l5XmwzT09kX2pwSU85KnhCdVV4SzV2bWdZQCo7S3psKG0/Nm19XyFxcT5jNFtuP2pUXXVUPFhpLiw0RG1zRDxYTXlPcl5XJSk0fkFlYXhea3BWRUpTOGRUdWBdb3g2MWwkJnVyZUZAYlhvdzc6aCkkOkIramhjcil4fUxDSS81djBUfmFWSlpUa3h+KFEzckNsKHRLKSRCVDkv'@;
put 'NSJfYlUlTSVofWYifCJTY15PJCQoKjx5KH5hQ30sL0t5fTVab1I+YlhBY2F4Y1kpLHsyUzp8JUc4QXYkTiZZbiEzcik+OlJZP0ViWmpKNGZrZE1rQ1o/SmJqM1I0Xj5Vdi5ePm8wRHQhOCo5YmtwaFZwJm14M35rbVVMWWpJL0pfTjIxVylec3E2NGpZQ0gySkpYM2xpJlVuSWZtKVVtdjduKCNE'@;
put 'dCUzUkteajg9aTlnSndXJHVtSzJ1SmAoYXFnSVF0NkZNeSNacFY6aFkscUZvR2BFQTszdlJeQzBFRXRDQ21lJkp7QXN4WCVDO3JLUTciZTFgbm0vU0pibUt2NkpRdSZGJlEvRFIyODc4aU44YCNiZFZTaFRwUkFVdStVSSpvdyYxQERoeT4uKHRmVVpvfDxVeGEwJWVPUmVCUXI3UlVQKURRQnp5'@;
put 'Mk5uZHMhcU0xfXtHc2VHUXpfcSxBSyxbTSg8cTlDZ0V2UnRLIjhnL31PR2A5VWNBNiRnR31fPHc3dEhvYiUxMU1Oe0AvbHJOPDJDIyVzZy9QeEJgOXBkIU04UUBreH0vcXN6YDJ+RTlfaTI5fS9bTFJva2gvIz16UkBtX3dGUl0rQGZDcX50LkR4PV5ILCVbbEVDWWBwdi4+OXQ1PDZaXyNbR2V1'@;
put 'KD11OTYxYDZmWmpXMT5rR0E4MU1Qcy9SW1VbSTVwS21nbCxwXlB7XiIheWBzVjVFe1FBTHx8ckM1PGI/SFdQbDJnK3tfZmR+M1p1PTdVZjpfP2ZmLFBbSSwheCJPaCpqNzxqV0xubFN7Y2hKRFtmIzhzSzxzSSx7SCMibT9SIVUiLz0iazU6ZDxONTZ9Vko7Q0VzYWxZJDBBd2FFJjc+Y1plNExG'@;
put 'c1lAL0I4VFV0QGg+UyJjQ3F6M0F2S00uYUBuZjRFXkJfSnA7U3ZvITVzfE9YTU58YXpXTGI1TzRISlFRe3UhSDpGK1YjKUduJCpVL2FuJCRGcyVtUmdFSVQ9NXI2dHQ8PFJLR1FqQFRRfSNNdTV8Z3dwJVZbUXQ7RkNOeTt+VW83IldmYSxFOj1SRnd5ZEcqLDJEekNPbmB6RT1CKCQ0cTtvL3hs'@;
put 'R1dBQn5Zd0NEXjd2QWpWbzVUL1tmWlM2Q2YsRD98KVcrRD84LGMpR3VNfEtlT3krUUtqKnJVbWhMPFlMUXg8MiRrXSNOeTllPFtIQi8hYlVPLH1JbmZLOEMsRHUzVmJ6QVhQOkh2TEd6VnZObDR5Q1tUIX1YcC5yemNbfkZhWjJjTHpwc3ZhUCF+YG1APHxMUVQvbngxU3skelFAKiliWl1wcEBq'@;
put 'eDRtYSNRJGhmUSZlNWVPUTRMRC5Nckx9X0NTPjtrKiN1LjRSQS90ZFpSP2tQVn5NZEZxZSwmOXJvaHwrIis0VD9AfHJXRV59QEMlc0UmdykyUS9xOXomMjQhZiZkNChwQyZSKWR3USFzUmVmNTtxSlBPPC9XUipVcXtnZTk9O1A8cDYhUUkod1BZaXc7OT0vYD4pUVdlMF1bL0dJTylWMkI5aF01'@;
put 'WGZCe3BWYSlCZTtNWiZwLlBWUEdnTzhgbUsheHB+Z3I1IU0qOmY2ITVFQWlvUWxMTmhXXV5rMUYiRC86bFM5ISR3PmlsQltXZUpiMCErOU1efElpTSUpbGtJNyVTQlpjNGRsRE4zbktXeF1XNl1LUDxvMjxWQmE+PSVPfVhrbWFtIW9BaVNofX40Ll57QkM0SzVFY25RIj5zb0RIQUtaRWlNPDtm'@;
put 'XyNtOTQ7TltEJilfKCRTbGRlZGB3UEsqTDohc0ReTSF1MFI9LmkldSlqLHoxQU9pemdxKSopU2AzV1JIVUtzMSJnOEBFTW92PENGdUwkYT1DKkxLMVNRSTF8I31ub2xDVH4icSRae3RbMSFrb3ZUVVM5b0syPS9vT2FUKThKZ3wxfXNxKl0+LkRJWj55KXtna0BYd1k9YGspTlBwUCFOZ0VsOHZ0'@;
put 'Q3dtRzpwIzVxIUdteDt+VipfcX16VkVAMyUjaitudStCU2EmYVI4MUgsVEhYLmJSV0k1LzgwQCRRM09kUFdfbUMzfk1Ye0NMNSIiQy5WTHw1Nk1xU01Jc1I8YEY7XX0iU31NTG9CTnchSkBpOEF2Wjs1WyhxU2VfeCJPKjhVUTFCWXttIz1DX1F6QzBEZUJgb1dmLzN+c2FuKzA+SigrK0tdNi8x'@;
put 'ZmtoL3BZR0tbdV83UG89aCNhQy9TUl9WTXkwIUlWcGw1cG5lUU8ocm0lWkguKkhuMUY8OChiX3I4dz9bVjFHQFtNeHk9bkx4IXBvNX1LUVg6QH1KaHRmdX1pTTtVVUJhVypMMmZKXiwoPUEiWCpDXV8rd2pUM1Z1YSs8Q3pLTUspNkBLRVh6YHkibnpjeiR1cXhaMW14S2YscEA0fGphLmhQfmxQ'@;
put 'NlY0RUE2aTx5LEJTPWFgU1l7Zy9yS1czbTJzI0FAaEJLN21AXlc8UVJHXXR2a2puO213Im0mT3ppcDt8Rmx5TXZxTk0xaG1jNEAyLn0zMmZAcGU1KkFSTnZzaT9lQDtlSXBDN2FnM2ZoWjs8WmkiPzs2L3lqXX49Q2tTWUYqRGdiMVdTazp+e010QkIsb0I+QFNmNnssPzxLcyYjaUpHbDtVZFJv'@;
put 'azZidjdIV3ZJQ1hQbGl2cjZxZXtEQXJAQFd7PXQsKjErTURYc01HVlosbFNPInFadCpsQV5jdnsuYSU8WWImZUVdO2EySiN7ak9uZ0Q/QzdLTlRUZmhvMWc+QDI/NTYlO20qSWk0P3JHVTlLdys+YEU9fUsyOHsoMDJdNzZ6VCNSPiRBLnh0OSh1Im91aFFtdGArdkk8e3I5bHZYNyldUjRybFJR'@;
put 'Ny9qPlVJR3c0Sj1OLyovLykoQ2wvKmg0LmteMGdhIW02KnIxdmJmW1Qyd3NbOEU0X3AmMUkjVnhjZ2ZUbW8odEs/KD1pRmAkWEouJjEuQlBBXlVjQjcsfC5KVWYkOFI6NGFmdyEieC57UipfIyNGKF9DLGBuZD1ybFRCYTF6QS90MVZqYXZMZW8hYFl5O3ZjQGlDaXtjbU07YlkrS0g/cnA9VmFR'@;
put 'WlBfSC4hRUQ5dCp0PDVqJnxXTT05dngsTFskM0VLNiExNT9efFooWkxRd1RLVkpZaDkvcDg6OXUufWBab31vemF+NHVyQHhXI0U/NGpCOF1vTWJLXmc7MlZoaVJDQy59SWRfSjwjJWBnKGtmcEcmVzJ5amc7azxCR0BENGRvMUQ4RCk0XS5NJThdN3pdVU9IVU1MayhsUFV9SjZzKCFMV3w/aj1W'@;
put 'RHIkfWloOGpYRE1ENjFoUSQ+bF9tZl1FQX5gTGN8VkAzMzhHIkFZaE1fbl5fKjZYVC8+QkAubWE3IyZWVS96ZjxgUXlJUXtpa0BqOURWRSNGfnQvSnFgZSZQQTNqQDYjW2ZffVVpMUZWbE4vQGIqQmU+b19LPzNDRktxRTpKWmF+WHQzYmJUInZYdyg9ZSE7WWoyUj8mVnZnTzc6LFJ5QkJYSClK'@;
put 'JSFpa0NZbUo7MnAxazVqXkhUZ0N5e1Z6TDRlRUtVbm1IJEg5c3BRSV0iUEdGSmohJCgvZ2VnPDNydH07RTAjRWBtQ2BORjN7ZnZESF04KlJZRmE7OWpOblNiQGpvQG5ebDpGMTlHMEZ9PjJGWytUZ2RRWHFdR1VPJnk0W1d5fH5zIXpRejc2QTkrcHxkVU92VUxJZHZAc0JBe0pfQDs7L2l+I3Vt'@;
put 'OTwiZXxCWVRFcV4oQ3hTajBtdUVoOllTdyY/KWBvSHU8ZCVxaHd0Om0jKUpPPnguVEp+XSVEOHwkaVM8XnpbcVI8bHNKI25+aHxxel9kK3g3TSloKz1sS2RoNFZAfmliVnBfV2dzNEAjYnhAL2N3KD5hMGo9cEE2PlspZkh6anI2Rn1VSSxiVGNfI3g0ZjsqOWNDSih2d2JpYHJlaixBe1BTej1C'@;
put 'NSpYdTUvamlaL1IzWVE1XUwoe2lgV0FuaTIqSndkbyMqKCJbLCwrVXViUj15dDl1MFduaX5gPlVGdWN3K04oWVJ3Z1hDM2UldFV8QiR0Xk0vV25HcyZ8XSZkSHQ9WHo5R1p5Znl9RTJZMCxNeT8vZn1IViRVVXE0XS9WUUsyQkEmV3V4SS5rbUUwZXg5N2xJdERNeVFmLzF8Lih+PU1gYz9Rd1Mz'@;
put 'IS50K1s7WUo4KzhpPDwhN3s4M1svdzZzJXtSQmJWZV1dOGEpdU40Xnk+OEJSeyZQZWQiXXEwdSEyKnF2cVNAfSlRS0plJUYpRSppYEA0SyZJNXU8fXZSQmRWbSlOVUV8YWxycU1BYT5ySS9DfCojPEN3bzM4P0RaPGhKXT46a2hFR0R3K1s0aD12X1NvYlNpdyN0PERYJjd1JGE0IThMcV9jYFgy'@;
put 'IWg3N0I7WCNgOEY5eGM9RVk8MD5AM3pAakwjL0Zvak0jZFJ4QDtlUnFDYmBZJS98YiYwQ2pzY3ZvPm51WW1JSz1GUVZzcjouZTUxQiw8XVhIaWF+JSJBfTx8NVZ5LlMlWX5eMigqQyl0LkA8LE81SmVnZ1ReSD5Qbz4lM2BwVFFFMCR+eWM1fkF0cWJpZmp2bmtKJiVjOU8qdTRwOEMsQ1FsQVQ9'@;
put 'eiUmJTpebjpJVWBddTZLRU4oe2NXaWZaYiRrM19ZX044Z3xSaC4le3trdnYlNEp4ND07JnhLPUdDZyhEKFY1SDt6dCtOPnNDal8qP3k3Q2VaR25+RnUwVmIuWVdFcU4hI0p2OTBHcG8yalcxOzpnRTY7ZEZbdGkwT2pFQEA5YT44P2tiPVZJUnBHOVpUYFBlOj1scn1bTTgzUWAzfClpMVgmcDdf'@;
put 'UTk4XSVuUjtvOTY/bVF8Y2JFJEBdVU4vLjIjdVhBZlFgXkNUK2d4I2JbY2dVKzxuLDcyOUJJMG5tcDhRTzdILygzaEFRdHUmL19BaUtbaGRGXlBdXiE9QSpNN1s9cyJjL2U9PXxMVU5SVHx+KnsuIV9GSlBENSM5NGgqe1N6dVtvKDJtZEdIfnImdUxKMkFeIXMxSzNuVHRfQmFTUXw1N2gkYDUr'@;
put 'QG84eDwhMSJEN1BCM2teIWwjWVkycC5uOiE+b2xHdHB5O0x3JVhaUzdaUkVuQz9AMih9T35nTSlzJG8/bTdgcEg5VkhTI1BYdGpDdXY6fGQqRVlCdmNDdCpOZDRdYUZiMlR4ISNwOmI5fjlgSTkrcWxSW149fExkPDMqVyNmX2B6cytmTFFPbzA1NCYiQTxHdihnOnIsbGtIdFRbK0RfMipfQWxr'@;
put 'PHAja0hRU1I3TFdNJi8+S1tKdSRCVzdlMy5zYU9KOk5NMUcudTorIkMpYGY7JF5AYFdwPHFkI0ZUZixpIyxody9wZnFUXT9RP2N7flZYTGhQLF1lTV13ZmJkPigjT0lfYHk9NTNMYHd8JnNAaTs4dSlgVzglK3BDWVNRcEImKSpobzRUWy9gPSg7W3soNm5QPjskaj5KLilCVnd9Pz5OJFpJOVFN'@;
put 'MVVMa11PNEomUD0oZUxXLHB+Q3JkZ0ojUjhdXllEJmlMTTp9akkpfSNxUE1MLno1Z2g2ZyFuRF4/KldiMmUyXkd6ODJgeTpSejk2NUY+U2NOY0o3a2tgamZ4UmYqVnBabmNPN1piSC5sbHwqdFluKV1oPDp5dCQpeVM4UTssRypRL19LbE9QSFM+TUVDQCE5YiJZLDltKHdeKDllMmQlfCFJPSM9'@;
put 'aE0/VmkycjF9QHAkZnZ8IkZsPVR3aDowKShgKGltdnQvSWNRSWNUPS5+c3U0JCxbdj95RUE+UUJqKjVoXV1CZ0hjVkRPRUBBZ3k+MHJ1OT0mVSFARCZYbiNiTUg9eW13MCgqMUdQclRuSktWKSJpIi80clFJTktqcWBtbCZ6V3ghKCtRUDtlckkrSzZOSVhFRClwLl4qeWldaXg9IWhxLkYmK0RW'@;
put 'WkMpZVR7YHlpSTBXMzVtQ0JtLkxaRyJDW0xrXSgoeSt+UXZxUGVUfHFEZDxRMjIxVWlaQ2ZCRSwqbkxOJVVbLmlCWCk/V3MuXmdOaVteTXJwcnZAW29tVlJ+O0g4Ol0meXpeMitSO18/Mk51QzNjSXxNRG5rLCpYOkl8T00vb0BwTk1XJTZ8VGMoTDd7eVdhXWtFej07O0gwbykwK20iSF5iQntd'@;
put 'NjghYkR2QylzKk06c2xCJGEjUHdHTipYaGQxLi4rdShxTUhQfTk0MUFrNm5vdzZHYXooWEg+RmBORk5+KS5PT3kwcjVPKU8lZGtiYWEuMmxHRlEiSG0ia0w+RW9RNVdZK3g9X0xidE1Yd1BgcVU0eV9fXTxPcEo4MzNHVntbS25pZTxSfHlgRXpJZ2l6V2M6T2UhMjEsOTlib3VTPUB0OSY4ayRw'@;
put 'TTRALktoeC91UyhuIktTI3I/JkhnKmBCVkBJYnNzZ0ZgKFJWKjt4ZX4zM0dxMzVHSFZidGpFKmxLWDNiUVlsZlNlUHdIMkFMJVEhZk5bMkg+W194JEExZCJscEQhWXtEITBNO2BMKztEM3ZXNjAkUHhsX28sPkYkfmR5cTpIdUxONTRfdGEkbFQ9cWNSMjdDdWdjOUNpfFB4NXhlN0ZUNkpBMll2'@;
put 'O3xdTnNsd0ElIW1yVHYhSUVXWzVBMUQ+WmpzSGRmWVNYTHhWSSlZJFleNTR6I2U5dzZlWXUrKDx4KmRvfH1VWVtKUiFyIVBjI31sLjxBW2c0R01MaGVKNDlFajlRQFFnQVtaZClNUjAqOVZuZmZLPjRXYlpYdSQ9Vzw/TEs2V0JCMjBYPzJfMHpuNWNLPzBwTE9UUS5GRWUmaHdSI3ZIJTFWbCNz'@;
put 'bkV6Ol9xYXcobXVnVSxzeCNzMWlreE14V0skN0FJUCZ3JSwwRC40TUl3TUQmMkpFfjMyZDpefi4jPkg5aS95ekBCVkR6ZjJrXlA0Tnt5SipJZnxGXTEkdDkxSV4zQm9kOW4jfE1JW0J+ekYwUHdUPkEmUHFQaUdsUk49blooZWFVW2lrIXlKRVFWYU1LUzJ+QUo4JSwpd2lwYW12PTBvaCVlZzAh'@;
put 'Xy43QSI7QEJDRFV7M1l2SGZlUlpIeXhXLnN7WWwsOUxmaHUzRVNSYDV7NWluUnRpLk9deEtpKHNxKE5lSDtJayFvUXxwYjNqV1I9NVdBO0l3KHFMI2o8Zlk2QmQvKn0mUjRbS3pOYWRMV2ZKJj0vPDJ8fHxxeFZwKUJpZWBFVzFlVkc3W3diWyV3bDNTTEhCe1g2Q2JCQD1Tb2ZqMyltWHdXPl0z'@;
put 'VDxaME5gbGFALH0xfXdCKUJxXlh1JXN7P0tMSkx1c1ZKYCFnPH1ebC5sQClPdzxHWytBNjMpSTg7eU03NThzeG00WjdFIkNOfF1TbV5FQylzNHI1OloxNUNQN19SUzZUZ2I7d2RYU0ZibU9RPVA3XUxIVjx9LF9kZ0Qpb35NO1B0cndUdHlYO3pWYWA5TFpzTCRIMzZ8PTAqUkBXI2Z7K0ZtIWhM'@;
put 'a21FZW94S04zcUoqdFgoPHNPOk1SOElEdlUqPGJNZ18rbHRpPVY+UVk6ZCxRRCF3RXZQL1lxTjdXeUJbTmtqa0Q8LHhQLENwaHBNX1pGXktaTUhjTzYlVW9EVDk3Y2Bed3JmKDwsK1pBTzZNOGooJS9QbGNtJSpfVWJlZSwlL0NuIXVjZSNqYSFSayVldUROLCQpXkpeaE4hR0ZPbWtwdkZ1amZV'@;
put 'VzN9RV9ROnJmOUpMX1p6TjdYODFSfWZIKTw8RkYzbGl7YjRLb2Z3O10oIkJkRXkwXzJvaVZEJlRSX3o+dC5vI3xTa3xPRSJlZWJAKD58TjVXQjNiUGc6U0g3dndePHM1SzxRfltnckY4QmReYWN2Pz8pblEuMXY5SHtNKThPYz03dG9jKk97MHklL3N2USRDWHd3akJSVDlEPzpkPkFEOyhpKyZb'@;
put 'dDJHbGZ2IXQme143XTJMa0ZOQWYoeENNKFhlODpiUGp6fDt0ZSUoTHsoVWRGIWFeL0NASkZ8ZUpVb1opYjcjYjhnZVhUcSwmcUFDfCFVMHMsOCRwM1FNSSMmWCFMQWskdyFnanNsQ1ZrcytdVkJMSVE8ZzolTjZrKjFhOk4yblJSSEpdMm86Mz5OMUN+enJxLmxAJFh8OXdYSmU5dSRmVGBHaSQ0'@;
put 'SHMpOVpiUWdzTVRaUiw2QWNATkxFRSNnZyYlSW8pNUNZaiI8c19BKl86ZnJEe2lLZEp1fCwvNj9bQWhDUFpaLzdDXkU5ZUxxc1JxS3toOyF3My5OUFs4KktEfj9SQT5NUE1wU0x3RGd+dkBsNEBbOThrSmdYdVF2JHtTSTgzTyU6floubF9MQVYqPGdVX0IoSW96T3IiMlF5OmpwKTprWEg3QXUz'@;
put 'QjpfRT5EZTlSMVA7dDp4N1NkRk4yNjkmb3o6IlJSMDB9d1oxcTJveDBtUmRMW0wqOytHfDleQyw8WiUqNGEwZm1TfkZWZmBETTJxN0VaOl5RKEIlOSJfZSlONUhHUz1FcHl6XW01RzRAQ3NPZ214Slg2OSEwWiNOIiE3XW17PTxEUDdweU1Je2B4K2Y9PlprX1lkLl1iR0dYWnlmKnI3Pmtwciw3'@;
put 'ZismfSVYPUs9Y2plcHBwIU1JUEdsO2NmSDZpKXRsOzVydlMyNEhXMGswJXg0IVdaInYqd1ZqcHVjcklaPCxtY3o7K1g/YH1AOGMsVEhfZkx3IX52RDAiK2FBUXJKYlZzLlJ2dF5HWmBAczlJXV1wd3RVdSt6Z158ZHB3Tm9WMzgmRkxxeEZuTmxOPV8zT15LYyk4VUE8JkYiTE1gRD5+WTw+YnVI'@;
put 'Q1R2WkhtIll5KWZTPSQyYkIySCU0ZnxlVX1VUCtQMz1eRilgWGdydjwwVTg1fUsjcDQvZmJkKyhAVCQ9O3klaTFVSy83V0kmN0lhMWt2ZF8mYVhIYSpmZkRmeWk6IisiWiQlRFNUYG1VaFh6JH1hcF5ycjcjODdMQ0VtXVdHfHs5blkoWlU4MTBkYGo2ezZ6V3NWMVs3ay51IT5aVT5VYU8kTyps'@;
put 'W0s3ZSFKeztwVndwR3tGMzRxMFt9UCpVIip0fV1MdTtzN2UkaHNORCw3VSEyYDkmNixtfXUxVyozO09iRmdxKGN0b0ZSeFIzJTRKYH5uQyYkPiVBN3o4Qil2aEJJaEpGK2E7ciZmV3R4TGZfeFohV1s1TE8waXopRSs7OSksaUVAOyZ4enYwMSFWM1VicTg4eEBKX3xhTChUKixhUDwlcCVNVTJG'@;
put 'eXVpZ0NBMjgjWzomMVlOKFcsSENUKD1TWV8vfS9DeT52MWdTeVhjM2YhP2pgPnNVUzxDQjJeSiRhVTlYZ2pPLkcmTnJvUkp2VXgzM3FHaWdxWlMjOSFqdmpXP1VvLmJvZX5fYFJpUlJjXzsweUFAelZOfi9CKjEybER8an5fUixRRWZXTkEuZUV4MiwwWSxYfXU0VX06fn5lIncwV24mOUVaKXw1'@;
put 'fCllXlZzP09LZXFSMnUkeGFPV0pFdnJnd21hQilEWXlKcjVqJTd7ezxfakJpeFNxZjtRI3UsX1daOn1LK2wsLllLd1EuQ35CSSJIPEA2eEZ9LmxjfCV4RGI3e3BXdkZSTlJaQnAoQDtlXiE3cS8kUkJ5PiZJSzQ7LllRV2A9UU9qekV4KGI3Z2BCWDRFOHQzRHkmLDA6UXJWZilISXFmLy8xPU5W'@;
put 'NXRVY1V6SUpEUno0NmY+Zk1JUnMhWFBRQltMOWl4SWpkYFZiQ2c5eVs9NVRyNi9gTEtsUDo5a3o3YEMiKEhCcX51Q3RHUU53P21wcjcjPm1GSjhhfHchQ09+SFBVSGIkMnBRVUBeRSwsQVlAZCNGT11DP291Mkw2R1FON15rQlZJMy9tXTRMcTE+ViY1Y217e3BbLG1scFduVkssJFIpc1t9eykr'@;
put 'JW5IRy5Na1I+U0VpNnkqYWREZWRybHAmKUhedDNVajZSREg3U0N0R0JEc3hpXylXbldqS31HUzFYYnNVa3JpWyZULl84TDxRSj1NRjl0ZTJ9KStJcW81RUt9U2w2W1VUOjA6cy9vVUpqN1dJWk8ye18hVl1nTilVbEM0bylydzMiQyhJYE8jSUdVUlMlNHxiNWUrMHg2enlbKktFIUQyUW91cmhR'@;
put 'dzJfZH4lJSJjbVpHfnMmNlt5a3dsRk5RO1ByKFM0cTZ4bDdeMStjaGRCNnpwNjNhTClYOS9mY3Q7XjJaOWoyNzVtVl9TYCs1S3lZU3V0THxIPzJRan06VExEbChlZyRmTDFxTXpLV3l3fU52LDxvQT1LOnJxbTQvUGdKRjdleHZ2ZyJfZj8kLlRoZHglOzNfJj1IcilrMTQ8UzRhJFgiZjxpajJI'@;
put 'MD43Kj4rL0ZCeUQzKDtlWyh5bWdeT3VZXz1vaVpoK1Q4OF1KLjxLMDZTX35OfH1tW0U3MUtZNkZIcyJSZC9JWHw0VDEud1F3RDchZXgkMj1GYC49Q2RSfHZDVWY6XkoqYFheUDF4eVdOe2lgI3VbYE5GOSk8Q2MlZntOZXliflh4WS48SjlITms8Q148OXsxbDZ5QyN3KHAjWTdyRFVdI3VaT2s2'@;
put 'RDEhK3VSMDomTllKVyxEWHsraThNamkxYy5lRTFNJVtdSURwNV9tWHFTezBAcS4yOnNIPkd4QUVXc0sxZD5eRHl1Tzd1bil2X309KERDPWlKUHhUKDJhbmE/W3VqRXN6ZCZ5M3V0dzU6KGpIUyR7KGdIflNQVmRoPChLWVo4bHFHeX5XYXM2NH1NT1UkbGheP1B3RzlucngpJE0uL3pzQyxtTz8k'@;
put 'X0NlXmNRWkBjJGYpMl59cWd5SStJYU5KW1NZcnlKPDxFJElwIntVdGx+dWRrfEcsYXF0dFMhcUhaOHdxWVFidX58QD0uRXYpaV57ZD8yczA8dExmbUo+JiY6QW5Sb0I0UjNpdSZjZmNLQGMkOWxXajpMTTRjMjxnfiMwQHlKJkkxOFArPHxCQGl9OGs4ZnhvLGRoY0JlTH1NUHBeK1Z7bGMlPnZ5'@;
put 'RjJ5WXNyTGRmRnpsa003O1pgYCxLe3gkPn50RiQ0XzR3TXZzfi44TzIpTmlHQCokPkpnKD9KK1JxTDwsJigiV3t5fHkqXzgqdyg9PlZEZnh9K2o4W191OCRZfG5ROyFuaVtCZkFjJDtrPld2XUV3YmMwfTU6W0VNSlk8PkcyTWNLaFdPQGNaISlpPDNnXXk4fSVzN35MNUhXKDhVYEtxeFtbYzJL'@;
put 'QCVyQHpgTC5IIywyQ19dO0dPTjc+V2NgU0RhVTI6Iyo4Lyl3WTcrTmlMZX11OmhyQzpFJTI4R1EyeEYhe15kaGF8cylUOkRYfn58THA/NkNmSXBeL312X1lXPEZeYmxdPk5gYUcueTAwIWQ+fF5+bG0yWSFKSzZbVGJKNUFwLi5sNSJmP3RCQjtofFtTQmNsI0c1bHo9PVZoa3ZdYTNPOUpBODd3'@;
put 'WC46XVRyRldnQG96bDgzVG5sZ2QvNCp9YSs4fThDXyh4V3wqZlNRT3tndkUqfFhlTiJnOk9FZjIxW0Z3XXw2digoJHJAcS9YL0cxcV9SSCIwVUEld041Tm1wdX1xWmB4YE1xJkIxa3l3TzREV2hKXzVnaDNqTEpfcVt6W05SSDZuanxCaE4ldTBXcF8le2tyaH4hVVRsajhDfE5dX21LY301enhn'@;
put 'UUQpWCt1SENddlVPMnFLXUg+LE4/dSlhKVhWREs8N2k5NFYiSS4mPTJbbTRCdmduLyVbZHB1TUt1S3pUKjZUWS5iQUl5RU5YfmA2Pyp1c2ZaTD9RY35sSXMhWTV4Q2h6R354VSh4Q2BBbWkjOiM5Tj42dWxSfm9UJmEwc1JncDFgdnhsVnJkQjlWZW58Lkh8cj5MdytqJkVfJD09LFIqcFZ6MX1l'@;
put 'PHhKL0RoSVFiTkYqRCMxOnRHVmJRI1VkWDs+NyRAZlBqPjoiYSw/V09SV2h8dXh8QSFGZUpYJWg3MWYyQEQyd2lYbWlVWnwoV0ksWCs0YkxtUylQLGBAdEIkNTpKPH5WPUg4UGZRXzdrW0UyNkIkRHhIUE9ecjJkYGF5QlUuLGpjZyVUO3QjRHMudmU7IXZaamVfNl5AeXE+YTc1LlFEPUM0e3RP'@;
put 'WHN0WkZ2Lmd9RW0xbkRvL1lUYFdyYUVWcXpoNXA1VztgXiNYSDtxcGQzS01lemNOXn5SfEFYP3EuXTcifGhRK2lFR0FHZi9YNzU0bG54TTRyRVcmcCkkd1ZjZD9HLEdlbX58MWVReSR7eE4uZlIuPkp8fVNEcXwjO1pUXUUzcVhQU14mKV5RcjRrYywrSEI5Y2NGRlZDMktrVlhFYyRKYy90Llh+'@;
put 'VTZ+KDl7V3llRl1jXz58M0c5d0l4WEFeT0lIXV09U0YoZDk8VyQpL2h1WyNpKTU2bilPMFZXUm41YFF1WS55Oz9kZkMxcyFBfF5AQzcyIzcoVDp6dXZKXlowJTV3WltTYEZAUlMyM3x2eSZsNCJvYWZHdVRBQ1BubG4lRHA9QSFVRSxqLjlmSEJlLz0vPHFue31Ac2lQW1N4W3YoV3Q1L3BJJDwu'@;
put 'IlR4Vj9tZHEiMU5JW1hgcDl1ekd2SFVjOz9WPC96Yj4mL01MemY6MCtrQVkpNCJvPlV3UWdRVmc5KztdeVhDRDl6OkhLQVZLenciOXNOXXpee1JFQUpkdmJ0Qj9ffm9iLHF5WCZVMDUzUG0kLnFOSUVaOEtCdDI2ZFp+QUlmWCk1Tjs0N1Z6WkxDTWVdUixuX0NmcVgxZlY9XWo5RExLJXsrYVJw'@;
put 'LFAxazUjSFU8RD0oe1VjcWZJTzZWa1cyTlQ2Kz8rT0hYODRwfXo+TjB8YDNeOC9VXX5pTXUiW25uIlI1MUs9amBXZEhvJVhHW11JIy5bSzsjLCNTXnJJfX51KzJmcVlvezdYK0U1WEcoV35jfVkjcn09UkhXVGlkTz50UjsiaUxJczpmcFRyKzNaVExDZjVqTTU9K11rZX1ROG5wXiRWaHtAOVh0'@;
put 'KW9ZMmQ6TVM3MG02YjdHQjMlLj9LZXV2aVQpTF18PFN1dE1XKERNOWwlfUkxIXxUfVFBZ2RNPmduMV1aM0AjLH1qPjJVZGUvX156OkBkYDdofUJnM2trWGpZNFM1K3o8fEt8KX5ZP2x1OGg2dVVhL2hhSGsjUlZudGlHTjtiP3I1X3FgbDdgb2hESTw7M2hKUSwoQldTdCNeRzlMeEd4MmlRWjQr'@;
put 'Uld3eldWbmAycnpWSW5VcDttWHs5cGpxaCV0NzEwSTp2Z0IwTnBPMlV2Smp3c25LfjpqQzpuX1c5Mno6NF4qIX46OEhdZEgxLHd7dDFzeGtFNHNAQytWcTJoL0pCQUNLcEohU0N9UjU5PDhZcDgmTyRvQndkNHhCQGlXZFt9YmJ+MXdEekswRn1oQFF6SGUpTDF8OW4waFdxLHsoIWxsYCY8OCNm'@;
put 'cDRlS1QoWmAxYHBeayRoYXdmbXY8dHIlM3U+JjVZK19FNlU9MHVeSWNVYzhBJGJVOipUKkdsYUw9UGdNTHEpRzBdLih8WXZ+clNBW3xKLFciTnxrJlohRi5MV2M3ODxSWVE2eTNzIWZ9dVFdWDR4JFZWV2l+Rj5saWYiMTVVSX1hJmFzZXNwQj5oW218PURPdmAqQmNgTCUyd1l0MFRfZC9CLzAm'@;
put 'QmJdTH1fI3xGKXF5Oz9uUi9BclZsfW9sNDd2LHJeaXB9R3FDMlp0US5YZG86ZCRnR3NJbkpleFtiSFIyMlkwJXF4MERed3xsMz9oSnNyQ1FkKl0ybmB1N042NFMmVjhOMnh9ckFsPy4kdjhoX0hITGBIJD0ke1VATil+SFhrVjhTTGpwQ0pNK09vbSswYDhDYVBrWDlBNENpdWhiLnM2Ly4leShO'@;
put 'fHheK1NtakZ2Oit2N0hmPWlkKndwdi91aHh3e2BUYGpfKDI1QUg8bGwmQHtOIypaIyhkQFI2ZVhYVWZIIkdbZy9AQlNRWFhaciwkb1YyMXh3fDxKOzJLIWNrUmE8bnZyc2pvJXtTWU0+c1NRTDVbcChJdjQ8OmpifWx2eE4lN14veUVVeE80eFovJXx4NUZgayFGYTs0T2dAKGt0L1oqK1dHZzNO'@;
put 'QlFSIW93an48OUgrRWVEWS9+amUuUE9DWlFVJEdjaENufXl+bDJvQWhgcWVTLHw5VXxvMSZ4R3o8cmwhXzMycVhpfV1LMVkxcVVFSjF6NVMxQ3tGSl91ND16bHJpQlp9VHxtJjxsND9ZMCZlXVc2JD53Y3dmOnRIdkZbL0tucjtbPz4/IVZjMjZLeiYyIz1HRHRITDxGOlolIU9yWHJOZ3JJTixQ'@;
put 'QkozU2ZARCl3Yjs7U0wjTjJ9UFRGbXttezl0RDUmems3aC92TyFwYGI9LyVLVF5KNjtqYz5XX0w8OUJ7U0Q5M2J8fGU+Pm1MLGJqVDFfWj4lSFRtI2ZBRShiL1FDaVt0NnA2Ml9hfSNFdV10T0pkdj9tRG12eDJ4LmxWNUkuOlI9VCNsKSgoYiJoOGN7K2poSUFSTzEmMTBvW1pUdj5pZjhdYTIq'@;
put 'bGpPPGNoPUkkM3NoTTVUZW56Y1lrYmRrMFlkRHtkdiNIWzJhU0k6ZnpVRG5fPE5OTlt2bV1hSEIuantEIXA2JU5nMUxqWWxiemxrRTNnIn5FMztwSGRjMzlfVkJSJHRISSR5ay9nXX40bFtXQWM6cUpZRzN8KTMkOldReXFHZGdjMUlIVFhkQ0cpKSpwbHxTbWhkZ3wkfS9heHNzPjBUY2tdMXBO'@;
put 'UnU2SXVpYXxMd0pmV3VUSVQkTE8zJjoyXVg8TEtwLnJhNTpoNTplUUgmbn5KKFljQTZTQkNdJl9mdE8pd29VZ3pJJjFTTno/SCsvQD44IiwhPn07JSo9YW9uKlg2WXQ9My9LRktmLFEqXypTYkxhOFZqbE49I1U6d3RibH1DdG9hZUAhIz9kdTI9OE4yMUVSdWBrXz5tPi9RQzFgXzd9WlUuMVUq'@;
put 'NXcwZCltdFl5bXtURyE0ZD9aUDdMfFM8I3xTMytjOTFJNUkwVmZ7ejduWFI3KS56cy89KWxiLkNsTWcyS11rXWA9Nm4ve3lNN2oqVSVJV3c2MTB1KjE7NEA6WkdFWTExKSlNXkBEYFhPS15iWXtDbXtVYEpZSUcpWldEIng7KFhnV1EkcSkwcyFqMiR1IUpLcGZvPWs5LFJ1OyxCLFlpQWdXVGBK'@;
put 'WnZxfWBda0J+flgiPkFhPFkvaVE8IyxpMT9YeigoPmlzUzEvIXE4Py9JU2l2SmM+O3heJk5ePHFGUk8la3pgQFR0Y0F3YS4iVG5LT3VXU0w1JUZvYFpYKCgsPSJSInswZ0UqWjxUdn0vT005OEpDMGxrKjBjMHNnPkg6NGUuV0s0dWk0ZlJfUXh2Lm8qfFNbKyNURFpEbnFCOUk6USpoczl7IzVt'@;
put 'VjN0W0J6TDxQWjEoa1YzcTU7amRUKm5LbSleWytSKyNhNnF0ekxUXSVXMCJHfHReZHpZJmVXfF9hKmJ7KnxnSCNlbX1aTipTYCNqVnpWV0tCSiV4QDBjbSl9OS9yTy8qK3lHWmdbLFNpQCVOQGJsPih+KFUyJShdP2Uya3x5TS8jX3JvUD99UWdAMmVfQWJhSyV6eltHZi5HaFFRMitge0l+cV85'@;
put 'OG18fDhdb3YoTnk2bDdSUTNkLyM4U1shalpCOlE4JFNiTElGeTlRZTB8djp2N2pabz9iUUBAIztLdCFCSyxhTSQwQjAsPSVKLiNiL3pIUCpJXW5DTi5vazdyT0ZObGN5U05YOSFaKVlUKVA7TE5FbWAoTypxcGR+ajsjWF8zPilGcyVPUG56b05QMi5EK00pSWBGVHE5KHJ+OyJEQ1VYSjw/O2Mm'@;
put 'dXNPV3xnW2B6MlUoa0VWWSxKYDJaXUxFNiNHfGZCKl1aNj4uemhkVFhre0x6Z01WOl5Aa0VsQn4pJjx6fSNddWxpb1tUNWhQXS45SlE4UVMlbEdGWV9LX2wkNGY5TTYzWiJjfmBWUF84dkUpemFYdDZ5V3d7X3ZbUXBkJC9dNHcoT20veC90P102RXZNcTJDP31RNnQ9SU06RktyeSNTXiVqfW4p'@;
put 'QnR3SSNLbGVzTndTQEFhRyQrcXUjI1Q/LjdyMzQkMmZXVFI5eVojIy8vSkRAQks+YzFLP2FYVHYzXk9EW1pmJC5QSjtGXWddeSU6Mk8qZ1d9dXQwTFpYPVdvUnFGO1UjZV9oeG13L3xiQj4wVilpa25sIlAiWVtGc3kqZjpMJipmNXFVQUQzVVV5fEFibW9AK2x3IjIvXzBnWXZtKFcyW0V4dmhM'@;
put 'bVZrSjJ9cyZ0ajE2PS5UfUwuPWhwcyspPjNFZ1FJLlFVNyMyOkhgZUJfazxWeEshbTBSIUFmTkd0UGI4YF5YYmMrMFlTaX0/XjlbN3J6JDlKWzFnIUU8O3d+dX50TFZPPz1QSlBTUHo7STJPezYzcTZjTlU1IXY6RiZvaT5eNjE8ZVtlRSZXZlMseWlRaXE3WzZvc09GXzFscHwlMl5aR0NsWmZ+'@;
put 'Y2hnLnVZY0VPYlVQekJLNjp9ezolREFpRFJ7bnxzO0AzO1MqKytAK30/N1pWJClNWm9vZnJpUXx1QEM9bmB4fWdIa1BbWG0/ODtPMU0/XzdRVC4lNUkyNEZsdEUxPFZlWjFzTGI/YU9TWTdKO1hdRnR7TDdVITAyLnNVZ2BIPS43V2I5e1laVGcyflQ0Q1F+XTQ3LyhkXjFvN3Q7QHtteU9hMX5H'@;
put 'NDk1eSg0amk5bVZWfSJzQGlEdWYuJUY1KGtpRk5RWlU3SVhWVHVUWEhqYFIwbXR4RFBtdF9DW2w4fm5FWntkfmdsWlcyQG8mZlZ3VTg0VDFRUz8sITNXMX0/Qi43cn1Gd1E+JHQvaERMQ0VXIXNaYjFBMTk9THI4MV9VcWNaRVZobj1ZVk9ycEBpJXt9ZWZRbmRjQlprLz9yP2o4NVMpNmg6fEp5'@;
put 'fEpydU1TITZ2MVdrdlpUbl1tI097MWg8dHlLNnNRdk43M09AKGZrSFkxbkhXa1Ixd2BUUG4yeWd3PiI2WShPXixnOzc8SC80Y2FUOS58aXlZVjsrRDhZNiI6LF00dis9ajI/YjVKTT4uZng4WSk7L0RUWUQuPW5obXNYe0tpP0V5bTNKanJ5eF9qPnAkQExzbXwoVkJKdFJWSXRjPyp7eEV2Y3VK'@;
put 'W1k9c3VQam9rNkAyUyJwUUN+QF9LRE5PP3lXI3N7eDNPSm5vNiZzMFBmWnBMQHhlUWhZJTdKel4ucllZK3QrZVMja3J4MDRRcVQmZTFsWT9QImpSRlQzRyVSXkFGeX4qWShASmlGN1NwcnFuOHZeYy9DcUorRH5Pcnl0aUFtO2tybkg5NTZhV0pGdXV8K31aL1RiWjZedUo0KTtsU1B9TEBdeXBx'@;
put 'Ik14NV4/aTBPcF49QXhGOS46PyhPK0sofikmUC5ERjk3QU9fN1N2W0hxSixDTHxRMFl8Z2BdRGZLJEB2I2Uuayx3KDtTYHt8N0VWM05WQiwyU1YlIlR5TzdbZF9JQkoxL1F1SmJWPD95cnZNPzBWL1oxZFFAbjtufm0yNUo7NmBgaGZAXiZYdnRtbWc2TCZHbkpfbXwiTSlVeFM3fW1fXVFHY1tJ'@;
put 'OWBPI0JJKmFQaWBWcn50Wl9QdTdqLnpHUWtQcUVFbG9HemMweD1DNXM2diFfL1N7WnlTOn55MEVSYXQlOVM6VjxNNV01NGplc1NQSkNzNHYlZyJqWUtPW015ISIvW3JmUE1HY01teGRIYlIxXUlncmNyJVZwT3E0XjFBcUJOX1F6YUtQKEVweFhuV11qYzY9N35tWzJjYTomP2B5bG46ci59L3xy'@;
put 'R1srJD1LN0suL30hNXAifHdwY052UjFRaz4vdDMiMC9gdTNqPC5hT1cpKD9Ab1BGSmFeKn5KJWUzeDp9OzRHSlhDY2AhQlRSIzF2XTNJP3srMWRzcD0kJFNNImBpbjpFNFleWlc2SmxfJjdkWGdFTU43dzd9Tn0pUDprQ2NrS0NYTjBgd3t6JX5vLGJoWXdCV2dCflR3MUtLZ31oUUkuJSFZIS5d'@;
put 'Z2h4JC9hSSUhJnwvP100I3FUQCohWm0rWi50REksd0ZyX0pGZmshc3BqV2ZJQHVOM3A/PStkal80MXp2OWNzW01dRVApZGp2eXJ0WWNgO0klXiN9fDhoVF83UCFCZSpbXk0mS28mOVY1Qz5FZiRsSl9zRytKP2pWdkJbTn0kbWllelhJIUtZPThBXWt8QXprZ3E9dEIzUD1TXVFbdCxgRHdOVipB'@;
put 'cTU9M0FeY110TH14JWFJJF9GM0pDXjc+T3BddzdnTk9NYnp1PW9lbmI/e2BlaUFRSWNMZnpwJk52MF9hYzg5cXx0XU1OYE06K1lxemtmWGx7JnI0c1ZqPyk4XjIlJlJFYk4saD03NVhtU3JnJHo5SmNBVHF3W0x1fHFoTyYyVE1PeEhtUGA5a2swVmh1QGh8NTQxMTwkPmhTUDw8THI8OCxtTi9a'@;
put 'Viw+V0J1N1JaX0VuOmpaUWMhSTdOZzFRb1tqRVFZR08wU0lleylPUUNtRXRUZSgsUHNxKWJGIyhGRyslYk4jTEpxMyVoTi9rMHtXLjE4aFF7KkZ9V3RTRDl6OD1oMCEwYnt7OEZ4cyIkSDh8bXN8NW5ZcTV6S0c1dnZuemlmbjY3QjRnP2RpPDolZ3RmJnhOS3A1IWNxZDpKfVdWSkN0TTZKZSZj'@;
put 'UTpaLk5FakR8X1gsdTtDdTJNRCU8OEJLS0E0SV17IztKWFdDNFBFYndlRjYkM11vW1VmTHgzT0ZIZmZmVTJQXnx2SEIxJD5kIj9LUl1MT1ZPUHIyI1lsZ31jOlZdd18/JTZuRTF1biV+OkxrOHNkfTZgUS9JbHwpZT9aSWRfWURIfn1mQUpkYzF8MnB0YWFoLio3Y2hpMWJ0KnlJNypSI0o+e3ti'@;
put 'ajdFOmVvO2lBcEhJbCp1fVZycFZLd1U/Zm9TTEUwPUhbSzZgSWJGPyY8WWBJcn06UXJjZHMvNyN+fkkrSm1jZHZLayMoUEokZzEuPCQzUncqTCpKO1QxdXY8fWAxSFhOIW0iTDUpZTtWdzpDZ2o9Tys9a0d1VCUmW0EoLHRYPj08ZlklWW0rUGVzTlgxKG5vcVtQNEg9d3wsQl9GUVM7NTR2WWhT'@;
put 'QWY3dnQ8Xns8KUdyfUBFUld5RWdtKy8pciVQcDt+ek1qRy4sPGt4Kn1sO1RGNnE/My4jJlBSL1Y1JG42U3t4TnxEeVJNdnJ4JkVBMEc0aXQ7bH18JU1zTk95IVFsUSkhODJ5My9NdXY4fmFAIm1CNEVKenVwMENHMzBBKjJnd3pzWk10JT5oeVgzd0hhLk5WRT59Wj9QKXBEeDE3ZWJOWXhDNHw9'@;
put 'OUpVY3pJbTxpWCtgcFM3d10/S3lrKUtzSS5UVD9DRUNJV0R1Snh7dV9neHxVI3tbZXZfKz5TQnshZzFRUSs6KSorSV0yUy5LYncrVjs4OCpAL1hXNEhRbSx3Z1JeYm9VeilDVHolVnhzTCtlJXpraWRjPEZaIyVkcUU7cm1oXjAvZDY4Vmt7Y1pRcFBbe2FwPUxEXjxAVXFPcmkyKW5MJlJjRDVk'@;
put 'VkdpNiE4RXZsYl0rTGs5SjY9XmkoaExldyNUX3U9V3JDW054RFlUUGc9dVhIXiFNQyo0eFguTngiI3g1ITtzckYlLjVuQHY2bUs8dCNUIkNkTHdBI012R1JDej58dVk5cEFxeyE1WEpMSH1KI0cjWmVFc2dQI11uZyk+K2hLNGc8fWE5Zm1ZXkBMOUh4MXRqLkxpOUh+a3lbUmJKaWhjVHdvakk3'@;
put 'NktJV0xyLlFCIkI5SCJHZV1+Qll8JS4pIW5WNiReai9nYmM5eyQvYVdBWiNtMVFEUGd5P0svUXlZND8yfjI5L1o3ditSSSIkMnNISGRNenNHK3NFVH4yK2A1QHZGaUI5ZFc8RHAjL0RvT1dnemdXPzk6M3kmTn5GLF1CQEQsKzpKWCI/d0ZLZEt3fWcvdGd1JG5ubDc3bm52Qkt6JFNKMisjQ1da'@;
put 'SzgpLFdpfk8rTCpIS0ZpeTZ7MDJHYnNreCpeNDx+SD4qSjxjZj1ZajRlUyx3VVo3ZUtxbVF5ITJ1V11hdXZfIXc6d1pRTFNgcHRveG40bTZ+USFYVmRDaT0oVG15YFNza19uTERQUzZPPWg2OzNtSG1wVEpSMHRDVmQ1ZHk7QVQ9Xi9hSSx9YSZ0alR6STJ4UFs1K0psX28oWUJULEo7PGc2PmUo'@;
put 'bksiW2pKSEpfd2kkdSpsel9Kb31iV3puWzNTLGg9Xmt+PyEpYzJ5d0lHOEpATyQ4YjVhRHd8JWdzLFZQT2AzKzZJKHYoVnRJOUd2MGdyVGdkWlp1JHBJL3Zba19mYjtwSj9OWT5BSltnflRQISw5TSs0bDBnUGRQbkVoO3UzOzE7V356RVJhMH5QPjNqIjd7TjE/QD8uVSIuc1VpYyVVS0xwLkpa'@;
put 'SiFXUF4sUiheeGRLLkRbe25GVlF5IWYiVEN3JTtkYS80TzZyY2cjMH5Je3NdXUA2e0Z9MjBxej5UdGoiPjIvV19bQWs7PktZWmlgK2I1d0V5d2lMckBoejhkKD1vKiVWPzM/dTdRNzpnIUBkIXZGdnAjaVY8I3xaRTJARD5YRmxgUm4jaDU1W2wjMCFHIzYuQyV3MixGeXFzZl0mIzdadG56ei9P'@;
put 'ZDowWmJ7bHVOO1NzZEd0NG0mVGtPVXpKJV0uIVJAVVcmQio+JTRmYTVOL01eQ283eXI5I0spNihPLjtRJl5JYjEvZUtnKEMvVmYuYXJ3NWBlYVsuNiRTdFFHcytYWENqSGJVQnREQnlHOlc5I1Y1VWojV1khamI4NXpDMU8jbTNLLnJaSktuSCF0ZUAyQyVORyRRXypHOnc6PCtVOHg8S2lLcURH'@;
put 'LF95NEIsTnRJODFfUzhQbyxCdDwwRVFOZSImeSxwe1BfXWVWeSVbYHIlcnkrOU0pQ3FZVVRERXh9K2NgUXRWY3pmPXFELEdfRC96RTA6SmZ4O15PRGNEMU9Ae0YkdyIqbFJII0RlUFMmV0A+ailNJm17TCJYKHZEfislfHdMR2IsNTxMWEw4fHN9STliSlJ1SjkoXlJOVF1AVXxPLytXKjw8JXpN'@;
put 'SEBuL0opfFgzWil2NnY4PCpyM3FbT1RYOHhfTzhNZykvSlBJaTF8ZzxEQEkiPVRjNFNVcz89b35iXSpiXVtzKHxuLGRfeU5yYzlCUTl0LyI0T0U8R2ZWczY2eX1HLEExKHxNZntaciFjUWt5aihae1RXP31IdHR6TH1BLjZgOS5WRzRYaTBjQlBhYXcwTjlgLmtHcTFoKjwrQCo4Y2l9ekprdzQr'@;
put 'IU07X09KN0l9SmlFbWlOcCMhRjV7LyNXXyxvM3pEWDRffDN9XiErKXNOQlBbS0ppc1Yyfl9hI1ZHRD02dz9jK1ZpMkdkXUZsYGhaeHRXREx0MSN+JCxnN0Y9T19XfHAyPDkvbD9Ad0x7VjV+fWlsMFVTVX5DY0l+WTR8Wi5oUG08OXV6N0lkIkhQcSJkc3JCX0UveC9SOUIlRj8lLHxbU2QlRElV'@;
put 'RER6O3w3YHo4WDlfflFdZDlxWEVxcUdgIlFTWEhvSSpORitiVVYybXxESyp5QGh5Q1ZTMkN0bHAkUllsIiI/NVdER2UscnwsZGgyL0gld0NpVTZnalVsO3xTY2BNM1BNaW8sWFtMZGY/JmUxfHcjRVg3T2FfLyYvUkZLTyheWCpGQWhmaHBHNnU8e2RzKVR5TV04NWVacEgxc3dhTWJYLlVYP3Zu'@;
put 'PWN8RyZoPWN1UEddZ3F6V15iU1BiI1J4a2UiYy84aDx8XWpmOFFRfT1KKzdvR0pHdGU9W0doa2pYYFtAVmEoOT91bkFjMWhuLnMoczMvYFAlKkVpIyxaRjVyTlp6WGpZayJFcXpKKHxyXVZvdzBeSSZTI3g+TXRFcVtAUVtGYmcoRUdaTW9gRUA8NitrZHFqVXArXlk8MXVlZGtxVUZ5UD8zeG5q'@;
put 'SD13SDdCMEUzYDZ0aGY5bD5EPFpEPVRdITdYIjw8dTNDVSJmfnx7dztvTV5RJFpzSk1YOHtha0peVXwsT0ZXbUB8bktIIncpVV5CIUpOKjc0U2B3ejFqUkdNZzNydT5xO0lNUF1xdTF8eEQ/WWdrLHF3KFRIW29xRjpgZExme1BfWDFAI25sfWN7PUcrcDY0U0U1NiFgMzUuLCpfS31wQlFReTI4'@;
put 'KHl6YmUuRHdkLntOaW10TVchZTp7I1AxUTg9JGNNXU04OTVJT0t5bDVgXkYkU2MzNz56QnpNVzNyVzRRJVJaKD0kUXl4bmtqOlN8IVglfTE7N0ptN2A5LzFiUTlmMkEiQUYwW0xgJGFTK19yZyt+TUhGbkZLNTV6U1lzOSFqX0YydHI2LmA2PEddSSE0KDF3akRvUWpTTiEjVnJuKX05eSt5bV9s'@;
put 'QUV6N2Q5KFp6SnR+aE9gPThfUkBKdl8zR0l7NjBYYG9KJTEhcmh1MnY+cTR3NV9bbiFDVShtRFlVW2BKO2x+cjE1ZGA/XWA1QURfIVFRWzNnSFE2bCE0Y05hOUBafFIvZnc+QmFvaFtse0lQKilAJkM+LDZYOlhuMlcvcGYifjsoRjtwMn5NVEJjbHFAKGFrZDYxIUlEW3R0Pi9mcHlsdyg4byld'@;
put 'YG87e0RRZTNMayhENzJfXypzLl87T3VlLDQ+eG9VeVZIPStqQkksJHc0czdzbSZBaSVAU2teMFs/MXRJIjQlVEJAdDF5SkE0X0h0X3NvQz9HeCk1Wjh9Nkk7QWtSWXM5IToheTg1RHZtQz9VUD83NWRab3xEP2leOUR8THZ6fFIsODZqJjQqaWUuPWR2W2c0QzBhc1puMG4rQiNFVjhdMG1IWEw2'@;
put 'XkEkI2UpQEAxTF4reChhcWJoUmNTQVdbLHlrZmlBWmorVDhieHZTVjRBI34xRkZIez44YlMwfT89X3Yzc2ouMTglPyQpdmtaTnB8azhlaSlJImVEL01SOUFOWn1OV1NIeGlyK3VMO1FAXzZmfXBqNXssPXReaWZoUzc2M1N8OSR1QyhkXTlzJSZjPXM9R3J4a35XWm4xcH5NKDUqdjdJdVYvUjxx'@;
put 'NVRfPmVnTEE1MHw9XntHZDphJG8wN1BzR25vbzYzT1BFYjp5I287SVtZWXU/Mjx8a11pUm9lSj1nXShYKVRoU0FQc202dWM8N0MySmJIeWV+NTBkSG0xdj1XVmRBNVI/cUs2NlsqMmtpS3tuZipdWCpQRHouXndyQ3QsfTBrZ0dsOng/eyw4NUZUNFNRUGZbOGEhXyRlKUZYaTFrNFM3R011L3Is'@;
put 'SF54ZWViYjF9SHtuWDduZC9sMGRlV2d+W3R8fGBMWy9kXl18QzssZmlkLFdDVHdHfEcsb2d8V2UzS3NeXjN1KDpNbCJELlRoQ31gfCwqWF1zWSRZPSZhJmBkeUxuLzZTZDxlI35rY0lkOVdtUGN1NSt7KlU8OnFmbDAyQ2A7fGhDQ0xCQXU3fm8kWTl3VCFUL35LSHtORS47bHxxb05WMXt4dmRQ'@;
put 'JD93IVJYcC8sPyw5SC4lbTgjbyo/N3N3ancuUUFgJGsmcWp4dUpRako1Lj5IMHhLOHR9PFImaDlYT35kWVkwPzN1QzRfKXRqUGM3SUt+Uk0zVDoqeU01djFiU3syKSN4WnQwPyNDR0I6eWR1P31eVyFsY3ZebileIXopIXAvWE92M2RYa1RRajgwQSwmWGA7eEU5ZzUvZlM8dndSY2ZwJUMze14z'@;
put 'TmlfOHlLL0plfkosTkM1RXlURHIrUk1KdGdWKUUqRTB3VFZSKDJbOnNxUXB0PTRuflkzIWpPTHIwNnVlRClYaTMpZVVIYFdRXV10c1ZpcGQ7IWN0ak8mVFE4OyRKbUpgRUEiXSI2P050MSxML1o6aHtDQGQxSyNdYmx5OjY8fnk4cTNrT057VG5zJlJ7dCpwW31pbkYsM14xeHxGaSJaNTwuW0Fy'@;
put 'Y2RSNnl1fDQuT058PkQ0fS8uTnxDLFJDW0FuLj9nXUpAZiRCTTVZTEs5UmBvRkosNVVJX0kyQmcyKCh7SztWTGNwM0UjXys6ciIhVjg4NnxoNFEiPSZRa1Y5KDhAXlJPY3tXUU1JIkZnXW8xQTJmTGc9eDNOKD5jTn4reEVHdXBzelsuO0VqZz9Ec2t1ZXkxJnBlKzdiaDAsQ1MsbDs2dn0kb1VQ'@;
put 'ay4zUTMld2B1O0JIOkdLRVNPS3NBXWg8aXN6OU5uPVZFREcoT1EsRVNbJSVQRjYmNH01eVs9QkpKdzwuRVdXMHlsUDJzMi5DUCtjM2opbHRhdWNsfi9McTZFNHI2ZmtuOUpkM0IuN3VwSjVoNEVjSXc1OGY2c3c4ZHI/cE9iLF03ck4+PVJ2XVFUU3x2WkApYEpwWiM5MjU8SHwrYj9YIj9mdDk1'@;
put 'SjUua1QwPE1jLG5zN1Q7P2AqJitUWGZ2YzAxV0h5VUhRTSsjWVBbUzVATlRkPUJZJixMaXQuMHhZRTE6Slo9VSVuLExrU3p5b3ZycTBQeDNyQXRlLG5rV116JE9ZUngufX59Nl1jPzFbXTErYlRkVnZIeyRqWV5hQzpESEdAeTg7KkAyOzEkP1czP0NqM0FPNkIlbi9uPjFIKH5heCFDZD5DWlhU'@;
put 'ImM4LDEvdUJlMU13c3FlYyw5L3pTKDBnbTd1TjZYPjheMCokRENIQS83dnZQb2RyN0xqR0J7JS9pVGBTKlFwbnJedjlQS3E4M0xYbURVN2t+NChDaV5ZPU0rcCl1L0xjckIwWk4/KGI4dVNPZWg+dFV8anB1UVheRDt5eDokPn51I0Y/aU1td2N0LE8iKTYwWTEyYDtATSJwZXlWfCRGbyx3JnFC'@;
put 'bCNtMTYiW0J1WnJPKS5WRV1CZFsxODpFJHk1an1rLFtudWtQPyFyPTt4eF5zX0hFbXdLazN9JSxPVHFPRm03KytNaFgpUHE9XzdYSDgoXjkxTCJnUTgxPnYzY0RAJDZLOEZJOmdtYD1JSCQ8enRHST9RbHopd1RrSlVuaDoreUBgYkouME9+PENbcEZJenlFWG57PTtNaWg7NlQ6OitgeDMjRmIp'@;
put 'fjVYQkVsZUxdM1tDSWo1WmRxSTMmZU9xdXJ+OnR8Rl8wKkFDfDZbfnElYW1ZRjkyWj5TYHE6dV1UQmdXWHYxPmpNT0FkdyF3RHdgfUleJnQ7KyxsOVM1R2h4SlNJVEpzKVlbZWVaeUlKaSEmS1hmem9kViVDVFhhKyZuYDc7LHc1MSZWVl08Mzk1OzVfSldpSUlVQmVFa2U0U2ciYDl+dng9QlpG'@;
put 'ZDNGNzo7fS94JkNdOW5nTFRPZkBybEdEYXpTfEpwInI+XlR9ZUdIfWciKVc7ekVScnhjVXFQaHtjUF5KVmlIZiIrIj1SQmQkbEZ6Ulc1T3lfMSgxJE44S2BaVSY8czFEZTVScUB3dXwsYmZ8aWMwbSwoMTtMKCFYfFFfLltkaE9hM0lFOCxuKVA4IkFyJVB3PWQ6dGteSW17K3xiKnd3W0ZmYk1J'@;
put 'Z1BjbW41ZlVbX3YocCgxdFtRPHs1R1pqKDYuT2NNTlRxeSRPL2pGeW1UYz5fOkxTUUE/RyQoNTw0eDciI2E2QTxbMGlhfEdGPEdnWlIvcmNsYUtmZWE6RipNT2o1O0JOJGFSPjEsSzEqQ31LaUlgezBPUTkkekNvMlBkaUlUe18uVVVbaC9ddHhUNU9CJVpsdEIhU1dnVSNXTWA/M0E5cEt2ZmVC'@;
put 'U0UpN1F5U1Rsa0lCdUVUeVg+LGNAKCJtOSgleXI2ZkB+cipaXjBuP2F0THFoV2EmKklAPSopWEhTUHtwSV9YXSl2cjY0SFFKdlhLYmUyei99dUZhRCRRayVHKnd9TF9yMlc2ckNfLzdifUJqY2dFVDc1fWUjd1B7bXo1aX5MNmNRL3ZfJFc3PEkjRy9jVUpZIklrO0UqJWZGK31UclRhdGNSX20v'@;
put 'RCxWKklYejBDWWdDY0NgJjZdWE1bWkRnPUJXfExJW0shbmVvUXlbaUUyPjsoTntEJn1yUiM5KDB7ciQ1UXdqZGMxO0xiVUthLE9PYmM7ZEFYbnc0RXpUQzsjS2tPcm9WREBNRmA4P3lFYG9lYF8oZU9NTzwsZjM2S0dZTyYxcHwmdXskKi5ObmhuP0lzfkYjb350PEdffG89W2tpJC5iajRfbHQ4'@;
put 'blBocWU5UTNbPT1IMntaeHNfKz4wWWFgNVA6ZyYsdyouKjNUX3RuRitpLkYmNkNpbVs3RT1HfH0paUAjeyspJEg7WTUpV21ncC9DRjJhZEJbYzRgUUBeTjxYZ1FVJmVMRCxaVkJDPnF2MXFeUGpgVFR2akwoeWpmdVt1Wz5LR2BwaiNHbVVWT3M3UiFFRWd8L1dbQ1k5KUZGKEohTyRaLm4rKGUl'@;
put 'U11tSkhrZHJ2fit1NFVpcmgkaVdILz96TjJpRyliSFheZSlpUjlBeH0zQkhYfWsmOS5wQSJ+Vk5+aWVNJUdURnB9QHBhWFhpNncqTm93X313WjRSUGolUkh9MiRKJTB9c31INT5jdTpUfXQxUVYrO2I5MDlIOVZHRkJUKyghXXA5ITVJM3d6JG82WFU3OTF6KnA2KXE7a11dW2NiaWdQeWtAMFdr'@;
put 'e347d3dKekJAWGA0Pj8iRmFbYitSKDZRYiMkMmBdd3wqZT9oZ1N+KEtgb0hSSSEvfExQcHBrR2x0azl8NjQxLmlQfHUwIU9JJXE3b3Q0eW8ldDU5LDZTZllJMzYkWDh7ZCNGQ1A0REtCKytqSFVVPmtOJDs1VltKOzJ4RV9BX3k1TEg/KUshdSpxWWowN3ZEZyFxQlFmbTZnPUtVTUd8dWQ0U0U4'@;
put 'O1g6PzIiQTEvP01SWkhde15gdjB8fHswPGgvRm0yYl9CMFU2S1trRS5XTl4jT203eD1gJWE1M1kld0ZMIXAwL2NgMWVCYTtEUSt4NjBmJGt2ZSw5TXw9Nig6K1EwLltRQ2trfWNATGJpcDohN0N4UXZVQjElQyxmfD1zezoqK0p2fXBie2UwWFhkS2lQIiY7OEszeTQ6PFJjJk0lOXBQYUJtWWBL'@;
put 'enswXy5YYTZrLmEiMmNIMyw5VmFwPi8rMCppYGxlVDozZGhHclA9d3pNcDx1RC5JS3BgQmg/dUNpaUt7K0tCQyI/ZGBbMk5+RzZHWkVpKV5iLkw1cFUiT1pLMnkmTU9ISmkoQDRHTH4mSjVEL08wWj5kMVldU0xJQDQ2aCo0cnpNQ2Y1fm43YWtfWHgzbDhtL2k8RyprTzxXW2xsMjdgISZebDpF'@;
put 'P1ZjdSFlP2FqcTtNd00vLHZic20iZm5ZSCUkKGZAYmQjMmRoMEZ2eEJicjNoPEJ7STh7NVpZbFEoViRCRCFnIyQ5KH14cFZSPWFTK2wySloqIk51eTc/RT9QS09xYEAqLnBOc0BPYyJVaUtiWXRCcSNNYl0hUU8/LE9oUW4ra3lRRHVzWEI2WjEuVDIjPnhhPyJ4ZGRdLDJ4KDpJbkhzIiRDT3h0'@;
put 'ZV5FWXZkd2cqam40PUY9ZSM4NWI9RiJqTHY6bjJyVjpkREdETSNbbF1SR18ofEQvO1JmRGlCU0dEfiRMMGFdZEYycTZsMkk7amRDJkMsaHpeYXFGYDlNNGlvQHRMJGhrQlssSHM1UXJuXmB6RUVfeCplWElQTz1+alorRyV5alRhYkVzPSZ1P3A7flc4K18kaWU7eUR0STU8QjhJZkVxY0s0UjQ2'@;
put 'czhMMWBWdWB6Rk5xKUhISypsO15mNVNlUVlNSVd1JjxpUTN5b1tOciskc19JUHt4MC9HMz1qO0RlaXF3WntOJEpmVzhUa2E1fHpse0MwV0x9OUgqaClNIUR4K0tJPEtvQXImfUdsekFjRU5Qdzw/TkJPTDAsJEUlTE02dHhGcmguVVVWdmp6Vj9xbz42K2o2Sl1fRyt8XlJATyY4RU5fcHorT1J0'@;
put 'YlQ5ViVmcH5LdVZfcF97enQ1OyVRK0RpI1o9TW9VN0Rxdmt4UHNreERnOFptZG9eI0wmMilOV2gvSFp9JE1jRl5NcENgWCY1RypsOkM2dWt9V0s4T1ZINTYuSShoaml0YF5ycykiW3BxQ3lTU0oxMm8zK0lfLm1CXVsqNHhDNG5CdmpEcFhiISlHcVdyX1o5emFdYEheQiVuIWwreDxkenEobl1K'@;
put 'eXxldld2OyR1K3J4R2V2anorY3o4Z0Y4Q0BiPUl9NmM8bXhVfCN9Un5JZiJiX05APjJ6R3RNYFQyakZoLyQoLHR1cC5RKHRKY0hONHtGJGlPcmQzKU46ZGZJO1l6UU0yPD5TS1FQM10sYCNHakA+a2x6KjNuQWJTKjBGQUZuIm9Ed1E1K3s2SiY3PC9xJH5vJldEIzVGdzdVRGwxeW5MVWw/YiNR'@;
put 'UER3czpQMixsWTglWjE+MC5vXixDdzdQaWQ4Z2FyIjkpbHNjdy5aTyFCYyR6eylUOXMsKyojTCZYLG0/JUNBMl51XyNbWXo2WXw3cF58UXMzSmpLamh7cCM3TVR9bShsL0hlaGJuUTpqdi5QOnkwK0luSFc6N0oiP1RsSkh0QT9KWjZGcWlQS0RQM19QSEE1QDxeMTR6elgvSU5FU35yMmpxZnZO'@;
put 'Z1dwTFhySlJoNnZiSDNeZktpTFV9YzxuSHVuXmN1KipHUUpDd1Y9ZFlVPmJMTmElZ3pbXlIsXzJGK0JfPHZuXTU/fnZQW2AwTy5Ob2FufCtFJSs1fW1rfH5mN2xlNUJ7akxdWSkmVk9gSzk1cTEsa3VQRix8QUVvdGNMYEROSGYwYHJNNF5kWEo6VEVHOHxEciwmNGNsWHdNIndCfVB+UWRuWElu'@;
put 'KVVKL1NjSWxMdUNkcmciNmk9KG5rYWNjYiF6fTQld31feXR8K0JZYy9IOXtdTTM9eD9lKFYkX25IeShMMkp9QUVIfFZtWDA9b31ba2cvQElGaURocHB0KDBbQXtnJUBVLGJUOyswU09yR2oocWVFYDJyR2BdPFd8ak1gSW1SUlEwXiQ+Kk1KbSNZI3B+NC4mWzhKJGFFL0xlKkZAXWNRajxOayhi'@;
put 'O3A7K2t3eHFIU2IrTHFBK2RKPXxkPVBjJWNUdTlJLGNaK1A0RX16WXJtQiQsT0AlPGo/QilleCh4W1h5PCNMQUFrTVB+MjpVeHxCXXpgQzFFPkchaCE1aDRRRDc5ViYqSXc9ISJgSnxKVDVHITtEYywrYGhhc0EpRl5TOzIiaz5RfnRMd0MlYWc/Jk5jTHZVUl1xfl1pU2lsWX1SK04rMlFGUTI4'@;
put 'SXNbTmclcCo8IXNeUGQxTHtqc2o+MWNjajVSZFh6aixkJkdzRDYhRkI0RTVPbTMxcVZpbmwjZy46KlchbkN9QjJXSl5ZblhmZUZwYnpmbGU0bkYiLFtmOXEiS09nNDBkOGd3Yn1IbjdmWSlnbURZM308UF9yTCk5dmpaWTUyKG9iP2JnNGFlKGQ6SmpGWi9ualkvcVFFPURZbHpAX1pUIj0rUjxu'@;
put 'eG5rZH5RXUQzTiZUe1VyTXoye24qIVIvKCViSDgjXyJLYmA7cz9dfD8qXkpSWm9CTEoxJUo1NjEjP2glWiJAVEFfUDA5NjlCeXtDITByQmBeeWRRV2xteTRyXS95YSxLTyQrT0EwdGx8TEwhWX1JXS9FeEJ9R0tBcWVrLExxYH13X3NXfVM+IUslIXxmWTE3fHlnOH1Wcj1abSQ+bUlsUXc2JCtz'@;
put 'Um5VMltmNnJhYSV+d0ZvdUBlOGwyZX5uXl52WFt0SiUsTSQ/a2t2d3VjOGJAZzd1SCN0dl0wW0JgP2JjeCQlQ2Y+OWpuSjNXfldvN0RTdm9tVlhVS0skUkgkRVRIdSEhKCN4cjsqSFBuOVAjeDQxXWJPQ0Q5WStiZmRWfkw6YD5Vd0ltUnQsTmx9KE12WShnam4xKVQ/ZGAuYCh4PVdtfD8+YGF4'@;
put 'Y11RPXNRYGNDcypEUjZ+TGBhR2MqTSRENW4wQEVRLzJNV25wcW5mXyNKOjlNVytRYVdqY2J5Rj0jL2F2dU9ffi8yREEsR005JC96PXA7MClRQzl3KWlRKj9mfX54X2suck5yY3c8c3libXFvK3FYV1tKPDl5dDhrVmp6P2NHUDJiVnApek86cUBMRi4rMT42P0svOnsmZzRkOmdgUn1JdUB6a0xL'@;
put 'NDtTV2d3LEhOV21RZWdOb2pvMWpmelJRUjpxPFp8QUZCRVs+L3J2NjNzXmY9TEwsQk9BcTdTPUYkdGBAai5GKTBrIUI1TnhpKW1lKHsrJjgwPkFnVF4oSDNFKFFWKDRMVH1EekhzIkYsdEw1VjpIeyxPQFcrZmJkNCk7M0BBWmxIcTJLP2N+KlteZ0YyeUA+MTZBYmdiKTFCSSVseGdAaU1qN1Ym'@;
put 'N1lWdzpVRWNLYnd5b08xe19DO0xXT28ieyJqZHMwe0RHZF4uQkg+RE1Va3hCLGshJVgyOG95a0cpSyl2K15Zd1V3bns+KmY+QnVMRWhuZ0RJSj92U3pHK2M0bjRyUUV+KDRvQk5hR2tLSGwrQlNQZTZbeTg+NjJEWnRNV1RnL3JUdyxuLlosdys2cDsvdnZ2Xzp9UGFNL04lMj1AJFJUb2hEQmlD'@;
put 'YE5RKikrVyVzQHsmX1d9Pj1mYlR6cD17bkIqe0swbk1eeG1hVWVSY3pJKXJxPXs9MXFMWUpqeDd9ez9BYSNscmBKUWc7bTo3TXReW0decDs7dE5IUU5VRyp0c2lvUihZfXpkVFJnZFs1dStad05OYF1WKDNfXk89R2FMcCx5Tm5oOXtoRHxLaUlFSWAyZnVLRUwwKGZmcyVndnxqUj5PbThYRiVo'@;
put 'RTxgLCRyNkVUciZSVUlEP3R3eVhwVzhuaUAsc0xRcCMvezY7JDN8TGpPO3MyQ0xmJm8hP2hyOzhvSUdzVkJoZWU1V30+aFdAX2EwJlp7aHB8JGtTWFN9ZHdPfn1USi9Qd3VJRyJ7Z3UxWkR4Kz9+OU5za0tjfWxSSFhLSHZyYzkjSVU9fntiPjA/TXhJOzFBMUxjR2YxIU4ifFN9c000dHNjfFg+'@;
put 'SExKOix0Kl40b2ttIiEvbGFUMyIxITA1KWxQUGBMb3g7eUhhflI8PSNPQlhZYj4kPjRgWUtrKlR7V09DJWNSe0g/WklRayFWV19tbGlhWzYsKGMwO3ZVc0o9aXdAbChQImg6R1k8QXNuNUphQSZEZGt2X2IjflcxWXI0fHMvRTVuSXc6XyE1dzEpPWZdeDQySH1edDJaMzJbMmVXN3lqdWN6Y092'@;
put 'LkJyVm5PKjlZayxZXWhrWzZDZSgrOjVYUFhSTl8+eH4rLCM1TVU/MUclTF9xd3lwXis6YyQqQ3p2ZWIxbnZVTU9JMXMudlNvIWY9PF5jaVJ8QEpwN2RsSnRMdDFYQzYrNEc7LjZUKXxULjdSdThmeElCPDo4JVszI3I/eEI8JV5zY2tWU3hNJnVsO2RpQWV7KyhrJk1LISNVa0tJcHdFXXFNW3VU'@;
put 'fTBBVjoySEpsZEk2Q0xbTU9gV3hwX1Qvbj5uODdOW3hee1s+ZUdXMS5bN1U5TjU9az1CdXp0fV4yOjBxLFtkJGA2Kl9qLFQ4dlRKcTt0TCYkVk5hJklNaThWbzh9JEwqU1RwSEllRHwoXVoqU2dxIyYsO3EyZXRabz9rISJBditkWTZWIlRVbX5CZFlAMkRPPyFdSmNMYXt7ZE8lP3p9KXx6KkI4'@;
put 'NldiUX1mQ2MpIVhtMjNlU0ByKUVSRFE7YiNJPzEzU21Jb00wd2JHS20+SlVZUGhEfUMvIls4ZXF5ZF1Qb2BRVXR5VW99Zz0ifGMhX1pmR2lUQFhWXk1+XUY1OUErKSEoT2xoRDFnM08+b1creGpuQlBFJD06PD1nMT4+Wz1qWnpAW3NGSSF2UTU0RWo8STFCN1FKPG15ISJYbWNETkEpYF1YeyZ9'@;
put 'VmVmbjxKU1EsOz1QLE1eVjsrWzVqK0ZfPVh2YUNHZHw7JDNDQ3VIbFUqP2UodE9ZP3gyVCsyN1A/bWxoaTRTL2p2YkgrST0lYSxHcyI/RSxidmsjOWQmR1Q8RHA5c2pkUXsiW154YmVwc0BZdlQ4TWR1VVF2dmluRkklOVk/WHd5JCV6I2ArNWdRRG5gNC50Y09iYCJoOkdBLGddO1AmIXdmM0ol'@;
put 'On4jbmgmaiVtelZBN2MsaVopZDt9N29ALHpKZEM6Rn5OejpTQ1B6UTk0aTR+ZTQpZVssOklbN3J5OixQYWk/U0tqfE45TXNWYkBKPyhZZ1dBNDZgXWtgMytkQCZpWyNgTE99cDVbRkkhVy5uXkArO3phaXd7Yl1gUnVnW2wuQUFAWzFeazc6JUsxZy9HO3lQYkRdL1BGQFJDLDJzKjNjfk0kVFVa'@;
put 'JkQvV0VkcmxwLyU+e1ZyJHdnQ2RCbGRvLDVeWHZ3YDYjbjUzT19TIzg0JWRUOURnW15HPHtJa1tWT1s9VSYlZEJdNlE4cWUucjAvMURAbiojIzFKT3FZWXRiak9wRDRKbFtIXV45X1cxd1VCe1BoMWZOYSJZPz4saSttPnNmR09pUCsmOnFxdXluTFI5ISM0clVTVSxuZyVUOCE0TEkmWlA/LzFG'@;
put 'L0JoSHEleCxXQGNpIUkmVDxxSGI/NDhbcEp6MD5qeUhIMXhSVmgsSXgwWlJBIU0sME1CcXx3PXs1MjFQPTsxcShEaWhtZHsqT0FEdW1IP2x4aSQzO1Q1SUdyWysoYWkydnFZcWpJIWhuXSU9eV5iayxQVVplZCMxUzI8Uy5iV34/W3FMZlBsdUVHJE4iPTR0KFBjTkRIYCRSS1VOb0h5ejRSR0RW'@;
put 'ejZvYVdxWG48KWZ5bUgwPlgkI1AvVnZ2aEQsaiVkQCFdMihXcy8yPntNO3t3WDFzbikiO3YvMTdsOTEobj1QaUJoSG9MUyV1dlFmdX5Te316JltnSD89ZEspblpeJipbKXJ8dmtrRCFVY0VsMnRJbyU3cSJAUj14YzFSZiljZWYydVV9bGQkKChlSUA3c1lMR1ddeGpXemwqM3xALC9bLGZXZ0My'@;
put 'Y1tIUyJtcyt+RU4mZTxKeU1ZKFU5IjooJXc0S05MYTYzYHZFZG1uN2w6JTVOVDkmZ1d4WEJAcHRUcz5tdzldOGk3UT5nSjhyX0xrZF14NzVIVFoseWhBLENMK3hkXnxwe3FKezIpRmJMSUdlJjApbHd5bnkpIm1CWkdLZ1k4a119UGZNbjBJQ0spaGZtNGUuNzZycSg2RmcyeSxUdCYyW1J2VjZG'@;
put 'aHs3OXxHKjhLJWV3RDAscXt4dltMTT07YiZlQVslckA6QEc9cGRvOSQkLEl7UzFJTitdS0RxVUJEU30yb19zPFVNSDMkQyFhSm9KL1ljOGJ8NXp7T3lsaWEsIilnbXYxeCtBVk5ZXX4yNyQiLkQ8MitJYjo3aVRzWExnOzIjWkQjUCV+Mm1iTlc/cnkxdkFMQyouX3R7aUw+Ukw3bDttMV0/JkA5'@;
put 'X1JfaDMkPnB2e31qYXpwe0k4ZGckJS4qeCVuO2xdaFpmQShbPUJINVZfdCsjd1R+T3F7PExaN1tgK2xWOmF2VFJ1LyMlK2lTMDlMOjYvKkQ8VGtbZjU3MmpCVy5IJUwwZD8zLmRVdDpeY3x1R1hfaVNLb25TLFQpP1NMbWhvYChGNjBYWkpoPXBII006Yjt+dXBwXkkpcG89aXxtYVlpUUpELGBT'@;
put 'PFQkeT5QZ1NDTyNdPHY1NGNWPHc7dUVweHVUZT0mW00lZVBLMmlvMG49OmQmc2RNVEVIIWNOe0gjeTdeeUU8YzJuNXl8O0lDO3FuUlFRfitHTTAkYUZ6UVZbJGJwKGxvYVlqaF8yMiRxS2FZaHw5eUt5a3smd01CR3hkfk9idi9HUiFfZiFTY0hCazNvYW9gbHssVGhiUmBRYDxVLGM4SlFdVGlz'@;
put 'NDlyaGhAPztPLCsmWUBgNiNTcVdLI1s5NGthYmo1fndqL3R4WV1oKF9eNWJBaklzJk5TaCtERGE6bX5xWW1dTU5wW1hqRC9reWgjO0JMU3pGTipHTTYvei8jPD17WyQ4bH1ZOldUMTNNQDREaiRvbWNOWmQma1dQVTE+P2M0YyI+ZCRhMD85Sj44NShYU0l2QXUubXNUUlU4dUFKUzpBQGNqY3h9'@;
put 'OS5pb21wfm4qKnhsIyFuWl9FOWNaQUI/WDU7TW1UUlAlTyRwJiRvXy9bTGxoPVdTRz1EN21wJXRUIVdZdzFdRWxxck0wZ1kmUzI5SV5FIXhWUC5NPShXbUVDLklqSX5EPmZefVsoSjJva1Vte1ojNGY1QD9DZzorMmBZNnEmPyU7e3Z5YHtHP0YlPkFTOl9GYVkjNWA5T2BROyppYmJoY2BqW3M4'@;
put 'fEAmUSglUWt+bkB4fCwxOSUsNH1kW0xJWThzakNgRGdQbEpBZ1tZUTQrbW00Ynw8fVMkbWY8SUVXTkMoSUxgUnklNk0sfiwlLkIoKXJKXXoodTRJJWM8UCU/ZENfVCZ4dX02RChGUyxXcCRiZUJqSmVweCE0M25EYUwuPUp6U1QpQHxZKW5pPj4iM0t3VFppPHZ1Xk5nYShQRGJVNlkiPVZafG1u'@;
put 'e204fVJWP3w5Xl9ETUcsNk4sbDRCQU5Hdj8rKUtIKjdjaVV7Y1JwMHFXe01NdyhQK147I1R8elY+MUh6fDRgTXlvIjZrK2BORSk8b2dEVn44OS8rTVIyV0Y+JTttWkkkODxRTW9RMnk5SCwiTE9QXituTCJUTGNlPWImWV8pVzxTUWQ/Lm91KHRuViFKMEpTcD98NmZMSzJuIjoxUEB9Km48Ynho'@;
put 'c3dhW3JyflVDay8+eHplXm44KF49aG5SeTt4c21EYGsvMj9uKUJCdDpEWFE8WCt2bVhDOmFNcGJ2TV5OSER0eEJudGRyVl1SNUlrI1UselFNQn1BeTdGbnFgS0s5YTIxTjpSQUxqOEBmfj4le0VpPW9jOVNlaURTPGhhYjpLWjZEMiFuSV1ALmleI3lsR0tzNzdRPWciRSw6JlVAU2cvX0NOfixf'@;
put 'OVlJViIoXUk2ZkRKcTokfFdYPC8kZmg6KFFLaURKMFdlKSM/MlorKWU7KG5UImU6JTQjZSVsKFohbUgoYlhSdD9+Kzd1OSk8O0hgU2I3ay97cUQ1emc3ZjBKWzxwVEZ4bUh7Q2l2enl7dm88YCxDOWtQIlB5OGpIUT58KztsPTgrSUo5Uy9HSCVEP0B9NWhddHRWTVk1cTw9Y0dpYGk3fmUyT3d2'@;
put 'UUQ7W1YxdixPPUYyMmpRN2poQk41MnB4W31WM34uLGEldDpqOnwvXXMqJClGTHQ7VmIvcHp6NjkwdVdXMDFrVyoob2luKGlCdlo4fWQ/Tjx7JllWV3tDTjV5IzZnfHErWEdFIW5yfnJlNXVUNEE9Tm8iOyh8e1RdTnBANl06cz9GQ2lgMGo+dSZxTEdSIUtoLGBPe09iSFRrdkRse0J0NCk+LEpa'@;
put 'ekA8cm44d2JDfjheTS5eQH5oKUg6aUZPa0RMT0lWa1ZdVE8kQyFlLkkuVDx2KWVlV1ByJFYsVGlfdWJyK1ZCS1BPMkZ5TXs1X1hoTnssaCJOdEM4Q2wsP0s+OjtQISQwRzEuNHZyUDxPSCspfjRiSkVxLmI7WkNYb04iIkNOTiwydz8uMCtMNzdOQkdaaSl+VFE+W054XWpQfCEkYzhsPDxMUzIj'@;
put 'XlhxSTd0PGpERGA1Q01KSF1XKXEyWkNJcGtVL3dbQSl8I24+Vz5NOFRwMUVeQiQ3X3dSO1ZEQC9WRUlIQ3xSI0I+KktNUz9PeXhReFMoTTkxfGFAJChibFcqNXZ0KEI+R10lfkVBfWJlPk9Wc3cwdzpJOm9UdXoiV0R4SmBzaUUhP1dQK0R2Wj42RWI3KHxjQ3x3ZEZDW1tiWV9ITyxqT2tvdE9x'@;
put 'dTFYWyJpZSVkRzsydT5reitxbEJvVlI+WW1fT1k4Q0xJKGUxM0UmYDImP24vNTVpOitdUllnSWdlbGtNb2FnVHd+a1tzP0wyNm9+clhibzE/I3VhSyZvXkt5Lkh6VkNQdXB3VXxiZSE+T0hHL3BveCRlZGNBJVZoZitfOCokKztddldRIiF0ZExJampUVHFYWktiViUpSTxIdUJaaHl+fHVLX2tT'@;
put 'ZUVmUDEwSnZYc1deZElnfFhUflMmVCxKJH4qRnBKOTFQU0xdREwqWzgsMGYlRWZlNmZ1enRRdyw0QkJBKjtyRGNaMVE1QCI+SCQ8JGdVeldUdExNOlQ2YiJzKWJfM0VTb3dkVDY8X3IyQFlyfCJwe1c4OG4qOVclZCxbYCYxez1KZjRuUlVkI3EicjdLbUxyKyomYEBTKjcqWHgqdSF0WGhtLjdG'@;
put 'UnR8fkxEJldvcEAue0UwNigqXzBOKThYb1hWXyQ8dz1AS3E7Wml1dyZsPnBTNj84KH43KkZJeSw8Vm1qPzIiV3h0dl8+Ikk+JlUuVV56WmsoUThFbzB2TnJkey5yJStPLFtBND40XyQ6MWddVldXeWlJXj1rY2YoP2JuNFI3TXwpdX5hRExrTDF3THhqRz1BWkhBQX5AJTVmPD5ab3xhd1Muazw5'@;
put 'Qlc7XncvJG5jTzRNX08zaUp8X148K01xdUYhY3djMTQ5JCMuQHxtSW51dmxTYCFOSjxoY2tRbmZAbmYpPSVaaVswVyk2PCNdSFRWMSxwW08wVG9KXmlPeXtYdzpJJCUxIX16QyZfWSRQfiV8Pk5PXjNBUWBxQTl1JVFVLGNoQ0gkUmVAO2k0LEB9ME5jWmJjcWtoXlAlKDBvWTk2U0ZLXTF7MFh6'@;
put 'VFIlKXROW3ZNViljQUB1dXgmeFdRZmU1JE14b2FIPUhhcS9eNkIlV2l3W3FjJnU1Xz8pUE1TRyl6TiUmITpgcGg+WDhUeXlffEU4NEZnYHZ4Snd1LmEkWz9ATnw7bl4xVG8rflRAS2R4aiE8QygzPSM6L08kOEJZO2IrUUk8WzhlNVdPRFcwdzdTeFVyNHpbJWtaMU56YHghZjFhNTNHVEtqLGlQ'@;
put 'TSRvLD87U2JfQj5Sb1JKQDA+XzpXdUc6a3l9TlEsSmMwPVNNWSZ3Z1sxRy54ZU1FbEJQXVcxfGBbWz9VXj9CT1FCfHU1UHUzNm9PKkhiI2F4OmB9TU5lN1A3aENje01IaEZzcX53Sk00IntPYX5iLE9SITJaRX5xKUwrTX01dXxzRjt0XnB0RVVDPztYKThwOz9ISzcmeSxpTiRnN0IqVmFGN3d6'@;
put 'OGRfV2BNXldBUSYybU1LV2FZVF4hKDIsLHR6Z1toOUREU1dUQzdXdGhMVjZRN2kmKiZLK0VHKGcjYl1zYkxCXiZCWjRDPDlNUnxvPlgpT3QrMGhFXXQ6MUtvXShvVVkofGA4LDtxeywmczxDVFp2MSVlS1tWJDIyc10sMGNCakRfLEMqSClnen5TWHJEV0RBY3xLPVt7b2FxUjR6YWI/UF1xIktk'@;
put 'Z3Y9P0l3OVRxKEVXSTo8QjJUPz4sVT5xNjd0RGUmW142R1tCY1FhUSErUmtDZzBhSkpXKkNQfDh6byo2MGNae0x5cVBXOyR2bEtbfXlUeXdNeWIqdEI2blN8RTYvWVpMeHs5KyQrNDwzWVpNczxCPEk3XXk4KyhIYDlQT1t7Qy8xIihXbmtlXnJdYERvJkZ8WDZPVyZPOytgQ3YiPFZhOSY4SV0m'@;
put 'UkxLcD5ZUC9YVy42VyZVYGcjVEpPTjZaUlRQMUpAT1ImTDd8bTQhb2NbZGN0eFEjKEdZWFQyVVouUyxCUlNgUGZsYHhmcmgiZD1XQXBeNlE2WE8rKCt2O2xKOSZDQz9iTjYuV01wLkBEVkd8UyNxa3kzeipzTFdbZ2xNIX1tQ1FPXk1pUFs2SFF7RVhueGtrJFk9XWxFY1JeczlHaGg0Zmo0JU81'@;
put 'PCxCV1FII1EwUHA9UVtvMENkKHxqUlZnKHY1KG04PGN1WCJRNEV1JUpwM3NMaHE2UH0oQUFJdF1eejYzdVtLUE90XS8+ciREfU1ffFo6SE55KTF0ND9KRz50QDxEcz4sUmchPjBdQ3dxMl0jLFpqLHEpQSFpTT0qU1QycCNUbFspW1tHIVk+Q156KH5ERXhyYn4zOGohfTlJcW1sfVpaTGVlfXRZ'@;
put 'NTp+b1Mre3VfYzYuN1AqPW4oYGJ6O3wjRDFIQWFEP308dkRSWXM3OmpaeiVFcz5+Z0deV2xKYTBlYCFaWm9SfD8lRXN7V2kvXVo+L0MmVTNIRmFpfjs6ZG1sciRSIkNwJG5sciR2d11jYyxFYEolSWFNTU5tUUBkVS9zK0NjZXM1XW01fGhkUiwodWlMJHI6PSMjRnhaMkpJd2RPP1tLflZwaTVE'@;
put 'RTYrX0lMQkh3cVdhTS9obnxSVVJsfldfRSlNNCsiRjE5RTZ0MU4pS0VsKzwxeyQiSVQyYmpVZiJpUFYqTDM4S04heUVSMnBuWyNIa14iUDwpfElVWW58L2NmKGw9JVtQIV9sX1VYTUN+cXEyPGs3cXEoPmQpTDVRRVYheENnQnc4YjZoKStVaH0xaHQrL3A3bHpNe2RmMCVidGk4Y1lfM14mOmUv'@;
put 'bkhvJG1QN1BpKHg6NGkqclBfcC5rQytYMH5icjIkI2pTR1o7bSo9fCV7SDlyTV93N05NNFUlRyhwLGg3QjVlRFVHXlhJbnU/I3trYTVJJWhnRnFVMFhXK3kmL1JnYmlhbFZadWN5USR8YTchMEZHKlB2Zno/PVFoPGlpOV5nWH0qVThEaVdValsjJkUmd3Q1JHlydWdjWVRFSjF6eE1zTz9ERElQ'@;
put 'XnoxMGlEJFd3UTdAZE1WfHhodXhFazFkNVgqOHdTZF02ZXpWZlclNlBIdFtGXVtXVyU7N282SDgzb2hueE1ZVE5sMWkrR3lucyxXKF81b3woOmpDaT5HNWh2Qj1+USsofVQkLnA+eix8dCtRS1JLK0lYTGY8X19SfHI+WkRAeDV1XVA0RyxZQClFIjp8ZU9XYXZfPW1COUNGezFJW1AhWlhBciUw'@;
put 'SmNNVHJ1YiVDMlhGQy5SY3NuTUxqYiY/dD5EalZETTZ2U11XeDh+d2QyLFJtUkBTS35gU1RpMG5OPF1ddHl9QkNWQnpJRFRCU29VJiZacV1JVkhiVC84dmc1TDt5bm1xKH5KPWFVUUFue25YZ0dsRDZfR2JuZGc5eyxmayIoRWNwckEsWkpqUy44UT1TRkchd1lAN1JMWl5aQ0Q7NC5EPzBOUHM2'@;
put 'JTQwXTJqS29PUCVkPTlGbCtgJF9TWGBQKX5jekE0a1ZtfjBZfUVwfS59e0QlUV8rNnJpTV9uKVg8WjltOF8lZk9xXWVjRzxuUD4weWRSZmJ9MjhoWyhEcnpuWTB8WVZETTxaX2VTK31uOWo8c1VeIVpkeDl4Q0lke3dDSS8vLmAyb2AlOXc8O0llSyZ3NGghfTJeU2FwfFdiNyVfR0E/b2IhYUok'@;
put 'Qi46ZTN7TiF5JkBsTUBUYT9ENzhIaXlCc0t5a1dCZF9tcDVfYjl+STsoTUAiblNNTFhgS2U1Rj8qbihNNEooXXp1L244JCNobHRhJW8lODd2TjkvTX5HS2d5RDxlUkBuQChyM25VQ0F4KyYlSG1zUCg2KzJoZTleMWpOQnVbInE2YlZqSXtIOiJ+WkJMNixQW2RfbEJOYWUqc2gqQUw0dGA8e28l'@;
put 'MnRGc3RNcThpYjNKQjlOSUNLTXpDMTdAb2RQJUV3Pj0iZGlpfF8/NHAvbDVjeHImTlV8OCojbSxec0YqcDxjLHRTKVh0IkxnantlS2FyeD9sP3ZPKTkuNUsiXWVbRGFPT1cwQXxdLGdtTnteUlQvb3dIT2V+Qi9xPUx8YX1dWVdFTUldZG10M0E/ZixGVz5FTGIpcSEmK2tSZ3o5fTNNOm03MV45'@;
put 'WnAjVCJdKj1dMzVxZk94YkhAaks7UTNXfSx0ZTNQQHpTWk5YPEt5d2NrdTJUUmxpRmNjL1klWEBeTCFlW2g1S1U4T0drT1FuJC52cnFdMCxLWTRzSipDVUhLYjxmR3NxV1hrYkEudU9EQldTO2pPeHEoR0BHJGdtKWx0Ql8kJH59fX1UVWRvan1vKSFZNEMxM3JZI2d+PGQxVXFGdzNoMXJuMiZo'@;
put 'dEFiXVZMPz9QfjgwZTg6KnVCUFo5LGQ6JHM/fCYyUFYsRXQvJihlQT4ibSYhLmFTWSJdJDpxYn5xXlZkTWtXeVtRRX5HdDBSQXZDXzI7KUt7NTx2dzovUHpFSDAmc1F2Okw8dFZtK0EzOy9RWG9ieElEQ31bdUxFRnA0SUlSUC5SUWRJYXcufi4yZUBjPyFeZ3BJMVB8MStaTXslSTFYKy5JcCFG'@;
put 'dFp0Ql1LSlF8KkRNQnBkJWc1PnhJWUp7ZiV0V21fcGNMcUg3aldSdHt5KEY0LFY9JS53JHkmREtPYEVEJls4VnNab1ZAYTQse3Ijb0YvSX1Uemg+fDYoP2JjJnZgc2VTP20xfTMlKy9EJlpxQVsyeWczMjghcVUyL11NNDMsQGQuI3BVOHpuU2duIVFMdShLUW59QzYzbUM1U0FITTEoaTFxSjE8'@;
put 'SSR5UTdoQ0k5Vj9tYWt1YmN9dSJlPWwiREhfWUdUP2tVOyhXSmRLVlJoaSVqaHNzVUA5a0xLV0VCdjVqP1RCQVRTeVJXfmVNK3w8fiteYVciNFhyPD9RMk0uenE7c3plfG5gQWVrdVI1XXZ2VzlBa2U5WXx+PHJ8TTZKbiVbXWE8MEc7cXs1SVQjcEhiaylBaVEpSSw5ZGZ7R3xJXlcmSH15Wiws'@;
put 'QyRIcCN7WjJfKC5+SygiNXUqXWoiTmt9WlpIejp6VEE2JjpAfH09Y0VVdjU3T159Mz10UiEvbkxFUWkpWmFYPXZyPHs7ZklOZltiaDlHRz9DM055dCUvbUtDM0slPGV9e2dMRWB9QypyTyxCPjAlNzpXOHQ6WzpnZHlOcHtQPklPe0l7U1VVKzFLaisrRDA5WyExPSI4VSVQZmUsNlkoeEZPUzo+'@;
put 'JV1YZW9VWUs3Jl57Sm0yMTZvR0FTXlI+UHJDbilxUTx1dVB3TiRHSXlFRC5yeHEiW3dKe14jTG8uTkpYUCVIekh5UkNmMGR2PyFYL001ZzJHZVk0XjRdT3k9M3p0ZEZRSFIjLEpvbGR6e2ZTbkdfdFVaeT4vUEY2TG9keDMqc3tGQFsmRUQkN29YJUZwOUVtJjQ6ZC5TR3U5cTlJJE5KYEJbMj4l'@;
put 'JFFxR3FfVUhTczlFdn1qYWJCeCJyVWVMbSFHNl1AbGB5UkZfRjgmWmV0XWBXQEJ+azxsTj8rfDlpOEU8KXRMWSxvKypKbjNkSjJhLzElUzpzSXZ2dmpUSlRqcCx0cGdSOS8jSk1zJTchSXc5a0Emc3pEQjF+K305THt3bllFOis4TmkoUXE0IXswNT40MTRzLEAzdTszOkBXOT9AWFQ7O0oyLjM8'@;
put 'OXxHUXFYW0E6Lzx1KVohb3ZCJnxnR3lUbF02TSJxQXtrMV9fNXFJY05RNWd1eSYzQTtDTlo3Yl1ZTSNXdUt8ZSRIMHN3L1laI2x1bnNST29uP1RGR29OSE5FR0diVVIwezZ+TDNfaH5jfl5waSx1RT1ifUBaISk8XXxLY2tuITt2LmNLPjUrXlp3VlQ2QXNPY2VWZF89Wld2aTkpQERKPm0oMUIs'@;
put 'OCpzMVllJTlnS3IlYkpdSk1rbVNQUVA8L180c1JjdlhfYGdAVkQ3VnZhc0lOeXFtP0ldPGZMLDA/RCJKKG5WT34sPkRgTTZYdSV1cW1pZ3o/XkI4ITRMZUU8RkJgfWtge2pKODIhOUA4aVdRJUh2OV1NbipXa3BreSZIQXxvXUhtSSQ/ekhyW3d9VGV5MVtJYHBOWCZrJGpwVz95OW0rZl0pRX0r'@;
put 'Vn17OTFyNChfZEs9c2U5YzNecTZgK3VeO3J2b2IjUkVVMi96RFpMV0hZPTshalcqW1ZiWHMvQyEjdGtTMX5MKCowbmgke3R3RDp4XzNtdE46dkRaRCJddygpQ1syIShncytRakV+PUlsOEQwc1ZYOjUpcmpEUD5rU1RYM3pkTSR9dSN9JEw+JFhmTGR8KmE6SW49Tk5vYXh3I2FSUTpkZU94KnNb'@;
put 'XnNQMCF5RSttN1csZHA4bi82YjlOcHBzMiJSQkFoXj5GXVU6RTVoTDhfQ113d08sXikzQldbOz0zQ3IlTVlwVFFYTk1rUSZSanwqNl5SZiRxNHd3cjFzVjUjZ2YyTH1SOm9wdzZUfWUuQ0E/W21jfV5kNiVwL2tzUCVUI2tJcSMqPlREZj5oalRfek95eixmSURGWihQOFN7fDl9N2BVTjhXbWAz'@;
put 'cU4xJGx5cERHPCYlX0xLP1h+UGdwc2VteXVSUVpvUzlOflF8YkBuRHJ1Q2peemYlUkhgL1NpLHMyY29FODklNyYwUDleW2dgYElxcyVaMWJqe2g/JkAxc3NpV2RnbmFzXyhjQzhaV0R6UTluKm5WSD1PU0EjaEZwKiFJcGxePGF8MS4lNWVzbShucmNDPkBjMTFJcSx4XjcxO0ZXbntTRG97NFRe'@;
put 'UEMsPF5mdDdjUCFCWFNyW341YyEjVn0laSY2IkBxbyw3OSVlfmBJY1J3NUdTKFc6dWM4YX5hVD0uVSxmQiZpcGU2Yjp0Kjl4P3tiUk9ndWd1WUsrZzomZUJbXzQpcnVDRVE8ZjVodCxoYWhUYUVGQ0hRS2FTblEqZndURTBhISwjMVgkRkpHV3hbbnEzXV1dZngjSVtuMmldVk5hT2FZbChbQ05Y'@;
put 'a0clTD80VD5MZHEjYV9AL19KbWIySUteJEw/SWlsdmNwb2E/P25zNDZuc2lRRT8zaDhXbUd8LFNkUDJze2RrXSpWI195YjZVJSJEPFA3PC9zRkN5JWtnRU1SKmZrfit6THdCRjxdNyh0cjhpen4mNiJKVVNHY0lAMDY4R0Z7akpHPTtdL042YCYwRGR3ZTVvX2dnWTAweiJTJTRJUnF3QEBAd0M2'@;
put 'Y21LZiZKb29UblB6SVplQDp3O29rZ2BIRjU4IUJLOmgob0RHWWFORGh1Kmc4Rz5yWE9DVTJdJUJKP1lCWXBjWURQLmYxK0NVbk9dbFtFTVN9OThbSFB3KHAvcHohOGZlanRbNCNTUnBwYj0wZElAREkhbT57VHxyOyxiXVtrdUYoLDFFWEIjcCI7djhten5lLHFdVzhzJHg2KzhDeF1AQC5vLEZj'@;
put 'a0FVNS9GS3lQXUlXejJ8XjNGVE9kOD1pcz1ZSG0jNyVdN3ghcVhEX3ghcUNnJTl8VjNaaVdfdldWdSU9eSIkazI/UHcoRnQ0SzhUaE5pNkhBdk1ZUy9RO21wVD0mRjMjdV1ndWtZVWlQWjhQQURaO2pMTnIxIWYhTEszVG9RcWFOdl9SWW9ve3FJfXU3PToiVzFNKSFgKkFsYXxWfStne3Y7X2Qm'@;
put 'RDYqYzwyXiVsek8xdzErbkJ0WEdvUF5wX0wjKj0mXTBPNyI4PGRLRzZ9Y3B8R0Q+bltkXVRVeVt7ZnpeamM+W3klMFBOM2wsN2VVS3M5QX5eWl0sKjZiRGl8bUtrSU44flpLZV1kPShUUjlHZDs+JjFJc2VCSzRtbVg9S0JVeHA5S3drUyE2IiJNNCwmemAhJHF8cnNVZzk3dFhHMVkjLz5leT1t'@;
put 'JnQ4Z2VtM1hgMj1mVj8hcnhbOjFvbVUiTGolckNWTkcpJXMrSkY8dmNnfGVZY2tUYz9eYklmVn5QZWpNbWZ1PVlMOCVPOVo7Qy5bYFNaUXMmXmhwI3ksY19zfHUxMXVGKUcsajxuOndifXhab18yTn1MODV0cXBYZ00lc2c7Kj9pVmw0M3c6eW5Ycnd4NFFGe11FfHtndXtFYSY7R3ZfLClfNmF+'@;
put 'bDo3OkA/KTpdP1teaDIqUDQsJXt2LypQRzFtXlR6fi5ldXkpUStJbnwuX207KmI6SmIkUk9dNXouO24sYD9UMiNlI2ZkQCRaVXBnMz46NXFDYnU7LG1QTT06VjNjOk03OylOXXt1Ols0Z1lLPXJQIW9AT10jajs5O1pZVUJPZFg0UT43O3FoW1RwMWx+b1pVXU80REN5IWlQTmErYmRpOXdjRn5s'@;
put 'JTpXLzVJJlVZb29SfkN0TikzQXc1eiE0Qm9vfERRR0YoOn1OI291d3ZdX206aE0/fVpeO2A1byE7RURiZyFLNnp4JFs/fjpZLkBtVSN8MUpmR2U6P1ByUEZJNXFIJE0pOz5VaDliKTE7WTlgL1Q7RUx5fkliLlBfYSRSUWY/P0tTYkphdk8xVkNHRVEyTDcxdTt3dVZjcyVPJXgrM0tnODdLOkMw'@;
put 'JXs6ZnxfRktnV1pRUnc1VVVVRig/cEghPWRbd1hkU05WL2FkdkdGSFBtV2ZLVT4rXT9nL05pTnQ2L1l5QnhSRyIkIjJpcz5zL3RIL1FoaEpFeEEvPjo6W1pbOGdUMThgQUxXazxTNyovMX5QQSUiMllbUDNAOmRZcjc7VyFOVDg2TVA4K3dDZUYhMH5WY1s2ZU51cmQrTGhIfnltOjgzcG9pT1Rj'@;
put 'KDlCeVsqS0Q7S0hdRz07WmVZRH0yWmV3dip3aVd5emoxUkp8bWteTHtHZXB6M1h8fCJNcTlFfDpLaTs4SjNXPyl9eXRbVyVKbiJIO2kwOGYkK01bMXR6PnA6OWZ5MHY2PGlaUVp1Vms6aU5GKz9lfkk3SHwhZjVxez8kQzQvcHNWMGFdZ2R5amBPe2hWNypjOGpbKkBwSTtpRCxyeyQpTip7NVFA'@;
put 'eCluZlUuQSZsUmpsbS5lTU0lc3coaWtAeSlbJWdoV1lALkEmNTEvLFppJGFwZSkxbE4/Z08hY3E8TEReXmZHZTR2TTo8I0dCOUJGTjlGX0V5QDhDbHJlQkxFTVIhWXk4TGZ8THpLRTBkPCJCfEh0QGhQOj5sT3h6JnEiTiMuLH1TenF6UEw8TX1YLDQvKVc7VHs0cHc3S1ZsTHVMX01VeFh9SFdv'@;
put 'bGBhRFAqXlchKUpVNmkmNHFoZVczX25Nayp+cHxzOUs8bV9VO2thXT0qbVM7WilpeFF6Y0hBJl9GOlFCWDZtOWFBOjNnN1BoVjJhOFdbZl80MjZWJFAxVWFZS3FUdCFKOnFbUmpUcS9AfkB5Z2xgc282VzgxPW13ZU10Y25xeD5mIUxeO148PTNsYDpEe1QvUGl5V2YufDR8aXE+d285cXAmJUw/'@;
put 'KG0sI2dWUXJ9ekJAOHF9eiZWfUNmbiRQYntfKjNpbj5rYk1hN2E5eixSKCU+Z0JfNF1bNV92PCxjUnJxZWxAYUNqWXorUiZZXl1jJjE5RytmcCJfYm9JZCllTGBlOVUxJDgkS3pGRHUvWTo7YjtvckNDPEA3cmMsRzBUfT5WKkZgciUyKUl2WW49QXEzKUJqWC9uW2JAYUEsSCVuPDFMS2B9MjBR'@;
put 'ZlNYZ0YpLF9vYDxNY1EoXlsrMDpIdCVMRVVMV2lSJT5nJWY5QUp8eiVaNGJYZHwmM2c9OHJjPT5gZDFVVSRWdWgjMDJCOTsiblUrRlsxeDh+Q2s3IigkRkV8SjpLYEZjbG9vJkQjOzlpMXtKT3p7NFIkQ1ZpQH1sPUJsUXldVWh6e3tSdWpgdnpqRz52S05pe3Q6dD1lPnI0Rz8+NHI0dD9vbHo/'@;
put 'T2pmXkRKOTwkdCp2MSxvV3hOWFcuKV9Xan1UY3MvK1dzUiU9cFRbVy9Lc29ibCY9dkI1RXJyTWBTL2hFPl04OVlyTVR+OnImbDpFTHZCRkhmUnNlY29HZU9eLj88S35IPV1vOWwlXUJJRUJVNVVkaCJ6PjpETEk/WWU+KXUxIWF2KXVuYGRDSUF9UyRUSENYXjtIQ1E3M2h0dV1AXmJNWmZGdltn'@;
put 'MHQ5KX13djwkc3dJXXl8JklpNEo/SjBSOHxQP3IidkclYzwlfFJ8aGUuQCZGcFB0RW9ZPHBodHs/Y2Q0X1QpZ0Z7YDklPnVbfTBzQEQ1aCRLQ293KTNbKX5LL2RsVSNxd0hPekQjfU9QViFhbmAkQ15uISV9OUxCbHBDdV9BL28qT3c1PWxCZkNIPVNoQD9YY11zQi9TcEdSRVssaGc2Wj89LnlE'@;
put 'NCNrUTpAbF1uaHIvbSsqfXVKZlZbIVpyQHw9Zy5DYF1mXmVvaS9IQ0o9QXpkSm07WVdrdWF+YSY+Z2IxVWhQUlcxfjNZJEk8TSRDQkxMYVtgLjYiRH5hNCw0VVZYOFZ7QF1HZVl0cXNVX044VmBRQ0JRcmhMUz9OWzo2MFBsXXJ4IyxDMl1EPE09MVt9OCtVPUlGZH4zJTJJZmZ0VHgzRT1MVi9e'@;
put 'KXhQOzxfbm9HRj1yPmR0cyQxcG8sP1opOCRSPCNSKWpzJWhlPjEwKDZ+aHU0ezRjP3BURDYoLGJRRiZaajEsQV48RFB+bWBvQGpZIjdofC8qbCVsIjovWEpDVDklTFNsVXU1MjtEYSsvJHBBUXdJQTk7b0piWmZ2SUNaPTlhYzUoXWVsbWNTVSxrfX54Yi92OltfcT46YzY0X3NCXiMhXnFxWGBX'@;
put 'MFpxUHw3REhbOz9vaUJoTTovJlhaNGdpL0lpJlB2YDc5PGg4aC4mRyE9VlUvPEM5Nms5KzhnXTFVK3N+XiszOXM8WzNWYmlaPHltPkQoMWY0e3FFVnciaTY4PGAvUz17OlVvRSNBJntANnMmVDNxJlRMXS55RHB1flFBTT1QRjBjZnVOMGQ9TnVCdUZkKX1FMUMvMlJsSVgyP1llMT9ZZVA5N1t6'@;
put 'UlVbOFZSY3kiJW9FPjQ8SWFVKG4me3VSY2RbejdVclFAMU1RJGRoXmJ5ZGY0YCI0JkU8OHNHLCo3WSxudlNnbEZlc3h3RWpEUHp2Pm51JmM2Y1NTKFdTJFAjW1NwcShMOWBDenVeOHFOUExaZDBBeDpOQFl0WVZHYy5UJWY2JndJbEAqWEEpLz88XWhiaDEsdmxWdVVrZyNpOyo2PzN2VHglOEto'@;
put 'ZjQwPXArXnJ7Wl5FOzl3VkNlNlRpblp2YTRnVWxWRTA3b0shV3E4LDhLTXNNfE9Fem5qUi9vPXxWSncjWDUuT1UhOXxOTlNnKCtvczx2OG84ZEpOO0BIUHEwSkpRYX1dJTdEOSZTezZeYm5gRUtYTmYpQGU7Wz5lOksseSRMP143KTZ3bVgrdUdiKGwvSEQjNiYmKklPWjJlKHBodC5+N2ErIWlF'@;
put 'XjpkQjtsZnlTVmV0e2Erb29acE5EOiE5ZElqPExPM1lwa2ZOT2omaytmZDIsNnVvQEFRTVt6dzA2MlU3fFpZQCgzZlZeMHB4bDRuOjN3dz1dc051Q156cXY3YHV4NTNPKXxjZW1GTyNdXU9lISNNQnJgKmI1YG12NDdmQmpeIm5gW1VROF5lKGt3VXRSTyFadzNpbTNLe1pZbEFbQExGdzh9aSoh'@;
put 'c3lFZTQ2clRSaXghMD4peyk7LyJGO0taSzs/Zng3YU07bzN9ezxGZUJxIXoya1phKXBHLGNuJlNLUH52aXxgVlEzWDhkMnlbajs0VEM4MlRRc2FoeyJzeTsza0A5LE02ZCN3KC5kZTR4W2JPTShKRmJ+SX5NOHVlNiZidEhNdEl8dF1CLzJrTyRuSGZnZkdCS0siaTpLKUlLZDRQMmteWkxDe2BL'@;
put 'bUI8Izh2Zl1QajRNS3t3K2Q6RjdNfEhWP245bjxHIX4qUTh6d3JxTCMpKE5sPkZ8MjdlUTZ5NWAhMy9tc29nXUlmYGwzQCQvUkZQMGQ1ZmFFW3Vpb2FlL3M3QEdOK1pNOCljMkc8MnBDKkRXbkFLKlhqcVg4O2ZlPk1yYXBwM3FDMk9TXjA9JHYiOCtPYjxBckdSdUQ0Xl5OSVRJN0pddWYuKT1B'@;
put 'UF14VHRrVjE2dFRgQlIvTjQqJEtHLGw3R2FMQm9bVG9sQStwY24+QEBNPz5vQkk0NnQwc3FReG5xPDpkSjZCJktOX2I+TSVBY3lhKnEydCNkQ0hTQ3s/cnV9aHR3JiVPZ3J+YEhObUZaTHt9OTs/WG5mPEpVYVVeVXAzJjliS3Rra1V0KnZXfUNLVTIsdj10N2kwLjUsI3xUaWhzO259cDtmbVs7'@;
put 'ZDl5K1txWH0ubyV6eGhGOmp5RmZpX1E6bkdRb3h0aEwxLzNRMEdSNF8yP3A7VFU5NFBXOjh3cSRDLkRzfTtqXjlrSVZYWlI3WUI3cyQpRFBYUlBULCtEJjJSRUhOTi45MCMlV349PSRmJjFtOzAse0chZ3BUNEJmPSFCPF84JVFNZkViaXVQKEhjKWZIQX0jYmxEdCw/TT10VztXQiIucVM6S1sr'@;
put 'MVJTK2QqMEV4emBxXnd+aHU0eXQ0Mkp1KnxDJF9pLGldOjRtSHlKdT1bXT1ONU5KR1hLMSxZYlNeYHlxS3hCNSU+dEldNHJjflFkRE5Tc0xwIzhTdmx9Ri9PTTNUNGg1Wi9ESkcyelh6UXBSSmhbaHpwUmZTamFyQl9maDxgM2dhY1RQNC5gW149fWhLUG9DVFooS3cyeEcpJmFDZUZ+NGJxQDR8'@;
put 'fUYseUU2a0AuZFBwYHR+SEp7JWhYWllWZillTSR9QksxUkZkcENkIlU6d195U3g5eXFWNkdoKSgzY3BiVGZMQF97LGVaWy9SQ19TZipAWVZSazVJRnJDWEI/SjZLXzQyYmNQVmU5Rl8lK1dMRSUwUDU8PGBoWkRVcjk8IiZEW0ouKkZZfEowfXJARzh+OyYrYEw7eHdQOjowPT5KQytQTE1vY1VA'@;
put 'Yyg3anl0LzlKT3p3cntQKFZlayRha3JFfCtFcGBrQDpqV2N1ayVSL0BIM2oxJnchNiJOPWFOciwyYjxQNnxjT2x6R09PUVt2LDFhOy4/dWVjLDoySmV+LmsmJWd9Xl4zUUl9QkVdWU0vTmY0WVY6ITl2Wjt6YmZOMjtHUmU0KC5mPigqWmNAb2lXLkk+VChUfEdeWG1paUBKSFt1REY5YSE1JV1N'@;
put 'Z009ImdbLnI/Y1tsRDdbMV4iSVkwMVNdJSoqMkpjVEFsKn19Sk0maX50Xz1EJkJDfk9PRmFrWDxeQ3IyeDhRPUR5RCxvekpRT3M2SU8sWHJ0Wz9wVH5HNEBhRDVzYEY+alE9UmZLSSxaZHM3XUtSPH1rKkgyPWcrLkVdNTU0cDxGPEMwZyk+K1FAO2h5Lyp+aTpSUmkyYmZWQE0iW0koenpCXWwh'@;
put 'I35rOk49YkZ5QjxUXTpOPW5Cekdja3c0U1Q9NDFFTG17aUIybS9UdlBbeTJWPE1rN1ImPDY2cE1CU0hVUUo7eF4+OXYxOCtTakx5UjQxfWBIbVM7U3gmLHBdMlV0QDk4RDFKQ0tCTFlme0RZaFhCNTQ0QFAkK008c0QifCpRdUw4R1ZEYm4sQ2ZrdXNyQCMue0w0SilPWzliZCYiZEpzWHJ8WG0k'@;
put 'JX1LZmhWa3drQzw7bV1nc3hUQDBtSHA4VzhzOCEiLCt8NVQrd2F4V25wS19nS3ZqbkkkJTpdP189JX5HQE0rUWN1PnU5R0xMSVFzWG0/cilTTHpbYEVNe3NPeWlzY0M6UjwlNzglMDB2QlVpeXl8U2Rhe01zLlE2akVyeHZ3IzhLRDx9cDIsP0M5b01MQClkbk5YLjQyO2BWX0BLUXVMdWZ3NV5L'@;
put 'LFBUdUZJPCpZRE9tP31KNzdHeHZFIVA5MDFbV1VpY2h6WCg4TUNXRTdteSFmK1ooVypYZTsmcWY+KnZ7YmREU3gyPUVyVXxuLnBEYntSQS9HMyU3LFhCWCtxNDhzIzRhMEZbb0EwJjkudVE4TTMzbXVYWyltO3p8fXQqfFFIbj5heXp5R2V4TkUwfEA4PEJ2cUBFRl5Qfk5ZQkFUInlKNFgjJkIl'@;
put 'RSlyKW1BSil4XUdUVGY5RiJwQ2tfYW14cz5mTUkmTyhjeGdgJS82RkRqc1tHQ2t3KUg8UlFzbGNZPE9LQV5acDxQRU5dVl4vUSNfR0ZGTjFlc2xSUTtXVGBiQipFbn1yPW1VdC9dIWRYOFdtPypUbUk1QiRZLEIxUXtVKz5JYU94elZrX3YoRHUjb21IQkFKeUpDS1BeZDhkOFREMihvYmR0WU0r'@;
put 'YjpVYms7VjV8cEtgUS8laFQ1WTR0OzImUUorO0VESDc/K2ddZjRuV1YrK1MsczJReTVENjUyLmREMUhxLHxrOipVKWkseXc6aFAufmVMTDI/d040MSVwaHlVanJ6YyVlWTB9KiFkWTB6QFopbGt3M3x5Qis+QndHZXRSYm1wPzcjTixnYz49MChGWWEkVTwhTVtgYmN5JlZaLFR1MHAvQFdeXTcq'@;
put 'dXlAbFE6W0lkZXBhfCM0Ym5XVHdNIXw8PSImJlRtMFhAZ3kjJUB1eDdlNjJ5KUBAMWBEXSw3aTFnKEg1NSN8UD5VdTIpVGx4UkkxMHBUV3xvVSgsNThmbW9geTFJfWRjMG9SQCt6TVIoPyZIfDFyKGBfYytvTkRVVnVDdzg0Q2pHd3xae1QuOj82KXdQRGhHTmwzXU82Rnp9US9VTzNwSHFdfVJ3'@;
put 'bExVN20vOmFRNFAuNU1MeTNvbXZ2RHZLS3l8dzh6fGxBVV0wK3ZvVX1dPHc2Pn1GQ0d6ZyY9bXNWUC4rIWRGZEZJVjhRcnFIa3tUeVVlUjNtNj5NOmBCYzdjMlF6TjBeelpbO0c7OklrO01pY21TI2I1ZDlnN2A9WiQ8d0g7WyUsRTMpblIqcTcpQ1NSNSVHWVdENE41WlsqdX56ZmtSSjh4cTR2'@;
put 'cypjO3BSYVNvaXlCKV5vVD09eCQpYWovO2I3KW1hSV0qOj1nWTk3Qj46YGQmJlNEMlYoW1JQZElOODwzZT14JkNdZmg1aWNham1rdEs6NiFKW1k2L3NIR14hd143K3R6d3FlIld1R05fX0U6SkZsXlt3PzkhdUJdInp3ZEJhKTo3V1dpSVlXakokL2plYGpgXWp8LiJ4WDZ1ZV5WaFE/YUxVKlEi'@;
put 'ZFVTanMjX0Q6JH1EUVB1eFldRl1nezV7T0hjPVVlKHFpO1IxZCRndGtLL0VnNHhoVjcwaH1DcyoiKyZ8bGA4KGJRI3MxeFNrRzA/Z1J9djFZWTNDXUk2dmFubGAwLnZYK3x8S1NhYGVpKGlPQTRkVDttdXc3XW0pL3o/dldubExMSyJiMU9DaiU4MS47IlglNmlzKzsiTzhfUj55SltVYCF9Y0dm'@;
put 'OCJia3sxLkxLbHxkfDIyTk13IzREPjsuL2hdR11AW1trUnA5SyUxQU03aUZIN1JiSm1SJDc+O21wWjUxNlAwQXpwTyldVERAQEBAQ0tHIWBUT3pzSEtUTkdlYmxUQEB9d2lzb2VuIksqNXhKVmdzRmN7UFIlMFk4LkQmRDJPeiNlPTE5LHp1QSxKZnJwOUskOzhnVE1+TzpreVpmImBlKlFyWnIw'@;
put 'KmhIKnx0Mz0scjNBdk0weTVWUXJIOj5dcCRgI0ApTWNrZnBdUzpPe0dSISVgeVhPRWFYUFlhYUdfMHttRjVLK0JnamNFTV11TntHW3p3Rzh8VnQoX01aaW9XRX5vdztUUl1pI3tnQ3dpanZ+XmFaOGR1YT1wXSQmWXgvWEhxYWk2VndAfmNzc0I5TndCKWN3QXVuVyo1ck1yYXcwTmlOUUI2bjFG'@;
put 'NTNGdSNHez5UTF0odVdbU1J3MzJvenkpIyl6bDpraTZnKWlocEd7SCpLXV9GWj5YT0dnRFZwNVpYdj5KPT0qXlBzYXAjelA+dz1adktkY2c2ek1OO1ZHdyZaIUN9eD9MeXxgcGVZOFs3WFgrfjNIQ05sU0RhTVo6ZmRvU21IPEJHXVRFSGp5eXxWNGFpSV1yYzkyIm82b0pyRX4hZippJHwzZSpp'@;
put 'Qn4vZF5vXW9tSXNHdGEjWSFzJk5IcWp2cTNYNjA1WHFLakpyRm1NNigpTT54fHYmPlA9KktdVCFlSm42OyklI1VIZi4vYE9ueC4zTiV9L1VmTzVoLls4PU9fIWV2Pmd9fGBKfUF5VTYwNSg6VkdZWjhSbmE+fXQqRTc9WUJMZjZhYl4hOigxTCZlTl9ALiwhbjd6TUVzNSFXTmt2amx0cSV6QjB+'@;
put 'K25vODx+fUdXcHtqWSRaNHZMbncuRjVxM0ZZSVN2XjtXZXJWKTk9OUl9UT10bWFIKkU8JUdeeXh8LkxHYDxWVnJNQFNaJVMrL1FiSzx0Q307b18+aGBoNHtMUlNiQ1RRKmlYSi9ZcjsjbF5LaHFZYzl0KmUkSFFQaWU+QSZhakkpZFREZzBIVSs6Uk5pTkZLankie3A8UV4qNT1vVnsqQE5BYyh+'@;
put 'UG5BW1goeDV4eyspcThfOlYpTysxOHJ9U08hUCxhY3IwZmxjPHxVVX0vOGxlUS93TzBsWCtRd1hROHk2VjErWy93UkhGJmxmMEZPIyp8Jn5OUF8xTk9La31UYyw+MEBMPkwrWno4L0kpM1dXd3ptJWY1R2psb3wmXUhsdV5+dT9mPklRK3c7dVgodFF2SFt1O2B+bjZMbVMiJV5ePUlCSFUrWlVd'@;
put 'T3ZIa1lfemZWSih1UTwkekMwZzlgUk9DZUN2SHlUcE4hQ3ZAIVYlVjtCLlgjY2Q0eWI8Zy9kJmxZMGk9SzdAcTlZZSghRH1KUHd7W244e1Mhc1E3a0UxPENYJEwhZUxSLlA2cGhIZiUmZHBsSSh6Nk56RW1sJi5RazJvPV5KJUhwZClAK0UvT11xOUEpITd2YDpkTStpWCFsOkRGJkE+UzVMU1Rh'@;
put 'fGNzezQkTWR7WkxXMkk/TzMmbzB5c0spWEREKX5xTSRZWGBFRnYiVl5sSX1dQ1h1I2tKZUFoTXs1VlN5XUI4VzNiJkM+XjFCRnRGX3h7fD9xNXlAKC9aPnlkS0Ixam9IdkhGc31ZUzN2WDlNcVswT2Nmbi9KXTQhKVs6UyJbNHxzcyFgOipCSGNJOX1SRlModUI4NjQuQU1kbk1SekZNLEwpNjZV'@;
put 'fmpuJUdPdVhQTll7I1d5IkI2PnQscUBFTCowOkh7Jj86Xl5BfWlmTTUxdSxPbmBHQCF7cUVUMyo3UFA9OyozI3gjPUV+WDBRXjsqXzdDVyVuPSo+bzx+VWdyJSNafF9STVBecnFiZkUpNjFkVXN4PFpnakNPR2J1OykjaE04WiN4NCVeN09ocD4jQkc8dCxbVnNTTTF4JHglX0l7XiZnW2FkOjdd'@;
put 'RiNhPEUjKDJRVW42LlUyYUAxImA1SDRQRThWaSh7U0Z7I1MjXkRCZTJmZT5oLDxhJk1LTlpSQFclKX0/fW5XPGNralFTYlYyQ0VLQktKdCM2Jl1DeThjUzJ4aSw2JjZaMCNVa2hTdy9VOVZfUGleVX5lYz02dWlFVlRgXj9VSlpua1p3RzVdVy5RO1ckaSplPW8xSF9sZXRROjlRfHc4JSpWIjg+'@;
put 'IXcxSFRuRTpHMiRaLjx2a1I7dyhyTSM9VGhyVmZHZTdtQSlySjo9b1E0Lzp4dlBoVDgsNj1DIUJePCNBT0c7MGg/d218NiZ6dkhpQntaIm56dzE7YCs+eClSUCNKczRYVUE3eFM2YmgjJjcrdmBLIzZ0XmcvVmNRbDxQd0AhaSxtaU8/Zj14M3ZZX044d21JYjxkTDdyVUtqSWY5SThsTyEvSWNh'@;
put 'XVZ4dUBmOFdNZj4kWGJoeHhvdk5KQG8oLy9wc0dXW0w0XzwpbFAxcGNxL0AiKmVGYCslYG1rUEMkeDVNPm1BOSxgemZIZDB7aUB7d0kzenpAMDwsJGJEUGYwdSE5fTE9SmREUGRSUV85SFpTODJZeWghVnRrdX1SJmopKzwpJXw7ZGJGb1g2aUU4SyNaeEtEZGJsVFZxWHI3PV56W0llTDFWOi9f'@;
put 'M1pmYHk1RSJGcnFDMzZhIiwwR253Vz0/Qjl9fTE8bGJyL3dIRD5UUUc4a192YFheMG9veE5oYHdvSjN7KyVXTjhUJUZmOGRAdVhhY1BmYWxldUcvcXYyYlRmM1Q+Z1Z2Ql9iOnJyaEVbZml9MTBoSF57W3M3Ikx9REM4TjE+JGxnRThKW0FpUzVDcE44V0s4YTQxZTYvXXdtNTNOYyl1NiVZV1Jp'@;
put 'S1JTPy5HIXFWQmJGUG4rfGMkVDZ8P25CTCRmRyNxJiJoYHdvcm1oPDBtWF8/WVUyfSosd0cpMmh8bHFkUFoqO1ksdVJ0VDh6R2U7SStTaWxVaWxxWS9kPSh6US9xbVZpOEo8VDcjVG1RUmxUXWpsMWx1c2BMRlM/XT5PIUJMTU9ITnFmV1kwOHhRZXhrcChaVEVmKUx9RStsQXosMGdDfV43dUgv'@;
put 'dGFAIzcyR3YoREBqWX5Gd2I/Nj18eDF+UH5YOnAoUDF4UUtnKXp3MmgydHJgZWNLbURqYns1YkoyV3NsU3MyWkNYRWBObm9iKTRTIyRvYEZQKitFZmoraUR9ZSsjcXkvO0xvNi5dQExLRl1jNitkfXtUNn1zIUNQbSZqeXZ1aCl9PUBaaS8kVmA1Mjo/PWRjd3guUz09dEF8Lzt2e1FdQEB+a1BS'@;
put 'Q2UhO34wdWlfcU1UWXlwRTsjTU8mK2BzbnohdmZvUFB2SEtSQCpbYGozYEN7NFgiSVdjSl56InhrMEMzWCE5ZktWWnJvKStJYHYvJnpXSTM7TCoqSiROUFBufHlxKiJhUis+X3x2bXIvZzFeZlZpKVszVVVDd3x3KzFNWz57TklnW29pWjdAQDZ0fSMjUUBySFJjM1YxfmV0LiVsTzhXYV1HRFh8'@;
put 'b1JaUCMzL0Y6OT05WT5eLk9eaz9pZk5eVXMjcEM7KFY/WjFufVYxcmlPIXdfRixGZnF4OGpWSntTLDZBNFZVR2VaTUNlSzxqdC8iZX1NaU9eV3JoJStYfnEueWs/ISZYQiJ6RmBBMV1QUFU7YTdEK1siNHdYYCUoQntJbWNUcFpAPz5GWEVHJlkzKDxMYUw0OEhNI2ZraTAkPGdAbWVqN2gzYSFd'@;
put 'KGRqIlJIOSZJKDAoa2k+SStjbGN3enhRLGpLeT9JRnR0QSVBQFhSWmFFQWdzODVpcCtqT1ppYyFdS0Y8MF9sRXBHezloOyl+SXxYbklzVi9uZyoxKyw+RmlWYHYmKDdSUn5FcTMsQlVoZztoXUwocXZIKE4qeCt5d3FsUTE4VG8mJHx2cGZ+KTNXTHU1aFJ6Z155XXlnM2FAdWVld1glQnJqZnI8'@;
put 'Z2o5Un16cCFSbS9DKENkRUosTnVDTyZ5b0pYN29+PHJmdltWc3gqTVFjIXN8JnUpISEiRT55Rm9pPWwlLD5qMmw6S3thQ1IpfVZRQmRLLEhVOVpmQDkqPCo/Vzcmcmw6Q0I5O1NVc3hvenZ+bSQqR0M7dUNoS1I5SS8yNlVGVUdjLjI5ayVoQFpremAuQkFKXUVRZlZJUCJpOkMqfU5hLFRDIzgw'@;
put 'PTZvXz9NSl9zUC5RJSkvaj9AUGpKTyhFKVM+JGglIyxJN0AmRD15Q2kyYSRUOVJvWVsvelg7Uz9BS2xlXz9CbiNFI0wqcW4yXzdwNWNTO29BcTtxXzQlXUVlPXhYL1kvJnxUO2tqZjhpOCshb2RKPFZdLHdrVT1ZRkxZL3s/Ui57ZWQ6NXIpdXx4Kz5NSXAvPW96LH5PIT1HPTxiZkZsJU9pXSp5'@;
put 'Vjt2U2JyR2k3R2BpY3FwQ09DMmhLdEMrS3FrcX10PUJTQUpvRnYwezNwfUdxN2p0eEYmdUkrQUpGcVR5YkUvSS9wZFVyT1dgNzttdyFDc2c9aCkzLzohRWUlPzVdS0YyODp+RDIhK2woPzFGPDhOK341VVQhby8qMl1DW0xKIUpeIyxUc1sraC93dj0rakMrPkc7bHQjKVlxWm5pZl5bS1AyQSUs'@;
put 'YHplRiV2PS9HfkkrPnJFKCZBbTpJSVUhcDN9PFp3Omwwe2xmWjFpdiUwamJnc1goJjh+fSpSPGVjeU44L3wuXUhgNGAqPGp1SH1VKWchIzRLM0ZRZlFQZ044UWVBb15PSVA5OW0qcG5HLj5qTUpmQDpxbVEucEwheW9mNWFkWXIufnJ6WmVWVWwwYkpkKzxiRFp4XmJpZmk5V0MxcW49KTZodkZM'@;
put 'Tm9oWUR1ODV7ZixqPVtCYitEaHBAL2x1K3xyVHN6TyklbXNNcHM2MUNTOVQ6JXFbQ0JQRnEvRlplRHVBTV13TjhYJSlrKkxGbEBpWjk9SDZMZ0FvSmBpYF49SSZCV1I4VT87QE9wQD4sVCg5SFlyeFNGS3FUY3BATE1DfEp5b1hyPzEwISRxPWJZdjUyXT8pb20sKzYreEAlYlRES0k6Xm1AZXsx'@;
put 'b1M4em9ZUmE+OEUrUTtRISt6NV1FY2NrU1s1VnRdbV02SDJJZStqNkUrdGRUSWU1YF5KMHEyLmRlaGV8UjhMO308aHBVNWNAeGRMTj44a0Z0Okd4UUJQKHBoXTEwLkhbYDQsOm5VMk1xfSVAc1AwZjVnbmt+YSRiQDFOLGZwZWE6L20sRjZlOyFmYUgwX0ImSHZgISojR14kelJ6a2VgU3VUOixh'@;
put 'UlVbPjkhciFvN0BVaUNYZ3V2XWNLeF4pWGU+KkxBeGBJSWppSU1KQy95RWNqflIqNmthXj9CMmxFLmZIRSo/PylUUmxlZzElUiV2YT1ZcDVWRExbNjcufV5sYU44MCJ5Q3Ywdl1MUDNhL1JiX0RDJi5vaV9bWUtsY0xpbG9HTFRKM3pmOWF0UThWIU8wNT9IeFJzSUgjdHxaITN6MlchJXVSS1Vh'@;
put 'ST5OUnNVc2RHIXtAbCVyQF5hNk5oNjQoVSUhK3ZHR2BfTnx9VmxqcyJNP019XUVLd2ckQUlZLlsoQnwyaGZmKEt1bUVGKiRWYWd3aTlQWCF2Tl9HZjhzRnxbNl45ZD1pXzwjQ157d0BAYDI0NlZsNSVXaEAyNE48LktuM0FEaXdIOTdreSMjQ2JXbEY0e05fSERWIyNDVFclQ01UbGFSITJOTilz'@;
put 'PT8xPVhbLiZZZDF9XSZmLyxQfU16ZGZhcF1XNyFYL1VIel1JJHR6OUlwdGNXT0B+XXt+bGBTPjI0Rk1WNCsjUjF3Wls2ODVWJHU6KzNKaXRZRDgucl5ERUB8TFldMHZgcSV5InF8QEtfYyYhPW1ReD4pOFFzQ15PZCk7I3EwKV5OYS9HXVdnc3NOKH51Ol92SGpEWXU/d0dgNjgka35yXXVbUWY0'@;
put 'bypPIkk2TnlwRzU6VWJoZV12VVUhLloxImo/NFBrMHViaXhFVSpCQkN4RkhDb1hyIm1ue2spKko+KTd9YWtuMXcqLnt7VnxBVil2NzJXKzAjJG9QdkgkSUlVUEhmTy9qbXgmcUB4UEhQOmg+UE1Id0dxR1E7XkVEU1pbb3AvMzxNaUxlMjYxLy91PDBHQlBIUyFYdmNhc1Q6QCMvenVsfWZZM2di'@;
put 'SXFgej19I1QlXmJ6STldYnBSTWNpLDc7KTUkeHZFJk95SXFJVWQmM1NtOmN4OWRCTU92K1kyd2ZsKnc1KSN6dXZZeUJZRFZ8ZFc8fEN7YGpbTi9fPGUwej1VOD9rZmRWbUlqfCx1M2FWI2NfVltqVyQ7UCEjMyRHaihsRVY0cWdkZXNPSGVnR15JKytHXT9vOFdtQCYrYX14fHVDamE1QX1sUVI3'@;
put 'UG9meldbOThoVCNnV15pcCx0X3QrdzUpMVtePWJLRSFgR2wyNyZZaCkyWjwlY1NNcTQ+bnVaNnZ8RXczemhyczdvLj9+NkNIOzJDN3g6ayU6MlF4QHNOUCtGL1RAc0ooenlAc1I7UF8oRGBOY1pnPTRQMmJmTnRkPHhGb1lITEhFcTdmeCh3akk1MSRlUjdVPzRYJF0laTdKc0lYdHV2XjkvZFV7'@;
put 'Ni81QjArZ21sW1IlY0c4VEMpMil5XiwwTD88e3w6fm8wMltzY1pkaCRIQE92SzZ3fC8pfl97fDdWQ1BuSHplWCFDY2R4bi9se0U4cWc/d1tdZD9AUzxDP1tmTyhGcXJHYGBFNmVTamlNQXdAQlcxcm5yUHVNbWlBPHhuN2c5Rl5hWVdhKkZKQzMsdXQpWXYua2d9U1F6fXBUMWV9YVQ8I11rPGZN'@;
put 'dWBjOUkjIldlbVBnIVd0e1lzRFZPcyF8WWtZcjVxSEBXaUxNREh0aX1WM25yfXs2eDooPVEzSnBkdX5ebWUzXkRUaHcrSjV6VTliI1FNYFsyQnU0eDxMMWVHTFAoR3Jja15tdTBLK0FvTCo6Zy5lI15tbSZTbTxDSm4leX0vJWl7YlomWXkxN3ZMZ1lHTzleaVUyNXFme1BxdksieVF3V3Q4Q0Ra'@;
put 'KkNELnkrNHx6fnEiYE5eYVZAejYzJjRCe0cqSWJ9UyskYFckYkk7eCgmeUF9fTJ8XXdyU187V3pmPjA4REsqQnRsWTFhZGhHN2dZXnJiVWBtZ2U5V3Q9Z3l6SkQqRC8+Lj8ydUgscHZgPDZZQl97NGtiak1HNSxye0UhSC9SSy8uWF5SUUV9UltnLGNuJlNeRUBIW087TyxPT2RjNkxvMU5lRHA7'@;
put 'JTRCSHJFVFg6YDEsYlF5QlRJVmZOUDM1LFgsdVssaDQmTzo2XTpwLyZ6XTpiZHc8Nyk8K293V0gpckI0R1dMaXldfmpGXSshNlRIOHo5NCx0M2tpRzU3XllHTlN1bjl2a1JyYF4uODwsJm1MWktaQmteTl9Jc1RdXjMrLikmbVlZWEpiUUxhV00zWHNqKFtJZ14sUnxbRVgsdmBMWk5tRXdCb19A'@;
put 'NTVNLGZkeldLLFgyLHd3JmdQeG4jXWNaTF1oa3RoaiI7ZkMkJkVkTjs3U1BfbVcxWzVTOixbWnxARFBAWiJwNj1wdFdfIldKfWZPV2BwMj5bbWVpPGk1c2A5MlA4SmlUOEppTlkpNWBIbURIM35xPWA7KjUxMEoiQjJHdWRSTmhNMWxZPi5hSFZEWStbOklGeEpSQjVtdUElflBuZlZocTIuNEFA'@;
put 'UmFVR1ReJSFiNSNyOVdfWE5tVi8vMDRRaXh0VjFgcDRseTVzIzt5KmIsIkI2PkJQMywiQjVoZjFDIjU3LzklYE43SHxLQVJXPl02LkczeHdsPG5LK3VJITtCNmVkTHdnTCozYyxOM0gqSjxLYUAmNHd7WzF2RCppdVQ9Rmk0Q1JBI1pgMmIqUFokT2p7S3FgVmRoOWp0UXdoYClZKF03dUtpSWFh'@;
put 'KDA0byp6SERJPH0qeE9jOHY+aVdva1hOIUVmQ0pDWntMYnwsRS9jRXRCZGdCQCludHJpfnxDbVllJltwJF9Db2l9aEJ8MTdVRnpsc0h4RF0/XUl4fnQ3Inx7bUVEbHl7WWY4JEpsUFlsTi9SPmdNWnw5TXMmN14qMTF4KFtyYi51ciVxdVk+RjBVbVNrWGg6MTVWeng5UD1tVmNAYWpYdHUoTnd6'@;
put 'ZUZDfmBhIUtTb3lFNVh3azBnOjllUUpiRGZzcCMsJkVVS1VVdXJUXWlLQGd3Zls2WXFJTn0ub1gyaWNDdFt4LEAuIV1CXXBGJXVXVXx5diFpIVFPPzk8S09XRVBfJE9YJU1ILmE8cDxCK29vQnMxYnE5N09sekldQilPMVFmbyEyekR9Pmk2ODArU1dEJip5ImRQayhMZl9XbVgyNFo9XXpmLzc5'@;
put 'aCJ0biU+VyRvek0+STR7dF55R3c8SEg0ezQ0PHR+fHx2XmIlP0I1L0lrKV9weUY+VC4sRkBfRT07Ild3PUJMZXRqNn49Z1lZZjFdUEZ7eWdqX3E/WFZHUl8yJlA3Pj1tdFRMfVRXdDtXYF5FWGJecWAjaSlrL35FQGY8RkBac1UuQGU/Xi45fGp3ODpNWkpSPSJVRWFdWGQvcTE8UzF4ZGZQY2Rr'@;
put 'IWB4amVwcDpdTF1EazwiPSYpWEJPVTZbUXFZL2llMXVscjBPdmouUE01X0pnW3ZCbUZiZ0dAX2NtJXBmUS9SNXNgfCgidyZxXk9FJiFpeEVpIU1oLGk8eHBjXXlmcmRoL0s5PChkTU1pOXRDUmYpS3oqM1AyUXhhOzl6ZXE5IlthKV9ZeGxuQ2hJT3BtTzVrcjs4InE4eCQ5dDB3diFrRz1AND1P'@;
put 'T1pDXUI9b2F7L3tsZCFvcltxMkM6elU+VE03SC4ubWQ0SkY+ajlHcms+K2E1eURlMUJ7YUIrWiY6ISs5XmhfSUdrXkNhazp8Z2RMWStHbF5iekRCfj0sX0BPZnQ0QSk/QExGbUsofGI7dWA7Z3tEd3dHUT9mPlkldmNEc1ovTCQxIUp+NjNtZUJFPClKITdMP3N6fXpFUG0rPCR3eCUuUltLKXcs'@;
put 'TEkxbVUjI3FbJW9RY0xFUE9xRTFHXn5ta2BOW3BAREppVmZNRHdoWGdURTw+JFJbPUhdLmdQT3suUTZqa3RhWW5lQXEoIjhtYjAxay9LPTg6OTksPHYsWCwqM2xQSFZ2UWtyI1o2QlI/YCJya21NbiRGKVdzVlgxdjF5VHwsY110Szc3ayZicCYiP3c4eS5zPWMkSU4hemNROVc+UjMkSSg4XmBx'@;
put 'eHBKVz8yKXheekdUejM6KEAoR0ZGKyN6TjRnX3J0KFNVN3VNZDx4Ij8mUU1OPmopYkEmUmU3WFlVLjZ0ZjArLGNJK0x3WTdLY3tqTEtbTzw9cXhUOHJjYWZJYGo4PCJ8SX5bdHw/ITFDSHJ0O0pXKkJES2lxQWh+KSIhaENvVTh0OilYYUBwLnRoLmlgdjtGO1FycyQxeyZnejh9bWJHRmZobSlN'@;
put 'Omcjd21nckp4KDl1JktDOyMwXWt9QE1SXlViO0k7cGZRNWNmfEM+IXxCaWg4RjNbSThqImAhQUNwYGk5OCpYZTcyNCNTd0tzN1FldE5EQy9RaF54eXNaekQ5KV9mezhrcnNtR2ZsaC4qKkdzYGMlfkV2fHdlPWEpeDRMfmU/aixuJV5iIS48cjpvJG1LNGdAaDhaRyVMWCt7eSxFWiQqUHlKQjk7'@;
put 'Uz5ZKUtgNjVYVigodCJLYGk1OElMejl6OSFXNWZ5XWB2O3F6dzIzS2ZYS3dSUEl+amk7PC9PSSxScXF7aWYsfXhdTml8ZX55TUxMc1s4S25wXmZ3RyQ4US9hV2Z2Kig2ZXs5JXFjezZEfnRkfXE2T3c1KSRRV3c7PntYKldxeCIyajF3cGF3IlUwOnVqWTomYjUpYFhOe3Ukd2R8ZzhXUX1xd3xN'@;
put 'SEsxQjQsRGowMyoqWG9yZDJ6d2BbVyo2QUwvSUQwc3xsbHcsflY+UmVxIzV4a0I7JXw9ZEkqbHNTLjdeUUVgeSNhbUplZT04YyxqZTw4bCwuNGUpeTorP2l5RSEralBnZytmbWFteDFNazg8QiwrSXFWbmBCOj0hI1s4Ji9TYkRNN2pNazxMV2ojVkNmUDhPe3shaGZYJSs6JEVFdDpDfjNoUDlF'@;
put 'bGg2aGtwbDVmYjFAdVNvS3FRKFl4JGdBeU9fYDExWTIkdntlalNlSUNWTmNbUGtBLGJrKE00fDdWRzMpRjMrO3oya09oX1YsfCUoTGk1WissIUIjRE1MTGEpW3hoP2hdMGNnbC9ie1UqZ3tadj9uL1hyIVYoaHJlPlUoMjo5RWRjLFgobktgQVs1NkwsRHgwRGZoZTFdc2pgR1Jna2VbflgqRGpX'@;
put 'JF1UaGRDU15AVDJNYVJAYEtmVGVaZUo4SiJaWCQ9cDkvPlthVUQ/d3ZwcTkwMng0Y1EiSWs3RUx4ZDhFeiFlQSx+N1NMejVjKkJlc0VbdWYjLm9LOXUmbG0rdUw9XSs0PTJKZVo7NCwqeUYmKV54dlZman1AQ25sWWhZZU1xamlLM3loblFJQ0YyJX1OUk1nY3BJWCNpcXNPNkVjRXN1WzNwNz1p'@;
put 'cGdXYyFMW20yWixeeFEvVzk4Jk4xPHchXSFnTixCM2NgYSR+MDA8Mi4/eDxtRFp0YU94I09eeUVGcjI+eXhrNmgsbSk2M1gvfGpKIU55X1AvZVVCWFBiPzFKYjEuXU90fUhwN3xPQ1EvRWpUIVp0NCEuWlEkIVl4KlZnKlIsTXVkdUxuMmI6e100fDopVmozOmw+bFkxLFJ1bzJ5cT0sYFYmWEZz'@;
put 'b0NoN3YhRzFBTzQlMUAkdSlERHE9eUJGQ1pWbmlzdjZaWGpAUjw5ZlkkWkVMWTdhXU5obWM+MFAhY2M+Mkprcm9ONHpEVCphXVlXXT1sbWdfO1NROkU0JXNANiZ6Zz9VSn5HOClLZWhzblAuWXZ9I31ZZG92U29daCEwVS46biVkMjIzVWkwYHNAbFJdMVVPZjFhbHdEbm9AZSg3c2ZnU04kLjtw'@;
put 'KlpUQnI3Njo3S2IoPFpMXk1hayVQTzdFVEdOOkh1NHxVMi4jSklTT2ZyZj1ibCVPUVovYEoqTWpYbXJhMVUxKDgub0VoVGpUUyVAW29WTWNLOFElNyJxfUIyVjxRZH1nYz9Gcj87aENwRFB7V2ApOmZAST9MQ2FbVGkrYX1YSG5gfSVRKUs3WFhPV3VreUM6OClLZkVnOUBfdWZ+MT1Dd2tYYVJq'@;
put 'RWhzWEU6TDg8V1MxVX4iPVhIbmBpIiFYSUlROkslcz1tPmpsR15uKl5RdXhxfFM1R1IuLmZhLCJEPFY1TUNTS1l+QlFha3xIUG5KYjJ9bmBoc00qKiNtcldMUithfFk8VShBZmBAaSM5ZiU0OkQuLEZIVU8pbT9HXylZJTgoWTVEVjt5PENnK1c5OihtdUxmTSFHRFI2aCQmIWVWJDBobTYxcXEp'@;
put 'NEpGfl1CNmRKXWJffDB+STZwMSs7fmh4RT99cSRWdzFIJFg3am9IXmU+OXpmSlI6QmkmJldTKDlLcmZ4MT9vRjA2bFVPclRUM3U4T1haYU5zPTZnY2R5an5MTERqcjVJPFJ3NVYkXW1DRkZLSi8saCQ0eGRgOz4sbCk0bXlfeH5BPk5KViYwd0JfOyI7Li9DKCJsLnRFQ1MqSnd4LipZQXk6KkA/'@;
put 'RDoseHZAfW46bVhIUlp+dzRte1M9WX1uRz9Xb3JxdW5JeWZ1Y2FsVUMvWWdQYlhlPTpXMkNJc2xzMWl2OWJUaCo2Yl1zL1dNcXNCakc0RzNiSVh1OnlqJlM7PXQ2OFM4TC9tXUx6XVZpVGlKKXZ0PXwzWF1pSHBAfm4+YT0uK1AhZ0pLcit8Rik5P3AqeD06YHFkUzloZF4kfix3b0FwZzsicFou'@;
put 'PiVGTVBaJVBEV0E6QXtFN1M9WHxnZHg+ajxWLDJjM15hYko4eEBUWiE7Q0w3Lik9X0IoSl5yJlJJVFVsZ2ZAOTFiVFRwSmRUPWZQLH5CWzhSPVJ8Uz13dTpqVTFVYTB2KyUqNj84Zz5VKipWb0hrSnAzRU9fNl1Ne0RSR2JOZTVDR3xLKykrUF4uZFVwQUA7fC5UPVgoXVs1LGJRZldVbGpgTGQ7'@;
put 'Sj4uTFRfIktUOmdNL2NZQjJsSE85PTNnfWF4L11qOGlEcnMkLD9LTmYzXzNnKW9Wdi8iamVCXUVsW0g1KkdzKUg0Z2l2RGw5SVBrKU9paH4sY0xudUE4U0JEbTcoJF5ROGY2ZGk9LlleRX0jcXAudzVSX15jdVpQdytXfVk2VWcoaHFrOnZbLyZQY191RUxLWWExNyVlcEt2ZmpHbDhyJGBKKlcw'@;
put 'Wk9eKTZ5V3IkcGJqRXk7RiRbaXY8XThIbjU2RHtVLmNoSjw1JT40eDkhIzdHZjRvOltUYFs3Sn19QzZYcndDRjlgNTZpfV1IV19uWyFOZylHUjhhQCopJk1zc2JRZHQ/RiNST2djZT9pOltyeHt0QFJDOG1nbWxjOnpOIjBUdSYqVmFabWU6cyEreHpKIW5zISN1Xys3L1Iqfl5tPi8/aD59Sk05'@;
put 'T0g5VkNLVTBkWjs5TUtFXTdRTDwzJjRNTU5jZDgoeCw9ciRFO2YoWGBmX0YjS1FKJFZJV148d1YoJUI+WXZeW0FvaithcjwiVHhKXWdKb28vd3UlWV9pO0pIS3loXkppVSkoMl53VCFkW0tRWDFDS1RfeVhmfDklfUooWC9yOCxwNShKOV0we2pwbEN6dmkmdEU/NHlUXlRuP1hyJktodUdgflZs'@;
put 'RiRDTEB0cU4hTj0mW05ifmpwOVU8e0M2LFMqUVcie1J3UytNXjAsNX5ARXtgcWRxdUNoRF8oUnU+MGlRN003MlFdbEB3YGVCRT9SWFsxbCFwYEdYZ3xdMGxRbmJLKGVYX3kkUHM7QEVrO01oW3I8ZGlPO1lXIypZZUZTW3ViSFBrKSJpbj5ZSXF2Oig1OFRELDpXTXdfenIyeURTNTx8bXRSMjQ4'@;
put 'PGFBNFpgT1hJSHJAcUJtcy5QeiE/VUBsekNYNU1fLHBSfVBPfWlyRSZvcEZ1RHR7cFs4S1FKTSlzYEtkY2pSNj49PUgwb0IxZW13RlI6fW9rVURoNHpPWjosOjJwQCgyIVdXMyR4bnZ0YGl5NXxTK2hiZzQkSCUyPjdYaHZsPlkrdyJiJGJXbmtbRVFQeCJfdH55bjwzK1EiTi9dUE5feEdEa1RK'@;
put 'emJbKD1pMndTPDJtbzhuXiFucExLM3k2QGxdQE1OcWhjSjx5bGJGUEoqMHZIX1hEVixsUThHVXVhWmArdkZHNkt5IW50U1Y9TFEkRUZnbishW2Yvd3xAcml9SFRPUCsiRyJVLEpUPXRCI1sqfEZ5QEo+a3FoaihaPFZdWmtdX0RWWCR4clBJKHp9KCosdHtEOz5SMXtPaFldQlUqM2NXXTtvNWI6'@;
put 'TmxfLypPczshZFRkQkd7ezJCUVl7LzhWUUN8SWAoLDA/R180KXg1L2labj9eJGVzO3VTP3xnIXN7RyRBekV5Nz4va0VFUSFvN0UkTyNFRGVjantLal1md2tLXjs/KSUiVWo5WmhxRC8iPlI+bTUlJi9GdHsre2dEOHJWJWt6dipEaSwoSHRNditPdSJHZj8rL0RUKEQ3XjtiVVhNV3ZyfCs5Wis2'@;
put 'bngrYnxTMENrQU42WmQrXzgvcl9TISMucTRLU3dfTT1hSUx3LypiQnhTMUhxNjpxRD84YWo3IWAvWXkleFlQZDl8VkE6eSQuQ1tVOixvfCpRMGJ1eWFuND1HbEd6Tj8xSXY7SnpqSzl3X2RlSjxrajImKzNUWSg2UVdyUjpEfmxOLH5ROFM1e1EidzxsLjV3NF9qSFRzeTA3IlkqKnlgRWR3SDc3'@;
put 'MnQld1lVfjh8Uj9TOGM0YkQydDBjdWlRLFtEMShfQn1SRW4iXzU7TEMxYykyXXtdKHxBNF1bK0xQeEl5dVd8WCFPWmBseW4hRFk+Y147Kk11QWheeUFBTCVJVTN+QkBCbDdBek0pY0QxcUtMSlJXL0dmaDguQyxDXkAjcitXJGNRK05FQkdFM3d3d2JJZ2RvdHYuPyJye0smOV93ZHRVSCs/WGll'@;
put 'd29RImNQIzErJnw0UW8zTGp6d3UjYX1qZj94UTw3eiZHQFZ7Y2N4ZDtgdFE7PUVQJjxQQn0kW0FtbHolbERQU2h+NyNdYy80VnovS2lESVo+cT0yc0csSkFLPzNnMkZFXUJNYVpvVzsrN3ZwNDdNalFaN0F4Z0R5OzVzU2FYZTxAa31AK2MvaTM4IUxEWFdrJHlha05fRGMxTEZPdltvNE8vRDUo'@;
put 'S01IdVE7PUVQJl46KiUzNC9zJWdeO257OFtoXWcjTjdTIXxKL3EiezBka19SQE99ZWZ1Q3R7SnwvbElySX1Hei5nPWFReTdNU3dQP2lQaitTS2ZFVmZURzZ4Wyh8WHBgWmVXYSExUVdRZV5IKU1JUXZLb2k/cHMod2tLQWJJO1YxY2Z4QVlQSEQ/VUZFbmM4PHJyeUlNe1guO3FgbVNtaCRNfTtq'@;
put 'XT9rSV1fRlIoYko5bF47UVZqeTBuKFhUd0xIPDJvdT0pW0NHKUdiTy92ciUiYnw+RmspNSZMTGpYZkk9aTY+ZUZCSlhgP187T3FhNyJpeTcxO3MmRkdAN2BFe0ZZYFdLZTxUcEQ3fEVNfXUpJVMscnxzcjxCcWB1OUV+ZDQ4RUxSJHdNRyhHeiE2W00mSHUjdjUhcG9aKWBbdnU0L2RmKyM4X0Z7'@;
put 'fmE7MEM/Unl+ZStOWWUsaTEkXkh0e3xbSGkzNk14IXwhYDNMS2lie357KC8seSFzOEheRSRKXzRIfWdWRUhDOCZobTZBdldsdntCdjdtI3trbiFlPU9PNUNuRVhXbWVKdHtPeFgvXl9kOmRvMjozdkM/XW9bZFIsJDY3bCthYCR6OV1qUWI9LyQ5SnxjL2RzLCZxYkhPSSxbVkwqMzw6TC4lY2Rn'@;
put 'US8ycEFgb2NjZXN7YDV4bE05eEdsI31IR3ZYSkd6dW4hWVR1fX0lUnlbZ1VnS21ESlF3eEtsZzFoOjBPP1dxNDQkLGwpV2M4OkVwfE9YQnxKXjtXelA1N0JBZGIqQD1hQkRDXzsqS2owXU5tS2R8ZHMkbjFJcnlYM3shNmh3Rm9pOCp4X0Q0bWAuaWhzc2xiMWVzOWdBMHtARygySUQ2UyNMNWB6'@;
put 'Vy51Jl1UZFkvSndiaXUyX2ZrbWdhNGdBQykxPl1KSEN9LiosKU0id3hRP1cuUSYsV0VNP309VDozPG4xWEZlRDApOWtHXz1aZ0EzenhkVlBTYSRFZm5AaCxCQ3xFSDF6YVMiRDcqP2dafDEkJFdKZUtWY18lbVlMN1Y7b05hUWlVL3dPS0JLP0ZXY0ImeERodygwMFBZLzd9SXJyI3J3W0pnfmB5'@;
put 'TCF1VF5sfGFZVTB1cCRnY3N2OkBoRmN6XWdaPilZMmZ5XmIyX1BfS0Y4Wm59ck82QmpqL2JiPW92RjNLT3pyWnwqUUIvbnRpO0t0cDdgcFRpJX14WGh6OV5+Vzl8VXc+VChaYmgwQF9aeEZCMGxzSCY0S3BYKUc8dShVbjRwYmBgK1AiYjxHfSltNDVVbGBDXTMsaEtvT3IkcHNKNEd8dHU2aUB1'@;
put 'MiozYzF0fUxFKWZadTt1KjIhcGBnVmNMVlNfZWAuOXZjXkd0a2tDWE9WaUR2P1J1NiFCelB7R3RONXRJdT84aDV4di9lUXFie3tkaW53JktMLGwoJjZmeVs1JXFEfE5tJEwwfUpBdS9xKnskI0IuXy5lJGcoU3hKLyxaSjhpVGNpbm40OD84dEErNSZVL1JfZWUyaEhZKD1oYSxPXUNDczBFfV1+'@;
put 'MlpRUypzRWtBbHxZbk4uQ2lJQ3B8USNydlIjbVRHKlVrXzR9L2BCfDRmTEFSKVt6XjVndH5RV1tqMz47M2Zac3BZUUtAZVBHQ3pad05pc2NNL05zUU1pd3ByVFtlfn59Tzo0SmRkOXlVfFp3NHZ0Yj1kc1hrPEY7Mk9xV3YzV0pSJDRrSWQhKmlpZ24+Sk9ISE0/JFZHWExFKSYhTU9HTT5kKSt1'@;
put 'XnhJKWhLIUU0ey5MOH0sSmg0TDVsTnhubjk3fTVUQWZhUiRdIjRuZmwxajxHUWd4L241aGRHPG9zP0EybU9vRUowY1AuIk5DQiE0IUZ4Ojkydk59QnIlVnl3MWgydDxvIS8zbjZPU0NyKUxiUipzZ2NIW0JbdnM/Q1kobnVQN1NyQmhIYVlCeGwjKFdkMCtHeWE/fWdDUTVBKjVfN25NZkxMMXIy'@;
put 'OVUyXjtMQEI8Z0JwYm5HRGwwe3pmVUV9XSw/RygmWm9SZ31mUklUWz0lX3RZd2dEVjhOcz9XYjAjNCFFRXU0dmlZWXk0XjlxU191RD9HakwqNFZtc110WH12QlJ1WnxUK31RTXVpa0VSX254QGF8KlFTRy9uKFh4ZXtHc2oyaHFBcSVxL1pkLzkwJV5YQyZFLlBacCwuW2lLbWB4cD93e3pXcl9o'@;
put 'O3VgQ2NmVCo2fVUhMFpEdVQ/ZD53Wl9mQkV5X2lMYWFXSDd9UHgkKUgsaTNXajRfRjxdS3A4RGZIKSM0aHN8dUM/e14qT0l7c2VHLlVgL1hCbCJCdVgzaEc5JXBiLEg4ejFJZTl3JnEpV21yKCgya11STX52OGpwI3s0aTw7bT9jJnhyYTNEKVB8KHJyXik/KWNVTjluUz91MVZaVEUwdWYkN2xn'@;
put 'ak16bTpKREZ1fChyUVtgMDZxIipbeFIkQEcodHM1aGVLQFVNeEp3eGc5KmdVUEhNdnU4VlpeSSF2XTltMXNWYCRkWnNwZVJHOn5nKVkiLCVMZXxTWn5XOGh8VEA0eFIxKn0vM3ckYTpraHlNUHR7bmZNc1VIPmp5IjNocDokZC8qOTI+QyExRlZSN15xMmVtZTdZZ2g2d2RWb3g8X0xBUGhtJS4m'@;
put 'TTN1Zit1JUtlPjdWcnhWOUBhd1NkdCEpMls4JjVKeTR2RUEreDR+QShfMT8peiklKmpMJnFJX0JjPipSbTxqRi5AfGJgMzVWUmlEQFhyRGlrU1BFZX55biwzd0RwYzExMDgkR3t4OkZNTjlGIXFsQiEzRjNWJXc4PXojTlttWHJycUJ7R0BNOFlVJEpFV0ZTOm9PNH13dyx5Pz9veUIzX3hTejh5'@;
put 'd2dIfjwlV15zUjtmI3xRMEd7TSYldE11TDxwLjVMPDRKUFdKSEpEcERuTVJ0YkNucFAzeDcwJXJAa2V9RF9dWHJTPUpefUJXbntfaGsxNzRRK2RdWERzWUMhb0QrWGE4ZVN0cGJLUGZaPikkZ2VecEkxPz5YQWgsdFhsez43fSRtSi48SEhIQztlXlovJUVfLjo4SkU3ZUA0LFkuYjBpYnBXdSZn'@;
put 'cSN0UCFheCkhUCJeb2M+VXVDcU01V3xQNEdedmtOMlBqbEJiSndSWm9sMihIP29ZRCY9TC9FJVtsV21xOHlJIjskPS5pVXs2OjFpM2guODgldjl4Ky96LFtTZ0wpS1YsQXFVOCtyVEIrWFZVQ3ppZFhAY3VdT0JfbjNJOlh5SFBBK2U6aW0oV3MmaVA/VWlgREgqRCRPTWA6LF5BK35qMkJ+MGdr'@;
put 'PjJmUjwhdl0wWmZPWFVpKiFUcCwwXy9hP3NFPCNBKmArNmwidm4uRlVeRlQhSWUuK2dySU59RmRlVDVvQiZLRWxLQyxoS0tneGNkPW8sXkRsPD01MF1wRDoxW0lKNWxGM3xaR30uRGkqRjh3PVYjJTJXajdsIigreUhxTG9+WF46MzxMRyZzb29bdipNRWciKjYmb3tNcjhFaWo5RDRyXlBgQmM9'@;
put 'Pj1qN0YyUi5ndzpLbEFUMjNbfntHUncoZkhuVFpyWEpxeW5ISnN2QlhiIjREP3lDOHJ7R2h4QGBGLlR6O01VYilMYHB3KkhmI0wpcFpMcHBIOklpRVIrSGkubiUoWzEwU1FyOnk+PVI7MD4qPmFBaEJNLCpZcDdleSl4eEI4YTYmcXM+OzB6R3dyaDFLfkBDPD84bC9dV19QPk5sZDlCX1U8d3Zm'@;
put 'bH4oYW1bVyJyQiwmW0hSO3pfMm4lY21iVVhkMEF8XVIuJCRiQUFTVGIhY2dEU1MyN1dBNEcjST9eL2UuOC8qT2dhfGxLa3ImRyU/cShWNGZSR25eVTBEOXlqOlJMMElVeT8yV1NnUGFFXmEqQjdzTX5+T29dQGQvSV8oUGp4N0dEZzNCXn1kQWx6OWZTdmtzcHNlfDxQNyY5YiQxeDR8SUdlSCVs'@;
put 'eFBTXjsjdTQmdDFNWDlVNmdieVM0KmRnNi94e1VvaDMiZFhjO0h7RUQ8Qm0+OF9GKkRJWzhVdXgqdyFWXkxmVmR0Rjt3RU44UFBrSWYxVVQxelRVKG4wIjh1K2QuZSwrLDxCdH4/UFRHJHdXST8uQDt8bCpVeFB8WHJpaWtYQl1EcVAvVEdlSStuVjVJTVFJcDdgTmRWV1QmKFYvQy80XlYvQy97'@;
put 'KFpyU3drMEs8Rk1FSFpxYDI5UixePnp+Qi5OOSxnLGNFfitZYCxeOG1ILlh1KUROJCFCPnk5S0VabWBTXTl2aSlHc0FSX1toUVs1fG9RMnF5MklzSWxEMl9IKlJpViQvSG5KRD9RTEJVNDxQM0Z5X20iNWMqU2t7U31feXhMc2x7WTQscWdPSEc8OmYzfFVia1ZbMGxlLy5rNG9ROkhkT2gjeD05'@;
put 'dzFxVDxYT2wiOHxkOVttXShNLHF9VDlvQDF3YSR4R2U0cVhuJjI5TjU0fTpFdGxyZ2s0Ln1fOGlPcTFNMVleSHl8TlZyUkF7aTlMfWMuZXliSSQ0R0s4VHRfYkYzfXkhJixwe285b3spblV0aVdFan55XT55R29qQSslPS9pKSJyNlB8clNSLyozZyptcmtXfUg+XU5rbCVjbVgvUSMoU3hiVGg5'@;
put 'QW86ZFJnYl54S0pie1s5dENlaz1lZEYhMi8vK3xfYzNkSVI3V1J5djhZV359N2BpVmoleTg7YCMzRjQuVERnQ0pLdnVOW0EpcVd1cnJOIVEpNDw5MWBsYSE7aE88Iix3UE5tcil1N1BYVFVJazU3cS9WZGxLQWFGRlhDWUJLQCMoZEtTIW5UcFN6ZHBlS0k9O3QpenclQGh9OH04LD4xNTBxNFIo'@;
put 'Vzt0KyY7bCs3ZSVDY3xRfEZaIkczfjA6cUIjeE5hV2FFd05XJnhoeGREW2NHOkxuOHw1a1BhMWhdRU12ajJiLm1OVCN6PChnKzU9bXxsIllGenRoW0lxLD4qMDRecjVBSW9OODlePXI3X2FjZFIyInpIVEVXL2J7ZkwuLDBoeDlrVU5bXXNiaiQyV1MqTXlbeTB1TlJRVmVlQ2E2fmUlcWEhLmVw'@;
put 'YmY9MFJ9K2lYSC8uX3I+Uk0leUY1QFo0MEUkc2tmL0s0RzVONFRwb003RGFHT0F1c0klUUFRP19aKERsZmY9fDQwP0NTc25Oaz1JW009OCNrRy9tImIxPCJXKSlLTGBgK0x9O2pDbzVKdWNVQzpte3olRnAyNEQlTGNfWmw6OEw5cEdzPyY/JExoWyIkX3wqX1UrbE56KDBMP0VlaFBebVpCWG0o'@;
put 'TlR8UkhFIzs/PDVZWl5QIi8hOmtpTVFPVCE1ayl2N1cjY31yL29EVXY/TiFHSDhxIT5WaTc4M0tmI3xAcy91PTpvM31JTylEO0p7UT0vV3pRZz9qPkNWejd9aDgodUlpdz1DXl9uLldrMEF1YjsvUmBPYCNDLkwiLlVWY2xKMjk8V0tKN0VSLy5YQFdHVTFXeFklMV8lUWN4ITE3UjFEMnI0QzFl'@;
put 'bT17WHJvOFYveDQzRi9lPzBBITEzI2tVbldJVSlINHNDSHg4Sk4pLmRxJEReY19jb0VzckosVXFvcHZAQ3ZFbU05OU44MSVAVDVZcEJydVg3d2N4bEJ+ZzxpKH1YNFchXm1qalhUWXl1cntSTVgoZTFAYHo0Vz5pWHN8L05teUFDKz9XM2xEXzpqRDVxKl9lRC5KfTt6JDsvT2RBe3NpVCF6Vncw'@;
put 'TTwsVWpxZUdzZVpYM3FEXl09ViZWWkd6S2NPLndCJEZOXyQpX3d8b1RSO2BwUy95X20mSi5FKDU0TXlfRCF7fGEvbUkifE1ffmQpY0V7ailrMFQwJmtEXlpBekZ4LGBxIkR6X0tGQ3YxaT1GfChjcDJlYVZHZShBUFdWMEB1RFIka21yL2czSWgjRCQ1XTg+Ukc2Qyt3fTk2LFNqJnN8WDU1b1o8'@;
put 'SHBBaXNjTWNZaCNbaWB8YyhkPXRVSihUcTI+Pjt6fElZL0IwIn4vMSEvbytGeWR7dWZ+dVdaYUxISSY1d3toSG1yKiQqIWVAMjU1d3goXyhLV2Q+NHMvTT9oZTI0Mz94eXc4ZEhRV0hyblRgYztYYjBAYD9gQUgpW3F5eDJwQTNCY1NyZGd6KVsuImNlPSg8SGJzNjRaK3hYWF5FUnxSN3RsIXBY'@;
put 'dzRtWSwoYyFieDYrKX1mTllPTHd1X28lfGxTRURtIldkPEA1WUouaGF5QCkhS1o7RUd8ITswYWk9LEdsRmIydiNdOSV8KG5ELnpSSH1DRktzcG0xJiU7WGZjMjciPmVEe3xVdShYK1RyQmxvUlZmUWF+ZnsoJjcyPylUS3AvXnkxT2l0V2ZPKGQ5QEprZUM4QEpLb01yMWJ5aXFbbEZfK0ojZUtP'@;
put 'V3doRjF9QmhON3BxMTY3cS9VPmdefTxVbGhObk5KRnlOMHU7VSIjT2lVVnEiZkdQdTthOEg1ejtQJlpYZUdDa1FlZW02cVllMH5OX1lWcEl+UGMhT2lgUV9BMVtKbml+SCFhY01HZ0R2WChLTUNleC9pfHBMVVlgY3pIOH5IT25ILl9zJC47eio+fT94cnZKczlIPzh2MSUxWmxmWixHQilOZkVh'@;
put 'dkRfTV1Oej9XXjZ4P29WUiN3Wkx0TiUsQTZ2RDYoYzRzTSE6UFBVMHY0LFRFSG93eSsrT0xIY1I2WXwiYFg4SEFZMm4zUkM2X1ElekowNFkiMkxIfkMjdURpNXwlKDssUFllNGNnIT99clVsMC5VQTolailsMTl7OzlgLjhzIVJ3QCY/I1AqW2MofEw2R21ge3xUdHNCRjg7cXlEZFVtJVRSVmVS'@;
put 'L0kiWnk4JjpqJX1pRW53dHVLdEwqUUZKITl2JEshNXZNTG9pKkVYSUJOSXltfHVINSMqPllgNT5vaVNTQUFBemJDQXc0VkJ4RElIIlEsMUN1Sz12RkBBdEI6P1JEMnoxTiNPVWpoeC5MQUFBQUFBQUFBQUFBVFgoNCI5cHdhTi4lXmZocFglXWhtY0FJQzFEaU1IQ2oiNzQzY2EqOm9pRWdPdD1h'@;
put 'IixLZjU7KjhYJCxNVV8sS29rQ0tSSlA+TGtuJHBfe1ttUnVHNk9AcHEjc1hRPiMoK3NKQGxCdFR0PG5gakg9djZDc11EbzckXUdzP0x9bUpOM2Bobklwd01YfGRXcDlXUEwyMFpwPi4xTkM4LGZpWW4oM3Q1RmBDfF0yZ2IuaD5gM0AuXiMuTl4jWE01VDg3b11GVWlFWDRFPHppQEgsflhWfi5a'@;
put 'KH5jZUJuTWRUP1Qwd1ZObzpIMDQ4Mn42Qno6JDE8QGJne3c3LEJCQEQjMGY3Lmw3bmZtJEJyWHdDN148XjNCTlpSXjtxSi5bP2RrSShRT3RXZ1NoSndhLzRWQFc+T2ZVUW94XjdkPXlkWjV7ZT4pO3cjPjptbUtyYngyek1Hd2VhbjJWOmtVRFlgYG1hKloxVE0pNS5YKV9TKV04azgwWX1waDs0'@;
put 'Yjp+NlRFMVU0U3lnMntIYSQrPn1RR3lrS2FnU3BrcGkpVUZSdzQjSkJoRFZSbH0xdyNhT3B5Y3BNeU1sOCs/bS5eLnh6dU0yS3o+e2RxKWFyTmIxc0lPOHEpaV9CQilLI1hUVEw3c3VeRFYxSVlKfEJNblpHNFVqXil8eV97XWR6QERKK3V4QWs1clM8b1RoJEJxIn48MyEqen5dZFp3ODdVYFFE'@;
put 'I3g0Qkw4MGRCTHNXZjBATkQjbUhNV0pzcD1qUHV0d3w/T1lmJklodjl0P1s8azM7eGlvaj4uT0RyXitsaEJYUzY+OU4jU29HOzglemhBO2FaOCJSdF06TmxwNyYsJHZbTmo+UjJKPShLYDhkP2V5e0YyU1IrU1gyVT0vZjJdaT4yWStqaFIvOndUVlJydkhFK0g9YDx2ZTFiYC8zRlUpRFZ2N2p8'@;
put 'RnpWRmREZy5BfjsoTFoqaEh6Umh+eTtXVVRaJj1iNyV8KyZjYH5ZU354dkFOSyNFW1RZPzlpPC9PbG5UPHdAIVo9QE9lTSJ8X0JAQ00zNSp5bCpNeV5kQjxSSi9UNl9NeE90cTRiP0pZR0dTLnhLRypSenJ7Xzh6UUYiU2taUUIqX1pyYXVYfT4ofH0rZCZ0T0sheT0zUX53dUhTM0FiLEZ6WTg5'@;
put 'U2BGXlRYdm1dJloxdH1aejhERUgqdHBENj0jXmNaV3o+UGErNFtbVksmaCk2MztaKHA5T098RFtnbGduOXsyVTlMRVlLNGR3NUBMb0cybUc9bkpoQCRVWWpsIWZqeUZoLFg+IWRNfSZCODh2U1FkKjspYzNPLFNZZnE9O0QrKSh4QTJwbTVRb09CTW01bzJHXV9zYGkzZjkpZEM7NWUqSChwWlA1'@;
put 'Q05lS1clfEM4RiZYKFd2Tis0WUY4O0laLDlTdkxGI0V4dSI+OHF0NGdKd0dgP0x5ZmAiMGNpPHkkZVZGenUpZS84U0pfZU9CVlg2JXdMdjEveGdWSEJOTlRqN2giJX1LJiVkaS4mYWNOVWRPfHNUcFRlVzp1cDM8RX1VNzNnQE0oZ0NTb2F4aD9hQGhVaH53Tnc6cj1ZeElMIVZAdEs1Szx9YllV'@;
put 'XUVebE1md24oJVA4NTxaNH0ufVFOODQwSUhSPlhSe2Q3dHFjdVJKKiU+dTNqfClYb1hnbFh4TzxBUTFaOE4kTlk0UUReJFVRJHQjWCtvPUpITFhlU0FQTTRwY2l9PXxkeGx9WEslW05pR0d8RjhuWkM1LixlbmpGai9gLmswKyV+L25AUD1gQlI6dCRjNF1XZ3w5In5aTlFTKXVYSWtTSG0qX1FF'@;
put 'X3VnNH0iPXM4KjxGQXA8IUkzfCIvcFNXTldzLmpSaVR4YzEoSjRwbGgvVkA/TF49TUlGXzRVfWUkaGIzRUM+ITglNjFfTCZPRTEvU14odCgqNmRSQlBvLyZ7NV0oc19iQT52XTUvXm00aXZ4W3tIKjRVayMkQC95YUJieD1tcHw1KHhlRDV1Mm9hOXsqMjsqclpMfiUxXnRMVFpWLF4+QkN3QiJL'@;
put 'PDN7QGxvYHFTJjwoXnhjajZNWj94VmJTajozSjhec0UkNntOR0AoLn1bX2FdQkd6QF5YfWIsWztKPEgoWlN2Zyg5SFpDITg0WXdEPk9bc1UwUVhnJFVZY35jSGUvWFBUTnkpMSYmZURGdjRIUXdUe353SGYqNk4wYUNdNHQ2cmNbe1EjK3FqblA0MSliMVN2Nzt3fX02UTh6MEd2Um44NnFeXiwm'@;
put 'XiFAO2x6SDhRXmQ9QUd6Kj9pe3g7IUt0ZFtTQiZmM11fak5QMHgyJUJlRUxpZE5KPHE+aWc2UDBlejx2elFCNFQ6RWlsdEBRSGNxZ3QrIUY8eEhjfTZoQ0BMTUwkYDNqKDN2X3NwaFtQY0g3cFViXWMhd0MhdHArKWhsYGFkNX4pPXI1d3pxR0BXcE86QmRucSowalMvQi56eHVAW0IkXXBYKztd'@;
put 'IjQlN09PZzFjeVpmfE5aMENVWSk6VkomfSJfZ2s8Tm80b2lacTNvfE9bdXk8Q25WbFAlXm1dO1RSIyo2S3xlUiYrfTtIYUovO3VWMEBpPGkrSSpDWjBLXWc9WE1jQWBMbmMhXzloL0dyPkU+R343RWskdn08L3E0UG1mbyhqREpocVMhWyloRDZbZWl8ITZQdTlMUyFJOS9laj1WalM+W2dGLDxR'@;
put 'JCpkMTFhak40anU1M3ZfKzBXZmJ9KyZyfEI0W3FCNlpkZDBEdyhMc0EjJE1KODBIcDFOZ2VYVlMuQ0w+KWtSLFRnLkNZNCp1WnlCXXpVZjNYNnBUTlgjQSNec3xPSmxeT2NEYFdsTEpiJEhXYGA3Pn1vbVs9QTAoW2RlNDpddjRMUT4xUVE2UGV4N2Mlbkd0bmJafnIpZnxyY2pmKTRGbCU+cV9v'@;
put 'KV0xQDpENV0rR048X0ZPT2FdNkl6XkBIdX46SWY/Pmo9Oj5lck95ejFBaGRsaVdUYkdXdnczK1IuV0UlYltIa3FQLFRnUCFTekx5KWlYSzhsYD9GYSoyVGBxZj1yL2F5ajA/bSEuTjNSNVZ2aSFJWlEyUl83NHttUDlwN2djdUx+NF5oWEUwa1NQSVlCZUlvQFNhQGkqcHJPaHxNMC5MODVSIV9j'@;
put 'P0N+NTZqayYyYmFdRClEa2dFOTZsJStWNTdIciw4Ik0rSXssWVI0Rm9hPnZse2p7YyJ+fHR6dl9qb3R1WXtKSioxQ3hGVD4hKURydipqbCVaMnVsa1YsTV1+ZlZoZ1NnME8rUVF2KjhjPE8lOT5uRzJkMSg3dVtfSHlJbzJEaT9BcHJJMHYzZGJ0VCN9ciM4ZkkzcEcrLCxgbnV7TVtFOGhEb2dE'@;
put 'UDJrczpKaSZVJF8sX2BNZlpoPlQ9S0xhR3JvLG9iM2w2MlFOJW9TWiVhPDtYPn5LWlJRWmcxUGBDMjJFciUsPSZvSThka35EPE85Wkd0S0RsbFlwPnh5SzAlWHhoX1lzZXtoJTheJkw+R2hwelEmeSg3W0R1RV1UJWxGfW0/MzgzRmIlIVg3aEQsWU5DYHRneWRzfj5lcEJNXUloKDZ7cDA1fENU'@;
put 'I0deSUs0OnR4bnxGT0kkKnQoLiU2VmZzQGcjYV1Vb1gpdFEqUDo6Ml0xRkclTXV8PFZldSJ5Y1pwelN2Qk86MXthO0k0RDp8fFRFPDlhcismakBCJVdjKW8qdnFXd2kpKVA5JkQwfkAjOFo0d0tBMEQxUC5xWERebkl0PFklXitUNFUme21kS2RrV3VkdzF9Ik1QckR2dDlHaV1fej13Sy5vTWFb'@;
put 'YGdVKUJ9NUFFSWBHfDFGbiRuUFdhaDc+ejxNe3g5RmdqPyQzO3h6MGlMals5QD9iXk1ILllPMnJ9JE5iY1g7I2p8PSxVNz88O3dfVEcqaE5TVl9aUiZaSVNyPi5XYzNYW34ub18iQF5XYVlIfiRmeD1Re0I8UChtXzh0aDhzLE9HQSYmb3VkbVMrPXhfXzQqQ2BVbTcuX0YhKTVkKldMfH5gdTJa'@;
put 'PDQkdDtXSCp2L3A4bV0qPHJpVm1GcmEkLzY8W283Kn1VcFhvYGluZCRae1J4U3MpSmohKVRWOSg1WCY/NGo6QG1zOUt2MmtrUCE/QyQ7JkR4IzR0TEQyMVYxPkZ+dUBiczJ8UGNZTF9PV1s8ai88KDVJJFN8UnNgQnhdIWdYNGROOD9AIzhLZzAydyw8SDEoUCVNJStyZDk5Wz8sMUI0Mk5GNDNa'@;
put 'UFVCezB8VUFeJW1ZTmR9ZzVaOmA+IykqZChTUGY1Sm9sSCk5UEY+S0h8dk5EI0xbRkBoNlRfaG8iUmskO1hXJjI8Pkg2Z0IzRGYobUo3VjFiUktDWXk8fiJvan5KJkJ+dkxNRD90cC9yWXt5ZFFXek5BOz9DKUNiNGg7Ti9CR356RiN8XzR2YS41JjplQDg0UkhaUzM2aVdoTmshOVs/RTI/Xjsz'@;
put 'UTRCVkxue3QkT0cvKj98YW18WkNeL3NLfGBVRiRZWlo2fllBSEo2bG0rUHtSVlpHJjoufS40KjZiTT81X25ncGd3I00/Q2gjSGY5dHNMfCtXU0tsR0VqPH5ycmlNRzU+SVU7Z0U/PXs6VnorTlY0bU47b1BUWUdUSUg4ZGpMSy51YmBmV1IzMiRiJil5NE9lWjspQ3dkMX5qWVNfJXY+ZT9NTkNT'@;
put 'X151bClEVTpLQH4vNHVjPDkxa2I6XWEzazBfdSVXOmA2ND5HWVU5RVomc1NHZDk+ZDk6Wzp5JkhFTF83RVYyWj8ifCp+KzQ4MWZ5RlN5dkBIQzMqWzpaM244K0FwYztKLyZqWnV2d1Y/PVMic0VzcV8oViRqX1ZhREdeSFlmYUFHSHF5eFM/cXJIfXk7fFRAPlRGMyo9OHk7azp8JHA+RFZnMFNY'@;
put 'Yk9UfFg7VlVlP21Tdm44UHB6TlsvTmMkNyRKODJbXUAwbCpkRFlFdzEzL0lKLl1YdiREWilxPz9JeFtKJE4uTChFWjguaWBbRjhXeE17TzRsX3FsLCFdd0JNTWAsTXIzQyFoTVJ2YiEjPX5Se14+VXxhdms9c3x+JWlWP2txcDZPcSlgb35XcGJJWm5ARUkuUHBGTEY5MSV1MUc/Pz5oNj8veGBC'@;
put 'YXFxRFJ1Njxjb1A+YWVjWitqO0U8QyVdaGxdVWUzX2FWb191Y0klJTRfdVl5MWsiZCxbQVcoaXBdUHlBXzJOfVolOFFpOj5Ce1hyUk9BfmM4JlN2JH56OyZASmlRd1YzNyp2SDVbeiE9T1klZHdLPyN7YEpbckJCZ21eZmRxXnFhKGslYmU9eU5HQklTQFBjcVVzK3d7TFIpakYiclB+N0Q+JH5o'@;
put 'IkcyNCVmQE8jaXFoVXc9cT1LQ2JtcnZ8MkJTSEx8VzMoTioqdUUzN28mRjtmUjQmNk5BayNTQTprfEtocFhZO0FFPGs/K2JjaltjckNYTll+SGxVQkQmYVt0Q1dIeUcmWGFjZU4hajsuVSFPTSFUVypETG5YUThxTkMha1daTD5lQGJ8Pmd7SSFzPyM+XkwwVCh8JUoyfHdAa1ZCWXV+M3g3Zlsq'@;
put 'M2MzPGd5MFdLcE1FdFIsOXNjQGJ3SzFfUW9wIVpUZikkUz9tUywuWClYNWx3TWBPNyxMQWtFVWBpfUNJKU9kNmR4NiRBRnp+ekFMYDhPfFVUNm5LUkFJJTVlflQoUV1dM0hCZnlmSSVqKkJub2QpS2xlQyxFdGpMczBnRS4mbz5ZJDE4eyNuLjNZN2k4P3F6UlMwRTA2eyJeUF95U2E0RllBOXBG'@;
put 'VGs+aV4oJGhoYnl2OWkiME52fFI7N1FIVFlyeTEjezZ2YSIlOFg5S2txaUZ0Jk86MldXRGJrM186OzxyOCRORldZTzNMTSlyZF04R2w4LCllNixBSjFeUUlEb21uPktJQzkpSz1fUlNVKTtkeXlDSWN8am47QypnY2krSGxYRFpYT3U0OzZibTZ7ZkE3QjgiMXFAQFRyL2JDNFBZIkY0R0tNYzp0'@;
put 'RDQ+P1JGbUZHUUl6cT1OVERIYGE8VWpvY3QxS3x6WV1sL2lrTDY3TVdTVW8kKTJuIytRXTpFNHtnZVFuRWpxIW5wPz5sWHJBLiRVK3NpQypIQiosVSt9Y2ZzKXAhZkMmaUUvWyhTSnRjT3RmXTBQX3pEQjdCN1Y7Pm48WkVdY3A6aTlYViRjM35feiJtTDlSYilwWHp7dkFbKFJAZHNsM2JVJT5H'@;
put 'LmhvSHphPjV6VGI7Lzp2ZXM5aSJsOHNSOzZtPV5sPkpVaXR2ckUrZ18xZ2JwLFV4Y0NbWyJhWnZKNVlZSlkyVCJzS0RsMUFBdkgzUG8sQnFhdVJKZV4jYkdoQHlKPTtPXVBoPyFALDM7YGZGVit9fFJean1dMlF7Mm9HSTtCcnp3LFdPRWFwUGR7PlUxJlkxVz94WzNNZWFqcy47eyZQcDtkO0xD'@;
put 'ZX5qJFAraStFeGksckcjOXhjX1ZWXXprflpGfiw8QDdObWM9dG5uLHdWZzp4Qy9UUU5DXkliezIlWU5RKktdWDZmXVJ4eFRfbTZ7PXB1STVtP3RlZkRDdnouYXYrbkp7SjRRRSleV3U5Qj1dQjJ4PDw0WikrbT4zK3NvdHFXRiZXRSN8NygpY2NUdHYjdVQjcWgvKWNXfkdsUkE0dy92QyE+Pl5h'@;
put 'd31WaitYZHl0TGxuZj9YWSZ2LCpZelpFKTdqfC5wWjhEN0lKNT90S0YlSFg6WSN5NzU6LHE8OnRTdTl2NSp5OHBIem58cEBPI19hJDokMGdYMDlubnUicldFK0Ztfn5PIlZVWnQ1Wmx2ekd8b0slUzM0PHEvOk4veUVDUW5saXQ8cnd9Ty93OkU0IUdUbTxFOkNMSjsyQ1RXaHBGZ2VDcUoxX3hn'@;
put 'QkhLTjxPfEluRUp5QitbcXc8XjhTe1lxV3kpbVohfGo0Y2J1enVWLlJMRFRjdmIzWW4qXyszTjIzSkgqRXFHam4hNipFRjFqNzBlckh5P1FrNGVrTmlAUltsLDIzJjJXbn1JV2xIQjBuUW5icD1xVi9mUlozN00yZDl2WkooJjIua0tWOD9qIlcpWThxayNqTCshKDJiTX0+QXM/d2JAXl17LGA8'@;
put 'VUpOeGNeeUssPWRLTFVnVSlIWnh2WUBQSjRyJXhNbjsuciEmcj5Ue3lEeSpaQjYuTDdpVml2UHVlcXlfYnApJGVnZis/akFCU3lIJlEmUXZuNV5EXUUyRUZhXlBIYztwOD1pJSFXcCp0eDo3XWgkX1tWZlNgYEhnc0pFUiY2eXp1XjRFLCopaiwqMkEmVEksPzEiUigydjRELF5Va0o8bDVYXjZn'@;
put 'Sy82KW1pSFRrViM0Rz9OdntfNV8xLHxJMWFhVjF1O19YZWVWeExBbERxaz85ZDxWUFAlY147UDlSLisveSZNdUxYL3FlIWNlNnJNcCM6P1JCS2lEPjxILHdXXTFjWjNUenM9QUpxW2gqOSM6JjFOYmpzPUZQRWpmL0p2a14pIWRtRSwqbllAVUhARHdxV0VCL2ZMNmRYVSVgNilUUWx2On0+aDxC'@;
put 'cVRdVUlAN3tTdSldV3gqMj50ayU5KyRdbEVzTTl2JmV5M28vN28yMjVwbSxSel5AbEFlMHJAbCxBMjJWQW4yN1pxRkhBdUx9RkJSMCEvOk4sakF3Q2NTaiF9dkQ0eWh+ZUQ3OTNnd2c7RCx9QjolVnZATnVMLmU+PHIjaFNVWm8+YC9hbXZCS0lGIip7RF8kVVFYKDclZTA2ZWBPQTQ1SnlaWzd5'@;
put 'LGlhdnBycTkrbmpIeVJGPk0kITU1VHVWbDJxWSJZcT9MZFciMVswJFYhWzhUaHJSMyRsLkx3cXw4ezNnNHc+M3YydTQuRlU7aWF2amFebmRURFYqQiM8JGQ+anpXZHlpRVVnRnkwJi5iSjxfbUNNJkYlTzdWcDg3aiwxTlpJVWRNVGhbSTRRMzgyemhsVX1KUTY9VjtuOj4jeVQ8NXl2d1g1c0k6'@;
put 'ZT9APjQwUlpmeihzVlFIPD1IVjFxSm1aMEg7YFQuNEhXbz9pcWFzTiJ5dlEmYEBSYn10NHZKOTRNOX5aals8e29nRjpCPyxLKF8oL1Q2ZDYhVFRuX3hLIWJhQHZOQStySFN2ez4zSGkqeFRzSSxyXkdRQm11Ykdtb1A7JTZkUmskVjxvP1daODBCZ3xDfil7Ly50RWhMd21OYmhKfCVDeDB5Unx+'@;
put 'LjREemhDVFhAUCZ+WUUiT0huRl07Jkh1WH1icHZbdEtyPltWZiNeOUwucVNOfjNdaHYzQ31uPW1uaCpUbzJ8bWckeVslMG44Z0o0dm9QMk5JRXUue2BSQ1IoSkxEe1hBSnNnMGZdcCM4dFRjTGphUmNKTS9DISl6RlpTeDFsUXZEMX4hKVluMUpuKW56SkhMP1RtXVVZNnt6ey5NWTwuQ1cjJGU7'@;
put 'JSRXRjklPFgxVWswIU0vcW5oe1NCQF9tXjpBfFV0cjhRI3g6dWdQbCsyaklgU0AmUkkvODxocS8mVWNGL2FAZ0d2UmR4Tj0uQHo5VFRhO0J3clt9U35rXV8yUnBnJD4mcTF5RDNpNHVeRWdiJjRuRmRjWGBzKmQrOCNFOXU+fGF1a2ZxXmQxTFJjSWk3eDtuJWI5KjVNMzxIOlhZbFEvWGZqfF9q'@;
put 'ZnNjIUh1NShIQCRybG1tbWVwTmRFeGMhcz0rV0c7V3x+cWVOPVU2P3JvQChGbitEQWZ8cCQuUWxGKHFERFhEaFV0JEZIKHZGMVhgPzU2RnglO2lyT0Q1PiZVYVgpPWxSTCYvdHJreCp0I29hLjtLPXxLOGk6IX1TdWZ1WFc+VWZJYUBYcjp5c2VhYVsvfHZNIyVbMjZrM2d0XmNHY1VzJiNzZFI1'@;
put 'T2dtRjlqN0dMXVZeXlZ2O2BFfWg+bjE6MUM4dDRwJFRwNEphUnRgNW5FI1g4XngkUV4jMHo9blRvI1JVbUsrTzdiLDZ+O1VKPWMrIl53Xzoyd1UhZl5fbSFhW0s4KHt2diVDNkdmblpBRipNMnVUXk4lZkFFJGBoPzgpPihRfUZvN2ZbdXprN0ckXXFXbUdkfERLcGhJKDVbW0tkZCllK1s1I2pr'@;
put 'fUZNMGt6KUJwPDo9QT96JWt9MT5VX2JbTi8mOXR6PTVHRlcsNm5pdVN8ZFI0bW9KUD9KbzEuQCFMNmFxbSIpciZDVHUpMWZPekh4eHtJVW4sJVQqPXlMNH1jcy9uZ00hOjpjVC5ASyRrcT5DKDssWHRKO2JWVmBGUj8jeE1PeSh0W2s7aXF6TXZeKHddKXE8W0VpMXtXcC5jaXQ+QFBpMXZFUmE5'@;
put 'YGlCZGovSzhhMzthcz11dl54PHdzMHMmQExgMm9iTix2RjFkazQvfFAyJUB+NHdDWS4+JX1INURDcSJIVVEzPGh+eUMwbmNCdXBQVERhTEk+fEUjNUZTaWNRSSojQyFfe2wlW3JUcyRWQDI7IjUyRDk1MF9BJHR5Omd8MntsOj5JWkF1eDc3QkohPk9PSWxYZ0x5cE5kZXddJT5wN2Z+TSslNlo0'@;
put 'XzVmSHxIRl9rOFhyJDhhLzBweD4vQWV0IThDPDQzMSRhQF10bCRUWi9SXVolWWYxb0ZgXU5hITYsO0ovbUJHa1QrK2UxOV5zU3NbKE5edDIpTEhRRS40RWZnPX47ZGZsNzZPdnZ+ciZNKC5lZlR6RFY2KFtxaHElTjpzN0kwRSMuKWxiam4vOjNPbiQraCRmIl1TPS90Vjx2Y1lvK0BARzddcV98'@;
put 'Zn44fT5AUm9tYlcoUEN8RF94MlRyMCl0KEFAbi5HbCYrbTcoVExdanJiOE5WMS80aEBURGhTQHk3e1IrdktFI1Q3VE9ocHxNO1oqJjZEKmMwODRTSCM3VFFWUn15LjBMeyldQUt8PnlUcmJmZjwlTWVhfTEyXilOVElZOzcvcEpNNilzQGRVO1pkVHQ/WnVGQDgoUyRyeSUvRUx8PUl2M0RFJnMu'@;
put 'YXg/JFVmV0F5I1NIN1AiaEZze00vdFBCUl1sXzhIbDcuR1kjODFANndpUzNlcjdoOzU6bFszPzgxXWs7MXx4bU9FRUxiaXc+WUowajxpNDFNKkNXZjMxZygmY2NHPih6WWpzKj9XJikzInxmaGhRKzU2cTw4aH1ndkgyaSg4PSklVGQuYiVqPW5+W0xbYk8wIyo+d2tQcnZ1eSRtdlJSVi5fMkt3'@;
put 'K0FYM3U4SVhwe3RlR2p0amhgOlcrREN6JDdEd101PWIqRy9VYnB+KzI/PnY4R2NuXlsmanlvd3ZfOFlLcklMc3NCcSxka2I6WT9QbyosV0dsWHg8Y0tSVW1OXUI/X3dUK1tBRjNSZEFTQHVjcm46NSQwKDRLV3loPzB6KChNbWQ4Y0xQRSRUeklFWWksS0tpbDc6RGdJV1t+RDk8ckVqJSg+dE5P'@;
put 'WUN6dE96Y1dCYSpCU1k7TGpmKT5ORzpOLjtxW2ohPEZvUUo2SkV0IXo4VjRLTExyTmlia0RRb2ZVd2R+OkxkIl9VYkY6Y1l8fCYiZyFzXkY2KnhWTlZfJVcmT2BvQXcyeVFpTiVpYmlCbmRER3lANm9BNEx+aDIvLmN6RSlKflgrQGlTRTp4IktKYW19JUZ9L3Q8JGE2RmheYDpKWSVCK3lsSzZo'@;
put 'YnhQN1RZXkd4RUkmK3EmN09kJWB6WEJVP35iRkhkT0h1USZQVlo2YldRcyljRStjWmBqTEFRV09YfHFbKGVzT2kwPmkoLmFDZncsMSZyeEVMUCg6PlU3fXAzQXN3Ujl9VSpjMnU/OTJAKEdpREk/Ol4mQU44fUxvZkZMaEAsSjBoY2w9fVc7UXg9eF8kTGQ+Q199QHJJOFk5dGU1S31aIytTZk5Z'@;
put 'cTEsd0h3Mz9le0gmWS9fRkgmdm59XjB6dH45cjN8RVtbZ0V8fks7XTpjI1Y3IWZyIX1ielROVHwmbmExfWR2cyJ6ZmlIbj5fZzcuZ1VTSGVaazQxNHg8ZElqMGc8cj9dOHAwakNCJTIkblFbXTh2biFGL3tVT2d4OnVsO3FMPDFmQWtbZFdtZFcvdlFXQVRqbXwhL21ARnM8KXVVQ1drbSV4UiRC'@;
put 'OSpubnBZKE5tbnxMUHteSCQpUXYlOlR3VXBDTz1bViowXztGInhPZ1J1WmdnUiJtVk8/PWlJaUpadUgldVAzKSRLIkMpOjx6JmQpeCxCaFsvVkk7X3FMUGZDTDF1UEosZGwudmV4RlBEYTA0KEg4WUo1dnNFLnpuMzY0ez5aIyx3cktbIyptOntUZjJAUE1iX2NMV2BoOXVXIVYwMTBPY1M6b2FZ'@;
put 'fT1+OUtGLmg7THJlSWJ+NFpPR0ZnajlHRS84KCJ9ZmZ7X1lmLlkuSD9iU0tQZ113UUh8Z0Rfc0MwKjVNKTBQakZXOjcxZF5OYGhwakkvJGwzfTpWSVUmMFdfOC50NHhfeEZUKjtXMEQpVXMwXiFUemQqUnQpSUVoRlpQNlRjYU9KQSR3RSJFUjNxQ3M3NUFVWEQmW15eKWNdVHcyWmZuISVtOytu'@;
put 'IzJRfjBdLm5VcH1bPn5iM0VWdGJ8bSFwPC9CK2EwM0MqSSU7dC4vITlSK35IOFVXJjZpbTImdz91PCtMbih8IU14UnUoITpVX0gwPXJeIT42dThybUpeOVgySj1OWmtdXUYxLEFvcmowSnJMfn5vXW1PVWV1VHJdajYuYjt1UTFBa28oc3JNelgzQk8vPTpefVFlTlhnPzNaTlMpbipvPWpUMThu'@;
put 'QlY0VzhEU2l9VUppNCx4cSowdlJzbzpUPSUyPUs9MDhLNXZhPyN4PGRsZFIsLix5SEdtcVsyMlg8IiY2WHUzW01oNWwqPGVtcTRsP1BGUnkmaS9hPytldFlDOHdOSm9lYS4pI3N+N3hXend8djYhJSpVSFpTJTlaSD40cTUwWENEZ3tqMnZHYn5nZj5tVFFZZVoyVCFqOHxkSWRfUXM2fEI7Qzlh'@;
put 'PitdJjN4N3hZVVFOPjNoc2RUUyZFWV5adDlofUhCQiNnUmQjQ1Q6aSEhInxTS0J2QSNWeXI4KFk+dVsuRk99LC5sYCg6Knd2OGo6P2RHcWcwWj90JHUxYmRmMTdIPFs0Wyw2JX05VFFRVTc5PURNW344ey9hbTw2PkIvU3J6ZURfISVeRzhjTCNoWjtBdXF8Jm1JbipGPFRfL3ZCJC4xO0x2b09r'@;
put 'YT4+bTpMR2E8Tmd4emR9aEh2fGtCYUNDKSE+bltDT3lLaERhbCVORzREM1dCeyVyPFFGfGhQVFtHRSVQe1hwdXtgVVd3LH1MNXZDQlslZjxNRTtiRDY2VUlGdHdOTHVFai9gPnwqMjhFP0J0IXdDNl9hWGwyMUVAeE9EPFhwI0h0QHJpWF1DMFBecVYjPXBDKGFPKnNHZ0BSIkNsSnlqbEFhRV5K'@;
put 'ezcpRTZKPTdXLGs/NCxRQXtJdmtnUjoqZ11CTl8pWiMyUWRkY2NlRCFtel9yTyYpUzJnbHliTkdKRCssbXZNOjFQYXlzO2swL3J3YFskcC9NUGRlPil5IkE/NW9wMDxjakNsY3o7YUhfNyh+aS9mNEE2NT9FNls8Sy5OTS96fk9UTlBNQWU8eS9daH5dZFEoMm9ZLFJ0OzdoIS4mUGU+fjNeWTBC'@;
put 'InpPZCFEbGFWdkZXRzZoYHJnY2sjLGFnbWx8ciNfKXBUPCNVR1hGZDgpMFRGPV9eMmRjR1JoSTdBNGQlT3d7UklQcSZLTTUiOFF2KmtrSkYoZGJqQE5aQXE6PyhEZCVeITQobHZ7OG95YUhwSl5WMDMwKT01YiVaTmYzRm0rPXJnOGZzXzZxPzB9bWxtVWtBV01Nc0t9aEJkKV51fEopfFBUNVp2'@;
put 'WVZ7Zm5JIV07NnReXXU5eXpvWFFINFFfbHY4US5LMyp3QztkME5aWkdQJiRuTVg4Zz91eH01UzwsLzEkYj5RNDJMd2lwaz0sMUBwOmIvciVzZyoxPT4zenQpYHBpXXJNO1p0KkE+YUsySWJZVSQpSHAlRCprL3dNZ0lrcHxsNWV8cFk5QzJXZH0xc3w2OiNlO3lHVkxdT2F1VV9nazkidnNLfEt4'@;
put 'Y2t+OGtYKnxhckFwNmBhb2slbzNOWno9dWhUY0A9NjkuKkg2W01ULzYiZm46eUhOUTZTUC9KX3trWF1QbH4mbUowe3EpWGA8YX4xIkB+dTxIWGQ8YzdXVl5LIS8vQVs8LGIqMmJqczd0I1NVdmxqO1N4TVt0QmJSKFo9ZHFyXUJqTzw7X1kvT0IuQCFWQFkqKDFZVio8VHA6JSlBcDQ7NW4mUX17'@;
put 'fDNPemcmUFMqJGZGI0RRcSNmdUd3STk1OGVuRERPbG9mYXB4d0B+JTgvJHkvLnphY2VxdVpXXWVIVlA7QndJOCFyL1tzZitpMW06fTtSYF5AcUBANV4lbiUkRVckZ3pFKnBJQmtnV1Y5WXY1Rl9qdlQ+dWV9Qk9WT0g0VFZNTG9hTWNGJnteKUA7W3J5VH1IJHtfWGVUQjt8aW54WklHdU1eWk9L'@;
put 'XlVjZWBaIVojS2coZnR4Vy9qb3hmP3VVRSpkPH5fbjsoIWBlJHE7bzJZO1tUR081QHlsPWB6QHROeDBrSFZgPk93a0dtPz53bU5vaD4xJHd6UFh2dUxxK31gI0NgeHR9VDEmTkRjYjpSQGNPVil6elV2cUowblJUSmEwe3RlPVExYmQ5OGM3WWlBaHkmLDZ2Rl5CZUhPYDE3flQ9bH15eH5IRTc5'@;
put 'ajpEfG9QTjJgLENXNm9oYVFrKWZjez1uXjUhcU1vJC5Ac1ZYe08kXn19ZW86JlRKMXc9VWwhUThaWHpOTFElK3ZtbGkmYnhmfnVQQ35bcVdEailsaUtmbWBIbTsia1dOaCU9PExrQnZ5Y0VyWDBueWpmMWNUWHh0Pjpga3YrWms9TC8pRSJiOlIsWEpGYyYhVik3VWtLW3YiMiIvUVslYGVJTCs2'@;
put 'cVhNY2paJmYuS3o9VFdQSThXPEpvWU8mXS81THlVbGU1YSo2WywkJXU5fFBaZkxURGwiLl80TH1gIlYmZ1tmXko/cVhZNU00V1E3bGlnd25ray85WmVffm9pRVByQUVSb2hsJG9Uc2RRNWt5ZDZ1OmhhdE5mcipOT0xuVSM4dyMhZS9QakNKNiUjX2RbNzNrZmVGLy5qJXxLaWZLMlt2VXd6SXFo'@;
put 'cEN2XSZlJFMrNWcxX2NOYnZXUmY1PDQqazVCMV5WTzBHcnMkK0x3SDhIQChdV3U1QUZWdDJuX09ATEwpSUlNWVI+WXhaayVMRSs0K3crZUxsXTxdRUNsNnRDK0ZeSyZEXkMlaygoSWQyQmFGUUg+ZUtBNDRWSntMO1Z0XSRDYlNqP0lkO3B4dD9WXjNaOSZCO1MvI3RsIjVlcEM0V2pSVlZFVk5u'@;
put 'eFMhYyNldSgmfigpWCpedVZUUWA0KlNnQ205LzFHLkNbRC5fY3VzdEYheiFRImpMTTE0PWhuTDNtRVROUSJJZE9pN0U3aiJ5TVpebzReWDpvMztNVlRLWkBbQGAhb2RfPWEkJXB+WipibD9hUmd8UC8vP0ErMV9+KXFqOXtkY0UxJG9nPl53M0kkMzU0cylrc1dqVkBqVSJvNismaChxJCh+cV5T'@;
put 'M3RXNzcwTXprNHUofFF6TlNCNz5ANDszdGZFV2JrW2hHcDVlZCpXdWw1QDVDe0ZENjU+fDdodWg/Mjgydy5He2UmcEJBJn1rOGJDMWQ/bXppUj81WDFAMGtMY1lVQDMrbVZ2VjQ4P0NdcV9KWXc1eUFwR1ExMywlNVpNXl9vNSp5ZSFxPHA/ZlVBaHFETEVXTn4+NUIleXpwSklRPGJ5M2VyIWZa'@;
put 'P1J4RTVJN158c0UkIU90WHZuY2JoJWw3Z2x1OGFiYnEkK3Q1V0BCdzxnYGJtJDY5UEBOPjc0U2RQTGRyRXB4RkZSTk10PUZaR2NxUkYjflsrTltHRUcoeTwkTWlvcnxrQl4rV15lPjtRcCNQV205cE9tMkFGaVZ7YzA7Xj18VDVGOC8zInV+Mmh0Y0tTKmEySUNXVERxL117VV8yOndmKmwlJXZs'@;
put 'KyFjO1hrTjA3WjMpYHo+T0J2KzZ5cFdZU2dAUjxVKGhQWTk/ZixtS3dUWiROfTF0VVFrMGh3KGpgeCtwKWc+ajlfajhvWlNTfVU+YkpMR2Q5SnBJemFwOHd5YlEpWWxbVTddJCIoVjtYN2JnQ2dKc29qbWIoSDNmU3p+ZDZyfEc0JDorfU8yPjNpdjFzeiNRQFtlJkkpQ1ZXK1glL2MkO2dfI11V'@;
put 'YUExeyF+fUdOczVIP3QyNHtqVyZLYngzWHhYR196X3lRKS4zfDFeTDNHIWRmS1p0WVhnS1JJV2lFIjxhVHc/RVppfEJHTD54fGxEeFVIajtQWltwUzVeJWg+fisvcHdkSXplbXE9WDVvWTgkO3NHOnM6ang5TkEhdD5mT3Jda05Ba3EyeGdFKnBSU0xRcz1KaTR7UylbJF8zOjkyd2JWZGJ1SUJm'@;
put 'O2wmNHciZ2tjPU5QbC4qTCZ7Un1xOSlPRigkZ01xdWsrWCVAcEJUdjR8NCxZaUEwRTc0RCt4SFNWeE1iUSQyYXdsQUokZilva0BndDUxcTY/bkBMcit2UXVlTUNsTVQpL11mWHhGVEtDQ1F1eVFdQkEqcEVrLDRHW0JyR0JhMjw0UWc5JElTWGlAM2RaRGBhanJuTVBvc18/VVlFP0dPdWhCJFoz'@;
put 'aDo+RUd8OS99QGl+a3Y0eGQiUyk+anwidXBzSWIzbnpiNjZ2TD09fjh8WXtoZUlRPkI7b0J2OEg3KkR8RDxBTWBXdnA8d3A2IT5WTjJBIUZOSWtbbDBSWVgzLnEpTitPeiVNLG8saD1ycXIiY3RkNkZBLiFwfndgeXg2Uk12dENLMXVLVE0oZ3wyan0vMltqRW8wV2ImaXZ3d0dLMD8mWWIvPCw4'@;
put 'cXNsaD5GcTBPcyNEWEYxMjM9OCkzdkYyQk5fQyJpUUVwdmt2PE0hZUxgTis3WntpPFE8PGgoMChSSF1dNSZ4Mi4hUzY/ZiFQWlouTmQ4U3Q4PHd6JFMkSiI2amp8bl81NVNxZiZ6LloifE9ZdVdDTnYjVj1mPWl5JkFlKTZoek5mSXRfcix2aipSK21HIlpPQCZwfWJDVUZFLn5iX0piKjRjd0Jz'@;
put 'eXNwbih8WXtmfjx+MisoeT9MJmRMV0VeVkh2NS5zb0x1XWtDX0tMRXJjRW1fSkV7WSJOZnE5Z3o+SE8xfWQ2WjIhdUU0SiI4U1pRQGtOZ2JWfVZoRGImSnkmTmU9OFkqWEghYHoxVmdAU3Q7VV57QFlUZHo4bXsmdzs3SXJpcGB3NnQ0RyxbR0Blfiw/PEpZISJMZUNxbExgRXNvTGltRjUqWVlp'@;
put 'V1cmaD9OImk5I2hWOHZFaktNTkJUSFVwUEYkJXB8XXQlaW8pTjk4V1NlWi9dNjVWKEJYaElUJldnfD5QQHJTZGxmLFVpJnRHIlU7Pm1IWEghN2Q0fV04bWNFcVgmSn5YSTM8NktUfFE4KkB5Y0d5ISJPRUcrS0psRnhHRXk4Km5PXiZmSlckZks9UUs8O09ST1A0fF84NCRrMGBRJEZLNVNfLCIr'@;
put 'RjxOI1JIZ15vXjExZjUpQXo1QSwzbCRgRlQ+fDEseV1+RywsIjI9UXdnbTM7YiRnejJrOld9PmMpWV58UmdGVy89I31IXnUpMV98W187VntpOCNvaXdQSiNRRC54K2sxUllYQVFvSlFLUixmQVVQaHc4VGxDTkNDSVRMeVRlTm5lK3skIzw6dSV1RlJ6dnc0PXhEUH1sXVBwW0RpbykwXXgkczU+'@;
put 'cjZVaCJsJChwbHZTcm5OMHkyZXdAJjk8OChxLitzeFZjcVddOzVGPyFJc3htOSRsRDA+QXBORGg3SGwoSlR1e0JTRmNCVTZxTSZAL3ZiUUpkTDJ5VWEqdyxjK1h4akxzMTIlZltqNlFaY3t1fVU1YjFAdUd1Rz9hTXtLQngwUnwuKH1KP3Y6UTBfdjB4I2Q0WHRoYG5ac2kyPStVVH1NSz1PIWw/'@;
put 'WFgyX2ptMiJsYERGalgjQVBeIyMlMilAVGduYU1+ciZPVG17c3tgQy5aYEZMNT42R1RvNT5bODRTV1pxMy4qI0s1QmFfRFdoYVBbbVhSW11zLjVNcFNKZ1pKUlRRRCFPMzE8ZUs8eD9jI2RjZ0R7bnUoay5xaCNwL2UsVT82Qy8hdWUkdXIhcUZ1YUNneHUqbXFqc2tSI0c1bnViYEl2QD1eZzNq'@;
put 'QS9DfSkjMUFNb1czTTFYcmRSY0U6NiJIWnVZJmxAWXxaXWNdbW5qL2BMIUhGMmI6bDk+XiFBSXMzYm0yVD5+Lilbal9MYVUhOlQ0cSltRjZJeWdET088SVF3XWdOcXxtMWtpVn1mL202PzBYczI8e1gsdGNyYW1YJDFqK3FIajhHJDdRUkZIQzFyQVBjRjI1WXhKNF1vcE9HbDx8JkgxUXNoRSlo'@;
put 'UWh2Qk07MX1oZWBhQzg6SDRAcClhOWgvUiYhRndII11KJSYrckVSV1F9LClyP0A0Y3x6fng0NGohJEhkWXpyeW5EM3FMWj5jPWU5OGhoQHBIWGZBNS9ucFpZcWIqLlgodFpXaGF0SyFVfjR3JmNxNlNreSIlNTZ3M31zc3VfamE4eSt5OUZmPzBKTTdnLzJNfENeWkVMeE4sNE02SCttVFt1PE9Q'@;
put 'PzssLmhBXmJ0MFZdZiwrYyNFdiJRQSwrWjlefFc2aD0vaD0+fmREZnU2SDVDPDdWfT9TcztrV3w/cDYjX0dIdi5PVi96SSgoNDRKYmo9YihlRVliUSlPbzBKSCM3MUoxenVqVF5+UW9LVDB2NClIKU9TQjtldnVVe0BkVSNTMzloam56Uz80YEsoWyY7N2lnQn0qaHkodHFHMnxeMHB6bUZ0eWFS'@;
put 'anFiI3ZqVVcwRktBdWNzTmxNN2loK1g0JHNdJnAsMXMuSmEzLGpmRm0/ZzdBTUkiYjUzekZrI1BVdTpxaiNuIjBCRERpbVdLdEpNOz5jcVk6L0JAWSJpVCtpSHZdL31XfTA4UVt4c01FbFM7eW0ie1JgJFQ+QiVCJGtzMUhneC8/dTxlN1lFWVZzYEsiaFVRWy9HOCZnPGY5bl87MXhFIzUoblNv'@;
put 'Wns2Qmp1ckVtU0NMImgxSFNWWjpXKm59QzF8NHJyWCZxSThvbXpjKj1Ea1pufF5sNVVTOD50Ok59fnQ4VltlfVMoPHZ6LC5GYSJbLH1aTkU/JTlle2wlI3N5VXxyenJ8L3ZLaHV5Ojl3JlhxSjpbVns9QXJkLmt5ZyEuY2NaSmhpU35sPT1lIXxeczhEY1hkQ1VPYEwrL3hnWC9wMns6b21xUV5Z'@;
put 'Q3cwMD9ScmE/IzQ+QHgwNDBqVmk0MTI1PHdKaVdUX3FYI01wI3FSWGhpfmVjOEkrUiF9X0YoWVZzTF1MUSN+ZnxFdSttM111KSJiMCorMm1SQzYqNSQwVmtqVD1tX0RQLD5VcFdKW1hNKiU+aUlNN08jYzZePGwjcV8wXz9tUjBlIj5MeSZyeltTL0xGbFtiQDgpK3dHWCtpYClrO2VnP0JBOGdN'@;
put 'Q2xQXnhtbkU5OjxWZCU0Lz8wQH5HVm1Bdzo0bWczRDJuU2dpZD8mPmRkYUIlcyp+TUxCMEZAVnBSQ19IZSVPZ0Mod1FeaCFHR0BJPUNYX1hFKlNMcnVWMkVXRSlCcFlsRWNIMVdTP2lPUzU/TXR9dmh7ZnxkKF9GSCslOktUT2R3WjskKzQrXlpYeChqTFR6bER1P21RcV9WUzRIMyh+OXFXOnNp'@;
put 'fGZKPFVbN0hmXjdVQHJjRytaaUQyV04+KXhVaGt9TGZiTDFvLHZaUCE/YClIPzRAP0hfUTRiVzdZZDg0ZmQxYUxGKT5yN0creE1hVT99Q1p5Q3AmdEFPXTBhJXQqSylfaFMsMyxmPlM7RntydjtHc0p5bkg2eUx2eEFbdTJzSmEjeEtLR1NIZVZOWXlgeHRKZ1FEMEppZjcpY1dgRnNsZzloI0lC'@;
put 'VEw2bUVsbkx8aXVrPihfZWcpcXAhVFZaeykhdjJPcV9tYnkrX15UbkdtKiEkQ252OWlVKzssdDhhcl9CKkZjUjtGK3h0TGRhfT44R0ZEdTJsZCN7Uig8Sk4sT1BkLFZ7ZiN1UGpMM1AwUy95YSg9VUU0Ols8XypZV1RXZnsiRXVSN1hlZkh4ZCpVLD09WCEyYGZld2o0R3tbMCJYeCxZSzdONT1p'@;
put 'RmZLQn5+SFFOakxfRUJmc1BnTXg7UW9DRk1CYEhnbH1fakw+VD47YHpgYGM9W0U6QEhDIipwbmxCNlhJemhHMD9Fbk5FRVFJMik5djQve0I/cWNgKzpeYl5RVyRVd3VLWlA/ZEV5Onp2S2AvazF9d204TEE3RTBQS2xtITksKnZRIkdOI314KCUmL3cjITNyOyFTWUo9Oy5CbTV1TyI9aitDZWdv'@;
put 'Ul8leWgsPHkiMWtnNzBeWk5yW2E1XlVLZWQqJEFNUjwibnNXTmlda29+VjZYcT44VjFqM2Z3c3dyUyh0JHo6KXUqcWtVcWk3Jl4mPzhyd2EqQi9YaiVHcllydT5zT2wqU29xY0RBKlIkVVVPU2p5WlQhPEImYGBRJShNQEBhcGs+PF9SfU1zI248UDRRWU9CcEZOWTRTeTNiaT1qTGhuQDxeKWFD'@;
put 'Jk1dKlp7fVs8P2BoTF83MTZRMClFZFNqbyEvfHs0LktsMyZORXlmXil5YmQucChUN1lFWCl8PjR1b3x+LClMS0VJei9eWG5KWz5gNX08N0cmMW5NYkQxb1NoelR3JVRDI3FdYUA6eDg4aChTPVtfNEsoZ2cvO2JwfF9zPEMkJnl7fkdmY1AuKEduTyNWa2kpKW5fMjsqXiVZJk0jbGhpM0lxaS5T'@;
put 'R3twUntgbkN6NDVkPywkVX55bUg2bCZMNCUkdip3YFYiblEmS04wYD5XQH5MQmhmNTh3O2t3V3BQVHl3Uy5EKHh0PHEyYGVMMjAiPXxOT3IiR3xPUW9rVlAlek41cVVfXjJ3clpmZTpTJXk8Xl11TUZzdWNvU1hoUEZ4S3A7XnMwZjRYcE1VYFQlNilOPVZ1S2ApI0M1YlpTZDZkcEJiW2NlVUlH'@;
put 'T0NQfj0jI2l3PUt6QVlXdHxhMWNAbVIhPH5XI25aPFVUZD9zOHg+UFk8T1B+fl9Xdm1bRmdNLyNMKiNeb0pYJTI8RnVAMVBfUmB8MCtfMlh6ezA4cCEoQk8+WHJTVSQ6L2N6bnVwLCYkX0slIU0yV0IkKUxyfms8ZkZjPEl0Wj9PVnhsM0gjIy9scDsoaWJ2N2JXUC5fM3Y2dzZwZ2JPRXclaEQ5'@;
put 'cDhVKDZTcDQ5diFvd0lDLiROM2VbbmNULFl4ZXtOOnhueG1FV14wLElLT3MpeTN1OHMub21VVTlBLHx4QDBuJGoiYW8qQyw5XUVePFZjUDI3QWF6Nn4kO0lYbm1yP3hTbGRKSj9hOGckT2djTDFKMXdAMk9lcWdSW08qWCNBOGEsIW1PbEJ+dU9qZnxnO3ttdT5jeGV1aTFHXThGOyNVKk5VY2Nk'@;
put 'UjA4YUpPZG4wJD9xOighTUZrOFp9L2tNO3Y/XykrKV08UnpaJV87ZH1qdSRCVz1JUlVCNF03WC9AOyN1NEQ0Ny86b0xFfXpwNXMhRl0kUGtjJC8+RW0iTWsmITcjQUVUdDZjRyE9K2ZnbHVhaW8kIW5GUUFAKX54aVBTdW9YOCQ7Yk1qZGsyUHAlXiNtPE84Olo2KXUpKXVPUGBiJUc9RTIqVjdG'@;
put 'RyYpdiR7Wkh6PEU3Ry9LS00rXkUwQS5Sbz4vJm5kQTRObClseHJWfCw5NjhZPkY7U01taH5qOmlpPTlMKDV2QDhZZk08IzRLdG90RVl5d3pRJDRuSUV4W3dWL1tpYyNUUkZFWlgpcF82KSNrYlJTT0ssdz1fNGsuJm5KUWFSXmFQUkIlR1Z+WyEyUkp7UGA4O0dBZDo6fmdXWDE4aiQ/UTl6YiRO'@;
put 'flB8fHFafiV0W3g/WUQ8JmcvN1cvOn17VCIzRWlzazIzaEQmX15gR1RNLjV9a3tGN3UrKjA7UzlnI25OV29MWX5qJEZnVTYwdXxJI29vdl8sOXdEWFBJMnQ4fkNmcCNXTyp3IXYyJilKLmRdTExNQH40aShhfXVSQVpmRGA6T056cm44JDp+Qjk+MSkral54Zko5SzJ4TVtjZkh3LyJVNT1HRzVZ'@;
put 'TnddSlpebzIlOCpEbX1hW1NlMjhBRHU1eD10Q0RGcWNQeDcwPVI6RVV6YWgiUU4/NFV3aVcyVWpxRyVAOGhnbzRMd114b1ExQlZtYjNPK2ZWUVd6N3RjVUozMHsvRGMlNygwWW5tU2cwTT9LKEQ7L2c8MFIwXSEoWXhOeDZmUXcyLjQ3Ljp9THokMlsxMmtVOnJ4ZWQ2bjFlNCZ9PURUO2FLN3JL'@;
put 'NTB3LE5ebmZbfWBgOntDU3daMmVxMnphWC4mZXxwMjNuI2cjTHMlVDUoLEd3M3dSOT1Qbjs6QHtPZDVqPFhPN0ZMW0pFdj1mV3BiRi9HTi9MV0srLElWNExWKWRJSj5ldCUmRjpuVnFQQ3RWaClgJXkjenhKfk1jM1cpdnV2dDx6YS9uRSYsRHt+W297e0hYRWQrU0lQTTt2Ikc+ZCxlMmwifEN4'@;
put 'YSopa2siaUpSLkJrKCNlQjN2cz90VEVrWiVMYjlsdWwvcFlDL0xpaVdvQ0RbfWwrcVhrTmFpKkJ5O3pXP1FKPkk6WDwjckBePC5VU0VVY0sxVjJlRzMmL3c7fHl2M152d29dVX1pZH1oOUtpK1csaFVEWTFHUHBOJUdqKypvPT1FcXFdNWZre0pacT1uUCZZckMmQEVVcDBxKXx2ZjE/S1M+Piky'@;
put 'XzhJTSVWeChZU3Bqa2VIPWs5b2pHZiMyfHIjRUxuMUNjbTh6QX5MS1t1aUxILmdpS3NXNDIwam1uaXI7dGJOYCxAKGIzO0xlZTpyLCRMeDFVSWNiQzsjPjhqSl4yUk1+ckghazcoRylfZ0I9TWMoeHJ4bEkubDE4MCguW0hPYiRoeXFNV2BAU3FPcURWfmtSenF4dW11TVdoTzwuXy8lbGRVYDFH'@;
put 'Xj1deWBSZ3d4TC44WUZMX242TlFiPlJZNSgme1VkZkR4JT1pcGMjLiVhRy98LDMxLEBOP2tdR3c4RXU8XlR2VFtqSnpWUDtAb3VDZzdjb2QzXjZPNVMuWFNAaip8elhONFZLKSVVXTtMPDNoUk07bX5EfT5zZHY9dmZ7fC8zclNWN3dZY2NQMjRyMlhyU0xmSz0oeERCL0pycXFBLjk3YltITj5E'@;
put 'LEtgbkUlPzRvW1AiXUU6KzdbTUlzQENTR3VZWmlHaVRnVWJkYmZDVVg4RjI/aCorRmpaRF8lRnc6W2VVJVUpOTlBVF9HSDV1fnprWG4uNlIlfWEoTzI2YF5ORlRBd0pkTFdRdkwwUyI2eG9JZTdkWUVXbzlmPztLI3U4PncjKGFiJXArKlQ7JFpWYyhDbWs0MERrcStydWglNlYoS0xgZmRfcF1d'@;
put 'en5Dc29dN0V6XjtLREglNnlIK0ZWelsofSF3dTNMKEJLOGR+M1EwKytwRWFUL31URGhQOTJsNzM6bHN1RTZ2fDx7MV1jbzRuUD0yLFd0a291KFhVRU9xSi5RQT5QSCtaJXlQeENAc0dWJiVEL2VwUHwpTFojTzBkTCImKmd7TyFQaSZxVDRaSz1wZCg1VnJTajBhY2lQaXMkQj9ocDV1RVtGWGpt'@;
put 'azp5XygsIjhtYHsubU9bXjFqUj1oVHgjU20rL2pzez50T0YjK3RPaEtuSGwlek5ZWX1rd2k7WD1Ra2RoeG5DV017aWZxWDltTnBoXTtRcSVmMlFFTDlkR3Z5eVFeSFtvQyY2PFhzUmgoLiNWeUtjcG9MRkdiKUF3RWgvaVY6fEJmcyFJQ2RbYU9qaSo0cilVa3pXNSYwNDFuUE00U147TCpaTHwp'@;
put 'JWsqSy9tNXA7WVtgSDJdVHgmJkBQL2AkL0BOTDoiSjg2dW40enFdUnclLDQoVDUzdj9Wfk1HOWhPK2xFO3ZDMXpWciQzQCFNOF9JaD83R01UUkEkXyJjTCJLajoibztFem53QDQpXUh1dztsRH0hLkgwbHdiaWpdaFQ9IjNfazBKalpoPmtqelFNQlZeKnY9USV0M3V0R3hmLlsuZXU9RSFnaj09'@;
put 'QkxqJmg8QVYkZnIrY3YiRWlpZCRZNW96JSEmbkx2KlJYJjR0RkdIXlh8Y0FEO0ckckcpP3I5d2gvNXZHLH06WUBiTFRWfVh8TCp3Uk48b2FjQ3NOZT1yZnt7Und4MDxUSy59cmZbeWRaN25Mbyt1by5hN3Y8JDNWRzFhMjhWOGwzZ3FWOVc0QE08QDY3JXgjMHpKPV4pSDo+WX0wMjZTW2BMNHg8'@;
put 'Z18heFpqYHErITgjRzpeRmthVDhxQ0FOIyZ7U0ZVcUxrUFRqO1RjQHRDRmZtayRCT0NARiF4NVdZcTFwNCguQTxrUn1ANUQ+aFBTNG9mV2NDR2Y3Q08yMHpqd1lmaUpERTJBflAmWEZfOUhSISQyVnY3Z1RqVT80dWcrJjRkZ2FzcSszezp5bG54b0xIcituaSk/YjkhOU0me0Y/cVQlXUdMLDRe'@;
put 'cmcrJUtfOE9LP1NON31uOElCSjxdcC9tZm09RFMxLjtoaDZTKlg0anxCSkUqOTVwdytoQFNwaiV7TyttLHxGKX1SNVhjOHtYcD84PnM8VzJbSlREImoyJipGMU90KGU/dTZWZGE1RWc7eE05ZkgjNzdpdEcsLk0uYV1QcktsbHRmSjBHNTBrQCwzNnYyPi9dTzFHanFWYShvanxwNFsldmFSTDto'@;
put 'ZD1iOWwvRVJuViZeaHxMTzRQbzZMMHEoMjMrWUJDbV1ZZCh2WGcqKD1kaVlzO09dcCFoWj97RmdFK04lRHRMbipNfHAjQCh4JXZVRyh6c05fI3pQaDpycVlhOVtsQVdZND9xdVs5UT4kb3o4XmpaIU9pdXFDbEAuW3JMPlkrXjRsVk5rS055Yz1gb3VJK34/RzptWkRJZn1IblhzXTNVWFppR34p'@;
put 'Tj5PRSR8VDxjLktedUlBRSFyeDJINyVtVkE8W3YpRFNLXXI8c2JvW1BJUj4pL1tBeF4mSmBRb2ZkZDNWQ011b1YhT0VHSClAdT0obiVJYm51byU6KihrNlgzZ3FoSmxiOTBMQjlOMktCMHozfW8wfC9ad2JqPGd5YztfVik0dEFTVkRlKXVvMjdqMV45em9PeyFFWV4ybzN5K3FOfldpUSt+RSx+'@;
put 'akRDRHp+MSsoLmMvPGtkRW92JkIoM3tUY3l0ZyhPeCVeUS9rNGVqL0BoeXZiTDkwfmkmJXVAYCN3TTFuP2tCRCglQSM+QHtGaGdXITk8JlEuTlNBO2M5Vzd3KG5BZzY/flpJKnlBX3w1VW1HUVY1JHQ0YGhaPUp0OTluRSRuKUdPJk4qfTVhKlBlfHQ3PXFVRS5fW1B+Pj5oXVE0fFlrTTtDbCQk'@;
put 'RH5uKThxYGUpUmBsRXlHS1hodHU6MkA+Q116TVg/LC9MRH5ad301YEpwMV5FSTlgajQzUWIpOWljIXNEPGExV1g8ViVKUGxpPCRdcixaJXpObjV6P0B2VT9TQi9tY2p7aXZvPnJZVjU2QUBrRFJfIWZNS21APztyanZOOis1VHlpKjJnMiVRSUpOP1hgaHJTN2hbWWpwZDE8LnBOZmBJWztqZHI2'@;
put 'NkQrUGpeajkqVGhTPD1bWWA4SlJ+e3s/cz9vQ3xPQ3QhNStZP0BWWEVxW0lsaDdDK3J9N1FKMSpvPF1ZTkhfcHJFXS4hRk9pfnpkWX1VYiRTSWVOOTFedW5ZIn0vVyRZbillK0pwQDU6KUAvJktzYiJrdj5MNXl0ZVVKYFJKMkU6T1hsQT9de0IoXnxLamg5eDg/NFIxJWI2fVtuVDhjY3xMQWNG'@;
put 'VDd3THZRYkF1WnZjTmVoXnN8PVd0UDorSzcuaWVhcHd2LEdlXUY3aT5pKlZ2JWRCQV0kcnFvR1gkPVElKDZePV5LTVJpeTJISTZyZztOek9qXU5WbHM9PH0mc3oyYUVfQXtbbl07eTpqMVFRRTNIOk5SPXM0aG4zcXpHVzwvPWFyR3ZoUCxJVFRbNyFRc1daTkErXjVlPjJ7bTdvQ29VSVJGal1p'@;
put 'Zno2b0hyWlQxYVB1Nyt1LDVRPiZnJXFOZTd3PE4mbnViNDJ8REVOQ01TPTRVP1c9PWpaQmwwMXdzcS41Kn1qeklBQlIoUiQ/YGF1WiF5WTJDb05GY3V5I3RxV2Z8UjMqTSNDUUspekxlaDNQPlhfcG4lJH5qTk01c2ZDZSpgX1E/ck0jPEtUeT98ODZhQ2B1ZVIqMVQzNUZkUXg/MT96XklWUj8v'@;
put 'c31RPkhsfi54WGkmW19UISRYRSZESVR0ZjtiPkBzPWpLRCRwIWFkVS9VIVEpN2EqWTRnVn46TS8qUk9DLk0oJF5VbGw9bUJ0KzEoVXRTQ084JVE2cklucVFleldKbGxpeyo0b2BDRVtJIlN2OF9LdTlGS2dqaSVtPHI0MUNDYFFfQm56c10+PThwRV1ROlgqcFpSRSthQ2J5Kjc+QlIhMDtXaGVf'@;
put 'cmt8SjFJbXMyImVOQjVbKzlKXipHbC9Edl1oRHtDdmckMXliYD94V3o9YDVvaH1NdVEweDU0MD9KYTdFe01ANjhgMjZpV1U4fUVSdUVoekgsMyR0O2txJH15P0BSWyNnTStkQyliMy9WW1l9bF1iS3BCeCtlJURbQT4qNGBKaU9LdX5DZmE0NDleUF0pKno1cHk7Oz8qWlo6YE8pUl9ee1IsZ0tp'@;
put 'R11CZ0dTdSxSZUloMyx1RGJBdmZUV0FGdU0heV9JMjRAZTU4RGosUEtjZHx3O35iXTxvODNHej9qajc4eUw1Zi4pYmFDeCNgUmxnO2hINCUkbmRIRCIsUi5vPEddRiZgcEJXV00/JHtJcnVbe1tFemlKbHEsTDsobVt2c3RXMzJ2MHEobTZPVDRAM2NpKnlaLEhzbyVpSTB+bigkU3wqVjNVVW9O'@;
put 'JEt5R2R2dXVyLzo+O006KHclcThpPFFsT29fRHBSIWxwUkUjJXcjKWZ3ZkdzOkBhUGgjSk9TWGFPYXdsQ0ZaY1VOZzNiRHxWKSVvcyw8b3FoUl9ucl5NTnAsOSI1by85U3xGQ1RgNVprWVM0d3R+Qn5HY2s5RTRweV5FaH51dyg5O2V+NF5xU0hUejI3dyNyR2NsTF0uITFqLGM/fXRHQmF5M2lh'@;
put 'fFVhRGF0NEpdcm44PGdsSC9sOmwvZGNveXsoQnhVTF5QXl1vNGI7O09eNTxRNFhTODk4JiIqZjgxOVMrOzAxZDR6ajNHZWZ1ZkdQRE9xQGN2RTFmYWBUVmFzajZURF9FPXNyWiRjfllTL1hecGc+QG5XMzFLNSZZSGQ3bFdXdHFjd29GLj1pRnxfTzsrQiNIWWlAOlZ6eEMmaERwaFM3PHJ8RUVW'@;
put 'XUxbKUNCP1M7SU82Y28uJH50bSo3VW1dX20sWEdSLF49P2dAZXpIZ2hQTE1RK18mbT9IZ30yVkA8TjlaQyJOTG45aU5+d1dIQFEvNFtMbE92ZVl9U245ay9aNUVSUCZVWih4dUFWYyl3OW1DNjhtT3Ngcmw0PSMkbC8weSwzUmFMLDJkQ3c7IypFJWxyXjYiQ3JxZVRgUHgsXzoociRme3NFb0lV'@;
put 'LEZZIT02MGs1IWslVCtpa2osQmVpO2I8SW9zQ1NQY2VfIVdYRmMuOENndGRmTkI8bXJCS3FqPG54dDFoakB1OnwwPnYjNFBSVTY4STtwR2lKbCx6dG98SUJvPChnQHFtbDFmTzorcyNneCZVTGF6cX1UOWcpfSg/Xjo8W09hc2IxeXRoQHNgODxtY30pVnZwY0p2TDdCSU0qTEF8OSFxTHhNQztO'@;
put 'bXFbUXBGeT1WQj9XTlBXUUA+Y1Qifko+bEFgWGQ0eVl3MklvZm0iVVdDVjk+TEorWkpxTiJdYXk9JV99TWd9cntEWkRfMz1rdlpdIzFVKSlBTyh2JXVFL1hTcWM1YS8mPCxWJV9oSX47XmVDN2NkZHlhclcsIXAubVcxPDNJO0Ahd1RmfXFLaSove31PL3Qxe2BTc1pYNzZMR1ZqcHBQajxJT2NF'@;
put 'fW9ZaiM6PTEye0VifDZVSk9iU1A2YHpKfDNDSDd+YHtPUUddJFcqZ09AMSFMVVFqS3hiU012c3lSeTxMbW1rLlZYTi41WS9zZHpDP2NvSlBNUShNYz95QkRvVlB+Xi5+eUxqMmc5eHdTNmAxbzp5fWdMSysuWDE7L2wjS1gid35QOXU3SlREaX1gZX55VSR5XT5HXSxNLjZWbElsY15QPytzc1Mr'@;
put 'WkI+TW0ieUhHeHFmLi9QN29Te01QZkclPWk9LEk3cGJPMjpUOyp7LFR6U3k/WXAmXz5RfExTdjElY04wfUVtdFk7SlowdDVDR08qbGVgKHU9eilVPHBoVXB7fHMvPH1rIk8oRGldeVFfNFdwUlpEeWprVFN2KXJ8Im5FU3x7a2tuWWhPOiR8aFQzQ2lzX3xBJHp9cFZOem9aPT4uVHAkLkw0bWNL'@;
put 'Wnc2Rl0kWH1IOkdCJiVEPGdMeUUrSmZ1KUdbdkV+eHhffG03ZyMxeng+SmM9NTV4ZUMrNlUsZkJ5RktsYnUrR0UhNCxVKEI5Nz5aeywiYy9CS09aPy5XQVVedXR7Uj09UjZudGw5IlIuIkdqbDxWZl5zfXRRQzMudVAmcyRULGFaL2sxc2NRJiZtZUcyX3BueWsuVkhxRmIvNHhjI2U2X21dV3k2'@;
put 'Wi5fOyw3eWk7ezFiYll5YX1QUXpQJTQrI3JZREB9cmZzJm5ke1p6a2FqOUhVe0ZmWGg0bX1bYUQySGJbck9zRC9dQDlIalpqM0d3ZVgma1pMXVpZYVB8Om4ubEFkel4ramk/Rz9kNGdaNChPd3shXVJjfSY7ZCtPP0pKMWcmemdNM11nMjZDRGVLZEFkOT9IOGhMKzgrVilqXUhqKj9udkBNZG1T'@;
put 'QiNLZjhyVC8kVXdWSittN0UxN3o0b3Bnclp1P3lUWFllWDw0N3UqQm57dFFAVUAmOy9jZlNCOitLVWglRUo3Om16dXlgVVdMOlQvNkx8KXUhOyp9aGNYaX5ubSU4OywuNiZoIjlpaUhVS1g7JD5OJkREa31iYiZvQEtVMC94YVI4IXNpTjsqN21OSXt0LmY+cCVVfSN1aXJrNk1HREV0Ujw1Xz5b'@;
put 'KkUrVF9bKDsmZUIpaGZAXzwuJTlaMUpXaUplXyM/Xm5dXjBiNW0pM2lzQF0kQ0Y3U1s0Kjo+by9+OUU6XXYsQ2pga0V6Okplazk+T35RVU09XzppRTw5VC82YDczRiN8bnBsdHA9ZVVnPE01YHY3Lzo1aEhFQ0xPSSgodFpHd2o/NUtlY3QqP017JnNgXUB7Yl46N3pnblRiS2UsJC8qSys0O01E'@;
put 'I3Y9VXJfZV5jajdbb2pvcFB6QDRgLlReQEtfVFZtKigrW3x5M2gjUkxERVMlJCtNU1FRb21HaTN6biRjbCFCdV9sbEtHeWRzalhFWkY8ZjJyM2Yufkw+UTI2MmBYSWphSEdSQlJmUCt5QklmUVF1TVdgNVdYZFlGKGZzdUBHKlche2ZYXl5nV19re04ySkhvaXFQPDBETUcsY3NNNkhoWTJBJWtH'@;
put 'WEZdYlZEWmp4UF1ONV1gRz02V2Vmd3Y0eGsoQko5QnZHTSNvK0x4TUpzZmsqXl1yV1hNWyNnI3JhI2hMWVVAYDxOTDNlOE1sc0dHYUEzQUZZaUAkRSQkM3x+SWRjYEJtcnVFajZRd2wqT0N2bzduOTJmOmRMcnM8Nz5bNmxdazxjSEhpRHgjPVNlez8uOVg9JChLdWBSSFFiXmwsdSFUdz02LEIz'@;
put 'KnVzNSRleWV7cnVBJGVQIV03aVVOP142XlN0Xm0rbSQzalRHWUMiWXRYOSRPb19mVXh4QV0oTmByaGJpdHsjTitgWmRxV1BCUz1sfmJaOD5wW3NBXTVqRV4qJE5wY28lOCNLeSI1VWwvPTY6QGAoQnQzVGpZWmNWemlbXk5ALz5UYSw0THE1QzR5X1cuaFVAM2N2RWF1bkg6ME9+P3EpPU1mKiYm'@;
put 'eVlwTjYoYzZfP001XnVBfmRUO0RKK3syX0l+NlYvRiFxSzVbXlc/WSNXRHg2R0koPko6ekZhPkI9RHpGYWtHM2BYWz1dP2kzXUBWeHhqQ3wxQihaO2BnYis/ISMuRC53aTlGPSRAPG5fdH1LPW0yOEdoOXlWcWlqbDEoVEdDU3VHM31TV2EmNGg/YiRbNDhfSkdNW3tFNFBjWVclWVlHSHU4KD9y'@;
put 'KmNDJjY8YzpSTT5IY289bGNFRUVoQnxkJGYreWspRz1yKUA4YVhGQ2IqMCxtJUIwbXNqejdgfV8pbkUjfF5keUN2Mj9uLHl3c0RZSiNaKSkrZSE/Y14qeSVaT1hTQFVARUBSdkNQLHI5ejZVYyNrVyRFSmlBfGZrdW5SPGQjTTpOcHUmdWduQmRhOXE+JEtpIyF7ekVdbUphOl1qLEZAITxVeFRg'@;
put 'VlI+ZCE+ckY/cCxwfCl+cTlLL1EmWCE3dmRnOVV7QG1bSFBeLlRmXVYvX11uI2NMaCg+Rkt5SHJ7NSRlVldFY31NdndoYygzVWl4V1BkUXVNSVAzPF5TL0lyOFQxRHBAV1JjPkEvNk1MIjB+ZmMwV1hye09ffUtsWEFuUmtgJmc7RkRXXn15NkVpeyhMc2FVKm9STE5jdUo2S0BlfU5HdFNEPXZg'@;
put 'NTVKajZAc3NfZCZ8K3V4RVVUNl5rXyklXjw6VEx0fCtmJmY/YXJSdT5yNHElJDdxcUFPOm4pJnlEPUVgYUxVRWlSPypXQzcmTzAuUWAqSjImcEcydVYycHRIPEdLW3E5JDksViEyT1lYOlJHZHdpMlFwcX5POk9Zb2JRWSlMenMvQFYmdlh8cl4iVzB+PzpaL2VdaTZHPV13aGoyJlF9IUxHTUtu'@;
put 'SEhkR0ptYy8zejFZZG0pW0hrRiE8WWhZVTR7bnhIQTgsYW1SKC95Vm0vWyxyPSh3eERiRyVqbTdLfVpoeFRrbGp7R29EW314Tj5SY25IQHs+RVtpRmBlb05weV0rI2tFKnghJjhoOCJdO0xfKFd9bjhjbiJMSiF+ISU6Skk7X0Y5e1hsUlo/OU9QZzEuVi84UjclXV17bSVDLzo5In1FNSsxNGt5'@;
put 'KGE5b0JhLHgje14kcE9ZfT0mQzgmWEQzW2FjZ3ZGI0pPZHFbbzkvcU1KcU17T1tgaFRbX1NiNzkuWCpkPTckSDF8JDVBN3dEVzlvSjJ9JiJBfiEmVChHNiF+NTVFX0RNZExGVVVGSz8qRkUsIURZVDgwTiFwOGdLW3laQTM2SSxXMVdKIi5bSGk8YGNlZ2ZRK1BGVWBqOHViUWh6TDRJKUh8Pjhe'@;
put 'anNFfWlgWismOmQ4fWFWPH53XWlraj5oLGxbTTJKX1R1Ons6fGt7dzpVMXNEWTRrYjFyNUZzLmJCbiJXU254Okg9SEhmUzcqKTVtJlBTMigvX0U2XS9BaTFnMG51LEtsaF1DKXBQMk5rSFFkbTR5NG5UNTwwbz1rZjcpJVZvMjphZD5NY0x1Qz94W35nSCtxM3ooVSw1UXclVmN7YFhuU3hfSjRT'@;
put 'LzxtOmo/JkVgem83X1lFWUE1Vk1vNmJMUCM6N2kmaXx+RjhVZE5OYDJqdjMkW0lwKzleQFRWZylPWmBnIz9yMGNrZ05ne304Rj44bnMsTFcpWDl0PXQ+SWdINE1DQk1+YF52aUJUMTJNSWlXflBkUFVYVFNLYGV0Ly9oJWdNS0kuNnROQzs/VGVbTTYiUXJzY2IqInVabmIhQ1pOUzE6NGJjZXhZ'@;
put 'SS9TRHBgOUZVWTdFZ0B7dk1QXUpibDErT2B9P2F1NjwqfnFLWUBCfDIhJnMoakhOfX1VSn59UHUiOGArfWY9PTBQcWYsQnhoYUxgcn5GUks+KGglZ2tlKTJaX11EZDhzfW5IeEJAQX0hWkxXOHMoUWdGZ2RbMj43ZHpsfTlMXkpeYW4xZjM1KXlmZHBRVFt4bFVNUkA3JD9FWWs8NSlnUl12R1Bl'@;
put 'JWI/MVkuQCFETFJoPWlZUyh4QS41Jm4ocixaZnRKYyJJe0ZuQXE0YXd7fkhvPnVpP2NBd2BTT2lJXm5JdHA7PCo9MDYsW3VZP1ghaHFfQVMjaGRiPzQ3U2cqb3Q1a0I1ezNdMmRxJkh6Zj5TbFApSFJkZ0h2cmcpYF87UFFwdVs2dWJmUDJ5fihkKz9kYUloY2JWZDU+YUxvPmtDYz4xME46O0pE'@;
put 'dDo9IVA3Q0QqYX1aJn1sXlNTT15bQEFZOWl2ayohZXcydFJIQlRvSFpfLC5TTHYuaHBQVVExTlovK3M6XVZvSF0vT1BjNlU+YzQ0NTs1WGh4dF5oSnJCemR7Xl8vSVdpaXhwaTUjKToiLjxzaUZjIltWTHEhc2Fwe0NbX0d1RUlOIzsmeHEufjpLZiRGbT1dai8hPXcrQGJsRls5amh9OWNSZUVN'@;
put 'SXg8SDh4XyxiO04mRCo+XTs0RCRJRVtZaEEvJXlqNTcySXBDL25yJXZ8cSZTKFp7NUp7TEtPJUs1Njx8fUJJI0pgZy9hcVZddCxEKCojL2pVVlRsOjVTb09POGkiMFJUcjU8cm5XSSxtQ0IsKnIxLzgoc3s2OyxwOkowMlB9NFkwMz11Zn13PGpBYi9pbXREdG90MWo5Ny93XT9CT0RORCVzb1Vp'@;
put 'ZWVxSENTdSZYQHYyZ1FRL3ReYTByIVlaRj8uQkZ0dGdxZnZgfjA3R3N+IkdlUlJRcCg5R1diQztDNGUsazNNVmYlQmN2MEtYNks0VzE1LGYzKT9ZRzNvK3RSZjxIdi5IUmheeHB6OGNTXjxFOCZ3N1Q8JDd7WTcsUEM/M2d8YSZ3K1NvWkRAV2k6RF5AKH1qOjp5L0RKanhaaSVoITkreiZ0OFdp'@;
put 'a1t8ZXE/bi5GPT5MLH5iNnVwQXg5RXFHPyN4LkxIW0k2fXRkYS5JRHxLeUI7V0lWMV0kVGwiI01VeiRKTzUzIlU5OV56YjNESmxAQn09QyF8PU8mISpjTVAmYzkmRnFLc3xHJkVFW0NGb2VJL2Q2Ni5Pa2s/bUteJX43ZGB5W3VTMk9KTSN3QEY5cztqUCxwP2AlO1ttYCxrL2ZkbCk8cSk+bmpv'@;
put 'TEpFSnozQi4ydHlKUztLQDJPTkZzaTB9JH05Pm9BT1hiVDduKW17RDNSI3dqJHRjODJXQGxXaGJRfHZ1cSt1az52NmcjKzk4LHJaTDkwS3RvKylGdD1DOilZI1hjSVhUUGpONz1bTzhYTGYlUTgqY2o5TGRDOVFdMUssdCsiVzpaW0kiYHRKMEM4K1NeTT89eUNkc1lzYCJJO2NKdXh6IS9tSk04'@;
put 'Q2RCUW8jJXZDUE1NO0lMdUg9d0ReUD9RK29ocSRfKzxMfih+OWNHclIpSiFqM146PDlScXBmLnt+ZjphZ040QnRZXWpNcGU0WG1FYU0uc1hoTVhJUys+QVcuR09sQmxsSFNiOX5XYzFQfUV9TVphKXY2ZzFYW1tEKiZPRUFISCNgck5DKV1uYjhlRz0hImc8PC9odDhILDI7b0pRN0k1V3RNPVlq'@;
put 'a1JjaD5+LDdadiVedigxI3cwR09eWVFwfGRVIlhDSnpQOjQqYzg2c1dJNkprYyZodDAxM0JiPWpNRTszVyJMbH1sVGs/aWJ3elM2TX1ffEV+KEg4bCQldEI7Nm18YT1AMVZART0yeXZGUCNCLD4lUz9sVTRlQjhxNlN1TyY6QTF9PFI/VTB6bU1EM0did113Q10rM1Q6bHlkOW00JnB2ZkA5SWxn'@;
put 'ekdiJCVYNl0iQjkwQ1RJWEpBd3F+NHJJN2dFW2oiVlAsYlszV0MiXlczKTxoZDwzbnpbV3AxfmVgY3QrbnghbXJTOmh5NjQ4SCMiJDUyMDlvVz44Kmg0UEI4Nj9Oe0MiQ2RocHlYSV09MVBqdEc5YUMkK09qOUhUM2lnZXhqSy85c2VhKnhLKilAOV1OejR5RytnNEl1SSVdQTFFYUBNcCtQLnpd'@;
put 'Mk52KE9rfEQvbWZNM1ojZHxLJigyay5oVDw8LCFJPyRzd1RWUTptJmthJmtrZ3JMU3FxNDB7ckVffXsjPSl5am91UmlRPzg9VWwqey5jYy5CfSFGflh+dzg8XyhCX3BbTS8rSDQ2Wnp4UkQxdWJdbEdebWVXVSR6WkF8LmBtdV4raHZvSVZFUHxPKlpeKD9pJGQqKDh1QFl1Rm1FYlh8bC82XzJC'@;
put 'UF5vbmhaQjV5PHtBSTpubjE7TyU/SjswMDRzYDxMJjwoMTFNXlNQLzFpZUE/M31fQWR7TmIifTtdO3QxQGNqSHlUZyldXWx1MSNCRD93dDMxUy5FYHQ7TnE5fFtASH5MJlMqJlkwZlhnS2pmQiZ6MGxFJG16RDRITUp4TF9ARnN5Ky8mTFNzJU9UKERbYz1CUV5hJFJBQTVKY1kudUZibD9pdDBQ'@;
put 'LDV0MWgkMTx+bi5II3tCQ2VDMEhqTG97WGMxe35nXm9LVUsyZGxnXTI3Zl14PFAzOD5MY2RRWT80UGhGZ3RKRV96fTBOU24ofGt+VnJNfEU0Ly90RVElQ0I4PlZkelF1VzFtQGQ2TDlTbWJ2KSFoOVFCd0lrLEBQKywkeUNfWHhpS2hWa2huM2tzUnUyX0llKnxefiJ6JExBYkdtT0RfSzk9T3J3'@;
put 'KEtCe1NuWEBUe2VgQDswfD0/TEBpTVhWciF6RjB5SVV+VWhKQyREVihDT2IlQVlqNWthOSxTc3V0RWksY3F1LkplSDRDPjF1cUU3Q3YpYHk0N294NSJQaVhJM1Y+QWtpdCRfOmtnbSppclI+IzxTfjNkfnZNK1RaVmFeXyVXfnpkeV9dbEgqUzFxUU9aUjc0cWtATyxgQzgiWlFMaTJ6ey93TVEy'@;
put 'cW89aXlxc2FDclhvTE5SSDNYJXchdU40Nio4RjRbdzFAeWh9eFk0blN0cmNbeEY+L0VWISpYPV9QTmRzS1NOOSU3W186Rls4TGUkQyl7KUh4azxRejsiUmZDUjA2b0lDeXN8d2pta2NiWSlSNVIpX103VVMzTShWdUh5WkUvVjY0R1Q5ZGozN1lEWHR8T1ljUHtxfGgueXUwIn5tIiI4TCVXYUJm'@;
put 'bHhPP35yNjYwLmNgQFFPfmk4SU9hNWM6KDJyfXZWVEl3ZyYiS0AhZGBNOlV1Q0x6UUZaQD4zOHE/YHFXWmohby95OlI+W2NZUzVHXilqblUhRk04Nih6JHk7L25vTTR0I1d8cVAmNVVbMWhdRk99XkFfSz93UWRkSyUqJmlkfU5MJEM3SjhNblEpWjxiQUYuMGhFbj16aXx1XjgjUz83IndFSyUm'@;
put 'JlkrTCVeTTpvYF55dCNZWFRZP25wc0UvZmJCRztvXmM0a25qVm9GPl0lLjI4d1lGQCN3OFo2cmdaS1BkWVVFS2IkUTlKW35AMi5EbUcuY2kidFhoIjoqTVhMSyVVbiN1cTtoPFlOZ1YsYih5LDZjNiYyR0RITGUxXzQoWUx9b1ksRVNCRVVVLixwZXU+IX02LHFML1A1Z0BqYC96VF9wLzc9Tlkq'@;
put 'Wmo6c2FSNyIrMU1iNiI4PEZbLkw2cyhSYk5GRHo9Yj5iejhrXyZUe2E1TkBjKyhVby81OSY3QUt4T2l6Wjp9eihVe05jR2AlM2BSank0eXFZMyRedV9PUDFrSD1AT0Elcj5TQDAmVSsucTNhZk46PVskW25Rc15JXiQoWlNjOUhlIURjZCJqQiI0UWVUcnVUaEx1PE1nWDVzSCMjfDU2JXp5eiF9'@;
put 'Nl01aENIfVQjUnJvPjlBQ3k+VVBjTFk8NWgkZk8lJTwhKXojMj90WGpnJjg0c3JDVy9rMnNiPldVO3JiNVhoX3J4X1J2RSF4U0dFKWA4PiZTcTBpWCsrZHdgX1hpdz5XLzs+LHhrZVVKR3lkJTdISCVKIUZFa3AoeVd3WnZtdS5dc28pWGRPODZPVllSTEVLcVoiekMydn14dF9bQk9rSDErJVZf'@;
put 'NlZtYypuV3ZQUUd0N2l8ano6TTRQPGI7WVlANjxJMiE1U0Q7OzJ3QzQ9bl8oU08jXmZ+RSZHbWRIaW82WjdaeiljREZDTVcpJDtDZSVSMzpjTjlVMnokNTl4fGAlfj46WkFdQDRZPHxIaE5WelgvSH1qdkhieV08M19SajxeOFRmTXRvWElYOXhBZWxGZFFjIkxOXjFsTCs4PiJXLn1aa1BxO15z'@;
put 'QERyJVFfISs8LD08dyo9dTltY0BHcW5rZXhmLyNQME1UXjh0YGNMbW92KW4rfjpCdi8ueltAUnYwOktndD8lO2g7cyV6SngsSFBfQkc8OllyI0cxZT5ycV5hLFttdlljaU1wKHk4UjdyfT1UP1IkYl0xKmp5NFApMnFYdi5qJExLZVdYZVRXOl93SnkzQlFZejo2P1A9MWY6aE5iRm9KLCFoTFU7'@;
put 'WHErXTclVXhDQiFhc1ZPITl3YzF0ZyMyViVuMVJAV0I1MT93ViFnfVkkfkdYUHFycCM2Ui54UGRYW1BbaTh+OXZwTD4+dWJ3blNHaitOSFthUUBXNCZeIzJTY1l7enxFVmh5WkhqbCZbT2VpYmtaNXUqZTo/fV42TS9teyg6TD9oe2FHMiQ5cm8vbVE9cDouazBrVyUzIjBINiRfOSovM3cyZ0c8'@;
put 'UVQqWyp3cEZLVWEqY1dBJEZbbSo7OT46QHJTVUolOCg+b2dATUElK0R+czxzVilxUEtjX0JUbjZMKmksX3w9LiNoKytZTEZERV5RdyNKeD5jSGBERygjajAmLzElXXA+fUZBRFRRVCpZfj9SdE8uRG9rZDRqKyUkVjwxemI0WCs0aV1CS2VuSyUyUzVzNS44dkhIPHhkKGZpSjxJYi83Q2Y7d0I/'@;
put 'Pz9UPXVXJmYsZCFyPFJjTG9lSEF5Q1ZTLz1HQ3lDI1E+fVEzbipiZyhmQjJvMD44bSgwPyRNK2ZZWTtNTFJjVS5HbzpecV1UaVlyQ2hsSk5BOVl7TzIlTkRpZjZKUSg0IWAqdVt6JD0oNlQmMTVQeGJDaCNtSHVnc0I1QD47UzgrTXVnMG5ERT8hKD5fMlswcExGdEZsTG1JemJQdTpOJktHIStl'@;
put 'KGg2OCtFXjRwWWhhLEd8byl4KWIzJDUvQzRMengrUTVsfllnZUMsYC5WWzs7NTRzemh+aDY/MGJYUDxtcUg8fj5uIXRAWU1zRVR4Nkp1KSM0LE9Hcyw5fkRxSmtAVVtoPSkzTGx5ODtAZXZHLzY1ZTZ9SENjQzFXQGh4VX5Nfks9JDB1eWJsOldRL1JKQTwjfXs6PzhkWjI9U1I2dDBRaHZwSmlI'@;
put 'SVpdWXpHd1NYXzFESyNWSE99Pi41eSNZQEV9MHxjQTd5X0x5T3QueERRYU9mWEg2OFljeXJWZmpeW3ZuTF5gQlhyNV5mXWMlYGg3VmlKYGN3WjR5UWwqW2osbzhfdT1Lfn5JaCZpeWc1PDA3RSpuMjxuRGgwaipQU19Xdld8cV5fODt6JnBPUTpRfnMhcyRnQkdSeDUrW2AlKmBjcEJwK1QiYXNB'@;
put 'Xk43Wm5RKEMjTDVWXVdML3dbIiNidDVgPkczS0BhaSN1RCs+OzZdXmg8SjhZPGNrMGRQXTN5fmYvd11gSSQ1NkBSeylae2l2cE8zTzpRL2g9YUMvbiJ0cV4pUFtoYlsjYj1Rb309dHtbRjc2R0VLM1dlOEJPU1kmSVdgLzdpekwmJEZLczEuN3xmbEo7O1BnPlZkXTdqJUd2KHtpZSouWkN+OixF'@;
put 'ZEhwP3N+MGxwZX5dLyVRIiEvJnJWYkBVan4uU0ZLV1J7LGJNLm1NR1YzQEFFO0YiQlZEREsxKCpiVDkqRkxBXUNqKyRxPmBrPzF1MiwmTjM8QSVWb3luVTlIb2goWjImZVRIUFN0RT8xWiF1biNdZUQpSyxxYTpzR1FwNHBVVilJZTgvdD9IRU4udkdvKU8/OjY3ZFchWV1vW0JQWjpkSX46cWJv'@;
put 'RjkyRHdIcjovNXlSTjhhZkBHM05COWtfTWtSQExKXzQiWk02IT8welRJMTJBdU14STRrfThJO2YpJChTRUtqQjFURk9aZSg3fXhUfUFpUnpgQGI3SUMiIkJNNEIhYlkzQnBKcjghUkRJfGB2PHYoZHN9a2ltTXlxLlsxaWEoUXcpcWphNWZBeEJZKVRyfFdeQURYLjNSNkJbL2dHO3cuciNfU241'@;
put 'bkIkWmwxZDRbTzdZTTA6PFRzMmphLn1tbCg0PzRjIU49WGN0Y0QuJCFULy9URTlTIVtscnQ6Z3p3PGthV1puPDFJb3Vkdzp3TmA7azooPWExR3NSY1RUNWB4c2Z+M21RVWRpfGd8UF4qKVtgPDc1bmFTO1J4Y0dkUT4oW3R1alZpdCtkVUFhb2RNU3MkY1QuUz52QUFLQjl6QUJda14+fk07UE5J'@;
put 'eWwqLz4lW1ZIb21lQXdvPDg9SE92N1NUeiRNeyFWblRiPX1LVz5QNFcyP2hfbXFZR2cqcGIwI31HWi54YTxbaEJOb3c7ZlBeNjV2fTtUQDM2V2dOInVbNVZAPFYkWWc2b2JCUnMkPzooeykucFpoJTRCO156RU5bL3cmSS45YztJSk9uQltHSm5OQihUR1E9fEw9a3RHZ1JoSylhcnFhUyZrbk8o'@;
put 'MSRHY04yflQ/XncmPHkpMlFTRmc9SlBzKy5SUXtfM1VAZiljWFN9Z0pTdUI8WXJeb09eMHZNLH1eUWZOPFhZMCR6Om84SVNAUiEld3RHLFZUWEtwdSMsSFRiOGl1THcufWtuKXBJJHFsaXRePH1ybjVLZW81cEpzOGlhMFZodzZOYnpaSDFsQTBjQ0wwYyhjY3gjdGEsc1NMfVZYa3RrfUl+fWxv'@;
put 'ZjdKOmdHPn01ZCZfZDRwNUlVSis1ejc6QWlYNUhGSG4wdUw/K0A+MUpZVDFXVF41UTQ/eTVAbWQ2M1dNLjRSPEVxaTlRQmB8V1JWfF05N0lTWyx5SDBeJFZyZkVOeDw2PzQ2TT1GTU1IQT5hLGNrXSxFMG1ZMUN6emR4Y01HeUBrPSN1dipAY1g2ayw5MyRuJjZpcCYsZnpvcnk6Qn1hU0BeIjZb'@;
put 'ZnhIbndmfkMiKENBUkE/Wmlkd31JfXxIIzQodldCMERmOT1AOXpNN24yYSZAdVo0Lkc5JmdYTGdFY3lsPT9WJjwlRXgxSn19aHBvIVRTN19mKmgqcFZNfF5WTGx2ZzdHbnowTntlOkUjYmBWclt5ZnYlPkJ5dFhFSEFMNVRoIVEwRUI1eHpwTEJ6OjVfJTZPK0RvKFdDTGdia1ZgfH5BdUthLDJ4'@;
put 'bE44YD5BdEUkTlFlUExwZyMvdSQlYjRfTFpIT3JUKzpCX294Ukw7WE58UjB5SCNgcWYwdlRqJGVheWpzQmBGOml0c1piYjlaamZINGlKcCl3ZGg4SnllSmg4RFoqNG4rV3xhR0s6UjwrSjpCQnQ3bS5TOmo/dkYyODBBInU1JWdnITRmfm1xfGs3KTdqUGlkdENWTUIkXyJMNDFCQyM9MWBjezlX'@;
put 'aXs4KDhNXiNxYGBSPlRrK0hlcCIkOChQelt2JjswMl9iS21Renp3Nl0zJCUkcXE7dHReajQze2p0dXgyU3lhOU10Zyt5KUsre3hAUls6bXxUMlNQOyxRdTd2LDkzWTlAL0Flaz17MzUlV2E9RVZ4PjREZUBhazQ2Uk9WRVs4O21ANmJ7MFFWNTNoYXZBYzZFUzlQJk8xdGNQKnhrPEh+Ul9iREU0'@;
put 'JFFjU0BOTChDJmF6Sit2Rk1TLEdZe3ZWRUttWixnZU1gLzVBSCguQ15CTFUuPihDTWRoREk+NjZPR11bR0J3aztXP2VveGdvVlZTKV5eOW8rfkxIXl5LRSowbk8wfVBsYFRHR31zWzRSRjEzNTpJQHkhUWJjJm1ATXhBT3hANikmJGtzOl88dGxtXj56STFCWmVobGZlfTBVQnVEK2w3a2prInko'@;
put 'WnVTOjdaZXZwR09zPCk6PGR+UikwN2p1cFo6bXIlIixvNTdXKCZQLFApKDNKKHswXVBTRXx6TDl5SjReJUI1UlJjfChebntuQiorfGhmOlBKMSlwczhfRlkyNiN+YyxJMC5pZnovXT1panE7KT5WW2hsfDtDWDw9e11FXU95PW91WWxdNUlGIU1JV1lIPm1sPXU5cjQ4dzIuXVM4alE1LDlnZ3J0'@;
put 'Tj9aV146Nl89eWdvVzkiNW5GTnsrUFNdamtYZTMoTnFATl94O01Vb2lQbGhLUV8rbGdlMFNWfTp1d207IShLP3A5ViF9OnNucSkxT1pELCtsI21PL2gyWzUpO2x9cTBGM09uOjA6KVREUEk6TCE3VEV4QTR3cmd2KDwvOnx5PntwRk5OQy9OX1hJPFtXSnIvTXg5blt7V0VwYkpfcls9QCo1SGB8'@;
put 'OjA2TzVmWmg0WjNDe2hPRGQ2UnJ9NjdlQyQ4PTdOI2x0QVQ7Syt8dV5KSU94PU15V0J4X10sK3M3WiEvfVMyTnYmT3s+am99YyNCY2RqWGRxNWFMP201PEhsOk4qeVVLTWNWI25BUXk6NSM5LyZ3c2EoRnxyOGBLPldxe2VoZC8/Q3tuczswPTJ2ci9CPmh+Kz1jaTFaUHMzNSVybyI4Mj53KkRd'@;
put 'W1V0VFdqRVpjI0VTIyxEWml8JGMoVSkvdkRLN3xrP3Q9fF0rbjhZKnpNQ2N3WilkWz5QVFo8P1Q9fGR7RmlTJHZ0ZFVmcndAakNnbTFOZ3MyKHFeezVFb3opdCIhXmRnaCVhYXs7PGZ4aGd9aWtwNWA9PihDT0dDQ1BwbXk1PSszaHUiPnM6YSRGbndZTl5ib0JNQmhPVnpueyRwXVE7TC90RFQ2'@;
put 'dUJ3Ii5dZHhTInIuNkhgTm52XlZzSENgPzFlUmw8fTMrcWZkXV4jXyMlRmtfVV4obCFRVnhbU34qUF54OVRJckE+aT5Ae2hbX25JZld4OXFoe1F4LDlWVDsmI0U2UXp4c2wxb3NwI2oiaHMueCpAZ2xkJEloOFJOODgofjNOWmpUTSo8VHd5MSkoTD1ocWNOK3pqQy9gPm8oTVM2UituO3FCV1M0'@;
put 'MyRMbEQ2ZDRVVCV0aFMwOy9SREQ8JDomZiFaK1BGKjZoI2U1PiNqQjs3Q2RDRG1qVEZIMkMzUFpBbWdMI25WcVVpP2BTbGhxeldjd19RdT45az1vaytzWGMzeUtLNWhMRUouPWUvNUpTIyRiOG5FSSg8VVpyVks3LklxeVQraTc4ez5Ja3xKNk9+Sm0rdHFhSFd7bT1Oai84W2c0cVliR35KZEBW'@;
put 'Vm4kdV9KeSxbV1VBOlYoZH59OylXKClNRDQ9TilhYzd8eDNockl5Xzo1YGdKKz5uMzEkInZdLig1Z1d7eikkMk9HMHcxTGtCYC9mTnQ0Uk9qamRgIzk1ZnZ6X2BTfF95IX5gd3ZifjV9Kkw2P2wkN0JRRyQzSTYvN3xHYkM5KzYoczZQZnx4biYzJm9vcmohL2lieD8sPlA/Knd7RVNIaDR+OHY2'@;
put 'cWZDZ0BNPzJFcm0hZltWLFJFR3hfLHVXRHBYbmhKW1pIeldLSTs7dnk2LE0uSDZjXXBPcDljfk0+RVlVOEZKJkB1JC9teiEhPWdWNURPKlJPUkQ6VENkWGskd10uYWZ2dnBOYG5bTkk4O3RdNSNJa0EhK0RHXmkjJTcxSjw3P1ZNP2ZwQjwxP05PMVVRMF4rZXF7fHR7PyU1TGNaaiZFUWp9WSV+'@;
put 'YzJucGZje2duI1RfVyhuKVNgNEBgaDVJbWM9UnUmNWhTY29sbixdUXgwRX1QI0Y+ZGg1SD9VeD8oTnJHQCZUJCpCKS5JMSxHUm1HTUlJQkk0RWd2RS88dSFHSCNiIUBFX2dfT3tsX3wpdmdpS2lqLkI2eWBHJDM8TG5wcFlTbysiNEJtYD1KS1Nsa3R5QjcqeD8lMT0wUXFDKndqdm5OcnN4WlYw'@;
put 'XnAyeFZ2dnAwdC5mNDI5bmNlQGZjWHltVCMqTyU5RGI7YzR2WXAwVHBJSEYqdzc1Y0VYNFo2L2pUbzE+JTEmW1ZsK0JDQlY3Iyk4RFoxNXlVJXJvT3o1KCpZRWxmemZ6eHplYX1JKkd2eyFSbCNFM0dxcmgieXFAMlJ+dys9SENKISE6Jl9Wd1goQE92UiR9YCthX0Q/MjsrNkUpWmpCUmt1aXpE'@;
put 'L3xSe1VdR2dRPikmQytFPCReUWk4Z2pBZU0jP3FZSioyU3dfckF3M1M2SCxFXVFvPFRBM2Mpbm5AVWpuRjptdHplPTMhYjYmMH1GeTZLRW9UM0VMR3huNkYvXy9JQFMxY2JXOE0rdnNsbEtpL2JCRzcqS1F0YzU2cVZ9UCwlT0FmW0plPCJiTz5dd2s4Tjc9LixJQztKK0o/QzldXnVXLGlgfD44'@;
put 'RlBXPUY6fm04NzBwfkx3d2p5UF4kYUtuXkFRVT9kNW1YZFZiJEo0VnkkaHxbdkpZIUpra3ZvUFVFdFBUXzRBWmV8fW4/UFRRb0Y9ZiR0eTova0VnOmZpMGVCQytNPH0oek4yPDNBWU51Mj1oSDJNJj15QHtZfkw8YSZWRVpvcU13JXN6L3RkVTRuUFg8SVtELjY1I0ooO2wzQ3NXTix6MVVIdFtl'@;
put 'UDNlKTozUipSfCh5WTgwNEomZnBhPSNNRVNqflpUSkd2JHZEQHB+JXQvcjhyfCJFMGQ9QFkkKnwmNl5zP3dnOXBrcVphYSJ4PmB1OU5sSmVJZSJdW1J8OS93emJxIyt9WE9hO3QuPXRHYSYzYi5tO349cG85fTspP3h2IiQvLnVDNTEpQjVvKzNfLChFbj1tPyVKTF5HZVdnNXBvam4wJXA/ajo1'@;
put 'Tl1AM3h5PX1KKDJTUHs7Wlp2PGhGaDBEYi97VCtiM0cwZ2EoV1pdbDFgQz9PcjRoLGxeXmhTZz9HKH1DMS58YHdKYXczbSNlXTZeIyJxb19QNG1gQ099IV5XOCFeS30+RzJybTA8NVZLQlk0Myt5UztUZHRYUWw1dksiXl97emAvSioyb3Y4VVJ4eilBO015KWM5UlR8RzFbMCZxZUQ/bjtYdisw'@;
put 'bFp+XjAjSD83Lz1iZ2pNZFpDYHE3KFFBJDNeYWkoakpvZHZ2LFNDbTRwVWlwRzZsNVReZVQ7M0c6PE5Bb11lc3B3K2dCWjFBNXw4Q24oZiRfRkkhJCsreUZRN1s+eD93aDVrU31YPj41cDA6JTpgWkBHe0dALyRaJFM7IVBvKihAOzI3T08/PGtCb3o9PiMsNFY9UVBdVjtRfnYxYHtoeC5YZHw1'@;
put 'QXhkWVJQSVlVcUFLfTNBZEo7fEMhbG9IfGJ6SE5ZVG59Q2xwSDAwW0NDSGk6fGk/K2crQ2EmMk0vQk5pSmssKHgzfFg+Kzp9Q0dQdSIkTGtHVFpYfWhpZDdIL3M9PFVRUX02YWY1SExoM3lQeTB+Q3U3RzplfF5tJWxLOFJdJXdDayhrMlJYLFp9ajRbfEBFODpSPWxSVHsrNipRI2xQTDV4PSRJ'@;
put 'M1RTIzwhM3VFMGd3bSw5PEMuIkl0SVFqajJ7PCNoZkE3L1BiaUV9dDl5O0UkcDtVOF83Nz1JTVJ4czhbVjx7OG4sME9HPSpvQyF2LCphfm9uTDt+OXRnViN3WCVCQSNOKSw9SkopNltTJm52SC53YCFGUypbfStjVzRmS1pCaSRhRU8zWVdCMVMlZCJDT3FtL3twLyhRJD9FKTJrWXJjaiRINExW'@;
put 'JWRpOCsqPCRsWFJHQzlLUSEvOTQ3MUpuOkRRenZlPztZI2I6K2FyJnBbQVRCUX5xb1M3TjlILjBjZkBrJUxgK2FPR2kiZlVMPDApP1pxfUpDQilVcm18W2oreH06eDVVKTl8PXlIWHpbQnRJd0R9TXhyb3RvS3BuWktnUj9OPHt4UiRifjk9eVY9azlKM09qN183aW1FRkVpNm1HRFVsa3N9SWNF'@;
put 'WXNMZVtnZzYwWWU/fE86UWZbMWRNVVY9alQ5IXY3fEEwV20lfkFmU2t8KyFZeT5iN3Q/YmdpTFlTdjFVc0tMdiU0PnowNVRydnE5YjR2WUUjLmhxYUV6ek9TMWt6NjksWTVLdV00eD1DUHB2ZitQTWNsd0J1clIiX21jcnBjRGhhRE1qTEd7VE9jKmRiYzJbezozXzFGUk49Wjd2SUF9fHRUTlt2'@;
put 'Y3ZLVDRUXWBJMGR5VFNETVcwVF95YHFCOnkiNz9TNHV5QygqQltbdkolMXloNnkrQFZSdnE8eEg3RTYyN1M1NSRkNVh4SkxzQm8se3RLPERWcTNIU1lMImdBJSY+JjVQTjM+WmIyYlZAKXc6R3YqWXY/eT44Q1o3WFB1UCgiSH1Rd2NpdXJ9S3JDfXg1TGRvTnUoPlp+K347bF57VHdhL0pKK2Uu'@;
put 'RE4wUG5wL1NPfWl6cXpKO35HN1JEXnd2e19vemZTYX4yRTU+anYwUlIxWyw6OTRkYD1pNE45YyNgdVJdSkZkX2MwfVhZUUosKng6UTlqPF5VaytPQjBFTGFdM2E4Tmw1cilYUyQ1UENuJVNtZHFDRzxnL2JvRml1dmsmYHlCQEksKllwT0UzOzhYfF50Tnk5W2VZYnloWSwiaTxbKi5uZTJla1JA'@;
put 'ekF3LGtjdHc2YCVEJiJBZmtIV3llbEAmazBSYXt2fE18LEsreDtCNSIweCQqVG9tcnpYLF9PIkR8cFV8ai9GXyM5aiQ9RlJXb2k+VUBpZTJfNyhYMCk2KG1NUSY+YEh8e0o/WjdSKnQhOjgvVldFLzJXOWtLdTxqdGJ1TFM5SklGNml1e2RAPW9ndSUoO0FRJUVpYS8qayhxTSFXMS5hZlI4ZyZm'@;
put 'elMxTnB2Mng7NmdtR3tZMSRXVDRLdFpEKmA6Ql4sdnAoIldNcU5fOiZIOXBqT2QjfWJCaUBDSStgM1pfN3NTTn5JPXxTK3hsOVlgZXpvcjxTYW9LR1gqPDguSWJTNCJeVjAqLzprLyVZQE07YklnMn5vVXp0IS9zYit6bnRCPlE1XnV9VjNYS2A/ZWM8aTA7UEE3P05FOkpOITU2In48QkRLIUVS'@;
put 'ZUkxUTpUdUk/SlIqMU5WMCNweGhzYjYqTWZdOSgjZUVIaFJ5YF1MRilOeGd4YT40PSZVNVlUbnV3WGJYTFdaMWc2RSYpSUFKTlgjZE4xWiw/fG0raV05WG5vQ35oPVRHWVFLajgvXlJAZHFifWYuVSJ9V2M/cnJSaT1YamM4LldrQWNraEhuW2dsXUIyVC5pbHplJUg8I3lQS3dSU2ksaXpHS0Zx'@;
put 'Nz1yPGddIkdCK34vR34+fU0zRnVtMnJyT3J3PGZ+OiZYX31mWHk7VkpGQXBTPzYlQ35pOGZRITloSnxUK2Akblk0b1l6VCx5dThbfVBffSJybUE6VG1mYTJnbSFSWkZwUWJzOXRtSUB4NHhqYEk2YFpXdDNoYS99TFp+IXNyNnpQKUVrdG9CYm1wMnZNcz1balJtVVE5dSU7Z0leWG10KlN6RjVo'@;
put 'c2tdXVtbfU9gPFokTGZtTTVbW2E0P2w0Zzg0YV01PnYhaV4icktwckVJZkdUemZ3a3VMIWpucz1FKF1QeHVUZHpvVEMyUnUsM09PPyRuRHk/dmNdaEVeS0VpISgzMUVdWDVrcTBBUUVIREhQaj8mbDNZdF0hS086bmg8e2pMVVVJTSZOTSlBN1ZGJk1fZX5SSHVsTEZIUERINWQ6N3BTTUlZXztj'@;
put 'TTZAeylWND1jXWo7bnNnazVNLmNvbnsqKHYvJlB+KjRQd1NtS0xKRn13VnJyeG1LRjIwWkhyU3FvS1JJOXxocmlfdEZ1I1JlNik4P01OaWFmZmx9c3FGLnl0TzlZayRLeWljXSZxWVVrTjBsYDVtd0N4biVCXz5gVSx7fE9UaXBOajVme2ppWzw+dHBoP1dnSi96KzJ9flo1OkleXXQ4MjxSLHUv'@;
put 'fENSKWZ1RzlEaiZTKSQxYXVINyElR2BUOyQ6dXh0X01zOFswRn1NNWNjTUNHdVR1XUg+dSZZbEsiWEpMbVEhXUN8VF0/Ty9HMlE6aTRLQmU0RFkyYEliR0hKIVMqW2VYNXJ6djh9b15oN2s8Uy5NNTg6Ukx3fERkLE5vdVVpN1QlVG9SI1s6OkZ4UnNRangpNzlXeiopQzEhWT9NLisuQFhhbiV8'@;
put 'RDxkc300R2hkPDZ7RiFdVW89fW82M0BeekBFai9OQTI6SWlbezxYViVFOW0kbnNoKyxRbyRPPk10UHBbTjM+STgvP25mV2UoWlFSPSomMHhRJWJATSg+b08weH4/MEorRWRVc29KL2xTaWpiWTkkZXRoSmJEIldtb1BATyNAYmw5JSkua2NETGB7aGNlVmA+IV0xS2tnU2k1amgvWiNAWVZfL15s'@;
put 'QGI0X2BHO0g5eWtpPS5EcUBLI1p5SDh5eXhAPCZ6QyVGTm55NSkzVmIwY2x5VHJgXS9BRiJeUkhuZnNpRGgpS1hVOl5RZ3ZDY1giOXRKTiVrbFM2LHtTKnkxQlt6KEZYdiMkR0hLc1NqdnJwUDpHMXFfOiRdblo2ZC97UStkbmA1JENTUmtWMzRgZG5pa3pLZytpeE5AMFNlUF5rOH1MdCQ1PlU2'@;
put 'WDdXY0QrZjc3Ynh2WTIzUDg7ZyN6Nk83ST1RMClsfHNuTSFAYTgmSUU/ckAwfWo0Nkc+RWUqKDZXVDFsRlgwYGleWG44YWQ5Q3kvaWs2bURIKEtNcW8ldTdmIVM3MUApNEsoV3NbPFAlOzR7I2AyM1oiIm59KHtAPERCTW44LygpWnVZfDpDRURkR1o+WyxzUlJWeStKUTg3e15GIV4yKixyTWdl'@;
put 'R2loMmt+JjteSDpAeDBpc0BuY3dJamR1fkdKSF8yW31+YUVpPXIjVXBpZi4wdGd3RzpYYkY/fkJ6fVg2eyYuZlBndTRXZ2Z+bTsjXUA0ZG9eWE1nalJOdCl8PG07ZiFUbVJseGEzalNARWdSZjA6SnUrYGh1RFF9LGMqeyNuL1RUdF9GXys+REZ5aG1ZSkZ5S3ByKVcscjt8S3QidCloc0B0K0A1'@;
put 'JjpadGQ/LlAxTmNjQngwNG42dV1pWERgWSZvXjQlYl1vUit0amd7aC87JXBVUFRFZnNaYkI3XklDRUIifjxAOXVnWF9Ve0BWTzYrenxXWHxxfmBoXjN5fm9QUSolYmkiZjZZdTtGVltOJGhoNls6KSVpKUwvWl8hUXViazQsWT1DcnVUJix4PmlNQ1VHISwuP0prW0VxcG15P0Y0PTR6ODclaChy'@;
put 'IngzXixnbE4iTEBrUy5fJC8pMjdlTWFGMV1dRWFUKTdlVVZQSE9gbWo6OHtjPTBmQEJEQG5LYjNPLFJVeU0/OnxualpsVUZIO2B+UXJBP00kYGIpVnJeU09AO11lckc1UTRTdT8lQks/KFtXYV9gQkI0V0IuSUtLLkRPYVdFaGVnLiEuIzBsP3NRcyMhWEJzSip9N089PkN9UnErSzBrLHlUejlr'@;
put 'OV9UJmp9KUl6emYrXyNFOXRsZyMkWVRhWVF8MkIvOXBxVHsqaz8vIWp6UGlRNC8kTUU1OD1VWFsuOy5QRzEvc3dlSkVRJXZhayhWfV07e3NDPk1TQmNTLH1mdVEiPDNVRSQ9cWlbJj13cyUoeU41eCtdOShKMFFORlZNUFROJks5aVopcS5JfXU1TFU5RWt8TEhhJEd7LFZ4SmI6IntkaEhPNipT'@;
put 'LklFOlprd1AuSyE/fUkkWSQ8OnpsSzVkZ3VTUlRaMU1NKT5FXU12Pi4ufVZnazxINzdwSHFqYEdWJS90XXVYJjZzMnFBP3FbeCkjRDlkeltTen5waEgoKnB6VVtdTzh+bSJpKSVaMV1CdXVNcGlwPnI6Il5heDczcmxIaDtfO21+NEc3fXF1YHZ6WnxpKDFePXMhanR8cjpvTmJxWzB5IihrTUc2'@;
put 'RDNbfEhgcDlNTEpsX358Y0E+bFpCRmwib3ZdQnRNITZOR3U/ZltFci8/djxsUWg2dUZvWmNxV3RySlQ8ZkJTbz59SiZYU3kiTHNiYEEvMkV1dHQ3Il9HXlV5IWMlJEpaI0ldNmQ1bG8lW3A4aEFtSiRtKX0mZWs9NTNJdiE7anF6fXZ0YERWOkwrR3V2Ij5CaksucnEiK2ZgPEZdQ1U7b2wsT1Yj'@;
put 'T1AmaGlvNT86XkIiN1JWXXc3UmNBR1poPzJUKH0mVn1oNm1CMnJiV1d7ejhXQDZLa2wodXombSNGfSs6JGtJO15wdmF2eDh2RUU9b19gQHdxdGgrfXgrZzNeblolSnA6XTxrcDt4KXJ6JnA6YWE9MCp0TG1teFIlNVd+cDAscWQ8WW91QTUsdFBVdVpxI2pfflREZXhpSUF1fSw2aF8sKUA2L0di'@;
put 'P2o7cX5FMV9IW3QuYXV7MXQ7XTpVPy9QWmJ1SyRAZShwQE9vaXohQER4Ozl9ZkkoKjlYcyoxYyZsR0hWfVlbaHFBYSh5bW1rZVsjeGZ2SikxMSk4MThPUDtlL3hVVWBVfiRRPUw7VDFgUGUpZV4sKiEjX3FdSmJVX0l5OWFHZzV8XXBrSDZ4V1VaTEJfKFhtL3YxWkI2VWNeP1J8Lnl+UzZddTJG'@;
put 'NjtfeSJXM289NWw1WmEuQ3xJNjRwViZfO2l9Pmw4RzdTQ3RmMHpfaDQqWHJZRzhJUDZCUFRZeiM+YV4jJGdhQmNlclVjNFAuKzZwVHRbRnIpaTVAJmZjaiFGVl5GSE4zYFRERDFzWzNPcTY3IWRiaFBEJGlsRTtRPSZCRC5ROm09V2RvPUdkI2l9UmMuQUQhfEIqaDphZzk8OEJWUG4vckZIUmk0'@;
put 'WDs8c04uNV9pTWYrdHFtMGROJWFuNV83NE9tQD1JWmZfZUArMGBDQz1ZKF9ZXVlOQCsocz9kYjVicGp3YW9eeHZpUyRPRn1ge2xCSTdfcDk4cW90VCZoVTRTJFMiQ056TXRwa2w4cSI5W01QIyF7Vj12YWNXUmp8MHdYL2VDSG9odGY1OTZwRXNkOmtrV3Z3PTJqUUt0Skp8OGI4LFBsQlhlMjZY'@;
put 'fVtXVmNyRVVEUyFHYHckaz9fflhFfWArSkdqIzRyQSxnJU9WNl9UaSJHKDNyMysmbnlmMlFPZHlDUiNkclB8aW86R1k8P0ouRUdpWilaIzNiI205Nk1WS0lIPlY5ZEB7cyRkT3JZaWdXcWBOS1Y/fCs3c0x9QXVQc2l+WmE7PTdBKnBuV3RGflI1SH1OTzQrRV1ZKDlLXVdGSTw4Q304ZHZ1V3Ux'@;
put 'cmp0VzhsS2dXYWBIX257YFtXZEwxfVkzbm1qflJxMEIsfHNFfGFkZywsMnxzcSg9aWshWnhvSm8mSylod1YrV2tlMCFzfjs3bSFoNHtWRTVCXVMkMyR6Myx0O1pOdVRXaiZ5fkUkd1VxcWtvaW1eYmhCRihpVW1CRnZxZjNlZlRHKUI8fGB+ZTdWUiVXYHJyb250LjFnaF1CQ0Ywc3gxJnh1OD5N'@;
put 'cCpDUSxuRyY2T1kiNzEmfG1OM3wwUEppLHEuS14yX2RlL1N6MzYkMUdRNS5yezchZT4jeXZAK25hRHpKPCosJXpjS2hCfSprTWdzdThtd1Q3RGMwbWZ5fWBCPVVOaURqfFtFM2A6Xio3X1suN1t6KE5zbnwpRX5CUEJiJDFqb3dSY15DZXB8VzNePj5MUHpjVi5FVE9RYUkqKXs6ejwlIVBVJEYu'@;
put 'THYxIig6OlMxJi9UUEpdR09GSDdDUDh2S2d4e20rUiNPNEcmMW9II3MhZyQ7emFHc2VFJWg6O0AhKTR7U2VsOFV6VUI7JVRVNkxfIyNvWFg8SlI5I042enw4QDBiensjX1p9RVJXIyJ7UGB+UzllaC91RmQwWztvfUx6cVRYU1Y/anhONEN9WmohMmYpVT1MMH16d0JGelUxakVscHFSdUhLNjhv'@;
put 'ZUhwNVg4KGxPeGlqTi5kLmtMM2ZvNHRqPSZoLzlTSEU8THooZj07UDY0T0BRNnApSTYxMCVOSiZbZ2tAPXZ7JTV7KjBOJVJmWUJKcStaKGQ1R25PbiReVE5fSn1MRkR3QzttK0R9dnVZUHUicEYiPTVRcz83U2RpPGtwJENGaGxdeCY0R1hBb1VhKGNmWngoJF42WGF8cDJmey90OGxRI318InI4'@;
put 'SzxnczUwaVJmTSFAU1cyQ1tdTGQ1UThON0t0Rk1JZHpYSjcsPS9MMWRpYTJMP1FnO014NTBCM1olY1M4ZCt9KDEvJml6IStvTXAvYzNdMHFdfSkvSD9KRHMhSHVNQGd6O3owPk1xLzwvNzBEaSlybGM3Yjl9ITJhaTZ1alNsXSRCP3dhM1E2NEdmPktPSSZeXyo6WDVkc35qSkVlS1UkSkdSYyJZ'@;
put 'M30ibEpYJWdgLllTMF9rRW49cmk9entzeCZ8fkVxISV5NU9OfGpBU0hqY3sxWkQuOktOdX1mfjlPTTNnRUtKdzlmSTJOUXNER1FROnVHJUEvSiliXncjdWYvLE58Qzp5a3NLeS5lOnJweHppYklQL2omVjEhaUdCO3w8Z0sxL19Aakxdfm8xJjxtMHhYQyFQaTF+S1VnVnxeMTlvSmkjaDE+Sld8'@;
put 'VlVdXUBBMHJMaSEvY0d6LH11X1hfa0ByaCg/Uy5ofTlqPnpaOGMmKVhrfSJINGUzcE8kZXswKCVdWEAvdTVpXXN4WCk9JX5kemVyPVFhajY4ITM2OTpVPlpiX0d8flc+PVg9TlBRYDBGK0V6WCYxfHMlM0N8WyEjfjB3fnc1Pl5oQ3h8VlY/aCpwcUxVIURSYDdxWkBmYF41KC47OSNjWj86XXdZ'@;
put 'VU9FRF5DKVtYLFp4enR+Q1YuKCpzZHViUDlbKkI/b1VwPCsjUzR6LHFZSUsueCl2JFpTMkxPMn08UCpKbCRsWitvRHc/PEFoNiUxOHw0RWhXYUNZQ1RMXzhieX0pe0w+clFzMFlfS3EkPFI5N3U8U0tLdH4pRl1PV1lzXjVRTzBiRVt9eWolOzJWYjxbcnZvfmQsOCF+fjckYCY4cm4pIUR1QjVj'@;
put 'c2VNImNrP2NYK0wvYXBpMEcibXNub2EiPkd5WWl2KiguUC93M1Nzcl9KciFkO1JUXWZ5S0dTMzJRXmlTcDJiNHw+KiZ+KCV0TVJVYnBleU9SOWNdUUBdRFJHKWEkWzkmMDkyVWgrZmlEQUJXOUI2T0hqNy4pa2tqdyYvcCN8REJZbjheSUdMaTJLSzxOZFp4PzFsdTtlQUVSNXZUWEdVSDdhKX5Y'@;
put 'PCN4Y3hobnplalAkVXJMbzVscisrcHkkKUlhOk4iNis5eV19QEZaXlZPYFt7a0tra183fXVVOXIlb25qPlglKGYhSSltYG9FYVcmKktmTWt6Kk8mQFI6Uz8sYUlRP0Q2K3N0UyRKYFo1ODI/LD5KU2xUUiloOHNXNSg2fT56TnJ3THxyLH1vYF95UThPQX5uOzI/ZyFeREpoajVoS2pGM3FZNVRQ'@;
put 'QyFCLz9QIzlPM2FCVXkrVD03THpJKTlWIyMlc3Q/MFcsQ1ombW1CfUN7TXB2cjptdyRSWE1vQH1MJTU+QylxcnF2V0RFPjl4OWBTeVZKZiJyfWJYYiQrPlQ3eF9MPTVSKihMbDtJNjZGQ00vTF0wMkBpPSt2dylkUkMpezQveCMkWWFab0kmKSw1O3U/cGBuUSo9eT5jMCxERSVDZiY/L1NKQSJP'@;
put 'X2U5OW9CPS83KTdUfmckMUByQ0o1SE98MF8/fSVrSzJiLyhQe01iRUVWfiY4Qz1xM2NtXm1zSGhdOSl7bWpnc2c/Ky4lX1EyZzBBX25qS3AuQF1rQHBMTSQ7Xmksa3I9LmouYGBnUChzS3UuJWlRTXNDZTxPRnkyNypXcmdxQnJucj06K2Y3Sk07YHx1ZiJLIj5GRkNUaCxoLDI9cz96PFg/NXxf'@;
put 'Jm5BNmxpUERoMS9ecVdlbjEkKzZWfkNrRkBIfUVvOkokblApVGdoTHc4M0R3VWckSkE8bytIbWlKdH4sdVhwZVRqe25sXnxhfVs2PkdDK3dEViE9Nm0oPD9veyJwMkIyMHk+UnhoTV1XeT1eMCQ1Y0ldNjFQcjd5WztCOjc5RSJCU3ZaQiglWipQU004cz0/d1tSL0M+fTt2Wjk2RkRfKHsjS0Bj'@;
put 'OUIyfG93SVdBLl9eVXFGTWV0fT5TclJxbFEsOzlpJTpiZjlKbFE+WSZGRiFeS0dbI2Q7Zz9YMnpZdXVoLC44dj5eMkpALElIUGM/Vl9gTjk/Kz13eCZPeTlNcHE2OEVxXU13UzQzJmdPeUwsZmthT3dhL0hwX0UySDt4WCNQbEY6JT12VH1QJGJme0paaHJZUyV7XlM6XTRFJEUjdSlEYCtTPG00'@;
put 'aTZrRVFyKDYwME0sVEE6aEkkci9mJVl0LEZsam1zVDJmbF9tQjFiQll9TWJ6WChPLDpwNDt5VG5ge11eWkhZKG1KNVFdQENBZCM0aFYkPXBvNVBAeSNVc1ZlNlEqaVR1O09iQEwpV1RLOUMuOjk1OXA5eiJ5Tkk8bWdtalRVW1lJM0glbG0xWkJ+JUtpdilgLkY3YCQvU0VtPXRfVE14THJUZnJ7'@;
put 'YExFWnFreF4kdCo6NW9LSnBbT2p0UGluLFVtWSs9U1JlXVdEME5kW1kiMEBrSSlbPmVYVzlHN15AOyojTGQ/IWxDUEA8I0ZMcXVvbUVJPD56YSF7JXsuY19Adih9OzxNfCU3WShlKmJFMmZ2U35wRldfW3AvUDdMRzJ7bmFpUUAlT2pub0txPl42IkFJO1svLyZPTG5CXjZ+V0skLzdvLlZJQ0NS'@;
put 'NGRLKVFXdmFwdX4vbmtTRz89VVsreCVacXF9a3RwZUNSczZ+Tyx4NXVaO0xHZk9qRDI0Sj8+YDVye2tgKCZvPExhZzdWVU41ImtCQUV8I2okWm9JUHpKKGlePG1SKC9VJkxqe047NU9NNH5DKzIxT0RCW0BKemNbT3N8Rk82aXtkOXVjO347V2dtPkdnfkJbPFpHenQqK0NyYyxUJkRCfVRlezZ8'@;
put 'Iy9XX3xAUExiSWh4LGA8RmhRI3wuaXBqbW5yRSlodj8uNHZ8ZHUvI2V5QTB0N2RFPVMiXTp1QmAiWWQ3LGs4SGAiTWNOZEthIUpqRi5rN21CciJVPkhia0dDSSVAWnpmI01QcFF4a01VR2V7Slt3TGRQJkg8PyMqRklHJXtpdXxZLD1lWW5CSHUzU2ltXzRfPHoiPiFdQlFHeW0vMDtqQEcxY20p'@;
put 'RWRrcExLMCwifGxzSUI0NG8uTUJsZGcuWyRxPWU/PFR7VXNqbGNrYEpaWH0oLllTIUVqYUJXRStaclRUMUVNS2hbeW16NzVIZWNQU3FPQkk0KHw1NEBmZixnVStPL3ozJUFvTGlnXm8qdHg7RyZXU3cqZ1dRMX4qVTFSLn5tdlZZXTEybngkd0RmSXI4Lm42dVc/NGszSmZpQnVeOG1iMlkxUihO'@;
put 'VlNwOzJTTkF8PFBjaiN9UF51LnlfUFI7eG0lTzJbUVs5NzoxP2EiUW1zUUopUCU7OFYubyNialMoQ0dUZWtROT13cDw8WGNaJU5PcEpIU0ZnKkZ3MTgke01hbyNzallLZiVlY24yITxOb3tMe1ckOV4zc2U/dGVYYzR8OTFtTyRUfWklMy5tJjxTWWMxNUFUaiVDKnRMSSRIazI0ZVBhM3JlVkJ6'@;
put 'cDFgfWMxe0c2cXE/PE0+RkY5OztWK2dBfihiUyRdVm4zOyF6RXI1dVBSVCMwV3Z5VDxjZm9AUTw5MjhnJDVAODR9eUUoIyllVHdIcnBSIyU5LnVjKHtbeGwwUGEzbTZDSVdbZzppdiFIe3xAd016dGxFWlJsZWxFRCY2S0w3JXsvX20uZWpbcmZYSm1fUVMydkp1eCJKKDtCci9IPXI1eWlgMmk6'@;
put 'd1lheyxePF18TFhMTFFVU0UqWF5DTlljUERyNGdgZUpJOjN4cV0+ZGdMcmdsNCU0WFo5UGMufnJZfFEvRnhiRihOb21qa0Z5PD9sOS5CWHNaRld8REcqPmYjYjIzST5uV2FkISJMbG8pRjQxRltXPmE7ZixlQzBmeipwRV1wNmsiJl9veSRlUVtSJUJHV0M9cylmQDYyOWkoLD1TcjpmOC9zcWRh'@;
put 'ZXIxP318fk1pZF9uMVBAMEpdY3E7Y0p1b1g5I2Q8Zl03ITw8MjIxQnt3SGUsbGZhX3tda1YjP1N1SCx+dihwUndKSUA0PStHakkoZDtRbm0ve2wqIlZ3Kk0wa2kjb0FwcXIxLzcydyZQQ3YzMTowOSU4dGdYUWA8VCVTWCNlVSxxOWtpTSo2K0hHZm8vUnc0WCRaJHhHKkZwaV5WUG09SCVDO3Z8'@;
put 'MWIhcHhsUVFTa3BPSlJ8QkM3TW5DRUFyamRpLDU2YHo6RmNycWh2WFNFWk5mREdRTl5HOmVBSHVWeD45ZWYqfT5fNSxHdEQveDJSR1pHJHU/QDxfbTVMSTFhXVc1NTk8Tk9RZ3pzI1daQn1ZRm55MThuUTd+I1Rsa3V2QittWCNhIylXfTtMTmxJJEJ5OFtZP2J7IV9ybSM9LmlrKzExPipAYEBe'@;
put 'fWkpJn1WdFFaPWY8Vz53VExmLld1JS9XejR2Wl9rYFp3T0JSbDYhRmFecnV5eyY9YnFafS9ONT5jUzpkZWFoUkM6JF5UcTIuckghY1F9cSN4PzZBSCtOMjRZMDU0VkchbiVEfF5LQlYrN1g7K1VTdmVeLCkrKXVIPVJlazkreE8hMT1TRmhdbGx7VmFeMDhLPXJeY3heSyVDMDJpZkBEWC9uPDNE'@;
put 'eyNaa3RMKlVwd0E9Ti4mRys3OF5faj9geSEvbTY4bW1DL25bN3ImQElaO1BdJnpFIytfTWRybzg0OXlVIUllNENFY0JDZz9DM3VMRylCOUlwcz0kOXJBVlhTWGsvamd7biRoYHV5YzlZLEQ4ai8iI1IoYT9MRmZpdS5ZWTlIUnh7QW5uLnVXWl1qRz1OMnx7d2tzaitYPWlTRitAcUNRRT48bGpi'@;
put 'MEVHWVZCeF9Gd00zSnlAOWZzIVpsSnshaUtnKmpjJkIoeW51bjEuX0IoQ25Hai8mWXg7a2dxKzhmQXE2S0x9d3RkbHt6WTsmJFpNWHNXNUZ4djYjYFFnSlp9S0ZYIl0/JlZNa1IrQ2xkTUs2bF9OMkloWz1qZWMscGRNNDNlQipTMj04WiokQk9sQkM7ajZHUnw4OUI1bDY1aVk0SVsia0koZldM'@;
put 'QGRZdHdQKElBW0hJTzpVTXJ9al9wPnBjRmR5NF1NUyY+ZyMqdFVGWSxYcTZoN3Y0bnpLZ05neisqPX0qXzVtZXZwQ05zKjtWdTNRNXJHbyloKm52KUtVKWg1QkZ7QVlvZzF4bChRezUmalozcGVfNXMqJDtkZVohRXVuYFgxKnQsXzF7Lzx4UntAWGohNXZeeltsWnlhUzNhcG9dT0wpYVlZcihR'@;
put 'blV9OihkaDJWfFo3WGUlQ2pydUJnNFhZLmArcTgrdDEkeE1lKmdsI01TWjRLUzMrUE1wPmwlPF52S3ohPS53fWdqU3ZmcEM7ZEs9Pk9PQT1qUUg+USkjYm99eXlLYFhFYD5RdGYqRX56ODpbJU1SLzIsQUpmSlF2XWVpWTkuQDpIWE1URkZuY2s+UTF1MUkod3g+L3ZwRkhwQH0+cyV9OS46aD9w'@;
put 'T3Q+QSt9JSolK28uOGBxTkEiay8yMzNxN0FUK11hZzksSyRhb158WipCKjYoS2ZHUEt3MHVYaj99WGdIOmhePkp1NnI4Nl08XTdhKWh2IkRlcDc4SDs6dUo/KzM6NlFlZ2puWX1EUUhUSG0uXX4zcnc+anFVTExyLnViQDMwV3Y6VlB0IXZxX0RCM1M5SnNvOj01WTtFeCs5PHN0JW4xaW8iYj88'@;
put 'MjFPPDRbOVRxNTFbRE1oNVYiSlpFNiM4WDpfV3Yoa3dRNFV5aFZ4WT0oOE51XnU/bntpYXJZNHx1Q0g1bzZKYyUmX34uaix9UWdGTz1QIzRdbExUPkBfJjNMRDZ0Lnw/dl5rdX0zKGNiVEZ0ZklIbDRzSnYwMlI+JSprN31GYi81ZFFqWndjUXJ6bnNdQUIlYjQsIzRIeG9OXVVQZTcmZFpTc191'@;
put 'YykxJWBiVGIia0tHSFUwJW0/bFNsX04pajB5cllIJGBdJHUiLG9uKlg9fmVnWEMjfUNYZSUhQHJ2K2M2Vz5ka3dgYWY8cF1rP3MldENURSV1emFPRGJmTyJoWTUwKStveWdveTdpITlkaE4mYXZ2dD15UlRtd05JTUYqLjBBc2tOOFJ6VUY2Oi5Zc3tyQytueXplZGMrJHA2Yis+dX5ONVhMMD8j'@;
put 'Zzs3cz59c2AwOUFrO1BWYDdTVT9aQmB6OXY+MnE7LF5jPWJqbzl+PzlKUEpQK1tJJGxEUSp6bzglLnlIVyZLfTRIMWlPRVt0W3RFU2twI0JHXV4kVThlQFUqMyl0ck1RcHRqR1l1fFdVPlA+cCwlPTMpUDBkYGBAI0lOZGE3KmxYJTYkNnBebE4ueGdpRlU0XVtrYkJNeGhdcTdYMDFNTnJXZTA1'@;
put 'ITpzT1Y4fH5fe0RFTkEkY009NDVGWTYqWiFdSFFkOiJvdmEyIXA6WCY4IVcrLmQ/MkxJTWcpPCMmUXg/Pjs5I0JZOWcmKVkpKSw5RDFPMT5LQ0N7akg7aHQpKSNCT0xxUTRyNFV5ZEAzN2JvSTpGMW9hITNARGpWVFg+czw0dT0ld1s1JUpuQjpDIkxdRTxqfUlLcUs7PVdGWV9ZOU46TWg3YFs4'@;
put 'ZD96KFN5PzQyOnBLP2p5SS43dCF1Y2cwN0sva0ldPm5JfTg3W1t4OVBMYXg+Nj1yKGlLNlhUdUFvLEB5KC4zWEp6WzY8dEwlSmYsMChhLyI6OGM2Ly9Fc1tVRmI0QUVkMTdANEdHPEQ3cFE4dHZ6YSF6bFV3aDpNPzRWJTgvNVFIPnpAWyhzWFpyfFlxWzMjbV8+PTQuaEh1I0JbKmRLOHdBRF9U'@;
put 'd3pYfTBaPFp8RkFrTDtYVFg0Tmk0cUMqcFkyYURhXVBRTTJaUiEkRkBOLz1gaUFIeEdHLnZyY3o1TyY5ZFkjUik/VyFxOltXYUU3YVZ8YXcmRl0/XWdDRkxJflcqbz9ofT9dSSNaZlZeY35uLkF0K2g1PV5CRkQzYlkpTUpyNmVIM1t1L1kvWCI4Tih5aW8xdWVAaDIrUE9UZ11RXVBYMEl1JE55'@;
put 'flZsTFhNI0wpTCZkYnN3R05OO2d3KkR1PlBPVDhjUlhoczp0NyFodko7RWtTWUR8YzBde2lgTWhhWzRdKXQ7MXZhQXlhcklsRGphbio/OT9FbFBTUjoxfCF0UlNyJnJHYD9QKmVeYkQkUUdkVlhqJUc3OUJJNjM9VkM/LnxtWlB1IWUxT0c3TD1IYXtsJCo0XUptSldkRGcqbDlVMShxPjxNVUJZ'@;
put 'JCJwRTZBaWdgcHsxaGBpZVQsNipgSDRadUA0Nnl6ak9LTF0wRSw+NntCQDVTUCVMRC9bZC9MaE1JRCRXYVRxL2orX0xET2xJOWRpdSgoLnIqWjsjQGoofEtSciszS042Ojl6VS54VUVuSG07RCZLPjQ6YmhpWDs3YUYsMSExfWYxeno+LFBIfFZPNjwmcTlMbmVycXV6PmdBYS4qNDpqMHBFPExw'@;
put 'KWFeUHl7SXdzazAvXndEWWNBPmczLkBFKD95cFllZ341O1chNDFtNSFuYV1FdE1oVGNmOz0pUmhFS0NIS01VMjpdd2FgLDd7VXQ+UXR0YSpqUi5TRj00JCkmLiQhPj1eRmt4QjRmfkleN259dms0fit3KFh5QUopWn1jbURfdkB7PH5FLjA9OW5lVmdmbC9tU244USsoRD8hUkZJUy43OD1heCZv'@;
put 'MVIyQCRsWkxqWSFHcVJSUDx3c05ILExFNXNBWVAjN0kxPno0UnN0fHtYJGdAMGdAbDIhUGl4QiR3R0E0S0l7VGRHJjkjWDc8IWVWT3Z0JkkwNUQub1FpaFJ3fUYxdlhxeUo7S2gpJUljL0x2cnR6cTx2NkdrISY/aFg4NTQ6dWUobmlxXSUrcnp7IzVbUHJhNzQ6dnphLkpqellbflIsZmBOcj1a'@;
put 'bjRQKUNSRzttSl5ITmxwIm9KbXZpTEV0JipsM3tSRjt5KF5GXWssV3k4ZjZMMnAlUld2SjZoNy95KTI1d0EkPCk9Y198alooSm9jKiNhJTZRKHRWWzNacyR5S1pIQDQ5UCM9c2dAKHtCM0YqJDVbM1t2PC5uOjYzRTN1S3MkY15iMis+X2VjWD4ydlBqKyt8T3VbNDFhbXVsOkpDe2wuW0ZnOSs8'@;
put 'a3AiJSRnImMwIUMha1N9fjhWcUY3UlQyOGwxLigkYmxiK0FJKX1FUX5xU0NdR1VMcjoiNyMmY3AiNSxRfEs7NkBzdj9IeDFRTWMxcS5ZcnZfQitqd1RIQ1lpeTFIfXdxNzlLaFMuLipIOEdzNk8rSkAlPFVmWkw4M3tWa0hqZzgzYTNbZk9WMTFMJDJBLyMsSmAkZG5WXUVSbHhONEUlWFpoW1Bq'@;
put 'd3IqUTRPYDcuOUwhdTthImosXjZRPDt8eD1jQks0eDFfPyx4W1tTbW0vVTUkJipMdEo9dzszQ31VfEVHO2FgVm4yWU9GfUZLXl0wVyN6NlpKXn1HKytxWWE3WmJJKzI5cTFAbSJwSXYyPFdaIz0rfiIzNy9SKit3NjApflhBQHlMWCVQNmVjK0NPImJASjpiLC5TJDVLVz02V11TVVZyQiE7dT5w'@;
put 'P34hOyF3NDRBRE1CRDVgNyZzIXZ9YGg0dzxkfEUhZGUsbHgsQmIvWm5Eb05bNjdOVl1oSGxzMnZrS2ZSRyJLcW4xY30jWm9vQ2pFMUQsamY+K0RmZzdJYSJwYV93ZkhaKz9VMz9mcVJmTHI7ZDlMNExaYU03bClGajZIJl55Ikk6R1deNWBxJT9WU2dyaDVCVyQsUk44cF8jRHhAZHtYdy5CM3ZJ'@;
put 'TyxjZTFyNlBJQ21VfkszIzdZTUpYVk9xYDlxIm0mSzosUntWbjp+fil2SG8qcHBNcklgRmQ5S19XTHcoMjhJXm94TFlgfGJNXVt8Y2ksK3JMd3V5LktndkhPSmp1Z3JNTnleQlhnXTBrQUdrOVJkaFp+US5ERyM6KFpSIXlBUzR3aEkqOF8obEVJR2YpazBddGl9RU99VUFzcSw6MXNLbyRwOWR9'@;
put 'ZWhOMH5SKU1xNSV6NTo5XzI1KEtuOWluXUs7SGVWcUA+P0kyTyFBYyZqaFJCQUl2ZlB3Vjo3QXh4YGd8KitJWHc8a3k7Vks1c21HOGNuOn06Q11mbEwjVkhEQjA5ekZvMz07YmNQQWowfStFK3V7eyg0OWNOVEgjbTwjenY4aXkrYDpdXkM8ak93dl1LaEteJnxxc0t5Ii49Okdud3BVWDVXLz13'@;
put 'Sm59Y1UuPHBDRVNxc0daO0xdcTh0dk5bMlFufGhBMz45QilFN3ZVYXFNJWs+ZFtNRXBjRTB3TW5xeyYqdDhWYW02ZERBMnsiQ2N4a1FGWG02eTE7PH0yRXBIKkd2fXxXLHJQdmE/NENYJEVwc24ye2N2ZUkvUX4sfFArYmchZjd9Jn1zWkBvflo8KTxNam42blloOXdJXXFTZD9dKmpVTW5MdzdX'@;
put 'VWBoZUNdZllzZ15xeylNPClUcWp5UGhnZnpSQFUsSig3UGg7MH5sQ3o/VFhjeHVMW1hpUnpQTStufVRifCpmTVRadXh3N0RKU10yV2tFd0VgIkZpPSU8ME9kQz5AMnJpNlZCMHJDdi51SyswImg3UT5eI1ZOXj82QjVdeS9tWGxZUFcxK1RkOiFLeUV3X1t3cGslb1Z3ZnhdLHxoMDEiYTg+RkY8'@;
put 'd210VHs8I0l7MHJCNkc+V3w7aiFIQCE7bXNmdVpKQj5DLE42YiZlYmlPeyxaP0Z0SUojZ09wRyM1KlY+K0ZHIz9mWFNqOlJnYFNTSHRkVGRacn46ISNdYWMrLlVfNDw/YzxbWXJyK2ExL3wkNipaIzttYilwQSJ6IlA+JGNvIz04IlpTR3pxIUFZRSJvdW9ZVFhMYWxoQXg5UikqUnVDRXU0eTxW'@;
put 'L1VIKEZ5U04wUURNcDx7Lmd9M2tobkliRE05ck94ejljX0hIaWJpakIoJEVnNjtsfTtKeD83OXMzMWkiN2ooYUUqIXZeOXx1Ml9kdzY3ek5+MXttOW0kfXIjQlYjUXVKOWpVeWN8eGI9SUVYQnJ0RGZyZlR8diNZTUAjTyxIX3k2fjEjK1k5bipOP3IoRCR4fTpuMmB0VlpKY1IySChwNHM/NzpR'@;
put 'fDxaWnJ8PEh2dX53SDZpMFI3PHhiOSw6QTcuY3o0NSFbL25wKj1ZN0x7cUJeKlN+TjBgQUohTXl9VVp5QlVeKHFQYi90djN4bnNWT35CcUZHXkJ0QnA9PWEvYEh1PX5oWHVWejY8KW52Zz5qTns+bTB0flB0fCt2UkgpKUgvdDMsSzYpOnlvY3dCe1RIMVg9dGNBeDpRYyxOJjQ0N0t3R09FI3Y+'@;
put 'Z2giMiUmM2R2M0U0WDtHZGJodV0xOHJAXl1CbyxDb2VoUzJHIiIuaDg6PENydDdYRjYza1pEMSZSd1BfYjVpKHxbLEZOW25OLyQ1eSUjOVQ/a2p1N1VIJEwhNzp7RSs+YmMpdV5tWkwpV3FeUi55XWZ5YF1wPSZTb0siWSMwZVgjfGw0cV5fWjQhLEBrPk1kTixZMFNRNVtXISl2SnxSOTh8fDc8'@;
put 'b3RlfV1JOGYjZntkQmNyfjtwWUxZRC9HdUpQZWZiaDMsI0BnTSVRcFBfcHRfZHNBI3smNGdxb3xtIUBecixLfl1CaisxaixmYnY7Ok4iLGZdP1ssfVBUY1tNXUpIaSNUTyU3SWxjZzZkeEo9ei4qZmxuND9tZDNNXWVwaTQuKldgWlAkQ2xjblRlJX5QUkRdRm9dV01Jey4jV2RNKHZxOSJ8Q3Rv'@;
put 'IT0/fTliL2pCXzF4RT0rMUtNYWFfPSsxPShyaFl2ZT1lQk5LUS55VG5FfHZtR25rKiUkPFtVZ2pAdXlhMTFDfGNLQXtsb3BRQC5VWWgmQFgwdzo4VjdoIVlwfjlxQD42JHErOD0od10ibD5RPnoqM21RVjQqQ2NmMmNUNEdEeX1POyM0bkBpdUR3TllaYEtLWWFHL1NKQ31TSm5gIm1rSzIxPytr'@;
put 'TWlGLDM3ZzwwRVFFLEdMVEhTcEFedW9jZlMkaW1gOEI6I0Y7N0F3YkUhZSs9Sk1UUm1PY1ZoYmpXVTQkSyxYa14jViVhT0ZbZ01kVmhRSnFgKkNqXjxuMkZFaFFKcWBEMTtgKi48cDVgRTxENmI9e3hfI1hON3FlaVQvM3pnU0F7OXQ2IU5FZExjUjBvdyF0eiNVQnlZWzVtSU8iejFWanU8Rz52'@;
put 'QEtLNm9gK1BvTntMdDN+YH1GKWJsYEsvaUIsW0QxYmo+Vno1JjM1aixxSWdSenQ0Ql9kKEojeDlBaDFHO1ZCNTdHc1QiO2ZLQnpzPlVZNy4pdk0wNSRbTHhILDhAL35yfXRuRllnOUsiVTs5WTY+UGMsQiY7OlFeNHRAd19YZyUldm96L344S1EuS3BNazR6Pn1ZNm1mPjBnZklqb0lsJCVdPSVO'@;
put 'T1Ihd29sdlA9RS5FdklgV1NLZVQpI2pyLF53UWtNX0MiUHksWHF2TTd8UG9lYzttL2ZVYDRXREUjcmVdLjxgK3NtbWszRGYxQmMvZFAzdVV3RGZzdW0qcWklUDRwUFszOlBPU0RBKUAuP04mP0gvSWFsdXohX2JBe3BHSShXJlVKUC5jLmltb2h+WSRvdVd3bGZEQ1A7PEBgQz10VCwyYnNBNH0v'@;
put 'O2p9YDssSU9AOXR8SG5feXZqKFVhR1huTHhqTm4ocmt1WH1yPjlQSTBFOXZMJXQ2QVU7SnMmdEpeRUV5d0okX25kNFVbW211Iko6TkkoOztzfTtLeVJPYk9MIlc1PV5efFFpeWUlY1c6S3IkX0JONS5AJFZpWG5yUjV3UlgqPUNPZzlnZVY8N01dWT85aF02OUgxQCxMbTkrPHFILDdhaEJpYCtW'@;
put 'eVUhWi4mS300JWskP3EjPW45cio5T0BWS3FvT3speTFOTUVHOkJpeClSY1t1TDZVYTFAYV1YMUhVdjVDd2JFTWMvQ0lLPmReVVRGblVJPy5QdyRpXiw0Y0ZeVTw6LyR6LEImKXIkOy5ZZ1ZgPn5vOCwrPFArbmRrfmAxRn17YU5EOm02b3xUNjJUcy5dXyklcyFVYytmZkd0VFosKlhEOXB9WDNb'@;
put 'XkJuR0tiWUlSRldYNUQ/Y0lDU3pZL3ZpLERnVltlYTQlVU5jMURuQnFPLm9hNFNSPHUjcXRENlV+QXpHIkBRMjB5YSNzPGAzYXh0czhUVXkkZ1ArSWBVODFmTj5mS3J1a1BNc0l0fG0uRHFWYWY3cVMpcWAyKWIxLml4MWVMUE07V2ByKXxbI3RgKTtxdFVlOkBnW2FSM25vNGpVe0JZaVpJQil7'@;
put 'KSZLMllyRSZgT047RncwRGYjQmghL091Q3c3XnksOVp7bEJNcUBgInd7R3VXUXdtZCEwYlg0dUlMIzFlYzw8d3d2MiUsIX5IcCM7WGZXKmhwYnQvfCw2NnwsSzRSWmdpR29PIkMqeXosd3oyaGFzZ1B5fis4dT9OOUVNXS4kZXBpeSRUM3lVJXdXbzpyK1hNM2hyd0AhNiRPaHAwaWNUN292eyNF'@;
put 'VFp3SWN+OX1IW29OQUVrc3lYX344N2JrO182fTxscCJ7Zz8vPld5Ul5wWX5GQjNqb0kwV3hxYWdqWV1GRDlrb2o1KnxgeVlhN0xBcltyMXZkWSFgTk1kRzFZLnFaW2pWViNLPFVGYnA8cDhZZV4lNztwdWlfLD5LW2hYfk1yIzN0b3pPUTsyNVpmM3l3XW1FOmU5RmIoKDQ0TGYjXWRJRGlJS09e'@;
put 'VlMvUUZeVShWO3A+U259cV9tdUtIZUJKTC80RDZhfmVQPXQjNT1WNDZSNStQcUNuSTQ1SXRuZEJnZF49X1U4RzhDOExASyglRFJEJjIwX2IoV1piPmUzR08jSDIpeTQrIVdYKHMwWGVCYEh5RHIjTFg7cCE4bEhLPmh8K09RSU9TNHVwaGpEaTx6ImBRT1ZvVUh8SkJ4R2J3NUhEV0ZIR21mLyNO'@;
put 'd0h2d31eSjd1I1ooSkZlM1lBP1tlanpENzgsNXdgRFByI3liW21FfDs5UnpbOzhGPlpqZ0p4QFdIPDBYYCNiWDcqWEFrX0V0R08sTGlHb09Te0loM3U1eHlBMDNNRWh2OUlBbTxwdzxzMWhWMnZQU0JeKnFqOGNEaTEpR0ltZVo+OF91VVQ1fWNRa2dPTUx2azBHTnIrbTliWFhIUmNxdEpLOGZ7'@;
put 'QzN1ZHhpIjlyUUF8V2JFQXpEMytba0tIIXxEQXBKNVhLQGh5aU16fW96S2d3NVg6KXNFdS9LekQzYUZRWTpMOShyWiJILCZHekcxQGo3UWcpayhpLHs7I2B4fXtpIWV0KC5pSEx0Vmoxc0Y9I0IoU1I8Q0g4RGUiVn5dKkU1bG50d2t8QDhrT3w7SDU6fH10S0g9MGZkXnw1dDU4fjB5d0A7UzUx'@;
put 'V2pWN2dZNGkmXXRpfG85IzUmantPTjhDQHY3Slo9SE96UjlWSX0wM01pTD9XX3chfWFOWiImUUFmNnZAXWZWNXZvSmJXOzU3RGZtRjkxYjhRNXVSNzhpRz5NZlhzU2J3JE1XL007cGtgIkB0PHZPM3c8PlVqcWpkMixxUGMvZVg7eWc8ODwmSGZ5fUs/Sl5GQWN1O1RPNjA0SCsxOHBWLlQ1OnpF'@;
put 'T3ZxMHc4dilHdFBrNVVPYWdLS0BTL1tMSzNgIVgxMFpkK3F0RlhlYio8OmA+a0g+TV4oPj0zKmRwLjNfaGFPd0hbdTo4ZXddM0FpSk8zOVY4TjtmWTkkfEBpR1lSZU1UZ3U0SU8oa3JlfWUvODIxPjRFNGdpLih6ZUlgMUNMVl49PVJNc1dCKXtJVE9fTXdgb2tOcHhUdU1zZ1ZbI0NiNytZaSJh'@;
put 'NlpIIUlsIV84Q30hJjoocClabTUjdXkvQkgvQj9JVU1SQHd1UE5NaTk4aXooWzpaUkRgY3BjNWgwZTVofHRPb1NELEY0X3g+RFhdQ2YhJElONiQ4bzkiSDZfUF8jRz5Db3FSWHlDJl9nQDtiRFgwc3IpcDVabGFDOW0lY2dzRD45WDVXbkdbTm9JdilxTGpaXjtDdlo/RldxdShkZVNpdExsbnEz'@;
put 'PnJ0OjdFSzhrYHExMjUzYmt+RnBWKVFuQz97djQ4fHhbTWVWVXczRlo9Y1Rfa29vL0thInI0ZDc+QiJIbmZ6bTQ0eVl5fFA9UGR6V0wrXygjVFZKWUZTNlhaK29DP2B9X0g7aCMxUHtARn1YYytnY15Wdl86NXYpIz1tWE9WZX0mdUIvdiQ9SC5mPllVZV5QMFRjdVRCfH1SS2VgaSRPel93aDR3'@;
put 'VixLTlVWQi9XPjYqUE05V1VLWTZeSF47ZnVncXolN3N8THtQdyRRL1RVSTA5JUwmZXRVT0tKRlBEeFtLIlF4fUpqK1oiKHdgb35zJlZ2VyFJPFZ5MzFLK3B6dTZyMWlXTzAjd1U/QEZwR2FwPWU1dm5AYGk3fHB1b0ZFYUdtSWdmbz9MVSlNP1FYWERMaUJFJSxOMVJRKDAvRldWSThqU2FjW3Qj'@;
put 'LGNib29EVnhnYn56aFBKeCZzKnNYUFc2fnl+cyQ/fHN8dzoyc25gJnwhO2ZNNF9+PHx0IykpOW9bXmB6JXQ2UWNbSFtfWHlyWVVWak1AfkVTbXRUeEg/Ij0xJDgwdkBlJDE4eXlnOkFWIzF8XyN6KXdvJThSKGBua2orW0I0e1k5Oix6bnZRfThpQExWXXRRNnF5VjVhSHM0Yz4/YEpFRWgvOFc2'@;
put 'YlM/OWxERDdFMDllYihCRjleLk0vTjFaW1F1dF9IfFAxdFVIUDVjOzRZbSNHLnxQQXV7QUtkM2ZVVkh9IltxemFDM0VHbCMsXk08IzF0bHooWDNaKWFGYUchaShgYmpmYjkyPis7USw3XWdWNHh7clBreTRTTDVKTE9ScXJwZkkqfGNDcmglSHsmVnglKHNFKHxXXzJJTyp4KCRFbCJOUHZkM2tM'@;
put 'cGNCSmpVTSRNQ1oicU5pIS9SUEFCQVJEUHlAPkJnKXtTMyI1TGVSMUgkfCtgNExlNWM3OUtwZ0lZaythQ21nQ0NXSl15OU16dElfU1E/P2pmfGA/JmFDaGYmQFZKP3J1NV1uR0s7KyZRRHo5L0xSKkg1Lz9qSm1kTV1ocCpEZnl1T1BBQnh1YVkwY3pEXWhETnd1MXRNSHl3VlhVellPW0EhWSZh'@;
put 'IyhiRF1oeEI5Qk9CVU5oTj1ob3VxSXEiUEd7ITJLeSZoI3EhP1BpeHE5d1M/KnQjcFJSUEdsR11nVjd8WDZUNiRGenp9XUlnX142KWdVNTh9Yj1pNCIqeCJqVVdXalI2MVtyTDdlRHZuc2g8aUtfeyJ0SWptNGowZE9sJWt5Sj81U3JmWzs4Wl4wPnpWeipLJGkvIUlaTVoxayx2eFpNWktILCkq'@;
put 'REw0KHxCezssVlVyVF8zNWgxSF84L08jXVFFZXM2Wz5yK1U+OWIvbj5GKDZ1fWpsVEVKendYS0dNTjhmXzB2anBJSF1yVnw5a1VUZWVyV2FwISlORGJ8WzxnVmxCV0I2Zj1HWj82VSE1VGMubFM1VmZZK10veXJTKVk5M19JUlM3ckQifSJYTGoyYVohVShjK1IvLlhodDIuW1c+Yj40NHZxIjdo'@;
put 'OjtDYlRad0RYL1Y2dnZXfld1Jn18RT5fTFg5fWhTKGtzLy8uaCNMPCxMRUxpenUmP01jYlRqd1gzbUZSfi5zRkt2eV1QRCQ4IXg/XzQ8IS8yOSF4JkwzOTlFaG15OSF4W185dGklR18yOnpIZmk8Yl15UXlhImtqc20yLlFiVkxyU1FGZCRUMT07M2t2KXJTWD9obGo3NmRCUUo9fHg9KnJTWD9o'@;
put 'bDx3IiQ2NGN0I1M3alRbflg0LkYpOi5iZSYwOF05ajdMTGVyKWJxUj8hYjdYeFh6ZzFoQktHLF0hQCZLZUFrMEd7blNPMCRlY3NUKz5PUj9ATmlnc1lqKlleVkFSL1Bed1YyalpPXWtWIltqLm4lWGliRUtGOVhtPjF7NmtUIVpmS3AkRSg7b3pfO1VAWnVyKk1+QX4oOUZ6QEBCKHBKWCU7RClA'@;
put 'fSpGViJLJCxlJTA0amkzXWdHQX11aFg6UUNYVy5QeyZfSWsyLCJNNGNiJG9RSG87bk4lIVgjXiVVXU9Ga3tOVT1YYWRPcisjTiYkNDxVJGtVUzE0Yjoxdix8TkxhaWlbNDY7IlhGJWkoUFVFWVtKeXx4dHtHfFkkT1J1QERqJTQ1c0tlXm5hSE9CVHYjIkBhK1gyRDYzb1tefGpWcXVrelpScVVY'@;
put 'b0pkPElNdDRNe3VHejByIl0iJj40Oks0bilDOmg3YTJia1tOMVk+a05iMD9jdSYueFdRbVYzZk9XMl0xeiVhWF9zUz1HWUR8UiRQL1toITZpb0UvKVlpd2M+PXoxXXxKK25YPXxjRWJ5MTw2OjRrQVN6QSlqXk9uZG1EMFIhJC5TNzwsQy81PTBbWWRlO290Yk55TFVldDVmOkhURj13Tyo9QzBH'@;
put 'PXtHcHlPQzMiR1sxTktmQV4yT0pzNC8xZlR5IXk0PC95W3diOzAvN0AsdHMoOj1gfkZVWWwpT2ExX357MlM5V3ExYFdYTCtFVHgqZ35CPjZfQSh9VGwpV1IodFR4dzFocHlfSndFb3FaKmkza1pDdXRfJjtaWT9Ec3BqNDlZY3wjQ29MWGlwQlBPMDE1NC5uPTg0NzlmRFgzdHw+dW5ASiowTWN9'@;
put 'XSFRYUNCXWlaPWlsMXkjJE1nWVEkfUljXVo/bSNfb3c4PVtaZE5KeGl0dUVLbjdNKlgvQ3JKfDIrUChqaCtVckRsTmJYPCFzdXB2YlBeOzs4VTgzQl56Q2YhWEg6JEs9PT5sTTsid11DSUlhYHtYYkhXaVlFfUR8ZWlROEV7NWpLSUoleltTT10jPGwxYTd9SDxmTGBlUy5MZGxtWk5SRjN2NzNp'@;
put 'VXZYNzhMKHRyc0VFd3VvTntDM3UmQ15pVmprQTtoVHZvb0VZY0RmRyZ1Mm55UV5IcnZYNzhMa2BhTEMrQD4jZntDM3UrQ3l6Iys6dFdPckJCR0UrODo6LkBTXnpyb3Bzb21WOGlHRE5ERGt0Z3w1djVKWW1deGQwZUFpfmFYRCpFZkV6QXcuTCUvdGMiIntGc2wlOH5YfCYlZU8pJlQhfnpMR0c/'@;
put 'OXVIOSIzREpGSThPe09bOU10dlEzNUJ7O114KmNbdG0uIytxUj1SQGlsIy9tM3tTY15FKzZLN0h3UjFub25mcW9FTT5pe0BmMGBeMmVDW1ZsNyNfTnRPUjFwOixLOlsxM280OH1ZOjhDa2dyR1A5NVtIOnE4R3diRXMwNTluWy81TVpPcmFYdHxyV1N7OHtvWj1NZTZVWlckPHluVk1EIXpxPmhK'@;
put 'XV5nc0gmIUIkP0coYDRSVjxnYHRpa3VfSl9eV258eTVYZHxMb2BxMm9HKH5CKDZaZ3o+UWk0JHdscUUrUFN2W3FnaWBkIl1ZM0Rzfl5bVyprZm9XekVXeTMiOyRwZWFMP3EyNF16OjgjXT1aOHwhXzMofGgqfXZSfWwrPTl+MlNQRndYeTVkY1oxOFNAc0kjKEhERDYpXXZ1cDxNOHduY1FjV3t6'@;
put 'JUBvbU5ZWVNjPlJWRyp2eDtJeyk7QjVIUEg2JUIjbEFDdUdTYXx4Y1EmTW1HbDAlM1FfbUJNVVcvUVMrW24oYFcoQWR1S1AsSXV5WSYkRWZ2MjpOcE5nJlJhJXZ6Z0VgQ0BEfSg9UFdpNlJvL3psWkgmc1Rdd1BjU0pAKmdnZStXSkA/Z3U1P0BVPWFVZntrZT4zIjNWWSNWKl1ET3heOTA7LCU9'@;
put 'P28kRVspTEZSO1lLdWUxISNDfWV9aCZbLltIZEpwNV9LdXtWVVZDXnJueTZRUGJqI1NXVClzdVI3fCVlOVs1JjduPERYPF4zNlp5KVE9YzRWNHQhYVpbNkJZK1ZVZ1t1IipbUGg0bW1lMHd3L1E+RGsoZjIzK3FDQGFIPyJpfXh0RXFuMCk2Kj5KJDlPeCZUU3UqVFZCOFtxTjsoPkpANHJDXz5a'@;
put 'TnRNc0N9RURCaHcwXkdocXdWaHJzaTFIUWU5T0xxdXciWDFlTGlXe21YOEg5YHApclp1fHRKUU9iZWxyLyt1JE5vJCp3bEpeOEF7WGVGfixsbTkzJisscTMlUFNhNGxsNmhFRmZVNSVhVElFXXV+aCFOPH5mfl1qez1CSUgzP0RjYyp1XzV7VCErKXNDQio6Xk49THB6fWY4TFBXN25Ua3MoSjBR'@;
put 'ZTRHUmJIMn0jIn1lUHxIV3dCP1tRRWwjSU0vWVRrS2hRSiU/MjU7KXd7VV1YO1hfeUtRZTJrUjxwe1k0NDVFLzx7UitkRlNPTHd3Ikw7KlVuOV8xYD1yXyUuYilxX21rX3AmYHQsPS5MdXFVdTQzb3R3Wl9pNEVYaUZVTkRhKEV7YHY0Xnlxbz5tUTd1WHpPd2VUOFEjbVFEQ2x9KzwkOVdPSE1L'@;
put 'JEVZIkYhZW1QVXcqQlFERVh3bEJHbmFXNmJEU0RXTkBQdiYmXkB5PitWZkdNbCVbRFQ2YUM5LGQ0TDMqLiJAZ1JaYUBOOTx6eDJmT0ZfXXUwKCJDfV5HZ3BGeFI4dmpbaSUzK3Rtb0g3OWBvaCsxZDRvPz5gQCsuRWs6W3Z3NGgha3wyKjhpMU5RPEBTbjYmWyskeHB1Y291SHNlbT5gKEZTKy8k'@;
put 'XkM2JGFzKHRwUGZbNS87aXAkYjgic319W3QkbCV1d3tzND5ufW9+bElCVkNaKWkzNmpTI3VIVkM8P0ZDPERzT25zJWlSJWswVGZUJWRjOmNnL2M3Pn0kT3lHcUdPOl5JWF9bMUNEWSNkdmNzamYvR1E8cWgoQ051QF03OTk6cWNka2BKUHI1VUs2TDhTZ3lDL1VuOUwwOzJlUDZpNnNUfVovfjBp'@;
put 'QiU3e0JCL1MzNls7Z3wvJFc/VCEmNGRWUElPS19BWEN+bjosTypvMjBwcEEpZTtaPCFrWVZ+MyhkKyFoYyVfejNOI3lAfjt4Q3N9LmVocG0lVVM7OSJmTHsiUGs8enVSVHImJGUhJEFXRColJCNrMEVdTzhRMyo4QyZEJkQmRCZETHdmQD8mPS8lJiJDOVF4P0hsSWw8WkRkOWFCXW5Pc04zPCFr'@;
put 'MEU1aUh1XnxdMi8wZTtfZiFxIitjVnxHKjR8ODduTGZwPVdrWTtBbUUkKkhacEhqRSQ7VlFHdHh9XSh0cUAodFF1alhZYkBGJjJGK3opOmErIy96TyR5LjUmOU9IVy8uekNGLilhOFs2ZWAhK10oS3hsbTRXYWRNVihaV2E9PmJfcjhvWzgue3M0QHI/XUZmWGM6bUhIRixUVX1RQDw4O2FtNVtY'@;
put 'Ols8LHRuYG05IXxFam44QEI2cWswYig9OSE0I3UkdVM4IihiaG1zVCFiPkpnJUE1aCJ1N3MhaH1dQnI5ZTNdLC9SNnJVajVqUkkoS016VEhYZG5bWFUlbzRMM3sjaC9qQmkuKSU2YXYwTGJ+cWw1Q1RtJSUlLHglPWZtWGgrWUNjc2s5b3M7XnFeZUFkeUNEe2oySTR0LlklYi96LnNybFg3azlg'@;
put 'eUtLRlc8ZiMmO21zfWZqLy4zbnw2aFpVU2EhfFluWlVoOTUjSng/fUtzI2BCZ146XWx7ImJwLlk3NFJhIyQ1aHVXKkQrKl8iS0VVeS9GYSlUPHVwaHhAXmpndEV3SHYkQ11uJENdfmdFelF8SStBQnQ8fUA9XlIrUVN4KylgS0dYbjpZa0s0aGJbb1txfmBWPH1gSF1TcjJub1UhVFM+ajBTS3g2'@;
put 'PHVwOCpscEhwdzRXdT9SZVpVMSklV297YXBpM2hESUgwR0l9ZkU1fiRPLmdwdj9LMiRwblV6R3Y2Uiw+LltSRlFSRG5HWFAzYHJtOyYyTGNZM2J8SCVQdWBgOHZjejZyVV08YEt+cjBHKF19KUtUOWV2d2U0VHhfKGV8ZnlaIVcvLFR0aHhTQnhRaSJ4NHFTcz1eOEMyRHNWRGs1Q3VtbmQ3ITtA'@;
put 'dntge05fMTElW0FaXW1+YlV5NWRWeWhzX0ltTGlNTDN6bW05PHg8Jjo9X3tPL3VmUD0zSHZAZE5YSmIsI34ocldnSm9QOVNyQXl0Ln1uYSlfI01bJXR+JFpENmsmWWxobmtWO2YxNXdBclhkJHRSfGo7RzE9WUVwTjN5VTRULk5GS01lZVlFaVh3WXNlJiUvREg9aUMzZkBSYiolZSxdPypeensp'@;
put 'U2J0WnJ9VDQvWFVmdywqYlVEMyVdYVVSeXBFS2NdclglUGU5O0kmd20vRHR2PzlTNHApdHR+YiUzPWd1LlZTJlJVI2E4O21XXyZqOz1GUHBzM3h2QGxLbFM3T2RmP21IOCVQKyE9dXkyZzkkJk5MOyh3P2UlXmExZSJYalVjL2tCaF8+WlIreipmI2c5UDgrMWF2JTczb2RSYiJiUjJyPHtIeUxU'@;
put 'SUtdQGBdYls0c0huMkN4ckFuSUtJITs5TE95c097fEJsOiN9JXR1XkA9azp7e3tRK3wyXW1rOCVBNDpeWVNFO19bSTVqVmN1fkE5d1kjJnk6LiFVYkpnODlRZT1EWnkpcTFvJVF0PTEidFIuZHhbWTZXRyh+bXZmeHdGZ1pma2hxamkvOltFeGJsQFFKeElhV08jUW1ALzBaI3JnKy9lRHQudXMj'@;
put 'WiV9Zi9lMSF8KzV9fWVjZTBKNC9pKn1lY1VHbylyc0NOVj8pfWtJRXVNSXhbKld6MXx9ZGYkYVBicmA0aGIsZUQpNyV9a0kmPzl1PDo4fWtJS35lYyYoeFtIdzNoYmxkSCxgNVcvUXFWWndOe3NpJGE/YnsoR3JTTiVaZ3owZysvJnxyX2thUTkyInFPaGxvN040Wk1tIy53KUI1ZTBAeyhQeipX'@;
put 'RmMsTFopQ09deUU2KUJGYTMsQHRvTCR8KzU8TGhzI1pMYUUwWFliMSZ8Kk0pZ0ZjempsMFhZMjBnRjplO0ZNNHQlOi40WyVNIyxMTSJCaCNVRTsrPVA/QEFYKV1sezxofEQrV3FJQX1wUUFDWShJMDRCbHxlUj5AOXVIWyZ9OEltYGVYQkA2fThJWTVZWCpPQXl9dWlIRGdsMT9eZU9SV1F2UjxY'@;
put 'UipPTjdjRX59Zi91V1dXUXZrfDk0LzQpfTBJcWBlWHBRIUdNSi8sLlElZzZMWnxPUkF7ZVgzKW58T1IuQDl1UUNCPzcpXzA5R0I7P30wSWdgZVgzKW18T1JgYGVYMGA4fTBJOT85dXdhZHNhRTh8OTRkNiN8T1JOKmVEV2xtc2J4fX1mL1cxOXx+UT8qZUQ4ek1QdURLMCRhOjZtfH5RPEA5dXNH'@;
put 'RE8rVzZJcEdsYUJ1Nj5FRytXZG41RTxpcGd7KV5XNzwqJDJhbngrb0VZYGNaV1JDQE0hWzh4VlI0REdjTmlZakddOHgkUWdNWFd6dSpMZ1pZbENtUEd7b000YSlMUkdjXShsI3c6ZzQzUj1gO1k6eXN8bE1IRCR8WlE7aWhzSHhEaSh0QzBxej5ATSVFRXVzSHgyZ0ZjVCVkUEMwZ3g4dTd8WlFs'@;
put 'WG9zSHhtcVMxdkBETjEqbXMwYTtmQG5TMWYkWyQ1W2x7XVA7SXhrN18+TSZ8dVIhQDl1NTczRGpVYnhzWVYmJitYKHZTciwrVyZJQX1wUT5AdyNUV1N2Z1ZuNDJ6fGBDal9rU09oRUN+VmxIOHBRPkBlQkR7dEtRQ3VzLHNqZjNzaUVTcHtSeVk/clhFQSwpfVVJajV4dWNueiV9SXdYazQ8d2Ve'@;
put 'c2lDNnt2dkdiYEkwVEheV2JlYFt4JmpIflc3ZSxEcnd7X1loO0RRJTRlVzZoO0VjXW4kZjlqdyUvSiVbfUNKKUdyQlF3WDRbY0lrYFptRnJ4USNRQ3syYlZoVDVUV0l2cHFENjVdaSZ5Rkx7SGg8MmdYQi5NKFpRRkhlRm9PMjs9cTAzfmJHZGUxa2RdRSEieFojaHkuVmxTRSRLdzMkX0M/RClZ'@;
put 'cnxROWhmKDhzeFEiNig7ZlttdzgyQ0lSWjooLi5taFNVSUVzJkNWWDwxcEd+TXNEbyV7Y0VgV3RwXkdLWnMzJkMwLjdwLCMuLEhlb3Q4Xj14ekBBbjxwYCooTyxec0AzQ1E+O0NwfEh1XypqOjtDIlQofVNbPF1KQUIzdFRDX1ozbGlEUTUsXVNBRis+QmBkdDpWREA6SylrUUtBVXRaM21nVTM1'@;
put 'VTl4TSU3Wkc+ZF5vN2BRJDVTUFUjW280VDh0aWRlNyY3KzlFLDc9bWJUO0o3c2dxeTdZJmhLPXdMTFlxMT5fPnZ2fkNjPT8yJF9udDhKOWVQblBvNEF5Qy9oUj05aDBKdXE9Q0dSdi45d3FRIT1GdzovZjpBWG1xJm99Z29bQkY1eWVMJFVYOiwpTEA8dj4uJmQ9dypPPHhUVXVxNWEoQzllKHV4'@;
put 'dk9kI3RZcFU6UFk6dGZzQitmdGllQUdkOCF0T3NlVW1iPERyVT89d1dNO2BUI1txbUJ3fFNMNVVtb3deP2FXViRXb0piMHh2QUMuXT9pP15nZi8sI30sZntgbyIrJXRLUWIjY1RveytPbWE0aXxVJHomI04iUH5rUVBPX2xZR21aJnc0dTNgPGdEWWh6LCwlb3c4ZDdJbUEwa3BEPEIkcFRrPzl0'@;
put 'ITdienhXOG91fFBuTiUmKFAoPnhyMDpvWDxbKllCc0NVcHoyN05JNG5bQUEoMzIzcWJndHZ2ekBLPmxvPl18P20xI2VyTys7eDBDQVNaeEZbMlVScGRFKWg6PXN9Q3JkJCIvUWJjVWhjODBzdF1+UnxLM2RBTSZuUjRocXM/M0MvVDwyXntJYzFmPzREXVhgXlh9cWRGYXs6Tlg+e1lmdVUwUzBZ'@;
put 'YHk8TzVmbnJnPnhFTiVtUWVucGc9IUpIWTheZmJeR1V0fCojdTdbdWxhaGYoWkZiRlhqKXdYMUt1X3gqZW1UUFNSVm1PaHJUNVZiOWYiTyJfTnozJEJAVj16RWJGISEpX2JCJnBkVnRCeCRKT1NIU0pdb1FJVTZ7XzdxcnMhZVJEOEhBdTpJTWMmWzFYTThkJjtXMjUqNjNzIVcoQ0tmQEl2fF5g'@;
put 'a1hUXXR5aHRibEdQQVVtTF9PcSNwVGlpYkY7elVfJSNLRnlMTyV1I3BUdyMiRGI9dF1tJChyUCw8JTRLNjMiLnBEQzMiZ0k/NCQpfXBERWhjRj92Z0pNY2tHVVhpWWs+Ql9YeyVkTDx0fS8sKClpdWRCKTp0K0ovSztQJWZXSyx0QGVaWVdNOFcwbm87cmYqUV9Kb1hUaTBrO2g6VmdNTDYzcSQs'@;
put 'fkEzSVRifFpvPk95QF5zalF5SipHSkU4SkssNlhbNmo5UXA/PEA4RixpZHtYW3UzaHkiXipLQmE1YlRPZDt7aDp6PnBIRyNsR1ksXlZGeFIzY3BZKTVqfEskcURZVWhyT3s3O1tyZT0pKj9qeTtnVVYxOzRofWY0PXUufWZUXytWV2ZmVD9eeUBOJXhVOlcpPzI1MH1HTlo9KHZHcV08dFZFeUU6'@;
put 'ekAkNFlvPFdRUnp5UUF+c3ttcnM1YFolZF0zQ2A3Um1+e3lVPT1WTkUxbGlJTlJaIkwmXS40ai52SEIlSytCW0dLOXhOeUIuLCtGUHA/MTxCQDJdXlVoZCFsbEBDeX5qRUckaDRfV2VuLjdgZmUsdGRURT50XiF1PUFOQXBSbixfKmg6QiRKVFNfOyNKVENfdT5LPGZiYH00dilyMnZiPXYyaUlh'@;
put 'VWIzKEJzJThDPV1PMzJvaF9SKSpvfD5KLiFbJHhXL083Z0RKRDVtX3RIQiRHYzZiY3gwMCRrUkU/S2VbXkhvbEtPU1B8IUIhJF91PUAjVW0zJFFTfCRTdS9dJXlbSntvW142QWBdYj9yPH17QG9AMTJbfiZgI2dXTGhBNVRtcndZM2JlPFV4bWtmQCRGMUY7PXtOaXtDKVJbKCMjYjl7OjAuXyhr'@;
put 'O3RAcXlqZ3NYU3xLPmc4fDpdUnJhViJ5T0ZsOW1SZmxzIlNzJFh7ci98VTNmeHJKLldNcU5NZzx+cn0oPTNEVU9KQX11JC90PGlEW2drRkBmTSlLPDk2IUY7MFFCUC9vXXJbcWZzRExeKUQzaHFUL2lLM3hTb3E1MF88LGguS3Vxb0RreV1ZcyIjS1I1cUdxXjMqbyJYUzRuMHpgSG4oRTk4Q0dW'@;
put 'QFsxZGlwdTJ7XilVb3RreEVJTUwyWkMmRVorNT1IfSl8SExhJV1efXtnfk5hbFIqOGRpLylKNVhhSksoPWVrUDtZdk9GVWxpQ3xtZWkvKW5VUSx2L0BXInJQXygjS1Z5cVUpdFltaU8yYio1IVI6Sz1oJEs8MGBpQmpOPyMzS2hMbilGUXBzKF0weWZCd3smcjM2Q11KeS5zMFZPcyMzcHpDLnlq'@;
put 'WCVVeywwKTcyTHVDY0VIdCVuVUVFRXtDS2o9LnEwVDR+Q0sxYWFeUS9dW0kzK1NDVlgwPHpsZjQyOzh0ZGArKn4+bXIxMjR9MV0uVVV6PywyYjdKfFVdQDVCNSN9P2tAQncqRyp6cU4uUi8hK3pyNnNOYGE/MXE+NjdeeTJ8bTo7NlUxWG9dL3FmISVjaXpTYjJkN0kjbmZGcVsrQiFwJmYlPmdu'@;
put 'UUVHPCJWT2o4OH0xbF9sP1IwST99ck9odXZnPCg5LnAsUTk4e1pxd0MsKTRxUFtQL2NoYGpPOFQvfG9HaEtSNSM0REg5bldwPSh2cXw/Uk5TMTBvclk1UG88ImttYUkie0toe2E6K0xrTmAhJS47Pn02VWYyTmJwdUZSO29zZ3crYmt+VEdTPUxMOG1ScCx8cDlvM2lSIVhgZCF6SWFFV3Y1KWFp'@;
put 'bEpvaWFgP20/ME5tflFWfEtLdHZWKyhYMylfX31TYUVDVF9ubnpvLGNpa207R0lxTUNad0YvWG01K3VaN0YoR3lqLHRvVixpNkV0X3RTUGtOUE4kfF59PyZvdVsvfCltYCphL2J2Z1M9TGVwXnxZXixxYmkwTn5ObUxzZyYqYGBPW3hCZn5kPU8hYF16eVFiOjJzVT0yQS9lMUY1PGpuYSNnVl52'@;
put 'MDZbSjw8TFRNI1FDdzB4OjMwKmFxfjwrVVtNO0RTb0VLTU93eFopNzA2SWFVJm5scD13ald2P3o4V0spVmVCSm89RigzaHM1QUcubEFIRDhCSERaYVcrRU02fk5vXS8hSiI/Q2NuKyF8eEpbaitnbUc9aWtvXS9aZkx9eTlbWD1WPCFOKEsiKnJBZD53L0t8Iy87KV4oMXldJFJ0cltxYzZET1JD'@;
put 'UlpiV0p6OS5wXmdobVZZUTNCTygpT0glJjlnaG9JfkEyc2p0T353QElhJipodyNDdVY0Kzd7N0tbVj9yemVLbjdVfiZLJjx7QT4sWnJgIi84NW9OZGlvdUpoSG1VIS92fEA0bHZ9WHUsbURHWG5TJFZffUcvKykufFNCLm88TXl1W0BwIihEZV4lfFp4LkV+LzthaEk8Kl58cmxDJip1WjdbLyFG'@;
put 'eTVdMCksYDx6PXdacCU/TUBnOTBiKEdxe0Z5X3Zfc1dzQWc1RXBldm1GKDBtUF4pWm9rQlUiSjBuXXove05aV0cse09bOkVJcXZsVnw3enx8JV0jVm1MUG1VPTBtOD1zPjBtcz0wbVt4em4sMEs9JE9PZj56SVszX2FwPVp2T007NF1vbzUsWDE9Q20sYT9LO25oSGp6eDRmc1FnOWZBPDlLO1Mo'@;
put 'Jm80NDkkflMlaDFRfG9efDRDI3ZwIiUsJlpzam55KTAsfXBePyJ3Tj8iOW1dQ1tdbDYhbyo3bj5nUHlGJl5OaVNzdmxLIkRfUDlHfUdzLE43VUpaWmV9fVI4Rnt4QUsydjhyMTdVXjgzQC54ZXMhfFV0O0VkKyhlR15iOHh7OTtacHQhIXUyT15rYjheZyxedip2SWwmOn1NKXZvN3dXfjA1SUZS'@;
put 'Z3ZNUl4oLk13anJIXntXZEdhSWJEfl89Iz8+OXdacHx0Nk1fPEIlODkrOE0rSykvfmxySGcsd0JuPklMYERnUDlrZV8veDojczh6VzR6PkJ+L31vcD0oanRXWCJzVlo9e2I8WjEyX1czfTlPPlVObDBkfikzbHM2c2xaXkVTZWEjMl5qWjw5V1Z+VjEqOHdtemYmMjxbPFM7OCNSSmlGQV5kPkE8'@;
put 'R0w2Rk09QWgkISp2O0BeKXFgUztJemNrYzt9RmxFYDEoQyFHW1thdEZMdys4U1RTJT1+TiRnLDEpMXtteTNWTWdUJmttVGpNJVU6PlZlK2R6TF97fTsrJTxxcj9hYykjITU1fGB7WCtCe312c202V2RfdHk5JWtSMUpQY2lfKEMjMWRpP0JbVWQyfVExK3wzRTBYOGd9XipPYUdeLHcsOS56d0Yy'@;
put 'ZGpGUkZtUkF3ZX1ORnRveDRhKD8rTWMxYF9EI1ttITFdb1V4Q15rSUZ5fCpHS0g4PW9ONTxCTGJBZW91JC42ajIxQW1zcEdzfUdGU2FlQnQ8cjFvXipbdH5fKWlFQjUiPTs3QGZXWzcwKTZXcH4vQzhnSHJlPCNFazN0ZCM5KS5FeEVrPFtTOS9Tbl5wZ317S3pedUtgNmJFa1YzU0pJZjUhLHJv'@;
put 'ZHhwUCR7SmZmfGpSe3xnQ0lbWz13MnBtbTQvLCslVm9LPFMxJTlEPXx0MFthXXcuNDlhL0g4Tz18JE17OnhMbHxvQGFmQitWczlmS1huRFpkazdhPi4+P2l8dzgkP3FxSkBkJndPTzRTIUpdYDR2Zz8kLHdwfUBEIUJTemtGdzh7TDYqPmFqPDddYzpqKlI3bVt7YXRqUW5kP1dVTG5Pe0Yse29L'@;
put 'NHF+dyhUbmFJS2NGUDVxWT4vb3ZIRzRgWjZ2YH1+NXApLz1sPmh4PHcuc2ZfMGhPOzk7cTI5Qy5dR1E8MUU3V34/eiImRkBvfEFyTDBIWyNUXTNLZU5SY1dwRllONCRVaD9rQE59LC9xQT10al8zS2VMMzs/MWJGUDAuczFBakxGWC81NkBmJHAveyRLTUksMkgzcWoxK0ZSeTEwakluUzwwI2pL'@;
put 'PkBOfiRJI0B2XjQ7JF94aj8/SkpSRXx9NzM4QFMhUDBffTJSNX19VGJbTyk7OiIzdjwia1VrRXhrMTAsaUM6Myl3REx1PFdiQVNYZ3RAZVA4V0wydWc7MFAxaFlMZV9NZSY0bVo8aWZdfVk7VVRlcWUzRmxDa15FfSVYYD4ofHI+fCVTeyhwSzl4YDRYZyUpeFJEMCsudDNHcXxydlY7OVgoVmBB'@;
put 'RWV5emVMVWJ6R0ZUNCMsY3BlM2Jed0huXXc9V3E0bVNVSFY7XSY9TUtgbSpTQyMpTEIvLDhuUFFtcVtsNDlyRmxXbF94RHIsYEgqYDtCJFlXXih0eD0pQlA8bFRwT2xMIVh0OnNsOH5lYmljaSRCcWBxcEBURDNgPkYhbXI4W01YQyxsVVp1aUcvS09YJkM3XXhya3Uib1kqKFZwUUtMMn5ONH5A'@;
put 'STdzT1RRZThPbGxRVGNrbEwhMGxIOG1mfmk3fEQvR1lefipxO2ByODV0RFdeeUkvWDBaaEsvJXZbcXg/clFRfkMxSjRBVVlVVHUkfEkzOj1zOG44Om95anlILnNpMyVrITFCPCYsOi9jLGwxZVBWPVdlSVB9LDlzKWAyMCJALDhSRCpER1AjYDJdLmAuVzF1dFFvUj9sdWo9cyxLL1pBRjFPOjY7'@;
put 'c20kbFV7PmkoSys/OF13Mns2bFlWa0cwMmx2PEFwKnAqUG5zKSlQfXUvUWQ5NSRZcCFvJG9PfUhlZGtSb3tJTVshJVRSY3BwbXUrcXk8Z2pXKyhscmtvSnxnd3hwNVUwVWJoNC9KaWhxYXBYWjlleWxeW09Afi9HckdjKzcoKk0lX0ZRPmJsKmZXWEE3TXMvfFo1WUdeNjVLOz03aHJaKH5ie1Ne'@;
put 'I0FmfEwlV1pPYmh4djx6MD1AVF5hVV5xQy4vUzU+KlZnYXdtWWY2LiJvfSZiNnVUTVtLTzRLIkt9JmFKU1VYUVUxZ0dvcz9lOl0jVSpzWHljfXF+IU95KjR7TzMmQl5PV2puLi9xLDk9dF5RP0AjIV94YnNwQlEoRUZxbjY4cEQ+MD1sTFpUdVMrMCV9RU88MkhpMjkyO2h5bG5aY1VdOCZ6OFE+'@;
put 'OSVHYVcrVnY3Vzt8YUldRFFsS2kzfHdvYFgsLH5qWlomWCMhXTJIL1I1UDN6KkwhXUoiMlJdMUovcTVGN31ldit5azoyWSUkWnY2QCs5Oyh4JjFjP0R0dmRAZVt9U3B5MnclVS5xOCxmO0VmfnFIL0ZdcUFYUThUWHZrPXpCUHB1MVRiNnFFWHwsNnl+aWF4bytfXnw+PXwvRjorc2RqWHxWV25b'@;
put 'PFNkLm8oNnR4WDFbKSVKaWhPfGpfVHBgQmU0YSMrTzFzbU9FaS85KiY+ayplYWBybCFDdjZvUVBBLyYydnA1JXxXU2wjLGt2YDZyXSxSZkpFWzh8MjZ9QyhoL1B9MyIkSUV4SXxGRStHYVlVLE4xLHMzeChsOitydSYlI2lmX0RvZ3ZkM0MlfCYhPD1DL2xmfExUNEsyUXl0SX5gOldELyRle1Bf'@;
put 'fGAmSXtaSGl8OXRaKTR7fExCK3pGUV4zb2RtNF9LVXhPdWNlODxDL3NVI1pwU34xQzYhI28+QDk3SFVuV3NzfXpMOFIudSFRZUJ7c1tCajxtfGFXZzx2dHx5bmJufHZHeVJ7diFAW3BCIiYhUlUvNTZfRlt9TkU+RlZRVyxkPF18WiM/LkNiIjNJSCQ2NUNQfkpUIV47TktQXi5jWz5sPCFdS3VI'@;
put 'cHp8O1sqZWR2QHA9NCRQdXV5PUV+bigmZ1RUISRvYyw2fVBVQlomazhnQF0rJXZRRUM7aD0uIX41aihfMj9qODVlWmFjKFR9Pj1bcHtxfGslOEg/V2BpcDEuST1PJnQwJX1XMz1PcSNGI0dedVlRL25xRDduWXg6TlcsSyQuTzUmfXJ4UT8od2pXRzpVKE5kUmNQLixZbFJ+IXhyTm4sUSlVUWlk'@;
put 'Iz1pKks8NlMxPjhxPz9vezV3UTc0c3h1X1RUOnBSOW4pYzIoUjA/PVVpXyJdVmxmdFUyPFgsQ3RTLyw9YiRJIT1KdkpGSWQ7dXgvN108PVdSV21BKi9Ya1tebThEODNwS1M0cypKZjs4XnwkZTE0bn00Q1hGS15HKEFgVWp2NGwlWCFrViZvcThCT2A6NDJFSTlIQCluVD5NO3lEPH1HdH5xTl44'@;
put 'aUE9eU05UUtfOjp0VjtIYXdheXVXZiU/VmwzT3h1JTRpRm9xdmZDPUdObTp9UXNNeEh+JUVveHA9KHI6KERrPCk/KmV3RC5FVmMsUn1ka1UpQmJHazE6WzVWVj0/Y2g5ZXV+cVNQO1J8QCI0PGd2TiFlNmd+cT0lOF5WaHlvXV5JO1FyPHg7V2w0dD12aTNwOTxpVX1YQEJyNCM3V0pnODMvWzNO'@;
put 'e2s6fn1ZeHtKYFtRbnV7Pm9CMFI+Zjk4SFdpd0g8Vn1eQSF9R2Z1bHNpdVhad0ZYNH1Oen5PeyFXaGk4Q1NEWVYobjA1LjxULCk0RnQka1p7ZGgka1FMdE5tJU5mcyZAcmI2YyVIJXxwSkBJajZIXi5VM3IxPHRnVkVXRWBncz0oQ3pCTU09ZHVoUHk2OlVYIXZOfVZRY2Bla0JiTFZSIXZfMmAw'@;
put 'ejYmWz1GcTRgWyl5KkI7YS5JOUt+ImRQeGlnK2VHNUJQT2BjdCMmWmFvOHJUL2hgQUlTdEY7LiFGZyRNRmdyI1Evb3xrND1NP1dNSGpYc0lEYTJ1WGQqQXFAJnZrQ3J5LFhHWDdpLDRma3heWTM4Qm5wNF4yNFo9NGVMQFRpeSRzQElzOEViP3k0NngmNF1YQUpbNDR6Y08mWjZkQUlOPHIlUDpF'@;
put 'Nk9paTdEcGExKUwxT0N4TXpGTl1scSV4OEp4Xk1+d3h6RXtMQWFffmo1YXojKV1iLkE1S3lwZUFyKzo7QiNbLFBPSF9PL2ZdSmUzZEQ8MVBjKz0vOWB1UygkemdmRHB3Sl5EOH1Db1QjaV0ub2JlIkkrZnslLCxKcm1eQ09uTjtAOGAxTlMvOW96V0FoKVtIRXdqazMhanNiOUh6RjJbOz1VKFp7'@;
put 'TUZZK2dLKjlkXyFoR0Z6XihPNTl3TCFbSEY9bGJ2e0YpaVVXM09lQ3MvIUpmKmN9ODEqSDJKb1EkRHRWSE8zN34xejF6MWwjMzdRZyhMRHg/dXRZKnkoQigodilNUU1RTVFNUS5NY0diRVR3WjZTI2VNdHd4fHM7Vk1YeCg/Nk5kdztxS0w5SD1udl1bV3VYJGdQe3MjOylzWGY8N2F2aj5Ee054'@;
put 'RDZbP3hONWYxelZNQ2RpeXVfXz4pJldWRGZgZylhZiVpN3FDJWhnbU44W2RPOyhwdGI5NWApPm5UWHhZNTk6b05uaSJERG02JUJ4KkclLDlIOixjcG52LEYrRD9XM3EmTW1veWg0UXx3aWZGO3hzcCVWRlpNXmUvYWFwIltYPlshQWZCfm1OOmpSPHxbZWU+KV5AOX0jeDY+RUZPeU46MmZVekMp'@;
put 'NC9xYFBfZkRVUyZ6RUpeQzhhV055d18jLDQ/cmBnOzk6I2BpSkQybHVzX15oOUxYSEk8bF1qLDhpUm9qYm1bV2dgYSxeWWg5KWl9XSQiaz9QJjJdNWt+RTZRRzlVb15vdFliRjd0I2gvOUtANjM5VzcjJmVPLyMxKy42UTU5ekRHQihxUj81XS5Ecy8hSnp4Lm8vNCgzMDV0c2p7JD9zNEtGdnV9'@;
put 'cW45Y3prQjI4U2c+XV1MRnhGe119a1RNcVgiU3dGdXVjLCt2PEM1QztUdls0d3N+fmBsX1h1JDFrfHQhV2J4OUI+UDVZZ1ltT2pISUcpQSl3WmwzV0NOJjFDaUwmW0Y2WWpMP0NGZ3o0Omx8Xz5yYFN1UEdbdUUkdT9ALGcwdDYuK09mWn1MeGQjV0VEKXcsN2c0eGB3UEdHb1lJdyNtZEo4dyFu'@;
put 'dGsrezMxQDNLTDwvL09ObUs1eCpiSTh2MWtWOFo1Ykc4KF1faTQ0OmJbLjZZV3s8UCVaPWFVSHJvZ05JaVtkYjIxU1BvZWJZRFkySGJAaF4jVV1fIz9uZXZpNGd4TUFVfFdWVXZnTGZjO2oqTDk2JXg3NlUlPCxYP29zZ2dVREt2KiU8WlVJMGl4eDE7XX0pZm4yZzFuSSx+WUVRSTJtIz1deCpJ'@;
put 'L1FaZl4iNyNkUkxucVArMGM7I1JWNyhIOUd3YkV8N1dudkt+ZFs2RSV2YyR2V0g0X3dCLy5AW2txV0lgdS8jNSlDc0c5RjtudFs9cSw8SSNDOzdLP2BGLiRDfWxCSSQkT28iL2RdZHZLaG5uUExldkd1LEEpLDA3ZDNMNDU+RUlPT0NYQCpsJnAhS3tXSnlPYyspS1dZV0pwMTlJJHt0WW5IXmVm'@;
put 'V1tIckFIRW4zPXA0Ujt8QHBUJWYhR3xlYio3blBmWmVuViEycGJqayVHPDhxZTtGWCU9REdQUG5CJipRfkRZK1Z3bDc2VUg7YWRbZHVIUFUwSl5EJWUyPkBhMVczQ1F+NT15d3ZjRGVFQE0kdTR+JjtxclVfOnEyYn1BYnNiZDQ7NHApV1NLZT8sPUdXQjw6Ylt0ZFA7NTQ7cEEkNz88Oj1iWjhj'@;
put 'KSpIMnNRVHZqITtBajpvKi5VRDRtdlM2NEVdVnkqRnZsaDg3Mmp3KENRYUVrSTNmUUd6YCYyUFReUnlvJHUkVW1xb1QlVVJWOW9jX0UjWypYSE9gR106Wk90WGphOCRlUWUsU0Q4NjhwMnNGWCRnUHtoWyF+RDxzcnZEIVQuUFpkeT50ezxudC4+RjRocSI4fW5MYVchRE4/d3ZdcUkwbVsudUoj'@;
put 'XTpmbSY0ZHxwSEB1Zn0lW3EvZXJncWJELF8mO1hCXmxAdmgoOUI+cnMjMEI8UGY0Vz9VNDJyRVdeWndEdCwpJHhRcH5+cVBJZmNVU09mUyhxUkIoJV8qRHZsbSU2fVU7IyZLZHNZVnU7RFRtXlVvS2JyaG9QcmlOIz00V21oflUjWExaaDkvZDleMTBHSG97XWJ6I3EqPlpBNVk3WihCV158MEYw'@;
put 'MHcrUXFHUGE4VmpHNDEzZHJRT1thfn1uZV87N3VlUjR9KG9qTip+eVRAaS4meFglfVtMQXAzP198TStlU3U+dk5+dDxFP3tvRF9bPyJeS248aDRke01fcyxCcCZFUXZ3eTFSWCMsJVVPJGhnLDFZY3FxPFRnJGlvSWRIQ0s7TDxfRE84dW9WfklLTFdlTTxtWH0zR0JmUlVFNnk6YnImblZmUDs/'@;
put 'e1VEViRrT0Q/P1NGJGhfe3Q8P15ITiZhIVhmN1NDKmQkWXYoMUFUMlpGRWd4TmV1JTVRcGFvL2pYTDtOIyIvbH1BViU3PEFyZnpyRjshWlBUfVU2ZDdHPF51d2gkWmxaREM3QkVHczRJRlYiS3ghR1VhaFBWPWpjJilHXSRuIUljI2Y1T1t8Y2g5QTRfOiZ1ISJ0WmAvOFVRRlFPQVJHRz48ZClb'@;
put 'Xk9zOSI+IWU5K3V8QkdIUVV0WCpjKyN3SEFEbysqTUlVJWxUdilNYWUpOkFyXUx5SmN9IitoX2UofjM4JU59Jnw+RHJIXXAvX1UyO1hySDp4Tz98IXRlbHVVQ0omXng7IUtAIT9pdFVDMnJhZnhdPXMrSX01SiRHcStBK2BLaSUsXnxSUnomRCRSUSVISFghdT9lW0I9QGBtamdqVzNqfHJuUFRQ'@;
put 'K2A+bm1fIjkyPEp2W3xndWlDJHolLHVNSVF3M2duLnp0NyJHfGIpRWpOPX5yLjtWc18oV3JZcX0jbURqW0U7YSFPRlJpQzFzNiwkdzpATCteJVd2ODp1OUJ7YkJNblhRfFdHTllFNlV3aE9KbEl+SHdEL3d5bno5RkRGLG80IXByRHMkIlEjNFA8YmZ+V3JRbUt6Lz10fEF7KlAvbyxvVU8mWWVL'@;
put 'ZSFxN1smMG1XcWBQMXQ0RUlQdyU6MCZhWmMjOkJCQzxvIUc3QjZJUjlBXmNON0QhVDNkdCpxMSt2Qzc5VzVqWDg7ZDZxb3NSSyY1VG5GYm5jV30ka19UZTQ/UzAoYiJNfDUxSS9YRzNwXUN4UU1FQS9ydXtJK0xEYURPYCsrL0A2MzEqa1M1fE1YSylGeFo+WyJ0RFhOX2FXS2t3fCtmUnNBMm5v'@;
put 'YkkoRmArLm84RlBQYXA9ai5IIllJanI/LlE+LGEwJkJ2KjtIMDpITzdbem5nV1t8a2d1YD8qKGApOzdlTGUuTUZsRVApU3FIdytobmwlRVs1NG5xenJkcSk4bFlqa3dGRU43Knw1L25nVVl7e29ZdWI4VGwxNGBoeSt2dHdIWixNVnpSJH59UyQqZClMOXB4NyVjeUkqNlFjUW1WSlh2fFMwXyE3'@;
put 'Q18odiR4THhELkVEVmBWfFJ2W1IvfiZ0KCI+LiVffkV8SjROITImazReTSlPLzl0IXgxfWwsK3lhJUd6b1E3OX5ZeGpmfXMiKFppMDUqaC9EO0IvZWUmMUJ2X2RRaXlUJiJ7KXVdRXQ+MHB4YTtqajhGfjB5bDJnTFVFbTslQjBAKSU5aDFxMz8oVSFoPDFXX3E8WG9waVhfZ3NzdCQ+PVcmfiU3'@;
put 'Mn1XfChPbGtbKFUjc3BFUi5RXmhMe3s7Wn1zeiJITXFHXnwmR15IMUtxW10kVnRwYmMlaG1ee1QzSHElbmBsXStbQj4qfXpCXkxoc0p1P0ZhQVdNWWp4KFNESUc2TzNYKixBNCMybnEsbis4QFc8XkRaNUl6RH04SihTQkt1fl1WfjQrdkh7O0h7bk13ViJ7MUw/akg/Wmo9c0NfWEN1RDZIZTlf'@;
put 'UV9gP2cufTV2fVRgS3B8MEwiVU5APnZzWD9ePTlgLEE0TDI2WW4pdW5Lb1BEemY9Yzw/R2dHUzh9ZF1hfExfXVAwIX14dkB3MV9qfE8yLzl+TykyPihfUXVPXihWPV1fSHdpcCs0VCZQZUNMb0AzVyt5VSQ6QzEyW1gqc3B3KCl4Zj9wfCMuVXg1IVQjZHMkMnh9aHB7O3NyfF5+dytiUmQkcmxG'@;
put 'Ki5rNHk5XlZAXU5XSD8uJXZxTEcmfm5QNSNYLzA5WCZlTWEwa19ePT9FMCE3QVJYK2h4ZE18XV0lQVBELkl4akpGUV9iUHBHR28pKlM3aEh4NE92aGl4cExCPFQhbXlLTDwyZipZOXJdeCtSbjZ1PDIsQz5SLEE8PUA5fnNLUChUKVpqUUFScTFLTDNzfj5ZYltqLnhHMy5JPUFbekN7O10qKXhN'@;
put 'JDhwVTcyL1BRUDJ+fWolRFVPZndWQVsvS3hGVkV+USZLTSRrfltaYEYwc1FGP3YyMz5bPUlteENRcHtFaSxoMk5gMWFwbG9YUCRhVz9EZnhleiE2czpbZ2hPNGg4WzJUXVpxbi54fnRnYCo+dndwYFZjZSQva2xyZSh4ZUY2U3VUPj5lTW11biJSTk1tSTcudD41UjpWeEFzQXBgbzJbUDRAVkw2'@;
put 'I0JnJmN8fkdAJW5xLylqTHh4XkV3I2t5Lm1jdUhkR1pgTWwsO2BNKHt1NHJOIyhrci95YC5SQ014MHshWT8lcWZocSMoamxUb1E5cm1DMl5BcVshP2FrWWsmcXVCSEVZd0dhK2NtI09XZ0AjVXdNU0JeMVkpdm5pPiEmdjEpaz5hO3BweEw3JiZPRURGMTk7I3lkNmZTZCt6YXFHZEwrb3JLVXZ7'@;
put 'YWFkREk2Si9LezEwPzBtQSV1PTFeLCYyXkJAQW9wMmBtTlBMWypVLGBrLlV0SGpUckdDelImWlgxeGhjQEs9Nmdve0JddUlqTSg+ZSQxbT4zL2B3aztwdXIvPjBydUAvNVMzW1EhRG19JDJmQDQ3TV91fWtSfGNrVXNvQT9+KEQyPFMmL3IqPDokWTdSU3p0RTEqMzYkUzg3OUVBLHc4NkVwMXhs'@;
put 'e203UncpQ0djYG1ULnkqY21zLmo1eDEpayZFeGtyLnR2QFJwXT8+QFdsZzBlLmVkNF1vfV9pd3wyXi9dbiZwZjowN3pwNSsoczteIWIuQjxDZ2NFa05DWGR4cXomaFIhJnBJLCEqXyFvPGlKZjwpWmkkdCRqV3hSNE0sciYld21VO3pRRTNYaG5RO1FiUUExVCRHPWt9NmclR0t6SFUqTUw2KTsy'@;
put 'Z3opa3JkJE59IkJzTkg2QTBtIVhOPSRUUj0kPDpuampnPyRAWTVieHhYbkM+ZXUibmlUPz09eEElIUo7Rm9DQU47cVd4S3YhJWFpQXl2VSI5NSZoIVJXX0R+akFTbHc/a217LypmbF8rNz0pRTFKZ2k0UlZYdXxxZFMrXV8iPUk4fnlAcGgwWDBpRj81QG1LU1VxUkV4bix0fURdTV5UJSsuaT5J'@;
put 'fVJEeXF6RCtOLD0xVCRBJX1rcyIvK3R1WC5kSyJOS2hlWHZ3bHlLM3VTR0ohNVRyOkAoT2pNdmc0KUJAY0BDW0JrQVNTel5uQVN9TXJ4WldmN1JVYGI8V3F8ZlMjRzYkLDp4eGNzXl1gY2h4I1F0Ymp4L3ZSYU5+UChUWFR2NSZfaTd6X0l2cE01KixOW1RJPEFfX1VYO1pJS2tgJCxKbXkpN1Fg'@;
put 'ajlMJGpvYV5dbnhwcVtnXmUlR0l+KiwhWzAsXVdgNn1ZRW5yRklhamhsM15EOjU9RVl8cE4+LC4hI1JUeURUYXMoLCE9cWRPTGt8Z2xHNGF7emF+Ozx5cEdDeVgwUz1XWHN1NH4wYTssUU5MJndZWSp7IU87NT57cVpCcVs6MjdvbS5AbDIuMG8rWXNFQ1RsJkVkN0A1cXRNYjdoXS5XIVM2Kz08'@;
put 'JmBdQGxXNEt+Uy9xTks6MGNmI0JiKThpOENBT245SzppUD9VX0M+ZGxUMSxkPkY+UWZCKCZiLjIvQV9bXilqXUJdQE5+czZhemVzWix0fWAyfTY4U3JaZ1pRRXBxLF48PUgpK15qS2pUMWUoSllmOVZaPnI4a1c7YVJtJWxgYVg1ZjtHbyhSQHZCNWZlODYsVFlIVmRQeSRFOzFJbjFjWk5oZG5k'@;
put 'ek4wbCVsKnUvfm1qXjwjPiohKE9OayU9cl5Ab2xoTlZgMnxXYG9AUiZYblZ8T25EOVU7dkdrQWssKnFNc3dBQHVjeCN+MUsjTVUpcGJ8Lz0mYkIzQzNQZzkzUHBTVFJSJm90cU8oX3NxUVNmVmZ3WH12WyVZMVpAX09xWy49QDYqPnNCXyljIyp1T0Y2WTAqIUorbSssMDljKComck0sfj0qK1Nm'@;
put 'U28hISVpe113STBGSHRiYzVSZGVFKzhiWkJIYXZPbk0kKmQhKEkoVTJ3I0x9cHVSbCw1RSRwZyxAZ11mMUNgIUBwY3BHMm02emlQIVhQV2YlUGk7ek9FSj1pT1JkRS9HYDVYdm8seGZVbUgyeXt2XlBrPlIiPW5hRjxiY3pgcEdlKVYkQDBxQD5sOyVvPks0VTBUR3hEckcxNm9mOzltZlosNXBa'@;
put 'd09oXk15OFg5SmZTO0JpcHAmJTUsbzlUSWh4Y2g0bCg9fmJ7I2AmK3VtYCMpKytPOWdxckU8PzF2NixAPS4wc0o2a2wsUj5VKDRYcnw1PXU5aCJmPlNoTHtiQk1xYzEiLC97RCthSUxeNXE2KmVnYng5JDxAfV1KX1pXXyEkOEd8LEhQMTx7WUROR3ZtTC4zLmhFMW1ybWE7UXZXXnx0XixTPlo9'@;
put 'SVopMS53LEl5YFk+anhDel1GZEUpS0h1V11ZfEZbKXxPQ3YyV1JNRT8wbyxeUl52MSlBUWNPSHU0RTozPVc7NlRTT0w9PW9zT281QTpQK19rPzRmYG5oSUcsLlMqT0ImQWgsbSwoWW5SbV1DeFFQMTh9RFAmOzMwKlZneTUxYVhRQ2QxKkVQPXJENz5ZeU5GKz5HS0x8eX0rSW9OPCFFbTZKRi8y'@;
put 'biE2ISR7empueHhkfnRUbVlwKCU4WUMsYHkyKz56Xk03XTY+RHRyOXN9XXMhJDNCam5gSzl1c3J9c1BxMVEldTMkKEBgRFowUTU1VSUmblUwXkhzNHxyTFlGK35eYiUyIVh9STdOS2UvKktgelVjKHlCLzh2PDtEMlFlcn1yOixOVH5+eFp3JlQoakxTTFhRSjw6eTZxX0ErP0VwP3BWI3V+WURB'@;
put 'T2ZaPENbL0kuJkpxPExwcygsNnwpfFRjeF5bazp5eXpdKVUhcWh3fHJ7PDYhVlgxJjNUW31wc3JoLkZtTXp5ekZtU15dYkwkM104aTh+Qk9CPUA/OjwlVmkuOzs+Tjg7JSt2PEIuQWt2Vk55QjJ0RUUyQi5BazhlIjI0ciJWRSNhJU87fHtNYShDbiRkJCxdTz0wbXJvTyN6QDBtY2oyW0w9SH5Q'@;
put 'ayQmYTheczNTe3JkPzByYEkzK35SdFV6VThgVzZKcSZgQ3NCK2hafD9oPkBmcyNXcHEvTSVEK0FVXiVEYjdqNyZJMlYuKHpyNiY7Pmw3VXo7e1J2QEFzMSN9PzVCfVM8cC5zTndFY2JKYlUuTk9UVitCQGkuWGkyQnRhVGFbQDkwPDAqTmNIKllkWkMidihgTkMid0RlTHZaaSFsNToqXkRCKzxC'@;
put 'ZUc+d3JObER+QSVjNTEzUiUqW0ZDQUFBQUE6Q1BqMkFBQS4zJWxjezw2ISEzVCZBMmh3QH5tUT9CQzpGbGI9SDw6YSEyeXxpM09+NT9kMDI/Sn17V3s+VXZqN2pkQ189fC9+YDM/QHl1aVl8ZzNHcVRNWndlalBUSFMlaDIxVSQ/U3QmQHI9VWZhOHtTIiNLMzByZEprZExCRGZ4YUouREdPOkls'@;
put 'aHtSaTVYKHdFcixUPFghdyVRUWgzS2pwaHcoKU8lcjIxYkVve1VIPkJsNkBDXkB8QEdoRV40fn1nc25wY3JiMiUlfkBUOiV1M21zbzRdVFN4KldOdjRSVWkyZ1BZfWdxKSpuVyROb1BpO2lSTzhXSyRReTlJeWYvO2hROCxeRU4+OF9GUkc9P2sicT1dMFAkYlAhN1ZII3VSW2V8N3U2PGZOWzdl'@;
put 'WXZvdkFKXjxwZllUYm9FT3l9MzdsVjMrQi4+KT05Y1ZgYHFIXV40Oj1HcnYvOi88JlAsNHU8RjoiYTlyMHZETUI3KD1iejl4RFt4RG58UTs/I311L217WCtIKGtLa3ZUR1pZT0s7RylpY0s+YXg0ITl3b3F9JS9EPyZmb2JnZHwuMWdiKWtrY1t7ZmtAamglR2QlYmRYez9zUGAsWD9+SiFPVCU1'@;
put 'bUQ9KW0sd2JWYF8uQHkyI0N4QzhZaEM2Q3kpKk1rOmkwPXBzJnJrXXZnVU81RGZqOG97QGNGQHoxUWY2ZzRNYSUxNF5pNFV1UnZ0Km0qW11ye2dHRm0hI0FjfVBjdkdebjslQE5HJD4+NWFbTjdLR1Q1UW5eUDc8NClTJD9vbT1OeTN9US9Yb3pHSyZJcWkrRCZTW2Zbb3xGOmdidyMsX0Nxe25y'@;
put 'cCN8OC5nTzk0Q0hPXkdlb3tqPSF6d1c2S2F4Vm9xKmZ6WC8pTiY+MlhhUUxfb3xqXkBrWXtrJjJocE8pXV9NKWFKaG1WRjBlZTVffGlkS05HTmkoKFRJYFdjUk0vLCQjPXlTKDFkTi5dI2RgZyVrSEZSdX1IUXd8U0lwdHAhUyNAeCxLLjI7d1s8W0QxOmMoMFImUHEifHRFQGxzfVpCMHZdXj1q'@;
put 'PmhpW2YlTGVUQUVIXT19WmtRdj4wZkp8eUh8Kz96QDFwbGl4c3J2bTkrWDV4bT4xVnxqS1FdLEt0eC9HJF4xKz9HflovQlUzQW97YHc1ZiM2Yk5YakRZWzxfTm9MPGVTL3Y/PjA7eDo2Jnx3dGs5L1RGKUdXazpTNVZudDZdRnhuYSIhZH1wRG9dcmhURVZoZk8jPl4vZn0wIWYqMVNgTDUhXTto'@;
put 'bUJpfiIlL2YzNCElQ3ZuQXV4ZXNTNE1lMmF6Uj1mb31DLmltaXs3UDEufiZOQHJ4W3c9ZDREMUV4VU91XXE8PW5wS1p0SiRhVERTeDUpI0s9Zzx4IUhKfTh0M0xdKiVtb104c3pKalNjRk4vOE4/YXliWkRTJE1dT3szajdCSyYwLHtMImBUYnlZM0hiY3BSQkliWFY1WTxvfkZOY3xGJGBoOWcu'@;
put 'Y142bE13WHpnWU9hQkZgZnZlSW11alZrVFJsX2o9NiNAR0l+QVF5Rk5aZy89NntYSnxlMTdYUCNwY2wrQDY0aE1qPU9OLk50MCp0dDR5dEw6ITk2Jll0bTlpL2VdXzldU1dWWzgiOmBySU9lI1pCeHNrYXpbZjVFQGAvMXs3M257WFcjQl5Jc10/P2d6Ll0+QytRZTUpMTsqYC5yOjNvMyVmciJR'@;
put 'ajBtOUZKRExwZCZOfmZ4OGY7SjdTUXZuS216dFN6VFJuSjZ4MjAsZFFUb3wlcHRSJVVpbGZSIXk8WGhlUG1SY1Y2OVIsP0xlTysrTltpOUJaWmltWCZtKCI0NH1sR1kmfEZ3bHdldnQwRmhodTFhRVRWdT5wNkZJfElsNERBOj1iWSxLVzhNYz9mNF4ydF9ffl1ydGpfWEdNKTIoZzN6WzdePG5v'@;
put 'TEdbYmRddS4oVl1kJV4zP046U15CP18paytadEooI3c6TEVPZV9lTkNReXpWRV4mXmczRlojOWN5d0dXK3VXTHskbWtIYlpUQzIjaXFhO0E2bzpGSDFMNlVLKEQpK2MrcCV5bCNpd1ZIQj4oXSlSbXd7Nm9IKiYhI2k5PnFjJloqdkdAdH16OytoPjc3LF1lI3ZxZzVWRz85P15uZnwzbz4jZko/'@;
put 'Ty9Ebj9jIS8kTHF4cFZeaGk/OEZbXyh3LmVqLzV3IXBwbSpQIm1RWUNXZiREO3Z2O3FrREUwe1pgcyF1RyV3NlpIQTBfbkllIXMqUjZxX3Z2Q2FYbTFSVFdgRD14KXlOYUUlV3RXanAoVmBqUU5fVSQ9TX1rfFNEKyRyIzMvaTl9bEVvMjFaNmp2S205e353bjpxJSQ4eSU/UjhXOWB6XT5obzBQ'@;
put 'a3FqVkYoIlM0SyRUQmF7NUdhfHsoODhGJE1Xd10kcShZbWcoU2xoS3g3dS5JWEVHa0B4KDppXlRtcW1GI3gyfChSXXRvdng6ZW5iKWw9SUhibjA7SFo/ZXNvMSlUSlRPNWQ6NDNgR34zZTRsWXFvY2UicntZXXk4K1VldUVnQiYpbjV4YVE8TWckS2VfM3B+KmJOYnRYJml2OG1sXjtHPUtWPjQv'@;
put 'OmAqfmosOkNUOFhVUThXTX02RDZHQFg6eCxeOnFnJltjVEl+MysiP2cpPUZRMDp5dWdmOk9QYC5RQCt7RVR5MCRSRE4jeikicS9+OjgjNHJIQE18ai9kR2hsWFhpP3VmVUdmIUlkT2VZQSZEI1AjOC9oUCtUcHh+WllLPDN0KztufDJGK2NvO34uMTFNflpsdytFUW03IlUkczthe0Bve1A5TkdF'@;
put 'a0tMMXgyal1SN2djYGcofjpWKk1ORWghWm53MmlFLigmLFAkQUgsbEZ+aTJ0Q1VbTSg6fUBeNGh5RWhwO2R+Wk97Om5mO3pkP35jeVA/UTZBME1FPFdoTSxXQm15V3c5ZCF7LiZZdnNCM0tRPjdEa1hFeiozeVhWSU48YWI6e2E6a1csS3klfVY+OXx1OEVGczFDOjxkd0k1UGx+Z0x5JmxARipm'@;
put 'YlU5PWZLVWdtcmxuRDJTOGsxdHNUUldzYTkzaX4yTyV6QWZabWZRNT4kLCQxQ20vW3BoRmJtR3Q0WCMqZywvQmQkc1NJQno1Kld6L0diPXEhVEAzUEJQSmEqTFVNX2B2VXNJTWJzTVFwIjZGRVdCRThVZy8oSlBFRHRzMk18NDdZMlliI0YxT09qVzVldzdFclVvJl13VCx3cEhtWiV6QyFIRzlt'@;
put 'QjEkVVkvV21nOEhbPmxXJnBBcX5INXpwejBKcE9eK25ia246Zi8/Q1c4SHxuZnFSMFszNjhORXttJSJEQUVOZE9YVXhYNGVCJnVvYjc3UWo6QXY5TnpgIW5gcml1TX5+dEQlSk1xW3hpMXg9Pm9ZeXR3aWZwJXBlRDVFUF8mQGw5bmJvZih8N3dsW0BQfVkwSz50UiJuZGFzQm1fKjRVKCplMnNM'@;
put 'JF16M0lmam9mZ21fSGZeUjEoankuYyVMZ3MxP31ZZ0BiTWdtYC9OOXN3SG5BKmJIQ2pqdUJTTFl0OUF6SG5LUHZ+fFczVWhZO3JaTDVYRiYrRjZkYjVFRTEocllnNHpeJjdeRHVLVkA/VnM4X2BpazN1KCReVSwpMk01SzVdZWwkYEpXNkByJXx2ckhueUoxQyF0Rk9+T3osIzJJcXQ8LmpMSTtN'@;
put 'eEVzZTRea3NHYSs9a1VqXlpZJERAUTZbSX1Ndm8mRmZHJUpXVWUlI0ljIS8+NUZQdDpRK1o/UVBWKztXKC8jU0FNMTd1O3FpY3t+fD82P0BdcTZObjpGfjlhI0NCbHcrLitNcUsyXytHP2dMd2xNPUJqRTMpeWs0MmN7X19KVVNVWUdzRVRIPmYlRTV7XykkKlA+X21aRnM9QncpbTskdi53NG1L'@;
put 'anxsZCUjUiRDdDIvN3VaaHlYSE1EIVgid1gucl57b2IpK2F0fTRldTZYUW9MeVVwPSlYO05LTCt4Z1hJVWxheCxnTlRKJHBWL1EiK3NqI0dCdT1QOV1hWXppals6dXNJOUQqUkhrMj5+dDghT3hEZWR2aTd5Jm1YT2htLi4kbyE1SndJM2wwZUQyeU1PcTdWNGBSQCxAQThjX3YwYXg9diEvWHoz'@;
put 'UEw+NWgiZDJ0Lko/P2F4RX04VDBjMG5bT0xZXnlWXU1kV118SnVCQS5sW3YwOCxRfGp6XkhIQFhqMyxWJnxwPjxHcT8oKWAsWy92X11nemsvQ1h2IiVPaVowNV92MDVnL0Z1ZCMvNXp7e3g2fGJkSDBZL1lJI1BKPT4wQFgxWWo/WXg6eCUkeHFtNWRYNXsvejttXzxuakd+YWZIMXt4aC9wVyNP'@;
put 'VyRVR0B+TXQ1S0tNdlsxRnJEeV9MeFsjK1t0e2FRXyMiYHZhRmskQyFGeEg3QEB7KiVCRXtlOmx4Zko0PnJoJnVVR29vMzIxa2hCMzJaSGIyMysjV1clWTNjal44QTEyamdzOClhcXl1dnw/LGJIQD5mOVlAUkFaRklmbGRFYlNwRncpZFt8Z2szI05SRSZ7SVdRfWA9PzBeKWdDK0lwbW4xU09e'@;
put 'dkA8ZG0rJl5IP0JzZlclfU0sIVZTJlVbL31ZbHlUIj96XlZdNm83Lm90UGhCWD96cGQ2KC9We0NYcSosfDZeSEI5T3cwaTklYzpIOWloNkhYcSgjXmxYZW9hUFZjbHpYZkp8PnQ2UGAic2YoS0hoaXdgPGllRUBGaU4sQS5oVlFSX0psN3w1dFFaMHBCezN+bXpbJld8digqL2gzLEtUW0wkY35l'@;
put 'LDAzemxFam9TfUB0cHNVWGJYREtlfV8yVjlsO3gvdWBVTUd9WmBUV3Z9TzxSb29ANE1hekQ+W1kpV1IpO09WNVMkPVR6Mmk3ezw3Wy9CSjhKWjNwJlhSJVowdmxdTntmN1ZhUmZTfFs4a25gPXJMRihDSjV+NTdhRTIkPG5DbSpOW2dmNzchfCtoZlYpIXdsV2Q/PiZhLlklI2NzJlolIkEuaDNt'@;
put 'Nyh3YEBDNyh8d3VmSDFoaXQpSjA2YT88b28+QmdNXmdhKjdQTDZuSXMqaE16XmluIjd9dk44RmMqMCh7fSpeaVsodjtjMT9aPV9WIU5NLFBtd1pOTjtuc0p7fihTKUtsJTJLfU0wYi5jJjhlUTxVZStJPmRPKWY7dzZPbD8sSHx0QXxzRnQzfjUmKkhHVFcsSTgmaX4/aClzVkhzRC9jUmdueH1e'@;
put 'ZUQqaCJIZE9OWix+QmNOciFIPXJQc1VSWTJUUyh4VXpTfXR0fDc3V3xGZ0g/IXBGUUpoIyNiKF1fKi47K3kuNjQqTDBXXXlDS2pwOjFHJGQ2Tm5CXkpLXUswTjxtKyFoYUovTy5Xb2VHZGcpVldWSzZKOjhSbjI1IigyRD1jPChJY3xgX1VYdEBNYSxhT2FZZiYoJlI5MVpSNzoqMXAifnUhNSxi'@;
put 'dzVfLmVEfSJjZ091eyFWZHd5bVlkMzdfQ2hxZkJAYnJJcD54PilHZylrdHFVfkImYjV6OnNPSi9zdXs/NS9gSHtXaUVAX1RIUHVrJCs5UHRHZTcxTTIlSmo3MH1qLltmQ3QyQ0dQQSxyWUg2SHAoSjAjSH5fWzo9cjc2SGsmP1lgfX5nd1Y1K11MKnRgOmghRF1oYSNnNEIoUXpzI0pyI1lwZ2k5'@;
put 'SWMsJmU7MStxUT9UNUosQHtLI2xnLE13NnhvOFtwYjkqSSh9c00uZXBDK3pUKF9feldUTDhwLiYxcnIwPzwoSl1INk8iNGk1RDBbRTxzIWpNb0xHU2ZYPy56MnhjTC9kO2tTYHlERlMxUE1uKjNzMHNhUjR+Xm5zXWhUYTJna1ZDPHtyZSIkK2h5OUlsPWpgaXFrdig6cWxKKjd9fnNMYjZ4PjVM'@;
put 'b0VIemYmYFApQ0V3RWY8W0Z9UnArQVhWQ35RW3VeXXxdITw0WC8rOkxoMTFoVihGOCpPRSpyTHNsRk13M19JP15QTmt4dDhPUHJOaXk/bn1pKmhEbU4/ISQxY24pd1cjan05ZUxwW0lrKzBiRC8xKjxIOjBSRzNKOlcjRilkZTRdUk86e1hdP3klPjpkT209TWE+KHp0SHpzdDVVS2k7Ll5IKXxl'@;
put 'TTZ5Sjk5NlJvTyErKHhCXTZrTjUxLF0oI1IsWHdtSV1EVnEveTN+XllxKiQiSXNmN2pYVSZIPHIrJTZZImBlVXRJJnQieiJaMikke3VUMm4jQD1IaCZfQiIzI2dycEVvQyRleyY2VnNkdSxrMzJ3SnI2T094aHRKKnpELyxrPX53UV0pRytRS0VJSTlFfW1LM1FfaDJxPWNJZVI2NWZbMVJuPnVb'@;
put 'e3JRLlEpUX1INmgxYm1zYUJsdk1jJj5BRGQ3aXNrSiF7YkBpNDYqM3xDdVFAUWJwN2dBITBaQD52Jl8mRGN3JXgkWXRlOyp2XXFkQGR3IUp4YmdvSm42ME1vbmBPPmk7T2NjUFp9fUMrPG5xN2NDL1tAIVlrTk1uPiFZeG1IdlFIdl5tXUQoXS9tQnd7RHEsQj1FakQ9clN5bjRhJV9+cjIxWExY'@;
put 'O25iYWVkWEk/M28uekY/MztEaFJdWlJpSkp0PmchTC46SjhZQyI/XkUmblciVjs2Mi9ePHlDMS94WlFxdGRYOzoqRntKNGk6QFpxTGZuYzxAMyFfOkkxOmckemROOCxNOSlgMn5qPCtALCp2ZSt3WUF0Imk0NGR3OHZQfClRPV5KYGR5SFk0fVVuPFlbYWlALltjbnJkISV+PHo+P1RlRyREQiJG'@;
put 'R0JQeDJNODosSChXOW9nOD9bey86eTROUXxaSyshP3BoI3VMLENxWytwbSZrc3xRWSw4Iy5mMzNpPTxXU0tROFclLCUpL3BWJTZXQFU2TXdVZk89Yns6ImZ2aDJ+bkspZVJQO2ZCWWRTQXJ4MFBKeUlDUyV1fGhsQiljXyVJXlkwb1JwaypUXjlKL3xtQ2EvaytNVlBIPm02ITFDQT0/VGpsdigh'@;
put 'fXRJRCJZRkx5QlYwN3xqWlBHdVBDJDw5Iz4oOGttL0gpLkJuI2lWRWBiJV9rMHo2NWhdTXoyI2NfSn5QI1F3bWdJaEBmX2I5dV03Lmx1JVtrY3NEPVYvQzFGR2M0MSxnQSVrSmB9VFJrWStuezAlS0c0fXZ6U21SZi5fLHdGRnspeElaMilaenhVRFdMUWZJaipBcWg9InpIVF1GVjBlKV10TjFJ'@;
put 'N0RQZkRLaDA7IiFzVCQiZTlWVT14SGh4RlQybiFfU00kMiFjfiIsJiQ+elE+TyQodW9jRjIyWCpgYlJ9W1BaYWkxaDJGaGAkSTAuMmIyMEY/ZmdeTFZJcTtIZUUrLzdQclpPL14iMyh6L3tHI0FrRisraiMlXVQzO2A7SClwcCF2I0YvaCMsJXomLiRHJUQ0Tz8lLy4pMCU8P1FZbElhRVpUUmBu'@;
put 'ZkhQOVNTUjg/MiJ4VnFfdEkqTF51ZyZJaU9UP31zXyghZyZXQFQ2aXJiWGBtLCtPKzRbNDgiTnA6ZVFLTk9uNV9UQHFXeHZkRl0janE9dDNNOzhObzRnQlNeaHhePThIbSVLL0E7TV9GbkdnJW0yRj1mRkdQZkp8bmtQek1sOHNORGpZRHFvd1YqUU8zRCkoSjtEWikyW3dfTylObzEiMHE3QUQ5'@;
put 'a1NWPnI+SFs4Q09gKCMwbyY6P1dYd0llKnFYNyhdVFRiPEhtMTBAa1FiM3g6RzJFRSVDTUFYc2p5VXYhQFJVIU5oen5nOigvfHNQVWBtTGdGVEkzZ3U8a2QsdT1taT9LMn1NVVBBdlBLKGMwY1coVU5TWSp8eCxPUmQme0JhVn5QLH15bD9MM34hUz51UEQ3ezksblEpOklEUmZCMmxubWtCQzQ/'@;
put 'QlNQdmBMPH41eTd6SzFFKFY2JktwJGlYUFhIMDFOLyRjWHhKOEN5QURxP01pRG40QiU6d1VDc2NET2xHZTlQUUclPVBGP2t3NFVMblFePVEsfltmN2diQyZNSlVIazBpMSZddjFSbXh8TjtmI25kOTo1eVMxOjQlK0tVfkFsbF5VXlthKjlvVjFSYHAwb2wyQEo5K3dfeVdfQElvcD5+U247fXlI'@;
put 'THFjInRiR0tLVU9xdG0xWkM/Xng1U0s7Vn0oUGZnIVFvezZVcVQ3Ml03Vj0+SVd9UW85STVeZHBsIU1pJloxe0NPIXplQHRjLD9EWloqJG89d0xTQ0c6bklUTDNPJUdMVihIQSlJWDQ5UHoxY3l6X35dczc2cjVMZ2BpPU9kcEFiYSVDfSUocjRKNz1mZltBI0dONkx5fil4ZENqVT1IY2EpP1k4'@;
put 'R1tzaF9NQEszPntaeXtCKmZFKTBoOWFNKiE5d0RgYEd2KkJATUxjZjBWdUIycXYxYE1JR3N2LiRwc3VfaF5fb0EoRGxKOW5YPE4vdT1kLj5rOEUqN0Ukbm1IYm1DMmphK3U+QXpkNmk6UCV8S1duSnwxQldkWnprJVN+Z3c6aklXUjJRWnppeWNDM1VhQ0B8LmsoW3RsPWx5NUdsVERNLGVgJFR4'@;
put 'eiIsMHBQdThhWEwyWiRuUz9pOnZTNGZoVUkjMW9yeyU+THpSd3p1QHovNit4PyNNaEooYXlqaWh2cjRxSX4xUTo8TyRPej9+eklLMFBXMHVYQFQ/MVkkYHc4dFh2JlgicnAxPThtW31uNl1yTCxATj54UzpRfEhEPWc/VG03NnE6PmxeTUFgWyVqNmo5cn5yNm4sI3JpWnQrP2k/c24kI2NlTnhM'@;
put 'STQoYEllL05jQ3JZdjRLZVJOZioranRoNHhARlZxcCYqeXgwaClDeCV6UlBFYnN6bXt4XltgSnoob2FvMXBGKHxERl9EYXZrTTx7RHFvekxRVlZaSl5wdStDNXs4Tn5xWjg0ezR6c1trQz4oZXlFejQ6VEIhd2FjLmolXVFeW2htVV1xfVQ9K01RVUkxJk9NPi42SXkzUTB4bjJodDQ1aTtELjwy'@;
put 'UTlnfTtWTl9HYnRwNHNONkk8SU1CfGJvUnxCLnFZRlI6Jl06VkVMbGVbT3okam04VFkuWDF7T1VqfXN6M0Z3UFRQVUFrOnJyN3ptWWF2ZWMwSWt1Z1M3fU5nYWdKV0VrME1Aa2Y9am5oLnJGMklDVyxCQ1U7Oj9POH15QFNudGQ1PFhaVShuKThsLHo9cDB1bFcvQ1R2YU8yfllBJitaS1JUdmxw'@;
put 'YUJRYEMyPnJ9eGNEUnojfEZsJm4rRGsofCY4LiplUXd8RyxCU0Rne0YyNHJBPiNpSSYkTjRieDBGJWArMlguaHJyQCRFVldkUktmdmJJYF46N0w+TCl+JjMwR29eOn47JEg1dV4rWSl+I015bkllZHBoR3hBVyw5P1M6IXpARkdifmVmRn4lXXk3PF9jfnBlQXs0cUNyJDgoYVlRMTZmWCE8Zz9N'@;
put 'LiN+ZjxXN1t7WDR1MW1rdVo5T2kmRFJOOnQkVTQifVd3Jip9Iyl4V0ZBcHFeRk87Qls6Vml0KVF9VDslY3dPMV4+cXpkTVJ8cjZsR2cuPzBtKkYkOkQ/XV1uKjk6WXdwbHNaUS9lMTJ0NSN4RHUlPF1lRnMvMilKN2YxdnNvW3BlYzQ1e0puPG9xM3FzI3ZUbTNOd2EuIXNnMjFTIW5Pe18zQCop'@;
put 'I05SVyJtWyU8JVo9dkIkNCI0RWslQzwqPlU4RTE+fGczdFkrdWR8PFRgN1R3ekhfRVp6OnJRQnkmaTJYVG8jdWFGL0wsVFhpNj1rJjI3b0dQSigrMnlMU0lwYnoqKygvO0k6UWpDXVYuIV5wKHcsK1lzMXlQbiN3cFU6dH0sWnxERlhifkJkJV4/eEsvPyV6TipSPUB9VykkLzspSyRQOEd7RyVO'@;
put 'I1IyRGpZKFpqVzpiKnQsNk5wVkZwU3Y3W2REe015RUErMHJlOHtfRz9QVmxfdTojQmtWa0k+eGIkdis+KzhEa05ZfTFweSt7LDt1dip1UDhybHRFTjUsWDI8JTcrQVVnO1t2JVc8fT1sdFtjaVt5X2lBKzxaJX1BPCpqTVtRPHdDMT1BO2NGZ3dSRkBAP0tGRm5+RmY5NlF6SiJtR2xFbn1mXjZ6'@;
put 'MzF0S286TWAqNTtzQDQ1YCJKPmpPOzxxTWY2dH5XSyZjNSUuMmAyKFgiUD1fPitJOkBjQiFQTm8oY1BOSEYrS0V8amNNfXlNbWxNQ2Q4KChyU2BESGkxWiJ4IzJJRmVSODs/TjtPV0YpRExwOU91LHgkYX1uSVVqOW5nXnR3b1R+QCJGMCpFIkshSl94VGE2S3BzdkNoTXZGI0xuektXfUFTUGp8'@;
put 'KEczZDAibjY0QGpkOzB9Z1Y8PCtNPG9dRWReXnRhaW1zR3BeJSN9bncsfGI1ek5vQW0wenRJRzNve0NMQGlEQFB3c2xhMmV3b3RZeGtfYiVHTTdBTjdEIWU5JV1RMFRqLHc2OFR+cnRKe3omay8/Pyl7L05Haz5lI0F5bWRjc198MGYpZmJQLGIwU2dVI3x7b0xmc3NGcVI5OW5ockdtWW9SXnFN'@;
put 'aGg4fTclMEx2anJDKER0PiV3ZmB1UmM5YF5JejV1KDh6MGBRT1ReIlUrV0lhRllgeDsyWklUYlFBTntLK2BPWD5GZz5AJFBUImJtVWpETHFHekh0dzZZfXUrd3A0cStyLGMxV047QnImdCZVdlp0bEVIJmhaekkqPEw5S24oPGJVPl1CQERqb0hOM3I9ZWtNJld5XT1YM3hoY2M7fXR0a1M0M2Bi'@;
put 'Mn4mXX1lcV47XkZZU1V7N3VFVyNFKkM8Qz9rYCFwe21LJTRQYmJsfkY0eTA+dD5FaV1RcHxdQXZlbDpQNFQoRUt0cnAzd0Mzb0o0XlRKTWBOY2hNUC54TUklXTZhIVoqTWtzQjwmUGBAQWJ6cytHXVh+PG0kQmJsdGYvdzt4KU9jJnpPKT9GY0tsXmtDJipTL21lZC8qTiJoWXVNaTlvUW8vL3pF'@;
put 'KERqalFLNUcvalB6cmlMS0A8JlJ3Znl2cHhNN0UiTTFMN0IjYFpGJVIlYmhEWk1MKjlRL01VamJKaGVmdWhzbmIhUk99KWhNQTVrWU1MVlVkSkNKdnljfjRAT2t5NzIufU9CdiVxIV1wQ0VfZDBIX3FxPmJvSVMoOkQmWjQ7W18/SiNLXWsqKVpKS2UuOFVkX2YjXixAY3pKXWtPYkghTT5fVV0s'@;
put 'MyRuJGR4R08jUGkkZWR8QTxXeFFwOD89YCJhOnZaT3pSW3tOS2FALk9jW3whOywmdm9Gb0x0Qk5kN0IvPGQ2cktYMmhhWyV4MCRvPT4lLzkoYU5yaz5XYXUvVHN1Mkx0W3txNi8wcUFDdW57fCRUMVN6S2tKbjFNTnVHbCEvSC5DcCkzJj5JPlh8RlooRCEwLEMsdV1xdWtuI11AY1dTPmI3WTIr'@;
put 'InlRWCkyTn1OWz1XMURIK3d0V3UoUS9TPkp9XkFQM101WXA7RVAze2hwPlB6Yk5vSD8kK3lBWC9WTm86IndFJih2QSpHLiR4Rl8xSzcvSkh1LDk+ayNePGJQYFdMP1F3YlMlPE5uMUA2aEN7bnAvc2NsVkZWRzM4TmEzX29EfX1xNFdVZi40dmBxY0RnI0B+ekMyYCp7PThuRThzUDU8MSgsc01E'@;
put 'YjhabStRTjBjYDM5aSFDdjoofCU5VE8kazQwX2xQentYMDtESntWYXxZP1ZFenU1Y1Q5e2EpUmIqSjw0dzo/bFcyRXpkYiFtWHglTXl3JCJDO1IsRGV9aVtIdCNbKXEiQVhocCRoayVgWEppVTt1dmBOKnR6QWFjMHRJZHtQY0RxdVs6b1skbXMldXMxYkxtKDt6QkMyREhLQSNUYj9wQFNBb2to'@;
put 'amBQZUc2T0RCWCJuPTJtOEtlWGxURjFZYkFSdjZJcztqeEw2TilOPy9iYmAyeTZBYzYhdCQ7XVFFMyY8eFtAVCIvUj81ciVnQGw/U31GcDpCenVqfFpJaENGeEZPVlJqfCt8UFZ3Ul0yW0hbOEFiXkNMJnhUfn1Fd1Q3aV5MP2oqOk1uQy9IPn0wTiFGND1xQUs7d0tqfmJkcVtANCZuVVdKKHB1'@;
put 'fSJyMkJZNGVqJG13KyU1ZXk7eylPNjk/KU9mN0AvfHk9aFcwZDNbSyJ3JGkuKVt1cVMyKG94fk5PUUJYJXhKM2YzMGRQbzZwdjRtMmJHP0goXTwqYGZwMFlYant8YVlaNTZyMzcoZGVOZmdtbXozckZ4OjlHey5YcTFDciwuMHxwZTVfLiR2P0hpQmxzUTwwa15mantCMiY6TllwYEtKcmRdb0k1'@;
put 'ViledGNaJj4/MjlqLnJFJX5rTi5+IVkuL3lsLHwmVDtDbUNKRXp4Xzk6ZXg5YylOK1JKaTg5eEQmLGdDKjxLelFNWXd0cjMuKVlUTmZQeTVkWFZ4Y1BjP3teeUUiSjZqRCxoV0tTT2UzVipKQ3g2c3BHd1MhM2dwNGc8W1JQeXE0SzttVHpleEpeMFAvb2RQTUJWSnE7Zns5LmJSelM0UUEiODBh'@;
put 'IU1mLDZoYiNSLGxxeDtvPXBEeDFaQzEqNy5EczBfKD8sXXZRTGNJYWk6bEh8OndBcjU4W1NSbkoiR18lek1BI2E1aDAkTyZkdDRQUSVYNyIwaTFLNjBCRXFWNVMvX11Ldz19dGBecXM/ISxRMTtwaGlBdHpffmIyJndGVHI6fj1DSXR8YHN7QDpiQFZEKm8/anF9R3N9YC42KHpmJGlOXlZnVj94'@;
put 'RTFdaiw3PnN3bFR1WixsOkNLTX09WSVKKHMuek0rZ1VANDplPS41X1slUzYsQysrUS89X1NCW2hYZGJ2PGRHUmtVbjwjLiMqbD82TFdOT3ZRYXdIKUJUMmBQYE1PUHg6cUl0MkM6Tl0mMkI7YSU7ZTxRfFhQcF9PdnxHYGpfODNlfGJRfEs1JXE+bD17KncxaCU6LilbQVhQb19gWUVTa1QkO0ds'@;
put 'M1BeSy8iU3deQldoenNSPl5FNnJkZF53amA8ZHFwJVFGYC4hZ2E3KFJPK2NRW0w6T0dCRllNczdHJi8hVjpQQk5BOVlCOTUkOn45fHpwak9PckJ3P3dib1pEYkZpdWsmfj0qenJRLCk8aiFgfnNtWihZUjd6ImRsPkZ0MF5EKyVzdUJ1T29bSn1FaylFSWZedn5mLFhVbGRdZUtESTgqeG5WWjVF'@;
put 'Snd9ZzlAOyV0anJoWX4iQClHcTZSZTY4SnUsNmlHTVMrOXRaZ1RTKVM+O3IwQjdLPmQmfTp4JkEvXStLeVJuNVg3N2M8ZHFlelNBTnVmbn51RVArLG1wTE5PKDxFIWZmaj89TXclRUVQbjBXcjQhPUMlfE8iTHk0eHZnT2I5ZytPNyN5Yn5IRiwmeyhaUV1wMyJOVm8kMVghXUU5RWJve1BqVlhe'@;
put 'Q3xhaiY/L3toSFRNLiw6OGw8UWJ0eitaamtaKVlJXyhSUXM7djVKKUZ6PiouYn5KPHV8W3dGQlo0Rkwmc3EybC9GUk1tJmxjQD59VDokSVE5XiREKyFPdno7Z1M0VUtaUHpSKzkifGBldXNjSlJJZW1eS1hqdk50PSxVO2oieXxydFJnSmpnemZrNm1fUXc8ZFFnSiNva2A4YlI7b2Q2fXRtYW0w'@;
put 'bngkWilQSHgoeUN3am9GeSUjd0h4NDM7KWdEVjspK3t8QytZSSZ8eHRPTUNYeEBFRXVgWVJ4K1dqSHAhQ1VAb018ZH0kT2pfMmlIcz02fWdVPnhuPFo2TyJyY3MhT2NZY0c4WlRySH4kMXY6dXszcmc0aWlGT2Q1TzQmLylYTW89PWV7eSY9Vn0zKzNPVS9HPVE+UVUvIkMmQyNMN18xcFVgbG5D'@;
put 'TWRPIy5oPnBCQklCTiFKQTEjSGtSUSo3Qy5RIThvSnZRfEYlfDA9IVM2N3ImS19MaVNWLEYsQ1FOZ0lXJH46eiQuN1haeXo2PVBXdml9dDBKezdGcUp4TFI5OyZGdDVdPHFCOGByamIlL3o1aS5aTm8yPE06bklFZ0I0Q1djOXd2UGdCaD92ajxXJmNkUj1zc1gzKlFOeGJwaDNweixOKUxoXlk7'@;
put 'ImsrXURHeXRpImFlPm5xfVs/KTBZNzd4U2cvSih+JU1EVkF2bUV+a1RkV1ZMPEMzRz01T0hYV2gmI3ppQDxTN2dFSTk/eUNQZVU0fklXaEYvUktFV1o/STBMfiFJJi8rcDlKOChVQHVsQmxiXlchR1p1cSt5MWRAViV8YD51bXhZazhLaEhtKzImMkB7WyJqSmk5X3lrRih2N31ONzp3WCFKN2ww'@;
put 'VlI+XWNMT0VIIklkYzo4YHUyfHIwRWdUZGxGXTxPJngqIz0uJk5LQ2ZyOyFaekBPX3xFVypsamsxc3VtQmJ8OnhXfl5Kal5AS1QwUTxFdTgpPHRaWHJpPTNQOWcqRCNMaktPe3E+X20qfVY3UVlAfD44aXUsUmZNSF5QK11XJDRtcS9qWCkmSV00UEdwP2QyQCxeJEA1M35aSjAkU2dITSliNDE4'@;
put 'JiQvb25qVS9ffl9hMHhvQlZSPVtULDRvS243fkgyPWJgI10mcHBebTdYWCFrJFh8WU9XJCxDa0M8M2lzLHQ4cSl3cjRSOCYmNHZNdF41P3pxfkVZRFNWYD9tUEopJFZzNHhEIXkrUVFwWXU8bXY8emJgOjl+amYmMEg+YG0rM1ZDaWF9cVFGIyRdWyRfSHNpeitLfEdSKGNsR2ZVbmNJcjJZQitg'@;
put 'TCp1cmdqKH5EcDJnU0o1ZDohUGNgVWMpRlVyYH0+JGhoZ2B8Y1NGe1BLUGJyMGojZT5KejkyXiU5dD5paWl0X18pcjxKLjI7MCQkeV9JeCRsa0tjTDQkfihPVWQ4TlF2WUNifXw2NT1fIk5FQCZab09PeGU8Knh2NytIPW1RJWcobldgLms2TDcoMEskaHM4NCRAZCI3THpwT1txOVZEdlExSEIr'@;
put 'JEp2JE4rJWllYjo/d2pGb3t4cm09cWx3dS5jNixeOzJdIVk1a1ZaKStYW3FjPT9dR3N0NTQqdkczPEooIztKOip5TnlBe2ZSM0RHVClvREN3PHR6PGlIX0xAY307IkBtQUFgTF1pcFFIeDQ8MjtRe3c5SCoqTE0sdnkpWzMlYXB3KDwiUXExfUsoamhrZ218Y35LIj5tPWkmPD1IJnp1ZnYsTU05'@;
put 'Kjp8ZTYjO2FKY2JscUZndlpYUz9qb0JxKCwrJUNMeTo0R3c2ciUrbj05LzF3Vj5XPHN2STwvSl9YI1peREUjLi5nUCR2YFQ2KDVFSDV3Qk0/NSUlOUdjQDZPclJLdmQ9b0w8en5fQEtHITR8OGlIY2dGa2owV0U9allhWTVnK0E0O3ptRmJ5WlNKXkNfZVojViplfnwqeWZOaWhRZF85UVhXWTkx'@;
put 'UngvP0VOVV8wKCoyPHVwbVVYZzpjS0NWIkBRfiFFNyw2UCRnQG1mYGUke2dXYigpfVFPLDkzeG9DeSNqMHRUNzVaelg3fWhFJltvUkxWWVdFZ21hempabVhhQXFQPm5jcCpIU1ZlRDcibCYvVmtGPz1HZ0tpb0U9Tz44LyRtLkRZOiMrPTJnZEBqJCZteyxZaVNwIW1aeGR8YTUjKCNzWnNSUVFI'@;
put 'Z04kdlRiKEgzdkFfO35tWXxEOk9ucFVJKEtPQT0hITlMN017O1dsTjpEOE19R1omO0hANUJsdW9RfDpRZ1puMWh6OFVTe09NciNsIUZ8XTIsU3BEOzgxMyJJKzxZVHlZcmNRR3xnaH5CY29YLFo4alFsZTowck1DaWloPC5wMk1eLzgwWHpUMDFeLn0mMlZjdD8kI359JEV0NjZ6PS4xTmEiRVE0'@;
put 'My4uLnU9fGVbeV1SaXhLUzdjLyV+OzxIWj96JWAkPVAwXVAqTkRwKiFaKjZMVWlxQV5USCgyIkVQLFk1a0VmREpQP1hBK0lVVDVCaHlSMFM0aHkxUDJPRC5KZWVmWk5kVHAkTyQ3TlcjbntQfCZ1ZEViZyV7OV5sXT5aIlAzM1smaTBwMXsuSSgsbj1mSmxoXkJuZS5kcTw4eWx+TGRtfGsqPm9E'@;
put 'PjJLWkplTVR+bj96PDpMMGAySWlCSUpab0c2c3ljTz5pZDBHZUhaTFdDbjdoSH5zOk1fcD8+V0JuZipJMntOQE5+VEdBSHh5djE9JFViYl5mSDQ5I1ppZkQlLzQ7TE9FT3x+QDF8MCQsejc6OSFNYHwjal5hezpxYzMsakIvN1FOX0tdajMmY2AlOFJpcX0qMUU3b2RwJVdsSm9TQSY5R1RgTUBz'@;
put 'TkRHPzxoZi9wOSZTeU1TdTtoVXw/RnJPeV8vKklPa2I+d35TITZ9PGEuNWFjcDtGeUMpY096WE92ZlNONjRdNzdiWyEzZF9TPGQmbn14QlYoMmMiYWBXWD09T15vSnNldV9uKShNdjJwSEplViRLXypeKD85Wy9EeXdIWndGUkNoeGtMSFsrIz1lSDdGMXx9K2xyazVmSyVWTWImPlJoJj5AY0NA'@;
put 'aSU3XUo5az9US0diOERYMyV2OihYcmFyUHk4OShfN2RbP0tBJUl2WTs9TUcvei42aFRzR0NpfDxiZlBCInwpK1hjMnhzQCw6UUEwVkA7MnxHPVJ0dWtSMEEqUyxxdTNaRTwsK2NpRH49LGJ5JE5OZF97LiZqfSVzXUArJi4lamRMbUtHfW1bdTdacnN8M0ZKamtVdjlyO04iYSolS25VSz9fRHxV'@;
put 'cFhhU3RmTEc4bjkjVDM1RD9NT3l7OW1jJjteIUU0Vjl3emFZYkAjXlspd3JoR2RGYzgzNEJ5fHA9KkV0YC9oITomQy4rRTtBXShRcjNrJkdhPjE5bzlDMChbV1N+N2hRY1NqbjdmbUhlQmJrZWV7OjhOWnt4VE1aTjohM1dfdGJSfkAsNkxmMlU0bz94TEBqUkIhUmhMTihnaD46eUJzTnpUQDNS'@;
put 'SDBzViRTcFBffiU3RDFOa1dWV0ZGSXVBPF46TXdNSS9MYkRwM0ZOSTNAYnEldVdnSDNGciFeYCZ4NWRWW0tSIXVAVUYiNnB5akQyd1J6NTMzJix7eDkkfU5ITDd7dnlZIilTISgmVkhqQWBscVQicjgkcUJUfDFJWUczezorSVl0PD5OJTRPOUNHQX4zcmVNJD49SlkjJlZGImlOLmRrSTQiTmwz'@;
put 'SGJWeUJwM2VnZGZYcTdvOyhyYTZMQnFWNXhuWiFSKSRJVS5HPyxdP2UsNUNHd2RWP3VqKjh5KVN+UFNSQXdhZTB5cUdRQEElKCt5TTNEY2MuNzJgZTZkd0p5ZEc7TTkpOXZyKn1HcCgwM2pzRkVkVEJxPm9JVjx3P1NrWzVXfkxCJGdxL1MhTFJ4dEpIanR8fTtXYTlEUkBFZSUybzJddGJ2LiRQ'@;
put 'VSFWZlErQkA7YjgkZTFyaGx4eEhIVCkzNEIlMlBAP0MjWjg/RzV5VCVRUl5LMWZoekBWTU8hQit5QHEpY09UIlV9M1UpQTswVCFCYFAkKH5fSy9pOkRmIzNeWThYUURiMVp6SHB9JnlmYXFJeWZiaW03LllEcUY/TDdTPDcuK3p5QUxmVG5bXmooSSslW2QiL315O2NwXyhLSFNzQDgodF8/UGBx'@;
put 'dkZkJmApI208JEM4IyNxcXw9VnRTXXt8aTRWOl9PNmMyUmVfdEpxeUgmXndnIyVjUGM5bkppVG8qOnh1RXpwLjxMNjp6fGd1I20pQzZII0VgJTt0RyQ5cTUoR35ZVkBfbVRGMHwlQlNrW1pwMEdtcnxMWUZAaVoxM2UuUjpDQndNKDYqZkpaVkpbakMpVTBNfnlDPWBrVWFYVFh1ZiwvW0tNPVAs'@;
put 'VVJ3NiJUSWxDfE5DUjtNVDdLSXhoWDh6ZVVtcm5CRUhKKG9rP0tXP3s0PSlDeF11aHlwTzpPPHJyKEhtaUF0WUNXcjg+fUlVIVBUWCREZys0MUp7T0ttKDZLOEU9e3YmKkE0LG9aTHlmTEM4SU5ORDBEQX1qIWBRK29PMW9wN3M4RGh+MVVIWy4idVI9ezZrR1p4Tj54ITwpQjcvbH5AcGsuMz58'@;
put 'NmNdU2BAPEtMRSVyPU9KSk1VZkM5YjU8SldrbkdBdCViIzZLQWBgMksiXkRvNn1vUmR2b3RKMHcoQk8hO3w6UW48TmhbZjRxY0thfThAVEx2YSp+TGdNMTJQLjdVQGB3ZXpyKEdfKVRhKExzTXtpVm1PME8iJnZoLm4jIUQ+T14hWnxwKXxMZU59VkowLHFeNmssI3tjU3JLellTb35aaEpxLzZd'@;
put 'MU00enVHaThpYmxAfW5UNSZudy5kKTRHJll1UGJwSz4/S1c0ODZbNyFQfmJ+clZsZlpPZiJJaTIrVW04SC5wcUZ1Q1lpOWx2MixvUjdvXmZAd1cwcnZiPyUpdGRndGh4WlJ0MU1nQEB1Ulo8dFBdUlZqR193VHVwKElENyYkI2suMG1XUT1rQ1l4ditiSmYoV1trRHhKUiVEMzMzJVJkdHhOMy8j'@;
put 'SG9deSJGazdWS11KdmlnSntSamlLXWlmXngle3BZTn5GcztYaE5UfC4sNzhJKV9SalZRZS9tNCV6bzBkNF1AU2V2bFg3aE42V1FxZ1U3ZXhYfVl6fHJvTmBbQmlSSixeL3IidGRUOWRzNnN4SjVKWipMVSlqfHwwUiFwVHthL0UyK298X3tGSVNgclI9M1RQNDcleHI0R1A9ZzRNSTNsaWJha1ha'@;
put 'RjcuPDBaWTp8dG9iLFVOcG4+LFlXKT8jIzpWRCg9VVszdEJRc1lWbW5eL2Z8dXZydFZ7eXJHX0tOJmNRdj86em9mOTheaUZPcngmaUFxWDc8WVVMNnxAZ3NlaGpbcCtDJFE4OW8xZWdGK2s/fm4/IkJza2AwQlVkT3FiTUI6ZiRsS1ohS1Z+bDdZMF5lPU5zP0I6Mip5Tyw4X0B5SEM1USpsLGE5'@;
put 'SispPmldbmdrQyIwK11JRWdJdTRTPFNESXVMemNmfmVNRFgyfj9WPW5GKGtQcyVRLzFBJChneVVBcjlqXnpLdTdqeEd6WDc6V15BTVQiJSxEdFEkPUssS0kmQ3VMQGxrRVZxUj5haS87N2pJQWY1KyowYFNLP0xyNyhVRUU5NkhYKDxIaj5fQkMleXN1YVY2RU5QTz13ZUVGMSpIIXpgPn52fGV6'@;
put 'UTtgaSExWVpVR3FGRyN4elsma1dKSjcmQjF4TDE8ZWNwRFB6fnEqOHckLElxb2kpQD1hbm18M0IwM2c4OWpZZ1hUTkNXLFhaezUsJGRONF5kcXptMT5adk1MZjFxKlMkWTdtQ311Zy5xIWFodDpnVFFnIzEycHw1enFdcltSW1BpKl1SM2xlTUNVOHBpV1V0fGp8aWxsYGwwemEwWmQ3NSNEakg2'@;
put 'XWhjJj1mYjh6alRAMzpDWS9eKmR1bmpScEYlWUV7fT8wLGQ8MmU1Qld0P2diKEt0UU1SISt+JnEwd2FKX18oQHFjVGV8KE1bZSNEXUhNTS9rKW0zT1pLZ302R1pVMExxWCEmJHNudCt2N1Q/OWtpVXsxe2lxOFE1Q3QofE5rTSUuYyRSTCsiaW4hN2JXZz5WQERKYlBKO3UxZnMkeX16WFpZV05C'@;
put 'SDNxKiN6Qz8xVUhIUDNNal1NPFspbkV3YmJUdlZvZVJvO0t6LGo+NCVTSEFaWjVdOyFHeSxfV1RPVmU4R0lYZzFwKz8lOGlQW1haZ3BiI21ubTNpYk9QMEdxczJPcC9pNihafVAoeC5PRWJGUzBlXzdFOk9QUl5EPFNNK3FXeVZaPnVFT35eYTleJSJ6X0AkNHgqbFpWZFgiJjFKLEh3dXAiSm9j'@;
put 'O2FSQTlbXX52WUhfe1J7SDpkd1E6bmVkUlMyaTtseFFZfFk4QTM6LGRuT2hOS1ZDQHZTSmNUPzYlWCpRJE8sVytleDNYTStue1BweGxEV11YJGllcFV1MmBPWmI/MTtuOXd0bVRnaTkrNlszSHAickFFYiFeOCJRSHM0bG9iUmEianpTMExGOzdoezM9PE5AVTluczM3cE9ZT3xiJFJIYnwuKXlj'@;
put 'UDxiO1suWWUxIUtreElEZyFKcipDQUslTFVqL30re05sLD5ua3xwSXtORUJzRilxezYrLmIwMEBwckNPXyZtfUZibUx2Sls+JEkxWzt2YXR1eCZiJklyd3FnVipMO2BDTCh1P1MmSlN6TjtpPl82OE9CPzl5YEd1eVB0dVclWnY/IStwODssZmZhWXtjY2RCKjc5LmQoV3dhcl9FKH5SMVdvYGNb'@;
put 'MVN8UFo+RWlIcD47LCZ7VmFsITlsSzg8ME4wa2N5UkV4Z1BoPXpYa1dXT3FIWiV6ay94OXJWejVjOzBRY3srVmdXaUdXUzp+KCwvKyJHT0NwVixRe2FEOX1MXkNLdCp9OiRTYUlvSmltbXtNSVk8W0pKaUJ4WVQ1V2F9Nn44Wz02Yz9CdlB8dy5sM1hjcVAjVz80XytqMT08XXQ/V2tqKU9FIV9Q'@;
put 'VDJxbj1lRlZASV9WMXg2TXFPcVtieHJxXyVkcEBWNmIrd1hgQylUeHk+SnE2LzlWKk9HPGg0ISRRKHhiUm8qPkw/ND0rW2wqcFY9MVNVNDJja3hPdFBDUCFZYzp0JFkuWDImKD9FInRQJkxuKElqM0AkNDoxV1ZERTU3NUtqWHlxMlVdV3B9UGg8LCl0TFNoVEQydC8sYCJCJjc/by9xSCw9I0xq'@;
put 'QVVeNUwheDZaLi9VXm1oWGsjelhvLF9+PzFGbVV1TmpWREY4JWZuX1A1fEdjVyh7e146SVMwcSpMUH5FKSUoTmQoe2p6S0AyNCp9Jmx4R25VPyxxRGtgV08oVnZyYUgvJm43YSJHfSxQMClQYklzL3FWdTttaS92ZyNefjhjczZqckNQMCZpUWQ+MDwuWzJmdyZuIXpnJmouZTp3NGVbPDk6ZnBK'@;
put 'IzJDIiUoblZgUzojTUopLz9SKXFeKTVmdVBxKS8vPzpgJDwkITZrUWg6U1g2NlJmN24rNV1+WkpTbE5oaWplNWNgL1tOTV1rLmYmRjVfa080QkNzSTxbP1JzRm0oS3VsPThAQDRld19RY29lKTlnSDo6ST5oUSgkLHpYI1A6WDNfTWUjNj1aZCskIVt1OnNvKCpNcTJ8O0ldNEFJNnBWWy93I1NG'@;
put 'NlBaRjB+Py8reThgL3ltUHkzVmxSa2YuKXdYeF16L1cwNXdJd302NkFWOl9tK0NxV1FwRyMzJGopJmIqLjomST1TLktCLD1XRTB6IWUlLlJ9ZltKO3chalcse0lGbloxTihLX0dVRDUsRC9oOnkhOy9CbX1pISxXYWpYd3x4NDkvSCQ8WzF5YD08TkQkeG1fR2BIRCJlUDw0ZklAPGVFQjk5fCNX'@;
put 'fTFYLEJCLCZEJChtTjE5V0VTLmA9MHFjNyF0OUhbNyVJOEl0bVY3NWBvL1MkM0c8XTx1OVhKNjU6cSldJWhAOjVxdndjYCRPIkl7R3ZpaUovOS5QSU90b148cSNMRlhBJmJiIW9ObjI4Jl0iZCo0IX5OSntyUnwrZEZTdEM0bitJUjF8Kk51W1VJLkh4Xk82VFo0OFpONkx9XV1JRF4kKixlI2RS'@;
put 'ZXBzaFB5K2NtWmEyWE1uOCojKkJZfE94LEJsN0IiPHhPQVcpeTAiQ25XN2ZzN1V3fmJ3dWBNRjp0cnNHME4wTFRvaTAiRkdlM0AwIz97Mj9ZMCtnKWU2VlFkWjhVPldNKHtFaCxuMDc2ZWNpaU44eFVTP1A4b217IVJPRzZ4L21ZWSVgVDF2eGJeKnJYIlJEN00obTVOViVfcmMsTC95I3lCZVV5'@;
put 'PW9ga34zRmVwJSkiK0UzRk90Y3h2NUpmREosbzgqSC5NXzlFVDBTcyhmRW16OVZDKyIhQ3pBI3RQWFg5O2FlR303aCghMDI6PXk+M2cvOzkwMUdKL20yMl1gbyR0RXUuSzQ/dmYwJVI2RGNWKzdKbmooX2txX3pnSGJ7QkhQenUqL0ZkI1ZqakY4fHwhIVVNN0QpbnZMTDlCKl5VV0FTd3YzMXY4'@;
put 'V1hTdlVueG40VEk5fShKaV0yTWdNYSF7cHtBPGgkKlZifE0sJD04YVRhXlZaYHdNYz5CMFk6ZyF9OmdYNWxYKCpWYWEqNXZ3THxqbEMlY0oodUpqSFtnQlsod3wmLGhYcUNFQ0Z8UVU3cWFabSR4eT0xW2QiK1gkXS9GMns5U3NLakRoVmRJTzlhVyVJMUYlZ3RqezhGazA2YTRHTn5GUlM4Wlh8'@;
put 'YkwsS3pBbTdSbWl5L3J2TmBiN2lAJGZaOD4pQV1DcW9IV19uaUllJlZdeVFtO29uRDZAQTcrek4lYGQkcz1QSDpIMnx9OzA0I2FlalQ2VWhWLklNcW8kNUB4TWVeSUZbL11VLiFnakJyb3tUdkkkR2c5eWAhYG8jNiIuNjNmZDo6W3ciUk06Wy51fFtnckU3RXlqY0UsOnlSW3pNLm4jczI0RERl'@;
put 'aCNXUDtXZW9ub2FOPSsjPWI6JlJsPEM6V2JjQCEqMnl3QlN5UFF6PCZ1TyVFcEMwJVA4S0x+ekp8MipFdlJ0OXxqZ0R6dFQlYCVUI0hVUzUiMDVARmB3d2FlRSEsWzdMcipiTGZOe1tsVSR8cyVEW0FdQHM1Z3tkUG1fUmJSd29PUDgqbWlGTjxrOTQ0THhTZnBmd0NqZE9vdCZVLFdpd3xNUGlF'@;
put 'Onw6WTsoailDfVh6OnphblpOPylJPXkxXSUrSixlZUV5cWZIYXo9WTp2PC5CV2JyWl07fT04VklJI1IiOWdKJjBoREhdI3F5aXd5MzBde3xkQG5jWjEjcmlIbGxuNW5FY2Y7cSlPYE9YeUxAIjFyVX5XRUssPl9bSUFLS0o8UlU9T3J2dnFrW1hQJH0uZVV5WE5EVXF7Nj9hWSo/dTl2UW1bbXdE'@;
put 'b05OQF58P0BjPk5yUTdBeG93bUdFUix3KCQ8PkR0WlVoSk03RCtGJEcpV2h+X15ZUTAqZHZaZitbc3psWF1yWkNLPmhnRHAjJCJFSz5LbEpKUEB3I0p6eVYzRnt3M1sveEZUJG8wKjBIPHl5YjN2IlEjXiNnPXVFOy58N0pUPFlPXUEkVy9yYHxPSnBAMnFUb3JvV3ApKzZ3bUdRRkhZaCQ3PWg6'@;
put 'ST44dWx7dnVze1YvJHQ1fjxDZToyZHZWejxRR0hGaDhLV3tIbFIpPEtOQFFeL1ZQJHo2byJaRHBhZTZZMXl7VV1CM2JAUXFuYHdqQTRiRlkrbWUvOVZ3X1gpK2BxPCQkeSJ2ODY1MkgwSERCSCw+PHhvdEl+OExwa2h0MVNfaGkxTCh8UFRwLlpHZypaPj5sc0BYc3JtbElDWkNOUFBlMnQ/Wlla'@;
put 'XWQxOTQ/W29YQnUmOE0lV284XUZIb3Y3Zz55P3d1Tl40PlZwT3ZZVFtfIkFNVE11PFZkP1t1N1I4Q012c18mKj4lRFgxRzo/fFV8fD5sZ05yakdCQzMiW3ZFeH1oMixLQlZbXXJlK3RXMDo5aTV6ajRLQHlOWUpsIUBELipyanEuaD1hRUpYSE13NSh3JmA+OWYoL05mRUwrT2N6TkA3SDlAQyVL'@;
put 'Lk5kOENRR1coQi5pPm9mSDlXXlhJViI8MTpaTntRdCQwWm5hJEEiTEUyI1FyOW5Fc21UW3Yidk5vLi53KzEoNzF3d3EyXSgsS0p2JnU8N2BObUVhTWc4SilZImdiNmYsMFgyWG01Syx5QFVxaGNaV35aP3kyXXFVOF5FVDVQQD5gLFRIMS83ajBGb2giayM6KHp0X05heFQoM3NZK01adlpMMzFA'@;
put 'dzImVjs+Xkk7SUpddWJIPDdIXypbVEtKbXRNcDNPKE1nY1B7In4+K0puViFNTG5kR2V5QmgmRG9nO15qWHx4a312NEJBfiNfaVkleGJXOTI1QFdBOXBRKW9Ca3ZnUixrZiZ7IVooW3N6Q1gibkhSbiw7WW1vZCtrNCtkLG5xeHhmfnZhSUg2YTBafDVTWTczMnNmOkI1Mk1EaUtAKlhkKnY0YCVm'@;
put 'bFR1S1AoUHpKL2NZdk5rfUh3PGFablY+MTtlbC5ORlRzNyNPNFlrcVs8OTdabjdPfT1Be0lVKytQemdfP2toPHMpO3IwTyJkQT0qNHBVaVJyKzwkImJCejo8fFB4YHRgeX1mb1JqamcqQ2FCai51QnVMeyZbWSp6YTUvanssT2J3eUJiLzFrTiUwNik0PmwwVG9IW1MoNDRPI2deaDE9WyREOlpH'@;
put 'QXxsSykmdSNJL1U+MHIpaVc7fkBHNFo+c2xkV1lmOSFNKEhZIVVPRXtCZmtMP0FDPUlfQH4rJUwqLlZ0L0JQazRrYS85UjdZJk5FMmg7Sz95KHw6e01iL11rc3dSOD1AYitYRCpVbjgsZn1yb3lPT1FaOUVjekU7MCRNJTUoNE1jdWRkQlpIcjRLcjpOTEF+Pl9sVldqd0J8PUl+cXFgOiNIaCZ9'@;
put 'emtwaSFeczUyLGo4Sik/TFIlNFdmLjN5UT1MRWBaYjdDXzN+VyZffCxEXiZhKG1nNVJlbiQuOjRdbmBTUDV4YDF7KyRJcD1FPk5tdF80SnVrJTp8TVcrVXoofFc+QXx6UD9AcWw/VnFFMj4/W0tDSUtzUj0oPFFvYl0+M3R5b3JdJipNeE1xRTN9ZmlMcy53OENoRDBZei9nVGhTQkd9Nk84Vype'@;
put 'L31YWSgqN287TWJEUD1fQFhDIj9yV2c9LlA3PXBTXT1YTTk/JCJDW201Z2QjI1Y5dmtKd04rIUUpL2UyOk5EPjp2TldnZi5ueilLSzxjJWVxZytoenZuKzVRSiNaR0M7NFJwe2Z1OyVSYltga3FzbDBuYXYwej1GUD88U3s/WS4rYT5SRDFhWXd2KnhYVV5WeDIpRWskblt8RiwzXXxkV2MqOmRI'@;
put 'YS5HNypTWzV6S19DVXh0W0M8ZDskMUUjS2FoViI7LF9UbnxxdXtDQChabldROzJbKmpIXU89Q0hrfSoxKyJwKSo6bnpAIX4lWmhPdH5BVCNfIkRdcGJZbyFle1kqI1ZMdCNeWm9XXnEwOVZTLnJbfjZIYjlKTENhWWxtLlpkLEUjKyI5XytMI3kvQk1wX319X21VLkxTZmU/SGp6OzxXbzQ6WE4j'@;
put 'VTY1bGU6JiI8azZEaWNMJlJPemM7Qn0vSkleOiR2Q3tjYH1eXjJjQiQkK0ZYP110M1lkQV1aJlNjcz0kZGRoQmQhOzNHe0xKRTAwJUk0TmBDMEo3MUV9eFVxe3BaTDFZVXx4YnRsSUJnYT9OU2VdQUthNHF4ZjBqJXtFQ0R6UF1WL2FZIyEqSDlyQnJwMHhzSmZvSiQ3IUMwQjpNJldxIkc0OExW'@;
put 'KSYlSiN4dzxnTHwmTX14aUUybT1xeD9nRU1NZTxeIU88RVFla2dqbDxKRmYiO0M4fWFPdj9HdGp1TkQsd3s/NCZpelR4Rnc5SVBTNFZPelZQLiQ2dGFwYVBmcHpqNyhNbm8sKTNgQHVAY0tAR2JQT1Y1KDZsfE90MG1Mb2Q0MU9TTDNESHQ3OVZ1YXhSRVFLaU0rLF1vWzJuPlBTdEYrdVQ/WyU3'@;
put 'LzV+el4/WjoocSs0PSpPMUdYXVV2SUdSdkdOUUhve315cSppdkcsSy97JTVyXy8rYXNBUEBlMyZ7Ky83b08yLmJtVmx0aSM4cnpVcHw3RXp+LF9JeXtVKVhaIiw0NzZRfnZBXnI6Xmxde05oInI+VXFfU0JYOTFNVERvWjo5Kjt5ZV8wPF5VZDNeSVBpNldXPiomK2hEWjc3Syh+IjUxZkhpOl8s'@;
put 'fElhe1BeJiNZODouO2EmXXM1QEw9N0YhVz15Xyl5QXJlPVVKJSE2fWR3flh+NmxGSTRfP0YmJTB3XixkSCgvOmpnfGJBMmQzL0Y2XlFgKUwkcShqSHNXbzlOJEBJK1hCdFJBZHF6bWhvYzRtJnJ7fiY0aDtLcUIjNDshWSJRbm84SzhCVCE1KkhLWC4pK2RERzM1dkJEeGR8SHNOJTZCR3NDQkEr'@;
put 'Wlp0LjQveGFoSUlGYU5IVjZnflptZUA2IkBnfExhaHhCZSNBdSNybk0ueXxRKmNEZD5wPmpnMyY+dChrLkNKd2doQCpGQnZfKFBnJldTUS5ETS8xcT1tRXV4XSw1b35ASE19ezF9SmkxTkI1TGF7Y2Y7KVVYXi9leFpsPTFpdkBXa1VtZEcoWEx4Nnksa0EufnUsNUIpRG4jJX1ddl9bYG5PVXdi'@;
put 'ZHJFLig4THIpMVdTcVglcEIyTW0sYHs2V1d6bHYwNjJeeTRoSTM/aXhjRCkmJDpjTGFdKnJCY0V6YFc4UzRqez1RS21GTkBKcW1VQU9nY0t7VFgoTjlLZkoxbHIyL1htImZUQSQ6WzNfL3lASCErclkzO0lHeVd6Qj9Yfk16S3pNSDg3dkdaYj93dCxzdiEwfmUhTjZbUEl4cEI3ZCV9SUFQVEBO'@;
put 'WUxnMmNgPzFiWkRbZFAweEUsV1JpPi9kbU4vLHRkRkg1Y0ZjWWtYWkI/aWUjJnFUdWZ4JnNhQ2twQFBOdCZZMGc9Y1ZyfWs9ZVdyQERZbzN+XkxURDpUaCtqTSE7cF0zQTwsQWBmOTI7Mzl2d0ZVNUYkZEZQOUpORlNScTZodk9yfmBEdn5aTVhbe3sqOn0xJWhFYW1HPWhhP3x2dzloTn1zIU5r'@;
put 'V35HOX1VdEx1fkBHLz07P2hvVTRAMlMpYjJPV2hKQi91QXtdUEBvQCpCd2BjZCplcjxAfCs9R2BQYUtockZWc3UpK29TQ0h2MnUmT3sieHpJMnFOSTRyaz1bZEw6YSNHR10qfkJLIj0qekJKP0ZsL0FecD4rIlM+fCo2TiopSk81bFA4eGxyfSs3P1h7TkVpRmF9LjttTmY5ZX5JUnAkKENGanc+'@;
put 'Skc5QTtyM0xwcl4ue05GZGhLYiJecytrbT5dJjVVTSk9e3JSKUtAPV4kOFo7W2BPYTk4eXI5TkB1flRIWks5MFA5fi5zaytuZDVWLFhwcmdHNTB3eklidDcyeFtHNXIlZzJsSGtQK319cCYwVXI7LC5jKElRN0I5JCR+MX46bSs9dHRvKjViTDtneU05KCNqemUzQTRJLyhGcVd1WT9dLmU0WTRx'@;
put 'IlZAOW1sS0pvaEMxa1lwP2trW1p2M1FgSkEwMlVYI01ZQWQ/eks/Rz8pITVsW1FFW0prZip3bl4jY0h7czxmZFdLRkAiKl0iTEo5WztKQiQhUU8qXlB6dVZAbkt3bF9vKH1lN0pxYlJCOkpqIlFTZGcyYTglR1RGKlVQOlNdc15GQ187ay93Z1lGbjMofFFycFVEeUIqYmFmSH1OTTlqen5FRV0+'@;
put 'QyhJOCV2KT5tZ2lTaVYufjxYWlFvLHZHXWFaZ2FuS0J6XTNwd3xCJjNnJTNRRX01UXMiSnlrMF9lQHpyUixNQkdidWhTNElHUTMxJVAuND9bOWZWTzo0Mz5qdUU4R0JyempZO342SCgiXj1KVz9Je0NFQEVkS1dWQ2JDQSU5UnRbekFxTm8+ajdWbVNTLzI4OlYsNFNndkJkLHUkQTd1fWFURnIs'@;
put 'XSMhekI1RyQ/QWM0eCJYQy97aSZSSjlgfnw3fXBAOz1lIlhbSDFNX0pfKE5DeyhhYE1We2tGNlBCI3E2K2YlcExCY2piO1N6ayV9eHs7LDFeR0pFU2l8Y0YsKSgjNUBTZnJzM1giZWM5SjpEQ2hHRW9bJHRQPEtWZVBhcWBYSiNTcTIiKTdiWlEiYXloIkM0LFJXZkxMQW12X0c0I3MuXltPYCl4'@;
put 'KmolTCs9W05ZfFl2UV5yPDx7dGd0eSF4Z190clMlMjZCYkQ6Q2Z6OG8jOWNeMEY3cjtCcWxCcmx6NlVGb342ez5TSllySHU3cSxiNnw9Q1hMTkBYfWIkVU1fez1NQl91Y08lI2s6UztmLEcldXIpKHRpd0IlLz87THBSZTZaL35ZV3RSVyEwaml0WCE4Slk/fXIlQT9DTWxHOk8jbV5ZNEJGMylQ'@;
put 'PEtAN0RzJH1MN0FJSHVaQ3ZXLjk0JituazVRdl4oUX13N0xLcX5Qa148dXpiaUBDSV98WXpkKzRqYWNPTW92bH4/Wj1eejNANCwvQSkrIyJvODQzWnppdSx6bXtaPWUwNERLd2I/Sj01bms6cDAyQDcqSGlSY0ZDVSluIzhzSEBBdkl5LyR7UCUvZUhdNDh7YlpBdjBNfm05WER3W0dpQyQ/X0os'@;
put 'b3syKVNmWltjaVN7dlRYcGx3XV1HW1YzeyVVOmVDM3xIaDFpY3c5X1E0QSI9UDsyb3V4fSM/IiNrfVY2YGshSi5rWlBtNjplbHI+KFJ6Xl5LIlY+ZWFKdzdHKmhTZy56S2ozZ0Z9S2IkZWthJSkuaSF8dl96ey4rbCVkRm5JOyY0NmtKSCltIiFYQktHU3YxX2ZaW3hjY2BgZFJYKkQ9em53eyR7'@;
put 'P0ddUVB8SVRVJC9wSjZZJT4oWShMInMyLjtASTFNeXkvdHRzZX5AQ3dOY11pcjtbWEFJNFgjU2BUQzlpdTpLOEglOkFIVnR3QkA1Izl0UFNRbWgjazRaRyh5Ym9hbGBlSGtednMlMDNOWFgoJT0yVGNdZFNpKHQ3cmBocTkrcnRHRWMoL2c1bSklISNGOj04bjJOVHFuWGA3eEhHYkBiUStCR0lG'@;
put 'bGUmbUxeRGldOkFqX0xmZGVwQj09QXlQfEVoV2xnYGA8SUB7PXd+cU1yMVp+XilLZU9+KHZJTl1HaEc8Z1s7KiYrekBIQnY/NU0+NzJFUiRGLztQOWlLRXVpT0BdPVJ1Ql9UPWRSeE5iUXY3e1ZjPWZfWEBKc25UUUJ1TTxjVXA3Wk9nP3pgbi5CI1BldiMpPlUyZyNLUEVwZ2gyXSs9cFV7bExh'@;
put 'ezZ9fGJSR3U6TX5EV1IpZGZlO05aOFAwUCkmYD9+NiNqIzRFO3tYWjk4P2diZyhXPT9RbWMpQ0Akekx8eVdYNFB8K35tbltKN0VUaz08blFRbmFoallPcF0pPWhxMmxvSCpINkBNPV1OXS5tWD1PVDNxWzNqLitYdiVKTFdyX0xKOl8wc2lXZ3c3VExDfldUOzZCay8hRkNWO0RzSTQmQ2Fqfitj'@;
put 'YWhwTUY1c3chVCFsd0ArJU1AP3V2eDFJZ3YrOl0+XUB+N0leMyZRaUcpfGVDXj9HITJAez1mIi5KI3JgM3BlIXF9LndDbitDbUxpVi5TO2pTKkBWbzZoVCF5NVJGZXFxS0pXcm5rdX4/ZE1HM2NyXy5TKjw6aTM6JjZ3JjNQQFkzKXRaYmdsOFIya0tETT87S2dgRVdOO0t0aC5UQkIpZDd8WzNf'@;
put 'TXJCQ3pvbEYoQmIrNTZfQT14WDc7YEN3SWQsSlgiWVkvQXUuaHskVyU5WFZ4YDAiQ2skMlJ3eyZqZ1ZOaCNnPW1CK0MoInZZMWhIPWZqVDpeO3Iia0tybj9YZ1R4fEhOY2skbDJfVDBQaiNQanIuRXIxV0d6YzQsfDw8W1srTVRIR3VMX2Imb25XM3pyQDhkOG5pUGl4a15PbyVKM1J6akhiZC9g'@;
put 'SE1MdndoZmgwMDRoRX0yS24xWTU4M3AxcEAxZm1HdUNiUHFOano8ZEtzNlFITi5AYGA+Rlh+OX1AOzgiWV91ISFwK1JoLlt2Ll1Xci49Wn0xYnFmRTFFO2FgPCpUWGJhOWRqWGtMU2JWe3VtXSRTazt8InJALHJTbSk+Rig4XmliP2ElTGQvL04/VnchRjtlR2hjSHRLI3x7ODUsRUJXU1tWfXxW'@;
put 'aXlgSlhSJEtOaUsjfEU6JF1vWyp5Km5aeEFhWFpGbXx1RFhFKGhmS08xTGYkeHVJSHorJDtBaCt1Iy9BUDdWe1JqJmFRMShaXl5PNWcjcGlANmEpSjFeMnhCaXB5Pj9VRDI0LGV+Wk85QSVfMmRQdDNsYjw1MC9mNVRzYCE4Uz46Ikk+NUAjZkIjSThvZz02OClXMk9+allONFRmbjhFRjQlS3Zg'@;
put 'UmRqQDBiaFsjZSRUUmB0VDpYcjBXW1ZvM0xmPD9geiJbWihVSCsqP2k0RVEofkUlUjdrOix0W0UiY2NLamZuSU1UOXNDVFZqMFM5cjd4a2tRaVI7YiF+TzE8SilIdTFDYjJhaGpHTDlEVFRdVW9LeDhnK09kVVFtYEpmJCpxdHBfY1cmRnpQby87Tkg2Y3QwZ1NqWCFlQDVWdDZMMHlqOFV7a24w'@;
put 'VWdwdlI7fiZndkR7SGtFP3dFcW4zeC9hMlImfWhnR3dfOX0lSDAhdG9XOX5hP34vXTN0cXxfZiIhKzk7MjdoT00rLGh6Q3VdISRXXzVrWXtpej1jNlJ3ZU04VjpUUCg7WX4pPyw4IV02VUI6fURjdF9uU01GQW4lTmJoS1RkLCQ2QSZQTSJdRENuRkYwMn51K1hsanQkdEdrbzhIOW8lcyJwLlFQ'@;
put 'NzB+JWR6WTo4dylFeWJQZndUaF85a29SPzBZW09rbm9WKGtIc34/LypfXkYiNClucXJuK0o0K05VX2RuIV5zSS9AfSVmXiohcjk0bEJlPEw4Nk8yPypHJGBAKlsheCN0Xl1yUlVfYD8qd0RbY0tIbUliPk0/RFkuZ3J1cWJ8a14pWVZxZigiRFQrV0xleUdFaDNpYiltT2JpTX1fPDFedVB4Mmw5'@;
put 'XWNbOls+My5TdE51VF4yKzZyI3ZIMU5MalM3an5VQzlLPz5ZbS5VVjVfITc9JGQvI3VpUCtmNDROdHU3e0ZzbnFaaSNpJC9IJGx8RnlGdEJwNXIsRmU5IzpQaV5DQDBCVCFkc0ZhXl8vNj1GOHJLZDpPbiN8QFEzYldGezBfI0ZzdUFybHBkTDsxSSx6Oj1de2AkanxVXU4hUWRZTHshYCFuJjtb'@;
put 'PVFSSTNHcUhORDdDa1trdiZWUHROdjc/TVRkV1o+JjkjeXdNb3pAKmdDaj5SLyE5eV4kaGdjTnllMDNoKGgicE1SNEQmImZCVj9eQGBGRWMlVDFFcSw8SXV+L29WNytJU2t9cXksPjhQel0vNHIqSDUiaEZ8NCEoPm0wbzZKZCthRTdZX2NeOitAS205ZkZFK0RPVVB0REswVEV0IUQyVTR3UHJm'@;
put 'Z0k4ViVWcXlDQTwzVStpalglJXB6ZDpOIz97InVkUlU7MEZMS3JmVGNkcl5Tfk5gS1chNm9LbW40TnJIaDElSVsqSyhaX1s8PyJsflZPTXthWzdkRVNKTEgsJFBAfGhwXmw5VV49e0F1JVhLIkVoNGN2LkNdIVIoIXRJbXRaKThqd01XQnRBOTFsWTg3Ul1BJWl9dWU5WnhxTl52RWpVOz5IPXZf'@;
put 'MisoaHJEZkhDTngjcCxlbipLXiEhQH1SN25QOGFJKHl+RH5pPkddRV47UDRTWWlwImo4djR6WkQrS3BuODFbMSVSOGAxTih4I3huNDFbNXdQV3k6aD0iPk5taG8qOENie1Iwen48RDJWeDsxe3Q1YlpNKiRmQ1lmM0ghaik/b218VGp7QSpAITF6IWxCPz96RUg1W1VuXUc4biJgQjhRKkp3eGFS'@;
put 'VWtzX29gQkR7NVNqZXwpfXJkOWJrb342U11JeWpUSFhtR2VLIlJNLFlaXlJueWVMSX0uMUsxPEhLInVzLCRxKnJXKHl1aSh4T3M4eCxOaHJKb1pmX2pKKGA5VEU7IUw2dDhCQklmcDJHcXhUMUFfbTkkakQ7dStEYF1SWztdWDNnSkI3aGc3KSs+S2BTbnhIelo8QyEhZTtFQmMwQlspSS83RDJu'@;
put 'JEs0PGcwajlYRlMxTWdjZi9ALnh7dlpuQFI+KEAoamQ4dSFBRSwwPCtKJG5RTWFKJD96alU5dEhkckUze1pLSmFzJG1ibDc6LDRBXlM9KkxZJHlHSm1EKFRyVGdsWmJjIUpFTk40Jk1Be1pfOGU6ITJ+eVF9WXpLVVExWkIyJUohd0cmfm9kP09NdD4yLnQhQVp8JUBdcFc7a09xd2NsY0s7c3g3'@;
put 'LEp7Z0VAN2hSM0JPdzk7Mik2T1Eqb1t7QTYodyVVeDR1ajlrOmtOZHI7S2c9I24yX2l+NC5rQUlqR31RQmkxayRPe3FRWU8vbDh2eU09K09KaEBXYGRGIjhURzVuem4mMyRPIXJlJFtvO1k6e2A0cElJdFZSLnMrP2J3JiU2eklpS1t8UV4vV1hZWjFzQ05FYFQpdCFTUDg4R08qYXsxLFs1SkpS'@;
put 'Z1E4ZzxlbiFLT3FvUUZoLmJSaWc4eTlKfipNRDhlfitWcSpleCxtNSgoSi8+a1klSV17Y1hFWXF7bz88OG1nfiZad0NrQ1tWKC8mM3hWKVFXVkVOVno+R1VIaWNMPTEvYSZYekZKUVE7NjJOZmNnKUs3K1AwdTNHaFg+USRLIyxhVjQkL0hHdSw7JipFYjZuclZicTw0fVhXYXw/ZkBAUSElPHpa'@;
put 'SSw2QzBIYlpEa2xLenBPZGhCVW1GUilIQz1Iays6Q0wmN1coKj9YZ2QwczhoNzlVVVYoWDNhe008U0QmO2BMaHIzSFYiPGdIXmQ7dnB3YkdWIzxxYGx+R2tofHojJEc+bUpDY0YzaX1ucUlAb0ddbkUmTzR7Q3gvNmNRUGNJVyF2YUp8bDw8XSRecUh2PGYvVzlebSh8KmVQImhrXUgpeWw8ZSFa'@;
put 'XUNmN1Q5Q2lucE1EVXtTVVEwVWMlTjdlKU57UD5GaHs+NyZiazA4YG5wKFEqPTN+NGhWbSNOJlc1ekIwWGZhSzR9a3JJej40eD96cncpPTchUXl7fjFrMXJSVXdIRk4rQXZrUHZTR1sjYUEzI2F3d0JZYTE+VlVIST9XXjZhdipZWEBvfUNtMX1Xfjg6VHxsUDE4OXBld2V6OlR1ZGcxaGIsaklJ'@;
put 'XUVFQDJYPiF6QWckQmBCdHNyUiNEVHcpci46Xi9WUEBeUzRkOFcqNiFGOiFYUkpmaEBiWyFGL0BUPzxFJH5rfXh0VC8hK3YmZHo8bFJdWnFgcE1pc0lGKGZxa089P0dUckVPR15OMHY4R04mL1U8WjpFKV4yWDM9eUUhSjZkOEpCaThZcTdCUCZVQHx2aUBLMH5ZOUUpU3hbMktjLFAmSEt+MWVQ'@;
put 'LjF+SmBkSG9Kd2JxMCZZeSZYclg/bC4vPW4vflFpbDUraEtAJHR9eyhtclkmZjZWbSpAXT1vb2MiNjZjPSJuQDUzYUBqY3NufjtieUs3SilWfVVAJnk2ImFwJGlLSSV4fld9VylnI2NgQCteX3NqKy9yUEZPUTYvNVRCMThiYlVpaUZJInlvI31oInw+X0s4KUxuWlE3M3J8WnZMXmddVWdeQVhU'@;
put 'PlNPXjtkKlB8PF42Oj5FUyEvUkciTThvWDddIkN1Y2k9NS9VZXdxdW1GdCFePnBIS2BKSFdKPUt+a1M4MXxiTD4sUmQuYjAxQ2hqW2kuNVdMIkZ5RXU9Jl5GKWMrNlNXMH59VD1MUzBrJX1POk4zJFBFTTwwPV06eSMwJVVyTDg1TSwjVlNXYHovcGBgT31+WDNDeVMhd0EuP3NRLiNkdjB6Knsx'@;
put 'YD9lOXMpJmk2V3xoMWZsdHEySW5kQ3M1MX5NSzdha0tDckJkI1ZYPXksTzFEKnAoZSY8JVlJIy46PHtbRDlOaSE8UG1OXmo3K1ZPWEUjZlkzYXQ5QG5vKX08RjFYO3VGPl9RUTsuJHF1Il1qfXohJExzMFVPZVUrZSlWbz1uQnA3ezwxJSJRNiV8PSUzNU91fDciPC9+NmckOXQheXU8VHQxSXpp'@;
put 'cldLRGNNSzd7X1kkQm16TnMySC4mclNXJjRSc14mQ0Y7fmc5SzNlKXJyZU5dMm5nZj5JbmQ2RmRXRk0iQ083ekEzIVkoSzt8TVN9LEFoeWl4SnY+PTtsZ25VdD06K2s+QmxxKVA7NFlJXTlLeHh3d14zbmMzZHoodD5jc191a3wuYEwzbiY0fGkjWEE0e357TTtWUFJzRFtiPno/RTp1X1haNkhe'@;
put 'R2NDVXBGazMwemx7MjRZamMhMyolbDZuc3ckRHx3YkwoPCFzcG1ENz5qQTlySHwzYXQ7UG4yL29tYztAOTdEeH57KmIjans0YiZdN0g4VTBVX2laNUJvdTMvIkpjeUV3JFVvbWdFOzJidXB3QXBzMCZoYiZReztQRVMzcl9aMko8Uz58NU0iOmMhPyVDMmQ9UVMsVShJWnokYCNiZFlrNzJZcTh8'@;
put 'X2g+bHghOmZxImM9fnFGT1hbPFt+Q1Q8c04+STJ6dnRIbnMiZnBVOjlqLlpUfEp4ajw1cF44eEpkZSpgTHVTIk0wN0QvRUIhYlFQWGw7SFpvZFN4Oj9eI2g1bEApSylGYjNZeS9DTXxjVzMwa1hAN2ElNiw8VU1neGpDV0l9JWlQI00sWC5dMThBeE04Z0JLKEVpWHdPcjJPQ2lAREpoQ2YlXmt1'@;
put 'cDg7YWlLWE58eWdbXi5pKDlNTnx6cWkjaUQqQE4vTGZSa15MUDI0aHcpYS5+Xlh5YzBrNlFiUFQrI1piJEBpJm9qMlNzaGpDQWk0K2tYMl1zeWFTMH1XdDA7IzspNEVyJDNXalp0JEtUOTFIPz43SnN6blRuYksyOEgrdDtOVX1rO3pOMyJhbildeU5xMmlpaEpaQDIpSlZhVFhEYnhGK3hVWWtU'@;
put 'TFVeJEFWKiZwbnh9ej1VYjl8fFs6fSVufCJtITh7bDwpdj0sWCZoXU9WTixxQGh5RUAuUT5nL2x3dk8kP1E5YzkzMTo0R1dSRS9TMHFIbWZ0ZG9IX3E1eT49XmU4N2IhSHJgbzpwMT84TFQ9TV9TWyx9Ji5sUlFSdE9OXzhwLjZ+TXI4TDEsUltiKi9eflc1Uyg3U2tLN1NHITQ9cnFXLjM7JXlK'@;
put 'KzV4dHI2aXdUI3VoWX05SnNheE1nVD5STkI/VWwqZTtfbnl7KTRZIyw2WjZ2RmsoL3MvPEM7JnNucztAaE0+NE83LklYY1kvV2dUMDVFX2M1dm5oYjRDVTo7Y1A8cUk9PGtdNylWJVloeFo0eHMse3RNcXJVOm40U006KVFqI1RSUlJeJGM8L2A+c0BsfCEkVSRPVn02Xmo6M1l9R3R0KDJhL3Bi'@;
put 'bEA7TnhOTCtzSzV3Vy47XUNVWS4pfCYsc2hQOC9EPSJLd2s+RGg4P1IyLHsxbzNFdzppP0cvZUJDREFWSyhAYWlka0BtNzduM0coVCJHaGU7I0l4T2twMFRARGA9em15R2xTYWU8UFtWM1ZGXy8uI0IuUjNaQFZNI2RIYnRxIjElaStAcmRCYkc7e3paWCZxRi9jWmMoPTY6LEBvPlV8RkQ8PURh'@;
put 'XV5+K28/OmY9enxrazZ6NisyYUIvKFc7bmM4PDNyNUpaOzx2RkReOEZNM0gkLmd4XXg3SHl3SiI1T3dmKTJiSjJpLjNwaVBrT1MmY21kODJBVXgvIVI+N35VK05SZ0prcEI2TFBCVVpMYDQrNTNGeDVCd3YsOkI4VnVed2kxUF1de2k7JlIkYCUzVCJ7N2E3djgoYWwwUldZd3ZRKCFHfF5QOTFU'@;
put 'ZFRnS2FJNF10VClEUDZbS2doNSFicCFTV1p3YTkoaVp0cSFlekp7VjMhWT9AfCZ2VTZTeilWMzY2T3RvfE8mVj9jXzNZb251NGFMenElNHRHe0dNdzN2OiMlLzp1PXhCSFRsLG8oRkZyfWN4JnczeWI+bCNKcHheQVBveiNueHQsfkxAVmdyV1E5aGorYzdFW1RNdWQkRWFlYHZJcVk7MjYlc31Z'@;
put 'IUJ4dDlqUWQjcDlwVUQvdSE4bS9GPVlTMWdDWVMuXTE0JHRHOF17Z35vMFYwOm5bMjcsMXRVYjpkQzl6WHxLP1JMcWI1ZitmPlpoYCh7UjgwJns6NHVqWWB3cSV6aig1YVMuNkZUa2BaeW91fGhjKnZIaEVuSXg+USF2Nkk2KGdLTX5yenh2eVhtSDheWS9XMVtkalJeW1llZHJ+bH43fEdTQVBh'@;
put 'Tn04SyplbTwrJGJzU21NY24ldTdOPEM+Yko3YilaNltWR1ArbXAoOGU5eG83InUzaCZjJm1iNVRlNE4rdGQ2RUdPXj0ycXhUbjwvN2B3LnYsbHNEbnFLP2RJYzVzaHdDYXJfeyFIUS8/fTU7I24payUmOChaQFVYKTJxKSZbemdQUHFSezwqSDd6eGY0VGQhYWBiX1dbLn5uQTJmNTRAcz99NzM5'@;
put 'YTZMT2IkNTpvWnI0T05YKlUkPzJ0JjNNNVZjfnFhVGdtOWpWdVppSzpYfmFWPmM7TUJfeDFXWDgscm0yTiZbb0NQeygwZFJ3djF7aTRufFIjZTJxbns8OyJjUyZdfnB6dUdMSDpuYEMhRT49fDRjMnd3LjZSNzg6Xi9me3dSK152JEpgeG0jVlhRNGdVSlQ2VnRWblZhZzJSK0pdL2A3L2ssKllo'@;
put 'aCVMbEdJNXosejJ4KW11Yk9PZGFOdmZMRXR9RHR+eTVEOnFwdXplZm9AYEx1fFZILGxvPypUajAhY2kiMUgxQWpLITJMflBSQjIsRS8/RGBiWztXeE9fMU5+Q3woLjIqZ0Q/JElvJFtocUYwXXJpJEhpVk9+Kj9XYFdifjtSKld6eyN6PjdeN1Y0V0VLMH1VYlVZZm5vWkdpWUkjNHcpbU1AUzUz'@;
put 'Ql9lRnhgZGArajh2U28uU0lwOFpuU0ZnJUIxRWVacmMrQGQ3dDBbNDd8cXNubFgrWXtdQSk5UEBUYFlPY3omZXJrSHR9fnlQWXZpT2BhMm1NLkReKTdqeHtmaVo7TmF8a0RPVnAqMmxwYis9YDhUTkdPTVUqPFlnREdKfVBzXzI0YXZbRUkiTkcpNF5qKGd7bjBWdDRtdUZbfFArUjsjIXROW2Q2'@;
put 'VlBnVWFoXVpQa2c+YSxhOCMxXWJ7ZTZ2MjxVPy5sRV9WNj1LPWckb241WjpwYT8vcXgxPUIwWVVZcTlQJENIe0MyWHgoKWI0eU4qJDZrcjRJQWh7cCYhTX1aVXJUW1N+MS46R0oqKDZRKVIlOz1mRlF7TlkpUkpfWHw5djd5YD5iV1JAWm9tb2h9azVGZ21WXlVFOSg+Q0JKc2dSY11MVSU6QiZf'@;
put 'SHQqUlhRWXA9czlTUDtZXn0zY0oiWHVeMkk6ZHgje10uT3doV3lWdl9APD07Y34sWFh0bFRTa1Qlck00PlYvZ1BpY3pNZXJ9Ni5tMHJdbnhWeTEsRm8hW1k0KE06Ql5yQTNuTXl2OWc0IjFSNCh5ZSlrSChmOX1IPT5IbEVQWVRCdUB5TT4kRktXLi5xQS9bTG9OLyNmJVROc0hkbF1ALmp6NldT'@;
put 'RlEmeyVVNnFiSUlFIy9yV1k+NEZIOSwzUjY5dU5ScWdQNC89dkVHWjV4Unh1JGxZRERHblc0TGRhY3pWbiE4WiQsKjo9JVRBIUMqbF9xaGJDemt2Wyo0NFQxVyZXfFBJbFBgU1ddKXllOT9+KlIwfEp7XyhhOFNnLjJfRjZmWCl8TVRGREsveFo2NEVebl5kQ0M/R2w1RyZFMU9Pak9XP15jaCFE'@;
put 'Jjk8a1lmKSMrYENxYVM/RGZGT28wTS9PdnBZfVFhODUxWDUyVVdKfkNpYEI1W3RoXl1EKk82OCw7JkFaKFRdYT04STJHSz5gYCx3R1hZWUVNSnpONTFbLi5OOmk3MXo/ITd1I09GXnk1QnZtbjFmdmJrTT08MUZSR0J0L3s4UFM8dSJofHFRbywvOXcuRkVpVXtPYWY6TGdEJCFHcmJHMC9xTUZt'@;
put 'diVLPnR0c2MqJUBUS31NanlVM182SEBuUz5EYmB5en5KOE0hQlNlLnE6aD5zaEM9bGIlcnR7dz5QSV80QXZyTEh7NU5CcE99QGF9cmxjZlRzb306OlEoKzpaSS5oJEVdazJmQEdBWmJPZ3coMDk2V2NLTGVKMXc7KVNJcE1ZdmFkIjxnLGJudGN0dElSL1YvJS48TSN7ZTU2fXNEaTgqV3RKO1li'@;
put 'WDdpRVJuQT91JXJXMUpZNksyKyxFWnNhKS9hPnslcyE0ZihsRDVseH55VFU5bTtoPzZeUmNUXXxUMC8iajlVVj1Qbis7MjomP2dvblc8PU1FfEl1aEdaNDYsajJ6dVBvUSZuSj5nV0psV0MjeFlGWHhMLkMoUTFCQWpRUlBnUTJzb1FbZyV5UFdsXiVmSSRbQTI8djV8az1abCZiQExNS3o/I2Ew'@;
put 'c1A4LjFEMkx0Wil8IyZsM1MsO0ImajVdXz92PV9wIzNeVldxe34lYUpLVlpJR3UseGl0OWFJTmQ2eC5pMXxwNSZORkl7MCF0M2l+KjssaFgwZkBaSXphZUM3YXshfWZ+Z3wobDZUTmRLWmRdOlMjOW9FKnVkSURDMiFjejFgaGZfMCxSXV9wSlhpUWBFSzZ3N1dYUWl4UiZlPndeM35lPFReSWR8'@;
put 'd0Rhe1tWakksUl5yXzt+aVIhVTE7VjRZJjspfFdfaUVfWVdUM31RMTVJcm4hQjlwcyl9ZGxDe2VIMHpZfkZUcXhNPSY5bGApTnFPTiNKZFs+OyFvbm9fImxyUX42Pm4qYm1JfmpqMnl2XmVDO3lwLDJdPzRvNzloMGdeJS85cV9HIj9zdFY+MkgoL3p8RFFIT3k3cjF3aW9MNSEySnN9RD9lZkxR'@;
put 'UENGWV82MTlKXjRjPkEsSFY3a05xclVDQlImJkt+Z091JXZqP1I6cFZkcVMjTEpfN21iSVYjbT1nQTtLe2FvXTx3XjskMS5sZ1J6TjMxM2wrbGQkP31NfktfNU1OWEA5bn5Ze2Fqbn5mLGBrcmt2T2slemY/RERvbS9kYGQ7SDx9eEVHPWUleEkue1I3USk3O1lCfUgsajBYbnxdRW5IZlp0Wj5M'@;
put 'ZlE7cm11MSo1VlFuLEs+OylMUHhUeHZLQyZ2ZWlyR3V3YWEvZCIoWVF6W3pJUFp9Vm9LdzgvaF1CcThAPzB8aShtYH51OmA5MVF2ZV93Zmx2eGN1aWo5fkw3JS9AUD5kfSNrKXJ4MSp7QmZhVTEpKCRhZCUjdXomRmQ4ZWEyZCo4X1BLMzJ+IzVLSThUPTZlJnIyOWMqRjJyMHtQYHdCKitCKU93'@;
put 'RCNjZHZbO0ZqTixFaHkhcCZ8fTp4Ml04fCghQThTIkNlVTlzLHE9ZUJ9Y3c2P0R0N2hQQmUkZ0FkPS5fMCk2NFoqLCVmYWZGd2diMGBsbG1EdCVUaiZJdjQ0NU9VQypCfkJYTHFSaWdPfiFaeXBqaD4iXSF1Njw0YS8mfHU/VEZVQUlCKiI3TGpVQDpsOWp2VVZsenFOWGdpRUwyb3xCVTRjdDgx'@;
put 'TzIyMSlTamdILjFKd2NWOEA4TksqKlNZMC46L0VuLFYyWTJTXjopVy9BYTQodkcqODlEJDUodTMxWzZIOE4jTChAOlBxK3A5QCp5OXF0MzgkQ1Nobj9HO3JVM305PSY8cWNiXitaNkQpfEEzMWJMWzIlRElWNmlZKUZLbCs5RG5lKT5uL0NMciFrOiJob0AiR3tgZlRLUHUjT1BHMUxLKkl6Im86'@;
put 'ZTBiSSkzPmpRdVU2SjUwKEJgbDdydVhiSShUaT58LjkvR0JSSzhneHQ6e2VlQX0uc3k9ezRbX3lhVy8+bl0pfCU9cEkhT3RdQjdkPjlqU3JdPC4wKHwuZj01ZV8mNGxgKzZjZUEqUXVCcVM4bz9zciUjL0Y6ZGpqXzUmM0ddaHQkN1FgMUBPT3U3JV5rb1N2LH0qNDdVQz4+fTg9WHlVND4sZDo9'@;
put 'PkV4MF1BMnVwKkd3Yzg9PElWJSRaZGZaUEAseHhQYERpPmA1RlZRSGNiQ2lYI2JDNillLF9rP3pyJERWSF1dMFgre0wraV0xXnk5KXZWYmNdKX1yVU1GXnlufC5ENC98Vn5DOHhrcWF0fTliJixEJEtyVTYrPzZhITpFM3QwRUNhVGxmUnQwa0k7Xjg0UE5MYEJuYEg7eTlHRH4hKzZne3k0LHtJ'@;
put 'Qm1jPU4wIiVLZ0pRVDI7NDguYFkpUmlsalEyImw8W1c+OjAxTXxdPXZsZTgvfCkray5qel9Pe0BEM19LYkh7eCxtcXhBOHRCQzEsJX1ZLG5MM2VTNHIkJFdDVUY8MHJ5VSNdPXI7YFBGTE9oOno1UkM9LFFPO0c9ZixkYmpddV52cmspUXlESipRV1FMTiQxfjxdSEc2bz4wRnN8IlcvIzlNTkYy'@;
put 'QFRJWWAqNE5dZThYcTxleEZzRCo3eTNWfT46LEZpcml6IShPMT9RZzBGcXk6PTY5bGRTXiY4QG9WRXMxYzQ8Nn19NXVzZUVNWi48PSwqc29TSVp6QiJ+dF9MJDtgeCU4ZStEP1FOOH1JfXU+RmVCNmZCZiVrbkBYfDxMSFpkO1BpK1Q6YExEfil2THxwfmxbNkRCSTFzJDVkSVJWXUxRXUJaKi98'@;
put 'dClPT3BVajN+U3k4ekNXYzx4azgwRl19M2xXRmR2R1hDQWxRaiM4PUtYIkBgYGI2Ull1LGVUR0s4Vkk1WX0+TDM7WVUxZkB4KixXODZ5PDhnUiUoJHJTcGVbMWZPXyZNQEohIVlRISZ5TlNkb3JqNT5iaTM6XUM2Q35vI3dYMW9iPkM/SnhEITV1QyZVOSg2d1lAR1pNLCF3UjAseztjOGN7QkQr'@;
put 'LjBgeVRVczd2IkYsb3hFRTFKNzwkanI8MWx+bm1TS0VPbG43aSMhdltDVkUreF4pMlB2JSwvMkRHeVFVKXAsTHczVUJQSXsyRXN8OEg0a15oR0NTTTZkNUpqJHx8PEhSfHxAMj5wXi89R3UwLlJiNXJrbS5wNWE0KlRTcXFBVEtYaSxZaH57KUQ0cShlMDptaGM2WCxBe0tSW1IvYE0/fW5IeUha'@;
put 'RjUkMDMxMGQoUSk6PCxpTkFhI2k7XilFJjkjbWZ+d10jXSw4KEBlKVl3T3B8MUpqP1h9bjtfWVlhcVVZQDUkOiFMKnkzOSVVXisue15RfmJSYjFScnFmKnFObE9kS28/bGdSZig3I3JlVkllUH04Wz9iITtlIXd1QzZUYCVPKEpON0Q2V1p6U3lFO3orPnAsZGZhfTFlLzJSITRpR2RwT2hwRTor'@;
put 'PXk7JC8rMnF3anZLR19tSzIwX2siUSYxSWFWZkN7Y2J1NiElJHFEeyNebzU9TztfWDxndz8/T3ksaFl2OlAkQSk9QXpeemtVdys4ZFlnIjczK2QqQnJAXSM1OUUmPEl9MDV4ez8kQ0RQIm5lWnMjK3hsOV95WUUyX3NYe3ovfUh9dXUhUHQuU1YjNEVaRj16cCs5Zk43IzNOLDJ5LE88RF99dTpQ'@;
put 'ajc+YFl4NDtYIllIOWF+NGtXRis/YllPJWFyTy9JO3hOeWg9YlM0S0BVbW5zcV55LEkqdzprJkI1blNMTWJLdi89O0VGTz5YfEZuQCpjLi9uQFlEcip5dkh8IU94ZlpYTC40OCphcV1dcyk0V0gwaD8kMzp9QX59VGg4U0w6R0xyK1F2UCklW3o3PTclaHFTPmpINnVAUExyISFaRDN6Vjh5THs0'@;
put 'flFrZEBSTEF6Nlc2fSF3ZGBDMWs1NFgrLnV4fH4qUmJeMVU3Il9FNX1TdDZ1NG14Pkcsck46VmE2ekg+UjhYe01LamE4PHw7RXtKKiEoYTJ1PFJhfl1qdC5XKEEjS346Y1IxRCg5fVRmcGA6eF00X1F1R3xAenNjdys1eyo0aTxQNWU6SEAlSzhjb3wvP2FnWHszV3c2aCVpYjEhK3clfUd6NW4o'@;
put 'RUo8Q1ExUm1iUGFkIkcsZiUjY3w4cltQWXV8RHhTLzhgOSMqdExYfmhXU1NbWF54XzM2U3NASUMrPSVsanwzOSVRYTozVCQ3a1YzLzFoTWpPcDJ5WkE9OyVUez0jNyJ7Rkc5KGVsZ2JTOGlGTVooTyZDamp2K2EjdlttYFVdP0NYYGRmRVFqfkpMfXxfYyElI1AsSUk2JWlQWG1JMml3NCx2dkou'@;
put 'TTpNfTM7N2VRYWZiQT4qPG1haGBbWyZEQEoqOjgpTXZsTy9vNChhIUkoPT1iWG5MLFlKfStoYF48Ki4hfkRpODpPSiRDRERiSGR4S11YOEtTQCQwJV5MfUw5QUNaU1E/WGh5XXZDbHB+Lzo0JnooKlglcSUzPGBVU31FWjBiLElnRkpoblRVV3tRbkJdcz01SyN0cndFWVRTb1Q2VTNvUSNQZ0Zo'@;
put 'L3Z+MG15XVc+SC42VV0rendjayZ8dmd1KU00T3YjOHFZW3FwTjdwMn13Um8/ZmAhbipRY0QwcFd3VTZpRFBiIXFCP2wqfCk/Vl0kd3kyUC9GQHF5aG5bNGBWY2xvUXlgNGNsO3gkanpGL1YwLHEhRW8/dCNrWzpEOC8hTjE7WGlYWUZdJGpuXjRFL1BedUlZZDxpKyxzdGZ2fTZTT3lnZmJ3biRx'@;
put 'b3BhRXt4LnxKfSVhWWNtSEtEe0RLbDpUblhyTlsjeUhaSzJANl5uUzBlRjtpXSpLfUdnSGpbJkBlKU8wO2JudWR+U1BxQFFRMl17WXpySD9hYUlNQmRnQ1cjVCN7W1VZPlEoa0MpeypMZTBqczpRflpuSnRUWyRMM3EkMEF3MGNVYSJQWlllSF5tNSMwYWIiMGcoOjsoXSooRz5PXyorRXNydl1v'@;
put 'PFR5RzJDaVpTdn5haTtuWDowdV1za2A5aGtuY3VTWGg7UG5BNHZVJiZuYDhSOWhgMUhGYE1AbDFUdytzbFNgbTxQJGhdQW8jeStgNmxZbFVDWD8yUTdgVmBXSCs+ODpJSlZvRl10QnFOR0xgPmNEcV8kSlNBfH5ydHNiUmdBUHhXPiRhMUkwJSg+NW9TSllwZVRJQW1HbmlTaEp3LnJ9cjZJN0Rz'@;
put 'MmU/N00wPEpxTXY4OCk4eWxrKW5aZkxtc3VbJTUlXkdPX3l6fXNPfWw3I1JzLnAoQFt7cGMxdy9OSl1EbUoqU2hSMEB5MEQyKFtxTVhwK3Q5RVNuOTc/QnElbCk0YVNxOEQ9c35QaDM3I2p0ZUNOVFBdPkJyJWkqNGFTJlEsJGYjVVo1PTVMZUJHZGxMfDAyXmRONTxkSCN9KSU2cnwkXXA+UTdM'@;
put 'R2ZsL2w4MXpkdC9KME1neyk5NiNyK3Axcl1YZioyRTdVJU4sVW5LbFNBQ1ZBU2pYOnZ8SmgoZDc3YV1gPFM4Vz1OTUk3blpLcEJ+Uk9rKU80RCwha3lGOm1VWS84MEh5cmA6IyRqfD5lY1Q2RiEzfCV6OCk2OUlve0whWHY1c0IyPnZvXSE7I3JyUEBSQFFxJX4yZyNaSzdfViQpKlsjbGd+dThG'@;
put 'bUhYNmFVUUBCVTY5XzwmSnp9VDxaRnh7TDprOSx2dXZmfE1eV1EvMWdwTyNyTHEvQUs4b10jRTkxK1MqNUY0YnteK05tTnJ0T2ozdWdFOUJhNXlociE4alZufFFlT19QQ2NtZi9sO0xIQj5lfF8mS3ZSdVYmRUUzJmJlWW4zTEJiUCsxaDF9Kzp8PzcuOmxdU3pgMVFSYjMzK35MSWNPNGxOLj0k'@;
put 'XnJVUkw0c1tsdVlNb3pIMiZTYnsleSgyME5ZekQhditRP0hjdmMiL1EycG8yQWwrQmwoZ3B1YTBiXjNsMSFwL25RcS9eazJWQmxIfiMhRVFlSHp6aFYxP3B9ZldvZDBhPWsodTBKXlR0TTZXVyV4TDgqJjM1aitxQUc3QjN1Kzt1b1hzaFJ1cU0mYzJlQCpMTnZXSTA+OkBaemxuSnFyWG1saVA6'@;
put 'fDU+IWZhKUgjMHptXyt1MWBvOHZyIyV6bUhxW1psej9ONTAlVXU4SCFlQShVYVtNJmczRitNTDFPY2xwNWMsbFk1Q2kyT0MmRHNNUzdnRkVoUUEsNSFQQGRkT3I8Rzo4SDZqSj1CKGpBOTYjZyZWNUN+ek5QZHtsfCxdd2V+UmJWd2VkLl99aFVLXyREWV1wUStUfWE+ZTVQLDtXbFNDa1N0QGg1'@;
put 'ajZuKUs5XnFRejF7XkJKfWpRbnopZHF9dUB1VmlaO0BEST4hUnhhMFchcGw1KzJrZWlrMmRbTGQlOVlRP2RrUyNnd1UiPDVEI21pPXR+e0x6MUAra3guSlRwQ3lMejwuRVI6IUVUX0BEfGQhX0FITFk+LygxV1MjRm1SYVJfYWlIJVljI35HPDx8aHxoTUQwIyUmYFFDbH5PS3UrcW5eaiRtaDVx'@;
put 'QF19STJHJSNOe1B4KHJPRz4wYy97QiIzUEZCbSs0ciJTIzRnWktPJnxYIVNIWTMmd1EsRGk7VzpWYV5GMyZjNiMkVXFkPyImZmo2en5wO1BqXmRoWDJ8JXRVRzxNMn1NWDg9XnhrKns8WlNxXlNuMWduI207ZXJmZy5JLnMxPWA9UCtsZD0zLz88dlJJeklIeCZab311XldAcDtbI3ZdOHIyfUQ9'@;
put 'Ml1ifnl8eDZWb2hzajhnQEVpfkFfaXJDU0VYczVdRDtGQTZnUSRRWzdnXzVoZjxmMWZgRW5ibnR0bTlnXz81aVY5JV9+THBXVzBgeE5IXkA8X3A0amMxaSowTCVoeC48cn4oS1t1MHJnLG9yYzlKVCV9SFR+aFRnQyU9Qk8sRS86dldPWDdxUWQ1WWUofjc8Ym80dmEobmdySy8jR24pLkE3RzB3'@;
put 'KmpRe2swQiRzTFF2Qj9vLkxwTk8jMU1eUDpDRWU5fGRQTjJFMiUzPTdGfTdXYkwkTzFXOllncXchVmRjdGg4aE1sampmTjBQVkQyeClFPGN6XTQxSVtxUVJldnQ4WyNpInV5RVAyQ281dnZga2NLQGRBSW4pR0VDIzIxRjttUkd5Y0AydVBCdXVWSGJJdXVZSlVVUzJYNTI4S0IuNypKVGkkc24i'@;
put 'bCh5fm92Pm5RVlIwa2VJKXJ2NlRlK3UqYWFpTj1ubVdyeDVdPjkyOFhyRUIzY09mYllVUjFSRF5YQn5dOS92KisjZUEjN2lGbkx4c0NIWVd6UTxLK2ZCMU9JdG4zJjhDJGI2eCIqenVJP0pkJHw8WiY9TEF3ZHsoMVJUdHVUNUQzeihwN1syNFM7JiNJUSxkdyQlTGV6YixLfkZBdTtRWEV9PE48'@;
put 'Sjw9WzRHZWV1cTtBMCpWMTs6QVJQZndvaVZLZSsiZl8kOF1JOWtadE1gUkpAe2JJSzcke0FxfklfIWt2dHpRcGJaP1t9Qz5OaHJkPys+ZCl+MUVTa2cwTmBAd0Z6MWFPKW5rU2BXazMsUXRdX01oen0ha2xRJHY4YGtxd0wpcl9mKUJbXTRbbG0xWGhaY1o4JXBkQDZNekRtanZyKDJQYX1JeD43'@;
put 'L1lOdmxJIn47NDA+SjMhJVFXQHdVVVM8TCI4Xjh1MFE+USFjRm4zU1U4MXtpW10hWz8rNzVMdjYjQltdd3hqL2ZhNkRWfUdTPTx+UjApIllhOWtNKGwjayF+SV9gMGJAPTUuWn0+OmNXZjJtTUFeKyZlfUNAKCFBWnN6RUNjalRdMiJRbytmdihFJWZ7cDU7TGN8d0o4fkhNTD5jYjk9Qjk/UzJV'@;
put 'Z05BbS8jQnFWMiVtSGRgSEFtIVFrR1JgckhaNTFHKEZQWCFFT05APj5ORCNocjkvc0FxTX1UOW1PcGN7cnV5X0s9aEx1JUZhKCNGOT5YeVgvVjFkZihKVnBDN3U2akt1JURMN158KEN7WnFnTiY1W2tWO2FbUUphajZKPXJYVHpIdmZ6ZTI6dGpebWNQXXE3JitdTnEkZDo7QiRXMmFhdD9iTVg2'@;
put 'ZSl3KytNWTs0RiFLdEw7QkpWOVBaMnQ8PHxHRnEkSXAxdENyP3JkcHIxWkFIa21GNColK08zMiwjYiFsSjw9KlI0Z2h+aVt4bDpqS10mIV4sQkRnKU8xb2VkMVFhX3YyeU9TXyUxcnpIZ1AwU2MvO3Z9OEtHb2BCa0JEJiJEU3tgW0lzJFQvXV1RS1Q8JkpQalhvVGJmLCZ9Nl56OSxedHFlKl1m'@;
put 'YnAlRyJnW3dyUyoxSWt5a15Oczh7dGtSd1BvfVVafF5EZXZUMEo+TyZFQDtTLzJgYDtOIiVTdjNhLmgoQ1MpYyp1RThhUl5+N11+MyswKGpiVjh2aWhVPWk2OCY0W259YlNWdypiYCZeZ3hEYCZIXTI1JkxbXWwuO0A0O2I7TX40Tz8qVFY3WHs1ekZYIXh6UUZtOyJDdmdofiM+WF5EZ2xKeDli'@;
put 'UHZ7QE1COzlVIzYjVnlbbHhmW017cz5xTGpNRk1IJGk1d11US3BsZH4iKmk0YjhPe2hNPEhacV5XWDYuPW5SO3cyMXhGelZrNldsRkJGTmFnK1NmT1BAWHYlZj90SX1NST9jQV1jT2guSXNRKiRWWW8jUj0wQmwqYmgySGY2XzY3cyV9TGYvITNlXyUlKXYjQ0kiM0pidmJeX2d1IywyZWkzdUtG'@;
put 'SCRrZyFWQFtld1RoZClnSzpfKDhXeDFmaHFxVU0uaW5hYWFdRn1UOW5GP18lXkdZVHtPImJ1fnFwSWV1Zz5wZWdYQE8zazNuT3lBZ3hjQSU9RSFxeyxtTzAyPWw4TzRmQSp8di5rIiFgWWFgNndxUiVVMVBCXW9MRml7OFhjKDYzUTZUb1JwWjRuXkgpcysrfGNMLFEjM1c0JHY4WD5qRyIzeDZz'@;
put 'OzljOVo9LEVlXygqb3FgMWxBeFo1N0M2Izk6fUk2VDgpWX1bfE9UTXRkb0tSaVh+Ulo0elg/Wlh7ZXR0TFNPJHU1UDNDb0MveEtDNUVETVghRXJdSUNrQD4yWEtwV0Z6SHMybTJqNE4mUERgMlJbbiNTbXs/JihmMGcudXBVSlE3LCMjPmVoaDR3dC8/flIpdjNlQygmcX47JFptV0FrKWk+eChb'@;
put 'JTIoN1kyaU5HN2dTNis/d2tFM3QoWGVIO2dHNyMzbDZzNVd1SjMrT1tiZCwpbHtKNVo2dHEjdTRISF5Xd3d9VElCXjttWjpdPix2Ty8sLkBYMmIqcGQ0STxyQGJ4OTFbZ0J8M2lRPWI8bCRVb0VESSpqR3Bld1l8OVsoLmcwfUc5fmxvMkIjZ3thPkQqXU0vPn5BfCFETGI3bDNfNWozJEJAS0pW'@;
put 'U3Frfng+O3pvPFZQbH1XK1pfLEBoUnI4Nk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5i'@;
put 'MTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk9dMTYwNmI6TmwwU2IyYiU5YSZCQi8vOnNofiZPYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJO'@;
put 'YjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObEI3YjpObDZAfnt0MCkqZDJOYjE2R3lXbDw6IjNGOndbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIz'@;
put 'fVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtB'@;
put 'LyIzfVZ7clt8KmB1W0EvIjMyNzI3fVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8O3JqPiIzfVZ7ckd5TFd7cmN+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoNzdGIVteQF4vbktO'@;
put 'ZXxaNjEsdDJrfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34y'@;
put 'fVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZShRZEUrKGg8OnQ+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxIYy5qfn4yfVF8'@;
put 'cm8vflF8US9EXW1CPEM5RmZMIVdodCYiJiImIiYiJiImImk2RnMwMG95dFR6YWdmLChwMD0iI0tgIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImInF0JiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYicXQmIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiJxdCYiJiImIiYiJiIm'@;
put 'IiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImImFkRSteaDw6c2h9JTdIfm4+OSgmfjtoaEJtIzlwbExaYSVHTktbdW8yQzlEIzc6MSxVK2VHeTwoS2lOXnFpVlViQnMqWTxFSF1AUkY5dCV5N0hkclpGOXRMenB5cl8mInJfeUs8RVkxXVY2Qz0oVnFaRjl0'@;
put 'cl95S2RCYD5LVjZDPShWcVpGVW8rNThDImd8S2BwSSNkQmA+V3hgPktWNkM9KD52PTspci8xLFVZLjVfN0NWfDcja3VhSj44MFY1TlZ7ZkgjQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKVM6Q1dhYVVaKjJhNjlQSD9WLEx1I0tYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lF'@;
put 'KUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUjpLQ2pkOl97dmhxcj45KCZ+O2hoQm0jOXBsTFphJUdOS1t1b2xGX08jN3J2R3lSKWdSMXtHdVVV'@;
put 'JENxKlk8Kyxxb2xGX0NDanpfQjEmQ0xLaHVVWHdEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0azBVe1hlKFZBPlVRa2owWDA3NkdTLjc0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3'@;
put 'RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NTYUxLcDJiJVB9Nz0sczxeKShfe0VpcXIyZHxVUy56TyhTRjIsVTI2NlNNNzoxLFVsOUtLXjRvdXYheUQ+LGpLbGZHeXBjVylZPGEqWTwrQiw2dXk3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPRGxCTE82NDVpYk5kPEgkOlYs'@;
put 'aTVqVjxPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO090bypsUFs0XXpvTX5hJX4iPF5KKV97UjdecGkyTWRybElTMXtQYmVsMmM0UjF7LmdWVVRaP0NDalNIIzFhcjohS0s0NXF1diEzd3YhPU9S'@;
put 'YmdHYlI8QmI2e01yTytaTGF7Y3h6VzBbNUZOck8rWkxhe2N4eihkPDpCU2pQRDR1S0ZPTisxaHkyWD9wMFkpMktabTd1Q3BreDg9I2pCJig/MT9VYU0hfTBhUXw6LmN7Y3h6VzBbNUZOck8rWkxhe2N4elcwWzVGTnJPK1pMYXtjeHooZCJAdjtjLlU7TVtXfXpvX0JiJWhDOD0oNDc9cWx3YUA3'@;
put 'aC5ZPCNTczcrWnIrWTxTcGBAb1FzTEd5T2QmaU5eVixxb1YxO0YlRWI2cXV2IWtsa2xrbEIrMGpZMENkeD9hNlEwaCY5MS4lWzU3PXF5cntfXUdOak5hPFk4cnJZRUVoUCVDR05rMSMxTWV8NXExezBqaT8wK1JVSzhFfWQmR24zXkxOM01HUlArR2dFelZpeTJXaWFhVitWd1tPI0dRKEhUUShy'@;
put 'VCsmanp9JD1FOFo2ITxIdHI2ITA/VWE2X1YsVndIfSwzfTpiejl9QWMwak1tLzxoaHtsIzl+Uz1ldTJfbFkuJEhTLms3XnBzNG5CelssPEM3Rk5zN2xUQ2pbOmZ2R3l1ZCVpTl4mRF1AR1d3UEUrKjdoUjF7WURwb0U0eW84ckQ3Nz1xeX46P21WU3E+JiY8WW9oOUBQVTZfKXc1dSxAeCpAZF8m'@;
put 'Q0B5fClbP2JPN1tYP29xXW8kR2Q4SCVmNy5DMklfe21ULiFhfCxGMVdwUj9dWHhpTHBaZDw7MGR8SkNgeXw4RFBvcVduQiJZK31wNl0pREs0RmZWdnxObTRlNzs5JjRVZmN3aD9len5kPD14eH5WT3pnQ2pmPG5mYWB4UCNZZDpJKlp+LHJHeTp2YmorfVhANWErKz5+ODhXeVJUM0Y0cTM/Q3kv'@;
put 'Qzd1ejAlOXlvd3goeVpQZjYzcSxmeSRBOGpPfT9Uezo6TWQyPVUrNl9iZ0dsImQie2JWXk9VTFVgNzdhOCw9W2I4YU87fDAwJClHIylLRzFfcSl6MXxieEQwVF47ZmJJa0hAejJMKC5TKSgiTU45PSNLUl51YnEjRUsxLzNPJlYkN0hDTUk+JllQTk45WjsxUSJGMGUlXmF7SDhWYDpRPTh0OSgq'@;
put 'SzRPJj95PWdFbjk0fjBhOGhWeTk8V29peDdlUjF7c3ZHeVspZ1Ixe0h1VVV2RnEqWTw6LHFvRExuWng3OUVMSzw5bipZPHlILCxPfkZmR3leZShpTl4xR11AMHNhUk5+eDcyNlZqTl5Kb2BAOktdV0tLaHVAd3Yha1ojMWFyIkNwb15iTEt4IWQqWTw7U2BAU3k8TENqZTshMSxVfHRVVUZqW3d2'@;
put 'IU9QR2Y3R2MxREttZilBX0ZKK2dlcylIdkVqYHd2IWxheDEsVXgjK0B7OWFmZyxjeUdqRV5iYUxLVyMhU2c/bTlLS1cjb3V2IXtEUWhaTVM7fnVgQDszJFBFKy9QTGlOXmA8emQ3TlFEUDw+I2g4MSk6OD1nVVBMZ3MpYEh5Iy5NXy54O31vMUluOUZsNmxrTU1gWnBsOF4ufjtodkxgdHRdbH5X'@;
put 'L1B+SUY8PiMjZjVsRmZ5I3F7cGtNXl0xLiVJWVZVS0VVSENqW3llUjBwL0lXVUtFOEhDalt5S2lOXih0YEBvUWZmR3l3WHxYKFkqTFcpWTwmNStmQEYhalArR3ZVVXZGSzFFVylnJW1qKzFoMClaOzFoQC9oTUAvWzhkcDwsfldSai5RfElOPDshb1lITlQ6RmY9ITtIaD8yeiFdNFJ5OEZVM3Vn'@;
put 'fEwhJHFtWmkmZHBSRCwwQHlVWSswXkdWPFg2c0x0SmxEMmlaIlF0bF9IXUQ9QCs2dlheI2FOYGRnU01He1o2P1M2SU48W1MqRmBJRWZmallQTGdjbDZsa00yO3dneD9tOS9ddz54O2ZqMyFZbmNQRVlPUUJHRTFCd3csQioqanVpb0pnJVBWbzllUWB1LiwlZSE7ZD5maVgkI0hJXyFfQGh6P2hN'@;
put 'WTFodiFdVFZrPmhNYU1JIUxFVCZvWWk4QGwie3AoI0hdc2RFL342SXE5PzkmK1B4X1licCUrKzBqcTJsTGcuRCNKZzt4I2dTSFJ3cVd6XXVnUH5XcU1Nb3cvWjtjanFUSSE1Ky99UzpaekhsK2wxaUtvYG5Kdzl1VTgxaUw8LEt0TFJ9cjEsKEkkaUc3SztLOUxgPGU8OyFZQGRNL0w/UjQhI0VT'@;
put 'MXJ4UUVsRiVlMXozLGVYVFIpRVVqQ3lwWnBoUUpdRkpsW3cpWX11SmhiTVUxeSNCVDZHYElhMW9JZFAvWjFIJXZNXmF9REs4MyNmcGBbO00qKFlzezxMLigpMGhNR0IjMCJDYVYlMCxRSDI5Wj9lWSZPU3o2TGRlNk5tUG4oTmNSLDJbPXk+dzJzKXUsb0BoKWxOcCJSbU9kUjxPfVBQelpgejhQ'@;
put 'MzlwWm9qP0l3ZSk4JiF+KytEYnt1Kl8rL11tZiV6S3opJXk5V31LQFhgJV91LE1ZTH4ue2J8P0soOX0/MUh4UyNaMl18bFErQWl+eVdiTCV4fF9ePUhNVyg5Pz1jVGciRmVQJVpeN0BJc2YmfXVEK3hKL0xJKFE+UH04cT0rYSxVKk1zZiYuQndoaE15ZnZ9XVNEU2pQIXxzO2EsUT0/Z0YsOUh4'@;
put 'X3tKcndWaWk4ZXxWOUJqSFFLKngrLFZSZ3ZiOH1eJExeMyprXzBxYXJiJlYzJXJNUEQrejA9PTlAZyYkK05gaiF+X1QjTWsiLl1hTV1eeHVqOlJFZmcmQixMVyltMD1YbyROOnJgITtVWGxmcyZyW3p1cUMsPXc6IVZgNWpLKlNmUnhXZnhodn0xcGE7KV5fPEE0bHE7ZDgvVjVwWStuMSpWXjok'@;
put 'Vm9sYXJnbWxJPnEldSxgWHE8d15dPFQ8LFojaTdAPWEzKitqfUxTbjF0Y2JNK15fb2ZtUjZtNjAoP2FqVSx8ISlAYiEiJTF9Tj92KnFoW0o0KmIsOSY2cXRRRT1kXiEhWTM8YnNsIyFYTTMrRHBmUmtoXVsqanRRa2hQK2R5UyMheGtVXjY/YSI1ez1mVnMvKkdSPj8hZ1VdJU96VDI+PXdvQ1Am'@;
put 'ei5QZWoocS5IOXt8QDI/V29peDQ8IiVMXj5FZV42QD8haXp7bD4yY1ROIzRaRV9fPTkhP2tEYGtTbC5PUU5uVXc8PSNTdTNbJWRmMjZsLF9kL3dxVEo1Z3lDJmJlTyFeelppQHA9W1Y7NzxeIUo5eTtUIzUraTg/bVQuP05RKEZUUndfWTM8NnBzcDhwWHNlLG9mYW5ZYkVNPjN6ZV49ImlXXjly'@;
put 'fm5tUHdyJnlaOWVsYm5HZiF4Tzp8VHVReyQ0ODozb3ZYQyFqdTlwWEglPklfWihAfUQ4cGZzP0sxXUFdaSZoVmZxIXxZZXQ3OnhJOE8mLiUsODckVCNEb2JUXz9ULkE+ZSxGPTZuOmxLfXMkZnwubjU8UlVtb2BJcn0ie19mKzI1PDhWP1Z4ZVQ8I1o3enk/ak9KRzFyelouaXY5VU1raHBZZk4x'@;
put 'fDgrMXxUUmxrdTk7SDJqNW16UUhJUShjP2B3QD1fWnltdypxdD5yVVZ9cDB6KCYqam1wVl5wZkBeK01KfVc9MU4/WV87NGY2LFVaMkgxR31qWXFkfT44Kk1kTmxreik5M1AmMkV8bDNmYm4hSjk7MlQwLCE+Vzlpc3wkJCtycCROZkAxP3ApRGh+JUV5WyF2a3xpNyxoVHVxNW1Mc19ZZTwyfXFt'@;
put 'Y0BWLGd8JmVoYHo8cWtwPCslfCNYfnt3WFBjfmV9TCVoaVleYk4ua0NgbjVwUFUxYk92WTM4UypFcU8mcDcjdUBQSSV3RzVMaGVyeFp4SGZ6d3orMyRnX1kjXmdiTWJzcEpjfjAhIU5eW191KSVZPyU4YFNjbjkmJiplKHhnJGIlfUZ2K2pEZypKTz0iJTV8MTNrcSladixZbl93Uj1vPn4lPyU+'@;
put 'PWVvay47SjI1NHA4cjdURDlLbHJOdTM8SW4yRHx3O113VSoyMT14O3h5R1BkTyU9fTo1QiV7MX5wOX1GIzl0cnpySytiYnB5MyYhOX1rKDMzd181Xjt4RCZBUXtTbXBQTzw9MSslOFJlQUtVfnV9WH5BJlciSnNRJSFJZ3BUTVE5fGZwfGUsQD9hUGYwKSV0JHpUcHBQT1clXUVQUX5mRF92bWZu'@;
put 'NyxqZkExTyV4Z1RtdlErQlBkT29yIVdgbT1HSz0rSFY2X0VgI0pxRSl4PnI0cG0kOSQjSDUkNCRsKnteKz9lfSNxd1BCPnElRXh8WTgmSTA8ISFIOEhUeH1fQjBwazw9OjREeUkxQyUwOWtgR2Z8e10lOUd2KUkxXypDcUNROEAsQHteZyZTPHA3N3o5JGROQlFuZks4ZCQ+KUZsN2FPYWBeYV80'@;
put 'PmIxVzlwc3xJYV9FekNQdVl+UGghOX1lTjtsKFFjQEgxLiV2JD5IITlQWitRbzVlfEBuXmdEWWFReCE0LGRiZ21SZVJuS2tRekRUUCRXc3JAOjAiLE4oT3IvJkkwSVF6YWhgcmZqYE88QT5ifjY8ZHwuQEUvZCxXOUZ9TEo7andeMDV5bSwlWG00UEpHKCVIX0JsSF87bnopSz43M3kwMTtaOU9n'@;
put 'QHBQYCxkMzZjJE9lNSRtWkVnUnt1cyJyNT9gWVdyNT9iYVsrUTQxNntHa3E3ciNzNT9zLDx6KHFBYEhRQm55ZTJiQz51IUElNHE1SnxZWiw1K2VzcTk6allaWD08RSIsXWllfFRKLmQmOFA7K3t+OWYqKjszVEJ2SEA0SmhAYFk3O149WUAqcik9MVRycFgmbiFxfVFgdXlCaEdiUkNXKjF5Zn5P'@;
put 'ZUtrNixPMDROaiRtfig/ZWpQQGV9Z3w1S3h5JngmeCZ4NFU5fDQpIXFLfkJRcX0zeU16dkdkKzZfU0wucl5vaT9AKzwvfWZZcWVeZG87OH5fcyVLejwvPER8JF1JRmV5WWBdQy5tYHMldyxUKD56c2YhU31wSmtiWkhRO2xPWkk5ZHFrel9bTWVMJTdsbXtzJW55W1JwdnxvMV1fYygpSE1zOTUz'@;
put 'bCoiXzE/fG9ISTg1aklHfiYwZTFyYF41SXx3K3BrRFZ+ZyRpJVI3O04kbTElbX0zVTxEJVlWJnIzZjRNZmhtV1glVX0xSHk5VHJUeWAmeixqVF0lTXoocXI8QF56SS88SCY7S0coZH1yKjp6cWYkMD9dZTFLaG14TyhAX14vaDFLaCNaX1leW3NtaywrOHk7VD9zTiJQZCY4cUlfWlBfUiwyTF4x'@;
put 'P3NOZ045XmQ+KStbIVBndExQZyw5SFE/X3csdVN7ZkIjXys1OF8rN3s+PTFxXTtSRS5WYmdoPE5lMlk7fU0hYSYsYUJ4cEpIbiNzN204QEBSRk83L3lAQHRjT3lmY1AsZXlmY1BMKlksLDhBSS9uJW00UDJZXSRNKEVKd21VSWVnPElhJCRSWSVWaXlte142XlAleWZOa09nejJGJCgqRjJESXBm'@;
put 'JVJZJX0/YV4wcjM2QEgmVTYhcHskKWFeI2FrLlAoVFAzY0s4ay55MnI2QTI0TTFHYk1ZVjtsJVFQWj89cXklJWwkJmVWWlZiZXN4KU96Xi5ASzA/OFBYJTBsQF17SX1oKD9PayROSHE7bGNAUG1hLEpvRWdBJlVNUFp8PVopOSFyRzBlOCtNISspOFpbcCk/flVrR2FOT1pWRE92MSlFRmVqMSxl'@;
put 'S3BAPWY4UmI2UnlVb2YhPDFOZER5VW9ue3BOND04Ui5qM016ZyxWQCtPMThSLmpUZyJORyQqbSh6Nlg0cTxPKHo7VT9afGRieSFhJiEiOTtJYHVXVmJgeGdMdE0lJilJLFA9NmVXKzErL01kUFNlIk4mcjlQUHxKJEU0NUpCYVA/QDFBMHFmaVA8QDcueTx3Vj9lWSZAX2QpW1Z+JHg4ezosM10h'@;
put 'UjA5QEZmTTIve1pRJmRMJSl9TjFePTNhNnFhLms4Qmg1fElUd0pXelBfLzttYXJ6XzZpYGt7bWBvPlo8dTl4KEVZbix2Qi9HUGRBJm9CXSUsc3pzUHE0TlpNSElCcUg6SVBLVE4mOCZSZSY8QSZ4Zm4sR1FfZGJvYWoxaUElTDI0eXQkXS92YUtbLDVgbmhlZCs1ZjlxTm9sNkxkQ3A3UEZJUnld'@;
put 'YT43WSRYWiJ1UT84OHdSZThAKzArWSMwK0xrK2VtUXdlPmlZZ0EmbzxBbkNgIX0oMV0hOiVkJmVoK0pzM3YsQ19YPVpQSiZpYiFzQSZueSw7Jit5KXwudSRXYE9nSl87eCJIJnJfKlJfNjApJSoyVyZAY0QmVSVCfCYvWSRrWWFuI0owPyZRKz9AeDohd1BCPk4sL15LcVtLPFI2LEJ8eiFaQE42'@;
put 'bFJZczV8byx+JXYpI1FLdmEsMmhdcDFWSTxMZn40ISU+SHRRIzpkLHAwellsVGM3YixjP2ZvRjFEPkk5ZE5WbkBFcGFrfXpoRj1iLCs9X1o3O1JsIkBNKGE/XVpoVC8oQnxQJiFJYF0wPmw3KXU7XiJUQklNR2VnNXxYMS4+WDEqJTtAIzJhSyJQQlc0bU14MD42NXsja1k7a2whMnsxQTRaJjhF'@;
put 'P1RtM19MSn1wTV5oXixhR1NTRXs7SF9FeDp+fVM0bUokZWpgKzdQMypuaEBfcHlvZjFtdXhmbkU/SWBkcVZtJW04K0YxMmpYJlpSdztoMCw9Tlk3OzdxUm15OVUqMCtad3U5RXxFbWZIe1o3OzZfJE9kfX57YT9EPSV+ZXNleGQkbHlaMXxzMjleJjNoSzk6ajB+UGhtWUhoMyk5KkFNdClsfjdH'@;
put 'MGk+ZV82NiptSHBxRzpHXzZ3UV5RQmYsdSpRJWw3PHdPJjl7WlA0TklQPHJDQCk/XitiLF4rWWFtajp6YjlgYzQ3cTJAX29HKS9QTmBpblBMKSFAU2t3ZmRUN1QjZW9Oe0lpLDlANjhXeVRtUjZ7VUlLdllJPlswZm0xb2RvOyE3IUFJKzVEOWNAW2U/MXZaNE9namgscjd7YWgsNztfMS5fck53'@;
put 'eGNoQDslMFppMjluUGEsN3VZPW8jYURhUCFqSjVtUClOLjlMXkdROnJPMUtoL0BlfGpQc3hhUGdSU0ZBfGtZI0t4RDpYXWNrMTVEOltOQDpAQF5hQCRwRHF3XllUZTN3YUNeLDxwODx4YGlmSzwhTEZrO0o4LlgkNHMrbF17KEVgRGQ3NyQpOmpmclRGe1llPEV5Kmk+JXUsOWxDJlZgZEtKPnhU'@;
put 'N2omKCVIck01dUExSCsuI0U/XVplZlR7USY0OGYuM04qYSN7TnZGV3lgbzppNiVPYjBMKTklKT94JDldUzhwSyNwMWhqXntLaE0je3A3Y29Oa28hQzlwSDIvczkua2JfJHBiWFV5Vn1IJXtrNXFtN0koaWwpSmNIPVU3LGAzQzI6enV6MHFlO3RUfCVGekZIQmRBOmFvJHtwdyh5ciM6ekxwMCVv'@;
put 'TmJYJWJZJjZoX2ZZJlhDIWooMjh1a0swYEoqaFpPWFR5WDZzdyIlZk0oZU8mfXtPe11eOzZoKUJiMVo1bWtQMyVSLlsvclp3UnYpLzs9MUk0JHUqdW4zL1tAK3YwRj0xME16LF5AK3YwRWBhalArIz16WjklKE1qXjtkT1FpfTJ1bUt3K04hQ2M+diU1OnB2IyMyRFYrPEEuJFM3XmVzYWp6YFUw'@;
put 'QUUvKyFhdTo9M0xKMCxeZj9lKk03TDR2YT49eUdAUURtWm0pXiVIJFo5OzxIK1NnXmUsbCQ8ejFLW3QkQC85ajZSV3pgejxpU2JpWjVtLzl1cTxWUkQ9VStJfkdsXiNyVDV4UGU7LFNPXlU8bExRRD4lZ2A2PH01YGImdiRNJit3Ujx5ciNKV29KUHclNSI1cixoXXhaSUp6PDklLmQsMGokWWAl'@;
put 'NSFMVklaVz9tLHFuenMmdmc8ciViP2U1QFUxfSRWYDY4MGpQc0xXPzY4bC85MVV5PDckYTJwS045SFBncD5yKyVITVBtUjBaJEo9T2cwQFlmQzdkWXJZZk5WUEtQZFlpXnA8QXBwQFhheW1JZFR6SSQ/VjV3M2RsZlR4W1J5VmBnb3FkfSlnb3FRUE4rKFYhTko1ZFl4bS5yUlc/NkMvQCEvajZS'@;
put 'a3B7ODd6P2E0cWpzXS5EXSVMNSt0WWozUTtzOl1VaVR7UCs9ezZVcihWfVBOKz8mMDA7ZHpZNyxBYFZ6OnBkdztkaCxMeiQ5ZjFDOiNaOmVPZnE+dUhYTWEsTToqO3BofGt9R1VeLyUpeCs4TTlOSVshXj0xSV8hXj97d01vOX1oNzRqI1k3SjBsMmNVZXNha0h9P1M4ZFlfJVZmNEdeTkNbJF1O'@;
put 'OykjWTBdVkE+aGxPMW5mSTlVLGdmfjhYNmZyKGFVYEtFejBSVz82c2w5UUpsVVAvOnhUeVNfJXRAcDB+XnwxYS43VnpDaT0wNzxZM1ZOJjolOUA2NURSQTRgYlBFLGY2XnM6bWNffHV5IV09VUgpOnp9WjRiZCQvO3pPYjBIQG1eIW89S253SUp5ZmlofVZTJUFJVWAzOG1eKnIucjlzM213PSY/'@;
put 'RHFNVXkhSWhtcGpQbGtnd1ImcU0uNV86WSZ2WnB8a3JqUDEsaVRAKXYwc2ZrJDh2U1YsP3BqIUolISNKa31QblFGPUd6Z1I7PiZIeHhYfVNJPkhnZ2pkJEhUQllIJVVWay5lczFRWjA+cmVwd31JQDR7Q3FbIUo+WT9yPj5XYXNVVk45ZGA2L0xeRW55KjVfQCE4UztsZHEvbTVnY1ZNUUI+Qk1o'@;
put 'cW5zOnJNUF5LcHZFL09tMylwPE5ANkBoJFUudDlwRldEYnM8UyF4ZUlkeilNRDlAXmZgXj0/WWpUY1A5dk8oVkpWa0YuOyFQa2NAbyEvezFobDhhVGJxX1ZdZVtuZV4wMDFLUFZicjhfI2piRSJ2bWk7WCh2YUZnVmVxY3I4X0AhT3ZyKTNLUSYkcWhge1V+ODg3eCNTK1ZsLlF6VT1iOUNscTIr'@;
put 'JnpiJlo8UCtXXUZ6ejBgdz0hLzxkcmssZnspS3okQThGejx6JHhzek0oZ118QExdKHE5d3dyUz45aVszLDE9T2ZWUnp5UiRkKHEweV1sak54KCthSkoqb1ZIbyo/KnpaKXptZkk5WTp2WmJyN3FpbyFKRHhNYjNLVGBHQG8kVV4lfFJmb2NWYUs4c28wUmtSXW4+VEV8JVZWKlloW2J4YnJEV3BW'@;
put 'PVZ2YSwjanZeYTw2M3VaQEtTLGFAWDxkZ0xqTDE7SC4xW190PHtLfnVPKD5WdVE2MEZfOFZTa0NQXypSJiVZVStMUUJoMWpkcSF8Lj9NNjslWkNOK1IhdVEjOClyMSRbZSgwMFRKfURxZThuPHtsSTxIX0VnYyx5eX09MCtGenowWiZAckJZYmdwfERxdHlzTkZldCx4JGZ8b2YjSC5qditJWEQl'@;
put 'd1AkVlU9R28xX3s/Zk1JUCZCRG07bDV7XT0iaHUkWGhPXih4Z1ZUfXkyTWpgK0V6RXhPXjhtbCQyaCNTO2xRJVc9QkxkJCZARCFqczI9WTlKJDc4bkguRlhNSEAxMGRgYmUwIShkMXlOWVFlOXxTSWJNeGdpP0JgWmpyeTA5Z3dCSygpQkA2bj9tckAxPz9tMlBuMFUxeSEsPyF9PiF1M0VvZTt+'@;
put 'bS41PXp9angrX15LalloNSxZZjo9dGAkakFWfHtYVFkmbU1FL1Z6WiZlamk/Vl5Hbm8wYTlJTFd2e143VjhHNUBaK3clPHpreGVJPkBuIUA9NU1YcyRfQCtySmQkSWg9RDUsfXBtLzJ7e2tJOH5SLDxaODUpejBhUThsXXVbd01nZWFVSygpVzErITddZnE3cWNURiMuSj5AcyZUJU9lKT9GZi9u'@;
put 'IjlAezxGNGxoUElyVVQmMEptSFdRJjdnYiYsPztSVnJ5KjFJdj1EeC5aYD0wbVJnVWZfWypqSElCX2JRTSszZ0FFRnklcVkxX2p7XnheZjxac08mOTNdUUhsRCZsKlZ3IW4re3Zabz5xa3hUMl9XTTAsaDFHajJeSl84X0AheVFBJWtweWUwPV1aOSYkOXl1eGgvPjRYdCgvcHdQZnNWZVZgVD1F'@;
put 'Zz5pZzFyUXh1REl8STgsQXEhSks5JnJ5bFlnfm5VVH0lQTBOMWIpKlNESW57Om0hLHUkW2VwQCs/OiUjXzVqfnB3UGAhLnB3UDBwSEl4PDA7fSRmJnpweXB8bVtlOCxmd2RvL1FkNm9teTJDQHIqbWZlTkU9aiRbTy45eyNUZld+MjA2PXN6YCE0VUVgM2hVbXJAVSh7aWd0UWFVKGAxZSxjUiNW'@;
put 'WlBZKkdkIk42MyJ4Mj0/fSVqVWElLClxOjkhLDBoT2UlfDdHYVFFbF8uVCZ7ZFpReCFgWVloL2prOG1re153bVF9Wk5JckprQl9Qck1oV3prXUFdI3FISyMpd1JTZVIueCwobT4xIl53K2k4IywxaDFAazhhMTA5ZnJiJnVxZURrXmxrLytEbiEmdiU8ekpLK2poTTNndT04USptNj14aGcxMykm'@;
put 'eEV8UV4+QDcsTTFJaFkmQTBGeVBZb3E4LDdfWSZ9c0IuJHxzeGBUcHZEK0hodW80cHM5Pk9nTllWaGBjdWhSZWpkP1phT3NhOXI8KlFpdiQsZWAmUEg8UFkkK0t6LFE7fVteOXU3MChZRl87VVRsTSVXczZ+fThnV0AlSTBWNDNtYSN8Zzc8TU45LkpQWlM5X3V8YToyPjFIdTkiLyg8SD0vcEkx'@;
put 'NzJFVD5uYiE0amExI1JXejRLOVE6WXd9OTlRJm5TO1p9MC5kNG1nPyk7fWY0OH01UShiPyZ4SFAvU09zKyUrUFdfQF5wdkhZdFRteDJwVj0lam53LG0vTCJIdilIeDUrKCEpPU0he18jez94I3tTUWk4JmxDOVlzV0BFR2V5ZUlRJjtWOFZCa31WWF43T0FyfFooYD1NfFNGLjl6ezZAI3BTRWJ4'@;
put 'cUFvQ3NHYEFAZDkjIVgxZndYMUMjfW5aZU5uNWFDYEArK3wzbHcsMm9YXXsmcVh+bThwcmg6LmRgJVJpVmFiblJabUZ8LjB+NjJxaDp0X3BqZFBNQCh3TE11WSo3aFlBb3tfbCNmKkI6IWlVLDdWdEVUeHxOWj0iJTh9bjNjZ302YyVlOHdQMFFkPmYsImdIaFBoW0BePSEhckUvMm48OF8lally'@;
put 'PV1ucCYlPmdvOWI/WW47W3gsUz18Xlk1eGUsOGdJX1BYc3VKOXs1fG0kTDp7YWhUQy54OXMkI0hWPHdfcGo0cDxWYVF4ITZSbmBPaGFuVzxQaD89PiY/IWJuKlBRJmBhe0ltYlV3Ll5CYDVUSlk+Z0YsPDJZUTAoPGRPUSYpRXgjQFc9LGFCeGZmNHVDeFZgVm5lUGhqM2hsalA9TTE+TzhwfiVM'@;
put 'dG1EP2dqTkNFLDIyPltwMSxhbmVzbTtMaDolJHhnZC5dQFM0bXxtSTkjMiIlfV9+MHk5QmojcX4wKSV+XnhlSzhRKGFnZWFTQFNJSDE2PXUke19vIT59bnAiSHxtalByKmplSj5FcWRQU2VvXk47YVFYQ1diTm4rSjRqVm4/bXRxQDtSRSg4byRycTsyU2d9Xl9tSGhkJGVdPSF1UUE+dyQhSjwy'@;
put 'MjAuXlklej40PH17SCtzKkdyeyxkQClpN1RAcnNOZnM8cnYjU1BibzhyNTUwWTpjNClVMVlvMi9ePUAqQV03d34sRjF9NSpPK200ZV17UV5pMCh3Wyx8MFVLRnFVaXI6cjBoVk5VS1JKWVErOFFneTxiXW9NQFAlQn07Pi80ZUBnLnBrWEYkL11oKFpPaTUpLkIqVVQvZ3pBe3dqfWsmNSovbj9I'@;
put 'cSN0WXYsd0FzQUlrcFI9dz0uYTVvKm1xemYldCZfM0oqdyRFbmZzRlM9LG01Wnk8KCl2OWJVSFQydTJiQUcxOmkxWyVYemdGKlZ4fFVkNVtjSGJaelBGMGJnM3RUIVdtVUlSVDYvV1dHMFAjNkhZaFR6bktjQD5OVnpNOHgmXnExLEwjWzJTTjNjRzFQMi9UUVZQJT8kNTJtZkxEIzhpenBdeWYj'@;
put 'MFVLeyFbXyRlKmhFfG1wZGJZeHo1PyltXkBEMV9LIk1QVlEjPEE+Y2JUKmR9MkRvaFRHIl5jfVlhbHhkR2ttKyYpTH07aDhfRW0sN3coSz9Ybnp2SygsdlBXPSo5d003NC5OX3ZiISwxSTNCQG01QjhXPkUsWG8wIW1HWkswK1V+OHBiJDRmdSFaPnVmY1ZdfiUjRzRMLGFKKltOZFo5TT9QXk9X'@;
put 'OSNfLy9XVlFANEBCUG90aEc9W2k3Kmg2MD1gTkNsdFBRLn0/bTFoLzlqVW1fZCtyKGA5LHZiYG9sZHNGRCN+Z3F7figiX2VLflc1bFc8QnQobys9MUIiWzV+WmI5NDhmfClabWxFXVQkODAvaGcsYUFgdWQ4MUM/MFBGOUw+UnRQZksrZkhvKS5FIVZLWEJWN25Vdk1uJFFaKn4yP1NNZmBbZV1+'@;
put 'PXFOLkdMcX5tem40YVpgVUF0MT1HTD9+cn0jVEljLihYPi9LQXRWRCt9WHpdfmtwc3wuQn59e15oKz1+ZXhWTFhnOyRHSihaamlwVmd+MihTRSVAdzlrfih1Zm50TUt6R0s7aGU/dH1ybXc/VHMmWjwhMjA2Uj4ofkJ5MzpJOSU9I0koQ0JITlRJMytAUyQwWCRzdXsmX2djYT16KjBbTS4leTlg'@;
put 'dyVZLzN9VlJ6RE92OC5+LF09Mjt9V3pzKFN0IyQ1fHlodWB1KG9QNH1wWHc/cSU6d2RuNGw3Q307UnlUfH0qJX52YSk+a0BQUWxzakkiSm1+VnlyKEleUFFiKHA4M1E8fF51WlslXUltcFQieTE9Mis5X1d+ezRJTyJBNGJbRm1NUU9rN2RjWXd3RnNXWFdjcWpPZGNXcXpESFVZbU5WZC9gQ3U+'@;
put 'MTt7T3puUkZLPCh5N0YvQloqeFc3QyZveWRZKXdid1cqZmtSJn5nOTx8bntlc0ldPHNqWXhbdTAjZ1s+KmVifGg2VFdBMUome0BgZVRoWmBURWlzIlAsbyYqZzkzfF5TXX5RJUZxVzBAQlVTLy8kJTJ9bXAmc2Btfn5bO1g0fVFPJVdjTXZhTjdlbSVmfCkxPVgxQmQwTVc7QkIiLnQiKzZ9O2Qz'@;
put 'aDFUO1oubWQjZnEiSmtNJHM/W3p5PE8uY1Z+aGxvV0UwJHRyXm9Genw9KXF+K3VjX0hIejBgZXs3QGJnI1IuenMhRS59aTI2cyN4S2NdWko0emBAZGZtKzc7YCF1aHxhQiN+IVBgfnlqWiMzREV4Q21pOV55STU4WWFATEFuNWxTL1grJDxpdih+RjcrRXkobllMU2VGQTRuZ1lpNCFtPlE/L2o1'@;
put 'dGs1WiQvbWlsVHM6b3JUfHY+XyUrfXN4JmBVWVA0T3hqNXV4YWtqWnhiXjk5X25gJGV8JHdZRWc1Ujt2SUEqa3Ira0U9MGBoQER+V1NANFczZEBmRjhlKTM0fnpoMlIqe0s6L3NWME0uWnhZVFhnfiNgI2BfR0BgcjNVfl8yY1dfJW1WXyVzdkoyXTVZTUtDPSZiZGRHeDhJflJASHJYdEhoN2Rz'@;
put 'L2lQJG51X0dyKUNyOnp9e2IhSlNpKmF5YzxWMGkzZDhZNmJ2N216Q3UwcEx6JlQ6OFcwb0JraXx6Ri8rPWlfUERCfkdyUzRNe3g1VkZRSk4vbHg7azBIQnlrXyM0Ljk0Tks/KDYwQGkiV0UyTCImWzNxQE1WeihCIkxGP0dLckBrNGkxKW5wWzR+InMoenNbfnA5eWJFKl1kbG8+dSwjPSxYWGtj'@;
put 'Nk1PaGxvXVYuejR4MS9OVToxVCVAUDlRKCt7MDsjUnA4WF1NZV1kSXlDTixoWSsqKkZ9SW9SKjZeeEN6LHhlLDcjRzY7aylIZ1JzYGdVO2hDXWxnfkIzOGhWcyo9LG5rdiYkd0FpMEhuaygxWklOenxSQCxZdylXalYzLiQzMWl5RUUyYGpsMXJie1d9UkdNey9PaVRGPU5YPSR2cUUoMWpLTTZa'@;
put 'dHZHRXpFQUlYfVJuQmZbXV4oT1Qyayk0ZE8rTjArbTBKeS9Xd0kwREIpZnAqfEp+WW5oIl9mME1ZJXI/b3VDWzZlUXFPM1FOU3drO0wiSSQzXX50eDpVSj80anxSTUtZOTRldng+Ln5JPF5MTCpZdzUqWWVQZC5DWztudF97JGRWVSNuKGhIVzsyP0M+cEJET2o1QHJeakMyb1tzU0wubVNEX05T'@;
put 'TC5HNXRnK09QUzw+RUBPS2xkOjZTYWwwNi5ZSCU3VGdRZ25VbT11Vz11UixANHk0ZExCUzplI09DRlFvQko7aG47b3crJH5UQUJuSiVsVDNjIz5vSHU/SjE0MnR6SW5KJWx7dXRnYVNSb3lYYjBJUnBLdHpvTEc/ISlJVGNVZ1RtbjRMUFlNKWxVby5adENyNENaQlNLR09rL1o0IzBMd28uMi4q'@;
put 'PXRCNkF4KmUlNltlL0N0eEdaQlVrZFs3aWhkaEhqZzE0OHRWXjJXKyF4PTNudnVuRThFQ3lYLzdAUFtVNm5NTXdiMzJTN29PJXcrUENsTDM7TSU4NCI0X3QrLklyMDMsTzY/RkpHYltBe0RnLlhASFhTVWYsNEReJSUkcFV9QkZHQ2t7eHFuSnUhZl9PVWtOYyxiSSl7KkdKXSJwdEs2XSJ3IVJd'@;
put 'PjIrJE8veFUqQnNDcWJ8KE1EJldNd3B0LkBLUyVSUWEyaj46QUAwZEJ5QUE/IkYxQUBqZzJXP01ETWM2YyQ8XVUzST8jQlh5SEVVWWhRYjlubmoiS0xgdDZpJWdGSEBKekM/Tmckb0FZQy9gbm51VXxVcD5bP0ZEdlkreit6TCl4PVdVV3QoQkR4RUVBNmckY3R5V00sZiIzSSpicj9DeVcveW5s'@;
put 'Tl5We1okXlVjOlczMDtRWFF7NnMreyosV3hDXXAwLm5naDRBW0R2VlB4U0RNMDIiSW4mOjZlWkB3XjlBSSRjKDNGdjk8PW9AMlZ1Z3hLRCQ0Qk47b1M3L1Q/L0ZNOjZadjlnPGZffG5iTnRmRS9OX0ViNDcvfTlQYyJ5VUZKOSFtb25PMDtJUytUQzM1fTR7dCNCYH13QHo9fj4mdVVDOEtue0dF'@;
put 'ej1iQFEiPWBSSXtVajowYnt5eEciQkJgMFV3Z2pjISsjQ3lJflY4Ull6cC4sPkhCSEZOMUslMjQlRy5ULGl7e0pvQ1tzXXddZE4rRDlgJmdoTFdoZmRFQGQjd25vb2tRRzFZemFbcVU6eWdKcGM6NiJZOFg+LF5hZGp1TU8jaGtqb1MsdFlVWyl1dGJ8VjhvPVRCQjdla25jPzxJNVp9TUZLRT9m'@;
put 'QkhGVltuYnEvRUxuT2EzO0lFUSkpfk1ESz5UfChCVXwodEFzbWBwQ2BvYmUvc246RXdhbnYxeGQjWjR5WHIpVGFmSEg3IS5IVTRCM0NqZlAzI1RndDpBe0lrMEcwUi9GK0Z5bz1Bams9VSwsT01VMG54SkBHNy5RY1dYS057RHtVSEhZQHJaX0o4Unp3TG9PIkdBT0F9VUYlYnR0YiNkXlNERlBv'@;
put 'ZXpsIkklaj9DS1RVbW92M2VvL0RgUC89SS5eOkcwI1t2VylCKEdJTm9XdSFlJVhrVzNhemNGMlRxSzk+MU5GRzJhR091Kzh2ZCJIa09nZk1RUjgkPDw4Zm86eG5MdTBDQWVuUXBSRls9Snw+cUMsQS5nODxNT3k0az9+ZGEzW2QmNkczP3R3Q2VpUEklZ1BwJSRQWGxDSkV0aDRzOjZjMnt4PjJN'@;
put 'dUtBMVBNXzVaVGM/eXtIIk9GUGlXWWs3a3BASlp9PSFwNnFnfTJTbDpSQF9XNENbZChLLl5XL2l0eWN5VUJfcUM9dn1NZCMkazhuL2ghaytwczNAXnMrZkh2al0/O1BJSiwkR3RTRFA7WlE8VFR0RXV4R0oxcy5VL010REIqZFZoVDNAVDsiRDQ/TXR6XXFPL2A2dyg+Rk9FITIxW3pXUEFTeE1G'@;
put 'XlQ5REwjXzJFImlZLlguWGJVWXc5MGgkT09db1JAa0N+MH08W3Avb20ifUozLF1UfFZPMTtec25WdXdPTVIua2spd0RxJUwpdHdANiZrJS45bnxwWiw+dF8wfXJbenZiSCVAUHNSOHo7UHoucW51VXxBKlQ7V1d2TUZVfSRnR08+WzRDQ0J+ZzQ7cy4+PkZYME8wYTpgWW83VWpGIzRIYl1HeGIr'@;
put 'KzxEOUEraSRnRyUmV25NYUh3bzg8bW5FIjRdQkolJWMyUDJPL0osNytEOnF9I2UyazBXPzBCR01EdmJaS08vYXRwTy9gUUBycEMuRFMyPFlRYWNkN2tAS08jSWRVLl49SmtEYlU4eH1NRkh2biVVWkBaQjh4KkI7bz1OL1RsKStKWH57V35oN2BpPU8zLj5BRUl0U0Qoalh6UjlkNGx0fTo4RHR3'@;
put 'TC85VWcuYEUjazM0anV3Q0BzekIsNihbWzZANihbMzQzM3EiJURJV349YiNjLz1bMCglQTJNQlMwPFFTYjRHdTVET0UjZGgjVm9idVd3cVlvWk9MZFt7e25VW1RkSGNLKn5WKjZgUG9CMGRLelQvKi9Ad2daQGkwN3dGNiYmIm5vQzBDTyRuJmo6aT1CRGFCQTR9TSVOJSRnYjdwYXVIN2grKEND'@;
put 'KV1UTyR9NExSdGRSWiRPVmkwKFRdRmFGSFZjaWt1a2I2T0pMb1tAbUBzVV17Yzk6PjJBaUorWSpOSm9wTHxBOTBlRzxVfDBqQSE2dzY3ZUtvVSJwMltlc0dwVkZVKHlxek86KlpwZntPRHlUb1dYVUpzVU15Pm8wekczQ0QiZ1F2c1Z3ZyVbaEJJSDVCIWU6b3p6bW43W3pYTzc3NEUweSVoPzp1'@;
put 'KWRxQCZAPUYwPCNPPG93LDVFTE5zMGJea1U2PDdPeFNgIzxQJFRjMyhdeWdbPkZYflBdIkR1W1BhSFNdYV0oJGBXR0RaTTlWTjEiWWQ/dEYvPFJJR30wYS9vNGJNWEdCeVlFcyRnMjpXQGFNZ1osTzssVHJsJUlLWSVJbEk3UDN4KE9CTERKRlpLWDdvQGpYL0tNWHg9a0BfTXU1SzVUSVtSUVFU'@;
put 'QERCckVyflJRWzI4NVUxaGhKMWtuRT9HeXNASVlqK0l2PmdWQiUkQVVaa2QvZnxbUXdgMlNDQ2JTVWMiV3F0M1ZJa1IxRko9SjMoNUFISjQueTpZLzMvfSw1UX13JU4qNnpXQEJER013fHJ6ZDxUVlhndkJ2aHRWS0N1K09Nb0JbUFY0MiFmVEIqTkxPVU99W2JCLEN+Z0NLK1tFQXtkY1cpSSI1'@;
put 'YVE1ZzhkYzR0LCtCSVd+ZF58cyU9KDg3ZGtPM3BANkNdUGlUbWc0bmF9Okk3RzF3R0hLUTJhcC9vWU5ZSjZSKVdGdz5lUlB1JUdvSCpQSWsvamwwbiVsbmcpNip0RT9DeFYsN003P1twWylJMT9KJHJZRVFjRT5FaylELE8vUXdmJW1ua1g6Qk1MVFRAa1JjSSxSd31DV2F7e3VDT2M8eTwxe3lO'@;
put 'MU9PK2tvL0VVdDB9UjhSTEwkZ0YlQnR9Q3ltamQlZ2A+TUFhSmFtNEV3YXx5QjJxMmE6SGJdemhrKC5FV0BrUjlkL1klWCkhRiNSKjFjOHx4VC95L3kvQ3RfYTxSRitNTXNqfVpLT2xjYE42ND50ZXdITTJhKCgkbjpFYkdsSTohMm9fMHdnKVsxKFdGVEZkUGBxSUs4PWNAJkFrRFhIJU4uTmRv'@;
put 'XUBYNXw0dFgsQ11KP2Z8NyRnQzMkWEdWLnAxXk49JFhNU2UjZTR7NHgzcW8xXkBVVVE4X19XdGAhOjY6aFZbaGs4PDA7KDJ1X3R1TTFrbCs7TzVLeGlJeEV5Oj4wQzZKO0RsJEtvJkxDUFl6ZUdQb0J2eHhhbVZrcCszdXllbmJTb35Ae0FCRUs5RDNqS2ZIa2dsK2d2LD9kWyNNSFouZENQSlE8'@;
put 'bFZLKVs5WCRxZzhsVTFuTVl5Kj9ecDp7MlpYbEdaQkZLaW9hOnxhY1dRSW8lQE1wI3ZucT8lLCksfFczXktTaj15VVV0dERRRjpdVWtmM29MYlN8UUkyeTpxbnVvfHh2Tis2XnpVQDZ1L3Y2RWIyOURIYi9tb241dClDPkE7bHhnajQiTDZIM3c3byFrKlRVcF9PNkhfI2NVTzd3QCJBcVIiSGd9'@;
put 'OUJhbX1NJFQ1KzREKFZ7WisvdkBDLiNDcnI7bEUzPFtCdlF5T2dKUWo5Yy90b10uazNWOl46LnY/dChiRytIVSZ5bjBxMixuQTh2Tn1NJk5uK0RdVERxSGQlLzZQLyFCUytqQ05Ucn5nOCwvaSsrWipHKFhqZ102eCgyeDlyRzxmTDp7dj5ZREdreW5Sb3QsRn1bUEFgNWBzLlE/eHBiKndMeWZo'@;
put 'Lj1tQUIrNjVuUD4sM15uJl4iYmczLiV6cUR0QFpQPVZrRjNMWDZtcFQ6LktVdkA8SVdhaSlHSnMuO2JuM091KHdeZ2hkaWR6bl5iK2JXJWpxbkVrb1Z7S3tnSFVscy54bk8uWFdANFFnZkhaSTQ3SHc0Wk54RzJqVGMlcnF8Xz5vMENfWXUySHduY1oqP3xyek8zbnYmMjA9JikmYGpEMyM1P3c2'@;
put 'Vkc5SkAkcnFzK0BMQDFRYUsxayRDJXEvNlsrb2tdVyJBJU8kY1VrJCFucys4SHBLNV40LkolYitIU219QHpmayQuRnQ8XUxEX3BkJVpbXjYpVCIzJDMiYml0aXpTVGhYPUVyJCZicFUvKVpBeXZzQFtHWzJ0b1hGOk1gKlNRVVFeanZYejtSUXMuSiVJdkg4YTgoYGxWJSR2bikrYE0xbUV2M143'@;
put 'XjFGSmhtdX1FbUdYSjZrJWAlWFFCd18xKStEYDdjODpgaGIyeEBeOUVycj9eIXhrZF1pcnIlM20lN2sqRlBCKFZCMC5KLD9sVjdvaEwlQlZrfjJpInZkZXB2by5KaihsLlFuLGBaL3xUTVJ4TSZmfVl7VTtgLzZwcmhHM3QhWVYpJDdrZDNVPEJsbj00SyVIVSFFcFJ0fG4za2QvNkdrT3YzUXpg'@;
put 'ITp5YmQlZC4uVCJLQnlJcll6YDosXjJ7NisrW08pQnBOdSR4LC4mbnE/UEJCQ1FnRiVdKHRBLlMxYmgkaTYlQmtKLzZjODZWdDNtJU0lejwwPUBbWUNBM1pHRUk6cWRyJENAMzR4fXIsKnh4R0pOU3B2Om9GOnhFfWk5dE55fDwmNixfVFNQO2R4XWs9PVRTLzYvKl9uTiIhWSU6cFpAazk9QFs8'@;
put 'dW95ZmRFNWVIS0A5WDlPIzY/Xi5eUW8+ei5Ke1clOlhjQ1g9QEsybms8QGcwaWsuQWFbTTNVSl8yIT1tQTtVSVF4PUc/YD9KSiM2MWJuXVovaiRvLkdYQzM6VEVbPjpUU3t7dHRRWFlbOk0yVF4/aT5de0RaMnRgYlJuYzg2YFVvPnouSnBSKFYoJi5eUW9tei8yQkdoPXdXJUA+OiNPaVdVcHpb'@;
put 'TTMzdzZbJjM7cWxUMS9QYVJTaXlDVWYzdm88V1R2NiFURGtEWGlwZFUsRk9gczN8N00/UV5+Wn1GISFUP35PYEVoTS9dflR9I0E/UWR+Kl12d35+Ln1lOytlKj4sflp7cF1oNnNXLH5Qe1QpL0NBIjx+en1HN1JxfH5Eflo6M31gfnh8JUtYNCR+eH1mQTV5JH5FcCJ+Il81UyJzan4pKmQrX3Ny'@;
put 'fFI2QXQ+fl1fcVAoaCJ4ZlpIb0E+Vz4lZGV+MjQySCFvaWNmLyQoNilfPUZ6PG88by40ezxVMDxveVdiP1ImR2NPY3BbNUM/YGpFQSJFflokXSZiaTErZ2Nwa256eTYiMS5iSU9kdlZFODV0Vz5+Ol9+e0JdQiI2fiRaTz07TWtIV1JlcWlXfjcpWmNYKkFZditecHc6QyF9SkBVJHJPUE8wUyFf'@;
put 'fT00dUpibXZSeXRXMnw4NXRXLjQ8aHk/KWh8fktiQSJpc0c2YHNdJDpzLlR+czpzcmVfc2lXaDRfczV+YWZCIklje2tQYWszSEg1OGVxenxjYGUvOH0leW1iS31hUGZnRi9HN0YvSkdkTjFFSm85clJMMyI3emJ2IlNJaCpmQXRTRGMyMmhBSWUkcXBzO2ZxOXhnTSRXVntrOFJ6UShaPkclZnY/'@;
put 'U304KDohIUI6OmZZXV44b1VicStienBiUilnOj9XX0w7NGd7PDY5TWUjMztmWzZmQExdNzM9en49JndPZ2cqYV53Kyg9YFR1eXpoalQmZD09KlFwajJeIiQ1c1UoZH1KZltPKkAmUHVmcEpMeClZZnA4WXxCWUs1bWEsYT9xa0J8Ol97I0ckIV9JfkBdTFFgQFFePX19YWI2cEh5KFhnIThQUC8r'@;
put 'd3FSZmNfQHNPK0lbR1Z3fFRLO2N+JXZQSVZyL100VjZgUUldaDlNJmNtWyZjRkFdP3pOXlBUOSwoXWcyfFdiPHxpTDFrM21ROlg0cExlM0tiejV2bDFiPnghWTpPVU1XRCVXJmdaVWxAKGoxWyxTXzsxRWBVU15bfUQ4N2llJkc5S0RxUUkofV1VdmYuaU17el92ZnhxNWlOQFMxZmVKI0JiPjZx'@;
put 'Ol49cj50LyM/Q05eVUdfZW85Sz09I3FXRnZLT15QVF82TjZkQGx3bmdAbC93I2lxOTtkUk1ZV0F6Y3hqVUUjbj91IUJySSV7JCNzNUtqfnZkTStEb1QuSSslcV9ANHZbLD4sVUY5OVNiUWZNV0hWWmYkK1VGdU43VktAdDxUJGJkaDJfJiNqeWY0IXs5ekhaZ0FXNG1NKHchMV9INWcmZD1UVE47'@;
put 'LGYscCklPHR2Z01xLGZjJkxiV05yPlE6UGRPMXdLaDJOJSkvJXpLbG9ORj1lYEIoJUchM2Ewak99P0JzWjZ2JCkkOiVZXzBNWXlOJFNKWXM9O2wqXiFjPHB3YFk2emEzW1JDMV5TbE16VT1ifit3YngkWSZJK2tHTGIwPkldKT04Pnwrd2IyPiVQMmIiLyEvU00jOiUhWl5sel1TeCw/JWlidyF7'@;
put 'VXwxbDF9Z00ha1tyTFl9WnppZjhIfHxmVSI9a106cC9mR3dgenBQQCVRPTZhTnIvNkZ6YTFQZ0JWX20jWnBKfT1eJlM6KSFjJlFFNW1Acjc6UiFnUltwb2p3Lzo8LztNISZRTzY8XSNvcX07eFRZeDdGVnE+fCtlUiE/KT1rMm1kKjE+ZW9JMTwzPiNPPEczMWB6PEc2OWtbUTx5Vm9ocF5zQEpb'@;
put 'cUAzVmQkOjM6cnchRUkyVkV+e00vaGksdn5JXXNsLlFWbipbaTI9bmZofmlEX3sjLjxNdWM1cyxDYlEpblVSbkBgdCtwa1hsTCVRPTZwajwubXwlbD1dez9dZDokYFRdd1YjZih0cD5RfGtkMCVPJU1eeCwvI3V5T2clTHopXj13Kms3ckpkJERWMmNBfG5VVnpdNF9kV29VJj06MlIuMWF1R11v'@;
put 'U3IpN3Y+a35tYWhYZyRVMkU0VmBdUFpJUm9qQ2YsU3owM3FfWyJPdEAzPTZRSCZLPztpM2J4UmZPejApKl1eaX5jV3dATEwqck9MSDV7bDViL29bYjFdVjJHJmxPTWVlcys5MUJ2X3BtRyZ5OS9qXj1oUFpibFdJbWVWRiNaLlpWT18xWmV6RjE3TUtfaFNxe2llOGEsLlJiYXJnXS9fTUVmbCJk'@;
put 'JnFxe2lnJi5zYUZgLzhAcy8xMGdZNjhqZGk4RFU2KVN2T2JRKkt4UHJnNUB7XjE2JFNaMHNhNjNoczc5OjNGZVtnKHptXWprV048cF08YmFqc08rKFtySHB7XS9wODZCUWgxR0hWRl1TJmNtVkFrN2g7a0VFVClnJW1vVE5fSGpKPlg6cE5PMUg+XT1kYiIvTDpiZGgmYzZNKGB3PTolSjhhSGdC'@;
put 'Ozx5ODN8TzUkNU5dKkFgOyRYVDc2W2x8JWwqL2RaP08xdEgmRGBNbilqa3w2Q34wPGprfEthViFbOElZeSN7ak56YFlvUi4iZzpYTzdNKGhiUnBkUE1ARDFRYjhfQVIhfFlAIiVBOHtkMDcvNjJhWzxiYU9kQiV+TkIuI3EiZHBHSSYvODVCUWhPcjJfNl52SCtRYEkmRjVWOWt4TXUpU31AOEhx'@;
put 'NlVBYXIzczs7Lno5XVZjfFdEUyNNcU5yMl9jWGE8Si4mKXN0d2Voc3IwUmtLfEU6IUViOiJvOEA/Und9LDxDbDA9ZmBLUSElTGFZRHkxR3szPWEhMFA6Zng+MUlFZ2NhRmdzKjtkLzteIT5AX2c6ciFMXzw+cCxmKC89VXAqNUQuO31vVVApWXBwPTRRcSMhMEZ5L3B6e2teTX5efDFlSzlkMmJX'@;
put 'bHBvdnZxeGMoNno1c1l3MEdASGkxUExINU42Tll8a1lORFZPbzxOTDpCKCVHXk8vUUYoOnpXZkFlXWVxTiRSeSQiT1FpcjptbC96UGRRaXI6WntAbGpOSVdCL099flYuLzNdMU4hcWcpTWBdOzFwNWxqI25xX0AzQ1AhYzY1QFhOaEdkXyR1WDJ3Pl1aITFHJixpZiowKnkhV11YSV56THJRYXRd'@;
put 'Zm9DOVErUmRWe1g1JFBoLEkrVmxZZkloTCRZX0lAXz9bZEk4a1tkYlglR0U3L3gwW2dCNWlgVHpTXWg4VWRocz19XiU0VTM2ZG5OKypQSH1PZ2xLenNkZXVvKVZtdiw6QCZ2UlMsVV5OfDVjLHNnMU5vdyxfNkAjREliNi41fTozK1VNclFxPT4rNGcqOiFxfSsvTSVRTzZSSDgmPCsrQExSJi5T'@;
put 'MHU5JWo3YXtrVSZ4KTg5aXs6WE1xIXF3IVhkWSY3OiFxcGpaMWVsZlZfN0BOKEAzTz1iQ2JLI1p5Sl8wUGQyMjlUVipTUURiUUk+U2d7eTY9JVIuZWJPfGk5PiVAQjhvajBhSXNaSztzek9QZHVxV2RLZlQ6UD1wbStaLCg+KWtmSTVgUTdqVnc4dT1saiNAU2J6W25IbVFoJUFoR3xJLjtHanVy'@;
put 'QGY1enojOSVFeERvIT87a1p9Tl5bLEM7VmIiLyhxNlJdPWE5bHJDTWttRzk7K3ghNjBDcFNeQmxCJHZndHs/UEpSWD15ME0oaHNge1JrKSVSITExTD1dU1dvIiVQbXJ1a1kicHJFeFUyUVR4IV1eJW55UnE0WjRlRj1wazw9RXpzJUIpRT4pa15DNjhiPUN4L3BgIXghQnxZPUgmZnFvVDY8XVVD'@;
put 'RWFEfElJVnczQz5WXngsdyFHajQ4bmRYI35rMW1nX3k8cyFYPUhaYVYkbnp7Lj9LaXYpaF0jcUA3JnxtKTZndDwlfmo+RylCYio7fk1HUD5fcj1mKFN6ak06ZnBmIUsoOVUuOXZ0O3ZhPklzMnc4ZEBFI11ZTHA9PDczeWM1K1loeTNhVmhfTTZUck9xUGBAdX02JkpLOG9qUzIqemFWSVBxcGE7'@;
put 'OHcwPVNnPGo4SXFCaCEkcHFLZENdekZeJE8rPHNrez87cCZBZXYlVUdWXmU9emZXTSVRPT9Le3FfKTptWnNzZUs4ayhWJlAkcU1yNmsoUkc7M2xxO2RJSjtvL2JDXnlieDpjMk5rMmI5XldtXyt6emokfE1INSwse3d2a0FhIXBhLHYwejBQazp6elVeJVdsfjhAI1ZefDB+ckR6djpAYX5rO05v'@;
put 'OyMlUi4iIWBNTE17SSg4fUBzZV5OcmhSKCQvVHZkd1JDIjV8TWd5X3Znc0hALDU9PDx6amhkJDp6UiFLOFEoIypHb0E3USglNyNObWtNb2RlPFNsRDlRZXFgcD9PbDQ2MFkmeWxibn0scWdISzA2UGlmcXhtOzpNbzs4cXgkXyltRyssO2lodHZoYiIvIWpabkcoVT1RXX5QM2NEeC5jYyVnbVhz'@;
put 'cU4ydmsxSmtpYFdNOTpEX3ghXSZvV3M6Tn08bSNFOl4lO3xiSjIzbVo2ek1kRHxOKjQpKUFsQ2guWywxdGgiWlJ1IWxUdldyQG1qTkMuPWVfJld1flpbK0xFUDw6M1IjMjA2MCQ/O2U/UlkhQWwsdTtkKnJ4ZzI5fUxUMl4mTG9LSn1wUHloVkhpTXloVlo8OlNQPD4/b21abipYKTJZRiYxV2Bo'@;
put 'OEUveiNeb253PFUobSxxWUZaQDZjNSt3fj1eMyUjUlNlWSZOcUQ6Qjc6ZFk4eSErNXY9QXlqOVQ9Uzx4N0pfbTJ5VmQhNi9OMWJlWCVoZkN+aWhSfSVPaSxnKHBHcTh5M2RxN3FhOz10aT8wWj4xTDp5JHgjPGZHY3V6MEsoVllQRD50Yk9fUFRCdlk9e1d7Z3N2R1ZCVmdhT3EvZl82WDZzTHRK'@;
put 'dHxlc2hFKD0kOHJ6IiVvLGJnWUZNVyJESzsyMFk/WyhDK2UoRUAqamZwTFlrYmtRaCEuXlUxNDhCPl1ifjZ4RzF1Sl9eZnhidlE9Yk1aTGVfWkpbVHFsT04+LDtBfGYmUUo5USQyYUszWWQmc05INGVOXkJrMTA9bDIiJW13OiFxeFtSUi5tS2ptXWVgXiZsSnp3LGx5X1ZwfWQ3fW5PK182Sl9e'@;
put 'ZjgzPEdmVnovSjVSXkZMdTk8U2xxWmRdWkklPkIvXTkmSyQ5LztyWiRJNHJORmVPPCQrWDFLaCxaYV9IKFtuRyZpJmhWd3E3XkpGci8+cGRfRWtUXkJ2ZVZhelUuX15kUCQyPDtHb2xJWVZ3cWs1VGRDPisweTNYZHZTITFqb3VLITNwLEM7PCFbSVEmRDJOUE8odlE9Yit9aDs0VTRtQ1tfdUFu'@;
put 'Wm5wQCI1WyxxOy5KMmdvODp4MTAxaCNxZTtgdFslfmosJVgxTSxXbzU4ZnU8YjBsP29dXnw1Mn1QaGhpMCtxaD1pbCRYPW1Nb0opakk/JGo1OnRsMXx8bFptVm9lRGk7IXEjJV1gek1hemg8alJQZz9lck1FMUlifEBnfCxpZFRkTjBMLC5wOEVqY1Jmb0dWZ3tpeXdxczp+ezVtLzlJSyZ8RF5T'@;
put 'LnFNISV1LDx3W2c2LHk8cyFESStwVG0yTmplQFpZeT0hcVRjQGNLbllkeTVLXjRWNmsoPiwseC9iV1BPKHsxK0BxaF88K2xJazFHYG9NcShxK216MmgoPixgOjVQbF54cEphfns3fDNhM3FyR3BQcT58Tz1ieT5gQClEOXplUkZlRU1LeERvSVJ4UTJRPWI/b152KHBNeWhWak9CdkpfIVNIKG0s'@;
put 'W218Wz1qcjp1b3IpO2Q5Xk8/fk1FUktaL3dgJkVxVm5xbW84R25zPkArL1VaKGd7P20sTWU4MiV0VXtZeyRFeSRyKkBMMVlaeGYwKihZTUhkMjswW0F5JHA+TD5RUFI7TXFEcWRxJiUwVFcyKDUvMHAsPXlYSSMpYCY3UmBATD5SIXJeTjtBeGhsb21rUDdAND5MPi5lSTkkXU0rLC58UFpiKz95'@;
put 'SUghMj40ZW8wUiE9emJoaGVNZ2gjfF5bbkFIaThBJikvSG45IyNIXz9NeDEkbDEmcHhlYzswKiFqSTk1UHxAMko0bHRySztKTXE5ZV1BXTJANSxEZyV6fXBmcjZsLGQ5QCxpYW5FSS9mYGc4QGpSXWUwcE0oISpvZi9RZl84XTtrQTJyYCgjKH1HMWhiMCp1S2p7NWFbKUpjSDR9UHwwLylmeWhW'@;
put 'Zio3XiR9WkRzcEhxQUZGXzZheygjQFQrcWs7ZyM0PGpkJGE6SDpVMSFfVVNkQC9uMDtgR05xM3p5M35wNHBISWc/P1lbcDM+MnBLKCQhdFRaJHwjS3FNaHM9PWtRRWk7YGkuaUBLR3xCfko7NGl1OUJAKGVSPmZ7USVQJkZiLDhZJFZgY0tlKC5zRz5iOWtdNk9HWClacywmeElnfCEhaixpTjZS'@;
put 'Zml2fFBJK2IpWntCT05sTXN7WnxASCYjTHVZWihsb18qTXpiMTojfTpwdil6JGp6c1pLeiROeXI6Q244M3Q7Q25eaTJiKlZ6Ty9obT82OENmTHBPNkMoNUdZajhASUtGUzRORWpMcEUoQFJnZVJ7V2ZfPW88ZWA6WCEsflA9YT07cmU/PU5gemVmZioyaTFfODJscTBPaHZTPm4oOG5eMG1aNyhv'@;
put 'a3k5eDYhVDI6cnVsfFtFPmExMWYvanByKFNQPGd8WHkvOio7UHBDOVBadU5Oez95aWE1bXteU3txVD1ibnMybHdPMnpGNGtiJikrYm5gcXhbJXdjSmFXI2QkJDBObzUkcjN4ZWU7WF1EbGhQQlsyP0BsXzZGNk42e3owSyxtUXIxcFA1aWAkWVlxTWhZXX1aOG56ZVAlKV05QD9STXN0T086WjlZ'@;
put 'PyNxJlJEUGsqRHwrcHRLXiosOTlLRHFUZyRVaF5OOzteYnZzSjBqI1lmZCRiQmFgYSZ2WGR1LC8rNnsyWX17Pjo3UTVOdU4qNFpIJEgqYn5QSFZPVVdzdDYuPGtkbCFAK1Z3TGRGOV9dfTtIazhdK0lRMEY6P2ZPbzlRbWRkMksrQCpNVXw2PlhqfTAkWmJvalsmZmwyL1smKl41I24wLzhfXTw7'@;
put 'N1EvTk1wKGtaeyM1fGhEKUhYRnVpVTw7Xi5DbDhjQVRIZUNYVntDMihgJDdQLn5oMmJzRGx3YikpJlIzSmp5QHtNMCNQRlIseVZOMVkpTyxkbmUmZGw9a096XSZYOihTIzhzOk9hRDJ9R21ZUCVkOkBfKzN3Sy9rL01lNmEwdl42OyMjNT0+aXt6KSosZXpPdlIrcFI1RTs3UXRoODFfXUl8VWQ1'@;
put 'JlJkOCMua3heZ1l0YT9tPX0jZDc3P2IkN3gmelFuUypqbWRWeyhqQiZhUlBlN3daSHZ8I2RDMmNAb1RBLGkjYVYyLyFqWzBKOGksWFoxbUohZ19LNlhXSGpyZy50UjJ1Xy97KmxZVDxmXW9iY01eMVZKNkJiKCpncm9dTl8oPTVfUGA9fWs3YkQoMHhLPX1WKkhrTGRTPjcxUTAhbHdjaUImXTtu'@;
put 'NXUpJSI0Mj1lOGY/UyVsdzdRTCtxb30jcmc2Qk4melEuZFFmLl08YWZ3ZnlxKzdRXz9dUys7bWx2fnNyVzkqXjZlNWE1Nk06c1N0U34wcWd1Sl5NODs/ZmAsRjFFcF83OjViVEV9O2REfDY9dyopbE8xRWk1Nj0sYFN2U3ZTITE8I0U/O2t5JF03aUR7N2lEKzlONnU5L15fPDtebU1YJC96cnB3'@;
put 'Z2lQd2goJUM8RDJyLChtMXFHaztsJkxhLCgpVy5fNmJAfWYvXTdRZVQmbGFyaFVzfFtHKztDTX5dXjZ3PXU7JjlBOSl4d3NCe196WztHKFEmXlk2TnBUdWh8QF1afElQJmkmdSxlbE5RMzkrOW5AcyxBbyFOZjJHMXIpIl58RiM2LD16blQ4YiF0Zko2anl8dyp1S1IxVlNwQ307TCxBc2QraUM3'@;
put 'Tz8hYnw0b0Qla2ZyfUdaMCZAQ1FOXy46JTh3VlNwWzdYQDMocSFOdnw2PEJ5RjgzQDpWTjBMezwhMEgodXl8d1EjZzZPaXM/eDhfRjlUe21EekF4WjlPLFI9Tl1mcTo5cENrSV8ydiY4UERKcGhMZGtqNmU9UVArYVY1TXpVdWBdNys8Vzo0TkhzY29Wb3V1MmZFVEojZXMiZH4rbTlROkF2UWRq'@;
put 'MkwoQXxJIWU2ZyFSZWcoIk9YU2QzY3x7ZHNmeH5+NyF1OTpEfX43cGplMWFndEg+ZlU4L19PRThhOXpoalFkajJle0IocSFmd1lASE19cHJNPyE8ejhhOlJ2WzJLKnciaV83aURaJE5kQyR6JndNeGEjaTZRUD59WnQkTzFdJFMlNGdCO3hlM2wzWE8xL2Q4K01kfjBmTllnLmplNi4rRyRgd0hA'@;
put 'Tllnbmc8TyoxT0puPG56XytxJEB9Ny9OKHpsbGMhamI8LE55LEBXdypQbXEwIXt8cXpzPVoxUFBRUDUpN0A2YU59ezBZeyNTLnIxZ3UwKCV5OTBLOzA1am52KFkiUkhRX2FdUl5dNm4yQzJfckZWW2hVZ0tLNW9CZkR6VXg5czlRcSlzYilUO1pfSmQwejFoUyhNVmhgRmpRaFUoOlMrclpxM3Yv'@;
put 'dzdAbmpaMV09TlFAPUZ4T1g/MTReX2FNVyE4NzZYPVNJOE44JSghOEE1di93YndFTWtKWzp7fHlWc0ArNndxOF1KI2tgY05iN2t5RWVUIU15XytaPDRlSXc1OVhaMl5bc2xWaGBDMmhgYkImYGosO0kqYFN5OUN3Kys9QlVPXn5WSSorJiteM2srejwySHBYKV9afjkzKnUzWT5JXlEmSSsrZnVz'@;
put 'Mmw3YVBwW1JKUUl7P21HIzRlQD8panZSJlhANi9rND43X0x7dVNzellsUV9UXTU2ND80cDVOTXNuQ1RfPDs3UTByZjYmUj44NHEoYSlsPTNJbDUmVnJye3MpZjZye19dPDs4OWNoMSNGe14mUTpROlBkdXExT0NqI1FuXSk5Ij08OU9MNjh+Uz1ldTJfbFkuJEhTLms3XnBBZCJaIioielcwaTJE'@;
put 'LjcmITdYe1ZqTl5DaFZVSnxvdXYhJnZgQGU+PkhDantieDFhclppU25RX0F8S0l5ZSlhenQwOmZ2LzxCL0pmUGVQSlNkQytEeTtjOkRxOndzW3pNTmpUQDRmWjUoYjd7QnBVP2wleVBlITw8dkYqNHArIyVjM0JIZGJMWmEvdHJacmdqeiMjP0ZqR1FBeVcvIz5tX1Nja1hPZTJfeVRia0MwMHtQ'@;
put 'TUlnWE5KP2AheHp1MTU9WXNvQXZLQH1LZUFLTzl4TG1ySDdMYHx+REVQXjI+Smx8N1NDPzVSTys1Ul1mPWhZIktoKWsjOkN1bzdIR3N6UTsuT2FEczRpc1BiOVFxYUgob0V3ZylMZlJmWjFCYUw9ZkQuNElNbF5lcCt3KEE6KE57NlZULno9LyRAXWY2Sy5ZWTB0eG40dUlxdWhZZFtdZl5QMGNr'@;
put 'Wld4PVhDUmF5bXFORUNoKjRTIUlKMUtHeTc9bTZOI04vUzt4RGtRNl93d2tjaVJxT0lmaExmOD5vbkUsITw6ZTdQQ0NSSE9NMHpnPEwrVzVHczFfMGc+UDdvdTpPRzsoM2BqXkBuRFpsczVOJiF1O1tKOFFEYWRsbnJDc2NuRU41dU5KbUY7ZTJpQ151SDc0NCpURXp1YXUmKlNWTl4kPTAkNDdT'@;
put 'U10wa1I4UiQqU35CLGQ4KncuKSNeeWNML2YlUXdsMUpHIjZQZnVXY3ZFJUFoU095OGc9NH1uQlRVPzVyXlBpRUM6XVFtT0Y7WW9xSz9aeDttN2JDI0tiKXJPRjtuO2U2KHlUemU3YkNiJX1ybGhje0t5X3VDZnEvVWMjRXR6VHE8OChlc1oqdSVnRXc3NHpKYzJYO0I2UTtBNUxGYDE3UEk1ekpV'@;
put 'Q0JlMi9TOyoiKWJFYjVZOjomKSJDUzZFOjJdQ04lKUYqWmQpOiVYO1BfRGMjM11mbVpRKz43UCw3eC4wX1F6XmRQO0csW2RdWWhxM1dWb2AoSHQoSzk/akYmeFI8MzdRamUyd0VGM2FpNEJPcjxVaSt4XypVXlgxb1BWQCJkSGQ4V2pOaHJCIktKWjFvPFdBVyo1b2dCTVBmakZPaXBzPDxffTZG'@;
put 'XzRvaHhISXJ7JmlRR2Y8WWRlZzpPVnYsUk1eRkV1cUMkP3k6L05Baz83d1Ysd2gqPWh7fCk4JDpkW0B0dTJMZlBlNiF1TSZMQlpzWWFwbEJHTyVFNWdCTUIhai83K1JkYXBodDgoYUkyOXYvblp9SjV8X0txZU51JmtEbG8pUk1URjYzQFFWYGZKcytQQiE/TEZ4SHZHO1M2SUckI1NHaSRUZDV5'@;
put 'X2g4NzpETkEuLj59RGc/SVlxbH1SRiVTWXhLR0plREBRXlBacWorfD5ycGx3RioxaTJBaD08ZihbYFJodCZ8ZTh1Qj9pOmkjZUA0WUtSLEdKKX0uRyksLn0/ZE5QUGJoU048U2ZxYC5HeUJPTj54eTE5UzE0cjFobHcxbDJ3byoqQmZJRWM3U0ZLXlt3di9mODZkdmJjKXsyMVJGI0ZxOVFSKnow'@;
put 'fjlwYHkxYys0OjN2M2Quen4mSFBSQXk7fXFAKWY3JkJOaSVAcmpmQzdPWnQmTH5Mdy5OY2dKZ0RyTGFkeGZhSmpqVHlyL3tSUGIyYFtSRDh3ZUZ1e0FOQiN8KDM3PTphMml7aldCNG44WUYqOXQmTzgjUVImM0JTfEpaVTphMmkkR1IySXt+fnI4PnhCMVdYP0khWV1KM09oQTlbcEg/JXFgZ1Ur'@;
put 'ITJZR0YkR09mImBRWUVyQSJROXhic3V9RWsuNlY8ckpwPVlaWFtickkhfCk2N35hYUM1VVJVL2siMFdeUHVpUCxpYSQ3di9BLjJke1hddU5sPWNCNk4jQVpJR1BtaU16T3k5dUdqLHMrZCNiPyV3SFRZOkwjV2M1eHNIQEV3R3FxeFZ0VlVKKkZGYUxJWVIrUWdhVkskdn1AaXlnRUdEYHVCNTko'@;
put 'IUkjY3QrLG0+Yy5Sb3VHdHxYPEVfN1RGJHZAc0l5fixZZStPajoqSHYsezd7WysvMkxOY1NReTtNQjdieDQoUzVScDpoNDFFPiUkJGY8IUVPQihTNiEzbUk1PjJsWnJ1K29QK2MpaEoseFJZLGJzOWxaajY4dyV5YFIsNWovNDEkdno4cTAyQCVJX0NAQShje3YwLl1qKHZbQ2Q2SXJCSnVvbVkp'@;
put 'TDVxanhTRiN6R1EuTUhnQT90QjxmQX0xL3RCZmJrMVBVVlg3djlMbjB+YHhSNClGd0RmOyY6XiFGamVfdmQ5Wkx2RCo1InRsZkQ2V3t2MmRYeTJzQisocXU2T2NNfnRuZXEpWGNuK3tANUxZZX00MXQ5MG5vZzp+SEw9cFtGWHEwKDUhWjBfWGVmW0p0PTw3UkRfam44TX5MY01FTWMvISJiN3BN'@;
put 'bCZlcixYI3VzNGVFbH19KUg3ZjpLLCZUUkgidyQrYEphaVI5SyRVUnhDJldnZ3swflI2Q31RMENtNXdtQWtaXUVLJGE4Rk4lKFt0eD1PTzNnVUdNQCUrcXoiOHRMdU94SlRYU2p1IWtXMlNmTHk9PldrKTVWYkp5QjVHMnQjPCt0UEwsM0ImNCh4ZDlKdTY2Wy80V3swYGNgWEhEPmxXb2EhfVJP'@;
put 'WFlRZmAkTVVHU1pyMkwvUkpdUUpnb0NGaHwsVU9PcH5gRlZdQkh2O2ZbSDZGNlJFME5YfVJCdXJPdUcuejpvTk9UMzxoaV0ieTEufVk4KSE1VUR3WjFaZExBdU5YclI0LzJVbUNoJDEvI3dgKCI5X2Rzcz9ySGdobHQjKlo4eSt8QzFVN2BYLE5meHZHKTxHS2l4fUNDNmFjaitDRmRsdEJKRE4k'@;
put 'QVNZfUxJfVlzTFhTO3kyTGEpXXBiP1UyQEFpNyE1YmskRDd0JUZuTj9wYUV3Si5TLyp7JihRZHpxQn1KZSpjRUpHI1N1K0g9OUpsIX1rNyhZQF5DTylbQlBCXSpmWHljVlEkel11TUFAR1dEYEEudjtxJkExVz4lOVA0b0MkcylPN2FTdmBqTD9EKHYiQyR3OFtnV14oXU8ieTd7MlsrQyR7Rk45'@;
put 'KmlKeTZIN1BqfiFCVVF6JUZ6dFAlOkxaTSs2b1dwaUZMT2xrQy5Pd0JOdCZ0S0FWe3QrcVdxKUNLJHB5PFNvVzptd29XeTI5KVsqemJuL3hCIVdoWFM3NHlALFVYUGFiYTtBZnZ1KTRaPTBZVyhgYkt4KXlTSHRXRSlmUXQmZE1KQjJAb3Q8OXVuRylYeDR4TilFeHNzQCZSXXc3Tm9mOUREIlAi'@;
put 'X054c3tpMUwlVzNbNXhtR35MbEd6T003NjVgeywrLjE7eW5HV1NsQU1AbGx+eT9lR1NDRlB1PWssR1ZCV3ZpfXsrd1h3Yjp1ZkRPRypbYzxxeDcjTm1qO1lSfCFiKXsxLEB5aSV5L09fW2I2SWtWY3k5VnRfRmIpcWYsTzB4Nj1RJktvTz9JMkNBdVpOVlQsdWJSSEt0aU1NSUxMenZJSGpkV1px'@;
put 'UElrUkMjPykzNTdmSndnRjQsXzEvdTF6WW1GamQ4ayRZZzlDY0RmWHg1bn5JZGBeSDApZktlJUlXTDBOSz9jL1p3M3huN0l6bmU4Nk14QiNMNzpaeHNLK1cpVHhkPkBIfmh0IkZobFlPQTttNDNiTkFMPU59YzMyIyJDOExgZEtIaEk9UWUlb1dYWm1dfC9uWkdGbWxlWnRsUzs7Y2B2UjJYUn1k'@;
put 'MDQ9eVQlMTBJfmJJRFpKKzFELE9Me2pIQDQiYEhQcSZiMzc3JTV5Ojcid2d8bTBvV3RjJk1iXy8uYyw2czMuVGQsYEE+eFdVSUBjZG9tPDBWWSlFJm8ydDw0JFV5WztPQ1JrSCl1fGAxbHNjS2A1P3xSPnVOQ2l1bV91Vy5TWmAodiMuTzxLfURaJnR0TCo5KXlVQ1paQSpIR0tSYl4vPmhCNWd0'@;
put 'NC9MVHE0aVc1U0k3dn0maiphOWFjfDJwMSxzYFhCRT1+NkMmV2JwZC9bdHExe2R6ZDJ0MlJ2NXM4Ml0wRVRLYSR8ZDU1OHV8X0JBVSIyXV95U2FJTTJHO2MoIkF4eVl8ZVE7Ji90NT8rVkhTNUhCeTR2Vyt1MWd5Sihwfk02NDRjI1drdHp1TX5tPDY2R091RTsobGxhOnZpYXw6OUdRW2MrZXhE'@;
put 'PEUydH16SD9bQDojMlZeblAyUWo2U010VktmYiV9TD0rTTxDI0dvUiUjaXc4Q0h2N2hOZ1M+dm5LTFY1UVM4SlF3M19wbWdCdmxxTzIheTo6WTdkPz9JbS8jek9xeWFjTlAwNTBHL1JkKTdXLyMyVmw1Q0ZmJjhFRG1Adj9XUShhJGZseURBUTB2PDpgWjZXKVhlbzd1c01jWHhGS0tYNjRESFJO'@;
put 'TWIlZFhYWD1MfFdTJjZTTGVmRDJnT1BaYVo5TW1ZdU1ES1s9diQhWnhOW1pEWkU+IVgsajllSXhadEJwVnNvN3V+dGRaPzVYe2VDWCl0LzJMOjllY0xmZzV5NEtgXlAhfTV0Y0BwW35EJloye2FhaFpvXmBvIzdkLDojUnReY3FCK2lMN3AuaC98ekZ7MWwiRlM2MikvbFA3c2JfPk47UmovI1Ek'@;
put 'NEUxNnMuLzo3WDcrNmklODFsOjEvYHw5OEVVNXpKUSIjUk9HV29BdiN2RUouQUpeUGJubHsiTHNFJjlYRUdZUjkodng2U3VSc0MjRFtgSTh0Y192VmkiVl1XMW80Q010V0NGJTlYYElYRGJHW0c8WVNQRkJBUSVOd2x5aTdYWTQ0WXdXYXBBKVhZREc1ZzxMOnFtT01ZJFc5RTxoW1kyUlglOVh5'@;
put 'P3BIciErLF5QdzF+WWU0bU9je2UyTF47RlBCJFMwTH1LIUxAJjJdRlV8MjJMS29VODpVTG9OTW40OWUpWyhhI3VwJjQ2b0tLQFhKN3xlOGhTMGRGQkFNTm8lcG1UNWo1dz96alkmMmhDJUV6cT0qamdWbFgySFtJRzhETGEoZCp0KV0hWiJ8SzY5ZUFEVUNhKjskdVdmcVNhPkJDelBlKyJ4PXo9'@;
put 'WjFXYzIzPWsxP3wmSFBReyR6WCUmTnJsPSlgcGdNNltRO1kpZE1mdG5aTU1KW1FKPUV6elFALkd3SHwzekxRdEl7RUk0a0Q3b2dKTVljXkdvPzFCMjZpZltqMS5aWy5HO0NNaVdLYnR6OmxCdytzZUAvSFBBRClVTFR3V0dHbTw2dW1eM3pDSih7JiRdQzkocU9dZF15dG9aO0RKd1dRbnZYYUpF'@;
put 'RnB0SEovM0JBJVtKT3g8dlRMLE5TfEkuTzE0MHxVVEVHYmxHQDFYU3M4d0I7UiZmR3FjflkyOlkrUXZrfTgwXWNNQmFWNDRjWSJjLEVnZHZwTWNnWlZhN2trc2gkQk1GI0xJWCk5fHdNTX12VGMpL09FUV84dmdxK3ZGYDFBZXZAMCtIbUU/YXdGeGQ8cChKVGBxOlZHQ19DXkNKM3pJcERePm0w'@;
put 'SnNDdSUkbGhjdSlrbGBqZ1JkdVBULC5LZU8xZF5IV01oRWRsP0NJTFZTPk9yQHh4cT11Ingxe2UveTIufGVXLGxUY0dBIz5GbnUpP05pXipvQn5iRz16MTwjM2EsWFNDN04lKSQvODRaYjlGLEcmVGVjQ0lOSiZGbm5xNm0wOGpYWE1PKFFeTFNoQipjcWJLSmxXLGxEYUBTJkJJRkRxKnlCRndH'@;
put 'dFpZRz17VHZ5T2N3WkBJZDRoWEZReTUrRTtDfURZKUpWOyp1VkpbU3Y5Qmo3NjJCREMweEQ8MGhQaz9BeT10VG0zaiZyT3ZJU29iLCwuT24iITJqQ1QsIjB5blIpY0JUamlhJjBqZ05CPld6MlNeTkVNKVJEI3A6aHZ0JHk5NFQsXU14dEVacHhGRCFsVkJ1NkhaOld6MnkjMnVzbiU0UXNnRFR6'@;
put 'TTozazRqYHlWRHNNfDFzU2VESWI4Lng/WSwkU3ppIi8hWU0ub0dVRSk0Jk5LeUskQmxtaWsxcSlMLiF1UkI5Y3EwX2JVdmk5MmJHIWxKKnQ1JT8/czB4VW0rbVphazpDcllaJkZGVzBsQlRtUkxPbUozR0d6dEdgTG0wSWF4SyR3NHlxUHQmZEtpVUlFcjY0R2FULDVId3RJXkFBRTo/akh5T0c3'@;
put 'V0R0azBPTnYockVJSUZaNnFwMzcrXzZON3YsTWIzSS9OPS8/akFYKFBuR1VjfjxYI21VbkJwWmQsLikhWnFCSEE6Z1BNTUV7Qzk0KzxiMHB3XjFGTXNjTGtAST1CVSVXRyxHNTJmVUxWRCMwOkc5Tnc6SHZEbzZTeG1xVCJlJWZNbDlHL0l3NHpwRFYpTnpjIyNGVlc1Y1gke2pXODJYd3poUHw0'@;
put 'flhLQ3R0VmNNWyssYjtnTWtEVjZASEFgVzBOcCJwdyJ8cThMdnV5WEAvQSFhMCQ6KkA9SiI5ejl7L0x2LixjM3EhSUklO3Z2PENVIkR+MWRhUyMoKEJyU083bzU1WUNsL0xvOnQqYS9ERy5kNSU+SWZ4NlY1dFgpfls+Q3hwc2YxJXVJQEBrU0o9R0RaWXZQckZtIWxVbDkqRW5PNyluZSk8cTFl'@;
put 'WndSenRaNHNtZTloeClbQGVuSiZ5YmZbTHBVUXBZUExQZGpPR3haaEdLSFEsZTd2Rz5sJExEbFF1dkVzIzpfK09vQVNBO1hyMj5oPk1+MTJYTUtmenduQUFwKVBwcE0xeH0kTko2dXh6RGZOKnUrUzZWYlh8Lz8vaDNhWlR0biVEITZEaz5sS2lvZyNDSHtMP2ZaLmIrNE90PXRgIypxfFU0KGRS'@;
put 'ZXNeQzhScHdubj5sST9VT1dlckl2I0UpbWg3QVR3WXAiSlR2ez4rMjp5UlBiTFM3PGlHQT5sY3RFKnYsfDlXMjNrXiJzc3pEVnA4andNaWVvIXtrQnVpPSg3bD1iUD5sLihvNCVYSHclXiRBcUZaQjhpJTtFKSU9Jm86VjEpJUYvdTcrYGolO0RYRSovb3wwW1pxRiU6L2wxOjElN1IzJj9YYTdl'@;
put 'cz5CKVg2eShYazc0SiVXUG94TX41aXQ4X0QicnxtImAjIjFeWDN0N3lldlg7RyJRSGswJGNXVG9hZEc1UlNsLjxBZykweV1ONzRKL083ZE9pVE5qZV02VWlWI2RZbDloRSZGeCxwZDp3OSE/dXRWbTJfU3RmJGprcTtmPTNrWVYvYTQ2ZzIlN1IrKERQO2NALzpXPmhnSnxlVEY+bCtXO1R2LHwp'@;
put 'fkw1d3AhXUFGKTpnVkMzJVkhL19IW35sNktneSVaWjdkOlRYOTVmbW06fEI+YV1fZldsNSI4N0RWSmF3ZXRocEcvcHMqeGRLLmdsQ1RYMS42Q0NsWk1wQkRQYWtnNSh4TiZNRyRtQXdhaU1AYEtvPEw3Vy5UQC5BREdWSHBCbS5VfGZ4WUFScEVMaU8idlp4dHVRZDlGJnRhKT01flB3OF9FfD4x'@;
put 'SVBPakc6dUlOdkRqZDROTnZhXTVbWkZtVWBoRFIyKzJJMSVVR35qZ1NPQkh6ckJwWHRCTSwyRy9naURHbyxIXV18L0d7V1IkRW5aXmFxSkA+L0ltQzA5MDY+VmFDRW9OSnFhcjJfeUtTNih9RUhbUGlKVi5rS0NsOTZ4P3ZlNXhSNTRLNztTRUh2VlpkNTY0S1hCTHJ6dmtrL2l+ZUxIO3lnXXs8'@;
put 'UlphXk95LkY3dHRFZ1kwSCk3QXgvSSVCdUxHSyVnYUFMVkZCcTIlOzYpV3VgP0VNcEJDTS52NVA9Ong8ZUcpITBhNXU9Y3pMNXFZTD51YCNNWH1VNV1+RmltejF8KDxmfWg0OlBdWz0rRig2N1pwR18+fVhOKixhbDk4dik0Pygha00udDg/ems8UVRJNzBgQGpbI3goVUQhKFtGckN6IV01YCNX'@;
put 'bDNKO1t6WExiMmk4WSI5e1J2WH1mTnsrPjRJIkxjQ3RvYStVaVlZaF0jQkliWCVIaWEyS0tGd2ZPek5lNCh4P1RMSGVWezI+U2dBe1hOQz5lOzpXTiNKPFNsUkkwckIxdD19RkI9dDpnWE1wTEFePixfcTgzKFNjMzVMeGR8PTBnRjl8eWB2UjlDRVpMTz5WLCtnaV4wNklJc2k0O3lneWBOY1Qs'@;
put 'MEdbKH5lWF11dU9nMEFUPD9UYjV3bX5FfUlpdHF6I0RlXUA+TzwhQlRtOGNObzwpX3IpZl5tXSJXJkVTLk9iQX1BZTxwRlRYalApQWp6QX1uN0ska19FdH00MkVWSlFjPWNuWFFEYTRhLjkhY3VjMGFHZCxqfDFCKC89dTohJCNHaF4oOWQ4I1FBUEhfYTFkOiE/T3I9Vnd3RyZBLmg5VjE0cHVV'@;
put 'LHxkQGg9Qm1MZC9INU4xWlhDNm0wZ1hOant2YTVwdT8+e0Yiak9rSTd8P1s7YEgpYjo1N2EjZ3tKYkxfRDohLGF9LzU3R0omTm5MTWk8N0xVVSxuTn56Nls3blZKKSQmRHc2anQqWEZnXmEzW0EzO3VMdHclM2pbUTg3anJhWXNdfEJHT1NocDUzaVMpQ1BUbUdlOnk2d0thKzhYdkxBU0IxVzpP'@;
put 'WTU6Ikk8VUVFd21lZWtzfj5hSU0zaiMwS3Q0S1taQjpLQ3huUGI9VGNJbTwlKFEhMlI1RWh9MUhqcFJJUXc0allCYCsuRHNPdCNxbjhZS0AmbGhYeUpgUXd1PTdBSmdyP0p3ZzMqc3pKVGtMXSZJMm5FZiN+REdkKjcqLFUsI0ZidCEoV1hxdV0+aStOQkYqdVltPGhYcExGd1hjd0lpTn4xYChv'@;
put 'T0A3KmxYZTpMdUkqSFEoTkJAKFQoWUduMFFufEJsYWhMcHVoWHAlZmBsRUJlXyt+SWZARk1+eTtCU3VBP01NO2gxZHw9WDJDb1dCXkRHdmp4V3FJTWljWiRYUWEreDA5eStRYkx7Y313NW86IVcvYDlRMiU4UHUoTjRjdXB6M3ljQzF+ZEo/JH1GSF50KF9ueDVjZjgxXn1XJVpSQ0Vrazh9IXNW'@;
put 'czQ4ZFc1W0RjfC5vVUBsUz1CQGpPaUlOKFtMN0pYK2xyaFZFdld8SyxnVXo2MUQ9a2pgfmBlT3RSN3UhY0AqWm5DJEc/RVRgW1E7PTphMmlbRGZjMkZvW1RTPzhuMnBMJEdqXjZ9azAmLkpwPVl4Py5GR35BdEVVeipPbUUlOllCJDNkJH5XN2klVE4hfDI3VD9PQnt+KSNYQ1Jme35KaWR2Km4/'@;
put 'fipINEwlKG5+ZGFjZXd+TDgoPVdHSW9gQ3svS3gxRWFQTjVjW3h6clEvWF5vbjN8VjMoR2IsWFtWfjN9XnlkODBLLHIxfnpvQixJSkIjfGtjTXYqdVB4WC49Q2dLXSk9fUpPcERPelU8VltzImJfQERpKTp0Pm1Zczs1dC41Rlh1QzdNT0FLRWRGaCNIVFcjTSM7VCs2XVFpOnl3Sz40LnNKVk8p'@;
put 'Zk10TiVgO3YrUWd5QUsjd3wsdFMhbGNHOldfXlFKeGglRVIqJihKWWR0VU9rfko3MClINmJFRkVwSU8peFl9QGdOSCRuUHxITjFpTlElU21UKylqOXcvYWBhNEZubilOayskVGxuOkxWMiJbUSgjbTc/fj9jXUtXRVloVkhPIzJaQ3M0Pn5ZeihDdU1ocCNuTXY7fGxGSktXdm1dZzQqbX1NSFB5'@;
put 'KnEpTytCUUhgK3l5aVNIRyFIaERaTlU4bmkiL0NZL1goaTQ6Yj1Jb2cjWGxbU1MwVztKS1hpZ2dnVjA5dXBudXZNS3xxQTxEMVp1MDd5JDN1QUhhOUpjU3lhfGJ8PCwpKjB3ZkhCLzwkY29mLC4qSSpYVl8+LlFxQmJLc2Frb05sfnZPekxacU1SdCMuUWlDP3BML14vcHBaWlErYSJuTyIiRm5W'@;
put 'JS9dR0YwPnFGZjR2UkN5T182UUQ/VGlaZ3t9V3NuTyRzSiFPRkJOPl5DNzNldjpfKTk1RTNUNUUwTX0ycSV9MihYMkRjNyg5SndEVjR6QVUqQ2ZoTE9AP25MbHpnS0hCTktJKktAZWlUaVhJTF1WIzlCTXNVL3E6WFk9SlZfMCtnZ249dXg5XSg1cnBbYmAyVDNpVWBpKVZmRF9gQSk5c3ZOOUYz'@;
put 'MzFGcV8rbjJXQkJVdzRiaCsjP3Q0ejhZU3ooJmU/OD0mR1Q7LC9AeDFsTGMmPUcoOEVjYnYjX2cvKGF5eWF1JG5OJXkxPHhlWFJ5LnlUeGlBbWdqZV0icypNRF00NShRM29mUWAqKGR4WiNASWkoYXk9SyMqbV9UdEdCdk5NUl1OaUtxPlE3fHZJdHNMJE5iWGlxYVY4cjAob0Q0RihxPkttQytf'@;
put 'emM1STBPQjlDRXo7P3ovRjVwZ2IyQHZ0W0pIamQ1K3FpcUB7NihEW0B4fXlldXBgWVNQLEBtc1VCLzp2anF8ZjApI2gvdz9WRGY7Xy9uPENqRTgoYkclRVEzdWFbZz1obSsmNS9Ee0RyL0EmPDNVKyFaIXttd3ZqNSNtPUxxaWEkXiI7OHxidnhbY2k3WzlKekslVXIrKjM2RF5bMUxHIWBzOjZI'@;
put 'PnFfV3x7SkJBRkcwSC9AKUUuVGxaalF6PD9tLHdlOUN6YTdqTyZDY1VnK0pPbWJldiUiJDg0TW1tQHohWjY9VDdqKCQkMz9gPkdGN0djd21WbFlPXT0iR2g1Q19MI157TmR9UmNoMld6eEBsTDBaKmMuLlFfNVluP3s0NWtoSVtGQDJ+Y31KPko8dkk5PDcraVJ5Llp6YmI8PXk8RVNDZT9vNXRG'@;
put 'V0lmQiokMyMrT0JLMjRSKE9NM19yMlddX3pEYXgqUkJCMDlFVnJVdHR0OkRQTnAjOVUqTFJyY25Bd3tUMklDdF5ScXR9RXxLWXFgeWRKJUN5VUlJcyZLVTVnYFRqTDY+bVhPQU5aSV5hKEp3NGdKeVheYGY8cnJ4Ui5ka0B2fnkyVChSVSNNSWcrPzNHaGFrJTVyOXQ/R3F6NF0yLCRGfF9rLjI0'@;
put 'KilbVlk9TnouZGxYV0ZAKCR9NTNnPWBZRGY0Zz9ZR1Z4eHxOK2pXSjsqcn5IciU7JD0+KmZJOzErNFtlQCN1RkoiQiRxUntRUWs1TGlLPlhIbFt6IXlRaUVNWW1zV2s3cHhuMktEQjdqaD1lU1ArTk13RGNCP0RfM3xMRDcvYkBKPmAmSzx4OnxeTmp1bFZ8aVlXbUI9Lls6I0ZbWDBHcWJOYkIq'@;
put 'ZUJvTHQ1cnViJSlGalE9RzJ4LDtjVVcoZ1RiXiIoU1MhRDhBMjMpQXwoPVdqcnpuW0tBazIpTVAwLHxPbU9OMk4/W2wjekR5YmxCKGhnVDNkdSE5KSowI0RPfiojUXtIKD8sb205cTcwV2loTEJPaEhOdV08TCheJSU9SXslYEpBY2tRQCZTUEs/VClBXjxFQXYyOTJ3dUBpMlhAPlUhTVNuUitt'@;
put 'WFV1cU1UPCF2dmNBKzBrRjddX2d+W1FPMj43eVA/eHB0bDM9ZzdwcmNoeFdeOHFUUl4+QEo4S30uIVheVDNUc0VWfTpDV1JSUjBBVjMqPDN2R3ZldzkrK2EsaXpOdlFyPzpiVFRXSzhkPkt7eFkufld1UzlnK0w6OUN5aktYQ3Z1SkNaY1JXOjdIJXl1cHdTfGdaTUpNIXdkeG5HL3QqaWtqYW8/'@;
put 'dnUpImdLa2xba3UvQDtkWnFnPSRrLnNYLjhNeDdXSi96WER5bmhTe1tRJnZ3Qn5XSFZ4RlUmSTc0dzkiJFB8K2IsfF52Y11feXw5TU1XfFdOX3hqIz0pYTJ0K3ZUOkxFXVFMU3oxeXFRY0opU05MTWs4I3Z9I0V1Vl9NYzFbdyFYKDdWYHFLS2deKjRaL1RFWTovQE8kSWN7KWdWfFBXKSgiIik1'@;
put 'YHxEOyY6bz0qaSosZjJ6e2siPXdFVz5mcyF1VEU8ekJ1fVskb20hTD51Y3c9Y0wiWyYpZnBlImo5VSVtTnh5I3Ijd3x5NDwqeDxxSXdkaGxnOSg6bFpMQDFlYDtqa3pZSXdBW2BBTnNzZ14mKXdCMG9XWTppJG1RaSwoLHs8aTMxcD12RT5GN0NTS0xbZn1sfkszXnkqKygxXlI2SVAoN3V8Mk9v'@;
put 'WnMjUkBUSl0lVGR2KTx7dGd4VnMoIWNzdElFeWAxR25qTiJ5KUJaIShYbXhyVHo0I3FoWmBAdClgV2FHWnhTM25zQDRddnh2WiI7a3xGcmJiPSJLUX46VDR9ZCoxP1lgTSx5WHJJc3lvRHolL1t6X0EhQ2clWGJhOGFmelttTE9aPyR6WUJaeStfSm5CV1E/cFgvdEdZJGkmOWpDPGJYKUJ0N2Nl'@;
put 'fFBNfFEqdl5IWVZwQmBFPkxDfnpYJiQ1UFd6c3ZEYTApcXQ4OFlndUMzNXAuJXJ0OGE/bTp1cG9jUlMyM0NKeXsoZ0N5Yi5yUE8rPTxyJkNTRn1XPHh9IltBR0NrJUJPUVQ5OzB2NEdoNWthcjoxQF5fV21dO2pGalk9ZXtsczZSLHxzK05TaTNVZFBYRyJOaClzdihNTmdYRzJ3QSJ9Q01nbzRl'@;
put 'aixRaig2anc9KGNVOEV7fFQ8Q10pWHxxbUk+WEB7WXY3blBOJkZPTGA5cD5TTjxxYjQvVktXWlp6PSpyTnh0Q2NiOk0jTHNKRkIiXmRsKW9dX3A+bilROjpYWUhwRlhHTD9LejssKUJvSWpVKzEvQ19GezNqSyVnTG1hK0ghSlU0R0pGQktMREoxPUh5Xy4vUFc2TSlpR3xGRVhLey9ILEUqWEg0'@;
put 'RkpaTXxgQmIoY2skVS81YUNMTW48JW9MZitLJFRmRGlIdlJQV2coQHQrV0g+S08obzU0bkIjTmZ3dCtuNkpDW0YkbXJpYy4yWH4yNkN5RntUbzJFJjBuLClJTkpWY24jLGUmaCNkLzZYXWQkN29Ne0dNTXtAR1NGImViZG9LV1VpP3tHaH0+T0BQRV1mY3N7cjE9TyNrQ1JLVXdtW0FEOFVjNHtS'@;
put 'YkVZZEVfc1BTb0ZgJDVmLjtTP1h6WCIyeSVYXnNHJTVFb0l0fSVYejlfNFUqLlFmQFY1QzlxYXR0dCM4aitjZ0ZGO3xXQ3tKaWVtXyFfWHJ0RH1DWihgazVUKkNdJTdQVzBPRDQmd3Q5TEB6eUIiVC8xTndwInJTSEw5d3syPTV1XT1HN1ghYVlmJk5iNCtnfl9MVlhxbit4TS55VjdsbjIzL3gx'@;
put 'OSkwfnAjVmkqXXpHT05EZX09fip4K18lY21LXUg0T3xicGNZfEshIl1gIktGaWZwSWgsUlIvLmdXQT80aXxlKDB+RlBLYiwyYmZNTytpNy4iaVVPdCpeeVd0JV5baXs+bjUuRXRdN2ouZEgzRmhCZHFtSD1fS2A1KSUiSERPVCF0ME1dUWc5Z1piW0MpXnd1JEdmWkN3dURtbEJmZXcpdXowYStx'@;
put 'VCM3eUZxSTZtc0tYZ2wodGFgSWdFNkBuPllOQnROanNpUnlNZTVWWiRQV2xbQyp3QUlYd2lFRU1pNDR5alZMPzU9PUg8QCVaYU5qMUF6YkpiPGBNUFNFYkxvOkl+KjYkZjl5cS9LNmU+OyFqW3MxWWE4RSUvfU83RSF0XSpVMzZrIXBdLCZaS2V6MUNLPDl4aHEycWMmJGVzeU1eR3JPRjZlYT9R'@;
put 'cHkmK15pVyNhJDYrPVsmSHxHMmxWd0tSIkYrd3IkPn5WI1RTcVNxVCY9VjRSV0l6ImNQPVFXSUI+TD5vPi5QOT88XzVzaFRhMXx6d0tIRnFPcVhmU3BwcEs2WlhndFR6VCkufm1XejBnRyViP0coe2l2UVNyfV92a2JNZDgwPTAhfm1fY3NtcmlLcVhHazhFLkcsdkB2M187PSt2e1YuVV81JSh3'@;
put 'e11EMCJ+O31RYDslIyw3MEssO0AleTpEKTthSS9sOEheI2NnXUBpPTd9QUZLViI6KzdRJWolY2dEUk1CYnNiX0E/RWBodVp1WisiP0Ngam5lPV1TSjkmTUQrJVB9eHlbImBufHJnMHZQK3NrbFZ3NlpdYn5jQks/UHsuZ0krViMqTGR9YSZLK3grcFN+ZloiQSVROUsjKzsyfmZrJnJiJi85NV1q'@;
put 'VHtVL0kxayZRbmlUPDl9L31YUXpycVdAS0hBam5+JChyVzluaF1OUGV9TXNHe148X1d5bmh2NSljfU03NV9bSmgwNXNWSEZxTypXcmlrOFlnaU9HSSN3dypOMFlnOU5HSUFkcz1IalJSe0k4eH57OGdzUTc1QHBxfEEhWHpPQTx4V1BYU2JKPl4/Yj1QZj17P2shd009USxgWHNpRlAoMz5SbDJT'@;
put 'NT8mbUE0b3dKIT9HWTQ2ayoqbitjRXxUP0c6bkVhYT8oTkF1YmVnWXI9NT8oSnI9aSkmbS5ufS90JHx5ej9vJElwWzRxMzpuI0xOVVQpMClNPVlBKz5oSnBSV1heQjJ5IVJIQkswP2BQKzskfERIaTBITSxuQ29HZy5XejBnNiNnfDxMYGY9OCVFPW9MZ3tmMThybUxtbCNrbV53VyRjT3tXdEkq'@;
put 'RmZMIiZSOlszc0AxTmJSKENPXlN5cS9US1lMUUBaRnFuR10pbSVsUiFCQVk0ZmxhQ0Asc0VKd3BJeSJENjNzcndlbnIzdnchJEguPnAmXnJbKT4mKW1WZz1pW18lO3s8cGNtemRxeXN5fXl+fX1UOWksdlJtTS4hSkoiVzxKSUpgQHc5Q24jI0R5K0xxKj1VQXs2VzZCXSxEc3F+SUt6ak5fT0d+'@;
put 'TUUjVEY1anolMzNeZXpvfWp1L3QyUk8mV3tgQi5Vflo0SDM2ZkJBZWZ+VzIoQX5CbksrVmhZfTJZTEx5TU1+b0hRZ2UpZC9CWmNVSCY3M0Q4NGB4SVJ2R1oyRitPZVIiPHd1MSZpN0hqIT1QKW9bRDVfUll7Yk96Lk9QNSV5JmksYTVCaDQ/Xn54b30icC9JeWMoTko1PG95YyYkNzRCRlZRK35N'@;
put 'NTpxKTZ+MkBucipjSD5uaip+MkE9eDt1VzI4cm0rbGIpKG1MZ3w8emxxbSZSOmlkO2dDKU49PyhKVCZfPH1tRlNdPXg7VyRYPTI4LCtiZX04O3lPZ3w8bkolRWxHaSFAU3orMGJhb3M/V3Z4Oj19I3ckR1Qic1dwfSYzS250YXhiO012en5DY1ZRMGVMdjc/byZLTHZ9OUQ6clpVRjooYi91Q0dK'@;
put 'N1pNWHduSEx5LzpGbGRpenFpXkpmPVgwOFR1TDgkQ1F8flh+WENxT2JVMkoqYlcwP0VWPztoNWAmODBAU3VwL05KOCl4SVIzKj4/W194dX5ESXMoTnchVCxfJTYqfmxZcihCdyMkfHwmWFt+L1hpbj9gMWUqfnp1JE1PJVdHbG4hQ18+ZnxAfnJtaW5rfVBnfHN6NCFUX3xERVt+MFdpbi5gVVsp'@;
put 'fkpzKT50WzltJH1tRD5+I1ZpbnM/XkUkfWA1cmpUM0h3c3ZQVjhpNzMpTD1SZmdTTmY9MmheRT9PbTJIM0ElVkVDb3NPdklYQntRYj9STVhxLD5KInk0fkl6dGd4eVpiOS88UFZCUnJPV1QiaGpQMlphbyw0WkVuSVtuc09mSXxqNCR6ZltCfDVoaEZCZ34/dzBAdlhtdllMTlU3X0cwMU4yOiEp'@;
put 'RXIpPl0pPTJ0K0B+UFZpbm8/X3gjfX09NF5CIzBAQXUySWJaOkBFTShNTzFTTVEmLjU8diVfVGs3a29bN1Jsdnorfn4ySmIuVzBdRGFTSi9dY21UZkomfVYlV2guSVFrNX5NTjF5UGV9S1swe2M1UCMsSTRRW0hkJkpPayNGdTd6RjFvdTd6RkkjXXM2MGRhYj4veH19VT00RUNiT3heOklJQSJl'@;
put 'Mj04Y1RCI2oiUmFsXV52aVRxdnEhNTc0Nz4jLmAyMUN0MjxuOyEyKlNEa3d4Xn1MLkB+dFAjM0kqX1ltKTxPa2VvU34rLlRNLD91SVIuYz51fElLOCxNTzEhPFEmJlsrLzVKXVN7cy8rPjVOZFcyOXNVZ2FvcXRYdkkxXj4reGZPVXVePmQ8NDE/Lm9bQjJCOEI7VFMzYFBIS25sdGVlVltJTWt1'@;
put 'LlpzcGpJM0k6ZTFVJjM3KU0sLHUiSUQlJmBfWWdwTSwodVhSNm0yMmVHYUo6eFtDQSJ5Y3VgPnFyNTFaL15pKzlfVXMjRlk8PGtHLldXaXlnPkx2VjcsSkB8dTU8PnZMVTJ+SyJGcFt9X1V0ZCsoK3hga1lYNUYrQyUsfEMzUVJqVjQvPVtgc1JbZCsocSJzNnwiNyMzdjVxVSwvR1smYE9OcU8q'@;
put 'RyUoZVc2am5WVkdvXTIxPy5tUiskcy9GWiIxbClNNkV5aFZVRmtFWDBhREdTRW93P2Yub1tIYT8ubmtRWCIxZUoqd0oub1slb30sdHk+Ljo1dWBfWXU+fWM6TU0uXTZPSkZYelFePzVrRUFYJjBFdVMqPzpoYUMrTVcqOEhORy9PPmlwbkddaCMyMV9FTi9Ad3ZaSklSXWBjSGwlajBNKD54WTta'@;
put 'cHdEWFJdPX5JSyk+KSlmZ2B9KS9gc08zIVQ8fF8lIX5NVHIoZ3YhVCFfSEkpfkhTcihwLj0yZnxtcj9zZmFfUyQwRF5yZ1J9MTBoTTRHS3pfSXYhVTZHOV1uJmxPIVghb3tfSSxlaXYmXXQpTzx8dDJha0YlZXskPSMlOGJFLGY6REg8bFtnZSwoNUIvfn0jZnN+JW03ZFdXOF9benNUXjdNe3w6'@;
put 'dFpMUXZJVkJ+emNlfkwhe0gvYEl0Un4jSF5LZTN2KEBOd3xoMCh+RjpGNzhgUnFyTEdGWEwjJFlASTFUfDZIZX5kd28oZElobk12ZmdxP0hJanw3MFdXKXBrJTE/ITslfWVhSjRKbStvTy93OXJ8YFMjcyQxUXFUXSs7On1VcmgoQXhRcXF+cXBmX3s9I1FFfmI1UChGe35+ZTApaGs/Tkc2fjF8'@;
put 'ZyhMLG1JfXozWS59Ryo5fWtHVygoOmVXc0EvdjIvO012P2I8MXNVOlE5enNASWooR09ScUp9QHQwfFApIn1ndCx+LCR8fnJpYH5LYH5+XXEiczVWdFdbRl1YP0Q8Lzp7NHg0eW9hPC9GdF5rQ0A2SGkxN01xKzlHU3s9dSg+OXEicy58VXhyflsoPVFwNzNZXXM0N2VXPz5mbik2WSpdfEI2aH47'@;
put 'dTdUfmwxcj5CUFEsRC5WejNraEI/PWVqfFk1c35yPCFoJE1SfF1DTGNbdEJhcX07MFRXcl1mJGxzYFpURUZCSiZdK3VEXXNuNDJyanUpaGd+PkRAfjBWPFFWSFV4dV1UPHV+a0E8c01nQkhUQC5sPFE+LFVCPz9NQl1gQUI1cy95UyghYmB+OEx1KF9AbzF7fXc/IXN4Z2xJYndCYUdAYjxWfCpN'@;
put 'aCh4PCZ8Nn0xKGlzcG5ncyp5Nj5XfGNfNEgic090KWhSP3s7anxEWWp+OkkzaF1PRU9iOjEhcV94K2soZWAoOGRzOEZjcyZ8REU5PyVDYX5QZH1+JU11KEpbbkl9fXZpI3NQbWxJUXhCYTB9OkhkczN4Zm4/fV1wMj5rX2NfSyVISXgqb0Y2fUhDZ34peCJ+fkR1KCt7MFpUfC41a3NaLlE0d2Nk'@;
put 'K34oTE06fXE1bDFYKVVCS3shLGQoI3kzPlBjUXxAMiloWWByOHF+aEsjaE5WbUlZei9pe3NCRDV5SHVZKk9+WjhsMWQpVUIyfUhDaHNAaFMoVGMycmt2KWg8fj0rPX43d21JajpiTVZgS15sV1QmNHkjdVkqXnNsQyUsM2BkIi59XyE2PlZ8MXJjTS8mZltvMX5+KlN+fm41M1kyfUUqbHNnRFI0'@;
put 'fSlPajRgbHElcz9FJSxtPzNBNHxlTiE+UmpRfFl9cy9wc3NjaCgzM0ljL1kkdEkuKk9tfCwpVUxzdTRsPX47IShoOytiOClfNDFWTDQrJGRwc30+RE9Qe0p5bF8qdSl9KXNuKCszUWRWfWxnOzk1ZTwyYUMyciFgYHtMTGRYNzU0QmlzXmdibWI5dl5OIm5OX1YpRl9oOFlCYFZXP01kPFpefVdM'@;
put 'QmY/PEgvU2dBZ009VlguMkkxWGd3an4/Uyl9JF43NjZDdEJxbj5JNl1NbGhWOXtUK19SKlE5Y3J0dTRkQlVsKlJkbV5waDd3ejUqI0AqeXFZa2AodGo8MVt7REBUUlg7LHNFKzdoeC9tdEJIKUhmcF9aUkdgPWtnKUBUJmdWfmNBXWp2ejxXQnQ1VisqSUpxOTQuLzpsUl8vLzF9OyZ0U0djan11'@;
put 'U0puRE1dbmJtdWVKPElSMiUiUkZnLjhNbnJ2TX0yaHRwRHdKSFhdRlRIeTxKTG5uXUl4NHkqX1hLQ0FrbEcsTCI5R1F4aXpQakVDNlRPMEZFc1hGPUlkTTxFJn1ROnNQZTJhfHxFQys+YWtrUEMhbDZMUjUyRDVCRVhIRV91RHptOzlNV0NxL1lSWlo3Vnx9XjE/Ll1fNlBFNEw4UEcxcUQ6NWko'@;
put 'cjZFVjw4Vn00dX5rVzVmdE5XR0U1YH5DOjtWandvc2g1WHg8UTlaaVU1fWVHXSlsP3ZRSGA2Tkpsa044Lj99cUxAVkB0elYhQlU6Zn5kaXdbeiFAaiRDZkVnX35sW3x6MF4xQiJvZ3VHW0xzYztPIklBMzcrKShoSU5SckJmRCp5VyU/dTpHc1k3UGBTeD17REFHb1tXdEo0KioqYGtSfFJ1KFNe'@;
put 'Oz9YfElNWm1vTX5ZRDAjKUNHPT57SlsqcGAvWU45WE8vdD9qdFtNdHJJUEdEaTFGaVRidEU0bzF1Ryh+MnosNTp1SF07Q2pQISNQJCkzWjxhRlZ+UjVCLyQhKEg1YyYxRi9VRClvYTRXeGVPYnhkR2R0fiZUJGZsMzMpfUBpezNDSFhyVStWb0NIWTQzLipISXdmMkBfPHQqXz5SRWM5U3pkKX0w'@;
put 'NF5WYDp8TzB6Sk5WTE5jIyFxQDh3W1ZhMVE/PHcxaFBwW0BiRFpMaHRqdmBSTVhVRlM3VUVMND1DR1tKUSw/QDFvfG4jL2dGdk0wY19KQipgRlltU34uNS87RmhBZSp1al0sKitiVl1oPGhUfGA1O1ExLmxCWXtHSkJGWVIkR3F8N1ldSTQuXT92amBqeXUlfVE9RzZpI350ZUxFLEx8NSRHJXxV'@;
put 'YmojfkBNfS5TUTRZYGB6ZCY+Nll7cjdmY013aXYqfkNEKmZ9RFgjOlcyaX5hLy9WJXVyfHxiJmJJY0hiNjwka0l3REtAdzlHJitJPS9WIzp4VnF8djZzc2haR01LYk02aj9KIVFoYlA+X0dOdnQpUCNHeChGXiExVHVRfnJQK0FVOVthRFVYPnM/REBBb3JqQGF3ZmJYPUNwSXErLGVBcUNqIygl'@;
put 'cngzZyV8VTtpOklXdUVbUCtIXygyWzEiQmpCPTArLzBKUEdZUj9+aUhPc3JCUUFZTFQzeDZiU2FDIV86djZTV1NvTGBYQXdCIipUK29xKl13QiI6Pndbd2Y9U2Q6Qi8rbExnNH5Ua3B2KkFqRGFIMiheJDRwYlB8XzFRQlgqUDZOYFJ2XnxSMG5rVz1Se1FSYEp3R3d6UFlHL30yWEE0ZGcmUXV4'@;
put 'Z190VkFDKm86cmI/LCRuYkVPXXRgOC9aUUJyInh3QiVee2Y6YUxOSkguJnNUWzQxbXtjeCxSSERTblRIfWtkMEl0O1IzLyxgRGlrRUcsZUBIST98Nkd9KShGT2NWfWl0X3JXNFhSZ1krdXp+UCIiLlQ6bjdkTGApdURifGNIVkYrJCJMWH1eV0NXa0YyRV9YKkxjc0IyQS9HQSRNTyIrRmtJcjRP'@;
put 'aTFOLEh5KG5FTDpvSShYeSlLRSxqbHN5V145MWk8T3BhfGVmQmVxJD11WXVpVGFifGt4SVdGdTdMRkVvKzV9UFBacjhyaDNmLzVVNClUVylxL2Q+MFIvX0VLQ35ub0VOZUs1ZEF8cikyfTRpdGV1YShySTpJWCxOdSpSVSJ6WHBgIiNzY0pad0JkQkw6T1cpbyRbX0tCKUBIbVd4Y3pFM2tUSFEh'@;
put 'MUBJMSt8MlNYIW91Pkc6fWBoNnJOTGVsUE05SSk+YV0/LmtFUmpfMlMxdUQieyJOO2JsK35PUH5wTEUvUil+YGtjS204VG9Scno3IXY8RU1IQ3ducVlpQ2FZdW9qJXUuKiolWyoqc3BqTXFaRDk3S2Y0JVQiQ0ZYSC9WV11LNWZ4SiYsR3tsUDokaHQwRCJMMEFgVkYiJUkqWTY4cFArdDx9QzFF'@;
put 'WDhNNFhBNFYiInxCL199RmMkZjd6RkRedGNIdVtxNF0hIXlydT5ELyoiMy8lfFVtI1IoZU9YU3FRdHhYY3JfSUZhKWdGNG86bEhGNCoxWE88LEdSd3tgalRsakhCU3UrKERDVlFnREUifkFZdllrR3U2WyIscmBOa2MlV0l3dnVqUCNeQFFacmZzeEEkOX1xNmFTRixDJDd5bXg6SXQrR2RyWU9B'@;
put 'OXJ+MytjYEtPRDU+STdLQjR8Jk9TaVVFNUZsP1V4Y09bVztBISIlazZTZG1NdippektzRUc3aCpGKzpDYk5AQ2tFaG49MFY+Z0plKShCOih+Q0xOP1ZadWY8e0UvQiF9WU09ViF2X2d5SyRNcH5zXzxWfnlgW1s0cHw0PmEyb1Z+ZWU7Wn44WmQwdzw9VnhaPWJPayVZVTVrSS54LG1mZS8xRCEm'@;
put 'IjB3UlBfSStoVSlCU1dNWyhzVW9fb3gsclEiMnFgLGp+ImMhKlBXekVZdkNTbF5BTkFbKVQrTzpXPmhgUnhpSUlnU0tEdld0a2NHUko0azlrXiluNy9vSC5rQEczKn1wRTxjSnR+LGVCPDRoeFMzOkIoWGMjcj8qT1k/MixHQ29oIUdtcztaalV0QmZHbkJBODJ5JmF7cjB3dzQrbkNnaG40SU0y'@;
put 'X0kyT0s3Q2A/QSh8O1RPWDVwUyIlc1cvfTNFRGN2TjVqL0s0VEBYeiFjQEdKdFBIbVt+QGFiPERifHtFYGpaTkJZbk5gUzFCZCN8KEZYOz9Xam4qRWZQenB6NClkRkl0RUYiQ0BDQSs+cWxPblgzTCthVS8yZXVVVjAiOW1OaSJILEt1YXZYQl1VVnhdfWcqcm4hUkcwWSM0OEBpenAsP0YyTDQm'@;
put 'dEVmJEdpWW5+UWMjTWtFcCZmKUs8OGZeP3hDQU1jLDxvPll9LnV1XnYqWyloJFM+Y0tGNSg+dl0xKUZQU3w4TTJvSUpTNy88fVFvIjNlTm5CXSh2MT5zPEE2PDM6TFAydD8sWFlufF5MMVtQInY1byhGfTNtQ092RztDY3NkUl8zNUA5fUhMJDhnKC5vKm9uRWUyZmhWeEVofj9GcV0vKmdoWit+'@;
put 'YzR+LnNEYT9uI3prfSljW09FeklmMFFxREg2PDFWSFJpTHRfT0RNY182VkQhP2FWeG8zR1BOWyZgKjpoamFATUVVKng/alc/M3YkQH1RZ3Ngcj92ImFNaTR5VzVJRiFQQkRXWHw+e3pmVGt8KUkvKCNpNkNvYHRPKywjaiwycV9dUVU8dVpfWWI6YkxTS0guLktIQl1yLCxVUk8sX2sjZ3h3SVlj'@;
put 'TCFDdChQWCpmfXdmVmJQNFh7Mz9BLm0lQkJvOX55Kzs4US8iYTRkYTFmZ3Zbcn0kLkl7QHo/fW5MI3JjbUdta2Q/LF5FMkA6O2VhX1NPQmhXVkV0a1ZSVFE1RkV0NX19PkM0Qll6fHxMMik1fU11IjNuUz5rfn49K0dEbkQ1L0xUcC5WQnFFcTEkeDAzbGUkRzg3ankmfTU/RD0ueSx0Pmg1bmFD'@;
put 'eUE9Q2sleS5bI016fH0jWX5nR2t2THQ1VVVHWFl8MlNLYU1iXnY5fiFIeUByI3Z8O3ZFaSJWPiw+cXMha35ZREUxNHR3UVN1TnMrQWdpOFklbGZXMltza2R0W1BydmMhMWh0UCpvKShzSFJsWSFUayNwajQiWllHYmY5Xz9JRDNqVV98PUV9QD1tIX1tQ0pgX3BJYXRVUkxLSiEkdGk1TyF8NHYl'@;
put 'Klo2Y3xxUGZna0gzIUQ9b2hXOmRgdmd+fiU/XlVWPWoiQHxLdTpwWmRHKWY9fXIjUjBzSD9EVSpaeEB3PTtRbFc8KyFUIXNeNDtXdnhgaEQzSkozK0FXenlqfTVlRmpZfCo+e0MmPG5qIV1zfGokUEBBSXxDQ3ksXyptM3ldekRVUUdUWEFFbnU6RCN1VGtCbC8/VHxkbjM6I20yZGhnSn5wWG9g'@;
put 'OkR2K1g0aS9deTZqQVY5MEsvbmc7fT14Yis/K3c9On0hT2NuSjAmfnlYKXMoNEBXPTtMVWdNXi5NUl94dSs4JC5PbV8+STc2MT0sZW0wcEJmbnBCVChoY29MZWZdbShNVyhkYytNRTFtTjtJRzpva2R3XzE/SCVZYmhhZ0QuX21iYmptaURpNlNgdXZTV0xaQSJmTXRNIm90VlNTaCVwPylYTjFW'@;
put 'JUx4OFUmO1hNMz8wR0srQXpFImRgTm9YT29fPF1IdTRIJWpUZlV3OCpNO3RJLiQwc3cpT0A/aip0R3VXIW5CckxLfmtheit3PXpzbSZiTmxaZWNANWleUERLTzElSkZuL2J2WDlFJSVFKFhsP2J2UFFBd0VjRVVLdERVTEdoNCNARVVLQkRmRTBOL2J2aCMwfD9HOVB6bi5CdFV7RUtpIT4xWyl+'@;
put 'XiwoX2NIeXNDdTtEdFoxRnA0fXZMfVhrTUxEOERVOXM0c2Ercl0qbXtjXilzQ3NZYitiXVhRUEw9Pnc9ZFd9JkUlaVc0JkUlTFVkLkMzaW0weVY6QzMsfW17eXlkeUUld3xqOklMSktIb24/RHRHYko0d0YmW1JXel1bJEtbdX1pPDd3Uld3YUhvQWAqNlBAfD9BRjR9UDt5eTR4RSUuKFV2fnki'@;
put 'SyE0MUVpUjs/dWJZKHZ5Ilc2fCFhLnkuZENzSklIb1tfdXxgRn1GXUY+KVImMWVRb2J2Z1NxIXl5O3dEVW98emFJTEtISG87X1hrUih+LjZuL19NMUxMfT1CS3VzNVphK11bdWJuZ2NXKFsiPyk5bXZVPCpbJk54cFtGS31edVpbN0hwUG9OS3piaiFdNFRkbDgkaHptM1hQNkRvPXc9UUxZPX5+'@;
put 'cDVGT0F+PUwkLm9bK18jZ1t+YUdMYyxfQGRbfktHTGMrX0difFhNL3t8JFhYYixCdFVAMmBJOVRYIVVUaEEyRSVrP2A6UFt+ODR6azR+Um1NL1N+eENyV0xPMnVYcj5mTXlwdll2OW0qIWxGSV5kMDU8PEtMMV8mW08yW118KX5YV00vW3xZYGBzfnZHN2p8Pl4mRnNkI217TEdaSiNPdlBRNWRu'@;
put 'TDhNWGpPSm4vYUNofktyVzRxP1pdZ34qcVc0JWBlXiF+N0tXNCRgJD0hfj1VW0x4MVFnfU1NRFZqOV81ImtFVH1ZdjcqKH5VQm5obXVbfXBYWEJPYTghfSgjQDVfMz0hOGgwWXNmZjBhYlVxVyopYSNyfkFwVzQ4YGowQH5ARUxjI187OCF+V0pXNExTRXQmSzt8Uyw9fjoyOF9NcDU+IUNBUl5y'@;
put 'UlFxV09bUl16Q2E6IVBIeFgxck5FcGRZYHFVZWxGRXJPTW1mZWx3LEt6Tz5rdW1PUm0lWU5MNkFiV3VtKHtkbSF+XlNNL1J+aWZfc191RzdoN0hMWTZybWR8TTU9fnJETGMzXzpQIX5uR1c0Nkxwc313OHxZdkMkYWUzUDFfWFlAfntDTGMwX3x9OX5UU0xjYy80ci8xfV85TTxpWHVHN1t9bVRf'@;
put 'c34sd2Q3fUJTX3NIQntfKGEuejhSb19xTllSIVJVNn53ZWxdVj5uUHNneCgxMFtZfDpmPX5bQkxjdV9TMzl+ZVJwTChrbnYyakEiMzN7fFl2d3trYFIxbktRTiE4eFNtZmE6d2U4TyNJeEJMY3Nfe3I5fk9STGNyX2RtOX5+UU0vJnxHcmBzenQwW1Z8OHBeInJEZW03YCNfMmFtQC4/X2k5SlpE'@;
put 'cVcvQGk/XTFTW1dLP3VTSnMyLm4yYD1fPkUkPT9+fTBGT1Z8JUs9fj9II3xVaGNuPilRQ3FXOUA2ZiZ+fkFXNC9SJn52T21iYE9NMHprQH5+QENIOn5VIzBbP35OVSJzZn5iV2J2WnUib0hIJWoxNWdgXXJnYFNyL3BONHIzaz9lT0daXWk1KSp1P35kYF18c1c2fit6TGMlfkhrTS9BbFg0ZH1F'@;
put 'cjF+a344eE0vKD4hQ3FSR1pNP1d2UElYTzYqQFBeWn5rT3NHX0xCIm85RjdqS3FRO2l9MGo6clREPCpOJHo/MFNHWmd0SzV9c0B+W305eyYsbzF0VyJzYixBdCo+In4kcz4jKWhefmt+QWBScT5+JX1WZXkoYj85MkNUWk5ba34vSGZkflcsTGNgczxuek5OMn5+On0yek1+ZzEufV4wPX5QQHs3'@;
put 'REF0KGlzMCsoNipaM3doTmZ8Kz9NLlZ1alE0en47eDprc1syRz9LKyVPXXx3bkBzWzJsfCZScnZ6ay99Vyg7SmlPPy4mamhWXjAhfjY5emt6c0BKMVEoMltoKlR9Vmw9bXJSV2ArVz5KU0shbShiVT8/TCo3O0hpLEp7eWNuPno4PlI3TEg0SC9tcilAK3g5UVBOYlRDbjk5I1IoPzZXbytsOkM9'@;
put 'fnxIL315djdUXnkxVGx+MVRTYGlIP35qOz56b2I+LmJJJDMzUXtzOF1NSlQoVEM2fFVoclcjfVsicVd5fl44VzROfSFEWDRJYEI2e3NvXSpPXX4hOkNILH5FPz56KlVBImA0fnhkYntKV1QvX3htMT90IXVHZz1aWlFUTGM4Lj1HMmBQWV59aWw/c1dUZXpQW1h3L3wlOlYoc216W1BbKDxVV3Nt'@;
put 'VzQyYDFlZn5iLjhKMWBEQV59SilVV0QhbldCbSUsdTIwUk5bYkUvfE8qKH5CIWRfQW0hJHUyOlBOWz5EL3x7dHF+fmhLTEI8cVdBVG1iWS45RzFgWHdxflo8Wlp3MkFOTltkR159dyFSNHgybE9efXUhYHMxdlpHKGBHQEs6JWt1fHVaK2NmWmU/Rk1HWllNOCl8fUViWUcrKGI/JU1HZkpvZz9W'@;
put 'JkVFay8+NWhtTzUhfmkkV0t3LDBFSElmZyJ1eWd+W0lnVFRjZ0YxeDV6TzEpfVtqenAjN2VRJnErbHhvfCVpI3koaEZBflsoZldrLzk8PHxiZldbYypCfH5UPyNaXy9dUTxWKG10VXswXlEhYTxRdkdBfWEjRnhXS2oieEU5R1lOTURgKTlfIXksYG53I1lGKmd3P0spTnFNR1pJQTYpMFJycnZ+'@;
put 'flt+YDdZPHlmPXEjVFF3aTkqX08rSWV6K0lQR3A+eVIuYSwvK2hlPzV1NUp3OzNqYmBYME0sMCVuSmhWT0RRUiYzN3tyY2NNIlhyPzhCIyhFeTRlSmBfRi8xKFU5P3Yuc35RfnkzSmYkM2wpTTBJOjhsc0Fsc1JAI09BXWpmWWtQTFN0fGtba0hadVdmWVh+S0Z7b3pvMm90ej15R05qTyRSOF8r'@;
put 'K0RiK2NMUmI/KEtsVTRrMSVXS2phNUl6W2cvaE8+NU5pU0Znfnw5fF9mS1IxO1ZsVEcleWhSN3lAKXVmdFFbWHdhRHtELGcwWTc1UnV9Ql9aR0osPTVubj97elhFd0UodSImP0xVaHlGRzJYSyNUX1gzVkMrMmdQM2k/KlpnfTM7WltXUz5OZTM4LlgzcG9pRFNSfWdwViFKSj9GdlM7K3RYVktX'@;
put 'NC5nZzI9PEB3Uzh6eWFvckEvOCkyZW5VUiVhMVUxKGJKOWhrNm83fXZ3R2M2e2NtYTtCfEZ6b3ZHUDY9PF5sX20kMCNFM0cxfGF4LCFsaE1uQGh6ejB2UURZeSw+el5ZXnhIUENeZ0lIZF8haSEueXxnaGI5I3VLTEVoW3chJHEsODNUWD1aKD8mM2g5aEk9Wi5jJFNyQmhPJjNQJnw/TmUsXyVD'@;
put 'K2xQIS4sbEMmciFVXkojKWlpPyJfUzgpckl8Omx1cXU3PHBuK3xtW3BAXldNI0VfJWZyRkByPnFrI19HKDl7RkQ6KT5IRFkuJUojUlBGVFU9JCtlPCY4Rn5AXSg7ZEtwUG48U1FNPmF7czljamBpYzAwaFJwQlEmUT8rYCh4UElTfnVIZn04SHNndldyIlp4PkskamxZPThRbzhOKykqUVI0cEMm'@;
put 'ZnJ6XUo5SUtnTk4jRWA6WTgsbDIpYjYwRl9QNj16e3s2SkMrLjJwOV5ZSVNIUTMlPG5rSS55Wm1OK0pNdilXP2EsayRzQElLITc2RzwyYTFlXWBdKW02ZWtQM003OFd6XnVFb0JoUUVuPDh9Jjgsakp+QF1zJG5mNjlfPT49TVQ4Mk8mdHsxalFyfjA8cHU5eT1dJTV8OF0wPk99KTthdlBEWVMh'@;
put 'eUVjbzQ3RD9aNi5RJGlPdSVibCNfaixfeUAoKTBHTjdSSGY3JTEqJTgpRV0jMjlMP29lfnRyLCEhWk5tUXxCdztEMGoraHYlWnFYflJmbnFBbW57Lz95cEUjJGJuJUxDWyZgK0NoOXBGb3RIJWgvIVpsZ04qIXBvIWNTeSkuYUJOX0g1d35JQyJdRGY3aWRwJE1OR1o9aCF9Wl4pOiNNfmpkeU1L'@;
put 'KyldfUJOP3QjWmAjcUZYPF1DZSMzTlUpJFNrWiJGI3pKb1kwKWd1fGl5PmZDOls5czVkbEpmUTIkWm14eHo9bGBTIix7bUwwJXcvPkAuUmNbYitaYCNYVzB2N1crY3lQJD9HT1s+eldsRU1hTXk3V2JYMldXLzxbe0I9bmNFVXRIVXl5eHpEal16fih5eS40JT12eGA4Ykl4QmMoaTA/NXgydUU6'@;
put 'Izc4V2FtPV95c3V4TjE6dlJFYHxQOnV4ekRqODF5OXZGIUJYTzlvV1h0NDliKUY3RkZAR2F7L1ViY3ZePEZtcnQ6RmxoaEZMNntIWlRYcTJZK1pMOXZ5ZF50Kno4M0xyQT5PNCNlZV5OYHR4elVnU1RHWDZSOWxedGVVLkchP1cwdk91JWNiZEpCKllxR0I4LnQ8KD9tdTY0QE1uQ3p5MD1vd2hU'@;
put 'MUpVN3c1T0NtWSN9dU91JW0lZT9OfTBIa2N3UXBCaVc2QEx2WUs3VUNkIm8kNTYpWns0UkM1O2BZSTE6YFE2QHd3SDNiUE4wPzV5TH5JSzhWIUE7RipwNGxjUVd7Nm9DLzRRam1aYll6RWk/dzJgUWpIb219NG5MTmAwWSJveyllIyRRXXU9VDlfSHJvbXw7PCw1TWhsOTV8QDFMU1F6TigjYnh8'@;
put 'N0kpbWhZMFgzUXdAelNHcEx7bWh0Yy9UYUo+QkcjPGxYditObHYoQk5CZ0VIPSpES016MHlJSjRdViFzbi9vbUIobmZsfjU5IithQlorWkVDZzJ5OTR5ZF49SnBoUG8/OEhKOyhQRFV0a08mWipXfFJTZV58JERLWjx5W31AdVVOPHQiWDBZIm9QalB2K0QyVyNkTCErfGw2KmM0WClGaXRVeyNa'@;
put 'NkE3QyM0O2lRT2lOUW93PnosJVR7ZVFkbUhAaDVkOUpUWGhFTmcrQixkd090VWVHQ1RfbkdII3ozYl43eiIpZyo0fGMxLytlZVpYb3hbNlhXNnhUOz1HKy9GcUkheTowNilIRGBRcClAUXApM2hnTyZabFdFU1Q7JEFHUlBWYUIpSUBRZTdJI2RPdGcyeXNFL1M4OFVrN3lBaiZhS0N2aEwzV05S'@;
put 'dGJPJlpWV2tTVDt8TGtOOShbOUZOMFdsUXh4U0g9SmVkcHpxc2lrazghNUZtLjx5Nm1Ic11HMCwoOltkSk5wWUlDPFF6KVMlImQwUHc3eWMhXTE+PiFQL2N2KUNiaywvZkUzdnZeLGRFO0FPcDI2dmF6PXpOWGpodj8mLncuRiwhNTR9dUd6QERwQnpjcHpLcz92XzcoWCEqKCM1WGV1KVNkR3hO'@;
put 'OkFFNn5bdlt4REUiOz5zUHZMWzo0XzI8NkZsTyFfMENlWmUzWGJQQkg3Uz9eMGJQOHlDZCJvKW83KWRLKk56dH5sJksvamdsRWZ7WEdpfGB1T3RVOmNlP09GKDlEeVIqZDRhXV52T1dEWnsydU90VWNHZT9PRiozWlVrSGZgQDJ+eWxIUCIuIT9tT08hXyU7OzskWS5EcitLPHRNc0xyYnBKbWtw'@;
put 'PTlfJTs4TVUyOVddMHVDYzcwTDAudCpzRTdTSWhyMmYmUyZwSiY8OCNoeE91WzJhTXUlV1JNdjglRlQhN3UyUEdrSzM3flI6R0ldYUxNYTViT08hX208KFIiKFlObEF1MDdmN14+MjBaNWJzX2I/OyE7Q18+I0dEdX5GeDVUeGR6LG5XZVkwWDNjY2U/OyFjLCkxZXhwX1BXezg6dTJQL0Brel1H'@;
put 'JEdlcVRtU3VxemhYdHR5OTFecnpscil7TCFiUm91Lkc4QVhYXzheYCN2S2QwWSJvVlNjI3VaMEYqaG9HUHk6ZDZTWmlNRkdrV2glWnVMPCkrZWxDcGhsS2lMRkZIREIyPWZRY0FKSyxYZVkwKWdjYylOcml9ZWFGLyszT0giN0xUVDhlfCh+UWJNdFVLaXc4V3lBd3c2XlgrL2NrMjZSUV5IT2wh'@;
put 'U0pCfSkkRXtIXkN7dUUpPDo1dH1NWkB3SnZpfFV8bnhjc3VhY3dhRUxIUG40UHZ1RTojRXJSWmEya0AsaEVIRiJmMkU8VCs8Ty9baVJxQkUubFNmel1ZanZvMnw5e1V6bFFZU3EwRUQqUVdfOFlFM0MqLCZLR058e3wpO3ZeZF0qcU5gaWdBd2NxRHtuYGREc3ViM05ETUxIX31yYDZTaC9xVT5o'@;
put 'LFRlSj9fcmkmaWNxOl1HWnM2cEg3TnZVRk5iWXNvfWRqYjZbL2ErWU43XnUkeW8wTi9GNn5bUFpZdlphR219UyVjZlo0dXxQOjZ3UzdGMlFnKUlhey9meXNFejB+YEl3WXs2eXlWLHBeOkF1QUtue1pJey9hRjNJM2x9clAhS2wxaG83UWIjKGpeXnE8WWR5L2QpOyh0W19rTik1RlRuZGk2dy5k'@;
put 'Tzh5RG8yMHp0a0hhQXo6dlgjW0RLdUBkbHJqPUF0dGkwKkIkeTw8ZHE0WXd1byN2T3UlMUxjZSRNbE4uPk15OGNgOGw0THpJIjdjNVJvZEg2MW42bF1hXjpGQj5yLklkZWZ2byNiY2xoSCpKaEpbS1UiKUlpcVNNYU15XXY5X35EanlpQUNDMlJzT31TI1NGMnNkWXVVJSk5NEQqX1JKMnVLaT9m'@;
put 'Wi9IT0FPV0A5eHdLTF1taEd1S3R3Yy8yIShaayNbTzUlY3YwSWkheTFOOjdeLCIwfFVBOnJvNENKRWlpJTp+KjwwYHR7fGZKbjxyaWh2blFAX152TEE+PDcoclNLRHtrRXd5dSg0alk/U1J4cWxIKXs+MyxHPFZGVSohZXw1aExYcTxmbSZsQmpUU3h1RUc7fmBTeT1bYTo2aiZ6elcmL3dRdj91'@;
put 'Ti5JfHFebVtCYWl7UlNtNDohKXttQS5KbUxaKXgqMyNIVHA5RHg8U0tQbzQ1bWxfKVBvOnVMdF5YSUF4PFEkL0ZacVVZK1pVXVZSImMoR2AvYEtkeDtmJXAxOjRZM0I7dmRmczM/I0RhbGcoWF83OFM1QXhRPmFDSzxMeEdHZ3QiWCkodXFAT3U1RnY/N2NwelNVOywrZSJ2aztCWkl0V3hTZ2Y1'@;
put 'UFsrNkRIMUVYTyZaX0oua2s4KTUpfmBla3ZHKjI+Q3BQVGQuQm9ETGl1bTRATSRucjN5OXYvQiJzSl9GYGsjXUlSdGx2TSNNRUVPTkJkIm9MWFl2LHdBfUIiLHFTTitoMig8KTs6enZTdnk/e1FaMFdLLEZlP1JNOHlCIjdAfFJ+QjokYGtBOEtGJlBARFYhSGF7L1B5MkV5SEUzfn5LUCQxPFBr'@;
put 'KXFaX2RgbyxqRWYodjVjcHpicGlrazhZQCV+YGV3dlVBNTEiPixVOXgrfT92VkE5ZitaUjtmMnk5Qno9fSloNDMxbnJDdCFjQ3FlNlhta2ZaTFBNYWo5SCplcUZ3fUBCIkVdOkY4Rkh6Xm45I3ZSRFE8I0I1QE1dWzEvK2VCd3F+bkk6LnBFYS9bTVRhPFRmXmhBM1tDYXsvNS54RXlIImB+fktQ'@;
put 'UzwuYjYhJFBIWDxUQ2V3UWJ2Wk8mWnJVRVNUO3x8QiJSdStZMUM8KUJyZnYhZmM8eFdVZCtaLC82MXk5RnpBIllsQTBZWEN1WVV3QypALkk/V1oyd3V4eiYyYllJaEpNenxBdHduTGZLVSt1UU5+MHIueTYkOHdjcHoyb2lrazhaQCV+QDkyeDdXK1VoRmUvdCxwbz5ZOlpiWCtaaS5mMnk5Rno9'@;
put 'fT9RU0c5TCJdNjpNZmYyXmghMD5jO0lZMCo9TXc5Xy5HXyxCIkw9RkxoTDU6JmMmTGlSK0JqempXM0pzaSRHZHlpd1F7SSpkeGVPTWYuZEB8KWgmIzRMYlJodzwsNzpwW0IiYSxVdkoqTCZ2IXIwQzNGOyRZaV19RF5BfShVQ3RZUk1EPUtXJUw6JExicUkmSy50PkxfNEJ6bSZoI2VNR2x9UlV3'@;
put 'Pzo7dCFkR2FEQH4qIUUuJDpCPXg2RiJsYzV2LzNnJHI4aXJ1Jlcpcj5BR15SN1tgQ2tlZmhWVkpLMzRvamkpVUlHXWx1NDI0eWV4TGUyRCEkVD9YJnd5JjNZeVVhWS9OblQ4SVZDQE9FNj5lLi5wMU5pTDdTUXRVKmg8NHFjVnlnbSpEe2syKXhQIj59eng3KE05ZTVEJV9ga3tSPEJEMmswejco'@;
put 'TV1AdS8lVCtPL0IldG5YdV18ZV9MfTEse0Z2QWFnQkdTSU9NRUlIVXtXPjFzZ1FTWllRVGcoVyYkY3c9WHMyd1txMU41TGZ+P3JJI3c/dj1YQ2g4WFcidHU6SFhPcio2Ilk0cWNyPThyTj8ydXE0cHpBeWNNbTVeRlBrQ2ElR3pYZU91N2xYWVB+Nz5vXWpBTWtuSVlkQmoqUCxAWjtDZ3ZIW3hg'@;
put 'NC5IOjZZIkJKTT5KRXc5WF5SS3piViF4bWUlSEd1WkBOSmhKYmA9bj92PEVeS3MwbWZfIm1mYDoiJjhHdW9iejF0Nj1kbG5aUlFoSnM6X1lodENlR2tfRUZnMyhKZl06Y2NgVnVjb3VsWjkieFlWO28vIzpibCJ6blhKdF9rQFJaImUmXTYmOm4lcG82U1J6OFpRQmVvVSg0IWlkKjQrcXt2eit7'@;
put 'a30ud0xnVXRGQXY+QFk/SDdISFosWSFMI3dPSGUqNFJTK189eFpHZF5FVzAod2JIO0xgalZdUCwhOVtAQEBGXWkmez5meSZAcCV0JU4pSWdSckl3aVROQXY5Pzk0NUZASVRLckh3Zl9FX00lZHNpXXJYRHJ2bG1LekdMPmFKS3pHPkVJeGF5KnlvdVRkTWIiKGQkO09ENj9lV2FKTih0d3IlYG1u'@;
put 'dzBhJlJoV0trLE0/LGhjWXJpK3JtMmRYOEsobUdtPEN7KHo2PHcsNFRhdGhud1JSJF44a3o6eEIoWTZpVmE/Yi54W0Y1OlhYO2gpVG1hP1o7N0kwL2IvRHhCPi9idi42TkZAaSEjTG0ueFpGRipiWCg0ZU17TW5SWFg3Ml99O1J4TXZTOGNAQmd8QlpuN3ZhNT47dEdeVk4pfl5IOSNvRXptXlIz'@;
put 'Y2EqSUx5OVhmQFlgSntKem04S2tKbHBaKWc0Plk1KnhJeWNRW0QyX0gjdUU6QFd3I0kjKU1peWEkUC5zdX00JVo0R3EibzRTSkVgNyNUT31LLHBoVDttNmM5TylqNmRzIXVOX3E3Tj5GZUVfPFs5WUx4QlRtNm8uVzxGdUxSX2lSYCguayVkejJ4MUdaOXtXIilrL1J5dm47TUIzamMxLFdHRzBJ'@;
put 'N3glYClrLkExYVRta1tPYEFnKUdvIltMRSF5VH40YS5GUyZnW1F5dTQoQnRqWEhlOmFGZzVDelhsdF9aOjt1Wmcqe1EkNyNYfklPNXR0TWxIQSJlckd7S2hjdTtOTF51SSlyI2kzWilEeTQ4STc6ejIsLnd+KFRYMzlFRn40QHRfU0dSOnZsNHc4KGoxMHpXZno0KW5dSihIUEMpOkc4WEtZT1pB'@;
put 'Z1hjUHBSX2FXS3RINy9GIz0+LywsTk9QcFNoSEUzXUI8STB8JX1JTXUiZT5sZDJodXYrWlZWOHRQfTQ9Ok15X1M5MSMpa1pKUm4lYTNDaWVTRnhOWDYyc0JGKCJ5UWdeJThNIUsraDBDeC5lQkBMeEc0YSw6ITJXZk10TlhNaVhGOlVTTldgbXF4SVRKKTFOWG9gOihlUCt6QlBUNSgkQkI/aGJL'@;
put 'MEAodSZmflg1elVZMT0lWm4wMFVOaDEiU1lwSVVAS0lnNmVgZnEwVXkmJEIoRmVKU1E+QndVZTJtdFBwQmQ8UV9XMV80TDNrU2RMaU0kVHp9VzYyPHZ7aEcya0VWdClXR246Q0JQblQwLklSPmM+LygqY0V7dT9HfmREYTU+RV9uTkZSL0hGSU41MFc/N3lxTEt5aWROW0NWNjBrUFRLXW9Me3Qr'@;
put 'LkdIJFNBTW9mfTBNYmJ2ejcpeUxrLmM8RllMTG1aIXV0Lml2THt0NFM9eSNXN1YuT0lJanY0RHRHOjc0NHNFcmJGSks6NyhAJD4+WzU0N2ApYiVMSCJgQC9EM24pMnNOL1U3L29dakhKNVBFbHQudyFwWCQiYWxRd34xYi9CYDFuWEoxRU0mUFQsNSR5IiwsNTFRXlg5QmFrQ0ZtXzIwLldeVmdn'@;
put 'QGc+L04zUTV7Q1MrZjdSQC58JEssRHx6TFtOQT8/RyE0Ol1xNz1ja0xCQkRQWT9JemosVSVjPUNgQFUhPnR2dU01MzBSM3BGLldjTGUuV1BHMDAjaCFDNG98RTZWYzJbLyxjdUdBLE59UDc0cS4uK19BTi4/KWhlYUxoRW5eQDA2bjVIcyI+QDw0U1ckWmMxLy4qIzxWaEZzIjtya0xAR0FEWjZG'@;
put 'azZLMDIpNy9gfDZ0QiYvSyErZiZDNChtei40T2NkV1tEWWpxdW1rQUc/TW4/NWRDYWQ4ZWU/W3sweTokL0JRJiFMfWxtNE4oRENZIjokeUVFJldnOUwvMjFrWklaJTFbUH00V0Rjdz52S31ETTAuU0RyanZTaiEiSTApYkI5N1BAdWB3am4iKzU3cVprPldyWl1CW3MrLlJYN0hdejJRZDQicClH'@;
put 'IjU0eUxrNWYuL1ZpUWYkOzZ5Vls7OlpdLlB8WDg6bStiZW9vTkw8QVZ7QWRjQXhCZj5edlBDNHdVWUNkWzdWIVNoX1FqTGAvK0BNTXRgb0BNfT1FIXZZdzJaX2tkYDJMdVYuaH46QjohYThYXVgiJCJtTjd8SndjYitBW1RYMU4wU2Q0MG0+T3pqQTtUMEcoTDF2TE1JODdYbXcxfTp+Jj89XW5p'@;
put 'Wj0ifnxHSFVTSkJNfU5fU28mYWFNTjEmNFBNdGlaV3hzOT9UUGFDNk1CQkgjJFpqNDhrJntDPXFXQExYa0UjTlA9WjR3YTQ4Iz1taFY+T2xWUSxhNDJLMXR6ZVlaLCw6NUVCT0Q3V3VuSkl+RjFQaX03LG9NTHR7Q2xed1lCZFgpcnQsI1QwM3dPUGgxWiV7KFpOJUprN05ALnx2SWpITE1WMV12'@;
put 'WGY+UHZXRjRQLl5vVTQ+Rk4sb01yTE9sZGxCNkVjaHQ9aH5rMChXY0lESmJSZCl2MW93QHcrZFg0YzkpMms3IlI3NE14QzppKkxEOlR0Uk9CR24/Z1Q8ckhbPU9oYk06STYxW0IxRjNjTTxyO2pyNWd0MmtrZ0dEXiw3KkUxXlZufi5nJlg6eXlkckMyV0ZtVEhkYEA7Sk12blJkQ0NlQ0FZI046'@;
put 'N3U6RG9bUmFGRGZuYl4oPHd2dTl8ZCo0YHhEWGRYdS5sKWB0Vl48RVo1WGMvc1BkWGczSD94TVhYKmVDNzI1PmNMRjc6TlhGeS9CNiooeytCdm94QismNyNeaG5ib0xXb1JzdFgzVzIzPEZ6ZCtjKks9ZmF1cV5xTGpQa3k8PmwwUzBeLCF3OiVZV0E+PShVM0w1MWI2MSR2QmZQZVpdPFA3PDBH'@;
put 'M1VsR1IqQFRZQEh+XV00NCthZUdmW0NhbnN4V2Y5MHllS051RmFhWEhLR2lLRVJ0LmVhWkk8N3ZqLyxOWCxFSDRue0V3Lk59ZjIxSVFKKU82QCVCZFAjWGxnTUx6Uk1DSD17Qk5uNElPPENdYzk0eWJxWF1rTTU1bHZUJT91ejQ5ZS9DJEkiV31GVjBuSncpYyJXKThlemtYUH04V0NKZDVFTUhG'@;
put 'RnY/NmUwWyNUaGNgOS5iRGxheXxrVko3Z1VMZj9ee2lNUnh+VH1jPmlgK1E7MSFvUlo0W0M2WHhFP2gpa0tdK0RuVGNpckMhayNkaWlOY3x3NnlAQm02eHxyRkh0VjdkP2hxdlA5OEhQM0w2Rj1MYmUsN3ZuQVQpTWhtK0QhZVZaZzNQP2FdZCJERDJSJSxgQXZ1M1oiNV1JOXguYjlYQnRSJEBC'@;
put 'K0t4W0RIQ2dOY3sqKGFMKzMjMmwzTE90aTcpM01jMSlMdHRmUGZRO3d3QnpPP0J4T2NRW2kjMV9hSGtKPFUuJHYyITFVJHAuWyxnLm85VC9EQXVHMlciXUl9S29KOXtSR3EydEZCPlBnQm5uLjd6SVhCUTYhNVE7VFh2UC9HQ1dBZWFVRnZRdDd5dUhHS1M/OkhvNjhkMF5sWHFGV297dD5Najtb'@;
put 'WnE0JTs+Q2V8WFpMOG1PQ0slWUpZfU9AaF1FQVImTkNQXlA9MSRUeGBBOH1LaFo7a3srKUQlTHRlQGkhRWJkWkZ7REIsY3B9b0tde0NwRilXMEQkT19IT2lmOGRTI0ZWVjxpSlhrRFIsLkJTe2RLZUNRT2FkS0NyMEZ0dS8sMSImTlhlPz1MLyohTWUyb2F+USRNdTI7Z2liL3lyaj9KZUo6b3JE'@;
put 'YHliLG05JERDIT1OLE5XezppfUFrSzhAJTtuLFNDdTRLTzElZkchR2UlWi5tOTJ4S1JYazdyakgkNVNGSlhocz5sN01tbjApfnJGZGxSKzQqJF1lXSpITTQ7VlhaY2V0YS9AUUdDUSVLJFRkNXg2RilOQGZra0NpeHNUbVp0TGgsRCEhajFZdiZAbnNUbUpqe1h2djt5N1NgVyg6TyI0bDRaXTp1'@;
put 'KmFxWmxkOSNeP0M7OTpFK0F5Q1oqQjUlUFBHO3orfFYkTCt7d0NzPFc9Z1VhbmU1aDcyIWljRUJFektfOEFeV0dsb1YoWlRHbGd2amlpSUlYe09GbndBUSVaVGdmbEMjNTphNDJxaVRqOFk4QEw9dUA8b1cvMWluXngoMG9tdDhATD16aiMzYCNBWjhFM2ttRlRJSW96bW1gX1hQelt8YWxFaWJE'@;
put 'JWxlLFYkInQxTGYrcCorOjJBX0MpY0NmUTttd1tOY3dOY3c1IkVYTmxzajwxbFg8V3VZRGdHVHZqVktDQkJQUE5bTD15Q2pZa205Sml9X2shTX1FLzlkYjlbfDUkKmlDQXZ5S1h0dVc5eXBtQTU9NFIxYmFlMn1RZysjNDRoOTRWS3pLfEJHR1RUcGJedmJMdmg4TD5bNHZUMyVkL01uVHh1IlRQ'@;
put 'ZXNpXUEhT0V3Tzc3dURfOl1uK0hQbzd6Yz9WMjxnMmdMblJndDpgSFBrSGYyOC8zIS5jcUQ6Pmp6KWk3ZV92Q0IjbTFAYWx7VyE0L1peZV5DY0RPK3dTczRaSCooT05tdUtQQ05xU150RzBvNXBIKVlLYSgsOGVQT2NjVTVzU3o6PFRhVj5IP3ZbSVF2WTA7OmJ2b0I5WXNBZFN3cW0hMGNKUkIz'@;
put 'XUBZNHYoWjtCbENaNnxnaXBMcnVrRS5MUnYyV0FBQUFBQX5sZ0FFTVFhdTVbNXhEJklpb245Vyg+d2tzL31jOzhOeTQ5KjQ9XjZSITx1IVNoRnRSXkBocXooWX4jTjc8fE5sQkYheiJtWTduNjFrcFh3SHhAVjtkT3V3MmUpOEwxTUZSPXN5I2hhKF81NCNXcGRRSmVCOytZZjJ9SjowSm4reGZU'@;
put 'Q2VfYE1tWyUyV0pFNERRUkp8RXZ9LixqOVhkZT4paFJCUUBkeWRYJk9dSzV+P21zSlFQcz9WRj84TF9PeWtpKGFmTks+bDxpdUYsLzYqNmIjRGclQnpzTilPXkdpZjl3P19rRW9lKV5oITFFJVN6fC5mNF1ePUY+JiV+Vl01c1c+K2AiP1IhOCFxMkUwPXR0NWJkN20rRXguQD9pPUssbVlELy9T'@;
put 'U0ZEVi5LQ1FNeXVqWnNzfjNvLy9LOkdCOHNJXlI8UkdZc1ZsajpVPlZZcyZhejkrOiRjK21ddXByWUc0TEduc2x7UHV3dlU9ZUdqbnRKWEBvckZlXng+fHdgOmUoRlMkK2R3U1lyOmFNcFM0WT5CRVVKdnw1YnVqV3BiVTVoMyhTck5PTTEvVFZKQzNJIX5ldz9fcCltQHwqbU96VHRsMT5xVXBz'@;
put 'RnVjaVVCVTk0QjwzTkBvYUorbSgxbyYsUVd9NnBDdy82WyNrMG5YYWwociRKQGRaO29fI29RLHV+dHtiZUlHKWUoWi9AIltHMkJZVDt2JWgyJm1eRkFITmZFZHRWbWdIelNSfVZWdCI8bDUrbTJPNXx3L2J9KH5wRUBRfix0QnV2L0BecSx9RGFPZl0vW3BGVCVvUTdsSEtLVFFZemgwfktWdGlV'@;
put 'Jkl7RWliVWJhP2pXb3hSNmY8MngiaHV5SWBJIztJVGZWen5oRHQqb3RVXV9BLE5kfnY4cjsvWGcuek49cC5BYERNdTNybn0uUCtEaXkyNFtfb1t9b0Z5W09FLF9zbktTaXRuczo2UDBEZ2U+YHNXaF83OjVkYVdDVStGYClMKyg/QkwlUis7YmRzM105c2UlNk9nQntyI0JFN18/b0d1aT1udVVo'@;
put 'RF42aSNTcSZbZnlufW9PQnVFYWE7OTxrSUZyeUdoZFZbRkttVVRsWTQ2TnM8RE11andTWl0jam83NHEyJFFATFNicFQ4SUZYeWk8eCkhdVAuUGRAd19KbXt9MilfYGA/b1hFRjcqQ3NuK1VxYzpsaGBeQiN+eHRlSyE5KCFTLHMoU1hfcXo0Jn5UbnckKUFeXmpeYHxNYmdOM0V6TiNeZ3hKUkA3'@;
put 'b1txKjsqcjBFa2RLeGRmIX0pQTQlMi8/cXlOSH5eT1teQ2VxPWR3IzM4ZFk2IU1DOmw5JlYwZ2J+ajA6W3JIbVF3YnpaMnluU3o1dHVeW307eTBOekpFeXosU2xELk54Omo2ODZfXlhzQjlCd2tiPFQ7ZGlONWpEJGdzRnQkOFQwL2J5bmVNbkg4eTkpZH5JK09tTmdTQnxTW01fPlY5Wnc9SjUo'@;
put 'fSEkeTpMU0dMcltafT0rOzM9PEMjUlJpZFJeU34jJCZ4dmQhSDRMSX1MP0syPzhCVXNvM1BFVnd8KXA+dyNiJSpKYUBUQiR0Old5bykuOjJ5fXIyUGw3cnI2T1NpcHxKT1NiXSFSbVVWRjdENHxTR3pSbX03NDlqc0BNMkVxJltNU0wlfFAmcTBqR0YubEA2UUlqNzRdPnpLcUg+aSYoWXQpUSV0'@;
put 'K2t7STpHLEQkfmc9UiouaWAmJlRnSSR0NmFKailvMkVEeWldJTRAcG0pe3k9fmVqR2BUZ0JPYk43WVhHaCNFd1NAWktuaXRZTDlYdV00WW1MS14rfXtELyp+aClKKm1xSltHc3JrZD9teEFJXzEuYkZTOj0lenZYKn50XjpAOFNjV05xUkd3OXd0SGYxS0JPOV4wbmU7QSxWJX5aITtIN3lhfloh'@;
put 'bS59Nk1DV2FlWTBgO21gMkhsNWllYUJjREhyIXV6L3R1M0ZZRXhrZXo6cnMmT2sobGZscjcodlFxVG8rQlkpZyZSXWNNTChnOGpJRFZ7KDshPEg2Uzw8biZ6a1NKJDAhKWplLyVSJmlOfTtXRHZPa1VbSi92JUlsNSwvYlAqLmpQbUlyZTpOZ3dbXz1gWFpfYD42XkJ1RWFbe3xeZ3VFbk4kWF4o'@;
put 'RD15JmgjPDNHVitddEZHK3pUaS4jWW1yQVdzKSh4PlEzUkZdSWpfMkEke3RxWF1OeGUvJDpzX2tQeTYsS3tyNz8yMTt4Xmx0eGh0Qj9bWyF6al9tN0ZgZypDITVGcHJ6PztePEFfWDE4NkwoOi5wR0JVQmBDZlc5SVtOO3k7MSE9dGFyL3h5PykxaVdZTzcwImo7RCF9W1cjPlVTPjt8TG95ST5o'@;
put 'fj8yJTczJTdQQlRbRFRiPWFvVnJsUG1DbSZAfCRnWV5hbCt5MiY5OzAwVFg7JWdGWkQoSm10LEp+NnJxZ15pbXg/MEU5ekdeI0RPMUpxMXElMWYwNylkbmNecXlLfVNNdFIie0I8MCNpNk1mPXgsIzg1NGAoQzVXdFlseS9NOT5yMkQxMileVWZvSmIvRkowPm5AO2dZI1Zva2QzX2xfcUAwVHR5'@;
put 'LHZBPyskKEMuJSRycVBwJTpCTDFnKHQ9SChyWzpJanc5NyI1PmUjaDtZUXdmS1VPLHthKXZALnh+dlA7XzhRcmBRPlNZcFIiM0ZNWC44ZnBKXX0+QEhVQ3RaMkFDJkxeVkR8OkxqcmJYeEIsP1t6dDlyYEV+XkxHT0JIP0ZYflsuJHpTUzB7UzN6R2tWInkoeFM0bSZALlc6LjhPKmc4TTAjMFUy'@;
put 'MDBLfHQmWU5VfGxBYUNgZCFNLD1zXzVtQ35xP2hbWmBQbHtxdCVAJmRSVy41Y2drVihhKTU5bD43alB9T05JLGZsN29HYnRITlM/KixyZExsQlJrT0hTU3VyNUVsKCxsTStoOCF6bjEkNG5KfDpaISljJEtzM2FiS3c6UkZqNHFJMkl1LCJlb2RTTDg+SnM4b31+dUpAellsZysqbThaI2skdHVk'@;
put 'bmJBfUdgYS50cHMrOGliIzZ0KElBISVbOG5EXnpSLzwpT0pKLHZXfE0lP01uNHo4Z3lNZGkxMUZPbiE4aTZ5aEZGYCgsKk1pbU8kI35QZVE4KGhQZUB1MTY1NDEqY21tSzFoWkNFOVRjN2ZzKjs2WDZhcmFVYnF2YG9bP1ooZEtYKWBSI0hxZSpMLix8JWZIM11FLHRtfVlaJWBAKH5iQDEvcSN7'@;
put 'eWlke0VJLnU6bDFdO0tWJHVnUUhTLmptd0Uxa0hAVXxYcSNhUHAsS1ZLQ28rNjlHQWcuQV1MSCt6bG0mNyExJSp7Un5ANXwhYTRYbWc3XSw7SFthazRgQDUoRlZeQmUrIWE4QEVKNTBGXi9Yc2NOTXY0L2JHWE45ZTJEZDFdNiNbVjFqODoyM3dwTzUvISl8THptZFo+M3NRTi8vI0g3aldfeiFS'@;
put 'ZlJIQkdtZlpRNDZQTGZoYnV6bztgfDFPd1VlemJ3PUZ+KXBkKCZhJX4sSXwmIyVzTDFDemt2QTo/MUlKeERuIS5WSjQjVl1bWzA7bUtVQ0tYXj9FbEROfD8udkc1bl00cC8sK2w4ejNnYEJodmBVeUh0SGhldmhWamAjT0xkPjEsQCIueXM2JC41JTUrVGQ2NW83KXIrfDI8PCxeSCo7VU8uQTcz'@;
put 'XUdDRVlKL0A6UUB3T3BReWZeZSJbZFBaTm9fZHpAfTBmbiI6T293bSJsL0Z9YnpOOD87clZoWWJiNXY+aGUrRG0/bksyJlRFcXxqbitsUzJ+LkRZVn5gei9eXyY6UUlnZmM0IjVjPmZxMzllUlsuJm16cTdUIXteWmJLTEI4MEFJeHlUcl06KG83XmU2SlJaTjdeY3dLKS9eLm9rX1spY05wPytM'@;
put 'VXlxTHwjKHR1VE5pOzVsKUc/bFhrbHUlJHxSbXcvLFhqQCUwanNWZjVTMVtYcyxGPz9LRVFubEArdGpdU1tAL3NmVTtWXyFxNixLPUk5eX54Z3h9aT19QHA3fD58U1paT1JYck9nNytuT15+emNhRUNndDhHV3dLdnBfPkVxcCQ7Wyl5aExvYF4zZE5WbzJWP3ZAa28jcmdeTTQ+VjBlR1k1QkxM'@;
put 'RyJ6alk1SnNbfVlMOHxrPHA7ajRmVXxqdEo8NzwoKTVaNUJ9aXVwYSh9NUAuMz9iMGdCZEB7YzJ+dnMrPCxVNyZ7RW1RYVZjQ3FSYTArRiVXNzI8TTNgSmRWflQ3JTFKdk52cipjV1h5TFpHTkBqJW5SMFo1TjR+M3Z8b3hrKiUjWitBR1RxZCYibk0sS08pKTZIQmdxQlFDKHcobW03djdRb1pz'@;
put 'cUlRcWdDRSE8ZDJ9ZFh8MUosN2dTb1csKzxpZkR5T1VPWCtyKzRaSmxlbDQhQjswNkJdUjNtWTJwb0ZvW2pWIU1QaHh1RHR4cVJIfHY7SVg8SllPLks2bldYR0ckTSZzVGJ9YjdCVDRNTVB0JWFwcy5GVH5FbjBNSl0wNl93Vj9aL1k7cytGWEFBfn1mRGJ9fHNJNVt7SmEjV0gxI1QxNEc4NVk5'@;
put 'SyZ2UlRnMHlaU3FAUEF5JWg8UXVIezIhUUpCbTNteWhHI1NQQ356OzY4K0p0NkpPanJOQFA2cysrRks6ajQqaGZRQj5QVj5SUXBNTHZ6aFlObHN6PUBEfUQ5eDpIbVJgPnQsNmM7elB1VSE1YWhpcXRBYWNgajJzbk5CNTloamtaMHoxVCVqQ1hzaW1raURoQClDLnYqUkoiVzpKM14lWFEhJCFd'@;
put 'dW1IVGwzTW0qRj5mTmUsezZ1UlFXITBPQjJGU293cTVDZ0dFUHBOYl9GQWplJEJSPiNLcGJtLE88SzEsIkklOV5iezNIK1RgemMxQFt6TyQheWtVQk0xYSxTTnBGPzpkMHFmaWlocVBbMWl8JGs6V0xONTM4MzE0JiF1WTApK2A0cFBKfiVAYmkuYXleXVouW1BTfGQuW3IiWSJmelBxXXJ4a0Fw'@;
put 'KHFfTmNUYW1FMTxSQWE3emlodiErbik7OSFuYk57fnFPNX1eLHhfWV4oS0xPOGw8eCw8WENCdywleTFGL2xAeDc0PVFFJGNNY05NOktGLzlOZHUsSS96LjVdaXkmaUIzcnpFVnklTXxnUHM4fjxsWDc4cnEuN0FkVDgkXXVUNjhbMjBsQmlKfTRqVCkmeC95VHljY3A8Wngva0whUTR4WER6JXs+'@;
put 'fmlXPUs1eXFoZitDOGErJngzQilqRjchZ1plazNPSFNwWmAkVnoqLD41fDJWZklGfVkwQnpXaE8/VS5NWD0+clpmaUx3e3svL1c/byUuRSt8SXt7JGs7U1Jfemc8amhQPEtLaGQyOHVMNDQyfWxSJV5pTF9QKiQ/ITUxMTdbV2plX0Z1anIwbFR9JF8/WSYhXnM4e058RE5PeFMqN1Q0TiNxXXUy'@;
put 'Tm0yOSs2VktFaCwyWFIoZDwvMGEyc3R4VEh0cCl4Jj8+IW49KUlgO3xOdDkpRExrdDJNZC5sVip1IzVCKTZgPW19cmlNIUV7c3JxNilUc2BESFBxS2xmT3lqOFlzX2EzSTF7eElsbEx2eUpsPC5tOTByMkYvNiEiZGltdTRkWig1QiElUSYwPTVPQFlVImJfZDp0VVAibllkc1JeWGtVN0lfbiQ/'@;
put 'ZEI8WTRqO3ZFbXxPMG4iWT85NjBaQ3JPZGI8aUNVZFdsOlZeflg7OmwvfXpRdGVPVTcsJENEZ3RydiJWSCl7Oyl6VlZjUWFaLGtbQmlleWFlIWRiOGp1Y0NUT0w2dVhbZ3srN0xHaXBeI0pOJUokaG5TMXJXJEldJVtxKDM2az5CL3dENkcwNnBDLil5PVk+PmU8QypWOFphWTd5PjVYSHt2V3Fz'@;
put 'RmxzdlJydlEzfSpxT3JdOCkyUEohVztLbTF7QyorYkV4LzZXPUFsNTZrMjxmSnp7XnBjKituZGFTKk1gX2F+RGkiYlBYQ2JsfXlMfVJbNiQ4QSE1KXJIImhMe2t3JWgpeDJsYCYrPHR8cVQ8VmZiKGBbVCp7K2NIPi8oP2YwVmtHZE5rfTk5Z0xLUlY+KyNjOTYwfmM2aFVuPk45ZFhxOXtGT2xy'@;
put 'PCl9Ii4+VUlqLkNmdVRgYiFZUDM4OktaNE81VkdmM01bPnRfaFNAKThIRC46eShXI3Z3T28+UnAmfl81fVNifSFNRkQhYSMjYGNJSzBOZD1fX3J1JTc4Myp1NHxtW1U2ckdhKUlMWzNCP1V3aShWdl88SjwzRGclUXJlT1ouTEdGVSVkbiUqLElRVnhLMD1fXXQxciJFUntLRSorXTBlfCRfW0du'@;
put 'PXNNRmovO2M0RnJOXWEhUEJIWG0zdV5AeUROR2YudkEwYmlhXkM/bVVxbEA+UjFvRFM2cSVwRzNTRz4qUmF5STl7ZXooentIQG1FfTBRJHplM3lnPTNdZj40PT08Q3NHYVBgKyNbWGIxdjxdP3ZeS0gsZiwjd0M8YDk5e3dwWzB0UTYqWn03NkJTTCxzM2lLN2M5LFYua2t1eGw5NF1zNFl0PG8y'@;
put 'JFFRPT0ibDZrM0dCI1hoTS4lT05KaHdHYn1fL1ZdOV45U1B0W3x2ek58Y2ZTZ0JELzZLLjpBPUUwUnFXJjA/VWd0Y0luPkleM317SXxzZyJ0L2tkPVcudmA7eCg2QSsqZlImLEBATlFHODdrMDRqKDZXY1djNlNkdEMqfnVKfWciUDF6OXg+djlDZmJqVig0JlJzXSFlbn5XT3BgYjRNX2VMdk9l'@;
put 'WXVzIjhaSX5HNk1jdktsOllkY0t8ailZW19tMlJVdThiRzJBLzk3SkReVFF0O0ldM10jO00vaX5pYm5pfl93OkRePDh8ciN4VysuUmA2S3FLeD1Efi47XjpVU2NkbXtZQUNYJmNQUWB4MzcyNnxeKikyKll6Zkc7eFZtM3RhZzl7NDJLOGtCbigsb3U5en03PThLK34/MjQ5e2B6dCw+bmklNF0j'@;
put 'I1sjVGxlZjVtSVFXOntYdGJTZnp+T1lCKilMJlJBO1Z5Xkopb3JhTEJIRkwpQ208MX5eM0w1eixaTmw8X3s4WndBMX5gXzxZfGc2W1lGRjJaNmJ0eWRzW2woJlVHe1AlRHJrW307IW5jQlU+aEVxeyZEITVkOWwxb2V0fS9JVkwjPnVWWippeDVNfmhbSmBTd0UpcWMid2Z4ZF1YSS5KKmx4P1F1'@;
put 'Pjc1WV9aSV1QP0UqQ3tbVmtWRkt3dFIzdDJUWWFESm80Wi5tbiRjQ1AlWz5FRGZsTWJhMiJqTDRFRTwuVEFSdSsldCpsUDVFZz5yLlYseW1wTkFRZ25TXjVlTX14JWBEPFhidD5mPCFfM180QyNqXWpTaSZZZTY1fTc2UXNiVkdWaTphU1lGfltnM1lPe0hWXm1vdDNYJj4qTjlXQnAqSSU4VDk+'@;
put 'NmpqWEBKSS5iRH1MNCpVT3JFSzVgWEJvUnJaS1VTamIoQTJXXUs9NXhzJjx3T1YwNTNyODV4UG1OWkFuSzAlM2MrdU9FMlQ2WWk+emI/fClxNCU4ZHBFVVkySmUqZzQ9ISNNPCVfVnRbNXJPVztzIzxNWTwzS0BAOktGYl5yOEouWX56IWtxdTArY1khbSl4KUtLLl9mfiFSKCZYckklPDtgM1Uy'@;
put 'cElvIixxXnh4ciF3JFUjOW07PEJLUTRgP1NxM3lndXRQNEJoa1ZQdEBLYDVUbEl4a2djPF0oOk53QmA0T0M6cyVlS2JEPiZdc1Qoe1omTExvdihGSE5OJFE+VTxzJGw8emJ1eElPMHdfTyYiTDh7biIsTGhhaUhad19+aU0+LyFrZy99REZqM0NHOCowY35fV3xLODMzV3RJSXtFelR5M2xvKmcr'@;
put 'OD84N00vSD9oeGJmUVZKbDBYJlljI15KM3NVUyVML3l8IUJxJjFjbGNWfWc9eWlyd0dVZFc3eiFOQkkxUk99bHJ9NipMIUw+IklYTDNGdGQ8PndiL2w2flo4L0RDTURsQEIrekZmZDhXY1Jabnt0KzJLM2BLdn42MDhfSU9CZGAwd3lofGpZVC9TLiVdaV9naj1kODZIPmImNjx1WCw9QmRiPj44'@;
put 'Y3lWMVMkQH4lYks5I2RGW1VXa2I5M1Z8YjlBeWs/ajhIKHR5S0g4NUR0fW0mXm9TUFZkNWhLeU9eIi8ydGwpJW9pNWRndmJbaEN0IVcrYWpuXlJCR0lSV2lEZXUuZTNIe2RSZWEuLyFaOlA4akBhWWglQW51N2h4KTpMTjtZWG0hWixbKFV6dCgrNTpTWVlKdyN3Qn1xKTsoVThnXk58bHkqa1U6'@;
put 'Yjs4fkxLQmpuZWpNNEJaZ2ZzNyRHR05xMF8sN21PSis9bDBmV2o4YTdyeT9obnRuKlp4YCVuTFJCJmRPMEI8fFErVmJbS3YyJFpOencocjU+STt1QiMkMW5DRmFUbHhGcnlUKkVXOSR1V3Q+Vl4jJG9QMmtod1Y0SEBHQC9Qc010NTUsPUN1SjAyP3tJUDRLZ0MrJE14ZElRc0F9RTNQMGJVSSgk'@;
put 'fX5bOXN1ek9rUjh+VDcxRFlyY1B5QSZNUiRLRGA9SVhdaUtXJVZBNjZVdUdDMDcoVk9oN1V+az1mPXclPXtXZyMveE4qR017OipMdmVDc2BCQUBRdFZFT0dgRDNmaEhrWU5KfEZ1KVpMbElQJFh9Mmg+N2pvdj4qQDU0PmowKEcufmsmdEFHSSRQNHckTiFJS0Q+b2U7XyZzWyg7Zi9JbkJFeG1S'@;
put 'Z00kT0liJnAmV1FJSTVuIyt5T0dORnRIX2FeWiQ9YXV1dGhlZ3p4aChRcCo+ekUxenVmZ2NqYF5iUFNiPEJTMltMLlQpNWxDfVsmKWBPcWFucCRjTTxlP21afnA/cjR9dElran1qJlNSdk1OOjFEclcmRzc0QG9qfXIvbWQvXWRJQmJ6QVNBb3h6R1lnbldsOSYjRmBXdWJvdnxPeipWfX41fXVl'@;
put 'MzM5IzlSUypJNzlqJSx5QnxIZVFmPG19NERZfU9eZz9yN0t4P1cqcElASkVIa3pbPGxYfUJpMTczZWZMYjpwQTUsXyl2ZEk/QTFxYkVtbWV1WzQ4Iml2L0RMLmR4JD5UNktlfF1HVDwmM3o2WWIlJiEzczhCaylAJC9FN1N6dUczNltATHcvXUw5YGolL35UOVVYaWFfR0s2WUcxSz5lSF9CVTp3'@;
put 'ZkRndmMxInlCcEhtKn5NSHAiTXhqdW1oflkyNGZSUW8hL2Vlcjs+UGx1ZjsqXilQQCEjKVRvZnxbZl8xNkF5JEZtQF1GOCVCenBVezRCMWBNezQlOSEoOF1CTilNNEpOTV9tampEJWE3YHFZMExxUCFkKjBDX2ZqRE9geGh+Z0kmaTgheE9ve007Vnh0KnRsYUNsSVI4PEdMOSJZJlZpbXZZKjMm'@;
put 'T3FVU0J9M3dTcVROTThlWXxtNTBEVElQX0oieSVRO0NCcjhBaHRzNllGPXlMUioheTFCKj5FcCZSRWFEUX4ufnhLR0d0TERbKCs/JUlaKSFKY15VMjV8a1g1dCl+LldYRUArfENIZUN0NkIiYDNrb1FmSV5hZFA0bk9zN1QzWGQ4NXpMPFp5aW1RPkNbI0Z2RmddO3FxTHozSGtSdH5TIVc7b25E'@;
put 'NS9nKVFWPys5WiJpdDdOZSNaQlN3bjZraE5adTVgZHdxNUgpJWRTVEZgclc1X2c+ZFQ4Ki4ldkF0dDB6VV92YWkkNTwoM188a1dDLllmXWg+VCVuRXVDZkQmPENKcEMxYnV0S0goMkZtODtRdFFZZVA2Y2JjVTMlciRFUWxeXWBKTW5QSGpTSlY3e3FjZElBYCpoKGA9XTleSl9yfm5MMH1taUVV'@;
put 'K2s6bHc8aSpVRU9jfURrLllZTUVDK0p1I2MuSyZ3azRnNVlsLkcrJChgKWI1dnxgYGZDeVpnZ1M2aFt1OW1UdTBrRi48Z1NuZSM5YHRtW3VKSi8mNlNfP2E6IVI/cGVDJFEsLCt7TjRBQEV3Z2lYUHIkS1dXb0UhdFo+fjhuSTJ5VnxNOHNYQSFWcFBYPVU3Qk9pZTRadDFkNzlWSm52IiQrPVF3'@;
put 'PVghaHluVHRdWkZEMmJeODFANWVMO29Bd2U5W3B1ZU5jRHpzcTY9ZWJUTjpybn41YUtZfXJDWllmTmlWWm8xZGM/XkJqJT16YndTMjUsI3Y/RlU9KUUyfChnfTdKQkEwTDlpSFNEQG8rKGdLVjVFSktudUZeJDU1M3tTPSRuVyp3dSwuL2dyLFErMiN3LnVGU31GJWBte1UyVD19Sj9yMFpeKE9S'@;
put 'JC9IU28/XndaeChSYFtJQ1cvfUopcGV4dXBPNz0+aHsyeEx6Lj0zY2tUN1ZbXUhdcHR1ZmNFPEszJjpCNTUxfmliM15kREI9emVNcFQuI2BaQG50cTd3cjIwSzV+c293a3MhOj42XyFvWihGJTteVDJjWX0+NXJPM0FvaDhHeklwTnBZNVRVVmh3SllFTVNOfkxKbWFkNE5rOjxjK0NEczRiN1Z3'@;
put 'YUUiXk8rek5FUyZrUn4wYW8mTXt6Q3F0ZDFEfVYwN2htOE5sMnI9Lj40eyY1c2tFUTgwOHd7QD5uPl5VeXNGQzomamArUDhrfEtaXyJVYVZtbW4pMHlCL3V3JXpZcVY2RTQzSF54bE9DTn1BV2FiK3N1ZD9QIjgsKDQ3X0V6SiZZKjYyOnRPPCxzRihvU0d3aHgqdzxbaUAkMS5mO0NybVBqbEA8'@;
put 'JlRoRn1XdnY1X3FsIjZdN1h7Uzg8WCFKcXtDWSw8VGtVMyNiYSJ2ekguRGV0fGlkQ1I5amw3bldJYmEvMEQxcDcjcXVbW0lxSk04YClrKSRHSDxuWkdId1RjP0w8Rz8sMXdtX0o6ZGJFNHFyZ2AufUtULnElYnBKO2Z2NkkvXWBgNyU8VD1NS1k/JGkvOzoocXsoeHtSRUtbeGdjTFh+IUZXS19M'@;
put 'SmRwMXJ9PnQhOmdQKXYlcXpiNFh4TX5rSEw0Z1ckRyg8YDBMUCVbRz5uVjhWQHolTjxOWF1sbmFNPEM3InhLPDY4VT9XRCRyR3dvWkhnc3xnbERQV2lSWCIoQF9VQDs1QHJzKmhUJTVHMF9bKz0rSWtAP3BCSj9DLkRLV3pxZk5CS1UwUDRLdWpTPFlwbThYSmJ0dT8oN2pCPGBxb1g8OlhtI3JF'@;
put 'Wz4yY0IsZm1KYSNVSSZGOSMqYTcqfngqfk0xYztLOCFhZi4kdCJ6XVZMNVBAP3BhQ3xVWlR2PnlnT0hWUX10RXpjbCtDJXEoNiMyZGkiLlpTYC9IZilqMil3VkxqQ00jIn51YkxkdEhGTVIvKGFrK1RBfV1SfGJjOnEwfFdSa3ZJLmsyI1poNnBxfXpfVGRTYSRJeD9xKSV6e2laLDd+cywzZipK'@;
put 'dDtvfCNkXSMubFIiUUxZQF1Vend5VCtYM35xTjwue2JHX3N1NTtLanNDRWsxUTNtdHRFdEZ8aXx3bD4zQ3QrKiEodDY1QmA2JCM2fUlAejh4Oit+STtXQUl7XiVpYzk3bmReaUxmfX1jUX13MDFqaXIwcz5naFJjWVd7fU4sQyZHR3AoN0I3dkB6JS49ZCxkR3ojJFlFfkR8KHJ9Vk54YXM/JX1G'@;
put 'TFtoQz89T01EdThgYlBXKl9SLEF0Wih4NlF9OjhGOi4zW0dme1pleWooT1ouUC55UH40P34sLlNOcyJ7c1VLbWw4JUJBdH5aV0ZtTThbQz88eXhyZTs5Pyp6aypVU3E9T3FafUtwVWs9aGEqZVtGQVZqYltIVE84Vz5pMEpMNWxIKUpWPEN+cWE1MHRRMXg/R0Elbk1ARkVkK3VyU0ohKV9bYWJj'@;
put 'NEsofSxpR0VsdnFgLCYveSNSQHRuUlM6eTlKfFV0JVhXW2lYOS9fS0Q5K3xHTXxPTGI0QFo+UWB3Z2BdJk5nRS5rInhKW2g8Z3p9b3FHeDU3YyVqRURmUENbOEJadCJBSyhyVVUiKzBDbSQ0L1dpSj9zXXcjUlFtTn1OUEBPOk5hRmdQL2tLMjtmZFo+NCE9QGZye09WczJYU19ab01fRz9rbklq'@;
put 'UERVKSYxW00mfXhbM2Modm0vWkEkV2JuVm1QVHYxYmszX0p7TjEsYXdRe20qLCFfb19QZHVmfW5xbEAlJitJXTVsJXE6NlY9PDFdeX54SyZnUTVxOWJjdzxBQlcoL3VDdTBaQnQ0N1FEL217TnF0V0I3a2sqdSopVkswe3MxZHVvaXRTaS9AcE5XejdTbXA4OF5wIU4jOjp1fVFCMWo0IyMwfVRi'@;
put 'Iks6ZV8+a3gsWGh6djdySX5wajlCWEtZXSs5NFskXXE5VGFpIVQyUWhxJGJxZCJQQCZtQyp+clB4Wz0rVEt3PGdYfWxjNEE3ZXd7eVhrVFlmJSMjInBUUns5bT8sWEh4fVBeZmcqJjxzaGBIfjR1YnE7R28vO11OJiNDSjZfWnFMVD9rfj5UVGMpRTBNaCMuZHAmT0o7S30iSGxOey9BdmIyJkhW'@;
put 'fk1ZYi5BYHZsVWs5eXVjfCQsfDxQPyUiQHo4bFRkQ1drYnMofE9lJjB9V20rLGFnS2VwRlt3bnVEPVJee1hAVWNKTFk4WzB3Z0BDaihoaldHeiMpJEtncT9TRnc/d3h9MTMoKnRhbDA1RkskLHVfW0NYO21dYz99MVR2el4udlZSbFlxanlweTZHRnRoRkVVOVNKU24xWSpoUEckOERzSyY9aGEq'@;
put 'Uz8vWFNgeHBYZGJmSG5bODVqRXFibUVrZj1neiFYQ1tpdSkvVT5sV35deCh9d28oWmMjfnw4QVBTL2Z0Q3dOT2t8Ynt9S1heIzZzQk86KzdzfX5za1QiPlJyPnlOI0dOVSFxQHh4c1A4ZnFOayQ4eH5HOCJELldLXmFJTSVqRiZyVS9iUERbdmpLMDNGd3VuVHBDPy9We0hgMFEvQzM8OD9jM31h'@;
put 'ZE0sMV8rem9pLlRwaUBncF1YeSZgbE5BRjVsQnUoTHImK2dyV3xKSzJDd3tsIi9NYFVqJD5ST3dFKGVpXyxfVEFFd3orL01HJUkkfSY5P0U0TSZ7WTpWa31ZYXxQSUAlRW15WSNZT08we2M8UUVYdyNBayQ5bztoIVV3VlpreD4mJV47OSE6WGwwX1d5T05wNzl4QUgoXi81UGwjbkhhTV1VYmcv'@;
put 'T3ZQSkQhOHJ6UEpVJSFWTSY9aEd5WnNFM2pEM10+U1l0Q2coSXpMVkNwNGNBcTs4QlRNdSFiaklISHJ1PDleNEp1QUA9bzFmdm1WSnFjQlZkLnReOFVNLEtyPjV1QGckc3ZzMi9NaTpfaCoqJi5WZitCY2dwJil9K1ttJXBxTHp0PGVGWk0hM1tjYnhpYHEsLCErYmVSVntjZjhQIkxQK1hfPkIw'@;
put 'WFJdfV1HVXlYYSp9OTlpc1ssOGFMR0o+KWA6WEsmYFBUT0Y/e1EzMnd3PSFISnF2bWUvcDg1a1k8MTBgXTN1fjldLz0lWFIkRVVOLjJabjIzcTFpc2F0S3xUKSRXLHcmIlFpMUxnIW1ac3RMUW9NSCUpMlVDIyE+JjFuNy5ufSxFL2MqeCpiTU96c2dkNitdPHFtRSxIIzBtRFIuNlRnRDxMV0J7'@;
put 'KzkySz1Zd19tSixjdVZdLEJKfltuUFFvUztOOlczSzExPi9zPFVJN0ZfQiR+UHtNNzUvKkc6Pi9Kci9UVU1vOF9ndyk5PH1yTCVSZVF4eFAwOD9jRG52NXdZflYhQk1qUipnPj1aanVpPkZ+V0cpamJReGJSMTlONzc/bm56WGh4Smk5WFlBWVU2LmQ6a0lwOm0yfFdwPm8wOkU7UURJeSJfYVVu'@;
put 'SSlOZWtlcD1TMjhTbGZ0cDpXJEl9MSZJZz9YalReRFtjWF81UiYjW3djTWNTJXMqQFBPNDA9fXdHO1ckVEshKmlDfmhMT0dVbDdtM3tZIS48ZjI0a309Lkd+Py9nc253Zy5fPTwkc091JEgidTNIYS8ic3g3Nm4xN0ByNml0NnpLOFkhayJFcWVCN0AuSW1wdGheZkBvTE9iXn1GW0JgNXVANUZ3'@;
put 'P0FUTThCKjslVzJgMDNxXUo6bm8rPi89S2R9Oz1PamFKN3VQYTlKKl8lKW8wTjdnb1ZTNiMkcltxPXttMWN5aXIlSGJPMEwzVThEUy9yQzozNnEvW2BFOjJ6M0xRRDs6NWw6ezdRMW1sZjt7fTR8P2khVD52fn1xTj1HYz5IIl0wajgoaitUV1F8bnM7TnJaemlrOmJ2JStrIypsSUcrcSM3ezlA'@;
put 'SmU0YGlCcFpjL3FwLk5iZTldZDw0JFNFc0B+Vz9XWVVsSi8sZlUkaU1iTCo8JmgjeXB2PylCRklALDtOWD5uXWplTG9jdSR4bXZHX1F7Sz1KViZeK35YMTopQGl3Y1phdDZFe2NjTk9BQTxNMVs2YkwzbSUpSFlyNENyMmRIb2QqeSsqUShJazdnPDE0QF1qRDYlZHZefGJQeHhQNkUqLm5XazMq'@;
put 'U0N9TzYzdVB5c005QCFNWD9UbVM9Vk1ec0tTMTleeDJlMkNJWW9jJXxFa0dgPy4ycTZMfD1QdkRWayxga0liWHNZQ340Qnl1Pjt9KXt2RU84eT1OWywjP2Z8WXlbdnJkdyRJW0s+YiRNRn5uKE17P007VzgpNnYja241fVE9PlN5WlZ5Y3M9PkFebmk9e0ZGKTgzWz81STlKSTNjXU9dI0ZBIipW'@;
put 'e2txPkU2NTIwYXVFOWxoeF9kZHB5d2FtPiZGcmIoa1RvU3Q1STtCXUxQO1dnJEssNUxBZSs+UTRHMEYicSg/Tll9IVVefkdNeThBLHhKOUR4Rk93SVUjRHUrKXopJEBPZUNUVG9mTDFdX0kwbDwvKntzYmUob2xOXmBqK0g8aUQwfm8ye3N9TlZITTFwLDc8RkRvZip9cFNaQDRdZHk5aTtQQW1p'@;
put 'YG5fXlQsciZdS2t4eVpgKEdSLysjdixUWC9Hck9qeTZEfG59JkthRGBYYXAxNFhicWRjMCNrd2pzYElUJnNfMz9IcXhybDxtZCxDIVFrbEYhczlVbyRjTV1ALzpmZUBEJFhgQ1lxZ0VuQml3YUNITk1JLypaYXBOLz95V05PcjNHZ3hhIksxZV08ITIhWSs9KEJxfmhDdzFfNWpXQFtUI3U1Xzwu'@;
put 'eCZtJmptZS84S2Z5JXIqR09dPTRAZX04QFEyPUUiI2hvZH0ke1RnKWtuc2Moe1tKd1dKUDR8M2JYbEElc3NTcDR0dnszYiljSD5WdHcsWWlGaiVic2FdYiViRlRUPV44UzFNRytkSDtmZ0lbLzpKOEZLPlpYMntsXkszc0ooJCRYTDZVPW1BMDpgbVNCTkgoQmwvRDI2P1p9akt9JG89S3JJQ2Ak'@;
put 'IkliYERGQXIqSDIqYmZJaDpuPSRTUzMxIUdnNHczWCtrViVXIVR4RClTfCZ+ZyQ7XW5uVlFnWnd4fX55TS8kIiFjZ0A4dU5KbVMuIykkOE9pKlVHOl1KKytyKG1IUVhFQTdqdElwMmpRY1pPIiQoMyFeSWgqYHVgcUNkfWhPa0ZITHo2SixbSWtvMW9CQ299V3R2S0UwXXpOSEcicUU7PkIjNVpQ'@;
put 'eX5lOXlSQHZEaEw4TmZoNElRdHpgIWk+RC5yRz5SUUxvYW5xYmFXYyIqYUYzQjFONDBSJk58cGdWdHd7KHJON2suPn1EV0BfbGdsa2ElbGpCNSQ8SEx9fkQlYjY9dGZncytVanNDI0dIcjIzMU9rJjdaJE1oPyVMIWdKaEtnZ2ZLPkxKZDVMbitPMnVsTEhWcF9ZRDAkdl9Gak9ubiE/Yi9SQiIu'@;
put 'N2VuYjVAMG1qbyQmLnttJlhYO1VqcFlAY1Z+RjVQcF43Wj8yIlpYOE9bK21QLngiTD8oYHR0KGpaJVhQYDUjaSsqW1dmJD16TTdsMUpZRipuIj5TfE1wT3JMSndgek5JKGVEfmpEQFBAcXlfUV9iKWIwJFI7YGZseEdnL2ZQaXUzYU8zbjs2U1p1OzYqX0FNalRbPEBAaF1JI1VqUV1AU3s6R3hU'@;
put 'YUB2aGUpX1JuIldyM1txVDo4PVFfXVEhRW42YmBJLjIrL343a09GL2p1KkFpMnp3ZV1jTEJdLi5qKCQlLzlTezZqSks1W35LT0l5fDZnSSttbFU/Y19mVlE3KE5wQ2klNGF4JlZ4MUV8XXA9bDlIVykrLHlxcl1jPFsvfGp+RUJrcEkkUDE1b15UM1EjS0wzJlpAczwvI3IvdUt4MHhecGlxMUAv'@;
put 'MURoTlRjOE5OKH1DVjpKajEkbXg9MjJTIjlENUBBSjA1OD5AKUs6bytxWHxvTD1VMCUxbl5mdldmWiY1Q31kU3g/O3xSPCkqLFY0Z3ldLHRGblJ+cWFWbnEqYXthdlR1MT1kenFbOUx+PlhXMkE5bTdOfkljKmBtTkJleV9WTmNFYUVlT0d9Pj4vO340d1d5bnUzTzI3Wi5sTHErIV52cX41ayQh'@;
put 'MEojTF4lMX5FNGouRkV6OGBjdCojNk9WR2dfPHs5fFE4Y2cwV0RARml0ZSpMc0p0Yz1YcndEU1Q+SkxGaTshdiU6MWpeZklWIjlfJj54RFddbkVYT3p0UT9qZUdsQ0d4JHprc248JjA8Vm9jKCE3fERqTFVIS0B4OGAxT1ZhSUIlNDxuamkyR3NZYVpWX0RtKCFjfSx5UExeMXgxczFweCZUTVpM'@;
put 'Tkdfe3puZXtmdkN6PUp0T2N3LEpyJUVUViEkcipnZWgmfnVCLzZWPG1AUiU5LjZjYTQuIyIpUkoyfHxNNEw4K1FkXzFtLndCYVM3dj1aWV07NkgzSTljZlR9eVExcCRSTS8sVT4rWyRFa0duSkFEQlsxLiNMXSRrKHl6SWVtXm9DNndEekkyVHNuZmRXdTM3MU99bnJ8TlNMe21lM1Vgcn1pd1BG'@;
put 'ZF9UUE04Nyp+eTQpVHhNUV02RzhvI0J6ZDZyPkwvRzdUM0dRQXl9ZWZCO0E/dVZLaW13Miprb2Ftc1BGTXN6O3lQN3RRP3Q6Xjk/NFFCQTFYbSp2IWFEfkleKmZ2UkNabkpDL0ZVJldvJGwoR25Eeyk4bG9Wc0YzOFpXVnMoO3oqSVFBQjp3eyFYU3tlIVt1aFhhdCN0K0ZjMEtxM0whaUV+LztW'@;
put 'bF40KmlYfHR0djNLNmE2T1kjTyU1U3I5U09dMnI9ZChsZDlHUiwuPFhLdVJIRSFiJkxJOXpuX3p+PXcpPlRRQCxtSUguNnwwO1Z4T15TOEIyRUpAVDZHM1V2SGJ4SVpQUV94cnYsOyI+QDUkVVIzSFkzS0xMQT5tR3QuKS8+NVtpNDtqPjZJWF5DQSIrLzVbJEkoYX1SdnNKYGN+N3drJHg0bnx0'@;
put 'ZlFQJXNEdHliSX5SfS9CfEpJdzVoY0FVcmxnI09mYS55N1BlQWpjem1ZPTJeXU08fFJqTjhPUV0odVMod3c9X15hbVcpXzpCN1gkd0A8QjVXWj5tdGtvdFVQeiZXPUxNOVkqO0o8OlslUjpWNzNGTytte2c4dXs/JXpoKWExM2ldfkRZe2QwQ1YkeCZ8OTYqJkZpelhOSFh2PzhsbUErRUdOZyR2'@;
put 'OHxSQ2VUa0ppZ01scXdmX0RsZkFBS0Zge3cpLDxYNmVYMWcvUCpQOXZUbE0pMEtfTVQhU1NtSkNQYl0oYSoxSjNKX0QhXi5fRmwicFg5V0ovTko/XVd5P08zXXs2fi9ebXJFMGRhTjp9XmlrSl0oRCVHezUhLiwzUEUuMVEkP1hHLCFIQSVvXilCYSwlcTBReTU6IzBINWM7cylOUEQ9Y3dRUHdz'@;
put 'LFkiXSspP1JdPDUmbyIvQklfdW92cWpFbyRqWy98L2ZnW00qbXdDcD0hSiV+WytSbz01IXUhY2dtfGs5U1F1cSskLEl8c35fYCxiLjdEL3JvclZ6JlhzW2dsTzFCZGZ8TmY7elYqMCkzY05WdH1GM0hQQ3VpMihgR0I+Q05sR1ZPfl8pfVhvRyVAYjI/dG48M1dsYmg+W3JyT0taUkhXc2dJYj4x'@;
put 'RzlaW1gmQE9DcyEkRGEoKU8sWkxmN1Baa0Y5N28wZm4zVUUoInkiWUlQdHRPdy5EeCFkOXdTPjdnZ0lhQiRmbCkyLiYyaWYvR1lrKHwxXXttUHsxPzR0Wzg2UXU2WCU2NXQ6JVFoV3UkYXlPdUlITmM5JS8oOGpRNSVPVnpTWVhEMGJ1V3B1cX1NJn0qZ3dlP3xza09AZk4lZD9iPkojUEI9Vn5V'@;
put 'LDxwampVaUFtZjM8bUw7RGNNLmVFfUFbSDNmZmZ+JEh3Z1djfE8hTiRlaWBDfEsmYEZ6Jk5Rb0YlaTd+YV93LjQkfnlyTy4+PikrYTshNElIQChIbkY1R2hHW2VHPzRyPFhUKVheQEh8YzJtL3N6dzg2KXk3biVyI1l6KmgzS1thbXZWamo8MjlZPCZeaEdbP1BsdV8wIl81YiY1ZGxHLighTTcx'@;
put 'PHg7KykhNzNGYCx9SU54QmEvSD9wTTl6SW95bWNqLFg0L2JYY0N8TjM8OHFHKXl8STEiSUpYU0FQa3tTWkBaRDVKU0tPeV53JksqLEYqdWt3ZTx7elRNU2gxa1NKTl1XP1VjK19xanFmaSw0fkdWbUtSRGl7fUZLZE1OXUl1UTlqZEo3Sk98W3puby9fenE1RW1OQ1hlWztRQ0ZzNmxOJixnfGks'@;
put 'OVtSMXZvRl95L3hkMXsoSDZhRX1lfC5RdElhOnFsJkIjRXlTLGFrWVMyfX5kUjJuYmpTU3NjJCg/PihYPmk5JlR+PlVVI0c1SD1NKW19Ln54MkM4VmNtSC4qIzhiNXcseGpoRmY9dVU9fFc6WGtGOzhCLmtiRG9aSCtZOzRpOn1pdEc2e1IkMyVMRSV9TXd2eSN4UVhVNkFuKiQ5X05Gb3dSOFZl'@;
put 'VXwrX01XP1IvYFB6Z2YmRXlRLCxbLFt7ekNvREZEOmopYm88fGhaeSZFNHszWm9MYHRmOFhbUnYocUd2MipAdVopZ1EzZzskOWU4RUZ8OGpgSlcicjdLMjovZT58aCQxQixgVGhEUy9FPWsxUHU4fUhVXzZ+aFJqRSkhZy5zcF8lV203UWhWWk03YWxgbHg1eH51QmVCWWZxVUFpbExibmF8Tzdi'@;
put 'Y3pKK29Be3FTIURYUjt+UTJTdWBKKTN1JVJIbzhrX0g+XzdIRUFKXT1sbHU3Jlc9TFk+UTVXJUAvWT4vKUkyZlNETmdzJj5YVnwkcil7QlY2eUJ4T3tgd0lrWzh4QWNWQDh9RVBDNGQpT3RENTtwXjA0aElNPm46LzZEaVB+X0ZJN3k2S0BwXTZJeC40cjBDbnQ2TWxzKXhvK3hLOnh7VyhrN1Jd'@;
put 'W2AvLnc9d08+UDQ0QD1jZVNFIXteWVJRQ0IzSjAxbURXbz9yZEFAdnArZkB1QG9zYUFHdFRVJFs8V0hXOCE2JT13byVXPHB+UTdqJWVwP3RWIVRCSWpoZXU7UT9LQE1yYDIkRUtwKEhYW3hgM10pclUxQmZ7fFZGYztDeGRLIUhWTzJKWSU+bEJNeUReM3EkKkUvUm1oa3w5NF8vVzFVZ2kvMk9k'@;
put 'YGZUa15qcW5QPXFMek0pOmhqOVAzbDd0TzNhITZCOkJJbVpwMT1dXiYlMDRyTmZAOipUVmtJWTMucGVBT3AvUWBuUEtlVnghUiRzcThdVmNMRiFHVHxVRDU7aFhwQjBuXXMxPUQ/S31AOTEwSz4jfjM/MklmTDE/M0M9N1JWdz9aSXFSbSp1eUMwPDhncTlzWFR6Ly5bOGh3ZnNaVV1IWGoxKVh6'@;
put 'QihDOUZmckd+fFpoeio8VERvKylPVHgsZGFGOERzQllCMHgvPHMlIU46UUVKWH0xPGJOSDBDSUJVSXYqXllnWDtbYSs3fThXT1FuW31SOHFbKm9UWl9JXU8wPXdqJWojR1VZTkdtUDM/JFsqZGZXb0k8JGE2SFdANTwvYCMkTj91bk8kPTt3ak0xdjVjL2xsJjhTRlVPRTQ4Izl9b2NIJk52Wm59'@;
put 'UjpFS0NIKnpnY3N+K3RbZDBHZCorNUpPWkBFV286Xm92P11NampoLFNaM1N7K1NWb0pgKSF1OUhgJXJYNU5rVTNEVFp3WHpTO3xpPFZ0ckhnOndENUFsTkIwNnskfmZkdjBdRXQ7eFc+V3c5WTZ2eDNlZk8maHBxVUpMfCNgKH11fVBVOmt9ZSE8SmkmKmt4LFlOeSVKKjlAWCkrWSQlaHJbXnh5'@;
put 'XyE6SWVXMFF7Z2dgam4yNVorOml6SmtaInFRRXNtKzhEd3BbKTI8OGJPTCFTPWBgIkJUY3lzKFY9JSxobUBEXzY5Z2NXIjBVWFA8Nk43YV1CakYvMyVZdHdyS2tUO3EoSVg4bysmWVhvKGZ9Kl43ejhVbEM1TUhTY1p7ZVlidUcmYmk1QUtXen54PzIkLyNjTEhpb3FOTCFBL0skTE57aXIuYlAh'@;
put 'Rl5zZzkoWUxFeEEyL1tFfmIxMjQ6Vit9I25HZmdJRDI+Sy8haXsycy9LSXNrMnkrNUJoSCVrbzhtUnF+PmliTiZKdDxwOn1fdVgrS3N9LkJSMVlqOjN9P1VGXlNEXkV5aTl2QCguS0JPRllmIVJpTEJSY3FscmI0ci8zR35rNHlAUmdSKlR6e1FhKjFdM0ReNHlQeTFKY3h6WFMqWCs1RThweHhP'@;
put 'Z25qaCxsWjQvdiFSRjovdDNLWEBLNS48W3o0MCZHWmFvNDUkcSo8NHpoRVMoXyM3OnlJTUh4VW4qPFl0P1R4NFtHODtbNU10aGI6QmpQUU87MzNiYV82QGh4KVd0am0jaiNGQ0x6QXp9cWJmfkleOSMwc1tSa1JeSysjcWtnJCt9ZG81fENlKS5tMDkzVFJKY3BaeSo1IklXbXtDOXolWzdVJj10'@;
put 'VENxJm13RG18O31gdzBhIV8pVCZXPHpsbjVxPUZ2dy5Ra2ssX0RTS0NdJjR+RWVEQ048ekspNXZZPmg9TWJ4eVhQUW9vNX1YZi9ZMTlWa0ModzB0PVF3QV59Nng4b0dkWiw/flNHMi8qQF8rXndYfWgiQ1U6Wys3LjtWYUJxP2dqOkxOQ1VvTFsxPTt+ZypQYnYvSnNqM1M6dlUwbSJKPjBUc2ZI'@;
put 'LExvKjsuVFd8SSx+YXBtVn5nZ0Q1dzwjOj1Xbz1VO0M7Rjo7Ujl1TD5HWGV1NEE2NitDKmM5VTFmVUxoQ0dJRGEmVChmcGk7SU5QMDljO0pMY08uSEAwMlo+Nn0yek5yMnBjPlViPGg0ekExLkh+Zjs3eSopZ01dOFZfWThCOWdDYnwmaUM3MC5GdEt6fUB8WHQzRT88IXEpW0UxYCVCV1QkX3FY'@;
put 'WEtdIztfKzxFL3I5I1RmNWNpaSwoNFY+SyhiaFJEfT9aVSoqSFNOPyZEIW4zVERCPigzbDhsemZPLDtsP0tRRkxOJUJqPCo6VTckSk9iSihVLnJwcH4hbHYkbUY0Wyw7KVE8QGRVQGYrOWQ2JCZlIk42dHJ1L3lZcjN7Ri9wRlgiW3YsdXkmWX14d3xuQXJ7cCxEZUkxZU9fRkp1dDJxfWVLbyFA'@;
put 'dVF7ZipOaXlJclF8PkFTOUUpazQ+RDA+Y05lQG5EcGErM3kibGBfU1c4OVdYYTE8RTM2L3o4N3l6VkRUfShSPE9gWXhEMUgme309YVd1QGJrVmlUVVo2PSE+KjxudD9BcXllXlYmPj9hKywlbns0RTJua3E3PlIuPmswLE9KU19jQHhbR3JzLiN5U2JrMTdRUzgiVD5FTnt2QDJJN1czPnF5W0xo'@;
put 'K3A5SFVnOjsyaXhmTXA9NGw9anlEUiImbG5+UC9JcnBYaz85ajsyK0RiNWg9bEZ0X3hKNmxOU0BUIWNXT1tyfWAlISk6M0QjK0o8QFRkTTZqISE+W1NzV3lVSlI4bCUxMF48I3huTms7Pil6YkJZX0oxKjglTG1ibnY5YCteKiZiY0lfO3Q+eyImP1hvWCg0e15fe1BzUzF3cVlSYEUvYyt5eGFx'@;
put 'NUtVZFksPjJMMntBW0VEO0Y/KyZrWENpZDVONCU8Wz5uW11VImRHcDZJYEc+S00sM0RiYSZNKXZySmt4fl4mVH4pRTFDN3YzTnVpUEJKbU9YMzc7ZX53OCYic1FYMFdJeHdmXUEkITdAK3x5LyJJTTF8d2p0Xyg4Q2c2ZCN9ck9hXzluQzxCSn1KcDpCLnE6MEBPXX1IQXkxKmQzLG1GeyozZCM8'@;
put 'ZDJ7Sz1+flNGbihEMm97NlNzbXBVK3I9ckomYjQ7NDZVSnMjSHhYOn5rfSskNnF0U29hKGlrYmlGQFh+ViMoL2Q0biM0d0wzRTkqJH0lTnIyQ14iRyFKPntYIlhZT0NRXzwrfFkvWlBuR3B+Njp4KVlwZFolIkJbN3ElZFQqNWd3Vysld2whbUdvb2EzbFg2Kkd6QlA4bGolQGxIZWJdcD9oJCFJ'@;
put 'cm5LfXwwPTQ9Qmt9WWdAUXU7PC8xYW1JfGNYOXBsTX5RdiJkfl5oWT1gW1RRfFR1fVp2aTAjVXhlX0JFYn1nTlR+czBIaTskMkJQcihjYFoiaTI2Smx5cCxoPypwIWpMIyUhezJ6TWxQWVc5JH4yLG1GPFY4Pz13UCF3MCEhMHJXZUkhSDZTJHhJNXd8RHRHMEV3V0ZdTkFaZTd1fFZve0F2YF1v'@;
put 'bmoxQWM/X11yTXlIVkRXbWZJNUphVz8rSyNQZGx0RikvfFlJMzU0flp+LnlKUFtJLjwjNzpGXV1adGNSI3ZFLnw6WT0xQH48THhHKUA2YSNVcCUmKUEwQHRXQiVJckZ+dDdtYUd2M2I6fDNTeVBIdWg/OmZ2RnkiNEJoXXh2PmokV3k5djhZOGJkSGR3LnR2NlQiY21scH1zQnZuKFh6Z0lhKFVh'@;
put 'PEZENm5ORHBFcm9nI3JrbS5fJX0xR3x4QENmJGY5aV1IaCRpQlJ7JnlLX2Z+MmdZeEApVVRwNjAmVDtfMWRvZyZ3SiZKX08wJn5yOEB0LnV4UzRbbDk1JnFTfiZvMCFqMklSUXJ0aylmNDFobEVOZHgoPjBULGRfa3YueHZWLzY6RT93czhTSyk/JiNhS3AwPUszfnFsL3NSbnw1bn4yYzpaR2Ap'@;
put 'UTlJX05OMiU2PVQlJGB9emFdNj43fC92IVNjVTZFc1ZQNFJ9eUMlcS5eKUw5ZT5qNmo/U2Z4RWtgTF0mTSE2WVNXYns9X0o7IjYxd3M1JGh9WDl7cCthXkVELDYxbj81M1czK2M4azlae2RPcVFwOmEudilTTU9WPWxGbSV8NTlGNFsvTl1CIUE9e3dzSm5udkRSci5Ie29OT3FnOz0yN2phZWEx'@;
put 'eEsvTTdoYlVlMzlyIzl8e0QuU15uS01rOSw/U3twQCU8Z1R5eCV4Sil6VVpvZF5NMU84NXVdcWI3aFkhVDdUO0BQI3x1Y2N6S31FMC59YXV5RiNKJS9jXS5VOTZ6WTVYPXJFcE1wSChCJWZnN3RTelNjSkRKcURKaDkibVlGK1UxVHh6RTJxelNpdUFNdy5Ga2ZLKWFZTDcqJDAwIlpbZGVoRH19'@;
put 'Ny8iKnx4bU8qRTorekdhL2N9NCo5O3NBOENyUlk+MXdXOU5KZFc2WWlZdDQpSnNLMzY3QE5SLChMaWRybW54aHo3K24oOHMkZl9xa0o9RT9bdC9CemEhYnZDPVBULmBJbV5gcCxXfE45MyVQITEveT5hS21TbTN4YD9AZGtjSytIQl9gN1g8aSYxMnd3IiN3cXElcTdscD52KFtoQVpTaGYocVYo'@;
put 'STg4O05PbVF2eX17ZGlzJDIyeGc9ZH5TM3dWcXA2V3NPa2lRaXVZNUg9cGI+SzYvVmQ9M0FhRmA9Jm9WIUhJaWpHaD1FdlI+T3s+ZDY0PHJefFM3Omp9N2BGW09jMzw2XkohT15kMyJhdzZBL1M5KU1sXldXU0lKL24hcUpNP3R5PktgZkx6UEg6VDBtWSljQWtKRW93eW5lZnpqbUN8dGZSZnRA'@;
put 'ODcwIzlaKDF2MlNCeSw1PHU/Z3o6QSZ3TVc0O1lGYzkkUHBNV2UxTWBWL3QzT1gxaFNhP1dnY3ZYflZVQnw2aHtrdE1feHk0KUkrYiEjOW5DWF9lVXxrNlJaakp2VUcvOGt1Rn5+W3ZINU5bMEVHQX19VmBrL3BqZFRjbUAwdExqZXFjfGFPMzBoZmdncSg9QjVLImczYS9qPVRAbjtqYTFgeTBQ'@;
put 'V2Zgd2hnfHl8Tig/PDBdeFt6bltnXUBSczhrMn13UTdCbikvPGtSJlBHMXw8RmZ5O3kwfTZYTEp8WCZueUpGXndRXl55OVZjN0wiVWtNcDl7ViJge3dSZTAvXmcmQUQvLGRSaCMvNkUyXkM4ZFhBK2ZrRzVfXSsrWTlFJDh7dURvPS4lPE1uMHdQe3woUixEWHhAcmJHaDY6eCNjTCJPT2c/L3pS'@;
put 'X2VFMyxULkB9P0h4QmUzNE9dYUltTks+dVp3L2wrWEozXlBWQXVNTlsySDw+SX5zR3F5RDImTTRHSz51NThbPmVEREptbSE2Oy5YbFpdd1Z2QSUoYXdgO3d3bClMUk5FWyI7WCM7QzNjbjRkWjA1dUQjJjYydF8vPW08K1Fxe2tGW0lLbyhOdytefiNOQHM1O1RWfUJsVm19YEdLWW0sdUpoLGJX'@;
put 'JjMxamd2SnUvZDRAd3NASCF5N2hIL2VFKysoQDJjZGlDNSZufHJ3dVhQKVNpI2ElOkZCdXlWdFZWQ3c9RDhjXjNXdCxYRUA6JT1kdmBXSUh1Yzd1XnFAT25keCx+Z3R1ZClbJTdMXUd2XWF1Vjh0QkhFJno0V0c6SipHXk96d0NySixvP155YXZRQVJ9X3cxWG1OVjNkdSQvekZqaEFAT0IrZC4/'@;
put 'VSosIi9CV1NQTm4yOzhaPGUhRkZ6eUA4YyhoZzRBVU1uZiheNCFXeypqcFBiQXR7T0QoKlB5Tm10Qjp0cHVCYXhaIi9+fWk8YEU6fF9uZ1tKKk5YPTBee0kicE5CYU88Kko3YjZUVSM+S25wQEl0d3NXXyI/UnxqeFlzZH1jOWpvNjFndypbQlhKYn48aiFnITQ4NDlsP25tbFpPeVEqYDNiSmda'@;
put 'QGkiVD1tK2E/XU5JU2Y4W3ljT21MTW1VVnArPWwiP2JsKi55VUt0b3RodnJBVzQ9Vmp9RTZAemkzKGspL30vOCZlYFc3clFhfTFyQl9uRG4vOEc2UEczVSxRTnViNmZjMk5KWk0hX1oiW3dWXzYqZ0ZJQD4kMitNPE92W0FEO0lKVTxuK2FiN25lJlNNZ3ZaQEsjZSRWYGg+bX1HT1huYHQvLk9d'@;
put 'VGsrO2JxUSs0NlsyK0JCNSM+NWoqXT0uSSFXKCRCQlU2KiM6N05YRkUvW1pTYXA3JHsqRUM3JXVSKHgpUjdaRFg3bTpmVXx2fjAvZXEzMi4ve2pOPWlpTyRUQDUhamRBZn44SCJne1Z5OyxKc0orY2IrQVE/alZuNyFyZkQlWi8oPW9kVmdMNytPbm1kTHIscit7WzF4cDF1aUVQcXF9LD9pPkoi'@;
put 'ZzI5U1duRmFyTDc7ezw/ZkM1Ump5fmIzQ3M2Jn4xZkRtRkF6YChFYFFnQHlNbUo4aXRdfiZKcn07fnpfbjBCR19HM3tOTXpeME90Y0M8TDEqNV5XMWcpUWFsNnV+OmtHcml7bykqcURPKTAyOTxNOFo0KF12NzlCUD91bEleXk0+KGJ1SVF3Lnp6PFVYbj5bWSU/X0JacF1uYVZKaFlNKmtEa1Im'@;
put 'fiMpRHU9UmkiU0RMKko7PGhSPyl9S0g1ZFdgVSt9YFNjOihlc25oRXZeIzZ9eFsoKHp4bi8weT17I3xLbHNOJmtxSzxYQlBXQDl5eUVVd3A/RS4yYCJuVEIiLDtZIT1TKXZqNSg6IlhMRElHO2NSKndnTSFKc1Z1QHB7O1VRRHM7eWpIOjtzVFJLd3IzfncpWXYzdmZqQXV3c2FXRUZMMENNeiQs'@;
put 'a21Ldi5SRlFvR1AvUU0qaz4+X3E/VWl0W0dzd0JgKHdma2dJLExVbDglfng4VU93blNDPl5LQGhWbDlCMj96RyhUVnRJPWVWT3owY3tEOFlSfnt+JFM9Pz0kbk5sZ3RPTzQ0L106IV03WSwzQG47bDlyS3hZZzx+Vz5AQiU9STlmZ2A1bjBYKjM3VFBsKFNzREJzcVhneypSaD5FbzloVk5mQWU0'@;
put 'dTMwRiVmKmQpQiYkMDdZamI0ZmlLQE9mRk1dNWB5fmhYZUgrU0Q9Uj5RcTRzc0pbdjFLJS4mdVQ3UltOcUAkbGEvQ2AjWU1IOSYpXjJRYE91T2Qxa0c1ekN3Zk1vVGg3fDZfKTYkIT8rUEc0YHF0MHZtI2tNXWJHWF06eEs9MjF1aVBQNkY2MTs1XnVPIiJfS1EudkJ8aTk9IyQqZSZxdVhiJXFi'@;
put 'ZE9qbDtVdkEicDMqPWRxdCkzMnNAXmcuVzhLZ2k6dDlnfio7Z0l3Q0g7eVpFRXhHIz05L05DOG47YkFyQ05jaHRsPklbd2FqO0RiYnxKYzNRKCx3IVhuP15jKkJbPENCRyJyZn1rXjNXZDkmSnNFUV52bUkiOltzaXVGTURIaWBCQ2NSfUt+Qn1lc19sfTc4SFA9OTFhQU8mMzUhPFFbU2t+KUJs'@;
put 'fjgkTnEmdD4jQGdXL1A8blgmVEtgMWxZNElZdjFQel1LbHpOc2lbJihBO0VtX3J6IyltbEVybCF+S0lNUmtHYndPfTV3Q3x2QlVDZk1VVzlwUlBdS2JPLiozd3QqImlRczZYeDZpNHJNPEg9NFJEQC4mfiIzQWo/W095PUxBdy9Td2olTCQ8RzNtUFFtPVtJYXleYHdRYnhiXXw2LG11TEBBPlti'@;
put 'ckAiM0hnekJTK1o7UiJUfCQsYXNeKCxSejdZPmd6KSt2eWQmTiZzcT5ATHI4el10TlNBc2AqJkBxPUJSW0xgPDM8eSNeezY/V1UuMyN9L3NFOjBaS3IvUjc8ZENhS1JDNk47LlhtbiNERj4va0VUZyQ7WjU9Pk1XMXV+XWd3MXw4YUB1YUBdKFAmZnsjVS44YClLQUZ1M3RzYlhEeTR0I1M9NCQp'@;
put 'Szl6WDM4Ik5nNDRSSDNMMDBzY3RMNkJ9b3AlY3gkNWsxLGRoX0BfX2k0fm9mQTMrLDxKWTBRNUsuP2dCI0F3SUFncT1QWFhkPFRRXmNYW0xHaXBDOm1JUVpXZmxdKX5qIzcmKEkqTSpfQjlnN2tHPEVYO1MlX3VjcH4vU2crQGEwamVmfCQxeklEazplZm9mfSw1JF5kbXM7P0IvUiosJEN8Vk4y'@;
put 'UksqZlVnIVJwKFA2O1psdnVeI3EzI15nKnBdcj5NYD96Y0J6bW48OCh0PTVyX3xnSyF8MlR0fmlZeDk6ajRXSnROWXhncVE/TH5ARkRMNCFOWGIreXZ5LyltPTo9OTt1Lms5OVNNaEZNYVVHajBKZFU9WzFjYmZlQHYmUko4bVphbFNXeSt2eHo7fnMyKVppMmNsdTlub116ZV5QWWxkJVhxITl0'@;
put 'fHB6TGsuJGx5fjMwOCVYKUdPX2NPUGAxI1goYlsrWlRrXT5xcitwTX5xaVtsRTpQUGZibGxDfF4xbkRpKUE4cFVsYXYoNDczPXpWVXxjNU9jaXIqWSVDMztHOD5veW17alZMRDA+cjE0QyRTe3dwQSxuST9zTU5ncmUyflUzb3hZUjJOcjVZfDA7O35RJU5kWTIjNGNxaT48LiomX2k+O2kiQ0Vg'@;
put 'ME4kNUomIzZqI2Q4ZClHPUhFXzB2fTJMdlpmJVZQMUpmSX1AUU4uK1lsfStwRUZrdWNPSFVoL3wiLG10TDVWLjY7dGtTZ1h+dW40alkuYSRyKFtgXW8zZVA1allBWCUvKzRKVV1SQUBbdkljdTBZY1ZTP0t7M2g4eCNNNG42cyVCYSs9OHJ2XT1oJFd5eHMkNks6Mm9ta0goZURYZEE0IUBnaWx9'@;
put 'IyFURCkibzBjVz4zUGArTWw8RVZ3UztIOVtjd1hvWXx5ZigiN1JOVUw6ZF9MJkdVVElabncpZilzJmEuLCE/UGVJbHl0fCtVZnRmfkNge1Y9ej8mc0VJcVlLUFhOKUVMOkkjal58eVNVdHZqKDtGdihfbUxHYG9JOCpYcixZT3tvSXFHXUU1Ojt5NEJFMHpTWEo8MEorPSZGUV1neTZ4Q0VVUlRJ'@;
put 'UEIqfj1MPVRVQkBbdU8/JltIbk9ISihRTkljNkBeInhMcTQ+KVhGTHo1OV1Pdk14YERlKkYkYyluVHJQe3EsVDVkais4NXY/a1FHWDtxaiJ8STQ+cW9aMzYqIXtZSHRBI2glMHZgSjNtT31wKWM6Y3hKfDlCenMsTmY0RFtCUEIuPXJZOkhsdWBvTERzc3IvR1hhNUlXdFZdLFNAMXQ8ZEY+Z1Vd'@;
put 'OzlfVHxsVy5gVUspTHNETkRxdnp2KkJgb05IemlKO3cud2RaQ29UajFiOCo2KVd2V1Q5UkoqQj4yQmU4PDJyaDRKSE9jYXw8ME1CV3hoO2R0R2VqX0lEPGNsSUs4LH03Nm0pWzExdzZTc0dkOiUxfWl2dGxhaFdWMFtdNit5bH5ONGFrIVIkb2RGP01jaytiP19IOls1Nk1fWT1gWWs4e3UzQXRq'@;
put 'NjM7YlJfaU4kNk9ic3hlVHlxWSpaQyx5QnAodng9R3dCaGZlXj0lUWJAUFV1TVBvaXtRS2hXODV5SXBQLygxUyhPUyZYV3dINjdDJixoViorNTJdSVQyUXsocjl5U1BYdHQhN0Y3cjdBTy5RWGVdbittSnF8VilNTnhFbjRXMWtRdTJEbXFpLHQkM0sobTtqbilNaWtOcHNfdjhhJnMiK3l6WSly'@;
put 'WVEmQVMiTFJERE8sPEhjQlMiYnIjY18qdm18YyFGaHw2IlUkRy9QanxyQihRLnVyOVdNLy94Wyw2dmxyZX5oPGVzI0Imdj09Ky9jTzopKjI9Xlp9M0wlQiYqZTA+bUEjUT86YEtvTjlzSjd1UVFVZChOfDlMU1ZGfDhsdEJnekh6IXg3eS5sWUM1eGpHbGFVQV9qU280RClFOEl+NCkxMHd3TDZJ'@;
put 'L1tUdy5xbE4sTTVFeixlNEdKZnNoPTFbMyVmbz1wVUJAXnR0dFpUXzk0czZQb106YSg1RE5OT2NHPil9O2J7YDF4UER3TTtsLEV5WHVPRUIqZU1FTjAzIWR1SlpJdVB0TihiRV5DVCZHXllVKHV8KjkrMSZiOm41ZCwkWSY+bnRfQ1tAKF49cn5peDBEbCVLRnVzX2kuK0YjMms/Ik5udG5ROVBY'@;
put 'P082WStUaUN+ZU97a3l6M1ZBRD9uWCU6PGw2bHcydkglNUdjdC5PPlJVcDduKUdAWWt4azBhXkgsaW0jTztoNiQobT0oY2QsdCEzaHg2fCl6TjglOX1KfG1PdDxuS2FTUG1YakQvSkMyWWpUKkJMNlBEYiFDMlMvdzwkQlZzN0EmQUY0VjpjUVpDQHRuIU88dCs6KDouekwsJVFzMGljRkI1X0ck'@;
put 'enYwJkU2Z0d5QW1dfilPPi9xKUtjSiEjbEdncWdqRGtASDRMJj4/P0dOVmx4elJeKTdsdCJuUSwhOERESWlrQDM2fExMYiNuKHNLSGR7fnAjKThRbUc1QzdPT3VZdUFXO3lYSXZHa08wdj1ybFZtOH5xUlpIWXkrSTEhQzNuPTApNzJ2Ukd3Sl5xLnZGNXpEcE5beDQwXn0wd2ttcTFdeXY+OT1z'@;
put 'KWJBMCMuWmF9V3cyT2A/TlAyWG1zdWo0UWNwUzpGaXk0PEs/dHgpPFVaQXoqRlUrVn5SY1kubVB7UWR4anFDdT1rLlUmSCpZcUdZOkMrN00mL3RrWkJGe30rT2JNayJfRl8wJVZgRnM6VzdBR3BjPEN1en1lNWpyNVUrWDszLHVYcWA3OVk2Q1crbXkrL1ApSFhEP0hbN1YiR1hOa1o+e18rMnNS'@;
put 'KjlkR1YlS2ROKkNJa3csMn4jIUpucVIkWHMiIT56ODFKTE86OFJUfX0vV3VWQmtRISg8bUpWKlhRciVrfGtIZjBaP1FlNFBIMnhyJih5Y0JWRiUkQlduXywrN35wSW58Y1Z3YHo6LDtJTzFkZFJ1K2Aybl8/bFFpLHhxW0IkbE96WEFPayN7K3g5RzpRa1FfMERxRHcudSt4T1o0Uz8jUCFXPFJv'@;
put 'OGBddWVZfi87LEVRJiVVeHRtZnJNbz9sRGRXPnV4Nz5NSnMkOF5Iejc2N2lEVVQwKUVnOnVRZ0ZsJGs2bVlCUEQkTHZfa3VnVE17RHQrTEJ6SWtFNzIheWJseF99JV8vbCNRL3RIVWA/MiZYQVlGJU5UTkNyIj4iamkxOHBQRFBPfksrRmsud2NteHZ2M1ZbRCF6bnU1cUU2cT5TPnwqeEU3TGpR'@;
put 'WWxrQHwiIVlQYG8laG4kK2pnNk17Rm9OODNlKSg5aC5SX0hNZSttSElEM3FNYzNMdW5gRlghcUZPPyUyPHZ0UE5IcCFvaVBMei9wT1AqWkVSdnFzOmlYRF9VaFFWQmpXelV9MGRPbU9NY1lMd3I+NSlxYlMjKTs7RU0lUVJeLD8rKnt1P3ouS0tHeHA7NW5+UD9VYDphfnUreSgjQDRZSV8valht'@;
put 'YyV6b0ZAcWlqeD02a2ZFTUVkPDxOSHs/MW0ka1dqZGdkWSxgZD90XXMmOzIjUXo5OG1FYE9WUytQUHJPNSxtT3N+YjA0W2tNTG9KXk4vQSZOQW9faltqRXtNOGtrUGpAdi94Pk19ekYpcVldNCVRYjtQej1NbkBvNFEwOHVtOWprLzsxaiVSc08saFoycmBefDclXT1lJksxbHp6Ijc8YWl6JnY6'@;
put 'fEtZK2p8amhNa3dWYiM6O2pOTzphUnUreT9XJjxkI3JVKmBxSlMveUxoPUd3VjFMaV0wdU0+ITxeIVleckA/PnlzW2cwX2UyUmFCQkFvRyY5ZTxpJTpJLlVaTXFzXWIsd2NYPltDcGhXLFlVVXtbamJaJVt4OFUvRGZ8aGFuT2NDfCZJMlp9KF02aSRVWmdrS2s5RSt7QzV6SEl+cWBFZGI9fUxJ'@;
put 'XT5NOHxudUh8QE54PzNvVlthN2cxb00qbjFdKjZPaEAxXzJVSVBxanpwU3JaLk1eIjgxPXc0dWFOKE9qWG9BbUJ8W0ROQF84WW9ZfW8uPzY7KkMzbExFcXt7P2VZUGw3OjBZeEc/OjB2Z113anNmWmZkT1o6aW1CcCtQWURESX5GUnssaUBXS29nI2FzY0BqWlNrb3o7JDIhdXNZMjZHWGpyPyFq'@;
put 'flh3UV9NTCtDa35fSXZJPlBsLmVHO2x7NHZmSSF7PDBVLlFAUS9TX2EzWmo/UD5dWE89O11Pd2Mqbko3fTFMcnRrI0tsT3c4XWtrXT82dS4rOEpsKD46bVJDKEM0RU9KdCM0dUxETFlhZzlGPld8TGdkTiNkIXNQYHo3ZUcjVE1vI3FPUTw9MH43KnllP0FUe28lTz1fRDF9VHxyImksNXlhPWRs'@;
put 'Qj8me2l3Smwmeiw+Z3t1SD5LQ3tRI2psRDRQUzk7MFYpQ1oqPz4+eEQ3RDhFYSVOKkJaZU5sQlJ0TkRjMXEra0V9VHZUXSJJT3R+SSpWPkZUcyEiMVVAcmdUR3MmM244XXV1a35iQyl0JlpgSDZlOVRZOVdsaGNPdFNDZS92RzdxO1Y/bnAlfl9lKm1jUnpBZmZaKyFla2dQSzJBJE9KNXVVMF45'@;
put 'czdRWStRMz1YbnVfeixIRyM+M0kjdCx3Rzo6VSZBUC9SISVXfWVQclJKYFJOUnhRNzF8T2BBQylfeE17VHZjPGF6NysmJGpzSUxxTGVKWGElQjV0IWEqbS5XJXlQfCF0S19QezIqQChYPmBDY2hSYU9TQDpWcTdNdmgzd3tNU3ZKX1RZYj4lPHZmZ3BuaGBPb3J5dmVldzAqZ0VSdl9VIk1mVE5r'@;
put 'TiI2Wz5MMlVAN0shd3VGMjZVWkFNe3h2SE9XM3VBakpfND1uaEJ2blY0e3BPKDU9WkYqIVs5akZbdWlqayxhYkx2WF5EKlprVn1MY3dXSzVfRSwyZnxCMGY9SFYjdzt3UnRKOmlnd1c+KGZJUTRUIiZCSlNDNC5LLDZrQXpoYkkyZ2xpVEtVb09XPVZYfVJHX0NsMDZib0oqOT4sJE81T3IxNGBx'@;
put 'OE1XVzk0RUNoK1VfQnEoTV9sfUE0aU1rcCZZdDgsL3RVaiMjPHFNOXl9IXhbWyFQOC44RmI+Zm9aQlI2fHJPd3NgOi56Z3pLeGM6MnIiSzNqWj9UKVhecjw6Wj14N0E4YCRyW1RrYT4xMXkxZUslYGIzMkxBTWxhdWNqKXdQalJAVnNkcTJCQUNRRE5lWE1PVHo9bzhvPyZNcl53YWhiZT9KViNC'@;
put 'fXYqTUBZNSxKfUw8eE1IKy9PYzIpInJkNDBiPytQYjR6UWg+YXAmI0JkeFNZVFpkV1Zsen0pNlgyPDdvPSQlbC8sRnw7cnY4YDl2eFcjNURkXX4+OCx3JSEoSFZKdmhCZi5pYDNmKWRGQ3s3WElufSYoaVUzfStnSisyVDZNeF47OXh5KUFXdU5UZVBDS2FmJjVbV1ticS8qUiJwWkNOeTFJaF42'@;
put 'OEg2JmdPaU8uSUx6NkJLVlk3OitsJWU/MUtJcE9HK25PZk4qd2dQS0cydGw0UiVSdE9wPXxCbk4jfUp0YHlpZzpvfnc/fGUzRywqSjdIaUdMWF1xcWYuUlB0K2c+ejhSbjVTOHpLMG5AS1BoWkY5WW8mUypJLEtUVTlHODhGYUYyRD4pKXRzXzR3WUU1ciRMKFdmMm9OJiliaG9wSkZFYHg0cHku'@;
put 'cTs2WTJ4NWBxeFhIP3wifCsuQkNBc35ZUStWTWJGcD9oJH1XdzEkY0o7SUdKMl8jP0luOn0qOG1KeXV2SWFxQVRAKjowb3VvbE9fPXJpeUQlfjt8UWE+OkVnbT5YWFk6cWI2S29TZ0k/dENTPjxGOVpZTCVlblZXQCk1e0NHTlI0O304SHxRWU5WU20pLyIoYlN0TDpNKj1IISZtaFIhJXd7VEBN'@;
put 'S05KKnhUTlBdVVhPfDRCc30hRShGPSt5TCJdQUVRX2h0PU9xJm0hXTJGKlp4RCIhbj8hNGZFLkl9fDs0TkNdbFFpdVNlZnFyOC9rTig6YT5yRW0vOClbZTZANzk3SGp5ZEJvQ3suKSJzUzJUb1IsRzM5UldsMHQmPVsoNkhoOFpGOnhpTl9jQjpyOjpNPG1HcG5kI2J3SFIjOjk2SGg3eWpMMlVE'@;
put 'RyxicHZRdmF1OiZZcSNdJnAualoodW87cCpFYXBzUFpzM3U1ei9xfCRgR19gZCZMMF4vPjhraUdKRGxdekokZCpEJFV3VGZEVi96fWtATXMuYW56PSIrVVY+V0smSjpIY1tJU1U1UjtfVkc+bzplMG5oND5leHJ8SS5KUm9OTn0+THxiQiMsTkorRkpPRz85eSQ5fDg3QHFnL2BSVl5JT3JRbFc+'@;
put 'OkdqNDI1RjhRRlRIT1U0b3R+fmMyNEpMJEo+Y0ZNaHkjanpvWyFTUHs/Y0w0ZHpqfC9ZNGZQYWpnUWp8KHY7bUl3IT0wV01ZPkovNH5WTi9ecF9NQ2Rjb110Yz9SKGdSa0k6V0lFPXl6NlZlbD9lJlNpMl5fbSNROGRmbF1pejk4Wkp4Oj8lL1lSWT4wT0olJkFEeUVKZX4rVk8mZlVrQVtgPkdd'@;
put 'cTtQQkZmQDA3RyhyYkJpVGkhTUdBTiYkNG9IVk5MeXpyMC4zTWJCeHB6Kk1oelA7amFiSyN+UUFAMXVMJmtAImFIKmRKIVQzJmUqX2M6QkRIcGQmMVd6QXd8TGZtKEtnKSsuaGdWW1MrfnIpQ1E6dEUkWzBDQVcvbHJgNm1abU5nQX11IWR5ZX5TS3trPE1rQFY5b1lfQDwkcildWjl5Ik9FSztB'@;
put 'R0h5Ky5PSUU/JjAoR2cuTXc9Tk5YL3IsVXdXeH4jMjIyaTZZN3FWUVlSeHZlZzMpVnRseVo/bEs2fW1GV3xueH1DU0tUMkV8SWVpNTRrYUBtbGd6VXdtWGJHOV1femtsMWFUOkZuW3YwNlc+N1I2TyI3PWM+VDwvc1ZvdUx5eDkuXkoqZ1Z2JW50dFAsdk5gWXdrSlp2PjJGTXJ8T3djSXNMb0Qu'@;
put 'Mm9xTGlFVmFFMUYuaCpIO010X3tjJHhWUDU3bigvKUJlQTN3ZkJpW2JWdy9TQy97OG8yeFYsKFtsaWYiK0ohKzp2UUk+MjdJWUMqbTVFdXlfP3Qib3Z6fkxeMyJhM289MWgmbUp2eW5VZ3phWTokOFkrdXBmTjdLTURbS20sWzY1OmZMZVNSRW5Eek9nUEg8PEdFfSFHKF1taj9uS305QUIwe3JH'@;
put 'OE9EKXFoIyp0czJqZFI4Sk07KCM9djlWd0VkNlNeVkJ1bUtIMFR5R0xQNlVTN25JY09iWUMyeVRgXyxkSlV4NzBJRDd3X015MWZKZU5KaEJ+JllXWy5AMUUwX0o+JjkoJFRxQ2ldPGh2K1dPVXYlKjdkNjs2aFl7e0dGWDNjbCJXVG5OeFVYS0dvZnsrd3A3PDYuKWJRUmh+SWlwbGdRVjtwVDtm'@;
put 'OHgpLylFUkN9UTpNYkVkfTdpdkE4MCY2eyFHMyQ7XW97VjdfazssUG9CJjwzViloLypTWDZHfmVnJHpBVi9YTn1tKEtkPnomK1I7O3N8RnFwKE5we0hjJFlwcUpZR2xaKHFfaWRHcSxZQThLdTZRMEphP3srOUhbNndxWnJVWjNwQDtjc3BsdWBpUSpnflQ3Jig1X3k3OXZxRFhkPV4jO10vOFYv'@;
put 'PixWQjVUXmNWV09CbENsL2NmYjp2V3x0VkRGOVBjUlpAXyN6RE1NKktNOSM2Rl1QU29UMlJ8LzZ2ajlya3dgVCEwOjRkZjBQWj9oJCNIeE4jZ2FGbUgjYjE4OnlxZ0luK0ZoL25BKmhSW10kcnVGQCw3TC5LPGk+V2suX211ZjpYTXwwNXFQIzZ5c01LTXhrNUB0OjwqTi5TO1ksRV58XVBfeGxF'@;
put 'RV5MV2hiWGdHSkxNV0hgcnk6TFJwPTVQPndHLjJ4N31PQGYqVm1kVXB0SEgxeDd9T1EjVTVHYU1Zd2JoPl52IkNIISUrdjR2RCZXS1p3Ql5dODMiK3tIQ244Ni88a1FhUGBsPTA6KyE4fi8oWTdSblJVb3YzW1p0U0FyKl9dY2NZK013ZkZLMHFMQ3tRZXtIKCM6OXg+a1N2QmhzWW0jW1YwQEJN'@;
put 'WFh8WFZYNVF3VzpDZ0FpQE5RblgyZExuSGo5NG1AVjRdfGhXdGhwPzxWdGRBJHBwcUNfPlRYQEBTNWxIb3xIbj86YzNEYEVxRFswLlJSdlQ1P3JiYEZhc3lUNGA8dXJKbi9idiU/Rz5QbFNUZWRJbkBER2YqSmVEbVpjKUJ6NFJlKHN7KlElWmpLa2BIL3JzLGB7UiZ8VytAVnRjO2VHcnM6aXo+'@;
put 'JkImQj4/OkxrKio/LFJScWBmeEl3NUlbRUNWYyVoLlFiZSZbekczc0BnXyhlOCVvey5LZSgjLD5yU0YpcUV2OyRGeDw1bDgkZnNZeHVqO21QZm83ZWdAVj5RXV1KSD9WWztlLDU0dy9bWnNeTllgO2IyNmJAOF8penFOe24iOSNzcHk2K0RLcnkvcXZ1XnZ1K0QzYHVediJDZkd8cVBAanNhK0Ni'@;
put 'OF4oSzovNWVYP09GcS9US2U1R2drPj14QSUrUiVgSHhyZ0JCLiVjQk50W1FVRWksa0VeeTZWfmk4WUYqIXVuUXcpbGdfXyE5XyE/REFpUEdGZT51UjdMM1FscmFZSmomOm4oTkAiMlFuL2J2S1VfYF9XIU19Z1omNUx+THVpcl9ARTpGIkY7ViMoVyNtMy84SWh6X1pGZnR8Mzl6bXhianRfJilF'@;
put 'bWp2b3FJWGRTOCleKU4vdkVeeS9JPzltKCJIQSl0UDl4Ry5xMT1kbThAUEdsJmhvWXVDRUhtK0IhWjYoUzEpO3dlPnpJQTguRzlyZXZvKnFrSjh4SUBxcHJOKTlwa0QyM0hyKz5eZTA2MXpKfCtjVVQyW114bjl4fTZMZGZoLzBXMmNvaGk0cVM6NUhvd2hSeiJkfVtKS2cmKF83XTNaSWAxKEpH'@;
put 'WSE0Wi9DSlljPlRUdkx3SG5fKiNSRDZAUV0lVS9IJT9HL0lJS3hXamtickBLZXY/QVBPZVd+RCY+Lj9fN1Q8KTsmTSlhMmxIRnMyUzIqTUNBZUBMWmciRW45QlZFWC9XZnZVR3lUYjJ8a3grKTdKYEI4RHg3TnByUHpGJm4qZSxNb0lWdHFNeEg9TW9DWFRSKzNhbnY+ajlMK0J5VF9dOi43TT1h'@;
put 'MSV1dXJgXiElb0tKJkxyJWsla1gkUlc5Qk5WNig8ZFRiaVEzL2RhWCYsWlVjYTV+cnRdUmUjcW1RMy8+YlU+fWY9OG5PfUc4eXQmI1lIcHcoO3dXX2ZkbFFUfEFdWXkjXUVDXjNUTV0yMkVxZm8wKGRvbERVIXFfWCZKTXJocmd3ZD1RODw4cmQlPnF0Nm4kQk5yaHJBVDcjcDdwR2MvNTtjOSZa'@;
put 'M1UyKTpEUSZ2X31keE05cjxsVnI5LlI7NUlAcW1gU0U5cE53LmIvZHlacWFWRkw4JGVee0Zfb3tucWJjfjtCKClpeFNSPEdXKzQvP2RNQjhSKm1vWmBgUGlwKzE6S05tPGBkY2Z7SHRYNl8/K101ZUxueEJ9N3kuYmgoUi8/P3poOGFtR2BWP2Z5M15FeTZ9dC8pOEJUI1FmYkI4OUVtLjgmYnQj'@;
put 'XWhieF88WENxVEBBJjlFKXVBZ0V8cFJvZU0zajhmZFRZen0xUDBgMllzRURgWUtJQjMlQF42akxobHd3WShHKSZ9TUNoO09iOEBbd3E5YE9nTi5oRDVzW3QvKHRLMHpOYkJEYVApXyRhXmRdWk4/MiNjMWZ3bjluR18zQlM1Q0NsWmFOP1BPPEVOKzowSE5pV35QYjVJYkBmV1coUG04Lk9uOT5g'@;
put 'Q24kUVg8V2dYKGBbcCo1ZHhnJkR2OSZIbjRafFRYLm52QH0vdGwxX29YRW5+fX5kZkN4UW1UTX5HOjlIX2h2MWBXQF9OYlMxWix1JkFlP2NlTmFuYytvcH0/alZxTGdFRnJPTml4YmI5fGxmSGIxcS9rLzAscX5XbEo+bG44PW9hZD5aPmVIMix3OGRebXV1PnpJPiZmNl0+RTFfJG9IcSlkInAi'@;
put 'THJEXSN1MDl6UmtQc05qQnc/WCE4Qjp7ZVpUYVhnQj5TZEwuJCtNPjBFQWtAPDAuLyR8OCtpcz0rNEs0PE5ydmNJfEMuZEwjKz1CbE8yNU03bTZBfTk1SWZod1JiV0IxN21SPmBrYWVZXi8ySTZzUWphSz0rMjQ4Zk9yeCpKRVo8S0JtTyNufiYiVzMrJEhQWm14JjJkcWY/eFQ4cDhCWF5wQ1Bu'@;
put 'L2QqL2szfT5Ca0wmVXpHel8sU0Q1U0l7WmJwXkd3Oks2OEM+c0NjJXYhXi5IVTZNVXY4YzcxQHpmJT5jWUI4JmpPIk9FVUx6cDAqLyM4S2RyJUtgTmNLPi9wZUl2bj51czZIP2MqaCNwOSkhLCpbPG15YGNmIURRI1NfV25geWRnTUVOSj5ZVmAqJVFHMD1oS2k/XVdbbFFHWHdDPTlJRkJAOyE0'@;
put 'S2JHVChqaFhbJHY0WTghcEwjLG8pbCY4dy5NLFAvL1UpKSp1OUIuT3clclRlPTFMbEx1RjIkcVVCTk0xcTpIWGwkQHQ0XjxKRWdxaWksO1hReixrWjVfZHVVfFZCQC8kWmAoZmU7RDh1M09JdiVMYSJweHNfa0A1M31FJFtnUVd8VD92NnRRQi58bHJbPj15UGFLc0hUeHs6ej1EJl0mR2ZtNnRG'@;
put 'MERyLDA6Ll48JC5FJTEhYW5aQUVFd35BQ3w6OjsxPWYocjVTPnhmJnBQYEVwUC4pajBlP1BaVzohc0VTPz8iVEFNYFR6Qkx8ckZOR3VGQ1kxOGM9Vi4pVjw6VTJZTTdLW3QvXzR5S1cxRn47azFJKDFXSTMyTWdgeGBnSV9ob0g1L0l3PEovJnxGQithYSZgNTFmQX52Tk53TEFsLEh6MUo+ZF4+'@;
put 'WTZXMTdlZWlHa1NtYWQvZkdzSiRIez0mQjhWfE01NEx3WnhJS1ZSdS9nRjFvOmFedmtuP3U/K19sRytVb3NBbXEoMGM/RD85cDoxW3NUcHQlLFFwVDclOXlJX3oyQm5OTTVjRk5FYD9pR259WWl0PTw8I1VKLldLTz1xOjtXcCRPPWh1OncuNVcscmorWiI8KU94Xk0oRDpnLjwoOCU5MXM+UmQu'@;
put 'cXddJktAYDgvRDxPKyZtQCVVa3B3SGlzdGUkMDxZQFNDY2dWaEwrZWx6IntQJFFLbXtUZExpazZAaEQ3bnpmLkpuIUAxTGI/RD5rTypCLFhJPndVQ19NM3w7SCkqcVA8LGVtfWgzKlYkKVorK15gKGZRZF1GJjROOnskez9CKE4hRStWaVpzb1djdXM0KEQmeCpWUTIuKUZOKUVtRDd4Pk9ZKztd'@;
put 'PEx1WnwuRmM9fGsqNVlqRnxFVSl4e3lRZnRfMDN2LCJue1Y7LypGRlZVKSpDUXoyQGVDKiFncS4obmMxKCRsI05rQC4zKEImRih9JF9MfE5rTm55VDdnaXNRT0NxaEpfVEBPfXs5TEVuZCE7NnNHVnhLI01yW2t7JVtfakZlc2UkNElCOFsoJSx+cWVaJHBGQV5iNUwwZX43VXIrdSxJbyZqdTk2'@;
put 'V2BJZUhJPGA+Z2prUkUmVnI9LDI4ITpZYTBLK2h1WiYwUGlweEVQfj0sXmxzbnw1L2dHXUxrTl9uISlWZG0wYEgqQW5QJiVyQlZnJiorKmlKKEpNaz5II15TNDU3KyxjLFNHIzY0ZXM5fWRUbi40P1tXZyZGQD4lOmhmfmlHNywjNDRhR0g9aihfenQ8PFBDV3FFd3p9Mm1gZ30rR2JNaGZiOUIh'@;
put 'TzE/OEJzJkhCKEg1Yz51NiR7Mnh5ImtuTnAuZ1YpeWtQVytFJWNgci9IcTx6cGZ8NjNUJCguZG9rPmBCRmQmVS9EPikkOG1hSV18KChiMSNwOUZINjI1QT1vJnZoTndudzs9RChhfjAyVDR1NnVAak9AVmNHTUE9amlgNHVvR1NJSEAhdE0+Yl9NK21eWT4qXklTWF5Fdjc5IUxQNXIwTzJtRFVn'@;
put 'WmBUL3BmcjFWKH10WXFPRFlqd3F8cTlHc3I4MVJpVFN1aEBLPntHRWFeX20wM304ckpDNFA6czhbQ2olQyZrcGI4Ul5oMXF0YjBZd1lPKDpAQnh8VytBMm0xVnJZPWcuRiVFSlEmTVRdWyhQdFdMOyxjL2RrNVg1eyZ2UFRlRSVaR2N9L0xCVnUmSW8se1dkMSRIS3Z9RCtQQWxxRFVuNU5EUCpE'@;
put 'PFcmKUpDWnJVZDwiWGpoK15kKDZ7Vy9GVlk9bSQ+PkBMVmgiRl5kRD5PVG9xc1tdJWFTI0MyJVJ5SitfOyt9OGk2MEtufDsxZmBjbVsrODJUaDorSGVUWm15PEduW0ZdWi5SMSl9Qk4mUjpBcWIoeCNMRUIhKkRsfEZHNFE6bihOR315dmZ8YWhUNmthfCRvaDVYaEtFJTtRZXxQPDplMml9eiV5'@;
put 'a3VjOEImYkVWQ1B8YChgQTE+PHsxVE9yQ3Z2OUBySkE9eyJsfjZrXSZ0U2grPFQwTHhEaDZfc0d0Vks9NTVMP2syU25fWSQkaU5wcjs+dlRgdzJaSHFLbnZwNF0oeShCcSpZJmY0OCxHdDFqS2dAfUs8eX1iOksvakpHTEpZUzpdS104LElPJjJHYUdeXjI3JmZAfV4+Yk1mKEd+YnF+cztlb2Ip'@;
put 'UiRWYjR9I3JbOTZVKCFzfHxySk58Xz4vVldpRVJjcWw0QHM1YHE/ckVQaEFrMSEzJnFfQ1YiNl0jZElneEdEIVY0ei9KKCwpRl5sNi90dV19M2BCISh+fH1hfEVjLH4kVC5pJl9fRn5LYyEvQ2N8VVs2KjY5ZVZmJGJzTlI3VEs6cmNhI318Yl0jaSVRREowUlN+UXtBRzJRTSFPRGhxZXAvOTkp'@;
put 'PGt8I2xbYGlHaCphay5yfEFgRmtec3dzSmgmPmhXQiRYND5RTFtNQkNIKz4iQmJufj51NyVzVFpJVkpjcylYOEhMOm8rb1M0Ii8iRDM+OU15azM1Tl8lNlRFaH5Je2NSPTtZMjkyamgydj9AR35Nez40PTtkPzJeeStgW007Pi59cn5mNmA0TF9LaCM7PHUmUzw/WCkuKl17ViQ8OCRpV1Y2KDBK'@;
put 'UDtbcDZSInZxfjh9emkvdGF9JntRXWVheTEoMHhuSThgRjoqdUhXTEtkR31fTGQ0aEI7QmF5SH5gV008UTwoKWwxaCJMfmY2fTVIUkwqc2RiQTljcy5wfXNSWmgyfnk+UWxbUH1jUno5RShRPVZ8XVttOz87UTI5Mm5oLHNZRml9PlshcG1XNX1lfCM+KXN7a2dOZ257XSpAYW5zMTQxUFZ5U3wj'@;
put 'VlsqIl9zdX5gcXwjRFtiJFVXIn1SWXJXOmVUYUNIMVleLEF4MGh8RVBUVldWfCNJNj50fiNmXWVMTCFKImZfemUlRDUrPnNvP3RFJF96ZFVOWGBlQH1HKDgpfiRkVCNbPD8qLChST3ZpL3ppRzBAMVNkUjc/IUx2VkgoUjdZZC8/ZmxSRTA+VVhtKkh2OCIjTGl0akRKI1toNCVzWSQoUnFqfHxF'@;
put 'P3lrUj19KzBvX0hqcHU8UjU+W3Z0NzZxL10rb0kmdGFsUTFEWWdyMWghSD4uN2UrW2EhOW8uajtvI2N0PEFiVUVhUjhna0dqLyM3b0ltWGFsUTF5PTE6KlRfOyM7YXkvWDdue0lDVlhuPFV5R0J4YiN+dC5JYFVLMyFWfmhxMjlDUGl3Q35uZERuVyJEdGA2Rzl2QEkrXTZHdXM1OUVIc0plIVtq'@;
put 'OXBMSGVRX0RpL3l8WkRzXz48YjZsKl98Nmd8I1FpIWc+MHMvcilwfkI8ZiUkOF00djhrRm45Tkk5L0drUTErckkwTGdRMVNIPWA6aH5CUnsuNFlFUGlaKjh9JiEjNX5DZmZIRXpXQzdhJVlnP1VzeHBVaEYuTFdSZUZHLEZNUS99Q0h5dD82R1JmVTM1UlpaQjkxYSxEPW9XT0RuUDgxTElAOUdq'@;
put 'W0ZOcy5Ccld4P1Q5dXBVY2tZK3AxaEEmKFlbKDlgTk0mZVE/d3NHWERNJmVRZyxrRT0oUUY5Z01lKSVabDpgS3tmJVBQdlJZRFNxOWckIkAoPShASlhCaTN2VSImcV9mJUhQalgudDIsSDpUUWkzYzlWM1VxOWdaelMkcHBJXTdYe3RwJSRNZlFZLFk3YFBKYmRYWzJdN2c+MWYzYzhqMVt+OVgv'@;
put 'KVM/YmV7TW0sbG5WfmErZEZabmJja1RnPmZRMShTdjdGWmFEZVEkRFYsKFRQWVNaSDVYSndNYWFxZndEJlVnVlJjKXMxQi5VZ1ZJWChUWzhiNDs7LmpnWkx5RmhRMSUjIVt+OThbW1I1VWZQY002JGtdODhWaCQ0bHA7WnoxKDM5NSJDTlF3d1hITSwpW0owcXRWRVtoKkJtcFNVQSF4RGJtYTRg'@;
put 'ODIsVGE8b3NJIVZ5aj9vZHdlTU9FdkcjLmRZMkZ+ej1MUUplUUksKFtaUWZReUR8MFpZcGFbdG9VeylidjFhQmRvVSFNZlFFLCZreVZRfWxWP308WUJ9cDQlWjY1VltLNEd3OWo/fTo5SEwpVmtNcmNqUUA/W0wxViNMWlh9YkUjVUQmUndTXm40O0dtJHpUKnB3Iy9SVDAxP0dRI2pHd2VIZFM/'@;
put 'bFc5VzpVbCt7S2JjOGZoO2dnNl1mR2NNIVZYMm4zaClEdHswOilYP3hEQ3R9ajFIZ2wmIys6X29iUEx6NlNIJURkSmdUSEY7XVphIy5lTltZO2xuQGhDbUJYalBNQWB5RyRqdS9ibDltWlMhUFBIdUMrSmZAd3tXYXIqRzRZP0hFUFsoanRLNj5SSGl7fTtZaXpVJCtuR1M8aVdrOGhESHs0TU9L'@;
put 'P30kOjRPR3ldWVlvKVRQaFl+LipRR3Q3b2diPlhiRS5TZCUyNmxYQzFWW2cyMis2QlExJHVQN18ya2xKTGZCVTh6WjFoN0tSLzFMcj82WyZ7VDFRRFZma1lrVjdILEV0PFcwNlpeeXF1Sk85eXdeOkIlJWxOUXZJKWhxNV95dXpaM0I6fWN9ezlYSFR7KCkzRWhFTj9TOXV1YllISGFhclBtRk02'@;
put 'cFpXWXhEKy88ZlZWeSNDVy9OXT06cDlnTGR5NHRPYWx0TzFrdG5IbDJwQC5RUGtIISl+NmI6KWNDJkFldEkscSklNCZHSDhmO0MlZkFnXWBjMSJDOkYmPSNEODtdaDA2N2NeS3dGeCIhNUB1JERFUiRgVEZdOFZpbylZRlM+fEx7PWY3WUksM0J7MHpRUm14YlUuMCtnKDc2SHpxQXYxZEt4Vns2'@;
put 'cHhyJiM/XS9iK2AxWzs+LHAmWywzKnhDXyxhPk03R0VzUk9gfFlLbDoyMXlIfHEyTjBdLyxRbEhfMmNAPSh8SzJEPk5yaGkpdUtnfkJEYFJeWy9WdGt7KVgvMmhUQThvb0ZoQEZmcHczKEI3Nk9ucVFiOkBoXWUkN0NQbTc2UV9fJXVFcXwiZ1B7USxgWz9dUkBnW2giR1hab3grVjl5NzdbKEdv'@;
put 'TjBUd3hTKSRFZUE8R25QX2tMKWV7aFQpeHF+T3B3YXUxfTJjLmU3PlU3TlZjMTo3aVBNRGJhU1NZVn1xXnNoamJxVVc6YUpgIVlzOiYmcXA0JSJRWntsLFs7Y058aDVxWWcxajA2U31bezEkZUoiZHw+dzEqcVEscjtIcURNM1QlPFkyUWwqV1gybCh3PUc7NWY5Uzl9SWl7e1E2eVdkOlJ8NixE'@;
put 'cUJhUVQvc0NYS2l3VDxEMlpKcXNobGdLOElgVHBCcWxicj58YSxqaj5tVm5WRD4lNCJeKi55blM1OU9tQ1cyOHJLUC9fR3NKTyojUV8rTk1feVlyZilqcHl4U1hJdyssI1Ffdkk/b258X2FeL1Z0b3txKTJUVDJ+ZEc3Q0wiRSglQjE/XU1wK2BGKG5SfT1aXX1HN1JMJiRKdFNLQmF8QmBaZ1l3'@;
put 'QThCai47TFk9ZzooeksoRTdbVEtAezMkWHszOmppYjFHdnpzcG1mM2tOSiZNckxrRWp5dmxzeWFFYC4yOFMwNmdnT0A3KGRLaGRgQT5yczxjSX5AbjlnZ2lfaltlPTpwJSRRRWshO1ZqYnc7bzc7OD9lZDB3bFk3b149U1UlT3JaYU94eHNMW09aTl9sLDQ4Ozh5RjA6aD4lJk1iKnt1Ykw+YEVB'@;
put 'ZSp7KyxyJlcjJV1gI1JxeGBfeWdedF5CaWFtPDpsI35kd3hpcFNoREc4OiNGO20oYSk0IUQscUVkU3lUenB8ZWA+ZWg8ZTdzI2JuNSxwe1d8PlkqPzQ5Tj5GdyNtbkh9R0ArSittIUFqIUxCN2E2ZHE0JU1iRnVJTEFWRmUsN1VpX193dkdfPlUlZUNpTUBfciVDVUl1SWx1cm9kSXB6TGJtNURX'@;
put 'JTNHSX5iNVU3Zj1AOns0eS44RWxMOzpiUW4rX3BRbyN6Rnh2SGJFJmZmMDZ4QVtlQDtxKCxjWSxKLiNVcCMoeDdDWiY/SVdLU311SzpJYWRxZjEkX0t5LGt3WXtoZTsySHtXLiY4YShEO2h5Vj5IMiJeKDh9R0VHVXExNndheVh6aD9DU2VgQXApeD1iVUc+aDgvOCxMRS9mPEI+XzksTH1Oc3c/'@;
put 'cXhNUHlXYUdAaVQzOWU3YjUuK1kmbSZCfDY5MmVgJS5VRXVCSypIXyZoTXxrNlFEe3x0R250JiJkMipCKHtaV2IwLFI7MlArYGZbNU06cDIqKjNXdVFdUEswNjBHSnFnY1VUPigzPG45T3hZKW9uS3E5Wj5mdzswKn5kfE1GcVM5MGA0dUdleD9RZjYkSnhnciF8R2twaEc5ViNqUkY0T2IrO0x4'@;
put 'IVhnckJUIUdDRVpKUjBRSSVxWWp9L0tlX0BfNz43T2tkPm13aHBIeWJxSzJFaWtZS3d8Z2ZORXJRRFVleFt8SztjYWhuO3o8ejlKN2hwU2ghRi9QbnMkYyE9TVhnXiQ2blJyN3F8P2VOOHdsWDBKfWhzbS45cWBtbjI2aHhbL2VHPiE9Yl5xfHxHN1poJjFjeWF9V35xbWZuOEUrbDcvb1huai97'@;
put 'I3BOJUV4NVY+bT5WZ2lUS3kpdVlCL04wQGpHb1ozVVI3QzNTcXNbLjdYWlB7RkI1UU13OSUrY0Z+IT1UO3hHb3BnY0NYP3FGWUhIRUQ/N3RqfDh8XjYlKVNAMCs7bzl8R1opfHRiSUc/ZDF9L05sY0FDPl9kKUQiaypiIyU0JiVHb2JGOFFsMFppbER0S1BPYDZAaVRSYkkuRnlhPilEVi8uR3hg'@;
put 'QlZHcSxXfWUlV0tMRk52VyFGdVEyXUtrJDYsaXI3JltwOEheWzxacU5uSV9PMUtxSDZVOT80VispMXZ9NXcuSnl9JUFBW1BoPFtyU0EzWCZtRz03ZlJ2XzppTW41fm45flVScU1IISJbJnxjfWt8SmZ7R3hIfEJxQWVNd2UxbHlrcFFrfWYqaEdgOHs4eWNeWHRRfTsmWTRzZy83WnFuTX4vcWVx'@;
put 'e3x4JWRMZTB7bl13Myo2KlYsMl86IjhMXkY8Sl8kVT1nNmpiKHx4JDZPJTV4cDJEOChWNkBsPyYlQTpEVm1KaXU2VmxiJDtxT2UsbzhwKllwXXRLZ0EuYlFYPkpFPC5KVCpxfCNEJkFlcixBU1NYNDxjSTlqMDZ3L15LdUxORzRaNVVSakVST3tAeWA4LlopKSwuMEI9a2ZlTitnUW5de2RUWSg1'@;
put 'WXtDQHouNENQNjk/aDtXSilUcEBeVD9iP3pnYjgjfURyLHhPejlLMiFibFQmRiEwdld9emdibz11U1dXOzo4WSYycUB2UypDK1Q7Ol5UcUBAYFE/ZlY7OjFOQjI+Q2csO2JBU0tGITBUWTE5dzw5cSNgflI7fWg5PkM8YmJSZkdzRCUoZmMhZGgve3hPRDs/OWVlMEZndFUzNDN2b2ZeTj0ycH57'@;
put 'K202SFgyenJJTSl+QF5XJmdlUjxiMlFZSGYlN0JtWUpCTEdmcTUpaj90YHZ+SS5AQH5ASDZiNl40OXF5OSJ1PSFIaDREJlUwI0JaZlBTP1owK2VhKWFEQkFiP1c6NklVMy8rYGFwRzxvPjE7dChxTGwwdl5WalBJP1RtK2VHKSF8O2VfXVVeZCxDYDEwQlk1MFlCWTkzZ05KQDF3I0Bvb1p0akk6'@;
put 'UjN3I3t6fXolWXJYOXU7Yj5JJERwYj5JSURmYT8xQDE5ZD8/dS80Py5wVFBTYEhOeGlDWls1WGo7UENBQDE0OG8lJUR2NytbfWpDTlVYdEdxemZgZmUiTnV2Jk5YMDV2Ik08cjFudkA7ckRkbnhoKC9ZVFdQTyNRbyVzMFlgUD5id15fdFV9ekpBX3JWbl5FcDpCNDt6RnVAJkFPcEBDP0o0Vj1e'@;
put 'WSVNX3A1N08yP2JVSEF6WkxKP3NvZkppOTx1YE8ocnNJXUFBTjhXeyt+NUM1NXF7My94dXo7dl9NIjQpWkcseyx1JSM8S28iQUYoTE8xRSJKdk5LNWh+b24/eitabHV1QCNyT01CLFhMZ3I/YiIpV0RgMytDLFR1eDFkP2JGYn16MlpGWUI6UCx7LHlpe3FWSChSJForW0w/clsseCtETH1EOXY6'@;
put 'XlslTlN6JXZuKlhvP1ZPUmh8alRCdGBhUW97cWZKQix1bXNqZ0cjNHpBKUtxVnRFQU5FbXNqPy8jZ35OKjRvYjlMOkYiWldjdGo/L0cxQDFVaXFWb0Q5M143O3VkRE1KMiIofVZ7SilyNlhaZFIqLnhCTk9eaTtffld3N3R4Zmd5Qi9JQ0hPR2AyMHlAd0AoN2gsc2k2PEV1V19ITk49P1ZCMX5r'@;
put 'QUEwWX17S0xYNnJtRUIsTHNYaHVqRldEQ3ZARmMqfFpRQmFLcyVEMEdvcndOZjB3b01dR21bW2ZyIWVBR2RlKm5aWHtdflJudXg7QDFMUFhPOi5rdypUQWJAdyFldWNvYilHTU0hMG89Mzw+cnNqbnRdNDlxLiR2U1U0VU59XSIhNUlMd2Qvemc8WDBuP3pbWXtWTU1VcVdKJiMzIXJtRk1+Tmp7'@;
put 'P086cmpAKHojeyZLYHMwR3JqIWMuWy59I11bZ0AxX2A4W1hKYUUyOnJwWCVrc25eOz88Tih3eER1YFZkb0xVM2hFJTNdTzhLITBHWEp+cSRPODxUQWI8WWlXcUNHd1VlTis8YilHU0ZnLC98fStCNWpYPSEvTTlAOW5HdE99fStCNVFYblhgTjc2cTJmRnxHPkU8bmhjKFphXWdVPWxRfkoxPjhy'@;
put 'UHs0Sj5DXlZGTCFUJk4kKDJEditOeiFMSnp7e3V3bTpfdkJXWTV4ZGZld31xT3QkQykxWDh1WU8xWzEzezQkPz8qNE9rLiVEVF1Sakp4Qmx0QS5PSUlsMlErZDNMLCltZ2VZcHUyJjNLUFFtSjlGM3ciX1UpdmV4ZDdYO3dOOXdjUjkqWXcydm0iQ0lIPm5qUz4rVU0vQWVnQWYzI1dzTzh0KCNk'@;
put 'UCJaRnJqZWN3L25dMjdoXUBBP3pjWERZTzcuKFs+YkooV3JqZWMuWz1IJV5gZXJIbF4zd3ssOTx3WlAjRCt+bX5vWn16PHI2bU9uJT1NKVI2W2MvK2RCKytkPlBae196fFdIViJ5IWVzYTwqQkppP3RgZFptVXVWR1pRdXssYjRAb0F9QShXaH1FQDFtQiRbb0cuOjl2KFV0RThZZlBuK1RQNWtu'@;
put 'LG5EeVdgTklkKnhQaiFbYGZ6SUsoWHZDdlYzcW90aj15SmJIMUZeeksxTC5AcTRVPSUoS3Y6PXs5Sk0qRkMrRC4oeyxMeV4lOUMqK1BAJnl7UFgkLlRZW1l3UWhDR2NFWF1IaH1kNzhWTSlJaT1lYTpXXjFiWDBTNXg+KyRWTXJiYSpBNVkxdjpgPk5uKnNXPygpNT4jWyE3OW12czY3PXs+VTp0'@;
put 'IjVHaF53eShnRWJCa09xQGd0LjNLaEgjVmYpLDlENl5hbFNeRWFiO0I9Z3U4fHshKVFiQzRLZlZEMX5TaHx5SEkmeD9PVnY6PDYyZEAxdTpAb318Lls0UmpEQDEqYDhbKH0kW2JdfSt8M0hYdjQ0W2slOXspKX5ANFMifXdoVFJRQH1JRyEkXz5KMXRTKGhQWEk1dHR2TDxCRno0dUpZaTxWRDFo'@;
put 'bTNJX1ZvI3hZdik3WCJqJm1AJkE8aG58Xzp6T1oiSXpSZFNbPyJIS3F+SXYyJVE7Q0dMXW56UXxsV2BdX2NTLD9XVHtLT0kjdHdDWFp3NTdFa1F7T3xAflI7TSVnelNUe2N5ZUJAb1g6WS5zNmw8RFl9XSZHLkZieTE0Xi5vVjQvdk5yai9iLlshYDZiQDJdT01HKm9FT2AocjZsSGk5UkpUSmwi'@;
put 'bkkoUk4raS9OWT5QYURtKypJKnJzaisuRl9nRTpAO1QrbnFieyttS0Q1ai5lVFdiIWJsXmxGT0VjVjAjUldnOEZjOUJAMW5kP28mfmlhaH5Ad2BRXjt5QXd3aUMwfHY4bDRnak0zfi9dTi98R1ducD9aS25oOVU0NGU+UWhrRU9LP3NvOk1VM2hFZFZNM1dYV1c5VlIvfStPS0M1RVJ9emRVSzV2'@;
put 'X19oQDJ0Tm9HITBOalJHVWBfelJZfDRGXU1bNHssOkwoKFIrTmgvakM1TnUyPmIyQGdZTnVEe1JHclJ8O3I2c0BVM0YwZ05+OUt+SylIU1k2enlVVzl+YnM4fntuQHp9VERZdD4vJjo7X3p9VFN1WSY7Yls/a3dOYj96LlRHWUVKUj9+RilTJU1WS2t6Z2ImYnM+SEgkIWJ+amBGSz4uVytUYFV6'@;
put 'IXEscGl3ZWUpdTNURlpiZj9iZ0B+QFRLP21TaTkzIUspRzksOCQ3JCN6YGF9eEUsXnNbdUNIJSphPDlbdTt1T1Yrc2JEMF0pI2B3ek1WWG17WCFlNzlxZWpGTj5peW5lZkZtWExeIiFuXVQ1RFF3MUAxZTovYV5ab2owTj5Fd1BwLnssWlU1ZztZIks0aHB+WH5zfXcofkBUKl5xP3IyLHssYSVv'@;
put 'JTd6QDFVam9YZlh+PlZkYUppOSFLNnJhJCI+VmQvTSVnRFNTZFJiSzpAX3Z6JGtZa1tbQ01vKzBrTlt1el47JiZ9On1ZMClAJD97dlshWVI3eVM4RjpzazRpPiJ9cmoxbilbWTJwSX45YitWUjRgX35xLmR8QnVPUkZKN35fQ1Z4SFY2eSJmY0xqc2haLCUhfFowVDRCQjBjIV9+UnF5MFV6Wzxp'@;
put 'Q34hMzpTaGcmSEkpUTlBZmgoNmomX21QVGA+QEZ1KXxYbyUpPX1JTSM3aUhXXWUzS2N6Zld8JTlHWG4xcEZUfWpBVSNyX1gpUHROMGZBJEB2SSV4XXk0Rn1raUohVDM3ekUjUFplRCIrfjFHOF9XOk5tcGx7K0RMKlNDYzNCciZvekAxI2E7byladGp5RSg0bCJUUyx1VSFZfE08cEYmOyJYZGhI'@;
put 'czhtdH1eczpVZEc+aldgbTsldVZxTEcqdjd2aENjfF9ueEZuVyszdGV+cl12fSMoKEoiIX47fC54UkxseU1PPmomaF4sUUJsPmxVfnM6MjA4aXZBclpxPDtXIStESX1KXXg0KmRLOjkraWZLTFk2M05sLlNdant0PjtSbCFsfH4oOzsiNCF6eH5wX2t0eVE3UjVTaHxxW2o2c34/fHJ3eUY0UTMo'@;
put 'I0lpaCt5bCFZcVY2UHhALG8qbCZOWzhtUnIiSTRUSHpUPCZ9JGJ8IyMoNEJ9PGVdaTMyOzFzO3x4SDMqLFszLiJOZkBKJCJLMUReRUt7djIyPlRYVVJTfjlyKnZ8XSxZejk0WElGJmAsVTRGLz9xM09EKnFEITZDLCFMPDl9Jk1ITGtgI0EwOVZrWEZhXSUicENrfkEuYU16fGY1N3ZxKmhDcF9R'@;
put 'IndrZmhneGBMcD95cFBXVUdsIU1+UU8qdksqUC50czxWd0J6eXNoMUQiUER9S0JydVcmWkhAWG9fUXZQTEg8L2Fofn5lMSo8fTlpM31kPXJbajg3PHAmbC9KSiY6MWV5SCZgYTtKIip9OmBIZ1Q0fk5pTmwhUH40WzIqUnw5ejo7JjRAMXAmakp7bGMpRm1GNE9ZeEsxNVksQWxjcyJld2tbc0wm'@;
put 'NEZ9OF98QFAmaDtldldsIVdzZjBsIVUoWkp3OlI0Xl8rVXtMUUBfanwzIVlWIWF8WEw+aTVfVGRUbkg4QTF9fUEyLml5X15SZ18ocz5fIjN5dmp8eHRpQmZ6UnFJaVIjcnZVUmN8N1d0Rjd3cENMfSZxSy9OP0BMS1Y2fU54Wilqd2NzPyxsdWxfVGQuZUxAOixlcyNNYitte1VSRmh4e1hGa11T'@;
put 'M3BDUH0ocXl5UmBpcDomUFZ7U2AvU1goOShXZVRefHZdT1Q0UVg5cWYjfT5gIUssO2E0OEpZJiQuU0VBQFF2bWh6SihFeF8zL1JXelYiJGZuQH48Y3s7VXhiflh7IzRdSzghYWZqVkMxKyZqW0opVF9uN3JKcnxGISJCYXtDZy5lWUwiUEB8KmoqdjYqSC5sc2B8Xkk7USlzam0vQ3J7UFt6e2x1'@;
put 'I3JtazZNS11uNnBrPV43WT8uRUhXNFM0aXRaeX1GRntqYFdueDJUPC99cHJ+ZipgSGl2RmNgOzBSSmswd2l7Jm9YRkJoRHApdkxWdHN1XUZYZFg7W1FXRUJ0TEM0MzNEU0A1dGdTdkRuYj0qJFc1bmdnZEQobjZ5Z0daVjVbZ0FlIVhXakh9c1UzOGI9fEwxYmJYeTxkZiNSK1MvVTc+SztGflN1'@;
put 'bjdNIT04JE1wVGVJV2pePWVFSVgxWytrXmd2L1tbPXE9SCRrbjxZMH1KbD4jPnMoS3t9V3diS25PTjZQeD4/WStKWTNWZyMzekhmelArVFUpbiZsMEY+OmlqQjhnWz9qZ3Nnb0x3YS9EOE1zP2s6NkAzPj9WbllDVFkrNEBTb1RpPFJUL0U0fl1ibFZKLylJIzheYn1fKHo+M01aZTRKZ1M6I1k/'@;
put 'VGFUXSRhaUFXc0BtaVVYV1oqZztiUnA4bCReLmlfenVWdjYwcVk0emExMVhvOUx6WWpgXnp5OjEobGpvUUhVeVk8ZUV4PDx0eDZdKVhfKlMqSlJBcz1bLzxaX20la0ZrWGx4NChfUStGZz16XXNqUWM3QWlTT0pzamlYMjpbcmNhLzJJW3x5W0x3YT9vNmoofD9PbnN4MDBAUWdUcWc5N2ZjQ1sx'@;
put 'Li8oITlLQ2cyKSUpV2ApeCFPZmlIVFZqbE9+X15wP1YvRywyMFpsKUpJNj0jQXAwbjJxbWokREIpekwmTC5NI2lrQHFofFN8UEV1XyFpe0BjYHQuKV5lO0A+IjslQCt1JjJ4dFtFQVNeb0J1UHMxdm9Kb2ovNEElXyNhXixqejNYKCFdaGV3dlNgXSErb3dudiMyO3luYnMkS1ZTQTg3PUc6WmUx'@;
put 'Yi9CYjB+IzZwN0NlO2ZkUFc0WX1xXSlbRWw3KXVuOnwsPldfaTBFbWQ1IiZ7IShKIjtOcVNjbTw0NHomOkFBbTt1NVFgKDloVXY/YCQkRj9fN3JGanBuN15TYzRySDYxMWVjKU99TCZHOTVWQSZ8NypEJntSMW87eTNkTHElQCw3XWlpdDouWFAhW3tQTGRIUzAmaH1xYm9RW21ZXmwvX2Z7KUNT'@;
put 'TXZnei5RQkRpWztLUCJAbUVII19sJk4lQWVLVE5DYC51Yl9WUjYjKkJqVzU+TzJOciNaMXUueCgxdzMpPC9mPTNkNjxkcFVAdSw4Jklvcz9pKV1mIXApU293SGRVP2ksXUtqMl0qd3o2Iks4UWd2cEAzYkA3PzFCNnd2Lishe0xtZ2lyTTg7IXRvPUYhVSZXaC5LVEM9P2NvR0JmaXlkZG1lZzdx'@;
put 'fiEhIVBsIiJEPXRdJD9jQFtuUFNFJWJ1LFskT1V7VypgdTxXMT5MMDhpcihaZ24vd0JuUTorLkomekR2RnxPKEtkVEsrRkU5eD98ai5WJSVHKm8pdlUmQCF2YHw3MSQlM3Z0XkAkb1YoMX19SVplPjg0NWhXZFdMdkxWJT9vb0JhQCN2YUNOKmZ3US9Sd0pWM20rLDt1JFQ1KEpIO1okdSpwQFle'@;
put 'ey9rSlJBNyJ+dlomTnZPOVk4SnNIbzIvfEAiUzY0KyJ4XSZ3YSZ5JGgvNnYsdCxpdyooIjhHQFtib0VEZD1FL2g1Q3YyV2tIOVtWNnRON3tnQkI7elVkUylBSDRSaVA3cSF2SjpuNzFbI0YkSF5jPWEyR0NNcmN+QyskTSxCITEsZmpbdTNfUzl5VDRCfERrdHo1Sio8Ji5IdzhgfT8uKl8oLGhS'@;
put 'UnhSWF8jXmRTNHBMVDhgPy9WNl0wJikwc2xmW1pgc0ZSJTpYYEI2QS9VdFU9K150Yzl7RzFmKyZZXW9TTXY4T3RFXj90cSgwNFlHQi9AW2xQRSw9ckYiSClGWTZKbHBXLyokfkQiTjl9Wm45fHM8dWBzWltSTHRWYCFqRHFtLHlRZXdYUj5yMmM1NjFyVkJVX0xUcCgoK2FkR09WT1FRJFlmWkpu'@;
put 'LDBhIXYlQE0haDY7R05aIzReVFFoR0shfDU+aXsyYWMxWCkkaD02TG5ddWgmQD8sJXIvcHR8ZVNmXThmWTB0OFdRRldhQ3RePG04IzpKd0JIdHdZPn5OQ3cuSmxXdll7cTZwO2Y+JSJaa0dOMiRreCY3PDgoaTdRPjF7TmhPNDQ5V11ubGVCeXBYZnRUYFZUUF9ZSGwlPDA0M1dbU3w2RjYje0hL'@;
put 'Tm5LWCY/Q3F1M2o1JCZUKmsyOUMqOk4pJkwhOj44KCF8NTM0TS9AOVIqSiNBZkdwMzY5VFYjYGVXfWBpN3hVaTY0KG17WnNvVTtCZXYlOF55S3klWFpBb3FNSFo0WTFPcmFbe3pbJTd7XysvI1oxRllqMGNVe0pEYCFdZVNEYHwvTzUkLkwuczN8Uyw5RzchJm57fDRkfUQxMHIiMjNhbXZ3QUNt'@;
put 'fkNlQDRaa1huZVVZPl5UJDNlSCkzP31+PFhZeisqVzBbLDR8QyRVOCNVeTpGU2I5MWFXVkJCenc3YFd8O1FvNU1Mb2YldUxpP0xCaG83NCZebGB0eUF3NVMqbDppajlPZk9rMUJVWVhjUlN5LCxjbH14aU5vVmYvQkYvI2ZUfmQwVmtbeT11ZEJudlJtNFlFeldaSzQiV2tCbnpENUZPMCZrTUF4'@;
put 'YnluMC5VRC80OyFyS2UxKEU2QnVJfUtJM1dgV3QhMCpXI3lQX3UqOlBdfTU7d1ZGcnIvIXI4TG13PEIoKWAkNEBAZWBlO28zaF5lWVkxKHBldUp7bzY5S0I1NnZCa28kRFArT3o5dCtTc3FjTGBRKk9jd3YpWXFobTJ3XWdbbHYubTo/cGVVKStfci48d1AsST9MaX4/YXxteEJyMWM5bkR2dmlE'@;
put 'XW4pQERxe0BnL3BxcF05WFdrbGN6XVVqUXRbcntIWCZVSVBZU0d3NyZ6UmM/aWY1NiMqbi9lXyk9STc0TmU+KkMrJTc2d0U1Vl9xNyolOkk3NlZCIXVXb1llPStwP2l8MzxSRypRfDMpN3RKbT44NCxbeyhVeXBiUnBPOEg5N1dJRjhvLz0kZXglREU6e043fmB1OmJEcFBvTC81dGVtdkgoXVgz'@;
put 'Tz8lRjt5K2pvKzFZbUEzWC4wMUshNUElT0hYIklrPz90UG1wYHYvYk1scWpGSys6WSNnbl9gN0oiR0o7dEYzIT5DNG1heDduKzc/XitSRUApYUArajhAdW1ZPWVBaXM0KzoqRkA2Vy90Z35qYHZeV3h5cEwjcSZ2IWMwZiNRWWVtfFQmKSlOI3VzdTlNcV4hYmZuQFZWT3tKXl5EIl9hQ3haVENw'@;
put 'JUxDVj1CQmlRdSIvamNRZDowYU9JTyV8ckoxbz1kQz51M2pedjtbXkwmdVhjQikobWxufllRQTVzbkYxd0ElazRJWlglRXs0TSl7dFA/MkJCdW1xUyRWdk87czR9a0ZGISxqKX0iR0BnUzF4Wjo5e0pZNkF+PF8/KCtNeTNYYztKIjNDWEtfWmQmfjZqUHx5KW9lZjVaWDAuVUV5YD0sSigjZ2hU'@;
put 'bHo0PHJJWjg6KTx0WTlwRyw2V2RGYXRgZV5XX1UmOT1EWm42ZWApbkd4UStDMyxrRnlJUTx8ZEZvekFdfWB2QnEsaShSSCFMUEhebkhvS0g1SyxvNnQjLixDfHA/WHFrfCk1cis6Vls1OGh4QCoyWVRMMCxgM1ldRDEmaV90c0ovR2ZmS1pqciIsfHQ8SDVSIV5pOigkNik8NSNFVjdTaHg9QS5F'@;
put 'dSt4dn0sXnRQYXh7O34yLlZVdD1lMmBrRiFxaSJ5XWMjd1Y4dVNzbTYuN2hSKXluV3t7ZHR1fSpMWTJ1X2B6alI/cWE0Wzh8Q2VXSStuKHdUay4yWWcqLmJOQkNfeUI7fVYyKi9yKUMjWCsofUhEOUY9THw/ND07Yzd4NiVtTkAzOXtSRjFoIi4vWUZKY3FUYW0hSkk0OzooRjxVNEhdT2csSHRt'@;
put 'VWc9OUNCWzo7TjlDRzc7L3x1Q09qMl9IOVRxfkQ8eGp3Sj85MlFUW05sMXFaQ3BfNTdQUz99cyNaVztfdm17Ol9SWm5zP3FodyRtMD4ofFozTUldTz0kc0FdTWhKIzBoY0NLPXVfRS5TNypSZS8zdCN4WXk2bGI0b0ciTSltUyZJUTE9Z0UxMnw8V1phTFUsejV7fE5RPz1JaDNoSVQzNVApLFos'@;
put 'QzBwKmhfIl5CV3JSNT5YdiguVjdiXV8wLyJvUy84bks4R1pWeDspeH0jYVZYKXomY2JuREdKMCh8bHV7JURaaTJSb2t5OVMibEU2cGtxMV1TPHwlMFUzVTNdSG1DL15pRmI1X104KCt6YXczeVVLSERmaC8iZ2BXV09BaihwK2MwdToqWHI8LjAzVSgsR0E+ZSpGbC5acVZQWkpRV1hMLFojbjg5'@;
put 'Q35ZRXBmQlk9STJQJlF3QXtxS2pFTzFeJHJEMWBzbm9CSlBoOl8xITVnJD4md2d4KWB2WFo+QCIyRmFQPCpgIXYwVzEhTzxzal5DTjMlcVZRfUQuNGUoZGtaVVleM1dwS1dVQFUraT1jPClUe0lDK2MlQSlXay80OTZUWXh8aVN5OFBSK0N4ZS5GPlt3QGAkaytoZCRBT1o8QnJLYDVUMyVuJnNM'@;
put 'RCJlTElQaiJUNmYzcnlyQywoe09MX0d6X2Nze30jfVNWNmpnQmAmYCVje0FTPm53TkBia3U4MGdEOng3VXRHMlQ/PnYhLj9AOnwmPW50MFVkZEB8I3QsTW1YWnxGMTFZVlg1ZE9TTEFMMF5tVFozfjEsdkNuIUBMWCRoPUZHYkE2TGg0JV45emdvc0xMTmNuV2w0K3k5OjN5WlptfltJaDJfR3Zv'@;
put 'PkBWUnNYLFRuYFNlNz5fckYvSCJ7L1tqaGFwaXo5Wz8raWx6S2J5e00oMj5mXTh1cTd4TSpoNGUvXUgqdk1TOnleeE0iU1RdTyxaR2UrYGIuYHFXOW5EOlQiNlJbcXY9bDBwODBCaGBmejVbPUdFWU19MTBCfEEzX340YmgmTG9ZMEw0fW4mVDY3TH1veC9xUlhUe2UoZShJYltue2FkJDY5XWpa'@;
put 'IXBoOE86a2QrZD1nVzhIUjJEOyI/NFB2MXBJe1Z6SEEwP3hlPU9fdlVeXzMhalsjVlgoJS5MYzZzVT47MXhJJUtvOGN6SF9SeTluYzsxeU04WTM3NDxSTmVYK1BxIlUsK2N+RS5vfSJWflMwOHtxY340M0RiUDQxRWxVanx4YkVMal1bJEBNQi9iWUY0UG9WNllmPGUqTiFZPztIWl5OOmAjXTRN'@;
put 'NFIqfXVJP3RAQElMNyZ1djVxeXRuaER5bTc8Tl0iLDQkJCZVR3s3TW18RT40IlgyfH1uUD5pe1RSOU98d08/W09JQ3RjeDM0OiF2b31DP1glOWo5TnRiO2UobjwzPmljVVg4Qn0pNGc5QiN8WWB1elclLk5OTFNvJH0oTmRNMDJtISgrNSh+cFk+d1ZJd2hJX3A1fEBMIVRdYyg9bjJbWU1ubj5V'@;
put 'bDB9PWdCOGBXKG9kOTpZNXBqaDk/RHZBXz8mJDAvJmx5IWchPWpgK10+P2xgZD1ge21JJEtVaHx1e15lWyY4WjJfNFcjfTleKU12WHk3ayZlTywsJjlbQVB9eGlKKiZNKFYiX3AmMGlfO11UOXYmTDNHQ3BZNE0qZVF3RDJAZH5LQlcyNVkuWDB4bTB+eF9PM305bn1hN0I1ckMlaEMyT35EQGNU'@;
put 'MF5lQ2E7flNfIjlAOD1lfm4hKUJoQFVRcl5lfENUWDR8QGJUO1NmVU5obFd2dllsOGlxclMzaClQXmY5QD93O29yOWtlfFYkd3I8fEJPRi5hIWNVJSg4JXNmQygxPC5Ke3MuTTgrNGd1PVpOMj1IRUhKcjh3ckNGQSJnPXR3eSxdVmdrZzRANjZHWUZUZ3QwYF18R2VoOT83a1cuWyRtNC4kTEUs'@;
put 'ajRwKFZFRFFxfi4iQjtpWWdMVS43dVJ0XmxxLGYzZSVRLF5UcmlmN3I8LjRXbTJ9MyhgYEAqK1BJOSgwP0p7UDN7eiMkZURCPGY5TzolfWolKiVDZT5UWjhJJiEsZ0J2fTtkeTZ1emw3WkBIWiJwYj9yMCRnPUhtfWB8ZE1iWlhrPXpzLkJ9a0pjU2YqIylEOjA4RnI0Qzxicn1kezdYWk1VeTpW'@;
put 'Qn01KzcqU1omXyNYSHxUYlhyVl1hTnNVXW8qcW90KnxjOCkjdWI9M2o0aCV6YjZfMHUlMEs5WmtgS2dbNTtIUSE7QkBeXUgyOX5wZ2slTy5kJlhbeCNRb14pOV1hKnZwVyhDRyRxIj8+PmwoSlBAQGlVRG9CX3RxKHBTejVie3UrJioyLHh4OkN6KltEU2FeY1deckBlWEBQIiNrN0xuOFJvb2Q0'@;
put 'VkI0aTJrcSwha0JtN3RXREBVOjsxX1AjZ30xKjlscUtmIiowVD8oOUYiYiJQPV8ud15zX1hnMUJsV1s7eSU4fDxPVExqR3lkKHF4Smc3eHAhTH57M3Nye1o1cVt7RUlwXVQpVWdjZiYmd31sdStzan5Ld3hQbEszb2w6az0pYTszTiZHMl43TDp0TVBQeiQvMyR8RnBSJlA5anN9MTUzd1Q0eWJ9'@;
put 'bkxGej4jIyVqJEloMH5QYEJfeCx6OGhHTzFeZnMweSNVQy9zVGgyU34uWzFIJCEkQjUmTVB4O0InKSksQ3d8fChDdz1SSmUoe3dhc21CaW5hcnk6WFUsbG9jYXRlRmlsZTp2b2lkIDB9KSksQ3cpLnRoZW4obD0+bmV3IERUKGwpKX1zdGF0aWMgdW5sb2FkKCl7Q3cmJihDdz12b2lkIDApfXZl'@;
put 'cnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnByb3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGwsYT0ic3ZnIixkPSJkb3QiLGgpe2lmKCFsKXJldHVybiIiO2NvbnN0IGY9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeihoPy55SW52ZXJ0PzE6MCxoPy5ub3A/aD8ubm9wOjAp'@;
put 'O2xldCBfPSIiLFQ9IiI7dHJ5eyFmdW5jdGlvbihXLGllKXtjb25zdCBnZT17aW1hZ2VzOltdLGZpbGVzOltdLC4uLmllfTt2YXIgd2U7Wy4uLmdlLmZpbGVzLC4uLih3ZT1nZS5pbWFnZXMsd2UubWFwKE9KZSkpXS5mb3JFYWNoKEVlPT5XLmNyZWF0ZUZpbGUoRWUucGF0aCxFZS5kYXRhKSl9'@;
put 'KGYsaCk7dHJ5e189Zi5sYXlvdXQobCxhLGQpfWNhdGNoKFcpe1Q9Vy5tZXNzYWdlfVQ9Zi5sYXN0RXJyb3IoKXx8VH1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGYpfWlmKCFfJiZUKXRocm93IG5ldyBFcnJvcihUKTtyZXR1cm4gX31jaXJjbyhsLGE9InN2ZyIsZCl7cmV0dXJuIHRo'@;
put 'aXMubGF5b3V0KGwsYSwiY2lyY28iLGQpfWRvdChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiZG90IixkKX1mZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImZkcCIsZCl9c2ZkcChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwi'@;
put 'c2ZkcCIsZCl9bmVhdG8obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm5lYXRvIixkKX1vc2FnZShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwib3NhZ2UiLGQpfXBhdGNod29yayhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwicGF0'@;
put 'Y2h3b3JrIixkKX10d29waShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwidHdvcGkiLGQpfX1mdW5jdGlvbiBJVChjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxjKX1mdW5jdGlvbiBjNChjKXtyZXR1cm4gTWF0aC5yb3VuZCgxMDAqYykvMTAwfWZ1bmN0aW9uIG5sZShj'@;
put 'LGwpe2lmKCJwb2x5Z29uIj09Yy50YWcpeyhhPUlUKGMpKS50YWc9InBhdGgiO3ZhciBoPUlUKGQ9Yy5hdHRyaWJ1dGVzKSxmPWQucG9pbnRzO2lmKCJwb2x5Z29uIj09bC50YWcpeyhfPWMuYmJveCkuY3g9Xy54K18ud2lkdGgvMixfLmN5PV8ueStfLmhlaWdodC8yO2Zvcih2YXIgVz1kLnBv'@;
put 'aW50cy5zcGxpdCgiICIpLGllPVcubWFwKGZ1bmN0aW9uKEZuKXt2YXIgRnI9Rm4uc3BsaXQoIiwiKTtyZXR1cm5bRnJbMF0tXy5jeCxGclsxXS1fLmN5XX0pLGdlPWllW2llLmxlbmd0aC0xXVswXSx3ZT1pZVtpZS5sZW5ndGgtMV1bMV0sRWU9MDtFZTxpZS5sZW5ndGg7RWUrKyxnZT1aZSx3'@;
put 'ZT1vdCl7dmFyIGV0PShaZT1pZVtFZV1bMF0pLWdlO2lmKDAhPSh5dD0ob3Q9aWVbRWVdWzFdKS13ZSkmJjA8PShrdD1nZS13ZSpldC95dCkmJmt0PDEvMCYmKGdlPD1rdCYma3Q8PVplfHxaZTw9a3QmJmt0PD1nZSkpYnJlYWt9dmFyIFN0PVtbXy5jeCtrdCxfLmN5KzBdLmpvaW4oIiwiKV07'@;
put 'Zj0oU3Q9KFN0PVN0LmNvbmNhdChXLnNsaWNlKEVlKSkpLmNvbmNhdChXLnNsaWNlKDAsRWUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9SVQoYykpLnRhZz0icGF0aCIsaD1JVChkPWMuYXR0cmlidXRlcyk7'@;
put 'dmFyIGQsWmUsb3Qsa3QsUXQ9ZC5jeCxybj1kLmN5LHZuPWQucngsTm49ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgXzsoXz1sLmJib3gpLmN4PV8ueCtfLndpZHRoLzIsXy5jeT1fLnkrXy5oZWlnaHQvMjt2YXIgY3I9bC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpWzBdLnNw'@;
put 'bGl0KCIsIikseXQ9KGV0PWNyWzBdLV8uY3gsY3JbMV0tXy5jeSksbGk9TWF0aC5zcXJ0KE1hdGgucG93KGV0LDIpK01hdGgucG93KHl0LDIpKSxtcj1ldC9saSxFaT0teXQvbGl9ZWxzZSBtcj0xLEVpPTA7aC5kPSJNICIrUXQrIiAiK3JuKyIgbSAiKyhaZT12biptcikrIiwiKyhvdD0tTm4q'@;
put 'RWkpKyIgYSAiK3ZuKyIsIitObisiIDAgMSwwICIrKGV0PShrdD12biotbXIpLVplKSsiLCIrKHl0PS1ObiotRWktb3QpKyIgYSAiK3ZuKyIsIitObisiIDAgMSwwICIrLWV0KyIsIisteXQrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0'@;
put 'cmlidXRlcz1ofXJldHVybiBhfWZ1bmN0aW9uIEhKZSgpe3RyeXtEVC5sb2FkKCkudGhlbihhPT57YS5sYXlvdXQoIiIsInN2ZyIsImRvdCIpLHRoaXMubGF5b3V0U3luYz1hLmxheW91dC5iaW5kKGEpLG51bGw9PXRoaXMuX3dvcmtlciYmdGhpcy5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIs'@;
put 'dGhpcyksdGhpcy5fYWZ0ZXJJbml0JiZ0aGlzLl9hZnRlckluaXQoKX0pfWNhdGNoe31pZihudWxsIT10aGlzLl93b3JrZXIpe3ZhciBjPXRoaXMuX3ZpelVSTCxsPXRoaXM7dGhpcy5fd29ya2VyUG9ydC5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7bC5fd29ya2VyQ2FsbGJhY2tzLnNoaWZ0KCku'@;
put 'Y2FsbChsLGEpfSxjLm1hdGNoKC9eaHR0cHM/OlwvXC98XlwvXC8vaSl8fChjPW5ldyB3aW5kb3cuVVJMKGMsZG9jdW1lbnQubG9jYXRpb24uaHJlZikuaHJlZiksSlUuY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDoiIixlbmdpbmU6ImRvdCIsdml6VVJMOmN9LGZ1bmN0aW9uKGEpe30p'@;
put 'LEpVLmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9uKGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiBKVShjLGwpe3RoaXMuX3dv'@;
put 'cmtlckNhbGxiYWNrcy5wdXNoKGwpLHRoaXMuX3dvcmtlclBvcnQucG9zdE1lc3NhZ2UoYyl9ZnVuY3Rpb24gQkplKGMsbCl7dmFyIGE9dGhpcy5fb3B0aW9ucy5rZXlNb2RlLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcztpZigic3RyaW5n'@;
put 'Ij09dHlwZW9mIHRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24mJnRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKSl2YXIgZj0rdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5zcGxpdCgiJSIpWzBdLzEwMCxfPXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNp'@;
put 'b24uaW5jbHVkZXMoIiUiKTtlbHNlIGY9dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbixfPSExO3ZhciBUPXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMsVz17fSxpZT10aGlzLl9kaWN0aW9uYXJ5fHx7fSxnZT17fSx3ZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8e307ZnVuY3Rp'@;
put 'b24ga3QobXIsRWk9MCxacil7KGZ1bmN0aW9uIEVlKG1yLEVpKXt2YXIgWnI9bXIudGFnO2lmKCJpbmRleCI9PWEpbXIua2V5PUVpO2Vsc2UgaWYoIiMiIT1aclswXSlpZigiaWQiPT1hKW1yLmtleT1tci5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRpdGxlIj09YSl7dmFyIEZuPW1yLmNoaWxk'@;
put 'cmVuLmZpbmQoZnVuY3Rpb24oRnIpe3JldHVybiJ0aXRsZSI9PUZyLnRhZ30pO0ZuJiYobXIua2V5PUZuLmNoaWxkcmVuLmxlbmd0aD4wP0ZuLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PW1yLmtleSYmKGgmJigiZWxsaXBzZSI9PVpyfHwicG9seWdvbiI9PVpyKSYmKFpyPSJwYXRoIiks'@;
put 'bXIua2V5PVpyKyItIitFaSl9KShtcixFaSksZnVuY3Rpb24gWmUobXIsRWkpe21yLmlkPShFaT9FaS5pZCsiLiI6IiIpK21yLmtleX0obXIsWnIpO3ZhciBGcj1pZVttci5pZF07KGZ1bmN0aW9uIG90KG1yKXtXW21yLmlkXT1tcn0pKG1yKSxmdW5jdGlvbiBldChtcixFaSl7aCYmbXIuaWQg'@;
put 'aW4gaWUmJigicG9seWdvbiI9PUVpLnRhZ3x8ImVsbGlwc2UiPT1FaS50YWd8fCJwYXRoIj09RWkudGFnKSYmKEVpLnRhZyE9bXIudGFnfHwicG9seWdvbiI9PW1yLnRhZykmJigicGF0aCIhPUVpLnRhZyYmKG1yLmFsdGVybmF0aXZlT2xkPW5sZShFaSxtcikpLCJwYXRoIiE9bXIudGFnJiYo'@;
put 'bXIuYWx0ZXJuYXRpdmVOZXc9bmxlKG1yLEVpKSkpfShtcixGciksZnVuY3Rpb24geXQobXIsRWkpe2lmKGQmJkVpJiYoInBhdGgiPT1FaS50YWd8fG1yLmFsdGVybmF0aXZlT2xkJiYicGF0aCI9PW1yLmFsdGVybmF0aXZlT2xkLnRhZykpe3ZhciBacj0obXIuYWx0ZXJuYXRpdmVOZXd8fG1y'@;
put 'KS5hdHRyaWJ1dGVzLmQ7aWYobXIuYWx0ZXJuYXRpdmVPbGQpdmFyIEZuPVpVKG1yLmFsdGVybmF0aXZlT2xkKTtlbHNlIEZuPVpVKEVpKTsobXIuYWx0ZXJuYXRpdmVPbGR8fChtci5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiBmSmUoYyxsLGEsZCl7Y29uc3QgaD1jLGY9'@;
put 'aC5jbG9uZU5vZGUoKSxfPWguZ2V0VG90YWxMZW5ndGgoKSxUPShmLnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxXPVswXTtsZXQgaWU9MDtjb25zdCBnZT1kP2E6YS9NYXRoLm1heChfLFQpO2Zvcig7KGllKz1nZSk8MTspVy5wdXNoKGllKTtyZXR1cm4gVy5wdXNo'@;
put 'KDEpLFcubWFwKGZ1bmN0aW9uKEVlKXtjb25zdCBaZT1oLmdldFBvaW50QXRMZW5ndGgoRWUqXyksb3Q9Zi5nZXRQb2ludEF0TGVuZ3RoKEVlKlQpO3JldHVybltbWmUueCxaZS55XSxbb3QueCxvdC55XV19KX0oRm4sWnIsZixfKX19KG1yLEZyKTt2YXIgUW49e307bXIuY2hpbGRyZW4uZm9y'@;
put 'RWFjaChmdW5jdGlvbihNcil7dmFyIF9yPU1yLnRhZzsoImVsbGlwc2UiPT1fcnx8InBvbHlnb24iPT1fcikmJihfcj0icGF0aCIpLG51bGw9PVFuW19yXSYmKFFuW19yXT0wKSxrdChNcixRbltfcl0rKyxtcil9KX1mdW5jdGlvbiBybihtcil7KGZ1bmN0aW9uIFN0KG1yKXtpZihUJiZtci5w'@;
put 'YXJlbnQmJiJub2RlIj09bXIucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3MmJiJ0aXRsZSI9PW1yLnRhZyl7aWYobXIuY2hpbGRyZW4ubGVuZ3RoPjApdmFyIEZuPW1yLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBGbj0iIjtnZVtGbl09bXIucGFyZW50fX0pKG1yKSxmdW5jdGlvbiBRdChtcil7dmFy'@;
put 'IFpyPW1yLnRhZztpZihUJiYhaWVbbXIuaWRdJiZtci5wYXJlbnQmJkphZShtcikmJigicGF0aCI9PVpyfHwicG9seWdvbiI9PVpyKSl7aWYoInBvbHlnb24iPT1acil7dmFyIEZyPW1yLnBhcmVudC5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKFlyKXtyZXR1cm4icGF0aCI9PVlyLnRhZ30pO0Zy'@;
put 'JiYobXIudG90YWxMZW5ndGg9RnIudG90YWxMZW5ndGgpfXZhciBRbj1mdW5jdGlvbiBtSmUoYyl7cmV0dXJuIGZ1bmN0aW9uIGdKZShjKXtyZXR1cm4iZWRnZSI9PWMucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3M/Yy5wYXJlbnQ6Yy5wYXJlbnQucGFyZW50LnBhcmVudH0oYykuY2hpbGRyZW4u'@;
put 'ZmluZChmdW5jdGlvbihsKXtyZXR1cm4idGl0bGUiPT1sLnRhZ30pfShtciksTXI9UW4uY2hpbGRyZW5bMF0sX3I9TXIudGV4dC5zcGxpdCgiLT4iKTsyIT1fci5sZW5ndGgmJihfcj1Nci50ZXh0LnNwbGl0KCItLSIpKTt2YXIgdnQ9X3JbMF0sT3Q9Z2VbdnRdLGNuPXdlW3Z0XTtpZihjbil7'@;
put 'aWYoKE9uPU90LmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihZcixOcil7cmV0dXJuImciPT1Zci50YWd9KSk+PTApe3ZhciBFbj1PdC5jaGlsZHJlbltPbl0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKFlyLE5yKXtyZXR1cm4iYSI9PVlyLnRhZ30pO090PU90LmNoaWxkcmVuW09u'@;
put 'XS5jaGlsZHJlbltFbl19KE9uPWNuLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihZcixOcil7cmV0dXJuImciPT1Zci50YWd9KSk+PTAmJihFbj1jbi5jaGlsZHJlbltPbl0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKE5yLFJpKXtyZXR1cm4iYSI9PU5yLnRhZ30pLGNuPWNuLmNo'@;
put 'aWxkcmVuW09uXS5jaGlsZHJlbltFbl0pO2Zvcih2YXIgSm49T3QuY2hpbGRyZW4sT249MDtPbjxKbi5sZW5ndGg7T24rKylpZigicG9seWdvbiI9PUpuW09uXS50YWd8fCJlbGxpcHNlIj09Sm5bT25dLnRhZ3x8InBhdGgiPT1KbltPbl0udGFnfHwidGV4dCI9PUpuW09uXS50YWcpe3ZhciBQ'@;
put 'cj1KbltPbl07YnJlYWt9dmFyIE9yPWNuLmNoaWxkcmVuO2ZvcihPbj0wO09uPE9yLmxlbmd0aDtPbisrKWlmKCJwb2x5Z29uIj09T3JbT25dLnRhZ3x8ImVsbGlwc2UiPT1PcltPbl0udGFnfHwicGF0aCI9PU9yW09uXS50YWd8fCJ0ZXh0Ij09T3JbT25dLnRhZyl7dmFyICRyPU9yW09uXTti'@;
put 'cmVha31tci5vZmZzZXQ9JHImJlByP3t4OiRyLmNlbnRlci54LVByLmNlbnRlci54LHk6JHIuY2VudGVyLnktUHIuY2VudGVyLnl9Ont4OjAseTowfX19fShtciksbXIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihFaSl7cm4oRWkpfSl9dGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0RW5k'@;
put 'Iix0aGlzKTt2YXIgdm49a3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLGNyPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGMsImltYWdlL3N2Zyt4bWwiKTt2bi5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gY3IuZG9jdW1l'@;
put 'bnRFbGVtZW50fSk7dmFyIF9pPVhnKHZuLnNlbGVjdCgic3ZnIikpO3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxrdChfaSksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMUVuZCIsdGhpcykscm4oX2kpLHRoaXMuX2Rpc3BhdGNoLmNhbGwo'@;
put 'ImRhdGFQcm9jZXNzUGFzczJFbmQiLHRoaXMpLHRoaXMuX2RhdGE9X2ksdGhpcy5fZGljdGlvbmFyeT1XLHRoaXMuX25vZGVEaWN0aW9uYXJ5PWdlLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKG1yLEVpLFpyKXt2YXIgRm49WGcobXIpO3JldHVybiBrdChGbixFaSxacikscm4oRm4pLEZu'@;
put 'fSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBMVChjLGwpe2lmKChhPShjPWw/Yy50b0V4cG9u'@;
put 'ZW50aWFsKGwtMSk6Yy50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5sZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6ZCwrYy5zbGljZShhKzEpXX12YXIgcmxlLGRRZT0vXig/OiguKT8oWzw+PV5dKSk/KFsr'@;
put 'XC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBRVShjKXtpZighKGw9ZFFlLmV4ZWMoYykpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrYyk7dmFyIGw7cmV0dXJuIG5ldyBlWih7ZmlsbDpsWzFdLGFsaWduOmxb'@;
put 'Ml0sc2lnbjpsWzNdLHN5bWJvbDpsWzRdLHplcm86bFs1XSx3aWR0aDpsWzZdLGNvbW1hOmxbN10scHJlY2lzaW9uOmxbOF0mJmxbOF0uc2xpY2UoMSksdHJpbTpsWzldLHR5cGU6bFsxMF19KX1mdW5jdGlvbiBlWihjKXt0aGlzLmZpbGw9dm9pZCAwPT09Yy5maWxsPyIgIjpjLmZpbGwrIiIs'@;
put 'dGhpcy5hbGlnbj12b2lkIDA9PT1jLmFsaWduPyI+IjpjLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1jLnN5bWJvbD8iIjpjLnN5bWJvbCsiIix0aGlzLnplcm89ISFjLnplcm8sdGhpcy53aWR0aD12b2lkIDA9'@;
put 'PT1jLndpZHRoP3ZvaWQgMDorYy53aWR0aCx0aGlzLmNvbW1hPSEhYy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lkIDA6K2MucHJlY2lzaW9uLHRoaXMudHJpbT0hIWMudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09Yy50eXBlPyIiOmMudHlwZSsiIn1mdW5j'@;
put 'dGlvbiBpbGUoYyxsKXt2YXIgYT1MVChjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJyYXkoLWgpLmpvaW4oIjAiKStkOmQubGVuZ3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsiLiIrZC5zbGljZShoKzEpOmQrbmV3IEFycmF5KGgt'@;
put 'ZC5sZW5ndGgrMikuam9pbigiMCIpfVFVLnByb3RvdHlwZT1lWi5wcm90b3R5cGUsZVoucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMu'@;
put 'd2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3Qgb2xlPXsiJSI6KGMs'@;
put 'bCk9PigxMDAqYykudG9GaXhlZChsKSxiOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gYVFlKGMpe3JldHVybiBNYXRoLmFicyhjPU1hdGgucm91bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpjLnRv'@;
put 'U3RyaW5nKDEwKX0sZTooYyxsKT0+Yy50b0V4cG9uZW50aWFsKGwpLGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9uKGwpLG86Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZyg4KSxwOihjLGwpPT5pbGUoMTAwKmMsbCkscjppbGUsczpmdW5jdGlvbiBmUWUoYyxs'@;
put 'KXt2YXIgYT1MVChjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdLGY9aC0ocmxlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGgvMykpKSkrMSxfPWQubGVuZ3RoO3JldHVybiBmPT09Xz9kOmY+Xz9kK25ldyBBcnJheShmLV8rMSkuam9pbigiMCIp'@;
put 'OmY+MD9kLnNsaWNlKDAsZikrIi4iK2Quc2xpY2UoZik6IjAuIituZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrTFQoYyxNYXRoLm1heCgwLGwrZi0xKSlbMF19LFg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmco'@;
put 'MTYpfTtmdW5jdGlvbiBzbGUoYyl7cmV0dXJuIGN9dmFyIFJULHdkLGFsZT1BcnJheS5wcm90b3R5cGUubWFwLGxsZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTshZnVuY3Rpb24gbVFlKGMpe1JUPWZ1bmN0'@;
put 'aW9uIHBRZShjKXt2YXIgbD12b2lkIDA9PT1jLmdyb3VwaW5nfHx2b2lkIDA9PT1jLnRob3VzYW5kcz9zbGU6ZnVuY3Rpb24gY1FlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBoPWEubGVuZ3RoLGY9W10sXz0wLFQ9Y1swXSxXPTA7aD4wJiZUPjAmJihXK1QrMT5kJiYoVD1N'@;
put 'YXRoLm1heCgxLGQtVykpLGYucHVzaChhLnN1YnN0cmluZyhoLT1ULGgrVCkpLCEoKFcrPVQrMSk+ZCkpOylUPWNbXz0oXysxKSVjLmxlbmd0aF07cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4obCl9fShhbGUuY2FsbChjLmdyb3VwaW5nLE51bWJlciksYy50aG91c2FuZHMrIiIpLGE9dm9pZCAw'@;
put 'PT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzBdKyIiLGQ9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAwPT09Yy5kZWNpbWFsPyIuIjpjLmRlY2ltYWwrIiIsZj12b2lkIDA9PT1jLm51bWVyYWxzP3NsZTpmdW5jdGlvbiB1UWUoYyl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKGwpe3JldHVybiBsLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fShhbGUuY2FsbChjLm51bWVyYWxzLFN0cmluZykpLF89dm9pZCAwPT09Yy5wZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIsVD12b2lkIDA9PT1jLm1pbnVzPyJcdTIyMTIiOmMubWlu'@;
put 'dXMrIiIsVz12b2lkIDA9PT1jLm5hbj8iTmFOIjpjLm5hbisiIjtmdW5jdGlvbiBpZSh3ZSl7dmFyIEVlPSh3ZT1RVSh3ZSkpLmZpbGwsWmU9d2UuYWxpZ24sb3Q9d2Uuc2lnbixldD13ZS5zeW1ib2wseXQ9d2UuemVybyxrdD13ZS53aWR0aCxTdD13ZS5jb21tYSxRdD13ZS5wcmVjaXNpb24s'@;
put 'cm49d2UudHJpbSx2bj13ZS50eXBlOyJuIj09PXZuPyhTdD0hMCx2bj0iZyIpOm9sZVt2bl18fCh2b2lkIDA9PT1RdCYmKFF0PTEyKSxybj0hMCx2bj0iZyIpLCh5dHx8IjAiPT09RWUmJiI9Ij09PVplKSYmKHl0PSEwLEVlPSIwIixaZT0iPSIpO3ZhciBObj0iJCI9PT1ldD9hOiIjIj09PWV0'@;
put 'JiYvW2JveFhdLy50ZXN0KHZuKT8iMCIrdm4udG9Mb3dlckNhc2UoKToiIixjcj0iJCI9PT1ldD9kOi9bJXBdLy50ZXN0KHZuKT9fOiIiLERyPW9sZVt2bl0sX2k9L1tkZWZncHJzJV0vLnRlc3Qodm4pO2Z1bmN0aW9uIGxpKG1yKXt2YXIgRm4sRnIsUW4sRWk9Tm4sWnI9Y3I7aWYoImMiPT09'@;
put 'dm4pWnI9RHIobXIpK1pyLG1yPSIiO2Vsc2V7dmFyIE1yPShtcj0rbXIpPDB8fDEvbXI8MDtpZihtcj1pc05hTihtcik/VzpEcihNYXRoLmFicyhtciksUXQpLHJuJiYobXI9ZnVuY3Rpb24gaFFlKGMpe2U6Zm9yKHZhciBoLGw9Yy5sZW5ndGgsYT0xLGQ9LTE7YTxsOysrYSlzd2l0Y2goY1th'@;
put 'XSl7Y2FzZSIuIjpkPWg9YTticmVhaztjYXNlIjAiOjA9PT1kJiYoZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAmJihkPTApfXJldHVybiBkPjA/Yy5zbGljZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShtcikpLE1yJiYwPT0rbXImJiIrIiE9PW90JiYoTXI9ITEp'@;
put 'LEVpPShNcj8iKCI9PT1vdD9vdDpUOiItIj09PW90fHwiKCI9PT1vdD8iIjpvdCkrRWksWnI9KCJzIj09PXZuP2xsZVs4K3JsZS8zXToiIikrWnIrKE1yJiYiKCI9PT1vdD8iKSI6IiIpLF9pKWZvcihGbj0tMSxGcj1tci5sZW5ndGg7KytGbjxGcjspaWYoNDg+KFFuPW1yLmNoYXJDb2RlQXQo'@;
put 'Rm4pKXx8UW4+NTcpe1pyPSg0Nj09PVFuP2grbXIuc2xpY2UoRm4rMSk6bXIuc2xpY2UoRm4pKStacixtcj1tci5zbGljZSgwLEZuKTticmVha319U3QmJiF5dCYmKG1yPWwobXIsMS8wKSk7dmFyIF9yPUVpLmxlbmd0aCttci5sZW5ndGgrWnIubGVuZ3RoLHZ0PV9yPGt0P25ldyBBcnJheShr'@;
put 'dC1fcisxKS5qb2luKEVlKToiIjtzd2l0Y2goU3QmJnl0JiYobXI9bCh2dCttcix2dC5sZW5ndGg/a3QtWnIubGVuZ3RoOjEvMCksdnQ9IiIpLFplKXtjYXNlIjwiOm1yPUVpK21yK1pyK3Z0O2JyZWFrO2Nhc2UiPSI6bXI9RWkrdnQrbXIrWnI7YnJlYWs7Y2FzZSJeIjptcj12dC5zbGljZSgw'@;
put 'LF9yPXZ0Lmxlbmd0aD4+MSkrRWkrbXIrWnIrdnQuc2xpY2UoX3IpO2JyZWFrO2RlZmF1bHQ6bXI9dnQrRWkrbXIrWnJ9cmV0dXJuIGYobXIpfXJldHVybiBRdD12b2lkIDA9PT1RdD82Oi9bZ3Byc10vLnRlc3Qodm4pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsUXQpKTpNYXRoLm1heCgwLE1h'@;
put 'dGgubWluKDIwLFF0KSksbGkudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gd2UrIiJ9LGxpfXJldHVybntmb3JtYXQ6aWUsZm9ybWF0UHJlZml4OmZ1bmN0aW9uIGdlKHdlLEVlKXt2YXIgWmU9aWUoKCh3ZT1RVSh3ZSkpLnR5cGU9ImYiLHdlKSksb3Q9MypNYXRoLm1heCgtOCxNYXRoLm1p'@;
put 'big4LE1hdGguZmxvb3IoZnVuY3Rpb24gbFFlKGMpe3JldHVybihjPUxUKE1hdGguYWJzKGMpKSk/Y1sxXTpOYU59KEVlKS8zKSkpLGV0PU1hdGgucG93KDEwLC1vdCkseXQ9bGxlWzgrb3QvM107cmV0dXJuIGZ1bmN0aW9uKGt0KXtyZXR1cm4gWmUoZXQqa3QpK3l0fX19fShjKSx3ZD1SVC5m'@;
put 'b3JtYXR9KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO2NvbnN0IHRaPU1hdGguUEksblo9Mip0WixRZz0xZS02LGJRZT1uWi1RZztmdW5jdGlvbiBjbGUoYyl7dGhpcy5fKz1jWzBdO2ZvcihsZXQgbD0xLGE9Yy5sZW5ndGg7bDxhOysrbCl0aGlzLl8r'@;
put 'PWFyZ3VtZW50c1tsXStjW2xdfWNsYXNzIHJae2NvbnN0cnVjdG9yKGwpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1udWxsPT1sP2NsZTpmdW5jdGlvbiB5UWUoYyl7bGV0IGw9TWF0aC5mbG9vcihjKTtpZighKGw+PTAp'@;
put 'KXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7Y31gKTtpZihsPjE1KXJldHVybiBjbGU7Y29uc3QgYT0xMCoqbDtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5fKz1kWzBdO2ZvcihsZXQgaD0xLGY9ZC5sZW5ndGg7aDxmOysraCl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRz'@;
put 'W2hdKmEpL2ErZFtoXX19KGwpfW1vdmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1gfWNsb3NlUGF0aCgpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMu'@;
put 'X2FwcGVuZGBaYCl9bGluZVRvKGwsYSl7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPStsfSwke3RoaXMuX3kxPSthfWB9cXVhZHJhdGljQ3VydmVUbyhsLGEsZCxoKXt0aGlzLl9hcHBlbmRgUSR7K2x9LCR7K2F9LCR7dGhpcy5feDE9K2R9LCR7dGhpcy5feTE9K2h9YH1iZXppZXJDdXJ2ZVRv'@;
put 'KGwsYSxkLGgsZixfKXt0aGlzLl9hcHBlbmRgQyR7K2x9LCR7K2F9LCR7K2R9LCR7K2h9LCR7dGhpcy5feDE9K2Z9LCR7dGhpcy5feTE9K199YH1hcmNUbyhsLGEsZCxoLGYpe2lmKGw9K2wsYT0rYSxkPStkLGg9K2gsKGY9K2YpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6'@;
put 'ICR7Zn1gKTtsZXQgXz10aGlzLl94MSxUPXRoaXMuX3kxLFc9ZC1sLGllPWgtYSxnZT1fLWwsd2U9VC1hLEVlPWdlKmdlK3dlKndlO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWA7ZWxzZSBpZihFZT5RZylpZihNYXRoLmFicyh3'@;
put 'ZSpXLWllKmdlKT5RZyYmZil7bGV0IFplPWQtXyxvdD1oLVQsZXQ9VypXK2llKmllLHl0PVplKlplK290Km90LGt0PU1hdGguc3FydChldCksU3Q9TWF0aC5zcXJ0KEVlKSxRdD1mKk1hdGgudGFuKCh0Wi1NYXRoLmFjb3MoKGV0K0VlLXl0KS8oMiprdCpTdCkpKS8yKSxybj1RdC9TdCx2bj1R'@;
put 'dC9rdDtNYXRoLmFicyhybi0xKT5RZyYmdGhpcy5fYXBwZW5kYEwke2wrcm4qZ2V9LCR7YStybip3ZX1gLHRoaXMuX2FwcGVuZGBBJHtmfSwke2Z9LDAsMCwkeysod2UqWmU+Z2Uqb3QpfSwke3RoaXMuX3gxPWwrdm4qV30sJHt0aGlzLl95MT1hK3ZuKmllfWB9ZWxzZSB0aGlzLl9hcHBlbmRg'@;
put 'TCR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWB9YXJjKGwsYSxkLGgsZixfKXtpZihsPStsLGE9K2EsXz0hIV8sKGQ9K2QpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7ZH1gKTtsZXQgVD1kKk1hdGguY29zKGgpLFc9ZCpNYXRoLnNpbihoKSxpZT1sK1QsZ2U9YStX'@;
put 'LHdlPTFeXyxFZT1fP2gtZjpmLWg7bnVsbD09PXRoaXMuX3gxP3RoaXMuX2FwcGVuZGBNJHtpZX0sJHtnZX1gOihNYXRoLmFicyh0aGlzLl94MS1pZSk+UWd8fE1hdGguYWJzKHRoaXMuX3kxLWdlKT5RZykmJnRoaXMuX2FwcGVuZGBMJHtpZX0sJHtnZX1gLGQmJihFZTwwJiYoRWU9RWUlblor'@;
put 'blopLEVlPmJRZT90aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLDEsJHt3ZX0sJHtsLVR9LCR7YS1XfUEke2R9LCR7ZH0sMCwxLCR7d2V9LCR7dGhpcy5feDE9aWV9LCR7dGhpcy5feTE9Z2V9YDpFZT5RZyYmdGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwkeysoRWU+PXRaKX0sJHt3ZX0sJHt0'@;
put 'aGlzLl94MT1sK2QqTWF0aC5jb3MoZil9LCR7dGhpcy5feTE9YStkKk1hdGguc2luKGYpfWApfXJlY3QobCxhLGQsaCl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStsfSwke3RoaXMuX3kwPXRoaXMuX3kxPSthfWgke2Q9K2R9diR7K2h9aCR7LWR9WmB9dG9TdHJpbmcoKXty'@;
put 'ZXR1cm4gdGhpcy5ffX1mdW5jdGlvbiB1bGUoKXtyZXR1cm4gbmV3IHJafWZ1bmN0aW9uIHdRZShjLGwsYSxkKXtyZXR1cm4gbD0tbCxkPS1kLFtjLGxdPVtjKmEtbCpkLGMqZCtsKmFdLFtjLGw9LWxdfWZ1bmN0aW9uIGRsZShjLGwsYSxkLGgsZixfKXt2YXIgVz1YZyhnbGUuY2FsbCh0aGlz'@;
put 'LGYpKTtjLmRhdGEoW1ddKSxfdy5jYWxsKGMubm9kZSgpLFcpLGhsZShjLGwsYSxkLGgsZixfKX1mdW5jdGlvbiBobGUoYyxsLGEsZCxoLGYsXyl7dmFyIFQ9Xy5zaG9ydGVuaW5nfHwwLHdlPVtbMCwtMy41XSxbMTAsMF0sWzAsMy41XSxbMCwtMy41XV0sRWU9ZC1sLFplPWgtYSxvdD1NYXRo'@;
put 'LnNxcnQoRWUqRWUrWmUqWmUpO2lmKDA9PW90KXZhciBldD0xLHl0PTA7ZWxzZSBldD1FZS9vdCx5dD1aZS9vdDtpZihkPWwrKG90LVQtMTAtLjEpKmV0LGg9YSsob3QtVC0xMC0uMSkqeXQsZi5VUkx8fGYudG9vbHRpcCl2YXIga3Q9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJn'@;
put 'Iikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLFN0PWt0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxRdD1rdC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7ZWxzZSBTdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24o'@;
put 'InBhdGgiKSxRdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTt2YXIgcm49dWxlKCk7cm4ubW92ZVRvKGwsYSkscm4ubGluZVRvKGQsaCksU3QuYXR0cigiZCIscm4pLGQ9bCsob3QtVC0xMCkqZXQsaD1hKyhvdC1ULTEwKSp5dDtmb3IodmFyIHZuPTA7dm48d2Uu'@;
put 'bGVuZ3RoO3ZuKyspd2Vbdm5dPXdRZSgoTm49d2Vbdm5dKVswXSxOblsxXSxldCx5dCk7Zm9yKHZuPTA7dm48d2UubGVuZ3RoO3ZuKyspd2Vbdm5dPVtkKyhObj13ZVt2bl0pWzBdLGgrTm5bMV1dO3ZhciBjcj1bXTtmb3Iodm49MDt2bjx3ZS5sZW5ndGg7dm4rKyl7dmFyIE5uO2NyLnB1c2go'@;
put 'KE5uPXdlW3ZuXSkuam9pbigiLCIpKX12YXIgRHI9Y3Iuam9pbigiICIpO3JldHVybiBRdC5hdHRyKCJwb2ludHMiLERyKSx0aGlzfWZ1bmN0aW9uIGZsZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/KHRoaXMuX2RyYXduRWRnZS5nLnJlbW92ZSgpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRo'@;
put 'aXMpOnRoaXN9ZnVuY3Rpb24gcGxlKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT90aGlzLl9kcmF3bkVkZ2UuZzprcyhudWxsKX1mdW5jdGlvbiBnbGUoYyl7dmFyIGw9IiI7Zm9yKHZhciBhIG9mIE9iamVjdC5rZXlzKGMpKW51bGwhPWNbYV0mJihsKz0nICInK2ErJyI9IicrY1thXSsnIicp'@;
put 'O3ZhciBoPXRoaXMubGF5b3V0U3luYygiZGlncmFwaCB7YSAtPiBiIFsiK2wrIl19Iiwic3ZnIiwiZG90IiksXz0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhoLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIGtzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo'@;
put 'KSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIF8uZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIuZWRnZSIpfWZ1bmN0aW9uIG1sZShjLGwsYSxkLGgsZil7dmFyIFQ9WGcoeWxlLmNhbGwodGhpcyxkLGgpKTtyZXR1cm4gYy5kYXRhKFtUXSksX3cuY2FsbChjLm5vZGUoKSxUKSx2bGUoYyxs'@;
put 'LGEsaCksdGhpc31mdW5jdGlvbiB2bGUoYyxsLGEsZCxoKXtpZihkLlVSTHx8ZC50b29sdGlwKXZhciBmPWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKTtlbHNlIGY9Yzt2YXIgXz1mLnNlbGVjdEFsbCgiZWxsaXBz'@;
put 'ZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxUPWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpO2lmKDAhPV8uc2l6ZSgpKXt2YXIgVz1fLm5vZGUoKS5nZXRCQm94KCk7Vy5jeD1XLngrVy53aWR0aC8yLFcuY3k9Vy55K1cuaGVpZ2h0LzJ9ZWxzZSAwIT1ULnNpemUoKSYm'@;
put 'KFc9e3g6K1QuYXR0cigieCIpLHk6K1QuYXR0cigieSIpLHdpZHRoOjAsaGVpZ2h0OjAsY3g6K1QuYXR0cigieCIpLGN5OitULmF0dHIoInkiKX0pO3JldHVybiBfLmVhY2goZnVuY3Rpb24oaWUsZ2Upe3ZhciB3ZT1rcyh0aGlzKTtpZih3ZS5hdHRyKCJjeCIpKXdlLmF0dHIoImN4IixjNChs'@;
put 'KSkuYXR0cigiY3kiLGM0KGEpKTtlbHNlIGlmKHdlLmF0dHIoInBvaW50cyIpKXt2YXIgRWU9d2UuYXR0cigicG9pbnRzIikudHJpbSgpO3dlLmF0dHIoInBvaW50cyIsZnVuY3Rpb24gUEplKGYsbCxhKXt2YXIgaCxkPShoPWYuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBf'@;
put 'LnNwbGl0KCIsIil9KTtyZXR1cm4gZD1oLm1hcChmdW5jdGlvbihfKXtyZXR1cm5bYzQoK2wrICtfLnNwbGl0KCIsIilbMF0pLGM0KCthKyArXy5zcGxpdCgiLCIpWzFdKV19KSwoaD1kLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5qb2luKCIsIil9KSkuam9pbigiICIpfShFZSxsLVcuY3gs'@;
put 'YS1XLmN5KSl9ZWxzZXt2YXIgWmU9d2UuYXR0cigiZCIpO3dlLmF0dHIoImQiLGZ1bmN0aW9uIEZKZShjLGwsYSl7KGY9Yy5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCk7dmFyIGQ9Yy5zcGxpdCgvW15bQS1aIF0rLyksZj0oZi5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIF8uc3BsaXQoIiwiKX0p'@;
put 'LGYubWFwKGZ1bmN0aW9uKF8pe3JldHVybltjNCgrbCsgK18uc3BsaXQoIiwiKVswXSksYzQoK2ErICtfLnNwbGl0KCIsIilbMV0pXX0pLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5qb2luKCIsIil9KSk7cmV0dXJuIGQucmVkdWNlKGZ1bmN0aW9uKF8sVCxXKXtyZXR1cm4gXy5jb25jYXQo'@;
put 'VCxmW1ddKX0sW10pLmpvaW4oIiIpfShaZSxsLVcuY3gsYS1XLmN5KSl9fSksMCE9VC5zaXplKCkmJlQuYXR0cigieCIsYzQoK1QuYXR0cigieCIpK2wtVy5jeCkpLmF0dHIoInkiLGM0KCtULmF0dHIoInkiKSthLVcuY3kpKSx0aGlzfWZ1bmN0aW9uIF9sZSgpe2lmKCF0aGlzLl9kcmF3bk5v'@;
put 'ZGUpcmV0dXJuIHRoaXM7dmFyIGM9dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIGMuZW1wdHkoKXx8Yy5yZW1vdmUoKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfWZ1bmN0aW9uIGJsZSgpe3JldHVybiB0aGlzLl9kcmF3bk5vZGU/dGhpcy5fZHJhd25Ob2RlLmc6a3MobnVsbCl9ZnVuY3Rp'@;
put 'b24geWxlKGMsbCl7dmFyIGE9IiI7Zm9yKHZhciBkIG9mIE9iamVjdC5rZXlzKGwpKW51bGwhPWxbZF0mJihhKz0nICInK2QrJyI9IicrbFtkXSsnIicpO3ZhciBmPXRoaXMubGF5b3V0U3luYygnZ3JhcGggeyInK2MrJyIgWycrYSsiXX0iLCJzdmciLCJkb3QiKSxUPShuZXcgd2luZG93LkRP'@;
put 'TVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGYsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4ga3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gVC5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5ub2RlIil9ZnVuY3Rpb24gT1QoYyl7'@;
put 'c2VsZi5kb2N1bWVudD17fSxjLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKGwpe2xldCBhPXNlbGZbIkBocGNjLWpzL3dhc20iXTtudWxsPT1hJiZsLmRhdGEudml6VVJMJiYoaW1wb3J0U2NyaXB0cyhsLmRhdGEudml6VVJMKSxhPXNlbGZbIkBocGNjLWpzL3dhc20iXSks'@;
put 'InZlcnNpb24iIT1sLmRhdGEudHlwZT9hLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9Pntjb25zdCBoPWQubGF5b3V0KGwuZGF0YS5kb3QsInN2ZyIsbC5kYXRhLmVuZ2luZSxsLmRhdGEub3B0aW9ucyk7Yy5wb3N0TWVzc2FnZShoP3t0eXBlOiJkb25lIixzdmc6aH06bC5kYXRhLnZpelVSTD97'@;
put 'dHlwZToiaW5pdCJ9Ont0eXBlOiJza2lwIn0pfSkuY2F0Y2goZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6ImVycm9yIixlcnJvcjpkLm1lc3NhZ2V9KX0pOmEuR3JhcGh2aXoubG9hZCgpLnRoZW4oZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6InZlcnNpb24iLHZlcnNpb246ZC52ZXJzaW9uKCl9'@;
put 'KX0pfSl9ZnVuY3Rpb24gRFFlKCl7T1Qoc2VsZil9ZnVuY3Rpb24gSVFlKCl7c2VsZi5vbmNvbm5lY3Q9ZnVuY3Rpb24oYyl7Y29uc3QgbD1jLnBvcnRzWzBdO09UKGwpLGwuc3RhcnQoKX19ZnVuY3Rpb24gaVooYyxsKXtpZih0aGlzLl9vcHRpb25zPXt1c2VXb3JrZXI6ITAsdXNlU2hhcmVk'@;
put 'V29ya2VyOiExLGVuZ2luZToiZG90IixrZXlNb2RlOiJ0aXRsZSIsZmFkZTohMCx0d2VlblBhdGhzOiEwLHR3ZWVuU2hhcGVzOiEwLGNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnM6ITAsdHdlZW5QcmVjaXNpb246MSxncm93RW50ZXJpbmdFZGdlczohMCx6b29tOiEwLHpvb21TY2FsZUV4dGVu'@;
put 'dDpbLjEsMTBdLHpvb21UcmFuc2xhdGVFeHRlbnQ6W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxzY2FsZToxLGZpdDohMX0sbCBpbnN0YW5jZW9mIE9iamVjdClmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMobCkpdGhpcy5fb3B0aW9uc1thXT1sW2FdO2Vs'@;
put 'c2UiYm9vbGVhbiI9PXR5cGVvZiBsJiYodGhpcy5fb3B0aW9ucy51c2VXb3JrZXI9bCk7dmFyIGQ9dGhpcy5fb3B0aW9ucy51c2VXb3JrZXIsaD10aGlzLl9vcHRpb25zLnVzZVNoYXJlZFdvcmtlcjtpZih0eXBlb2YgV29ya2VyPiJ1IiYmKGQ9ITEpLHR5cGVvZiBTaGFyZWRXb3JrZXI+InUi'@;
put 'JiYoaD0hMSksZHx8aCl7dmFyIF89TVUoInNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PWtzKHRoaXMpLmF0dHIoInR5cGUiKXx8a3ModGhpcykuYXR0cigic3JjIikmJmtzKHRoaXMpLmF0dHIoInNyYyIpLm1hdGNoKC8uKlwvQGhwY2MtanNc'@;
put 'L3dhc20vKX0pOzA9PV8uc2l6ZSgpPyhjb25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKToodGhpcy5fdml6VVJMPV8u'@;
put 'YXR0cigic3JjIiksdGhpcy5fdml6VVJMfHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEs'@;
put 'aD0hMSkpfWlmKGgpe2NvbnN0IGllPSJkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQ7YmFzZTY0LCIrYnRvYShPVC50b1N0cmluZygpKyIoIitJUWUudG9TdHJpbmcoKSsiKSgpIik7dGhpcy5fd29ya2VyPXRoaXMuX3dvcmtlcj1uZXcgU2hhcmVkV29ya2VyKGllKSx0aGlzLl93b3JrZXJQ'@;
put 'b3J0PXRoaXMuX3dvcmtlci5wb3J0LHRoaXMuX3dvcmtlclBvcnRDbG9zZT10aGlzLl93b3JrZXIucG9ydC5jbG9zZS5iaW5kKHRoaXMuX3dvcmtlclBvcnQpLHRoaXMuX3dvcmtlci5wb3J0LnN0YXJ0KCksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgaWYoZCl7dmFyIFQ9bmV3IEJs'@;
put 'b2IoW09ULnRvU3RyaW5nKCkrIigiK0RRZS50b1N0cmluZygpKyIpKCkiXSksVz13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChUKTt0aGlzLl93b3JrZXI9bmV3IFdvcmtlcihXKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlcix0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29y'@;
put 'a2VyLnRlcm1pbmF0ZS5iaW5kKHRoaXMuX3dvcmtlciksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgRFQubG9hZCgpLnRoZW4oKGllPT57dGhpcy5fZ3JhcGh2aXpWZXJzaW9uPWllLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3NlbGVjdGlvbj1jLHRoaXMuX2FjdGl2ZT0h'@;
put 'MSx0aGlzLl9idXN5PSExLHRoaXMuX2pvYnM9W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9pZCAwLHRoaXMuX3NjYWxlPXZvaWQgMCx0'@;
put 'aGlzLl9ldmVudFR5cGVzPVsiaW5pdEVuZCIsInN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJyZW5kZXJTdGFydCIsInJlbmRlckVuZCIs'@;
put 'InRyYW5zaXRpb25TdGFydCIsInRyYW5zaXRpb25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPXhVKC4uLnRoaXMuX2V2ZW50VHlwZXMpLEhKZS5jYWxsKHRoaXMpLGMubm9kZSgpLl9fZ3JhcGh2aXpfXz10aGlzfWZ1bmN0aW9uIFBUKGMsbCl7cmV0dXJu'@;
put 'IGtzKGMpLmdyYXBodml6KGwpfXVsZS5wcm90b3R5cGU9cloucHJvdG90eXBlLGlaLnByb3RvdHlwZT1QVC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlaLGVuZ2luZTpmdW5jdGlvbiBLSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZW5naW5lPWMsdGhpc30sYWRkSW1hZ2U6ZnVuY3Rpb24g'@;
put 'WEplKGMsbCxhKXtyZXR1cm4gdGhpcy5faW1hZ2VzLnB1c2goe3BhdGg6Yyx3aWR0aDpsLGhlaWdodDphfSksdGhpc30sa2V5TW9kZTpmdW5jdGlvbiBKSmUoYyl7aWYoIXRoaXMuX2tleU1vZGVzLmhhcyhjKSl0aHJvdyBFcnJvcigiSWxsZWdhbCBrZXlNb2RlOiAiK2MpO2lmKGMhPXRoaXMu'@;
put 'X29wdGlvbnMua2V5TW9kZSYmbnVsbCE9dGhpcy5fZGF0YSl0aHJvdyBFcnJvcigiVG9vIGxhdGUgdG8gY2hhbmdlIGtleU1vZGUiKTtyZXR1cm4gdGhpcy5fb3B0aW9ucy5rZXlNb2RlPWMsdGhpc30sZmFkZTpmdW5jdGlvbiBRSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZmFkZT1jLHRo'@;
put 'aXN9LHR3ZWVuUGF0aHM6ZnVuY3Rpb24gZVFlKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHM9Yyx0aGlzfSx0d2VlblNoYXBlczpmdW5jdGlvbiB0UWUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM9YyxjJiYodGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPSEw'@;
put 'KSx0aGlzfSxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOmZ1bmN0aW9uIG5RZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zPWMsdGhpc30sdHdlZW5QcmVjaXNpb246ZnVuY3Rpb24gclFlKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJl'@;
put 'Y2lzaW9uPWMsdGhpc30sZ3Jvd0VudGVyaW5nRWRnZXM6ZnVuY3Rpb24gaVFlKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzPWMsdGhpc30sem9vbTpmdW5jdGlvbiBzSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbT1jLHRoaXMuX29wdGlvbnMuem9vbSYm'@;
put 'IXRoaXMuX3pvb21CZWhhdmlvcj9LYWUuY2FsbCh0aGlzKTohdGhpcy5fb3B0aW9ucy56b29tJiZ0aGlzLl96b29tQmVoYXZpb3ImJih0aGlzLl96b29tU2VsZWN0aW9uLm9uKCIuem9vbSIsbnVsbCksdGhpcy5fem9vbUJlaGF2aW9yPW51bGwpLHRoaXN9LHJlc2V0Wm9vbTpmdW5jdGlvbiBh'@;
put 'SmUoYyl7dmFyIGw9dGhpcy5fem9vbVNlbGVjdGlvbjtyZXR1cm4gYyYmKGw9bC50cmFuc2l0aW9uKGMpKSxsLmNhbGwodGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybSksdGhpc30sem9vbUJlaGF2aW9yOmZ1bmN0aW9uIHVKZSgpe3JldHVybiB0'@;
put 'aGlzLl96b29tQmVoYXZpb3J8fG51bGx9LHpvb21TZWxlY3Rpb246ZnVuY3Rpb24gZEplKCl7cmV0dXJuIHRoaXMuX3pvb21TZWxlY3Rpb258fG51bGx9LHpvb21TY2FsZUV4dGVudDpmdW5jdGlvbiBsSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50PWMsdGhpc30s'@;
put 'em9vbVRyYW5zbGF0ZUV4dGVudDpmdW5jdGlvbiBjSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbVRyYW5zbGF0ZUV4dGVudD1jLHRoaXN9LHJlbmRlcjpmdW5jdGlvbiB2SmUoYyl7cmV0dXJuIHRoaXMuX2J1c3k/KHRoaXMuX3F1ZXVlLnB1c2godGhpcy5yZW5kZXIuYmluZCh0aGlz'@;
put 'LGMpKSx0aGlzKToodGhpcy5fZGlzcGF0Y2guY2FsbCgicmVuZGVyU3RhcnQiLHRoaXMpLHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5P2hUKGZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvbj1WVSh0aGlzLl90cmFuc2l0aW9uRmFjdG9yeSgpKSxRYWUuY2FsbCh0aGlzLGMpfS5iaW5kKHRoaXMp'@;
put 'LDApOlFhZS5jYWxsKHRoaXMsYyksdGhpcyl9LGxheW91dDpmdW5jdGlvbiBOSmUoYyxsLGEsZCl7aWYodGhpcy5fd29ya2VyKUpVLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1bmN0aW9uKGYpe2QuY2FsbCh0aGlzLGYuZGF0YSl9KTtlbHNl'@;
put 'IHRyeXt2YXIgaD10aGlzLmxheW91dFN5bmMoYywic3ZnIixsLGEpO2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYpe2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24gVkplKGMsbCl7dmFyIGE9dGhpcyxoPXRo'@;
put 'aXMuX29wdGlvbnMuZW5naW5lLGY9dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2VyfHxudWxsIT10aGlzLmxheW91dFN5bmM/'@;
put 'KHRoaXMubGF5b3V0KGMsaCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKFQpe3N3aXRjaChULnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9yKXRocm93IFQuZXJyb3IubWVzc2FnZTthLl9vbmVycm9yKFQuZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6QkplLmNhbGwodGhpcyxULnN2ZyxsKX19'@;
put 'KSx0aGlzKToodGhpcy5fYWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQodGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIHBKZSgpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gakplKGMsbCl7dmFyIGE9dGhpcztyZXR1cm4gdGhpcy5kb3QoYyxmdW5jdGlv'@;
put 'biBkKCl7YS5yZW5kZXIobCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIHpKZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PWM6dGhpcy5fdHJhbnNpdGlvbj1WVShjKSx0aGlzfSxhY3RpdmU6ZnVuY3Rpb24gVUplKGMpe3ZhciBh'@;
put 'PXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKTtyZXR1cm4gMCE9YS5zaXplKCk/ZnVuY3Rpb24gVlhlKGMsbCl7dmFyIGQsaCxhPWMuX190cmFuc2l0aW9uO2lmKGEpZm9yKGggaW4gbD1udWxsPT1sP251bGw6bCsiIixhKWlmKChkPWFbaF0pLnN0'@;
put 'YXRlPjEmJmQubmFtZT09PWwpcmV0dXJuIG5ldyBMaChbW2NdXSxOWGUsbCwraCk7cmV0dXJuIG51bGx9KGEubm9kZSgpLGMpOm51bGx9LG9wdGlvbnM6ZnVuY3Rpb24gWkplKGMpe2lmKHR5cGVvZiBjPiJ1IilyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9vcHRpb25zKTtmb3IodmFy'@;
put 'IGwgb2YgT2JqZWN0LmtleXMoYykpdGhpcy5fb3B0aW9uc1tsXT1jW2xdO3JldHVybiB0aGlzfSx3aWR0aDpmdW5jdGlvbiBZSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMud2lkdGg9Yyx0aGlzfSxoZWlnaHQ6ZnVuY3Rpb24gV0plKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmhlaWdodD1j'@;
put 'LHRoaXN9LHNjYWxlOmZ1bmN0aW9uIEdKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5zY2FsZT1jLHRoaXN9LGZpdDpmdW5jdGlvbiAkSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZml0PWMsdGhpc30sYXR0cmlidXRlcjpmdW5jdGlvbiBxSmUoYyl7cmV0dXJuIHRoaXMuX2F0dHJpYnV0'@;
put 'ZXI9Yyx0aGlzfSxvbjpmdW5jdGlvbiBvUWUoYyxsKXtyZXR1cm4gdGhpcy5fZGlzcGF0Y2gub24oYyxsKSx0aGlzfSxvbmVycm9yOmZ1bmN0aW9uIHNRZShjKXtyZXR1cm4gdGhpcy5fb25lcnJvcj1jLHRoaXN9LGxvZ0V2ZW50czpmdW5jdGlvbiB2UWUoYyl7dmFyIGw9RGF0ZS5ub3coKSxh'@;
put 'PXt9LGQ9dGhpcy5fZXZlbnRUeXBlcyxoPU1hdGgubWF4KC4uLmQubWFwKFc9PlcubGVuZ3RoKSk7Zm9yKGxldCBXPTA7VzxkLmxlbmd0aDtXKyspe2xldCBpZT1kW1ddO2FbaWVdPVtdO3ZhciBfLFQsZj10aGlzO3RoaXMub24oaWUrIi5sb2ciLGM/ZnVuY3Rpb24oKXt2YXIgZ2U9RGF0ZS5u'@;
put 'b3coKSx3ZT1hW2llXS5sZW5ndGg7YVtpZV0ucHVzaChnZSk7dmFyIEVlPSIiO2lmKEVlKz0iRXZlbnQgIixFZSs9d2QoIiA+MiIpKFcpKyIgIixFZSs9aWUrIiAiLnJlcGVhdChoLWllLmxlbmd0aCksRWUrPXdkKCIgPjUiKShnZS1sKSsiICIsImluaXRFbmQiIT1pZSYmKEVlKz13ZCgiID41'@;
put 'IikoZ2UtYS5zdGFydFt3ZV0pKSwiZGF0YVByb2Nlc3NFbmQiPT1pZSYmKEVlKz0iIHByZXBhcmUgICAgICAgICAgICAgICAgICIrd2QoIiA+NSIpKGdlLWEubGF5b3V0RW5kW3dlXSkpLCJyZW5kZXJFbmQiPT1pZSYmZi5fdHJhbnNpdGlvbiYmKEVlKz0iIHRyYW5zaXRpb24gc3RhcnQgbWFy'@;
put 'Z2luICIrd2QoIiA+NSIpKGYuX3RyYW5zaXRpb24uZGVsYXkoKS0oZ2UtYS5yZW5kZXJTdGFydFt3ZV0pKSxfPWYuX3RyYW5zaXRpb24uZGVsYXkoKSxUPWYuX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PWllKXt2YXIgWmU9Z2UtYS5yZW5kZXJTdGFydFt3ZV07'@;
put 'RWUrPSIgdHJhbnNpdGlvbiBkZWxheSAgICAgICAgIit3ZCgiID41IikoZ2UtYS5yZW5kZXJTdGFydFt3ZV0pLEVlKz0iIGV4cGVjdGVkICIrd2QoIiA+NSIpKF8pLEVlKz0iIGRpZmYgIit3ZCgiID41IikoWmUtXyl9aWYoInRyYW5zaXRpb25FbmQiPT1pZSl7dmFyIG90PWdlLWEudHJhbnNp'@;
put 'dGlvblN0YXJ0W3dlXTtFZSs9IiB0cmFuc2l0aW9uIGR1cmF0aW9uICAgICAiK3dkKCIgPjUiKShvdCksRWUrPSIgZXhwZWN0ZWQgIit3ZCgiID41IikoVCksRWUrPSIgZGlmZiAiK3dkKCIgPjUiKShvdC1UKX1jb25zb2xlLmxvZyhFZSksbD1nZX06bnVsbCl9cmV0dXJuIHRoaXN9LGRlc3Ry'@;
put 'b3k6ZnVuY3Rpb24gX1FlKCl7cmV0dXJuIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLl9fZ3JhcGh2aXpfXyx0aGlzLl93b3JrZXImJnRoaXMuX3dvcmtlclBvcnRDbG9zZSgpLHRoaXN9LGRyYXdFZGdlOmZ1bmN0aW9uIENRZShjLGwsYSxkLGgsZj17fSl7aWYoKGg9T2JqZWN0LmFz'@;
put 'c2lnbih7fSxoKSkuc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIF89a3MobnVsbCk7ZWxzZXt2YXIgaWU9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSx3ZT1YZyhn'@;
put 'bGUuY2FsbCh0aGlzLGgpKTtfPWllLmFwcGVuZCgiZyIpLmRhdGEoW3dlXSksX3cuY2FsbChfLm5vZGUoKSx3ZSksZGxlLmNhbGwodGhpcyxfLGMsbCxhLGQsaCxmKX1yZXR1cm4gdGhpcy5fZHJhd25FZGdlPXtnOl8seDE6Yyx5MTpsLHgyOmEseTI6ZCxhdHRyaWJ1dGVzOmh9LHRoaXN9LHVw'@;
put 'ZGF0ZURyYXduRWRnZTpmdW5jdGlvbiBTUWUoYyxsLGEsZCxoPXt9LGY9e30pe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgXz10aGlzLl9kcmF3bkVkZ2UuZztyZXR1cm4gaD1PYmplY3QuYXNzaWduKHRoaXMuX2RyYXduRWRn'@;
put 'ZS5hdHRyaWJ1dGVzLGgpLHRoaXMuX2RyYXduRWRnZS54MT1jLHRoaXMuX2RyYXduRWRnZS55MT1sLHRoaXMuX2RyYXduRWRnZS54Mj1hLHRoaXMuX2RyYXduRWRnZS55Mj1kLCFfLmVtcHR5KCl8fGguc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImludmlzIil8fChfPXRoaXMuX3NlbGVjdGlv'@;
put 'bi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuYXBwZW5kKCJnIiksdGhpcy5fZHJhd25FZGdlLmc9XyksXy5lbXB0eSgpfHxkbGUuY2FsbCh0aGlzLF8sYyxsLGEsZCxoLGYpLHRoaXN9LG1vdmVEcmF3bkVkZ2VF'@;
put 'bmRQb2ludDpmdW5jdGlvbiBNUWUoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bkVkZ2UuZyxoPXRoaXMuX2RyYXduRWRnZS54MSxmPXRoaXMuX2RyYXduRWRnZS55MSxfPXRoaXMuX2Ry'@;
put 'YXduRWRnZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bkVkZ2UueDI9Yyx0aGlzLl9kcmF3bkVkZ2UueTI9bCxobGUoZCxoLGYsYyxsLF8sYSksdGhpc30saW5zZXJ0RHJhd25FZGdlOmZ1bmN0aW9uIHhRZShjKXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdl'@;
put 'IGhhcyBiZWVuIGRyYXduIik7dmFyIGw9dGhpcy5fZHJhd25FZGdlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO2wuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpO3ZhciBfPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9u'@;
put 'KCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksVD1fLmRhdHVtKCksVz10aGlzLl9leHRyYWN0RGF0YShsLFQuY2hpbGRyZW4ubGVuZ3RoLF8uZGF0dW0oKSk7cmV0dXJuIFQuY2hpbGRyZW4ucHVzaChXKSxZVShsLFcpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXN9'@;
put 'LHJlbW92ZURyYXduRWRnZTpmbGUscmVtb3ZlRHJhd25FZGdlOmZsZSxkcmF3bkVkZ2VTZWxlY3Rpb246cGxlLGRyYXduRWRnZVNlbGVjdGlvbjpwbGUsZHJhd05vZGU6ZnVuY3Rpb24gRVFlKGMsbCxhLGQ9e30saD17fSl7aWYoKGQ9T2JqZWN0LmFzc2lnbih7fSxkKSkuc3R5bGUmJmQuc3R5'@;
put 'bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGY9a3MobnVsbCk7ZWxzZXt2YXIgVz10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLGdlPVhnKHlsZS5jYWxsKHRoaXMsYSxkKSk7Zj1XLmFw'@;
put 'cGVuZCgiZyIpLmRhdGEoW2dlXSksX3cuY2FsbChmLm5vZGUoKSxnZSksbWxlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0cmlidXRlczpkfSx0aGlzfSx1cGRhdGVEcmF3bk5vZGU6ZnVuY3Rpb24ga1FlKGMs'@;
put 'bCxhLGQ9e30saD17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBudWxsPT1hJiYoYT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxkPU9iamVjdC5hc3NpZ24odGhpcy5fZHJh'@;
put 'd25Ob2RlLmF0dHJpYnV0ZXMsZCksdGhpcy5fZHJhd25Ob2RlLm5vZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91'@;
put 'dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYuZW1wdHkoKXx8bWxlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCksdGhpc30sbW92ZURyYXduTm9kZTpmdW5jdGlvbiBBUWUoYyxs'@;
put 'LGE9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWws'@;
put 'ZC5lbXB0eSgpfHx2bGUoZCxjLGwsaCksdGhpc30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIFRRZShjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09YyYmKGM9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCk7dmFyIGw9dGhp'@;
put 'cy5fZHJhd25Ob2RlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXApdmFyIGY9bC5zZWxlY3RXaXRob3V0RGF0'@;
put 'YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLFQ9KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKSk7ZWxzZSBs'@;
put 'LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksVD1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtULnRleHQoYS5sYWJlbHx8Yyk7dmFyIGdlPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVBy'@;
put 'b3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksd2U9Z2UuZGF0dW0oKSxFZT10aGlzLl9leHRyYWN0RGF0YShsLHdlLmNoaWxkcmVuLmxlbmd0aCxnZS5kYXR1bSgpKTtyZXR1cm4gd2UuY2hpbGRyZW4ucHVzaChFZSksWVUobCxFZSksdGhpcy5fZHJh'@;
put 'd25Ob2RlPW51bGwsdGhpc30scmVtb3ZlRHJhd25Ob2RlOl9sZSxyZW1vdmVEcmF3bk5vZGU6X2xlLGRyYXduTm9kZVNlbGVjdGlvbjpibGUsZHJhd25Ob2RlU2VsZWN0aW9uOmJsZSxncmFwaHZpelZlcnNpb246ZnVuY3Rpb24gX0plKCl7cmV0dXJuIHRoaXMuX2dyYXBodml6VmVyc2lvbn19'@;
put 'LFlnLnByb3RvdHlwZS5ncmFwaHZpej1mdW5jdGlvbiBMUWUoYyl7dmFyIGw9dGhpcy5ub2RlKCkuX19ncmFwaHZpel9fO3JldHVybiBsPyhsLm9wdGlvbnMoYyksaFQoZnVuY3Rpb24oKXtsLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKX0uYmluZCh0aGlzKSwwKSk6bD1uZXcgaVoo'@;
put 'dGhpcyxjKSxsfSxZZy5wcm90b3R5cGUuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbj1mdW5jdGlvbiBSUWUoYyl7cmV0dXJuIGtzKHRoaXMuc2l6ZSgpPjA/dGhpcy5ub2RlKCkucXVlcnlTZWxlY3RvcihjKTpudWxsKX07dmFyIE9RZT1GKDg4NzAwKTtmdW5jdGlvbiBQUWUoYyxsKXsx'@;
put 'JmMmJnF0KDAsImNsci1pY29uIiwyOCl9ZnVuY3Rpb24gRlFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5'@;
put 'T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBIUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMikoMSwiZGl2IiwyMykoMiwiaW5wdXQiLDI0LDI1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCku'@;
put 'bGlicmFyaWVzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCksUWUoNCxQUWUsMSwwLCJjbHItaWNvbiIsMjYpLFFlKDUsRlFlLDEsMCwiY2xyLWljb24iLDI3KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIE5RZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI4KX1m'@;
put 'dW5jdGlvbiBWUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMjkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgyKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIi'@;
put 'LGp0KF8udHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSx5ZSgpfX1mdW5jdGlvbiBCUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMikoMSwiZGl2IiwyMykoMiwiaW5wdXQiLDM1LDM2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVu'@;
put 'Y3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSx5ZSgp'@;
put 'LFFlKDQsTlFlLDEsMCwiY2xyLWljb24iLDI2KSxRZSg1LFZRZSwxLDAsImNsci1pY29uIiwyNykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxl'@;
put 'bmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGpRZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI4KX1mdW5jdGlvbiB6UWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMjkpLHh0KCJjbGljayIsZnVuY3Rpb24o'@;
put 'KXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgpLiRpbXBsaWNpdCxfPVZlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLHllKCl9fWZ1bmN0aW9uIFVRZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDIyKSgxLCJkaXYiLDIzKSgyLCJpbnB1dCIsMzksMzYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0'@;
put 'KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpLFFlKDQsalFlLDEsMCwiY2xyLWljb24iLDI2KSxRZSg1LHpRZSwxLDAsImNsci1pY29uIiwyNykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0k'@;
put 'aSgzKSxkPVZlKCkuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gWlFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7'@;
put 'bWUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdCxfPVZlKCkuJGltcGxpY2l0LFQ9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbHVtbk9uQ2xpY2soZixULF8pKX0pLHF0KDIsImNs'@;
put 'ci1pY29uIiw0MSksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDQpO0NlKDEpLGRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLENlKDIpLGdyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gWVFlKGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU5vZGVDbGlja2VkKGgsXyxULnRhYmxlcykpfSkoImNsckV4cGFu'@;
put 'ZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsMzcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdCxfPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50YWJsZU9uQ2xp'@;
put 'Y2soZi5UQUJMRVVSSSxmLF8pKX0pLHF0KDIsImNsci1pY29uIiwzOCksTmUoMykseWUoKSxRZSg0LFVRZSw2LDMsImNsci10cmVlLW5vZGUiLDEpLFFlKDUsWlFlLDQsMywiY2xyLXRyZWUtbm9kZSIsMikseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZHIoImNsci1leHBhbmRl'@;
put 'ZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksQ2UoMSksUmUoImlkIixhLlRBQkxFVVJJKSxDZSgyKSxncigiICIsYS5UQUJMRU5BTUUsIiAiKSxDZSgxKSxSZSgibmdJZiIsYS5jb2x1'@;
put 'bW5zKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gV1FlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJu'@;
put 'IGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLmxpYnJhcnlMaXN0KSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29u'@;
put 'c3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGYubGliPWguTElCUkFSWUlELGp0KGYubGlicmFyeU9uQ2xpY2soZi5saWJ8fCIiLGgpKX0pLHF0KDIsImNsci1pY29uIiwzMyksTmUoMykseWUoKSxRZSg0LEJRZSw2LDMsImNsci10cmVlLW5vZGUiLDEpLFFlKDUsWVFlLDYsOCwi'@;
put 'Y2xyLXRyZWUtbm9kZSIsMzQpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSxncigi'@;
put 'ICIsYS5MSUJSQVJZTkFNRSwiICIpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gR1FlKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxXUWUsNiw3LCJjbHItdHJlZS1ub2RlIiwzMCksVXIoKSksMiZjKXtjb25zdCBhPWwu'@;
put 'JGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gJFFlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0MikoMSwic3BhbiIsNDMpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24gcVFlKGMsbCl7MSZjJiYobWUoMCwi'@;
put 'ZGl2Iiw0NCkscXQoMSwiY2xyLWljb24iLDQ1KSxtZSgyLCJoMyIsNDYpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSBjb2x1bW4gb3IgdGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIEtRZShjLGwpe2lmKDEmYyYmKG1lKDAsImgzIiw1NSksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0Nl'@;
put 'KDEpLGdyKCIgIixhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj9hLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKyIuIithLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbjphLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlLCIgIil9fWZ1bmN0aW9uIFhRZShjLGwpe2lmKDEmYyYmKG1lKDAs'@;
put 'ImRpdiIsNTMpLFFlKDEsS1FlLDIsMSwiaDMiLDU0KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLCFhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbiYmIWEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUpfX1mdW5jdGlvbiBKUWUoYyxsKXtpZigxJmMmJihtZSgw'@;
put 'LCJzcGFuIiksTmUoMSksbWUoMiwiYSIsNTYpLE5lKDMpLHllKCksTmUoNCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgIixhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLENlKDEpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2EubGluZWFn'@;
put 'ZVRhYmxlTmFtZSksQ2UoMSksb3IoYS5saW5lYWdlVGFibGVOYW1lLnNwbGl0KCIuIilbMV0pLENlKDEpLGdyKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3RoPjA/Ii4iK2EubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gUVFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5kb3dubG9hZFBORygpKX0pLE5lKDEsIiBQTkcgIikseWUoKX19ZnVuY3Rpb24gZWV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2NikseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5kb3dubG9hZENTVigpKX0pLE5lKDEsIiBDU1YgIikseWUoKX19ZnVuY3Rpb24gdGV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmRvd25sb2FkU1ZHKCkpfSksTmUoMiwiU1ZHIikseWUoKSxRZSgzLFFRZSwyLDAsImRpdiIsNjcpLG1lKDQsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZG93bmxvYWREb3QoKSl9KSxOZSg1'@;
put 'LCJEb3QiKSx5ZSgpLFFlKDYsZWV0LDIsMCwiZGl2Iiw2NykseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMyksUmUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpLENlKDMpLFJlKCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVuY3Rpb24gbmV0KGMsbCl7aWYoMSZjKXtj'@;
put 'b25zdCBhPVZuKCk7bWUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY4KSgxLCJpbnB1dCIsNjkpLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmdlbmVyYXRlR3JhcGgoKSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKDMpLnJlZnJlc2hDYWNoZT1oKX0pLHllKCksbWUoMiwibGFiZWwiKSxOZSgzLCJSZWZyZXNoIENhY2hlIikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdNb2RlbCIsYS5yZWZyZXNoQ2FjaGUpfX1mdW5jdGlvbiByZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9'@;
put 'Vm4oKTttZSgwLCJkaXYiLDU3KSgxLCJidXR0b24iLDU4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmxpbWl0RG90RGVwdGg9ITApfSksTmUoMiwiIExpbWl0IGRlcHRoICIpLHllKCksbWUoMywiZGl2Iiw1OSkoNCwiZGl2Iiw2MCkseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGguZm9yd2FyZExpbmVhZ2U9ITEsanQoaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGljaygpOmgub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKX0pLHF0KDUsImlucHV0Iiw2MSksbWUo'@;
put 'NiwibGFiZWwiKSxOZSg3LCJCYWNrd2FyZCIpLHllKCkoKSxtZSg4LCJkaXYiLDYwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMCxqdChoLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0'@;
put 'ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSkscXQoOSwiaW5wdXQiLDYxKSxtZSgxMCwibGFiZWwiKSxOZSgxMSwiRm9yd2FyZCIpLHllKCkoKSgpLG1lKDEyLCJjbHItZHJvcGRvd24iLDYyKSgxMywiYnV0dG9uIiw2MyksTmUoMTQsIiBEb3dubG9hZCAiKSxxdCgx'@;
put 'NSwiY2xyLWljb24iLDE5KSx5ZSgpLFFlKDE2LHRldCw3LDIsImNsci1kcm9wZG93bi1tZW51IiwyMCkseWUoKSxRZSgxNyxuZXQsNCwxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjQpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLFJlKCJjaGVja2VkIiwhYS5mb3J3YXJkTGlu'@;
put 'ZWFnZSksQ2UoNCksUmUoImNoZWNrZWQiLGEuZm9yd2FyZExpbmVhZ2UpLENlKDQpLFJlKCJkaXNhYmxlZCIsIWEuY29sdW1uJiYhYS50YWJsZSksQ2UoNCksUmUoIm5nSWYiLGEuY29sdW1uKX19ZnVuY3Rpb24gaWV0KGMsbCl7MSZjJiYobWUoMCwic3BhbiIsNzMpLE5lKDEsIiBMb2FkaW5n'@;
put 'Li4uICIpLHllKCkpfWZ1bmN0aW9uIG9ldChjLGwpezEmYyYmcXQoMCwic3BhbiIsNDMpfWZ1bmN0aW9uIHNldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNzQpKDEsImRpdiIsNzUpLFFlKDIsb2V0LDEsMCwic3BhbiIsNzYpLHllKCkscXQoMywiZGl2Iiw3NykseWUoKSksMiZjKXtjb25z'@;
put 'dCBhPVZlKDMpO0NlKDIpLFJlKCJuZ0lmIixhLmdyYXBoUmVuZGVyaW5nKX19ZnVuY3Rpb24gYWV0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiZGl2Iiw3MCksUWUoMixpZXQsMiwwLCJzcGFuIiw3MSksUWUoMyxzZXQsNCwxLCJkaXYiLDcyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1W'@;
put 'ZSgyKTtkcigibXQtMiIsYS50YWJsZUZsYWcpLENlKDIpLFJlKCJuZ0lmIixhLmdyYXBoTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFhLmdyYXBoTG9hZGluZyl9fWZ1bmN0aW9uIGNldChjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsWFFlLDIsMSwiZGl2Iiw0NyksbWUoMiwiZGl2Iiw0OCko'@;
put 'Mywic2VjdGlvbiIsNDkpKDQsImRpdiIsNTApLFFlKDUsSlFlLDUsNCwic3BhbiIsNykseWUoKSxRZSg2LHJldCwxOCw0LCJkaXYiLDUxKSx5ZSgpLFFlKDcsYWV0LDQsNCwiZGl2Iiw1MikseWUoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIWEuZ3JhcGhDb250'@;
put 'YWluZXIpLENlKDQpLFJlKCJuZ0lmIixhLmxpbmVhZ2VUYWJsZU5hbWUubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKSxDZSgxKSxSZSgibmdJZiIsYS5ncmFwaENvbnRhaW5lcil9fWZ1bmN0aW9uIHVldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAs'@;
put 'ImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikucmVuZGVyVG9Eb3dubG9hZCgiUE5HIikpfSksTmUoMSwiIFBORyAiKSx5ZSgpfX1mdW5jdGlvbiBkZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZHJvcGRvd24tbWVudSIs'@;
put 'NjUpKDEsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5yZW5kZXJUb0Rvd25sb2FkKCJTVkciKSl9KSxOZSgyLCJTVkciKSx5ZSgpLFFlKDMsdWV0LDIsMCwiZGl2Iiw2NyksbWUoNCwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0'@;
put 'KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4gaC5kb3dubG9hZERvdCgpLGp0KGguY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSl9KSxOZSg1LCIgRG90ICIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxSZSgibmdJZiIsIWEuaGVscGVyU2VydmljZS5pc01pY3Jvc29mdCl9fWNvbnN0'@;
put 'IGhldD1GKDE2Njc2KTtsZXQgRlQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMucm91dGVyPWYsdGhpcy5sb2NhdGlvbj1fLHRoaXMuZXZlbnRTZXJ2aWNl'@;
put 'PVQsdGhpcy5sb2dnZXJTZXJ2aWNlPVcsdGhpcy5oZWxwZXJTZXJ2aWNlPWllLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0h'@;
put 'MSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1bW5zUmVmPSIiLHRoaXMubGluZWFnZVRhYmxlTmFtZT0iIix0'@;
put 'aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj0iIix0aGlzLmxhcmdlRG90Rmls'@;
put 'ZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ310'@;
put 'YWJsZU9uQ2xpY2soYSxkLGgsZj0hMSl7dmFyIF89dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7ZC5jb2x1bW5zPyhkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLCEwPT09ZC5leHBhbmRlZCYmKF8udGFibGU9YSxmfHxfLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSkpOihkLmV4cGFuZGVk'@;
put 'PSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAsXy50YWJsZT1hLF8uY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9ZC5MSUJOQU1FKyIuIitkLlRBQkxFTkFNRSx5aWVsZCBfLnNlbGVjdFRhYmxlKGEsZCksZnx8Xy5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpLF8uY29sbGFw'@;
put 'c2VUcmVlSXRlbXMoaC50YWJsZXMsZCl9KSgpfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7dGFibGV1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgibGlu'@;
put 'ZWFnZS9nZXRtZXRhY29scyIsZikudGhlbihfPT57aC5jb2x1bW5zTGlzdD1fLm1ldGFjb2xzLGguY29sdW1uc0xpc3QmJmguY29sdW1uc0xpc3QubGVuZ3RoPjAmJihkLmNvbHVtbnM9aC5jb2x1bW5zTGlzdCxkLmV4cGFuZGVkPSEwLGQubG9hZGluZ0NvbHVtbnM9ITEpfSkuY2F0Y2goXz0+'@;
put 'XyksaC5zZXRHbG9iYWxEYXRhKCl9KSgpfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1Bh'@;
put 'Z2luZz0hMSl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxh'@;
put 'cHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtkLmluRm9yZWdyb3VuZD0hMCxkLnRhYmxlcz9kLmV4cGFuZGVkPSFkLmV4cGFuZGVkOihkLmxvYWRpbmdUYWJsZXM9ITAseWllbGQgaC5zZWxlY3RMaWJyYXJ5KGEs'@;
put 'ZCkpLGguY29sbGFwc2VUcmVlSXRlbXMoaC5saWJyYXJ5TGlzdCxkKX0pKCl9c2VsZWN0TGlicmFyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2gudGFibGVzTGlzdD1bXSxoLmNvbHVtbnNMaXN0PVtdO2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tsaWJ1cmk6YX1d'@;
put 'fTt5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhdGFibGVzIixmKS50aGVuKF89PntoLnRhYmxlc0xpc3Q9Xy5tZXRhdGFibGVzLGgudGFibGVzTGlzdCYmaC50YWJsZXNMaXN0Lmxlbmd0aD4wJiYoZC50YWJsZXM9aC50YWJsZXNMaXN0LGQuZXhwYW5kZWQ9ITAp'@;
put 'LGguc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2goXz0+XyksZC5sb2FkaW5nVGFibGVzPSExfSkoKX1jb2x1bW5PbkNsaWNrKGEsZCxoKXt0aGlzLmxpYj1kLkxJQlJBUllJRCx0aGlzLnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1bW49YS5DT0xVUkksdGhpcy5zZXRHbG9iYWxEYXRhKCksdGhp'@;
put 'cy5vbkdlbmVyYXRlQ2xpY2soKX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNo'@;
put 'LCJMSUJSQVJZTkFNRSIpLEduLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2Qu'@;
put 'bGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfXNldEdsb2JhbERhdGEoKXtHbi5saW5lYWdlLmxpYnJhcnlMaXN0PXRoaXMubGlicmFyeUxpc3QsR24ubGluZWFnZS50YWJsZXNMaXN0PXRoaXMudGFibGVzTGlzdCxHbi5saW5lYWdlLmNvbHVtbnNMaXN0PXRoaXMuY29sdW1uc0xpc3QsR24ubGlu'@;
put 'ZWFnZS5saWI9dGhpcy5saWIsR24ubGluZWFnZS50YWJsZT10aGlzLnRhYmxlLEduLmxpbmVhZ2UuY29sdW1uPXRoaXMuY29sdW1ufWxvYWRHbG9iYWxEYXRhKCl7dGhpcy5saWJyYXJ5TGlzdD1Hbi5saW5lYWdlLmxpYnJhcnlMaXN0LHRoaXMudGFibGVzTGlzdD1Hbi5saW5lYWdlLnRhYmxl'@;
put 'c0xpc3QsdGhpcy5jb2x1bW5zTGlzdD1Hbi5saW5lYWdlLmNvbHVtbnNMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoPUduLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNofXJlc3VibWl0V2l0aE1heERlcHRoKGEpe2xldCBkO3RoaXMuY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSxhJiYoZD17bWF4X2Rl'@;
put 'cHRoOmF9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOmR9KX1uZ09uSW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2xpbmVhZ2UiO2xldCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnJlbG9hZDtp'@;
put 'Zih2b2lkIDAhPT1hKXtsZXQgZD10aGlzLnJvdXRlci51cmw7InJlbG9hZCI9PT1hP2xvY2FsU3RvcmFnZS5nZXRJdGVtKCJmaXJzdExvYWQiKT8obG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImZpcnN0TG9hZCIpLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQuc2xpY2UoMCxkLmxhc3RJ'@;
put 'bmRleE9mKCIvIikpKSk6KGxvY2FsU3RvcmFnZS5maXJzdExvYWQ9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMmUzKSk6dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpfXRoaXMuaW5pdERh'@;
put 'dGEoKX1pbml0RGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe0duLmxpbmVhZ2UubGlicmFyeUxpc3QmJihHbi5saW5lYWdlLmxpYnJhcnlMaXN0Lmxlbmd0aD4wP2EubG9hZEdsb2JhbERhdGEoKTp5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXds'@;
put 'aWJzIixudWxsKS50aGVuKF89PnthLmxpYnJhcnlMaXN0PV8uc2FzbGlicyxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcnlMaXN0KSxhLmxpYnJhcnlMaXN0JiZhLmxpYnJhcnlMaXN0Lmxlbmd0aD4wJiYoYS5saWI9YS5saWJyYXJ5TGlzdFswXS5MSUJSQVJZSUQp'@;
put 'LGEuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2goXz0+XyksYS5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoXz0+e2Eub25Sb3V0ZUNoYW5nZSgpfSksYS5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKF89PnthLm9uUm91dGVDaGFuZ2UoKX0pKX0pKCl9b25Sb3V0ZUNoYW5nZSgpe2NsZWFyVGlt'@;
put 'ZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuY29sdXJpLGQ9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZGlyZWN0aW9uLGg9dGhpcy5yb3V0ZS5zbmFwc2hv'@;
put 'dC5wYXJhbXMudGFibGVpZCxmPXRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMubWF4X2RlcHRoO2EmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy5jb2x1bW49YSx0aGlzLmdlbmVyYXRlR3JhcGgoYSxkLGYpKSwhdGhpcy5yb3V0ZXIudXJsLmluY2x1'@;
put 'ZGVzKCJjb2x1bW4iKSYmaCYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLnRhYmxlPWgsdGhpcy5nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChoLGQsZikpfSx0aGlzLmRlYm91bmNlVGltZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7fWRpcmVjdGlvblRleHQoKXty'@;
put 'ZXR1cm4gdGhpcy5mb3J3YXJkTGluZWFnZT8iRk9SV0FSRCI6IlJFVkVSU0UifW9uR2VuZXJhdGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy5jb2x1bW4/dGhpcy5jb2x1bW4uc3Vic3RyaW5nKHRoaXMuY29sdW1uLmluZGV4T2YoIlxcIikrMSk6bnVsbDt0aGlz'@;
put 'LnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlL2NvbHVtbi8iK2QrIi8iK2EpfW9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMudGFibGUuaW5jbHVkZXMoIlxcIik/dGhpcy50YWJsZS5zcGxpdCgiXFwiKVsxXTp0'@;
put 'aGlzLnRhYmxlO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvIitkKyIvIithKX1nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxlX2lkOmEsZGly'@;
put 'ZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09Xy5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFibGVMZXZlbCgpIiwidGFibGVfaWQgaXMgdW5kZWZpbmVkLiIs'@;
put 'dm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJihfLlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoVCxXKT0+'@;
put 'e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIixfKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGllPWZpKGZ1bmN0aW9uKihnZSl7aWYoZ2UuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5l'@;
put 'dmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiks'@;
put 'dm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiBnZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1nZS5pbmZvWzBdLkxJQlJF'@;
put 'RisiLiIrZ2UuaW5mb1swXS5UQUJMRU5BTUU7bGV0IHdlPWdlLmZpbmFsZmluYWwsRWU9IiI7Zm9yKGxldCBaZT0wO1plPHdlLmxlbmd0aDtaZSsrKUVlKz11bmVzY2FwZSh3ZVtaZV0uTElORSkrIlxuIjtpZihmLmZsYXRkYXRhPWdlLmZsYXRkYXRhLGYubGlicmFyeUxpc3Qpe2xldCBaZT1m'@;
put 'LmxpYnJhcnlMaXN0LmZpbmQob3Q9PmdlLmluZm9bMF0uTElCVVJJLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMob3QuTElCUkFSWUlELnRvVXBwZXJDYXNlKCkpKTtpZihaZSl7bGV0IG90O2lmKHlpZWxkIGYubGlicmFyeU9uQ2xpY2soWmUuTElCUkFSWUlELFplKSxaZS50YWJsZXMmJihvdD1a'@;
put 'ZS50YWJsZXMuZmluZChldD0+ZXQuVEFCTEVVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhnZS5pbmZvWzBdLlRBQkxFSUQudG9VcHBlckNhc2UoKSkpLG90KSl7aWYoZi50YWJsZT1vdC5UQUJMRVVSSSxmLnRhYmxlKXtjb25zdCBldD1mLnRhYmxlLnJlcGxhY2UoIlxcIiwiXFxcXCIpO3Nl'@;
put 'dFRpbWVvdXQoKCk9PntsZXQgeXQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke2V0fSddYCk7eXQmJnl0LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9Zi50YWJsZU9uQ2xpY2sob3QuVEFCTEVVUkksb3QsWmUsdm9pZCAwIT09ZCl9WmUmJihaZS5leHBhbmRlZD0hMCksb3QmJihvdC5l'@;
put 'eHBhbmRlZD0hMCl9fWYudml6SW5wdXQ9RWV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuaWRsb29rdXA9Z2UuaWRsb29rdXAsZ2UuZmluYWxm'@;
put 'aW5hbC5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPWdlLmZpbmFsZmluYWwubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLFQoKX0pO3JldHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIGllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKGllPT57Zi5n'@;
put 'cmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWNhbmNlbFJlbmRlcmluZ0dyYXBoKCl7dGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKX1jb250'@;
put 'aW51ZVJlbmRlcmluZ0dyYXBoKCl7dGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgoKT0+e2lmKG51bGwhPT10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7c3dpdGNoKHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkKXtjYXNlIlBORyI6dGhpcy5kb3dubG9h'@;
put 'ZFBORygpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLmRvd25sb2FkU1ZHKCl9dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5idWlsZEdyYXBoKCl9fSl9cmVuZGVyVG9Eb3dubG9hZChhKXtz'@;
put 'd2l0Y2goYSl7Y2FzZSJQTkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJQTkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iU1ZHIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKX19bWFr'@;
put 'ZUdyYXBoTGlua2FibGUoYSl7bGV0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI2dyYXBoIC5ub2RlIik7Zm9yKGxldCBoIG9mIGQpe2xldCBULGY9aC5xdWVyeVNlbGVjdG9yKCJ0aXRsZSIpLmlubmVySFRNTCxfPWEuZmluZChXPT5XLk1FVEFJRD09PWYpO18mJihUPSJUQUJMRSI9'@;
put 'PT1fLk1FVEFUWVBFPyIvdmlldy9kYXRhLyIrXy5NRVRBTkFNRToiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIrXy5NRVRBSUQsaC5jbGFzc0xpc3QuYWRkKCJjdXJzb3ItcG9pbnRlciIpLGguYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLFc9Pnt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFQp'@;
put 'fSkpfX1nZW5lcmF0ZUdyYXBoKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17U0FTQ29udHJvbFRhYmxlOlt7Y29sdXJpOmF8fGYuY29sdW1uLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKSxyZWZyZXNoOmYucmVmcmVzaENhY2hlPzE6MH1dfTty'@;
put 'ZXR1cm4idW5kZWZpbmVkIj09PV8uU0FTQ29udHJvbFRhYmxlWzBdLmNvbHVyaSYmZi5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGgoKSIsImNvbHVyaSBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9yIiksaCYmKF8uU0FTQ29udHJvbFRhYmxl'@;
put 'WzBdLm1heF9kZXB0aD1oKSxmLnRhYmxlRmxhZz0hMSxmLnN3aXRjaEZsYWc9ITAsZi5ncmFwaENvbnRhaW5lcj0hMCxmLmdyYXBoTG9hZGluZz0hMCxmLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChULFcpPT57Zi5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2hjb2xsaW5lYWdl'@;
put 'IixfKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGllPWZpKGZ1bmN0aW9uKihnZSl7aWYoZ2UuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVh'@;
put 'Y2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYo'@;
put 'InN0cmluZyI9PXR5cGVvZiBnZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1nZS5pbmZvWzBdLkxJQlJFRisiLiIrZ2UuaW5mb1swXS5UQUJOQU1FLGYubGluZWFnZUNvbHVtbk5hbWU9Z2Uu'@;
put 'aW5mb1swXS5DT0xOQU1FLGYuaWRsb29rdXA9Z2UuaWRsb29rdXA7bGV0IHdlPWdlLmZyb21zYXMsRWU9IiI7Zm9yKGxldCBaZT0wO1plPHdlLmxlbmd0aDtaZSsrKUVlKz11bmVzY2FwZSh3ZVtaZV0uU1RSSU5HKSsiXG4iO2lmKGYudml6SW5wdXQ9RWV8fCJkaWdyYXBoIEcge05vIExpbmVh'@;
put 'Z2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuZmxhdGRhdGE9Z2UuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IG90LFplPWYubGlicmFyeUxpc3QuZmluZChldD0+Z2UuaW5mb1sw'@;
put 'XT8uTElCVVJJPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhldD8uTElCUkFSWUlEPy50b1VwcGVyQ2FzZSgpKSk7WmUmJih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKFplLkxJQlJBUllJRCxaZSksWmUudGFibGVzJiYob3Q9WmUudGFibGVzLmZpbmQoZXQ9PmV0LlRBQkxFVVJJPT09Z2UuaW5m'@;
put 'b1swXS5UQUJVUkkpLG90JiZmLnRhYmxlT25DbGljayhvdC5UQUJMRVVSSSxvdCxaZSwhMCkudGhlbigoKT0+e2xldCBldD1vdC5UQUJMRVVSSTtpZihldCl7Y29uc3QgeXQ9ZXQucmVwbGFjZSgiXFwiLCJcXFxcIik7bGV0IGt0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0nJHt5dH0n'@;
put 'XWApO3NldFRpbWVvdXQoKCk9PntrdCYmKGYubG9nZ2VyU2VydmljZS5sb2coImxpYnJhcnlUb1NlbGVjdCIsWmUpLGt0LnNjcm9sbEludG9WaWV3KCkpfSwxZTMpfX0pKSxaZSYmKFplLmV4cGFuZGVkPSEwKSxvdCYmKG90LmV4cGFuZGVkPSEwKSl9Z2UuZnJvbXNhcy5sZW5ndGg+Zi5sYXJn'@;
put 'ZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPWdlLmZyb21zYXMubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLFQoKX0pO3JldHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIGllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKGllPT57Zi5ncmFwaExvYWRpbmc9ITEsZi5ncmFw'@;
put 'aENvbnRhaW5lcj0hMX0pfSl9KSgpfWdldFNWR1VSTCgpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXIsaD1uZXcgQmxvYihbZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdlL3N2Zyt4bWwifSk7cmV0dXJuIFVSTC5j'@;
put 'cmVhdGVPYmplY3RVUkwoaCl9Z2V0U1ZHQmxvYigpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXI7cmV0dXJuIG5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbCJ9KX1kb3dubG9hZFNW'@;
put 'Rygpe2lmKFBUKCIjZ3JhcGgiKS5yZXNldFpvb20oKSxuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldFNWR0Jsb2IoKSx0aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIpKTtlbHNle2xldCBh'@;
put 'PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXRTVkdVUkwoKSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX19ZG93bmxv'@;
put 'YWRQTkcoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtQVCgiI2dyYXBoIikucmVzZXRab29tKCksT1FlLnNhdmVTdmdBc1BuZyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZ3JhcGggc3ZnIiksYS5jb25zdHJ1Y3ROYW1lKCJwbmciKSl9KSgpfWRvd25sb2FkQ1NWKCl7bGV0'@;
put 'IGE9dGhpcy5mbGF0ZGF0YTtjb25zdCBkPShnZSx3ZSk9Pm51bGw9PT13ZT8iIjp3ZSxoPU9iamVjdC5rZXlzKGFbMF0pO2xldCBmPWEubWFwKGdlPT5oLm1hcCh3ZT0+SlNPTi5zdHJpbmdpZnkoZ2Vbd2VdLGQpKS5qb2luKCIsIikpO2YudW5zaGlmdChoLmpvaW4oIiwiKSk7bGV0IF89Zi5q'@;
put 'b2luKCJcclxuIik7dmFyIFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLFc9bmV3IEJsb2IoW19dLHt0eXBlOiJ0ZXh0L2NzdiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihXLHRo'@;
put 'aXMuY29uc3RydWN0TmFtZSgiY3N2IikpO2Vsc2V7dmFyIGllPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKFcpO1QuaHJlZj1pZSxULmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgiY3N2IiksVC5jbGljaygpLHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGllKSxULnJlbW92ZSgp'@;
put 'fX1nZXREb3RVcmwoKXtsZXQgZD1uZXcgQmxvYihbdGhpcy52aXpJbnB1dF0se3R5cGU6InRleHQvcGxhaW4ifSk7cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGQpfWdldERvdEJsb2IoKXtyZXR1cm4gbmV3IEJsb2IoW3RoaXMudml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWlu'@;
put 'In0pfWRvd25sb2FkRG90KCl7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXREb3RCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5j'@;
put 'cmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0RG90VXJsKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fXNob3dTdmcoKXt3aW5kb3cu'@;
put 'b3Blbih0aGlzLmdldFNWR1VSTCgpLCJfYmxhbmsiKX1idWlsZEdyYXBoKGEpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuZ3JhcGhMb2FkaW5nPSExLHRoaXMuZ3JhcGhSZW5kZXJpbmc9ITAsc2V0VGltZW91dCgoKT0+e1BUKCIjZ3JhcGgiKS56b29tKCEwKS5hZGRJ'@;
put 'bWFnZSgiaHR0cHM6Ly9kYXRhY29udHJvbGxlci5pby93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wMS9mYzEucG5nIiwiMzBweCIsIjMwcHgiKS5yZW5kZXJEb3QodGhpcy52aXpJbnB1dCwoKT0+e3RoaXMuZ3JhcGhSZW5kZXJpbmc9ITEsdGhpcy5pZGxvb2t1cCYmdGhpcy5tYWtlR3JhcGhM'@;
put 'aW5rYWJsZSh0aGlzLmlkbG9va3VwKSxhJiZhKCl9KX0sMTAwKX1jb25zdHJ1Y3ROYW1lKGEpe2xldCBkPSIiLGg9IiIsZj0iIixfPWhldCgpLmZvcm1hdCgiWVlNTUREX0hIbW0iKTtpZih0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmxpYnJhcnlMaXN0Lmxlbmd0aCl7bGV0IFQ9dGhpcy5saWJy'@;
put 'YXJ5TGlzdC5maW5kKFc9PlcuTElCUkFSWUlEPT10aGlzLmxpYik7VCYmKGQ9YF8ke1QuTElCUkFSWU5BTUV9YCl9aWYodGhpcy50YWJsZXNMaXN0JiZ0aGlzLnRhYmxlc0xpc3QubGVuZ3RoKXtsZXQgVD10aGlzLnRhYmxlc0xpc3QuZmluZChXPT5XLlRBQkxFVVJJPT10aGlzLnRhYmxlKTtU'@;
put 'JiYoaD1gXyR7VC5UQUJMRU5BTUV9YCl9aWYodGhpcy5jb2x1bW5zTGlzdCYmdGhpcy5jb2x1bW5zTGlzdC5sZW5ndGgpe2xldCBUPXRoaXMuY29sdW1uc0xpc3QuZmluZChXPT5XLkNPTFVSST09dGhpcy5jb2x1bW4pO1QmJihmPWBfJHtULkNPTE5BTUV9YCl9cmV0dXJuYCR7dGhpcy5kaXJl'@;
put 'Y3Rpb25UZXh0KCl9JHtkfSR7aH0ke2Z9XyR7X30uJHthfWB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChvYSksdHQoV2wpLHR0KERzKSx0dChKZCksdHQodmwpLHR0KHcwKSx0dChBYykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpj'@;
put 'LHNlbGVjdG9yczpbWyJhcHAtbGluZWFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NTgsdmFyczoxMSxjb25zdHM6W1szLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJd'@;
put 'LFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9k'@;
put 'YWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsxLCJiaWdsaW5lYWdlLXJvdyIsIm1iLTBpIl0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsInBsYWNlaG9sZGVyIiwiTWF4IGRlcHRoIHZhbHVlIiwxLCJjbHIt'@;
put 'aW5wdXQiLCJtYXgtZGVwdGgtaW5wdXQiXSxbIm1heERlcHRoRG90IiwiIl0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwi'@;
put 'YnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJtdC0zLW5lZ2F0aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbIm1heERlcHRoIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRy'@;
put 'ZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hh'@;
put 'cGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJF'@;
put 'eHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNs'@;
put 'ckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01v'@;
put 'ZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiaWQiLCJjbGljayJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29t'@;
put 'cGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJuby10'@;
put 'YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1j'@;
put 'b250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2Vu'@;
put 'dGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIs'@;
put 'ImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIiwiZC1mbGV4Iiwi'@;
put 'anVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8t'@;
put 'cmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEwIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWyJjbGFzcyIsImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90'@;
put 'dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJy'@;
put 'ZWZyZXNoQ2FjaGUiLDMsIm5nTW9kZWwiLCJjaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwicG9zaXRpb24tcmVsYXRpdmUiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJwb3NpdGlvbi1y'@;
put 'ZWxhdGl2ZSJdLFsxLCJncmFwaC1yZW5kZXItc3Bpbm5lciJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9Vm4oKTttZSgwLCJhcHAtc2lkZWJhciIsMCkseHQoInNj'@;
put 'cm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIGQubG9hZE1vcmVMaWJyYXJpZXMoKX0pLG1lKDEsImNsci10cmVlIiksUWUoMixIUWUsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSxRZSgzLEdRZSwyLDEsIm5nLWNvbnRhaW5lciIsMikseWUoKSxRZSg0LCRRZSwzLDAsImRpdiIsMyks'@;
put 'eWUoKSxtZSg1LCJkaXYiLDQpKDYsImRpdiIsNSksUWUoNyxxUWUsNCwwLCJkaXYiLDYpLFFlKDgsY2V0LDgsNCwibmctY29udGFpbmVyIiw3KSx5ZSgpKCksbWUoOSwiY2xyLW1vZGFsIiw4KSgxMCwiaDMiLDkpLE5lKDExLCJMaW1pdCBEZXB0aCIpLHllKCksbWUoMTIsImRpdiIsMTApKDEz'@;
put 'LCJwIiksTmUoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0bzoiKSx5ZSgpKCksbWUoMTUsImRpdiIsMTEpKDE2LCJkaXYiLDEyKSxxdCgxNywiaW5wdXQiLDEzLDE0KSx5ZSgpLG1lKDE5LCJjbHItY29udHJvbC1oZWxw'@;
put 'ZXIiLDE1KSxOZSgyMCwiVG8gcmVuZGVyIHdpdGggdW5saW1pdGVkIGRlcHRoLCBsZWF2ZSB0aGUgaW5wdXQgZW1wdHkiKSx5ZSgpLG1lKDIxLCJkaXYiLDE2KSgyMiwiYnV0dG9uIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmxpbWl0RG90RGVwdGg9ITF9KSxOZSgyMywi'@;
put 'IENhbmNlbCAiKSx5ZSgpLG1lKDI0LCJidXR0b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoaCk7Y29uc3QgXz0kaSgxOCk7cmV0dXJuIGQucmVzdWJtaXRXaXRoTWF4RGVwdGgoXy52YWx1ZSksanQoZC5saW1pdERvdERlcHRoPSExKX0pLE5lKDI1LCIgUmVzdWJtaXQgIikseWUo'@;
put 'KSgpKCkoKSxtZSgyNiwiY2xyLW1vZGFsIiw4KSgyNywiaDMiLDkpLE5lKDI4LCJXYXJuaW5nIikseWUoKSxtZSgyOSwiZGl2IiwxMCkoMzAsInAiKSxOZSgzMSkseWUoKSgpLG1lKDMyLCJkaXYiLDExKSgzMywiZGl2IiwxNikoMzQsInAiKSxOZSgzNSwiUmVuZGVyIGFueXdheSAodGhpcyBt'@;
put 'YXkgdGFrZSBhIGxvbmcgdGltZSkiKSx5ZSgpLG1lKDM2LCJidXR0b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY29udGludWVSZW5kZXJpbmdHcmFwaCgpfSksTmUoMzcsIiBSZW5kZXIgIikseWUoKSgpLG1lKDM4LCJkaXYiLDE2KSgzOSwicCIpLE5lKDQwLCJEb3du'@;
put 'bG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5kZXJpbmcpIikseWUoKSxtZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMTgpLE5lKDQzLCIgRG93bmxvYWQgIikscXQoNDQsImNsci1pY29uIiwxOSkseWUoKSxRZSg0NSxkZXQsNiwxLCJjbHItZHJvcGRvd24t'@;
put 'bWVudSIsMjApLHllKCkoKSxtZSg0NiwiZGl2IiwxNikoNDcsInAiKSxOZSg0OCwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSx5ZSgpLHF0KDQ5LCJpbnB1dCIsMTMsMjEpLG1lKDUxLCJidXR0b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoaCk7'@;
put 'Y29uc3QgXz0kaSg1MCk7cmV0dXJuIGp0KGQucmVzdWJtaXRXaXRoTWF4RGVwdGgoXy52YWx1ZSkpfSksTmUoNTIsIiBSZXN1Ym1pdCAiKSx5ZSgpKCksbWUoNTMsImRpdiIsMTYpKDU0LCJwIiksTmUoNTUsIkNhbmNlbCB0aGlzIHN1Ym1pc3Npb24iKSx5ZSgpLG1lKDU2LCJidXR0b24iLDE3'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FuY2VsUmVuZGVyaW5nR3JhcGgoKX0pLE5lKDU3LCIgQ2FuY2VsICIpLHllKCkoKSgpKCl9MiZhJiYoQ2UoMiksUmUoIm5nSWYiLGQubGlicmFyeUxpc3QpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxpYnJhcnlMaXN0KSxDZSgxKSxS'@;
put 'ZSgibmdJZiIsZC5saWJyYXJpZXNQYWdpbmcpLENlKDMpLFJlKCJuZ0lmIiwhZC5jb2x1bW4mJiFkLnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsZC5jb2x1bW58fGQudGFibGUpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQubGltaXREb3REZXB0aCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxD'@;
put 'ZSgxNyksUmUoImNsck1vZGFsT3BlbiIsbnVsbCE9PWQubGFyZ2VEb3RGaWxlTGluZXMpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNSksZ3IoIiBUaGUgZ2VuZXJhdGVkIGRvdCBmaWxlIGhhcyAiLGQubGFyZ2VEb3RGaWxlTGluZXMsIiBsaW5lcy4gUmVuZGVyaW5nIG1heSB0YWtlIGEg'@;
put 'bG9uZyB0aW1lLCBob3cgd291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8gIiksQ2UoMTEpLFJlKCJkaXNhYmxlZCIsIWQuY29sdW1uJiYhZC50YWJsZSkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1LFdhLFMwLEJzLE9zLGRkLGcxLERwLGthLG91LHN1LFp1LGMyLFVzLEhGLEQwLFQwLGYxLE5m'@;
put 'LGFnLGxnLEs4LG4zXSxzdHlsZXM6WyIudG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFj'@;
put 'a2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfSNncmFwaFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAxOTVweCk7b3ZlcmZs'@;
put 'b3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlNGU0ZTQ7bWFyZ2luLXRvcDoxMHB4fS5zZWxlY3Rpb24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttYXgtd2lkdGg6NjcwcHh9LmNvbHVt'@;
put 'bi1hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Q4ZTNlOTtjb2xvcjojMDAwfS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0haW1wb3J0YW50fS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmNhcmRbX25nY29udGVu'@;
put 'dC0lQ09NUCVde21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDEyMHB4KX0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIC4zNXJlbSFpbXBvcnRhbnR9'@;
put 'Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JhcGgtcmVuZGVyLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7ZGlzcGxheTpm'@;
put 'bGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxMHB4fS5iaWdsaW5lYWdlLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjIwcHh9Lm1vZGFs'@;
put 'LWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0ubGluZWFnZS10aXRsZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjEycHh9Lm1heC1kZXB0aC1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX1AbWVkaWEg'@;
put 'KG1heC13aWR0aDogNzY4cHgpey50b2dnbGUtc3dpdGNoLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToyMHB4fX0iXX0pLGN9KSgpO2Z1bmN0aW9uIGZldChjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsMTEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1s'@;
put 'LiRpbXBsaWNpdDt4YygidmFsdWUiLGEpLENlKDEpLGdyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHBldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDE4KX1mdW5jdGlvbiBnZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTkpLHh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLm1ldGFEYXRhU2VhcmNoPSIiLGp0KGgubWV0YUxpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIG1ldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDEyKSgxLCJkaXYiLDEzKSgyLCJp'@;
put 'bnB1dCIsMTQsMTUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5tZXRhRGF0YVNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5tZXRhTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LHBldCwxLDAs'@;
put 'ImNsci1pY29uIiwxNiksUWUoNSxnZXQsMSwwLCJjbHItaWNvbiIsMTcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLm1ldGFEYXRhU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYi'@;
put 'LGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB2ZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNs'@;
put 'aWNrZWQoaCxmLF8ubWV0YURhdGFMaXN0KSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBs'@;
put 'aWNpdCxmPVZlKCk7cmV0dXJuIGYubWV0YURhdGFJZD1oLklELGp0KGYubWV0YURhdGFPbkNsaWNrKGYubWV0YURhdGFJZCxoKSl9KSxxdCgyLCJjbHItaWNvbiIsMjMpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGVkIixhLmV4cGFu'@;
put 'ZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLGdyKCIgIixhLklELCIgIil9fWZ1bmN0aW9uIF9ldChjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsdmV0LDQsMywiY2xyLXRyZWUtbm9kZSIsMjApLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp'@;
put 'dDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gYmV0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyNCkscXQoMSwiY2xyLWljb24iLDI1KSxtZSgyLCJoMyIsMjYpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSB0eXBlIikseWUoKSgpKX1mdW5jdGlvbiB5ZXQoYyxsKXsxJmMmJiht'@;
put 'ZSgwLCJoNCIpLE5lKDEsIkxvYWRpbmcgbWV0YWRhdGEgdHlwZXMiKSx5ZSgpKX1mdW5jdGlvbiB3ZXQoYyxsKXsxJmMmJihtZSgwLCJoNCIpLE5lKDEsIkxvYWRpbmcgbWV0YWRhdGEgb2JqZWN0cyIpLHllKCkpfWZ1bmN0aW9uIENldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLFFlKDEs'@;
put 'eWV0LDIsMCwiaDQiLDI5KSxRZSgyLHdldCwyLDAsImg0IiwyOSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLm1ldGF0eXBlc0xvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5tZXRhdHlwZXNMb2FkaW5nKX19ZnVuY3Rpb24gTWV0KGMsbCl7aWYoMSZjJiYo'@;
put 'bWUoMCwiZGl2IiwyNykoMSwic3BhbiIsMjgpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCksUWUoMyxDZXQsMywyLCJkaXYiLDI5KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxSZSgibmdJZiIsYS5sb2FkaW5nKX19ZnVuY3Rpb24geGV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiZGl2IiwzNikoMSwiaW5wdXQiLDM3LDM4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm1ldGFPYmplY3RTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm1ldGFPYmplY3RPbkZp'@;
put 'bHRlcigpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nTW9kZWwiLGEubWV0YU9iamVjdFNlYXJjaCl9fWZ1bmN0aW9uIEVldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDQyKX1mdW5jdGlvbiBrZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyMyl9'@;
put 'ZnVuY3Rpb24gQWV0KGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNTMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgxKSxncigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gVGV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIsNDgpKDEsImRpdiIs'@;
put 'NDkpLFFlKDIsRWV0LDEsMCwiY2xyLWljb24iLDUwKSxRZSgzLGtldCwxLDAsImNsci1pY29uIiw1MSksTmUoNCksUWUoNSxBZXQsMiwxLCJwIiw1MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGFibGUiLCEwKSxDZSgxKSxkcigib2JqZWN0LWhlYWRl'@;
put 'ciIsIWEuY291bnQpLENlKDEpLFJlKCJuZ0lmIiwhYS5jb3VudCksQ2UoMSksUmUoIm5nSWYiLGEuY291bnQpLENlKDEpLGdyKCIgIixhLmRpc3BsYXksIiAiKSxDZSgxKSxSZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBEZXQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZSIsNDYp'@;
put 'LFFlKDEsVGV0LDYsNywiY2xyLXRyZWUtbm9kZSIsNDcpLGJhKDIsImFzeW5jIikseWUoKSksMiZjKXtjb25zdCBhPVZlKDYpO1JlKCJjbHJMYXp5IiwhMCksQ2UoMSksUmUoImNsclJlY3Vyc2l2ZUZvck9mIixVbCgyLDMsYS5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIs'@;
put 'YS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIElldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1hY2NvcmRpb24tY29udGVudCIpLFFlKDEsRGV0LDMsNSwiY2xyLXRyZWUiLDQ1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoMSksUmUoIm5nSWYiLGEuc2hvd0FjYyl9fWZ1bmN0aW9uIExl'@;
put 'dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1hY2NvcmRpb24tcGFuZWwiLDQxKSx4dCgiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoMyk7cmV0dXJuIGp0KGg/Xy5wYW5lbENoYW5n'@;
put 'ZShoLGYpOiIiKX0pLG1lKDEsImNsci1hY2NvcmRpb24tdGl0bGUiKSxxdCgyLCJjbHItaWNvbiIsNDIpLE5lKDMpLG1lKDQsInAiLDQzKSxOZSg1KSx5ZSgpKCksUWUoNixJZXQsMiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQ0KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBs'@;
put 'aWNpdDtDZSgzKSxncigiICIsYS5OQU1FLCIgIiksQ2UoMiksb3IoYS5JRCl9fWZ1bmN0aW9uIFJldChjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsTGV0LDcsMiwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDApLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIs'@;
put 'IWEuaGlkZGVuKX19ZnVuY3Rpb24gT2V0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzOSkoMSwiY2xyLWFjY29yZGlvbiIpLFFlKDIsUmV0LDIsMSwibmctY29udGFpbmVyIiw0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgibmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hv'@;
put 'd0xpc3QpfX1mdW5jdGlvbiBQZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw0Mil9ZnVuY3Rpb24gRmV0KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjMpfWZ1bmN0aW9uIEhldChjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDUzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4k'@;
put 'aW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIE5ldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlLW5vZGUiLDQ4KSgxLCJkaXYiLDQ5KSxRZSgyLFBldCwxLDAsImNsci1pY29uIiw1MCksUWUoMyxGZXQsMSwwLCJjbHItaWNvbiIsNTEpLE5lKDQpLFFlKDUs'@;
put 'SGV0LDIsMSwicCIsNTIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRhYmxlIiwhMCksQ2UoMSksZHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxDZSgxKSxSZSgibmdJZiIsIWEuY291bnQpLENlKDEpLFJlKCJuZ0lmIixhLmNvdW50KSxDZSgxKSxn'@;
put 'cigiICIsYS5kaXNwbGF5LCIgIiksQ2UoMSksUmUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24gVmV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUiLDQ2KSxRZSgxLE5ldCw2LDcsImNsci10cmVlLW5vZGUiLDQ3KSxiYSgyLCJhc3luYyIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0'@;
put 'KTtSZSgiY2xyTGF6eSIsITApLENlKDEpLFJlKCJjbHJSZWN1cnNpdmVGb3JPZiIsVWwoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBCZXQoYyxsKXtpZigxJmMmJihCcigwKSxtZSgxLCJkaXYiLDU0KSxxdCgyLCJj'@;
put 'bHItaWNvbiIsNDIpLG1lKDMsImRpdiIsNTUpKDQsInAiLDU2KSxOZSg1KSx5ZSgpLG1lKDYsInAiLDU3KSxOZSg3KSx5ZSgpKCkoKSxRZSg4LFZldCwzLDUsImNsci10cmVlIiw0NSksVXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMyk7Q2UoNSksZ3IoIiAiLGEuTkFNRSwi'@;
put 'ICIpLENlKDIpLGdyKCIgIixhLklELCIgIiksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0FjYyl9fWZ1bmN0aW9uIGpldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzkpLFFlKDEsQmV0LDksMywibmctY29udGFpbmVyIiw0KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5n'@;
put 'Rm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gemV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTmUoMikseWUoKSxtZSgzLCJjbHItZGctY2VsbCIpLE5lKDQpLHllKCksbWUoNSwiY2xyLWRnLWNlbGwiKSxOZSg2KSx5ZSgp'@;
put 'KCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLlRZUEUpLENlKDIpLG9yKGEuTkFNRSksQ2UoMiksb3IoYS5WQUxVRSl9fWNvbnN0IFVldD1mdW5jdGlvbigpe3JldHVyblsxMCwyMCw1MCwxMDBdfTtmdW5jdGlvbiBaZXQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItZGF0'@;
put 'YWdyaWQiLDU4KSgxLCJjbHItZGctY29sdW1uIiksTmUoMiwiIFRZUEUgIikscXQoMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDU5KSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iKSxOZSg1LCIgTkFNRSAiKSxxdCg2LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNTkpLHllKCksbWUoNywiY2xy'@;
put 'LWRnLWNvbHVtbiIpLE5lKDgsIiBWQUxVRSAiKSxxdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNTkpLHllKCksUWUoMTAsemV0LDcsMywiY2xyLWRnLXJvdyIsNjApLG1lKDExLCJjbHItZGctZm9vdGVyIikoMTIsImNsci1kZy1wYWdpbmF0aW9uIiw2MSw2MikoMTQsImNsci1kZy1wYWdl'@;
put 'LXNpemUiLDYzKSxOZSgxNSwiQXR0cmlidXRlcyBwZXIgcGFnZSIpLHllKCksTmUoMTYpLHllKCkoKSgpKSwyJmMpe2NvbnN0IGE9JGkoMTMpLGQ9VmUoMik7Q2UoMyksUmUoImNsckRnU3RyaW5nRmlsdGVyIixkLnR5cGVGaWx0ZXIpLENlKDMpLFJlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5u'@;
put 'YW1lRmlsdGVyKSxDZSgzKSxSZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudmFsdWVGaWx0ZXIpLENlKDEpLFJlKCJjbHJEZ0l0ZW1zT2YiLGQubWV0YU9iamVjdEF0dHJpYnV0ZXMpLENlKDIpLFJlKCJjbHJEZ1BhZ2VTaXplIiwxMCksQ2UoMiksUmUoImNsclBhZ2VTaXplT3B0aW9ucyIsJHMo'@;
put 'OSxVZXQpKSxDZSgyKSxiMCgiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIEF0dHJpYnV0ZXMgIil9fWZ1bmN0aW9uIFlldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzApKDEsImRpdiIsMzEpLFFlKDIseGV0LDMsMSwiZGl2Iiwz'@;
put 'MikscXQoMywiYnIiKSxRZSg0LE9ldCwzLDEsImRpdiIsMzMpLFFlKDUsamV0LDIsMSwiZGl2IiwzMykseWUoKSxtZSg2LCJkaXYiLDM0KSg3LCJoMyIpLE5lKDgpLHllKCksUWUoOSxaZXQsMTcsMTAsImNsci1kYXRhZ3JpZCIsMzUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiks'@;
put 'UmUoIm5nSWYiLGEubWV0YU9iamVjdExpc3QmJiFhLm9iamVjdFJvdXRlKSxDZSgyKSxSZSgibmdJZiIsIWEub2JqZWN0VmlldyksQ2UoMSksUmUoIm5nSWYiLGEub2JqZWN0VmlldyksQ2UoMyksb3IoYS5hc3NvT2JqZWN0U2VsZWN0ZWQpLENlKDEpLFJlKCJuZ0lmIixhLnNob3dUYWJsZSl9'@;
put 'fWxldCBvWj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj1fLHRoaXMucm91dGU9VCx0aGlzLm1ldGFEYXRhU2Vh'@;
put 'cmNoPSIiLHRoaXMubWV0YU9iamVjdFNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9W10sdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhRGF0YUlkPSIiLHRoaXMubG9hZGluZz0hMCx0aGlz'@;
put 'Lm1ldGF0eXBlc0xvYWRpbmc9ITAsdGhpcy5tZXRhT2JqZWN0U2l6ZT0yMDAsdGhpcy5hc3NvVHlwZVNlbGVjdGVkPSIiLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIiLHRoaXMucmVwb3NpdG9yeT0iIix0aGlzLm9iamVjdFJvdXRlPSExLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5vYmplY3RW'@;
put 'aWV3PSExLHRoaXMuZ2V0Q2hpbGRyZW49Vz0+Vy5jb3VudD9XaShXLmRldGFpbHMpOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOlcuQVNTT0NVUkl9XX0pLnRoZW4oZ2U9Pnt0aGlzLnNob3dUYWJsZT0h'@;
put 'MCx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPWdlLmF0dHJpYnV0ZXMsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9Vy5OQU1FO2xldCB3ZT10aGlzLnJvdXRlci51cmw7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMub2JqZWN0Um91dGU/d2Uuc2xpY2UoMCx3ZS5sYXN0'@;
put 'SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIitXLkFTU09DVVJJLnNsaWNlKDErVy5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKTp3ZSsiL29iamVjdC8iK1cuQVNTT0NVUkkuc2xpY2UoMStXLkFTU09DVVJJLmluZGV4T2YoIlxcIikpKSx0aGlzLmdldEFzc29zaWF0aW9uc0NvdW50KGdlLmFz'@;
put 'c29jaWF0aW9ucyl9KSx0aGlzLmRlYm91bmNlPSExfW5nT25Jbml0KCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbWV0YWRhdGEiLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIpJiYodGhpcy5vYmplY3RSb3V0ZT0hMCx0aGlzLm9i'@;
put 'amVjdFZpZXc9ITApLHRoaXMucGFnZVNpemU9NSxHbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QmJkduLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMmJiF0aGlzLm9iamVjdFJvdXRlPyh0aGlzLm1ldGFEYXRhTGlzdD1Hbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QsdGhpcy5yZXBvc2l0b3JpZXM9'@;
put 'R24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyx0aGlzLnJlcG9zaXRvcnk9R24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITEsdGhpcy5tZXRhRGF0YVNlYXJjaD1Hbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaCk6'@;
put 'KHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGF0eXBlcyIsbnVsbCkudGhlbihhPT57dGhpcy5tZXRhRGF0YUxpc3Q9YS50eXBlcyxHbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3Q9dGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGlu'@;
put 'Zz0hMX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFyZXBvcyIsbnVsbCkudGhlbihhPT57bGV0IGQ9ITE7dGhpcy5yZXBvc2l0b3JpZXM9W107Zm9yKGxldCBoPTA7aDxhLm91dHJlcG9zLmxlbmd0aDtoKyspdGhpcy5yZXBvc2l0b3JpZXMucHVzaChhLm91dHJlcG9z'@;
put 'W2hdLk5BTUUpLCJGb3VuZGF0aW9uIj09PWEub3V0cmVwb3NbaF0uTkFNRSYmKGQ9ITApO2lmKHRoaXMucmVwb3NpdG9yeT1kPyJGb3VuZGF0aW9uIjphLm91dHJlcG9zWzBdLk5BTUUsR24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcz10aGlzLnJlcG9zaXRvcmllcyxHbi5tZXRhZGF0YS5z'@;
put 'ZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5LHRoaXMub2JqZWN0Um91dGUpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuc2hvd0RhdGE9ITA7bGV0IGg9IiIsZj10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5vYmplY3RJRDt0aGlzLm1ldGFPYmplY3RM'@;
put 'aXN0PVtdLHRoaXMubWV0YU9iamVjdExpc3QucHVzaCh7SUQ6ZixOQU1FOmh9KSx0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdE9uQ2xpY2sodGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0uSUQsdGhpcy5tZXRhT2JqZWN0U2hvd0xp'@;
put 'c3RbMF0pfX0pKX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQp'@;
put 'JiYoaC5leHBhbmRlZD0hMSl9KX1tZXRhRGF0YU9uQ2xpY2soYSxkKXt0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L21ldGFkYXRhIiksdGhpcy5zaG93RGF0YT0hMSx0aGlzLmxvYWRpbmc9ITAsdGhpcy5zZWxlY3RtZXRhRGF0YShhLGQpfW1l'@;
put 'dGFPYmplY3RPbkNsaWNrKGEsZCl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zZWxlY3RtZXRhT2JqZWN0KGEsZCl9c2VsZWN0bWV0YURhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShm'@;
put 'dW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhb2JqZWN0cyIse1NBU0NvbnRyb2xUYWJsZTpbe21ldGF0eXBlOmEscmVwbzpoLnJlcG9zaXRvcnl9XX0pLnRoZW4oXz0+e2gubWV0YU9iamVjdExpc3Q9Xy5vYmplY3RzLGguZ2V0TWV0YU9iamVjdEF0dHJpYnV0'@;
put 'ZXMoaC5tZXRhT2JqZWN0U2l6ZSksaC5sb2FkaW5nPSExLGguYXNzb1R5cGVTZWxlY3RlZD1hLGguZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGguc2hvd0RhdGE9ITB9KX0pKCl9c2VsZWN0bWV0YU9iamVjdChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2guc2Fz'@;
put 'U2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4oXz0+e2gubWV0YU9iamVjdEFzc29jaWF0aW9ucz1fLmFzc29jaWF0aW9ucyxoLnJvb3QkPVdpKGguZ2V0QXNzb3NpYXRpb25zQ291bnQoXy5hc3NvY2lh'@;
put 'dGlvbnMpKSxoLnNob3dBY2M9ITAsaC5zaG93VGFibGU9ITA7bGV0IFQ9Xy5hdHRyaWJ1dGVzLmZpbmQoaWU9PiJOYW1lIj09PWllLk5BTUUpLlZBTFVFO2guYXNzb09iamVjdFNlbGVjdGVkPVQsZC5OQU1FPVQ7bGV0IFc9aC5yb3V0ZXIudXJsO2gubG9jYXRpb24ucmVwbGFjZVN0YXRlKGgu'@;
put 'b2JqZWN0Um91dGU/Vy5zbGljZSgwLFcubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSk6VysiL29iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpKSxoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPV8uYXR0cmlidXRlc30pfSko'@;
put 'KX1zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6YX1dfSkudGhlbihfPT57aC5tZXRhT2JqZWN0'@;
put 'QXR0cmlidXRlcz1fLmF0dHJpYnV0ZXMsaC5zaG93VGFibGU9ITB9KX0pKCl9Z2V0QXNzb3NpYXRpb25zQ291bnQoYSl7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGYgb2YgYSl7ZC5oYXMoZi5BU1NPQyl8fGQuc2V0KGYuQVNTT0Mse2NvdW50OjAsZGV0YWlsczpbXX0pO2xldCBfPWQuZ2V0KGYu'@;
put 'QVNTT0MpO18uY291bnQrKyxfLmRldGFpbHMucHVzaCh7QVNTT0NVUkk6Zi5BU1NPQ1VSSSxOQU1FOmYuTkFNRSxkaXNwbGF5OmYuTkFNRSxVUkk6Zi5BU1NPQ1VSSS5zbGljZShmLkFTU09DVVJJLmluZGV4T2YoIjoiKSsxKX0pfWxldCBoPVtdO3JldHVybiBkLmZvckVhY2goZnVuY3Rpb24o'@;
put 'ZixfKXtoLnB1c2goe0FTU09DOl8sY291bnQ6Zi5jb3VudCxkZXRhaWxzOmYuZGV0YWlscyxkaXNwbGF5Ol8rIiAoICIrZi5jb3VudCsiICkifSl9KSxofXNldFR5cGVBc3Nvc2lhdGlvbnMoYSl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucyloLkFT'@;
put 'U09DPT09YSYmZC5wdXNoKGgpO3JldHVybiB0aGlzLmFzc29zaWF0aW9uTmFtZXM9ZCxkfWFzc29zaWF0aW9uTmFtZU9uQ2xpY2soYSl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNlbGVj'@;
put 'dEFzc29zaWF0aW9uc0RldGFpbHMoYSl9bWV0YUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5tZXRhRGF0YVNlYXJjaCwiSUQiKSxHbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaD10aGlzLm1ldGFEYXRhU2Vh'@;
put 'cmNofW1ldGFPYmplY3RPbkZpbHRlcigpe3RoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5oZWxwZXJTZXJ2aWNlLm1ldGFPYmplY3RPbkZpbHRlcih0aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdFNlYXJjaCwiTkFNRSIpLHRoaXMuZ2V0TWV0YU9iamVjdEF0dHJp'@;
put 'YnV0ZXModGhpcy5tZXRhT2JqZWN0U2l6ZSksR24ubWV0YWRhdGEubWV0YU9iamVjdFNlYXJjaD10aGlzLm1ldGFPYmplY3RTZWFyY2h9Z2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoYSl7aWYodm9pZCAwIT09dGhpcy5tZXRhT2JqZWN0TGlzdCYmdGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg+'@;
put 'YSl7bGV0IGQ9MCxoPS0xO2ZvcihsZXQgZj0wO2Y8dGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg7ZisrKWlmKCh2b2lkIDA9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbnx8ITE9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbikmJmQrKyxkPT09YSl7aD1mO2JyZWFrfXRo'@;
put 'aXMubWV0YU9iamVjdFNob3dMaXN0PS0xIT09aD90aGlzLm1ldGFPYmplY3RMaXN0LnNsaWNlKDAsaCk6dGhpcy5tZXRhT2JqZWN0TGlzdH1lbHNlIHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3R9cGFuZWxDaGFuZ2UoYSxkKXt0aGlzLmRlYm91bmNlfHwodGhp'@;
put 'cy5tZXRhT2JqZWN0T25DbGljayhkLklELGQpLHRoaXMuZGVib3VuY2U9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuZGVib3VuY2U9ITF9LDYwMCkpfXVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpe0duLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnl9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHZsKSx0dChvYSksdHQoQWMpLHR0KEpkKSx0dChEcyksdHQoV2wpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1ldGFkYXRhIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250'@;
put 'YWluZXIiXSxkZWNsczoxNyx2YXJzOjgsY29uc3RzOltbMSwicmVwby1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIs'@;
put 'InNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQtaSJdLFsxLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFz'@;
put 'cyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3cgY2xyLWZsZXgtZ3Jvdy0xIiw0LCJuZ0lmIl0sWzMsInZhbHVlIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJzZWFy'@;
put 'Y2ggU0FTIFR5cGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGlj'@;
put 'ayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2si'@;
put 'LCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmls'@;
put 'bCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0lmIl0sWzEsImNsci1yb3ciLCJjbHItZmxleC1ncm93LTEiXSxbMSwiY2xyLWNvbC02Il0sWyJjbGFzcyIsInNlYXJjaC1pbnB1dCIsNCwibmdJZiJdLFsi'@;
put 'Y2xhc3MiLCJvYmplY3RzLWNvbCIsNCwibmdJZiJdLFsxLCJjbHItY29sLTYiLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsInNlYXJjaCIsIm5h'@;
put 'bWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoT2JqVHJlZUlucHV0IiwiIl0sWzEsIm9iamVjdHMtY29sIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJB'@;
put 'Y2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMSwiZmxvYXQtcmlnaHQiXSxbNCwiY2xySWZFeHBhbmRlZCJdLFszLCJjbHJMYXp5Iiw0LCJuZ0lmIl0sWzMsImNsckxhenkiXSxbMywiY2xyRXhwYW5kYWJsZSIsNCwiY2xyUmVjdXJzaXZlRm9yIiwi'@;
put 'Y2xyUmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiJdLFszLCJjbHJFeHBhbmRhYmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiLDQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxvYXQtcmln'@;
put 'aHQgb2JqZWN0LXVyaSIsNCwibmdJZiJdLFsxLCJmbG9hdC1yaWdodCIsIm9iamVjdC11cmkiXSxbMSwiY29scy1oZWFkIl0sWzEsIm9iamVjdC10ZXh0Il0sWzEsIm0tMCIsIndvcmQtYnJlYWsiLCJtci0yMCJdLFsxLCJmbG9hdC1yaWdodCIsIm1sLTMiXSxbMSwiZGF0YWdyaWQtY3VzdG9t'@;
put 'LWZvb3RlciJdLFszLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbInBhZ2luYXRpb24iLCIiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwi'@;
put 'YXBwLXNpZGViYXIiKSgxLCJkaXYiLDApKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxOZSg0LCJNZXRhZGF0YSBSZXBvc2l0b3J5IikseWUoKSxtZSg1LCJzZWxlY3QiLDEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5yZXBvc2l0b3J5PWZ9'@;
put 'KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpfSksUWUoNixmZXQsMiwyLCJvcHRpb24iLDIpLHllKCkoKSgpLG1lKDcsImNsci10cmVlIiksUWUoOCxtZXQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSxRZSg5LF9ldCwyLDEsIm5nLWNvbnRh'@;
put 'aW5lciIsNCkseWUoKSgpLG1lKDEwLCJkaXYiLDUpKDExLCJkaXYiLDYpKDEyLCJoMyIsNyksTmUoMTMpLHllKCksUWUoMTQsYmV0LDQsMCwiZGl2Iiw4KSxRZSgxNSxNZXQsNCwxLCJkaXYiLDkpLFFlKDE2LFlldCwxMCw1LCJkaXYiLDEwKSx5ZSgpKCkpLDImYSYmKENlKDUpLFJlKCJuZ01v'@;
put 'ZGVsIixkLnJlcG9zaXRvcnkpLENlKDEpLFJlKCJuZ0Zvck9mIixkLnJlcG9zaXRvcmllcyksQ2UoMiksUmUoIm5nSWYiLGQubWV0YURhdGFMaXN0KSxDZSgxKSxSZSgibmdGb3JPZiIsZC5tZXRhRGF0YUxpc3QpLENlKDQpLG9yKGQuYXNzb1R5cGVTZWxlY3RlZCksQ2UoMSksUmUoIm5nSWYi'@;
put 'LCFkLmxvYWRpbmcmJiFkLm1ldGFPYmplY3RMaXN0KSxDZSgxKSxSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93RGF0YSkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGwxLGMxLFdhLE0wLEJzLE9zLFc4LFRwLHRnLFBFLFU4LGdILEZFLG5nLFNRLHJnLGlnLCQ4LG9n'@;
put 'LEI4LGtwLHo4LFFGLGRkLGcxLERRLGthLFp1LHpKLFVzLGYxLE44LEg4LFRKLF9FLElKLERKLExKLEVGLG4zLHV4XSxzdHlsZXM6WyIub2JqZWN0cy1jb2xbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo3NXZoO292ZXJmbG93OnNjcm9sbDtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7YmFj'@;
put 'a2dyb3VuZDp3aGl0ZTtib3JkZXItcmFkaXVzOjRweH0uY29scy1oZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmYWZhZmE7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO3BhZGRpbmc6MTBweDtkaXNwbGF5OmZsZXh9Lm9iamVjdC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtk'@;
put 'aXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tbGVmdDoxMHB4O2ZsZXg6MX0ucmVwby1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4t'@;
put 'Ym90dG9tOjEwcHh9LmNsci1hY2NvcmRpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmZsb2F0LXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDtmbG9hdDpyaWdodH0uZnVsbC13aWR0aFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ub2JqZWN0'@;
put 'LXVyaVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjVweCAwIDB9Lm9iamVjdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctbGVmdDozcHg7cGFkZGluZy1yaWdodDozcHh9Lm9iamVjdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6'@;
put 'I2Q4ZTNlOTtib3JkZXItcmFkaXVzOjNweH0uZGF0YWdyaWQtaG9zdFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp1bnNldCFpbXBvcnRhbnR9LmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0u'@;
put 'Y29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufSJdfSksYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSko'@;
put 'KTtmdW5jdGlvbiBXZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gR2V0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5yb2xlU2VhcmNo'@;
put 'PSIiLGp0KGgucm9sZUxpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uICRldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBC'@;
put 'dChhKSxqdChWZSgpLnJvbGVTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkucm9sZUxpc3RPbkZpbHRlcigpKX0pLHllKCksUWUoNCxXZXQsMSwwLCJjbHItaWNvbiIsMTApLFFlKDUsR2V0LDEsMCwiY2xyLWljb24iLDExKSx5ZSgpKCl9aWYoMiZj'@;
put 'KXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5yb2xlU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBxZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtt'@;
put 'ZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkucm9sZU9uQ2xpY2soaCkpfSksbWUoMSwicCIsMTYpLHF0KDIsImNsci1pY29uIiwxNyksTmUoMykseWUoKSgpfWlmKDImYyl7Y29u'@;
put 'c3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7ZHIoInRhYmxlLWFjdGl2ZSIsYS5ST0xFVVJJPT09ZC5yb2xlVXJpKSxDZSgzKSxncigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBLZXQoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLHFldCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxV'@;
put 'cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIFhldChjLGwpezEmYyYmKG1lKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWZ1bmN0aW9uIEpldChjLGwpezEmYyYmKG1l'@;
put 'KDAsImg1IiksTmUoMSwiTm8gTWVtYmVycyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24gUWV0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLE5lKDIpLHllKCksbWUoMywidGQiLDMwKSxOZSg0KSx5ZSgpLG1lKDUsInRkIiwzMCksTmUoNikseWUoKSxtZSg3LCJ0ZCIs'@;
put 'MzApLE5lKDgpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuVVJJTUVNKSxDZSgyKSxvcihhLk1FTUJFUk5BTUUpLENlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuTUVNQkVSQ1JFQVRFRCksQ2UoMiks'@;
put 'b3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gZXR0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksTmUoNSwiTkFNRSIpLHllKCkoKSxtZSg2LCJ0ZCIsMjkpKDcsImIiKSxOZSg4LCJFTUFJTCIpLHllKCkoKSxt'@;
put 'ZSg5LCJ0ZCIsMjkpKDEwLCJiIiksTmUoMTEsIkNSRUFURUQiKSx5ZSgpKCksbWUoMTIsInRkIiwzMCkoMTMsImIiKSxOZSgxNCwiVVBEQVRFRCIpLHllKCkoKSgpKCksbWUoMTUsInRib2R5IiksUWUoMTYsUWV0LDksNSwidHIiLDMxKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgx'@;
put 'NiksUmUoIm5nRm9yT2YiLGEucm9sZU1lbWJlcnMpfX1mdW5jdGlvbiB0dHQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIEdyb3VwcyBQcmVzZW50ICEiKSx5ZSgpKX1mdW5jdGlvbiBudHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksTmUoMikseWUoKSxt'@;
put 'ZSgzLCJ0ZCIsMzApLE5lKDQpLHllKCksbWUoNSwidGQiLDMwKSxOZSg2KSx5ZSgpLG1lKDcsInRkIiwzMCksTmUoOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJTUVNKSxDZSgyKSxvcihhLk1F'@;
put 'TUJFUk5BTUUpLENlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuTUVNQkVSQ1JFQVRFRCksQ2UoMiksb3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gcnR0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksTmUo'@;
put 'NSwiTkFNRSIpLHllKCkoKSxtZSg2LCJ0ZCIsMjkpKDcsImIiKSxOZSg4LCJFTUFJTCIpLHllKCkoKSxtZSg5LCJ0ZCIsMjkpKDEwLCJiIiksTmUoMTEsIkNSRUFURUQiKSx5ZSgpKCksbWUoMTIsInRkIiwzMCkoMTMsImIiKSxOZSgxNCwiVVBEQVRFRCIpLHllKCkoKSgpKCksbWUoMTUsInRi'@;
put 'b2R5IiksUWUoMTYsbnR0LDksNSwidHIiLDMxKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxNiksUmUoIm5nRm9yT2YiLGEucm9sZUdyb3Vwcyl9fWZ1bmN0aW9uIGl0dChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInRhYmxlIiwy'@;
put 'MikoNCwidGJvZHkiKSg1LCJ0ciIpKDYsInRkIiwyMykoNywicCIsMjQpKDgsImIiKSxOZSg5KSx5ZSgpKCkoKSgpLG1lKDEwLCJ0ciIpKDExLCJ0ZCIsMjMpKDEyLCJpIiksTmUoMTMpLHllKCkoKSgpKCkoKSgpKCksbWUoMTQsImRpdiIsMjApKDE1LCJkaXYiLDIxKSgxNiwiZGl2IiwyNSko'@;
put 'MTcsImRpdiIpKDE4LCJoMyIpLE5lKDE5KSx5ZSgpLFFlKDIwLEpldCwyLDAsImg1Iiw1KSxtZSgyMSwiZGl2IiwyNiksUWUoMjIsZXR0LDE3LDEsInRhYmxlIiwyNykseWUoKSgpLHF0KDIzLCJociIpLG1lKDI0LCJkaXYiKSgyNSwiaDMiKSxOZSgyNikseWUoKSxRZSgyNyx0dHQsMiwwLCJo'@;
put 'NSIsNSksbWUoMjgsImRpdiIsMjYpLFFlKDI5LHJ0dCwxNywxLCJ0YWJsZSIsMjcpLHllKCkoKSxxdCgzMCwiYnIiKSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg5KSxvcihhLnJvbGVOYW1lKSxDZSg0KSxvcihhLnJvbGVEZXNjKSxDZSg2KSxncigiTUVNQkVSUyAoIixhLnJv'@;
put 'bGVNZW1iZXJzQ291bnQsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS5yb2xlTWVtYmVyc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS5yb2xlTWVtYmVyc0NvdW50KSxDZSg0KSxncigiR3JvdXBzICgiLGEucm9sZUdyb3Vwc0NvdW50LCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEucm9s'@;
put 'ZUdyb3Vwc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS5yb2xlR3JvdXBzQ291bnQpfX1sZXQgd2xlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMubG9jYXRpb249'@;
put 'Zix0aGlzLnJvdXRlPV8sdGhpcy5yb2xlU2VhcmNoPSIiLHRoaXMucm9sZVVyaT0iIix0aGlzLnJvbGVOYW1lPSIiLHRoaXMucm9sZURlc2M9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmxvYWRpbmc9ITF9bmdPbkluaXQoKXtHbi52aWV3ZXIuY3VycmVu'@;
put 'dFNlbGVjdGlvbj0idmlldy91c2VybmF2L3JvbGVzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksR24udXNlcm5hdi5yb2xlTGlzdCYmIXRo'@;
put 'aXMucGFyYW1QcmVzZW50Pyh0aGlzLnJvbGVzPUduLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPUduLnVzZXJuYXYucm9sZVNlYXJjaCk6dm9pZCAwPT09R24udXNlcm5hdi5yb2xlTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2'@;
put 'L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZXM9YS5yb2xlcyxHbi51c2VybmF2LnJvbGVMaXN0PWEucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0'@;
put 'aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVy'@;
put 'cz1mLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5S'@;
put 'T0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpOih0aGlzLnJvbGVzPUduLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPUduLnVzZXJuYXYucm9sZVNlYXJjaCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4o'@;
put 'YT0+e2lmKHRoaXMucm9sZXM9YS5yb2xlcyxHbi51c2VybmF2LnJvbGVMaXN0PWEucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAs'@;
put 'dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYu'@;
put 'c2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkp'@;
put 'fXJvbGVMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMucm9sZXMsdGhpcy5yb2xlU2VhcmNoLCJST0xFTkFNRSIpLEduLnVzZXJuYXYucm9sZVNlYXJjaD10aGlzLnJvbGVTZWFyY2h9cm9sZU9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xl'@;
put 'dCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSkpLHRoaXMuc2FzU2VydmljZS5y'@;
put 'ZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6YS5ST0xFVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuc2FzbWVtYmVycy5sZW5ndGgsdGhp'@;
put 'cy5yb2xlR3JvdXBzPWYuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9YS5ST0xFVVJJLHRoaXMucm9sZU5hbWU9YS5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWEuUk9MRURFU0N9KX1maW5kUm9sZShhLGQpe2xldCBoPSExO3Jl'@;
put 'dHVybiBhLmZvckVhY2goZj0+e2YuUk9MRVVSST09PWQmJihoPWYpfSksaH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQob2EpLHR0KEFjKSx0dChEcyksdHQoSmQpLHR0KFdsKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'ImFwcC1yb2xlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0s'@;
put 'WyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBSb2xlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0'@;
put 'ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIs'@;
put 'InRpbWVzIiwzLCJjbGljayJdLFszLCJ0YWJsZS1hY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5l'@;
put 'ciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0YWJsZSIsInJvbGUtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInJvbGUtaW5mby10ZXh0Il0sWzEsImNhcmQiLCJyb2xlLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIs'@;
put 'NCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIsMCko'@;
put 'MSwiY2xyLXRyZWUiKSxRZSgyLCRldCw2LDMsImNsci10cmVlLW5vZGUiLDEpLFFlKDMsS2V0LDIsMSwibmctY29udGFpbmVyIiwyKSx5ZSgpKCksbWUoNCwiZGl2IiwzKSxRZSg1LFhldCwzLDAsImRpdiIsNCksUWUoNixpdHQsMzEsOCwiZGl2Iiw1KSx5ZSgpKSwyJmEmJihDZSgyKSxSZSgi'@;
put 'bmdJZiIsZC5yb2xlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGQucm9sZXMpLENlKDIpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLnJvbGVNZW1iZXJzJiYhZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeHMsWmksQnUsV2EsQnMsT3MsZGQsZzEsa2EsZjEsbjNdLHN0'@;
put 'eWxlczpbIi5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnJvbGUtaW5mby10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0ucm9sZS1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9y'@;
put 'OiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9LnJvbGUtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnJvbGUtZGF0YVtf'@;
put 'bmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6dW5zZXR9LnJv'@;
put 'bGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91'@;
put 'bmQtY29sb3I6I2Y5ZjlmOTt3aWR0aDoxMDAlfS5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhlYWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2RhZGFkYX0ubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRib2R5W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIHRyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo3MDBweH1AbWVkaWEgc2NyZWVuIGFu'@;
put 'ZCAobWF4LXdpZHRoOiA3NjhweCl7LnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fSJdfSksY30pKCksb3R0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJnF0KDAsInJvdXRl'@;
put 'ci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltmcF19KSxjfSkoKSxzdHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0'@;
put 'eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2ZwXX0pLGN9KSgpO2Z1'@;
put 'bmN0aW9uIGF0dChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBsdHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLnVzZXJTZWFyY2g9IiIs'@;
put 'anQoaC51c2VyTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gY3R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCw5KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEp'@;
put 'LGp0KFZlKCkudXNlclNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS51c2VyTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LGF0dCwxLDAsImNsci1pY29uIiwxMCksUWUoNSxsdHQsMSwwLCJjbHItaWNvbiIsMTEpLHllKCkoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLnVzZXJTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHV0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAs'@;
put 'ImNsci10cmVlLW5vZGUiLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS51c2VyT25DbGljayhoKSl9KSxtZSgxLCJwIiwxNikscXQoMiwiY2xyLWljb24iLDE3KSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtkcigidGFibGUtYWN0aXZlIiwobnVsbD09ZC51c2VySW5mbz9udWxsOmQudXNlckluZm8uVVJJKT09PWEuVVJJKSxDZSgzKSxncigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIGR0dChjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsdXR0LDQsMywiY2xy'@;
put 'LXRyZWUtbm9kZSIsMTQpLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gaHR0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24g'@;
put 'ZnR0KGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwidHIiKSgyLCJ0ZCIsMjcpLE5lKDMsIiBNZXRhZGF0YSBDcmVhdGVkOiAiKSxtZSg0LCJiIiksTmUoNSkseWUoKSgpKCksbWUoNiwidHIiKSg3LCJ0ZCIsMjcpLE5lKDgsIiBNZXRhZGF0YSBVcGRhdGVkOiAiKSxtZSg5LCJiIiksTmUoMTAp'@;
put 'LHllKCkoKSgpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSg1KSxvcihhLnVzZXJJbmZvLk1FVEFEQVRBQ1JFQVRFRCksQ2UoNSksb3IoYS51c2VySW5mby5NRVRBREFUQVVQREFURUQpfX1mdW5jdGlvbiBwdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgy'@;
put 'LCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksTmUoOCkseWUoKSgpKCkoKSxtZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpKDExLCJwIiwyOCkoMTIsImIiKSxOZSgxMykseWUoKSgpKCkoKSxRZSgxNCxmdHQsMTEsMiwibmctY29udGFpbmVy'@;
put 'Iiw1KSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoOCksb3IoYS51c2VySW5mby5OQU1FKSxDZSg1KSxvcihhLnVzZXJJbmZvLkRJU1BMQVlOQU1FKSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1mdW5jdGlvbiBndHQoYyxsKXtp'@;
put 'ZigxJmMmJihtZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksTmUoOCkseWUoKSgpKCkoKSxtZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpLE5lKDExLCIgVXNlciBJRDogIiksbWUoMTIsImIi'@;
put 'KSxOZSgxMykseWUoKSgpKCksbWUoMTQsInRyIikoMTUsInRkIiwyNyksTmUoMTYsIiBVc2VyIHByb3ZpZGVyIElEOiAiKSxtZSgxNywiYiIpLE5lKDE4KSx5ZSgpKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoOCksb3IoYS51c2VySW5mby5OQU1FKSxDZSg1KSxvcihhLnVz'@;
put 'ZXJJbmZvLlVSSSksQ2UoNSksb3IoYS51c2VySW5mby5QUk9WSURFUil9fWZ1bmN0aW9uIG10dChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gRW1haWxzIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiB2dHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwzMSksTmUoMiks'@;
put 'eWUoKSxtZSgzLCJ0ZCIsMzEpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuVFlQRSl9fWZ1bmN0aW9uIF90dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwz'@;
put 'MCkoNCwiYiIpLE5lKDUsIkVNQUlMIikseWUoKSgpLG1lKDYsInRkIiwzMSkoNywiYiIpLE5lKDgsIlRZUEUiKSx5ZSgpKCkoKSgpLG1lKDksInRib2R5IiksUWUoMTAsdnR0LDUsMiwidHIiLDIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEwKSxSZSgibmdGb3JPZiIsYS51c2Vy'@;
put 'RW1haWxzKX19ZnVuY3Rpb24gYnR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLFFlKDMsbXR0LDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjQpLFFlKDUsX3R0LDExLDEsInRhYmxlIiwyNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksZ3Io'@;
put 'IkVNQUlMUyAoIixhLnVzZXJFbWFpbHNDb3VudHx8IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlckVtYWlsc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyRW1haWxzQ291bnQpfX1mdW5jdGlvbiB5dHQoYyxsKXsxJmMmJnF0KDAsImhyIil9ZnVuY3Rpb24gd3R0KGMs'@;
put 'bCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBHcm91cHMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIEN0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiwzMyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9n'@;
put 'cm91cHMvIithLlVSSSksQ2UoMSksZ3IoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIFN0dChjLGwpe2lmKDEmYyYmKEJyKDApLG1lKDEsInRkIiwzMyksTmUoMikseWUoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksUmUoInJvdXRlckxpbmsiLCIvdmll'@;
put 'dy91c2VybmF2L2dyb3Vwcy8iKyhhLkdST1VQVVJJfHxhLlVSSSkpLENlKDEpLGdyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBNdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpLFFlKDEsQ3R0LDIsMiwidGQiLDMyKSxRZSgyLFN0dCwzLDIsIm5nLWNvbnRhaW5lciIsNSkseWUo'@;
put 'KSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19ZnVuY3Rpb24geHR0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFi'@;
put 'bGUiLDI5KSgxLCJ0Ym9keSIpLFFlKDIsTXR0LDMsMiwidHIiLDIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLFJlKCJuZ0Zvck9mIixhLnVzZXJHcm91cHMpfX1mdW5jdGlvbiBFdHQoYyxsKXsxJmMmJnF0KDAsImhyIil9ZnVuY3Rpb24ga3R0KGMsbCl7MSZjJiYobWUoMCwi'@;
put 'aDUiKSxOZSgxLCJObyBSb2xlcyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24gQXR0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMzQpLE5lKDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoNCk7Q2UoMSksUmUoInJvdXRlckxpbmsiLCIvdmlldy91c2Vy'@;
put 'bmF2L3JvbGVzLyIrZC5nZXRSb2xlVVJJKGEuUk9MRVVSSSkpLENlKDEpLGdyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIFR0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxRZSgyLEF0dCwzLDIsInRyIiwyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1W'@;
put 'ZSgzKTtDZSgyKSxSZSgibmdGb3JPZiIsYS51c2VyUm9sZXMpfX1mdW5jdGlvbiBEdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIpLHllKCksUWUoMyxrdHQsMiwwLCJoNSIsNSksbWUoNCwiZGl2IiwyNCksUWUoNSxUdHQsMywxLCJ0YWJsZSIsMjUpLHllKCkoKSks'@;
put 'MiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLGdyKCJST0xFUyAoIixhLnVzZXJSb2xlc0NvdW50fHwiMCIsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS51c2VyUm9sZXNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEudXNlclJvbGVzQ291bnQpfX1mdW5jdGlvbiBJdHQoYyxsKXsxJmMmJnF0'@;
put 'KDAsImhyIil9ZnVuY3Rpb24gTHR0KGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBMb2dpbnMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIFJ0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDMxKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMSksTmUoNCkseWUoKSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksb3IoYS5ET01BSU4pLENlKDIpLG9yKGEuVVNFUklEKX19ZnVuY3Rpb24gT3R0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksTmUoNSwiRE9NQUlOIikseWUoKSgp'@;
put 'LG1lKDYsInRkIikoNywiYiIpLE5lKDgsIlVTRVIgSUQiKSx5ZSgpKCkoKSgpLG1lKDksInRib2R5IiksUWUoMTAsUnR0LDUsMiwidHIiLDIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEwKSxSZSgibmdGb3JPZiIsYS51c2VyTG9naW5zKX19ZnVuY3Rpb24gUHR0KGMsbCl7aWYo'@;
put 'MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLFFlKDMsTHR0LDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjQpLFFlKDUsT3R0LDExLDEsInRhYmxlIiwyNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksZ3IoIkxPR0lOUyAoIixhLnVzZXJMb2dpbnNDb3VudHx8'@;
put 'IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlckxvZ2luc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyTG9naW5zQ291bnQpfX1mdW5jdGlvbiBGdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxRZSgxLHB0dCwxNSwzLCJkaXYiLDIwKSxRZSgyLGd0dCwxOSwzLCJk'@;
put 'aXYiLDIwKSxtZSgzLCJkaXYiLDIxKSg0LCJkaXYiLDIyKSg1LCJkaXYiLDIzKSxRZSg2LGJ0dCw2LDMsImRpdiIsNSksUWUoNyx5dHQsMSwwLCJociIsNSksbWUoOCwiZGl2IikoOSwiaDMiKSxOZSgxMCkseWUoKSxRZSgxMSx3dHQsMiwwLCJoNSIsNSksbWUoMTIsImRpdiIsMjQpLFFlKDEz'@;
put 'LHh0dCwzLDEsInRhYmxlIiwyNSkseWUoKSgpLFFlKDE0LEV0dCwxLDAsImhyIiw1KSxRZSgxNSxEdHQsNiwzLCJkaXYiLDUpLFFlKDE2LEl0dCwxLDAsImhyIiw1KSxRZSgxNyxQdHQsNiwzLCJkaXYiLDUpLHF0KDE4LCJiciIpLHllKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEp'@;
put 'LFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhJiZhLnVzZXJJbmZvKSxDZSg0KSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLENl'@;
put 'KDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksQ2UoMyksZ3IoIkdST1VQUyAoIixhLnVzZXJHcm91cHNDb3VudHx8IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlckdyb3Vwc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyR3JvdXBz'@;
put 'Q291bnQpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWxldCBDbGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0'@;
put 'ZXI9Xyx0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2VyU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1OYW1lPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMuc2VydmVyVHlwZT0iIix0aGlzLlNlcnZlclR5cGU9'@;
put 'VWMuRCx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09u'@;
put 'SW5pdCgpe2lmKEduLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvdXNlcnMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1OYW1lPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVy'@;
put 'aSksR24udXNlcm5hdi51c2VyTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50KXRoaXMudXNlcnM9R24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9R24udXNlcm5hdi51c2VyU2VhcmNoO2Vsc2UgaWYodm9pZCAwPT09R24udXNlcm5hdi51c2VyTGlzdD8odGhpcy5sb2FkaW5nPSEw'@;
put 'LHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0'@;
put 'ZW1zLm1hcChmPT4oe05BTUU6Zi5uYW1lLFVSSTpmLmlkLFBST1ZJREVSOmYucHJvdmlkZXJJZH0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1oLEduLnVzZXJuYXYudXNlckxpc3Q9aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzIixudWxsKS50'@;
put 'aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1hLnVzZXJzLEduLnVzZXJuYXYudXNlckxpc3Q9YS51c2Vyc30pKToodGhpcy51c2Vycz1Hbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Hbi51c2VybmF2LnVzZXJTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50KWlm'@;
put 'KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YSl7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2ErIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0'@;
put 'OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGQ9PmQudGV4dCgpKS50aGVuKGQ9PntsZXQgaD1KU09OLnBhcnNlKGQpO3RoaXMudXNlckRhdGE9aCx0aGlzLmxvYWRpbmc9ITE7bGV0IGY9aC5pdGVtcy5tYXAoXz0+KHtHUk9VUE5BTUU6Xy5uYW1lLFVSSTpfLmlkfSkpO3RoaXMudXNlckdy'@;
put 'b3Vwcz1mLHRoaXMudXNlckdyb3Vwc0NvdW50PWYubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChfPT5fLlVSST09PWEpKX0pfWVsc2V7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3Qo'@;
put 'InVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YX1dfSkudGhlbihoPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgVWMuRC5TYXM5OnRoaXMudXNlckluZm89aC5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1oLmVtYWlscyx0aGlz'@;
put 'LnVzZXJFbWFpbHNDb3VudD1oLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9aC5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWgucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1oLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1oLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBV'@;
put 'Yy5ELlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoZj0+Zi5VUkk9PT1hKTtlbHNle2NvbnN0IGY9aC5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOmYuSUQsTkFNRTpmLk5BTUUsRElTUExBWU5BTUU6Zi5OQU1FfX19dGhpcy51c2VyRGF0YT1o'@;
put 'LHRoaXMudXNlckdyb3Vwcz1oLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1oLmdyb3Vwcy5sZW5ndGh9KX19dXNlckxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy51c2Vycyx0aGlzLnVzZXJTZWFyY2gsIk5BTUUiKSxHbi51c2VybmF2'@;
put 'LnVzZXJTZWFyY2g9dGhpcy51c2VyU2VhcmNofXVzZXJPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29k'@;
put 'ZVVSSShhLlVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYS5VUkkrIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9q'@;
put 'c29uIn19KS50aGVuKGg9PmgudGV4dCgpKS50aGVuKGg9PntsZXQgZj1KU09OLnBhcnNlKGgpO3RoaXMudXNlckRhdGE9Zix0aGlzLmxvYWRpbmc9ITE7bGV0IF89Zi5pdGVtcy5tYXAoVD0+KHtHUk9VUE5BTUU6VC5uYW1lLFVSSTpULmlkfSkpO3RoaXMudXNlckdyb3Vwcz1fLHRoaXMudXNl'@;
put 'ckdyb3Vwc0NvdW50PV8ubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChUPT5ULlVSST09PWEuVVJJKSl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphLlVSSX1dfSkudGhl'@;
put 'bihmPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgVWMuRC5TYXM5OnRoaXMudXNlckluZm89Zi5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1mLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1mLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9Zi5y'@;
put 'b2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWYucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1mLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1mLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBVYy5ELlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZp'@;
put 'bmQoXz0+Xy5VUkk9PT1hLlVSSSk7ZWxzZXtjb25zdCBfPWYuZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTpfLklELE5BTUU6Xy5OQU1FLERJU1BMQVlOQU1FOl8uTkFNRX19fXRoaXMudXNlckRhdGE9Zix0aGlzLnVzZXJHcm91cHM9Zi5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9'@;
put 'Zi5ncm91cHMubGVuZ3RofSl9Z2V0Um9sZVVSSShhKXtyZXR1cm4gYS5zcGxpdCgiT01TT0JKOklkZW50aXR5R3JvdXAiKVsxXS5zbGljZSgxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQWMpLHR0KG9hKSx0dChXbCksdHQoSmQpLHR0KERz'@;
put 'KSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11c2VyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0'@;
put 'LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRl'@;
put 'ciBieSBVc2VycyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2si'@;
put 'LDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJ0YWJsZS1hY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VyIl0s'@;
put 'WzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwidXNlci1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSB1c2VyLXRhYmxl'@;
put 'Iiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwidXNlci1pbmZvIl0sWzEsImxlZnQiXSxbMSwidXNlci1pbmZvLXRleHQiXSxbMSwidGFibGUiLCJ1c2VyLXRhYmxlIl0sWzEsIndpZHRoLTUwIl0sWzEsIiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsImNsYXNzIiwiIiwzLCJyb3V0ZXJM'@;
put 'aW5rIiw0LCJuZ0lmIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCIiLDMsInJvdXRlckxpbmsiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiwwKSgxLCJjbHItdHJlZSIpLFFlKDIsY3R0LDYsMywiY2xy'@;
put 'LXRyZWUtbm9kZSIsMSksUWUoMyxkdHQsMiwxLCJuZy1jb250YWluZXIiLDIpLHllKCkoKSxtZSg0LCJkaXYiLDMpLFFlKDUsaHR0LDMsMCwiZGl2Iiw0KSxRZSg2LEZ0dCwxOSwxMSwiZGl2Iiw1KSx5ZSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsZC51c2VycyksQ2UoMSksUmUoIm5nRm9y'@;
put 'T2YiLGQudXNlcnMpLENlKDIpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLnVzZXJEYXRhJiYhZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeHMsWmksQnUsR18sV2EsQnMsT3MsZGQsZzEsa2EsZjEsbjNdLHN0eWxlczpbIi5zaWRlYmFyLWhlaWdodFtfbmdjb250'@;
put 'ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnVzZXItaW5mby10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0udXNlci1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdh'@;
put 'N2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9LnVzZXItaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1j'@;
put 'b2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6YXV0b30udXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgz'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTt3aWR0aDoxMDAlfS51c2Vy'@;
put 'LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVdICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVy'@;
put 'e2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtjdXJzb3I6cG9pbnRlcn0ud2lkdGgtNTBbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJX0ud2lkdGgtMzNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMzJX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15'@;
put 'OnNjcm9sbDttYXgtaGVpZ2h0OjUwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsudXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KSxjfSkoKSxIdHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQp'@;
put 'e3RoaXMuaHR0cD1hLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWQsdGhpcy52aXlhQXBpcz17QW5hbHl0aWNzX0luc2lnaHRzOntpbnNpZ2h0czoiL2luc2lnaHRzIn0sVmlzdWFsaXNhdGlvbjp7cmVwb3J0czoiL3JlcG9ydHMiLHJlcG9ydEltYWdlczoiL3JlcG9ydEltYWdlcyIscmVwb3J0VHJh'@;
put 'bnNmb3JtczoiL3JlcG9ydFRyYW5zZm9ybXMiLHZpc3VhbEFuYWx5dGljczoiL3Zpc3VhbEFuYWx5dGljcyJ9LENvbXB1dGU6e2pvYnM6Ii9qb2JEZWZpbml0aW9ucyIsam9iRXhlY3V0aW9uOiIvam9iRXhlY3V0aW9uIn0sRGVjaXNpb25fTWFuYWdlbWVudDp7bW9kZWxNYW5hZ2VtZW50OiIv'@;
put 'bW9kZWxNYW5hZ2VtZW50Iixtb2RlbFJlcG9zaXRvcnk6Ii9tb2RlbFJlcG9zaXRvcnkiLG1vZGVsUHVibGlzaDoiL21vZGVsUHVibGlzaCIsbWljcm9hbmFseXRpY1Njb3JlOiIvbWljcm9hbmFseXRpY1Njb3JlIixkYXRhTWluaW5nOiIvZGF0YU1pbmluZyIsYnVzaW5lc3NSdWxlczoiL2J1'@;
put 'c2luZXNzUnVsZXMiLHJlZmVyZW5jZURhdGE6Ii9yZWZlcmVuY2VEYXRhIix0cmVhdG1lbnREZWZpbml0aW9uczoiL3RyZWF0bWVudERlZmluaXRpb25zIixzdWJqZWN0Q29udGFjdHM6Ii9zdWJqZWN0Q29udGFjdHMiLGRlY2lzaW9uc1J1bnRpbWVCdWlsZGVyOiIvZGVjaXNpb25zUnVudGlt'@;
put 'ZUJ1aWxkZXIifSxDb3JlX1NlcnZpY2VzOntmb2xkZXJzOiIvZm9sZGVycyIsZmlsZXM6Ii9maWxlcyIsYW5ub3RhdGlvbnM6Ii9hbm5vdGF0aW9ucyIsYXV0aG9yaXphdGlvbjoiL2F1dGhvcml6YXRpb24iLHJlbGF0aW9uc2hpcHM6Ii9yZWxhdGlvbnNoaXBzIixTQVNMb2dvbjoiL1NBU0xv'@;
put 'Z29uIn0sQXV0b21hdGVkX01hY2hpbmVfTGVhcm5pbmc6e21sUGlwZWxpbmVBdXRvbWF0aW9uOiIvbWxQaXBlbGluZUF1dG9tYXRpb24ifSxPdGhlcjp7aWRlbnRpdGllczoiL2lkZW50aXRpZXMifX0sdGhpcy5zZXJ2ZXJVcmw9IiI7Y29uc3QgaD10aGlzLmFwcFN0b3JlU2VydmljZS5nZXRE'@;
put 'Y0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWg/LnNlcnZlclVybHx8IiIsdGhpcy5nZXRCeUNvbGxlY3Rpb24oImpvYnMiKS5zdWJzY3JpYmUoZj0+e2NvbnNvbGUubG9nKCJyZXMiLGYpfSl9Z2V0QWxsQ29sbGVjdGlvbnMoKXtyZXR1cm4gdGhpcy52aXlhQXBpc31nZXRCeVVy'@;
put 'bChhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0QnlDb2xsZWN0aW9uKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoaFApLGFyKGU4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gTnR0KGMsbCl7MSZjJiZxdCgwLCJkaXYiLDkp'@;
put 'fWZ1bmN0aW9uIFZ0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNwYW4iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5vblZhbHVlQ2xpY2soaCkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0'@;
put 'IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksb3IoYS5kZXNjcmlwdGlvbil9fWZ1bmN0aW9uIEJ0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNlY3Rpb24iLDExKSgxLCJuZ3gtanNvbi12aWV3ZXIiLDEyKSx4dCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihoKXtyZXR1'@;
put 'cm4gQnQoYSksanQoVmUoMikub25TZWdtZW50TGlua0NsaWNrKGgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLFJlKCJqc29uIixhLnZhbHVlKSgiZXhwYW5kZWQiLGQuZXhwYW5kZWQpKCJkZXB0aCIsZC5kZXB0aCkoIl9jdXJyZW50RGVw'@;
put 'dGgiLGQuX2N1cnJlbnREZXB0aCsxKX19Y29uc3QganR0PWZ1bmN0aW9uKGMpe3JldHVyblsic2VnbWVudCIsY119LHp0dD1mdW5jdGlvbihjLGwpe3JldHVybnsic2VnbWVudC1tYWluIjohMCxleHBhbmRhYmxlOmMsZXhwYW5kZWQ6bH19O2Z1bmN0aW9uIFV0dChjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO21lKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rpb24iLDMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50b2dnbGUoZikpfSksUWUoMixOdHQsMSwwLCJkaXYiLDQpLG1lKDMsInNwYW4iLDUpLE5lKDQpLHllKCks'@;
put 'bWUoNSwic3BhbiIsNiksTmUoNiwiOiAiKSx5ZSgpLFFlKDcsVnR0LDIsMSwic3BhbiIsNykseWUoKSxRZSg4LEJ0dCwyLDQsInNlY3Rpb24iLDgpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtSZSgibmdDbGFzcyIsSjIoNixqdHQsInNlZ21lbnQtdHlwZS0iK2Eu'@;
put 'dHlwZSkpLENlKDEpLFJlKCJuZ0NsYXNzIixRMig4LHp0dCxkLmlzRXhwYW5kYWJsZShhKSxhLmV4cGFuZGVkKSksQ2UoMSksUmUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKGEpKSxDZSgyKSxvcihhLmtleSksQ2UoMyksUmUoIm5nSWYiLCFhLmV4cGFuZGVkfHwhZC5pc0V4cGFuZGFibGUoYSkp'@;
put 'LENlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5kYWJsZShhKSl9fWxldCBadHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50RGVwdGg9MCx0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcg'@;
put 'RXIsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMuc2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMuanNvbikuZm9yRWFjaChhPT57dGhpcy5zZWdtZW50cy5wdXNo'@;
put 'KHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7cmV0dXJuIm9iamVjdCI9PT1hLnR5cGV8fCJhcnJheSI9PT1h'@;
put 'LnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYoYS5leHBhbmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlwZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZhbHVlKX1vblNlZ21lbnRMaW5rQ2xpY2soYSl7dGhpcy5zZWdt'@;
put 'ZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEsZCl7Y29uc3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitkLGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2godHlwZW9mIGgudmFsdWUpe2Nhc2UibnVtYmVyIjpoLnR5cGU9'@;
put 'Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJvb2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7aC50eXBlPSJsaW5rIjticmVha31oLnR5cGU9InN0cmluZyIs'@;
put 'aC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1ZT8oaC50eXBlPSJudWxsIixoLmRlc2NyaXB0aW9uPSJudWxs'@;
put 'Iik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJheSIsaC5kZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2YgRGF0ZT9oLnR5cGU9ImRhdGUiOihoLnR5cGU9Im9iamVjdCIs'@;
put 'aC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmcoMCw3KXx8Ii8iPT09YVswXX1pc0V4cGFuZGVkKCl7cmV0dXJu'@;
put 'IHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5fY3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGgoZixfKXtsZXQgVCxXO3JldHVybiJvYmplY3QiIT10eXBlb2YgZnx8bnVsbD09PWZ8fGYg'@;
put 'aW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8ZiBpbnN0YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9mIFN0cmluZz9mOihUPWQuZ2V0KGYpLHZvaWQgMCE9PVQ/eyRyZWY6VH06KGQuc2V0KGYsXyksQXJyYXkuaXNBcnJheShmKT8o'@;
put 'Vz1bXSxmLmZvckVhY2goZnVuY3Rpb24oaWUsZ2Upe1dbZ2VdPWgoaWUsXysiWyIrZ2UrIl0iKX0pKTooVz17fSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtXW2llXT1oKGZbaWVdLF8rIlsiK0pTT04uc3RyaW5naWZ5KGllKSsiXSIpfSkpLFcpKX0oYSwiJCIpfX1yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFuZGVkIixkZXB0aDoiZGVwdGgiLF9jdXJyZW50RGVw'@;
put 'dGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNrZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LGZlYXR1cmVzOlt2YV0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsz'@;
put 'LCJuZ0NsYXNzIl0sWzMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xhc3MiLCJ0b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxk'@;
put 'cmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRoIiwic2VnbWVudExpbmtDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7'@;
put 'MSZhJiYobWUoMCwic2VjdGlvbiIsMCksUWUoMSxVdHQsOSwxMSwic2VjdGlvbiIsMSkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nRm9yT2YiLGQuc2VnbWVudHMpKX0sZGVwZW5kZW5jaWVzOlt1Yyx4cyxaaSxjXSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOy5uZ3gtanNvbi12aWV3ZXJb'@;
put 'X25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OnZhcigtLW5neC1qc29uLWZvbnQtZmFtaWx5LCBtb25vc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1uZ3gtanNvbi1mb250LXNpemUsIDFlbSk7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRp'@;
put 'dmV9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHg7bWFyZ2luOjFweCAxcHggMXB4IDEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YnJlYWstd29yZH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0Oi0xNHB4O21hcmdpbi10b3A6M3B4O2ZvbnQtc2l6ZTouOGVtO2xpbmUtaGVpZ2h0OjEuMmVtO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjb2xvcjp2YXIoLS1uZ3gtanNvbi10b2dnbGVyLCAj'@;
put 'Nzg3ODc4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2Nr'@;
put 'O2NvbnRlbnQ6IlxcMjViYSI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjFzIGVhc2UtaW59Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LWtl'@;
put 'eVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24ta2V5LCAjNEUxODdDKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21l'@;
put 'bnQtc2VwYXJhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zZXBhcmF0b3IsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdmFsdWUsICMwMDApfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNoaWxkcmVuW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXttYXJnaW4tbGVmdDoxMnB4fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1zdHJpbmdbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50'@;
put 'LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tc3RyaW5nLCAjRkY2QjZCKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNl'@;
put 'Z21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bWJlciwgIzAwOTY4OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWJvb2xlYW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltf'@;
put 'bmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYm9vbGVhbiwgI0I5MzhBNCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWRhdGVbX25nY29udGVudC0lQ09N'@;
put 'UCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZGF0ZSwgIzA1NjY4RCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFy'@;
put 'cmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWFycmF5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW9iamVjdCwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWZ1bmN0aW9uLCAj'@;
put 'OTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1u'@;
put 'Z3gtanNvbi1saW5rLCAjOUI1OUI2KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQt'@;
put 'dmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLWJnLCByZWQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0l'@;
put 'Q09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQt'@;
put 'dHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpz'@;
put 'b24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5l'@;
put 'O2N1cnNvcjpwb2ludGVyfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLnNlZ21lbnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVdID4g'@;
put 'LnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdLCAubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcn0nXX0pLGN9KSgpLFl0dD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVt'@;
put 'b2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvb119KSxjfSkoKSxXdHQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7aWYoIWEuaW5jbHVkZXMoIi8iKSlyZXR1cm4gYTtsZXQgZD0iIjtjb25zdCBoPWEuc3BsaXQoIi8iKTtmb3IobGV0IGY9MDtmPGgubGVuZ3Ro'@;
put 'O2YrKylpZigiIiE9PWhbZl0pe2NvbnN0IF89aFtmXTtkKz0iLyIrXyxoW2ZdPWA8YSBocmVmPSR7ZH0+JHtffTwvYT5gfXJldHVybiBoLmpvaW4oIi8iKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToibGlu'@;
put 'a2luemUiLHR5cGU6YyxwdXJlOiEwfSksY30pKCksR3R0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6'@;
put 'InByZXR0eWpzb24iLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7ZnVuY3Rpb24gJHR0KGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwyMiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hjKCJ2YWx1ZSIsYS52YWx1ZSksQ2UoMSksZ3IoIiAiLGEua2V5LCIgIil9fWZ1'@;
put 'bmN0aW9uIHF0dChjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGdyb3VwIiwyMCksUWUoMSwkdHQsMiwyLCJvcHRpb24iLDIxKSxiYSgyLCJrZXl2YWx1ZSIpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7UmUoImxhYmVsIixhLmtleSksQ2UoMSksUmUoIm5nRm9yT2YiLFVs'@;
put 'KDIsMixkLmNvbGxlY3Rpb25zW2Eua2V5XSkpfX1mdW5jdGlvbiBLdHQoYyxsKXsxJmMmJihtZSgwLCJwIiwyMyksTmUoMSwiIFNlbGVjdCBjb2xsZWN0aW9uIHRvIHN0YXJ0ICIpLHllKCkpfWZ1bmN0aW9uIFh0dChjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDI0KX1mdW5jdGlvbiBK'@;
put 'dHQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gUXR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saW5rc1NlYXJjaD0iIixqdChoLmxp'@;
put 'bmtzTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gZW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjUpKDEsImRpdiIsMjYpKDIsImlucHV0IiwyNywyOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxq'@;
put 'dChWZSgpLmxpbmtzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LEp0dCwxLDAsImNsci1pY29uIiwyOSksUWUoNSxRdHQsMSwwLCJjbHItaWNvbiIsMzApLHllKCkoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmxpbmtzU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB0bnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgw'@;
put 'LCJjbHItdHJlZS1ub2RlIiwzNCkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8uZW5kcG9pbnRMaW5rcykpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXty'@;
put 'ZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkubGlua09uQ2xpY2soaCkpfSkscXQoMiwiY2xyLWljb24iLDM2KSxOZSgz'@;
put 'KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLGpjKCIgIixhLm1ldGhvZCwiICIsYS5yZWwsIiAiKX19ZnVuY3Rpb24gbm50KGMs'@;
put 'bCl7aWYoMSZjJiYoQnIoMCksUWUoMSx0bnQsNCw0LCJjbHItdHJlZS1ub2RlIiwzMyksVXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBybnQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gaW50'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5pdGVtc1NlYXJjaD0iIixqdChoLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gb250KGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjUpKDEsImRpdiIsMjYpKDIsImlucHV0IiwzNywzOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLml0ZW1zU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBCdChhKSxqdChWZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LHJudCwxLDAsImNsci1pY29uIiwyOSksUWUoNSxpbnQsMSwwLCJjbHItaWNvbiIsMzApLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLml0ZW1z'@;
put 'U2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBzbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzNCkseHQoImNsaWNrIixmdW5jdGlvbihoKXtC'@;
put 'dChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8uZW5kcG9pbnRJdGVtcykpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxt'@;
put 'ZSgxLCJwIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuaXRlbU9uQ2xpY2soaCkpfSkscXQoMiwiY2xyLWljb24iLDM2KSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O1JlKCJj'@;
put 'bHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLGdyKCIgIixhLm5hbWV8fGEuaWQsIiAiKX19ZnVuY3Rpb24gYW50KGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxzbnQsNCwzLCJjbHItdHJlZS1ub2RlIiwzMyks'@;
put 'VXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBsbnQoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiwzOSl9ZnVuY3Rpb24gY250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwibmd4LWpzb24tdmlld2Vy'@;
put 'Iiw0OSkseHQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSx5ZSgpfTImYyYmUmUoImpzb24iLFZlKDMpLmVuZHBvaW50SnNvbikoImV4cGFuZGVkIiwhMSl9ZnVuY3Rpb24gdW50KGMsbCl7aWYoMSZj'@;
put 'JiYoQnIoMCksTmUoMSksYmEoMiwicHJldHR5anNvbiIpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxncigiXG4gICAgICAgICAgICAiLFVsKDIsMSxhLmVuZHBvaW50SnNvbiksIlxuICAgICAgICAgICIpfX1mdW5jdGlvbiBkbnQoYyxsKXtpZigxJmMmJihCcigwKSxOZSgxLCJc'@;
put 'biAgICAgICAgICAiKSxRZSgyLGNudCwxLDIsIm5neC1qc29uLXZpZXdlciIsNDgpLE5lKDMsIlxuICAgICAgICAgICIpLFFlKDQsdW50LDMsMywibmctY29udGFpbmVyIiwxOSksTmUoNSwiXG4gICAgICAgICIpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgibmdJZiIsIWEu'@;
put 'cmF3SnNvbiksQ2UoMiksUmUoIm5nSWYiLGEucmF3SnNvbil9fWZ1bmN0aW9uIGhudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImRpdiIsNDApKDIsInNwYW4iLDQxKSxOZSgzLCIgR0VUICIpLG1lKDQsInAiLDQyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVy'@;
put 'biBCdChhKSxqdChWZSgpLm9uQnJlYWRjdW1zQ2xpY2soaCkpfSksYmEoNSwibGlua2luemUiKSx5ZSgpLG1lKDYsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5jb3B5QnJlYWRjcnVtcygpKX0pLHF0KDcsImNsci1pY29uIiwxNSkseWUo'@;
put 'KSgpLG1lKDgsImRpdiIsNDMpKDksImNsci1pbnB1dC1jb250YWluZXIiLDEyKSgxMCwibGFiZWwiKSxOZSgxMSwiU3RhcnQiKSx5ZSgpLG1lKDEyLCJpbnB1dCIsNDQpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5lbmRwb2ludC5zdGFydD1o'@;
put 'KX0pLHllKCkoKSxtZSgxMywiY2xyLWlucHV0LWNvbnRhaW5lciIsMTIpKDE0LCJsYWJlbCIpLE5lKDE1LCJMaW1pdCIpLHllKCksbWUoMTYsImlucHV0Iiw0NCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmVuZHBvaW50LmxpbWl0PWgpfSks'@;
put 'eWUoKSgpLG1lKDE3LCJidXR0b24iLDQ1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLHF0KDE4LCJjbHItaWNvbiIsNDYpLHllKCkoKSgpLG1lKDE5LCJwcmUiLDQ3KSxOZSgyMCwiICAgICAgICAiKSxRZSgyMSxkbnQs'@;
put 'NiwyLCJuZy1jb250YWluZXIiLDE5KSxOZSgyMiwiXG4gICAgICAiKSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNCksUmUoImlubmVySFRNTCIsVWwoNSw3LGEuZW5kcG9pbnQudXJsKSxxMiksQ2UoOCksUmUoIm5nTW9kZWwiLGEuZW5kcG9pbnQuc3RhcnQpKCJkaXNhYmxl'@;
put 'ZCIsdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksQ2UoNCksUmUoIm5nTW9kZWwiLGEuZW5kcG9pbnQubGltaXQpKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksQ2UoMSksUmUoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LmxpbWl0JiZ2b2lkIDA9PT1hLmVu'@;
put 'ZHBvaW50LnN0YXJ0KSxDZSg0KSxSZSgibmdJZiIsYS5lbmRwb2ludEpzb24pfX1sZXQgZm50PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNWaXlhU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2'@;
put 'aWNlPWYsdGhpcy5jb2xsZWN0aW9ucz17fSx0aGlzLmNvbGxlY3Rpb249IiIsdGhpcy5lbmRwb2ludExpbmtzPVtdLHRoaXMuZW5kcG9pbnRJdGVtcz1bXSx0aGlzLmVuZHBvaW50PXt1cmw6IiIsc3RhcnQ6LTEsbGltaXQ6LTF9LHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuY29sbGVj'@;
put 'dGlvbkxvYWRpbmc9ITEsdGhpcy5yYXdKc29uPSExLHRoaXMubGlua3NTZWFyY2g9IiIsdGhpcy5pdGVtc1NlYXJjaD0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZ31uZ09uSW5pdCgpe3RoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmln'@;
put 'KCksdGhpcy5jb2xsZWN0aW9ucz10aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEFsbENvbGxlY3Rpb25zKCl9bGlua3NMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRMaW5rcyx0aGlzLmxpbmtzU2VhcmNoLCJyZWwiKSxHbi52aXlh'@;
put 'QXBpLmxpbmtzc1NlYXJjaD10aGlzLmxpbmtzU2VhcmNofWl0ZW1zTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50SXRlbXMsdGhpcy5pdGVtc1NlYXJjaCwibmFtZSIpLEduLnZpeWFBcGkuaXRlbXNTZWFyY2g9dGhpcy5pdGVt'@;
put 'c1NlYXJjaH1saW5rT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5ocmVmKX1pdGVtT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5saW5rc1swXS5ocmVmKX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyho'@;
put 'LGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX11cGRhdGVTZWxlY3RlZENvbGxlY3Rpb24oKXtHbi52aXlhQXBpLnNlbGVjdGVkQ29sbGVjdGlvbj10aGlzLmNvbGxl'@;
put 'Y3Rpb24sdGhpcy5lbmRwb2ludC51cmw9dGhpcy5jb2xsZWN0aW9uLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeUNvbGxlY3Rpb24odGhpcy5jb2xsZWN0aW9uKS5zdWJzY3JpYmUoYT0+e3RoaXMuZW5kcG9pbnRMaW5rcz1hLmxpbmtzLHRoaXMu'@;
put 'ZW5kcG9pbnRJdGVtcz1hLml0ZW1zP2EuaXRlbXM6W10sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLmVuZHBvaW50SnNvbj1hLHRoaXMuZW5kcG9pbnQuc3RhcnQ9YS5zdGFydCx0aGlzLmVuZHBvaW50LmxpbWl0PWEubGltaXR9LGE9Pnt0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSEx'@;
put 'O2xldCBkPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2EubWVzc2FnZSYmKGQ9YS5tZXNzYWdlKSxhLmVycm9yJiYoYS5lcnJvci5tZXNzYWdlJiYoZD1hLmVycm9yLm1lc3NhZ2UpLGEuZXJyb3IucmVtZWRpYXRpb24mJihkPWAke2R9XG4ke2EuZXJyb3IucmVtZWRp'@;
put 'YXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsZCxudWxsLCJIVFRQIEVycm9yIil9KX1vbkpzb25MaW5rQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEpfW9uSnNvbkNsaWNrKGEpe2lmKGEucHJldmVudERlZmF1bHQoKSwiQSI9PT1hLnNyY0VsZW1lbnQudGFn'@;
put 'TmFtZSl7Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfX1vbkJyZWFkY3Vtc0NsaWNrKGEpe2lmKGEucHJldmVudERlZmF1bHQoKSwhYS5zcmNFbGVtZW50LmhyZWYpcmV0dXJuO2NvbnN0IGQ9YS5zcmNFbGVtZW50'@;
put 'LmhyZWYuc3BsaXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChkKX1jb3B5SnNvbigpe3RoaXMuZW5kcG9pbnRKc29uJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLmVuZHBvaW50SnNvbixudWxsLDIpKX1jb3B5QnJlYWRjcnVt'@;
put 'cygpe3RoaXMuZW5kcG9pbnQmJnRoaXMuZW5kcG9pbnQudXJsJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmVuZHBvaW50LnVybCl9YXBwbHlRdWVyeVBhcmFtcygpe2NvbnN0IGE9dGhpcy5lbmRwb2ludC5zdGFydCxkPXRoaXMuZW5kcG9pbnQubGltaXQsaD1gPyR7dm9p'@;
put 'ZCAwIT09YT8ic3RhcnQ9IithOiIifSR7dm9pZCAwIT09ZD8iJmxpbWl0PSIrZDoiIn1gLGY9YCR7dGhpcy5lbmRwb2ludC51cmwuc3BsaXQoIj8iKVswXX0ke2h9YDt0aGlzLmxvYWRVcmwoZil9bG9hZFVybChhKXt0aGlzLmVuZHBvaW50TG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNl'@;
put 'LmdldEJ5VXJsKGEpLnN1YnNjcmliZShkPT57dGhpcy5lbmRwb2ludExpbmtzPWQubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWQuaXRlbXM/ZC5pdGVtczpbXSx0aGlzLmVuZHBvaW50SnNvbj1kLHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuZW5kcG9pbnQudXJsPWEsdGhpcy5lbmRw'@;
put 'b2ludC5zdGFydD1kLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9ZC5saW1pdH0sZD0+e3RoaXMuZW5kcG9pbnRMb2FkaW5nPSExO2xldCBoPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2QubWVzc2FnZSYmKGg9ZC5tZXNzYWdlKSxkLmVycm9yJiYoZC5lcnJvci5t'@;
put 'ZXNzYWdlJiYoaD1kLmVycm9yLm1lc3NhZ2UpLGQuZXJyb3IucmVtZWRpYXRpb24mJihoPWAke2h9XG4ke2QuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsaCxudWxsLCJIVFRQIEVycm9yIil9KX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQWMpLHR0KEh0dCksdHQob2EpLHR0KHZsKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aXlhLWFwaS1leHBsb3JlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MzMs'@;
put 'dmFyczoxMyxjb25zdHM6W1sxLCJhcGktY29sbGVjdGlvbi1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImNoYW5nZSJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAw'@;
put 'IHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJd'@;
put 'LFsxLCJjYXJkIiwiaC0xMDAiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0aXZlIl0sWzEsImpzb24tdG9nZ2xlIiwi'@;
put 'ZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayJdLFsi'@;
put 'c2hhcGUiLCJjb3B5Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFiZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsxLCJ3LTEwMCIsInRl'@;
put 'eHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBsaW5rcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIs'@;
put 'Im5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGlua3NUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0s'@;
put 'WzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxb'@;
put 'InNoYXBlIiwiYmxvY2siXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaEl0ZW1zVHJlZUlucHV0IiwiIl0sWyJj'@;
put 'bHJTbWFsbCIsIiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJlbmRwb2ludC1icmVhZGNydW1zIiwzLCJpbm5l'@;
put 'ckhUTUwiLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwicXVlcnktcGFyYW1zIl0sWyJjbHJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIs'@;
put 'ImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwianNvbi1hcmVhIl0sWyJjbGFzcyIsImQtYmxvY2siLDMsImpzb24iLCJleHBhbmRlZCIsInNlZ21lbnRMaW5rQ2xpY2tlZCIsNCwibmdJZiJdLFsxLCJkLWJsb2NrIiwzLCJqc29u'@;
put 'IiwiZXhwYW5kZWQiLCJzZWdtZW50TGlua0NsaWNrZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMCkoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLE5lKDQsIkFQSSBDb2xsZWN0aW9uIikseWUoKSxtZSg1'@;
put 'LCJzZWxlY3QiLDEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5jb2xsZWN0aW9uPWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpfSksUWUoNixxdHQsMyw0LCJvcHRncm91cCIsMiksYmEoNywia2V5dmFs'@;
put 'dWUiKSx5ZSgpKCkoKSxRZSg4LEt0dCwyLDAsInAiLDMpLG1lKDksImRpdiIsNCksUWUoMTAsWHR0LDEsMCwiY2xyLXNwaW5uZXIiLDUpLHllKCksbWUoMTEsImNsci10cmVlIiksUWUoMTIsZW50LDYsMywiY2xyLXRyZWUtbm9kZSIsNiksUWUoMTMsbm50LDIsMSwibmctY29udGFpbmVyIiw3'@;
put 'KSx5ZSgpLG1lKDE0LCJjbHItdHJlZSIpLFFlKDE1LG9udCw2LDMsImNsci10cmVlLW5vZGUiLDYpLFFlKDE2LGFudCwyLDEsIm5nLWNvbnRhaW5lciIsNykseWUoKSgpLG1lKDE3LCJkaXYiLDgpKDE4LCJkaXYiLDkpKDE5LCJkaXYiLDEwKSgyMCwiZGl2IiwxMSkoMjEsImNsci10b2dnbGUt'@;
put 'Y29udGFpbmVyIiwxMikoMjIsImNsci10b2dnbGUtd3JhcHBlciIpKDIzLCJpbnB1dCIsMTMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5yYXdKc29uPWZ9KSx5ZSgpLG1lKDI0LCJsYWJlbCIpLE5lKDI1LCJSQVcgSnNvbiIpLHllKCkoKSgpLG1lKDI2LCJidXR0'@;
put 'b24iLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY29weUpzb24oKX0pLHF0KDI3LCJjbHItaWNvbiIsMTUpLHllKCkoKSxtZSgyOCwiaDQiLDE2KSxOZSgyOSwiIEFQSSBFeHBsb3JlciAiKSxRZSgzMCxsbnQsMSwwLCJjbHItc3Bpbm5lciIsMTcpLHllKCkoKSxxdCgzMSwi'@;
put 'aHIiLDE4KSxRZSgzMixobnQsMjMsOSwibmctY29udGFpbmVyIiwxOSkseWUoKSgpKSwyJmEmJihDZSg1KSxSZSgibmdNb2RlbCIsZC5jb2xsZWN0aW9uKSxDZSgxKSxSZSgibmdGb3JPZiIsVWwoNywxMSxkLmNvbGxlY3Rpb25zKSksQ2UoMiksUmUoIm5nSWYiLGQuZW5kcG9pbnRMaW5rcy5s'@;
put 'ZW5ndGg8MSYmIWQuY29sbGVjdGlvbkxvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmNvbGxlY3Rpb25Mb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5lbmRwb2ludExpbmtzLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5lbmRwb2ludExpbmtzKSxDZSgyKSxSZSgibmdJZiIsZC5l'@;
put 'bmRwb2ludEl0ZW1zLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5lbmRwb2ludEl0ZW1zKSxDZSg3KSxSZSgibmdNb2RlbCIsZC5yYXdKc29uKSxDZSg3KSxSZSgibmdJZiIsZC5lbmRwb2ludExvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmNvbGxlY3Rpb24ubGVuZ3RoPjApKX0s'@;
put 'ZGVwZW5kZW5jaWVzOlt4cyxaaSxsMSxjMSxXYSxhRSxTMCxNMCxCcyxPcyxkZCxnMSxrYSxadSxVcyxEMCxEOCxUMCxmMSxqRixOOCxIOCx1MixuMyxadHQsZHgsV3R0LEd0dF0sc3R5bGVzOlsiLmFwaS1jb2xsZWN0aW9uLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVm'@;
put 'dDoxNXB4O21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1ib3R0b206MTBweH0uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30uanNvbi1hcmVhW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgICAgYXt0ZXh0LWRlY29yYXRpb246bm9uZX0uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgICA+bmd4LWpzb24tdmlld2Vye2hlaWdodDoxMDAlfS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgID5uZ3gtanNvbi12aWV3ZXI+Lm5neC1qc29uLXZpZXdl'@;
put 'cntvdmVyZmxvdzphdXRvfS5qc29uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O21hcmdpbjowfS5lbmRwb2ludC1icmVhZGNydW1zW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDAgMTBweH0ucXVlcnktcGFyYW1zW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo3MHB4fSJdfSksY30pKCk7Y29uc3QgcG50PW5ldyBNaSgiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306'@;
put 'e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnt9fSk7bGV0IGdudD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3IGJlLHRoaXMuY29weVJlc3BvbnNlJD10'@;
put 'aGlzLmNvcHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNvbmZpZ3VyZShhKXt0aGlzLmNvbmZpZz1hfWNvcHkoYSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmF9KTtjb25z'@;
put 'dCBkPXRoaXMuY29weUZyb21Db250ZW50KGEpO3JldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2UoZD97Y29udGVudDphLGlzU3VjY2VzczpkfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBw'@;
put 'b3J0ZWQmJiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNvcHkiKSYmISF0aGlzLndpbmRvd31pc1RhcmdldFZhbGlkKGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoYS5oYXNBdHRy'@;
put 'aWJ1dGUoImRpc2FibGVkIikpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4gUGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5w'@;
put 'dXQgb3IgdGV4dGFyZWEiKX1jb3B5RnJvbUlucHV0RWxlbWVudChhLGQ9ITApe3RyeXt0aGlzLnNlbGVjdFRhcmdldChhKTtjb25zdCBoPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2luZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nl'@;
put 'c3NJbklFMTEoKX1jYXRjaHtyZXR1cm4hMX19aXNDb3B5U3VjY2Vzc0luSUUxMSgpe2NvbnN0IGE9dGhpcy53aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoYSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7'@;
put 'aWYodGhpcy50ZW1wVGV4dEFyZWEmJiFkLmNvbnRhaW5zKHRoaXMudGVtcFRleHRBcmVhKSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0'@;
put 'QXJlYSh0aGlzLmRvY3VtZW50LHRoaXMud2luZG93KTt0cnl7ZC5hcHBlbmRDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9YTtjb25zdCBoPXRo'@;
put 'aXMuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50ZW1wVGV4dEFyZWEsITEpO3JldHVybiB0aGlzLmNvbmZpZy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRlc3Ryb3koYT10aGlzLmRvY3VtZW50LmJv'@;
put 'ZHkpe3RoaXMudGVtcFRleHRBcmVhJiYoYS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSksdGhpcy50ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEuc2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEudmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxl'@;
put 'bmd0aH1jb3B5VGV4dCgpe3JldHVybiB0aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iil9Y2xlYXJTZWxlY3Rpb24oYSxkKXthJiZhLmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGEsZCl7Y29uc3QgaD0icnRsIj09'@;
put 'PWEuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7bGV0IGY7cmV0dXJuIGY9YS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYuc3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9IjAiLGYuc3R5bGUubWFyZ2luPSIwIixm'@;
put 'LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZVtoPyJyaWdodCI6ImxlZnQiXT0iLTk5OTlweCIsZi5zdHlsZS50b3A9KGQucGFnZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5'@;
put 'UmVzcG9uc2UoYSl7dGhpcy5jb3B5U3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoPjAmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVwb25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihMcyksYXIocG50LDgpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxtbnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlz'@;
put 'Lm5nWm9uZT1hLHRoaXMuaG9zdD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsaXBib2FyZFNydj1mLHRoaXMuY2JPblN1Y2Nlc3M9bmV3IEVyLHRoaXMuY2JPbkVycm9yPW5ldyBFcix0aGlzLm9uQ2xpY2s9Xz0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxt'@;
put 'JiZ0aGlzLmNsaXBib2FyZFNydi5pc1RhcmdldFZhbGlkKHRoaXMudGFyZ2V0RWxtKT90aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsXyk6dGhpcy5jYkNvbnRlbnQmJnRo'@;
put 'aXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tQ29udGVudCh0aGlzLmNiQ29udGVudCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsXyk6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLF8pfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVB'@;
put 'bmd1bGFyKCgpPT57dGhpcy5jbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBi'@;
put 'b2FyZFNydi5kZXN0cm95KHRoaXMuY29udGFpbmVyKX1oYW5kbGVSZXN1bHQoYSxkLGgpe2xldCBmPXtpc1N1Y2Nlc3M6YSxjb250ZW50OmQsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5y'@;
put 'dW4oKCk9Pnt0aGlzLmNiT25TdWNjZXNzLmVtaXQoZil9KTp0aGlzLmNiT25FcnJvci5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoZil9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5vKSx0dChOaSksdHQoRm8pLHR0KGdudCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06WyJuZ3hDbGlwYm9hcmQiLCJ0YXJnZXRFbG0iXSxj'@;
put 'b250YWluZXI6ImNvbnRhaW5lciIsY2JDb250ZW50OiJjYkNvbnRlbnQiLGNiU3VjY2Vzc01zZzoiY2JTdWNjZXNzTXNnIn0sb3V0cHV0czp7Y2JPblN1Y2Nlc3M6ImNiT25TdWNjZXNzIixjYk9uRXJyb3I6ImNiT25FcnJvciJ9fSksY30pKCksdm50PSgoKT0+e2NsYXNzIGN7fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgpO3ZhciBfbnQ9Rig1MTcxNCk7bGV0IGJudD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLC4uLmQpe2NvbnN0'@;
put 'IGg9cGFyc2VJbnQoZFswXSl8fDIsZj0ibnVtYmVyIiE9dHlwZW9mIGE/cGFyc2VJbnQoYSk6YTtyZXR1cm4oMCxfbnQuUikoZixoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToiY29udmVydFNpemUiLHR5'@;
put 'cGU6YyxwdXJlOiEwfSksY30pKCk7Y29uc3QgeW50PVsicXVlcnlGaWx0ZXIiXTtmdW5jdGlvbiB3bnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDUwKSxxdCgxLCJjbHItc3Bpbm5lciIsNTEpLHllKCkpfWZ1bmN0aW9uIENudChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDU4KX1mdW5jdGlv'@;
put 'biBTbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsNTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixqdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIE1u'@;
put 'dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDUyKSgxLCJkaXYiLDUzKSgyLCJpbnB1dCIsNTQsNTUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJpZXNTZWFyY2g9aCl9KSgia2V5dXAiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LENudCwxLDAsImNsci1pY29uIiw1NiksUWUoNSxTbnQsMSwwLCJjbHItaWNvbiIsNTcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVs'@;
put 'IixkLmxpYnJhcmllc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24geG50KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNTgpfWZ1bmN0aW9uIEVudChjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1WbigpO21lKDAsImNsci1pY29uIiw1OSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKDIpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwidGFibGVzIikp'@;
put 'fSkseWUoKX19ZnVuY3Rpb24ga250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNTIpKDEsImRpdiIsNTMpKDIsImlucHV0Iiw2NCw2NSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS4kaW1wbGljaXQu'@;
put 'c2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSx5ZSgpLFFlKDQseG50LDEsMCwiY2xyLWljb24iLDU2KSxRZSg1LEVudCwxLDAsImNsci1pY29u'@;
put 'Iiw1NykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxSZSgiaWQiLCJzZWFyY2hfIitkLkxJQlJBUllSRUYpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lm'@;
put 'IixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gQW50KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNzMpfWZ1bmN0aW9uIFRudChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDc0KX1mdW5jdGlvbiBEbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDY5KSx4'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLm5nVmFyLGY9VmUoKS4kaW1wbGljaXQsXz1WZSgyKS4kaW1wbGljaXQsVD1WZSgpO3JldHVybiBqdChoPyIiOlQub25UYWJsZUNsaWNrKGYsXykpfSksQnIoMSw3MCksUWUoMixBbnQsMSwwLCJjbHItaWNvbiIsNzEpLFFl'@;
put 'KDMsVG50LDEsMCwiY2xyLWljb24iLDcyKSxVcigpLE5lKDQpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkubmdWYXIsZD1WZSgpLiRpbXBsaWNpdCxoPVZlKDIpLiRpbXBsaWNpdCxmPVZlKCk7ZHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgidGFibGUtYWN0aXZlIixmLmxpYlRhYkFjdGl2'@;
put 'ZShoLkxJQlJBUllSRUYsZCkpLENlKDEpLFJlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCEwKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMSksQ2UoMSksZ3IoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gSW50'@;
put 'KGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLHllKCkpfWZ1bmN0aW9uIExudChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc1KSxRZSgxLEludCwy'@;
put 'LDAsInNwYW4iLDM4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcjtDZSgxKSxSZSgibmdJZiIsYSl9fWZ1bmN0aW9uIFJudChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwIiksUWUoMSxEbnQsNSw4LCJidXR0b24iLDY3KSxRZSgyLExudCwyLDEsImNsci10b29sdGlwLWNv'@;
put 'bnRlbnQiLDY4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEubGVuZ3RoPjApfX1mdW5jdGlvbiBPbnQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiksUWUoMSxSbnQsMywxLCJjbHItdG9vbHRpcCIsNjYpLHllKCkpLDImYyl7'@;
put 'Y29uc3QgYT1sLmluZGV4LGQ9VmUoMyk7Q2UoMSksUmUoIm5nVmFyIixhKzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBQbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2MSkseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwi'@;
put 'cCIsNjIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLGp0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZUkVGLGgpKX0pLHF0KDIsImNsci1pY29uIiw2MyksTmUoMykseWUoKSxRZSg0'@;
put 'LGtudCw2LDQsImNsci10cmVlLW5vZGUiLDIpLFFlKDUsT250LDIsMSwiY2xyLXRyZWUtbm9kZSIsMykseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7ZHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGlu'@;
put 'ZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLGdyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVzKSxDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBGbnQoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLFBudCw2LDcs'@;
put 'ImNsci10cmVlLW5vZGUiLDYwKSxVcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBIbnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDc2KSgxLCJzcGFuIiw3NyksTmUoMiwiIExvYWRpbmcuLi4g'@;
put 'IikseWUoKSgpKX1mdW5jdGlvbiBObnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSgyLCJkaXYiLDgwKSgzLCJkaXYiLDgxKSg0LCJidXR0b24iLDgyKSxxdCg1LCJjbHItaWNvbiIsODMpLHllKCksbWUoNiwiaDMiLDQzKSxOZSg3LCJFcnJv'@;
put 'ciIpLHllKCkoKSxtZSg4LCJkaXYiLDEwKSg5LCJwIiksTmUoMTAsIllvdSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVzZXMiKSx5ZSgpKCksbWUoMTEsImRpdiIsMjEpKDEyLCJidXR0b24iLDg0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubnVsbFZhcmlh'@;
put 'Ymxlcz0hMSl9KSxOZSgxMywiIE9rICIpLHllKCkoKSgpKCkoKX19ZnVuY3Rpb24gVm50KGMsbCl7MSZjJiZxdCgwLCJkaXYiLDg1KX1mdW5jdGlvbiBCbnQoYyxsKXsxJmMmJnF0KDAsImFwcC1xdWVyeSIsbnVsbCw4Nil9ZnVuY3Rpb24gam50KGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw4Nyko'@;
put 'MSwic3BhbiIsODgpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCksbWUoMywiZGl2IikoNCwiaDQiKSxOZSg1LCJMb2FkaW5nIHRhYmxlIHZpZXdlciIpLHllKCkoKSgpKX1mdW5jdGlvbiB6bnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTExKSx4dCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7QnQoYSksVmUoKTtjb25zdCBoPSRpKDUpO3JldHVybiBqdChWZSgyKS5zZWFyY2hUYWJsZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiBVbnQoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMTIpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIFpudChjLGwp'@;
put 'ezEmYyYmcXQoMCwiY2xyLWljb24iLDExMyl9ZnVuY3Rpb24gWW50KGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLGJhKDIsInRob3VzYW5kU2VwYXJhdG9yIikseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpO0NlKDEpLHc1KCIgKCIsTTUoMiw0LGEubnVtYmVyT2ZSb3dzLCIsIiks'@;
put 'IiAiLDE9PT1hLm51bWJlck9mUm93cz8icm93Ijoicm93cyIsIiwgIixhLmZpbHRlckNvbHMubGVuZ3RoLCIiLDE9PT1hLmZpbHRlckNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBXbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJoMyIsMTE0KSxO'@;
put 'ZSgxKSxRZSgyLFludCwzLDcsInNwYW4iLDM4KSxtZSgzLCJjbHItaWNvbiIsMTE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnJlbG9hZFRhYmxlRGF0YSgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksZ3IoIiAiLG51bGw9PWEu'@;
put 'dGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5yZXBsYWNlKCItRkMiLCIiKSwiICIpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09YS5udW1iZXJPZlJvd3MpfX1mdW5jdGlvbiBHbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEyMSkseHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBCdChhKSxqdChWZSg1KS5lZGl0VGFibGUoKSl9KSxxdCgxLCJjbHItaWNvbiIsMTI4KSxtZSgyLCJzcGFuIiksTmUoMywiRWRpdCIpLHllKCkoKX19ZnVuY3Rpb24gJG50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwxMjEpLHh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNSkuZ29Ub0xpbmVhZ2UoKSl9KSxxdCgxLCJjbHItaWNvbiIsMTI5KSxtZSgyLCJzcGFuIiksTmUoMywiTGluZWFnZSIpLHllKCkoKX19ZnVuY3Rpb24gcW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bk'@;
put 'b3duLW1lbnUiLDEyMCkoMSwiYnV0dG9uIiwxMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkubmV3Vmlld2JveCgpKX0pLHF0KDIsImNsci1pY29uIiwxMjIpLG1lKDMsInNwYW4iKSxOZSg0LCJWaWV3Ym94ZXMiKSx5ZSgpKCksUWUoNSxHbnQsNCwwLCJi'@;
put 'dXR0b24iLDEyMyksUWUoNiwkbnQsNCwwLCJidXR0b24iLDEyMyksbWUoNywiYnV0dG9uIiwxMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkub3BlblFiKCkpfSkscXQoOCwiY2xyLWljb24iLDEyNSksbWUoOSwic3BhbiIpLE5lKDEwLCJGaWx0ZXIiKSx5'@;
put 'ZSgpKCksbWUoMTEsImJ1dHRvbiIsMTIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLm9wZW5Eb3dubG9hZD0hMCl9KSxxdCgxMiwiY2xyLWljb24iLDEyNiksbWUoMTMsInNwYW4iKSxOZSgxNCwiRG93bmxvYWQiKSx5ZSgpKCksbWUoMTUsImJ1dHRvbiIs'@;
put 'MTIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnNob3dXZWJRdWVyeSgpKX0pLHF0KDE2LCJjbHItaWNvbiIsMTI3KSxtZSgxNywic3BhbiIpLE5lKDE4LCJXZWIgUXVlcnkgVVJMIikseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDQpO0NlKDUpLFJl'@;
put 'KCJuZ0lmIixhLnRhYmxlRWRpdEV4aXN0cygpKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZXVyaSl9fWZ1bmN0aW9uIEtudChjLGwpezEmYyYmKG1lKDAsImNsci1kcm9wZG93biIsMTE2KSgxLCJidXR0b24iLDExNykscXQoMiwiY2xyLWljb24iLDExOCksTmUoMywiIG9wdGlvbnMgIikseWUo'@;
put 'KSxRZSg0LHFudCwxOSwyLCJjbHItZHJvcGRvd24tbWVudSIsMTE5KSx5ZSgpKSwyJmMmJlJlKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApfWZ1bmN0aW9uIFhudChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTMwKSgxLCJzcGFuIiksTmUoMiwiRklMVEVSIDogIiksbWUoMywiYiIp'@;
put 'LE5lKDQpLHllKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoNCksb3IoYS5xdWVyeVRleHQpfX1jb25zdCBKbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bIiIsIiAiXX07ZnVuY3Rpb24gUW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw5NSkoMSwic2VjdGlvbiIsOTYp'@;
put 'KDIsImZvcm0iLDk3KSgzLCJkaXYiLDk4KSg0LCJpbnB1dCIsOTksMTAwKSx4dCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD0kaSg1KTtyZXR1cm4ganQoVmUoMikuc2VhcmNoVGFibGUoaCkpfSkseWUoKSxRZSg2LHpudCwxLDAsImNsci1pY29uIiwxMDEpLFFlKDcs'@;
put 'VW50LDIsMCwic3BhbiIsMTAyKSx5ZSgpLG1lKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEwLCJpbnB1dCIsMTAzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnNlYXJjaE51bWVyaWM9'@;
put 'aCl9KSx5ZSgpLG1lKDExLCJsYWJlbCIpLE5lKDEyLCJOdW1lcmljIikseWUoKSgpKCkoKSgpLG1lKDEzLCJkaXYiLDEwNCkoMTQsImNsci1pY29uIiwxMDUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZGF0YXNldEluZm89ITApfSkseWUoKSxRZSgxNSxa'@;
put 'bnQsMSwwLCJjbHItaWNvbiIsMTA2KSxRZSgxNixXbnQsNCwyLCJoMyIsMTA3KSx5ZSgpLG1lKDE3LCJkaXYiLDEwOCksUWUoMTgsS250LDUsMSwiY2xyLWRyb3Bkb3duIiwxMDkpLHllKCksUWUoMTksWG50LDUsMSwiZGl2IiwxMTApLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDQp'@;
put 'LFJlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxDZSgyKSxSZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksQ2UoMyksUmUoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksQ2UoNSksUmUoIm5nSWYiLG51'@;
put 'bGw9PWEudGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5pbmNsdWRlcygiLUZDIikpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksQ2UoMiksUmUoIm5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJvcnRBY3RpdmUpLENlKDEpLFJlKCJuZ0lm'@;
put 'IiwiMT0xIiE9PWEucXVlcnlUZXh0JiYhJHMoOCxKbnQpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlvbiBlcnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDEzMSkscXQoMSwiY2xyLWljb24iLDEzMiksbWUoMiwiaDMiLDEzMyksTmUoMywiUGxlYXNlIHNl'@;
put 'bGVjdCBhIGxpYnJhcnkiKSx5ZSgpKCkpfWZ1bmN0aW9uIHRydChjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDUxKX1mdW5jdGlvbiBucnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE0MSkscXQoMSwiY2xyLWljb24iLDE0MiksbWUoMiwiaDMiLDEzMyksTmUoMywiUGxlYXNlIHNlbGVj'@;
put 'dCBhIHRhYmxlIikseWUoKSgpKX1mdW5jdGlvbiBycnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJwIiwxNDUpLE5lKDEsIiBObyBsaWJyYXJ5IGluZm8gZm91bmQuIENsaWNrICIpLG1lKDIsImNsci1pY29uIiwxNDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQo'@;
put 'YSksanQoVmUoNCkucmVsb2FkTGliSW5mbygpKX0pLHllKCksTmUoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAiKSx5ZSgpfX1mdW5jdGlvbiBpcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIkVOR0lORToiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHll'@;
put 'KCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkVOR0lORToiIiwiICIpfX1mdW5jdGlvbiBvcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIkxJQklEOiIpLHllKCksbWUoMywidGQiLDE0OCks'@;
put 'TmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCSUQ6IiIsIiAiKX19ZnVuY3Rpb24gc3J0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgyLCJMSUJOQU1FOiIpLHllKCksbWUoMywi'@;
put 'dGQiLDE0OCksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCTkFNRToiIiwiICIpfX1mdW5jdGlvbiBhcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIkxJQlNJWkU6Iiks'@;
put 'eWUoKSxtZSgzLCJ0ZCIsMTQ4KSxOZSg0KSxiYSg1LCJjb252ZXJ0U2l6ZSIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/VWwoNSwxLGEubGliaW5mb1swXS5MSUJTSVpFKToiIiwiICIpfX1mdW5jdGlvbiBscnQoYyxsKXtpZigxJmMmJiht'@;
put 'ZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIk9XTkVSUzoiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLk9XTkVSUzoiIiwiICIpfX1mdW5jdGlvbiBjcnQoYyxsKXtp'@;
put 'ZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIlBBVEhTOiIpLHllKCksbWUoMywidGQiLDE0OCksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEFUSFM6IiIsIiAiKX19ZnVuY3Rpb24gdXJ0'@;
put 'KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgyLCJQRVJNUzoiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlBFUk1TOiIiLCIgIil9fWZ1bmN0'@;
put 'aW9uIGRydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE0NyksTmUoMiwiU0NIRU1BUzoiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlNDSEVNQVM6IiIs'@;
put 'IiAiKX19ZnVuY3Rpb24gaHJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgyLCJUQUJMRV9DTlQ6IikseWUoKSxtZSgzLCJ0ZCIsMTQ4KSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1sw'@;
put 'XS5UQUJMRV9DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gZnJ0KGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwidGFibGUiKSxRZSgyLGlydCw1LDEsInRyIiwzOCksUWUoMyxvcnQsNSwxLCJ0ciIsMzgpLFFlKDQsc3J0LDUsMSwidHIiLDM4KSxRZSg1LGFydCw2LDMsInRyIiwzOCksUWUoNixscnQs'@;
put 'NSwxLCJ0ciIsMzgpLFFlKDcsY3J0LDUsMSwidHIiLDM4KSxRZSg4LHVydCw1LDEsInRyIiwzOCksUWUoOSxkcnQsNSwxLCJ0ciIsMzgpLFFlKDEwLGhydCw1LDEsInRyIiwzOCkseWUoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoMiksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBd'@;
put 'LkVOR0lORSksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQklEKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCTkFNRSksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uTElCU0laRSksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJp'@;
put 'bmZvWzBdLk9XTkVSUyksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBBVEhTKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEVSTVMpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5TQ0hFTUFTKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEu'@;
put 'bGliaW5mb1swXS5UQUJMRV9DTlQpfX1mdW5jdGlvbiBwcnQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE0MyksUWUoMSxycnQsNCwwLCJwIiwxNDQpLFFlKDIsZnJ0LDExLDksIm5nLWNvbnRhaW5lciIsMzgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5s'@;
put 'aWJpbmZvLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aD4wKX19ZnVuY3Rpb24gZ3J0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwiZGl2IiwxMzQpLHF0KDIsInNlY3Rpb24iLDk2KSxtZSgzLCJkaXYiLDEzNSkoNCwiaDMiLDEzNiksTmUo'@;
put 'NSkseWUoKSxtZSg2LCJjbHItaWNvbiIsMTE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnJlbG9hZExpYkluZm8oKSl9KSx5ZSgpKCkscXQoNywiZGl2IiwxMDgpLHllKCksbWUoOCwiZGl2IiwxMzcpLFFlKDksdHJ0LDEsMCwiY2xyLXNwaW5uZXIiLDEz'@;
put 'OCkseWUoKSxRZSgxMCxucnQsNCwwLCJkaXYiLDEzOSksUWUoMTEscHJ0LDMsMiwiZGl2IiwxNDApLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLGdyKCIgIixhLmxpYiwiICIpLENlKDQpLFJlKCJuZ0lmIixudWxsPT09YS5saWJpbmZvKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9'@;
put 'PWEubGliaW5mbyksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pfX1mdW5jdGlvbiBtcnQoYyxsKXsxJmMmJihtZSgwLCJoMyIsMTMzKSxOZSgxLCIgTm8gZGF0YSBmb3VuZCB3aXRoIGdpdmVuIGNvbmRpdGlvbnMgIikseWUoKSl9ZnVuY3Rpb24gdnJ0KGMsbCl7MSZjJiYobWUo'@;
put 'MCwiaDMiLDEzMyksTmUoMSwiIE5vIGRhdGEgZm91bmQgZHVlIHRvIHNhcyByZXF1ZXN0IGVycm9yICIpLHllKCkpfWZ1bmN0aW9uIF9ydChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTQ5KSxxdCgxLCJjbHItaWNvbiIsMTUwKSxRZSgyLG1ydCwyLDAsImgzIiwxNTEpLFFlKDMsdnJ0LDIs'@;
put 'MCwiaDMiLDE1MSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLFJlKCJuZ0lmIixhLm5vRGF0YSksQ2UoMSksUmUoIm5nSWYiLGEubm9EYXRhUmVxRXJyKX19ZnVuY3Rpb24gYnJ0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNTIpLHF0KDEsImhvdC10YWJsZSIsMTUzKSx5ZSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRh'@;
put 'YmxlLmNvbHVtbnMpKCJjb3B5UGFzdGUiLGEuaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGEuaG90VGFibGUuY29udGV4dE1lbnUpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsYS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0'@;
put 'KSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4V2lkdGhDaGVrZXIpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGEuaG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJyb3dIZWFkZXJzIixhLmhvdFRhYmxlLnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJX'@;
put 'aWR0aCIsYS5ob3RUYWJsZS5yb3dIZWFkZXJXaWR0aCkoInJvd0hlaWdodHMiLGEuaG90VGFibGUucm93SGVpZ2h0cykoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIHlydChjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDE1NCksTmUoMSkscXQoMiwiY29udGFj'@;
put 'dC1saW5rIikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gd3J0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2'@;
put 'Iiw4OSksUWUoMSxRbnQsMjAsOSwiZGl2Iiw5MCksUWUoMixlcnQsNCwwLCJkaXYiLDkxKSxRZSgzLGdydCwxMiw0LCJuZy1jb250YWluZXIiLDM4KSxRZSg0LF9ydCw0LDIsImRpdiIsOTIpLFFlKDUsYnJ0LDIsMTgsImRpdiIsOTMpLG1lKDYsImRpdiIpLFFlKDcseXJ0LDMsMSwicCIsOTQp'@;
put 'LHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEudGFibGUpLENlKDEpLFJlKCJuZ0lmIiwhKGEubGlifHxhLnRhYmxlfHxhLm5vRGF0YVJlcUVycnx8YS5ub0RhdGEpKSxDZSgxKSxSZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJiFhLnRhYmxl'@;
put 'JiZhLmxpYiksQ2UoMSksUmUoIm5nSWYiLGEubm9EYXRhfHxhLm5vRGF0YVJlcUVyciksQ2UoMSksUmUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiZhLnRhYmxlKSxDZSgyKSxSZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWEu'@;
put 'SW5maW5pdHkmJmEuaG90VGFibGUuZGF0YSYmYS5ob3RUYWJsZS5kYXRhLmxlbmd0aD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19bGV0IEhUPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSl7dGhpcy5saWNlbmNlU2Vy'@;
put 'dmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnJvdXRlPV8sdGhpcy5ldmVudFNlcnZpY2U9VCx0aGlzLmxvZ2dlclNlcnZpY2U9Vyx0aGlzLmhlbHBlclNlcnZpY2U9aWUsdGhpcy5sb2NhdGlvbj1nZSx0aGlzLmNkZj13'@;
put 'ZSx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IGVoLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMSx0aGlzLmxpYmluZm89bnVsbCx0aGlzLnRhYmxl'@;
put 'dXJpPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJDb2xzPVtdLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmFib3J0QWN0aXZlPSExLHRoaXMudXJsRmlsdGVyUGs9bnVsbCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLndlYlF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5RXJyPSExLHRo'@;
put 'aXMudGFibGVGbGFnPSEwLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMSx0aGlzLmxvYWRpbmdUYWJsZVZpZXc9ITEsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMubm9EYXRhPSExLHRoaXMubm9EYXRhUmVxRXJyPSExLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0'@;
put 'aGlzLm9wZW5Eb3dubG9hZD0hMSx0aGlzLndlYlF1ZXJ5PSExLHRoaXMud2ViUXVlcnlUYWI9ITEsdGhpcy5kb3dubG9hZEZvcm1hdD0iQ1NWIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLnNlYXJjaExvYWRpbmc9ITEsdGhpcy5zZWFyY2hOdW1lcmljPSExLHRo'@;
put 'aXMubnVtYmVyT2ZSb3dzPW51bGwsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8w'@;
put 'LHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsc2V0dGluZ3M6e30sYWZ0ZXJHZXRDb2xIZWFkZXI6dm9pZCAwLGxpY2Vuc2VL'@;
put 'ZXk6dm9pZCAwLHJvd0hlYWRlcnM6RWU9PiIgIixyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjIwLGNvbnRleHRNZW51OlsiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIiwiY29weV9jb2x1bW5faGVhZGVyc19vbmx5Il0sY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5'@;
put 'Q29sdW1uSGVhZGVyc09ubHk6ITB9LGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVy'@;
put 'OihFZSxaZSxvdCxldCx5dCxrdCk9Pntjb25zdCBTdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IFF0LHJuPSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCB2bj10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLE5uPXZuP3ZuWzBd'@;
put 'WzFdOi0xLGNyPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChObik7UXQ9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbY3JdLFF0JiYocm49YExBQkVMOiAke1F0Py5sYWJlbH08YnI+VFlQRTogJHtRdD8udHlwZX08YnI+TEVOR1RIOiAke1F0Py5sZW5ndGh9PGJyPkZPUk1BVDogJHtRdD8u'@;
put 'Zm9ybWF0fWApfXJldHVybiBTdC5pbm5lckhUTUw9cm4sU3R9fX19fSx0aGlzLmhvdEluc3RhbmNlPW51bGwsdGhpcy5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITEsdGhpcy52aWV3Ym94T3Blbj0hMSx0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgQWcsdGhpcy5zYXNqc0NvbmZpZz10'@;
put 'aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKX1uZ09uSW5pdCgpeyIiIT09R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb24mJjA9PT1PYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcykubGVuZ3RoJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbR24udmlld2VyLmN1cnJl'@;
put 'bnRTZWxlY3Rpb25dLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSx2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0mJihHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9kYXRhIiksdGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9r'@;
put 'ZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlLmxpY2Vuc2VLZXk9YX0pfW5ld1ZpZXdib3goKXt0aGlzLnZpZXdib3hPcGVuPSEwfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0'@;
put 'ZXIoKX1zZWFyY2hUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGg9YS52YWx1ZSxmPWQubGliKyIuIitkLnRhYmxlLF89cGFyc2VJbnQoZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpfHwwO3lpZWxkIGQuc2Fz'@;
put 'U3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGgsZC5zZWFyY2hOdW1lcmljLGYsXykudGhlbihUPT57VC5zYXNwYXJhbXN8fFQudmlld0RhdGE/KGQuaG90VGFibGUuZGF0YT1ULnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPVQuJHZpZXdkYXRhLGQuZHNtZXRhPVQuZHNtZXRhLGQubnVtYmVy'@;
put 'T2ZSb3dzPVQuc2FzcGFyYW1zWzBdLk5PQlMsZC5xdWVyeVRleHQ9VC5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsZC5oZWFkZXJQa3M9VC5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/ZC5ub0RhdGE9ITA6KGQubm9EYXRhPSEx'@;
put 'LGQudGFibGVGbGFnPSExLGQuc2V0dXBIb3QoKSkpOmQuc2VhcmNoTG9hZGluZz0hMX0pLmNhdGNoKFQ9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoVCl9KSxkLnNlYXJjaExvYWRpbmc9ITF9KSgpfXJlbG9hZFRhYmxlRGF0YSgpe3RoaXMudmlld0RhdGEodGhpcy51cmxGaWx0ZXJQa3x8MCl9'@;
put 'cmVsb2FkTGliSW5mbygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EubGliaW5mbz1udWxsLGEuc2FzU3RvcmVTZXJ2aWNlLnJlZnJlc2hMaWJJbmZvKGEubGliKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9ZmkoZnVuY3Rpb24qKGgpe2EubGliaW5mbz1oLmxpYmluZm8sR24u'@;
put 'dmlld2VyLmxpYmluZm89YS5saWJpbmZvO2NvbnN0IGY9YS5saWJyYXJpZXMuZmluZChfPT5fLkxJQlJBUllSRUY9PT1hLmxpYik7ZiYmKGYubGliaW5mbz1hLmxpYmluZm8pfSk7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZD0+e2EubG9n'@;
put 'Z2VyU2VydmljZS5lcnJvcihkKSxudWxsPT09YS5saWJpbmZvJiYoYS5saWJpbmZvPVtdKX0pfSkoKX1maWx0ZXJGbihhKXt0aGlzLmxpYnJhcmllcz10aGlzLmxpYnJhcmllcy5maWx0ZXIoaD0+LTEhPT1oLkxJQlJBUllOQU1FLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG9jYWxlTG93'@;
put 'ZXJDYXNlKCkpKX1kb3dubG9hZERhdGEoKXtsZXQgYT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxkPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgVyxmPSImdHlwZT0iK3RoaXMuZG93bmxvYWRGb3JtYXQs'@;
put 'Xz0iJnRhYmxlPSIrdGhpcy50YWJsZVRpdGxlLFQ9IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIiO1c9dHlwZW9mIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklk'@;
put 'PiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKSx3aW5kb3cub3BlbihhK2grIi8/X3Byb2dyYW09IitkKyIvc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEiK2YrXytUKyImZmlsdGVyPSIrVyksdGhpcy5vcGVuRG93bmxvYWQ9ITF9ZG93bmxvYWRE'@;
put 'REwoKXtsZXQgYT10aGlzLmxpYixkPXRoaXMudGFibGUsaD10aGlzLmRvd25sb2FkRm9ybWF0LnJlcGxhY2UoIl9EREwiLCIiKSxmPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLF89dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgVD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9u'@;
put 'UGF0aCgpO3dpbmRvdy5vcGVuKGYrVCsiLz9fcHJvZ3JhbT0iK18rIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0ZGRsIitgJmRzPSR7ZH0mbGlicmVmPSR7YX0mZmxhdm91cj0ke2h9JHsiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNh'@;
put 'c2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiJ9YCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9b25DbGlDb21tYW5kRm9jdXMoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEudGFyZ2V0LnNlbGVjdCgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxp'@;
put 'YlRhYil9dGFibGVFZGl0RXhpc3RzKCl7bGV0IGE9e307YT1Hbi5lZGl0b3IubGlic0FuZFRhYmxlcztsZXQgZD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzFdLGg9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVswXTtyZXR1cm4hIWFbaF0mJmFbaF0uaW5jbHVkZXMoZCl9Z29Ub0xpbmVhZ2UoKXts'@;
put 'ZXQgZD1gL3ZpZXcvbGluZWFnZS8ke3RoaXMudGFibGV1cmkuc3BsaXQoIlxcIilbMV19L1JFVkVSU0VgO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZCl9c2hvd1dlYlF1ZXJ5KCl7bGV0IGE7dGhpcy53ZWJRdWVyeT0hMCxhPXR5cGVvZiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5m'@;
put 'aWx0ZXJJZD4idSI/MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCk7bGV0IGQ9d2luZG93LmxvY2F0aW9uLnBvcnQubGVuZ3RoPjA/IjoiK3dpbmRvdy5sb2NhdGlvbi5wb3J0OiIiO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgo'@;
put 'KTtsZXQgXz1gJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX0ke2R9LyR7aH0vP19wcm9ncmFtPSR7dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2N9L3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhJnR5cGU9V0VCJHt0aGlzLndlYlF1ZXJ5VGFi'@;
put 'PyJUQUIiOiJDU1YifSZ0YWJsZT0ke3RoaXMudGFibGVUaXRsZX0keyImZmlsdGVyPSIrYX1gO3RoaXMud2ViUXVlcnlUZXh0PV8ucmVwbGFjZSgvIC9naW0sIiUyMCIpfWNvcHlUb0NsaXAoKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2Euc3R5bGUucG9zaXRp'@;
put 'b249ImZpeGVkIixhLnN0eWxlLmxlZnQ9IjAiLGEuc3R5bGUudG9wPSIwIixhLnN0eWxlLm9wYWNpdHk9IjAiLGEudmFsdWU9dGhpcy53ZWJRdWVyeVRleHQsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmZvY3VzKCksYS5zZWxlY3QoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29w'@;
put 'eSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Y2hlY2tFeHBhbmQoYSl7fWNvbGxhcHNlTGlicmFy'@;
put 'eUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllSRUYhPT1kLkxJQlJBUllSRUYmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxh'@;
put 'eUxpYnJhcmllcyh0aGlzLmxpYnJhcmllcywhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5RXhwYW5kZWRD'@;
put 'aGFuZ2UoYSxkKXthJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihkLnRhYmxlcz9kLmV4cGFuZGVkPSEhaHx8IWQuZXhwYW5kZWQ6eWllbGQgZi5zZWxl'@;
put 'Y3RUYWJsZShhLCExLGQpLGQuZXhwYW5kZWQpe2YuY2RmLmRldGVjdENoYW5nZXMoKTtsZXQgXz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjc2VhcmNoXyR7ZC5MSUJSQVJZUkVGfWApO2YubG9nZ2VyU2VydmljZS5sb2coIltsaWJUcmVlU2VhcmNoSW5wdXRdIixfKSxfJiZfLmZvY3VzKCks'@;
put 'ZCYmZC5saWJpbmZvJiYoZi5saWJpbmZvPWQubGliaW5mbyksZi5saWImJmYudGFibGUmJiFoP2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+e2Yucm91dGVyLm5h'@;
put 'dmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2YubGliXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KTpmLmxpYiYmIWYudGFibGUmJmYubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9kYXRhLyIrZi5saWIpfWYuY29sbGFwc2VMaWJyYXJ5SXRlbXMoZi5saWJyYXJpZXMsZCl9'@;
put 'KSgpfW9uVGFibGVDbGljayhhLGQpe3RoaXMubGliPWQuTElCUkFSWVJFRix0aGlzLnRhYmxlPWEsdGhpcy5zZWxlY3RMaWJUYWJsZShhKSx0aGlzLnZpZXdEYXRhKDApfXNlbGVjdFRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtoLmxvYWRpbmdUYWJsZXM9'@;
put 'ITAsZi50YWJsZT0hMSxmLnRhYmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWE/R24udmlld2VyLnRhYmxlc1NldCYmZD8oZi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMSxmLnRhYmxlcz1Hbi52aWV3ZXIudGFibGVzLGYubGliaW5mbz1Hbi52aWV3ZXIu'@;
put 'bGliaW5mbyk6KGYubGliaW5mbz1udWxsLHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbihfPT57Zi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMTtsZXQgVD1fLm1wdGFibGVzLm1hcChmdW5jdGlvbihXKXtyZXR1cm4gVy5NRU1OQU1FfSk7Zi5saWJp'@;
put 'bmZvPV8ubGliaW5mb3x8W10sZi50YWJsZXM9VCxoJiYoaC50YWJsZXM9VCxoLmxpYmluZm89Zi5saWJpbmZvKSxHbi52aWV3ZXIubGlicmFyaWVzPWYubGlicmFyaWVzLEduLnZpZXdlci5saWJyYXJ5PWYubGliLEduLnZpZXdlci50YWJsZXM9Zi50YWJsZXMsR24udmlld2VyLmxpYmluZm89'@;
put 'Zi5saWJpbmZvLEduLnZpZXdlci50YWJsZXNTZXQ9ITB9KS5jYXRjaChfPT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKF8pLGYuYWJvcnRBY3RpdmU9ITAsZi5ub0RhdGE9ITAsZi50YWJsZVRpdGxlPSIiLGYudGFibGVEaXNhYmxlPSEwfSkpOmYudGFibGVEaXNhYmxlPSEwLEduLnZpZXdlci5s'@;
put 'aWJyYXJ5PWYubGliLGR8fGYuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9IWguZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKGEsZCl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09YT8odGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMubGliVGFi'@;
put 'PXRoaXMubGliKyIuIit0aGlzLnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsR24udmlld2VyLnRhYmxlPWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtHbi52aWV3ZXIuZmls'@;
put 'dGVyLmxpYmRzPSIiLEduLnZpZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsR24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLEduLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxHbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sR24udmlld2VyLmZpbHRlci52YWxzPVtdfWxpYlRhYkFjdGl2'@;
put 'ZShhLGQpe3JldHVybiEhdGhpcy5saWJUYWImJmErIi4iK2Q9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxp'@;
put 'YnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxHbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5RmlsdGVyKHRoaXMubGlicmFyaWVzKX12'@;
put 'aWV3RGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgaDtpZihkLmxvYWRpbmdUYWJsZVZpZXc9ITAsdHlwZW9mIGQubGliRGF0YXNldD4idSIpaD1kLmxpYisiLiIrZC50YWJsZTtlbHNlIGlmKHR5cGVvZiBkLmxpYj4idSImJnR5cGVvZiBkLnRhYmxlPiJ1Iil7'@;
put 'bGV0IFQ9W107aWYoVD1kLmxpYkRhdGFzZXQuc3BsaXQoIi4iKSxHbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihXPT57ZC5saWJyYXJpZXM9Vy5zYXNsaWJzfSkuY2F0Y2go'@;
put 'Vz0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihXKX0pLGQubGliPVRbMF0sR24udmlld2VyLnN0YXJ0dXBTZXQpZC50YWJsZXM9R24udmlld2VyLnRhYmxlcztlbHNle2xldCBXPWQubGlicmFyaWVzLmZpbmQoaWU9PmllLkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWQubGliLnRvTG93ZXJD'@;
put 'YXNlKCkpO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oaWU9PntkLnRhYmxlcz1pZS5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oZ2Upe3JldHVybiBnZS5NRU1OQU1FfSksVy50YWJsZXM9ZC50YWJsZXMsR24udmlld2VyLmxpYnJhcmllcz1kLmxpYnJhcmll'@;
put 'cyxHbi52aWV3ZXIudGFibGVzPWQudGFibGVzLEduLnZpZXdlci5zdGFydHVwU2V0PSEwfSkuY2F0Y2goaWU9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoaWUpfSl9ZC50YWJsZT1UWzFdLGQudGFibGVGbGFnPSExLGg9ZC5saWJEYXRhc2V0LGQubGliVGFiPWh9ZWxzZSBHbi52aWV3ZXIuc3Rh'@;
put 'cnR1cFNldD9kLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihUPT57ZC5saWJyYXJpZXM9VC5zYXNsaWJzfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihUKX0pLHR5cGVvZiBkLnRhYmxlPCJ1IiYm'@;
put 'KEduLnZpZXdlci5zdGFydHVwU2V0P2QudGFibGVzPUduLnZpZXdlci50YWJsZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihUPT57ZC50YWJsZXM9VC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oVyl7cmV0dXJuIFcuTUVNTkFNRX0pfSkuY2F0Y2goVD0+'@;
put 'e2QubG9nZ2VyU2VydmljZS5lcnJvcihUKSxkLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KSxkLnRhYmxlRmxhZz0hMSxoPWQubGliKyIuIitkLnRhYmxlLGQudGFibGVUaXRsZT1oLGQubGliVGFiPWgpO2Qucm91dGVy'@;
put 'LnVybC5zcGxpdCgiLyIpLmxlbmd0aD4zJiZoJiYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoaCxhKS50aGVuKFQ9PntpZihULnF1ZXJ5Lmxlbmd0aD4wJiYidmlldyI9PT1Hbi5yb290UGFyYW0mJjA9PT1Hbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXMubGVuZ3RoJiYoR24udmll'@;
put 'd2VyLmZpbHRlci5xdWVyeT1kLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFQucXVlcnkpLEduLnZpZXdlci5maWx0ZXIubGliZHM9ZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGQuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoInZpZXdlciIsVC5j'@;
put 'b2xzKSksZC5hYm9ydEFjdGl2ZT0hMSxkLmZpbHRlckNvbHM9VC5jb2xzLHp6KGQuZmlsdGVyQ29scyxbXSxULiR2aWV3ZGF0YSksZC5udW1iZXJPZlJvd3M9VC5zYXNwYXJhbXNbMF0uTk9CUyxkLmhlYWRlclBrcz1ULnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSwiU0FTOSI9'@;
put 'PT1kLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpe2xldCBFZT1ULnNhc3BhcmFtc1swXS5UQUJMRVVSSTtFZSYmRWUubGVuZ3RoPjAmJihkLnRhYmxldXJpPUVlKX1kLmhvdFRhYmxlLmRhdGE9VC52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1ULiR2aWV3ZGF0YSxkLmRzbWV0YT1ULmRzbWV0YSxk'@;
put 'LnF1ZXJ5VGV4dD1ULnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVDtsZXQgVz1bXSxpZT1bXTtmb3IobGV0IEVlIGluIFQudmlld2RhdGFbMF0pRWUmJmllLnB1c2goRWUpO2ZvcihsZXQgRWU9MDtFZTxpZS5sZW5ndGg7RWUrKylXLnB1c2goe2RhdGE6aWVbRWVdfSk7ZC5ob3RUYWJsZS5jb2xI'@;
put 'ZWFkZXJzPWllLGQuaG90VGFibGUuY29sdW1ucz1XLGQuaG90VGFibGUuY2VsbHM9ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fSxkLnRhYmxlRmxhZz0hMTtsZXQgd2U9W107d2U9aC5zcGxpdCgiLiIpLGQubGliPXdlWzBdLGQudGFibGU9d2VbMV0sMD09PWQuaG90VGFibGUuZGF0'@;
put 'YS5sZW5ndGg/KGQubm9EYXRhPSEwLGQudGFibGVGbGFnPSEwKTooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEpLGQubm9EYXRhUmVxRXJyPSExfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihUKSxkLmFib3J0QWN0aXZlPSEwLGQubm9EYXRhUmVxRXJyPSEwfSkpLGQucm91'@;
put 'dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmaCYmZC5yb3V0ZXIubmF2aWdhdGUoMCE9PWE/WyIvdmlldy9kYXRhLyIraCsiLyIrYV06WyIvdmlldy9kYXRhLyIraF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2xldCBmPWQudGFibGUsXz1kLmxpYnJhcmllcy5maW5kKFQ9'@;
put 'PlQuTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7Xz8oR24udmlld2VyLmxpYnJhcmllcy5sZW5ndGg+MCYmKGQubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXMsZC5saWJyYXJpZXNTZWFyY2g9R24udmlld2VyLmxpYnJhcmllc1NlYXJjaCksZC5s'@;
put 'aWJyYXJ5T25DbGljayhkLmxpYixfLCEwKSk6ZC5saWJpbmZvPVtdLGQudGFibGU9Znx8ZC50YWJsZSxkLmxpYnJhcmllcyYmZC5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZC5saWJyYXJpZXMpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmZC5ldmVudFNlcnZpY2Uu'@;
put 'Y2xvc2VTaWRlYmFyKCksZC5sb2FkaW5nVGFibGVWaWV3PSExLCFkLm5vRGF0YSYmIWQubm9EYXRhUmVxRXJyJiZoJiZkLnNldHVwSG90KCksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXJ8fHNldFRpbWVvdXQoKCk9PntsZXQgVD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG90SW5zdGFu'@;
put 'Y2UiKTtUJiYoVC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFc9PntzZXRUaW1lb3V0KCgpPT57bGV0IGllPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7aWUmJmllLmNsaWNrKCl9LDEwMCl9KSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0'@;
put 'ZW5lcj0hMCl9LDJlMyl9KSgpfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfW9wZW5RYigpe3RoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYisiLiIrdGhpcy50'@;
put 'YWJsZSx0aGlzLmZpbHRlckNvbHMpfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W10saD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRM'@;
put 'b2FkaW5nPSExKTt7bGV0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuInZpZXciPT09R24ucm9vdFBhcmFtJiYoR24udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLEduLnZpZXdlci5maWx0ZXIucXVlcnk9W10sR24udmlld2VyLmZpbHRlci5n'@;
put 'cm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IF89MDtfPGYubGVuZ3RoO18rKyl7Y29uc3QgVD1mW19dLmVsZW1lbnRzO2Q9VC5maWx0ZXIoZnVuY3Rpb24o'@;
put 'Vyl7cmV0dXJuIG51bGw9PT1XLnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChUKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9e2dyb3VwTG9naWM6YS5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3Jv'@;
put 'dXBzOltdfTthLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChUPT57Y29uc3QgVz17ZmlsdGVyQ2xhdXNlczpbXX07VC5lbGVtZW50cy5mb3JFYWNoKGllPT57Vy5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShpZSkpfSksVy5jbGF1c2VMb2dpYz1ULmNsYXVz'@;
put 'ZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShXKSl9KTtjb25zdCBfPWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsXykudGhlbihUPT57'@;
put 'YS5xdWVyeVRleHQ9VC5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IFc9VC5yZXN1bHRbMF0uRklMVEVSX1JLO2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHMrIi8iK1ddLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSxhLnZpZXdEYXRhKFcpLGEuZmls'@;
put 'dGVyPSExfSkuY2F0Y2goVD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihUKX0pLGEuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9c2V0dXBIb3QoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubG9hZGluZ1RhYmxl'@;
put 'VmlldyYmdGhpcy5saWJEYXRhc2V0JiYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2UiKSx0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhpcy5ob3RUYWJsZS5o'@;
put 'ZWlnaHQsbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT41MDA/NTAwOmF9LGFmdGVyR2V0Q29sSGVhZGVyOihhLGQpPT57Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoYSk7aCYmdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihoKT4tMSYmZC5jbGFzc0xpc3Qu'@;
put 'YWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKX19KSl9LDFlMyl9bG9hZFdpdGhQYXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSEwLGEudGFibGVUaXRsZT1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW18fDAsYS51cmxGaWx0'@;
put 'ZXJQaz1wYXJzZUludChhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZHx8IjAiKTtsZXQgaD1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW07YS5saWJEYXRhc2V0PWgsaC5pbmNsdWRlcygiLiIpfHwoYS5saWI9aCkseWllbGQgYS52aWV3RGF0YShhLnVybEZpbHRlclBrKSxh'@;
put 'Lm5vRGF0YT9zZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITB9LDEyMDApOnNldFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0hMX0sMTIwMCl9KSgpfWxvYWRXaXRob3V0UGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMSxhLmxp'@;
put 'YnJhcmllc0xvYWRpbmc9ITAsR24udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9R24udmlld2VyLmxpYnJhcmllc1NlYXJjaCxhLmxpYj1Hbi52aWV3ZXIubGlicmFyeSxhLmxpYnJhcmll'@;
put 'c1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e2EubGlicmFyaWVz'@;
put 'PWQuc2FzbGlicyxHbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLEduLnZpZXdlci5zdGFydHVwU2V0PSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVy'@;
put 'cm9yKGQpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EuaG90VGFibGUuZGF0YS5sZW5ndGg+MCYmKGEudGFibGVGbGFn'@;
put 'PSEwKSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e2Eud2hlcmVTdHJpbmc9ZC5zdHJpbmcsYS5jbGF1c2VzPWQub2JqLGEubGliZHM9ZC5saWJkc30pLHR5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiP2EubG9hZFdpdGhQYXJh'@;
put 'bWV0ZXJzKCk6YS5sb2FkV2l0aG91dFBhcmFtZXRlcnMoKX0pKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChiZCksdHQob2EpLHR0KERzKSx0dChXbCksdHQodmwpLHR0KHcwKSx0dChBYyksdHQoSmQpLHR0KFVhKSl9LGMuXHUw'@;
put 'Mjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyh5bnQsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5xdWVyeUZpbHRlckNvbXBMaXN0PWgpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRh'@;
put 'aW5lciJdLGRlY2xzOjk1LHZhcnM6MjksY29uc3RzOltbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3Mi'@;
put 'LCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3Bl'@;
put 'biIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJjbHItY29sLW1kLTYiXSxbMSwiZG93bmxvYWQtc2VsZWN0Il0sWyJjbHJT'@;
put 'ZWxlY3QiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ2YWx1ZSIsIkNTViJdLFsidmFsdWUiLCJTQVMiXSxbInZhbHVlIiwiUEdTUUxfRERMIl0sWyJ2YWx1ZSIsIlNBU19EREwiXSxbInZhbHVlIiwiVFNRTF9EREwiXSxbInZhbHVlIiwiRVhDRUwiXSxbInZhbHVlIiwiTUFS'@;
put 'S0RPV04iXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImlkIiwiY2xpY2siXSxbMSwibW9k'@;
put 'YWwtYm9keSIsIndlYi1xdWVyeSJdLFsxLCJyb3ciXSxbMSwiY2xyLWNvbC1sZy0xMiIsImNsci1jb2wtbWQtMTIiLCJjbHItY29sLXNtLTEyIiwiY2xyLWNvbC14cy0xMiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxb'@;
put 'MSwiYnRuLWdyb3VwIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJjYXJkLWJsb2NrIiwid29yZC1icmVhay1hbGwiXSxbInJvd3MiLCI0IiwiY29scyIsIjUwIiwidHlw'@;
put 'ZSIsInRleHQiLCJyZWFkb25seSIsIiIsMSwid2ViLXF1ZXJ5LXRleHQiLCJ3LTEwMCIsMywidmFsdWUiLCJmb2N1cyJdLFsiY2xpQ29tbWFuZElucHV0IiwiIl0sWzEsImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJuZ3hDbGlwYm9hcmQiLCJjbGljayJd'@;
put 'LFsiYXJpYS1tb2RhbCIsInRydWUiLDEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGlu'@;
put 'ayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiYnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzMsImNsck1vZGFs'@;
put 'T3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwibG9hZGluZ1Nw'@;
put 'aW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiw0LCJuZ0lmIl0sWzMsIm9wZW4iLCJkc21ldGEiLCJvcGVuQ2hhbmdlIl0sWzMsInZpZXdib3hNb2RhbCIsInZpZXdib3hNb2RhbENoYW5nZSJdLFsxLCJteS0xMC1teC1hdXRvIiwi'@;
put 'dGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwi'@;
put 'bmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMs'@;
put 'ImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIs'@;
put 'MywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsImlkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoVHJlZUlu'@;
put 'cHV0IiwiIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImRjLWxvY2tlZC1jb250cm9sIiwidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6'@;
put 'ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxb'@;
put 'InNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsi'@;
put 'cm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwi'@;
put 'c2hhcGUiLCJjbG9zZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlu'@;
put 'bmVyIl0sWzEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJoZWFkZXItcm93IGNsci1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5v'@;
put 'LXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2sgbm9EYXRhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1mbGV4LTEiLDQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImhlYWRlci1yb3ciLCJjbHIt'@;
put 'cm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsImZvcm0tYmxvY2siLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciIsInN3IiwiY2xyLWNvbC1tZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24t'@;
put 'aXRlbXMtY2VudGVyIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJ0eXBlIiwia2V5dXAuZW50ZXIiXSxbInNlYXJjaEVsIiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQs'@;
put 'Im5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1h'@;
put 'dXRvIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtc20tcm93Il0sWyJzaGFwZSIsImluZm8tY2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93IG10LTUg'@;
put 'bXItNSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2aWV3ZXJUaXRsZSBjbHItZmxleC1jb2x1bW4gZC1mbGV4IGNsci1mbGV4LXNtLXJvdyBjbHItYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsIm9wdGlvbnMtY29sIiwiY2xyLWNvbC1tZCJdLFsiY2xhc3MiLCJvcHRpb25zLWRyb3Bk'@;
put 'b3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbInNoYXBlIiwiYm9sdCIsMSwi'@;
put 'Y29sb3IteWVsbG93IiwibXQtNSIsIm1yLTUiXSxbMSwidmlld2VyVGl0bGUiLCJjbHItZmxleC1jb2x1bW4iLCJkLWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLDMsImNsaWNrIl0s'@;
put 'WzEsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsImZpbHRlclNpZGUiXSxbInNoYXBlIiwiY29nIiwic2l6ZSIsIjE1Il0s'@;
put 'WyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siXSxb'@;
put 'InNoYXBlIiwidmlldy1jYXJkcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5lIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiYnRu'@;
put 'IiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJkb3dubG9hZC1jbG91ZCJdLFsic2hhcGUiLCJwZW5jaWwiXSxbInNoYXBlIiwic3dpdGNoIl0sWzEsImNsci1jb2wt'@;
put 'bWQtMTIiLCJpbmZvQmFyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93'@;
put 'IiwiYm9yZGVyLWJvdHRvbS1kaXZpZGVyIiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJ3LTEwMCIsIm0tMCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iXSxbMSwidmlld2VyVGl0bGUiLCJtdC0xNyJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWyJjbHJNZWRpdW0iLCIi'@;
put 'LDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxpYmluZm8gbS0wIGNsci1yb3ciLDQsIm5nSWYiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyIsInBvaW50ZXItZXZlbnRzLW5vbmUi'@;
put 'XSxbInNoYXBlIiwiaW5mby1zdGFuZGFyZCIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJsaWJpbmZvIiwibS0wIiwiY2xyLXJvdyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBtLTAgdy0xMDAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiLCJ3'@;
put 'LTEwMCJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwibS0wIiwzLCJjbGljayJdLFsxLCJtLTAiXSxbMSwibS0wIiwiZm9udC1ib2xkIl0sWzEsImNhcmQtYmxvY2siLCJub0RhdGEiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMt'@;
put 'aW5mbyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVy'@;
put 'aW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwibW9kaWZ5Q29sV2lkdGgiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJyb3dIZWFk'@;
put 'ZXJzIiwicm93SGVhZGVyV2lkdGgiLCJyb3dIZWlnaHRzIiwibGljZW5zZUtleSJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYobWUoMCwiYXBwLXNpZGViYXIiLDApLHh0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBkLmxvYWRNb3JlTGlicmFyaWVzKCl9KSxRZSgxLHdudCwyLDAsImRpdiIsMSksbWUoMiwiY2xyLXRyZWUiKSxRZSgzLE1udCw2LDMsImNsci10cmVlLW5vZGUiLDIpLFFlKDQsRm50LDIsMSwibmctY29udGFpbmVyIiwzKSx5ZSgpLFFlKDUsSG50LDMsMCwiZGl2Iiw0'@;
put 'KSx5ZSgpLG1lKDYsImRpdiIsNSksUWUoNyxObnQsMTQsMCwiZGl2Iiw2KSxRZSg4LFZudCwxLDAsImRpdiIsNyksbWUoOSwiY2xyLW1vZGFsIiw4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vcGVuRG93bmxvYWQ9Zn0pLG1lKDEwLCJoMyIsOSksTmUo'@;
put 'MTEsIkRvd25sb2FkIikseWUoKSxtZSgxMiwiZGl2IiwxMCkoMTMsImRpdiIsMTEpKDE0LCJjbHItc2VsZWN0LWNvbnRhaW5lciIsMTIpKDE1LCJsYWJlbCIpLE5lKDE2LCJQbGVhc2UgY2hvb3NlIGRvd25sb2FkIGZvcm1hdCIpLHllKCksbWUoMTcsInNlbGVjdCIsMTMpLHh0KCJuZ01vZGVs'@;
put 'Q2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kb3dubG9hZEZvcm1hdD1mfSksbWUoMTgsIm9wdGlvbiIsMTQpLE5lKDE5LCJDU1YiKSx5ZSgpLG1lKDIwLCJvcHRpb24iLDE1KSxOZSgyMSwiRGF0YWxpbmVzIChjYXJkcyBmaWxlKSIpLHllKCksbWUoMjIsIm9wdGlvbiIsMTYpLE5lKDIz'@;
put 'LCJEREwgKFBHU1FMIEZsYXZvdXIpIikseWUoKSxtZSgyNCwib3B0aW9uIiwxNyksTmUoMjUsIkRETCAoU0FTIEZsYXZvdXIpIikseWUoKSxtZSgyNiwib3B0aW9uIiwxOCksTmUoMjcsIkRETCAoVFNRTCBGbGF2b3VyKSIpLHllKCksbWUoMjgsIm9wdGlvbiIsMTkpLE5lKDI5LCJFeGNlbCAo'@;
put 'Lnhsc3gpIikseWUoKSxtZSgzMCwib3B0aW9uIiwyMCksTmUoMzEsIk1hcmtkb3duICgubWQpIikseWUoKSgpKCkoKSgpLG1lKDMyLCJkaXYiLDIxKSgzMywiYnV0dG9uIiwyMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm9wZW5Eb3dubG9hZD0hMX0pLE5lKDM0LCIgQ2FuY2Vs'@;
put 'ICIpLHllKCksbWUoMzUsImJ1dHRvbiIsMjMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kb3dubG9hZEZvcm1hdC5pbmNsdWRlcygiRERMIik/ZC5kb3dubG9hZERETCgpOmQuZG93bmxvYWREYXRhKCl9KSxOZSgzNiwiIE9rICIpLHllKCkoKSgpLG1lKDM3LCJjbHItbW9kYWwi'@;
put 'LDgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLndlYlF1ZXJ5PWZ9KSxtZSgzOCwiaDMiLDkpLE5lKDM5LCIgV2ViIFF1ZXJ5IFVSTCAiKSx5ZSgpLG1lKDQwLCJkaXYiLDI0KSg0MSwiZGl2IiwyNSkoNDIsImRpdiIsMjYpKDQzLCJkaXYiLDI3KSg0NCwi'@;
put 'ZGl2IiwyOCkoNDUsInNwYW4iKSxOZSg0NiwiQ29weSB0aGUgYmVsb3cgaW50byB5b3VyIHByZWZlcnJlZCBjbGllbnQgdG9vbDoiKSx5ZSgpLG1lKDQ3LCJkaXYiLDI5KSg0OCwiZGl2IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLndlYlF1ZXJ5VGFiPSEwLGQuc2hvd1dl'@;
put 'YlF1ZXJ5KCl9KSxxdCg0OSwiaW5wdXQiLDMxKSxtZSg1MCwibGFiZWwiKSxOZSg1MSwiVEFCIikseWUoKSgpLG1lKDUyLCJkaXYiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQud2ViUXVlcnlUYWI9ITEsZC5zaG93V2ViUXVlcnkoKX0pLHF0KDUzLCJpbnB1dCIsMzEpLG1l'@;
put 'KDU0LCJsYWJlbCIpLE5lKDU1LCJDU1YiKSx5ZSgpKCkoKSgpLG1lKDU2LCJkaXYiLDMyKSg1NywidGV4dGFyZWEiLDMzLDM0KSx4dCgiZm9jdXMiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2xpQ29tbWFuZEZvY3VzKGYpfSksTmUoNTksIiAgICAgICAgICAgICAgIikseWUoKSgpLG1lKDYw'@;
put 'LCJkaXYiLDM1KSg2MSwiYnV0dG9uIiwzNikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNvcHlUb0NsaXAoKX0pLE5lKDYyLCIgY29weSB0byBjbGlwYm9hcmQgIikseWUoKSgpKCkoKSgpKCksbWUoNjMsImRpdiIsMjEpKDY0LCJidXR0b24iLDIyKSx4dCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGQud2ViUXVlcnk9ITF9KSxOZSg2NSwiIGNsb3NlICIpLHllKCkoKSgpLG1lKDY2LCJjbHItbW9kYWwiLDM3KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5maWx0ZXI9Zn0pLG1lKDY3LCJoMyIsOSksTmUoNjgsIiBGaWx0ZXIgZm9y'@;
put 'IHRhYmxlOiIpLG1lKDY5LCJzcGFuIiksTmUoNzApLHllKCkoKSxtZSg3MSwiZGl2IiwxMCksUWUoNzIsQm50LDIsMCwiYXBwLXF1ZXJ5IiwzOCkseWUoKSxtZSg3MywiZGl2IiwyMSkoNzQsImJ1dHRvbiIsMzkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNldEZpbHRlcigp'@;
put 'fSksTmUoNzUsIiByZXNldCBmaWx0ZXIgIikseWUoKSxtZSg3NiwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmZpbHRlcj0hMSxkLnJlbW92ZVF1ZXJ5KCl9KSxOZSg3NywiIENhbmNlbCAiKSx5ZSgpLG1lKDc4LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGQuc2VuZENsYXVzZSgpfSksTmUoNzksIiBPayAiKSx5ZSgpKCkoKSxtZSg4MCwiY2xyLW1vZGFsIiw0MikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucXVlcnlFcnI9Zn0pLG1lKDgxLCJoMyIsNDMpLE5lKDgyLCJFcnJvciIp'@;
put 'LHllKCksbWUoODMsImRpdiIsMTApKDg0LCJwIiksTmUoODUpLHllKCkoKSxtZSg4NiwiZGl2IiwyMSkoODcsImJ1dHRvbiIsNDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVyeUVycj0hMX0pLE5lKDg4LCIgQ2FuY2VsICIpLHllKCksbWUoODksImJ1dHRvbiIsNDUpLHh0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVyeUVycj0hMX0pLE5lKDkwLCIgT2sgIikseWUoKSgpKCksUWUoOTEsam50LDYsMCwiZGl2Iiw0NiksUWUoOTIsd3J0LDgsNiwiZGl2Iiw0NykseWUoKSxtZSg5MywiYXBwLWRhdGFzZXQtaW5mbyIsNDgpLHh0KCJvcGVuQ2hhbmdlIixm'@;
put 'dW5jdGlvbihmKXtyZXR1cm4gZC5kYXRhc2V0SW5mbz1mfSkseWUoKSxtZSg5NCwiYXBwLXZpZXdib3hlcyIsNDkpLHh0KCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnZpZXdib3hPcGVuPWZ9KSx5ZSgpKSwyJmEpe2NvbnN0IGg9JGkoNTgpO0NlKDEpLFJlKCJu'@;
put 'Z0lmIixkLmxpYnJhcmllc0xvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmxpYnJhcmllcyksQ2UoMSksUmUoIm5nRm9yT2YiLGQubGlicmFyaWVzKSxDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJpZXNQYWdpbmcpLENlKDIpLFJlKCJuZ0lmIixkLm51bGxWYXJpYWJsZXMpLENlKDEpLFJlKCJu'@;
put 'Z0lmIixkLm51bGxWYXJpYWJsZXMpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQub3BlbkRvd25sb2FkKSgiY2xyTW9kYWxTaXplIiwibWQiKSxDZSg4KSxSZSgibmdNb2RlbCIsZC5kb3dubG9hZEZvcm1hdCksQ2UoMTgpLFJlKCJpZCIsZC50YWJsZVRpdGxlKSxDZSgyKSxSZSgiY2xyTW9k'@;
put 'YWxPcGVuIixkLndlYlF1ZXJ5KSgiY2xyTW9kYWxTaXplIiwibGciKSxDZSgxMiksUmUoImNoZWNrZWQiLGQud2ViUXVlcnlUYWIpLENlKDQpLFJlKCJjaGVja2VkIiwhZC53ZWJRdWVyeVRhYiksQ2UoNCkseGMoInZhbHVlIixkLndlYlF1ZXJ5VGV4dCksQ2UoNCksUmUoIm5neENsaXBib2Fy'@;
put 'ZCIsaCksQ2UoNSksUmUoImNsck1vZGFsT3BlbiIsZC5maWx0ZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNCksZ3IoIiAiLGQubGliVGFiLCIgIiksQ2UoMiksUmUoIm5nSWYiLGQuZmlsdGVyKSxDZSg2KSxSZSgiY2xyTG9hZGluZyIsZC5zdWJt'@;
put 'aXRMb2FkaW5nKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLnF1ZXJ5RXJyKSxDZSg1KSxvcihkLnF1ZXJ5RXJyTWVzc2FnZSksQ2UoNiksUmUoIm5nSWYiLGQubG9hZGluZ1RhYmxlVmlldyksQ2UoMSksUmUoIm5nSWYiLCFkLmxvYWRpbmdUYWJsZVZpZXcpLENlKDEpLFJlKCJvcGVuIixk'@;
put 'LmRhdGFzZXRJbmZvKSgiZHNtZXRhIixkLmRzbWV0YSksQ2UoMSksUmUoInZpZXdib3hNb2RhbCIsZC52aWV3Ym94T3Blbil9fSxkZXBlbmRlbmNpZXM6W3hzZSx4cyxaaSxuZCx0aCxtbnQsQ3AsbDEsYzEsV2EsUzAsTTAsQnMsd3AsT3MscjIsZGQsZzEsRHAsa2Esb3Usc3UsWnUsYzIsZGgs'@;
put 'VXMsWEosRDAsRDgsVDAsZjEsTjgsSDgsTmYsYWcsbGcsSzgsamIsVWIsemIsdTIseHksbjMsQXNlLGpFLGNVLFU3LERzZSxibnRdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59'@;
put 'Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0udG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCAr'@;
put 'IGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5o'@;
put 'ZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLm9wdGlvbnMtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5'@;
put 'OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5zd1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGln'@;
put 'bjpjZW50ZXI7cGFkZGluZzozcHg7Zm9udC1zaXplOjE2cHh9LmZpbHRlclNpZGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MjZweDttYXJnaW4tYm90dG9tOjE5cHh9Lm9wdGlvbnMtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaWNvbnttYXJnaW4tcmlnaHQ6'@;
put 'NXB4fS52aWV3ZXJUaXRsZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fS5kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxODBweDttYXJnaW4tdG9wOi0xOHB4O3BhZGRpbmc6MH0uZHJvcGRvd24tbWVudVtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmNhcmRGbGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubm9EYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtk'@;
put 'aXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MX0uZmlsdGVyQnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5lZGl0QnRuW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmJ0blZpZXdbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIWltcG9ydGFudH0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5'@;
put 'OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5kb3dubG9hZC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fS5yZWZyZXNoLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjtt'@;
put 'YXJnaW4tbGVmdDo1cHh9LmxpYmluZm9bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAyMHB4O292ZXJmbG93OmF1dG99aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjQzMTM3MjU0'@;
put 'OSl9Lm5vLXRhYmxlLXNlbGVjdGVkLWluZm9bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ud2ViLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0OjM1dmh9Lndl'@;
put 'Yi1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAud2ViLXF1ZXJ5LXRleHRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDoxMDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LmZpbHRlckJ0bltfbmdjb250ZW50LSVDT01QJV0s'@;
put 'IC5lZGl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KXsucm93W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MHJlbTttYXJnaW4tbGVmdDowcmVtfX0iXX0pLGN9KSgpO2Nv'@;
put 'bnN0IENydD1be3BhdGg6IiIsY29tcG9uZW50OnN0dCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJkYXRhIn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpIVH0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpIVH0se3BhdGg6ImRhdGEvOmxpYk1lbS86Zmls'@;
put 'dGVySWQiLGNvbXBvbmVudDpIVH0se3BhdGg6ImRhdGEvOmxpYk1lbSIsY29tcG9uZW50OkhUfSx7cGF0aDoibGluZWFnZSIsY29tcG9uZW50OkZUfSx7cGF0aDoibGluZWFnZS86dGFibGVpZC86ZGlyZWN0aW9uIixjb21wb25lbnQ6RlR9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJp'@;
put 'LzpkaXJlY3Rpb24iLGNvbXBvbmVudDpGVH0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbi86cmVsb2FkIixjb21wb25lbnQ6RlR9LHtwYXRoOiJ2aXlhLWFwaS1leHBsb3JlciIsY29tcG9uZW50OmZudH0se3BhdGg6Im1ldGFkYXRhIixjb21wb25lbnQ6b1p9LHtw'@;
put 'YXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElEIixjb21wb25lbnQ6b1p9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElELzpvYmplY3ROYW1lIixjb21wb25lbnQ6b1p9LHtwYXRoOiJ1c2VybmF2Iixjb21wb25lbnQ6b3R0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6'@;
put 'ImZ1bGwiLHJlZGlyZWN0VG86Imdyb3VwcyJ9LHtwYXRoOiJ1c2VycyIsY29tcG9uZW50OkNsZX0se3BhdGg6InVzZXJzLzp1cmkiLGNvbXBvbmVudDpDbGV9LHtwYXRoOiJncm91cHMiLGNvbXBvbmVudDplYWV9LHtwYXRoOiJncm91cHMvOnVyaSIsY29tcG9uZW50OmVhZX0se3BhdGg6InJv'@;
put 'bGVzIixjb21wb25lbnQ6d2xlfSx7cGF0aDoicm9sZXMvOnVyaSIsY29tcG9uZW50OndsZX1dfV19XTtsZXQgU3J0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp'@;
put 'bmo9bWkoe2ltcG9ydHM6W2RjLmZvckNoaWxkKENydCksZGNdfSksY30pKCksTXJ0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W0Zz'@;
put 'ZSxvbyxTcnQsdm50LCRsLF91LF83LmZvclJvb3QoKSxCNyxWNyx0dyxmVSxDMl19KSxjfSkoKTtjb25zdCBFcnQ9ZGMuZm9yUm9vdChbe3BhdGg6IiIscmVkaXJlY3RUbzoiaG9tZSIscGF0aE1hdGNoOiJmdWxsIn0se3BhdGg6InZpZXciLGxvYWRDaGlsZHJlbjooKT0+TXJ0fSx7cGF0aDoi'@;
put 'cmV2aWV3Iixjb21wb25lbnQ6VkdlLGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRvYXBwcm92ZSJ9LHtwYXRoOiIiLGxvYWRDaGlsZHJlbjooKT0+TkdlfV19LHtwYXRoOiJsaWNlbnNpbmciLGxvYWRDaGlsZHJlbjooKT0+b1dlfSx7cGF0aDoiaG9t'@;
put 'ZSIsbG9hZENoaWxkcmVuOigpPT5oVX0se3BhdGg6ImVkaXRvciIsbG9hZENoaWxkcmVuOigpPT5tWWV9LHtwYXRoOiJzdGFnZSIsbG9hZENoaWxkcmVuOigpPT5XR2V9LHtwYXRoOiJzeXN0ZW0iLGxvYWRDaGlsZHJlbjooKT0+byRlfSx7cGF0aDoiZGVwbG95Iixsb2FkQ2hpbGRyZW46KCk9'@;
put 'PlRFZX0se3BhdGg6IioqIixjb21wb25lbnQ6WXhlfV0se3VzZUhhc2g6ITB9KTtsZXQga3J0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjLGJvb3RzdHJhcDpbcVNlXX0pLGMuXHUw'@;
put 'Mjc1aW5qPW1pKHtwcm92aWRlcnM6W1V4LGJkLHBVXSxpbXBvcnRzOltaeGUsRUcsJGwsRDZlLEZoZSxFcnQsVjcsX3UsQjcsaFUsdHcsQzIsWXR0XX0pLGN9KSgpO0wxZSgpLmJvb3RzdHJhcE1vZHVsZShrcnQpfSw1NjMyMTooYXQsSWUsRik9Pnt2YXIgYWU9RigxNzE1NikuZGVmYXVsdDtz'@;
put 'ZWxmLGF0LmV4cG9ydHM9KCgpPT57dmFyIHg9ezI2NTY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oayl7cmV0dXJuIGsmJmsuX19lc01vZHVsZT9rOntkZWZhdWx0Omt9fTtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kZWNvZGVUb2tlbj1PLmhhc1Rva2VuRXhwaXJlZD1PLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9Ty5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9dm9pZCAwO3ZhciBLPXooUig2MjQ1KSk7ZnVuY3Rpb24gSShrLEUpe3JldHVybigwLEsuZGVm'@;
put 'YXVsdCkoaykuZXhwLShuZXcgRGF0ZSkudmFsdWVPZigpLzFlMzw9RX1PLmlzQWNjZXNzVG9rZW5FeHBpcmluZz1mdW5jdGlvbihrLEUpe3JldHVybiB2b2lkIDA9PT1FJiYoRT0zNjAwKSwha3x8SShrLEUpfSxPLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9ZnVuY3Rpb24oayxFKXtyZXR1cm4g'@;
put 'dm9pZCAwPT09RSYmKEU9MzApLCFrfHxJKGssRSl9LE8uaGFzVG9rZW5FeHBpcmVkPWZ1bmN0aW9uKGspe3JldHVybiFrfHxJKGssMCl9LE8uZGVjb2RlVG9rZW49ZnVuY3Rpb24oayl7dmFyIEU7dHJ5e0U9KDAsSy5kZWZhdWx0KShrKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQg'@;
put 'dG9rZW4gc3VwcGxpZWQuIil9cmV0dXJuIEV9fSw2Nzk5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShJLGose2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSl9OmZ1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksayl7Zm9yKHZhciBFIGluIEkpImRlZmF1'@;
put 'bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDI2NTYpLE8pfSwzMjU5OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSPXRo'@;
put 'aXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIFI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oeil7Zm9yKHZhciBLLEk9MSxrPWFyZ3VtZW50cy5sZW5ndGg7STxrO0krKylmb3IodmFyIEUgaW4gSz1hcmd1bWVudHNbSV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0'@;
put 'eS5jYWxsKEssRSkmJih6W0VdPUtbRV0pO3JldHVybiB6fSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucHJlZml4TWVzc2FnZT12b2lkIDAsTy5wcmVmaXhNZXNzYWdlPWZ1bmN0aW9uKHosSyl7aWYo'@;
put 'Im9iamVjdCI9PXR5cGVvZiB6KWlmKHouaGFzT3duUHJvcGVydHkoIm1lc3NhZ2UiKSl6Lm1lc3NhZ2U9Syt6Lm1lc3NhZ2U7ZWxzZXtpZighei5oYXNPd25Qcm9wZXJ0eSgiYm9keSIpKXJldHVybiBSKFIoe30seikse21lc3NhZ2U6S30pO2lmKCJvYmplY3QiPT10eXBlb2Ygei5ib2R5JiYo'@;
put 'ei5tZXNzYWdlPXouYm9keS5tZXNzYWdlP0srei5ib2R5Lm1lc3NhZ2U6SyksInN0cmluZyI9PXR5cGVvZiB6LmJvZHkpe3ZhciBJPXZvaWQgMDt0cnl7ST1KU09OLnBhcnNlKHouYm9keSl9Y2F0Y2h7cmV0dXJuIHoubWVzc2FnZT1LLHp9cmV0dXJuIEkubWVzc2FnZT1JLm1lc3NhZ2U/SytJ'@;
put 'Lm1lc3NhZ2U6Syx6LmJvZHk9SSx6fX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHomJih6PUsreiksen19LDk3Nzg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9p'@;
put 'ZCAwPT09aiYmKGo9RSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVu'@;
put 'Y3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMzI1OSksTyksSyhSKDEwNjQp'@;
put 'LE8pfSwxMDY0OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oVixCKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oWSxYKXtZ'@;
put 'Ll9fcHJvdG9fXz1YfXx8ZnVuY3Rpb24oWSxYKXtmb3IodmFyIFUgaW4gWClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWCxVKSYmKFlbVV09WFtVXSl9KShWLEIpfSxmdW5jdGlvbihWLEIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBCJiZudWxsIT09Qil0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKEIpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFkoKXt0aGlzLmNvbnN0cnVjdG9yPVZ9eihWLEIpLFYucHJvdG90eXBlPW51bGw9PT1CP09iamVjdC5jcmVhdGUoQik6KFkucHJvdG90eXBl'@;
put 'PUIucHJvdG90eXBlLG5ldyBZKX0pLEk9dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKFYsQil7dmFyIFk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmVltTeW1ib2wuaXRlcmF0b3JdO2lmKCFZKXJldHVybiBWO3ZhciBYLFUscT1ZLmNhbGwoViksZWU9W107dHJ5e2Zvcig7KHZvaWQg'@;
put 'MD09PUJ8fEItLSA+MCkmJiEoWD1xLm5leHQoKSkuZG9uZTspZWUucHVzaChYLnZhbHVlKX1jYXRjaCh0ZSl7VT17ZXJyb3I6dGV9fWZpbmFsbHl7dHJ5e1gmJiFYLmRvbmUmJihZPXEucmV0dXJuKSYmWS5jYWxsKHEpfWZpbmFsbHl7aWYoVSl0aHJvdyBVLmVycm9yfX1yZXR1cm4gZWV9LGs9'@;
put 'dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihWLEIsWSl7aWYoWXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBYLFU9MCxxPUIubGVuZ3RoO1U8cTtVKyspIVgmJlUgaW4gQnx8KFh8fChYPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEIsMCxVKSksWFtVXT1CW1Vd'@;
put 'KTtyZXR1cm4gVi5jb25jYXQoWHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoQikpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TZXJ2ZXJUeXBlRXJyb3I9dm9pZCAwO3ZhciBFPVIoMzkwMCksaj1mdW5jdGlvbihWKXtmdW5jdGlvbiBC'@;
put 'KFkpe3ZvaWQgMD09PVkmJihZPVtdKTt2YXIgWD10aGlzLFU9KFk9ayhbXSxJKG5ldyBTZXQoWSkpLCExKSkubGVuZ3RoP1kuam9pbigiLCAiKS50cmltKCk6W0UuU2VydmVyVHlwZS5TYXNWaXlhLEUuU2VydmVyVHlwZS5TYXM5LEUuU2VydmVyVHlwZS5TYXNqc10uam9pbigiLCAiKS50cmlt'@;
put 'KCk7cmV0dXJuIFU9VS5yZXBsYWNlKC8sXHMoW14sXSopJC8sIiBhbmQgJDEiKSwoWD1WLmNhbGwodGhpcywiSW52YWxpZCBzZXJ2ZXIgdHlwZTogdmFsaWQgb3B0aW9uIi5jb25jYXQoMSE9PVkubGVuZ3RoPyJzIjoiIiwiICIpLmNvbmNhdCgxIT09WS5sZW5ndGg/ImFyZSI6ImlzIiwiICIp'@;
put 'LmNvbmNhdChVKSl8fHRoaXMpLm5hbWU9IlNlcnZlclR5cGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFgsQi5wcm90b3R5cGUpLFh9cmV0dXJuIEsoQixWKSxCfShFcnJvcik7Ty5TZXJ2ZXJUeXBlRXJyb3I9an0sMzkwNjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6'@;
put 'PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihlZSx0ZSl7ZnVuY3Rpb24gb2UodWUpe3RyeXtoZShxLm5leHQodWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBzZSh1ZSl7dHJ5e2hlKHEudGhy'@;
put 'b3codWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBoZSh1ZSl7dmFyIGNlO3VlLmRvbmU/ZWUodWUudmFsdWUpOihjZT11ZS52YWx1ZSxjZSBpbnN0YW5jZW9mIFU/Y2U6bmV3IFUoZnVuY3Rpb24oRyl7RyhjZSl9KSkudGhlbihvZSxzZSl9aGUoKHE9cS5hcHBseShZLFh8fFtdKSku'@;
put 'bmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFksWCl7dmFyIFUscSxlZSx0ZSxvZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZlZVswXSl0aHJvdyBlZVsxXTtyZXR1cm4gZWVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdGU9e25leHQ6c2Uo'@;
put 'MCksdGhyb3c6c2UoMSkscmV0dXJuOnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rpb24gc2UoaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZihV'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO29lOyl0cnl7aWYoVT0xLHEmJihlZT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8fCgoZWU9cS5yZXR1cm4pJiZlZS5jYWxsKHEpLDApOnEubmV4dCkmJiEoZWU9ZWUuY2Fs'@;
put 'bChxLGNlWzFdKSkuZG9uZSlyZXR1cm4gZWU7c3dpdGNoKHE9MCxlZSYmKGNlPVsyJmNlWzBdLGVlLnZhbHVlXSksY2VbMF0pe2Nhc2UgMDpjYXNlIDE6ZWU9Y2U7YnJlYWs7Y2FzZSA0OnJldHVybiBvZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxkb25lOiExfTtjYXNlIDU6b2UubGFiZWwrKyxx'@;
put 'PWNlWzFdLGNlPVswXTtjb250aW51ZTtjYXNlIDc6Y2U9b2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChlZT0oZWU9b2UudHJ5cykubGVuZ3RoPjAmJmVlW2VlLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7b2U9MDtjb250aW51ZX1p'@;
put 'ZigzPT09Y2VbMF0mJighZWV8fGNlWzFdPmVlWzBdJiZjZVsxXTxlZVszXSkpe29lLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmb2UubGFiZWw8ZWVbMV0pe29lLmxhYmVsPWVlWzFdLGVlPWNlO2JyZWFrfWlmKGVlJiZvZS5sYWJlbDxlZVsyXSl7b2UubGFiZWw9ZWVbMl0sb2Uu'@;
put 'b3BzLnB1c2goY2UpO2JyZWFrfWVlWzJdJiZvZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZX1jZT1YLmNhbGwoWSxvZSl9Y2F0Y2goRyl7Y2U9WzYsR10scT0wfWZpbmFsbHl7VT1lZT0wfWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZv'@;
put 'aWQgMCxkb25lOiEwfX0oW2hlLHVlXSl9fX0sST10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oWSxYKXt2YXIgVT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZZW1N5bWJvbC5pdGVyYXRvcl07aWYoIVUpcmV0dXJuIFk7dmFyIHEsZWUsdGU9VS5jYWxsKFkpLG9lPVtdO3RyeXtmb3Io'@;
put 'Oyh2b2lkIDA9PT1YfHxYLS0gPjApJiYhKHE9dGUubmV4dCgpKS5kb25lOylvZS5wdXNoKHEudmFsdWUpfWNhdGNoKHNlKXtlZT17ZXJyb3I6c2V9fWZpbmFsbHl7dHJ5e3EmJiFxLmRvbmUmJihVPXRlLnJldHVybikmJlUuY2FsbCh0ZSl9ZmluYWxseXtpZihlZSl0aHJvdyBlZS5lcnJvcn19'@;
put 'cmV0dXJuIG9lfSxrPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oWSxYLFUpe2lmKFV8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgcSxlZT0wLHRlPVgubGVuZ3RoO2VlPHRlO2VlKyspIXEmJmVlIGluIFh8fChxfHwocT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs'@;
put 'bChYLDAsZWUpKSxxW2VlXT1YW2VlXSk7cmV0dXJuIFkuY29uY2F0KHF8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFgpKX0sRT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oWSl7cmV0dXJuIFkmJlkuX19lc01vZHVsZT9ZOntkZWZhdWx0Oll9fTtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy51cGRhdGVDc3Y9Ty5jcmVhdGVDc3Y9Ty5yZWFkQ3N2PXZvaWQgMDt2YXIgaj1SKDE1NTkpLFY9RShSKDc1NjUpKTtPLnJlYWRDc3Y9ZnVuY3Rpb24oWSl7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsai5yZWFkRmlsZSkoWSldO2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKS5zcGxpdCgiXG4iKS5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIFUubGVuZ3RofSkubWFwKGZ1bmN0'@;
put 'aW9uKFUpe3JldHVybiBVLnNwbGl0KCIsIil9KV19fSl9KX0sTy5jcmVhdGVDc3Y9ZnVuY3Rpb24oWSxYLFUpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHE7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihlZSl7c3dpdGNoKGVlLmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuIHE9KDAsVi5kZWZhdWx0KShYLHtoZWFkZXI6MT09PVgubGVuZ3RoLGNvbHVtbnM6VX0pLFs0LCgwLGouY3JlYXRlRmlsZSkoWSxxKV07Y2FzZSAxOnJldHVybiBlZS5zZW50KCksWzJdfX0pfSl9LE8udXBkYXRlQ3N2PWZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiB6KHZvaWQgMCx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGVlLHRlLG9lO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oc2Upe3N3aXRjaChzZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LEIoWSxYLFUscSldO2Nhc2UgMTpyZXR1cm4gZWU9c2Uuc2VudCgpLHEmJih0ZT0wPT09ZWUubGVuZ3RoPzE6ZWUubGVuZ3Ro'@;
put 'LChvZT1VLmZpbmRJbmRleChmdW5jdGlvbihoZSl7cmV0dXJuIGhlPT09cX0pKT4tMT9YLnNwbGljZShvZSwwLHRlKTooVS5zcGxpY2UoMCwwLHEpLFguc3BsaWNlKDAsMCx0ZSkpKSxlZS5wdXNoKFgpLFs0LCgwLE8uY3JlYXRlQ3N2KShZLGVlLFUpXTtjYXNlIDI6cmV0dXJuIHNlLnNlbnQo'@;
put 'KSxbMl19fSl9KX07dmFyIEI9ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGUsb2Usc2U7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6aWYoWC5sZW5ndGghPT1VLmxlbmd0'@;
put 'aCl7aWYoWC5sZW5ndGg+VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7aWYoIXF8fFgubGVuZ3RoKzEhPT1VLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2'@;
put 'ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKX1lbHNlIGlmKHEmJlUuaW5jbHVkZXMocSkpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7cmV0dXJuWzQsKDAsTy5yZWFkQ3N2KShZKS5j'@;
put 'YXRjaChmdW5jdGlvbih1ZSl7cmV0dXJuW119KV07Y2FzZSAxOmlmKGVlPWhlLnNlbnQoKSx0ZT1lZVswXSl7aWYoVS5sZW5ndGg+dGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibnVtYmVyIG9mIHByb3ZpZGVkIGNvbHVtbnMgYXJlIGdyZWF0ZXIgdGhhbiBudW1iZXIgb2YgZXhpc3Rpbmcg'@;
put 'Y29sdW1ucyIpO2lmKFUubGVuZ3RoPHRlLmxlbmd0aCl7aWYoIXF8fFUubGVuZ3RoKzEhPT10ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgbGVzcyB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7aWYob2U9dGUuZmluZElu'@;
put 'ZGV4KGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWU9PT1xfSksc2U9ayhbXSxJKFUpLCExKSwhKG9lPi0xKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKHNlLnNwbGljZShvZSwwLHEpLEpTT04uc3RyaW5naWZ5KFUp'@;
put 'IT09SlNPTi5zdHJpbmdpZnkoc2UpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIil9ZWxzZXtpZihKU09OLnN0cmluZ2lmeShVKSE9PUpTT04uc3RyaW5naWZ5KHRlKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNv'@;
put 'bHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKHEmJiFVLmluY2x1ZGVzKHEpKXRocm93IG5ldyBFcnJvcigiY2FuIG5vdCBhZGQgbmV3IGlkIHRvIGV4aXN0aW5nIGRhdGEiKX19cmV0dXJuWzIsZWVdfX0pfSl9fSwxNTU5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0'@;
put 'cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEcsYixELEgpe3ZvaWQgMD09PUgmJihIPUQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLEgse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGJbRF19fSl9OmZ1'@;
put 'bmN0aW9uKEcsYixELEgpe3ZvaWQgMD09PUgmJihIPUQpLEdbSF09YltEXX0pLEs9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEcsYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KEcsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmJ9'@;
put 'KX06ZnVuY3Rpb24oRyxiKXtHLmRlZmF1bHQ9Yn0pLEk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKEcpe2lmKEcmJkcuX19lc01vZHVsZSlyZXR1cm4gRzt2YXIgYj17fTtpZihudWxsIT1HKWZvcih2YXIgRCBpbiBHKSJkZWZhdWx0IiE9PUQmJk9iamVjdC5wcm90b3R5cGUu'@;
put 'aGFzT3duUHJvcGVydHkuY2FsbChHLEQpJiZ6KGIsRyxEKTtyZXR1cm4gSyhiLEcpLGJ9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEcsYixELEgpe3JldHVybiBuZXcoRHx8KEQ9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sZyl7ZnVuY3Rpb24gQyhwKXt0cnl7dihILm5leHQocCkp'@;
put 'fWNhdGNoKHcpe2codyl9fWZ1bmN0aW9uIFMocCl7dHJ5e3YoSC50aHJvdyhwKSl9Y2F0Y2godyl7Zyh3KX19ZnVuY3Rpb24gdihwKXt2YXIgdztwLmRvbmU/TihwLnZhbHVlKToodz1wLnZhbHVlLHcgaW5zdGFuY2VvZiBEP3c6bmV3IEQoZnVuY3Rpb24oSil7Sih3KX0pKS50aGVuKEMsUyl9'@;
put 'digoSD1ILmFwcGx5KEcsYnx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRyxiKXt2YXIgRCxILE4sZyxDPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJk5bMF0pdGhyb3cgTlsxXTtyZXR1cm4gTlsxXX0sdHJ5czpbXSxvcHM6W119O3Jl'@;
put 'dHVybiBnPXtuZXh0OlMoMCksdGhyb3c6UygxKSxyZXR1cm46UygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksZztmdW5jdGlvbiBTKHYpe3JldHVybiBmdW5jdGlvbihwKXtyZXR1cm4gZnVuY3Rpb24o'@;
put 'dyl7aWYoRCl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtDOyl0cnl7aWYoRD0xLEgmJihOPTImd1swXT9ILnJldHVybjp3WzBdP0gudGhyb3d8fCgoTj1ILnJldHVybikmJk4uY2FsbChIKSwwKTpILm5leHQpJiYhKE49Ti5jYWxs'@;
put 'KEgsd1sxXSkpLmRvbmUpcmV0dXJuIE47c3dpdGNoKEg9MCxOJiYodz1bMiZ3WzBdLE4udmFsdWVdKSx3WzBdKXtjYXNlIDA6Y2FzZSAxOk49dzticmVhaztjYXNlIDQ6cmV0dXJuIEMubGFiZWwrKyx7dmFsdWU6d1sxXSxkb25lOiExfTtjYXNlIDU6Qy5sYWJlbCsrLEg9d1sxXSx3PVswXTtj'@;
put 'b250aW51ZTtjYXNlIDc6dz1DLm9wcy5wb3AoKSxDLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChOPShOPUMudHJ5cykubGVuZ3RoPjAmJk5bTi5sZW5ndGgtMV0pfHw2IT09d1swXSYmMiE9PXdbMF0pKXtDPTA7Y29udGludWV9aWYoMz09PXdbMF0mJighTnx8d1sxXT5OWzBd'@;
put 'JiZ3WzFdPE5bM10pKXtDLmxhYmVsPXdbMV07YnJlYWt9aWYoNj09PXdbMF0mJkMubGFiZWw8TlsxXSl7Qy5sYWJlbD1OWzFdLE49dzticmVha31pZihOJiZDLmxhYmVsPE5bMl0pe0MubGFiZWw9TlsyXSxDLm9wcy5wdXNoKHcpO2JyZWFrfU5bMl0mJkMub3BzLnBvcCgpLEMudHJ5cy5wb3Ao'@;
put 'KTtjb250aW51ZX13PWIuY2FsbChHLEMpfWNhdGNoKEope3c9WzYsSl0sSD0wfWZpbmFsbHl7RD1OPTB9aWYoNSZ3WzBdKXRocm93IHdbMV07cmV0dXJue3ZhbHVlOndbMF0/d1sxXTp2b2lkIDAsZG9uZTohMH19KFt2LHBdKX19fSxqPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihHLGIp'@;
put 'e3ZhciBEPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJkdbU3ltYm9sLml0ZXJhdG9yXTtpZighRClyZXR1cm4gRzt2YXIgSCxOLGc9RC5jYWxsKEcpLEM9W107dHJ5e2Zvcig7KHZvaWQgMD09PWJ8fGItLSA+MCkmJiEoSD1nLm5leHQoKSkuZG9uZTspQy5wdXNoKEgudmFsdWUpfWNhdGNo'@;
put 'KFMpe049e2Vycm9yOlN9fWZpbmFsbHl7dHJ5e0gmJiFILmRvbmUmJihEPWcucmV0dXJuKSYmRC5jYWxsKGcpfWZpbmFsbHl7aWYoTil0aHJvdyBOLmVycm9yfX1yZXR1cm4gQ30sVj10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKEcsYixEKXtpZihEfHwyPT09YXJndW1lbnRz'@;
put 'Lmxlbmd0aClmb3IodmFyIEgsTj0wLGc9Yi5sZW5ndGg7TjxnO04rKykhSCYmTiBpbiBifHwoSHx8KEg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYiwwLE4pKSxIW05dPWJbTl0pO3JldHVybiBHLmNvbmNhdChIfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiKSl9LEI9dGhpcyYm'@;
put 'dGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEcpe3JldHVybiBHJiZHLl9fZXNNb2R1bGU/Rzp7ZGVmYXVsdDpHfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNUZXN0RmlsZT1PLnRlc3RGaWxlUmVnRXhwPU8uY3JlYXRlUmVhZFN0'@;
put 'cmVhbT1PLmNyZWF0ZVdyaXRlU3RyZWFtPU8uZ2V0UmVhbFBhdGg9Ty5iYXNlNjRFbmNvZGVGaWxlPU8uYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPU8ucGF0aFNlcEVzY2FwZWQ9Ty5jb3B5PU8ubW92ZUZpbGU9Ty5nZXRSZWxhdGl2ZVBhdGg9Ty51bmlmeUZpbGVQYXRoPU8uZGVsZXRlRm9sZGVy'@;
put 'PU8uZGVsZXRlRmlsZT1PLmNyZWF0ZUZpbGU9Ty5jcmVhdGVGb2xkZXI9Ty5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9Ty5saXN0U3ViRm9sZGVyc0luRm9sZGVyPU8ubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9Ty5saXN0SW5pRmlsZXNJbkZvbGRlcj1PLmxpc3RGaWxlc0luRm9sZGVy'@;
put 'PU8ucmVhZEZpbGVCaW5hcnk9Ty5yZWFkRmlsZT1PLmlzRm9sZGVyPU8uZm9sZGVyRXhpc3RzPU8uZmlsZUV4aXN0cz12b2lkIDA7dmFyIFk9QihSKDU2NzQpKSxYPUIoUig5ODQpKSxVPUIoUigyNTIwKSkscT1SKDYyNjYpLGVlPUkoUigyOTc1KSk7ZnVuY3Rpb24gdGUoRyl7cmV0dXJuIGso'@;
put 'dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKEcsWS5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3Jl'@;
put 'dHVybiExfSldfSl9KX1mdW5jdGlvbiBvZShHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShHKV19KX0pfWZ1bmN0aW9uIHNlKEcpe3JldHVybiBrKHRo'@;
put 'aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oRCl7cmV0dXJuIEQuZmlsdGVyKGZ1bmN0aW9uKEgpe3JldHVybiFI'@;
put 'LmlzRGlyZWN0b3J5KCl9KS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZX0pfSldfSl9KX1mdW5jdGlvbiBoZShHLGIsRCl7cmV0dXJuIHZvaWQgMD09PWImJihiPSEwKSx2b2lkIDA9PT1EJiYoRD1bXSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSD10aGlzO3Jl'@;
put 'dHVybiBFKHRoaXMsZnVuY3Rpb24oTil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oZyl7cmV0dXJuIGsoSCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEMsUz10aGlzO3JldHVybiBFKHRoaXMsZnVu'@;
put 'Y3Rpb24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYiYmZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNEaXJlY3RvcnkoKX0pLmxlbmd0aD8oQz1bXSxbNCwoMCxxLmFzeW5jRm9yRWFjaCkoZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNEaXJlY3Rvcnko'@;
put 'KX0pLGZ1bmN0aW9uKHApe3JldHVybiBrKFMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB3LEosbmU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihkZSl7c3dpdGNoKGRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQuaW5jbHVkZXModz1wLm5hbWUpP1szLDJdOihKPVUuZGVmYXVsdC5qb2lu'@;
put 'KEcsdyksbmU9W1YoW10saihDKSwhMSldLFs0LGhlKEosYixEKV0pO2Nhc2UgMTpDPVYuYXBwbHkodm9pZCAwLG5lLmNvbmNhdChbai5hcHBseSh2b2lkIDAsW2RlLnNlbnQoKS5tYXAoZnVuY3Rpb24oZmUpe3JldHVybiBVLmRlZmF1bHQuam9pbih3LGZlKX0pXSksITFdKSksZGUubGFiZWw9'@;
put 'MjtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9KV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4gdi5zZW50KCksWzIsVihWKFtdLGooZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIXAuaXNEaXJlY3RvcnkoKX0pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcC5uYW1lfSkpLCExKSxqKEMpLCExKV07Y2Fz'@;
put 'ZSAyOnJldHVyblsyLGcubWFwKGZ1bmN0aW9uKHApe3JldHVybiBwLm5hbWV9KV19fSl9KX0pXX0pfSl9ZnVuY3Rpb24gdWUoRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlz'@;
put 'ZXMubWtkaXIoRyx7cmVjdXJzaXZlOiEwfSldfSl9KX1mdW5jdGlvbiBjZShHLGIsRCl7dm9pZCAwPT09YiYmKGI9VS5kZWZhdWx0LnNlcCksdm9pZCAwPT09RCYmKEQ9Ii8iKTt2YXIgSD17dW5peDoiLyIsd2luOiJcXCJ9LE49T2JqZWN0LmtleXMoSCkuZmluZChmdW5jdGlvbihDKXtyZXR1'@;
put 'cm4gSFtDXT09PWJ9KTtpZihOKXt2YXIgZz1IW09iamVjdC5rZXlzKEgpLmZpbmQoZnVuY3Rpb24oQyl7cmV0dXJuIEMhPT1OfSldO3JldHVybiBOPUhbTl0sRy5zcGxpdChnKS5qb2luKE4pfXJldHVybiBHLnNwbGl0KEQpLmpvaW4oYil9Ty5maWxlRXhpc3RzPWZ1bmN0aW9uKEcpe3JldHVy'@;
put 'biBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLmFjY2VzcyhHLFkuZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4hMX0pXX0pfSl9LE8uZm9sZGVyRXhpc3RzPXRlLE8uaXNGb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMubHN0YXQoRykudGhl'@;
put 'bihmdW5jdGlvbihEKXtyZXR1cm4gRC5pc0RpcmVjdG9yeSgpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pXX0pfSl9LE8ucmVhZEZpbGU9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9InV0ZjgiKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVy'@;
put 'biBFKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKEcsYildfSl9KX0sTy5yZWFkRmlsZUJpbmFyeT1vZSxPLmxpc3RGaWxlc0luRm9sZGVyPXNlLE8ubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHNlKEcpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCkuZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBELmVuZHNXaXRoKCIuaW5pIil9KV19fSl9KX0s'@;
put 'Ty5saXN0U2FzRmlsZXNJbkZvbGRlcj1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIHZvaWQgMD09PWImJihiPSExKSx2b2lkIDA9PT1EJiYoRD1bXSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6'@;
put 'cmV0dXJuWzQsaGUoRyxiLEQpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCkuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiBnLmVuZHNXaXRoKCIuc2FzIil9KV19fSl9KX0sTy5saXN0U3ViRm9sZGVyc0luRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oRCl7cmV0dXJuIEQuZmlsdGVyKGZ1bmN0aW9uKEgpe3JldHVybiBILmlzRGlyZWN0b3J5KCl9KS5t'@;
put 'YXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZX0pfSldfSl9KX0sTy5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9aGUsTy5jcmVhdGVGb2xkZXI9dWUsTy5jcmVhdGVGaWxlPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIg'@;
put 'SCxOO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4oRz1jZShHKSkuc3BsaXQoVS5kZWZhdWx0LnNlcCkubGVuZ3RoPjE/KChIPUcuc3BsaXQoVS5kZWZhdWx0LnNlcCkpLnBvcCgpLFs0LHRlKE49SC5qb2luKFUuZGVmYXVsdC5zZXApKV0p'@;
put 'OlszLDNdO2Nhc2UgMTpyZXR1cm4gZy5zZW50KCk/WzMsM106WzQsdWUoTildO2Nhc2UgMjpnLnNlbnQoKSxnLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy53cml0ZUZpbGUoRyxiLEQpXX19KX0pfSxPLmRlbGV0ZUZpbGU9ZnVuY3Rpb24oRyl7cmV0dXJuIGso'@;
put 'dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucmVtb3ZlKEcpXX0pfSl9LE8uZGVsZXRlRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBF'@;
put 'KHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oRCxIKXsoMCxYLmRlZmF1bHQpKEcse30sZnVuY3Rpb24oTil7cmV0dXJuIE4/SChOKTpEKCl9KX0pXX0pfSl9LE8udW5pZnlGaWxlUGF0aD1jZSxPLmdldFJlbGF0aXZlUGF0aD1mdW5jdGlvbihHLGIpe3Zh'@;
put 'ciBEPUcuc3BsaXQoVS5kZWZhdWx0LnNlcCksSD1iLnNwbGl0KFUuZGVmYXVsdC5zZXApLE49W10sZz1bXTtELmZvckVhY2goZnVuY3Rpb24ocCx3KXt2b2lkIDAhPT1IW3ddJiZEW3ddPT09SFt3XT9OLnB1c2gocCk6cCYmZy5wdXNoKHApfSk7dmFyIEM9Ti5qb2luKFUuZGVmYXVsdC5zZXAp'@;
put 'LFM9bmV3IFJlZ0V4cCgiXiIuY29uY2F0KFUuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpKSksdj1uZXcgUmVnRXhwKCIiLmNvbmNhdChVLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSwiJCIpKTtyZXR1cm4oZy5sZW5ndGg/Ii4uIi5jb25jYXQoVS5kZWZhdWx0'@;
put 'LnNlcCkucmVwZWF0KGcubGVuZ3RoKToiLiIuY29uY2F0KFUuZGVmYXVsdC5zZXApKStiLnJlcGxhY2UoQywiIikucmVwbGFjZShTLCIiKS5yZXBsYWNlKHYsIiIpfSxPLm1vdmVGaWxlPWZ1bmN0aW9uKEcsYil7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEUodGhpcyxmdW5jdGlvbihEKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMucmVuYW1lKEcsYildfSl9KX0sTy5jb3B5PWZ1bmN0aW9uKEcsYil7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtyZXR1cm5bMixZLmRl'@;
put 'ZmF1bHQuY29weShHLGIpXX0pfSl9LE8ucGF0aFNlcEVzY2FwZWQ9VS5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIiksTy5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxm'@;
put 'dW5jdGlvbihiKXtyZXR1cm5bMixvZShHKS50aGVuKGZ1bmN0aW9uKEQpe3ZhciBIPVUuZGVmYXVsdC5leHRuYW1lKEcpLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9PT1IJiYoSD0ic3ZnK3htbCIpLCJkYXRhOmltYWdlLyIrSCsiO2Jhc2U2NCwiK0QudG9TdHJpbmcoImJhc2U2NCIp'@;
put 'fSldfSl9KX0sTy5iYXNlNjRFbmNvZGVGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKEcse2VuY29kaW5nOiJiYXNlNjQifSld'@;
put 'fSl9KX0sTy5nZXRSZWFsUGF0aD1mdW5jdGlvbihHKXtyZXR1cm4gWS5kZWZhdWx0LnJlYWxwYXRoU3luYyhHKX0sTy5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3N3'@;
put 'aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsZWUuZmlsZUV4aXN0cyhHKV07Y2FzZSAxOnJldHVybiBiLnNlbnQoKT9bMixZLmRlZmF1bHQuY3JlYXRlV3JpdGVTdHJlYW0oRyx7ZmxhZ3M6ImEifSldOls0LGVlLmNyZWF0ZUZpbGUoRywiIildO2Nhc2UgMjpyZXR1cm4gYi5zZW50KCks'@;
put 'WzIsWS5kZWZhdWx0LmNyZWF0ZVdyaXRlU3RyZWFtKEcse2ZsYWdzOiJhIn0pXX19KX0pfSxPLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24oRyl7cmV0dXJuIGsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVm'@;
put 'YXVsdC5jcmVhdGVSZWFkU3RyZWFtKEcpXX0pfSl9LE8udGVzdEZpbGVSZWdFeHA9L1wudGVzdFwuKFxkK1wuKT9zYXMkL2ksTy5pc1Rlc3RGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBPLnRlc3RGaWxlUmVnRXhwLnRlc3QoRyl9fSw1NjI2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7'@;
put 'dmFyIHo9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGspe3JldHVybiBrJiZrLl9fZXNNb2R1bGU/azp7ZGVmYXVsdDprfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0QWJzb2x1dGVQYXRoPXZvaWQgMDt2YXIgSz16'@;
put 'KFIoMjUyMCkpLEk9eihSKDc0MzUpKTtPLmdldEFic29sdXRlUGF0aD1mdW5jdGlvbihrLEUpe3JldHVybiBLLmRlZmF1bHQuaXNBYnNvbHV0ZShrKXx8L15+Ly5leGVjKGspP0suZGVmYXVsdC5ub3JtYWxpemUoay5yZXBsYWNlKC9efi8sSS5kZWZhdWx0LmhvbWVkaXIoKSkpOksuZGVmYXVs'@;
put 'dC5qb2luKEUsayl9fSwyOTc1OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEUsaixWLEIpe3ZvaWQgMD09PUImJihCPVYpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLEIse2VudW1l'@;
put 'cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGpbVl19fSl9OmZ1bmN0aW9uKEUsaixWLEIpe3ZvaWQgMD09PUImJihCPVYpLEVbQl09altWXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIEUpImRlZmF1bHQiPT09Vnx8T2JqZWN0'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVil8fHooaixFLFYpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5yZWFkQ3N2PU8uY3JlYXRlQ3N2PU8udXBkYXRlQ3N2PU8udGVzdEZpbGVSZWdFeHA9Ty5pc1Rlc3RGaWxlPU8uZ2V0'@;
put 'UmVhbFBhdGg9Ty5iYXNlNjRFbmNvZGVGaWxlPU8uYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPU8uY29weT1PLnBhdGhTZXBFc2NhcGVkPU8ubW92ZUZpbGU9Ty51bmlmeUZpbGVQYXRoPU8uZ2V0UmVsYXRpdmVQYXRoPU8uZGVsZXRlRm9sZGVyPU8uZGVsZXRlRmlsZT1PLmNyZWF0ZVdyaXRlU3Ry'@;
put 'ZWFtPU8uY3JlYXRlUmVhZFN0cmVhbT1PLmNyZWF0ZUZvbGRlcj1PLmNyZWF0ZUZpbGU9Ty5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9Ty5saXN0U3ViRm9sZGVyc0luRm9sZGVyPU8ubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9Ty5saXN0SW5pRmlsZXNJbkZvbGRlcj1PLmxpc3RGaWxl'@;
put 'c0luRm9sZGVyPU8ucmVhZEZpbGVCaW5hcnk9Ty5yZWFkRmlsZT1PLmlzRm9sZGVyPU8uZm9sZGVyRXhpc3RzPU8uZmlsZUV4aXN0cz12b2lkIDA7dmFyIEk9UigxNTU5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZmlsZUV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEkuZmlsZUV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZm9sZGVyRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5mb2xkZXJFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImlzRm9sZGVyIix7ZW51bWVyYWJsZToh'@;
put 'MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc0ZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywicmVhZEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnJlYWRGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJyZWFkRmlsZUJpbmFyeSIs'@;
put 'e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucmVhZEZpbGVCaW5hcnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5saXN0RmlsZXNJbkZvbGRlcn19KSxPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoTywibGlzdEluaUZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RJbmlGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0U2FzRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6'@;
put 'ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubGlzdFNhc0ZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXJ9fSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjcmVhdGVGaWxl'@;
put 'Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jcmVhdGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjcmVhdGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNyZWF0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoTywiY3JlYXRlUmVhZFN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY3JlYXRlUmVhZFN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY3JlYXRlV3JpdGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy'@;
put 'biBJLmNyZWF0ZVdyaXRlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJkZWxldGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5kZWxldGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJkZWxldGVGb2xkZXIiLHtlbnVtZXJhYmxl'@;
put 'OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmRlbGV0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0UmVsYXRpdmVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZXRSZWxhdGl2ZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KE8sInVuaWZ5RmlsZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnVuaWZ5RmlsZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIm1vdmVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5tb3ZlRmlsZX19KSxPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoTywicGF0aFNlcEVzY2FwZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnBhdGhTZXBFc2NhcGVkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjb3B5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5j'@;
put 'b3B5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJiYXNlNjRFbmNvZGVJbWFnZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmJhc2U2NEVuY29kZUltYWdlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiYmFzZTY0RW5jb2RlRmlsZSIse2Vu'@;
put 'dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuYmFzZTY0RW5jb2RlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0UmVhbFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdldFJlYWxQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShPLCJpc1Rlc3RGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1Rlc3RGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ0ZXN0RmlsZVJlZ0V4cCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudGVzdEZpbGVSZWdF'@;
put 'eHB9fSk7dmFyIGs9UigzOTA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidXBkYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay51cGRhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNyZWF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGsuY3JlYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJyZWFkQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay5yZWFkQ3N2fX0pLEsoUig1NjI2KSxPKX0sMjc3NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm5ld0xpbmU9Ty5jYXBpdGFsaXplRmlyc3RDaGFyPU8uc2FuaXRpemVTcGVjaWFsQ2hhcnM9Ty5wYWRXaXRoTnVtYmVyPXZvaWQgMDt2YXIgej1SKDUzMDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJwYWRXaXRo'@;
put 'TnVtYmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gei5wYWRXaXRoTnVtYmVyfX0pO3ZhciBLPVIoOTI3NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInNhbml0aXplU3BlY2lhbENoYXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5z'@;
put 'YW5pdGl6ZVNwZWNpYWxDaGFyc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY2FwaXRhbGl6ZUZpcnN0Q2hhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsuY2FwaXRhbGl6ZUZpcnN0Q2hhcn19KTt2YXIgST1SKDE2MjgpO09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShPLCJuZXdMaW5lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5uZXdMaW5lfX0pfSw1MzA2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhZFdpdGhOdW1iZXI9dm9pZCAwLE8u'@;
put 'cGFkV2l0aE51bWJlcj1mdW5jdGlvbihSLHope3JldHVybiB2b2lkIDA9PT16JiYoej0wKSxSPjk/UjoiIi5jb25jYXQoeikuY29uY2F0KFIpfX0sMTYyODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLE8ubmV3TGluZT12b2lkIDAsTy5uZXdMaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIndpbjMyIj09PXoucGxhdGZvcm0/IlxcclxcbiI6IlxcbiJ9fSw5Mjc1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9'@;
put 'KSxPLmNhcGl0YWxpemVGaXJzdENoYXI9Ty5zYW5pdGl6ZVNwZWNpYWxDaGFycz12b2lkIDAsTy5zYW5pdGl6ZVNwZWNpYWxDaGFycz1mdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC9bXHUwMDFiXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkqKT9bMC05'@;
put 'QS1PUlpjZi1ucXJ5PT48XS9nLCIiKX0sTy5jYXBpdGFsaXplRmlyc3RDaGFyPWZ1bmN0aW9uKFIpe3JldHVybiBSLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Iuc2xpY2UoMSl9fSw2NDY3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2ltcG9ydERl'@;
put 'ZmF1bHR8fGZ1bmN0aW9uKEkpe3JldHVybiBJJiZJLl9fZXNNb2R1bGU/STp7ZGVmYXVsdDpJfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNTcGVjaWFsTWlzc2luZz1PLmNob2ljZVZhbGlkYXRvcj1PLmNvbmZpcm1hdGlvblZhbGlkYXRv'@;
put 'cj1PLnVybFZhbGlkYXRvcj12b2lkIDA7dmFyIEs9eihSKDQ4MSkpO08udXJsVmFsaWRhdG9yPWZ1bmN0aW9uKEksayl7cmV0dXJuISFLLmRlZmF1bHQuaXNIdHRwVXJpKEkpfHwhIUsuZGVmYXVsdC5pc0h0dHBzVXJpKEkpfHwiIj09PUl8fGt9LE8uY29uZmlybWF0aW9uVmFsaWRhdG9yPWZ1'@;
put 'bmN0aW9uKEkpe3JldHVybiEwPT09SXx8ITE9PT1JfSxPLmNob2ljZVZhbGlkYXRvcj1mdW5jdGlvbihJLGssRSl7cmV0dXJuIEk+MCYmSTw9a3x8RX0sTy5pc1NwZWNpYWxNaXNzaW5nPWZ1bmN0aW9uKEkpe3JldHVybigic3RyaW5nIiE9dHlwZW9mIEl8fCFJLmluY2x1ZGVzKCIuLiIpKSYm'@;
put 'bmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoSSl9fSw3NzU3OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVUaW1lc3RhbXA9Ty50aW1lc3RhbXBUb1lZWVlNTURE'@;
put 'SEhNTVNTPXZvaWQgMDt2YXIgej1SKDEzMDIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ0aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gei50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTfX0pLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShPLCJnZW5lcmF0ZVRpbWVzdGFtcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHouZ2VuZXJhdGVUaW1lc3RhbXB9fSl9LDEzMDI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'Ty5nZW5lcmF0ZVRpbWVzdGFtcD1PLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO3ZhciB6PVIoMjc3Nyk7Ty50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPWZ1bmN0aW9uKEspe3ZvaWQgMD09PUsmJihLPURhdGUubm93KCkpO3ZhciBJPW5ldyBEYXRlKEspO3JldHVybltJLmdl'@;
put 'dEZ1bGxZZWFyKCksKDAsei5wYWRXaXRoTnVtYmVyKShJLmdldE1vbnRoKCkrMSksKDAsei5wYWRXaXRoTnVtYmVyKShJLmdldERhdGUoKSldLmpvaW4oIi8iKSsiICIrWygwLHoucGFkV2l0aE51bWJlcikoSS5nZXRIb3VycygpKSwoMCx6LnBhZFdpdGhOdW1iZXIpKEkuZ2V0TWludXRlcygp'@;
put 'KSwoMCx6LnBhZFdpdGhOdW1iZXIpKEkuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpfSxPLmdlbmVyYXRlVGltZXN0YW1wPWZ1bmN0aW9uKEssSSl7dm9pZCAwPT09SyYmKEs9IiIpO3ZhciBrPW5ldyBEYXRlLEU9W2suZ2V0VVRDRnVsbFllYXIoKSxrLmdldFVUQ01vbnRoKCkrMSxrLmdldFVU'@;
put 'Q0RhdGUoKSxrLmdldFVUQ0hvdXJzKCksay5nZXRVVENNaW51dGVzKCksay5nZXRVVENTZWNvbmRzKCldO3JldHVybiBFPUUubWFwKGZ1bmN0aW9uKGope3JldHVybigwLHoucGFkV2l0aE51bWJlcikoail9KSxJJiZLJiZJPEUubGVuZ3RoJiZJPj0wJiZFLnNwbGljZShJLDAsSyksRS5qb2lu'@;
put 'KEk/IiI6Syl9fSw4MjM5OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNvbmZpZ1R5cGVzPXZvaWQgMCwoUj1PLkNvbmZpZ1R5cGVzfHwoTy5Db25maWdUeXBlcz17fSkpLkJ1aWxkPSJidWlsZENv'@;
put 'bmZpZyIsUi5TZXJ2aWNlPSJzZXJ2aWNlQ29uZmlnIixSLkpvYj0iam9iQ29uZmlnIixSLlRlc3Q9InRlc3RDb25maWciLFIuRG9jPSJkb2NDb25maWciLFIuRGVwbG95PSJkZXBsb3lDb25maWciLFIuU3RyZWFtPSJzdHJlYW1Db25maWciLFIuQXV0aD0iYXV0aENvbmZpZyJ9LDI0Mjc6KE0s'@;
put 'Tyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxODk6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzNjkyOihNLE8pPT57InVzZSBzdHJp'@;
put 'Y3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNjkzOTooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5NZW1iZXJUeXBlPXZvaWQgMCwoUj1PLk1lbWJl'@;
put 'clR5cGV8fChPLk1lbWJlclR5cGU9e30pKS5zZXJ2aWNlPSJzZXJ2aWNlIixSLmZpbGU9ImZpbGUiLFIuZm9sZGVyPSJmb2xkZXIifSwzMzI3OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTE2NTooTSxPKT0+'@;
put 'eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM5MDA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7'@;
put 'dm9pZCAwPT09aiYmKGo9RSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8'@;
put 'ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoODIzOSksTyksSyhSKDI0'@;
put 'MjcpLE8pLEsoUigxODkpLE8pLEsoUigzNjkyKSxPKSxLKFIoNjkzOSksTyksSyhSKDMzMjcpLE8pLEsoUig1MTY1KSxPKSxLKFIoNDA2OSksTyksSyhSKDg5MzIpLE8pLEsoUig0KSxPKSxLKFIoMjAxNSksTyksSyhSKDg1MTUpLE8pLEsoUig1MzEzKSxPKSxLKFIoODk3OSksTyl9LDQwNjk6'@;
put 'KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNNYWNyb1ZhcnM9dm9pZCAwLE8uaXNNYWNyb1ZhcnM9ZnVuY3Rpb24oUil7cmV0dXJuIFImJiJvYmplY3QiPT10eXBlb2YgUi5tYWNyb1ZhcnMmJiFBcnJheS5p'@;
put 'c0FycmF5KFIubWFjcm9WYXJzKX19LDg5MzI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KSxPLlNBU0pzRmlsZVR5cGU9dm9pZCAwLChSPU8uU0FTSnNGaWxlVHlwZXx8KE8uU0FTSnNGaWxlVHlwZT17fSkpLnNlcnZpY2U9IlNlcnZpY2UiLFIuam9iPSJKb2IiLFIudGVzdD0iVGVzdCIsUi5maWxlPSJGaWxlIn0sMjAxNTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTU6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2VydmVyVHlwZT12b2lkIDAsKFI9Ty5TZXJ2ZXJUeXBlfHwo'@;
put 'Ty5TZXJ2ZXJUeXBlPXt9KSkuU2FzVml5YT0iU0FTVklZQSIsUi5TYXM5PSJTQVM5IixSLlNhc2pzPSJTQVNKUyJ9LDUzMTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4OTc5OmZ1bmN0aW9uKE0sTyxSKXsi'@;
put 'dXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gej1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihqKXtmb3IodmFyIFYsQj0xLFk9YXJndW1lbnRzLmxlbmd0aDtCPFk7QisrKWZvcih2YXIgWCBpbiBWPWFyZ3VtZW50c1tCXSlPYmplY3QucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVixYKSYmKGpbWF09VltYXSk7cmV0dXJuIGp9LHouYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5UYXJnZXQ9dm9pZCAwO3ZhciBLPVIoODIzOSksST1SKDg1'@;
put 'MTUpLGs9Uig2NzgxKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaihWLEIpe3ZhciBZPXRoaXM7dm9pZCAwPT09QiYmKEI9e30pLHRoaXMuX3NlcnZlclR5cGU9SS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsdGhpcy5nZXRDb25maWc9ZnVuY3Rpb24oWCxVKXtyZXR1cm4geih6KHt9LFkuX2NvbmZpZ1tY'@;
put 'XXx8e30pLFVbWF0pfTt0cnl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldDogSW5wdXQgSlNPTiBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTt0aGlzLl9jb25maWc9Qix0aGlzLl9uYW1lPSgwLGsudmFsaWRhdGVUYXJnZXROYW1lKShWLm5hbWUpLHRoaXMuX3NlcnZlclVy'@;
put 'bD0oMCxrLnZhbGlkYXRlU2VydmVyVXJsKShWLnNlcnZlclVybCksdGhpcy5fc2VydmVyVHlwZT0oMCxrLnZhbGlkYXRlU2VydmVyVHlwZSkoVi5zZXJ2ZXJUeXBlKSx0aGlzLl9odHRwc0FnZW50T3B0aW9ucz0oMCxrLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnMpKFYuaHR0cHNBZ2VudE9w'@;
put 'dGlvbnMpLHRoaXMuX2FwcExvYz0oMCxrLnZhbGlkYXRlQXBwTG9jKShWLmFwcExvYyksdGhpcy5fY29udGV4dE5hbWU9KDAsay52YWxpZGF0ZUNvbnRleHROYW1lKShWLmNvbnRleHROYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3NlcnZlck5hbWU9KDAsay52YWxpZGF0ZVNlcnZlck5h'@;
put 'bWUpKFYuc2VydmVyTmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zeW5jRm9sZGVyPSgwLGsudmFsaWRhdGVTeW5jRm9sZGVyKShWLnN5bmNGb2xkZXIpLHRoaXMuX3JlcG9zaXRvcnlOYW1lPSgwLGsudmFsaWRhdGVSZXBvc2l0b3J5TmFtZSkoVi5yZXBvc2l0b3J5TmFtZSx0aGlzLl9z'@;
put 'ZXJ2ZXJUeXBlKSxWLmRvY0NvbmZpZyYmKHRoaXMuX2RvY0NvbmZpZz0oMCxrLnZhbGlkYXRlRG9jQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkRvYyxWKSkpLFYuYXV0aENvbmZpZyYmKHRoaXMuX2F1dGhDb25maWc9KDAsay52YWxpZGF0ZUF1dGhDb25maWcpKHRoaXMu'@;
put 'Z2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuQXV0aCxWKSkpLFYuYXV0aENvbmZpZ1NhczkmJih0aGlzLl9hdXRoQ29uZmlnU2FzOT0oMCxrLnZhbGlkYXRlQXV0aENvbmZpZ1NhczkpKFYuYXV0aENvbmZpZ1NhczkpKSxWLmJ1aWxkQ29uZmlnJiYodGhpcy5fYnVpbGRDb25maWc9KDAsay52YWxp'@;
put 'ZGF0ZUJ1aWxkQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkJ1aWxkLFYpLHRoaXMuX25hbWUpKSx0aGlzLl9kZXBsb3lDb25maWc9KDAsay52YWxpZGF0ZURlcGxveUNvbmZpZykoVi5kZXBsb3lDb25maWc/dGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5EZXBsb3ks'@;
put 'Vik6e2RlcGxveVNlcnZpY2VQYWNrOiEwLGRlcGxveVNjcmlwdHM6W119KSxWLnNlcnZpY2VDb25maWcmJih0aGlzLl9zZXJ2aWNlQ29uZmlnPSgwLGsudmFsaWRhdGVTZXJ2aWNlQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLlNlcnZpY2UsVikpKSxWLmpvYkNvbmZpZyYm'@;
put 'KHRoaXMuX2pvYkNvbmZpZz0oMCxrLnZhbGlkYXRlSm9iQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkpvYixWKSkpLFYuc3RyZWFtQ29uZmlnJiYodGhpcy5fc3RyZWFtQ29uZmlnPSgwLGsudmFsaWRhdGVTdHJlYW1Db25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmln'@;
put 'VHlwZXMuU3RyZWFtLFYpKSksVi50ZXN0Q29uZmlnJiYodGhpcy5fdGVzdENvbmZpZz0oMCxrLnZhbGlkYXRlVGVzdENvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5UZXN0LFYpKSksVi5tYWNyb0ZvbGRlcnMmJlYubWFjcm9Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX21hY3Jv'@;
put 'Rm9sZGVycz1WLm1hY3JvRm9sZGVycyksVi5wcm9ncmFtRm9sZGVycyYmVi5wcm9ncmFtRm9sZGVycy5sZW5ndGgmJih0aGlzLl9wcm9ncmFtRm9sZGVycz1WLnByb2dyYW1Gb2xkZXJzKSxWLmJpbmFyeUZvbGRlcnMmJlYuYmluYXJ5Rm9sZGVycy5sZW5ndGgmJih0aGlzLl9iaW5hcnlGb2xk'@;
put 'ZXJzPVYuYmluYXJ5Rm9sZGVycyksVi5zeW5jRGlyZWN0b3JpZXMmJlYuc3luY0RpcmVjdG9yaWVzLmxlbmd0aCYmKHRoaXMuX3N5bmNEaXJlY3Rvcmllcz0oMCxrLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzKShWLnN5bmNEaXJlY3RvcmllcykpfWNhdGNoKFgpe3Rocm93IG5ldyBFcnJvcigi'@;
put 'RXJyb3IgcGFyc2luZyB0YXJnZXQ6ICIuY29uY2F0KFgubWVzc2FnZSkpfX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJzZXJ2ZXJVcmwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmVyVXJsfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic2VydmVyVHlwZSIse2dldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXJ2ZXJUeXBlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiaHR0cHNBZ2VudE9wdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faHR0cHNBZ2VudE9wdGlv'@;
put 'bnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJhcHBMb2MiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwTG9jfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShqLnByb3RvdHlwZSwiZG9jQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY0NvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImF1dGhDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5fYXV0aENvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImF1dGhDb25maWdTYXM5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWdTYXM5fSxlbnVtZXJhYmxlOiEx'@;
put 'LGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiYnVpbGRDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVpbGRDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGou'@;
put 'cHJvdG90eXBlLCJkZXBsb3lDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVwbG95Q29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic2VydmljZUNvbmZpZyIse2dldDpmdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLl9zZXJ2aWNlQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiam9iQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2pvYkNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25m'@;
put 'aWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInN0cmVhbUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJlYW1Db25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJv'@;
put 'dG90eXBlLCJtYWNyb0ZvbGRlcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFjcm9Gb2xkZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwicHJvZ3JhbUZvbGRlcnMiLHtnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5fcHJvZ3JhbUZvbGRlcnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJiaW5hcnlGb2xkZXJzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JpbmFyeUZvbGRlcnN9LGVudW1lcmFibGU6'@;
put 'ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJjb250ZXh0TmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZXh0TmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'ai5wcm90b3R5cGUsInNlcnZlck5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmVyTmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInJlcG9zaXRvcnlOYW1lIix7Z2V0OmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlOYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwidGVzdENvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZXN0Q29uZmlnfSxlbnVtZXJhYmxlOiExLGNv'@;
put 'bmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic3luY0ZvbGRlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeW5jRm9sZGVyfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3Rv'@;
put 'dHlwZSwic3luY0RpcmVjdG9yaWVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N5bmNEaXJlY3Rvcmllc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxqLnByb3RvdHlwZS50b0pzb249ZnVuY3Rpb24oVil7dmFyIEIsWSxYO3ZvaWQgMD09PVYmJihWPSEwKTt2YXIg'@;
put 'VT17bmFtZTp0aGlzLm5hbWUsc2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHNlcnZlclR5cGU6dGhpcy5zZXJ2ZXJUeXBlLGh0dHBzQWdlbnRPcHRpb25zOnRoaXMuaHR0cHNBZ2VudE9wdGlvbnMsYXBwTG9jOnRoaXMuYXBwTG9jLGRvY0NvbmZpZzp0aGlzLmRvY0NvbmZpZyxkZXBsb3lDb25m'@;
put 'aWc6dGhpcy5kZXBsb3lDb25maWd9O3JldHVybiEobnVsbD09PShCPXRoaXMubWFjcm9Gb2xkZXJzKXx8dm9pZCAwPT09QikmJkIubGVuZ3RoJiYoVS5tYWNyb0ZvbGRlcnM9dGhpcy5tYWNyb0ZvbGRlcnMpLCEobnVsbD09PShZPXRoaXMucHJvZ3JhbUZvbGRlcnMpfHx2b2lkIDA9PT1ZKSYm'@;
put 'WS5sZW5ndGgmJihVLnByb2dyYW1Gb2xkZXJzPXRoaXMucHJvZ3JhbUZvbGRlcnMpLCEobnVsbD09PShYPXRoaXMuYmluYXJ5Rm9sZGVycyl8fHZvaWQgMD09PVgpJiZYLmxlbmd0aCYmKFUuYmluYXJ5Rm9sZGVycz10aGlzLmJpbmFyeUZvbGRlcnMpLHRoaXMuYXV0aENvbmZpZyYmKFUuYXV0'@;
put 'aENvbmZpZz10aGlzLmF1dGhDb25maWcpLHRoaXMuYXV0aENvbmZpZ1NhczkmJihVLmF1dGhDb25maWdTYXM5PXRoaXMuYXV0aENvbmZpZ1NhczkpLHRoaXMuc3luY0RpcmVjdG9yaWVzP1Uuc3luY0RpcmVjdG9yaWVzPXRoaXMuc3luY0RpcmVjdG9yaWVzOlYmJihVLnN5bmNEaXJlY3Rvcmll'@;
put 'cz1bXSksdGhpcy5idWlsZENvbmZpZz9VLmJ1aWxkQ29uZmlnPXRoaXMuYnVpbGRDb25maWc6ViYmKFUuYnVpbGRDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLGJ1aWxkT3V0cHV0RmlsZU5hbWU6IiIuY29uY2F0KHRoaXMubmFtZSwiLnNhcyIpLGJ1aWxkT3V0cHV0Rm9s'@;
put 'ZGVyOiJzYXNqc2J1aWxkIixidWlsZFJlc3VsdHNGb2xkZXI6InNhc2pzcmVzdWx0cyIsbWFjcm9WYXJzOnt9fSksdGhpcy5qb2JDb25maWc/VS5qb2JDb25maWc9dGhpcy5qb2JDb25maWc6ViYmKFUuam9iQ29uZmlnPXtqb2JGb2xkZXJzOltdLGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFt'@;
put 'OiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc2VydmljZUNvbmZpZz9VLnNlcnZpY2VDb25maWc9dGhpcy5zZXJ2aWNlQ29uZmlnOlYmJihVLnNlcnZpY2VDb25maWc9e3NlcnZpY2VGb2xkZXJzOltdLGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc3Ry'@;
put 'ZWFtQ29uZmlnP1Uuc3RyZWFtQ29uZmlnPXRoaXMuc3RyZWFtQ29uZmlnOlYmJihVLnN0cmVhbUNvbmZpZz17c3RyZWFtV2ViRm9sZGVyOiIiLHN0cmVhbVdlYjohMSx3ZWJTb3VyY2VQYXRoOiIiLHN0cmVhbVNlcnZpY2VOYW1lOiIiLGFzc2V0UGF0aHM6W119KSx0aGlzLnRlc3RDb25maWc/'@;
put 'VS50ZXN0Q29uZmlnPXRoaXMudGVzdENvbmZpZzpWJiYoVS50ZXN0Q29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e30sdGVzdFNldFVwOiIiLHRlc3RUZWFyRG93bjoiIn0pLHRoaXMuc2VydmVyVHlwZT09PUkuU2VydmVyVHlwZS5TYXNWaXlhP1UuY29u'@;
put 'dGV4dE5hbWU9dGhpcy5jb250ZXh0TmFtZTp0aGlzLnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzOSYmKFUuc2VydmVyTmFtZT10aGlzLnNlcnZlck5hbWUsVS5yZXBvc2l0b3J5TmFtZT10aGlzLnJlcG9zaXRvcnlOYW1lKSxVfSxqfSgpO08uVGFyZ2V0PUV9LDY3ODE6ZnVuY3Rpb24o'@;
put 'TSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oayl7cmV0dXJuIGsmJmsuX19lc01vZHVsZT9rOntkZWZhdWx0Omt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy52YWxpZGF0ZVN5'@;
put 'bmNEaXJlY3Rvcmllcz1PLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9Ty52YWxpZGF0ZVN5bmNGb2xkZXI9Ty52YWxpZGF0ZVNlcnZlck5hbWU9Ty52YWxpZGF0ZUNvbnRleHROYW1lPU8udmFsaWRhdGVTdHJlYW1Db25maWc9Ty52YWxpZGF0ZURlcGxveUNvbmZpZz1PLnZhbGlkYXRlSm9iQ29u'@;
put 'ZmlnPU8udmFsaWRhdGVUZXN0Q29uZmlnPU8udmFsaWRhdGVTZXJ2aWNlQ29uZmlnPU8udmFsaWRhdGVCdWlsZENvbmZpZz1PLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9Ty52YWxpZGF0ZUF1dGhDb25maWc9Ty52YWxpZGF0ZURvY0NvbmZpZz1PLnZhbGlkYXRlQXBwTG9jPU8udmFsaWRhdGVI'@;
put 'dHRwc0FnZW50T3B0aW9ucz1PLnZhbGlkYXRlU2VydmVyVXJsPU8udmFsaWRhdGVUYXJnZXROYW1lPU8udmFsaWRhdGVTZXJ2ZXJUeXBlPXZvaWQgMDt2YXIgSz16KFIoNDgxKSksST1SKDM5MDApO08udmFsaWRhdGVTZXJ2ZXJUeXBlPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJv'@;
put 'cigiSW52YWxpZCBzZXJ2ZXIgdHlwZTogYHNlcnZlclR5cGVgIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihrIT09SS5TZXJ2ZXJUeXBlLlNhczkmJmshPT1JLlNlcnZlclR5cGUuU2FzVml5YSYmayE9PUkuU2VydmVyVHlwZS5TYXNqcyl0aHJvdyBuZXcgRXJyb3IoIkludmFs'@;
put 'aWQgc2VydmVyIHR5cGU6IFN1cHBvcnRlZCB2YWx1ZXMgZm9yICBgc2VydmVyVHlwZWAgYXJlICIuY29uY2F0KEkuU2VydmVyVHlwZS5TYXNWaXlhLCIsICIpLmNvbmNhdChJLlNlcnZlclR5cGUuU2FzOSwiIGFuZCAiKS5jb25jYXQoSS5TZXJ2ZXJUeXBlLlNhc2pzLCIuIikpO3JldHVybiBr'@;
put 'fSxPLnZhbGlkYXRlVGFyZ2V0TmFtZT1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKGsudHJpbSgpLmluY2x1ZGVzKCIgIikpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGluY2x1ZGUgc3BhY2VzLiIpO2lmKCEvXlthLXpBLVowLTlcLV0rJC9pLnRlc3QoaykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hh'@;
put 'cmFjdGVycyBhbmQgZGFzaGVzLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlU2VydmVyVXJsPWZ1bmN0aW9uKGspe2lmKG51bGw9PWsmJihrPSIiKSwiIiE9PWsmJiFLLmRlZmF1bHQuaXNIdHRwVXJpKGspJiYhSy5kZWZhdWx0LmlzSHR0cHNVcmkoaykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlk'@;
put 'IHNlcnZlciBVUkw6IGBzZXJ2ZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9ZnVuY3Rp'@;
put 'b24oayl7aWYoayl7aWYoIm9iamVjdCIhPXR5cGVvZiBrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGFuIG9iamVjdCBvZiBgSHR0cHNBZ2VudE9wdGlvbnNgIik7aWYobnVsbD09ay5hbGxv'@;
put 'd0luc2VjdXJlUmVxdWVzdHMpay5hbGxvd0luc2VjdXJlUmVxdWVzdHM9ITE7ZWxzZSBpZigiYm9vbGVhbiIhPXR5cGVvZiBrLmFsbG93SW5zZWN1cmVSZXF1ZXN0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9ucy5hbGxvd0luc2VjdXJlUmVxdWVz'@;
put 'dHNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYSBib29sZWFuIik7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBrLmNhUGF0aCYmKGsuY2FQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBrLmtleVBhdGgmJihrLmtleVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIGsuY2Vy'@;
put 'dFBhdGgmJihrLmNlcnRQYXRoPXZvaWQgMCksa319LE8udmFsaWRhdGVBcHBMb2M9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighay5zdGFydHNX'@;
put 'aXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgbXVzdCBzdGFydCB3aXRoIGEgYC9gLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlRG9jQ29uZmlnPWZ1bmN0aW9uKGspe2lmKGt8fChrPXt9KSwiYm9vbGVhbiIhPXR5cGVvZiBrLmRpc3BsYXlN'@;
put 'YWNyb0NvcmUmJihrLmRpc3BsYXlNYWNyb0NvcmU9dm9pZCAwKSwiYm9vbGVhbiIhPXR5cGVvZiBrLmVuYWJsZUxpbmVhZ2UmJihrLmVuYWJsZUxpbmVhZ2U9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIGsub3V0RGlyZWN0b3J5JiYoay5vdXREaXJlY3Rvcnk9dm9pZCAwKSwic3RyaW5nIj09'@;
put 'dHlwZW9mIGsuZGF0YUNvbnRyb2xsZXJVcmwpe2lmKCIiIT09ay5kYXRhQ29udHJvbGxlclVybCYmIUsuZGVmYXVsdC5pc0h0dHBVcmkoay5kYXRhQ29udHJvbGxlclVybCkmJiFLLmRlZmF1bHQuaXNIdHRwc1VyaShrLmRhdGFDb250cm9sbGVyVXJsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFs'@;
put 'aWQgRGF0YSBDb250cm9sbGVyIFVybDogYGRhdGFDb250cm9sbGVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKX1lbHNlIGsuZGF0YUNvbnRyb2xsZXJVcmw9'@;
put 'dm9pZCAwO3JldHVybiBrfSxPLnZhbGlkYXRlQXV0aENvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9'@;
put 'ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighay51c2VyTmFtZXx8IWsucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmln'@;
put 'IGZvciBzYXM5OiB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgY2FuIG5vdCBiZSBlbXB0eSIpO3JldHVybiBrfSxPLnZhbGlkYXRlQnVpbGRDb25maWc9ZnVuY3Rpb24oayxFKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYnVpbGQgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9y'@;
put 'IHVuZGVmaW5lZC4iKTtyZXR1cm4gay5idWlsZFJlc3VsdHNGb2xkZXJ8fChrLmJ1aWxkUmVzdWx0c0ZvbGRlcj0ic2FzanNyZXN1bHRzIiksay5idWlsZE91dHB1dEZvbGRlcnx8KGsuYnVpbGRPdXRwdXRGb2xkZXI9InNhc2pzYnVpbGQiKSxrLmJ1aWxkT3V0cHV0RmlsZU5hbWV8fChrLmJ1'@;
put 'aWxkT3V0cHV0RmlsZU5hbWU9IiIuY29uY2F0KEUsIi5zYXMiKSksay5pbml0UHJvZ3JhbXx8KGsuaW5pdFByb2dyYW09IiIpLGsudGVybVByb2dyYW18fChrLnRlcm1Qcm9ncmFtPSIiKSxrLm1hY3JvVmFyc3x8KGsubWFjcm9WYXJzPXt9KSxrfSxPLnZhbGlkYXRlU2VydmljZUNvbmZpZz1m'@;
put 'dW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmljZSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmluaXRQcm9ncmFtfHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJtUHJvZ3JhbXx8KGsudGVybVByb2dyYW09'@;
put 'IiIpLGsuc2VydmljZUZvbGRlcnN8fChrLnNlcnZpY2VGb2xkZXJzPVtdKSxrLm1hY3JvVmFyc3x8KGsubWFjcm9WYXJzPXt9KSxrfSxPLnZhbGlkYXRlVGVzdENvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGVzdCBjb25maWc6IEpTT04gY2Fubm90'@;
put 'IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmluaXRQcm9ncmFtfHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJtUHJvZ3JhbXx8KGsudGVybVByb2dyYW09IiIpLGsubWFjcm9WYXJzfHwoay5tYWNyb1ZhcnM9e30pLGsudGVzdFNldFVwfHwoay50ZXN0U2V0VXA9IiIpLGsudGVz'@;
put 'dFRlYXJEb3dufHwoay50ZXN0VGVhckRvd249IiIpLGt9LE8udmFsaWRhdGVKb2JDb25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGpvYiBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmluaXRQcm9ncmFt'@;
put 'fHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJtUHJvZ3JhbXx8KGsudGVybVByb2dyYW09IiIpLGsuam9iRm9sZGVyc3x8KGsuam9iRm9sZGVycz1bXSksay5tYWNyb1ZhcnN8fChrLm1hY3JvVmFycz17fSksa30sTy52YWxpZGF0ZURlcGxveUNvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkludmFsaWQgZGVwbG95IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuZGVwbG95U2VydmljZVBhY2s9ISFrLmRlcGxveVNlcnZpY2VQYWNrLGsuZGVwbG95U2NyaXB0c3x8KGsuZGVwbG95U2NyaXB0cz1bXSksa30sTy52'@;
put 'YWxpZGF0ZVN0cmVhbUNvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoITAhPT1rLnN0cmVhbVdlYiYmITEhPT1rLnN0cmVhbVdlYil0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYmAgY2Fubm90IGJlIGEgbm9uLWJvb2xlYW4gdmFsdWUuIik7aWYoay5zdHJlYW1XZWImJiFrLnN0cmVhbVdlYkZvbGRlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYkZvbGRlcmAg'@;
put 'Y2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGBzdHJlYW1XZWJgIGlzIHRydWUuIik7aWYoay5zdHJlYW1XZWImJiFrLndlYlNvdXJjZVBhdGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGB3ZWJTb3VyY2VQYXRoYCBjYW5ub3QgYmUgZW1w'@;
put 'dHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLnN0cmVhbUxvZ28mJiJzdHJpbmciIT10eXBlb2Ygay5zdHJlYW1Mb2dvJiYoay5zdHJlYW1Mb2dvPXZvaWQgMCksay5hc3NldFBhdGhzfHwoay5hc3NldFBhdGhzPVtdKSxrLnN0cmVhbVNlcnZpY2VOYW1lfHwoay5zdHJlYW1TZXJ2'@;
put 'aWNlTmFtZT0iY2xpY2ttZSIpLGt9LE8udmFsaWRhdGVDb250ZXh0TmFtZT1mdW5jdGlvbihrLEUpe3JldHVybiBFIT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWF8fGs/azoiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0sTy52YWxpZGF0ZVNlcnZlck5hbWU9ZnVuY3Rpb24oayxF'@;
put 'KXtyZXR1cm4gRSE9PUkuU2VydmVyVHlwZS5TYXM5fHxrP2s6IlNBU0FwcCJ9LE8udmFsaWRhdGVTeW5jRm9sZGVyPWZ1bmN0aW9uKGspe2lmKCJzdHJpbmciPT10eXBlb2YgayYmaylyZXR1cm4ga30sTy52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPWZ1bmN0aW9uKGssRSl7cmV0dXJuIEUhPT1J'@;
put 'LlNlcnZlclR5cGUuU2FzOXx8az9rOiJGb3VuZGF0aW9uIn0sTy52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yaWVzIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7'@;
put 'cmV0dXJuIGsuZm9yRWFjaChmdW5jdGlvbihFKXtpZighRS5sb2NhbHx8IUUucmVtb3RlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3J5IGNvbmZpZzogdmFsdWVzIG9mIHByb3BlcnR5ICdsb2NhbCcgYW5kICdyZW1vdGUgY2FuIG5vdCBiZSBlbXB0eSBvciB1bmRlZmlu'@;
put 'ZWQiKX0pLGt9fSwyOTI3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJkUuX19lc01vZHVsZT9FOntkZWZhdWx0OkV9fTtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kZWNvZGVGcm9tQmFzZTY0PU8uZW5jb2RlVG9CYXNlNjQ9dm9pZCAwO3ZhciBJPUsoUig1ODM1KSksaz0ie3Nhc2pzX2VuY29kZWR9IjtPLmVuY29kZVRvQmFzZTY0PWZ1bmN0aW9uKEUpe3ZhciBqPUkuZGVmYXVsdC5yYW5kb21CeXRl'@;
put 'cygxMDApLnRvU3RyaW5nKCJoZXgiKSxWPXouZnJvbShqK0UpLnRvU3RyaW5nKCJiYXNlNjQiKTtyZXR1cm4gaytWfSxPLmRlY29kZUZyb21CYXNlNjQ9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuc3RhcnRzV2l0aChrKT8oRT1FLnJlcGxhY2UoL157c2FzanNfZW5jb2RlZH0vLCIiKSx6LmZyb20o'@;
put 'RSwiYmFzZTY0IikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMjAwKSk6RX19LDU4MTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5ieXRlc1RvU2l6ZT12b2lkIDAsTy5ieXRlc1RvU2l6ZT1mdW5jdGlvbihSLHos'@;
put 'Syl7aWYodm9pZCAwPT09eiYmKHo9MSksdm9pZCAwPT09SyYmKEs9MTA5OTUxMTYyNzc3NiksMD09PVIpcmV0dXJuIjAgQiI7Uj1SPks/SzpSO3ZhciBJPXo8MD8wOnosaz1NYXRoLmZsb29yKE1hdGgubG9nKFIpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oUi9NYXRoLnBvdygxMDI0LGspKS50'@;
put 'b0ZpeGVkKEkpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW2tdfX0sODY1MzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jaHVuaz12b2lkIDAsTy5jaHVuaz1mdW5jdGlvbihSLHope3JldHVybiB2'@;
put 'b2lkIDA9PT16JiYoej0yMjApLFIubGVuZ3RoPD16P1tSXTooUi5tYXRjaChuZXcgUmVnRXhwKCIuezEsIit6KyJ9IiwiZyIpKXx8W10pLmZpbHRlcihmdW5jdGlvbihLKXtyZXR1cm4hIUt9KX19LDY0NTc6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFI9dGhpcyYmdGhpcy5fX3Jl'@;
put 'YWR8fGZ1bmN0aW9uKEssSSl7dmFyIGs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmS1tTeW1ib2wuaXRlcmF0b3JdO2lmKCFrKXJldHVybiBLO3ZhciBFLGosVj1rLmNhbGwoSyksQj1bXTt0cnl7Zm9yKDsodm9pZCAwPT09SXx8SS0tID4wKSYmIShFPVYubmV4dCgpKS5kb25lOylCLnB1'@;
put 'c2goRS52YWx1ZSl9Y2F0Y2goWSl7aj17ZXJyb3I6WX19ZmluYWxseXt0cnl7RSYmIUUuZG9uZSYmKGs9Vi5yZXR1cm4pJiZrLmNhbGwoVil9ZmluYWxseXtpZihqKXRocm93IGouZXJyb3J9fXJldHVybiBCfSx6PXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oSyxJLGspe2lm'@;
put 'KGt8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgRSxqPTAsVj1JLmxlbmd0aDtqPFY7aisrKSFFJiZqIGluIEl8fChFfHwoRT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJLDAsaikpLEVbal09SVtqXSk7cmV0dXJuIEsuY29uY2F0KEV8fEFycmF5LnByb3RvdHlwZS5zbGljZS5j'@;
put 'YWxsKEkpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZGlmZj12b2lkIDAsTy5kaWZmPWZ1bmN0aW9uKEssSSl7dmFyIGs9Sy5maWx0ZXIoZnVuY3Rpb24oail7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBqPyFKU09OLnN0cmluZ2lmeShJKS5p'@;
put 'bmNsdWRlcyhKU09OLnN0cmluZ2lmeShqKSk6IUkuaW5jbHVkZXMoail9KSxFPUkuZmlsdGVyKGZ1bmN0aW9uKGope3JldHVybiJvYmplY3QiPT10eXBlb2Ygaj8hSlNPTi5zdHJpbmdpZnkoSykuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkoaikpOiFLLmluY2x1ZGVzKGopfSk7cmV0dXJuIHoo'@;
put 'eihbXSxSKGspLCExKSxSKEUpLCExKX19LDE1Mjk6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0RXhlY3V0b3JQYXRoPXZvaWQgMDt2YXIgUj17U0FTVklZQToiL1NBU0pvYkV4ZWN1dGlvbiIsU0FTOToi'@;
put 'L1NBU1N0b3JlZFByb2Nlc3MvZG8ifTtPLmdldEV4ZWN1dG9yUGF0aD1mdW5jdGlvbih6KXtyZXR1cm4gej8oej16LnRvVXBwZXJDYXNlKCksUlt6XXx8IiIpOiIifX0sMzMxNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KSxPLmdldFRyZWVFeGFtcGxlPU8uaXNGaWxlVHJlZT12b2lkIDA7dmFyIHo9UigzOTAwKTtPLmlzRmlsZVRyZWU9ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJkUubWVtYmVycyYmQXJyYXkuaXNBcnJheShFLm1lbWJlcnMpJiYwPT09RS5tZW1iZXJzLmZpbHRlcihmdW5jdGlvbihqKXty'@;
put 'ZXR1cm4hSyhqKSYmIUkoaikmJiFrKGopfSkubGVuZ3RofTt2YXIgSz1mdW5jdGlvbihFKXtyZXR1cm4gRSYmInN0cmluZyI9PXR5cGVvZiBFLm5hbWUmJkUudHlwZT09PXouTWVtYmVyVHlwZS5zZXJ2aWNlJiYic3RyaW5nIj09dHlwZW9mIEUuY29kZX0sST1mdW5jdGlvbihFKXtyZXR1cm4g'@;
put 'RSYmInN0cmluZyI9PXR5cGVvZiBFLm5hbWUmJkUudHlwZT09PXouTWVtYmVyVHlwZS5maWxlJiYic3RyaW5nIj09dHlwZW9mIEUuY29kZX0saz1mdW5jdGlvbihFKXtyZXR1cm4gRSYmInN0cmluZyI9PXR5cGVvZiBFLm5hbWUmJkUudHlwZT09PXouTWVtYmVyVHlwZS5mb2xkZXImJkUubWVt'@;
put 'YmVycyYmQXJyYXkuaXNBcnJheShFLm1lbWJlcnMpJiYwPT09RS5tZW1iZXJzLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4hSyhqKSYmIUkoaikmJiFrKGopfSkubGVuZ3RofTtPLmdldFRyZWVFeGFtcGxlPWZ1bmN0aW9uKCl7cmV0dXJue21lbWJlcnM6W3tuYW1lOiJqb2JzIix0eXBlOnou'@;
put 'TWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6ImV4dHJhY3QiLHR5cGU6ei5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToibWFrZWRhdGExIix0eXBlOnouTWVtYmVyVHlwZS5zZXJ2aWNlLGNvZGU6IiVwdXQgSGVsbG8gV29ybGQhOyJ9XX1dfV19fX0sNjI2NjpmdW5j'@;
put 'dGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihYLFUscSxlZSl7dm9pZCAwPT09ZWUmJihlZT1xKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCxlZSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gVVtxXX19KX06ZnVuY3Rpb24oWCxVLHEsZWUpe3ZvaWQgMD09PWVlJiYoZWU9cSksWFtlZV09VVtxXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKFgsVSl7Zm9yKHZhciBxIGluIFgpImRlZmF1bHQiPT09cXx8T2JqZWN0LnByb3RvdHlwZS5oYXNP'@;
put 'd25Qcm9wZXJ0eS5jYWxsKFUscSl8fHooVSxYLHEpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jaHVuaz1PLmRpZmY9Ty5ieXRlc1RvU2l6ZT1PLmdldEV4ZWN1dG9yUGF0aD1PLmRlY29kZUZyb21CYXNlNjQ9Ty5lbmNvZGVUb0Jhc2U2ND1P'@;
put 'LnVybE9yaWdpbj1PLmdlbmVyYXRlUGF0aEZvclNhcz1PLmdldE1hY3Jvc1BhdGg9Ty5lc2NhcGVXaW5TbGFzaGVzPU8uaXNMaW51eD1PLmlzV2luZG93cz1PLnVuaXFBcnJheT1PLmFzeW5jRm9yRWFjaD1PLnV1aWR2ND12b2lkIDA7dmFyIEk9UigxMTMxKTtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTywidXVpZHY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS51dWlkdjR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImFzeW5jRm9yRWFjaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuYXN5bmNGb3JFYWNofX0pLE9iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShPLCJ1bmlxQXJyYXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnVuaXFBcnJheX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiaXNXaW5kb3dzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1dpbmRvd3N9'@;
put 'fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImlzTGludXgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmlzTGludXh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImVzY2FwZVdpblNsYXNoZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy'@;
put 'biBJLmVzY2FwZVdpblNsYXNoZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdldE1hY3Jvc1BhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdldE1hY3Jvc1BhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdlbmVyYXRlUGF0aEZvclNhcyIs'@;
put 'e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2VuZXJhdGVQYXRoRm9yU2FzfX0pLEsoUigzMzE2KSxPKTt2YXIgaz1SKDk2NTIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ1cmxPcmlnaW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrLnVy'@;
put 'bE9yaWdpbn19KTt2YXIgRT1SKDI5MjcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJlbmNvZGVUb0Jhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuZW5jb2RlVG9CYXNlNjR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImRlY29kZUZyb21CYXNlNjQi'@;
put 'LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmRlY29kZUZyb21CYXNlNjR9fSk7dmFyIGo9UigxNTI5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0RXhlY3V0b3JQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gai5nZXRFeGVjdXRv'@;
put 'clBhdGh9fSk7dmFyIFY9Uig1ODEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJieXRlc1RvU2l6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFYuYnl0ZXNUb1NpemV9fSk7dmFyIEI9Uig2NDU3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZGlmZiIse2VudW1l'@;
put 'cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuZGlmZn19KTt2YXIgWT1SKDg2NTMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjaHVuayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFkuY2h1bmt9fSl9LDk2NTI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udXJsT3JpZ2luPXZvaWQgMCxPLnVybE9yaWdpbj1mdW5jdGlvbihSKXtpZigiIj09PVIpcmV0dXJuIFI7dmFyIHo7dHJ5e3o9bmV3IFVSTChSKS5vcmlnaW59Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZh'@;
put 'bGlkIFVSTC4iKX1yZXR1cm4gen19LDExMzE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShv'@;
put 'ZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0ZShZLnRocm93KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNlPW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9z'@;
put 'ZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBd'@;
put 'KXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgwKSx0aHJvdzplZSgxKSxyZXR1cm46ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVu'@;
put 'Y3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRo'@;
put 'cm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFdKSkuZG9uZSlyZXR1cm4gWDtzd2l0Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFi'@;
put 'ZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMpLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8'@;
put 'NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFdPlhbMF0mJnNlWzFdPFhbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhbMV0sWD1zZTticmVha31pZihYJiZxLmxhYmVs'@;
put 'PFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2'@;
put 'YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19LGs9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGope3JldHVybiBqJiZqLl9fZXNNb2R1bGU/ajp7ZGVmYXVsdDpqfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLE8uZ2VuZXJhdGVQYXRoRm9yU2FzPU8uZ2V0TWFjcm9zUGF0aD1PLmVzY2FwZVdpblNsYXNoZXM9Ty5pc0xpbnV4PU8uaXNXaW5kb3dzPU8udW5pcUFycmF5PU8udXVpZHY0PU8uYXN5bmNGb3JFYWNoPXZvaWQgMDt2YXIgRT1rKFIoMjUyMCkpO08uYXN5bmNGb3JFYWNoPWZ1'@;
put 'bmN0aW9uKGosVil7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEI7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihZKXtzd2l0Y2goWS5sYWJlbCl7Y2FzZSAwOkI9MCxZLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBCPGoubGVuZ3RoP1s0LFYoaltCXSxCLGopXTpbMyw0'@;
put 'XTtjYXNlIDI6WS5zZW50KCksWS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gQisrLFszLDFdO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0sTy51dWlkdjQ9ZnVuY3Rpb24oKXtyZXR1cm4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csZnVuY3Rpb24o'@;
put 'ail7dmFyIFY9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PWo/VjozJlZ8OCkudG9TdHJpbmcoMTYpfSl9LE8udW5pcUFycmF5PWZ1bmN0aW9uKGope3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoaikpfSxPLmlzV2luZG93cz1mdW5jdGlvbigpe3JldHVybiJ3aW4zMiI9PT16LnBs'@;
put 'YXRmb3JtfSxPLmlzTGludXg9ZnVuY3Rpb24oKXtyZXR1cm4ibGludXgiPT09ei5wbGF0Zm9ybX0sTy5lc2NhcGVXaW5TbGFzaGVzPWZ1bmN0aW9uKGope3JldHVybigwLE8uaXNXaW5kb3dzKSgpP2oucmVwbGFjZSgvXFwvZywiXFxcXCIpOmp9LE8uZ2V0TWFjcm9zUGF0aD1mdW5jdGlvbigp'@;
put 'e3JldHVybiBFLmRlZmF1bHQuam9pbigiLyIsIi4uIiwibWFjcm9zIil9LE8uZ2VuZXJhdGVQYXRoRm9yU2FzPWZ1bmN0aW9uKGope3JldHVybiBqLnJlcGxhY2UoL1xcL2csIi8iKX19LDk4MDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PU87ei5iaWdudW09Uig0NTkwKSx6LmRl'@;
put 'ZmluZT1SKDI1MDApLmRlZmluZSx6LmJhc2U9UigxOTc5KSx6LmNvbnN0YW50cz1SKDY4MjYpLHouZGVjb2RlcnM9Uig4MzA3KSx6LmVuY29kZXJzPVIoNjU3OSl9LDI1MDA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNjU3OSksSz1SKDgzMDcpLEk9Uig1NzE3KTtmdW5jdGlv'@;
put 'biBrKEUsail7dGhpcy5uYW1lPUUsdGhpcy5ib2R5PWosdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fU8uZGVmaW5lPWZ1bmN0aW9uKEUsail7cmV0dXJuIG5ldyBrKEUsail9LGsucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihFKXtjb25zdCBqPXRoaXMubmFtZTtm'@;
put 'dW5jdGlvbiBWKEIpe3RoaXMuX2luaXROYW1lZChCLGopfXJldHVybiBJKFYsRSksVi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihCLFkpe0UuY2FsbCh0aGlzLEIsWSl9LG5ldyBWKHRoaXMpfSxrLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5k'@;
put 'ZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShFPUV8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbRV09dGhpcy5fY3JlYXRlTmFtZWQoS1tFXSkpLHRoaXMuZGVjb2RlcnNbRV19LGsucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihFLGosVil7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoaikuZGVjb2Rl'@;
put 'KEUsVil9LGsucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KEU9RXx8ImRlciIpfHwodGhpcy5lbmNvZGVyc1tFXT10aGlzLl9jcmVhdGVOYW1lZCh6W0VdKSksdGhpcy5lbmNvZGVyc1tFXX0say5wcm90b3R5cGUu'@;
put 'ZW5jb2RlPWZ1bmN0aW9uKEUsaixWKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihqKS5lbmNvZGUoRSxWKX19LDY2MjU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyksSz1SKDg0NjUpLmIsST1SKDIzOTkpLkJ1ZmZlcjtmdW5jdGlvbiBrKGosVil7Sy5jYWxsKHRoaXMs'@;
put 'ViksSS5pc0J1ZmZlcihqKT8odGhpcy5iYXNlPWosdGhpcy5vZmZzZXQ9MCx0aGlzLmxlbmd0aD1qLmxlbmd0aCk6dGhpcy5lcnJvcigiSW5wdXQgbm90IEJ1ZmZlciIpfWZ1bmN0aW9uIEUoaixWKXtpZihBcnJheS5pc0FycmF5KGopKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT1qLm1hcChm'@;
put 'dW5jdGlvbihCKXtyZXR1cm4gRS5pc0VuY29kZXJCdWZmZXIoQil8fChCPW5ldyBFKEIsVikpLHRoaXMubGVuZ3RoKz1CLmxlbmd0aCxCfSx0aGlzKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2Ygail7aWYoISgwPD1qJiZqPD0yNTUpKXJldHVybiBWLmVycm9yKCJub24tYnl0ZSBFbmNvZGVy'@;
put 'QnVmZmVyIHZhbHVlIik7dGhpcy52YWx1ZT1qLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGopdGhpcy52YWx1ZT1qLHRoaXMubGVuZ3RoPUkuYnl0ZUxlbmd0aChqKTtlbHNle2lmKCFJLmlzQnVmZmVyKGopKXJldHVybiBWLmVycm9yKCJVbnN1cHBvcnRlZCB0eXBl'@;
put 'OiAiK3R5cGVvZiBqKTt0aGlzLnZhbHVlPWosdGhpcy5sZW5ndGg9ai5sZW5ndGh9fXooayxLKSxPLkM9ayxrLmlzRGVjb2RlckJ1ZmZlcj1mdW5jdGlvbihqKXtyZXR1cm4gaiBpbnN0YW5jZW9mIGt8fCJvYmplY3QiPT10eXBlb2YgaiYmSS5pc0J1ZmZlcihqLmJhc2UpJiYiRGVjb2RlckJ1'@;
put 'ZmZlciI9PT1qLmNvbnN0cnVjdG9yLm5hbWUmJiJudW1iZXIiPT10eXBlb2Ygai5vZmZzZXQmJiJudW1iZXIiPT10eXBlb2Ygai5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnNhdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnJlc3RvcmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLmlzRW1w'@;
put 'dHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnJlYWRVSW50OCYmImZ1bmN0aW9uIj09dHlwZW9mIGouc2tpcCYmImZ1bmN0aW9uIj09dHlwZW9mIGoucmF3fSxrLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjpLLnByb3RvdHlwZS5z'@;
put 'YXZlLmNhbGwodGhpcyl9fSxrLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGope2NvbnN0IFY9bmV3IGsodGhpcy5iYXNlKTtyZXR1cm4gVi5vZmZzZXQ9ai5vZmZzZXQsVi5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9ai5vZmZzZXQsSy5wcm90b3R5cGUucmVzdG9yZS5jYWxs'@;
put 'KHRoaXMsai5yZXBvcnRlciksVn0say5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxrLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5y'@;
put 'ZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihqfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LGsucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oaixWKXtpZighKHRoaXMub2Zmc2V0K2o8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihWfHwiRGVjb2RlckJ1ZmZl'@;
put 'ciBvdmVycnVuIik7Y29uc3QgQj1uZXcgayh0aGlzLmJhc2UpO3JldHVybiBCLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsQi5vZmZzZXQ9dGhpcy5vZmZzZXQsQi5sZW5ndGg9dGhpcy5vZmZzZXQraix0aGlzLm9mZnNldCs9aixCfSxrLnByb3RvdHlwZS5yYXc9ZnVuY3Rp'@;
put 'b24oail7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShqP2oub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sTy5SPUUsRS5pc0VuY29kZXJCdWZmZXI9ZnVuY3Rpb24oail7cmV0dXJuIGogaW5zdGFuY2VvZiBFfHwib2JqZWN0Ij09dHlwZW9mIGomJiJFbmNvZGVyQnVmZmVyIj09PWou'@;
put 'Y29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiBqLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGouam9pbn0sRS5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihqLFYpe3JldHVybiBqfHwoaj1JLmFsbG9jKHRoaXMubGVuZ3RoKSksVnx8KFY9MCksMD09PXRoaXMubGVuZ3RofHwo'@;
put 'QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24oQil7Qi5qb2luKGosViksVis9Qi5sZW5ndGh9KTooIm51bWJlciI9PXR5cGVvZiB0aGlzLnZhbHVlP2pbVl09dGhpcy52YWx1ZToic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWU/ai53cml0ZSh0'@;
put 'aGlzLnZhbHVlLFYpOkkuaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weShqLFYpLFYrPXRoaXMubGVuZ3RoKSksan19LDE5Nzk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PU87ei5SZXBvcnRlcj1SKDg0NjUpLmIsei5EZWNvZGVyQnVmZmVyPVIoNjYyNSkuQyx6'@;
put 'LkVuY29kZXJCdWZmZXI9Uig2NjI1KS5SLHouTm9kZT1SKDE5NDkpfSwxOTQ5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg0NjUpLmIsSz1SKDY2MjUpLlIsST1SKDY2MjUpLkMsaz1SKDk3NDYpLEU9WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2JqaWQiLCJib29s'@;
put 'IiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlz'@;
put 'dHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSxqPVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQoRSk7ZnVuY3Rpb24gVihZLFgsVSl7Y29uc3QgcT17fTt0aGlzLl9iYXNlU3Rh'@;
put 'dGU9cSxxLm5hbWU9VSxxLmVuYz1ZLHEucGFyZW50PVh8fG51bGwscS5jaGlsZHJlbj1udWxsLHEudGFnPW51bGwscS5hcmdzPW51bGwscS5yZXZlcnNlQXJncz1udWxsLHEuY2hvaWNlPW51bGwscS5vcHRpb25hbD0hMSxxLmFueT0hMSxxLm9iaj0hMSxxLnVzZT1udWxsLHEudXNlRGVjb2Rl'@;
put 'cj1udWxsLHEua2V5PW51bGwscS5kZWZhdWx0PW51bGwscS5leHBsaWNpdD1udWxsLHEuaW1wbGljaXQ9bnVsbCxxLmNvbnRhaW5zPW51bGwscS5wYXJlbnR8fChxLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9TS5leHBvcnRzPVY7Y29uc3QgQj1bImVuYyIsInBhcmVudCIsImNoaWxkcmVu'@;
put 'IiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO1YucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7Y29uc3Qg'@;
put 'WT10aGlzLl9iYXNlU3RhdGUsWD17fTtCLmZvckVhY2goZnVuY3Rpb24ocSl7WFtxXT1ZW3FdfSk7Y29uc3QgVT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihYLnBhcmVudCk7cmV0dXJuIFUuX2Jhc2VTdGF0ZT1YLFV9LFYucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7Y29uc3QgWT10aGlzLl9i'@;
put 'YXNlU3RhdGU7ai5mb3JFYWNoKGZ1bmN0aW9uKFgpe3RoaXNbWF09ZnVuY3Rpb24oKXtjb25zdCBVPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBZLmNoaWxkcmVuLnB1c2goVSksVVtYXS5hcHBseShVLGFyZ3VtZW50cyl9fSx0aGlzKX0sVi5wcm90b3R5cGUuX2luaXQ9ZnVu'@;
put 'Y3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7ayhudWxsPT09WC5wYXJlbnQpLFkuY2FsbCh0aGlzKSxYLmNoaWxkcmVuPVguY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksay5lcXVhbChYLmNoaWxkcmVu'@;
put 'Lmxlbmd0aCwxLCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sVi5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGUsVT1ZLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9'@;
put 'LHRoaXMpO1k9WS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIShxIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1VLmxlbmd0aCYmKGsobnVsbD09PVguY2hpbGRyZW4pLFguY2hpbGRyZW49VSxVLmZvckVhY2goZnVuY3Rpb24ocSl7cS5fYmFzZVN0YXRlLnBhcmVu'@;
put 'dD10aGlzfSx0aGlzKSksMCE9PVkubGVuZ3RoJiYoayhudWxsPT09WC5hcmdzKSxYLmFyZ3M9WSxYLnJldmVyc2VBcmdzPVkubWFwKGZ1bmN0aW9uKHEpe2lmKCJvYmplY3QiIT10eXBlb2YgcXx8cS5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gcTtjb25zdCBlZT17fTtyZXR1cm4gT2Jq'@;
put 'ZWN0LmtleXMocSkuZm9yRWFjaChmdW5jdGlvbih0ZSl7dGU9PSgwfHRlKSYmKHRlfD0wKSxlZVtxW3RlXV09dGV9KSxlZX0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJf'@;
put 'ZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oWSl7Vi5w'@;
put 'cm90b3R5cGVbWV09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoWSsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksRS5mb3JFYWNoKGZ1bmN0aW9uKFkpe1YucHJvdG90eXBlW1ldPWZ1bmN0aW9uKCl7Y29uc3QgWD10aGlzLl9iYXNl'@;
put 'U3RhdGUsVT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBrKG51bGw9PT1YLnRhZyksWC50YWc9WSx0aGlzLl91c2VBcmdzKFUpLHRoaXN9fSksVi5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKFkpe2soWSk7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJu'@;
put 'IGsobnVsbD09PVgudXNlKSxYLnVzZT1ZLHRoaXN9LFYucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxWLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGso'@;
put 'bnVsbD09PVguZGVmYXVsdCksWC5kZWZhdWx0PVksWC5vcHRpb25hbD0hMCx0aGlzfSxWLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC5leHBsaWNpdCYmbnVsbD09PVguaW1wbGljaXQpLFguZXhwbGljaXQ9'@;
put 'WSx0aGlzfSxWLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC5leHBsaWNpdCYmbnVsbD09PVguaW1wbGljaXQpLFguaW1wbGljaXQ9WSx0aGlzfSxWLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXtjb25zdCBZ'@;
put 'PXRoaXMuX2Jhc2VTdGF0ZSxYPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIFkub2JqPSEwLDAhPT1YLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhYKSx0aGlzfSxWLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0'@;
put 'dXJuIGsobnVsbD09PVgua2V5KSxYLmtleT1ZLHRoaXN9LFYucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LFYucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxs'@;
put 'PT09WC5jaG9pY2UpLFguY2hvaWNlPVksdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhZKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIFlbVV19KSksdGhpc30sVi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVgu'@;
put 'dXNlKSxYLmNvbnRhaW5zPVksdGhpc30sVi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1VLnBhcmVudClyZXR1cm4gWS53cmFwUmVzdWx0KFUuY2hpbGRyZW5bMF0uX2RlY29kZShZLFgpKTtsZXQgcSxlZT1VLmRlZmF1'@;
put 'bHQsdGU9ITAsb2U9bnVsbDtpZihudWxsIT09VS5rZXkmJihvZT1ZLmVudGVyS2V5KFUua2V5KSksVS5vcHRpb25hbCl7bGV0IHNlPW51bGw7aWYobnVsbCE9PVUuZXhwbGljaXQ/c2U9VS5leHBsaWNpdDpudWxsIT09VS5pbXBsaWNpdD9zZT1VLmltcGxpY2l0Om51bGwhPT1VLnRhZyYmKHNl'@;
put 'PVUudGFnKSxudWxsIT09c2V8fFUuYW55KXtpZih0ZT10aGlzLl9wZWVrVGFnKFksc2UsVS5hbnkpLFkuaXNFcnJvcih0ZSkpcmV0dXJuIHRlfWVsc2V7Y29uc3QgaGU9WS5zYXZlKCk7dHJ5e251bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLFksWCk6dGhpcy5fZGVj'@;
put 'b2RlQ2hvaWNlKFksWCksdGU9ITB9Y2F0Y2h7dGU9ITF9WS5yZXN0b3JlKGhlKX19aWYoVS5vYmomJnRlJiYocT1ZLmVudGVyT2JqZWN0KCkpLHRlKXtpZihudWxsIT09VS5leHBsaWNpdCl7Y29uc3QgaGU9dGhpcy5fZGVjb2RlVGFnKFksVS5leHBsaWNpdCk7aWYoWS5pc0Vycm9yKGhlKSly'@;
put 'ZXR1cm4gaGU7WT1oZX1jb25zdCBzZT1ZLm9mZnNldDtpZihudWxsPT09VS51c2UmJm51bGw9PT1VLmNob2ljZSl7bGV0IGhlO1UuYW55JiYoaGU9WS5zYXZlKCkpO2NvbnN0IHVlPXRoaXMuX2RlY29kZVRhZyhZLG51bGwhPT1VLmltcGxpY2l0P1UuaW1wbGljaXQ6VS50YWcsVS5hbnkpO2lm'@;
put 'KFkuaXNFcnJvcih1ZSkpcmV0dXJuIHVlO1UuYW55P2VlPVkucmF3KGhlKTpZPXVlfWlmKFgmJlgudHJhY2smJm51bGwhPT1VLnRhZyYmWC50cmFjayhZLnBhdGgoKSxzZSxZLmxlbmd0aCwidGFnZ2VkIiksWCYmWC50cmFjayYmbnVsbCE9PVUudGFnJiZYLnRyYWNrKFkucGF0aCgpLFkub2Zm'@;
put 'c2V0LFkubGVuZ3RoLCJjb250ZW50IiksVS5hbnl8fChlZT1udWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxZLFgpOnRoaXMuX2RlY29kZUNob2ljZShZLFgpKSxZLmlzRXJyb3IoZWUpKXJldHVybiBlZTtpZihVLmFueXx8bnVsbCE9PVUuY2hvaWNlfHxudWxsPT09'@;
put 'VS5jaGlsZHJlbnx8VS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGhlKXtoZS5fZGVjb2RlKFksWCl9KSxVLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1VLnRhZ3x8ImJpdHN0ciI9PT1VLnRhZykpe2NvbnN0IGhlPW5ldyBJKGVlKTtlZT10aGlzLl9nZXRVc2UoVS5jb250YWlucyxZLl9yZXBv'@;
put 'cnRlclN0YXRlLm9iaikuX2RlY29kZShoZSxYKX19cmV0dXJuIFUub2JqJiZ0ZSYmKGVlPVkubGVhdmVPYmplY3QocSkpLG51bGw9PT1VLmtleXx8bnVsbD09PWVlJiYhMCE9PXRlP251bGwhPT1vZSYmWS5leGl0S2V5KG9lKTpZLmxlYXZlS2V5KG9lLFUua2V5LGVlKSxlZX0sVi5wcm90b3R5'@;
put 'cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oWSxYLFUpe2NvbnN0IHE9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09WXx8InNldCI9PT1ZP251bGw6InNlcW9mIj09PVl8fCJzZXRvZiI9PT1ZP3RoaXMuX2RlY29kZUxpc3QoWCxZLHEuYXJnc1swXSxVKTovc3RyJC8udGVzdChZKT90'@;
put 'aGlzLl9kZWNvZGVTdHIoWCxZLFUpOiJvYmppZCI9PT1ZJiZxLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoWCxxLmFyZ3NbMF0scS5hcmdzWzFdLFUpOiJvYmppZCI9PT1ZP3RoaXMuX2RlY29kZU9iamlkKFgsbnVsbCxudWxsLFUpOiJnZW50aW1lIj09PVl8fCJ1dGN0aW1lIj09PVk/dGhpcy5f'@;
put 'ZGVjb2RlVGltZShYLFksVSk6Im51bGxfIj09PVk/dGhpcy5fZGVjb2RlTnVsbChYLFUpOiJib29sIj09PVk/dGhpcy5fZGVjb2RlQm9vbChYLFUpOiJvYmpEZXNjIj09PVk/dGhpcy5fZGVjb2RlU3RyKFgsWSxVKToiaW50Ij09PVl8fCJlbnVtIj09PVk/dGhpcy5fZGVjb2RlSW50KFgscS5h'@;
put 'cmdzJiZxLmFyZ3NbMF0sVSk6bnVsbCE9PXEudXNlP3RoaXMuX2dldFVzZShxLnVzZSxYLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShYLFUpOlguZXJyb3IoInVua25vd24gdGFnOiAiK1kpfSxWLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKFksWCl7Y29uc3QgVT10aGlzLl9iYXNl'@;
put 'U3RhdGU7cmV0dXJuIFUudXNlRGVjb2Rlcj10aGlzLl91c2UoWSxYKSxrKG51bGw9PT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxVLmltcGxpY2l0IT09VS51c2VEZWNvZGVyLl9iYXNlU3Rh'@;
put 'dGUuaW1wbGljaXQmJihVLnVzZURlY29kZXI9VS51c2VEZWNvZGVyLmNsb25lKCksVS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9VS5pbXBsaWNpdCksVS51c2VEZWNvZGVyfSxWLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKFksWCl7Y29uc3QgVT10aGlzLl9iYXNl'@;
put 'U3RhdGU7bGV0IHE9bnVsbCxlZT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoVS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24odGUpe2NvbnN0IG9lPVkuc2F2ZSgpLHNlPVUuY2hvaWNlW3RlXTt0cnl7Y29uc3QgaGU9c2UuX2RlY29kZShZLFgpO2lmKFkuaXNFcnJvcihoZSkpcmV0dXJuITE7cT17dHlw'@;
put 'ZTp0ZSx2YWx1ZTpoZX0sZWU9ITB9Y2F0Y2h7cmV0dXJuIFkucmVzdG9yZShvZSksITF9cmV0dXJuITB9LHRoaXMpLGVlP3E6WS5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LFYucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKFkpe3JldHVybiBuZXcgSyhZLHRo'@;
put 'aXMucmVwb3J0ZXIpfSxWLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKFksWCxVKXtjb25zdCBxPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsIT09cS5kZWZhdWx0JiZxLmRlZmF1bHQ9PT1ZKXJldHVybjtjb25zdCBlZT10aGlzLl9lbmNvZGVWYWx1ZShZLFgsVSk7cmV0dXJuIHZvaWQgMD09'@;
put 'PWVlfHx0aGlzLl9za2lwRGVmYXVsdChlZSxYLFUpP3ZvaWQgMDplZX0sVi5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKFksWCxVKXtjb25zdCBxPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09cS5wYXJlbnQpcmV0dXJuIHEuY2hpbGRyZW5bMF0uX2VuY29kZShZLFh8fG5ldyB6'@;
put 'KTtsZXQgZWU9bnVsbDtpZih0aGlzLnJlcG9ydGVyPVgscS5vcHRpb25hbCYmdm9pZCAwPT09WSl7aWYobnVsbD09PXEuZGVmYXVsdClyZXR1cm47WT1xLmRlZmF1bHR9bGV0IHRlPW51bGwsb2U9ITE7aWYocS5hbnkpZWU9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihZKTtlbHNlIGlmKHEu'@;
put 'Y2hvaWNlKWVlPXRoaXMuX2VuY29kZUNob2ljZShZLFgpO2Vsc2UgaWYocS5jb250YWlucyl0ZT10aGlzLl9nZXRVc2UocS5jb250YWlucyxVKS5fZW5jb2RlKFksWCksb2U9ITA7ZWxzZSBpZihxLmNoaWxkcmVuKXRlPXEuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHNlKXtpZigibnVsbF8iPT09'@;
put 'c2UuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHNlLl9lbmNvZGUobnVsbCxYLFkpO2lmKG51bGw9PT1zZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gWC5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTtjb25zdCBoZT1YLmVudGVyS2V5KHNlLl9iYXNlU3RhdGUua2V5KTtpZigib2JqZWN0'@;
put 'IiE9dHlwZW9mIFkpcmV0dXJuIFguZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO2NvbnN0IHVlPXNlLl9lbmNvZGUoWVtzZS5fYmFzZVN0YXRlLmtleV0sWCxZKTtyZXR1cm4gWC5sZWF2ZUtleShoZSksdWV9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihz'@;
put 'ZSl7cmV0dXJuIHNlfSksdGU9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0ZSk7ZWxzZSBpZigic2Vxb2YiPT09cS50YWd8fCJzZXRvZiI9PT1xLnRhZyl7aWYoIXEuYXJnc3x8MSE9PXEuYXJncy5sZW5ndGgpcmV0dXJuIFguZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitxLnRhZyk7'@;
put 'aWYoIUFycmF5LmlzQXJyYXkoWSkpcmV0dXJuIFguZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTtjb25zdCBzZT10aGlzLmNsb25lKCk7c2UuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLHRlPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWS5tYXAoZnVuY3Rp'@;
put 'b24oaGUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0sWSkuX2VuY29kZShoZSxYKX0sc2UpKX1lbHNlIG51bGwhPT1xLnVzZT9lZT10aGlzLl9nZXRVc2UocS51c2UsVSkuX2VuY29kZShZLFgpOih0ZT10aGlzLl9lbmNvZGVQcmltaXRpdmUocS50YWcsWSks'@;
put 'b2U9ITApO2lmKCFxLmFueSYmbnVsbD09PXEuY2hvaWNlKXtjb25zdCBzZT1udWxsIT09cS5pbXBsaWNpdD9xLmltcGxpY2l0OnEudGFnLGhlPW51bGw9PT1xLmltcGxpY2l0PyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtudWxsPT09c2U/bnVsbD09PXEudXNlJiZYLmVycm9yKCJUYWcgY291bGQg'@;
put 'YmUgb21pdHRlZCBvbmx5IGZvciAudXNlKCkiKTpudWxsPT09cS51c2UmJihlZT10aGlzLl9lbmNvZGVDb21wb3NpdGUoc2Usb2UsaGUsdGUpKX1yZXR1cm4gbnVsbCE9PXEuZXhwbGljaXQmJihlZT10aGlzLl9lbmNvZGVDb21wb3NpdGUocS5leHBsaWNpdCwhMSwiY29udGV4dCIsZWUpKSxl'@;
put 'ZX0sVi5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlLHE9VS5jaG9pY2VbWS50eXBlXTtyZXR1cm4gcXx8ayghMSxZLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhVLmNob2ljZSkpKSxx'@;
put 'Ll9lbmNvZGUoWS52YWx1ZSxYKX0sVi5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KFkpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoWCxZKTtpZigib2JqaWQiPT09WSYmVS5hcmdzKXJldHVybiB0'@;
put 'aGlzLl9lbmNvZGVPYmppZChYLFUucmV2ZXJzZUFyZ3NbMF0sVS5hcmdzWzFdKTtpZigib2JqaWQiPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoWCxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PVl8fCJ1dGN0aW1lIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoWCxZKTtpZigi'@;
put 'bnVsbF8iPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09WXx8ImVudW0iPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlSW50KFgsVS5hcmdzJiZVLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1ZKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKFgpO2lmKCJvYmpEZXNj'@;
put 'Ij09PVkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihYLFkpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK1kpfSxWLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oWSl7cmV0dXJuL15bMC05IF0qJC8udGVzdChZKX0sVi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rp'@;
put 'b24oWSl7cmV0dXJuL15bQS1aYS16MC05ICcoKSssLS4vOj0/XSokLy50ZXN0KFkpfX0sODQ2NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KTtmdW5jdGlvbiBLKGspe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczprfHx7fSxlcnJv'@;
put 'cnM6W119fWZ1bmN0aW9uIEkoayxFKXt0aGlzLnBhdGg9ayx0aGlzLnJldGhyb3coRSl9Ty5iPUssSy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihrKXtyZXR1cm4gayBpbnN0YW5jZW9mIEl9LEsucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX3JlcG9ydGVyU3Rh'@;
put 'dGU7cmV0dXJue29iajprLm9iaixwYXRoTGVuOmsucGF0aC5sZW5ndGh9fSxLLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtFLm9iaj1rLm9iaixFLnBhdGg9RS5wYXRoLnNsaWNlKDAsay5wYXRoTGVuKX0sSy5wcm90b3R5cGUuZW50'@;
put 'ZXJLZXk9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKGspfSxLLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtFLnBhdGg9RS5wYXRoLnNsaWNlKDAsay0xKX0sSy5wcm90b3R5cGUubGVhdmVL'@;
put 'ZXk9ZnVuY3Rpb24oayxFLGope2NvbnN0IFY9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkoayksbnVsbCE9PVYub2JqJiYoVi5vYmpbRV09ail9LEsucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0sSy5w'@;
put 'cm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX3JlcG9ydGVyU3RhdGUsRT1rLm9iajtyZXR1cm4gay5vYmo9e30sRX0sSy5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9yZXBvcnRlclN0YXRlLGo9RS5vYmo7cmV0dXJu'@;
put 'IEUub2JqPWssan0sSy5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oayl7bGV0IEU7Y29uc3Qgaj10aGlzLl9yZXBvcnRlclN0YXRlLFY9ayBpbnN0YW5jZW9mIEk7aWYoRT1WP2s6bmV3IEkoai5wYXRoLm1hcChmdW5jdGlvbihCKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoQikrIl0ifSku'@;
put 'am9pbigiIiksay5tZXNzYWdlfHxrLGsuc3RhY2spLCFqLm9wdGlvbnMucGFydGlhbCl0aHJvdyBFO3JldHVybiBWfHxqLmVycm9ycy5wdXNoKEUpLEV9LEsucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBFLm9wdGlv'@;
put 'bnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcihrKT9udWxsOmssZXJyb3JzOkUuZXJyb3JzfTprfSx6KEksRXJyb3IpLEkucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24oayl7aWYodGhpcy5tZXNzYWdlPWsrIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2Fw'@;
put 'dHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsSSksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKEUpe3RoaXMuc3RhY2s9RS5zdGFja31yZXR1cm4gdGhpc319LDE2MDooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtmdW5j'@;
put 'dGlvbiBSKHope2NvbnN0IEs9e307cmV0dXJuIE9iamVjdC5rZXlzKHopLmZvckVhY2goZnVuY3Rpb24oSSl7KDB8SSk9PUkmJihJfD0wKSxLW3pbSV1dPUl9KSxLfU8udGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxPLnRh'@;
put 'Z0NsYXNzQnlOYW1lPVIoTy50YWdDbGFzcyksTy50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0Zjhz'@;
put 'dHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vu'@;
put 'c3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LE8udGFnQnlOYW1lPVIoTy50YWcpfSw2ODI2OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1PO3ouX3JldmVyc2U9ZnVuY3Rpb24oSyl7Y29uc3QgST17fTtyZXR1cm4gT2JqZWN0LmtleXMoSykuZm9yRWFj'@;
put 'aChmdW5jdGlvbihrKXsoMHxrKT09ayYmKGt8PTApLElbS1trXV09a30pLEl9LHouZGVyPVIoMTYwKX0sMTY3MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIoNDU5MCksST1SKDY2MjUpLkMsaz1SKDE5NDkpLEU9UigxNjApO2Z1bmN0aW9uIGooWCl7dGhpcy5l'@;
put 'bmM9ImRlciIsdGhpcy5uYW1lPVgubmFtZSx0aGlzLmVudGl0eT1YLHRoaXMudHJlZT1uZXcgVix0aGlzLnRyZWUuX2luaXQoWC5ib2R5KX1mdW5jdGlvbiBWKFgpe2suY2FsbCh0aGlzLCJkZXIiLFgpfWZ1bmN0aW9uIEIoWCxVKXtsZXQgcT1YLnJlYWRVSW50OChVKTtpZihYLmlzRXJyb3Io'@;
put 'cSkpcmV0dXJuIHE7Y29uc3QgZWU9RS50YWdDbGFzc1txPj42XSx0ZT0wPT0oMzImcSk7aWYoMzE9PSgzMSZxKSl7bGV0IG9lPXE7Zm9yKHE9MDsxMjg9PSgxMjgmb2UpOyl7aWYob2U9WC5yZWFkVUludDgoVSksWC5pc0Vycm9yKG9lKSlyZXR1cm4gb2U7cTw8PTcscXw9MTI3Jm9lfX1lbHNl'@;
put 'IHEmPTMxO3JldHVybntjbHM6ZWUscHJpbWl0aXZlOnRlLHRhZzpxLHRhZ1N0cjpFLnRhZ1txXX19ZnVuY3Rpb24gWShYLFUscSl7bGV0IGVlPVgucmVhZFVJbnQ4KHEpO2lmKFguaXNFcnJvcihlZSkpcmV0dXJuIGVlO2lmKCFVJiYxMjg9PT1lZSlyZXR1cm4gbnVsbDtpZighKDEyOCZlZSkp'@;
put 'cmV0dXJuIGVlO2NvbnN0IHRlPTEyNyZlZTtpZih0ZT40KXJldHVybiBYLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7ZWU9MDtmb3IobGV0IG9lPTA7b2U8dGU7b2UrKyl7ZWU8PD04O2NvbnN0IHNlPVgucmVhZFVJbnQ4KHEpO2lmKFguaXNFcnJvcihzZSkpcmV0dXJuIHNl'@;
put 'O2VlfD1zZX1yZXR1cm4gZWV9TS5leHBvcnRzPWosai5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFgsVSl7cmV0dXJuIEkuaXNEZWNvZGVyQnVmZmVyKFgpfHwoWD1uZXcgSShYLFUpKSx0aGlzLnRyZWUuX2RlY29kZShYLFUpfSx6KFYsayksVi5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rp'@;
put 'b24oWCxVLHEpe2lmKFguaXNFbXB0eSgpKXJldHVybiExO2NvbnN0IGVlPVguc2F2ZSgpLHRlPUIoWCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytVKyciJyk7cmV0dXJuIFguaXNFcnJvcih0ZSk/dGU6KFgucmVzdG9yZShlZSksdGUudGFnPT09VXx8dGUudGFnU3RyPT09VXx8dGUudGFnU3Ry'@;
put 'KyJvZiI9PT1VfHxxKX0sVi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihYLFUscSl7Y29uc3QgZWU9QihYLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytVKyciJyk7aWYoWC5pc0Vycm9yKGVlKSlyZXR1cm4gZWU7bGV0IHRlPVkoWCxlZS5wcmltaXRpdmUsJ0ZhaWxlZCB0byBn'@;
put 'ZXQgbGVuZ3RoIG9mICInK1UrJyInKTtpZihYLmlzRXJyb3IodGUpKXJldHVybiB0ZTtpZighcSYmZWUudGFnIT09VSYmZWUudGFnU3RyIT09VSYmZWUudGFnU3RyKyJvZiIhPT1VKXJldHVybiBYLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytVKyciJyk7aWYoZWUucHJpbWl0aXZl'@;
put 'fHxudWxsIT09dGUpcmV0dXJuIFguc2tpcCh0ZSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK1UrJyInKTtjb25zdCBvZT1YLnNhdmUoKSxzZT10aGlzLl9za2lwVW50aWxFbmQoWCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTty'@;
put 'ZXR1cm4gWC5pc0Vycm9yKHNlKT9zZToodGU9WC5vZmZzZXQtb2Uub2Zmc2V0LFgucmVzdG9yZShvZSksWC5za2lwKHRlLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrVSsnIicpKX0sVi5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbihYLFUpe2Zvcig7Oyl7Y29uc3QgcT1C'@;
put 'KFgsVSk7aWYoWC5pc0Vycm9yKHEpKXJldHVybiBxO2NvbnN0IGVlPVkoWCxxLnByaW1pdGl2ZSxVKTtpZihYLmlzRXJyb3IoZWUpKXJldHVybiBlZTtsZXQgdGU7aWYodGU9cS5wcmltaXRpdmV8fG51bGwhPT1lZT9YLnNraXAoZWUpOnRoaXMuX3NraXBVbnRpbEVuZChYLFUpLFguaXNFcnJv'@;
put 'cih0ZSkpcmV0dXJuIHRlO2lmKCJlbmQiPT09cS50YWdTdHIpYnJlYWt9fSxWLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihYLFUscSxlZSl7Y29uc3QgdGU9W107Zm9yKDshWC5pc0VtcHR5KCk7KXtjb25zdCBvZT10aGlzLl9wZWVrVGFnKFgsImVuZCIpO2lmKFguaXNFcnJvcihv'@;
put 'ZSkpcmV0dXJuIG9lO2NvbnN0IHNlPXEuZGVjb2RlKFgsImRlciIsZWUpO2lmKFguaXNFcnJvcihzZSkmJm9lKWJyZWFrO3RlLnB1c2goc2UpfXJldHVybiB0ZX0sVi5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbihYLFUpe2lmKCJiaXRzdHIiPT09VSl7Y29uc3QgcT1YLnJlYWRVSW50'@;
put 'OCgpO3JldHVybiBYLmlzRXJyb3IocSk/cTp7dW51c2VkOnEsZGF0YTpYLnJhdygpfX1pZigiYm1wc3RyIj09PVUpe2NvbnN0IHE9WC5yYXcoKTtpZihxLmxlbmd0aCUyPT0xKXJldHVybiBYLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIp'@;
put 'O2xldCBlZT0iIjtmb3IobGV0IHRlPTA7dGU8cS5sZW5ndGgvMjt0ZSsrKWVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHEucmVhZFVJbnQxNkJFKDIqdGUpKTtyZXR1cm4gZWV9aWYoIm51bXN0ciI9PT1VKXtjb25zdCBxPVgucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lz'@;
put 'TnVtc3RyKHEpP3E6WC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1VfHwib2JqRGVzYyI9PT1VKXJldHVybiBYLnJhdygpO2lmKCJwcmludHN0ciI9PT1VKXtjb25zdCBxPVgucmF3KCkudG9TdHJp'@;
put 'bmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIocSk/cTpYLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KFUpP1gucmF3KCkudG9TdHJpbmcoKTpYLmVycm9yKCJEZWNvZGlu'@;
put 'ZyBvZiBzdHJpbmcgdHlwZTogIitVKyIgdW5zdXBwb3J0ZWQiKX0sVi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKFgsVSxxKXtsZXQgZWU7Y29uc3QgdGU9W107bGV0IG9lPTAsc2U9MDtmb3IoOyFYLmlzRW1wdHkoKTspc2U9WC5yZWFkVUludDgoKSxvZTw8PTcsb2V8PTEyNyZz'@;
put 'ZSwhKDEyOCZzZSkmJih0ZS5wdXNoKG9lKSxvZT0wKTtpZigxMjgmc2UmJnRlLnB1c2gob2UpLGVlPXE/dGU6W3RlWzBdLzQwfDAsdGVbMF0lNDBdLmNvbmNhdCh0ZS5zbGljZSgxKSksVSl7bGV0IGNlPVVbZWUuam9pbigiICIpXTt2b2lkIDA9PT1jZSYmKGNlPVVbZWUuam9pbigiLiIpXSks'@;
put 'dm9pZCAwIT09Y2UmJihlZT1jZSl9cmV0dXJuIGVlfSxWLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihYLFUpe2NvbnN0IHE9WC5yYXcoKS50b1N0cmluZygpO2xldCBlZSx0ZSxvZSxzZSxoZSx1ZTtpZigiZ2VudGltZSI9PT1VKWVlPTB8cS5zbGljZSgwLDQpLHRlPTB8cS5zbGlj'@;
put 'ZSg0LDYpLG9lPTB8cS5zbGljZSg2LDgpLHNlPTB8cS5zbGljZSg4LDEwKSxoZT0wfHEuc2xpY2UoMTAsMTIpLHVlPTB8cS5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1VKXJldHVybiBYLmVycm9yKCJEZWNvZGluZyAiK1UrIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7'@;
put 'ZWU9MHxxLnNsaWNlKDAsMiksdGU9MHxxLnNsaWNlKDIsNCksb2U9MHxxLnNsaWNlKDQsNiksc2U9MHxxLnNsaWNlKDYsOCksaGU9MHxxLnNsaWNlKDgsMTApLHVlPTB8cS5zbGljZSgxMCwxMiksZWU9ZWU8NzA/MmUzK2VlOjE5MDArZWV9cmV0dXJuIERhdGUuVVRDKGVlLHRlLTEsb2Usc2Us'@;
put 'aGUsdWUsMCl9LFYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LFYucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKFgpe2NvbnN0IFU9WC5yZWFkVUludDgoKTtyZXR1cm4gWC5pc0Vycm9yKFUpP1U6MCE9PVV9LFYucHJvdG90eXBlLl9kZWNvZGVJ'@;
put 'bnQ9ZnVuY3Rpb24oWCxVKXtjb25zdCBxPVgucmF3KCk7bGV0IGVlPW5ldyBLKHEpO3JldHVybiBVJiYoZWU9VVtlZS50b1N0cmluZygxMCldfHxlZSksZWV9LFYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oWCxVKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgWCYmKFg9WChVKSksWC5fZ2V0'@;
put 'RGVjb2RlcigiZGVyIikudHJlZX19LDgzMDc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PU87ei5kZXI9UigxNjcxKSx6LnBlbT1SKDk2MzEpfSw5NjMxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcpLEs9UigyMzk5KS5CdWZmZXIsST1SKDE2NzEpO2Z1bmN0'@;
put 'aW9uIGsoRSl7SS5jYWxsKHRoaXMsRSksdGhpcy5lbmM9InBlbSJ9eihrLEkpLE0uZXhwb3J0cz1rLGsucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihFLGope2NvbnN0IFY9RS50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLEI9ai5sYWJlbC50b1VwcGVyQ2FzZSgpLFk9L14tLS0tLShC'@;
put 'RUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO2xldCBYPS0xLFU9LTE7Zm9yKGxldCB0ZT0wO3RlPFYubGVuZ3RoO3RlKyspe2NvbnN0IG9lPVZbdGVdLm1hdGNoKFkpO2lmKG51bGwhPT1vZSYmb2VbMl09PT1CKXtpZigtMSE9PVgpe2lmKCJFTkQiIT09b2VbMV0pYnJlYWs7VT10ZTticmVha31p'@;
put 'ZigiQkVHSU4iIT09b2VbMV0pYnJlYWs7WD10ZX19aWYoLTE9PT1YfHwtMT09PVUpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK0IpO2NvbnN0IHE9Vi5zbGljZShYKzEsVSkuam9pbigiIik7cS5yZXBsYWNlKC9bXmEtejAtOSsvPV0rL2dpLCIiKTtjb25z'@;
put 'dCBlZT1LLmZyb20ocSwiYmFzZTY0Iik7cmV0dXJuIEkucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsZWUsail9fSw2OTg0OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcpLEs9UigyMzk5KS5CdWZmZXIsST1SKDE5NDkpLGs9UigxNjApO2Z1bmN0aW9uIEUoQil7dGhp'@;
put 'cy5lbmM9ImRlciIsdGhpcy5uYW1lPUIubmFtZSx0aGlzLmVudGl0eT1CLHRoaXMudHJlZT1uZXcgaix0aGlzLnRyZWUuX2luaXQoQi5ib2R5KX1mdW5jdGlvbiBqKEIpe0kuY2FsbCh0aGlzLCJkZXIiLEIpfWZ1bmN0aW9uIFYoQil7cmV0dXJuIEI8MTA/IjAiK0I6Qn1NLmV4cG9ydHM9RSxF'@;
put 'LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oQixZKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoQixZKS5qb2luKCl9LHooaixJKSxqLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKEIsWSxYLFUpe2NvbnN0IHE9ZnVuY3Rpb24ob2Usc2UsaGUsdWUpe2xldCBjZTtpZigi'@;
put 'c2Vxb2YiPT09b2U/b2U9InNlcSI6InNldG9mIj09PW9lJiYob2U9InNldCIpLGsudGFnQnlOYW1lLmhhc093blByb3BlcnR5KG9lKSljZT1rLnRhZ0J5TmFtZVtvZV07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIG9lfHwoMHxvZSkhPT1vZSlyZXR1cm4gdWUuZXJyb3IoIlVua25vd24gdGFn'@;
put 'OiAiK29lKTtjZT1vZX1yZXR1cm4gY2U+PTMxP3VlLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooc2V8fChjZXw9MzIpLGNlfD1rLnRhZ0NsYXNzQnlOYW1lW2hlfHwidW5pdmVyc2FsIl08PDYsY2UpfShCLFksWCx0aGlzLnJlcG9ydGVyKTtpZihVLmxl'@;
put 'bmd0aDwxMjgpe2NvbnN0IG9lPUsuYWxsb2MoMik7cmV0dXJuIG9lWzBdPXEsb2VbMV09VS5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbb2UsVV0pfWxldCBlZT0xO2ZvcihsZXQgb2U9VS5sZW5ndGg7b2U+PTI1NjtvZT4+PTgpZWUrKztjb25zdCB0ZT1LLmFsbG9jKDIrZWUp'@;
put 'O3RlWzBdPXEsdGVbMV09MTI4fGVlO2ZvcihsZXQgb2U9MStlZSxzZT1VLmxlbmd0aDtzZT4wO29lLS0sc2U+Pj04KXRlW29lXT0yNTUmc2U7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW3RlLFVdKX0sai5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihCLFkpe2lmKCJi'@;
put 'aXRzdHIiPT09WSlyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxCLnVudXNlZCxCLmRhdGFdKTtpZigiYm1wc3RyIj09PVkpe2NvbnN0IFg9Sy5hbGxvYygyKkIubGVuZ3RoKTtmb3IobGV0IFU9MDtVPEIubGVuZ3RoO1UrKylYLndyaXRlVUludDE2QkUoQi5jaGFyQ29kZUF0'@;
put 'KFUpLDIqVSk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWCl9cmV0dXJuIm51bXN0ciI9PT1ZP3RoaXMuX2lzTnVtc3RyKEIpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBz'@;
put 'dXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09WT90aGlzLl9pc1ByaW50c3RyKEIpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkg'@;
put 'bGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTov'@;
put 'c3RyJC8udGVzdChZKXx8Im9iakRlc2MiPT09WT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK1krIiB1bnN1cHBvcnRlZCIpfSxqLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oQixZLFgp'@;
put 'e2lmKCJzdHJpbmciPT10eXBlb2YgQil7aWYoIVkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighWS5oYXNPd25Qcm9wZXJ0eShCKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90'@;
put 'IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtCPVlbQl0uc3BsaXQoL1tccy5dKy9nKTtmb3IobGV0IHRlPTA7dGU8Qi5sZW5ndGg7dGUrKylCW3RlXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoQikpe0I9Qi5zbGljZSgpO2ZvcihsZXQgdGU9MDt0ZTxCLmxlbmd0aDt0ZSsrKUJbdGVdfD0wfWlm'@;
put 'KCFBcnJheS5pc0FycmF5KEIpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoQikpO2lmKCFYKXtpZihCWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vj'@;
put 'b25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7Qi5zcGxpY2UoMCwyLDQwKkJbMF0rQlsxXSl9bGV0IFU9MDtmb3IobGV0IHRlPTA7dGU8Qi5sZW5ndGg7dGUrKyl7bGV0IG9lPUJbdGVdO2ZvcihVKys7b2U+PTEyODtvZT4+PTcpVSsrfWNvbnN0IHE9Sy5hbGxvYyhVKTtsZXQgZWU9cS5sZW5n'@;
put 'dGgtMTtmb3IobGV0IHRlPUIubGVuZ3RoLTE7dGU+PTA7dGUtLSl7bGV0IG9lPUJbdGVdO2ZvcihxW2VlLS1dPTEyNyZvZTsob2U+Pj03KT4wOylxW2VlLS1dPTEyOHwxMjcmb2V9cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9LGoucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1'@;
put 'bmN0aW9uKEIsWSl7bGV0IFg7Y29uc3QgVT1uZXcgRGF0ZShCKTtyZXR1cm4iZ2VudGltZSI9PT1ZP1g9W1YoVS5nZXRVVENGdWxsWWVhcigpKSxWKFUuZ2V0VVRDTW9udGgoKSsxKSxWKFUuZ2V0VVRDRGF0ZSgpKSxWKFUuZ2V0VVRDSG91cnMoKSksVihVLmdldFVUQ01pbnV0ZXMoKSksVihV'@;
put 'LmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1ZP1g9W1YoVS5nZXRVVENGdWxsWWVhcigpJTEwMCksVihVLmdldFVUQ01vbnRoKCkrMSksVihVLmdldFVUQ0RhdGUoKSksVihVLmdldFVUQ0hvdXJzKCkpLFYoVS5nZXRVVENNaW51dGVzKCkpLFYoVS5nZXRVVENT'@;
put 'ZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitZKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihYLCJvY3RzdHIiKX0sai5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f'@;
put 'Y3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LGoucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oQixZKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe2lmKCFZKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7'@;
put 'aWYoIVkuaGFzT3duUHJvcGVydHkoQikpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEIpKTtCPVlbQl19aWYoIm51bWJlciIhPXR5cGVvZiBCJiYhSy5pc0J1ZmZlcihCKSl7Y29uc3QgcT1CLnRvQXJyYXko'@;
put 'KTshQi5zaWduJiYxMjgmcVswXSYmcS51bnNoaWZ0KDApLEI9Sy5mcm9tKHEpfWlmKEsuaXNCdWZmZXIoQikpe2xldCBxPUIubGVuZ3RoOzA9PT1CLmxlbmd0aCYmcSsrO2NvbnN0IGVlPUsuYWxsb2MocSk7cmV0dXJuIEIuY29weShlZSksMD09PUIubGVuZ3RoJiYoZWVbMF09MCksdGhpcy5f'@;
put 'Y3JlYXRlRW5jb2RlckJ1ZmZlcihlZSl9aWYoQjwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik7aWYoQjwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsQl0pO2xldCBYPTE7Zm9yKGxldCBxPUI7cT49MjU2O3E+Pj04KVgrKztjb25zdCBVPW5l'@;
put 'dyBBcnJheShYKTtmb3IobGV0IHE9VS5sZW5ndGgtMTtxPj0wO3EtLSlVW3FdPTI1NSZCLEI+Pj04O3JldHVybiAxMjgmVVswXSYmVS51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoSy5mcm9tKFUpKX0sai5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oQil7cmV0'@;
put 'dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQj8yNTU6MCl9LGoucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oQixZKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgQiYmKEI9QihZKSksQi5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sai5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0'@;
put 'aW9uKEIsWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgcTtpZihudWxsPT09VS5kZWZhdWx0KXJldHVybiExO2NvbnN0IGVlPUIuam9pbigpO2lmKHZvaWQgMD09PVUuZGVmYXVsdEJ1ZmZlciYmKFUuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShVLmRlZmF1bHQsWSxY'@;
put 'KS5qb2luKCkpLGVlLmxlbmd0aCE9PVUuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKHE9MDtxPGVlLmxlbmd0aDtxKyspaWYoZWVbcV0hPT1VLmRlZmF1bHRCdWZmZXJbcV0pcmV0dXJuITE7cmV0dXJuITB9fSw2NTc5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1P'@;
put 'O3ouZGVyPVIoNjk4NCksei5wZW09UigyODgzKX0sMjg4MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIoNjk4NCk7ZnVuY3Rpb24gSShrKXtLLmNhbGwodGhpcyxrKSx0aGlzLmVuYz0icGVtIn16KEksSyksTS5leHBvcnRzPUksSS5wcm90b3R5cGUuZW5jb2Rl'@;
put 'PWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj1LLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLGspLnRvU3RyaW5nKCJiYXNlNjQiKSxWPVsiLS0tLS1CRUdJTiAiK0UubGFiZWwrIi0tLS0tIl07Zm9yKGxldCBCPTA7QjxqLmxlbmd0aDtCKz02NClWLnB1c2goai5zbGljZShCLEIrNjQpKTtyZXR1'@;
put 'cm4gVi5wdXNoKCItLS0tLUVORCAiK0UubGFiZWwrIi0tLS0tIiksVi5qb2luKCJcbiIpfX0sNDU5MDpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1m'@;
put 'dW5jdGlvbiBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2'@;
put 'ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1F'@;
put 'LEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1Mt'@;
put 'NTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3Zh'@;
put 'ciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29y'@;
put 'ZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtp'@;
put 'ZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9'@;
put 'Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgp'@;
put 'LEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4'@;
put 'ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXko'@;
put 'KSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMp'@;
put 'LHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFd'@;
put 'PDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8'@;
put 'Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgo'@;
put 'Zy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhp'@;
put 'cy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8o'@;
put 'dy09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9D'@;
put 'fDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7'@;
put 'aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlw'@;
put 'ZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVk'@;
put 'fSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30s'@;
put 'RS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRo'@;
put 'aXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAw'@;
put 'MCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0Njcy'@;
put 'MSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2'@;
put 'MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0'@;
put 'aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+'@;
put 'Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7'@;
put 'Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9y'@;
put 'KHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2'@;
put 'Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0i'@;
put 'Ijt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIw'@;
put 'IitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJu'@;
put 'IDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkg'@;
put 'c3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRv'@;
put 'QXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4'@;
put 'KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9'@;
put 'MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVb'@;
put 'cC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49'@;
put 'NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+'@;
put 'Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxl'@;
put 'bmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1'@;
put 'cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRo'@;
put 'aXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9'@;
put 'LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7'@;
put 'dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9y'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxD'@;
put 'Lmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhp'@;
put 'cy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5n'@;
put 'dGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMu'@;
put 'd29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2'@;
put 'KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxF'@;
put 'LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhp'@;
put 'cy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9'@;
put 'MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5s'@;
put 'ZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndv'@;
put 'cmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3'@;
put 'XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9'@;
put 'PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09'@;
put 'Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWdu'@;
put 'KCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndv'@;
put 'cmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMp'@;
put 'Zm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJd'@;
put 'LFllPTgxOTEmS2UsSmU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04'@;
put 'MTkxJml0LE10PWl0Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5'@;
put 'MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8bmVbN10sc249ODE5'@;
put 'MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixQbj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4'@;
put 'MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikpK01hdGgu'@;
put 'aW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSso'@;
put 'cD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsZm4pfDAp'@;
put 'K01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChG'@;
put 'ZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFllLGZuKXwwKStNYXRoLmltdWwoSmUsZnQpfDAsdz13K01hdGguaW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRo'@;
put 'LmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVu'@;
put 'KSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwo'@;
put 'V2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxL'@;
put 'ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXwwKStNYXRo'@;
put 'LmltdWwoSmUsTnQpfDAsdz13K01hdGguaW11bChKZSxtbil8MCx2PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDAp'@;
put 'fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11'@;
put 'bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAsdj12K01h'@;
put 'dGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYp'@;
put 'fDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAs'@;
put 'dz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxtbil8MCkr'@;
put 'TWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChKZSxwdCl8MCx3PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSso'@;
put 'dj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmlt'@;
put 'dWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9'@;
put 'ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01h'@;
put 'dGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5p'@;
put 'bXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxQbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13'@;
put 'K01hdGguaW11bChGZSxQbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRo'@;
put 'LmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11'@;
put 'bChodCxKdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJl'@;
put 'LHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUs'@;
put 'UG4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFBuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGgu'@;
put 'aW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRoLmltdWwo'@;
put 'RGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxKdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZ'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXww'@;
put 'LHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFBuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxQbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRo'@;
put 'LmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KHV0LEp0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2'@;
put 'PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUG4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFBuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkr'@;
put 'TWF0aC5pbXVsKEplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11'@;
put 'bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxw'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJu'@;
put 'KXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUG4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFBuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwo'@;
put 'UGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShw'@;
put 'PU1hdGguaW11bChVdCxKdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0'@;
put 'LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4p'@;
put 'fDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFBuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxQbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4p'@;
put 'fDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRo'@;
put 'LmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwo'@;
put 'TXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUG4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLFBuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygo'@;
put 'ODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5'@;
put 'bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwodXQsUG4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LFBuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2Zl'@;
put 'PSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKFB0LFBuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixQbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkp'@;
put 'PDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsUG4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sUG4pO3ZhciBocz0oZmUr'@;
put 'KHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0o'@;
put 'ZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixk'@;
put 'ZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4'@;
put 'XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9u'@;
put 'KGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5n'@;
put 'dGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7'@;
put 'T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09'@;
put 'TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3Vu'@;
put 'dEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0x'@;
put 'O3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMs'@;
put 'Uyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNbeGUrT2Vd'@;
put 'LFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUs'@;
put 'RmU9ZGUqRmUrZmUqTGUsTGU9SmUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0'@;
put 'aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIg'@;
put 'Uz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcs'@;
put 'QyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24o'@;
put 'Zyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYp'@;
put 'LEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29u'@;
put 'dmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0q'@;
put 'TGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5u'@;
put 'ZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5'@;
put 'cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUu'@;
put 'cHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYv'@;
put 'NjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90'@;
put 'eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJy'@;
put 'YXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgm'@;
put 'JjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVv'@;
put 'ZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcs'@;
put 'dz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0'@;
put 'dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/'@;
put 'KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNb'@;
put 'ZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9y'@;
put 'KGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMu'@;
put 'bGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNo'@;
put 'cm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1Nd'@;
put 'JjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMu'@;
put 'bGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8'@;
put 'dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVu'@;
put 'Y3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJu'@;
put 'IHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1'@;
put 'cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIg'@;
put 'Qz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5w'@;
put 'cm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMo'@;
put 'KX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02'@;
put 'NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMu'@;
put 'c3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVu'@;
put 'Y3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5n'@;
put 'dGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVn'@;
put 'YXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5f'@;
put 'aXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1D'@;
put 'JiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1n'@;
put 'Lm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRp'@;
put 'dmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09'@;
put 'cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1v'@;
put 'ZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCku'@;
put 'bW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMu'@;
put 'Y21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5s'@;
put 'ZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcx'@;
put 'MDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFn'@;
put 'LmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxT'@;
put 'Lml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8'@;
put 'cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlz'@;
put 'T2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19'@;
put 'LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9u'@;
put 'ZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0w'@;
put 'LHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkp'@;
put 'fXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxT'@;
put 'PWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEp'@;
put 'O3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0s'@;
put 'RS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNb'@;
put 'MF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3'@;
put 'PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhp'@;
put 'cy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5j'@;
put 'bXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90'@;
put 'b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtp'@;
put 'Zih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rl'@;
put 'bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBh'@;
put 'IG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQs'@;
put 'ImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVk'@;
put 'IG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCBy'@;
put 'ZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQs'@;
put 'InJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0'@;
put 'aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUu'@;
put 'cmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMu'@;
put 'cmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0'@;
put 'aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5n'@;
put 'dGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJp'@;
put 'bmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlz'@;
put 'LnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1w'@;
put 'KHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3'@;
put 'IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXAp'@;
put 'KS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUu'@;
put 'cHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAz'@;
put 'LHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZT'@;
put 'LHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cu'@;
put 'd29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9'@;
put 'PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIg'@;
put 'dj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylD'@;
put 'PW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkx'@;
put 'PWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdh'@;
put 'dGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShn'@;
put 'KS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxD'@;
put 'KXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1'@;
put 'cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90'@;
put 'eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNo'@;
put 'bG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxI'@;
put 'LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9u'@;
put 'ZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsr'@;
put 'LHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3co'@;
put 'ZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9PU9lLmNtcCh3KTtqZSsr'@;
put 'KU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7'@;
put 'dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhp'@;
put 'cyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMu'@;
put 'Yml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8'@;
put 'PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJv'@;
put 'dG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51'@;
put 'c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8o'@;
put 'KSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNt'@;
put 'cCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRo'@;
put 'aXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAu'@;
put 'Y21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sOTI4'@;
put 'MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpO2Z1bmN0aW9uIEkoZmUpe3JldHVybihJPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHhlKXtyZXR1cm4gdHlwZW9mIHhlfTpm'@;
put 'dW5jdGlvbih4ZSl7cmV0dXJuIHhlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ4ZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmeGUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB4ZX0pKGZlKX12YXIgayxFLGo9UigyMTM2KS5jb2RlcyxWPWouRVJSX0FNQklHVU9VU19B'@;
put 'UkdVTUVOVCxCPWouRVJSX0lOVkFMSURfQVJHX1RZUEUsWT1qLkVSUl9JTlZBTElEX0FSR19WQUxVRSxYPWouRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFLFU9ai5FUlJfTUlTU0lOR19BUkdTLHE9Uig1OTYxKSxlZT1SKDk1MzkpLmluc3BlY3QsdGU9Uig5NTM5KS50eXBlcyxvZT10ZS5pc1By'@;
put 'b21pc2Usc2U9dGUuaXNSZWdFeHAsaGU9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOlIoODA5MSkuYXNzaWduLHVlPU9iamVjdC5pcz9PYmplY3QuaXM6Uig2MDkpO2Z1bmN0aW9uIGNlKCl7dmFyIGZlPVIoOTE1OCk7az1mZS5pc0RlZXBFcXVhbCxFPWZlLmlzRGVlcFN0cmljdEVxdWFs'@;
put 'fXZhciBHPSExLGI9TS5leHBvcnRzPWcsRD17fTtmdW5jdGlvbiBIKGZlKXt0aHJvdyBmZS5tZXNzYWdlIGluc3RhbmNlb2YgRXJyb3I/ZmUubWVzc2FnZTpuZXcgcShmZSl9ZnVuY3Rpb24gTihmZSx4ZSxMZSxGZSl7aWYoIUxlKXt2YXIgT2U9ITE7aWYoMD09PXhlKU9lPSEwLEZlPSJObyB2'@;
put 'YWx1ZSBhcmd1bWVudCBwYXNzZWQgdG8gYGFzc2VydC5vaygpYCI7ZWxzZSBpZihGZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IEZlO3ZhciBqZT1uZXcgcSh7YWN0dWFsOkxlLGV4cGVjdGVkOiEwLG1lc3NhZ2U6RmUsb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46ZmV9KTt0aHJvdyBqZS5n'@;
put 'ZW5lcmF0ZWRNZXNzYWdlPU9lLGplfX1mdW5jdGlvbiBnKCl7Zm9yKHZhciBmZT1hcmd1bWVudHMubGVuZ3RoLHhlPW5ldyBBcnJheShmZSksTGU9MDtMZTxmZTtMZSsrKXhlW0xlXT1hcmd1bWVudHNbTGVdO04uYXBwbHkodm9pZCAwLFtnLHhlLmxlbmd0aF0uY29uY2F0KHhlKSl9Yi5mYWls'@;
put 'PWZ1bmN0aW9uIGZlKHhlLExlLEZlLE9lLGplKXt2YXIgV2UsS2U9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09S2U/V2U9IkZhaWxlZCI6MT09PUtlPyhGZT14ZSx4ZT12b2lkIDApOighMT09PUcmJihHPSEwLCh6LmVtaXRXYXJuaW5nP3ouZW1pdFdhcm5pbmc6Sy53YXJuLmJpbmQoSykpKCJh'@;
put 'c3NlcnQuZmFpbCgpIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFzc2VydC5zdHJpY3RFcXVhbCgpIGluc3RlYWQgb3Igb25seSBwYXNzIGEgbWVzc2FnZS4iLCJEZXByZWNhdGlvbldhcm5pbmciLCJERVAwMDk0IikpLDI9PT1LZSYmKE9l'@;
put 'PSIhPSIpKSxGZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IEZlO3ZhciBZZT17YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG9wZXJhdG9yOnZvaWQgMD09PU9lPyJmYWlsIjpPZSxzdGFja1N0YXJ0Rm46amV8fGZlfTt2b2lkIDAhPT1GZSYmKFllLm1lc3NhZ2U9RmUpO3ZhciBKZT1uZXcgcShZZSk7'@;
put 'dGhyb3cgV2UmJihKZS5tZXNzYWdlPVdlLEplLmdlbmVyYXRlZE1lc3NhZ2U9ITApLEplfSxiLkFzc2VydGlvbkVycm9yPXEsYi5vaz1nLGIuZXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt4'@;
put 'ZSE9TGUmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt4'@;
put 'ZT09TGUmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiIhPSIsc3RhY2tTdGFydEZuOmZlfSl9LGIuZGVlcEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7'@;
put 'dm9pZCAwPT09ayYmY2UoKSxrKHhlLExlKXx8SCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6ImRlZXBFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90RGVlcEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhy'@;
put 'b3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxrKHhlLExlKSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6Im5vdERlZXBFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIuZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIGZl'@;
put 'KHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxFKHhlLExlKXx8SCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFy'@;
put 'dEZuOmZlfSl9LGIubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxFKHhlLExlKSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3Nh'@;
put 'Z2U6RmUsb3BlcmF0b3I6Im5vdERlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIuc3RyaWN0RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt1ZSh4ZSxMZSl8fEgoe2FjdHVh'@;
put 'bDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt1'@;
put 'ZSh4ZSxMZSkmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJub3RTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9O3ZhciBDPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXt2YXIgT2U9dGhpczsoZnVuY3Rpb24oamUsV2Upe2lmKCEoamUgaW5zdGFuY2Vv'@;
put 'ZiBXZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGZlKSxMZS5mb3JFYWNoKGZ1bmN0aW9uKGplKXtqZSBpbiB4ZSYmKE9lW2plXT12b2lkIDAhPT1GZSYmInN0cmluZyI9PXR5cGVvZiBGZVtqZV0mJnNlKHhlW2plXSkm'@;
put 'JnhlW2plXS50ZXN0KEZlW2plXSk/RmVbamVdOnhlW2plXSl9KX07ZnVuY3Rpb24gUyhmZSx4ZSxMZSxGZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHhlKXtpZihzZSh4ZSkpcmV0dXJuIHhlLnRlc3QoZmUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBCKCJleHBlY3RlZCIs'@;
put 'WyJGdW5jdGlvbiIsIlJlZ0V4cCJdLHhlKTtpZigib2JqZWN0IiE9PUkoZmUpfHxudWxsPT09ZmUpe3ZhciBPZT1uZXcgcSh7YWN0dWFsOmZlLGV4cGVjdGVkOnhlLG1lc3NhZ2U6TGUsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOkZlfSk7dGhyb3cgT2Uub3BlcmF0'@;
put 'b3I9RmUubmFtZSxPZX12YXIgamU9T2JqZWN0LmtleXMoeGUpO2lmKHhlIGluc3RhbmNlb2YgRXJyb3IpamUucHVzaCgibmFtZSIsIm1lc3NhZ2UiKTtlbHNlIGlmKDA9PT1qZS5sZW5ndGgpdGhyb3cgbmV3IFkoImVycm9yIix4ZSwibWF5IG5vdCBiZSBhbiBlbXB0eSBvYmplY3QiKTtyZXR1'@;
put 'cm4gdm9pZCAwPT09ayYmY2UoKSxqZS5mb3JFYWNoKGZ1bmN0aW9uKFdlKXsic3RyaW5nIj09dHlwZW9mIGZlW1dlXSYmc2UoeGVbV2VdKSYmeGVbV2VdLnRlc3QoZmVbV2VdKXx8ZnVuY3Rpb24oS2UsWWUsSmUsbHQsUGUsYmUpe2lmKCEoSmUgaW4gS2UpfHwhRShLZVtKZV0sWWVbSmVdKSl7'@;
put 'aWYoIWx0KXt2YXIgQWU9bmV3IEMoS2UsUGUpLFRlPW5ldyBDKFllLFBlLEtlKSxxZT1uZXcgcSh7YWN0dWFsOkFlLGV4cGVjdGVkOlRlLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpiZX0pO3Rocm93IHFlLmFjdHVhbD1LZSxxZS5leHBlY3RlZD1ZZSxxZS5vcGVy'@;
put 'YXRvcj1iZS5uYW1lLHFlfUgoe2FjdHVhbDpLZSxleHBlY3RlZDpZZSxtZXNzYWdlOmx0LG9wZXJhdG9yOmJlLm5hbWUsc3RhY2tTdGFydEZuOmJlfSl9fShmZSx4ZSxXZSxMZSxqZSxGZSl9KSwhMH1yZXR1cm4gdm9pZCAwIT09eGUucHJvdG90eXBlJiZmZSBpbnN0YW5jZW9mIHhlfHwhRXJy'@;
put 'b3IuaXNQcm90b3R5cGVPZih4ZSkmJiEwPT09eGUuY2FsbCh7fSxmZSl9ZnVuY3Rpb24gdihmZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGZlKXRocm93IG5ldyBCKCJmbiIsIkZ1bmN0aW9uIixmZSk7dHJ5e2ZlKCl9Y2F0Y2goeGUpe3JldHVybiB4ZX1yZXR1cm4gRH1mdW5jdGlvbiBwKGZl'@;
put 'KXtyZXR1cm4gb2UoZmUpfHxudWxsIT09ZmUmJiJvYmplY3QiPT09SShmZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBmZS50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgZmUuY2F0Y2h9ZnVuY3Rpb24gdyhmZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgeGU7'@;
put 'aWYoImZ1bmN0aW9uIj09dHlwZW9mIGZlKXtpZighcCh4ZT1mZSgpKSl0aHJvdyBuZXcgWCgiaW5zdGFuY2Ugb2YgUHJvbWlzZSIsInByb21pc2VGbiIseGUpfWVsc2V7aWYoIXAoZmUpKXRocm93IG5ldyBCKCJwcm9taXNlRm4iLFsiRnVuY3Rpb24iLCJQcm9taXNlIl0sZmUpO3hlPWZlfXJl'@;
put 'dHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHhlfSkudGhlbihmdW5jdGlvbigpe3JldHVybiBEfSkuY2F0Y2goZnVuY3Rpb24oTGUpe3JldHVybiBMZX0pfSl9ZnVuY3Rpb24gSihmZSx4ZSxMZSxGZSl7aWYoInN0cmluZyI9PXR5cGVvZiBMZSl7aWYoND09'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEIoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxMZSk7aWYoIm9iamVjdCI9PT1JKHhlKSYmbnVsbCE9PXhlKXtpZih4ZS5tZXNzYWdlPT09TGUpdGhyb3cgbmV3IFYoImVycm9yL21lc3NhZ2UiLCdUaGUg'@;
put 'ZXJyb3IgbWVzc2FnZSAiJy5jb25jYXQoeGUubWVzc2FnZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpfWVsc2UgaWYoeGU9PT1MZSl0aHJvdyBuZXcgVigiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciAiJy5jb25jYXQoeGUsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNz'@;
put 'YWdlLicpKTtGZT1MZSxMZT12b2lkIDB9ZWxzZSBpZihudWxsIT1MZSYmIm9iamVjdCIhPT1JKExlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIExlKXRocm93IG5ldyBCKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0sTGUpO2lmKHhlPT09RCl7dmFyIE9lPSIi'@;
put 'O0xlJiZMZS5uYW1lJiYoT2UrPSIgKCIuY29uY2F0KExlLm5hbWUsIikiKSksT2UrPUZlPyI6ICIuY29uY2F0KEZlKToiLiIsSCh7YWN0dWFsOnZvaWQgMCxleHBlY3RlZDpMZSxvcGVyYXRvcjpmZS5uYW1lLG1lc3NhZ2U6Ik1pc3NpbmcgZXhwZWN0ZWQgIi5jb25jYXQoInJlamVjdHMiPT09'@;
put 'ZmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KE9lKSxzdGFja1N0YXJ0Rm46ZmV9KX1pZihMZSYmIVMoeGUsTGUsRmUsZmUpKXRocm93IHhlfWZ1bmN0aW9uIG5lKGZlLHhlLExlLEZlKXtpZih4ZSE9PUQpe2lmKCJzdHJpbmciPT10eXBlb2YgTGUmJihGZT1MZSxMZT12'@;
put 'b2lkIDApLCFMZXx8Uyh4ZSxMZSkpe3ZhciBPZT1GZT8iOiAiLmNvbmNhdChGZSk6Ii4iO0goe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxvcGVyYXRvcjpmZS5uYW1lLG1lc3NhZ2U6IkdvdCB1bndhbnRlZCAiLmNvbmNhdCgiZG9lc05vdFJlamVjdCI9PT1mZS5uYW1lPyJyZWplY3Rpb24iOiJl'@;
put 'eGNlcHRpb24iKS5jb25jYXQoT2UsIlxuIikrJ0FjdHVhbCBtZXNzYWdlOiAiJy5jb25jYXQoeGUmJnhlLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm46ZmV9KX10aHJvdyB4ZX19ZnVuY3Rpb24gZGUoKXtmb3IodmFyIGZlPWFyZ3VtZW50cy5sZW5ndGgseGU9bmV3IEFycmF5KGZlKSxMZT0w'@;
put 'O0xlPGZlO0xlKyspeGVbTGVdPWFyZ3VtZW50c1tMZV07Ti5hcHBseSh2b2lkIDAsW2RlLHhlLmxlbmd0aF0uY29uY2F0KHhlKSl9Yi50aHJvd3M9ZnVuY3Rpb24gZmUoeGUpe2Zvcih2YXIgTGU9YXJndW1lbnRzLmxlbmd0aCxGZT1uZXcgQXJyYXkoTGU+MT9MZS0xOjApLE9lPTE7T2U8TGU7'@;
put 'T2UrKylGZVtPZS0xXT1hcmd1bWVudHNbT2VdO0ouYXBwbHkodm9pZCAwLFtmZSx2KHhlKV0uY29uY2F0KEZlKSl9LGIucmVqZWN0cz1mdW5jdGlvbiBmZSh4ZSl7Zm9yKHZhciBMZT1hcmd1bWVudHMubGVuZ3RoLEZlPW5ldyBBcnJheShMZT4xP0xlLTE6MCksT2U9MTtPZTxMZTtPZSsrKUZl'@;
put 'W09lLTFdPWFyZ3VtZW50c1tPZV07cmV0dXJuIHcoeGUpLnRoZW4oZnVuY3Rpb24oamUpe3JldHVybiBKLmFwcGx5KHZvaWQgMCxbZmUsamVdLmNvbmNhdChGZSkpfSl9LGIuZG9lc05vdFRocm93PWZ1bmN0aW9uIGZlKHhlKXtmb3IodmFyIExlPWFyZ3VtZW50cy5sZW5ndGgsRmU9bmV3IEFy'@;
put 'cmF5KExlPjE/TGUtMTowKSxPZT0xO09lPExlO09lKyspRmVbT2UtMV09YXJndW1lbnRzW09lXTtuZS5hcHBseSh2b2lkIDAsW2ZlLHYoeGUpXS5jb25jYXQoRmUpKX0sYi5kb2VzTm90UmVqZWN0PWZ1bmN0aW9uIGZlKHhlKXtmb3IodmFyIExlPWFyZ3VtZW50cy5sZW5ndGgsRmU9bmV3IEFy'@;
put 'cmF5KExlPjE/TGUtMTowKSxPZT0xO09lPExlO09lKyspRmVbT2UtMV09YXJndW1lbnRzW09lXTtyZXR1cm4gdyh4ZSkudGhlbihmdW5jdGlvbihqZSl7cmV0dXJuIG5lLmFwcGx5KHZvaWQgMCxbZmUsamVdLmNvbmNhdChGZSkpfSl9LGIuaWZFcnJvcj1mdW5jdGlvbiBmZSh4ZSl7aWYobnVs'@;
put 'bCE9eGUpe3ZhciBMZT0iaWZFcnJvciBnb3QgdW53YW50ZWQgZXhjZXB0aW9uOiAiOyJvYmplY3QiPT09SSh4ZSkmJiJzdHJpbmciPT10eXBlb2YgeGUubWVzc2FnZT9MZSs9MD09PXhlLm1lc3NhZ2UubGVuZ3RoJiZ4ZS5jb25zdHJ1Y3Rvcj94ZS5jb25zdHJ1Y3Rvci5uYW1lOnhlLm1lc3Nh'@;
put 'Z2U6TGUrPWVlKHhlKTt2YXIgRmU9bmV3IHEoe2FjdHVhbDp4ZSxleHBlY3RlZDpudWxsLG9wZXJhdG9yOiJpZkVycm9yIixtZXNzYWdlOkxlLHN0YWNrU3RhcnRGbjpmZX0pLE9lPXhlLnN0YWNrO2lmKCJzdHJpbmciPT10eXBlb2YgT2Upe3ZhciBqZT1PZS5zcGxpdCgiXG4iKTtqZS5zaGlm'@;
put 'dCgpO2Zvcih2YXIgV2U9RmUuc3RhY2suc3BsaXQoIlxuIiksS2U9MDtLZTxqZS5sZW5ndGg7S2UrKyl7dmFyIFllPVdlLmluZGV4T2YoamVbS2VdKTtpZigtMSE9PVllKXtXZT1XZS5zbGljZSgwLFllKTticmVha319RmUuc3RhY2s9IiIuY29uY2F0KFdlLmpvaW4oIlxuIiksIlxuIikuY29u'@;
put 'Y2F0KGplLmpvaW4oIlxuIikpfXRocm93IEZlfX0sYi5zdHJpY3Q9aGUoZGUsYix7ZXF1YWw6Yi5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6Yi5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6Yi5ub3RTdHJpY3RFcXVhbCxub3REZWVwRXF1YWw6Yi5ub3REZWVwU3RyaWN0RXF1YWx9KSxiLnN0cmlj'@;
put 'dC5zdHJpY3Q9Yi5zdHJpY3R9LDU5NjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoTixnLEMpe3JldHVybiBnIGluIE4/T2JqZWN0LmRlZmluZVByb3BlcnR5KE4sZyx7dmFsdWU6QyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs'@;
put 'ZTohMH0pOk5bZ109QyxOfWZ1bmN0aW9uIGsoTixnKXtyZXR1cm4hZ3x8Im9iamVjdCIhPT1YKGcpJiYiZnVuY3Rpb24iIT10eXBlb2YgZz9FKE4pOmd9ZnVuY3Rpb24gRShOKXtpZih2b2lkIDA9PT1OKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFs'@;
put 'aXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIE59ZnVuY3Rpb24gaihOKXt2YXIgZz0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybiBqPWZ1bmN0aW9uKEMpe2lmKG51bGw9PT1DfHwtMT09PUZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwo'@;
put 'QykuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpKXJldHVybiBDO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBDKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7aWYodm9pZCAwIT09Zyl7aWYoZy5oYXMoQykpcmV0'@;
put 'dXJuIGcuZ2V0KEMpO2cuc2V0KEMsdil9ZnVuY3Rpb24gdigpe3JldHVybiBWKEMsYXJndW1lbnRzLFkodGhpcykuY29uc3RydWN0b3IpfXJldHVybiB2LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dixlbnVtZXJhYmxlOiExLHdyaXRh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxCKHYsQyl9LGooTil9ZnVuY3Rpb24gVihOLGcsQyl7cmV0dXJuKFY9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKFMsdixwKXt2YXIg'@;
put 'dz1bbnVsbF07dy5wdXNoLmFwcGx5KHcsdik7dmFyIEo9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoUyx3KSk7cmV0dXJuIHAmJkIoSixwLnByb3RvdHlwZSksSn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBCKE4sZyl7cmV0dXJuKEI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxm'@;
put 'dW5jdGlvbihDLFMpe3JldHVybiBDLl9fcHJvdG9fXz1TLEN9KShOLGcpfWZ1bmN0aW9uIFkoTil7cmV0dXJuKFk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihnKXtyZXR1cm4gZy5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihn'@;
put 'KX0pKE4pfWZ1bmN0aW9uIFgoTil7cmV0dXJuKFg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZyl7cmV0dXJuIHR5cGVvZiBnfTpmdW5jdGlvbihnKXtyZXR1cm4gZyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJv'@;
put 'bCYmZy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGd9KShOKX12YXIgVT1SKDk1MzkpLmluc3BlY3QscT1SKDIxMzYpLmNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFO2Z1bmN0aW9uIGVlKE4sZyxDKXtyZXR1cm4odm9pZCAwPT09'@;
put 'Q3x8Qz5OLmxlbmd0aCkmJihDPU4ubGVuZ3RoKSxOLnN1YnN0cmluZyhDLWcubGVuZ3RoLEMpPT09Z312YXIgdGU9IiIsb2U9IiIsc2U9IiIsaGU9IiIsdWU9e2RlZXBTdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWw6IixzdHJpY3RFcXVhbDoi'@;
put 'RXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGVxdWFsOiIsc3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsZGVlcEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFs'@;
put 'OiIsZXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFsOiIsbm90RGVlcFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBzdHJp'@;
put 'Y3RseSB1bmVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLG5vdERlZXBFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbCB0bzon'@;
put 'LG5vdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBsb29zZWx5IHVuZXF1YWwgdG86Jyxub3RJZGVudGljYWw6IlZhbHVlcyBpZGVudGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6In07ZnVuY3Rpb24gRyhOKXt2YXIgZz1PYmplY3Qua2V5cyhOKSxDPU9iamVjdC5jcmVhdGUo'@;
put 'T2JqZWN0LmdldFByb3RvdHlwZU9mKE4pKTtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKFMpe0NbU109TltTXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDLCJtZXNzYWdlIix7dmFsdWU6Ti5tZXNzYWdlfSksQ31mdW5jdGlvbiBiKE4pe3JldHVybiBVKE4se2NvbXBhY3Q6ITEsY3VzdG9t'@;
put 'SW5zcGVjdDohMSxkZXB0aDoxZTMsbWF4QXJyYXlMZW5ndGg6MS8wLHNob3dIaWRkZW46ITEsYnJlYWtMZW5ndGg6MS8wLHNob3dQcm94eTohMSxzb3J0ZWQ6ITAsZ2V0dGVyczohMH0pfXZhciBIPWZ1bmN0aW9uKE4pe2Z1bmN0aW9uIGcocCl7dmFyIHc7aWYoZnVuY3Rpb24oWWUsSmUpe2lm'@;
put 'KCEoWWUgaW5zdGFuY2VvZiBKZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZyksIm9iamVjdCIhPT1YKHApfHxudWxsPT09cCl0aHJvdyBuZXcgcSgib3B0aW9ucyIsIk9iamVjdCIscCk7dmFyIEo9cC5tZXNzYWdlLG5l'@;
put 'PXAub3BlcmF0b3IsZGU9cC5zdGFja1N0YXJ0Rm4sZmU9cC5hY3R1YWwseGU9cC5leHBlY3RlZCxMZT1FcnJvci5zdGFja1RyYWNlTGltaXQ7aWYoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTAsbnVsbCE9Sil3PWsodGhpcyxZKGcpLmNhbGwodGhpcyxTdHJpbmcoSikpKTtlbHNlIGlmKHouc3Rk'@;
put 'ZXJyJiZ6LnN0ZGVyci5pc1RUWSYmKHouc3RkZXJyJiZ6LnN0ZGVyci5nZXRDb2xvckRlcHRoJiYxIT09ei5zdGRlcnIuZ2V0Q29sb3JEZXB0aCgpPyh0ZT0iXHgxYlszNG0iLG9lPSJceDFiWzMybSIsaGU9Ilx4MWJbMzltIixzZT0iXHgxYlszMW0iKToodGU9IiIsb2U9IiIsaGU9IiIsc2U9'@;
put 'IiIpKSwib2JqZWN0Ij09PVgoZmUpJiZudWxsIT09ZmUmJiJvYmplY3QiPT09WCh4ZSkmJm51bGwhPT14ZSYmInN0YWNrImluIGZlJiZmZSBpbnN0YW5jZW9mIEVycm9yJiYic3RhY2siaW4geGUmJnhlIGluc3RhbmNlb2YgRXJyb3ImJihmZT1HKGZlKSx4ZT1HKHhlKSksImRlZXBTdHJpY3RF'@;
put 'cXVhbCI9PT1uZXx8InN0cmljdEVxdWFsIj09PW5lKXc9ayh0aGlzLFkoZykuY2FsbCh0aGlzLGZ1bmN0aW9uIEQoTixnLEMpe3ZhciBTPSIiLHY9IiIscD0wLHc9IiIsSj0hMSxuZT1iKE4pLGRlPW5lLnNwbGl0KCJcbiIpLGZlPWIoZykuc3BsaXQoIlxuIikseGU9MCxMZT0iIjtpZigic3Ry'@;
put 'aWN0RXF1YWwiPT09QyYmIm9iamVjdCI9PT1YKE4pJiYib2JqZWN0Ij09PVgoZykmJm51bGwhPT1OJiZudWxsIT09ZyYmKEM9InN0cmljdEVxdWFsT2JqZWN0IiksMT09PWRlLmxlbmd0aCYmMT09PWZlLmxlbmd0aCYmZGVbMF0hPT1mZVswXSl7dmFyIEZlPWRlWzBdLmxlbmd0aCtmZVswXS5s'@;
put 'ZW5ndGg7aWYoRmU8PTEwKXtpZighKCJvYmplY3QiPT09WChOKSYmbnVsbCE9PU58fCJvYmplY3QiPT09WChnKSYmbnVsbCE9PWd8fDA9PT1OJiYwPT09ZykpcmV0dXJuIiIuY29uY2F0KHVlW0NdLCJcblxuIikrIiIuY29uY2F0KGRlWzBdLCIgIT09ICIpLmNvbmNhdChmZVswXSwiXG4iKX1l'@;
put 'bHNlIGlmKCJzdHJpY3RFcXVhbE9iamVjdCIhPT1DJiZGZTwoei5zdGRlcnImJnouc3RkZXJyLmlzVFRZP3ouc3RkZXJyLmNvbHVtbnM6ODApKXtmb3IoO2RlWzBdW3hlXT09PWZlWzBdW3hlXTspeGUrKzt4ZT4yJiYoTGU9IlxuICAiLmNvbmNhdChmdW5jdGlvbihxZSxYZSl7aWYoWGU9TWF0'@;
put 'aC5mbG9vcihYZSksMD09cWUubGVuZ3RofHwwPT1YZSlyZXR1cm4iIjt2YXIgVWU9cWUubGVuZ3RoKlhlO2ZvcihYZT1NYXRoLmZsb29yKE1hdGgubG9nKFhlKS9NYXRoLmxvZygyKSk7WGU7KXFlKz1xZSxYZS0tO3JldHVybiBxZStxZS5zdWJzdHJpbmcoMCxVZS1xZS5sZW5ndGgpfSgiICIs'@;
put 'eGUpLCJeIikseGU9MCl9fWZvcih2YXIgT2U9ZGVbZGUubGVuZ3RoLTFdLGplPWZlW2ZlLmxlbmd0aC0xXTtPZT09PWplJiYoeGUrKzwyP3c9IlxuICAiLmNvbmNhdChPZSkuY29uY2F0KHcpOlM9T2UsZGUucG9wKCksZmUucG9wKCksMCE9PWRlLmxlbmd0aCYmMCE9PWZlLmxlbmd0aCk7KU9l'@;
put 'PWRlW2RlLmxlbmd0aC0xXSxqZT1mZVtmZS5sZW5ndGgtMV07dmFyIFdlPU1hdGgubWF4KGRlLmxlbmd0aCxmZS5sZW5ndGgpO2lmKDA9PT1XZSl7dmFyIEtlPW5lLnNwbGl0KCJcbiIpO2lmKEtlLmxlbmd0aD4zMClmb3IoS2VbMjZdPSIiLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKTtL'@;
put 'ZS5sZW5ndGg+Mjc7KUtlLnBvcCgpO3JldHVybiIiLmNvbmNhdCh1ZS5ub3RJZGVudGljYWwsIlxuXG4iKS5jb25jYXQoS2Uuam9pbigiXG4iKSwiXG4iKX14ZT4zJiYodz0iXG4iLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKS5jb25jYXQodyksSj0hMCksIiIhPT1TJiYodz0iXG4gICIu'@;
put 'Y29uY2F0KFMpLmNvbmNhdCh3KSxTPSIiKTt2YXIgWWU9MCxKZT11ZVtDXSsiXG4iLmNvbmNhdChvZSwiKyBhY3R1YWwiKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoc2UsIi0gZXhwZWN0ZWQiKS5jb25jYXQoaGUpLGx0PSIgIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSwiIExpbmVzIHNr'@;
put 'aXBwZWQiKTtmb3IoeGU9MDt4ZTxXZTt4ZSsrKXt2YXIgUGU9eGUtcDtpZihkZS5sZW5ndGg8eGUrMSlQZT4xJiZ4ZT4yJiYoUGU+ND8odis9IlxuIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSksSj0hMCk6UGU+MyYmKHYrPSJcbiAgIi5jb25jYXQoZmVbeGUtMl0pLFllKyspLHYrPSJc'@;
put 'biAgIi5jb25jYXQoZmVbeGUtMV0pLFllKyspLHA9eGUsUys9IlxuIi5jb25jYXQoc2UsIi0iKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoZmVbeGVdKSxZZSsrO2Vsc2UgaWYoZmUubGVuZ3RoPHhlKzEpUGU+MSYmeGU+MiYmKFBlPjQ/KHYrPSJcbiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQo'@;
put 'aGUpLEo9ITApOlBlPjMmJih2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTJdKSxZZSsrKSx2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTFdKSxZZSsrKSxwPXhlLHYrPSJcbiIuY29uY2F0KG9lLCIrIikuY29uY2F0KGhlLCIgIikuY29uY2F0KGRlW3hlXSksWWUrKztlbHNle3ZhciBiZT1mZVt4ZV0s'@;
put 'QWU9ZGVbeGVdLFRlPUFlIT09YmUmJighZWUoQWUsIiwiKXx8QWUuc2xpY2UoMCwtMSkhPT1iZSk7VGUmJmVlKGJlLCIsIikmJmJlLnNsaWNlKDAsLTEpPT09QWUmJihUZT0hMSxBZSs9IiwiKSxUZT8oUGU+MSYmeGU+MiYmKFBlPjQ/KHYrPSJcbiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQo'@;
put 'aGUpLEo9ITApOlBlPjMmJih2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTJdKSxZZSsrKSx2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTFdKSxZZSsrKSxwPXhlLHYrPSJcbiIuY29uY2F0KG9lLCIrIikuY29uY2F0KGhlLCIgIikuY29uY2F0KEFlKSxTKz0iXG4iLmNvbmNhdChzZSwiLSIpLmNvbmNh'@;
put 'dChoZSwiICIpLmNvbmNhdChiZSksWWUrPTIpOih2Kz1TLFM9IiIsMSE9PVBlJiYwIT09eGV8fCh2Kz0iXG4gICIuY29uY2F0KEFlKSxZZSsrKSl9aWYoWWU+MjAmJnhlPFdlLTIpcmV0dXJuIiIuY29uY2F0KEplKS5jb25jYXQobHQsIlxuIikuY29uY2F0KHYsIlxuIikuY29uY2F0KHRlLCIu'@;
put 'Li4iKS5jb25jYXQoaGUpLmNvbmNhdChTLCJcbiIpKyIiLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKX1yZXR1cm4iIi5jb25jYXQoSmUpLmNvbmNhdChKP2x0OiIiLCJcbiIpLmNvbmNhdCh2KS5jb25jYXQoUykuY29uY2F0KHcpLmNvbmNhdChMZSl9KGZlLHhlLG5lKSkpO2Vsc2UgaWYo'@;
put 'Im5vdERlZXBTdHJpY3RFcXVhbCI9PT1uZXx8Im5vdFN0cmljdEVxdWFsIj09PW5lKXt2YXIgRmU9dWVbbmVdLE9lPWIoZmUpLnNwbGl0KCJcbiIpO2lmKCJub3RTdHJpY3RFcXVhbCI9PT1uZSYmIm9iamVjdCI9PT1YKGZlKSYmbnVsbCE9PWZlJiYoRmU9dWUubm90U3RyaWN0RXF1YWxPYmpl'@;
put 'Y3QpLE9lLmxlbmd0aD4zMClmb3IoT2VbMjZdPSIiLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKTtPZS5sZW5ndGg+Mjc7KU9lLnBvcCgpO3c9ayh0aGlzLDE9PT1PZS5sZW5ndGg/WShnKS5jYWxsKHRoaXMsIiIuY29uY2F0KEZlLCIgIikuY29uY2F0KE9lWzBdKSk6WShnKS5jYWxsKHRo'@;
put 'aXMsIiIuY29uY2F0KEZlLCJcblxuIikuY29uY2F0KE9lLmpvaW4oIlxuIiksIlxuIikpKX1lbHNle3ZhciBqZT1iKGZlKSxXZT0iIixLZT11ZVtuZV07Im5vdERlZXBFcXVhbCI9PT1uZXx8Im5vdEVxdWFsIj09PW5lPyhqZT0iIi5jb25jYXQodWVbbmVdLCJcblxuIikuY29uY2F0KGplKSku'@;
put 'bGVuZ3RoPjEwMjQmJihqZT0iIi5jb25jYXQoamUuc2xpY2UoMCwxMDIxKSwiLi4uIikpOihXZT0iIi5jb25jYXQoYih4ZSkpLGplLmxlbmd0aD41MTImJihqZT0iIi5jb25jYXQoamUuc2xpY2UoMCw1MDkpLCIuLi4iKSksV2UubGVuZ3RoPjUxMiYmKFdlPSIiLmNvbmNhdChXZS5zbGljZSgw'@;
put 'LDUwOSksIi4uLiIpKSwiZGVlcEVxdWFsIj09PW5lfHwiZXF1YWwiPT09bmU/amU9IiIuY29uY2F0KEtlLCJcblxuIikuY29uY2F0KGplLCJcblxuc2hvdWxkIGVxdWFsXG5cbiIpOldlPSIgIi5jb25jYXQobmUsIiAiKS5jb25jYXQoV2UpKSx3PWsodGhpcyxZKGcpLmNhbGwodGhpcywiIi5j'@;
put 'b25jYXQoamUpLmNvbmNhdChXZSkpKX1yZXR1cm4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PUxlLHcuZ2VuZXJhdGVkTWVzc2FnZT0hSixPYmplY3QuZGVmaW5lUHJvcGVydHkoRSh3KSwibmFtZSIse3ZhbHVlOiJBc3NlcnRpb25FcnJvciBbRVJSX0FTU0VSVElPTl0iLGVudW1lcmFibGU6ITEs'@;
put 'd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdy5jb2RlPSJFUlJfQVNTRVJUSU9OIix3LmFjdHVhbD1mZSx3LmV4cGVjdGVkPXhlLHcub3BlcmF0b3I9bmUsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKEUodyksZGUpLHcubmFtZT0iQXNzZXJ0'@;
put 'aW9uRXJyb3IiLGsodyl9dmFyIFM7cmV0dXJuIGZ1bmN0aW9uKHAsdyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHcmJm51bGwhPT13KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7cC5wcm90b3R5cGU9T2Jq'@;
put 'ZWN0LmNyZWF0ZSh3JiZ3LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHcmJkIocCx3KX0oZyxOKSxTPVt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIi5jb25jYXQodGhpcy5uYW1lLCIgWyIpLmNv'@;
put 'bmNhdCh0aGlzLmNvZGUsIl06ICIpLmNvbmNhdCh0aGlzLm1lc3NhZ2UpfX0se2tleTpVLmN1c3RvbSx2YWx1ZTpmdW5jdGlvbihwLHcpe3JldHVybiBVKHRoaXMsZnVuY3Rpb24oSil7Zm9yKHZhciBuZT0xO25lPGFyZ3VtZW50cy5sZW5ndGg7bmUrKyl7dmFyIGRlPW51bGwhPWFyZ3VtZW50'@;
put 'c1tuZV0/YXJndW1lbnRzW25lXTp7fSxmZT1PYmplY3Qua2V5cyhkZSk7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihmZT1mZS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhkZSkuZmlsdGVyKGZ1bmN0aW9uKHhlKXtyZXR1cm4g'@;
put 'T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZSx4ZSkuZW51bWVyYWJsZX0pKSksZmUuZm9yRWFjaChmdW5jdGlvbih4ZSl7SyhKLHhlLGRlW3hlXSl9KX1yZXR1cm4gSn0oe30sdyx7Y3VzdG9tSW5zcGVjdDohMSxkZXB0aDowfSkpfX1dLFMmJmZ1bmN0aW9uIEkoTixnKXtmb3Io'@;
put 'dmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl7dmFyIFM9Z1tDXTtTLmVudW1lcmFibGU9Uy5lbnVtZXJhYmxlfHwhMSxTLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gUyYmKFMud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFMua2V5LFMpfX0oZy5wcm90b3R5cGUsUyksZ30o'@;
put 'aihFcnJvcikpO00uZXhwb3J0cz1IfSwyMTM2OihNLE8sUik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geihYKXtyZXR1cm4oej0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihVKXtyZXR1cm4gdHlwZW9mIFV9OmZ1'@;
put 'bmN0aW9uKFUpe3JldHVybiBVJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZVLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZVIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgVX0pKFgpfWZ1bmN0aW9uIEkoWCl7cmV0dXJuKEk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVj'@;
put 'dC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihVKXtyZXR1cm4gVS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihVKX0pKFgpfWZ1bmN0aW9uIGsoWCxVKXtyZXR1cm4oaz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHEsZWUpe3JldHVybiBxLl9fcHJvdG9fXz1lZSxx'@;
put 'fSkoWCxVKX12YXIgRSxqLFY9e307ZnVuY3Rpb24gQihYLFUscSl7cXx8KHE9RXJyb3IpO3ZhciBlZT1mdW5jdGlvbih0ZSl7ZnVuY3Rpb24gb2Uoc2UsaGUsdWUpe3ZhciBjZTtyZXR1cm4gZnVuY3Rpb24oRyxiKXtpZighKEcgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD'@;
put 'YW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxvZSksY2U9ZnVuY3Rpb24gSyhYLFUpe3JldHVybiFVfHwib2JqZWN0IiE9PXooVSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBVP2Z1bmN0aW9uKHEpe2lmKHZvaWQgMD09PXEpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0'@;
put 'aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gcX0oWCk6VX0odGhpcyxJKG9lKS5jYWxsKHRoaXMsInN0cmluZyI9PXR5cGVvZiBVP1U6VShzZSxoZSx1ZSkpKSxjZS5jb2RlPVgsY2V9cmV0dXJuIGZ1bmN0aW9uKHNlLGhl'@;
put 'KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaGUmJm51bGwhPT1oZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3NlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGhlJiZoZS5wcm90b3R5cGUse2NvbnN0cnVj'@;
put 'dG9yOnt2YWx1ZTpzZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksaGUmJmsoc2UsaGUpfShvZSx0ZSksb2V9KHEpO1ZbWF09ZWV9ZnVuY3Rpb24gWShYLFUpe2lmKEFycmF5LmlzQXJyYXkoWCkpe3ZhciBxPVgubGVuZ3RoO3JldHVybiBYPVgubWFwKGZ1bmN0aW9uKGVlKXtyZXR1'@;
put 'cm4gU3RyaW5nKGVlKX0pLHE+Mj8ib25lIG9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoWC5zbGljZSgwLHEtMSkuam9pbigiLCAiKSwiLCBvciAiKStYW3EtMV06Mj09PXE/Im9uZSBvZiAiLmNvbmNhdChVLCIgIikuY29uY2F0KFhbMF0sIiBvciAiKS5jb25jYXQoWFsxXSk6Im9mICIuY29u'@;
put 'Y2F0KFUsIiAiKS5jb25jYXQoWFswXSl9cmV0dXJuIm9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoU3RyaW5nKFgpKX1CKCJFUlJfQU1CSUdVT1VTX0FSR1VNRU5UIiwnVGhlICIlcyIgYXJndW1lbnQgaXMgYW1iaWd1b3VzLiAlcycsVHlwZUVycm9yKSxCKCJFUlJfSU5WQUxJRF9BUkdfVFlQ'@;
put 'RSIsZnVuY3Rpb24oWCxVLHEpe3ZhciBlZSxzZSx1ZSxHO2lmKHZvaWQgMD09PUUmJihFPVIoOTI4MikpLEUoInN0cmluZyI9PXR5cGVvZiBYLCInbmFtZScgbXVzdCBiZSBhIHN0cmluZyIpLCJzdHJpbmciPT10eXBlb2YgVSYmIm5vdCAiPT09VS5zdWJzdHIoMCw0KT8oZWU9Im11c3Qgbm90'@;
put 'IGJlIixVPVUucmVwbGFjZSgvXm5vdCAvLCIiKSk6ZWU9Im11c3QgYmUiLHVlPVgsKHZvaWQgMD09PUd8fEc+dWUubGVuZ3RoKSYmKEc9dWUubGVuZ3RoKSwiIGFyZ3VtZW50Ij09PXVlLnN1YnN0cmluZyhHLTksRykpc2U9IlRoZSAiLmNvbmNhdChYLCIgIikuY29uY2F0KGVlLCIgIikuY29u'@;
put 'Y2F0KFkoVSwidHlwZSIpKTtlbHNle3ZhciBoZT1mdW5jdGlvbih1ZSxjZSxHKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIEcmJihHPTApLCEoRysxPnVlLmxlbmd0aCkmJi0xIT09dWUuaW5kZXhPZigiLiIsRyl9KFgpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtzZT0nVGhlICInLmNvbmNhdChY'@;
put 'LCciICcpLmNvbmNhdChoZSwiICIpLmNvbmNhdChlZSwiICIpLmNvbmNhdChZKFUsInR5cGUiKSl9cmV0dXJuIHNlKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQoeihxKSl9LFR5cGVFcnJvciksQigiRVJSX0lOVkFMSURfQVJHX1ZBTFVFIixmdW5jdGlvbihYLFUpe3ZhciBxPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiaXMgaW52YWxpZCI7dm9pZCAwPT09aiYmKGo9Uig5NTM5KSk7dmFyIGVlPWouaW5zcGVjdChVKTtyZXR1cm4gZWUubGVuZ3RoPjEyOCYmKGVlPSIiLmNvbmNhdChlZS5zbGljZSgwLDEyOCksIi4uLiIpKSwi'@;
put 'VGhlIGFyZ3VtZW50ICciLmNvbmNhdChYLCInICIpLmNvbmNhdChxLCIuIFJlY2VpdmVkICIpLmNvbmNhdChlZSl9LFR5cGVFcnJvcixSYW5nZUVycm9yKSxCKCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUiLGZ1bmN0aW9uKFgsVSxxKXt2YXIgZWU7cmV0dXJuIGVlPXEmJnEuY29uc3RydWN0'@;
put 'b3ImJnEuY29uc3RydWN0b3IubmFtZT8iaW5zdGFuY2Ugb2YgIi5jb25jYXQocS5jb25zdHJ1Y3Rvci5uYW1lKToidHlwZSAiLmNvbmNhdCh6KHEpKSwiRXhwZWN0ZWQgIi5jb25jYXQoWCwnIHRvIGJlIHJldHVybmVkIGZyb20gdGhlICInKS5jb25jYXQoVSwnIicpKyIgZnVuY3Rpb24gYnV0'@;
put 'IGdvdCAiLmNvbmNhdChlZSwiLiIpfSxUeXBlRXJyb3IpLEIoIkVSUl9NSVNTSU5HX0FSR1MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBYPWFyZ3VtZW50cy5sZW5ndGgsVT1uZXcgQXJyYXkoWCkscT0wO3E8WDtxKyspVVtxXT1hcmd1bWVudHNbcV07dm9pZCAwPT09RSYmKEU9Uig5MjgyKSksRShV'@;
put 'Lmxlbmd0aD4wLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO3ZhciBlZT0iVGhlICIsdGU9VS5sZW5ndGg7c3dpdGNoKFU9VS5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiciJy5jb25jYXQob2UsJyInKX0pLHRlKXtjYXNlIDE6ZWUrPSIiLmNvbmNhdChVWzBdLCIg'@;
put 'YXJndW1lbnQiKTticmVhaztjYXNlIDI6ZWUrPSIiLmNvbmNhdChVWzBdLCIgYW5kICIpLmNvbmNhdChVWzFdLCIgYXJndW1lbnRzIik7YnJlYWs7ZGVmYXVsdDplZSs9VS5zbGljZSgwLHRlLTEpLmpvaW4oIiwgIiksZWUrPSIsIGFuZCAiLmNvbmNhdChVW3RlLTFdLCIgYXJndW1lbnRzIil9'@;
put 'cmV0dXJuIiIuY29uY2F0KGVlLCIgbXVzdCBiZSBzcGVjaWZpZWQiKX0sVHlwZUVycm9yKSxNLmV4cG9ydHMuY29kZXM9Vn0sOTE1ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooYmUsQWUpe3JldHVybiBmdW5jdGlvbihUZSl7aWYoQXJyYXkuaXNBcnJheShUZSkpcmV0dXJu'@;
put 'IFRlfShiZSl8fGZ1bmN0aW9uKFRlLHFlKXt2YXIgWGU9W10sVWU9ITAsaHQ9ITEsTWU9dm9pZCAwO3RyeXtmb3IodmFyIERlLHplPVRlW1N5bWJvbC5pdGVyYXRvcl0oKTshKFVlPShEZT16ZS5uZXh0KCkpLmRvbmUpJiYoWGUucHVzaChEZS52YWx1ZSksIXFlfHxYZS5sZW5ndGghPT1xZSk7'@;
put 'VWU9ITApO31jYXRjaChpdCl7aHQ9ITAsTWU9aXR9ZmluYWxseXt0cnl7VWV8fG51bGw9PXplLnJldHVybnx8emUucmV0dXJuKCl9ZmluYWxseXtpZihodCl0aHJvdyBNZX19cmV0dXJuIFhlfShiZSxBZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0'@;
put 'IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIEsoYmUpe3JldHVybihLPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKEFlKXtyZXR1cm4gdHlwZW9mIEFlfTpmdW5jdGlv'@;
put 'bihBZSl7cmV0dXJuIEFlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZBZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmQWUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBBZX0pKGJlKX12YXIgST12b2lkIDAhPT0vYS9nLmZsYWdzLGs9ZnVuY3Rpb24oYmUpe3ZhciBBZT1b'@;
put 'XTtyZXR1cm4gYmUuZm9yRWFjaChmdW5jdGlvbihUZSl7cmV0dXJuIEFlLnB1c2goVGUpfSksQWV9LEU9ZnVuY3Rpb24oYmUpe3ZhciBBZT1bXTtyZXR1cm4gYmUuZm9yRWFjaChmdW5jdGlvbihUZSxxZSl7cmV0dXJuIEFlLnB1c2goW3FlLFRlXSl9KSxBZX0saj1PYmplY3QuaXM/T2JqZWN0'@;
put 'LmlzOlIoNjA5KSxWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbigpe3JldHVybltdfSxCPU51bWJlci5pc05hTj9OdW1iZXIuaXNOYU46UigzNjApO2Z1bmN0aW9uIFkoYmUpe3JldHVybiBiZS5jYWxsLmJpbmQoYmUp'@;
put 'fXZhciBYPVkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksVT1ZKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUpLHE9WShPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxlZT1SKDk1MzkpLnR5cGVzLHRlPWVlLmlzQW55QXJyYXlCdWZmZXIsb2U9ZWUuaXNB'@;
put 'cnJheUJ1ZmZlclZpZXcsc2U9ZWUuaXNEYXRlLGhlPWVlLmlzTWFwLHVlPWVlLmlzUmVnRXhwLGNlPWVlLmlzU2V0LEc9ZWUuaXNOYXRpdmVFcnJvcixiPWVlLmlzQm94ZWRQcmltaXRpdmUsRD1lZS5pc051bWJlck9iamVjdCxIPWVlLmlzU3RyaW5nT2JqZWN0LE49ZWUuaXNCb29sZWFuT2Jq'@;
put 'ZWN0LGc9ZWUuaXNCaWdJbnRPYmplY3QsQz1lZS5pc1N5bWJvbE9iamVjdCxTPWVlLmlzRmxvYXQzMkFycmF5LHY9ZWUuaXNGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gcChiZSl7aWYoMD09PWJlLmxlbmd0aHx8YmUubGVuZ3RoPjEwKXJldHVybiEwO2Zvcih2YXIgQWU9MDtBZTxiZS5sZW5ndGg7'@;
put 'QWUrKyl7dmFyIFRlPWJlLmNoYXJDb2RlQXQoQWUpO2lmKFRlPDQ4fHxUZT41NylyZXR1cm4hMH1yZXR1cm4gMTA9PT1iZS5sZW5ndGgmJmJlPj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiB3KGJlKXtyZXR1cm4gT2JqZWN0LmtleXMoYmUpLmZpbHRlcihwKS5jb25jYXQoVihiZSkuZmlsdGVy'@;
put 'KE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZChiZSkpKX1mdW5jdGlvbiBKKGJlLEFlKXtpZihiZT09PUFlKXJldHVybiAwO2Zvcih2YXIgVGU9YmUubGVuZ3RoLHFlPUFlLmxlbmd0aCxYZT0wLFVlPU1hdGgubWluKFRlLHFlKTtYZTxVZTsrK1hlKWlmKGJlW1hl'@;
put 'XSE9PUFlW1hlXSl7VGU9YmVbWGVdLHFlPUFlW1hlXTticmVha31yZXR1cm4gVGU8cWU/LTE6cWU8VGU/MTowfXZhciBmZT0wLHhlPTEsTGU9MixGZT0zO2Z1bmN0aW9uIE9lKGJlLEFlLFRlLHFlKXtpZihiZT09PUFlKXJldHVybiAwIT09YmV8fCFUZXx8aihiZSxBZSk7aWYoVGUpe2lmKCJv'@;
put 'YmplY3QiIT09SyhiZSkpcmV0dXJuIm51bWJlciI9PXR5cGVvZiBiZSYmQihiZSkmJkIoQWUpO2lmKCJvYmplY3QiIT09SyhBZSl8fG51bGw9PT1iZXx8bnVsbD09PUFlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmUpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKEFlKSlyZXR1cm4hMX1lbHNl'@;
put 'e2lmKG51bGw9PT1iZXx8Im9iamVjdCIhPT1LKGJlKSlyZXR1cm4obnVsbD09PUFlfHwib2JqZWN0IiE9PUsoQWUpKSYmYmU9PUFlO2lmKG51bGw9PT1BZXx8Im9iamVjdCIhPT1LKEFlKSlyZXR1cm4hMX12YXIgWGUsVWUsaHQsTWUsSHQsUHQsRGU9cShiZSk7aWYoRGUhPT1xKEFlKSlyZXR1'@;
put 'cm4hMTtpZihBcnJheS5pc0FycmF5KGJlKSl7aWYoYmUubGVuZ3RoIT09QWUubGVuZ3RoKXJldHVybiExO3ZhciB6ZT13KGJlKSxpdD13KEFlKTtyZXR1cm4gemUubGVuZ3RoPT09aXQubGVuZ3RoJiZXZShiZSxBZSxUZSxxZSx4ZSx6ZSl9aWYoIltvYmplY3QgT2JqZWN0XSI9PT1EZSYmKCFo'@;
put 'ZShiZSkmJmhlKEFlKXx8IWNlKGJlKSYmY2UoQWUpKSlyZXR1cm4hMTtpZihzZShiZSkpe2lmKCFzZShBZSl8fERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChiZSkhPT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoQWUpKXJldHVybiExfWVsc2UgaWYodWUoYmUpKXtpZighdWUoQWUp'@;
put 'fHwoaHQ9YmUsTWU9QWUsIShJP2h0LnNvdXJjZT09PU1lLnNvdXJjZSYmaHQuZmxhZ3M9PT1NZS5mbGFnczpSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaHQpPT09UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE1lKSkpKXJldHVybiExfWVsc2UgaWYoRyhiZSl8fGJlIGlu'@;
put 'c3RhbmNlb2YgRXJyb3Ipe2lmKGJlLm1lc3NhZ2UhPT1BZS5tZXNzYWdlfHxiZS5uYW1lIT09QWUubmFtZSlyZXR1cm4hMX1lbHNle2lmKG9lKGJlKSl7aWYoVGV8fCFTKGJlKSYmIXYoYmUpKXtpZigoSHQ9YmUpLmJ5dGVMZW5ndGghPT0oUHQ9QWUpLmJ5dGVMZW5ndGh8fDAhPT1KKG5ldyBV'@;
put 'aW50OEFycmF5KEh0LmJ1ZmZlcixIdC5ieXRlT2Zmc2V0LEh0LmJ5dGVMZW5ndGgpLG5ldyBVaW50OEFycmF5KFB0LmJ1ZmZlcixQdC5ieXRlT2Zmc2V0LFB0LmJ5dGVMZW5ndGgpKSlyZXR1cm4hMX1lbHNlIGlmKCFmdW5jdGlvbihIdCxQdCl7aWYoSHQuYnl0ZUxlbmd0aCE9PVB0LmJ5dGVM'@;
put 'ZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvbj0wO29uPEh0LmJ5dGVMZW5ndGg7b24rKylpZihIdFtvbl0hPT1QdFtvbl0pcmV0dXJuITE7cmV0dXJuITB9KGJlLEFlKSlyZXR1cm4hMTt2YXIgdXQ9dyhiZSksTXQ9dyhBZSk7cmV0dXJuIHV0Lmxlbmd0aD09PU10Lmxlbmd0aCYmV2UoYmUsQWUs'@;
put 'VGUscWUsZmUsdXQpfWlmKGNlKGJlKSlyZXR1cm4hKCFjZShBZSl8fGJlLnNpemUhPT1BZS5zaXplKSYmV2UoYmUsQWUsVGUscWUsTGUpO2lmKGhlKGJlKSlyZXR1cm4hKCFoZShBZSl8fGJlLnNpemUhPT1BZS5zaXplKSYmV2UoYmUsQWUsVGUscWUsRmUpO2lmKHRlKGJlKSl7aWYoKFhlPWJl'@;
put 'KS5ieXRlTGVuZ3RoIT09KFVlPUFlKS5ieXRlTGVuZ3RofHwwIT09SihuZXcgVWludDhBcnJheShYZSksbmV3IFVpbnQ4QXJyYXkoVWUpKSlyZXR1cm4hMX1lbHNlIGlmKGIoYmUpJiYhZnVuY3Rpb24oSHQsUHQpe3JldHVybiBEKEh0KT9EKFB0KSYmaihOdW1iZXIucHJvdG90eXBlLnZhbHVl'@;
put 'T2YuY2FsbChIdCksTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpKTpIKEh0KT9IKFB0KSYmU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09U3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpOk4oSHQpP04oUHQpJiZCb29sZWFuLnByb3RvdHlwZS52YWx1'@;
put 'ZU9mLmNhbGwoSHQpPT09Qm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KTpnKEh0KT9nKFB0KSYmQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09QmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpOkMoUHQpJiZTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Yu'@;
put 'Y2FsbChIdCk9PT1TeW1ib2wucHJvdG90eXBlLnZhbHVlT2YuY2FsbChQdCl9KGJlLEFlKSlyZXR1cm4hMX1yZXR1cm4gV2UoYmUsQWUsVGUscWUsZmUpfWZ1bmN0aW9uIGplKGJlLEFlKXtyZXR1cm4gQWUuZmlsdGVyKGZ1bmN0aW9uKFRlKXtyZXR1cm4gVShiZSxUZSl9KX1mdW5jdGlvbiBX'@;
put 'ZShiZSxBZSxUZSxxZSxYZSxVZSl7aWYoNT09PWFyZ3VtZW50cy5sZW5ndGgpe1VlPU9iamVjdC5rZXlzKGJlKTt2YXIgaHQ9T2JqZWN0LmtleXMoQWUpO2lmKFVlLmxlbmd0aCE9PWh0Lmxlbmd0aClyZXR1cm4hMX1mb3IodmFyIE1lPTA7TWU8VWUubGVuZ3RoO01lKyspaWYoIVgoQWUsVWVb'@;
put 'TWVdKSlyZXR1cm4hMTtpZihUZSYmNT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBEZT1WKGJlKTtpZigwIT09RGUubGVuZ3RoKXt2YXIgemU9MDtmb3IoTWU9MDtNZTxEZS5sZW5ndGg7TWUrKyl7dmFyIGl0PURlW01lXTtpZihVKGJlLGl0KSl7aWYoIVUoQWUsaXQpKXJldHVybiExO1VlLnB1'@;
put 'c2goaXQpLHplKyt9ZWxzZSBpZihVKEFlLGl0KSlyZXR1cm4hMX12YXIgdXQ9VihBZSk7aWYoRGUubGVuZ3RoIT09dXQubGVuZ3RoJiZqZShBZSx1dCkubGVuZ3RoIT09emUpcmV0dXJuITF9ZWxzZXt2YXIgTXQ9VihBZSk7aWYoMCE9PU10Lmxlbmd0aCYmMCE9PWplKEFlLE10KS5sZW5ndGgp'@;
put 'cmV0dXJuITF9fWlmKDA9PT1VZS5sZW5ndGgmJihYZT09PWZlfHxYZT09PXhlJiYwPT09YmUubGVuZ3RofHwwPT09YmUuc2l6ZSkpcmV0dXJuITA7aWYodm9pZCAwPT09cWUpcWU9e3ZhbDE6bmV3IE1hcCx2YWwyOm5ldyBNYXAscG9zaXRpb246MH07ZWxzZXt2YXIgSHQ9cWUudmFsMS5nZXQo'@;
put 'YmUpO2lmKHZvaWQgMCE9PUh0KXt2YXIgUHQ9cWUudmFsMi5nZXQoQWUpO2lmKHZvaWQgMCE9PVB0KXJldHVybiBIdD09PVB0fXFlLnBvc2l0aW9uKyt9cWUudmFsMS5zZXQoYmUscWUucG9zaXRpb24pLHFlLnZhbDIuc2V0KEFlLHFlLnBvc2l0aW9uKTt2YXIgb249ZnVuY3Rpb24oQ24sVXQs'@;
put 'Ym4sV24sZW4sJG4pe3ZhciBIbj0wO2lmKCRuPT09TGUpe2lmKCFmdW5jdGlvbih3dCxYdCxfdCxOdCl7Zm9yKHZhciBtbj1udWxsLHJ0PWsod3QpLEl0PTA7SXQ8cnQubGVuZ3RoO0l0Kyspe3ZhciBKdD1ydFtJdF07aWYoIm9iamVjdCI9PT1LKEp0KSYmbnVsbCE9PUp0KW51bGw9PT1tbiYm'@;
put 'KG1uPW5ldyBTZXQpLG1uLmFkZChKdCk7ZWxzZSBpZighWHQuaGFzKEp0KSl7aWYoX3R8fCFKZSh3dCxYdCxKdCkpcmV0dXJuITE7bnVsbD09PW1uJiYobW49bmV3IFNldCksbW4uYWRkKEp0KX19aWYobnVsbCE9PW1uKXtmb3IodmFyIER0PWsoWHQpLHB0PTA7cHQ8RHQubGVuZ3RoO3B0Kysp'@;
put 'e3ZhciBZdD1EdFtwdF07aWYoIm9iamVjdCI9PT1LKFl0KSYmbnVsbCE9PVl0KXtpZighS2UobW4sWXQsX3QsTnQpKXJldHVybiExfWVsc2UgaWYoIV90JiYhd3QuaGFzKFl0KSYmIUtlKG1uLFl0LF90LE50KSlyZXR1cm4hMX1yZXR1cm4gMD09PW1uLnNpemV9cmV0dXJuITB9KENuLFV0LGJu'@;
put 'LGVuKSlyZXR1cm4hMX1lbHNlIGlmKCRuPT09RmUpe2lmKCFmdW5jdGlvbih3dCxYdCxfdCxOdCl7Zm9yKHZhciBtbj1udWxsLHJ0PUUod3QpLEl0PTA7SXQ8cnQubGVuZ3RoO0l0Kyspe3ZhciBKdD16KHJ0W0l0XSwyKSxEdD1KdFswXSxwdD1KdFsxXTtpZigib2JqZWN0Ij09PUsoRHQpJiZu'@;
put 'dWxsIT09RHQpbnVsbD09PW1uJiYobW49bmV3IFNldCksbW4uYWRkKER0KTtlbHNle3ZhciBZdD1YdC5nZXQoRHQpO2lmKHZvaWQgMD09PVl0JiYhWHQuaGFzKER0KXx8IU9lKHB0LFl0LF90LE50KSl7aWYoX3R8fCFsdCh3dCxYdCxEdCxwdCxOdCkpcmV0dXJuITE7bnVsbD09PW1uJiYobW49'@;
put 'bmV3IFNldCksbW4uYWRkKER0KX19fWlmKG51bGwhPT1tbil7Zm9yKHZhciBJbj1FKFh0KSx6dD0wO3p0PEluLmxlbmd0aDt6dCsrKXt2YXIgeW49eihJblt6dF0sMikseG49KER0PXluWzBdLHluWzFdKTtpZigib2JqZWN0Ij09PUsoRHQpJiZudWxsIT09RHQpe2lmKCFQZShtbix3dCxEdCx4'@;
put 'bixfdCxOdCkpcmV0dXJuITF9ZWxzZSBpZighKF90fHx3dC5oYXMoRHQpJiZPZSh3dC5nZXQoRHQpLHhuLCExLE50KXx8UGUobW4sd3QsRHQseG4sITEsTnQpKSlyZXR1cm4hMX1yZXR1cm4gMD09PW1uLnNpemV9cmV0dXJuITB9KENuLFV0LGJuLGVuKSlyZXR1cm4hMX1lbHNlIGlmKCRuPT09'@;
put 'eGUpZm9yKDtIbjxDbi5sZW5ndGg7SG4rKyl7aWYoIVgoQ24sSG4pKXtpZihYKFV0LEhuKSlyZXR1cm4hMTtmb3IodmFyIGZ0PU9iamVjdC5rZXlzKENuKTtIbjxmdC5sZW5ndGg7SG4rKyl7dmFyIGZuPWZ0W0huXTtpZighWChVdCxmbil8fCFPZShDbltmbl0sVXRbZm5dLGJuLGVuKSlyZXR1'@;
put 'cm4hMX1yZXR1cm4gZnQubGVuZ3RoPT09T2JqZWN0LmtleXMoVXQpLmxlbmd0aH1pZighWChVdCxIbil8fCFPZShDbltIbl0sVXRbSG5dLGJuLGVuKSlyZXR1cm4hMX1mb3IoSG49MDtIbjxXbi5sZW5ndGg7SG4rKyl7dmFyIGhuPVduW0huXTtpZighT2UoQ25baG5dLFV0W2huXSxibixlbikp'@;
put 'cmV0dXJuITF9cmV0dXJuITB9KGJlLEFlLFRlLFVlLHFlLFhlKTtyZXR1cm4gcWUudmFsMS5kZWxldGUoYmUpLHFlLnZhbDIuZGVsZXRlKEFlKSxvbn1mdW5jdGlvbiBLZShiZSxBZSxUZSxxZSl7Zm9yKHZhciBYZT1rKGJlKSxVZT0wO1VlPFhlLmxlbmd0aDtVZSsrKXt2YXIgaHQ9WGVbVWVd'@;
put 'O2lmKE9lKEFlLGh0LFRlLHFlKSlyZXR1cm4gYmUuZGVsZXRlKGh0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBZZShiZSl7c3dpdGNoKEsoYmUpKXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIG51bGw7Y2FzZSJvYmplY3QiOnJldHVybjtjYXNlInN5bWJvbCI6cmV0dXJuITE7Y2FzZSJzdHJpbmci'@;
put 'OmJlPStiZTtjYXNlIm51bWJlciI6aWYoQihiZSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gSmUoYmUsQWUsVGUpe3ZhciBxZT1ZZShUZSk7cmV0dXJuIHFlPz8oQWUuaGFzKHFlKSYmIWJlLmhhcyhxZSkpfWZ1bmN0aW9uIGx0KGJlLEFlLFRlLHFlLFhlKXt2YXIgVWU9WWUoVGUpO2lm'@;
put 'KG51bGwhPVVlKXJldHVybiBVZTt2YXIgaHQ9QWUuZ2V0KFVlKTtyZXR1cm4hKHZvaWQgMD09PWh0JiYhQWUuaGFzKFVlKXx8IU9lKHFlLGh0LCExLFhlKSkmJiFiZS5oYXMoVWUpJiZPZShxZSxodCwhMSxYZSl9ZnVuY3Rpb24gUGUoYmUsQWUsVGUscWUsWGUsVWUpe2Zvcih2YXIgaHQ9ayhi'@;
put 'ZSksTWU9MDtNZTxodC5sZW5ndGg7TWUrKyl7dmFyIERlPWh0W01lXTtpZihPZShUZSxEZSxYZSxVZSkmJk9lKHFlLEFlLmdldChEZSksWGUsVWUpKXJldHVybiBiZS5kZWxldGUoRGUpLCEwfXJldHVybiExfU0uZXhwb3J0cz17aXNEZWVwRXF1YWw6ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBP'@;
put 'ZShiZSxBZSwhMSl9LGlzRGVlcFN0cmljdEVxdWFsOmZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gT2UoYmUsQWUsITApfX19LDgyMjQ6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIE99fSw5NjY5OihNLE8sUik9PntNLmV4cG9ydHM9UigxNjA5KX0sNTQ0ODoo'@;
put 'TSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDYwMjYpLEk9Uig0MzcyKSxrPVIoNTMyNyksRT1SKDQwOTcpLGo9Uig0MTA5KSxWPVIoNzk4NSksQj1SKDc4NzQpLFk9UigyNjQ4KSxYPVIoNjQ0KSxVPVIoMjA1KTtNLmV4cG9ydHM9ZnVuY3Rpb24ocSl7cmV0dXJuIG5l'@;
put 'dyBQcm9taXNlKGZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2U9cS5kYXRhLGhlPXEuaGVhZGVycyx1ZT1xLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBjZSgpe3EuY2FuY2VsVG9rZW4mJnEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob2UpLHEuc2lnbmFsJiZxLnNpZ25hbC5yZW1vdmVFdmVudExp'@;
put 'c3RlbmVyKCJhYm9ydCIsb2UpfXouaXNGb3JtRGF0YShzZSkmJnouaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSYmZGVsZXRlIGhlWyJDb250ZW50LVR5cGUiXTt2YXIgRz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYocS5hdXRoKXt2YXIgYj1xLmF1dGgudXNlcm5hbWV8fCIiLEQ9cS5hdXRoLnBhc3N3'@;
put 'b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChxLmF1dGgucGFzc3dvcmQpKToiIjtoZS5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EoYisiOiIrRCl9dmFyIEg9RShxLmJhc2VVUkwscS51cmwpO2Z1bmN0aW9uIE4oKXtpZihHKXt2YXIgUz0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJz'@;
put 'ImluIEc/aihHLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsO0soZnVuY3Rpb24ocCl7ZWUocCksY2UoKX0sZnVuY3Rpb24ocCl7dGUocCksY2UoKX0se2RhdGE6dWUmJiJ0ZXh0IiE9PXVlJiYianNvbiIhPT11ZT9HLnJlc3BvbnNlOkcucmVzcG9uc2VUZXh0LHN0YXR1czpHLnN0YXR1'@;
put 'cyxzdGF0dXNUZXh0Okcuc3RhdHVzVGV4dCxoZWFkZXJzOlMsY29uZmlnOnEscmVxdWVzdDpHfSksRz1udWxsfX1pZihHLm9wZW4ocS5tZXRob2QudG9VcHBlckNhc2UoKSxrKEgscS5wYXJhbXMscS5wYXJhbXNTZXJpYWxpemVyKSwhMCksRy50aW1lb3V0PXEudGltZW91dCwib25sb2FkZW5k'@;
put 'ImluIEc/Ry5vbmxvYWRlbmQ9TjpHLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0cmJjQ9PT1HLnJlYWR5U3RhdGUmJigwIT09Ry5zdGF0dXN8fEcucmVzcG9uc2VVUkwmJjA9PT1HLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KE4pfSxHLm9uYWJvcnQ9'@;
put 'ZnVuY3Rpb24oKXtHJiYodGUobmV3IFkoIlJlcXVlc3QgYWJvcnRlZCIsWS5FQ09OTkFCT1JURUQscSxHKSksRz1udWxsKX0sRy5vbmVycm9yPWZ1bmN0aW9uKCl7dGUobmV3IFkoIk5ldHdvcmsgRXJyb3IiLFkuRVJSX05FVFdPUksscSxHLEcpKSxHPW51bGx9LEcub250aW1lb3V0PWZ1bmN0'@;
put 'aW9uKCl7dmFyIFM9cS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrcS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiO3EudGltZW91dEVycm9yTWVzc2FnZSYmKFM9cS50aW1lb3V0RXJyb3JNZXNzYWdlKSx0ZShuZXcgWShTLChxLnRyYW5zaXRpb25hbHx8QikuY2xhcmlm'@;
put 'eVRpbWVvdXRFcnJvcj9ZLkVUSU1FRE9VVDpZLkVDT05OQUJPUlRFRCxxLEcpKSxHPW51bGx9LHouaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGc9KHEud2l0aENyZWRlbnRpYWxzfHxWKEgpKSYmcS54c3JmQ29va2llTmFtZT9JLnJlYWQocS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2cm'@;
put 'JihoZVtxLnhzcmZIZWFkZXJOYW1lXT1nKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBHJiZ6LmZvckVhY2goaGUsZnVuY3Rpb24oUyx2KXt2b2lkIDA9PT1zZSYmImNvbnRlbnQtdHlwZSI9PT12LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIGhlW3ZdOkcuc2V0UmVxdWVzdEhlYWRlcih2LFMpfSksei5p'@;
put 'c1VuZGVmaW5lZChxLndpdGhDcmVkZW50aWFscyl8fChHLndpdGhDcmVkZW50aWFscz0hIXEud2l0aENyZWRlbnRpYWxzKSx1ZSYmImpzb24iIT09dWUmJihHLnJlc3BvbnNlVHlwZT1xLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIHEub25Eb3dubG9hZFByb2dyZXNzJiZHLmFk'@;
put 'ZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixxLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIHEub25VcGxvYWRQcm9ncmVzcyYmRy51cGxvYWQmJkcudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixxLm9uVXBsb2FkUHJvZ3Jlc3MpLChxLmNhbmNlbFRv'@;
put 'a2VufHxxLnNpZ25hbCkmJihvZT1mdW5jdGlvbihTKXtHJiYodGUoIVN8fFMmJlMudHlwZT9uZXcgWDpTKSxHLmFib3J0KCksRz1udWxsKX0scS5jYW5jZWxUb2tlbiYmcS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob2UpLHEuc2lnbmFsJiYocS5zaWduYWwuYWJvcnRlZD9vZSgpOnEuc2lnbmFs'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixvZSkpKSxzZXx8KHNlPW51bGwpO3ZhciBDPVUoSCk7QyYmLTE9PT1bImh0dHAiLCJodHRwcyIsImZpbGUiXS5pbmRleE9mKEMpP3RlKG5ldyBZKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0MrIjoiLFkuRVJSX0JBRF9SRVFVRVNULHEpKTpHLnNl'@;
put 'bmQoc2UpfSl9fSwxNjA5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoMTg0OSksST1SKDMyMSksaz1SKDcxODUpLEU9ZnVuY3Rpb24gaihWKXt2YXIgQj1uZXcgSShWKSxZPUsoSS5wcm90b3R5cGUucmVxdWVzdCxCKTtyZXR1cm4gei5leHRlbmQoWSxJLnByb3Rv'@;
put 'dHlwZSxCKSx6LmV4dGVuZChZLEIpLFkuY3JlYXRlPWZ1bmN0aW9uKFgpe3JldHVybiBqKGsoVixYKSl9LFl9KFIoNTU0NikpO0UuQXhpb3M9SSxFLkNhbmNlbGVkRXJyb3I9Uig2NDQpLEUuQ2FuY2VsVG9rZW49Uig0OTcyKSxFLmlzQ2FuY2VsPVIoNjUwMiksRS5WRVJTSU9OPVIoNzI4OCku'@;
put 'dmVyc2lvbixFLnRvRm9ybURhdGE9Uig3Njc1KSxFLkF4aW9zRXJyb3I9UigyNjQ4KSxFLkNhbmNlbD1FLkNhbmNlbGVkRXJyb3IsRS5hbGw9ZnVuY3Rpb24oail7cmV0dXJuIFByb21pc2UuYWxsKGopfSxFLnNwcmVhZD1SKDg3MTMpLEUuaXNBeGlvc0Vycm9yPVIoNjI2OCksTS5leHBvcnRz'@;
put 'PUUsTS5leHBvcnRzLmRlZmF1bHQ9RX0sNDk3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQ0KTtmdW5jdGlvbiBLKEkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgazt0aGlz'@;
put 'LnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oail7az1qfSk7dmFyIEU9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihqKXtpZihFLl9saXN0ZW5lcnMpe3ZhciBWLEI9RS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoVj0wO1Y8QjtWKyspRS5fbGlzdGVuZXJzW1ZdKGopO0UuX2xp'@;
put 'c3RlbmVycz1udWxsfX0pLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGope3ZhciBWLEI9bmV3IFByb21pc2UoZnVuY3Rpb24oWSl7RS5zdWJzY3JpYmUoWSksVj1ZfSkudGhlbihqKTtyZXR1cm4gQi5jYW5jZWw9ZnVuY3Rpb24oKXtFLnVuc3Vic2NyaWJlKFYpfSxCfSxJKGZ1bmN0aW9u'@;
put 'KGope0UucmVhc29ufHwoRS5yZWFzb249bmV3IHooaiksayhFLnJlYXNvbikpfSl9Sy5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxLLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oSSl7dGhpcy5yZWFz'@;
put 'b24/SSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEkpOnRoaXMuX2xpc3RlbmVycz1bSV19LEsucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKEkpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIGs9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2Yo'@;
put 'SSk7LTEhPT1rJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGssMSl9fSxLLnNvdXJjZT1mdW5jdGlvbigpe3ZhciBJO3JldHVybnt0b2tlbjpuZXcgSyhmdW5jdGlvbihrKXtJPWt9KSxjYW5jZWw6SX19LE0uZXhwb3J0cz1LfSw2NDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDI2'@;
put 'NDgpO2Z1bmN0aW9uIEsoSSl7ei5jYWxsKHRoaXMsST8/ImNhbmNlbGVkIix6LkVSUl9DQU5DRUxFRCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1SKDQ4NjcpLmluaGVyaXRzKEsseix7X19DQU5DRUxfXzohMH0pLE0uZXhwb3J0cz1LfSw2NTAyOk09PnsidXNlIHN0cmljdCI7TS5leHBv'@;
put 'cnRzPWZ1bmN0aW9uKE8pe3JldHVybiEoIU98fCFPLl9fQ0FOQ0VMX18pfX0sMzIxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoNTMyNyksST1SKDc4Miksaz1SKDM1NzIpLEU9Uig3MTg1KSxqPVIoNDA5NyksVj1SKDQ4NzUpLEI9Vi52YWxpZGF0b3JzO2Z1bmN0'@;
put 'aW9uIFkoWCl7dGhpcy5kZWZhdWx0cz1YLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBJLHJlc3BvbnNlOm5ldyBJfX1ZLnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKFgsVSl7InN0cmluZyI9PXR5cGVvZiBYPyhVPVV8fHt9KS51cmw9WDpVPVh8fHt9LFUubWV0aG9kPShVPUUo'@;
put 'dGhpcy5kZWZhdWx0cyxVKSkubWV0aG9kP1UubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKToiZ2V0Ijt2YXIgcT1VLnRyYW5zaXRpb25hbDt2b2lkIDAhPT1xJiZWLmFzc2VydE9wdGlvbnMocSx7c2ls'@;
put 'ZW50SlNPTlBhcnNpbmc6Qi50cmFuc2l0aW9uYWwoQi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpCLnRyYW5zaXRpb25hbChCLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Qi50cmFuc2l0aW9uYWwoQi5ib29sZWFuKX0sITEpO3ZhciBlZT1bXSx0ZT0hMDt0aGlzLmludGVyY2Vw'@;
put 'dG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYil7ImZ1bmN0aW9uIj09dHlwZW9mIGIucnVuV2hlbiYmITE9PT1iLnJ1bldoZW4oVSl8fCh0ZT10ZSYmYi5zeW5jaHJvbm91cyxlZS51bnNoaWZ0KGIuZnVsZmlsbGVkLGIucmVqZWN0ZWQpKX0pO3ZhciBvZSxzZT1bXTtpZih0aGlzLmlu'@;
put 'dGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3NlLnB1c2goYi5mdWxmaWxsZWQsYi5yZWplY3RlZCl9KSwhdGUpe3ZhciBoZT1bayx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShoZSxlZSksaGU9aGUuY29uY2F0KHNlKSxvZT1Qcm9taXNl'@;
put 'LnJlc29sdmUoVSk7aGUubGVuZ3RoOylvZT1vZS50aGVuKGhlLnNoaWZ0KCksaGUuc2hpZnQoKSk7cmV0dXJuIG9lfWZvcih2YXIgdWU9VTtlZS5sZW5ndGg7KXt2YXIgY2U9ZWUuc2hpZnQoKSxHPWVlLnNoaWZ0KCk7dHJ5e3VlPWNlKHVlKX1jYXRjaChiKXtHKGIpO2JyZWFrfX10cnl7b2U9'@;
put 'ayh1ZSl9Y2F0Y2goYil7cmV0dXJuIFByb21pc2UucmVqZWN0KGIpfWZvcig7c2UubGVuZ3RoOylvZT1vZS50aGVuKHNlLnNoaWZ0KCksc2Uuc2hpZnQoKSk7cmV0dXJuIG9lfSxZLnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oWCl7WD1FKHRoaXMuZGVmYXVsdHMsWCk7dmFyIFU9aihYLmJh'@;
put 'c2VVUkwsWC51cmwpO3JldHVybiBLKFUsWC5wYXJhbXMsWC5wYXJhbXNTZXJpYWxpemVyKX0sei5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihYKXtZLnByb3RvdHlwZVtYXT1mdW5jdGlvbihVLHEpe3JldHVybiB0aGlzLnJlcXVlc3QoRShxfHx7'@;
put 'fSx7bWV0aG9kOlgsdXJsOlUsZGF0YToocXx8e30pLmRhdGF9KSl9fSksei5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oWCl7ZnVuY3Rpb24gVShxKXtyZXR1cm4gZnVuY3Rpb24oZWUsdGUsb2Upe3JldHVybiB0aGlzLnJlcXVlc3QoRShvZXx8e30se21ldGhvZDpY'@;
put 'LGhlYWRlcnM6cT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6ZWUsZGF0YTp0ZX0pKX19WS5wcm90b3R5cGVbWF09VSgpLFkucHJvdG90eXBlW1grIkZvcm0iXT1VKCEwKX0pLE0uZXhwb3J0cz1ZfSwyNjQ4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFy'@;
put 'IHo9Uig0ODY3KTtmdW5jdGlvbiBLKEUsaixWLEIsWSl7RXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9RSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGomJih0aGlzLmNvZGU9aiksViYmKHRoaXMuY29uZmlnPVYpLEImJih0aGlzLnJlcXVlc3Q9QiksWSYmKHRoaXMucmVzcG9uc2U9WSl9'@;
put 'ei5pbmhlcml0cyhLLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRo'@;
put 'aXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9'@;
put 'fX0pO3ZhciBJPUsucHJvdG90eXBlLGs9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JF'@;
put 'U1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIl0uZm9yRWFjaChmdW5jdGlvbihFKXtrW0VdPXt2YWx1ZTpFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssayksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSksSy5mcm9t'@;
put 'PWZ1bmN0aW9uKEUsaixWLEIsWSxYKXt2YXIgVT1PYmplY3QuY3JlYXRlKEkpO3JldHVybiB6LnRvRmxhdE9iamVjdChFLFUsZnVuY3Rpb24ocSl7cmV0dXJuIHEhPT1FcnJvci5wcm90b3R5cGV9KSxLLmNhbGwoVSxFLm1lc3NhZ2UsaixWLEIsWSksVS5uYW1lPUUubmFtZSxYJiZPYmplY3Qu'@;
put 'YXNzaWduKFUsWCksVX0sTS5leHBvcnRzPUt9LDc4MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7ZnVuY3Rpb24gSygpe3RoaXMuaGFuZGxlcnM9W119Sy5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKEksayxFKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxs'@;
put 'ZWQ6SSxyZWplY3RlZDprLHN5bmNocm9ub3VzOiEhRSYmRS5zeW5jaHJvbm91cyxydW5XaGVuOkU/RS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxLLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihJKXt0aGlzLmhhbmRsZXJzW0ldJiYodGhpcy5oYW5kbGVyc1tJXT1u'@;
put 'dWxsKX0sSy5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihJKXt6LmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihrKXtudWxsIT09ayYmSShrKX0pfSxNLmV4cG9ydHM9S30sNDA5NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMTc5MyksSz1SKDczMDMpO00uZXhwb3J0'@;
put 'cz1mdW5jdGlvbihJLGspe3JldHVybiBJJiYheihrKT9LKEksayk6a319LDM1NzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9Uig4NTI3KSxJPVIoNjUwMiksaz1SKDU1NDYpLEU9Uig2NDQpO2Z1bmN0aW9uIGooVil7aWYoVi5jYW5jZWxUb2tlbiYmVi5jYW5jZWxU'@;
put 'b2tlbi50aHJvd0lmUmVxdWVzdGVkKCksVi5zaWduYWwmJlYuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEV9TS5leHBvcnRzPWZ1bmN0aW9uKFYpe3JldHVybiBqKFYpLFYuaGVhZGVycz1WLmhlYWRlcnN8fHt9LFYuZGF0YT1LLmNhbGwoVixWLmRhdGEsVi5oZWFkZXJzLFYudHJhbnNmb3Jt'@;
put 'UmVxdWVzdCksVi5oZWFkZXJzPXoubWVyZ2UoVi5oZWFkZXJzLmNvbW1vbnx8e30sVi5oZWFkZXJzW1YubWV0aG9kXXx8e30sVi5oZWFkZXJzKSx6LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sZnVuY3Rpb24oQil7ZGVsZXRl'@;
put 'IFYuaGVhZGVyc1tCXX0pLChWLmFkYXB0ZXJ8fGsuYWRhcHRlcikoVikudGhlbihmdW5jdGlvbihCKXtyZXR1cm4gaihWKSxCLmRhdGE9Sy5jYWxsKFYsQi5kYXRhLEIuaGVhZGVycyxWLnRyYW5zZm9ybVJlc3BvbnNlKSxCfSxmdW5jdGlvbihCKXtyZXR1cm4gSShCKXx8KGooViksQiYmQi5y'@;
put 'ZXNwb25zZSYmKEIucmVzcG9uc2UuZGF0YT1LLmNhbGwoVixCLnJlc3BvbnNlLmRhdGEsQi5yZXNwb25zZS5oZWFkZXJzLFYudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QoQil9KX19LDcxODU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0'@;
put 'cz1mdW5jdGlvbihLLEkpe0k9SXx8e307dmFyIGs9e307ZnVuY3Rpb24gRShVLHEpe3JldHVybiB6LmlzUGxhaW5PYmplY3QoVSkmJnouaXNQbGFpbk9iamVjdChxKT96Lm1lcmdlKFUscSk6ei5pc1BsYWluT2JqZWN0KHEpP3oubWVyZ2Uoe30scSk6ei5pc0FycmF5KHEpP3Euc2xpY2UoKTpx'@;
put 'fWZ1bmN0aW9uIGooVSl7cmV0dXJuIHouaXNVbmRlZmluZWQoSVtVXSk/ei5pc1VuZGVmaW5lZChLW1VdKT92b2lkIDA6RSh2b2lkIDAsS1tVXSk6RShLW1VdLElbVV0pfWZ1bmN0aW9uIFYoVSl7aWYoIXouaXNVbmRlZmluZWQoSVtVXSkpcmV0dXJuIEUodm9pZCAwLElbVV0pfWZ1bmN0aW9u'@;
put 'IEIoVSl7cmV0dXJuIHouaXNVbmRlZmluZWQoSVtVXSk/ei5pc1VuZGVmaW5lZChLW1VdKT92b2lkIDA6RSh2b2lkIDAsS1tVXSk6RSh2b2lkIDAsSVtVXSl9ZnVuY3Rpb24gWShVKXtyZXR1cm4gVSBpbiBJP0UoS1tVXSxJW1VdKTpVIGluIEs/RSh2b2lkIDAsS1tVXSk6dm9pZCAwfXZhciBY'@;
put 'PXt1cmw6VixtZXRob2Q6VixkYXRhOlYsYmFzZVVSTDpCLHRyYW5zZm9ybVJlcXVlc3Q6Qix0cmFuc2Zvcm1SZXNwb25zZTpCLHBhcmFtc1NlcmlhbGl6ZXI6Qix0aW1lb3V0OkIsdGltZW91dE1lc3NhZ2U6Qix3aXRoQ3JlZGVudGlhbHM6QixhZGFwdGVyOkIscmVzcG9uc2VUeXBlOkIseHNy'@;
put 'ZkNvb2tpZU5hbWU6Qix4c3JmSGVhZGVyTmFtZTpCLG9uVXBsb2FkUHJvZ3Jlc3M6QixvbkRvd25sb2FkUHJvZ3Jlc3M6QixkZWNvbXByZXNzOkIsbWF4Q29udGVudExlbmd0aDpCLG1heEJvZHlMZW5ndGg6QixiZWZvcmVSZWRpcmVjdDpCLHRyYW5zcG9ydDpCLGh0dHBBZ2VudDpCLGh0dHBz'@;
put 'QWdlbnQ6QixjYW5jZWxUb2tlbjpCLHNvY2tldFBhdGg6QixyZXNwb25zZUVuY29kaW5nOkIsdmFsaWRhdGVTdGF0dXM6WX07cmV0dXJuIHouZm9yRWFjaChPYmplY3Qua2V5cyhLKS5jb25jYXQoT2JqZWN0LmtleXMoSSkpLGZ1bmN0aW9uKFUpe3ZhciBxPVhbVV18fGosZWU9cShVKTt6Lmlz'@;
put 'VW5kZWZpbmVkKGVlKSYmcSE9PVl8fChrW1VdPWVlKX0pLGt9fSw2MDI2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyNjQ4KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyxJLGspe3ZhciBFPWsuY29uZmlnLnZhbGlkYXRlU3RhdHVzO2suc3RhdHVzJiZFJiYhRShrLnN0YXR1cyk/SShu'@;
put 'ZXcgeigiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK2suc3RhdHVzLFt6LkVSUl9CQURfUkVRVUVTVCx6LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Ioay5zdGF0dXMvMTAwKS00XSxrLmNvbmZpZyxrLnJlcXVlc3QsaykpOksoayl9fSw4NTI3OihNLE8sUik9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoNTU0Nik7TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFKXt2YXIgaj10aGlzfHxLO3JldHVybiB6LmZvckVhY2goRSxmdW5jdGlvbihWKXtJPVYuY2FsbChqLEksayl9KSxJfX0sNTU0NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1'@;
put 'NSksSz1SKDQ4NjcpLEk9Uig2MDE2KSxrPVIoMjY0OCksRT1SKDc4NzQpLGo9Uig3Njc1KSxWPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn07ZnVuY3Rpb24gQihVLHEpeyFLLmlzVW5kZWZpbmVkKFUpJiZLLmlzVW5kZWZpbmVkKFVbIkNvbnRl'@;
put 'bnQtVHlwZSJdKSYmKFVbIkNvbnRlbnQtVHlwZSJdPXEpfXZhciBZLFg9e3RyYW5zaXRpb25hbDpFLGFkYXB0ZXI6KCh0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUifHx2b2lkIDAhPT16JiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeikpJiYo'@;
put 'WT1SKDU0NDgpKSxZKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihVLHEpe2lmKEkocSwiQWNjZXB0IiksSShxLCJDb250ZW50LVR5cGUiKSxLLmlzRm9ybURhdGEoVSl8fEsuaXNBcnJheUJ1ZmZlcihVKXx8Sy5pc0J1ZmZlcihVKXx8Sy5pc1N0cmVhbShVKXx8Sy5pc0ZpbGUoVSl8fEsu'@;
put 'aXNCbG9iKFUpKXJldHVybiBVO2lmKEsuaXNBcnJheUJ1ZmZlclZpZXcoVSkpcmV0dXJuIFUuYnVmZmVyO2lmKEsuaXNVUkxTZWFyY2hQYXJhbXMoVSkpcmV0dXJuIEIocSwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiKSxVLnRvU3RyaW5nKCk7dmFy'@;
put 'IGVlLHRlPUsuaXNPYmplY3QoVSksb2U9cSYmcVsiQ29udGVudC1UeXBlIl07aWYoKGVlPUsuaXNGaWxlTGlzdChVKSl8fHRlJiYibXVsdGlwYXJ0L2Zvcm0tZGF0YSI9PT1vZSl7dmFyIHNlPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gaihlZT97ImZpbGVzW10iOlV9OlUs'@;
put 'c2UmJm5ldyBzZSl9cmV0dXJuIHRlfHwiYXBwbGljYXRpb24vanNvbiI9PT1vZT8oQihxLCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oaGUsdWUsY2Upe2lmKEsuaXNTdHJpbmcoaGUpKXRyeXtyZXR1cm4oMCxKU09OLnBhcnNlKShoZSksSy50cmltKGhlKX1jYXRjaChHKXtpZigiU3lu'@;
put 'dGF4RXJyb3IiIT09Ry5uYW1lKXRocm93IEd9cmV0dXJuKDAsSlNPTi5zdHJpbmdpZnkpKGhlKX0oVSkpOlV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy50cmFuc2l0aW9uYWx8fFgudHJhbnNpdGlvbmFsLG9lPSEocSYmcS5zaWxlbnRKU09OUGFyc2luZykm'@;
put 'JiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKG9lfHxxJiZxLmZvcmNlZEpTT05QYXJzaW5nJiZLLmlzU3RyaW5nKFUpJiZVLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoVSl9Y2F0Y2goc2Upe2lmKG9lKXRocm93IlN5bnRheEVycm9yIj09PXNlLm5hbWU/ay5mcm9tKHNlLGsu'@;
put 'RVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6c2V9cmV0dXJuIFV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6'@;
put 'e0Zvcm1EYXRhOlIoMTYyMyl9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKFUpe3JldHVybiBVPj0yMDAmJlU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtLLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0s'@;
put 'ZnVuY3Rpb24oVSl7WC5oZWFkZXJzW1VdPXt9fSksSy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oVSl7WC5oZWFkZXJzW1VdPUsubWVyZ2UoVil9KSxNLmV4cG9ydHM9WH0sNzg3NDpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz17c2lsZW50SlNPTlBhcnNpbmc6'@;
put 'ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX19LDcyODg6TT0+e00uZXhwb3J0cz17dmVyc2lvbjoiMC4yNy4yIn19LDE4NDk6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHo9bmV3'@;
put 'IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLEs9MDtLPHoubGVuZ3RoO0srKyl6W0tdPWFyZ3VtZW50c1tLXTtyZXR1cm4gTy5hcHBseShSLHopfX19LDUzMjc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO2Z1bmN0aW9uIEsoSSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVu'@;
put 'dChJKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFKXtpZighaylyZXR1'@;
put 'cm4gSTt2YXIgajtpZihFKWo9RShrKTtlbHNlIGlmKHouaXNVUkxTZWFyY2hQYXJhbXMoaykpaj1rLnRvU3RyaW5nKCk7ZWxzZXt2YXIgVj1bXTt6LmZvckVhY2goayxmdW5jdGlvbihZLFgpe251bGwhPVkmJih6LmlzQXJyYXkoWSk/WCs9IltdIjpZPVtZXSx6LmZvckVhY2goWSxmdW5jdGlv'@;
put 'bihVKXt6LmlzRGF0ZShVKT9VPVUudG9JU09TdHJpbmcoKTp6LmlzT2JqZWN0KFUpJiYoVT1KU09OLnN0cmluZ2lmeShVKSksVi5wdXNoKEsoWCkrIj0iK0soVSkpfSkpfSksaj1WLmpvaW4oIiYiKX1pZihqKXt2YXIgQj1JLmluZGV4T2YoIiMiKTstMSE9PUImJihJPUkuc2xpY2UoMCxCKSks'@;
put 'SSs9KC0xPT09SS5pbmRleE9mKCI/Iik/Ij8iOiImIikran1yZXR1cm4gSX19LDczMDM6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtyZXR1cm4gUj9PLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrUi5yZXBsYWNlKC9eXC8rLywiIik6T319LDQzNzI6KE0sTyxSKT0+'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz16LmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKEssSSxrLEUsaixWKXt2YXIgQj1bXTtCLnB1c2goSysiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEkpKSx6LmlzTnVtYmVyKGspJiZCLnB1c2goImV4cGly'@;
put 'ZXM9IituZXcgRGF0ZShrKS50b0dNVFN0cmluZygpKSx6LmlzU3RyaW5nKEUpJiZCLnB1c2goInBhdGg9IitFKSx6LmlzU3RyaW5nKGopJiZCLnB1c2goImRvbWFpbj0iK2opLCEwPT09ViYmQi5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9Qi5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0'@;
put 'aW9uKEspe3ZhciBJPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitLKyIpPShbXjtdKikiKSk7cmV0dXJuIEk/ZGVjb2RlVVJJQ29tcG9uZW50KElbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihLKXt0aGlzLndyaXRlKEssIiIsRGF0ZS5ub3coKS04NjRl'@;
put 'NSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX19LDE3OTM6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChPKX19'@;
put 'LDYyNjg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz1mdW5jdGlvbihLKXtyZXR1cm4gei5pc09iamVjdChLKSYmITA9PT1LLmlzQXhpb3NFcnJvcn19LDc5ODU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz16Lmlz'@;
put 'U3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgSyxJPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gRShqKXt2YXIgVj1qO3JldHVybiBJJiYoay5zZXRBdHRyaWJ1dGUoImhy'@;
put 'ZWYiLFYpLFY9ay5ocmVmKSxrLnNldEF0dHJpYnV0ZSgiaHJlZiIsVikse2hyZWY6ay5ocmVmLHByb3RvY29sOmsucHJvdG9jb2w/ay5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ay5ob3N0LHNlYXJjaDprLnNlYXJjaD9rLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixo'@;
put 'YXNoOmsuaGFzaD9rLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTprLmhvc3RuYW1lLHBvcnQ6ay5wb3J0LHBhdGhuYW1lOiIvIj09PWsucGF0aG5hbWUuY2hhckF0KDApP2sucGF0aG5hbWU6Ii8iK2sucGF0aG5hbWV9fXJldHVybiBLPUUod2luZG93LmxvY2F0aW9uLmhyZWYp'@;
put 'LGZ1bmN0aW9uKGope3ZhciBWPXouaXNTdHJpbmcoaik/RShqKTpqO3JldHVybiBWLnByb3RvY29sPT09Sy5wcm90b2NvbCYmVi5ob3N0PT09Sy5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfX0sNjAxNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7TS5leHBvcnRz'@;
put 'PWZ1bmN0aW9uKEssSSl7ei5mb3JFYWNoKEssZnVuY3Rpb24oayxFKXtFIT09SSYmRS50b1VwcGVyQ2FzZSgpPT09SS50b1VwcGVyQ2FzZSgpJiYoS1tJXT1rLGRlbGV0ZSBLW0VdKX0pfX0sMTYyMzpNPT57TS5leHBvcnRzPW51bGx9LDQxMDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'ej1SKDQ4NjcpLEs9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9u'@;
put 'IiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXTtNLmV4cG9ydHM9ZnVuY3Rpb24oSSl7dmFyIGssRSxqLFY9e307cmV0dXJuIEkmJnouZm9yRWFjaChJLnNwbGl0KCJcbiIpLGZ1bmN0aW9uKEIpe2lmKGo9'@;
put 'Qi5pbmRleE9mKCI6Iiksaz16LnRyaW0oQi5zdWJzdHIoMCxqKSkudG9Mb3dlckNhc2UoKSxFPXoudHJpbShCLnN1YnN0cihqKzEpKSxrKXtpZihWW2tdJiZLLmluZGV4T2Yoayk+PTApcmV0dXJuO1Zba109InNldC1jb29raWUiPT09az8oVltrXT9WW2tdOltdKS5jb25jYXQoW0VdKTpWW2td'@;
put 'P1Zba10rIiwgIitFOkV9fSksVn19LDIwNTpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXt2YXIgUj0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhPKTtyZXR1cm4gUiYmUlsxXXx8IiJ9fSw4NzEzOk09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0'@;
put 'aW9uKE8pe3JldHVybiBmdW5jdGlvbihSKXtyZXR1cm4gTy5hcHBseShudWxsLFIpfX19LDc2NzU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoNDg2Nyk7TS5leHBvcnRzPWZ1bmN0aW9uKEksayl7az1rfHxuZXcgRm9ybURhdGE7dmFyIEU9W107ZnVu'@;
put 'Y3Rpb24gaihWKXtyZXR1cm4gbnVsbD09PVY/IiI6Sy5pc0RhdGUoVik/Vi50b0lTT1N0cmluZygpOksuaXNBcnJheUJ1ZmZlcihWKXx8Sy5pc1R5cGVkQXJyYXkoVik/ImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW1ZdKTp6LmZyb20oVik6Vn1yZXR1cm4gZnVuY3Rpb24gVihC'@;
put 'LFkpe2lmKEsuaXNQbGFpbk9iamVjdChCKXx8Sy5pc0FycmF5KEIpKXtpZigtMSE9PUUuaW5kZXhPZihCKSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrWSk7RS5wdXNoKEIpLEsuZm9yRWFjaChCLGZ1bmN0aW9uKFgsVSl7aWYoIUsuaXNVbmRlZmluZWQo'@;
put 'WCkpe3ZhciBxLGVlPVk/WSsiLiIrVTpVO2lmKFgmJiFZJiYib2JqZWN0Ij09dHlwZW9mIFgpaWYoSy5lbmRzV2l0aChVLCJ7fSIpKVg9SlNPTi5zdHJpbmdpZnkoWCk7ZWxzZSBpZihLLmVuZHNXaXRoKFUsIltdIikmJihxPUsudG9BcnJheShYKSkpcmV0dXJuIHZvaWQgcS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKHRlKXshSy5pc1VuZGVmaW5lZCh0ZSkmJmsuYXBwZW5kKGVlLGoodGUpKX0pO1YoWCxlZSl9fSksRS5wb3AoKX1lbHNlIGsuYXBwZW5kKFksaihCKSl9KEkpLGt9fSw0ODc1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1MTA4KSxLPVIoNzI4OCkudmVyc2lvbixJPVIo'@;
put 'MjY0OCksaz17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goZnVuY3Rpb24oaixWKXtrW2pdPWZ1bmN0aW9uKEIpe3JldHVybiB0eXBlb2YgQj09PWp8fCJhIisoVjwxPyJuICI6IiAiKStqfX0pO3ZhciBFPXt9O2su'@;
put 'dHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGosVixCKXtmdW5jdGlvbiBZKFgsVSl7cmV0dXJuIltBeGlvcyB2IitLKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrWCsiJyIrVSsoQj8iLiAiK0I6IiIpfXJldHVybiBmdW5jdGlvbihYLFUscSl7aWYoITE9PT1qKXRocm93IG5ldyBJKFkoVSwiIGhh'@;
put 'cyBiZWVuIHJlbW92ZWQiKyhWPyIgaW4gIitWOiIiKSksSS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIFYmJiFFW1VdJiYoRVtVXT0hMCx6Lndhcm4oWShVLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitWKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkp'@;
put 'LCFqfHxqKFgsVSxxKX19LE0uZXhwb3J0cz17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihqLFYsQil7aWYoIm9iamVjdCIhPXR5cGVvZiBqKXRocm93IG5ldyBJKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixJLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtmb3IodmFyIFk9T2JqZWN0LmtleXMo'@;
put 'aiksWD1ZLmxlbmd0aDtYLS0gPjA7KXt2YXIgVT1ZW1hdLHE9VltVXTtpZihxKXt2YXIgZWU9altVXSx0ZT12b2lkIDA9PT1lZXx8cShlZSxVLGopO2lmKCEwIT09dGUpdGhyb3cgbmV3IEkoIm9wdGlvbiAiK1UrIiBtdXN0IGJlICIrdGUsSS5FUlJfQkFEX09QVElPTl9WQUxVRSl9ZWxzZSBp'@;
put 'ZighMCE9PUIpdGhyb3cgbmV3IEkoIlVua25vd24gb3B0aW9uICIrVSxJLkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6a319LDQ4Njc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIoMTg0OSksST1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGs9KHo9T2JqZWN0LmNyZWF0'@;
put 'ZShudWxsKSxmdW5jdGlvbihHKXt2YXIgYj1JLmNhbGwoRyk7cmV0dXJuIHpbYl18fCh6W2JdPWIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KTtmdW5jdGlvbiBFKEcpe3JldHVybiBHPUcudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXtyZXR1cm4gayhiKT09PUd9fWZ1bmN0aW9uIGoo'@;
put 'Ryl7cmV0dXJuIEFycmF5LmlzQXJyYXkoRyl9ZnVuY3Rpb24gVihHKXtyZXR1cm4gdm9pZCAwPT09R312YXIgQj1FKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIFkoRyl7cmV0dXJuIG51bGwhPT1HJiYib2JqZWN0Ij09dHlwZW9mIEd9ZnVuY3Rpb24gWChHKXtpZigib2JqZWN0IiE9PWsoRykp'@;
put 'cmV0dXJuITE7dmFyIGI9T2JqZWN0LmdldFByb3RvdHlwZU9mKEcpO3JldHVybiBudWxsPT09Ynx8Yj09PU9iamVjdC5wcm90b3R5cGV9dmFyIFU9RSgiRGF0ZSIpLHE9RSgiRmlsZSIpLGVlPUUoIkJsb2IiKSx0ZT1FKCJGaWxlTGlzdCIpO2Z1bmN0aW9uIG9lKEcpe3JldHVybiJbb2JqZWN0'@;
put 'IEZ1bmN0aW9uXSI9PT1JLmNhbGwoRyl9dmFyIHNlPUUoIlVSTFNlYXJjaFBhcmFtcyIpO2Z1bmN0aW9uIGhlKEcsYil7aWYobnVsbCE9RylpZigib2JqZWN0IiE9dHlwZW9mIEcmJihHPVtHXSksaihHKSlmb3IodmFyIEQ9MCxIPUcubGVuZ3RoO0Q8SDtEKyspYi5jYWxsKG51bGwsR1tEXSxE'@;
put 'LEcpO2Vsc2UgZm9yKHZhciBOIGluIEcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsTikmJmIuY2FsbChudWxsLEdbTl0sTixHKX12YXIgdWUsY2U9KHVlPXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpLGZ1bmN0'@;
put 'aW9uKEcpe3JldHVybiB1ZSYmRyBpbnN0YW5jZW9mIHVlfSk7TS5leHBvcnRzPXtpc0FycmF5OmosaXNBcnJheUJ1ZmZlcjpCLGlzQnVmZmVyOmZ1bmN0aW9uKEcpe3JldHVybiBudWxsIT09RyYmIVYoRykmJm51bGwhPT1HLmNvbnN0cnVjdG9yJiYhVihHLmNvbnN0cnVjdG9yKSYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIEcuY29uc3RydWN0b3IuaXNCdWZmZXImJkcuY29uc3RydWN0b3IuaXNCdWZmZXIoRyl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oRyl7dmFyIGI9IltvYmplY3QgRm9ybURhdGFdIjtyZXR1cm4gRyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGb3JtRGF0YSYmRyBpbnN0YW5jZW9m'@;
put 'IEZvcm1EYXRhfHxJLmNhbGwoRyk9PT1ifHxvZShHLnRvU3RyaW5nKSYmRy50b1N0cmluZygpPT09Yil9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKEcpe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KEcpOkcm'@;
put 'JkcuYnVmZmVyJiZCKEcuYnVmZmVyKX0saXNTdHJpbmc6ZnVuY3Rpb24oRyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBHfSxpc051bWJlcjpmdW5jdGlvbihHKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEd9LGlzT2JqZWN0OlksaXNQbGFpbk9iamVjdDpYLGlzVW5kZWZpbmVkOlYsaXNEYXRl'@;
put 'OlUsaXNGaWxlOnEsaXNCbG9iOmVlLGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oRyl7cmV0dXJuIFkoRykmJm9lKEcucGlwZSl9LGlzVVJMU2VhcmNoUGFyYW1zOnNlLGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKHR5cGVvZiBuYXZpZ2F0b3I+InUifHwi'@;
put 'UmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJnR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUifSxmb3JFYWNoOmhlLG1lcmdlOmZ1bmN0aW9uIEco'@;
put 'KXt2YXIgYj17fTtmdW5jdGlvbiBEKGcsQyl7YltDXT1YKGJbQ10pJiZYKGcpP0coYltDXSxnKTpYKGcpP0coe30sZyk6aihnKT9nLnNsaWNlKCk6Z31mb3IodmFyIEg9MCxOPWFyZ3VtZW50cy5sZW5ndGg7SDxOO0grKyloZShhcmd1bWVudHNbSF0sRCk7cmV0dXJuIGJ9LGV4dGVuZDpmdW5j'@;
put 'dGlvbihHLGIsRCl7cmV0dXJuIGhlKGIsZnVuY3Rpb24oSCxOKXtHW05dPUQmJiJmdW5jdGlvbiI9PXR5cGVvZiBIP0soSCxEKTpIfSksR30sdHJpbTpmdW5jdGlvbihHKXtyZXR1cm4gRy50cmltP0cudHJpbSgpOkcucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlv'@;
put 'bihHKXtyZXR1cm4gNjUyNzk9PT1HLmNoYXJDb2RlQXQoMCkmJihHPUcuc2xpY2UoMSkpLEd9LGluaGVyaXRzOmZ1bmN0aW9uKEcsYixELEgpe0cucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUsSCksRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxEJiZPYmplY3QuYXNzaWdu'@;
put 'KEcucHJvdG90eXBlLEQpfSx0b0ZsYXRPYmplY3Q6ZnVuY3Rpb24oRyxiLEQpe3ZhciBILE4sZyxDPXt9O2I9Ynx8e307ZG97Zm9yKE49KEg9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRykpLmxlbmd0aDtOLS0gPjA7KUNbZz1IW05dXXx8KGJbZ109R1tnXSxDW2ddPSEwKTtHPU9iamVj'@;
put 'dC5nZXRQcm90b3R5cGVPZihHKX13aGlsZShHJiYoIUR8fEQoRyxiKSkmJkchPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gYn0sa2luZE9mOmssa2luZE9mVGVzdDpFLGVuZHNXaXRoOmZ1bmN0aW9uKEcsYixEKXtHPVN0cmluZyhHKSwodm9pZCAwPT09RHx8RD5HLmxlbmd0aCkmJihEPUcu'@;
put 'bGVuZ3RoKTt2YXIgSD1HLmluZGV4T2YoYixELT1iLmxlbmd0aCk7cmV0dXJuLTEhPT1IJiZIPT09RH0sdG9BcnJheTpmdW5jdGlvbihHKXtpZighRylyZXR1cm4gbnVsbDt2YXIgYj1HLmxlbmd0aDtpZihWKGIpKXJldHVybiBudWxsO2Zvcih2YXIgRD1uZXcgQXJyYXkoYik7Yi0tID4wOylE'@;
put 'W2JdPUdbYl07cmV0dXJuIER9LGlzVHlwZWRBcnJheTpjZSxpc0ZpbGVMaXN0OnRlfX0sNTYyMzpNPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE8oSyxJLGspe0sgaW5zdGFuY2VvZiBSZWdFeHAmJihLPVIoSyxrKSksSSBpbnN0YW5jZW9mIFJlZ0V4cCYmKEk9UihJLGspKTt2YXIgRT16KEss'@;
put 'SSxrKTtyZXR1cm4gRSYme3N0YXJ0OkVbMF0sZW5kOkVbMV0scHJlOmsuc2xpY2UoMCxFWzBdKSxib2R5Omsuc2xpY2UoRVswXStLLmxlbmd0aCxFWzFdKSxwb3N0Omsuc2xpY2UoRVsxXStJLmxlbmd0aCl9fWZ1bmN0aW9uIFIoSyxJKXt2YXIgaz1JLm1hdGNoKEspO3JldHVybiBrP2tbMF06'@;
put 'bnVsbH1mdW5jdGlvbiB6KEssSSxrKXt2YXIgRSxqLFYsQixZLFg9ay5pbmRleE9mKEspLFU9ay5pbmRleE9mKEksWCsxKSxxPVg7aWYoWD49MCYmVT4wKXtpZihLPT09SSlyZXR1cm5bWCxVXTtmb3IoRT1bXSxWPWsubGVuZ3RoO3E+PTAmJiFZOylxPT1YPyhFLnB1c2gocSksWD1rLmluZGV4'@;
put 'T2YoSyxxKzEpKToxPT1FLmxlbmd0aD9ZPVtFLnBvcCgpLFVdOigoaj1FLnBvcCgpKTxWJiYoVj1qLEI9VSksVT1rLmluZGV4T2YoSSxxKzEpKSxxPVg8VSYmWD49MD9YOlU7RS5sZW5ndGgmJihZPVtWLEJdKX1yZXR1cm4gWX1NLmV4cG9ydHM9TyxPLnJhbmdlPXp9LDk3NDI6KE0sTyk9Pnsi'@;
put 'dXNlIHN0cmljdCI7Ty5ieXRlTGVuZ3RoPWZ1bmN0aW9uKEIpe3ZhciBZPWooQiksVT1ZWzFdO3JldHVybiAzKihZWzBdK1UpLzQtVX0sTy50b0J5dGVBcnJheT1mdW5jdGlvbihCKXt2YXIgWSxYLGNlLFU9aihCKSxxPVVbMF0sZWU9VVsxXSx0ZT1uZXcgSygzKihxKyhjZT1lZSkpLzQtY2Up'@;
put 'LG9lPTAsc2U9ZWU+MD9xLTQ6cTtmb3IoWD0wO1g8c2U7WCs9NClZPXpbQi5jaGFyQ29kZUF0KFgpXTw8MTh8eltCLmNoYXJDb2RlQXQoWCsxKV08PDEyfHpbQi5jaGFyQ29kZUF0KFgrMildPDw2fHpbQi5jaGFyQ29kZUF0KFgrMyldLHRlW29lKytdPVk+PjE2JjI1NSx0ZVtvZSsrXT1ZPj44'@;
put 'JjI1NSx0ZVtvZSsrXT0yNTUmWTtyZXR1cm4gMj09PWVlJiYoWT16W0IuY2hhckNvZGVBdChYKV08PDJ8eltCLmNoYXJDb2RlQXQoWCsxKV0+PjQsdGVbb2UrK109MjU1JlkpLDE9PT1lZSYmKFk9eltCLmNoYXJDb2RlQXQoWCldPDwxMHx6W0IuY2hhckNvZGVBdChYKzEpXTw8NHx6W0IuY2hh'@;
put 'ckNvZGVBdChYKzIpXT4+Mix0ZVtvZSsrXT1ZPj44JjI1NSx0ZVtvZSsrXT0yNTUmWSksdGV9LE8uZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihCKXtmb3IodmFyIFksWD1CLmxlbmd0aCxVPVglMyxxPVtdLHRlPTAsb2U9WC1VO3RlPG9lO3RlKz0xNjM4MylxLnB1c2goVihCLHRlLHRlKzE2Mzgz'@;
put 'Pm9lP29lOnRlKzE2MzgzKSk7cmV0dXJuIDE9PT1VP3EucHVzaChSWyhZPUJbWC0xXSk+PjJdK1JbWTw8NCY2M10rIj09Iik6Mj09PVUmJnEucHVzaChSWyhZPShCW1gtMl08PDgpK0JbWC0xXSk+PjEwXStSW1k+PjQmNjNdK1JbWTw8MiY2M10rIj0iKSxxLmpvaW4oIiIpfTtmb3IodmFyIFI9'@;
put 'W10sej1bXSxLPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LEk9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGs9MDtrPDY0OysraylSW2tdPUlba10seltJLmNoYXJDb2RlQXQoayldPWs7ZnVu'@;
put 'Y3Rpb24gaihCKXt2YXIgWT1CLmxlbmd0aDtpZihZJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgWD1CLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PVgmJihYPVkpLFtYLFg9PT1ZPzA6NC1YJTRdfWZ1bmN0'@;
put 'aW9uIFYoQixZLFgpe2Zvcih2YXIgcSxlZT1bXSx0ZT1ZO3RlPFg7dGUrPTMpZWUucHVzaChSWyhxPShCW3RlXTw8MTYmMTY3MTE2ODApKyhCW3RlKzFdPDw4JjY1MjgwKSsoMjU1JkJbdGUrMl0pKT4+MTgmNjNdK1JbcT4+MTImNjNdK1JbcT4+NiY2M10rUls2MyZxXSk7cmV0dXJuIGVlLmpv'@;
put 'aW4oIiIpfXpbIi0iLmNoYXJDb2RlQXQoMCldPTYyLHpbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSwzNTUwOmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSSh2LHApe2lmKCF2KXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIp'@;
put 'fWZ1bmN0aW9uIGsodixwKXt2LnN1cGVyXz1wO3ZhciB3PWZ1bmN0aW9uKCl7fTt3LnByb3RvdHlwZT1wLnByb3RvdHlwZSx2LnByb3RvdHlwZT1uZXcgdyx2LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj12fWZ1bmN0aW9uIEUodixwLHcpe2lmKEUuaXNCTih2KSlyZXR1cm4gdjt0aGlzLm5lZ2F0'@;
put 'aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09diYmKCJsZSIhPT1wJiYiYmUiIT09cHx8KHc9cCxwPTEwKSx0aGlzLl9pbml0KHZ8fDAscHx8MTAsd3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJO'@;
put 'PUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVih2LHApe3ZhciB3PXYuY2hhckNvZGVBdChwKTtyZXR1cm4gdz49NDgmJnc8PTU3'@;
put 'P3ctNDg6dz49NjUmJnc8PTcwP3ctNTU6dz49OTcmJnc8PTEwMj93LTg3OnZvaWQgSSghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit2KX1mdW5jdGlvbiBCKHYscCx3KXt2YXIgSj1WKHYsdyk7cmV0dXJuIHctMT49cCYmKEp8PVYodix3LTEpPDw0KSxKfWZ1bmN0aW9uIFkodixwLHcsSil7'@;
put 'Zm9yKHZhciBuZT0wLGRlPTAsZmU9TWF0aC5taW4odi5sZW5ndGgsdykseGU9cDt4ZTxmZTt4ZSsrKXt2YXIgTGU9di5jaGFyQ29kZUF0KHhlKS00ODtuZSo9SixkZT1MZT49NDk/TGUtNDkrMTA6TGU+PTE3P0xlLTE3KzEwOkxlLEkoTGU+PTAmJmRlPEosIkludmFsaWQgY2hhcmFjdGVyIiks'@;
put 'bmUrPWRlfXJldHVybiBuZX1mdW5jdGlvbiBYKHYscCl7di53b3Jkcz1wLndvcmRzLHYubGVuZ3RoPXAubGVuZ3RoLHYubmVnYXRpdmU9cC5uZWdhdGl2ZSx2LnJlZD1wLnJlZH1pZihFLmlzQk49ZnVuY3Rpb24odil7cmV0dXJuIHYgaW5zdGFuY2VvZiBFfHxudWxsIT09diYmIm9iamVjdCI9'@;
put 'PXR5cGVvZiB2JiZ2LmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh2LndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24odixwKXtyZXR1cm4gdi5jbXAocCk+MD92OnB9LEUubWluPWZ1bmN0aW9uKHYscCl7cmV0dXJuIHYuY21wKHApPDA/djpwfSxFLnByb3Rv'@;
put 'dHlwZS5faW5pdD1mdW5jdGlvbih2LHAsdyl7aWYoIm51bWJlciI9PXR5cGVvZiB2KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHYscCx3KTtpZigib2JqZWN0Ij09dHlwZW9mIHYpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh2LHAsdyk7ImhleCI9PT1wJiYocD0xNiksSShwPT09KDB8cCkmJnA+'@;
put 'PTImJnA8PTM2KTt2YXIgSj0wOyItIj09PSh2PXYudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoSisrLHRoaXMubmVnYXRpdmU9MSksSjx2Lmxlbmd0aCYmKDE2PT09cD90aGlzLl9wYXJzZUhleCh2LEosdyk6KHRoaXMuX3BhcnNlQmFzZSh2LHAsSiksImxlIj09PXcmJnRo'@;
put 'aXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxwLHcpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHYscCx3KXt2PDAmJih0aGlzLm5lZ2F0aXZlPTEsdj0tdiksdjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdl0sdGhpcy5sZW5ndGg9MSk6djw0NTAzNTk5'@;
put 'NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ2LHYvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKHY8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdix2LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT13JiZ0'@;
put 'aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkscCx3KX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih2LHAsdyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIHYubGVuZ3RoKSx2Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMu'@;
put 'bGVuZ3RoPU1hdGguY2VpbCh2Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBKPTA7Sjx0aGlzLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT0wO3ZhciBuZSxkZSxmZT0wO2lmKCJiZSI9PT13KWZvcihKPXYubGVuZ3RoLTEsbmU9MDtKPj0wO0ot'@;
put 'PTMpdGhpcy53b3Jkc1tuZV18PShkZT12W0pdfHZbSi0xXTw8OHx2W0otMl08PDE2KTw8ZmUmNjcxMDg4NjMsdGhpcy53b3Jkc1tuZSsxXT1kZT4+PjI2LWZlJjY3MTA4ODYzLChmZSs9MjQpPj0yNiYmKGZlLT0yNixuZSsrKTtlbHNlIGlmKCJsZSI9PT13KWZvcihKPTAsbmU9MDtKPHYubGVu'@;
put 'Z3RoO0orPTMpdGhpcy53b3Jkc1tuZV18PShkZT12W0pdfHZbSisxXTw8OHx2W0orMl08PDE2KTw8ZmUmNjcxMDg4NjMsdGhpcy53b3Jkc1tuZSsxXT1kZT4+PjI2LWZlJjY3MTA4ODYzLChmZSs9MjQpPj0yNiYmKGZlLT0yNixuZSsrKTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5'@;
put 'cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHYscCx3KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHYubGVuZ3RoLXApLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEo9MDtKPHRoaXMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPTA7dmFyIG5lLGRlPTAsZmU9MDtp'@;
put 'ZigiYmUiPT09dylmb3IoSj12Lmxlbmd0aC0xO0o+PXA7Si09MiluZT1CKHYscCxKKTw8ZGUsdGhpcy53b3Jkc1tmZV18PTY3MTA4ODYzJm5lLGRlPj0xOD8oZGUtPTE4LHRoaXMud29yZHNbZmUrPTFdfD1uZT4+PjI2KTpkZSs9ODtlbHNlIGZvcihKPSh2Lmxlbmd0aC1wKSUyPT0wP3ArMTpw'@;
put 'O0o8di5sZW5ndGg7Sis9MiluZT1CKHYscCxKKTw8ZGUsdGhpcy53b3Jkc1tmZV18PTY3MTA4ODYzJm5lLGRlPj0xOD8oZGUtPTE4LHRoaXMud29yZHNbZmUrPTFdfD1uZT4+PjI2KTpkZSs9ODt0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHYscCx3KXt0'@;
put 'aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgSj0wLG5lPTE7bmU8PTY3MTA4ODYzO25lKj1wKUorKztKLS0sbmU9bmUvcHwwO2Zvcih2YXIgZGU9di5sZW5ndGgtdyxmZT1kZSVKLHhlPU1hdGgubWluKGRlLGRlLWZlKSt3LExlPTAsRmU9dztGZTx4ZTtGZSs9SilMZT1ZKHYs'@;
put 'RmUsRmUrSixwKSx0aGlzLmltdWxuKG5lKSx0aGlzLndvcmRzWzBdK0xlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPUxlOnRoaXMuX2lhZGRuKExlKTtpZigwIT09ZmUpe3ZhciBPZT0xO2ZvcihMZT1ZKHYsRmUsdi5sZW5ndGgscCksRmU9MDtGZTxmZTtGZSsrKU9lKj1wO3RoaXMuaW11bG4o'@;
put 'T2UpLHRoaXMud29yZHNbMF0rTGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9TGU6dGhpcy5faWFkZG4oTGUpfXRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odil7di53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7'@;
put 'cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD10aGlzLmxlbmd0aCx2Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdi5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHYpe1godix0aGlzKX0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIg'@;
put 'dj1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHYpLHZ9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odil7Zm9yKDt0aGlzLmxlbmd0aDx2Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7'@;
put 'dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhp'@;
put 'cy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e0UucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPVV9Y2F0Y2h7RS5wcm90b3R5cGUuaW5zcGVjdD1VfWVsc2UgRS5w'@;
put 'cm90b3R5cGUuaW5zcGVjdD1VO2Z1bmN0aW9uIFUoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgcT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAiXSxlZT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSx0ZT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2'@;
put 'NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTEx'@;
put 'MTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBvZSh2LHAsdyl7dy5uZWdhdGl2ZT1wLm5lZ2F0aXZlXnYubmVnYXRpdmU7dmFyIEo9di5sZW5ndGgrcC5sZW5ndGh8MDt3Lmxlbmd0aD1KLEo9Si0xfDA7dmFy'@;
put 'IG5lPTB8di53b3Jkc1swXSxkZT0wfHAud29yZHNbMF0sZmU9bmUqZGUsTGU9ZmUvNjcxMDg4NjR8MDt3LndvcmRzWzBdPTY3MTA4ODYzJmZlO2Zvcih2YXIgRmU9MTtGZTxKO0ZlKyspe2Zvcih2YXIgT2U9TGU+Pj4yNixqZT02NzEwODg2MyZMZSxXZT1NYXRoLm1pbihGZSxwLmxlbmd0aC0x'@;
put 'KSxLZT1NYXRoLm1heCgwLEZlLXYubGVuZ3RoKzEpO0tlPD1XZTtLZSsrKU9lKz0oZmU9KG5lPTB8di53b3Jkc1tGZS1LZXwwXSkqKGRlPTB8cC53b3Jkc1tLZV0pK2plKS82NzEwODg2NHwwLGplPTY3MTA4ODYzJmZlO3cud29yZHNbRmVdPTB8amUsTGU9MHxPZX1yZXR1cm4gMCE9PUxlP3cu'@;
put 'd29yZHNbRmVdPTB8TGU6dy5sZW5ndGgtLSx3Ll9zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHYscCl7dmFyIHc7aWYocD0wfHB8fDEsMTY9PT0odj12fHwxMCl8fCJoZXgiPT09dil7dz0iIjtmb3IodmFyIEo9MCxuZT0wLGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl7'@;
put 'dmFyIGZlPXRoaXMud29yZHNbZGVdLHhlPSgxNjc3NzIxNSYoZmU8PEp8bmUpKS50b1N0cmluZygxNik7bmU9ZmU+Pj4yNC1KJjE2Nzc3MjE1LChKKz0yKT49MjYmJihKLT0yNixkZS0tKSx3PTAhPT1uZXx8ZGUhPT10aGlzLmxlbmd0aC0xP3FbNi14ZS5sZW5ndGhdK3hlK3c6eGUrd31mb3Io'@;
put 'MCE9PW5lJiYodz1uZS50b1N0cmluZygxNikrdyk7dy5sZW5ndGglcCE9MDspdz0iMCIrdztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih3PSItIit3KSx3fWlmKHY9PT0oMHx2KSYmdj49MiYmdjw9MzYpe3ZhciBMZT1lZVt2XSxGZT10ZVt2XTt3PSIiO3ZhciBPZT10aGlzLmNsb25lKCk7'@;
put 'Zm9yKE9lLm5lZ2F0aXZlPTA7IU9lLmlzWmVybygpOyl7dmFyIGplPU9lLm1vZHJuKEZlKS50b1N0cmluZyh2KTt3PShPZT1PZS5pZGl2bihGZSkpLmlzWmVybygpP2plK3c6cVtMZS1qZS5sZW5ndGhdK2plK3d9Zm9yKHRoaXMuaXNaZXJvKCkmJih3PSIwIit3KTt3Lmxlbmd0aCVwIT0wOyl3'@;
put 'PSIwIit3O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHc9Ii0iK3cpLHd9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB2PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD92Kz02'@;
put 'NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIp'@;
put 'LDAhPT10aGlzLm5lZ2F0aXZlPy12OnZ9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxqJiYoRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShqLHYscCl9KSxFLnByb3RvdHlw'@;
put 'ZS50b0FycmF5PWZ1bmN0aW9uKHYscCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdixwKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odixwLHcpe3RoaXMuX3N0cmlwKCk7dmFyIEo9dGhpcy5ieXRlTGVuZ3RoKCksbmU9d3x8TWF0aC5tYXgoMSxKKTtJKEo8PW5l'@;
put 'LCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShuZT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgZmUseGUsZGU9KHhlPW5lLChmZT12KS5hbGxvY1Vuc2FmZT9mZS5hbGxvY1Vuc2FmZSh4ZSk6bmV3IGZlKHhlKSk7cmV0dXJuIHRoaXNbIl90'@;
put 'b0FycmF5TGlrZSIrKCJsZSI9PT1wPyJMRSI6IkJFIildKGRlLEopLGRlfSxFLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbih2LHApe2Zvcih2YXIgdz0wLEo9MCxuZT0wLGRlPTA7bmU8dGhpcy5sZW5ndGg7bmUrKyl7dmFyIGZlPXRoaXMud29yZHNbbmVdPDxkZXxKO3Zbdysr'@;
put 'XT0yNTUmZmUsdzx2Lmxlbmd0aCYmKHZbdysrXT1mZT4+OCYyNTUpLHc8di5sZW5ndGgmJih2W3crK109ZmU+PjE2JjI1NSksNj09PWRlPyh3PHYubGVuZ3RoJiYodlt3KytdPWZlPj4yNCYyNTUpLEo9MCxkZT0wKTooSj1mZT4+PjI0LGRlKz0yKX1pZih3PHYubGVuZ3RoKWZvcih2W3crK109'@;
put 'Sjt3PHYubGVuZ3RoOyl2W3crK109MH0sRS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24odixwKXtmb3IodmFyIHc9di5sZW5ndGgtMSxKPTAsbmU9MCxkZT0wO25lPHRoaXMubGVuZ3RoO25lKyspe3ZhciBmZT10aGlzLndvcmRzW25lXTw8ZGV8Sjt2W3ctLV09MjU1JmZlLHc+'@;
put 'PTAmJih2W3ctLV09ZmU+PjgmMjU1KSx3Pj0wJiYodlt3LS1dPWZlPj4xNiYyNTUpLDY9PT1kZT8odz49MCYmKHZbdy0tXT1mZT4+MjQmMjU1KSxKPTAsZGU9MCk6KEo9ZmU+Pj4yNCxkZSs9Mil9aWYodz49MClmb3Iodlt3LS1dPUo7dz49MDspdlt3LS1dPTB9LEUucHJvdG90eXBlLl9jb3Vu'@;
put 'dEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbih2KXtyZXR1cm4gMzItTWF0aC5jbHozMih2KX06ZnVuY3Rpb24odil7dmFyIHA9dix3PTA7cmV0dXJuIHA+PTQwOTYmJih3Kz0xMyxwPj4+PTEzKSxwPj02NCYmKHcrPTcscD4+Pj03KSxwPj04JiYodys9NCxwPj4+PTQpLHA+PTImJih3Kz0yLHA+'@;
put 'Pj49MiksdytwfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odil7aWYoMD09PXYpcmV0dXJuIDI2O3ZhciBwPXYsdz0wO3JldHVybiEoODE5MSZwKSYmKHcrPTEzLHA+Pj49MTMpLCEoMTI3JnApJiYodys9NyxwPj4+PTcpLCEoMTUmcCkmJih3Kz00LHA+Pj49NCksISgzJnApJiYo'@;
put 'dys9MixwPj4+PTIpLCEoMSZwKSYmdysrLHd9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBwPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3B9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0'@;
put 'aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHY9MCxwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciB3PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbcF0pO2lmKHYrPXcsMjYhPT13KWJyZWFrfXJldHVybiB2fSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5j'@;
put 'dGlvbih2KXtyZXR1cm4gdGhpcy50ZXN0bih2LTEpP3RoaXMubm90bih2KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odil7Zm9yKDt0aGlzLmxlbmd0aDx2Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlz'@;
put 'Lmxlbmd0aCsrXT0wO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twXXx2LndvcmRzW3BdO3JldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odil7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8di5uZWdhdGl2'@;
put 'ZSkpLHRoaXMuaXVvcih2KX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3Iodik6di5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxl'@;
put 'bmd0aD90aGlzLmNsb25lKCkuaXVvcih2KTp2LmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odil7dmFyIHA7cD10aGlzLmxlbmd0aD52Lmxlbmd0aD92OnRoaXM7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT10aGlzLndvcmRz'@;
put 'W3ddJnYud29yZHNbd107cmV0dXJuIHRoaXMubGVuZ3RoPXAubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odil7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8di5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodil9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlv'@;
put 'bih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodik6di5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh2KTp2LmNsb25lKCku'@;
put 'aXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHYpe3ZhciBwLHc7dGhpcy5sZW5ndGg+di5sZW5ndGg/KHA9dGhpcyx3PXYpOihwPXYsdz10aGlzKTtmb3IodmFyIEo9MDtKPHcubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPXAud29yZHNbSl1edy53b3Jkc1tKXTtpZih0'@;
put 'aGlzIT09cClmb3IoO0o8cC5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09cC53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9cC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih2KXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXx2Lm5lZ2F0aXZlKSks'@;
put 'dGhpcy5pdXhvcih2KX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih2KTp2LmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5s'@;
put 'ZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHYpOnYuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odil7SSgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3ZhciBwPTB8TWF0aC5jZWlsKHYvMjYpLHc9diUyNjt0aGlzLl9leHBhbmQocCksdz4wJiZwLS07'@;
put 'Zm9yKHZhciBKPTA7SjxwO0orKyl0aGlzLndvcmRzW0pdPTY3MTA4ODYzJn50aGlzLndvcmRzW0pdO3JldHVybiB3PjAmJih0aGlzLndvcmRzW0pdPX50aGlzLndvcmRzW0pdJjY3MTA4ODYzPj4yNi13KSx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHYpe3JldHVy'@;
put 'biB0aGlzLmNsb25lKCkuaW5vdG4odil9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odixwKXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHc9di8yNnwwLEo9diUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHcrMSksdGhpcy53b3Jkc1t3XT1wP3RoaXMud29yZHNbd118MTw8Sjp0'@;
put 'aGlzLndvcmRzW3ddJn4oMTw8SiksdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih2KXt2YXIgcCx3LEo7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT12Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAscD10aGlzLmlzdWIodiksdGhpcy5uZWdhdGl2ZV49'@;
put 'MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09di5uZWdhdGl2ZSlyZXR1cm4gdi5uZWdhdGl2ZT0wLHA9dGhpcy5pc3ViKHYpLHYubmVnYXRpdmU9MSxwLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnYubGVuZ3RoPyh3PXRoaXMsSj12KToodz12LEo9dGhpcyk7'@;
put 'Zm9yKHZhciBuZT0wLGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT02NzEwODg2MyYocD0oMHx3LndvcmRzW2RlXSkrKDB8Si53b3Jkc1tkZV0pK25lKSxuZT1wPj4+MjY7Zm9yKDswIT09bmUmJmRlPHcubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09NjcxMDg4NjMmKHA9'@;
put 'KDB8dy53b3Jkc1tkZV0pK25lKSxuZT1wPj4+MjY7aWYodGhpcy5sZW5ndGg9dy5sZW5ndGgsMCE9PW5lKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPW5lLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih3IT09dGhpcylmb3IoO2RlPHcubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dy53b3Jkc1tk'@;
put 'ZV07cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih2KXt2YXIgcDtyZXR1cm4gMCE9PXYubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh2Lm5lZ2F0aXZlPTAscD10aGlzLnN1Yih2KSx2Lm5lZ2F0aXZlXj0xLHApOjA9PT12Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdh'@;
put 'dGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHA9di5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHApOnRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHYpOnYuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHYpe2lmKDAhPT12Lm5lZ2F0aXZl'@;
put 'KXt2Lm5lZ2F0aXZlPTA7dmFyIHA9dGhpcy5pYWRkKHYpO3JldHVybiB2Lm5lZ2F0aXZlPTEscC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh2KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgdyxK'@;
put 'LG5lPXRoaXMuY21wKHYpO2lmKDA9PT1uZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7bmU+MD8odz10aGlzLEo9dik6KHc9dixKPXRoaXMpO2Zvcih2YXIgZGU9MCxmZT0wO2ZlPEoubGVuZ3RoO2ZlKyspZGU9KHA9KDB8dy53b3Jk'@;
put 'c1tmZV0pLSgwfEoud29yZHNbZmVdKStkZSk+PjI2LHRoaXMud29yZHNbZmVdPTY3MTA4ODYzJnA7Zm9yKDswIT09ZGUmJmZlPHcubGVuZ3RoO2ZlKyspZGU9KHA9KDB8dy53b3Jkc1tmZV0pK2RlKT4+MjYsdGhpcy53b3Jkc1tmZV09NjcxMDg4NjMmcDtpZigwPT09ZGUmJmZlPHcubGVuZ3Ro'@;
put 'JiZ3IT09dGhpcylmb3IoO2ZlPHcubGVuZ3RoO2ZlKyspdGhpcy53b3Jkc1tmZV09dy53b3Jkc1tmZV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGZlKSx3IT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1'@;
put 'bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih2KX07dmFyIHNlPWZ1bmN0aW9uKHYscCx3KXt2YXIgSixuZSxkZSxmZT12LndvcmRzLHhlPXAud29yZHMsTGU9dy53b3JkcyxGZT0wLE9lPTB8ZmVbMF0samU9ODE5MSZPZSxXZT1PZT4+PjEzLEtlPTB8ZmVbMV0sWWU9ODE5MSZL'@;
put 'ZSxKZT1LZT4+PjEzLGx0PTB8ZmVbMl0sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8ZmVbM10sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8ZmVbNF0sVWU9ODE5MSZYZSxodD1YZT4+PjEzLE1lPTB8ZmVbNV0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8ZmVbNl0sdXQ9ODE5MSZp'@;
put 'dCxNdD1pdD4+PjEzLEh0PTB8ZmVbN10sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8ZmVbOF0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8ZmVbOV0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8eGVbMF0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8eGVbMV0sd3Q9ODE5MSZo'@;
put 'bixYdD1obj4+PjEzLF90PTB8eGVbMl0sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8eGVbM10sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8eGVbNF0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8eGVbNV0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8eGVbNl0sc249ODE5MSZ4'@;
put 'bixCbj14bj4+PjEzLFJuPTB8eGVbN10sJHQ9ODE5MSZSbixQbj1Sbj4+PjEzLG5pPTB8eGVbOF0sbG49ODE5MSZuaSxqbj1uaT4+PjEzLHFyPTB8eGVbOV0sZ2k9ODE5MSZxcix4cj1xcj4+PjEzO3cubmVnYXRpdmU9di5uZWdhdGl2ZV5wLm5lZ2F0aXZlLHcubGVuZ3RoPTE5O3ZhciBVaT0o'@;
put 'RmUrKEo9TWF0aC5pbXVsKGplLGZ0KSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKGplLGZuKSkrTWF0aC5pbXVsKFdlLGZ0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9TWF0aC5pbXVsKFdlLGZuKSkrKG5lPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2MyxKPU1hdGguaW11bChZ'@;
put 'ZSxmdCksbmU9KG5lPU1hdGguaW11bChZZSxmbikpK01hdGguaW11bChKZSxmdCl8MCxkZT1NYXRoLmltdWwoSmUsZm4pO3ZhciBLcj0oRmUrKEo9SitNYXRoLmltdWwoamUsd3QpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxYdCl8MCkrTWF0aC5pbXVsKFdlLHd0KXww'@;
put 'KSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLFh0KXwwKSsobmU+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFBlLGZ0KSxuZT0obmU9TWF0aC5pbXVsKFBlLGZuKSkrTWF0aC5pbXVsKGJlLGZ0KXwwLGRlPU1hdGguaW11bChiZSxmbiksSj1K'@;
put 'K01hdGguaW11bChZZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoSmUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKEplLFh0KXwwO3ZhciBubz0oRmUrKEo9SitNYXRoLmltdWwoamUsTnQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxt'@;
put 'bil8MCkrTWF0aC5pbXVsKFdlLE50KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLG1uKXwwKSsobmU+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFRlLGZ0KSxuZT0obmU9TWF0aC5pbXVsKFRlLGZuKSkrTWF0aC5pbXVsKHFlLGZ0KXww'@;
put 'LGRlPU1hdGguaW11bChxZSxmbiksSj1KK01hdGguaW11bChQZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLFh0KXwwLEo9SitNYXRoLmltdWwoWWUsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxt'@;
put 'bil8MCkrTWF0aC5pbXVsKEplLE50KXwwLGRlPWRlK01hdGguaW11bChKZSxtbil8MDt2YXIgSHI9KEZlKyhKPUorTWF0aC5pbXVsKGplLEl0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRl'@;
put 'K01hdGguaW11bChXZSxKdCl8MCkrKG5lPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2MyxKPU1hdGguaW11bChVZSxmdCksbmU9KG5lPU1hdGguaW11bChVZSxmbikpK01hdGguaW11bChodCxmdCl8MCxkZT1NYXRoLmltdWwoaHQsZm4pLEo9SitNYXRoLmltdWwoVGUsd3QpfDAs'@;
put 'bmU9KG5lPW5lK01hdGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLGRlPWRlK01hdGguaW11bChxZSxYdCl8MCxKPUorTWF0aC5pbXVsKFBlLE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCxkZT1kZStNYXRoLmltdWwoYmUs'@;
put 'bW4pfDAsSj1KK01hdGguaW11bChZZSxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKEplLEp0KXwwO3ZhciBxaT0oRmUrKEo9SitNYXRoLmltdWwoamUscHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGgu'@;
put 'aW11bChqZSxZdCl8MCkrTWF0aC5pbXVsKFdlLHB0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLFl0KXwwKSsobmU+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKERlLGZ0KSxuZT0obmU9TWF0aC5pbXVsKERlLGZuKSkrTWF0aC5pbXVs'@;
put 'KHplLGZ0KXwwLGRlPU1hdGguaW11bCh6ZSxmbiksSj1KK01hdGguaW11bChVZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LFh0KXwwLEo9SitNYXRoLmltdWwoVGUsTnQpfDAsbmU9KG5lPW5lK01hdGgu'@;
put 'aW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLGRlPWRlK01hdGguaW11bChxZSxtbil8MCxKPUorTWF0aC5pbXVsKFBlLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsSnQpfDApK01hdGguaW11bChiZSxJdCl8MCxkZT1kZStNYXRoLmltdWwoYmUsSnQpfDAsSj1KK01hdGgu'@;
put 'aW11bChZZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoSmUscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKEplLFl0KXwwO3ZhciBKaT0oRmUrKEo9SitNYXRoLmltdWwoamUsenQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSx5bil8MCkr'@;
put 'TWF0aC5pbXVsKFdlLHp0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLHluKXwwKSsobmU+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKHV0LGZ0KSxuZT0obmU9TWF0aC5pbXVsKHV0LGZuKSkrTWF0aC5pbXVsKE10LGZ0KXwwLGRlPU1h'@;
put 'dGguaW11bChNdCxmbiksSj1KK01hdGguaW11bChEZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLFh0KXwwLEo9SitNYXRoLmltdWwoVWUsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxtbil8MCkr'@;
put 'TWF0aC5pbXVsKGh0LE50KXwwLGRlPWRlK01hdGguaW11bChodCxtbil8MCxKPUorTWF0aC5pbXVsKFRlLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCxkZT1kZStNYXRoLmltdWwocWUsSnQpfDAsSj1KK01hdGguaW11bChQZSxwdCl8MCxu'@;
put 'ZT0obmU9bmUrTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLFl0KXwwLEo9SitNYXRoLmltdWwoWWUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKEplLHp0KXwwLGRlPWRlK01hdGguaW11bChKZSx5'@;
put 'bil8MDt2YXIgYW89KEZlKyhKPUorTWF0aC5pbXVsKGplLHNuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxCbil8MCkrKG5lPj4+MTMpfDApKyhhbz4+PjI2KXww'@;
put 'LGFvJj02NzEwODg2MyxKPU1hdGguaW11bChQdCxmdCksbmU9KG5lPU1hdGguaW11bChQdCxmbikpK01hdGguaW11bChvbixmdCl8MCxkZT1NYXRoLmltdWwob24sZm4pLEo9SitNYXRoLmltdWwodXQsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0'@;
put 'KXwwLGRlPWRlK01hdGguaW11bChNdCxYdCl8MCxKPUorTWF0aC5pbXVsKERlLE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCxkZT1kZStNYXRoLmltdWwoemUsbW4pfDAsSj1KK01hdGguaW11bChVZSxJdCl8MCxuZT0obmU9bmUrTWF0aC5p'@;
put 'bXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LEp0KXwwLEo9SitNYXRoLmltdWwoVGUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLGRlPWRlK01hdGguaW11bChxZSxZdCl8MCxKPUorTWF0aC5p'@;
put 'bXVsKFBlLHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCxkZT1kZStNYXRoLmltdWwoYmUseW4pfDAsSj1KK01hdGguaW11bChZZSxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsZGU9ZGUr'@;
put 'TWF0aC5pbXVsKEplLEJuKXwwO3ZhciBybz0oRmUrKEo9SitNYXRoLmltdWwoamUsJHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxQbil8MCkrTWF0aC5pbXVsKFdlLCR0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLFBuKXwwKSsobmU+Pj4xMyl8'@;
put 'MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFV0LGZ0KSxuZT0obmU9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLGRlPU1hdGguaW11bChibixmbiksSj1KK01hdGguaW11bChQdCx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LFh0KXwwKStN'@;
put 'YXRoLmltdWwob24sd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLFh0KXwwLEo9SitNYXRoLmltdWwodXQsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKE10LE50KXwwLGRlPWRlK01hdGguaW11bChNdCxtbil8MCxKPUorTWF0aC5pbXVsKERlLEl0KXwwLG5l'@;
put 'PShuZT1uZStNYXRoLmltdWwoRGUsSnQpfDApK01hdGguaW11bCh6ZSxJdCl8MCxkZT1kZStNYXRoLmltdWwoemUsSnQpfDAsSj1KK01hdGguaW11bChVZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LFl0'@;
put 'KXwwLEo9SitNYXRoLmltdWwoVGUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLGRlPWRlK01hdGguaW11bChxZSx5bil8MCxKPUorTWF0aC5pbXVsKFBlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsQm4pfDApK01hdGguaW11bChi'@;
put 'ZSxzbil8MCxkZT1kZStNYXRoLmltdWwoYmUsQm4pfDAsSj1KK01hdGguaW11bChZZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLFBuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKEplLFBuKXwwO3ZhciBpbz0oRmUrKEo9SitNYXRoLmltdWwoamUsbG4pfDAp'@;
put 'fDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLGpuKXwwKSsobmU+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLGZ0KSxuZT0obmU9'@;
put 'TWF0aC5pbXVsKGVuLGZuKSkrTWF0aC5pbXVsKCRuLGZ0KXwwLGRlPU1hdGguaW11bCgkbixmbiksSj1KK01hdGguaW11bChVdCx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LFh0KXwwKStNYXRoLmltdWwoYm4sd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLFh0KXwwLEo9SitNYXRoLmlt'@;
put 'dWwoUHQsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLGRlPWRlK01hdGguaW11bChvbixtbil8MCxKPUorTWF0aC5pbXVsKHV0LEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsSnQpfDApK01hdGguaW11bChNdCxJdCl8MCxkZT1kZStN'@;
put 'YXRoLmltdWwoTXQsSnQpfDAsSj1KK01hdGguaW11bChEZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLFl0KXwwLEo9SitNYXRoLmltdWwoVWUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSx5bil8'@;
put 'MCkrTWF0aC5pbXVsKGh0LHp0KXwwLGRlPWRlK01hdGguaW11bChodCx5bil8MCxKPUorTWF0aC5pbXVsKFRlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChxZSxzbil8MCxkZT1kZStNYXRoLmltdWwocWUsQm4pfDAsSj1KK01hdGguaW11bChQZSwkdCl8'@;
put 'MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLFBuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLFBuKXwwLEo9SitNYXRoLmltdWwoWWUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEplLGxuKXwwLGRlPWRlK01hdGguaW11bChK'@;
put 'ZSxqbil8MDt2YXIgR2k9KEZlKyhKPUorTWF0aC5pbXVsKGplLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUseHIpfDApK01hdGguaW11bChXZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSx4cil8MCkrKG5lPj4+MTMpfDApKyhHaT4+PjI2'@;
put 'KXwwLEdpJj02NzEwODg2MyxKPU1hdGguaW11bChlbix3dCksbmU9KG5lPU1hdGguaW11bChlbixYdCkpK01hdGguaW11bCgkbix3dCl8MCxkZT1NYXRoLmltdWwoJG4sWHQpLEo9SitNYXRoLmltdWwoVXQsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxtbil8MCkrTWF0aC5pbXVsKGJu'@;
put 'LE50KXwwLGRlPWRlK01hdGguaW11bChibixtbil8MCxKPUorTWF0aC5pbXVsKFB0LEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsSnQpfDApK01hdGguaW11bChvbixJdCl8MCxkZT1kZStNYXRoLmltdWwob24sSnQpfDAsSj1KK01hdGguaW11bCh1dCxwdCl8MCxuZT0obmU9bmUrTWF0'@;
put 'aC5pbXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LFl0KXwwLEo9SitNYXRoLmltdWwoRGUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLGRlPWRlK01hdGguaW11bCh6ZSx5bil8MCxKPUorTWF0'@;
put 'aC5pbXVsKFVlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCxkZT1kZStNYXRoLmltdWwoaHQsQm4pfDAsSj1KK01hdGguaW11bChUZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLFBuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsZGU9'@;
put 'ZGUrTWF0aC5pbXVsKHFlLFBuKXwwLEo9SitNYXRoLmltdWwoUGUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwLGRlPWRlK01hdGguaW11bChiZSxqbil8MDt2YXIgaG89KEZlKyhKPUorTWF0aC5pbXVsKFllLGdpKXwwKXwwKSsoKDgxOTEm'@;
put 'KG5lPShuZT1uZStNYXRoLmltdWwoWWUseHIpfDApK01hdGguaW11bChKZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChKZSx4cil8MCkrKG5lPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxKPU1hdGguaW11bChlbixOdCksbmU9KG5lPU1hdGguaW11bChl'@;
put 'bixtbikpK01hdGguaW11bCgkbixOdCl8MCxkZT1NYXRoLmltdWwoJG4sbW4pLEo9SitNYXRoLmltdWwoVXQsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxKdCl8MCkrTWF0aC5pbXVsKGJuLEl0KXwwLGRlPWRlK01hdGguaW11bChibixKdCl8MCxKPUorTWF0aC5pbXVsKFB0LHB0KXww'@;
put 'LG5lPShuZT1uZStNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCxkZT1kZStNYXRoLmltdWwob24sWXQpfDAsSj1KK01hdGguaW11bCh1dCx6dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10'@;
put 'LHluKXwwLEo9SitNYXRoLmltdWwoRGUsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLGRlPWRlK01hdGguaW11bCh6ZSxCbil8MCxKPUorTWF0aC5pbXVsKFVlLCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsUG4pfDApK01hdGguaW11'@;
put 'bChodCwkdCl8MCxkZT1kZStNYXRoLmltdWwoaHQsUG4pfDAsSj1KK01hdGguaW11bChUZSxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLGpuKXwwO3ZhciB5cj0oRmUrKEo9SitNYXRoLmltdWwoUGUsZ2kp'@;
put 'fDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChQZSx4cil8MCkrTWF0aC5pbXVsKGJlLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKGJlLHhyKXwwKSsobmU+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLEl0KSxuZT0o'@;
put 'bmU9TWF0aC5pbXVsKGVuLEp0KSkrTWF0aC5pbXVsKCRuLEl0KXwwLGRlPU1hdGguaW11bCgkbixKdCksSj1KK01hdGguaW11bChVdCxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LFl0KXwwKStNYXRoLmltdWwoYm4scHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLFl0KXwwLEo9SitNYXRo'@;
put 'LmltdWwoUHQsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLGRlPWRlK01hdGguaW11bChvbix5bil8MCxKPUorTWF0aC5pbXVsKHV0LHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsQm4pfDApK01hdGguaW11bChNdCxzbil8MCxkZT1k'@;
put 'ZStNYXRoLmltdWwoTXQsQm4pfDAsSj1KK01hdGguaW11bChEZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLFBuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLFBuKXwwLEo9SitNYXRoLmltdWwoVWUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxq'@;
put 'bil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwLGRlPWRlK01hdGguaW11bChodCxqbil8MDt2YXIgUGk9KEZlKyhKPUorTWF0aC5pbXVsKFRlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoVGUseHIpfDApK01hdGguaW11bChxZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRl'@;
put 'K01hdGguaW11bChxZSx4cil8MCkrKG5lPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2MyxKPU1hdGguaW11bChlbixwdCksbmU9KG5lPU1hdGguaW11bChlbixZdCkpK01hdGguaW11bCgkbixwdCl8MCxkZT1NYXRoLmltdWwoJG4sWXQpLEo9SitNYXRoLmltdWwoVXQsenQpfDAs'@;
put 'bmU9KG5lPW5lK01hdGguaW11bChVdCx5bil8MCkrTWF0aC5pbXVsKGJuLHp0KXwwLGRlPWRlK01hdGguaW11bChibix5bil8MCxKPUorTWF0aC5pbXVsKFB0LHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixzbil8MCxkZT1kZStNYXRoLmltdWwob24s'@;
put 'Qm4pfDAsSj1KK01hdGguaW11bCh1dCwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LFBuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LFBuKXwwLEo9SitNYXRoLmltdWwoRGUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVs'@;
put 'KHplLGxuKXwwLGRlPWRlK01hdGguaW11bCh6ZSxqbil8MDt2YXIgTG89KEZlKyhKPUorTWF0aC5pbXVsKFVlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoVWUseHIpfDApK01hdGguaW11bChodCxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChodCx4'@;
put 'cil8MCkrKG5lPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2MyxKPU1hdGguaW11bChlbix6dCksbmU9KG5lPU1hdGguaW11bChlbix5bikpK01hdGguaW11bCgkbix6dCl8MCxkZT1NYXRoLmltdWwoJG4seW4pLEo9SitNYXRoLmltdWwoVXQsc24pfDAsbmU9KG5lPW5lK01hdGgu'@;
put 'aW11bChVdCxCbil8MCkrTWF0aC5pbXVsKGJuLHNuKXwwLGRlPWRlK01hdGguaW11bChibixCbil8MCxKPUorTWF0aC5pbXVsKFB0LCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsUG4pfDApK01hdGguaW11bChvbiwkdCl8MCxkZT1kZStNYXRoLmltdWwob24sUG4pfDAsSj1KK01hdGgu'@;
put 'aW11bCh1dCxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKE10LGpuKXwwO3ZhciBocz0oRmUrKEo9SitNYXRoLmltdWwoRGUsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChEZSx4cil8MCkr'@;
put 'TWF0aC5pbXVsKHplLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKHplLHhyKXwwKSsobmU+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLHNuKSxuZT0obmU9TWF0aC5pbXVsKGVuLEJuKSkrTWF0aC5pbXVsKCRuLHNuKXwwLGRlPU1h'@;
put 'dGguaW11bCgkbixCbiksSj1KK01hdGguaW11bChVdCwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LFBuKXwwKStNYXRoLmltdWwoYm4sJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLFBuKXwwLEo9SitNYXRoLmltdWwoUHQsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCxqbil8MCkr'@;
put 'TWF0aC5pbXVsKG9uLGxuKXwwLGRlPWRlK01hdGguaW11bChvbixqbil8MDt2YXIgcnM9KEZlKyhKPUorTWF0aC5pbXVsKHV0LGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwodXQseHIpfDApK01hdGguaW11bChNdCxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGgu'@;
put 'aW11bChNdCx4cil8MCkrKG5lPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxKPU1hdGguaW11bChlbiwkdCksbmU9KG5lPU1hdGguaW11bChlbixQbikpK01hdGguaW11bCgkbiwkdCl8MCxkZT1NYXRoLmltdWwoJG4sUG4pLEo9SitNYXRoLmltdWwoVXQsbG4pfDAsbmU9KG5l'@;
put 'PW5lK01hdGguaW11bChVdCxqbil8MCkrTWF0aC5pbXVsKGJuLGxuKXwwLGRlPWRlK01hdGguaW11bChibixqbil8MDt2YXIgTGM9KEZlKyhKPUorTWF0aC5pbXVsKFB0LGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoUHQseHIpfDApK01hdGguaW11bChvbixnaSl8MCkp'@;
put 'PDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChvbix4cil8MCkrKG5lPj4+MTMpfDApKyhMYz4+PjI2KXwwLExjJj02NzEwODg2MyxKPU1hdGguaW11bChlbixsbiksbmU9KG5lPU1hdGguaW11bChlbixqbikpK01hdGguaW11bCgkbixsbil8MCxkZT1NYXRoLmltdWwoJG4sam4pO3ZhciB1'@;
put 'bD0oRmUrKEo9SitNYXRoLmltdWwoVXQsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVdCx4cil8MCkrTWF0aC5pbXVsKGJuLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKGJuLHhyKXwwKSsobmU+Pj4xMyl8MCkrKHVsPj4+MjYpfDAsdWwmPTY3MTA4'@;
put 'ODYzO3ZhciBSYz0oRmUrKEo9TWF0aC5pbXVsKGVuLGdpKSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKGVuLHhyKSkrTWF0aC5pbXVsKCRuLGdpKXwwKSk8PDEzKXwwO3JldHVybiBGZT0oKGRlPU1hdGguaW11bCgkbix4cikpKyhuZT4+PjEzKXwwKSsoUmM+Pj4yNil8MCxSYyY9Njcx'@;
put 'MDg4NjMsTGVbMF09VWksTGVbMV09S3IsTGVbMl09bm8sTGVbM109SHIsTGVbNF09cWksTGVbNV09SmksTGVbNl09YW8sTGVbN109cm8sTGVbOF09aW8sTGVbOV09R2ksTGVbMTBdPWhvLExlWzExXT15cixMZVsxMl09UGksTGVbMTNdPUxvLExlWzE0XT1ocyxMZVsxNV09cnMsTGVbMTZdPUxj'@;
put 'LExlWzE3XT11bCxMZVsxOF09UmMsMCE9PUZlJiYoTGVbMTldPUZlLHcubGVuZ3RoKyspLHd9O2Z1bmN0aW9uIGhlKHYscCx3KXt3Lm5lZ2F0aXZlPXAubmVnYXRpdmVedi5uZWdhdGl2ZSx3Lmxlbmd0aD12Lmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIEo9MCxuZT0wLGRlPTA7ZGU8dy5sZW5n'@;
put 'dGgtMTtkZSsrKXt2YXIgZmU9bmU7bmU9MDtmb3IodmFyIHhlPTY3MTA4ODYzJkosTGU9TWF0aC5taW4oZGUscC5sZW5ndGgtMSksRmU9TWF0aC5tYXgoMCxkZS12Lmxlbmd0aCsxKTtGZTw9TGU7RmUrKyl7dmFyIGplPSgwfHYud29yZHNbZGUtRmVdKSooMHxwLndvcmRzW0ZlXSksV2U9Njcx'@;
put 'MDg4NjMmamU7eGU9NjcxMDg4NjMmKFdlPVdlK3hlfDApLG5lKz0oZmU9KGZlPWZlKyhqZS82NzEwODg2NHwwKXwwKSsoV2U+Pj4yNil8MCk+Pj4yNixmZSY9NjcxMDg4NjN9dy53b3Jkc1tkZV09eGUsSj1mZSxmZT1uZX1yZXR1cm4gMCE9PUo/dy53b3Jkc1tkZV09Sjp3Lmxlbmd0aC0tLHcu'@;
put 'X3N0cmlwKCl9ZnVuY3Rpb24gdWUodixwLHcpe3JldHVybiBoZSh2LHAsdyl9ZnVuY3Rpb24gY2UodixwKXt0aGlzLng9dix0aGlzLnk9cH1NYXRoLmltdWx8fChzZT1vZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odixwKXt2YXIgdz10aGlzLmxlbmd0aCt2Lmxlbmd0aDtyZXR1cm4g'@;
put 'MTA9PT10aGlzLmxlbmd0aCYmMTA9PT12Lmxlbmd0aD9zZSh0aGlzLHYscCk6dzw2Mz9vZSh0aGlzLHYscCk6dzwxMDI0P2hlKHRoaXMsdixwKTp1ZSh0aGlzLHYscCl9LGNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHYpe2Zvcih2YXIgcD1uZXcgQXJyYXkodiksdz1FLnByb3RvdHlw'@;
put 'ZS5fY291bnRCaXRzKHYpLTEsSj0wO0o8djtKKyspcFtKXT10aGlzLnJldkJpbihKLHcsdik7cmV0dXJuIHB9LGNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odixwLHcpe2lmKDA9PT12fHx2PT09dy0xKXJldHVybiB2O2Zvcih2YXIgSj0wLG5lPTA7bmU8cDtuZSsrKUp8PSgxJnYpPDxw'@;
put 'LW5lLTEsdj4+PTE7cmV0dXJuIEp9LGNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHYscCx3LEosbmUsZGUpe2Zvcih2YXIgZmU9MDtmZTxkZTtmZSsrKUpbZmVdPXBbdltmZV1dLG5lW2ZlXT13W3ZbZmVdXX0sY2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih2LHAsdyxKLG5l'@;
put 'LGRlKXt0aGlzLnBlcm11dGUoZGUsdixwLHcsSixuZSk7Zm9yKHZhciBmZT0xO2ZlPG5lO2ZlPDw9MSlmb3IodmFyIHhlPWZlPDwxLExlPU1hdGguY29zKDIqTWF0aC5QSS94ZSksRmU9TWF0aC5zaW4oMipNYXRoLlBJL3hlKSxPZT0wO09lPG5lO09lKz14ZSlmb3IodmFyIGplPUxlLFdlPUZl'@;
put 'LEtlPTA7S2U8ZmU7S2UrKyl7dmFyIFllPXdbT2UrS2VdLEplPUpbT2UrS2VdLGx0PXdbT2UrS2UrZmVdLFBlPUpbT2UrS2UrZmVdLGJlPWplKmx0LVdlKlBlO1BlPWplKlBlK1dlKmx0LHdbT2UrS2VdPVllKyhsdD1iZSksSltPZStLZV09SmUrUGUsd1tPZStLZStmZV09WWUtbHQsSltPZStL'@;
put 'ZStmZV09SmUtUGUsS2UhPT14ZSYmKGJlPUxlKmplLUZlKldlLFdlPUxlKldlK0ZlKmplLGplPWJlKX19LGNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih2LHApe3ZhciB3PTF8TWF0aC5tYXgocCx2KSxKPTEmdyxuZT0wO2Zvcih3PXcvMnwwO3c7dz4+Pj0xKW5lKys7cmV0dXJu'@;
put 'IDE8PG5lKzErSn0sY2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih2LHAsdyl7aWYoISh3PD0xKSlmb3IodmFyIEo9MDtKPHcvMjtKKyspe3ZhciBuZT12W0pdO3ZbSl09dlt3LUotMV0sdlt3LUotMV09bmUsbmU9cFtKXSxwW0pdPS1wW3ctSi0xXSxwW3ctSi0xXT0tbmV9fSxjZS5w'@;
put 'cm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHYscCl7Zm9yKHZhciB3PTAsSj0wO0o8cC8yO0orKyl7dmFyIG5lPTgxOTIqTWF0aC5yb3VuZCh2WzIqSisxXS9wKStNYXRoLnJvdW5kKHZbMipKXS9wKSt3O3ZbSl09NjcxMDg4NjMmbmUsdz1uZTw2NzEwODg2ND8wOm5lLzY3MTA4ODY0'@;
put 'fDB9cmV0dXJuIHZ9LGNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHYscCx3LEope2Zvcih2YXIgbmU9MCxkZT0wO2RlPHA7ZGUrKyl3WzIqZGVdPTgxOTEmKG5lKz0wfHZbZGVdKSx3WzIqZGUrMV09ODE5MSYobmU+Pj49MTMpLG5lPj4+PTEzO2ZvcihkZT0yKnA7ZGU8SjsrK2Rl'@;
put 'KXdbZGVdPTA7SSgwPT09bmUpLEkoMD09KC04MTkyJm5lKSl9LGNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHYpe2Zvcih2YXIgcD1uZXcgQXJyYXkodiksdz0wO3c8djt3KyspcFt3XT0wO3JldHVybiBwfSxjZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbih2LHAsdyl7dmFyIEo9Mip0aGlz'@;
put 'Lmd1ZXNzTGVuMTNiKHYubGVuZ3RoLHAubGVuZ3RoKSxuZT10aGlzLm1ha2VSQlQoSiksZGU9dGhpcy5zdHViKEopLGZlPW5ldyBBcnJheShKKSx4ZT1uZXcgQXJyYXkoSiksTGU9bmV3IEFycmF5KEopLEZlPW5ldyBBcnJheShKKSxPZT1uZXcgQXJyYXkoSiksamU9bmV3IEFycmF5KEopLFdl'@;
put 'PXcud29yZHM7V2UubGVuZ3RoPUosdGhpcy5jb252ZXJ0MTNiKHYud29yZHMsdi5sZW5ndGgsZmUsSiksdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsRmUsSiksdGhpcy50cmFuc2Zvcm0oZmUsZGUseGUsTGUsSixuZSksdGhpcy50cmFuc2Zvcm0oRmUsZGUsT2UsamUsSixuZSk7'@;
put 'Zm9yKHZhciBLZT0wO0tlPEo7S2UrKyl7dmFyIFllPXhlW0tlXSpPZVtLZV0tTGVbS2VdKmplW0tlXTtMZVtLZV09eGVbS2VdKmplW0tlXStMZVtLZV0qT2VbS2VdLHhlW0tlXT1ZZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoeGUsTGUsSiksdGhpcy50cmFuc2Zvcm0oeGUsTGUsV2UsZGUsSixu'@;
put 'ZSksdGhpcy5jb25qdWdhdGUoV2UsZGUsSiksdGhpcy5ub3JtYWxpemUxM2IoV2UsSiksdy5uZWdhdGl2ZT12Lm5lZ2F0aXZlXnAubmVnYXRpdmUsdy5sZW5ndGg9di5sZW5ndGgrcC5sZW5ndGgsdy5fc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHYpe3ZhciBwPW5ldyBFKG51'@;
put 'bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt2Lmxlbmd0aCksdGhpcy5tdWxUbyh2LHApfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHYpe3ZhciBwPW5ldyBFKG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt2Lmxlbmd0aCksdWUo'@;
put 'dGhpcyx2LHApfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odix0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odil7dmFyIHA9djwwO3AmJih2PS12KSxJKCJudW1iZXIiPT10eXBlb2YgdiksSSh2PDY3MTA4ODY0KTtmb3Io'@;
put 'dmFyIHc9MCxKPTA7Sjx0aGlzLmxlbmd0aDtKKyspe3ZhciBuZT0oMHx0aGlzLndvcmRzW0pdKSp2LGRlPSg2NzEwODg2MyZuZSkrKDY3MTA4ODYzJncpO3c+Pj0yNix3Kz1uZS82NzEwODg2NHwwLHcrPWRlPj4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZkZX1yZXR1cm4gMCE9PXcmJih0'@;
put 'aGlzLndvcmRzW0pdPXcsdGhpcy5sZW5ndGgrKykscD90aGlzLmluZWcoKTp0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odil9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90'@;
put 'b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHYpe3ZhciBwPWZ1bmN0aW9uKGRlKXtmb3IodmFyIGZlPW5ldyBBcnJheShkZS5iaXRMZW5ndGgoKSkseGU9MDt4ZTxmZS5sZW5ndGg7eGUrKylmZVt4'@;
put 'ZV09ZGUud29yZHNbeGUvMjZ8MF0+Pj54ZSUyNiYxO3JldHVybiBmZX0odik7aWYoMD09PXAubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIHc9dGhpcyxKPTA7SjxwLmxlbmd0aCYmMD09PXBbSl07SisrLHc9dy5zcXIoKSk7aWYoKytKPHAubGVuZ3RoKWZvcih2YXIgbmU9dy5zcXIo'@;
put 'KTtKPHAubGVuZ3RoO0orKyxuZT1uZS5zcXIoKSkwIT09cFtKXSYmKHc9dy5tdWwobmUpKTtyZXR1cm4gd30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHYpe0koIm51bWJlciI9PXR5cGVvZiB2JiZ2Pj0wKTt2YXIgcCx3PXYlMjYsSj0odi13KS8yNixuZT02NzEwODg2Mz4+PjI2LXc8'@;
put 'PDI2LXc7aWYoMCE9PXcpe3ZhciBkZT0wO2ZvcihwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciBmZT10aGlzLndvcmRzW3BdJm5lO3RoaXMud29yZHNbcF09KDB8dGhpcy53b3Jkc1twXSktZmU8PHd8ZGUsZGU9ZmU+Pj4yNi13fWRlJiYodGhpcy53b3Jkc1twXT1kZSx0aGlzLmxlbmd0aCsr'@;
put 'KX1pZigwIT09Sil7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wO3AtLSl0aGlzLndvcmRzW3ArSl09dGhpcy53b3Jkc1twXTtmb3IocD0wO3A8SjtwKyspdGhpcy53b3Jkc1twXT0wO3RoaXMubGVuZ3RoKz1KfXJldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlv'@;
put 'bih2KXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odil9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih2LHAsdyl7dmFyIEo7SSgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApLEo9cD8ocC1wJTI2KS8yNjowO3ZhciBuZT12JTI2LGRlPU1hdGgubWluKCh2LW5l'@;
put 'KS8yNix0aGlzLmxlbmd0aCksZmU9NjcxMDg4NjNeNjcxMDg4NjM+Pj5uZTw8bmUseGU9dztpZihKLT1kZSxKPU1hdGgubWF4KDAsSikseGUpe2Zvcih2YXIgTGU9MDtMZTxkZTtMZSsrKXhlLndvcmRzW0xlXT10aGlzLndvcmRzW0xlXTt4ZS5sZW5ndGg9ZGV9aWYoMCE9PWRlKWlmKHRoaXMu'@;
put 'bGVuZ3RoPmRlKWZvcih0aGlzLmxlbmd0aC09ZGUsTGU9MDtMZTx0aGlzLmxlbmd0aDtMZSsrKXRoaXMud29yZHNbTGVdPXRoaXMud29yZHNbTGUrZGVdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEZlPTA7Zm9yKExlPXRoaXMubGVuZ3RoLTE7TGU+PTAmJigwIT09'@;
put 'RmV8fExlPj1KKTtMZS0tKXt2YXIgT2U9MHx0aGlzLndvcmRzW0xlXTt0aGlzLndvcmRzW0xlXT1GZTw8MjYtbmV8T2U+Pj5uZSxGZT1PZSZmZX1yZXR1cm4geGUmJjAhPT1GZSYmKHhlLndvcmRzW3hlLmxlbmd0aCsrXT1GZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRo'@;
put 'aXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHYscCx3KXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odixwLHcpfSxFLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4o'@;
put 'dil9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odil9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlz'@;
put 'LmNsb25lKCkuaXVzaHJuKHYpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHA9diUyNix3PSh2LXApLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXd8fCEodGhpcy53b3Jkc1t3XSYxPDxwKSl9LEUucHJvdG90eXBlLmltYXNr'@;
put 'bj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHA9diUyNix3PSh2LXApLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9dz90aGlzOigwIT09cCYmdysr'@;
put 'LHRoaXMubGVuZ3RoPU1hdGgubWluKHcsdGhpcy5sZW5ndGgpLDAhPT1wJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwKSx0aGlzLl9zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5p'@;
put 'bWFza24odil9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHYpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgdiksSSh2PDY3MTA4ODY0KSx2PDA/dGhpcy5pc3Vibigtdik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9dj8odGhpcy53'@;
put 'b3Jkc1swXT12LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHYpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odil7dGhpcy53b3Jkc1swXSs9'@;
put 'djtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3BdPj02NzEwODg2NDtwKyspdGhpcy53b3Jkc1twXS09NjcxMDg4NjQscD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1twKzFdPTE6dGhpcy53b3Jkc1twKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRo'@;
put 'aXMubGVuZ3RoLHArMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odil7aWYoSSgibnVtYmVyIj09dHlwZW9mIHYpLEkodjw2NzEwODg2NCksdjwwKXJldHVybiB0aGlzLmlhZGRuKC12KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMu'@;
put 'aWFkZG4odiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09diwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGgmJnRoaXMu'@;
put 'd29yZHNbcF08MDtwKyspdGhpcy53b3Jkc1twXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1twKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odil9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24o'@;
put 'dil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih2KX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1'@;
put 'Ym11bD1mdW5jdGlvbih2LHAsdyl7dmFyIEosbmU7dGhpcy5fZXhwYW5kKHYubGVuZ3RoK3cpO3ZhciBmZT0wO2ZvcihKPTA7Sjx2Lmxlbmd0aDtKKyspe25lPSgwfHRoaXMud29yZHNbSit3XSkrZmU7dmFyIHhlPSgwfHYud29yZHNbSl0pKnA7ZmU9KChuZS09NjcxMDg4NjMmeGUpPj4yNikt'@;
put 'KHhlLzY3MTA4ODY0fDApLHRoaXMud29yZHNbSit3XT02NzEwODg2MyZuZX1mb3IoO0o8dGhpcy5sZW5ndGgtdztKKyspZmU9KG5lPSgwfHRoaXMud29yZHNbSit3XSkrZmUpPj4yNix0aGlzLndvcmRzW0ord109NjcxMDg4NjMmbmU7aWYoMD09PWZlKXJldHVybiB0aGlzLl9zdHJpcCgpO2Zv'@;
put 'cihJKC0xPT09ZmUpLGZlPTAsSj0wO0o8dGhpcy5sZW5ndGg7SisrKWZlPShuZT0tKDB8dGhpcy53b3Jkc1tKXSkrZmUpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJm5lO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rp'@;
put 'b24odixwKXt2YXIgdyxKPXRoaXMuY2xvbmUoKSxuZT12LGRlPTB8bmUud29yZHNbbmUubGVuZ3RoLTFdOzAhPSh3PTI2LXRoaXMuX2NvdW50Qml0cyhkZSkpJiYobmU9bmUudXNobG4odyksSi5pdXNobG4odyksZGU9MHxuZS53b3Jkc1tuZS5sZW5ndGgtMV0pO3ZhciBmZSx4ZT1KLmxlbmd0'@;
put 'aC1uZS5sZW5ndGg7aWYoIm1vZCIhPT1wKXsoZmU9bmV3IEUobnVsbCkpLmxlbmd0aD14ZSsxLGZlLndvcmRzPW5ldyBBcnJheShmZS5sZW5ndGgpO2Zvcih2YXIgTGU9MDtMZTxmZS5sZW5ndGg7TGUrKylmZS53b3Jkc1tMZV09MH12YXIgRmU9Si5jbG9uZSgpLl9pc2hsbnN1Ym11bChuZSwx'@;
put 'LHhlKTswPT09RmUubmVnYXRpdmUmJihKPUZlLGZlJiYoZmUud29yZHNbeGVdPTEpKTtmb3IodmFyIE9lPXhlLTE7T2U+PTA7T2UtLSl7dmFyIGplPTY3MTA4ODY0KigwfEoud29yZHNbbmUubGVuZ3RoK09lXSkrKDB8Si53b3Jkc1tuZS5sZW5ndGgrT2UtMV0pO2ZvcihqZT1NYXRoLm1pbihq'@;
put 'ZS9kZXwwLDY3MTA4ODYzKSxKLl9pc2hsbnN1Ym11bChuZSxqZSxPZSk7MCE9PUoubmVnYXRpdmU7KWplLS0sSi5uZWdhdGl2ZT0wLEouX2lzaGxuc3VibXVsKG5lLDEsT2UpLEouaXNaZXJvKCl8fChKLm5lZ2F0aXZlXj0xKTtmZSYmKGZlLndvcmRzW09lXT1qZSl9cmV0dXJuIGZlJiZmZS5f'@;
put 'c3RyaXAoKSxKLl9zdHJpcCgpLCJkaXYiIT09cCYmMCE9PXcmJkouaXVzaHJuKHcpLHtkaXY6ZmV8fG51bGwsbW9kOkp9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odixwLHcpe3JldHVybiBJKCF2LmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBF'@;
put 'KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXYubmVnYXRpdmU/KGRlPXRoaXMubmVnKCkuZGl2bW9kKHYscCksIm1vZCIhPT1wJiYoSj1kZS5kaXYubmVnKCkpLCJkaXYiIT09cCYmKG5lPWRlLm1vZC5uZWcoKSx3JiYwIT09bmUubmVnYXRpdmUmJm5lLmlhZGQodikpLHtkaXY6Sixtb2Q6'@;
put 'bmV9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXYubmVnYXRpdmU/KGRlPXRoaXMuZGl2bW9kKHYubmVnKCkscCksIm1vZCIhPT1wJiYoSj1kZS5kaXYubmVnKCkpLHtkaXY6Sixtb2Q6ZGUubW9kfSk6dGhpcy5uZWdhdGl2ZSZ2Lm5lZ2F0aXZlPyhkZT10aGlzLm5lZygpLmRpdm1vZCh2Lm5l'@;
put 'ZygpLHApLCJkaXYiIT09cCYmKG5lPWRlLm1vZC5uZWcoKSx3JiYwIT09bmUubmVnYXRpdmUmJm5lLmlzdWIodikpLHtkaXY6ZGUuZGl2LG1vZDpuZX0pOnYubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh2KTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT12Lmxlbmd0aD8iZGl2'@;
put 'Ij09PXA/e2Rpdjp0aGlzLmRpdm4odi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09cD97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kcm4odi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih2LndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2Rybih2LndvcmRzWzBdKSl9OnRoaXMu'@;
put 'X3dvcmREaXYodixwKTt2YXIgSixuZSxkZX0sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmRpdm1vZCh2LCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5kaXZtb2QodiwibW9kIiwhMSkubW9kfSxFLnByb3RvdHlw'@;
put 'ZS51bW9kPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmRpdm1vZCh2LCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHYpe3ZhciBwPXRoaXMuZGl2bW9kKHYpO2lmKHAubW9kLmlzWmVybygpKXJldHVybiBwLmRpdjt2YXIgdz0wIT09cC5kaXYubmVnYXRpdmU/'@;
put 'cC5tb2QuaXN1Yih2KTpwLm1vZCxKPXYudXNocm4oMSksbmU9di5hbmRsbigxKSxkZT13LmNtcChKKTtyZXR1cm4gZGU8MHx8MT09PW5lJiYwPT09ZGU/cC5kaXY6MCE9PXAuZGl2Lm5lZ2F0aXZlP3AuZGl2LmlzdWJuKDEpOnAuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2Rybj1mdW5j'@;
put 'dGlvbih2KXt2YXIgcD12PDA7cCYmKHY9LXYpLEkodjw9NjcxMDg4NjMpO2Zvcih2YXIgdz02NzEwODg2NCV2LEo9MCxuZT10aGlzLmxlbmd0aC0xO25lPj0wO25lLS0pSj0odypKKygwfHRoaXMud29yZHNbbmVdKSkldjtyZXR1cm4gcD8tSjpKfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9u'@;
put 'KHYpe3JldHVybiB0aGlzLm1vZHJuKHYpfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih2KXt2YXIgcD12PDA7cCYmKHY9LXYpLEkodjw9NjcxMDg4NjMpO2Zvcih2YXIgdz0wLEo9dGhpcy5sZW5ndGgtMTtKPj0wO0otLSl7dmFyIG5lPSgwfHRoaXMud29yZHNbSl0pKzY3MTA4ODY0Knc7'@;
put 'dGhpcy53b3Jkc1tKXT1uZS92fDAsdz1uZSV2fXJldHVybiB0aGlzLl9zdHJpcCgpLHA/dGhpcy5pbmVnKCk6dGhpc30sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHYpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHYpe0koMD09PXYu'@;
put 'bmVnYXRpdmUpLEkoIXYuaXNaZXJvKCkpO3ZhciBwPXRoaXMsdz12LmNsb25lKCk7cD0wIT09cC5uZWdhdGl2ZT9wLnVtb2Qodik6cC5jbG9uZSgpO2Zvcih2YXIgSj1uZXcgRSgxKSxuZT1uZXcgRSgwKSxkZT1uZXcgRSgwKSxmZT1uZXcgRSgxKSx4ZT0wO3AuaXNFdmVuKCkmJncuaXNFdmVu'@;
put 'KCk7KXAuaXVzaHJuKDEpLHcuaXVzaHJuKDEpLCsreGU7Zm9yKHZhciBMZT13LmNsb25lKCksRmU9cC5jbG9uZSgpOyFwLmlzWmVybygpOyl7Zm9yKHZhciBPZT0wLGplPTE7IShwLndvcmRzWzBdJmplKSYmT2U8MjY7KytPZSxqZTw8PTEpO2lmKE9lPjApZm9yKHAuaXVzaHJuKE9lKTtPZS0t'@;
put 'ID4wOykoSi5pc09kZCgpfHxuZS5pc09kZCgpKSYmKEouaWFkZChMZSksbmUuaXN1YihGZSkpLEouaXVzaHJuKDEpLG5lLml1c2hybigxKTtmb3IodmFyIFdlPTAsS2U9MTshKHcud29yZHNbMF0mS2UpJiZXZTwyNjsrK1dlLEtlPDw9MSk7aWYoV2U+MClmb3Iody5pdXNocm4oV2UpO1dlLS0g'@;
put 'PjA7KShkZS5pc09kZCgpfHxmZS5pc09kZCgpKSYmKGRlLmlhZGQoTGUpLGZlLmlzdWIoRmUpKSxkZS5pdXNocm4oMSksZmUuaXVzaHJuKDEpO3AuY21wKHcpPj0wPyhwLmlzdWIodyksSi5pc3ViKGRlKSxuZS5pc3ViKGZlKSk6KHcuaXN1YihwKSxkZS5pc3ViKEopLGZlLmlzdWIobmUpKX1y'@;
put 'ZXR1cm57YTpkZSxiOmZlLGdjZDp3Lml1c2hsbih4ZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odil7SSgwPT09di5uZWdhdGl2ZSksSSghdi5pc1plcm8oKSk7dmFyIHA9dGhpcyx3PXYuY2xvbmUoKTtwPTAhPT1wLm5lZ2F0aXZlP3AudW1vZCh2KTpwLmNsb25lKCk7Zm9yKHZh'@;
put 'ciBKLG5lPW5ldyBFKDEpLGRlPW5ldyBFKDApLGZlPXcuY2xvbmUoKTtwLmNtcG4oMSk+MCYmdy5jbXBuKDEpPjA7KXtmb3IodmFyIHhlPTAsTGU9MTshKHAud29yZHNbMF0mTGUpJiZ4ZTwyNjsrK3hlLExlPDw9MSk7aWYoeGU+MClmb3IocC5pdXNocm4oeGUpO3hlLS0gPjA7KW5lLmlzT2Rk'@;
put 'KCkmJm5lLmlhZGQoZmUpLG5lLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKHcud29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3Iody5pdXNocm4oRmUpO0ZlLS0gPjA7KWRlLmlzT2RkKCkmJmRlLmlhZGQoZmUpLGRlLml1c2hybigxKTtwLmNtcCh3KT49'@;
put 'MD8ocC5pc3ViKHcpLG5lLmlzdWIoZGUpKToody5pc3ViKHApLGRlLmlzdWIobmUpKX1yZXR1cm4oSj0wPT09cC5jbXBuKDEpP25lOmRlKS5jbXBuKDApPDAmJkouaWFkZCh2KSxKfSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdi5hYnMoKTtp'@;
put 'Zih2LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBwPXRoaXMuY2xvbmUoKSx3PXYuY2xvbmUoKTtwLm5lZ2F0aXZlPTAsdy5uZWdhdGl2ZT0wO2Zvcih2YXIgSj0wO3AuaXNFdmVuKCkmJncuaXNFdmVuKCk7SisrKXAuaXVzaHJuKDEpLHcuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtw'@;
put 'LmlzRXZlbigpOylwLml1c2hybigxKTtmb3IoO3cuaXNFdmVuKCk7KXcuaXVzaHJuKDEpO3ZhciBuZT1wLmNtcCh3KTtpZihuZTwwKXt2YXIgZGU9cDtwPXcsdz1kZX1lbHNlIGlmKDA9PT1uZXx8MD09PXcuY21wbigxKSlicmVhaztwLmlzdWIodyl9cmV0dXJuIHcuaXVzaGxuKEopfSxFLnBy'@;
put 'b3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmVnY2QodikuYS51bW9kKHYpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29y'@;
put 'ZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ2fSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2Ygdik7dmFyIHA9diUyNix3PSh2LXApLzI2LEo9MTw8cDtpZih0aGlzLmxlbmd0aDw9dylyZXR1'@;
put 'cm4gdGhpcy5fZXhwYW5kKHcrMSksdGhpcy53b3Jkc1t3XXw9Six0aGlzO2Zvcih2YXIgbmU9SixkZT13OzAhPT1uZSYmZGU8dGhpcy5sZW5ndGg7ZGUrKyl7dmFyIGZlPTB8dGhpcy53b3Jkc1tkZV07bmU9KGZlKz1uZSk+Pj4yNix0aGlzLndvcmRzW2RlXT1mZSY9NjcxMDg4NjN9cmV0dXJu'@;
put 'IDAhPT1uZSYmKHRoaXMud29yZHNbZGVdPW5lLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHYpe3ZhciBwLHc9djwwO2lm'@;
put 'KDAhPT10aGlzLm5lZ2F0aXZlJiYhdylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmdylyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpcD0xO2Vsc2V7dyYmKHY9LXYpLEkodjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEo9MHx0aGlzLndv'@;
put 'cmRzWzBdO3A9Sj09PXY/MDpKPHY/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcDpwfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT12Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09di5uZWdh'@;
put 'dGl2ZSlyZXR1cm4gMTt2YXIgcD10aGlzLnVjbXAodik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXA6cH0sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih2KXtpZih0aGlzLmxlbmd0aD52Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx2Lmxlbmd0aClyZXR1cm4tMTtmb3Io'@;
put 'dmFyIHA9MCx3PXRoaXMubGVuZ3RoLTE7dz49MDt3LS0pe3ZhciBKPTB8dGhpcy53b3Jkc1t3XSxuZT0wfHYud29yZHNbd107aWYoSiE9PW5lKXtKPG5lP3A9LTE6Sj5uZSYmKHA9MSk7YnJlYWt9fXJldHVybiBwfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odil7cmV0dXJuIDE9PT10aGlz'@;
put 'LmNtcG4odil9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHYpe3JldHVybiAxPT09dGhpcy5jbXAodil9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY21wbih2KT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcCh2KT49MH0s'@;
put 'RS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHYpe3JldHVybi0xPT09dGhpcy5jbXBuKHYpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbih2KXtyZXR1cm4tMT09PXRoaXMuY21wKHYpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcG4odik8PTB9LEUucHJvdG90'@;
put 'eXBlLmx0ZT1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbXAodik8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbih2KXtyZXR1cm4gMD09PXRoaXMuY21wbih2KX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odil7cmV0dXJuIDA9PT10aGlzLmNtcCh2KX0sRS5yZWQ9ZnVuY3Rpb24odil7'@;
put 'cmV0dXJuIG5ldyBDKHYpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih2KXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHYuY29u'@;
put 'dmVydFRvKHRoaXMpLl9mb3JjZVJlZCh2KX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJv'@;
put 'dG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5yZWQ9dix0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih2KXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh2KX0s'@;
put 'RS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZElB'@;
put 'ZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx2KX0s'@;
put 'RS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVk'@;
put 'U2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlz'@;
put 'LHYpLHRoaXMucmVkLm11bCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx2KSx0aGlzLnJlZC5pbXVsKHRoaXMsdil9LEUu'@;
put 'cHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy'@;
put 'aWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5w'@;
put 'cm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkJiYhdi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdil9O3ZhciBHPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6'@;
put 'bnVsbH07ZnVuY3Rpb24gYih2LHApe3RoaXMubmFtZT12LHRoaXMucD1uZXcgRShwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gRCgpe2IuY2FsbCh0'@;
put 'aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBIKCl7Yi5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAw'@;
put 'MDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIE4oKXtiLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gZygpe2IuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBDKHYpe2lmKCJzdHJpbmciPT10eXBlb2Ygdil7dmFyIHA9RS5fcHJpbWUodik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBJKHYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRl'@;
put 'ciB0aGFuIDEiKSx0aGlzLm09dix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gUyh2KXtDLmNhbGwodGhpcyx2KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hs'@;
put 'bih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0'@;
put 'aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWIucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdj1uZXcgRShudWxsKTtyZXR1cm4gdi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHZ9LGIucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odil7dmFyIHAs'@;
put 'dz12O2Rve3RoaXMuc3BsaXQodyx0aGlzLnRtcCkscD0odz0odz10aGlzLmltdWxLKHcpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUocD50aGlzLm4pO3ZhciBKPXA8dGhpcy5uPy0xOncudWNtcCh0aGlzLnApO3JldHVybiAwPT09Sj8ody53b3Jkc1swXT0wLHcubGVuZ3Ro'@;
put 'PTEpOko+MD93LmlzdWIodGhpcy5wKTp2b2lkIDAhPT13LnN0cmlwP3cuc3RyaXAoKTp3Ll9zdHJpcCgpLHd9LGIucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHYscCl7di5pdXNocm4odGhpcy5uLDAscCl9LGIucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHYpe3JldHVybiB2LmltdWwodGhp'@;
put 'cy5rKX0sayhELGIpLEQucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHYscCl7Zm9yKHZhciB3PTQxOTQzMDMsSj1NYXRoLm1pbih2Lmxlbmd0aCw5KSxuZT0wO25lPEo7bmUrKylwLndvcmRzW25lXT12LndvcmRzW25lXTtpZihwLmxlbmd0aD1KLHYubGVuZ3RoPD05KXJldHVybiB2LndvcmRz'@;
put 'WzBdPTAsdm9pZCh2Lmxlbmd0aD0xKTt2YXIgZGU9di53b3Jkc1s5XTtmb3IocC53b3Jkc1twLmxlbmd0aCsrXT1kZSZ3LG5lPTEwO25lPHYubGVuZ3RoO25lKyspe3ZhciBmZT0wfHYud29yZHNbbmVdO3Yud29yZHNbbmUtMTBdPShmZSZ3KTw8NHxkZT4+PjIyLGRlPWZlfXYud29yZHNbbmUt'@;
put 'MTBdPWRlPj4+PTIyLHYubGVuZ3RoLT0wPT09ZGUmJnYubGVuZ3RoPjEwPzEwOjl9LEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHYpe3Yud29yZHNbdi5sZW5ndGhdPTAsdi53b3Jkc1t2Lmxlbmd0aCsxXT0wLHYubGVuZ3RoKz0yO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl7'@;
put 'dmFyIEo9MHx2LndvcmRzW3ddO3Yud29yZHNbd109NjcxMDg4NjMmKHArPTk3NypKKSxwPTY0KkorKHAvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT12LndvcmRzW3YubGVuZ3RoLTFdJiYodi5sZW5ndGgtLSwwPT09di53b3Jkc1t2Lmxlbmd0aC0xXSYmdi5sZW5ndGgtLSksdn0sayhILGIpLGso'@;
put 'TixiKSxrKGcsYiksZy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odil7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXt2YXIgSj0xOSooMHx2LndvcmRzW3ddKStwLG5lPTY3MTA4ODYzJko7Sj4+Pj0yNix2LndvcmRzW3ddPW5lLHA9Sn1yZXR1cm4gMCE9PXAmJih2LndvcmRzW3Yu'@;
put 'bGVuZ3RoKytdPXApLHZ9LEUuX3ByaW1lPWZ1bmN0aW9uKHYpe2lmKEdbdl0pcmV0dXJuIEdbdl07dmFyIHA7aWYoImsyNTYiPT09dilwPW5ldyBEO2Vsc2UgaWYoInAyMjQiPT09dilwPW5ldyBIO2Vsc2UgaWYoInAxOTIiPT09dilwPW5ldyBOO2Vsc2V7aWYoInAyNTUxOSIhPT12KXRocm93'@;
put 'IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3YpO3A9bmV3IGd9cmV0dXJuIEdbdl09cCxwfSxDLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih2KXtJKDA9PT12Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkodi5yZWQsInJlZCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcmVkIG51bWJlcnMiKX0sQy5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odixwKXtJKDA9PSh2Lm5lZ2F0aXZlfHAubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkodi5yZWQmJnYucmVkPT09cC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKX0sQy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodikuX2ZvcmNlUmVkKHRoaXMpOihYKHYsdi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSx2KX0sQy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHYpe3Jl'@;
put 'dHVybiB2LmlzWmVybygpP3YuY2xvbmUoKTp0aGlzLm0uc3ViKHYpLl9mb3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHYscCl7dGhpcy5fdmVyaWZ5Mih2LHApO3ZhciB3PXYuYWRkKHApO3JldHVybiB3LmNtcCh0aGlzLm0pPj0wJiZ3LmlzdWIodGhpcy5tKSx3Ll9m'@;
put 'b3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgdz12LmlhZGQocCk7cmV0dXJuIHcuY21wKHRoaXMubSk+PTAmJncuaXN1Yih0aGlzLm0pLHd9LEMucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih2LHApe3RoaXMuX3Zlcmlm'@;
put 'eTIodixwKTt2YXIgdz12LnN1YihwKTtyZXR1cm4gdy5jbXBuKDApPDAmJncuaWFkZCh0aGlzLm0pLHcuX2ZvcmNlUmVkKHRoaXMpfSxDLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHYscCl7dGhpcy5fdmVyaWZ5Mih2LHApO3ZhciB3PXYuaXN1YihwKTtyZXR1cm4gdy5jbXBuKDApPDAmJncu'@;
put 'aWFkZCh0aGlzLm0pLHd9LEMucHJvdG90eXBlLnNobD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkxKHYpLHRoaXMuaW1vZCh2LnVzaGxuKHApKX0sQy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkyKHYscCksdGhpcy5pbW9kKHYuaW11'@;
put 'bChwKSl9LEMucHJvdG90eXBlLm11bD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkyKHYscCksdGhpcy5pbW9kKHYubXVsKHApKX0sQy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5pbXVsKHYsdi5jbG9uZSgpKX0sQy5wcm90b3R5cGUuc3FyPWZ1bmN0'@;
put 'aW9uKHYpe3JldHVybiB0aGlzLm11bCh2LHYpfSxDLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHYpe2lmKHYuaXNaZXJvKCkpcmV0dXJuIHYuY2xvbmUoKTt2YXIgcD10aGlzLm0uYW5kbG4oMyk7aWYoSShwJTI9PTEpLDM9PT1wKXt2YXIgdz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4o'@;
put 'Mik7cmV0dXJuIHRoaXMucG93KHYsdyl9Zm9yKHZhciBKPXRoaXMubS5zdWJuKDEpLG5lPTA7IUouaXNaZXJvKCkmJjA9PT1KLmFuZGxuKDEpOyluZSsrLEouaXVzaHJuKDEpO0koIUouaXNaZXJvKCkpO3ZhciBkZT1uZXcgRSgxKS50b1JlZCh0aGlzKSxmZT1kZS5yZWROZWcoKSx4ZT10aGlz'@;
put 'Lm0uc3VibigxKS5pdXNocm4oMSksTGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihMZT1uZXcgRSgyKkxlKkxlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coTGUseGUpLmNtcChmZSk7KUxlLnJlZElBZGQoZmUpO2Zvcih2YXIgRmU9dGhpcy5wb3coTGUsSiksT2U9dGhpcy5wb3codixKLmFk'@;
put 'ZG4oMSkuaXVzaHJuKDEpKSxqZT10aGlzLnBvdyh2LEopLFdlPW5lOzAhPT1qZS5jbXAoZGUpOyl7Zm9yKHZhciBLZT1qZSxZZT0wOzAhPT1LZS5jbXAoZGUpO1llKyspS2U9S2UucmVkU3FyKCk7SShZZTxXZSk7dmFyIEplPXRoaXMucG93KEZlLG5ldyBFKDEpLml1c2hsbihXZS1ZZS0xKSk7'@;
put 'T2U9T2UucmVkTXVsKEplKSxGZT1KZS5yZWRTcXIoKSxqZT1qZS5yZWRNdWwoRmUpLFdlPVllfXJldHVybiBPZX0sQy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih2KXt2YXIgcD12Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09cC5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChw'@;
put 'KS5yZWROZWcoKSk6dGhpcy5pbW9kKHApfSxDLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odixwKXtpZihwLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09cC5jbXBuKDEpKXJldHVybiB2LmNsb25lKCk7dmFyIHc9bmV3IEFycmF5KDE2KTt3WzBdPW5ldyBFKDEp'@;
put 'LnRvUmVkKHRoaXMpLHdbMV09djtmb3IodmFyIEo9MjtKPHcubGVuZ3RoO0orKyl3W0pdPXRoaXMubXVsKHdbSi0xXSx2KTt2YXIgbmU9d1swXSxkZT0wLGZlPTAseGU9cC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXhlJiYoeGU9MjYpLEo9cC5sZW5ndGgtMTtKPj0wO0otLSl7Zm9yKHZhciBM'@;
put 'ZT1wLndvcmRzW0pdLEZlPXhlLTE7RmU+PTA7RmUtLSl7dmFyIE9lPUxlPj5GZSYxO25lIT09d1swXSYmKG5lPXRoaXMuc3FyKG5lKSksMCE9PU9lfHwwIT09ZGU/KGRlPDw9MSxkZXw9T2UsKDQ9PSsrZmV8fDA9PT1KJiYwPT09RmUpJiYobmU9dGhpcy5tdWwobmUsd1tkZV0pLGZlPTAsZGU9'@;
put 'MCkpOmZlPTB9eGU9MjZ9cmV0dXJuIG5lfSxDLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odil7dmFyIHA9di51bW9kKHRoaXMubSk7cmV0dXJuIHA9PT12P3AuY2xvbmUoKTpwfSxDLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih2KXt2YXIgcD12LmNsb25lKCk7cmV0dXJu'@;
put 'IHAucmVkPW51bGwscH0sRS5tb250PWZ1bmN0aW9uKHYpe3JldHVybiBuZXcgUyh2KX0sayhTLEMpLFMucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5pbW9kKHYudXNobG4odGhpcy5zaGlmdCkpfSxTLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih2'@;
put 'KXt2YXIgcD10aGlzLmltb2Qodi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHAucmVkPW51bGwscH0sUy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih2LHApe2lmKHYuaXNaZXJvKCl8fHAuaXNaZXJvKCkpcmV0dXJuIHYud29yZHNbMF09MCx2Lmxlbmd0aD0xLHY7dmFyIHc9di5pbXVsKHApLEo9'@;
put 'dy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksbmU9dy5pc3ViKEopLml1c2hybih0aGlzLnNoaWZ0KSxkZT1uZTtyZXR1cm4gbmUuY21wKHRoaXMubSk+PTA/ZGU9bmUuaXN1Yih0aGlzLm0pOm5lLmNtcG4oMCk8MCYmKGRl'@;
put 'PW5lLmlhZGQodGhpcy5tKSksZGUuX2ZvcmNlUmVkKHRoaXMpfSxTLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odixwKXtpZih2LmlzWmVybygpfHxwLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHc9di5tdWwocCksSj13Lm1hc2tuKHRoaXMuc2hpZnQpLm11'@;
put 'bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxuZT13LmlzdWIoSikuaXVzaHJuKHRoaXMuc2hpZnQpLGRlPW5lO3JldHVybiBuZS5jbXAodGhpcy5tKT49MD9kZT1uZS5pc3ViKHRoaXMubSk6bmUuY21wbigwKTwwJiYoZGU9bmUuaWFkZCh0aGlzLm0pKSxkZS5f'@;
put 'Zm9yY2VSZWQodGhpcyl9LFMucHJvdG90eXBlLmludm09ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuaW1vZCh2Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sMzY0NDooTSxPLFIpPT57dmFyIHo9UigxMDQ4KSxLPVIoNTYy'@;
put 'Myk7TS5leHBvcnRzPWZ1bmN0aW9uKHNlKXtyZXR1cm4gc2U/KCJ7fSI9PT1zZS5zdWJzdHIoMCwyKSYmKHNlPSJcXHtcXH0iK3NlLnN1YnN0cigyKSksb2UoKGhlPXNlLGhlLnNwbGl0KCJcXFxcIikuam9pbihJKS5zcGxpdCgiXFx7Iikuam9pbihrKS5zcGxpdCgiXFx9Iikuam9pbihFKS5z'@;
put 'cGxpdCgiXFwsIikuam9pbihqKS5zcGxpdCgiXFwuIikuam9pbihWKSksITApLm1hcChZKSk6W107dmFyIGhlfTt2YXIgST0iXDBTTEFTSCIrTWF0aC5yYW5kb20oKSsiXDAiLGs9IlwwT1BFTiIrTWF0aC5yYW5kb20oKSsiXDAiLEU9IlwwQ0xPU0UiK01hdGgucmFuZG9tKCkrIlwwIixqPSJc'@;
put 'MENPTU1BIitNYXRoLnJhbmRvbSgpKyJcMCIsVj0iXDBQRVJJT0QiK01hdGgucmFuZG9tKCkrIlwwIjtmdW5jdGlvbiBCKHNlKXtyZXR1cm4gcGFyc2VJbnQoc2UsMTApPT1zZT9wYXJzZUludChzZSwxMCk6c2UuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBZKHNlKXtyZXR1cm4gc2Uuc3BsaXQo'@;
put 'SSkuam9pbigiXFwiKS5zcGxpdChrKS5qb2luKCJ7Iikuc3BsaXQoRSkuam9pbigifSIpLnNwbGl0KGopLmpvaW4oIiwiKS5zcGxpdChWKS5qb2luKCIuIil9ZnVuY3Rpb24gWChzZSl7aWYoIXNlKXJldHVyblsiIl07dmFyIGhlPVtdLHVlPUsoInsiLCJ9IixzZSk7aWYoIXVlKXJldHVybiBz'@;
put 'ZS5zcGxpdCgiLCIpO3ZhciBHPXVlLmJvZHksYj11ZS5wb3N0LEQ9dWUucHJlLnNwbGl0KCIsIik7RFtELmxlbmd0aC0xXSs9InsiK0crIn0iO3ZhciBIPVgoYik7cmV0dXJuIGIubGVuZ3RoJiYoRFtELmxlbmd0aC0xXSs9SC5zaGlmdCgpLEQucHVzaC5hcHBseShELEgpKSxoZS5wdXNoLmFw'@;
put 'cGx5KGhlLEQpLGhlfWZ1bmN0aW9uIFUoc2Upe3JldHVybiJ7IitzZSsifSJ9ZnVuY3Rpb24gcShzZSl7cmV0dXJuL14tPzBcZC8udGVzdChzZSl9ZnVuY3Rpb24gZWUoc2UsaGUpe3JldHVybiBzZTw9aGV9ZnVuY3Rpb24gdGUoc2UsaGUpe3JldHVybiBzZT49aGV9ZnVuY3Rpb24gb2Uoc2Us'@;
put 'aGUpe3ZhciB1ZT1bXSxjZT1LKCJ7IiwifSIsc2UpO2lmKCFjZXx8L1wkJC8udGVzdChjZS5wcmUpKXJldHVybltzZV07dmFyIEcsYj0vXi0/XGQrXC5cLi0/XGQrKD86XC5cLi0/XGQrKT8kLy50ZXN0KGNlLmJvZHkpLEQ9L15bYS16QS1aXVwuXC5bYS16QS1aXSg/OlwuXC4tP1xkKyk/JC8u'@;
put 'dGVzdChjZS5ib2R5KSxIPWJ8fEQsTj1jZS5ib2R5LmluZGV4T2YoIiwiKT49MDtpZighSCYmIU4pcmV0dXJuIGNlLnBvc3QubWF0Y2goLywuKlx9Lyk/b2Uoc2U9Y2UucHJlKyJ7IitjZS5ib2R5K0UrY2UucG9zdCk6W3NlXTtpZihIKUc9Y2UuYm9keS5zcGxpdCgvXC5cLi8pO2Vsc2UgaWYo'@;
put 'MT09PShHPVgoY2UuYm9keSkpLmxlbmd0aCYmMT09PShHPW9lKEdbMF0sITEpLm1hcChVKSkubGVuZ3RoKXJldHVybihTPWNlLnBvc3QubGVuZ3RoP29lKGNlLnBvc3QsITEpOlsiIl0pLm1hcChmdW5jdGlvbihLZSl7cmV0dXJuIGNlLnByZStHWzBdK0tlfSk7dmFyIGcsQz1jZS5wcmUsUz1j'@;
put 'ZS5wb3N0Lmxlbmd0aD9vZShjZS5wb3N0LCExKTpbIiJdO2lmKEgpe3ZhciB2PUIoR1swXSkscD1CKEdbMV0pLHc9TWF0aC5tYXgoR1swXS5sZW5ndGgsR1sxXS5sZW5ndGgpLEo9Mz09Ry5sZW5ndGg/TWF0aC5hYnMoQihHWzJdKSk6MSxuZT1lZTtwPHYmJihKKj0tMSxuZT10ZSk7dmFyIGRl'@;
put 'PUcuc29tZShxKTtnPVtdO2Zvcih2YXIgZmU9djtuZShmZSxwKTtmZSs9Sil7dmFyIHhlO2lmKEQpIlxcIj09PSh4ZT1TdHJpbmcuZnJvbUNoYXJDb2RlKGZlKSkmJih4ZT0iIik7ZWxzZSBpZih4ZT1TdHJpbmcoZmUpLGRlKXt2YXIgTGU9dy14ZS5sZW5ndGg7aWYoTGU+MCl7dmFyIEZlPW5l'@;
put 'dyBBcnJheShMZSsxKS5qb2luKCIwIik7eGU9ZmU8MD8iLSIrRmUreGUuc2xpY2UoMSk6RmUreGV9fWcucHVzaCh4ZSl9fWVsc2UgZz16KEcsZnVuY3Rpb24oS2Upe3JldHVybiBvZShLZSwhMSl9KTtmb3IodmFyIE9lPTA7T2U8Zy5sZW5ndGg7T2UrKylmb3IodmFyIGplPTA7amU8Uy5sZW5n'@;
put 'dGg7amUrKyl7dmFyIFdlPUMrZ1tPZV0rU1tqZV07KCFoZXx8SHx8V2UpJiZ1ZS5wdXNoKFdlKX1yZXR1cm4gdWV9fSw5OTMxOihNLE8sUik9Pnt2YXIgejtmdW5jdGlvbiBLKGspe3RoaXMucmFuZD1rfWlmKE0uZXhwb3J0cz1mdW5jdGlvbihrKXtyZXR1cm4genx8KHo9bmV3IEsobnVsbCkp'@;
put 'LHouZ2VuZXJhdGUoayl9LE0uZXhwb3J0cy5SYW5kPUssSy5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX3JhbmQoayl9LEsucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGspe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVz'@;
put 'KGspO2Zvcih2YXIgRT1uZXcgVWludDhBcnJheShrKSxqPTA7ajxFLmxlbmd0aDtqKyspRVtqXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBFfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9LLnByb3RvdHlwZS5fcmFu'@;
put 'ZD1mdW5jdGlvbihrKXt2YXIgRT1uZXcgVWludDhBcnJheShrKTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKEUpLEV9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP0sucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGspe3ZhciBFPW5ldyBV'@;
put 'aW50OEFycmF5KGspO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhFKSxFfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKEsucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIg'@;
put 'ST1SKDkyMTQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBJLnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO0sucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGspe3JldHVybiBJLnJhbmRvbUJ5dGVzKGspfX1jYXRjaHt9fSw0NDk3OihNLE8sUik9Pnt2YXIgej1S'@;
put 'KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBLKEIpe3ouaXNCdWZmZXIoQil8fChCPXouZnJvbShCKSk7Zm9yKHZhciBZPUIubGVuZ3RoLzR8MCxYPW5ldyBBcnJheShZKSxVPTA7VTxZO1UrKylYW1VdPUIucmVhZFVJbnQzMkJFKDQqVSk7cmV0dXJuIFh9ZnVuY3Rpb24gSShCKXtmb3IoOzA8Qi5s'@;
put 'ZW5ndGg7QisrKUJbMF09MH1mdW5jdGlvbiBrKEIsWSxYLFUscSl7Zm9yKHZhciBlZSx0ZSxvZSxzZSxoZT1YWzBdLHVlPVhbMV0sY2U9WFsyXSxHPVhbM10sYj1CWzBdXllbMF0sRD1CWzFdXllbMV0sSD1CWzJdXllbMl0sTj1CWzNdXllbM10sZz00LEM9MTtDPHE7QysrKWVlPWhlW2I+Pj4y'@;
put 'NF1edWVbRD4+PjE2JjI1NV1eY2VbSD4+PjgmMjU1XV5HWzI1NSZOXV5ZW2crK10sdGU9aGVbRD4+PjI0XV51ZVtIPj4+MTYmMjU1XV5jZVtOPj4+OCYyNTVdXkdbMjU1JmJdXllbZysrXSxvZT1oZVtIPj4+MjRdXnVlW04+Pj4xNiYyNTVdXmNlW2I+Pj44JjI1NV1eR1syNTUmRF1eWVtnKytd'@;
put 'LHNlPWhlW04+Pj4yNF1edWVbYj4+PjE2JjI1NV1eY2VbRD4+PjgmMjU1XV5HWzI1NSZIXV5ZW2crK10sYj1lZSxEPXRlLEg9b2UsTj1zZTtyZXR1cm4gZWU9KFVbYj4+PjI0XTw8MjR8VVtEPj4+MTYmMjU1XTw8MTZ8VVtIPj4+OCYyNTVdPDw4fFVbMjU1Jk5dKV5ZW2crK10sdGU9KFVbRD4+'@;
put 'PjI0XTw8MjR8VVtIPj4+MTYmMjU1XTw8MTZ8VVtOPj4+OCYyNTVdPDw4fFVbMjU1JmJdKV5ZW2crK10sb2U9KFVbSD4+PjI0XTw8MjR8VVtOPj4+MTYmMjU1XTw8MTZ8VVtiPj4+OCYyNTVdPDw4fFVbMjU1JkRdKV5ZW2crK10sc2U9KFVbTj4+PjI0XTw8MjR8VVtiPj4+MTYmMjU1XTw8MTZ8'@;
put 'VVtEPj4+OCYyNTVdPDw4fFVbMjU1JkhdKV5ZW2crK10sW2VlPj4+PTAsdGU+Pj49MCxvZT4+Pj0wLHNlPj4+PTBdfXZhciBFPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxqPWZ1bmN0aW9uKCl7Zm9yKHZhciBCPW5ldyBBcnJheSgyNTYpLFk9MDtZPDI1NjtZKyspQltZXT1ZPDEy'@;
put 'OD9ZPDwxOlk8PDFeMjgzO2Zvcih2YXIgWD1bXSxVPVtdLHE9W1tdLFtdLFtdLFtdXSxlZT1bW10sW10sW10sW11dLHRlPTAsb2U9MCxzZT0wO3NlPDI1NjsrK3NlKXt2YXIgaGU9b2Veb2U8PDFeb2U8PDJeb2U8PDNeb2U8PDQ7WFt0ZV09aGU9aGU+Pj44XjI1NSZoZV45OSxVW2hlXT10ZTt2'@;
put 'YXIgdWU9Qlt0ZV0sY2U9Qlt1ZV0sRz1CW2NlXSxiPTI1NypCW2hlXV4xNjg0MzAwOCpoZTtxWzBdW3RlXT1iPDwyNHxiPj4+OCxxWzFdW3RlXT1iPDwxNnxiPj4+MTYscVsyXVt0ZV09Yjw8OHxiPj4+MjQscVszXVt0ZV09YixlZVswXVtoZV09KGI9MTY4NDMwMDkqR142NTUzNypjZV4yNTcq'@;
put 'dWVeMTY4NDMwMDgqdGUpPDwyNHxiPj4+OCxlZVsxXVtoZV09Yjw8MTZ8Yj4+PjE2LGVlWzJdW2hlXT1iPDw4fGI+Pj4yNCxlZVszXVtoZV09YiwwPT09dGU/dGU9b2U9MToodGU9dWVeQltCW0JbR151ZV1dXSxvZV49QltCW29lXV0pfXJldHVybntTQk9YOlgsSU5WX1NCT1g6VSxTVUJfTUlY'@;
put 'OnEsSU5WX1NVQl9NSVg6ZWV9fSgpO2Z1bmN0aW9uIFYoQil7dGhpcy5fa2V5PUsoQiksdGhpcy5fcmVzZXQoKX1WLmJsb2NrU2l6ZT0xNixWLmtleVNpemU9MzIsVi5wcm90b3R5cGUuYmxvY2tTaXplPVYuYmxvY2tTaXplLFYucHJvdG90eXBlLmtleVNpemU9Vi5rZXlTaXplLFYucHJvdG90'@;
put 'eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgQj10aGlzLl9rZXksWT1CLmxlbmd0aCxYPVkrNixVPTQqKFgrMSkscT1bXSxlZT0wO2VlPFk7ZWUrKylxW2VlXT1CW2VlXTtmb3IoZWU9WTtlZTxVO2VlKyspe3ZhciB0ZT1xW2VlLTFdO2VlJVk9PTA/KHRlPWouU0JPWFsodGU9dGU8PDh8'@;
put 'dGU+Pj4yNCk+Pj4yNF08PDI0fGouU0JPWFt0ZT4+PjE2JjI1NV08PDE2fGouU0JPWFt0ZT4+PjgmMjU1XTw8OHxqLlNCT1hbMjU1JnRlXSx0ZV49RVtlZS9ZfDBdPDwyNCk6WT42JiZlZSVZPT00JiYodGU9ai5TQk9YW3RlPj4+MjRdPDwyNHxqLlNCT1hbdGU+Pj4xNiYyNTVdPDwxNnxqLlNC'@;
put 'T1hbdGU+Pj44JjI1NV08PDh8ai5TQk9YWzI1NSZ0ZV0pLHFbZWVdPXFbZWUtWV1edGV9Zm9yKHZhciBvZT1bXSxzZT0wO3NlPFU7c2UrKyl7dmFyIGhlPVUtc2UsdWU9cVtoZS0oc2UlND8wOjQpXTtvZVtzZV09c2U8NHx8aGU8PTQ/dWU6ai5JTlZfU1VCX01JWFswXVtqLlNCT1hbdWU+Pj4y'@;
put 'NF1dXmouSU5WX1NVQl9NSVhbMV1bai5TQk9YW3VlPj4+MTYmMjU1XV1eai5JTlZfU1VCX01JWFsyXVtqLlNCT1hbdWU+Pj44JjI1NV1dXmouSU5WX1NVQl9NSVhbM11bai5TQk9YWzI1NSZ1ZV1dfXRoaXMuX25Sb3VuZHM9WCx0aGlzLl9rZXlTY2hlZHVsZT1xLHRoaXMuX2ludktleVNjaGVk'@;
put 'dWxlPW9lfSxWLnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oQil7cmV0dXJuIGsoQj1LKEIpLHRoaXMuX2tleVNjaGVkdWxlLGouU1VCX01JWCxqLlNCT1gsdGhpcy5fblJvdW5kcyl9LFYucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihCKXt2YXIgWT10aGlzLmVu'@;
put 'Y3J5cHRCbG9ja1JhdyhCKSxYPXouYWxsb2NVbnNhZmUoMTYpO3JldHVybiBYLndyaXRlVUludDMyQkUoWVswXSwwKSxYLndyaXRlVUludDMyQkUoWVsxXSw0KSxYLndyaXRlVUludDMyQkUoWVsyXSw4KSxYLndyaXRlVUludDMyQkUoWVszXSwxMiksWH0sVi5wcm90b3R5cGUuZGVjcnlwdEJs'@;
put 'b2NrPWZ1bmN0aW9uKEIpe3ZhciBZPShCPUsoQikpWzFdO0JbMV09QlszXSxCWzNdPVk7dmFyIFg9ayhCLHRoaXMuX2ludktleVNjaGVkdWxlLGouSU5WX1NVQl9NSVgsai5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxVPXouYWxsb2NVbnNhZmUoMTYpO3JldHVybiBVLndyaXRlVUludDMyQkUo'@;
put 'WFswXSwwKSxVLndyaXRlVUludDMyQkUoWFszXSw0KSxVLndyaXRlVUludDMyQkUoWFsyXSw4KSxVLndyaXRlVUludDMyQkUoWFsxXSwxMiksVX0sVi5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtJKHRoaXMuX2tleVNjaGVkdWxlKSxJKHRoaXMuX2ludktleVNjaGVkdWxlKSxJKHRoaXMu'@;
put 'X2tleSl9LE0uZXhwb3J0cy5BRVM9Vn0sNDg0ODooTSxPLFIpPT57dmFyIHo9Uig0NDk3KSxLPVIoOTUwOSkuQnVmZmVyLEk9UigxMDI3KSxrPVIoNTcxNyksRT1SKDMyODgpLGo9Uig3Mjk1KSxWPVIoNjg1KTtmdW5jdGlvbiBCKFksWCxVLHEpe0kuY2FsbCh0aGlzKTt2YXIgZWU9Sy5hbGxv'@;
put 'Yyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgei5BRVMoWCk7dmFyIHRlPXRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soZWUpO3RoaXMuX2doYXNoPW5ldyBFKHRlKSxVPWZ1bmN0aW9uKG9lLHNlLGhlKXtpZigxMj09PXNlLmxlbmd0aClyZXR1cm4gb2UuX2ZpbklEPUsuY29uY2F0KFtzZSxLLmZy'@;
put 'b20oWzAsMCwwLDFdKV0pLEsuY29uY2F0KFtzZSxLLmZyb20oWzAsMCwwLDJdKV0pO3ZhciB1ZT1uZXcgRShoZSksY2U9c2UubGVuZ3RoLEc9Y2UlMTY7dWUudXBkYXRlKHNlKSxHJiZ1ZS51cGRhdGUoSy5hbGxvYyhHPTE2LUcsMCkpLHVlLnVwZGF0ZShLLmFsbG9jKDgsMCkpO3ZhciBiPTgq'@;
put 'Y2UsRD1LLmFsbG9jKDgpO0Qud3JpdGVVSW50QkUoYiwwLDgpLHVlLnVwZGF0ZShEKSxvZS5fZmluSUQ9dWUuc3RhdGU7dmFyIEg9Sy5mcm9tKG9lLl9maW5JRCk7cmV0dXJuIFYoSCksSH0odGhpcyxVLHRlKSx0aGlzLl9wcmV2PUsuZnJvbShVKSx0aGlzLl9jYWNoZT1LLmFsbG9jVW5zYWZl'@;
put 'KDApLHRoaXMuX3NlY0NhY2hlPUsuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1xLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPVksdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1rKEIsSSksQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihZKXtp'@;
put 'ZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgWD0xNi10aGlzLl9hbGVuJTE2O1g8MTYmJihYPUsuYWxsb2MoWCwwKSx0aGlzLl9naGFzaC51cGRhdGUoWCkpfXRoaXMuX2NhbGxlZD0hMDt2YXIgVT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxZKTtyZXR1cm4gdGhpcy5fZ2hhc2gu'@;
put 'dXBkYXRlKHRoaXMuX2RlY3J5cHQ/WTpVKSx0aGlzLl9sZW4rPVkubGVuZ3RoLFV9LEIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhl'@;
put 'bnRpY2F0ZSBkYXRhIik7dmFyIFk9aih0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbihYLFUpe3ZhciBxPTA7WC5sZW5ndGghPT1VLmxlbmd0'@;
put 'aCYmcSsrO2Zvcih2YXIgZWU9TWF0aC5taW4oWC5sZW5ndGgsVS5sZW5ndGgpLHRlPTA7dGU8ZWU7Kyt0ZSlxKz1YW3RlXV5VW3RlXTtyZXR1cm4gcX0oWSx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUg'@;
put 'ZGF0YSIpO3RoaXMuX2F1dGhUYWc9WSx0aGlzLl9jaXBoZXIuc2NydWIoKX0sQi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFLLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0'@;
put 'YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sQi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihZKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRl'@;
put 'Iik7dGhpcy5fYXV0aFRhZz1ZfSxCLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKFkpLHRoaXMuX2FsZW4rPVku'@;
put 'bGVuZ3RofSxNLmV4cG9ydHM9Qn0sNDY5NjooTSxPLFIpPT57dmFyIHo9UigxNDk0KSxLPVIoNjE5MyksST1SKDQ5NDYpO08uY3JlYXRlQ2lwaGVyPU8uQ2lwaGVyPXouY3JlYXRlQ2lwaGVyLE8uY3JlYXRlQ2lwaGVyaXY9Ty5DaXBoZXJpdj16LmNyZWF0ZUNpcGhlcml2LE8uY3JlYXRlRGVj'@;
put 'aXBoZXI9Ty5EZWNpcGhlcj1LLmNyZWF0ZURlY2lwaGVyLE8uY3JlYXRlRGVjaXBoZXJpdj1PLkRlY2lwaGVyaXY9Sy5jcmVhdGVEZWNpcGhlcml2LE8ubGlzdENpcGhlcnM9Ty5nZXRDaXBoZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKEkpfX0sNjE5MzooTSxPLFIpPT57dmFy'@;
put 'IHo9Uig0ODQ4KSxLPVIoOTUwOSkuQnVmZmVyLEk9Uig0NSksaz1SKDU5NjkpLEU9UigxMDI3KSxqPVIoNDQ5NyksVj1SKDMwNDgpO2Z1bmN0aW9uIEIoVSxxLGVlKXtFLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IFksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBqLkFF'@;
put 'UyhxKSx0aGlzLl9wcmV2PUsuZnJvbShlZSksdGhpcy5fbW9kZT1VLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIFkoKXt0aGlzLmNhY2hlPUsuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gWChVLHEsZWUpe3ZhciB0ZT1JW1UudG9Mb3dlckNhc2UoKV07aWYoIXRlKXRocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgZWUmJihlZT1LLmZyb20oZWUpKSwiR0NNIiE9PXRlLm1vZGUmJmVlLmxlbmd0aCE9PXRlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrZWUubGVuZ3RoKTtpZigic3Ry'@;
put 'aW5nIj09dHlwZW9mIHEmJihxPUsuZnJvbShxKSkscS5sZW5ndGghPT10ZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT10ZS50eXBlP25ldyBrKHRlLm1vZHVsZSxxLGVlLCEwKToiYXV0aCI9PT10ZS50'@;
put 'eXBlP25ldyB6KHRlLm1vZHVsZSxxLGVlLCEwKTpuZXcgQih0ZS5tb2R1bGUscSxlZSl9Uig1NzE3KShCLEUpLEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSl7dmFyIHEsZWU7dGhpcy5fY2FjaGUuYWRkKFUpO2Zvcih2YXIgdGU9W107cT10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0'@;
put 'b3BhZGRpbmcpOyllZT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxxKSx0ZS5wdXNoKGVlKTtyZXR1cm4gSy5jb25jYXQodGUpfSxCLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVT10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlv'@;
put 'bihxKXt2YXIgZWU9cVsxNV07aWYoZWU8MXx8ZWU+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciB0ZT0tMTsrK3RlPGVlOylpZihxW3RlKygxNi1lZSldIT09ZWUpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYo'@;
put 'MTYhPT1lZSlyZXR1cm4gcS5zbGljZSgwLDE2LWVlKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsVSkpO2lmKFUpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sQi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVSl7cmV0dXJu'@;
put 'IHRoaXMuX2F1dG9wYWRkaW5nPSEhVSx0aGlzfSxZLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVSl7dGhpcy5jYWNoZT1LLmNvbmNhdChbdGhpcy5jYWNoZSxVXSl9LFkucHJvdG90eXBlLmdldD1mdW5jdGlvbihVKXt2YXIgcTtpZihVKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4g'@;
put 'cT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNikscX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gcT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNikscTtyZXR1cm4gbnVs'@;
put 'bH0sWS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0sTy5jcmVhdGVEZWNpcGhlcj1mdW5jdGlvbihVLHEpe3ZhciBlZT1JW1UudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQg'@;
put 'c3VpdGUgdHlwZSIpO3ZhciB0ZT1WKHEsITEsZWUua2V5LGVlLml2KTtyZXR1cm4gWChVLHRlLmtleSx0ZS5pdil9LE8uY3JlYXRlRGVjaXBoZXJpdj1YfSwxNDk0OihNLE8sUik9Pnt2YXIgej1SKDQ1KSxLPVIoNDg0OCksST1SKDk1MDkpLkJ1ZmZlcixrPVIoNTk2OSksRT1SKDEwMjcpLGo9'@;
put 'Uig0NDk3KSxWPVIoMzA0OCk7ZnVuY3Rpb24gQihxLGVlLHRlKXtFLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IFgsdGhpcy5fY2lwaGVyPW5ldyBqLkFFUyhlZSksdGhpcy5fcHJldj1JLmZyb20odGUpLHRoaXMuX21vZGU9cSx0aGlzLl9hdXRvcGFkZGluZz0hMH1SKDU3MTcpKEIsRSks'@;
put 'Qi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihxKXt2YXIgZWUsdGU7dGhpcy5fY2FjaGUuYWRkKHEpO2Zvcih2YXIgb2U9W107ZWU9dGhpcy5fY2FjaGUuZ2V0KCk7KXRlPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLGVlKSxvZS5wdXNoKHRlKTtyZXR1cm4gSS5jb25jYXQob2UpfTt2YXIg'@;
put 'WT1JLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBYKCl7dGhpcy5jYWNoZT1JLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIFUocSxlZSx0ZSl7dmFyIG9lPXpbcS50b0xvd2VyQ2FzZSgpXTtpZighb2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiBlZSYmKGVlPUkuZnJvbShlZSkpLGVlLmxlbmd0aCE9PW9lLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK2VlLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiB0ZSYmKHRlPUkuZnJvbSh0ZSkpLCJHQ00iIT09b2UubW9kZSYmdGUubGVu'@;
put 'Z3RoIT09b2UuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIit0ZS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09b2UudHlwZT9uZXcgayhvZS5tb2R1bGUsZWUsdGUpOiJhdXRoIj09PW9lLnR5cGU/bmV3IEsob2UubW9kdWxlLGVlLHRlKTpuZXcgQihvZS5tb2R1'@;
put 'bGUsZWUsdGUpfUIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBxPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIHE9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMscSksdGhpcy5fY2lwaGVyLnNjcnViKCkscTtpZighcS5lcXVhbHMoWSkpdGhy'@;
put 'b3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sQi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhcSx0aGlzfSxYLnByb3RvdHlwZS5hZGQ9ZnVu'@;
put 'Y3Rpb24ocSl7dGhpcy5jYWNoZT1JLmNvbmNhdChbdGhpcy5jYWNoZSxxXSl9LFgucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgcT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYp'@;
put 'LHF9cmV0dXJuIG51bGx9LFgucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBxPTE2LXRoaXMuY2FjaGUubGVuZ3RoLGVlPUkuYWxsb2NVbnNhZmUocSksdGU9LTE7Kyt0ZTxxOyllZS53cml0ZVVJbnQ4KHEsdGUpO3JldHVybiBJLmNvbmNhdChbdGhpcy5jYWNoZSxlZV0pfSxP'@;
put 'LmNyZWF0ZUNpcGhlcml2PVUsTy5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24ocSxlZSl7dmFyIHRlPXpbcS50b0xvd2VyQ2FzZSgpXTtpZighdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIG9lPVYoZWUsITEsdGUua2V5LHRlLml2KTtyZXR1cm4gVShxLG9l'@;
put 'LmtleSxvZS5pdil9fSwzMjg4OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPXouYWxsb2MoMTYsMCk7ZnVuY3Rpb24gSShFKXt2YXIgaj16LmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gai53cml0ZVVJbnQzMkJFKEVbMF0+Pj4wLDApLGoud3JpdGVVSW50MzJCRShFWzFdPj4+MCw0'@;
put 'KSxqLndyaXRlVUludDMyQkUoRVsyXT4+PjAsOCksai53cml0ZVVJbnQzMkJFKEVbM10+Pj4wLDEyKSxqfWZ1bmN0aW9uIGsoRSl7dGhpcy5oPUUsdGhpcy5zdGF0ZT16LmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9ei5hbGxvY1Vuc2FmZSgwKX1rLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihF'@;
put 'KXtmb3IodmFyIGo9LTE7KytqPEUubGVuZ3RoOyl0aGlzLnN0YXRlW2pdXj1FW2pdO3RoaXMuX211bHRpcGx5KCl9LGsucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgRSxqLFYsQj1bKEU9dGhpcy5oKS5yZWFkVUludDMyQkUoMCksRS5yZWFkVUludDMyQkUoNCksRS5y'@;
put 'ZWFkVUludDMyQkUoOCksRS5yZWFkVUludDMyQkUoMTIpXSxZPVswLDAsMCwwXSxYPS0xOysrWDwxMjg7KXtmb3IodGhpcy5zdGF0ZVt+fihYLzgpXSYxPDw3LVglOCYmKFlbMF1ePUJbMF0sWVsxXV49QlsxXSxZWzJdXj1CWzJdLFlbM11ePUJbM10pLFY9MCE9KDEmQlszXSksaj0zO2o+MDtq'@;
put 'LS0pQltqXT1CW2pdPj4+MXwoMSZCW2otMV0pPDwzMTtCWzBdPUJbMF0+Pj4xLFYmJihCWzBdPS01MjAwOTM2OTZeQlswXSl9dGhpcy5zdGF0ZT1JKFkpfSxrLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRSl7dmFyIGo7Zm9yKHRoaXMuY2FjaGU9ei5jb25jYXQoW3RoaXMuY2FjaGUsRV0p'@;
put 'O3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspaj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChqKX0say5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oRSxqKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2go'@;
put 'ei5jb25jYXQoW3RoaXMuY2FjaGUsS10sMTYpKSx0aGlzLmdoYXNoKEkoWzAsRSwwLGpdKSksdGhpcy5zdGF0ZX0sTS5leHBvcnRzPWt9LDY4NTpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKE8pe2Zvcih2YXIgUix6PU8ubGVuZ3RoO3otLTspe2lmKDI1NSE9PShSPU8ucmVhZFVJbnQ4KHopKSl7'@;
put 'UisrLE8ud3JpdGVVSW50OChSLHopO2JyZWFrfU8ud3JpdGVVSW50OCgwLHopfX19LDUyOTI6KE0sTyxSKT0+e3ZhciB6PVIoNzI5NSk7Ty5lbmNyeXB0PWZ1bmN0aW9uKEssSSl7dmFyIGs9eihJLEsuX3ByZXYpO3JldHVybiBLLl9wcmV2PUsuX2NpcGhlci5lbmNyeXB0QmxvY2soayksSy5f'@;
put 'cHJldn0sTy5kZWNyeXB0PWZ1bmN0aW9uKEssSSl7dmFyIGs9Sy5fcHJldjtLLl9wcmV2PUk7dmFyIEU9Sy5fY2lwaGVyLmRlY3J5cHRCbG9jayhJKTtyZXR1cm4geihFLGspfX0sNjMxMTooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDcyOTUpO2Z1bmN0aW9uIEkoayxFLGop'@;
put 'e3ZhciBWPUUubGVuZ3RoLEI9SyhFLGsuX2NhY2hlKTtyZXR1cm4gay5fY2FjaGU9ay5fY2FjaGUuc2xpY2UoViksay5fcHJldj16LmNvbmNhdChbay5fcHJldixqP0U6Ql0pLEJ9Ty5lbmNyeXB0PWZ1bmN0aW9uKGssRSxqKXtmb3IodmFyIFYsQj16LmFsbG9jVW5zYWZlKDApO0UubGVuZ3Ro'@;
put 'Oyl7aWYoMD09PWsuX2NhY2hlLmxlbmd0aCYmKGsuX2NhY2hlPWsuX2NpcGhlci5lbmNyeXB0QmxvY2soay5fcHJldiksay5fcHJldj16LmFsbG9jVW5zYWZlKDApKSwhKGsuX2NhY2hlLmxlbmd0aDw9RS5sZW5ndGgpKXtCPXouY29uY2F0KFtCLEkoayxFLGopXSk7YnJlYWt9Qj16LmNvbmNh'@;
put 'dChbQixJKGssRS5zbGljZSgwLFY9ay5fY2FjaGUubGVuZ3RoKSxqKV0pLEU9RS5zbGljZShWKX1yZXR1cm4gQn19LDE1MTA6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEsoayxFLGope2Zvcih2YXIgVixCLFk9LTEsWD0wOysrWTw4OylWPUUmMTw8Ny1ZPzEyODow'@;
put 'LFgrPSgxMjgmKEI9ay5fY2lwaGVyLmVuY3J5cHRCbG9jayhrLl9wcmV2KVswXV5WKSk+PlklOCxrLl9wcmV2PUkoay5fcHJldixqP1Y6Qik7cmV0dXJuIFh9ZnVuY3Rpb24gSShrLEUpe3ZhciBqPWsubGVuZ3RoLFY9LTEsQj16LmFsbG9jVW5zYWZlKGsubGVuZ3RoKTtmb3Ioaz16LmNvbmNh'@;
put 'dChbayx6LmZyb20oW0VdKV0pOysrVjxqOylCW1ZdPWtbVl08PDF8a1tWKzFdPj43O3JldHVybiBCfU8uZW5jcnlwdD1mdW5jdGlvbihrLEUsail7Zm9yKHZhciBWPUUubGVuZ3RoLEI9ei5hbGxvY1Vuc2FmZShWKSxZPS0xOysrWTxWOylCW1ldPUsoayxFW1ldLGopO3JldHVybiBCfX0sMTk2'@;
put 'NDooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSyhJLGssRSl7dmFyIGo9SS5fY2lwaGVyLmVuY3J5cHRCbG9jayhJLl9wcmV2KVswXV5rO3JldHVybiBJLl9wcmV2PXouY29uY2F0KFtJLl9wcmV2LnNsaWNlKDEpLHouZnJvbShbRT9rOmpdKV0pLGp9Ty5lbmNyeXB0'@;
put 'PWZ1bmN0aW9uKEksayxFKXtmb3IodmFyIGo9ay5sZW5ndGgsVj16LmFsbG9jVW5zYWZlKGopLEI9LTE7KytCPGo7KVZbQl09SyhJLGtbQl0sRSk7cmV0dXJuIFZ9fSw2MDA5OihNLE8sUik9Pnt2YXIgej1SKDcyOTUpLEs9Uig5NTA5KS5CdWZmZXIsST1SKDY4NSk7ZnVuY3Rpb24gayhFKXt2'@;
put 'YXIgaj1FLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KEUuX3ByZXYpO3JldHVybiBJKEUuX3ByZXYpLGp9Ty5lbmNyeXB0PWZ1bmN0aW9uKEUsail7dmFyIFY9TWF0aC5jZWlsKGoubGVuZ3RoLzE2KSxCPUUuX2NhY2hlLmxlbmd0aDtFLl9jYWNoZT1LLmNvbmNhdChbRS5fY2FjaGUsSy5hbGxv'@;
put 'Y1Vuc2FmZSgxNipWKV0pO2Zvcih2YXIgWT0wO1k8VjtZKyspe3ZhciBYPWsoRSksVT1CKzE2Klk7RS5fY2FjaGUud3JpdGVVSW50MzJCRShYWzBdLFUrMCksRS5fY2FjaGUud3JpdGVVSW50MzJCRShYWzFdLFUrNCksRS5fY2FjaGUud3JpdGVVSW50MzJCRShYWzJdLFUrOCksRS5fY2FjaGUu'@;
put 'd3JpdGVVSW50MzJCRShYWzNdLFUrMTIpfXZhciBxPUUuX2NhY2hlLnNsaWNlKDAsai5sZW5ndGgpO3JldHVybiBFLl9jYWNoZT1FLl9jYWNoZS5zbGljZShqLmxlbmd0aCkseihqLHEpfX0sMTA4NDooTSxPKT0+e08uZW5jcnlwdD1mdW5jdGlvbihSLHope3JldHVybiBSLl9jaXBoZXIuZW5j'@;
put 'cnlwdEJsb2NrKHopfSxPLmRlY3J5cHQ9ZnVuY3Rpb24oUix6KXtyZXR1cm4gUi5fY2lwaGVyLmRlY3J5cHRCbG9jayh6KX19LDQ1OihNLE8sUik9Pnt2YXIgej17RUNCOlIoMTA4NCksQ0JDOlIoNTI5MiksQ0ZCOlIoNjMxMSksQ0ZCODpSKDE5NjQpLENGQjE6UigxNTEwKSxPRkI6Uig4ODYx'@;
put 'KSxDVFI6Uig2MDA5KSxHQ006Uig2MDA5KX0sSz1SKDQ5NDYpO2Zvcih2YXIgSSBpbiBLKUtbSV0ubW9kdWxlPXpbS1tJXS5tb2RlXTtNLmV4cG9ydHM9S30sODg2MTooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDcyOTUpO2Z1bmN0aW9uIEkoayl7cmV0dXJuIGsuX3ByZXY9'@;
put 'ay5fY2lwaGVyLmVuY3J5cHRCbG9jayhrLl9wcmV2KSxrLl9wcmV2fU8uZW5jcnlwdD1mdW5jdGlvbihrLEUpe2Zvcig7ay5fY2FjaGUubGVuZ3RoPEUubGVuZ3RoOylrLl9jYWNoZT16LmNvbmNhdChbay5fY2FjaGUsSShrKV0pO3ZhciBqPWsuX2NhY2hlLnNsaWNlKDAsRS5sZW5ndGgpO3Jl'@;
put 'dHVybiBrLl9jYWNoZT1rLl9jYWNoZS5zbGljZShFLmxlbmd0aCksSyhFLGopfX0sNTk2OTooTSxPLFIpPT57dmFyIHo9Uig0NDk3KSxLPVIoOTUwOSkuQnVmZmVyLEk9UigxMDI3KTtmdW5jdGlvbiBrKEUsaixWLEIpe0kuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IHouQUVTKGopLHRo'@;
put 'aXMuX3ByZXY9Sy5mcm9tKFYpLHRoaXMuX2NhY2hlPUsuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Sy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PUIsdGhpcy5fbW9kZT1FfVIoNTcxNykoayxJKSxrLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlz'@;
put 'Ll9tb2RlLmVuY3J5cHQodGhpcyxFLHRoaXMuX2RlY3J5cHQpfSxrLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sTS5leHBvcnRzPWt9LDM2MTQ6KE0sTyxSKT0+e3ZhciB6PVIoNzY2NyksSz1SKDQ2OTYpLEk9Uig0NSksaz1SKDk3MTUpLEU9Uigz'@;
put 'MDQ4KTtmdW5jdGlvbiBqKEIsWSxYKXtpZihCPUIudG9Mb3dlckNhc2UoKSxJW0JdKXJldHVybiBLLmNyZWF0ZUNpcGhlcml2KEIsWSxYKTtpZihrW0JdKXJldHVybiBuZXcgeih7a2V5OlksaXY6WCxtb2RlOkJ9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1m'@;
put 'dW5jdGlvbiBWKEIsWSxYKXtpZihCPUIudG9Mb3dlckNhc2UoKSxJW0JdKXJldHVybiBLLmNyZWF0ZURlY2lwaGVyaXYoQixZLFgpO2lmKGtbQl0pcmV0dXJuIG5ldyB6KHtrZXk6WSxpdjpYLG1vZGU6QixkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0'@;
put 'eXBlIil9Ty5jcmVhdGVDaXBoZXI9Ty5DaXBoZXI9ZnVuY3Rpb24oQixZKXt2YXIgWCxVO2lmKEI9Qi50b0xvd2VyQ2FzZSgpLElbQl0pWD1JW0JdLmtleSxVPUlbQl0uaXY7ZWxzZXtpZigha1tCXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtYPTgqa1tCXS5r'@;
put 'ZXksVT1rW0JdLml2fXZhciBxPUUoWSwhMSxYLFUpO3JldHVybiBqKEIscS5rZXkscS5pdil9LE8uY3JlYXRlQ2lwaGVyaXY9Ty5DaXBoZXJpdj1qLE8uY3JlYXRlRGVjaXBoZXI9Ty5EZWNpcGhlcj1mdW5jdGlvbihCLFkpe3ZhciBYLFU7aWYoQj1CLnRvTG93ZXJDYXNlKCksSVtCXSlYPUlb'@;
put 'Ql0ua2V5LFU9SVtCXS5pdjtlbHNle2lmKCFrW0JdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1g9OCprW0JdLmtleSxVPWtbQl0uaXZ9dmFyIHE9RShZLCExLFgsVSk7cmV0dXJuIFYoQixxLmtleSxxLml2KX0sTy5jcmVhdGVEZWNpcGhlcml2PU8uRGVjaXBo'@;
put 'ZXJpdj1WLE8ubGlzdENpcGhlcnM9Ty5nZXRDaXBoZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKGspLmNvbmNhdChLLmdldENpcGhlcnMoKSl9fSw3NjY3OihNLE8sUik9Pnt2YXIgej1SKDEwMjcpLEs9Uig1MjUxKSxJPVIoNTcxNyksaz1SKDk1MDkpLkJ1ZmZlcixFPXsiZGVz'@;
put 'LWVkZTMtY2JjIjpLLkNCQy5pbnN0YW50aWF0ZShLLkVERSksImRlcy1lZGUzIjpLLkVERSwiZGVzLWVkZS1jYmMiOksuQ0JDLmluc3RhbnRpYXRlKEsuRURFKSwiZGVzLWVkZSI6Sy5FREUsImRlcy1jYmMiOksuQ0JDLmluc3RhbnRpYXRlKEsuREVTKSwiZGVzLWVjYiI6Sy5ERVN9O2Z1bmN0'@;
put 'aW9uIGooVil7ei5jYWxsKHRoaXMpO3ZhciBCLFk9Vi5tb2RlLnRvTG93ZXJDYXNlKCksWD1FW1ldO0I9Vi5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIFU9Vi5rZXk7ay5pc0J1ZmZlcihVKXx8KFU9ay5mcm9tKFUpKSwiZGVzLWVkZSIhPT1ZJiYiZGVzLWVkZS1jYmMiIT09WXx8'@;
put 'KFU9ay5jb25jYXQoW1UsVS5zbGljZSgwLDgpXSkpO3ZhciBxPVYuaXY7ay5pc0J1ZmZlcihxKXx8KHE9ay5mcm9tKHEpKSx0aGlzLl9kZXM9WC5jcmVhdGUoe2tleTpVLGl2OnEsdHlwZTpCfSl9RS5kZXM9RVsiZGVzLWNiYyJdLEUuZGVzMz1FWyJkZXMtZWRlMy1jYmMiXSxNLmV4cG9ydHM9'@;
put 'aixJKGoseiksai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXtyZXR1cm4gay5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoVikpfSxqLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gay5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDk3MTU6KE0sTyk9PntPWyJkZXMtZWNi'@;
put 'Il09e2tleTo4LGl2OjB9LE9bImRlcy1jYmMiXT1PLmRlcz17a2V5OjgsaXY6OH0sT1siZGVzLWVkZTMtY2JjIl09Ty5kZXMzPXtrZXk6MjQsaXY6OH0sT1siZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LE9bImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxPWyJkZXMtZWRlIl09e2tleTox'@;
put 'NixpdjowfX0sMzY2MzooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDM1NTApLEk9UigxNzk4KTtmdW5jdGlvbiBrKGope3ZhciBWLEI9ai5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3tWPW5ldyBLKEkoQikpfXdoaWxlKFYuY21wKGoubW9kdWx1cyk+PTB8fCFWLnVtb2Qoai5w'@;
put 'cmltZTEpfHwhVi51bW9kKGoucHJpbWUyKSk7cmV0dXJuIFZ9ZnVuY3Rpb24gRShqLFYpe3ZhciBjZSxHLEI9e2JsaW5kZXI6KEc9ayhjZT1WKSkudG9SZWQoSy5tb250KGNlLm1vZHVsdXMpKS5yZWRQb3cobmV3IEsoY2UucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCksdW5ibGluZGVyOkcu'@;
put 'aW52bShjZS5tb2R1bHVzKX0sWT1WLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFg9bmV3IEsoaikubXVsKEIuYmxpbmRlcikudW1vZChWLm1vZHVsdXMpLFU9WC50b1JlZChLLm1vbnQoVi5wcmltZTEpKSxxPVgudG9SZWQoSy5tb250KFYucHJpbWUyKSksZWU9Vi5jb2VmZmljaWVudCx0ZT1WLnBy'@;
put 'aW1lMSxvZT1WLnByaW1lMixzZT1VLnJlZFBvdyhWLmV4cG9uZW50MSkuZnJvbVJlZCgpLGhlPXEucmVkUG93KFYuZXhwb25lbnQyKS5mcm9tUmVkKCksdWU9c2UuaXN1YihoZSkuaW11bChlZSkudW1vZCh0ZSkuaW11bChvZSk7cmV0dXJuIGhlLmlhZGQodWUpLmltdWwoQi51bmJsaW5kZXIp'@;
put 'LnVtb2QoVi5tb2R1bHVzKS50b0FycmF5TGlrZSh6LCJiZSIsWSl9RS5nZXRyPWssTS5leHBvcnRzPUV9LDYwNDI6KE0sTyxSKT0+e00uZXhwb3J0cz1SKDUyMDcpfSw0NzQzOihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoMzQ4MiksST1SKDg0NzMpLGs9Uig1NzE3KSxFPVIo'@;
put 'Mjk1Nyksaj1SKDc3NTMpLFY9Uig1MjA3KTtmdW5jdGlvbiBCKHEpe0kuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgZWU9VltxXTtpZighZWUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9ZWUuaGFzaCx0aGlzLl9oYXNoPUsoZWUuaGFz'@;
put 'aCksdGhpcy5fdGFnPWVlLmlkLHRoaXMuX3NpZ25UeXBlPWVlLnNpZ259ZnVuY3Rpb24gWShxKXtJLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGVlPVZbcV07aWYoIWVlKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9SyhlZS5oYXNoKSx0aGlz'@;
put 'Ll90YWc9ZWUuaWQsdGhpcy5fc2lnblR5cGU9ZWUuc2lnbn1mdW5jdGlvbiBYKHEpe3JldHVybiBuZXcgQihxKX1mdW5jdGlvbiBVKHEpe3JldHVybiBuZXcgWShxKX1PYmplY3Qua2V5cyhWKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe1ZbcV0uaWQ9ei5mcm9tKFZbcV0uaWQsImhleCIpLFZbcS50'@;
put 'b0xvd2VyQ2FzZSgpXT1WW3FdfSksayhCLEkuV3JpdGFibGUpLEIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihxLGVlLHRlKXt0aGlzLl9oYXNoLnVwZGF0ZShxKSx0ZSgpfSxCLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBxJiYocT16'@;
put 'LmZyb20ocSxlZSkpLHRoaXMuX2hhc2gudXBkYXRlKHEpLHRoaXN9LEIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24ocSxlZSl7dGhpcy5lbmQoKTt2YXIgdGU9dGhpcy5faGFzaC5kaWdlc3QoKSxvZT1FKHRlLHEsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1'@;
put 'cm4gZWU/b2UudG9TdHJpbmcoZWUpOm9lfSxrKFksSS5Xcml0YWJsZSksWS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHEsZWUsdGUpe3RoaXMuX2hhc2gudXBkYXRlKHEpLHRlKCl9LFkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihxLGVlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHEm'@;
put 'JihxPXouZnJvbShxLGVlKSksdGhpcy5faGFzaC51cGRhdGUocSksdGhpc30sWS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHEsZWUsdGUpeyJzdHJpbmciPT10eXBlb2YgZWUmJihlZT16LmZyb20oZWUsdGUpKSx0aGlzLmVuZCgpO3ZhciBvZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVy'@;
put 'biBqKGVlLG9lLHEsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sTS5leHBvcnRzPXtTaWduOlgsVmVyaWZ5OlUsY3JlYXRlU2lnbjpYLGNyZWF0ZVZlcmlmeTpVfX0sMjk1NzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDgzNTUpLEk9UigzNjYzKSxrPVIoNjk0OCkuZWMs'@;
put 'RT1SKDM1NTApLGo9Uig5ODApLFY9UigxMzA4KTtmdW5jdGlvbiBCKHEsZWUsdGUsb2Upe2lmKChxPXouZnJvbShxLnRvQXJyYXkoKSkpLmxlbmd0aDxlZS5ieXRlTGVuZ3RoKCkpe3ZhciBzZT16LmFsbG9jKGVlLmJ5dGVMZW5ndGgoKS1xLmxlbmd0aCk7cT16LmNvbmNhdChbc2UscV0pfXZh'@;
put 'ciBoZT10ZS5sZW5ndGgsdWU9ZnVuY3Rpb24oYixEKXtiPShiPVkoYixEKSkubW9kKEQpO3ZhciBIPXouZnJvbShiLnRvQXJyYXkoKSk7aWYoSC5sZW5ndGg8RC5ieXRlTGVuZ3RoKCkpe3ZhciBOPXouYWxsb2MoRC5ieXRlTGVuZ3RoKCktSC5sZW5ndGgpO0g9ei5jb25jYXQoW04sSF0pfXJl'@;
put 'dHVybiBIfSh0ZSxlZSksY2U9ei5hbGxvYyhoZSk7Y2UuZmlsbCgxKTt2YXIgRz16LmFsbG9jKGhlKTtyZXR1cm4gRz1LKG9lLEcpLnVwZGF0ZShjZSkudXBkYXRlKHouZnJvbShbMF0pKS51cGRhdGUocSkudXBkYXRlKHVlKS5kaWdlc3QoKSxjZT1LKG9lLEcpLnVwZGF0ZShjZSkuZGlnZXN0'@;
put 'KCkse2s6Rz1LKG9lLEcpLnVwZGF0ZShjZSkudXBkYXRlKHouZnJvbShbMV0pKS51cGRhdGUocSkudXBkYXRlKHVlKS5kaWdlc3QoKSx2OmNlPUsob2UsRykudXBkYXRlKGNlKS5kaWdlc3QoKX19ZnVuY3Rpb24gWShxLGVlKXt2YXIgdGU9bmV3IEUocSksb2U9KHEubGVuZ3RoPDwzKS1lZS5i'@;
put 'aXRMZW5ndGgoKTtyZXR1cm4gb2U+MCYmdGUuaXNocm4ob2UpLHRlfWZ1bmN0aW9uIFgocSxlZSx0ZSl7dmFyIG9lLHNlO2Rve2ZvcihvZT16LmFsbG9jKDApOzgqb2UubGVuZ3RoPHEuYml0TGVuZ3RoKCk7KWVlLnY9Syh0ZSxlZS5rKS51cGRhdGUoZWUudikuZGlnZXN0KCksb2U9ei5jb25j'@;
put 'YXQoW29lLGVlLnZdKTtzZT1ZKG9lLHEpLGVlLms9Syh0ZSxlZS5rKS51cGRhdGUoZWUudikudXBkYXRlKHouZnJvbShbMF0pKS5kaWdlc3QoKSxlZS52PUsodGUsZWUuaykudXBkYXRlKGVlLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09c2UuY21wKHEpKTtyZXR1cm4gc2V9ZnVuY3Rpb24gVShx'@;
put 'LGVlLHRlLG9lKXtyZXR1cm4gcS50b1JlZChFLm1vbnQodGUpKS5yZWRQb3coZWUpLmZyb21SZWQoKS5tb2Qob2UpfU0uZXhwb3J0cz1mdW5jdGlvbihxLGVlLHRlLG9lLHNlKXt2YXIgaGU9aihlZSk7aWYoaGUuY3VydmUpe2lmKCJlY2RzYSIhPT1vZSYmImVjZHNhL3JzYSIhPT1vZSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oYixEKXt2YXIgSD1WW0QuY3VydmUuam9pbigiLiIpXTtpZighSCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitELmN1cnZlLmpvaW4oIi4iKSk7dmFyIGc9bmV3IGsoSCkua2V5RnJv'@;
put 'bVByaXZhdGUoRC5wcml2YXRlS2V5KS5zaWduKGIpO3JldHVybiB6LmZyb20oZy50b0RFUigpKX0ocSxoZSl9aWYoImRzYSI9PT1oZS50eXBlKXtpZigiZHNhIiE9PW9lKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihiLEQsSCl7Zm9y'@;
put 'KHZhciBOLGc9RC5wYXJhbXMucHJpdl9rZXksQz1ELnBhcmFtcy5wLFM9RC5wYXJhbXMucSx2PUQucGFyYW1zLmcscD1uZXcgRSgwKSx3PVkoYixTKS5tb2QoUyksSj0hMSxuZT1CKGcsUyxiLEgpOyExPT09SjspcD1VKHYsTj1YKFMsbmUsSCksQyxTKSwwPT09KEo9Ti5pbnZtKFMpLmltdWwo'@;
put 'dy5hZGQoZy5tdWwocCkpKS5tb2QoUykpLmNtcG4oMCkmJihKPSExLHA9bmV3IEUoMCkpO3JldHVybiBmdW5jdGlvbihkZSxmZSl7ZGU9ZGUudG9BcnJheSgpLGZlPWZlLnRvQXJyYXkoKSwxMjgmZGVbMF0mJihkZT1bMF0uY29uY2F0KGRlKSksMTI4JmZlWzBdJiYoZmU9WzBdLmNvbmNhdChm'@;
put 'ZSkpO3ZhciBMZT1bNDgsZGUubGVuZ3RoK2ZlLmxlbmd0aCs0LDIsZGUubGVuZ3RoXTtyZXR1cm4gTGU9TGUuY29uY2F0KGRlLFsyLGZlLmxlbmd0aF0sZmUpLHouZnJvbShMZSl9KHAsSil9KHEsaGUsdGUpfWlmKCJyc2EiIT09b2UmJiJlY2RzYS9yc2EiIT09b2UpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cT16LmNvbmNhdChbc2UscV0pO2Zvcih2YXIgdWU9aGUubW9kdWx1cy5ieXRlTGVuZ3RoKCksY2U9WzAsMV07cS5sZW5ndGgrY2UubGVuZ3RoKzE8dWU7KWNlLnB1c2goMjU1KTtjZS5wdXNoKDApO2Zvcih2YXIgRz0tMTsrK0c8cS5sZW5ndGg7'@;
put 'KWNlLnB1c2gocVtHXSk7cmV0dXJuIEkoY2UsaGUpfSxNLmV4cG9ydHMuZ2V0S2V5PUIsTS5leHBvcnRzLm1ha2VLZXk9WH0sNzc1MzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDM1NTApLEk9Uig2OTQ4KS5lYyxrPVIoOTgwKSxFPVIoMTMwOCk7ZnVuY3Rpb24gaihWLEIp'@;
put 'e2lmKFYuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoVi5jbXAoQik+PUIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfU0uZXhwb3J0cz1mdW5jdGlvbihWLEIsWSxYLFUpe3ZhciBxPWsoWSk7aWYoImVjIj09PXEudHlwZSl7aWYoImVjZHNhIiE9'@;
put 'PVgmJiJlY2RzYS9yc2EiIT09WCl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihjZSxHLGIpe3ZhciBEPUVbYi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCFEKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAi'@;
put 'K2IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IEkoRCkudmVyaWZ5KEcsY2UsYi5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShWLEIscSl9aWYoImRzYSI9PT1xLnR5cGUpe2lmKCJkc2EiIT09WCl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBr'@;
put 'ZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihjZSxHLGIpe3ZhciBEPWIuZGF0YS5wLEg9Yi5kYXRhLnEsTj1iLmRhdGEuZyxnPWIuZGF0YS5wdWJfa2V5LEM9ay5zaWduYXR1cmUuZGVjb2RlKGNlLCJkZXIiKSxTPUMucyx2PUMucjtqKFMsSCksaih2LEgpO3ZhciBwPUsubW9udChEKSx3PVMu'@;
put 'aW52bShIKTtyZXR1cm4gMD09PU4udG9SZWQocCkucmVkUG93KG5ldyBLKEcpLm11bCh3KS5tb2QoSCkpLmZyb21SZWQoKS5tdWwoZy50b1JlZChwKS5yZWRQb3codi5tdWwodykubW9kKEgpKS5mcm9tUmVkKCkpLm1vZChEKS5tb2QoSCkuY21wKHYpfShWLEIscSl9aWYoInJzYSIhPT1YJiYi'@;
put 'ZWNkc2EvcnNhIiE9PVgpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtCPXouY29uY2F0KFtVLEJdKTtmb3IodmFyIGVlPXEubW9kdWx1cy5ieXRlTGVuZ3RoKCksdGU9WzFdLG9lPTA7Qi5sZW5ndGgrdGUubGVuZ3RoKzI8ZWU7KXRlLnB1c2goMjU1KSxvZSsrO3Rl'@;
put 'LnB1c2goMCk7Zm9yKHZhciBzZT0tMTsrK3NlPEIubGVuZ3RoOyl0ZS5wdXNoKEJbc2VdKTt0ZT16LmZyb20odGUpO3ZhciBoZT1LLm1vbnQocS5tb2R1bHVzKTtWPShWPW5ldyBLKFYpLnRvUmVkKGhlKSkucmVkUG93KG5ldyBLKHEucHVibGljRXhwb25lbnQpKSxWPXouZnJvbShWLmZyb21S'@;
put 'ZWQoKS50b0FycmF5KCkpO3ZhciB1ZT1vZTw4PzE6MDtmb3IoZWU9TWF0aC5taW4oVi5sZW5ndGgsdGUubGVuZ3RoKSxWLmxlbmd0aCE9PXRlLmxlbmd0aCYmKHVlPTEpLHNlPS0xOysrc2U8ZWU7KXVlfD1WW3NlXV50ZVtzZV07cmV0dXJuIDA9PT11ZX19LDcyOTU6KE0sTyxSKT0+e3ZhciB6'@;
put 'PVIoODc2NCkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihLLEkpe2Zvcih2YXIgaz1NYXRoLm1pbihLLmxlbmd0aCxJLmxlbmd0aCksRT1uZXcgeihrKSxqPTA7ajxrOysrailFW2pdPUtbal1eSVtqXTtyZXR1cm4gRX19LDg3NjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUx'@;
put 'MDgpO2NvbnN0IEs9Uig5NzQyKSxJPVIoNjQ1KSxrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtPLkJ1ZmZlcj1WLE8uU2xvd0J1ZmZlcj1mdW5jdGlv'@;
put 'bihNZSl7cmV0dXJuK01lIT1NZSYmKE1lPTApLFYuYWxsb2MoK01lKX0sTy5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCBFPTIxNDc0ODM2NDc7ZnVuY3Rpb24gaihNZSl7aWYoTWU+RSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK01lKyciIGlzIGludmFsaWQgZm9yIG9w'@;
put 'dGlvbiAic2l6ZSInKTtjb25zdCBEZT1uZXcgVWludDhBcnJheShNZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihEZSxWLnByb3RvdHlwZSksRGV9ZnVuY3Rpb24gVihNZSxEZSx6ZSl7aWYoIm51bWJlciI9PXR5cGVvZiBNZSl7aWYoInN0cmluZyI9PXR5cGVvZiBEZSl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gWChNZSl9cmV0dXJuIEIoTWUsRGUsemUpfWZ1bmN0aW9uIEIoTWUsRGUsemUpe2lmKCJzdHJpbmciPT10eXBlb2YgTWUpcmV0dXJu'@;
put 'IGZ1bmN0aW9uKE10LEh0KXtpZigic3RyaW5nIj09dHlwZW9mIEh0JiYiIiE9PUh0fHwoSHQ9InV0ZjgiKSwhVi5pc0VuY29kaW5nKEh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0h0KTtjb25zdCBQdD0wfHRlKE10LEh0KTtsZXQgb249aihQdCk7Y29uc3Qg'@;
put 'Q249b24ud3JpdGUoTXQsSHQpO3JldHVybiBDbiE9PVB0JiYob249b24uc2xpY2UoMCxDbikpLG9ufShNZSxEZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KE1lKSlyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKFRlKE10LFVpbnQ4QXJyYXkpKXtjb25zdCBIdD1uZXcgVWludDhBcnJheShNdCk7cmV0'@;
put 'dXJuIHEoSHQuYnVmZmVyLEh0LmJ5dGVPZmZzZXQsSHQuYnl0ZUxlbmd0aCl9cmV0dXJuIFUoTXQpfShNZSk7aWYobnVsbD09TWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBB'@;
put 'cnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgTWUpO2lmKFRlKE1lLEFycmF5QnVmZmVyKXx8TWUmJlRlKE1lLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihUZShNZSxTaGFyZWRBcnJheUJ1ZmZlcil8'@;
put 'fE1lJiZUZShNZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gcShNZSxEZSx6ZSk7aWYoIm51bWJlciI9PXR5cGVvZiBNZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBu'@;
put 'dW1iZXInKTtjb25zdCBpdD1NZS52YWx1ZU9mJiZNZS52YWx1ZU9mKCk7aWYobnVsbCE9aXQmJml0IT09TWUpcmV0dXJuIFYuZnJvbShpdCxEZSx6ZSk7Y29uc3QgdXQ9ZnVuY3Rpb24oTXQpe2lmKFYuaXNCdWZmZXIoTXQpKXtjb25zdCBIdD0wfGVlKE10Lmxlbmd0aCksUHQ9aihIdCk7cmV0'@;
put 'dXJuIDA9PT1QdC5sZW5ndGh8fE10LmNvcHkoUHQsMCwwLEh0KSxQdH1yZXR1cm4gdm9pZCAwIT09TXQubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgTXQubGVuZ3RofHxxZShNdC5sZW5ndGgpP2ooMCk6VShNdCk6IkJ1ZmZlciI9PT1NdC50eXBlJiZBcnJheS5pc0FycmF5KE10LmRhdGEpP1Uo'@;
put 'TXQuZGF0YSk6dm9pZCAwfShNZSk7aWYodXQpcmV0dXJuIHV0O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBNZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBWLmZyb20oTWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgi'@;
put 'c3RyaW5nIiksRGUsemUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIE1lKX1mdW5j'@;
put 'dGlvbiBZKE1lKXtpZigibnVtYmVyIiE9dHlwZW9mIE1lKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoTWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK01lKyciIGlzIGludmFsaWQgZm9yIG9wdGlv'@;
put 'biAic2l6ZSInKX1mdW5jdGlvbiBYKE1lKXtyZXR1cm4gWShNZSksaihNZTwwPzA6MHxlZShNZSkpfWZ1bmN0aW9uIFUoTWUpe2NvbnN0IERlPU1lLmxlbmd0aDwwPzA6MHxlZShNZS5sZW5ndGgpLHplPWooRGUpO2ZvcihsZXQgaXQ9MDtpdDxEZTtpdCs9MSl6ZVtpdF09MjU1Jk1lW2l0XTty'@;
put 'ZXR1cm4gemV9ZnVuY3Rpb24gcShNZSxEZSx6ZSl7aWYoRGU8MHx8TWUuYnl0ZUxlbmd0aDxEZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoTWUuYnl0ZUxlbmd0aDxEZSsoemV8fDApKXRocm93IG5ldyBSYW5nZUVycm9y'@;
put 'KCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgaXQ7cmV0dXJuIGl0PXZvaWQgMD09PURlJiZ2b2lkIDA9PT16ZT9uZXcgVWludDhBcnJheShNZSk6dm9pZCAwPT09emU/bmV3IFVpbnQ4QXJyYXkoTWUsRGUpOm5ldyBVaW50OEFycmF5KE1lLERlLHplKSxPYmpl'@;
put 'Y3Quc2V0UHJvdG90eXBlT2YoaXQsVi5wcm90b3R5cGUpLGl0fWZ1bmN0aW9uIGVlKE1lKXtpZihNZT49RSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrRS50b1N0cmluZygxNikrIiBieXRlcyIp'@;
put 'O3JldHVybiAwfE1lfWZ1bmN0aW9uIHRlKE1lLERlKXtpZihWLmlzQnVmZmVyKE1lKSlyZXR1cm4gTWUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhNZSl8fFRlKE1lLEFycmF5QnVmZmVyKSlyZXR1cm4gTWUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIE1lKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBNZSk7Y29uc3QgemU9TWUubGVuZ3RoLGl0PWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1'@;
put 'bWVudHNbMl07aWYoIWl0JiYwPT09emUpcmV0dXJuIDA7bGV0IHV0PSExO2Zvcig7Oylzd2l0Y2goRGUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHplO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFBlKE1lKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpj'@;
put 'YXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnplO2Nhc2UiaGV4IjpyZXR1cm4gemU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gYmUoTWUpLmxlbmd0aDtkZWZhdWx0OmlmKHV0KXJldHVybiBpdD8tMTpQZShNZSkubGVuZ3RoO0RlPSgiIitEZSkudG9M'@;
put 'b3dlckNhc2UoKSx1dD0hMH19ZnVuY3Rpb24gb2UoTWUsRGUsemUpe2xldCBpdD0hMTtpZigodm9pZCAwPT09RGV8fERlPDApJiYoRGU9MCksRGU+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09emV8fHplPnRoaXMubGVuZ3RoKSYmKHplPXRoaXMubGVuZ3RoKSx6ZTw9MCl8fCh6ZT4+Pj0wKTw9'@;
put 'KERlPj4+PTApKXJldHVybiIiO2ZvcihNZXx8KE1lPSJ1dGY4Iik7Oylzd2l0Y2goTWUpe2Nhc2UiaGV4IjpyZXR1cm4gcCh0aGlzLERlLHplKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBnKHRoaXMsRGUsemUpO2Nhc2UiYXNjaWkiOnJldHVybiBTKHRoaXMsRGUsemUpO2Nhc2Ui'@;
put 'bGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHYodGhpcyxEZSx6ZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBOKHRoaXMsRGUsemUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gdyh0aGlzLERlLHplKTtkZWZhdWx0OmlmKGl0KXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrTWUpO01lPShNZSsiIikudG9Mb3dlckNhc2UoKSxpdD0hMH19ZnVuY3Rpb24gc2UoTWUsRGUsemUpe2NvbnN0IGl0PU1lW0RlXTtNZVtEZV09TWVbemVdLE1lW3plXT1pdH1mdW5jdGlvbiBoZShNZSxEZSx6ZSxpdCx1dCl7'@;
put 'aWYoMD09PU1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHplPyhpdD16ZSx6ZT0wKTp6ZT4yMTQ3NDgzNjQ3P3plPTIxNDc0ODM2NDc6emU8LTIxNDc0ODM2NDgmJih6ZT0tMjE0NzQ4MzY0OCkscWUoemU9K3plKSYmKHplPXV0PzA6TWUubGVuZ3RoLTEpLHplPDAmJih6'@;
put 'ZT1NZS5sZW5ndGgremUpLHplPj1NZS5sZW5ndGgpe2lmKHV0KXJldHVybi0xO3plPU1lLmxlbmd0aC0xfWVsc2UgaWYoemU8MCl7aWYoIXV0KXJldHVybi0xO3plPTB9aWYoInN0cmluZyI9PXR5cGVvZiBEZSYmKERlPVYuZnJvbShEZSxpdCkpLFYuaXNCdWZmZXIoRGUpKXJldHVybiAwPT09'@;
put 'RGUubGVuZ3RoPy0xOnVlKE1lLERlLHplLGl0LHV0KTtpZigibnVtYmVyIj09dHlwZW9mIERlKXJldHVybiBEZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP3V0P1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChNZSxEZSx6ZSk6'@;
put 'VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChNZSxEZSx6ZSk6dWUoTWUsW0RlXSx6ZSxpdCx1dCk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gdWUoTWUsRGUsemUsaXQsdXQpe2xldCBNdCxI'@;
put 'dD0xLFB0PU1lLmxlbmd0aCxvbj1EZS5sZW5ndGg7aWYodm9pZCAwIT09aXQmJigidWNzMiI9PT0oaXQ9U3RyaW5nKGl0KS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PWl0fHwidXRmMTZsZSI9PT1pdHx8InV0Zi0xNmxlIj09PWl0KSl7aWYoTWUubGVuZ3RoPDJ8fERlLmxlbmd0aDwyKXJl'@;
put 'dHVybi0xO0h0PTIsUHQvPTIsb24vPTIsemUvPTJ9ZnVuY3Rpb24gQ24oVXQsYm4pe3JldHVybiAxPT09SHQ/VXRbYm5dOlV0LnJlYWRVSW50MTZCRShibipIdCl9aWYodXQpe2xldCBVdD0tMTtmb3IoTXQ9emU7TXQ8UHQ7TXQrKylpZihDbihNZSxNdCk9PT1DbihEZSwtMT09PVV0PzA6TXQt'@;
put 'VXQpKXtpZigtMT09PVV0JiYoVXQ9TXQpLE10LVV0KzE9PT1vbilyZXR1cm4gVXQqSHR9ZWxzZS0xIT09VXQmJihNdC09TXQtVXQpLFV0PS0xfWVsc2UgZm9yKHplK29uPlB0JiYoemU9UHQtb24pLE10PXplO010Pj0wO010LS0pe2xldCBVdD0hMDtmb3IobGV0IGJuPTA7Ym48b247Ym4rKylp'@;
put 'ZihDbihNZSxNdCtibikhPT1DbihEZSxibikpe1V0PSExO2JyZWFrfWlmKFV0KXJldHVybiBNdH1yZXR1cm4tMX1mdW5jdGlvbiBjZShNZSxEZSx6ZSxpdCl7emU9TnVtYmVyKHplKXx8MDtjb25zdCB1dD1NZS5sZW5ndGgtemU7aXQ/KGl0PU51bWJlcihpdCkpPnV0JiYoaXQ9dXQpOml0PXV0'@;
put 'O2NvbnN0IE10PURlLmxlbmd0aDtsZXQgSHQ7Zm9yKGl0Pk10LzImJihpdD1NdC8yKSxIdD0wO0h0PGl0OysrSHQpe2NvbnN0IFB0PXBhcnNlSW50KERlLnN1YnN0cigyKkh0LDIpLDE2KTtpZihxZShQdCkpcmV0dXJuIEh0O01lW3plK0h0XT1QdH1yZXR1cm4gSHR9ZnVuY3Rpb24gRyhNZSxE'@;
put 'ZSx6ZSxpdCl7cmV0dXJuIEFlKFBlKERlLE1lLmxlbmd0aC16ZSksTWUsemUsaXQpfWZ1bmN0aW9uIGIoTWUsRGUsemUsaXQpe3JldHVybiBBZShmdW5jdGlvbih1dCl7Y29uc3QgTXQ9W107Zm9yKGxldCBIdD0wO0h0PHV0Lmxlbmd0aDsrK0h0KU10LnB1c2goMjU1JnV0LmNoYXJDb2RlQXQo'@;
put 'SHQpKTtyZXR1cm4gTXR9KERlKSxNZSx6ZSxpdCl9ZnVuY3Rpb24gRChNZSxEZSx6ZSxpdCl7cmV0dXJuIEFlKGJlKERlKSxNZSx6ZSxpdCl9ZnVuY3Rpb24gSChNZSxEZSx6ZSxpdCl7cmV0dXJuIEFlKGZ1bmN0aW9uKHV0LE10KXtsZXQgSHQsUHQsb247Y29uc3QgQ249W107Zm9yKGxldCBV'@;
put 'dD0wO1V0PHV0Lmxlbmd0aCYmISgoTXQtPTIpPDApOysrVXQpSHQ9dXQuY2hhckNvZGVBdChVdCksUHQ9SHQ+Pjgsb249SHQlMjU2LENuLnB1c2gob24pLENuLnB1c2goUHQpO3JldHVybiBDbn0oRGUsTWUubGVuZ3RoLXplKSxNZSx6ZSxpdCl9ZnVuY3Rpb24gTihNZSxEZSx6ZSl7cmV0dXJu'@;
put 'IEsuZnJvbUJ5dGVBcnJheSgwPT09RGUmJnplPT09TWUubGVuZ3RoP01lOk1lLnNsaWNlKERlLHplKSl9ZnVuY3Rpb24gZyhNZSxEZSx6ZSl7emU9TWF0aC5taW4oTWUubGVuZ3RoLHplKTtjb25zdCBpdD1bXTtsZXQgdXQ9RGU7Zm9yKDt1dDx6ZTspe2NvbnN0IE10PU1lW3V0XTtsZXQgSHQ9'@;
put 'bnVsbCxQdD1NdD4yMzk/NDpNdD4yMjM/MzpNdD4xOTE/MjoxO2lmKHV0K1B0PD16ZSl7bGV0IG9uLENuLFV0LGJuO3N3aXRjaChQdCl7Y2FzZSAxOk10PDEyOCYmKEh0PU10KTticmVhaztjYXNlIDI6b249TWVbdXQrMV0sMTI4PT0oMTkyJm9uKSYmKGJuPSgzMSZNdCk8PDZ8NjMmb24sYm4+'@;
put 'MTI3JiYoSHQ9Ym4pKTticmVhaztjYXNlIDM6b249TWVbdXQrMV0sQ249TWVbdXQrMl0sMTI4PT0oMTkyJm9uKSYmMTI4PT0oMTkyJkNuKSYmKGJuPSgxNSZNdCk8PDEyfCg2MyZvbik8PDZ8NjMmQ24sYm4+MjA0NyYmKGJuPDU1Mjk2fHxibj41NzM0MykmJihIdD1ibikpO2JyZWFrO2Nhc2Ug'@;
put 'NDpvbj1NZVt1dCsxXSxDbj1NZVt1dCsyXSxVdD1NZVt1dCszXSwxMjg9PSgxOTImb24pJiYxMjg9PSgxOTImQ24pJiYxMjg9PSgxOTImVXQpJiYoYm49KDE1Jk10KTw8MTh8KDYzJm9uKTw8MTJ8KDYzJkNuKTw8Nnw2MyZVdCxibj42NTUzNSYmYm48MTExNDExMiYmKEh0PWJuKSl9fW51bGw9'@;
put 'PT1IdD8oSHQ9NjU1MzMsUHQ9MSk6SHQ+NjU1MzUmJihIdC09NjU1MzYsaXQucHVzaChIdD4+PjEwJjEwMjN8NTUyOTYpLEh0PTU2MzIwfDEwMjMmSHQpLGl0LnB1c2goSHQpLHV0Kz1QdH1yZXR1cm4gZnVuY3Rpb24oTXQpe2NvbnN0IEh0PU10Lmxlbmd0aDtpZihIdDw9QylyZXR1cm4gU3Ry'@;
put 'aW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsTXQpO2xldCBQdD0iIixvbj0wO2Zvcig7b248SHQ7KVB0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxNdC5zbGljZShvbixvbis9QykpO3JldHVybiBQdH0oaXQpfU8ua01heExlbmd0aD1FLChWLlRZUEVEX0FSUkFZX1NV'@;
put 'UFBPUlQ9ZnVuY3Rpb24oKXt0cnl7Y29uc3QgTWU9bmV3IFVpbnQ4QXJyYXkoMSksRGU9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoRGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihNZSxEZSksNDI9'@;
put 'PT1NZS5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpfHx2b2lkIDA9PT16fHwiZnVuY3Rpb24iIT10eXBlb2Ygei5lcnJvcnx8ei5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1'@;
put 'LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKFYuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMu'@;
put 'YnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihWLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksVi5wb29sU2l6ZT04MTkyLFYuZnJvbT1mdW5jdGlvbihNZSxE'@;
put 'ZSx6ZSl7cmV0dXJuIEIoTWUsRGUsemUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoVi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihWLFVpbnQ4QXJyYXkpLFYuYWxsb2M9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiB1dD1EZSxNdD16ZSxZ'@;
put 'KGl0PU1lKSxpdDw9MD9qKGl0KTp2b2lkIDAhPT11dD8ic3RyaW5nIj09dHlwZW9mIE10P2ooaXQpLmZpbGwodXQsTXQpOmooaXQpLmZpbGwodXQpOmooaXQpO3ZhciBpdCx1dCxNdH0sVi5hbGxvY1Vuc2FmZT1mdW5jdGlvbihNZSl7cmV0dXJuIFgoTWUpfSxWLmFsbG9jVW5zYWZlU2xvdz1m'@;
put 'dW5jdGlvbihNZSl7cmV0dXJuIFgoTWUpfSxWLmlzQnVmZmVyPWZ1bmN0aW9uKE1lKXtyZXR1cm4gbnVsbCE9TWUmJiEwPT09TWUuX2lzQnVmZmVyJiZNZSE9PVYucHJvdG90eXBlfSxWLmNvbXBhcmU9ZnVuY3Rpb24oTWUsRGUpe2lmKFRlKE1lLFVpbnQ4QXJyYXkpJiYoTWU9Vi5mcm9tKE1l'@;
put 'LE1lLm9mZnNldCxNZS5ieXRlTGVuZ3RoKSksVGUoRGUsVWludDhBcnJheSkmJihEZT1WLmZyb20oRGUsRGUub2Zmc2V0LERlLmJ5dGVMZW5ndGgpKSwhVi5pc0J1ZmZlcihNZSl8fCFWLmlzQnVmZmVyKERlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1l'@;
put 'bnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihNZT09PURlKXJldHVybiAwO2xldCB6ZT1NZS5sZW5ndGgsaXQ9RGUubGVuZ3RoO2ZvcihsZXQgdXQ9MCxNdD1NYXRoLm1pbih6ZSxpdCk7dXQ8TXQ7Kyt1dClpZihNZVt1dF0hPT1EZVt1dF0pe3plPU1l'@;
put 'W3V0XSxpdD1EZVt1dF07YnJlYWt9cmV0dXJuIHplPGl0Py0xOml0PHplPzE6MH0sVi5pc0VuY29kaW5nPWZ1bmN0aW9uKE1lKXtzd2l0Y2goU3RyaW5nKE1lKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6'@;
put 'Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LFYuY29uY2F0PWZ1bmN0aW9uKE1lLERlKXtpZighQXJyYXkuaXNBcnJheShNZSkpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1NZS5sZW5ndGgpcmV0dXJuIFYuYWxsb2MoMCk7bGV0IHplO2lmKHZvaWQgMD09PURlKWZvcihEZT0wLHplPTA7emU8TWUubGVuZ3RoOysremUpRGUrPU1lW3plXS5sZW5ndGg7Y29u'@;
put 'c3QgaXQ9Vi5hbGxvY1Vuc2FmZShEZSk7bGV0IHV0PTA7Zm9yKHplPTA7emU8TWUubGVuZ3RoOysremUpe2xldCBNdD1NZVt6ZV07aWYoVGUoTXQsVWludDhBcnJheSkpdXQrTXQubGVuZ3RoPml0Lmxlbmd0aD8oVi5pc0J1ZmZlcihNdCl8fChNdD1WLmZyb20oTXQpKSxNdC5jb3B5KGl0LHV0'@;
put 'KSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoaXQsTXQsdXQpO2Vsc2V7aWYoIVYuaXNCdWZmZXIoTXQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtNdC5jb3B5KGl0LHV0KX11dCs9TXQubGVuZ3RofXJl'@;
put 'dHVybiBpdH0sVi5ieXRlTGVuZ3RoPXRlLFYucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxWLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXtjb25zdCBNZT10aGlzLmxlbmd0aDtpZihNZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUg'@;
put 'b2YgMTYtYml0cyIpO2ZvcihsZXQgRGU9MDtEZTxNZTtEZSs9MilzZSh0aGlzLERlLERlKzEpO3JldHVybiB0aGlzfSxWLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtjb25zdCBNZT10aGlzLmxlbmd0aDtpZihNZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBt'@;
put 'dXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2ZvcihsZXQgRGU9MDtEZTxNZTtEZSs9NClzZSh0aGlzLERlLERlKzMpLHNlKHRoaXMsRGUrMSxEZSsyKTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7Y29uc3QgTWU9dGhpcy5sZW5ndGg7aWYoTWUlOCE9'@;
put 'MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IobGV0IERlPTA7RGU8TWU7RGUrPTgpc2UodGhpcyxEZSxEZSs3KSxzZSh0aGlzLERlKzEsRGUrNiksc2UodGhpcyxEZSsyLERlKzUpLHNlKHRoaXMsRGUrMyxEZSs0'@;
put 'KTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9Vi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtjb25zdCBNZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PU1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2codGhpcywwLE1lKTpvZS5hcHBseSh0aGlzLGFyZ3Vt'@;
put 'ZW50cyl9LFYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihNZSl7aWYoIVYuaXNCdWZmZXIoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PU1lfHwwPT09Vi5jb21wYXJlKHRoaXMsTWUpfSxWLnByb3RvdHlwZS5pbnNw'@;
put 'ZWN0PWZ1bmN0aW9uKCl7bGV0IE1lPSIiO2NvbnN0IERlPU8uSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIE1lPXRoaXMudG9TdHJpbmcoImhleCIsMCxEZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5EZSYmKE1lKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK01l'@;
put 'KyI+In0sayYmKFYucHJvdG90eXBlW2tdPVYucHJvdG90eXBlLmluc3BlY3QpLFYucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oTWUsRGUsemUsaXQsdXQpe2lmKFRlKE1lLFVpbnQ4QXJyYXkpJiYoTWU9Vi5mcm9tKE1lLE1lLm9mZnNldCxNZS5ieXRlTGVuZ3RoKSksIVYuaXNCdWZmZXIo'@;
put 'TWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIE1lKTtpZih2b2lkIDA9PT1EZSYmKERlPTApLHZvaWQgMD09PXplJiYoemU9TWU/TWUubGVu'@;
put 'Z3RoOjApLHZvaWQgMD09PWl0JiYoaXQ9MCksdm9pZCAwPT09dXQmJih1dD10aGlzLmxlbmd0aCksRGU8MHx8emU+TWUubGVuZ3RofHxpdDwwfHx1dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoaXQ+PXV0JiZEZT49emUpcmV0dXJu'@;
put 'IDA7aWYoaXQ+PXV0KXJldHVybi0xO2lmKERlPj16ZSlyZXR1cm4gMTtpZih0aGlzPT09TWUpcmV0dXJuIDA7bGV0IE10PSh1dD4+Pj0wKS0oaXQ+Pj49MCksSHQ9KHplPj4+PTApLShEZT4+Pj0wKTtjb25zdCBQdD1NYXRoLm1pbihNdCxIdCksb249dGhpcy5zbGljZShpdCx1dCksQ249TWUu'@;
put 'c2xpY2UoRGUsemUpO2ZvcihsZXQgVXQ9MDtVdDxQdDsrK1V0KWlmKG9uW1V0XSE9PUNuW1V0XSl7TXQ9b25bVXRdLEh0PUNuW1V0XTticmVha31yZXR1cm4gTXQ8SHQ/LTE6SHQ8TXQ/MTowfSxWLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuLTEhPT10aGlz'@;
put 'LmluZGV4T2YoTWUsRGUsemUpfSxWLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gaGUodGhpcyxNZSxEZSx6ZSwhMCl9LFYucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gaGUodGhpcyxNZSxEZSx6ZSwhMSl9LFYucHJv'@;
put 'dG90eXBlLndyaXRlPWZ1bmN0aW9uKE1lLERlLHplLGl0KXtpZih2b2lkIDA9PT1EZSlpdD0idXRmOCIsemU9dGhpcy5sZW5ndGgsRGU9MDtlbHNlIGlmKHZvaWQgMD09PXplJiYic3RyaW5nIj09dHlwZW9mIERlKWl0PURlLHplPXRoaXMubGVuZ3RoLERlPTA7ZWxzZXtpZighaXNGaW5pdGUo'@;
put 'RGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtEZT4+Pj0wLGlzRmluaXRlKHplKT8oemU+Pj49MCx2b2lkIDA9PT1pdCYmKGl0PSJ1dGY4IikpOihpdD16ZSx6ZT12b2lk'@;
put 'IDApfWNvbnN0IHV0PXRoaXMubGVuZ3RoLURlO2lmKCh2b2lkIDA9PT16ZXx8emU+dXQpJiYoemU9dXQpLE1lLmxlbmd0aD4wJiYoemU8MHx8RGU8MCl8fERlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIp'@;
put 'O2l0fHwoaXQ9InV0ZjgiKTtsZXQgTXQ9ITE7Zm9yKDs7KXN3aXRjaChpdCl7Y2FzZSJoZXgiOnJldHVybiBjZSh0aGlzLE1lLERlLHplKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBHKHRoaXMsTWUsRGUsemUpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6'@;
put 'cmV0dXJuIGIodGhpcyxNZSxEZSx6ZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBEKHRoaXMsTWUsRGUsemUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gSCh0aGlzLE1lLERlLHplKTtkZWZhdWx0OmlmKE10KXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraXQpO2l0PSgiIitpdCkudG9Mb3dlckNhc2UoKSxNdD0hMH19LFYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDAp'@;
put 'fX07Y29uc3QgQz00MDk2O2Z1bmN0aW9uIFMoTWUsRGUsemUpe2xldCBpdD0iIjt6ZT1NYXRoLm1pbihNZS5sZW5ndGgsemUpO2ZvcihsZXQgdXQ9RGU7dXQ8emU7Kyt1dClpdCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmTWVbdXRdKTtyZXR1cm4gaXR9ZnVuY3Rpb24gdihNZSxEZSx6ZSl7'@;
put 'bGV0IGl0PSIiO3plPU1hdGgubWluKE1lLmxlbmd0aCx6ZSk7Zm9yKGxldCB1dD1EZTt1dDx6ZTsrK3V0KWl0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKE1lW3V0XSk7cmV0dXJuIGl0fWZ1bmN0aW9uIHAoTWUsRGUsemUpe2NvbnN0IGl0PU1lLmxlbmd0aDsoIURlfHxEZTwwKSYmKERlPTApLCgh'@;
put 'emV8fHplPDB8fHplPml0KSYmKHplPWl0KTtsZXQgdXQ9IiI7Zm9yKGxldCBNdD1EZTtNdDx6ZTsrK010KXV0Kz1YZVtNZVtNdF1dO3JldHVybiB1dH1mdW5jdGlvbiB3KE1lLERlLHplKXtjb25zdCBpdD1NZS5zbGljZShEZSx6ZSk7bGV0IHV0PSIiO2ZvcihsZXQgTXQ9MDtNdDxpdC5sZW5n'@;
put 'dGgtMTtNdCs9Mil1dCs9U3RyaW5nLmZyb21DaGFyQ29kZShpdFtNdF0rMjU2Kml0W010KzFdKTtyZXR1cm4gdXR9ZnVuY3Rpb24gSihNZSxEZSx6ZSl7aWYoTWUlMSE9MHx8TWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoTWUrRGU+emUpdGhyb3cg'@;
put 'bmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBuZShNZSxEZSx6ZSxpdCx1dCxNdCl7aWYoIVYuaXNCdWZmZXIoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5z'@;
put 'dGFuY2UnKTtpZihEZT51dHx8RGU8TXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHplK2l0Pk1lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gZGUoTWUsRGUsemUs'@;
put 'aXQsdXQpe0tlKERlLGl0LHV0LE1lLHplLDcpO2xldCBNdD1OdW1iZXIoRGUmQmlnSW50KDQyOTQ5NjcyOTUpKTtNZVt6ZSsrXT1NdCxNdD4+PTgsTWVbemUrK109TXQsTXQ+Pj04LE1lW3plKytdPU10LE10Pj49OCxNZVt6ZSsrXT1NdDtsZXQgSHQ9TnVtYmVyKERlPj5CaWdJbnQoMzIpJkJp'@;
put 'Z0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIE1lW3plKytdPUh0LEh0Pj49OCxNZVt6ZSsrXT1IdCxIdD4+PTgsTWVbemUrK109SHQsSHQ+Pj04LE1lW3plKytdPUh0LHplfWZ1bmN0aW9uIGZlKE1lLERlLHplLGl0LHV0KXtLZShEZSxpdCx1dCxNZSx6ZSw3KTtsZXQgTXQ9TnVtYmVyKERlJkJp'@;
put 'Z0ludCg0Mjk0OTY3Mjk1KSk7TWVbemUrN109TXQsTXQ+Pj04LE1lW3plKzZdPU10LE10Pj49OCxNZVt6ZSs1XT1NdCxNdD4+PTgsTWVbemUrNF09TXQ7bGV0IEh0PU51bWJlcihEZT4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBNZVt6ZSszXT1IdCxIdD4+PTgsTWVb'@;
put 'emUrMl09SHQsSHQ+Pj04LE1lW3plKzFdPUh0LEh0Pj49OCxNZVt6ZV09SHQsemUrOH1mdW5jdGlvbiB4ZShNZSxEZSx6ZSxpdCx1dCxNdCl7aWYoemUraXQ+TWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZih6ZTwwKXRocm93IG5ldyBSYW5n'@;
put 'ZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBMZShNZSxEZSx6ZSxpdCx1dCl7cmV0dXJuIERlPStEZSx6ZT4+Pj0wLHV0fHx4ZShNZSwwLHplLDQpLEkud3JpdGUoTWUsRGUsemUsaXQsMjMsNCksemUrNH1mdW5jdGlvbiBGZShNZSxEZSx6ZSxpdCx1dCl7cmV0dXJuIERl'@;
put 'PStEZSx6ZT4+Pj0wLHV0fHx4ZShNZSwwLHplLDgpLEkud3JpdGUoTWUsRGUsemUsaXQsNTIsOCksemUrOH1WLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihNZSxEZSl7Y29uc3QgemU9dGhpcy5sZW5ndGg7KE1lPX5+TWUpPDA/KE1lKz16ZSk8MCYmKE1lPTApOk1lPnplJiYoTWU9emUpLChE'@;
put 'ZT12b2lkIDA9PT1EZT96ZTp+fkRlKTwwPyhEZSs9emUpPDAmJihEZT0wKTpEZT56ZSYmKERlPXplKSxEZTxNZSYmKERlPU1lKTtjb25zdCBpdD10aGlzLnN1YmFycmF5KE1lLERlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGl0LFYucHJvdG90eXBlKSxpdH0sVi5wcm90b3R5cGUu'@;
put 'cmVhZFVpbnRMRT1WLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKE1lLERlLHplKXtNZT4+Pj0wLERlPj4+PTAsemV8fEooTWUsRGUsdGhpcy5sZW5ndGgpO2xldCBpdD10aGlzW01lXSx1dD0xLE10PTA7Zm9yKDsrK010PERlJiYodXQqPTI1Nik7KWl0Kz10aGlzW01lK010XSp1dDty'@;
put 'ZXR1cm4gaXR9LFYucHJvdG90eXBlLnJlYWRVaW50QkU9Vi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihNZSxEZSx6ZSl7TWU+Pj49MCxEZT4+Pj0wLHplfHxKKE1lLERlLHRoaXMubGVuZ3RoKTtsZXQgaXQ9dGhpc1tNZSstLURlXSx1dD0xO2Zvcig7RGU+MCYmKHV0Kj0yNTYpOylp'@;
put 'dCs9dGhpc1tNZSstLURlXSp1dDtyZXR1cm4gaXR9LFYucHJvdG90eXBlLnJlYWRVaW50OD1WLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDEsdGhpcy5sZW5ndGgpLHRoaXNbTWVdfSxWLnByb3RvdHlwZS5yZWFkVWludDE2TEU9'@;
put 'Vi5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSwyLHRoaXMubGVuZ3RoKSx0aGlzW01lXXx0aGlzW01lKzFdPDw4fSxWLnByb3RvdHlwZS5yZWFkVWludDE2QkU9Vi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKE1l'@;
put 'LERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSwyLHRoaXMubGVuZ3RoKSx0aGlzW01lXTw8OHx0aGlzW01lKzFdfSxWLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Vi5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMu'@;
put 'bGVuZ3RoKSwodGhpc1tNZV18dGhpc1tNZSsxXTw8OHx0aGlzW01lKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tNZSszXX0sVi5wcm90b3R5cGUucmVhZFVpbnQzMkJFPVYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlz'@;
put 'Lmxlbmd0aCksMTY3NzcyMTYqdGhpc1tNZV0rKHRoaXNbTWUrMV08PDE2fHRoaXNbTWUrMl08PDh8dGhpc1tNZSszXSl9LFYucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1VZShmdW5jdGlvbihNZSl7WWUoTWU+Pj49MCwib2Zmc2V0Iik7Y29uc3QgRGU9dGhpc1tNZV0semU9dGhpc1tNZSs3'@;
put 'XTt2b2lkIDAhPT1EZSYmdm9pZCAwIT09emV8fEplKE1lLHRoaXMubGVuZ3RoLTgpO2NvbnN0IGl0PURlKzI1Nip0aGlzWysrTWVdKzY1NTM2KnRoaXNbKytNZV0rdGhpc1srK01lXSoyKioyNCx1dD10aGlzWysrTWVdKzI1Nip0aGlzWysrTWVdKzY1NTM2KnRoaXNbKytNZV0remUqMioqMjQ7'@;
put 'cmV0dXJuIEJpZ0ludChpdCkrKEJpZ0ludCh1dCk8PEJpZ0ludCgzMikpfSksVi5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFPVVlKGZ1bmN0aW9uKE1lKXtZZShNZT4+Pj0wLCJvZmZzZXQiKTtjb25zdCBEZT10aGlzW01lXSx6ZT10aGlzW01lKzddO3ZvaWQgMCE9PURlJiZ2b2lkIDAhPT16'@;
put 'ZXx8SmUoTWUsdGhpcy5sZW5ndGgtOCk7Y29uc3QgaXQ9RGUqMioqMjQrNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt0aGlzWysrTWVdLHV0PXRoaXNbKytNZV0qMioqMjQrNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt6ZTtyZXR1cm4oQmlnSW50KGl0KTw8QmlnSW50'@;
put 'KDMyKSkrQmlnSW50KHV0KX0pLFYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihNZSxEZSx6ZSl7TWU+Pj49MCxEZT4+Pj0wLHplfHxKKE1lLERlLHRoaXMubGVuZ3RoKTtsZXQgaXQ9dGhpc1tNZV0sdXQ9MSxNdD0wO2Zvcig7KytNdDxEZSYmKHV0Kj0yNTYpOylpdCs9dGhpc1tNZStN'@;
put 'dF0qdXQ7cmV0dXJuIHV0Kj0xMjgsaXQ+PXV0JiYoaXQtPU1hdGgucG93KDIsOCpEZSkpLGl0fSxWLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oTWUsRGUsemUpe01lPj4+PTAsRGU+Pj49MCx6ZXx8SihNZSxEZSx0aGlzLmxlbmd0aCk7bGV0IGl0PURlLHV0PTEsTXQ9dGhpc1tNZSst'@;
put 'LWl0XTtmb3IoO2l0PjAmJih1dCo9MjU2KTspTXQrPXRoaXNbTWUrLS1pdF0qdXQ7cmV0dXJuIHV0Kj0xMjgsTXQ+PXV0JiYoTXQtPU1hdGgucG93KDIsOCpEZSkpLE10fSxWLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsMSx0aGlz'@;
put 'Lmxlbmd0aCksMTI4JnRoaXNbTWVdPy0xKigyNTUtdGhpc1tNZV0rMSk6dGhpc1tNZV19LFYucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKE1lLERlKXtNZT4+Pj0wLERlfHxKKE1lLDIsdGhpcy5sZW5ndGgpO2NvbnN0IHplPXRoaXNbTWVdfHRoaXNbTWUrMV08PDg7cmV0dXJuIDMy'@;
put 'NzY4JnplPzQyOTQ5MDE3NjB8emU6emV9LFYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKE1lLERlKXtNZT4+Pj0wLERlfHxKKE1lLDIsdGhpcy5sZW5ndGgpO2NvbnN0IHplPXRoaXNbTWUrMV18dGhpc1tNZV08PDg7cmV0dXJuIDMyNzY4JnplPzQyOTQ5MDE3NjB8emU6emV9LFYu'@;
put 'cHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSx0aGlzW01lXXx0aGlzW01lKzFdPDw4fHRoaXNbTWUrMl08PDE2fHRoaXNbTWUrM108PDI0fSxWLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihN'@;
put 'ZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksdGhpc1tNZV08PDI0fHRoaXNbTWUrMV08PDE2fHRoaXNbTWUrMl08PDh8dGhpc1tNZSszXX0sVi5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEU9VWUoZnVuY3Rpb24oTWUpe1llKE1lPj4+PTAsIm9mZnNldCIpO2Nv'@;
put 'bnN0IERlPXRoaXNbTWVdLHplPXRoaXNbTWUrN107cmV0dXJuIHZvaWQgMCE9PURlJiZ2b2lkIDAhPT16ZXx8SmUoTWUsdGhpcy5sZW5ndGgtOCksKEJpZ0ludCh0aGlzW01lKzRdKzI1Nip0aGlzW01lKzVdKzY1NTM2KnRoaXNbTWUrNl0rKHplPDwyNCkpPDxCaWdJbnQoMzIpKStCaWdJbnQo'@;
put 'RGUrMjU2KnRoaXNbKytNZV0rNjU1MzYqdGhpc1srK01lXSsxNjc3NzIxNip0aGlzWysrTWVdKX0pLFYucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPVVlKGZ1bmN0aW9uKE1lKXtZZShNZT4+Pj0wLCJvZmZzZXQiKTtjb25zdCBEZT10aGlzW01lXSx6ZT10aGlzW01lKzddO3ZvaWQgMCE9PURl'@;
put 'JiZ2b2lkIDAhPT16ZXx8SmUoTWUsdGhpcy5sZW5ndGgtOCk7Y29uc3QgaXQ9KERlPDwyNCkrNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt0aGlzWysrTWVdO3JldHVybihCaWdJbnQoaXQpPDxCaWdJbnQoMzIpKStCaWdJbnQoMTY3NzcyMTYqdGhpc1srK01lXSs2NTUzNip0aGlz'@;
put 'WysrTWVdKzI1Nip0aGlzWysrTWVdK3plKX0pLFYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSxJLnJlYWQodGhpcyxNZSwhMCwyMyw0KX0sVi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24o'@;
put 'TWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLE1lLCExLDIzLDQpfSxWLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDgsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLE1l'@;
put 'LCEwLDUyLDgpfSxWLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDgsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLE1lLCExLDUyLDgpfSxWLnByb3RvdHlwZS53cml0ZVVpbnRMRT1WLnByb3RvdHlwZS53cml0ZVVJbnRMRT1m'@;
put 'dW5jdGlvbihNZSxEZSx6ZSxpdCl7TWU9K01lLERlPj4+PTAsemU+Pj49MCwhaXQmJm5lKHRoaXMsTWUsRGUsemUsTWF0aC5wb3coMiw4KnplKS0xLDApO2xldCB1dD0xLE10PTA7Zm9yKHRoaXNbRGVdPTI1NSZNZTsrK010PHplJiYodXQqPTI1Nik7KXRoaXNbRGUrTXRdPU1lL3V0JjI1NTty'@;
put 'ZXR1cm4gRGUremV9LFYucHJvdG90eXBlLndyaXRlVWludEJFPVYucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKE1lLERlLHplLGl0KXtNZT0rTWUsRGU+Pj49MCx6ZT4+Pj0wLCFpdCYmbmUodGhpcyxNZSxEZSx6ZSxNYXRoLnBvdygyLDgqemUpLTEsMCk7bGV0IHV0PXplLTEsTXQ9'@;
put 'MTtmb3IodGhpc1tEZSt1dF09MjU1Jk1lOy0tdXQ+PTAmJihNdCo9MjU2KTspdGhpc1tEZSt1dF09TWUvTXQmMjU1O3JldHVybiBEZSt6ZX0sVi5wcm90b3R5cGUud3JpdGVVaW50OD1WLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+'@;
put 'PTAsemV8fG5lKHRoaXMsTWUsRGUsMSwyNTUsMCksdGhpc1tEZV09MjU1Jk1lLERlKzF9LFYucHJvdG90eXBlLndyaXRlVWludDE2TEU9Vi5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDIs'@;
put 'NjU1MzUsMCksdGhpc1tEZV09MjU1Jk1lLHRoaXNbRGUrMV09TWU+Pj44LERlKzJ9LFYucHJvdG90eXBlLndyaXRlVWludDE2QkU9Vi5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDIsNjU1'@;
put 'MzUsMCksdGhpc1tEZV09TWU+Pj44LHRoaXNbRGUrMV09MjU1Jk1lLERlKzJ9LFYucHJvdG90eXBlLndyaXRlVWludDMyTEU9Vi5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDQsNDI5NDk2'@;
put 'NzI5NSwwKSx0aGlzW0RlKzNdPU1lPj4+MjQsdGhpc1tEZSsyXT1NZT4+PjE2LHRoaXNbRGUrMV09TWU+Pj44LHRoaXNbRGVdPTI1NSZNZSxEZSs0fSxWLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPVYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBN'@;
put 'ZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tEZV09TWU+Pj4yNCx0aGlzW0RlKzFdPU1lPj4+MTYsdGhpc1tEZSsyXT1NZT4+PjgsdGhpc1tEZSszXT0yNTUmTWUsRGUrNH0sVi5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1VZShmdW5jdGlv'@;
put 'bihNZSxEZT0wKXtyZXR1cm4gZGUodGhpcyxNZSxEZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxWLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPVVlKGZ1bmN0aW9uKE1lLERlPTApe3JldHVybiBmZSh0aGlzLE1lLERlLEJpZ0ludCgwKSxCaWdJbnQoIjB4'@;
put 'ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oTWUsRGUsemUsaXQpe2lmKE1lPStNZSxEZT4+Pj0wLCFpdCl7Y29uc3QgUHQ9TWF0aC5wb3coMiw4KnplLTEpO25lKHRoaXMsTWUsRGUsemUsUHQtMSwtUHQpfWxldCB1dD0wLE10PTEsSHQ9MDtm'@;
put 'b3IodGhpc1tEZV09MjU1Jk1lOysrdXQ8emUmJihNdCo9MjU2KTspTWU8MCYmMD09PUh0JiYwIT09dGhpc1tEZSt1dC0xXSYmKEh0PTEpLHRoaXNbRGUrdXRdPShNZS9NdD4+MCktSHQmMjU1O3JldHVybiBEZSt6ZX0sVi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihNZSxEZSx6ZSxp'@;
put 'dCl7aWYoTWU9K01lLERlPj4+PTAsIWl0KXtjb25zdCBQdD1NYXRoLnBvdygyLDgqemUtMSk7bmUodGhpcyxNZSxEZSx6ZSxQdC0xLC1QdCl9bGV0IHV0PXplLTEsTXQ9MSxIdD0wO2Zvcih0aGlzW0RlK3V0XT0yNTUmTWU7LS11dD49MCYmKE10Kj0yNTYpOylNZTwwJiYwPT09SHQmJjAhPT10'@;
put 'aGlzW0RlK3V0KzFdJiYoSHQ9MSksdGhpc1tEZSt1dF09KE1lL010Pj4wKS1IdCYyNTU7cmV0dXJuIERlK3plfSxWLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwxLDEyNywtMTI4KSxNZTwwJiYo'@;
put 'TWU9MjU1K01lKzEpLHRoaXNbRGVdPTI1NSZNZSxEZSsxfSxWLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tEZV09MjU1Jk1lLHRoaXNbRGUrMV09TWU+'@;
put 'Pj44LERlKzJ9LFYucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0RlXT1NZT4+PjgsdGhpc1tEZSsxXT0yNTUmTWUsRGUrMn0sVi5wcm90b3R5cGUud3Jp'@;
put 'dGVJbnQzMkxFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW0RlXT0yNTUmTWUsdGhpc1tEZSsxXT1NZT4+PjgsdGhpc1tEZSsyXT1NZT4+PjE2LHRoaXNbRGUrM109TWU+Pj4y'@;
put 'NCxEZSs0fSxWLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLE1lPDAmJihNZT00Mjk0OTY3Mjk1K01lKzEpLHRoaXNbRGVdPU1lPj4+MjQsdGhp'@;
put 'c1tEZSsxXT1NZT4+PjE2LHRoaXNbRGUrMl09TWU+Pj44LHRoaXNbRGUrM109MjU1Jk1lLERlKzR9LFYucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT1VZShmdW5jdGlvbihNZSxEZT0wKXtyZXR1cm4gZGUodGhpcyxNZSxEZSwtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQo'@;
put 'IjB4N2ZmZmZmZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRT1VZShmdW5jdGlvbihNZSxEZT0wKXtyZXR1cm4gZmUodGhpcyxNZSxEZSwtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90'@;
put 'eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIExlKHRoaXMsTWUsRGUsITAsemUpfSxWLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBMZSh0aGlzLE1lLERlLCExLHplKX0sVi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1m'@;
put 'dW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIEZlKHRoaXMsTWUsRGUsITAsemUpfSxWLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gRmUodGhpcyxNZSxEZSwhMSx6ZSl9LFYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oTWUsRGUsemUsaXQpe2lmKCFW'@;
put 'LmlzQnVmZmVyKE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZih6ZXx8KHplPTApLGl0fHwwPT09aXR8fChpdD10aGlzLmxlbmd0aCksRGU+PU1lLmxlbmd0aCYmKERlPU1lLmxlbmd0aCksRGV8fChEZT0wKSxpdD4wJiZpdDx6ZSYmKGl0'@;
put 'PXplKSxpdD09PXplfHwwPT09TWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoRGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHplPDB8fHplPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXgg'@;
put 'b3V0IG9mIHJhbmdlIik7aWYoaXQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtpdD50aGlzLmxlbmd0aCYmKGl0PXRoaXMubGVuZ3RoKSxNZS5sZW5ndGgtRGU8aXQtemUmJihpdD1NZS5sZW5ndGgtRGUremUpO2NvbnN0IHV0PWl0LXplO3JldHVy'@;
put 'biB0aGlzPT09TWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihEZSx6ZSxpdCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoTWUsdGhpcy5zdWJhcnJheSh6ZSxpdCksRGUpLHV0fSxWLnByb3RvdHlwZS5m'@;
put 'aWxsPWZ1bmN0aW9uKE1lLERlLHplLGl0KXtpZigic3RyaW5nIj09dHlwZW9mIE1lKXtpZigic3RyaW5nIj09dHlwZW9mIERlPyhpdD1EZSxEZT0wLHplPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHplJiYoaXQ9emUsemU9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PWl0JiYic3RyaW5n'@;
put 'IiE9dHlwZW9mIGl0KXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIGl0JiYhVi5pc0VuY29kaW5nKGl0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2l0KTtpZigxPT09TWUubGVuZ3Ro'@;
put 'KXtjb25zdCBNdD1NZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1pdCYmTXQ8MTI4fHwibGF0aW4xIj09PWl0KSYmKE1lPU10KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgTWU/TWUmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiBNZSYmKE1lPU51bWJlcihNZSkpO2lmKERlPDB8fHRoaXMubGVuZ3Ro'@;
put 'PERlfHx0aGlzLmxlbmd0aDx6ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoemU8PURlKXJldHVybiB0aGlzO2xldCB1dDtpZihEZT4+Pj0wLHplPXZvaWQgMD09PXplP3RoaXMubGVuZ3RoOnplPj4+MCxNZXx8KE1lPTApLCJudW1iZXIiPT10eXBlb2Yg'@;
put 'TWUpZm9yKHV0PURlO3V0PHplOysrdXQpdGhpc1t1dF09TWU7ZWxzZXtjb25zdCBNdD1WLmlzQnVmZmVyKE1lKT9NZTpWLmZyb20oTWUsaXQpLEh0PU10Lmxlbmd0aDtpZigwPT09SHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK01lKyciIGlzIGludmFsaWQgZm9yIGFyZ3Vt'@;
put 'ZW50ICJ2YWx1ZSInKTtmb3IodXQ9MDt1dDx6ZS1EZTsrK3V0KXRoaXNbdXQrRGVdPU10W3V0JUh0XX1yZXR1cm4gdGhpc307Y29uc3QgT2U9e307ZnVuY3Rpb24gamUoTWUsRGUsemUpe09lW01lXT1jbGFzcyBleHRlbmRzIHple2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkodGhpcywibWVzc2FnZSIse3ZhbHVlOkRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0aGlzLm5hbWU9YCR7dGhpcy5uYW1lfSBbJHtNZX1dYCxkZWxldGUgdGhpcy5uYW1lfWdldCBjb2RlKCl7cmV0dXJuIE1lfXNldCBjb2Rl'@;
put 'KGl0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29kZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml0LHdyaXRhYmxlOiEwfSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske01lfV06ICR7dGhpcy5tZXNzYWdlfWB9fX1mdW5jdGlvbiBXZShN'@;
put 'ZSl7bGV0IERlPSIiLHplPU1lLmxlbmd0aDtjb25zdCBpdD0iLSI9PT1NZVswXT8xOjA7Zm9yKDt6ZT49aXQrNDt6ZS09MylEZT1gXyR7TWUuc2xpY2UoemUtMyx6ZSl9JHtEZX1gO3JldHVybmAke01lLnNsaWNlKDAsemUpfSR7RGV9YH1mdW5jdGlvbiBLZShNZSxEZSx6ZSxpdCx1dCxNdCl7'@;
put 'aWYoTWU+emV8fE1lPERlKXtjb25zdCBIdD0iYmlnaW50Ij09dHlwZW9mIERlPyJuIjoiIjtsZXQgUHQ7dGhyb3cgUHQ9TXQ+Mz8wPT09RGV8fERlPT09QmlnSW50KDApP2A+PSAwJHtIdH0gYW5kIDwgMiR7SHR9ICoqICR7OCooTXQrMSl9JHtIdH1gOmA+PSAtKDIke0h0fSAqKiAkezgqKE10'@;
put 'KzEpLTF9JHtIdH0pIGFuZCA8IDIgKiogJHs4KihNdCsxKS0xfSR7SHR9YDpgPj0gJHtEZX0ke0h0fSBhbmQgPD0gJHt6ZX0ke0h0fWAsbmV3IE9lLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIixQdCxNZSl9dmFyIEh0LFB0LG9uO0h0PWl0LG9uPU10LFllKFB0PXV0LCJvZmZzZXQiKSx2b2lk'@;
put 'IDAhPT1IdFtQdF0mJnZvaWQgMCE9PUh0W1B0K29uXXx8SmUoUHQsSHQubGVuZ3RoLShvbisxKSl9ZnVuY3Rpb24gWWUoTWUsRGUpe2lmKCJudW1iZXIiIT10eXBlb2YgTWUpdGhyb3cgbmV3IE9lLkVSUl9JTlZBTElEX0FSR19UWVBFKERlLCJudW1iZXIiLE1lKX1mdW5jdGlvbiBKZShNZSxE'@;
put 'ZSx6ZSl7dGhyb3cgTWF0aC5mbG9vcihNZSkhPT1NZT8oWWUoTWUsemUpLG5ldyBPZS5FUlJfT1VUX09GX1JBTkdFKHplfHwib2Zmc2V0IiwiYW4gaW50ZWdlciIsTWUpKTpEZTwwP25ldyBPZS5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFM6bmV3IE9lLkVSUl9PVVRfT0ZfUkFOR0UoemV8fCJv'@;
put 'ZmZzZXQiLGA+PSAke3plPzE6MH0gYW5kIDw9ICR7RGV9YCxNZSl9amUoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsZnVuY3Rpb24oTWUpe3JldHVybiBNZT9gJHtNZX0gaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYDoiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVm'@;
put 'ZmVyIGJvdW5kcyJ9LFJhbmdlRXJyb3IpLGplKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oTWUsRGUpe3JldHVybmBUaGUgIiR7TWV9IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIERlfWB9LFR5cGVFcnJvciksamUoIkVS'@;
put 'Ul9PVVRfT0ZfUkFOR0UiLGZ1bmN0aW9uKE1lLERlLHplKXtsZXQgaXQ9YFRoZSB2YWx1ZSBvZiAiJHtNZX0iIGlzIG91dCBvZiByYW5nZS5gLHV0PXplO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHplKSYmTWF0aC5hYnMoemUpPjQyOTQ5NjcyOTY/dXQ9V2UoU3RyaW5nKHplKSk6ImJpZ2lu'@;
put 'dCI9PXR5cGVvZiB6ZSYmKHV0PVN0cmluZyh6ZSksKHplPkJpZ0ludCgyKSoqQmlnSW50KDMyKXx8emU8LShCaWdJbnQoMikqKkJpZ0ludCgzMikpKSYmKHV0PVdlKHV0KSksdXQrPSJuIiksaXQrPWAgSXQgbXVzdCBiZSAke0RlfS4gUmVjZWl2ZWQgJHt1dH1gLGl0fSxSYW5nZUVycm9yKTtj'@;
put 'b25zdCBsdD0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFBlKE1lLERlKXtsZXQgemU7RGU9RGV8fDEvMDtjb25zdCBpdD1NZS5sZW5ndGg7bGV0IHV0PW51bGw7Y29uc3QgTXQ9W107Zm9yKGxldCBIdD0wO0h0PGl0OysrSHQpe2lmKHplPU1lLmNoYXJDb2RlQXQoSHQpLHplPjU1Mjk1'@;
put 'JiZ6ZTw1NzM0NCl7aWYoIXV0KXtpZih6ZT41NjMxOSl7KERlLT0zKT4tMSYmTXQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoSHQrMT09PWl0KXsoRGUtPTMpPi0xJiZNdC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX11dD16ZTtjb250aW51ZX1pZih6ZTw1NjMyMCl7KERlLT0z'@;
put 'KT4tMSYmTXQucHVzaCgyMzksMTkxLDE4OSksdXQ9emU7Y29udGludWV9emU9NjU1MzYrKHV0LTU1Mjk2PDwxMHx6ZS01NjMyMCl9ZWxzZSB1dCYmKERlLT0zKT4tMSYmTXQucHVzaCgyMzksMTkxLDE4OSk7aWYodXQ9bnVsbCx6ZTwxMjgpe2lmKChEZS09MSk8MClicmVhaztNdC5wdXNoKHpl'@;
put 'KX1lbHNlIGlmKHplPDIwNDgpe2lmKChEZS09Mik8MClicmVhaztNdC5wdXNoKHplPj42fDE5Miw2MyZ6ZXwxMjgpfWVsc2UgaWYoemU8NjU1MzYpe2lmKChEZS09Myk8MClicmVhaztNdC5wdXNoKHplPj4xMnwyMjQsemU+PjYmNjN8MTI4LDYzJnplfDEyOCl9ZWxzZXtpZighKHplPDExMTQx'@;
put 'MTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKERlLT00KTwwKWJyZWFrO010LnB1c2goemU+PjE4fDI0MCx6ZT4+MTImNjN8MTI4LHplPj42JjYzfDEyOCw2MyZ6ZXwxMjgpfX1yZXR1cm4gTXR9ZnVuY3Rpb24gYmUoTWUpe3JldHVybiBLLnRvQnl0ZUFycmF5'@;
put 'KGZ1bmN0aW9uKERlKXtpZigoRGU9KERlPURlLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKGx0LCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtEZS5sZW5ndGglNCE9MDspRGUrPSI9IjtyZXR1cm4gRGV9KE1lKSl9ZnVuY3Rpb24gQWUoTWUsRGUsemUsaXQpe2xldCB1dDtmb3Io'@;
put 'dXQ9MDt1dDxpdCYmISh1dCt6ZT49RGUubGVuZ3RofHx1dD49TWUubGVuZ3RoKTsrK3V0KURlW3V0K3plXT1NZVt1dF07cmV0dXJuIHV0fWZ1bmN0aW9uIFRlKE1lLERlKXtyZXR1cm4gTWUgaW5zdGFuY2VvZiBEZXx8bnVsbCE9TWUmJm51bGwhPU1lLmNvbnN0cnVjdG9yJiZudWxsIT1NZS5j'@;
put 'b25zdHJ1Y3Rvci5uYW1lJiZNZS5jb25zdHJ1Y3Rvci5uYW1lPT09RGUubmFtZX1mdW5jdGlvbiBxZShNZSl7cmV0dXJuIE1lIT1NZX1jb25zdCBYZT1mdW5jdGlvbigpe2NvbnN0IE1lPSIwMTIzNDU2Nzg5YWJjZGVmIixEZT1uZXcgQXJyYXkoMjU2KTtmb3IobGV0IHplPTA7emU8MTY7Kyt6'@;
put 'ZSl7Y29uc3QgaXQ9MTYqemU7Zm9yKGxldCB1dD0wO3V0PDE2OysrdXQpRGVbaXQrdXRdPU1lW3plXStNZVt1dF19cmV0dXJuIERlfSgpO2Z1bmN0aW9uIFVlKE1lKXtyZXR1cm4gdHlwZW9mIEJpZ0ludD4idSI/aHQ6TWV9ZnVuY3Rpb24gaHQoKXt0aHJvdyBuZXcgRXJyb3IoIkJpZ0ludCBu'@;
put 'b3Qgc3VwcG9ydGVkIil9fSwxOTI0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyMTApLEs9Uig1NTU5KSxJPUsoeigiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO00uZXhwb3J0cz1mdW5jdGlvbihrLEUpe3ZhciBqPXooaywhIUUpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBqJiZJKGssIi5wcm90b3R5cGUuIik+LTE/SyhqKTpqfX0sNTU1OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODYxMiksSz1SKDIxMCksST1LKCIlRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JSIpLGs9SygiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSIpLEU9SygiJVJlZmxl'@;
put 'Y3QuYXBwbHklIiwhMCl8fHouY2FsbChrLEkpLGo9SygiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIiwhMCksVj1LKCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSIsITApLEI9SygiJU1hdGgubWF4JSIpO2lmKFYpdHJ5e1Yoe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7Vj1udWxs'@;
put 'fU0uZXhwb3J0cz1mdW5jdGlvbihYKXt2YXIgVT1FKHosayxhcmd1bWVudHMpO3JldHVybiBqJiZWJiZqKFUsImxlbmd0aCIpLmNvbmZpZ3VyYWJsZSYmVihVLCJsZW5ndGgiLHt2YWx1ZToxK0IoMCxYLmxlbmd0aC0oYXJndW1lbnRzLmxlbmd0aC0xKSl9KSxVfTt2YXIgWT1mdW5jdGlvbigp'@;
put 'e3JldHVybiBFKHosSSxhcmd1bWVudHMpfTtWP1YoTS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOll9KTpNLmV4cG9ydHMuYXBwbHk9WX0sMTAyNzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDI4MzApLlRyYW5zZm9ybSxJPVIoMjU1MykuU3RyaW5nRGVjb2RlcjtmdW5jdGlv'@;
put 'biBrKEUpe0suY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgRSx0aGlzLmhhc2hNb2RlP3RoaXNbRV09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWws'@;
put 'dGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9Uig1NzE3KShrLEspLGsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihFLGosVil7InN0cmluZyI9PXR5cGVvZiBFJiYoRT16LmZyb20oRSxqKSk7dmFyIEI9dGhpcy5fdXBkYXRlKEUpO3Jl'@;
put 'dHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KFYmJihCPXRoaXMuX3RvU3RyaW5nKEIsVikpLEIpfSxrLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30say5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRo'@;
put 'IHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxrLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LGsucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5l'@;
put 'dyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0say5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihFLGosVil7dmFyIEI7dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKEUpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUoRSkpfWNhdGNoKFkp'@;
put 'e0I9WX1maW5hbGx5e1YoQil9fSxrLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oRSl7dmFyIGo7dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goVil7aj1WfUUoail9LGsucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKEUpe3ZhciBqPXRoaXMuX19maW5hbCgp'@;
put 'fHx6LmFsbG9jKDApO3JldHVybiBFJiYoaj10aGlzLl90b1N0cmluZyhqLEUsITApKSxqfSxrLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oRSxqLFYpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBJKGopLHRoaXMuX2VuY29kaW5nPWopLHRoaXMuX2VuY29kaW5n'@;
put 'IT09ail0aHJvdyBuZXcgRXJyb3IoImNhbid0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgQj10aGlzLl9kZWNvZGVyLndyaXRlKEUpO3JldHVybiBWJiYoQis9dGhpcy5fZGVjb2Rlci5lbmQoKSksQn0sTS5leHBvcnRzPWt9LDEwNDg6TT0+e00uZXhwb3J0cz1mdW5jdGlvbihSLHope2Zvcih2'@;
put 'YXIgSz1bXSxJPTA7STxSLmxlbmd0aDtJKyspe3ZhciBrPXooUltJXSxJKTtPKGspP0sucHVzaC5hcHBseShLLGspOksucHVzaChrKX1yZXR1cm4gS307dmFyIE89QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oUil7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9T'@;
put 'dHJpbmcuY2FsbChSKX19LDUxMDg6KE0sTyxSKT0+e3ZhciB6PVIoOTUzOSksSz1SKDkyODIpO2Z1bmN0aW9uIEkoKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX12YXIgayxFPUFycmF5LnByb3RvdHlwZS5zbGljZSxqPXt9O2s9dm9pZCAwIT09Ui5nJiZSLmcuY29uc29sZT9SLmcuY29u'@;
put 'c29sZTp0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNvbnNvbGU/d2luZG93LmNvbnNvbGU6e307Zm9yKHZhciBWPVtbZnVuY3Rpb24oKXt9LCJsb2ciXSxbZnVuY3Rpb24oKXtrLmxvZy5hcHBseShrLGFyZ3VtZW50cyl9LCJpbmZvIl0sW2Z1bmN0aW9uKCl7ay5sb2cuYXBwbHkoayxhcmd1'@;
put 'bWVudHMpfSwid2FybiJdLFtmdW5jdGlvbigpe2sud2Fybi5hcHBseShrLGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbihxKXtqW3FdPUkoKX0sInRpbWUiXSxbZnVuY3Rpb24ocSl7dmFyIGVlPWpbcV07aWYoIWVlKXRocm93IG5ldyBFcnJvcigiTm8gc3VjaCBsYWJlbDogIitxKTtk'@;
put 'ZWxldGUgaltxXTt2YXIgdGU9SSgpLWVlO2subG9nKHErIjogIit0ZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24oKXt2YXIgcT1uZXcgRXJyb3I7cS5uYW1lPSJUcmFjZSIscS5tZXNzYWdlPXouZm9ybWF0LmFwcGx5KG51bGwsYXJndW1lbnRzKSxrLmVycm9yKHEuc3RhY2spfSwidHJh'@;
put 'Y2UiXSxbZnVuY3Rpb24ocSl7ay5sb2coei5pbnNwZWN0KHEpKyJcbiIpfSwiZGlyIl0sW2Z1bmN0aW9uKHEpe2lmKCFxKXt2YXIgZWU9RS5jYWxsKGFyZ3VtZW50cywxKTtLLm9rKCExLHouZm9ybWF0LmFwcGx5KG51bGwsZWUpKX19LCJhc3NlcnQiXV0sQj0wO0I8Vi5sZW5ndGg7QisrKXt2'@;
put 'YXIgWT1WW0JdLFU9WVsxXTtrW1VdfHwoa1tVXT1ZWzBdKX1NLmV4cG9ydHM9a30sNjM5MzooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDY5NDgpLEk9Uig2NDI2KTtNLmV4cG9ydHM9ZnVuY3Rpb24oVil7cmV0dXJuIG5ldyBFKFYpfTt2YXIgaz17c2VjcDI1NmsxOntuYW1l'@;
put 'OiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUx'@;
put 'OSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiBFKFYpe3RoaXMuY3VydmVUeXBlPWtbVl0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFt'@;
put 'ZTpWfSksdGhpcy5jdXJ2ZT1uZXcgSy5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIGooVixCLFkpe0FycmF5LmlzQXJyYXkoVil8fChWPVYudG9BcnJheSgpKTt2YXIgWD1uZXcgeihWKTtpZihZJiZYLmxlbmd0aDxZKXt2YXIgVT1uZXcgeihZLVgu'@;
put 'bGVuZ3RoKTtVLmZpbGwoMCksWD16LmNvbmNhdChbVSxYXSl9cmV0dXJuIEI/WC50b1N0cmluZyhCKTpYfWsucDIyND1rLnNlY3AyMjRyMSxrLnAyNTY9ay5zZWNwMjU2cjE9ay5wcmltZTI1NnYxLGsucDE5Mj1rLnNlY3AxOTJyMT1rLnByaW1lMTkydjEsay5wMzg0PWsuc2VjcDM4NHIxLGsu'@;
put 'cDUyMT1rLnNlY3A1MjFyMSxFLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oVixCKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KFYsQil9LEUucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oVixCLFkpe3Jl'@;
put 'dHVybiBCPUJ8fCJ1dGY4Iix6LmlzQnVmZmVyKFYpfHwoVj1uZXcgeihWLEIpKSxqKHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhWKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLFksdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LEUucHJvdG90eXBl'@;
put 'LmdldFB1YmxpY0tleT1mdW5jdGlvbihWLEIpe3ZhciBZPXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09QiwhMCk7cmV0dXJuImh5YnJpZCI9PT1CJiYoWVswXT1ZW1kubGVuZ3RoLTFdJTI/Nzo2KSxqKFksVil9LEUucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24o'@;
put 'Vil7cmV0dXJuIGoodGhpcy5rZXlzLmdldFByaXZhdGUoKSxWKX0sRS5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKFYsQil7cmV0dXJuIEI9Qnx8InV0ZjgiLHouaXNCdWZmZXIoVil8fChWPW5ldyB6KFYsQikpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKFYpLHRoaXN9LEUucHJv'@;
put 'dG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oVixCKXtCPUJ8fCJ1dGY4Iix6LmlzQnVmZmVyKFYpfHwoVj1uZXcgeihWLEIpKTt2YXIgWT1uZXcgSShWKTtyZXR1cm4gWT1ZLnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBv'@;
put 'cnRQcml2YXRlKFkpLHRoaXN9fSw2NDI2OmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1'@;
put 'bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAs'@;
put 'dGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9m'@;
put 'IHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDg2MjMpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVu'@;
put 'Y3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1u'@;
put 'ZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5'@;
put 'KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMu'@;
put 'X2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlb'@;
put 'MF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9'@;
put 'ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5s'@;
put 'ZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1'@;
put 'bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro'@;
put 'KTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMu'@;
put 'd29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jk'@;
put 'c1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJy'@;
put 'YXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09'@;
put 'MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3'@;
put 'Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9'@;
put 'TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUs'@;
put 'Zy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFy'@;
put 'cmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3Zh'@;
put 'ciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3Io'@;
put 'O3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRo'@;
put 'aXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAw'@;
put 'MDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1'@;
put 'MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0'@;
put 'ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5s'@;
put 'ZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihm'@;
put 'ZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAw'@;
put 'IT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3cr'@;
put 'Kyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYm'@;
put 'KFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdh'@;
put 'dGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVy'@;
put 'biAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlz'@;
put 'LndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5l'@;
put 'Z2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9B'@;
put 'cnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0'@;
put 'aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1'@;
put 'KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5f'@;
put 'Y291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9'@;
put 'MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZD'@;
put 'KSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1m'@;
put 'dW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5j'@;
put 'dGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVy'@;
put 'biB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNb'@;
put 'dGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdh'@;
put 'dGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5n'@;
put 'Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndv'@;
put 'cmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUo'@;
put 'KS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lm'@;
put 'KHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkp'@;
put 'LHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcu'@;
put 'bGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0t'@;
put 'O2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0'@;
put 'aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0x'@;
put 'LHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtm'@;
put 'b3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10p'@;
put 'K3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3Rv'@;
put 'dHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxD'@;
put 'PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRo'@;
put 'aXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1w'@;
put 'KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhp'@;
put 'cy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pd'@;
put 'PVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5j'@;
put 'dGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsSmU9S2U+Pj4xMyxsdD0wfEpbM10s'@;
put 'UGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0LE10PWl0Pj4+MTMsSHQ9MHxKWzhdLFB0PTgx'@;
put 'OTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5'@;
put 'MSZfdCxtbj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5'@;
put 'MSZSbixQbj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGgu'@;
put 'aW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7'@;
put 'dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4'@;
put 'NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAs'@;
put 'eHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoSmUsZnQpfDAsdz13'@;
put 'K01hdGguaW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1w'@;
put 'K01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11'@;
put 'bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUs'@;
put 'WHQpfDApK01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11'@;
put 'bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9'@;
put 'KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwo'@;
put 'UGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwoSmUsTnQpfDAsdz13K01hdGguaW11bChKZSxt'@;
put 'bil8MCx2PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZ'@;
put 'dCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1h'@;
put 'dGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11'@;
put 'bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRo'@;
put 'LmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVu'@;
put 'KSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwo'@;
put 'cWUsbW4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChKZSxw'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkx'@;
put 'JihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkr'@;
put 'TWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRl'@;
put 'LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQp'@;
put 'fDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3'@;
put 'PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxQbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxQbil8MCkrKHA+Pj4xMyl8MCkr'@;
put 'KEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwo'@;
put 'b24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChE'@;
put 'ZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxKdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12'@;
put 'K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUG4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0'@;
put 'aC5pbXVsKFdlLFBuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+'@;
put 'MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3Qp'@;
put 'fDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxKdCl8'@;
put 'MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGgu'@;
put 'aW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFBuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxQbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11'@;
put 'bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQp'@;
put 'LHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13'@;
put 'K01hdGguaW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0'@;
put 'aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoUGUsUG4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFBuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEplLGxuKXwwKSk8PDEzKXwwO2ZlPSgo'@;
put 'dz13K01hdGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGgu'@;
put 'aW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUG4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFBuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGgu'@;
put 'aW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxKdCkpK01hdGguaW11bChibixJ'@;
put 'dCl8MCx3PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDAp'@;
put 'K01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKFVlLFBuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxQbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtm'@;
put 'ZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2'@;
put 'PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUG4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLFBuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkr'@;
put 'TWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11'@;
put 'bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsUG4pfDApK01hdGguaW11bChNdCwk'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKE10LFBuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFBuKXwwKStNYXRo'@;
put 'LmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixQbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4p'@;
put 'fDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsUG4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sUG4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5'@;
put 'MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkx'@;
put 'JihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1L'@;
put 'cixkZVs1XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgr'@;
put 'KyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7'@;
put 'cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0w'@;
put 'LGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSoo'@;
put 'MHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndv'@;
put 'cmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMu'@;
put 'cmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1m'@;
put 'dW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3Io'@;
put 'dmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4'@;
put 'ZStPZStKXSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9SmUpfX0sc2UucHJvdG90'@;
put 'eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0w'@;
put 'O3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0'@;
put 'aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNb'@;
put 'Mip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7Uzxn'@;
put 'O1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxk'@;
put 'ZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRo'@;
put 'aXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJl'@;
put 'dHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0'@;
put 'aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShu'@;
put 'dWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51'@;
put 'bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tT'@;
put 'XT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11'@;
put 'bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0'@;
put 'aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxD'@;
put 'Lmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8y'@;
put 'NixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRo'@;
put 'aXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNo'@;
put 'bG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5t'@;
put 'aW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMu'@;
put 'bGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8'@;
put 'fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVu'@;
put 'Z3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5w'@;
put 'cm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0'@;
put 'aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5s'@;
put 'ZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcp'@;
put 'fSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1n'@;
put 'LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFy'@;
put 'IEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3Ro'@;
put 'LEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyks'@;
put 'dGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108'@;
put 'MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0'@;
put 'aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCks'@;
put 'dGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0'@;
put 'aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxw'@;
put 'PWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSku'@;
put 'bGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7'@;
put 'Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRp'@;
put 'dmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxs'@;
put 'LG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcs'@;
put 'QyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9k'@;
put 'IiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2'@;
put 'LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5t'@;
put 'b2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2Iiwh'@;
put 'MSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlv'@;
put 'bihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9D'@;
put 'LmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53'@;
put 'b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVn'@;
put 'fXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgp'@;
put 'O0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9u'@;
put 'ZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZl'@;
put 'KSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3'@;
put 'Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJ'@;
put 'KDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zv'@;
put 'cih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7Kytm'@;
put 'ZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBu'@;
put 'KDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2'@;
put 'ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztD'@;
put 'PVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24o'@;
put 'Zyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIg'@;
put 'Sj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYw'@;
put 'PT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7'@;
put 'UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRp'@;
put 'dmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxl'@;
put 'bmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVh'@;
put 'a319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcp'@;
put 'Pj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJv'@;
put 'dG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5l'@;
put 'cT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEko'@;
put 'MD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMg'@;
put 'aW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxy'@;
put 'ZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0s'@;
put 'RS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVk'@;
put 'U3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxn'@;
put 'KX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVk'@;
put 'TXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl'@;
put 'cnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0'@;
put 'aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5y'@;
put 'ZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMu'@;
put 'cmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBu'@;
put 'dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5w'@;
put 'b3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMu'@;
put 'bikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2Fs'@;
put 'bCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7'@;
put 'dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNo'@;
put 'aWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwo'@;
put 'dGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5'@;
put 'KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFy'@;
put 'IHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5p'@;
put 'dXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtw'@;
put 'KyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53'@;
put 'b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0'@;
put 'aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgt'@;
put 'LSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMm'@;
put 'djt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcg'@;
put 'RztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJl'@;
put 'ZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRp'@;
put 'dmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSku'@;
put 'X2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQo'@;
put 'Qyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMu'@;
put 'bSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJp'@;
put 'ZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9u'@;
put 'KGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMl'@;
put 'Mj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3'@;
put 'PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3Io'@;
put 'dmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9PU9lLmNtcCh3KTtqZSsrKU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10'@;
put 'aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9'@;
put 'PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9u'@;
put 'ZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2'@;
put 'KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10'@;
put 'aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3Zh'@;
put 'ciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNv'@;
put 'bnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEs'@;
put 'Zzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5j'@;
put 'bXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlz'@;
put 'LnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5f'@;
put 'Zm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sMzQ4MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIo'@;
put 'NTcxNyksSz1SKDIzMTgpLEk9Uig5Nzg1KSxrPVIoOTA3MiksRT1SKDEwMjcpO2Z1bmN0aW9uIGooVil7RS5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Vn16KGosRSksai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9oYXNoLnVwZGF0ZShWKX0sai5wcm90b3R5'@;
put 'cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LE0uZXhwb3J0cz1mdW5jdGlvbihWKXtyZXR1cm4ibWQ1Ij09PShWPVYudG9Mb3dlckNhc2UoKSk/bmV3IEs6InJtZDE2MCI9PT1WfHwicmlwZW1kMTYwIj09PVY/bmV3IEk6bmV3IGooayhWKSl9fSw4MDI4'@;
put 'OihNLE8sUik9Pnt2YXIgej1SKDIzMTgpO00uZXhwb3J0cz1mdW5jdGlvbihLKXtyZXR1cm4obmV3IHopLnVwZGF0ZShLKS5kaWdlc3QoKX19LDgzNTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU3MTcpLEs9UigxMDMxKSxJPVIoMTAyNyksaz1SKDk1MDkpLkJ1ZmZlcixFPVIo'@;
put 'ODAyOCksaj1SKDk3ODUpLFY9Uig5MDcyKSxCPWsuYWxsb2MoMTI4KTtmdW5jdGlvbiBZKFgsVSl7SS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgVSYmKFU9ay5mcm9tKFUpKTt2YXIgcT0ic2hhNTEyIj09PVh8fCJzaGEzODQiPT09WD8xMjg6NjQ7dGhpcy5fYWxnPVgs'@;
put 'dGhpcy5fa2V5PVUsVS5sZW5ndGg+cT9VPSgicm1kMTYwIj09PVg/bmV3IGo6VihYKSkudXBkYXRlKFUpLmRpZ2VzdCgpOlUubGVuZ3RoPHEmJihVPWsuY29uY2F0KFtVLEJdLHEpKTtmb3IodmFyIGVlPXRoaXMuX2lwYWQ9ay5hbGxvY1Vuc2FmZShxKSx0ZT10aGlzLl9vcGFkPWsuYWxsb2NV'@;
put 'bnNhZmUocSksb2U9MDtvZTxxO29lKyspZWVbb2VdPTU0XlVbb2VdLHRlW29lXT05Ml5VW29lXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09WD9uZXcgajpWKFgpLHRoaXMuX2hhc2gudXBkYXRlKGVlKX16KFksSSksWS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihYKXt0aGlzLl9oYXNoLnVw'@;
put 'ZGF0ZShYKX0sWS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IGo6Vih0aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKFgpLmRpZ2VzdCgpfSxNLmV4cG9ydHM9ZnVu'@;
put 'Y3Rpb24oWCxVKXtyZXR1cm4icm1kMTYwIj09PShYPVgudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09WD9uZXcgWSgicm1kMTYwIixVKToibWQ1Ij09PVg/bmV3IEsoRSxVKTpuZXcgWShYLFUpfX0sMTAzMTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTcxNyksSz1SKDk1'@;
put 'MDkpLkJ1ZmZlcixJPVIoMTAyNyksaz1LLmFsbG9jKDEyOCksRT02NDtmdW5jdGlvbiBqKFYsQil7SS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgQiYmKEI9Sy5mcm9tKEIpKSx0aGlzLl9hbGc9Vix0aGlzLl9rZXk9QixCLmxlbmd0aD5FP0I9VihCKTpCLmxlbmd0aDxF'@;
put 'JiYoQj1LLmNvbmNhdChbQixrXSxFKSk7Zm9yKHZhciBZPXRoaXMuX2lwYWQ9Sy5hbGxvY1Vuc2FmZShFKSxYPXRoaXMuX29wYWQ9Sy5hbGxvY1Vuc2FmZShFKSxVPTA7VTxFO1UrKylZW1VdPTU0XkJbVV0sWFtVXT05Ml5CW1VdO3RoaXMuX2hhc2g9W1ldfXooaixJKSxqLnByb3RvdHlwZS5f'@;
put 'dXBkYXRlPWZ1bmN0aW9uKFYpe3RoaXMuX2hhc2gucHVzaChWKX0sai5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fYWxnKEsuY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKEsuY29uY2F0KFt0aGlzLl9vcGFkLFZdKSl9LE0uZXhwb3J0cz1qfSw1'@;
put 'ODM1OihNLE8sUik9PnsidXNlIHN0cmljdCI7Ty5yYW5kb21CeXRlcz1PLnJuZz1PLnBzZXVkb1JhbmRvbUJ5dGVzPU8ucHJuZz1SKDE3OTgpLE8uY3JlYXRlSGFzaD1PLkhhc2g9UigzNDgyKSxPLmNyZWF0ZUhtYWM9Ty5IbWFjPVIoODM1NSk7dmFyIHo9Uig2MDQyKSxLPU9iamVjdC5rZXlz'@;
put 'KHopLEk9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KEspO08uZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEl9O3ZhciBrPVIoNTYzMik7Ty5wYmtkZjI9ay5wYmtkZjIsTy5wYmtkZjJTeW5jPWsucGJrZGYyU3lu'@;
put 'Yzt2YXIgRT1SKDM2MTQpO08uQ2lwaGVyPUUuQ2lwaGVyLE8uY3JlYXRlQ2lwaGVyPUUuY3JlYXRlQ2lwaGVyLE8uQ2lwaGVyaXY9RS5DaXBoZXJpdixPLmNyZWF0ZUNpcGhlcml2PUUuY3JlYXRlQ2lwaGVyaXYsTy5EZWNpcGhlcj1FLkRlY2lwaGVyLE8uY3JlYXRlRGVjaXBoZXI9RS5jcmVh'@;
put 'dGVEZWNpcGhlcixPLkRlY2lwaGVyaXY9RS5EZWNpcGhlcml2LE8uY3JlYXRlRGVjaXBoZXJpdj1FLmNyZWF0ZURlY2lwaGVyaXYsTy5nZXRDaXBoZXJzPUUuZ2V0Q2lwaGVycyxPLmxpc3RDaXBoZXJzPUUubGlzdENpcGhlcnM7dmFyIGo9UigyNjA3KTtPLkRpZmZpZUhlbGxtYW5Hcm91cD1q'@;
put 'LkRpZmZpZUhlbGxtYW5Hcm91cCxPLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1qLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxPLmdldERpZmZpZUhlbGxtYW49ai5nZXREaWZmaWVIZWxsbWFuLE8uY3JlYXRlRGlmZmllSGVsbG1hbj1qLmNyZWF0ZURpZmZpZUhlbGxtYW4sTy5EaWZmaWVI'@;
put 'ZWxsbWFuPWouRGlmZmllSGVsbG1hbjt2YXIgVj1SKDQ3NDMpO08uY3JlYXRlU2lnbj1WLmNyZWF0ZVNpZ24sTy5TaWduPVYuU2lnbixPLmNyZWF0ZVZlcmlmeT1WLmNyZWF0ZVZlcmlmeSxPLlZlcmlmeT1WLlZlcmlmeSxPLmNyZWF0ZUVDREg9Uig2MzkzKTt2YXIgQj1SKDc5MDApO08ucHVi'@;
put 'bGljRW5jcnlwdD1CLnB1YmxpY0VuY3J5cHQsTy5wcml2YXRlRW5jcnlwdD1CLnByaXZhdGVFbmNyeXB0LE8ucHVibGljRGVjcnlwdD1CLnB1YmxpY0RlY3J5cHQsTy5wcml2YXRlRGVjcnlwdD1CLnByaXZhdGVEZWNyeXB0O3ZhciBZPVIoNzk2Myk7Ty5yYW5kb21GaWxsPVkucmFuZG9tRmls'@;
put 'bCxPLnJhbmRvbUZpbGxTeW5jPVkucmFuZG9tRmlsbFN5bmMsTy5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihbInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwid2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMiLCJodHRw'@;
put 'czovL2dpdGh1Yi5jb20vY3J5cHRvLWJyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiXS5qb2luKCJcbiIpKX0sTy5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9O'@;
put 'T1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFf'@;
put 'UFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSw1MDU2OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcjtjb25zdHtUcmFuc2Zvcm06S309UigyODMw'@;
put 'KSxJPXouZnJvbShbMjM5LDE4NywxOTFdKTtjbGFzcyBrIGV4dGVuZHMgS3tjb25zdHJ1Y3RvcihjZT17fSl7c3VwZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTohMCwuLi5jZX0pO2NvbnN0IEc9e307bGV0IGI7Zm9yKGxldCBEIGluIGNlKUdbQihEKV09Y2VbRF07aWYoYj10aGlzLm5vcm1hbGl6'@;
put 'ZShHKSl0aHJvdyBiO3N3aXRjaChHLnJlY29yZF9kZWxpbWl0ZXIpe2Nhc2UiYXV0byI6Ry5yZWNvcmRfZGVsaW1pdGVyPW51bGw7YnJlYWs7Y2FzZSJ1bml4IjpHLnJlY29yZF9kZWxpbWl0ZXI9IlxuIjticmVhaztjYXNlIm1hYyI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJcciI7YnJlYWs7Y2Fz'@;
put 'ZSJ3aW5kb3dzIjpHLnJlY29yZF9kZWxpbWl0ZXI9IlxyXG4iO2JyZWFrO2Nhc2UiYXNjaWkiOkcucmVjb3JkX2RlbGltaXRlcj0iXHgxZSI7YnJlYWs7Y2FzZSJ1bmljb2RlIjpHLnJlY29yZF9kZWxpbWl0ZXI9Ilx1MjAyOCJ9dGhpcy5vcHRpb25zPUcsdGhpcy5zdGF0ZT17c3RvcDohMX0s'@;
put 'dGhpcy5pbmZvPXtyZWNvcmRzOjB9fW5vcm1hbGl6ZShjZSl7aWYobnVsbD09Y2UuYm9tfHwhMT09PWNlLmJvbSljZS5ib209ITE7ZWxzZSBpZighMCE9PWNlLmJvbSlyZXR1cm4gbmV3IGooIkNTVl9PUFRJT05fQk9PTEVBTl9JTlZBTElEX1RZUEUiLFsib3B0aW9uIGBib21gIGlzIG9wdGlv'@;
put 'bmFsIGFuZCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSwiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5ib20pfWBdKTtpZihudWxsPT1jZS5kZWxpbWl0ZXIpY2UuZGVsaW1pdGVyPSIsIjtlbHNlIGlmKHouaXNCdWZmZXIoY2UuZGVsaW1pdGVyKSljZS5kZWxpbWl0ZXI9Y2UuZGVsaW1pdGVy'@;
put 'LnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLmRlbGltaXRlcilyZXR1cm4gbmV3IGooIkNTVl9PUFRJT05fREVMSU1JVEVSX0lOVkFMSURfVFlQRSIsWyJvcHRpb24gYGRlbGltaXRlcmAgbXVzdCBiZSBhIGJ1ZmZlciBvciBhIHN0cmluZywiLGBnb3QgJHtKU09OLnN0'@;
put 'cmluZ2lmeShjZS5kZWxpbWl0ZXIpfWBdKTtpZihudWxsPT1jZS5xdW90ZSljZS5xdW90ZT0nIic7ZWxzZSBpZighMD09PWNlLnF1b3RlKWNlLnF1b3RlPSciJztlbHNlIGlmKCExPT09Y2UucXVvdGUpY2UucXVvdGU9IiI7ZWxzZSBpZih6LmlzQnVmZmVyKGNlLnF1b3RlKSljZS5xdW90ZT1j'@;
put 'ZS5xdW90ZS50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBjZS5xdW90ZSlyZXR1cm4gbmV3IGooIkNTVl9PUFRJT05fUVVPVEVfSU5WQUxJRF9UWVBFIixbIm9wdGlvbiBgcXVvdGVgIG11c3QgYmUgYSBib29sZWFuLCBhIGJ1ZmZlciBvciBhIHN0cmluZywiLGBnb3QgJHtK'@;
put 'U09OLnN0cmluZ2lmeShjZS5xdW90ZSl9YF0pO2lmKG51bGwhPWNlLnF1b3RlZHx8KGNlLnF1b3RlZD0hMSksbnVsbCE9Y2UucXVvdGVkX2VtcHR5fHwoY2UucXVvdGVkX2VtcHR5PXZvaWQgMCksbnVsbD09Y2UucXVvdGVkX21hdGNofHwhMT09PWNlLnF1b3RlZF9tYXRjaD9jZS5xdW90ZWRf'@;
put 'bWF0Y2g9bnVsbDpBcnJheS5pc0FycmF5KGNlLnF1b3RlZF9tYXRjaCl8fChjZS5xdW90ZWRfbWF0Y2g9W2NlLnF1b3RlZF9tYXRjaF0pLGNlLnF1b3RlZF9tYXRjaClmb3IobGV0IEcgb2YgY2UucXVvdGVkX21hdGNoKXtjb25zdCBiPUcgaW5zdGFuY2VvZiBSZWdFeHA7aWYoInN0cmluZyIh'@;
put 'PXR5cGVvZiBHJiYhYilyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0aW9uOiBxdW90ZWRfbWF0Y2ggbXVzdCBiZSBhIHN0cmluZyBvciBhIHJlZ2V4LCBnb3QgJHtKU09OLnN0cmluZ2lmeShHKX1gKX1pZihudWxsIT1jZS5xdW90ZWRfc3RyaW5nfHwoY2UucXVvdGVkX3N0cmluZz0hMSksbnVs'@;
put 'bCE9Y2UuZW9mfHwoY2UuZW9mPSEwKSxudWxsPT1jZS5lc2NhcGUpY2UuZXNjYXBlPSciJztlbHNlIGlmKHouaXNCdWZmZXIoY2UuZXNjYXBlKSljZS5lc2NhcGU9Y2UuZXNjYXBlLnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLmVzY2FwZSlyZXR1cm4gRXJyb3IoYElu'@;
put 'dmFsaWQgT3B0aW9uOiBlc2NhcGUgbXVzdCBiZSBhIGJ1ZmZlciBvciBhIHN0cmluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UuZXNjYXBlKX1gKTtpZihjZS5lc2NhcGUubGVuZ3RoPjEpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogZXNjYXBlIG11c3QgYmUgb25lIGNoYXJhY3Rl'@;
put 'ciwgZ290ICR7Y2UuZXNjYXBlLmxlbmd0aH0gY2hhcmFjdGVyc2ApO2lmKG51bGwhPWNlLmhlYWRlcnx8KGNlLmhlYWRlcj0hMSksY2UuY29sdW1ucz10aGlzLm5vcm1hbGl6ZV9jb2x1bW5zKGNlLmNvbHVtbnMpLG51bGwhPWNlLnF1b3RlZHx8KGNlLnF1b3RlZD0hMSksbnVsbCE9Y2UuY2Fz'@;
put 'dHx8KGNlLmNhc3Q9e30pLG51bGwhPWNlLmNhc3QuYmlnaW50fHwoY2UuY2FzdC5iaWdpbnQ9Rz0+IiIrRyksbnVsbCE9Y2UuY2FzdC5ib29sZWFufHwoY2UuY2FzdC5ib29sZWFuPUc9Pkc/IjEiOiIiKSxudWxsIT1jZS5jYXN0LmRhdGV8fChjZS5jYXN0LmRhdGU9Rz0+IiIrRy5nZXRUaW1l'@;
put 'KCkpLG51bGwhPWNlLmNhc3QubnVtYmVyfHwoY2UuY2FzdC5udW1iZXI9Rz0+IiIrRyksbnVsbCE9Y2UuY2FzdC5vYmplY3R8fChjZS5jYXN0Lm9iamVjdD1HPT5KU09OLnN0cmluZ2lmeShHKSksbnVsbCE9Y2UuY2FzdC5zdHJpbmd8fChjZS5jYXN0LnN0cmluZz1mdW5jdGlvbihHKXtyZXR1'@;
put 'cm4gR30pLG51bGw9PWNlLnJlY29yZF9kZWxpbWl0ZXIpY2UucmVjb3JkX2RlbGltaXRlcj0iXG4iO2Vsc2UgaWYoei5pc0J1ZmZlcihjZS5yZWNvcmRfZGVsaW1pdGVyKSljZS5yZWNvcmRfZGVsaW1pdGVyPWNlLnJlY29yZF9kZWxpbWl0ZXIudG9TdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmci'@;
put 'IT10eXBlb2YgY2UucmVjb3JkX2RlbGltaXRlcilyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0aW9uOiByZWNvcmRfZGVsaW1pdGVyIG11c3QgYmUgYSBidWZmZXIgb3IgYSBzdHJpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLnJlY29yZF9kZWxpbWl0ZXIpfWApfV90cmFuc2Zvcm0oY2Us'@;
put 'RyxiKXtpZighMD09PXRoaXMuc3RhdGUuc3RvcClyZXR1cm47aWYoIUFycmF5LmlzQXJyYXkoY2UpJiYib2JqZWN0IiE9dHlwZW9mIGNlKXJldHVybiB0aGlzLnN0YXRlLnN0b3A9ITAsYihFcnJvcihgSW52YWxpZCBSZWNvcmQ6IGV4cGVjdCBhbiBhcnJheSBvciBhbiBvYmplY3QsIGdvdCAk'@;
put 'e0pTT04uc3RyaW5naWZ5KGNlKX1gKSk7aWYoMD09PXRoaXMuaW5mby5yZWNvcmRzKWlmKEFycmF5LmlzQXJyYXkoY2UpKXtpZighMD09PXRoaXMub3B0aW9ucy5oZWFkZXImJiF0aGlzLm9wdGlvbnMuY29sdW1ucylyZXR1cm4gdGhpcy5zdGF0ZS5zdG9wPSEwLGIoRXJyb3IoIlVuZGlzY292'@;
put 'ZXJhYmxlIENvbHVtbnM6IGhlYWRlciBvcHRpb24gcmVxdWlyZXMgY29sdW1uIG9wdGlvbiBvciBvYmplY3QgcmVjb3JkcyIpKX1lbHNlIG51bGwhPXRoaXMub3B0aW9ucy5jb2x1bW5zfHwodGhpcy5vcHRpb25zLmNvbHVtbnM9dGhpcy5ub3JtYWxpemVfY29sdW1ucyhPYmplY3Qua2V5cyhj'@;
put 'ZSkpKTswPT09dGhpcy5pbmZvLnJlY29yZHMmJih0aGlzLmJvbSgpLHRoaXMuaGVhZGVycygpKTt0cnl7dGhpcy5lbWl0KCJyZWNvcmQiLGNlLHRoaXMuaW5mby5yZWNvcmRzKX1jYXRjaChIKXtyZXR1cm4gdGhpcy5zdGF0ZS5zdG9wPSEwLHRoaXMuZW1pdCgiZXJyb3IiLEgpfWxldCBEO2lm'@;
put 'KHRoaXMub3B0aW9ucy5lb2Ype2lmKEQ9dGhpcy5zdHJpbmdpZnkoY2UpLHZvaWQgMD09PUQpcmV0dXJuO0QrPXRoaXMub3B0aW9ucy5yZWNvcmRfZGVsaW1pdGVyfWVsc2V7aWYoRD10aGlzLnN0cmluZ2lmeShjZSksdm9pZCAwPT09RClyZXR1cm47KHRoaXMub3B0aW9ucy5oZWFkZXJ8fHRo'@;
put 'aXMuaW5mby5yZWNvcmRzKSYmKEQ9dGhpcy5vcHRpb25zLnJlY29yZF9kZWxpbWl0ZXIrRCl9dGhpcy5pbmZvLnJlY29yZHMrKyx0aGlzLnB1c2goRCksYigpfV9mbHVzaChjZSl7MD09PXRoaXMuaW5mby5yZWNvcmRzJiYodGhpcy5ib20oKSx0aGlzLmhlYWRlcnMoKSksY2UoKX1zdHJpbmdp'@;
put 'ZnkoY2UsRz0hMSl7aWYoIm9iamVjdCIhPXR5cGVvZiBjZSlyZXR1cm4gY2U7Y29uc3R7Y29sdW1uczpifT10aGlzLm9wdGlvbnMsSD1bXTtpZihBcnJheS5pc0FycmF5KGNlKSl7YiYmY2Uuc3BsaWNlKGIubGVuZ3RoKTtmb3IobGV0IGc9MDtnPGNlLmxlbmd0aDtnKyspe2NvbnN0IEM9Y2Vb'@;
put 'Z10sW1Msdl09dGhpcy5fX2Nhc3QoQyx7aW5kZXg6Zyxjb2x1bW46ZyxyZWNvcmRzOnRoaXMuaW5mby5yZWNvcmRzLGhlYWRlcjpHfSk7aWYoUylyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixTKTtIW2ddPVt2LENdfX1lbHNlIGlmKGIpZm9yKGxldCBnPTA7ZzxiLmxlbmd0aDtnKysp'@;
put 'e2NvbnN0IEM9aGUoY2UsYltnXS5rZXkpLFtTLHZdPXRoaXMuX19jYXN0KEMse2luZGV4OmcsY29sdW1uOmJbZ10ua2V5LHJlY29yZHM6dGhpcy5pbmZvLnJlY29yZHMsaGVhZGVyOkd9KTtpZihTKXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLFMpO0hbZ109W3YsQ119ZWxzZSBmb3Io'@;
put 'bGV0IGcgb2YgY2Upe2NvbnN0IEM9Y2VbZ10sW1Msdl09dGhpcy5fX2Nhc3QoQyx7aW5kZXg6aSxjb2x1bW46YltpXS5rZXkscmVjb3Jkczp0aGlzLmluZm8ucmVjb3JkcyxoZWFkZXI6R30pO2lmKFMpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsUyk7SC5wdXNoKFt2LENdKX1sZXQg'@;
put 'Tj0iIjtmb3IobGV0IGc9MDtnPEgubGVuZ3RoO2crKyl7bGV0IEMsUyxbdixwXT1IW2ddO2lmKCJzdHJpbmciPT10eXBlb2YgdilDPXRoaXMub3B0aW9ucztlbHNlIGlmKFYodikpe2lmKEM9dix2PUMudmFsdWUsZGVsZXRlIEMudmFsdWUsInN0cmluZyIhPXR5cGVvZiB2JiZudWxsIT12KXJl'@;
put 'dHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLEVycm9yKGBJbnZhbGlkIENhc3RpbmcgVmFsdWU6IHJldHVybmVkIHZhbHVlIG11c3QgcmV0dXJuIGEgc3RyaW5nLCBudWxsIG9yIHVuZGVmaW5lZCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodil9YCkpO2lmKEM9ey4uLnRoaXMub3B0aW9ucywu'@;
put 'Li5DfSxTPXRoaXMubm9ybWFsaXplKEMpKXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLFMpfWVsc2V7aWYobnVsbCE9dilyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixFcnJvcihgSW52YWxpZCBDYXN0aW5nIFZhbHVlOiByZXR1cm5lZCB2YWx1ZSBtdXN0IHJldHVybiBhIHN0'@;
put 'cmluZywgYW4gb2JqZWN0LCBudWxsIG9yIHVuZGVmaW5lZCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodil9YCkpO0M9dGhpcy5vcHRpb25zfWNvbnN0e2RlbGltaXRlcjp3LGVzY2FwZTpKLHF1b3RlOm5lLHF1b3RlZDpkZSxxdW90ZWRfZW1wdHk6ZmUscXVvdGVkX3N0cmluZzp4ZSxxdW90ZWRf'@;
put 'bWF0Y2g6TGUscmVjb3JkX2RlbGltaXRlcjpGZX09QztpZih2KXtpZigic3RyaW5nIiE9dHlwZW9mIHYpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLEVycm9yKGBGb3JtYXR0ZXIgbXVzdCByZXR1cm4gYSBzdHJpbmcsIG51bGwgb3IgdW5kZWZpbmVkLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2'@;
put 'KX1gKSksbnVsbDtjb25zdCBPZT13Lmxlbmd0aCYmdi5pbmRleE9mKHcpPj0wLGplPSIiIT09bmUmJnYuaW5kZXhPZihuZSk+PTAsV2U9di5pbmRleE9mKEopPj0wJiZKIT09bmUsS2U9di5pbmRleE9mKEZlKT49MCxZZT14ZSYmInN0cmluZyI9PXR5cGVvZiBwO2xldCBKZT1MZSYmTGUuZmls'@;
put 'dGVyKFBlPT4ic3RyaW5nIj09dHlwZW9mIFBlPy0xIT09di5pbmRleE9mKFBlKTpQZS50ZXN0KHYpKTtKZT1KZSYmSmUubGVuZ3RoPjA7Y29uc3QgbHQ9ITA9PT1qZXx8T2V8fEtlfHxkZXx8WWV8fEplO2lmKCEwPT09bHQmJiEwPT09V2Upe2NvbnN0IFBlPSJcXCI9PT1KP25ldyBSZWdFeHAo'@;
put 'SitKLCJnIik6bmV3IFJlZ0V4cChKLCJnIik7dj12LnJlcGxhY2UoUGUsSitKKX1pZighMD09PWplKXtjb25zdCBQZT1uZXcgUmVnRXhwKG5lLCJnIik7dj12LnJlcGxhY2UoUGUsSituZSl9ITA9PT1sdCYmKHY9bmUrdituZSksTis9dn1lbHNlKCEwPT09ZmV8fCIiPT09cCYmITA9PT14ZSYm'@;
put 'ITEhPT1mZSkmJihOKz1uZStuZSk7ZyE9PUgubGVuZ3RoLTEmJihOKz13KX1yZXR1cm4gTn1ib20oKXshMD09PXRoaXMub3B0aW9ucy5ib20mJnRoaXMucHVzaChJKX1oZWFkZXJzKCl7aWYoITE9PT10aGlzLm9wdGlvbnMuaGVhZGVyfHx2b2lkIDA9PT10aGlzLm9wdGlvbnMuY29sdW1ucyly'@;
put 'ZXR1cm47bGV0IGNlPXRoaXMub3B0aW9ucy5jb2x1bW5zLm1hcChHPT5HLmhlYWRlcik7Y2U9dGhpcy5vcHRpb25zLmVvZj90aGlzLnN0cmluZ2lmeShjZSwhMCkrdGhpcy5vcHRpb25zLnJlY29yZF9kZWxpbWl0ZXI6dGhpcy5zdHJpbmdpZnkoY2UpLHRoaXMucHVzaChjZSl9X19jYXN0KGNl'@;
put 'LEcpe2NvbnN0IGI9dHlwZW9mIGNlO3RyeXtyZXR1cm4ic3RyaW5nIj09PWI/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5zdHJpbmcoY2UsRyldOiJiaWdpbnQiPT09Yj9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0LmJpZ2ludChjZSxHKV06Im51bWJlciI9PT1iP1t2b2lkIDAsdGhpcy5v'@;
put 'cHRpb25zLmNhc3QubnVtYmVyKGNlLEcpXToiYm9vbGVhbiI9PT1iP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3QuYm9vbGVhbihjZSxHKV06Y2UgaW5zdGFuY2VvZiBEYXRlP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3QuZGF0ZShjZSxHKV06Im9iamVjdCI9PT1iJiZudWxsIT09Y2U/W3Zv'@;
put 'aWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5vYmplY3QoY2UsRyldOlt2b2lkIDAsY2UsY2VdfWNhdGNoKEQpe3JldHVybltEXX19bm9ybWFsaXplX2NvbHVtbnMoY2Upe2lmKG51bGwhPWNlKXtpZigib2JqZWN0IiE9dHlwZW9mIGNlKXRocm93IEVycm9yKCdJbnZhbGlkIG9wdGlvbiAiY29sdW1u'@;
put 'cyI6IGV4cGVjdCBhbiBhcnJheSBvciBhbiBvYmplY3QnKTtpZihBcnJheS5pc0FycmF5KGNlKSl7Y29uc3QgRz1bXTtmb3IobGV0IGIgb2YgY2UpaWYoInN0cmluZyI9PXR5cGVvZiBiKUcucHVzaCh7a2V5OmIsaGVhZGVyOmJ9KTtlbHNle2lmKCJvYmplY3QiIT10eXBlb2YgYnx8dm9pZCAw'@;
put 'PT09Ynx8QXJyYXkuaXNBcnJheShiKSl0aHJvdyBFcnJvcigiSW52YWxpZCBjb2x1bW4gZGVmaW5pdGlvbjogZXhwZWN0IGEgc3RyaW5nIG9yIGFuIG9iamVjdCIpO2lmKCFiLmtleSl0aHJvdyBFcnJvcignSW52YWxpZCBjb2x1bW4gZGVmaW5pdGlvbjogcHJvcGVydHkgImtleSIgaXMgcmVx'@;
put 'dWlyZWQnKTt2b2lkIDA9PT1iLmhlYWRlciYmKGIuaGVhZGVyPWIua2V5KSxHLnB1c2goYil9Y2U9R31lbHNle2NvbnN0IEc9W107Zm9yKGxldCBiIGluIGNlKUcucHVzaCh7a2V5OmIsaGVhZGVyOmNlW2JdfSk7Y2U9R31yZXR1cm4gY2V9fX1jb25zdCBFPWZ1bmN0aW9uKCl7bGV0IHVlLGNl'@;
put 'LEc7Zm9yKGxldCBEIGluIGFyZ3VtZW50cyl7Y29uc3QgSD1hcmd1bWVudHNbRF0sTj10eXBlb2YgSDtpZih2b2lkIDA9PT11ZSYmQXJyYXkuaXNBcnJheShIKSl1ZT1IO2Vsc2UgaWYodm9pZCAwPT09Y2UmJlYoSCkpY2U9SDtlbHNle2lmKHZvaWQgMCE9PUd8fCJmdW5jdGlvbiIhPT1OKXRo'@;
put 'cm93IG5ldyBqKCJDU1ZfSU5WQUxJRF9BUkdVTUVOVCIsWyJJbnZhbGlkIGFyZ3VtZW50OiIsYGdvdCAke0pTT04uc3RyaW5naWZ5KEgpfSBhdCBpbmRleCAke0R9YF0pO0c9SH19Y29uc3QgYj1uZXcgayhjZSk7aWYoRyl7Y29uc3QgRD1bXTtiLm9uKCJyZWFkYWJsZSIsZnVuY3Rpb24oKXts'@;
put 'ZXQgSDtmb3IoO251bGwhPT0oSD10aGlzLnJlYWQoKSk7KUQucHVzaChIKX0pLGIub24oImVycm9yIixmdW5jdGlvbihIKXtHKEgpfSksYi5vbigiZW5kIixmdW5jdGlvbigpe0codm9pZCAwLEQuam9pbigiIikpfSl9aWYodm9pZCAwIT09dWUpaWYoImZ1bmN0aW9uIj09dHlwZW9mIHNldElt'@;
put 'bWVkaWF0ZSlzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKXtmb3IobGV0IEQgb2YgdWUpYi53cml0ZShEKTtiLmVuZCgpfSk7ZWxzZXtmb3IobGV0IEQgb2YgdWUpYi53cml0ZShEKTtiLmVuZCgpfXJldHVybiBifTtjbGFzcyBqIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoY2UsRywuLi5iKXtB'@;
put 'cnJheS5pc0FycmF5KEcpJiYoRz1HLmpvaW4oIiAiKSksc3VwZXIoRyksdm9pZCAwIT09RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsaiksdGhpcy5jb2RlPWNlO2Zvcihjb25zdCBEIG9mIGIpZm9yKGNvbnN0IEggaW4gRCl7Y29uc3QgTj1E'@;
put 'W0hdO3RoaXNbSF09ei5pc0J1ZmZlcihOKT9OLnRvU3RyaW5nKCk6bnVsbD09Tj9OOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoTikpfX19RS5TdHJpbmdpZmllcj1rLEUuQ3N2RXJyb3I9aixNLmV4cG9ydHM9RTtjb25zdCBWPWZ1bmN0aW9uKHVlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9m'@;
put 'IHVlJiZudWxsIT09dWUmJiFBcnJheS5pc0FycmF5KHVlKX0sQj1mdW5jdGlvbih1ZSl7cmV0dXJuIHVlLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihjZSxHKXtyZXR1cm4iXyIrRy50b0xvd2VyQ2FzZSgpfSl9LFk9Ii4iLmNoYXJDb2RlQXQoMCksWD0vXFwoXFwpPy9nLFU9UmVnRXhw'@;
put 'KCJbXi5bXFxdXSt8XFxbKD86KFteXCInXVteW10qKXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKSIsImciKSxxPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEp'@;
put 'XF0vLGVlPS9eXHcqJC8sdGU9ZnVuY3Rpb24odWUpe2NvbnN0IGNlPXR5cGVvZiB1ZTtyZXR1cm4ic3ltYm9sIj09PWNlfHwib2JqZWN0Ij09PWNlJiZ1ZSYmIltvYmplY3QgU3ltYm9sXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodWUpfSxzZT1mdW5jdGlvbih1ZSl7aWYo'@;
put 'InN0cmluZyI9PXR5cGVvZiB1ZXx8dGUodWUpKXJldHVybiB1ZTtjb25zdCBjZT1gJHt1ZX1gO3JldHVybiIwIj09Y2UmJjEvdWU9PS1JTkZJTklUWT8iLTAiOmNlfSxoZT1mdW5jdGlvbih1ZSxjZSl7bGV0IEc9MDtjb25zdCBiPShjZT1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEFycmF5Lmlz'@;
put 'QXJyYXkodWUpP3VlOmZ1bmN0aW9uKEcsYil7aWYoQXJyYXkuaXNBcnJheShHKSlyZXR1cm4hMTtjb25zdCBEPXR5cGVvZiBHO3JldHVybiEoIm51bWJlciIhPT1EJiYic3ltYm9sIiE9PUQmJiJib29sZWFuIiE9PUQmJkcmJiF0ZShHKSl8fGVlLnRlc3QoRyl8fCFxLnRlc3QoRyl8fG51bGwh'@;
put 'PWImJkcgaW4gT2JqZWN0KGIpfSh1ZSxjZSk/W3VlXTpmdW5jdGlvbihHKXtjb25zdCBiPVtdO3JldHVybiBHLmNoYXJDb2RlQXQoMCk9PT1ZJiZiLnB1c2goIiIpLEcucmVwbGFjZShVLGZ1bmN0aW9uKEQsSCxOLGcpe2xldCBDPUQ7Tj9DPWcucmVwbGFjZShYLCIkMSIpOkgmJihDPUgudHJp'@;
put 'bSgpKSxiLnB1c2goQyl9KSxifSh1ZSl9KGNlLHVlKSkubGVuZ3RoO2Zvcig7bnVsbCE9dWUmJkc8YjspdWU9dWVbc2UoY2VbRysrXSldO3JldHVybiBHJiZHPT09Yj91ZTp2b2lkIDB9fSw3NTY1OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcjtjb25zdCBLPVIoNTA1Nikse1N0cmlu'@;
put 'Z0RlY29kZXI6SX09UigyNTUzKTtNLmV4cG9ydHM9ZnVuY3Rpb24oayxFPXt9KXtjb25zdCBqPVtdO2Z1bmN0aW9uIFYoWSl7WSYmai5wdXNoKFkudG9TdHJpbmcoKSl9ei5pc0J1ZmZlcihrKSYmKGs9KG5ldyBJKS53cml0ZShrKSk7bGV0IEI9bmV3IEsuU3RyaW5naWZpZXIoRSk7Qi5vbigi'@;
put 'ZGF0YSIsVik7Zm9yKGxldCBZIG9mIGspQi53cml0ZShZKTtyZXR1cm4gQi5lbmQoKSxCLm9mZigiZGF0YSIsViksai5qb2luKCIiKX19LDQyODk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDIyMTUpLEs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVv'@;
put 'ZiBTeW1ib2woImZvbyIpLEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxrPUFycmF5LnByb3RvdHlwZS5jb25jYXQsRT1PYmplY3QuZGVmaW5lUHJvcGVydHksaj1SKDEwNDQpKCksVj1FJiZqLEI9ZnVuY3Rpb24oWCxVLHEsZWUpe2lmKFUgaW4gWClpZighMD09PWVlKXtpZihYW1VdPT09'@;
put 'cSlyZXR1cm59ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YodGU9ZWUpfHwiW29iamVjdCBGdW5jdGlvbl0iIT09SS5jYWxsKHRlKXx8IWVlKCkpcmV0dXJuO3ZhciB0ZTtWP0UoWCxVLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpxLHdyaXRhYmxlOiEwfSk6WFtVXT1x'@;
put 'fSxZPWZ1bmN0aW9uKFgsVSl7dmFyIHE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp7fSxlZT16KFUpO0smJihlZT1rLmNhbGwoZWUsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhVKSkpO2Zvcih2YXIgdGU9MDt0ZTxlZS5sZW5ndGg7dGUrPTEpQihYLGVlW3RlXSxVW2Vl'@;
put 'W3RlXV0scVtlZVt0ZV1dKX07WS5zdXBwb3J0c0Rlc2NyaXB0b3JzPSEhVixNLmV4cG9ydHM9WX0sNTI1MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO08udXRpbHM9UigxMjc4KSxPLkNpcGhlcj1SKDU3NTYpLE8uREVTPVIoMzI3KSxPLkNCQz1SKDkwNTEpLE8uRURFPVIoNjUxKX0sOTA1MToo'@;
put 'TSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTc0NiksSz1SKDU3MTcpLEk9e307ZnVuY3Rpb24gayhFKXt6LmVxdWFsKEUubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBqPTA7ajx0aGlzLml2Lmxlbmd0aDtqKyspdGhpcy5p'@;
put 'dltqXT1FW2pdfU8uaW5zdGFudGlhdGU9ZnVuY3Rpb24oRSl7ZnVuY3Rpb24gaihYKXtFLmNhbGwodGhpcyxYKSx0aGlzLl9jYmNJbml0KCl9SyhqLEUpO2Zvcih2YXIgVj1PYmplY3Qua2V5cyhJKSxCPTA7QjxWLmxlbmd0aDtCKyspe3ZhciBZPVZbQl07ai5wcm90b3R5cGVbWV09SVtZXX1y'@;
put 'ZXR1cm4gai5jcmVhdGU9ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBqKFgpfSxqfSxJLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEU9bmV3IGsodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1FfSxJLl91cGRhdGU9ZnVuY3Rpb24oRSxqLFYsQil7dmFyIFg9dGhpcy5jb25zdHJ1Y3Rv'@;
put 'ci5zdXBlcl8ucHJvdG90eXBlLFU9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIHE9MDtxPHRoaXMuYmxvY2tTaXplO3ErKylVW3FdXj1FW2orcV07Zm9yKFguX3VwZGF0ZS5jYWxsKHRoaXMsVSwwLFYsQikscT0wO3E8dGhpcy5ibG9ja1NpemU7'@;
put 'cSsrKVVbcV09VltCK3FdfWVsc2V7Zm9yKFguX3VwZGF0ZS5jYWxsKHRoaXMsRSxqLFYsQikscT0wO3E8dGhpcy5ibG9ja1NpemU7cSsrKVZbQitxXV49VVtxXTtmb3IocT0wO3E8dGhpcy5ibG9ja1NpemU7cSsrKVVbcV09RVtqK3FdfX19LDU3NTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgej1SKDk3NDYpO2Z1bmN0aW9uIEsoSSl7dGhpcy5vcHRpb25zPUksdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MH1NLmV4cG9ydHM9'@;
put 'SyxLLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sSy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEkpe3JldHVybiAwPT09SS5sZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoSSk6dGhpcy5fdXBkYXRlRW5jcnlwdChJKX0sSy5wcm90b3R5'@;
put 'cGUuX2J1ZmZlcj1mdW5jdGlvbihJLGspe2Zvcih2YXIgRT1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsSS5sZW5ndGgtayksaj0wO2o8RTtqKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYral09SVtrK2pdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9RSxF'@;
put 'fSxLLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsSSxrKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxLLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihJKXt2YXIgaz0wLEU9MCxW'@;
put 'PW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK0kubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYoays9dGhpcy5fYnVmZmVyKEksayksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihFKz10aGlzLl9mbHVz'@;
put 'aEJ1ZmZlcihWLEUpKSk7Zm9yKHZhciBCPUkubGVuZ3RoLShJLmxlbmd0aC1rKSV0aGlzLmJsb2NrU2l6ZTtrPEI7ays9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKEksayxWLEUpLEUrPXRoaXMuYmxvY2tTaXplO2Zvcig7azxJLmxlbmd0aDtrKyssdGhpcy5idWZmZXJPZmYrKyl0aGlz'@;
put 'LmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09SVtrXTtyZXR1cm4gVn0sSy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oSSl7Zm9yKHZhciBrPTAsRT0wLGo9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitJLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsVj1uZXcgQXJyYXkoaip0'@;
put 'aGlzLmJsb2NrU2l6ZSk7aj4wO2otLSlrKz10aGlzLl9idWZmZXIoSSxrKSxFKz10aGlzLl9mbHVzaEJ1ZmZlcihWLEUpO3JldHVybiBrKz10aGlzLl9idWZmZXIoSSxrKSxWfSxLLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihJKXt2YXIgayxFO3JldHVybiBJJiYoaz10aGlzLnVwZGF0ZShJ'@;
put 'KSksRT0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksaz9rLmNvbmNhdChFKTpFfSxLLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEksayl7aWYoMD09PWspcmV0dXJuITE7Zm9yKDtrPEkubGVuZ3RoOylJW2srK109MDtyZXR1'@;
put 'cm4hMH0sSy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBJPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEksMCks'@;
put 'SX0sSy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEkpe3JldHVybiBJfSxLLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7ei5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgST1uZXcgQXJyYXko'@;
put 'dGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihJLDApLHRoaXMuX3VucGFkKEkpfX0sMzI3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KSxLPVIoNTcxNyksST1SKDEyNzgpLGs9Uig1NzU2KTtmdW5jdGlvbiBFKCl7dGhpcy50bXA9bmV3IEFycmF5'@;
put 'KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIGooQil7ay5jYWxsKHRoaXMsQik7dmFyIFk9bmV3IEU7dGhpcy5fZGVzU3RhdGU9WSx0aGlzLmRlcml2ZUtleXMoWSxCLmtleSl9SyhqLGspLE0uZXhwb3J0cz1qLGouY3JlYXRlPWZ1bmN0aW9uKEIpe3JldHVybiBuZXcgaihCKX07dmFyIFY9'@;
put 'WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO2oucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oQixZKXtCLmtleXM9bmV3IEFycmF5KDMyKSx6LmVxdWFsKFkubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgWD1JLnJlYWRVSW50MzJC'@;
put 'RShZLDApLFU9SS5yZWFkVUludDMyQkUoWSw0KTtJLnBjMShYLFUsQi50bXAsMCksWD1CLnRtcFswXSxVPUIudG1wWzFdO2Zvcih2YXIgcT0wO3E8Qi5rZXlzLmxlbmd0aDtxKz0yKXt2YXIgZWU9VltxPj4+MV07WD1JLnIyOHNobChYLGVlKSxVPUkucjI4c2hsKFUsZWUpLEkucGMyKFgsVSxC'@;
put 'LmtleXMscSl9fSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEIsWSxYLFUpe3ZhciBxPXRoaXMuX2Rlc1N0YXRlLGVlPUkucmVhZFVJbnQzMkJFKEIsWSksdGU9SS5yZWFkVUludDMyQkUoQixZKzQpO0kuaXAoZWUsdGUscS50bXAsMCksZWU9cS50bXBbMF0sdGU9cS50bXBbMV0sImVu'@;
put 'Y3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQocSxlZSx0ZSxxLnRtcCwwKTp0aGlzLl9kZWNyeXB0KHEsZWUsdGUscS50bXAsMCksdGU9cS50bXBbMV0sSS53cml0ZVVJbnQzMkJFKFgsZWU9cS50bXBbMF0sVSksSS53cml0ZVVJbnQzMkJFKFgsdGUsVSs0KX0sai5wcm90b3R5cGUu'@;
put 'X3BhZD1mdW5jdGlvbihCLFkpe2Zvcih2YXIgWD1CLmxlbmd0aC1ZLFU9WTtVPEIubGVuZ3RoO1UrKylCW1VdPVg7cmV0dXJuITB9LGoucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihCKXtmb3IodmFyIFk9QltCLmxlbmd0aC0xXSxYPUIubGVuZ3RoLVk7WDxCLmxlbmd0aDtYKyspei5lcXVh'@;
put 'bChCW1hdLFkpO3JldHVybiBCLnNsaWNlKDAsQi5sZW5ndGgtWSl9LGoucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKEIsWSxYLFUscSl7Zm9yKHZhciBlZT1ZLHRlPVgsb2U9MDtvZTxCLmtleXMubGVuZ3RoO29lKz0yKXt2YXIgc2U9Qi5rZXlzW29lXSxoZT1CLmtleXNbb2UrMV07SS5l'@;
put 'eHBhbmQodGUsQi50bXAsMCk7dmFyIHVlPUkuc3Vic3RpdHV0ZShzZV49Qi50bXBbMF0saGVePUIudG1wWzFdKSxjZT10ZTt0ZT0oZWVeSS5wZXJtdXRlKHVlKSk+Pj4wLGVlPWNlfUkucmlwKHRlLGVlLFUscSl9LGoucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKEIsWSxYLFUscSl7Zm9y'@;
put 'KHZhciBlZT1YLHRlPVksb2U9Qi5rZXlzLmxlbmd0aC0yO29lPj0wO29lLT0yKXt2YXIgc2U9Qi5rZXlzW29lXSxoZT1CLmtleXNbb2UrMV07SS5leHBhbmQoZWUsQi50bXAsMCk7dmFyIHVlPUkuc3Vic3RpdHV0ZShzZV49Qi50bXBbMF0saGVePUIudG1wWzFdKSxjZT1lZTtlZT0odGVeSS5w'@;
put 'ZXJtdXRlKHVlKSk+Pj4wLHRlPWNlfUkucmlwKGVlLHRlLFUscSl9fSw2NTE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk3NDYpLEs9Uig1NzE3KSxJPVIoNTc1Niksaz1SKDMyNyk7ZnVuY3Rpb24gRShWLEIpe3ouZXF1YWwoQi5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0'@;
put 'aCIpO3ZhciBZPUIuc2xpY2UoMCw4KSxYPUIuc2xpY2UoOCwxNiksVT1CLnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09Vj9bay5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpZfSksay5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpYfSksay5jcmVhdGUoe3R5cGU6'@;
put 'ImVuY3J5cHQiLGtleTpVfSldOltrLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5OlV9KSxrLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Olh9KSxrLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Oll9KV19ZnVuY3Rpb24gaihWKXtJLmNhbGwodGhpcyxWKTt2YXIgQj1uZXcgRSh0aGlz'@;
put 'LnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9Qn1LKGosSSksTS5leHBvcnRzPWosai5jcmVhdGU9ZnVuY3Rpb24oVil7cmV0dXJuIG5ldyBqKFYpfSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFYsQixZLFgpe3ZhciBVPXRoaXMuX2VkZVN0YXRlO1UuY2lwaGVy'@;
put 'c1swXS5fdXBkYXRlKFYsQixZLFgpLFUuY2lwaGVyc1sxXS5fdXBkYXRlKFksWCxZLFgpLFUuY2lwaGVyc1syXS5fdXBkYXRlKFksWCxZLFgpfSxqLnByb3RvdHlwZS5fcGFkPWsucHJvdG90eXBlLl9wYWQsai5wcm90b3R5cGUuX3VucGFkPWsucHJvdG90eXBlLl91bnBhZH0sMTI3ODooTSxP'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPLnJlYWRVSW50MzJCRT1mdW5jdGlvbihJLGspe3JldHVybihJWzAra108PDI0fElbMStrXTw8MTZ8SVsyK2tdPDw4fElbMytrXSk+Pj4wfSxPLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oSSxrLEUpe0lbMCtFXT1rPj4+MjQsSVsxK0VdPWs+Pj4xNiYyNTUsSVsy'@;
put 'K0VdPWs+Pj44JjI1NSxJWzMrRV09MjU1Jmt9LE8uaXA9ZnVuY3Rpb24oSSxrLEUsail7Zm9yKHZhciBWPTAsQj0wLFk9NjtZPj0wO1ktPTIpe2Zvcih2YXIgWD0wO1g8PTI0O1grPTgpVjw8PTEsVnw9az4+PlgrWSYxO2ZvcihYPTA7WDw9MjQ7WCs9OClWPDw9MSxWfD1JPj4+WCtZJjF9Zm9y'@;
put 'KFk9NjtZPj0wO1ktPTIpe2ZvcihYPTE7WDw9MjU7WCs9OClCPDw9MSxCfD1rPj4+WCtZJjE7Zm9yKFg9MTtYPD0yNTtYKz04KUI8PD0xLEJ8PUk+Pj5YK1kmMX1FW2orMF09Vj4+PjAsRVtqKzFdPUI+Pj4wfSxPLnJpcD1mdW5jdGlvbihJLGssRSxqKXtmb3IodmFyIFY9MCxCPTAsWT0wO1k8'@;
put 'NDtZKyspZm9yKHZhciBYPTI0O1g+PTA7WC09OClWPDw9MSxWfD1rPj4+WCtZJjEsVjw8PTEsVnw9ST4+PlgrWSYxO2ZvcihZPTQ7WTw4O1krKylmb3IoWD0yNDtYPj0wO1gtPTgpQjw8PTEsQnw9az4+PlgrWSYxLEI8PD0xLEJ8PUk+Pj5YK1kmMTtFW2orMF09Vj4+PjAsRVtqKzFdPUI+Pj4w'@;
put 'fSxPLnBjMT1mdW5jdGlvbihJLGssRSxqKXtmb3IodmFyIFY9MCxCPTAsWT03O1k+PTU7WS0tKXtmb3IodmFyIFg9MDtYPD0yNDtYKz04KVY8PD0xLFZ8PWs+PlgrWSYxO2ZvcihYPTA7WDw9MjQ7WCs9OClWPDw9MSxWfD1JPj5YK1kmMX1mb3IoWD0wO1g8PTI0O1grPTgpVjw8PTEsVnw9az4+'@;
put 'WCtZJjE7Zm9yKFk9MTtZPD0zO1krKyl7Zm9yKFg9MDtYPD0yNDtYKz04KUI8PD0xLEJ8PWs+PlgrWSYxO2ZvcihYPTA7WDw9MjQ7WCs9OClCPDw9MSxCfD1JPj5YK1kmMX1mb3IoWD0wO1g8PTI0O1grPTgpQjw8PTEsQnw9ST4+WCtZJjE7RVtqKzBdPVY+Pj4wLEVbaisxXT1CPj4+MH0sTy5y'@;
put 'MjhzaGw9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gSTw8ayYyNjg0MzU0NTV8ST4+PjI4LWt9O3ZhciBSPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwy'@;
put 'MiwzLDEwLDE0LDYsMjAsMjcsMjRdO08ucGMyPWZ1bmN0aW9uKEksayxFLGope2Zvcih2YXIgVj0wLEI9MCxZPVIubGVuZ3RoPj4+MSxYPTA7WDxZO1grKylWPDw9MSxWfD1JPj4+UltYXSYxO2ZvcihYPVk7WDxSLmxlbmd0aDtYKyspQjw8PTEsQnw9az4+PlJbWF0mMTtFW2orMF09Vj4+PjAs'@;
put 'RVtqKzFdPUI+Pj4wfSxPLmV4cGFuZD1mdW5jdGlvbihJLGssRSl7dmFyIGo9MCxWPTA7aj0oMSZJKTw8NXxJPj4+Mjc7Zm9yKHZhciBCPTIzO0I+PTE1O0ItPTQpajw8PTYsanw9ST4+PkImNjM7Zm9yKEI9MTE7Qj49MztCLT00KVZ8PUk+Pj5CJjYzLFY8PD02O1Z8PSgzMSZJKTw8MXxJPj4+'@;
put 'MzEsa1tFKzBdPWo+Pj4wLGtbRSsxXT1WPj4+MH07dmFyIHo9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMs'@;
put 'NywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1'@;
put 'LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcs'@;
put 'MTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIs'@;
put 'MSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwx'@;
put 'Miw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMs'@;
put 'MTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0'@;
put 'LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07Ty5zdWJzdGl0dXRlPWZ1bmN0aW9uKEksayl7Zm9yKHZhciBFPTAsaj0wO2o8NDtqKyspRTw8PTQsRXw9els2NCpq'@;
put 'KyhJPj4+MTgtNipqJjYzKV07Zm9yKGo9MDtqPDQ7aisrKUU8PD00LEV8PXpbMjU2KzY0KmorKGs+Pj4xOC02KmomNjMpXTtyZXR1cm4gRT4+PjB9O3ZhciBLPVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwy'@;
put 'NiwxMCwyMSwyOCw3XTtPLnBlcm11dGU9ZnVuY3Rpb24oSSl7Zm9yKHZhciBrPTAsRT0wO0U8Sy5sZW5ndGg7RSsrKWs8PD0xLGt8PUk+Pj5LW0VdJjE7cmV0dXJuIGs+Pj4wfSxPLnBhZFNwbGl0PWZ1bmN0aW9uKEksayxFKXtmb3IodmFyIGo9SS50b1N0cmluZygyKTtqLmxlbmd0aDxrOylq'@;
put 'PSIwIitqO2Zvcih2YXIgVj1bXSxCPTA7QjxrO0IrPUUpVi5wdXNoKGouc2xpY2UoQixCK0UpKTtyZXR1cm4gVi5qb2luKCIgIil9fSwyNjA3OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoMzU5MCksST1SKDk3OTkpLGs9Uig3NDI2KSxFPXtiaW5hcnk6ITAsaGV4OiEwLGJh'@;
put 'c2U2NDohMH07Ty5EaWZmaWVIZWxsbWFuR3JvdXA9Ty5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9Ty5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uKGope3ZhciBWPW5ldyB6KElbal0ucHJpbWUsImhleCIpLEI9bmV3IHooSVtqXS5nZW4sImhleCIpO3JldHVybiBuZXcgayhWLEIpfSxPLmNy'@;
put 'ZWF0ZURpZmZpZUhlbGxtYW49Ty5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIGooVixCLFksWCl7cmV0dXJuIHouaXNCdWZmZXIoQil8fHZvaWQgMD09PUVbQl0/aihWLCJiaW5hcnkiLEIsWSk6KEI9Qnx8ImJpbmFyeSIsWD1YfHwiYmluYXJ5IixZPVl8fG5ldyB6KFsyXSksei5pc0J1ZmZlcihZ'@;
put 'KXx8KFk9bmV3IHooWSxYKSksIm51bWJlciI9PXR5cGVvZiBWP25ldyBrKEsoVixZKSxZLCEwKTooei5pc0J1ZmZlcihWKXx8KFY9bmV3IHooVixCKSksbmV3IGsoVixZLCEwKSkpfX0sNzQyNjooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDM2MjApLEk9bmV3KFIoMzA0Nykp'@;
put 'LGs9bmV3IEsoMjQpLEU9bmV3IEsoMTEpLGo9bmV3IEsoMTApLFY9bmV3IEsoMyksQj1uZXcgSyg3KSxZPVIoMzU5MCksWD1SKDE3OTgpO2Z1bmN0aW9uIFUoc2UsaGUpe3JldHVybiBoZT1oZXx8InV0ZjgiLHouaXNCdWZmZXIoc2UpfHwoc2U9bmV3IHooc2UsaGUpKSx0aGlzLl9wdWI9bmV3'@;
put 'IEsoc2UpLHRoaXN9ZnVuY3Rpb24gcShzZSxoZSl7cmV0dXJuIGhlPWhlfHwidXRmOCIsei5pc0J1ZmZlcihzZSl8fChzZT1uZXcgeihzZSxoZSkpLHRoaXMuX3ByaXY9bmV3IEsoc2UpLHRoaXN9TS5leHBvcnRzPXRlO3ZhciBlZT17fTtmdW5jdGlvbiB0ZShzZSxoZSx1ZSl7dGhpcy5zZXRH'@;
put 'ZW5lcmF0b3IoaGUpLHRoaXMuX19wcmltZT1uZXcgSyhzZSksdGhpcy5fcHJpbWU9Sy5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49c2UubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCx1ZT8odGhpcy5zZXRQ'@;
put 'dWJsaWNLZXk9VSx0aGlzLnNldFByaXZhdGVLZXk9cSk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gb2Uoc2UsaGUpe3ZhciB1ZT1uZXcgeihzZS50b0FycmF5KCkpO3JldHVybiBoZT91ZS50b1N0cmluZyhoZSk6dWV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHRlLnByb3RvdHlwZSwidmVy'@;
put 'aWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uKHNlLGhlKXt2YXIgdWU9aGUudG9TdHJpbmcoImhleCIpLGNlPVt1ZSxzZS50b1N0cmluZygxNildLmpv'@;
put 'aW4oIl8iKTtpZihjZSBpbiBlZSlyZXR1cm4gZWVbY2VdO3ZhciBHLGI9MDtpZihzZS5pc0V2ZW4oKXx8IVkuc2ltcGxlU2lldmV8fCFZLmZlcm1hdFRlc3Qoc2UpfHwhSS50ZXN0KHNlKSlyZXR1cm4gYis9MSxlZVtjZV09Yis9IjAyIj09PXVlfHwiMDUiPT09dWU/ODo0LGI7c3dpdGNoKEku'@;
put 'dGVzdChzZS5zaHJuKDEpKXx8KGIrPTIpLHVlKXtjYXNlIjAyIjpzZS5tb2QoaykuY21wKEUpJiYoYis9OCk7YnJlYWs7Y2FzZSIwNSI6KEc9c2UubW9kKGopKS5jbXAoVikmJkcuY21wKEIpJiYoYis9OCk7YnJlYWs7ZGVmYXVsdDpiKz00fXJldHVybiBlZVtjZV09YixifSh0aGlzLl9fcHJp'@;
put 'bWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSx0ZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBLKFgodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmlt'@;
put 'ZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSx0ZS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihzZSl7dmFyIGhlPShzZT0oc2U9bmV3IEsoc2UpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVk'@;
put 'KCksdWU9bmV3IHooaGUudG9BcnJheSgpKSxjZT10aGlzLmdldFByaW1lKCk7aWYodWUubGVuZ3RoPGNlLmxlbmd0aCl7dmFyIEc9bmV3IHooY2UubGVuZ3RoLXVlLmxlbmd0aCk7Ry5maWxsKDApLHVlPXouY29uY2F0KFtHLHVlXSl9cmV0dXJuIHVlfSx0ZS5wcm90b3R5cGUuZ2V0UHVibGlj'@;
put 'S2V5PWZ1bmN0aW9uKHNlKXtyZXR1cm4gb2UodGhpcy5fcHViLHNlKX0sdGUucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oc2Upe3JldHVybiBvZSh0aGlzLl9wcml2LHNlKX0sdGUucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKHNlKXtyZXR1cm4gb2UodGhpcy5fX3ByaW1l'@;
put 'LHNlKX0sdGUucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihzZSl7cmV0dXJuIG9lKHRoaXMuX2dlbixzZSl9LHRlLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oc2UsaGUpe3JldHVybiBoZT1oZXx8InV0ZjgiLHouaXNCdWZmZXIoc2UpfHwoc2U9bmV3IHooc2UsaGUp'@;
put 'KSx0aGlzLl9fZ2VuPXNlLHRoaXMuX2dlbj1uZXcgSyhzZSksdGhpc319LDM1OTA6KE0sTyxSKT0+e3ZhciB6PVIoMTc5OCk7TS5leHBvcnRzPXNlLHNlLnNpbXBsZVNpZXZlPXRlLHNlLmZlcm1hdFRlc3Q9b2U7dmFyIEs9UigzNjIwKSxJPW5ldyBLKDI0KSxrPW5ldyhSKDMwNDcpKSxFPW5l'@;
put 'dyBLKDEpLGo9bmV3IEsoMiksVj1uZXcgSyg1KSxCPShuZXcgSygxNiksbmV3IEsoOCksbmV3IEsoMTApKSxZPW5ldyBLKDMpLFg9KG5ldyBLKDcpLG5ldyBLKDExKSksVT1uZXcgSyg0KSxxPShuZXcgSygxMiksbnVsbCk7ZnVuY3Rpb24gdGUoaGUpe2Zvcih2YXIgdWU9ZnVuY3Rpb24gZWUo'@;
put 'KXtpZihudWxsIT09cSlyZXR1cm4gcTt2YXIgaGU9W107aGVbMF09Mjtmb3IodmFyIHVlPTEsY2U9MztjZTwxMDQ4NTc2O2NlKz0yKXtmb3IodmFyIEc9TWF0aC5jZWlsKE1hdGguc3FydChjZSkpLGI9MDtiPHVlJiZoZVtiXTw9RyYmY2UlaGVbYl0hPTA7YisrKTt1ZSE9PWImJmhlW2JdPD1H'@;
put 'fHwoaGVbdWUrK109Y2UpfXJldHVybiBxPWhlLGhlfSgpLGNlPTA7Y2U8dWUubGVuZ3RoO2NlKyspaWYoMD09PWhlLm1vZG4odWVbY2VdKSlyZXR1cm4gMD09PWhlLmNtcG4odWVbY2VdKTtyZXR1cm4hMH1mdW5jdGlvbiBvZShoZSl7dmFyIHVlPUsubW9udChoZSk7cmV0dXJuIDA9PT1qLnRv'@;
put 'UmVkKHVlKS5yZWRQb3coaGUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gc2UoaGUsdWUpe2lmKGhlPDE2KXJldHVybiBuZXcgSygyPT09dWV8fDU9PT11ZT9bMTQwLDEyM106WzE0MCwzOV0pO3ZhciBjZSxHO2Zvcih1ZT1uZXcgSyh1ZSk7Oyl7Zm9yKGNlPW5ldyBLKHoo'@;
put 'TWF0aC5jZWlsKGhlLzgpKSk7Y2UuYml0TGVuZ3RoKCk+aGU7KWNlLmlzaHJuKDEpO2lmKGNlLmlzRXZlbigpJiZjZS5pYWRkKEUpLGNlLnRlc3RuKDEpfHxjZS5pYWRkKGopLHVlLmNtcChqKSl7aWYoIXVlLmNtcChWKSlmb3IoO2NlLm1vZChCKS5jbXAoWSk7KWNlLmlhZGQoVSl9ZWxzZSBm'@;
put 'b3IoO2NlLm1vZChJKS5jbXAoWCk7KWNlLmlhZGQoVSk7aWYodGUoRz1jZS5zaHJuKDEpKSYmdGUoY2UpJiZvZShHKSYmb2UoY2UpJiZrLnRlc3QoRykmJmsudGVzdChjZSkpcmV0dXJuIGNlfX19LDM2MjA6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlvbih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5j'@;
put 'dGlvbiBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gayhnLEMpe2cuc3VwZXJfPUM7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBTLGcucHJvdG90eXBlLmNvbnN0cnVj'@;
put 'dG9yPWd9ZnVuY3Rpb24gRShnLEMsUyl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoUz1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxD'@;
put 'fHwxMCxTfHwiYmUiKSl9dmFyIGo7Im9iamVjdCI9PXR5cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOlIoNzc0OCkuQnVmZmVyfWNhdGNoe31m'@;
put 'dW5jdGlvbiBWKGcsQyl7dmFyIFM9Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBTPj02NSYmUzw9NzA/Uy01NTpTPj05NyYmUzw9MTAyP1MtODc6Uy00OCYxNX1mdW5jdGlvbiBCKGcsQyxTKXt2YXIgdj1WKGcsUyk7cmV0dXJuIFMtMT49QyYmKHZ8PVYoZyxTLTEpPDw0KSx2fWZ1bmN0aW9uIFko'@;
put 'ZyxDLFMsdil7Zm9yKHZhciBwPTAsdz1NYXRoLm1pbihnLmxlbmd0aCxTKSxKPUM7Sjx3O0orKyl7dmFyIG5lPWcuY2hhckNvZGVBdChKKS00ODtwKj12LHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGlu'@;
put 'c3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMp'@;
put 'e3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLFMpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsUyk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLFMpOyJo'@;
put 'ZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHY9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHYrKyx0aGlzLm5lZ2F0aXZlPTEpLHY8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx2LFMpOih0aGlz'@;
put 'Ll9wYXJzZUJhc2UoZyxDLHYpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsUyl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4'@;
put 'ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2'@;
put 'MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUyl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLFMpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29y'@;
put 'ZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3LEo9MDtpZigiYmUiPT09Uylm'@;
put 'b3Iodj1nLmxlbmd0aC0xLHA9MDt2Pj0wO3YtPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YtMV08PDh8Z1t2LTJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1TKWZv'@;
put 'cih2PTAscD0wO3Y8Zy5sZW5ndGg7dis9Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdisxXTw8OHxnW3YrMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUu'@;
put 'cHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMsUyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHc9MCxK'@;
put 'PTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMTt2Pj1DO3YtPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7ZWxzZSBmb3Iodj0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt2PGcu'@;
put 'bGVuZ3RoO3YrPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxTKXt0aGlzLndvcmRzPVswXSx0'@;
put 'aGlzLmxlbmd0aD0xO2Zvcih2YXIgdj0wLHA9MTtwPD02NzEwODg2MztwKj1DKXYrKzt2LS0scD1wL0N8MDtmb3IodmFyIHc9Zy5sZW5ndGgtUyxKPXcldixuZT1NYXRoLm1pbih3LHctSikrUyxkZT0wLGZlPVM7ZmU8bmU7ZmUrPXYpZGU9WShnLGZlLGZlK3YsQyksdGhpcy5pbXVsbihwKSx0'@;
put 'aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKTtpZigwIT09Sil7dmFyIHhlPTE7Zm9yKGRlPVkoZyxmZSxnLmxlbmd0aCxDKSxmZT0wO2ZlPEo7ZmUrKyl4ZSo9Qzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0'@;
put 'P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtn'@;
put 'Lmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zv'@;
put 'cig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMu'@;
put 'X25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4t'@;
put 'UjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBYPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2'@;
put 'LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2'@;
put 'Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1'@;
put 'LDYwNDY2MTc2XTtmdW5jdGlvbiBlZShnLEMsUyl7Uy5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHY9Zy5sZW5ndGgrQy5sZW5ndGh8MDtTLmxlbmd0aD12LHY9di0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLHc9MHxDLndvcmRzWzBdLEo9cCp3LGRlPUovNjcxMDg4NjR8MDtT'@;
put 'LndvcmRzWzBdPTY3MTA4ODYzJko7Zm9yKHZhciBmZT0xO2ZlPHY7ZmUrKyl7Zm9yKHZhciB4ZT1kZT4+PjI2LExlPTY3MTA4ODYzJmRlLEZlPU1hdGgubWluKGZlLEMubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtZy5sZW5ndGgrMSk7T2U8PUZlO09lKyspeGUrPShKPShwPTB8Zy53b3Jk'@;
put 'c1tmZS1PZXwwXSkqKHc9MHxDLndvcmRzW09lXSkrTGUpLzY3MTA4ODY0fDAsTGU9NjcxMDg4NjMmSjtTLndvcmRzW2ZlXT0wfExlLGRlPTB8eGV9cmV0dXJuIDAhPT1kZT9TLndvcmRzW2ZlXT0wfGRlOlMubGVuZ3RoLS0sUy5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9u'@;
put 'KGcsQyl7dmFyIFM7aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7Uz0iIjtmb3IodmFyIHY9MCxwPTAsdz0wO3c8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj10aGlzLndvcmRzW3ddLG5lPSgxNjc3NzIxNSYoSjw8dnxwKSkudG9TdHJpbmcoMTYpO1M9MCE9KHA9Sj4+PjI0'@;
put 'LXYmMTY3NzcyMTUpfHx3IT09dGhpcy5sZW5ndGgtMT9YWzYtbmUubGVuZ3RoXStuZStTOm5lK1MsKHYrPTIpPj0yNiYmKHYtPTI2LHctLSl9Zm9yKDAhPT1wJiYoUz1wLnRvU3RyaW5nKDE2KStTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9'@;
put 'Ii0iK1MpLFN9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGRlPVVbZ10sZmU9cVtnXTtTPSIiO3ZhciB4ZT10aGlzLmNsb25lKCk7Zm9yKHhlLm5lZ2F0aXZlPTA7IXhlLmlzWmVybygpOyl7dmFyIExlPXhlLm1vZG4oZmUpLnRvU3RyaW5nKGcpO1M9KHhlPXhlLmlkaXZuKGZlKSku'@;
put 'aXNaZXJvKCk/TGUrUzpYW2RlLUxlLmxlbmd0aF0rTGUrU31mb3IodGhpcy5pc1plcm8oKSYmKFM9IjAiK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9'@;
put 'LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0'@;
put 'KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnBy'@;
put 'b3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PWopLHRoaXMudG9BcnJheUxpa2UoaixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJh'@;
put 'eUxpa2U9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PXRoaXMuYnl0ZUxlbmd0aCgpLHA9U3x8TWF0aC5tYXgoMSx2KTtJKHY8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3Zh'@;
put 'ciB3LEosbmU9ImxlIj09PUMsZGU9bmV3IGcocCksZmU9dGhpcy5jbG9uZSgpO2lmKG5lKXtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtKXT13O2Zvcig7SjxwO0orKylkZVtKXT0wfWVsc2V7Zm9yKEo9MDtKPHAtdjtKKyspZGVbSl09'@;
put 'MDtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtwLUotMV09d31yZXR1cm4gZGV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFy'@;
put 'IEM9ZyxTPTA7cmV0dXJuIEM+PTQwOTYmJihTKz0xMyxDPj4+PTEzKSxDPj02NCYmKFMrPTcsQz4+Pj03KSxDPj04JiYoUys9NCxDPj4+PTQpLEM+PTImJihTKz0yLEM+Pj49MiksUytDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBD'@;
put 'PWcsUz0wO3JldHVybiEoODE5MSZDKSYmKFMrPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoUys9NyxDPj4+PTcpLCEoMTUmQykmJihTKz00LEM+Pj49NCksISgzJkMpJiYoUys9MixDPj4+PTIpLCEoMSZDKSYmUysrLFN9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRo'@;
put 'aXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3Zh'@;
put 'ciBTPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPVMsMjYhPT1TKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9u'@;
put 'ZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8'@;
put 'KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxn'@;
put 'LndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5n'@;
put 'dGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5j'@;
put 'dGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIFM9MDtTPEMubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU10mZy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5p'@;
put 'YW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRo'@;
put 'aXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxTO3RoaXMubGVuZ3RoPmcubGVuZ3Ro'@;
put 'PyhDPXRoaXMsUz1nKTooQz1nLFM9dGhpcyk7Zm9yKHZhciB2PTA7djxTLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdXlMud29yZHNbdl07aWYodGhpcyE9PUMpZm9yKDt2PEMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3Ro'@;
put 'PUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90'@;
put 'aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVu'@;
put 'Y3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLFM9ZyUyNjt0aGlzLl9leHBhbmQoQyksUz4wJiZDLS07Zm9yKHZhciB2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJn50aGlzLndvcmRzW3ZdO3JldHVybiBTPjAmJih0'@;
put 'aGlzLndvcmRzW3ZdPX50aGlzLndvcmRzW3ZdJjY3MTA4ODYzPj4yNi1TKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVv'@;
put 'ZiBnJiZnPj0wKTt2YXIgUz1nLzI2fDAsdj1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdPUM/dGhpcy53b3Jkc1tTXXwxPDx2OnRoaXMud29yZHNbU10mfigxPDx2KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsUyx2'@;
put 'O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9'@;
put 'MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pKygw'@;
put 'fHYud29yZHNbd10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJnc8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9Uy5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlz'@;
put 'Lmxlbmd0aCsrO2Vsc2UgaWYoUyE9PXRoaXMpZm9yKDt3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPVMud29yZHNbd107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5l'@;
put 'Z2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcp'@;
put 'OmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4g'@;
put 'dGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgUyx2LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oUz10aGlzLHY9'@;
put 'Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgdz0wLEo9MDtKPHYubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pLSgwfHYud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7Zm9yKDswIT09dyYmSjxTLmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKSt3KT4+'@;
put 'MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2lmKDA9PT13JiZKPFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO0o8Uy5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09Uy53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsSiksUyE9PXRoaXMmJih0aGlzLm5l'@;
put 'Z2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIHRlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwLHcsSj1nLndvcmRzLG5lPUMud29yZHMsZGU9Uy53b3JkcyxmZT0wLHhlPTB8SlswXSxMZT04'@;
put 'MTkxJnhlLEZlPXhlPj4+MTMsT2U9MHxKWzFdLGplPTgxOTEmT2UsV2U9T2U+Pj4xMyxLZT0wfEpbMl0sWWU9ODE5MSZLZSxKZT1LZT4+PjEzLGx0PTB8SlszXSxQZT04MTkxJmx0LGJlPWx0Pj4+MTMsQWU9MHxKWzRdLFRlPTgxOTEmQWUscWU9QWU+Pj4xMyxYZT0wfEpbNV0sVWU9ODE5MSZY'@;
put 'ZSxodD1YZT4+PjEzLE1lPTB8Sls2XSxEZT04MTkxJk1lLHplPU1lPj4+MTMsaXQ9MHxKWzddLHV0PTgxOTEmaXQsTXQ9aXQ+Pj4xMyxIdD0wfEpbOF0sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8Sls5XSxVdD04MTkxJkNuLGJuPUNuPj4+MTMsV249MHxuZVswXSxlbj04MTkxJlduLCRu'@;
put 'PVduPj4+MTMsSG49MHxuZVsxXSxmdD04MTkxJkhuLGZuPUhuPj4+MTMsaG49MHxuZVsyXSx3dD04MTkxJmhuLFh0PWhuPj4+MTMsX3Q9MHxuZVszXSxOdD04MTkxJl90LG1uPV90Pj4+MTMscnQ9MHxuZVs0XSxJdD04MTkxJnJ0LEp0PXJ0Pj4+MTMsRHQ9MHxuZVs1XSxwdD04MTkxJkR0LFl0'@;
put 'PUR0Pj4+MTMsSW49MHxuZVs2XSx6dD04MTkxJkluLHluPUluPj4+MTMseG49MHxuZVs3XSxzbj04MTkxJnhuLEJuPXhuPj4+MTMsUm49MHxuZVs4XSwkdD04MTkxJlJuLFBuPVJuPj4+MTMsbmk9MHxuZVs5XSxsbj04MTkxJm5pLGpuPW5pPj4+MTM7Uy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMu'@;
put 'bmVnYXRpdmUsUy5sZW5ndGg9MTk7dmFyIHFyPShmZSsodj1NYXRoLmltdWwoTGUsZW4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKExlLCRuKSkrTWF0aC5pbXVsKEZlLGVuKXwwKSk8PDEzKXwwO2ZlPSgodz1NYXRoLmltdWwoRmUsJG4pKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxx'@;
put 'ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoamUsZW4pLHA9KHA9TWF0aC5pbXVsKGplLCRuKSkrTWF0aC5pbXVsKFdlLGVuKXwwLHc9TWF0aC5pbXVsKFdlLCRuKTt2YXIgZ2k9KGZlKyh2PXYrTWF0aC5pbXVsKExlLGZ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsZm4pfDAp'@;
put 'K01hdGguaW11bChGZSxmdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsZm4pfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChZZSxlbikscD0ocD1NYXRoLmltdWwoWWUsJG4pKStNYXRoLmltdWwoSmUsZW4pfDAsdz1NYXRoLmlt'@;
put 'dWwoSmUsJG4pLHY9ditNYXRoLmltdWwoamUsZnQpfDAscD0ocD1wK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKFdlLGZ0KXwwLHc9dytNYXRoLmltdWwoV2UsZm4pfDA7dmFyIHhyPShmZSsodj12K01hdGguaW11bChMZSx3dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KExlLFh0KXwwKStNYXRoLmltdWwoRmUsd3QpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFh0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUGUsZW4pLHA9KHA9TWF0aC5pbXVsKFBlLCRuKSkrTWF0aC5pbXVsKGJlLGVuKXww'@;
put 'LHc9TWF0aC5pbXVsKGJlLCRuKSx2PXYrTWF0aC5pbXVsKFllLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsZm4pfDApK01hdGguaW11bChKZSxmdCl8MCx3PXcrTWF0aC5pbXVsKEplLGZuKXwwLHY9ditNYXRoLmltdWwoamUsd3QpfDAscD0ocD1wK01hdGguaW11bChqZSxYdCl8MCkrTWF0'@;
put 'aC5pbXVsKFdlLHd0KXwwLHc9dytNYXRoLmltdWwoV2UsWHQpfDA7dmFyIFVpPShmZSsodj12K01hdGguaW11bChMZSxOdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoRmUsTnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLG1u'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVGUsZW4pLHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKHFlLGVuKXwwLHc9TWF0aC5pbXVsKHFlLCRuKSx2PXYrTWF0aC5pbXVsKFBlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUs'@;
put 'Zm4pfDApK01hdGguaW11bChiZSxmdCl8MCx3PXcrTWF0aC5pbXVsKGJlLGZuKXwwLHY9ditNYXRoLmltdWwoWWUsd3QpfDAscD0ocD1wK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKEplLHd0KXwwLHc9dytNYXRoLmltdWwoSmUsWHQpfDAsdj12K01hdGguaW11bChqZSxOdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKGplLG1uKXwwKStNYXRoLmltdWwoV2UsTnQpfDAsdz13K01hdGguaW11bChXZSxtbil8MDt2YXIgS3I9KGZlKyh2PXYrTWF0aC5pbXVsKExlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsSnQpfDApK01hdGguaW11bChGZSxJdCl8MCkpPDwx'@;
put 'Myl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsSnQpfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChVZSxlbikscD0ocD1NYXRoLmltdWwoVWUsJG4pKStNYXRoLmltdWwoaHQsZW4pfDAsdz1NYXRoLmltdWwoaHQsJG4pLHY9ditNYXRoLmltdWwo'@;
put 'VGUsZnQpfDAscD0ocD1wK01hdGguaW11bChUZSxmbil8MCkrTWF0aC5pbXVsKHFlLGZ0KXwwLHc9dytNYXRoLmltdWwocWUsZm4pfDAsdj12K01hdGguaW11bChQZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsdz13K01hdGguaW11bChiZSxY'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKFllLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsbW4pfDApK01hdGguaW11bChKZSxOdCl8MCx3PXcrTWF0aC5pbXVsKEplLG1uKXwwLHY9ditNYXRoLmltdWwoamUsSXQpfDAscD0ocD1wK01hdGguaW11bChqZSxKdCl8MCkrTWF0aC5pbXVsKFdlLEl0KXww'@;
put 'LHc9dytNYXRoLmltdWwoV2UsSnQpfDA7dmFyIG5vPShmZSsodj12K01hdGguaW11bChMZSxwdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoRmUscHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFl0KXwwKSsocD4+PjEzKXww'@;
put 'KSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoRGUsZW4pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKHplLGVuKXwwLHc9TWF0aC5pbXVsKHplLCRuKSx2PXYrTWF0aC5pbXVsKFVlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11'@;
put 'bChodCxmdCl8MCx3PXcrTWF0aC5pbXVsKGh0LGZuKXwwLHY9ditNYXRoLmltdWwoVGUsd3QpfDAscD0ocD1wK01hdGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLHc9dytNYXRoLmltdWwocWUsWHQpfDAsdj12K01hdGguaW11bChQZSxOdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFBlLG1uKXwwKStNYXRoLmltdWwoYmUsTnQpfDAsdz13K01hdGguaW11bChiZSxtbil8MCx2PXYrTWF0aC5pbXVsKFllLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsSnQpfDApK01hdGguaW11bChKZSxJdCl8MCx3PXcrTWF0aC5pbXVsKEplLEp0KXwwLHY9ditNYXRoLmltdWwoamUscHQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChqZSxZdCl8MCkrTWF0aC5pbXVsKFdlLHB0KXwwLHc9dytNYXRoLmltdWwoV2UsWXQpfDA7dmFyIEhyPShmZSsodj12K01hdGguaW11bChMZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLHluKXwwKStNYXRoLmltdWwoRmUsenQpfDAp'@;
put 'KTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLHluKXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwodXQsZW4pLHA9KHA9TWF0aC5pbXVsKHV0LCRuKSkrTWF0aC5pbXVsKE10LGVuKXwwLHc9TWF0aC5pbXVsKE10LCRuKSx2PXYrTWF0aC5p'@;
put 'bXVsKERlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bCh6ZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHplLGZuKXwwLHY9ditNYXRoLmltdWwoVWUsd3QpfDAscD0ocD1wK01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVsKGh0LHd0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'aHQsWHQpfDAsdj12K01hdGguaW11bChUZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLG1uKXwwKStNYXRoLmltdWwocWUsTnQpfDAsdz13K01hdGguaW11bChxZSxtbil8MCx2PXYrTWF0aC5pbXVsKFBlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsSnQpfDApK01hdGguaW11bChiZSxJ'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKGJlLEp0KXwwLHY9ditNYXRoLmltdWwoWWUscHQpfDAscD0ocD1wK01hdGguaW11bChZZSxZdCl8MCkrTWF0aC5pbXVsKEplLHB0KXwwLHc9dytNYXRoLmltdWwoSmUsWXQpfDAsdj12K01hdGguaW11bChqZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLHlu'@;
put 'KXwwKStNYXRoLmltdWwoV2UsenQpfDAsdz13K01hdGguaW11bChXZSx5bil8MDt2YXIgcWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsQm4pfDApK01hdGguaW11bChGZSxzbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmlt'@;
put 'dWwoRmUsQm4pfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChQdCxlbikscD0ocD1NYXRoLmltdWwoUHQsJG4pKStNYXRoLmltdWwob24sZW4pfDAsdz1NYXRoLmltdWwob24sJG4pLHY9ditNYXRoLmltdWwodXQsZnQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bCh1dCxmbil8MCkrTWF0aC5pbXVsKE10LGZ0KXwwLHc9dytNYXRoLmltdWwoTXQsZm4pfDAsdj12K01hdGguaW11bChEZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsdz13K01hdGguaW11bCh6ZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFVl'@;
put 'LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChodCxOdCl8MCx3PXcrTWF0aC5pbXVsKGh0LG1uKXwwLHY9ditNYXRoLmltdWwoVGUsSXQpfDAscD0ocD1wK01hdGguaW11bChUZSxKdCl8MCkrTWF0aC5pbXVsKHFlLEl0KXwwLHc9dytNYXRoLmltdWwocWUsSnQp'@;
put 'fDAsdj12K01hdGguaW11bChQZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUscHQpfDAsdz13K01hdGguaW11bChiZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFllLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUseW4pfDApK01hdGguaW11bChKZSx6dCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKEplLHluKXwwLHY9ditNYXRoLmltdWwoamUsc24pfDAscD0ocD1wK01hdGguaW11bChqZSxCbil8MCkrTWF0aC5pbXVsKFdlLHNuKXwwLHc9dytNYXRoLmltdWwoV2UsQm4pfDA7dmFyIEppPShmZSsodj12K01hdGguaW11bChMZSwkdCl8MCl8MCkrKCg4MTkxJihwPShw'@;
put 'PXArTWF0aC5pbXVsKExlLFBuKXwwKStNYXRoLmltdWwoRmUsJHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFBuKXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZW4pLHA9KHA9TWF0aC5pbXVsKFV0LCRuKSkrTWF0aC5p'@;
put 'bXVsKGJuLGVuKXwwLHc9TWF0aC5pbXVsKGJuLCRuKSx2PXYrTWF0aC5pbXVsKFB0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsZm4pfDApK01hdGguaW11bChvbixmdCl8MCx3PXcrTWF0aC5pbXVsKG9uLGZuKXwwLHY9ditNYXRoLmltdWwodXQsd3QpfDAscD0ocD1wK01hdGguaW11bCh1'@;
put 'dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXwwLHc9dytNYXRoLmltdWwoTXQsWHQpfDAsdj12K01hdGguaW11bChEZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG1uKXwwKStNYXRoLmltdWwoemUsTnQpfDAsdz13K01hdGguaW11bCh6ZSxtbil8MCx2PXYrTWF0aC5pbXVsKFVlLEl0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoVWUsSnQpfDApK01hdGguaW11bChodCxJdCl8MCx3PXcrTWF0aC5pbXVsKGh0LEp0KXwwLHY9ditNYXRoLmltdWwoVGUscHQpfDAscD0ocD1wK01hdGguaW11bChUZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLHc9dytNYXRoLmltdWwocWUsWXQpfDAsdj12'@;
put 'K01hdGguaW11bChQZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUsenQpfDAsdz13K01hdGguaW11bChiZSx5bil8MCx2PXYrTWF0aC5pbXVsKFllLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsQm4pfDApK01hdGguaW11bChKZSxzbil8MCx3PXcrTWF0'@;
put 'aC5pbXVsKEplLEJuKXwwLHY9ditNYXRoLmltdWwoamUsJHQpfDAscD0ocD1wK01hdGguaW11bChqZSxQbil8MCkrTWF0aC5pbXVsKFdlLCR0KXwwLHc9dytNYXRoLmltdWwoV2UsUG4pfDA7dmFyIGFvPShmZSsodj12K01hdGguaW11bChMZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0'@;
put 'aC5pbXVsKExlLGpuKXwwKStNYXRoLmltdWwoRmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGpuKXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZnQpLHA9KHA9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJu'@;
put 'LGZ0KXwwLHc9TWF0aC5pbXVsKGJuLGZuKSx2PXYrTWF0aC5pbXVsKFB0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWHQpfDApK01hdGguaW11bChvbix3dCl8MCx3PXcrTWF0aC5pbXVsKG9uLFh0KXwwLHY9ditNYXRoLmltdWwodXQsTnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxtbil8'@;
put 'MCkrTWF0aC5pbXVsKE10LE50KXwwLHc9dytNYXRoLmltdWwoTXQsbW4pfDAsdj12K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLEp0KXwwKStNYXRoLmltdWwoemUsSXQpfDAsdz13K01hdGguaW11bCh6ZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHB0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoVWUsWXQpfDApK01hdGguaW11bChodCxwdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFl0KXwwLHY9ditNYXRoLmltdWwoVGUsenQpfDAscD0ocD1wK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLHc9dytNYXRoLmltdWwocWUseW4pfDAsdj12K01hdGgu'@;
put 'aW11bChQZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFBlLEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAsdz13K01hdGguaW11bChiZSxCbil8MCx2PXYrTWF0aC5pbXVsKFllLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUG4pfDApK01hdGguaW11bChKZSwkdCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KEplLFBuKXwwO3ZhciBybz0oZmUrKHY9ditNYXRoLmltdWwoamUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChqZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChXZSxqbil8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAs'@;
put 'cm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHd0KSxwPShwPU1hdGguaW11bChVdCxYdCkpK01hdGguaW11bChibix3dCl8MCx3PU1hdGguaW11bChibixYdCksdj12K01hdGguaW11bChQdCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LG1uKXwwKStNYXRoLmltdWwob24sTnQpfDAsdz13'@;
put 'K01hdGguaW11bChvbixtbil8MCx2PXYrTWF0aC5pbXVsKHV0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsSnQpfDApK01hdGguaW11bChNdCxJdCl8MCx3PXcrTWF0aC5pbXVsKE10LEp0KXwwLHY9ditNYXRoLmltdWwoRGUscHQpfDAscD0ocD1wK01hdGguaW11bChEZSxZdCl8MCkrTWF0'@;
put 'aC5pbXVsKHplLHB0KXwwLHc9dytNYXRoLmltdWwoemUsWXQpfDAsdj12K01hdGguaW11bChVZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHluKXwwKStNYXRoLmltdWwoaHQsenQpfDAsdz13K01hdGguaW11bChodCx5bil8MCx2PXYrTWF0aC5pbXVsKFRlLHNuKXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoVGUsQm4pfDApK01hdGguaW11bChxZSxzbil8MCx3PXcrTWF0aC5pbXVsKHFlLEJuKXwwLHY9ditNYXRoLmltdWwoUGUsJHQpfDAscD0ocD1wK01hdGguaW11bChQZSxQbil8MCkrTWF0aC5pbXVsKGJlLCR0KXwwLHc9dytNYXRoLmltdWwoYmUsUG4pfDA7dmFyIGlvPShmZSsodj12'@;
put 'K01hdGguaW11bChZZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFllLGpuKXwwKStNYXRoLmltdWwoSmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEplLGpuKXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwo'@;
put 'VXQsTnQpLHA9KHA9TWF0aC5pbXVsKFV0LG1uKSkrTWF0aC5pbXVsKGJuLE50KXwwLHc9TWF0aC5pbXVsKGJuLG1uKSx2PXYrTWF0aC5pbXVsKFB0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsSnQpfDApK01hdGguaW11bChvbixJdCl8MCx3PXcrTWF0aC5pbXVsKG9uLEp0KXwwLHY9ditN'@;
put 'YXRoLmltdWwodXQscHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0KXwwLHc9dytNYXRoLmltdWwoTXQsWXQpfDAsdj12K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLHluKXwwKStNYXRoLmltdWwoemUsenQpfDAsdz13K01hdGgu'@;
put 'aW11bCh6ZSx5bil8MCx2PXYrTWF0aC5pbXVsKFVlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCx3PXcrTWF0aC5pbXVsKGh0LEJuKXwwLHY9ditNYXRoLmltdWwoVGUsJHQpfDAscD0ocD1wK01hdGguaW11bChUZSxQbil8MCkrTWF0aC5pbXVs'@;
put 'KHFlLCR0KXwwLHc9dytNYXRoLmltdWwocWUsUG4pfDA7dmFyIEdpPShmZSsodj12K01hdGguaW11bChQZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFBlLGpuKXwwKStNYXRoLmltdWwoYmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGJlLGpuKXwwKSso'@;
put 'cD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsSXQpLHA9KHA9TWF0aC5pbXVsKFV0LEp0KSkrTWF0aC5pbXVsKGJuLEl0KXwwLHc9TWF0aC5pbXVsKGJuLEp0KSx2PXYrTWF0aC5pbXVsKFB0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWXQpfDAp'@;
put 'K01hdGguaW11bChvbixwdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFl0KXwwLHY9ditNYXRoLmltdWwodXQsenQpfDAscD0ocD1wK01hdGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVsKE10LHp0KXwwLHc9dytNYXRoLmltdWwoTXQseW4pfDAsdj12K01hdGguaW11bChEZSxzbil8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoemUsc24pfDAsdz13K01hdGguaW11bCh6ZSxCbil8MCx2PXYrTWF0aC5pbXVsKFVlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUG4pfDApK01hdGguaW11bChodCwkdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFBuKXwwO3ZhciBobz0oZmUr'@;
put 'KHY9ditNYXRoLmltdWwoVGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxqbil8MCkrTWF0aC5pbXVsKHFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChxZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLHY9TWF0aC5p'@;
put 'bXVsKFV0LHB0KSxwPShwPU1hdGguaW11bChVdCxZdCkpK01hdGguaW11bChibixwdCl8MCx3PU1hdGguaW11bChibixZdCksdj12K01hdGguaW11bChQdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LHluKXwwKStNYXRoLmltdWwob24senQpfDAsdz13K01hdGguaW11bChvbix5bil8MCx2'@;
put 'PXYrTWF0aC5pbXVsKHV0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwodXQsQm4pfDApK01hdGguaW11bChNdCxzbil8MCx3PXcrTWF0aC5pbXVsKE10LEJuKXwwLHY9ditNYXRoLmltdWwoRGUsJHQpfDAscD0ocD1wK01hdGguaW11bChEZSxQbil8MCkrTWF0aC5pbXVsKHplLCR0KXwwLHc9dytN'@;
put 'YXRoLmltdWwoemUsUG4pfDA7dmFyIHlyPShmZSsodj12K01hdGguaW11bChVZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFVlLGpuKXwwKStNYXRoLmltdWwoaHQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoeXI+'@;
put 'Pj4yNil8MCx5ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsenQpLHA9KHA9TWF0aC5pbXVsKFV0LHluKSkrTWF0aC5pbXVsKGJuLHp0KXwwLHc9TWF0aC5pbXVsKGJuLHluKSx2PXYrTWF0aC5pbXVsKFB0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixz'@;
put 'bil8MCx3PXcrTWF0aC5pbXVsKG9uLEJuKXwwLHY9ditNYXRoLmltdWwodXQsJHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxQbil8MCkrTWF0aC5pbXVsKE10LCR0KXwwLHc9dytNYXRoLmltdWwoTXQsUG4pfDA7dmFyIFBpPShmZSsodj12K01hdGguaW11bChEZSxsbil8MCl8MCkrKCg4MTkx'@;
put 'JihwPShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoemUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHplLGpuKXwwKSsocD4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsc24pLHA9KHA9TWF0aC5pbXVsKFV0LEJuKSkr'@;
put 'TWF0aC5pbXVsKGJuLHNuKXwwLHc9TWF0aC5pbXVsKGJuLEJuKSx2PXYrTWF0aC5pbXVsKFB0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsUG4pfDApK01hdGguaW11bChvbiwkdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFBuKXwwO3ZhciBMbz0oZmUrKHY9ditNYXRoLmltdWwodXQsbG4pfDAp'@;
put 'fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh1dCxqbil8MCkrTWF0aC5pbXVsKE10LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChNdCxqbil8MCkrKHA+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LCR0KSxwPShwPU1hdGguaW11'@;
put 'bChVdCxQbikpK01hdGguaW11bChibiwkdCl8MCx3PU1hdGguaW11bChibixQbik7dmFyIGhzPShmZSsodj12K01hdGguaW11bChQdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFB0LGpuKXwwKStNYXRoLmltdWwob24sbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5p'@;
put 'bXVsKG9uLGpuKXwwKSsocD4+PjEzKXwwKSsoaHM+Pj4yNil8MCxocyY9NjcxMDg4NjM7dmFyIHJzPShmZSsodj1NYXRoLmltdWwoVXQsbG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFV0LGpuKSkrTWF0aC5pbXVsKGJuLGxuKXwwKSk8PDEzKXwwO3JldHVybiBmZT0oKHc9TWF0aC5p'@;
put 'bXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKHJzPj4+MjYpfDAscnMmPTY3MTA4ODYzLGRlWzBdPXFyLGRlWzFdPWdpLGRlWzJdPXhyLGRlWzNdPVVpLGRlWzRdPUtyLGRlWzVdPW5vLGRlWzZdPUhyLGRlWzddPXFpLGRlWzhdPUppLGRlWzldPWFvLGRlWzEwXT1ybyxkZVsxMV09aW8sZGVbMTJd'@;
put 'PUdpLGRlWzEzXT1obyxkZVsxNF09eXIsZGVbMTVdPVBpLGRlWzE2XT1MbyxkZVsxN109aHMsZGVbMThdPXJzLDAhPT1mZSYmKGRlWzE5XT1mZSxTLmxlbmd0aCsrKSxTfTtmdW5jdGlvbiBvZShnLEMsUyl7cmV0dXJuKG5ldyBzZSkubXVscChnLEMsUyl9ZnVuY3Rpb24gc2UoZyxDKXt0aGlz'@;
put 'Lng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fCh0ZT1lZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgdj10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcsQyk6djw2Mz9lZSh0aGlzLGcsQyk6djwx'@;
put 'MDI0P2Z1bmN0aW9uKHAsdyxKKXtKLm5lZ2F0aXZlPXcubmVnYXRpdmVecC5uZWdhdGl2ZSxKLmxlbmd0aD1wLmxlbmd0aCt3Lmxlbmd0aDtmb3IodmFyIG5lPTAsZGU9MCxmZT0wO2ZlPEoubGVuZ3RoLTE7ZmUrKyl7dmFyIHhlPWRlO2RlPTA7Zm9yKHZhciBMZT02NzEwODg2MyZuZSxGZT1N'@;
put 'YXRoLm1pbihmZSx3Lmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLXAubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXt2YXIgV2U9KDB8cC53b3Jkc1tmZS1PZV0pKigwfHcud29yZHNbT2VdKSxLZT02NzEwODg2MyZXZTtMZT02NzEwODg2MyYoS2U9S2UrTGV8MCksZGUrPSh4ZT0oeGU9eGUrKFdl'@;
put 'LzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2LHhlJj02NzEwODg2M31KLndvcmRzW2ZlXT1MZSxuZT14ZSx4ZT1kZX1yZXR1cm4gMCE9PW5lP0oud29yZHNbZmVdPW5lOkoubGVuZ3RoLS0sSi5zdHJpcCgpfSh0aGlzLGcsQyk6b2UodGhpcyxnLEMpfSxzZS5wcm90b3R5cGUubWFr'@;
put 'ZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHY9MDt2PGc7disrKUNbdl09dGhpcy5yZXZCaW4odixTLGcpO3JldHVybiBDfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxTKXtpZigwPT09Z3x8Zz09'@;
put 'PVMtMSlyZXR1cm4gZztmb3IodmFyIHY9MCxwPTA7cDxDO3ArKyl2fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHZ9LHNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXtmb3IodmFyIEo9MDtKPHc7SisrKXZbSl09Q1tnW0pdXSxwW0pdPVNbZ1tKXV19LHNlLnBy'@;
put 'b3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLFMsdixwLHcpe3RoaXMucGVybXV0ZSh3LGcsQyxTLHYscCk7Zm9yKHZhciBKPTE7SjxwO0o8PD0xKWZvcih2YXIgbmU9Sjw8MSxkZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGZlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxw'@;
put 'O3hlKz1uZSlmb3IodmFyIExlPWRlLEZlPWZlLE9lPTA7T2U8SjtPZSsrKXt2YXIgamU9U1t4ZStPZV0sV2U9dlt4ZStPZV0sS2U9U1t4ZStPZStKXSxZZT12W3hlK09lK0pdLEplPUxlKktlLUZlKlllO1llPUxlKlllK0ZlKktlLFNbeGUrT2VdPWplKyhLZT1KZSksdlt4ZStPZV09V2UrWWUs'@;
put 'U1t4ZStPZStKXT1qZS1LZSx2W3hlK09lK0pdPVdlLVllLE9lIT09bmUmJihKZT1kZSpMZS1mZSpGZSxGZT1kZSpGZStmZSpMZSxMZT1KZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgUz0xfE1hdGgubWF4KEMsZyksdj0xJlMscD0wO2ZvcihTPVMvMnww'@;
put 'O1M7Uz4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3Z9LHNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLFMpe2lmKCEoUzw9MSkpZm9yKHZhciB2PTA7djxTLzI7disrKXt2YXIgcD1nW3ZdO2dbdl09Z1tTLXYtMV0sZ1tTLXYtMV09cCxwPUNbdl0sQ1t2XT0tQ1tTLXYtMV0sQ1tT'@;
put 'LXYtMV09LXB9fSxzZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTAsdj0wO3Y8Qy8yO3YrKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip2KzFdL0MpK01hdGgucm91bmQoZ1syKnZdL0MpK1M7Z1t2XT02NzEwODg2MyZwLFM9cDw2NzEwODg2ND8w'@;
put 'OnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLFMsdil7Zm9yKHZhciBwPTAsdz0wO3c8Qzt3KyspU1syKnddPTgxOTEmKHArPTB8Z1t3XSksU1syKncrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3Iodz0yKkM7dzx2OysrdylT'@;
put 'W3ddPTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxzZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9MDtTPGc7UysrKUNbU109MDtyZXR1cm4gQ30sc2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PTIqdGhpcy5ndWVz'@;
put 'c0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQodiksdz10aGlzLnN0dWIodiksSj1uZXcgQXJyYXkodiksbmU9bmV3IEFycmF5KHYpLGRlPW5ldyBBcnJheSh2KSxmZT1uZXcgQXJyYXkodikseGU9bmV3IEFycmF5KHYpLExlPW5ldyBBcnJheSh2KSxGZT1TLndvcmRz'@;
put 'O0ZlLmxlbmd0aD12LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLEosdiksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsZmUsdiksdGhpcy50cmFuc2Zvcm0oSix3LG5lLGRlLHYscCksdGhpcy50cmFuc2Zvcm0oZmUsdyx4ZSxMZSx2LHApO2Zvcih2YXIgT2U9MDtP'@;
put 'ZTx2O09lKyspe3ZhciBqZT1uZVtPZV0qeGVbT2VdLWRlW09lXSpMZVtPZV07ZGVbT2VdPW5lW09lXSpMZVtPZV0rZGVbT2VdKnhlW09lXSxuZVtPZV09amV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG5lLGRlLHYpLHRoaXMudHJhbnNmb3JtKG5lLGRlLEZlLHcsdixwKSx0aGlzLmNvbmp1Z2F0'@;
put 'ZShGZSx3LHYpLHRoaXMubm9ybWFsaXplMTNiKEZlLHYpLFMubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLFMuc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRz'@;
put 'PW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksb2UodGhpcyxnLEMpfSxFLnByb3Rv'@;
put 'dHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0o'@;
put 'MHx0aGlzLndvcmRzW1NdKSpnLHA9KDY3MTA4ODYzJnYpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9di82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90'@;
put 'eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnBy'@;
put 'b3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24odyl7Zm9yKHZhciBKPW5ldyBBcnJheSh3LmJpdExlbmd0aCgpKSxuZT0wO25lPEoubGVuZ3RoO25lKyspe3ZhciBmZT1uZSUyNjtKW25lXT0ody53b3Jkc1tuZS8yNnwwXSYxPDxmZSk+Pj5mZX1yZXR1cm4gSn0oZyk7aWYo'@;
put 'MD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIFM9dGhpcyx2PTA7djxDLmxlbmd0aCYmMD09PUNbdl07disrLFM9Uy5zcXIoKSk7aWYoKyt2PEMubGVuZ3RoKWZvcih2YXIgcD1TLnNxcigpO3Y8Qy5sZW5ndGg7disrLHA9cC5zcXIoKSkwIT09Q1t2XSYmKFM9Uy5tdWwocCkp'@;
put 'O3JldHVybiBTfSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLFM9ZyUyNix2PShnLVMpLzI2LHA9NjcxMDg4NjM+Pj4yNi1TPDwyNi1TO2lmKDAhPT1TKXt2YXIgdz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3Zh'@;
put 'ciBKPXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLUo8PFN8dyx3PUo+Pj4yNi1TfXcmJih0aGlzLndvcmRzW0NdPXcsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXYpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ZdPXRoaXMu'@;
put 'd29yZHNbQ107Zm9yKEM9MDtDPHY7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9dn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1'@;
put 'c2hybj1mdW5jdGlvbihnLEMsUyl7dmFyIHY7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHY9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsdz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksSj02NzEwODg2M142NzEwODg2Mz4+PnA8PHAsbmU9UztpZih2LT13LHY9TWF0aC5t'@;
put 'YXgoMCx2KSxuZSl7Zm9yKHZhciBkZT0wO2RlPHc7ZGUrKyluZS53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZV07bmUubGVuZ3RoPXd9aWYoMCE9PXcpaWYodGhpcy5sZW5ndGg+dylmb3IodGhpcy5sZW5ndGgtPXcsZGU9MDtkZTx0aGlzLmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPXRoaXMu'@;
put 'd29yZHNbZGUrd107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZmU9MDtmb3IoZGU9dGhpcy5sZW5ndGgtMTtkZT49MCYmKDAhPT1mZXx8ZGU+PXYpO2RlLS0pe3ZhciB4ZT0wfHRoaXMud29yZHNbZGVdO3RoaXMud29yZHNbZGVdPWZlPDwyNi1wfHhlPj4+cCxmZT14'@;
put 'ZSZKfXJldHVybiBuZSYmMCE9PWZlJiYobmUud29yZHNbbmUubGVuZ3RoKytdPWZlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoMD09PXRoaXMu'@;
put 'bmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxTKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hy'@;
put 'bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3Zh'@;
put 'ciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1TfHwhKHRoaXMud29yZHNbU10mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhp'@;
put 'cy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PVM/dGhpczooMCE9PUMmJlMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihTLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYz'@;
put 'XjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0'@;
put 'KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0'@;
put 'aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxD'@;
put 'PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3'@;
put 'MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTww'@;
put 'KXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5w'@;
put 'cm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0w'@;
put 'LHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK1MpO3ZhciBKPTA7Zm9yKHY9MDt2PGcubGVuZ3RoO3Yr'@;
put 'Kyl7cD0oMHx0aGlzLndvcmRzW3YrU10pK0o7dmFyIG5lPSgwfGcud29yZHNbdl0pKkM7Sj0oKHAtPTY3MTA4ODYzJm5lKT4+MjYpLShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgtUzt2KyspSj0ocD0oMHx0aGlzLndvcmRzW3Yr'@;
put 'U10pK0opPj4yNix0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcDtpZigwPT09SilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09SiksSj0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKylKPShwPS0oMHx0aGlzLndvcmRzW3ZdKStKKT4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZwO3Jl'@;
put 'dHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBTLHY9dGhpcy5jbG9uZSgpLHA9Zyx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oUz0yNi10aGlzLl9jb3VudEJpdHModykpJiYocD1wLnVzaGxuKFMpLHYu'@;
put 'aXVzaGxuKFMpLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgSixuZT12Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhKPW5ldyBFKG51bGwpKS5sZW5ndGg9bmUrMSxKLndvcmRzPW5ldyBBcnJheShKLmxlbmd0aCk7Zm9yKHZhciBkZT0wO2RlPEoubGVuZ3RoO2RlKyspSi53'@;
put 'b3Jkc1tkZV09MH12YXIgZmU9di5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEsbmUpOzA9PT1mZS5uZWdhdGl2ZSYmKHY9ZmUsSiYmKEoud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5lLTE7eGU+PTA7eGUtLSl7dmFyIExlPTY3MTA4ODY0KigwfHYud29yZHNbcC5sZW5ndGgreGVdKSsoMHx2'@;
put 'LndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3IoTGU9TWF0aC5taW4oTGUvd3wwLDY3MTA4ODYzKSx2Ll9pc2hsbnN1Ym11bChwLExlLHhlKTswIT09di5uZWdhdGl2ZTspTGUtLSx2Lm5lZ2F0aXZlPTAsdi5faXNobG5zdWJtdWwocCwxLHhlKSx2LmlzWmVybygpfHwodi5uZWdhdGl2ZV49MSk7'@;
put 'SiYmKEoud29yZHNbeGVdPUxlKX1yZXR1cm4gSiYmSi5zdHJpcCgpLHYuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1TJiZ2Lml1c2hybihTKSx7ZGl2Okp8fG51bGwsbW9kOnZ9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlz'@;
put 'WmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZl'@;
put 'JiZwLmlhZGQoZykpLHtkaXY6dixtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8odz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLHtkaXY6dixtb2Q6dy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KHc9dGhp'@;
put 'cy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6dy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09'@;
put 'Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNb'@;
put 'MF0pKX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB2LHAsd30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxF'@;
put 'LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgUz0wIT09Qy5kaXYu'@;
put 'bmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx2PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLHc9Uy5jbXAodik7cmV0dXJuIHc8MHx8MT09PXAmJjA9PT13P0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1m'@;
put 'dW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxTPTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklZztyZXR1cm4gU30sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZh'@;
put 'ciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSs2NzEwODg2NCpDO3RoaXMud29yZHNbU109di9nfDAsQz12JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlk'@;
put 'aXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdj1uZXcgRSgxKSxwPW5ldyBFKDApLHc9bmV3'@;
put 'IEUoMCksSj1uZXcgRSgxKSxuZT0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7KUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpLCsrbmU7Zm9yKHZhciBkZT1TLmNsb25lKCksZmU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciB4ZT0wLExlPTE7IShDLndvcmRzWzBdJkxlKSYmeGU8MjY7'@;
put 'Kyt4ZSxMZTw8PTEpO2lmKHhlPjApZm9yKEMuaXVzaHJuKHhlKTt4ZS0tID4wOykodi5pc09kZCgpfHxwLmlzT2RkKCkpJiYodi5pYWRkKGRlKSxwLmlzdWIoZmUpKSx2Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKFMud29yZHNbMF0mT2UpJiZGZTwyNjsrK0Zl'@;
put 'LE9lPDw9MSk7aWYoRmU+MClmb3IoUy5pdXNocm4oRmUpO0ZlLS0gPjA7KSh3LmlzT2RkKCl8fEouaXNPZGQoKSkmJih3LmlhZGQoZGUpLEouaXN1YihmZSkpLHcuaXVzaHJuKDEpLEouaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUyksdi5pc3ViKHcpLHAuaXN1YihKKSk6KFMuaXN1'@;
put 'YihDKSx3LmlzdWIodiksSi5pc3ViKHApKX1yZXR1cm57YTp3LGI6SixnY2Q6Uy5pdXNobG4obmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9D'@;
put 'LnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdixwPW5ldyBFKDEpLHc9bmV3IEUoMCksSj1TLmNsb25lKCk7Qy5jbXBuKDEpPjAmJlMuY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJu'@;
put 'KG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChKKSxwLml1c2hybigxKTtmb3IodmFyIGZlPTAseGU9MTshKFMud29yZHNbMF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9MSk7aWYoZmU+MClmb3IoUy5pdXNocm4oZmUpO2ZlLS0gPjA7KXcuaXNPZGQoKSYmdy5pYWRkKEopLHcuaXVzaHJu'@;
put 'KDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUykscC5pc3ViKHcpKTooUy5pc3ViKEMpLHcuaXN1YihwKSl9cmV0dXJuKHY9MD09PUMuY21wbigxKT9wOncpLmNtcG4oMCk8MCYmdi5pYWRkKGcpLHZ9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBn'@;
put 'LmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLFM9Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxTLm5lZ2F0aXZlPTA7Zm9yKHZhciB2PTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTt2KyspQy5pdXNocm4oMSksUy5pdXNocm4oMSk7Zm9yKDs7'@;
put 'KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoUyk7aWYocDwwKXt2YXIgdz1DO0M9UyxTPXd9ZWxzZSBpZigwPT09cHx8MD09PVMuY21wbigxKSlicmVhaztDLmlzdWIoUyl9cmV0dXJuIFMuaXVzaGxuKHYpfSxF'@;
put 'LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMu'@;
put 'd29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixTPShnLUMpLzI2LHY9MTw8QztpZih0aGlzLmxlbmd0aDw9Uyly'@;
put 'ZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXXw9dix0aGlzO2Zvcih2YXIgcD12LHc9UzswIT09cCYmdzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPTB8dGhpcy53b3Jkc1t3XTtwPShKKz1wKT4+PjI2LHRoaXMud29yZHNbd109SiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYo'@;
put 'dGhpcy53b3Jkc1t3XT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLFM9ZzwwO2lmKDAhPT10aGlzLm5l'@;
put 'Z2F0aXZlJiYhUylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmUylyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtTJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdj0wfHRoaXMud29yZHNbMF07Qz12PT09'@;
put 'Zz8wOnY8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAx'@;
put 'O3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLFM9dGhp'@;
put 'cy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9MHx0aGlzLndvcmRzW1NdLHA9MHxnLndvcmRzW1NdO2lmKHYhPT1wKXt2PHA/Qz0tMTp2PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3Rv'@;
put 'dHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgSChnKX0s'@;
put 'RS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9y'@;
put 'Y2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFk'@;
put 'ZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0'@;
put 'aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElT'@;
put 'dWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwo'@;
put 'dGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJ'@;
put 'U3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi'@;
put 'KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5y'@;
put 'ZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgaGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1'@;
put 'ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEcoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAw'@;
put 'MDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEQoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZm'@;
put 'IGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIEgoZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIp'@;
put 'LHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBOKGcpe0guY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hp'@;
put 'ZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10'@;
put 'aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLFM9Zztkb3t0'@;
put 'aGlzLnNwbGl0KFMsdGhpcy50bXApLEM9KFM9KFM9dGhpcy5pbXVsSyhTKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgdj1DPHRoaXMubj8tMTpTLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXY/KFMud29yZHNbMF09MCxTLmxlbmd0aD0xKTp2PjA/'@;
put 'Uy5pc3ViKHRoaXMucCk6dm9pZCAwIT09Uy5zdHJpcD9TLnN0cmlwKCk6Uy5fc3RyaXAoKSxTfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0s'@;
put 'ayhjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTQxOTQzMDMsdj1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx2O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9dixnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZv'@;
put 'aWQoZy5sZW5ndGg9MSk7dmFyIHc9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT13JlMscD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIEo9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KEomUyk8PDR8dz4+PjIyLHc9Sn1nLndvcmRzW3AtMTBdPXc+Pj49MjIsZy5sZW5ndGgt'@;
put 'PTA9PT13JiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0wfGcud29yZHNbU107Zy53'@;
put 'b3Jkc1tTXT02NzEwODg2MyYoQys9OTc3KnYpLEM9NjQqdisoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxrKEcsdWUpLGsoYix1ZSksayhELHVlKSxELnByb3Rv'@;
put 'dHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTE5KigwfGcud29yZHNbU10pK0MscD02NzEwODg2MyZ2O3Y+Pj49MjYsZy53b3Jkc1tTXT1wLEM9dn1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3By'@;
put 'aW1lPWZ1bmN0aW9uKGcpe2lmKGhlW2ddKXJldHVybiBoZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBHO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93'@;
put 'biBwcmltZSAiK2cpO0M9bmV3IER9cmV0dXJuIGhlW2ddPUMsQ30sSC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9'@;
put 'LEgucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90'@;
put 'eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6'@;
put 'dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBl'@;
put 'LmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5zdWIoQyk7cmV0'@;
put 'dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlzdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTfSxILnByb3RvdHlw'@;
put 'ZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxILnByb3RvdHlwZS5tdWw9ZnVu'@;
put 'Y3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LEgucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxn'@;
put 'KX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIFM9dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLFMpfWZv'@;
put 'cih2YXIgdj10aGlzLm0uc3VibigxKSxwPTA7IXYuaXNaZXJvKCkmJjA9PT12LmFuZGxuKDEpOylwKyssdi5pdXNocm4oMSk7SSghdi5pc1plcm8oKSk7dmFyIHc9bmV3IEUoMSkudG9SZWQodGhpcyksSj13LnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxkZT10aGlzLm0u'@;
put 'Yml0TGVuZ3RoKCk7Zm9yKGRlPW5ldyBFKDIqZGUqZGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhkZSxuZSkuY21wKEopOylkZS5yZWRJQWRkKEopO2Zvcih2YXIgZmU9dGhpcy5wb3coZGUsdikseGU9dGhpcy5wb3coZyx2LmFkZG4oMSkuaXVzaHJuKDEpKSxMZT10aGlzLnBvdyhnLHYp'@;
put 'LEZlPXA7MCE9PUxlLmNtcCh3KTspe2Zvcih2YXIgT2U9TGUsamU9MDswIT09T2UuY21wKHcpO2plKyspT2U9T2UucmVkU3FyKCk7SShqZTxGZSk7dmFyIFdlPXRoaXMucG93KGZlLG5ldyBFKDEpLml1c2hsbihGZS1qZS0xKSk7eGU9eGUucmVkTXVsKFdlKSxmZT1XZS5yZWRTcXIoKSxMZT1M'@;
put 'ZS5yZWRNdWwoZmUpLEZlPWplfXJldHVybiB4ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxILnByb3RvdHlw'@;
put 'ZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9bmV3IEFycmF5KDE2KTtTWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLFNbMV09Zztmb3IodmFyIHY9Mjt2PFMu'@;
put 'bGVuZ3RoO3YrKylTW3ZdPXRoaXMubXVsKFNbdi0xXSxnKTt2YXIgcD1TWzBdLHc9MCxKPTAsbmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLHY9Qy5sZW5ndGgtMTt2Pj0wO3YtLSl7Zm9yKHZhciBkZT1DLndvcmRzW3ZdLGZlPW5lLTE7ZmU+PTA7ZmUtLSl7dmFyIHhl'@;
put 'PWRlPj5mZSYxO3AhPT1TWzBdJiYocD10aGlzLnNxcihwKSksMCE9PXhlfHwwIT09dz8odzw8PTEsd3w9eGUsKDQ9PSsrSnx8MD09PXYmJjA9PT1mZSkmJihwPXRoaXMubXVsKHAsU1t3XSksSj0wLHc9MCkpOko9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0'@;
put 'aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sSC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE4oZyl9LGso'@;
put 'TixIKSxOLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxs'@;
put 'LEN9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBTPWcuaW11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQp'@;
put 'Lm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o'@;
put 'ZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIFM9Zy5tdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4o'@;
put 'dGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRo'@;
put 'aXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShNPVIubm1kKE0pLHRoaXMpfSw2OTQ4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Tzt6LnZlcnNpb249Uig4NTk3KS5pOCx6LnV0aWxzPVIoOTUzKSx6LnJhbmQ9Uig5OTMxKSx6LmN1cnZlPVIoODI1NCksei5jdXJ2'@;
put 'ZXM9Uig1NDI3KSx6LmVjPVIoNzk1NCksei5lZGRzYT1SKDU5ODApfSw0OTE4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoOTUzKSxJPUsuZ2V0TkFGLGs9Sy5nZXRKU0YsRT1LLmFzc2VydDtmdW5jdGlvbiBqKEIsWSl7dGhpcy50eXBlPUIsdGhpcy5wPW5ldyB6'@;
put 'KFkucCwxNiksdGhpcy5yZWQ9WS5wcmltZT96LnJlZChZLnByaW1lKTp6Lm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IHooMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyB6KDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgeigyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5u'@;
put 'PVkubiYmbmV3IHooWS5uLDE2KSx0aGlzLmc9WS5nJiZ0aGlzLnBvaW50RnJvbUpTT04oWS5nLFkuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0'@;
put 'KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBYPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFYfHxYLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJl'@;
put 'ZCkpfWZ1bmN0aW9uIFYoQixZKXt0aGlzLmN1cnZlPUIsdGhpcy50eXBlPVksdGhpcy5wcmVjb21wdXRlZD1udWxsfU0uZXhwb3J0cz1qLGoucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sai5wcm90b3R5cGUudmFsaWRhdGU9'@;
put 'ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxqLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oQixZKXtFKEIucHJlY29tcHV0ZWQpO3ZhciBYPUIuX2dldERvdWJsZXMoKSxVPUkoWSwxLHRoaXMuX2JpdExlbmd0aCkscT0oMTw8WC5zdGVwKzEp'@;
put 'LShYLnN0ZXAlMj09MD8yOjEpO3EvPTM7dmFyIGVlLHRlLG9lPVtdO2ZvcihlZT0wO2VlPFUubGVuZ3RoO2VlKz1YLnN0ZXApe3RlPTA7Zm9yKHZhciBzZT1lZStYLnN0ZXAtMTtzZT49ZWU7c2UtLSl0ZT0odGU8PDEpK1Vbc2VdO29lLnB1c2godGUpfWZvcih2YXIgaGU9dGhpcy5qcG9pbnQo'@;
put 'bnVsbCxudWxsLG51bGwpLHVlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxjZT1xO2NlPjA7Y2UtLSl7Zm9yKGVlPTA7ZWU8b2UubGVuZ3RoO2VlKyspKHRlPW9lW2VlXSk9PT1jZT91ZT11ZS5taXhlZEFkZChYLnBvaW50c1tlZV0pOnRlPT09LWNlJiYodWU9dWUubWl4ZWRBZGQoWC5w'@;
put 'b2ludHNbZWVdLm5lZygpKSk7aGU9aGUuYWRkKHVlKX1yZXR1cm4gaGUudG9QKCl9LGoucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKEIsWSl7Zm9yKHZhciBYPTQsVT1CLl9nZXROQUZQb2ludHMoWCkscT1VLnBvaW50cyxlZT1JKFksWD1VLnduZCx0aGlzLl9iaXRMZW5ndGgpLHRlPXRo'@;
put 'aXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxvZT1lZS5sZW5ndGgtMTtvZT49MDtvZS0tKXtmb3IodmFyIHNlPTA7b2U+PTAmJjA9PT1lZVtvZV07b2UtLSlzZSsrO2lmKG9lPj0wJiZzZSsrLHRlPXRlLmRibHAoc2UpLG9lPDApYnJlYWs7dmFyIGhlPWVlW29lXTtFKDAhPT1oZSksdGU9ImFm'@;
put 'ZmluZSI9PT1CLnR5cGU/dGUubWl4ZWRBZGQoaGU+MD9xW2hlLTE+PjFdOnFbLWhlLTE+PjFdLm5lZygpKTp0ZS5hZGQoaGU+MD9xW2hlLTE+PjFdOnFbLWhlLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5lIj09PUIudHlwZT90ZS50b1AoKTp0ZX0sai5wcm90b3R5cGUuX3duYWZNdWxBZGQ9'@;
put 'ZnVuY3Rpb24oQixZLFgsVSxxKXt2YXIgZWUsdGUsb2Usc2U9dGhpcy5fd25hZlQxLGhlPXRoaXMuX3duYWZUMix1ZT10aGlzLl93bmFmVDMsY2U9MDtmb3IoZWU9MDtlZTxVO2VlKyspe3ZhciBHPShvZT1ZW2VlXSkuX2dldE5BRlBvaW50cyhCKTtzZVtlZV09Ry53bmQsaGVbZWVdPUcucG9p'@;
put 'bnRzfWZvcihlZT1VLTE7ZWU+PTE7ZWUtPTIpe3ZhciBiPWVlLTEsRD1lZTtpZigxPT09c2VbYl0mJjE9PT1zZVtEXSl7dmFyIEg9W1lbYl0sbnVsbCxudWxsLFlbRF1dOzA9PT1ZW2JdLnkuY21wKFlbRF0ueSk/KEhbMV09WVtiXS5hZGQoWVtEXSksSFsyXT1ZW2JdLnRvSigpLm1peGVkQWRk'@;
put 'KFlbRF0ubmVnKCkpKTowPT09WVtiXS55LmNtcChZW0RdLnkucmVkTmVnKCkpPyhIWzFdPVlbYl0udG9KKCkubWl4ZWRBZGQoWVtEXSksSFsyXT1ZW2JdLmFkZChZW0RdLm5lZygpKSk6KEhbMV09WVtiXS50b0ooKS5taXhlZEFkZChZW0RdKSxIWzJdPVlbYl0udG9KKCkubWl4ZWRBZGQoWVtE'@;
put 'XS5uZWcoKSkpO3ZhciBOPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLGc9ayhYW2JdLFhbRF0pO2ZvcihjZT1NYXRoLm1heChnWzBdLmxlbmd0aCxjZSksdWVbYl09bmV3IEFycmF5KGNlKSx1ZVtEXT1uZXcgQXJyYXkoY2UpLHRlPTA7dGU8Y2U7dGUrKyl1ZVtiXVt0ZV09TlszKigxKygwfGdb'@;
put 'MF1bdGVdKSkrKDErKDB8Z1sxXVt0ZV0pKV0sdWVbRF1bdGVdPTAsaGVbYl09SH1lbHNlIHVlW2JdPUkoWFtiXSxzZVtiXSx0aGlzLl9iaXRMZW5ndGgpLHVlW0RdPUkoWFtEXSxzZVtEXSx0aGlzLl9iaXRMZW5ndGgpLGNlPU1hdGgubWF4KHVlW2JdLmxlbmd0aCxjZSksY2U9TWF0aC5tYXgo'@;
put 'dWVbRF0ubGVuZ3RoLGNlKX12YXIgdj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkscD10aGlzLl93bmFmVDQ7Zm9yKGVlPWNlO2VlPj0wO2VlLS0pe2Zvcih2YXIgdz0wO2VlPj0wOyl7dmFyIEo9ITA7Zm9yKHRlPTA7dGU8VTt0ZSsrKXBbdGVdPTB8dWVbdGVdW2VlXSwwIT09cFt0ZV0m'@;
put 'JihKPSExKTtpZighSilicmVhazt3KyssZWUtLX1pZihlZT49MCYmdysrLHY9di5kYmxwKHcpLGVlPDApYnJlYWs7Zm9yKHRlPTA7dGU8VTt0ZSsrKXt2YXIgbmU9cFt0ZV07MCE9PW5lJiYobmU+MD9vZT1oZVt0ZV1bbmUtMT4+MV06bmU8MCYmKG9lPWhlW3RlXVstbmUtMT4+MV0ubmVnKCkp'@;
put 'LHY9ImFmZmluZSI9PT1vZS50eXBlP3YubWl4ZWRBZGQob2UpOnYuYWRkKG9lKSl9fWZvcihlZT0wO2VlPFU7ZWUrKyloZVtlZV09bnVsbDtyZXR1cm4gcT92OnYudG9QKCl9LGouQmFzZVBvaW50PVYsVi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBs'@;
put 'ZW1lbnRlZCIpfSxWLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxqLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihCLFkpe0I9Sy50b0FycmF5KEIsWSk7dmFyIFg9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09'@;
put 'PUJbMF18fDY9PT1CWzBdfHw3PT09QlswXSkmJkIubGVuZ3RoLTE9PTIqWClyZXR1cm4gNj09PUJbMF0/RShCW0IubGVuZ3RoLTFdJTI9PTApOjc9PT1CWzBdJiZFKEJbQi5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludChCLnNsaWNlKDEsMStYKSxCLnNsaWNlKDErWCwxKzIqWCkpO2lmKCgy'@;
put 'PT09QlswXXx8Mz09PUJbMF0pJiZCLmxlbmd0aC0xPT09WClyZXR1cm4gdGhpcy5wb2ludEZyb21YKEIuc2xpY2UoMSwxK1gpLDM9PT1CWzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LFYucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24oQil7'@;
put 'cmV0dXJuIHRoaXMuZW5jb2RlKEIsITApfSxWLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEIpe3ZhciBZPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksWD10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsWSk7cmV0dXJuIEI/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KFgp'@;
put 'Ols0XS5jb25jYXQoWCx0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsWSkpfSxWLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSy5lbmNvZGUodGhpcy5fZW5jb2RlKFkpLEIpfSxWLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKEIpe2lmKHRoaXMucHJlY29tcHV0'@;
put 'ZWQpcmV0dXJuIHRoaXM7dmFyIFk9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBZLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksWS5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCxCKSxZLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9WSx0'@;
put 'aGlzfSxWLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbihCKXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgWT10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFZJiZZLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgoQi5iaXRMZW5ndGgoKSsxKS9ZLnN0ZXAp'@;
put 'fSxWLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbihCLFkpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgWD1bdGhpc10sVT10aGlzLHE9MDtxPFk7cSs9Qil7Zm9yKHZhciBl'@;
put 'ZT0wO2VlPEI7ZWUrKylVPVUuZGJsKCk7WC5wdXNoKFUpfXJldHVybntzdGVwOkIscG9pbnRzOlh9fSxWLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKEIpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5h'@;
put 'Zjtmb3IodmFyIFk9W3RoaXNdLFg9KDE8PEIpLTEsVT0xPT09WD9udWxsOnRoaXMuZGJsKCkscT0xO3E8WDtxKyspWVtxXT1ZW3EtMV0uYWRkKFUpO3JldHVybnt3bmQ6Qixwb2ludHM6WX19LFYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LFYucHJvdG90eXBl'@;
put 'LmRibHA9ZnVuY3Rpb24oQil7Zm9yKHZhciBZPXRoaXMsWD0wO1g8QjtYKyspWT1ZLmRibCgpO3JldHVybiBZfX0sMTEzODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUzKSxLPVIoMzc4NSksST1SKDU3MTcpLGs9Uig0OTE4KSxFPXouYXNzZXJ0O2Z1bmN0aW9uIGooQil7dGhp'@;
put 'cy50d2lzdGVkPTEhPSgwfEIuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxCLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxrLmNhbGwodGhpcywiZWR3YXJkcyIsQiksdGhpcy5hPW5ldyBLKEIuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVk'@;
put 'KHRoaXMucmVkKSx0aGlzLmM9bmV3IEsoQi5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBLKEIuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLEUoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMu'@;
put 'Yy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfEIuYyl9ZnVuY3Rpb24gVihCLFksWCxVLHEpe2suQmFzZVBvaW50LmNhbGwodGhpcyxCLCJwcm9qZWN0aXZlIiksbnVsbD09PVkmJm51bGw9PT1YJiZudWxsPT09VT8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhp'@;
put 'cy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBLKFksMTYpLHRoaXMueT1uZXcgSyhYLDE2KSx0aGlzLno9VT9uZXcgSyhVLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9cSYmbmV3IEsocSwx'@;
put 'NiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhp'@;
put 'cy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMu'@;
put 'dC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9SShqLGspLE0uZXhwb3J0cz1qLGoucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLm1PbmVBP0IucmVkTmVnKCk6dGhpcy5hLnJlZE11bChCKX0sai5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24oQil7cmV0dXJuIHRo'@;
put 'aXMub25lQz9COnRoaXMuYy5yZWRNdWwoQil9LGoucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gdGhpcy5wb2ludChCLFksWCxVKX0sai5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihCLFkpeyhCPW5ldyBLKEIsMTYpKS5yZWR8fChCPUIudG9SZWQodGhp'@;
put 'cy5yZWQpKTt2YXIgWD1CLnJlZFNxcigpLFU9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChYKSkscT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoWCkpLGVlPVUucmVkTXVsKHEucmVkSW52bSgpKSx0ZT1lZS5yZWRTcXJ0KCk7aWYoMCE9PXRlLnJl'@;
put 'ZFNxcigpLnJlZFN1YihlZSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIG9lPXRlLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihZJiYhb2V8fCFZJiZvZSkmJih0ZT10ZS5yZWROZWcoKSksdGhpcy5wb2ludChCLHRlKX0sai5wcm90b3R5cGUu'@;
put 'cG9pbnRGcm9tWT1mdW5jdGlvbihCLFkpeyhCPW5ldyBLKEIsMTYpKS5yZWR8fChCPUIudG9SZWQodGhpcy5yZWQpKTt2YXIgWD1CLnJlZFNxcigpLFU9WC5yZWRTdWIodGhpcy5jMikscT1YLnJlZE11bCh0aGlzLmQpLnJlZE11bCh0aGlzLmMyKS5yZWRTdWIodGhpcy5hKSxlZT1VLnJlZE11'@;
put 'bChxLnJlZEludm0oKSk7aWYoMD09PWVlLmNtcCh0aGlzLnplcm8pKXtpZihZKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyxCKX12YXIgdGU9ZWUucmVkU3FydCgpO2lmKDAhPT10ZS5yZWRTcXIoKS5yZWRTdWIoZWUpLmNtcCh0'@;
put 'aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0ZS5mcm9tUmVkKCkuaXNPZGQoKSE9PVkmJih0ZT10ZS5yZWROZWcoKSksdGhpcy5wb2ludCh0ZSxCKX0sai5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oQil7aWYoQi5pc0luZmluaXR5KCkpcmV0'@;
put 'dXJuITA7Qi5ub3JtYWxpemUoKTt2YXIgWT1CLngucmVkU3FyKCksWD1CLnkucmVkU3FyKCksVT1ZLnJlZE11bCh0aGlzLmEpLnJlZEFkZChYKSxxPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKFkpLnJlZE11bChYKSkpO3JldHVybiAwPT09VS5jbXAocSl9'@;
put 'LEkoVixrLkJhc2VQb2ludCksai5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihCKXtyZXR1cm4gVi5mcm9tSlNPTih0aGlzLEIpfSxqLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gbmV3IFYodGhpcyxCLFksWCxVKX0sVi5mcm9tSlNPTj1mdW5jdGlv'@;
put 'bihCLFkpe3JldHVybiBuZXcgVihCLFlbMF0sWVsxXSxZWzJdKX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikr'@;
put 'IiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxWLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMu'@;
put 'eil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LFYucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgQj10aGlzLngucmVkU3FyKCksWT10aGlzLnkucmVkU3FyKCksWD10aGlzLnoucmVkU3FyKCk7WD1YLnJlZElBZGQoWCk7dmFyIFU9dGhpcy5jdXJ2'@;
put 'ZS5fbXVsQShCKSxxPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKEIpLnJlZElTdWIoWSksZWU9VS5yZWRBZGQoWSksdGU9ZWUucmVkU3ViKFgpLG9lPVUucmVkU3ViKFkpLHNlPXEucmVkTXVsKHRlKSxoZT1lZS5yZWRNdWwob2UpLHVlPXEucmVkTXVsKG9lKSxjZT10'@;
put 'ZS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHNlLGhlLGNlLHVlKX0sVi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgQixZLFgsVSxxLGVlLHRlPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxvZT10aGlzLngucmVkU3FyKCksc2U9dGhpcy55LnJl'@;
put 'ZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIGhlPShVPXRoaXMuY3VydmUuX211bEEob2UpKS5yZWRBZGQoc2UpO3RoaXMuek9uZT8oQj10ZS5yZWRTdWIob2UpLnJlZFN1YihzZSkucmVkTXVsKGhlLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLFk9aGUucmVkTXVsKFUucmVkU3Vi'@;
put 'KHNlKSksWD1oZS5yZWRTcXIoKS5yZWRTdWIoaGUpLnJlZFN1YihoZSkpOihxPXRoaXMuei5yZWRTcXIoKSxlZT1oZS5yZWRTdWIocSkucmVkSVN1YihxKSxCPXRlLnJlZFN1YihvZSkucmVkSVN1YihzZSkucmVkTXVsKGVlKSxZPWhlLnJlZE11bChVLnJlZFN1YihzZSkpLFg9aGUucmVkTXVs'@;
put 'KGVlKSl9ZWxzZSBVPW9lLnJlZEFkZChzZSkscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9VS5yZWRTdWIocSkucmVkU3ViKHEpLEI9dGhpcy5jdXJ2ZS5fbXVsQyh0ZS5yZWRJU3ViKFUpKS5yZWRNdWwoZWUpLFk9dGhpcy5jdXJ2ZS5fbXVsQyhVKS5yZWRNdWwob2Uu'@;
put 'cmVkSVN1YihzZSkpLFg9VS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsWSxYKX0sVi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJs'@;
put 'KCl9LFYucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oQil7dmFyIFk9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChCLnkucmVkU3ViKEIueCkpLFg9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChCLnkucmVkQWRkKEIueCkpLFU9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRk'@;
put 'KS5yZWRNdWwoQi50KSxxPXRoaXMuei5yZWRNdWwoQi56LnJlZEFkZChCLnopKSxlZT1YLnJlZFN1YihZKSx0ZT1xLnJlZFN1YihVKSxvZT1xLnJlZEFkZChVKSxzZT1YLnJlZEFkZChZKSxoZT1lZS5yZWRNdWwodGUpLHVlPW9lLnJlZE11bChzZSksY2U9ZWUucmVkTXVsKHNlKSxHPXRlLnJl'@;
put 'ZE11bChvZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoaGUsdWUsRyxjZSl9LFYucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKEIpe3ZhciBZLFgsVT10aGlzLnoucmVkTXVsKEIueikscT1VLnJlZFNxcigpLGVlPXRoaXMueC5yZWRNdWwoQi54KSx0ZT10aGlzLnkucmVkTXVsKEIueSks'@;
put 'b2U9dGhpcy5jdXJ2ZS5kLnJlZE11bChlZSkucmVkTXVsKHRlKSxzZT1xLnJlZFN1YihvZSksaGU9cS5yZWRBZGQob2UpLHVlPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoQi54LnJlZEFkZChCLnkpKS5yZWRJU3ViKGVlKS5yZWRJU3ViKHRlKSxjZT1VLnJlZE11bChzZSkucmVkTXVs'@;
put 'KHVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhZPVUucmVkTXVsKGhlKS5yZWRNdWwodGUucmVkU3ViKHRoaXMuY3VydmUuX211bEEoZWUpKSksWD1zZS5yZWRNdWwoaGUpKTooWT1VLnJlZE11bChoZSkucmVkTXVsKHRlLnJlZFN1YihlZSkpLFg9dGhpcy5jdXJ2ZS5fbXVsQyhzZSku'@;
put 'cmVkTXVsKGhlKSksdGhpcy5jdXJ2ZS5wb2ludChjZSxZLFgpfSxWLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP0I6Qi5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChCKTp0aGlzLl9wcm9qQWRkKEIp'@;
put 'fSxWLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoQik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxCKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsQil9LFYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihCLFksWCl7cmV0dXJuIHRoaXMu'@;
put 'Y3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxZXSxbQixYXSwyLCExKX0sVi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihCLFksWCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxZXSxbQixYXSwyLCEwKX0sVi5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7'@;
put 'aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBCPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKEIpLHRoaXMueT10aGlzLnkucmVkTXVsKEIpLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKEIpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56'@;
put 'T25lPSEwLHRoaXN9LFYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sVi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1h'@;
put 'bGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LFYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxWLnByb3RvdHlwZS5lcT1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcz09PUJ8fDA9PT10aGlzLmdldFgoKS5jbXAoQi5nZXRY'@;
put 'KCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKEIuZ2V0WSgpKX0sVi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEIpe3ZhciBZPUIudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKFkpKXJldHVybiEwO2Zvcih2YXIgWD1CLmNsb25lKCksVT10'@;
put 'aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoWC5pYWRkKHRoaXMuY3VydmUubiksWC5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihZLnJlZElBZGQoVSksMD09PXRoaXMueC5jbXAoWSkpcmV0dXJuITB9fSxWLnByb3RvdHlwZS50b1A9Vi5wcm90b3R5cGUubm9y'@;
put 'bWFsaXplLFYucHJvdG90eXBlLm1peGVkQWRkPVYucHJvdG90eXBlLmFkZH0sODI1NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PU87ei5iYXNlPVIoNDkxOCksei5zaG9ydD1SKDY2NzMpLHoubW9udD1SKDI4ODEpLHouZWR3YXJkcz1SKDExMzgpfSwyODgxOihNLE8sUik9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoNTcxNyksST1SKDQ5MTgpLGs9Uig5NTMpO2Z1bmN0aW9uIEUoVil7SS5jYWxsKHRoaXMsIm1vbnQiLFYpLHRoaXMuYT1uZXcgeihWLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHooVi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhp'@;
put 'cy5pND1uZXcgeig0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyB6KDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gaihWLEIsWSl7SS5CYXNlUG9pbnQuY2FsbCh0aGlzLFYs'@;
put 'InByb2plY3RpdmUiKSxudWxsPT09QiYmbnVsbD09PVk/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyB6KEIsMTYpLHRoaXMuej1uZXcgeihZLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJl'@;
put 'ZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfUsoRSxJKSxNLmV4cG9ydHM9RSxFLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihWKXt2YXIgQj1WLm5vcm1hbGl6ZSgpLngsWT1CLnJlZFNxcigpLFg9WS5yZWRNdWwoQikucmVkQWRkKFku'@;
put 'cmVkTXVsKHRoaXMuYSkpLnJlZEFkZChCKTtyZXR1cm4gMD09PVgucmVkU3FydCgpLnJlZFNxcigpLmNtcChYKX0sSyhqLEkuQmFzZVBvaW50KSxFLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihWLEIpe3JldHVybiB0aGlzLnBvaW50KGsudG9BcnJheShWLEIpLDEpfSxFLnByb3Rv'@;
put 'dHlwZS5wb2ludD1mdW5jdGlvbihWLEIpe3JldHVybiBuZXcgaih0aGlzLFYsQil9LEUucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oVil7cmV0dXJuIGouZnJvbUpTT04odGhpcyxWKX0sai5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sai5wcm90b3R5cGUuX2Vu'@;
put 'Y29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LGouZnJvbUpTT049ZnVuY3Rpb24oVixCKXtyZXR1cm4gbmV3IGooVixCWzBdLEJbMV18fFYub25lKX0sai5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxqLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sai5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLEI9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLFk9Vi5yZWRTdWIoQiksWD1WLnJlZE11bChCKSxVPVku'@;
put 'cmVkTXVsKEIucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChZKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFgsVSl9LGoucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LGoucHJvdG90eXBl'@;
put 'LmRpZmZBZGQ9ZnVuY3Rpb24oVixCKXt2YXIgWT10aGlzLngucmVkQWRkKHRoaXMueiksWD10aGlzLngucmVkU3ViKHRoaXMueiksVT1WLngucmVkQWRkKFYueikscT1WLngucmVkU3ViKFYueikucmVkTXVsKFkpLGVlPVUucmVkTXVsKFgpLHRlPUIuei5yZWRNdWwocS5yZWRBZGQoZWUpLnJl'@;
put 'ZFNxcigpKSxvZT1CLngucmVkTXVsKHEucmVkSVN1YihlZSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRlLG9lKX0sai5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFYpe2Zvcih2YXIgQj1WLmNsb25lKCksWT10aGlzLFg9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLFU9'@;
put 'W107MCE9PUIuY21wbigwKTtCLml1c2hybigxKSlVLnB1c2goQi5hbmRsbigxKSk7Zm9yKHZhciBxPVUubGVuZ3RoLTE7cT49MDtxLS0pMD09PVVbcV0/KFk9WS5kaWZmQWRkKFgsdGhpcyksWD1YLmRibCgpKTooWD1ZLmRpZmZBZGQoWCx0aGlzKSxZPVkuZGJsKCkpO3JldHVybiBYfSxqLnBy'@;
put 'b3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxqLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0s'@;
put 'ai5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oVil7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoVi5nZXRYKCkpfSxqLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25l'@;
put 'LHRoaXN9LGoucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjY3MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUzKSxLPVIoMzc4NSksST1SKDU3MTcpLGs9Uig0OTE4KSxFPXouYXNzZXJ0O2Z1bmN0'@;
put 'aW9uIGooWSl7ay5jYWxsKHRoaXMsInNob3J0IixZKSx0aGlzLmE9bmV3IEsoWS5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBLKFkuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQo'@;
put 'KS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oWSksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rp'@;
put 'b24gVihZLFgsVSxxKXtrLkJhc2VQb2ludC5jYWxsKHRoaXMsWSwiYWZmaW5lIiksbnVsbD09PVgmJm51bGw9PT1VPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgSyhYLDE2KSx0aGlzLnk9bmV3IEsoVSwxNikscSYmKHRoaXMueC5mb3JjZVJlZCh0'@;
put 'aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5j'@;
put 'dGlvbiBCKFksWCxVLHEpe2suQmFzZVBvaW50LmNhbGwodGhpcyxZLCJqYWNvYmlhbiIpLG51bGw9PT1YJiZudWxsPT09VSYmbnVsbD09PXE/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBLKDApKToodGhpcy54PW5ldyBLKFgsMTYpLHRo'@;
put 'aXMueT1uZXcgSyhVLDE2KSx0aGlzLno9bmV3IEsocSwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50'@;
put 'b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1JKGosayksTS5leHBvcnRzPWosai5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbihZKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMp'@;
put 'KXt2YXIgWCxVO2lmKFkuYmV0YSlYPW5ldyBLKFkuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIHE9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7WD0oWD1xWzBdLmNtcChxWzFdKTwwP3FbMF06cVsxXSkudG9SZWQodGhpcy5yZWQpfWlmKFkubGFtYmRhKVU9bmV3IEsoWS5s'@;
put 'YW1iZGEsMTYpO2Vsc2V7dmFyIGVlPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKGVlWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoWCkpP1U9ZWVbMF06RSgwPT09dGhpcy5nLm11bChVPWVlWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoWCkpKX1yZXR1cm57'@;
put 'YmV0YTpYLGxhbWJkYTpVLGJhc2lzOlkuYmFzaXM/WS5iYXNpcy5tYXAoZnVuY3Rpb24odGUpe3JldHVybnthOm5ldyBLKHRlLmEsMTYpLGI6bmV3IEsodGUuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKFUpfX19LGoucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oWSl7dmFy'@;
put 'IFg9WT09PXRoaXMucD90aGlzLnJlZDpLLm1vbnQoWSksVT1uZXcgSygyKS50b1JlZChYKS5yZWRJbnZtKCkscT1VLnJlZE5lZygpLGVlPW5ldyBLKDMpLnRvUmVkKFgpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoVSk7cmV0dXJuW3EucmVkQWRkKGVlKS5mcm9tUmVkKCkscS5yZWRTdWIo'@;
put 'ZWUpLmZyb21SZWQoKV19LGoucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYLFUscSxlZSx0ZSxvZSxzZSxoZSx1ZSxjZT10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEc9WSxiPXRoaXMubi5jbG9uZSgpLEQ9bmV3IEso'@;
put 'MSksSD1uZXcgSygwKSxOPW5ldyBLKDApLGc9bmV3IEsoMSksQz0wOzAhPT1HLmNtcG4oMCk7KXt2YXIgUz1iLmRpdihHKTtoZT1iLnN1YihTLm11bChHKSksdWU9Ti5zdWIoUy5tdWwoRCkpO3ZhciB2PWcuc3ViKFMubXVsKEgpKTtpZighcSYmaGUuY21wKGNlKTwwKVg9c2UubmVnKCksVT1E'@;
put 'LHE9aGUubmVnKCksZWU9dWU7ZWxzZSBpZihxJiYyPT0rK0MpYnJlYWs7c2U9aGUsYj1HLEc9aGUsTj1ELEQ9dWUsZz1ILEg9dn10ZT1oZS5uZWcoKSxvZT11ZTt2YXIgcD1xLnNxcigpLmFkZChlZS5zcXIoKSk7cmV0dXJuIHRlLnNxcigpLmFkZChvZS5zcXIoKSkuY21wKHApPj0wJiYodGU9'@;
put 'WCxvZT1VKSxxLm5lZ2F0aXZlJiYocT1xLm5lZygpLGVlPWVlLm5lZygpKSx0ZS5uZWdhdGl2ZSYmKHRlPXRlLm5lZygpLG9lPW9lLm5lZygpKSxbe2E6cSxiOmVlfSx7YTp0ZSxiOm9lfV19LGoucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oWSl7dmFyIFg9dGhpcy5lbmRvLmJhc2lz'@;
put 'LFU9WFswXSxxPVhbMV0sZWU9cS5iLm11bChZKS5kaXZSb3VuZCh0aGlzLm4pLHRlPVUuYi5uZWcoKS5tdWwoWSkuZGl2Um91bmQodGhpcy5uKSxvZT1lZS5tdWwoVS5hKSxzZT10ZS5tdWwocS5hKSxoZT1lZS5tdWwoVS5iKSx1ZT10ZS5tdWwocS5iKTtyZXR1cm57azE6WS5zdWIob2UpLnN1'@;
put 'YihzZSksazI6aGUuYWRkKHVlKS5uZWcoKX19LGoucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oWSxYKXsoWT1uZXcgSyhZLDE2KSkucmVkfHwoWT1ZLnRvUmVkKHRoaXMucmVkKSk7dmFyIFU9WS5yZWRTcXIoKS5yZWRNdWwoWSkucmVkSUFkZChZLnJlZE11bCh0aGlzLmEpKS5yZWRJ'@;
put 'QWRkKHRoaXMuYikscT1VLnJlZFNxcnQoKTtpZigwIT09cS5yZWRTcXIoKS5yZWRTdWIoVSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIGVlPXEuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKFgmJiFlZXx8IVgmJmVlKSYmKHE9cS5yZWROZWco'@;
put 'KSksdGhpcy5wb2ludChZLHEpfSxqLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihZKXtpZihZLmluZilyZXR1cm4hMDt2YXIgWD1ZLngsVT1ZLnkscT10aGlzLmEucmVkTXVsKFgpLGVlPVgucmVkU3FyKCkucmVkTXVsKFgpLnJlZElBZGQocSkucmVkSUFkZCh0aGlzLmIpO3JldHVybiAw'@;
put 'PT09VS5yZWRTcXIoKS5yZWRJU3ViKGVlKS5jbXBuKDApfSxqLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oWSxYLFUpe2Zvcih2YXIgcT10aGlzLl9lbmRvV25hZlQxLGVlPXRoaXMuX2VuZG9XbmFmVDIsdGU9MDt0ZTxZLmxlbmd0aDt0ZSsrKXt2YXIgb2U9dGhpcy5fZW5k'@;
put 'b1NwbGl0KFhbdGVdKSxzZT1ZW3RlXSxoZT1zZS5fZ2V0QmV0YSgpO29lLmsxLm5lZ2F0aXZlJiYob2UuazEuaW5lZygpLHNlPXNlLm5lZyghMCkpLG9lLmsyLm5lZ2F0aXZlJiYob2UuazIuaW5lZygpLGhlPWhlLm5lZyghMCkpLHFbMip0ZV09c2UscVsyKnRlKzFdPWhlLGVlWzIqdGVdPW9l'@;
put 'LmsxLGVlWzIqdGUrMV09b2UuazJ9Zm9yKHZhciB1ZT10aGlzLl93bmFmTXVsQWRkKDEscSxlZSwyKnRlLFUpLGNlPTA7Y2U8Mip0ZTtjZSsrKXFbY2VdPW51bGwsZWVbY2VdPW51bGw7cmV0dXJuIHVlfSxJKFYsay5CYXNlUG9pbnQpLGoucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFksWCxV'@;
put 'KXtyZXR1cm4gbmV3IFYodGhpcyxZLFgsVSl9LGoucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oWSxYKXtyZXR1cm4gVi5mcm9tSlNPTih0aGlzLFksWCl9LFYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgWT10aGlzLnByZWNv'@;
put 'bXB1dGVkO2lmKFkmJlkuYmV0YSlyZXR1cm4gWS5iZXRhO3ZhciBYPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihZKXt2YXIgVT10aGlzLmN1cnZlLHE9ZnVuY3Rpb24oZWUpe3JldHVybiBVLnBvaW50KGVlLngucmVkTXVs'@;
put 'KFUuZW5kby5iZXRhKSxlZS55KX07WS5iZXRhPVgsWC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpZLm5hZiYme3duZDpZLm5hZi53bmQscG9pbnRzOlkubmFmLnBvaW50cy5tYXAocSl9LGRvdWJsZXM6WS5kb3VibGVzJiZ7c3RlcDpZLmRvdWJsZXMuc3RlcCxwb2ludHM6WS5kb3VibGVz'@;
put 'LnBvaW50cy5tYXAocSl9fX1yZXR1cm4gWH19LFYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVj'@;
put 'b21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGlj'@;
put 'ZSgxKX19XTpbdGhpcy54LHRoaXMueV19LFYuZnJvbUpTT049ZnVuY3Rpb24oWSxYLFUpeyJzdHJpbmciPT10eXBlb2YgWCYmKFg9SlNPTi5wYXJzZShYKSk7dmFyIHE9WS5wb2ludChYWzBdLFhbMV0sVSk7aWYoIVhbMl0pcmV0dXJuIHE7ZnVuY3Rpb24gZWUob2Upe3JldHVybiBZLnBvaW50'@;
put 'KG9lWzBdLG9lWzFdLFUpfXZhciB0ZT1YWzJdO3JldHVybiBxLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91Ymxlczp0ZS5kb3VibGVzJiZ7c3RlcDp0ZS5kb3VibGVzLnN0ZXAscG9pbnRzOltxXS5jb25jYXQodGUuZG91Ymxlcy5wb2ludHMubWFwKGVlKSl9LG5hZjp0ZS5uYWYmJnt3bmQ6'@;
put 'dGUubmFmLnduZCxwb2ludHM6W3FdLmNvbmNhdCh0ZS5uYWYucG9pbnRzLm1hcChlZSkpfX0scX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVk'@;
put 'KCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxWLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxWLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5pbmYpcmV0dXJuIFk7aWYo'@;
put 'WS5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShZKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKFkpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoWS54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3Zh'@;
put 'ciBYPXRoaXMueS5yZWRTdWIoWS55KTswIT09WC5jbXBuKDApJiYoWD1YLnJlZE11bCh0aGlzLngucmVkU3ViKFkueCkucmVkSW52bSgpKSk7dmFyIFU9WC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihZLngpLHE9WC5yZWRNdWwodGhpcy54LnJlZFN1YihVKSkucmVkSVN1Yih0'@;
put 'aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUscSl9LFYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBZPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09WS5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVs'@;
put 'bCk7dmFyIFg9dGhpcy5jdXJ2ZS5hLFU9dGhpcy54LnJlZFNxcigpLHE9WS5yZWRJbnZtKCksZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKS5yZWRJQWRkKFgpLnJlZE11bChxKSx0ZT1lZS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksb2U9ZWUucmVkTXVsKHRoaXMu'@;
put 'eC5yZWRTdWIodGUpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGUsb2UpfSxWLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LFYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQo'@;
put 'KX0sVi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFkpe3JldHVybiBZPW5ldyBLKFksMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhZKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLFkpOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11'@;
put 'bEFkZChbdGhpc10sW1ldKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsWSl9LFYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihZLFgsVSl7dmFyIHE9W3RoaXMsWF0sZWU9W1ksVV07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChxLGVlKTp0aGlz'@;
put 'LmN1cnZlLl93bmFmTXVsQWRkKDEscSxlZSwyKX0sVi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihZLFgsVSl7dmFyIHE9W3RoaXMsWF0sZWU9W1ksVV07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChxLGVlLCEwKTp0aGlzLmN1cnZlLl93bmFm'@;
put 'TXVsQWRkKDEscSxlZSwyLCEwKX0sVi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oWSl7cmV0dXJuIHRoaXM9PT1ZfHx0aGlzLmluZj09PVkuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKFkueCkmJjA9PT10aGlzLnkuY21wKFkueSkpfSxWLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oWSl7'@;
put 'aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIFg9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihZJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgVT10aGlzLnByZWNvbXB1dGVkLHE9ZnVuY3Rpb24oZWUpe3JldHVybiBlZS5uZWcoKX07WC5wcmVjb21wdXRlZD17'@;
put 'bmFmOlUubmFmJiZ7d25kOlUubmFmLnduZCxwb2ludHM6VS5uYWYucG9pbnRzLm1hcChxKX0sZG91YmxlczpVLmRvdWJsZXMmJntzdGVwOlUuZG91Ymxlcy5zdGVwLHBvaW50czpVLmRvdWJsZXMucG9pbnRzLm1hcChxKX19fXJldHVybiBYfSxWLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxJKEIsay5CYXNlUG9pbnQpLGoucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihZLFgsVSl7cmV0dXJuIG5ldyBCKHRo'@;
put 'aXMsWSxYLFUpfSxCLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBZPXRoaXMuei5yZWRJbnZtKCksWD1ZLnJlZFNxcigpLFU9dGhpcy54LnJlZE11bChYKSxxPXRoaXMueS5yZWRNdWwo'@;
put 'WCkucmVkTXVsKFkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUscSl9LEIucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LEIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihZKXtpZih0aGlzLmlz'@;
put 'SW5maW5pdHkoKSlyZXR1cm4gWTtpZihZLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgWD1ZLnoucmVkU3FyKCksVT10aGlzLnoucmVkU3FyKCkscT10aGlzLngucmVkTXVsKFgpLGVlPVkueC5yZWRNdWwoVSksdGU9dGhpcy55LnJlZE11bChYLnJlZE11bChZLnopKSxvZT1ZLnkucmVk'@;
put 'TXVsKFUucmVkTXVsKHRoaXMueikpLHNlPXEucmVkU3ViKGVlKSxoZT10ZS5yZWRTdWIob2UpO2lmKDA9PT1zZS5jbXBuKDApKXJldHVybiAwIT09aGUuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgdWU9c2UucmVkU3FyKCksY2U9dWUu'@;
put 'cmVkTXVsKHNlKSxHPXEucmVkTXVsKHVlKSxiPWhlLnJlZFNxcigpLnJlZElBZGQoY2UpLnJlZElTdWIoRykucmVkSVN1YihHKSxEPWhlLnJlZE11bChHLnJlZElTdWIoYikpLnJlZElTdWIodGUucmVkTXVsKGNlKSksSD10aGlzLnoucmVkTXVsKFkueikucmVkTXVsKHNlKTtyZXR1cm4gdGhp'@;
put 'cy5jdXJ2ZS5qcG9pbnQoYixELEgpfSxCLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihZKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gWS50b0ooKTtpZihZLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgWD10aGlzLnoucmVkU3FyKCksVT10aGlzLngscT1ZLngucmVkTXVs'@;
put 'KFgpLGVlPXRoaXMueSx0ZT1ZLnkucmVkTXVsKFgpLnJlZE11bCh0aGlzLnopLG9lPVUucmVkU3ViKHEpLHNlPWVlLnJlZFN1Yih0ZSk7aWYoMD09PW9lLmNtcG4oMCkpcmV0dXJuIDAhPT1zZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3Zh'@;
put 'ciBoZT1vZS5yZWRTcXIoKSx1ZT1oZS5yZWRNdWwob2UpLGNlPVUucmVkTXVsKGhlKSxHPXNlLnJlZFNxcigpLnJlZElBZGQodWUpLnJlZElTdWIoY2UpLnJlZElTdWIoY2UpLGI9c2UucmVkTXVsKGNlLnJlZElTdWIoRykpLnJlZElTdWIoZWUucmVkTXVsKHVlKSksRD10aGlzLnoucmVkTXVs'@;
put 'KG9lKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoRyxiLEQpfSxCLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKFkpe2lmKDA9PT1ZKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFZKXJldHVybiB0aGlzLmRibCgpO3ZhciBYO2lmKHRoaXMuY3VydmUu'@;
put 'emVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgVT10aGlzO2ZvcihYPTA7WDxZO1grKylVPVUuZGJsKCk7cmV0dXJuIFV9dmFyIHE9dGhpcy5jdXJ2ZS5hLGVlPXRoaXMuY3VydmUudGludix0ZT10aGlzLngsb2U9dGhpcy55LHNlPXRoaXMueixoZT1zZS5yZWRTcXIoKS5yZWRTcXIoKSx1'@;
put 'ZT1vZS5yZWRBZGQob2UpO2ZvcihYPTA7WDxZO1grKyl7dmFyIGNlPXRlLnJlZFNxcigpLEc9dWUucmVkU3FyKCksYj1HLnJlZFNxcigpLEQ9Y2UucmVkQWRkKGNlKS5yZWRJQWRkKGNlKS5yZWRJQWRkKHEucmVkTXVsKGhlKSksSD10ZS5yZWRNdWwoRyksTj1ELnJlZFNxcigpLnJlZElTdWIo'@;
put 'SC5yZWRBZGQoSCkpLGc9SC5yZWRJU3ViKE4pLEM9RC5yZWRNdWwoZyk7Qz1DLnJlZElBZGQoQykucmVkSVN1YihiKTt2YXIgUz11ZS5yZWRNdWwoc2UpO1grMTxZJiYoaGU9aGUucmVkTXVsKGIpKSx0ZT1OLHNlPVMsdWU9Q31yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGUsdWUucmVkTXVs'@;
put 'KGVlKSxzZSl9LEIucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LEIucHJvdG90eXBlLl96ZXJv'@;
put 'RGJsPWZ1bmN0aW9uKCl7dmFyIFksWCxVO2lmKHRoaXMuek9uZSl7dmFyIHE9dGhpcy54LnJlZFNxcigpLGVlPXRoaXMueS5yZWRTcXIoKSx0ZT1lZS5yZWRTcXIoKSxvZT10aGlzLngucmVkQWRkKGVlKS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIodGUpO29lPW9lLnJlZElBZGQob2Up'@;
put 'O3ZhciBzZT1xLnJlZEFkZChxKS5yZWRJQWRkKHEpLGhlPXNlLnJlZFNxcigpLnJlZElTdWIob2UpLnJlZElTdWIob2UpLHVlPXRlLnJlZElBZGQodGUpO3VlPSh1ZT11ZS5yZWRJQWRkKHVlKSkucmVkSUFkZCh1ZSksWT1oZSxYPXNlLnJlZE11bChvZS5yZWRJU3ViKGhlKSkucmVkSVN1Yih1'@;
put 'ZSksVT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgY2U9dGhpcy54LnJlZFNxcigpLEc9dGhpcy55LnJlZFNxcigpLGI9Ry5yZWRTcXIoKSxEPXRoaXMueC5yZWRBZGQoRykucmVkU3FyKCkucmVkSVN1YihjZSkucmVkSVN1YihiKTtEPUQucmVkSUFkZChEKTt2YXIgSD1jZS5yZWRB'@;
put 'ZGQoY2UpLnJlZElBZGQoY2UpLE49SC5yZWRTcXIoKSxnPWIucmVkSUFkZChiKTtnPShnPWcucmVkSUFkZChnKSkucmVkSUFkZChnKSxZPU4ucmVkSVN1YihEKS5yZWRJU3ViKEQpLFg9SC5yZWRNdWwoRC5yZWRJU3ViKFkpKS5yZWRJU3ViKGcpLFU9KFU9dGhpcy55LnJlZE11bCh0aGlzLnop'@;
put 'KS5yZWRJQWRkKFUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLFgsVSl9LEIucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBZLFgsVTtpZih0aGlzLnpPbmUpe3ZhciBxPXRoaXMueC5yZWRTcXIoKSxlZT10aGlzLnkucmVkU3FyKCksdGU9ZWUucmVkU3FyKCksb2U9dGhp'@;
put 'cy54LnJlZEFkZChlZSkucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHRlKTtvZT1vZS5yZWRJQWRkKG9lKTt2YXIgc2U9cS5yZWRBZGQocSkucmVkSUFkZChxKS5yZWRJQWRkKHRoaXMuY3VydmUuYSksaGU9c2UucmVkU3FyKCkucmVkSVN1YihvZSkucmVkSVN1YihvZSk7WT1oZTt2YXIg'@;
put 'dWU9dGUucmVkSUFkZCh0ZSk7dWU9KHVlPXVlLnJlZElBZGQodWUpKS5yZWRJQWRkKHVlKSxYPXNlLnJlZE11bChvZS5yZWRJU3ViKGhlKSkucmVkSVN1Yih1ZSksVT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgY2U9dGhpcy56LnJlZFNxcigpLEc9dGhpcy55LnJlZFNxcigpLGI9'@;
put 'dGhpcy54LnJlZE11bChHKSxEPXRoaXMueC5yZWRTdWIoY2UpLnJlZE11bCh0aGlzLngucmVkQWRkKGNlKSk7RD1ELnJlZEFkZChEKS5yZWRJQWRkKEQpO3ZhciBIPWIucmVkSUFkZChiKSxOPShIPUgucmVkSUFkZChIKSkucmVkQWRkKEgpO1k9RC5yZWRTcXIoKS5yZWRJU3ViKE4pLFU9dGhp'@;
put 'cy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoRykucmVkSVN1YihjZSk7dmFyIGc9Ry5yZWRTcXIoKTtnPShnPShnPWcucmVkSUFkZChnKSkucmVkSUFkZChnKSkucmVkSUFkZChnKSxYPUQucmVkTXVsKEgucmVkSVN1YihZKSkucmVkSVN1YihnKX1yZXR1cm4gdGhpcy5jdXJ2'@;
put 'ZS5qcG9pbnQoWSxYLFUpfSxCLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5jdXJ2ZS5hLFg9dGhpcy54LFU9dGhpcy55LHE9dGhpcy56LGVlPXEucmVkU3FyKCkucmVkU3FyKCksdGU9WC5yZWRTcXIoKSxvZT1VLnJlZFNxcigpLHNlPXRlLnJlZEFkZCh0ZSkucmVkSUFk'@;
put 'ZCh0ZSkucmVkSUFkZChZLnJlZE11bChlZSkpLGhlPVgucmVkQWRkKFgpLHVlPShoZT1oZS5yZWRJQWRkKGhlKSkucmVkTXVsKG9lKSxjZT1zZS5yZWRTcXIoKS5yZWRJU3ViKHVlLnJlZEFkZCh1ZSkpLEc9dWUucmVkSVN1YihjZSksYj1vZS5yZWRTcXIoKTtiPShiPShiPWIucmVkSUFkZChi'@;
put 'KSkucmVkSUFkZChiKSkucmVkSUFkZChiKTt2YXIgRD1zZS5yZWRNdWwoRykucmVkSVN1YihiKSxIPVUucmVkQWRkKFUpLnJlZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoY2UsRCxIKX0sQi5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJl'@;
put 'dHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgWT10aGlzLngucmVkU3FyKCksWD10aGlzLnkucmVkU3FyKCksVT10aGlzLnoucmVkU3FyKCkscT1YLnJlZFNxcigpLGVlPVkucmVkQWRkKFkpLnJlZElBZGQoWSksdGU9ZWUucmVkU3FyKCksb2U9dGhpcy54LnJlZEFkZChYKS5yZWRTcXIo'@;
put 'KS5yZWRJU3ViKFkpLnJlZElTdWIocSksc2U9KG9lPShvZT0ob2U9b2UucmVkSUFkZChvZSkpLnJlZEFkZChvZSkucmVkSUFkZChvZSkpLnJlZElTdWIodGUpKS5yZWRTcXIoKSxoZT1xLnJlZElBZGQocSk7aGU9KGhlPShoZT1oZS5yZWRJQWRkKGhlKSkucmVkSUFkZChoZSkpLnJlZElBZGQo'@;
put 'aGUpO3ZhciB1ZT1lZS5yZWRJQWRkKG9lKS5yZWRTcXIoKS5yZWRJU3ViKHRlKS5yZWRJU3ViKHNlKS5yZWRJU3ViKGhlKSxjZT1YLnJlZE11bCh1ZSk7Y2U9KGNlPWNlLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKTt2YXIgRz10aGlzLngucmVkTXVsKHNlKS5yZWRJU3ViKGNlKTtHPShHPUcu'@;
put 'cmVkSUFkZChHKSkucmVkSUFkZChHKTt2YXIgYj10aGlzLnkucmVkTXVsKHVlLnJlZE11bChoZS5yZWRJU3ViKHVlKSkucmVkSVN1YihvZS5yZWRNdWwoc2UpKSk7Yj0oYj0oYj1iLnJlZElBZGQoYikpLnJlZElBZGQoYikpLnJlZElBZGQoYik7dmFyIEQ9dGhpcy56LnJlZEFkZChvZSkucmVk'@;
put 'U3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKHNlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoRyxiLEQpfSxCLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oWSxYKXtyZXR1cm4gWT1uZXcgSyhZLFgpLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxZKX0sQi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24o'@;
put 'WSl7aWYoImFmZmluZSI9PT1ZLnR5cGUpcmV0dXJuIHRoaXMuZXEoWS50b0ooKSk7aWYodGhpcz09PVkpcmV0dXJuITA7dmFyIFg9dGhpcy56LnJlZFNxcigpLFU9WS56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKFUpLnJlZElTdWIoWS54LnJlZE11bChYKSkuY21wbigwKSlyZXR1'@;
put 'cm4hMTt2YXIgcT1YLnJlZE11bCh0aGlzLnopLGVlPVUucmVkTXVsKFkueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGVlKS5yZWRJU3ViKFkueS5yZWRNdWwocSkpLmNtcG4oMCl9LEIucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihZKXt2YXIgWD10aGlzLnoucmVkU3FyKCksVT1ZLnRv'@;
put 'UmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoWCk7aWYoMD09PXRoaXMueC5jbXAoVSkpcmV0dXJuITA7Zm9yKHZhciBxPVkuY2xvbmUoKSxlZT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKFgpOzspe2lmKHEuaWFkZCh0aGlzLmN1cnZlLm4pLHEuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJu'@;
put 'ITE7aWYoVS5yZWRJQWRkKGVlKSwwPT09dGhpcy54LmNtcChVKSlyZXR1cm4hMH19LEIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwy'@;
put 'KSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxCLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDU0Mjc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPU8s'@;
put 'ST1SKDM3MTUpLGs9Uig4MjU0KSxFPVIoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gaihCKXt0aGlzLmN1cnZlPSJzaG9ydCI9PT1CLnR5cGU/bmV3IGsuc2hvcnQoQik6ImVkd2FyZHMiPT09Qi50eXBlP25ldyBrLmVkd2FyZHMoQik6bmV3IGsubW9udChCKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRo'@;
put 'aXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPUIuaGFzaCxFKHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksRSh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIFYoQixZKXtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoSyxCLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgWD1uZXcgaihZKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEssQix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6WH0pLFh9fSl9Sy5QcmVzZXRDdXJ2ZT1q'@;
put 'LFYoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNjQyMTA1MTkg'@;
put 'ZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAw'@;
put 'IGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0pLFYoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAw'@;
put 'MDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQiLG46ImZmZmZmZmZmIGZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwiYmQzNzYzODggYjVmNzIzZmIgNGMy'@;
put 'MmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLFYoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZm'@;
put 'ZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAwMDAwMDAwMCBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRmZTM0MmUyIGZl'@;
put 'MWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxWKCJwMzg0Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjIixiOiJiMzMx'@;
put 'MmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2'@;
put 'MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6SS5zaGEzODQsZ1JlZDohMSxnOlsiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5'@;
put 'NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksVigicDUyMSIse3R5cGU6InNob3J0IixwcmltZTpu'@;
put 'dWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiIw'@;
put 'MDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiMDAwMDAwNTEg'@;
put 'OTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAiLG46IjAwMDAwMWZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOkkuc2hhNTEyLGdSZWQ6ITEsZzpbIjAw'@;
put 'MDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2IiwiMDAwMDAxMTggMzky'@;
put 'OTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0pLFYoImN1cnZlMjU1MTkiLHt0eXBl'@;
put 'OiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYg'@;
put 'NTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxWKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIs'@;
put 'YToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6SS5z'@;
put 'aGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiXX0pO3RyeXt6PVIoMTAz'@;
put 'Nyl9Y2F0Y2h7ej12b2lkIDB9Vigic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoiNyIsbjoiZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6SS5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZSIsbGFtYmRhOiI1MzYzYWQ0'@;
put 'Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7YToiMTE0Y2E1MGY3YThlMmYzZjY1'@;
put 'N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4'@;
put 'YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsel19KX0sNzk1NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDIxNTYpLEk9Uig5NTMpLGs9Uig1NDI3KSxFPVIoOTkzMSksaj1JLmFzc2VydCxWPVIoMTI1MSksQj1SKDYxMSk7ZnVuY3Rpb24gWShY'@;
put 'KXtpZighKHRoaXMgaW5zdGFuY2VvZiBZKSlyZXR1cm4gbmV3IFkoWCk7InN0cmluZyI9PXR5cGVvZiBYJiYoaihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxYKSwiVW5rbm93biBjdXJ2ZSAiK1gpLFg9a1tYXSksWCBpbnN0YW5jZW9mIGsuUHJlc2V0Q3VydmUmJihY'@;
put 'PXtjdXJ2ZTpYfSksdGhpcy5jdXJ2ZT1YLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9WC5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKFguY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlz'@;
put 'Lmhhc2g9WC5oYXNofHxYLmN1cnZlLmhhc2h9TS5leHBvcnRzPVksWS5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihYKXtyZXR1cm4gbmV3IFYodGhpcyxYKX0sWS5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oWCxVKXtyZXR1cm4gVi5mcm9tUHJpdmF0ZSh0aGlzLFgsVSl9'@;
put 'LFkucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oWCxVKXtyZXR1cm4gVi5mcm9tUHVibGljKHRoaXMsWCxVKX0sWS5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihYKXtYfHwoWD17fSk7Zm9yKHZhciBVPW5ldyBLKHtoYXNoOnRoaXMuaGFzaCxwZXJzOlgucGVycyxwZXJz'@;
put 'RW5jOlgucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6WC5lbnRyb3B5fHxFKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6WC5lbnRyb3B5JiZYLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSkscT10aGlzLm4uYnl0ZUxlbmd0aCgpLGVlPXRoaXMu'@;
put 'bi5zdWIobmV3IHooMikpOzspe3ZhciB0ZT1uZXcgeihVLmdlbmVyYXRlKHEpKTtpZighKHRlLmNtcChlZSk+MCkpcmV0dXJuIHRlLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUodGUpfX0sWS5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKFgsVSl7dmFyIHE9OCpYLmJ5dGVM'@;
put 'ZW5ndGgoKS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIHE+MCYmKFg9WC51c2hybihxKSksIVUmJlguY21wKHRoaXMubik+PTA/WC5zdWIodGhpcy5uKTpYfSxZLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFgsVSxxLGVlKXsib2JqZWN0Ij09dHlwZW9mIHEmJihlZT1xLHE9bnVsbCksZWV8'@;
put 'fChlZT17fSksVT10aGlzLmtleUZyb21Qcml2YXRlKFUscSksWD10aGlzLl90cnVuY2F0ZVRvTihuZXcgeihYLDE2KSk7Zm9yKHZhciB0ZT10aGlzLm4uYnl0ZUxlbmd0aCgpLG9lPVUuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIix0ZSksc2U9WC50b0FycmF5KCJiZSIsdGUpLGhlPW5ldyBL'@;
put 'KHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5Om9lLG5vbmNlOnNlLHBlcnM6ZWUucGVycyxwZXJzRW5jOmVlLnBlcnNFbmN8fCJ1dGY4In0pLHVlPXRoaXMubi5zdWIobmV3IHooMSkpLGNlPTA7O2NlKyspe3ZhciBHPWVlLms/ZWUuayhjZSk6bmV3IHooaGUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVM'@;
put 'ZW5ndGgoKSkpO2lmKCEoKEc9dGhpcy5fdHJ1bmNhdGVUb04oRywhMCkpLmNtcG4oMSk8PTB8fEcuY21wKHVlKT49MCkpe3ZhciBiPXRoaXMuZy5tdWwoRyk7aWYoIWIuaXNJbmZpbml0eSgpKXt2YXIgRD1iLmdldFgoKSxIPUQudW1vZCh0aGlzLm4pO2lmKDAhPT1ILmNtcG4oMCkpe3ZhciBO'@;
put 'PUcuaW52bSh0aGlzLm4pLm11bChILm11bChVLmdldFByaXZhdGUoKSkuaWFkZChYKSk7aWYoMCE9PShOPU4udW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgZz0oYi5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09RC5jbXAoSCk/MjowKTtyZXR1cm4gZWUuY2Fub25pY2FsJiZOLmNtcCh0aGlz'@;
put 'Lm5oKT4wJiYoTj10aGlzLm4uc3ViKE4pLGdePTEpLG5ldyBCKHtyOkgsczpOLHJlY292ZXJ5UGFyYW06Z30pfX19fX19LFkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihYLFUscSxlZSl7WD10aGlzLl90cnVuY2F0ZVRvTihuZXcgeihYLDE2KSkscT10aGlzLmtleUZyb21QdWJsaWMocSxl'@;
put 'ZSk7dmFyIHRlPShVPW5ldyBCKFUsImhleCIpKS5yLG9lPVUucztpZih0ZS5jbXBuKDEpPDB8fHRlLmNtcCh0aGlzLm4pPj0wfHxvZS5jbXBuKDEpPDB8fG9lLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBzZSxoZT1vZS5pbnZtKHRoaXMubiksdWU9aGUubXVsKFgpLnVtb2QodGhpcy5u'@;
put 'KSxjZT1oZS5tdWwodGUpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEoc2U9dGhpcy5nLmptdWxBZGQodWUscS5nZXRQdWJsaWMoKSxjZSkpLmlzSW5maW5pdHkoKSYmc2UuZXFYVG9QKHRlKTohKHNlPXRoaXMuZy5tdWxBZGQodWUscS5nZXRQdWJsaWMo'@;
put 'KSxjZSkpLmlzSW5maW5pdHkoKSYmMD09PXNlLmdldFgoKS51bW9kKHRoaXMubikuY21wKHRlKX0sWS5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihYLFUscSxlZSl7aigoMyZxKT09PXEsIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMiKSxVPW5ldyBC'@;
put 'KFUsZWUpO3ZhciB0ZT10aGlzLm4sb2U9bmV3IHooWCksc2U9VS5yLGhlPVUucyx1ZT0xJnEsY2U9cT4+MTtpZihzZS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJmNlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRl'@;
put 'Iik7c2U9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKGNlP3NlLmFkZCh0aGlzLmN1cnZlLm4pOnNlLHVlKTt2YXIgRz1VLnIuaW52bSh0ZSksYj10ZS5zdWIob2UpLm11bChHKS51bW9kKHRlKSxEPWhlLm11bChHKS51bW9kKHRlKTtyZXR1cm4gdGhpcy5nLm11bEFkZChiLHNlLEQpfSxZLnByb3Rv'@;
put 'dHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKFgsVSxxLGVlKXtpZihudWxsIT09KFU9bmV3IEIoVSxlZSkpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIFUucmVjb3ZlcnlQYXJhbTtmb3IodmFyIHRlPTA7dGU8NDt0ZSsrKXt2YXIgb2U7dHJ5e29lPXRoaXMucmVjb3ZlclB1YktleShY'@;
put 'LFUsdGUpfWNhdGNoe2NvbnRpbnVlfWlmKG9lLmVxKHEpKXJldHVybiB0ZX10aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIpfX0sMTI1MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDk1MykuYXNzZXJ0O2Z1bmN0'@;
put 'aW9uIEkoayxFKXt0aGlzLmVjPWssdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxFLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoRS5wcml2LEUucHJpdkVuYyksRS5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhFLnB1YixFLnB1YkVuYyl9TS5leHBvcnRzPUksSS5mcm9tUHVibGljPWZ1'@;
put 'bmN0aW9uKGssRSxqKXtyZXR1cm4gRSBpbnN0YW5jZW9mIEk/RTpuZXcgSShrLHtwdWI6RSxwdWJFbmM6an0pfSxJLmZyb21Qcml2YXRlPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4gRSBpbnN0YW5jZW9mIEk/RTpuZXcgSShrLHtwcml2OkUscHJpdkVuYzpqfSl9LEkucHJvdG90eXBlLnZhbGlk'@;
put 'YXRlPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gay5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OmsudmFsaWRhdGUoKT9rLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNv'@;
put 'bjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LEkucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihrLEUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgayYmKEU9ayxr'@;
put 'PW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxFP3RoaXMucHViLmVuY29kZShFLGspOnRoaXMucHVifSxJLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKGspe3JldHVybiJoZXgiPT09az90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhp'@;
put 'cy5wcml2fSxJLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihrLEUpe3RoaXMucHJpdj1uZXcgeihrLEV8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sSS5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihrLEUpe2lmKGsueHx8'@;
put 'ay55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9LKGsueCwiTmVlZCB4IGNvb3JkaW5hdGUiKToic2hvcnQiIT09dGhpcy5lYy5jdXJ2ZS50eXBlJiYiZWR3YXJkcyIhPT10aGlzLmVjLmN1cnZlLnR5cGV8fEsoay54JiZrLnksIk5lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5h'@;
put 'dGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoay54LGsueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoayxFKX0sSS5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKGspe3JldHVybiBrLnZhbGlkYXRlKCl8fEsoay52YWxpZGF0ZSgpLCJwdWJsaWMg'@;
put 'cG9pbnQgbm90IHZhbGlkYXRlZCIpLGsubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxJLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4gdGhpcy5lYy5zaWduKGssdGhpcyxFLGopfSxJLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdGhpcy5lYy52ZXJp'@;
put 'ZnkoayxFLHRoaXMpfSxJLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNjExOihNLE8sUik9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoOTUzKSxJPUsuYXNzZXJ0O2Z1bmN0aW9uIGsoWSxYKXtpZihZIGluc3RhbmNlb2YgaylyZXR1cm4gWTt0aGlzLl9pbXBvcnRERVIoWSxYKXx8KEkoWS5yJiZZLnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgeihZ'@;
put 'LnIsMTYpLHRoaXMucz1uZXcgeihZLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1ZLnJlY292ZXJ5UGFyYW0/bnVsbDpZLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIEUoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gaihZLFgpe3ZhciBVPVlbWC5wbGFjZSsrXTtpZighKDEyOCZV'@;
put 'KSlyZXR1cm4gVTt2YXIgcT0xNSZVO2lmKDA9PT1xfHxxPjQpcmV0dXJuITE7Zm9yKHZhciBlZT0wLHRlPTAsb2U9WC5wbGFjZTt0ZTxxO3RlKyssb2UrKyllZTw8PTgsZWV8PVlbb2VdLGVlPj4+PTA7cmV0dXJuIShlZTw9MTI3KSYmKFgucGxhY2U9b2UsZWUpfWZ1bmN0aW9uIFYoWSl7Zm9y'@;
put 'KHZhciBYPTAsVT1ZLmxlbmd0aC0xOyFZW1hdJiYhKDEyOCZZW1grMV0pJiZYPFU7KVgrKztyZXR1cm4gMD09PVg/WTpZLnNsaWNlKFgpfWZ1bmN0aW9uIEIoWSxYKXtpZihYPDEyOClZLnB1c2goWCk7ZWxzZXt2YXIgVT0xKyhNYXRoLmxvZyhYKS9NYXRoLkxOMj4+PjMpO2ZvcihZLnB1c2go'@;
put 'MTI4fFUpOy0tVTspWS5wdXNoKFg+Pj4oVTw8MykmMjU1KTtZLnB1c2goWCl9fU0uZXhwb3J0cz1rLGsucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oWSxYKXtZPUsudG9BcnJheShZLFgpO3ZhciBVPW5ldyBFO2lmKDQ4IT09WVtVLnBsYWNlKytdKXJldHVybiExO3ZhciBxPWooWSxV'@;
put 'KTtpZighMT09PXF8fHErVS5wbGFjZSE9PVkubGVuZ3RofHwyIT09WVtVLnBsYWNlKytdKXJldHVybiExO3ZhciBlZT1qKFksVSk7aWYoITE9PT1lZSlyZXR1cm4hMTt2YXIgdGU9WS5zbGljZShVLnBsYWNlLGVlK1UucGxhY2UpO2lmKFUucGxhY2UrPWVlLDIhPT1ZW1UucGxhY2UrK10pcmV0'@;
put 'dXJuITE7dmFyIG9lPWooWSxVKTtpZighMT09PW9lfHxZLmxlbmd0aCE9PW9lK1UucGxhY2UpcmV0dXJuITE7dmFyIHNlPVkuc2xpY2UoVS5wbGFjZSxvZStVLnBsYWNlKTtpZigwPT09dGVbMF0pe2lmKCEoMTI4JnRlWzFdKSlyZXR1cm4hMTt0ZT10ZS5zbGljZSgxKX1pZigwPT09c2VbMF0p'@;
put 'e2lmKCEoMTI4JnNlWzFdKSlyZXR1cm4hMTtzZT1zZS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyB6KHRlKSx0aGlzLnM9bmV3IHooc2UpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxrLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihZKXt2YXIgWD10aGlzLnIudG9BcnJheSgpLFU9'@;
put 'dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JlhbMF0mJihYPVswXS5jb25jYXQoWCkpLDEyOCZVWzBdJiYoVT1bMF0uY29uY2F0KFUpKSxYPVYoWCksVT1WKFUpOyEoVVswXXx8MTI4JlVbMV0pOylVPVUuc2xpY2UoMSk7dmFyIHE9WzJdO0IocSxYLmxlbmd0aCksKHE9cS5jb25jYXQoWCkpLnB1'@;
put 'c2goMiksQihxLFUubGVuZ3RoKTt2YXIgZWU9cS5jb25jYXQoVSksdGU9WzQ4XTtyZXR1cm4gQih0ZSxlZS5sZW5ndGgpLHRlPXRlLmNvbmNhdChlZSksSy5lbmNvZGUodGUsWSl9fSw1OTgwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzE1KSxLPVIoNTQyNyksST1SKDk1Myks'@;
put 'az1JLmFzc2VydCxFPUkucGFyc2VCeXRlcyxqPVIoOTA4NyksVj1SKDM2MjIpO2Z1bmN0aW9uIEIoWSl7aWYoaygiZWQyNTUxOSI9PT1ZLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKFkpO3RoaXMuY3VydmU9WT1L'@;
put 'W1ldLmN1cnZlLHRoaXMuZz1ZLmcsdGhpcy5nLnByZWNvbXB1dGUoWS5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1ZLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoWS5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD16LnNoYTUxMn1N'@;
put 'LmV4cG9ydHM9QixCLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFksWCl7WT1FKFkpO3ZhciBVPXRoaXMua2V5RnJvbVNlY3JldChYKSxxPXRoaXMuaGFzaEludChVLm1lc3NhZ2VQcmVmaXgoKSxZKSxlZT10aGlzLmcubXVsKHEpLHRlPXRoaXMuZW5jb2RlUG9pbnQoZWUpLG9lPXRoaXMuaGFz'@;
put 'aEludCh0ZSxVLnB1YkJ5dGVzKCksWSkubXVsKFUucHJpdigpKSxzZT1xLmFkZChvZSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6ZWUsUzpzZSxSZW5jb2RlZDp0ZX0pfSxCLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oWSxYLFUpe1k9RShZKSxY'@;
put 'PXRoaXMubWFrZVNpZ25hdHVyZShYKTt2YXIgcT10aGlzLmtleUZyb21QdWJsaWMoVSksZWU9dGhpcy5oYXNoSW50KFguUmVuY29kZWQoKSxxLnB1YkJ5dGVzKCksWSksdGU9dGhpcy5nLm11bChYLlMoKSk7cmV0dXJuIFguUigpLmFkZChxLnB1YigpLm11bChlZSkpLmVxKHRlKX0sQi5wcm90'@;
put 'b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgWT10aGlzLmhhc2goKSxYPTA7WDxhcmd1bWVudHMubGVuZ3RoO1grKylZLnVwZGF0ZShhcmd1bWVudHNbWF0pO3JldHVybiBJLmludEZyb21MRShZLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LEIucHJvdG90eXBlLmtleUZy'@;
put 'b21QdWJsaWM9ZnVuY3Rpb24oWSl7cmV0dXJuIGouZnJvbVB1YmxpYyh0aGlzLFkpfSxCLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKFkpe3JldHVybiBqLmZyb21TZWNyZXQodGhpcyxZKX0sQi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihZKXtyZXR1cm4gWSBp'@;
put 'bnN0YW5jZW9mIFY/WTpuZXcgVih0aGlzLFkpfSxCLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihZKXt2YXIgWD1ZLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIFhbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9WS5nZXRYKCkuaXNPZGQoKT8x'@;
put 'Mjg6MCxYfSxCLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihZKXt2YXIgWD0oWT1JLnBhcnNlQnl0ZXMoWSkpLmxlbmd0aC0xLFU9WS5zbGljZSgwLFgpLmNvbmNhdCgtMTI5JllbWF0pLHE9MCE9KDEyOCZZW1hdKSxlZT1JLmludEZyb21MRShVKTtyZXR1cm4gdGhpcy5jdXJ2ZS5w'@;
put 'b2ludEZyb21ZKGVlLHEpfSxCLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oWSl7cmV0dXJuIFkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxCLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oWSl7cmV0dXJuIEkuaW50RnJvbUxFKFkpfSxCLnByb3RvdHlwZS5p'@;
put 'c1BvaW50PWZ1bmN0aW9uKFkpe3JldHVybiBZIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sOTA4NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUzKSxLPXouYXNzZXJ0LEk9ei5wYXJzZUJ5dGVzLGs9ei5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiBFKGosVil7dGhpcy5l'@;
put 'ZGRzYT1qLHRoaXMuX3NlY3JldD1JKFYuc2VjcmV0KSxqLmlzUG9pbnQoVi5wdWIpP3RoaXMuX3B1Yj1WLnB1Yjp0aGlzLl9wdWJCeXRlcz1JKFYucHViKX1FLmZyb21QdWJsaWM9ZnVuY3Rpb24oaixWKXtyZXR1cm4gViBpbnN0YW5jZW9mIEU/VjpuZXcgRShqLHtwdWI6Vn0pfSxFLmZyb21T'@;
put 'ZWNyZXQ9ZnVuY3Rpb24oaixWKXtyZXR1cm4gViBpbnN0YW5jZW9mIEU/VjpuZXcgRShqLHtzZWNyZXQ6Vn0pfSxFLnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxrKEUsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29k'@;
put 'ZVBvaW50KHRoaXMucHViKCkpfSksayhFLCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksayhFLCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFy'@;
put 'IGo9dGhpcy5lZGRzYSxWPXRoaXMuaGFzaCgpLEI9ai5lbmNvZGluZ0xlbmd0aC0xLFk9Vi5zbGljZSgwLGouZW5jb2RpbmdMZW5ndGgpO3JldHVybiBZWzBdJj0yNDgsWVtCXSY9MTI3LFlbQl18PTY0LFl9KSxrKEUsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2Rl'@;
put 'SW50KHRoaXMucHJpdkJ5dGVzKCkpfSksayhFLCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxrKEUsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMu'@;
put 'ZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksRS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihqKXtyZXR1cm4gSyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKGosdGhpcyl9LEUucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihqLFYpe3JldHVy'@;
put 'biB0aGlzLmVkZHNhLnZlcmlmeShqLFYsdGhpcyl9LEUucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihqKXtyZXR1cm4gSyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSx6LmVuY29kZSh0aGlzLnNlY3JldCgpLGopfSxFLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVu'@;
put 'Y3Rpb24oail7cmV0dXJuIHouZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxqKX0sTS5leHBvcnRzPUV9LDM2MjI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3ODUpLEs9Uig5NTMpLEk9Sy5hc3NlcnQsaz1LLmNhY2hlZFByb3BlcnR5LEU9Sy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIGoo'@;
put 'VixCKXt0aGlzLmVkZHNhPVYsIm9iamVjdCIhPXR5cGVvZiBCJiYoQj1FKEIpKSxBcnJheS5pc0FycmF5KEIpJiYoQj17UjpCLnNsaWNlKDAsVi5lbmNvZGluZ0xlbmd0aCksUzpCLnNsaWNlKFYuZW5jb2RpbmdMZW5ndGgpfSksSShCLlImJkIuUywiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBT'@;
put 'IiksVi5pc1BvaW50KEIuUikmJih0aGlzLl9SPUIuUiksQi5TIGluc3RhbmNlb2YgeiYmKHRoaXMuX1M9Qi5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KEIuUik/Qi5SOkIuUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheShCLlMpP0IuUzpCLlNlbmNvZGVkfWso'@;
put 'aiwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLGsoaiwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSksayhqLCJSZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxrKGosIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxqLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhp'@;
put 'cy5TZW5jb2RlZCgpKX0sai5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gSy5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LE0uZXhwb3J0cz1qfSwxMDM3Ok09PntNLmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNi'@;
put 'NTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzlj'@;
put 'YWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5Iiwi'@;
put 'ZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2'@;
put 'MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZk'@;
put 'NGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1'@;
put 'ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2Jm'@;
put 'ZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5'@;
put 'NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1'@;
put 'N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxb'@;
put 'IjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNh'@;
put 'OTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5'@;
put 'OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4'@;
put 'ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYy'@;
put 'NGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDli'@;
put 'MTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0'@;
put 'ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0'@;
put 'NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4'@;
put 'OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRi'@;
put 'NDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBm'@;
put 'MjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5'@;
put 'NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1'@;
put 'MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2'@;
put 'MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxb'@;
put 'ImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2'@;
put 'NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2Uz'@;
put 'ZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFk'@;
put 'OTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4'@;
put 'MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5'@;
put 'ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNi'@;
put 'OTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJk'@;
put 'YjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFm'@;
put 'NGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEw'@;
put 'ZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1'@;
put 'ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIx'@;
put 'YTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1'@;
put 'YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4'@;
put 'YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZm'@;
put 'MmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEy'@;
put 'YjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIw'@;
put 'ZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5'@;
put 'Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcx'@;
put 'Y2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQy'@;
put 'MmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1'@;
put 'ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdm'@;
put 'OTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3Zjll'@;
put 'NjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0'@;
put 'ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVl'@;
put 'Nzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQz'@;
put 'NThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2'@;
put 'MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJm'@;
put 'YTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4'@;
put 'ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4'@;
put 'ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4'@;
put 'MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIz'@;
put 'ODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0'@;
put 'MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3'@;
put 'MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVm'@;
put 'NDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNk'@;
put 'ZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2'@;
put 'YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEw'@;
put 'NGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsi'@;
put 'MzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5'@;
put 'MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0'@;
put 'NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFh'@;
put 'Y2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEw'@;
put 'MzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZk'@;
put 'OWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2'@;
put 'MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgw'@;
put 'ZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3'@;
put 'MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRj'@;
put 'N2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1'@;
put 'MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFj'@;
put 'MTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4'@;
put 'ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3'@;
put 'MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNh'@;
put 'Zjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4'@;
put 'YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4'@;
put 'ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQz'@;
put 'MDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAy'@;
put 'YWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2'@;
put 'Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0'@;
put 'OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhk'@;
put 'YTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBj'@;
put 'OGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5'@;
put 'OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5'@;
put 'MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4'@;
put 'NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZl'@;
put 'NTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFm'@;
put 'MDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQz'@;
put 'Y2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4'@;
put 'YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2'@;
put 'MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEz'@;
put 'N2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTky'@;
put 'MTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYw'@;
put 'ZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1'@;
put 'YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5'@;
put 'NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2Vm'@;
put 'ZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2'@;
put 'NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZh'@;
put 'MjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJm'@;
put 'ZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMy'@;
put 'ZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2Mw'@;
put 'NjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5'@;
put 'OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVj'@;
put 'MjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4'@;
put 'ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4'@;
put 'MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFj'@;
put 'ZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZi'@;
put 'NmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNm'@;
put 'ZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTlj'@;
put 'ZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFk'@;
put 'Yzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJd'@;
put 'LFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2Ey'@;
put 'ZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThl'@;
put 'OGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJh'@;
put 'MDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMz'@;
put 'NDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVm'@;
put 'ZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZk'@;
put 'NTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwi'@;
put 'YmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0'@;
put 'M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNk'@;
put 'YzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZi'@;
put 'ODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4'@;
put 'NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2Jl'@;
put 'MmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0'@;
put 'Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsi'@;
put 'Y2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0'@;
put 'NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJl'@;
put 'YmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMz'@;
put 'YzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYx'@;
put 'NmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5'@;
put 'MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJl'@;
put 'NjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwi'@;
put 'ZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQw'@;
put 'ZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEy'@;
put 'MTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQx'@;
put 'NDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFl'@;
put 'YmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0'@;
put 'ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2Ji'@;
put 'NjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsi'@;
put 'MzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3Yzcy'@;
put 'YjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2Qx'@;
put 'MGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZm'@;
put 'MjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNm'@;
put 'YTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRh'@;
put 'ZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkz'@;
put 'MWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2'@;
put 'MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIw'@;
put 'MzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUz'@;
put 'YTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRi'@;
put 'ZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0'@;
put 'OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYz'@;
put 'ZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2'@;
put 'ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxb'@;
put 'IjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUz'@;
put 'OGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUw'@;
put 'Mzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZi'@;
put 'MDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFk'@;
put 'MzM5NDExOWRhZjQwOGY5Il1dfX19LDk1MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PU8sSz1SKDM3ODUpLEk9Uig5NzQ2KSxrPVIoNDUwNCk7ei5hc3NlcnQ9SSx6LnRvQXJyYXk9ay50b0FycmF5LHouemVybzI9ay56ZXJvMix6LnRvSGV4PWsudG9IZXgsei5lbmNvZGU9ay5lbmNv'@;
put 'ZGUsei5nZXROQUY9ZnVuY3Rpb24oRSxqLFYpe3ZhciBCPW5ldyBBcnJheShNYXRoLm1heChFLmJpdExlbmd0aCgpLFYpKzEpO0IuZmlsbCgwKTtmb3IodmFyIFk9MTw8aisxLFg9RS5jbG9uZSgpLFU9MDtVPEIubGVuZ3RoO1UrKyl7dmFyIHEsZWU9WC5hbmRsbihZLTEpO1guaXNPZGQoKT9Y'@;
put 'LmlzdWJuKHE9ZWU+KFk+PjEpLTE/KFk+PjEpLWVlOmVlKTpxPTAsQltVXT1xLFguaXVzaHJuKDEpfXJldHVybiBCfSx6LmdldEpTRj1mdW5jdGlvbihFLGope3ZhciBWPVtbXSxbXV07RT1FLmNsb25lKCksaj1qLmNsb25lKCk7Zm9yKHZhciBCLFk9MCxYPTA7RS5jbXBuKC1ZKT4wfHxqLmNt'@;
put 'cG4oLVgpPjA7KXt2YXIgVSxxLGVlPUUuYW5kbG4oMykrWSYzLHRlPWouYW5kbG4oMykrWCYzOzM9PT1lZSYmKGVlPS0xKSwzPT09dGUmJih0ZT0tMSksVT0xJmVlPzMhPShCPUUuYW5kbG4oNykrWSY3KSYmNSE9PUJ8fDIhPT10ZT9lZTotZWU6MCxWWzBdLnB1c2goVSkscT0xJnRlPzMhPShC'@;
put 'PWouYW5kbG4oNykrWCY3KSYmNSE9PUJ8fDIhPT1lZT90ZTotdGU6MCxWWzFdLnB1c2gocSksMipZPT09VSsxJiYoWT0xLVkpLDIqWD09PXErMSYmKFg9MS1YKSxFLml1c2hybigxKSxqLml1c2hybigxKX1yZXR1cm4gVn0sei5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbihFLGosVil7dmFyIEI9'@;
put 'Il8iK2o7RS5wcm90b3R5cGVbal09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tCXT90aGlzW0JdOnRoaXNbQl09Vi5jYWxsKHRoaXMpfX0sei5wYXJzZUJ5dGVzPWZ1bmN0aW9uKEUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgRT96LnRvQXJyYXkoRSwiaGV4Iik6RX0sei5pbnRG'@;
put 'cm9tTEU9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBLKEUsImhleCIsImxlIil9fSwzNzg1OmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9u'@;
put 'IGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhp'@;
put 'cy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1F'@;
put 'LEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDU1NjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49'@;
put 'OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1n'@;
put 'LmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9'@;
put 'PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVt'@;
put 'YmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0'@;
put 'cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykp'@;
put 'KX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcs'@;
put 'Zy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMp'@;
put 'fSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMu'@;
put 'd29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdb'@;
put 'di0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJd'@;
put 'PDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5n'@;
put 'dGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jk'@;
put 'c1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgs'@;
put 'dGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9y'@;
put 'KHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9'@;
put 'PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5'@;
put 'PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnBy'@;
put 'b3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90'@;
put 'b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVu'@;
put 'Z3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAw'@;
put 'MDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAi'@;
put 'LCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3'@;
put 'NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5'@;
put 'NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3Zh'@;
put 'ciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixM'@;
put 'ZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jk'@;
put 'c1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2'@;
put 'PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49'@;
put 'MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIg'@;
put 'eGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtT'@;
put 'Lmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10'@;
put 'aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUg'@;
put 'dXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlM'@;
put 'aWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7'@;
put 'SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUu'@;
put 'aXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFd'@;
put 'PXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49'@;
put 'OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwh'@;
put 'KDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0x'@;
put 'KStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30s'@;
put 'RS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xv'@;
put 'bmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJv'@;
put 'dG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5s'@;
put 'ZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0'@;
put 'aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFu'@;
put 'ZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhp'@;
put 'cy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNb'@;
put 'dl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09'@;
put 'KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWcl'@;
put 'MjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3Rv'@;
put 'dHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jk'@;
put 'c1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRo'@;
put 'aXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/'@;
put 'KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3dd'@;
put 'PTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndv'@;
put 'cmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMu'@;
put 'bmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdh'@;
put 'dGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFy'@;
put 'IFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pd'@;
put 'KS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtK'@;
put 'PFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5j'@;
put 'bG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgx'@;
put 'OTEmS2UsSmU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0'@;
put 'LE10PWl0Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixY'@;
put 'dD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixC'@;
put 'bj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixQbj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihw'@;
put 'PShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikpK01hdGguaW11bChX'@;
put 'ZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEz'@;
put 'KXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsZm4pfDApK01hdGgu'@;
put 'aW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZu'@;
put 'KXwwKStNYXRoLmltdWwoSmUsZnQpfDAsdz13K01hdGguaW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwo'@;
put 'TGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShw'@;
put 'PU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFll'@;
put 'LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2UsbW4p'@;
put 'fDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9Njcx'@;
put 'MDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwo'@;
put 'SmUsTnQpfDAsdz13K01hdGguaW11bChKZSxtbil8MCx2PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygo'@;
put 'ODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwk'@;
put 'bikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAsdj12K01hdGguaW11'@;
put 'bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdl'@;
put 'LFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHIm'@;
put 'PTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01h'@;
put 'dGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxtbil8MCkrTWF0aC5p'@;
put 'bXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoWWUsWXQpfDApK01hdGguaW11bChKZSxwdCl8MCx3PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01h'@;
put 'dGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQs'@;
put 'ZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRo'@;
put 'LmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11'@;
put 'bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJl'@;
put 'LHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoamUs'@;
put 'Qm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxQbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGgu'@;
put 'aW11bChGZSxQbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwo'@;
put 'RGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxK'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXww'@;
put 'LHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUG4pfDAp'@;
put 'K01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFBuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChG'@;
put 'ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRoLmltdWwoRGUsSXQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChEZSxKdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2'@;
put 'PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytN'@;
put 'YXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFBuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxQbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN'@;
put 'YXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwo'@;
put 'Ym4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0'@;
put 'KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0o'@;
put 'cD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0'@;
put 'aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUG4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFBuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5p'@;
put 'bXVsKEplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibixt'@;
put 'biksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStN'@;
put 'YXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUG4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFBuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4p'@;
put 'fDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGgu'@;
put 'aW11bChVdCxKdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12'@;
put 'K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFBuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxQbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01h'@;
put 'dGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwo'@;
put 'Ym4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24p'@;
put 'fDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUG4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLFBuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYo'@;
put 'cD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01h'@;
put 'dGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwodXQsUG4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LFBuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13'@;
put 'K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFB0LFBuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixQbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8'@;
put 'MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsUG4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sUG4pO3ZhciBocz0oZmUrKHY9ditN'@;
put 'YXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9'@;
put 'TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1n'@;
put 'aSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycyww'@;
put 'IT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7'@;
put 'dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5s'@;
put 'ZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7'@;
put 'dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9'@;
put 'eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMo'@;
put 'ZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVy'@;
put 'biB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHAp'@;
put 'O2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNbeGUrT2VdLFdlPXZb'@;
put 'eGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUq'@;
put 'RmUrZmUqTGUsTGU9SmUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcs'@;
put 'QyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9'@;
put 'MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYp'@;
put 'e2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9y'@;
put 'KHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3'@;
put 'IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEz'@;
put 'YihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2Vd'@;
put 'K2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2'@;
put 'ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVs'@;
put 'Zj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90'@;
put 'eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4'@;
put 'NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNx'@;
put 'cj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5i'@;
put 'aXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1D'@;
put 'W3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZn'@;
put 'Pj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+'@;
put 'MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRo'@;
put 'aXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUy'@;
put 'NikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25l'@;
put 'Lmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRo'@;
put 'aXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3Ro'@;
put 'JiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMp'@;
put 'KX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3Ro'@;
put 'PD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53'@;
put 'b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24o'@;
put 'Zyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMu'@;
put 'bGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhp'@;
put 'cy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8'@;
put 'dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5'@;
put 'cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5w'@;
put 'cm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2'@;
put 'MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAo'@;
put 'KTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24o'@;
put 'ZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYo'@;
put 'Im1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUm'@;
put 'Jih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5z'@;
put 'dWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09'@;
put 'UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0'@;
put 'aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9'@;
put 'dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdh'@;
put 'dGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1D'@;
put 'P3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxF'@;
put 'LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYp'@;
put 'O3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgt'@;
put 'MTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQq'@;
put 'Qzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVy'@;
put 'bygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hy'@;
put 'bigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09k'@;
put 'ZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkp'@;
put 'JiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJv'@;
put 'dG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0Mu'@;
put 'Y21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7'@;
put 'IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVy'@;
put 'bih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xv'@;
put 'bmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBw'@;
put 'PUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90'@;
put 'b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30s'@;
put 'RS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9'@;
put 'PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJp'@;
put 'cCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVu'@;
put 'Y3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUu'@;
put 'dWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09'@;
put 'cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09'@;
put 'dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJl'@;
put 'ciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21S'@;
put 'ZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl'@;
put 'cnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt'@;
put 'YmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11'@;
put 'bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi'@;
put 'KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl'@;
put 'ZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52'@;
put 'bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJy'@;
put 'ZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJl'@;
put 'ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0'@;
put 'aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZm'@;
put 'ZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10'@;
put 'eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0'@;
put 'PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMu'@;
put 'bSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVs'@;
put 'bCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRM'@;
put 'ZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90'@;
put 'eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0'@;
put 'aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7'@;
put 'cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNb'@;
put 'Zy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndv'@;
put 'cmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSoo'@;
put 'MHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBj'@;
put 'ZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0'@;
put 'aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSks'@;
put 'InJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9y'@;
put 'Y2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlz'@;
put 'Ll92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5j'@;
put 'bXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlz'@;
put 'dWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykp'@;
put 'fSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3Rv'@;
put 'dHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3Zh'@;
put 'ciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVz'@;
put 'aHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUp'@;
put 'LmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9PU9lLmNtcCh3KTtqZSsrKU9lPU9l'@;
put 'LnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9'@;
put 'Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYo'@;
put 'MD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVu'@;
put 'Z3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0'@;
put 'PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBl'@;
put 'LmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0'@;
put 'aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1'@;
put 'cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlz'@;
put 'Lm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3Zh'@;
put 'ciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigw'@;
put 'KTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sODA5MTpNPT57'@;
put 'InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE8oUix6KXtpZihudWxsPT1SKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdCIpO2Zvcih2YXIgSz1PYmplY3QoUiksST0xO0k8YXJndW1lbnRzLmxlbmd0aDtJKyspe3ZhciBrPWFyZ3VtZW50'@;
put 'c1tJXTtpZihudWxsIT1rKWZvcih2YXIgRT1PYmplY3Qua2V5cyhPYmplY3QoaykpLGo9MCxWPUUubGVuZ3RoO2o8VjtqKyspe3ZhciBCPUVbal0sWT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGssQik7dm9pZCAwIT09WSYmWS5lbnVtZXJhYmxlJiYoS1tCXT1rW0JdKX19cmV0'@;
put 'dXJuIEt9TS5leHBvcnRzPXthc3NpZ246Tyxwb2x5ZmlsbDpmdW5jdGlvbigpe09iamVjdC5hc3NpZ258fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsImFzc2lnbiIse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOk99KX19fSw3MTg3OihNLE8s'@;
put 'Uik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDUxMDgpLEk9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxrPUkmJiJmdW5jdGlvbiI9PXR5cGVvZiBJLmFwcGx5P0kuYXBwbHk6ZnVuY3Rpb24oaGUsdWUsY2Upe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHku'@;
put 'Y2FsbChoZSx1ZSxjZSl9O3o9SSYmImZ1bmN0aW9uIj09dHlwZW9mIEkub3duS2V5cz9JLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihoZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3Bl'@;
put 'cnR5U3ltYm9scyhoZSkpfTpmdW5jdGlvbihoZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlKX07dmFyIEU9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihoZSl7cmV0dXJuIGhlIT1oZX07ZnVuY3Rpb24gaigpe2ouaW5pdC5jYWxsKHRoaXMpfU0uZXhwb3J0cz1qLE0uZXhw'@;
put 'b3J0cy5vbmNlPWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oY2UsRyl7ZnVuY3Rpb24gYihIKXtoZS5yZW1vdmVMaXN0ZW5lcih1ZSxEKSxHKEgpfWZ1bmN0aW9uIEQoKXsiZnVuY3Rpb24iPT10eXBlb2YgaGUucmVtb3ZlTGlzdGVuZXImJmhlLnJlbW92ZUxp'@;
put 'c3RlbmVyKCJlcnJvciIsYiksY2UoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX12YXIgSDtzZShoZSx1ZSxELHtvbmNlOiEwfSksImVycm9yIiE9PXVlJiYiZnVuY3Rpb24iPT10eXBlb2YoSD1oZSkub24mJnNlKEgsImVycm9yIixiLHtvbmNlOiEwfSl9KX0sai5FdmVudEVtaXR0ZXI9aixq'@;
put 'LnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxqLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxqLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgVj0xMDtmdW5jdGlvbiBCKGhlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0'@;
put 'ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGhlKX1mdW5jdGlvbiBZKGhlKXtyZXR1cm4gdm9pZCAwPT09aGUuX21heExpc3RlbmVycz9qLmRlZmF1bHRNYXhMaXN0ZW5lcnM6aGUuX21heExpc3RlbmVyc31mdW5jdGlvbiBY'@;
put 'KGhlLHVlLGNlLEcpe3ZhciBiLEQsSDtpZihCKGNlKSx2b2lkIDA9PT0oRD1oZS5fZXZlbnRzKT8oRD1oZS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksaGUuX2V2ZW50c0NvdW50PTApOih2b2lkIDAhPT1ELm5ld0xpc3RlbmVyJiYoaGUuZW1pdCgibmV3TGlzdGVuZXIiLHVlLGNlLmxp'@;
put 'c3RlbmVyP2NlLmxpc3RlbmVyOmNlKSxEPWhlLl9ldmVudHMpLEg9RFt1ZV0pLHZvaWQgMD09PUgpSD1EW3VlXT1jZSwrK2hlLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBIP0g9RFt1ZV09Rz9bY2UsSF06W0gsY2VdOkc/SC51bnNoaWZ0KGNlKTpILnB1c2goY2Up'@;
put 'LChiPVkoaGUpKT4wJiZILmxlbmd0aD5iJiYhSC53YXJuZWQpe0gud2FybmVkPSEwO3ZhciBnPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK0gubGVuZ3RoKyIgIitTdHJpbmcodWUpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRl'@;
put 'ci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO2cubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixnLmVtaXR0ZXI9aGUsZy50eXBlPXVlLGcuY291bnQ9SC5sZW5ndGgsSyYmSy53YXJuJiZLLndhcm4oZyl9cmV0dXJuIGhlfWZ1bmN0aW9uIFUoKXtpZigh'@;
put 'dGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdl'@;
put 'dCxhcmd1bWVudHMpfWZ1bmN0aW9uIHEoaGUsdWUsY2Upe3ZhciBHPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpoZSx0eXBlOnVlLGxpc3RlbmVyOmNlfSxiPVUuYmluZChHKTtyZXR1cm4gYi5saXN0ZW5lcj1jZSxHLndyYXBGbj1iLGJ9ZnVuY3Rpb24gZWUoaGUsdWUsY2Upe3Zh'@;
put 'ciBHPWhlLl9ldmVudHM7aWYodm9pZCAwPT09RylyZXR1cm5bXTt2YXIgYj1HW3VlXTtyZXR1cm4gdm9pZCAwPT09Yj9bXToiZnVuY3Rpb24iPT10eXBlb2YgYj9jZT9bYi5saXN0ZW5lcnx8Yl06W2JdOmNlP2Z1bmN0aW9uKEQpe2Zvcih2YXIgSD1uZXcgQXJyYXkoRC5sZW5ndGgpLE49MDtO'@;
put 'PEgubGVuZ3RoOysrTilIW05dPURbTl0ubGlzdGVuZXJ8fERbTl07cmV0dXJuIEh9KGIpOm9lKGIsYi5sZW5ndGgpfWZ1bmN0aW9uIHRlKGhlKXt2YXIgdWU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PXVlKXt2YXIgY2U9dWVbaGVdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjZSlyZXR1cm4g'@;
put 'MTtpZih2b2lkIDAhPT1jZSlyZXR1cm4gY2UubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIG9lKGhlLHVlKXtmb3IodmFyIGNlPW5ldyBBcnJheSh1ZSksRz0wO0c8dWU7KytHKWNlW0ddPWhlW0ddO3JldHVybiBjZX1mdW5jdGlvbiBzZShoZSx1ZSxjZSxHKXtpZigiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgaGUub24pRy5vbmNlP2hlLm9uY2UodWUsY2UpOmhlLm9uKHVlLGNlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4g'@;
put 'UmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBoZSk7aGUuYWRkRXZlbnRMaXN0ZW5lcih1ZSxmdW5jdGlvbiBiKEQpe0cub25jZSYmaGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih1ZSxiKSxjZShEKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFi'@;
put 'bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFZ9LHNldDpmdW5jdGlvbihoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBoZXx8aGU8MHx8RShoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0'@;
put 'IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytoZSsiLiIpO1Y9aGV9fSksai5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmpl'@;
put 'Y3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sai5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGhlKXtpZigibnVtYmVyIiE9dHlwZW9mIGhlfHxoZTwwfHxFKGhlKSl0aHJv'@;
put 'dyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2hlKyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1oZSx0aGlzfSxqLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5l'@;
put 'cnM9ZnVuY3Rpb24oKXtyZXR1cm4gWSh0aGlzKX0sai5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihoZSl7Zm9yKHZhciB1ZT1bXSxjZT0xO2NlPGFyZ3VtZW50cy5sZW5ndGg7Y2UrKyl1ZS5wdXNoKGFyZ3VtZW50c1tjZV0pO3ZhciBHPSJlcnJvciI9PT1oZSxiPXRoaXMuX2V2ZW50cztpZih2'@;
put 'b2lkIDAhPT1iKUc9RyYmdm9pZCAwPT09Yi5lcnJvcjtlbHNlIGlmKCFHKXJldHVybiExO2lmKEcpe3ZhciBEO2lmKHVlLmxlbmd0aD4wJiYoRD11ZVswXSksRCBpbnN0YW5jZW9mIEVycm9yKXRocm93IEQ7dmFyIEg9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisoRD8iICgiK0QubWVz'@;
put 'c2FnZSsiKSI6IiIpKTt0aHJvdyBILmNvbnRleHQ9RCxIfXZhciBOPWJbaGVdO2lmKHZvaWQgMD09PU4pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE4payhOLHRoaXMsdWUpO2Vsc2V7dmFyIGc9Ti5sZW5ndGgsQz1vZShOLGcpO2ZvcihjZT0wO2NlPGc7KytjZSlrKENbY2VdLHRo'@;
put 'aXMsdWUpfXJldHVybiEwfSxqLnByb3RvdHlwZS5vbj1qLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihoZSx1ZSl7cmV0dXJuIFgodGhpcyxoZSx1ZSwhMSl9LGoucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihoZSx1ZSl7cmV0dXJuIFgodGhpcyxoZSx1ZSwhMCl9'@;
put 'LGoucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBCKHVlKSx0aGlzLm9uKGhlLHEodGhpcyxoZSx1ZSkpLHRoaXN9LGoucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBCKHVlKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihoZSxx'@;
put 'KHRoaXMsaGUsdWUpKSx0aGlzfSxqLnByb3RvdHlwZS5vZmY9ai5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oaGUsdWUpe3ZhciBjZSxHLGIsRCxIO2lmKEIodWUpLHZvaWQgMD09PShHPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KGNlPUdbaGVdKSly'@;
put 'ZXR1cm4gdGhpcztpZihjZT09PXVlfHxjZS5saXN0ZW5lcj09PXVlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBHW2hlXSxHLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixoZSxjZS5saXN0'@;
put 'ZW5lcnx8dWUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBjZSl7Zm9yKGI9LTEsRD1jZS5sZW5ndGgtMTtEPj0wO0QtLSlpZihjZVtEXT09PXVlfHxjZVtEXS5saXN0ZW5lcj09PXVlKXtIPWNlW0RdLmxpc3RlbmVyLGI9RDticmVha31pZihiPDApcmV0dXJuIHRoaXM7MD09PWI/Y2Uu'@;
put 'c2hpZnQoKTpmdW5jdGlvbihOLGcpe2Zvcig7ZysxPE4ubGVuZ3RoO2crKylOW2ddPU5bZysxXTtOLnBvcCgpfShjZSxiKSwxPT09Y2UubGVuZ3RoJiYoR1toZV09Y2VbMF0pLHZvaWQgMCE9PUcucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGhlLEh8fHVlKX1y'@;
put 'ZXR1cm4gdGhpc30sai5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGhlKXt2YXIgdWUsY2UsRztpZih2b2lkIDA9PT0oY2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1jZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5n'@;
put 'dGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PWNlW2hlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIGNlW2hlXSksdGhpcztpZigwPT09YXJndW1l'@;
put 'bnRzLmxlbmd0aCl7dmFyIGIsRD1PYmplY3Qua2V5cyhjZSk7Zm9yKEc9MDtHPEQubGVuZ3RoOysrRykicmVtb3ZlTGlzdGVuZXIiIT09KGI9RFtHXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGIpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0'@;
put 'aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKHVlPWNlW2hlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihoZSx1ZSk7ZWxzZSBpZih2b2lkIDAhPT11ZSlmb3IoRz11ZS5sZW5ndGgtMTtHPj0wO0ctLSl0'@;
put 'aGlzLnJlbW92ZUxpc3RlbmVyKGhlLHVlW0ddKTtyZXR1cm4gdGhpc30sai5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGhlKXtyZXR1cm4gZWUodGhpcyxoZSwhMCl9LGoucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihoZSl7cmV0dXJuIGVlKHRoaXMsaGUsITEpfSxqLmxp'@;
put 'c3RlbmVyQ291bnQ9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBoZS5saXN0ZW5lckNvdW50P2hlLmxpc3RlbmVyQ291bnQodWUpOnRlLmNhbGwoaGUsdWUpfSxqLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PXRlLGoucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD96KHRoaXMuX2V2ZW50cyk6W119fSwzMDQ4OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoMjMxOCk7TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFLGope2lmKHouaXNCdWZmZXIoSSl8fChJPXouZnJvbShJLCJiaW5hcnki'@;
put 'KSksayYmKHouaXNCdWZmZXIoayl8fChrPXouZnJvbShrLCJiaW5hcnkiKSksOCE9PWsubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgVj1FLzgsQj16LmFsbG9jKFYpLFk9ei5hbGxvYyhqfHww'@;
put 'KSxYPXouYWxsb2MoMCk7Vj4wfHxqPjA7KXt2YXIgVT1uZXcgSztVLnVwZGF0ZShYKSxVLnVwZGF0ZShJKSxrJiZVLnVwZGF0ZShrKSxYPVUuZGlnZXN0KCk7dmFyIHE9MDtpZihWPjApe3ZhciBlZT1CLmxlbmd0aC1WO3E9TWF0aC5taW4oVixYLmxlbmd0aCksWC5jb3B5KEIsZWUsMCxxKSxW'@;
put 'LT1xfWlmKHE8WC5sZW5ndGgmJmo+MCl7dmFyIHRlPVkubGVuZ3RoLWosb2U9TWF0aC5taW4oaixYLmxlbmd0aC1xKTtYLmNvcHkoWSx0ZSxxLHErb2UpLGotPW9lfX1yZXR1cm4gWC5maWxsKDApLHtrZXk6QixpdjpZfX19LDQwMjk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUz'@;
put 'MjApLEs9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7TS5leHBvcnRzPWZ1bmN0aW9uKGssRSxqKXtpZigheihFKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgVjthcmd1bWVu'@;
put 'dHMubGVuZ3RoPj0zJiYoVj1qKSwiW29iamVjdCBBcnJheV0iPT09Sy5jYWxsKGspP2Z1bmN0aW9uKEIsWSxYKXtmb3IodmFyIFU9MCxxPUIubGVuZ3RoO1U8cTtVKyspSS5jYWxsKEIsVSkmJihudWxsPT1YP1koQltVXSxVLEIpOlkuY2FsbChYLEJbVV0sVSxCKSl9KGssRSxWKToic3RyaW5n'@;
put 'Ij09dHlwZW9mIGs/ZnVuY3Rpb24oQixZLFgpe2Zvcih2YXIgVT0wLHE9Qi5sZW5ndGg7VTxxO1UrKyludWxsPT1YP1koQi5jaGFyQXQoVSksVSxCKTpZLmNhbGwoWCxCLmNoYXJBdChVKSxVLEIpfShrLEUsVik6ZnVuY3Rpb24oQixZLFgpe2Zvcih2YXIgVSBpbiBCKUkuY2FsbChCLFUpJiYo'@;
put 'bnVsbD09WD9ZKEJbVV0sVSxCKTpZLmNhbGwoWCxCW1VdLFUsQikpfShrLEUsVil9fSw2MjMwOk09PntNLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGYuRm9ybURhdGE6d2luZG93LkZvcm1EYXRhfSw1MzAyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxL'@;
put 'PVIoNTEwOCk7Y29uc3QgST1SKDc3KSxrPVIoMjUyMCksRT1SKDEzODEpLm1rZGlyc1N5bmMsaj1SKDMxOCkudXRpbWVzTWlsbGlzU3luYyxWPVIoMjczMyk7ZnVuY3Rpb24gQihxLGVlLHRlLG9lKXtjb25zdCBzZT0ob2UuZGVyZWZlcmVuY2U/SS5zdGF0U3luYzpJLmxzdGF0U3luYykoZWUp'@;
put 'O2lmKHNlLmlzRGlyZWN0b3J5KCkpcmV0dXJuIGhlPXNlLGNlPWVlLEc9dGUsYj1vZSxxP1UoY2UsRyxiKTooRD1oZS5tb2RlLEg9Y2UsZz1iLEkubWtkaXJTeW5jKE49RyksVShILE4sZyksWChOLEQpKTt2YXIgaGUsY2UsRyxiLEQsSCxOLGc7aWYoc2UuaXNGaWxlKCl8fHNlLmlzQ2hhcmFj'@;
put 'dGVyRGV2aWNlKCl8fHNlLmlzQmxvY2tEZXZpY2UoKSlyZXR1cm4gZnVuY3Rpb24oaGUsdWUsY2UsRyxiKXtyZXR1cm4gdWU/ZnVuY3Rpb24oRCxILE4sZyl7aWYoZy5vdmVyd3JpdGUpcmV0dXJuIEkudW5saW5rU3luYyhOKSxZKEQsSCxOLGcpO2lmKGcuZXJyb3JPbkV4aXN0KXRocm93IG5l'@;
put 'dyBFcnJvcihgJyR7Tn0nIGFscmVhZHkgZXhpc3RzYCl9KGhlLGNlLEcsYik6WShoZSxjZSxHLGIpfShzZSxxLGVlLHRlLG9lKTtpZihzZS5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlvbihoZSx1ZSxjZSxHKXtsZXQgYj1JLnJlYWRsaW5rU3luYyh1ZSk7aWYoRy5kZXJlZmVyZW5j'@;
put 'ZSYmKGI9ay5yZXNvbHZlKHouY3dkKCksYikpLGhlKXtsZXQgRDt0cnl7RD1JLnJlYWRsaW5rU3luYyhjZSl9Y2F0Y2goSCl7aWYoIkVJTlZBTCI9PT1ILmNvZGV8fCJVTktOT1dOIj09PUguY29kZSlyZXR1cm4gSS5zeW1saW5rU3luYyhiLGNlKTt0aHJvdyBIfWlmKEcuZGVyZWZlcmVuY2Um'@;
put 'JihEPWsucmVzb2x2ZSh6LmN3ZCgpLEQpKSxWLmlzU3JjU3ViZGlyKGIsRCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtifScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtEfScuYCk7aWYoSS5zdGF0U3luYyhjZSkuaXNEaXJlY3RvcnkoKSYmVi5pc1NyY1N1YmRp'@;
put 'cihELGIpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtEfScgd2l0aCAnJHtifScuYCk7cmV0dXJuIGZ1bmN0aW9uKEgsTil7cmV0dXJuIEkudW5saW5rU3luYyhOKSxJLnN5bWxpbmtTeW5jKEgsTil9KGIsY2UpfXJldHVybiBJLnN5bWxpbmtTeW5jKGIsY2UpfShxLGVl'@;
put 'LHRlLG9lKTt0aHJvdyBzZS5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtlZX1gKTpzZS5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke2VlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke2VlfWApfWZ1'@;
put 'bmN0aW9uIFkocSxlZSx0ZSxvZSl7cmV0dXJuIEkuY29weUZpbGVTeW5jKGVlLHRlKSxvZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJihoZT1lZSx1ZT10ZSwwPT0oMTI4JihzZT1xLm1vZGUpKSYmWCh1ZSwxMjh8c2UpLGZ1bmN0aW9uKGNlLEcpe2NvbnN0IGI9SS5zdGF0U3luYyhjZSk7aihHLGIu'@;
put 'YXRpbWUsYi5tdGltZSl9KGhlLHVlKSksWCh0ZSxxLm1vZGUpO3ZhciBzZSxoZSx1ZX1mdW5jdGlvbiBYKHEsZWUpe3JldHVybiBJLmNobW9kU3luYyhxLGVlKX1mdW5jdGlvbiBVKHEsZWUsdGUpe0kucmVhZGRpclN5bmMocSkuZm9yRWFjaChvZT0+ZnVuY3Rpb24oc2UsaGUsdWUsY2Upe2Nv'@;
put 'bnN0IEc9ay5qb2luKGhlLHNlKSxiPWsuam9pbih1ZSxzZSkse2Rlc3RTdGF0OkR9PVYuY2hlY2tQYXRoc1N5bmMoRyxiLCJjb3B5IixjZSk7cmV0dXJuIGZ1bmN0aW9uKEgsTixnLEMpe2lmKCFDLmZpbHRlcnx8Qy5maWx0ZXIoTixnKSlyZXR1cm4gQihILE4sZyxDKX0oRCxHLGIsY2UpfShv'@;
put 'ZSxxLGVlLHRlKSl9TS5leHBvcnRzPWZ1bmN0aW9uKHEsZWUsdGUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0ZSYmKHRlPXtmaWx0ZXI6dGV9KSwodGU9dGV8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gdGUpfHwhIXRlLmNsb2JiZXIsdGUub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gdGU/ISF0'@;
put 'ZS5vdmVyd3JpdGU6dGUuY2xvYmJlcix0ZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PXouYXJjaCYmSy53YXJuKCJmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG4gICAgc2VlIGh0'@;
put 'dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5Iik7Y29uc3R7c3JjU3RhdDpvZSxkZXN0U3RhdDpzZX09Vi5jaGVja1BhdGhzU3luYyhxLGVlLCJjb3B5Iix0ZSk7cmV0dXJuIFYuY2hlY2tQYXJlbnRQYXRoc1N5bmMocSxvZSxlZSwiY29weSIp'@;
put 'LGZ1bmN0aW9uKGhlLHVlLGNlLEcpe2lmKEcuZmlsdGVyJiYhRy5maWx0ZXIodWUsY2UpKXJldHVybjtjb25zdCBiPWsuZGlybmFtZShjZSk7cmV0dXJuIEkuZXhpc3RzU3luYyhiKXx8RShiKSxCKGhlLHVlLGNlLEcpfShzZSxxLGVlLHRlKX19LDg2OTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0'@;
put 'IjtNLmV4cG9ydHM9e2NvcHlTeW5jOlIoNTMwMil9fSw3MTg5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCk7Y29uc3QgST1SKDc3KSxrPVIoMjUyMCksRT1SKDEzODEpLm1rZGlycyxqPVIoOTI1NykucGF0aEV4aXN0cyxWPVIoMzE4KS51dGltZXNNaWxs'@;
put 'aXMsQj1SKDI3MzMpO2Z1bmN0aW9uIFkodWUsY2UsRyxiLEQpe2NvbnN0IEg9ay5kaXJuYW1lKEcpO2ooSCwoTixnKT0+Tj9EKE4pOmc/VSh1ZSxjZSxHLGIsRCk6dm9pZCBFKEgsQz0+Qz9EKEMpOlUodWUsY2UsRyxiLEQpKSl9ZnVuY3Rpb24gWCh1ZSxjZSxHLGIsRCxIKXtQcm9taXNlLnJl'@;
put 'c29sdmUoRC5maWx0ZXIoRyxiKSkudGhlbihOPT5OP3VlKGNlLEcsYixELEgpOkgoKSxOPT5IKE4pKX1mdW5jdGlvbiBVKHVlLGNlLEcsYixEKXsoYi5kZXJlZmVyZW5jZT9JLnN0YXQ6SS5sc3RhdCkoY2UsKEgsTik9PntyZXR1cm4gSD9EKEgpOk4uaXNEaXJlY3RvcnkoKT8oZz1OLFM9Y2Us'@;
put 'dj1HLHA9Yix3PUQsdWU/b2UoUyx2LHAsdyk6KEo9Zy5tb2RlLG5lPVMsZmU9cCx4ZT13LHZvaWQgSS5ta2RpcihkZT12LExlPT57aWYoTGUpcmV0dXJuIHhlKExlKTtvZShuZSxkZSxmZSxGZT0+RmU/eGUoRmUpOnRlKGRlLEoseGUpKX0pKSk6Ti5pc0ZpbGUoKXx8Ti5pc0NoYXJhY3RlckRl'@;
put 'dmljZSgpfHxOLmlzQmxvY2tEZXZpY2UoKT9mdW5jdGlvbihnLEMsUyx2LHAsdyl7cmV0dXJuIEM/ZnVuY3Rpb24oSixuZSxkZSxmZSx4ZSl7aWYoIWZlLm92ZXJ3cml0ZSlyZXR1cm4gZmUuZXJyb3JPbkV4aXN0P3hlKG5ldyBFcnJvcihgJyR7ZGV9JyBhbHJlYWR5IGV4aXN0c2ApKTp4ZSgp'@;
put 'O0kudW5saW5rKGRlLExlPT5MZT94ZShMZSk6cShKLG5lLGRlLGZlLHhlKSl9KGcsUyx2LHAsdyk6cShnLFMsdixwLHcpfShOLHVlLGNlLEcsYixEKTpOLmlzU3ltYm9saWNMaW5rKCk/ZnVuY3Rpb24gaGUodWUsY2UsRyxiLEQpe0kucmVhZGxpbmsoY2UsKEgsTik9Pkg/RChIKTooYi5kZXJl'@;
put 'ZmVyZW5jZSYmKE49ay5yZXNvbHZlKHouY3dkKCksTikpLHVlP3ZvaWQgSS5yZWFkbGluayhHLChnLEMpPT5nPyJFSU5WQUwiPT09Zy5jb2RlfHwiVU5LTk9XTiI9PT1nLmNvZGU/SS5zeW1saW5rKE4sRyxEKTpEKGcpOihiLmRlcmVmZXJlbmNlJiYoQz1rLnJlc29sdmUoei5jd2QoKSxDKSks'@;
put 'Qi5pc1NyY1N1YmRpcihOLEMpP0QobmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtOfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtDfScuYCkpOnVlLmlzRGlyZWN0b3J5KCkmJkIuaXNTcmNTdWJkaXIoQyxOKT9EKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtDfScg'@;
put 'd2l0aCAnJHtOfScuYCkpOmZ1bmN0aW9uKFMsdixwKXtJLnVubGluayh2LHc9Pnc/cCh3KTpJLnN5bWxpbmsoUyx2LHApKX0oTixHLEQpKSk6SS5zeW1saW5rKE4sRyxEKSkpfSh1ZSxjZSxHLGIsRCk6Ti5pc1NvY2tldCgpP0QobmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxl'@;
put 'OiAke2NlfWApKTpOLmlzRklGTygpP0QobmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtjZX1gKSk6RChuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtjZX1gKSk7dmFyIGcsUyx2LHAsdyxKLG5lLGRlLGZlLHhlfSl9ZnVuY3Rpb24gcSh1ZSxjZSxHLGIsRCl7SS5jb3B5'@;
put 'RmlsZShjZSxHLEg9PntyZXR1cm4gSD9EKEgpOmIucHJlc2VydmVUaW1lc3RhbXBzPyhnPWNlLEM9RyxTPUQsMD09KDEyOCYoTj11ZS5tb2RlKSk/dGUoQywxMjh8Tix2PT52P1Modik6ZWUoTixnLEMsUykpOmVlKE4sZyxDLFMpKTp0ZShHLHVlLm1vZGUsRCk7dmFyIE4sZyxDLFN9KX1mdW5j'@;
put 'dGlvbiBlZSh1ZSxjZSxHLGIpe3ZhciBILE47SD1HLE49RD0+RD9iKEQpOnRlKEcsdWUsYiksSS5zdGF0KGNlLChnLEMpPT5nP04oZyk6VihILEMuYXRpbWUsQy5tdGltZSxOKSl9ZnVuY3Rpb24gdGUodWUsY2UsRyl7cmV0dXJuIEkuY2htb2QodWUsY2UsRyl9ZnVuY3Rpb24gb2UodWUsY2Us'@;
put 'RyxiKXtJLnJlYWRkaXIodWUsKEQsSCk9PkQ/YihEKTpzZShILHVlLGNlLEcsYikpfWZ1bmN0aW9uIHNlKHVlLGNlLEcsYixEKXtjb25zdCBIPXVlLnBvcCgpO3JldHVybiBIP2Z1bmN0aW9uKE4sZyxDLFMsdixwKXtjb25zdCB3PWsuam9pbihDLGcpLEo9ay5qb2luKFMsZyk7Qi5jaGVja1Bh'@;
put 'dGhzKHcsSiwiY29weSIsdiwobmUsZGUpPT57aWYobmUpcmV0dXJuIHAobmUpO2NvbnN0e2Rlc3RTdGF0OmZlfT1kZTt2YXIgeGUsTGUsRmUsT2UsamU7eGU9ZmUsTGU9dyxGZT1KLGplPXhlPT54ZT9wKHhlKTpzZShOLEMsUyx2LHApLChPZT12KS5maWx0ZXI/WChVLHhlLExlLEZlLE9lLGpl'@;
put 'KTpVKHhlLExlLEZlLE9lLGplKX0pfSh1ZSxILGNlLEcsYixEKTpEKCl9TS5leHBvcnRzPWZ1bmN0aW9uKHVlLGNlLEcsYil7ImZ1bmN0aW9uIiE9dHlwZW9mIEd8fGI/ImZ1bmN0aW9uIj09dHlwZW9mIEcmJihHPXtmaWx0ZXI6R30pOihiPUcsRz17fSksYj1ifHxmdW5jdGlvbigpe30sKEc9'@;
put 'R3x8e30pLmNsb2JiZXI9ISgiY2xvYmJlciJpbiBHKXx8ISFHLmNsb2JiZXIsRy5vdmVyd3JpdGU9Im92ZXJ3cml0ZSJpbiBHPyEhRy5vdmVyd3JpdGU6Ry5jbG9iYmVyLEcucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT16LmFyY2gmJksud2FybigiZnMtZXh0cmE6IFVzaW5nIHRoZSBw'@;
put 'cmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIpLEIuY2hlY2tQYXRocyh1ZSxjZSwiY29weSIsRywoRCxIKT0+'@;
put 'e2lmKEQpcmV0dXJuIGIoRCk7Y29uc3R7c3JjU3RhdDpOLGRlc3RTdGF0Omd9PUg7Qi5jaGVja1BhcmVudFBhdGhzKHVlLE4sY2UsImNvcHkiLEM9PkM/YihDKTpHLmZpbHRlcj9YKFksZyx1ZSxjZSxHLGIpOlkoZyx1ZSxjZSxHLGIpKX0pfX0sNjQ2NDooTSxPLFIpPT57InVzZSBzdHJpY3Qi'@;
put 'O2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2s7TS5leHBvcnRzPXtjb3B5OnooUig3MTg5KSl9fSw1NTkwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21Qcm9taXNlLEs9Uig3NzQ5KSxJPVIoMjUyMCksaz1SKDEzODEpLEU9Uig0NTQyKSxqPXooZnVuY3Rp'@;
put 'b24oKXt2YXIgQj1hZShmdW5jdGlvbiooWSl7bGV0IFg7dHJ5e1g9eWllbGQgSy5yZWFkZGlyKFkpfWNhdGNoe3JldHVybiBrLm1rZGlycyhZKX1yZXR1cm4gUHJvbWlzZS5hbGwoWC5tYXAoVT0+RS5yZW1vdmUoSS5qb2luKFksVSkpKSl9KTtyZXR1cm4gZnVuY3Rpb24oWSl7cmV0dXJuIEIu'@;
put 'YXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7ZnVuY3Rpb24gVihCKXtsZXQgWTt0cnl7WT1LLnJlYWRkaXJTeW5jKEIpfWNhdGNoe3JldHVybiBrLm1rZGlyc1N5bmMoQil9WS5mb3JFYWNoKFg9PntYPUkuam9pbihCLFgpLEUucmVtb3ZlU3luYyhYKX0pfU0uZXhwb3J0cz17ZW1wdHlEaXJT'@;
put 'eW5jOlYsZW1wdHlkaXJTeW5jOlYsZW1wdHlEaXI6aixlbXB0eWRpcjpqfX0sNjUzMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDI1MjApLEk9Uig3Nyksaz1SKDEzODEpO00uZXhwb3J0cz17Y3JlYXRlRmlsZTp6KGZ1bmN0aW9uKEUs'@;
put 'ail7ZnVuY3Rpb24gVigpe0kud3JpdGVGaWxlKEUsIiIsQj0+e2lmKEIpcmV0dXJuIGooQik7aigpfSl9SS5zdGF0KEUsKEIsWSk9PntpZighQiYmWS5pc0ZpbGUoKSlyZXR1cm4gaigpO2NvbnN0IFg9Sy5kaXJuYW1lKEUpO0kuc3RhdChYLChVLHEpPT57aWYoVSlyZXR1cm4iRU5PRU5UIj09'@;
put 'PVUuY29kZT9rLm1rZGlycyhYLGVlPT57aWYoZWUpcmV0dXJuIGooZWUpO1YoKX0pOmooVSk7cS5pc0RpcmVjdG9yeSgpP1YoKTpJLnJlYWRkaXIoWCxlZT0+e2lmKGVlKXJldHVybiBqKGVlKX0pfSl9KX0pLGNyZWF0ZUZpbGVTeW5jOmZ1bmN0aW9uKEUpe2xldCBqO3RyeXtqPUkuc3RhdFN5'@;
put 'bmMoRSl9Y2F0Y2h7fWlmKGomJmouaXNGaWxlKCkpcmV0dXJuO2NvbnN0IFY9Sy5kaXJuYW1lKEUpO3RyeXtJLnN0YXRTeW5jKFYpLmlzRGlyZWN0b3J5KCl8fEkucmVhZGRpclN5bmMoVil9Y2F0Y2goQil7aWYoIUJ8fCJFTk9FTlQiIT09Qi5jb2RlKXRocm93IEI7ay5ta2RpcnNTeW5jKFYp'@;
put 'fUkud3JpdGVGaWxlU3luYyhFLCIiKX19fSwxNzIwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDY1MzApLEs9Uig0MTQ3KSxJPVIoMzYzNSk7TS5leHBvcnRzPXtjcmVhdGVGaWxlOnouY3JlYXRlRmlsZSxjcmVhdGVGaWxlU3luYzp6LmNyZWF0ZUZpbGVTeW5jLGVuc3VyZUZp'@;
put 'bGU6ei5jcmVhdGVGaWxlLGVuc3VyZUZpbGVTeW5jOnouY3JlYXRlRmlsZVN5bmMsY3JlYXRlTGluazpLLmNyZWF0ZUxpbmssY3JlYXRlTGlua1N5bmM6Sy5jcmVhdGVMaW5rU3luYyxlbnN1cmVMaW5rOksuY3JlYXRlTGluayxlbnN1cmVMaW5rU3luYzpLLmNyZWF0ZUxpbmtTeW5jLGNyZWF0'@;
put 'ZVN5bWxpbms6SS5jcmVhdGVTeW1saW5rLGNyZWF0ZVN5bWxpbmtTeW5jOkkuY3JlYXRlU3ltbGlua1N5bmMsZW5zdXJlU3ltbGluazpJLmNyZWF0ZVN5bWxpbmssZW5zdXJlU3ltbGlua1N5bmM6SS5jcmVhdGVTeW1saW5rU3luY319LDQxNDc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25z'@;
put 'dCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9UigyNTIwKSxJPVIoNzcpLGs9UigxMzgxKSxFPVIoOTI1NykucGF0aEV4aXN0cyx7YXJlSWRlbnRpY2FsOmp9PVIoMjczMyk7TS5leHBvcnRzPXtjcmVhdGVMaW5rOnooZnVuY3Rpb24oVixCLFkpe2Z1bmN0aW9uIFgoVSxxKXtJLmxpbmsoVSxx'@;
put 'LGVlPT57aWYoZWUpcmV0dXJuIFkoZWUpO1kobnVsbCl9KX1JLmxzdGF0KEIsKFUscSk9PntJLmxzdGF0KFYsKGVlLHRlKT0+e2lmKGVlKXJldHVybiBlZS5tZXNzYWdlPWVlLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksWShlZSk7aWYocSYmaih0ZSxxKSlyZXR1cm4g'@;
put 'WShudWxsKTtjb25zdCBvZT1LLmRpcm5hbWUoQik7RShvZSwoc2UsaGUpPT5zZT9ZKHNlKTpoZT9YKFYsQik6dm9pZCBrLm1rZGlycyhvZSx1ZT0+e2lmKHVlKXJldHVybiBZKHVlKTtYKFYsQil9KSl9KX0pfSksY3JlYXRlTGlua1N5bmM6ZnVuY3Rpb24oVixCKXtsZXQgWTt0cnl7WT1JLmxz'@;
put 'dGF0U3luYyhCKX1jYXRjaHt9dHJ5e2NvbnN0IFU9SS5sc3RhdFN5bmMoVik7aWYoWSYmaihVLFkpKXJldHVybn1jYXRjaChVKXt0aHJvdyBVLm1lc3NhZ2U9VS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFV9Y29uc3QgWD1LLmRpcm5hbWUoQik7cmV0dXJuIEkuZXhp'@;
put 'c3RzU3luYyhYKXx8ay5ta2RpcnNTeW5jKFgpLEkubGlua1N5bmMoVixCKX19fSw2MDcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDI1MjApLEs9Uig3NyksST1SKDkyNTcpLnBhdGhFeGlzdHM7TS5leHBvcnRzPXtzeW1saW5rUGF0aHM6ZnVuY3Rpb24oayxFLGope2lmKHou'@;
put 'aXNBYnNvbHV0ZShrKSlyZXR1cm4gSy5sc3RhdChrLFY9PlY/KFYubWVzc2FnZT1WLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVTeW1saW5rIiksaihWKSk6aihudWxsLHt0b0N3ZDprLHRvRHN0Omt9KSk7e2NvbnN0IFY9ei5kaXJuYW1lKEUpLEI9ei5qb2luKFYsayk7cmV0dXJu'@;
put 'IEkoQiwoWSxYKT0+WT9qKFkpOlg/aihudWxsLHt0b0N3ZDpCLHRvRHN0Omt9KTpLLmxzdGF0KGssVT0+VT8oVS5tZXNzYWdlPVUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxqKFUpKTpqKG51bGwse3RvQ3dkOmssdG9Ec3Q6ei5yZWxhdGl2ZShWLGspfSkpKX19'@;
put 'LHN5bWxpbmtQYXRoc1N5bmM6ZnVuY3Rpb24oayxFKXtsZXQgajtpZih6LmlzQWJzb2x1dGUoaykpe2lmKGo9Sy5leGlzdHNTeW5jKGspLCFqKXRocm93IG5ldyBFcnJvcigiYWJzb2x1dGUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDprLHRvRHN0Omt9fXtjb25zdCBW'@;
put 'PXouZGlybmFtZShFKSxCPXouam9pbihWLGspO2lmKGo9Sy5leGlzdHNTeW5jKEIpLGopcmV0dXJue3RvQ3dkOkIsdG9Ec3Q6a307aWYoaj1LLmV4aXN0c1N5bmMoayksIWopdGhyb3cgbmV3IEVycm9yKCJyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOmss'@;
put 'dG9Ec3Q6ei5yZWxhdGl2ZShWLGspfX19fX0sOTI1OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3Nyk7TS5leHBvcnRzPXtzeW1saW5rVHlwZTpmdW5jdGlvbihLLEksayl7aWYoaz0iZnVuY3Rpb24iPT10eXBlb2YgST9JOmssST0iZnVuY3Rpb24iIT10eXBlb2YgSSYmSSly'@;
put 'ZXR1cm4gayhudWxsLEkpO3oubHN0YXQoSywoRSxqKT0+e2lmKEUpcmV0dXJuIGsobnVsbCwiZmlsZSIpO0k9aiYmai5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIixrKG51bGwsSSl9KX0sc3ltbGlua1R5cGVTeW5jOmZ1bmN0aW9uKEssSSl7bGV0IGs7aWYoSSlyZXR1cm4gSTt0cnl7az16'@;
put 'LmxzdGF0U3luYyhLKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIGsmJmsuaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9fX0sMzYzNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDI1MjApLEk9Uig3NzQ5KSxrPVIoMTM4MSksRT1r'@;
put 'Lm1rZGlycyxqPWsubWtkaXJzU3luYyxWPVIoNjA3MiksQj1WLnN5bWxpbmtQYXRocyxZPVYuc3ltbGlua1BhdGhzU3luYyxYPVIoOTI1OSksVT1YLnN5bWxpbmtUeXBlLHE9WC5zeW1saW5rVHlwZVN5bmMsZWU9Uig5MjU3KS5wYXRoRXhpc3RzLHthcmVJZGVudGljYWw6dGV9PVIoMjczMyk7'@;
put 'ZnVuY3Rpb24gb2Uoc2UsaGUsdWUsY2Upe0Ioc2UsaGUsKEcsYik9PntpZihHKXJldHVybiBjZShHKTtzZT1iLnRvRHN0LFUoYi50b0N3ZCx1ZSwoRCxIKT0+e2lmKEQpcmV0dXJuIGNlKEQpO2NvbnN0IE49Sy5kaXJuYW1lKGhlKTtlZShOLChnLEMpPT5nP2NlKGcpOkM/SS5zeW1saW5rKHNl'@;
put 'LGhlLEgsY2UpOnZvaWQgRShOLFM9PntpZihTKXJldHVybiBjZShTKTtJLnN5bWxpbmsoc2UsaGUsSCxjZSl9KSl9KX0pfU0uZXhwb3J0cz17Y3JlYXRlU3ltbGluazp6KGZ1bmN0aW9uKHNlLGhlLHVlLGNlKXtjZT0iZnVuY3Rpb24iPT10eXBlb2YgdWU/dWU6Y2UsdWU9ImZ1bmN0aW9uIiE9'@;
put 'dHlwZW9mIHVlJiZ1ZSxJLmxzdGF0KGhlLChHLGIpPT57IUcmJmIuaXNTeW1ib2xpY0xpbmsoKT9Qcm9taXNlLmFsbChbSS5zdGF0KHNlKSxJLnN0YXQoaGUpXSkudGhlbigoW0QsSF0pPT57aWYodGUoRCxIKSlyZXR1cm4gY2UobnVsbCk7b2Uoc2UsaGUsdWUsY2UpfSk6b2Uoc2UsaGUsdWUs'@;
put 'Y2UpfSl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbihzZSxoZSx1ZSl7bGV0IGNlO3RyeXtjZT1JLmxzdGF0U3luYyhoZSl9Y2F0Y2h7fWlmKGNlJiZjZS5pc1N5bWJvbGljTGluaygpKXtjb25zdCBEPUkuc3RhdFN5bmMoc2UpLEg9SS5zdGF0U3luYyhoZSk7aWYodGUoRCxIKSlyZXR1'@;
put 'cm59Y29uc3QgRz1ZKHNlLGhlKTtzZT1HLnRvRHN0LHVlPXEoRy50b0N3ZCx1ZSk7Y29uc3QgYj1LLmRpcm5hbWUoaGUpO3JldHVybiBJLmV4aXN0c1N5bmMoYil8fGooYiksSS5zeW1saW5rU3luYyhzZSxoZSx1ZSl9fX0sNzc0OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4'@;
put 'OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDc3KSxJPVsiYWNjZXNzIiwiYXBwZW5kRmlsZSIsImNobW9kIiwiY2hvd24iLCJjbG9zZSIsImNvcHlGaWxlIiwiZmNobW9kIiwiZmNob3duIiwiZmRhdGFzeW5jIiwiZnN0YXQiLCJmc3luYyIsImZ0cnVuY2F0ZSIsImZ1dGltZXMiLCJsY2htb2QiLCJs'@;
put 'Y2hvd24iLCJsaW5rIiwibHN0YXQiLCJta2RpciIsIm1rZHRlbXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJlYWRsaW5rIiwicmVhbHBhdGgiLCJyZW5hbWUiLCJybSIsInJtZGlyIiwic3RhdCIsInN5bWxpbmsiLCJ0cnVuY2F0ZSIsInVubGluayIsInV0aW1l'@;
put 'cyIsIndyaXRlRmlsZSJdLmZpbHRlcihrPT4iZnVuY3Rpb24iPT10eXBlb2YgS1trXSk7T2JqZWN0LmFzc2lnbihPLEspLEkuZm9yRWFjaChrPT57T1trXT16KEtba10pfSksTy5yZWFscGF0aC5uYXRpdmU9eihLLnJlYWxwYXRoLm5hdGl2ZSksTy5leGlzdHM9ZnVuY3Rpb24oayxFKXtyZXR1'@;
put 'cm4iZnVuY3Rpb24iPT10eXBlb2YgRT9LLmV4aXN0cyhrLEUpOm5ldyBQcm9taXNlKGo9PksuZXhpc3RzKGssaikpfSxPLnJlYWQ9ZnVuY3Rpb24oayxFLGosVixCLFkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBZP0sucmVhZChrLEUsaixWLEIsWSk6bmV3IFByb21pc2UoKFgsVSk9PntL'@;
put 'LnJlYWQoayxFLGosVixCLChxLGVlLHRlKT0+e2lmKHEpcmV0dXJuIFUocSk7WCh7Ynl0ZXNSZWFkOmVlLGJ1ZmZlcjp0ZX0pfSl9KX0sTy53cml0ZT1mdW5jdGlvbihrLEUsLi4uail7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGpbai5sZW5ndGgtMV0/Sy53cml0ZShrLEUsLi4uaik6bmV3'@;
put 'IFByb21pc2UoKFYsQik9PntLLndyaXRlKGssRSwuLi5qLChZLFgsVSk9PntpZihZKXJldHVybiBCKFkpO1Yoe2J5dGVzV3JpdHRlbjpYLGJ1ZmZlcjpVfSl9KX0pfSwiZnVuY3Rpb24iPT10eXBlb2YgSy53cml0ZXYmJihPLndyaXRldj1mdW5jdGlvbihrLEUsLi4uail7cmV0dXJuImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIGpbai5sZW5ndGgtMV0/Sy53cml0ZXYoayxFLC4uLmopOm5ldyBQcm9taXNlKChWLEIpPT57Sy53cml0ZXYoayxFLC4uLmosKFksWCxVKT0+e2lmKFkpcmV0dXJuIEIoWSk7Vih7Ynl0ZXNXcml0dGVuOlgsYnVmZmVyczpVfSl9KX0pfSl9LDU2NzQ6KE0sTyxSKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ey4uLlIoNzc0OSksLi4uUig4NjkwKSwuLi5SKDY0NjQpLC4uLlIoNTU5MCksLi4uUigxNzIwKSwuLi5SKDY1NzMpLC4uLlIoMTM4MSksLi4uUig0MDI2KSwuLi5SKDUzMCksLi4uUigxMzE1KSwuLi5SKDkyNTcpLC4uLlIoNDU0Mil9fSw2NTczOihNLE8s'@;
put 'Uik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21Qcm9taXNlLEs9Uig3MTgzKTtLLm91dHB1dEpzb249eihSKDM1MDgpKSxLLm91dHB1dEpzb25TeW5jPVIoOTU3OCksSy5vdXRwdXRKU09OPUsub3V0cHV0SnNvbixLLm91dHB1dEpTT05TeW5jPUsub3V0cHV0SnNvblN5bmMs'@;
put 'Sy53cml0ZUpTT049Sy53cml0ZUpzb24sSy53cml0ZUpTT05TeW5jPUsud3JpdGVKc29uU3luYyxLLnJlYWRKU09OPUsucmVhZEpzb24sSy5yZWFkSlNPTlN5bmM9Sy5yZWFkSnNvblN5bmMsTS5leHBvcnRzPUt9LDcxODM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNjgxMyk7'@;
put 'TS5leHBvcnRzPXtyZWFkSnNvbjp6LnJlYWRGaWxlLHJlYWRKc29uU3luYzp6LnJlYWRGaWxlU3luYyx3cml0ZUpzb246ei53cml0ZUZpbGUsd3JpdGVKc29uU3luYzp6LndyaXRlRmlsZVN5bmN9fSw5NTc4OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5Onp9PVIoNjc4'@;
put 'MCkse291dHB1dEZpbGVTeW5jOkt9PVIoMTMxNSk7TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFKXtjb25zdCBqPXooayxFKTtLKEksaixFKX19LDM1MDg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtzdHJpbmdpZnk6en09Uig2NzgwKSx7b3V0cHV0RmlsZTpLfT1SKDEzMTUpO00uZXhw'@;
put 'b3J0cz1mdW5jdGlvbigpe3ZhciBJPWFlKGZ1bmN0aW9uKihrLEUsaj17fSl7Y29uc3QgVj16KEUsaik7eWllbGQgSyhrLFYsail9KTtyZXR1cm4gZnVuY3Rpb24oayxFKXtyZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSwxMzgxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29u'@;
put 'c3Qgej1SKDg5ODEpLmZyb21Qcm9taXNlLHttYWtlRGlyOkssbWFrZURpclN5bmM6SX09Uig4MjMzKSxrPXooSyk7TS5leHBvcnRzPXtta2RpcnM6ayxta2RpcnNTeW5jOkksbWtkaXJwOmssbWtkaXJwU3luYzpJLGVuc3VyZURpcjprLGVuc3VyZURpclN5bmM6SX19LDgyMzM6KE0sTyxSKT0+'@;
put 'eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzc0OSkse2NoZWNrUGF0aDpLfT1SKDM0NjgpLEk9az0+Im51bWJlciI9PXR5cGVvZiBrP2s6e21vZGU6NTExLC4uLmt9Lm1vZGU7TS5leHBvcnRzLm1ha2VEaXI9ZnVuY3Rpb24oKXt2YXIgaz1hZShmdW5jdGlvbiooRSxqKXtyZXR1cm4gSyhFKSx6'@;
put 'Lm1rZGlyKEUse21vZGU6SShqKSxyZWN1cnNpdmU6ITB9KX0pO3JldHVybiBmdW5jdGlvbihFLGope3JldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksTS5leHBvcnRzLm1ha2VEaXJTeW5jPShrLEUpPT4oSyhrKSx6Lm1rZGlyU3luYyhrLHttb2RlOkkoRSkscmVjdXJzaXZlOiEw'@;
put 'fSkpfSwzNDY4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtjb25zdCBLPVIoMjUyMCk7TS5leHBvcnRzLmNoZWNrUGF0aD1mdW5jdGlvbihJKXtpZigid2luMzIiPT09ei5wbGF0Zm9ybSYmL1s8PjoifD8qXS8udGVzdChJLnJlcGxhY2UoSy5wYXJzZShJKS5yb290LCIi'@;
put 'KSkpe2NvbnN0IGs9bmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtJfWApO3Rocm93IGsuY29kZT0iRUlOVkFMIixrfX19LDQwMjY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9e21vdmVTeW5jOlIoNjAwNil9fSw2MDA2OihNLE8sUik9Pnsi'@;
put 'dXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3KSxLPVIoMjUyMCksST1SKDg2OTApLmNvcHlTeW5jLGs9Uig0NTQyKS5yZW1vdmVTeW5jLEU9UigxMzgxKS5ta2RpcnBTeW5jLGo9UigyNzMzKTtmdW5jdGlvbiBWKEIsWSxYKXt0cnl7ei5yZW5hbWVTeW5jKEIsWSl9Y2F0Y2goVSl7aWYoIkVYREVW'@;
put 'IiE9PVUuY29kZSl0aHJvdyBVO3JldHVybiBJKHE9QixZLHtvdmVyd3JpdGU6WCxlcnJvck9uRXhpc3Q6ITB9KSxrKHEpfXZhciBxfU0uZXhwb3J0cz1mdW5jdGlvbihCLFksWCl7Y29uc3QgVT0oWD1YfHx7fSkub3ZlcndyaXRlfHxYLmNsb2JiZXJ8fCExLHtzcmNTdGF0OnEsaXNDaGFuZ2lu'@;
put 'Z0Nhc2U6ZWU9ITF9PWouY2hlY2tQYXRoc1N5bmMoQixZLCJtb3ZlIixYKTtyZXR1cm4gai5jaGVja1BhcmVudFBhdGhzU3luYyhCLHEsWSwibW92ZSIpLGZ1bmN0aW9uKHRlKXtjb25zdCBvZT1LLmRpcm5hbWUodGUpO3JldHVybiBLLnBhcnNlKG9lKS5yb290PT09b2V9KFkpfHxFKEsuZGly'@;
put 'bmFtZShZKSksZnVuY3Rpb24odGUsb2Usc2UsaGUpe2lmKGhlKXJldHVybiBWKHRlLG9lLHNlKTtpZihzZSlyZXR1cm4gayhvZSksVih0ZSxvZSxzZSk7aWYoei5leGlzdHNTeW5jKG9lKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7cmV0dXJuIFYodGUsb2Usc2Up'@;
put 'fShCLFksVSxlZSl9fSw1MzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrO00uZXhwb3J0cz17bW92ZTp6KFIoNDM2KSl9fSw0MzY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzcpLEs9UigyNTIwKSxJPVIoNjQ2NCkuY29weSxr'@;
put 'PVIoNDU0MikucmVtb3ZlLEU9UigxMzgxKS5ta2RpcnAsaj1SKDkyNTcpLnBhdGhFeGlzdHMsVj1SKDI3MzMpO2Z1bmN0aW9uIEIoWCxVLHEsZWUsdGUpe3JldHVybiBlZT9ZKFgsVSxxLHRlKTpxP2soVSxvZT0+b2U/dGUob2UpOlkoWCxVLHEsdGUpKTp2b2lkIGooVSwob2Usc2UpPT5vZT90'@;
put 'ZShvZSk6c2U/dGUobmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhpc3RzLiIpKTpZKFgsVSxxLHRlKSl9ZnVuY3Rpb24gWShYLFUscSxlZSl7ei5yZW5hbWUoWCxVLHRlPT57cmV0dXJuIHRlPyJFWERFViIhPT10ZS5jb2RlP2VlKHRlKToodWU9ZWUsdm9pZCBJKG9lPVgsVSx7b3ZlcndyaXRl'@;
put 'OnEsZXJyb3JPbkV4aXN0OiEwfSxHPT5HP3VlKEcpOmsob2UsdWUpKSk6ZWUoKTt2YXIgb2UsdWV9KX1NLmV4cG9ydHM9ZnVuY3Rpb24oWCxVLHEsZWUpeyJmdW5jdGlvbiI9PXR5cGVvZiBxJiYoZWU9cSxxPXt9KTtjb25zdCB0ZT1xLm92ZXJ3cml0ZXx8cS5jbG9iYmVyfHwhMTtWLmNoZWNr'@;
put 'UGF0aHMoWCxVLCJtb3ZlIixxLChvZSxzZSk9PntpZihvZSlyZXR1cm4gZWUob2UpO2NvbnN0e3NyY1N0YXQ6aGUsaXNDaGFuZ2luZ0Nhc2U6dWU9ITF9PXNlO1YuY2hlY2tQYXJlbnRQYXRocyhYLGhlLFUsIm1vdmUiLGNlPT5jZT9lZShjZSk6ZnVuY3Rpb24oRyl7Y29uc3QgYj1LLmRpcm5h'@;
put 'bWUoRyk7cmV0dXJuIEsucGFyc2UoYikucm9vdD09PWJ9KFUpP0IoWCxVLHRlLHVlLGVlKTp2b2lkIEUoSy5kaXJuYW1lKFUpLEc9Pkc/ZWUoRyk6QihYLFUsdGUsdWUsZWUpKSl9KX19LDEzMTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9'@;
put 'Uig3NyksST1SKDI1MjApLGs9UigxMzgxKSxFPVIoOTI1NykucGF0aEV4aXN0cztNLmV4cG9ydHM9e291dHB1dEZpbGU6eihmdW5jdGlvbihqLFYsQixZKXsiZnVuY3Rpb24iPT10eXBlb2YgQiYmKFk9QixCPSJ1dGY4Iik7Y29uc3QgWD1JLmRpcm5hbWUoaik7RShYLChVLHEpPT5VP1koVSk6'@;
put 'cT9LLndyaXRlRmlsZShqLFYsQixZKTp2b2lkIGsubWtkaXJzKFgsZWU9PntpZihlZSlyZXR1cm4gWShlZSk7Sy53cml0ZUZpbGUoaixWLEIsWSl9KSl9KSxvdXRwdXRGaWxlU3luYzpmdW5jdGlvbihqLC4uLlYpe2NvbnN0IEI9SS5kaXJuYW1lKGopO2lmKEsuZXhpc3RzU3luYyhCKSlyZXR1'@;
put 'cm4gSy53cml0ZUZpbGVTeW5jKGosLi4uVik7ay5ta2RpcnNTeW5jKEIpLEsud3JpdGVGaWxlU3luYyhqLC4uLlYpfX19LDkyNTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbVByb21pc2UsSz1SKDc3NDkpO00uZXhwb3J0cz17cGF0aEV4aXN0czp6KGZ1bmN0'@;
put 'aW9uKEkpe3JldHVybiBLLmFjY2VzcyhJKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pLHBhdGhFeGlzdHNTeW5jOksuZXhpc3RzU3luY319LDQ1NDI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzcpLEs9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssST1SKDM0NTYpO00uZXhw'@;
put 'b3J0cz17cmVtb3ZlOksoZnVuY3Rpb24oayxFKXtpZih6LnJtKXJldHVybiB6LnJtKGsse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0sRSk7SShrLEUpfSkscmVtb3ZlU3luYzpmdW5jdGlvbihrKXtpZih6LnJtU3luYylyZXR1cm4gei5ybVN5bmMoayx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSk7'@;
put 'SS5zeW5jKGspfX19LDM0NTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2NvbnN0IEs9Uig3NyksST1SKDI1MjApLGs9Uig5MjgyKSxFPSJ3aW4zMiI9PT16LnBsYXRmb3JtO2Z1bmN0aW9uIGoodGUpe1sidW5saW5rIiwiY2htb2QiLCJzdGF0IiwibHN0YXQiLCJybWRp'@;
put 'ciIsInJlYWRkaXIiXS5mb3JFYWNoKG9lPT57dGVbb2VdPXRlW29lXXx8S1tvZV0sdGVbb2UrPSJTeW5jIl09dGVbb2VdfHxLW29lXX0pLHRlLm1heEJ1c3lUcmllcz10ZS5tYXhCdXN5VHJpZXN8fDN9ZnVuY3Rpb24gVih0ZSxvZSxzZSl7bGV0IGhlPTA7ImZ1bmN0aW9uIj09dHlwZW9mIG9l'@;
put 'JiYoc2U9b2Usb2U9e30pLGsodGUsInJpbXJhZjogbWlzc2luZyBwYXRoIiksay5zdHJpY3RFcXVhbCh0eXBlb2YgdGUsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxrLnN0cmljdEVxdWFsKHR5cGVvZiBzZSwiZnVuY3Rpb24iLCJyaW1yYWY6IGNhbGxiYWNr'@;
put 'IGZ1bmN0aW9uIHJlcXVpcmVkIiksayhvZSwicmltcmFmOiBpbnZhbGlkIG9wdGlvbnMgYXJndW1lbnQgcHJvdmlkZWQiKSxrLnN0cmljdEVxdWFsKHR5cGVvZiBvZSwib2JqZWN0IiwicmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QiKSxqKG9lKSxCKHRlLG9lLGZ1bmN0aW9uIHVl'@;
put 'KGNlKXtpZihjZSl7aWYoKCJFQlVTWSI9PT1jZS5jb2RlfHwiRU5PVEVNUFRZIj09PWNlLmNvZGV8fCJFUEVSTSI9PT1jZS5jb2RlKSYmaGU8b2UubWF4QnVzeVRyaWVzKXJldHVybiBoZSsrLHNldFRpbWVvdXQoKCk9PkIodGUsb2UsdWUpLDEwMCpoZSk7IkVOT0VOVCI9PT1jZS5jb2RlJiYo'@;
put 'Y2U9bnVsbCl9c2UoY2UpfSl9ZnVuY3Rpb24gQih0ZSxvZSxzZSl7ayh0ZSksayhvZSksaygiZnVuY3Rpb24iPT10eXBlb2Ygc2UpLG9lLmxzdGF0KHRlLChoZSx1ZSk9PmhlJiYiRU5PRU5UIj09PWhlLmNvZGU/c2UobnVsbCk6aGUmJiJFUEVSTSI9PT1oZS5jb2RlJiZFP1kodGUsb2UsaGUs'@;
put 'c2UpOnVlJiZ1ZS5pc0RpcmVjdG9yeSgpP1UodGUsb2UsaGUsc2UpOnZvaWQgb2UudW5saW5rKHRlLGNlPT57aWYoY2Upe2lmKCJFTk9FTlQiPT09Y2UuY29kZSlyZXR1cm4gc2UobnVsbCk7aWYoIkVQRVJNIj09PWNlLmNvZGUpcmV0dXJuIEU/WSh0ZSxvZSxjZSxzZSk6VSh0ZSxvZSxjZSxz'@;
put 'ZSk7aWYoIkVJU0RJUiI9PT1jZS5jb2RlKXJldHVybiBVKHRlLG9lLGNlLHNlKX1yZXR1cm4gc2UoY2UpfSkpfWZ1bmN0aW9uIFkodGUsb2Usc2UsaGUpe2sodGUpLGsob2UpLGsoImZ1bmN0aW9uIj09dHlwZW9mIGhlKSxvZS5jaG1vZCh0ZSw0MzgsdWU9Pnt1ZT9oZSgiRU5PRU5UIj09PXVl'@;
put 'LmNvZGU/bnVsbDpzZSk6b2Uuc3RhdCh0ZSwoY2UsRyk9PntjZT9oZSgiRU5PRU5UIj09PWNlLmNvZGU/bnVsbDpzZSk6Ry5pc0RpcmVjdG9yeSgpP1UodGUsb2Usc2UsaGUpOm9lLnVubGluayh0ZSxoZSl9KX0pfWZ1bmN0aW9uIFgodGUsb2Usc2Upe2xldCBoZTtrKHRlKSxrKG9lKTt0cnl7'@;
put 'b2UuY2htb2RTeW5jKHRlLDQzOCl9Y2F0Y2godWUpe2lmKCJFTk9FTlQiPT09dWUuY29kZSlyZXR1cm47dGhyb3cgc2V9dHJ5e2hlPW9lLnN0YXRTeW5jKHRlKX1jYXRjaCh1ZSl7aWYoIkVOT0VOVCI9PT11ZS5jb2RlKXJldHVybjt0aHJvdyBzZX1oZS5pc0RpcmVjdG9yeSgpP2VlKHRlLG9l'@;
put 'LHNlKTpvZS51bmxpbmtTeW5jKHRlKX1mdW5jdGlvbiBVKHRlLG9lLHNlLGhlKXtrKHRlKSxrKG9lKSxrKCJmdW5jdGlvbiI9PXR5cGVvZiBoZSksb2Uucm1kaXIodGUsdWU9Pnt2YXIgY2UsRyxiOyF1ZXx8IkVOT1RFTVBUWSIhPT11ZS5jb2RlJiYiRUVYSVNUIiE9PXVlLmNvZGUmJiJFUEVS'@;
put 'TSIhPT11ZS5jb2RlP2hlKHVlJiYiRU5PVERJUiI9PT11ZS5jb2RlP3NlOnVlKTooRz1vZSxiPWhlLGsoY2U9dGUpLGsoRyksaygiZnVuY3Rpb24iPT10eXBlb2YgYiksRy5yZWFkZGlyKGNlLChELEgpPT57aWYoRClyZXR1cm4gYihEKTtsZXQgTixnPUgubGVuZ3RoO2lmKDA9PT1nKXJldHVy'@;
put 'biBHLnJtZGlyKGNlLGIpO0guZm9yRWFjaChDPT57VihJLmpvaW4oY2UsQyksRyxTPT57aWYoIU4pcmV0dXJuIFM/YihOPVMpOnZvaWQoMD09LS1nJiZHLnJtZGlyKGNlLGIpKX0pfSl9KSl9KX1mdW5jdGlvbiBxKHRlLG9lKXtsZXQgc2U7aihvZT1vZXx8e30pLGsodGUsInJpbXJhZjogbWlz'@;
put 'c2luZyBwYXRoIiksay5zdHJpY3RFcXVhbCh0eXBlb2YgdGUsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxrKG9lLCJyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucyIpLGsuc3RyaWN0RXF1YWwodHlwZW9mIG9lLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hv'@;
put 'dWxkIGJlIG9iamVjdCIpO3RyeXtzZT1vZS5sc3RhdFN5bmModGUpfWNhdGNoKGhlKXtpZigiRU5PRU5UIj09PWhlLmNvZGUpcmV0dXJuOyJFUEVSTSI9PT1oZS5jb2RlJiZFJiZYKHRlLG9lLGhlKX10cnl7c2UmJnNlLmlzRGlyZWN0b3J5KCk/ZWUodGUsb2UsbnVsbCk6b2UudW5saW5rU3lu'@;
put 'Yyh0ZSl9Y2F0Y2goaGUpe2lmKCJFTk9FTlQiPT09aGUuY29kZSlyZXR1cm47aWYoIkVQRVJNIj09PWhlLmNvZGUpcmV0dXJuIEU/WCh0ZSxvZSxoZSk6ZWUodGUsb2UsaGUpO2lmKCJFSVNESVIiIT09aGUuY29kZSl0aHJvdyBoZTtlZSh0ZSxvZSxoZSl9fWZ1bmN0aW9uIGVlKHRlLG9lLHNl'@;
put 'KXtrKHRlKSxrKG9lKTt0cnl7b2Uucm1kaXJTeW5jKHRlKX1jYXRjaChoZSl7aWYoIkVOT1RESVIiPT09aGUuY29kZSl0aHJvdyBzZTtpZigiRU5PVEVNUFRZIj09PWhlLmNvZGV8fCJFRVhJU1QiPT09aGUuY29kZXx8IkVQRVJNIj09PWhlLmNvZGUpIWZ1bmN0aW9uKHVlLGNlKXtpZihrKHVl'@;
put 'KSxrKGNlKSxjZS5yZWFkZGlyU3luYyh1ZSkuZm9yRWFjaChHPT5xKEkuam9pbih1ZSxHKSxjZSkpLCFFKXJldHVybiBjZS5ybWRpclN5bmModWUsY2UpO3tjb25zdCBHPURhdGUubm93KCk7ZG97dHJ5e3JldHVybiBjZS5ybWRpclN5bmModWUsY2UpfWNhdGNoe319d2hpbGUoRGF0ZS5ub3co'@;
put 'KS1HPDUwMCl9fSh0ZSxvZSk7ZWxzZSBpZigiRU5PRU5UIiE9PWhlLmNvZGUpdGhyb3cgaGV9fU0uZXhwb3J0cz1WLFYuc3luYz1xfSwyNzMzOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3NDkpLEs9UigyNTIwKSxJPVIoOTUzOSk7ZnVuY3Rpb24gayhCLFksWCl7Y29uc3Qg'@;
put 'VT1YLmRlcmVmZXJlbmNlP3E9Pnouc3RhdChxLHtiaWdpbnQ6ITB9KTpxPT56LmxzdGF0KHEse2JpZ2ludDohMH0pO3JldHVybiBQcm9taXNlLmFsbChbVShCKSxVKFkpLmNhdGNoKHE9PntpZigiRU5PRU5UIj09PXEuY29kZSlyZXR1cm4gbnVsbDt0aHJvdyBxfSldKS50aGVuKChbcSxlZV0p'@;
put 'PT4oe3NyY1N0YXQ6cSxkZXN0U3RhdDplZX0pKX1mdW5jdGlvbiBFKEIsWSl7cmV0dXJuIFkuaW5vJiZZLmRldiYmWS5pbm89PT1CLmlubyYmWS5kZXY9PT1CLmRldn1mdW5jdGlvbiBqKEIsWSl7Y29uc3QgWD1LLnJlc29sdmUoQikuc3BsaXQoSy5zZXApLmZpbHRlcihxPT5xKSxVPUsucmVz'@;
put 'b2x2ZShZKS5zcGxpdChLLnNlcCkuZmlsdGVyKHE9PnEpO3JldHVybiBYLnJlZHVjZSgocSxlZSx0ZSk9PnEmJlVbdGVdPT09ZWUsITApfWZ1bmN0aW9uIFYoQixZLFgpe3JldHVybmBDYW5ub3QgJHtYfSAnJHtCfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtZfScuYH1NLmV4'@;
put 'cG9ydHM9e2NoZWNrUGF0aHM6ZnVuY3Rpb24oQixZLFgsVSxxKXtJLmNhbGxiYWNraWZ5KGspKEIsWSxVLChlZSx0ZSk9PntpZihlZSlyZXR1cm4gcShlZSk7Y29uc3R7c3JjU3RhdDpvZSxkZXN0U3RhdDpzZX09dGU7aWYoc2Upe2lmKEUob2Usc2UpKXtjb25zdCBoZT1LLmJhc2VuYW1lKEIp'@;
put 'LHVlPUsuYmFzZW5hbWUoWSk7cmV0dXJuIm1vdmUiPT09WCYmaGUhPT11ZSYmaGUudG9Mb3dlckNhc2UoKT09PXVlLnRvTG93ZXJDYXNlKCk/cShudWxsLHtzcmNTdGF0Om9lLGRlc3RTdGF0OnNlLGlzQ2hhbmdpbmdDYXNlOiEwfSk6cShuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRp'@;
put 'b24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIikpfWlmKG9lLmlzRGlyZWN0b3J5KCkmJiFzZS5pc0RpcmVjdG9yeSgpKXJldHVybiBxKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke1l9JyB3aXRoIGRpcmVjdG9yeSAnJHtCfScuYCkpO2lmKCFvZS5pc0RpcmVj'@;
put 'dG9yeSgpJiZzZS5pc0RpcmVjdG9yeSgpKXJldHVybiBxKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7WX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtCfScuYCkpfXJldHVybiBvZS5pc0RpcmVjdG9yeSgpJiZqKEIsWSk/cShuZXcgRXJyb3IoVihCLFksWCkpKTpx'@;
put 'KG51bGwse3NyY1N0YXQ6b2UsZGVzdFN0YXQ6c2V9KX0pfSxjaGVja1BhdGhzU3luYzpmdW5jdGlvbihCLFksWCxVKXtjb25zdHtzcmNTdGF0OnEsZGVzdFN0YXQ6ZWV9PWZ1bmN0aW9uKHRlLG9lLHNlKXtsZXQgaGU7Y29uc3QgdWU9c2UuZGVyZWZlcmVuY2U/Rz0+ei5zdGF0U3luYyhHLHti'@;
put 'aWdpbnQ6ITB9KTpHPT56LmxzdGF0U3luYyhHLHtiaWdpbnQ6ITB9KSxjZT11ZSh0ZSk7dHJ5e2hlPXVlKG9lKX1jYXRjaChHKXtpZigiRU5PRU5UIj09PUcuY29kZSlyZXR1cm57c3JjU3RhdDpjZSxkZXN0U3RhdDpudWxsfTt0aHJvdyBHfXJldHVybntzcmNTdGF0OmNlLGRlc3RTdGF0Omhl'@;
put 'fX0oQixZLFUpO2lmKGVlKXtpZihFKHEsZWUpKXtjb25zdCB0ZT1LLmJhc2VuYW1lKEIpLG9lPUsuYmFzZW5hbWUoWSk7aWYoIm1vdmUiPT09WCYmdGUhPT1vZSYmdGUudG9Mb3dlckNhc2UoKT09PW9lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6cSxkZXN0U3RhdDplZSxpc0NoYW5n'@;
put 'aW5nQ2FzZTohMH07dGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpfWlmKHEuaXNEaXJlY3RvcnkoKSYmIWVlLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7'@;
put 'WX0nIHdpdGggZGlyZWN0b3J5ICcke0J9Jy5gKTtpZighcS5pc0RpcmVjdG9yeSgpJiZlZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7WX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtCfScuYCl9aWYocS5pc0RpcmVjdG9yeSgp'@;
put 'JiZqKEIsWSkpdGhyb3cgbmV3IEVycm9yKFYoQixZLFgpKTtyZXR1cm57c3JjU3RhdDpxLGRlc3RTdGF0OmVlfX0sY2hlY2tQYXJlbnRQYXRoczpmdW5jdGlvbiBCKFksWCxVLHEsZWUpe2NvbnN0IHRlPUsucmVzb2x2ZShLLmRpcm5hbWUoWSkpLG9lPUsucmVzb2x2ZShLLmRpcm5hbWUoVSkp'@;
put 'O2lmKG9lPT09dGV8fG9lPT09Sy5wYXJzZShvZSkucm9vdClyZXR1cm4gZWUoKTt6LnN0YXQob2Use2JpZ2ludDohMH0sKHNlLGhlKT0+c2U/IkVOT0VOVCI9PT1zZS5jb2RlP2VlKCk6ZWUoc2UpOkUoWCxoZSk/ZWUobmV3IEVycm9yKFYoWSxVLHEpKSk6QihZLFgsb2UscSxlZSkpfSxjaGVj'@;
put 'a1BhcmVudFBhdGhzU3luYzpmdW5jdGlvbiBCKFksWCxVLHEpe2NvbnN0IGVlPUsucmVzb2x2ZShLLmRpcm5hbWUoWSkpLHRlPUsucmVzb2x2ZShLLmRpcm5hbWUoVSkpO2lmKHRlPT09ZWV8fHRlPT09Sy5wYXJzZSh0ZSkucm9vdClyZXR1cm47bGV0IG9lO3RyeXtvZT16LnN0YXRTeW5jKHRl'@;
put 'LHtiaWdpbnQ6ITB9KX1jYXRjaChzZSl7aWYoIkVOT0VOVCI9PT1zZS5jb2RlKXJldHVybjt0aHJvdyBzZX1pZihFKFgsb2UpKXRocm93IG5ldyBFcnJvcihWKFksVSxxKSk7cmV0dXJuIEIoWSxYLHRlLHEpfSxpc1NyY1N1YmRpcjpqLGFyZUlkZW50aWNhbDpFfX0sMzE4OihNLE8sUik9Pnsi'@;
put 'dXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3KTtNLmV4cG9ydHM9e3V0aW1lc01pbGxpczpmdW5jdGlvbihLLEksayxFKXt6Lm9wZW4oSywicisiLChqLFYpPT57aWYoailyZXR1cm4gRShqKTt6LmZ1dGltZXMoVixJLGssQj0+e3ouY2xvc2UoVixZPT57RSYmRShCfHxZKX0pfSl9KX0sdXRpbWVz'@;
put 'TWlsbGlzU3luYzpmdW5jdGlvbihLLEksayl7Y29uc3QgRT16Lm9wZW5TeW5jKEssInIrIik7cmV0dXJuIHouZnV0aW1lc1N5bmMoRSxJLGspLHouY2xvc2VTeW5jKEUpfX19LDczMzQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSk7TS5leHBvcnRzPVksWS5yZWFscGF0aD1ZLFkuc3luYz1YLFku'@;
put 'cmVhbHBhdGhTeW5jPVgsWS5tb25rZXlwYXRjaD1mdW5jdGlvbigpe0sucmVhbHBhdGg9WSxLLnJlYWxwYXRoU3luYz1YfSxZLnVubW9ua2V5cGF0Y2g9ZnVuY3Rpb24oKXtLLnJlYWxwYXRoPUksSy5yZWFscGF0aFN5bmM9a307dmFyIEs9UigyNTM1KSxJPUsucmVhbHBhdGgsaz1LLnJlYWxw'@;
put 'YXRoU3luYyxqPS9edlswLTVdXC4vLnRlc3Qoei52ZXJzaW9uKSxWPVIoNzA1OSk7ZnVuY3Rpb24gQihVKXtyZXR1cm4gVSYmInJlYWxwYXRoIj09PVUuc3lzY2FsbCYmKCJFTE9PUCI9PT1VLmNvZGV8fCJFTk9NRU0iPT09VS5jb2RlfHwiRU5BTUVUT09MT05HIj09PVUuY29kZSl9ZnVuY3Rp'@;
put 'b24gWShVLHEsZWUpe2lmKGopcmV0dXJuIEkoVSxxLGVlKTsiZnVuY3Rpb24iPT10eXBlb2YgcSYmKGVlPXEscT1udWxsKSxJKFUscSxmdW5jdGlvbih0ZSxvZSl7Qih0ZSk/Vi5yZWFscGF0aChVLHEsZWUpOmVlKHRlLG9lKX0pfWZ1bmN0aW9uIFgoVSxxKXtpZihqKXJldHVybiBrKFUscSk7'@;
put 'dHJ5e3JldHVybiBrKFUscSl9Y2F0Y2goZWUpe2lmKEIoZWUpKXJldHVybiBWLnJlYWxwYXRoU3luYyhVLHEpO3Rocm93IGVlfX19LDcwNTk6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9UigyNTIwKSxrPSJ3aW4zMiI9PT16LnBsYXRmb3JtLEU9UigyNTM1KSxqPXouZW52'@;
put 'Lk5PREVfREVCVUcmJi9mcy8udGVzdCh6LmVudi5OT0RFX0RFQlVHKTtpZihrKXZhciBCPS8oLio/KSg/OltcL1xcXSt8JCkvZztlbHNlIEI9LyguKj8pKD86W1wvXSt8JCkvZztpZihrKXZhciBZPS9eKD86W2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dW15cXFwvXSspP1tcXFwv'@;
put 'XSovO2Vsc2UgWT0vXltcL10qLztPLnJlYWxwYXRoU3luYz1mdW5jdGlvbihYLFUpe2lmKFg9SS5yZXNvbHZlKFgpLFUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLFgpKXJldHVybiBVW1hdO3ZhciBxLGVlLHRlLG9lLHNlPVgsaGU9e30sdWU9e307ZnVuY3Rpb24g'@;
put 'Y2UoKXt2YXIgZz1ZLmV4ZWMoWCk7cT1nWzBdLmxlbmd0aCxlZT1nWzBdLHRlPWdbMF0sb2U9IiIsayYmIXVlW3RlXSYmKEUubHN0YXRTeW5jKHRlKSx1ZVt0ZV09ITApfWZvcihjZSgpO3E8WC5sZW5ndGg7KXtCLmxhc3RJbmRleD1xO3ZhciBHPUIuZXhlYyhYKTtpZihvZT1lZSxlZSs9R1sw'@;
put 'XSxxPUIubGFzdEluZGV4LCEodWVbdGU9b2UrR1sxXV18fFUmJlVbdGVdPT09dGUpKXt2YXIgYjtpZihVJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSx0ZSkpYj1VW3RlXTtlbHNle3ZhciBEPUUubHN0YXRTeW5jKHRlKTtpZighRC5pc1N5bWJvbGljTGluaygpKXt1'@;
put 'ZVt0ZV09ITAsVSYmKFVbdGVdPXRlKTtjb250aW51ZX12YXIgSD1udWxsO2lmKCFrKXt2YXIgTj1ELmRldi50b1N0cmluZygzMikrIjoiK0QuaW5vLnRvU3RyaW5nKDMyKTtoZS5oYXNPd25Qcm9wZXJ0eShOKSYmKEg9aGVbTl0pfW51bGw9PT1IJiYoRS5zdGF0U3luYyh0ZSksSD1FLnJlYWRs'@;
put 'aW5rU3luYyh0ZSkpLGI9SS5yZXNvbHZlKG9lLEgpLFUmJihVW3RlXT1iKSxrfHwoaGVbTl09SCl9WD1JLnJlc29sdmUoYixYLnNsaWNlKHEpKSxjZSgpfX1yZXR1cm4gVSYmKFVbc2VdPVgpLFh9LE8ucmVhbHBhdGg9ZnVuY3Rpb24oWCxVLHEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBxJiYo'@;
put 'cT1mdW5jdGlvbiBWKFgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBYP1g6ZnVuY3Rpb24oKXt2YXIgVTtpZihqKXt2YXIgcT1uZXcgRXJyb3I7VT1mdW5jdGlvbih0ZSl7dGUmJihxLm1lc3NhZ2U9dGUubWVzc2FnZSxlZSh0ZT1xKSl9fWVsc2UgVT1lZTtyZXR1cm4gVTtmdW5jdGlvbiBl'@;
put 'ZSh0ZSl7aWYodGUpe2lmKHoudGhyb3dEZXByZWNhdGlvbil0aHJvdyB0ZTtpZighei5ub0RlcHJlY2F0aW9uKXt2YXIgb2U9ImZzOiBtaXNzaW5nIGNhbGxiYWNrICIrKHRlLnN0YWNrfHx0ZS5tZXNzYWdlKTt6LnRyYWNlRGVwcmVjYXRpb24/Sy50cmFjZShvZSk6Sy5lcnJvcihvZSl9fX19'@;
put 'KCl9KFUpLFU9bnVsbCksWD1JLnJlc29sdmUoWCksVSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsWCkpcmV0dXJuIHoubmV4dFRpY2socS5iaW5kKG51bGwsbnVsbCxVW1hdKSk7dmFyIGVlLHRlLG9lLHNlLGhlPVgsdWU9e30sY2U9e307ZnVuY3Rpb24gRygpe3Zh'@;
put 'ciBnPVkuZXhlYyhYKTtlZT1nWzBdLmxlbmd0aCx0ZT1nWzBdLG9lPWdbMF0sc2U9IiIsayYmIWNlW29lXT9FLmxzdGF0KG9lLGZ1bmN0aW9uKEMpe2lmKEMpcmV0dXJuIHEoQyk7Y2Vbb2VdPSEwLGIoKX0pOnoubmV4dFRpY2soYil9ZnVuY3Rpb24gYigpe2lmKGVlPj1YLmxlbmd0aClyZXR1'@;
put 'cm4gVSYmKFVbaGVdPVgpLHEobnVsbCxYKTtCLmxhc3RJbmRleD1lZTt2YXIgZz1CLmV4ZWMoWCk7cmV0dXJuIHNlPXRlLHRlKz1nWzBdLGVlPUIubGFzdEluZGV4LGNlW29lPXNlK2dbMV1dfHxVJiZVW29lXT09PW9lP3oubmV4dFRpY2soYik6VSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q'@;
put 'cm9wZXJ0eS5jYWxsKFUsb2UpP04oVVtvZV0pOkUubHN0YXQob2UsRCl9ZnVuY3Rpb24gRChnLEMpe2lmKGcpcmV0dXJuIHEoZyk7aWYoIUMuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gY2Vbb2VdPSEwLFUmJihVW29lXT1vZSksei5uZXh0VGljayhiKTtpZighayl7dmFyIFM9Qy5kZXYudG9T'@;
put 'dHJpbmcoMzIpKyI6IitDLmluby50b1N0cmluZygzMik7aWYodWUuaGFzT3duUHJvcGVydHkoUykpcmV0dXJuIEgobnVsbCx1ZVtTXSxvZSl9RS5zdGF0KG9lLGZ1bmN0aW9uKHYpe2lmKHYpcmV0dXJuIHEodik7RS5yZWFkbGluayhvZSxmdW5jdGlvbihwLHcpe2t8fCh1ZVtTXT13KSxIKHAs'@;
put 'dyl9KX0pfWZ1bmN0aW9uIEgoZyxDLFMpe2lmKGcpcmV0dXJuIHEoZyk7dmFyIHY9SS5yZXNvbHZlKHNlLEMpO1UmJihVW1NdPXYpLE4odil9ZnVuY3Rpb24gTihnKXtYPUkucmVzb2x2ZShnLFguc2xpY2UoZWUpKSxHKCl9RygpfX0sNzY0ODpNPT57InVzZSBzdHJpY3QiO3ZhciBPPUFycmF5'@;
put 'LnByb3RvdHlwZS5zbGljZSxSPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7TS5leHBvcnRzPWZ1bmN0aW9uKHope3ZhciBLPXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEt8fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1SLmNhbGwoSykpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24u'@;
put 'cHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiK0spO2Zvcih2YXIgSSxrPU8uY2FsbChhcmd1bWVudHMsMSksRT1NYXRoLm1heCgwLEsubGVuZ3RoLWsubGVuZ3RoKSxqPVtdLFY9MDtWPEU7VisrKWoucHVzaCgiJCIrVik7aWYoST1GdW5jdGlvbigiYmluZGVyIiwicmV0'@;
put 'dXJuIGZ1bmN0aW9uICgiK2ouam9pbigiLCIpKyIpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfSIpKGZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIEkpe3ZhciBZPUsuYXBwbHkodGhpcyxrLmNvbmNhdChPLmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBPYmpl'@;
put 'Y3QoWSk9PT1ZP1k6dGhpc31yZXR1cm4gSy5hcHBseSh6LGsuY29uY2F0KE8uY2FsbChhcmd1bWVudHMpKSl9KSxLLnByb3RvdHlwZSl7dmFyIEI9ZnVuY3Rpb24oKXt9O0IucHJvdG90eXBlPUsucHJvdG90eXBlLEkucHJvdG90eXBlPW5ldyBCLEIucHJvdG90eXBlPW51bGx9cmV0dXJuIEl9'@;
put 'fSw4NjEyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig3NjQ4KTtNLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fHp9LDIxMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9U3ludGF4RXJyb3IsST1GdW5jdGlvbixrPVR5cGVFcnJvcixFPWZ1bmN0aW9uKFMp'@;
put 'e3RyeXtyZXR1cm4gSSgnInVzZSBzdHJpY3QiOyByZXR1cm4gKCcrUysiKS5jb25zdHJ1Y3RvcjsiKSgpfWNhdGNoe319LGo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtpZihqKXRyeXtqKHt9LCIiKX1jYXRjaHtqPW51bGx9dmFyIFY9ZnVuY3Rpb24oKXt0aHJvdyBuZXcga30s'@;
put 'Qj1qP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiBWfWNhdGNoe3RyeXtyZXR1cm4gaihhcmd1bWVudHMsImNhbGxlZSIpLmdldH1jYXRjaHtyZXR1cm4gVn19fSgpOlYsWT1SKDE0MDUpKCksWD1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKFMpe3JldHVybiBTLl9fcHJvdG9fX30sVT17'@;
put 'fSxxPXR5cGVvZiBVaW50OEFycmF5PiJ1Ij96OlgoVWludDhBcnJheSksZWU9eyIlQWdncmVnYXRlRXJyb3IlIjp0eXBlb2YgQWdncmVnYXRlRXJyb3I+InUiP3o6QWdncmVnYXRlRXJyb3IsIiVBcnJheSUiOkFycmF5LCIlQXJyYXlCdWZmZXIlIjp0eXBlb2YgQXJyYXlCdWZmZXI+InUiP3o6'@;
put 'QXJyYXlCdWZmZXIsIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSI6WT9YKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk6eiwiJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUiOnosIiVBc3luY0Z1bmN0aW9uJSI6VSwiJUFzeW5jR2VuZXJhdG9yJSI6VSwiJUFzeW5jR2VuZXJhdG9yRnVu'@;
put 'Y3Rpb24lIjpVLCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiOlUsIiVBdG9taWNzJSI6dHlwZW9mIEF0b21pY3M+InUiP3o6QXRvbWljcywiJUJpZ0ludCUiOnR5cGVvZiBCaWdJbnQ+InUiP3o6QmlnSW50LCIlQmlnSW50NjRBcnJheSUiOnR5cGVvZiBCaWdJbnQ2NEFycmF5PiJ1Ij96OkJp'@;
put 'Z0ludDY0QXJyYXksIiVCaWdVaW50NjRBcnJheSUiOnR5cGVvZiBCaWdVaW50NjRBcnJheT4idSI/ejpCaWdVaW50NjRBcnJheSwiJUJvb2xlYW4lIjpCb29sZWFuLCIlRGF0YVZpZXclIjp0eXBlb2YgRGF0YVZpZXc+InUiP3o6RGF0YVZpZXcsIiVEYXRlJSI6RGF0ZSwiJWRlY29kZVVSSSUi'@;
put 'OmRlY29kZVVSSSwiJWRlY29kZVVSSUNvbXBvbmVudCUiOmRlY29kZVVSSUNvbXBvbmVudCwiJWVuY29kZVVSSSUiOmVuY29kZVVSSSwiJWVuY29kZVVSSUNvbXBvbmVudCUiOmVuY29kZVVSSUNvbXBvbmVudCwiJUVycm9yJSI6RXJyb3IsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOkV2'@;
put 'YWxFcnJvciwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP3o6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/ejpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25S'@;
put 'ZWdpc3RyeT4idSI/ejpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6SSwiJUdlbmVyYXRvckZ1bmN0aW9uJSI6VSwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+InUiP3o6SW50OEFycmF5LCIlSW50MTZBcnJheSUiOnR5cGVvZiBJbnQxNkFycmF5PiJ1Ij96OkludDE2'@;
put 'QXJyYXksIiVJbnQzMkFycmF5JSI6dHlwZW9mIEludDMyQXJyYXk+InUiP3o6SW50MzJBcnJheSwiJWlzRmluaXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQcm90b3R5cGUlIjpZP1goWChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKTp6LCIlSlNPTiUiOiJvYmplY3Qi'@;
put 'PT10eXBlb2YgSlNPTj9KU09OOnosIiVNYXAlIjp0eXBlb2YgTWFwPiJ1Ij96Ok1hcCwiJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIE1hcDwidSImJlk/WCgobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKTp6LCIlTWF0aCUiOk1hdGgsIiVOdW1iZXIlIjpOdW1iZXIsIiVPYmpl'@;
put 'Y3QlIjpPYmplY3QsIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6dHlwZW9mIFByb21pc2U+InUiP3o6UHJvbWlzZSwiJVByb3h5JSI6dHlwZW9mIFByb3h5PiJ1Ij96OlByb3h5LCIlUmFuZ2VFcnJvciUiOlJhbmdlRXJyb3IsIiVS'@;
put 'ZWZlcmVuY2VFcnJvciUiOlJlZmVyZW5jZUVycm9yLCIlUmVmbGVjdCUiOnR5cGVvZiBSZWZsZWN0PiJ1Ij96OlJlZmxlY3QsIiVSZWdFeHAlIjpSZWdFeHAsIiVTZXQlIjp0eXBlb2YgU2V0PiJ1Ij96OlNldCwiJVNldEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIFNldDwidSImJlk/WCgo'@;
put 'bmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKTp6LCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP3o6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOlk/WCgiIltTeW1ib2wuaXRl'@;
put 'cmF0b3JdKCkpOnosIiVTeW1ib2wlIjpZP1N5bWJvbDp6LCIlU3ludGF4RXJyb3IlIjpLLCIlVGhyb3dUeXBlRXJyb3IlIjpCLCIlVHlwZWRBcnJheSUiOnEsIiVUeXBlRXJyb3IlIjprLCIlVWludDhBcnJheSUiOnR5cGVvZiBVaW50OEFycmF5PiJ1Ij96OlVpbnQ4QXJyYXksIiVVaW50OENs'@;
put 'YW1wZWRBcnJheSUiOnR5cGVvZiBVaW50OENsYW1wZWRBcnJheT4idSI/ejpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5JSI6dHlwZW9mIFVpbnQxNkFycmF5PiJ1Ij96OlVpbnQxNkFycmF5LCIlVWludDMyQXJyYXklIjp0eXBlb2YgVWludDMyQXJyYXk+InUiP3o6VWludDMyQXJy'@;
put 'YXksIiVVUklFcnJvciUiOlVSSUVycm9yLCIlV2Vha01hcCUiOnR5cGVvZiBXZWFrTWFwPiJ1Ij96OldlYWtNYXAsIiVXZWFrUmVmJSI6dHlwZW9mIFdlYWtSZWY+InUiP3o6V2Vha1JlZiwiJVdlYWtTZXQlIjp0eXBlb2YgV2Vha1NldD4idSI/ejpXZWFrU2V0fTt0cnl7bnVsbC5lcnJvcn1j'@;
put 'YXRjaChTKXt2YXIgdGU9WChYKFMpKTtlZVsiJUVycm9yLnByb3RvdHlwZSUiXT10ZX12YXIgb2U9ZnVuY3Rpb24gUyh2KXt2YXIgcDtpZigiJUFzeW5jRnVuY3Rpb24lIj09PXYpcD1FKCJhc3luYyBmdW5jdGlvbiAoKSB7fSIpO2Vsc2UgaWYoIiVHZW5lcmF0b3JGdW5jdGlvbiUiPT09dilw'@;
put 'PUUoImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT12KXA9RSgiYXN5bmMgZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yJSI9PT12KXt2YXIgdz1TKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiKTt3JiYocD13'@;
put 'LnByb3RvdHlwZSl9ZWxzZSBpZigiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIj09PXYpe3ZhciBKPVMoIiVBc3luY0dlbmVyYXRvciUiKTtKJiYocD1YKEoucHJvdG90eXBlKSl9cmV0dXJuIGVlW3ZdPXAscH0sc2U9eyIlQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIkFycmF5QnVmZmVyIiwi'@;
put 'cHJvdG90eXBlIl0sIiVBcnJheVByb3RvdHlwZSUiOlsiQXJyYXkiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG9fZW50cmllcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJlbnRyaWVzIl0sIiVBcnJheVByb3RvX2ZvckVhY2glIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZm9yRWFjaCJdLCIl'@;
put 'QXJyYXlQcm90b19rZXlzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImtleXMiXSwiJUFycmF5UHJvdG9fdmFsdWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsInZhbHVlcyJdLCIlQXN5bmNGdW5jdGlvblByb3RvdHlwZSUiOlsiQXN5bmNGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNH'@;
put 'ZW5lcmF0b3IlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVCb29sZWFuUHJvdG90eXBlJSI6WyJCb29sZWFuIiwicHJv'@;
put 'dG90eXBlIl0sIiVEYXRhVmlld1Byb3RvdHlwZSUiOlsiRGF0YVZpZXciLCJwcm90b3R5cGUiXSwiJURhdGVQcm90b3R5cGUlIjpbIkRhdGUiLCJwcm90b3R5cGUiXSwiJUVycm9yUHJvdG90eXBlJSI6WyJFcnJvciIsInByb3RvdHlwZSJdLCIlRXZhbEVycm9yUHJvdG90eXBlJSI6WyJFdmFs'@;
put 'RXJyb3IiLCJwcm90b3R5cGUiXSwiJUZsb2F0MzJBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVGbG9hdDY0QXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0NjRBcnJheSIsInByb3RvdHlwZSJdLCIlRnVuY3Rpb25Qcm90b3R5cGUlIjpbIkZ1bmN0aW9uIiwi'@;
put 'cHJvdG90eXBlIl0sIiVHZW5lcmF0b3IlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVJbnQ4QXJyYXlQcm90b3R5cGUlIjpbIkludDhBcnJheSIs'@;
put 'InByb3RvdHlwZSJdLCIlSW50MTZBcnJheVByb3RvdHlwZSUiOlsiSW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MzJBcnJheVByb3RvdHlwZSUiOlsiSW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlSlNPTlBhcnNlJSI6WyJKU09OIiwicGFyc2UiXSwiJUpTT05TdHJpbmdpZnklIjpb'@;
put 'IkpTT04iLCJzdHJpbmdpZnkiXSwiJU1hcFByb3RvdHlwZSUiOlsiTWFwIiwicHJvdG90eXBlIl0sIiVOdW1iZXJQcm90b3R5cGUlIjpbIk51bWJlciIsInByb3RvdHlwZSJdLCIlT2JqZWN0UHJvdG90eXBlJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiXSwiJU9ialByb3RvX3RvU3RyaW5nJSI6'@;
put 'WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyJdLCIlT2JqUHJvdG9fdmFsdWVPZiUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidmFsdWVPZiJdLCIlUHJvbWlzZVByb3RvdHlwZSUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSJdLCIlUHJvbWlzZVByb3RvX3RoZW4lIjpbIlByb21pc2Ui'@;
put 'LCJwcm90b3R5cGUiLCJ0aGVuIl0sIiVQcm9taXNlX2FsbCUiOlsiUHJvbWlzZSIsImFsbCJdLCIlUHJvbWlzZV9yZWplY3QlIjpbIlByb21pc2UiLCJyZWplY3QiXSwiJVByb21pc2VfcmVzb2x2ZSUiOlsiUHJvbWlzZSIsInJlc29sdmUiXSwiJVJhbmdlRXJyb3JQcm90b3R5cGUlIjpbIlJh'@;
put 'bmdlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSI6WyJSZWZlcmVuY2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVnRXhwUHJvdG90eXBlJSI6WyJSZWdFeHAiLCJwcm90b3R5cGUiXSwiJVNldFByb3RvdHlwZSUiOlsiU2V0IiwicHJvdG90eXBlIl0sIiVT'@;
put 'aGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiU2hhcmVkQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJVN0cmluZ1Byb3RvdHlwZSUiOlsiU3RyaW5nIiwicHJvdG90eXBlIl0sIiVTeW1ib2xQcm90b3R5cGUlIjpbIlN5bWJvbCIsInByb3RvdHlwZSJdLCIlU3ludGF4RXJyb3JQcm90'@;
put 'b3R5cGUlIjpbIlN5bnRheEVycm9yIiwicHJvdG90eXBlIl0sIiVUeXBlZEFycmF5UHJvdG90eXBlJSI6WyJUeXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVUeXBlRXJyb3JQcm90b3R5cGUlIjpbIlR5cGVFcnJvciIsInByb3RvdHlwZSJdLCIlVWludDhBcnJheVByb3RvdHlwZSUiOlsiVWlu'@;
put 'dDhBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4Q2xhbXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MTZBcnJheVByb3RvdHlwZSUiOlsiVWludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQzMkFycmF5UHJvdG90eXBlJSI6'@;
put 'WyJVaW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlVVJJRXJyb3JQcm90b3R5cGUlIjpbIlVSSUVycm9yIiwicHJvdG90eXBlIl0sIiVXZWFrTWFwUHJvdG90eXBlJSI6WyJXZWFrTWFwIiwicHJvdG90eXBlIl0sIiVXZWFrU2V0UHJvdG90eXBlJSI6WyJXZWFrU2V0IiwicHJvdG90eXBlIl19'@;
put 'LGhlPVIoODYxMiksdWU9Uig3NjQyKSxjZT1oZS5jYWxsKEZ1bmN0aW9uLmNhbGwsQXJyYXkucHJvdG90eXBlLmNvbmNhdCksRz1oZS5jYWxsKEZ1bmN0aW9uLmFwcGx5LEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLGI9aGUuY2FsbChGdW5jdGlvbi5jYWxsLFN0cmluZy5wcm90b3R5cGUucmVw'@;
put 'bGFjZSksRD1oZS5jYWxsKEZ1bmN0aW9uLmNhbGwsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksSD1oZS5jYWxsKEZ1bmN0aW9uLmNhbGwsUmVnRXhwLnByb3RvdHlwZS5leGVjKSxOPS9bXiUuW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/'@;
put 'KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2csZz0vXFwoXFwpPy9nLEM9ZnVuY3Rpb24oUyx2KXt2YXIgcCx3PVM7aWYodWUoc2UsdykmJih3PSIlIisocD1zZVt3XSlbMF0rIiUiKSx1ZShlZSx3KSl7dmFyIEo9ZWVbd107aWYoSj09PVUmJihKPW9lKHcpKSx2b2lkIDA9'@;
put 'PT1KJiYhdil0aHJvdyBuZXcgaygiaW50cmluc2ljICIrUysiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhczpwLG5hbWU6dyx2YWx1ZTpKfX10aHJvdyBuZXcgSygiaW50cmluc2ljICIrUysiIGRvZXMgbm90IGV4aXN0'@;
put 'ISIpfTtNLmV4cG9ydHM9ZnVuY3Rpb24oUyx2KXtpZigic3RyaW5nIiE9dHlwZW9mIFN8fDA9PT1TLmxlbmd0aCl0aHJvdyBuZXcgaygiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEmJiJib29sZWFuIiE9dHlwZW9mIHYp'@;
put 'dGhyb3cgbmV3IGsoJyJhbGxvd01pc3NpbmciIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7aWYobnVsbD09PUgoL14lP1teJV0qJT8kLyxTKSl0aHJvdyBuZXcgSygiYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRo'@;
put 'ZSBpbnRyaW5zaWMgbmFtZSIpO3ZhciBwPWZ1bmN0aW9uKFllKXt2YXIgSmU9RChZZSwwLDEpLGx0PUQoWWUsLTEpO2lmKCIlIj09PUplJiYiJSIhPT1sdCl0aHJvdyBuZXcgSygiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCIpO2lmKCIlIj09PWx0JiYi'@;
put 'JSIhPT1KZSl0aHJvdyBuZXcgSygiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCIpO3ZhciBQZT1bXTtyZXR1cm4gYihZZSxOLGZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtQZVtQZS5sZW5ndGhdPVRlP2IocWUsZywiJDEiKTpBZXx8YmV9KSxQZX0oUyksdz1w'@;
put 'Lmxlbmd0aD4wP3BbMF06IiIsSj1DKCIlIit3KyIlIix2KSxuZT1KLm5hbWUsZGU9Si52YWx1ZSxmZT0hMSx4ZT1KLmFsaWFzO3hlJiYodz14ZVswXSxHKHAsY2UoWzAsMV0seGUpKSk7Zm9yKHZhciBMZT0xLEZlPSEwO0xlPHAubGVuZ3RoO0xlKz0xKXt2YXIgT2U9cFtMZV0samU9RChPZSww'@;
put 'LDEpLFdlPUQoT2UsLTEpO2lmKCgnIic9PT1qZXx8IiciPT09amV8fCJgIj09PWplfHwnIic9PT1XZXx8IiciPT09V2V8fCJgIj09PVdlKSYmamUhPT1XZSl0aHJvdyBuZXcgSygicHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcyIpO2lmKCJjb25z'@;
put 'dHJ1Y3RvciIhPT1PZSYmRmV8fChmZT0hMCksdWUoZWUsbmU9IiUiKyh3Kz0iLiIrT2UpKyIlIikpZGU9ZWVbbmVdO2Vsc2UgaWYobnVsbCE9ZGUpe2lmKCEoT2UgaW4gZGUpKXtpZighdil0aHJvdyBuZXcgaygiYmFzZSBpbnRyaW5zaWMgZm9yICIrUysiIGV4aXN0cywgYnV0IHRoZSBwcm9w'@;
put 'ZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZihqJiZMZSsxPj1wLmxlbmd0aCl7dmFyIEtlPWooZGUsT2UpO2RlPShGZT0hIUtlKSYmImdldCJpbiBLZSYmISgib3JpZ2luYWxWYWx1ZSJpbiBLZS5nZXQpP0tlLmdldDpkZVtPZV19ZWxzZSBGZT11ZShkZSxPZSksZGU9ZGVbT2Vd'@;
put 'O0ZlJiYhZmUmJihlZVtuZV09ZGUpfX1yZXR1cm4gZGV9fSw2NzcyOihNLE8sUik9Pnt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsocSxlZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxLGVlKX1PLnNldG9wdHM9ZnVuY3Rpb24ocSxlZSx0ZSl7aWYodGV8'@;
put 'fCh0ZT17fSksdGUubWF0Y2hCYXNlJiYtMT09PWVlLmluZGV4T2YoIi8iKSl7aWYodGUubm9nbG9ic3Rhcil0aHJvdyBuZXcgRXJyb3IoImJhc2UgbWF0Y2hpbmcgcmVxdWlyZXMgZ2xvYnN0YXIiKTtlZT0iKiovIitlZX12YXIgc2U7cS5zaWxlbnQ9ISF0ZS5zaWxlbnQscS5wYXR0ZXJuPWVl'@;
put 'LHEuc3RyaWN0PSExIT09dGUuc3RyaWN0LHEucmVhbHBhdGg9ISF0ZS5yZWFscGF0aCxxLnJlYWxwYXRoQ2FjaGU9dGUucmVhbHBhdGhDYWNoZXx8T2JqZWN0LmNyZWF0ZShudWxsKSxxLmZvbGxvdz0hIXRlLmZvbGxvdyxxLmRvdD0hIXRlLmRvdCxxLm1hcms9ISF0ZS5tYXJrLHEubm9kaXI9'@;
put 'ISF0ZS5ub2RpcixxLm5vZGlyJiYocS5tYXJrPSEwKSxxLnN5bmM9ISF0ZS5zeW5jLHEubm91bmlxdWU9ISF0ZS5ub3VuaXF1ZSxxLm5vbnVsbD0hIXRlLm5vbnVsbCxxLm5vc29ydD0hIXRlLm5vc29ydCxxLm5vY2FzZT0hIXRlLm5vY2FzZSxxLnN0YXQ9ISF0ZS5zdGF0LHEubm9wcm9jZXNz'@;
put 'PSEhdGUubm9wcm9jZXNzLHEuYWJzb2x1dGU9ISF0ZS5hYnNvbHV0ZSxxLmZzPXRlLmZzfHxJLHEubWF4TGVuZ3RoPXRlLm1heExlbmd0aHx8MS8wLHEuY2FjaGU9dGUuY2FjaGV8fE9iamVjdC5jcmVhdGUobnVsbCkscS5zdGF0Q2FjaGU9dGUuc3RhdENhY2hlfHxPYmplY3QuY3JlYXRlKG51'@;
put 'bGwpLHEuc3ltbGlua3M9dGUuc3ltbGlua3N8fE9iamVjdC5jcmVhdGUobnVsbCksKHNlPXEpLmlnbm9yZT10ZS5pZ25vcmV8fFtdLEFycmF5LmlzQXJyYXkoc2UuaWdub3JlKXx8KHNlLmlnbm9yZT1bc2UuaWdub3JlXSksc2UuaWdub3JlLmxlbmd0aCYmKHNlLmlnbm9yZT1zZS5pZ25vcmUu'@;
put 'bWFwKFkpKSxxLmNoYW5nZWRDd2Q9ITE7dmFyIG9lPXouY3dkKCk7Syh0ZSwiY3dkIik/KHEuY3dkPWsucmVzb2x2ZSh0ZS5jd2QpLHEuY2hhbmdlZEN3ZD1xLmN3ZCE9PW9lKTpxLmN3ZD1vZSxxLnJvb3Q9dGUucm9vdHx8ay5yZXNvbHZlKHEuY3dkLCIvIikscS5yb290PWsucmVzb2x2ZShx'@;
put 'LnJvb3QpLCJ3aW4zMiI9PT16LnBsYXRmb3JtJiYocS5yb290PXEucm9vdC5yZXBsYWNlKC9cXC9nLCIvIikpLHEuY3dkQWJzPWoocS5jd2QpP3EuY3dkOlgocSxxLmN3ZCksIndpbjMyIj09PXoucGxhdGZvcm0mJihxLmN3ZEFicz1xLmN3ZEFicy5yZXBsYWNlKC9cXC9nLCIvIikpLHEubm9t'@;
put 'b3VudD0hIXRlLm5vbW91bnQsdGUubm9uZWdhdGU9ITAsdGUubm9jb21tZW50PSEwLHRlLmFsbG93V2luZG93c0VzY2FwZT0hMSxxLm1pbmltYXRjaD1uZXcgVihlZSx0ZSkscS5vcHRpb25zPXEubWluaW1hdGNoLm9wdGlvbnN9LE8ub3duUHJvcD1LLE8ubWFrZUFicz1YLE8uZmluaXNoPWZ1'@;
put 'bmN0aW9uKHEpe2Zvcih2YXIgZWU9cS5ub3VuaXF1ZSx0ZT1lZT9bXTpPYmplY3QuY3JlYXRlKG51bGwpLG9lPTAsc2U9cS5tYXRjaGVzLmxlbmd0aDtvZTxzZTtvZSsrKXt2YXIgaGU9cS5tYXRjaGVzW29lXTtpZihoZSYmMCE9PU9iamVjdC5rZXlzKGhlKS5sZW5ndGgpe3ZhciB1ZT1PYmpl'@;
put 'Y3Qua2V5cyhoZSk7ZWU/dGUucHVzaC5hcHBseSh0ZSx1ZSk6dWUuZm9yRWFjaChmdW5jdGlvbihHKXt0ZVtHXT0hMH0pfWVsc2UgaWYocS5ub251bGwpe3ZhciBjZT1xLm1pbmltYXRjaC5nbG9iU2V0W29lXTtlZT90ZS5wdXNoKGNlKTp0ZVtjZV09ITB9fWlmKGVlfHwodGU9T2JqZWN0Lmtl'@;
put 'eXModGUpKSxxLm5vc29ydHx8KHRlPXRlLnNvcnQoQikpLHEubWFyayl7Zm9yKG9lPTA7b2U8dGUubGVuZ3RoO29lKyspdGVbb2VdPXEuX21hcmsodGVbb2VdKTtxLm5vZGlyJiYodGU9dGUuZmlsdGVyKGZ1bmN0aW9uKEcpe3ZhciBiPSEvXC8kLy50ZXN0KEcpLEQ9cS5jYWNoZVtHXXx8cS5j'@;
put 'YWNoZVtYKHEsRyldO3JldHVybiBiJiZEJiYoYj0iRElSIiE9PUQmJiFBcnJheS5pc0FycmF5KEQpKSxifSkpfXEuaWdub3JlLmxlbmd0aCYmKHRlPXRlLmZpbHRlcihmdW5jdGlvbihHKXtyZXR1cm4hVShxLEcpfSkpLHEuZm91bmQ9dGV9LE8ubWFyaz1mdW5jdGlvbihxLGVlKXt2YXIgdGU9'@;
put 'WChxLGVlKSxvZT1xLmNhY2hlW3RlXSxzZT1lZTtpZihvZSl7dmFyIGhlPSJESVIiPT09b2V8fEFycmF5LmlzQXJyYXkob2UpLHVlPSIvIj09PWVlLnNsaWNlKC0xKTtpZihoZSYmIXVlP3NlKz0iLyI6IWhlJiZ1ZSYmKHNlPXNlLnNsaWNlKDAsLTEpKSxzZSE9PWVlKXt2YXIgY2U9WChxLHNl'@;
put 'KTtxLnN0YXRDYWNoZVtjZV09cS5zdGF0Q2FjaGVbdGVdLHEuY2FjaGVbY2VdPXEuY2FjaGVbdGVdfX1yZXR1cm4gc2V9LE8uaXNJZ25vcmVkPVUsTy5jaGlsZHJlbklnbm9yZWQ9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuISFxLmlnbm9yZS5sZW5ndGgmJnEuaWdub3JlLnNvbWUoZnVuY3Rpb24o'@;
put 'dGUpe3JldHVybiEoIXRlLmdtYXRjaGVyfHwhdGUuZ21hdGNoZXIubWF0Y2goZWUpKX0pfTt2YXIgST1SKDM3MTApLGs9UigyNTIwKSxFPVIoMTE3MSksaj1SKDQwOTUpLFY9RS5NaW5pbWF0Y2g7ZnVuY3Rpb24gQihxLGVlKXtyZXR1cm4gcS5sb2NhbGVDb21wYXJlKGVlLCJlbiIpfWZ1bmN0'@;
put 'aW9uIFkocSl7dmFyIGVlPW51bGw7aWYoIi8qKiI9PT1xLnNsaWNlKC0zKSl7dmFyIHRlPXEucmVwbGFjZSgvKFwvXCpcKikrJC8sIiIpO2VlPW5ldyBWKHRlLHtkb3Q6ITB9KX1yZXR1cm57bWF0Y2hlcjpuZXcgVihxLHtkb3Q6ITB9KSxnbWF0Y2hlcjplZX19ZnVuY3Rpb24gWChxLGVlKXt2'@;
put 'YXIgdGU9ZWU7cmV0dXJuIHRlPSIvIj09PWVlLmNoYXJBdCgwKT9rLmpvaW4ocS5yb290LGVlKTpqKGVlKXx8IiI9PT1lZT9lZTpxLmNoYW5nZWRDd2Q/ay5yZXNvbHZlKHEuY3dkLGVlKTprLnJlc29sdmUoZWUpLCJ3aW4zMiI9PT16LnBsYXRmb3JtJiYodGU9dGUucmVwbGFjZSgvXFwvZywi'@;
put 'LyIpKSx0ZX1mdW5jdGlvbiBVKHEsZWUpe3JldHVybiEhcS5pZ25vcmUubGVuZ3RoJiZxLmlnbm9yZS5zb21lKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUubWF0Y2hlci5tYXRjaChlZSl8fCEoIXRlLmdtYXRjaGVyfHwhdGUuZ21hdGNoZXIubWF0Y2goZWUpKX0pfX0sMjg4NDooTSxPLFIpPT57'@;
put 'dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCk7TS5leHBvcnRzPXVlO3ZhciBJPVIoNzMzNCksaz1SKDExNzEpLEU9Uig1NzE3KSxqPVIoNzE4NykuRXZlbnRFbWl0dGVyLFY9UigyNTIwKSxCPVIoOTI4MiksWT1SKDQwOTUpLFg9Uig0NzUxKSxVPVIoNjc3MikscT1VLnNldG9wdHMsZWU9VS5vd25Q'@;
put 'cm9wLHRlPVIoNzg0NCksb2U9KFIoOTUzOSksVS5jaGlsZHJlbklnbm9yZWQpLHNlPVUuaXNJZ25vcmVkLGhlPVIoNzc4KTtmdW5jdGlvbiB1ZShiLEQsSCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEQmJihIPUQsRD17fSksRHx8KEQ9e30pLEQuc3luYyl7aWYoSCl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2IiKTtyZXR1cm4gWChiLEQpfXJldHVybiBuZXcgRyhiLEQsSCl9dWUuc3luYz1YO3ZhciBjZT11ZS5HbG9iU3luYz1YLkdsb2JTeW5jO2Z1bmN0aW9uIEcoYixELEgpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBEJiYoSD1ELEQ9bnVs'@;
put 'bCksRCYmRC5zeW5jKXtpZihIKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYiIpO3JldHVybiBuZXcgY2UoYixEKX1pZighKHRoaXMgaW5zdGFuY2VvZiBHKSlyZXR1cm4gbmV3IEcoYixELEgpO3EodGhpcyxiLEQpLHRoaXMuX2RpZFJlYWxQYXRo'@;
put 'PSExO3ZhciBOPXRoaXMubWluaW1hdGNoLnNldC5sZW5ndGg7dGhpcy5tYXRjaGVzPW5ldyBBcnJheShOKSwiZnVuY3Rpb24iPT10eXBlb2YgSCYmKEg9aGUoSCksdGhpcy5vbigiZXJyb3IiLEgpLHRoaXMub24oImVuZCIsZnVuY3Rpb24ocCl7SChudWxsLHApfSkpO3ZhciBnPXRoaXM7aWYo'@;
put 'dGhpcy5fcHJvY2Vzc2luZz0wLHRoaXMuX2VtaXRRdWV1ZT1bXSx0aGlzLl9wcm9jZXNzUXVldWU9W10sdGhpcy5wYXVzZWQ9ITEsdGhpcy5ub3Byb2Nlc3MpcmV0dXJuIHRoaXM7aWYoMD09PU4pcmV0dXJuIHYoKTtmb3IodmFyIEM9ITAsUz0wO1M8TjtTKyspdGhpcy5fcHJvY2Vzcyh0aGlz'@;
put 'Lm1pbmltYXRjaC5zZXRbU10sUywhMSx2KTtmdW5jdGlvbiB2KCl7LS1nLl9wcm9jZXNzaW5nLGcuX3Byb2Nlc3Npbmc8PTAmJihDP3oubmV4dFRpY2soZnVuY3Rpb24oKXtnLl9maW5pc2goKX0pOmcuX2ZpbmlzaCgpKX1DPSExfXVlLmdsb2I9dWUsdWUuaGFzTWFnaWM9ZnVuY3Rpb24oYixE'@;
put 'KXt2YXIgSD1mdW5jdGlvbihDLFMpe2lmKG51bGw9PT1TfHwib2JqZWN0IiE9dHlwZW9mIFMpcmV0dXJuIEM7Zm9yKHZhciB2PU9iamVjdC5rZXlzKFMpLHA9di5sZW5ndGg7cC0tOylDW3ZbcF1dPVNbdltwXV07cmV0dXJuIEN9KHt9LEQpO0gubm9wcm9jZXNzPSEwO3ZhciBOPW5ldyBHKGIs'@;
put 'SCkubWluaW1hdGNoLnNldDtpZighYilyZXR1cm4hMTtpZihOLmxlbmd0aD4xKXJldHVybiEwO2Zvcih2YXIgZz0wO2c8TlswXS5sZW5ndGg7ZysrKWlmKCJzdHJpbmciIT10eXBlb2YgTlswXVtnXSlyZXR1cm4hMDtyZXR1cm4hMX0sdWUuR2xvYj1HLEUoRyxqKSxHLnByb3RvdHlwZS5fZmlu'@;
put 'aXNoPWZ1bmN0aW9uKCl7aWYoQih0aGlzIGluc3RhbmNlb2YgRyksIXRoaXMuYWJvcnRlZCl7aWYodGhpcy5yZWFscGF0aCYmIXRoaXMuX2RpZFJlYWxwYXRoKXJldHVybiB0aGlzLl9yZWFscGF0aCgpO1UuZmluaXNoKHRoaXMpLHRoaXMuZW1pdCgiZW5kIix0aGlzLmZvdW5kKX19LEcucHJv'@;
put 'dG90eXBlLl9yZWFscGF0aD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kaWRSZWFscGF0aCl7dGhpcy5fZGlkUmVhbHBhdGg9ITA7dmFyIGI9dGhpcy5tYXRjaGVzLmxlbmd0aDtpZigwPT09YilyZXR1cm4gdGhpcy5fZmluaXNoKCk7Zm9yKHZhciBEPXRoaXMsSD0wO0g8dGhpcy5tYXRjaGVzLmxl'@;
put 'bmd0aDtIKyspdGhpcy5fcmVhbHBhdGhTZXQoSCxOKX1mdW5jdGlvbiBOKCl7MD09LS1iJiZELl9maW5pc2goKX19LEcucHJvdG90eXBlLl9yZWFscGF0aFNldD1mdW5jdGlvbihiLEQpe3ZhciBIPXRoaXMubWF0Y2hlc1tiXTtpZighSClyZXR1cm4gRCgpO3ZhciBOPU9iamVjdC5rZXlzKEgp'@;
put 'LGc9dGhpcyxDPU4ubGVuZ3RoO2lmKDA9PT1DKXJldHVybiBEKCk7dmFyIFM9dGhpcy5tYXRjaGVzW2JdPU9iamVjdC5jcmVhdGUobnVsbCk7Ti5mb3JFYWNoKGZ1bmN0aW9uKHYscCl7dj1nLl9tYWtlQWJzKHYpLEkucmVhbHBhdGgodixnLnJlYWxwYXRoQ2FjaGUsZnVuY3Rpb24odyxKKXt3'@;
put 'PyJzdGF0Ij09PXcuc3lzY2FsbD9TW3ZdPSEwOmcuZW1pdCgiZXJyb3IiLHcpOlNbSl09ITAsMD09LS1DJiYoZy5tYXRjaGVzW2JdPVMsRCgpKX0pfSl9LEcucHJvdG90eXBlLl9tYXJrPWZ1bmN0aW9uKGIpe3JldHVybiBVLm1hcmsodGhpcyxiKX0sRy5wcm90b3R5cGUuX21ha2VBYnM9ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIFUubWFrZUFicyh0aGlzLGIpfSxHLnByb3RvdHlwZS5hYm9ydD1mdW5jdGlvbigpe3RoaXMuYWJvcnRlZD0hMCx0aGlzLmVtaXQoImFib3J0Iil9LEcucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZWR8fCh0aGlzLnBhdXNlZD0hMCx0aGlzLmVt'@;
put 'aXQoInBhdXNlIikpfSxHLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtpZih0aGlzLnBhdXNlZCl7aWYodGhpcy5lbWl0KCJyZXN1bWUiKSx0aGlzLnBhdXNlZD0hMSx0aGlzLl9lbWl0UXVldWUubGVuZ3RoKXt2YXIgYj10aGlzLl9lbWl0UXVldWUuc2xpY2UoMCk7dGhpcy5fZW1pdFF1'@;
put 'ZXVlLmxlbmd0aD0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgSD1iW0RdO3RoaXMuX2VtaXRNYXRjaChIWzBdLEhbMV0pfX1pZih0aGlzLl9wcm9jZXNzUXVldWUubGVuZ3RoKXt2YXIgTj10aGlzLl9wcm9jZXNzUXVldWUuc2xpY2UoMCk7Zm9yKHRoaXMuX3Byb2Nlc3NRdWV1'@;
put 'ZS5sZW5ndGg9MCxEPTA7RDxOLmxlbmd0aDtEKyspe3ZhciBnPU5bRF07dGhpcy5fcHJvY2Vzc2luZy0tLHRoaXMuX3Byb2Nlc3MoZ1swXSxnWzFdLGdbMl0sZ1szXSl9fX19LEcucHJvdG90eXBlLl9wcm9jZXNzPWZ1bmN0aW9uKGIsRCxILE4pe2lmKEIodGhpcyBpbnN0YW5jZW9mIEcpLEIo'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIE4pLCF0aGlzLmFib3J0ZWQpaWYodGhpcy5fcHJvY2Vzc2luZysrLHRoaXMucGF1c2VkKXRoaXMuX3Byb2Nlc3NRdWV1ZS5wdXNoKFtiLEQsSCxOXSk7ZWxzZXtmb3IodmFyIGcsQz0wOyJzdHJpbmciPT10eXBlb2YgYltDXTspQysrO3N3aXRjaChDKXtjYXNl'@;
put 'IGIubGVuZ3RoOnJldHVybiB2b2lkIHRoaXMuX3Byb2Nlc3NTaW1wbGUoYi5qb2luKCIvIiksRCxOKTtjYXNlIDA6Zz1udWxsO2JyZWFrO2RlZmF1bHQ6Zz1iLnNsaWNlKDAsQykuam9pbigiLyIpfXZhciBTLHY9Yi5zbGljZShDKTtudWxsPT09Zz9TPSIuIjooKFkoZyl8fFkoYi5tYXAoZnVu'@;
put 'Y3Rpb24odyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB3P3c6IlsqXSJ9KS5qb2luKCIvIikpKSYmKGcmJlkoZyl8fChnPSIvIitnKSksUz1nKTt2YXIgcD10aGlzLl9tYWtlQWJzKFMpO2lmKG9lKHRoaXMsUykpcmV0dXJuIE4oKTt2WzBdPT09ay5HTE9CU1RBUj90aGlzLl9wcm9jZXNzR2xv'@;
put 'YlN0YXIoZyxTLHAsdixELEgsTik6dGhpcy5fcHJvY2Vzc1JlYWRkaXIoZyxTLHAsdixELEgsTil9fSxHLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXI9ZnVuY3Rpb24oYixELEgsTixnLEMsUyl7dmFyIHY9dGhpczt0aGlzLl9yZWFkZGlyKEgsQyxmdW5jdGlvbihwLHcpe3JldHVybiB2Ll9w'@;
put 'cm9jZXNzUmVhZGRpcjIoYixELEgsTixnLEMsdyxTKX0pfSxHLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXIyPWZ1bmN0aW9uKGIsRCxILE4sZyxDLFMsdil7aWYoIVMpcmV0dXJuIHYoKTtmb3IodmFyIHA9TlswXSx3PSEhdGhpcy5taW5pbWF0Y2gubmVnYXRlLG5lPXRoaXMuZG90fHwiLiI9'@;
put 'PT1wLl9nbG9iLmNoYXJBdCgwKSxkZT1bXSxmZT0wO2ZlPFMubGVuZ3RoO2ZlKyspKCIuIiE9PShMZT1TW2ZlXSkuY2hhckF0KDApfHxuZSkmJih3JiYhYj8hTGUubWF0Y2gocCk6TGUubWF0Y2gocCkpJiZkZS5wdXNoKExlKTt2YXIgeGU9ZGUubGVuZ3RoO2lmKDA9PT14ZSlyZXR1cm4gdigp'@;
put 'O2lmKDE9PT1OLmxlbmd0aCYmIXRoaXMubWFyayYmIXRoaXMuc3RhdCl7Zm9yKHRoaXMubWF0Y2hlc1tnXXx8KHRoaXMubWF0Y2hlc1tnXT1PYmplY3QuY3JlYXRlKG51bGwpKSxmZT0wO2ZlPHhlO2ZlKyspe3ZhciBMZT1kZVtmZV07YiYmKExlPSIvIiE9PWI/YisiLyIrTGU6YitMZSksIi8i'@;
put 'IT09TGUuY2hhckF0KDApfHx0aGlzLm5vbW91bnR8fChMZT1WLmpvaW4odGhpcy5yb290LExlKSksdGhpcy5fZW1pdE1hdGNoKGcsTGUpfXJldHVybiB2KCl9Zm9yKE4uc2hpZnQoKSxmZT0wO2ZlPHhlO2ZlKyspTGU9ZGVbZmVdLGImJihMZT0iLyIhPT1iP2IrIi8iK0xlOmIrTGUpLHRoaXMu'@;
put 'X3Byb2Nlc3MoW0xlXS5jb25jYXQoTiksZyxDLHYpO3YoKX0sRy5wcm90b3R5cGUuX2VtaXRNYXRjaD1mdW5jdGlvbihiLEQpe2lmKCF0aGlzLmFib3J0ZWQmJiFzZSh0aGlzLEQpKWlmKHRoaXMucGF1c2VkKXRoaXMuX2VtaXRRdWV1ZS5wdXNoKFtiLERdKTtlbHNle3ZhciBIPVkoRCk/RDp0'@;
put 'aGlzLl9tYWtlQWJzKEQpO2lmKHRoaXMubWFyayYmKEQ9dGhpcy5fbWFyayhEKSksdGhpcy5hYnNvbHV0ZSYmKEQ9SCksIXRoaXMubWF0Y2hlc1tiXVtEXSl7aWYodGhpcy5ub2Rpcil7dmFyIE49dGhpcy5jYWNoZVtIXTtpZigiRElSIj09PU58fEFycmF5LmlzQXJyYXkoTikpcmV0dXJufXRo'@;
put 'aXMubWF0Y2hlc1tiXVtEXT0hMDt2YXIgZz10aGlzLnN0YXRDYWNoZVtIXTtnJiZ0aGlzLmVtaXQoInN0YXQiLEQsZyksdGhpcy5lbWl0KCJtYXRjaCIsRCl9fX0sRy5wcm90b3R5cGUuX3JlYWRkaXJJbkdsb2JTdGFyPWZ1bmN0aW9uKGIsRCl7aWYoIXRoaXMuYWJvcnRlZCl7aWYodGhpcy5m'@;
put 'b2xsb3cpcmV0dXJuIHRoaXMuX3JlYWRkaXIoYiwhMSxEKTt2YXIgSD10aGlzLE49dGUoImxzdGF0XDAiK2IsZnVuY3Rpb24oZyxDKXtpZihnJiYiRU5PRU5UIj09PWcuY29kZSlyZXR1cm4gRCgpO3ZhciBTPUMmJkMuaXNTeW1ib2xpY0xpbmsoKTtILnN5bWxpbmtzW2JdPVMsU3x8IUN8fEMu'@;
put 'aXNEaXJlY3RvcnkoKT9ILl9yZWFkZGlyKGIsITEsRCk6KEguY2FjaGVbYl09IkZJTEUiLEQoKSl9KTtOJiZILmZzLmxzdGF0KGIsTil9fSxHLnByb3RvdHlwZS5fcmVhZGRpcj1mdW5jdGlvbihiLEQsSCl7aWYoIXRoaXMuYWJvcnRlZCYmKEg9dGUoInJlYWRkaXJcMCIrYisiXDAiK0QsSCkp'@;
put 'KXtpZihEJiYhZWUodGhpcy5zeW1saW5rcyxiKSlyZXR1cm4gdGhpcy5fcmVhZGRpckluR2xvYlN0YXIoYixIKTtpZihlZSh0aGlzLmNhY2hlLGIpKXt2YXIgTj10aGlzLmNhY2hlW2JdO2lmKCFOfHwiRklMRSI9PT1OKXJldHVybiBIKCk7aWYoQXJyYXkuaXNBcnJheShOKSlyZXR1cm4gSChu'@;
put 'dWxsLE4pfXRoaXMuZnMucmVhZGRpcihiLChnPXRoaXMsQz1iLFM9SCxmdW5jdGlvbih2LHApe3Y/Zy5fcmVhZGRpckVycm9yKEMsdixTKTpnLl9yZWFkZGlyRW50cmllcyhDLHAsUyl9KSl9dmFyIGcsQyxTfSxHLnByb3RvdHlwZS5fcmVhZGRpckVudHJpZXM9ZnVuY3Rpb24oYixELEgpe2lm'@;
put 'KCF0aGlzLmFib3J0ZWQpe2lmKCF0aGlzLm1hcmsmJiF0aGlzLnN0YXQpZm9yKHZhciBOPTA7TjxELmxlbmd0aDtOKyspe3ZhciBnPURbTl07dGhpcy5jYWNoZVtnPSIvIj09PWI/YitnOmIrIi8iK2ddPSEwfXJldHVybiB0aGlzLmNhY2hlW2JdPUQsSChudWxsLEQpfX0sRy5wcm90b3R5cGUu'@;
put 'X3JlYWRkaXJFcnJvcj1mdW5jdGlvbihiLEQsSCl7aWYoIXRoaXMuYWJvcnRlZCl7c3dpdGNoKEQuY29kZSl7Y2FzZSJFTk9UU1VQIjpjYXNlIkVOT1RESVIiOnZhciBOPXRoaXMuX21ha2VBYnMoYik7aWYodGhpcy5jYWNoZVtOXT0iRklMRSIsTj09PXRoaXMuY3dkQWJzKXt2YXIgZz1uZXcg'@;
put 'RXJyb3IoRC5jb2RlKyIgaW52YWxpZCBjd2QgIit0aGlzLmN3ZCk7Zy5wYXRoPXRoaXMuY3dkLGcuY29kZT1ELmNvZGUsdGhpcy5lbWl0KCJlcnJvciIsZyksdGhpcy5hYm9ydCgpfWJyZWFrO2Nhc2UiRU5PRU5UIjpjYXNlIkVMT09QIjpjYXNlIkVOQU1FVE9PTE9ORyI6Y2FzZSJVTktOT1dO'@;
put 'Ijp0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMoYildPSExO2JyZWFrO2RlZmF1bHQ6dGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKGIpXT0hMSx0aGlzLnN0cmljdCYmKHRoaXMuZW1pdCgiZXJyb3IiLEQpLHRoaXMuYWJvcnQoKSksdGhpcy5zaWxlbnR8fEsuZXJyb3IoImdsb2IgZXJyb3IiLEQp'@;
put 'fXJldHVybiBIKCl9fSxHLnByb3RvdHlwZS5fcHJvY2Vzc0dsb2JTdGFyPWZ1bmN0aW9uKGIsRCxILE4sZyxDLFMpe3ZhciB2PXRoaXM7dGhpcy5fcmVhZGRpcihILEMsZnVuY3Rpb24ocCx3KXt2Ll9wcm9jZXNzR2xvYlN0YXIyKGIsRCxILE4sZyxDLHcsUyl9KX0sRy5wcm90b3R5cGUuX3By'@;
put 'b2Nlc3NHbG9iU3RhcjI9ZnVuY3Rpb24oYixELEgsTixnLEMsUyx2KXtpZighUylyZXR1cm4gdigpO3ZhciBwPU4uc2xpY2UoMSksdz1iP1tiXTpbXSxKPXcuY29uY2F0KHApO3RoaXMuX3Byb2Nlc3MoSixnLCExLHYpO3ZhciBkZT1TLmxlbmd0aDtpZih0aGlzLnN5bWxpbmtzW0hdJiZDKXJl'@;
put 'dHVybiB2KCk7Zm9yKHZhciBmZT0wO2ZlPGRlO2ZlKyspaWYoIi4iIT09U1tmZV0uY2hhckF0KDApfHx0aGlzLmRvdCl7dmFyIHhlPXcuY29uY2F0KFNbZmVdLHApO3RoaXMuX3Byb2Nlc3MoeGUsZywhMCx2KTt2YXIgTGU9dy5jb25jYXQoU1tmZV0sTik7dGhpcy5fcHJvY2VzcyhMZSxnLCEw'@;
put 'LHYpfXYoKX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NTaW1wbGU9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXM7dGhpcy5fc3RhdChiLGZ1bmN0aW9uKGcsQyl7Ti5fcHJvY2Vzc1NpbXBsZTIoYixELGcsQyxIKX0pfSxHLnByb3RvdHlwZS5fcHJvY2Vzc1NpbXBsZTI9ZnVuY3Rpb24oYixELEgs'@;
put 'TixnKXtpZih0aGlzLm1hdGNoZXNbRF18fCh0aGlzLm1hdGNoZXNbRF09T2JqZWN0LmNyZWF0ZShudWxsKSksIU4pcmV0dXJuIGcoKTtpZihiJiZZKGIpJiYhdGhpcy5ub21vdW50KXt2YXIgQz0vW1wvXFxdJC8udGVzdChiKTsiLyI9PT1iLmNoYXJBdCgwKT9iPVYuam9pbih0aGlzLnJvb3Qs'@;
put 'Yik6KGI9Vi5yZXNvbHZlKHRoaXMucm9vdCxiKSxDJiYoYis9Ii8iKSl9IndpbjMyIj09PXoucGxhdGZvcm0mJihiPWIucmVwbGFjZSgvXFwvZywiLyIpKSx0aGlzLl9lbWl0TWF0Y2goRCxiKSxnKCl9LEcucHJvdG90eXBlLl9zdGF0PWZ1bmN0aW9uKGIsRCl7dmFyIEg9dGhpcy5fbWFrZUFi'@;
put 'cyhiKSxOPSIvIj09PWIuc2xpY2UoLTEpO2lmKGIubGVuZ3RoPnRoaXMubWF4TGVuZ3RoKXJldHVybiBEKCk7aWYoIXRoaXMuc3RhdCYmZWUodGhpcy5jYWNoZSxIKSl7dmFyIGc9dGhpcy5jYWNoZVtIXTtpZihBcnJheS5pc0FycmF5KGcpJiYoZz0iRElSIiksIU58fCJESVIiPT09ZylyZXR1'@;
put 'cm4gRChudWxsLGcpO2lmKE4mJiJGSUxFIj09PWcpcmV0dXJuIEQoKX12YXIgQz10aGlzLnN0YXRDYWNoZVtIXTtpZih2b2lkIDAhPT1DKXtpZighMT09PUMpcmV0dXJuIEQobnVsbCxDKTt2YXIgUz1DLmlzRGlyZWN0b3J5KCk/IkRJUiI6IkZJTEUiO3JldHVybiBOJiYiRklMRSI9PT1TP0Qo'@;
put 'KTpEKG51bGwsUyxDKX12YXIgdj10aGlzLHA9dGUoInN0YXRcMCIrSCxmdW5jdGlvbih3LEope2lmKEomJkouaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gdi5mcy5zdGF0KEgsZnVuY3Rpb24obmUsZGUpe25lP3YuX3N0YXQyKGIsSCxudWxsLEosRCk6di5fc3RhdDIoYixILG5lLGRlLEQpfSk7'@;
put 'di5fc3RhdDIoYixILHcsSixEKX0pO3AmJnYuZnMubHN0YXQoSCxwKX0sRy5wcm90b3R5cGUuX3N0YXQyPWZ1bmN0aW9uKGIsRCxILE4sZyl7aWYoSCYmKCJFTk9FTlQiPT09SC5jb2RlfHwiRU5PVERJUiI9PT1ILmNvZGUpKXJldHVybiB0aGlzLnN0YXRDYWNoZVtEXT0hMSxnKCk7dmFyIEM9'@;
put 'Ii8iPT09Yi5zbGljZSgtMSk7aWYodGhpcy5zdGF0Q2FjaGVbRF09TiwiLyI9PT1ELnNsaWNlKC0xKSYmTiYmIU4uaXNEaXJlY3RvcnkoKSlyZXR1cm4gZyhudWxsLCExLE4pO3ZhciBTPSEwO3JldHVybiBOJiYoUz1OLmlzRGlyZWN0b3J5KCk/IkRJUiI6IkZJTEUiKSx0aGlzLmNhY2hlW0Rd'@;
put 'PXRoaXMuY2FjaGVbRF18fFMsQyYmIkZJTEUiPT09Uz9nKCk6ZyhudWxsLFMsTil9fSw0NzUxOihNLE8sUik9Pnt2YXIgej1SKDUxMDgpLEs9Uig0MTU1KTtNLmV4cG9ydHM9ZWUsZWUuR2xvYlN5bmM9dGU7dmFyIEk9Uig3MzM0KSxrPVIoMTE3MSksRT0oUigyODg0KSxSKDk1MzkpLFIoMjUy'@;
put 'MCkpLGo9Uig5MjgyKSxWPVIoNDA5NSksQj1SKDY3NzIpLFk9Qi5zZXRvcHRzLFg9Qi5vd25Qcm9wLFU9Qi5jaGlsZHJlbklnbm9yZWQscT1CLmlzSWdub3JlZDtmdW5jdGlvbiBlZShvZSxzZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHNlfHwzPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2JcblNlZTogaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzE2NyIpO3JldHVybiBuZXcgdGUob2Usc2UpLmZvdW5kfWZ1bmN0aW9uIHRlKG9lLHNlKXtpZighb2UpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJtdXN0IHByb3ZpZGUgcGF0dGVybiIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzZXx8Mz09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgcHJvdmlkZWQgdG8gc3luYyBnbG9iXG5TZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1n'@;
put 'bG9iL2lzc3Vlcy8xNjciKTtpZighKHRoaXMgaW5zdGFuY2VvZiB0ZSkpcmV0dXJuIG5ldyB0ZShvZSxzZSk7aWYoWSh0aGlzLG9lLHNlKSx0aGlzLm5vcHJvY2VzcylyZXR1cm4gdGhpczt2YXIgaGU9dGhpcy5taW5pbWF0Y2guc2V0Lmxlbmd0aDt0aGlzLm1hdGNoZXM9bmV3IEFycmF5KGhl'@;
put 'KTtmb3IodmFyIHVlPTA7dWU8aGU7dWUrKyl0aGlzLl9wcm9jZXNzKHRoaXMubWluaW1hdGNoLnNldFt1ZV0sdWUsITEpO3RoaXMuX2ZpbmlzaCgpfXRlLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7aWYoai5vayh0aGlzIGluc3RhbmNlb2YgdGUpLHRoaXMucmVhbHBhdGgpe3ZhciBv'@;
put 'ZT10aGlzO3RoaXMubWF0Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uKHNlLGhlKXt2YXIgdWU9b2UubWF0Y2hlc1toZV09T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIGNlIGluIHNlKXRyeXtjZT1vZS5fbWFrZUFicyhjZSksdWVbSS5yZWFscGF0aFN5bmMoY2Usb2UucmVhbHBhdGhDYWNoZSld'@;
put 'PSEwfWNhdGNoKEcpe2lmKCJzdGF0IiE9PUcuc3lzY2FsbCl0aHJvdyBHO3VlW29lLl9tYWtlQWJzKGNlKV09ITB9fSl9Qi5maW5pc2godGhpcyl9LHRlLnByb3RvdHlwZS5fcHJvY2Vzcz1mdW5jdGlvbihvZSxzZSxoZSl7ai5vayh0aGlzIGluc3RhbmNlb2YgdGUpO2Zvcih2YXIgdWUsY2U9'@;
put 'MDsic3RyaW5nIj09dHlwZW9mIG9lW2NlXTspY2UrKztzd2l0Y2goY2Upe2Nhc2Ugb2UubGVuZ3RoOnJldHVybiB2b2lkIHRoaXMuX3Byb2Nlc3NTaW1wbGUob2Uuam9pbigiLyIpLHNlKTtjYXNlIDA6dWU9bnVsbDticmVhaztkZWZhdWx0OnVlPW9lLnNsaWNlKDAsY2UpLmpvaW4oIi8iKX12'@;
put 'YXIgRyxiPW9lLnNsaWNlKGNlKTtudWxsPT09dWU/Rz0iLiI6KChWKHVlKXx8VihvZS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBIP0g6IlsqXSJ9KS5qb2luKCIvIikpKSYmKHVlJiZWKHVlKXx8KHVlPSIvIit1ZSkpLEc9dWUpO3ZhciBEPXRoaXMuX21ha2VBYnMo'@;
put 'Ryk7VSh0aGlzLEcpfHwoYlswXT09PWsuR0xPQlNUQVI/dGhpcy5fcHJvY2Vzc0dsb2JTdGFyKHVlLEcsRCxiLHNlLGhlKTp0aGlzLl9wcm9jZXNzUmVhZGRpcih1ZSxHLEQsYixzZSxoZSkpfSx0ZS5wcm90b3R5cGUuX3Byb2Nlc3NSZWFkZGlyPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcp'@;
put 'e3ZhciBiPXRoaXMuX3JlYWRkaXIoaGUsRyk7aWYoYil7Zm9yKHZhciBEPXVlWzBdLEg9ISF0aGlzLm1pbmltYXRjaC5uZWdhdGUsZz10aGlzLmRvdHx8Ii4iPT09RC5fZ2xvYi5jaGFyQXQoMCksQz1bXSxTPTA7UzxiLmxlbmd0aDtTKyspKCIuIiE9PSh3PWJbU10pLmNoYXJBdCgwKXx8Zykm'@;
put 'JihIJiYhb2U/IXcubWF0Y2goRCk6dy5tYXRjaChEKSkmJkMucHVzaCh3KTt2YXIgdj1DLmxlbmd0aDtpZigwIT09dilpZigxIT09dWUubGVuZ3RofHx0aGlzLm1hcmt8fHRoaXMuc3RhdClmb3IodWUuc2hpZnQoKSxTPTA7Uzx2O1MrKyl3PUNbU10sdGhpcy5fcHJvY2Vzcygob2U/W29lLHdd'@;
put 'Olt3XSkuY29uY2F0KHVlKSxjZSxHKTtlbHNlIGZvcih0aGlzLm1hdGNoZXNbY2VdfHwodGhpcy5tYXRjaGVzW2NlXT1PYmplY3QuY3JlYXRlKG51bGwpKSxTPTA7Uzx2O1MrKyl7dmFyIHc9Q1tTXTtvZSYmKHc9Ii8iIT09b2Uuc2xpY2UoLTEpP29lKyIvIit3Om9lK3cpLCIvIiE9PXcuY2hh'@;
put 'ckF0KDApfHx0aGlzLm5vbW91bnR8fCh3PUUuam9pbih0aGlzLnJvb3QsdykpLHRoaXMuX2VtaXRNYXRjaChjZSx3KX19fSx0ZS5wcm90b3R5cGUuX2VtaXRNYXRjaD1mdW5jdGlvbihvZSxzZSl7aWYoIXEodGhpcyxzZSkpe3ZhciBoZT10aGlzLl9tYWtlQWJzKHNlKTtpZih0aGlzLm1hcmsm'@;
put 'JihzZT10aGlzLl9tYXJrKHNlKSksdGhpcy5hYnNvbHV0ZSYmKHNlPWhlKSwhdGhpcy5tYXRjaGVzW29lXVtzZV0pe2lmKHRoaXMubm9kaXIpe3ZhciB1ZT10aGlzLmNhY2hlW2hlXTtpZigiRElSIj09PXVlfHxBcnJheS5pc0FycmF5KHVlKSlyZXR1cm59dGhpcy5tYXRjaGVzW29lXVtzZV09'@;
put 'ITAsdGhpcy5zdGF0JiZ0aGlzLl9zdGF0KHNlKX19fSx0ZS5wcm90b3R5cGUuX3JlYWRkaXJJbkdsb2JTdGFyPWZ1bmN0aW9uKG9lKXtpZih0aGlzLmZvbGxvdylyZXR1cm4gdGhpcy5fcmVhZGRpcihvZSwhMSk7dmFyIHNlLGhlO3RyeXtoZT10aGlzLmZzLmxzdGF0U3luYyhvZSl9Y2F0Y2go'@;
put 'Y2Upe2lmKCJFTk9FTlQiPT09Y2UuY29kZSlyZXR1cm4gbnVsbH12YXIgdWU9aGUmJmhlLmlzU3ltYm9saWNMaW5rKCk7cmV0dXJuIHRoaXMuc3ltbGlua3Nbb2VdPXVlLHVlfHwhaGV8fGhlLmlzRGlyZWN0b3J5KCk/c2U9dGhpcy5fcmVhZGRpcihvZSwhMSk6dGhpcy5jYWNoZVtvZV09IkZJ'@;
put 'TEUiLHNlfSx0ZS5wcm90b3R5cGUuX3JlYWRkaXI9ZnVuY3Rpb24ob2Usc2Upe2lmKHNlJiYhWCh0aGlzLnN5bWxpbmtzLG9lKSlyZXR1cm4gdGhpcy5fcmVhZGRpckluR2xvYlN0YXIob2UpO2lmKFgodGhpcy5jYWNoZSxvZSkpe3ZhciBoZT10aGlzLmNhY2hlW29lXTtpZighaGV8fCJGSUxF'@;
put 'Ij09PWhlKXJldHVybiBudWxsO2lmKEFycmF5LmlzQXJyYXkoaGUpKXJldHVybiBoZX10cnl7cmV0dXJuIHRoaXMuX3JlYWRkaXJFbnRyaWVzKG9lLHRoaXMuZnMucmVhZGRpclN5bmMob2UpKX1jYXRjaCh1ZSl7cmV0dXJuIHRoaXMuX3JlYWRkaXJFcnJvcihvZSx1ZSksbnVsbH19LHRlLnBy'@;
put 'b3RvdHlwZS5fcmVhZGRpckVudHJpZXM9ZnVuY3Rpb24ob2Usc2Upe2lmKCF0aGlzLm1hcmsmJiF0aGlzLnN0YXQpZm9yKHZhciBoZT0wO2hlPHNlLmxlbmd0aDtoZSsrKXt2YXIgdWU9c2VbaGVdO3RoaXMuY2FjaGVbdWU9Ii8iPT09b2U/b2UrdWU6b2UrIi8iK3VlXT0hMH1yZXR1cm4gdGhp'@;
put 'cy5jYWNoZVtvZV09c2Usc2V9LHRlLnByb3RvdHlwZS5fcmVhZGRpckVycm9yPWZ1bmN0aW9uKG9lLHNlKXtzd2l0Y2goc2UuY29kZSl7Y2FzZSJFTk9UU1VQIjpjYXNlIkVOT1RESVIiOnZhciBoZT10aGlzLl9tYWtlQWJzKG9lKTtpZih0aGlzLmNhY2hlW2hlXT0iRklMRSIsaGU9PT10aGlz'@;
put 'LmN3ZEFicyl7dmFyIHVlPW5ldyBFcnJvcihzZS5jb2RlKyIgaW52YWxpZCBjd2QgIit0aGlzLmN3ZCk7dGhyb3cgdWUucGF0aD10aGlzLmN3ZCx1ZS5jb2RlPXNlLmNvZGUsdWV9YnJlYWs7Y2FzZSJFTk9FTlQiOmNhc2UiRUxPT1AiOmNhc2UiRU5BTUVUT09MT05HIjpjYXNlIlVOS05PV04i'@;
put 'OnRoaXMuY2FjaGVbdGhpcy5fbWFrZUFicyhvZSldPSExO2JyZWFrO2RlZmF1bHQ6aWYodGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKG9lKV09ITEsdGhpcy5zdHJpY3QpdGhyb3cgc2U7dGhpcy5zaWxlbnR8fHouZXJyb3IoImdsb2IgZXJyb3IiLHNlKX19LHRlLnByb3RvdHlwZS5fcHJvY2Vz'@;
put 'c0dsb2JTdGFyPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3ZhciBiPXRoaXMuX3JlYWRkaXIoaGUsRyk7aWYoYil7dmFyIEQ9dWUuc2xpY2UoMSksSD1vZT9bb2VdOltdLE49SC5jb25jYXQoRCk7dGhpcy5fcHJvY2VzcyhOLGNlLCExKTt2YXIgZz1iLmxlbmd0aDtpZighdGhpcy5zeW1s'@;
put 'aW5rc1toZV18fCFHKWZvcih2YXIgQz0wO0M8ZztDKyspaWYoIi4iIT09YltDXS5jaGFyQXQoMCl8fHRoaXMuZG90KXt2YXIgUz1ILmNvbmNhdChiW0NdLEQpO3RoaXMuX3Byb2Nlc3MoUyxjZSwhMCk7dmFyIHY9SC5jb25jYXQoYltDXSx1ZSk7dGhpcy5fcHJvY2Vzcyh2LGNlLCEwKX19fSx0'@;
put 'ZS5wcm90b3R5cGUuX3Byb2Nlc3NTaW1wbGU9ZnVuY3Rpb24ob2Usc2Upe3ZhciBoZT10aGlzLl9zdGF0KG9lKTtpZih0aGlzLm1hdGNoZXNbc2VdfHwodGhpcy5tYXRjaGVzW3NlXT1PYmplY3QuY3JlYXRlKG51bGwpKSxoZSl7aWYob2UmJlYob2UpJiYhdGhpcy5ub21vdW50KXt2YXIgdWU9'@;
put 'L1tcL1xcXSQvLnRlc3Qob2UpOyIvIj09PW9lLmNoYXJBdCgwKT9vZT1FLmpvaW4odGhpcy5yb290LG9lKToob2U9RS5yZXNvbHZlKHRoaXMucm9vdCxvZSksdWUmJihvZSs9Ii8iKSl9IndpbjMyIj09PUsucGxhdGZvcm0mJihvZT1vZS5yZXBsYWNlKC9cXC9nLCIvIikpLHRoaXMuX2VtaXRN'@;
put 'YXRjaChzZSxvZSl9fSx0ZS5wcm90b3R5cGUuX3N0YXQ9ZnVuY3Rpb24ob2Upe3ZhciBzZT10aGlzLl9tYWtlQWJzKG9lKSxoZT0iLyI9PT1vZS5zbGljZSgtMSk7aWYob2UubGVuZ3RoPnRoaXMubWF4TGVuZ3RoKXJldHVybiExO2lmKCF0aGlzLnN0YXQmJlgodGhpcy5jYWNoZSxzZSkpe3Zh'@;
put 'ciB1ZT10aGlzLmNhY2hlW3NlXTtpZihBcnJheS5pc0FycmF5KHVlKSYmKHVlPSJESVIiKSwhaGV8fCJESVIiPT09dWUpcmV0dXJuIHVlO2lmKGhlJiYiRklMRSI9PT11ZSlyZXR1cm4hMX12YXIgY2U9dGhpcy5zdGF0Q2FjaGVbc2VdO2lmKCFjZSl7dmFyIEc7dHJ5e0c9dGhpcy5mcy5sc3Rh'@;
put 'dFN5bmMoc2UpfWNhdGNoKGIpe2lmKGImJigiRU5PRU5UIj09PWIuY29kZXx8IkVOT1RESVIiPT09Yi5jb2RlKSlyZXR1cm4gdGhpcy5zdGF0Q2FjaGVbc2VdPSExLCExfWlmKEcmJkcuaXNTeW1ib2xpY0xpbmsoKSl0cnl7Y2U9dGhpcy5mcy5zdGF0U3luYyhzZSl9Y2F0Y2h7Y2U9R31lbHNl'@;
put 'IGNlPUd9cmV0dXJuIHRoaXMuc3RhdENhY2hlW3NlXT1jZSx1ZT0hMCxjZSYmKHVlPWNlLmlzRGlyZWN0b3J5KCk/IkRJUiI6IkZJTEUiKSx0aGlzLmNhY2hlW3NlXT10aGlzLmNhY2hlW3NlXXx8dWUsKCFoZXx8IkZJTEUiIT09dWUpJiZ1ZX0sdGUucHJvdG90eXBlLl9tYXJrPWZ1bmN0aW9u'@;
put 'KG9lKXtyZXR1cm4gQi5tYXJrKHRoaXMsb2UpfSx0ZS5wcm90b3R5cGUuX21ha2VBYnM9ZnVuY3Rpb24ob2Upe3JldHVybiBCLm1ha2VBYnModGhpcyxvZSl9fSw3Mjk2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyMTApKCIlT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv'@;
put 'ciUiLCEwKTtpZih6KXRyeXt6KFtdLCJsZW5ndGgiKX1jYXRjaHt6PW51bGx9TS5leHBvcnRzPXp9LDY0NTg6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oUil7aWYobnVsbD09PVJ8fCJvYmplY3QiIT10eXBlb2YgUilyZXR1cm4gUjtpZihSIGluc3RhbmNlb2YgT2JqZWN0'@;
put 'KXZhciB6PXtfX3Byb3RvX186TyhSKX07ZWxzZSB6PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFIpLmZvckVhY2goZnVuY3Rpb24oSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHosSyxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y'@;
put 'KFIsSykpfSksen07dmFyIE89T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihSKXtyZXR1cm4gUi5fX3Byb3RvX199fSw3NzooTSxPLFIpPT57dmFyIHosSyxJPVIoNDE1NSksaz1SKDUxMDgpLEU9Uig1NDQzKSxqPVIoMjE2MSksVj1SKDg1MjApLEI9Uig2NDU4KSxZPVIoOTUzOSk7'@;
put 'ZnVuY3Rpb24gWCh1ZSxjZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLHose2dldDpmdW5jdGlvbigpe3JldHVybiBjZX19KX0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj8oej1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5xdWV1ZSIp'@;
put 'LEs9U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucHJldmlvdXMiKSk6KHo9Il9fX2dyYWNlZnVsLWZzLnF1ZXVlIixLPSJfX19ncmFjZWZ1bC1mcy5wcmV2aW91cyIpO3ZhciBVLHE9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIHRlKHVlKXtqKHVlKSx1ZS5ncmFjZWZ1bGlmeT10ZSx1ZS5jcmVhdGVS'@;
put 'ZWFkU3RyZWFtPWZ1bmN0aW9uKGZlLHhlKXtyZXR1cm4gbmV3IHVlLlJlYWRTdHJlYW0oZmUseGUpfSx1ZS5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbihmZSx4ZSl7cmV0dXJuIG5ldyB1ZS5Xcml0ZVN0cmVhbShmZSx4ZSl9O3ZhciBjZT11ZS5yZWFkRmlsZTt1ZS5yZWFkRmlsZT1mdW5j'@;
put 'dGlvbihmZSx4ZSxMZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHhlJiYoTGU9eGUseGU9bnVsbCksZnVuY3Rpb24gRmUoT2UsamUsV2UsS2Upe3JldHVybiBjZShPZSxqZSxmdW5jdGlvbihZZSl7IVllfHwiRU1GSUxFIiE9PVllLmNvZGUmJiJFTkZJTEUiIT09WWUuY29kZT8iZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgV2UmJldlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbRmUsW09lLGplLFdlXSxZZSxLZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUpfTt2YXIgRz11ZS53cml0ZUZpbGU7dWUud3JpdGVGaWxlPWZ1bmN0aW9uKGZlLHhlLExlLEZlKXtyZXR1cm4i'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgTGUmJihGZT1MZSxMZT1udWxsKSxmdW5jdGlvbiBPZShqZSxXZSxLZSxZZSxKZSl7cmV0dXJuIEcoamUsV2UsS2UsZnVuY3Rpb24obHQpeyFsdHx8IkVNRklMRSIhPT1sdC5jb2RlJiYiRU5GSUxFIiE9PWx0LmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIFllJiZZ'@;
put 'ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW09lLFtqZSxXZSxLZSxZZV0sbHQsSmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGZlLHhlLExlLEZlKX07dmFyIGI9dWUuYXBwZW5kRmlsZTtiJiYodWUuYXBwZW5kRmlsZT1mdW5jdGlvbihmZSx4ZSxMZSxGZSl7cmV0dXJuImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIExlJiYoRmU9TGUsTGU9bnVsbCksZnVuY3Rpb24gT2UoamUsV2UsS2UsWWUsSmUpe3JldHVybiBiKGplLFdlLEtlLGZ1bmN0aW9uKGx0KXshbHR8fCJFTUZJTEUiIT09bHQuY29kZSYmIkVORklMRSIhPT1sdC5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBZZSYmWWUuYXBw'@;
put 'bHkodGhpcyxhcmd1bWVudHMpOm9lKFtPZSxbamUsV2UsS2UsWWVdLGx0LEplfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShmZSx4ZSxMZSxGZSl9KTt2YXIgRD11ZS5jb3B5RmlsZTtEJiYodWUuY29weUZpbGU9ZnVuY3Rpb24oZmUseGUsTGUsRmUpe3JldHVybiJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBMZSYmKEZlPUxlLExlPTApLGZ1bmN0aW9uIE9lKGplLFdlLEtlLFllLEplKXtyZXR1cm4gRChqZSxXZSxLZSxmdW5jdGlvbihsdCl7IWx0fHwiRU1GSUxFIiE9PWx0LmNvZGUmJiJFTkZJTEUiIT09bHQuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgWWUmJlllLmFwcGx5KHRoaXMsYXJn'@;
put 'dW1lbnRzKTpvZShbT2UsW2plLFdlLEtlLFllXSxsdCxKZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUsRmUpfSk7dmFyIEg9dWUucmVhZGRpcjt1ZS5yZWFkZGlyPWZ1bmN0aW9uKGZlLHhlLExlKXsiZnVuY3Rpb24iPT10eXBlb2YgeGUmJihMZT14ZSx4ZT1udWxsKTt2'@;
put 'YXIgRmU9Ti50ZXN0KEkudmVyc2lvbik/ZnVuY3Rpb24oamUsV2UsS2UsWWUpe3JldHVybiBIKGplLE9lKGplLFdlLEtlLFllKSl9OmZ1bmN0aW9uKGplLFdlLEtlLFllKXtyZXR1cm4gSChqZSxXZSxPZShqZSxXZSxLZSxZZSkpfTtyZXR1cm4gRmUoZmUseGUsTGUpO2Z1bmN0aW9uIE9lKGpl'@;
put 'LFdlLEtlLFllKXtyZXR1cm4gZnVuY3Rpb24oSmUsbHQpeyFKZXx8IkVNRklMRSIhPT1KZS5jb2RlJiYiRU5GSUxFIiE9PUplLmNvZGU/KGx0JiZsdC5zb3J0JiZsdC5zb3J0KCksImZ1bmN0aW9uIj09dHlwZW9mIEtlJiZLZS5jYWxsKHRoaXMsSmUsbHQpKTpvZShbRmUsW2plLFdlLEtlXSxK'@;
put 'ZSxZZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9fX07dmFyIE49L152WzAtNV1cLi87aWYoInYwLjgiPT09SS52ZXJzaW9uLnN1YnN0cigwLDQpKXt2YXIgZz1WKHVlKTt3PWcuUmVhZFN0cmVhbSxKPWcuV3JpdGVTdHJlYW19dmFyIEM9dWUuUmVhZFN0cmVhbTtDJiYody5wcm90b3R5cGU9'@;
put 'T2JqZWN0LmNyZWF0ZShDLnByb3RvdHlwZSksdy5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3ZhciBmZT10aGlzO2RlKGZlLnBhdGgsZmUuZmxhZ3MsZmUubW9kZSxmdW5jdGlvbih4ZSxMZSl7eGU/KGZlLmF1dG9DbG9zZSYmZmUuZGVzdHJveSgpLGZlLmVtaXQoImVycm9yIix4ZSkpOihm'@;
put 'ZS5mZD1MZSxmZS5lbWl0KCJvcGVuIixMZSksZmUucmVhZCgpKX0pfSk7dmFyIFM9dWUuV3JpdGVTdHJlYW07UyYmKEoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLEoucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt2YXIgZmU9dGhpcztkZShmZS5wYXRoLGZlLmZsYWdz'@;
put 'LGZlLm1vZGUsZnVuY3Rpb24oeGUsTGUpe3hlPyhmZS5kZXN0cm95KCksZmUuZW1pdCgiZXJyb3IiLHhlKSk6KGZlLmZkPUxlLGZlLmVtaXQoIm9wZW4iLExlKSl9KX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiUmVhZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB3fSxzZXQ6'@;
put 'ZnVuY3Rpb24oZmUpe3c9ZmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLCJXcml0ZVN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBKfSxzZXQ6ZnVuY3Rpb24oZmUpe0o9ZmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwfSk7dmFyIHY9dztPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9LHNldDpmdW5jdGlvbihmZSl7dj1mZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgcD1KO2Z1bmN0aW9uIHcoZmUseGUpe3Jl'@;
put 'dHVybiB0aGlzIGluc3RhbmNlb2Ygdz8oQy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6dy5hcHBseShPYmplY3QuY3JlYXRlKHcucHJvdG90eXBlKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEooZmUseGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgSj8oUy5hcHBseSh0aGlzLGFyZ3VtZW50'@;
put 'cyksdGhpcyk6Si5hcHBseShPYmplY3QuY3JlYXRlKEoucHJvdG90eXBlKSxhcmd1bWVudHMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiRmlsZVdyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHB9LHNldDpmdW5jdGlvbihmZSl7cD1mZX0sZW51bWVyYWJsZTohMCxjb25m'@;
put 'aWd1cmFibGU6ITB9KTt2YXIgbmU9dWUub3BlbjtmdW5jdGlvbiBkZShmZSx4ZSxMZSxGZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIExlJiYoRmU9TGUsTGU9bnVsbCksZnVuY3Rpb24gT2UoamUsV2UsS2UsWWUsSmUpe3JldHVybiBuZShqZSxXZSxLZSxmdW5jdGlvbihsdCxQZSl7IWx0'@;
put 'fHwiRU1GSUxFIiE9PWx0LmNvZGUmJiJFTkZJTEUiIT09bHQuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgWWUmJlllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbT2UsW2plLFdlLEtlLFllXSxsdCxKZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUsRmUpfXJldHVybiB1'@;
put 'ZS5vcGVuPWRlLHVlfWZ1bmN0aW9uIG9lKHVlKXtxKCJFTlFVRVVFIix1ZVswXS5uYW1lLHVlWzFdKSxFW3pdLnB1c2godWUpLGhlKCl9ZnVuY3Rpb24gc2UoKXtmb3IodmFyIHVlPURhdGUubm93KCksY2U9MDtjZTxFW3pdLmxlbmd0aDsrK2NlKUVbel1bY2VdLmxlbmd0aD4yJiYoRVt6XVtj'@;
put 'ZV1bM109dWUsRVt6XVtjZV1bNF09dWUpO2hlKCl9ZnVuY3Rpb24gaGUoKXtpZihjbGVhclRpbWVvdXQoVSksVT12b2lkIDAsMCE9PUVbel0ubGVuZ3RoKXt2YXIgdWU9RVt6XS5zaGlmdCgpLGNlPXVlWzBdLEc9dWVbMV0sYj11ZVsyXSxEPXVlWzNdLEg9dWVbNF07aWYodm9pZCAwPT09RClx'@;
put 'KCJSRVRSWSIsY2UubmFtZSxHKSxjZS5hcHBseShudWxsLEcpO2Vsc2UgaWYoRGF0ZS5ub3coKS1EPj02ZTQpe3EoIlRJTUVPVVQiLGNlLm5hbWUsRyk7dmFyIE49Ry5wb3AoKTsiZnVuY3Rpb24iPT10eXBlb2YgTiYmTi5jYWxsKG51bGwsYil9ZWxzZXt2YXIgZz1EYXRlLm5vdygpLUgsQz1N'@;
put 'YXRoLm1heChILUQsMSk7Zz49TWF0aC5taW4oMS4yKkMsMTAwKT8ocSgiUkVUUlkiLGNlLm5hbWUsRyksY2UuYXBwbHkobnVsbCxHLmNvbmNhdChbRF0pKSk6RVt6XS5wdXNoKHVlKX12b2lkIDA9PT1VJiYoVT1zZXRUaW1lb3V0KGhlLDApKX19WS5kZWJ1Z2xvZz9xPVkuZGVidWdsb2coImdm'@;
put 'czQiKTovXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmKHE9ZnVuY3Rpb24oKXt2YXIgdWU9WS5mb3JtYXQuYXBwbHkoWSxhcmd1bWVudHMpO3VlPSJHRlM0OiAiK3VlLnNwbGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIiksay5lcnJvcih1ZSl9KSxFW3pdfHwoWChFLFIu'@;
put 'Z1t6XXx8W10pLEUuY2xvc2U9ZnVuY3Rpb24odWUpe2Z1bmN0aW9uIGNlKEcsYil7cmV0dXJuIHVlLmNhbGwoRSxHLGZ1bmN0aW9uKEQpe0R8fHNlKCksImZ1bmN0aW9uIj09dHlwZW9mIGImJmIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShj'@;
put 'ZSxLLHt2YWx1ZTp1ZX0pLGNlfShFLmNsb3NlKSxFLmNsb3NlU3luYz1mdW5jdGlvbih1ZSl7ZnVuY3Rpb24gY2UoRyl7dWUuYXBwbHkoRSxhcmd1bWVudHMpLHNlKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZSxLLHt2YWx1ZTp1ZX0pLGNlfShFLmNsb3NlU3luYyksL1xiZ2Zz'@;
put 'NFxiL2kudGVzdChJLmVudi5OT0RFX0RFQlVHfHwiIikmJkkub24oImV4aXQiLGZ1bmN0aW9uKCl7cShFW3pdKSxSKDkyODIpLmVxdWFsKEVbel0ubGVuZ3RoLDApfSkpLFIuZ1t6XXx8WChSLmcsRVt6XSksTS5leHBvcnRzPXRlKEIoRSkpLEkuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFM'@;
put 'X1BBVENIJiYhRS5fX3BhdGNoZWQmJihNLmV4cG9ydHM9dGUoRSksRS5fX3BhdGNoZWQ9ITApfSw4NTIwOihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9UigyODMwKS5TdHJlYW07TS5leHBvcnRzPWZ1bmN0aW9uKEkpe3JldHVybntSZWFkU3RyZWFtOmZ1bmN0aW9uIGsoRSxqKXtpZighKHRo'@;
put 'aXMgaW5zdGFuY2VvZiBrKSlyZXR1cm4gbmV3IGsoRSxqKTtLLmNhbGwodGhpcyk7dmFyIFY9dGhpczt0aGlzLnBhdGg9RSx0aGlzLmZkPW51bGwsdGhpcy5yZWFkYWJsZT0hMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmZsYWdzPSJyIix0aGlzLm1vZGU9NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUz'@;
put 'NixqPWp8fHt9O2Zvcih2YXIgQj1PYmplY3Qua2V5cyhqKSxZPTAsWD1CLmxlbmd0aDtZPFg7WSsrKXt2YXIgVT1CW1ldO3RoaXNbVV09altVXX1pZih0aGlzLmVuY29kaW5nJiZ0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpLHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIi'@;
put 'IT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2b2lkIDA9PT10aGlzLmVuZCl0aGlzLmVuZD0xLzA7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuZW5kKXRocm93IFR5cGVFcnJvcigiZW5kIG11c3QgYmUgYSBOdW1i'@;
put 'ZXIiKTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQiKTt0aGlzLnBvcz10aGlzLnN0YXJ0fW51bGw9PT10aGlzLmZkP0kub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24ocSxlZSl7aWYocSlyZXR1'@;
put 'cm4gVi5lbWl0KCJlcnJvciIscSksdm9pZChWLnJlYWRhYmxlPSExKTtWLmZkPWVlLFYuZW1pdCgib3BlbiIsZWUpLFYuX3JlYWQoKX0pOnoubmV4dFRpY2soZnVuY3Rpb24oKXtWLl9yZWFkKCl9KX0sV3JpdGVTdHJlYW06ZnVuY3Rpb24gayhFLGope2lmKCEodGhpcyBpbnN0YW5jZW9mIGsp'@;
put 'KXJldHVybiBuZXcgayhFLGopO0suY2FsbCh0aGlzKSx0aGlzLnBhdGg9RSx0aGlzLmZkPW51bGwsdGhpcy53cml0YWJsZT0hMCx0aGlzLmZsYWdzPSJ3Iix0aGlzLmVuY29kaW5nPSJiaW5hcnkiLHRoaXMubW9kZT00MzgsdGhpcy5ieXRlc1dyaXR0ZW49MCxqPWp8fHt9O2Zvcih2YXIgVj1P'@;
put 'YmplY3Qua2V5cyhqKSxCPTAsWT1WLmxlbmd0aDtCPFk7QisrKXt2YXIgWD1WW0JdO3RoaXNbWF09altYXX1pZih2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhp'@;
put 'cy5zdGFydDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFydH10aGlzLmJ1c3k9ITEsdGhpcy5fcXVldWU9W10sbnVsbD09PXRoaXMuZmQmJih0aGlzLl9vcGVuPUkub3Blbix0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRo'@;
put 'aXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9UigzMjA4KSxJPXouY3dkLGs9bnVsbCxFPXouZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNfHx6LnBsYXRmb3JtO3ouY3dkPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIGt8fChrPUkuY2FsbCh6KSksa307dHJ5e3ouY3dkKCl9Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiB6LmNoZGlyKXt2YXIgaj16LmNoZGlyO3ouY2hkaXI9ZnVuY3Rpb24oVil7az1udWxsLGouY2FsbCh6LFYpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5z'@;
put 'ZXRQcm90b3R5cGVPZih6LmNoZGlyLGopfU0uZXhwb3J0cz1mdW5jdGlvbihWKXt2YXIgc2Usb2U7ZnVuY3Rpb24gQihzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSxjZSl7cmV0dXJuIHNlLmNhbGwoVixoZSx1ZSxmdW5jdGlvbihHKXt0ZShHKSYmKEc9bnVsbCksY2UmJmNlLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBZKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlKXt0cnl7cmV0dXJuIHNlLmNhbGwoVixoZSx1ZSl9Y2F0Y2goY2Upe2lmKCF0ZShjZSkpdGhyb3cgY2V9fX1mdW5jdGlvbiBYKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlLGNl'@;
put 'LEcpe3JldHVybiBzZS5jYWxsKFYsaGUsdWUsY2UsZnVuY3Rpb24oYil7dGUoYikmJihiPW51bGwpLEcmJkcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFUoc2Upe3JldHVybiBzZSYmZnVuY3Rpb24oaGUsdWUsY2Upe3RyeXtyZXR1cm4gc2UuY2FsbChWLGhlLHVlLGNlKX1j'@;
put 'YXRjaChHKXtpZighdGUoRykpdGhyb3cgR319fWZ1bmN0aW9uIHEoc2Upe3JldHVybiBzZSYmZnVuY3Rpb24oaGUsdWUsY2Upe2Z1bmN0aW9uIEcoYixEKXtEJiYoRC51aWQ8MCYmKEQudWlkKz00Mjk0OTY3Mjk2KSxELmdpZDwwJiYoRC5naWQrPTQyOTQ5NjcyOTYpKSxjZSYmY2UuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB1ZSYmKGNlPXVlLHVlPW51bGwpLHVlP3NlLmNhbGwoVixoZSx1ZSxHKTpzZS5jYWxsKFYsaGUsRyl9fWZ1bmN0aW9uIGVlKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlKXt2YXIgY2U9dWU/c2UuY2FsbChWLGhl'@;
put 'LHVlKTpzZS5jYWxsKFYsaGUpO3JldHVybiBjZSYmKGNlLnVpZDwwJiYoY2UudWlkKz00Mjk0OTY3Mjk2KSxjZS5naWQ8MCYmKGNlLmdpZCs9NDI5NDk2NzI5NikpLGNlfX1mdW5jdGlvbiB0ZShzZSl7cmV0dXJuIXNlfHwiRU5PU1lTIj09PXNlLmNvZGV8fCEoei5nZXR1aWQmJjA9PT16Lmdl'@;
put 'dHVpZCgpfHwiRUlOVkFMIiE9PXNlLmNvZGUmJiJFUEVSTSIhPT1zZS5jb2RlKX1LLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmei52ZXJzaW9uLm1hdGNoKC9edjBcLjZcLlswLTJdfF52MFwuNVwuLykmJigoc2U9VikubGNobW9kPWZ1bmN0aW9uKGhlLHVlLGNlKXtzZS5vcGVuKGhl'@;
put 'LEsuT19XUk9OTFl8Sy5PX1NZTUxJTkssdWUsZnVuY3Rpb24oRyxiKXtHP2NlJiZjZShHKTpzZS5mY2htb2QoYix1ZSxmdW5jdGlvbihEKXtzZS5jbG9zZShiLGZ1bmN0aW9uKEgpe2NlJiZjZShEfHxIKX0pfSl9KX0sc2UubGNobW9kU3luYz1mdW5jdGlvbihoZSx1ZSl7dmFyIGNlLEc9c2Uu'@;
put 'b3BlblN5bmMoaGUsSy5PX1dST05MWXxLLk9fU1lNTElOSyx1ZSksYj0hMDt0cnl7Y2U9c2UuZmNobW9kU3luYyhHLHVlKSxiPSExfWZpbmFsbHl7aWYoYil0cnl7c2UuY2xvc2VTeW5jKEcpfWNhdGNoe31lbHNlIHNlLmNsb3NlU3luYyhHKX1yZXR1cm4gY2V9KSxWLmx1dGltZXN8fGZ1bmN0'@;
put 'aW9uKHNlKXtLLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmc2UuZnV0aW1lcz8oc2UubHV0aW1lcz1mdW5jdGlvbihoZSx1ZSxjZSxHKXtzZS5vcGVuKGhlLEsuT19TWU1MSU5LLGZ1bmN0aW9uKGIsRCl7Yj9HJiZHKGIpOnNlLmZ1dGltZXMoRCx1ZSxjZSxmdW5jdGlvbihIKXtzZS5j'@;
put 'bG9zZShELGZ1bmN0aW9uKE4pe0cmJkcoSHx8Til9KX0pfSl9LHNlLmx1dGltZXNTeW5jPWZ1bmN0aW9uKGhlLHVlLGNlKXt2YXIgRyxiPXNlLm9wZW5TeW5jKGhlLEsuT19TWU1MSU5LKSxEPSEwO3RyeXtHPXNlLmZ1dGltZXNTeW5jKGIsdWUsY2UpLEQ9ITF9ZmluYWxseXtpZihEKXRyeXtz'@;
put 'ZS5jbG9zZVN5bmMoYil9Y2F0Y2h7fWVsc2Ugc2UuY2xvc2VTeW5jKGIpfXJldHVybiBHfSk6c2UuZnV0aW1lcyYmKHNlLmx1dGltZXM9ZnVuY3Rpb24oaGUsdWUsY2UsRyl7RyYmei5uZXh0VGljayhHKX0sc2UubHV0aW1lc1N5bmM9ZnVuY3Rpb24oKXt9KX0oViksVi5jaG93bj1YKFYuY2hv'@;
put 'd24pLFYuZmNob3duPVgoVi5mY2hvd24pLFYubGNob3duPVgoVi5sY2hvd24pLFYuY2htb2Q9QihWLmNobW9kKSxWLmZjaG1vZD1CKFYuZmNobW9kKSxWLmxjaG1vZD1CKFYubGNobW9kKSxWLmNob3duU3luYz1VKFYuY2hvd25TeW5jKSxWLmZjaG93blN5bmM9VShWLmZjaG93blN5bmMpLFYu'@;
put 'bGNob3duU3luYz1VKFYubGNob3duU3luYyksVi5jaG1vZFN5bmM9WShWLmNobW9kU3luYyksVi5mY2htb2RTeW5jPVkoVi5mY2htb2RTeW5jKSxWLmxjaG1vZFN5bmM9WShWLmxjaG1vZFN5bmMpLFYuc3RhdD1xKFYuc3RhdCksVi5mc3RhdD1xKFYuZnN0YXQpLFYubHN0YXQ9cShWLmxzdGF0'@;
put 'KSxWLnN0YXRTeW5jPWVlKFYuc3RhdFN5bmMpLFYuZnN0YXRTeW5jPWVlKFYuZnN0YXRTeW5jKSxWLmxzdGF0U3luYz1lZShWLmxzdGF0U3luYyksVi5jaG1vZCYmIVYubGNobW9kJiYoVi5sY2htb2Q9ZnVuY3Rpb24oc2UsaGUsdWUpe3VlJiZ6Lm5leHRUaWNrKHVlKX0sVi5sY2htb2RTeW5j'@;
put 'PWZ1bmN0aW9uKCl7fSksVi5jaG93biYmIVYubGNob3duJiYoVi5sY2hvd249ZnVuY3Rpb24oc2UsaGUsdWUsY2Upe2NlJiZ6Lm5leHRUaWNrKGNlKX0sVi5sY2hvd25TeW5jPWZ1bmN0aW9uKCl7fSksIndpbjMyIj09PUUmJihWLnJlbmFtZT0iZnVuY3Rpb24iIT10eXBlb2YgVi5yZW5hbWU/'@;
put 'Vi5yZW5hbWU6ZnVuY3Rpb24oc2Upe2Z1bmN0aW9uIGhlKHVlLGNlLEcpe3ZhciBiPURhdGUubm93KCksRD0wO3NlKHVlLGNlLGZ1bmN0aW9uIEgoTil7aWYoTiYmKCJFQUNDRVMiPT09Ti5jb2RlfHwiRVBFUk0iPT09Ti5jb2RlKSYmRGF0ZS5ub3coKS1iPDZlNClyZXR1cm4gc2V0VGltZW91'@;
put 'dChmdW5jdGlvbigpe1Yuc3RhdChjZSxmdW5jdGlvbihnLEMpe2cmJiJFTk9FTlQiPT09Zy5jb2RlP3NlKHVlLGNlLEgpOkcoTil9KX0sRCksdm9pZChEPDEwMCYmKEQrPTEwKSk7RyYmRyhOKX0pfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZiho'@;
put 'ZSxzZSksaGV9KFYucmVuYW1lKSksVi5yZWFkPSJmdW5jdGlvbiIhPXR5cGVvZiBWLnJlYWQ/Vi5yZWFkOmZ1bmN0aW9uKHNlKXtmdW5jdGlvbiBoZSh1ZSxjZSxHLGIsRCxIKXt2YXIgTjtpZihIJiYiZnVuY3Rpb24iPT10eXBlb2YgSCl7dmFyIGc9MDtOPWZ1bmN0aW9uKEMsUyx2KXtpZihD'@;
put 'JiYiRUFHQUlOIj09PUMuY29kZSYmZzwxMClyZXR1cm4gZysrLHNlLmNhbGwoVix1ZSxjZSxHLGIsRCxOKTtILmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIHNlLmNhbGwoVix1ZSxjZSxHLGIsRCxOKX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90'@;
put 'eXBlT2YoaGUsc2UpLGhlfShWLnJlYWQpLFYucmVhZFN5bmM9ImZ1bmN0aW9uIiE9dHlwZW9mIFYucmVhZFN5bmM/Vi5yZWFkU3luYzoob2U9Vi5yZWFkU3luYyxmdW5jdGlvbihzZSxoZSx1ZSxjZSxHKXtmb3IodmFyIGI9MDs7KXRyeXtyZXR1cm4gb2UuY2FsbChWLHNlLGhlLHVlLGNlLEcp'@;
put 'fWNhdGNoKEQpe2lmKCJFQUdBSU4iPT09RC5jb2RlJiZiPDEwKXtiKys7Y29udGludWV9dGhyb3cgRH19KX19LDEwNDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDIxMCkoIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIiwhMCksSz1mdW5jdGlvbigpe2lmKHopdHJ5e3JldHVybiB6'@;
put 'KHt9LCJhIix7dmFsdWU6MX0pLCEwfWNhdGNoe3JldHVybiExfXJldHVybiExfTtLLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIUsoKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIDEhPT16KFtdLCJsZW5ndGgiLHt2YWx1ZToxfSkubGVuZ3RofWNhdGNoe3JldHVybiEw'@;
put 'fX0sTS5leHBvcnRzPUt9LDE0MDU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLEs9Uig1NDE5KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5'@;
put 'bWJvbCI9PXR5cGVvZiB6KCJmb28iKSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImJhciIpJiZLKCl9fSw1NDE5Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRP'@;
put 'd25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIE89e30sUj1TeW1ib2woInRlc3QiKSx6PU9iamVjdChSKTtpZigic3RyaW5nIj09dHlwZW9mIFJ8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3Rv'@;
put 'dHlwZS50b1N0cmluZy5jYWxsKFIpfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh6KSlyZXR1cm4hMTtmb3IoUiBpbiBPW1JdPTQyLE8pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5rZXlzJiYwIT09T2JqZWN0LmtleXMo'@;
put 'TykubGVuZ3RofHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJjAhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKS5sZW5ndGgpcmV0dXJuITE7dmFyIEs9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKTtpZigxIT09Sy5sZW5ndGh8fEtb'@;
put 'MF0hPT1SfHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKE8sUikpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ipe3ZhciBJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTyxSKTtp'@;
put 'Zig0MiE9PUkudmFsdWV8fCEwIT09SS5lbnVtZXJhYmxlKXJldHVybiExfXJldHVybiEwfX0sNjQxMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTQxOSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHooKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSw3NjQyOihNLE8sUik9'@;
put 'PnsidXNlIHN0cmljdCI7dmFyIHo9Uig4NjEyKTtNLmV4cG9ydHM9ei5jYWxsKEZ1bmN0aW9uLmNhbGwsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSl9LDMzNDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoODQ3MykuVHJhbnNmb3JtO2Z1'@;
put 'bmN0aW9uIEkoayl7Sy5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPXouYWxsb2NVbnNhZmUoayksdGhpcy5fYmxvY2tTaXplPWssdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFsaXplZD0hMX1SKDU3MTcpKEksSyksSS5wcm90b3R5cGUuX3RyYW5z'@;
put 'Zm9ybT1mdW5jdGlvbihrLEUsail7dmFyIFY9bnVsbDt0cnl7dGhpcy51cGRhdGUoayxFKX1jYXRjaChCKXtWPUJ9aihWKX0sSS5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKGspe3ZhciBFPW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChqKXtFPWp9ayhFKX0sSS5w'@;
put 'cm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGssRSl7aWYoZnVuY3Rpb24oVSxxKXtpZighei5pc0J1ZmZlcihVKSYmInN0cmluZyIhPXR5cGVvZiBVKXRocm93IG5ldyBUeXBlRXJyb3IoIkRhdGEgbXVzdCBiZSBhIHN0cmluZyBvciBhIGJ1ZmZlciIpfShrKSx0aGlzLl9maW5hbGl6ZWQpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt6LmlzQnVmZmVyKGspfHwoaz16LmZyb20oayxFKSk7Zm9yKHZhciBqPXRoaXMuX2Jsb2NrLFY9MDt0aGlzLl9ibG9ja09mZnNldCtrLmxlbmd0aC1WPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIEI9dGhpcy5fYmxvY2tP'@;
put 'ZmZzZXQ7Qjx0aGlzLl9ibG9ja1NpemU7KWpbQisrXT1rW1YrK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO1Y8ay5sZW5ndGg7KWpbdGhpcy5fYmxvY2tPZmZzZXQrK109a1tWKytdO2Zvcih2YXIgWT0wLFg9OCprLmxlbmd0aDtYPjA7KytZKXRoaXMuX2xlbmd0'@;
put 'aFtZXSs9WCwoWD10aGlzLl9sZW5ndGhbWV0vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW1ldLT00Mjk0OTY3Mjk2KlgpO3JldHVybiB0aGlzfSxJLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIp'@;
put 'fSxJLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oayl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7dGhpcy5fZmluYWxpemVkPSEwO3ZhciBFPXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9PWsmJihFPUUudG9TdHJpbmcoaykpLHRo'@;
put 'aXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIGo9MDtqPDQ7KytqKXRoaXMuX2xlbmd0aFtqXT0wO3JldHVybiBFfSxJLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxN'@;
put 'LmV4cG9ydHM9SX0sMzcxNTooTSxPLFIpPT57dmFyIHo9Tzt6LnV0aWxzPVIoNjQzNiksei5jb21tb249Uig1NzcyKSx6LnNoYT1SKDkwNDEpLHoucmlwZW1kPVIoMjk0OSksei5obWFjPVIoMjM0NCksei5zaGExPXouc2hhLnNoYTEsei5zaGEyNTY9ei5zaGEuc2hhMjU2LHouc2hhMjI0PXou'@;
put 'c2hhLnNoYTIyNCx6LnNoYTM4ND16LnNoYS5zaGEzODQsei5zaGE1MTI9ei5zaGEuc2hhNTEyLHoucmlwZW1kMTYwPXoucmlwZW1kLnJpcGVtZDE2MH0sNTc3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDk3NDYpO2Z1bmN0aW9uIEkoKXt0aGlzLnBlbmRpbmc9'@;
put 'bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5n'@;
put 'dGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj0iYmlnIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfU8uQmxvY2tIYXNoPUksSS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGssRSl7aWYoaz16'@;
put 'LnRvQXJyYXkoayxFKSx0aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZy5jb25jYXQoayk6ayx0aGlzLnBlbmRpbmdUb3RhbCs9ay5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt2YXIgaj0oaz10aGlzLnBlbmRpbmcpLmxlbmd0aCV0aGlzLl9k'@;
put 'ZWx0YTg7dGhpcy5wZW5kaW5nPWsuc2xpY2Uoay5sZW5ndGgtaixrLmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBlbmRpbmc9bnVsbCksaz16LmpvaW4zMihrLDAsay5sZW5ndGgtaix0aGlzLmVuZGlhbik7Zm9yKHZhciBWPTA7VjxrLmxlbmd0aDtWKz10aGlzLl9k'@;
put 'ZWx0YTMyKXRoaXMuX3VwZGF0ZShrLFYsVit0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sSS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSksSyhudWxsPT09dGhpcy5wZW5kaW5nKSx0aGlzLl9kaWdlc3Qoayl9LEkucHJvdG90'@;
put 'eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLnBlbmRpbmdUb3RhbCxFPXRoaXMuX2RlbHRhOCxqPUUtKGsrdGhpcy5wYWRMZW5ndGgpJUUsVj1uZXcgQXJyYXkoait0aGlzLnBhZExlbmd0aCk7VlswXT0xMjg7Zm9yKHZhciBCPTE7QjxqO0IrKylWW0JdPTA7aWYoazw8PTMsImJpZyI9'@;
put 'PT10aGlzLmVuZGlhbil7Zm9yKHZhciBZPTg7WTx0aGlzLnBhZExlbmd0aDtZKyspVltCKytdPTA7VltCKytdPTAsVltCKytdPTAsVltCKytdPTAsVltCKytdPTAsVltCKytdPWs+Pj4yNCYyNTUsVltCKytdPWs+Pj4xNiYyNTUsVltCKytdPWs+Pj44JjI1NSxWW0IrK109MjU1Jmt9ZWxzZSBm'@;
put 'b3IoVltCKytdPTI1NSZrLFZbQisrXT1rPj4+OCYyNTUsVltCKytdPWs+Pj4xNiYyNTUsVltCKytdPWs+Pj4yNCYyNTUsVltCKytdPTAsVltCKytdPTAsVltCKytdPTAsVltCKytdPTAsWT04O1k8dGhpcy5wYWRMZW5ndGg7WSsrKVZbQisrXT0wO3JldHVybiBWfX0sMjM0NDooTSxPLFIpPT57'@;
put 'InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDk3NDYpO2Z1bmN0aW9uIEkoayxFLGope2lmKCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSShrLEUsaik7dGhpcy5IYXNoPWssdGhpcy5ibG9ja1NpemU9ay5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9ay5vdXRTaXplLzgs'@;
put 'dGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KHoudG9BcnJheShFLGopKX1NLmV4cG9ydHM9SSxJLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihrKXtrLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKGs9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShrKS5kaWdlc3QoKSks'@;
put 'SyhrLmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgRT1rLmxlbmd0aDtFPHRoaXMuYmxvY2tTaXplO0UrKylrLnB1c2goMCk7Zm9yKEU9MDtFPGsubGVuZ3RoO0UrKylrW0VdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKGspLEU9MDtFPGsubGVuZ3Ro'@;
put 'O0UrKylrW0VdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKGspfSxJLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUoayxFKSx0aGlzfSxJLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMu'@;
put 'b3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KGspfX0sMjk0OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDU3NzIpLEk9ei5yb3RsMzIsaz16LnN1bTMyLEU9ei5zdW0zMl8zLGo9ei5zdW0zMl80LFY9Sy5CbG9ja0hh'@;
put 'c2g7ZnVuY3Rpb24gQigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQjtWLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24gWShzZSxo'@;
put 'ZSx1ZSxjZSl7cmV0dXJuIHNlPD0xNT9oZV51ZV5jZTpzZTw9MzE/aGUmdWV8fmhlJmNlOnNlPD00Nz8oaGV8fnVlKV5jZTpzZTw9NjM/aGUmY2V8dWUmfmNlOmhlXih1ZXx+Y2UpfWZ1bmN0aW9uIFgoc2Upe3JldHVybiBzZTw9MTU/MDpzZTw9MzE/MTUxODUwMDI0OTpzZTw9NDc/MTg1OTc3'@;
put 'NTM5MzpzZTw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4fWZ1bmN0aW9uIFUoc2Upe3JldHVybiBzZTw9MTU/MTM1MjgyOTkyNjpzZTw9MzE/MTU0ODYwMzY4NDpzZTw9NDc/MTgzNjA3MjY5MTpzZTw9NjM/MjA1Mzk5NDIxNzowfXouaW5oZXJpdHMoQixWKSxPLnJpcGVtZDE2MD1CLEIuYmxv'@;
put 'Y2tTaXplPTUxMixCLm91dFNpemU9MTYwLEIuaG1hY1N0cmVuZ3RoPTE5MixCLnBhZExlbmd0aD02NCxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHNlLGhlKXtmb3IodmFyIHVlPXRoaXMuaFswXSxjZT10aGlzLmhbMV0sRz10aGlzLmhbMl0sYj10aGlzLmhbM10sRD10aGlzLmhbNF0s'@;
put 'SD11ZSxOPWNlLGc9RyxDPWIsUz1ELHY9MDt2PDgwO3YrKyl7dmFyIHA9ayhJKGoodWUsWSh2LGNlLEcsYiksc2VbcVt2XStoZV0sWCh2KSksdGVbdl0pLEQpO3VlPUQsRD1iLGI9SShHLDEwKSxHPWNlLGNlPXAscD1rKEkoaihILFkoNzktdixOLGcsQyksc2VbZWVbdl0raGVdLFUodikpLG9l'@;
put 'W3ZdKSxTKSxIPVMsUz1DLEM9SShnLDEwKSxnPU4sTj1wfXA9RSh0aGlzLmhbMV0sRyxDKSx0aGlzLmhbMV09RSh0aGlzLmhbMl0sYixTKSx0aGlzLmhbMl09RSh0aGlzLmhbM10sRCxIKSx0aGlzLmhbM109RSh0aGlzLmhbNF0sdWUsTiksdGhpcy5oWzRdPUUodGhpcy5oWzBdLGNlLGcpLHRo'@;
put 'aXMuaFswXT1wfSxCLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHNlKXtyZXR1cm4iaGV4Ij09PXNlP3oudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOnouc3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgcT1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQs'@;
put 'MTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxlZT1bNSwxNCw3LDAsOSwy'@;
put 'LDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEz'@;
put 'LDE0LDAsMyw5LDExXSx0ZT1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQs'@;
put 'NSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sb2U9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUs'@;
put 'MTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSw5MDQxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Ty5zaGExPVIoNDc2MSksTy5zaGEyMjQ9Uig3OTkpLE8uc2hhMjU2PVIo'@;
put 'OTM0NCksTy5zaGEzODQ9Uig3NzIpLE8uc2hhNTEyPVIoNTkwMCl9LDQ3NjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1NzcyKSxJPVIoNzAzOCksaz16LnJvdGwzMixFPXouc3VtMzIsaj16LnN1bTMyXzUsVj1JLmZ0XzEsQj1LLkJsb2NrSGFzaCxZPVsxNTE4'@;
put 'NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBYKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWCkpcmV0dXJuIG5ldyBYO0IuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIw'@;
put 'XSx0aGlzLlc9bmV3IEFycmF5KDgwKX16LmluaGVyaXRzKFgsQiksTS5leHBvcnRzPVgsWC5ibG9ja1NpemU9NTEyLFgub3V0U2l6ZT0xNjAsWC5obWFjU3RyZW5ndGg9ODAsWC5wYWRMZW5ndGg9NjQsWC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihVLHEpe2Zvcih2YXIgZWU9dGhpcy5X'@;
put 'LHRlPTA7dGU8MTY7dGUrKyllZVt0ZV09VVtxK3RlXTtmb3IoO3RlPGVlLmxlbmd0aDt0ZSsrKWVlW3RlXT1rKGVlW3RlLTNdXmVlW3RlLThdXmVlW3RlLTE0XV5lZVt0ZS0xNl0sMSk7dmFyIG9lPXRoaXMuaFswXSxzZT10aGlzLmhbMV0saGU9dGhpcy5oWzJdLHVlPXRoaXMuaFszXSxjZT10'@;
put 'aGlzLmhbNF07Zm9yKHRlPTA7dGU8ZWUubGVuZ3RoO3RlKyspe3ZhciBHPX5+KHRlLzIwKSxiPWooayhvZSw1KSxWKEcsc2UsaGUsdWUpLGNlLGVlW3RlXSxZW0ddKTtjZT11ZSx1ZT1oZSxoZT1rKHNlLDMwKSxzZT1vZSxvZT1ifXRoaXMuaFswXT1FKHRoaXMuaFswXSxvZSksdGhpcy5oWzFd'@;
put 'PUUodGhpcy5oWzFdLHNlKSx0aGlzLmhbMl09RSh0aGlzLmhbMl0saGUpLHRoaXMuaFszXT1FKHRoaXMuaFszXSx1ZSksdGhpcy5oWzRdPUUodGhpcy5oWzRdLGNlKX0sWC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihVKXtyZXR1cm4iaGV4Ij09PVU/ei50b0hleDMyKHRoaXMuaCwiYmln'@;
put 'Iik6ei5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3OTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig5MzQ0KTtmdW5jdGlvbiBJKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJO0suY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0'@;
put 'MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfXouaW5oZXJpdHMoSSxLKSxNLmV4cG9ydHM9SSxJLmJsb2NrU2l6ZT01MTIsSS5vdXRTaXplPTIyNCxJLmhtYWNTdHJlbmd0aD0xOTIsSS5wYWRMZW5ndGg9NjQs'@;
put 'SS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihrKXtyZXR1cm4iaGV4Ij09PWs/ei50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTp6LnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0sOTM0NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1S'@;
put 'KDU3NzIpLEk9Uig3MDM4KSxrPVIoOTc0NiksRT16LnN1bTMyLGo9ei5zdW0zMl80LFY9ei5zdW0zMl81LEI9SS5jaDMyLFk9SS5tYWozMixYPUkuczBfMjU2LFU9SS5zMV8yNTYscT1JLmcwXzI1NixlZT1JLmcxXzI1Nix0ZT1LLkJsb2NrSGFzaCxvZT1bMTExNjM1MjQwOCwxODk5NDQ3NDQx'@;
put 'LDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQw'@;
put 'MjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcy'@;
put 'MDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0'@;
put 'LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5'@;
put 'MzI1Mjk4XTtmdW5jdGlvbiBzZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHNlKSlyZXR1cm4gbmV3IHNlO3RlLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1'@;
put 'OTIyNV0sdGhpcy5rPW9lLHRoaXMuVz1uZXcgQXJyYXkoNjQpfXouaW5oZXJpdHMoc2UsdGUpLE0uZXhwb3J0cz1zZSxzZS5ibG9ja1NpemU9NTEyLHNlLm91dFNpemU9MjU2LHNlLmhtYWNTdHJlbmd0aD0xOTIsc2UucGFkTGVuZ3RoPTY0LHNlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u'@;
put 'KGhlLHVlKXtmb3IodmFyIGNlPXRoaXMuVyxHPTA7RzwxNjtHKyspY2VbR109aGVbdWUrR107Zm9yKDtHPGNlLmxlbmd0aDtHKyspY2VbR109aihlZShjZVtHLTJdKSxjZVtHLTddLHEoY2VbRy0xNV0pLGNlW0ctMTZdKTt2YXIgYj10aGlzLmhbMF0sRD10aGlzLmhbMV0sSD10aGlzLmhbMl0s'@;
put 'Tj10aGlzLmhbM10sZz10aGlzLmhbNF0sQz10aGlzLmhbNV0sUz10aGlzLmhbNl0sdj10aGlzLmhbN107Zm9yKGsodGhpcy5rLmxlbmd0aD09PWNlLmxlbmd0aCksRz0wO0c8Y2UubGVuZ3RoO0crKyl7dmFyIHA9Vih2LFUoZyksQihnLEMsUyksdGhpcy5rW0ddLGNlW0ddKSx3PUUoWChiKSxZ'@;
put 'KGIsRCxIKSk7dj1TLFM9QyxDPWcsZz1FKE4scCksTj1ILEg9RCxEPWIsYj1FKHAsdyl9dGhpcy5oWzBdPUUodGhpcy5oWzBdLGIpLHRoaXMuaFsxXT1FKHRoaXMuaFsxXSxEKSx0aGlzLmhbMl09RSh0aGlzLmhbMl0sSCksdGhpcy5oWzNdPUUodGhpcy5oWzNdLE4pLHRoaXMuaFs0XT1FKHRo'@;
put 'aXMuaFs0XSxnKSx0aGlzLmhbNV09RSh0aGlzLmhbNV0sQyksdGhpcy5oWzZdPUUodGhpcy5oWzZdLFMpLHRoaXMuaFs3XT1FKHRoaXMuaFs3XSx2KX0sc2UucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oaGUpe3JldHVybiJoZXgiPT09aGU/ei50b0hleDMyKHRoaXMuaCwiYmlnIik6ei5z'@;
put 'cGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3NzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1OTAwKTtmdW5jdGlvbiBJKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJO0suY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAz'@;
put 'MiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfXouaW5oZXJpdHMo'@;
put 'SSxLKSxNLmV4cG9ydHM9SSxJLmJsb2NrU2l6ZT0xMDI0LEkub3V0U2l6ZT0zODQsSS5obWFjU3RyZW5ndGg9MTkyLEkucGFkTGVuZ3RoPTEyOCxJLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGspe3JldHVybiJoZXgiPT09az96LnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWci'@;
put 'KTp6LnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDU5MDA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1NzcyKSxJPVIoOTc0Niksaz16LnJvdHI2NF9oaSxFPXoucm90cjY0X2xvLGo9ei5zaHI2NF9oaSxWPXouc2hyNjRfbG8sQj16LnN1bTY0'@;
put 'LFk9ei5zdW02NF9oaSxYPXouc3VtNjRfbG8sVT16LnN1bTY0XzRfaGkscT16LnN1bTY0XzRfbG8sZWU9ei5zdW02NF81X2hpLHRlPXouc3VtNjRfNV9sbyxvZT1LLkJsb2NrSGFzaCxzZT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2'@;
put 'NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIy'@;
put 'NTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEz'@;
put 'OSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3'@;
put 'NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5'@;
put 'OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0'@;
put 'NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwz'@;
put 'MTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1'@;
put 'NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIw'@;
put 'NDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwz'@;
put 'MjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAy'@;
put 'MzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGhlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaGUpKXJldHVybiBuZXcgaGU7b2UuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3'@;
put 'NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1zZSx0aGlzLlc9bmV3IEFycmF5KDE2MCl9ZnVuY3Rpb24gdWUodyxKLG5lLGRlLGZlKXt2YXIgeGU9'@;
put 'dyZuZV5+dyZmZTtyZXR1cm4geGU8MCYmKHhlKz00Mjk0OTY3Mjk2KSx4ZX1mdW5jdGlvbiBjZSh3LEosbmUsZGUsZmUseGUpe3ZhciBMZT1KJmRlXn5KJnhlO3JldHVybiBMZTwwJiYoTGUrPTQyOTQ5NjcyOTYpLExlfWZ1bmN0aW9uIEcodyxKLG5lLGRlLGZlKXt2YXIgeGU9dyZuZV53JmZl'@;
put 'Xm5lJmZlO3JldHVybiB4ZTwwJiYoeGUrPTQyOTQ5NjcyOTYpLHhlfWZ1bmN0aW9uIGIodyxKLG5lLGRlLGZlLHhlKXt2YXIgTGU9SiZkZV5KJnhlXmRlJnhlO3JldHVybiBMZTwwJiYoTGUrPTQyOTQ5NjcyOTYpLExlfWZ1bmN0aW9uIEQodyxKKXt2YXIgbmU9ayh3LEosMjgpXmsoSix3LDIp'@;
put 'XmsoSix3LDcpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIEgodyxKKXt2YXIgbmU9RSh3LEosMjgpXkUoSix3LDIpXkUoSix3LDcpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIE4odyxKKXt2YXIgbmU9ayh3LEosMTQpXmsodyxK'@;
put 'LDE4KV5rKEosdyw5KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBnKHcsSil7dmFyIG5lPUUodyxKLDE0KV5FKHcsSiwxOCleRShKLHcsOSk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gQyh3LEope3ZhciBuZT1rKHcsSiwxKV5r'@;
put 'KHcsSiw4KV5qKHcsSiw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBTKHcsSil7dmFyIG5lPUUodyxKLDEpXkUodyxKLDgpXlYodyxKLDcpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIHYodyxKKXt2YXIgbmU9ayh3LEosMTkp'@;
put 'XmsoSix3LDI5KV5qKHcsSiw2KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBwKHcsSil7dmFyIG5lPUUodyxKLDE5KV5FKEosdywyOSleVih3LEosNik7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ei5pbmhlcml0cyhoZSxvZSksTS5leHBvcnRz'@;
put 'PWhlLGhlLmJsb2NrU2l6ZT0xMDI0LGhlLm91dFNpemU9NTEyLGhlLmhtYWNTdHJlbmd0aD0xOTIsaGUucGFkTGVuZ3RoPTEyOCxoZS5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbih3LEope2Zvcih2YXIgbmU9dGhpcy5XLGRlPTA7ZGU8MzI7ZGUrKyluZVtkZV09d1tKK2RlXTtm'@;
put 'b3IoO2RlPG5lLmxlbmd0aDtkZSs9Mil7dmFyIGZlPXYobmVbZGUtNF0sbmVbZGUtM10pLHhlPXAobmVbZGUtNF0sbmVbZGUtM10pLExlPW5lW2RlLTE0XSxGZT1uZVtkZS0xM10sT2U9QyhuZVtkZS0zMF0sbmVbZGUtMjldKSxqZT1TKG5lW2RlLTMwXSxuZVtkZS0yOV0pLFdlPW5lW2RlLTMy'@;
put 'XSxLZT1uZVtkZS0zMV07bmVbZGVdPVUoZmUseGUsTGUsRmUsT2UsamUsV2UsS2UpLG5lW2RlKzFdPXEoZmUseGUsTGUsRmUsT2UsamUsV2UsS2UpfX0saGUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odyxKKXt0aGlzLl9wcmVwYXJlQmxvY2sodyxKKTt2YXIgbmU9dGhpcy5XLGRlPXRo'@;
put 'aXMuaFswXSxmZT10aGlzLmhbMV0seGU9dGhpcy5oWzJdLExlPXRoaXMuaFszXSxGZT10aGlzLmhbNF0sT2U9dGhpcy5oWzVdLGplPXRoaXMuaFs2XSxXZT10aGlzLmhbN10sS2U9dGhpcy5oWzhdLFllPXRoaXMuaFs5XSxKZT10aGlzLmhbMTBdLGx0PXRoaXMuaFsxMV0sUGU9dGhpcy5oWzEy'@;
put 'XSxiZT10aGlzLmhbMTNdLEFlPXRoaXMuaFsxNF0sVGU9dGhpcy5oWzE1XTtJKHRoaXMuay5sZW5ndGg9PT1uZS5sZW5ndGgpO2Zvcih2YXIgcWU9MDtxZTxuZS5sZW5ndGg7cWUrPTIpe3ZhciBYZT1BZSxVZT1UZSxodD1OKEtlLFllKSxNZT1nKEtlLFllKSxEZT11ZShLZSwwLEplLDAsUGUp'@;
put 'LHplPWNlKDAsWWUsMCxsdCwwLGJlKSxpdD10aGlzLmtbcWVdLHV0PXRoaXMua1txZSsxXSxNdD1uZVtxZV0sSHQ9bmVbcWUrMV0sUHQ9ZWUoWGUsVWUsaHQsTWUsRGUsemUsaXQsdXQsTXQsSHQpLG9uPXRlKFhlLFVlLGh0LE1lLERlLHplLGl0LHV0LE10LEh0KTtYZT1EKGRlLGZlKSxVZT1I'@;
put 'KGRlLGZlKSxodD1HKGRlLDAseGUsMCxGZSksTWU9YigwLGZlLDAsTGUsMCxPZSk7dmFyIENuPVkoWGUsVWUsaHQsTWUpLFV0PVgoWGUsVWUsaHQsTWUpO0FlPVBlLFRlPWJlLFBlPUplLGJlPWx0LEplPUtlLGx0PVllLEtlPVkoamUsV2UsUHQsb24pLFllPVgoV2UsV2UsUHQsb24pLGplPUZl'@;
put 'LFdlPU9lLEZlPXhlLE9lPUxlLHhlPWRlLExlPWZlLGRlPVkoUHQsb24sQ24sVXQpLGZlPVgoUHQsb24sQ24sVXQpfUIodGhpcy5oLDAsZGUsZmUpLEIodGhpcy5oLDIseGUsTGUpLEIodGhpcy5oLDQsRmUsT2UpLEIodGhpcy5oLDYsamUsV2UpLEIodGhpcy5oLDgsS2UsWWUpLEIodGhpcy5o'@;
put 'LDEwLEplLGx0KSxCKHRoaXMuaCwxMixQZSxiZSksQih0aGlzLmgsMTQsQWUsVGUpfSxoZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/ei50b0hleDMyKHRoaXMuaCwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3MDM4OihNLE8sUik9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gSyhFLGosVil7cmV0dXJuIEUmal5+RSZWfWZ1bmN0aW9uIEkoRSxqLFYpe3JldHVybiBFJmpeRSZWXmomVn1mdW5jdGlvbiBrKEUsaixWKXtyZXR1cm4gRV5qXlZ9Ty5mdF8xPWZ1bmN0aW9uKEUsaixWLEIpe3JldHVy'@;
put 'biAwPT09RT9LKGosVixCKToxPT09RXx8Mz09PUU/ayhqLFYsQik6Mj09PUU/SShqLFYsQik6dm9pZCAwfSxPLmNoMzI9SyxPLm1hajMyPUksTy5wMzI9ayxPLnMwXzI1Nj1mdW5jdGlvbihFKXtyZXR1cm4geihFLDIpXnooRSwxMyleeihFLDIyKX0sTy5zMV8yNTY9ZnVuY3Rpb24oRSl7cmV0'@;
put 'dXJuIHooRSw2KV56KEUsMTEpXnooRSwyNSl9LE8uZzBfMjU2PWZ1bmN0aW9uKEUpe3JldHVybiB6KEUsNyleeihFLDE4KV5FPj4+M30sTy5nMV8yNTY9ZnVuY3Rpb24oRSl7cmV0dXJuIHooRSwxNyleeihFLDE5KV5FPj4+MTB9fSw2NDM2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9'@;
put 'Uig5NzQ2KSxLPVIoNTcxNyk7ZnVuY3Rpb24gSShWLEIpe3JldHVybiA1NTI5Nj09KDY0NTEyJlYuY2hhckNvZGVBdChCKSkmJiEoQjwwfHxCKzE+PVYubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZWLmNoYXJDb2RlQXQoQisxKSl9ZnVuY3Rpb24gayhWKXtyZXR1cm4oVj4+PjI0fFY+Pj44JjY1'@;
put 'MjgwfFY8PDgmMTY3MTE2ODB8KDI1NSZWKTw8MjQpPj4+MH1mdW5jdGlvbiBFKFYpe3JldHVybiAxPT09Vi5sZW5ndGg/IjAiK1Y6Vn1mdW5jdGlvbiBqKFYpe3JldHVybiA3PT09Vi5sZW5ndGg/IjAiK1Y6Nj09PVYubGVuZ3RoPyIwMCIrVjo1PT09Vi5sZW5ndGg/IjAwMCIrVjo0PT09Vi5s'@;
put 'ZW5ndGg/IjAwMDAiK1Y6Mz09PVYubGVuZ3RoPyIwMDAwMCIrVjoyPT09Vi5sZW5ndGg/IjAwMDAwMCIrVjoxPT09Vi5sZW5ndGg/IjAwMDAwMDAiK1Y6Vn1PLmluaGVyaXRzPUssTy50b0FycmF5PWZ1bmN0aW9uKFYsQil7aWYoQXJyYXkuaXNBcnJheShWKSlyZXR1cm4gVi5zbGljZSgpO2lm'@;
put 'KCFWKXJldHVybltdO3ZhciBZPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgVilpZihCKXtpZigiaGV4Ij09PUIpZm9yKChWPVYucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoVj0iMCIrViksVT0wO1U8Vi5sZW5ndGg7VSs9MilZLnB1c2gocGFyc2VJbnQoVltVXStW'@;
put 'W1UrMV0sMTYpKX1lbHNlIGZvcih2YXIgWD0wLFU9MDtVPFYubGVuZ3RoO1UrKyl7dmFyIHE9Vi5jaGFyQ29kZUF0KFUpO3E8MTI4P1lbWCsrXT1xOnE8MjA0OD8oWVtYKytdPXE+PjZ8MTkyLFlbWCsrXT02MyZxfDEyOCk6SShWLFUpPyhxPTY1NTM2KygoMTAyMyZxKTw8MTApKygxMDIzJlYu'@;
put 'Y2hhckNvZGVBdCgrK1UpKSxZW1grK109cT4+MTh8MjQwLFlbWCsrXT1xPj4xMiY2M3wxMjgsWVtYKytdPXE+PjYmNjN8MTI4LFlbWCsrXT02MyZxfDEyOCk6KFlbWCsrXT1xPj4xMnwyMjQsWVtYKytdPXE+PjYmNjN8MTI4LFlbWCsrXT02MyZxfDEyOCl9ZWxzZSBmb3IoVT0wO1U8Vi5sZW5n'@;
put 'dGg7VSsrKVlbVV09MHxWW1VdO3JldHVybiBZfSxPLnRvSGV4PWZ1bmN0aW9uKFYpe2Zvcih2YXIgQj0iIixZPTA7WTxWLmxlbmd0aDtZKyspQis9RShWW1ldLnRvU3RyaW5nKDE2KSk7cmV0dXJuIEJ9LE8uaHRvbmw9ayxPLnRvSGV4MzI9ZnVuY3Rpb24oVixCKXtmb3IodmFyIFk9IiIsWD0w'@;
put 'O1g8Vi5sZW5ndGg7WCsrKXt2YXIgVT1WW1hdOyJsaXR0bGUiPT09QiYmKFU9ayhVKSksWSs9aihVLnRvU3RyaW5nKDE2KSl9cmV0dXJuIFl9LE8uemVybzI9RSxPLnplcm84PWosTy5qb2luMzI9ZnVuY3Rpb24oVixCLFksWCl7dmFyIFU9WS1CO3ooVSU0PT0wKTtmb3IodmFyIHE9bmV3IEFy'@;
put 'cmF5KFUvNCksZWU9MCx0ZT1CO2VlPHEubGVuZ3RoO2VlKyssdGUrPTQpcVtlZV09KCJiaWciPT09WD9WW3RlXTw8MjR8Vlt0ZSsxXTw8MTZ8Vlt0ZSsyXTw8OHxWW3RlKzNdOlZbdGUrM108PDI0fFZbdGUrMl08PDE2fFZbdGUrMV08PDh8Vlt0ZV0pPj4+MDtyZXR1cm4gcX0sTy5zcGxpdDMy'@;
put 'PWZ1bmN0aW9uKFYsQil7Zm9yKHZhciBZPW5ldyBBcnJheSg0KlYubGVuZ3RoKSxYPTAsVT0wO1g8Vi5sZW5ndGg7WCsrLFUrPTQpe3ZhciBxPVZbWF07ImJpZyI9PT1CPyhZW1VdPXE+Pj4yNCxZW1UrMV09cT4+PjE2JjI1NSxZW1UrMl09cT4+PjgmMjU1LFlbVSszXT0yNTUmcSk6KFlbVSsz'@;
put 'XT1xPj4+MjQsWVtVKzJdPXE+Pj4xNiYyNTUsWVtVKzFdPXE+Pj44JjI1NSxZW1VdPTI1NSZxKX1yZXR1cm4gWX0sTy5yb3RyMzI9ZnVuY3Rpb24oVixCKXtyZXR1cm4gVj4+PkJ8Vjw8MzItQn0sTy5yb3RsMzI9ZnVuY3Rpb24oVixCKXtyZXR1cm4gVjw8QnxWPj4+MzItQn0sTy5zdW0zMj1m'@;
put 'dW5jdGlvbihWLEIpe3JldHVybiBWK0I+Pj4wfSxPLnN1bTMyXzM9ZnVuY3Rpb24oVixCLFkpe3JldHVybiBWK0IrWT4+PjB9LE8uc3VtMzJfND1mdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gVitCK1krWD4+PjB9LE8uc3VtMzJfNT1mdW5jdGlvbihWLEIsWSxYLFUpe3JldHVybiBWK0IrWStY'@;
put 'K1U+Pj4wfSxPLnN1bTY0PWZ1bmN0aW9uKFYsQixZLFgpe3ZhciBxPVgrVltCKzFdPj4+MDtWW0JdPShxPFg/MTowKStZK1ZbQl0+Pj4wLFZbQisxXT1xfSxPLnN1bTY0X2hpPWZ1bmN0aW9uKFYsQixZLFgpe3JldHVybihCK1g+Pj4wPEI/MTowKStWK1k+Pj4wfSxPLnN1bTY0X2xvPWZ1bmN0'@;
put 'aW9uKFYsQixZLFgpe3JldHVybiBCK1g+Pj4wfSxPLnN1bTY0XzRfaGk9ZnVuY3Rpb24oVixCLFksWCxVLHEsZWUsdGUpe3ZhciBvZT0wLHNlPUI7cmV0dXJuIG9lKz0oc2U9c2UrWD4+PjApPEI/MTowLG9lKz0oc2U9c2UrcT4+PjApPHE/MTowLFYrWStVK2VlKyhvZSs9KHNlPXNlK3RlPj4+'@;
put 'MCk8dGU/MTowKT4+PjB9LE8uc3VtNjRfNF9sbz1mdW5jdGlvbihWLEIsWSxYLFUscSxlZSx0ZSl7cmV0dXJuIEIrWCtxK3RlPj4+MH0sTy5zdW02NF81X2hpPWZ1bmN0aW9uKFYsQixZLFgsVSxxLGVlLHRlLG9lLHNlKXt2YXIgaGU9MCx1ZT1CO3JldHVybiBoZSs9KHVlPXVlK1g+Pj4wKTxC'@;
put 'PzE6MCxoZSs9KHVlPXVlK3E+Pj4wKTxxPzE6MCxoZSs9KHVlPXVlK3RlPj4+MCk8dGU/MTowLFYrWStVK2VlK29lKyhoZSs9KHVlPXVlK3NlPj4+MCk8c2U/MTowKT4+PjB9LE8uc3VtNjRfNV9sbz1mdW5jdGlvbihWLEIsWSxYLFUscSxlZSx0ZSxvZSxzZSl7cmV0dXJuIEIrWCtxK3RlK3Nl'@;
put 'Pj4+MH0sTy5yb3RyNjRfaGk9ZnVuY3Rpb24oVixCLFkpe3JldHVybihCPDwzMi1ZfFY+Pj5ZKT4+PjB9LE8ucm90cjY0X2xvPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4oVjw8MzItWXxCPj4+WSk+Pj4wfSxPLnNocjY0X2hpPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4gVj4+Pll9LE8uc2hyNjRf'@;
put 'bG89ZnVuY3Rpb24oVixCLFkpe3JldHVybihWPDwzMi1ZfEI+Pj5ZKT4+PjB9fSwyMTU2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzE1KSxLPVIoNDUwNCksST1SKDk3NDYpO2Z1bmN0aW9uIGsoRSl7aWYoISh0aGlzIGluc3RhbmNlb2YgaykpcmV0dXJuIG5ldyBrKEUpO3Ro'@;
put 'aXMuaGFzaD1FLmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhRS5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT1FLm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZh'@;
put 'bD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBqPUsudG9BcnJheShFLmVudHJvcHksRS5lbnRyb3B5RW5jfHwiaGV4IiksVj1LLnRvQXJyYXkoRS5ub25jZSxFLm5vbmNlRW5jfHwiaGV4IiksQj1LLnRvQXJyYXkoRS5wZXJzLEUucGVyc0VuY3x8ImhleCIpO0koai5sZW5ndGg+'@;
put 'PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoaixWLEIpfU0uZXhwb3J0cz1rLGsucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEUsaixWKXt2YXIgQj1FLmNvbmNhdChqKS5jb25j'@;
put 'YXQoVik7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgWT0wO1k8dGhpcy5WLmxlbmd0aDtZKyspdGhpcy5LW1ldPTAsdGhpcy5WW1ldPTE7dGhpcy5fdXBkYXRlKEIpLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVz'@;
put 'ZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxrLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgei5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxrLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEUpe3ZhciBqPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRh'@;
put 'dGUoWzBdKTtFJiYoaj1qLnVwZGF0ZShFKSksdGhpcy5LPWouZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxFJiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoRSkuZGlnZXN0KCksdGhpcy5W'@;
put 'PXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LGsucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihFLGosVixCKXsic3RyaW5nIiE9dHlwZW9mIGomJihCPVYsVj1qLGo9bnVsbCksRT1LLnRvQXJyYXkoRSxqKSxWPUsudG9BcnJheShWLEIpLEkoRS5sZW5ndGg+PXRoaXMu'@;
put 'bWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShFLmNvbmNhdChWfHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxrLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihFLGosVixCKXtpZih0aGlz'@;
put 'Ll9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgaiYmKEI9VixWPWosaj1udWxsKSxWJiYoVj1LLnRvQXJyYXkoVixCfHwiaGV4IiksdGhpcy5fdXBkYXRlKFYpKTtmb3IodmFyIFk9W107WS5s'@;
put 'ZW5ndGg8RTspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxZPVkuY29uY2F0KHRoaXMuVik7dmFyIFg9WS5zbGljZSgwLEUpO3JldHVybiB0aGlzLl91cGRhdGUoViksdGhpcy5fcmVzZWVkKyssSy5lbmNvZGUoWCxqKX19LDY0NTooTSxPKT0+e08ucmVhZD1m'@;
put 'dW5jdGlvbihSLHosSyxJLGspe3ZhciBFLGosVj04KmstSS0xLEI9KDE8PFYpLTEsWT1CPj4xLFg9LTcsVT1LP2stMTowLHE9Sz8tMToxLGVlPVJbeitVXTtmb3IoVSs9cSxFPWVlJigxPDwtWCktMSxlZT4+PS1YLFgrPVY7WD4wO0U9MjU2KkUrUlt6K1VdLFUrPXEsWC09OCk7Zm9yKGo9RSYo'@;
put 'MTw8LVgpLTEsRT4+PS1YLFgrPUk7WD4wO2o9MjU2KmorUlt6K1VdLFUrPXEsWC09OCk7aWYoMD09PUUpRT0xLVk7ZWxzZXtpZihFPT09QilyZXR1cm4gaj9OYU46MS8wKihlZT8tMToxKTtqKz1NYXRoLnBvdygyLEkpLEUtPVl9cmV0dXJuKGVlPy0xOjEpKmoqTWF0aC5wb3coMixFLUkpfSxP'@;
put 'LndyaXRlPWZ1bmN0aW9uKFIseixLLEksayxFKXt2YXIgaixWLEIsWT04KkUtay0xLFg9KDE8PFkpLTEsVT1YPj4xLHE9MjM9PT1rP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxlZT1JPzA6RS0xLHRlPUk/MTotMSxvZT16PDB8fDA9PT16JiYxL3o8MD8xOjA7Zm9yKHo9TWF0'@;
put 'aC5hYnMoeiksaXNOYU4oeil8fHo9PT0xLzA/KFY9aXNOYU4oeik/MTowLGo9WCk6KGo9TWF0aC5mbG9vcihNYXRoLmxvZyh6KS9NYXRoLkxOMikseiooQj1NYXRoLnBvdygyLC1qKSk8MSYmKGotLSxCKj0yKSwoeis9aitVPj0xP3EvQjpxKk1hdGgucG93KDIsMS1VKSkqQj49MiYmKGorKyxC'@;
put 'Lz0yKSxqK1U+PVg/KFY9MCxqPVgpOmorVT49MT8oVj0oeipCLTEpKk1hdGgucG93KDIsayksais9VSk6KFY9eipNYXRoLnBvdygyLFUtMSkqTWF0aC5wb3coMixrKSxqPTApKTtrPj04O1JbSytlZV09MjU1JlYsZWUrPXRlLFYvPTI1NixrLT04KTtmb3Ioaj1qPDxrfFYsWSs9aztZPjA7UltL'@;
put 'K2VlXT0yNTUmaixlZSs9dGUsai89MjU2LFktPTgpO1JbSytlZS10ZV18PTEyOCpvZX19LDc4NDQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDI0NzkpLEk9T2JqZWN0LmNyZWF0ZShudWxsKSxrPVIoNzc4KTtNLmV4cG9ydHM9SyhmdW5jdGlvbihFLGope3JldHVybiBJW0VdPyhJW0Vd'@;
put 'LnB1c2goaiksbnVsbCk6KElbRV09W2pdLFY9RSxrKGZ1bmN0aW9uIEIoKXt2YXIgWT1JW1ZdLFg9WS5sZW5ndGgsVT1mdW5jdGlvbihlZSl7Zm9yKHZhciB0ZT1lZS5sZW5ndGgsb2U9W10sc2U9MDtzZTx0ZTtzZSsrKW9lW3NlXT1lZVtzZV07cmV0dXJuIG9lfShhcmd1bWVudHMpO3RyeXtm'@;
put 'b3IodmFyIHE9MDtxPFg7cSsrKVlbcV0uYXBwbHkobnVsbCxVKX1maW5hbGx5e1kubGVuZ3RoPlg/KFkuc3BsaWNlKDAsWCksei5uZXh0VGljayhmdW5jdGlvbigpe0IuYXBwbHkobnVsbCxVKX0pKTpkZWxldGUgSVtWXX19KSk7dmFyIFZ9KX0sNTcxNzpNPT57TS5leHBvcnRzPSJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE8sUil7UiYmKE8uc3VwZXJfPVIsTy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOk8sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpmdW5j'@;
put 'dGlvbihPLFIpe2lmKFIpe08uc3VwZXJfPVI7dmFyIHo9ZnVuY3Rpb24oKXt9O3oucHJvdG90eXBlPVIucHJvdG90eXBlLE8ucHJvdG90eXBlPW5ldyB6LE8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU99fX0sMjU4NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQxMCkoKSxLPVIo'@;
put 'MTkyNCkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxJPWZ1bmN0aW9uKGope3JldHVybiEoeiYmaiYmIm9iamVjdCI9PXR5cGVvZiBqJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gaikmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT09SyhqKX0saz1mdW5jdGlvbihqKXtyZXR1cm4hIUkoail8'@;
put 'fG51bGwhPT1qJiYib2JqZWN0Ij09dHlwZW9mIGomJiJudW1iZXIiPT10eXBlb2Ygai5sZW5ndGgmJmoubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iIT09SyhqKSYmIltvYmplY3QgRnVuY3Rpb25dIj09PUsoai5jYWxsZWUpfSxFPWZ1bmN0aW9uKCl7cmV0dXJuIEkoYXJndW1lbnRzKX0o'@;
put 'KTtJLmlzTGVnYWN5QXJndW1lbnRzPWssTS5leHBvcnRzPUU/STprfSw1MzIwOk09PnsidXNlIHN0cmljdCI7dmFyIE8sUix6PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxLPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIEsmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e089T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBSfX0pLFI9e30sSyhmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLE8pfWNh'@;
put 'dGNoKFUpe1UhPT1SJiYoSz1udWxsKX1lbHNlIEs9bnVsbDt2YXIgST0vXlxzKmNsYXNzXGIvLGs9ZnVuY3Rpb24oVSl7dHJ5e3ZhciBxPXouY2FsbChVKTtyZXR1cm4gSS50ZXN0KHEpfWNhdGNoe3JldHVybiExfX0sRT1mdW5jdGlvbihVKXt0cnl7cmV0dXJuIWsoVSkmJih6LmNhbGwoVSks'@;
put 'ITApfWNhdGNoe3JldHVybiExfX0saj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsQj0hKDAgaW5bLF0pLFk9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7'@;
put 'dmFyIFg9ZG9jdW1lbnQuYWxsO2ouY2FsbChYKT09PWouY2FsbChkb2N1bWVudC5hbGwpJiYoWT1mdW5jdGlvbihVKXtpZigoQnx8IVUpJiYodm9pZCAwPT09VXx8Im9iamVjdCI9PXR5cGVvZiBVKSl0cnl7dmFyIHE9ai5jYWxsKFUpO3JldHVybigiW29iamVjdCBIVE1MQWxsQ29sbGVjdGlv'@;
put 'bl0iPT09cXx8IltvYmplY3QgSFRNTCBkb2N1bWVudC5hbGwgY2xhc3NdIj09PXF8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1xfHwiW29iamVjdCBPYmplY3RdIj09PXEpJiZudWxsPT1VKCIiKX1jYXRjaHt9cmV0dXJuITF9KX1NLmV4cG9ydHM9Sz9mdW5jdGlvbihVKXtpZihZKFUp'@;
put 'KXJldHVybiEwO2lmKCFVfHwiZnVuY3Rpb24iIT10eXBlb2YgVSYmIm9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO3RyeXtLKFUsbnVsbCxPKX1jYXRjaChxKXtpZihxIT09UilyZXR1cm4hMX1yZXR1cm4hayhVKSYmRShVKX06ZnVuY3Rpb24oVSl7aWYoWShVKSlyZXR1cm4hMDtpZighVXx8'@;
put 'ImZ1bmN0aW9uIiE9dHlwZW9mIFUmJiJvYmplY3QiIT10eXBlb2YgVSlyZXR1cm4hMTtpZihWKXJldHVybiBFKFUpO2lmKGsoVSkpcmV0dXJuITE7dmFyIHE9ai5jYWxsKFUpO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PXEmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1x'@;
put 'JiYhL15cW29iamVjdCBIVE1MLy50ZXN0KHEpKSYmRShVKX19LDg2NjI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsST1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsaz0vXlxzKig/OmZ1bmN0aW9uKT9cKi8sRT1SKDY0MTApKCks'@;
put 'aj1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7TS5leHBvcnRzPWZ1bmN0aW9uKFYpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBWKXJldHVybiExO2lmKGsudGVzdChJLmNhbGwoVikpKXJldHVybiEwO2lmKCFFKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PT1LLmNhbGwoVik7aWYo'@;
put 'IWopcmV0dXJuITE7aWYodm9pZCAwPT09eil7dmFyIEI9ZnVuY3Rpb24oKXtpZighRSlyZXR1cm4hMTt0cnl7cmV0dXJuIEZ1bmN0aW9uKCJyZXR1cm4gZnVuY3Rpb24qKCkge30iKSgpfWNhdGNoe319KCk7ej0hIUImJmooQil9cmV0dXJuIGooVik9PT16fX0sODYxMTpNPT57InVzZSBzdHJp'@;
put 'Y3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4gTyE9T319LDM2MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTU1OSksSz1SKDQyODkpLEk9Uig4NjExKSxrPVIoOTQxNSksRT1SKDMxOTQpLGo9eihrKCksTnVtYmVyKTtLKGose2dldFBvbHlmaWxsOmssaW1wbGVtZW50'@;
put 'YXRpb246SSxzaGltOkV9KSxNLmV4cG9ydHM9an0sOTQxNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODYxMSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIuaXNOYU4oImEiKT9OdW1iZXIuaXNOYU46'@;
put 'en19LDMxOTQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyODkpLEs9Uig5NDE1KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST1LKCk7cmV0dXJuIHooTnVtYmVyLHtpc05hTjpJfSx7aXNOYU46ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOIT09SX19KSxJfX0sNTY5'@;
put 'MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDAyOSksSz1SKDMwODMpLEk9UigxOTI0KSxrPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxFPVIoNjQxMCkoKSxqPVIoNzI5NiksVj10eXBlb2YgZ2xvYmFsVGhpcz4idSI/Ui5nOmdsb2JhbFRoaXMsQj1LKCksWT1JKCJB'@;
put 'cnJheS5wcm90b3R5cGUuaW5kZXhPZiIsITApfHxmdW5jdGlvbihlZSx0ZSl7Zm9yKHZhciBvZT0wO29lPGVlLmxlbmd0aDtvZSs9MSlpZihlZVtvZV09PT10ZSlyZXR1cm4gb2U7cmV0dXJuLTF9LFg9SSgiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLFU9e30scT1PYmplY3QuZ2V0UHJvdG90'@;
put 'eXBlT2Y7RSYmaiYmcSYmeihCLGZ1bmN0aW9uKGVlKXt2YXIgdGU9bmV3IFZbZWVdO2lmKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB0ZSl7dmFyIG9lPXEodGUpLHNlPWoob2UsU3ltYm9sLnRvU3RyaW5nVGFnKTtpZighc2Upe3ZhciBoZT1xKG9lKTtzZT1qKGhlLFN5bWJvbC50b1N0cmluZ1Rh'@;
put 'Zyl9VVtlZV09c2UuZ2V0fX0pLE0uZXhwb3J0cz1mdW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9dHlwZW9mIGVlKXJldHVybiExO2lmKCFFfHwhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBlZSkpe3ZhciB0ZT1YKGsoZWUpLDgsLTEpO3JldHVybiBZKEIsdGUpPi0xfXJldHVybiEhaiYm'@;
put 'KG9lPWVlLHNlPSExLHooVSxmdW5jdGlvbihoZSx1ZSl7aWYoIXNlKXRyeXtzZT1oZS5jYWxsKG9lKT09PXVlfWNhdGNoe319KSxzZSk7dmFyIG9lLHNlfX0sNjgxMzooTSxPLFIpPT57bGV0IHo7dHJ5e3o9Uig3Nyl9Y2F0Y2h7ej1SKDQxMjkpfWNvbnN0IEs9Uig4OTgxKSx7c3RyaW5naWZ5'@;
put 'Okksc3RyaXBCb206a309Uig2NzgwKSxFPXtyZWFkRmlsZTpLLmZyb21Qcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGo9YWUoZnVuY3Rpb24qKFYsQj17fSl7InN0cmluZyI9PXR5cGVvZiBCJiYoQj17ZW5jb2Rpbmc6Qn0pO2NvbnN0IFk9Qi5mc3x8eixYPSEoInRocm93cyJpbiBCKXx8Qi50aHJv'@;
put 'd3M7bGV0IFUscT15aWVsZCBLLmZyb21DYWxsYmFjayhZLnJlYWRGaWxlKShWLEIpO3E9ayhxKTt0cnl7VT1KU09OLnBhcnNlKHEsQj9CLnJldml2ZXI6bnVsbCl9Y2F0Y2goZWUpe2lmKFgpdGhyb3cgZWUubWVzc2FnZT1gJHtWfTogJHtlZS5tZXNzYWdlfWAsZWU7cmV0dXJuIG51bGx9cmV0'@;
put 'dXJuIFV9KTtyZXR1cm4gZnVuY3Rpb24oVil7cmV0dXJuIGouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkscmVhZEZpbGVTeW5jOmZ1bmN0aW9uKGosVj17fSl7InN0cmluZyI9PXR5cGVvZiBWJiYoVj17ZW5jb2Rpbmc6Vn0pO2NvbnN0IEI9Vi5mc3x8eixZPSEoInRocm93cyJpbiBWKXx8'@;
put 'Vi50aHJvd3M7dHJ5e2xldCBYPUIucmVhZEZpbGVTeW5jKGosVik7cmV0dXJuIFg9ayhYKSxKU09OLnBhcnNlKFgsVi5yZXZpdmVyKX1jYXRjaChYKXtpZihZKXRocm93IFgubWVzc2FnZT1gJHtqfTogJHtYLm1lc3NhZ2V9YCxYO3JldHVybiBudWxsfX0sd3JpdGVGaWxlOksuZnJvbVByb21p'@;
put 'c2UoZnVuY3Rpb24oKXt2YXIgaj1hZShmdW5jdGlvbiooVixCLFk9e30pe2NvbnN0IFg9WS5mc3x8eixVPUkoQixZKTt5aWVsZCBLLmZyb21DYWxsYmFjayhYLndyaXRlRmlsZSkoVixVLFkpfSk7cmV0dXJuIGZ1bmN0aW9uKFYsQil7cmV0dXJuIGouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0o'@;
put 'KSksd3JpdGVGaWxlU3luYzpmdW5jdGlvbihqLFYsQj17fSl7Y29uc3QgWT1CLmZzfHx6LFg9SShWLEIpO3JldHVybiBZLndyaXRlRmlsZVN5bmMoaixYLEIpfX07TS5leHBvcnRzPUV9LDY3ODA6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyO00uZXhwb3J0cz17c3RyaW5naWZ5OmZ1'@;
put 'bmN0aW9uKEsse0VPTDpJPSJcbiIsZmluYWxFT0w6az0hMCxyZXBsYWNlcjpFPW51bGwsc3BhY2VzOmp9PXt9KXtjb25zdCBWPWs/SToiIjtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoSyxFLGopLnJlcGxhY2UoL1xuL2csSSkrVn0sc3RyaXBCb206ZnVuY3Rpb24oSyl7cmV0dXJuIHouaXNCdWZm'@;
put 'ZXIoSykmJihLPUsudG9TdHJpbmcoInV0ZjgiKSksSy5yZXBsYWNlKC9eXHVGRUZGLywiIil9fX0sNjI0NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooail7dGhpcy5tZXNzYWdlPWp9Ui5yKE8pLFIuZChPLHtJbnZhbGlkVG9rZW5FcnJvcjooKT0+ayxkZWZhdWx0OigpPT5F'@;
put 'fSksKHoucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZENoYXJhY3RlckVycm9yIjt2YXIgSz10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmF0b2ImJndpbmRvdy5hdG9iLmJpbmQod2luZG93KXx8ZnVuY3Rpb24oail7dmFyIFY9U3RyaW5nKGopLnJlcGxhY2UoLz0rJC8sIiIp'@;
put 'O2lmKFYubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IHooIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7Zm9yKHZhciBCLFksWD0wLFU9MCxxPSIiO1k9Vi5jaGFyQXQoVSsrKTt+WSYmKEI9WCU0PzY0KkIrWTpZLFgrKyU0'@;
put 'KT9xKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZCPj4oLTIqWCY2KSk6MClZPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuaW5kZXhPZihZKTtyZXR1cm4gcX07ZnVuY3Rpb24gayhqKXt0aGlzLm1lc3NhZ2U9an0o'@;
put 'ay5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkVG9rZW5FcnJvciI7Y29uc3QgRT1mdW5jdGlvbihqLFYpe2lmKCJzdHJpbmciIT10eXBlb2Ygail0aHJvdyBuZXcgaygiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQiKTt2YXIgQj0hMD09PShWPVZ8fHt9KS5oZWFkZXI/MDoxO3Ry'@;
put 'eXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBJKGope3ZhciBWPWoucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKFYubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztjYXNlIDI6Vis9Ij09IjticmVhaztjYXNlIDM6Vis9Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ci'@;
put 'SWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoSyhWKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihZLFgpe3ZhciBVPVguY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gVS5sZW5ndGg8MiYmKFU9IjAi'@;
put 'K1UpLCIlIitVfSkpfWNhdGNoe3JldHVybiBLKFYpfX0oai5zcGxpdCgiLiIpW0JdKSl9Y2F0Y2goWSl7dGhyb3cgbmV3IGsoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK1kubWVzc2FnZSl9fX0sMjMxODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTcxNyksSz1SKDMzNDkp'@;
put 'LEk9Uig5NTA5KS5CdWZmZXIsaz1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIEUoKXtLLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gaihVLHEpe3JldHVybiBVPDxx'@;
put 'fFU+Pj4zMi1xfWZ1bmN0aW9uIFYoVSxxLGVlLHRlLG9lLHNlLGhlKXtyZXR1cm4gaihVKyhxJmVlfH5xJnRlKStvZStzZXwwLGhlKStxfDB9ZnVuY3Rpb24gQihVLHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiBqKFUrKHEmdGV8ZWUmfnRlKStvZStzZXwwLGhlKStxfDB9ZnVuY3Rpb24gWShV'@;
put 'LHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiBqKFUrKHFeZWVedGUpK29lK3NlfDAsaGUpK3F8MH1mdW5jdGlvbiBYKFUscSxlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIGooVSsoZWVeKHF8fnRlKSkrb2Urc2V8MCxoZSkrcXwwfXooRSxLKSxFLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7'@;
put 'Zm9yKHZhciBVPWsscT0wO3E8MTY7KytxKVVbcV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpxKTt2YXIgZWU9dGhpcy5fYSx0ZT10aGlzLl9iLG9lPXRoaXMuX2Msc2U9dGhpcy5fZDtlZT1WKGVlLHRlLG9lLHNlLFVbMF0sMzYxNDA5MDM2MCw3KSxzZT1WKHNlLGVlLHRlLG9lLFVbMV0s'@;
put 'MzkwNTQwMjcxMCwxMiksb2U9VihvZSxzZSxlZSx0ZSxVWzJdLDYwNjEwNTgxOSwxNyksdGU9Vih0ZSxvZSxzZSxlZSxVWzNdLDMyNTA0NDE5NjYsMjIpLGVlPVYoZWUsdGUsb2Usc2UsVVs0XSw0MTE4NTQ4Mzk5LDcpLHNlPVYoc2UsZWUsdGUsb2UsVVs1XSwxMjAwMDgwNDI2LDEyKSxvZT1W'@;
put 'KG9lLHNlLGVlLHRlLFVbNl0sMjgyMTczNTk1NSwxNyksdGU9Vih0ZSxvZSxzZSxlZSxVWzddLDQyNDkyNjEzMTMsMjIpLGVlPVYoZWUsdGUsb2Usc2UsVVs4XSwxNzcwMDM1NDE2LDcpLHNlPVYoc2UsZWUsdGUsb2UsVVs5XSwyMzM2NTUyODc5LDEyKSxvZT1WKG9lLHNlLGVlLHRlLFVbMTBd'@;
put 'LDQyOTQ5MjUyMzMsMTcpLHRlPVYodGUsb2Usc2UsZWUsVVsxMV0sMjMwNDU2MzEzNCwyMiksZWU9VihlZSx0ZSxvZSxzZSxVWzEyXSwxODA0NjAzNjgyLDcpLHNlPVYoc2UsZWUsdGUsb2UsVVsxM10sNDI1NDYyNjE5NSwxMiksb2U9VihvZSxzZSxlZSx0ZSxVWzE0XSwyNzkyOTY1MDA2LDE3'@;
put 'KSxlZT1CKGVlLHRlPVYodGUsb2Usc2UsZWUsVVsxNV0sMTIzNjUzNTMyOSwyMiksb2Usc2UsVVsxXSw0MTI5MTcwNzg2LDUpLHNlPUIoc2UsZWUsdGUsb2UsVVs2XSwzMjI1NDY1NjY0LDkpLG9lPUIob2Usc2UsZWUsdGUsVVsxMV0sNjQzNzE3NzEzLDE0KSx0ZT1CKHRlLG9lLHNlLGVlLFVb'@;
put 'MF0sMzkyMTA2OTk5NCwyMCksZWU9QihlZSx0ZSxvZSxzZSxVWzVdLDM1OTM0MDg2MDUsNSksc2U9QihzZSxlZSx0ZSxvZSxVWzEwXSwzODAxNjA4Myw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbMTVdLDM2MzQ0ODg5NjEsMTQpLHRlPUIodGUsb2Usc2UsZWUsVVs0XSwzODg5NDI5NDQ4LDIwKSxl'@;
put 'ZT1CKGVlLHRlLG9lLHNlLFVbOV0sNTY4NDQ2NDM4LDUpLHNlPUIoc2UsZWUsdGUsb2UsVVsxNF0sMzI3NTE2MzYwNiw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbM10sNDEwNzYwMzMzNSwxNCksdGU9Qih0ZSxvZSxzZSxlZSxVWzhdLDExNjM1MzE1MDEsMjApLGVlPUIoZWUsdGUsb2Usc2UsVVsx'@;
put 'M10sMjg1MDI4NTgyOSw1KSxzZT1CKHNlLGVlLHRlLG9lLFVbMl0sNDI0MzU2MzUxMiw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbN10sMTczNTMyODQ3MywxNCksZWU9WShlZSx0ZT1CKHRlLG9lLHNlLGVlLFVbMTJdLDIzNjgzNTk1NjIsMjApLG9lLHNlLFVbNV0sNDI5NDU4ODczOCw0KSxzZT1Z'@;
put 'KHNlLGVlLHRlLG9lLFVbOF0sMjI3MjM5MjgzMywxMSksb2U9WShvZSxzZSxlZSx0ZSxVWzExXSwxODM5MDMwNTYyLDE2KSx0ZT1ZKHRlLG9lLHNlLGVlLFVbMTRdLDQyNTk2NTc3NDAsMjMpLGVlPVkoZWUsdGUsb2Usc2UsVVsxXSwyNzYzOTc1MjM2LDQpLHNlPVkoc2UsZWUsdGUsb2UsVVs0'@;
put 'XSwxMjcyODkzMzUzLDExKSxvZT1ZKG9lLHNlLGVlLHRlLFVbN10sNDEzOTQ2OTY2NCwxNiksdGU9WSh0ZSxvZSxzZSxlZSxVWzEwXSwzMjAwMjM2NjU2LDIzKSxlZT1ZKGVlLHRlLG9lLHNlLFVbMTNdLDY4MTI3OTE3NCw0KSxzZT1ZKHNlLGVlLHRlLG9lLFVbMF0sMzkzNjQzMDA3NCwxMSks'@;
put 'b2U9WShvZSxzZSxlZSx0ZSxVWzNdLDM1NzI0NDUzMTcsMTYpLHRlPVkodGUsb2Usc2UsZWUsVVs2XSw3NjAyOTE4OSwyMyksZWU9WShlZSx0ZSxvZSxzZSxVWzldLDM2NTQ2MDI4MDksNCksc2U9WShzZSxlZSx0ZSxvZSxVWzEyXSwzODczMTUxNDYxLDExKSxvZT1ZKG9lLHNlLGVlLHRlLFVb'@;
put 'MTVdLDUzMDc0MjUyMCwxNiksZWU9WChlZSx0ZT1ZKHRlLG9lLHNlLGVlLFVbMl0sMzI5OTYyODY0NSwyMyksb2Usc2UsVVswXSw0MDk2MzM2NDUyLDYpLHNlPVgoc2UsZWUsdGUsb2UsVVs3XSwxMTI2ODkxNDE1LDEwKSxvZT1YKG9lLHNlLGVlLHRlLFVbMTRdLDI4Nzg2MTIzOTEsMTUpLHRl'@;
put 'PVgodGUsb2Usc2UsZWUsVVs1XSw0MjM3NTMzMjQxLDIxKSxlZT1YKGVlLHRlLG9lLHNlLFVbMTJdLDE3MDA0ODU1NzEsNiksc2U9WChzZSxlZSx0ZSxvZSxVWzNdLDIzOTk5ODA2OTAsMTApLG9lPVgob2Usc2UsZWUsdGUsVVsxMF0sNDI5MzkxNTc3MywxNSksdGU9WCh0ZSxvZSxzZSxlZSxV'@;
put 'WzFdLDIyNDAwNDQ0OTcsMjEpLGVlPVgoZWUsdGUsb2Usc2UsVVs4XSwxODczMzEzMzU5LDYpLHNlPVgoc2UsZWUsdGUsb2UsVVsxNV0sNDI2NDM1NTU1MiwxMCksb2U9WChvZSxzZSxlZSx0ZSxVWzZdLDI3MzQ3Njg5MTYsMTUpLHRlPVgodGUsb2Usc2UsZWUsVVsxM10sMTMwOTE1MTY0OSwy'@;
put 'MSksZWU9WChlZSx0ZSxvZSxzZSxVWzRdLDQxNDk0NDQyMjYsNiksc2U9WChzZSxlZSx0ZSxvZSxVWzExXSwzMTc0NzU2OTE3LDEwKSxvZT1YKG9lLHNlLGVlLHRlLFVbMl0sNzE4Nzg3MjU5LDE1KSx0ZT1YKHRlLG9lLHNlLGVlLFVbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9h'@;
put 'K2VlfDAsdGhpcy5fYj10aGlzLl9iK3RlfDAsdGhpcy5fYz10aGlzLl9jK29lfDAsdGhpcy5fZD10aGlzLl9kK3NlfDB9LEUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlz'@;
put 'Ll9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMu'@;
put 'X2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgVT1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gVS53cml0ZUludDMyTEUodGhpcy5fYSwwKSxVLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLFUud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCks'@;
put 'VS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksVX0sTS5leHBvcnRzPUV9LDMwNDc6KE0sTyxSKT0+e3ZhciB6PVIoNjI0MCksSz1SKDk5MzEpO2Z1bmN0aW9uIEkoayl7dGhpcy5yYW5kPWt8fG5ldyBLLlJhbmR9TS5leHBvcnRzPUksSS5jcmVhdGU9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBJ'@;
put 'KGspfSxJLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKGspe3ZhciBFPWsuYml0TGVuZ3RoKCksaj1NYXRoLmNlaWwoRS84KTtkb3t2YXIgVj1uZXcgeih0aGlzLnJhbmQuZ2VuZXJhdGUoaikpfXdoaWxlKFYuY21wKGspPj0wKTtyZXR1cm4gVn0sSS5wcm90b3R5cGUuX3JhbmRyYW5n'@;
put 'ZT1mdW5jdGlvbihrLEUpe3ZhciBqPUUuc3ViKGspO3JldHVybiBrLmFkZCh0aGlzLl9yYW5kYmVsb3coaikpfSxJLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKGssRSxqKXt2YXIgVj1rLmJpdExlbmd0aCgpLEI9ei5tb250KGspLFk9bmV3IHooMSkudG9SZWQoQik7RXx8KEU9TWF0aC5tYXgo'@;
put 'MSxWLzQ4fDApKTtmb3IodmFyIFg9ay5zdWJuKDEpLFU9MDshWC50ZXN0bihVKTtVKyspO2Zvcih2YXIgcT1rLnNocm4oVSksZWU9WC50b1JlZChCKTtFPjA7RS0tKXt2YXIgdGU9dGhpcy5fcmFuZHJhbmdlKG5ldyB6KDIpLFgpO2omJmoodGUpO3ZhciBvZT10ZS50b1JlZChCKS5yZWRQb3co'@;
put 'cSk7aWYoMCE9PW9lLmNtcChZKSYmMCE9PW9lLmNtcChlZSkpe2Zvcih2YXIgc2U9MTtzZTxVO3NlKyspe2lmKDA9PT0ob2U9b2UucmVkU3FyKCkpLmNtcChZKSlyZXR1cm4hMTtpZigwPT09b2UuY21wKGVlKSlicmVha31pZihzZT09PVUpcmV0dXJuITF9fXJldHVybiEwfSxJLnByb3RvdHlw'@;
put 'ZS5nZXREaXZpc29yPWZ1bmN0aW9uKGssRSl7dmFyIGo9ay5iaXRMZW5ndGgoKSxWPXoubW9udChrKSxCPW5ldyB6KDEpLnRvUmVkKFYpO0V8fChFPU1hdGgubWF4KDEsai80OHwwKSk7Zm9yKHZhciBZPWsuc3VibigxKSxYPTA7IVkudGVzdG4oWCk7WCsrKTtmb3IodmFyIFU9ay5zaHJuKFgp'@;
put 'LHE9WS50b1JlZChWKTtFPjA7RS0tKXt2YXIgZWU9dGhpcy5fcmFuZHJhbmdlKG5ldyB6KDIpLFkpLHRlPWsuZ2NkKGVlKTtpZigwIT09dGUuY21wbigxKSlyZXR1cm4gdGU7dmFyIG9lPWVlLnRvUmVkKFYpLnJlZFBvdyhVKTtpZigwIT09b2UuY21wKEIpJiYwIT09b2UuY21wKHEpKXtmb3Io'@;
put 'dmFyIHNlPTE7c2U8WDtzZSsrKXtpZigwPT09KG9lPW9lLnJlZFNxcigpKS5jbXAoQikpcmV0dXJuIG9lLmZyb21SZWQoKS5zdWJuKDEpLmdjZChrKTtpZigwPT09b2UuY21wKHEpKWJyZWFrfWlmKHNlPT09WClyZXR1cm4ob2U9b2UucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZChr'@;
put 'KX19cmV0dXJuITF9fSw2MjQwOmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9u'@;
put 'KCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5y'@;
put 'ZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRv'@;
put 'dzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDY2MTkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24g'@;
put 'QihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/'@;
put 'bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29y'@;
put 'ZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRO'@;
put 'dW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2'@;
put 'KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rp'@;
put 'b24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9'@;
put 'Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9u'@;
put 'KGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3Io'@;
put 'dmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNb'@;
put 'cCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFd'@;
put 'PXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhp'@;
put 'cy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhp'@;
put 'cy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3Ro'@;
put 'aXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5t'@;
put 'aW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5n'@;
put 'dGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRo'@;
put 'aXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5l'@;
put 'dyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMu'@;
put 'bGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVn'@;
put 'YXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywx'@;
put 'Njc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywx'@;
put 'NzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9'@;
put 'dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxl'@;
put 'bmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/'@;
put 'Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFy'@;
put 'IEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50'@;
put 'b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0w'@;
put 'OyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09'@;
put 'dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRz'@;
put 'WzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZl'@;
put 'Py1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1m'@;
put 'dW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRl'@;
put 'c2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5p'@;
put 'dXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRC'@;
put 'aXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+'@;
put 'PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMr'@;
put 'PTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlv'@;
put 'bigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigp'@;
put 'e3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'LmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5s'@;
put 'ZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkp'@;
put 'LHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0'@;
put 'aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1Nd'@;
put 'Jmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFu'@;
put 'ZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMh'@;
put 'PT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMu'@;
put 'aXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3Ro'@;
put 'P3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2'@;
put 'YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz'@;
put 'LmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndv'@;
put 'cmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMu'@;
put 'X25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFy'@;
put 'IHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9'@;
put 'Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5h'@;
put 'ZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3Vi'@;
put 'KHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFk'@;
put 'ZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVy'@;
put 'biB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jk'@;
put 'c1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29y'@;
put 'ZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihn'@;
put 'LEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsSmU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5'@;
put 'MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0LE10PWl0Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQs'@;
put 'b249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxt'@;
put 'bj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixQ'@;
put 'bj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChG'@;
put 'ZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdp'@;
put 'PShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1N'@;
put 'YXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZu'@;
put 'KXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3'@;
put 'MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoSmUsZnQpfDAsdz13K01hdGgu'@;
put 'aW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGgu'@;
put 'aW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxl'@;
put 'bil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDAp'@;
put 'K01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJ'@;
put 'dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0'@;
put 'aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3Qp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwoSmUsTnQpfDAsdz13K01hdGguaW11bChKZSxtbil8MCx2'@;
put 'PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkr'@;
put 'TWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11'@;
put 'bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEp0'@;
put 'KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwo'@;
put 'TGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShw'@;
put 'PU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVl'@;
put 'LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4p'@;
put 'fDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChKZSxwdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShw'@;
put 'PXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5p'@;
put 'bXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChE'@;
put 'ZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12'@;
put 'K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0'@;
put 'aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxQbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxQbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+'@;
put 'MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQp'@;
put 'fDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8'@;
put 'MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxKdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGgu'@;
put 'aW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUG4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KFdlLFBuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAs'@;
put 'YW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13'@;
put 'K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxKdCl8MCkrTWF0'@;
put 'aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZ'@;
put 'ZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFBuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxQbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxs'@;
put 'bil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditN'@;
put 'YXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGgu'@;
put 'aW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVs'@;
put 'KGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'UGUsUG4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFBuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01h'@;
put 'dGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmlt'@;
put 'dWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bCho'@;
put 'dCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUG4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFBuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQ'@;
put 'ZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxKdCkpK01hdGguaW11bChibixJdCl8MCx3'@;
put 'PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGgu'@;
put 'aW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKFVlLFBuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxQbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9'@;
put 'dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0o'@;
put 'cD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0'@;
put 'aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUG4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLFBuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5p'@;
put 'bXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5'@;
put 'biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsUG4pfDApK01hdGguaW11bChNdCwkdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKE10LFBuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkr'@;
put 'KFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFBuKXwwKStNYXRoLmltdWwo'@;
put 'b24sJHQpfDAsdz13K01hdGguaW11bChvbixQbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhw'@;
put 'Pj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsUG4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sUG4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0o'@;
put 'cD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShw'@;
put 'PU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1'@;
put 'XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307'@;
put 'ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJu'@;
put 'IDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAs'@;
put 'ZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3Lndv'@;
put 'cmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2Zl'@;
put 'XT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2Qmlu'@;
put 'KHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlv'@;
put 'bihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5l'@;
put 'PUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStK'@;
put 'XSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9SmUpfX0sc2UucHJvdG90eXBlLmd1'@;
put 'ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8y'@;
put 'O3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3Vu'@;
put 'ZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04'@;
put 'MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylD'@;
put 'W1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcg'@;
put 'QXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJh'@;
put 'bnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0'@;
put 'aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0'@;
put 'cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTty'@;
put 'ZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9'@;
put 'PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEw'@;
put 'ODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlz'@;
put 'KX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsr'@;
put 'KXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0'@;
put 'aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3'@;
put 'MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVu'@;
put 'Z3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGct'@;
put 'cCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3Ro'@;
put 'PncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12'@;
put 'KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEp'@;
put 'LHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5'@;
put 'cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNo'@;
put 'cm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcp'@;
put 'e0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9'@;
put 'TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnBy'@;
put 'b3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRo'@;
put 'aXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtD'@;
put 'PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSks'@;
put 'dGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5u'@;
put 'ZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKysp'@;
put 'dGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5j'@;
put 'bG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcs'@;
put 'QyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53'@;
put 'b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxl'@;
put 'bmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0w'@;
put 'fHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3Ro'@;
put 'PW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZh'@;
put 'ciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxl'@;
put 'LS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2'@;
put 'fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1v'@;
put 'ZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMm'@;
put 'Jih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpw'@;
put 'fSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcu'@;
put 'd29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2'@;
put 'fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2'@;
put 'YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjow'@;
put 'IT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2'@;
put 'XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVy'@;
put 'biB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9'@;
put 'PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZl'@;
put 'PUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5p'@;
put 'dXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hy'@;
put 'bigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1n'@;
put 'Lm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIg'@;
put 'bmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8'@;
put 'PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAm'@;
put 'JnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zv'@;
put 'cih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13'@;
put 'fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9'@;
put 'PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgi'@;
put 'bnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRo'@;
put 'aXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhp'@;
put 'cy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9'@;
put 'LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9'@;
put 'PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5n'@;
put 'Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0'@;
put 'dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxF'@;
put 'LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBl'@;
put 'Lmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRo'@;
put 'aXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVk'@;
put 'dWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBh'@;
put 'IG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90'@;
put 'b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5w'@;
put 'cm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0'@;
put 'aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl'@;
put 'ZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJy'@;
put 'ZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz'@;
put 'IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhp'@;
put 'cyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1'@;
put 'Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlz'@;
put 'LCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1m'@;
put 'dW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5t'@;
put 'PUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2'@;
put 'IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5y'@;
put 'KS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGgu'@;
put 'Y2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0'@;
put 'aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4o'@;
put 'dGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53'@;
put 'b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1tw'@;
put 'XTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0w'@;
put 'LGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09'@;
put 'Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+'@;
put 'PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNl'@;
put 'IGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiks'@;
put 'SShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNl'@;
put 'UmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0'@;
put 'dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30s'@;
put 'SC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcs'@;
put 'Qyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7'@;
put 'cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz'@;
put 'LmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSks'@;
put 'Mz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBF'@;
put 'KDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZl'@;
put 'PXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9PU9lLmNtcCh3KTtqZSsrKU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBv'@;
put 'dyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVn'@;
put 'YXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3Zh'@;
put 'ciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMu'@;
put 'bGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11'@;
put 'bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcu'@;
put 'Y2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRG'@;
put 'cm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIg'@;
put 'Uz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDAp'@;
put 'PDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0'@;
put 'KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VS'@;
put 'ZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sOTc0NjpNPT57ZnVuY3Rpb24gTyhSLHope2lmKCFSKXRocm93IG5ldyBF'@;
put 'cnJvcih6fHwiQXNzZXJ0aW9uIGZhaWxlZCIpfU0uZXhwb3J0cz1PLE8uZXF1YWw9ZnVuY3Rpb24oUix6LEspe2lmKFIhPXopdGhyb3cgbmV3IEVycm9yKEt8fCJBc3NlcnRpb24gZmFpbGVkOiAiK1IrIiAhPSAiK3opfX0sNDUwNDooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUj1PO2Z1bmN0'@;
put 'aW9uIHooSSl7cmV0dXJuIDE9PT1JLmxlbmd0aD8iMCIrSTpJfWZ1bmN0aW9uIEsoSSl7Zm9yKHZhciBrPSIiLEU9MDtFPEkubGVuZ3RoO0UrKylrKz16KElbRV0udG9TdHJpbmcoMTYpKTtyZXR1cm4ga31SLnRvQXJyYXk9ZnVuY3Rpb24oSSxrKXtpZihBcnJheS5pc0FycmF5KEkpKXJldHVy'@;
put 'biBJLnNsaWNlKCk7aWYoIUkpcmV0dXJuW107dmFyIEU9W107aWYoInN0cmluZyIhPXR5cGVvZiBJKXtmb3IodmFyIGo9MDtqPEkubGVuZ3RoO2orKylFW2pdPTB8SVtqXTtyZXR1cm4gRX1pZigiaGV4Ij09PWspZm9yKChJPUkucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUy'@;
put 'IT0wJiYoST0iMCIrSSksaj0wO2o8SS5sZW5ndGg7ais9MilFLnB1c2gocGFyc2VJbnQoSVtqXStJW2orMV0sMTYpKTtlbHNlIGZvcihqPTA7ajxJLmxlbmd0aDtqKyspe3ZhciBWPUkuY2hhckNvZGVBdChqKSxCPVY+PjgsWT0yNTUmVjtCP0UucHVzaChCLFkpOkUucHVzaChZKX1yZXR1cm4g'@;
put 'RX0sUi56ZXJvMj16LFIudG9IZXg9SyxSLmVuY29kZT1mdW5jdGlvbihJLGspe3JldHVybiJoZXgiPT09az9LKEkpOkl9fSwxMTcxOihNLE8sUik9Pnt2YXIgej1SKDUxMDgpO00uZXhwb3J0cz1lZSxlZS5NaW5pbWF0Y2g9dGU7dmFyIEs9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIFIoMjUyMCl9'@;
put 'Y2F0Y2h7fX0oKXx8e3NlcDoiLyJ9O2VlLnNlcD1LLnNlcDt2YXIgST1lZS5HTE9CU1RBUj10ZS5HTE9CU1RBUj17fSxrPVIoMzY0NCksRT17IiEiOntvcGVuOiIoPzooPyEoPzoiLGNsb3NlOiIpKVteL10qPykifSwiPyI6e29wZW46Iig/OiIsY2xvc2U6Iik/In0sIisiOntvcGVuOiIoPzoi'@;
put 'LGNsb3NlOiIpKyJ9LCIqIjp7b3BlbjoiKD86IixjbG9zZToiKSoifSwiQCI6e29wZW46Iig/OiIsY2xvc2U6IikifX0saj0iW14vXSIsVj1qKyIqPyIsWD0iKCkuKnt9Kz9bXV4kXFwhIi5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gdWVbY2VdPSEwLHVlfSx7fSks'@;
put 'VT0vXC8rLztmdW5jdGlvbiBxKHVlLGNlKXtjZT1jZXx8e307dmFyIEc9e307cmV0dXJuIE9iamVjdC5rZXlzKHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe0dbYl09dWVbYl19KSxPYmplY3Qua2V5cyhjZSkuZm9yRWFjaChmdW5jdGlvbihiKXtHW2JdPWNlW2JdfSksR31mdW5jdGlvbiBlZSh1'@;
put 'ZSxjZSxHKXtyZXR1cm4gc2UoY2UpLEd8fChHPXt9KSwhKCFHLm5vY29tbWVudCYmIiMiPT09Y2UuY2hhckF0KDApKSYmbmV3IHRlKGNlLEcpLm1hdGNoKHVlKX1mdW5jdGlvbiB0ZSh1ZSxjZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdGUpKXJldHVybiBuZXcgdGUodWUsY2UpO3NlKHVlKSxj'@;
put 'ZXx8KGNlPXt9KSx1ZT11ZS50cmltKCksY2UuYWxsb3dXaW5kb3dzRXNjYXBlfHwiLyI9PT1LLnNlcHx8KHVlPXVlLnNwbGl0KEsuc2VwKS5qb2luKCIvIikpLHRoaXMub3B0aW9ucz1jZSx0aGlzLnNldD1bXSx0aGlzLnBhdHRlcm49dWUsdGhpcy5yZWdleHA9bnVsbCx0aGlzLm5lZ2F0ZT0h'@;
put 'MSx0aGlzLmNvbW1lbnQ9ITEsdGhpcy5lbXB0eT0hMSx0aGlzLnBhcnRpYWw9ISFjZS5wYXJ0aWFsLHRoaXMubWFrZSgpfWZ1bmN0aW9uIG9lKHVlLGNlKXtyZXR1cm4gY2V8fChjZT10aGlzIGluc3RhbmNlb2YgdGU/dGhpcy5vcHRpb25zOnt9KSxzZSh1ZT12b2lkIDA9PT11ZT90aGlzLnBh'@;
put 'dHRlcm46dWUpLGNlLm5vYnJhY2V8fCEvXHsoPzooPyFceykuKSpcfS8udGVzdCh1ZSk/W3VlXTprKHVlKX1lZS5maWx0ZXI9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBjZT1jZXx8e30sZnVuY3Rpb24oRyxiLEQpe3JldHVybiBlZShHLHVlLGNlKX19LGVlLmRlZmF1bHRzPWZ1bmN0aW9uKHVl'@;
put 'KXtpZighdWV8fCJvYmplY3QiIT10eXBlb2YgdWV8fCFPYmplY3Qua2V5cyh1ZSkubGVuZ3RoKXJldHVybiBlZTt2YXIgY2U9ZWUsRz1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIGNlKGIsRCxxKHVlLEgpKX07cmV0dXJuKEcuTWluaW1hdGNoPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG5ldyBjZS5N'@;
put 'aW5pbWF0Y2goYixxKHVlLEQpKX0pLmRlZmF1bHRzPWZ1bmN0aW9uKGIpe3JldHVybiBjZS5kZWZhdWx0cyhxKHVlLGIpKS5NaW5pbWF0Y2h9LEcuZmlsdGVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGNlLmZpbHRlcihiLHEodWUsRCkpfSxHLmRlZmF1bHRzPWZ1bmN0aW9uKGIpe3JldHVybiBj'@;
put 'ZS5kZWZhdWx0cyhxKHVlLGIpKX0sRy5tYWtlUmU9ZnVuY3Rpb24oYixEKXtyZXR1cm4gY2UubWFrZVJlKGIscSh1ZSxEKSl9LEcuYnJhY2VFeHBhbmQ9ZnVuY3Rpb24oYixEKXtyZXR1cm4gY2UuYnJhY2VFeHBhbmQoYixxKHVlLEQpKX0sRy5tYXRjaD1mdW5jdGlvbihiLEQsSCl7cmV0dXJu'@;
put 'IGNlLm1hdGNoKGIsRCxxKHVlLEgpKX0sR30sdGUuZGVmYXVsdHM9ZnVuY3Rpb24odWUpe3JldHVybiBlZS5kZWZhdWx0cyh1ZSkuTWluaW1hdGNofSx0ZS5wcm90b3R5cGUuZGVidWc9ZnVuY3Rpb24oKXt9LHRlLnByb3RvdHlwZS5tYWtlPWZ1bmN0aW9uKCl7dmFyIHVlPXRoaXMucGF0dGVy'@;
put 'bixjZT10aGlzLm9wdGlvbnM7aWYoY2Uubm9jb21tZW50fHwiIyIhPT11ZS5jaGFyQXQoMCkpaWYodWUpe3RoaXMucGFyc2VOZWdhdGUoKTt2YXIgRz10aGlzLmdsb2JTZXQ9dGhpcy5icmFjZUV4cGFuZCgpO2NlLmRlYnVnJiYodGhpcy5kZWJ1Zz1mdW5jdGlvbigpe3ouZXJyb3IuYXBwbHko'@;
put 'eixhcmd1bWVudHMpfSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sRyksRz10aGlzLmdsb2JQYXJ0cz1HLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5zcGxpdChVKX0pLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLEcpLEc9Ry5tYXAoZnVuY3Rpb24oYixELEgpe3JldHVybiBiLm1hcCh0aGlz'@;
put 'LnBhcnNlLHRoaXMpfSx0aGlzKSx0aGlzLmRlYnVnKHRoaXMucGF0dGVybixHKSxHPUcuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybi0xPT09Yi5pbmRleE9mKCExKX0pLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLEcpLHRoaXMuc2V0PUd9ZWxzZSB0aGlzLmVtcHR5PSEwO2Vsc2UgdGhpcy5j'@;
put 'b21tZW50PSEwfSx0ZS5wcm90b3R5cGUucGFyc2VOZWdhdGU9ZnVuY3Rpb24oKXt2YXIgdWU9dGhpcy5wYXR0ZXJuLGNlPSExLGI9MDtpZighdGhpcy5vcHRpb25zLm5vbmVnYXRlKXtmb3IodmFyIEQ9MCxIPXVlLmxlbmd0aDtEPEgmJiIhIj09PXVlLmNoYXJBdChEKTtEKyspY2U9IWNlLGIr'@;
put 'KztiJiYodGhpcy5wYXR0ZXJuPXVlLnN1YnN0cihiKSksdGhpcy5uZWdhdGU9Y2V9fSxlZS5icmFjZUV4cGFuZD1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIG9lKHVlLGNlKX0sdGUucHJvdG90eXBlLmJyYWNlRXhwYW5kPW9lO3ZhciBzZT1mdW5jdGlvbih1ZSl7aWYoInN0cmluZyIhPXR5cGVv'@;
put 'ZiB1ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHBhdHRlcm4iKTtpZih1ZS5sZW5ndGg+NjU1MzYpdGhyb3cgbmV3IFR5cGVFcnJvcigicGF0dGVybiBpcyB0b28gbG9uZyIpfTt0ZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odWUsY2Upe3NlKHVlKTt2YXIgRz10aGlzLm9wdGlv'@;
put 'bnM7aWYoIioqIj09PXVlKXtpZighRy5ub2dsb2JzdGFyKXJldHVybiBJO3VlPSIqIn1pZigiIj09PXVlKXJldHVybiIiO3ZhciBiLEQ9IiIsSD0hIUcubm9jYXNlLE49ITEsZz1bXSxDPVtdLFM9ITEsdj0tMSxwPS0xLHc9Ii4iPT09dWUuY2hhckF0KDApPyIiOkcuZG90PyIoPyEoPzpefFxc'@;
put 'LylcXC57MSwyfSg/OiR8XFwvKSkiOiIoPyFcXC4pIixKPXRoaXM7ZnVuY3Rpb24gbmUoKXtpZihiKXtzd2l0Y2goYil7Y2FzZSIqIjpEKz1WLEg9ITA7YnJlYWs7Y2FzZSI/IjpEKz1qLEg9ITA7YnJlYWs7ZGVmYXVsdDpEKz0iXFwiK2J9Si5kZWJ1ZygiY2xlYXJTdGF0ZUNoYXIgJWogJWoi'@;
put 'LGIsRCksYj0hMX19Zm9yKHZhciBkZSxmZT0wLHhlPXVlLmxlbmd0aDtmZTx4ZSYmKGRlPXVlLmNoYXJBdChmZSkpO2ZlKyspaWYodGhpcy5kZWJ1ZygiJXNcdCVzICVzICVqIix1ZSxmZSxELGRlKSxOJiZYW2RlXSlEKz0iXFwiK2RlLE49ITE7ZWxzZSBzd2l0Y2goZGUpe2Nhc2UiLyI6cmV0'@;
put 'dXJuITE7Y2FzZSJcXCI6bmUoKSxOPSEwO2NvbnRpbnVlO2Nhc2UiPyI6Y2FzZSIqIjpjYXNlIisiOmNhc2UiQCI6Y2FzZSIhIjppZih0aGlzLmRlYnVnKCIlc1x0JXMgJXMgJWogPC0tIHN0YXRlQ2hhciIsdWUsZmUsRCxkZSksUyl7dGhpcy5kZWJ1ZygiICBpbiBjbGFzcyIpLCIhIj09PWRl'@;
put 'JiZmZT09PXArMSYmKGRlPSJeIiksRCs9ZGU7Y29udGludWV9Si5kZWJ1ZygiY2FsbCBjbGVhclN0YXRlQ2hhciAlaiIsYiksbmUoKSxiPWRlLEcubm9leHQmJm5lKCk7Y29udGludWU7Y2FzZSIoIjppZihTKXtEKz0iKCI7Y29udGludWV9aWYoIWIpe0QrPSJcXCgiO2NvbnRpbnVlfWcucHVz'@;
put 'aCh7dHlwZTpiLHN0YXJ0OmZlLTEscmVTdGFydDpELmxlbmd0aCxvcGVuOkVbYl0ub3BlbixjbG9zZTpFW2JdLmNsb3NlfSksdGhpcy5kZWJ1ZygicGxUeXBlICVqICVqIixiLEQrPSIhIj09PWI/Iig/Oig/ISg/OiI6Iig/OiIpLGI9ITE7Y29udGludWU7Y2FzZSIpIjppZihTfHwhZy5sZW5n'@;
put 'dGgpe0QrPSJcXCkiO2NvbnRpbnVlfW5lKCksSD0hMDt2YXIgTGU9Zy5wb3AoKTtEKz1MZS5jbG9zZSwiISI9PT1MZS50eXBlJiZDLnB1c2goTGUpLExlLnJlRW5kPUQubGVuZ3RoO2NvbnRpbnVlO2Nhc2UifCI6aWYoU3x8IWcubGVuZ3RofHxOKXtEKz0iXFx8IixOPSExO2NvbnRpbnVlfW5l'@;
put 'KCksRCs9InwiO2NvbnRpbnVlO2Nhc2UiWyI6aWYobmUoKSxTKXtEKz0iXFwiK2RlO2NvbnRpbnVlfVM9ITAscD1mZSx2PUQubGVuZ3RoLEQrPWRlO2NvbnRpbnVlO2Nhc2UiXSI6aWYoZmU9PT1wKzF8fCFTKXtEKz0iXFwiK2RlLE49ITE7Y29udGludWV9dmFyIEZlPXVlLnN1YnN0cmluZyhw'@;
put 'KzEsZmUpO3RyeXtSZWdFeHAoIlsiK0ZlKyJdIil9Y2F0Y2h7dmFyIE9lPXRoaXMucGFyc2UoRmUsaGUpO0Q9RC5zdWJzdHIoMCx2KSsiXFxbIitPZVswXSsiXFxdIixIPUh8fE9lWzFdLFM9ITE7Y29udGludWV9SD0hMCxTPSExLEQrPWRlO2NvbnRpbnVlO2RlZmF1bHQ6bmUoKSxOP049ITE6'@;
put 'IVhbZGVdfHwiXiI9PT1kZSYmU3x8KEQrPSJcXCIpLEQrPWRlfWZvcihTJiYoRmU9dWUuc3Vic3RyKHArMSksT2U9dGhpcy5wYXJzZShGZSxoZSksRD1ELnN1YnN0cigwLHYpKyJcXFsiK09lWzBdLEg9SHx8T2VbMV0pLExlPWcucG9wKCk7TGU7TGU9Zy5wb3AoKSl7dmFyIGplPUQuc2xpY2Uo'@;
put 'TGUucmVTdGFydCtMZS5vcGVuLmxlbmd0aCk7dGhpcy5kZWJ1Zygic2V0dGluZyB0YWlsIixELExlKSxqZT1qZS5yZXBsYWNlKC8oKD86XFx7Mn0pezAsNjR9KShcXD8pXHwvZyxmdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIHplfHwoemU9IlxcIiksRGUrRGUremUrInwifSksdGhpcy5kZWJ1'@;
put 'ZygidGFpbD0lalxuICAgJXMiLGplLGplLExlLEQpO3ZhciBXZT0iKiI9PT1MZS50eXBlP1Y6Ij8iPT09TGUudHlwZT9qOiJcXCIrTGUudHlwZTtIPSEwLEQ9RC5zbGljZSgwLExlLnJlU3RhcnQpK1dlKyJcXCgiK2plfW5lKCksTiYmKEQrPSJcXFxcIik7dmFyIEtlPSExO3N3aXRjaChELmNo'@;
put 'YXJBdCgwKSl7Y2FzZSJbIjpjYXNlIi4iOmNhc2UiKCI6S2U9ITB9Zm9yKHZhciBZZT1DLmxlbmd0aC0xO1llPi0xO1llLS0pe3ZhciBKZT1DW1llXSxsdD1ELnNsaWNlKDAsSmUucmVTdGFydCksUGU9RC5zbGljZShKZS5yZVN0YXJ0LEplLnJlRW5kLTgpLGJlPUQuc2xpY2UoSmUucmVFbmQt'@;
put 'OCxKZS5yZUVuZCksQWU9RC5zbGljZShKZS5yZUVuZCk7YmUrPUFlO3ZhciBUZT1sdC5zcGxpdCgiKCIpLmxlbmd0aC0xLHFlPUFlO2ZvcihmZT0wO2ZlPFRlO2ZlKyspcWU9cWUucmVwbGFjZSgvXClbKyo/XT8vLCIiKTt2YXIgWGU9IiI7IiI9PT0oQWU9cWUpJiZjZSE9PWhlJiYoWGU9IiQi'@;
put 'KSxEPWx0K1BlK0FlK1hlK2JlfWlmKCIiIT09RCYmSCYmKEQ9Iig/PS4pIitEKSxLZSYmKEQ9dytEKSxjZT09PWhlKXJldHVybltELEhdO2lmKCFIKXJldHVybiB1ZS5yZXBsYWNlKC9cXCguKS9nLCIkMSIpO3ZhciBVZT1HLm5vY2FzZT8iaSI6IiI7dHJ5e3ZhciBodD1uZXcgUmVnRXhwKCJe'@;
put 'IitEKyIkIixVZSl9Y2F0Y2h7cmV0dXJuIG5ldyBSZWdFeHAoIiQuIil9cmV0dXJuIGh0Ll9nbG9iPXVlLGh0Ll9zcmM9RCxodH07dmFyIGhlPXt9O2VlLm1ha2VSZT1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIG5ldyB0ZSh1ZSxjZXx8e30pLm1ha2VSZSgpfSx0ZS5wcm90b3R5cGUubWFrZVJl'@;
put 'PWZ1bmN0aW9uKCl7aWYodGhpcy5yZWdleHB8fCExPT09dGhpcy5yZWdleHApcmV0dXJuIHRoaXMucmVnZXhwO3ZhciB1ZT10aGlzLnNldDtpZighdWUubGVuZ3RoKXJldHVybiB0aGlzLnJlZ2V4cD0hMSx0aGlzLnJlZ2V4cDt2YXIgY2U9dGhpcy5vcHRpb25zLEc9Y2Uubm9nbG9ic3Rhcj9W'@;
put 'OmNlLmRvdD8iKD86KD8hKD86XFwvfF4pKD86XFwuezEsMn0pKCR8XFwvKSkuKSo/IjoiKD86KD8hKD86XFwvfF4pXFwuKS4pKj8iLGI9Y2Uubm9jYXNlPyJpIjoiIixEPXVlLm1hcChmdW5jdGlvbihIKXtyZXR1cm4gSC5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIE49PT1JP0c6InN0cmluZyI9'@;
put 'PXR5cGVvZiBOP04ucmVwbGFjZSgvWy1bXF17fSgpKis/LixcXF4kfCNcc10vZywiXFwkJiIpOk4uX3NyY30pLmpvaW4oIlxcLyIpfSkuam9pbigifCIpO0Q9Il4oPzoiK0QrIikkIix0aGlzLm5lZ2F0ZSYmKEQ9Il4oPyEiK0QrIikuKiQiKTt0cnl7dGhpcy5yZWdleHA9bmV3IFJlZ0V4cChE'@;
put 'LGIpfWNhdGNoe3RoaXMucmVnZXhwPSExfXJldHVybiB0aGlzLnJlZ2V4cH0sZWUubWF0Y2g9ZnVuY3Rpb24odWUsY2UsRyl7dmFyIGI9bmV3IHRlKGNlLEc9R3x8e30pO3JldHVybiB1ZT11ZS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIGIubWF0Y2goRCl9KSxiLm9wdGlvbnMubm9udWxs'@;
put 'JiYhdWUubGVuZ3RoJiZ1ZS5wdXNoKGNlKSx1ZX0sdGUucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHVlLGNlKXtpZih2b2lkIDA9PT1jZSYmKGNlPXRoaXMucGFydGlhbCksdGhpcy5kZWJ1ZygibWF0Y2giLHVlLHRoaXMucGF0dGVybiksdGhpcy5jb21tZW50KXJldHVybiExO2lmKHRoaXMu'@;
put 'ZW1wdHkpcmV0dXJuIiI9PT11ZTtpZigiLyI9PT11ZSYmY2UpcmV0dXJuITA7dmFyIEc9dGhpcy5vcHRpb25zOyIvIiE9PUsuc2VwJiYodWU9dWUuc3BsaXQoSy5zZXApLmpvaW4oIi8iKSksdWU9dWUuc3BsaXQoVSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sInNwbGl0Iix1ZSk7dmFyIGIs'@;
put 'RCxIPXRoaXMuc2V0O2Zvcih0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwic2V0IixIKSxEPXVlLmxlbmd0aC0xO0Q+PTAmJiEoYj11ZVtEXSk7RC0tKTtmb3IoRD0wO0Q8SC5sZW5ndGg7RCsrKXt2YXIgTj1IW0RdLGc9dWU7aWYoRy5tYXRjaEJhc2UmJjE9PT1OLmxlbmd0aCYmKGc9W2JdKSx0'@;
put 'aGlzLm1hdGNoT25lKGcsTixjZSkpcmV0dXJuISFHLmZsaXBOZWdhdGV8fCF0aGlzLm5lZ2F0ZX1yZXR1cm4hRy5mbGlwTmVnYXRlJiZ0aGlzLm5lZ2F0ZX0sdGUucHJvdG90eXBlLm1hdGNoT25lPWZ1bmN0aW9uKHVlLGNlLEcpe3ZhciBiPXRoaXMub3B0aW9uczt0aGlzLmRlYnVnKCJtYXRj'@;
put 'aE9uZSIse3RoaXM6dGhpcyxmaWxlOnVlLHBhdHRlcm46Y2V9KSx0aGlzLmRlYnVnKCJtYXRjaE9uZSIsdWUubGVuZ3RoLGNlLmxlbmd0aCk7Zm9yKHZhciBEPTAsSD0wLE49dWUubGVuZ3RoLGc9Y2UubGVuZ3RoO0Q8TiYmSDxnO0QrKyxIKyspe3RoaXMuZGVidWcoIm1hdGNoT25lIGxvb3Ai'@;
put 'KTt2YXIgQyxTPWNlW0hdLHY9dWVbRF07aWYodGhpcy5kZWJ1ZyhjZSxTLHYpLCExPT09UylyZXR1cm4hMTtpZihTPT09SSl7dGhpcy5kZWJ1ZygiR0xPQlNUQVIiLFtjZSxTLHZdKTt2YXIgcD1ELHc9SCsxO2lmKHc9PT1nKXtmb3IodGhpcy5kZWJ1ZygiKiogYXQgdGhlIGVuZCIpO0Q8TjtE'@;
put 'KyspaWYoIi4iPT09dWVbRF18fCIuLiI9PT11ZVtEXXx8IWIuZG90JiYiLiI9PT11ZVtEXS5jaGFyQXQoMCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKDtwPE47KXt2YXIgSj11ZVtwXTtpZih0aGlzLmRlYnVnKCJcbmdsb2JzdGFyIHdoaWxlIix1ZSxwLGNlLHcsSiksdGhpcy5tYXRjaE9uZSh1'@;
put 'ZS5zbGljZShwKSxjZS5zbGljZSh3KSxHKSlyZXR1cm4gdGhpcy5kZWJ1ZygiZ2xvYnN0YXIgZm91bmQgbWF0Y2ghIixwLE4sSiksITA7aWYoIi4iPT09Snx8Ii4uIj09PUp8fCFiLmRvdCYmIi4iPT09Si5jaGFyQXQoMCkpe3RoaXMuZGVidWcoImRvdCBkZXRlY3RlZCEiLHVlLHAsY2Usdyk7'@;
put 'YnJlYWt9dGhpcy5kZWJ1ZygiZ2xvYnN0YXIgc3dhbGxvdyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZSIpLHArK31yZXR1cm4hKCFHfHwodGhpcy5kZWJ1ZygiXG4+Pj4gbm8gbWF0Y2gsIHBhcnRpYWw/Iix1ZSxwLGNlLHcpLHAhPT1OKSl9aWYoInN0cmluZyI9PXR5cGVvZiBTP3RoaXMuZGVi'@;
put 'dWcoInN0cmluZyBtYXRjaCIsUyx2LEM9dj09PVMpOihDPXYubWF0Y2goUyksdGhpcy5kZWJ1ZygicGF0dGVybiBtYXRjaCIsUyx2LEMpKSwhQylyZXR1cm4hMX1pZihEPT09TiYmSD09PWcpcmV0dXJuITA7aWYoRD09PU4pcmV0dXJuIEc7aWYoSD09PWcpcmV0dXJuIEQ9PT1OLTEmJiIiPT09'@;
put 'dWVbRF07dGhyb3cgbmV3IEVycm9yKCJ3dGY/Iil9fSw0MjQ0Ok09PnsidXNlIHN0cmljdCI7dmFyIE89ZnVuY3Rpb24oUil7cmV0dXJuIFIhPVJ9O00uZXhwb3J0cz1mdW5jdGlvbihSLHope3JldHVybiAwPT09UiYmMD09PXo/MS9SPT0xL3o6Uj09PXp8fCEoIU8oUil8fCFPKHopKX19LDYw'@;
put 'OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4OSksSz1SKDU1NTkpLEk9Uig0MjQ0KSxrPVIoNTYyNCksRT1SKDIyODEpLGo9SyhrKCksT2JqZWN0KTt6KGose2dldFBvbHlmaWxsOmssaW1wbGVtZW50YXRpb246SSxzaGltOkV9KSxNLmV4cG9ydHM9an0sNTYyNDooTSxPLFIp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI0NCk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6en19LDIyODE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU2MjQpLEs9Uig0Mjg5KTtNLmV4cG9ydHM9ZnVu'@;
put 'Y3Rpb24oKXt2YXIgST16KCk7cmV0dXJuIEsoT2JqZWN0LHtpczpJfSx7aXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzIT09SX19KSxJfX0sODk4NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6O2lmKCFPYmplY3Qua2V5cyl7dmFyIEs9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q'@;
put 'cm9wZXJ0eSxJPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaz1SKDE0MTQpLEU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxqPSFFLmNhbGwoe3RvU3RyaW5nOm51bGx9LCJ0b1N0cmluZyIpLFY9RS5jYWxsKGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIiksQj1bInRv'@;
put 'U3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLFk9ZnVuY3Rpb24ocSl7dmFyIGVlPXEuY29uc3RydWN0b3I7cmV0dXJuIGVlJiZlZS5wcm90b3R5cGU9'@;
put 'PT1xfSxYPXskYXBwbGljYXRpb25DYWNoZTohMCwkY29uc29sZTohMCwkZXh0ZXJuYWw6ITAsJGZyYW1lOiEwLCRmcmFtZUVsZW1lbnQ6ITAsJGZyYW1lczohMCwkaW5uZXJIZWlnaHQ6ITAsJGlubmVyV2lkdGg6ITAsJG9ubW96ZnVsbHNjcmVlbmNoYW5nZTohMCwkb25tb3pmdWxsc2NyZWVu'@;
put 'ZXJyb3I6ITAsJG91dGVySGVpZ2h0OiEwLCRvdXRlcldpZHRoOiEwLCRwYWdlWE9mZnNldDohMCwkcGFnZVlPZmZzZXQ6ITAsJHBhcmVudDohMCwkc2Nyb2xsTGVmdDohMCwkc2Nyb2xsVG9wOiEwLCRzY3JvbGxYOiEwLCRzY3JvbGxZOiEwLCRzZWxmOiEwLCR3ZWJraXRJbmRleGVkREI6ITAs'@;
put 'JHdlYmtpdFN0b3JhZ2VJbmZvOiEwLCR3aW5kb3c6ITB9LFU9ZnVuY3Rpb24oKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtmb3IodmFyIHEgaW4gd2luZG93KXRyeXtpZighWFsiJCIrcV0mJksuY2FsbCh3aW5kb3cscSkmJm51bGwhPT13aW5kb3dbcV0mJiJvYmplY3QiPT10eXBl'@;
put 'b2Ygd2luZG93W3FdKXRyeXtZKHdpbmRvd1txXSl9Y2F0Y2h7cmV0dXJuITB9fWNhdGNoe3JldHVybiEwfXJldHVybiExfSgpO3o9ZnVuY3Rpb24ocSl7dmFyIGVlPW51bGwhPT1xJiYib2JqZWN0Ij09dHlwZW9mIHEsdGU9IltvYmplY3QgRnVuY3Rpb25dIj09PUkuY2FsbChxKSxvZT1rKHEp'@;
put 'LHNlPWVlJiYiW29iamVjdCBTdHJpbmddIj09PUkuY2FsbChxKSxoZT1bXTtpZighZWUmJiF0ZSYmIW9lKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgdWU9ViYmdGU7aWYoc2UmJnEubGVuZ3RoPjAmJiFLLmNhbGwocSwwKSlm'@;
put 'b3IodmFyIGNlPTA7Y2U8cS5sZW5ndGg7KytjZSloZS5wdXNoKFN0cmluZyhjZSkpO2lmKG9lJiZxLmxlbmd0aD4wKWZvcih2YXIgRz0wO0c8cS5sZW5ndGg7KytHKWhlLnB1c2goU3RyaW5nKEcpKTtlbHNlIGZvcih2YXIgYiBpbiBxKXVlJiYicHJvdG90eXBlIj09PWJ8fCFLLmNhbGwocSxi'@;
put 'KXx8aGUucHVzaChTdHJpbmcoYikpO2lmKGopZm9yKHZhciBEPWZ1bmN0aW9uKE4pe2lmKHR5cGVvZiB3aW5kb3c+InUifHwhVSlyZXR1cm4gWShOKTt0cnl7cmV0dXJuIFkoTil9Y2F0Y2h7cmV0dXJuITF9fShxKSxIPTA7SDxCLmxlbmd0aDsrK0gpRCYmImNvbnN0cnVjdG9yIj09PUJbSF18'@;
put 'fCFLLmNhbGwocSxCW0hdKXx8aGUucHVzaChCW0hdKTtyZXR1cm4gaGV9fU0uZXhwb3J0cz16fSwyMjE1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9QXJyYXkucHJvdG90eXBlLnNsaWNlLEs9UigxNDE0KSxJPU9iamVjdC5rZXlzLGs9ST9mdW5jdGlvbihqKXtyZXR1cm4gSShqKX06'@;
put 'Uig4OTg3KSxFPU9iamVjdC5rZXlzO2suc2hpbT1mdW5jdGlvbigpe2lmKE9iamVjdC5rZXlzKXt2YXIgaj1mdW5jdGlvbigpe3ZhciBWPU9iamVjdC5rZXlzKGFyZ3VtZW50cyk7cmV0dXJuIFYmJlYubGVuZ3RoPT09YXJndW1lbnRzLmxlbmd0aH0oMSwyKTtqfHwoT2JqZWN0LmtleXM9ZnVu'@;
put 'Y3Rpb24oVil7cmV0dXJuIEsoVik/RSh6LmNhbGwoVikpOkUoVil9KX1lbHNlIE9iamVjdC5rZXlzPWs7cmV0dXJuIE9iamVjdC5rZXlzfHxrfSxNLmV4cG9ydHM9a30sMTQxNDpNPT57InVzZSBzdHJpY3QiO3ZhciBPPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7TS5leHBvcnRzPWZ1bmN0'@;
put 'aW9uKFIpe3ZhciB6PU8uY2FsbChSKSxLPSJbb2JqZWN0IEFyZ3VtZW50c10iPT09ejtyZXR1cm4gS3x8KEs9IltvYmplY3QgQXJyYXldIiE9PXomJm51bGwhPT1SJiYib2JqZWN0Ij09dHlwZW9mIFImJiJudW1iZXIiPT10eXBlb2YgUi5sZW5ndGgmJlIubGVuZ3RoPj0wJiYiW29iamVjdCBG'@;
put 'dW5jdGlvbl0iPT09Ty5jYWxsKFIuY2FsbGVlKSksS319LDc3ODooTSxPLFIpPT57dmFyIHo9UigyNDc5KTtmdW5jdGlvbiBLKGspe3ZhciBFPWZ1bmN0aW9uKCl7cmV0dXJuIEUuY2FsbGVkP0UudmFsdWU6KEUuY2FsbGVkPSEwLEUudmFsdWU9ay5hcHBseSh0aGlzLGFyZ3VtZW50cykpfTty'@;
put 'ZXR1cm4gRS5jYWxsZWQ9ITEsRX1mdW5jdGlvbiBJKGspe3ZhciBFPWZ1bmN0aW9uKCl7aWYoRS5jYWxsZWQpdGhyb3cgbmV3IEVycm9yKEUub25jZUVycm9yKTtyZXR1cm4gRS5jYWxsZWQ9ITAsRS52YWx1ZT1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIEUub25jZUVycm9yPShr'@;
put 'Lm5hbWV8fCJGdW5jdGlvbiB3cmFwcGVkIHdpdGggYG9uY2VgIikrIiBzaG91bGRuJ3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIixFLmNhbGxlZD0hMSxFfU0uZXhwb3J0cz16KEspLE0uZXhwb3J0cy5zdHJpY3Q9eihJKSxLLnByb3RvPUsoZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJvbmNlIix7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzKX0sY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwib25jZVN0cmljdCIse3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEko'@;
put 'dGhpcyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9LDc0MzU6KE0sTyk9PntPLmVuZGlhbm5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4iTEUifSxPLmhvc3RuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBsb2NhdGlvbjwidSI/bG9jYXRpb24uaG9zdG5hbWU6IiJ9LE8ubG9hZGF2Zz1mdW5jdGlv'@;
put 'bigpe3JldHVybltdfSxPLnVwdGltZT1mdW5jdGlvbigpe3JldHVybiAwfSxPLmZyZWVtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sTy50b3RhbG1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxPLmNwdXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0s'@;
put 'Ty50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIkJyb3dzZXIifSxPLnJlbGVhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvcjwidSI/bmF2aWdhdG9yLmFwcFZlcnNpb246IiJ9LE8ubmV0d29ya0ludGVyZmFjZXM9Ty5nZXROZXR3b3JrSW50ZXJmYWNlcz1mdW5jdGlvbigpe3Jl'@;
put 'dHVybnt9fSxPLmFyY2g9ZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdCJ9LE8ucGxhdGZvcm09ZnVuY3Rpb24oKXtyZXR1cm4iYnJvd3NlciJ9LE8udG1wZGlyPU8udG1wRGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi90bXAifSxPLkVPTD0iXG4iLE8uaG9tZWRpcj1mdW5jdGlvbigpe3JldHVy'@;
put 'biIvIn19LDI4MTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk4MDkpO08uY2VydGlmaWNhdGU9UigxOTM0KTt2YXIgSz16LmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJt'@;
put 'b2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMu'@;
put 'a2V5KCJleHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtPLlJTQVByaXZhdGVLZXk9Szt2YXIgST16LmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXko'@;
put 'InB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7Ty5SU0FQdWJsaWNLZXk9STt2YXIgaz16LmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShFKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIp'@;
put 'LmJpdHN0cigpKX0pO08uUHVibGljS2V5PWs7dmFyIEU9ei5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoIm5vbmUiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXko'@;
put 'ImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkpLm9wdGlvbmFsKCkpfSksaj16LmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0'@;
put 'aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEUpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO08uUHJpdmF0ZUtleT1qO3ZhciBWPXouZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRl'@;
put 'S2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmpp'@;
put 'ZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigp'@;
put 'KSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO08uRW5jcnlwdGVkUHJpdmF0ZUtleT1WO3ZhciBCPXouZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAi'@;
put 'KS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtPLkRTQVByaXZhdGVLZXk9QixPLkRTQXBhcmFtPXouZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0'@;
put 'aGlzLmludCgpfSk7dmFyIFk9ei5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxp'@;
put 'Y2l0KDApLnVzZShYKSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtPLkVDUHJpdmF0ZUtleT1ZO3ZhciBYPXouZGVmaW5lKCJFQ1BhcmFtZXRlcnMiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgp'@;
put 'fSl9KTtPLnNpZ25hdHVyZT16LmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sMTkzNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTgwOSksSz16LmRlZmluZSgiVGlt'@;
put 'ZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksST16LmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0'@;
put 'aGlzLmtleSgidmFsdWUiKS5hbnkoKSl9KSxrPXouZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUi'@;
put 'KS5vYmppZCgpLm9wdGlvbmFsKCkpfSksRT16LmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShrKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLGo9ei5kZWZpbmUo'@;
put 'IlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihJKX0pLFY9ei5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2Yoail9KSxCPXouZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlz'@;
put 'LnVzZShWKX0pfSksWT16LmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShLKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoSykpfSksWD16LmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCku'@;
put 'b2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxVPXouZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgi'@;
put 'dmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoayksdGhpcy5rZXkoImlzc3VlciIpLnVzZShCKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoWSksdGhpcy5rZXkoInN1'@;
put 'YmplY3QiKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKEUpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9w'@;
put 'dGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihYKS5vcHRpb25hbCgpKX0pLHE9ei5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoVSksdGhpcy5rZXko'@;
put 'InNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShrKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTtNLmV4cG9ydHM9cX0sNzYzMTooTSxPLFIpPT57dmFyIHo9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/'@;
put 'OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sSz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sST0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxyKy89'@;
put 'XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxrPVIoMzA0OCksRT1SKDQ2OTYpLGo9Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKFYsQil7dmFyIFksWD1WLnRvU3RyaW5nKCksVT1YLm1hdGNoKHopO2lmKFUpe3ZhciBxPSJhZXMiK1VbMV0sZWU9ai5mcm9tKFVbMl0sImhleCIpLHRl'@;
put 'PWouZnJvbShVWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iiksb2U9ayhCLGVlLnNsaWNlKDAsOCkscGFyc2VJbnQoVVsxXSwxMCkpLmtleSxzZT1bXSxoZT1FLmNyZWF0ZURlY2lwaGVyaXYocSxvZSxlZSk7c2UucHVzaChoZS51cGRhdGUodGUpKSxzZS5wdXNoKGhlLmZpbmFs'@;
put 'KCkpLFk9ai5jb25jYXQoc2UpfWVsc2V7dmFyIHVlPVgubWF0Y2goSSk7WT1qLmZyb20odWVbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOlgubWF0Y2goSylbMV0sZGF0YTpZfX19LDk4MDooTSxPLFIpPT57dmFyIHo9UigyODE4KSxLPVIoMjU2MiksST1S'@;
put 'KDc2MzEpLGs9Uig0Njk2KSxFPVIoNTYzMiksaj1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBWKEIpe3ZhciBZOyJvYmplY3QiIT10eXBlb2YgQnx8ai5pc0J1ZmZlcihCKXx8KFk9Qi5wYXNzcGhyYXNlLEI9Qi5rZXkpLCJzdHJpbmciPT10eXBlb2YgQiYmKEI9ai5mcm9tKEIpKTt2YXIgWCxV'@;
put 'LG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTixnLHE9SShCLFkpLGVlPXEudGFnLHRlPXEuZGF0YTtzd2l0Y2goZWUpe2Nhc2UiQ0VSVElGSUNBVEUiOlU9ei5jZXJ0aWZpY2F0ZS5kZWNvZGUodGUsImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElD'@;
put 'IEtFWSI6c3dpdGNoKFV8fChVPXouUHVibGljS2V5LmRlY29kZSh0ZSwiZGVyIikpLFg9VS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIHouUlNBUHVibGljS2V5LmRlY29kZShVLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwi'@;
put 'ZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJuIFUuc3ViamVjdFByaXZhdGVLZXk9VS5zdWJqZWN0UHVibGljS2V5LHt0eXBlOiJlYyIsZGF0YTpVfTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gVS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9ei5EU0FwYXJhbS5k'@;
put 'ZWNvZGUoVS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpLHt0eXBlOiJkc2EiLGRhdGE6VS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitYKX1jYXNlIkVOQ1JZUFRFRCBQUklWQVRFIEtFWSI6c2U9WSxoZT0ob2U9dGU9ei5F'@;
put 'bmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIikpLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCx1ZT1wYXJzZUludChvZS5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLGNlPUtbb2UuYWxnb3JpdGhtLmRlY3J5'@;
put 'cHQuY2lwaGVyLmFsZ28uam9pbigiLiIpXSxHPW9lLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixiPW9lLnN1YmplY3RQcml2YXRlS2V5LEQ9cGFyc2VJbnQoY2Uuc3BsaXQoIi0iKVsxXSwxMCkvOCxIPUUucGJrZGYyU3luYyhzZSxoZSx1ZSxELCJzaGExIiksTj1rLmNyZWF0ZURlY2lw'@;
put 'aGVyaXYoY2UsSCxHKSwoZz1bXSkucHVzaChOLnVwZGF0ZShiKSksZy5wdXNoKE4uZmluYWwoKSksdGU9ai5jb25jYXQoZyk7Y2FzZSJQUklWQVRFIEtFWSI6c3dpdGNoKFg9KFU9ei5Qcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtj'@;
put 'YXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gei5SU0FQcml2YXRlS2V5LmRlY29kZShVLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6VS5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTp6LkVDUHJpdmF0ZUtleS5k'@;
put 'ZWNvZGUoVS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFUuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT16LkRTQXBhcmFtLmRlY29kZShVLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJh'@;
put 'bXM6VS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitYKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gei5SU0FQdWJsaWNLZXkuZGVjb2RlKHRlLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIHouUlNBUHJp'@;
put 'dmF0ZUtleS5kZWNvZGUodGUsImRlciIpO2Nhc2UiRFNBIFBSSVZBVEUgS0VZIjpyZXR1cm57dHlwZToiZHNhIixwYXJhbXM6ei5EU0FQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZToodGU9ei5FQ1ByaXZhdGVLZXkuZGVjb2Rl'@;
put 'KHRlLCJkZXIiKSkucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OnRlLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrZWUpfX1NLmV4cG9ydHM9VixWLnNpZ25hdHVyZT16LnNpZ25hdHVyZX0sNDA5NTooTSxPLFIpPT57InVzZSBzdHJp'@;
put 'Y3QiO3ZhciB6PVIoNDE1NSk7ZnVuY3Rpb24gSyhrKXtyZXR1cm4iLyI9PT1rLmNoYXJBdCgwKX1mdW5jdGlvbiBJKGspe3ZhciBFPS9eKFthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9dK1tcXFwvXStbXlxcXC9dKyk/KFtcXFwvXSk/KFtcc1xTXSo/KSQvLmV4ZWMoayksaj1FWzFdfHwiIixW'@;
put 'PSEoIWp8fCI6Ij09PWouY2hhckF0KDEpKTtyZXR1cm4hKCFFWzJdJiYhVil9TS5leHBvcnRzPSJ3aW4zMiI9PT16LnBsYXRmb3JtP0k6SyxNLmV4cG9ydHMucG9zaXg9SyxNLmV4cG9ydHMud2luMzI9SX0sMTcyNTpNPT57TS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3Jl'@;
put 'YXRlP2Z1bmN0aW9uKE8sUil7Ty5zdXBlcl89UixPLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6TyxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZnVuY3Rpb24oTyxSKXtPLnN1cGVyXz1SO3ZhciB6'@;
put 'PWZ1bmN0aW9uKCl7fTt6LnByb3RvdHlwZT1SLnByb3RvdHlwZSxPLnByb3RvdHlwZT1uZXcgeixPLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1PfX0sMjk3NDpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiBPJiYib2JqZWN0Ij09dHlwZW9mIE8mJiJmdW5jdGlvbiI9PXR5cGVvZiBP'@;
put 'LmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLnJlYWRVSW50OH19LDgwNTk6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9LyVbc2RqJV0vZztPLmZvcm1hdD1mdW5jdGlvbihTKXtpZighc2UoUykpe2Zvcih2YXIgdj1bXSxw'@;
put 'PTA7cDxhcmd1bWVudHMubGVuZ3RoO3ArKyl2LnB1c2goaihhcmd1bWVudHNbcF0pKTtyZXR1cm4gdi5qb2luKCIgIil9cD0xO2Zvcih2YXIgdz1hcmd1bWVudHMsSj13Lmxlbmd0aCxuZT1TdHJpbmcoUykucmVwbGFjZShJLGZ1bmN0aW9uKGZlKXtpZigiJSUiPT09ZmUpcmV0dXJuIiUiO2lm'@;
put 'KHA+PUopcmV0dXJuIGZlO3N3aXRjaChmZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyh3W3ArK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIod1twKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHdbcCsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6'@;
put 'cmV0dXJuIGZlfX0pLGRlPXdbcF07cDxKO2RlPXdbKytwXSl0ZShkZSl8fCFjZShkZSk/bmUrPSIgIitkZTpuZSs9IiAiK2ooZGUpO3JldHVybiBuZX0sTy5kZXByZWNhdGU9ZnVuY3Rpb24oUyx2KXtpZihoZShSLmcucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE8uZGVwcmVj'@;
put 'YXRlKFMsdikuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PXoubm9EZXByZWNhdGlvbilyZXR1cm4gUzt2YXIgcD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighcCl7aWYoei50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcih2KTt6LnRyYWNlRGVwcmVjYXRpb24/Sy50cmFj'@;
put 'ZSh2KTpLLmVycm9yKHYpLHA9ITB9cmV0dXJuIFMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGssRT17fTtmdW5jdGlvbiBqKFMsdil7dmFyIHA9e3NlZW46W10sc3R5bGl6ZTpCfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKHAuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVu'@;
put 'dHMubGVuZ3RoPj00JiYocC5jb2xvcnM9YXJndW1lbnRzWzNdKSxlZSh2KT9wLnNob3dIaWRkZW49djp2JiZPLl9leHRlbmQocCx2KSxoZShwLnNob3dIaWRkZW4pJiYocC5zaG93SGlkZGVuPSExKSxoZShwLmRlcHRoKSYmKHAuZGVwdGg9MiksaGUocC5jb2xvcnMpJiYocC5jb2xvcnM9ITEp'@;
put 'LGhlKHAuY3VzdG9tSW5zcGVjdCkmJihwLmN1c3RvbUluc3BlY3Q9ITApLHAuY29sb3JzJiYocC5zdHlsaXplPVYpLFkocCxTLHAuZGVwdGgpfWZ1bmN0aW9uIFYoUyx2KXt2YXIgcD1qLnN0eWxlc1t2XTtyZXR1cm4gcD8iXHgxYlsiK2ouY29sb3JzW3BdWzBdKyJtIitTKyJceDFiWyIrai5j'@;
put 'b2xvcnNbcF1bMV0rIm0iOlN9ZnVuY3Rpb24gQihTLHYpe3JldHVybiBTfWZ1bmN0aW9uIFkoUyx2LHApe2lmKFMuY3VzdG9tSW5zcGVjdCYmdiYmRCh2Lmluc3BlY3QpJiZ2Lmluc3BlY3QhPT1PLmluc3BlY3QmJighdi5jb25zdHJ1Y3Rvcnx8di5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT12'@;
put 'KSl7dmFyIHc9di5pbnNwZWN0KHAsUyk7cmV0dXJuIHNlKHcpfHwodz1ZKFMsdyxwKSksd312YXIgSj1mdW5jdGlvbihqZSxXZSl7aWYoaGUoV2UpKXJldHVybiBqZS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihzZShXZSkpe3ZhciBLZT0iJyIrSlNPTi5zdHJpbmdpZnko'@;
put 'V2UpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIGplLnN0eWxpemUoS2UsInN0cmluZyIpfXJldHVybiBvZShXZSk/amUuc3R5bGl6ZSgiIitXZSwibnVtYmVyIik6ZWUoV2UpP2plLnN0eWxpemUoIiIrV2Us'@;
put 'ImJvb2xlYW4iKTp0ZShXZSk/amUuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KFMsdik7aWYoSilyZXR1cm4gSjt2YXIgV2UsbmU9T2JqZWN0LmtleXModiksZGU9KFdlPXt9LG5lLmZvckVhY2goZnVuY3Rpb24oS2UsWWUpe1dlW0tlXT0hMH0pLFdlKTtpZihTLnNob3dIaWRkZW4m'@;
put 'JihuZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2KSksYih2KSYmKG5lLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8bmUuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIFgodik7aWYoMD09PW5lLmxlbmd0aCl7aWYoRCh2KSlyZXR1cm4gUy5zdHlsaXplKCJbRnVuY3Rpb24i'@;
put 'Kyh2Lm5hbWU/IjogIit2Lm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKHVlKHYpKXJldHVybiBTLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLCJyZWdleHAiKTtpZihHKHYpKXJldHVybiBTLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2'@;
put 'KSwiZGF0ZSIpO2lmKGIodikpcmV0dXJuIFgodil9dmFyIHhlLExlPSIiLEZlPSExLE9lPVsieyIsIn0iXTtyZXR1cm4gcSh2KSYmKEZlPSEwLE9lPVsiWyIsIl0iXSksRCh2KSYmKExlPSIgW0Z1bmN0aW9uIisodi5uYW1lPyI6ICIrdi5uYW1lOiIiKSsiXSIpLHVlKHYpJiYoTGU9IiAiK1Jl'@;
put 'Z0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSksRyh2KSYmKExlPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHYpKSxiKHYpJiYoTGU9IiAiK1godikpLDAhPT1uZS5sZW5ndGh8fEZlJiYwIT12Lmxlbmd0aD9wPDA/dWUodik/Uy5zdHlsaXplKFJlZ0V4cC5wcm90'@;
put 'b3R5cGUudG9TdHJpbmcuY2FsbCh2KSwicmVnZXhwIik6Uy5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooUy5zZWVuLnB1c2godikseGU9RmU/ZnVuY3Rpb24oamUsV2UsS2UsWWUsSmUpe2Zvcih2YXIgbHQ9W10sUGU9MCxiZT1XZS5sZW5ndGg7UGU8YmU7KytQZSlDKFdlLFN0cmlu'@;
put 'ZyhQZSkpP2x0LnB1c2goVShqZSxXZSxLZSxZZSxTdHJpbmcoUGUpLCEwKSk6bHQucHVzaCgiIik7cmV0dXJuIEplLmZvckVhY2goZnVuY3Rpb24oQWUpe0FlLm1hdGNoKC9eXGQrJC8pfHxsdC5wdXNoKFUoamUsV2UsS2UsWWUsQWUsITApKX0pLGx0fShTLHYscCxkZSxuZSk6bmUubWFwKGZ1'@;
put 'bmN0aW9uKGplKXtyZXR1cm4gVShTLHYscCxkZSxqZSxGZSl9KSxTLnNlZW4ucG9wKCksZnVuY3Rpb24oamUsV2UsS2Upe3JldHVybiBqZS5yZWR1Y2UoZnVuY3Rpb24oSmUsbHQpe3JldHVybiBsdC5pbmRleE9mKCJcbiIpLEplK2x0LnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxl'@;
put 'bmd0aCsxfSwwKT42MD9LZVswXSsoIiI9PT1XZT8iIjpXZSsiXG4gIikrIiAiK2plLmpvaW4oIixcbiAgIikrIiAiK0tlWzFdOktlWzBdK1dlKyIgIitqZS5qb2luKCIsICIpKyIgIitLZVsxXX0oeGUsTGUsT2UpKTpPZVswXStMZStPZVsxXX1mdW5jdGlvbiBYKFMpe3JldHVybiJbIitFcnJv'@;
put 'ci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTKSsiXSJ9ZnVuY3Rpb24gVShTLHYscCx3LEosbmUpe3ZhciBkZSxmZSx4ZTtpZigoeGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2LEopfHx7dmFsdWU6dltKXX0pLmdldD9mZT1TLnN0eWxpemUoeGUuc2V0PyJbR2V0dGVyL1Nl'@;
put 'dHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTp4ZS5zZXQmJihmZT1TLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxDKHcsSil8fChkZT0iWyIrSisiXSIpLGZlfHwoUy5zZWVuLmluZGV4T2YoeGUudmFsdWUpPDA/KGZlPXRlKHApP1koUyx4ZS52YWx1ZSxudWxsKTpZKFMseGUu'@;
put 'dmFsdWUscC0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKGZlPW5lP2ZlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihMZSl7cmV0dXJuIiAgIitMZX0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrZmUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKExlKXtyZXR1cm4iICAgIitMZX0pLmpvaW4o'@;
put 'IlxuIikpOmZlPVMuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksaGUoZGUpKXtpZihuZSYmSi5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gZmU7KGRlPUpTT04uc3RyaW5naWZ5KCIiK0opKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhkZT1kZS5zdWJzdHIo'@;
put 'MSxkZS5sZW5ndGgtMiksZGU9Uy5zdHlsaXplKGRlLCJuYW1lIikpOihkZT1kZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksZGU9Uy5zdHlsaXplKGRlLCJzdHJpbmciKSl9cmV0dXJuIGRlKyI6ICIrZmV9ZnVuY3Rpb24g'@;
put 'cShTKXtyZXR1cm4gQXJyYXkuaXNBcnJheShTKX1mdW5jdGlvbiBlZShTKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBTfWZ1bmN0aW9uIHRlKFMpe3JldHVybiBudWxsPT09U31mdW5jdGlvbiBvZShTKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFN9ZnVuY3Rpb24gc2UoUyl7cmV0dXJuInN0'@;
put 'cmluZyI9PXR5cGVvZiBTfWZ1bmN0aW9uIGhlKFMpe3JldHVybiB2b2lkIDA9PT1TfWZ1bmN0aW9uIHVlKFMpe3JldHVybiBjZShTKSYmIltvYmplY3QgUmVnRXhwXSI9PT1IKFMpfWZ1bmN0aW9uIGNlKFMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgUyYmbnVsbCE9PVN9ZnVuY3Rpb24gRyhT'@;
put 'KXtyZXR1cm4gY2UoUykmJiJbb2JqZWN0IERhdGVdIj09PUgoUyl9ZnVuY3Rpb24gYihTKXtyZXR1cm4gY2UoUykmJigiW29iamVjdCBFcnJvcl0iPT09SChTKXx8UyBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBEKFMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTfWZ1bmN0aW9uIEgo'@;
put 'Uyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTKX1mdW5jdGlvbiBOKFMpe3JldHVybiBTPDEwPyIwIitTLnRvU3RyaW5nKDEwKTpTLnRvU3RyaW5nKDEwKX1PLmRlYnVnbG9nPWZ1bmN0aW9uKFMpe2lmKGhlKGspJiYoaz16LmVudi5OT0RFX0RFQlVHfHwiIiksUz1T'@;
put 'LnRvVXBwZXJDYXNlKCksIUVbU10paWYobmV3IFJlZ0V4cCgiXFxiIitTKyJcXGIiLCJpIikudGVzdChrKSl7dmFyIHY9ei5waWQ7RVtTXT1mdW5jdGlvbigpe3ZhciBwPU8uZm9ybWF0LmFwcGx5KE8sYXJndW1lbnRzKTtLLmVycm9yKCIlcyAlZDogJXMiLFMsdixwKX19ZWxzZSBFW1NdPWZ1'@;
put 'bmN0aW9uKCl7fTtyZXR1cm4gRVtTXX0sTy5pbnNwZWN0PWosai5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlsz'@;
put 'NiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LGouc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4i'@;
put 'LGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sTy5pc0FycmF5PXEsTy5pc0Jvb2xlYW49ZWUsTy5pc051bGw9dGUsTy5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihTKXtyZXR1cm4gbnVsbD09U30sTy5pc051bWJlcj1vZSxPLmlzU3RyaW5nPXNlLE8uaXNTeW1ib2w9ZnVuY3Rpb24o'@;
put 'Uyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBTfSxPLmlzVW5kZWZpbmVkPWhlLE8uaXNSZWdFeHA9dWUsTy5pc09iamVjdD1jZSxPLmlzRGF0ZT1HLE8uaXNFcnJvcj1iLE8uaXNGdW5jdGlvbj1ELE8uaXNQcmltaXRpdmU9ZnVuY3Rpb24oUyl7cmV0dXJuIG51bGw9PT1TfHwiYm9vbGVhbiI9'@;
put 'PXR5cGVvZiBTfHwibnVtYmVyIj09dHlwZW9mIFN8fCJzdHJpbmciPT10eXBlb2YgU3x8InN5bWJvbCI9PXR5cGVvZiBTfHx2b2lkIDA9PT1TfSxPLmlzQnVmZmVyPVIoMjk3NCk7dmFyIGc9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJP'@;
put 'Y3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBDKFMsdil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLHYpfU8ubG9nPWZ1bmN0aW9uKCl7dmFyIFMsdjtLLmxvZygiJXMgLSAlcyIsKHY9W04oKFM9bmV3IERhdGUpLmdldEhvdXJzKCkpLE4oUy5nZXRNaW51'@;
put 'dGVzKCkpLE4oUy5nZXRTZWNvbmRzKCkpXS5qb2luKCI6IiksW1MuZ2V0RGF0ZSgpLGdbUy5nZXRNb250aCgpXSx2XS5qb2luKCIgIikpLE8uZm9ybWF0LmFwcGx5KE8sYXJndW1lbnRzKSl9LE8uaW5oZXJpdHM9UigxNzI1KSxPLl9leHRlbmQ9ZnVuY3Rpb24oUyx2KXtpZighdnx8IWNlKHYp'@;
put 'KXJldHVybiBTO2Zvcih2YXIgcD1PYmplY3Qua2V5cyh2KSx3PXAubGVuZ3RoO3ctLTspU1twW3ddXT12W3Bbd11dO3JldHVybiBTfX0sMjUyMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz0id2luMzIiPT09ei5wbGF0Zm9ybSxJPVIoODA1OSk7ZnVuY3Rpb24gayhv'@;
put 'ZSxzZSl7Zm9yKHZhciBoZT1bXSx1ZT0wO3VlPG9lLmxlbmd0aDt1ZSsrKXt2YXIgY2U9b2VbdWVdO2NlJiYiLiIhPT1jZSYmKCIuLiI9PT1jZT9oZS5sZW5ndGgmJiIuLiIhPT1oZVtoZS5sZW5ndGgtMV0/aGUucG9wKCk6c2UmJmhlLnB1c2goIi4uIik6aGUucHVzaChjZSkpfXJldHVybiBo'@;
put 'ZX1mdW5jdGlvbiBFKG9lKXtmb3IodmFyIHNlPW9lLmxlbmd0aC0xLGhlPTA7aGU8PXNlJiYhb2VbaGVdO2hlKyspO2Zvcih2YXIgdWU9c2U7dWU+PTAmJiFvZVt1ZV07dWUtLSk7cmV0dXJuIDA9PT1oZSYmdWU9PT1zZT9vZTpoZT51ZT9bXTpvZS5zbGljZShoZSx1ZSsxKX12YXIgaj0vXihb'@;
put 'YS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStbXFxcL10rW15cXFwvXSspPyhbXFxcL10pPyhbXHNcU10qPykkLyxWPS9eKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXFxcL10rP3wpKFwuW14uXC9cXF0qfCkpKD86W1xcXC9dKikkLyxCPXt9O2Z1bmN0aW9uIFkob2Upe3ZhciBzZT1qLmV4ZWMo'@;
put 'b2UpLGhlPShzZVsxXXx8IiIpKyhzZVsyXXx8IiIpLGNlPVYuZXhlYyhzZVszXXx8IiIpO3JldHVybltoZSxjZVsxXSxjZVsyXSxjZVszXV19ZnVuY3Rpb24gWChvZSl7dmFyIHNlPWouZXhlYyhvZSksaGU9c2VbMV18fCIiLHVlPSEhaGUmJiI6IiE9PWhlWzFdO3JldHVybntkZXZpY2U6aGUs'@;
put 'aXNVbmM6dWUsaXNBYnNvbHV0ZTp1ZXx8ISFzZVsyXSx0YWlsOnNlWzNdfX1mdW5jdGlvbiBVKG9lKXtyZXR1cm4iXFxcXCIrb2UucmVwbGFjZSgvXltcXFwvXSsvLCIiKS5yZXBsYWNlKC9bXFxcL10rL2csIlxcIil9Qi5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBvZT0iIixzZT0iIixo'@;
put 'ZT0hMSx1ZT1hcmd1bWVudHMubGVuZ3RoLTE7dWU+PS0xO3VlLS0pe3ZhciBjZTtpZih1ZT49MD9jZT1hcmd1bWVudHNbdWVdOm9lPyhjZT16LmVudlsiPSIrb2VdKSYmY2Uuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKT09PW9lLnRvTG93ZXJDYXNlKCkrIlxcInx8KGNlPW9lKyJcXCIpOmNl'@;
put 'PXouY3dkKCksIUkuaXNTdHJpbmcoY2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoY2Upe3ZhciBHPVgoY2UpLGI9Ry5kZXZpY2UsRD1HLmlzVW5jLEg9Ry5pc0Fic29sdXRlLE49Ry50YWlsO2lmKCghYnx8IW9l'@;
put 'fHxiLnRvTG93ZXJDYXNlKCk9PT1vZS50b0xvd2VyQ2FzZSgpKSYmKG9lfHwob2U9YiksaGV8fChzZT1OKyJcXCIrc2UsaGU9SCksb2UmJmhlKSlicmVha319cmV0dXJuIEQmJihvZT1VKG9lKSksb2UrKGhlPyJcXCI6IiIpKyhzZT1rKHNlLnNwbGl0KC9bXFxcL10rLyksIWhlKS5qb2luKCJc'@;
put 'XCIpKXx8Ii4ifSxCLm5vcm1hbGl6ZT1mdW5jdGlvbihvZSl7dmFyIHNlPVgob2UpLGhlPXNlLmRldmljZSx1ZT1zZS5pc1VuYyxjZT1zZS5pc0Fic29sdXRlLEc9c2UudGFpbCxiPS9bXFxcL10kLy50ZXN0KEcpO3JldHVybihHPWsoRy5zcGxpdCgvW1xcXC9dKy8pLCFjZSkuam9pbigiXFwi'@;
put 'KSl8fGNlfHwoRz0iLiIpLEcmJmImJihHKz0iXFwiKSx1ZSYmKGhlPVUoaGUpKSxoZSsoY2U/IlxcIjoiIikrR30sQi5pc0Fic29sdXRlPWZ1bmN0aW9uKG9lKXtyZXR1cm4gWChvZSkuaXNBYnNvbHV0ZX0sQi5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBvZT1bXSxzZT0wO3NlPGFyZ3VtZW50'@;
put 'cy5sZW5ndGg7c2UrKyl7dmFyIGhlPWFyZ3VtZW50c1tzZV07aWYoIUkuaXNTdHJpbmcoaGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7aGUmJm9lLnB1c2goaGUpfXZhciB1ZT1vZS5qb2luKCJcXCIpO3JldHVybi9eW1xc'@;
put 'XC9dezJ9W15cXFwvXS8udGVzdChvZVswXSl8fCh1ZT11ZS5yZXBsYWNlKC9eW1xcXC9dezIsfS8sIlxcIikpLEIubm9ybWFsaXplKHVlKX0sQi5yZWxhdGl2ZT1mdW5jdGlvbihvZSxzZSl7b2U9Qi5yZXNvbHZlKG9lKSxzZT1CLnJlc29sdmUoc2UpO2Zvcih2YXIgaGU9b2UudG9Mb3dlckNh'@;
put 'c2UoKSx1ZT1zZS50b0xvd2VyQ2FzZSgpLGNlPUUoc2Uuc3BsaXQoIlxcIikpLEc9RShoZS5zcGxpdCgiXFwiKSksYj1FKHVlLnNwbGl0KCJcXCIpKSxEPU1hdGgubWluKEcubGVuZ3RoLGIubGVuZ3RoKSxIPUQsTj0wO048RDtOKyspaWYoR1tOXSE9PWJbTl0pe0g9TjticmVha31pZigwPT1I'@;
put 'KXJldHVybiBzZTt2YXIgZz1bXTtmb3IoTj1IO048Ry5sZW5ndGg7TisrKWcucHVzaCgiLi4iKTtyZXR1cm4oZz1nLmNvbmNhdChjZS5zbGljZShIKSkpLmpvaW4oIlxcIil9LEIuX21ha2VMb25nPWZ1bmN0aW9uKG9lKXtpZighSS5pc1N0cmluZyhvZSkpcmV0dXJuIG9lO2lmKCFvZSlyZXR1'@;
put 'cm4iIjt2YXIgc2U9Qi5yZXNvbHZlKG9lKTtyZXR1cm4vXlthLXpBLVpdXDpcXC8udGVzdChzZSk/IlxcXFw/XFwiK3NlOi9eXFxcXFtePy5dLy50ZXN0KHNlKT8iXFxcXD9cXFVOQ1xcIitzZS5zdWJzdHJpbmcoMik6b2V9LEIuZGlybmFtZT1mdW5jdGlvbihvZSl7dmFyIHNlPVkob2UpLGhl'@;
put 'PXNlWzBdLHVlPXNlWzFdO3JldHVybiBoZXx8dWU/KHVlJiYodWU9dWUuc3Vic3RyKDAsdWUubGVuZ3RoLTEpKSxoZSt1ZSk6Ii4ifSxCLmJhc2VuYW1lPWZ1bmN0aW9uKG9lLHNlKXt2YXIgaGU9WShvZSlbMl07cmV0dXJuIHNlJiZoZS5zdWJzdHIoLTEqc2UubGVuZ3RoKT09PXNlJiYoaGU9'@;
put 'aGUuc3Vic3RyKDAsaGUubGVuZ3RoLXNlLmxlbmd0aCkpLGhlfSxCLmV4dG5hbWU9ZnVuY3Rpb24ob2Upe3JldHVybiBZKG9lKVszXX0sQi5mb3JtYXQ9ZnVuY3Rpb24ob2Upe2lmKCFJLmlzT2JqZWN0KG9lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11'@;
put 'c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2Ygb2UpO2lmKCFJLmlzU3RyaW5nKG9lLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIrdHlwZW9mIG9lLnJvb3QpO3ZhciBoZT1vZS5k'@;
put 'aXIsdWU9b2UuYmFzZXx8IiI7cmV0dXJuIGhlP2hlW2hlLmxlbmd0aC0xXT09PUIuc2VwP2hlK3VlOmhlK0Iuc2VwK3VlOnVlfSxCLnBhcnNlPWZ1bmN0aW9uKG9lKXtpZighSS5pc1N0cmluZyhvZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoU3RyaW5nJyBtdXN0IGJl'@;
put 'IGEgc3RyaW5nLCBub3QgIit0eXBlb2Ygb2UpO3ZhciBzZT1ZKG9lKTtpZighc2V8fDQhPT1zZS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK29lKyInIik7cmV0dXJue3Jvb3Q6c2VbMF0sZGlyOnNlWzBdK3NlWzFdLnNsaWNlKDAsLTEpLGJhc2U6c2VbMl0s'@;
put 'ZXh0OnNlWzNdLG5hbWU6c2VbMl0uc2xpY2UoMCxzZVsyXS5sZW5ndGgtc2VbM10ubGVuZ3RoKX19LEIuc2VwPSJcXCIsQi5kZWxpbWl0ZXI9IjsiO3ZhciBxPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLyxlZT17fTtmdW5j'@;
put 'dGlvbiB0ZShvZSl7cmV0dXJuIHEuZXhlYyhvZSkuc2xpY2UoMSl9ZWUucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgb2U9IiIsc2U9ITEsaGU9YXJndW1lbnRzLmxlbmd0aC0xO2hlPj0tMSYmIXNlO2hlLS0pe3ZhciB1ZT1oZT49MD9hcmd1bWVudHNbaGVdOnouY3dkKCk7aWYoIUkuaXNT'@;
put 'dHJpbmcodWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7dWUmJihvZT11ZSsiLyIrb2Usc2U9Ii8iPT09dWVbMF0pfXJldHVybihzZT8iLyI6IiIpKyhvZT1rKG9lLnNwbGl0KCIvIiksIXNlKS5qb2luKCIvIikpfHwi'@;
put 'LiJ9LGVlLm5vcm1hbGl6ZT1mdW5jdGlvbihvZSl7dmFyIHNlPWVlLmlzQWJzb2x1dGUob2UpLGhlPW9lJiYiLyI9PT1vZVtvZS5sZW5ndGgtMV07cmV0dXJuKG9lPWsob2Uuc3BsaXQoIi8iKSwhc2UpLmpvaW4oIi8iKSl8fHNlfHwob2U9Ii4iKSxvZSYmaGUmJihvZSs9Ii8iKSwoc2U/Ii8i'@;
put 'OiIiKStvZX0sZWUuaXNBYnNvbHV0ZT1mdW5jdGlvbihvZSl7cmV0dXJuIi8iPT09b2UuY2hhckF0KDApfSxlZS5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBvZT0iIixzZT0wO3NlPGFyZ3VtZW50cy5sZW5ndGg7c2UrKyl7dmFyIGhlPWFyZ3VtZW50c1tzZV07aWYoIUkuaXNTdHJpbmcoaGUp'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7aGUmJihvZSs9b2U/Ii8iK2hlOmhlKX1yZXR1cm4gZWUubm9ybWFsaXplKG9lKX0sZWUucmVsYXRpdmU9ZnVuY3Rpb24ob2Usc2Upe29lPWVlLnJlc29sdmUob2UpLnN1YnN0cigx'@;
put 'KSxzZT1lZS5yZXNvbHZlKHNlKS5zdWJzdHIoMSk7Zm9yKHZhciBoZT1FKG9lLnNwbGl0KCIvIikpLHVlPUUoc2Uuc3BsaXQoIi8iKSksY2U9TWF0aC5taW4oaGUubGVuZ3RoLHVlLmxlbmd0aCksRz1jZSxiPTA7YjxjZTtiKyspaWYoaGVbYl0hPT11ZVtiXSl7Rz1iO2JyZWFrfXZhciBEPVtd'@;
put 'O2ZvcihiPUc7YjxoZS5sZW5ndGg7YisrKUQucHVzaCgiLi4iKTtyZXR1cm4oRD1ELmNvbmNhdCh1ZS5zbGljZShHKSkpLmpvaW4oIi8iKX0sZWUuX21ha2VMb25nPWZ1bmN0aW9uKG9lKXtyZXR1cm4gb2V9LGVlLmRpcm5hbWU9ZnVuY3Rpb24ob2Upe3ZhciBzZT10ZShvZSksaGU9c2VbMF0s'@;
put 'dWU9c2VbMV07cmV0dXJuIGhlfHx1ZT8odWUmJih1ZT11ZS5zdWJzdHIoMCx1ZS5sZW5ndGgtMSkpLGhlK3VlKToiLiJ9LGVlLmJhc2VuYW1lPWZ1bmN0aW9uKG9lLHNlKXt2YXIgaGU9dGUob2UpWzJdO3JldHVybiBzZSYmaGUuc3Vic3RyKC0xKnNlLmxlbmd0aCk9PT1zZSYmKGhlPWhlLnN1'@;
put 'YnN0cigwLGhlLmxlbmd0aC1zZS5sZW5ndGgpKSxoZX0sZWUuZXh0bmFtZT1mdW5jdGlvbihvZSl7cmV0dXJuIHRlKG9lKVszXX0sZWUuZm9ybWF0PWZ1bmN0aW9uKG9lKXtpZighSS5pc09iamVjdChvZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0'@;
put 'IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIG9lKTtpZighSS5pc1N0cmluZyhvZS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBvZS5yb290KTtyZXR1cm4ob2UuZGly'@;
put 'P29lLmRpcitlZS5zZXA6IiIpKyhvZS5iYXNlfHwiIil9LGVlLnBhcnNlPWZ1bmN0aW9uKG9lKXtpZighSS5pc1N0cmluZyhvZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2Ygb2UpO3ZhciBzZT10ZShv'@;
put 'ZSk7aWYoIXNlfHw0IT09c2UubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0aCAnIitvZSsiJyIpO3JldHVybiBzZVsxXT1zZVsxXXx8IiIsc2VbMl09c2VbMl18fCIiLHNlWzNdPXNlWzNdfHwiIix7cm9vdDpzZVswXSxkaXI6c2VbMF0rc2VbMV0uc2xpY2UoMCwtMSks'@;
put 'YmFzZTpzZVsyXSxleHQ6c2VbM10sbmFtZTpzZVsyXS5zbGljZSgwLHNlWzJdLmxlbmd0aC1zZVszXS5sZW5ndGgpfX0sZWUuc2VwPSIvIixlZS5kZWxpbWl0ZXI9IjoiLE0uZXhwb3J0cz1LP0I6ZWUsTS5leHBvcnRzLnBvc2l4PWVlLE0uZXhwb3J0cy53aW4zMj1CfSw1NjMyOihNLE8sUik9'@;
put 'PntPLnBia2RmMj1SKDg2MzgpLE8ucGJrZGYyU3luYz1SKDEyNTcpfSw4NjM4OihNLE8sUik9Pnt2YXIgeixLLEk9Uig5NTA5KS5CdWZmZXIsaz1SKDczNTcpLEU9UigyMzY4KSxqPVIoMTI1NyksVj1SKDc3NzcpLEI9Ui5nLmNyeXB0byYmUi5nLmNyeXB0by5zdWJ0bGUsWT17c2hhOiJTSEEt'@;
put 'MSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEtNTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0sWD1bXTtmdW5jdGlvbiBVKCl7cmV0'@;
put 'dXJuIEt8fChLPVIuZy5wcm9jZXNzJiZSLmcucHJvY2Vzcy5uZXh0VGljaz9SLmcucHJvY2Vzcy5uZXh0VGljazpSLmcucXVldWVNaWNyb3Rhc2s/Ui5nLnF1ZXVlTWljcm90YXNrOlIuZy5zZXRJbW1lZGlhdGU/Ui5nLnNldEltbWVkaWF0ZTpSLmcuc2V0VGltZW91dCl9ZnVuY3Rpb24gcShl'@;
put 'ZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIEIuaW1wb3J0S2V5KCJyYXciLGVlLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIEIuZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OnRlLGl0ZXJhdGlvbnM6b2UsaGFzaDp7bmFtZTpo'@;
put 'ZX19LHVlLHNlPDwzKX0pLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiBJLmZyb20odWUpfSl9TS5leHBvcnRzPWZ1bmN0aW9uKGVlLHRlLG9lLHNlLGhlLHVlKXsiZnVuY3Rpb24iPT10eXBlb2YgaGUmJih1ZT1oZSxoZT12b2lkIDApO3ZhciBHLGIsY2U9WVsoaGU9aGV8fCJzaGExIikudG9M'@;
put 'b3dlckNhc2UoKV07aWYoY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLmcuUHJvbWlzZSl7aWYoayhvZSxzZSksZWU9VihlZSxFLCJQYXNzd29yZCIpLHRlPVYodGUsRSwiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiB1ZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRv'@;
put 'IHBia2RmMiIpO0c9ZnVuY3Rpb24oRyl7aWYoUi5nLnByb2Nlc3MmJiFSLmcucHJvY2Vzcy5icm93c2VyfHwhQnx8IUIuaW1wb3J0S2V5fHwhQi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PVhbR10pcmV0dXJuIFhbR107dmFyIGI9cSh6PXp8fEku'@;
put 'YWxsb2MoOCkseiwxMCwxMjgsRykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiBYW0ddPWIsYn0oY2UpLnRoZW4oZnVuY3Rpb24oRyl7cmV0dXJuIEc/cShlZSx0ZSxvZSxzZSxjZSk6aihlZSx0ZSxvZSxzZSxoZSl9KSxiPXVl'@;
put 'LEcudGhlbihmdW5jdGlvbihEKXtVKCkoZnVuY3Rpb24oKXtiKG51bGwsRCl9KX0sZnVuY3Rpb24oRCl7VSgpKGZ1bmN0aW9uKCl7YihEKX0pfSl9ZWxzZSBVKCkoZnVuY3Rpb24oKXt2YXIgRzt0cnl7Rz1qKGVlLHRlLG9lLHNlLGhlKX1jYXRjaChiKXtyZXR1cm4gdWUoYil9dWUobnVsbCxH'@;
put 'KX0pfX0sMjM2ODooTSxPLFIpPT57dmFyIHosSz1SKDQxNTUpO3o9Ui5nLnByb2Nlc3MmJlIuZy5wcm9jZXNzLmJyb3dzZXI/InV0Zi04IjpSLmcucHJvY2VzcyYmUi5nLnByb2Nlc3MudmVyc2lvbj9wYXJzZUludChLLnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0'@;
put 'Zi04IjoiYmluYXJ5IjoidXRmLTgiLE0uZXhwb3J0cz16fSw3MzU3Ok09Pnt2YXIgTz1NYXRoLnBvdygyLDMwKS0xO00uZXhwb3J0cz1mdW5jdGlvbihSLHope2lmKCJudW1iZXIiIT10eXBlb2YgUil0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRpb25zIG5vdCBhIG51bWJlciIpO2lmKFI8'@;
put 'MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0aW9ucyIpO2lmKCJudW1iZXIiIT10eXBlb2Ygeil0aHJvdyBuZXcgVHlwZUVycm9yKCJLZXkgbGVuZ3RoIG5vdCBhIG51bWJlciIpO2lmKHo8MHx8ej5PfHx6IT16KXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9'@;
put 'fSwxMjU3OihNLE8sUik9Pnt2YXIgej1SKDgwMjgpLEs9Uig5Nzg1KSxJPVIoOTA3Miksaz1SKDk1MDkpLkJ1ZmZlcixFPVIoNzM1Nyksaj1SKDIzNjgpLFY9Uig3Nzc3KSxCPWsuYWxsb2MoMTI4KSxZPXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1'@;
put 'MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gWChVLHEsZWUpe3ZhciBHLHRlPSJybWQxNjAiPT09KEc9VSl8fCJyaXBlbWQxNjAiPT09Rz9mdW5jdGlvbiBEKEgpe3JldHVybihuZXcgSykudXBkYXRlKEgpLmRpZ2VzdCgpfToibWQ1Ij09PUc/ejpmdW5jdGlvbiBiKEgp'@;
put 'e3JldHVybiBJKEcpLnVwZGF0ZShIKS5kaWdlc3QoKX0sb2U9InNoYTUxMiI9PT1VfHwic2hhMzg0Ij09PVU/MTI4OjY0O3EubGVuZ3RoPm9lP3E9dGUocSk6cS5sZW5ndGg8b2UmJihxPWsuY29uY2F0KFtxLEJdLG9lKSk7Zm9yKHZhciBzZT1rLmFsbG9jVW5zYWZlKG9lK1lbVV0pLGhlPWsu'@;
put 'YWxsb2NVbnNhZmUob2UrWVtVXSksdWU9MDt1ZTxvZTt1ZSsrKXNlW3VlXT01NF5xW3VlXSxoZVt1ZV09OTJecVt1ZV07dmFyIGNlPWsuYWxsb2NVbnNhZmUob2UrZWUrNCk7c2UuY29weShjZSwwLDAsb2UpLHRoaXMuaXBhZDE9Y2UsdGhpcy5pcGFkMj1zZSx0aGlzLm9wYWQ9aGUsdGhpcy5h'@;
put 'bGc9VSx0aGlzLmJsb2Nrc2l6ZT1vZSx0aGlzLmhhc2g9dGUsdGhpcy5zaXplPVlbVV19WC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFUscSl7cmV0dXJuIFUuY29weShxLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2gocSkuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFz'@;
put 'aCh0aGlzLm9wYWQpfSxNLmV4cG9ydHM9ZnVuY3Rpb24oVSxxLGVlLHRlLG9lKXtFKGVlLHRlKTt2YXIgc2U9bmV3IFgob2U9b2V8fCJzaGExIixVPVYoVSxqLCJQYXNzd29yZCIpLChxPVYocSxqLCJTYWx0IikpLmxlbmd0aCksaGU9ay5hbGxvY1Vuc2FmZSh0ZSksdWU9ay5hbGxvY1Vuc2Fm'@;
put 'ZShxLmxlbmd0aCs0KTtxLmNvcHkodWUsMCwwLHEubGVuZ3RoKTtmb3IodmFyIGNlPTAsRz1ZW29lXSxiPU1hdGguY2VpbCh0ZS9HKSxEPTE7RDw9YjtEKyspe3VlLndyaXRlVUludDMyQkUoRCxxLmxlbmd0aCk7Zm9yKHZhciBIPXNlLnJ1bih1ZSxzZS5pcGFkMSksTj1ILGc9MTtnPGVlO2cr'@;
put 'Kyl7Tj1zZS5ydW4oTixzZS5pcGFkMik7Zm9yKHZhciBDPTA7QzxHO0MrKylIW0NdXj1OW0NdfUguY29weShoZSxjZSksY2UrPUd9cmV0dXJuIGhlfX0sNzc3NzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKEssSSxrKXtpZih6LmlzQnVmZmVyKEsp'@;
put 'KXJldHVybiBLO2lmKCJzdHJpbmciPT10eXBlb2YgSylyZXR1cm4gei5mcm9tKEssSSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KEspKXJldHVybiB6LmZyb20oSy5idWZmZXIpO3Rocm93IG5ldyBUeXBlRXJyb3IoaysiIG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIHR5cGVkIGFycmF5'@;
put 'IG9yIGEgRGF0YVZpZXciKX19LDQxNTU6TT0+e3ZhciBPLFIsej1NLmV4cG9ydHM9e307ZnVuY3Rpb24gSygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIEkoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90'@;
put 'IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGsoZWUpe2lmKE89PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGVlLDApO2lmKChPPT09S3x8IU8pJiZzZXRUaW1lb3V0KXJldHVybiBPPXNldFRpbWVvdXQsc2V0VGltZW91dChlZSwwKTt0cnl7cmV0dXJuIE8oZWUsMCl9Y2F0Y2h7dHJ5'@;
put 'e3JldHVybiBPLmNhbGwobnVsbCxlZSwwKX1jYXRjaHtyZXR1cm4gTy5jYWxsKHRoaXMsZWUsMCl9fX0hZnVuY3Rpb24oKXt0cnl7Tz0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Okt9Y2F0Y2h7Tz1LfXRyeXtSPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVv'@;
put 'dXQ/Y2xlYXJUaW1lb3V0Okl9Y2F0Y2h7Uj1JfX0oKTt2YXIgRSxqPVtdLFY9ITEsQj0tMTtmdW5jdGlvbiBZKCl7ViYmRSYmKFY9ITEsRS5sZW5ndGg/aj1FLmNvbmNhdChqKTpCPS0xLGoubGVuZ3RoJiZYKCkpfWZ1bmN0aW9uIFgoKXtpZighVil7dmFyIGVlPWsoWSk7Vj0hMDtmb3IodmFy'@;
put 'IHRlPWoubGVuZ3RoO3RlOyl7Zm9yKEU9aixqPVtdOysrQjx0ZTspRSYmRVtCXS5ydW4oKTtCPS0xLHRlPWoubGVuZ3RofUU9bnVsbCxWPSExLGZ1bmN0aW9uKG9lKXtpZihSPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQob2UpO2lmKChSPT09SXx8IVIpJiZjbGVhclRpbWVv'@;
put 'dXQpcmV0dXJuIFI9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChvZSk7dHJ5e3JldHVybiBSKG9lKX1jYXRjaHt0cnl7cmV0dXJuIFIuY2FsbChudWxsLG9lKX1jYXRjaHtyZXR1cm4gUi5jYWxsKHRoaXMsb2UpfX19KGVlKX19ZnVuY3Rpb24gVShlZSx0ZSl7dGhpcy5mdW49ZWUsdGhpcy5h'@;
put 'cnJheT10ZX1mdW5jdGlvbiBxKCl7fXoubmV4dFRpY2s9ZnVuY3Rpb24oZWUpe3ZhciB0ZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBvZT0xO29lPGFyZ3VtZW50cy5sZW5ndGg7b2UrKyl0ZVtvZS0xXT1hcmd1bWVudHNbb2Vd'@;
put 'O2oucHVzaChuZXcgVShlZSx0ZSkpLDEhPT1qLmxlbmd0aHx8Vnx8ayhYKX0sVS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sei50aXRsZT0iYnJvd3NlciIsei5icm93c2VyPSEwLHouZW52PXt9LHouYXJndj1bXSx6LnZlcnNpb249'@;
put 'IiIsei52ZXJzaW9ucz17fSx6Lm9uPXEsei5hZGRMaXN0ZW5lcj1xLHoub25jZT1xLHoub2ZmPXEsei5yZW1vdmVMaXN0ZW5lcj1xLHoucmVtb3ZlQWxsTGlzdGVuZXJzPXEsei5lbWl0PXEsei5wcmVwZW5kTGlzdGVuZXI9cSx6LnByZXBlbmRPbmNlTGlzdGVuZXI9cSx6Lmxpc3RlbmVycz1m'@;
put 'dW5jdGlvbihlZSl7cmV0dXJuW119LHouYmluZGluZz1mdW5jdGlvbihlZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSx6LmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sei5jaGRpcj1mdW5jdGlvbihlZSl7dGhyb3cgbmV3IEVycm9yKCJw'@;
put 'cm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sei51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sNjI0NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzY4OSksSz17fTtLLnJ1bGVzPVIoMzcwNCkubWFwKGZ1bmN0aW9uKEkpe3JldHVybntydWxlOkksc3VmZml4Okku'@;
put 'cmVwbGFjZSgvXihcKlwufFwhKS8sIiIpLHB1bnlTdWZmaXg6LTEsd2lsZGNhcmQ6IioiPT09SS5jaGFyQXQoMCksZXhjZXB0aW9uOiIhIj09PUkuY2hhckF0KDApfX0pLEsuZW5kc1dpdGg9ZnVuY3Rpb24oSSxrKXtyZXR1cm4tMSE9PUkuaW5kZXhPZihrLEkubGVuZ3RoLWsubGVuZ3RoKX0s'@;
put 'Sy5maW5kUnVsZT1mdW5jdGlvbihJKXt2YXIgaz16LnRvQVNDSUkoSSk7cmV0dXJuIEsucnVsZXMucmVkdWNlKGZ1bmN0aW9uKEUsail7cmV0dXJuLTE9PT1qLnB1bnlTdWZmaXgmJihqLnB1bnlTdWZmaXg9ei50b0FTQ0lJKGouc3VmZml4KSksSy5lbmRzV2l0aChrLCIuIitqLnB1bnlTdWZm'@;
put 'aXgpfHxrPT09ai5wdW55U3VmZml4P2o6RX0sbnVsbCl9LE8uZXJyb3JDb2Rlcz17RE9NQUlOX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgdG9vIHNob3J0LiIsRE9NQUlOX1RPT19MT05HOiJEb21haW4gbmFtZSB0b28gbG9uZy4gSXQgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAyNTUgY2hhcnMu'@;
put 'IixMQUJFTF9TVEFSVFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IHN0YXJ0IHdpdGggYSBkYXNoLiIsTEFCRUxfRU5EU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3QgZW5kIHdpdGggYSBkYXNoLiIsTEFCRUxfVE9PX0xPTkc6IkRvbWFpbiBuYW1l'@;
put 'IGxhYmVsIHNob3VsZCBiZSBhdCBtb3N0IDYzIGNoYXJzIGxvbmcuIixMQUJFTF9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBsZWFzdCAxIGNoYXJhY3RlciBsb25nLiIsTEFCRUxfSU5WQUxJRF9DSEFSUzoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG9ubHkgY29u'@;
put 'dGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBkYXNoZXMuIn0sSy52YWxpZGF0ZT1mdW5jdGlvbihJKXt2YXIgaz16LnRvQVNDSUkoSSk7aWYoay5sZW5ndGg8MSlyZXR1cm4iRE9NQUlOX1RPT19TSE9SVCI7aWYoay5sZW5ndGg+MjU1KXJldHVybiJET01BSU5fVE9PX0xPTkciO2Zv'@;
put 'cih2YXIgRSxqPWsuc3BsaXQoIi4iKSxWPTA7VjxqLmxlbmd0aDsrK1Ype2lmKCEoRT1qW1ZdKS5sZW5ndGgpcmV0dXJuIkxBQkVMX1RPT19TSE9SVCI7aWYoRS5sZW5ndGg+NjMpcmV0dXJuIkxBQkVMX1RPT19MT05HIjtpZigiLSI9PT1FLmNoYXJBdCgwKSlyZXR1cm4iTEFCRUxfU1RBUlRT'@;
put 'X1dJVEhfREFTSCI7aWYoIi0iPT09RS5jaGFyQXQoRS5sZW5ndGgtMSkpcmV0dXJuIkxBQkVMX0VORFNfV0lUSF9EQVNIIjtpZighL15bYS16MC05XC1dKyQvLnRlc3QoRSkpcmV0dXJuIkxBQkVMX0lOVkFMSURfQ0hBUlMifX0sTy5wYXJzZT1mdW5jdGlvbihJKXtpZigic3RyaW5nIiE9dHlw'@;
put 'ZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWluIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgaz1JLnNsaWNlKDApLnRvTG93ZXJDYXNlKCk7Ii4iPT09ay5jaGFyQXQoay5sZW5ndGgtMSkmJihrPWsuc2xpY2UoMCxrLmxlbmd0aC0xKSk7dmFyIEU9Sy52YWxpZGF0ZShrKTtp'@;
put 'ZihFKXJldHVybntpbnB1dDpJLGVycm9yOnttZXNzYWdlOk8uZXJyb3JDb2Rlc1tFXSxjb2RlOkV9fTt2YXIgaj17aW5wdXQ6SSx0bGQ6bnVsbCxzbGQ6bnVsbCxkb21haW46bnVsbCxzdWJkb21haW46bnVsbCxsaXN0ZWQ6ITF9LFY9ay5zcGxpdCgiLiIpO2lmKCJsb2NhbCI9PT1WW1YubGVu'@;
put 'Z3RoLTFdKXJldHVybiBqO3ZhciBCPWZ1bmN0aW9uKCl7cmV0dXJuL3huLS0vLnRlc3QoaykmJihqLmRvbWFpbiYmKGouZG9tYWluPXoudG9BU0NJSShqLmRvbWFpbikpLGouc3ViZG9tYWluJiYoai5zdWJkb21haW49ei50b0FTQ0lJKGouc3ViZG9tYWluKSkpLGp9LFk9Sy5maW5kUnVsZShr'@;
put 'KTtpZighWSlyZXR1cm4gVi5sZW5ndGg8Mj9qOihqLnRsZD1WLnBvcCgpLGouc2xkPVYucG9wKCksai5kb21haW49W2ouc2xkLGoudGxkXS5qb2luKCIuIiksVi5sZW5ndGgmJihqLnN1YmRvbWFpbj1WLnBvcCgpKSxCKCkpO2oubGlzdGVkPSEwO3ZhciBYPVkuc3VmZml4LnNwbGl0KCIuIiks'@;
put 'VT1WLnNsaWNlKDAsVi5sZW5ndGgtWC5sZW5ndGgpO3JldHVybiBZLmV4Y2VwdGlvbiYmVS5wdXNoKFguc2hpZnQoKSksai50bGQ9WC5qb2luKCIuIiksVS5sZW5ndGg/KFkud2lsZGNhcmQmJihYLnVuc2hpZnQoVS5wb3AoKSksai50bGQ9WC5qb2luKCIuIikpLFUubGVuZ3RoJiYoai5zbGQ9'@;
put 'VS5wb3AoKSxqLmRvbWFpbj1bai5zbGQsai50bGRdLmpvaW4oIi4iKSxVLmxlbmd0aCYmKGouc3ViZG9tYWluPVUuam9pbigiLiIpKSksQigpKTpCKCl9LE8uZ2V0PWZ1bmN0aW9uKEkpe3JldHVybiBJJiZPLnBhcnNlKEkpLmRvbWFpbnx8bnVsbH0sTy5pc1ZhbGlkPWZ1bmN0aW9uKEkpe3Zh'@;
put 'ciBrPU8ucGFyc2UoSSk7cmV0dXJuISghay5kb21haW58fCFrLmxpc3RlZCl9fSw3OTAwOihNLE8sUik9PntPLnB1YmxpY0VuY3J5cHQ9Uig2NTU5KSxPLnByaXZhdGVEZWNyeXB0PVIoNjEzOCksTy5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbih6LEspe3JldHVybiBPLnB1YmxpY0VuY3J5cHQo'@;
put 'eixLLCEwKX0sTy5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKHosSyl7cmV0dXJuIE8ucHJpdmF0ZURlY3J5cHQoeixLLCEwKX19LDkxOTk6KE0sTyxSKT0+e3ZhciB6PVIoMzQ4MiksSz1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBJKGspe3ZhciBFPUsuYWxsb2NVbnNhZmUoNCk7cmV0dXJuIEUu'@;
put 'd3JpdGVVSW50MzJCRShrLDApLEV9TS5leHBvcnRzPWZ1bmN0aW9uKGssRSl7Zm9yKHZhciBqLFY9Sy5hbGxvYygwKSxCPTA7Vi5sZW5ndGg8RTspaj1JKEIrKyksVj1LLmNvbmNhdChbVix6KCJzaGExIikudXBkYXRlKGspLnVwZGF0ZShqKS5kaWdlc3QoKV0pO3JldHVybiBWLnNsaWNlKDAs'@;
put 'RSl9fSwyMTQ0OmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnBy'@;
put 'b3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxu'@;
put 'dWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZv'@;
put 'aWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDcxMDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7'@;
put 'dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6'@;
put 'bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1h'@;
put 'eD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxD'@;
put 'LFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5u'@;
put 'ZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMp'@;
put 'e2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5'@;
put 'MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtp'@;
put 'ZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2'@;
put 'PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+'@;
put 'MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1K'@;
put 'JjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgp'@;
put 'O2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tK'@;
put 'Kz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAo'@;
put 'KX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUop'@;
put 'K1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9'@;
put 'MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro'@;
put 'KTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwp'@;
put 'O3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEm'@;
put 'JjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCks'@;
put 'dGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0'@;
put 'MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwy'@;
put 'MDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXww'@;
put 'O3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxP'@;
put 'ZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tm'@;
put 'ZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53'@;
put 'b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygx'@;
put 'NikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1pl'@;
put 'cm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdh'@;
put 'dGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10'@;
put 'aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUu'@;
put 'cHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihn'@;
put 'LEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVu'@;
put 'Z3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCks'@;
put 'ZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGgu'@;
put 'Y2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30s'@;
put 'RS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0y'@;
put 'KSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRo'@;
put 'aXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBN'@;
put 'YXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109'@;
put 'MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVv'@;
put 'cihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNs'@;
put 'b25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNb'@;
put 'U107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0'@;
put 'aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0s'@;
put 'RS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7'@;
put 'djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9'@;
put 'LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xv'@;
put 'bmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8'@;
put 'Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4o'@;
put 'MTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWdu'@;
put 'KCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7'@;
put 'dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lm'@;
put 'KHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rp'@;
put 'b24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRo'@;
put 'aXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1'@;
put 'cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5l'@;
put 'Z2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEw'@;
put 'ODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0'@;
put 'dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFy'@;
put 'IHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsSmU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1s'@;
put 'dD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0LE10PWl0Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4x'@;
put 'MyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEz'@;
put 'LHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixQbj1Sbj4+PjEz'@;
put 'LG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkp'@;
put 'PDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12'@;
put 'K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwo'@;
put 'WWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4'@;
put 'cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9'@;
put 'TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoSmUsZnQpfDAsdz13K01hdGguaW11bChKZSxm'@;
put 'bil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxt'@;
put 'bil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1h'@;
put 'dGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11'@;
put 'bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkr'@;
put 'KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVl'@;
put 'LCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwoSmUsTnQpfDAsdz13K01hdGguaW11bChKZSxtbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVs'@;
put 'KEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiks'@;
put 'dj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEp0KXwwKStNYXRo'@;
put 'LmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDAp'@;
put 'fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11'@;
put 'bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01h'@;
put 'dGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChKZSxwdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVu'@;
put 'KXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkr'@;
put 'TWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11'@;
put 'bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdl'@;
put 'LEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxQbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxQbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkm'@;
put 'PTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01h'@;
put 'dGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5p'@;
put 'bXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxKdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxz'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUG4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFBuKXww'@;
put 'O3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11'@;
put 'bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxKdCl8MCkrTWF0aC5pbXVsKHpl'@;
put 'LEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUs'@;
put 'eW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKFllLFBuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxQbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwx'@;
put 'Myl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwo'@;
put 'UHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxK'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXww'@;
put 'LHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUG4pfDAp'@;
put 'K01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFBuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChK'@;
put 'ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2'@;
put 'PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsUG4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFBuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkr'@;
put 'TWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxKdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11'@;
put 'bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFBu'@;
put 'KXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxQbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmlt'@;
put 'dWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERl'@;
put 'LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUG4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLFBuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxu'@;
put 'KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01h'@;
put 'dGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsUG4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKE10LFBuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYp'@;
put 'fDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFBuKXwwKStNYXRoLmltdWwob24sJHQpfDAs'@;
put 'dz13K01hdGguaW11bChvbixQbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDAp'@;
put 'KyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsUG4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sUG4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGgu'@;
put 'aW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11'@;
put 'bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2'@;
put 'XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24g'@;
put 'b2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhp'@;
put 'cy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxK'@;
put 'Lmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSks'@;
put 'S2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxl'@;
put 'bmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTty'@;
put 'ZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2'@;
put 'LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9'@;
put 'TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxKZT1MZSpL'@;
put 'ZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9SmUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNi'@;
put 'PWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFy'@;
put 'IHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisx'@;
put 'XS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0w'@;
put 'fGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0'@;
put 'dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiks'@;
put 'ZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEos'@;
put 'dyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1'@;
put 'Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUu'@;
put 'cHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53'@;
put 'b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBn'@;
put 'KSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJl'@;
put 'dHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90'@;
put 'b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9'@;
put 'bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFy'@;
put 'IHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+'@;
put 'MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlm'@;
put 'KDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhp'@;
put 'cy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRo'@;
put 'aXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2'@;
put 'YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3Ry'@;
put 'aXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUu'@;
put 'cHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJl'@;
put 'ciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4o'@;
put 'Uyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5p'@;
put 'YWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNb'@;
put 'MF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVu'@;
put 'Z3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5w'@;
put 'cm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0x'@;
put 'LHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jk'@;
put 'c1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlz'@;
put 'dWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIg'@;
put 'dixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1Nd'@;
put 'PTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kysp'@;
put 'Sj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNb'@;
put 'cC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53'@;
put 'b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0x'@;
put 'O3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdh'@;
put 'dGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90'@;
put 'b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYo'@;
put 'dj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2'@;
put 'Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5n'@;
put 'dGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0p'@;
put 'KX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3Rv'@;
put 'dHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlz'@;
put 'LmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYu'@;
put 'bmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0'@;
put 'dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0'@;
put 'cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRp'@;
put 'dmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUo'@;
put 'KTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSks'@;
put 'cC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1'@;
put 'c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZl'@;
put 'KSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0x'@;
put 'OyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZl'@;
put 'PjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChn'@;
put 'KSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0w'@;
put 'O0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYo'@;
put 'MD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMu'@;
put 'd29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09'@;
put 'dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNb'@;
put 'd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1sw'@;
put 'XX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9'@;
put 'NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0'@;
put 'aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aCly'@;
put 'ZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUu'@;
put 'cHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlw'@;
put 'ZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRp'@;
put 'dmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNv'@;
put 'bnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBp'@;
put 'biByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVk'@;
put 'SUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUu'@;
put 'cmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f'@;
put 'dmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhp'@;
put 'cyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFy'@;
put 'IGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnAp'@;
put 'LHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0Iiwi'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBE'@;
put 'KCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlz'@;
put 'LnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhp'@;
put 'cy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3Vibigx'@;
put 'KS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlz'@;
put 'Lm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6'@;
put 'Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAs'@;
put 'Qyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1n'@;
put 'LndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRz'@;
put 'W3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3Ro'@;
put 'Kz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tn'@;
put 'Lmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29y'@;
put 'ZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTky'@;
put 'Ij09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYm'@;
put 'Zy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMp'@;
put 'fSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21w'@;
put 'KHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5'@;
put 'cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9'@;
put 'Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRo'@;
put 'aXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxn'@;
put 'LmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3Zh'@;
put 'ciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVk'@;
put 'KHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93'@;
put 'KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9PU9lLmNtcCh3KTtqZSsrKU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcg'@;
put 'RSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMu'@;
put 'bmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBB'@;
put 'cnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7'@;
put 'dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10p'@;
put 'LEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTty'@;
put 'ZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0'@;
put 'aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwo'@;
put 'Qyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAu'@;
put 'aWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp'@;
put 'cy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9'@;
put 'LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sNjEzODooTSxPLFIpPT57dmFyIHo9Uig5ODApLEs9Uig5MTk5KSxJPVIoNzg1OSksaz1S'@;
put 'KDIxNDQpLEU9UigzNjYzKSxqPVIoMzQ4MiksVj1SKDQ4MTgpLEI9Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKFksWCxVKXt2YXIgcTtxPVkucGFkZGluZz9ZLnBhZGRpbmc6VT8xOjQ7dmFyIGVlLHRlPXooWSksb2U9dGUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoWC5sZW5n'@;
put 'dGg+b2V8fG5ldyBrKFgpLmNtcCh0ZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtlZT1VP1YobmV3IGsoWCksdGUpOkUoWCx0ZSk7dmFyIHNlPUIuYWxsb2Mob2UtZWUubGVuZ3RoKTtpZihlZT1CLmNvbmNhdChbc2UsZWVdLG9lKSw0PT09cSlyZXR1'@;
put 'cm4gZnVuY3Rpb24oaGUsdWUpe3ZhciBjZT1oZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxHPWooInNoYTEiKS51cGRhdGUoQi5hbGxvYygwKSkuZGlnZXN0KCksYj1HLmxlbmd0aDtpZigwIT09dWVbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIEQ9dWUuc2xpY2Uo'@;
put 'MSxiKzEpLEg9dWUuc2xpY2UoYisxKSxOPUkoRCxLKEgsYikpLGc9SShILEsoTixjZS1iLTEpKTtpZihmdW5jdGlvbihTLHYpe1M9Qi5mcm9tKFMpLHY9Qi5mcm9tKHYpO3ZhciBwPTAsdz1TLmxlbmd0aDtTLmxlbmd0aCE9PXYubGVuZ3RoJiYocCsrLHc9TWF0aC5taW4oUy5sZW5ndGgsdi5s'@;
put 'ZW5ndGgpKTtmb3IodmFyIEo9LTE7KytKPHc7KXArPVNbSl1edltKXTtyZXR1cm4gcH0oRyxnLnNsaWNlKDAsYikpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgQz1iOzA9PT1nW0NdOylDKys7aWYoMSE9PWdbQysrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5'@;
put 'cHRpb24gZXJyb3IiKTtyZXR1cm4gZy5zbGljZShDKX0odGUsZWUpO2lmKDE9PT1xKXJldHVybiBmdW5jdGlvbihoZSx1ZSxjZSl7Zm9yKHZhciBHPXVlLnNsaWNlKDAsMiksYj0yLEQ9MDswIT09dWVbYisrXTspaWYoYj49dWUubGVuZ3RoKXtEKys7YnJlYWt9dmFyIEg9dWUuc2xpY2UoMixi'@;
put 'LTEpO2lmKCgiMDAwMiIhPT1HLnRvU3RyaW5nKCJoZXgiKSYmIWNlfHwiMDAwMSIhPT1HLnRvU3RyaW5nKCJoZXgiKSYmY2UpJiZEKyssSC5sZW5ndGg8OCYmRCsrLEQpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIHVlLnNsaWNlKGIpfSgwLGVlLFUpO2lmKDM9'@;
put 'PT1xKXJldHVybiBlZTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sNjU1OTooTSxPLFIpPT57dmFyIHo9Uig5ODApLEs9UigxNzk4KSxJPVIoMzQ4Miksaz1SKDkxOTkpLEU9Uig3ODU5KSxqPVIoMjE0NCksVj1SKDQ4MTgpLEI9UigzNjYzKSxZPVIoOTUwOSkuQnVmZmVy'@;
put 'O00uZXhwb3J0cz1mdW5jdGlvbihYLFUscSl7dmFyIGVlO2VlPVgucGFkZGluZz9YLnBhZGRpbmc6cT8xOjQ7dmFyIHRlLG9lPXooWCk7aWYoND09PWVlKXRlPWZ1bmN0aW9uKHNlLGhlKXt2YXIgdWU9c2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksY2U9aGUubGVuZ3RoLEc9SSgic2hhMSIpLnVw'@;
put 'ZGF0ZShZLmFsbG9jKDApKS5kaWdlc3QoKSxiPUcubGVuZ3RoLEQ9MipiO2lmKGNlPnVlLUQtMil0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTt2YXIgSD1ZLmFsbG9jKHVlLWNlLUQtMiksTj11ZS1iLTEsZz1LKGIpLEM9RShZLmNvbmNhdChbRyxILFkuYWxsb2MoMSwxKSxo'@;
put 'ZV0sTiksayhnLE4pKSxTPUUoZyxrKEMsYikpO3JldHVybiBuZXcgaihZLmNvbmNhdChbWS5hbGxvYygxKSxTLENdLHVlKSl9KG9lLFUpO2Vsc2UgaWYoMT09PWVlKXRlPWZ1bmN0aW9uKHNlLGhlLHVlKXt2YXIgY2UsRz1oZS5sZW5ndGgsYj1zZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihH'@;
put 'PmItMTEpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7cmV0dXJuIGNlPXVlP1kuYWxsb2MoYi1HLTMsMjU1KTpmdW5jdGlvbihEKXtmb3IodmFyIEgsTj1ZLmFsbG9jVW5zYWZlKEQpLGc9MCxDPUsoMipEKSxTPTA7ZzxEOylTPT09Qy5sZW5ndGgmJihDPUsoMipEKSxTPTAp'@;
put 'LChIPUNbUysrXSkmJihOW2crK109SCk7cmV0dXJuIE59KGItRy0zKSxuZXcgaihZLmNvbmNhdChbWS5mcm9tKFswLHVlPzE6Ml0pLGNlLFkuYWxsb2MoMSksaGVdLGIpKX0ob2UsVSxxKTtlbHNle2lmKDMhPT1lZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpO2lmKCh0ZT1u'@;
put 'ZXcgaihVKSkuY21wKG9lLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGF0YSB0b28gbG9uZyBmb3IgbW9kdWx1cyIpfXJldHVybiBxP0IodGUsb2UpOlYodGUsb2UpfX0sNDgxODooTSxPLFIpPT57dmFyIHo9UigyMTQ0KSxLPVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlv'@;
put 'bihJLGspe3JldHVybiBLLmZyb20oSS50b1JlZCh6Lm1vbnQoay5tb2R1bHVzKSkucmVkUG93KG5ldyB6KGsucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDc4NTk6TT0+e00uZXhwb3J0cz1mdW5jdGlvbihPLFIpe2Zvcih2YXIgej1PLmxlbmd0aCxLPS0xOysrSzx6'@;
put 'OylPW0tdXj1SW0tdO3JldHVybiBPfX0sMzY4OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO1IucihPKSxSLmQoTyx7ZGVjb2RlOigpPT5vZSxkZWZhdWx0OigpPT5jZSxlbmNvZGU6KCk9PnNlLHRvQVNDSUk6KCk9PnVlLHRvVW5pY29kZTooKT0+aGUsdWNzMmRlY29kZTooKT0+VSx1Y3MyZW5j'@;
put 'b2RlOigpPT5xfSk7Y29uc3Qgej0yMTQ3NDgzNjQ3LEs9MzYsST0vXnhuLS0vLGs9L1teXDAtXHg3Rl0vLEU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLGo9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6'@;
put 'IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LFY9TWF0aC5mbG9vcixCPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gWShHKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihqW0ddKX1mdW5jdGlv'@;
put 'biBYKEcsYil7Y29uc3QgRD1HLnNwbGl0KCJAIik7bGV0IEg9IiI7cmV0dXJuIEQubGVuZ3RoPjEmJihIPURbMF0rIkAiLEc9RFsxXSksSCtmdW5jdGlvbihnLEMpe2NvbnN0IFM9W107bGV0IHY9Zy5sZW5ndGg7Zm9yKDt2LS07KVNbdl09QyhnW3ZdKTtyZXR1cm4gU30oKEc9Ry5yZXBsYWNl'@;
put 'KEUsIi4iKSkuc3BsaXQoIi4iKSxiKS5qb2luKCIuIil9ZnVuY3Rpb24gVShHKXtjb25zdCBiPVtdO2xldCBEPTA7Y29uc3QgSD1HLmxlbmd0aDtmb3IoO0Q8SDspe2NvbnN0IE49Ry5jaGFyQ29kZUF0KEQrKyk7aWYoTj49NTUyOTYmJk48PTU2MzE5JiZEPEgpe2NvbnN0IGc9Ry5jaGFyQ29k'@;
put 'ZUF0KEQrKyk7NTYzMjA9PSg2NDUxMiZnKT9iLnB1c2goKCgxMDIzJk4pPDwxMCkrKDEwMjMmZykrNjU1MzYpOihiLnB1c2goTiksRC0tKX1lbHNlIGIucHVzaChOKX1yZXR1cm4gYn1jb25zdCBxPUc9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkcpLGVlPWZ1bmN0aW9uKEcsYil7cmV0dXJu'@;
put 'IEcrMjIrNzUqKEc8MjYpLSgoMCE9Yik8PDUpfSx0ZT1mdW5jdGlvbihHLGIsRCl7bGV0IEg9MDtmb3IoRz1EP1YoRy83MDApOkc+PjEsRys9VihHL2IpO0c+NDU1O0grPUspRz1WKEcvMzUpO3JldHVybiBWKEgrMzYqRy8oRyszOCkpfSxvZT1mdW5jdGlvbihHKXtjb25zdCBiPVtdLEQ9Ry5s'@;
put 'ZW5ndGg7bGV0IEg9MCxOPTEyOCxnPTcyLEM9Ry5sYXN0SW5kZXhPZigiLSIpO0M8MCYmKEM9MCk7Zm9yKGxldCB2PTA7djxDOysrdilHLmNoYXJDb2RlQXQodik+PTEyOCYmWSgibm90LWJhc2ljIiksYi5wdXNoKEcuY2hhckNvZGVBdCh2KSk7Zm9yKGxldCB2PUM+MD9DKzE6MDt2PEQ7KXtj'@;
put 'b25zdCBwPUg7Zm9yKGxldCBKPTEsbmU9Szs7bmUrPUspe3Y+PUQmJlkoImludmFsaWQtaW5wdXQiKTtjb25zdCBkZT0oUz1HLmNoYXJDb2RlQXQodisrKSk+PTQ4JiZTPDU4P1MtNDgrMjY6Uz49NjUmJlM8OTE/Uy02NTpTPj05NyYmUzwxMjM/Uy05NzpLO2RlPj1LJiZZKCJpbnZhbGlkLWlu'@;
put 'cHV0IiksZGU+Vigoei1IKS9KKSYmWSgib3ZlcmZsb3ciKSxIKz1kZSpKO2NvbnN0IGZlPW5lPD1nPzE6bmU+PWcrMjY/MjY6bmUtZztpZihkZTxmZSlicmVhaztjb25zdCB4ZT1LLWZlO0o+Vih6L3hlKSYmWSgib3ZlcmZsb3ciKSxKKj14ZX1jb25zdCB3PWIubGVuZ3RoKzE7Zz10ZShILXAs'@;
put 'dywwPT1wKSxWKEgvdyk+ei1OJiZZKCJvdmVyZmxvdyIpLE4rPVYoSC93KSxIJT13LGIuc3BsaWNlKEgrKywwLE4pfXZhciBTO3JldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5iKX0sc2U9ZnVuY3Rpb24oRyl7Y29uc3QgYj1bXSxEPShHPVUoRykpLmxlbmd0aDtsZXQgSD0xMjgsTj0w'@;
put 'LGc9NzI7Zm9yKGNvbnN0IHYgb2YgRyl2PDEyOCYmYi5wdXNoKEIodikpO2NvbnN0IEM9Yi5sZW5ndGg7bGV0IFM9Qztmb3IoQyYmYi5wdXNoKCItIik7UzxEOyl7bGV0IHY9ejtmb3IoY29uc3QgdyBvZiBHKXc+PUgmJnc8diYmKHY9dyk7Y29uc3QgcD1TKzE7di1IPlYoKHotTikvcCkmJlko'@;
put 'Im92ZXJmbG93IiksTis9KHYtSCkqcCxIPXY7Zm9yKGNvbnN0IHcgb2YgRylpZih3PEgmJisrTj56JiZZKCJvdmVyZmxvdyIpLHc9PT1IKXtsZXQgSj1OO2ZvcihsZXQgbmU9Szs7bmUrPUspe2NvbnN0IGRlPW5lPD1nPzE6bmU+PWcrMjY/MjY6bmUtZztpZihKPGRlKWJyZWFrO2NvbnN0IGZl'@;
put 'PUotZGUseGU9Sy1kZTtiLnB1c2goQihlZShkZStmZSV4ZSwwKSkpLEo9VihmZS94ZSl9Yi5wdXNoKEIoZWUoSiwwKSkpLGc9dGUoTixwLFM9PT1DKSxOPTAsKytTfSsrTiwrK0h9cmV0dXJuIGIuam9pbigiIil9LGhlPWZ1bmN0aW9uKEcpe3JldHVybiBYKEcsZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IEkudGVzdChiKT9vZShiLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOmJ9KX0sdWU9ZnVuY3Rpb24oRyl7cmV0dXJuIFgoRyxmdW5jdGlvbihiKXtyZXR1cm4gay50ZXN0KGIpPyJ4bi0tIitzZShiKTpifSl9LGNlPXt2ZXJzaW9uOiIyLjEuMCIsdWNzMjp7ZGVjb2RlOlUsZW5jb2RlOnF9LGRl'@;
put 'Y29kZTpvZSxlbmNvZGU6c2UsdG9BU0NJSTp1ZSx0b1VuaWNvZGU6aGV9fSw3MTI5OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geihJKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChJLnJlcGxhY2UoL1wr'@;
put 'L2csIiAiKSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEsoSSl7dHJ5e3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoSSl9Y2F0Y2h7cmV0dXJuIG51bGx9fU8uc3RyaW5naWZ5PWZ1bmN0aW9uKEksayl7az1rfHwiIjt2YXIgRSxqLFY9W107Zm9yKGogaW4ic3RyaW5nIiE9dHlwZW9m'@;
put 'IGsmJihrPSI/IiksSSlpZihSLmNhbGwoSSxqKSl7aWYoKEU9SVtqXSl8fG51bGwhPUUmJiFpc05hTihFKXx8KEU9IiIpLGo9SyhqKSxFPUsoRSksbnVsbD09PWp8fG51bGw9PT1FKWNvbnRpbnVlO1YucHVzaChqKyI9IitFKX1yZXR1cm4gVi5sZW5ndGg/aytWLmpvaW4oIiYiKToiIn0sTy5w'@;
put 'YXJzZT1mdW5jdGlvbihJKXtmb3IodmFyIGssRT0vKFtePT8jJl0rKT0/KFteJl0qKS9nLGo9e307az1FLmV4ZWMoSSk7KXt2YXIgVj16KGtbMV0pLEI9eihrWzJdKTtudWxsPT09Vnx8bnVsbD09PUJ8fFYgaW4ganx8KGpbVl09Qil9cmV0dXJuIGp9fSwxNzk4OihNLE8sUik9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIHo9Uig0MTU1KSxLPTY1NTM2LGs9Uig5NTA5KS5CdWZmZXIsRT1SLmcuY3J5cHRvfHxSLmcubXNDcnlwdG87TS5leHBvcnRzPUUmJkUuZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9uKGosVil7aWYoaj40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQg'@;
put 'dG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIEI9ay5hbGxvY1Vuc2FmZShqKTtpZihqPjApaWYoaj5LKWZvcih2YXIgWT0wO1k8ajtZKz1LKUUuZ2V0UmFuZG9tVmFsdWVzKEIuc2xpY2UoWSxZK0spKTtlbHNlIEUuZ2V0UmFuZG9tVmFsdWVzKEIpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBWP3oubmV4dFRpY2soZnVuY3Rpb24oKXtWKG51bGwsQil9KTpCfTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJu'@;
put 'ZXQgRXhwbG9yZXIgMTEiKX19LDc5NjM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoKXt0aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUs'@;
put 'IEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgST1SKDk1MDkpLGs9UigxNzk4KSxFPUkuQnVmZmVyLGo9SS5rTWF4TGVuZ3RoLFY9Ui5nLmNyeXB0b3x8Ui5nLm1zQ3J5cHRvLEI9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiBZKHEsZWUpe2lmKCJudW1iZXIiIT10eXBl'@;
put 'b2YgcXx8cSE9cSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKHE+Qnx8cTwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYocT5qfHxxPmVlKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgb3V0IG9m'@;
put 'IHJhbmdlIil9ZnVuY3Rpb24gWChxLGVlLHRlKXtpZigibnVtYmVyIiE9dHlwZW9mIHF8fHEhPXEpdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYocT5CfHxxPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYocStl'@;
put 'ZT50ZXx8cT5qKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gVShxLGVlLHRlLG9lKXtpZih6LmJyb3dzZXIpe3ZhciBoZT1uZXcgVWludDhBcnJheShxLmJ1ZmZlcixlZSx0ZSk7cmV0dXJuIFYuZ2V0UmFuZG9tVmFsdWVzKGhlKSxvZT92b2lkIHou'@;
put 'bmV4dFRpY2soZnVuY3Rpb24oKXtvZShudWxsLHEpfSk6cX1pZighb2UpcmV0dXJuIGsodGUpLmNvcHkocSxlZSkscTtrKHRlLGZ1bmN0aW9uKHVlLGNlKXtpZih1ZSlyZXR1cm4gb2UodWUpO2NlLmNvcHkocSxlZSksb2UobnVsbCxxKX0pfVYmJlYuZ2V0UmFuZG9tVmFsdWVzfHwhei5icm93'@;
put 'c2VyPyhPLnJhbmRvbUZpbGw9ZnVuY3Rpb24ocSxlZSx0ZSxvZSl7aWYoIShFLmlzQnVmZmVyKHEpfHxxIGluc3RhbmNlb2YgUi5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKCJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBlZSlvZT1lZSxlZT0wLHRlPXEubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHRlKW9lPXRlLHRlPXEubGVuZ3RoLWVlO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIG9lKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBh'@;
put 'IGZ1bmN0aW9uJyk7cmV0dXJuIFkoZWUscS5sZW5ndGgpLFgodGUsZWUscS5sZW5ndGgpLFUocSxlZSx0ZSxvZSl9LE8ucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24ocSxlZSx0ZSl7aWYodm9pZCAwPT09ZWUmJihlZT0wKSwhKEUuaXNCdWZmZXIocSl8fHEgaW5zdGFuY2VvZiBSLmcuVWludDhB'@;
put 'cnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIFkoZWUscS5sZW5ndGgpLHZvaWQgMD09PXRlJiYodGU9cS5sZW5ndGgtZWUpLFgodGUsZWUscS5sZW5ndGgpLFUocSxlZSx0ZSl9KTooTy5yYW5k'@;
put 'b21GaWxsPUssTy5yYW5kb21GaWxsU3luYz1LKX0sNDI4MTpNPT57InVzZSBzdHJpY3QiO3ZhciBPPXt9O2Z1bmN0aW9uIFIoSyxJLGspe2t8fChrPUVycm9yKTt2YXIgRT1mdW5jdGlvbihqKXt2YXIgVixCO2Z1bmN0aW9uIFkoWCxVLHEpe3JldHVybiBqLmNhbGwodGhpcywic3RyaW5nIj09'@;
put 'dHlwZW9mIEk/STpJKFgsVSxxKSl8fHRoaXN9cmV0dXJuIEI9aiwoVj1ZKS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSksVi5wcm90b3R5cGUuY29uc3RydWN0b3I9VixWLl9fcHJvdG9fXz1CLFl9KGspO0UucHJvdG90eXBlLm5hbWU9ay5uYW1lLEUucHJvdG90eXBlLmNv'@;
put 'ZGU9SyxPW0tdPUV9ZnVuY3Rpb24geihLLEkpe2lmKEFycmF5LmlzQXJyYXkoSykpe3ZhciBrPUsubGVuZ3RoO3JldHVybiBLPUsubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBTdHJpbmcoRSl9KSxrPjI/Im9uZSBvZiAiLmNvbmNhdChJLCIgIikuY29uY2F0KEsuc2xpY2UoMCxrLTEpLmpvaW4o'@;
put 'IiwgIiksIiwgb3IgIikrS1trLTFdOjI9PT1rPyJvbmUgb2YgIi5jb25jYXQoSSwiICIpLmNvbmNhdChLWzBdLCIgb3IgIikuY29uY2F0KEtbMV0pOiJvZiAiLmNvbmNhdChJLCIgIikuY29uY2F0KEtbMF0pfXJldHVybiJvZiAiLmNvbmNhdChJLCIgIikuY29uY2F0KFN0cmluZyhLKSl9Uigi'@;
put 'RVJSX0lOVkFMSURfT1BUX1ZBTFVFIixmdW5jdGlvbihLLEkpe3JldHVybidUaGUgdmFsdWUgIicrSSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrSysnIid9LFR5cGVFcnJvciksUigiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKEssSSxrKXt2YXIgRSxCLFgscTtpZigic3Ry'@;
put 'aW5nIj09dHlwZW9mIEkmJiJub3QgIj09PUkuc3Vic3RyKDAsNCk/KEU9Im11c3Qgbm90IGJlIixJPUkucmVwbGFjZSgvXm5vdCAvLCIiKSk6RT0ibXVzdCBiZSIsWD1LLCh2b2lkIDA9PT1xfHxxPlgubGVuZ3RoKSYmKHE9WC5sZW5ndGgpLCIgYXJndW1lbnQiPT09WC5zdWJzdHJpbmcocS05'@;
put 'LHEpKUI9IlRoZSAiLmNvbmNhdChLLCIgIikuY29uY2F0KEUsIiAiKS5jb25jYXQoeihJLCJ0eXBlIikpO2Vsc2V7dmFyIFk9ZnVuY3Rpb24oWCxVLHEpe3JldHVybiJudW1iZXIiIT10eXBlb2YgcSYmKHE9MCksIShxKzE+WC5sZW5ndGgpJiYtMSE9PVguaW5kZXhPZigiLiIscSl9KEspPyJw'@;
put 'cm9wZXJ0eSI6ImFyZ3VtZW50IjtCPSdUaGUgIicuY29uY2F0KEssJyIgJykuY29uY2F0KFksIiAiKS5jb25jYXQoRSwiICIpLmNvbmNhdCh6KEksInR5cGUiKSl9cmV0dXJuIEIrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2Ygayl9LFR5cGVFcnJvciksUigiRVJSX1NUUkVBTV9Q'@;
put 'VVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksUigiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKEspe3JldHVybiJUaGUgIitLKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxSKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlBy'@;
put 'ZW1hdHVyZSBjbG9zZSIpLFIoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihLKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitLKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxSKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGlt'@;
put 'ZXMiKSxSKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLFIoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksUigiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMg'@;
put 'dG8gc3RyZWFtIixUeXBlRXJyb3IpLFIoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihLKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitLfSxUeXBlRXJyb3IpLFIoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVu'@;
put 'ZCBldmVudCIpLE0uZXhwb3J0cy5xPU99LDY3NTM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKFUpe3ZhciBxPVtdO2Zvcih2YXIgZWUgaW4gVSlxLnB1c2goZWUpO3JldHVybiBxfTtNLmV4cG9ydHM9Qjt2YXIgST1SKDk0ODEp'@;
put 'LGs9Uig0MjI5KTtSKDU3MTcpKEIsSSk7Zm9yKHZhciBFPUsoay5wcm90b3R5cGUpLGo9MDtqPEUubGVuZ3RoO2orKyl7dmFyIFY9RVtqXTtCLnByb3RvdHlwZVtWXXx8KEIucHJvdG90eXBlW1ZdPWsucHJvdG90eXBlW1ZdKX1mdW5jdGlvbiBCKFUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIp'@;
put 'KXJldHVybiBuZXcgQihVKTtJLmNhbGwodGhpcyxVKSxrLmNhbGwodGhpcyxVKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsVSYmKCExPT09VS5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09VS53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09VS5hbGxvd0hhbGZPcGVu'@;
put 'JiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIixZKSkpfWZ1bmN0aW9uIFkoKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHx6Lm5leHRUaWNrKFgsdGhpcyl9ZnVuY3Rpb24gWChVKXtVLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3Jp'@;
put 'dGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'Ll93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3Rh'@;
put 'dGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKFUpe3ZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRl'@;
put 'c3Ryb3llZD1VLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPVUpfX0pfSwyNzI1OihNLE8sUik9PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUs7dmFyIHo9Uig0NjA1KTtmdW5jdGlvbiBLKEkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEspKXJldHVybiBuZXcgSyhJKTt6LmNhbGwodGhp'@;
put 'cyxJKX1SKDU3MTcpKEsseiksSy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihJLGssRSl7RShudWxsLEkpfX0sOTQ4MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MTU1KTtNLmV4cG9ydHM9SCxILlJlYWRhYmxlU3RhdGU9RCxSKDcxODcpO3ZhciBWLEk9ZnVuY3Rp'@;
put 'b24oV2UsS2Upe3JldHVybiBXZS5saXN0ZW5lcnMoS2UpLmxlbmd0aH0saz1SKDI1MDMpLEU9Uig4NzY0KS5CdWZmZXIsaj0odm9pZCAwIT09Ui5nP1IuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxC'@;
put 'PVIoNDYxNik7Vj1CJiZCLmRlYnVnbG9nP0IuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgWSxYLFUscT1SKDczMjcpLGVlPVIoMTE5NSksdGU9UigyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLG9lPVIoNDI4MSkucSxzZT1vZS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxoZT1vZS5F'@;
put 'UlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLHVlPW9lLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGNlPW9lLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7Uig1NzE3KShILGspO3ZhciBHPWVlLmVycm9yT3JEZXN0cm95LGI9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIs'@;
put 'InBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gRChXZSxLZSxZZSl7ej16fHxSKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIFllJiYoWWU9S2UgaW5zdGFuY2VvZiB6KSx0aGlzLm9iamVjdE1vZGU9ISEoV2U9V2V8fHt9KS5vYmplY3RNb2RlLFllJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2Jq'@;
put 'ZWN0TW9kZXx8ISFXZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz10ZSh0aGlzLFdlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLFllKSx0aGlzLmJ1ZmZlcj1uZXcgcSx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZs'@;
put 'b3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9'@;
put 'ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1XZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIVdlLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPVdlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFp'@;
put 'bj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLFdlLmVuY29kaW5nJiYoWXx8KFk9UigyNTUzKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IFkoV2UuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9V2UuZW5jb2RpbmcpfWZ1'@;
put 'bmN0aW9uIEgoV2Upe2lmKHo9enx8Uig2NzUzKSwhKHRoaXMgaW5zdGFuY2VvZiBIKSlyZXR1cm4gbmV3IEgoV2UpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IEQoV2UsdGhpcyx0aGlzIGluc3RhbmNlb2YgeiksdGhpcy5yZWFkYWJsZT0hMCxXZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBXZS5y'@;
put 'ZWFkJiYodGhpcy5fcmVhZD1XZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgV2UuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9V2UuZGVzdHJveSkpLGsuY2FsbCh0aGlzKX1mdW5jdGlvbiBOKFdlLEtlLFllLEplLGx0KXtWKCJyZWFkYWJsZUFkZENodW5rIixLZSk7dmFyIFBlLEFlLFRlLHFl'@;
put 'LFhlLGJlPVdlLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1LZSliZS5yZWFkaW5nPSExLGZ1bmN0aW9uKEFlLFRlKXtpZihWKCJvbkVvZkNodW5rIiksIVRlLmVuZGVkKXtpZihUZS5kZWNvZGVyKXt2YXIgcWU9VGUuZGVjb2Rlci5lbmQoKTtxZSYmcWUubGVuZ3RoJiYoVGUuYnVmZmVyLnB1'@;
put 'c2gocWUpLFRlLmxlbmd0aCs9VGUub2JqZWN0TW9kZT8xOnFlLmxlbmd0aCl9VGUuZW5kZWQ9ITAsVGUuc3luYz92KEFlKTooVGUubmVlZFJlYWRhYmxlPSExLFRlLmVtaXR0ZWRSZWFkYWJsZXx8KFRlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwKEFlKSkpfX0oV2UsYmUpO2Vsc2UgaWYobHR8fChB'@;
put 'ZT1iZSxFLmlzQnVmZmVyKFhlPVRlPUtlKXx8WGUgaW5zdGFuY2VvZiBqfHwic3RyaW5nIj09dHlwZW9mIFRlfHx2b2lkIDA9PT1UZXx8QWUub2JqZWN0TW9kZXx8KHFlPW5ldyBzZSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLFRlKSksUGU9cWUpLFBlKUcoV2Us'@;
put 'UGUpO2Vsc2UgaWYoYmUub2JqZWN0TW9kZXx8S2UmJktlLmxlbmd0aD4wKWlmKCJzdHJpbmciPT10eXBlb2YgS2V8fGJlLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihLZSk9PT1FLnByb3RvdHlwZXx8KEtlPWZ1bmN0aW9uKEFlKXtyZXR1cm4gRS5mcm9tKEFlKX0oS2UpKSxK'@;
put 'ZSliZS5lbmRFbWl0dGVkP0coV2UsbmV3IGNlKTpnKFdlLGJlLEtlLCEwKTtlbHNlIGlmKGJlLmVuZGVkKUcoV2UsbmV3IGhlKTtlbHNle2lmKGJlLmRlc3Ryb3llZClyZXR1cm4hMTtiZS5yZWFkaW5nPSExLGJlLmRlY29kZXImJiFZZT8oS2U9YmUuZGVjb2Rlci53cml0ZShLZSksYmUub2Jq'@;
put 'ZWN0TW9kZXx8MCE9PUtlLmxlbmd0aD9nKFdlLGJlLEtlLCExKTp3KFdlLGJlKSk6ZyhXZSxiZSxLZSwhMSl9ZWxzZSBKZXx8KGJlLnJlYWRpbmc9ITEsdyhXZSxiZSkpO3JldHVybiFiZS5lbmRlZCYmKGJlLmxlbmd0aDxiZS5oaWdoV2F0ZXJNYXJrfHwwPT09YmUubGVuZ3RoKX1mdW5jdGlv'@;
put 'biBnKFdlLEtlLFllLEplKXtLZS5mbG93aW5nJiYwPT09S2UubGVuZ3RoJiYhS2Uuc3luYz8oS2UuYXdhaXREcmFpbj0wLFdlLmVtaXQoImRhdGEiLFllKSk6KEtlLmxlbmd0aCs9S2Uub2JqZWN0TW9kZT8xOlllLmxlbmd0aCxKZT9LZS5idWZmZXIudW5zaGlmdChZZSk6S2UuYnVmZmVyLnB1'@;
put 'c2goWWUpLEtlLm5lZWRSZWFkYWJsZSYmdihXZSkpLHcoV2UsS2UpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFi'@;
put 'bGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihXZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPVdlKX19KSxILnByb3RvdHlwZS5kZXN0cm95PWVlLmRlc3Ryb3ksSC5wcm90b3R5cGUuX3VuZGVzdHJveT1lZS51bmRlc3Ryb3ksSC5w'@;
put 'cm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oV2UsS2Upe0tlKFdlKX0sSC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihXZSxLZSl7dmFyIFllLEplPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEplLm9iamVjdE1vZGU/WWU9ITA6InN0cmluZyI9PXR5cGVvZiBXZSYmKChLZT1LZXx8SmUu'@;
put 'ZGVmYXVsdEVuY29kaW5nKSE9PUplLmVuY29kaW5nJiYoV2U9RS5mcm9tKFdlLEtlKSxLZT0iIiksWWU9ITApLE4odGhpcyxXZSxLZSwhMSxZZSl9LEgucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oV2Upe3JldHVybiBOKHRoaXMsV2UsbnVsbCwhMCwhMSl9LEgucHJvdG90eXBlLmlzUGF1'@;
put 'c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LEgucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKFdlKXtZfHwoWT1SKDI1NTMpLlN0cmluZ0RlY29kZXIpO3ZhciBLZT1uZXcgWShXZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVy'@;
put 'PUtlLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgWWU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxKZT0iIjtudWxsIT09WWU7KUplKz1LZS53cml0ZShZZS5kYXRhKSxZZT1ZZS5uZXh0O3Jl'@;
put 'dHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09SmUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goSmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPUplLmxlbmd0aCx0aGlzfTt2YXIgQz0xMDczNzQxODI0O2Z1bmN0aW9uIFMoV2UsS2Upe3Jl'@;
put 'dHVybiBXZTw9MHx8MD09PUtlLmxlbmd0aCYmS2UuZW5kZWQ/MDpLZS5vYmplY3RNb2RlPzE6V2UhPVdlP0tlLmZsb3dpbmcmJktlLmxlbmd0aD9LZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpLZS5sZW5ndGg6KFdlPktlLmhpZ2hXYXRlck1hcmsmJihLZS5oaWdoV2F0ZXJNYXJrPSgoWWU9'@;
put 'V2UpPj1DP1llPUM6KFllLS0sWWV8PVllPj4+MSxZZXw9WWU+Pj4yLFllfD1ZZT4+PjQsWWV8PVllPj4+OCxZZXw9WWU+Pj4xNixZZSsrKSxZZSkpLFdlPD1LZS5sZW5ndGg/V2U6S2UuZW5kZWQ/S2UubGVuZ3RoOihLZS5uZWVkUmVhZGFibGU9ITAsMCkpO3ZhciBZZX1mdW5jdGlvbiB2KFdl'@;
put 'KXt2YXIgS2U9V2UuX3JlYWRhYmxlU3RhdGU7VigiZW1pdFJlYWRhYmxlIixLZS5uZWVkUmVhZGFibGUsS2UuZW1pdHRlZFJlYWRhYmxlKSxLZS5uZWVkUmVhZGFibGU9ITEsS2UuZW1pdHRlZFJlYWRhYmxlfHwoVigiZW1pdFJlYWRhYmxlIixLZS5mbG93aW5nKSxLZS5lbWl0dGVkUmVhZGFi'@;
put 'bGU9ITAsSy5uZXh0VGljayhwLFdlKSl9ZnVuY3Rpb24gcChXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO1YoImVtaXRSZWFkYWJsZV8iLEtlLmRlc3Ryb3llZCxLZS5sZW5ndGgsS2UuZW5kZWQpLEtlLmRlc3Ryb3llZHx8IUtlLmxlbmd0aCYmIUtlLmVuZGVkfHwoV2UuZW1pdCgicmVh'@;
put 'ZGFibGUiKSxLZS5lbWl0dGVkUmVhZGFibGU9ITEpLEtlLm5lZWRSZWFkYWJsZT0hS2UuZmxvd2luZyYmIUtlLmVuZGVkJiZLZS5sZW5ndGg8PUtlLmhpZ2hXYXRlck1hcmsseGUoV2UpfWZ1bmN0aW9uIHcoV2UsS2Upe0tlLnJlYWRpbmdNb3JlfHwoS2UucmVhZGluZ01vcmU9ITAsSy5uZXh0'@;
put 'VGljayhKLFdlLEtlKSl9ZnVuY3Rpb24gSihXZSxLZSl7Zm9yKDshS2UucmVhZGluZyYmIUtlLmVuZGVkJiYoS2UubGVuZ3RoPEtlLmhpZ2hXYXRlck1hcmt8fEtlLmZsb3dpbmcmJjA9PT1LZS5sZW5ndGgpOyl7dmFyIFllPUtlLmxlbmd0aDtpZihWKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIp'@;
put 'LFdlLnJlYWQoMCksWWU9PT1LZS5sZW5ndGgpYnJlYWt9S2UucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gbmUoV2Upe3ZhciBLZT1XZS5fcmVhZGFibGVTdGF0ZTtLZS5yZWFkYWJsZUxpc3RlbmluZz1XZS5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsS2UucmVzdW1lU2NoZWR1bGVkJiYh'@;
put 'S2UucGF1c2VkP0tlLmZsb3dpbmc9ITA6V2UubGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJldlLnJlc3VtZSgpfWZ1bmN0aW9uIGRlKFdlKXtWKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxXZS5yZWFkKDApfWZ1bmN0aW9uIGZlKFdlLEtlKXtWKCJyZXN1bWUiLEtlLnJlYWRpbmcpLEtl'@;
put 'LnJlYWRpbmd8fFdlLnJlYWQoMCksS2UucmVzdW1lU2NoZWR1bGVkPSExLFdlLmVtaXQoInJlc3VtZSIpLHhlKFdlKSxLZS5mbG93aW5nJiYhS2UucmVhZGluZyYmV2UucmVhZCgwKX1mdW5jdGlvbiB4ZShXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO2ZvcihWKCJmbG93IixLZS5mbG93'@;
put 'aW5nKTtLZS5mbG93aW5nJiZudWxsIT09V2UucmVhZCgpOyk7fWZ1bmN0aW9uIExlKFdlLEtlKXtyZXR1cm4gMD09PUtlLmxlbmd0aD9udWxsOihLZS5vYmplY3RNb2RlP1llPUtlLmJ1ZmZlci5zaGlmdCgpOiFXZXx8V2U+PUtlLmxlbmd0aD8oWWU9S2UuZGVjb2Rlcj9LZS5idWZmZXIuam9p'@;
put 'bigiIik6MT09PUtlLmJ1ZmZlci5sZW5ndGg/S2UuYnVmZmVyLmZpcnN0KCk6S2UuYnVmZmVyLmNvbmNhdChLZS5sZW5ndGgpLEtlLmJ1ZmZlci5jbGVhcigpKTpZZT1LZS5idWZmZXIuY29uc3VtZShXZSxLZS5kZWNvZGVyKSxZZSk7dmFyIFllfWZ1bmN0aW9uIEZlKFdlKXt2YXIgS2U9V2Uu'@;
put 'X3JlYWRhYmxlU3RhdGU7VigiZW5kUmVhZGFibGUiLEtlLmVuZEVtaXR0ZWQpLEtlLmVuZEVtaXR0ZWR8fChLZS5lbmRlZD0hMCxLLm5leHRUaWNrKE9lLEtlLFdlKSl9ZnVuY3Rpb24gT2UoV2UsS2Upe2lmKFYoImVuZFJlYWRhYmxlTlQiLFdlLmVuZEVtaXR0ZWQsV2UubGVuZ3RoKSwhV2Uu'@;
put 'ZW5kRW1pdHRlZCYmMD09PVdlLmxlbmd0aCYmKFdlLmVuZEVtaXR0ZWQ9ITAsS2UucmVhZGFibGU9ITEsS2UuZW1pdCgiZW5kIiksV2UuYXV0b0Rlc3Ryb3kpKXt2YXIgWWU9S2UuX3dyaXRhYmxlU3RhdGU7KCFZZXx8WWUuYXV0b0Rlc3Ryb3kmJlllLmZpbmlzaGVkKSYmS2UuZGVzdHJveSgp'@;
put 'fX1mdW5jdGlvbiBqZShXZSxLZSl7Zm9yKHZhciBZZT0wLEplPVdlLmxlbmd0aDtZZTxKZTtZZSsrKWlmKFdlW1llXT09PUtlKXJldHVybiBZZTtyZXR1cm4tMX1ILnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKFdlKXtWKCJyZWFkIixXZSksV2U9cGFyc2VJbnQoV2UsMTApO3ZhciBLZT10aGlz'@;
put 'Ll9yZWFkYWJsZVN0YXRlLFllPVdlO2lmKDAhPT1XZSYmKEtlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PVdlJiZLZS5uZWVkUmVhZGFibGUmJigoMCE9PUtlLmhpZ2hXYXRlck1hcms/S2UubGVuZ3RoPj1LZS5oaWdoV2F0ZXJNYXJrOktlLmxlbmd0aD4wKXx8S2UuZW5kZWQpKXJldHVybiBW'@;
put 'KCJyZWFkOiBlbWl0UmVhZGFibGUiLEtlLmxlbmd0aCxLZS5lbmRlZCksMD09PUtlLmxlbmd0aCYmS2UuZW5kZWQ/RmUodGhpcyk6dih0aGlzKSxudWxsO2lmKDA9PT0oV2U9UyhXZSxLZSkpJiZLZS5lbmRlZClyZXR1cm4gMD09PUtlLmxlbmd0aCYmRmUodGhpcyksbnVsbDt2YXIgSmUsbHQ9'@;
put 'S2UubmVlZFJlYWRhYmxlO3JldHVybiBWKCJuZWVkIHJlYWRhYmxlIixsdCksKDA9PT1LZS5sZW5ndGh8fEtlLmxlbmd0aC1XZTxLZS5oaWdoV2F0ZXJNYXJrKSYmVigibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGx0PSEwKSxLZS5lbmRlZHx8S2UucmVhZGluZz9WKCJyZWFkaW5nIG9y'@;
put 'IGVuZGVkIixsdD0hMSk6bHQmJihWKCJkbyByZWFkIiksS2UucmVhZGluZz0hMCxLZS5zeW5jPSEwLDA9PT1LZS5sZW5ndGgmJihLZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoS2UuaGlnaFdhdGVyTWFyayksS2Uuc3luYz0hMSxLZS5yZWFkaW5nfHwoV2U9UyhZZSxLZSkpKSxudWxs'@;
put 'PT09KEplPVdlPjA/TGUoV2UsS2UpOm51bGwpPyhLZS5uZWVkUmVhZGFibGU9S2UubGVuZ3RoPD1LZS5oaWdoV2F0ZXJNYXJrLFdlPTApOihLZS5sZW5ndGgtPVdlLEtlLmF3YWl0RHJhaW49MCksMD09PUtlLmxlbmd0aCYmKEtlLmVuZGVkfHwoS2UubmVlZFJlYWRhYmxlPSEwKSxZZSE9PVdl'@;
put 'JiZLZS5lbmRlZCYmRmUodGhpcykpLG51bGwhPT1KZSYmdGhpcy5lbWl0KCJkYXRhIixKZSksSmV9LEgucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKFdlKXtHKHRoaXMsbmV3IHVlKCJfcmVhZCgpIikpfSxILnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKFdlLEtlKXt2YXIgWWU9dGhpcyxKZT10'@;
put 'aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChKZS5waXBlc0NvdW50KXtjYXNlIDA6SmUucGlwZXM9V2U7YnJlYWs7Y2FzZSAxOkplLnBpcGVzPVtKZS5waXBlcyxXZV07YnJlYWs7ZGVmYXVsdDpKZS5waXBlcy5wdXNoKFdlKX1KZS5waXBlc0NvdW50Kz0xLFYoInBpcGUgY291bnQ9JWQgb3B0'@;
put 'cz0laiIsSmUucGlwZXNDb3VudCxLZSk7dmFyIGx0PUtlJiYhMT09PUtlLmVuZHx8V2U9PT1LLnN0ZG91dHx8V2U9PT1LLnN0ZGVycj9NZTpiZTtmdW5jdGlvbiBiZSgpe1YoIm9uZW5kIiksV2UuZW5kKCl9SmUuZW5kRW1pdHRlZD9LLm5leHRUaWNrKGx0KTpZZS5vbmNlKCJlbmQiLGx0KSxX'@;
put 'ZS5vbigidW5waXBlIixmdW5jdGlvbiBQZShEZSx6ZSl7Vigib251bnBpcGUiKSxEZT09PVllJiZ6ZSYmITE9PT16ZS5oYXNVbnBpcGVkJiYoemUuaGFzVW5waXBlZD0hMCxWKCJjbGVhbnVwIiksV2UucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVZSksV2UucmVtb3ZlTGlzdGVuZXIoImZpbmlz'@;
put 'aCIsaHQpLFdlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsQWUpLFdlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWGUpLFdlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLFBlKSxZZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixiZSksWWUucmVtb3ZlTGlzdGVuZXIoImVuZCIsTWUpLFllLnJlbW92ZUxp'@;
put 'c3RlbmVyKCJkYXRhIixxZSksVGU9ITAsIUplLmF3YWl0RHJhaW58fFdlLl93cml0YWJsZVN0YXRlJiYhV2UuX3dyaXRhYmxlU3RhdGUubmVlZERyYWlufHxBZSgpKX0pO3ZhciBEZSxBZT0oRGU9WWUsZnVuY3Rpb24oKXt2YXIgemU9RGUuX3JlYWRhYmxlU3RhdGU7VigicGlwZU9uRHJhaW4i'@;
put 'LHplLmF3YWl0RHJhaW4pLHplLmF3YWl0RHJhaW4mJnplLmF3YWl0RHJhaW4tLSwwPT09emUuYXdhaXREcmFpbiYmSShEZSwiZGF0YSIpJiYoemUuZmxvd2luZz0hMCx4ZShEZSkpfSk7V2Uub24oImRyYWluIixBZSk7dmFyIFRlPSExO2Z1bmN0aW9uIHFlKERlKXtWKCJvbmRhdGEiKTt2YXIg'@;
put 'emU9V2Uud3JpdGUoRGUpO1YoImRlc3Qud3JpdGUiLHplKSwhMT09PXplJiYoKDE9PT1KZS5waXBlc0NvdW50JiZKZS5waXBlcz09PVdlfHxKZS5waXBlc0NvdW50PjEmJi0xIT09amUoSmUucGlwZXMsV2UpKSYmIVRlJiYoVigiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixKZS5hd2Fp'@;
put 'dERyYWluKSxKZS5hd2FpdERyYWluKyspLFllLnBhdXNlKCkpfWZ1bmN0aW9uIFhlKERlKXtWKCJvbmVycm9yIixEZSksTWUoKSxXZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFhlKSwwPT09SShXZSwiZXJyb3IiKSYmRyhXZSxEZSl9ZnVuY3Rpb24gVWUoKXtXZS5yZW1vdmVMaXN0ZW5lcigi'@;
put 'ZmluaXNoIixodCksTWUoKX1mdW5jdGlvbiBodCgpe1YoIm9uZmluaXNoIiksV2UucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVZSksTWUoKX1mdW5jdGlvbiBNZSgpe1YoInVucGlwZSIpLFllLnVucGlwZShXZSl9cmV0dXJuIFllLm9uKCJkYXRhIixxZSksZnVuY3Rpb24oRGUsemUsaXQpe2lm'@;
put 'KCJmdW5jdGlvbiI9PXR5cGVvZiBEZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIERlLnByZXBlbmRMaXN0ZW5lcih6ZSxpdCk7RGUuX2V2ZW50cyYmRGUuX2V2ZW50c1t6ZV0/QXJyYXkuaXNBcnJheShEZS5fZXZlbnRzW3plXSk/RGUuX2V2ZW50c1t6ZV0udW5zaGlmdChpdCk6RGUuX2V2ZW50'@;
put 'c1t6ZV09W2l0LERlLl9ldmVudHNbemVdXTpEZS5vbih6ZSxpdCl9KFdlLCJlcnJvciIsWGUpLFdlLm9uY2UoImNsb3NlIixVZSksV2Uub25jZSgiZmluaXNoIixodCksV2UuZW1pdCgicGlwZSIsWWUpLEplLmZsb3dpbmd8fChWKCJwaXBlIHJlc3VtZSIpLFllLnJlc3VtZSgpKSxXZX0sSC5w'@;
put 'cm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKFdlKXt2YXIgS2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxZZT17aGFzVW5waXBlZDohMX07aWYoMD09PUtlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PUtlLnBpcGVzQ291bnQpcmV0dXJuIFdlJiZXZSE9PUtlLnBpcGVzfHwoV2V8fChXZT1L'@;
put 'ZS5waXBlcyksS2UucGlwZXM9bnVsbCxLZS5waXBlc0NvdW50PTAsS2UuZmxvd2luZz0hMSxXZSYmV2UuZW1pdCgidW5waXBlIix0aGlzLFllKSksdGhpcztpZighV2Upe3ZhciBKZT1LZS5waXBlcyxsdD1LZS5waXBlc0NvdW50O0tlLnBpcGVzPW51bGwsS2UucGlwZXNDb3VudD0wLEtlLmZs'@;
put 'b3dpbmc9ITE7Zm9yKHZhciBQZT0wO1BlPGx0O1BlKyspSmVbUGVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBiZT1qZShLZS5waXBlcyxXZSk7cmV0dXJuLTE9PT1iZXx8KEtlLnBpcGVzLnNwbGljZShiZSwxKSxLZS5waXBlc0NvdW50LT0x'@;
put 'LDE9PT1LZS5waXBlc0NvdW50JiYoS2UucGlwZXM9S2UucGlwZXNbMF0pLFdlLmVtaXQoInVucGlwZSIsdGhpcyxZZSkpLHRoaXN9LEgucHJvdG90eXBlLmFkZExpc3RlbmVyPUgucHJvdG90eXBlLm9uPWZ1bmN0aW9uKFdlLEtlKXt2YXIgWWU9ay5wcm90b3R5cGUub24uY2FsbCh0aGlzLFdl'@;
put 'LEtlKSxKZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PVdlPyhKZS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PUplLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1XZSYmKEplLmVuZEVtaXR0ZWR8'@;
put 'fEplLnJlYWRhYmxlTGlzdGVuaW5nfHwoSmUucmVhZGFibGVMaXN0ZW5pbmc9SmUubmVlZFJlYWRhYmxlPSEwLEplLmZsb3dpbmc9ITEsSmUuZW1pdHRlZFJlYWRhYmxlPSExLFYoIm9uIHJlYWRhYmxlIixKZS5sZW5ndGgsSmUucmVhZGluZyksSmUubGVuZ3RoP3YodGhpcyk6SmUucmVhZGlu'@;
put 'Z3x8Sy5uZXh0VGljayhkZSx0aGlzKSkpLFllfSxILnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihXZSxLZSl7dmFyIFllPWsucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxXZSxLZSk7cmV0dXJuInJlYWRhYmxlIj09PVdlJiZLLm5leHRUaWNrKG5lLHRoaXMp'@;
put 'LFllfSxILnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oV2Upe3ZhciBLZT1rLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiJyZWFkYWJsZSIhPT1XZSYmdm9pZCAwIT09V2V8fEsubmV4dFRpY2sobmUsdGhpcyks'@;
put 'S2V9LEgucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBZZSxXZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBXZS5mbG93aW5nfHwoVigicmVzdW1lIiksV2UuZmxvd2luZz0hV2UucmVhZGFibGVMaXN0ZW5pbmcsKFllPVdlKS5yZXN1bWVTY2hlZHVsZWR8fChZZS5yZXN1bWVT'@;
put 'Y2hlZHVsZWQ9ITAsSy5uZXh0VGljayhmZSx0aGlzLFllKSkpLFdlLnBhdXNlZD0hMSx0aGlzfSxILnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBWKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJs'@;
put 'ZVN0YXRlLmZsb3dpbmcmJihWKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LEgucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oV2Upe3ZhciBLZT10aGlzLFllPXRoaXMu'@;
put 'X3JlYWRhYmxlU3RhdGUsSmU9ITE7Zm9yKHZhciBsdCBpbiBXZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKFYoIndyYXBwZWQgZW5kIiksWWUuZGVjb2RlciYmIVllLmVuZGVkKXt2YXIgYmU9WWUuZGVjb2Rlci5lbmQoKTtiZSYmYmUubGVuZ3RoJiZLZS5wdXNoKGJlKX1LZS5wdXNoKG51bGwp'@;
put 'fSksV2Uub24oImRhdGEiLGZ1bmN0aW9uKGJlKXtWKCJ3cmFwcGVkIGRhdGEiKSxZZS5kZWNvZGVyJiYoYmU9WWUuZGVjb2Rlci53cml0ZShiZSkpLFllLm9iamVjdE1vZGUmJm51bGw9PWJlfHwoWWUub2JqZWN0TW9kZXx8YmUmJmJlLmxlbmd0aCkmJihLZS5wdXNoKGJlKXx8KEplPSEwLFdl'@;
put 'LnBhdXNlKCkpKX0pLFdlKXZvaWQgMD09PXRoaXNbbHRdJiYiZnVuY3Rpb24iPT10eXBlb2YgV2VbbHRdJiYodGhpc1tsdF09ZnVuY3Rpb24oYmUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXZVtiZV0uYXBwbHkoV2UsYXJndW1lbnRzKX19KGx0KSk7Zm9yKHZhciBQZT0wO1BlPGIubGVu'@;
put 'Z3RoO1BlKyspV2Uub24oYltQZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxiW1BlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKGJlKXtWKCJ3cmFwcGVkIF9yZWFkIixiZSksSmUmJihKZT0hMSxXZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihILnBy'@;
put 'b3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09WCYmKFg9Uig1ODUwKSksWCh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9y'@;
put 'ZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKFdlKXt0aGlzLl9y'@;
put 'ZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPVdlKX19KSxILl9mcm9tTGlzdD1MZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFi'@;
put 'bGVTdGF0ZS5sZW5ndGh9fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEguZnJvbT1mdW5jdGlvbihXZSxLZSl7cmV0dXJuIHZvaWQgMD09PVUmJihVPVIoNTE2NykpLFUoSCxXZSxLZSl9KX0sNDYwNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1CO3ZhciB6PVIoNDI4'@;
put 'MSkucSxLPXouRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsST16LkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxrPXouRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyxFPXouRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLGo9Uig2NzUzKTtmdW5jdGlvbiBWKFUscSl7dmFyIGVl'@;
put 'PXRoaXMuX3RyYW5zZm9ybVN0YXRlO2VlLnRyYW5zZm9ybWluZz0hMTt2YXIgdGU9ZWUud3JpdGVjYjtpZihudWxsPT09dGUpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBJKTtlZS53cml0ZWNodW5rPW51bGwsZWUud3JpdGVjYj1udWxsLG51bGwhPXEmJnRoaXMucHVzaChxKSx0ZShV'@;
put 'KTt2YXIgb2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtvZS5yZWFkaW5nPSExLChvZS5uZWVkUmVhZGFibGV8fG9lLmxlbmd0aDxvZS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChvZS5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBCKFUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBu'@;
put 'ZXcgQihVKTtqLmNhbGwodGhpcyxVKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Vi5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFk'@;
put 'YWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsVSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBVLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1VLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIFUuZmx1c2gmJih0aGlzLl9mbHVzaD1VLmZs'@;
put 'dXNoKSksdGhpcy5vbigicHJlZmluaXNoIixZKX1mdW5jdGlvbiBZKCl7dmFyIFU9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP1godGhpcyxudWxsLG51bGwpOnRoaXMuX2ZsdXNoKGZ1bmN0aW9uKHEsZWUpe1goVSxx'@;
put 'LGVlKX0pfWZ1bmN0aW9uIFgoVSxxLGVlKXtpZihxKXJldHVybiBVLmVtaXQoImVycm9yIixxKTtpZihudWxsIT1lZSYmVS5wdXNoKGVlKSxVLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRTtpZihVLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IGs7cmV0'@;
put 'dXJuIFUucHVzaChudWxsKX1SKDU3MTcpKEIsaiksQi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihVLHEpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLGoucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLFUscSl9LEIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVu'@;
put 'Y3Rpb24oVSxxLGVlKXtlZShuZXcgSygiX3RyYW5zZm9ybSgpIikpfSxCLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oVSxxLGVlKXt2YXIgdGU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYodGUud3JpdGVjYj1lZSx0ZS53cml0ZWNodW5rPVUsdGUud3JpdGVlbmNvZGluZz1xLCF0ZS50cmFu'@;
put 'c2Zvcm1pbmcpe3ZhciBvZT10aGlzLl9yZWFkYWJsZVN0YXRlOyh0ZS5uZWVkVHJhbnNmb3JtfHxvZS5uZWVkUmVhZGFibGV8fG9lLmxlbmd0aDxvZS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChvZS5oaWdoV2F0ZXJNYXJrKX19LEIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKFUpe3Zh'@;
put 'ciBxPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1xLndyaXRlY2h1bmt8fHEudHJhbnNmb3JtaW5nP3EubmVlZFRyYW5zZm9ybT0hMDoocS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKHEud3JpdGVjaHVuayxxLndyaXRlZW5jb2RpbmcscS5hZnRlclRyYW5zZm9ybSkpfSxC'@;
put 'LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihVLHEpe2oucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxVLGZ1bmN0aW9uKGVlKXtxKGVlKX0pfX0sNDIyOTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MTU1KTtmdW5jdGlvbiBJKHcpe3ZhciBKPXRoaXM7dGhpcy5u'@;
put 'ZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKG5lLGRlLGZlKXt2YXIgeGU9bmUuZW50cnk7Zm9yKG5lLmVudHJ5PW51bGw7eGU7KXt2YXIgTGU9eGUuY2FsbGJhY2s7ZGUucGVuZGluZ2NiLS0sTGUodm9pZCAwKSx4ZT14ZS5uZXh0fWRl'@;
put 'LmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW5lfShKLHcpfX1NLmV4cG9ydHM9SCxILldyaXRhYmxlU3RhdGU9RDt2YXIgQixrPXtkZXByZWNhdGU6Uig0OTI3KX0sRT1SKDI1MDMpLGo9Uig4NzY0KS5CdWZmZXIsVj0odm9pZCAwIT09Ui5nP1IuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6'@;
put 'dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxZPVIoMTE5NSksWD1SKDI0NTcpLmdldEhpZ2hXYXRlck1hcmssVT1SKDQyODEpLnEscT1VLkVSUl9JTlZBTElEX0FSR19UWVBFLGVlPVUuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsdGU9VS5FUlJf'@;
put 'TVVMVElQTEVfQ0FMTEJBQ0ssb2U9VS5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLHNlPVUuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsaGU9VS5FUlJfU1RSRUFNX05VTExfVkFMVUVTLHVlPVUuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsY2U9VS5FUlJfVU5LTk9XTl9FTkNPRElORyxHPVkuZXJy'@;
put 'b3JPckRlc3Ryb3k7ZnVuY3Rpb24gYigpe31mdW5jdGlvbiBEKHcsSixuZSl7ej16fHxSKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIG5lJiYobmU9SiBpbnN0YW5jZW9mIHopLHRoaXMub2JqZWN0TW9kZT0hISh3PXd8fHt9KS5vYmplY3RNb2RlLG5lJiYodGhpcy5vYmplY3RNb2RlPXRoaXMu'@;
put 'b2JqZWN0TW9kZXx8ISF3LndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVgodGhpcyx3LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLG5lKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5m'@;
put 'aW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PXcuZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dy5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRo'@;
put 'aXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKGZlKXshZnVuY3Rpb24oeGUsTGUpe3ZhciBLZSxGZT14ZS5fd3JpdGFibGVTdGF0ZSxPZT1GZS5zeW5jLGplPUZlLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGplKXRocm93IG5l'@;
put 'dyB0ZTtpZigoS2U9RmUpLndyaXRpbmc9ITEsS2Uud3JpdGVjYj1udWxsLEtlLmxlbmd0aC09S2Uud3JpdGVsZW4sS2Uud3JpdGVsZW49MCxMZSkhZnVuY3Rpb24oS2UsWWUsSmUsbHQsUGUpey0tWWUucGVuZGluZ2NiLEplPyhLLm5leHRUaWNrKFBlLGx0KSxLLm5leHRUaWNrKHAsS2UsWWUp'@;
put 'LEtlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxHKEtlLGx0KSk6KFBlKGx0KSxLZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRyhLZSxsdCkscChLZSxZZSkpfSh4ZSxGZSxPZSxMZSxqZSk7ZWxzZXt2YXIgV2U9UyhGZSl8fHhlLmRlc3Ryb3llZDtXZXx8RmUuY29y'@;
put 'a2VkfHxGZS5idWZmZXJQcm9jZXNzaW5nfHwhRmUuYnVmZmVyZWRSZXF1ZXN0fHxDKHhlLEZlKSxPZT9LLm5leHRUaWNrKGcseGUsRmUsV2UsamUpOmcoeGUsRmUsV2UsamUpfX0oSixmZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1u'@;
put 'dWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PXcuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISF3LmF1dG9EZXN0cm95LHRoaXMuYnVm'@;
put 'ZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgSSh0aGlzKX1mdW5jdGlvbiBIKHcpe3ZhciBKPXRoaXMgaW5zdGFuY2VvZih6PXp8fFIoNjc1MykpO2lmKCFKJiYhQi5jYWxsKEgsdGhpcykpcmV0dXJuIG5ldyBIKHcpO3RoaXMuX3dyaXRhYmxlU3RhdGU9'@;
put 'bmV3IEQodyx0aGlzLEopLHRoaXMud3JpdGFibGU9ITAsdyYmKCJmdW5jdGlvbiI9PXR5cGVvZiB3LndyaXRlJiYodGhpcy5fd3JpdGU9dy53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIHcud3JpdGV2JiYodGhpcy5fd3JpdGV2PXcud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2Ygdy5kZXN0'@;
put 'cm95JiYodGhpcy5fZGVzdHJveT13LmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiB3LmZpbmFsJiYodGhpcy5fZmluYWw9dy5maW5hbCkpLEUuY2FsbCh0aGlzKX1mdW5jdGlvbiBOKHcsSixuZSxkZSxmZSx4ZSxMZSl7Si53cml0ZWxlbj1kZSxKLndyaXRlY2I9TGUsSi53cml0aW5nPSEw'@;
put 'LEouc3luYz0hMCxKLmRlc3Ryb3llZD9KLm9ud3JpdGUobmV3IHNlKCJ3cml0ZSIpKTpuZT93Ll93cml0ZXYoZmUsSi5vbndyaXRlKTp3Ll93cml0ZShmZSx4ZSxKLm9ud3JpdGUpLEouc3luYz0hMX1mdW5jdGlvbiBnKHcsSixuZSxkZSl7dmFyIGZlLHhlO25lfHwoZmU9dywwPT09KHhlPUop'@;
put 'Lmxlbmd0aCYmeGUubmVlZERyYWluJiYoeGUubmVlZERyYWluPSExLGZlLmVtaXQoImRyYWluIikpKSxKLnBlbmRpbmdjYi0tLGRlKCkscCh3LEopfWZ1bmN0aW9uIEModyxKKXtKLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIG5lPUouYnVmZmVyZWRSZXF1ZXN0O2lmKHcuX3dyaXRldiYmbmUm'@;
put 'Jm5lLm5leHQpe3ZhciBmZT1uZXcgQXJyYXkoSi5idWZmZXJlZFJlcXVlc3RDb3VudCkseGU9Si5jb3JrZWRSZXF1ZXN0c0ZyZWU7eGUuZW50cnk9bmU7Zm9yKHZhciBMZT0wLEZlPSEwO25lOylmZVtMZV09bmUsbmUuaXNCdWZ8fChGZT0hMSksbmU9bmUubmV4dCxMZSs9MTtmZS5hbGxCdWZm'@;
put 'ZXJzPUZlLE4odyxKLCEwLEoubGVuZ3RoLGZlLCIiLHhlLmZpbmlzaCksSi5wZW5kaW5nY2IrKyxKLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx4ZS5uZXh0PyhKLmNvcmtlZFJlcXVlc3RzRnJlZT14ZS5uZXh0LHhlLm5leHQ9bnVsbCk6Si5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEkoSiks'@;
put 'Si5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtuZTspe3ZhciBPZT1uZS5jaHVuaztpZihOKHcsSiwhMSxKLm9iamVjdE1vZGU/MTpPZS5sZW5ndGgsT2UsbmUuZW5jb2RpbmcsbmUuY2FsbGJhY2spLG5lPW5lLm5leHQsSi5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEoud3JpdGlu'@;
put 'ZylicmVha31udWxsPT09bmUmJihKLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9Si5idWZmZXJlZFJlcXVlc3Q9bmUsSi5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIFModyl7cmV0dXJuIHcuZW5kaW5nJiYwPT09dy5sZW5ndGgmJm51bGw9PT13LmJ1ZmZlcmVkUmVxdWVzdCYmIXcu'@;
put 'ZmluaXNoZWQmJiF3LndyaXRpbmd9ZnVuY3Rpb24gdih3LEope3cuX2ZpbmFsKGZ1bmN0aW9uKG5lKXtKLnBlbmRpbmdjYi0tLG5lJiZHKHcsbmUpLEoucHJlZmluaXNoZWQ9ITAsdy5lbWl0KCJwcmVmaW5pc2giKSxwKHcsSil9KX1mdW5jdGlvbiBwKHcsSil7dmFyIGZlLHhlLG5lPVMoSik7'@;
put 'aWYobmUmJihmZT13LCh4ZT1KKS5wcmVmaW5pc2hlZHx8eGUuZmluYWxDYWxsZWR8fCgiZnVuY3Rpb24iIT10eXBlb2YgZmUuX2ZpbmFsfHx4ZS5kZXN0cm95ZWQ/KHhlLnByZWZpbmlzaGVkPSEwLGZlLmVtaXQoInByZWZpbmlzaCIpKTooeGUucGVuZGluZ2NiKysseGUuZmluYWxDYWxsZWQ9'@;
put 'ITAsSy5uZXh0VGljayh2LGZlLHhlKSkpLDA9PT1KLnBlbmRpbmdjYiYmKEouZmluaXNoZWQ9ITAsdy5lbWl0KCJmaW5pc2giKSxKLmF1dG9EZXN0cm95KSkpe3ZhciBkZT13Ll9yZWFkYWJsZVN0YXRlOyghZGV8fGRlLmF1dG9EZXN0cm95JiZkZS5lbmRFbWl0dGVkKSYmdy5kZXN0cm95KCl9'@;
put 'cmV0dXJuIG5lfVIoNTcxNykoSCxFKSxELnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHc9dGhpcy5idWZmZXJlZFJlcXVlc3QsSj1bXTt3OylKLnB1c2godyksdz13Lm5leHQ7cmV0dXJuIEp9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShELnBy'@;
put 'b3RvdHlwZSwiYnVmZmVyIix7Z2V0OmsuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNo'@;
put 'e319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KEI9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KEgsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbih3KXtyZXR1cm4hIUIuY2FsbCh0aGlzLHcpfHx0aGlzPT09SCYmdyYmdy5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIER9fSkpOkI9ZnVuY3Rpb24odyl7cmV0dXJuIHcgaW5zdGFuY2VvZiB0aGlzfSxILnBy'@;
put 'b3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Ryh0aGlzLG5ldyBvZSl9LEgucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHcsSixuZSl7dmFyIGRlLEZlLE9lLGplLGZlPXRoaXMuX3dyaXRhYmxlU3RhdGUseGU9ITEsTGU9IWZlLm9iamVjdE1vZGUmJihqLmlzQnVmZmVyKGRlPXcpfHxkZSBpbnN0'@;
put 'YW5jZW9mIFYpO3JldHVybiBMZSYmIWouaXNCdWZmZXIodykmJih3PWouZnJvbSh3KSksImZ1bmN0aW9uIj09dHlwZW9mIEomJihuZT1KLEo9bnVsbCksTGU/Sj0iYnVmZmVyIjpKfHwoSj1mZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBuZSYmKG5lPWIpLGZlLmVuZGlu'@;
put 'Zz8oRmU9dGhpcyxPZT1uZSxqZT1uZXcgdWUsRyhGZSxqZSksSy5uZXh0VGljayhPZSxqZSkpOihMZXx8ZnVuY3Rpb24oRmUsT2UsamUsV2Upe3ZhciBLZTtyZXR1cm4gbnVsbD09PWplP0tlPW5ldyBoZToic3RyaW5nIj09dHlwZW9mIGplfHxPZS5vYmplY3RNb2RlfHwoS2U9bmV3IHEoImNo'@;
put 'dW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLGplKSksIUtlfHwoRyhGZSxLZSksSy5uZXh0VGljayhXZSxLZSksITEpfSh0aGlzLGZlLHcsbmUpKSYmKGZlLnBlbmRpbmdjYisrLHhlPWZ1bmN0aW9uKEZlLE9lLGplLFdlLEtlLFllKXtpZighamUpe3ZhciBKZT0oVGU9V2UsKEFlPU9lKS5vYmpl'@;
put 'Y3RNb2RlfHwhMT09PUFlLmRlY29kZVN0cmluZ3N8fCJzdHJpbmciIT10eXBlb2YgVGV8fChUZT1qLmZyb20oVGUsS2UpKSxUZSk7V2UhPT1KZSYmKGplPSEwLEtlPSJidWZmZXIiLFdlPUplKX12YXIgQWUsVGUsbHQ9T2Uub2JqZWN0TW9kZT8xOldlLmxlbmd0aDtPZS5sZW5ndGgrPWx0O3Zh'@;
put 'ciBQZT1PZS5sZW5ndGg8T2UuaGlnaFdhdGVyTWFyaztpZihQZXx8KE9lLm5lZWREcmFpbj0hMCksT2Uud3JpdGluZ3x8T2UuY29ya2VkKXt2YXIgYmU9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdDtPZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpXZSxlbmNvZGluZzpLZSxpc0J1ZjpqZSxj'@;
put 'YWxsYmFjazpZZSxuZXh0Om51bGx9LGJlP2JlLm5leHQ9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdDpPZS5idWZmZXJlZFJlcXVlc3Q9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdCxPZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIE4oRmUsT2UsITEsbHQsV2UsS2UsWWUpO3JldHVybiBQZX0o'@;
put 'dGhpcyxmZSxMZSx3LEosbmUpKSx4ZX0sSC5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEgucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3dyaXRhYmxlU3RhdGU7dy5jb3JrZWQmJih3LmNvcmtlZC0tLHcud3Jp'@;
put 'dGluZ3x8dy5jb3JrZWR8fHcuYnVmZmVyUHJvY2Vzc2luZ3x8IXcuYnVmZmVyZWRSZXF1ZXN0fHxDKHRoaXMsdykpfSxILnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odyl7aWYoInN0cmluZyI9PXR5cGVvZiB3JiYodz13LnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1'@;
put 'dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKHcrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgY2Uodyk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVs'@;
put 'dEVuY29kaW5nPXcsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksSC5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHcsSixuZSl7'@;
put 'bmUobmV3IGVlKCJfd3JpdGUoKSIpKX0sSC5wcm90b3R5cGUuX3dyaXRldj1udWxsLEgucHJvdG90eXBlLmVuZD1mdW5jdGlvbih3LEosbmUpe3ZhciB4ZSxMZSxkZT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB3PyhuZT13LHc9bnVsbCxKPW51bGwpOiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBKJiYobmU9SixKPW51bGwpLG51bGwhPXcmJnRoaXMud3JpdGUodyxKKSxkZS5jb3JrZWQmJihkZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxkZS5lbmRpbmd8fChMZT1uZSwoeGU9ZGUpLmVuZGluZz0hMCxwKHRoaXMseGUpLExlJiYoeGUuZmluaXNoZWQ/Sy5u'@;
put 'ZXh0VGljayhMZSk6dGhpcy5vbmNlKCJmaW5pc2giLExlKSkseGUuZW5kZWQ9ITAsdGhpcy53cml0YWJsZT0hMSksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'X3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95'@;
put 'ZWR9LHNldDpmdW5jdGlvbih3KXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dyl9fSksSC5wcm90b3R5cGUuZGVzdHJveT1ZLmRlc3Ryb3ksSC5wcm90b3R5cGUuX3VuZGVzdHJveT1ZLnVuZGVzdHJveSxILnByb3RvdHlwZS5fZGVzdHJveT1m'@;
put 'dW5jdGlvbih3LEope0oodyl9fSw1ODUwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDQxNTUpO2Z1bmN0aW9uIEkoaGUsdWUsY2Upe3JldHVybih1ZT0ic3ltYm9sIj09dHlwZW9mKGI9ZnVuY3Rpb24oRCxIKXtpZigib2JqZWN0IiE9dHlwZW9mIER8fG51bGw9PT1EKXJldHVy'@;
put 'biBEO3ZhciBOPURbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1OKXt2YXIgZz1OLmNhbGwoRCwic3RyaW5nIik7aWYoIm9iamVjdCIhPXR5cGVvZiBnKXJldHVybiBnO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFs'@;
put 'dWUuIil9cmV0dXJuIFN0cmluZyhEKX0odWUpKT9iOlN0cmluZyhiKSlpbiBoZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsdWUse3ZhbHVlOmNlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6aGVbdWVdPWNlLGhlO3ZhciBifXZhciBrPVIoODYxMCksRT1T'@;
put 'eW1ib2woImxhc3RSZXNvbHZlIiksaj1TeW1ib2woImxhc3RSZWplY3QiKSxWPVN5bWJvbCgiZXJyb3IiKSxCPVN5bWJvbCgiZW5kZWQiKSxZPVN5bWJvbCgibGFzdFByb21pc2UiKSxYPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLFU9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBxKGhlLHVl'@;
put 'KXtyZXR1cm57dmFsdWU6aGUsZG9uZTp1ZX19ZnVuY3Rpb24gZWUoaGUpe3ZhciB1ZT1oZVtFXTtpZihudWxsIT09dWUpe3ZhciBjZT1oZVtVXS5yZWFkKCk7bnVsbCE9PWNlJiYoaGVbWV09bnVsbCxoZVtFXT1udWxsLGhlW2pdPW51bGwsdWUocShjZSwhMSkpKX19ZnVuY3Rpb24gdGUoaGUp'@;
put 'e0submV4dFRpY2soZWUsaGUpfXZhciBvZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24oKXt9KSxzZT1PYmplY3Quc2V0UHJvdG90eXBlT2YoKEkoej17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW1VdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGhlPXRoaXMsdWU9dGhpc1tWXTtpZihu'@;
put 'dWxsIT09dWUpcmV0dXJuIFByb21pc2UucmVqZWN0KHVlKTtpZih0aGlzW0JdKXJldHVybiBQcm9taXNlLnJlc29sdmUocSh2b2lkIDAsITApKTtpZih0aGlzW1VdLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oRCxIKXtLLm5leHRUaWNrKGZ1bmN0aW9uKCl7aGVbVl0/'@;
put 'SChoZVtWXSk6RChxKHZvaWQgMCwhMCkpfSl9KTt2YXIgY2UsRCxILEc9dGhpc1tZXTtpZihHKWNlPW5ldyBQcm9taXNlKChEPUcsSD10aGlzLGZ1bmN0aW9uKE4sZyl7RC50aGVuKGZ1bmN0aW9uKCl7SFtCXT9OKHEodm9pZCAwLCEwKSk6SFtYXShOLGcpfSxnKX0pKTtlbHNle3ZhciBiPXRo'@;
put 'aXNbVV0ucmVhZCgpO2lmKG51bGwhPT1iKXJldHVybiBQcm9taXNlLnJlc29sdmUocShiLCExKSk7Y2U9bmV3IFByb21pc2UodGhpc1tYXSl9cmV0dXJuIHRoaXNbWV09Y2UsY2V9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksSSh6LCJyZXR1cm4iLGZ1'@;
put 'bmN0aW9uKCl7dmFyIGhlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHVlLGNlKXtoZVtVXS5kZXN0cm95KG51bGwsZnVuY3Rpb24oRyl7Rz9jZShHKTp1ZShxKHZvaWQgMCwhMCkpfSl9KX0pLHopLG9lKTtNLmV4cG9ydHM9ZnVuY3Rpb24oaGUpe3ZhciB1ZSxjZT1PYmplY3Qu'@;
put 'Y3JlYXRlKHNlLChJKHVlPXt9LFUse3ZhbHVlOmhlLHdyaXRhYmxlOiEwfSksSSh1ZSxFLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSSh1ZSxqLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSSh1ZSxWLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSSh1ZSxCLHt2YWx1ZTpoZS5fcmVh'@;
put 'ZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksSSh1ZSxYLHt2YWx1ZTpmdW5jdGlvbihHLGIpe3ZhciBEPWNlW1VdLnJlYWQoKTtEPyhjZVtZXT1udWxsLGNlW0VdPW51bGwsY2Vbal09bnVsbCxHKHEoRCwhMSkpKTooY2VbRV09RyxjZVtqXT1iKX0sd3JpdGFibGU6ITB9KSx1'@;
put 'ZSkpO3JldHVybiBjZVtZXT1udWxsLGsoaGUsZnVuY3Rpb24oRyl7aWYoRyYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PUcuY29kZSl7dmFyIGI9Y2Vbal07cmV0dXJuIG51bGwhPT1iJiYoY2VbWV09bnVsbCxjZVtFXT1udWxsLGNlW2pdPW51bGwsYihHKSksdm9pZChjZVtWXT1H'@;
put 'KX12YXIgRD1jZVtFXTtudWxsIT09RCYmKGNlW1ldPW51bGwsY2VbRV09bnVsbCxjZVtqXT1udWxsLEQocSh2b2lkIDAsITApKSksY2VbQl09ITB9KSxoZS5vbigicmVhZGFibGUiLHRlLmJpbmQobnVsbCxjZSkpLGNlfX0sNzMyNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHoo'@;
put 'WSxYKXt2YXIgVT1PYmplY3Qua2V5cyhZKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFkpO1gmJihxPXEuZmlsdGVyKGZ1bmN0aW9uKGVlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihZ'@;
put 'LGVlKS5lbnVtZXJhYmxlfSkpLFUucHVzaC5hcHBseShVLHEpfXJldHVybiBVfWZ1bmN0aW9uIEsoWSl7Zm9yKHZhciBYPTE7WDxhcmd1bWVudHMubGVuZ3RoO1grKyl7dmFyIFU9bnVsbCE9YXJndW1lbnRzW1hdP2FyZ3VtZW50c1tYXTp7fTtYJTI/eihPYmplY3QoVSksITApLmZvckVhY2go'@;
put 'ZnVuY3Rpb24ocSl7SShZLHEsVVtxXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhZLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKFUpKTp6KE9iamVjdChVKSkuZm9yRWFjaChmdW5jdGlvbihxKXtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoWSxxLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVSxxKSl9KX1yZXR1cm4gWX1mdW5jdGlvbiBJKFksWCxVKXtyZXR1cm4oWD1FKFgpKWluIFk/T2JqZWN0LmRlZmluZVByb3BlcnR5KFksWCx7dmFsdWU6VSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MCx3cml0YWJsZTohMH0pOllbWF09VSxZfWZ1bmN0aW9uIEUoWSl7dmFyIFg9ZnVuY3Rpb24oVSxxKXtpZigib2JqZWN0IiE9dHlwZW9mIFV8fG51bGw9PT1VKXJldHVybiBVO3ZhciBlZT1VW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZWUpe3ZhciB0ZT1lZS5jYWxsKFUsInN0'@;
put 'cmluZyIpO2lmKCJvYmplY3QiIT10eXBlb2YgdGUpcmV0dXJuIHRlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhVKX0oWSk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBYP1g6U3RyaW5nKFgp'@;
put 'fXZhciBqPVIoODc2NCkuQnVmZmVyLFY9UigyMzYxKS5pbnNwZWN0LEI9ViYmVi5jdXN0b218fCJpbnNwZWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBZKCl7KGZ1bmN0aW9uKGVlLHRlKXtpZighKGVlIGluc3RhbmNlb2YgdGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v'@;
put 'dCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxZKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXZhciBYLFU7cmV0dXJuIFg9WSwoVT1be2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciB0ZT17ZGF0YTplZSxuZXh0Om51bGx9'@;
put 'O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9dGU6dGhpcy5oZWFkPXRlLHRoaXMudGFpbD10ZSwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciB0ZT17ZGF0YTplZSxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50'@;
put 'YWlsPXRlKSx0aGlzLmhlYWQ9dGUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGVlPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVh'@;
put 'ZC5uZXh0LC0tdGhpcy5sZW5ndGgsZWV9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIg'@;
put 'dGU9dGhpcy5oZWFkLG9lPSIiK3RlLmRhdGE7dGU9dGUubmV4dDspb2UrPWVlK3RlLmRhdGE7cmV0dXJuIG9lfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBqLmFsbG9jKDApO2Zvcih2YXIgaGU9ai5hbGxvY1Vuc2FmZShlZT4+'@;
put 'PjApLHVlPXRoaXMuaGVhZCxjZT0wO3VlOylqLnByb3RvdHlwZS5jb3B5LmNhbGwodWUuZGF0YSxoZSxjZSksY2UrPXVlLmRhdGEubGVuZ3RoLHVlPXVlLm5leHQ7cmV0dXJuIGhlfX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24oZWUsdGUpe3ZhciBvZTtyZXR1cm4gZWU8dGhpcy5o'@;
put 'ZWFkLmRhdGEubGVuZ3RoPyhvZT10aGlzLmhlYWQuZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlZSkpOm9lPWVlPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTp0ZT90aGlzLl9nZXRTdHJpbmcoZWUpOnRoaXMuX2dldEJ1'@;
put 'ZmZlcihlZSksb2V9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIHRlPXRoaXMuaGVhZCxvZT0xLHNlPXRlLmRhdGE7Zm9yKGVlLT1zZS5sZW5ndGg7dGU9dGUubmV4'@;
put 'dDspe3ZhciBoZT10ZS5kYXRhLHVlPWVlPmhlLmxlbmd0aD9oZS5sZW5ndGg6ZWU7aWYoc2UrPXVlPT09aGUubGVuZ3RoP2hlOmhlLnNsaWNlKDAsZWUpLDA9PShlZS09dWUpKXt1ZT09PWhlLmxlbmd0aD8oKytvZSx0aGlzLmhlYWQ9dGUubmV4dD90ZS5uZXh0OnRoaXMudGFpbD1udWxsKToo'@;
put 'dGhpcy5oZWFkPXRlLHRlLmRhdGE9aGUuc2xpY2UodWUpKTticmVha30rK29lfXJldHVybiB0aGlzLmxlbmd0aC09b2Usc2V9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIHRlPWouYWxsb2NVbnNhZmUoZWUpLG9lPXRoaXMuaGVhZCxzZT0xO2ZvcihvZS5kYXRh'@;
put 'LmNvcHkodGUpLGVlLT1vZS5kYXRhLmxlbmd0aDtvZT1vZS5uZXh0Oyl7dmFyIGhlPW9lLmRhdGEsdWU9ZWU+aGUubGVuZ3RoP2hlLmxlbmd0aDplZTtpZihoZS5jb3B5KHRlLHRlLmxlbmd0aC1lZSwwLHVlKSwwPT0oZWUtPXVlKSl7dWU9PT1oZS5sZW5ndGg/KCsrc2UsdGhpcy5oZWFkPW9l'@;
put 'Lm5leHQ/b2UubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1vZSxvZS5kYXRhPWhlLnNsaWNlKHVlKSk7YnJlYWt9KytzZX1yZXR1cm4gdGhpcy5sZW5ndGgtPXNlLHRlfX0se2tleTpCLHZhbHVlOmZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4gVih0aGlzLEsoSyh7fSx0ZSkse30se2Rl'@;
put 'cHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSkmJmZ1bmN0aW9uIGsoWSxYKXtmb3IodmFyIFU9MDtVPFgubGVuZ3RoO1UrKyl7dmFyIHE9WFtVXTtxLmVudW1lcmFibGU9cS5lbnVtZXJhYmxlfHwhMSxxLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gcSYmKHEud3JpdGFibGU9ITApLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShZLEUocS5rZXkpLHEpfX0oWC5wcm90b3R5cGUsVSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksWX0oKX0sMTE5NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7ZnVuY3Rpb24gSyhFLGop'@;
put 'e2soRSxqKSxJKEUpfWZ1bmN0aW9uIEkoRSl7RS5fd3JpdGFibGVTdGF0ZSYmIUUuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxFLl9yZWFkYWJsZVN0YXRlJiYhRS5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fEUuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBrKEUsail7RS5lbWl0KCJlcnJv'@;
put 'ciIsail9TS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uKEUsail7dmFyIFY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhqP2oo'@;
put 'RSk6RSYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx6Lm5leHRUaWNrKGssdGhpcyxFKSk6ei5uZXh0VGljayhrLHRoaXMsRSkpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0'@;
put 'YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShFfHxudWxsLGZ1bmN0aW9uKFgpeyFqJiZYP1YuX3dyaXRhYmxlU3RhdGU/Vi5fd3JpdGFibGVT'@;
put 'dGF0ZS5lcnJvckVtaXR0ZWQ/ei5uZXh0VGljayhJLFYpOihWLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx6Lm5leHRUaWNrKEssVixYKSk6ei5uZXh0VGljayhLLFYsWCk6aj8oei5uZXh0VGljayhJLFYpLGooWCkpOnoubmV4dFRpY2soSSxWKX0pLHRoaXMpfSx1bmRlc3Ryb3k6'@;
put 'ZnVuY3Rpb24oKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlz'@;
put 'Ll93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUu'@;
put 'cHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uKEUsail7dmFyIFY9RS5fcmVhZGFibGVTdGF0ZSxCPUUuX3dyaXRhYmxlU3RhdGU7ViYmVi5hdXRv'@;
put 'RGVzdHJveXx8QiYmQi5hdXRvRGVzdHJveT9FLmRlc3Ryb3koaik6RS5lbWl0KCJlcnJvciIsail9fX0sODYxMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4MSkucS5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtmdW5jdGlvbiBLKCl7fU0uZXhwb3J0cz1mdW5jdGlvbiBJ'@;
put 'KGssRSxqKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRSlyZXR1cm4gSShrLG51bGwsRSk7dmFyIGhlLHVlO0V8fChFPXt9KSxoZT1qfHxLLHVlPSExLGo9ZnVuY3Rpb24oKXtpZighdWUpe3VlPSEwO2Zvcih2YXIgY2U9YXJndW1lbnRzLmxlbmd0aCxHPW5ldyBBcnJheShjZSksYj0wO2I8Y2U7'@;
put 'YisrKUdbYl09YXJndW1lbnRzW2JdO2hlLmFwcGx5KHRoaXMsRyl9fTt2YXIgVj1FLnJlYWRhYmxlfHwhMSE9PUUucmVhZGFibGUmJmsucmVhZGFibGUsQj1FLndyaXRhYmxlfHwhMSE9PUUud3JpdGFibGUmJmsud3JpdGFibGUsWT1mdW5jdGlvbigpe2sud3JpdGFibGV8fFUoKX0sWD1rLl93'@;
put 'cml0YWJsZVN0YXRlJiZrLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLFU9ZnVuY3Rpb24oKXtCPSExLFg9ITAsVnx8ai5jYWxsKGspfSxxPWsuX3JlYWRhYmxlU3RhdGUmJmsuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxlZT1mdW5jdGlvbigpe1Y9ITEscT0hMCxCfHxqLmNhbGwoayl9LHRl'@;
put 'PWZ1bmN0aW9uKGhlKXtqLmNhbGwoayxoZSl9LG9lPWZ1bmN0aW9uKCl7dmFyIGhlO3JldHVybiBWJiYhcT8oay5fcmVhZGFibGVTdGF0ZSYmay5fcmVhZGFibGVTdGF0ZS5lbmRlZHx8KGhlPW5ldyB6KSxqLmNhbGwoayxoZSkpOkImJiFYPyhrLl93cml0YWJsZVN0YXRlJiZrLl93cml0YWJs'@;
put 'ZVN0YXRlLmVuZGVkfHwoaGU9bmV3IHopLGouY2FsbChrLGhlKSk6dm9pZCAwfSxzZT1mdW5jdGlvbigpe2sucmVxLm9uKCJmaW5pc2giLFUpfTtyZXR1cm4gZnVuY3Rpb24oaGUpe3JldHVybiBoZS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBoZS5hYm9ydH0oayk/KGsub24oImNv'@;
put 'bXBsZXRlIixVKSxrLm9uKCJhYm9ydCIsb2UpLGsucmVxP3NlKCk6ay5vbigicmVxdWVzdCIsc2UpKTpCJiYhay5fd3JpdGFibGVTdGF0ZSYmKGsub24oImVuZCIsWSksay5vbigiY2xvc2UiLFkpKSxrLm9uKCJlbmQiLGVlKSxrLm9uKCJmaW5pc2giLFUpLCExIT09RS5lcnJvciYmay5vbigi'@;
put 'ZXJyb3IiLHRlKSxrLm9uKCJjbG9zZSIsb2UpLGZ1bmN0aW9uKCl7ay5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLFUpLGsucmVtb3ZlTGlzdGVuZXIoImFib3J0IixvZSksay5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsc2UpLGsucmVxJiZrLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNo'@;
put 'IixVKSxrLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFkpLGsucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixZKSxrLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLGsucmVtb3ZlTGlzdGVuZXIoImVuZCIsZWUpLGsucmVtb3ZlTGlzdGVuZXIoImVycm9yIix0ZSksay5yZW1vdmVMaXN0ZW5lcigiY2xv'@;
put 'c2UiLG9lKX19fSw1MTY3Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sOTk0NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MjgxKS5xLEk9Sy5FUlJfTUlT'@;
put 'U0lOR19BUkdTLGs9Sy5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBFKEIpe2lmKEIpdGhyb3cgQn1mdW5jdGlvbiBqKEIpe0IoKX1mdW5jdGlvbiBWKEIsWSl7cmV0dXJuIEIucGlwZShZKX1NLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIEI9YXJndW1lbnRzLmxlbmd0aCxZPW5l'@;
put 'dyBBcnJheShCKSxYPTA7WDxCO1grKylZW1hdPWFyZ3VtZW50c1tYXTt2YXIgVSx0ZSxxPSh0ZT1ZKS5sZW5ndGg/ImZ1bmN0aW9uIiE9dHlwZW9mIHRlW3RlLmxlbmd0aC0xXT9FOnRlLnBvcCgpOkU7aWYoQXJyYXkuaXNBcnJheShZWzBdKSYmKFk9WVswXSksWS5sZW5ndGg8Mil0aHJvdyBu'@;
put 'ZXcgSSgic3RyZWFtcyIpO3ZhciBlZT1ZLm1hcChmdW5jdGlvbih0ZSxvZSl7dmFyIHNlPW9lPFkubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGhlLHVlLGNlLEcpe3ZhciBILE47SD1HLE49ITEsRz1mdW5jdGlvbigpe058fChOPSEwLEguYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfTt2YXIg'@;
put 'Yj0hMTtoZS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7Yj0hMH0pLHZvaWQgMD09PXomJih6PVIoODYxMCkpLHooaGUse3JlYWRhYmxlOnVlLHdyaXRhYmxlOmNlfSxmdW5jdGlvbihIKXtpZihIKXJldHVybiBHKEgpO2I9ITAsRygpfSk7dmFyIEQ9ITE7cmV0dXJuIGZ1bmN0aW9uKEgpe2lmKCFi'@;
put 'JiYhRClyZXR1cm4gRD0hMCxmdW5jdGlvbihOKXtyZXR1cm4gTi5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBOLmFib3J0fShoZSk/aGUuYWJvcnQoKToiZnVuY3Rpb24iPT10eXBlb2YgaGUuZGVzdHJveT9oZS5kZXN0cm95KCk6dm9pZCBHKEh8fG5ldyBrKCJwaXBlIikpfX0odGUs'@;
put 'c2Usb2U+MCxmdW5jdGlvbihoZSl7VXx8KFU9aGUpLGhlJiZlZS5mb3JFYWNoKGopLHNlfHwoZWUuZm9yRWFjaChqKSxxKFUpKX0pfSk7cmV0dXJuIFkucmVkdWNlKFYpfX0sMjQ1NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4MSkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7'@;
put 'TS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uKEssSSxrLEUpe3ZhciBWLGo9bnVsbCE9KFY9SSkuaGlnaFdhdGVyTWFyaz9WLmhpZ2hXYXRlck1hcms6RT9WW2tdOm51bGw7aWYobnVsbCE9ail7aWYoIWlzRmluaXRlKGopfHxNYXRoLmZsb29yKGopIT09anx8ajwwKXRocm93'@;
put 'IG5ldyB6KEU/azoiaGlnaFdhdGVyTWFyayIsaik7cmV0dXJuIE1hdGguZmxvb3Ioail9cmV0dXJuIEsub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwyNTAzOihNLE8sUik9PntNLmV4cG9ydHM9Uig3MTg3KS5FdmVudEVtaXR0ZXJ9LDg0NzM6KE0sTyxSKT0+eyhPPU0uZXhwb3J0cz1SKDk0ODEp'@;
put 'KS5TdHJlYW09TyxPLlJlYWRhYmxlPU8sTy5Xcml0YWJsZT1SKDQyMjkpLE8uRHVwbGV4PVIoNjc1MyksTy5UcmFuc2Zvcm09Uig0NjA1KSxPLlBhc3NUaHJvdWdoPVIoMjcyNSksTy5maW5pc2hlZD1SKDg2MTApLE8ucGlwZWxpbmU9Uig5OTQ2KX0sNzQxODpNPT57InVzZSBzdHJpY3QiO00u'@;
put 'ZXhwb3J0cz1mdW5jdGlvbihPLFIpe2lmKFI9Ui5zcGxpdCgiOiIpWzBdLCEoTz0rTykpcmV0dXJuITE7c3dpdGNoKFIpe2Nhc2UiaHR0cCI6Y2FzZSJ3cyI6cmV0dXJuIDgwIT09TztjYXNlImh0dHBzIjpjYXNlIndzcyI6cmV0dXJuIDQ0MyE9PU87Y2FzZSJmdHAiOnJldHVybiAyMSE9PU87'@;
put 'Y2FzZSJnb3BoZXIiOnJldHVybiA3MCE9PU87Y2FzZSJmaWxlIjpyZXR1cm4hMX1yZXR1cm4gMCE9PU99fSw5ODQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSk7Y29uc3QgSz1SKDkyODIpLEk9UigyNTIwKSxrPVIoNzIxNyk7bGV0IEU7dHJ5e0U9UigyODg0KX1jYXRjaHt9Y29uc3Qgaj17bm9z'@;
put 'b3J0OiEwLHNpbGVudDohMH07bGV0IFY9MDtjb25zdCBCPSJ3aW4zMiI9PT16LnBsYXRmb3JtLFk9Y2U9PntpZihbInVubGluayIsImNobW9kIiwic3RhdCIsImxzdGF0Iiwicm1kaXIiLCJyZWFkZGlyIl0uZm9yRWFjaChHPT57Y2VbR109Y2VbR118fGtbR10sY2VbRys9IlN5bmMiXT1jZVtH'@;
put 'XXx8a1tHXX0pLGNlLm1heEJ1c3lUcmllcz1jZS5tYXhCdXN5VHJpZXN8fDMsY2UuZW1maWxlV2FpdD1jZS5lbWZpbGVXYWl0fHwxZTMsITE9PT1jZS5nbG9iJiYoY2UuZGlzYWJsZUdsb2I9ITApLCEwIT09Y2UuZGlzYWJsZUdsb2ImJnZvaWQgMD09PUUpdGhyb3cgRXJyb3IoImdsb2IgZGVw'@;
put 'ZW5kZW5jeSBub3QgZm91bmQsIHNldCBgb3B0aW9ucy5kaXNhYmxlR2xvYiA9IHRydWVgIGlmIGludGVudGlvbmFsIik7Y2UuZGlzYWJsZUdsb2I9Y2UuZGlzYWJsZUdsb2J8fCExLGNlLmdsb2I9Y2UuZ2xvYnx8an0sWD0oY2UsRyxiKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiBHJiYoYj1HLEc9'@;
put 'e30pLEsoY2UsInJpbXJhZjogbWlzc2luZyBwYXRoIiksSy5lcXVhbCh0eXBlb2YgY2UsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxLLmVxdWFsKHR5cGVvZiBiLCJmdW5jdGlvbiIsInJpbXJhZjogY2FsbGJhY2sgZnVuY3Rpb24gcmVxdWlyZWQiKSxLKEcs'@;
put 'InJpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3VtZW50IHByb3ZpZGVkIiksSy5lcXVhbCh0eXBlb2YgRywib2JqZWN0IiwicmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QiKSxZKEcpO2xldCBEPTAsSD1udWxsLE49MDtjb25zdCBnPShDLFMpPT5DP2IoQyk6KE49Uy5sZW5ndGgs'@;
put 'MD09PU4/YigpOnZvaWQgUy5mb3JFYWNoKHY9Pntjb25zdCBwPXc9PntpZih3KXtpZigoIkVCVVNZIj09PXcuY29kZXx8IkVOT1RFTVBUWSI9PT13LmNvZGV8fCJFUEVSTSI9PT13LmNvZGUpJiZEPEcubWF4QnVzeVRyaWVzKXJldHVybiBEKyssc2V0VGltZW91dCgoKT0+VSh2LEcscCksMTAw'@;
put 'KkQpO2lmKCJFTUZJTEUiPT09dy5jb2RlJiZWPEcuZW1maWxlV2FpdClyZXR1cm4gc2V0VGltZW91dCgoKT0+VSh2LEcscCksVisrKTsiRU5PRU5UIj09PXcuY29kZSYmKHc9bnVsbCl9Vj0wLEg9SHx8dywwPT0tLU4mJmIoSCl9O1UodixHLHApfSkpO2lmKEcuZGlzYWJsZUdsb2J8fCFFLmhh'@;
put 'c01hZ2ljKGNlKSlyZXR1cm4gZyhudWxsLFtjZV0pO0cubHN0YXQoY2UsKEMsUyk9PntpZighQylyZXR1cm4gZyhudWxsLFtjZV0pO0UoY2UsRy5nbG9iLGcpfSl9LFU9KGNlLEcsYik9PntLKGNlKSxLKEcpLEsoImZ1bmN0aW9uIj09dHlwZW9mIGIpLEcubHN0YXQoY2UsKEQsSCk9PkQmJiJF'@;
put 'Tk9FTlQiPT09RC5jb2RlP2IobnVsbCk6KEQmJiJFUEVSTSI9PT1ELmNvZGUmJkImJnEoY2UsRyxELGIpLEgmJkguaXNEaXJlY3RvcnkoKT90ZShjZSxHLEQsYik6dm9pZCBHLnVubGluayhjZSxOPT57aWYoTil7aWYoIkVOT0VOVCI9PT1OLmNvZGUpcmV0dXJuIGIobnVsbCk7aWYoIkVQRVJN'@;
put 'Ij09PU4uY29kZSlyZXR1cm4gQj9xKGNlLEcsTixiKTp0ZShjZSxHLE4sYik7aWYoIkVJU0RJUiI9PT1OLmNvZGUpcmV0dXJuIHRlKGNlLEcsTixiKX1yZXR1cm4gYihOKX0pKSl9LHE9KGNlLEcsYixEKT0+e0soY2UpLEsoRyksSygiZnVuY3Rpb24iPT10eXBlb2YgRCksRy5jaG1vZChjZSw0'@;
put 'MzgsSD0+e0g/RCgiRU5PRU5UIj09PUguY29kZT9udWxsOmIpOkcuc3RhdChjZSwoTixnKT0+e04/RCgiRU5PRU5UIj09PU4uY29kZT9udWxsOmIpOmcuaXNEaXJlY3RvcnkoKT90ZShjZSxHLGIsRCk6Ry51bmxpbmsoY2UsRCl9KX0pfSxlZT0oY2UsRyxiKT0+e0soY2UpLEsoRyk7dHJ5e0cu'@;
put 'Y2htb2RTeW5jKGNlLDQzOCl9Y2F0Y2goSCl7aWYoIkVOT0VOVCI9PT1ILmNvZGUpcmV0dXJuO3Rocm93IGJ9bGV0IEQ7dHJ5e0Q9Ry5zdGF0U3luYyhjZSl9Y2F0Y2goSCl7aWYoIkVOT0VOVCI9PT1ILmNvZGUpcmV0dXJuO3Rocm93IGJ9RC5pc0RpcmVjdG9yeSgpP2hlKGNlLEcsYik6Ry51'@;
put 'bmxpbmtTeW5jKGNlKX0sdGU9KGNlLEcsYixEKT0+e0soY2UpLEsoRyksSygiZnVuY3Rpb24iPT10eXBlb2YgRCksRy5ybWRpcihjZSxIPT57IUh8fCJFTk9URU1QVFkiIT09SC5jb2RlJiYiRUVYSVNUIiE9PUguY29kZSYmIkVQRVJNIiE9PUguY29kZT9EKEgmJiJFTk9URElSIj09PUguY29k'@;
put 'ZT9iOkgpOm9lKGNlLEcsRCl9KX0sb2U9KGNlLEcsYik9PntLKGNlKSxLKEcpLEsoImZ1bmN0aW9uIj09dHlwZW9mIGIpLEcucmVhZGRpcihjZSwoRCxIKT0+e2lmKEQpcmV0dXJuIGIoRCk7bGV0IE4sZz1ILmxlbmd0aDtpZigwPT09ZylyZXR1cm4gRy5ybWRpcihjZSxiKTtILmZvckVhY2go'@;
put 'Qz0+e1goSS5qb2luKGNlLEMpLEcsUz0+e2lmKCFOKXJldHVybiBTP2IoTj1TKTp2b2lkKDA9PS0tZyYmRy5ybWRpcihjZSxiKSl9KX0pfSl9LHNlPShjZSxHKT0+e2xldCBiO2lmKFkoRz1HfHx7fSksSyhjZSwicmltcmFmOiBtaXNzaW5nIHBhdGgiKSxLLmVxdWFsKHR5cGVvZiBjZSwic3Ry'@;
put 'aW5nIiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZyIpLEsoRywicmltcmFmOiBtaXNzaW5nIG9wdGlvbnMiKSxLLmVxdWFsKHR5cGVvZiBHLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCIpLEcuZGlzYWJsZUdsb2J8fCFFLmhhc01hZ2ljKGNlKSli'@;
put 'PVtjZV07ZWxzZSB0cnl7Ry5sc3RhdFN5bmMoY2UpLGI9W2NlXX1jYXRjaHtiPUUuc3luYyhjZSxHLmdsb2IpfWlmKGIubGVuZ3RoKWZvcihsZXQgRD0wO0Q8Yi5sZW5ndGg7RCsrKXtjb25zdCBIPWJbRF07bGV0IE47dHJ5e049Ry5sc3RhdFN5bmMoSCl9Y2F0Y2goZyl7aWYoIkVOT0VOVCI9'@;
put 'PT1nLmNvZGUpcmV0dXJuOyJFUEVSTSI9PT1nLmNvZGUmJkImJmVlKEgsRyxnKX10cnl7TiYmTi5pc0RpcmVjdG9yeSgpP2hlKEgsRyxudWxsKTpHLnVubGlua1N5bmMoSCl9Y2F0Y2goZyl7aWYoIkVOT0VOVCI9PT1nLmNvZGUpcmV0dXJuO2lmKCJFUEVSTSI9PT1nLmNvZGUpcmV0dXJuIEI/'@;
put 'ZWUoSCxHLGcpOmhlKEgsRyxnKTtpZigiRUlTRElSIiE9PWcuY29kZSl0aHJvdyBnO2hlKEgsRyxnKX19fSxoZT0oY2UsRyxiKT0+e0soY2UpLEsoRyk7dHJ5e0cucm1kaXJTeW5jKGNlKX1jYXRjaChEKXtpZigiRU5PRU5UIj09PUQuY29kZSlyZXR1cm47aWYoIkVOT1RESVIiPT09RC5jb2Rl'@;
put 'KXRocm93IGI7IkVOT1RFTVBUWSIhPT1ELmNvZGUmJiJFRVhJU1QiIT09RC5jb2RlJiYiRVBFUk0iIT09RC5jb2RlfHx1ZShjZSxHKX19LHVlPShjZSxHKT0+e0soY2UpLEsoRyksRy5yZWFkZGlyU3luYyhjZSkuZm9yRWFjaChIPT5zZShJLmpvaW4oY2UsSCksRykpO2NvbnN0IGI9Qj8xMDA6'@;
put 'MTtsZXQgRD0wO2Zvcig7Oyl7bGV0IEg9ITA7dHJ5e2NvbnN0IE49Ry5ybWRpclN5bmMoY2UsRyk7cmV0dXJuIEg9ITEsTn1maW5hbGx5e2lmKCsrRDxiJiZIKWNvbnRpbnVlfX19O00uZXhwb3J0cz1YLFguc3luYz1zZX0sOTc4NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODc2'@;
put 'NCkuQnVmZmVyLEs9Uig1NzE3KSxJPVIoMzM0OSksaz1uZXcgQXJyYXkoMTYpLEU9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEs'@;
put 'OSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10saj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcs'@;
put 'MTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxWPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1'@;
put 'LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxCPVs4LDksOSwxMSwxMywxNSwxNSw1'@;
put 'LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMs'@;
put 'Niw1LDE1LDEzLDExLDExXSxZPVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLFg9WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07ZnVuY3Rpb24gVSgpe0kuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMs'@;
put 'dGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gcSh1ZSxjZSl7cmV0dXJuIHVlPDxjZXx1ZT4+PjMyLWNlfWZ1bmN0aW9uIGVlKHVlLGNlLEcsYixELEgsTixnKXtyZXR1cm4gcSh1ZSsoY2Ve'@;
put 'R15iKStIK058MCxnKStEfDB9ZnVuY3Rpb24gdGUodWUsY2UsRyxiLEQsSCxOLGcpe3JldHVybiBxKHVlKyhjZSZHfH5jZSZiKStIK058MCxnKStEfDB9ZnVuY3Rpb24gb2UodWUsY2UsRyxiLEQsSCxOLGcpe3JldHVybiBxKHVlKygoY2V8fkcpXmIpK0grTnwwLGcpK0R8MH1mdW5jdGlvbiBz'@;
put 'ZSh1ZSxjZSxHLGIsRCxILE4sZyl7cmV0dXJuIHEodWUrKGNlJmJ8RyZ+YikrSCtOfDAsZykrRHwwfWZ1bmN0aW9uIGhlKHVlLGNlLEcsYixELEgsTixnKXtyZXR1cm4gcSh1ZSsoY2VeKEd8fmIpKStIK058MCxnKStEfDB9SyhVLEkpLFUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIHVlPWssY2U9MDtjZTwxNjsrK2NlKXVlW2NlXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KmNlKTtmb3IodmFyIEc9MHx0aGlzLl9hLGI9MHx0aGlzLl9iLEQ9MHx0aGlzLl9jLEg9MHx0aGlzLl9kLE49MHx0aGlzLl9lLGc9MHx0aGlzLl9hLEM9MHx0aGlzLl9iLFM9MHx0aGlz'@;
put 'Ll9jLHY9MHx0aGlzLl9kLHA9MHx0aGlzLl9lLHc9MDt3PDgwO3crPTEpe3ZhciBKLG5lO3c8MTY/KEo9ZWUoRyxiLEQsSCxOLHVlW0Vbd11dLFlbMF0sVlt3XSksbmU9aGUoZyxDLFMsdixwLHVlW2pbd11dLFhbMF0sQlt3XSkpOnc8MzI/KEo9dGUoRyxiLEQsSCxOLHVlW0Vbd11dLFlbMV0s'@;
put 'Vlt3XSksbmU9c2UoZyxDLFMsdixwLHVlW2pbd11dLFhbMV0sQlt3XSkpOnc8NDg/KEo9b2UoRyxiLEQsSCxOLHVlW0Vbd11dLFlbMl0sVlt3XSksbmU9b2UoZyxDLFMsdixwLHVlW2pbd11dLFhbMl0sQlt3XSkpOnc8NjQ/KEo9c2UoRyxiLEQsSCxOLHVlW0Vbd11dLFlbM10sVlt3XSksbmU9'@;
put 'dGUoZyxDLFMsdixwLHVlW2pbd11dLFhbM10sQlt3XSkpOihKPWhlKEcsYixELEgsTix1ZVtFW3ddXSxZWzRdLFZbd10pLG5lPWVlKGcsQyxTLHYscCx1ZVtqW3ddXSxYWzRdLEJbd10pKSxHPU4sTj1ILEg9cShELDEwKSxEPWIsYj1KLGc9cCxwPXYsdj1xKFMsMTApLFM9QyxDPW5lfXZhciBk'@;
put 'ZT10aGlzLl9iK0QrdnwwO3RoaXMuX2I9dGhpcy5fYytIK3B8MCx0aGlzLl9jPXRoaXMuX2QrTitnfDAsdGhpcy5fZD10aGlzLl9lK0crQ3wwLHRoaXMuX2U9dGhpcy5fYStiK1N8MCx0aGlzLl9hPWRlfSxVLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5f'@;
put 'YmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMu'@;
put 'X2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIHVlPXouYWxsb2M/ei5hbGxvYygyMCk6bmV3IHooMjApO3JldHVybiB1ZS53cml0ZUludDMyTEUodGhp'@;
put 'cy5fYSwwKSx1ZS53cml0ZUludDMyTEUodGhpcy5fYiw0KSx1ZS53cml0ZUludDMyTEUodGhpcy5fYyw4KSx1ZS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksdWUud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLHVlfSxNLmV4cG9ydHM9VX0sOTUwOTooTSxPLFIpPT57dmFyIHo9Uig4NzY0KSxL'@;
put 'PXouQnVmZmVyO2Z1bmN0aW9uIEkoRSxqKXtmb3IodmFyIFYgaW4gRSlqW1ZdPUVbVl19ZnVuY3Rpb24gayhFLGosVil7cmV0dXJuIEsoRSxqLFYpfUsuZnJvbSYmSy5hbGxvYyYmSy5hbGxvY1Vuc2FmZSYmSy5hbGxvY1Vuc2FmZVNsb3c/TS5leHBvcnRzPXo6KEkoeixPKSxPLkJ1ZmZlcj1r'@;
put 'KSxrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEsucHJvdG90eXBlKSxJKEssayksay5mcm9tPWZ1bmN0aW9uKEUsaixWKXtpZigibnVtYmVyIj09dHlwZW9mIEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSyhFLGosVil9LGsu'@;
put 'YWxsb2M9ZnVuY3Rpb24oRSxqLFYpe2lmKCJudW1iZXIiIT10eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIEI9SyhFKTtyZXR1cm4gdm9pZCAwIT09aj8ic3RyaW5nIj09dHlwZW9mIFY/Qi5maWxsKGosVik6Qi5maWxsKGopOkIu'@;
put 'ZmlsbCgwKSxCfSxrLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEUpe2lmKCJudW1iZXIiIT10eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEsoRSl9LGsuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKEUpe2lmKCJudW1iZXIiIT10'@;
put 'eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHouU2xvd0J1ZmZlcihFKX19LDIzOTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIoNDE1NSksST1SKDg3NjQpLGs9SS5CdWZmZXIsRT17fTtmb3IoeiBpbiBJKUku'@;
put 'aGFzT3duUHJvcGVydHkoeikmJiJTbG93QnVmZmVyIiE9PXomJiJCdWZmZXIiIT09eiYmKEVbel09SVt6XSk7dmFyIGo9RS5CdWZmZXI9e307Zm9yKHogaW4gaylrLmhhc093blByb3BlcnR5KHopJiYiYWxsb2NVbnNhZmUiIT09eiYmImFsbG9jVW5zYWZlU2xvdyIhPT16JiYoalt6XT1rW3pd'@;
put 'KTtpZihFLkJ1ZmZlci5wcm90b3R5cGU9ay5wcm90b3R5cGUsai5mcm9tJiZqLmZyb20hPT1VaW50OEFycmF5LmZyb218fChqLmZyb209ZnVuY3Rpb24oVixCLFkpe2lmKCJudW1iZXIiPT10eXBlb2YgVil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5v'@;
put 'dCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBWKTtpZihWJiZ2b2lkIDA9PT1WLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5'@;
put 'LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBWKTtyZXR1cm4gayhWLEIsWSl9KSxqLmFsbG9jfHwoai5hbGxvYz1mdW5jdGlvbihWLEIsWSl7aWYoIm51bWJlciIhPXR5cGVvZiBWKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic2l6ZSIgYXJndW1lbnQg'@;
put 'bXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBWKTtpZihWPDB8fFY+PTIxNDc0ODM2NDgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytWKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgWD1rKFYpO3JldHVybiBCJiYw'@;
put 'IT09Qi5sZW5ndGg/InN0cmluZyI9PXR5cGVvZiBZP1guZmlsbChCLFkpOlguZmlsbChCKTpYLmZpbGwoMCksWH0pLCFFLmtTdHJpbmdNYXhMZW5ndGgpdHJ5e0Uua1N0cmluZ01heExlbmd0aD1LLmJpbmRpbmcoImJ1ZmZlciIpLmtTdHJpbmdNYXhMZW5ndGh9Y2F0Y2h7fUUuY29uc3RhbnRz'@;
put 'fHwoRS5jb25zdGFudHM9e01BWF9MRU5HVEg6RS5rTWF4TGVuZ3RofSxFLmtTdHJpbmdNYXhMZW5ndGgmJihFLmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSD1FLmtTdHJpbmdNYXhMZW5ndGgpKSxNLmV4cG9ydHM9RX0sNDE4OTooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7ZnVu'@;
put 'Y3Rpb24gSyhJLGspe3RoaXMuX2Jsb2NrPXouYWxsb2MoSSksdGhpcy5fZmluYWxTaXplPWssdGhpcy5fYmxvY2tTaXplPUksdGhpcy5fbGVuPTB9Sy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEksayl7InN0cmluZyI9PXR5cGVvZiBJJiYoST16LmZyb20oSSxrPWt8fCJ1dGY4IikpO2Zv'@;
put 'cih2YXIgRT10aGlzLl9ibG9jayxqPXRoaXMuX2Jsb2NrU2l6ZSxWPUkubGVuZ3RoLEI9dGhpcy5fbGVuLFk9MDtZPFY7KXtmb3IodmFyIFg9QiVqLFU9TWF0aC5taW4oVi1ZLGotWCkscT0wO3E8VTtxKyspRVtYK3FdPUlbWStxXTtZKz1VLChCKz1VKSVqPT0wJiZ0aGlzLl91cGRhdGUoRSl9'@;
put 'cmV0dXJuIHRoaXMuX2xlbis9Vix0aGlzfSxLLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oSSl7dmFyIGs9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1trXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLGsrMSksaz49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRl'@;
put 'KHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgRT04KnRoaXMuX2xlbjtpZihFPD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoRSx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgaj0oNDI5NDk2NzI5NSZFKT4+PjA7dGhpcy5fYmxvY2sud3JpdGVV'@;
put 'SW50MzJCRSgoRS1qKS80Mjk0OTY3Mjk2LHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGosdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIEI9dGhpcy5faGFzaCgpO3JldHVybiBJP0IudG9TdHJpbmcoSSk6Qn0sSy5w'@;
put 'cm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LE0uZXhwb3J0cz1LfSw5MDcyOihNLE8sUik9Pnt2YXIgej1NLmV4cG9ydHM9ZnVuY3Rpb24oSyl7Sz1LLnRvTG93ZXJDYXNlKCk7dmFy'@;
put 'IEk9eltLXTtpZighSSl0aHJvdyBuZXcgRXJyb3IoSysiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVybiBuZXcgSX07ei5zaGE9Uig0NDQ4KSx6LnNoYTE9Uig4MzM2KSx6LnNoYTIyND1SKDg0MzIpLHouc2hhMjU2PVIoNzQ5OSksei5zaGEzODQ9'@;
put 'UigxNjg2KSx6LnNoYTUxMj1SKDc4MTYpfSw0NDQ4OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig0MTg5KSxJPVIoOTUwOSkuQnVmZmVyLGs9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxFPW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gaigpe3RoaXMu'@;
put 'aW5pdCgpLHRoaXMuX3c9RSxLLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gVihZKXtyZXR1cm4gWTw8MzB8WT4+PjJ9ZnVuY3Rpb24gQihZLFgsVSxxKXtyZXR1cm4gMD09PVk/WCZVfH5YJnE6Mj09PVk/WCZVfFgmcXxVJnE6WF5VXnF9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYLFU9dGhpcy5fdyxx'@;
put 'PTB8dGhpcy5fYSxlZT0wfHRoaXMuX2IsdGU9MHx0aGlzLl9jLG9lPTB8dGhpcy5fZCxzZT0wfHRoaXMuX2UsaGU9MDtoZTwxNjsrK2hlKVVbaGVdPVkucmVhZEludDMyQkUoNCpoZSk7Zm9yKDtoZTw4MDsrK2hlKVVbaGVdPVVbaGUtM11eVVtoZS04XV5VW2hlLTE0XV5VW2hlLTE2XTtmb3Io'@;
put 'dmFyIHVlPTA7dWU8ODA7Kyt1ZSl7dmFyIGNlPX5+KHVlLzIwKSxHPTB8KChYPXEpPDw1fFg+Pj4yNykrQihjZSxlZSx0ZSxvZSkrc2UrVVt1ZV0ra1tjZV07c2U9b2Usb2U9dGUsdGU9VihlZSksZWU9cSxxPUd9dGhpcy5fYT1xK3RoaXMuX2F8MCx0aGlzLl9iPWVlK3RoaXMuX2J8MCx0aGlz'@;
put 'Ll9jPXRlK3RoaXMuX2N8MCx0aGlzLl9kPW9lK3RoaXMuX2R8MCx0aGlzLl9lPXNlK3RoaXMuX2V8MH0sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgWT1JLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gWS53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLFkud3JpdGVJbnQzMkJFKDB8'@;
put 'dGhpcy5fYiw0KSxZLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksWS53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxZLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLFl9LE0uZXhwb3J0cz1qfSw4MzM2OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig0MTg5KSxJPVIoOTUwOSkuQnVm'@;
put 'ZmVyLGs9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxFPW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxLLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gVihYKXtyZXR1cm4gWDw8NXxYPj4+Mjd9ZnVuY3Rpb24g'@;
put 'QihYKXtyZXR1cm4gWDw8MzB8WD4+PjJ9ZnVuY3Rpb24gWShYLFUscSxlZSl7cmV0dXJuIDA9PT1YP1UmcXx+VSZlZToyPT09WD9VJnF8VSZlZXxxJmVlOlVecV5lZX16KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00'@;
put 'MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihYKXtmb3IodmFyIFUscT10aGlzLl93LGVlPTB8dGhpcy5fYSx0ZT0wfHRoaXMuX2Isb2U9MHx0aGlzLl9jLHNl'@;
put 'PTB8dGhpcy5fZCxoZT0wfHRoaXMuX2UsdWU9MDt1ZTwxNjsrK3VlKXFbdWVdPVgucmVhZEludDMyQkUoNCp1ZSk7Zm9yKDt1ZTw4MDsrK3VlKXFbdWVdPShVPXFbdWUtM11ecVt1ZS04XV5xW3VlLTE0XV5xW3VlLTE2XSk8PDF8VT4+PjMxO2Zvcih2YXIgY2U9MDtjZTw4MDsrK2NlKXt2YXIg'@;
put 'Rz1+fihjZS8yMCksYj1WKGVlKStZKEcsdGUsb2Usc2UpK2hlK3FbY2VdK2tbR118MDtoZT1zZSxzZT1vZSxvZT1CKHRlKSx0ZT1lZSxlZT1ifXRoaXMuX2E9ZWUrdGhpcy5fYXwwLHRoaXMuX2I9dGUrdGhpcy5fYnwwLHRoaXMuX2M9b2UrdGhpcy5fY3wwLHRoaXMuX2Q9c2UrdGhpcy5fZHww'@;
put 'LHRoaXMuX2U9aGUrdGhpcy5fZXwwfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBYPUkuYWxsb2NVbnNhZmUoMjApO3JldHVybiBYLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksWC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLFgud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4'@;
put 'KSxYLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLFgud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksWH0sTS5leHBvcnRzPWp9LDg0MzI6KE0sTyxSKT0+e3ZhciB6PVIoNTcxNyksSz1SKDc0OTkpLEk9Uig0MTg5KSxrPVIoOTUwOSkuQnVmZmVyLEU9bmV3IEFycmF5KDY0KTtmdW5jdGlv'@;
put 'biBqKCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEkuY2FsbCh0aGlzLDY0LDU2KX16KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRo'@;
put 'aXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBWPWsuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBWLndyaXRlSW50MzJCRSh0aGlzLl9hLDAp'@;
put 'LFYud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksVi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxWLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxWLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxWLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxWLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxWfSxN'@;
put 'LmV4cG9ydHM9an0sNzQ5OTooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNDE4OSksST1SKDk1MDkpLkJ1ZmZlcixrPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0Mzgx'@;
put 'MDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4Niwy'@;
put 'NTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5'@;
put 'NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMs'@;
put 'MTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLEU9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEsuY2FsbCh0aGlzLDY0'@;
put 'LDU2KX1mdW5jdGlvbiBWKHEsZWUsdGUpe3JldHVybiB0ZV5xJihlZV50ZSl9ZnVuY3Rpb24gQihxLGVlLHRlKXtyZXR1cm4gcSZlZXx0ZSYocXxlZSl9ZnVuY3Rpb24gWShxKXtyZXR1cm4ocT4+PjJ8cTw8MzApXihxPj4+MTN8cTw8MTkpXihxPj4+MjJ8cTw8MTApfWZ1bmN0aW9uIFgocSl7'@;
put 'cmV0dXJuKHE+Pj42fHE8PDI2KV4ocT4+PjExfHE8PDIxKV4ocT4+PjI1fHE8PDcpfWZ1bmN0aW9uIFUocSl7cmV0dXJuKHE+Pj43fHE8PDI1KV4ocT4+PjE4fHE8PDE0KV5xPj4+M316KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMs'@;
put 'dGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlv'@;
put 'bihxKXtmb3IodmFyIGVlLHRlPXRoaXMuX3csb2U9MHx0aGlzLl9hLHNlPTB8dGhpcy5fYixoZT0wfHRoaXMuX2MsdWU9MHx0aGlzLl9kLGNlPTB8dGhpcy5fZSxHPTB8dGhpcy5fZixiPTB8dGhpcy5fZyxEPTB8dGhpcy5faCxIPTA7SDwxNjsrK0gpdGVbSF09cS5yZWFkSW50MzJCRSg0Kkgp'@;
put 'O2Zvcig7SDw2NDsrK0gpdGVbSF09MHwoKChlZT10ZVtILTJdKT4+PjE3fGVlPDwxNSleKGVlPj4+MTl8ZWU8PDEzKV5lZT4+PjEwKSt0ZVtILTddK1UodGVbSC0xNV0pK3RlW0gtMTZdO2Zvcih2YXIgTj0wO048NjQ7KytOKXt2YXIgZz1EK1goY2UpK1YoY2UsRyxiKStrW05dK3RlW05dfDAs'@;
put 'Qz1ZKG9lKStCKG9lLHNlLGhlKXwwO0Q9YixiPUcsRz1jZSxjZT11ZStnfDAsdWU9aGUsaGU9c2Usc2U9b2Usb2U9ZytDfDB9dGhpcy5fYT1vZSt0aGlzLl9hfDAsdGhpcy5fYj1zZSt0aGlzLl9ifDAsdGhpcy5fYz1oZSt0aGlzLl9jfDAsdGhpcy5fZD11ZSt0aGlzLl9kfDAsdGhpcy5fZT1j'@;
put 'ZSt0aGlzLl9lfDAsdGhpcy5fZj1HK3RoaXMuX2Z8MCx0aGlzLl9nPWIrdGhpcy5fZ3wwLHRoaXMuX2g9RCt0aGlzLl9ofDB9LGoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHE9SS5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIHEud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCkscS53cml0'@;
put 'ZUludDMyQkUodGhpcy5fYiw0KSxxLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLHEud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLHEud3JpdGVJbnQz'@;
put 'MkJFKHRoaXMuX2gsMjgpLHF9LE0uZXhwb3J0cz1qfSwxNjg2OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig3ODE2KSxJPVIoNDE4OSksaz1SKDk1MDkpLkJ1ZmZlcixFPW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSS5jYWxsKHRoaXMsMTI4'@;
put 'LDExMil9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIz'@;
put 'MSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMu'@;
put 'X2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBWPWsuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIEIoWSxYLFUpe1Yud3JpdGVJbnQzMkJFKFksVSksVi53cml0ZUludDMyQkUoWCxVKzQpfXJldHVybiBCKHRo'@;
put 'aXMuX2FoLHRoaXMuX2FsLDApLEIodGhpcy5fYmgsdGhpcy5fYmwsOCksQih0aGlzLl9jaCx0aGlzLl9jbCwxNiksQih0aGlzLl9kaCx0aGlzLl9kbCwyNCksQih0aGlzLl9laCx0aGlzLl9lbCwzMiksQih0aGlzLl9maCx0aGlzLl9mbCw0MCksVn0sTS5leHBvcnRzPWp9LDc4MTY6KE0sTyxS'@;
put 'KT0+e3ZhciB6PVIoNTcxNyksSz1SKDQxODkpLEk9Uig5NTA5KS5CdWZmZXIsaz1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5'@;
put 'MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMs'@;
put 'MjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5'@;
put 'MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcx'@;
put 'ODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywx'@;
put 'Njk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEw'@;
put 'NjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3'@;
put 'NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2'@;
put 'LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0'@;
put 'NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4'@;
put 'LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLEU9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRo'@;
put 'aXMuX3c9RSxLLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBWKHNlLGhlLHVlKXtyZXR1cm4gdWVec2UmKGhlXnVlKX1mdW5jdGlvbiBCKHNlLGhlLHVlKXtyZXR1cm4gc2UmaGV8dWUmKHNlfGhlKX1mdW5jdGlvbiBZKHNlLGhlKXtyZXR1cm4oc2U+Pj4yOHxoZTw8NCleKGhlPj4+Mnxz'@;
put 'ZTw8MzApXihoZT4+Pjd8c2U8PDI1KX1mdW5jdGlvbiBYKHNlLGhlKXtyZXR1cm4oc2U+Pj4xNHxoZTw8MTgpXihzZT4+PjE4fGhlPDwxNCleKGhlPj4+OXxzZTw8MjMpfWZ1bmN0aW9uIFUoc2UsaGUpe3JldHVybihzZT4+PjF8aGU8PDMxKV4oc2U+Pj44fGhlPDwyNClec2U+Pj43fWZ1bmN0'@;
put 'aW9uIHEoc2UsaGUpe3JldHVybihzZT4+PjF8aGU8PDMxKV4oc2U+Pj44fGhlPDwyNCleKHNlPj4+N3xoZTw8MjUpfWZ1bmN0aW9uIGVlKHNlLGhlKXtyZXR1cm4oc2U+Pj4xOXxoZTw8MTMpXihoZT4+PjI5fHNlPDwzKV5zZT4+PjZ9ZnVuY3Rpb24gdGUoc2UsaGUpe3JldHVybihzZT4+PjE5'@;
put 'fGhlPDwxMyleKGhlPj4+Mjl8c2U8PDMpXihzZT4+PjZ8aGU8PDI2KX1mdW5jdGlvbiBvZShzZSxoZSl7cmV0dXJuIHNlPj4+MDxoZT4+PjA/MTowfXooaixLKSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3'@;
put 'Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlz'@;
put 'Ll9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihzZSl7Zm9yKHZhciBoZT10'@;
put 'aGlzLl93LHVlPTB8dGhpcy5fYWgsY2U9MHx0aGlzLl9iaCxHPTB8dGhpcy5fY2gsYj0wfHRoaXMuX2RoLEQ9MHx0aGlzLl9laCxIPTB8dGhpcy5fZmgsTj0wfHRoaXMuX2doLGc9MHx0aGlzLl9oaCxDPTB8dGhpcy5fYWwsUz0wfHRoaXMuX2JsLHY9MHx0aGlzLl9jbCxwPTB8dGhpcy5fZGws'@;
put 'dz0wfHRoaXMuX2VsLEo9MHx0aGlzLl9mbCxuZT0wfHRoaXMuX2dsLGRlPTB8dGhpcy5faGwsZmU9MDtmZTwzMjtmZSs9MiloZVtmZV09c2UucmVhZEludDMyQkUoNCpmZSksaGVbZmUrMV09c2UucmVhZEludDMyQkUoNCpmZSs0KTtmb3IoO2ZlPDE2MDtmZSs9Mil7dmFyIHhlPWhlW2ZlLTMw'@;
put 'XSxMZT1oZVtmZS0zMCsxXSxGZT1VKHhlLExlKSxPZT1xKExlLHhlKSxqZT1lZSh4ZT1oZVtmZS00XSxMZT1oZVtmZS00KzFdKSxXZT10ZShMZSx4ZSksSmU9aGVbZmUtMzJdLGx0PWhlW2ZlLTMyKzFdLFBlPU9lK2hlW2ZlLTE0KzFdfDAsYmU9RmUraGVbZmUtMTRdK29lKFBlLE9lKXwwO2Jl'@;
put 'PShiZT1iZStqZStvZShQZT1QZStXZXwwLFdlKXwwKStKZStvZShQZT1QZStsdHwwLGx0KXwwLGhlW2ZlXT1iZSxoZVtmZSsxXT1QZX1mb3IodmFyIEFlPTA7QWU8MTYwO0FlKz0yKXtiZT1oZVtBZV0sUGU9aGVbQWUrMV07dmFyIFRlPUIodWUsY2UsRykscWU9QihDLFMsdiksWGU9WSh1ZSxD'@;
put 'KSxVZT1ZKEMsdWUpLGh0PVgoRCx3KSxNZT1YKHcsRCksRGU9a1tBZV0semU9a1tBZSsxXSxpdD1WKEQsSCxOKSx1dD1WKHcsSixuZSksTXQ9ZGUrTWV8MCxIdD1nK2h0K29lKE10LGRlKXwwO0h0PShIdD0oSHQ9SHQraXQrb2UoTXQ9TXQrdXR8MCx1dCl8MCkrRGUrb2UoTXQ9TXQremV8MCx6'@;
put 'ZSl8MCkrYmUrb2UoTXQ9TXQrUGV8MCxQZSl8MDt2YXIgUHQ9VWUrcWV8MCxvbj1YZStUZStvZShQdCxVZSl8MDtnPU4sZGU9bmUsTj1ILG5lPUosSD1ELEo9dyxEPWIrSHQrb2Uodz1wK010fDAscCl8MCxiPUcscD12LEc9Y2Usdj1TLGNlPXVlLFM9Qyx1ZT1IdCtvbitvZShDPU10K1B0fDAs'@;
put 'TXQpfDB9dGhpcy5fYWw9dGhpcy5fYWwrQ3wwLHRoaXMuX2JsPXRoaXMuX2JsK1N8MCx0aGlzLl9jbD10aGlzLl9jbCt2fDAsdGhpcy5fZGw9dGhpcy5fZGwrcHwwLHRoaXMuX2VsPXRoaXMuX2VsK3d8MCx0aGlzLl9mbD10aGlzLl9mbCtKfDAsdGhpcy5fZ2w9dGhpcy5fZ2wrbmV8MCx0aGlz'@;
put 'Ll9obD10aGlzLl9obCtkZXwwLHRoaXMuX2FoPXRoaXMuX2FoK3VlK29lKHRoaXMuX2FsLEMpfDAsdGhpcy5fYmg9dGhpcy5fYmgrY2Urb2UodGhpcy5fYmwsUyl8MCx0aGlzLl9jaD10aGlzLl9jaCtHK29lKHRoaXMuX2NsLHYpfDAsdGhpcy5fZGg9dGhpcy5fZGgrYitvZSh0aGlzLl9kbCxw'@;
put 'KXwwLHRoaXMuX2VoPXRoaXMuX2VoK0Qrb2UodGhpcy5fZWwsdyl8MCx0aGlzLl9maD10aGlzLl9maCtIK29lKHRoaXMuX2ZsLEopfDAsdGhpcy5fZ2g9dGhpcy5fZ2grTitvZSh0aGlzLl9nbCxuZSl8MCx0aGlzLl9oaD10aGlzLl9oaCtnK29lKHRoaXMuX2hsLGRlKXwwfSxqLnByb3RvdHlw'@;
put 'ZS5faGFzaD1mdW5jdGlvbigpe3ZhciBzZT1JLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBoZSh1ZSxjZSxHKXtzZS53cml0ZUludDMyQkUodWUsRyksc2Uud3JpdGVJbnQzMkJFKGNlLEcrNCl9cmV0dXJuIGhlKHRoaXMuX2FoLHRoaXMuX2FsLDApLGhlKHRoaXMuX2JoLHRoaXMuX2JsLDgp'@;
put 'LGhlKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxoZSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksaGUodGhpcy5fZWgsdGhpcy5fZWwsMzIpLGhlKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxoZSh0aGlzLl9naCx0aGlzLl9nbCw0OCksaGUodGhpcy5faGgsdGhpcy5faGwsNTYpLHNlfSxNLmV4cG9ydHM9'@;
put 'an0sMjgzMDooTSxPLFIpPT57TS5leHBvcnRzPUs7dmFyIHo9Uig3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gSygpe3ouY2FsbCh0aGlzKX1SKDU3MTcpKEsseiksSy5SZWFkYWJsZT1SKDk0ODEpLEsuV3JpdGFibGU9Uig0MjI5KSxLLkR1cGxleD1SKDY3NTMpLEsuVHJhbnNmb3JtPVIo'@;
put 'NDYwNSksSy5QYXNzVGhyb3VnaD1SKDI3MjUpLEsuZmluaXNoZWQ9Uig4NjEwKSxLLnBpcGVsaW5lPVIoOTk0NiksSy5TdHJlYW09SyxLLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEksayl7dmFyIEU9dGhpcztmdW5jdGlvbiBqKGVlKXtJLndyaXRhYmxlJiYhMT09PUkud3JpdGUoZWUpJiZF'@;
put 'LnBhdXNlJiZFLnBhdXNlKCl9ZnVuY3Rpb24gVigpe0UucmVhZGFibGUmJkUucmVzdW1lJiZFLnJlc3VtZSgpfUUub24oImRhdGEiLGopLEkub24oImRyYWluIixWKSxJLl9pc1N0ZGlvfHxrJiYhMT09PWsuZW5kfHwoRS5vbigiZW5kIixZKSxFLm9uKCJjbG9zZSIsWCkpO3ZhciBCPSExO2Z1'@;
put 'bmN0aW9uIFkoKXtCfHwoQj0hMCxJLmVuZCgpKX1mdW5jdGlvbiBYKCl7Qnx8KEI9ITAsImZ1bmN0aW9uIj09dHlwZW9mIEkuZGVzdHJveSYmSS5kZXN0cm95KCkpfWZ1bmN0aW9uIFUoZWUpe2lmKHEoKSwwPT09ei5saXN0ZW5lckNvdW50KHRoaXMsImVycm9yIikpdGhyb3cgZWV9ZnVuY3Rp'@;
put 'b24gcSgpe0UucmVtb3ZlTGlzdGVuZXIoImRhdGEiLGopLEkucmVtb3ZlTGlzdGVuZXIoImRyYWluIixWKSxFLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFkpLEUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixYKSxFLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsVSksSS5yZW1vdmVMaXN0ZW5lcigiZXJy'@;
put 'b3IiLFUpLEUucmVtb3ZlTGlzdGVuZXIoImVuZCIscSksRS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHEpLEkucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixxKX1yZXR1cm4gRS5vbigiZXJyb3IiLFUpLEkub24oImVycm9yIixVKSxFLm9uKCJlbmQiLHEpLEUub24oImNsb3NlIixxKSxJLm9uKCJj'@;
put 'bG9zZSIscSksSS5lbWl0KCJwaXBlIixFKSxJfX0sMjU1MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9ei5pc0VuY29kaW5nfHxmdW5jdGlvbihxKXtzd2l0Y2goKHE9IiIrcSkmJnEudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2Fz'@;
put 'ZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBJKHEpe3ZhciBlZTtzd2l0Y2go'@;
put 'dGhpcy5lbmNvZGluZz1mdW5jdGlvbih0ZSl7dmFyIG9lPWZ1bmN0aW9uKHNlKXtpZighc2UpcmV0dXJuInV0ZjgiO2Zvcih2YXIgaGU7Oylzd2l0Y2goc2Upe2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpj'@;
put 'YXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBzZTtkZWZhdWx0OmlmKGhlKXJldHVybjtzZT0oIiIrc2UpLnRvTG93ZXJDYXNlKCksaGU9'@;
put 'ITB9fSh0ZSk7aWYoInN0cmluZyIhPXR5cGVvZiBvZSYmKHouaXNFbmNvZGluZz09PUt8fCFLKHRlKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3RlKTtyZXR1cm4gb2V8fHRlfShxKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1qLHRoaXMu'@;
put 'ZW5kPVYsZWU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9RSxlZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Qix0aGlzLmVuZD1ZLGVlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1YLHZvaWQodGhpcy5lbmQ9VSl9dGhpcy5sYXN0TmVlZD0wLHRo'@;
put 'aXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj16LmFsbG9jVW5zYWZlKGVlKX1mdW5jdGlvbiBrKHEpe3JldHVybiBxPD0xMjc/MDpxPj41PT02PzI6cT4+ND09MTQ/MzpxPj4zPT0zMD80OnE+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gRShxKXt2YXIgZWU9dGhpcy5sYXN0VG90YWwtdGhpcy5s'@;
put 'YXN0TmVlZCx0ZT1mdW5jdGlvbihvZSxzZSxoZSl7aWYoMTI4IT0oMTkyJnNlWzBdKSlyZXR1cm4gb2UubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihvZS5sYXN0TmVlZD4xJiZzZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnNlWzFdKSlyZXR1cm4gb2UubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihv'@;
put 'ZS5sYXN0TmVlZD4yJiZzZS5sZW5ndGg+MiYmMTI4IT0oMTkyJnNlWzJdKSlyZXR1cm4gb2UubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMscSk7cmV0dXJuIHZvaWQgMCE9PXRlP3RlOnRoaXMubGFzdE5lZWQ8PXEubGVuZ3RoPyhxLmNvcHkodGhpcy5sYXN0Q2hhcixlZSwwLHRoaXMubGFz'@;
put 'dE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KHEuY29weSh0aGlzLmxhc3RDaGFyLGVlLDAscS5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09cS5sZW5ndGgpKX1mdW5jdGlvbiBqKHEsZWUpe2lmKChxLmxlbmd0aC1lZSkl'@;
put 'Mj09MCl7dmFyIHRlPXEudG9TdHJpbmcoInV0ZjE2bGUiLGVlKTtpZih0ZSl7dmFyIG9lPXRlLmNoYXJDb2RlQXQodGUubGVuZ3RoLTEpO2lmKG9lPj01NTI5NiYmb2U8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXFbcS5s'@;
put 'ZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1xW3EubGVuZ3RoLTFdLHRlLnNsaWNlKDAsLTEpfXJldHVybiB0ZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTFdLHEudG9TdHJpbmcoInV0ZjE2bGUiLGVlLHEubGVu'@;
put 'Z3RoLTEpfWZ1bmN0aW9uIFYocSl7dmFyIGVlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZWUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTplZX1mdW5jdGlvbiBCKHEsZWUp'@;
put 'e3ZhciB0ZT0ocS5sZW5ndGgtZWUpJTM7cmV0dXJuIDA9PT10ZT9xLnRvU3RyaW5nKCJiYXNlNjQiLGVlKToodGhpcy5sYXN0TmVlZD0zLXRlLHRoaXMubGFzdFRvdGFsPTMsMT09PXRlP3RoaXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3Ro'@;
put 'LTJdLHRoaXMubGFzdENoYXJbMV09cVtxLmxlbmd0aC0xXSkscS50b1N0cmluZygiYmFzZTY0IixlZSxxLmxlbmd0aC10ZSkpfWZ1bmN0aW9uIFkocSl7dmFyIGVlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZWUrdGhpcy5sYXN0Q2hhci50b1N0'@;
put 'cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6ZWV9ZnVuY3Rpb24gWChxKXtyZXR1cm4gcS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBVKHEpe3JldHVybiBxJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIifU8uU3RyaW5nRGVjb2Rlcj1JLEkucHJvdG90eXBlLndy'@;
put 'aXRlPWZ1bmN0aW9uKHEpe2lmKDA9PT1xLmxlbmd0aClyZXR1cm4iIjt2YXIgZWUsdGU7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KGVlPXRoaXMuZmlsbExhc3QocSkpKXJldHVybiIiO3RlPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgdGU9MDtyZXR1cm4gdGU8'@;
put 'cS5sZW5ndGg/ZWU/ZWUrdGhpcy50ZXh0KHEsdGUpOnRoaXMudGV4dChxLHRlKTplZXx8IiJ9LEkucHJvdG90eXBlLmVuZD1mdW5jdGlvbihxKXt2YXIgZWU9cSYmcS5sZW5ndGg/dGhpcy53cml0ZShxKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9lZSsiXHVmZmZkIjplZX0sSS5wcm90b3R5'@;
put 'cGUudGV4dD1mdW5jdGlvbihxLGVlKXt2YXIgdGU9ZnVuY3Rpb24oc2UsaGUsdWUpe3ZhciBjZT1oZS5sZW5ndGgtMTtpZihjZTx1ZSlyZXR1cm4gMDt2YXIgRz1rKGhlW2NlXSk7cmV0dXJuIEc+PTA/KEc+MCYmKHNlLmxhc3ROZWVkPUctMSksRyk6LS1jZTx1ZXx8LTI9PT1HPzA6KEc9ayho'@;
put 'ZVtjZV0pKT49MD8oRz4wJiYoc2UubGFzdE5lZWQ9Ry0yKSxHKTotLWNlPHVlfHwtMj09PUc/MDooRz1rKGhlW2NlXSkpPj0wPyhHPjAmJigyPT09Rz9HPTA6c2UubGFzdE5lZWQ9Ry0zKSxHKTowfSh0aGlzLHEsZWUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBxLnRvU3RyaW5nKCJ1dGY4'@;
put 'IixlZSk7dGhpcy5sYXN0VG90YWw9dGU7dmFyIG9lPXEubGVuZ3RoLSh0ZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gcS5jb3B5KHRoaXMubGFzdENoYXIsMCxvZSkscS50b1N0cmluZygidXRmOCIsZWUsb2UpfSxJLnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihxKXtpZih0aGlzLmxhc3RO'@;
put 'ZWVkPD1xLmxlbmd0aClyZXR1cm4gcS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtxLmNvcHkodGhpcy5sYXN0Q2hhcix0'@;
put 'aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAscS5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPXEubGVuZ3RofX0sNzg1NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9UigzNjg5KSxLPVIoNDU2NCksST1SKDc1Miksaz1SKDIyMjQpLnksRT1SKDU3NjEpLm0saj1SKDg5NzEpLlUs'@;
put 'Vj1SKDc2NTIpLEI9Uig0NTYpLHtmcm9tQ2FsbGJhY2s6WX09Uig3MDQxKSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpYfT1SKDEyNjkpLFU9L15bXHgyMVx4MjMtXHgyQlx4MkQtXHgzQVx4M0MtXHg1Qlx4NUQtXHg3RV0rJC8scT0vW1x4MDAtXHgxRl0vLGVlPVsiXG4iLCJcciIsIlwwIl0s'@;
put 'dGU9L1tceDIwLVx4M0FceDNDLVx4N0VdKy8sb2U9L1tceDA5XHgyMC1ceDJGXHgzQi1ceDQwXHg1Qi1ceDYwXHg3Qi1ceDdFXS8sc2U9e2phbjowLGZlYjoxLG1hcjoyLGFwcjozLG1heTo0LGp1bjo1LGp1bDo2LGF1Zzo3LHNlcDo4LG9jdDo5LG5vdjoxMCxkZWM6MTF9LGhlPTIxNDc0ODM2'@;
put 'NDdlMyx1ZT0nSW52YWxpZCBzYW1lU2l0ZUNvbnRleHQgb3B0aW9uIGZvciBnZXRDb29raWVzKCk7IGV4cGVjdGVkIG9uZSBvZiAic3RyaWN0IiwgImxheCIsIG9yICJub25lIic7ZnVuY3Rpb24gY2UoSmUpe1YudmFsaWRhdGUoVi5pc05vbkVtcHR5U3RyaW5nKEplKSxKZSk7Y29uc3QgbHQ9'@;
put 'U3RyaW5nKEplKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PWx0fHwibGF4Ij09PWx0fHwic3RyaWN0Ij09PWx0P2x0Om51bGx9Y29uc3QgRz1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNpbGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FCTEVEOiJ1bnNhZmUtZGlzYWJsZWQifSksYj0v'@;
put 'KD86Xig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9JCl8KD86Xig/Oig/OlthLWZcZF17MSw0fTopezd9KD86W2EtZlxkXXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezZ9KD86KD86MjVb'@;
put 'MC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoy'@;
put 'NVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDJ9fDopfCg/OlthLWZcZF17MSw0fTopezR9KD86KD86OlthLWZcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJb'@;
put 'MC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDN9fDopfCg/OlthLWZcZF17MSw0fTopezN9KD86KD86OlthLWZcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFc'@;
put 'ZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezJ9KD86KD86OlthLWZcZF17MSw0fSl7MCwzfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTld'@;
put 'XGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDV9fDopfCg/OlthLWZcZF17MSw0fTopezF9KD86KD86OlthLWZcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXsz'@;
put 'fXwoPzo6W2EtZlxkXXsxLDR9KXsxLDZ9fDopfCg/OjooPzooPzo6W2EtZlxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsN318'@;
put 'OikpKSQpLyxEPSJcblxcWz8oPzpcbig/OlthLWZBLUZcXGRdezEsNH06KXs3fSg/OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxc'@;
put 'ZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fDpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8'@;
put 'XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsMn18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwx'@;
put 'XFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDN9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezN9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVb'@;
put 'MC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8'@;
put 'XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNX18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxcZHwx'@;
put 'XFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDZ9fDopfFxuKD86Oig/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRc'@;
put 'XGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsN318OikpXG4pKD86JVswLTlhLXpBLVpdezEsfSk/XFxdP1xuIi5yZXBsYWNlKC9ccypcL1wvLiokL2dtLCIiKS5yZXBsYWNl'@;
put 'KC9cbi9nLCIiKS50cmltKCksSD1uZXcgUmVnRXhwKGBeJHtEfSRgKTtmdW5jdGlvbiBOKEplLGx0LFBlLGJlKXtsZXQgQWU9MDtmb3IoO0FlPEplLmxlbmd0aDspe2NvbnN0IFRlPUplLmNoYXJDb2RlQXQoQWUpO2lmKFRlPD00N3x8VGU+PTU4KWJyZWFrO0FlKyt9cmV0dXJuIEFlPGx0fHxB'@;
put 'ZT5QZT9udWxsOmJlfHxBZT09SmUubGVuZ3RoP3BhcnNlSW50KEplLnN1YnN0cigwLEFlKSwxMCk6bnVsbH1mdW5jdGlvbiBnKEplKXtjb25zdCBsdD1KZS5zcGxpdCgiOiIpLFBlPVswLDAsMF07aWYoMyE9PWx0Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IGJlPTA7YmU8MztiZSsrKXtj'@;
put 'b25zdCBUZT1OKGx0W2JlXSwxLDIsMj09YmUpO2lmKG51bGw9PT1UZSlyZXR1cm4gbnVsbDtQZVtiZV09VGV9cmV0dXJuIFBlfWZ1bmN0aW9uIEMoSmUpe0plPVN0cmluZyhKZSkuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKTtjb25zdCBsdD1zZVtKZV07cmV0dXJuIGx0Pj0wP2x0Om51bGx9'@;
put 'ZnVuY3Rpb24gUyhKZSl7aWYoIUplKXJldHVybjtjb25zdCBsdD1KZS5zcGxpdChvZSk7aWYoIWx0KXJldHVybjtsZXQgUGU9bnVsbCxiZT1udWxsLEFlPW51bGwsVGU9bnVsbCxxZT1udWxsLFhlPW51bGw7Zm9yKGxldCBVZT0wO1VlPGx0Lmxlbmd0aDtVZSsrKXtjb25zdCBodD1sdFtVZV0u'@;
put 'dHJpbSgpO2lmKCFodC5sZW5ndGgpY29udGludWU7bGV0IE1lO251bGw9PT1BZSYmKE1lPWcoaHQpLE1lKT8oUGU9TWVbMF0sYmU9TWVbMV0sQWU9TWVbMl0pOm51bGwhPT1UZXx8KE1lPU4oaHQsMSwyLCEwKSxudWxsPT09TWUpP251bGwhPT1xZXx8KE1lPUMoaHQpLG51bGw9PT1NZSk/bnVs'@;
put 'bD09PVhlJiYoTWU9TihodCwyLDQsITApLG51bGwhPT1NZSYmKFhlPU1lLFhlPj03MCYmWGU8PTk5P1hlKz0xOTAwOlhlPj0wJiZYZTw9NjkmJihYZSs9MmUzKSkpOnFlPU1lOlRlPU1lfXJldHVybiBudWxsPT09VGV8fG51bGw9PT1xZXx8bnVsbD09PVhlfHxudWxsPT09QWV8fFRlPDF8fFRl'@;
put 'PjMxfHxYZTwxNjAxfHxQZT4yM3x8YmU+NTl8fEFlPjU5P3ZvaWQgMDpuZXcgRGF0ZShEYXRlLlVUQyhYZSxxZSxUZSxQZSxiZSxBZSkpfWZ1bmN0aW9uIHYoSmUpe3JldHVybiBWLnZhbGlkYXRlKFYuaXNEYXRlKEplKSxKZSksSmUudG9VVENTdHJpbmcoKX1mdW5jdGlvbiBwKEplKXtyZXR1'@;
put 'cm4gbnVsbD09SmU/bnVsbDooSmU9SmUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpLEgudGVzdChKZSkmJihKZT1KZS5yZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSx6JiYvW15cdTAwMDEtXHUwMDdmXS8udGVzdChKZSkmJihKZT16LnRvQVNDSUkoSmUpKSxKZS50b0xvd2VyQ2Fz'@;
put 'ZSgpKX1mdW5jdGlvbiB3KEplLGx0LFBlKXtpZihudWxsPT1KZXx8bnVsbD09bHQpcmV0dXJuIG51bGw7aWYoITEhPT1QZSYmKEplPXAoSmUpLGx0PXAobHQpKSxKZT09bHQpcmV0dXJuITA7Y29uc3QgYmU9SmUubGFzdEluZGV4T2YobHQpO3JldHVybiEoYmU8PTB8fEplLmxlbmd0aCE9PWx0'@;
put 'Lmxlbmd0aCtiZXx8Ii4iIT09SmUuc3Vic3RyKGJlLTEsMSl8fGIudGVzdChKZSkpfWZ1bmN0aW9uIEooSmUpe2lmKCFKZXx8Ii8iIT09SmUuc3Vic3RyKDAsMSkpcmV0dXJuIi8iO2lmKCIvIj09PUplKXJldHVybiBKZTtjb25zdCBsdD1KZS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiAwPT09'@;
put 'bHQ/Ii8iOkplLnNsaWNlKDAsbHQpfWZ1bmN0aW9uIGRlKEplLGx0KXtpZihsdCYmIm9iamVjdCI9PXR5cGVvZiBsdHx8KGx0PXt9KSxWLmlzRW1wdHlTdHJpbmcoSmUpfHwhVi5pc1N0cmluZyhKZSkpcmV0dXJuIG51bGw7Y29uc3QgUGU9KEplPUplLnRyaW0oKSkuaW5kZXhPZigiOyIpLGJl'@;
put 'PWZ1bmN0aW9uIG5lKEplLGx0KXtKZT1mdW5jdGlvbihxZSl7aWYoVi5pc0VtcHR5U3RyaW5nKHFlKSlyZXR1cm4gcWU7Zm9yKGxldCBYZT0wO1hlPGVlLmxlbmd0aDtYZSsrKXtjb25zdCBVZT1xZS5pbmRleE9mKGVlW1hlXSk7LTEhPT1VZSYmKHFlPXFlLnN1YnN0cigwLFVlKSl9cmV0dXJu'@;
put 'IHFlfShKZSksVi52YWxpZGF0ZShWLmlzU3RyaW5nKEplKSxKZSk7bGV0IFBlLGJlLEFlPUplLmluZGV4T2YoIj0iKTtpZihsdCkwPT09QWUmJihBZT0oSmU9SmUuc3Vic3RyKDEpKS5pbmRleE9mKCI9IikpO2Vsc2UgaWYoQWU8PTApcmV0dXJuO2lmKEFlPD0wPyhQZT0iIixiZT1KZS50cmlt'@;
put 'KCkpOihQZT1KZS5zdWJzdHIoMCxBZSkudHJpbSgpLGJlPUplLnN1YnN0cihBZSsxKS50cmltKCkpLHEudGVzdChQZSl8fHEudGVzdChiZSkpcmV0dXJuO2NvbnN0IFRlPW5ldyBqZTtyZXR1cm4gVGUua2V5PVBlLFRlLnZhbHVlPWJlLFRlfSgtMT09PVBlP0plOkplLnN1YnN0cigwLFBlKSwh'@;
put 'IWx0Lmxvb3NlKTtpZighYmUpcmV0dXJuO2lmKC0xPT09UGUpcmV0dXJuIGJlO2NvbnN0IEFlPUplLnNsaWNlKFBlKzEpLnRyaW0oKTtpZigwPT09QWUubGVuZ3RoKXJldHVybiBiZTtjb25zdCBUZT1BZS5zcGxpdCgiOyIpO2Zvcig7VGUubGVuZ3RoOyl7Y29uc3QgcWU9VGUuc2hpZnQoKS50'@;
put 'cmltKCk7aWYoMD09PXFlLmxlbmd0aCljb250aW51ZTtjb25zdCBYZT1xZS5pbmRleE9mKCI9Iik7bGV0IFVlLGh0O3N3aXRjaCgtMT09PVhlPyhVZT1xZSxodD1udWxsKTooVWU9cWUuc3Vic3RyKDAsWGUpLGh0PXFlLnN1YnN0cihYZSsxKSksVWU9VWUudHJpbSgpLnRvTG93ZXJDYXNlKCks'@;
put 'aHQmJihodD1odC50cmltKCkpLFVlKXtjYXNlImV4cGlyZXMiOmlmKGh0KXtjb25zdCBNZT1TKGh0KTtNZSYmKGJlLmV4cGlyZXM9TWUpfWJyZWFrO2Nhc2UibWF4LWFnZSI6aWYoaHQmJi9eLT9bMC05XSskLy50ZXN0KGh0KSl7Y29uc3QgTWU9cGFyc2VJbnQoaHQsMTApO2JlLnNldE1heEFn'@;
put 'ZShNZSl9YnJlYWs7Y2FzZSJkb21haW4iOmlmKGh0KXtjb25zdCBNZT1odC50cmltKCkucmVwbGFjZSgvXlwuLywiIik7TWUmJihiZS5kb21haW49TWUudG9Mb3dlckNhc2UoKSl9YnJlYWs7Y2FzZSJwYXRoIjpiZS5wYXRoPWh0JiYiLyI9PT1odFswXT9odDpudWxsO2JyZWFrO2Nhc2Uic2Vj'@;
put 'dXJlIjpiZS5zZWN1cmU9ITA7YnJlYWs7Y2FzZSJodHRwb25seSI6YmUuaHR0cE9ubHk9ITA7YnJlYWs7Y2FzZSJzYW1lc2l0ZSI6c3dpdGNoKGh0P2h0LnRvTG93ZXJDYXNlKCk6IiIpe2Nhc2Uic3RyaWN0IjpiZS5zYW1lU2l0ZT0ic3RyaWN0IjticmVhaztjYXNlImxheCI6YmUuc2FtZVNp'@;
put 'dGU9ImxheCI7YnJlYWs7Y2FzZSJub25lIjpiZS5zYW1lU2l0ZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDpiZS5zYW1lU2l0ZT12b2lkIDB9YnJlYWs7ZGVmYXVsdDpiZS5leHRlbnNpb25zPWJlLmV4dGVuc2lvbnN8fFtdLGJlLmV4dGVuc2lvbnMucHVzaChxZSl9fXJldHVybiBiZX1mdW5jdGlv'@;
put 'biBmZShKZSl7bGV0IGx0O3RyeXtsdD1KU09OLnBhcnNlKEplKX1jYXRjaChQZSl7cmV0dXJuIFBlfXJldHVybiBsdH1mdW5jdGlvbiB4ZShKZSl7aWYoIUplfHxWLmlzRW1wdHlTdHJpbmcoSmUpKXJldHVybiBudWxsO2xldCBsdDtpZigic3RyaW5nIj09dHlwZW9mIEplKXtpZihsdD1mZShK'@;
put 'ZSksbHQgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbnVsbH1lbHNlIGx0PUplO2NvbnN0IFBlPW5ldyBqZTtmb3IobGV0IGJlPTA7YmU8amUuc2VyaWFsaXphYmxlUHJvcGVydGllcy5sZW5ndGg7YmUrKyl7Y29uc3QgQWU9amUuc2VyaWFsaXphYmxlUHJvcGVydGllc1tiZV07dm9pZCAwIT09'@;
put 'bHRbQWVdJiZsdFtBZV0hPT1PZVtBZV0mJihQZVtBZV09ImV4cGlyZXMiPT09QWV8fCJjcmVhdGlvbiI9PT1BZXx8Imxhc3RBY2Nlc3NlZCI9PT1BZT9udWxsPT09bHRbQWVdP251bGw6IkluZmluaXR5Ij09bHRbQWVdPyJJbmZpbml0eSI6bmV3IERhdGUobHRbQWVdKTpsdFtBZV0pfXJldHVy'@;
put 'biBQZX1mdW5jdGlvbiBMZShKZSxsdCl7Vi52YWxpZGF0ZShWLmlzT2JqZWN0KEplKSxKZSksVi52YWxpZGF0ZShWLmlzT2JqZWN0KGx0KSxsdCk7bGV0IFBlPTA7cmV0dXJuIFBlPShsdC5wYXRoP2x0LnBhdGgubGVuZ3RoOjApLShKZS5wYXRoP0plLnBhdGgubGVuZ3RoOjApLDAhPT1QZXx8'@;
put 'KFBlPShKZS5jcmVhdGlvbj9KZS5jcmVhdGlvbi5nZXRUaW1lKCk6aGUpLShsdC5jcmVhdGlvbj9sdC5jcmVhdGlvbi5nZXRUaW1lKCk6aGUpLDAhPT1QZXx8KFBlPUplLmNyZWF0aW9uSW5kZXgtbHQuY3JlYXRpb25JbmRleCkpLFBlfWZ1bmN0aW9uIEZlKEplKXtpZihKZSBpbnN0YW5jZW9m'@;
put 'IE9iamVjdClyZXR1cm4gSmU7dHJ5e0plPWRlY29kZVVSSShKZSl9Y2F0Y2h7fXJldHVybiBLKEplKX1jb25zdCBPZT17a2V5OiIiLHZhbHVlOiIiLGV4cGlyZXM6IkluZmluaXR5IixtYXhBZ2U6bnVsbCxkb21haW46bnVsbCxwYXRoOm51bGwsc2VjdXJlOiExLGh0dHBPbmx5OiExLGV4dGVu'@;
put 'c2lvbnM6bnVsbCxob3N0T25seTpudWxsLHBhdGhJc0RlZmF1bHQ6bnVsbCxjcmVhdGlvbjpudWxsLGxhc3RBY2Nlc3NlZDpudWxsLHNhbWVTaXRlOnZvaWQgMH07Y2xhc3MgamV7Y29uc3RydWN0b3IobHQ9e30pe2NvbnN0IFBlPVgoKTtQZSYmKHRoaXNbUGVdPXRoaXMuaW5zcGVjdCksT2Jq'@;
put 'ZWN0LmFzc2lnbih0aGlzLE9lLGx0KSx0aGlzLmNyZWF0aW9uPXRoaXMuY3JlYXRpb258fG5ldyBEYXRlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjcmVhdGlvbkluZGV4Iix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6KytqZS5jb29raWVz'@;
put 'Q3JlYXRlZH0pfWluc3BlY3QoKXtjb25zdCBsdD1EYXRlLm5vdygpLFBlPW51bGwhPXRoaXMuaG9zdE9ubHk/dGhpcy5ob3N0T25seToiPyIsYmU9dGhpcy5jcmVhdGlvbj9sdC10aGlzLmNyZWF0aW9uLmdldFRpbWUoKSsibXMiOiI/IixBZT10aGlzLmxhc3RBY2Nlc3NlZD9sdC10aGlzLmxh'@;
put 'c3RBY2Nlc3NlZC5nZXRUaW1lKCkrIm1zIjoiPyI7cmV0dXJuYENvb2tpZT0iJHt0aGlzLnRvU3RyaW5nKCl9OyBob3N0T25seT0ke1BlfTsgYUFnZT0ke0FlfTsgY0FnZT0ke2JlfSJgfXRvSlNPTigpe2NvbnN0IGx0PXt9O2Zvcihjb25zdCBQZSBvZiBqZS5zZXJpYWxpemFibGVQcm9wZXJ0'@;
put 'aWVzKXRoaXNbUGVdIT09T2VbUGVdJiYoImV4cGlyZXMiPT09UGV8fCJjcmVhdGlvbiI9PT1QZXx8Imxhc3RBY2Nlc3NlZCI9PT1QZT9sdFtQZV09bnVsbD09PXRoaXNbUGVdP251bGw6IkluZmluaXR5Ij09dGhpc1tQZV0/IkluZmluaXR5Ijp0aGlzW1BlXS50b0lTT1N0cmluZygpOiJtYXhB'@;
put 'Z2UiPT09UGU/bnVsbCE9PXRoaXNbUGVdJiYobHRbUGVdPXRoaXNbUGVdPT0xLzB8fHRoaXNbUGVdPT0tMS8wP3RoaXNbUGVdLnRvU3RyaW5nKCk6dGhpc1tQZV0pOnRoaXNbUGVdIT09T2VbUGVdJiYobHRbUGVdPXRoaXNbUGVdKSk7cmV0dXJuIGx0fWNsb25lKCl7cmV0dXJuIHhlKHRoaXMu'@;
put 'dG9KU09OKCkpfXZhbGlkYXRlKCl7aWYoIVUudGVzdCh0aGlzLnZhbHVlKXx8ISh0aGlzLmV4cGlyZXM9PTEvMHx8dGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZXx8Uyh0aGlzLmV4cGlyZXMpKXx8bnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlPD0wfHxudWxsIT10aGlzLnBhdGgm'@;
put 'JiF0ZS50ZXN0KHRoaXMucGF0aCkpcmV0dXJuITE7Y29uc3QgbHQ9dGhpcy5jZG9tYWluKCk7cmV0dXJuIShsdCYmKGx0Lm1hdGNoKC9cLiQvKXx8bnVsbD09SS5nZXRQdWJsaWNTdWZmaXgobHQpKSl9c2V0RXhwaXJlcyhsdCl7dGhpcy5leHBpcmVzPWx0IGluc3RhbmNlb2YgRGF0ZT9sdDpT'@;
put 'KGx0KXx8IkluZmluaXR5In1zZXRNYXhBZ2UobHQpe3RoaXMubWF4QWdlPWx0PT09MS8wfHxsdD09PS0xLzA/bHQudG9TdHJpbmcoKTpsdH1jb29raWVTdHJpbmcoKXtsZXQgbHQ9dGhpcy52YWx1ZTtyZXR1cm4gbnVsbD09bHQmJihsdD0iIiksIiI9PT10aGlzLmtleT9sdDpgJHt0aGlzLmtl'@;
put 'eX09JHtsdH1gfXRvU3RyaW5nKCl7bGV0IGx0PXRoaXMuY29va2llU3RyaW5nKCk7aWYodGhpcy5leHBpcmVzIT0xLzAmJih0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlP2x0Kz1gOyBFeHBpcmVzPSR7dih0aGlzLmV4cGlyZXMpfWA6bHQrPWA7IEV4cGlyZXM9JHt0aGlzLmV4cGlyZXN9'@;
put 'YCksbnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlIT0xLzAmJihsdCs9YDsgTWF4LUFnZT0ke3RoaXMubWF4QWdlfWApLHRoaXMuZG9tYWluJiYhdGhpcy5ob3N0T25seSYmKGx0Kz1gOyBEb21haW49JHt0aGlzLmRvbWFpbn1gKSx0aGlzLnBhdGgmJihsdCs9YDsgUGF0aD0ke3RoaXMu'@;
put 'cGF0aH1gKSx0aGlzLnNlY3VyZSYmKGx0Kz0iOyBTZWN1cmUiKSx0aGlzLmh0dHBPbmx5JiYobHQrPSI7IEh0dHBPbmx5IiksdGhpcy5zYW1lU2l0ZSYmIm5vbmUiIT09dGhpcy5zYW1lU2l0ZSl7Y29uc3QgUGU9amUuc2FtZVNpdGVDYW5vbmljYWxbdGhpcy5zYW1lU2l0ZS50b0xvd2VyQ2Fz'@;
put 'ZSgpXTtsdCs9YDsgU2FtZVNpdGU9JHtQZXx8dGhpcy5zYW1lU2l0ZX1gfXJldHVybiB0aGlzLmV4dGVuc2lvbnMmJnRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKFBlPT57bHQrPWA7ICR7UGV9YH0pLGx0fVRUTChsdCl7aWYobnVsbCE9dGhpcy5tYXhBZ2UpcmV0dXJuIHRoaXMubWF4QWdlPD0w'@;
put 'PzA6MWUzKnRoaXMubWF4QWdlO2xldCBQZT10aGlzLmV4cGlyZXM7cmV0dXJuIFBlIT0xLzA/KFBlIGluc3RhbmNlb2YgRGF0ZXx8KFBlPVMoUGUpfHwxLzApLFBlPT0xLzA/MS8wOlBlLmdldFRpbWUoKS0obHR8fERhdGUubm93KCkpKToxLzB9ZXhwaXJ5VGltZShsdCl7aWYobnVsbCE9dGhp'@;
put 'cy5tYXhBZ2Upe2NvbnN0IGJlPXRoaXMubWF4QWdlPD0wPy0xLzA6MWUzKnRoaXMubWF4QWdlO3JldHVybihsdHx8dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUpLmdldFRpbWUoKStiZX1yZXR1cm4gdGhpcy5leHBpcmVzPT0xLzA/MS8wOnRoaXMuZXhwaXJlcy5nZXRUaW1lKCl9ZXhwaXJ5RGF0'@;
put 'ZShsdCl7Y29uc3QgUGU9dGhpcy5leHBpcnlUaW1lKGx0KTtyZXR1cm4gUGU9PTEvMD9uZXcgRGF0ZShoZSk6UGU9PS0xLzA/bmV3IERhdGUoMCk6bmV3IERhdGUoUGUpfWlzUGVyc2lzdGVudCgpe3JldHVybiBudWxsIT10aGlzLm1heEFnZXx8dGhpcy5leHBpcmVzIT0xLzB9Y2Fub25pY2Fs'@;
put 'aXplZERvbWFpbigpe3JldHVybiBudWxsPT10aGlzLmRvbWFpbj9udWxsOnAodGhpcy5kb21haW4pfWNkb21haW4oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWxpemVkRG9tYWluKCl9fWZ1bmN0aW9uIFdlKEplKXtpZihudWxsIT1KZSl7Y29uc3QgbHQ9SmUudG9Mb3dlckNhc2UoKTtzd2l0Y2go'@;
put 'bHQpe2Nhc2UgRy5TVFJJQ1Q6Y2FzZSBHLlNJTEVOVDpjYXNlIEcuRElTQUJMRUQ6cmV0dXJuIGx0fX1yZXR1cm4gRy5TSUxFTlR9amUuY29va2llc0NyZWF0ZWQ9MCxqZS5wYXJzZT1kZSxqZS5mcm9tSlNPTj14ZSxqZS5zZXJpYWxpemFibGVQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKE9lKSxq'@;
put 'ZS5zYW1lU2l0ZUxldmVsPXtzdHJpY3Q6MyxsYXg6Mixub25lOjF9LGplLnNhbWVTaXRlQ2Fub25pY2FsPXtzdHJpY3Q6IlN0cmljdCIsbGF4OiJMYXgifTtjbGFzcyBLZXtjb25zdHJ1Y3RvcihsdCxQZT17cmVqZWN0UHVibGljU3VmZml4ZXM6ITB9KXsiYm9vbGVhbiI9PXR5cGVvZiBQZSYm'@;
put 'KFBlPXtyZWplY3RQdWJsaWNTdWZmaXhlczpQZX0pLFYudmFsaWRhdGUoVi5pc09iamVjdChQZSksUGUpLHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXM9UGUucmVqZWN0UHVibGljU3VmZml4ZXMsdGhpcy5lbmFibGVMb29zZU1vZGU9ISFQZS5sb29zZU1vZGUsdGhpcy5hbGxvd1NwZWNpYWxV'@;
put 'c2VEb21haW49ImJvb2xlYW4iIT10eXBlb2YgUGUuYWxsb3dTcGVjaWFsVXNlRG9tYWlufHxQZS5hbGxvd1NwZWNpYWxVc2VEb21haW4sdGhpcy5zdG9yZT1sdHx8bmV3IEUsdGhpcy5wcmVmaXhTZWN1cml0eT1XZShQZS5wcmVmaXhTZWN1cml0eSksdGhpcy5fY2xvbmVTeW5jPVllKCJjbG9u'@;
put 'ZSIpLHRoaXMuX2ltcG9ydENvb2tpZXNTeW5jPVllKCJfaW1wb3J0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llc1N5bmM9WWUoImdldENvb2tpZXMiKSx0aGlzLmdldENvb2tpZVN0cmluZ1N5bmM9WWUoImdldENvb2tpZVN0cmluZyIpLHRoaXMuZ2V0U2V0Q29va2llU3RyaW5nc1N5bmM9WWUo'@;
put 'ImdldFNldENvb2tpZVN0cmluZ3MiKSx0aGlzLnJlbW92ZUFsbENvb2tpZXNTeW5jPVllKCJyZW1vdmVBbGxDb29raWVzIiksdGhpcy5zZXRDb29raWVTeW5jPVllKCJzZXRDb29raWUiKSx0aGlzLnNlcmlhbGl6ZVN5bmM9WWUoInNlcmlhbGl6ZSIpfXNldENvb2tpZShsdCxQZSxiZSxBZSl7'@;
put 'bGV0IFRlO2lmKFYudmFsaWRhdGUoVi5pc05vbkVtcHR5U3RyaW5nKFBlKSxBZSxiZSksVi5pc0Z1bmN0aW9uKFBlKSlyZXR1cm4oQWU9UGUpKG5ldyBFcnJvcigiTm8gVVJMIHdhcyBzcGVjaWZpZWQiKSk7Y29uc3QgcWU9RmUoUGUpO2lmKFYuaXNGdW5jdGlvbihiZSkmJihBZT1iZSxiZT17'@;
put 'fSksVi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oQWUpLEFlKSwhVi5pc05vbkVtcHR5U3RyaW5nKGx0KSYmIVYuaXNPYmplY3QobHQpJiZsdCBpbnN0YW5jZW9mIFN0cmluZyYmMD09bHQubGVuZ3RoKXJldHVybiBBZShudWxsKTtjb25zdCBYZT1wKHFlLmhvc3RuYW1lKSxVZT1iZS5sb29zZXx8'@;
put 'dGhpcy5lbmFibGVMb29zZU1vZGU7bGV0IGh0PW51bGw7aWYoYmUuc2FtZVNpdGVDb250ZXh0JiYoaHQ9Y2UoYmUuc2FtZVNpdGVDb250ZXh0KSwhaHQpKXJldHVybiBBZShuZXcgRXJyb3IodWUpKTtpZigic3RyaW5nIj09dHlwZW9mIGx0fHxsdCBpbnN0YW5jZW9mIFN0cmluZyl7aWYoIShs'@;
put 'dD1qZS5wYXJzZShsdCx7bG9vc2U6VWV9KSkpcmV0dXJuIFRlPW5ldyBFcnJvcigiQ29va2llIGZhaWxlZCB0byBwYXJzZSIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpfWVsc2UgaWYoIShsdCBpbnN0YW5jZW9mIGplKSlyZXR1cm4gVGU9bmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0'@;
put 'byBzZXRDb29raWUgbXVzdCBiZSBhIENvb2tpZSBvYmplY3Qgb3Igc3RyaW5nIiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7Y29uc3QgTWU9YmUubm93fHxuZXcgRGF0ZTtpZih0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzJiZsdC5kb21haW4mJm51bGw9PUkuZ2V0UHVibGljU3VmZml4'@;
put 'KGx0LmNkb21haW4oKSx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLGlnbm9yZUVycm9yOmJlLmlnbm9yZUVycm9yfSkmJiFILnRlc3QobHQuZG9tYWluKSlyZXR1cm4gVGU9bmV3IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gYSBwdWJs'@;
put 'aWMgc3VmZml4IiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7aWYobHQuZG9tYWluKXtpZighdyhYZSxsdC5jZG9tYWluKCksITEpKXJldHVybiBUZT1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6JHtsdC5jZG9tYWluKCl9IFJlcXVlc3Q6'@;
put 'JHtYZX1gKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOlRlKTtudWxsPT1sdC5ob3N0T25seSYmKGx0Lmhvc3RPbmx5PSExKX1lbHNlIGx0Lmhvc3RPbmx5PSEwLGx0LmRvbWFpbj1YZTtpZihsdC5wYXRoJiYiLyI9PT1sdC5wYXRoWzBdfHwobHQucGF0aD1KKHFlLnBhdGhuYW1lKSxsdC5wYXRo'@;
put 'SXNEZWZhdWx0PSEwKSwhMT09PWJlLmh0dHAmJmx0Lmh0dHBPbmx5KXJldHVybiBUZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpO2lmKCJub25lIiE9PWx0LnNhbWVTaXRlJiZ2b2lk'@;
put 'IDAhPT1sdC5zYW1lU2l0ZSYmaHQmJiJub25lIj09PWh0KXJldHVybiBUZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7Y29uc3QgRGU9dGhpcy5wcmVmaXhTZWN1cml0'@;
put 'eT09PUcuU0lMRU5UO2lmKHRoaXMucHJlZml4U2VjdXJpdHkhPT1HLkRJU0FCTEVEKXtsZXQgaXQsdXQ9ITE7aWYoVi52YWxpZGF0ZShWLmlzT2JqZWN0KE10PWx0KSxNdCksIU10LmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0iKXx8TXQuc2VjdXJlP2Z1bmN0aW9uKE10KXtyZXR1cm4gVi52'@;
put 'YWxpZGF0ZShWLmlzT2JqZWN0KE10KSksIU10LmtleS5zdGFydHNXaXRoKCJfX0hvc3QtIil8fE10LnNlY3VyZSYmTXQuaG9zdE9ubHkmJm51bGwhPU10LnBhdGgmJiIvIj09PU10LnBhdGh9KGx0KXx8KHV0PSEwLGl0PSJDb29raWUgaGFzIF9fSG9zdCBwcmVmaXggYnV0IGVpdGhlciBTZWN1'@;
put 'cmUgb3IgSG9zdE9ubHkgYXR0cmlidXRlIGlzIG5vdCBzZXQgb3IgUGF0aCBpcyBub3QgJy8nIik6KHV0PSEwLGl0PSJDb29raWUgaGFzIF9fU2VjdXJlIHByZWZpeCBidXQgU2VjdXJlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IiksdXQpcmV0dXJuIEFlKGJlLmlnbm9yZUVycm9yfHxEZT9udWxs'@;
put 'Om5ldyBFcnJvcihpdCkpfXZhciBNdDtjb25zdCB6ZT10aGlzLnN0b3JlO3plLnVwZGF0ZUNvb2tpZXx8KHplLnVwZGF0ZUNvb2tpZT1mdW5jdGlvbihpdCx1dCxNdCl7dGhpcy5wdXRDb29raWUodXQsTXQpfSksemUuZmluZENvb2tpZShsdC5kb21haW4sbHQucGF0aCxsdC5rZXksZnVuY3Rp'@;
put 'b24oaXQsdXQpe2lmKGl0KXJldHVybiBBZShpdCk7Y29uc3QgTXQ9ZnVuY3Rpb24oSHQpe2lmKEh0KXJldHVybiBBZShIdCk7QWUobnVsbCxsdCl9O2lmKHV0KXtpZighMT09PWJlLmh0dHAmJnV0Lmh0dHBPbmx5KXJldHVybiBpdD1uZXcgRXJyb3IoIm9sZCBDb29raWUgaXMgSHR0cE9ubHkg'@;
put 'YW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOml0KTtsdC5jcmVhdGlvbj11dC5jcmVhdGlvbixsdC5jcmVhdGlvbkluZGV4PXV0LmNyZWF0aW9uSW5kZXgsbHQubGFzdEFjY2Vzc2VkPU1lLHplLnVwZGF0ZUNvb2tpZSh1dCxsdCxNdCl9ZWxzZSBs'@;
put 'dC5jcmVhdGlvbj1sdC5sYXN0QWNjZXNzZWQ9TWUsemUucHV0Q29va2llKGx0LE10KX0pfWdldENvb2tpZXMobHQsUGUsYmUpe1YudmFsaWRhdGUoVi5pc05vbkVtcHR5U3RyaW5nKGx0KSxiZSxsdCk7Y29uc3QgQWU9RmUobHQpO1YuaXNGdW5jdGlvbihQZSkmJihiZT1QZSxQZT17fSksVi52'@;
put 'YWxpZGF0ZShWLmlzT2JqZWN0KFBlKSxiZSxQZSksVi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oYmUpLGJlKTtjb25zdCBUZT1wKEFlLmhvc3RuYW1lKSxxZT1BZS5wYXRobmFtZXx8Ii8iO2xldCBYZT1QZS5zZWN1cmU7bnVsbCE9WGV8fCFBZS5wcm90b2NvbHx8Imh0dHBzOiIhPUFlLnByb3Rv'@;
put 'Y29sJiYid3NzOiIhPUFlLnByb3RvY29sfHwoWGU9ITApO2xldCBVZT0wO2lmKFBlLnNhbWVTaXRlQ29udGV4dCl7Y29uc3QgTXQ9Y2UoUGUuc2FtZVNpdGVDb250ZXh0KTtpZihVZT1qZS5zYW1lU2l0ZUxldmVsW010XSwhVWUpcmV0dXJuIGJlKG5ldyBFcnJvcih1ZSkpfWxldCBodD1QZS5o'@;
put 'dHRwO251bGw9PWh0JiYoaHQ9ITApO2NvbnN0IE1lPVBlLm5vd3x8RGF0ZS5ub3coKSxEZT0hMSE9PVBlLmV4cGlyZSx6ZT0hIVBlLmFsbFBhdGhzLGl0PXRoaXMuc3RvcmU7ZnVuY3Rpb24gdXQoTXQpe2lmKE10Lmhvc3RPbmx5KXtpZihNdC5kb21haW4hPVRlKXJldHVybiExfWVsc2UgaWYo'@;
put 'IXcoVGUsTXQuZG9tYWluLCExKSlyZXR1cm4hMTtyZXR1cm4hKCF6ZSYmIWoocWUsTXQucGF0aCl8fE10LnNlY3VyZSYmIVhlfHxNdC5odHRwT25seSYmIWh0fHxVZSYmamUuc2FtZVNpdGVMZXZlbFtNdC5zYW1lU2l0ZXx8Im5vbmUiXT5VZXx8RGUmJk10LmV4cGlyeVRpbWUoKTw9TWUmJihp'@;
put 'dC5yZW1vdmVDb29raWUoTXQuZG9tYWluLE10LnBhdGgsTXQua2V5LCgpPT57fSksMSkpfWl0LmZpbmRDb29raWVzKFRlLHplP251bGw6cWUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4sKE10LEh0KT0+e2lmKE10KXJldHVybiBiZShNdCk7SHQ9SHQuZmlsdGVyKHV0KSwhMSE9PVBlLnNv'@;
put 'cnQmJihIdD1IdC5zb3J0KExlKSk7Y29uc3QgUHQ9bmV3IERhdGU7Zm9yKGNvbnN0IG9uIG9mIEh0KW9uLmxhc3RBY2Nlc3NlZD1QdDtiZShudWxsLEh0KX0pfWdldENvb2tpZVN0cmluZyguLi5sdCl7Y29uc3QgUGU9bHQucG9wKCk7Vi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oUGUpLFBlKSxs'@;
put 'dC5wdXNoKGZ1bmN0aW9uKGJlLEFlKXtiZT9QZShiZSk6UGUobnVsbCxBZS5zb3J0KExlKS5tYXAoVGU9PlRlLmNvb2tpZVN0cmluZygpKS5qb2luKCI7ICIpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLGx0KX1nZXRTZXRDb29raWVTdHJpbmdzKC4uLmx0KXtjb25zdCBQZT1sdC5w'@;
put 'b3AoKTtWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihQZSksUGUpLGx0LnB1c2goZnVuY3Rpb24oYmUsQWUpe2JlP1BlKGJlKTpQZShudWxsLEFlLm1hcChUZT0+VGUudG9TdHJpbmcoKSkpfSksdGhpcy5nZXRDb29raWVzLmFwcGx5KHRoaXMsbHQpfXNlcmlhbGl6ZShsdCl7Vi52YWxpZGF0ZShW'@;
put 'LmlzRnVuY3Rpb24obHQpLGx0KTtsZXQgUGU9dGhpcy5zdG9yZS5jb25zdHJ1Y3Rvci5uYW1lO1YuaXNPYmplY3QoUGUpJiYoUGU9bnVsbCk7Y29uc3QgYmU9e3ZlcnNpb246YHRvdWdoLWNvb2tpZUAke0J9YCxzdG9yZVR5cGU6UGUscmVqZWN0UHVibGljU3VmZml4ZXM6ISF0aGlzLnJlamVj'@;
put 'dFB1YmxpY1N1ZmZpeGVzLGVuYWJsZUxvb3NlTW9kZTohIXRoaXMuZW5hYmxlTG9vc2VNb2RlLGFsbG93U3BlY2lhbFVzZURvbWFpbjohIXRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHByZWZpeFNlY3VyaXR5OldlKHRoaXMucHJlZml4U2VjdXJpdHkpLGNvb2tpZXM6W119O2lmKCF0aGlz'@;
put 'LnN0b3JlLmdldEFsbENvb2tpZXN8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMpcmV0dXJuIGx0KG5ldyBFcnJvcigic3RvcmUgZG9lcyBub3Qgc3VwcG9ydCBnZXRBbGxDb29raWVzIGFuZCBjYW5ub3QgYmUgc2VyaWFsaXplZCIpKTt0aGlzLnN0b3JlLmdl'@;
put 'dEFsbENvb2tpZXMoKEFlLFRlKT0+QWU/bHQoQWUpOihiZS5jb29raWVzPVRlLm1hcChxZT0+KGRlbGV0ZShxZT1xZSBpbnN0YW5jZW9mIGplP3FlLnRvSlNPTigpOnFlKS5jcmVhdGlvbkluZGV4LHFlKSksbHQobnVsbCxiZSkpKX10b0pTT04oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVTeW5j'@;
put 'KCl9X2ltcG9ydENvb2tpZXMobHQsUGUpe2xldCBiZT1sdC5jb29raWVzO2lmKCFiZXx8IUFycmF5LmlzQXJyYXkoYmUpKXJldHVybiBQZShuZXcgRXJyb3IoInNlcmlhbGl6ZWQgamFyIGhhcyBubyBjb29raWVzIGFycmF5IikpO2JlPWJlLnNsaWNlKCk7Y29uc3QgQWU9VGU9PntpZihUZSly'@;
put 'ZXR1cm4gUGUoVGUpO2lmKCFiZS5sZW5ndGgpcmV0dXJuIFBlKFRlLHRoaXMpO2xldCBxZTt0cnl7cWU9eGUoYmUuc2hpZnQoKSl9Y2F0Y2goWGUpe3JldHVybiBQZShYZSl9aWYobnVsbD09PXFlKXJldHVybiBBZShudWxsKTt0aGlzLnN0b3JlLnB1dENvb2tpZShxZSxBZSl9O0FlKCl9Y2xv'@;
put 'bmUobHQsUGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYoUGU9bHQsbHQ9bnVsbCksdGhpcy5zZXJpYWxpemUoKGJlLEFlKT0+e2lmKGJlKXJldHVybiBQZShiZSk7S2UuZGVzZXJpYWxpemUoQWUsbHQsUGUpfSl9Y2xvbmVTeW5jKGx0KXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4g'@;
put 'dGhpcy5fY2xvbmVTeW5jKCk7aWYoIWx0LnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIGNsb25lIGRlc3RpbmF0aW9uIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLl9jbG9uZVN5bmMobHQpfXJlbW92'@;
put 'ZUFsbENvb2tpZXMobHQpe1YudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGx0KSxsdCk7Y29uc3QgUGU9dGhpcy5zdG9yZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUGUucmVtb3ZlQWxsQ29va2llcyYmUGUucmVtb3ZlQWxsQ29va2llcyE9PWsucHJvdG90eXBlLnJlbW92ZUFsbENvb2tpZXMpcmV0'@;
put 'dXJuIFBlLnJlbW92ZUFsbENvb2tpZXMobHQpO1BlLmdldEFsbENvb2tpZXMoKGJlLEFlKT0+e2lmKGJlKXJldHVybiBsdChiZSk7aWYoMD09PUFlLmxlbmd0aClyZXR1cm4gbHQobnVsbCk7bGV0IFRlPTA7Y29uc3QgcWU9W107ZnVuY3Rpb24gWGUoVWUpe2lmKFVlJiZxZS5wdXNoKFVlKSxU'@;
put 'ZSsrLFRlPT09QWUubGVuZ3RoKXJldHVybiBsdChxZS5sZW5ndGg/cWVbMF06bnVsbCl9QWUuZm9yRWFjaChVZT0+e1BlLnJlbW92ZUNvb2tpZShVZS5kb21haW4sVWUucGF0aCxVZS5rZXksWGUpfSl9KX1zdGF0aWMgZGVzZXJpYWxpemUobHQsUGUsYmUpe2xldCBBZTtpZigzIT09YXJndW1l'@;
put 'bnRzLmxlbmd0aCYmKGJlPVBlLFBlPW51bGwpLFYudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGJlKSxiZSksInN0cmluZyI9PXR5cGVvZiBsdCl7aWYoQWU9ZmUobHQpLEFlIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGJlKEFlKX1lbHNlIEFlPWx0O2NvbnN0IFRlPW5ldyBLZShQZSx7cmVqZWN0'@;
put 'UHVibGljU3VmZml4ZXM6QWUucmVqZWN0UHVibGljU3VmZml4ZXMsbG9vc2VNb2RlOkFlLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46QWUuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHByZWZpeFNlY3VyaXR5OkFlLnByZWZpeFNlY3VyaXR5fSk7VGUuX2ltcG9ydENvb2tp'@;
put 'ZXMoQWUscWU9PntpZihxZSlyZXR1cm4gYmUocWUpO2JlKG51bGwsVGUpfSl9c3RhdGljIGRlc2VyaWFsaXplU3luYyhsdCxQZSl7Y29uc3QgYmU9InN0cmluZyI9PXR5cGVvZiBsdD9KU09OLnBhcnNlKGx0KTpsdCxBZT1uZXcgS2UoUGUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOmJlLnJlamVj'@;
put 'dFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpiZS5lbmFibGVMb29zZU1vZGV9KTtpZighQWUuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7cmV0dXJuIEFlLl9pbXBv'@;
put 'cnRDb29raWVzU3luYyhiZSksQWV9fWZ1bmN0aW9uIFllKEplKXtyZXR1cm4gZnVuY3Rpb24oLi4ubHQpe2lmKCF0aGlzLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIp'@;
put 'O2xldCBQZSxiZTtpZih0aGlzW0plXSguLi5sdCwoQWUsVGUpPT57UGU9QWUsYmU9VGV9KSxQZSl0aHJvdyBQZTtyZXR1cm4gYmV9fUtlLmZyb21KU09OPUtlLmRlc2VyaWFsaXplU3luYyxbIl9pbXBvcnRDb29raWVzIiwiY2xvbmUiLCJnZXRDb29raWVzIiwiZ2V0Q29va2llU3RyaW5nIiwi'@;
put 'Z2V0U2V0Q29va2llU3RyaW5ncyIsInJlbW92ZUFsbENvb2tpZXMiLCJzZXJpYWxpemUiLCJzZXRDb29raWUiXS5mb3JFYWNoKEplPT57S2UucHJvdG90eXBlW0plXT1ZKEtlLnByb3RvdHlwZVtKZV0pfSksS2UuZGVzZXJpYWxpemU9WShLZS5kZXNlcmlhbGl6ZSksTy52ZXJzaW9uPUIsTy5D'@;
put 'b29raWVKYXI9S2UsTy5Db29raWU9amUsTy5TdG9yZT1rLE8uTWVtb3J5Q29va2llU3RvcmU9RSxPLnBhcnNlRGF0ZT1TLE8uZm9ybWF0RGF0ZT12LE8ucGFyc2U9ZGUsTy5mcm9tSlNPTj14ZSxPLmRvbWFpbk1hdGNoPXcsTy5kZWZhdWx0UGF0aD1KLE8ucGF0aE1hdGNoPWosTy5nZXRQdWJs'@;
put 'aWNTdWZmaXg9SS5nZXRQdWJsaWNTdWZmaXgsTy5jb29raWVDb21wYXJlPUxlLE8ucGVybXV0ZURvbWFpbj1SKDczMjQpLnBlcm11dGVEb21haW4sTy5wZXJtdXRlUGF0aD1mdW5jdGlvbihKZSl7aWYoVi52YWxpZGF0ZShWLmlzU3RyaW5nKEplKSksIi8iPT09SmUpcmV0dXJuWyIvIl07Y29u'@;
put 'c3QgbHQ9W0plXTtmb3IoO0plLmxlbmd0aD4xOyl7Y29uc3QgUGU9SmUubGFzdEluZGV4T2YoIi8iKTtpZigwPT09UGUpYnJlYWs7SmU9SmUuc3Vic3RyKDAsUGUpLGx0LnB1c2goSmUpfXJldHVybiBsdC5wdXNoKCIvIiksbHR9LE8uY2Fub25pY2FsRG9tYWluPXAsTy5QcmVmaXhTZWN1cml0'@;
put 'eUVudW09RyxPLlBhcmFtZXRlckVycm9yPVYuUGFyYW1ldGVyRXJyb3J9LDU3NjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtmcm9tQ2FsbGJhY2s6en09Uig3MDQxKSxLPVIoMjIyNCkueSxJPVIoNzMyNCkucGVybXV0ZURvbWFpbixrPVIoODk3MSkuVSx7Z2V0Q3VzdG9tSW5zcGVj'@;
put 'dFN5bWJvbDpFLGdldFV0aWxJbnNwZWN0Omp9PVIoMTI2OSk7Y2xhc3MgViBleHRlbmRzIEt7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc3luY2hyb25vdXM9ITAsdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBYPUUoKTtYJiYodGhpc1tYXT10aGlzLmluc3BlY3QpfWlu'@;
put 'c3BlY3QoKXtyZXR1cm5geyBpZHg6ICR7aihCKSh0aGlzLmlkeCwhMSwyKX0gfWB9ZmluZENvb2tpZShYLFUscSxlZSl7cmV0dXJuIGVlKG51bGwsdGhpcy5pZHhbWF0mJnRoaXMuaWR4W1hdW1VdP3RoaXMuaWR4W1hdW1VdW3FdfHxudWxsOnZvaWQgMCl9ZmluZENvb2tpZXMoWCxVLHEsZWUp'@;
put 'e2NvbnN0IHRlPVtdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBxJiYoZWU9cSxxPSEwKSwhWClyZXR1cm4gZWUobnVsbCxbXSk7bGV0IG9lO29lPVU/ZnVuY3Rpb24odWUpe09iamVjdC5rZXlzKHVlKS5mb3JFYWNoKGNlPT57aWYoayhVLGNlKSl7Y29uc3QgRz11ZVtjZV07Zm9yKGNvbnN0IGIg'@;
put 'aW4gRyl0ZS5wdXNoKEdbYl0pfX0pfTpmdW5jdGlvbih1ZSl7Zm9yKGNvbnN0IGNlIGluIHVlKXtjb25zdCBHPXVlW2NlXTtmb3IoY29uc3QgYiBpbiBHKXRlLnB1c2goR1tiXSl9fTtjb25zdCBzZT1JKFgscSl8fFtYXSxoZT10aGlzLmlkeDtzZS5mb3JFYWNoKHVlPT57Y29uc3QgY2U9aGVb'@;
put 'dWVdO2NlJiZvZShjZSl9KSxlZShudWxsLHRlKX1wdXRDb29raWUoWCxVKXt0aGlzLmlkeFtYLmRvbWFpbl18fCh0aGlzLmlkeFtYLmRvbWFpbl09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbWC5kb21haW5dW1gucGF0aF18fCh0aGlzLmlkeFtYLmRvbWFpbl1bWC5wYXRoXT1PYmpl'@;
put 'Y3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtYLmRvbWFpbl1bWC5wYXRoXVtYLmtleV09WCxVKG51bGwpfXVwZGF0ZUNvb2tpZShYLFUscSl7dGhpcy5wdXRDb29raWUoVSxxKX1yZW1vdmVDb29raWUoWCxVLHEsZWUpe3RoaXMuaWR4W1hdJiZ0aGlzLmlkeFtYXVtVXSYmdGhpcy5pZHhbWF1b'@;
put 'VV1bcV0mJmRlbGV0ZSB0aGlzLmlkeFtYXVtVXVtxXSxlZShudWxsKX1yZW1vdmVDb29raWVzKFgsVSxxKXtyZXR1cm4gdGhpcy5pZHhbWF0mJihVP2RlbGV0ZSB0aGlzLmlkeFtYXVtVXTpkZWxldGUgdGhpcy5pZHhbWF0pLHEobnVsbCl9cmVtb3ZlQWxsQ29va2llcyhYKXtyZXR1cm4gdGhp'@;
put 'cy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKSxYKG51bGwpfWdldEFsbENvb2tpZXMoWCl7Y29uc3QgVT1bXSxxPXRoaXMuaWR4O09iamVjdC5rZXlzKHEpLmZvckVhY2goZWU9PntPYmplY3Qua2V5cyhxW2VlXSkuZm9yRWFjaCh0ZT0+e09iamVjdC5rZXlzKHFbZWVdW3RlXSkuZm9yRWFjaChv'@;
put 'ZT0+e251bGwhPT1vZSYmVS5wdXNoKHFbZWVdW3RlXVtvZV0pfSl9KX0pLFUuc29ydCgoZWUsdGUpPT4oZWUuY3JlYXRpb25JbmRleHx8MCktKHRlLmNyZWF0aW9uSW5kZXh8fDApKSxYKG51bGwsVSl9fWZ1bmN0aW9uIEIoWSl7Y29uc3QgWD1PYmplY3Qua2V5cyhZKTtpZigwPT09WC5sZW5n'@;
put 'dGgpcmV0dXJuIltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7fSI7bGV0IFU9IltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG4iO3JldHVybiBPYmplY3Qua2V5cyhZKS5mb3JFYWNoKChxLGVlKT0+e1UrPWZ1bmN0aW9uKHRlLG9lKXtsZXQgaGU9YCAgJyR7dGV9JzogW09iamVjdDogbnVs'@;
put 'bCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKG9lKS5mb3JFYWNoKCh1ZSxjZSxHKT0+e2hlKz1mdW5jdGlvbihiLEQpe2NvbnN0IEg9IiAgICAiO2xldCBOPWAke0h9JyR7Yn0nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMoRCku'@;
put 'Zm9yRWFjaCgoZyxDLFMpPT57Tis9YCAgICAgICR7Z306ICR7RFtnXS5pbnNwZWN0KCl9YCxDPFMubGVuZ3RoLTEmJihOKz0iLCIpLE4rPSJcbiJ9KSxOKz1gJHtIfX1gLE59KHVlLG9lW3VlXSksY2U8Ry5sZW5ndGgtMSYmKGhlKz0iLCIpLGhlKz0iXG4ifSksaGUrPSIgIH0iLGhlfShxLFlb'@;
put 'cV0pLGVlPFgubGVuZ3RoLTEmJihVKz0iLCIpLFUrPSJcbiJ9KSxVKz0ifSIsVX1bImZpbmRDb29raWUiLCJmaW5kQ29va2llcyIsInB1dENvb2tpZSIsInVwZGF0ZUNvb2tpZSIsInJlbW92ZUNvb2tpZSIsInJlbW92ZUNvb2tpZXMiLCJyZW1vdmVBbGxDb29raWVzIiwiZ2V0QWxsQ29va2ll'@;
put 'cyJdLmZvckVhY2goWT0+e1YucHJvdG90eXBlW1ldPXooVi5wcm90b3R5cGVbWV0pfSksTy5tPVZ9LDg5NzE6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty5VPWZ1bmN0aW9uKFIseil7cmV0dXJuIHo9PT1SfHwwPT09Ui5pbmRleE9mKHopJiYoIi8iPT09ei5zdWJzdHIoLTEpfHwiLyI9PT1SLnN1'@;
put 'YnN0cih6Lmxlbmd0aCwxKSl9fSw3MzI0OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc1Mik7Ty5wZXJtdXRlRG9tYWluPWZ1bmN0aW9uKEssSSl7Y29uc3Qgaz16LmdldFB1YmxpY1N1ZmZpeChLLHthbGxvd1NwZWNpYWxVc2VEb21haW46SX0pO2lmKCFrKXJldHVybiBudWxs'@;
put 'O2lmKGs9PUspcmV0dXJuW0tdOyIuIj09Sy5zbGljZSgtMSkmJihLPUsuc2xpY2UoMCwtMSkpO2NvbnN0IEU9Sy5zbGljZSgwLC0oay5sZW5ndGgrMSkpLnNwbGl0KCIuIikucmV2ZXJzZSgpO2xldCBqPWs7Y29uc3QgVj1bal07Zm9yKDtFLmxlbmd0aDspaj1gJHtFLnNoaWZ0KCl9LiR7an1g'@;
put 'LFYucHVzaChqKTtyZXR1cm4gVn19LDc1MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig2MjQ0KSxLPVsibG9jYWwiLCJleGFtcGxlIiwiaW52YWxpZCIsImxvY2FsaG9zdCIsInRlc3QiXSxJPVsibG9jYWxob3N0IiwiaW52YWxpZCJdO08uZ2V0UHVibGljU3VmZml4PWZ1bmN0'@;
put 'aW9uKGssRT17fSl7Y29uc3Qgaj1rLnNwbGl0KCIuIiksVj1qW2oubGVuZ3RoLTFdLFk9ISFFLmlnbm9yZUVycm9yO2lmKEUuYWxsb3dTcGVjaWFsVXNlRG9tYWluJiZLLmluY2x1ZGVzKFYpKXtpZihqLmxlbmd0aD4xKXJldHVybmAke2pbai5sZW5ndGgtMl19LiR7Vn1gO2lmKEkuaW5jbHVk'@;
put 'ZXMoVikpcmV0dXJuYCR7Vn1gfWlmKCFZJiZLLmluY2x1ZGVzKFYpKXRocm93IG5ldyBFcnJvcihgQ29va2llIGhhcyBkb21haW4gc2V0IHRvIHRoZSBwdWJsaWMgc3VmZml4ICIke1Z9IiB3aGljaCBpcyBhIHNwZWNpYWwgdXNlIGRvbWFpbi4gVG8gYWxsb3cgdGhpcywgY29uZmlndXJlIHlv'@;
put 'dXIgQ29va2llSmFyIHdpdGgge2FsbG93U3BlY2lhbFVzZURvbWFpbjp0cnVlLCByZWplY3RQdWJsaWNTdWZmaXhlczogZmFsc2V9LmApO3JldHVybiB6LmdldChrKX19LDIyMjQ6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty55PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zeW5jaHJvbm91cz0h'@;
put 'MX1maW5kQ29va2llKFIseixLLEkpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1maW5kQ29va2llcyhSLHosSyxJKXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXB1dENvb2tpZShSLHope3Rocm93IG5l'@;
put 'dyBFcnJvcigicHV0Q29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXVwZGF0ZUNvb2tpZShSLHosSyl7dGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llKFIseixLLEkpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llIGlz'@;
put 'IG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZXMoUix6LEspe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVBbGxDb29raWVzKFIpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQi'@;
put 'KX1nZXRBbGxDb29raWVzKFIpe3Rocm93IG5ldyBFcnJvcigiZ2V0QWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQgKHRoZXJlZm9yZSBqYXIgY2Fubm90IGJlIHNlcmlhbGl6ZWQpIil9fX0sMTI2OTooTSxPLFIpPT57ZnVuY3Rpb24geigpe3RyeXtyZXR1cm4gUig5NTM5KX1jYXRjaHty'@;
put 'ZXR1cm4gbnVsbH19ZnVuY3Rpb24gSygpe3JldHVybiBTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpfU8uZ2V0VXRpbEluc3BlY3Q9ZnVuY3Rpb24oSSxrPXt9KXtjb25zdCBFPShrLnJlcXVpcmVVdGlsfHx6KSgpO3JldHVybiBmdW5jdGlvbihqLFYsQil7cmV0dXJu'@;
put 'IEU/RS5pbnNwZWN0KGosVixCKTpJKGopfX0sTy5nZXRDdXN0b21JbnNwZWN0U3ltYm9sPWZ1bmN0aW9uKEk9e30pe3JldHVybihJLmxvb2t1cEN1c3RvbUluc3BlY3RTeW1ib2x8fEspKCl8fGZ1bmN0aW9uKGspe2NvbnN0IEU9KGsucmVxdWlyZVV0aWx8fHopKCk7cmV0dXJuIEU/RS5pbnNw'@;
put 'ZWN0LmN1c3RvbTpudWxsfShJKX19LDc2NTI6KE0sTyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUihrKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yga31mdW5jdGlvbiB6KGspe3JldHVybiJzdHJpbmciPT10eXBlb2Yga3x8ayBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiBLKGspe3Jl'@;
put 'dHVybiJbb2JqZWN0IE9iamVjdF0iPT09dG9TdHJpbmcuY2FsbChrKX1jbGFzcyBJIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uRSl7c3VwZXIoLi4uRSl9fU8uUGFyYW1ldGVyRXJyb3I9SSxPLmlzRnVuY3Rpb249UixPLmlzTm9uRW1wdHlTdHJpbmc9ZnVuY3Rpb24oayl7cmV0dXJu'@;
put 'IHooaykmJiIiIT09a30sTy5pc0RhdGU9ZnVuY3Rpb24oayl7cmV0dXJuIGZ1bmN0aW9uKEUsail7dHJ5e3JldHVybiBFIGluc3RhbmNlb2Ygan1jYXRjaHtyZXR1cm4hMX19KGssRGF0ZSkmJiJudW1iZXIiPT10eXBlb2YoRT1rLmdldFRpbWUoKSkmJkUlMT09MDt2YXIgRX0sTy5pc0VtcHR5'@;
put 'U3RyaW5nPWZ1bmN0aW9uKGspe3JldHVybiIiPT09a3x8ayBpbnN0YW5jZW9mIFN0cmluZyYmIiI9PT1rLnRvU3RyaW5nKCl9LE8uaXNTdHJpbmc9eixPLmlzT2JqZWN0PUssTy52YWxpZGF0ZT1mdW5jdGlvbihrLEUsail7aWYoUihFKXx8KGo9RSxFPW51bGwpLEsoail8fChqPXtFcnJvcjoi'@;
put 'RmFpbGVkIENoZWNrIn0pLCFrKXtpZighRSl0aHJvdyBuZXcgSShqKTtFKG5ldyBJKGopKX19fSw0NTY6TT0+e00uZXhwb3J0cz0iNC4xLjMifSw3MDQxOihNLE8pPT57InVzZSBzdHJpY3QiO08uZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKFIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKCh6LEspPT57YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGhdPShJLGspPT57aWYoSSlyZXR1cm4gSyhJKTt6KGspfSxhcmd1bWVudHMubGVuZ3Ro'@;
put 'KyssUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX0sTy5mcm9tUHJvbWlzZT1mdW5jdGlvbihSKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7Y29uc3Qgej1hcmd1bWVudHNbYXJn'@;
put 'dW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeilyZXR1cm4gUi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLGFyZ3VtZW50cy5sZW5ndGgtLSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKS50aGVuKEs9PnoobnVs'@;
put 'bCxLKSx6KX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX19LDY3MjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oVil7Zm9yKHZhciBCLFk9MSxYPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg7WTxYO1krKylmb3IodmFyIFUgaW4gQj1hcmd1bWVudHNbWV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsVSkmJihWW1VdPUJbVV0pO3JldHVybiBWfSx6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp'@;
put 'b24oVixCLFksWCl7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oVSxxKXtmdW5jdGlvbiBlZShzZSl7dHJ5e29lKFgubmV4dChzZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gdGUoc2Upe3RyeXtvZShYLnRocm93KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlv'@;
put 'biBvZShzZSl7dmFyIGhlO3NlLmRvbmU/VShzZS52YWx1ZSk6KGhlPXNlLnZhbHVlLGhlIGluc3RhbmNlb2YgWT9oZTpuZXcgWShmdW5jdGlvbih1ZSl7dWUoaGUpfSkpLnRoZW4oZWUsdGUpfW9lKChYPVguYXBwbHkoVixCfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJh'@;
put 'dG9yfHxmdW5jdGlvbihWLEIpe3ZhciBZLFgsVSxxLGVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlVbMF0pdGhyb3cgVVsxXTtyZXR1cm4gVVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBxPXtuZXh0OnRlKDApLHRocm93OnRlKDEpLHJldHVybjp0ZSgyKX0sImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIFN5bWJvbCYmKHFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscTtmdW5jdGlvbiB0ZShvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtyZXR1cm4gZnVuY3Rpb24oaGUpe2lmKFkpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVh'@;
put 'ZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZWU7KXRyeXtpZihZPTEsWCYmKFU9MiZoZVswXT9YLnJldHVybjpoZVswXT9YLnRocm93fHwoKFU9WC5yZXR1cm4pJiZVLmNhbGwoWCksMCk6WC5uZXh0KSYmIShVPVUuY2FsbChYLGhlWzFdKSkuZG9uZSlyZXR1cm4gVTtzd2l0Y2goWD0wLFUmJihoZT1b'@;
put 'MiZoZVswXSxVLnZhbHVlXSksaGVbMF0pe2Nhc2UgMDpjYXNlIDE6VT1oZTticmVhaztjYXNlIDQ6cmV0dXJuIGVlLmxhYmVsKysse3ZhbHVlOmhlWzFdLGRvbmU6ITF9O2Nhc2UgNTplZS5sYWJlbCsrLFg9aGVbMV0saGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpoZT1lZS5vcHMucG9wKCksZWUu'@;
put 'dHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFU9KFU9ZWUudHJ5cykubGVuZ3RoPjAmJlVbVS5sZW5ndGgtMV0pfHw2IT09aGVbMF0mJjIhPT1oZVswXSkpe2VlPTA7Y29udGludWV9aWYoMz09PWhlWzBdJiYoIVV8fGhlWzFdPlVbMF0mJmhlWzFdPFVbM10pKXtlZS5sYWJlbD1o'@;
put 'ZVsxXTticmVha31pZig2PT09aGVbMF0mJmVlLmxhYmVsPFVbMV0pe2VlLmxhYmVsPVVbMV0sVT1oZTticmVha31pZihVJiZlZS5sYWJlbDxVWzJdKXtlZS5sYWJlbD1VWzJdLGVlLm9wcy5wdXNoKGhlKTticmVha31VWzJdJiZlZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZX1o'@;
put 'ZT1CLmNhbGwoVixlZSl9Y2F0Y2godWUpe2hlPVs2LHVlXSxYPTB9ZmluYWxseXtZPVU9MH1pZig1JmhlWzBdKXRocm93IGhlWzFdO3JldHVybnt2YWx1ZTpoZVswXT9oZVsxXTp2b2lkIDAsZG9uZTohMH19KFtvZSxzZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxl'@;
put 'Iix7dmFsdWU6ITB9KSxPLkNvbnRleHRNYW5hZ2VyPXZvaWQgMDt2YXIgaz1SKDU5MjgpLEU9Uig5Nzc4KSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gVihCLFkpe3RoaXMuc2VydmVyVXJsPUIsdGhpcy5yZXF1ZXN0Q2xpZW50PVksdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzPVsiQ0FTIEZv'@;
put 'cm1hdHMgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJEYXRhIE1pbmluZyBjb21wdXRlIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGNvbXB1dGUgY29udGV4'@;
put 'dCIsIlNBUyBTdHVkaW8gY29tcHV0ZSBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBjb21wdXRlIGNvbnRleHQiXSx0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzPVsiQ0FTIEZvcm1hdHMgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiRGF0YSBNaW5pbmcgbGF1bmNoZXIg'@;
put 'Y29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkpvYiBGbG93IEV4ZWN1dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgU3R1'@;
put 'ZGlvIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGxhdW5jaGVyIGNvbnRleHQiXSxCJiYoMCxrLmlzVXJsKShCKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIix7Z2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0c30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsImdldERlZmF1bHRMYXVuY2hlckNvbnRleHRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVm'@;
put 'YXVsdExhdW5jaGVyQ29udGV4dHN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksVi5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKEIpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBZO3JldHVybiBJKHRoaXMsZnVuY3Rpb24o'@;
put 'WCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiKSxCKS5jYXRjaChmdW5jdGlvbihVKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoVSwi'@;
put 'RXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHRzLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsKChZPVguc2VudCgpLnJlc3VsdCkmJlkuaXRlbXM/WS5pdGVtczpbXSkubWFwKGZ1bmN0aW9uKFUpe3JldHVybntjcmVhdGVkQnk6VS5jcmVhdGVkQnksaWQ6VS5pZCxuYW1lOlUubmFt'@;
put 'ZSx2ZXJzaW9uOlUudmVyc2lvbixhdHRyaWJ1dGVzOnt9fX0pXX19KX0pfSxWLnByb3RvdHlwZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9uKEIpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBZO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNo'@;
put 'KFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2xhdW5jaGVyL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksQikuY2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdo'@;
put 'aWxlIGdldHRpbmcgbGF1bmNoZXIgY29udGV4dHMuICIpfSldO2Nhc2UgMTpyZXR1cm5bMiwoKFk9WC5zZW50KCkucmVzdWx0KSYmWS5pdGVtcz9ZLml0ZW1zOltdKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJue2NyZWF0ZWRCeTpVLmNyZWF0ZWRCeSxpZDpVLmlkLG5hbWU6VS5uYW1lLHZlcnNp'@;
put 'b246VS52ZXJzaW9uLGF0dHJpYnV0ZXM6e319fSldfX0pfSl9LFYucHJvdG90eXBlLmNyZWF0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEIsWSxYLFUscSxlZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9lLHNlLGhlLHVlO3JldHVybiBJKHRoaXMs'@;
put 'ZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoQiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJDb21wdXRlIGNvbnRleHQgJyIuY29uY2F0KEIsIicgYWxyZWFkeSBl'@;
put 'eGlzdHMuIikpLFs0LHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRzKHEpXTtjYXNlIDE6aWYoY2Uuc2VudCgpLmZpbmQoZnVuY3Rpb24oRyl7cmV0dXJuIEcubmFtZT09PUJ9KSl0aHJvdyBuZXcgRXJyb3IoIkNvbXB1dGUgY29udGV4dCAnIi5jb25jYXQoQiwiJyBhbHJlYWR5IGV4aXN0cy4iKSk7'@;
put 'cmV0dXJuIFk/dGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cy5pbmNsdWRlcyhZKT9bMyw0XTpbNCx0aGlzLmdldExhdW5jaGVyQ29udGV4dHMocSldOlszLDRdO2Nhc2UgMjpyZXR1cm4gY2Uuc2VudCgpLmZpbmQoZnVuY3Rpb24oRyl7cmV0dXJuIEcubmFtZT09PVl9KT9bMyw0XToodGU9'@;
put 'IlRoZSBsYXVuY2hlciBjb250ZXh0IGZvciAiLmNvbmNhdChZKSxbNCx0aGlzLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChZLHRlLCJkaXJlY3QiLHEpLmNhdGNoKGZ1bmN0aW9uKEcpe3Rocm93IG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gIi5jb25j'@;
put 'YXQoRykpfSldKTtjYXNlIDM6aWYoIShvZT1jZS5zZW50KCkpfHwhb2UubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuIik7WT1vZS5uYW1lLGNlLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBzZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxp'@;
put 'Y2F0aW9uL2pzb24ifSxxJiYoc2UuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KHEpKSxoZT17cmV1c2VTZXJ2ZXJQcm9jZXNzZXM6ITB9LFgmJihoZT16KHooe30saGUpLHtydW5TZXJ2ZXJBczpYfSkpLHVlPXtuYW1lOkIsbGF1bmNoQ29udGV4dDp7Y29udGV4dE5hbWU6WXx8IiJ9'@;
put 'LGF0dHJpYnV0ZXM6aGV9LGVlJiZlZS5sZW5ndGg/dWUuYXV0aG9yaXplZFVzZXJzPWVlOnVlLmF1dGhvcml6ZUFsbEF1dGhlbnRpY2F0ZWRVc2Vycz0hMCxVJiYodWUuZW52aXJvbm1lbnQ9e2F1dG9FeGVjTGluZXM6VX0pLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIiLmNvbmNhdCh0'@;
put 'aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMiKSx1ZSxxKS5jYXRjaChmdW5jdGlvbihHKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoRywiRXJyb3Igd2hpbGUgY3JlYXRpbmcgY29tcHV0ZSBjb250ZXh0LiAiKX0pXTtjYXNlIDU6cmV0dXJuWzIsY2Uuc2VudCgpLnJlc3VsdF19'@;
put 'fSl9KX0sVi5wcm90b3R5cGUuY3JlYXRlTGF1bmNoZXJDb250ZXh0PWZ1bmN0aW9uKEIsWSxYLFUpe3JldHVybiB2b2lkIDA9PT1YJiYoWD0iZGlyZWN0IiksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHRlKXtzd2l0Y2go'@;
put 'dGUubGFiZWwpe2Nhc2UgMDppZighQil0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cywiTGF1bmNoZXIgY29udGV4dCAnIi5jb25jYXQoQiwiJyBhbHJl'@;
put 'YWR5IGV4aXN0cy4iKSksWzQsdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKFUpXTtjYXNlIDE6aWYodGUuc2VudCgpLmZpbmQoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5uYW1lPT09Qn0pKXRocm93IG5ldyBFcnJvcigiTGF1bmNoZXIgY29udGV4dCAnIi5jb25jYXQoQiwiJyBhbHJlYWR5IGV4'@;
put 'aXN0cy4iKSk7cmV0dXJuIHE9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sVSYmKHEuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KFUpKSxlZT17bmFtZTpCLGRlc2NyaXB0aW9uOlksbGF1bmNoVHlwZTpYfSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5j'@;
put 'b25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9sYXVuY2hlci9jb250ZXh0cyIpLGVlLFUpLmNhdGNoKGZ1bmN0aW9uKG9lKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkob2UsIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICIpfSldO2Nhc2UgMjpyZXR1cm5bMix0ZS5zZW50'@;
put 'KCkucmVzdWx0XX19KX0pfSxWLnByb3RvdHlwZS5lZGl0Q29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oQixZLFgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBVLHEsZWUsdGU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihvZSl7c3dpdGNoKG9lLmxhYmVsKXtjYXNl'@;
put 'IDA6cmV0dXJuIHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShCKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoQix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSxbNCx0aGlzLmdldENvbXB1'@;
put 'dGVDb250ZXh0QnlOYW1lKEIsWCldO2Nhc2UgMTpyZXR1cm4oVT1vZS5zZW50KCkpP1szLDNdOls0LHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKFkuaWQsWCldO2Nhc2UgMjpVPW9lLnNlbnQoKSxvZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIi'@;
put 'LmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KFUuaWQpLFgpLmNhdGNoKGZ1bmN0aW9uKHNlKXt0aHJvdyBzZSYmNDA0PT09c2Uuc3RhdHVzP25ldyBFcnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KEIsIicgd2FzIG5vdCBmb3VuZCBvbiB0aGlz'@;
put 'IHNlcnZlci4iKSk6c2V9KV07Y2FzZSA0OnJldHVybiBxPW9lLnNlbnQoKSx0ZT1xLmV0YWcsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dCgiL2NvbXB1dGUvY29udGV4dHMvIi5jb25jYXQoKGVlPXEucmVzdWx0KS5pZCkseih6KHooe30sZWUpLFkpLHthdHRyaWJ1dGVzOnooeih7fSxlZS5h'@;
put 'dHRyaWJ1dGVzKSxZLmF0dHJpYnV0ZXMpfSksWCx7IklmLU1hdGNoIjp0ZX0pXTtjYXNlIDU6cmV0dXJuWzIsb2Uuc2VudCgpXX19KX0pfSxWLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZT1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'bigpe3ZhciBYO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwnL2NvbXB1dGUvY29udGV4dHM/ZmlsdGVyPWVxKG5hbWUsICInKS5jb25jYXQoQiwn'@;
put 'IiknKSxZKS5jYXRjaChmdW5jdGlvbihxKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkocSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgbmFtZS4gIil9KV07Y2FzZSAxOmlmKCEoWD1VLnNlbnQoKS5yZXN1bHQpfHwhWC5pdGVtc3x8IVguaXRlbXMubGVuZ3RoKXRo'@;
put 'cm93IG5ldyBFcnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KEIsIicgd2FzIG5vdCBmb3VuZCBhdCAnIikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCInLiIpKTtyZXR1cm5bMixYLml0ZW1zWzBdXX19KX0pfSxWLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5SWQ9ZnVuY3Rpb24oQixZ'@;
put 'KXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRz'@;
put 'LyIpLmNvbmNhdChCKSxZKS5jYXRjaChmdW5jdGlvbihVKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoVSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgaWQuICIpfSldO2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKS5yZXN1bHRdfX0pfSl9LFYucHJvdG90eXBlLmdl'@;
put 'dEV4ZWN1dGFibGVDb250ZXh0cz1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBYLFUscSxlZSx0ZSxvZSxzZSx1ZSxjZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5y'@;
put 'ZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksWT8uYWNjZXNzX3Rva2VuKS5jYXRjaChmdW5jdGlvbihiKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0'@;
put 'ZSBjb250ZXh0cy4iKX0pXTtjYXNlIDE6WD1HLnNlbnQoKS5yZXN1bHQscT1bXSxlZT0oVT1YLml0ZW1zfHxbXSkubWFwKGZ1bmN0aW9uKGIpe3ZhciBEPVsiJXB1dCAmPXN5c3VzZXJpZDsiXTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQigidGVzdC0iLmNvbmNhdChiLm5hbWUpLEQsYi5u'@;
put 'YW1lLFksbnVsbCwhMSwhMCwhMCkuY2F0Y2goZnVuY3Rpb24oSCl7cmV0dXJuIEh9KX19KSx0ZT1bXSxvZT0wLHNlPWVlLEcubGFiZWw9MjtjYXNlIDI6cmV0dXJuIG9lPHNlLmxlbmd0aD8oY2U9KHVlPXRlKS5wdXNoLFs0LCgwLHNlW29lXSkoKV0pOlszLDVdO2Nhc2UgMzpjZS5hcHBseSh1'@;
put 'ZSxbRy5zZW50KCldKSxHLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBvZSsrLFszLDJdO2Nhc2UgNTpyZXR1cm4gdGUuZm9yRWFjaChmdW5jdGlvbihiLEQpe2lmKGImJmIubG9nKXRyeXt2YXIgTj0iIixnPWIubG9nLnNwbGl0KCJcbiIpLmZpbmQoZnVuY3Rpb24oQyl7cmV0dXJuIEMuc3RhcnRz'@;
put 'V2l0aCgiU1lTVVNFUklEPSIpfSk7ZyYmKE49Zy5yZXBsYWNlKCJTWVNVU0VSSUQ9IiwiIikscS5wdXNoKHtjcmVhdGVkQnk6VVtEXS5jcmVhdGVkQnksaWQ6VVtEXS5pZCxuYW1lOlVbRF0ubmFtZSx2ZXJzaW9uOlVbRF0udmVyc2lvbixhdHRyaWJ1dGVzOntzeXNVc2VySWQ6Tn19KSl9Y2F0'@;
put 'Y2goQyl7dGhyb3cgQ319KSxbMixxXX19KX0pfSxWLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBYLFU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihxKXtzd2l0Y2gocS5sYWJlbCl7'@;
put 'Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoQiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApLFg9eyJDb250ZW50'@;
put 'LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sWSYmKFguQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KFkpKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKEIsWSldO2Nhc2UgMTpyZXR1cm4gVT1xLnNlbnQoKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKCIiLmNv'@;
put 'bmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KFUuaWQpLFkpXTtjYXNlIDI6cmV0dXJuWzIscS5zZW50KCldfX0pfSl9LFYucHJvdG90eXBlLnZhbGlkYXRlQ29udGV4dE5hbWU9ZnVuY3Rpb24oQil7aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0'@;
put 'IG5hbWUgaXMgcmVxdWlyZWQuIil9LFYucHJvdG90eXBlLmlzRGVmYXVsdENvbnRleHQ9ZnVuY3Rpb24oQixZLFgsVSl7aWYodm9pZCAwPT09WSYmKFk9dGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzKSx2b2lkIDA9PT1YJiYoWD0iIiksdm9pZCAwPT09VSYmKFU9ITEpLFkuaW5jbHVkZXMo'@;
put 'QikpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdChYKS5jb25jYXQoVT8iXG5EZWZhdWx0IGNvbnRleHRzOiIrWS5tYXAoZnVuY3Rpb24ocSxlZSl7cmV0dXJuIlxuIi5jb25jYXQoZWUrMSwiLiAiKS5jb25jYXQocSl9KToiIikpfSxWfSgpO08uQ29udGV4dE1hbmFnZXI9an0sODMwNjpmdW5j'@;
put 'dGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihYLFUscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24odGUsb2Upe2Z1bmN0aW9uIHNlKGNlKXt0cnl7dWUoZWUubmV4dChjZSkpfWNhdGNoKEcpe29lKEcp'@;
put 'fX1mdW5jdGlvbiBoZShjZSl7dHJ5e3VlKGVlLnRocm93KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIHVlKGNlKXt2YXIgRztjZS5kb25lP3RlKGNlLnZhbHVlKTooRz1jZS52YWx1ZSxHIGluc3RhbmNlb2YgcT9HOm5ldyBxKGZ1bmN0aW9uKGIpe2IoRyl9KSkudGhlbihzZSxoZSl9'@;
put 'dWUoKGVlPWVlLmFwcGx5KFgsVXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWCxVKXt2YXIgcSxlZSx0ZSxvZSxzZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm4gdGVbMV19LHRyeXM6W10s'@;
put 'b3BzOltdfTtyZXR1cm4gb2U9e25leHQ6aGUoMCksdGhyb3c6aGUoMSkscmV0dXJuOmhlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYob2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksb2U7ZnVuY3Rpb24gaGUodWUpe3JldHVybiBmdW5jdGlvbihj'@;
put 'ZSl7cmV0dXJuIGZ1bmN0aW9uKEcpe2lmKHEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7c2U7KXRyeXtpZihxPTEsZWUmJih0ZT0yJkdbMF0/ZWUucmV0dXJuOkdbMF0/ZWUudGhyb3d8fCgodGU9ZWUucmV0dXJuKSYmdGUuY2Fs'@;
put 'bChlZSksMCk6ZWUubmV4dCkmJiEodGU9dGUuY2FsbChlZSxHWzFdKSkuZG9uZSlyZXR1cm4gdGU7c3dpdGNoKGVlPTAsdGUmJihHPVsyJkdbMF0sdGUudmFsdWVdKSxHWzBdKXtjYXNlIDA6Y2FzZSAxOnRlPUc7YnJlYWs7Y2FzZSA0OnJldHVybiBzZS5sYWJlbCsrLHt2YWx1ZTpHWzFdLGRv'@;
put 'bmU6ITF9O2Nhc2UgNTpzZS5sYWJlbCsrLGVlPUdbMV0sRz1bMF07Y29udGludWU7Y2FzZSA3Okc9c2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKCh0ZT0odGU9c2UudHJ5cykubGVuZ3RoPjAmJnRlW3RlLmxlbmd0aC0xXSl8fDYhPT1HWzBdJiYyIT09'@;
put 'R1swXSkpe3NlPTA7Y29udGludWV9aWYoMz09PUdbMF0mJighdGV8fEdbMV0+dGVbMF0mJkdbMV08dGVbM10pKXtzZS5sYWJlbD1HWzFdO2JyZWFrfWlmKDY9PT1HWzBdJiZzZS5sYWJlbDx0ZVsxXSl7c2UubGFiZWw9dGVbMV0sdGU9RzticmVha31pZih0ZSYmc2UubGFiZWw8dGVbMl0pe3Nl'@;
put 'LmxhYmVsPXRlWzJdLHNlLm9wcy5wdXNoKEcpO2JyZWFrfXRlWzJdJiZzZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZX1HPVUuY2FsbChYLHNlKX1jYXRjaChiKXtHPVs2LGJdLGVlPTB9ZmluYWxseXtxPXRlPTB9aWYoNSZHWzBdKXRocm93IEdbMV07cmV0dXJue3ZhbHVlOkdb'@;
put 'MF0/R1sxXTp2b2lkIDAsZG9uZTohMH19KFt1ZSxjZV0pfX19LEk9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihYLFUscSl7aWYocXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBlZSx0ZT0wLG9lPVUubGVuZ3RoO3RlPG9lO3RlKyspIWVlJiZ0ZSBpbiBVfHwoZWV8'@;
put 'fChlZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChVLDAsdGUpKSxlZVt0ZV09VVt0ZV0pO3JldHVybiBYLmNvbmNhdChlZXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoVSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVM5QXBp'@;
put 'Q2xpZW50PXZvaWQgMDt2YXIgaz1SKDc3NTcpLEU9Uig2MjMwKSxqPVIoNzk1KSxWPVIoNTkyOCksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIFgoVSxxLGVlKXt0aGlzLnNlcnZlclVybD1VLHRoaXMuam9ic1BhdGg9cSxVJiYoMCxWLmlzVXJsKShVKSx0aGlzLnJlcXVlc3RDbGllbnQ9bmV3IGou'@;
put 'U2FzOVJlcXVlc3RDbGllbnQoVSxlZSl9cmV0dXJuIFgucHJvdG90eXBlLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmx9fSxYLnByb3RvdHlwZS5zZXRDb25maWc9ZnVuY3Rpb24oVSl7VSYmKHRoaXMuc2VydmVyVXJsPVUpfSxYLnByb3RvdHlw'@;
put 'ZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKFUscSxlZSl7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9lLHNlLGhlLHVlLGNlLEc7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVz'@;
put 'dENsaWVudC5sb2dpbihxLGVlLHRoaXMuam9ic1BhdGgpXTtjYXNlIDE6cmV0dXJuIGIuc2VudCgpLHRlPVsiZGF0YSBfbnVsbF87IiwiZmlsZSBfd2Vib3V0OyIsInB1dCAnRXhlY3V0ZWQgc2FzanMgcnVuJzsiLCJydW47Il0sb2U9WShJKEkoW10sVSwhMCksdGUsITApLmpvaW4oIlxuIikp'@;
put 'LHNlPSIvVXNlciBGb2xkZXJzLyIuY29uY2F0KHEsIi9NeSBGb2xkZXIvc2FzanMvcnVubmVyIiksaGU9Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrb2UuZ2V0Qm91bmRhcnkoKSx1ZT1vZS5nZXRMZW5ndGhTeW5jKCksY2U9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFj'@;
put 'Y2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjpoZSwiQ29udGVudC1MZW5ndGgiOnVlLENvbm5lY3Rpb246ImtlZXAtYWxpdmUifSxHPSIiLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitzZSsiJl9kZWJ1Zz1sb2ciKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQu'@;
put 'cG9zdChHLG9lLHZvaWQgMCxoZSxjZSldO2Nhc2UgMjpyZXR1cm5bMixiLnNlbnQoKS5yZXN1bHRdfX0pfSl9LFh9KCk7Ty5TQVM5QXBpQ2xpZW50PUI7dmFyIFk9ZnVuY3Rpb24oWCl7dmFyIFU9bmV3IEUscT0ic2FzanMtZXhlY3V0ZS1zYXM5LSIuY29uY2F0KCgwLGsuZ2VuZXJhdGVUaW1l'@;
put 'c3RhbXApKCIiKSwiLnNhcyIpO3JldHVybiBVLmFwcGVuZChxLFgse2ZpbGVuYW1lOnEsY29udGVudFR5cGU6InRleHQvcGxhaW4ifSksVX19LDk4MjE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxm'@;
put 'dW5jdGlvbihjZSxHLGIsRCl7cmV0dXJuIG5ldyhifHwoYj1Qcm9taXNlKSkoZnVuY3Rpb24oSCxOKXtmdW5jdGlvbiBnKHYpe3RyeXtTKEQubmV4dCh2KSl9Y2F0Y2gocCl7TihwKX19ZnVuY3Rpb24gQyh2KXt0cnl7UyhELnRocm93KHYpKX1jYXRjaChwKXtOKHApfX1mdW5jdGlvbiBTKHYp'@;
put 'e3ZhciBwO3YuZG9uZT9IKHYudmFsdWUpOihwPXYudmFsdWUscCBpbnN0YW5jZW9mIGI/cDpuZXcgYihmdW5jdGlvbih3KXt3KHApfSkpLnRoZW4oZyxDKX1TKChEPUQuYXBwbHkoY2UsR3x8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oY2UsRyl7'@;
put 'dmFyIGIsRCxILE4sZz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZIWzBdKXRocm93IEhbMV07cmV0dXJuIEhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gTj17bmV4dDpDKDApLHRocm93OkMoMSkscmV0dXJuOkMoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihOW1N5'@;
put 'bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLE47ZnVuY3Rpb24gQyhTKXtyZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIGZ1bmN0aW9uKHApe2lmKGIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZzspdHJ5'@;
put 'e2lmKGI9MSxEJiYoSD0yJnBbMF0/RC5yZXR1cm46cFswXT9ELnRocm93fHwoKEg9RC5yZXR1cm4pJiZILmNhbGwoRCksMCk6RC5uZXh0KSYmIShIPUguY2FsbChELHBbMV0pKS5kb25lKXJldHVybiBIO3N3aXRjaChEPTAsSCYmKHA9WzImcFswXSxILnZhbHVlXSkscFswXSl7Y2FzZSAwOmNh'@;
put 'c2UgMTpIPXA7YnJlYWs7Y2FzZSA0OnJldHVybiBnLmxhYmVsKysse3ZhbHVlOnBbMV0sZG9uZTohMX07Y2FzZSA1OmcubGFiZWwrKyxEPXBbMV0scD1bMF07Y29udGludWU7Y2FzZSA3OnA9Zy5vcHMucG9wKCksZy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoSD0oSD1nLnRy'@;
put 'eXMpLmxlbmd0aD4wJiZIW0gubGVuZ3RoLTFdKXx8NiE9PXBbMF0mJjIhPT1wWzBdKSl7Zz0wO2NvbnRpbnVlfWlmKDM9PT1wWzBdJiYoIUh8fHBbMV0+SFswXSYmcFsxXTxIWzNdKSl7Zy5sYWJlbD1wWzFdO2JyZWFrfWlmKDY9PT1wWzBdJiZnLmxhYmVsPEhbMV0pe2cubGFiZWw9SFsxXSxI'@;
put 'PXA7YnJlYWt9aWYoSCYmZy5sYWJlbDxIWzJdKXtnLmxhYmVsPUhbMl0sZy5vcHMucHVzaChwKTticmVha31IWzJdJiZnLm9wcy5wb3AoKSxnLnRyeXMucG9wKCk7Y29udGludWV9cD1HLmNhbGwoY2UsZyl9Y2F0Y2godyl7cD1bNix3XSxEPTB9ZmluYWxseXtiPUg9MH1pZig1JnBbMF0pdGhy'@;
put 'b3cgcFsxXTtyZXR1cm57dmFsdWU6cFswXT9wWzFdOnZvaWQgMCxkb25lOiEwfX0oW1Msdl0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBU1ZpeWFBcGlDbGllbnQ9dm9pZCAwO3ZhciBFPVIoNTkyOCksaj1SKDYyMzApLFY9UigxMzk1'@;
put 'KSxCPVIoNjkwMyksWT1SKDY3MiksWD1SKDkwOTcpLFU9Uig5Nzc4KSxxPVIoMTM0MyksZWU9Uig3MDQpLHRlPVIoNjQ5Niksb2U9UigxNjIyKSxzZT1SKDM1NjkpLGhlPVIoMzY2KSx1ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGNlKEcsYixELEgpe3RoaXMuc2VydmVyVXJsPUcsdGhpcy5yb290'@;
put 'Rm9sZGVyTmFtZT1iLHRoaXMuY29udGV4dE5hbWU9RCx0aGlzLnJlcXVlc3RDbGllbnQ9SCx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnNlc3Npb25NYW5hZ2VyPW5ldyBCLlNlc3Npb25NYW5hZ2VyKHRoaXMuc2VydmVyVXJsLHRoaXMuY29udGV4dE5hbWUsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlz'@;
put 'LmNvbnRleHRNYW5hZ2VyPW5ldyBZLkNvbnRleHRNYW5hZ2VyKHRoaXMuc2VydmVyVXJsLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5mb2xkZXJNYXA9bmV3IE1hcCxHJiYoMCxFLmlzVXJsKShHKX1yZXR1cm4gY2UucHJvdG90eXBlLmFwcGVuZFJlcXVlc3Q9ZnVuY3Rpb24oRyxiLEQpe3Ro'@;
put 'aXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KEcsYixEKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLnByb3RvdHlwZSwiZGVidWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWd9LHNldDpmdW5jdGlvbihHKXt0aGlzLl9kZWJ1Zz1HLHRoaXMuc2Vzc2lvbk1hbmFn'@;
put 'ZXImJih0aGlzLnNlc3Npb25NYW5hZ2VyLmRlYnVnPUcpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGNlLnByb3RvdHlwZS5nZXRKb2JzSW5Gb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGI7cmV0dXJuIGsodGhp'@;
put 'cyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiBiPSgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJOYW1lLCIvIikuY29uY2F0KEcpOkcsdGhpcy5mb2xkZXJNYXAuZ2V0KGIpP1syLHRoaXMuZm9sZGVyTWFwLmdldChiKV06'@;
put 'WzQsdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChiKV07Y2FzZSAxOnJldHVybiBELnNlbnQoKSxbMix0aGlzLmZvbGRlck1hcC5nZXQoYildfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHJvb3RGb2xkZXJOYW1l'@;
put 'OnRoaXMucm9vdEZvbGRlck5hbWV9fSxjZS5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKEcsYil7RyYmKHRoaXMuc2VydmVyVXJsPUcpLGImJih0aGlzLnJvb3RGb2xkZXJOYW1lPWIpfSxjZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRo'@;
put 'aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0cyhHKV07Y2FzZSAxOnJldHVyblsyLGIuc2VudCgpXX19KX0pfSxjZS5w'@;
put 'cm90b3R5cGUuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9LGNlLnByb3RvdHlwZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldExhdW5jaGVyQ29udGV4dHMoRyldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBl'@;
put 'LmdldEV4ZWN1dGFibGVDb250ZXh0cz1mdW5jdGlvbihHKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIGI9dGhpcy5leGVjdXRlU2NyaXB0LmJpbmQodGhp'@;
put 'cyksWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRFeGVjdXRhYmxlQ29udGV4dHMoYixHKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlU2Vzc2lvbj1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3ZhciBELEgsTjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQ9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYiYmKEQuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KGIpKSxbNCx0aGlzLnJlcXVlc3RDbGll'@;
put 'bnQuZ2V0KCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIsYildO2Nhc2UgMTppZihIPWcuc2VudCgpLnJlc3VsdCwhKE49SC5pdGVtcyYmSC5pdGVtcy5sZW5ndGg/SC5pdGVtcy5maW5kKGZ1bmN0aW9uKEMpe3JldHVybiBDLm5hbWU9PT1HfSk6bnVsbCkpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJFeGVjdXRpb24gY29udGV4dCAiLmNvbmNhdChHLCIgbm90IGZvdW5kLiIpKTtyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiL2NvbXB1dGUvY29udGV4dHMvIi5jb25jYXQoTi5pZCwiL3Nlc3Npb25zIikse30sYildO2Nhc2UgMjpyZXR1cm5bMixnLnNlbnQoKS5yZXN1bHRd'@;
put 'fX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihHLGIsRCxILE4sZyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMu'@;
put 'Y29udGV4dE1hbmFnZXIuY3JlYXRlQ29tcHV0ZUNvbnRleHQoRyxiLEQsSCxOLGcpXTtjYXNlIDE6cmV0dXJuWzIsQy5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVMYXVuY2hlckNvbnRleHQ9ZnVuY3Rpb24oRyxiLEQsSCl7cmV0dXJuIHZvaWQgMD09PUQmJihEPSJkaXJlY3Qi'@;
put 'KSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChHLGIsRCxIKV07Y2FzZSAxOnJldHVyblsyLE4uc2Vu'@;
put 'dCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250'@;
put 'ZXh0TWFuYWdlci5lZGl0Q29tcHV0ZUNvbnRleHQoRyxiLEQpXTtjYXNlIDE6cmV0dXJuWzIsSC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBr'@;
put 'KHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmRlbGV0ZUNvbXB1dGVDb250ZXh0KEcsYildO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24o'@;
put 'RyxiLEQsSCxOLGcsQyxTLHYscCx3KXtyZXR1cm4gdm9pZCAwPT09TiYmKE49bnVsbCksdm9pZCAwPT09ZyYmKGc9ITEpLHZvaWQgMD09PUMmJihDPSExKSx2b2lkIDA9PT1TJiYoUz0hMCksdm9pZCAwPT09cCYmKHA9ITEpLEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGsodGhpcyxmdW5jdGlvbihKKXtyZXR1cm5bMiwoMCxvZS5leGVjdXRlT25Db21wdXRlQXBpKSh0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXNzaW9uTWFuYWdlcix0aGlzLnJvb3RGb2xkZXJOYW1lLEcsYixELEgsTixnLEMsUyx2LHAsdyldfSl9KX0sY2UucHJvdG90eXBlLmdldEZvbGRl'@;
put 'cj1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9'@;
put 'Ii5jb25jYXQoRyksYikudGhlbihmdW5jdGlvbihIKXtyZXR1cm4gSC5yZXN1bHR9KV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbihHLGIsRCxILE4pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3ZhciBnLEM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihTKXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAwOmlmKCFEJiYhSCl0aHJvdyBuZXcgRXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiBIfHwhRD9bMywyXTpbNCx0aGlzLmdldEZv'@;
put 'bGRlclVyaShELE4pXTtjYXNlIDE6SD1TLnNlbnQoKSxTLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBnPXtBY2NlcHQ6ImFwcGxpY2F0aW9uL3ZuZC5zYXMuZmlsZStqc29uIiwiQ29udGVudC1EaXNwb3NpdGlvbiI6J2ZpbGVuYW1lPSInLmNvbmNhdChHLCciOycpfSwoQz1uZXcgaikuYXBwZW5k'@;
put 'KCJmaWxlIixiLEcpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIvZmlsZXMvZmlsZXM/cGFyZW50Rm9sZGVyVXJpPSIuY29uY2F0KEgsIiZ0eXBlRGVmTmFtZT1maWxlI3Jhd1VwbG9hZCIpLEMsTiwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitDLl9ib3VuZGFyeSxnKV07'@;
put 'Y2FzZSAzOnJldHVyblsyLFMuc2VudCgpLnJlc3VsdF19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUZvbGRlcj1mdW5jdGlvbihHLGIsRCxILE4pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEMsUyx2LHc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihKKXtz'@;
put 'd2l0Y2goSi5sYWJlbCl7Y2FzZSAwOmlmKGc9ei5sb2dnZXJ8fEssIWImJiFEKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7cmV0dXJuIER8fCFiP1szLDZdOls0LHRoaXMuZ2V0Rm9sZGVyVXJpKGIsSCldO2Nhc2UgMTpp'@;
put 'ZihEPUouc2VudCgpKXJldHVyblszLDNdO2lmKGcuaW5mbygiUGFyZW50IGZvbGRlciBhdCBwYXRoICciLmNvbmNhdChiLCInIGlzIG5vdCBwcmVzZW50LiIpKSxDPWIuc3Vic3RyaW5nKDAsYi5sYXN0SW5kZXhPZigiLyIpKSxTPSIiLmNvbmNhdChiLnNwbGl0KCIvIikucG9wKCkpLCIiPT09'@;
put 'Qyl0aHJvdyBuZXcgVi5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcihiLHRoaXMuc2VydmVyVXJsLEgpO3JldHVybiBnLmluZm8oIkNyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nIi5jb25jYXQoUywiJyBpbiAnIikuY29uY2F0KEMsIiciKSksWzQsdGhpcy5jcmVhdGVGb2xkZXIoUyxDLHZvaWQg'@;
put 'MCxIKV07Y2FzZSAyOnJldHVybiB2PUouc2VudCgpLGcuaW5mbygiUGFyZW50IGZvbGRlciAnIi5jb25jYXQoUywiJyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC4iKSksRD0iL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdCh2LmlkKSxbMyw2XTtjYXNlIDM6cmV0dXJuIE4/WzQsdGhp'@;
put 'cy5nZXRGb2xkZXJVcmkoYisiLyIrRyxIKV06WzMsNl07Y2FzZSA0OnJldHVybiBKLnNlbnQoKT9bNCx0aGlzLmRlbGV0ZUZvbGRlcihiKyIvIitHLEgpXTpbMyw2XTtjYXNlIDU6Si5zZW50KCksSi5sYWJlbD02O2Nhc2UgNjpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiL2Zv'@;
put 'bGRlcnMvZm9sZGVycz9wYXJlbnRGb2xkZXJVcmk9Ii5jb25jYXQoRCkse25hbWU6Ryx0eXBlOiJmb2xkZXIifSxIKS5jYXRjaChmdW5jdGlvbihuZSl7dmFyIGRlPW5lLm1lc3NhZ2UsZmU9bmUucmVzcG9uc2U7aWYoZGUmJmZlJiZmZS5kYXRhJiZmZS5kYXRhLm1lc3NhZ2Upe3ZhciB4ZT1m'@;
put 'ZS5zdGF0dXMsTGU9W2RlLGZlLmRhdGEubWVzc2FnZV0ubWFwKGZ1bmN0aW9uKEZlKXtyZXR1cm4vXC4kLy50ZXN0KEZlKT9GZToiIi5jb25jYXQoRmUsIi4iKX0pO3Rocm93IE58fDQwOSE9PXhlfHxMZS5wdXNoKCdUbyBvdmVycmlkZSwgcGxlYXNlIHNldCAiaXNGb3JjZWQiIHRvICJ0cnVl'@;
put 'Ii4nKSxMZS5qb2luKCIgIil9dGhyb3cgbmV9KV07Y2FzZSA3OnJldHVybiB3PUouc2VudCgpLnJlc3VsdCxbNCx0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKCIiLmNvbmNhdChiLCIvIikuY29uY2F0KEcpLEgpXTtjYXNlIDg6cmV0dXJuIEouc2VudCgpLFsyLHddfX0pfSl9LGNlLnByb3RvdHlw'@;
put 'ZS5jcmVhdGVKb2JEZWZpbml0aW9uPWZ1bmN0aW9uKEcsYixELEgsTil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOmlmKCFEJiYhSCl0aHJvdyBuZXcgRXJyb3IoIlBhdGggdG8g'@;
put 'b3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiBIfHwhRD9bMywyXTpbNCx0aGlzLmdldEZvbGRlclVyaShELE4pXTtjYXNlIDE6SD1nLnNlbnQoKSxnLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIiLmNvbmNh'@;
put 'dCh0aGlzLnNlcnZlclVybCwiL2pvYkRlZmluaXRpb25zL2RlZmluaXRpb25zP3BhcmVudEZvbGRlclVyaT0iKS5jb25jYXQoSCkse25hbWU6RyxwYXJhbWV0ZXJzOlt7bmFtZToiX2FkZGplc2JlZ2luZW5kbWFjcm9zIix0eXBlOiJDSEFSQUNURVIiLGRlZmF1bHRWYWx1ZToiZmFsc2UifV0s'@;
put 'dHlwZToiQ29tcHV0ZSIsY29kZTpifSxOKV07Y2FzZSAzOnJldHVyblsyLGcuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0QXV0aENvZGU9ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRD10aGlzO3JldHVybiBrKHRoaXMsZnVu'@;
put 'Y3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSIpLmNvbmNhdChHLCImcmVzcG9uc2VfdHlwZT1jb2RlIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChi'@;
put 'LHZvaWQgMCwidGV4dC9wbGFpbiIpLnRoZW4oZnVuY3Rpb24oTil7cmV0dXJuIE4ucmVzdWx0fSkudGhlbihmdW5jdGlvbihOKXtyZXR1cm4gSShELHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDLFMsdjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHApe3N3aXRjaChwLmxhYmVsKXtj'@;
put 'YXNlIDA6cmV0dXJuIGc9IiIsKDAsWC5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoTik/WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShOKV06WzMsMl07Y2FzZSAxOnJldHVybiBDPXAuc2VudCgpLFM9Qy5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSwodj1k'@;
put 'b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPVMsWzIsZz12LnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0XTtjYXNlIDI6cmV0dXJuIFM9Ti5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSwodj1kb2N1bWVudC5jcmVhdGVF'@;
put 'bGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPVMsdiYmKGc9di5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCksWzIsZ119fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KV07Y2FzZSAxOnJldHVyblsyLEguc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUu'@;
put 'Z2V0QWNjZXNzVG9rZW49ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7cmV0dXJuWzIsKDAsc2UuZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhKSh0aGlzLnJlcXVlc3RDbGllbnQsRyxiLEQpXX0pfSl9'@;
put 'LGNlLnByb3RvdHlwZS5yZWZyZXNoVG9rZW5zPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3JldHVyblsyLCgwLGhlLnJlZnJlc2hUb2tlbnNGb3JWaXlhKSh0aGlzLnJlcXVlc3RDbGllbnQs'@;
put 'RyxiLEQpXX0pfSl9LGNlLnByb3RvdHlwZS5kZWxldGVDbGllbnQ9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxIO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRD10aGlzLnNl'@;
put 'cnZlclVybCsiL29hdXRoL2NsaWVudHMvIi5jb25jYXQoRyksSD17fSxiJiYoSC5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQoYikpLFs0LHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoRCxiKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpLnJlc3VsdF19fSl9KX0sY2UucHJvdG90'@;
put 'eXBlLmV4ZWN1dGVDb21wdXRlSm9iPWZ1bmN0aW9uKEcsYixELEgsTixnLEMsUyx2LHApe3JldHVybiB2b2lkIDA9PT1nJiYoZz0hMCksdm9pZCAwPT09QyYmKEM9ITEpLHZvaWQgMD09PXYmJih2PSExKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB3LEosbmUsZGUsZmUs'@;
put 'eGUsTGUsRmUsT2UsamUsV2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihLZSl7c3dpdGNoKEtlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHc9KE58fHt9KS5hY2Nlc3NfdG9rZW4sTj9bNCwoMCxlZS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxOKV06WzMsMl07Y2FzZSAxOnc9S2Uuc2Vu'@;
put 'dCgpLmFjY2Vzc190b2tlbixLZS5sYWJlbD0yO2Nhc2UgMjppZigoMCxFLmlzUmVsYXRpdmVQYXRoKShHKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBu'@;
put 'YW1lIik7cmV0dXJuIEo9Ry5zcGxpdCgiLyIpLG5lPUoucG9wKCksZGU9Si5qb2luKCIvIiksZmU9KDAsRS5pc1JlbGF0aXZlUGF0aCkoRyk/IiIuY29uY2F0KHRoaXMucm9vdEZvbGRlck5hbWUsIi8iKS5jb25jYXQoZGUpOmRlLFs0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoZmUsdykuY2F0'@;
put 'Y2goZnVuY3Rpb24oWWUpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKShZZSwiRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmb2xkZXIgbWFwLiAiKX0pXTtjYXNlIDM6aWYoS2Uuc2VudCgpLCEoeGU9dGhpcy5mb2xkZXJNYXAuZ2V0KGZlKSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZm9sZGVyICci'@;
put 'LmNvbmNhdChmZSwiJyB3YXMgbm90IGZvdW5kIG9uICciKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIiciKSk7aWYoIShMZT14ZT8uZmluZChmdW5jdGlvbihZZSl7cmV0dXJuIFllLm5hbWU9PT1uZX0pKSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2lmKEZlPUxlPy5j'@;
put 'b2RlKXJldHVyblszLDVdO2lmKCEoT2U9TGU/LmxpbmtzLmZpbmQoZnVuY3Rpb24oWWUpe3JldHVybiJnZXRSZXNvdXJjZSI9PT1ZZS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJVUkkgb2Ygam9iIGRlZmluaXRpb24gd2FzIG5vdCBmb3VuZC4iKTtyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGll'@;
put 'bnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KE9lLmhyZWYpLHcpLmNhdGNoKGZ1bmN0aW9uKFllKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoWWUsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iIGRlZmluaXRpb24uICIpfSldO2Nhc2UgNDpqZT1LZS5zZW50KCkucmVz'@;
put 'dWx0LExlLmNvZGU9RmU9amUuY29kZSxLZS5sYWJlbD01O2Nhc2UgNTpyZXR1cm4gRmV8fChGZT0iIiksV2U9RmUucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnNwbGl0KCJcbiIpLFs0LHRoaXMuZXhlY3V0ZVNjcmlwdChHLFdlLGIsTixILEQsQyxnLFMsdixwKV07Y2FzZSA2OnJldHVyblsyLEtl'@;
put 'LnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rpb24oRyxiLEQsSCxOKXt2YXIgZyxDLFM7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHYscCx3LEosbmUsZGUsZmUseGUsTGUsRmUsT2UsamUsV2UsS2UsWWUsSmUsbHQsUGUsYmUs'@;
put 'QWUsVGU7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihxZSl7c3dpdGNoKHFlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHY9KE58fHt9KS5hY2Nlc3NfdG9rZW4sTj9bNCwoMCxlZS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxOKV06WzMsMl07Y2FzZSAxOnY9cWUuc2VudCgpLmFjY2Vzc190'@;
put 'b2tlbixxZS5sYWJlbD0yO2Nhc2UgMjppZigoMCxFLmlzUmVsYXRpdmVQYXRoKShHKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lLiIpO3JldHVy'@;
put 'biBwPUcuc3BsaXQoIi8iKSx3PXAucG9wKCksSj1wLmpvaW4oIi8iKSxuZT0oMCxFLmlzUmVsYXRpdmVQYXRoKShHKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChKKTpKLFs0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAobmUsdildO2Nhc2UgMzppZihxZS5zZW50'@;
put 'KCksIShkZT10aGlzLmZvbGRlck1hcC5nZXQobmUpKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBmb2xkZXIgJyIuY29uY2F0KG5lLCInIHdhcyBub3QgZm91bmQgb24gJyIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiJy4iKSk7cmV0dXJuIGZlPWRlPy5maW5kKGZ1bmN0aW9uKFhlKXtyZXR1cm4g'@;
put 'WGUubmFtZT09PXd9KSx4ZT1bXSxIJiZPYmplY3Qua2V5cyhIKS5sZW5ndGg/WzQsdGhpcy51cGxvYWRUYWJsZXMoSCx2KV06WzMsNV07Y2FzZSA0OnhlPXFlLnNlbnQoKSxxZS5sYWJlbD01O2Nhc2UgNTppZighZmUpdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBmb3VuZC4iKTtyZXR1'@;
put 'cm4gTGU9bnVsbD09PShnPWZlPy5saW5rcy5maW5kKGZ1bmN0aW9uKFhlKXtyZXR1cm4iZ2V0UmVzb3VyY2UiPT09WGUucmVsfSkpfHx2b2lkIDA9PT1nP3ZvaWQgMDpnLmhyZWYsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChMZSks'@;
put 'dildO2Nhc2UgNjpyZXR1cm4gRmU9cWUuc2VudCgpLnJlc3VsdCxPZT17X2NvbnRleHROYW1lOmIsX3Byb2dyYW06IiIuY29uY2F0KG5lLCIvIikuY29uY2F0KHcpLF93ZWJpbl9maWxlX2NvdW50OnhlLmxlbmd0aCxfT01JVEpTT05MSVNUSU5HOiEwLF9PTUlUSlNPTkxPRzohMCxfT01JVFNF'@;
put 'U1NJT05SRVNVTFRTOiEwLF9PTUlUVEVYVExJU1RJTkc6ITAsX09NSVRURVhUTE9HOiEwfSxEJiYoT2UuX09NSVRURVhUTE9HPSJmYWxzZSIsT2UuX09NSVRTRVNTSU9OUkVTVUxUUz0iZmFsc2UiLE9lLl9ERUJVRz0xMzEpLHhlLmZvckVhY2goZnVuY3Rpb24oWGUsVWUpe09lWyJfd2ViaW5f'@;
put 'ZmlsZXVyaSIuY29uY2F0KFVlKzEpXT0iL2ZpbGVzL2ZpbGVzLyIuY29uY2F0KFhlLmZpbGUuaWQpLE9lWyJfd2ViaW5fbmFtZSIuY29uY2F0KFVlKzEpXT1YZS50YWJsZU5hbWV9KSxqZT17bmFtZToiZXhlYy0iLmNvbmNhdCh3KSxkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsam9i'@;
put 'RGVmaW5pdGlvbjpGZSxhcmd1bWVudHM6T2V9LFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2pvYkV4ZWN1dGlvbi9qb2JzP19hY3Rpb249d2FpdCIpLGplLHYpXTtjYXNlIDc6cmV0dXJuIFdlPXFlLnNlbnQoKS5yZXN1bHQsWzQsdGhpcy5w'@;
put 'b2xsSm9iU3RhdGUoV2UsTikuY2F0Y2goZnVuY3Rpb24oWGUpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKShYZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pXTtjYXNlIDg6cmV0dXJuIEtlPXFlLnNlbnQoKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNh'@;
put 'dCh0aGlzLnNlcnZlclVybCwiL2pvYkV4ZWN1dGlvbi9qb2JzLyIpLmNvbmNhdChXZS5pZCksdildO2Nhc2UgOTpyZXR1cm4gWWU9cWUuc2VudCgpLnJlc3VsdCxQZT1ZZS5yZXN1bHRzWyJfd2Vib3V0Lmpzb24iXSxiZT1ZZS5saW5rcy5maW5kKGZ1bmN0aW9uKFhlKXtyZXR1cm4ibG9nIj09'@;
put 'PVhlLnJlbH0pLFBlP1s0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoUGUsIi9jb250ZW50IiksdiwidGV4dC9wbGFpbiIpXTpbMywxMV07Y2FzZSAxMDpKZT1xZS5zZW50KCkscWUubGFiZWw9MTE7Y2FzZSAxMTpyZXR1cm4gRCYmYmU/'@;
put 'WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChiZS5ocmVmLCIvY29udGVudCIpLHYpLnRoZW4oZnVuY3Rpb24oWGUpe3JldHVybiBYZS5yZXN1bHQuaXRlbXMubWFwKGZ1bmN0aW9uKFVlKXtyZXR1cm4gVWUubGluZX0pLmpvaW4oIlxu'@;
put 'Iil9KV06WzMsMTNdO2Nhc2UgMTI6bHQ9cWUuc2VudCgpLHFlLmxhYmVsPTEzO2Nhc2UgMTM6aWYoImZhaWxlZCI9PT1LZSl0aHJvdyBuZXcgVi5Kb2JFeGVjdXRpb25FcnJvcihudWxsPT09KEM9WWUuZXJyb3IpfHx2b2lkIDA9PT1DP3ZvaWQgMDpDLmVycm9yQ29kZSxudWxsPT09KFM9WWUu'@;
put 'ZXJyb3IpfHx2b2lkIDA9PT1TP3ZvaWQgMDpTLm1lc3NhZ2UsbHQpO3JldHVybiBBZT17cmVzdWx0OkplPy5yZXN1bHQsbG9nOmx0fSwoVGU9WWUuZXJyb3IpJiYoQWUuZXJyb3I9VGUpLFsyLEFlXX19KX0pfSxjZS5wcm90b3R5cGUucG9wdWxhdGVGb2xkZXJNYXA9ZnVuY3Rpb24oRyxiKXty'@;
put 'ZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxOLGc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihTKXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAwOnJldHVybiBEPSgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJOYW1lLCIvIiku'@;
put 'Y29uY2F0KEcpOkcsdGhpcy5mb2xkZXJNYXAuZ2V0KEQpP1syXTpbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCgiL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIrRCksYikuY2F0Y2goZnVuY3Rpb24odil7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHYsIkVycm9yIHdo'@;
put 'aWxlIGdldHRpbmcgZm9sZGVyLiAiKX0pXTtjYXNlIDE6aWYoIShOPVMuc2VudCgpLnJlc3VsdCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGF0aCAiLmNvbmNhdChELCIgZG9lcyBub3QgZXhpc3Qgb24gIikuY29uY2F0KHRoaXMuc2VydmVyVXJsKSk7cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xp'@;
put 'ZW50LmdldCgiL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdChOLmlkLCIvbWVtYmVycz9saW1pdD0iKS5jb25jYXQoTi5tZW1iZXJDb3VudDw1MDA/NTAwOk4ubWVtYmVyQ291bnQpLGIpLmNhdGNoKGZ1bmN0aW9uKHYpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh2LCJFcnJvciB3aGlsZSBn'@;
put 'ZXR0aW5nIG1lbWJlcnMuICIpfSldO2Nhc2UgMjpyZXR1cm4gZz1TLnNlbnQoKS5yZXN1bHQsdGhpcy5mb2xkZXJNYXAuc2V0KEQsZy5pdGVtcyksWzJdfX0pfSl9LGNlLnByb3RvdHlwZS5wb2xsSm9iU3RhdGU9ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7cmV0dXJuWzIsKDAscS5wb2xsSm9iU3RhdGUpKHRoaXMucmVxdWVzdENsaWVudCxHLHRoaXMuZGVidWcsYixEKV19KX0pfSxjZS5wcm90b3R5cGUudXBsb2FkVGFibGVzPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtyZXR1cm5bMiwoMCx0ZS51cGxvYWRUYWJsZXMpKHRoaXMucmVxdWVzdENsaWVudCxHLGIpXX0pfSl9LGNlLnByb3RvdHlwZS5nZXRGb2xkZXJEZXRhaWxzPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsSDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQ9KDAsRS5pc1VyaSkoRyk/RzoiL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIuY29uY2F0KEcpLFs0LHRoaXMucmVxdWVzdENs'@;
put 'aWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoRCksYikuY2F0Y2goZnVuY3Rpb24oZyl7aWYoZyBpbnN0YW5jZW9mIFYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBnO3JldHVybntyZXN1bHQ6bnVsbH19KV07Y2FzZSAxOnJldHVybihIPU4uc2VudCgpLnJlc3VsdCk/'@;
put 'WzIsSF06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Rm9sZGVyVXJpPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQ7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJlbCl7Y2FzZSAwOnJldHVybls0'@;
put 'LHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhHLGIpXTtjYXNlIDE6cmV0dXJuKEQ9SC5zZW50KCkpP1syLCIvZm9sZGVycy9mb2xkZXJzLyIuY29uY2F0KEQuaWQpXTpbMix2b2lkIDBdfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRSZWN5Y2xlQmluVXJpPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KCIvZm9sZGVycy9mb2xkZXJzL0Bt'@;
put 'eVJlY3ljbGVCaW4iKSxHKS5jYXRjaChmdW5jdGlvbihIKXtpZihIIGluc3RhbmNlb2YgVi5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IEg7cmV0dXJue3Jlc3VsdDpudWxsfX0pXTtjYXNlIDE6cmV0dXJuKGI9RC5zZW50KCkucmVzdWx0KT9bMiwiL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdChi'@;
put 'LmlkKV06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWU9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShHLGIpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5SWQ9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5SWQoRyxiKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUubGlz'@;
put 'dEZvbGRlcj1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIHZvaWQgMD09PUQmJihEPTIwKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBILE4sZztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6cmV0dXJuKDAsRS5pc1VyaSkoRyk/KE49'@;
put 'RyxbMywzXSk6WzMsMV07Y2FzZSAxOnJldHVybls0LHRoaXMuZ2V0Rm9sZGVyVXJpKEcsYildO2Nhc2UgMjpOPUMuc2VudCgpLEMubGFiZWw9MztjYXNlIDM6cmV0dXJuIEg9TixbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KEgsIi9t'@;
put 'ZW1iZXJzP2xpbWl0PSIpLmNvbmNhdChEKSxiKV07Y2FzZSA0OnJldHVybihnPUMuc2VudCgpLnJlc3VsdCkmJmcuaXRlbXM/WzIsZy5pdGVtcy5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFMubmFtZX0pXTpbMixbXV19fSl9KX0sY2UucHJvdG90eXBlLm1vdmVGb2xkZXI9ZnVuY3Rpb24oRyxi'@;
put 'LEQsSCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE4sZyxDLFMsdixwO3JldHVybiBrKHRoaXMsZnVuY3Rpb24odyl7c3dpdGNoKHcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gTj1HLnNwbGl0KCIvIikucG9wKCksWzQsdGhpcy5nZXRGb2xkZXJEZXRhaWxzKGIs'@;
put 'SCldO2Nhc2UgMTpyZXR1cm4gdy5zZW50KCk/RD1OOigoZz1iLnNwbGl0KCIvIikpLnNwbGljZShnLmxlbmd0aC0xLDEpLGI9Zy5qb2luKCIvIikpLFs0LHRoaXMuZ2V0Rm9sZGVyVXJpKEcsSCldO2Nhc2UgMjpyZXR1cm4gQz13LnNlbnQoKSxbNCx0aGlzLmdldEZvbGRlclVyaShiLEgpXTtj'@;
put 'YXNlIDM6cmV0dXJuIFM9dy5zZW50KCksQz8odj1DPy5zcGxpdCgiLyIpLnBvcCgpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wYXRjaCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChDKSx7aWQ6dixuYW1lOkQscGFyZW50Rm9sZGVyVXJpOlN9LEgpLmNhdGNoKGZ1bmN0aW9uKEop'@;
put 'e3Rocm93IEouY29kZSYmIkVOT1RGT1VORCI9PT1KLmNvZGU/e2JvZHk6e21lc3NhZ2U6IkZvbGRlciAnIi5jb25jYXQoRy5zcGxpdCgiLyIpLnBvcCgpLCInIHdhcyBub3QgZm91bmQuIil9fTpKfSldKTpbMix2b2lkIDBdO2Nhc2UgNDpyZXR1cm4ocD13LnNlbnQoKS5yZXN1bHQpP1syLHBd'@;
put 'OlsyLHZvaWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmRlbGV0ZUZvbGRlcj1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEgsTixnO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm5b'@;
put 'NCx0aGlzLmdldFJlY3ljbGVCaW5VcmkoYildO2Nhc2UgMTpyZXR1cm4gRD1TLnNlbnQoKSxIPUcuc3BsaXQoIi8iKS5wb3AoKXx8IiIsZz0oTj1uZXcgRGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCkrIiAiK04udG9Mb2NhbGVUaW1lU3RyaW5nKCksWzQsdGhpcy5tb3ZlRm9sZGVyKEcsRCxI'@;
put 'KyIgIitnLGIpXTtjYXNlIDI6cmV0dXJuWzIsUy5zZW50KCldfX0pfSl9LGNlfSgpO08uU0FTVml5YUFwaUNsaWVudD11ZX0sNTk1NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHo9T2JqZWN0LmFzc2ln'@;
put 'bnx8ZnVuY3Rpb24oaGUpe2Zvcih2YXIgdWUsY2U9MSxHPWFyZ3VtZW50cy5sZW5ndGg7Y2U8RztjZSsrKWZvcih2YXIgYiBpbiB1ZT1hcmd1bWVudHNbY2VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1ZSxiKSYmKGhlW2JdPXVlW2JdKTtyZXR1cm4gaGV9LHouYXBw'@;
put 'bHkodGhpcyxhcmd1bWVudHMpfSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihoZSx1ZSxjZSxHKXtyZXR1cm4gbmV3KGNlfHwoY2U9UHJvbWlzZSkpKGZ1bmN0aW9uKGIsRCl7ZnVuY3Rpb24gSChDKXt0cnl7ZyhHLm5leHQoQykpfWNhdGNoKFMpe0QoUyl9fWZ1bmN0aW9uIE4o'@;
put 'Qyl7dHJ5e2coRy50aHJvdyhDKSl9Y2F0Y2goUyl7RChTKX19ZnVuY3Rpb24gZyhDKXt2YXIgUztDLmRvbmU/YihDLnZhbHVlKTooUz1DLnZhbHVlLFMgaW5zdGFuY2VvZiBjZT9TOm5ldyBjZShmdW5jdGlvbih2KXt2KFMpfSkpLnRoZW4oSCxOKX1nKChHPUcuYXBwbHkoaGUsdWV8fFtdKSku'@;
put 'bmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGhlLHVlKXt2YXIgY2UsRyxiLEQsSD17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZiWzBdKXRocm93IGJbMV07cmV0dXJuIGJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gRD17bmV4dDpOKDApLHRo'@;
put 'cm93Ok4oMSkscmV0dXJuOk4oMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihEW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEQ7ZnVuY3Rpb24gTihnKXtyZXR1cm4gZnVuY3Rpb24oQyl7cmV0dXJuIGZ1bmN0aW9uKFMpe2lmKGNlKXRocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0g7KXRyeXtpZihjZT0xLEcmJihiPTImU1swXT9HLnJldHVybjpTWzBdP0cudGhyb3d8fCgoYj1HLnJldHVybikmJmIuY2FsbChHKSwwKTpHLm5leHQpJiYhKGI9Yi5jYWxsKEcsU1sxXSkpLmRvbmUpcmV0'@;
put 'dXJuIGI7c3dpdGNoKEc9MCxiJiYoUz1bMiZTWzBdLGIudmFsdWVdKSxTWzBdKXtjYXNlIDA6Y2FzZSAxOmI9UzticmVhaztjYXNlIDQ6cmV0dXJuIEgubGFiZWwrKyx7dmFsdWU6U1sxXSxkb25lOiExfTtjYXNlIDU6SC5sYWJlbCsrLEc9U1sxXSxTPVswXTtjb250aW51ZTtjYXNlIDc6Uz1I'@;
put 'Lm9wcy5wb3AoKSxILnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChiPShiPUgudHJ5cykubGVuZ3RoPjAmJmJbYi5sZW5ndGgtMV0pfHw2IT09U1swXSYmMiE9PVNbMF0pKXtIPTA7Y29udGludWV9aWYoMz09PVNbMF0mJighYnx8U1sxXT5iWzBdJiZTWzFdPGJbM10pKXtILmxh'@;
put 'YmVsPVNbMV07YnJlYWt9aWYoNj09PVNbMF0mJkgubGFiZWw8YlsxXSl7SC5sYWJlbD1iWzFdLGI9UzticmVha31pZihiJiZILmxhYmVsPGJbMl0pe0gubGFiZWw9YlsyXSxILm9wcy5wdXNoKFMpO2JyZWFrfWJbMl0mJkgub3BzLnBvcCgpLEgudHJ5cy5wb3AoKTtjb250aW51ZX1TPXVlLmNh'@;
put 'bGwoaGUsSCl9Y2F0Y2godil7Uz1bNix2XSxHPTB9ZmluYWxseXtjZT1iPTB9aWYoNSZTWzBdKXRocm93IFNbMV07cmV0dXJue3ZhbHVlOlNbMF0/U1sxXTp2b2lkIDAsZG9uZTohMH19KFtnLENdKX19fSxrPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oaGUsdWUsY2Upe2lm'@;
put 'KGNlfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIEcsYj0wLEQ9dWUubGVuZ3RoO2I8RDtiKyspIUcmJmIgaW4gdWV8fChHfHwoRz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh1ZSwwLGIpKSxHW2JdPXVlW2JdKTtyZXR1cm4gaGUuY29uY2F0KEd8fEFycmF5LnByb3RvdHlwZS5z'@;
put 'bGljZS5jYWxsKHVlKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRT1SKDU5MjgpLGo9UigxMjMwKSxWPVIoOTgyMSksQj1SKDgzMDYpLFk9UigzNDY3KSxYPVIoMTUyNyksVT1SKDM5MDApLHE9Uig0NTg4KSxlZT1SKDM2MDIpLHRlPVIo'@;
put 'ODIxNyksb2U9e3NlcnZlclVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIscGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6VS5TZXJ2ZXJU'@;
put 'eXBlLlNhc1ZpeWEsZGVidWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOmouTG9naW5NZWNoYW5pc20uRGVmYXVsdH0sc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBoZSh1ZSl7dmFyIGNl'@;
put 'PXRoaXM7dGhpcy5zYXNqc0NvbmZpZz1uZXcgai5TQVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIiLHRoaXMuc2FzVml5YUFwaUNsaWVudD1udWxsLHRoaXMuc2FzOUFwaUNsaWVudD1udWxsLHRoaXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZpbGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0'@;
put 'aE1hbmFnZXI9bnVsbCx0aGlzLnJlcXVlc3RDbGllbnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9'@;
put 'bnVsbCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiBLKGNlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxiLEQsSCxOO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxudWxsPT09KEc9dGhp'@;
put 'cy53ZWJKb2JFeGVjdXRvcil8fHZvaWQgMD09PUc/dm9pZCAwOkcucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgMTpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShiPXRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Yj92b2lkIDA6Yi5yZXNlbmRXYWl0aW5nUmVxdWVz'@;
put 'dHMoKV07Y2FzZSAyOnJldHVybiBnLnNlbnQoKSxbNCxudWxsPT09KEQ9dGhpcy5qZXNKb2JFeGVjdXRvcil8fHZvaWQgMD09PUQ/dm9pZCAwOkQucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgMzpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShIPXRoaXMuZmlsZVVwbG9hZGVyKXx8'@;
put 'dm9pZCAwPT09SD92b2lkIDA6SC5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKV07Y2FzZSA0OnJldHVybiBnLnNlbnQoKSxbNCxudWxsPT09KE49dGhpcy5zYXNqc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Tj92b2lkIDA6Ti5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKV07Y2FzZSA1OnJldHVybiBn'@;
put 'LnNlbnQoKSxbMl19fSl9KX0sdGhpcy5zZXRWZXJib3NlTW9kZT1mdW5jdGlvbihHKXt2YXIgYjtudWxsPT09KGI9Y2UucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWJ8fGIuc2V0VmVyYm9zZU1vZGUoRyl9LHRoaXMuc2FzanNDb25maWc9eih6KHt9LG9lKSx1ZSksdGhpcy5zZXR1cENvbmZp'@;
put 'Z3VyYXRpb24oKX1yZXR1cm4gaGUucHJvdG90eXBlLmdldENzcmZUb2tlbj1mdW5jdGlvbih1ZSl7dmFyIGNlO3JldHVybiB2b2lkIDA9PT11ZSYmKHVlPSJnZW5lcmFsIiksbnVsbD09PShjZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2UuZ2V0Q3NyZlRva2Vu'@;
put 'KHVlKX0saGUucHJvdG90eXBlLmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24odWUpe3ZhciBjZSxHLGI9dWUubGluZXNPZkNvZGUsRD11ZS5maWxlTmFtZSxIPXVlLmNvbnRleHROYW1lLE49dWUucnVuVGltZSxnPXVlLmF1dGhDb25maWcsQz11ZS5hdXRoQ29uZmlnU2FzOSxTPXVlLmRlYnVnO3Jl'@;
put 'dHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDppZih0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbVS5TZXJ2ZXJUeXBlLlNhczksVS5TZXJ2ZXJUeXBlLlNhc2pz'@;
put 'LFUuU2VydmVyVHlwZS5TYXNWaXlhXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhczkpcmV0dXJuWzMsMl07aWYoIUMpdGhyb3cgbmV3IEVycm9yKCJBdXRoIGNvbmZpZyBmb3Igc2FzOSBpcyBub3QgcHJvdmlkZWQiKTtyZXR1cm5bNCxudWxsPT09KGNl'@;
put 'PXRoaXMuc2FzOUFwaUNsaWVudCl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZS5leGVjdXRlU2NyaXB0KGIsQy51c2VyTmFtZSxDLnBhc3N3b3JkKV07Y2FzZSAxOmNhc2UgMzpjYXNlIDU6cmV0dXJuWzIsdi5zZW50KCldO2Nhc2UgMjpyZXR1cm4gdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBl'@;
put 'IT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDRdOls0LG51bGw9PT0oRz10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09Rz92b2lkIDA6Ry5leGVjdXRlU2NyaXB0KGIuam9pbigiXG4iKSxOLGcpXTtjYXNlIDQ6aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJU'@;
put 'eXBlLlNhc1ZpeWEpcmV0dXJuWzMsNl07aWYoIShIPUh8fHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25m'@;
put 'aWcuIik7aWYoIUQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIG5hbWUgaXMgcmVxdWlyZWQgaW4gY2FzZSBvZiBTQVMgVklZQS4gUGxlYXNlIHByb3ZpZGUgYSBgZmlsZU5hbWVgLiIpO3JldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5leGVjdXRlU2NyaXB0KEQsYixILGcsbnVsbCxTfHx0'@;
put 'aGlzLnNhc2pzQ29uZmlnLmRlYnVnKV07Y2FzZSA2OnJldHVyblsyXX19KX0pfSxoZS5wcm90b3R5cGUuZXhlY3V0ZUpvYj1mdW5jdGlvbih1ZSxjZSxHKXt2YXIgYjtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRj'@;
put 'aChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtVLlNlcnZlclR5cGUuU2FzanNdKSxbNCxudWxsPT09KGI9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PWI/dm9pZCAwOmIuZXhlY3V0ZUpvYih1ZSxjZSxHKV07Y2Fz'@;
put 'ZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpy'@;
put 'ZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRzKHVlKV07Y2FzZSAxOnJldHVyblsyLGNlLnNlbnQoKV19fSl9KX0saGUucHJvdG90'@;
put 'eXBlLmdldExhdW5jaGVyQ29udGV4dHM9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRMYXVu'@;
put 'Y2hlckNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0TGF1bmNoZXJDb250ZXh0cyh1ZSldO2Nhc2UgMTpyZXR1cm5bMixjZS5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldERlZmF1bHRDb21wdXRlQ29udGV4dHMiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl9LGhlLnByb3RvdHlwZS5nZXRFeGVjdXRhYmxl'@;
put 'Q29udGV4dHM9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRFeGVjdXRhYmxlQ29udGV4dHMi'@;
put 'LFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRFeGVjdXRhYmxlQ29udGV4dHModWUpXTtjYXNlIDE6cmV0dXJuWzIsY2Uuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24odWUsY2UsRyxiLEQs'@;
put 'SCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVDb21wdXRlQ29udGV4dCIsW1UuU2VydmVyVHlwZS5TYXNWaXlh'@;
put 'XSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUNvbXB1dGVDb250ZXh0KHVlLGNlLEcsYixELEgpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVMYXVuY2hlckNvbnRleHQ9ZnVuY3Rpb24odWUsY2UsRyxiKXtyZXR1cm4gSyh0aGlz'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUxhdW5jaGVyQ29udGV4dCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNW'@;
put 'aXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29udGV4dCh1ZSxjZSxHLGIpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5lZGl0Q29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24odWUsY2UsRyl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJlZGl0Q29tcHV0ZUNvbnRleHQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5lZGl0Q29tcHV0ZUNv'@;
put 'bnRleHQodWUsY2UsRyldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmRlbGV0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3'@;
put 'aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNvbnRleHQodWUsY2UpXTtjYXNlIDE6cmV0dXJu'@;
put 'WzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZT1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVy'@;
put 'biB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5TmFtZSIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlOYW1lKHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxo'@;
put 'ZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0'@;
put 'ZWQoImdldENvbXB1dGVDb250ZXh0QnlJZCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZCh1ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmNyZWF0ZVNlc3Npb249'@;
put 'ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlU2Vzc2lvbiIsW1UuU2VydmVyVHlwZS5T'@;
put 'YXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24odWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVGb2xkZXI9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBEP1s0LEQuY3JlYXRlRm9sZGVyKHVlLGNlLEcsYixIKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixOLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2Fz'@;
put 'Vml5YUFwaUNsaWVudC5jcmVhdGVGb2xkZXIodWUsY2UsRyxiLEgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbih1ZSxjZSxHLGIsRCxIKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRj'@;
put 'aChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEg/WzQsSC5jcmVhdGVGaWxlKHVlLGNlLEcsYixEKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixOLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGaWxlKHVlLGNlLEcsYixEKV19fSl9KX0s'@;
put 'aGUucHJvdG90eXBlLmdldEZvbGRlcj1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRGb2xk'@;
put 'ZXIiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRGb2xkZXIodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5kZWxldGVGb2xkZXI9ZnVuY3Rpb24odWUsY2Upe3ZhciBHO3JldHVybiBLKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlRm9sZGVyIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCxudWxsPT09KEc9dGhpcy5zYXNW'@;
put 'aXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Rz92b2lkIDA6Ry5kZWxldGVGb2xkZXIodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5saXN0Rm9sZGVyPWZ1bmN0aW9uKHVlLGNlLEcpe3ZhciBiO3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibGlzdEZvbGRlciIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsbnVsbD09PShiPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZv'@;
put 'aWQgMD09PWI/dm9pZCAwOmIubGlzdEZvbGRlcih1ZSxjZSxHKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUubW92ZUZvbGRlcj1mdW5jdGlvbih1ZSxjZSxHLGIpe3ZhciBEO3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVy'@;
put 'biBJKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibW92ZUZvbGRlciIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsbnVsbD09PShEPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUQ/dm9pZCAw'@;
put 'OkQubW92ZUZvbGRlcih1ZSxjZSxHLGIpXTtjYXNlIDE6cmV0dXJuWzIsSC5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVKb2JEZWZpbml0aW9uPWZ1bmN0aW9uKHVlLGNlLEcsYixELEgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRo'@;
put 'aXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlSm9iRGVmaW5pdGlvbiIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksSD9bNCxILmNyZWF0ZUpvYkRlZmluaXRpb24odWUsY2UsRyxiLEQpXTpbMywyXTtjYXNl'@;
put 'IDE6Y2FzZSAzOnJldHVyblsyLE4uc2VudCgpXTtjYXNlIDI6cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUpvYkRlZmluaXRpb24odWUsY2UsRyxiLEQpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0QXV0aENvZGU9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBdXRoQ29kZSIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50Lmdl'@;
put 'dEF1dGhDb2RlKHVlKV07Y2FzZSAxOnJldHVyblsyLGNlLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKHVlLGNlLEcpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNo'@;
put 'KGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QWNjZXNzVG9rZW4iLFtVLlNlcnZlclR5cGUuU2FzVml5YSxVLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzanM/WzMsMl06WzQs'@;
put 'dGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbih1ZSxHKV07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixiLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbih1ZSxjZSxHKV19fSl9KX0saGUucHJvdG90eXBlLnJlZnJlc2hU'@;
put 'b2tlbnM9ZnVuY3Rpb24odWUsY2UsRyl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJyZWZyZXNoVG9rZW5zIixbVS5TZXJ2'@;
put 'ZXJUeXBlLlNhc1ZpeWEsVS5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMuc2FzSlNBcGlDbGllbnQucmVmcmVzaFRva2VucyhHKV07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixiLnNlbnQoKV07'@;
put 'Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5yZWZyZXNoVG9rZW5zKHVlLGNlLEcpXX19KX0pfSxoZS5wcm90b3R5cGUuZGVsZXRlQ2xpZW50PWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1'@;
put 'bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNsaWVudCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNsaWVudCh1ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixH'@;
put 'LnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldFNhc2pzQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2FzanNDb25maWd9LGhlLnByb3RvdHlwZS5nZXRVc2VyTmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLnVzZXJOYW1lfSxoZS5wcm90b3R5cGUuc2V0'@;
put 'U0FTanNDb25maWc9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3JldHVybiB0aGlzLnNhc2pzQ29uZmlnPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSx1ZSksdGhpcy5zZXR1cENvbmZpZ3VyYXRp'@;
put 'b24oKSxbMl19KX0pfSxoZS5wcm90b3R5cGUuc2V0RGVidWdTdGF0ZT1mdW5jdGlvbih1ZSl7dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zz11ZSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVidWc9dWUpfSxoZS5wcm90b3R5cGUuY2hlY2tTZXNzaW9uPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih1ZSl7cmV0dXJuWzIsdGhpcy5hdXRoTWFuYWdlci5jaGVja1Nlc3Npb24oKV19KX0pfSxoZS5wcm90b3R5cGUubG9nSW49ZnVuY3Rpb24odWUsY2UsRyxiKXtyZXR1'@;
put 'cm4gdm9pZCAwPT09YiYmKGI9e30pLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihEKXtpZih0aGlzLnNhc2pzQ29uZmlnLmxvZ2luTWVjaGFuaXNtPT09ai5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0KXtpZighdWV8fCFjZSl0aHJvdyBuZXcg'@;
put 'RXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm5bMix0aGlzLmF1dGhNYW5hZ2VyLmxvZ0luKHVlLGNlKV19aWYodHlwZW9mIHdpbmRvdz4idSIpdGhyb3cgbmV3IEVycm9yKCJU'@;
put 'aGUgcmVkaXJlY3RlZCBsb2dpbiBtZWNoYW5pc20gaXMgb25seSBhdmFpbGFibGUgZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci4iKTtyZXR1cm5bMix0aGlzLmF1dGhNYW5hZ2VyLnJlZGlyZWN0ZWRMb2dJbihiKV19KX0pfSxoZS5wcm90b3R5cGUubG9nT3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuYXV0aE1hbmFnZXIubG9nT3V0KCl9LGhlLnByb3RvdHlwZS51cGxvYWRGaWxlPWZ1bmN0aW9uKHVlLGNlLEcsYixEKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9e30pLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5s'@;
put 'YWJlbCl7Y2FzZSAwOnJldHVybiBiPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSxiKSxbNCx0aGlzLmZpbGVVcGxvYWRlci5leGVjdXRlKHVlLHtmaWxlczpjZSxwYXJhbXM6R30sYixEKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUucmVxdWVzdD1mdW5j'@;
put 'dGlvbih1ZSxjZSxHLGIsRCxIKXtyZXR1cm4gdm9pZCAwPT09RyYmKEc9e30pLHZvaWQgMD09PUgmJihIPVtdKSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRz16KHoo'@;
put 'e30sdGhpcy5zYXNqc0NvbmZpZyksRyksKE49KDAsRS52YWxpZGF0ZUlucHV0KShjZSkpLnN0YXR1cz9HLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzanM/WzMsMl06WzQsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyxiLEQsSCldOlszLDEyXTtjYXNlIDE6Y2Fz'@;
put 'ZSAzOmNhc2UgNTpjYXNlIDg6Y2FzZSAxMDpyZXR1cm5bMixnLnNlbnQoKV07Y2FzZSAyOnJldHVybiBHLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzVml5YXx8bnVsbD09Ry51c2VDb21wdXRlQXBpP1szLDddOkcudXNlQ29tcHV0ZUFwaT9bNCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRv'@;
put 'ci5leGVjdXRlKHVlLGNlLEcsYixEKV06WzMsNF07Y2FzZSA0OnJldHVybiBHLmNvbnRleHROYW1lfHwoRz16KHooe30sRykse2NvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQifSkpLFs0LHRoaXMuamVzSm9iRXhlY3V0b3IuZXhlY3V0ZSh1ZSxjZSxHLGIs'@;
put 'RCxIKV07Y2FzZSA2OnJldHVyblszLDExXTtjYXNlIDc6cmV0dXJuIEcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5JiZHLnVzZXJuYW1lJiZHLnBhc3N3b3JkP1s0LHRoaXMuc2FzOUpvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyldOlszLDldO2Nhc2UgOTpyZXR1cm5bNCx0aGlz'@;
put 'LndlYkpvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyxiLEQsSCldO2Nhc2UgMTE6cmV0dXJuWzMsMTNdO2Nhc2UgMTI6cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IGouRXJyb3JSZXNwb25zZShOLm1zZykpXTtjYXNlIDEzOnJldHVyblsyXX19KX0pfSxoZS5wcm90b3R5cGUuZGVwbG95'@;
put 'U2VydmljZVBhY2s9ZnVuY3Rpb24odWUsY2UsRyxiLEQpe3JldHVybiB2b2lkIDA9PT1EJiYoRD0hMSksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxOO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01l'@;
put 'dGhvZFN1cHBvcnRlZCgiZGVwbG95U2VydmljZVBhY2siLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLEg9bnVsbCxHfHxjZT8oR3x8KEc9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpLGNlfHwoY2U9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw'@;
put 'ZT09PVUuU2VydmVyVHlwZS5TYXNWaXlhPyhIPW5ldyBWLlNBU1ZpeWFBcGlDbGllbnQoRyxjZSx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCkpLmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWc6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09'@;
put 'VS5TZXJ2ZXJUeXBlLlNhczkmJihIPW5ldyBCLlNBUzlBcGlDbGllbnQoRyx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSk6KE49bnVsbCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YT9OPXRoaXMuc2Fz'@;
put 'Vml5YUFwaUNsaWVudC5nZXRDb25maWcoKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOSYmKE49dGhpcy5zYXM5QXBpQ2xpZW50LmdldENvbmZpZygpKSxHPU4uc2VydmVyVXJsLGNlPU4ucm9vdEZvbGRlck5hbWUpLHVlLm1lbWJlcnNbMF0ubWVtYmVy'@;
put 'cyYmdWUubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQoZnVuY3Rpb24oUyl7cmV0dXJuImZvbGRlciI9PT1TLnR5cGU/LTE6MX0pLFs0LHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKGNlLHVlLm1lbWJlcnMsYixILEQpXTtjYXNlIDE6cmV0dXJuIEMuc2VudCgpLFsyXX19KX0pfSxoZS5w'@;
put 'cm90b3R5cGUuc3RhcnRDb21wdXRlSm9iPWZ1bmN0aW9uKHVlLGNlLEcsYixELEgsTixnLEMpe3ZhciBTLHYscCx3O3JldHVybiB2b2lkIDA9PT1HJiYoRz17fSksdm9pZCAwPT09TiYmKE49ITEpLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlv'@;
put 'bihKKXtpZihHPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSxHKSx0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJzdGFydENvbXB1dGVKb2IiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLCFHLmNvbnRleHROYW1lKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxl'@;
put 'YXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7cmV0dXJuIEM/KG51bGw9PT0oUz10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1TfHxTLnNldFZlcmJvc2VNb2RlKEMpLG51bGw9PT0odj10aGlzLnJlcXVlc3RDbGllbnQpfHx2'@;
put 'b2lkIDA9PT12fHx2LmVuYWJsZVZlcmJvc2VNb2RlKCkpOiExPT09QyYmKG51bGw9PT0ocD10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1wfHxwLmRpc2FibGVWZXJib3NlTW9kZSgpKSxbMixudWxsPT09KHc9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09dz92b2lkIDA6'@;
put 'dy5leGVjdXRlQ29tcHV0ZUpvYih1ZSxHLmNvbnRleHROYW1lLEcuZGVidWcsY2UsYiwhIUQsITEsSCxOLGcpXX0pfSl9LGhlLnByb3RvdHlwZS5mZXRjaExvZ0ZpbGVDb250ZW50PWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'SSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh1ZSxjZSkudGhlbihmdW5jdGlvbihiKXtpZighYilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGouRXJyb3JSZXNwb25zZSgiRXJyb3Igd2hpbGUgZmV0Y2hp'@;
put 'bmcgbG9nLiBSZXNwb25zZSB3YXMgbm90IHByb3ZpZGVkLiIpKTt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGIucmVzdWx0KX1jYXRjaChEKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGouRXJyb3JSZXNwb25zZSgiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgbG9nLiBUaGUgcmVzdWx0IGlz'@;
put 'IG5vdCB2YWxpZC4iLEQpKX19KV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0U2FzUmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4gayhbXSx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0UmVxdWVzdHMoKSwhMCkuc29ydChFLmNvbXBhcmVUaW1lc3RhbXBz'@;
put 'KX0saGUucHJvdG90eXBlLmNsZWFyU2FzUmVxdWVzdHM9ZnVuY3Rpb24oKXt0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJSZXF1ZXN0cygpfSxoZS5wcm90b3R5cGUuc2V0dXBDb25maWd1cmF0aW9uPWZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx8fCIi'@;
put 'PT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7dmFyIHVlPSIiLmNvbmNhdChsb2NhdGlvbi5wcm90b2NvbCwiLy8iKS5jb25jYXQobG9jYXRpb24uaG9zdG5hbWUpO2xvY2F0aW9uLnBvcnQmJih1ZT0iIi5jb25jYXQodWUsIjoiKS5jb25jYXQo'@;
put 'bG9jYXRpb24ucG9ydCkpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPXVlfWVsc2UgdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9IiI7Ii8iPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwuc2xpY2UoLTEpJiYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9dGhpcy5zYXNqc0Nv'@;
put 'bmZpZy5zZXJ2ZXJVcmwuc2xpY2UoMCwtMSkpLHRoaXMucmVxdWVzdENsaWVudD90aGlzLnJlcXVlc3RDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpOnRoaXMucmVxdWVzdENsaWVudD1uZXcodGhp'@;
put 'cy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc2pzP2VlLlNhc2pzUmVxdWVzdENsaWVudDpxLlJlcXVlc3RDbGllbnQpKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMsdGhpcy5zYXNqc0NvbmZpZy5y'@;
put 'ZXF1ZXN0SGlzdG9yeUxpbWl0LHRoaXMuc2FzanNDb25maWcudmVyYm9zZSksdGhpcy5qb2JzUGF0aD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNWaXlhOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw'@;
put 'ZT09PVUuU2VydmVyVHlwZS5TYXM5P3RoaXMuc2FzanNDb25maWcucGF0aFNBUzk6dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTSlMsdGhpcy5hdXRoTWFuYWdlcj1uZXcgWC5BdXRoTWFuYWdlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUs'@;
put 'dGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YSYmKHRoaXMuc2FzVml5YUFwaUNsaWVudD90aGlzLnNhc1ZpeWFBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanND'@;
put 'b25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuYXBwTG9jKTp0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bmV3IFYuU0FTVml5YUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1l'@;
put 'LHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5JiYodGhpcy5zYXM5QXBpQ2xpZW50P3RoaXMuc2FzOUFwaUNsaWVudC5zZXRD'@;
put 'b25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpOnRoaXMuc2FzOUFwaUNsaWVudD1uZXcgQi5TQVM5QXBpQ2xpZW50KHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpLHRoaXMuc2FzanNDb25m'@;
put 'aWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXNqcyYmKHRoaXMuc2FzSlNBcGlDbGllbnR8fCh0aGlzLnNhc0pTQXBpQ2xpZW50PW5ldyBZLlNBU2pzQXBpQ2xpZW50KHRoaXMucmVxdWVzdENsaWVudCkpKSx0aGlzLmZpbGVVcGxvYWRlcj1uZXcgdGUuRmlsZVVwbG9hZGVyKHRoaXMu'@;
put 'c2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgdGUuV2ViSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0Nv'@;
put 'bmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2FzVml5YUFwaUNsaWVudCksdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW5ldyB0ZS5TYXNqc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5y'@;
put 'ZXF1ZXN0Q2xpZW50KSx0aGlzLnNhczlKb2JFeGVjdXRvcj1uZXcgdGUuU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0'@;
put 'dHBzQWdlbnRPcHRpb25zKSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgdGUuQ29tcHV0ZUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCksdGhpcy5qZXNKb2JFeGVjdXRvcj1uZXcgdGUuSmVzSm9iRXhlY3V0b3IodGhpcy5z'@;
put 'YXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KX0saGUucHJvdG90eXBlLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcz1mdW5jdGlvbih1ZSxjZSxHLGIsRCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gSSh0'@;
put 'aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsRS5hc3luY0ZvckVhY2gpKGNlLGZ1bmN0aW9uKGcpe3JldHVybiBLKEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2Ug'@;
put 'MDpzd2l0Y2goZy50eXBlKXtjYXNlImZvbGRlciI6cmV0dXJuWzMsMV07Y2FzZSJmaWxlIjpyZXR1cm5bMywzXTtjYXNlInNlcnZpY2UiOnJldHVyblszLDVdfXJldHVyblszLDddO2Nhc2UgMTpyZXR1cm5bNCx0aGlzLmNyZWF0ZUZvbGRlcihnLm5hbWUsdWUsdm9pZCAwLEcsYixEKV07Y2Fz'@;
put 'ZSAyOnJldHVybiBDLnNlbnQoKSxbMyw4XTtjYXNlIDM6cmV0dXJuWzQsdGhpcy5jcmVhdGVGaWxlKGcubmFtZSxnLmNvZGUsdWUsdm9pZCAwLEcsYildO2Nhc2UgNDpyZXR1cm4gQy5zZW50KCksWzMsOF07Y2FzZSA1OnJldHVybls0LHRoaXMuY3JlYXRlSm9iRGVmaW5pdGlvbihnLm5hbWUs'@;
put 'Zy5jb2RlLHVlLHZvaWQgMCxHLGIpXTtjYXNlIDY6cmV0dXJuIEMuc2VudCgpLFszLDhdO2Nhc2UgNzp0aHJvdyBuZXcgRXJyb3IoIlVuaWRlbnRpZmllZCBtZW1iZXIgJyIuY29uY2F0KGcubmFtZSwiJyBwcm92aWRlZC4iKSk7Y2FzZSA4OnJldHVybiJmb2xkZXIiPT09Zy50eXBlJiZnLm1l'@;
put 'bWJlcnMmJmcubWVtYmVycy5sZW5ndGg/WzQsdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoIiIuY29uY2F0KHVlLCIvIikuY29uY2F0KGcubmFtZSksZy5tZW1iZXJzLEcsYixEKV06WzMsMTBdO2Nhc2UgOTpDLnNlbnQoKSxDLmxhYmVsPTEwO2Nhc2UgMTA6cmV0dXJuWzJdfX0pfSl9'@;
put 'KV07Y2FzZSAxOnJldHVybiBOLnNlbnQoKSxbMl19fSl9KX0saGUucHJvdG90eXBlLmlzTWV0aG9kU3VwcG9ydGVkPWZ1bmN0aW9uKHVlLGNlKXtpZighdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlfHwhY2UuaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIk1ldGhvZCAnIi5jb25jYXQodWUsIicgaXMgb25seSBzdXBwb3J0ZWQgb24gIikuY29uY2F0KGNlLmpvaW4oIiwgIiksIiBzZXJ2ZXJzLiIpKX0saGUucHJvdG90eXBlLmVuYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKHVlLGNlKXt2YXIgRztudWxsPT09KEc9dGhpcy5yZXF1'@;
put 'ZXN0Q2xpZW50KXx8dm9pZCAwPT09R3x8Ry5lbmFibGVWZXJib3NlTW9kZSh1ZSxjZSl9LGhlLnByb3RvdHlwZS5kaXNhYmxlVmVyYm9zZU1vZGU9ZnVuY3Rpb24oKXt2YXIgdWU7bnVsbD09PSh1ZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT11ZXx8dWUuZGlzYWJsZVZlcmJvc2VN'@;
put 'b2RlKCl9LGhlfSgpO08uZGVmYXVsdD1zZX0sMzQ2NzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oVSl7Zm9yKHZhciBxLGVlPTEsdGU9YXJndW1lbnRzLmxl'@;
put 'bmd0aDtlZTx0ZTtlZSsrKWZvcih2YXIgb2UgaW4gcT1hcmd1bWVudHNbZWVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxLG9lKSYmKFVbb2VdPXFbb2VdKTtyZXR1cm4gVX0sei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1'@;
put 'bmN0aW9uKFUscSxlZSx0ZSl7cmV0dXJuIG5ldyhlZXx8KGVlPVByb21pc2UpKShmdW5jdGlvbihvZSxzZSl7ZnVuY3Rpb24gaGUoRyl7dHJ5e2NlKHRlLm5leHQoRykpfWNhdGNoKGIpe3NlKGIpfX1mdW5jdGlvbiB1ZShHKXt0cnl7Y2UodGUudGhyb3coRykpfWNhdGNoKGIpe3NlKGIpfX1m'@;
put 'dW5jdGlvbiBjZShHKXt2YXIgYjtHLmRvbmU/b2UoRy52YWx1ZSk6KGI9Ry52YWx1ZSxiIGluc3RhbmNlb2YgZWU/YjpuZXcgZWUoZnVuY3Rpb24oRCl7RChiKX0pKS50aGVuKGhlLHVlKX1jZSgodGU9dGUuYXBwbHkoVSxxfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJh'@;
put 'dG9yfHxmdW5jdGlvbihVLHEpe3ZhciBlZSx0ZSxvZSxzZSxoZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvZVswXSl0aHJvdyBvZVsxXTtyZXR1cm4gb2VbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gc2U9e25leHQ6dWUoMCksdGhyb3c6dWUoMSkscmV0dXJuOnVlKDIpfSwi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoc2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksc2U7ZnVuY3Rpb24gdWUoY2Upe3JldHVybiBmdW5jdGlvbihHKXtyZXR1cm4gZnVuY3Rpb24oYil7aWYoZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9y'@;
put 'IGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7aGU7KXRyeXtpZihlZT0xLHRlJiYob2U9MiZiWzBdP3RlLnJldHVybjpiWzBdP3RlLnRocm93fHwoKG9lPXRlLnJldHVybikmJm9lLmNhbGwodGUpLDApOnRlLm5leHQpJiYhKG9lPW9lLmNhbGwodGUsYlsxXSkpLmRvbmUpcmV0dXJuIG9l'@;
put 'O3N3aXRjaCh0ZT0wLG9lJiYoYj1bMiZiWzBdLG9lLnZhbHVlXSksYlswXSl7Y2FzZSAwOmNhc2UgMTpvZT1iO2JyZWFrO2Nhc2UgNDpyZXR1cm4gaGUubGFiZWwrKyx7dmFsdWU6YlsxXSxkb25lOiExfTtjYXNlIDU6aGUubGFiZWwrKyx0ZT1iWzFdLGI9WzBdO2NvbnRpbnVlO2Nhc2UgNzpi'@;
put 'PWhlLm9wcy5wb3AoKSxoZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgob2U9KG9lPWhlLnRyeXMpLmxlbmd0aD4wJiZvZVtvZS5sZW5ndGgtMV0pfHw2IT09YlswXSYmMiE9PWJbMF0pKXtoZT0wO2NvbnRpbnVlfWlmKDM9PT1iWzBdJiYoIW9lfHxiWzFdPm9lWzBdJiZiWzFd'@;
put 'PG9lWzNdKSl7aGUubGFiZWw9YlsxXTticmVha31pZig2PT09YlswXSYmaGUubGFiZWw8b2VbMV0pe2hlLmxhYmVsPW9lWzFdLG9lPWI7YnJlYWt9aWYob2UmJmhlLmxhYmVsPG9lWzJdKXtoZS5sYWJlbD1vZVsyXSxoZS5vcHMucHVzaChiKTticmVha31vZVsyXSYmaGUub3BzLnBvcCgpLGhl'@;
put 'LnRyeXMucG9wKCk7Y29udGludWV9Yj1xLmNhbGwoVSxoZSl9Y2F0Y2goRCl7Yj1bNixEXSx0ZT0wfWZpbmFsbHl7ZWU9b2U9MH1pZig1JmJbMF0pdGhyb3cgYlsxXTtyZXR1cm57dmFsdWU6YlswXT9iWzFdOnZvaWQgMCxkb25lOiEwfX0oW2NlLEddKX19fTtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVNqc0FwaUNsaWVudD12b2lkIDA7dmFyIGs9Uig2MjMwKSxFPVIoMzkwMCksaj1SKDk3NzgpLFY9Uig1NyksQj1SKDI0OSksWT1SKDcwNCksWD1mdW5jdGlvbigpe2Z1bmN0aW9uIFUocSl7dGhpcy5yZXF1ZXN0Q2xpZW50PXF9cmV0'@;
put 'dXJuIFUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdD1mdW5jdGlvbihxKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGVlKXtzd2l0Y2goZWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT9bNCwoMCxZLmdldFRv'@;
put 'a2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LHEsRS5TZXJ2ZXJUeXBlLlNhc2pzKV06WzMsMl07Y2FzZSAxOnJldHVyblsyLGVlLnNlbnQoKS5hY2Nlc3NfdG9rZW5dO2Nhc2UgMjpyZXR1cm5bMl19fSl9KX0sVS5wcm90b3R5cGUuZGVwbG95PWZ1bmN0aW9uKHEsZWUsdGUpe3JldHVybiBLKHRo'@;
put 'aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdCh0ZSldO2Nhc2UgMTpyZXR1cm4gb2U9aGUuc2VudCgpLHEuYXBw'@;
put 'TG9jPXEuYXBwTG9jfHxlZSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95IixxLG9lLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KV07Y2FzZSAyOnJldHVybiBzZT1oZS5zZW50KCkucmVzdWx0LFsyLFBy'@;
put 'b21pc2UucmVzb2x2ZShzZSldfX0pfSl9LFUucHJvdG90eXBlLmRlcGxveVppcEZpbGU9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9lLHNlLGhlLHVlLGNlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFi'@;
put 'ZWwpe2Nhc2UgMDpyZXR1cm4gdGU9UigyOTc1KS5jcmVhdGVSZWFkU3RyZWFtLFs0LHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KGVlKV07Y2FzZSAxOnJldHVybiBvZT1HLnNlbnQoKSxbNCx0ZShxKV07Y2FzZSAyOnJldHVybiBzZT1HLnNlbnQoKSwoaGU9bmV3IGspLmFwcGVuZCgi'@;
put 'ZmlsZSIsc2UpLHVlPSJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNhdChoZS5nZXRCb3VuZGFyeSgpKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95L3VwbG9hZCIsaGUsb2UsdWUse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1h'@;
put 'eEJvZHlMZW5ndGg6MS8wfSldO2Nhc2UgMzpyZXR1cm4gY2U9Ry5zZW50KCkucmVzdWx0LFsyLFByb21pc2UucmVzb2x2ZShjZSldfX0pfSl9LFUucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rpb24ocSxlZSx0ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFy'@;
put 'IG9lLHNlLGhlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24odWUpe3N3aXRjaCh1ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBvZT10ZT90ZS5hY2Nlc3NfdG9rZW46dm9pZCAwLHNlPXEuX3Byb2dyYW0uc3RhcnRzV2l0aCgiLyIpP3EuX3Byb2dyYW06IiIuY29uY2F0KGVlLCIvIikuY29uY2F0KHEu'@;
put 'X3Byb2dyYW0pLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9zdHAvZXhlY3V0ZSIseih6KHtfZGVidWc6MTMxfSxxKSx7X3Byb2dyYW06c2V9KSxvZSldO2Nhc2UgMTpyZXR1cm5bMix7cmVzdWx0OihoZT11ZS5zZW50KCkpLnJlc3VsdCxsb2c6aGUubG9nfV19fSl9KX0s'@;
put 'VS5wcm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbihxLGVlLHRlKXtyZXR1cm4gdm9pZCAwPT09ZWUmJihlZT0ic2FzIiksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNl'@;
put 'IDA6cmV0dXJuWzQsdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QodGUpXTtjYXNlIDE6cmV0dXJuIG9lPWhlLnNlbnQoKSxzZT17bG9nOiIifSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvY29kZS9leGVjdXRlIix7Y29kZTpxLHJ1blRpbWU6ZWV9LG9lKS50aGVu'@;
put 'KGZ1bmN0aW9uKHVlKXt2YXIgRz11ZS5wcmludE91dHB1dCxiPXVlLnJlc3VsdDtzZS5sb2c9dWUubG9nLEcmJihzZS5wcmludE91dHB1dD1HKSxiJiYoc2Uud2Vib3V0PWIpfSkuY2F0Y2goZnVuY3Rpb24odWUpe3Rocm93KDAsai5wcmVmaXhNZXNzYWdlKSh1ZSwiRXJyb3Igd2hpbGUgc2Vu'@;
put 'ZGluZyBQT1NUIHJlcXVlc3QgdG8gZXhlY3V0ZSBjb2RlLiAiKX0pXTtjYXNlIDI6cmV0dXJuIGhlLnNlbnQoKSxbMixzZV19fSl9KX0sVS5wcm90b3R5cGUuZ2V0QWNjZXNzVG9rZW49ZnVuY3Rpb24ocSxlZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEkodGhpcyxmdW5jdGlvbih0ZSl7cmV0dXJuWzIsKDAsVi5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQscSxlZSldfSl9KX0sVS5wcm90b3R5cGUucmVmcmVzaFRva2Vucz1mdW5jdGlvbihxKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGVlKXtyZXR1cm5bMiwoMCxCLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LHEpXX0pfSl9LFV9KCk7Ty5TQVNqc0FwaUNsaWVudD1YfSw2OTAzOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1'@;
put 'KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWCxVLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLG9lKXtmdW5jdGlvbiBzZShjZSl7dHJ5e3VlKGVlLm5leHQoY2UpKX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gaGUoY2Up'@;
put 'e3RyeXt1ZShlZS50aHJvdyhjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiB1ZShjZSl7dmFyIEc7Y2UuZG9uZT90ZShjZS52YWx1ZSk6KEc9Y2UudmFsdWUsRyBpbnN0YW5jZW9mIHE/RzpuZXcgcShmdW5jdGlvbihiKXtiKEcpfSkpLnRoZW4oc2UsaGUpfXVlKChlZT1lZS5hcHBseShY'@;
put 'LFV8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFgsVSl7dmFyIHEsZWUsdGUsb2Usc2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJuIHRlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG9l'@;
put 'PXtuZXh0OmhlKDApLHRocm93OmhlKDEpLHJldHVybjpoZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKG9lW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG9lO2Z1bmN0aW9uIGhlKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe3JldHVybiBmdW5jdGlv'@;
put 'bihHKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3NlOyl0cnl7aWYocT0xLGVlJiYodGU9MiZHWzBdP2VlLnJldHVybjpHWzBdP2VlLnRocm93fHwoKHRlPWVlLnJldHVybikmJnRlLmNhbGwoZWUpLDApOmVlLm5leHQp'@;
put 'JiYhKHRlPXRlLmNhbGwoZWUsR1sxXSkpLmRvbmUpcmV0dXJuIHRlO3N3aXRjaChlZT0wLHRlJiYoRz1bMiZHWzBdLHRlLnZhbHVlXSksR1swXSl7Y2FzZSAwOmNhc2UgMTp0ZT1HO2JyZWFrO2Nhc2UgNDpyZXR1cm4gc2UubGFiZWwrKyx7dmFsdWU6R1sxXSxkb25lOiExfTtjYXNlIDU6c2Uu'@;
put 'bGFiZWwrKyxlZT1HWzFdLEc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpHPXNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodGU9KHRlPXNlLnRyeXMpLmxlbmd0aD4wJiZ0ZVt0ZS5sZW5ndGgtMV0pfHw2IT09R1swXSYmMiE9PUdbMF0pKXtzZT0wO2NvbnRp'@;
put 'bnVlfWlmKDM9PT1HWzBdJiYoIXRlfHxHWzFdPnRlWzBdJiZHWzFdPHRlWzNdKSl7c2UubGFiZWw9R1sxXTticmVha31pZig2PT09R1swXSYmc2UubGFiZWw8dGVbMV0pe3NlLmxhYmVsPXRlWzFdLHRlPUc7YnJlYWt9aWYodGUmJnNlLmxhYmVsPHRlWzJdKXtzZS5sYWJlbD10ZVsyXSxzZS5v'@;
put 'cHMucHVzaChHKTticmVha310ZVsyXSYmc2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWV9Rz1VLmNhbGwoWCxzZSl9Y2F0Y2goYil7Rz1bNixiXSxlZT0wfWZpbmFsbHl7cT10ZT0wfWlmKDUmR1swXSl0aHJvdyBHWzFdO3JldHVybnt2YWx1ZTpHWzBdP0dbMV06dm9pZCAwLGRv'@;
put 'bmU6ITB9fShbdWUsY2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TZXNzaW9uTWFuYWdlcj12b2lkIDA7dmFyIEU9UigxMjMwKSxqPVIoMTM5NSksVj1SKDU5MjgpLEI9Uig5Nzc4KSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gWChVLHEs'@;
put 'ZWUpe3RoaXMuc2VydmVyVXJsPVUsdGhpcy5jb250ZXh0TmFtZT1xLHRoaXMucmVxdWVzdENsaWVudD1lZSx0aGlzLmxvZ2dlZEVycm9ycz1bXSx0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcj0iRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlIGxpbmsuICIsdGhpcy5zZXNzaW9u'@;
put 'cz1bXSx0aGlzLmN1cnJlbnRDb250ZXh0PW51bGwsdGhpcy5zZXR0aW5nQ29udGV4dD0hMSx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGU9e3ByaW50ZWQ6ITEsc3RhdGU6RS5TZXNzaW9uU3RhdGUuTm9TdGF0ZX0sVSYmKDAsVi5pc1VybCkoVSl9cmV0dXJuIE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwiZGVidWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWd9LHNldDpmdW5jdGlvbihVKXt0aGlzLl9kZWJ1Zz1VfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFgucHJvdG90eXBlLmlzU2Vzc2lvblZhbGlkPWZ1'@;
put 'bmN0aW9uKFUpe2lmKCFVKXJldHVybiExO3ZhciBxPSgobmV3IERhdGUpLmdldFRpbWUoKS1uZXcgRGF0ZShVLmNyZWF0aW9uVGltZVN0YW1wKS5nZXRUaW1lKCkpLzFlMztyZXR1cm4hKCFVLmF0dHJpYnV0ZXN8fHE+PVUuYXR0cmlidXRlcy5zZXNzaW9uSW5hY3RpdmVUaW1lb3V0KX0sWC5w'@;
put 'cm90b3R5cGUucmVtb3ZlU2Vzc2lvbkZyb21Qb29sPWZ1bmN0aW9uKFUpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuaWQhPT1VLmlkfSl9LFgucHJvdG90eXBlLnJlbW92ZUV4cGlyZWRTZXNzaW9ucz1mdW5jdGlvbigpe3ZhciBVPXRo'@;
put 'aXM7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4gVS5pc1Nlc3Npb25WYWxpZChxKX0pfSxYLnByb3RvdHlwZS50aHJvd0Vycm9ycz1mdW5jdGlvbihVLHEpe3Rocm93IHE/KDAsQi5wcmVmaXhNZXNzYWdlKShuZXcgRXJyb3IoVS5qb2luKCIu'@;
put 'ICIpKSxxKTpuZXcgRXJyb3IoVS5tYXAoZnVuY3Rpb24oZWUpe3JldHVybiBlZS5tZXNzYWdlP2VlLm1lc3NhZ2U6ZWV9KS5qb2luKCIuICIpKX0sWC5wcm90b3R5cGUuZ2V0U2Vzc2lvbj1mdW5jdGlvbihVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxl'@;
put 'ZSx0ZSxvZSxzZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBxPVtdLGVlPSExLHRlPWZ1bmN0aW9uKCl7cS5sZW5ndGgmJiFlZSYmKGVlPSEwLHNlLnRocm93RXJyb3JzKHEpKX0sdGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lv'@;
put 'bnMoKSx0aGlzLnNlc3Npb25zLmxlbmd0aD8odGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2wob2U9dGhpcy5zZXNzaW9uc1swXSksdGhpcy5jcmVhdGVTZXNzaW9ucyhVKS5jYXRjaChmdW5jdGlvbih1ZSl7cS5wdXNoKHVlKX0pLHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oVSkuY2F0'@;
put 'Y2goZnVuY3Rpb24odWUpe3EucHVzaCh1ZSl9KSx0ZSgpLFsyLG9lXSk6WzMsMV07Y2FzZSAxOnJldHVybiB0aGlzLmNyZWF0ZVNlc3Npb25zKFUpLmNhdGNoKGZ1bmN0aW9uKHVlKXtxLnB1c2godWUpfSksWzQsdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihVKS5jYXRjaChmdW5jdGlv'@;
put 'bih1ZSl7cS5wdXNoKHVlKX0pXTtjYXNlIDI6cmV0dXJuIGhlLnNlbnQoKSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpLG9lPXRoaXMuc2Vzc2lvbnMucG9wKCksdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2wob2UpLHRlKCksWzIsb2VdfX0pfSl9LFgucHJvdG90eXBlLmdldEVycm9y'@;
put 'TWVzc2FnZT1mdW5jdGlvbihVLHEsZWUpe3JldHVybiIiLmNvbmNhdChlZSwiIHJlcXVlc3QgdG8gIikuY29uY2F0KHEsIiBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiKS5jb25jYXQoVS5yZXNwb25zZS5zdGF0dXN8fCJ1bmtub3duIiwiLiAiKStVLnJlc3BvbnNlLmRhdGEubWVzc2FnZXx8'@;
put 'IiJ9LFgucHJvdG90eXBlLmNsZWFyU2Vzc2lvbj1mdW5jdGlvbihVLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlZSx0ZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ob2Upe3N3aXRjaChvZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBlZT0iL2NvbXB1'@;
put 'dGUvc2Vzc2lvbnMvIi5jb25jYXQoVSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShlZSxxKS50aGVuKGZ1bmN0aW9uKCl7dGUuc2Vzc2lvbnM9dGUuc2Vzc2lvbnMuZmlsdGVyKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuaWQhPT1VfSl9KS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3co'@;
put 'MCxCLnByZWZpeE1lc3NhZ2UpKHRlLmdldEVycm9yTWVzc2FnZShzZSxlZSwiREVMRVRFIiksIkVycm9yIHdoaWxlIGRlbGV0aW5nIHNlc3Npb24uICIpfSldO2Nhc2UgMTpyZXR1cm5bMixvZS5zZW50KCldfX0pfSl9LFgucHJvdG90eXBlLmNyZWF0ZVNlc3Npb25zPWZ1bmN0aW9uKFUpe3Jl'@;
put 'dHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9W10sdGhpcy5zZXNzaW9ucy5sZW5ndGg/WzMsMl06WzQsKDAsVi5hc3luY0ZvckVhY2gpKG5l'@;
put 'dyBBcnJheSgxKSxmdW5jdGlvbigpe3JldHVybiBJKGVlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKFUpLmNhdGNoKGZ1bmN0aW9u'@;
put 'KHNlKXtxLnB1c2goc2UpfSldO2Nhc2UgMTpyZXR1cm4gb2Uuc2VudCgpLFsyXX19KX0pfSldO2Nhc2UgMTp0ZS5zZW50KCksdGUubGFiZWw9MjtjYXNlIDI6cmV0dXJuIHEubGVuZ3RoJiZ0aGlzLnRocm93RXJyb3JzKHEsIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpLFsyXX19'@;
put 'KX0pfSxYLnByb3RvdHlwZS53YWl0Rm9yQ3VycmVudENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ocSl7cmV0dXJuWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oZWUpe3ZhciB0'@;
put 'ZT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe1UuY3VycmVudENvbnRleHQmJihVLnNldHRpbmdDb250ZXh0PSExLGNsZWFySW50ZXJ2YWwodGUpLGVlKCkpfSwxMDApfSldfSl9KX0sWC5wcm90b3R5cGUuY3JlYXRlQW5kV2FpdEZvclNlc3Npb249ZnVuY3Rpb24oVSl7cmV0dXJuIEkodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsdGUsb2Usc2UsaGU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHVlKXtzd2l0Y2godWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5jdXJyZW50Q29udGV4dD9bMyw0XTp0aGlzLnNldHRpbmdDb250ZXh0P1szLDJdOls0LHRo'@;
put 'aXMuc2V0Q3VycmVudENvbnRleHQoVSldO2Nhc2UgMTpyZXR1cm4gdWUuc2VudCgpLFszLDRdO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLndhaXRGb3JDdXJyZW50Q29udGV4dCgpXTtjYXNlIDM6dWUuc2VudCgpLHVlLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBxPSIiLmNvbmNhdCh0aGlzLnNlcnZl'@;
put 'clVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KHRoaXMuY3VycmVudENvbnRleHQuaWQsIi9zZXNzaW9ucyIpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHEse30sVSkuY2F0Y2goZnVuY3Rpb24oY2Upe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShoZS5nZXRFcnJvck1lc3Nh'@;
put 'Z2UoY2UscSwiUE9TVCIpLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDU6aWYoZWU9dWUuc2VudCgpLCh0ZT1lZS5yZXN1bHQpLmV0YWc9b2U9ZWUuZXRhZywhKHNlPXRlLmxpbmtzLmZpbmQoZnVuY3Rpb24oY2Upe3JldHVybiJzdGF0ZSI9PT1jZS5yZWx9KSkp'@;
put 'dGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7cmV0dXJuIHRlLnN0YXRlVXJsPXNlLmhyZWYsWzQsdGhpcy53YWl0Rm9yU2Vzc2lvbih0ZSxvZSxVKV07Y2FzZSA2OnJldHVybiB1ZS5zZW50KCksdGhpcy5zZXNzaW9ucy5wdXNoKHRlKSxbMix0ZV19fSl9KX0sWC5wcm90b3R5cGUu'@;
put 'c2V0Q3VycmVudENvbnRleHQ9ZnVuY3Rpb24oVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsb2Usc2U9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5jdXJyZW50Q29udGV4'@;
put 'dD9bMywyXToocT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksdGhpcy5zZXR0aW5nQ29udGV4dD0hMCxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHEsVSkuY2F0Y2goZnVuY3Rpb24odWUpe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdl'@;
put 'KShzZS5nZXRFcnJvck1lc3NhZ2UodWUscSwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgbGlzdCBvZiBjb250ZXh0cy4gIil9KV0pO2Nhc2UgMTppZihlZT1oZS5zZW50KCkucmVzdWx0LCEob2U9KGVlJiZlZS5pdGVtcyYmZWUuaXRlbXMubGVuZ3RoP2VlLml0ZW1zOltdKS5maW5kKGZ1'@;
put 'bmN0aW9uKHVlKXtyZXR1cm4gdWUubmFtZT09PXNlLmNvbnRleHROYW1lfSkpKXRocm93IG5ldyBFcnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KHRoaXMuY29udGV4dE5hbWUsIicgd2FzIG5vdCBmb3VuZCBvbiB0aGUgc2VydmVyICIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiLiIpKTt0'@;
put 'aGlzLmN1cnJlbnRDb250ZXh0PW9lLFByb21pc2UucmVzb2x2ZSgpLGhlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyXX19KX0pfSxYLnByb3RvdHlwZS53YWl0Rm9yU2Vzc2lvbj1mdW5jdGlvbihVLHEsZWUpe3ZhciB0ZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2'@;
put 'YXIgb2Usc2UsaGUsdWUsY2UsYixEO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gc2U9VS5zdGF0ZVVybCxoZT16LmxvZ2dlcnx8Sywob2U9VS5zdGF0ZSkhPT1FLlNlc3Npb25TdGF0ZS5QZW5kaW5nJiZvZSE9PUUuU2Vzc2lvblN0YXRl'@;
put 'LlJ1bm5pbmcmJm9lIT09RS5TZXNzaW9uU3RhdGUuTm9TdGF0ZT9bMyw2XTpzZT8odGhpcy5kZWJ1ZyYmIXRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkJiYoaGUuaW5mbygiUG9sbGluZzogIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwrc2UpKSx0aGlzLnByaW50ZWRTZXNzaW9uU3Rh'@;
put 'dGUucHJpbnRlZD0hMCksdWU9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoc2UsIj93YWl0PTMwIiksWzQsdGhpcy5nZXRTZXNzaW9uU3RhdGUodWUscSxlZSkuY2F0Y2goZnVuY3Rpb24oTil7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKE4sIkVycm9yIHdoaWxlIHdhaXRpbmcg'@;
put 'Zm9yIHNlc3Npb24uICIpfSldKTpbMyw0XTtjYXNlIDE6cmV0dXJuIGNlPUguc2VudCgpLGI9Y2UucmVzcG9uc2VTdGF0dXMsb2U9Y2UucmVzdWx0LnRyaW0oKSx0aGlzLmRlYnVnJiZ0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGUhPT1vZSYmKGhlLmluZm8oIkN1cnJlbnQgc2Vzc2lv'@;
put 'biBzdGF0ZSBpcyAnIi5jb25jYXQob2UsIiciKSksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlPW9lLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSExKSxvZT9bMywzXTooRD1uZXcgai5Ob1Nlc3Npb25TdGF0ZUVycm9yKGIsdGhpcy5zZXJ2ZXJVcmwrc2UsbnVsbD09'@;
put 'PSh0ZT1VLmxpbmtzLmZpbmQoZnVuY3Rpb24oTil7cmV0dXJuImxvZyI9PT1OLnJlbH0pKXx8dm9pZCAwPT09dGU/dm9pZCAwOnRlLmhyZWYpLHRoaXMubG9nZ2VkRXJyb3JzLmZpbmQoZnVuY3Rpb24oTil7cmV0dXJuIE4uc2VydmVyUmVzcG9uc2VTdGF0dXM9PT1ELnNlcnZlclJlc3BvbnNl'@;
put 'U3RhdHVzfSl8fCh0aGlzLmxvZ2dlZEVycm9ycy5wdXNoKEQpLGhlLmluZm8oRC5tZXNzYWdlKSksWzQsdGhpcy53YWl0Rm9yU2Vzc2lvbihVLHEsZWUpXSk7Y2FzZSAyOnJldHVyblsyLEguc2VudCgpXTtjYXNlIDM6Y2FzZSA2OnJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1bXSxbMixvZV07'@;
put 'Y2FzZSA0OnRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO2Nhc2UgNTpyZXR1cm5bMyw3XTtjYXNlIDc6cmV0dXJuWzJdfX0pfSl9LFgucHJvdG90eXBlLmdldFNlc3Npb25TdGF0ZT1mdW5jdGlvbihVLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3ZhciB0ZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ob2Upe3N3aXRjaChvZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoVSxlZSwidGV4dC9wbGFpbiIseyJJZi1Ob25lLU1hdGNoIjpxfSkudGhlbihmdW5jdGlvbihzZSl7cmV0dXJue3Jlc3Vs'@;
put 'dDpzZS5yZXN1bHQscmVzcG9uc2VTdGF0dXM6c2Uuc3RhdHVzfX0pLmNhdGNoKGZ1bmN0aW9uKHNlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkodGUuZ2V0RXJyb3JNZXNzYWdlKHNlLFUsIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUuICIpfSldO2Nhc2UgMTpy'@;
put 'ZXR1cm5bMixvZS5zZW50KCldfX0pfSl9LFgucHJvdG90eXBlLmdldFZhcmlhYmxlPWZ1bmN0aW9uKFUscSxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9lPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihzZSl7c3dpdGNoKHNlLmxhYmVsKXtj'@;
put 'YXNlIDA6cmV0dXJuIHRlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvc2Vzc2lvbnMvIikuY29uY2F0KFUsIi92YXJpYWJsZXMvIikuY29uY2F0KHEpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQodGUsZWUpLmNhdGNoKGZ1bmN0aW9uKGhlKXt0aHJvdygwLEIucHJlZml4'@;
put 'TWVzc2FnZSkob2UuZ2V0RXJyb3JNZXNzYWdlKGhlLHRlLCJHRVQiKSwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc2Vzc2lvbiB2YXJpYWJsZSAnIi5jb25jYXQocSwiJy4gIikpfSldO2Nhc2UgMTpyZXR1cm5bMixzZS5zZW50KCldfX0pfSl9LFh9KCk7Ty5TZXNzaW9uTWFuYWdlcj1ZfSwxNjIy'@;
put 'OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHRlKXtmb3IodmFyIG9lLHNlPTEsaGU9YXJndW1lbnRzLmxlbmd0aDtzZTxo'@;
put 'ZTtzZSsrKWZvcih2YXIgdWUgaW4gb2U9YXJndW1lbnRzW3NlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2UsdWUpJiYodGVbdWVdPW9lW3VlXSk7cmV0dXJuIHRlfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp'@;
put 'b24odGUsb2Usc2UsaGUpe3JldHVybiBuZXcoc2V8fChzZT1Qcm9taXNlKSkoZnVuY3Rpb24odWUsY2Upe2Z1bmN0aW9uIEcoSCl7dHJ5e0QoaGUubmV4dChIKSl9Y2F0Y2goTil7Y2UoTil9fWZ1bmN0aW9uIGIoSCl7dHJ5e0QoaGUudGhyb3coSCkpfWNhdGNoKE4pe2NlKE4pfX1mdW5jdGlv'@;
put 'biBEKEgpe3ZhciBOO0guZG9uZT91ZShILnZhbHVlKTooTj1ILnZhbHVlLE4gaW5zdGFuY2VvZiBzZT9OOm5ldyBzZShmdW5jdGlvbihnKXtnKE4pfSkpLnRoZW4oRyxiKX1EKChoZT1oZS5hcHBseSh0ZSxvZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVu'@;
put 'Y3Rpb24odGUsb2Upe3ZhciBzZSxoZSx1ZSxjZSxHPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnVlWzBdKXRocm93IHVlWzFdO3JldHVybiB1ZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBjZT17bmV4dDpiKDApLHRocm93OmIoMSkscmV0dXJuOmIoMil9LCJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBTeW1ib2wmJihjZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjZTtmdW5jdGlvbiBiKEQpe3JldHVybiBmdW5jdGlvbihIKXtyZXR1cm4gZnVuY3Rpb24oTil7aWYoc2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkg'@;
put 'ZXhlY3V0aW5nLiIpO2Zvcig7RzspdHJ5e2lmKHNlPTEsaGUmJih1ZT0yJk5bMF0/aGUucmV0dXJuOk5bMF0/aGUudGhyb3d8fCgodWU9aGUucmV0dXJuKSYmdWUuY2FsbChoZSksMCk6aGUubmV4dCkmJiEodWU9dWUuY2FsbChoZSxOWzFdKSkuZG9uZSlyZXR1cm4gdWU7c3dpdGNoKGhlPTAs'@;
put 'dWUmJihOPVsyJk5bMF0sdWUudmFsdWVdKSxOWzBdKXtjYXNlIDA6Y2FzZSAxOnVlPU47YnJlYWs7Y2FzZSA0OnJldHVybiBHLmxhYmVsKysse3ZhbHVlOk5bMV0sZG9uZTohMX07Y2FzZSA1OkcubGFiZWwrKyxoZT1OWzFdLE49WzBdO2NvbnRpbnVlO2Nhc2UgNzpOPUcub3BzLnBvcCgpLEcu'@;
put 'dHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHVlPSh1ZT1HLnRyeXMpLmxlbmd0aD4wJiZ1ZVt1ZS5sZW5ndGgtMV0pfHw2IT09TlswXSYmMiE9PU5bMF0pKXtHPTA7Y29udGludWV9aWYoMz09PU5bMF0mJighdWV8fE5bMV0+dWVbMF0mJk5bMV08dWVbM10pKXtHLmxhYmVsPU5b'@;
put 'MV07YnJlYWt9aWYoNj09PU5bMF0mJkcubGFiZWw8dWVbMV0pe0cubGFiZWw9dWVbMV0sdWU9TjticmVha31pZih1ZSYmRy5sYWJlbDx1ZVsyXSl7Ry5sYWJlbD11ZVsyXSxHLm9wcy5wdXNoKE4pO2JyZWFrfXVlWzJdJiZHLm9wcy5wb3AoKSxHLnRyeXMucG9wKCk7Y29udGludWV9Tj1vZS5j'@;
put 'YWxsKHRlLEcpfWNhdGNoKGcpe049WzYsZ10saGU9MH1maW5hbGx5e3NlPXVlPTB9aWYoNSZOWzBdKXRocm93IE5bMV07cmV0dXJue3ZhbHVlOk5bMF0/TlsxXTp2b2lkIDAsZG9uZTohMH19KFtELEhdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEw'@;
put 'fSksTy5leGVjdXRlT25Db21wdXRlQXBpPXZvaWQgMDt2YXIgaj1SKDc3NTcpLFY9Uig5Nzc4KSxCPVIoMzYwNyksWT1SKDcwNCksWD1SKDU5MjgpLFU9Uig3MTQpLHE9UigxMzQzKSxlZT1SKDY0OTYpO08uZXhlY3V0ZU9uQ29tcHV0ZUFwaT1mdW5jdGlvbiB0ZShvZSxzZSxoZSx1ZSxjZSxH'@;
put 'LGIsRCxILE4sZyxDLFMsdil7dmFyIHAsdztyZXR1cm4gdm9pZCAwPT09RCYmKEQ9bnVsbCksdm9pZCAwPT09SCYmKEg9ITEpLHZvaWQgMD09PU4mJihOPSExKSx2b2lkIDA9PT1nJiYoZz0hMCksdm9pZCAwPT09UyYmKFM9ITEpLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFy'@;
put 'IEosbmUsZGUsZmUseGUsTGUsRmUsT2UsamUsV2UsS2UsWWUsSmUsbHQsUGUsYmUsQWUsVGUscWUsWGUsVWUsaHQsTWU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKERlKXtzd2l0Y2goRGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gSj0oYnx8e30pLmFjY2Vzc190b2tlbixiP1s0LCgwLFku'@;
put 'Z2V0VG9rZW5zKShvZSxiKV06WzMsMl07Y2FzZSAxOko9RGUuc2VudCgpLmFjY2Vzc190b2tlbixEZS5sYWJlbD0yO2Nhc2UgMjpuZT16LmxvZ2dlcnx8SyxEZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gRGUudHJ5cy5wdXNoKFszLDE5LCwyMF0pLGRlPXZvaWQgMCxbNCxzZS5nZXRTZXNzaW9u'@;
put 'KEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbi4gIil9KV07Y2FzZSA0OnJldHVybiBmZT1EZS5zZW50KCksZGU9ZmUuaWQsUz9bNCxzZS5nZXRWYXJpYWJsZShkZSwiU1lTSk9CSUQiLEopLmNhdGNo'@;
put 'KGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiB2YXJpYWJsZS4gIil9KV06WzMsNl07Y2FzZSA1Oih4ZT1EZS5zZW50KCkucmVzdWx0KSYmeGUudmFsdWUmJihMZT1oZT91ZS5zcGxpdChoZSkuam9pbigiIikucmVw'@;
put 'bGFjZSgvXlwvLywiIik6dWUsKHoubG9nZ2VyfHxLKS5pbmZvKCJUcmlnZ2VyaW5nICciLmNvbmNhdChMZSwiJyB3aXRoIFBJRCAiKS5jb25jYXQoeGUudmFsdWUsIiBhdCAiKS5jb25jYXQoKDAsai50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTKSgpKSkpLERlLmxhYmVsPTY7Y2FzZSA2OnJl'@;
put 'dHVybiBGZT12b2lkIDAsKDAsWC5pc1JlbGF0aXZlUGF0aCkodWUpP0ZlPSJleGVjLSIuY29uY2F0KHVlLmluY2x1ZGVzKCIvIik/dWUuc3BsaXQoIi8iKVsxXTp1ZSk6KE9lPXVlLnNwbGl0KCIvIiksRmU9T2UucG9wKCkpLGplPXtTWVNfSkVTX0pPQl9VUkk6IiIsX3Byb2dyYW06KDAsWC5p'@;
put 'c1JlbGF0aXZlUGF0aCkodWUpP2hlKyIvIit1ZTp1ZX0sdiYmKGplPUkoSSh7fSxqZSksdikpLEgmJihqZT1JKEkoe30samUpLHtfREVCVUc6MTMxfSkpLFdlPVtdLEQ/SlNPTi5zdHJpbmdpZnkoRCkuaW5jbHVkZXMoIjsiKT9bNCwoMCxlZS51cGxvYWRUYWJsZXMpKG9lLEQsSikuY2F0Y2go'@;
put 'ZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIHRhYmxlcy4gIil9KV06WzMsOF06WzMsOV07Y2FzZSA3OnJldHVybiBXZT1EZS5zZW50KCksamUuX3dlYmluX2ZpbGVfY291bnQ9V2UubGVuZ3RoLFdlLmZvckVhY2goZnVuY3Rp'@;
put 'b24oemUsaXQpe2plWyJfd2ViaW5fZmlsZXVyaSIuY29uY2F0KGl0KzEpXT0iL2ZpbGVzL2ZpbGVzLyIuY29uY2F0KHplLmZpbGUuaWQpLGplWyJfd2ViaW5fbmFtZSIuY29uY2F0KGl0KzEpXT16ZS50YWJsZU5hbWV9KSxbMyw5XTtjYXNlIDg6amU9SShJKHt9LGplKSwoMCxVLmZvcm1hdERh'@;
put 'dGFGb3JSZXF1ZXN0KShEKSksRGUubGFiZWw9OTtjYXNlIDk6cmV0dXJuIEtlPXtuYW1lOkZlfHwiRGVmYXVsdCBKb2IgTmFtZSIsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGNvZGU6Y2UsdmFyaWFibGVzOmplLHZlcnNpb246Mn0sWzQsb2UucG9zdCgiL2NvbXB1dGUvc2Vzc2lv'@;
put 'bnMvIi5jb25jYXQoZGUsIi9qb2JzIiksS2UsSikuY2F0Y2goZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgcG9zdGluZyBqb2IuICIpfSldO2Nhc2UgMTA6cmV0dXJuIFllPURlLnNlbnQoKSxKZT1ZZS5yZXN1bHQsZz8oSCYmKG5lLmluZm8o'@;
put 'IkpvYiBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yICciLmNvbmNhdChGZSwiJy4iKSksbmUuaW5mbygiWW91IGNhbiBtb25pdG9yIHRoZSBqb2IgcHJvZ3Jlc3MgYXQgJyIuY29uY2F0KG9lLmdldEJhc2VVcmwoKSkuY29uY2F0KEplLmxpbmtzLmZpbmQoZnVuY3Rpb24oemUpe3JldHVybiJzdGF0'@;
put 'ZSI9PT16ZS5yZWx9KS5ocmVmLCInLiIpKSksWzQsKDAscS5wb2xsSm9iU3RhdGUpKG9lLEplLEgsYixDLHtzZXNzaW9uOmZlLHNlc3Npb25NYW5hZ2VyOnNlfSkuY2F0Y2goZnVuY3Rpb24oemUpe3JldHVybiBrKE1lLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaXQsdXQsTXQsSHQs'@;
put 'UHQsb247cmV0dXJuIEUodGhpcyxmdW5jdGlvbihDbil7c3dpdGNoKENuLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGl0PW51bGw9PT0oUHQ9emU/LnJlc3BvbnNlKXx8dm9pZCAwPT09UHQ/dm9pZCAwOlB0LmRhdGEsdXQ9L2Vycj1bMC05XSosLy5leGVjKGl0KSwiNTExMyIhPT0obnVsbD09PShv'@;
put 'bj11dD8uWzBdKXx8dm9pZCAwPT09b24/dm9pZCAwOm9uLnNsaWNlKDQsLTEpKT9bMywyXTooTXQ9SmUubGlua3MuZmluZChmdW5jdGlvbihVdCl7cmV0dXJuInVwIj09PVV0LnJlbH0pLmhyZWYrIi9sb2ciLEh0PXplLFs0LCgwLFguZmV0Y2hMb2dCeUNodW5rcykob2UsSixNdCwxZTYpXSk7'@;
put 'Y2FzZSAxOkh0LmxvZz1Dbi5zZW50KCksQ24ubGFiZWw9MjtjYXNlIDI6dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfX0pfSl9KV0pOlsyLGZlXTtjYXNlIDExOnJldHVybiBsdD1EZS5zZW50KCksYj9bNCwoMCxZLmdldFRv'@;
put 'a2Vucykob2UsYildOlszLDEzXTtjYXNlIDEyOko9RGUuc2VudCgpLmFjY2Vzc190b2tlbixEZS5sYWJlbD0xMztjYXNlIDEzOnJldHVybls0LG9lLmdldCgiL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoZGUsIi9qb2JzLyIpLmNvbmNhdChKZS5pZCksSikuY2F0Y2goZnVuY3Rpb24oemUp'@;
put 'e3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSldO2Nhc2UgMTQ6cmV0dXJuIFBlPURlLnNlbnQoKS5yZXN1bHQsYmU9dm9pZCAwLEFlPSIiLFRlPVBlLmxpbmtzLmZpbmQoZnVuY3Rpb24oemUpe3JldHVybiJsb2ciPT09emUucmVsfSks'@;
put 'SCYmVGU/KHFlPSIiLmNvbmNhdChUZS5ocmVmLCIvY29udGVudCIpLFhlPW51bGwhPT0odz1udWxsPT09KHA9UGUubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PXA/dm9pZCAwOnAubGluZUNvdW50KSYmdm9pZCAwIT09dz93OjFlNixbNCwoMCxYLmZldGNoTG9nQnlDaHVua3MpKG9lLEoscWUs'@;
put 'WGUpXSk6WzMsMTZdO2Nhc2UgMTU6QWU9RGUuc2VudCgpLERlLmxhYmVsPTE2O2Nhc2UgMTY6aWYobHQ9PT1xLkpvYlN0YXRlLkZhaWxlZHx8bHQ9PT1xLkpvYlN0YXRlLkVycm9yKXRocm93IG5ldyBCLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcihQZSxBZSk7cmV0dXJuIE4/KFVlPSIvY29t'@;
put 'cHV0ZS9zZXNzaW9ucy8iLmNvbmNhdChkZSwiL2ZpbGVyZWZzL193ZWJvdXQvY29udGVudCIpLFs0LG9lLmdldChVZSxKLCJ0ZXh0L3BsYWluIikuY2F0Y2goZnVuY3Rpb24oemUpe3JldHVybiBrKE1lLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaXQsdXQsTXQsSHQ7cmV0dXJuIEUo'@;
put 'dGhpcyxmdW5jdGlvbihQdCl7c3dpdGNoKFB0LmxhYmVsKXtjYXNlIDA6cmV0dXJuIHplIGluc3RhbmNlb2YgQi5Ob3RGb3VuZEVycm9yJiZUZT8oaXQ9IiIuY29uY2F0KFRlLmhyZWYsIi9jb250ZW50IiksdXQ9bnVsbCE9PShIdD1udWxsPT09KE10PVBlLmxvZ1N0YXRpc3RpY3MpfHx2b2lk'@;
put 'IDA9PT1NdD92b2lkIDA6TXQubGluZUNvdW50KSYmdm9pZCAwIT09SHQ/SHQ6MWU2LFs0LCgwLFguZmV0Y2hMb2dCeUNodW5rcykob2UsSixpdCx1dCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIEFlPVB0LnNlbnQoKSxbMixQcm9taXNlLnJlamVjdCh7c3RhdHVzOjUwMCxsb2c6QWV9KV07Y2Fz'@;
put 'ZSAyOnJldHVyblsyLHtyZXN1bHQ6SlNPTi5zdHJpbmdpZnkoemUpfV19fSl9KX0pXSk6WzIse2pvYjpQZSxsb2c6QWV9XTtjYXNlIDE3OnJldHVybiBiZT1EZS5zZW50KCksWzQsc2UuY2xlYXJTZXNzaW9uKGRlLEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2Fn'@;
put 'ZSkoemUsIkVycm9yIHdoaWxlIGNsZWFyaW5nIHNlc3Npb24uICIpfSldO2Nhc2UgMTg6cmV0dXJuIERlLnNlbnQoKSxbMix7cmVzdWx0OmJlPy5yZXN1bHQsbG9nOkFlfV07Y2FzZSAxOTppZig0MDQ9PT0oaHQ9RGUuc2VudCgpKS5zdGF0dXMpcmV0dXJuWzIsdGUob2Usc2UsaGUsdWUsY2Us'@;
put 'RyxiLEQsSCwhMSwhMCldO3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKShodCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHNjcmlwdC4gIik7Y2FzZSAyMDpyZXR1cm5bMl19fSl9KX19LDc0NTg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9dGhpcyYmdGhpcy5f'@;
put 'X2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0ZShZLnRocm93KG9lKSl9Y2F0Y2goc2Up'@;
put 'e1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNlPW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMm'@;
put 'JnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgwKSx0aHJvdzplZSgxKSxyZXR1cm46ZWUo'@;
put 'Mil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVy'@;
put 'YXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFdKSkuZG9uZSlyZXR1cm4gWDtzd2l0Y2go'@;
put 'WT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5vcHMu'@;
put 'cG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMpLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFdPlhbMF0mJnNlWzFdPFhbM10pKXtxLmxh'@;
put 'YmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhbMV0sWD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9c2U9'@;
put 'Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KSxPLmdldEZpbGVTdHJlYW09dm9pZCAwO3ZhciBrPVIoMjk3NSksRT1SKDc3NTcpO08uZ2V0RmlsZVN0cmVhbT1mdW5jdGlvbihqLFYpe3JldHVybiBLKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUscTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9u'@;
put 'KGVlKXtzd2l0Y2goZWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gQj1SKDI5NzUpLmNyZWF0ZVdyaXRlU3RyZWFtLFk9Vnx8ei5jd2QoKSxbNCwoMCxrLmlzRm9sZGVyKShZKV07Y2FzZSAxOnJldHVybiBlZS5zZW50KCk/KFg9IiIuY29uY2F0KGoubmFtZXx8ImpvYiIsIi0iKS5jb25jYXQoKDAs'@;
put 'RS5nZW5lcmF0ZVRpbWVzdGFtcCkoKSwiLmxvZyIpLFU9UigyNTIwKSxxPVUuam9pbihWfHx6LmN3ZCgpLFgpLFs0LEIocSldKTpbMywzXTtjYXNlIDI6Y2FzZSA0OnJldHVyblsyLGVlLnNlbnQoKV07Y2FzZSAzOnJldHVybls0LEIoWSldfX0pfSl9fSwxMzQzOmZ1bmN0aW9uKE0sTyxSKXsi'@;
put 'dXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKG9lKXtmb3IodmFyIHNlLGhlPTEsdWU9YXJndW1lbnRzLmxlbmd0aDtoZTx1ZTtoZSsrKWZvcih2YXIgY2Ug'@;
put 'aW4gc2U9YXJndW1lbnRzW2hlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2UsY2UpJiYob2VbY2VdPXNlW2NlXSk7cmV0dXJuIG9lfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ob2Usc2UsaGUsdWUpe3Jl'@;
put 'dHVybiBuZXcoaGV8fChoZT1Qcm9taXNlKSkoZnVuY3Rpb24oY2UsRyl7ZnVuY3Rpb24gYihOKXt0cnl7SCh1ZS5uZXh0KE4pKX1jYXRjaChnKXtHKGcpfX1mdW5jdGlvbiBEKE4pe3RyeXtIKHVlLnRocm93KE4pKX1jYXRjaChnKXtHKGcpfX1mdW5jdGlvbiBIKE4pe3ZhciBnO04uZG9uZT9j'@;
put 'ZShOLnZhbHVlKTooZz1OLnZhbHVlLGcgaW5zdGFuY2VvZiBoZT9nOm5ldyBoZShmdW5jdGlvbihDKXtDKGcpfSkpLnRoZW4oYixEKX1IKCh1ZT11ZS5hcHBseShvZSxzZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24ob2Usc2Upe3ZhciBoZSx1'@;
put 'ZSxjZSxHLGI9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJuIGNlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEc9e25leHQ6RCgwKSx0aHJvdzpEKDEpLHJldHVybjpEKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoR1tTeW1i'@;
put 'b2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxHO2Z1bmN0aW9uIEQoSCl7cmV0dXJuIGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihnKXtpZihoZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtiOyl0cnl7'@;
put 'aWYoaGU9MSx1ZSYmKGNlPTImZ1swXT91ZS5yZXR1cm46Z1swXT91ZS50aHJvd3x8KChjZT11ZS5yZXR1cm4pJiZjZS5jYWxsKHVlKSwwKTp1ZS5uZXh0KSYmIShjZT1jZS5jYWxsKHVlLGdbMV0pKS5kb25lKXJldHVybiBjZTtzd2l0Y2godWU9MCxjZSYmKGc9WzImZ1swXSxjZS52YWx1ZV0p'@;
put 'LGdbMF0pe2Nhc2UgMDpjYXNlIDE6Y2U9ZzticmVhaztjYXNlIDQ6cmV0dXJuIGIubGFiZWwrKyx7dmFsdWU6Z1sxXSxkb25lOiExfTtjYXNlIDU6Yi5sYWJlbCsrLHVlPWdbMV0sZz1bMF07Y29udGludWU7Y2FzZSA3Omc9Yi5vcHMucG9wKCksYi50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1'@;
put 'bHQ6aWYoISgoY2U9KGNlPWIudHJ5cykubGVuZ3RoPjAmJmNlW2NlLmxlbmd0aC0xXSl8fDYhPT1nWzBdJiYyIT09Z1swXSkpe2I9MDtjb250aW51ZX1pZigzPT09Z1swXSYmKCFjZXx8Z1sxXT5jZVswXSYmZ1sxXTxjZVszXSkpe2IubGFiZWw9Z1sxXTticmVha31pZig2PT09Z1swXSYmYi5s'@;
put 'YWJlbDxjZVsxXSl7Yi5sYWJlbD1jZVsxXSxjZT1nO2JyZWFrfWlmKGNlJiZiLmxhYmVsPGNlWzJdKXtiLmxhYmVsPWNlWzJdLGIub3BzLnB1c2goZyk7YnJlYWt9Y2VbMl0mJmIub3BzLnBvcCgpLGIudHJ5cy5wb3AoKTtjb250aW51ZX1nPXNlLmNhbGwob2UsYil9Y2F0Y2goQyl7Zz1bNixD'@;
put 'XSx1ZT0wfWZpbmFsbHl7aGU9Y2U9MH1pZig1JmdbMF0pdGhyb3cgZ1sxXTtyZXR1cm57dmFsdWU6Z1swXT9nWzFdOnZvaWQgMCxkb25lOiEwfX0oW0gsTl0pfX19LGo9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihvZSxzZSxoZSl7aWYoaGV8fDI9PT1hcmd1bWVudHMubGVu'@;
put 'Z3RoKWZvcih2YXIgdWUsY2U9MCxHPXNlLmxlbmd0aDtjZTxHO2NlKyspIXVlJiZjZSBpbiBzZXx8KHVlfHwodWU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc2UsMCxjZSkpLHVlW2NlXT1zZVtjZV0pO3JldHVybiBvZS5jb25jYXQodWV8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs'@;
put 'KHNlKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRvUG9sbD1PLnBvbGxKb2JTdGF0ZT1PLkpvYlN0YXRlPXZvaWQgMDt2YXIgVixvZSxCPVIoNzA0KSxZPVIoMTM5NSksWD1SKDEyMzApLFU9Uig1OTI4KTsob2U9Vj1PLkpvYlN0YXRlfHwo'@;
put 'Ty5Kb2JTdGF0ZT17fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixvZS5SdW5uaW5nPSJydW5uaW5nIixvZS5QZW5kaW5nPSJwZW5kaW5nIixvZS5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLG9lLk5vU3RhdGU9IiIsb2UuRmFpbGVkPSJmYWlsZWQiLG9lLkVycm9yPSJlcnJvciIsTy5wb2xs'@;
put 'Sm9iU3RhdGU9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRCxILE4sZyxDLFMsdixwLHcsSjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKG5lKXtzd2l0Y2gobmUubGFiZWwpe2Nhc2UgMDppZihiPXoubG9nZ2Vy'@;
put 'fHxLLEQ9Y2U/LnN0cmVhbUxvZ3x8ITEsSD1be21heFBvbGxDb3VudDoyMDAscG9sbEludGVydmFsOjMwMH0se21heFBvbGxDb3VudDozMDAscG9sbEludGVydmFsOjNlM30se21heFBvbGxDb3VudDo1MDAscG9sbEludGVydmFsOjNlNH0se21heFBvbGxDb3VudDozNDAwLHBvbGxJbnRlcnZh'@;
put 'bDo2ZTR9XSx2b2lkIDAhPT1jZT8oTj1bY2VdLHZvaWQgMCE9PShnPWNlLnBvbGxTdHJhdGVneSk/KHRlKGcpLGc9Zy5zb3J0KGZ1bmN0aW9uKGRlLGZlKXtyZXR1cm4gZGUubWF4UG9sbENvdW50LWZlLm1heFBvbGxDb3VudH0pLE49aihqKFtdLE4sITApLGcsITApKTpOPWooaihbXSxOLCEw'@;
put 'KSxILCEwKSk6Tj1ILEM9Ti5zcGxpY2UoMCwxKVswXSxjZT1JKEkoe30sQyksY2V8fHt9KSwhKFM9c2UubGlua3MuZmluZChmdW5jdGlvbihkZSl7cmV0dXJuInN0YXRlIj09PWRlLnJlbH0pKSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBzdGF0ZSBsaW5rIHdhcyBub3QgZm91bmQuIik7cmV0dXJu'@;
put 'WzQscShvZSxzZSxWLk5vU3RhdGUsaGUsdWUpLmNhdGNoKGZ1bmN0aW9uKGRlKXtyZXR1cm4gYi5lcnJvcigiRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gIi5jb25jYXQoUy5ocmVmLCIuIFN0YXJ0aW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0byBiZSBydW5uaW5nLiIpLGRlKSxWLlVu'@;
put 'YXZhaWxhYmxlfSldO2Nhc2UgMTpyZXR1cm4gdj1uZS5zZW50KCkscD0wLHY9PT1WLkNvbXBsZXRlZD9bMixQcm9taXNlLnJlc29sdmUodildOkQmJigwLFUuaXNOb2RlKSgpP1s0LCgwLFIoNzQ1OCkuZ2V0RmlsZVN0cmVhbSkoc2UsY2UubG9nRm9sZGVyUGF0aCldOlszLDNdO2Nhc2UgMjp3'@;
put 'PW5lLnNlbnQoKSxuZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bNCwoMCxPLmRvUG9sbCkob2Usc2UsdixoZSxwLGNlLHVlLEQsdyxHKV07Y2FzZSA0OmlmKEo9bmUuc2VudCgpLHA9Si5wb2xsQ291bnQsIWVlKHY9Si5zdGF0ZSl8fHA+PWNlLm1heFBvbGxDb3VudCYmIU4ubGVuZ3RoKXJldHVy'@;
put 'blsyLHZdO25lLmxhYmVsPTU7Y2FzZSA1OnJldHVybiBOLmxlbmd0aCYmZWUodik/KEM9Ti5zcGxpY2UoMCwxKVswXSxjZSYmKEMubG9nRm9sZGVyUGF0aD1jZS5sb2dGb2xkZXJQYXRoKSxbNCwoMCxPLmRvUG9sbCkob2Usc2UsdixoZSxwLEMsdWUsRCx3LEcpXSk6WzMsN107Y2FzZSA2OnJl'@;
put 'dHVybiBKPW5lLnNlbnQoKSx2PUouc3RhdGUscD1KLnBvbGxDb3VudCxbMyw1XTtjYXNlIDc6cmV0dXJuIHcmJncuZW5kKCksWzIsdl19fSl9KX07dmFyIHE9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2Upe3JldHVybiBrKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEcsYjty'@;
put 'ZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIEc9c2UubGlua3MuZmluZChmdW5jdGlvbihIKXtyZXR1cm4ic3RhdGUiPT09SC5yZWx9KSxlZShoZSk/KGI9dm9pZCAwLGNlP1s0LCgwLEIuZ2V0VG9rZW5zKShvZSxjZSldOlszLDJdKTpbMyw0'@;
put 'XTtjYXNlIDE6Yj1ELnNlbnQoKSxELmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LG9lLmdldCgiIi5jb25jYXQoRy5ocmVmLCI/X2FjdGlvbj13YWl0JndhaXQ9MzAwIiksYj8uYWNjZXNzX3Rva2VuLCJ0ZXh0L3BsYWluIix7fSx1ZSkuY2F0Y2goZnVuY3Rpb24oSCl7dGhyb3cgbmV3IFkuSm9i'@;
put 'U3RhdGVQb2xsRXJyb3Ioc2UuaWQsSCl9KV07Y2FzZSAzOnJldHVyblsyLEQuc2VudCgpLnJlc3VsdC50cmltKCldO2Nhc2UgNDpyZXR1cm5bMixoZV19fSl9KX0sZWU9ZnVuY3Rpb24ob2Upe3JldHVybiBvZT09PVYuUnVubmluZ3x8b2U9PT1WLk5vU3RhdGV8fG9lPT09Vi5QZW5kaW5nfHxv'@;
put 'ZT09PVYuVW5hdmFpbGFibGV9O08uZG9Qb2xsPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTil7cmV0dXJuIGsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDLFMsdixwLHcsSixuZSxkZSxmZSx4ZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKExlKXtzd2l0'@;
put 'Y2goTGUubGFiZWwpe2Nhc2UgMDpnPUcubWF4UG9sbENvdW50LEM9Ry5wb2xsSW50ZXJ2YWwsUz16LmxvZ2dlcnx8Syx2PXNlLmxpbmtzLmZpbmQoZnVuY3Rpb24oRmUpe3JldHVybiJzdGF0ZSI9PT1GZS5yZWx9KSxwPTAsdz1oZSxKPVYuTm9TdGF0ZSxuZT0wLGRlPWZ1bmN0aW9uKCl7dmFy'@;
put 'IEZlLE9lLEtlLFllLEplLGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTWUpe3N3aXRjaChNZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBOJiZjZSYmY2UlMTA9PTAmJmI/KEtlPShGZT1OLnNlc3Npb24pLmlkLEplPXNlLmlkLFs0LChPZT1OLnNlc3Np'@;
put 'b25NYW5hZ2VyKS5nZXRTZXNzaW9uU3RhdGUoRmUuc3RhdGVVcmwsRmUuZXRhZyxZZT1iLmFjY2Vzc190b2tlbikuY2F0Y2goZnVuY3Rpb24oRGUpe3Rocm93IG5ldyBZLkpvYlN0YXRlUG9sbEVycm9yKEplLERlKX0pXSk6WzMsMl07Y2FzZSAxOmlmKGx0PU1lLnNlbnQoKSxiZT1sdC5yZXNw'@;
put 'b25zZVN0YXR1cywhKEFlPWZ1bmN0aW9uKERlKXtyZXR1cm5bWC5TZXNzaW9uU3RhdGUuUnVubmluZyxYLlNlc3Npb25TdGF0ZS5JZGxlXS5pbmNsdWRlcyhEZSl9KShQZT1sdC5yZXN1bHQpfHwyMDAhPT1iZSl0aHJvdyBPZS5jbGVhclNlc3Npb24oS2UsWWUpLFRlPUFlKFBlKT8iU2Vzc2lv'@;
put 'biByZXNwb25zZSBzdGF0dXMgaXMgbm90IDIwMC4gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgIi5jb25jYXQoYmUsIi4iKToiU2Vzc2lvbiBzdGF0ZSBvZiB0aGUgam9iIGlzIG5vdCAncnVubmluZycgb3IgJ2lkbGUnLiBTZXNzaW9uIHN0YXRlIGlzICciLmNvbmNhdChQZSwiJyIpLG5l'@;
put 'dyBZLkpvYlN0YXRlUG9sbEVycm9yKEplLG5ldyBFcnJvcihUZSkpO01lLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LHEob2Usc2Usdyx1ZSxiKS5jYXRjaChmdW5jdGlvbihEZSl7aWYocCsrLGNlPj1nfHxwPj01KXRocm93IERlO3JldHVybiBTLmVycm9yKCJFcnJvciBmZXRjaGluZyBqb2Ig'@;
put 'c3RhdGUgZnJvbSAiLmNvbmNhdCh2LmhyZWYsIi4gUmVzdW1pbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuIiksRGUpLFYuVW5hdmFpbGFibGV9KV07Y2FzZSAzOnJldHVybiB3PU1lLnNlbnQoKSxjZSsrLHFlPXNlLmxpbmtzLmZpbmQoZnVuY3Rpb24oRGUpe3JldHVybiJz'@;
put 'ZWxmIj09PURlLnJlbH0pLmhyZWYsRD9bNCxvZS5nZXQocWUsYj8uYWNjZXNzX3Rva2VuKV06WzMsN107Y2FzZSA0OnJldHVybiBYZT1NZS5zZW50KCkucmVzdWx0LFVlPW51bGwhPT0oeGU9bnVsbD09PShmZT1YZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09ZmU/dm9pZCAwOmZlLmxpbmVD'@;
put 'b3VudCkmJnZvaWQgMCE9PXhlP3hlOjFlNiwoaHQ9KCgwLFUuaXNOb2RlKSgpP1IoMjA4MCk6e3NhdmVMb2c6bnVsbH0pLnNhdmVMb2cpP1s0LGh0KHNlLG9lLG5lLFVlLEgsYj8uYWNjZXNzX3Rva2VuKV06WzMsNl07Y2FzZSA1Ok1lLnNlbnQoKSxNZS5sYWJlbD02O2Nhc2UgNjpuZSs9VWUs'@;
put 'TWUubGFiZWw9NztjYXNlIDc6cmV0dXJuIHVlJiZKIT09dyYmKFMuaW5mbygiUG9sbGluZzogIi5jb25jYXQob2UuZ2V0QmFzZVVybCgpK3FlLCIvc3RhdGUiKSksUy5pbmZvKCJDdXJyZW50IGpvYiBzdGF0ZTogIi5jb25jYXQodykpLEo9dyksdyE9PVYuVW5hdmFpbGFibGUmJnA+MCYmKHA9'@;
put 'MCksdz09PVYuQ29tcGxldGVkP1szLDldOls0LCgwLFUuZGVsYXkpKEMpXTtjYXNlIDg6TWUuc2VudCgpLE1lLmxhYmVsPTk7Y2FzZSA5OnJldHVyblsyXX19KX0sTGUubGFiZWw9MTtjYXNlIDE6cmV0dXJuIGVlKHcpJiZjZTw9Zz9bNSxkZSgpXTpbMywzXTtjYXNlIDI6cmV0dXJuIExlLnNl'@;
put 'bnQoKSxbMywxXTtjYXNlIDM6cmV0dXJuWzIse3N0YXRlOncscG9sbENvdW50OmNlfV19fSl9KX07dmFyIHRlPWZ1bmN0aW9uKG9lKXt2YXIgc2U9ZnVuY3Rpb24oaGUsdWUpe3Rocm93IG5ldyBFcnJvcigiUG9sbCBzdHJhdGVnaWVzIGFyZSBub3QgdmFsaWQuIi5jb25jYXQoaGU/IiAiLmNv'@;
put 'bmNhdChoZSk6IiIpLmNvbmNhdCh1ZT8iIEludmFsaWQgcG9sbCBzdHJhdGVneTogXG4iLmNvbmNhdChKU09OLnN0cmluZ2lmeSh1ZSxudWxsLDIpKToiIikpfTtvZS5mb3JFYWNoKGZ1bmN0aW9uKGhlLHVlKXt2YXIgY2U9aGUubWF4UG9sbENvdW50LEc9aGUucG9sbEludGVydmFsO2NlPDE/'@;
put 'c2UoIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLGhlKTowIT09dWU/Y2U8PW9lW3VlLTFdLm1heFBvbGxDb3VudCYmc2UoIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcgaW4gcHJldmlvdXMgcG9sbCBzdHJhdGVn'@;
put 'eS4iLGhlKTpHPDEmJnNlKCIncG9sbEludGVydmFsJyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixoZSl9KX19LDIwODA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihWLEIsWSxY'@;
put 'KXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihVLHEpe2Z1bmN0aW9uIGVlKHNlKXt0cnl7b2UoWC5uZXh0KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiB0ZShzZSl7dHJ5e29lKFgudGhyb3coc2UpKX1jYXRjaChoZSl7cShoZSl9fWZ1bmN0aW9uIG9lKHNlKXt2'@;
put 'YXIgaGU7c2UuZG9uZT9VKHNlLnZhbHVlKTooaGU9c2UudmFsdWUsaGUgaW5zdGFuY2VvZiBZP2hlOm5ldyBZKGZ1bmN0aW9uKHVlKXt1ZShoZSl9KSkudGhlbihlZSx0ZSl9b2UoKFg9WC5hcHBseShWLEJ8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0'@;
put 'aW9uKFYsQil7dmFyIFksWCxVLHEsZWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVVswXSl0aHJvdyBVWzFdO3JldHVybiBVWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHE9e25leHQ6dGUoMCksdGhyb3c6dGUoMSkscmV0dXJuOnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'U3ltYm9sJiYocVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIHRlKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe3JldHVybiBmdW5jdGlvbihoZSl7aWYoWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRp'@;
put 'bmcuIik7Zm9yKDtlZTspdHJ5e2lmKFk9MSxYJiYoVT0yJmhlWzBdP1gucmV0dXJuOmhlWzBdP1gudGhyb3d8fCgoVT1YLnJldHVybikmJlUuY2FsbChYKSwwKTpYLm5leHQpJiYhKFU9VS5jYWxsKFgsaGVbMV0pKS5kb25lKXJldHVybiBVO3N3aXRjaChYPTAsVSYmKGhlPVsyJmhlWzBdLFUu'@;
put 'dmFsdWVdKSxoZVswXSl7Y2FzZSAwOmNhc2UgMTpVPWhlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZWUubGFiZWwrKyx7dmFsdWU6aGVbMV0sZG9uZTohMX07Y2FzZSA1OmVlLmxhYmVsKyssWD1oZVsxXSxoZT1bMF07Y29udGludWU7Y2FzZSA3OmhlPWVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgp'@;
put 'O2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVT0oVT1lZS50cnlzKS5sZW5ndGg+MCYmVVtVLmxlbmd0aC0xXSl8fDYhPT1oZVswXSYmMiE9PWhlWzBdKSl7ZWU9MDtjb250aW51ZX1pZigzPT09aGVbMF0mJighVXx8aGVbMV0+VVswXSYmaGVbMV08VVszXSkpe2VlLmxhYmVsPWhlWzFdO2JyZWFr'@;
put 'fWlmKDY9PT1oZVswXSYmZWUubGFiZWw8VVsxXSl7ZWUubGFiZWw9VVsxXSxVPWhlO2JyZWFrfWlmKFUmJmVlLmxhYmVsPFVbMl0pe2VlLmxhYmVsPVVbMl0sZWUub3BzLnB1c2goaGUpO2JyZWFrfVVbMl0mJmVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlfWhlPUIuY2FsbChW'@;
put 'LGVlKX1jYXRjaCh1ZSl7aGU9WzYsdWVdLFg9MH1maW5hbGx5e1k9VT0wfWlmKDUmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJue3ZhbHVlOmhlWzBdP2hlWzFdOnZvaWQgMCxkb25lOiEwfX0oW29lLHNlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pLE8uc2F2ZUxvZz12b2lkIDA7dmFyIEU9Uig1OTI4KSxqPVIoNjEzMSk7Ty5zYXZlTG9nPWZ1bmN0aW9uKFYsQixZLFgsVSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGUsb2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihzZSl7c3dpdGNoKHNl'@;
put 'LmxhYmVsKXtjYXNlIDA6aWYoIXEpdGhyb3cgbmV3IEVycm9yKCJMb2dzIGZvciBqb2IgIi5jb25jYXQoVi5pZCwiIGNhbm5vdCBiZSBmZXRjaGVkIHdpdGhvdXQgYSB2YWxpZCBhY2Nlc3MgdG9rZW4uIikpO2lmKCFVKXRocm93IG5ldyBFcnJvcigiTG9ncyBmb3Igam9iICIuY29uY2F0KFYu'@;
put 'aWQsIiBjYW5ub3QgYmUgd3JpdHRlbiB3aXRob3V0IGEgdmFsaWQgd3JpdGUgc3RyZWFtLiIpKTtpZihlZT16LmxvZ2dlcnx8SywhKHRlPVYubGlua3MuZmluZChmdW5jdGlvbihoZSl7cmV0dXJuImxvZyI9PT1oZS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJMb2cgVVJMIGZvciBqb2IgIi5j'@;
put 'b25jYXQoVi5pZCwiIHdhcyBub3QgZm91bmQuIikpO3JldHVybls0LCgwLEUuZmV0Y2hMb2cpKEIscSwiIi5jb25jYXQodGUuaHJlZiwiL2NvbnRlbnQiKSxZLFgpXTtjYXNlIDE6cmV0dXJuIG9lPXNlLnNlbnQoKSxlZS5pbmZvKCJXcml0aW5nIGxvZ3MgdG8gIi5jb25jYXQoVS5wYXRoKSks'@;
put 'WzQsKDAsai53cml0ZVN0cmVhbSkoVSxvZXx8IiIpXTtjYXNlIDI6cmV0dXJuIHNlLnNlbnQoKSxbMl19fSl9KX19LDY0OTY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSxqLFYsQil7cmV0dXJuIG5ldyhWfHwoVj1Q'@;
put 'cm9taXNlKSkoZnVuY3Rpb24oWSxYKXtmdW5jdGlvbiBVKHRlKXt0cnl7ZWUoQi5uZXh0KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlvbiBxKHRlKXt0cnl7ZWUoQi50aHJvdyh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gZWUodGUpe3ZhciBvZTt0ZS5kb25lP1kodGUudmFs'@;
put 'dWUpOihvZT10ZS52YWx1ZSxvZSBpbnN0YW5jZW9mIFY/b2U6bmV3IFYoZnVuY3Rpb24oc2Upe3NlKG9lKX0pKS50aGVuKFUscSl9ZWUoKEI9Qi5hcHBseShFLGp8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEUsail7dmFyIFYsQixZLFgsVT17'@;
put 'bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZZWzBdKXRocm93IFlbMV07cmV0dXJuIFlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWD17bmV4dDpxKDApLHRocm93OnEoMSkscmV0dXJuOnEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihYW1N5bWJvbC5pdGVyYXRvcl09'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFg7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe2lmKFYpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7VTspdHJ5e2lmKFY9MSxCJiYo'@;
put 'WT0yJm9lWzBdP0IucmV0dXJuOm9lWzBdP0IudGhyb3d8fCgoWT1CLnJldHVybikmJlkuY2FsbChCKSwwKTpCLm5leHQpJiYhKFk9WS5jYWxsKEIsb2VbMV0pKS5kb25lKXJldHVybiBZO3N3aXRjaChCPTAsWSYmKG9lPVsyJm9lWzBdLFkudmFsdWVdKSxvZVswXSl7Y2FzZSAwOmNhc2UgMTpZ'@;
put 'PW9lO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVS5sYWJlbCsrLHt2YWx1ZTpvZVsxXSxkb25lOiExfTtjYXNlIDU6VS5sYWJlbCsrLEI9b2VbMV0sb2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpvZT1VLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChZPShZPVUudHJ5'@;
put 'cykubGVuZ3RoPjAmJllbWS5sZW5ndGgtMV0pfHw2IT09b2VbMF0mJjIhPT1vZVswXSkpe1U9MDtjb250aW51ZX1pZigzPT09b2VbMF0mJighWXx8b2VbMV0+WVswXSYmb2VbMV08WVszXSkpe1UubGFiZWw9b2VbMV07YnJlYWt9aWYoNj09PW9lWzBdJiZVLmxhYmVsPFlbMV0pe1UubGFiZWw9'@;
put 'WVsxXSxZPW9lO2JyZWFrfWlmKFkmJlUubGFiZWw8WVsyXSl7VS5sYWJlbD1ZWzJdLFUub3BzLnB1c2gob2UpO2JyZWFrfVlbMl0mJlUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZX1vZT1qLmNhbGwoRSxVKX1jYXRjaChzZSl7b2U9WzYsc2VdLEI9MH1maW5hbGx5e1Y9WT0wfWlm'@;
put 'KDUmb2VbMF0pdGhyb3cgb2VbMV07cmV0dXJue3ZhbHVlOm9lWzBdP29lWzFdOnZvaWQgMCxkb25lOiEwfX0oW2VlLHRlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udXBsb2FkVGFibGVzPXZvaWQgMDt2YXIgST1SKDk3NzgpLGs9Uigy'@;
put 'NDAyKTtPLnVwbG9hZFRhYmxlcz1mdW5jdGlvbihFLGosVil7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUscSxlZSx0ZTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nhc2UgMDpmb3IoWCBpbiBCPVtdLFk9W10s'@;
put 'ailZLnB1c2goWCk7VT0wLG9lLmxhYmVsPTE7Y2FzZSAxOmlmKCEoVTxZLmxlbmd0aCkpcmV0dXJuWzMsNF07aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PShlZT0oMCxrLmNvbnZlcnRUb0NTVikoaixxPVlbVV0pKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9m'@;
put 'IGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7cmV0dXJuWzQsRS51cGxvYWRGaWxlKCIvZmlsZXMvZmlsZXMjcmF3VXBsb2FkIixlZSxWKS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKHNlLCJFcnJvciB3aGlsZSB1cGxv'@;
put 'YWRpbmcgZmlsZS4gIil9KV07Y2FzZSAyOnRlPW9lLnNlbnQoKSxCLnB1c2goe3RhYmxlTmFtZTpxLGZpbGU6dGUucmVzdWx0fSksb2UubGFiZWw9MztjYXNlIDM6cmV0dXJuIFUrKyxbMywxXTtjYXNlIDQ6cmV0dXJuWzIsQl19fSl9KX19LDYxMzE6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmlj'@;
put 'dCI7dmFyIFI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEssSSxrLEUpe3JldHVybiBuZXcoa3x8KGs9UHJvbWlzZSkpKGZ1bmN0aW9uKGosVil7ZnVuY3Rpb24gQihVKXt0cnl7WChFLm5leHQoVSkpfWNhdGNoKHEpe1YocSl9fWZ1bmN0aW9uIFkoVSl7dHJ5e1goRS50aHJvdyhV'@;
put 'KSl9Y2F0Y2gocSl7VihxKX19ZnVuY3Rpb24gWChVKXt2YXIgcTtVLmRvbmU/aihVLnZhbHVlKToocT1VLnZhbHVlLHEgaW5zdGFuY2VvZiBrP3E6bmV3IGsoZnVuY3Rpb24oZWUpe2VlKHEpfSkpLnRoZW4oQixZKX1YKChFPUUuYXBwbHkoSyxJfHxbXSkpLm5leHQoKSl9KX0sej10aGlzJiZ0'@;
put 'aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihLLEkpe3ZhciBrLEUsaixWLEI9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmalswXSl0aHJvdyBqWzFdO3JldHVybiBqWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFY9e25leHQ6WSgwKSx0aHJvdzpZKDEpLHJldHVybjpZKDIpfSwi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxWO2Z1bmN0aW9uIFkoWCl7cmV0dXJuIGZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihxKXtpZihrKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBh'@;
put 'bHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0I7KXRyeXtpZihrPTEsRSYmKGo9MiZxWzBdP0UucmV0dXJuOnFbMF0/RS50aHJvd3x8KChqPUUucmV0dXJuKSYmai5jYWxsKEUpLDApOkUubmV4dCkmJiEoaj1qLmNhbGwoRSxxWzFdKSkuZG9uZSlyZXR1cm4gajtzd2l0Y2goRT0wLGomJihxPVsy'@;
put 'JnFbMF0sai52YWx1ZV0pLHFbMF0pe2Nhc2UgMDpjYXNlIDE6aj1xO2JyZWFrO2Nhc2UgNDpyZXR1cm4gQi5sYWJlbCsrLHt2YWx1ZTpxWzFdLGRvbmU6ITF9O2Nhc2UgNTpCLmxhYmVsKyssRT1xWzFdLHE9WzBdO2NvbnRpbnVlO2Nhc2UgNzpxPUIub3BzLnBvcCgpLEIudHJ5cy5wb3AoKTtj'@;
put 'b250aW51ZTtkZWZhdWx0OmlmKCEoKGo9KGo9Qi50cnlzKS5sZW5ndGg+MCYmaltqLmxlbmd0aC0xXSl8fDYhPT1xWzBdJiYyIT09cVswXSkpe0I9MDtjb250aW51ZX1pZigzPT09cVswXSYmKCFqfHxxWzFdPmpbMF0mJnFbMV08alszXSkpe0IubGFiZWw9cVsxXTticmVha31pZig2PT09cVsw'@;
put 'XSYmQi5sYWJlbDxqWzFdKXtCLmxhYmVsPWpbMV0saj1xO2JyZWFrfWlmKGomJkIubGFiZWw8alsyXSl7Qi5sYWJlbD1qWzJdLEIub3BzLnB1c2gocSk7YnJlYWt9alsyXSYmQi5vcHMucG9wKCksQi50cnlzLnBvcCgpO2NvbnRpbnVlfXE9SS5jYWxsKEssQil9Y2F0Y2goZWUpe3E9WzYsZWVd'@;
put 'LEU9MH1maW5hbGx5e2s9aj0wfWlmKDUmcVswXSl0aHJvdyBxWzFdO3JldHVybnt2YWx1ZTpxWzBdP3FbMV06dm9pZCAwLGRvbmU6ITB9fShbWCxVXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ud3JpdGVTdHJlYW09dm9pZCAwLE8ud3Jp'@;
put 'dGVTdHJlYW09ZnVuY3Rpb24oSyxJKXtyZXR1cm4gUih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oayl7cmV0dXJuWzIsSy53cml0ZShJKyJcbiIsZnVuY3Rpb24oRSl7cmV0dXJuIEU/UHJvbWlzZS5yZWplY3QoRSk6UHJvbWlzZS5yZXNv'@;
put 'bHZlKCl9KV19KX0pfX0sMjg1MTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCksSz1SKDQxNTUpLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG9lLHNlLGhlLHVlKXtyZXR1cm4gbmV3KGhlfHwoaGU9UHJvbWlzZSkpKGZ1bmN0aW9uKGNlLEcpe2Z1'@;
put 'bmN0aW9uIGIoTil7dHJ5e0godWUubmV4dChOKSl9Y2F0Y2goZyl7RyhnKX19ZnVuY3Rpb24gRChOKXt0cnl7SCh1ZS50aHJvdyhOKSl9Y2F0Y2goZyl7RyhnKX19ZnVuY3Rpb24gSChOKXt2YXIgZztOLmRvbmU/Y2UoTi52YWx1ZSk6KGc9Ti52YWx1ZSxnIGluc3RhbmNlb2YgaGU/ZzpuZXcg'@;
put 'aGUoZnVuY3Rpb24oQyl7QyhnKX0pKS50aGVuKGIsRCl9SCgodWU9dWUuYXBwbHkob2Usc2V8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKG9lLHNlKXt2YXIgaGUsdWUsY2UsRyxiPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmNlWzBd'@;
put 'KXRocm93IGNlWzFdO3JldHVybiBjZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBHPXtuZXh0OkQoMCksdGhyb3c6RCgxKSxyZXR1cm46RCgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksRztmdW5j'@;
put 'dGlvbiBEKEgpe3JldHVybiBmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oZyl7aWYoaGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YjspdHJ5e2lmKGhlPTEsdWUmJihjZT0yJmdbMF0/dWUucmV0dXJuOmdbMF0/dWUudGhy'@;
put 'b3d8fCgoY2U9dWUucmV0dXJuKSYmY2UuY2FsbCh1ZSksMCk6dWUubmV4dCkmJiEoY2U9Y2UuY2FsbCh1ZSxnWzFdKSkuZG9uZSlyZXR1cm4gY2U7c3dpdGNoKHVlPTAsY2UmJihnPVsyJmdbMF0sY2UudmFsdWVdKSxnWzBdKXtjYXNlIDA6Y2FzZSAxOmNlPWc7YnJlYWs7Y2FzZSA0OnJldHVy'@;
put 'biBiLmxhYmVsKysse3ZhbHVlOmdbMV0sZG9uZTohMX07Y2FzZSA1OmIubGFiZWwrKyx1ZT1nWzFdLGc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpnPWIub3BzLnBvcCgpLGIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGNlPShjZT1iLnRyeXMpLmxlbmd0aD4wJiZjZVtjZS5sZW5n'@;
put 'dGgtMV0pfHw2IT09Z1swXSYmMiE9PWdbMF0pKXtiPTA7Y29udGludWV9aWYoMz09PWdbMF0mJighY2V8fGdbMV0+Y2VbMF0mJmdbMV08Y2VbM10pKXtiLmxhYmVsPWdbMV07YnJlYWt9aWYoNj09PWdbMF0mJmIubGFiZWw8Y2VbMV0pe2IubGFiZWw9Y2VbMV0sY2U9ZzticmVha31pZihjZSYm'@;
put 'Yi5sYWJlbDxjZVsyXSl7Yi5sYWJlbD1jZVsyXSxiLm9wcy5wdXNoKGcpO2JyZWFrfWNlWzJdJiZiLm9wcy5wb3AoKSxiLnRyeXMucG9wKCk7Y29udGludWV9Zz1zZS5jYWxsKG9lLGIpfWNhdGNoKEMpe2c9WzYsQ10sdWU9MH1maW5hbGx5e2hlPWNlPTB9aWYoNSZnWzBdKXRocm93IGdbMV07'@;
put 'cmV0dXJue3ZhbHVlOmdbMF0/Z1sxXTp2b2lkIDAsZG9uZTohMH19KFtILE5dKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5BdXRoTWFuYWdlcj12b2lkIDA7dmFyIEU9UigzOTAwKSxqPVIoMTM5NSksVj1SKDU5MjgpLEI9UigxMTcwKSxZ'@;
put 'PVIoNTQxOCksWD1SKDQ1ODIpLFU9Uig2NTQ3KSxxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gb2Uoc2UsaGUsdWUsY2Upe3ZhciBHPXRoaXM7dGhpcy5zZXJ2ZXJVcmw9c2UsdGhpcy5zZXJ2ZXJUeXBlPWhlLHRoaXMucmVxdWVzdENsaWVudD11ZSx0aGlzLmxvZ2luQ2FsbGJhY2s9Y2UsdGhpcy51'@;
put 'c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD0iL1NBU0xvZ29uIix0aGlzLmV4dHJhY3RVc2VyTmFtZT1mdW5jdGlvbihiKXtzd2l0Y2goRy5zZXJ2ZXJUeXBlKXtjYXNlIEUuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVybiBiPy5pZDtjYXNl'@;
put 'IEUuU2VydmVyVHlwZS5TYXM5OnJldHVybiIiO2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBiPy51c2VybmFtZTtkZWZhdWx0OnJldHVybiB6LmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLmV4dHJhY3RV'@;
put 'c2VyTG9uZ05hbWU9ZnVuY3Rpb24oYil7c3dpdGNoKEcuc2VydmVyVHlwZSl7Y2FzZSBFLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gYj8ubmFtZTtjYXNlIEUuU2VydmVyVHlwZS5TYXM5OnJldHVybigwLEIuZXh0cmFjdFVzZXJMb25nTmFtZVNhczkpKGIpO2Nhc2UgRS5TZXJ2ZXJUeXBl'@;
put 'LlNhc2pzOnJldHVybiBiPy5kaXNwbGF5TmFtZTtkZWZhdWx0OnJldHVybiB6LmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLnNldExvZ2luVXJsPWZ1bmN0aW9uKGIpe3ZhciBEPWJbMV0ucmVwbGFjZSgvXD8uKi8s'@;
put 'IiIpO2lmKCIvIj09PURbMF0pe0Q9RC5zdWJzdHIoMSk7dmFyIEg9Ry5zZXJ2ZXJVcmw/IiIuY29uY2F0KEcuc2VydmVyVXJsLCIvIikuY29uY2F0KEQpOiIiLmNvbmNhdChEKTtHLmxvZ2luVXJsPUcuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNWaXlhP0g6SC5yZXBsYWNlKCIvU0FT'@;
put 'TG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKX19LHRoaXMubG9naW5Vcmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0aGlzLnNlcnZlclR5cGU9PT1FLlNlcnZl'@;
put 'clR5cGUuU2FzVml5YT8iL1NBU0xvZ29uL2xvZ291dC5kbz8iOiIvU0FTTG9nb24vbG9nb3V0In1yZXR1cm4gb2UucHJvdG90eXBlLnJlZGlyZWN0ZWRMb2dJbj1mdW5jdGlvbihzZSl7dmFyIGhlPXNlLm9uTG9nZ2VkT3V0O3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3ZhciB1ZSxHLGIsRCxILE4sZyxDLFM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih2KXtzd2l0Y2godi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDE6cmV0dXJuIHVlPXYuc2VudCgpLEc9dWUudXNlck5hbWUsYj11ZS51c2VyTG9uZ05hbWUsdWUu'@;
put 'aXNMb2dnZWRJbj8oKEsubG9nZ2VyfHx6KS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLFs0LHRoaXMubG9naW5DYWxsYmFjaygpXSk6WzMsM107Y2FzZSAyOnJldHVybiB2LnNlbnQoKSxbMix7aXNMb2dnZWRJbjohMCx1'@;
put 'c2VyTmFtZTpHLHVzZXJMb25nTmFtZTpifV07Y2FzZSAzOnJldHVybls0LCgwLFkub3BlbldlYlBhZ2UpKHRoaXMucmVkaXJlY3RlZExvZ2luVXJsLCJTQVNMb2dvbiIse3dpZHRoOjUwMCxoZWlnaHQ6NjAwfSxoZSldO2Nhc2UgNDpyZXR1cm4oRD12LnNlbnQoKSk/dGhpcy5zZXJ2ZXJUeXBl'@;
put 'IT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/WzMsNl06WzQsKDAsVS52ZXJpZnlTYXNWaXlhTG9naW4pKEQpXTpbMix7aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XTtjYXNlIDU6cmV0dXJuIE49di5zZW50KCksWzMsOF07Y2FzZSA2OnJldHVybls0LCgwLFgudmVy'@;
put 'aWZ5U2FzOUxvZ2luKShEKV07Y2FzZSA3Ok49di5zZW50KCksdi5sYWJlbD04O2Nhc2UgODpyZXR1cm4gSD1OLmlzTG9nZ2VkSW4sRC5jbG9zZSgpLEg/dGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhczk/WzMsMTBdOls0LHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKV06'@;
put 'WzMsMTNdO2Nhc2UgOTp2LnNlbnQoKSx2LmxhYmVsPTEwO2Nhc2UgMTA6cmV0dXJuWzQsdGhpcy5mZXRjaFVzZXJOYW1lKCldO2Nhc2UgMTE6cmV0dXJuIGc9di5zZW50KCksQz1nLnVzZXJOYW1lLFM9Zy51c2VyTG9uZ05hbWUsWzQsdGhpcy5sb2dpbkNhbGxiYWNrKCldO2Nhc2UgMTI6cmV0'@;
put 'dXJuIHYuc2VudCgpLFsyLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOkMsdXNlckxvbmdOYW1lOlN9XTtjYXNlIDEzOnJldHVyblsyLHtpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn1dfX0pfSl9LG9lLnByb3RvdHlwZS5sb2dJbj1mdW5jdGlvbihzZSxoZSl7cmV0'@;
put 'dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHVlLGNlLGIsRCxILE4sZyxDO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdWU9e19zZXJ2aWNlOiJkZWZhdWx0Iix1c2VybmFtZTpzZSxwYXNzd29yZDpoZX0sdGhp'@;
put 'cy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIixbNCx0aGlzLmNoZWNrU2Vzc2lvbigpXTtjYXNlIDE6cmV0dXJuIGNlPVMuc2VudCgpLGI9Y2UubG9naW5Gb3JtLEQ9Y2UudXNlckxvbmdOYW1lLGNlLmlzTG9nZ2VkSW4/KChLLmxvZ2dlcnx8eikubG9nKCJsb2dpbiB3YXMgbm90'@;
put 'IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSxbNCx0aGlzLmxvZ2luQ2FsbGJhY2soKV0pOlszLDNdO2Nhc2UgMjpyZXR1cm4gUy5zZW50KCksdGhpcy51c2VyTmFtZT11ZS51c2VybmFtZSx0aGlzLnVzZXJMb25nTmFtZT1ELFsyLHtpc0xvZ2dlZEluOiEw'@;
put 'LHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfV07Y2FzZSAzOnJldHVybls0LHRoaXMuc2VuZExvZ2luUmVxdWVzdChiLHVlKV07Y2FzZSA0OnJldHVybiBIPVMuc2VudCgpLChOPXRlKHRoaXMuc2VydmVyVHlwZSxIKSk/WzMsOV06ZWUoSCk/'@;
put 'WzQsdGhpcy5nZXRMb2dpbkZvcm0oSCldOlszLDddO2Nhc2UgNTpyZXR1cm4gZz1TLnNlbnQoKSxbNCx0aGlzLnNlbmRMb2dpblJlcXVlc3QoZyx1ZSldO2Nhc2UgNjpIPVMuc2VudCgpLFMubGFiZWw9NztjYXNlIDc6cmV0dXJuWzQsdGhpcy5jaGVja1Nlc3Npb24oKV07Y2FzZSA4OkM9Uy5z'@;
put 'ZW50KCksTj1DLmlzTG9nZ2VkSW4sdGhpcy51c2VyTG9uZ05hbWU9Qy51c2VyTG9uZ05hbWUsUy5sYWJlbD05O2Nhc2UgOTpyZXR1cm4gTj90aGlzLnNlcnZlclR5cGUhPT1FLlNlcnZlclR5cGUuU2FzOT9bMywxMV06WzQsdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpXTpbMywxMl07'@;
put 'Y2FzZSAxMDpTLnNlbnQoKSxTLmxhYmVsPTExO2Nhc2UgMTE6dGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT11ZS51c2VybmFtZSxTLmxhYmVsPTEyO2Nhc2UgMTI6cmV0dXJuWzIse2lzTG9nZ2VkSW46Tix1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlz'@;
put 'LnVzZXJMb25nTmFtZX1dfX0pfSl9LG9lLnByb3RvdHlwZS5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2Ug'@;
put 'MDpyZXR1cm4gc2U9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvU0FTU3RvcmVkUHJvY2Vzcy9qX3NwcmluZ19jYXNfc2VjdXJpdHlfY2hlY2siKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvU0FTTG9nb24vbG9naW4/c2VydmljZT0iLmNvbmNhdChzZSksdm9pZCAwKS5jYXRjaChm'@;
put 'dW5jdGlvbih1ZSl7aWYoISh1ZSBpbnN0YW5jZW9mIGouTm90Rm91bmRFcnJvcikpdGhyb3cgdWV9KV07Y2FzZSAxOnJldHVybiBoZS5zZW50KCksWzJdfX0pfSl9LG9lLnByb3RvdHlwZS5zZW5kTG9naW5SZXF1ZXN0PWZ1bmN0aW9uKHNlLGhlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24oKXt2YXIgRyxiO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5Vcmwse3Vz'@;
put 'ZXJuYW1lOmhlLnVzZXJuYW1lLHBhc3N3b3JkOmhlLnBhc3N3b3JkfSx2b2lkIDApXTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLEQuc2VudCgpLnJlc3VsdF07Y2FzZSAyOmZvcihHIGluIHNlKWhlW0ddPXNlW0ddO3JldHVybiBiPSgwLFYuc2VyaWFsaXplKShoZSksWzQsdGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCxiLHZvaWQgMCwidGV4dC9wbGFpbiIseyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLEFjY2VwdDoiKi8qIn0pXX19KX0pfSxvZS5wcm90b3R5cGUuY2hlY2tTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGhlLHVlLGNlLEc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDE6cmV0dXJuIHNlPWIuc2VudCgpLHVlPXNlLnVz'@;
put 'ZXJOYW1lLGNlPXNlLnVzZXJMb25nTmFtZSxHPW51bGwsKGhlPXNlLmlzTG9nZ2VkSW4pP1szLDRdOls0LHRoaXMubG9nT3V0KCldO2Nhc2UgMjpyZXR1cm4gYi5zZW50KCksWzQsdGhpcy5nZXROZXdMb2dpbkZvcm0oKV07Y2FzZSAzOkc9Yi5zZW50KCksYi5sYWJlbD00O2Nhc2UgNDpyZXR1'@;
put 'cm5bMixQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46aGUsdXNlck5hbWU6dWUsdXNlckxvbmdOYW1lOmNlLGxvZ2luRm9ybTpHfSldfX0pfSl9LG9lLnByb3RvdHlwZS5nZXROZXdMb2dpbkZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2'@;
put 'YXIgc2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNqcz9bMix0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvIix2b2lkIDApLnRoZW4oZnVuY3Rpb24odWUpe3ZhciBjZSxi'@;
put 'PW51bGw9PT0oY2U9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHVlLnJlc3VsdCkpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2VbMV07YiYmKGRvY3VtZW50'@;
put 'LmNvb2tpZT1iKX0pXTpbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9naW5VcmwucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIiksdm9pZCAwLCJ0ZXh0L3BsYWluIildO2Nhc2UgMTpyZXR1cm4gc2U9aGUuc2VudCgpLnJlc3VsdCxbNCx0aGlz'@;
put 'LmdldExvZ2luRm9ybShzZSldO2Nhc2UgMjpyZXR1cm5bMixoZS5zZW50KCldfX0pfSl9LG9lLnByb3RvdHlwZS5mZXRjaFVzZXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGhlLHVlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24o'@;
put 'Y2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBzZT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsdGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9pZGVudGl0aWVzL3VzZXJzL0BjdXJyZW50VXNlciI6dGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBl'@;
put 'LlNhczk/Ii9TQVNTdG9yZWRQcm9jZXNzIjoiL1NBU2pzQXBpL3Nlc3Npb24iKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHNlLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKGZ1bmN0aW9uKEcpe3JldHVybntyZXN1bHQ6ImF1dGhFcnIifX0pXTtjYXNlIDE6cmV0dXJuIGhlPWNlLnNl'@;
put 'bnQoKS5yZXN1bHQsKHVlPSJhdXRoRXJyIiE9PWhlKT9bMywzXTpbNCx0aGlzLmxvZ091dCgpXTtjYXNlIDI6cmV0dXJuIGNlLnNlbnQoKSxbMix7aXNMb2dnZWRJbjp1ZSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XTtjYXNlIDM6cmV0dXJuWzIse2lzTG9nZ2VkSW46dWUsdXNlck5h'@;
put 'bWU6dGhpcy5leHRyYWN0VXNlck5hbWUoaGUpLHVzZXJMb25nTmFtZTp0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWUoaGUpfV19fSl9KX0sb2UucHJvdG90eXBlLmdldExvZ2luRm9ybT1mdW5jdGlvbihzZSl7dmFyIGhlPS88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb258bG9naW4pW14iXSopLio+'@;
put 'Ly5leGVjKHNlKSx1ZT17fTtpZihoZSYmaGUubGVuZ3RoKXt0aGlzLnNldExvZ2luVXJsKGhlKTt2YXIgY2U9KHNlPXNlLnJlcGxhY2UoLzxpbnB1dC9nLCJcbjxpbnB1dCIpKS5tYXRjaCgvPGlucHV0LioiaGlkZGVuIltePl0qPi9nKTtjZSYmY2UuZm9yRWFjaChmdW5jdGlvbihHKXt2YXIg'@;
put 'Yj1HLm1hdGNoKC9uYW1lPSIoW14iXSopIlxzdmFsdWU9IihbXiJdKikvKTtiJiZiLmxlbmd0aCYmKHVlW2JbMV1dPWJbMl0pfSl9cmV0dXJuIE9iamVjdC5rZXlzKHVlKS5sZW5ndGg/dWU6bnVsbH0sb2UucHJvdG90eXBlLmxvZ091dD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oc2Upe3JldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJDc3JmVG9rZW5zKCksWzIsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0p'@;
put 'XX0pfSl9LG9lfSgpO08uQXV0aE1hbmFnZXI9cTt2YXIgZWU9ZnVuY3Rpb24ob2Upe3JldHVybi9BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0aGUgc3lzdGVtIHdhcyB2ZXJpZnlpbmcgeW91ciBjcmVkZW50aWFscy4gUGxlYXNlIGVudGVyIHlvdXIgY3JlZGVudGlhbHMgYWdhaW4uL2dtLnRl'@;
put 'c3Qob2UpfSx0ZT1mdW5jdGlvbihvZSxzZSl7cmV0dXJuIG9lPT09RS5TZXJ2ZXJUeXBlLlNhc2pzP3NlPy5sb2dnZWRpbjovWW91IGhhdmUgc2lnbmVkIGluL2dtLnRlc3Qoc2UpfX0sNTc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8'@;
put 'ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oWCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShvZSl7dHJ5e3RlKFkudGhyb3cob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1'@;
put 'bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVlKTooc2U9b2UudmFsdWUsc2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFwcGx5KGosVnx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dl'@;
put 'bmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OmVlKDApLHRocm93OmVlKDEpLHJldHVybjplZSgyKX0sImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lmKEIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFs'@;
put 'cmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZJiYoWD0yJnNlWzBdP1kucmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxsKFksc2VbMV0pKS5kb25lKXJldHVybiBYO3N3aXRjaChZPTAsWCYmKHNl'@;
put 'PVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpYPXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0sc2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRy'@;
put 'eXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEudHJ5cykubGVuZ3RoPjAmJlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighWHx8c2VbMV0+WFswXSYmc2VbMV08WFszXSkpe3EubGFiZWw9c2VbMV07'@;
put 'YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFiZWw9WFsxXSxYPXNlO2JyZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1WLmNhbGwoaixx'@;
put 'KX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0wfWlmKDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p'@;
put 'LE8uZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz12b2lkIDA7dmFyIEk9Uig5Nzc4KSxrPVIoOTAxNyksRT1SKDM5MDApO08uZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz1mdW5jdGlvbihqLFYsQil7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFg7cmV0dXJuIEsodGhp'@;
put 'cyxmdW5jdGlvbihVKXtzd2l0Y2goVS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGoucG9zdCgiL1NBU2pzQXBpL2F1dGgvdG9rZW4iLFg9e2NsaWVudElkOlYsY29kZTpCfSx2b2lkIDApLnRoZW4oZnVuY3Rpb24ocSl7dmFyIGVlPXEucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46ZWUuYWNj'@;
put 'ZXNzVG9rZW4scmVmcmVzaF90b2tlbjplZS5yZWZyZXNoVG9rZW59fSkuY2F0Y2goZnVuY3Rpb24ocSl7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKHEsKDAsay5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tlbiIsImdldEFjY2Vzc1Rva2VuRm9yU2Fz'@;
put 'anMiLEUuU2VydmVyVHlwZS5TYXNqcywiL1NBU2pzQXBpL2F1dGgvdG9rZW4iLFgsVikpfSldO2Nhc2UgMTpyZXR1cm5bMixVLnNlbnQoKV19fSl9KX19LDM1Njk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPXRoaXMmJnRoaXMuX19hd2FpdGVy'@;
put 'fHxmdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gbmV3KFh8fChYPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiB0ZShoZSl7dHJ5e3NlKFUubmV4dChoZSkpfWNhdGNoKHVlKXtlZSh1ZSl9fWZ1bmN0aW9uIG9lKGhlKXt0cnl7c2UoVS50aHJvdyhoZSkpfWNhdGNoKHVlKXtlZSh1'@;
put 'ZSl9fWZ1bmN0aW9uIHNlKGhlKXt2YXIgdWU7aGUuZG9uZT9xKGhlLnZhbHVlKToodWU9aGUudmFsdWUsdWUgaW5zdGFuY2VvZiBYP3VlOm5ldyBYKGZ1bmN0aW9uKGNlKXtjZSh1ZSl9KSkudGhlbih0ZSxvZSl9c2UoKFU9VS5hcHBseShCLFl8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRo'@;
put 'aXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEIsWSl7dmFyIFgsVSxxLGVlLHRlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnFbMF0pdGhyb3cgcVsxXTtyZXR1cm4gcVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBlZT17bmV4dDpvZSgwKSx0aHJvdzpvZSgxKSxyZXR1cm46b2Uo'@;
put 'Mil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihlZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlZTtmdW5jdGlvbiBvZShzZSl7cmV0dXJuIGZ1bmN0aW9uKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe2lmKFgpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2Vu'@;
put 'ZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dGU7KXRyeXtpZihYPTEsVSYmKHE9MiZ1ZVswXT9VLnJldHVybjp1ZVswXT9VLnRocm93fHwoKHE9VS5yZXR1cm4pJiZxLmNhbGwoVSksMCk6VS5uZXh0KSYmIShxPXEuY2FsbChVLHVlWzFdKSkuZG9uZSlyZXR1cm4gcTtzd2l0'@;
put 'Y2goVT0wLHEmJih1ZT1bMiZ1ZVswXSxxLnZhbHVlXSksdWVbMF0pe2Nhc2UgMDpjYXNlIDE6cT11ZTticmVhaztjYXNlIDQ6cmV0dXJuIHRlLmxhYmVsKysse3ZhbHVlOnVlWzFdLGRvbmU6ITF9O2Nhc2UgNTp0ZS5sYWJlbCsrLFU9dWVbMV0sdWU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp1ZT10'@;
put 'ZS5vcHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHE9KHE9dGUudHJ5cykubGVuZ3RoPjAmJnFbcS5sZW5ndGgtMV0pfHw2IT09dWVbMF0mJjIhPT11ZVswXSkpe3RlPTA7Y29udGludWV9aWYoMz09PXVlWzBdJiYoIXF8fHVlWzFdPnFbMF0mJnVlWzFdPHFb'@;
put 'M10pKXt0ZS5sYWJlbD11ZVsxXTticmVha31pZig2PT09dWVbMF0mJnRlLmxhYmVsPHFbMV0pe3RlLmxhYmVsPXFbMV0scT11ZTticmVha31pZihxJiZ0ZS5sYWJlbDxxWzJdKXt0ZS5sYWJlbD1xWzJdLHRlLm9wcy5wdXNoKHVlKTticmVha31xWzJdJiZ0ZS5vcHMucG9wKCksdGUudHJ5cy5w'@;
put 'b3AoKTtjb250aW51ZX11ZT1ZLmNhbGwoQix0ZSl9Y2F0Y2goY2Upe3VlPVs2LGNlXSxVPTB9ZmluYWxseXtYPXE9MH1pZig1JnVlWzBdKXRocm93IHVlWzFdO3JldHVybnt2YWx1ZTp1ZVswXT91ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtzZSxoZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEFjY2Vzc1Rva2VuRm9yVml5YT12b2lkIDA7dmFyIGs9UigzOTAwKSxFPVIoOTc3OCksaj1SKDEzOTUpLFY9Uig5MDE3KTtPLmdldEFjY2Vzc1Rva2VuRm9yVml5YT1mdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gSyh0aGlzLHZvaWQg'@;
put 'MCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZSx0ZSxvZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT12b2lkIDA9PT16P2J0b2EoWSsiOiIrWCk6ei5mcm9tKFkrIjoiK1gpLnRvU3RyaW5nKCJiYXNlNjQiKSxlZT0iL1NB'@;
put 'U0xvZ29uL29hdXRoL3Rva2VuIix0ZT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIitxLEFjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9LG9lPW5ldyBVUkxTZWFyY2hQYXJhbXMoe2dyYW50X3R5cGU6ImF1dGhvcml6YXRpb25fY29kZSIsY29kZTpVfSksc2U9bmV3IFVSTFNlYXJjaFBhcmFtcyhv'@;
put 'ZSksWzQsQi5wb3N0KGVlLHNlLHZvaWQgMCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIix0ZSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIHVlLnJlc3VsdH0pLmNhdGNoKGZ1bmN0aW9uKHVlKXt0aHJvdyB1ZSBpbnN0YW5jZW9mIGouQ2VydGlmaWNhdGVFcnJvcj91ZToo'@;
put 'MCxFLnByZWZpeE1lc3NhZ2UpKHVlLCgwLFYuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclZpeWEiLGsuU2VydmVyVHlwZS5TYXNWaXlhLGVlLG9lLHRlLFksWCkpfSldO2Nhc2UgMTpyZXR1cm5bMixoZS5zZW50'@;
put 'KCldfX0pfSl9fSw5MDE3OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNwb25zZT1PLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PXZvaWQgMDt2YXIg'@;
put 'ej1SKDM5MDApLEs9ZnVuY3Rpb24oSSl7cmV0dXJuIlJlc3BvbnNlIGZyb20gIi5jb25jYXQoST09PXouU2VydmVyVHlwZS5TYXNWaXlhPyJWaXlhIjoiU2FzanMiLCIgaXMgYmVsb3cuIil9O08uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9ZnVuY3Rpb24oSSxrLEUsaixWLEIsWSxYKXt2'@;
put 'YXIgVT1mdW5jdGlvbihlZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGVlLG51bGwsMil9LHE9WyJFcnJvciB3aGlsZSAiLmNvbmNhdChJLCIgZnJvbSAiKS5jb25jYXQoaiksIlRocm93biBieSB0aGUgQHNhc2pzL2FkYXB0ZXIgIi5jb25jYXQoaywiIGZ1bmN0aW9uLiIpXTtyZXR1cm4gViYm'@;
put 'KHEucHVzaCgiUGF5bG9hZDoiKSxxLnB1c2goVShWKSkpLEImJihxLnB1c2goIkhlYWRlcnM6IikscS5wdXNoKFUoQikpKSxZJiZxLnB1c2goIkNsaWVudElkOiAiLmNvbmNhdChZKSksWCYmcS5wdXNoKCJDbGllbnRTZWNyZXQ6ICIuY29uY2F0KFgpKSxxLnB1c2goIiIpLHEucHVzaCgiIi5j'@;
put 'b25jYXQoSyhFKSkpLHEucHVzaCgiIikscS5qb2luKCJcbiIpfSxPLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gSS5zcGxpdCgiIi5jb25jYXQoSyhrKSwiXG4iKSkucG9wKCl9fSw3MDQ6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihlZSx0ZSl7ZnVuY3Rpb24gb2UodWUpe3RyeXtoZShxLm5leHQodWUpKX1jYXRjaChjZSl7dGUoY2UpfX1m'@;
put 'dW5jdGlvbiBzZSh1ZSl7dHJ5e2hlKHEudGhyb3codWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBoZSh1ZSl7dmFyIGNlO3VlLmRvbmU/ZWUodWUudmFsdWUpOihjZT11ZS52YWx1ZSxjZSBpbnN0YW5jZW9mIFU/Y2U6bmV3IFUoZnVuY3Rpb24oRyl7RyhjZSl9KSkudGhlbihvZSxz'@;
put 'ZSl9aGUoKHE9cS5hcHBseShZLFh8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFksWCl7dmFyIFUscSxlZSx0ZSxvZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZlZVswXSl0aHJvdyBlZVsxXTtyZXR1cm4gZWVbMV19LHRyeXM6W10s'@;
put 'b3BzOltdfTtyZXR1cm4gdGU9e25leHQ6c2UoMCksdGhyb3c6c2UoMSkscmV0dXJuOnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rpb24gc2UoaGUpe3JldHVybiBmdW5jdGlvbih1'@;
put 'ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZihVKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO29lOyl0cnl7aWYoVT0xLHEmJihlZT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8fCgoZWU9cS5yZXR1cm4pJiZlZS5jYWxs'@;
put 'KHEpLDApOnEubmV4dCkmJiEoZWU9ZWUuY2FsbChxLGNlWzFdKSkuZG9uZSlyZXR1cm4gZWU7c3dpdGNoKHE9MCxlZSYmKGNlPVsyJmNlWzBdLGVlLnZhbHVlXSksY2VbMF0pe2Nhc2UgMDpjYXNlIDE6ZWU9Y2U7YnJlYWs7Y2FzZSA0OnJldHVybiBvZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxk'@;
put 'b25lOiExfTtjYXNlIDU6b2UubGFiZWwrKyxxPWNlWzFdLGNlPVswXTtjb250aW51ZTtjYXNlIDc6Y2U9b2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChlZT0oZWU9b2UudHJ5cykubGVuZ3RoPjAmJmVlW2VlLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYm'@;
put 'MiE9PWNlWzBdKSl7b2U9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJighZWV8fGNlWzFdPmVlWzBdJiZjZVsxXTxlZVszXSkpe29lLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmb2UubGFiZWw8ZWVbMV0pe29lLmxhYmVsPWVlWzFdLGVlPWNlO2JyZWFrfWlmKGVlJiZvZS5sYWJl'@;
put 'bDxlZVsyXSl7b2UubGFiZWw9ZWVbMl0sb2Uub3BzLnB1c2goY2UpO2JyZWFrfWVlWzJdJiZvZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZX1jZT1YLmNhbGwoWSxvZSl9Y2F0Y2goRyl7Y2U9WzYsR10scT0wfWZpbmFsbHl7VT1lZT0wfWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07'@;
put 'cmV0dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW2hlLHVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0VG9rZW5zPXZvaWQgMDt2YXIgRT1SKDY3OTkpLGo9UigzOTAwKSxWPVIoMzY2KSxCPVIoMjQ5KTtP'@;
put 'LmdldFRva2Vucz1mdW5jdGlvbihZLFgsVSl7cmV0dXJuIHZvaWQgMD09PVUmJihVPWouU2VydmVyVHlwZS5TYXNWaXlhKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlLHRlLG9lLHNlLHVlLGNlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFi'@;
put 'ZWwpe2Nhc2UgMDppZihxPXoubG9nZ2VyfHxLLHRlPVgucmVmcmVzaF90b2tlbixvZT1YLmNsaWVudCxzZT1YLnNlY3JldCwhKDAsRS5pc0FjY2Vzc1Rva2VuRXhwaXJpbmcpKGVlPVguYWNjZXNzX3Rva2VuKSYmISgwLEUuaXNSZWZyZXNoVG9rZW5FeHBpcmluZykodGUpKXJldHVyblszLDVd'@;
put 'O2lmKCgwLEUuaGFzVG9rZW5FeHBpcmVkKSh0ZSkpdGhyb3cgcS5lcnJvcigiVW5hYmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIiksbmV3IEVycm9yKCJVbmFibGUgdG8gb2J0YWluIG5ldyBhY2Nlc3MgdG9rZW4uIFlvdXIg'@;
put 'cmVmcmVzaCB0b2tlbiBoYXMgZXhwaXJlZC4iKTtyZXR1cm4gcS5pbmZvKCJSZWZyZXNoaW5nIGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbnMuIiksVSE9PWouU2VydmVyVHlwZS5TYXNWaXlhP1szLDJdOls0LCgwLFYucmVmcmVzaFRva2Vuc0ZvclZpeWEpKFksb2Usc2UsdGUpXTtjYXNlIDE6'@;
put 'cmV0dXJuIGNlPUcuc2VudCgpLFszLDRdO2Nhc2UgMjpyZXR1cm5bNCwoMCxCLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykoWSx0ZSldO2Nhc2UgMzpjZT1HLnNlbnQoKSxHLmxhYmVsPTQ7Y2FzZSA0OmVlPSh1ZT1jZSkuYWNjZXNzX3Rva2VuLHRlPXVlLnJlZnJlc2hfdG9rZW4sRy5sYWJlbD01'@;
put 'O2Nhc2UgNTpyZXR1cm5bMix7YWNjZXNzX3Rva2VuOmVlLHJlZnJlc2hfdG9rZW46dGUsY2xpZW50Om9lLHNlY3JldDpzZX1dfX0pfSl9fSwxNTI3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1'@;
put 'bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaixWKX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1F'@;
put 'fHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMjg1MSksTyksSyhSKDkwOTcpLE8pLEsoUig5MTY2KSxPKX0sOTA5NzooTSxPKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD12b2lkIDAsTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD1mdW5jdGlvbihSKXtyZXR1cm4vPGZvcm0uK2FjdGlvbj0iKC4qTG9nb25cL29hdXRoXC9h'@;
put 'dXRob3JpemVbXiJdKikuKj4vZ20udGVzdChSKX19LDkxNjY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNMb2dJblJlcXVpcmVkPXZvaWQgMCxPLmlzTG9nSW5SZXF1aXJlZD1mdW5jdGlvbihSKXtyZXR1'@;
put 'cm4vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29uKXwobG9naW4pW14iXSopLio+L2dtLnRlc3QoUil9fSw1NDE4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEUsaixWLEIpe3JldHVybiBuZXcoVnx8KFY9UHJvbWlzZSkp'@;
put 'KGZ1bmN0aW9uKFksWCl7ZnVuY3Rpb24gVSh0ZSl7dHJ5e2VlKEIubmV4dCh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gcSh0ZSl7dHJ5e2VlKEIudGhyb3codGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIGVlKHRlKXt2YXIgb2U7dGUuZG9uZT9ZKHRlLnZhbHVlKToob2U9'@;
put 'dGUudmFsdWUsb2UgaW5zdGFuY2VvZiBWP29lOm5ldyBWKGZ1bmN0aW9uKHNlKXtzZShvZSl9KSkudGhlbihVLHEpfWVlKChCPUIuYXBwbHkoRSxqfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihFLGope3ZhciBWLEIsWSxYLFU9e2xhYmVsOjAs'@;
put 'c2VudDpmdW5jdGlvbigpe2lmKDEmWVswXSl0aHJvdyBZWzFdO3JldHVybiBZWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFg9e25leHQ6cSgwKSx0aHJvdzpxKDEpLHJldHVybjpxKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXN9KSxYO2Z1bmN0aW9uIHEoZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtpZihWKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1U7KXRyeXtpZihWPTEsQiYmKFk9MiZvZVsw'@;
put 'XT9CLnJldHVybjpvZVswXT9CLnRocm93fHwoKFk9Qi5yZXR1cm4pJiZZLmNhbGwoQiksMCk6Qi5uZXh0KSYmIShZPVkuY2FsbChCLG9lWzFdKSkuZG9uZSlyZXR1cm4gWTtzd2l0Y2goQj0wLFkmJihvZT1bMiZvZVswXSxZLnZhbHVlXSksb2VbMF0pe2Nhc2UgMDpjYXNlIDE6WT1vZTticmVh'@;
put 'aztjYXNlIDQ6cmV0dXJuIFUubGFiZWwrKyx7dmFsdWU6b2VbMV0sZG9uZTohMX07Y2FzZSA1OlUubGFiZWwrKyxCPW9lWzFdLG9lPVswXTtjb250aW51ZTtjYXNlIDc6b2U9VS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWT0oWT1VLnRyeXMpLmxlbmd0'@;
put 'aD4wJiZZW1kubGVuZ3RoLTFdKXx8NiE9PW9lWzBdJiYyIT09b2VbMF0pKXtVPTA7Y29udGludWV9aWYoMz09PW9lWzBdJiYoIVl8fG9lWzFdPllbMF0mJm9lWzFdPFlbM10pKXtVLmxhYmVsPW9lWzFdO2JyZWFrfWlmKDY9PT1vZVswXSYmVS5sYWJlbDxZWzFdKXtVLmxhYmVsPVlbMV0sWT1v'@;
put 'ZTticmVha31pZihZJiZVLmxhYmVsPFlbMl0pe1UubGFiZWw9WVsyXSxVLm9wcy5wdXNoKG9lKTticmVha31ZWzJdJiZVLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWV9b2U9ai5jYWxsKEUsVSl9Y2F0Y2goc2Upe29lPVs2LHNlXSxCPTB9ZmluYWxseXtWPVk9MH1pZig1Jm9lWzBd'@;
put 'KXRocm93IG9lWzFdO3JldHVybnt2YWx1ZTpvZVswXT9vZVsxXTp2b2lkIDAsZG9uZTohMH19KFtlZSx0ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm9wZW5XZWJQYWdlPXZvaWQgMDt2YXIgST1SKDEyMTApLGs9e3dpZHRoOjUwMCxo'@;
put 'ZWlnaHQ6NjAwfTtPLm9wZW5XZWJQYWdlPWZ1bmN0aW9uKEUsaixWLEIpe3JldHVybiB2b2lkIDA9PT1qJiYoaj0iIiksdm9pZCAwPT09ViYmKFY9aykseih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWSxYLFUscSxlZTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKHRlKXtzd2l0'@;
put 'Y2godGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gWT1WLndpZHRoLFg9Vi5oZWlnaHQsVT1zY3JlZW4ud2lkdGgvMi1ZLzIscT1zY3JlZW4uaGVpZ2h0LzItWC8yLChlZT13aW5kb3cub3BlbihFLGosInRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0iLmNvbmNhdChZLCIsaGVp'@;
put 'Z2h0PSIpLmNvbmNhdChYLCIsbGVmdD0iKS5jb25jYXQoVSwiLHRvcD0iKS5jb25jYXQocSkpKT9bMywyXTpbNCwoQj8/SS5vcGVuTG9naW5Qcm9tcHQpKCldO2Nhc2UgMTpyZXR1cm5bMix0ZS5zZW50KCk/d2luZG93Lm9wZW4oRSxqLCJ0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAs'@;
put 'd2lkdGg9Ii5jb25jYXQoWSwiLGhlaWdodD0iKS5jb25jYXQoWCwiLGxlZnQ9IikuY29uY2F0KFUsIix0b3A9IikuY29uY2F0KHEpKTpudWxsXTtjYXNlIDI6cmV0dXJuWzIsZWVdfX0pfSl9fSwyNDk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdh'@;
put 'aXRlcnx8ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oWCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShvZSl7dHJ5e3RlKFkudGhyb3cob2UpKX1jYXRjaChzZSl7VShz'@;
put 'ZSl9fWZ1bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVlKTooc2U9b2UudmFsdWUsc2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFwcGx5KGosVnx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhp'@;
put 'cy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OmVlKDApLHRocm93OmVlKDEpLHJldHVybjplZSgyKX0s'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lmKEIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9y'@;
put 'IGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZJiYoWD0yJnNlWzBdP1kucmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxsKFksc2VbMV0pKS5kb25lKXJldHVybiBYO3N3aXRjaChZPTAs'@;
put 'WCYmKHNlPVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpYPXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0sc2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3Ao'@;
put 'KSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEudHJ5cykubGVuZ3RoPjAmJlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighWHx8c2VbMV0+WFswXSYmc2VbMV08WFszXSkpe3EubGFiZWw9'@;
put 'c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFiZWw9WFsxXSxYPXNlO2JyZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1WLmNh'@;
put 'bGwoaixxKX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0wfWlmKDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1'@;
put 'ZTohMH0pLE8ucmVmcmVzaFRva2Vuc0ZvclNhc2pzPXZvaWQgMDt2YXIgST1SKDk3NzgpLGs9Uig5MDE3KSxFPVIoMzkwMCk7Ty5yZWZyZXNoVG9rZW5zRm9yU2FzanM9ZnVuY3Rpb24oaixWKXtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLGZ1'@;
put 'bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsai5wb3N0KCIvU0FTanNBcGkvYXV0aC9yZWZyZXNoIix2b2lkIDAsdm9pZCAwLHZvaWQgMCx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIrVn0pLnRoZW4oZnVuY3Rpb24oVSl7dmFyIHE9VS5yZXN1bHQ7cmV0dXJue2Fj'@;
put 'Y2Vzc190b2tlbjpxLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46cS5yZWZyZXNoVG9rZW59fSkuY2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKFUsKDAsay5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRv'@;
put 'a2Vuc0ZvclNhc2pzIixFLlNlcnZlclR5cGUuU2FzanMsIi9TQVNqc0FwaS9hdXRoL3JlZnJlc2giKSl9KV07Y2FzZSAxOnJldHVyblsyLFguc2VudCgpXX19KX0pfX0sMzY2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz10aGlzJiZ0aGlzLl9f'@;
put 'YXdhaXRlcnx8ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oZWUsdGUpe2Z1bmN0aW9uIG9lKHVlKXt0cnl7aGUocS5uZXh0KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gc2UodWUpe3RyeXtoZShxLnRocm93KHVlKSl9Y2F0Y2go'@;
put 'Y2Upe3RlKGNlKX19ZnVuY3Rpb24gaGUodWUpe3ZhciBjZTt1ZS5kb25lP2VlKHVlLnZhbHVlKTooY2U9dWUudmFsdWUsY2UgaW5zdGFuY2VvZiBVP2NlOm5ldyBVKGZ1bmN0aW9uKEcpe0coY2UpfSkpLnRoZW4ob2Usc2UpfWhlKChxPXEuYXBwbHkoWSxYfHxbXSkpLm5leHQoKSl9KX0sST10'@;
put 'aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihZLFgpe3ZhciBVLHEsZWUsdGUsb2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmZWVbMF0pdGhyb3cgZWVbMV07cmV0dXJuIGVlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEp'@;
put 'LHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0aW9uIHNlKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoVSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtvZTspdHJ5e2lmKFU9MSxxJiYoZWU9MiZjZVswXT9xLnJldHVybjpjZVswXT9xLnRocm93fHwoKGVlPXEucmV0dXJuKSYmZWUuY2FsbChxKSwwKTpxLm5leHQpJiYhKGVlPWVlLmNhbGwocSxjZVsxXSkpLmRv'@;
put 'bmUpcmV0dXJuIGVlO3N3aXRjaChxPTAsZWUmJihjZT1bMiZjZVswXSxlZS52YWx1ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOmVlPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gb2UubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1Om9lLmxhYmVsKysscT1jZVsxXSxjZT1bMF07'@;
put 'Y29udGludWU7Y2FzZSA3OmNlPW9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoZWU9KGVlPW9lLnRyeXMpLmxlbmd0aD4wJiZlZVtlZS5sZW5ndGgtMV0pfHw2IT09Y2VbMF0mJjIhPT1jZVswXSkpe29lPTA7Y29udGludWV9aWYoMz09PWNlWzBdJiYo'@;
put 'IWVlfHxjZVsxXT5lZVswXSYmY2VbMV08ZWVbM10pKXtvZS5sYWJlbD1jZVsxXTticmVha31pZig2PT09Y2VbMF0mJm9lLmxhYmVsPGVlWzFdKXtvZS5sYWJlbD1lZVsxXSxlZT1jZTticmVha31pZihlZSYmb2UubGFiZWw8ZWVbMl0pe29lLmxhYmVsPWVlWzJdLG9lLm9wcy5wdXNoKGNlKTti'@;
put 'cmVha31lZVsyXSYmb2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWV9Y2U9WC5jYWxsKFksb2UpfWNhdGNoKEcpe2NlPVs2LEddLHE9MH1maW5hbGx5e1U9ZWU9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZTohMH19'@;
put 'KFtoZSx1ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnJlZnJlc2hUb2tlbnNGb3JWaXlhPXZvaWQgMDt2YXIgaz1SKDM5MDApLEU9Uig5Nzc4KSxqPVIoNjIzMCksVj1SKDU5MjgpLEI9Uig5MDE3KTtPLnJlZnJlc2hUb2tlbnNGb3JW'@;
put 'aXlhPWZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlZSx0ZSxvZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDppZighKDAsVi5pc05vZGUpKCkpdGhyb3cgbmV3IEVycm9yKCJN'@;
put 'ZXRob2QgJ3JlZnJlc2hUb2tlbnNGb3JWaXlhJyBjYW4gb25seSBiZSB1c2VkIGJ5IE5vZGUuIik7cmV0dXJuIGVlPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLHRlPXZvaWQgMD09PXo/YnRvYShYKyI6IitVKTp6LmZyb20oWCsiOiIrVSkudG9TdHJpbmcoImJhc2U2NCIpLG9lPXtBdXRob3Jp'@;
put 'emF0aW9uOiJCYXNpYyAiK3RlfSwoc2U9bmV3IGopLmFwcGVuZCgiZ3JhbnRfdHlwZSIsInJlZnJlc2hfdG9rZW4iKSxzZS5hcHBlbmQoInJlZnJlc2hfdG9rZW4iLHEpLFs0LFkucG9zdChlZSxzZSx2b2lkIDAsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrc2UuX2JvdW5kYXJ5'@;
put 'LG9lKS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUucmVzdWx0fSkuY2F0Y2goZnVuY3Rpb24odWUpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKSh1ZSwoMCxCLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yVml5YSIs'@;
put 'ay5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZWUsc2Usb2UsWCxVKSl9KV07Y2FzZSAxOnJldHVyblsyLGhlLnNlbnQoKV19fSl9KX19LDQ1ODI6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oayxFLGosVil7cmV0dXJuIG5ldyhq'@;
put 'fHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oQixZKXtmdW5jdGlvbiBYKGVlKXt0cnl7cShWLm5leHQoZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIFUoZWUpe3RyeXtxKFYudGhyb3coZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIHEoZWUpe3ZhciB0ZTtlZS5kb25lP0IoZWUu'@;
put 'dmFsdWUpOih0ZT1lZS52YWx1ZSx0ZSBpbnN0YW5jZW9mIGo/dGU6bmV3IGooZnVuY3Rpb24ob2Upe29lKHRlKX0pKS50aGVuKFgsVSl9cSgoVj1WLmFwcGx5KGssRXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oayxFKXt2YXIgaixWLEIsWSxY'@;
put 'PXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkJbMF0pdGhyb3cgQlsxXTtyZXR1cm4gQlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBZPXtuZXh0OlUoMCksdGhyb3c6VSgxKSxyZXR1cm46VSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFlbU3ltYm9sLml0ZXJhdG9y'@;
put 'XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWTtmdW5jdGlvbiBVKHEpe3JldHVybiBmdW5jdGlvbihlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtpZihqKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1g7KXRyeXtpZihqPTEsViYm'@;
put 'KEI9MiZ0ZVswXT9WLnJldHVybjp0ZVswXT9WLnRocm93fHwoKEI9Vi5yZXR1cm4pJiZCLmNhbGwoViksMCk6Vi5uZXh0KSYmIShCPUIuY2FsbChWLHRlWzFdKSkuZG9uZSlyZXR1cm4gQjtzd2l0Y2goVj0wLEImJih0ZT1bMiZ0ZVswXSxCLnZhbHVlXSksdGVbMF0pe2Nhc2UgMDpjYXNlIDE6'@;
put 'Qj10ZTticmVhaztjYXNlIDQ6cmV0dXJuIFgubGFiZWwrKyx7dmFsdWU6dGVbMV0sZG9uZTohMX07Y2FzZSA1OlgubGFiZWwrKyxWPXRlWzFdLHRlPVswXTtjb250aW51ZTtjYXNlIDc6dGU9WC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoQj0oQj1YLnRy'@;
put 'eXMpLmxlbmd0aD4wJiZCW0IubGVuZ3RoLTFdKXx8NiE9PXRlWzBdJiYyIT09dGVbMF0pKXtYPTA7Y29udGludWV9aWYoMz09PXRlWzBdJiYoIUJ8fHRlWzFdPkJbMF0mJnRlWzFdPEJbM10pKXtYLmxhYmVsPXRlWzFdO2JyZWFrfWlmKDY9PT10ZVswXSYmWC5sYWJlbDxCWzFdKXtYLmxhYmVs'@;
put 'PUJbMV0sQj10ZTticmVha31pZihCJiZYLmxhYmVsPEJbMl0pe1gubGFiZWw9QlsyXSxYLm9wcy5wdXNoKHRlKTticmVha31CWzJdJiZYLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWV9dGU9RS5jYWxsKGssWCl9Y2F0Y2gob2Upe3RlPVs2LG9lXSxWPTB9ZmluYWxseXtqPUI9MH1p'@;
put 'Zig1JnRlWzBdKXRocm93IHRlWzFdO3JldHVybnt2YWx1ZTp0ZVswXT90ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtxLGVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udmVyaWZ5U2FzOUxvZ2luPXZvaWQgMDt2YXIgST1SKDU5MjgpO08u'@;
put 'dmVyaWZ5U2FzOUxvZ2luPWZ1bmN0aW9uKGspe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBFLGosVjtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKEIpe3N3aXRjaChCLmxhYmVsKXtjYXNlIDA6RT0hMSxqPW5ldyBEYXRlLFY9MCxCLmxhYmVsPTE7Y2FzZSAxOnJl'@;
put 'dHVybls0LCgwLEkuZGVsYXkpKDFlMyldO2Nhc2UgMjppZihCLnNlbnQoKSxrLmNsb3NlZClyZXR1cm5bMyw0XTtFPWsud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIikmJmsud2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0LmluY2x1ZGVzKCJZb3UgaGF2ZSBz'@;
put 'aWduZWQgaW4uIiksVj0oKG5ldyBEYXRlKS52YWx1ZU9mKCktai52YWx1ZU9mKCkpLzFlMyxCLmxhYmVsPTM7Y2FzZSAzOmlmKCFFJiZWPDMwMClyZXR1cm5bMywxXTtCLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyLHtpc0xvZ2dlZEluOkV9XX19KX0pfX0sNjU0NzpmdW5jdGlvbihNLE8sUil7'@;
put 'InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihrLEUsaixWKXtyZXR1cm4gbmV3KGp8fChqPVByb21pc2UpKShmdW5jdGlvbihCLFkpe2Z1bmN0aW9uIFgoZWUpe3RyeXtxKFYubmV4dChlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gVShlZSl7'@;
put 'dHJ5e3EoVi50aHJvdyhlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gcShlZSl7dmFyIHRlO2VlLmRvbmU/QihlZS52YWx1ZSk6KHRlPWVlLnZhbHVlLHRlIGluc3RhbmNlb2Ygaj90ZTpuZXcgaihmdW5jdGlvbihvZSl7b2UodGUpfSkpLnRoZW4oWCxVKX1xKChWPVYuYXBwbHkoayxF'@;
put 'fHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihrLEUpe3ZhciBqLFYsQixZLFg9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmQlswXSl0aHJvdyBCWzFdO3JldHVybiBCWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFk9e25leHQ6VSgw'@;
put 'KSx0aHJvdzpVKDEpLHJldHVybjpVKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxZO2Z1bmN0aW9uIFUocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXtyZXR1cm4gZnVuY3Rpb24odGUpe2lmKGopdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7WDspdHJ5e2lmKGo9MSxWJiYoQj0yJnRlWzBdP1YucmV0dXJuOnRlWzBdP1YudGhyb3d8fCgoQj1WLnJldHVybikmJkIuY2FsbChWKSwwKTpWLm5leHQpJiYhKEI9Qi5jYWxsKFYsdGVbMV0pKS5k'@;
put 'b25lKXJldHVybiBCO3N3aXRjaChWPTAsQiYmKHRlPVsyJnRlWzBdLEIudmFsdWVdKSx0ZVswXSl7Y2FzZSAwOmNhc2UgMTpCPXRlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gWC5sYWJlbCsrLHt2YWx1ZTp0ZVsxXSxkb25lOiExfTtjYXNlIDU6WC5sYWJlbCsrLFY9dGVbMV0sdGU9WzBdO2NvbnRp'@;
put 'bnVlO2Nhc2UgNzp0ZT1YLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChCPShCPVgudHJ5cykubGVuZ3RoPjAmJkJbQi5sZW5ndGgtMV0pfHw2IT09dGVbMF0mJjIhPT10ZVswXSkpe1g9MDtjb250aW51ZX1pZigzPT09dGVbMF0mJighQnx8dGVbMV0+Qlsw'@;
put 'XSYmdGVbMV08QlszXSkpe1gubGFiZWw9dGVbMV07YnJlYWt9aWYoNj09PXRlWzBdJiZYLmxhYmVsPEJbMV0pe1gubGFiZWw9QlsxXSxCPXRlO2JyZWFrfWlmKEImJlgubGFiZWw8QlsyXSl7WC5sYWJlbD1CWzJdLFgub3BzLnB1c2godGUpO2JyZWFrfUJbMl0mJlgub3BzLnBvcCgpLFgudHJ5'@;
put 'cy5wb3AoKTtjb250aW51ZX10ZT1FLmNhbGwoayxYKX1jYXRjaChvZSl7dGU9WzYsb2VdLFY9MH1maW5hbGx5e2o9Qj0wfWlmKDUmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJue3ZhbHVlOnRlWzBdP3RlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3EsZWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc0xvZ2dlZEluU0FTVklZQT1PLnZlcmlmeVNhc1ZpeWFMb2dpbj12b2lkIDA7dmFyIEk9Uig1OTI4KTtPLnZlcmlmeVNhc1ZpeWFMb2dpbj1mdW5jdGlvbihrKXt2YXIgRSxqO3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j'@;
put 'dGlvbigpe3ZhciBWLEIsWSxYO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDpWPSExLEI9bmV3IERhdGUsWT0wLFUubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSAyOmlmKFUuc2VudCgpLGsuY2xvc2VkKXJldHVy'@;
put 'blszLDRdO1Y9KDAsTy5pc0xvZ2dlZEluU0FTVklZQSkoKSxZPSgobmV3IERhdGUpLnZhbHVlT2YoKS1CLnZhbHVlT2YoKSkvMWUzLFUubGFiZWw9MztjYXNlIDM6aWYoIVYmJlk8MzAwKXJldHVyblszLDFdO1UubGFiZWw9NDtjYXNlIDQ6WD0hMSxCPW5ldyBEYXRlLFUubGFiZWw9NTtjYXNl'@;
put 'IDU6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSA2OmlmKFUuc2VudCgpLGsuY2xvc2VkKXJldHVyblszLDhdO1g9ay53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKXx8KG51bGw9PT0oaj1udWxsPT09KEU9ay53aW5kb3cuZG9jdW1lbnQuYm9keSl8fHZv'@;
put 'aWQgMD09PUU/dm9pZCAwOkUuaW5uZXJUZXh0KXx8dm9pZCAwPT09aj92b2lkIDA6ai5pbmNsdWRlcygiWW91IGhhdmUgc2lnbmVkIGluLiIpKSxZPSgobmV3IERhdGUpLnZhbHVlT2YoKS1CLnZhbHVlT2YoKSkvMWUzLFUubGFiZWw9NztjYXNlIDc6aWYoIVgmJlk8MzAwKXJldHVyblszLDVd'@;
put 'O1UubGFiZWw9ODtjYXNlIDg6cmV0dXJuWzIse2lzTG9nZ2VkSW46ViYmWH1dfX0pfSl9LE8uaXNMb2dnZWRJblNBU1ZJWUE9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJDdXJyZW50LVVzZXIiKSYmZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJ1c2VySWQi'@;
put 'KX19LDQwMzc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPXZvaWQgMDt2YXIgej1SKDI0MDIpLEs9Uig1OTI4KTtPLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09ZnVu'@;
put 'Y3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gaylpZihBcnJheS5pc0FycmF5KGtbRV0pKXt2YXIgaj1FLFY9KDAsei5jb252ZXJ0VG9DU1YpKGssRSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVYpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2'@;
put 'YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKCgwLEsuaXNOb2RlKSgpKUkuYXBwZW5kKGosVix7ZmlsZW5hbWU6IiIuY29uY2F0KGosIi5jc3YiKSxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pO2Vsc2V7dmFyIEI9bmV3IEJsb2IoW1ZdLHt0eXBlOiJhcHBs'@;
put 'aWNhdGlvbi9jc3YifSk7SS5hcHBlbmQoaixCLCIiLmNvbmNhdChqLCIuY3N2IikpfX1yZXR1cm4gSX19LDIxNzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT12'@;
put 'b2lkIDA7dmFyIHo9UigyNDAyKSxLPVIoNDc5OSk7Ty5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT1mdW5jdGlvbihJLGspe3ZhciBFPVtdLGo9e30sVj0wO2Zvcih2YXIgQiBpbiBrKXtWKyssKDAsei5pc0Zvcm1hdHNUYWJsZSkoQil8fEUucHVzaChCKTt2YXIgWT0oMCx6LmNvbnZlcnRUb0NT'@;
put 'VikoayxCKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09WSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7WS5sZW5ndGg+MTZlMz8oMCxLLnNwbGl0Q2h1bmtzKShZKS5tYXAo'@;
put 'ZnVuY3Rpb24oWCl7SS5hcHBlbmQoInNhc2pzIi5jb25jYXQoViwiZGF0YSIpLFgpfSk6alsic2FzanMiLmNvbmNhdChWLCJkYXRhIildPVl9cmV0dXJuIGouc2FzanNfdGFibGVzPUUuam9pbigiICIpLHtmb3JtRGF0YTpJLHJlcXVlc3RQYXJhbXM6an19fSwzNjA3OmZ1bmN0aW9uKE0sTyxS'@;
put 'KXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGssRSxqLFYpe3ZvaWQgMD09PVYmJihWPWopO3ZhciBCPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRSxqKTtCJiYhKCJnZXQiaW4gQj8hRS5fX2Vz'@;
put 'TW9kdWxlOkIud3JpdGFibGV8fEIuY29uZmlndXJhYmxlKXx8KEI9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVbal19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssVixCKX06ZnVuY3Rpb24oayxFLGosVil7dm9pZCAwPT09ViYmKFY9aiksa1tWXT1FW2pdfSksSz10'@;
put 'aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oayxFKXtmb3IodmFyIGogaW4gaykiZGVmYXVsdCI9PT1qfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxqKXx8eihFLGssail9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KTt2YXIgST1SKDU5NTYpO0soUigxMjMwKSxPKSxLKFIoMTM5NSksTyksSyhSKDk4MjEpLE8pLEsoUig4MzA2KSxPKSxLKFIoMzQ2NyksTyksSyhSKDM2MDIpLE8pLE8uZGVmYXVsdD1JLmRlZmF1bHR9LDE1NzA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMm'@;
put 'JnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihCLFkpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihYLFUpe1guX19wcm90b19fPVV9fHxmdW5jdGlvbihYLFUpe2Zvcih2YXIgcSBpbiBVKU9iamVjdC5w'@;
put 'cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLHEpJiYoWFtxXT1VW3FdKX0pKEIsWSl9LGZ1bmN0aW9uKEIsWSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFkmJm51bGwhPT1ZKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoWSkrIiBpcyBub3Qg'@;
put 'YSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gWCgpe3RoaXMuY29uc3RydWN0b3I9Qn16KEIsWSksQi5wcm90b3R5cGU9bnVsbD09PVk/T2JqZWN0LmNyZWF0ZShZKTooWC5wcm90b3R5cGU9WS5wcm90b3R5cGUsbmV3IFgpfSksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp'@;
put 'b24oQixZLFgsVSl7cmV0dXJuIG5ldyhYfHwoWD1Qcm9taXNlKSkoZnVuY3Rpb24ocSxlZSl7ZnVuY3Rpb24gdGUoaGUpe3RyeXtzZShVLm5leHQoaGUpKX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5jdGlvbiBvZShoZSl7dHJ5e3NlKFUudGhyb3coaGUpKX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5j'@;
put 'dGlvbiBzZShoZSl7dmFyIHVlO2hlLmRvbmU/cShoZS52YWx1ZSk6KHVlPWhlLnZhbHVlLHVlIGluc3RhbmNlb2YgWD91ZTpuZXcgWChmdW5jdGlvbihjZSl7Y2UodWUpfSkpLnRoZW4odGUsb2UpfXNlKChVPVUuYXBwbHkoQixZfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2Vu'@;
put 'ZXJhdG9yfHxmdW5jdGlvbihCLFkpe3ZhciBYLFUscSxlZSx0ZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZxWzBdKXRocm93IHFbMV07cmV0dXJuIHFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gZWU9e25leHQ6b2UoMCksdGhyb3c6b2UoMSkscmV0dXJuOm9lKDIpfSwiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoZWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksZWU7ZnVuY3Rpb24gb2Uoc2Upe3JldHVybiBmdW5jdGlvbihoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtpZihYKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBp'@;
put 'cyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3RlOyl0cnl7aWYoWD0xLFUmJihxPTImdWVbMF0/VS5yZXR1cm46dWVbMF0/VS50aHJvd3x8KChxPVUucmV0dXJuKSYmcS5jYWxsKFUpLDApOlUubmV4dCkmJiEocT1xLmNhbGwoVSx1ZVsxXSkpLmRvbmUpcmV0dXJuIHE7c3dpdGNoKFU9MCxx'@;
put 'JiYodWU9WzImdWVbMF0scS52YWx1ZV0pLHVlWzBdKXtjYXNlIDA6Y2FzZSAxOnE9dWU7YnJlYWs7Y2FzZSA0OnJldHVybiB0ZS5sYWJlbCsrLHt2YWx1ZTp1ZVsxXSxkb25lOiExfTtjYXNlIDU6dGUubGFiZWwrKyxVPXVlWzFdLHVlPVswXTtjb250aW51ZTtjYXNlIDc6dWU9dGUub3BzLnBv'@;
put 'cCgpLHRlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChxPShxPXRlLnRyeXMpLmxlbmd0aD4wJiZxW3EubGVuZ3RoLTFdKXx8NiE9PXVlWzBdJiYyIT09dWVbMF0pKXt0ZT0wO2NvbnRpbnVlfWlmKDM9PT11ZVswXSYmKCFxfHx1ZVsxXT5xWzBdJiZ1ZVsxXTxxWzNdKSl7dGUu'@;
put 'bGFiZWw9dWVbMV07YnJlYWt9aWYoNj09PXVlWzBdJiZ0ZS5sYWJlbDxxWzFdKXt0ZS5sYWJlbD1xWzFdLHE9dWU7YnJlYWt9aWYocSYmdGUubGFiZWw8cVsyXSl7dGUubGFiZWw9cVsyXSx0ZS5vcHMucHVzaCh1ZSk7YnJlYWt9cVsyXSYmdGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29u'@;
put 'dGludWV9dWU9WS5jYWxsKEIsdGUpfWNhdGNoKGNlKXt1ZT1bNixjZV0sVT0wfWZpbmFsbHl7WD1xPTB9aWYoNSZ1ZVswXSl0aHJvdyB1ZVsxXTtyZXR1cm57dmFsdWU6dWVbMF0/dWVbMV06dm9pZCAwLGRvbmU6ITB9fShbc2UsaGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSksTy5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBFPVIoMzkwMCksaj1SKDEzOTUpLFY9ZnVuY3Rpb24oQil7ZnVuY3Rpb24gWShYLFUpe3ZhciBxPUIuY2FsbCh0aGlzLFgsRS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfHx0aGlzO3JldHVybiBxLnNhc1Zp'@;
put 'eWFBcGlDbGllbnQ9VSxxfXJldHVybiBLKFksQiksWS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihYLFUscSxlZSx0ZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLGhlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih1ZSl7cmV0dXJuIG9lPWVl'@;
put 'fHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oY2UsRyl7dmFyIGI7bnVsbD09PShiPWhlLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1ifHxiLmV4ZWN1dGVDb21wdXRlSm9iKFgscS5jb250ZXh0TmFtZSxxLmRlYnVnLFUs'@;
put 'dGUsITAsITApLnRoZW4oZnVuY3Rpb24oRCl7aGUuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KEQsWCxxLmRlYnVnKSxjZShELnJlc3VsdCl9KS5jYXRjaChmdW5jdGlvbihEKXtyZXR1cm4gSShoZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gayh0'@;
put 'aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQgaW5zdGFuY2VvZiBqLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KEQsWCxxLmRlYnVnKSxHKG5ldyBqLkVycm9yUmVzcG9uc2UoRD8ubWVz'@;
put 'c2FnZSxEKSkpLEQgaW5zdGFuY2VvZiBqLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBILmV4ZWN1dGUoWCxVLHEsZWUpLnRoZW4oZnVuY3Rpb24oZyl7Y2UoZyl9LGZ1bmN0aW9uKGcpe0coZyl9KX0pLFs0LG9lKCldKTpb'@;
put 'MywyXTtjYXNlIDE6cmV0dXJuIE4uc2VudCgpLFszLDNdO2Nhc2UgMjpHKG5ldyBqLkVycm9yUmVzcG9uc2UoRD8ubWVzc2FnZSxEKSksTi5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9KX0pfSldfSl9KX0sWX0oUig2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO08uQ29tcHV0ZUpvYkV4ZWN1'@;
put 'dG9yPVZ9LDM0OTE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihZLFgpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihVLHEp'@;
put 'e1UuX19wcm90b19fPXF9fHxmdW5jdGlvbihVLHEpe2Zvcih2YXIgZWUgaW4gcSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSxlZSkmJihVW2VlXT1xW2VlXSl9KShZLFgpfSxmdW5jdGlvbihZLFgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBYJiZudWxsIT09WCl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKFgpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFUoKXt0aGlzLmNvbnN0cnVjdG9yPVl9eihZLFgpLFkucHJvdG90eXBlPW51bGw9PT1YP09iamVjdC5jcmVhdGUoWCk6KFUucHJv'@;
put 'dG90eXBlPVgucHJvdG90eXBlLG5ldyBVKX0pLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKGVlLHRlKXtmdW5jdGlvbiBvZSh1ZSl7dHJ5e2hlKHEubmV4dCh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9'@;
put 'fWZ1bmN0aW9uIHNlKHVlKXt0cnl7aGUocS50aHJvdyh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIGhlKHVlKXt2YXIgY2U7dWUuZG9uZT9lZSh1ZS52YWx1ZSk6KGNlPXVlLnZhbHVlLGNlIGluc3RhbmNlb2YgVT9jZTpuZXcgVShmdW5jdGlvbihHKXtHKGNlKX0pKS50aGVuKG9l'@;
put 'LHNlKX1oZSgocT1xLmFwcGx5KFksWHx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWSxYKXt2YXIgVSxxLGVlLHRlLG9lPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmVlWzBdKXRocm93IGVlWzFdO3JldHVybiBlZVsxXX0sdHJ5czpb'@;
put 'XSxvcHM6W119O3JldHVybiB0ZT17bmV4dDpzZSgwKSx0aHJvdzpzZSgxKSxyZXR1cm46c2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih0ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0ZTtmdW5jdGlvbiBzZShoZSl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7b2U7KXRyeXtpZihVPTEscSYmKGVlPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KChlZT1xLnJldHVybikmJmVlLmNh'@;
put 'bGwocSksMCk6cS5uZXh0KSYmIShlZT1lZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiBlZTtzd2l0Y2gocT0wLGVlJiYoY2U9WzImY2VbMF0sZWUudmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTplZT1jZTticmVhaztjYXNlIDQ6cmV0dXJuIG9lLmxhYmVsKysse3ZhbHVlOmNlWzFd'@;
put 'LGRvbmU6ITF9O2Nhc2UgNTpvZS5sYWJlbCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjZT1vZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGVlPShlZT1vZS50cnlzKS5sZW5ndGg+MCYmZWVbZWUubGVuZ3RoLTFdKXx8NiE9PWNlWzBd'@;
put 'JiYyIT09Y2VbMF0pKXtvZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCFlZXx8Y2VbMV0+ZWVbMF0mJmNlWzFdPGVlWzNdKSl7b2UubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNlWzBdJiZvZS5sYWJlbDxlZVsxXSl7b2UubGFiZWw9ZWVbMV0sZWU9Y2U7YnJlYWt9aWYoZWUmJm9lLmxh'@;
put 'YmVsPGVlWzJdKXtvZS5sYWJlbD1lZVsyXSxvZS5vcHMucHVzaChjZSk7YnJlYWt9ZWVbMl0mJm9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVguY2FsbChZLG9lKX1jYXRjaChHKXtjZT1bNixHXSxxPTB9ZmluYWxseXtVPWVlPTB9aWYoNSZjZVswXSl0aHJvdyBjZVsx'@;
put 'XTtyZXR1cm57dmFsdWU6Y2VbMF0/Y2VbMV06dm9pZCAwLGRvbmU6ITB9fShbaGUsdWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5GaWxlVXBsb2FkZXI9dm9pZCAwO3ZhciBFPVIoNTkyOCksaj1SKDEzOTUpLFY9UigzOTAwKSxCPWZ1'@;
put 'bmN0aW9uKFkpe2Z1bmN0aW9uIFgoVSxxLGVlLHRlKXt2YXIgb2U9WS5jYWxsKHRoaXMsVSxxKXx8dGhpcztyZXR1cm4gb2Uuam9ic1BhdGg9ZWUsb2UucmVxdWVzdENsaWVudD10ZSxvZX1yZXR1cm4gSyhYLFkpLFgucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oVSxxLGVlLHRlKXtyZXR1'@;
put 'cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2UsaGUsdWUsY2UsRyxiLEQsSCxOLGcsQyxTLHA9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHcpe2lmKG9lPXEuZmlsZXMsc2U9cS5wYXJhbXMsaGU9dGV8fGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVz'@;
put 'b2x2ZSgpfSwhb2U/Lmxlbmd0aCl0aHJvdyBuZXcgai5FcnJvclJlc3BvbnNlKCJBdCBsZWFzdCBvbmUgZmlsZSBtdXN0IGJlIHByb3ZpZGVkLiIpO2lmKCFVfHwiIj09PVUpdGhyb3cgbmV3IGouRXJyb3JSZXNwb25zZSgic2FzSm9iIG11c3QgYmUgcHJvdmlkZWQuIik7Zm9yKGNlIGluIHVl'@;
put 'PSIiLHNlKXNlLmhhc093blByb3BlcnR5KGNlKSYmKHVlKz0iJiIuY29uY2F0KGNlLCI9IikuY29uY2F0KHNlW2NlXSkpO2ZvcihHPWVlLmFwcExvYz9lZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStVLnJlcGxhY2UoL15cLy8sIiIpOlUsYj0iIi5jb25jYXQodGhpcy5qb2JzUGF0aCwi'@;
put 'Lz8iKS5jb25jYXQoIl9wcm9ncmFtPSIrRykuY29uY2F0KHVlKSxEPW5ldyBGb3JtRGF0YSxIPTAsTj1vZTtIPE4ubGVuZ3RoO0grKylELmFwcGVuZCgiZmlsZSIsKGc9TltIXSkuZmlsZSxnLmZpbGVOYW1lKTtyZXR1cm4oQz10aGlzLnJlcXVlc3RDbGllbnQuZ2V0Q3NyZlRva2VuKCJmaWxl'@;
put 'IikpJiZELmFwcGVuZCgiX2NzcmYiLEMudmFsdWUpLGVlLmRlYnVnJiZELmFwcGVuZCgiX2RlYnVnIiwiMTMxIiksZWUuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXNWaXlhJiZlZS5jb250ZXh0TmFtZSYmRC5hcHBlbmQoIl9jb250ZXh0bmFtZSIsZWUuY29udGV4dE5hbWUpLFM9eyJj'@;
put 'YWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9LFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEosbmUpe3AucmVxdWVzdENsaWVudC5wb3N0KGIsRCx2b2lkIDAsImFwcGxpY2F0aW9uL2pzb24iLFMpLnRoZW4oZnVuY3Rpb24o'@;
put 'ZGUpe3JldHVybiBJKHAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBmZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHhlKXtzd2l0Y2goeGUubGFiZWwpe2Nhc2UgMDppZih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChkZSxVLGVlLmRlYnVnKSxmZT1kZS5yZXN1bHQsIWVl'@;
put 'LmRlYnVnKXJldHVyblszLDZdO3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuWzMsMV07Y2FzZSBWLlNlcnZlclR5cGUuU2FzOTpyZXR1cm5bMywzXTtjYXNlIFYuU2VydmVyVHlwZS5TYXNqczpyZXR1cm5bMyw0XX1yZXR1cm5bMyw1XTtj'@;
put 'YXNlIDE6cmV0dXJuWzQsKDAsRS5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShkZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LGVlLnNlcnZlclVybCldO2Nhc2UgMjpyZXR1cm4gZmU9eGUuc2VudCgpLFszLDVdO2Nhc2UgMzpyZXR1cm4gZmU9InN0cmluZyI9PXR5cGVvZiBkZS5yZXN1'@;
put 'bHQ/KDAsRS5wYXJzZVdlYm91dFJlc3BvbnNlKShkZS5yZXN1bHQsYik6ZGUucmVzdWx0LFszLDVdO2Nhc2UgNDpyZXR1cm4gZmU9InN0cmluZyI9PXR5cGVvZiBkZS5yZXN1bHQ/KDAsRS5nZXRWYWxpZEpzb24pKGRlLnJlc3VsdCk6ZGUucmVzdWx0LFszLDVdO2Nhc2UgNTpyZXR1cm5bMyw3'@;
put 'XTtjYXNlIDY6ZmU9InN0cmluZyI9PXR5cGVvZiBkZS5yZXN1bHQ/KDAsRS5nZXRWYWxpZEpzb24pKGRlLnJlc3VsdCk6ZGUucmVzdWx0LHhlLmxhYmVsPTc7Y2FzZSA3OnJldHVybiBKKGZlKSxbMl19fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKGRlKXtyZXR1cm4gSShwLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXt2YXIgZmU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHhlKXtzd2l0Y2goeGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZGUgaW5zdGFuY2VvZiBqLkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZGUsVSxlZS5kZWJ1Zyks'@;
put 'bmUobmV3IGouRXJyb3JSZXNwb25zZShkZT8ubWVzc2FnZSxkZSkpKSxkZSBpbnN0YW5jZW9mIGouTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIGZlLmV4ZWN1dGUoVSxxLGVlLHRlKS50aGVuKGZ1bmN0aW9uKExlKXtKKExl'@;
put 'KX0sZnVuY3Rpb24oTGUpe25lKExlKX0pfSksWzQsaGUoKV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4geGUuc2VudCgpLFszLDNdO2Nhc2UgMjpuZShuZXcgai5FcnJvclJlc3BvbnNlKCJGaWxlIHVwbG9hZCByZXF1ZXN0IGZhaWxlZC4iLGRlKSkseGUubGFiZWw9MztjYXNlIDM6cmV0dXJuWzJd'@;
put 'fX0pfSl9KX0pXX0pfSl9LFh9KFIoNjExOCkuQmFzZUpvYkV4ZWN1dG9yKTtPLkZpbGVVcGxvYWRlcj1CfSw0NDQ2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oWCxVKXtyZXR1cm4oej1PYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ocSxlZSl7cS5fX3Byb3RvX189ZWV9fHxmdW5jdGlvbihxLGVlKXtmb3IodmFyIHRlIGluIGVlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZSx0ZSkmJihxW3RlXT1lZVt0ZV0p'@;
put 'fSkoWCxVKX0sZnVuY3Rpb24oWCxVKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVSYmbnVsbCE9PVUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhVKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBxKCl7dGhpcy5jb25z'@;
put 'dHJ1Y3Rvcj1YfXooWCxVKSxYLnByb3RvdHlwZT1udWxsPT09VT9PYmplY3QuY3JlYXRlKFUpOihxLnByb3RvdHlwZT1VLnByb3RvdHlwZSxuZXcgcSl9KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihYLFUscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rp'@;
put 'b24odGUsb2Upe2Z1bmN0aW9uIHNlKGNlKXt0cnl7dWUoZWUubmV4dChjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiBoZShjZSl7dHJ5e3VlKGVlLnRocm93KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIHVlKGNlKXt2YXIgRztjZS5kb25lP3RlKGNlLnZhbHVlKTooRz1jZS52'@;
put 'YWx1ZSxHIGluc3RhbmNlb2YgcT9HOm5ldyBxKGZ1bmN0aW9uKGIpe2IoRyl9KSkudGhlbihzZSxoZSl9dWUoKGVlPWVlLmFwcGx5KFgsVXx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWCxVKXt2YXIgcSxlZSx0ZSxvZSxzZT17bGFiZWw6MCxz'@;
put 'ZW50OmZ1bmN0aW9uKCl7aWYoMSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm4gdGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gb2U9e25leHQ6aGUoMCksdGhyb3c6aGUoMSkscmV0dXJuOmhlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYob2VbU3ltYm9sLml0ZXJhdG9yXT1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzfSksb2U7ZnVuY3Rpb24gaGUodWUpe3JldHVybiBmdW5jdGlvbihjZSl7cmV0dXJuIGZ1bmN0aW9uKEcpe2lmKHEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7c2U7KXRyeXtpZihxPTEsZWUm'@;
put 'Jih0ZT0yJkdbMF0/ZWUucmV0dXJuOkdbMF0/ZWUudGhyb3d8fCgodGU9ZWUucmV0dXJuKSYmdGUuY2FsbChlZSksMCk6ZWUubmV4dCkmJiEodGU9dGUuY2FsbChlZSxHWzFdKSkuZG9uZSlyZXR1cm4gdGU7c3dpdGNoKGVlPTAsdGUmJihHPVsyJkdbMF0sdGUudmFsdWVdKSxHWzBdKXtjYXNl'@;
put 'IDA6Y2FzZSAxOnRlPUc7YnJlYWs7Y2FzZSA0OnJldHVybiBzZS5sYWJlbCsrLHt2YWx1ZTpHWzFdLGRvbmU6ITF9O2Nhc2UgNTpzZS5sYWJlbCsrLGVlPUdbMV0sRz1bMF07Y29udGludWU7Y2FzZSA3Okc9c2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZigh'@;
put 'KCh0ZT0odGU9c2UudHJ5cykubGVuZ3RoPjAmJnRlW3RlLmxlbmd0aC0xXSl8fDYhPT1HWzBdJiYyIT09R1swXSkpe3NlPTA7Y29udGludWV9aWYoMz09PUdbMF0mJighdGV8fEdbMV0+dGVbMF0mJkdbMV08dGVbM10pKXtzZS5sYWJlbD1HWzFdO2JyZWFrfWlmKDY9PT1HWzBdJiZzZS5sYWJl'@;
put 'bDx0ZVsxXSl7c2UubGFiZWw9dGVbMV0sdGU9RzticmVha31pZih0ZSYmc2UubGFiZWw8dGVbMl0pe3NlLmxhYmVsPXRlWzJdLHNlLm9wcy5wdXNoKEcpO2JyZWFrfXRlWzJdJiZzZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZX1HPVUuY2FsbChYLHNlKX1jYXRjaChiKXtHPVs2'@;
put 'LGJdLGVlPTB9ZmluYWxseXtxPXRlPTB9aWYoNSZHWzBdKXRocm93IEdbMV07cmV0dXJue3ZhbHVlOkdbMF0/R1sxXTp2b2lkIDAsZG9uZTohMH19KFt1ZSxjZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkplc0pvYkV4ZWN1dG9yPXZv'@;
put 'aWQgMDt2YXIgRT1SKDM5MDApLGo9UigxMzk1KSxWPVIoNjExOCksQj1SKDU5MjgpLFk9ZnVuY3Rpb24oWCl7ZnVuY3Rpb24gVShxLGVlKXt2YXIgdGU9WC5jYWxsKHRoaXMscSxFLlNlcnZlclR5cGUuU2FzVml5YSl8fHRoaXM7cmV0dXJuIHRlLnNhc1ZpeWFBcGlDbGllbnQ9ZWUsdGV9cmV0'@;
put 'dXJuIEsoVSxYKSxVLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiB2b2lkIDA9PT1oZSYmKGhlPVtdKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxHPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4g'@;
put 'dWU9b2V8fGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihELEgpe3ZhciBOO251bGw9PT0oTj1HLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1OfHxOLmV4ZWN1dGVKb2IocSx0ZS5jb250ZXh0TmFtZSx0ZS5kZWJ1ZyxlZSxz'@;
put 'ZSkudGhlbihmdW5jdGlvbihnKXtHLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChnLHEsdGUuZGVidWcpO3ZhciBDPSgwLEIuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKGcsaGUpO0QoQyl9KS5jYXRjaChmdW5jdGlvbihnKXtyZXR1cm4gSShHLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXt2YXIgQz10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZyBpbnN0YW5jZW9mIGouSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChnLHEsdGUuZGVidWcpLEgo'@;
put 'bmV3IGouRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKSksZyBpbnN0YW5jZW9mIGouTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIEMuZXhlY3V0ZShxLGVlLHRlLG9lLHNlLGhlKS50aGVuKGZ1bmN0aW9uKHYpe0Qodil9'@;
put 'LGZ1bmN0aW9uKHYpe0godil9KX0pLFs0LHVlKCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIFMuc2VudCgpLFszLDNdO2Nhc2UgMjpIKG5ldyBqLkVycm9yUmVzcG9uc2UoZz8ubWVzc2FnZSxnKSksUy5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9KX0pfSldfSl9KX0sVX0oVi5CYXNlSm9i'@;
put 'RXhlY3V0b3IpO08uSmVzSm9iRXhlY3V0b3I9WX0sNjExODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihFLGosVixCKXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihZLFgpe2Z1bmN0aW9uIFUodGUp'@;
put 'e3RyeXtlZShCLm5leHQodGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIHEodGUpe3RyeXtlZShCLnRocm93KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlvbiBlZSh0ZSl7dmFyIG9lO3RlLmRvbmU/WSh0ZS52YWx1ZSk6KG9lPXRlLnZhbHVlLG9lIGluc3RhbmNlb2YgVj9vZTpu'@;
put 'ZXcgVihmdW5jdGlvbihzZSl7c2Uob2UpfSkpLnRoZW4oVSxxKX1lZSgoQj1CLmFwcGx5KEUsanx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRSxqKXt2YXIgVixCLFksWCxVPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJllbMF0pdGhy'@;
put 'b3cgWVsxXTtyZXR1cm4gWVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBYPXtuZXh0OnEoMCksdGhyb3c6cSgxKSxyZXR1cm46cSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWDtmdW5jdGlvbiBx'@;
put 'KGVlKXtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBmdW5jdGlvbihvZSl7aWYoVil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtVOyl0cnl7aWYoVj0xLEImJihZPTImb2VbMF0/Qi5yZXR1cm46b2VbMF0/Qi50aHJvd3x8KChZ'@;
put 'PUIucmV0dXJuKSYmWS5jYWxsKEIpLDApOkIubmV4dCkmJiEoWT1ZLmNhbGwoQixvZVsxXSkpLmRvbmUpcmV0dXJuIFk7c3dpdGNoKEI9MCxZJiYob2U9WzImb2VbMF0sWS52YWx1ZV0pLG9lWzBdKXtjYXNlIDA6Y2FzZSAxOlk9b2U7YnJlYWs7Y2FzZSA0OnJldHVybiBVLmxhYmVsKysse3Zh'@;
put 'bHVlOm9lWzFdLGRvbmU6ITF9O2Nhc2UgNTpVLmxhYmVsKyssQj1vZVsxXSxvZT1bMF07Y29udGludWU7Y2FzZSA3Om9lPVUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFk9KFk9VS50cnlzKS5sZW5ndGg+MCYmWVtZLmxlbmd0aC0xXSl8fDYhPT1vZVsw'@;
put 'XSYmMiE9PW9lWzBdKSl7VT0wO2NvbnRpbnVlfWlmKDM9PT1vZVswXSYmKCFZfHxvZVsxXT5ZWzBdJiZvZVsxXTxZWzNdKSl7VS5sYWJlbD1vZVsxXTticmVha31pZig2PT09b2VbMF0mJlUubGFiZWw8WVsxXSl7VS5sYWJlbD1ZWzFdLFk9b2U7YnJlYWt9aWYoWSYmVS5sYWJlbDxZWzJdKXtV'@;
put 'LmxhYmVsPVlbMl0sVS5vcHMucHVzaChvZSk7YnJlYWt9WVsyXSYmVS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlfW9lPWouY2FsbChFLFUpfWNhdGNoKHNlKXtvZT1bNixzZV0sQj0wfWZpbmFsbHl7Vj1ZPTB9aWYoNSZvZVswXSl0aHJvdyBvZVsxXTtyZXR1cm57dmFsdWU6b2Vb'@;
put 'MF0/b2VbMV06dm9pZCAwLGRvbmU6ITB9fShbZWUsdGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5CYXNlSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBJPVIoNTkyOCksaz1mdW5jdGlvbigpe2Z1bmN0aW9uIEUoaixWKXt2YXIgQj10aGlz'@;
put 'O3RoaXMuc2VydmVyVXJsPWosdGhpcy5zZXJ2ZXJUeXBlPVYsdGhpcy53YWl0aW5nUmVxdWVzdHM9W10sdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4geihCLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWT10aGlzO3JldHVybiBLKHRoaXMsZnVuY3Rp'@;
put 'b24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxJLmFzeW5jRm9yRWFjaCkodGhpcy53YWl0aW5nUmVxdWVzdHMsZnVuY3Rpb24oVSl7cmV0dXJuIHooWSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihxKXtzd2l0Y2gocS5sYWJl'@;
put 'bCl7Y2FzZSAwOnJldHVybls0LFUoKV07Y2FzZSAxOnJldHVybiBxLnNlbnQoKSxbMl19fSl9KX0pXTtjYXNlIDE6cmV0dXJuIFguc2VudCgpLHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdLFsyXX19KX0pfX1yZXR1cm4gRS5wcm90b3R5cGUuYXBwZW5kV2FpdGluZ1JlcXVlc3Q9ZnVuY3Rpb24o'@;
put 'ail7dGhpcy53YWl0aW5nUmVxdWVzdHMucHVzaChqKX0sRS5wcm90b3R5cGUuZ2V0UmVxdWVzdFBhcmFtcz1mdW5jdGlvbihqKXt2YXIgVj17fTtyZXR1cm4gai5kZWJ1ZyYmKFYuX29taXR0ZXh0bG9nPSJmYWxzZSIsVi5fb21pdHNlc3Npb25yZXN1bHRzPSJmYWxzZSIsVi5fZGVidWc9MTMx'@;
put 'KSxWfSxFfSgpO08uQmFzZUpvYkV4ZWN1dG9yPWt9LDI2OTM6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3Rh'@;
put 'bmNlb2YgQXJyYXkmJmZ1bmN0aW9uKG9lLHNlKXtvZS5fX3Byb3RvX189c2V9fHxmdW5jdGlvbihvZSxzZSl7Zm9yKHZhciBoZSBpbiBzZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2UsaGUpJiYob2VbaGVdPXNlW2hlXSl9KShlZSx0ZSl9LGZ1bmN0aW9uKGVlLHRl'@;
put 'KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGUmJm51bGwhPT10ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHRlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvZSgpe3RoaXMuY29uc3RydWN0b3I9ZWV9eihlZSx0'@;
put 'ZSksZWUucHJvdG90eXBlPW51bGw9PT10ZT9PYmplY3QuY3JlYXRlKHRlKToob2UucHJvdG90eXBlPXRlLnByb3RvdHlwZSxuZXcgb2UpfSksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGVlKXtmb3IodmFyIHRlLG9l'@;
put 'PTEsc2U9YXJndW1lbnRzLmxlbmd0aDtvZTxzZTtvZSsrKWZvcih2YXIgaGUgaW4gdGU9YXJndW1lbnRzW29lXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGUsaGUpJiYoZWVbaGVdPXRlW2hlXSk7cmV0dXJuIGVlfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10'@;
put 'aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZWUsdGUsb2Usc2Upe3JldHVybiBuZXcob2V8fChvZT1Qcm9taXNlKSkoZnVuY3Rpb24oaGUsdWUpe2Z1bmN0aW9uIGNlKEQpe3RyeXtiKHNlLm5leHQoRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBHKEQpe3RyeXtiKHNlLnRocm93'@;
put 'KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24gYihEKXt2YXIgSDtELmRvbmU/aGUoRC52YWx1ZSk6KEg9RC52YWx1ZSxIIGluc3RhbmNlb2Ygb2U/SDpuZXcgb2UoZnVuY3Rpb24oTil7TihIKX0pKS50aGVuKGNlLEcpfWIoKHNlPXNlLmFwcGx5KGVlLHRlfHxbXSkpLm5leHQoKSl9KX0s'@;
put 'RT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihlZSx0ZSl7dmFyIG9lLHNlLGhlLHVlLGNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmhlWzBdKXRocm93IGhlWzFdO3JldHVybiBoZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB1ZT17bmV4dDpHKDApLHRocm93'@;
put 'OkcoMSkscmV0dXJuOkcoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih1ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx1ZTtmdW5jdGlvbiBHKGIpe3JldHVybiBmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oSCl7aWYob2UpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7Y2U7KXRyeXtpZihvZT0xLHNlJiYoaGU9MiZIWzBdP3NlLnJldHVybjpIWzBdP3NlLnRocm93fHwoKGhlPXNlLnJldHVybikmJmhlLmNhbGwoc2UpLDApOnNlLm5leHQpJiYhKGhlPWhlLmNhbGwoc2UsSFsx'@;
put 'XSkpLmRvbmUpcmV0dXJuIGhlO3N3aXRjaChzZT0wLGhlJiYoSD1bMiZIWzBdLGhlLnZhbHVlXSksSFswXSl7Y2FzZSAwOmNhc2UgMTpoZT1IO2JyZWFrO2Nhc2UgNDpyZXR1cm4gY2UubGFiZWwrKyx7dmFsdWU6SFsxXSxkb25lOiExfTtjYXNlIDU6Y2UubGFiZWwrKyxzZT1IWzFdLEg9WzBd'@;
put 'O2NvbnRpbnVlO2Nhc2UgNzpIPWNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaGU9KGhlPWNlLnRyeXMpLmxlbmd0aD4wJiZoZVtoZS5sZW5ndGgtMV0pfHw2IT09SFswXSYmMiE9PUhbMF0pKXtjZT0wO2NvbnRpbnVlfWlmKDM9PT1IWzBdJiYoIWhl'@;
put 'fHxIWzFdPmhlWzBdJiZIWzFdPGhlWzNdKSl7Y2UubGFiZWw9SFsxXTticmVha31pZig2PT09SFswXSYmY2UubGFiZWw8aGVbMV0pe2NlLmxhYmVsPWhlWzFdLGhlPUg7YnJlYWt9aWYoaGUmJmNlLmxhYmVsPGhlWzJdKXtjZS5sYWJlbD1oZVsyXSxjZS5vcHMucHVzaChIKTticmVha31oZVsy'@;
put 'XSYmY2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWV9SD10ZS5jYWxsKGVlLGNlKX1jYXRjaChOKXtIPVs2LE5dLHNlPTB9ZmluYWxseXtvZT1oZT0wfWlmKDUmSFswXSl0aHJvdyBIWzFdO3JldHVybnt2YWx1ZTpIWzBdP0hbMV06dm9pZCAwLGRvbmU6ITB9fShbYixEXSl9fX07'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2FzOUpvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgaj1SKDYyMzApLFY9UigxMzk1KSxCPVIoNTkyOCksWT1SKDYxMTgpLFg9Uig3OTUpLFU9ZnVuY3Rpb24oZWUpe2Z1bmN0aW9uIHRlKG9lLHNlLGhlLHVl'@;
put 'LGNlKXt2YXIgRz1lZS5jYWxsKHRoaXMsb2Usc2UpfHx0aGlzO3JldHVybiBHLmpvYnNQYXRoPWhlLEcucmVxdWVzdENsaWVudD11ZSxHLnNhczlSZXF1ZXN0Q2xpZW50PW5ldyBYLlNhczlSZXF1ZXN0Q2xpZW50KG9lLGNlKSxHfXJldHVybiBLKHRlLGVlKSx0ZS5wcm90b3R5cGUuZXhlY3V0'@;
put 'ZT1mdW5jdGlvbihvZSxzZSxoZSl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHVlLGNlLEcsYixELEgsTj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZih1ZT0oMCxCLmlzUmVsYXRpdmVQYXRoKShvZSkm'@;
put 'JmhlLmFwcExvYz9oZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStvZS5yZXBsYWNlKC9eXC8vLCIiKTpvZSxjZT0iIi5jb25jYXQoaGUuc2VydmVyVXJsKS5jb25jYXQodGhpcy5qb2JzUGF0aCwiPyIpLmNvbmNhdCgiX3Byb2dyYW09Iit1ZSksY2U9IiIuY29uY2F0KGNlKS5jb25jYXQo'@;
put 'aGUudXNlcm5hbWUmJmhlLnBhc3N3b3JkPyImX3VzZXJuYW1lPSIraGUudXNlcm5hbWUrIiZfcGFzc3dvcmQ9IitoZS5wYXNzd29yZDoiIiksY2U9IiIuY29uY2F0KGNlKS5jb25jYXQoaGUuZGVidWc/IiZfZGVidWc9MTMxIjoiIiksRz1JKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhoZSkp'@;
put 'LGI9bmV3IGosc2UpdHJ5e2I9cShiLHNlKX1jYXRjaChDKXtyZXR1cm5bMixQcm9taXNlLnJlamVjdChuZXcgVi5FcnJvclJlc3BvbnNlKEM/Lm1lc3NhZ2UsQykpXX1lbHNlIHNlPSIiO2ZvcihEIGluIEcpRy5oYXNPd25Qcm9wZXJ0eShEKSYmYi5hcHBlbmQoRCxHW0RdKTtyZXR1cm5bNCx0'@;
put 'aGlzLnNhczlSZXF1ZXN0Q2xpZW50LmxvZ2luKGhlLnVzZXJuYW1lLGhlLnBhc3N3b3JkLHRoaXMuam9ic1BhdGgpXTtjYXNlIDE6cmV0dXJuIGcuc2VudCgpLEg9c2UmJk9iamVjdC5rZXlzKHNlKS5sZW5ndGg/Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrYi5fYm91bmRhcnk6'@;
put 'InRleHQvcGxhaW4iLFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEMsUyl7cmV0dXJuIE4uc2FzOVJlcXVlc3RDbGllbnQucG9zdChjZSxiLHZvaWQgMCxILHtBY2NlcHQ6IiovKiIsQ29ubmVjdGlvbjoiS2VlcC1BbGl2ZSJ9KS50aGVuKGZ1bmN0aW9uKHYpe04ucmVxdWVzdENsaWVudC5hcHBl'@;
put 'bmRSZXF1ZXN0KHYsb2UsaGUuZGVidWcpLEModil9KS5jYXRjaChmdW5jdGlvbih2KXt2YXIgcD12O3YucmVzdWx0JiYiIiE9PXYucmVzdWx0P3A9di5yZXN1bHQ6di5tZXNzYWdlJiYocD12Lm1lc3NhZ2UpLE4ucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHAsb2UsaGUuZGVidWcpLFMo'@;
put 'bmV3IFYuRXJyb3JSZXNwb25zZSh2Py5tZXNzYWdlLHYpKX0pfSldfX0pfSl9LHRlLnByb3RvdHlwZS5nZXRSZXF1ZXN0UGFyYW1zPWZ1bmN0aW9uKG9lKXt2YXIgc2U9e307cmV0dXJuIG9lLmRlYnVnJiYoc2UuX2RlYnVnPTEzMSksc2V9LHRlfShZLkJhc2VKb2JFeGVjdXRvcik7Ty5TYXM5'@;
put 'Sm9iRXhlY3V0b3I9VTt2YXIgcT1mdW5jdGlvbihlZSx0ZSl7Zm9yKHZhciBvZSBpbiB0ZSl7dmFyIHNlPW9lLGhlPSgwLEIuY29udmVydFRvQ1NWKSh0ZSxvZSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PWhlKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2Yg'@;
put 'YSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtlZS5hcHBlbmQoc2UsaGUse2ZpbGVuYW1lOiIiLmNvbmNhdChzZSwiLmNzdiIpLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9cmV0dXJuIGVlfX0sMTA2NTpmdW5jdGlvbihNLE8sUil7InVzZSBz'@;
put 'dHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ob2Usc2Upe29lLl9fcHJvdG9fXz1zZX18fGZ1bmN0aW9uKG9l'@;
put 'LHNlKXtmb3IodmFyIGhlIGluIHNlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxoZSkmJihvZVtoZV09c2VbaGVdKX0pKGVlLHRlKX0sZnVuY3Rpb24oZWUsdGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0ZSYmbnVsbCE9PXRlKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodGUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG9lKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lZX16KGVlLHRlKSxlZS5wcm90b3R5cGU9bnVsbD09PXRlP09iamVjdC5jcmVhdGUodGUpOihvZS5wcm90b3R5cGU9'@;
put 'dGUucHJvdG90eXBlLG5ldyBvZSl9KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZWUpe2Zvcih2YXIgdGUsb2U9MSxzZT1hcmd1bWVudHMubGVuZ3RoO29lPHNlO29lKyspZm9yKHZhciBoZSBpbiB0ZT1hcmd1bWVu'@;
put 'dHNbb2VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZSxoZSkmJihlZVtoZV09dGVbaGVdKTtyZXR1cm4gZWV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihlZSx0ZSxvZSxzZSl7cmV0dXJuIG5ldyhvZXx8'@;
put 'KG9lPVByb21pc2UpKShmdW5jdGlvbihoZSx1ZSl7ZnVuY3Rpb24gY2UoRCl7dHJ5e2Ioc2UubmV4dChEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIEcoRCl7dHJ5e2Ioc2UudGhyb3coRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBiKEQpe3ZhciBIO0QuZG9uZT9oZShELnZhbHVl'@;
put 'KTooSD1ELnZhbHVlLEggaW5zdGFuY2VvZiBvZT9IOm5ldyBvZShmdW5jdGlvbihOKXtOKEgpfSkpLnRoZW4oY2UsRyl9Yigoc2U9c2UuYXBwbHkoZWUsdGV8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2UsaGUsdWUs'@;
put 'Y2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJuIGhlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHVlPXtuZXh0OkcoMCksdGhyb3c6RygxKSxyZXR1cm46RygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHVlW1N5bWJvbC5p'@;
put 'dGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHVlO2Z1bmN0aW9uIEcoYil7cmV0dXJuIGZ1bmN0aW9uKEQpe3JldHVybiBmdW5jdGlvbihIKXtpZihvZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtjZTspdHJ5e2lm'@;
put 'KG9lPTEsc2UmJihoZT0yJkhbMF0/c2UucmV0dXJuOkhbMF0/c2UudGhyb3d8fCgoaGU9c2UucmV0dXJuKSYmaGUuY2FsbChzZSksMCk6c2UubmV4dCkmJiEoaGU9aGUuY2FsbChzZSxIWzFdKSkuZG9uZSlyZXR1cm4gaGU7c3dpdGNoKHNlPTAsaGUmJihIPVsyJkhbMF0saGUudmFsdWVdKSxI'@;
put 'WzBdKXtjYXNlIDA6Y2FzZSAxOmhlPUg7YnJlYWs7Y2FzZSA0OnJldHVybiBjZS5sYWJlbCsrLHt2YWx1ZTpIWzFdLGRvbmU6ITF9O2Nhc2UgNTpjZS5sYWJlbCsrLHNlPUhbMV0sSD1bMF07Y29udGludWU7Y2FzZSA3Okg9Y2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVm'@;
put 'YXVsdDppZighKChoZT0oaGU9Y2UudHJ5cykubGVuZ3RoPjAmJmhlW2hlLmxlbmd0aC0xXSl8fDYhPT1IWzBdJiYyIT09SFswXSkpe2NlPTA7Y29udGludWV9aWYoMz09PUhbMF0mJighaGV8fEhbMV0+aGVbMF0mJkhbMV08aGVbM10pKXtjZS5sYWJlbD1IWzFdO2JyZWFrfWlmKDY9PT1IWzBd'@;
put 'JiZjZS5sYWJlbDxoZVsxXSl7Y2UubGFiZWw9aGVbMV0saGU9SDticmVha31pZihoZSYmY2UubGFiZWw8aGVbMl0pe2NlLmxhYmVsPWhlWzJdLGNlLm9wcy5wdXNoKEgpO2JyZWFrfWhlWzJdJiZjZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZX1IPXRlLmNhbGwoZWUsY2UpfWNh'@;
put 'dGNoKE4pe0g9WzYsTl0sc2U9MH1maW5hbGx5e29lPWhlPTB9aWYoNSZIWzBdKXRocm93IEhbMV07cmV0dXJue3ZhbHVlOkhbMF0/SFsxXTp2b2lkIDAsZG9uZTohMH19KFtiLERdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TYXNqc0pv'@;
put 'YkV4ZWN1dG9yPXZvaWQgMDt2YXIgaj1SKDYyMzApLFY9UigzOTAwKSxCPVIoMTM5NSksWT1SKDQwMzcpLFg9Uig1OTI4KSxVPVIoNTkyOCkscT1mdW5jdGlvbihlZSl7ZnVuY3Rpb24gdGUob2Usc2UsaGUpe3ZhciB1ZT1lZS5jYWxsKHRoaXMsb2UsVi5TZXJ2ZXJUeXBlLlNhc2pzKXx8dGhp'@;
put 'cztyZXR1cm4gdWUuam9ic1BhdGg9c2UsdWUucmVxdWVzdENsaWVudD1oZSx1ZX1yZXR1cm4gSyh0ZSxlZSksdGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyl7cmV0dXJuIHZvaWQgMD09PUcmJihHPVtdKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'bigpe3ZhciBiLEQsSCxOLGcsQyxTLHA9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHcpe2lmKGI9dWUsRD0oMCxVLmlzUmVsYXRpdmVQYXRoKShvZSkmJmhlLmFwcExvYz9oZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStvZS5yZXBsYWNlKC9eXC8vLCIiKTpvZSxIPSIiLmNvbmNh'@;
put 'dChoZS5zZXJ2ZXJVcmwpLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitEKSxOPUkoe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKGhlKSksZz0oMCxYLmdldEZvcm1EYXRhKSgpLHNlKXRyeXtnPSgwLFkuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkoZyxzZSl9'@;
put 'Y2F0Y2goSil7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IEIuRXJyb3JSZXNwb25zZShKPy5tZXNzYWdlLEopKV19Zm9yKEMgaW4gTilOLmhhc093blByb3BlcnR5KEMpJiZnLmFwcGVuZChDLE5bQ10pO3JldHVybiBTPWcgaW5zdGFuY2VvZiBqJiZ0eXBlb2YgRm9ybURhdGE+InUiPyJt'@;
put 'dWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNhdChnLmdldEJvdW5kYXJ5KCkpOnZvaWQgMCxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihKLG5lKXtwLnJlcXVlc3RDbGllbnQucG9zdChILGcsY2U/LmFjY2Vzc190b2tlbixTKS50aGVuKGZ1bmN0aW9uKGRlKXtyZXR1cm4gayhw'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZmUseGU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihMZSl7aWYoT2JqZWN0LmVudHJpZXMoZGUucmVzdWx0KS5sZW5ndGg8MSl0aHJvdyBuZXcgQi5Kb2JFeGVjdXRpb25FcnJvcigwLCJObyB3ZWJvdXQgd2FzIHJldHVybmVkIGJ5IGpvYiAi'@;
put 'LmNvbmNhdChELCIuICBQbGVhc2UgY2hlY2sgdGhlIFNBUyBsb2cgZm9yIG1vcmUgaW5mby4iKSxkZS5sb2cpO3JldHVybihmZT1kZS5yZXN1bHQpJiYic3RyaW5nIj09dHlwZW9mIGZlJiZmZS50cmltKCkmJihkZS5yZXN1bHQ9KDAsVS5nZXRWYWxpZEpzb24pKGZlKSksdGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LmFwcGVuZFJlcXVlc3QoZGUsb2UsaGUuZGVidWcpLHhlPSgwLFUuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKGRlLEcpLEooeGUpLFsyXX0pfSl9KS5jYXRjaChmdW5jdGlvbihkZSl7cmV0dXJuIGsocCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXM7'@;
put 'cmV0dXJuIEUodGhpcyxmdW5jdGlvbih4ZSl7c3dpdGNoKHhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGRlIGluc3RhbmNlb2YgQi5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGRlLG9lLGhlLmRlYnVnKSxuZShuZXcgQi5FcnJvclJlc3BvbnNl'@;
put 'KGRlPy5tZXNzYWdlLGRlKSkpLGRlIGluc3RhbmNlb2YgQi5Mb2dpblJlcXVpcmVkRXJyb3I/KHVlfHxuZShuZXcgQi5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIs'@;
put 'ZGUpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIGZlLmV4ZWN1dGUob2Usc2UsaGUsdWUsY2UsRykudGhlbihmdW5jdGlvbihMZSl7SihMZSl9LGZ1bmN0aW9uKExlKXtuZShMZSl9KX0pLGI/WzQsYigpXTpbMywyXSk6WzMsM107Y2FzZSAxOnhlLnNlbnQo'@;
put 'KSx4ZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw0XTtjYXNlIDM6bmUobmV3IEIuRXJyb3JSZXNwb25zZShkZT8ubWVzc2FnZSxkZSkpLHhlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSl9KV19KX0pfSx0ZX0oUig2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO08uU2FzanNKb2JFeGVj'@;
put 'dXRvcj1xfSw2MDg0OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oZWUsdGUpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihv'@;
put 'ZSxzZSl7b2UuX19wcm90b19fPXNlfXx8ZnVuY3Rpb24ob2Usc2Upe2Zvcih2YXIgaGUgaW4gc2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLGhlKSYmKG9lW2hlXT1zZVtoZV0pfSkoZWUsdGUpfSxmdW5jdGlvbihlZSx0ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9m'@;
put 'IHRlJiZudWxsIT09dGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0ZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gb2UoKXt0aGlzLmNvbnN0cnVjdG9yPWVlfXooZWUsdGUpLGVlLnByb3RvdHlwZT1udWxsPT09'@;
put 'dGU/T2JqZWN0LmNyZWF0ZSh0ZSk6KG9lLnByb3RvdHlwZT10ZS5wcm90b3R5cGUsbmV3IG9lKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlZSl7Zm9yKHZhciB0ZSxvZT0xLHNlPWFyZ3VtZW50cy5sZW5ndGg7'@;
put 'b2U8c2U7b2UrKylmb3IodmFyIGhlIGluIHRlPWFyZ3VtZW50c1tvZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRlLGhlKSYmKGVlW2hlXT10ZVtoZV0pO3JldHVybiBlZX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1'@;
put 'bmN0aW9uKGVlLHRlLG9lLHNlKXtyZXR1cm4gbmV3KG9lfHwob2U9UHJvbWlzZSkpKGZ1bmN0aW9uKGhlLHVlKXtmdW5jdGlvbiBjZShEKXt0cnl7YihzZS5uZXh0KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24gRyhEKXt0cnl7YihzZS50aHJvdyhEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1'@;
put 'bmN0aW9uIGIoRCl7dmFyIEg7RC5kb25lP2hlKEQudmFsdWUpOihIPUQudmFsdWUsSCBpbnN0YW5jZW9mIG9lP0g6bmV3IG9lKGZ1bmN0aW9uKE4pe04oSCl9KSkudGhlbihjZSxHKX1iKChzZT1zZS5hcHBseShlZSx0ZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRv'@;
put 'cnx8ZnVuY3Rpb24oZWUsdGUpe3ZhciBvZSxzZSxoZSx1ZSxjZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm4gaGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdWU9e25leHQ6RygwKSx0aHJvdzpHKDEpLHJldHVybjpHKDIpfSwiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdWU7ZnVuY3Rpb24gRyhiKXtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIGZ1bmN0aW9uKEgpe2lmKG9lKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBh'@;
put 'bHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2NlOyl0cnl7aWYob2U9MSxzZSYmKGhlPTImSFswXT9zZS5yZXR1cm46SFswXT9zZS50aHJvd3x8KChoZT1zZS5yZXR1cm4pJiZoZS5jYWxsKHNlKSwwKTpzZS5uZXh0KSYmIShoZT1oZS5jYWxsKHNlLEhbMV0pKS5kb25lKXJldHVybiBoZTtzd2l0'@;
put 'Y2goc2U9MCxoZSYmKEg9WzImSFswXSxoZS52YWx1ZV0pLEhbMF0pe2Nhc2UgMDpjYXNlIDE6aGU9SDticmVhaztjYXNlIDQ6cmV0dXJuIGNlLmxhYmVsKysse3ZhbHVlOkhbMV0sZG9uZTohMX07Y2FzZSA1OmNlLmxhYmVsKyssc2U9SFsxXSxIPVswXTtjb250aW51ZTtjYXNlIDc6SD1jZS5v'@;
put 'cHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGhlPShoZT1jZS50cnlzKS5sZW5ndGg+MCYmaGVbaGUubGVuZ3RoLTFdKXx8NiE9PUhbMF0mJjIhPT1IWzBdKSl7Y2U9MDtjb250aW51ZX1pZigzPT09SFswXSYmKCFoZXx8SFsxXT5oZVswXSYmSFsxXTxoZVsz'@;
put 'XSkpe2NlLmxhYmVsPUhbMV07YnJlYWt9aWYoNj09PUhbMF0mJmNlLmxhYmVsPGhlWzFdKXtjZS5sYWJlbD1oZVsxXSxoZT1IO2JyZWFrfWlmKGhlJiZjZS5sYWJlbDxoZVsyXSl7Y2UubGFiZWw9aGVbMl0sY2Uub3BzLnB1c2goSCk7YnJlYWt9aGVbMl0mJmNlLm9wcy5wb3AoKSxjZS50cnlz'@;
put 'LnBvcCgpO2NvbnRpbnVlfUg9dGUuY2FsbChlZSxjZSl9Y2F0Y2goTil7SD1bNixOXSxzZT0wfWZpbmFsbHl7b2U9aGU9MH1pZig1JkhbMF0pdGhyb3cgSFsxXTtyZXR1cm57dmFsdWU6SFswXT9IWzFdOnZvaWQgMCxkb25lOiEwfX0oW2IsRF0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShP'@;
put 'LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLldlYkpvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgaj1SKDYyMzApLFY9UigzOTAwKSxCPVIoMTM5NSksWT1SKDQwMzcpLFg9UigyMTcwKSxVPVIoNTkyOCkscT1mdW5jdGlvbihlZSl7ZnVuY3Rpb24gdGUob2Usc2UsaGUsdWUsY2Upe3ZhciBHPWVl'@;
put 'LmNhbGwodGhpcyxvZSxzZSl8fHRoaXM7cmV0dXJuIEcuam9ic1BhdGg9aGUsRy5yZXF1ZXN0Q2xpZW50PXVlLEcuc2FzVml5YUFwaUNsaWVudD1jZSxHfXJldHVybiBLKHRlLGVlKSx0ZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHKXtyZXR1cm4gdm9pZCAw'@;
put 'PT09RyYmKEc9W10pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRCxILE4sZyxDLFMsdixwLEosbmUsZGUseGU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKExlKXtzd2l0Y2goTGUubGFiZWwpe2Nhc2UgMDppZihiPXVlLEQ9KDAsVS5pc1JlbGF0aXZlUGF0aCko'@;
put 'b2UpJiZoZS5hcHBMb2M/aGUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrb2UucmVwbGFjZSgvXlwvLywiIik6b2UsSD0iIi5jb25jYXQoaGUuc2VydmVyVXJsKS5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5jb25jYXQoIl9wcm9ncmFtPSIrRCksaGUuc2VydmVyVHlwZSE9PVYuU2Vy'@;
put 'dmVyVHlwZS5TYXNWaXlhKXJldHVyblszLDVdO049dm9pZCAwLExlLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBMZS50cnlzLnB1c2goWzEsMywsNF0pLFs0LHRoaXMuZ2V0Sm9iVXJpKG9lKV07Y2FzZSAyOnJldHVybiBOPUxlLnNlbnQoKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGc9TGUuc2VudCgp'@;
put 'LFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEZlLE9lKXtyZXR1cm4gayh4ZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGplPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihXZSl7c3dpdGNoKFdlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGcgaW5zdGFuY2VvZiBCLkxvZ2luUmVxdWly'@;
put 'ZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBqZS5leGVjdXRlKG9lLHNlLGhlLHVlLGNlLEcpLnRoZW4oZnVuY3Rpb24oS2Upe0ZlKEtlKX0sZnVuY3Rpb24oS2Upe09lKEtlKX0pfSksYj9bNCxiKCldOlszLDJdKTpbMywzXTtjYXNlIDE6V2Uu'@;
put 'c2VudCgpLFdlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblszLDRdO2Nhc2UgMzpPZShuZXcgQi5FcnJvclJlc3BvbnNlKGc/Lm1lc3NhZ2UsZykpLFdlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSldO2Nhc2UgNDpIKz1OLmxlbmd0aD4wPyImX2pvYj0iK046IiIsTi5sZW5ndGg+MCYm'@;
put 'KEg9KEgrPSImX2pvYj0iK04pLnJlcGxhY2UoIl9wcm9ncmFtPSIsIl9fcHJvZ3JhbT0iKSksSCs9aGUuY29udGV4dE5hbWUmJiEvXHMvLnRlc3QoaGUuY29udGV4dE5hbWUpPyImX2NvbnRleHRuYW1lPSIuY29uY2F0KGhlLmNvbnRleHROYW1lKToiIixMZS5sYWJlbD01O2Nhc2UgNTppZihD'@;
put 'PUkoe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKGhlKSksUz0oMCxVLmdldEZvcm1EYXRhKSgpLHNlKWlmKHY9SlNPTi5zdHJpbmdpZnkoc2UpLGhlLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzOXx8di5sZW5ndGg+NWU1fHx2LmluY2x1ZGVzKCI7IikpdHJ5e1M9KDAsWS5nZW5lcmF0'@;
put 'ZUZpbGVVcGxvYWRGb3JtKShTLHNlKX1jYXRjaChGZSl7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IEIuRXJyb3JSZXNwb25zZShGZT8ubWVzc2FnZSxGZSkpXX1lbHNlIHRyeXtwPSgwLFguZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm0pKFMsc2UpLEo9cC5yZXF1ZXN0UGFyYW1zLFM9cC5m'@;
put 'b3JtRGF0YSxDPUkoSSh7fSxDKSxKKX1jYXRjaChGZSl7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IEIuRXJyb3JSZXNwb25zZShGZT8ubWVzc2FnZSxGZSkpXX1mb3IobmUgaW4gQylDLmhhc093blByb3BlcnR5KG5lKSYmUy5hcHBlbmQobmUsQ1tuZV0pO3JldHVybiBkZT1TIGluc3Rh'@;
put 'bmNlb2YgaiYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij8ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ii5jb25jYXQoUy5nZXRCb3VuZGFyeSgpKTp2b2lkIDAsWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oRmUsT2Upe3hlLnJlcXVlc3RDbGllbnQucG9zdChILFMsY2U/LmFjY2Vzc190b2tl'@;
put 'bixkZSkudGhlbihmdW5jdGlvbihqZSl7cmV0dXJuIGsoeGUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBXZSxLZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFllKXtzd2l0Y2goWWUubGFiZWwpe2Nhc2UgMDppZih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChqZSxvZSxo'@;
put 'ZS5kZWJ1ZyksV2U9amUucmVzdWx0LCFoZS5kZWJ1ZylyZXR1cm5bMyw0XTtzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFYuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVyblszLDFdO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuWzMsM119cmV0dXJuWzMsNF07Y2FzZSAxOnJldHVy'@;
put 'bls0LCgwLFUucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZSkoamUucmVzdWx0LHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNlcnZlclVybCldO2Nhc2UgMjpyZXR1cm4gV2U9WWUuc2VudCgpLFszLDRdO2Nhc2UgMzpyZXR1cm4gV2U9InN0cmluZyI9PXR5cGVvZiBqZS5yZXN1bHQ/KDAsVS5w'@;
put 'YXJzZVdlYm91dFJlc3BvbnNlKShqZS5yZXN1bHQsSCk6amUucmVzdWx0LFszLDRdO2Nhc2UgNDpyZXR1cm4gS2U9KDAsVS5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDpXZSxsb2c6amUubG9nfSxHKSxGZShLZSksWzJdfX0pfSl9KS5jYXRjaChmdW5jdGlvbihqZSl7'@;
put 'cmV0dXJuIGsoeGUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBXZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oS2Upe3N3aXRjaChLZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBqZSBpbnN0YW5jZW9mIEIuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBw'@;
put 'ZW5kUmVxdWVzdChqZSxvZSxoZS5kZWJ1ZyksT2UobmV3IEIuRXJyb3JSZXNwb25zZShqZT8ubWVzc2FnZSxqZSkpKSxqZSBpbnN0YW5jZW9mIEIuTG9naW5SZXF1aXJlZEVycm9yPyh1ZXx8T2UobmV3IEIuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFr'@;
put 'ZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLGplKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBXZS5leGVjdXRlKG9lLHNlLGhlLHVlLGNlLEcpLnRoZW4oZnVuY3Rpb24oWWUpe0ZlKFllKX0sZnVuY3Rpb24oWWUp'@;
put 'e09lKFllKX0pfSksYj9bNCxiKCldOlszLDJdKTpbMywzXTtjYXNlIDE6S2Uuc2VudCgpLEtlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblszLDRdO2Nhc2UgMzpPZShuZXcgQi5FcnJvclJlc3BvbnNlKGplPy5tZXNzYWdlLGplKSksS2UubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9KX0p'@;
put 'XX19KX0pfSx0ZS5wcm90b3R5cGUuZ2V0Sm9iVXJpPWZ1bmN0aW9uKG9lKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2UsaGUsdWUsY2UsRyxiO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDppZighdGhpcy5zYXNW'@;
put 'aXlhQXBpQ2xpZW50KXJldHVyblsyLCIiXTtpZihzZT0iIiwoMCxVLmlzUmVsYXRpdmVQYXRoKShvZSk/KGNlPW9lLnNwbGl0KCIvIiksaGU9Y2UubGVuZ3RoPjE/Y2VbMF06IiIsdWU9Y2UubGVuZ3RoPjE/Y2VbMV06IiIpOihjZT1vZS5zcGxpdCgiLyIpLHVlPWNlLnBvcCgpfHwiIixoZT1j'@;
put 'ZS5qb2luKCIvIikpLCF1ZSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBuYW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Sm9ic0luRm9sZGVyKGhlKV07Y2FzZSAxOnJldHVybihHPUQuc2VudCgpKSYmKGI9Ry5maW5kKGZ1'@;
put 'bmN0aW9uKEgpe3JldHVybiBILm5hbWU9PT11ZSYmImpvYkRlZmluaXRpb24iPT09SC5jb250ZW50VHlwZX0pKSYmKHNlPWIudXJpKSxbMixzZV19fSl9KX0sdGV9KFIoNjExOCkuQmFzZUpvYkV4ZWN1dG9yKTtPLldlYkpvYkV4ZWN1dG9yPXF9LDgyMTc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEUpO1YmJiEoImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6'@;
put 'Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwoVj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRo'@;
put 'aXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEso'@;
put 'UigxNTcwKSxPKSxLKFIoMzQ5MSksTyksSyhSKDQ0NDYpLE8pLEsoUig2MTE4KSxPKSxLKFIoMjY5MyksTyksSyhSKDYwODQpLE8pLEsoUigxMDY1KSxPKX0sNDU4ODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9dGhpcyYmdGhpcy5fX2Fz'@;
put 'c2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih1ZSl7Zm9yKHZhciBjZSxHPTEsYj1hcmd1bWVudHMubGVuZ3RoO0c8YjtHKyspZm9yKHZhciBEIGluIGNlPWFyZ3VtZW50c1tHXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2Us'@;
put 'RCkmJih1ZVtEXT1jZVtEXSk7cmV0dXJuIHVlfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odWUsY2UsRyxiKXtyZXR1cm4gbmV3KEd8fChHPVByb21pc2UpKShmdW5jdGlvbihELEgpe2Z1bmN0aW9uIE4oUyl7dHJ5e0MoYi5uZXh0'@;
put 'KFMpKX1jYXRjaCh2KXtIKHYpfX1mdW5jdGlvbiBnKFMpe3RyeXtDKGIudGhyb3coUykpfWNhdGNoKHYpe0godil9fWZ1bmN0aW9uIEMoUyl7dmFyIHY7Uy5kb25lP0QoUy52YWx1ZSk6KHY9Uy52YWx1ZSx2IGluc3RhbmNlb2YgRz92Om5ldyBHKGZ1bmN0aW9uKHApe3Aodil9KSkudGhlbihO'@;
put 'LGcpfUMoKGI9Yi5hcHBseSh1ZSxjZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24odWUsY2Upe3ZhciBHLGIsRCxILE49e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmRFswXSl0aHJvdyBEWzFdO3JldHVybiBEWzFdfSx0cnlzOltdLG9w'@;
put 'czpbXX07cmV0dXJuIEg9e25leHQ6ZygwKSx0aHJvdzpnKDEpLHJldHVybjpnKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoSFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxIO2Z1bmN0aW9uIGcoQyl7cmV0dXJuIGZ1bmN0aW9uKFMpe3JldHVybiBm'@;
put 'dW5jdGlvbih2KXtpZihHKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO047KXRyeXtpZihHPTEsYiYmKEQ9MiZ2WzBdP2IucmV0dXJuOnZbMF0/Yi50aHJvd3x8KChEPWIucmV0dXJuKSYmRC5jYWxsKGIpLDApOmIubmV4dCkmJiEo'@;
put 'RD1ELmNhbGwoYix2WzFdKSkuZG9uZSlyZXR1cm4gRDtzd2l0Y2goYj0wLEQmJih2PVsyJnZbMF0sRC52YWx1ZV0pLHZbMF0pe2Nhc2UgMDpjYXNlIDE6RD12O2JyZWFrO2Nhc2UgNDpyZXR1cm4gTi5sYWJlbCsrLHt2YWx1ZTp2WzFdLGRvbmU6ITF9O2Nhc2UgNTpOLmxhYmVsKyssYj12WzFd'@;
put 'LHY9WzBdO2NvbnRpbnVlO2Nhc2UgNzp2PU4ub3BzLnBvcCgpLE4udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEQ9KEQ9Ti50cnlzKS5sZW5ndGg+MCYmRFtELmxlbmd0aC0xXSl8fDYhPT12WzBdJiYyIT09dlswXSkpe049MDtjb250aW51ZX1pZigzPT09dlswXSYmKCFEfHx2'@;
put 'WzFdPkRbMF0mJnZbMV08RFszXSkpe04ubGFiZWw9dlsxXTticmVha31pZig2PT09dlswXSYmTi5sYWJlbDxEWzFdKXtOLmxhYmVsPURbMV0sRD12O2JyZWFrfWlmKEQmJk4ubGFiZWw8RFsyXSl7Ti5sYWJlbD1EWzJdLE4ub3BzLnB1c2godik7YnJlYWt9RFsyXSYmTi5vcHMucG9wKCksTi50'@;
put 'cnlzLnBvcCgpO2NvbnRpbnVlfXY9Y2UuY2FsbCh1ZSxOKX1jYXRjaChwKXt2PVs2LHBdLGI9MH1maW5hbGx5e0c9RD0wfWlmKDUmdlswXSl0aHJvdyB2WzFdO3JldHVybnt2YWx1ZTp2WzBdP3ZbMV06dm9pZCAwLGRvbmU6ITB9fShbQyxTXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8s'@;
put 'Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udGhyb3dJZkVycm9yPU8uUmVxdWVzdENsaWVudD12b2lkIDA7dmFyIGo9Uig5NjY5KSxWPVIoODM3MyksQj1SKDE1MjcpLFk9UigxMzk1KSxYPVIoMjgxMyksVT1SKDk3NzgpLHE9Uig5NTI2KSxlZT1SKDU5MjgpLHRlPVIoMTAwNSksb2U9Uig5'@;
put 'NTM5KSxzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHVlKGNlLEcsYixEKXt2YXIgSD10aGlzO3RoaXMuYmFzZVVybD1jZSx0aGlzLnJlcXVlc3RzPVtdLHRoaXMucmVxdWVzdHNMaW1pdD0xMCx0aGlzLnZlcmJvc2VNb2RlPSExLHRoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIi'@;
put 'fSx0aGlzLmdldFJlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIEgucmVxdWVzdHN9LHRoaXMuY2xlYXJSZXF1ZXN0cz1mdW5jdGlvbigpe0gucmVxdWVzdHM9W119LHRoaXMuYXV0aG9yaXplPWZ1bmN0aW9uKE4pe3JldHVybiBrKEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEMs'@;
put 'Uyx2LHAsdyxKLG5lLGRlLGZlLHhlLExlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRmUpe3N3aXRjaChGZS5sYWJlbCl7Y2FzZSAwOmZvcihDPXt9LFM9Ti5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSwodj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5u'@;
put 'ZXJIVE1MPVMscD12LnF1ZXJ5U2VsZWN0b3IoIiNhcHBsaWNhdGlvbl9hdXRob3JpemF0aW9uIiksZz1wP3RoaXMuYmFzZVVybCtwLmdldEF0dHJpYnV0ZSgiYWN0aW9uIik6bnVsbCx3PXA/LnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0IiksSj0wLG5lPXc7SjxuZS5sZW5ndGg7SisrKSJ1c2Vy'@;
put 'X29hdXRoX2FwcHJvdmFsIj09PShkZT1uZVtKXSkubmFtZSYmKGRlLnZhbHVlPSJ0cnVlIiksQ1tkZS5uYW1lXT1kZS52YWx1ZTtmb3IoTGUgaW4oZmU9T2JqZWN0LmtleXMoQykuZmluZChmdW5jdGlvbihPZSl7cmV0dXJuIE9lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJjc3JmIil9KSkm'@;
put 'Jih0aGlzLmNzcmZUb2tlbi52YWx1ZT1DW2ZlXSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWV8fCJ4LWNzcmYtdG9rZW4iKSx4ZT1uZXcgRm9ybURhdGEsQylDLmhhc093blByb3BlcnR5KExlKSYmeGUuYXBwZW5kKExlLENbTGVdKTtpZighZyl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkF1dGggRm9ybSBVUkwgaXMgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuWzQsdGhpcy5odHRwQ2xpZW50LnBvc3QoZyx4ZSx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifX0pLnRo'@;
put 'ZW4oZnVuY3Rpb24oT2Upe3JldHVybiBPZS5kYXRhfSkuY2F0Y2goZnVuY3Rpb24oT2Upeyh6LmxvZ2dlcnx8SykuZXJyb3IoT2UpfSldO2Nhc2UgMTpyZXR1cm5bMixGZS5zZW50KCldfX0pfSl9LHRoaXMucHJldHRpZnlTdHJpbmc9ZnVuY3Rpb24oTil7cmV0dXJuKDAsb2UuaW5zcGVjdCko'@;
put 'Tix7Y29sb3JzOiJibGVhY2hlZCIhPT1ILnZlcmJvc2VNb2RlfSl9LHRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHk9ZnVuY3Rpb24oTil7aWYoIU4pcmV0dXJuIiI7dmFyIGc7aWYoInN0cmluZyI9PXR5cGVvZiBOKXRyeXtnPUpTT04ucGFyc2UoTil9Y2F0Y2h7Zz1OfWVsc2UgZz1OO3ZhciBD'@;
put 'PUgucHJldHRpZnlTdHJpbmcoZykuc3BsaXQoIlxuIik7cmV0dXJuIEMubGVuZ3RoPjUxJiYoQy5zcGxpY2UoNTApLEMucHVzaCgiLi4uIikpLEMuam9pbigiXG4iKX0sdGhpcy5kZWZhdWx0SW50ZXJjZXB0aW9uQ2FsbEJhY2s9ZnVuY3Rpb24oTil7dmFyIGcsQz0iTm90IHByb3ZpZGVkIixT'@;
put 'PXtfaGVhZGVyOiIiLmNvbmNhdChDLCJcbiIpLHJlczp7cmF3SGVhZGVyczpbQ119fSx2PU47aWYoai5kZWZhdWx0LmlzQXhpb3NFcnJvcihOKSl7dmFyIHA9Ti5yZXNwb25zZSx3PU4ucmVxdWVzdCxKPU4uY29uZmlnO2lmKHApdj1wO2Vsc2V7aWYodyl7dmFyIG5lPXcuX2hlYWRlcixkZT13'@;
put 'Ll9jdXJyZW50UmVxdWVzdDtuZT9TLl9oZWFkZXI9bmU6ZGUmJmRlLl9oZWFkZXImJihTLl9oZWFkZXI9ZGUuX2hlYWRlcik7dmFyIGZlPXcucmVzO2ZlJiZmZS5yYXdIZWFkZXJzJiYoUy5yZXMucmF3SGVhZGVycz1mZS5yYXdIZWFkZXJzKX12PXtzdGF0dXM6QyxyZXF1ZXN0OlMsY29uZmln'@;
put 'Okp8fHtkYXRhOkN9LGRhdGE6Q319fXZhciB4ZT12LnN0YXR1cyxPZT12LmRhdGEsamU9di5jb25maWcuZGF0YSxXZT12LnJlcXVlc3R8fFMsS2U9V2UuX2hlYWRlcixZZT1XZS5yZXMucmF3SGVhZGVycy5yZWR1Y2UoZnVuY3Rpb24obHQsUGUsYmUpe3JldHVybiBsdCsoYmUlMj09MD8iIi5j'@;
put 'b25jYXQoMD09PWJlPyIiOiJcbiIpLmNvbmNhdChQZSk6IjogIi5jb25jYXQoUGUpKX0sIiIpLEplPUgucGFyc2VJbnRlcmNlcHRlZEJvZHkoT2UpO3JldHVybiBudWxsPT09KGc9ei5sb2dnZXIpfHx2b2lkIDA9PT1nfHxnLmluZm8oIkhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxu'@;
put 'Ii5jb25jYXQoS2UpLmNvbmNhdChILnBhcnNlSW50ZXJjZXB0ZWRCb2R5KGplKSwiXG5cbkhUVFAgUmVzcG9uc2UgQ29kZTogIikuY29uY2F0KEgucHJldHRpZnlTdHJpbmcoeGUpLCJcblxuSFRUUCBSZXNwb25zZSAoZmlyc3QgNTAgbGluZXMpOlxuIikuY29uY2F0KFllKS5jb25jYXQoSmU/'@;
put 'IlxuXG4iLmNvbmNhdChKZSk6IiIsIlxuIikpLE59LHRoaXMuc2V0VmVyYm9zZU1vZGU9ZnVuY3Rpb24oTil7SC52ZXJib3NlTW9kZT1OLEgudmVyYm9zZU1vZGU/SC5lbmFibGVWZXJib3NlTW9kZSgpOkguZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRoaXMuZW5hYmxlVmVyYm9zZU1vZGU9ZnVu'@;
put 'Y3Rpb24oTixnKXt2b2lkIDA9PT1OJiYoTj1ILmRlZmF1bHRJbnRlcmNlcHRpb25DYWxsQmFjayksdm9pZCAwPT09ZyYmKGc9SC5kZWZhdWx0SW50ZXJjZXB0aW9uQ2FsbEJhY2spLEguaHR0cEludGVyY2VwdG9yPUguaHR0cENsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKE4sZyl9'@;
put 'LHRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKCl7SC5odHRwSW50ZXJjZXB0b3ImJkguaHR0cENsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZWplY3QoSC5odHRwSW50ZXJjZXB0b3IpfSx0aGlzLmdldEhlYWRlcnM9ZnVuY3Rpb24oTixnKXt2YXIgQz17fTtyZXR1cm4iYXBw'@;
put 'bGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PWcmJihDWyJDb250ZW50LVR5cGUiXT1nKSxDLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1nPyJhcHBsaWNhdGlvbi9qc29uIjoiKi8qIixOJiYoQy5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQoTikpLEguY3NyZlRv'@;
put 'a2VuLmhlYWRlck5hbWUmJkguY3NyZlRva2VuLnZhbHVlJiYoQ1tILmNzcmZUb2tlbi5oZWFkZXJOYW1lXT1ILmNzcmZUb2tlbi52YWx1ZSksQ30sdGhpcy5wYXJzZUFuZFNldEZpbGVVcGxvYWRDc3JmVG9rZW49ZnVuY3Rpb24oTil7dmFyIGc9SC5wYXJzZUNzcmZUb2tlbihOKTtnJiYoSC5m'@;
put 'aWxlVXBsb2FkQ3NyZlRva2VuPWcpfSx0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuPWZ1bmN0aW9uKE4pe3ZhciBnPUgucGFyc2VDc3JmVG9rZW4oTik7ZyYmKEguY3NyZlRva2VuPWcpfSx0aGlzLnBhcnNlQ3NyZlRva2VuPWZ1bmN0aW9uKE4pe3ZhciBnLEM9bnVsbD09PShnPU4uaGVhZGVy'@;
put 'c1sieC1jc3JmLWhlYWRlciJdKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy50b0xvd2VyQ2FzZSgpO2lmKEMpcmV0dXJue2hlYWRlck5hbWU6Qyx2YWx1ZTpOLmhlYWRlcnNbQ118fCIifX0sdGhpcy5oYW5kbGVFcnJvcj1mdW5jdGlvbihOLGcsQyl7cmV0dXJuIHZvaWQgMD09PUMmJihDPSExKSxr'@;
put 'KEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBTLHY7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihwKXtzd2l0Y2gocC5sYWJlbCl7Y2FzZSAwOnJldHVybiBTPU4ucmVzcG9uc2UsTiBpbnN0YW5jZW9mIFkuQXV0aG9yaXplRXJyb3I/WzQsdGhpcy5odHRwQ2xpZW50LmdldChOLmNvbmZp'@;
put 'cm1Vcmwse3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4iLEFjY2VwdDoiKi8qIn19KS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZ2V0dGluZyBlcnJvciBjb25maXJtVXJsLiAi'@;
put 'KX0pXTpbMyw1XTtjYXNlIDE6cmV0dXJuIHY9cC5zZW50KCksKDAsQi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkodj8uZGF0YSk/WzQsdGhpcy5hdXRob3JpemUodi5kYXRhKS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgYXV0aG9y'@;
put 'aXppbmcgcmVxdWVzdC4gIil9KV06WzMsM107Y2FzZSAyOnAuc2VudCgpLHAubGFiZWw9MztjYXNlIDM6cmV0dXJuWzQsZygpLmNhdGNoKGZ1bmN0aW9uKHcpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh3LCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3Iu'@;
put 'ICIpfSldO2Nhc2UgNDpyZXR1cm5bMixwLnNlbnQoKV07Y2FzZSA1OmlmKE4gaW5zdGFuY2VvZiBZLkxvZ2luUmVxdWlyZWRFcnJvcil0aHJvdyB0aGlzLmNsZWFyQ3NyZlRva2VucygpLE47cmV0dXJuIE4gaW5zdGFuY2VvZiB0ZS5JbnZhbGlkU0FTanNDc3JmRXJyb3I/WzQsdGhpcy5odHRw'@;
put 'Q2xpZW50LmdldCgiLyIse3dpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24odyl7dmFyIEosbmU9bnVsbD09PShKPS88c2NyaXB0PmRvY3VtZW50LmNvb2tpZSA9ICcoWFNSRi1UT0tFTj0uKjsgTWF4LUFnZT04NjQwMDsgU2FtZVNpdGU9U3RyaWN0OyBQYXRoPVwvOyknPFwvc2Ny'@;
put 'aXB0Pi8uZXhlYyh3LmRhdGEpKXx8dm9pZCAwPT09Sj92b2lkIDA6SlsxXTtuZSYmKGRvY3VtZW50LmNvb2tpZT1uZSl9KS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgcmUtZmV0Y2hpbmcgQ1NSRiB0b2tlbi4iKX0pXTpbMyw4XTtj'@;
put 'YXNlIDY6cmV0dXJuIHAuc2VudCgpLFs0LGcoKS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pXTtjYXNlIDc6cmV0dXJuWzIscC5zZW50KCldO2Nhc2UgODpyZXR1'@;
put 'cm4gNDAzIT09Uz8uc3RhdHVzJiY0NDkhPT1TPy5zdGF0dXM/WzMsMTFdOih0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuKFMpLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlP1s0LGcoKS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVz'@;
put 'c2FnZSkodywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pXTpbMywxMF0pO2Nhc2UgOTpyZXR1cm5bMixwLnNlbnQoKV07Y2FzZSAxMDp0aHJvdyBOO2Nhc2UgMTE6aWYoNDA0PT09Uz8uc3RhdHVzKXRocm93IG5ldyBZLk5vdEZvdW5kRXJyb3Io'@;
put 'Uy5jb25maWcudXJsKTtpZig1MDI9PT1TPy5zdGF0dXMpe2lmKEMpdGhyb3cgbmV3IFkuSW50ZXJuYWxTZXJ2ZXJFcnJvcjtyZXR1cm5bMl19cC5sYWJlbD0xMjtjYXNlIDEyOnRocm93IE4uaXNBeGlvc0Vycm9yJiYiVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSI9PT1OLmNvZGU/'@;
put 'bmV3IFkuQ2VydGlmaWNhdGVFcnJvcihOLm1lc3NhZ2UpOk4ubWVzc2FnZT9OOigwLFUucHJlZml4TWVzc2FnZSkoTiwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpfX0pfSl9LHRoaXMuY3JlYXRlSHR0cENsaWVudChjZSxHKSxiJiYodGhpcy5yZXF1ZXN0c0xpbWl0PWIpLEQmJih0'@;
put 'aGlzLnNldFZlcmJvc2VNb2RlKEQpLHRoaXMuZW5hYmxlVmVyYm9zZU1vZGUoKSl9cmV0dXJuIHVlLnByb3RvdHlwZS5zZXRDb25maWc9ZnVuY3Rpb24oY2UsRyl7dGhpcy5jcmVhdGVIdHRwQ2xpZW50KGNlLEcpfSx1ZS5wcm90b3R5cGUuc2F2ZUxvY2FsU3RvcmFnZVRva2VuPWZ1bmN0aW9u'@;
put 'KGNlLEcpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsY2UpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLEcpfSx1ZS5wcm90b3R5cGUuZ2V0Q3NyZlRva2VuPWZ1bmN0aW9uKGNlKXtyZXR1cm4gdm9pZCAwPT09Y2UmJihjZT0iZ2VuZXJhbCIpLCJmaWxl'@;
put 'Ij09PWNlP3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbjp0aGlzLmNzcmZUb2tlbn0sdWUucHJvdG90eXBlLmNsZWFyQ3NyZlRva2Vucz1mdW5jdGlvbigpe3RoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49e2hlYWRlck5hbWU6'@;
put 'IiIsdmFsdWU6IiJ9fSx1ZS5wcm90b3R5cGUuY2xlYXJMb2NhbFN0b3JhZ2VUb2tlbnM9ZnVuY3Rpb24oKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLCIiKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIiwiIil9LHVlLnByb3RvdHlwZS5nZXRCYXNlVXJs'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5iYXNlVVJMfHwiIn0sdWUucHJvdG90eXBlLmFwcGVuZFJlcXVlc3Q9ZnVuY3Rpb24oY2UsRyxiKXt2YXIgRD0iIixIPSIiLE49bnVsbDtiJiYoY2U/LmxvZz8oRD0oMCxlZS5wYXJzZVNvdXJjZUNvZGUpKGNlLmxv'@;
put 'ZyksSD0oMCxlZS5wYXJzZUdlbmVyYXRlZENvZGUpKGNlLmxvZyksTj1jZT8ucmVzdWx0P2NlLnJlc3VsdC5XT1JLOmNlLmxvZyk6Y2U/LnJlc3VsdCYmKCJzdHJpbmciPT10eXBlb2YgY2UucmVzdWx0JiYoRD0oMCxlZS5wYXJzZVNvdXJjZUNvZGUpKGNlLnJlc3VsdCksSD0oMCxlZS5wYXJz'@;
put 'ZUdlbmVyYXRlZENvZGUpKGNlLnJlc3VsdCkpLE49Y2UucmVzdWx0LldPUkspKTt2YXIgZz0ic3RyaW5nIj09dHlwZW9mIGNlPy5yZXN1bHQ/Y2U/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShjZT8ucmVzdWx0LG51bGwsMik7dGhpcy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmNlPy5sb2d8fGd8'@;
put 'fGNlLHNlcnZpY2VMaW5rOkcsdGltZXN0YW1wOm5ldyBEYXRlLHNvdXJjZUNvZGU6RCxnZW5lcmF0ZWRDb2RlOkgsU0FTV09SSzpOfSksdGhpcy5yZXF1ZXN0cy5sZW5ndGg+dGhpcy5yZXF1ZXN0c0xpbWl0JiZ0aGlzLnJlcXVlc3RzLnNwbGljZSgwLDEpfSx1ZS5wcm90b3R5cGUuZ2V0PWZ1'@;
put 'bmN0aW9uKGNlLEcsYixELEgpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PUQmJihEPXt9KSx2b2lkIDA9PT1IJiYoSD0hMSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTixnLEM9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0'@;
put 'aW9uKFMpe3JldHVybiBOPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoRyxiKSksRCksZz17aGVhZGVyczpOLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1iPyJ0ZXh0IjoianNvbiIsd2l0aENyZWRlbnRpYWxzOiEwfSwidGV4dC9wbGFpbiI9PT1iJiYoZy50cmFuc2Zvcm1SZXNwb25zZT12'@;
put 'b2lkIDApLFsyLHRoaXMuaHR0cENsaWVudC5nZXQoY2UsZykudGhlbihmdW5jdGlvbih2KXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikodiksQy5wYXJzZVJlc3BvbnNlKHYpfSkuY2F0Y2goZnVuY3Rpb24odil7cmV0dXJuIGsoQyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHA9dGhp'@;
put 'cztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHcpe3N3aXRjaCh3LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcih2LGZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0KGNlLEcsYixEKS5jYXRjaChmdW5jdGlvbihKKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoSiwiRXJyb3Ig'@;
put 'd2hpbGUgZXhlY3V0aW5nIGhhbmRsZSBlcnJvciBjYWxsYmFjay4gIil9KX0sSCldO2Nhc2UgMTpyZXR1cm5bMix3LnNlbnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKGNlLEcsYixELEgsTil7cmV0dXJuIHZvaWQgMD09PUQmJihEPSJhcHBsaWNhdGlvbi9q'@;
put 'c29uIiksdm9pZCAwPT09SCYmKEg9e30pLHZvaWQgMD09PU4mJihOPXt9KSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEM9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFMpe3JldHVybiBnPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoYixEKSksSCksWzIsdGhpcy5o'@;
put 'dHRwQ2xpZW50LnBvc3QoY2UsRyxJKHtoZWFkZXJzOmcsd2l0aENyZWRlbnRpYWxzOiEwfSxOKSkudGhlbihmdW5jdGlvbih2KXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikodiksQy5wYXJzZVJlc3BvbnNlKHYpfSkuY2F0Y2goZnVuY3Rpb24odil7cmV0dXJuIGsoQyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKCl7dmFyIHA9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHcpe3N3aXRjaCh3LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcih2LGZ1bmN0aW9uKCl7cmV0dXJuIHAucG9zdChjZSxHLGIsRCxIKX0pXTtjYXNlIDE6cmV0dXJuWzIsdy5zZW50KCld'@;
put 'fX0pfSl9KV19KX0pfSx1ZS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGNlLEcsYixEKXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9e30pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIEg9SShJKHt9LHRo'@;
put 'aXMuZ2V0SGVhZGVycyhiLCJhcHBsaWNhdGlvbi9qc29uIikpLEQpLFsyLHRoaXMuaHR0cENsaWVudC5wdXQoY2UsRyx7aGVhZGVyczpILHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24oQyl7cmV0dXJuKDAsTy50aHJvd0lmRXJyb3IpKEMpLE4ucGFyc2VSZXNwb25zZShDKX0p'@;
put 'LmNhdGNoKGZ1bmN0aW9uKEMpe3JldHVybiBrKE4sdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBTPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih2KXtzd2l0Y2godi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoQyxmdW5jdGlvbigpe3JldHVybiBTLnB1'@;
put 'dChjZSxHLGIsRCl9KV07Y2FzZSAxOnJldHVyblsyLHYuc2VudCgpXX19KX0pfSldfSl9KX0sdWUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihjZSxHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYixEPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihI'@;
put 'KXtyZXR1cm4gYj10aGlzLmdldEhlYWRlcnMoRywiYXBwbGljYXRpb24vanNvbiIpLFsyLHRoaXMuaHR0cENsaWVudC5kZWxldGUoY2Use2hlYWRlcnM6Yix3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKE4pe3JldHVybigwLE8udGhyb3dJZkVycm9yKShOKSxELnBhcnNlUmVz'@;
put 'cG9uc2UoTil9KS5jYXRjaChmdW5jdGlvbihOKXtyZXR1cm4gayhELHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhhbmRsZUVycm9yKE4sZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZy5kZWxldGUoY2UsRyl9KV07Y2FzZSAxOnJldHVyblsyLEMuc2VudCgpXX19KX0pfSldfSl9KX0sdWUucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKGNlLEcsYil7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEg9'@;
put 'dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3JldHVybiBEPXRoaXMuZ2V0SGVhZGVycyhiLCJhcHBsaWNhdGlvbi9qc29uIiksWzIsdGhpcy5odHRwQ2xpZW50LnBhdGNoKGNlLEcse2hlYWRlcnM6RCx3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKGcpe3JldHVybigw'@;
put 'LE8udGhyb3dJZkVycm9yKShnKSxILnBhcnNlUmVzcG9uc2UoZyl9KS5jYXRjaChmdW5jdGlvbihnKXtyZXR1cm4gayhILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0'@;
put 'aGlzLmhhbmRsZUVycm9yKGcsZnVuY3Rpb24oKXtyZXR1cm4gQy5wYXRjaChjZSxHLGIpfSldO2Nhc2UgMTpyZXR1cm5bMixTLnNlbnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS51cGxvYWRGaWxlPWZ1bmN0aW9uKGNlLEcsYil7dmFyIEQ7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9p'@;
put 'ZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTixnO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpIPXRoaXMuZ2V0SGVhZGVycyhiLCJhcHBsaWNhdGlvbi9qc29uIiksIShudWxsPT09KEQ9dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXx8dm9pZCAwPT09RCkm'@;
put 'JkQudmFsdWUmJihIW3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4udmFsdWUpLEMubGFiZWw9MTtjYXNlIDE6cmV0dXJuIEMudHJ5cy5wdXNoKFsxLDMsLDRdKSxbNCx0aGlzLmh0dHBDbGllbnQucG9zdChjZSxHLHtoZWFkZXJz'@;
put 'OkgsdHJhbnNmb3JtUmVxdWVzdDpmdW5jdGlvbihTKXtyZXR1cm4gU319KV07Y2FzZSAyOnJldHVyblsyLHtyZXN1bHQ6KGc9Qy5zZW50KCkpLmRhdGEsZXRhZzpnLmhlYWRlcnMuZXRhZ31dO2Nhc2UgMzppZihOPUMuc2VudCgpLDQwMz09PShudWxsPT0oZz1OLnJlc3BvbnNlKT92b2lkIDA6'@;
put 'Zy5zdGF0dXMpfHw0NDk9PT1nPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuKGcpLHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbilyZXR1cm5bMix0aGlzLnVwbG9hZEZpbGUoY2UsRyxiKV07dGhyb3cgTn10aHJvdyBOO2Nhc2UgNDpyZXR1cm5bMl19fSl9'@;
put 'KX0sdWUucHJvdG90eXBlLnBhcnNlUmVzcG9uc2U9ZnVuY3Rpb24oY2Upe3ZhciBHLGI9Y2U/LmhlYWRlcnM/Y2UuaGVhZGVycy5ldGFnOiIiLEQ9ITE7dHJ5e0c9InN0cmluZyI9PXR5cGVvZiBjZS5kYXRhP0pTT04ucGFyc2UoY2UuZGF0YSk6Y2UuZGF0YX1jYXRjaHt0cnl7Rz1KU09OLnBh'@;
put 'cnNlKCgwLFgucGFyc2VXZWJvdXRSZXNwb25zZSkoY2UuZGF0YSkpfWNhdGNoe0c9Y2UuZGF0YX1EPSEwfXZhciBIPXtyZXN1bHQ6RyxldGFnOmIsc3RhdHVzOmNlLnN0YXR1c307cmV0dXJuIEQmJihILmxvZz1jZS5kYXRhKSxIfSx1ZS5wcm90b3R5cGUuY3JlYXRlSHR0cENsaWVudD1mdW5j'@;
put 'dGlvbihjZSxHKXt2YXIgYj1HP25ldyBWLkFnZW50KEcpOnZvaWQgMDt0aGlzLmh0dHBDbGllbnQ9KDAsZWUuY3JlYXRlQXhpb3NJbnN0YW5jZSkoY2UsYiksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLnZhbGlkYXRlU3RhdHVzPWZ1bmN0aW9uKEQpe3JldHVybiBEPj0yMDAmJkQ8PTQwMX19'@;
put 'LHVlfSgpO08uUmVxdWVzdENsaWVudD1zZSxPLnRocm93SWZFcnJvcj1mdW5jdGlvbih1ZSl7dmFyIGNlLEcsYixELEgsTixnO3N3aXRjaCh1ZS5zdGF0dXMpe2Nhc2UgNDAwOmlmKCJvYmplY3QiPT10eXBlb2YgdWUuZGF0YSYmImludmFsaWRfZ3JhbnQiPT09dWUuZGF0YS5lcnJvcil0aHJv'@;
put 'dyBuZXcgWS5Mb2dpblJlcXVpcmVkRXJyb3IodWUuZGF0YSk7aWYoInN0cmluZyI9PXR5cGVvZiB1ZS5kYXRhJiYiaW52YWxpZCBjc3JmIHRva2VuISI9PT11ZS5kYXRhLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IHRlLkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztjYXNlIDQwMTp0aHJv'@;
put 'dyJvYmplY3QiPT10eXBlb2YgdWUuZGF0YT9uZXcgWS5Mb2dpblJlcXVpcmVkRXJyb3IodWUuZGF0YSk6bmV3IFkuTG9naW5SZXF1aXJlZEVycm9yfWlmKG51bGwhPT0oRz1udWxsPT09KGNlPXVlLmRhdGEpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2UuZW50aXR5SUQpJiZ2b2lkIDAhPT1HJiZH'@;
put 'LmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyBZLkxvZ2luUmVxdWlyZWRFcnJvcjtpZigic3RyaW5nIj09dHlwZW9mIHVlLmRhdGEmJigwLEIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHVlLmRhdGEpKXRocm93IG5ldyBZLkF1dGhvcml6ZUVycm9yKCJBdXRob3JpemF0aW9uIHJlcXVp'@;
put 'cmVkIix1ZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9mIHVlLmRhdGEmJigwLEIuaXNMb2dJblJlcXVpcmVkKSh1ZS5kYXRhKSYmKG51bGw9PT0oRD1udWxsPT09KGI9dWUuY29uZmlnKXx8dm9pZCAwPT09Yj92b2lkIDA6Yi51cmwpfHx2b2lkIDA9PT1EfHwhRC5p'@;
put 'bmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyBZLkxvZ2luUmVxdWlyZWRFcnJvcjtpZihudWxsIT09KEg9dWUuZGF0YSkmJnZvaWQgMCE9PUgmJkguYXV0aF9yZXF1ZXN0KXRocm93IG5ldyBZLkF1dGhvcml6ZUVycm9yKHVlLmRhdGEubWVzc2FnZSx1ZS5yZXF1ZXN0LnJl'@;
put 'c3BvbnNlVVJMKTtpZihudWxsIT09KGc9bnVsbD09PShOPXVlLmNvbmZpZyl8fHZvaWQgMD09PU4/dm9pZCAwOk4udXJsKSYmdm9pZCAwIT09ZyYmZy5pbmNsdWRlcygic2FzQXV0aEVycm9yIikpdGhyb3cgbmV3IHEuU0FTOUF1dGhFcnJvcjt2YXIgUz1oZSh1ZS5kYXRhKTtpZihTKXRocm93'@;
put 'IFN9O3ZhciBoZT1mdW5jdGlvbih1ZSl7aWYoIXVlKXJldHVybiBudWxsO3RyeXt2YXIgY2U9SlNPTi5wYXJzZSh1ZT8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7aWYoY2UuZXJyb3JDb2RlJiZjZS5tZXNzYWdlKXJldHVybiBuZXcgWS5Kb2JFeGVjdXRpb25FcnJvcihjZS5lcnJvckNvZGUs'@;
put 'Y2UubWVzc2FnZSx1ZT8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSl9Y2F0Y2h7fXRyeXtpZih1ZT8uaW5jbHVkZXMoJ3siZXJyb3JDb2RlJykmJihOPXVlLnNwbGl0KCd7ImVycm9yQ29kZScpKS5sZW5ndGg+MSl7dmFyIEc9J3siZXJyb3JDb2RlJytOWzFdLnNwbGl0KCcifScpWzBdKycifScs'@;
put 'Yj1KU09OLnBhcnNlKEcucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7cmV0dXJuIG5ldyBZLkpvYkV4ZWN1dGlvbkVycm9yKGIuZXJyb3JDb2RlLGIubWVzc2FnZSx1ZT8ucmVwbGFjZSgvW1xuXHJdL2csIlxuIikpfX1jYXRjaHt9dHJ5e2lmKHVlPy5tYXRjaCgvc3RvcmVkIHByb2Nlc3Mgbm90'@;
put 'IGZvdW5kOiAvaSkmJihOPXVlLnNwbGl0KC9zdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6IC9pKSkubGVuZ3RoPjEpe3ZhciBEPU5bMV0uc3BsaXQoIjxpPiIpWzFdLnNwbGl0KCI8L2k+IilbMF0sSD1ELmVuZHNXaXRoKCJydW5uZXIiKT8iU0FTSlMgcnVubmVyIG5vdCBmb3VuZC4gSGVyZSdz'@;
put 'IHRoZSBsaW5rIChodHRwczovL2NsaS5zYXNqcy5pby9hdXRoLyNzYXNqcy1ydW5uZXIpIHRvIHRoZSBTQVMgY29kZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIFNBU2pzIHJ1bm5lciI6IlN0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogIi5jb25jYXQoRCk7cmV0dXJuIG5ldyBZLkpvYkV4ZWN1dGlv'@;
put 'bkVycm9yKDUwMCxILCIiKX19Y2F0Y2h7fXRyeXt2YXIgTjtpZighdWU/Lm1hdGNoKC8+PndlYm91dEJFR0lOPDwvKSYmdWU/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmdWU/Lm1hdGNoKC9UaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLi9pKSYmKE49dWUuc3Bs'@;
put 'aXQoIjxoMj5TQVMgTG9nPC9oMj4iKSkubGVuZ3RoPjEpe3ZhciBnPU5bMV0uc3BsaXQoIjxwcmU+IilbMV0uc3BsaXQoIjwvcHJlPiIpWzBdO3JldHVybiBuZXcgWS5Kb2JFeGVjdXRpb25FcnJvcig1MDAsSD0iVGhpcyByZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGVycm9ycy4iLGcpfX1jYXRj'@;
put 'aHt9cmV0dXJuIG51bGx9fSw3OTU6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihxLGVlKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVu'@;
put 'Y3Rpb24odGUsb2Upe3RlLl9fcHJvdG9fXz1vZX18fGZ1bmN0aW9uKHRlLG9lKXtmb3IodmFyIHNlIGluIG9lKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvZSxzZSkmJih0ZVtzZV09b2Vbc2VdKX0pKHEsZWUpfSxmdW5jdGlvbihxLGVlKXtpZigiZnVuY3Rpb24iIT10'@;
put 'eXBlb2YgZWUmJm51bGwhPT1lZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGVlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiB0ZSgpe3RoaXMuY29uc3RydWN0b3I9cX16KHEsZWUpLHEucHJvdG90eXBlPW51bGw9'@;
put 'PT1lZT9PYmplY3QuY3JlYXRlKGVlKToodGUucHJvdG90eXBlPWVlLnByb3RvdHlwZSxuZXcgdGUpfSksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHEpe2Zvcih2YXIgZWUsdGU9MSxvZT1hcmd1bWVudHMubGVuZ3Ro'@;
put 'O3RlPG9lO3RlKyspZm9yKHZhciBzZSBpbiBlZT1hcmd1bWVudHNbdGVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZSxzZSkmJihxW3NlXT1lZVtzZV0pO3JldHVybiBxfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVu'@;
put 'Y3Rpb24ocSxlZSx0ZSxvZSl7cmV0dXJuIG5ldyh0ZXx8KHRlPVByb21pc2UpKShmdW5jdGlvbihzZSxoZSl7ZnVuY3Rpb24gdWUoYil7dHJ5e0cob2UubmV4dChiKSl9Y2F0Y2goRCl7aGUoRCl9fWZ1bmN0aW9uIGNlKGIpe3RyeXtHKG9lLnRocm93KGIpKX1jYXRjaChEKXtoZShEKX19ZnVu'@;
put 'Y3Rpb24gRyhiKXt2YXIgRDtiLmRvbmU/c2UoYi52YWx1ZSk6KEQ9Yi52YWx1ZSxEIGluc3RhbmNlb2YgdGU/RDpuZXcgdGUoZnVuY3Rpb24oSCl7SChEKX0pKS50aGVuKHVlLGNlKX1HKChvZT1vZS5hcHBseShxLGVlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9y'@;
put 'fHxmdW5jdGlvbihxLGVlKXt2YXIgdGUsb2Usc2UsaGUsdWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJuIHNlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGhlPXtuZXh0OmNlKDApLHRocm93OmNlKDEpLHJldHVybjpjZSgyKX0sImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGhlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGhlO2Z1bmN0aW9uIGNlKEcpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZnVuY3Rpb24oRCl7aWYodGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlz'@;
put 'IGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dWU7KXRyeXtpZih0ZT0xLG9lJiYoc2U9MiZEWzBdP29lLnJldHVybjpEWzBdP29lLnRocm93fHwoKHNlPW9lLnJldHVybikmJnNlLmNhbGwob2UpLDApOm9lLm5leHQpJiYhKHNlPXNlLmNhbGwob2UsRFsxXSkpLmRvbmUpcmV0dXJuIHNlO3N3'@;
put 'aXRjaChvZT0wLHNlJiYoRD1bMiZEWzBdLHNlLnZhbHVlXSksRFswXSl7Y2FzZSAwOmNhc2UgMTpzZT1EO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdWUubGFiZWwrKyx7dmFsdWU6RFsxXSxkb25lOiExfTtjYXNlIDU6dWUubGFiZWwrKyxvZT1EWzFdLEQ9WzBdO2NvbnRpbnVlO2Nhc2UgNzpEPXVl'@;
put 'Lm9wcy5wb3AoKSx1ZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoc2U9KHNlPXVlLnRyeXMpLmxlbmd0aD4wJiZzZVtzZS5sZW5ndGgtMV0pfHw2IT09RFswXSYmMiE9PURbMF0pKXt1ZT0wO2NvbnRpbnVlfWlmKDM9PT1EWzBdJiYoIXNlfHxEWzFdPnNlWzBdJiZEWzFdPHNl'@;
put 'WzNdKSl7dWUubGFiZWw9RFsxXTticmVha31pZig2PT09RFswXSYmdWUubGFiZWw8c2VbMV0pe3VlLmxhYmVsPXNlWzFdLHNlPUQ7YnJlYWt9aWYoc2UmJnVlLmxhYmVsPHNlWzJdKXt1ZS5sYWJlbD1zZVsyXSx1ZS5vcHMucHVzaChEKTticmVha31zZVsyXSYmdWUub3BzLnBvcCgpLHVlLnRy'@;
put 'eXMucG9wKCk7Y29udGludWV9RD1lZS5jYWxsKHEsdWUpfWNhdGNoKEgpe0Q9WzYsSF0sb2U9MH1maW5hbGx5e3RlPXNlPTB9aWYoNSZEWzBdKXRocm93IERbMV07cmV0dXJue3ZhbHVlOkRbMF0/RFsxXTp2b2lkIDAsZG9uZTohMH19KFtHLGJdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'TywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TYXM5UmVxdWVzdENsaWVudD12b2lkIDA7dmFyIGo9Uig4MjI0KSxWPVIoNzg1NyksQj1SKDk3NzgpLFk9Uig0NTg4KSxYPVIoMTM5NSksVT1mdW5jdGlvbihxKXtmdW5jdGlvbiBlZSh0ZSxvZSl7dmFyIHNlPXEuY2FsbCh0aGlzLHRlLG9l'@;
put 'KXx8dGhpcztyZXR1cm4gc2UuaHR0cENsaWVudC5kZWZhdWx0cy5tYXhSZWRpcmVjdHM9MCxzZS5odHRwQ2xpZW50LmRlZmF1bHRzLnZhbGlkYXRlU3RhdHVzPWZ1bmN0aW9uKGhlKXtyZXR1cm4gaGU+PTIwMCYmaGU8MzAzfSxqLmRlZmF1bHQmJigoMCxqLmRlZmF1bHQpKHNlLmh0dHBDbGll'@;
put 'bnQpLHNlLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPW5ldyBWLkNvb2tpZUphciksc2V9cmV0dXJuIEsoZWUscSksZWUucHJvdG90eXBlLmxvZ2luPWZ1bmN0aW9uKHRlLG9lLHNlKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaGU7cmV0dXJuIEUodGhpcyxm'@;
put 'dW5jdGlvbih1ZSl7c3dpdGNoKHVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGhlPSIvVXNlciBGb2xkZXJzLyIuY29uY2F0KHRlLCIvTXkgRm9sZGVyL3Nhc2pzL3J1bm5lciIpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXI/KHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXIucmVtb3Zl'@;
put 'QWxsQ29va2llcygpLFs0LHRoaXMuZ2V0KCIiLmNvbmNhdChzZSwiP19wcm9ncmFtPSIpLmNvbmNhdChoZSwiJl91c2VybmFtZT0iKS5jb25jYXQodGUsIiZfcGFzc3dvcmQ9IikuY29uY2F0KG9lKSx2b2lkIDAsInRleHQvcGxhaW4iKV0pOlszLDJdO2Nhc2UgMTp1ZS5zZW50KCksdWUubGFi'@;
put 'ZWw9MjtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9LGVlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odGUsb2Usc2UsaGUsdWUpe3JldHVybiB2b2lkIDA9PT1zZSYmKHNlPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09aGUmJihoZT17fSksdm9pZCAwPT09dWUmJih1ZT0hMSksayh0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgY2UsRyxiPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtyZXR1cm4gY2U9SShJKHt9LHRoaXMuZ2V0SGVhZGVycyhvZSxzZSkpLGhlKSxHPXtoZWFkZXJzOmNlLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1zZT8idGV4dCI6Impz'@;
put 'b24iLHdpdGhDcmVkZW50aWFsczohMH0sInRleHQvcGxhaW4iPT09c2UmJihHLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksWzIsdGhpcy5odHRwQ2xpZW50LmdldCh0ZSxHKS50aGVuKGZ1bmN0aW9uKEgpe3JldHVybiAzMDI9PT1ILnN0YXR1cz9iLmdldChILmhlYWRlcnMubG9jYXRpb24s'@;
put 'b2Usc2UpOigoMCxZLnRocm93SWZFcnJvcikoSCksYi5wYXJzZVJlc3BvbnNlKEgpKX0pLmNhdGNoKGZ1bmN0aW9uKEgpe3JldHVybiBrKGIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAw'@;
put 'OmlmKEggaW5zdGFuY2VvZiBYLkpvYkV4ZWN1dGlvbkVycm9yKXRocm93IEg7cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihILGZ1bmN0aW9uKCl7cmV0dXJuIE4uZ2V0KHRlLG9lLHNlLGhlKS5jYXRjaChmdW5jdGlvbihDKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoQywiRXJyb3Igd2hp'@;
put 'bGUgZXhlY3V0aW5nIGhhbmRsZSBlcnJvciBjYWxsYmFjay4gIil9KX0sdWUpLmNhdGNoKGZ1bmN0aW9uKEMpe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShDLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9KV07Y2FzZSAxOnJldHVyblsyLGcuc2VudCgpXX19KX0pfSldfSl9KX0s'@;
put 'ZWUucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odGUsb2Usc2UsaGUsdWUpe3JldHVybiB2b2lkIDA9PT1oZSYmKGhlPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09dWUmJih1ZT17fSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgY2UsRz10aGlzO3JldHVybiBFKHRo'@;
put 'aXMsZnVuY3Rpb24oYil7cmV0dXJuIGNlPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoc2UsaGUpKSx1ZSksWzIsdGhpcy5odHRwQ2xpZW50LnBvc3QodGUsb2Use2hlYWRlcnM6Y2Usd2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbihEKXtyZXR1cm4gayhHLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIDMwMiE9PUQuc3RhdHVzP1szLDJdOls0LHRoaXMuZ2V0KEQuaGVhZGVycy5sb2NhdGlvbix2b2lkIDAsaGUsdWUpXTtjYXNlIDE6cmV0dXJuWzIsSC5zZW50KCldO2Nhc2Ug'@;
put 'MjpyZXR1cm4oMCxZLnRocm93SWZFcnJvcikoRCksWzIsdGhpcy5wYXJzZVJlc3BvbnNlKEQpXX19KX0pfSkuY2F0Y2goZnVuY3Rpb24oRCl7cmV0dXJuIGsoRyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxh'@;
put 'YmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihELGZ1bmN0aW9uKCl7cmV0dXJuIEgucG9zdCh0ZSxvZSxzZSxoZSx1ZSl9KV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSldfSl9KX0sZWV9KFkuUmVxdWVzdENsaWVudCk7Ty5TYXM5UmVxdWVzdENsaWVudD1V'@;
put 'fSwzNjAyOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oayxFKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oaixWKXtqLl9f'@;
put 'cHJvdG9fXz1WfXx8ZnVuY3Rpb24oaixWKXtmb3IodmFyIEIgaW4gVilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVixCKSYmKGpbQl09VltCXSl9KShrLEUpfSxmdW5jdGlvbihrLEUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBFJiZudWxsIT09RSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKEUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIGooKXt0aGlzLmNvbnN0cnVjdG9yPWt9eihrLEUpLGsucHJvdG90eXBlPW51bGw9PT1FP09iamVjdC5jcmVhdGUoRSk6KGoucHJvdG90eXBlPUUu'@;
put 'cHJvdG90eXBlLG5ldyBqKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBU0pTX0xPR1NfU0VQQVJBVE9SPU8uU2FzanNSZXF1ZXN0Q2xpZW50PXZvaWQgMDt2YXIgST1mdW5jdGlvbihrKXtmdW5jdGlvbiBFKCl7dmFyIGo9bnVsbCE9PWsm'@;
put 'JmsuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBqLmdldEhlYWRlcnM9ZnVuY3Rpb24oVixCKXt2YXIgWSxYPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09QiYmKFhbIkNvbnRlbnQtVHlwZSJdPUIpLFguQWNjZXB0PSJhcHBsaWNhdGlv'@;
put 'bi9qc29uIj09PUI/QjoiKi8qIixWfHx0eXBlb2Ygd2luZG93PiJ1Inx8KFY9bnVsbCE9PShZPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhY2Nlc3NUb2tlbiIpKSYmdm9pZCAwIT09WT9ZOnZvaWQgMCksViYmKFguQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KFYpKSxYfSxqfXJldHVy'@;
put 'biBLKEUsayksRS5wcm90b3R5cGUucGFyc2VSZXNwb25zZT1mdW5jdGlvbihqKXt2YXIgVixCLFksWD1qPy5oZWFkZXJzP2ouaGVhZGVycy5ldGFnOiIiLFU9e307dHJ5e1U9InN0cmluZyI9PXR5cGVvZiBqLmRhdGE/SlNPTi5wYXJzZShqLmRhdGEpOmouZGF0YX1jYXRjaHtpZihqLmRhdGEu'@;
put 'aW5jbHVkZXMoTy5TQVNKU19MT0dTX1NFUEFSQVRPUikpe3ZhciBxPWouZGF0YSxlZT1xLnNwbGl0KE8uU0FTSlNfTE9HU19TRVBBUkFUT1IpO3ZvaWQgMCE9PShWPWVlLnNwbGljZSgwLDEpWzBdKSYmKFU9Vik7dmFyIHRlPWVlLnNwbGljZSgwLGVlLmxlbmd0aC0xKSxvZT1uZXcgUmVnRXhw'@;
put 'KCIiLmNvbmNhdChPLlNBU0pTX0xPR1NfU0VQQVJBVE9SLCIkIikpLHNlPWVlWzBdO3NlJiYob2UudGVzdChxKT90ZS5sZW5ndGg+MSYmdGUucHVzaChzZSk6WT1zZSksQj10ZS5qb2luKE8uU0FTSlNfTE9HU19TRVBBUkFUT1IpfWVsc2UgVT1qLmRhdGF9dmFyIGhlPXtyZXN1bHQ6VSxsb2c6'@;
put 'Qnx8IiIsZXRhZzpYLHN0YXR1czpqLnN0YXR1c307cmV0dXJuIFkmJihoZS5wcmludE91dHB1dD1ZKSxoZX0sRX0oUig0NTg4KS5SZXF1ZXN0Q2xpZW50KTtPLlNhc2pzUmVxdWVzdENsaWVudD1JLE8uU0FTSlNfTE9HU19TRVBBUkFUT1I9IlNBU0pTX0xPR1NfU0VQQVJBVE9SXzE2M2VlMTdi'@;
put 'NmZmMjRmMDI4OTI4OTcyZDgwYTI2Nzg0In0sNDcwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDY2NjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIs'@;
put 'e3ZhbHVlOiEwfSl9LDYxNzc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1NzY2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0s'@;
put 'NDk3NTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDIxNTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ3ODI6KE0sTyk9Pnsi'@;
put 'dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0MTY4OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM4NDA6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzMTUzOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTQyODooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU4NDE6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFIsSztPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Mb2dpbk1lY2hhbmlzbT1PLlNBU2pzQ29uZmlnPXZvaWQgMCxPLlNBU2pzQ29uZmlnPWZ1bmN0aW9uKCl7dGhpcy5zZXJ2ZXJVcmw9IiIsdGhpcy5wYXRoU0FTSlM9IiIsdGhpcy5wYXRoU0FTOT0iIix0aGlzLnBhdGhTQVNWaXlhPSIi'@;
put 'LHRoaXMuYXBwTG9jPSIiLHRoaXMuc2VydmVyVHlwZT1udWxsLHRoaXMuZGVidWc9ITAsdGhpcy52ZXJib3NlPSEwLHRoaXMuY29udGV4dE5hbWU9IiIsdGhpcy51c2VDb21wdXRlQXBpPW51bGwsdGhpcy5sb2dpbk1lY2hhbmlzbT1SLkRlZmF1bHQsdGhpcy5yZXF1ZXN0SGlzdG9yeUxpbWl0'@;
put 'PTEwfSwoSz1SPU8uTG9naW5NZWNoYW5pc218fChPLkxvZ2luTWVjaGFuaXNtPXt9KSkuRGVmYXVsdD0iRGVmYXVsdCIsSy5SZWRpcmVjdGVkPSJSZWRpcmVjdGVkIn0sNjAzODooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIs'@;
put 'e3ZhbHVlOiEwfSksTy5TZXNzaW9uU3RhdGU9dm9pZCAwLChSPU8uU2Vzc2lvblN0YXRlfHwoTy5TZXNzaW9uU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsUi5SdW5uaW5nPSJydW5uaW5nIixSLlBlbmRpbmc9InBlbmRpbmciLFIuSWRsZT0iaWRsZSIsUi5VbmF2YWlsYWJsZT0i'@;
put 'dW5hdmFpbGFibGUiLFIuTm9TdGF0ZT0iIixSLkZhaWxlZD0iZmFpbGVkIixSLkVycm9yPSJlcnJvciJ9LDk0OTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NjUwOihNLE8pPT57InVzZSBzdHJpY3QiO09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTI0OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90'@;
put 'b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigi'@;
put 'ZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlw'@;
put 'ZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5BdXRob3JpemVFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhF'@;
put 'LGope3ZhciBWPUkuY2FsbCh0aGlzLEUpfHx0aGlzO3JldHVybiBWLm1lc3NhZ2U9RSxWLmNvbmZpcm1Vcmw9aixWLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoVixrLnByb3RvdHlwZSksVn1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkF1dGhvcml6ZUVy'@;
put 'cm9yPUt9LDk0NjU6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtF'@;
put 'Ll9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBl'@;
put 'PWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNlcnRpZmljYXRlRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSl7dmFyIGo9SS5jYWxsKHRoaXMsIiIuY29uY2F0KEUsIlxuUGxl'@;
put 'YXNlIHZpc2l0IHRoZSBsaW5rIGJlbG93IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoaXMgaXNzdWU6XG4tICIpLmNvbmNhdCgiaHR0cHM6Ly9naXRodWIuY29tL3Nhc2pzL2NsaS9pc3N1ZXMvMTE4MSNpc3N1ZWNvbW1lbnQtMTA5MDYzODU4NCIsIlxuIikpfHx0aGlzO3JldHVybiBq'@;
put 'Lm5hbWU9IkNlcnRpZmljYXRlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihqLGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uQ2VydGlmaWNhdGVFcnJvcj1LfSw1MjY3OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4'@;
put 'dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5o'@;
put 'YXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVj'@;
put 'dG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksTy5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqKXt2YXIgVj1JLmNhbGwodGhpcywiRXJyb3I6IEpvYiBleGVjdXRpb24gZmFpbGVkIil8fHRoaXM7cmV0dXJuIFYuam9iPUUsVi5sb2c9aixWLm5hbWU9IkNv'@;
put 'bXB1dGVKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFYsay5wcm90b3R5cGUpLFZ9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9S30sOTIzMjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'TywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5FcnJvclJlc3BvbnNlPXZvaWQgMCxPLkVycm9yUmVzcG9uc2U9ZnVuY3Rpb24oeixLLEkpe3ZhciBrPUs7aWYoIm9iamVjdCIhPXR5cGVvZiBLKXRyeXtrPUpTT04ucGFyc2UoSyl9Y2F0Y2h7ST1LLGs9IiJ9dGhpcy5lcnJvcj17bWVzc2Fn'@;
put 'ZTp6LGRldGFpbHM6ayxyYXc6SX19fSw1MTA5OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkm'@;
put 'JmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVs'@;
put 'bCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRl'@;
put 'KGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5JbnRlcm5hbFNlcnZlckVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKCl7dmFyIEU9SS5jYWxsKHRoaXMs'@;
put 'IkVycm9yOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuIil8fHRoaXM7cmV0dXJuIEUubmFtZT0iSW50ZXJuYWxTZXJ2ZXJFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5JbnRlcm5hbFNlcnZlckVycm9yPUt9LDU1'@;
put 'MTg6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9f'@;
put 'Xz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90'@;
put 'eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkludmFsaWRKc29uRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT1JLmNhbGwodGhpcywiRXJyb3I6IGludmFsaWQgSnNvbiBzdHJpbmci'@;
put 'KXx8dGhpcztyZXR1cm4gRS5uYW1lPSJJbnZhbGlkSnNvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoRSxrLnByb3RvdHlwZSksRX1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkludmFsaWRKc29uRXJyb3I9S30sMTAwNTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6'@;
put 'PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9i'@;
put 'amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBp'@;
put 'cyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8s'@;
put 'Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSW52YWxpZFNBU2pzQ3NyZkVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKCl7dmFyIEU9dGhpcztyZXR1cm4oRT1JLmNhbGwodGhpcywiQXV0aCBlcnJvcjogIi5jb25jYXQoIkludmFsaWQgQ1NSRiB0b2tlbiEiKSl8'@;
put 'fHRoaXMpLm5hbWU9IkludmFsaWRTQVNqc0NzcmZFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5JbnZhbGlkU0FTanNDc3JmRXJyb3I9S30sODUzMTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6'@;
put 'PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9i'@;
put 'amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBp'@;
put 'cyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8s'@;
put 'Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqLFYpe3ZhciBCPUkuY2FsbCh0aGlzLCJFcnJvciBDb2RlICIuY29uY2F0KEUsIjogIikuY29uY2F0KGopKXx8dGhpcztyZXR1cm4gQi5lcnJv'@;
put 'ckNvZGU9RSxCLmVycm9yTWVzc2FnZT1qLEIucmVzdWx0PVYsQi5uYW1lPSJKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEIsay5wcm90b3R5cGUpLEJ9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Kb2JFeGVjdXRpb25FcnJvcj1LfSw5MDc5OmZ1bmN0aW9uKE0s'@;
put 'Tyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9u'@;
put 'KEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5k'@;
put 'cyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Kb2JTdGF0ZVBvbGxFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFLGope3ZhciBWPUkuY2FsbCh0aGlzLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0ZSBmb3Igam9i'@;
put 'ICIuY29uY2F0KEUsIjogIikuY29uY2F0KGoubWVzc2FnZXx8aikpfHx0aGlzO3JldHVybiBWLm9yaWdpbmFsRXJyb3I9aixWLm5hbWU9IkpvYlN0YXRlUG9sbEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoVixrLnByb3RvdHlwZSksVn1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkpv'@;
put 'YlN0YXRlUG9sbEVycm9yPUt9LDMwOTY6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVu'@;
put 'Y3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09'@;
put 'ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6'@;
put 'KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkpzb25QYXJzZUFycmF5RXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT1JLmNhbGwodGhpcywiQ2Fu'@;
put 'IG5vdCBwYXJzZSBhcnJheSBvYmplY3QgdG8ganNvbi4iKXx8dGhpcztyZXR1cm4gRS5uYW1lPSJKc29uUGFyc2VBcnJheUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoRSxrLnByb3RvdHlwZSksRX1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkpzb25QYXJzZUFycmF5RXJyb3I9S30s'@;
put 'Njc0MzpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90'@;
put 'b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90'@;
put 'b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uTG9naW5SZXF1aXJlZEVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUpe3ZhciBqPXRoaXMsVj1FP0pTT04uc3RyaW5naWZ5KEUsbnVsbCwyKToi'@;
put 'WW91IG11c3QgYmUgbG9nZ2VkIGluIHRvIGFjY2VzcyB0aGlzIHJlc291cmNlIjtyZXR1cm4oaj1JLmNhbGwodGhpcywiQXV0aCBlcnJvcjogIi5jb25jYXQoVikpfHx0aGlzKS5uYW1lPSJMb2dpblJlcXVpcmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihqLGsucHJvdG90eXBlKSxq'@;
put 'fXJldHVybiB6KGssSSksa30oRXJyb3IpO08uTG9naW5SZXF1aXJlZEVycm9yPUt9LDc4NjQ6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3By'@;
put 'b3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lm'@;
put 'KCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90'@;
put 'eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLk5vU2Vzc2lvblN0YXRlRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0'@;
put 'aW9uIGsoRSxqLFYpe3ZhciBCPUkuY2FsbCh0aGlzLCJDb3VsZCBub3QgZ2V0IHNlc3Npb24gc3RhdGUuIFNlcnZlciByZXNwb25kZWQgd2l0aCAiLmNvbmNhdChFLCIgd2hpbHN0IGNoZWNraW5nIHN0YXRlOiAiKS5jb25jYXQoaikpfHx0aGlzO3JldHVybiBCLnNlcnZlclJlc3BvbnNlU3Rh'@;
put 'dHVzPUUsQi5zZXNzaW9uU3RhdGVVcmw9aixCLmxvZ1VybD1WLEIubmFtZT0iTm9TZXNzaW9uU3RhdHVzIixPYmplY3Quc2V0UHJvdG90eXBlT2YoQixrLnByb3RvdHlwZSksQn1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLk5vU2Vzc2lvblN0YXRlRXJyb3I9S30sOTU3NzpmdW5jdGlvbihN'@;
put 'LE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlv'@;
put 'bihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVu'@;
put 'ZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uTm90Rm91bmRFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFKXt2YXIgaj1JLmNhbGwodGhpcywiRXJyb3I6IFJlc291cmNlIGF0ICIuY29uY2F0KEUsIiB3YXMgbm90IGZv'@;
put 'dW5kIikpfHx0aGlzO3JldHVybiBqLnVybD1FLGoubmFtZT0iTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGosay5wcm90b3R5cGUpLGp9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Ob3RGb3VuZEVycm9yPUt9LDkyNzk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihFLGope3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihWLEIpe1YuX19wcm90b19fPUJ9fHxmdW5jdGlvbihWLEIpe2Zvcih2YXIg'@;
put 'WSBpbiBCKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLFkpJiYoVltZXT1CW1ldKX0pKEUsail9LGZ1bmN0aW9uKEUsail7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGomJm51bGwhPT1qKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJp'@;
put 'bmcoaikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gVigpe3RoaXMuY29uc3RydWN0b3I9RX16KEUsaiksRS5wcm90b3R5cGU9bnVsbD09PWo/T2JqZWN0LmNyZWF0ZShqKTooVi5wcm90b3R5cGU9ai5wcm90b3R5cGUsbmV3IFYpfSk7T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uUm9vdEZvbGRlck5vdEZvdW5kRXJyb3I9dm9pZCAwO3ZhciBJPVIoNjc5OSksaz1mdW5jdGlvbihFKXtmdW5jdGlvbiBqKFYsQixZKXt2YXIgWD10aGlzLFU9IlJvb3QgZm9sZGVyICIuY29uY2F0KFYsIiB3YXMgbm90IGZvdW5k'@;
put 'LiIpKyJcblBsZWFzZSBjaGVjayAiLmNvbmNhdChCLCIvU0FTRHJpdmUuIikrIlxuSWYgdGhlIGZvbGRlciBET0VTIGV4aXN0IHRoZW4gaXQgaXMgbGlrZWx5IGEgcGVybWlzc2lvbiBwcm9ibGVtLlxuIjtpZihZKXt2YXIgcT0oMCxJLmRlY29kZVRva2VuKShZKS5zY29wZTtVKz0iWW91ciBh'@;
put 'Y2Nlc3MgdG9rZW4gY29udGFpbnMgdGhlIGZvbGxvd2luZyBzY29wZXM6XG4iKyhxPXEubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4iKiAiK2VlfSkpLmpvaW4oIlxuIil9cmV0dXJuKFg9RS5jYWxsKHRoaXMsVSl8fHRoaXMpLm5hbWU9IlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yIixPYmplY3Qu'@;
put 'c2V0UHJvdG90eXBlT2YoWCxqLnByb3RvdHlwZSksWH1yZXR1cm4gSyhqLEUpLGp9KEVycm9yKTtPLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPWt9LDk1MjY6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXty'@;
put 'ZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYm'@;
put 'KEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUo'@;
put 'KXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBUzlBdXRoRXJyb3I9'@;
put 'dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT1JLmNhbGwodGhpcywiVGhlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlZCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzZXQgb2YgY3JlZGVudGlhbHMuIil8fHRoaXM7cmV0'@;
put 'dXJuIEUubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLGsucHJvdG90eXBlKSxFfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uU0FTOUF1dGhFcnJvcj1LfSw4ODc1OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4'@;
put 'dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5o'@;
put 'YXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVj'@;
put 'dG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksTy5XZWJvdXRSZXNwb25zZUVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUpe3ZhciBqPUkuY2FsbCh0aGlzLCJFcnJvcjogZXJyb3Igd2hpbGUgcGFyc2luZyByZXNwb25zZSBmcm9tICIuY29uY2F0KEUpKXx8dGhpcztyZXR1cm4gai51cmw9RSxq'@;
put 'Lm5hbWU9IldlYm91dFJlc3BvbnNlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihqLGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uV2Vib3V0UmVzcG9uc2VFcnJvcj1LfSwxMzk1OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhp'@;
put 'cy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJh'@;
put 'YmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaixWKX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rp'@;
put 'b24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMTI0KSxPKSxLKFIoOTQ2NSksTyks'@;
put 'SyhSKDUyNjcpLE8pLEsoUig5MjMyKSxPKSxLKFIoNTEwOSksTyksSyhSKDU1MTgpLE8pLEsoUig4NTMxKSxPKSxLKFIoOTA3OSksTyksSyhSKDMwOTYpLE8pLEsoUig2NzQzKSxPKSxLKFIoNzg2NCksTyksSyhSKDk1NzcpLE8pLEsoUig5Mjc5KSxPKSxLKFIoODg3NSksTyl9LDEyMzA6ZnVu'@;
put 'Y3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEUpO1YmJiEoImdldCJp'@;
put 'biBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwoVj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pd'@;
put 'PWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLEsoUig0NzApLE8pLEsoUig0NjY2KSxPKSxLKFIoNDk3NSksTyksSyhSKDU3NjYpLE8pLEsoUigyMTUpLE8pLEsoUig0NzgyKSxPKSxLKFIoNDE2OCksTyksSyhSKDg1MTYpLE8pLEsoUigzODQwKSxPKSxLKFIoNTg0MSksTyksSyhSKDE0MjgpLE8pLEsoUig2MDM4'@;
put 'KSxPKSxLKFIoOTQ5MyksTyksSyhSKDMxNTMpLE8pLEsoUig4NjUwKSxPKSxLKFIoNjE3NyksTyksSyhSKDEzOTUpLE8pfSwzMzAyOmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIFI9T2JqZWN0LmFzc2lnbnx8'@;
put 'ZnVuY3Rpb24oSSl7Zm9yKHZhciBrLEU9MSxqPWFyZ3VtZW50cy5sZW5ndGg7RTxqO0UrKylmb3IodmFyIFYgaW4gaz1hcmd1bWVudHNbRV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssVikmJihJW1ZdPWtbVl0pO3JldHVybiBJfSxSLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX0sej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSSxrLEUsail7cmV0dXJuIG5ldyhFfHwoRT1Qcm9taXNlKSkoZnVuY3Rpb24oVixCKXtmdW5jdGlvbiBZKHEpe3RyeXtVKGoubmV4dChxKSl9Y2F0Y2goZWUpe0IoZWUpfX1mdW5jdGlvbiBYKHEpe3RyeXtVKGoudGhyb3co'@;
put 'cSkpfWNhdGNoKGVlKXtCKGVlKX19ZnVuY3Rpb24gVShxKXt2YXIgZWU7cS5kb25lP1YocS52YWx1ZSk6KGVlPXEudmFsdWUsZWUgaW5zdGFuY2VvZiBFP2VlOm5ldyBFKGZ1bmN0aW9uKHRlKXt0ZShlZSl9KSkudGhlbihZLFgpfVUoKGo9ai5hcHBseShJLGt8fFtdKSkubmV4dCgpKX0pfSxL'@;
put 'PXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEksayl7dmFyIEUsaixWLEIsWT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZWWzBdKXRocm93IFZbMV07cmV0dXJuIFZbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gQj17bmV4dDpYKDApLHRocm93OlgoMSkscmV0dXJu'@;
put 'OlgoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihCW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEI7ZnVuY3Rpb24gWChVKXtyZXR1cm4gZnVuY3Rpb24ocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXtpZihFKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVy'@;
put 'YXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1k7KXRyeXtpZihFPTEsaiYmKFY9MiZlZVswXT9qLnJldHVybjplZVswXT9qLnRocm93fHwoKFY9ai5yZXR1cm4pJiZWLmNhbGwoaiksMCk6ai5uZXh0KSYmIShWPVYuY2FsbChqLGVlWzFdKSkuZG9uZSlyZXR1cm4gVjtzd2l0Y2go'@;
put 'aj0wLFYmJihlZT1bMiZlZVswXSxWLnZhbHVlXSksZWVbMF0pe2Nhc2UgMDpjYXNlIDE6Vj1lZTticmVhaztjYXNlIDQ6cmV0dXJuIFkubGFiZWwrKyx7dmFsdWU6ZWVbMV0sZG9uZTohMX07Y2FzZSA1OlkubGFiZWwrKyxqPWVlWzFdLGVlPVswXTtjb250aW51ZTtjYXNlIDc6ZWU9WS5vcHMu'@;
put 'cG9wKCksWS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVj0oVj1ZLnRyeXMpLmxlbmd0aD4wJiZWW1YubGVuZ3RoLTFdKXx8NiE9PWVlWzBdJiYyIT09ZWVbMF0pKXtZPTA7Y29udGludWV9aWYoMz09PWVlWzBdJiYoIVZ8fGVlWzFdPlZbMF0mJmVlWzFdPFZbM10pKXtZLmxh'@;
put 'YmVsPWVlWzFdO2JyZWFrfWlmKDY9PT1lZVswXSYmWS5sYWJlbDxWWzFdKXtZLmxhYmVsPVZbMV0sVj1lZTticmVha31pZihWJiZZLmxhYmVsPFZbMl0pe1kubGFiZWw9VlsyXSxZLm9wcy5wdXNoKGVlKTticmVha31WWzJdJiZZLm9wcy5wb3AoKSxZLnRyeXMucG9wKCk7Y29udGludWV9ZWU9'@;
put 'ay5jYWxsKEksWSl9Y2F0Y2godGUpe2VlPVs2LHRlXSxqPTB9ZmluYWxseXtFPVY9MH1pZig1JmVlWzBdKXRocm93IGVlWzFdO3JldHVybnt2YWx1ZTplZVswXT9lZVsxXTp2b2lkIDAsZG9uZTohMH19KFtVLHFdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz12b2lkIDAsTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz1mdW5jdGlvbihJLGspe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBFLGo7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihW'@;
put 'KXtyZXR1cm4gRT17fSxrPy5sZW5ndGg/KGo9ay5yZWR1Y2UoZnVuY3Rpb24oQixZKXtyZXR1cm4gQltZXT1JW1ldLEJ9LHt9KSxFPVIoe3Jlc3VsdDpJLnJlc3VsdH0saikpOkU9SS5yZXN1bHQsWzIsRV19KX0pfX0sNzkyMjpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUj10aGlz'@;
put 'JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSyxJLGssRSl7cmV0dXJuIG5ldyhrfHwoaz1Qcm9taXNlKSkoZnVuY3Rpb24oaixWKXtmdW5jdGlvbiBCKFUpe3RyeXtYKEUubmV4dChVKSl9Y2F0Y2gocSl7VihxKX19ZnVuY3Rpb24gWShVKXt0cnl7WChFLnRocm93KFUpKX1jYXRjaChxKXtW'@;
put 'KHEpfX1mdW5jdGlvbiBYKFUpe3ZhciBxO1UuZG9uZT9qKFUudmFsdWUpOihxPVUudmFsdWUscSBpbnN0YW5jZW9mIGs/cTpuZXcgayhmdW5jdGlvbihlZSl7ZWUocSl9KSkudGhlbihCLFkpfVgoKEU9RS5hcHBseShLLEl8fFtdKSkubmV4dCgpKX0pfSx6PXRoaXMmJnRoaXMuX19nZW5lcmF0'@;
put 'b3J8fGZ1bmN0aW9uKEssSSl7dmFyIGssRSxqLFYsQj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZqWzBdKXRocm93IGpbMV07cmV0dXJuIGpbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVj17bmV4dDpZKDApLHRocm93OlkoMSkscmV0dXJuOlkoMil9LCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBTeW1ib2wmJihWW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFY7ZnVuY3Rpb24gWShYKXtyZXR1cm4gZnVuY3Rpb24oVSl7cmV0dXJuIGZ1bmN0aW9uKHEpe2lmKGspdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0'@;
put 'aW5nLiIpO2Zvcig7QjspdHJ5e2lmKGs9MSxFJiYoaj0yJnFbMF0/RS5yZXR1cm46cVswXT9FLnRocm93fHwoKGo9RS5yZXR1cm4pJiZqLmNhbGwoRSksMCk6RS5uZXh0KSYmIShqPWouY2FsbChFLHFbMV0pKS5kb25lKXJldHVybiBqO3N3aXRjaChFPTAsaiYmKHE9WzImcVswXSxqLnZhbHVl'@;
put 'XSkscVswXSl7Y2FzZSAwOmNhc2UgMTpqPXE7YnJlYWs7Y2FzZSA0OnJldHVybiBCLmxhYmVsKysse3ZhbHVlOnFbMV0sZG9uZTohMX07Y2FzZSA1OkIubGFiZWwrKyxFPXFbMV0scT1bMF07Y29udGludWU7Y2FzZSA3OnE9Qi5vcHMucG9wKCksQi50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1'@;
put 'bHQ6aWYoISgoaj0oaj1CLnRyeXMpLmxlbmd0aD4wJiZqW2oubGVuZ3RoLTFdKXx8NiE9PXFbMF0mJjIhPT1xWzBdKSl7Qj0wO2NvbnRpbnVlfWlmKDM9PT1xWzBdJiYoIWp8fHFbMV0+alswXSYmcVsxXTxqWzNdKSl7Qi5sYWJlbD1xWzFdO2JyZWFrfWlmKDY9PT1xWzBdJiZCLmxhYmVsPGpb'@;
put 'MV0pe0IubGFiZWw9alsxXSxqPXE7YnJlYWt9aWYoaiYmQi5sYWJlbDxqWzJdKXtCLmxhYmVsPWpbMl0sQi5vcHMucHVzaChxKTticmVha31qWzJdJiZCLm9wcy5wb3AoKSxCLnRyeXMucG9wKCk7Y29udGludWV9cT1JLmNhbGwoSyxCKX1jYXRjaChlZSl7cT1bNixlZV0sRT0wfWZpbmFsbHl7'@;
put 'az1qPTB9aWYoNSZxWzBdKXRocm93IHFbMV07cmV0dXJue3ZhbHVlOnFbMF0/cVsxXTp2b2lkIDAsZG9uZTohMH19KFtYLFVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5hc3luY0ZvckVhY2g9dm9pZCAwLE8uYXN5bmNGb3JFYWNoPWZ1'@;
put 'bmN0aW9uKEssSSl7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGs7cmV0dXJuIHoodGhpcyxmdW5jdGlvbihFKXtzd2l0Y2goRS5sYWJlbCl7Y2FzZSAwOms9MCxFLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBrPEsubGVuZ3RoP1s0LEkoS1trXSxrLEspXTpbMyw0'@;
put 'XTtjYXNlIDI6RS5zZW50KCksRS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gaysrLFszLDFdO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX19LDM3OTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uY29tcGFyZVRpbWVz'@;
put 'dGFtcHM9dm9pZCAwLE8uY29tcGFyZVRpbWVzdGFtcHM9ZnVuY3Rpb24oUix6KXtyZXR1cm4gei50aW1lc3RhbXAuZ2V0VGltZSgpLVIudGltZXN0YW1wLmdldFRpbWUoKX19LDI0MDI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShP'@;
put 'LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzRm9ybWF0c1RhYmxlPU8uY29udmVydFRvQ1NWPXZvaWQgMDt2YXIgSz1SKDY0NjcpLEk9Uig5Nzc4KTtPLmNvbnZlcnRUb0NTVj1mdW5jdGlvbihFLGope3ZhciBWO2lmKCFFW2pdKXRocm93KDAsSS5wcmVmaXhNZXNzYWdlKSgiTm8gdGFi'@;
put 'bGUgcHJvdmlkZWQgdG8gYmUgY29udmVydGVkIHRvIENTVi4iLCJFcnJvciB3aGlsZSBjb252ZXJ0aW5nIHRvIENTVi4gIik7dmFyIEI9RVtqXTtpZighQXJyYXkuaXNBcnJheShCKSlyZXR1cm4iIjt2YXIgWSxYPW51bGw9PT0oVj1FWyIkIi5jb25jYXQoaildKXx8dm9pZCAwPT09Vj92b2lk'@;
put 'IDA6Vi5mb3JtYXRzLFU9W10scT0hMTtYJiYoVT1PYmplY3Qua2V5cyhYKS5tYXAoZnVuY3Rpb24odGUpe3JldHVybiIiLmNvbmNhdCh0ZSwiOiIpLmNvbmNhdChYW3RlXSl9KSk7dmFyIGVlPU9iamVjdC5rZXlzKEJbMF0pO3JldHVybiBlZS5mb3JFYWNoKGZ1bmN0aW9uKHRlKXtpZighWHx8'@;
put 'IU9iamVjdC5rZXlzKFgpLmluY2x1ZGVzKHRlKSl7dmFyIG9lPSExLHNlPSExO2lmKEIuZm9yRWFjaChmdW5jdGlvbihiKXtudWxsPT09Ylt0ZV18fCJudW1iZXIiPT10eXBlb2YgYlt0ZV0/b2U9ITA6InN0cmluZyI9PXR5cGVvZiBiW3RlXSYmKDAsSy5pc1NwZWNpYWxNaXNzaW5nKShiW3Rl'@;
put 'XSkmJihzZT0hMCl9KSxvZSYmc2UpVS5wdXNoKCIiLmNvbmNhdCh0ZSwiOmJlc3QuIikpLFh8fChYPXt9KSxYW3RlXT0iYmVzdC4iO2Vsc2V7dmFyIGhlPW51bGwsdWU9ITEsY2U9LTEsRz1CLm1hcChmdW5jdGlvbihiLEQpe2lmKGJbdGVdfHwiIj09PWJbdGVdKXtoZT91ZXx8KGNlPSh1ZT0o'@;
put 'IiI9PT1iW3RlXXx8InN0cmluZyI9PXR5cGVvZiBiW3RlXT8iY2hhcnMiOiJudW1iZXIiKSE9PWhlKT9EKzE6LTEpOmhlPSIiPT09Ylt0ZV18fCJzdHJpbmciPT10eXBlb2YgYlt0ZV0/ImNoYXJzIjoibnVtYmVyIjt2YXIgTj12b2lkIDA7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiW3RlXSYm'@;
put 'KE49ayhiW3RlXSkpLE59fSkuc29ydChmdW5jdGlvbihiLEQpe3JldHVybiBELWJ9KVswXTtHJiZHPjMyNzY1JiYocT0hMCksdWUmJnouZXJyb3IoIlJvdyAoIi5jb25jYXQoY2UsIiksIENvbHVtbiAoIikuY29uY2F0KHRlLCIpIGhhcyBtaXhlZCB0eXBlczogRVJST1IiKSksVS5wdXNoKCIi'@;
put 'LmNvbmNhdCh0ZSwiOiIpLmNvbmNhdCgiY2hhcnMiPT09aGU/IiRjaGFyIjoiIikuY29uY2F0KEd8fCgiY2hhcnMiPT09aGU/IjEiOiJiZXN0IiksIi4iKSl9fX0pLFgmJihVPVUuc29ydChmdW5jdGlvbih0ZSxvZSl7cmV0dXJuIGVlLmluZGV4T2YodGUucmVwbGFjZSgvOi4qLywiIikpLWVl'@;
put 'LmluZGV4T2Yob2UucmVwbGFjZSgvOi4qLywiIikpfSkpLHE/IkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIjooWT1CLm1hcChmdW5jdGlvbih0ZSl7cmV0dXJuIE9iamVjdC5rZXlzKHRlKS5tYXAoZnVuY3Rpb24ob2Usc2Upe3ZhciBoZSx1ZT10ZVtvZV07aWYoIm51bWJlciI9PXR5cGVv'@;
put 'ZiB1ZSlyZXR1cm4gdWU7aWYoaGU9bnVsbD09PXVlPyIiOnVlLFgmJiJiZXN0LiI9PT1YW29lXSl7aWYoaGUmJiEoMCxLLmlzU3BlY2lhbE1pc3NpbmcpKGhlKSl0aHJvdyBuZXcgRXJyb3IoIkEgU3BlY2lhbCBtaXNzaW5nIHZhbHVlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGNoYXJhY3RlciBm'@;
put 'cm9tICdBJyB0byAnWicsICdfJywgJy5bYS16XScsICcuXyciKTt2YXIgY2U9aGUuaW5jbHVkZXMoIi4iKT8iIjoiLiI7cmV0dXJuIiIuY29uY2F0KGNlKS5jb25jYXQoaGUudG9Mb3dlckNhc2UoKSl9cmV0dXJuIGhlPWhlLnJlcGxhY2UoLyIvZywnIiInKSwoaGU9JyInLmNvbmNhdChoZSwn'@;
put 'IicpKS5zdWJzdHJpbmcoMSxoZS5sZW5ndGgtMSkuc2VhcmNoKC8oXHR8XG58XHJ8LHxcJ3xcIikvZ20pPDAmJihoZT1oZS5zdWJzdHJpbmcoMSxoZS5sZW5ndGgtMSkpLCIiPT09KGhlPWhlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIikpJiZVW3NlXS5pbmNsdWRlcygiYmVzdCIpJiYoaGU9Ii4i'@;
put 'KSxoZX0pLmpvaW4oIiwiKX0pLFUuam9pbigiLCIpLnJlcGxhY2UoLywvZywiICIpKyJcclxuIitZLmpvaW4oIlxyXG4iKSl9LE8uaXNGb3JtYXRzVGFibGU9ZnVuY3Rpb24oRSl7cmV0dXJuL15cJC4qLy50ZXN0KEUpfTt2YXIgaz1mdW5jdGlvbihFKXtmb3IodmFyIGo9RS5sZW5ndGgsVj1F'@;
put 'Lmxlbmd0aC0xO1Y+PTA7Vi0tKXt2YXIgQj1FLmNoYXJDb2RlQXQoVik7Qj4xMjcmJkI8PTIwNDc/aisrOkI+MjA0NyYmQjw9NjU1MzUmJihqKz0yKSxCPj01NjMyMCYmQjw9NTczNDMmJlYtLX1yZXR1cm4gan19LDYxMTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jcmVhdGVBeGlvc0luc3RhbmNlPXZvaWQgMDt2YXIgej1SKDk2NjkpO08uY3JlYXRlQXhpb3NJbnN0YW5jZT1mdW5jdGlvbihLLEkpe3JldHVybiB6LmRlZmF1bHQuY3JlYXRlKHtiYXNlVVJMOkssaHR0cHNBZ2VudDpJfSl9fSw5'@;
put 'ODI1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRlbGF5PXZvaWQgMCxPLmRlbGF5PWZ1bmN0aW9uKFIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih6KXtyZXR1cm4gc2V0VGltZW91dCh6LFIpfSl9'@;
put 'fSw5OTA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihYLFUpe2Z1bmN0aW9uIHEob2Upe3RyeXt0ZShZ'@;
put 'Lm5leHQob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIGVlKG9lKXt0cnl7dGUoWS50aHJvdyhvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gdGUob2Upe3ZhciBzZTtvZS5kb25lP1gob2UudmFsdWUpOihzZT1vZS52YWx1ZSxzZSBpbnN0YW5jZW9mIEI/c2U6bmV3IEIoZnVu'@;
put 'Y3Rpb24oaGUpe2hlKHNlKX0pKS50aGVuKHEsZWUpfXRlKChZPVkuYXBwbHkoaixWfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihqLFYpe3ZhciBCLFksWCxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWFswXSl0aHJvdyBYWzFd'@;
put 'O3JldHVybiBYWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6ZWUoMCksdGhyb3c6ZWUoMSkscmV0dXJuOmVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxVO2Z1bmN0aW9uIGVlKHRl'@;
put 'KXtyZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBmdW5jdGlvbihzZSl7aWYoQil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoQj0xLFkmJihYPTImc2VbMF0/WS5yZXR1cm46c2VbMF0/WS50aHJvd3x8KChYPVku'@;
put 'cmV0dXJuKSYmWC5jYWxsKFkpLDApOlkubmV4dCkmJiEoWD1YLmNhbGwoWSxzZVsxXSkpLmRvbmUpcmV0dXJuIFg7c3dpdGNoKFk9MCxYJiYoc2U9WzImc2VbMF0sWC52YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlg9c2U7YnJlYWs7Y2FzZSA0OnJldHVybiBxLmxhYmVsKysse3ZhbHVl'@;
put 'OnNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssWT1zZVsxXSxzZT1bMF07Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFg9KFg9cS50cnlzKS5sZW5ndGg+MCYmWFtYLmxlbmd0aC0xXSl8fDYhPT1zZVswXSYm'@;
put 'MiE9PXNlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFYfHxzZVsxXT5YWzBdJiZzZVsxXTxYWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09c2VbMF0mJnEubGFiZWw8WFsxXSl7cS5sYWJlbD1YWzFdLFg9c2U7YnJlYWt9aWYoWCYmcS5sYWJlbDxYWzJdKXtxLmxh'@;
put 'YmVsPVhbMl0scS5vcHMucHVzaChzZSk7YnJlYWt9WFsyXSYmcS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPVYuY2FsbChqLHEpfWNhdGNoKGhlKXtzZT1bNixoZV0sWT0wfWZpbmFsbHl7Qj1YPTB9aWYoNSZzZVswXSl0aHJvdyBzZVsxXTtyZXR1cm57dmFsdWU6c2VbMF0/'@;
put 'c2VbMV06dm9pZCAwLGRvbmU6ITB9fShbdGUsb2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5mZXRjaExvZz1PLmZldGNoTG9nQnlDaHVua3M9dm9pZCAwO3ZhciBFPVIoOTc3OCk7Ty5mZXRjaExvZ0J5Q2h1bmtzPWZ1bmN0aW9uKGos'@;
put 'VixCLFkpe3JldHVybiBJKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LCgwLE8uZmV0Y2hMb2cpKGosVixCLDAsWSldO2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKV19fSl9KX0s'@;
put 'Ty5mZXRjaExvZz1mdW5jdGlvbihqLFYsQixZLFgpe3JldHVybiBJKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFUscSxlZSx0ZSxvZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHNlKXtzd2l0Y2goc2UubGFiZWwpe2Nhc2UgMDpVPXoubG9nZ2VyfHxLLHE9IiIsZWU9WDwx'@;
put 'ZTQ/WDoxZTQsc2UubGFiZWw9MTtjYXNlIDE6cmV0dXJuIFUuaW5mbygiRmV0Y2hpbmcgbG9ncyBmcm9tIGxpbmUgbm86ICIuY29uY2F0KFkrMSwiIHRvICIpLmNvbmNhdChZK2VlLCIgb2YgIikuY29uY2F0KFgsIi4iKSksWzQsai5nZXQoIiIuY29uY2F0KEIsIj9zdGFydD0iKS5jb25jYXQo'@;
put 'WSwiJmxpbWl0PSIpLmNvbmNhdChlZSksVikudGhlbihmdW5jdGlvbihoZSl7cmV0dXJuIGhlLnJlc3VsdH0pLmNhdGNoKGZ1bmN0aW9uKGhlKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoaGUsIkVycm9yIHdoaWxlIGdldHRpbmcgbG9nLiAiKX0pXTtjYXNlIDI6aWYoMD09PSh0ZT1zZS5z'@;
put 'ZW50KCkpLml0ZW1zLmxlbmd0aClyZXR1cm5bMyw0XTtvZT10ZS5pdGVtcy5tYXAoZnVuY3Rpb24oaGUpe3JldHVybiBoZS5saW5lfSkuam9pbigiXG4iKSxxKz1vZSxZKz1lZSxzZS5sYWJlbD0zO2Nhc2UgMzppZihZPFgpcmV0dXJuWzMsMV07c2UubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzIs'@;
put 'cV19fSl9KX19LDcxNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmZvcm1hdERhdGFGb3JSZXF1ZXN0PXZvaWQgMDt2YXIgej1SKDI0MDIpLEs9Uig0Nzk5KTtPLmZvcm1hdERhdGFGb3JSZXF1ZXN0PWZ1'@;
put 'bmN0aW9uKEkpe3ZhciBrPVtdLEU9MCxqPXt9O2Zvcih2YXIgViBpbiBJKWlmKCEoMCx6LmlzRm9ybWF0c1RhYmxlKShWKXx8IU9iamVjdC5rZXlzKEkpLmluY2x1ZGVzKFYucmVwbGFjZSgvXlwkLywiIikpKXtFKyssKDAsei5pc0Zvcm1hdHNUYWJsZSkoVil8fGsucHVzaChWKTt2YXIgQj0o'@;
put 'MCx6LmNvbnZlcnRUb0NTVikoSSxWKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Qil0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7aWYoQi5sZW5ndGg+MTZlMyl7dmFyIFk9'@;
put 'KDAsSy5zcGxpdENodW5rcykoQik7alsic2FzanMiLmNvbmNhdChFLCJkYXRhMCIpXT1ZLmxlbmd0aCxZLmZvckVhY2goZnVuY3Rpb24oWCxVKXtqWyJzYXNqcyIuY29uY2F0KEUsImRhdGEiKS5jb25jYXQoVSsxKV09WH0pfWVsc2Ugalsic2FzanMiLmNvbmNhdChFLCJkYXRhIildPUJ9cmV0'@;
put 'dXJuIGouc2FzanNfdGFibGVzPWsuam9pbigiICIpLGp9fSw4NDU4OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0Rm9ybURhdGE9dm9pZCAwO3ZhciB6PVIoNTkyOCksSz1SKDYyMzApO08uZ2V0Rm9y'@;
put 'bURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4oMCx6LmlzTm9kZSkoKT9uZXcgSzpuZXcgRm9ybURhdGF9fSwxODg0OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0VmFsaWRKc29uPXZvaWQgMDt2YXIgej1S'@;
put 'KDEzOTUpO08uZ2V0VmFsaWRKc29uPWZ1bmN0aW9uKEspe3RyeXtpZihudWxsPT1LKXRocm93IG5ldyB6LkludmFsaWRKc29uRXJyb3I7aWYoQXJyYXkuaXNBcnJheShLKSl0aHJvdyBuZXcgei5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmplY3QiPT10eXBlb2YgSz9LOiIiPT09Sz97'@;
put 'fTpKU09OLnBhcnNlKEspfWNhdGNoKEkpe3Rocm93IEkgaW5zdGFuY2VvZiB6Lkpzb25QYXJzZUFycmF5RXJyb3I/STpuZXcgei5JbnZhbGlkSnNvbkVycm9yfX19LDU5Mjg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9i'@;
put 'amVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEUpO1YmJiEoImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwoVj17ZW51bWVyYWJsZToh'@;
put 'MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJ'@;
put 'KSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUigzMzAyKSxPKSxLKFIoNzkyMiksTyksSyhSKDM3OTMpLE8pLEsoUigyNDAy'@;
put 'KSxPKSxLKFIoNjExNiksTyksSyhSKDk4MjUpLE8pLEsoUig5OTApLE8pLEsoUigxODg0KSxPKSxLKFIoNDI0MyksTyksSyhSKDI1NyksTyksSyhSKDIpLE8pLEsoUigyNjE1KSxPKSxLKFIoMjkyMCksTyksSyhSKDI0MjIpLE8pLEsoUigzMSksTyksSyhSKDY1MTUpLE8pLEsoUig2NDE2KSxP'@;
put 'KSxLKFIoMjgxMyksTyksSyhSKDk4OTYpLE8pLEsoUig0Nzk5KSxPKSxLKFIoNDUxNiksTyksSyhSKDg0NTgpLE8pfSw0MjQzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc05v'@;
put 'ZGU9dm9pZCAwLE8uaXNOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXomJm51bGwhPXoudmVyc2lvbnMmJm51bGwhPXoudmVyc2lvbnMubm9kZX19LDI1NzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'Ty5pc1JlbGF0aXZlUGF0aD12b2lkIDAsTy5pc1JlbGF0aXZlUGF0aD1mdW5jdGlvbihSKXtyZXR1cm4hIVImJiFSLnN0YXJ0c1dpdGgoIi8iKX19LDI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNVcmk9'@;
put 'dm9pZCAwLE8uaXNVcmk9ZnVuY3Rpb24oUil7cmV0dXJuL15cL2ZvbGRlcnNcL2ZvbGRlcnNcLy8udGVzdChSKX19LDI2MTU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNVcmw9dm9pZCAwLE8uaXNVcmw9'@;
put 'ZnVuY3Rpb24oUil7dHJ5e3ZhciB6PW5ldyBVUkwoUik7aWYoIVsiaHR0cDoiLCJodHRwczoiXS5pbmNsdWRlcyh6LnByb3RvY29sKSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMH19LDEyMTA6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsVix6PXRoaXMmJnRoaXMu'@;
put 'X19hd2FpdGVyfHxmdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihVLHEpe2Z1bmN0aW9uIGVlKHNlKXt0cnl7b2UoWC5uZXh0KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiB0ZShzZSl7dHJ5e29lKFgudGhyb3coc2UpKX1jYXRjaCho'@;
put 'ZSl7cShoZSl9fWZ1bmN0aW9uIG9lKHNlKXt2YXIgaGU7c2UuZG9uZT9VKHNlLnZhbHVlKTooaGU9c2UudmFsdWUsaGUgaW5zdGFuY2VvZiBZP2hlOm5ldyBZKGZ1bmN0aW9uKHVlKXt1ZShoZSl9KSkudGhlbihlZSx0ZSl9b2UoKFg9WC5hcHBseShWLEJ8fFtdKSkubmV4dCgpKX0pfSxLPXRo'@;
put 'aXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFYsQil7dmFyIFksWCxVLHEsZWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVVswXSl0aHJvdyBVWzFdO3JldHVybiBVWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHE9e25leHQ6dGUoMCksdGhyb3c6dGUoMSkscmV0dXJu'@;
put 'OnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIHRlKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe3JldHVybiBmdW5jdGlvbihoZSl7aWYoWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJH'@;
put 'ZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtlZTspdHJ5e2lmKFk9MSxYJiYoVT0yJmhlWzBdP1gucmV0dXJuOmhlWzBdP1gudGhyb3d8fCgoVT1YLnJldHVybikmJlUuY2FsbChYKSwwKTpYLm5leHQpJiYhKFU9VS5jYWxsKFgsaGVbMV0pKS5kb25lKXJldHVybiBVO3N3'@;
put 'aXRjaChYPTAsVSYmKGhlPVsyJmhlWzBdLFUudmFsdWVdKSxoZVswXSl7Y2FzZSAwOmNhc2UgMTpVPWhlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZWUubGFiZWwrKyx7dmFsdWU6aGVbMV0sZG9uZTohMX07Y2FzZSA1OmVlLmxhYmVsKyssWD1oZVsxXSxoZT1bMF07Y29udGludWU7Y2FzZSA3Omhl'@;
put 'PWVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVT0oVT1lZS50cnlzKS5sZW5ndGg+MCYmVVtVLmxlbmd0aC0xXSl8fDYhPT1oZVswXSYmMiE9PWhlWzBdKSl7ZWU9MDtjb250aW51ZX1pZigzPT09aGVbMF0mJighVXx8aGVbMV0+VVswXSYmaGVbMV08'@;
put 'VVszXSkpe2VlLmxhYmVsPWhlWzFdO2JyZWFrfWlmKDY9PT1oZVswXSYmZWUubGFiZWw8VVsxXSl7ZWUubGFiZWw9VVsxXSxVPWhlO2JyZWFrfWlmKFUmJmVlLmxhYmVsPFVbMl0pe2VlLmxhYmVsPVVbMl0sZWUub3BzLnB1c2goaGUpO2JyZWFrfVVbMl0mJmVlLm9wcy5wb3AoKSxlZS50cnlz'@;
put 'LnBvcCgpO2NvbnRpbnVlfWhlPUIuY2FsbChWLGVlKX1jYXRjaCh1ZSl7aGU9WzYsdWVdLFg9MH1maW5hbGx5e1k9VT0wfWlmKDUmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJue3ZhbHVlOmhlWzBdP2hlWzFdOnZvaWQgMCxkb25lOiEwfX0oW29lLHNlXSl9fX07T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ub3BlbkxvZ2luUHJvbXB0PXZvaWQgMCwoVj1SfHwoUj17fSkpLnN0eWxlcz0ic2FzanNBZGFwdGVyU3R5bGVzIixWLm92ZXJsYXk9InNhc2pzQWRhcHRlckxvZ2luUHJvbXB0QkciLFYuZGlhbG9nPSJzYXNqc0FkYXB0ZXJMb2dpblBy'@;
put 'b21wdCI7dmFyIEk9InNhc2pzLWFkYXB0ZXIiLGs9e3BvcFVwOiIiLmNvbmNhdChJLCJwb3BVcCIpLHBvcFVwQkc6IiIuY29uY2F0KEksInBvcFVwQkciKX07Ty5vcGVuTG9naW5Qcm9tcHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVil7cmV0dXJuIHoodm9pZCAw'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQixZLFgsVSxxLGVlLHRlLG9lO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oc2Upe3JldHVybihCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIikpLmlkPVIuc3R5bGVzLEIuaW5uZXJUZXh0PWosKFk9ZG9jdW1lbnQuY3JlYXRlRWxl'@;
put 'bWVudCgiZGl2IikpLmlkPVIub3ZlcmxheSxZLmNsYXNzTGlzdC5hZGQoay5wb3BVcEJHKSwoWD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaWQ9Ui5kaWFsb2csWC5jbGFzc0xpc3QuYWRkKGsucG9wVXApLChVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImgxIikpLmlubmVyVGV4'@;
put 'dD0iU2Vzc2lvbiBFeHBpcmVkISIsWC5hcHBlbmRDaGlsZChVKSxxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLChlZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpLmlubmVyVGV4dD0iWW91IG5lZWQgdG8gcmVsb2dpbiwgY2xpY2sgT0sgdG8gbG9naW4uIixxLmFwcGVu'@;
put 'ZENoaWxkKGVlKSxYLmFwcGVuZENoaWxkKHEpLCh0ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKSkuY2xhc3NMaXN0LmFkZCgiY2FuY2VsIiksdGUuaW5uZXJUZXh0PSJDYW5jZWwiLHRlLm9uY2xpY2s9ZnVuY3Rpb24oKXtFKCksVighMSl9LFguYXBwZW5kQ2hpbGQodGUpLChv'@;
put 'ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKSkuY2xhc3NMaXN0LmFkZCgiY29uZmlybSIpLG9lLmlubmVyVGV4dD0iT2siLG9lLm9uY2xpY2s9ZnVuY3Rpb24oKXtFKCksVighMCl9LFguYXBwZW5kQ2hpbGQob2UpLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRl'@;
put 'biIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChCKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFkpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWCksWzJdfSl9KX0pfTt2YXIgRT1mdW5jdGlvbigpe09iamVjdC52YWx1ZXMoUikuZm9yRWFjaChmdW5jdGlvbihWKXt2YXIgQixZPWRv'@;
put 'Y3VtZW50LmdldEVsZW1lbnRCeUlkKFYpO251bGw9PT0oQj1ZPy5wYXJlbnROb2RlKXx8dm9pZCAwPT09Qnx8Qi5yZW1vdmVDaGlsZChZKX0pLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImF1dG8ifSxqPSJcbi4iLmNvbmNhdChrLnBvcFVwQkcsIiAsXG4uIikuY29uY2F0KGsucG9w'@;
put 'VXAsIiB7XG4gIHotaW5kZXg6IDEwMDAwO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7'@;
put 'XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiA0MCU7XG4gIGxlZnQ6IDUwJTtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogJ1BUIFNhbnMnLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICB6'@;
put 'LWluZGV4OiA5OTk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiAzMDBweDtcbiAgdHJh'@;
put 'bnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiA+IGgxIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRp'@;
put 'bmc6IDVweDtcbiAgbWluLWhlaWdodDogNDBweDtcbiAgZm9udC1zaXplOiAxLjJlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IG5v'@;
put 'bmU7XG4gIGJvcmRlci13aWR0aDogNXB4O1xuICBib3JkZXItY29sb3I6IGJsYWNrO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLTEwOHB4KTtcbiAgbWFyZ2luOiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAg'@;
put 'Ym94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItY29s'@;
put 'b3I6ICNjY2M7XG4gIGJvcmRlci1zdHlsZTogbm9uZSBub25lIHNvbGlkIG5vbmU7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBkaXYgPiBzcGFuIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdl'@;
put 'YmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IDEwOHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItc3R5'@;
put 'bGU6IG5vbmU7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiAuY2FuY2VsIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiAuY29uZmlybSB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiID4gYnV0dG9uIHtcbiAgYm94LXNpemluZzog'@;
put 'Ym9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMTBweDtcbiAgd2lkdGg6IDUwJTtcbiAgYm9yZGVyOiAxcHggbm9uZSAjY2NjO1xuICBjb2xvcjogI2Zm'@;
put 'ZjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgaGVpZ2h0OiA1MHB4O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDEsIDEsIDEsIDAuMik7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiA+IGJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwg'@;
put 'MCwgMCwgMC4yKTtcbn1cbi4iKS5jb25jYXQoay5wb3BVcEJHLCIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtc'@;
put 'biAgb3BhY2l0eTogMC45NTtcbiAgei1pbmRleDogNTA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudCgjMDM3OGNkLCAjMDEyMDM2KTtcbn1cbiIpfSwyOTIwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KSxPLm5lZWRzUmV0cnk9dm9pZCAwLE8ubmVlZHNSZXRyeT1mdW5jdGlvbihSKXtyZXR1cm4hIVImJihSLmluY2x1ZGVzKCciZXJyb3JDb2RlIjo0MDMnKSYmUi5pbmNsdWRlcygiX2NzcmYiKSYmUi5pbmNsdWRlcygiWC1DU1JGLVRPS0VOIil8fFIuaW5jbHVkZXMoJyJzdGF0dXMi'@;
put 'OjQwMycpJiZSLmluY2x1ZGVzKCciZXJyb3IiOiJGb3JiaWRkZW4iJyl8fFIuaW5jbHVkZXMoJyJzdGF0dXMiOjQ0OScpJiZSLmluY2x1ZGVzKCJBdXRoZW50aWNhdGlvbiBzdWNjZXNzLCByZXRyeSBvcmlnaW5hbCByZXF1ZXN0IikpfX0sMjQyMjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5wYXJzZUdlbmVyYXRlZENvZGU9dm9pZCAwLE8ucGFyc2VHZW5lcmF0ZWRDb2RlPWZ1bmN0aW9uKFIpe3JldHVybiBSLnNwbGl0KCJcbiIpLmZpbHRlcihmdW5jdGlvbih6KXtyZXR1cm4gei50cmltKCkuc3Rh'@;
put 'cnRzV2l0aCgiTVBSSU5UIil9KS5qb2luKCJcclxuIil9fSwzMTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VTYXNWaXlhTG9nPXZvaWQgMCxPLnBhcnNlU2FzVml5YUxv'@;
put 'Zz1mdW5jdGlvbihLKXt2YXIgSTt0cnl7ST1LLml0ZW1zP0suaXRlbXMubWFwKGZ1bmN0aW9uKGspe3JldHVybiBrLmxpbmV9KS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KEspfWNhdGNoKGspe3ouZXJyb3IoIkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cg'@;
put 'cmVzcG9uc2UiLGspLEk9S31yZXR1cm4gSX19LDY1MTU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VTb3VyY2VDb2RlPXZvaWQgMCxPLnBhcnNlU291cmNlQ29kZT1mdW5jdGlvbihSKXtyZXR1cm4g'@;
put 'Ui5zcGxpdCgiXG4iKS5maWx0ZXIoZnVuY3Rpb24oeil7cmV0dXJuIHoudHJpbSgpLnN1YnN0cmluZygwLDEwKS50cmltU3RhcnQoKS5tYXRjaCgvXlxkLyl9KS5qb2luKCJcclxuIil9fSw2NDE2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0'@;
put 'ZXJ8fGZ1bmN0aW9uKGssRSxqLFYpe3JldHVybiBuZXcoanx8KGo9UHJvbWlzZSkpKGZ1bmN0aW9uKEIsWSl7ZnVuY3Rpb24gWChlZSl7dHJ5e3EoVi5uZXh0KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBVKGVlKXt0cnl7cShWLnRocm93KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1m'@;
put 'dW5jdGlvbiBxKGVlKXt2YXIgdGU7ZWUuZG9uZT9CKGVlLnZhbHVlKToodGU9ZWUudmFsdWUsdGUgaW5zdGFuY2VvZiBqP3RlOm5ldyBqKGZ1bmN0aW9uKG9lKXtvZSh0ZSl9KSkudGhlbihYLFUpfXEoKFY9Vi5hcHBseShrLEV8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5l'@;
put 'cmF0b3J8fGZ1bmN0aW9uKGssRSl7dmFyIGosVixCLFksWD17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZCWzBdKXRocm93IEJbMV07cmV0dXJuIEJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWT17bmV4dDpVKDApLHRocm93OlUoMSkscmV0dXJuOlUoMil9LCJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBTeW1ib2wmJihZW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFk7ZnVuY3Rpb24gVShxKXtyZXR1cm4gZnVuY3Rpb24oZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7aWYoail0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBl'@;
put 'eGVjdXRpbmcuIik7Zm9yKDtYOyl0cnl7aWYoaj0xLFYmJihCPTImdGVbMF0/Vi5yZXR1cm46dGVbMF0/Vi50aHJvd3x8KChCPVYucmV0dXJuKSYmQi5jYWxsKFYpLDApOlYubmV4dCkmJiEoQj1CLmNhbGwoVix0ZVsxXSkpLmRvbmUpcmV0dXJuIEI7c3dpdGNoKFY9MCxCJiYodGU9WzImdGVb'@;
put 'MF0sQi52YWx1ZV0pLHRlWzBdKXtjYXNlIDA6Y2FzZSAxOkI9dGU7YnJlYWs7Y2FzZSA0OnJldHVybiBYLmxhYmVsKysse3ZhbHVlOnRlWzFdLGRvbmU6ITF9O2Nhc2UgNTpYLmxhYmVsKyssVj10ZVsxXSx0ZT1bMF07Y29udGludWU7Y2FzZSA3OnRlPVgub3BzLnBvcCgpLFgudHJ5cy5wb3Ao'@;
put 'KTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEI9KEI9WC50cnlzKS5sZW5ndGg+MCYmQltCLmxlbmd0aC0xXSl8fDYhPT10ZVswXSYmMiE9PXRlWzBdKSl7WD0wO2NvbnRpbnVlfWlmKDM9PT10ZVswXSYmKCFCfHx0ZVsxXT5CWzBdJiZ0ZVsxXTxCWzNdKSl7WC5sYWJlbD10ZVsxXTticmVha31p'@;
put 'Zig2PT09dGVbMF0mJlgubGFiZWw8QlsxXSl7WC5sYWJlbD1CWzFdLEI9dGU7YnJlYWt9aWYoQiYmWC5sYWJlbDxCWzJdKXtYLmxhYmVsPUJbMl0sWC5vcHMucHVzaCh0ZSk7YnJlYWt9QlsyXSYmWC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVlfXRlPUUuY2FsbChrLFgpfWNhdGNo'@;
put 'KG9lKXt0ZT1bNixvZV0sVj0wfWZpbmFsbHl7aj1CPTB9aWYoNSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm57dmFsdWU6dGVbMF0/dGVbMV06dm9pZCAwLGRvbmU6ITB9fShbcSxlZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhcnNl'@;
put 'U2FzVml5YURlYnVnUmVzcG9uc2U9dm9pZCAwO3ZhciBJPVIoNTkyOCk7Ty5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBWLEI7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihZKXtpZihW'@;
put 'PWsuc3BsaXQoLzxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7IGhlaWdodDogNTAwcHgiIHNyYz0ifDxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7IGhlaWdodDogNTAwcHg7IGJhY2tncm91bmQtY29sb3I6Q2FudmFzOyIgc3JjPS8pWzFdLCEoQj1WP1Yuc3BsaXQoLyI+PFwvaWZyYW1lPnw+'@;
put 'PFwvaWZyYW1lPi8pWzBdOm51bGwpKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgd2Vib3V0IGZpbGUgVVJMLiIpO3JldHVyblsyLEUuZ2V0KGorQix2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKGZ1bmN0aW9uKFgpe3JldHVybigwLEkuZ2V0VmFsaWRKc29uKShYLnJlc3VsdCl9'@;
put 'KV19KX0pfX0sMjgxMzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VXZWJvdXRSZXNwb25zZT12b2lkIDA7dmFyIEs9UigxMzk1KTtPLnBhcnNlV2Vib3V0UmVzcG9uc2U9'@;
put 'ZnVuY3Rpb24oSSxrKXt2YXIgRT0iIjtpZihJLmluY2x1ZGVzKCI+PndlYm91dEJFR0lOPDwiKSl0cnl7RT1JLnNwbGl0KCI+PndlYm91dEJFR0lOPDwiKVsxXS5zcGxpdCgiPj53ZWJvdXRFTkQ8PCIpWzBdfWNhdGNoKGope2lmKGspdGhyb3cgbmV3IEsuV2Vib3V0UmVzcG9uc2VFcnJvcihr'@;
put 'KTtFPSIiLHouZXJyb3Ioail9cmV0dXJuIEV9fSwxMTcwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PXZvaWQgMDt2YXIgUj1bIkxvZyBPZmYiXTtPLmV4dHJhY3RV'@;
put 'c2VyTG9uZ05hbWVTYXM5PWZ1bmN0aW9uKHope3ZhciBLPXo/Lm1hdGNoKC8idGl0bGUiOlxzPyIuKj8iLyksST1LPy5bMF0uc3BsaXQoIjoiKVsxXS50cmltKCksaz1JPy5pbmRleE9mKCIgIik7cmV0dXJuIEk/KFIubWFwKGZ1bmN0aW9uKEUpe3ZhciBqPUk/LmluZGV4T2YoRSl8fC0xO2o+'@;
put 'LTEmJihrPWorRS5sZW5ndGgpfSksSS5zbGljZShrLC0xKS50cmltKCkpOiJ1bmtub3duIn19LDk4OTY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uc2VyaWFsaXplPXZvaWQgMCxPLnNlcmlhbGl6ZT1mdW5j'@;
put 'dGlvbihSKXt2YXIgej1bXTtmb3IodmFyIEsgaW4gUilpZihSLmhhc093blByb3BlcnR5KEspKWlmKFJbS11pbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgST0wLGs9UltLXS5sZW5ndGg7STxrO0krKyl6LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KEspKyI9IitlbmNvZGVVUklDb21wb25lbnQo'@;
put 'UltLXVtJXSkpO2Vsc2Ugei5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChLKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KFJbS10pKTtyZXR1cm4gei5qb2luKCImIil9fSw0Nzk5OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KSxPLnNwbGl0Q2h1bmtzPXZvaWQgMCxPLnNwbGl0Q2h1bmtzPWZ1bmN0aW9uKFIpe2Zvcih2YXIgej0xNmUzLEs9TWF0aC5jZWlsKFIubGVuZ3RoL3opLEk9bmV3IEFycmF5KEspLGs9MCxFPTA7azxLOysrayxFKz16KUlba109Ui5zdWJzdHIoRSx6KTtyZXR1cm4gSX19LDQ1MTY6KE0s'@;
put 'Tyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udmFsaWRhdGVJbnB1dD1PLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPU8uTU9SRV9JTkZPPXZvaWQgMCxPLk1PUkVfSU5GTz0iRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6'@;
put 'Ly9zYXNqcy5pby9zYXNqcy1hZGFwdGVyLyNyZXF1ZXN0LXJlc3BvbnNlIixPLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPSJQYXJhbWV0ZXIgZGF0YSBjb250YWlucyBpbnZhbGlkIHRhYmxlIHN0cnVjdHVyZS4gIi5jb25jYXQoTy5NT1JFX0lORk8pLE8udmFsaWRhdGVJbnB1dD1mdW5jdGlv'@;
put 'bih6KXtpZihudWxsPT09eilyZXR1cm57c3RhdHVzOiEwLG1zZzoiIn07aWYoIm9iamVjdCIhPT1SKHopKXJldHVybntzdGF0dXM6ITEsbXNnOk8uSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkV9O3ZhciBLPWZ1bmN0aW9uKFgpe3JldHVybiBYLm1hdGNoKC9eXCQuKi8pJiZPYmplY3Qua2V5cyh6'@;
put 'KS5pbmNsdWRlcyhYLnJlcGxhY2UoL15cJC8sIiIpKX07Zm9yKHZhciBJIGluIHope2lmKCFJLm1hdGNoKC9eW2EtekEtWl9dLykmJiFLKEkpKXJldHVybntzdGF0dXM6ITEsbXNnOiJGaXJzdCBsZXR0ZXIgb2YgdGFibGUgc2hvdWxkIGJlIGFscGhhYmV0IG9yIHVuZGVyc2NvcmUuIn07aWYo'@;
put 'IUkubWF0Y2goL15bYS16QS1aX11bYS16QS1aMC05X10qJC8pJiYhSyhJKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgbmFtZSBzaG91bGQgYmUgYWxwaGFudW1lcmljLiJ9O2lmKEkubGVuZ3RoPjMyKXJldHVybntzdGF0dXM6ITEsbXNnOiJNYXhpbXVtIGxlbmd0aCBmb3IgdGFibGUg'@;
put 'bmFtZSBjb3VsZCBiZSAzMiBjaGFyYWN0ZXJzLiJ9O2lmKCJBcnJheSIhPT1SKHpbSV0pJiYhSyhJKSlyZXR1cm57c3RhdHVzOiExLG1zZzpPLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFfTtmb3IodmFyIGs9MCxFPXpbSV07azxFLmxlbmd0aDtrKyspe3ZhciBqPUVba107aWYoIm9iamVjdCIh'@;
put 'PT1SKGopKXJldHVybntzdGF0dXM6ITEsbXNnOiJUYWJsZSAiLmNvbmNhdChJLCIgY29udGFpbnMgaW52YWxpZCBzdHJ1Y3R1cmUuICIpLmNvbmNhdChPLk1PUkVfSU5GTyl9O2Zvcih2YXIgVj0wLEI9T2JqZWN0LmtleXMoaik7VjxCLmxlbmd0aDtWKyspe3ZhciBZPUJbVl07aWYodm9pZCAw'@;
put 'PT09altZXSlyZXR1cm57c3RhdHVzOiExLG1zZzoiQSByb3cgaW4gdGFibGUgIi5jb25jYXQoSSwiIGNvbnRhaW5zIGludmFsaWQgdmFsdWUuIENhbid0IGFzc2lnbiB1bmRlZmluZWQgdG8gIikuY29uY2F0KFksIi4iKX19fX1yZXR1cm57c3RhdHVzOiEwLG1zZzoiIn19O3ZhciBSPWZ1bmN0'@;
put 'aW9uKHope3JldHVybiBBcnJheS5pc0FycmF5KHopPyJBcnJheSI6dHlwZW9mIHp9fSw4OTgxOihNLE8pPT57InVzZSBzdHJpY3QiO08uZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKFIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ueil7aWYoImZ1bmN0aW9uIiE9dHlw'@;
put 'ZW9mIHpbei5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChLLEkpPT57Ui5jYWxsKHRoaXMsLi4ueiwoayxFKT0+bnVsbCE9az9JKGspOksoRSkpfSk7Ui5hcHBseSh0aGlzLHopfSwibmFtZSIse3ZhbHVlOlIubmFtZX0pfSxPLmZyb21Qcm9taXNlPWZ1bmN0aW9uKFIpe3JldHVybiBP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ueil7Y29uc3QgSz16W3oubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLKXJldHVybiBSLmFwcGx5KHRoaXMseik7Ui5hcHBseSh0aGlzLHouc2xpY2UoMCwtMSkpLnRoZW4oST0+SyhudWxsLEkpLEspfSwibmFtZSIse3Zh'@;
put 'bHVlOlIubmFtZX0pfX0sNDU2NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNzQxOCksSz1SKDcxMjkpLEk9L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxrPS9bXG5cclx0XS9nLEU9L15b'@;
put 'QS1aYS16XVtBLVphLXowLTkrLS5dKjpcL1wvLyxqPS86XGQrJC8sVj0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xcL10rKT8oW1xTXHNdKikvaSxCPS9eW2EtekEtWl06LztmdW5jdGlvbiBZKHNlKXtyZXR1cm4oc2V8fCIiKS50b1N0cmluZygpLnJlcGxhY2UoSSwiIil9dmFy'@;
put 'IFg9W1siIyIsImhhc2giXSxbIj8iLCJxdWVyeSJdLGZ1bmN0aW9uKHNlLGhlKXtyZXR1cm4gZWUoaGUucHJvdG9jb2wpP3NlLnJlcGxhY2UoL1xcL2csIi8iKTpzZX0sWyIvIiwicGF0aG5hbWUiXSxbIkAiLCJhdXRoIiwxXSxbTmFOLCJob3N0Iix2b2lkIDAsMSwxXSxbLzooXGQqKSQvLCJw'@;
put 'b3J0Iix2b2lkIDAsMV0sW05hTiwiaG9zdG5hbWUiLHZvaWQgMCwxLDFdXSxVPXtoYXNoOjEscXVlcnk6MX07ZnVuY3Rpb24gcShzZSl7dmFyIGhlLHVlPSh0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09Ui5nP1IuZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkubG9jYXRpb258'@;
put 'fHt9LGNlPXt9LEc9dHlwZW9mKHNlPXNlfHx1ZSk7aWYoImJsb2I6Ij09PXNlLnByb3RvY29sKWNlPW5ldyBvZSh1bmVzY2FwZShzZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1HKWZvcihoZSBpbiBjZT1uZXcgb2Uoc2Use30pLFUpZGVsZXRlIGNlW2hlXTtlbHNlIGlmKCJv'@;
put 'YmplY3QiPT09Ryl7Zm9yKGhlIGluIHNlKWhlIGluIFV8fChjZVtoZV09c2VbaGVdKTt2b2lkIDA9PT1jZS5zbGFzaGVzJiYoY2Uuc2xhc2hlcz1FLnRlc3Qoc2UuaHJlZikpfXJldHVybiBjZX1mdW5jdGlvbiBlZShzZSl7cmV0dXJuImZpbGU6Ij09PXNlfHwiZnRwOiI9PT1zZXx8Imh0dHA6'@;
put 'Ij09PXNlfHwiaHR0cHM6Ij09PXNlfHwid3M6Ij09PXNlfHwid3NzOiI9PT1zZX1mdW5jdGlvbiB0ZShzZSxoZSl7c2U9KHNlPVkoc2UpKS5yZXBsYWNlKGssIiIpLGhlPWhlfHx7fTt2YXIgdWUsY2U9Vi5leGVjKHNlKSxHPWNlWzFdP2NlWzFdLnRvTG93ZXJDYXNlKCk6IiIsYj0hIWNlWzJd'@;
put 'LEQ9ISFjZVszXSxIPTA7cmV0dXJuIGI/RD8odWU9Y2VbMl0rY2VbM10rY2VbNF0sSD1jZVsyXS5sZW5ndGgrY2VbM10ubGVuZ3RoKToodWU9Y2VbMl0rY2VbNF0sSD1jZVsyXS5sZW5ndGgpOkQ/KHVlPWNlWzNdK2NlWzRdLEg9Y2VbM10ubGVuZ3RoKTp1ZT1jZVs0XSwiZmlsZToiPT09Rz9I'@;
put 'Pj0yJiYodWU9dWUuc2xpY2UoMikpOmVlKEcpP3VlPWNlWzRdOkc/YiYmKHVlPXVlLnNsaWNlKDIpKTpIPj0yJiZlZShoZS5wcm90b2NvbCkmJih1ZT1jZVs0XSkse3Byb3RvY29sOkcsc2xhc2hlczpifHxlZShHKSxzbGFzaGVzQ291bnQ6SCxyZXN0OnVlfX1mdW5jdGlvbiBvZShzZSxoZSx1'@;
put 'ZSl7aWYoc2U9KHNlPVkoc2UpKS5yZXBsYWNlKGssIiIpLCEodGhpcyBpbnN0YW5jZW9mIG9lKSlyZXR1cm4gbmV3IG9lKHNlLGhlLHVlKTt2YXIgY2UsRyxiLEQsSCxOLGc9WC5zbGljZSgpLEM9dHlwZW9mIGhlLFM9dGhpcyx2PTA7Zm9yKCJvYmplY3QiIT09QyYmInN0cmluZyIhPT1DJiYo'@;
put 'dWU9aGUsaGU9bnVsbCksdWUmJiJmdW5jdGlvbiIhPXR5cGVvZiB1ZSYmKHVlPUsucGFyc2UpLGNlPSEoRz10ZShzZXx8IiIsaGU9cShoZSkpKS5wcm90b2NvbCYmIUcuc2xhc2hlcyxTLnNsYXNoZXM9Ry5zbGFzaGVzfHxjZSYmaGUuc2xhc2hlcyxTLnByb3RvY29sPUcucHJvdG9jb2x8fGhl'@;
put 'LnByb3RvY29sfHwiIixzZT1HLnJlc3QsKCJmaWxlOiI9PT1HLnByb3RvY29sJiYoMiE9PUcuc2xhc2hlc0NvdW50fHxCLnRlc3Qoc2UpKXx8IUcuc2xhc2hlcyYmKEcucHJvdG9jb2x8fEcuc2xhc2hlc0NvdW50PDJ8fCFlZShTLnByb3RvY29sKSkpJiYoZ1szXT1bLyguKikvLCJwYXRobmFt'@;
put 'ZSJdKTt2PGcubGVuZ3RoO3YrKykiZnVuY3Rpb24iIT10eXBlb2YoRD1nW3ZdKT8oTj1EWzFdLChiPURbMF0pIT1iP1NbTl09c2U6InN0cmluZyI9PXR5cGVvZiBiP34oSD0iQCI9PT1iP3NlLmxhc3RJbmRleE9mKGIpOnNlLmluZGV4T2YoYikpJiYoIm51bWJlciI9PXR5cGVvZiBEWzJdPyhT'@;
put 'W05dPXNlLnNsaWNlKDAsSCksc2U9c2Uuc2xpY2UoSCtEWzJdKSk6KFNbTl09c2Uuc2xpY2UoSCksc2U9c2Uuc2xpY2UoMCxIKSkpOihIPWIuZXhlYyhzZSkpJiYoU1tOXT1IWzFdLHNlPXNlLnNsaWNlKDAsSC5pbmRleCkpLFNbTl09U1tOXXx8Y2UmJkRbM10mJmhlW05dfHwiIixEWzRdJiYo'@;
put 'U1tOXT1TW05dLnRvTG93ZXJDYXNlKCkpKTpzZT1EKHNlLFMpO3VlJiYoUy5xdWVyeT11ZShTLnF1ZXJ5KSksY2UmJmhlLnNsYXNoZXMmJiIvIiE9PVMucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT1TLnBhdGhuYW1lfHwiIiE9PWhlLnBhdGhuYW1lKSYmKFMucGF0aG5hbWU9ZnVuY3Rpb24o'@;
put 'cCx3KXtpZigiIj09PXApcmV0dXJuIHc7Zm9yKHZhciBKPSh3fHwiLyIpLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuY29uY2F0KHAuc3BsaXQoIi8iKSksbmU9Si5sZW5ndGgsZGU9SltuZS0xXSxmZT0hMSx4ZT0wO25lLS07KSIuIj09PUpbbmVdP0ouc3BsaWNlKG5lLDEpOiIuLiI9PT1KW25l'@;
put 'XT8oSi5zcGxpY2UobmUsMSkseGUrKyk6eGUmJigwPT09bmUmJihmZT0hMCksSi5zcGxpY2UobmUsMSkseGUtLSk7cmV0dXJuIGZlJiZKLnVuc2hpZnQoIiIpLCIuIiE9PWRlJiYiLi4iIT09ZGV8fEoucHVzaCgiIiksSi5qb2luKCIvIil9KFMucGF0aG5hbWUsaGUucGF0aG5hbWUpKSwiLyIh'@;
put 'PT1TLnBhdGhuYW1lLmNoYXJBdCgwKSYmZWUoUy5wcm90b2NvbCkmJihTLnBhdGhuYW1lPSIvIitTLnBhdGhuYW1lKSx6KFMucG9ydCxTLnByb3RvY29sKXx8KFMuaG9zdD1TLmhvc3RuYW1lLFMucG9ydD0iIiksUy51c2VybmFtZT1TLnBhc3N3b3JkPSIiLFMuYXV0aCYmKH4oSD1TLmF1dGgu'@;
put 'aW5kZXhPZigiOiIpKT8oUy51c2VybmFtZT1TLmF1dGguc2xpY2UoMCxIKSxTLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoUy51c2VybmFtZSkpLFMucGFzc3dvcmQ9Uy5hdXRoLnNsaWNlKEgrMSksUy5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQo'@;
put 'ZGVjb2RlVVJJQ29tcG9uZW50KFMucGFzc3dvcmQpKSk6Uy51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KFMuYXV0aCkpLFMuYXV0aD1TLnBhc3N3b3JkP1MudXNlcm5hbWUrIjoiK1MucGFzc3dvcmQ6Uy51c2VybmFtZSksUy5vcmlnaW49ImZpbGU6IiE9'@;
put 'PVMucHJvdG9jb2wmJmVlKFMucHJvdG9jb2wpJiZTLmhvc3Q/Uy5wcm90b2NvbCsiLy8iK1MuaG9zdDoibnVsbCIsUy5ocmVmPVMudG9TdHJpbmcoKX1vZS5wcm90b3R5cGU9e3NldDpmdW5jdGlvbihzZSxoZSx1ZSl7dmFyIGNlPXRoaXM7c3dpdGNoKHNlKXtjYXNlInF1ZXJ5Ijoic3RyaW5n'@;
put 'Ij09dHlwZW9mIGhlJiZoZS5sZW5ndGgmJihoZT0odWV8fEsucGFyc2UpKGhlKSksY2Vbc2VdPWhlO2JyZWFrO2Nhc2UicG9ydCI6Y2Vbc2VdPWhlLHooaGUsY2UucHJvdG9jb2wpP2hlJiYoY2UuaG9zdD1jZS5ob3N0bmFtZSsiOiIraGUpOihjZS5ob3N0PWNlLmhvc3RuYW1lLGNlW3NlXT0i'@;
put 'Iik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6Y2Vbc2VdPWhlLGNlLnBvcnQmJihoZSs9IjoiK2NlLnBvcnQpLGNlLmhvc3Q9aGU7YnJlYWs7Y2FzZSJob3N0IjpjZVtzZV09aGUsai50ZXN0KGhlKT8oaGU9aGUuc3BsaXQoIjoiKSxjZS5wb3J0PWhlLnBvcCgpLGNlLmhvc3RuYW1lPWhlLmpvaW4o'@;
put 'IjoiKSk6KGNlLmhvc3RuYW1lPWhlLGNlLnBvcnQ9IiIpO2JyZWFrO2Nhc2UicHJvdG9jb2wiOmNlLnByb3RvY29sPWhlLnRvTG93ZXJDYXNlKCksY2Uuc2xhc2hlcz0hdWU7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2FzZSJoYXNoIjppZihoZSl7dmFyIEc9InBhdGhuYW1lIj09PXNlPyIvIjoi'@;
put 'IyI7Y2Vbc2VdPWhlLmNoYXJBdCgwKSE9PUc/RytoZTpoZX1lbHNlIGNlW3NlXT1oZTticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjpjZVtzZV09ZW5jb2RlVVJJQ29tcG9uZW50KGhlKTticmVhaztjYXNlImF1dGgiOnZhciBiPWhlLmluZGV4T2YoIjoiKTt+Yj8oY2UudXNl'@;
put 'cm5hbWU9aGUuc2xpY2UoMCxiKSxjZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGNlLnVzZXJuYW1lKSksY2UucGFzc3dvcmQ9aGUuc2xpY2UoYisxKSxjZS5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGNlLnBh'@;
put 'c3N3b3JkKSkpOmNlLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoaGUpKX1mb3IodmFyIEQ9MDtEPFgubGVuZ3RoO0QrKyl7dmFyIEg9WFtEXTtIWzRdJiYoY2VbSFsxXV09Y2VbSFsxXV0udG9Mb3dlckNhc2UoKSl9cmV0dXJuIGNlLmF1dGg9Y2UucGFz'@;
put 'c3dvcmQ/Y2UudXNlcm5hbWUrIjoiK2NlLnBhc3N3b3JkOmNlLnVzZXJuYW1lLGNlLm9yaWdpbj0iZmlsZToiIT09Y2UucHJvdG9jb2wmJmVlKGNlLnByb3RvY29sKSYmY2UuaG9zdD9jZS5wcm90b2NvbCsiLy8iK2NlLmhvc3Q6Im51bGwiLGNlLmhyZWY9Y2UudG9TdHJpbmcoKSxjZX0sdG9T'@;
put 'dHJpbmc6ZnVuY3Rpb24oc2Upe3NlJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2V8fChzZT1LLnN0cmluZ2lmeSk7dmFyIGhlLHVlPXRoaXMsY2U9dWUuaG9zdCxHPXVlLnByb3RvY29sO0cmJiI6IiE9PUcuY2hhckF0KEcubGVuZ3RoLTEpJiYoRys9IjoiKTt2YXIgYj1HKyh1ZS5wcm90b2NvbCYm'@;
put 'dWUuc2xhc2hlc3x8ZWUodWUucHJvdG9jb2wpPyIvLyI6IiIpO3JldHVybiB1ZS51c2VybmFtZT8oYis9dWUudXNlcm5hbWUsdWUucGFzc3dvcmQmJihiKz0iOiIrdWUucGFzc3dvcmQpLGIrPSJAIik6dWUucGFzc3dvcmQ/KGIrPSI6Iit1ZS5wYXNzd29yZCxiKz0iQCIpOiJmaWxlOiIhPT11'@;
put 'ZS5wcm90b2NvbCYmZWUodWUucHJvdG9jb2wpJiYhY2UmJiIvIiE9PXVlLnBhdGhuYW1lJiYoYis9IkAiKSwoIjoiPT09Y2VbY2UubGVuZ3RoLTFdfHxqLnRlc3QodWUuaG9zdG5hbWUpJiYhdWUucG9ydCkmJihjZSs9IjoiKSxiKz1jZSt1ZS5wYXRobmFtZSwoaGU9Im9iamVjdCI9PXR5cGVv'@;
put 'ZiB1ZS5xdWVyeT9zZSh1ZS5xdWVyeSk6dWUucXVlcnkpJiYoYis9Ij8iIT09aGUuY2hhckF0KDApPyI/IitoZTpoZSksdWUuaGFzaCYmKGIrPXVlLmhhc2gpLGJ9fSxvZS5leHRyYWN0UHJvdG9jb2w9dGUsb2UubG9jYXRpb249cSxvZS50cmltTGVmdD1ZLG9lLnFzPUssTS5leHBvcnRzPW9l'@;
put 'fSw0OTI3OihNLE8sUik9Pnt2YXIgej1SKDUxMDgpO2Z1bmN0aW9uIEsoSSl7dHJ5e2lmKCFSLmcubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciBrPVIuZy5sb2NhbFN0b3JhZ2VbSV07cmV0dXJuIG51bGwhPWsmJiJ0cnVlIj09PVN0cmluZyhrKS50b0xvd2VyQ2Fz'@;
put 'ZSgpfU0uZXhwb3J0cz1mdW5jdGlvbihJLGspe2lmKEsoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gSTt2YXIgRT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighRSl7aWYoSygidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihrKTtLKCJ0cmFjZURlcHJlY2F0aW9uIik/ei50cmFj'@;
put 'ZShrKTp6Lndhcm4oayksRT0hMH1yZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sMzg0Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIE8mJiJvYmplY3QiPT10eXBlb2YgTyYmImZ1bmN0aW9uIj09dHlwZW9mIE8uY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIE8uZmls'@;
put 'bCYmImZ1bmN0aW9uIj09dHlwZW9mIE8ucmVhZFVJbnQ4fX0sNTk1NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjU4NCksSz1SKDg2NjIpLEk9Uig2NDMwKSxrPVIoNTY5Mik7ZnVuY3Rpb24gRShKKXtyZXR1cm4gSi5jYWxsLmJpbmQoSil9dmFyIGo9dHlwZW9mIEJpZ0ludDwi'@;
put 'dSIsVj10eXBlb2YgU3ltYm9sPCJ1IixCPUUoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyksWT1FKE51bWJlci5wcm90b3R5cGUudmFsdWVPZiksWD1FKFN0cmluZy5wcm90b3R5cGUudmFsdWVPZiksVT1FKEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YpO2lmKGopdmFyIHE9RShCaWdJbnQu'@;
put 'cHJvdG90eXBlLnZhbHVlT2YpO2lmKFYpdmFyIGVlPUUoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtmdW5jdGlvbiB0ZShKLG5lKXtpZigib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7dHJ5e3JldHVybiBuZShKKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gb2UoSil7cmV0dXJu'@;
put 'IltvYmplY3QgTWFwXSI9PT1CKEopfWZ1bmN0aW9uIHNlKEope3JldHVybiJbb2JqZWN0IFNldF0iPT09QihKKX1mdW5jdGlvbiBoZShKKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1CKEopfWZ1bmN0aW9uIHVlKEope3JldHVybiJbb2JqZWN0IFdlYWtTZXRdIj09PUIoSil9ZnVuY3Rp'@;
put 'b24gY2UoSil7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PUIoSil9ZnVuY3Rpb24gRyhKKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmKGNlLndvcmtpbmc/Y2UoSik6SiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKX1mdW5jdGlvbiBiKEope3JldHVybiJbb2JqZWN0IERh'@;
put 'dGFWaWV3XSI9PT1CKEopfWZ1bmN0aW9uIEQoSil7cmV0dXJuIHR5cGVvZiBEYXRhVmlldzwidSImJihiLndvcmtpbmc/YihKKTpKIGluc3RhbmNlb2YgRGF0YVZpZXcpfU8uaXNBcmd1bWVudHNPYmplY3Q9eixPLmlzR2VuZXJhdG9yRnVuY3Rpb249SyxPLmlzVHlwZWRBcnJheT1rLE8uaXNQ'@;
put 'cm9taXNlPWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJkogaW5zdGFuY2VvZiBQcm9taXNlfHxudWxsIT09SiYmIm9iamVjdCI9PXR5cGVvZiBKJiYiZnVuY3Rpb24iPT10eXBlb2YgSi50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgSi5jYXRjaH0sTy5pc0FycmF5QnVm'@;
put 'ZmVyVmlldz1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhKKTprKEopfHxEKEopfSxPLmlzVWludDhBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iVWludDhBcnJheSI9PT1JKEopfSxPLmlzVWlu'@;
put 'dDhDbGFtcGVkQXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIlVpbnQ4Q2xhbXBlZEFycmF5Ij09PUkoSil9LE8uaXNVaW50MTZBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iVWludDE2QXJyYXkiPT09SShKKX0sTy5pc1VpbnQzMkFycmF5PWZ1bmN0aW9uKEope3JldHVybiJVaW50MzJBcnJheSI9'@;
put 'PT1JKEopfSxPLmlzSW50OEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJJbnQ4QXJyYXkiPT09SShKKX0sTy5pc0ludDE2QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkludDE2QXJyYXkiPT09SShKKX0sTy5pc0ludDMyQXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkludDMyQXJyYXkiPT09SShK'@;
put 'KX0sTy5pc0Zsb2F0MzJBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iRmxvYXQzMkFycmF5Ij09PUkoSil9LE8uaXNGbG9hdDY0QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkZsb2F0NjRBcnJheSI9PT1JKEopfSxPLmlzQmlnSW50NjRBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iQmlnSW50NjRB'@;
put 'cnJheSI9PT1JKEopfSxPLmlzQmlnVWludDY0QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkJpZ1VpbnQ2NEFycmF5Ij09PUkoSil9LG9lLndvcmtpbmc9dHlwZW9mIE1hcDwidSImJm9lKG5ldyBNYXApLE8uaXNNYXA9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBNYXA8InUiJiYob2Uud29y'@;
put 'a2luZz9vZShKKTpKIGluc3RhbmNlb2YgTWFwKX0sc2Uud29ya2luZz10eXBlb2YgU2V0PCJ1IiYmc2UobmV3IFNldCksTy5pc1NldD1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIFNldDwidSImJihzZS53b3JraW5nP3NlKEopOkogaW5zdGFuY2VvZiBTZXQpfSxoZS53b3JraW5nPXR5cGVv'@;
put 'ZiBXZWFrTWFwPCJ1IiYmaGUobmV3IFdlYWtNYXApLE8uaXNXZWFrTWFwPWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgV2Vha01hcDwidSImJihoZS53b3JraW5nP2hlKEopOkogaW5zdGFuY2VvZiBXZWFrTWFwKX0sdWUud29ya2luZz10eXBlb2YgV2Vha1NldDwidSImJnVlKG5ldyBXZWFr'@;
put 'U2V0KSxPLmlzV2Vha1NldD1mdW5jdGlvbihKKXtyZXR1cm4gdWUoSil9LGNlLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmY2UobmV3IEFycmF5QnVmZmVyKSxPLmlzQXJyYXlCdWZmZXI9RyxiLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIERhdGFWaWV3'@;
put 'PCJ1IiYmYihuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLE8uaXNEYXRhVmlldz1EO3ZhciBIPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/U2hhcmVkQXJyYXlCdWZmZXI6dm9pZCAwO2Z1bmN0aW9uIE4oSil7cmV0dXJuIltvYmplY3QgU2hhcmVkQXJyYXlCdWZm'@;
put 'ZXJdIj09PUIoSil9ZnVuY3Rpb24gZyhKKXtyZXR1cm4gdm9pZCAwIT09SCYmKHZvaWQgMD09PU4ud29ya2luZyYmKE4ud29ya2luZz1OKG5ldyBIKSksTi53b3JraW5nP04oSik6SiBpbnN0YW5jZW9mIEgpfWZ1bmN0aW9uIEMoSil7cmV0dXJuIHRlKEosWSl9ZnVuY3Rpb24gUyhKKXtyZXR1'@;
put 'cm4gdGUoSixYKX1mdW5jdGlvbiB2KEope3JldHVybiB0ZShKLFUpfWZ1bmN0aW9uIHAoSil7cmV0dXJuIGomJnRlKEoscSl9ZnVuY3Rpb24gdyhKKXtyZXR1cm4gViYmdGUoSixlZSl9Ty5pc1NoYXJlZEFycmF5QnVmZmVyPWcsTy5pc0FzeW5jRnVuY3Rpb249ZnVuY3Rpb24oSil7cmV0dXJu'@;
put 'IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT09QihKKX0sTy5pc01hcEl0ZXJhdG9yPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09QihKKX0sTy5pc1NldEl0ZXJhdG9yPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IFNldCBJdGVyYXRvcl0iPT09QihKKX0s'@;
put 'Ty5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbihKKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIj09PUIoSil9LE8uaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVsZV0iPT09QihKKX0sTy5pc051bWJlck9i'@;
put 'amVjdD1DLE8uaXNTdHJpbmdPYmplY3Q9UyxPLmlzQm9vbGVhbk9iamVjdD12LE8uaXNCaWdJbnRPYmplY3Q9cCxPLmlzU3ltYm9sT2JqZWN0PXcsTy5pc0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uKEope3JldHVybiBDKEopfHxTKEopfHx2KEopfHxwKEopfHx3KEopfSxPLmlzQW55QXJyYXlC'@;
put 'dWZmZXI9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmKEcoSil8fGcoSikpfSxbImlzUHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLEose2VudW1l'@;
put 'cmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoSisiIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdXNlcmxhbmQiKX19KX0pfSw5NTM5OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlv'@;
put 'bihKKXtmb3IodmFyIG5lPU9iamVjdC5rZXlzKEopLGRlPXt9LGZlPTA7ZmU8bmUubGVuZ3RoO2ZlKyspZGVbbmVbZmVdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEosbmVbZmVdKTtyZXR1cm4gZGV9LGs9LyVbc2RqJV0vZztPLmZvcm1hdD1mdW5jdGlvbihKKXtpZighdWUo'@;
put 'Sikpe2Zvcih2YXIgbmU9W10sZGU9MDtkZTxhcmd1bWVudHMubGVuZ3RoO2RlKyspbmUucHVzaChCKGFyZ3VtZW50c1tkZV0pKTtyZXR1cm4gbmUuam9pbigiICIpfWRlPTE7Zm9yKHZhciBmZT1hcmd1bWVudHMseGU9ZmUubGVuZ3RoLExlPVN0cmluZyhKKS5yZXBsYWNlKGssZnVuY3Rpb24o'@;
put 'T2Upe2lmKCIlJSI9PT1PZSlyZXR1cm4iJSI7aWYoZGU+PXhlKXJldHVybiBPZTtzd2l0Y2goT2Upe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcoZmVbZGUrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoZmVbZGUrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZmVbZGUr'@;
put 'K10pfWNhdGNoe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBPZX19KSxGZT1mZVtkZV07ZGU8eGU7RmU9ZmVbKytkZV0pc2UoRmUpfHwhYihGZSk/TGUrPSIgIitGZTpMZSs9IiAiK0IoRmUpO3JldHVybiBMZX0sTy5kZXByZWNhdGU9ZnVuY3Rpb24oSixuZSl7aWYodm9pZCAw'@;
put 'IT09eiYmITA9PT16Lm5vRGVwcmVjYXRpb24pcmV0dXJuIEo7aWYodm9pZCAwPT09eilyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTy5kZXByZWNhdGUoSixuZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgZGU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWRlKXtpZih6LnRocm93RGVw'@;
put 'cmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG5lKTt6LnRyYWNlRGVwcmVjYXRpb24/Sy50cmFjZShuZSk6Sy5lcnJvcihuZSksZGU9ITB9cmV0dXJuIEouYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIEU9e30saj0vXiQvO2lmKHouZW52Lk5PREVfREVCVUcpe3ZhciBWPXouZW52Lk5PREVf'@;
put 'REVCVUc7Vj1WLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrPy5dL2csIlxcJCYiKS5yZXBsYWNlKC9cKi9nLCIuKiIpLnJlcGxhY2UoLywvZywiJHxeIikudG9VcHBlckNhc2UoKSxqPW5ldyBSZWdFeHAoIl4iK1YrIiQiLCJpIil9ZnVuY3Rpb24gQihKLG5lKXt2YXIgZGU9e3NlZW46W10sc3R5'@;
put 'bGl6ZTpYfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKGRlLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKGRlLmNvbG9ycz1hcmd1bWVudHNbM10pLG9lKG5lKT9kZS5zaG93SGlkZGVuPW5lOm5lJiZPLl9leHRlbmQoZGUsbmUpLGNlKGRlLnNob3dIaWRk'@;
put 'ZW4pJiYoZGUuc2hvd0hpZGRlbj0hMSksY2UoZGUuZGVwdGgpJiYoZGUuZGVwdGg9MiksY2UoZGUuY29sb3JzKSYmKGRlLmNvbG9ycz0hMSksY2UoZGUuY3VzdG9tSW5zcGVjdCkmJihkZS5jdXN0b21JbnNwZWN0PSEwKSxkZS5jb2xvcnMmJihkZS5zdHlsaXplPVkpLFUoZGUsSixkZS5kZXB0'@;
put 'aCl9ZnVuY3Rpb24gWShKLG5lKXt2YXIgZGU9Qi5zdHlsZXNbbmVdO3JldHVybiBkZT8iXHgxYlsiK0IuY29sb3JzW2RlXVswXSsibSIrSisiXHgxYlsiK0IuY29sb3JzW2RlXVsxXSsibSI6Sn1mdW5jdGlvbiBYKEosbmUpe3JldHVybiBKfWZ1bmN0aW9uIFUoSixuZSxkZSl7aWYoSi5jdXN0'@;
put 'b21JbnNwZWN0JiZuZSYmTihuZS5pbnNwZWN0KSYmbmUuaW5zcGVjdCE9PU8uaW5zcGVjdCYmKCFuZS5jb25zdHJ1Y3Rvcnx8bmUuY29uc3RydWN0b3IucHJvdG90eXBlIT09bmUpKXt2YXIgZmU9bmUuaW5zcGVjdChkZSxKKTtyZXR1cm4gdWUoZmUpfHwoZmU9VShKLGZlLGRlKSksZmV9dmFy'@;
put 'IHhlPWZ1bmN0aW9uKEplLGx0KXtpZihjZShsdCkpcmV0dXJuIEplLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKHVlKGx0KSl7dmFyIFBlPSInIitKU09OLnN0cmluZ2lmeShsdCkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9c'@;
put 'XCIvZywnIicpKyInIjtyZXR1cm4gSmUuc3R5bGl6ZShQZSwic3RyaW5nIil9cmV0dXJuIGhlKGx0KT9KZS5zdHlsaXplKCIiK2x0LCJudW1iZXIiKTpvZShsdCk/SmUuc3R5bGl6ZSgiIitsdCwiYm9vbGVhbiIpOnNlKGx0KT9KZS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oSixu'@;
put 'ZSk7aWYoeGUpcmV0dXJuIHhlO3ZhciBsdCxMZT1PYmplY3Qua2V5cyhuZSksRmU9KGx0PXt9LExlLmZvckVhY2goZnVuY3Rpb24oUGUsYmUpe2x0W1BlXT0hMH0pLGx0KTtpZihKLnNob3dIaWRkZW4mJihMZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuZSkpLEgobmUpJiYoTGUuaW5k'@;
put 'ZXhPZigibWVzc2FnZSIpPj0wfHxMZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gcShuZSk7aWYoMD09PUxlLmxlbmd0aCl7aWYoTihuZSkpcmV0dXJuIEouc3R5bGl6ZSgiW0Z1bmN0aW9uIisobmUubmFtZT8iOiAiK25lLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKEco'@;
put 'bmUpKXJldHVybiBKLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwicmVnZXhwIik7aWYoRChuZSkpcmV0dXJuIEouc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwiZGF0ZSIpO2lmKEgobmUpKXJldHVybiBxKG5lKX12YXIgamUsV2U9'@;
put 'IiIsS2U9ITEsWWU9WyJ7IiwifSJdO3JldHVybiB0ZShuZSkmJihLZT0hMCxZZT1bIlsiLCJdIl0pLE4obmUpJiYoV2U9IiBbRnVuY3Rpb24iKyhuZS5uYW1lPyI6ICIrbmUubmFtZToiIikrIl0iKSxHKG5lKSYmKFdlPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmUpKSxE'@;
put 'KG5lKSYmKFdlPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG5lKSksSChuZSkmJihXZT0iICIrcShuZSkpLDAhPT1MZS5sZW5ndGh8fEtlJiYwIT1uZS5sZW5ndGg/ZGU8MD9HKG5lKT9KLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwicmVn'@;
put 'ZXhwIik6Si5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooSi5zZWVuLnB1c2gobmUpLGplPUtlP2Z1bmN0aW9uKEplLGx0LFBlLGJlLEFlKXtmb3IodmFyIFRlPVtdLHFlPTAsWGU9bHQubGVuZ3RoO3FlPFhlOysrcWUpdihsdCxTdHJpbmcocWUpKT9UZS5wdXNoKGVlKEplLGx0LFBl'@;
put 'LGJlLFN0cmluZyhxZSksITApKTpUZS5wdXNoKCIiKTtyZXR1cm4gQWUuZm9yRWFjaChmdW5jdGlvbihVZSl7VWUubWF0Y2goL15cZCskLyl8fFRlLnB1c2goZWUoSmUsbHQsUGUsYmUsVWUsITApKX0pLFRlfShKLG5lLGRlLEZlLExlKTpMZS5tYXAoZnVuY3Rpb24oSmUpe3JldHVybiBlZShK'@;
put 'LG5lLGRlLEZlLEplLEtlKX0pLEouc2Vlbi5wb3AoKSxmdW5jdGlvbihKZSxsdCxQZSl7cmV0dXJuIEplLnJlZHVjZShmdW5jdGlvbihBZSxUZSl7cmV0dXJuIFRlLmluZGV4T2YoIlxuIiksQWUrVGUucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApPjYwP1BlWzBd'@;
put 'KygiIj09PWx0PyIiOmx0KyJcbiAiKSsiICIrSmUuam9pbigiLFxuICAiKSsiICIrUGVbMV06UGVbMF0rbHQrIiAiK0plLmpvaW4oIiwgIikrIiAiK1BlWzFdfShqZSxXZSxZZSkpOlllWzBdK1dlK1llWzFdfWZ1bmN0aW9uIHEoSil7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmlu'@;
put 'Zy5jYWxsKEopKyJdIn1mdW5jdGlvbiBlZShKLG5lLGRlLGZlLHhlLExlKXt2YXIgRmUsT2UsamU7aWYoKGplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmUseGUpfHx7dmFsdWU6bmVbeGVdfSkuZ2V0P09lPUouc3R5bGl6ZShqZS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltH'@;
put 'ZXR0ZXJdIiwic3BlY2lhbCIpOmplLnNldCYmKE9lPUouc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLHYoZmUseGUpfHwoRmU9IlsiK3hlKyJdIiksT2V8fChKLnNlZW4uaW5kZXhPZihqZS52YWx1ZSk8MD8oT2U9c2UoZGUpP1UoSixqZS52YWx1ZSxudWxsKTpVKEosamUudmFsdWUs'@;
put 'ZGUtMSkpLmluZGV4T2YoIlxuIik+LTEmJihPZT1MZT9PZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oV2Upe3JldHVybiIgICIrV2V9KS5qb2luKCJcbiIpLnNsaWNlKDIpOiJcbiIrT2Uuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKFdlKXtyZXR1cm4iICAgIitXZX0pLmpvaW4oIlxuIikp'@;
put 'Ok9lPUouc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksY2UoRmUpKXtpZihMZSYmeGUubWF0Y2goL15cZCskLykpcmV0dXJuIE9lOyhGZT1KU09OLnN0cmluZ2lmeSgiIit4ZSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KEZlPUZlLnNsaWNlKDEsLTEp'@;
put 'LEZlPUouc3R5bGl6ZShGZSwibmFtZSIpKTooRmU9RmUucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLEZlPUouc3R5bGl6ZShGZSwic3RyaW5nIikpfXJldHVybiBGZSsiOiAiK09lfWZ1bmN0aW9uIHRlKEope3JldHVybiBB'@;
put 'cnJheS5pc0FycmF5KEopfWZ1bmN0aW9uIG9lKEope3JldHVybiJib29sZWFuIj09dHlwZW9mIEp9ZnVuY3Rpb24gc2UoSil7cmV0dXJuIG51bGw9PT1KfWZ1bmN0aW9uIGhlKEope3JldHVybiJudW1iZXIiPT10eXBlb2YgSn1mdW5jdGlvbiB1ZShKKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9m'@;
put 'IEp9ZnVuY3Rpb24gY2UoSil7cmV0dXJuIHZvaWQgMD09PUp9ZnVuY3Rpb24gRyhKKXtyZXR1cm4gYihKKSYmIltvYmplY3QgUmVnRXhwXSI9PT1nKEopfWZ1bmN0aW9uIGIoSil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBKJiZudWxsIT09Sn1mdW5jdGlvbiBEKEope3JldHVybiBiKEopJiYi'@;
put 'W29iamVjdCBEYXRlXSI9PT1nKEopfWZ1bmN0aW9uIEgoSil7cmV0dXJuIGIoSikmJigiW29iamVjdCBFcnJvcl0iPT09ZyhKKXx8SiBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBOKEope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBKfWZ1bmN0aW9uIGcoSil7cmV0dXJuIE9iamVjdC5w'@;
put 'cm90b3R5cGUudG9TdHJpbmcuY2FsbChKKX1mdW5jdGlvbiBDKEope3JldHVybiBKPDEwPyIwIitKLnRvU3RyaW5nKDEwKTpKLnRvU3RyaW5nKDEwKX1PLmRlYnVnbG9nPWZ1bmN0aW9uKEope2lmKEo9Si50b1VwcGVyQ2FzZSgpLCFFW0pdKWlmKGoudGVzdChKKSl7dmFyIG5lPXoucGlkO0Vb'@;
put 'Sl09ZnVuY3Rpb24oKXt2YXIgZGU9Ty5mb3JtYXQuYXBwbHkoTyxhcmd1bWVudHMpO0suZXJyb3IoIiVzICVkOiAlcyIsSixuZSxkZSl9fWVsc2UgRVtKXT1mdW5jdGlvbigpe307cmV0dXJuIEVbSl19LE8uaW5zcGVjdD1CLEIuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVu'@;
put 'ZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxCLnN0eWxlcz17'@;
put 'c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LE8udHlwZXM9Uig1OTU1KSxPLmlzQXJyYXk9dGUsTy5pc0Jvb2xlYW49b2Us'@;
put 'Ty5pc051bGw9c2UsTy5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihKKXtyZXR1cm4gbnVsbD09Sn0sTy5pc051bWJlcj1oZSxPLmlzU3RyaW5nPXVlLE8uaXNTeW1ib2w9ZnVuY3Rpb24oSil7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBKfSxPLmlzVW5kZWZpbmVkPWNlLE8uaXNSZWdFeHA9'@;
put 'RyxPLnR5cGVzLmlzUmVnRXhwPUcsTy5pc09iamVjdD1iLE8uaXNEYXRlPUQsTy50eXBlcy5pc0RhdGU9RCxPLmlzRXJyb3I9SCxPLnR5cGVzLmlzTmF0aXZlRXJyb3I9SCxPLmlzRnVuY3Rpb249TixPLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKEope3JldHVybiBudWxsPT09Snx8ImJvb2xlYW4i'@;
put 'PT10eXBlb2YgSnx8Im51bWJlciI9PXR5cGVvZiBKfHwic3RyaW5nIj09dHlwZW9mIEp8fCJzeW1ib2wiPT10eXBlb2YgSnx8dm9pZCAwPT09Sn0sTy5pc0J1ZmZlcj1SKDM4NCk7dmFyIFM9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJP'@;
put 'Y3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiB2KEosbmUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSixuZSl9Ty5sb2c9ZnVuY3Rpb24oKXt2YXIgSixuZTtLLmxvZygiJXMgLSAlcyIsKG5lPVtDKChKPW5ldyBEYXRlKS5nZXRIb3VycygpKSxDKEouZ2V0'@;
put 'TWludXRlcygpKSxDKEouZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpLFtKLmdldERhdGUoKSxTW0ouZ2V0TW9udGgoKV0sbmVdLmpvaW4oIiAiKSksTy5mb3JtYXQuYXBwbHkoTyxhcmd1bWVudHMpKX0sTy5pbmhlcml0cz1SKDU3MTcpLE8uX2V4dGVuZD1mdW5jdGlvbihKLG5lKXtpZighbmV8'@;
put 'fCFiKG5lKSlyZXR1cm4gSjtmb3IodmFyIGRlPU9iamVjdC5rZXlzKG5lKSxmZT1kZS5sZW5ndGg7ZmUtLTspSltkZVtmZV1dPW5lW2RlW2ZlXV07cmV0dXJuIEp9O3ZhciBwPXR5cGVvZiBTeW1ib2w8InUiP1N5bWJvbCgidXRpbC5wcm9taXNpZnkuY3VzdG9tIik6dm9pZCAwO2Z1bmN0aW9u'@;
put 'IHcoSixuZSl7aWYoIUope3ZhciBkZT1uZXcgRXJyb3IoIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZSIpO2RlLnJlYXNvbj1KLEo9ZGV9cmV0dXJuIG5lKEopfU8ucHJvbWlzaWZ5PWZ1bmN0aW9uKEope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBKKXRocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKHAmJkpbcF0pe3ZhciBuZTtpZigiZnVuY3Rpb24iIT10eXBlb2YobmU9SltwXSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ1dGlsLnByb21pc2lmeS5jdXN0b20iIGFyZ3Vt'@;
put 'ZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobmUscCx7dmFsdWU6bmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxuZX1mdW5jdGlvbiBuZSgpe2Zvcih2YXIgZGUsZmUseGU9bmV3IFByb21pc2Uo'@;
put 'ZnVuY3Rpb24oT2UsamUpe2RlPU9lLGZlPWplfSksTGU9W10sRmU9MDtGZTxhcmd1bWVudHMubGVuZ3RoO0ZlKyspTGUucHVzaChhcmd1bWVudHNbRmVdKTtMZS5wdXNoKGZ1bmN0aW9uKE9lLGplKXtPZT9mZShPZSk6ZGUoamUpfSk7dHJ5e0ouYXBwbHkodGhpcyxMZSl9Y2F0Y2goT2Upe2Zl'@;
put 'KE9lKX1yZXR1cm4geGV9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZSxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSikpLHAmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSxwLHt2YWx1ZTpuZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0aWVzKG5lLEkoSikpfSxPLnByb21pc2lmeS5jdXN0b209cCxPLmNhbGxiYWNraWZ5PWZ1bmN0aW9uKEope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBKKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlv'@;
put 'bicpO2Z1bmN0aW9uIG5lKCl7Zm9yKHZhciBkZT1bXSxmZT0wO2ZlPGFyZ3VtZW50cy5sZW5ndGg7ZmUrKylkZS5wdXNoKGFyZ3VtZW50c1tmZV0pO3ZhciB4ZT1kZS5wb3AoKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGxhc3QgYXJndW1lbnQg'@;
put 'bXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uIik7dmFyIExlPXRoaXMsRmU9ZnVuY3Rpb24oKXtyZXR1cm4geGUuYXBwbHkoTGUsYXJndW1lbnRzKX07Si5hcHBseSh0aGlzLGRlKS50aGVuKGZ1bmN0aW9uKE9lKXt6Lm5leHRUaWNrKEZlLmJpbmQobnVsbCxudWxsLE9lKSl9LGZ1bmN0aW9uKE9l'@;
put 'KXt6Lm5leHRUaWNrKHcuYmluZChudWxsLE9lLEZlKSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG5lLE9iamVjdC5nZXRQcm90b3R5cGVPZihKKSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobmUsSShKKSksbmV9fSw0ODE6KE0sTyxSKT0+eyFmdW5jdGlvbih6KXsidXNlIHN0'@;
put 'cmljdCI7ei5leHBvcnRzLmlzX3VyaT1JLHouZXhwb3J0cy5pc19odHRwX3VyaT1rLHouZXhwb3J0cy5pc19odHRwc191cmk9RSx6LmV4cG9ydHMuaXNfd2ViX3VyaT1qLHouZXhwb3J0cy5pc1VyaT1JLHouZXhwb3J0cy5pc0h0dHBVcmk9ayx6LmV4cG9ydHMuaXNIdHRwc1VyaT1FLHouZXhw'@;
put 'b3J0cy5pc1dlYlVyaT1qO3ZhciBLPWZ1bmN0aW9uKFYpe3JldHVybiBWLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBJKFYpe2lmKFYmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1c'@;
put 'QFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoVikmJiEvJVteMC05YS1mXS9pLnRlc3QoVikmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChWKSl7dmFyIEIsWSxYLFUscSxlZT0iIix0ZT0iIjtpZihlZT0oQj1LKFYpKVsxXSxZPUJbMl0sWD1CWzNd'@;
put 'LFU9Qls0XSxxPUJbNV0sZWUmJmVlLmxlbmd0aCYmWC5sZW5ndGg+PTApe2lmKFkmJlkubGVuZ3RoKXtpZigwIT09WC5sZW5ndGgmJiEvXlwvLy50ZXN0KFgpKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChYKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wtXC5dKiQvLnRlc3QoZWUu'@;
put 'dG9Mb3dlckNhc2UoKSkpcmV0dXJuIHRlKz1lZSsiOiIsWSYmWS5sZW5ndGgmJih0ZSs9Ii8vIitZKSx0ZSs9WCxVJiZVLmxlbmd0aCYmKHRlKz0iPyIrVSkscSYmcS5sZW5ndGgmJih0ZSs9IiMiK3EpLHRlfX19ZnVuY3Rpb24gayhWLEIpe2lmKEkoVikpe3ZhciBZLFgsVSxxLGVlPSIiLHRl'@;
put 'PSIiLG9lPSIiLHNlPSIiO2lmKGVlPShZPUsoVikpWzFdLHRlPVlbMl0sWD1ZWzNdLFU9WVs0XSxxPVlbNV0sZWUpe2lmKEIpe2lmKCJodHRwcyIhPWVlLnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYoImh0dHAiIT1lZS50b0xvd2VyQ2FzZSgpKXJldHVybjtpZih0ZSlyZXR1cm4vOihc'@;
put 'ZCspJC8udGVzdCh0ZSkmJihvZT10ZS5tYXRjaCgvOihcZCspJC8pWzBdLHRlPXRlLnJlcGxhY2UoLzpcZCskLywiIikpLHNlKz1lZSsiOiIsc2UrPSIvLyIrdGUsb2UmJihzZSs9b2UpLHNlKz1YLFUmJlUubGVuZ3RoJiYoc2UrPSI/IitVKSxxJiZxLmxlbmd0aCYmKHNlKz0iIyIrcSksc2V9'@;
put 'fX1mdW5jdGlvbiBFKFYpe3JldHVybiBrKFYsITApfWZ1bmN0aW9uIGooVil7cmV0dXJuIGsoVil8fEUoVil9fShNPVIubm1kKE0pKX0sNjQzMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDAyOSksSz1SKDMwODMpLEk9UigxOTI0KSxrPVIoNzI5NiksRT1JKCJPYmplY3QucHJv'@;
put 'dG90eXBlLnRvU3RyaW5nIiksaj1SKDY0MTApKCksVj10eXBlb2YgZ2xvYmFsVGhpcz4idSI/Ui5nOmdsb2JhbFRoaXMsQj1LKCksWT1JKCJTdHJpbmcucHJvdG90eXBlLnNsaWNlIiksWD17fSxVPU9iamVjdC5nZXRQcm90b3R5cGVPZjtqJiZrJiZVJiZ6KEIsZnVuY3Rpb24oZWUpe2lmKCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBWW2VlXSl7dmFyIHRlPW5ldyBWW2VlXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gdGUpe3ZhciBvZT1VKHRlKSxzZT1rKG9lLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIXNlKXt2YXIgaGU9VShvZSk7c2U9ayhoZSxTeW1ib2wudG9TdHJpbmdUYWcpfVhbZWVd'@;
put 'PXNlLmdldH19fSk7dmFyIHE9Uig1NjkyKTtNLmV4cG9ydHM9ZnVuY3Rpb24oZWUpe3JldHVybiEhcShlZSkmJihqJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWU/KHRlPWVlLG9lPSExLHooWCxmdW5jdGlvbihzZSxoZSl7aWYoIW9lKXRyeXt2YXIgdWU9c2UuY2FsbCh0ZSk7dWU9PT1oZSYm'@;
put 'KG9lPXVlKX1jYXRjaHt9fSksb2UpOlkoRShlZSksOCwtMSkpO3ZhciB0ZSxvZX19LDI0Nzk6TT0+e00uZXhwb3J0cz1mdW5jdGlvbiBPKFIseil7aWYoUiYmeilyZXR1cm4gTyhSKSh6KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgUil0aHJvdyBuZXcgVHlwZUVycm9yKCJuZWVkIHdyYXBwZXIg'@;
put 'ZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmtleXMoUikuZm9yRWFjaChmdW5jdGlvbihJKXtLW0ldPVJbSV19KSxLO2Z1bmN0aW9uIEsoKXtmb3IodmFyIEk9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGs9MDtrPEkubGVuZ3RoO2srKylJW2tdPWFyZ3VtZW50c1trXTt2YXIgRT1SLmFw'@;
put 'cGx5KHRoaXMsSSksaj1JW0kubGVuZ3RoLTFdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFJiZFIT09aiYmT2JqZWN0LmtleXMoaikuZm9yRWFjaChmdW5jdGlvbihWKXtFW1ZdPWpbVl19KSxFfX19LDk1MDooKT0+e30sNjYwMTooKT0+e30sOTIxNDooKT0+e30sODYyMzooKT0+e30sNzc0'@;
put 'ODooKT0+e30sNTU2ODooKT0+e30sMjUzNTooKT0+e30sMzcxMDooKT0+e30sNTQ0MzooKT0+e30sNDEyOTooKT0+e30sNjYxOTooKT0+e30sNzEwODooKT0+e30sMjM2MTooKT0+e30sNDYxNjooKT0+e30sNzIxNzooKT0+e30sODM3MzooKT0+e30sMzA4MzooTSxPLFIpPT57InVzZSBzdHJp'@;
put 'Y3QiO3ZhciB6PVsiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJJbnQ4QXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBl'@;
put 'ZEFycmF5Il0sSz10eXBlb2YgZ2xvYmFsVGhpcz4idSI/Ui5nOmdsb2JhbFRoaXM7TS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBJPVtdLGs9MDtrPHoubGVuZ3RoO2srKykiZnVuY3Rpb24iPT10eXBlb2YgS1t6W2tdXSYmKElbSS5sZW5ndGhdPXpba10pO3JldHVybiBJfX0sNDk0NjpN'@;
put 'PT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1v'@;
put 'ZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0'@;
put 'eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2Nr'@;
put 'In0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIi'@;
put 'OiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtl'@;
put 'eSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwi'@;
put 'aXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2Ijox'@;
put 'NiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1v'@;
put 'ZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJP'@;
put 'RkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBl'@;
put 'Ijoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFt'@;
put 'In0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTky'@;
put 'LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn19Jyl9LDUyMDc6TT0+eyJ1c2Ugc3Ry'@;
put 'aWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwi'@;
put 'aGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0s'@;
put 'IlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAw'@;
put 'ZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoi'@;
put 'cnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwi'@;
put 'UlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2gi'@;
put 'OiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6'@;
put 'IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2ln'@;
put 'biI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoi'@;
put 'ZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6'@;
put 'ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6'@;
put 'InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRp'@;
put 'b24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMw'@;
put 'ODpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4zLjEzMi4wLjM0Ijoi'@;
put 'cDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifScpfSwzMjA4Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3siT19SRE9OTFkiOjAsIk9fV1JPTkxZIjoxLCJPX1JEV1IiOjIsIlNfSUZNVCI6NjE0NDAsIlNfSUZSRUciOjMyNzY4LCJTX0lGRElSIjoxNjM4NCwiU19J'@;
put 'RkNIUiI6ODE5MiwiU19JRkJMSyI6MjQ1NzYsIlNfSUZJRk8iOjQwOTYsIlNfSUZMTksiOjQwOTYwLCJTX0lGU09DSyI6NDkxNTIsIk9fQ1JFQVQiOjUxMiwiT19FWENMIjoyMDQ4LCJPX05PQ1RUWSI6MTMxMDcyLCJPX1RSVU5DIjoxMDI0LCJPX0FQUEVORCI6OCwiT19ESVJFQ1RPUlkiOjEw'@;
put 'NDg1NzYsIk9fTk9GT0xMT1ciOjI1NiwiT19TWU5DIjoxMjgsIk9fU1lNTElOSyI6MjA5NzE1MiwiT19OT05CTE9DSyI6NCwiU19JUldYVSI6NDQ4LCJTX0lSVVNSIjoyNTYsIlNfSVdVU1IiOjEyOCwiU19JWFVTUiI6NjQsIlNfSVJXWEciOjU2LCJTX0lSR1JQIjozMiwiU19JV0dSUCI6MTYs'@;
put 'IlNfSVhHUlAiOjgsIlNfSVJXWE8iOjcsIlNfSVJPVEgiOjQsIlNfSVdPVEgiOjIsIlNfSVhPVEgiOjEsIkUyQklHIjo3LCJFQUNDRVMiOjEzLCJFQUREUklOVVNFIjo0OCwiRUFERFJOT1RBVkFJTCI6NDksIkVBRk5PU1VQUE9SVCI6NDcsIkVBR0FJTiI6MzUsIkVBTFJFQURZIjozNywiRUJB'@;
put 'REYiOjksIkVCQURNU0ciOjk0LCJFQlVTWSI6MTYsIkVDQU5DRUxFRCI6ODksIkVDSElMRCI6MTAsIkVDT05OQUJPUlRFRCI6NTMsIkVDT05OUkVGVVNFRCI6NjEsIkVDT05OUkVTRVQiOjU0LCJFREVBRExLIjoxMSwiRURFU1RBRERSUkVRIjozOSwiRURPTSI6MzMsIkVEUVVPVCI6NjksIkVF'@;
put 'WElTVCI6MTcsIkVGQVVMVCI6MTQsIkVGQklHIjoyNywiRUhPU1RVTlJFQUNIIjo2NSwiRUlEUk0iOjkwLCJFSUxTRVEiOjkyLCJFSU5QUk9HUkVTUyI6MzYsIkVJTlRSIjo0LCJFSU5WQUwiOjIyLCJFSU8iOjUsIkVJU0NPTk4iOjU2LCJFSVNESVIiOjIxLCJFTE9PUCI6NjIsIkVNRklMRSI6'@;
put 'MjQsIkVNTElOSyI6MzEsIkVNU0dTSVpFIjo0MCwiRU1VTFRJSE9QIjo5NSwiRU5BTUVUT09MT05HIjo2MywiRU5FVERPV04iOjUwLCJFTkVUUkVTRVQiOjUyLCJFTkVUVU5SRUFDSCI6NTEsIkVORklMRSI6MjMsIkVOT0JVRlMiOjU1LCJFTk9EQVRBIjo5NiwiRU5PREVWIjoxOSwiRU5PRU5U'@;
put 'IjoyLCJFTk9FWEVDIjo4LCJFTk9MQ0siOjc3LCJFTk9MSU5LIjo5NywiRU5PTUVNIjoxMiwiRU5PTVNHIjo5MSwiRU5PUFJPVE9PUFQiOjQyLCJFTk9TUEMiOjI4LCJFTk9TUiI6OTgsIkVOT1NUUiI6OTksIkVOT1NZUyI6NzgsIkVOT1RDT05OIjo1NywiRU5PVERJUiI6MjAsIkVOT1RFTVBU'@;
put 'WSI6NjYsIkVOT1RTT0NLIjozOCwiRU5PVFNVUCI6NDUsIkVOT1RUWSI6MjUsIkVOWElPIjo2LCJFT1BOT1RTVVBQIjoxMDIsIkVPVkVSRkxPVyI6ODQsIkVQRVJNIjoxLCJFUElQRSI6MzIsIkVQUk9UTyI6MTAwLCJFUFJPVE9OT1NVUFBPUlQiOjQzLCJFUFJPVE9UWVBFIjo0MSwiRVJBTkdF'@;
put 'IjozNCwiRVJPRlMiOjMwLCJFU1BJUEUiOjI5LCJFU1JDSCI6MywiRVNUQUxFIjo3MCwiRVRJTUUiOjEwMSwiRVRJTUVET1VUIjo2MCwiRVRYVEJTWSI6MjYsIkVXT1VMREJMT0NLIjozNSwiRVhERVYiOjE4LCJTSUdIVVAiOjEsIlNJR0lOVCI6MiwiU0lHUVVJVCI6MywiU0lHSUxMIjo0LCJT'@;
put 'SUdUUkFQIjo1LCJTSUdBQlJUIjo2LCJTSUdJT1QiOjYsIlNJR0JVUyI6MTAsIlNJR0ZQRSI6OCwiU0lHS0lMTCI6OSwiU0lHVVNSMSI6MzAsIlNJR1NFR1YiOjExLCJTSUdVU1IyIjozMSwiU0lHUElQRSI6MTMsIlNJR0FMUk0iOjE0LCJTSUdURVJNIjoxNSwiU0lHQ0hMRCI6MjAsIlNJR0NP'@;
put 'TlQiOjE5LCJTSUdTVE9QIjoxNywiU0lHVFNUUCI6MTgsIlNJR1RUSU4iOjIxLCJTSUdUVE9VIjoyMiwiU0lHVVJHIjoxNiwiU0lHWENQVSI6MjQsIlNJR1hGU1oiOjI1LCJTSUdWVEFMUk0iOjI2LCJTSUdQUk9GIjoyNywiU0lHV0lOQ0giOjI4LCJTSUdJTyI6MjMsIlNJR1NZUyI6MTIsIlNT'@;
put 'TF9PUF9BTEwiOjIxNDc0ODY3MTksIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04iOjI2MjE0NCwiU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSI6NDE5NDMwNCwiU1NMX09QX0NJU0NPX0FOWUNPTk5FQ1QiOjMyNzY4LCJTU0xfT1BfQ09PS0lFX0VYQ0hB'@;
put 'TkdFIjo4MTkyLCJTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUciOjIxNDc0ODM2NDgsIlNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMiOjIwNDgsIlNTTF9PUF9FUEhFTUVSQUxfUlNBIjowLCJTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUIjo0LCJTU0xfT1BfTUlDUk9T'@;
put 'T0ZUX0JJR19TU0xWM19CVUZGRVIiOjMyLCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHIjoxLCJTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORyI6MCwiU1NMX09QX05FVFNDQVBFX0NBX0ROX0JVRyI6NTM2ODcwOTEyLCJTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRyI6Miwi'@;
put 'U1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUciOjEwNzM3NDE4MjQsIlNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyI6OCwiU1NMX09QX05PX0NPTVBSRVNTSU9OIjoxMzEwNzIsIlNTTF9PUF9OT19RVUVSWV9NVFUiOjQwOTYsIlNTTF9PUF9OT19T'@;
put 'RVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiI6NjU1MzYsIlNTTF9PUF9OT19TU0x2MiI6MTY3NzcyMTYsIlNTTF9PUF9OT19TU0x2MyI6MzM1NTQ0MzIsIlNTTF9PUF9OT19USUNLRVQiOjE2Mzg0LCJTU0xfT1BfTk9fVExTdjEiOjY3MTA4ODY0LCJTU0xfT1BfTk9fVExTdjFf'@;
put 'MSI6MjY4NDM1NDU2LCJTU0xfT1BfTk9fVExTdjFfMiI6MTM0MjE3NzI4LCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMSI6MCwiU1NMX09QX1BLQ1MxX0NIRUNLXzIiOjAsIlNTTF9PUF9TSU5HTEVfREhfVVNFIjoxMDQ4NTc2LCJTU0xfT1BfU0lOR0xFX0VDREhfVVNFIjo1MjQyODgsIlNTTF9PUF9T'@;
put 'U0xFQVlfMDgwX0NMSUVOVF9ESF9CVUciOjEyOCwiU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRyI6MCwiU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRyI6NTEyLCJTU0xfT1BfVExTX0Q1X0JVRyI6MjU2LCJTU0xfT1BfVExTX1JPTExCQUNLX0JVRyI6ODM4ODYwOCwiRU5H'@;
put 'SU5FX01FVEhPRF9EU0EiOjIsIkVOR0lORV9NRVRIT0RfREgiOjQsIkVOR0lORV9NRVRIT0RfUkFORCI6OCwiRU5HSU5FX01FVEhPRF9FQ0RIIjoxNiwiRU5HSU5FX01FVEhPRF9FQ0RTQSI6MzIsIkVOR0lORV9NRVRIT0RfQ0lQSEVSUyI6NjQsIkVOR0lORV9NRVRIT0RfRElHRVNUUyI6MTI4'@;
put 'LCJFTkdJTkVfTUVUSE9EX1NUT1JFIjoyNTYsIkVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUyI6NTEyLCJFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIUyI6MTAyNCwiRU5HSU5FX01FVEhPRF9BTEwiOjY1NTM1LCJFTkdJTkVfTUVUSE9EX05PTkUiOjAsIkRIX0NIRUNLX1BfTk9UX1NBRkVf'@;
put 'UFJJTUUiOjIsIkRIX0NIRUNLX1BfTk9UX1BSSU1FIjoxLCJESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SIjo0LCJESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SIjo4LCJOUE5fRU5BQkxFRCI6MSwiUlNBX1BLQ1MxX1BBRERJTkciOjEsIlJTQV9TU0xWMjNfUEFERElORyI6MiwiUlNBX05P'@;
put 'X1BBRERJTkciOjMsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciOjQsIlJTQV9YOTMxX1BBRERJTkciOjUsIlJTQV9QS0NTMV9QU1NfUEFERElORyI6NiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIjoyLCJQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCI6NCwiUE9JTlRfQ09OVkVS'@;
put 'U0lPTl9IWUJSSUQiOjYsIkZfT0siOjAsIlJfT0siOjQsIldfT0siOjIsIlhfT0siOjEsIlVWX1VEUF9SRVVTRUFERFIiOjR9Jyl9LDk3OTk6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZm'@;
put 'ZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZm'@;
put 'ZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRm'@;
put 'MjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUi'@;
put 'OiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0'@;
put 'YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3'@;
put 'NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEz'@;
put 'OWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2Rj'@;
put 'MjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgz'@;
put 'YTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIx'@;
put 'NjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2Yjdl'@;
put 'ZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0'@;
put 'NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJk'@;
put 'ZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVk'@;
put 'NmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5'@;
put 'MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQx'@;
put 'MTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2'@;
put 'Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4'@;
put 'YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRm'@;
put 'YTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2'@;
put 'YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7Imdl'@;
put 'biI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1'@;
put 'YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYy'@;
put 'MDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1'@;
put 'MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3'@;
put 'NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0'@;
put 'YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZk'@;
put 'ZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0'@;
put 'Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3'@;
put 'ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNj'@;
put 'MDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0'@;
put 'MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2'@;
put 'NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4'@;
put 'MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3'@;
put 'ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2Ri'@;
put 'NWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZh'@;
put 'MDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3'@;
put 'YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAz'@;
put 'MmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVl'@;
put 'ZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJk'@;
put 'ZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0'@;
put 'NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBi'@;
put 'ZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZm'@;
put 'ZmZmZiJ9fScpfSw4NTk3Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPXtpODoiNi41LjQifX0sMjU2MjpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIi'@;
put 'OiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0x'@;
put 'OTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNi'@;
put 'YyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX0sMzcwNDpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCdbImFjIiwiY29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwi'@;
put 'bmV0LmFjIiwibWlsLmFjIiwib3JnLmFjIiwiYWQiLCJub20uYWQiLCJhZSIsImNvLmFlIiwibmV0LmFlIiwib3JnLmFlIiwic2NoLmFlIiwiYWMuYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJhZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNjaWRlbnQtcHJldmVudGlvbi5h'@;
put 'ZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFlcm8iLCJhZ2VudHMuYWVybyIsImFpcmNyYWZ0LmFlcm8iLCJhaXJsaW5lLmFlcm8iLCJhaXJwb3J0LmFlcm8iLCJhaXItc3VydmVpbGxhbmNlLmFlcm8iLCJhaXJ0cmFmZmljLmFlcm8iLCJhaXItdHJh'@;
put 'ZmZpYy1jb250cm9sLmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFtdXNlbWVudC5hZXJvIiwiYXNzb2NpYXRpb24uYWVybyIsImF1dGhvci5hZXJvIiwiYmFsbG9vbmluZy5hZXJvIiwiYnJva2VyLmFlcm8iLCJjYWEuYWVybyIsImNhcmdvLmFlcm8iLCJjYXRlcmluZy5hZXJvIiwiY2VydGlm'@;
put 'aWNhdGlvbi5hZXJvIiwiY2hhbXBpb25zaGlwLmFlcm8iLCJjaGFydGVyLmFlcm8iLCJjaXZpbGF2aWF0aW9uLmFlcm8iLCJjbHViLmFlcm8iLCJjb25mZXJlbmNlLmFlcm8iLCJjb25zdWx0YW50LmFlcm8iLCJjb25zdWx0aW5nLmFlcm8iLCJjb250cm9sLmFlcm8iLCJjb3VuY2lsLmFlcm8i'@;
put 'LCJjcmV3LmFlcm8iLCJkZXNpZ24uYWVybyIsImRnY2EuYWVybyIsImVkdWNhdG9yLmFlcm8iLCJlbWVyZ2VuY3kuYWVybyIsImVuZ2luZS5hZXJvIiwiZW5naW5lZXIuYWVybyIsImVudGVydGFpbm1lbnQuYWVybyIsImVxdWlwbWVudC5hZXJvIiwiZXhjaGFuZ2UuYWVybyIsImV4cHJlc3Mu'@;
put 'YWVybyIsImZlZGVyYXRpb24uYWVybyIsImZsaWdodC5hZXJvIiwiZnVlbC5hZXJvIiwiZ2xpZGluZy5hZXJvIiwiZ292ZXJubWVudC5hZXJvIiwiZ3JvdW5kaGFuZGxpbmcuYWVybyIsImdyb3VwLmFlcm8iLCJoYW5nZ2xpZGluZy5hZXJvIiwiaG9tZWJ1aWx0LmFlcm8iLCJpbnN1cmFuY2Uu'@;
put 'YWVybyIsImpvdXJuYWwuYWVybyIsImpvdXJuYWxpc3QuYWVybyIsImxlYXNpbmcuYWVybyIsImxvZ2lzdGljcy5hZXJvIiwibWFnYXppbmUuYWVybyIsIm1haW50ZW5hbmNlLmFlcm8iLCJtZWRpYS5hZXJvIiwibWljcm9saWdodC5hZXJvIiwibW9kZWxsaW5nLmFlcm8iLCJuYXZpZ2F0aW9u'@;
put 'LmFlcm8iLCJwYXJhY2h1dGluZy5hZXJvIiwicGFyYWdsaWRpbmcuYWVybyIsInBhc3Nlbmdlci1hc3NvY2lhdGlvbi5hZXJvIiwicGlsb3QuYWVybyIsInByZXNzLmFlcm8iLCJwcm9kdWN0aW9uLmFlcm8iLCJyZWNyZWF0aW9uLmFlcm8iLCJyZXBib2R5LmFlcm8iLCJyZXMuYWVybyIsInJl'@;
put 'c2VhcmNoLmFlcm8iLCJyb3RvcmNyYWZ0LmFlcm8iLCJzYWZldHkuYWVybyIsInNjaWVudGlzdC5hZXJvIiwic2VydmljZXMuYWVybyIsInNob3cuYWVybyIsInNreWRpdmluZy5hZXJvIiwic29mdHdhcmUuYWVybyIsInN0dWRlbnQuYWVybyIsInRyYWRlci5hZXJvIiwidHJhZGluZy5hZXJv'@;
put 'IiwidHJhaW5lci5hZXJvIiwidW5pb24uYWVybyIsIndvcmtpbmdncm91cC5hZXJvIiwid29ya3MuYWVybyIsImFmIiwiZ292LmFmIiwiY29tLmFmIiwib3JnLmFmIiwibmV0LmFmIiwiZWR1LmFmIiwiYWciLCJjb20uYWciLCJvcmcuYWciLCJuZXQuYWciLCJjby5hZyIsIm5vbS5hZyIsImFp'@;
put 'Iiwib2ZmLmFpIiwiY29tLmFpIiwibmV0LmFpIiwib3JnLmFpIiwiYWwiLCJjb20uYWwiLCJlZHUuYWwiLCJnb3YuYWwiLCJtaWwuYWwiLCJuZXQuYWwiLCJvcmcuYWwiLCJhbSIsImNvLmFtIiwiY29tLmFtIiwiY29tbXVuZS5hbSIsIm5ldC5hbSIsIm9yZy5hbSIsImFvIiwiZWQuYW8iLCJn'@;
put 'di5hbyIsIm9nLmFvIiwiY28uYW8iLCJwYi5hbyIsIml0LmFvIiwiYXEiLCJhciIsImJldC5hciIsImNvbS5hciIsImNvb3AuYXIiLCJlZHUuYXIiLCJnb2IuYXIiLCJnb3YuYXIiLCJpbnQuYXIiLCJtaWwuYXIiLCJtdXNpY2EuYXIiLCJtdXR1YWwuYXIiLCJuZXQuYXIiLCJvcmcuYXIiLCJz'@;
put 'ZW5hc2EuYXIiLCJ0dXIuYXIiLCJhcnBhIiwiZTE2NC5hcnBhIiwiaW4tYWRkci5hcnBhIiwiaXA2LmFycGEiLCJpcmlzLmFycGEiLCJ1cmkuYXJwYSIsInVybi5hcnBhIiwiYXMiLCJnb3YuYXMiLCJhc2lhIiwiYXQiLCJhYy5hdCIsImNvLmF0IiwiZ3YuYXQiLCJvci5hdCIsInN0aC5hYy5h'@;
put 'dCIsImF1IiwiY29tLmF1IiwibmV0LmF1Iiwib3JnLmF1IiwiZWR1LmF1IiwiZ292LmF1IiwiYXNuLmF1IiwiaWQuYXUiLCJpbmZvLmF1IiwiY29uZi5hdSIsIm96LmF1IiwiYWN0LmF1IiwibnN3LmF1IiwibnQuYXUiLCJxbGQuYXUiLCJzYS5hdSIsInRhcy5hdSIsInZpYy5hdSIsIndhLmF1'@;
put 'IiwiYWN0LmVkdS5hdSIsImNhdGhvbGljLmVkdS5hdSIsIm5zdy5lZHUuYXUiLCJudC5lZHUuYXUiLCJxbGQuZWR1LmF1Iiwic2EuZWR1LmF1IiwidGFzLmVkdS5hdSIsInZpYy5lZHUuYXUiLCJ3YS5lZHUuYXUiLCJxbGQuZ292LmF1Iiwic2EuZ292LmF1IiwidGFzLmdvdi5hdSIsInZpYy5n'@;
put 'b3YuYXUiLCJ3YS5nb3YuYXUiLCJzY2hvb2xzLm5zdy5lZHUuYXUiLCJhdyIsImNvbS5hdyIsImF4IiwiYXoiLCJjb20uYXoiLCJuZXQuYXoiLCJpbnQuYXoiLCJnb3YuYXoiLCJvcmcuYXoiLCJlZHUuYXoiLCJpbmZvLmF6IiwicHAuYXoiLCJtaWwuYXoiLCJuYW1lLmF6IiwicHJvLmF6Iiwi'@;
put 'Yml6LmF6IiwiYmEiLCJjb20uYmEiLCJlZHUuYmEiLCJnb3YuYmEiLCJtaWwuYmEiLCJuZXQuYmEiLCJvcmcuYmEiLCJiYiIsImJpei5iYiIsImNvLmJiIiwiY29tLmJiIiwiZWR1LmJiIiwiZ292LmJiIiwiaW5mby5iYiIsIm5ldC5iYiIsIm9yZy5iYiIsInN0b3JlLmJiIiwidHYuYmIiLCIq'@;
put 'LmJkIiwiYmUiLCJhYy5iZSIsImJmIiwiZ292LmJmIiwiYmciLCJhLmJnIiwiYi5iZyIsImMuYmciLCJkLmJnIiwiZS5iZyIsImYuYmciLCJnLmJnIiwiaC5iZyIsImkuYmciLCJqLmJnIiwiay5iZyIsImwuYmciLCJtLmJnIiwibi5iZyIsIm8uYmciLCJwLmJnIiwicS5iZyIsInIuYmciLCJz'@;
put 'LmJnIiwidC5iZyIsInUuYmciLCJ2LmJnIiwidy5iZyIsInguYmciLCJ5LmJnIiwiei5iZyIsIjAuYmciLCIxLmJnIiwiMi5iZyIsIjMuYmciLCI0LmJnIiwiNS5iZyIsIjYuYmciLCI3LmJnIiwiOC5iZyIsIjkuYmciLCJiaCIsImNvbS5iaCIsImVkdS5iaCIsIm5ldC5iaCIsIm9yZy5iaCIs'@;
put 'Imdvdi5iaCIsImJpIiwiY28uYmkiLCJjb20uYmkiLCJlZHUuYmkiLCJvci5iaSIsIm9yZy5iaSIsImJpeiIsImJqIiwiYXNzby5iaiIsImJhcnJlYXUuYmoiLCJnb3V2LmJqIiwiYm0iLCJjb20uYm0iLCJlZHUuYm0iLCJnb3YuYm0iLCJuZXQuYm0iLCJvcmcuYm0iLCJibiIsImNvbS5ibiIs'@;
put 'ImVkdS5ibiIsImdvdi5ibiIsIm5ldC5ibiIsIm9yZy5ibiIsImJvIiwiY29tLmJvIiwiZWR1LmJvIiwiZ29iLmJvIiwiaW50LmJvIiwib3JnLmJvIiwibmV0LmJvIiwibWlsLmJvIiwidHYuYm8iLCJ3ZWIuYm8iLCJhY2FkZW1pYS5ibyIsImFncm8uYm8iLCJhcnRlLmJvIiwiYmxvZy5ibyIs'@;
put 'ImJvbGl2aWEuYm8iLCJjaWVuY2lhLmJvIiwiY29vcGVyYXRpdmEuYm8iLCJkZW1vY3JhY2lhLmJvIiwiZGVwb3J0ZS5ibyIsImVjb2xvZ2lhLmJvIiwiZWNvbm9taWEuYm8iLCJlbXByZXNhLmJvIiwiaW5kaWdlbmEuYm8iLCJpbmR1c3RyaWEuYm8iLCJpbmZvLmJvIiwibWVkaWNpbmEuYm8i'@;
put 'LCJtb3ZpbWllbnRvLmJvIiwibXVzaWNhLmJvIiwibmF0dXJhbC5ibyIsIm5vbWJyZS5ibyIsIm5vdGljaWFzLmJvIiwicGF0cmlhLmJvIiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInBsdXJpbmFjaW9uYWwuYm8iLCJwdWVibG8uYm8iLCJyZXZpc3RhLmJvIiwic2FsdWQuYm8i'@;
put 'LCJ0ZWNub2xvZ2lhLmJvIiwidGtzYXQuYm8iLCJ0cmFuc3BvcnRlLmJvIiwid2lraS5ibyIsImJyIiwiOWd1YWN1LmJyIiwiYWJjLmJyIiwiYWRtLmJyIiwiYWR2LmJyIiwiYWdyLmJyIiwiYWp1LmJyIiwiYW0uYnIiLCJhbmFuaS5iciIsImFwYXJlY2lkYS5iciIsImFwcC5iciIsImFycS5i'@;
put 'ciIsImFydC5iciIsImF0by5iciIsImIuYnIiLCJiYXJ1ZXJpLmJyIiwiYmVsZW0uYnIiLCJiaHouYnIiLCJiaWIuYnIiLCJiaW8uYnIiLCJibG9nLmJyIiwiYm1kLmJyIiwiYm9hdmlzdGEuYnIiLCJic2IuYnIiLCJjYW1waW5hZ3JhbmRlLmJyIiwiY2FtcGluYXMuYnIiLCJjYXhpYXMuYnIi'@;
put 'LCJjaW0uYnIiLCJjbmcuYnIiLCJjbnQuYnIiLCJjb20uYnIiLCJjb250YWdlbS5iciIsImNvb3AuYnIiLCJjb3ouYnIiLCJjcmkuYnIiLCJjdWlhYmEuYnIiLCJjdXJpdGliYS5iciIsImRlZi5iciIsImRlcy5iciIsImRldC5iciIsImRldi5iciIsImVjbi5iciIsImVjby5iciIsImVkdS5i'@;
put 'ciIsImVtcC5iciIsImVuZi5iciIsImVuZy5iciIsImVzcC5iciIsImV0Yy5iciIsImV0aS5iciIsImZhci5iciIsImZlaXJhLmJyIiwiZmxvZy5iciIsImZsb3JpcGEuYnIiLCJmbS5iciIsImZuZC5iciIsImZvcnRhbC5iciIsImZvdC5iciIsImZvei5iciIsImZzdC5iciIsImcxMi5iciIs'@;
put 'Imdlby5iciIsImdnZi5iciIsImdvaWFuaWEuYnIiLCJnb3YuYnIiLCJhYy5nb3YuYnIiLCJhbC5nb3YuYnIiLCJhbS5nb3YuYnIiLCJhcC5nb3YuYnIiLCJiYS5nb3YuYnIiLCJjZS5nb3YuYnIiLCJkZi5nb3YuYnIiLCJlcy5nb3YuYnIiLCJnby5nb3YuYnIiLCJtYS5nb3YuYnIiLCJtZy5n'@;
put 'b3YuYnIiLCJtcy5nb3YuYnIiLCJtdC5nb3YuYnIiLCJwYS5nb3YuYnIiLCJwYi5nb3YuYnIiLCJwZS5nb3YuYnIiLCJwaS5nb3YuYnIiLCJwci5nb3YuYnIiLCJyai5nb3YuYnIiLCJybi5nb3YuYnIiLCJyby5nb3YuYnIiLCJyci5nb3YuYnIiLCJycy5nb3YuYnIiLCJzYy5nb3YuYnIiLCJz'@;
put 'ZS5nb3YuYnIiLCJzcC5nb3YuYnIiLCJ0by5nb3YuYnIiLCJncnUuYnIiLCJpbWIuYnIiLCJpbmQuYnIiLCJpbmYuYnIiLCJqYWIuYnIiLCJqYW1wYS5iciIsImpkZi5iciIsImpvaW52aWxsZS5iciIsImpvci5iciIsImp1cy5iciIsImxlZy5iciIsImxlbC5iciIsImxvZy5iciIsImxvbmRy'@;
put 'aW5hLmJyIiwibWFjYXBhLmJyIiwibWFjZWlvLmJyIiwibWFuYXVzLmJyIiwibWFyaW5nYS5iciIsIm1hdC5iciIsIm1lZC5iciIsIm1pbC5iciIsIm1vcmVuYS5iciIsIm1wLmJyIiwibXVzLmJyIiwibmF0YWwuYnIiLCJuZXQuYnIiLCJuaXRlcm9pLmJyIiwiKi5ub20uYnIiLCJub3QuYnIi'@;
put 'LCJudHIuYnIiLCJvZG8uYnIiLCJvbmcuYnIiLCJvcmcuYnIiLCJvc2FzY28uYnIiLCJwYWxtYXMuYnIiLCJwb2EuYnIiLCJwcGcuYnIiLCJwcm8uYnIiLCJwc2MuYnIiLCJwc2kuYnIiLCJwdmguYnIiLCJxc2wuYnIiLCJyYWRpby5iciIsInJlYy5iciIsInJlY2lmZS5iciIsInJlcC5iciIs'@;
put 'InJpYmVpcmFvLmJyIiwicmlvLmJyIiwicmlvYnJhbmNvLmJyIiwicmlvcHJldG8uYnIiLCJzYWx2YWRvci5iciIsInNhbXBhLmJyIiwic2FudGFtYXJpYS5iciIsInNhbnRvYW5kcmUuYnIiLCJzYW9iZXJuYXJkby5iciIsInNhb2dvbmNhLmJyIiwic2VnLmJyIiwic2pjLmJyIiwic2xnLmJy'@;
put 'Iiwic2x6LmJyIiwic29yb2NhYmEuYnIiLCJzcnYuYnIiLCJ0YXhpLmJyIiwidGMuYnIiLCJ0ZWMuYnIiLCJ0ZW8uYnIiLCJ0aGUuYnIiLCJ0bXAuYnIiLCJ0cmQuYnIiLCJ0dXIuYnIiLCJ0di5iciIsInVkaS5iciIsInZldC5iciIsInZpeC5iciIsInZsb2cuYnIiLCJ3aWtpLmJyIiwiemxn'@;
put 'LmJyIiwiYnMiLCJjb20uYnMiLCJuZXQuYnMiLCJvcmcuYnMiLCJlZHUuYnMiLCJnb3YuYnMiLCJidCIsImNvbS5idCIsImVkdS5idCIsImdvdi5idCIsIm5ldC5idCIsIm9yZy5idCIsImJ2IiwiYnciLCJjby5idyIsIm9yZy5idyIsImJ5IiwiZ292LmJ5IiwibWlsLmJ5IiwiY29tLmJ5Iiwi'@;
put 'b2YuYnkiLCJieiIsImNvbS5ieiIsIm5ldC5ieiIsIm9yZy5ieiIsImVkdS5ieiIsImdvdi5ieiIsImNhIiwiYWIuY2EiLCJiYy5jYSIsIm1iLmNhIiwibmIuY2EiLCJuZi5jYSIsIm5sLmNhIiwibnMuY2EiLCJudC5jYSIsIm51LmNhIiwib24uY2EiLCJwZS5jYSIsInFjLmNhIiwic2suY2Ei'@;
put 'LCJ5ay5jYSIsImdjLmNhIiwiY2F0IiwiY2MiLCJjZCIsImdvdi5jZCIsImNmIiwiY2ciLCJjaCIsImNpIiwib3JnLmNpIiwib3IuY2kiLCJjb20uY2kiLCJjby5jaSIsImVkdS5jaSIsImVkLmNpIiwiYWMuY2kiLCJuZXQuY2kiLCJnby5jaSIsImFzc28uY2kiLCJhXHhlOXJvcG9ydC5jaSIs'@;
put 'ImludC5jaSIsInByZXNzZS5jaSIsIm1kLmNpIiwiZ291di5jaSIsIiouY2siLCIhd3d3LmNrIiwiY2wiLCJjby5jbCIsImdvYi5jbCIsImdvdi5jbCIsIm1pbC5jbCIsImNtIiwiY28uY20iLCJjb20uY20iLCJnb3YuY20iLCJuZXQuY20iLCJjbiIsImFjLmNuIiwiY29tLmNuIiwiZWR1LmNu'@;
put 'IiwiZ292LmNuIiwibmV0LmNuIiwib3JnLmNuIiwibWlsLmNuIiwiXHU1MTZjXHU1M2Y4LmNuIiwiXHU3ZjUxXHU3ZWRjLmNuIiwiXHU3ZGIyXHU3ZDYxLmNuIiwiYWguY24iLCJiai5jbiIsImNxLmNuIiwiZmouY24iLCJnZC5jbiIsImdzLmNuIiwiZ3ouY24iLCJneC5jbiIsImhhLmNuIiwi'@;
put 'aGIuY24iLCJoZS5jbiIsImhpLmNuIiwiaGwuY24iLCJobi5jbiIsImpsLmNuIiwianMuY24iLCJqeC5jbiIsImxuLmNuIiwibm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNuIiwieGouY24iLCJ4ei5jbiIsInluLmNu'@;
put 'IiwiemouY24iLCJoay5jbiIsIm1vLmNuIiwidHcuY24iLCJjbyIsImFydHMuY28iLCJjb20uY28iLCJlZHUuY28iLCJmaXJtLmNvIiwiZ292LmNvIiwiaW5mby5jbyIsImludC5jbyIsIm1pbC5jbyIsIm5ldC5jbyIsIm5vbS5jbyIsIm9yZy5jbyIsInJlYy5jbyIsIndlYi5jbyIsImNvbSIs'@;
put 'ImNvb3AiLCJjciIsImFjLmNyIiwiY28uY3IiLCJlZC5jciIsImZpLmNyIiwiZ28uY3IiLCJvci5jciIsInNhLmNyIiwiY3UiLCJjb20uY3UiLCJlZHUuY3UiLCJvcmcuY3UiLCJuZXQuY3UiLCJnb3YuY3UiLCJpbmYuY3UiLCJjdiIsImNvbS5jdiIsImVkdS5jdiIsImludC5jdiIsIm5vbWUu'@;
put 'Y3YiLCJvcmcuY3YiLCJjdyIsImNvbS5jdyIsImVkdS5jdyIsIm5ldC5jdyIsIm9yZy5jdyIsImN4IiwiZ292LmN4IiwiY3kiLCJhYy5jeSIsImJpei5jeSIsImNvbS5jeSIsImVrbG9nZXMuY3kiLCJnb3YuY3kiLCJsdGQuY3kiLCJtaWwuY3kiLCJuZXQuY3kiLCJvcmcuY3kiLCJwcmVzcy5j'@;
put 'eSIsInByby5jeSIsInRtLmN5IiwiY3oiLCJkZSIsImRqIiwiZGsiLCJkbSIsImNvbS5kbSIsIm5ldC5kbSIsIm9yZy5kbSIsImVkdS5kbSIsImdvdi5kbSIsImRvIiwiYXJ0LmRvIiwiY29tLmRvIiwiZWR1LmRvIiwiZ29iLmRvIiwiZ292LmRvIiwibWlsLmRvIiwibmV0LmRvIiwib3JnLmRv'@;
put 'Iiwic2xkLmRvIiwid2ViLmRvIiwiZHoiLCJhcnQuZHoiLCJhc3NvLmR6IiwiY29tLmR6IiwiZWR1LmR6IiwiZ292LmR6Iiwib3JnLmR6IiwibmV0LmR6IiwicG9sLmR6Iiwic29jLmR6IiwidG0uZHoiLCJlYyIsImNvbS5lYyIsImluZm8uZWMiLCJuZXQuZWMiLCJmaW4uZWMiLCJrMTIuZWMi'@;
put 'LCJtZWQuZWMiLCJwcm8uZWMiLCJvcmcuZWMiLCJlZHUuZWMiLCJnb3YuZWMiLCJnb2IuZWMiLCJtaWwuZWMiLCJlZHUiLCJlZSIsImVkdS5lZSIsImdvdi5lZSIsInJpaWsuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJjb20uZWUiLCJwcmkuZWUiLCJhaXAuZWUiLCJvcmcuZWUiLCJmaWUuZWUi'@;
put 'LCJlZyIsImNvbS5lZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsIm1pbC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcuZWciLCJzY2kuZWciLCIqLmVyIiwiZXMiLCJjb20uZXMiLCJub20uZXMiLCJvcmcuZXMiLCJnb2IuZXMiLCJlZHUuZXMiLCJldCIsImNvbS5ldCIsImdvdi5l'@;
put 'dCIsIm9yZy5ldCIsImVkdS5ldCIsImJpei5ldCIsIm5hbWUuZXQiLCJpbmZvLmV0IiwibmV0LmV0IiwiZXUiLCJmaSIsImFsYW5kLmZpIiwiZmoiLCJhYy5maiIsImJpei5maiIsImNvbS5maiIsImdvdi5maiIsImluZm8uZmoiLCJtaWwuZmoiLCJuYW1lLmZqIiwibmV0LmZqIiwib3JnLmZq'@;
put 'IiwicHJvLmZqIiwiKi5mayIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5mbSIsImZtIiwiZm8iLCJmciIsImFzc28uZnIiLCJjb20uZnIiLCJnb3V2LmZyIiwibm9tLmZyIiwicHJkLmZyIiwidG0uZnIiLCJhZXJvcG9ydC5mciIsImF2b2NhdC5mciIsImF2b3Vlcy5mciIsImNj'@;
put 'aS5mciIsImNoYW1iYWdyaS5mciIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy5mciIsImV4cGVydHMtY29tcHRhYmxlcy5mciIsImdlb21ldHJlLWV4cGVydC5mciIsImdyZXRhLmZyIiwiaHVpc3NpZXItanVzdGljZS5mciIsIm1lZGVjaW4uZnIiLCJub3RhaXJlcy5mciIsInBoYXJtYWNpZW4u'@;
put 'ZnIiLCJwb3J0LmZyIiwidmV0ZXJpbmFpcmUuZnIiLCJnYSIsImdiIiwiZWR1LmdkIiwiZ292LmdkIiwiZ2QiLCJnZSIsImNvbS5nZSIsImVkdS5nZSIsImdvdi5nZSIsIm9yZy5nZSIsIm1pbC5nZSIsIm5ldC5nZSIsInB2dC5nZSIsImdmIiwiZ2ciLCJjby5nZyIsIm5ldC5nZyIsIm9yZy5n'@;
put 'ZyIsImdoIiwiY29tLmdoIiwiZWR1LmdoIiwiZ292LmdoIiwib3JnLmdoIiwibWlsLmdoIiwiZ2kiLCJjb20uZ2kiLCJsdGQuZ2kiLCJnb3YuZ2kiLCJtb2QuZ2kiLCJlZHUuZ2kiLCJvcmcuZ2kiLCJnbCIsImNvLmdsIiwiY29tLmdsIiwiZWR1LmdsIiwibmV0LmdsIiwib3JnLmdsIiwiZ20i'@;
put 'LCJnbiIsImFjLmduIiwiY29tLmduIiwiZWR1LmduIiwiZ292LmduIiwib3JnLmduIiwibmV0LmduIiwiZ292IiwiZ3AiLCJjb20uZ3AiLCJuZXQuZ3AiLCJtb2JpLmdwIiwiZWR1LmdwIiwib3JnLmdwIiwiYXNzby5ncCIsImdxIiwiZ3IiLCJjb20uZ3IiLCJlZHUuZ3IiLCJuZXQuZ3IiLCJv'@;
put 'cmcuZ3IiLCJnb3YuZ3IiLCJncyIsImd0IiwiY29tLmd0IiwiZWR1Lmd0IiwiZ29iLmd0IiwiaW5kLmd0IiwibWlsLmd0IiwibmV0Lmd0Iiwib3JnLmd0IiwiZ3UiLCJjb20uZ3UiLCJlZHUuZ3UiLCJnb3YuZ3UiLCJndWFtLmd1IiwiaW5mby5ndSIsIm5ldC5ndSIsIm9yZy5ndSIsIndlYi5n'@;
put 'dSIsImd3IiwiZ3kiLCJjby5neSIsImNvbS5neSIsImVkdS5neSIsImdvdi5neSIsIm5ldC5neSIsIm9yZy5neSIsImhrIiwiY29tLmhrIiwiZWR1LmhrIiwiZ292LmhrIiwiaWR2LmhrIiwibmV0LmhrIiwib3JnLmhrIiwiXHU1MTZjXHU1M2Y4LmhrIiwiXHU2NTU5XHU4MGIyLmhrIiwiXHU2'@;
put 'NTRlXHU4MGIyLmhrIiwiXHU2NTNmXHU1ZTljLmhrIiwiXHU1MDBiXHU0ZWJhLmhrIiwiXHU0ZTJhXHVmZmZkXHVmZmZkLmhrIiwiXHU3Yjg3XHU0ZWJhLmhrIiwiXHU3ZGIyXHU3ZWRjLmhrIiwiXHU3ZjUxXHU3ZWRjLmhrIiwiXHU3ZWM0XHU3ZTU0LmhrIiwiXHU3ZGIyXHU3ZDYxLmhrIiwi'@;
put 'XHU3ZjUxXHU3ZDYxLmhrIiwiXHU3ZWM0XHU3ZWM3LmhrIiwiXHU3ZDQ0XHU3ZTU0LmhrIiwiXHU3ZDQ0XHU3ZWM3LmhrIiwiaG0iLCJobiIsImNvbS5obiIsImVkdS5obiIsIm9yZy5obiIsIm5ldC5obiIsIm1pbC5obiIsImdvYi5obiIsImhyIiwiaXouaHIiLCJmcm9tLmhyIiwibmFtZS5o'@;
put 'ciIsImNvbS5ociIsImh0IiwiY29tLmh0Iiwic2hvcC5odCIsImZpcm0uaHQiLCJpbmZvLmh0IiwiYWR1bHQuaHQiLCJuZXQuaHQiLCJwcm8uaHQiLCJvcmcuaHQiLCJtZWQuaHQiLCJhcnQuaHQiLCJjb29wLmh0IiwicG9sLmh0IiwiYXNzby5odCIsImVkdS5odCIsInJlbC5odCIsImdvdXYu'@;
put 'aHQiLCJwZXJzby5odCIsImh1IiwiY28uaHUiLCJpbmZvLmh1Iiwib3JnLmh1IiwicHJpdi5odSIsInNwb3J0Lmh1IiwidG0uaHUiLCIyMDAwLmh1IiwiYWdyYXIuaHUiLCJib2x0Lmh1IiwiY2FzaW5vLmh1IiwiY2l0eS5odSIsImVyb3RpY2EuaHUiLCJlcm90aWthLmh1IiwiZmlsbS5odSIs'@;
put 'ImZvcnVtLmh1IiwiZ2FtZXMuaHUiLCJob3RlbC5odSIsImluZ2F0bGFuLmh1Iiwiam9nYXN6Lmh1Iiwia29ueXZlbG8uaHUiLCJsYWthcy5odSIsIm1lZGlhLmh1IiwibmV3cy5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzdWxpLmh1Iiwic3pleC5odSIsInRvenNkZS5o'@;
put 'dSIsInV0YXphcy5odSIsInZpZGVvLmh1IiwiaWQiLCJhYy5pZCIsImJpei5pZCIsImNvLmlkIiwiZGVzYS5pZCIsImdvLmlkIiwibWlsLmlkIiwibXkuaWQiLCJuZXQuaWQiLCJvci5pZCIsInBvbnBlcy5pZCIsInNjaC5pZCIsIndlYi5pZCIsImllIiwiZ292LmllIiwiaWwiLCJhYy5pbCIs'@;
put 'ImNvLmlsIiwiZ292LmlsIiwiaWRmLmlsIiwiazEyLmlsIiwibXVuaS5pbCIsIm5ldC5pbCIsIm9yZy5pbCIsImltIiwiYWMuaW0iLCJjby5pbSIsImNvbS5pbSIsImx0ZC5jby5pbSIsIm5ldC5pbSIsIm9yZy5pbSIsInBsYy5jby5pbSIsInR0LmltIiwidHYuaW0iLCJpbiIsImNvLmluIiwi'@;
put 'ZmlybS5pbiIsIm5ldC5pbiIsIm9yZy5pbiIsImdlbi5pbiIsImluZC5pbiIsIm5pYy5pbiIsImFjLmluIiwiZWR1LmluIiwicmVzLmluIiwiZ292LmluIiwibWlsLmluIiwiaW5mbyIsImludCIsImV1LmludCIsImlvIiwiY29tLmlvIiwiaXEiLCJnb3YuaXEiLCJlZHUuaXEiLCJtaWwuaXEi'@;
put 'LCJjb20uaXEiLCJvcmcuaXEiLCJuZXQuaXEiLCJpciIsImFjLmlyIiwiY28uaXIiLCJnb3YuaXIiLCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIs'@;
put 'ImlzIiwibmV0LmlzIiwiY29tLmlzIiwiZWR1LmlzIiwiZ292LmlzIiwib3JnLmlzIiwiaW50LmlzIiwiaXQiLCJnb3YuaXQiLCJlZHUuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9zdGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJiYXNpbGljYXRhLml0Iiwi'@;
put 'Y2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5pdCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxpYS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVsaWEuaXQiLCJmcml1bGkt'@;
put 'dmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJmcml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXpp'@;
put 'YWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJsYXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJsb21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUuaXQiLCJtb2wuaXQiLCJt'@;
put 'b2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1uLml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNpYy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0b3MuaXQiLCJ0b3NjYW5h'@;
put 'Lml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby1hLWFkaWdl'@;
put 'Lml0IiwidHJlbnRpbm8tYWFkaWdlLml0IiwidHJlbnRpbm8tYWx0by1hZGlnZS5pdCIsInRyZW50aW5vLWFsdG9hZGlnZS5pdCIsInRyZW50aW5vLXMtdGlyb2wuaXQiLCJ0cmVudGluby1zdGlyb2wuaXQiLCJ0cmVudGluby1zdWQtdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2QtdGlyb2wu'@;
put 'aXQiLCJ0cmVudGluby1zdWR0aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbm8tc3VlZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRpZ2UuaXQiLCJ0cmVudGlu'@;
put 'b2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRyZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQiLCJ0cmVudGlub3NceGZj'@;
put 'ZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRpbm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRyZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5zdWVkLXRp'@;
put 'cm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3RhLml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxsZS1kLWFvc3RhLml0Iiwi'@;
put 'dmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1hb3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0IiwidmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIsInZhbGxlZWFvc3RlLml0'@;
put 'IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIsImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJhbHRvLWFkaWdlLml0Iiwi'@;
put 'YWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9zdGEuaXQiLCJhb3N0ZS5p'@;
put 'dCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFyZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJhdi5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4t'@;
put 'c1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFsc2FuLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEuaXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5pdCIsImJnLml0IiwiYmku'@;
put 'aXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJib2xvZ25hLml0IiwiYm9semFuby1hbHRvYWRpZ2UuaXQiLCJib2x6YW5vLml0IiwiYm96ZW4tc3VkdGlyb2wuaXQiLCJib3plbi1zXHhmY2R0aXJvbC5pdCIsImJvemVuLXN1ZWR0aXJvbC5pdCIsImJvemVuLml0Iiwi'@;
put 'YnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNceGZjZHRpcm9sLml0IiwiYnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ1bHNhbi5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWdsaWFyaS5pdCIsImNhbHRh'@;
put 'bmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRhbm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNpYXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0IiwiY2FzZXJ0YS5pdCIs'@;
put 'ImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFmb3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJjbC5pdCIsImNuLml0Iiwi'@;
put 'Y28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3JlbW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2dsaWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5uYS5pdCIsImZjLml0Iiwi'@;
put 'ZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZpLml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEuaXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIsImZvcmxceGVjY2VzZW5h'@;
put 'Lml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9hLml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVzaWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImltLml0IiwiaW1wZXJpYS5p'@;
put 'dCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3BlemlhLml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2NlLml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5pdCIsImxvZGkuaXQiLCJs'@;
put 'dC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQiLCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVkaW9jYW1waWRhbm8uaXQi'@;
put 'LCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5pdCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS1icmlhbnphLml0IiwibW9uemEtZS1kZWxsYS1icmlhbnphLml0IiwibW9uemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJtb256YWVicmlhbnphLml0'@;
put 'IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3JvLml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8uaXQiLCJvbGJpYXRlbXBp'@;
put 'by5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJiaW5vLml0IiwicGVzYXJv'@;
put 'dXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJwaWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIsInBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJwdS5pdCIsInB2Lml0Iiwi'@;
put 'cHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJyYy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFicmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIsInJpZXRpLml0Iiwicmlt'@;
put 'aW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIsInJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQiLCJzb25kcmlvLml0Iiwi'@;
put 'c3AuaXQiLCJzci5pdCIsInNzLml0Iiwic3VlZHRpcm9sLml0Iiwic1x4ZmNkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIsInRuLml0IiwidG8uaXQi'@;
put 'LCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIsInRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJlbnRvLml0IiwidHJldmlz'@;
put 'by5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYuaXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVuZXppYS5pdCIsInZlbmlj'@;
put 'ZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0IiwiamUiLCJjby5qZSIsIm5l'@;
put 'dC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImNvbS5qbyIsIm9yZy5qbyIsIm5ldC5qbyIsImVkdS5qbyIsInNjaC5qbyIsImdvdi5qbyIsIm1pbC5qbyIsIm5hbWUuam8iLCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5qcCIsImdvLmpwIiwiZ3IuanAiLCJsZy5q'@;
put 'cCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3JpLmpwIiwiY2hpYmEuanAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9zaGltYS5qcCIsImhva2thaWRvLmpwIiwi'@;
put 'aHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIsImthZ2F3YS5qcCIsImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdpLmpwIiwibWl5YXpha2kuanAiLCJuYWdh'@;
put 'bm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0YS5qcCIsIm9rYXlhbWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNoaXp1b2thLmpwIiwidG9jaGlnaS5qcCIs'@;
put 'InRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5qcCIsIndha2F5YW1hLmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTYxMWJcdTc3ZTUuanAiLCJcdTYxMWJcdTVhOWIuanAiLCJc'@;
put 'dTUxNzVcdTVlYWIuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTgzMjhcdTU3Y2UuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJcdTUzNDNcdTg0NDkuanAiLCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJcdTY1YjBcdTZm'@;
put 'NWYuanAiLCJcdTk3NTJcdTY4ZWUuanAiLCJcdTk3NTlcdTVjYTEuanAiLCJcdTY3NzFcdTRlYWMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBcdThjYzAuanAiLCJcdTU5MjdcdTUyMDYu'@;
put 'anAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJcdTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMuanAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJcdTVjYTlcdTYyNGIuanAi'@;
put 'LCJcdTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTc5NWVcdTU5NDhcdTVkZGQuanAiLCJcdTc5OGZcdTRlOTUu'@;
put 'anAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVjZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdmYTRcdTk5YWMuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUxNTBcdTVjZjYuanAiLCIqLmthd2FzYWtp'@;
put 'LmpwIiwiKi5raXRha3l1c2h1LmpwIiwiKi5rb2JlLmpwIiwiKi5uYWdveWEuanAiLCIqLnNhcHBvcm8uanAiLCIqLnNlbmRhaS5qcCIsIioueW9rb2hhbWEuanAiLCIhY2l0eS5rYXdhc2FraS5qcCIsIiFjaXR5LmtpdGFreXVzaHUuanAiLCIhY2l0eS5rb2JlLmpwIiwiIWNpdHkubmFnb3lh'@;
put 'LmpwIiwiIWNpdHkuc2FwcG9yby5qcCIsIiFjaXR5LnNlbmRhaS5qcCIsIiFjaXR5Lnlva29oYW1hLmpwIiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGkuanAiLCJjaGl0YS5haWNoaS5qcCIsImZ1'@;
put 'c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpwIiwiaGF6dS5haWNoaS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWljaGkuanAiLCJpbnV5YW1hLmFpY2hpLmpw'@;
put 'IiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5haWNoaS5qcCIsImthcml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hpLmpwIiwia29uYW4uYWljaGkuanAiLCJr'@;
put 'b3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5qcCIsIm5pc2hpby5haWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9rYXpha2kuYWljaGkuanAiLCJvd2FyaWFz'@;
put 'YWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpwIiwic2hpbnNoaXJvLmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFpY2hpLmpwIiwidG9laS5haWNoaS5qcCIs'@;
put 'InRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hpLmpwIiwidG95b2FrZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFpY2hpLmpwIiwidHN1c2hpbWEuYWljaGku'@;
put 'anAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5ha2l0YS5qcCIsImZ1amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdhc2hpbmFydXNlLmFraXRhLmpwIiwiaG9u'@;
put 'am8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIsImthbWlrb2FuaS5ha2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIs'@;
put 'Imt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRhLmpwIiwibW9yaXlvc2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpwIiwib2dhdGEuYWtpdGEuanAiLCJzZW1i'@;
put 'b2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRhLmpwIiwiYW9tb3JpLmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFuYWkuYW9tb3JpLmpwIiwiaGlyb3Nha2ku'@;
put 'YW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9yaS5qcCIsIm1pc2F3YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2UuYW9tb3JpLmpwIiwib3dhbmkuYW9tb3Jp'@;
put 'LmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJzaGljaGlub2hlLmFvbW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmkuanAiLCJ0c3VydXRhLmFvbW9yaS5qcCIs'@;
put 'ImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEuanAiLCJjaG9zZWkuY2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpwIiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIs'@;
put 'ImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9taXlhLmNoaWJhLmpwIiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNoaXdhLmNoaWJhLmpwIiwia2F0b3JpLmNo'@;
put 'aWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwia2lzYXJhenUuY2hpYmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAiLCJtaWRvcmkuY2hpYmEuanAiLCJtaWhh'@;
put 'bWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJhLmpwIiwibXV0c3V6YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEu'@;
put 'anAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIsIm9uanVrdS5jaGliYS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJzaGlyYWtvLmNoaWJhLmpwIiwic2hpcm9p'@;
put 'LmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpwIiwic29zYS5jaGliYS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwidG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5'@;
put 'YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGliYS5qcCIsInlva2FpY2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAiLCJob25haS5laGltZS5qcCIsImlrYXRh'@;
put 'LmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImthbWlqaW1hLmVoaW1lLmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIsIm1hdHN1eWFtYS5laGltZS5qcCIsIm5h'@;
put 'bWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5qcCIsInNhaWpvLmVoaW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwidWNoaWtvLmVoaW1lLmpwIiwidXdhamlt'@;
put 'YS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3VpLmpwIiwiZWloZWlqaS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWkuanAiLCJtaW5hbWllY2hpemVuLmZ1a3Vp'@;
put 'LmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWkuanAiLCJzYWJhZS5mdWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpwIiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJi'@;
put 'dXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5mdWt1b2thLmpwIiwiY2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5qcCIsImRhemFpZnUuZnVrdW9rYS5qcCIs'@;
put 'ImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNoaS5mdWt1b2thLmpwIiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vva2EuanAiLCJrYWhvLmZ1a3Vva2EuanAi'@;
put 'LCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJhLmZ1a3Vva2EuanAiLCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJrdXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFt'@;
put 'aS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9rYS5qcCIsIm1peWF3YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAiLCJuYWthbWEuZnVrdW9rYS5qcCIsIm5p'@;
put 'c2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vva2EuanAiLCJva2FnYWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1b2thLmpwIiwib25vam8uZnVrdW9rYS5q'@;
put 'cCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1cmkuZnVrdW9rYS5qcCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1b2thLmpwIiwic3VlLmZ1a3Vva2EuanAi'@;
put 'LCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFrYXRhLmZ1a3Vva2EuanAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAiLCJ1bWkuZnVrdW9rYS5qcCIsInVzdWku'@;
put 'ZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpwIiwieWFuYWdhd2EuZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1'@;
put 'c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hpbWEuanAiLCJkYXRlLmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1hLmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5q'@;
put 'cCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIsImhpcm9uby5mdWt1c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAiLCJpd2FraS5mdWt1c2hpbWEuanAiLCJp'@;
put 'enVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAiLCJrYW5leWFtYS5mdWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwIiwia29vcmkuZnVrdXNoaW1h'@;
put 'LmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5qcCIsIm1paGFydS5mdWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5pc2hpYWl6dS5mdWt1c2hpbWEuanAiLCJu'@;
put 'aXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3RlZ28uZnVrdXNoaW1hLmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVrdXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1'@;
put 'a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1hLmpwIiwic3VrYWdhd2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hpbWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEu'@;
put 'anAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIsInlhbWF0c3VyaS5mdWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEuZ2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIs'@;
put 'ImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJoYXNoaW1hLmdpZnUuanAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAiLCJpa2VkYS5naWZ1LmpwIiwia2FrYW1p'@;
put 'Z2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1LmpwIiwia2FzYW1hdHN1LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwibWl0YWtlLmdpZnUuanAiLCJtaXp1bmFt'@;
put 'aS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1LmpwIiwib2dha2kuZ2lmdS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIsInRhamltaS5naWZ1LmpwIiwidGFrYXlh'@;
put 'bWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21pa2EuZ2lmdS5qcCIsIndhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3VubWEuanAiLCJjaGl5b2RhLmd1bm1hLmpw'@;
put 'IiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIsImlzZXNha2kuZ3VubWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIsImthd2FiYS5ndW5tYS5qcCIsImtpcnl1'@;
put 'Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpwIiwibWVpd2EuZ3VubWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5tYS5qcCIsIm5hbm1va3UuZ3VubWEuanAi'@;
put 'LCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEuanAiLCJvdGEuZ3VubWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5qcCIsInRha2FzYWtpLmd1bm1hLmpwIiwi'@;
put 'dGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlhc2hpLmd1bm1hLmpwIiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlvc2hpb2thLmd1bm1hLmpwIiwiYXNhbWlu'@;
put 'YW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEuaGlyb3NoaW1hLmpwIiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNoaWhpcm9zaGltYS5oaXJvc2hpbWEuanAi'@;
put 'LCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwIiwia2FpdGEuaGlyb3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5oaXJvc2hpbWEuanAiLCJtaXlvc2hpLmhp'@;
put 'cm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3NoaW1hLmpwIiwib3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1hLmpwIiwic2VyYW5pc2hpLmhpcm9zaGlt'@;
put 'YS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1hLmpwIiwidGFrZWhhcmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAiLCJha2FiaXJhLmhva2thaWRvLmpwIiwi'@;
put 'YWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFzaGliZXRzdS5ob2trYWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhva2thaWRvLmpwIiwiYmllaS5ob2trYWlk'@;
put 'by5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIsImJpcmF0b3JpLmhva2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImViZXRzdS5ob2trYWlkby5qcCIsImVtYmV0'@;
put 'c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2thaWRvLmpwIiwiZXNhbi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpwIiwiZnVyYW5vLmhva2thaWRvLmpwIiwi'@;
put 'ZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtvZGF0ZS5ob2trYWlkby5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2F3YS5ob2trYWlkby5q'@;
put 'cCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhva3V0by5ob2trYWlkby5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2VkYS5ob2trYWlkby5qcCIsImltYWthbmUu'@;
put 'aG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5ob2trYWlkby5qcCIsIml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3JvLmhva2thaWRvLmpwIiwia2FtaXN1bmFn'@;
put 'YXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUuaG9ra2FpZG8uanAiLCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpwIiwia2l0YW1p'@;
put 'Lmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUuaG9ra2FpZG8uanAiLCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGlyby5ob2trYWlkby5qcCIsImt1dGNoYW4u'@;
put 'aG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2FpZG8uanAiLCJtYXRzdW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2thaWRvLmpwIiwibW9zZXVzaGkuaG9ra2Fp'@;
put 'ZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpwIiwibmFpZS5ob2trYWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwIiwibmFuYWUuaG9ra2FpZG8uanAi'@;
put 'LCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVtdXJvLmhva2thaWRvLmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2JvcmliZXRzdS5ob2trYWlkby5qcCIsIm51bWF0'@;
put 'YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2trYWlkby5qcCIsIm9rZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9p'@;
put 'bmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9ra2FpZG8uanAiLCJwaXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8uanAiLCJyaXNoaXJpLmhva2thaWRvLmpw'@;
put 'IiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAiLCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJzaGliZXRzdS5ob2trYWlkby5qcCIsInNo'@;
put 'aWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFtYWtpLmhva2thaWRvLmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNoaW50b2t1Lmhva2thaWRvLmpwIiwic2hp'@;
put 'cmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJpdWNoaS5ob2trYWlkby5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhva2thaWRvLmpwIiwidGFraWthd2EuaG9r'@;
put 'a2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2trYWlkby5qcCIsInRvYmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5qcCIsInRveWEuaG9ra2FpZG8uanAiLCJ0'@;
put 'b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91cmEuaG9ra2FpZG8uanAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3UuaG9ra2FpZG8uanAiLCJ1cnl1Lmhva2th'@;
put 'aWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2FpZG8uanAiLCJ3YXNzYW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNoaS5oeW9nby5qcCIsImFrby5oeW9nby5q'@;
put 'cCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdvLmh5b2dvLmpwIiwiYXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEuaHlvZ28uanAiLCJoaW1lamkuaHlvZ28u'@;
put 'anAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFtaS5oeW9nby5qcCIsImtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2FzdWdhLmh5b2dvLmpwIiwia2F3YW5pc2hp'@;
put 'Lmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpwIiwibmlzaGlub21peWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5qcCIsInNhc2F5YW1hLmh5b2dvLmpwIiwi'@;
put 'c2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9nby5qcCIsInNoaXNvLmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28uanAiLCJ0YWthc2Fnby5oeW9nby5qcCIs'@;
put 'InRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9nby5qcCIsInRveW9va2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAiLCJhbWkuaWJhcmFraS5qcCIsImFzYWhp'@;
put 'LmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFraS5qcCIsImRhaWdvLmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAiLCJoaXRhY2hpb21peWEuaWJhcmFraS5q'@;
put 'cCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIsImluYS5pYmFyYWtpLmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpwIiwia2FtaXN1LmliYXJha2kuanAiLCJr'@;
put 'YXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdhdXJhLmliYXJha2kuanAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5ha2EuaWJhcmFraS5qcCIsIm5hbWVnYXRh'@;
put 'LmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5qcCIsIm9taXRhbWEuaWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNoaW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hp'@;
put 'bW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dhLmliYXJha2kuanAiLCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtpLmpwIiwidG9tb2JlLmliYXJha2kuanAi'@;
put 'LCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVyYS5pYmFyYWtpLmpwIiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtpLmpwIiwieWFtYWdhdGEuaWJhcmFraS5q'@;
put 'cCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6dS5pc2hpa2F3YS5qcCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2EuanAiLCJrYW5hemF3YS5pc2hpa2F3YS5q'@;
put 'cCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIsIm5ha2Fub3RvLmlzaGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlzaGlrYXdhLmpwIiwic2hpa2EuaXNoaWth'@;
put 'd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIsInRzdXJ1Z2kuaXNoaWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2EuaXdhdGUuanAiLCJoYW5hbWFraS5pd2F0'@;
put 'ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImljaGlub2hlLml3YXRlLmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAiLCJrYW1haXNoaS5pd2F0ZS5qcCIsImth'@;
put 'bmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdhdGUuanAiLCJraXRha2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0ZS5qcCIsIm1penVzYXdhLml3YXRlLmpw'@;
put 'IiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdhdGUuanAiLCJvZnVuYXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2EuaXdhdGUuanAiLCJzaGl6dWt1aXNoaS5p'@;
put 'd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwidG9uby5pd2F0ZS5qcCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2EuanAiLCJrYW5vbmppLmthZ2F3YS5qcCIs'@;
put 'ImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1lLmthZ2F3YS5qcCIsIm1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0YWthbWF0c3Uua2FnYXdhLmpwIiwidG9u'@;
put 'b3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdhd2EuanAiLCJ6ZW50c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJpc2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5r'@;
put 'YWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpwIiwia2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3NoaW1hLmpwIiwibWFrdXJhemFraS5rYWdv'@;
put 'c2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5rYWdvc2hpbWEuanAiLCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAiLCJzb28ua2Fnb3NoaW1hLmpwIiwidGFy'@;
put 'dW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdhLmthbmFnYXdhLmpwIiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3YS5qcCIsImZ1amlzYXdhLmthbmFnYXdh'@;
put 'LmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwiaGlyYXRzdWthLmthbmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5b2thd2Eua2FuYWdhd2EuanAiLCJtYXRz'@;
put 'dWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJtaXVyYS5rYW5hZ2F3YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdhd2EuanAiLCJvaXNvLmthbmFnYXdhLmpw'@;
put 'Iiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpwIiwidHN1a3VpLmthbmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFt'@;
put 'YS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpwIiwiZ2Vpc2VpLmtvY2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpwIiwia2FtaS5rb2NoaS5qcCIsImtpdGFn'@;
put 'YXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAiLCJtb3RveWFtYS5rb2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5qcCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIs'@;
put 'Im5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29jaGkuanAiLCJvdG95by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5qcCIsInRvc2Eua29jaGkuanAiLCJ0b3Nh'@;
put 'c2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5qcCIsInVtYWppLmtvY2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90by5qcCIsImFzby5rdW1hbW90by5qcCIs'@;
put 'ImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlhbWFrdXNhLmt1bWFtb3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVuZS5rdW1hbW90by5qcCIsIm1pbmFtYXRh'@;
put 'Lmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uua3VtYW1vdG8uanAiLCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5qcCIsInRha2Ftb3JpLmt1bWFtb3RvLmpw'@;
put 'IiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1bWFtb3RvLmpwIiwieWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8uanAiLCJoaWdhc2hpeWFtYS5reW90by5q'@;
put 'cCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAiLCJrYW1lb2thLmt5b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90YW1iYS5reW90by5qcCIsImt5b3RhbmFi'@;
put 'ZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5qcCIsIm1pbmFtaS5reW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lvLmt5b3RvLmpwIiwibmFrYWd5by5reW90'@;
put 'by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNha3lvLmt5b3RvLmpwIiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eua3lvdG8uanAiLCJ5YW1hc2hpbmEua3lv'@;
put 'dG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5taWUuanAiLCJpc2UubWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2EubWllLmpwIiwia29tb25vLm1pZS5qcCIs'@;
put 'Imt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5qcCIsIm1laXdhLm1pZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmkubWllLmpwIiwic2hpbWEubWllLmpwIiwi'@;
put 'c3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFraS5taWUuanAiLCJ0YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJhaS5taWUuanAiLCJ5b2trYWljaGkubWll'@;
put 'LmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwIiwiaXNoaW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2FzYWtpLm1peWFnaS5qcCIsIm1hcnVtb3Jp'@;
put 'Lm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2FucmlrdS5taXlhZ2kuanAiLCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9oaXJhLm1peWFnaS5qcCIsIm9uYWdhd2Eu'@;
put 'bWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJzZW1pbmUubWl5YWdpLmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEubWl5YWdpLmpwIiwic2hpcm9pc2hpLm1p'@;
put 'eWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0b21lLm1peWFnaS5qcCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIsInphby5taXlhZ2kuanAiLCJheWEubWl5'@;
put 'YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5qcCIsImh5dWdhLm1peWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtpdGFnYXdhLm1peWF6YWtpLmpwIiwia2l0'@;
put 'YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlhc2hpLm1peWF6YWtpLmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9qby5taXlhemFraS5qcCIsIm1peWF6YWtp'@;
put 'Lm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4ubWl5YXpha2kuanAiLCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXpha2kuanAiLCJzaGludG9taS5taXlhemFr'@;
put 'aS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2kuanAiLCJ0YWthemFraS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5hZ2Fuby5qcCIsImFva2kubmFnYW5vLmpw'@;
put 'IiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhva3UubmFnYW5vLmpwIiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhhcmEubmFnYW5vLmpwIiwiaGlyYXlhLm5h'@;
put 'Z2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlpeWFtYS5uYWdhbm8uanAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2FydWl6YXdhLm5hZ2Fuby5qcCIsImthd2Fr'@;
put 'YW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanAiLCJraXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIsIm1hdHN1bW90by5uYWdhbm8uanAiLCJt'@;
put 'aWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1ha2kubmFnYW5vLmpwIiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5qcCIsIm1vY2hpenVraS5uYWdhbm8uanAi'@;
put 'LCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5uYWdhbm8uanAiLCJuYWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwib2dhd2EubmFnYW5vLmpwIiwib2theWEu'@;
put 'bmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJvb2t1d2EubmFnYW5vLmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJzYWtha2kubmFnYW5vLmpwIiwic2FrdS5u'@;
put 'YWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5qcCIsInNoaW5hbm9tYWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2kubmFnYW5vLmpwIiwidGFrYW1vcmkubmFn'@;
put 'YW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5qcCIsInRhdHN1bm8ubmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5vLmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5'@;
put 'YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2FrYS5uYWdhbm8uanAiLCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAiLCJoYXNhbWkubmFnYXNha2kuanAiLCJo'@;
put 'aXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5hZ2FzYWtpLmpwIiwia2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5uYWdhc2FraS5qcCIsIm9iYW1hLm5hZ2Fz'@;
put 'YWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIsInNhaWthaS5uYWdhc2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmthbWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9n'@;
put 'aXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4ubmFnYXNha2kuanAiLCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdhLm5hcmEuanAiLCJpa29tYS5uYXJhLmpw'@;
put 'Iiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNoaWJhLm5hcmEuanAiLCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdhbmlzaGkubmFyYS5qcCIsImtvcnlvLm5h'@;
put 'cmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlha2UubmFyYS5qcCIsIm5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJzYWt1cmFpLm5hcmEuanAiLCJzYW5nby5u'@;
put 'YXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEuanAiLCJzaGluam8ubmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAiLCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5h'@;
put 'cmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5hcmEuanAiLCJ5YW1hem9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRhLmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5q'@;
put 'cCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJrYW1vLm5paWdhdGEuanAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1a2UubmlpZ2F0YS5qcCIsIm11aWthLm5p'@;
put 'aWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5qcCIsIm5hZ2Fva2EubmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0YS5qcCIsInNhbmpvLm5paWdhdGEuanAi'@;
put 'LCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3YS5uaWlnYXRhLmpwIiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpwIiwidG9rYW1hY2hpLm5paWdhdGEuanAi'@;
put 'LCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVtYS5uaWlnYXRhLmpwIiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVuZ29vbm8ub2l0YS5qcCIsImJ1bmdvdGFr'@;
put 'YWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhpbWVzaGltYS5vaXRhLmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtpLm9pdGEuanAiLCJrdXN1Lm9pdGEuanAi'@;
put 'LCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAiLCJ0c3VrdW1pLm9pdGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hpLm9rYXlhbWEuanAiLCJiaXplbi5va2F5'@;
put 'YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpwIiwia2FnYW1pbm8ub2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJhc2hpa2kub2theWFtYS5qcCIsIm1hbml3'@;
put 'YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEuanAiLCJuaWltaS5va2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJzZXRvdWNoaS5va2F5YW1hLmpwIiwic2hp'@;
put 'bmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEuanAiLCJ0YWthaGFzaGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdlLm9rYXlhbWEuanAiLCJhZ3VuaS5va2lu'@;
put 'YXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAiLCJndXNoaWthbWkub2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEub2tpbmF3YS5qcCIsImlzaGlnYWtpLm9r'@;
put 'aW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2EuanAiLCJpemVuYS5va2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2FndXN1a3Uub2tpbmF3YS5qcCIsImt1bWVq'@;
put 'aW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFpdG8ub2tpbmF3YS5qcCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpwIiwibmFraWppbi5va2luYXdhLmpwIiwi'@;
put 'bmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWkub2tpbmF3YS5qcCIsIm9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAiLCJ0YXJhbWEub2tpbmF3YS5qcCIsInRv'@;
put 'a2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9uYWtpLm9raW5hd2EuanAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpwIiwieW9uYWJhcnUub2tpbmF3YS5qcCIs'@;
put 'InlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5vLm9zYWthLmpwIiwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJoYWJpa2luby5vc2FrYS5qcCIsImhhbm5h'@;
put 'bi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1peW9zaGkub3Nha2EuanAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2FrYS5qcCIsIml6dW1pLm9zYWthLmpwIiwi'@;
put 'aXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21hLm9zYWthLmpwIiwia2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNoaW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hp'@;
put 'd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5qcCIsIm1hdHN1YmFyYS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWthLmpwIiwibmV5YWdhd2Eub3Nha2EuanAi'@;
put 'LCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5vc2FrYS5qcCIsInNha2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUub3Nha2EuanAiLCJzaGltYW1vdG8ub3Nh'@;
put 'a2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlzaGkub3Nha2EuanAiLCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5qcCIsInRveW9uYWthLm9zYWthLmpwIiwi'@;
put 'dG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAiLCJhcml0YS5zYWdhLmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFyaS5zYWdhLmpwIiwia2FtaW1pbmUuc2Fn'@;
put 'YS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hpbWEuc2FnYS5qcCIsImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdpLnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNh'@;
put 'Z2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2FnYS5qcCIsInNhZ2Euc2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlub2dhcmkuc2FnYS5qcCIsImFyYWthd2Eu'@;
put 'c2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1hLmpwIiwiZnVqaW1pLnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUuc2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0'@;
put 'YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEuanAiLCJoaWRha2Euc2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2FpdGFtYS5qcCIsImluYS5zYWl0YW1hLmpw'@;
put 'IiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1paXp1bWkuc2FpdGFtYS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uuc2FpdGFtYS5qcCIsImthd2FndWNoaS5z'@;
put 'YWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5qcCIsImtpdGFtb3RvLnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFnYXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1'@;
put 'c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0YW1hLmpwIiwibWl5YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5qcCIsIm5hbWVnYXdhLnNhaXRhbWEuanAi'@;
put 'LCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNhaXRhbWEuanAiLCJvZ29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56YW4uc2FpdGFtYS5qcCIsInJ5b2thbWku'@;
put 'c2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1hLmpwIiwic2F0dGUuc2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNhaXRhbWEuanAiLCJzdWdpdG8uc2FpdGFt'@;
put 'YS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0b2tvcm96YXdhLnNhaXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hpby5zYWl0YW1hLmpwIiwieW9rb3plLnNh'@;
put 'aXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwieW9zaGlkYS5zYWl0YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2EuanAiLCJoaWdhc2hpb21pLnNoaWdhLmpw'@;
put 'IiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdhLmpwIiwia29zZWkuc2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5qcCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwi'@;
put 'bmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNoaW1hbi5zaGlnYS5qcCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRzdWtpLnNoaWdhLmpwIiwidG9yYWhpbWUu'@;
put 'c2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJha2FnaS5zaGltYW5lLmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcCIsImhpa2F3YS5zaGltYW5lLmpw'@;
put 'IiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5va2kuc2hpbWFuZS5qcCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGltYW5lLmpwIiwib2hkYS5zaGltYW5lLmpw'@;
put 'Iiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIsInNoaW1hbmUuc2hpbWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGltYW5lLmpwIiwieWFzdWdpLnNoaW1hbmUu'@;
put 'anAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRhbWkuc2hpenVva2EuanAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hp'@;
put 'enVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9rYS5qcCIsImhhbWFtYXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIsIml6dS5zaGl6dW9rYS5qcCIsIml6dW5v'@;
put 'a3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFtaS5zaGl6dW9rYS5qcCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hpenVva2EuanAiLCJtYWtpbm9oYXJhLnNo'@;
put 'aXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNoaXp1b2thLmpwIiwibWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1b2thLmpwIiwib21hZXpha2kuc2hpenVv'@;
put 'a2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5qcCIsInNoaW1vZGEuc2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9zaGlkYS5zaGl6dW9rYS5qcCIsImFzaGlr'@;
put 'YWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2kuanAiLCJpY2hpa2FpLnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImthcmFzdXlhbWEudG9jaGlnaS5qcCIsImt1'@;
put 'cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9jaGlnaS5qcCIsIm1va2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJuaWtrby50b2NoaWdpLmpwIiwibmlzaGlr'@;
put 'YXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdpLmpwIiwib2h0YXdhcmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1a2UudG9jaGlnaS5qcCIsInNoaW95YS50'@;
put 'b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2NoaWdpLmpwIiwidHN1Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6dW1pLnRva3VzaGltYS5qcCIsImFuYW4u'@;
put 'dG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3VzaGltYS5qcCIsImthaW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRva3VzaGltYS5qcCIsIm1pbmFtaS50b2t1'@;
put 'c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1hLmpwIiwibmFrYWdhd2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwIiwidG9rdXNoaW1hLnRva3Vz'@;
put 'aGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAiLCJha2lydW5vLnRva3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lvLmpwIiwiY2hpeW9kYS50b2t5by5qcCIs'@;
put 'ImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8uanAiLCJmdWNodS50b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpwIiwiaGlnYXNoaWt1cnVtZS50b2t5by5q'@;
put 'cCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9reW8uanAiLCJoaW5vLnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lvLmpwIiwia2F0c3VzaGlrYS50b2t5by5q'@;
put 'cCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRva3lvLmpwIiwia29nYW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEudG9reW8uanAiLCJrdW5pdGFjaGkudG9r'@;
put 'eW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWluYXRvLnRva3lvLmpwIiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lvLmpwIiwibmFrYW5vLnRva3lvLmpwIiwi'@;
put 'bmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50b2t5by5qcCIsIm9tZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5qcCIsInNoaW5hZ2F3YS50b2t5by5qcCIs'@;
put 'InNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEudG9reW8uanAiLCJ0YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90dG9yaS5qcCIsImhpbm8udG90dG9yaS5q'@;
put 'cCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3RvdXJhLnRvdHRvcmkuanAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90dG9yaS5qcCIsInRvdHRvcmkudG90dG9y'@;
put 'aS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9uYWdvLnRvdHRvcmkuanAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5qcCIsImhpbWkudG95YW1hLmpwIiwiaW1p'@;
put 'enUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5qcCIsImthbWlpY2hpLnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5hbnRvLnRveWFtYS5qcCIsIm55dXplbi50'@;
put 'b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0YWthb2thLnRveWFtYS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAiLCJ1bmF6dWtpLnRveWFtYS5qcCIsInVv'@;
put 'enUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1hLmpwIiwiYXJpZGFnYXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIsImhpcm9nYXdhLndha2F5YW1hLmpwIiwi'@;
put 'aW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53YWtheWFtYS5qcCIsImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndha2F5YW1hLmpwIiwia2l0YXlhbWEud2Fr'@;
put 'YXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIsImtvemFnYXdhLndha2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJtaXNhdG8ud2FrYXlhbWEuanAiLCJuYWNo'@;
put 'aWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hpcmFoYW1hLndha2F5YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndha2F5YW1hLmpwIiwieXVyYS53YWtheWFt'@;
put 'YS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAiLCJoaWdhc2hpbmUueWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImthbmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3'@;
put 'YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1pa2F3YS55YW1hZ2F0YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlhbWFnYXRhLmpwIiwibmlzaGlrYXdhLnlh'@;
put 'bWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEuanAiLCJvZ3VuaS55YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0YS55YW1hZ2F0YS5qcCIsInNha2VnYXdh'@;
put 'LnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlhbWFnYXRhLmpwIiwic2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5qcCIsInRzdXJ1b2thLnlhbWFnYXRhLmpw'@;
put 'IiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIsInlvbmV6YXdhLnlhbWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1hZ3VjaGkuanAiLCJob2Z1LnlhbWFndWNo'@;
put 'aS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNoaS5qcCIsIm1pdG91LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hpLmpwIiwic2h1bmFuLnlhbWFndWNoaS5q'@;
put 'cCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAiLCJ0b3lvdGEueWFtYWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFuYXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5h'@;
put 'c2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNoaS5qcCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hpa2F3YW1pc2F0by55YW1hbmFzaGkuanAi'@;
put 'LCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55YW1hbmFzaGkuanAiLCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNoaS55YW1hbmFzaGkuanAiLCJuYW5idS55'@;
put 'YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55YW1hbmFzaGkuanAiLCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55'@;
put 'YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1hbmFzaGkuanAiLCJ5YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImluZm8ua2UiLCJtZS5rZSIsIm1vYmkua2Ui'@;
put 'LCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsIm9yZy5rZyIsIm5ldC5rZyIsImNvbS5rZyIsImVkdS5rZyIsImdvdi5rZyIsIm1pbC5rZyIsIioua2giLCJraSIsImVkdS5raSIsImJpei5raSIsIm5ldC5raSIsIm9yZy5raSIsImdvdi5raSIsImluZm8ua2kiLCJjb20ua2kiLCJrbSIs'@;
put 'Im9yZy5rbSIsIm5vbS5rbSIsImdvdi5rbSIsInByZC5rbSIsInRtLmttIiwiZWR1LmttIiwibWlsLmttIiwiYXNzLmttIiwiY29tLmttIiwiY29vcC5rbSIsImFzc28ua20iLCJwcmVzc2Uua20iLCJtZWRlY2luLmttIiwibm90YWlyZXMua20iLCJwaGFybWFjaWVucy5rbSIsInZldGVyaW5h'@;
put 'aXJlLmttIiwiZ291di5rbSIsImtuIiwibmV0LmtuIiwib3JnLmtuIiwiZWR1LmtuIiwiZ292LmtuIiwia3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJlcy5rciIsImdvLmtyIiwiaHMua3IiLCJr'@;
put 'Zy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwicmUua3IiLCJzYy5rciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJnd2FuZ2p1LmtyIiwiZ3llb25nYnVrLmty'@;
put 'IiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVqdS5rciIsImplb25idWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3Jn'@;
put 'Lmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJreiIsIm9yZy5reiIsImVkdS5reiIsIm5ldC5reiIsImdvdi5reiIsIm1pbC5reiIsImNvbS5reiIsImxhIiwiaW50LmxhIiwibmV0LmxhIiwiaW5mby5sYSIsImVkdS5sYSIsImdvdi5sYSIsInBlci5sYSIs'@;
put 'ImNvbS5sYSIsIm9yZy5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292LmxiIiwibmV0LmxiIiwib3JnLmxiIiwibGMiLCJjb20ubGMiLCJuZXQubGMiLCJjby5sYyIsIm9yZy5sYyIsImVkdS5sYyIsImdvdi5sYyIsImxpIiwibGsiLCJnb3YubGsiLCJzY2gubGsiLCJuZXQubGsiLCJp'@;
put 'bnQubGsiLCJjb20ubGsiLCJvcmcubGsiLCJlZHUubGsiLCJuZ28ubGsiLCJzb2MubGsiLCJ3ZWIubGsiLCJsdGQubGsiLCJhc3NuLmxrIiwiZ3JwLmxrIiwiaG90ZWwubGsiLCJhYy5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwib3JnLmxyIiwibmV0LmxyIiwibHMiLCJh'@;
put 'Yy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5scyIsIm5ldC5scyIsIm9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiY29tLmx2IiwiZWR1Lmx2IiwiZ292Lmx2Iiwib3JnLmx2IiwibWlsLmx2IiwiaWQubHYiLCJuZXQubHYiLCJh'@;
put 'c24ubHYiLCJjb25mLmx2IiwibHkiLCJjb20ubHkiLCJuZXQubHkiLCJnb3YubHkiLCJwbGMubHkiLCJlZHUubHkiLCJzY2gubHkiLCJtZWQubHkiLCJvcmcubHkiLCJpZC5seSIsIm1hIiwiY28ubWEiLCJuZXQubWEiLCJnb3YubWEiLCJvcmcubWEiLCJhYy5tYSIsInByZXNzLm1hIiwibWMi'@;
put 'LCJ0bS5tYyIsImFzc28ubWMiLCJtZCIsIm1lIiwiY28ubWUiLCJuZXQubWUiLCJvcmcubWUiLCJlZHUubWUiLCJhYy5tZSIsImdvdi5tZSIsIml0cy5tZSIsInByaXYubWUiLCJtZyIsIm9yZy5tZyIsIm5vbS5tZyIsImdvdi5tZyIsInByZC5tZyIsInRtLm1nIiwiZWR1Lm1nIiwibWlsLm1n'@;
put 'IiwiY29tLm1nIiwiY28ubWciLCJtaCIsIm1pbCIsIm1rIiwiY29tLm1rIiwib3JnLm1rIiwibmV0Lm1rIiwiZWR1Lm1rIiwiZ292Lm1rIiwiaW5mLm1rIiwibmFtZS5tayIsIm1sIiwiY29tLm1sIiwiZWR1Lm1sIiwiZ291di5tbCIsImdvdi5tbCIsIm5ldC5tbCIsIm9yZy5tbCIsInByZXNz'@;
put 'ZS5tbCIsIioubW0iLCJtbiIsImdvdi5tbiIsImVkdS5tbiIsIm9yZy5tbiIsIm1vIiwiY29tLm1vIiwibmV0Lm1vIiwib3JnLm1vIiwiZWR1Lm1vIiwiZ292Lm1vIiwibW9iaSIsIm1wIiwibXEiLCJtciIsImdvdi5tciIsIm1zIiwiY29tLm1zIiwiZWR1Lm1zIiwiZ292Lm1zIiwibmV0Lm1z'@;
put 'Iiwib3JnLm1zIiwibXQiLCJjb20ubXQiLCJlZHUubXQiLCJuZXQubXQiLCJvcmcubXQiLCJtdSIsImNvbS5tdSIsIm5ldC5tdSIsIm9yZy5tdSIsImdvdi5tdSIsImFjLm11IiwiY28ubXUiLCJvci5tdSIsIm11c2V1bSIsImFjYWRlbXkubXVzZXVtIiwiYWdyaWN1bHR1cmUubXVzZXVtIiwi'@;
put 'YWlyLm11c2V1bSIsImFpcmd1YXJkLm11c2V1bSIsImFsYWJhbWEubXVzZXVtIiwiYWxhc2thLm11c2V1bSIsImFtYmVyLm11c2V1bSIsImFtYnVsYW5jZS5tdXNldW0iLCJhbWVyaWNhbi5tdXNldW0iLCJhbWVyaWNhbmEubXVzZXVtIiwiYW1lcmljYW5hbnRpcXVlcy5tdXNldW0iLCJhbWVy'@;
put 'aWNhbmFydC5tdXNldW0iLCJhbXN0ZXJkYW0ubXVzZXVtIiwiYW5kLm11c2V1bSIsImFubmVmcmFuay5tdXNldW0iLCJhbnRocm8ubXVzZXVtIiwiYW50aHJvcG9sb2d5Lm11c2V1bSIsImFudGlxdWVzLm11c2V1bSIsImFxdWFyaXVtLm11c2V1bSIsImFyYm9yZXR1bS5tdXNldW0iLCJhcmNo'@;
put 'YWVvbG9naWNhbC5tdXNldW0iLCJhcmNoYWVvbG9neS5tdXNldW0iLCJhcmNoaXRlY3R1cmUubXVzZXVtIiwiYXJ0Lm11c2V1bSIsImFydGFuZGRlc2lnbi5tdXNldW0iLCJhcnRjZW50ZXIubXVzZXVtIiwiYXJ0ZGVjby5tdXNldW0iLCJhcnRlZHVjYXRpb24ubXVzZXVtIiwiYXJ0Z2FsbGVy'@;
put 'eS5tdXNldW0iLCJhcnRzLm11c2V1bSIsImFydHNhbmRjcmFmdHMubXVzZXVtIiwiYXNtYXRhcnQubXVzZXVtIiwiYXNzYXNzaW5hdGlvbi5tdXNldW0iLCJhc3Npc2kubXVzZXVtIiwiYXNzb2NpYXRpb24ubXVzZXVtIiwiYXN0cm9ub215Lm11c2V1bSIsImF0bGFudGEubXVzZXVtIiwiYXVz'@;
put 'dGluLm11c2V1bSIsImF1c3RyYWxpYS5tdXNldW0iLCJhdXRvbW90aXZlLm11c2V1bSIsImF2aWF0aW9uLm11c2V1bSIsImF4aXMubXVzZXVtIiwiYmFkYWpvei5tdXNldW0iLCJiYWdoZGFkLm11c2V1bSIsImJhaG4ubXVzZXVtIiwiYmFsZS5tdXNldW0iLCJiYWx0aW1vcmUubXVzZXVtIiwi'@;
put 'YmFyY2Vsb25hLm11c2V1bSIsImJhc2ViYWxsLm11c2V1bSIsImJhc2VsLm11c2V1bSIsImJhdGhzLm11c2V1bSIsImJhdWVybi5tdXNldW0iLCJiZWF1eGFydHMubXVzZXVtIiwiYmVlbGRlbmdlbHVpZC5tdXNldW0iLCJiZWxsZXZ1ZS5tdXNldW0iLCJiZXJnYmF1Lm11c2V1bSIsImJlcmtl'@;
put 'bGV5Lm11c2V1bSIsImJlcmxpbi5tdXNldW0iLCJiZXJuLm11c2V1bSIsImJpYmxlLm11c2V1bSIsImJpbGJhby5tdXNldW0iLCJiaWxsLm11c2V1bSIsImJpcmRhcnQubXVzZXVtIiwiYmlydGhwbGFjZS5tdXNldW0iLCJib25uLm11c2V1bSIsImJvc3Rvbi5tdXNldW0iLCJib3RhbmljYWwu'@;
put 'bXVzZXVtIiwiYm90YW5pY2FsZ2FyZGVuLm11c2V1bSIsImJvdGFuaWNnYXJkZW4ubXVzZXVtIiwiYm90YW55Lm11c2V1bSIsImJyYW5keXdpbmV2YWxsZXkubXVzZXVtIiwiYnJhc2lsLm11c2V1bSIsImJyaXN0b2wubXVzZXVtIiwiYnJpdGlzaC5tdXNldW0iLCJicml0aXNoY29sdW1iaWEu'@;
put 'bXVzZXVtIiwiYnJvYWRjYXN0Lm11c2V1bSIsImJydW5lbC5tdXNldW0iLCJicnVzc2VsLm11c2V1bSIsImJydXNzZWxzLm11c2V1bSIsImJydXhlbGxlcy5tdXNldW0iLCJidWlsZGluZy5tdXNldW0iLCJidXJnaG9mLm11c2V1bSIsImJ1cy5tdXNldW0iLCJidXNoZXkubXVzZXVtIiwiY2Fk'@;
put 'YXF1ZXMubXVzZXVtIiwiY2FsaWZvcm5pYS5tdXNldW0iLCJjYW1icmlkZ2UubXVzZXVtIiwiY2FuLm11c2V1bSIsImNhbmFkYS5tdXNldW0iLCJjYXBlYnJldG9uLm11c2V1bSIsImNhcnJpZXIubXVzZXVtIiwiY2FydG9vbmFydC5tdXNldW0iLCJjYXNhZGVsYW1vbmVkYS5tdXNldW0iLCJj'@;
put 'YXN0bGUubXVzZXVtIiwiY2FzdHJlcy5tdXNldW0iLCJjZWx0aWMubXVzZXVtIiwiY2VudGVyLm11c2V1bSIsImNoYXR0YW5vb2dhLm11c2V1bSIsImNoZWx0ZW5oYW0ubXVzZXVtIiwiY2hlc2FwZWFrZWJheS5tdXNldW0iLCJjaGljYWdvLm11c2V1bSIsImNoaWxkcmVuLm11c2V1bSIsImNo'@;
put 'aWxkcmVucy5tdXNldW0iLCJjaGlsZHJlbnNnYXJkZW4ubXVzZXVtIiwiY2hpcm9wcmFjdGljLm11c2V1bSIsImNob2NvbGF0ZS5tdXNldW0iLCJjaHJpc3RpYW5zYnVyZy5tdXNldW0iLCJjaW5jaW5uYXRpLm11c2V1bSIsImNpbmVtYS5tdXNldW0iLCJjaXJjdXMubXVzZXVtIiwiY2l2aWxp'@;
put 'c2F0aW9uLm11c2V1bSIsImNpdmlsaXphdGlvbi5tdXNldW0iLCJjaXZpbHdhci5tdXNldW0iLCJjbGludG9uLm11c2V1bSIsImNsb2NrLm11c2V1bSIsImNvYWwubXVzZXVtIiwiY29hc3RhbGRlZmVuY2UubXVzZXVtIiwiY29keS5tdXNldW0iLCJjb2xkd2FyLm11c2V1bSIsImNvbGxlY3Rp'@;
put 'b24ubXVzZXVtIiwiY29sb25pYWx3aWxsaWFtc2J1cmcubXVzZXVtIiwiY29sb3JhZG9wbGF0ZWF1Lm11c2V1bSIsImNvbHVtYmlhLm11c2V1bSIsImNvbHVtYnVzLm11c2V1bSIsImNvbW11bmljYXRpb24ubXVzZXVtIiwiY29tbXVuaWNhdGlvbnMubXVzZXVtIiwiY29tbXVuaXR5Lm11c2V1'@;
put 'bSIsImNvbXB1dGVyLm11c2V1bSIsImNvbXB1dGVyaGlzdG9yeS5tdXNldW0iLCJjb211bmljYVx4ZTdceGY1ZXMubXVzZXVtIiwiY29udGVtcG9yYXJ5Lm11c2V1bSIsImNvbnRlbXBvcmFyeWFydC5tdXNldW0iLCJjb252ZW50Lm11c2V1bSIsImNvcGVuaGFnZW4ubXVzZXVtIiwiY29ycG9y'@;
put 'YXRpb24ubXVzZXVtIiwiY29ycmVpb3MtZS10ZWxlY29tdW5pY2FceGU3XHhmNWVzLm11c2V1bSIsImNvcnZldHRlLm11c2V1bSIsImNvc3R1bWUubXVzZXVtIiwiY291bnRyeWVzdGF0ZS5tdXNldW0iLCJjb3VudHkubXVzZXVtIiwiY3JhZnRzLm11c2V1bSIsImNyYW5icm9vay5tdXNldW0i'@;
put 'LCJjcmVhdGlvbi5tdXNldW0iLCJjdWx0dXJhbC5tdXNldW0iLCJjdWx0dXJhbGNlbnRlci5tdXNldW0iLCJjdWx0dXJlLm11c2V1bSIsImN5YmVyLm11c2V1bSIsImN5bXJ1Lm11c2V1bSIsImRhbGkubXVzZXVtIiwiZGFsbGFzLm11c2V1bSIsImRhdGFiYXNlLm11c2V1bSIsImRkci5tdXNl'@;
put 'dW0iLCJkZWNvcmF0aXZlYXJ0cy5tdXNldW0iLCJkZWxhd2FyZS5tdXNldW0iLCJkZWxtZW5ob3JzdC5tdXNldW0iLCJkZW5tYXJrLm11c2V1bSIsImRlcG90Lm11c2V1bSIsImRlc2lnbi5tdXNldW0iLCJkZXRyb2l0Lm11c2V1bSIsImRpbm9zYXVyLm11c2V1bSIsImRpc2NvdmVyeS5tdXNl'@;
put 'dW0iLCJkb2xscy5tdXNldW0iLCJkb25vc3RpYS5tdXNldW0iLCJkdXJoYW0ubXVzZXVtIiwiZWFzdGFmcmljYS5tdXNldW0iLCJlYXN0Y29hc3QubXVzZXVtIiwiZWR1Y2F0aW9uLm11c2V1bSIsImVkdWNhdGlvbmFsLm11c2V1bSIsImVneXB0aWFuLm11c2V1bSIsImVpc2VuYmFobi5tdXNl'@;
put 'dW0iLCJlbGJ1cmcubXVzZXVtIiwiZWx2ZW5kcmVsbC5tdXNldW0iLCJlbWJyb2lkZXJ5Lm11c2V1bSIsImVuY3ljbG9wZWRpYy5tdXNldW0iLCJlbmdsYW5kLm11c2V1bSIsImVudG9tb2xvZ3kubXVzZXVtIiwiZW52aXJvbm1lbnQubXVzZXVtIiwiZW52aXJvbm1lbnRhbGNvbnNlcnZhdGlv'@;
put 'bi5tdXNldW0iLCJlcGlsZXBzeS5tdXNldW0iLCJlc3NleC5tdXNldW0iLCJlc3RhdGUubXVzZXVtIiwiZXRobm9sb2d5Lm11c2V1bSIsImV4ZXRlci5tdXNldW0iLCJleGhpYml0aW9uLm11c2V1bSIsImZhbWlseS5tdXNldW0iLCJmYXJtLm11c2V1bSIsImZhcm1lcXVpcG1lbnQubXVzZXVt'@;
put 'IiwiZmFybWVycy5tdXNldW0iLCJmYXJtc3RlYWQubXVzZXVtIiwiZmllbGQubXVzZXVtIiwiZmlndWVyZXMubXVzZXVtIiwiZmlsYXRlbGlhLm11c2V1bSIsImZpbG0ubXVzZXVtIiwiZmluZWFydC5tdXNldW0iLCJmaW5lYXJ0cy5tdXNldW0iLCJmaW5sYW5kLm11c2V1bSIsImZsYW5kZXJz'@;
put 'Lm11c2V1bSIsImZsb3JpZGEubXVzZXVtIiwiZm9yY2UubXVzZXVtIiwiZm9ydG1pc3NvdWxhLm11c2V1bSIsImZvcnR3b3J0aC5tdXNldW0iLCJmb3VuZGF0aW9uLm11c2V1bSIsImZyYW5jYWlzZS5tdXNldW0iLCJmcmFua2Z1cnQubXVzZXVtIiwiZnJhbnppc2thbmVyLm11c2V1bSIsImZy'@;
put 'ZWVtYXNvbnJ5Lm11c2V1bSIsImZyZWlidXJnLm11c2V1bSIsImZyaWJvdXJnLm11c2V1bSIsImZyb2cubXVzZXVtIiwiZnVuZGFjaW8ubXVzZXVtIiwiZnVybml0dXJlLm11c2V1bSIsImdhbGxlcnkubXVzZXVtIiwiZ2FyZGVuLm11c2V1bSIsImdhdGV3YXkubXVzZXVtIiwiZ2VlbHZpbmNr'@;
put 'Lm11c2V1bSIsImdlbW9sb2dpY2FsLm11c2V1bSIsImdlb2xvZ3kubXVzZXVtIiwiZ2VvcmdpYS5tdXNldW0iLCJnaWVzc2VuLm11c2V1bSIsImdsYXMubXVzZXVtIiwiZ2xhc3MubXVzZXVtIiwiZ29yZ2UubXVzZXVtIiwiZ3JhbmRyYXBpZHMubXVzZXVtIiwiZ3Jhei5tdXNldW0iLCJndWVy'@;
put 'bnNleS5tdXNldW0iLCJoYWxsb2ZmYW1lLm11c2V1bSIsImhhbWJ1cmcubXVzZXVtIiwiaGFuZHNvbi5tdXNldW0iLCJoYXJ2ZXN0Y2VsZWJyYXRpb24ubXVzZXVtIiwiaGF3YWlpLm11c2V1bSIsImhlYWx0aC5tdXNldW0iLCJoZWltYXR1bmR1aHJlbi5tdXNldW0iLCJoZWxsYXMubXVzZXVt'@;
put 'IiwiaGVsc2lua2kubXVzZXVtIiwiaGVtYnlnZHNmb3JidW5kLm11c2V1bSIsImhlcml0YWdlLm11c2V1bSIsImhpc3RvaXJlLm11c2V1bSIsImhpc3RvcmljYWwubXVzZXVtIiwiaGlzdG9yaWNhbHNvY2lldHkubXVzZXVtIiwiaGlzdG9yaWNob3VzZXMubXVzZXVtIiwiaGlzdG9yaXNjaC5t'@;
put 'dXNldW0iLCJoaXN0b3Jpc2NoZXMubXVzZXVtIiwiaGlzdG9yeS5tdXNldW0iLCJoaXN0b3J5b2ZzY2llbmNlLm11c2V1bSIsImhvcm9sb2d5Lm11c2V1bSIsImhvdXNlLm11c2V1bSIsImh1bWFuaXRpZXMubXVzZXVtIiwiaWxsdXN0cmF0aW9uLm11c2V1bSIsImltYWdlYW5kc291bmQubXVz'@;
put 'ZXVtIiwiaW5kaWFuLm11c2V1bSIsImluZGlhbmEubXVzZXVtIiwiaW5kaWFuYXBvbGlzLm11c2V1bSIsImluZGlhbm1hcmtldC5tdXNldW0iLCJpbnRlbGxpZ2VuY2UubXVzZXVtIiwiaW50ZXJhY3RpdmUubXVzZXVtIiwiaXJhcS5tdXNldW0iLCJpcm9uLm11c2V1bSIsImlzbGVvZm1hbi5t'@;
put 'dXNldW0iLCJqYW1pc29uLm11c2V1bSIsImplZmZlcnNvbi5tdXNldW0iLCJqZXJ1c2FsZW0ubXVzZXVtIiwiamV3ZWxyeS5tdXNldW0iLCJqZXdpc2gubXVzZXVtIiwiamV3aXNoYXJ0Lm11c2V1bSIsImpmay5tdXNldW0iLCJqb3VybmFsaXNtLm11c2V1bSIsImp1ZGFpY2EubXVzZXVtIiwi'@;
put 'anVkeWdhcmxhbmQubXVzZXVtIiwianVlZGlzY2hlcy5tdXNldW0iLCJqdWlmLm11c2V1bSIsImthcmF0ZS5tdXNldW0iLCJrYXJpa2F0dXIubXVzZXVtIiwia2lkcy5tdXNldW0iLCJrb2ViZW5oYXZuLm11c2V1bSIsImtvZWxuLm11c2V1bSIsImt1bnN0Lm11c2V1bSIsImt1bnN0c2FtbWx1'@;
put 'bmcubXVzZXVtIiwia3Vuc3R1bmRkZXNpZ24ubXVzZXVtIiwibGFib3IubXVzZXVtIiwibGFib3VyLm11c2V1bSIsImxham9sbGEubXVzZXVtIiwibGFuY2FzaGlyZS5tdXNldW0iLCJsYW5kZXMubXVzZXVtIiwibGFucy5tdXNldW0iLCJsXHhlNG5zLm11c2V1bSIsImxhcnNzb24ubXVzZXVt'@;
put 'IiwibGV3aXNtaWxsZXIubXVzZXVtIiwibGluY29sbi5tdXNldW0iLCJsaW56Lm11c2V1bSIsImxpdmluZy5tdXNldW0iLCJsaXZpbmdoaXN0b3J5Lm11c2V1bSIsImxvY2FsaGlzdG9yeS5tdXNldW0iLCJsb25kb24ubXVzZXVtIiwibG9zYW5nZWxlcy5tdXNldW0iLCJsb3V2cmUubXVzZXVt'@;
put 'IiwibG95YWxpc3QubXVzZXVtIiwibHVjZXJuZS5tdXNldW0iLCJsdXhlbWJvdXJnLm11c2V1bSIsImx1emVybi5tdXNldW0iLCJtYWQubXVzZXVtIiwibWFkcmlkLm11c2V1bSIsIm1hbGxvcmNhLm11c2V1bSIsIm1hbmNoZXN0ZXIubXVzZXVtIiwibWFuc2lvbi5tdXNldW0iLCJtYW5zaW9u'@;
put 'cy5tdXNldW0iLCJtYW54Lm11c2V1bSIsIm1hcmJ1cmcubXVzZXVtIiwibWFyaXRpbWUubXVzZXVtIiwibWFyaXRpbW8ubXVzZXVtIiwibWFyeWxhbmQubXVzZXVtIiwibWFyeWxodXJzdC5tdXNldW0iLCJtZWRpYS5tdXNldW0iLCJtZWRpY2FsLm11c2V1bSIsIm1lZGl6aW5oaXN0b3Jpc2No'@;
put 'ZXMubXVzZXVtIiwibWVlcmVzLm11c2V1bSIsIm1lbW9yaWFsLm11c2V1bSIsIm1lc2F2ZXJkZS5tdXNldW0iLCJtaWNoaWdhbi5tdXNldW0iLCJtaWRhdGxhbnRpYy5tdXNldW0iLCJtaWxpdGFyeS5tdXNldW0iLCJtaWxsLm11c2V1bSIsIm1pbmVycy5tdXNldW0iLCJtaW5pbmcubXVzZXVt'@;
put 'IiwibWlubmVzb3RhLm11c2V1bSIsIm1pc3NpbGUubXVzZXVtIiwibWlzc291bGEubXVzZXVtIiwibW9kZXJuLm11c2V1bSIsIm1vbWEubXVzZXVtIiwibW9uZXkubXVzZXVtIiwibW9ubW91dGgubXVzZXVtIiwibW9udGljZWxsby5tdXNldW0iLCJtb250cmVhbC5tdXNldW0iLCJtb3Njb3cu'@;
put 'bXVzZXVtIiwibW90b3JjeWNsZS5tdXNldW0iLCJtdWVuY2hlbi5tdXNldW0iLCJtdWVuc3Rlci5tdXNldW0iLCJtdWxob3VzZS5tdXNldW0iLCJtdW5jaWUubXVzZXVtIiwibXVzZWV0Lm11c2V1bSIsIm11c2V1bWNlbnRlci5tdXNldW0iLCJtdXNldW12ZXJlbmlnaW5nLm11c2V1bSIsIm11'@;
put 'c2ljLm11c2V1bSIsIm5hdGlvbmFsLm11c2V1bSIsIm5hdGlvbmFsZmlyZWFybXMubXVzZXVtIiwibmF0aW9uYWxoZXJpdGFnZS5tdXNldW0iLCJuYXRpdmVhbWVyaWNhbi5tdXNldW0iLCJuYXR1cmFsaGlzdG9yeS5tdXNldW0iLCJuYXR1cmFsaGlzdG9yeW11c2V1bS5tdXNldW0iLCJuYXR1'@;
put 'cmFsc2NpZW5jZXMubXVzZXVtIiwibmF0dXJlLm11c2V1bSIsIm5hdHVyaGlzdG9yaXNjaGVzLm11c2V1bSIsIm5hdHV1cndldGVuc2NoYXBwZW4ubXVzZXVtIiwibmF1bWJ1cmcubXVzZXVtIiwibmF2YWwubXVzZXVtIiwibmVicmFza2EubXVzZXVtIiwibmV1ZXMubXVzZXVtIiwibmV3aGFt'@;
put 'cHNoaXJlLm11c2V1bSIsIm5ld2plcnNleS5tdXNldW0iLCJuZXdtZXhpY28ubXVzZXVtIiwibmV3cG9ydC5tdXNldW0iLCJuZXdzcGFwZXIubXVzZXVtIiwibmV3eW9yay5tdXNldW0iLCJuaWVwY2UubXVzZXVtIiwibm9yZm9say5tdXNldW0iLCJub3J0aC5tdXNldW0iLCJucncubXVzZXVt'@;
put 'IiwibnljLm11c2V1bSIsIm55bnkubXVzZXVtIiwib2NlYW5vZ3JhcGhpYy5tdXNldW0iLCJvY2Vhbm9ncmFwaGlxdWUubXVzZXVtIiwib21haGEubXVzZXVtIiwib25saW5lLm11c2V1bSIsIm9udGFyaW8ubXVzZXVtIiwib3BlbmFpci5tdXNldW0iLCJvcmVnb24ubXVzZXVtIiwib3JlZ29u'@;
put 'dHJhaWwubXVzZXVtIiwib3RhZ28ubXVzZXVtIiwib3hmb3JkLm11c2V1bSIsInBhY2lmaWMubXVzZXVtIiwicGFkZXJib3JuLm11c2V1bSIsInBhbGFjZS5tdXNldW0iLCJwYWxlby5tdXNldW0iLCJwYWxtc3ByaW5ncy5tdXNldW0iLCJwYW5hbWEubXVzZXVtIiwicGFyaXMubXVzZXVtIiwi'@;
put 'cGFzYWRlbmEubXVzZXVtIiwicGhhcm1hY3kubXVzZXVtIiwicGhpbGFkZWxwaGlhLm11c2V1bSIsInBoaWxhZGVscGhpYWFyZWEubXVzZXVtIiwicGhpbGF0ZWx5Lm11c2V1bSIsInBob2VuaXgubXVzZXVtIiwicGhvdG9ncmFwaHkubXVzZXVtIiwicGlsb3RzLm11c2V1bSIsInBpdHRzYnVy'@;
put 'Z2gubXVzZXVtIiwicGxhbmV0YXJpdW0ubXVzZXVtIiwicGxhbnRhdGlvbi5tdXNldW0iLCJwbGFudHMubXVzZXVtIiwicGxhemEubXVzZXVtIiwicG9ydGFsLm11c2V1bSIsInBvcnRsYW5kLm11c2V1bSIsInBvcnRsbGlnYXQubXVzZXVtIiwicG9zdHMtYW5kLXRlbGVjb21tdW5pY2F0aW9u'@;
put 'cy5tdXNldW0iLCJwcmVzZXJ2YXRpb24ubXVzZXVtIiwicHJlc2lkaW8ubXVzZXVtIiwicHJlc3MubXVzZXVtIiwicHJvamVjdC5tdXNldW0iLCJwdWJsaWMubXVzZXVtIiwicHVib2wubXVzZXVtIiwicXVlYmVjLm11c2V1bSIsInJhaWxyb2FkLm11c2V1bSIsInJhaWx3YXkubXVzZXVtIiwi'@;
put 'cmVzZWFyY2gubXVzZXVtIiwicmVzaXN0YW5jZS5tdXNldW0iLCJyaW9kZWphbmVpcm8ubXVzZXVtIiwicm9jaGVzdGVyLm11c2V1bSIsInJvY2thcnQubXVzZXVtIiwicm9tYS5tdXNldW0iLCJydXNzaWEubXVzZXVtIiwic2FpbnRsb3Vpcy5tdXNldW0iLCJzYWxlbS5tdXNldW0iLCJzYWx2'@;
put 'YWRvcmRhbGkubXVzZXVtIiwic2FsemJ1cmcubXVzZXVtIiwic2FuZGllZ28ubXVzZXVtIiwic2FuZnJhbmNpc2NvLm11c2V1bSIsInNhbnRhYmFyYmFyYS5tdXNldW0iLCJzYW50YWNydXoubXVzZXVtIiwic2FudGFmZS5tdXNldW0iLCJzYXNrYXRjaGV3YW4ubXVzZXVtIiwic2F0eC5tdXNl'@;
put 'dW0iLCJzYXZhbm5haGdhLm11c2V1bSIsInNjaGxlc2lzY2hlcy5tdXNldW0iLCJzY2hvZW5icnVubi5tdXNldW0iLCJzY2hva29sYWRlbi5tdXNldW0iLCJzY2hvb2wubXVzZXVtIiwic2Nod2Vpei5tdXNldW0iLCJzY2llbmNlLm11c2V1bSIsInNjaWVuY2VhbmRoaXN0b3J5Lm11c2V1bSIs'@;
put 'InNjaWVuY2VhbmRpbmR1c3RyeS5tdXNldW0iLCJzY2llbmNlY2VudGVyLm11c2V1bSIsInNjaWVuY2VjZW50ZXJzLm11c2V1bSIsInNjaWVuY2UtZmljdGlvbi5tdXNldW0iLCJzY2llbmNlaGlzdG9yeS5tdXNldW0iLCJzY2llbmNlcy5tdXNldW0iLCJzY2llbmNlc25hdHVyZWxsZXMubXVz'@;
put 'ZXVtIiwic2NvdGxhbmQubXVzZXVtIiwic2VhcG9ydC5tdXNldW0iLCJzZXR0bGVtZW50Lm11c2V1bSIsInNldHRsZXJzLm11c2V1bSIsInNoZWxsLm11c2V1bSIsInNoZXJicm9va2UubXVzZXVtIiwic2liZW5pay5tdXNldW0iLCJzaWxrLm11c2V1bSIsInNraS5tdXNldW0iLCJza29sZS5t'@;
put 'dXNldW0iLCJzb2NpZXR5Lm11c2V1bSIsInNvbG9nbmUubXVzZXVtIiwic291bmRhbmR2aXNpb24ubXVzZXVtIiwic291dGhjYXJvbGluYS5tdXNldW0iLCJzb3V0aHdlc3QubXVzZXVtIiwic3BhY2UubXVzZXVtIiwic3B5Lm11c2V1bSIsInNxdWFyZS5tdXNldW0iLCJzdGFkdC5tdXNldW0i'@;
put 'LCJzdGFsYmFucy5tdXNldW0iLCJzdGFybmJlcmcubXVzZXVtIiwic3RhdGUubXVzZXVtIiwic3RhdGVvZmRlbGF3YXJlLm11c2V1bSIsInN0YXRpb24ubXVzZXVtIiwic3RlYW0ubXVzZXVtIiwic3RlaWVybWFyay5tdXNldW0iLCJzdGpvaG4ubXVzZXVtIiwic3RvY2tob2xtLm11c2V1bSIs'@;
put 'InN0cGV0ZXJzYnVyZy5tdXNldW0iLCJzdHV0dGdhcnQubXVzZXVtIiwic3Vpc3NlLm11c2V1bSIsInN1cmdlb25zaGFsbC5tdXNldW0iLCJzdXJyZXkubXVzZXVtIiwic3ZpenplcmEubXVzZXVtIiwic3dlZGVuLm11c2V1bSIsInN5ZG5leS5tdXNldW0iLCJ0YW5rLm11c2V1bSIsInRjbS5t'@;
put 'dXNldW0iLCJ0ZWNobm9sb2d5Lm11c2V1bSIsInRlbGVrb21tdW5pa2F0aW9uLm11c2V1bSIsInRlbGV2aXNpb24ubXVzZXVtIiwidGV4YXMubXVzZXVtIiwidGV4dGlsZS5tdXNldW0iLCJ0aGVhdGVyLm11c2V1bSIsInRpbWUubXVzZXVtIiwidGltZWtlZXBpbmcubXVzZXVtIiwidG9wb2xv'@;
put 'Z3kubXVzZXVtIiwidG9yaW5vLm11c2V1bSIsInRvdWNoLm11c2V1bSIsInRvd24ubXVzZXVtIiwidHJhbnNwb3J0Lm11c2V1bSIsInRyZWUubXVzZXVtIiwidHJvbGxleS5tdXNldW0iLCJ0cnVzdC5tdXNldW0iLCJ0cnVzdGVlLm11c2V1bSIsInVocmVuLm11c2V1bSIsInVsbS5tdXNldW0i'@;
put 'LCJ1bmRlcnNlYS5tdXNldW0iLCJ1bml2ZXJzaXR5Lm11c2V1bSIsInVzYS5tdXNldW0iLCJ1c2FudGlxdWVzLm11c2V1bSIsInVzYXJ0cy5tdXNldW0iLCJ1c2NvdW50cnllc3RhdGUubXVzZXVtIiwidXNjdWx0dXJlLm11c2V1bSIsInVzZGVjb3JhdGl2ZWFydHMubXVzZXVtIiwidXNnYXJk'@;
put 'ZW4ubXVzZXVtIiwidXNoaXN0b3J5Lm11c2V1bSIsInVzaHVhaWEubXVzZXVtIiwidXNsaXZpbmdoaXN0b3J5Lm11c2V1bSIsInV0YWgubXVzZXVtIiwidXZpYy5tdXNldW0iLCJ2YWxsZXkubXVzZXVtIiwidmFudGFhLm11c2V1bSIsInZlcnNhaWxsZXMubXVzZXVtIiwidmlraW5nLm11c2V1'@;
put 'bSIsInZpbGxhZ2UubXVzZXVtIiwidmlyZ2luaWEubXVzZXVtIiwidmlydHVhbC5tdXNldW0iLCJ2aXJ0dWVsLm11c2V1bSIsInZsYWFuZGVyZW4ubXVzZXVtIiwidm9sa2Vua3VuZGUubXVzZXVtIiwid2FsZXMubXVzZXVtIiwid2FsbG9uaWUubXVzZXVtIiwid2FyLm11c2V1bSIsIndhc2hp'@;
put 'bmd0b25kYy5tdXNldW0iLCJ3YXRjaGFuZGNsb2NrLm11c2V1bSIsIndhdGNoLWFuZC1jbG9jay5tdXNldW0iLCJ3ZXN0ZXJuLm11c2V1bSIsIndlc3RmYWxlbi5tdXNldW0iLCJ3aGFsaW5nLm11c2V1bSIsIndpbGRsaWZlLm11c2V1bSIsIndpbGxpYW1zYnVyZy5tdXNldW0iLCJ3aW5kbWls'@;
put 'bC5tdXNldW0iLCJ3b3Jrc2hvcC5tdXNldW0iLCJ5b3JrLm11c2V1bSIsInlvcmtzaGlyZS5tdXNldW0iLCJ5b3NlbWl0ZS5tdXNldW0iLCJ5b3V0aC5tdXNldW0iLCJ6b29sb2dpY2FsLm11c2V1bSIsInpvb2xvZ3kubXVzZXVtIiwiXHUwNWQ5XHUwNWU4XHUwNWQ1XHUwNWU5XHUwNWRjXHUw'@;
put 'NWQ5XHUwNWRkLm11c2V1bSIsIlx1MDQzOFx1MDQzYVx1MDQzZVx1MDQzYy5tdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXoubXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIsIm11c2V1bS5tdiIsIm5hbWUubXYiLCJu'@;
put 'ZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibXVzZXVtLm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJvcmcubXgiLCJnb2IubXgiLCJl'@;
put 'ZHUubXgiLCJuZXQubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIsImdvdi5teSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJuZXQubXoiLCJvcmcu'@;
put 'bXoiLCJuYSIsImluZm8ubmEiLCJwcm8ubmEiLCJuYW1lLm5hIiwic2Nob29sLm5hIiwib3IubmEiLCJkci5uYSIsInVzLm5hIiwibXgubmEiLCJjYS5uYSIsImluLm5hIiwiY2MubmEiLCJ0di5uYSIsIndzLm5hIiwibW9iaS5uYSIsImNvLm5hIiwiY29tLm5hIiwib3JnLm5hIiwibmFtZSIs'@;
put 'Im5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJjb20ubmYiLCJuZXQubmYiLCJwZXIubmYiLCJyZWMubmYiLCJ3ZWIubmYiLCJhcnRzLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJvdGhlci5uZiIsInN0b3JlLm5mIiwibmciLCJjb20ubmciLCJlZHUubmciLCJnb3Yu'@;
put 'bmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJjb20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmkiLCJpbnQubmkiLCJtaWwubmkiLCJuZXQu'@;
put 'bmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5vIiwidmdzLm5vIiwiZnlsa2VzYmlibC5ubyIsImZvbGtlYmlibC5ubyIsIm11c2V1bS5ubyIsImlkcmV0dC5ubyIsInByaXYubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiZGVwLm5vIiwia29tbXVuZS5ubyIs'@;
put 'ImhlcmFkLm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwib2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwic3Qubm8iLCJzdmFsYmFyZC5ubyIsInRt'@;
put 'Lm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3MuamFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5u'@;
put 'byIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIsImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIsImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVy'@;
put 'ZC5ubyIsImFybmEubm8iLCJicnVtdW5kZGFsLm5vIiwiYnJ5bmUubm8iLCJicm9ubm95c3VuZC5ubyIsImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiZHJvYmFrLm5vIiwiZHJceGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxvcm8ubm8iLCJmbG9yXHhmOC5ubyIsImZy'@;
put 'ZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxhbmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8i'@;
put 'LCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwib3NveXJvLm5vIiwib3NceGY4eXJvLm5v'@;
put 'IiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8iLCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5ubyIsInN0am9yZGFsc2hhbHNlbi5ubyIs'@;
put 'InN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhZmpvcmQubm8iLCJceGU1ZmpvcmQubm8iLCJhZ2RlbmVzLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsZXN1bmQubm8iLCJceGU1bGVzdW5kLm5vIiwiYWxzdGFoYXVn'@;
put 'Lm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJhbGFoZWFkanUubm8iLCJceGUxbGFoZWFkanUubm8iLCJhbHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRceGY4eS5ubyIsImFuZGFz'@;
put 'dW9sby5ubyIsImFyZGFsLm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5ubyIsIlx4ZTVzLm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza3ZvbGwubm8iLCJhc2tveS5ubyIsImFza1x4Zjh5Lm5vIiwiYXNuZXMu'@;
put 'bm8iLCJceGU1c25lcy5ubyIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1cmxhbmQubm8iLCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5v'@;
put 'IiwiYmFsZXN0cmFuZC5ubyIsImJhbGxhbmdlbi5ubyIsImJhbGF0Lm5vIiwiYlx4ZTFsXHhlMXQubm8iLCJiYWxzZmpvcmQubm8iLCJiYWhjY2F2dW90bmEubm8iLCJiXHhlMWhjY2F2dW90bmEubm8iLCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5ubyIsImJh'@;
put 'amRkYXIubm8iLCJiXHhlMWpkZGFyLm5vIiwiYmFpZGFyLm5vIiwiYlx4ZTFpZFx4ZTFyLm5vIiwiYmVyZy5ubyIsImJlcmdlbi5ubyIsImJlcmxldmFnLm5vIiwiYmVybGV2XHhlNWcubm8iLCJiZWFyYWx2YWhraS5ubyIsImJlYXJhbHZceGUxaGtpLm5vIiwiYmluZGFsLm5vIiwiYmlya2Vu'@;
put 'ZXMubm8iLCJiamFya295Lm5vIiwiYmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwiYm9kby5ubyIsImJvZFx4Zjgubm8iLCJiYWRhZGRqYS5ubyIsImJceGU1ZFx4ZTVkZGpceGU1Lm5vIiwiYnVkZWpqdS5ubyIsImJva24ubm8iLCJicmVtYW5nZXIubm8iLCJicm9u'@;
put 'bm95Lm5vIiwiYnJceGY4bm5ceGY4eS5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImJhcnVtLm5vIiwiYlx4ZTZydW0ubm8iLCJiby50ZWxlbWFyay5ubyIsImJceGY4LnRlbGVtYXJrLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3JkbGFuZC5ubyIsImJpZXZhdC5ubyIsImJp'@;
put 'ZXZceGUxdC5ubyIsImJvbWxvLm5vIiwiYlx4ZjhtbG8ubm8iLCJiYXRzZmpvcmQubm8iLCJiXHhlNXRzZmpvcmQubm8iLCJiYWhjYXZ1b3RuYS5ubyIsImJceGUxaGNhdnVvdG5hLm5vIiwiZG92cmUubm8iLCJkcmFtbWVuLm5vIiwiZHJhbmdlZGFsLm5vIiwiZHlyb3kubm8iLCJkeXJceGY4'@;
put 'eS5ubyIsImRvbm5hLm5vIiwiZFx4ZjhubmEubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlkc2tvZy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVuZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUubm8iLCJldG5l'@;
put 'ZGFsLm5vIiwiZXZlbmVzLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmplLW9nLWhvcm5uZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZnVvc3Nrby5ubyIsImZ1b2lza3Uubm8iLCJmZWRqZS5ubyIsImZldC5ubyIsImZpbm5veS5ubyIs'@;
put 'ImZpbm5ceGY4eS5ubyIsImZpdGphci5ubyIsImZqYWxlci5ubyIsImZqZWxsLm5vIiwiZmxha3N0YWQubm8iLCJmbGF0YW5nZXIubm8iLCJmbGVra2Vmam9yZC5ubyIsImZsZXNiZXJnLm5vIiwiZmxvcmEubm8iLCJmbGEubm8iLCJmbFx4ZTUubm8iLCJmb2xsZGFsLm5vIiwiZm9yc2FuZC5u'@;
put 'byIsImZvc25lcy5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8iLCJmcm9zdGEubm8iLCJmcmFuYS5ubyIsImZyXHhlNm5hLm5vIiwiZnJveWEubm8iLCJmclx4Zjh5YS5ubyIsImZ1c2Eubm8iLCJmeXJlc2RhbC5ubyIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJnYW12'@;
put 'aWsubm8iLCJnYW5nYXZpaWthLm5vIiwiZ1x4ZTFcdTAxNGJnYXZpaWthLm5vIiwiZ2F1bGFyLm5vIiwiZ2F1c2RhbC5ubyIsImdpbGRlc2thbC5ubyIsImdpbGRlc2tceGU1bC5ubyIsImdpc2tlLm5vIiwiZ2plbW5lcy5ubyIsImdqZXJkcnVtLm5vIiwiZ2plcnN0YWQubm8iLCJnamVzZGFs'@;
put 'Lm5vIiwiZ2pvdmlrLm5vIiwiZ2pceGY4dmlrLm5vIiwiZ2xvcHBlbi5ubyIsImdvbC5ubyIsImdyYW4ubm8iLCJncmFuZS5ubyIsImdyYW52aW4ubm8iLCJncmF0YW5nZW4ubm8iLCJncmltc3RhZC5ubyIsImdyb25nLm5vIiwia3JhYW5naGtlLm5vIiwia3JceGU1YW5naGtlLm5vIiwiZ3J1'@;
put 'ZS5ubyIsImd1bGVuLm5vIiwiaGFkc2VsLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJoYWJtZXIubm8iLCJoXHhlMWJtZXIubm8iLCJoYXBtaXIubm8iLCJoXHhlMXBtaXIubm8iLCJoYW1tZXJmZXN0Lm5vIiwiaGFtbWFyZmVhc3RhLm5vIiwi'@;
put 'aFx4ZTFtbVx4ZTFyZmVhc3RhLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJoYXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwiYWtub2x1b2t0YS5ubyIsIlx4ZTFrXHUwMTRib2x1b2t0YS5ubyIsImhhdHRmamVsbGRhbC5ubyIsImFhcmJvcnRlLm5vIiwiaGF1Z2VzdW5kLm5vIiwiaGVtbmUu'@;
put 'bm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhlcm95Lm1vcmUtb2ctcm9tc2RhbC5ubyIsImhlclx4Zjh5Lm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJoaXRyYS5ubyIsImhqYXJ0ZGFsLm5vIiwiaGplbG1l'@;
put 'bGFuZC5ubyIsImhvYm9sLm5vIiwiaG9iXHhmOGwubm8iLCJob2Yubm8iLCJob2wubm8iLCJob2xlLm5vIiwiaG9sbWVzdHJhbmQubm8iLCJob2x0YWxlbi5ubyIsImhvbHRceGU1bGVuLm5vIiwiaG9ybmluZGFsLm5vIiwiaG9ydGVuLm5vIiwiaHVyZGFsLm5vIiwiaHVydW0ubm8iLCJodmFs'@;
put 'ZXIubm8iLCJoeWxsZXN0YWQubm8iLCJoYWdlYm9zdGFkLm5vIiwiaFx4ZTZnZWJvc3RhZC5ubyIsImhveWFuZ2VyLm5vIiwiaFx4Zjh5YW5nZXIubm8iLCJob3lsYW5kZXQubm8iLCJoXHhmOHlsYW5kZXQubm8iLCJoYS5ubyIsImhceGU1Lm5vIiwiaWJlc3RhZC5ubyIsImluZGVyb3kubm8i'@;
put 'LCJpbmRlclx4Zjh5Lm5vIiwiaXZlbGFuZC5ubyIsImpldm5ha2VyLm5vIiwiam9uZGFsLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0ZXIubm8iLCJrYXJhc2pvay5ubyIsImthcmFzam9oa2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJsc295Lm5vIiwiZ2Fsc2Eubm8i'@;
put 'LCJnXHhlMWxzXHhlMS5ubyIsImthcm1veS5ubyIsImthcm1ceGY4eS5ubyIsImthdXRva2Vpbm8ubm8iLCJndW92ZGFnZWFpZG51Lm5vIiwia2xlcHAubm8iLCJrbGFidS5ubyIsImtsXHhlNmJ1Lm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5nZXIubm8iLCJrcmFnZXJvLm5vIiwia3Jh'@;
put 'Z2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImtyb2RzaGVyYWQubm8iLCJrclx4Zjhkc2hlcmFkLm5vIiwia3ZhbHN1bmQubm8iLCJyYWhra2VyYXZqdS5ubyIsInJceGUxaGtrZXJceGUxdmp1Lm5vIiwia3ZhbS5ubyIsImt2aW5lc2RhbC5ubyIsImt2'@;
put 'aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwia3ZpdHNceGY4eS5ubyIsImt2YWZqb3JkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwia3ZhbmFuZ2VuLm5vIiwia3ZceGU2bmFuZ2VuLm5vIiwibmF2dW90bmEubm8iLCJuXHhlMXZ1b3Ru'@;
put 'YS5ubyIsImthZmpvcmQubm8iLCJrXHhlNWZqb3JkLm5vIiwiZ2FpdnVvdG5hLm5vIiwiZ1x4ZTFpdnVvdG5hLm5vIiwibGFydmlrLm5vIiwibGF2YW5nZW4ubm8iLCJsYXZhZ2lzLm5vIiwibG9hYmF0Lm5vIiwibG9hYlx4ZTF0Lm5vIiwibGViZXNieS5ubyIsImRhdnZlc2lpZGEubm8iLCJs'@;
put 'ZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5vIiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIubm8i'@;
put 'LCJsaWxsZXNhbmQubm8iLCJsaW5kZXNuZXMubm8iLCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsb20ubm8iLCJsb3BwYS5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImx1bmQubm8iLCJsdW5uZXIubm8iLCJsdXJveS5ubyIsImx1clx4Zjh5Lm5vIiwibHVzdGVyLm5vIiwi'@;
put 'bHluZ2RhbC5ubyIsImx5bmdlbi5ubyIsIml2Z3Uubm8iLCJsYXJkYWwubm8iLCJsZXJkYWwubm8iLCJsXHhlNnJkYWwubm8iLCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9yZW5za29nLm5vIiwibFx4ZjhyZW5za29nLm5vIiwibG90ZW4ubm8iLCJsXHhmOHRlbi5ubyIsIm1h'@;
put 'bHZpay5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJtdW9zYXQubm8iLCJtdW9zXHhlMXQubm8iLCJtYW5kYWwubm8iLCJtYXJrZXIubm8iLCJtYXJuYXJkYWwubm8iLCJtYXNmam9yZGVuLm5vIiwibWVsYW5kLm5vIiwibWVsZGFsLm5vIiwibWVsaHVzLm5vIiwibWVsb3kubm8i'@;
put 'LCJtZWxceGY4eS5ubyIsIm1lcmFrZXIubm8iLCJtZXJceGU1a2VyLm5vIiwibW9hcmVrZS5ubyIsIm1vXHhlNXJla2Uubm8iLCJtaWRzdW5kLm5vIiwibWlkdHJlLWdhdWxkYWwubm8iLCJtb2RhbGVuLm5vIiwibW9kdW0ubm8iLCJtb2xkZS5ubyIsIm1vc2tlbmVzLm5vIiwibW9zcy5ubyIs'@;
put 'Im1vc3Zpay5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5vIiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm5hbWRhbHNlaWQubm8iLCJhZWpyaWUubm8iLCJuYW1zb3Mubm8iLCJuYW1zc2tvZ2FuLm5vIiwibmFhbWVzamV2dWVtaWUubm8iLCJuXHhlNVx4ZTVt'@;
put 'ZXNqZXZ1ZW1pZS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcnZpay5ubyIsIm5hcnZpaWthLm5vIiwibmF1c3RkYWwubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lcy5ha2Vyc2h1cy5ubyIsIm5lcy5idXNrZXJ1ZC5ubyIsIm5lc25hLm5vIiwibmVzb2RkZW4ubm8i'@;
put 'LCJuZXNzZWJ5Lm5vIiwidW5qYXJnYS5ubyIsInVualx4ZTFyZ2Eubm8iLCJuZXNzZXQubm8iLCJuaXNzZWRhbC5ubyIsIm5pdHRlZGFsLm5vIiwibm9yZC1hdXJkYWwubm8iLCJub3JkLWZyb24ubm8iLCJub3JkLW9kYWwubm8iLCJub3JkZGFsLm5vIiwibm9yZGthcHAubm8iLCJkYXZ2ZW5q'@;
put 'YXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwibm9yZHJlLWxhbmQubm8iLCJub3JkcmVpc2Eubm8iLCJyYWlzYS5ubyIsInJceGUxaXNhLm5vIiwibm9yZS1vZy11dmRhbC5ubyIsIm5vdG9kZGVuLm5vIiwibmFyb3kubm8iLCJuXHhlNnJceGY4eS5ubyIsIm5vdHRlcm95Lm5vIiwiblx4'@;
put 'Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtzbmVzLm5vIiwib3BwZGFsLm5vIiwib3BwZWdhcmQubm8iLCJvcHBlZ1x4ZTVyZC5ubyIsIm9ya2RhbC5ubyIsIm9ybGFuZC5ubyIsIlx4ZjhybGFuZC5ubyIsIm9yc2tvZy5ubyIsIlx4Zjhyc2tvZy5ubyIsIm9y'@;
put 'c3RhLm5vIiwiXHhmOHJzdGEubm8iLCJvcy5oZWRtYXJrLm5vIiwib3MuaG9yZGFsYW5kLm5vIiwib3Nlbi5ubyIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwib3N0cmUtdG90ZW4ubm8iLCJceGY4c3RyZS10b3Rlbi5ubyIsIm92ZXJoYWxsYS5ubyIsIm92cmUtZWlrZXIubm8iLCJc'@;
put 'eGY4dnJlLWVpa2VyLm5vIiwib3llci5ubyIsIlx4Zjh5ZXIubm8iLCJveWdhcmRlbi5ubyIsIlx4Zjh5Z2FyZGVuLm5vIiwib3lzdHJlLXNsaWRyZS5ubyIsIlx4Zjh5c3RyZS1zbGlkcmUubm8iLCJwb3JzYW5nZXIubm8iLCJwb3JzYW5ndS5ubyIsInBvcnNceGUxXHUwMTRiZ3Uubm8iLCJw'@;
put 'b3JzZ3J1bm4ubm8iLCJyYWRveS5ubyIsInJhZFx4Zjh5Lm5vIiwicmFra2VzdGFkLm5vIiwicmFuYS5ubyIsInJ1b3ZhdC5ubyIsInJhbmRhYmVyZy5ubyIsInJhdW1hLm5vIiwicmVuZGFsZW4ubm8iLCJyZW5uZWJ1Lm5vIiwicmVubmVzb3kubm8iLCJyZW5uZXNceGY4eS5ubyIsInJpbmRh'@;
put 'bC5ubyIsInJpbmdlYnUubm8iLCJyaW5nZXJpa2Uubm8iLCJyaW5nc2FrZXIubm8iLCJyaXNzYS5ubyIsInJpc29yLm5vIiwicmlzXHhmOHIubm8iLCJyb2FuLm5vIiwicm9sbGFnLm5vIiwicnlnZ2Uubm8iLCJyYWxpbmdlbi5ubyIsInJceGU2bGluZ2VuLm5vIiwicm9kb3kubm8iLCJyXHhm'@;
put 'OGRceGY4eS5ubyIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8iLCJyXHhmOHJvcy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJyYWRlLm5vIiwiclx4ZTVkZS5u'@;
put 'byIsInNhbGFuZ2VuLm5vIiwic2llbGxhay5ubyIsInNhbHRkYWwubm8iLCJzYWxhdC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwic1x4ZTFsYXQubm8iLCJzYW1uYW5nZXIubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS52'@;
put 'ZXN0Zm9sZC5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVoZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJzZWxqb3JkLm5vIiwic2lnZGFsLm5vIiwi'@;
put 'c2lsamFuLm5vIiwic2lyZGFsLm5vIiwic2thdW4ubm8iLCJza2Vkc21vLm5vIiwic2tpLm5vIiwic2tpZW4ubm8iLCJza2lwdHZldC5ubyIsInNramVydm95Lm5vIiwic2tqZXJ2XHhmOHkubm8iLCJza2llcnZhLm5vIiwic2tpZXJ2XHhlMS5ubyIsInNramFrLm5vIiwic2tqXHhlNWsubm8i'@;
put 'LCJza29kamUubm8iLCJza2FubGFuZC5ubyIsInNrXHhlNW5sYW5kLm5vIiwic2thbml0Lm5vIiwic2tceGUxbml0Lm5vIiwic21vbGEubm8iLCJzbVx4ZjhsYS5ubyIsInNuaWxsZmpvcmQubm8iLCJzbmFzYS5ubyIsInNuXHhlNXNhLm5vIiwic25vYXNhLm5vIiwic25hYXNlLm5vIiwic25c'@;
put 'eGU1YXNlLm5vIiwic29nbmRhbC5ubyIsInNva25kYWwubm8iLCJzb2xhLm5vIiwic29sdW5kLm5vIiwic29uZ2RhbGVuLm5vIiwic29ydGxhbmQubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFuZ2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5ramVyLm5vIiwic3Rqb3Jk'@;
put 'YWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3ItZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwib21hc3Z1b3RuYS5ubyIsInN0cmFuZC5ubyIsInN0cmFuZGEubm8iLCJzdHJ5bi5ubyIsInN1bGEubm8iLCJzdWxkYWwubm8i'@;
put 'LCJzdW5kLm5vIiwic3VubmRhbC5ubyIsInN1cm5hZGFsLm5vIiwic3ZlaW8ubm8iLCJzdmVsdmlrLm5vIiwic3lra3lsdmVuLm5vIiwic29nbmUubm8iLCJzXHhmOGduZS5ubyIsInNvbW5hLm5vIiwic1x4ZjhtbmEubm8iLCJzb25kcmUtbGFuZC5ubyIsInNceGY4bmRyZS1sYW5kLm5vIiwi'@;
put 'c29yLWF1cmRhbC5ubyIsInNceGY4ci1hdXJkYWwubm8iLCJzb3ItZnJvbi5ubyIsInNceGY4ci1mcm9uLm5vIiwic29yLW9kYWwubm8iLCJzXHhmOHItb2RhbC5ubyIsInNvci12YXJhbmdlci5ubyIsInNceGY4ci12YXJhbmdlci5ubyIsIm1hdHRhLXZhcmpqYXQubm8iLCJtXHhlMXR0YS12'@;
put 'XHhlMXJqamF0Lm5vIiwic29yZm9sZC5ubyIsInNceGY4cmZvbGQubm8iLCJzb3JyZWlzYS5ubyIsInNceGY4cnJlaXNhLm5vIiwic29ydW0ubm8iLCJzXHhmOHJ1bS5ubyIsInRhbmEubm8iLCJkZWF0bnUubm8iLCJ0aW1lLm5vIiwidGluZ3ZvbGwubm8iLCJ0aW5uLm5vIiwidGplbGRzdW5k'@;
put 'Lm5vIiwiZGllbGRkYW51b3JyaS5ubyIsInRqb21lLm5vIiwidGpceGY4bWUubm8iLCJ0b2trZS5ubyIsInRvbGdhLm5vIiwidG9yc2tlbi5ubyIsInRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRyb21zYS5ubyIsInJvbXNhLm5vIiwidHJv'@;
put 'bmRoZWltLm5vIiwidHJvYW5kaW4ubm8iLCJ0cnlzaWwubm8iLCJ0cmFuYS5ubyIsInRyXHhlNm5hLm5vIiwidHJvZ3N0YWQubm8iLCJ0clx4Zjhnc3RhZC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8iLCJ0eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsImRpdnRhc3Z1b2RuYS5ubyIs'@;
put 'ImRpdnR0YXN2dW90bmEubm8iLCJ0eXNuZXMubm8iLCJ0eXN2YXIubm8iLCJ0eXN2XHhlNnIubm8iLCJ0b25zYmVyZy5ubyIsInRceGY4bnNiZXJnLm5vIiwidWxsZW5zYWtlci5ubyIsInVsbGVuc3Zhbmcubm8iLCJ1bHZpay5ubyIsInV0c2lyYS5ubyIsInZhZHNvLm5vIiwidmFkc1x4Zjgu'@;
put 'bm8iLCJjYWhjZXN1b2xvLm5vIiwiXHUwMTBkXHhlMWhjZXN1b2xvLm5vIiwidmFrc2RhbC5ubyIsInZhbGxlLm5vIiwidmFuZy5ubyIsInZhbnlsdmVuLm5vIiwidmFyZG8ubm8iLCJ2YXJkXHhmOC5ubyIsInZhcmdnYXQubm8iLCJ2XHhlMXJnZ1x4ZTF0Lm5vIiwidmVmc24ubm8iLCJ2YWFw'@;
put 'c3RlLm5vIiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5vIiwidmVycmFuLm5vIiwidmVzdGJ5Lm5vIiwidmVzdG5lcy5ubyIsInZlc3RyZS1zbGlkcmUubm8iLCJ2ZXN0cmUtdG90ZW4ubm8iLCJ2ZXN0dmFnb3kubm8i'@;
put 'LCJ2ZXN0dlx4ZTVnXHhmOHkubm8iLCJ2ZXZlbHN0YWQubm8iLCJ2aWsubm8iLCJ2aWtuYS5ubyIsInZpbmRhZmpvcmQubm8iLCJ2b2xkYS5ubyIsInZvc3Mubm8iLCJ2YXJveS5ubyIsInZceGU2clx4Zjh5Lm5vIiwidmFnYW4ubm8iLCJ2XHhlNWdhbi5ubyIsInZvYWdhdC5ubyIsInZhZ3Nv'@;
put 'eS5ubyIsInZceGU1Z3NceGY4eS5ubyIsInZhZ2Eubm8iLCJ2XHhlNWdceGU1Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIsInZceGU1bGVyLlx4ZjhzdGZvbGQubm8iLCJ2YWxlci5oZWRtYXJrLm5vIiwidlx4ZTVsZXIuaGVkbWFyay5ubyIsIioubnAiLCJuciIsImJpei5uciIsImluZm8ubnIi'@;
put 'LCJnb3YubnIiLCJlZHUubnIiLCJvcmcubnIiLCJuZXQubnIiLCJjb20ubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoiLCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIsIm1hb3JpLm56IiwibWlsLm56IiwibVx1'@;
put 'MDEwMW9yaS5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwibWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJvLm9tIiwib25pb24iLCJvcmciLCJwYSIs'@;
put 'ImFjLnBhIiwiZ29iLnBhIiwiY29tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwiZWR1LnBhIiwibmV0LnBhIiwiaW5nLnBhIiwiYWJvLnBhIiwibWVkLnBhIiwibm9tLnBhIiwicGUiLCJlZHUucGUiLCJnb2IucGUiLCJub20ucGUiLCJtaWwucGUiLCJvcmcucGUiLCJjb20ucGUiLCJuZXQucGUi'@;
put 'LCJwZiIsImNvbS5wZiIsIm9yZy5wZiIsImVkdS5wZiIsIioucGciLCJwaCIsImNvbS5waCIsIm5ldC5waCIsIm9yZy5waCIsImdvdi5waCIsImVkdS5waCIsIm5nby5waCIsIm1pbC5waCIsImkucGgiLCJwayIsImNvbS5wayIsIm5ldC5wayIsImVkdS5wayIsIm9yZy5wayIsImZhbS5wayIs'@;
put 'ImJpei5wayIsIndlYi5wayIsImdvdi5wayIsImdvYi5wayIsImdvay5wayIsImdvbi5wayIsImdvcC5wayIsImdvcy5wayIsImluZm8ucGsiLCJwbCIsImNvbS5wbCIsIm5ldC5wbCIsIm9yZy5wbCIsImFpZC5wbCIsImFncm8ucGwiLCJhdG0ucGwiLCJhdXRvLnBsIiwiYml6LnBsIiwiZWR1'@;
put 'LnBsIiwiZ21pbmEucGwiLCJnc20ucGwiLCJpbmZvLnBsIiwibWFpbC5wbCIsIm1pYXN0YS5wbCIsIm1lZGlhLnBsIiwibWlsLnBsIiwibmllcnVjaG9tb3NjaS5wbCIsIm5vbS5wbCIsInBjLnBsIiwicG93aWF0LnBsIiwicHJpdi5wbCIsInJlYWxlc3RhdGUucGwiLCJyZWwucGwiLCJzZXgu'@;
put 'cGwiLCJzaG9wLnBsIiwic2tsZXAucGwiLCJzb3MucGwiLCJzemtvbGEucGwiLCJ0YXJnaS5wbCIsInRtLnBsIiwidG91cmlzbS5wbCIsInRyYXZlbC5wbCIsInR1cnlzdHlrYS5wbCIsImdvdi5wbCIsImFwLmdvdi5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIsInVzLmdvdi5wbCIsImtt'@;
put 'cHNwLmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cHNwLmdvdi5wbCIsInBzcC5nb3YucGwiLCJ3c2tyLmdvdi5wbCIsImt3cC5nb3YucGwiLCJtdy5nb3YucGwiLCJ1Zy5nb3YucGwiLCJ1bS5nb3YucGwiLCJ1bWlnLmdvdi5wbCIsInVnaW0uZ292LnBsIiwidXBvdy5nb3YucGwiLCJ1dy5n'@;
put 'b3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwicGEuZ292LnBsIiwicG8uZ292LnBsIiwicHNzZS5nb3YucGwiLCJwdXAuZ292LnBsIiwicnpndy5nb3YucGwiLCJzYS5nb3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJ3c2EuZ292LnBsIiwic2tvLmdvdi5wbCIsInV6cy5nb3YucGwi'@;
put 'LCJ3aWloLmdvdi5wbCIsIndpbmIuZ292LnBsIiwicGluYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBsIiwid3ptaXV3Lmdvdi5wbCIsInBpdy5nb3YucGwiLCJ3aXcuZ292LnBsIiwiZ3Jpdy5nb3YucGwiLCJ3aWYuZ292LnBsIiwib3VtLmdvdi5wbCIsInNkbi5nb3YucGwi'@;
put 'LCJ6cC5nb3YucGwiLCJ1cHBvLmdvdi5wbCIsIm11cC5nb3YucGwiLCJ3dW96Lmdvdi5wbCIsImtvbnN1bGF0Lmdvdi5wbCIsIm9pcm0uZ292LnBsIiwiYXVndXN0b3cucGwiLCJiYWJpYS1nb3JhLnBsIiwiYmVkemluLnBsIiwiYmVza2lkeS5wbCIsImJpYWxvd2llemEucGwiLCJiaWFseXN0'@;
put 'b2sucGwiLCJiaWVsYXdhLnBsIiwiYmllc3pjemFkeS5wbCIsImJvbGVzbGF3aWVjLnBsIiwiYnlkZ29zemN6LnBsIiwiYnl0b20ucGwiLCJjaWVzenluLnBsIiwiY3plbGFkei5wbCIsImN6ZXN0LnBsIiwiZGx1Z29sZWthLnBsIiwiZWxibGFnLnBsIiwiZWxrLnBsIiwiZ2xvZ293LnBsIiwi'@;
put 'Z25pZXpuby5wbCIsImdvcmxpY2UucGwiLCJncmFqZXdvLnBsIiwiaWxhd2EucGwiLCJqYXdvcnpuby5wbCIsImplbGVuaWEtZ29yYS5wbCIsImpnb3JhLnBsIiwia2FsaXN6LnBsIiwia2F6aW1pZXJ6LWRvbG55LnBsIiwia2FycGFjei5wbCIsImthcnR1enkucGwiLCJrYXN6dWJ5LnBsIiwi'@;
put 'a2F0b3dpY2UucGwiLCJrZXBuby5wbCIsImtldHJ6eW4ucGwiLCJrbG9kemtvLnBsIiwia29iaWVyenljZS5wbCIsImtvbG9icnplZy5wbCIsImtvbmluLnBsIiwia29uc2tvd29sYS5wbCIsImt1dG5vLnBsIiwibGFweS5wbCIsImxlYm9yay5wbCIsImxlZ25pY2EucGwiLCJsZXphanNrLnBs'@;
put 'IiwibGltYW5vd2EucGwiLCJsb216YS5wbCIsImxvd2ljei5wbCIsImx1YmluLnBsIiwibHVrb3cucGwiLCJtYWxib3JrLnBsIiwibWFsb3BvbHNrYS5wbCIsIm1hem93c3plLnBsIiwibWF6dXJ5LnBsIiwibWllbGVjLnBsIiwibWllbG5vLnBsIiwibXJhZ293by5wbCIsIm5ha2xvLnBsIiwi'@;
put 'bm93YXJ1ZGEucGwiLCJueXNhLnBsIiwib2xhd2EucGwiLCJvbGVja28ucGwiLCJvbGt1c3oucGwiLCJvbHN6dHluLnBsIiwib3BvY3puby5wbCIsIm9wb2xlLnBsIiwib3N0cm9kYS5wbCIsIm9zdHJvbGVrYS5wbCIsIm9zdHJvd2llYy5wbCIsIm9zdHJvd3dsa3AucGwiLCJwaWxhLnBsIiwi'@;
put 'cGlzei5wbCIsInBvZGhhbGUucGwiLCJwb2RsYXNpZS5wbCIsInBvbGtvd2ljZS5wbCIsInBvbW9yemUucGwiLCJwb21vcnNraWUucGwiLCJwcm9jaG93aWNlLnBsIiwicHJ1c3prb3cucGwiLCJwcnpld29yc2sucGwiLCJwdWxhd3kucGwiLCJyYWRvbS5wbCIsInJhd2EtbWF6LnBsIiwicnli'@;
put 'bmlrLnBsIiwicnplc3pvdy5wbCIsInNhbm9rLnBsIiwic2VqbnkucGwiLCJzbGFzay5wbCIsInNsdXBzay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInNrb2N6b3cucGwiLCJzdGFyYWNob3dpY2UucGwiLCJzdGFyZ2FyZC5wbCIsInN1d2Fsa2kucGwiLCJzd2lkbmlj'@;
put 'YS5wbCIsInN3aWVib2R6aW4ucGwiLCJzd2lub3Vqc2NpZS5wbCIsInN6Y3plY2luLnBsIiwic3pjenl0bm8ucGwiLCJ0YXJub2JyemVnLnBsIiwidGdvcnkucGwiLCJ0dXJlay5wbCIsInR5Y2h5LnBsIiwidXN0a2EucGwiLCJ3YWxicnp5Y2gucGwiLCJ3YXJtaWEucGwiLCJ3YXJzemF3YS5w'@;
put 'bCIsIndhdy5wbCIsIndlZ3Jvdy5wbCIsIndpZWx1bi5wbCIsIndsb2NsLnBsIiwid2xvY2xhd2VrLnBsIiwid29kemlzbGF3LnBsIiwid29sb21pbi5wbCIsIndyb2NsYXcucGwiLCJ6YWNocG9tb3IucGwiLCJ6YWdhbi5wbCIsInphcm93LnBsIiwiemdvcmEucGwiLCJ6Z29yemVsZWMucGwi'@;
put 'LCJwbSIsInBuIiwiZ292LnBuIiwiY28ucG4iLCJvcmcucG4iLCJlZHUucG4iLCJuZXQucG4iLCJwb3N0IiwicHIiLCJjb20ucHIiLCJuZXQucHIiLCJvcmcucHIiLCJnb3YucHIiLCJlZHUucHIiLCJpc2xhLnByIiwicHJvLnByIiwiYml6LnByIiwiaW5mby5wciIsIm5hbWUucHIiLCJlc3Qu'@;
put 'cHIiLCJwcm9mLnByIiwiYWMucHIiLCJwcm8iLCJhYWEucHJvIiwiYWNhLnBybyIsImFjY3QucHJvIiwiYXZvY2F0LnBybyIsImJhci5wcm8iLCJjcGEucHJvIiwiZW5nLnBybyIsImp1ci5wcm8iLCJsYXcucHJvIiwibWVkLnBybyIsInJlY2h0LnBybyIsInBzIiwiZWR1LnBzIiwiZ292LnBz'@;
put 'Iiwic2VjLnBzIiwicGxvLnBzIiwiY29tLnBzIiwib3JnLnBzIiwibmV0LnBzIiwicHQiLCJuZXQucHQiLCJnb3YucHQiLCJvcmcucHQiLCJlZHUucHQiLCJpbnQucHQiLCJwdWJsLnB0IiwiY29tLnB0Iiwibm9tZS5wdCIsInB3IiwiY28ucHciLCJuZS5wdyIsIm9yLnB3IiwiZWQucHciLCJn'@;
put 'by5wdyIsImJlbGF1LnB3IiwicHkiLCJjb20ucHkiLCJjb29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWlsLnB5IiwibmV0LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0LnFhIiwib3JnLnFhIiwic2NoLnFhIiwi'@;
put 'cmUiLCJhc3NvLnJlIiwiY29tLnJlIiwibm9tLnJlIiwicm8iLCJhcnRzLnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8ucm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJycyIsImFjLnJzIiwiY28ucnMiLCJlZHUu'@;
put 'cnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJhYy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5ydyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwibmV0LnNhIiwib3JnLnNhIiwiZ292LnNhIiwibWVkLnNhIiwicHViLnNhIiwiZWR1'@;
put 'LnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yuc2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNvbS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsImVkdS5zYyIsInNkIiwiY29tLnNkIiwibmV0LnNkIiwib3JnLnNkIiwiZWR1LnNkIiwibWVkLnNkIiwi'@;
put 'dHYuc2QiLCJnb3Yuc2QiLCJpbmZvLnNkIiwic2UiLCJhLnNlIiwiYWMuc2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIsImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIsImkuc2UiLCJrLnNlIiwia29tZm9yYi5z'@;
put 'ZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2UiLCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5hdHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2UiLCJyLnNlIiwicy5zZSIsInQuc2UiLCJ0'@;
put 'bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwic2ciLCJjb20uc2ciLCJuZXQuc2ciLCJvcmcuc2ciLCJnb3Yuc2ciLCJlZHUuc2ciLCJwZXIuc2ciLCJzaCIsImNvbS5zaCIsIm5ldC5zaCIsImdvdi5zaCIsIm9yZy5zaCIsIm1pbC5zaCIsInNpIiwic2oiLCJzayIs'@;
put 'InNsIiwiY29tLnNsIiwibmV0LnNsIiwiZWR1LnNsIiwiZ292LnNsIiwib3JnLnNsIiwic20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIsImdvdi5zbyIsIm1lLnNv'@;
put 'IiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvbS5zcyIsImVkdS5zcyIsImdvdi5zcyIsIm1lLnNzIiwibmV0LnNzIiwib3JnLnNzIiwic2NoLnNzIiwic3QiLCJjby5zdCIsImNvbS5zdCIsImNvbnN1bGFkby5zdCIsImVkdS5zdCIsImVtYmFpeGFkYS5zdCIsIm1p'@;
put 'bC5zdCIsIm5ldC5zdCIsIm9yZy5zdCIsInByaW5jaXBlLnN0Iiwic2FvdG9tZS5zdCIsInN0b3JlLnN0Iiwic3UiLCJzdiIsImNvbS5zdiIsImVkdS5zdiIsImdvYi5zdiIsIm9yZy5zdiIsInJlZC5zdiIsInN4IiwiZ292LnN4Iiwic3kiLCJlZHUuc3kiLCJnb3Yuc3kiLCJuZXQuc3kiLCJt'@;
put 'aWwuc3kiLCJjb20uc3kiLCJvcmcuc3kiLCJzeiIsImNvLnN6IiwiYWMuc3oiLCJvcmcuc3oiLCJ0YyIsInRkIiwidGVsIiwidGYiLCJ0ZyIsInRoIiwiYWMudGgiLCJjby50aCIsImdvLnRoIiwiaW4udGgiLCJtaS50aCIsIm5ldC50aCIsIm9yLnRoIiwidGoiLCJhYy50aiIsImJpei50aiIs'@;
put 'ImNvLnRqIiwiY29tLnRqIiwiZWR1LnRqIiwiZ28udGoiLCJnb3YudGoiLCJpbnQudGoiLCJtaWwudGoiLCJuYW1lLnRqIiwibmV0LnRqIiwibmljLnRqIiwib3JnLnRqIiwidGVzdC50aiIsIndlYi50aiIsInRrIiwidGwiLCJnb3YudGwiLCJ0bSIsImNvbS50bSIsImNvLnRtIiwib3JnLnRt'@;
put 'IiwibmV0LnRtIiwibm9tLnRtIiwiZ292LnRtIiwibWlsLnRtIiwiZWR1LnRtIiwidG4iLCJjb20udG4iLCJlbnMudG4iLCJmaW4udG4iLCJnb3YudG4iLCJpbmQudG4iLCJpbmZvLnRuIiwiaW50bC50biIsIm1pbmNvbS50biIsIm5hdC50biIsIm5ldC50biIsIm9yZy50biIsInBlcnNvLnRu'@;
put 'IiwidG91cmlzbS50biIsInRvIiwiY29tLnRvIiwiZ292LnRvIiwibmV0LnRvIiwib3JnLnRvIiwiZWR1LnRvIiwibWlsLnRvIiwidHIiLCJhdi50ciIsImJicy50ciIsImJlbC50ciIsImJpei50ciIsImNvbS50ciIsImRyLnRyIiwiZWR1LnRyIiwiZ2VuLnRyIiwiZ292LnRyIiwiaW5mby50'@;
put 'ciIsIm1pbC50ciIsImsxMi50ciIsImtlcC50ciIsIm5hbWUudHIiLCJuZXQudHIiLCJvcmcudHIiLCJwb2wudHIiLCJ0ZWwudHIiLCJ0c2sudHIiLCJ0di50ciIsIndlYi50ciIsIm5jLnRyIiwiZ292Lm5jLnRyIiwidHQiLCJjby50dCIsImNvbS50dCIsIm9yZy50dCIsIm5ldC50dCIsImJp'@;
put 'ei50dCIsImluZm8udHQiLCJwcm8udHQiLCJpbnQudHQiLCJjb29wLnR0Iiwiam9icy50dCIsIm1vYmkudHQiLCJ0cmF2ZWwudHQiLCJtdXNldW0udHQiLCJhZXJvLnR0IiwibmFtZS50dCIsImdvdi50dCIsImVkdS50dCIsInR2IiwidHciLCJlZHUudHciLCJnb3YudHciLCJtaWwudHciLCJj'@;
put 'b20udHciLCJuZXQudHciLCJvcmcudHciLCJpZHYudHciLCJnYW1lLnR3IiwiZWJpei50dyIsImNsdWIudHciLCJcdTdkYjJcdThkZWYudHciLCJcdTdkNDRcdTdlNTQudHciLCJcdTU1NDZcdTY5NmQudHciLCJ0eiIsImFjLnR6IiwiY28udHoiLCJnby50eiIsImhvdGVsLnR6IiwiaW5mby50'@;
put 'eiIsIm1lLnR6IiwibWlsLnR6IiwibW9iaS50eiIsIm5lLnR6Iiwib3IudHoiLCJzYy50eiIsInR2LnR6IiwidWEiLCJjb20udWEiLCJlZHUudWEiLCJnb3YudWEiLCJpbi51YSIsIm5ldC51YSIsIm9yZy51YSIsImNoZXJrYXNzeS51YSIsImNoZXJrYXN5LnVhIiwiY2hlcm5pZ292LnVhIiwi'@;
put 'Y2hlcm5paGl2LnVhIiwiY2hlcm5pdnRzaS51YSIsImNoZXJub3Z0c3kudWEiLCJjay51YSIsImNuLnVhIiwiY3IudWEiLCJjcmltZWEudWEiLCJjdi51YSIsImRuLnVhIiwiZG5lcHJvcGV0cm92c2sudWEiLCJkbmlwcm9wZXRyb3Zzay51YSIsImRvbmV0c2sudWEiLCJkcC51YSIsImlmLnVh'@;
put 'IiwiaXZhbm8tZnJhbmtpdnNrLnVhIiwia2gudWEiLCJraGFya2l2LnVhIiwia2hhcmtvdi51YSIsImtoZXJzb24udWEiLCJraG1lbG5pdHNraXkudWEiLCJraG1lbG55dHNreWkudWEiLCJraWV2LnVhIiwia2lyb3ZvZ3JhZC51YSIsImttLnVhIiwia3IudWEiLCJrcnltLnVhIiwia3MudWEi'@;
put 'LCJrdi51YSIsImt5aXYudWEiLCJsZy51YSIsImx0LnVhIiwibHVnYW5zay51YSIsImx1dHNrLnVhIiwibHYudWEiLCJsdml2LnVhIiwibWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2YS51YSIs'@;
put 'InJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9wb2wudWEiLCJzbS51YSIsInN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51YSIsInZpbm5pY2EudWEiLCJ2aW5ueXRzaWEudWEiLCJ2bi51'@;
put 'YSIsInZvbHluLnVhIiwieWFsdGEudWEiLCJ6YXBvcml6aHpoZS51YSIsInphcG9yaXpoemhpYS51YSIsInpoaXRvbWlyLnVhIiwiemh5dG9teXIudWEiLCJ6cC51YSIsInp0LnVhIiwidWciLCJjby51ZyIsIm9yLnVnIiwiYWMudWciLCJzYy51ZyIsImdvLnVnIiwibmUudWciLCJjb20udWci'@;
put 'LCJvcmcudWciLCJ1ayIsImFjLnVrIiwiY28udWsiLCJnb3YudWsiLCJsdGQudWsiLCJtZS51ayIsIm5ldC51ayIsIm5ocy51ayIsIm9yZy51ayIsInBsYy51ayIsInBvbGljZS51ayIsIiouc2NoLnVrIiwidXMiLCJkbmkudXMiLCJmZWQudXMiLCJpc2EudXMiLCJraWRzLnVzIiwibnNuLnVz'@;
put 'IiwiYWsudXMiLCJhbC51cyIsImFyLnVzIiwiYXMudXMiLCJhei51cyIsImNhLnVzIiwiY28udXMiLCJjdC51cyIsImRjLnVzIiwiZGUudXMiLCJmbC51cyIsImdhLnVzIiwiZ3UudXMiLCJoaS51cyIsImlhLnVzIiwiaWQudXMiLCJpbC51cyIsImluLnVzIiwia3MudXMiLCJreS51cyIsImxh'@;
put 'LnVzIiwibWEudXMiLCJtZC51cyIsIm1lLnVzIiwibWkudXMiLCJtbi51cyIsIm1vLnVzIiwibXMudXMiLCJtdC51cyIsIm5jLnVzIiwibmQudXMiLCJuZS51cyIsIm5oLnVzIiwibmoudXMiLCJubS51cyIsIm52LnVzIiwibnkudXMiLCJvaC51cyIsIm9rLnVzIiwib3IudXMiLCJwYS51cyIs'@;
put 'InByLnVzIiwicmkudXMiLCJzYy51cyIsInNkLnVzIiwidG4udXMiLCJ0eC51cyIsInV0LnVzIiwidmkudXMiLCJ2dC51cyIsInZhLnVzIiwid2EudXMiLCJ3aS51cyIsInd2LnVzIiwid3kudXMiLCJrMTIuYWsudXMiLCJrMTIuYWwudXMiLCJrMTIuYXIudXMiLCJrMTIuYXMudXMiLCJrMTIu'@;
put 'YXoudXMiLCJrMTIuY2EudXMiLCJrMTIuY28udXMiLCJrMTIuY3QudXMiLCJrMTIuZGMudXMiLCJrMTIuZGUudXMiLCJrMTIuZmwudXMiLCJrMTIuZ2EudXMiLCJrMTIuZ3UudXMiLCJrMTIuaWEudXMiLCJrMTIuaWQudXMiLCJrMTIuaWwudXMiLCJrMTIuaW4udXMiLCJrMTIua3MudXMiLCJr'@;
put 'MTIua3kudXMiLCJrMTIubGEudXMiLCJrMTIubWEudXMiLCJrMTIubWQudXMiLCJrMTIubWUudXMiLCJrMTIubWkudXMiLCJrMTIubW4udXMiLCJrMTIubW8udXMiLCJrMTIubXMudXMiLCJrMTIubXQudXMiLCJrMTIubmMudXMiLCJrMTIubmUudXMiLCJrMTIubmgudXMiLCJrMTIubmoudXMi'@;
put 'LCJrMTIubm0udXMiLCJrMTIubnYudXMiLCJrMTIubnkudXMiLCJrMTIub2gudXMiLCJrMTIub2sudXMiLCJrMTIub3IudXMiLCJrMTIucGEudXMiLCJrMTIucHIudXMiLCJrMTIuc2MudXMiLCJrMTIudG4udXMiLCJrMTIudHgudXMiLCJrMTIudXQudXMiLCJrMTIudmkudXMiLCJrMTIudnQu'@;
put 'dXMiLCJrMTIudmEudXMiLCJrMTIud2EudXMiLCJrMTIud2kudXMiLCJrMTIud3kudXMiLCJjYy5hay51cyIsImNjLmFsLnVzIiwiY2MuYXIudXMiLCJjYy5hcy51cyIsImNjLmF6LnVzIiwiY2MuY2EudXMiLCJjYy5jby51cyIsImNjLmN0LnVzIiwiY2MuZGMudXMiLCJjYy5kZS51cyIsImNj'@;
put 'LmZsLnVzIiwiY2MuZ2EudXMiLCJjYy5ndS51cyIsImNjLmhpLnVzIiwiY2MuaWEudXMiLCJjYy5pZC51cyIsImNjLmlsLnVzIiwiY2MuaW4udXMiLCJjYy5rcy51cyIsImNjLmt5LnVzIiwiY2MubGEudXMiLCJjYy5tYS51cyIsImNjLm1kLnVzIiwiY2MubWUudXMiLCJjYy5taS51cyIsImNj'@;
put 'Lm1uLnVzIiwiY2MubW8udXMiLCJjYy5tcy51cyIsImNjLm10LnVzIiwiY2MubmMudXMiLCJjYy5uZC51cyIsImNjLm5lLnVzIiwiY2MubmgudXMiLCJjYy5uai51cyIsImNjLm5tLnVzIiwiY2MubnYudXMiLCJjYy5ueS51cyIsImNjLm9oLnVzIiwiY2Mub2sudXMiLCJjYy5vci51cyIsImNj'@;
put 'LnBhLnVzIiwiY2MucHIudXMiLCJjYy5yaS51cyIsImNjLnNjLnVzIiwiY2Muc2QudXMiLCJjYy50bi51cyIsImNjLnR4LnVzIiwiY2MudXQudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2MudmEudXMiLCJjYy53YS51cyIsImNjLndpLnVzIiwiY2Mud3YudXMiLCJjYy53eS51cyIsImxp'@;
put 'Yi5hay51cyIsImxpYi5hbC51cyIsImxpYi5hci51cyIsImxpYi5hcy51cyIsImxpYi5hei51cyIsImxpYi5jYS51cyIsImxpYi5jby51cyIsImxpYi5jdC51cyIsImxpYi5kYy51cyIsImxpYi5mbC51cyIsImxpYi5nYS51cyIsImxpYi5ndS51cyIsImxpYi5oaS51cyIsImxpYi5pYS51cyIs'@;
put 'ImxpYi5pZC51cyIsImxpYi5pbC51cyIsImxpYi5pbi51cyIsImxpYi5rcy51cyIsImxpYi5reS51cyIsImxpYi5sYS51cyIsImxpYi5tYS51cyIsImxpYi5tZC51cyIsImxpYi5tZS51cyIsImxpYi5taS51cyIsImxpYi5tbi51cyIsImxpYi5tby51cyIsImxpYi5tcy51cyIsImxpYi5tdC51'@;
put 'cyIsImxpYi5uYy51cyIsImxpYi5uZC51cyIsImxpYi5uZS51cyIsImxpYi5uaC51cyIsImxpYi5uai51cyIsImxpYi5ubS51cyIsImxpYi5udi51cyIsImxpYi5ueS51cyIsImxpYi5vaC51cyIsImxpYi5vay51cyIsImxpYi5vci51cyIsImxpYi5wYS51cyIsImxpYi5wci51cyIsImxpYi5y'@;
put 'aS51cyIsImxpYi5zYy51cyIsImxpYi5zZC51cyIsImxpYi50bi51cyIsImxpYi50eC51cyIsImxpYi51dC51cyIsImxpYi52aS51cyIsImxpYi52dC51cyIsImxpYi52YS51cyIsImxpYi53YS51cyIsImxpYi53aS51cyIsImxpYi53eS51cyIsInB2dC5rMTIubWEudXMiLCJjaHRyLmsxMi5t'@;
put 'YS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJhbm4tYXJib3IubWkudXMiLCJjb2cubWkudXMiLCJkc3QubWkudXMiLCJlYXRvbi5taS51cyIsImdlbi5taS51cyIsIm11cy5taS51cyIsInRlYy5taS51cyIsIndhc2h0ZW5hdy5taS51cyIsInV5IiwiY29tLnV5IiwiZWR1LnV5IiwiZ3ViLnV5'@;
put 'IiwibWlsLnV5IiwibmV0LnV5Iiwib3JnLnV5IiwidXoiLCJjby51eiIsImNvbS51eiIsIm5ldC51eiIsIm9yZy51eiIsInZhIiwidmMiLCJjb20udmMiLCJuZXQudmMiLCJvcmcudmMiLCJnb3YudmMiLCJtaWwudmMiLCJlZHUudmMiLCJ2ZSIsImFydHMudmUiLCJiaWIudmUiLCJjby52ZSIs'@;
put 'ImNvbS52ZSIsImUxMi52ZSIsImVkdS52ZSIsImZpcm0udmUiLCJnb2IudmUiLCJnb3YudmUiLCJpbmZvLnZlIiwiaW50LnZlIiwibWlsLnZlIiwibmV0LnZlIiwibm9tLnZlIiwib3JnLnZlIiwicmFyLnZlIiwicmVjLnZlIiwic3RvcmUudmUiLCJ0ZWMudmUiLCJ3ZWIudmUiLCJ2ZyIsInZp'@;
put 'IiwiY28udmkiLCJjb20udmkiLCJrMTIudmkiLCJuZXQudmkiLCJvcmcudmkiLCJ2biIsImNvbS52biIsIm5ldC52biIsIm9yZy52biIsImVkdS52biIsImdvdi52biIsImludC52biIsImFjLnZuIiwiYml6LnZuIiwiaW5mby52biIsIm5hbWUudm4iLCJwcm8udm4iLCJoZWFsdGgudm4iLCJ2'@;
put 'dSIsImNvbS52dSIsImVkdS52dSIsIm5ldC52dSIsIm9yZy52dSIsIndmIiwid3MiLCJjb20ud3MiLCJuZXQud3MiLCJvcmcud3MiLCJnb3Yud3MiLCJlZHUud3MiLCJ5dCIsIlx1MDYyN1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDU3MFx1MDU2MVx1MDU3NSIsIlx1MDlh'@;
put 'Y1x1MDliZVx1MDk4Mlx1MDliMlx1MDliZSIsIlx1MDQzMVx1MDQzMyIsIlx1MDYyN1x1MDY0NFx1MDYyOFx1MDYyZFx1MDYzMVx1MDY0YVx1MDY0NiIsIlx1MDQzMVx1MDQzNVx1MDQzYiIsIlx1NGUyZFx1NTZmZCIsIlx1NGUyZFx1NTcwYiIsIlx1MDYyN1x1MDY0NFx1MDYyY1x1MDYzMlx1'@;
put 'MDYyN1x1MDYyNlx1MDYzMSIsIlx1MDY0NVx1MDYzNVx1MDYzMSIsIlx1MDQzNVx1MDQ0ZSIsIlx1MDNiNVx1MDNjNSIsIlx1MDY0NVx1MDY0OFx1MDYzMVx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyNyIsIlx1MTBkMlx1MTBkNCIsIlx1MDNiNVx1MDNiYiIsIlx1OTk5OVx1'@;
put 'NmUyZiIsIlx1NTE2Y1x1NTNmOC5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgwYjIuXHU5OTk5XHU2ZTJmIiwiXHU2NTNmXHU1ZTljLlx1OTk5OVx1NmUyZiIsIlx1NTAwYlx1NGViYS5cdTk5OTlcdTZlMmYiLCJcdTdkYjJcdTdkNjEuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5'@;
put 'OVx1NmUyZiIsIlx1MGNhZFx1MGNiZVx1MGNiMFx1MGNhNCIsIlx1MGIyZFx1MGIzZVx1MGIzMFx1MGIyNCIsIlx1MDlhZFx1MDliZVx1MDlmMFx1MDlhNCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNFx1MDkyZVx1MDk0ZCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDk0Ylx1MDkyNCIsIlx1'@;
put 'MDY4MFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGQyZFx1MGQzZVx1MGQzMFx1MGQyNFx1MGQwMiIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCIsIlx1MDYyOFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MDYyOFx1MDZiZVx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGMyZFx1MGMzZVx1MGMzMFx1'@;
put 'MGMyNFx1MGM0ZCIsIlx1MGFhZFx1MGFiZVx1MGFiMFx1MGFhNCIsIlx1MGEyZFx1MGEzZVx1MGEzMFx1MGEyNCIsIlx1MDlhZFx1MDliZVx1MDliMFx1MDlhNCIsIlx1MGI4N1x1MGJhOFx1MGJjZFx1MGJhNFx1MGJiZlx1MGJhZlx1MGJiZSIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1'@;
put 'MDY0NiIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYzMVx1MDYyN1x1MDY0MiIsIlx1MDYyN1x1MDY0NFx1MDYyN1x1MDYzMVx1MDYyZlx1MDY0NiIsIlx1ZDU1Y1x1YWQ2ZCIsIlx1MDQ5Ylx1MDQzMFx1MDQzNyIsIlx1MGVhNVx1MGViMlx1MGVhNyIsIlx1'@;
put 'MGRiZFx1MGQ4Mlx1MGQ5YVx1MGRjZiIsIlx1MGI4N1x1MGJiMlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJjOCIsIlx1MDYyN1x1MDY0NFx1MDY0NVx1MDYzYVx1MDYzMVx1MDYyOCIsIlx1MDQzY1x1MDQzYVx1MDQzNCIsIlx1MDQzY1x1MDQzZVx1MDQzZCIsIlx1NmZiM1x1OTU4MCIsIlx1NmZi'@;
put 'M1x1OTVlOCIsIlx1MDY0NVx1MDY0NFx1MDY0YVx1MDYzM1x1MDY0YVx1MDYyNyIsIlx1MDYzOVx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDZhOVx1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDY0M1x1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIs'@;
put 'Ilx1MDY0MVx1MDY0NFx1MDYzM1x1MDYzN1x1MDY0YVx1MDY0NiIsIlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0'@;
put 'MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDNcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDMwXHUwNDNhLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0MFx1MDQ0NCIsIlx1MDY0Mlx1MDYzN1x1MDYzMSIsIlx1MDYyN1x1MDY0'@;
put 'NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDZjMyIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYz'@;
put 'OVx1MDY0OFx1MDYyZlx1MDY0YVx1MDY0NyIsIlx1MDYzM1x1MDY0OFx1MDYyZlx1MDYyN1x1MDY0NiIsIlx1NjViMFx1NTJhMFx1NTc2MSIsIlx1MGI5YVx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJhYVx1MGJjZFx1MGJhYVx1MGJjMlx1MGJiMFx1MGJjZCIsIlx1MDYzM1x1MDY0OFx1'@;
put 'MDYzMVx1MDY0YVx1MDYyOSIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyNyIsIlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyOFx1MGUzNlx1MGUwMVx1MGUyOVx1MGUzMi5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMThcdTBlMzhcdTBlMjNcdTBlMDFcdTBlMzRcdTBlMDguXHUw'@;
put 'ZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTIzXHUwZTMxXHUwZTEwXHUwZTFhXHUwZTMyXHUwZTI1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxN1x1MGUyYlx1MGUzMlx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlNDBcdTBlMTlcdTBlNDdcdTBlMTUuXHUwZTQ0XHUwZTE3XHUwZTIy'@;
put 'IiwiXHUwZTJkXHUwZTA3XHUwZTA0XHUwZTRjXHUwZTAxXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MDYyYVx1MDY0OFx1MDY0Nlx1MDYzMyIsIlx1NTNmMFx1NzA2MyIsIlx1NTNmMFx1NmU3ZSIsIlx1ODFmYVx1NzA2MyIsIlx1MDQ0M1x1MDQzYVx1MDQ0MCIsIlx1MDYyN1x1MDY0'@;
put 'NFx1MDY0YVx1MDY0NVx1MDY0NiIsInh4eCIsInllIiwiY29tLnllIiwiZWR1LnllIiwiZ292LnllIiwibmV0LnllIiwibWlsLnllIiwib3JnLnllIiwiYWMuemEiLCJhZ3JpYy56YSIsImFsdC56YSIsImNvLnphIiwiZWR1LnphIiwiZ292LnphIiwiZ3JvbmRhci56YSIsImxhdy56YSIsIm1p'@;
put 'bC56YSIsIm5ldC56YSIsIm5nby56YSIsIm5pYy56YSIsIm5pcy56YSIsIm5vbS56YSIsIm9yZy56YSIsInNjaG9vbC56YSIsInRtLnphIiwid2ViLnphIiwiem0iLCJhYy56bSIsImJpei56bSIsImNvLnptIiwiY29tLnptIiwiZWR1LnptIiwiZ292LnptIiwiaW5mby56bSIsIm1pbC56bSIs'@;
put 'Im5ldC56bSIsIm9yZy56bSIsInNjaC56bSIsInp3IiwiYWMuenciLCJjby56dyIsImdvdi56dyIsIm1pbC56dyIsIm9yZy56dyIsImFhYSIsImFhcnAiLCJhYmFydGgiLCJhYmIiLCJhYmJvdHQiLCJhYmJ2aWUiLCJhYmMiLCJhYmxlIiwiYWJvZ2FkbyIsImFidWRoYWJpIiwiYWNhZGVteSIs'@;
put 'ImFjY2VudHVyZSIsImFjY291bnRhbnQiLCJhY2NvdW50YW50cyIsImFjbyIsImFjdG9yIiwiYWRhYyIsImFkcyIsImFkdWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwi'@;
put 'YWxmYXJvbWVvIiwiYWxpYmFiYSIsImFsaXBheSIsImFsbGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFsc3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRp'@;
put 'Y3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56IiwiYW9sIiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxlIiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rp'@;
put 'b24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwiYXVzcG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF2aWFuY2EiLCJhd3MiLCJheGEiLCJhenVyZSIsImJhYnkiLCJiYWlkdSIsImJhbmFtZXgiLCJiYW5hbmFyZXB1YmxpYyIsImJhbmQiLCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25h'@;
put 'IiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMiLCJiYXNlYmFsbCIsImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5IiwiYmVlciIsImJlbnRsZXkiLCJiZXJsaW4i'@;
put 'LCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwiYmlrZSIsImJpbmciLCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1zIiwiYm13IiwiYm5wcGFyaWJhcyIsImJv'@;
put 'YXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9vayIsImJvb2tpbmciLCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fkd2F5IiwiYnJva2VyIiwiYnJvdGhlciIs'@;
put 'ImJydXNzZWxzIiwiYnVnYXR0aSIsImJ1aWxkIiwiYnVpbGRlcnMiLCJidXNpbmVzcyIsImJ1eSIsImJ1enoiLCJiemgiLCJjYWIiLCJjYWZlIiwiY2FsIiwiY2FsbCIsImNhbHZpbmtsZWluIiwiY2FtIiwiY2FtZXJhIiwiY2FtcCIsImNhbmNlcnJlc2VhcmNoIiwiY2Fub24iLCJjYXBldG93'@;
put 'biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNhcmVlcnMiLCJjYXJzIiwiY2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIsImNiYSIsImNibiIsImNicmUiLCJjYnMiLCJjZW50'@;
put 'ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJjaGVhcCIsImNoaW50YWkiLCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIsImNpc2NvIiwiY2l0YWRlbCIsImNpdGki'@;
put 'LCJjaXRpYyIsImNpdHkiLCJjaXR5ZWF0cyIsImNsYWltcyIsImNsZWFuaW5nIiwiY2xpY2siLCJjbGluaWMiLCJjbGluaXF1ZSIsImNsb3RoaW5nIiwiY2xvdWQiLCJjbHViIiwiY2x1Ym1lZCIsImNvYWNoIiwiY29kZXMiLCJjb2ZmZWUiLCJjb2xsZWdlIiwiY29sb2duZSIsImNvbWNhc3Qi'@;
put 'LCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwiY29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIsImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2tpbmdjaGFubmVsIiwiY29vbCIsImNvcnNp'@;
put 'Y2EiLCJjb3VudHJ5IiwiY291cG9uIiwiY291cG9ucyIsImNvdXJzZXMiLCJjcGEiLCJjcmVkaXQiLCJjcmVkaXRjYXJkIiwiY3JlZGl0dW5pb24iLCJjcmlja2V0IiwiY3Jvd24iLCJjcnMiLCJjcnVpc2UiLCJjcnVpc2VzIiwiY3Vpc2luZWxsYSIsImN5bXJ1IiwiY3lvdSIsImRhYnVyIiwi'@;
put 'ZGFkIiwiZGFuY2UiLCJkYXRhIiwiZGF0ZSIsImRhdGluZyIsImRhdHN1biIsImRheSIsImRjbGsiLCJkZHMiLCJkZWFsIiwiZGVhbGVyIiwiZGVhbHMiLCJkZWdyZWUiLCJkZWxpdmVyeSIsImRlbGwiLCJkZWxvaXR0ZSIsImRlbHRhIiwiZGVtb2NyYXQiLCJkZW50YWwiLCJkZW50aXN0Iiwi'@;
put 'ZGVzaSIsImRlc2lnbiIsImRldiIsImRobCIsImRpYW1vbmRzIiwiZGlldCIsImRpZ2l0YWwiLCJkaXJlY3QiLCJkaXJlY3RvcnkiLCJkaXNjb3VudCIsImRpc2NvdmVyIiwiZGlzaCIsImRpeSIsImRucCIsImRvY3MiLCJkb2N0b3IiLCJkb2ciLCJkb21haW5zIiwiZG90IiwiZG93bmxvYWQi'@;
put 'LCJkcml2ZSIsImR0diIsImR1YmFpIiwiZHVubG9wIiwiZHVwb250IiwiZHVyYmFuIiwiZHZhZyIsImR2ciIsImVhcnRoIiwiZWF0IiwiZWNvIiwiZWRla2EiLCJlZHVjYXRpb24iLCJlbWFpbCIsImVtZXJjayIsImVuZXJneSIsImVuZ2luZWVyIiwiZW5naW5lZXJpbmciLCJlbnRlcnByaXNl'@;
put 'cyIsImVwc29uIiwiZXF1aXBtZW50IiwiZXJpY3Nzb24iLCJlcm5pIiwiZXNxIiwiZXN0YXRlIiwiZXRpc2FsYXQiLCJldXJvdmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJhc3BhY2UiLCJmYWdlIiwiZmFpbCIsImZh'@;
put 'aXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwiZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlvbiIsImZhc3QiLCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWF0IiwiZmlkZWxpdHkiLCJmaWRvIiwiZmlsbSIsImZpbmFsIiwiZmluYW5jZSIsImZp'@;
put 'bmFuY2lhbCIsImZpcmUiLCJmaXJlc3RvbmUiLCJmaXJtZGFsZSIsImZpc2giLCJmaXNoaW5nIiwiZml0IiwiZml0bmVzcyIsImZsaWNrciIsImZsaWdodHMiLCJmbGlyIiwiZmxvcmlzdCIsImZsb3dlcnMiLCJmbHkiLCJmb28iLCJmb29kIiwiZm9vZG5ldHdvcmsiLCJmb290YmFsbCIsImZv'@;
put 'cmQiLCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3giLCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIsImZyb250ZG9vciIsImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJn'@;
put 'YWwiLCJnYWxsZXJ5IiwiZ2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJkZW4iLCJnYXkiLCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIs'@;
put 'Imdsb2JhbCIsImdsb2JvIiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdvbGQiLCJnb2xkcG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwi'@;
put 'Z3JpcGUiLCJncm9jZXJ5IiwiZ3JvdXAiLCJndWFyZGlhbiIsImd1Y2NpIiwiZ3VnZSIsImd1aWRlIiwiZ3VpdGFycyIsImd1cnUiLCJoYWlyIiwiaGFtYnVyZyIsImhhbmdvdXQiLCJoYXVzIiwiaGJvIiwiaGRmYyIsImhkZmNiYW5rIiwiaGVhbHRoIiwiaGVhbHRoY2FyZSIsImhlbHAiLCJo'@;
put 'ZWxzaW5raSIsImhlcmUiLCJoZXJtZXMiLCJoZ3R2IiwiaGlwaG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIsImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIs'@;
put 'Imhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3QiLCJob3RlbGVzIiwiaG90ZWxzIiwiaG90bWFpbCIsImhvdXNlIiwiaG93IiwiaHNiYyIsImh1Z2hlcyIsImh5YXR0IiwiaHl1bmRhaSIsImlibSIsImljYmMiLCJpY2UiLCJpY3UiLCJpZWVlIiwiaWZtIiwiaWthbm8iLCJpbWFtYXQi'@;
put 'LCJpbWRiIiwiaW1tbyIsImltbW9iaWxpZW4iLCJpbmMiLCJpbmR1c3RyaWVzIiwiaW5maW5pdGkiLCJpbmciLCJpbmsiLCJpbnN0aXR1dGUiLCJpbnN1cmFuY2UiLCJpbnN1cmUiLCJpbnRlcm5hdGlvbmFsIiwiaW50dWl0IiwiaW52ZXN0bWVudHMiLCJpcGlyYW5nYSIsImlyaXNoIiwiaXNt'@;
put 'YWlsaSIsImlzdCIsImlzdGFuYnVsIiwiaXRhdSIsIml0diIsImphZ3VhciIsImphdmEiLCJqY2IiLCJqZWVwIiwiamV0enQiLCJqZXdlbHJ5IiwiamlvIiwiamxsIiwiam1wIiwiam5qIiwiam9idXJnIiwiam90Iiwiam95IiwianBtb3JnYW4iLCJqcHJzIiwianVlZ29zIiwianVuaXBlciIs'@;
put 'ImthdWZlbiIsImtkZGkiLCJrZXJyeWhvdGVscyIsImtlcnJ5bG9naXN0aWNzIiwia2Vycnlwcm9wZXJ0aWVzIiwia2ZoIiwia2lhIiwia2lkcyIsImtpbSIsImtpbmRlciIsImtpbmRsZSIsImtpdGNoZW4iLCJraXdpIiwia29lbG4iLCJrb21hdHN1Iiwia29zaGVyIiwia3BtZyIsImtwbiIs'@;
put 'ImtyZCIsImtyZWQiLCJrdW9rZ3JvdXAiLCJreW90byIsImxhY2FpeGEiLCJsYW1ib3JnaGluaSIsImxhbWVyIiwibGFuY2FzdGVyIiwibGFuY2lhIiwibGFuZCIsImxhbmRyb3ZlciIsImxhbnhlc3MiLCJsYXNhbGxlIiwibGF0IiwibGF0aW5vIiwibGF0cm9iZSIsImxhdyIsImxhd3llciIs'@;
put 'ImxkcyIsImxlYXNlIiwibGVjbGVyYyIsImxlZnJhayIsImxlZ2FsIiwibGVnbyIsImxleHVzIiwibGdidCIsImxpZGwiLCJsaWZlIiwibGlmZWluc3VyYW5jZSIsImxpZmVzdHlsZSIsImxpZ2h0aW5nIiwibGlrZSIsImxpbGx5IiwibGltaXRlZCIsImxpbW8iLCJsaW5jb2xuIiwibGluZGUi'@;
put 'LCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxvYW5zIiwibG9ja2VyIiwibG9jdXMiLCJsb2Z0IiwibG9sIiwibG9uZG9uIiwibG90dGUiLCJsb3R0byIsImxvdmUiLCJscGwiLCJscGxmaW5hbmNpYWwiLCJsdGQiLCJsdGRhIiwibHVuZGJlY2si'@;
put 'LCJsdXhlIiwibHV4dXJ5IiwibWFjeXMiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFuYWdlbWVudCIsIm1hbmdvIiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0IiwibWFyc2hhbGxzIiwibWFzZXJhdGkiLCJtYXR0ZWwi'@;
put 'LCJtYmEiLCJtY2tpbnNleSIsIm1lZCIsIm1lZGlhIiwibWVldCIsIm1lbGJvdXJuZSIsIm1lbWUiLCJtZW1vcmlhbCIsIm1lbiIsIm1lbnUiLCJtZXJja21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRzdWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwi'@;
put 'bW9iaWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1vcnRnYWdlIiwibW9zY293IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJtdHIiLCJtdXNpYyIsIm11dHVhbCIsIm5hYiIs'@;
put 'Im5hZ295YSIsIm5hdHVyYSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGlyZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlrZSIsIm5pa29uIiwibmluamEi'@;
put 'LCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRod2VzdGVybm11dHVhbCIsIm5vcnRvbiIsIm5vdyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZpY2UiLCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJv'@;
put 'bGRuYXZ5Iiwib2xsbyIsIm9tZWdhIiwib25lIiwib25nIiwib25sIiwib25saW5lIiwib29vIiwib3BlbiIsIm9yYWNsZSIsIm9yYW5nZSIsIm9yZ2FuaWMiLCJvcmlnaW5zIiwib3Nha2EiLCJvdHN1a2EiLCJvdHQiLCJvdmgiLCJwYWdlIiwicGFuYXNvbmljIiwicGFyaXMiLCJwYXJzIiwi'@;
put 'cGFydG5lcnMiLCJwYXJ0cyIsInBhcnR5IiwicGFzc2FnZW5zIiwicGF5IiwicGNjdyIsInBldCIsInBmaXplciIsInBoYXJtYWN5IiwicGhkIiwicGhpbGlwcyIsInBob25lIiwicGhvdG8iLCJwaG90b2dyYXBoeSIsInBob3RvcyIsInBoeXNpbyIsInBpY3MiLCJwaWN0ZXQiLCJwaWN0dXJl'@;
put 'cyIsInBpZCIsInBpbiIsInBpbmciLCJwaW5rIiwicGlvbmVlciIsInBpenphIiwicGxhY2UiLCJwbGF5IiwicGxheXN0YXRpb24iLCJwbHVtYmluZyIsInBsdXMiLCJwbmMiLCJwb2hsIiwicG9rZXIiLCJwb2xpdGllIiwicG9ybiIsInByYW1lcmljYSIsInByYXhpIiwicHJlc3MiLCJwcmlt'@;
put 'ZSIsInByb2QiLCJwcm9kdWN0aW9ucyIsInByb2YiLCJwcm9ncmVzc2l2ZSIsInByb21vIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicHJvdGVjdGlvbiIsInBydSIsInBydWRlbnRpYWwiLCJwdWIiLCJwd2MiLCJxcG9uIiwicXVlYmVjIiwicXVlc3QiLCJyYWNpbmciLCJyYWRpbyIsInJl'@;
put 'YWQiLCJyZWFsZXN0YXRlIiwicmVhbHRvciIsInJlYWx0eSIsInJlY2lwZXMiLCJyZWQiLCJyZWRzdG9uZSIsInJlZHVtYnJlbGxhIiwicmVoYWIiLCJyZWlzZSIsInJlaXNlbiIsInJlaXQiLCJyZWxpYW5jZSIsInJlbiIsInJlbnQiLCJyZW50YWxzIiwicmVwYWlyIiwicmVwb3J0IiwicmVw'@;
put 'dWJsaWNhbiIsInJlc3QiLCJyZXN0YXVyYW50IiwicmV2aWV3IiwicmV2aWV3cyIsInJleHJvdGgiLCJyaWNoIiwicmljaGFyZGxpIiwicmljb2giLCJyaWwiLCJyaW8iLCJyaXAiLCJyb2NoZXIiLCJyb2NrcyIsInJvZGVvIiwicm9nZXJzIiwicm9vbSIsInJzdnAiLCJydWdieSIsInJ1aHIi'@;
put 'LCJydW4iLCJyd2UiLCJyeXVreXUiLCJzYWFybGFuZCIsInNhZmUiLCJzYWZldHkiLCJzYWt1cmEiLCJzYWxlIiwic2Fsb24iLCJzYW1zY2x1YiIsInNhbXN1bmciLCJzYW5kdmlrIiwic2FuZHZpa2Nvcm9tYW50Iiwic2Fub2ZpIiwic2FwIiwic2FybCIsInNhcyIsInNhdmUiLCJzYXhvIiwi'@;
put 'c2JpIiwic2JzIiwic2NhIiwic2NiIiwic2NoYWVmZmxlciIsInNjaG1pZHQiLCJzY2hvbGFyc2hpcHMiLCJzY2hvb2wiLCJzY2h1bGUiLCJzY2h3YXJ6Iiwic2NpZW5jZSIsInNjb3QiLCJzZWFyY2giLCJzZWF0Iiwic2VjdXJlIiwic2VjdXJpdHkiLCJzZWVrIiwic2VsZWN0Iiwic2VuZXIi'@;
put 'LCJzZXJ2aWNlcyIsInNlcyIsInNldmVuIiwic2V3Iiwic2V4Iiwic2V4eSIsInNmciIsInNoYW5ncmlsYSIsInNoYXJwIiwic2hhdyIsInNoZWxsIiwic2hpYSIsInNoaWtzaGEiLCJzaG9lcyIsInNob3AiLCJzaG9wcGluZyIsInNob3VqaSIsInNob3ciLCJzaG93dGltZSIsInNpbGsiLCJz'@;
put 'aW5hIiwic2luZ2xlcyIsInNpdGUiLCJza2kiLCJza2luIiwic2t5Iiwic2t5cGUiLCJzbGluZyIsInNtYXJ0Iiwic21pbGUiLCJzbmNmIiwic29jY2VyIiwic29jaWFsIiwic29mdGJhbmsiLCJzb2Z0d2FyZSIsInNvaHUiLCJzb2xhciIsInNvbHV0aW9ucyIsInNvbmciLCJzb255Iiwic295'@;
put 'Iiwic3BhIiwic3BhY2UiLCJzcG9ydCIsInNwb3QiLCJzcmwiLCJzdGFkYSIsInN0YXBsZXMiLCJzdGFyIiwic3RhdGViYW5rIiwic3RhdGVmYXJtIiwic3RjIiwic3RjZ3JvdXAiLCJzdG9ja2hvbG0iLCJzdG9yYWdlIiwic3RvcmUiLCJzdHJlYW0iLCJzdHVkaW8iLCJzdHVkeSIsInN0eWxl'@;
put 'Iiwic3Vja3MiLCJzdXBwbGllcyIsInN1cHBseSIsInN1cHBvcnQiLCJzdXJmIiwic3VyZ2VyeSIsInN1enVraSIsInN3YXRjaCIsInN3aXNzIiwic3lkbmV5Iiwic3lzdGVtcyIsInRhYiIsInRhaXBlaSIsInRhbGsiLCJ0YW9iYW8iLCJ0YXJnZXQiLCJ0YXRhbW90b3JzIiwidGF0YXIiLCJ0'@;
put 'YXR0b28iLCJ0YXgiLCJ0YXhpIiwidGNpIiwidGRrIiwidGVhbSIsInRlY2giLCJ0ZWNobm9sb2d5IiwidGVtYXNlayIsInRlbm5pcyIsInRldmEiLCJ0aGQiLCJ0aGVhdGVyIiwidGhlYXRyZSIsInRpYWEiLCJ0aWNrZXRzIiwidGllbmRhIiwidGlmZmFueSIsInRpcHMiLCJ0aXJlcyIsInRp'@;
put 'cm9sIiwidGptYXh4IiwidGp4IiwidGttYXh4IiwidG1hbGwiLCJ0b2RheSIsInRva3lvIiwidG9vbHMiLCJ0b3AiLCJ0b3JheSIsInRvc2hpYmEiLCJ0b3RhbCIsInRvdXJzIiwidG93biIsInRveW90YSIsInRveXMiLCJ0cmFkZSIsInRyYWRpbmciLCJ0cmFpbmluZyIsInRyYXZlbCIsInRy'@;
put 'YXZlbGNoYW5uZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0cnVzdCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9sIiwidXBzIiwidmFjYXRpb25zIiwidmFu'@;
put 'YSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVyc2ljaGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9uIiwidml2YSIsInZpdm8iLCJ2bGFhbmRl'@;
put 'cmVuIiwidm9ka2EiLCJ2b2xrc3dhZ2VuIiwidm9sdm8iLCJ2b3RlIiwidm90aW5nIiwidm90byIsInZveWFnZSIsInZ1ZWxvcyIsIndhbGVzIiwid2FsbWFydCIsIndhbHRlciIsIndhbmciLCJ3YW5nZ291Iiwid2F0Y2giLCJ3YXRjaGVzIiwid2VhdGhlciIsIndlYXRoZXJjaGFubmVsIiwi'@;
put 'd2ViY2FtIiwid2ViZXIiLCJ3ZWJzaXRlIiwid2VkZGluZyIsIndlaWJvIiwid2VpciIsIndob3N3aG8iLCJ3aWVuIiwid2lraSIsIndpbGxpYW1oaWxsIiwid2luIiwid2luZG93cyIsIndpbmUiLCJ3aW5uZXJzIiwid21lIiwid29sdGVyc2tsdXdlciIsIndvb2RzaWRlIiwid29yayIsIndv'@;
put 'cmtzIiwid29ybGQiLCJ3b3ciLCJ3dGMiLCJ3dGYiLCJ4Ym94IiwieGVyb3giLCJ4ZmluaXR5IiwieGlodWFuIiwieGluIiwiXHUwOTE1XHUwOTQ5XHUwOTJlIiwiXHUzMGJiXHUzMGZjXHUzMGViIiwiXHU0ZjViXHU1YzcxIiwiXHU2MTQ4XHU1NTg0IiwiXHU5NmM2XHU1NmUyIiwiXHU1NzI4'@;
put 'XHU3ZWJmIiwiXHU3MGI5XHU3NzBiIiwiXHUwZTA0XHUwZTJkXHUwZTIxIiwiXHU1MTZiXHU1MzY2IiwiXHUwNjQ1XHUwNjQ4XHUwNjQyXHUwNjM5IiwiXHU1MTZjXHU3NmNhIiwiXHU1MTZjXHU1M2Y4IiwiXHU5OTk5XHU2ODNjXHU5MWNjXHU2MmM5IiwiXHU3ZjUxXHU3YWQ5IiwiXHU3OWZi'@;
put 'XHU1MmE4IiwiXHU2MjExXHU3MjMxXHU0ZjYwIiwiXHUwNDNjXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDMyXHUwNDMwIiwiXHUwNDNhXHUwNDMwXHUwNDQyXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhIiwiXHUwNDNlXHUwNDNkXHUwNDNiXHUwNDMwXHUwNDM5XHUwNDNkIiwiXHUwNDQxXHUwNDMw'@;
put 'XHUwNDM5XHUwNDQyIiwiXHU4MDU0XHU5MDFhIiwiXHUwNWU3XHUwNWQ1XHUwNWRkIiwiXHU2NWY2XHU1YzFhIiwiXHU1ZmFlXHU1MzVhIiwiXHU2ZGUxXHU5YTZjXHU5NTIxIiwiXHUzMGQ1XHUzMGExXHUzMGMzXHUzMGI3XHUzMGU3XHUzMGYzIiwiXHUwNDNlXHUwNDQwXHUwNDMzIiwiXHUw'@;
put 'OTI4XHUwOTQ3XHUwOTFmIiwiXHUzMGI5XHUzMGM4XHUzMGEyIiwiXHUzMGEyXHUzMGRlXHUzMGJlXHUzMGYzIiwiXHVjMGJjXHVjMTMxIiwiXHU1NTQ2XHU2ODA3IiwiXHU1NTQ2XHU1ZTk3IiwiXHU1NTQ2XHU1N2NlIiwiXHUwNDM0XHUwNDM1XHUwNDQyXHUwNDM4IiwiXHUzMGRkXHUzMGE0'@;
put 'XHUzMGYzXHUzMGM4IiwiXHU2NWIwXHU5NWZiIiwiXHU1YmI2XHU5NmZiIiwiXHUwNjQzXHUwNjQ4XHUwNjQ1IiwiXHU0ZTJkXHU2NTg3XHU3ZjUxIiwiXHU0ZTJkXHU0ZmUxIiwiXHU1YTMxXHU0ZTUwIiwiXHU4YzM3XHU2YjRjIiwiXHU5NmZiXHU4YTBhXHU3NmM4XHU3OWQxIiwiXHU4ZDJk'@;
put 'XHU3MjY5IiwiXHUzMGFmXHUzMGU5XHUzMGE2XHUzMGM5IiwiXHU5MDFhXHU4Y2E5IiwiXHU3ZjUxXHU1ZTk3IiwiXHUwOTM4XHUwOTAyXHUwOTE3XHUwOTIwXHUwOTI4IiwiXHU5OTEwXHU1Mzg1IiwiXHU3ZjUxXHU3ZWRjIiwiXHUwNDNhXHUwNDNlXHUwNDNjIiwiXHU0ZTlhXHU5YTZjXHU5'@;
put 'MDBhIiwiXHU4YmZhXHU1N2ZhXHU0ZTlhIiwiXHU5OGRmXHU1NGMxIiwiXHU5OGRlXHU1MjI5XHU2ZDY2IiwiXHU2MjRiXHU2NzNhIiwiXHUwNjI3XHUwNjMxXHUwNjI3XHUwNjQ1XHUwNjQzXHUwNjQ4IiwiXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ0XHUwNjRhXHUwNjI3XHUwNjQ2IiwiXHUw'@;
put 'NjI3XHUwNjJhXHUwNjM1XHUwNjI3XHUwNjQ0XHUwNjI3XHUwNjJhIiwiXHUwNjI4XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjI3XHUwNjI4XHUwNjQ4XHUwNjM4XHUwNjI4XHUwNjRhIiwiXHUwNjQzXHUwNjI3XHUwNjJiXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQzIiwiXHUwNjQ3'@;
put 'XHUwNjQ1XHUwNjMxXHUwNjI3XHUwNjQ3IiwiXHViMmY3XHVjZWY0IiwiXHU2NTNmXHU1ZTljIiwiXHUwNjM0XHUwNjI4XHUwNjQzXHUwNjI5IiwiXHUwNjI4XHUwNjRhXHUwNjJhXHUwNjQzIiwiXHUwNjM5XHUwNjMxXHUwNjI4IiwiXHU2NzNhXHU2Nzg0IiwiXHU3ZWM0XHU3ZWM3XHU2NzNh'@;
put 'XHU2Nzg0IiwiXHU1MDY1XHU1ZWI3IiwiXHU2MmRiXHU4MDU4IiwiXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHU1OTI3XHU2MmZmIiwiXHUzMDdmXHUzMDkzXHUzMDZhIiwiXHUzMGIwXHUzMGZjXHUzMGIwXHUzMGViIiwiXHU0ZTE2XHU3NTRjIiwiXHU2NmY4XHU3YzRkIiwiXHU3ZjUxXHU1NzQw'@;
put 'IiwiXHViMmY3XHViMTM3IiwiXHUzMGIzXHUzMGUwIiwiXHU1OTI5XHU0ZTNiXHU2NTU5IiwiXHU2ZTM4XHU2MjBmIiwidmVybVx4ZjZnZW5zYmVyYXRlciIsInZlcm1ceGY2Z2Vuc2JlcmF0dW5nIiwiXHU0ZjAxXHU0ZTFhIiwiXHU0ZmUxXHU2MDZmIiwiXHU1NjA5XHU5MWNjXHU1OTI3XHU5'@;
put 'MTUyXHU1ZTk3IiwiXHU1NjA5XHU5MWNjIiwiXHU1ZTdmXHU0ZTFjIiwiXHU2NTNmXHU1MmExIiwieHl6IiwieWFjaHRzIiwieWFob28iLCJ5YW1heHVuIiwieWFuZGV4IiwieW9kb2Jhc2hpIiwieW9nYSIsInlva29oYW1hIiwieW91IiwieW91dHViZSIsInl1biIsInphcHBvcyIsInphcmEi'@;
put 'LCJ6ZXJvIiwiemlwIiwiem9uZSIsInp1ZXJpY2giLCJjYy51YSIsImluZi51YSIsImx0ZC51YSIsIjYxMS50byIsImdyYXBob3gudXMiLCIqLmRldmNkbmFjY2Vzc28uY29tIiwiYWRvYmVhZW1jbG91ZC5jb20iLCIqLmRldi5hZG9iZWFlbWNsb3VkLmNvbSIsImhseC5saXZlIiwiYWRvYmVh'@;
put 'ZW1jbG91ZC5uZXQiLCJobHgucGFnZSIsImhseDMucGFnZSIsImJlZXAucGwiLCJhaXJraXRhcHBzLmNvbSIsImFpcmtpdGFwcHMtYXUuY29tIiwiYWlya2l0YXBwcy5ldSIsImFpdmVuY2xvdWQuY29tIiwiYmFyc3kuY2EiLCIqLmNvbXB1dGUuZXN0YXRlIiwiKi5hbGNlcy5uZXR3b3JrIiwi'@;
put 'a2Fzc2VydmVyLmNvbSIsImFsdGVydmlzdGEub3JnIiwiYWx3YXlzZGF0YS5uZXQiLCJjbG91ZGZyb250Lm5ldCIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLTEuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tLmNuIiwidXMtZWFzdC0xLmFtYXpv'@;
put 'bmF3cy5jb20iLCJjbi1ub3J0aC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJjbi1ub3J0aHdlc3QtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNi'@;
put 'ZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImNh'@;
put 'LWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNv'@;
put 'bSIsInNhLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFs'@;
put 'ay5jb20iLCJ1cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29tIiwiKi5lbGIuYW1hem9uYXdzLmNvbS5jbiIsImF3c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29t'@;
put 'IiwiczMtYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMtZ292'@;
put 'LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNv'@;
put 'bSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFt'@;
put 'YXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS1jZW50cmFs'@;
put 'LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1h'@;
put 'em9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFzdC0xLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy13ZWJzaXRlLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdl'@;
put 'YnNpdGUtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5h'@;
put 'cC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5h'@;
put 'bWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInQzbDNwMHJ0Lm5ldCIsInRlbGUuYW11bmUub3JnIiwiYXBpZ2VlLmlvIiwic2lpaXRlcy5jb20iLCJhcHBzcGFjZWhvc3RlZC5jb20iLCJhcHBzcGFjZXVzZXJjb250ZW50LmNvbSIsImFwcHVkby5u'@;
put 'ZXQiLCJvbi1hcHRpYmxlLmNvbSIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZjIiwiZC5ndi52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5h'@;
put 'dGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2EiLCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhY2twbGFuZWFwcC5pbyIsImJhbGVuYS1kZXZpY2VzLmNvbSIs'@;
put 'InJzLmJhIiwiKi5iYW56YWkuY2xvdWQiLCJhcHAuYmFuemFpY2xvdWQuaW8iLCIqLmJhY2t5YXJkcy5iYW56YWljbG91ZC5pbyIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAiLCJoYW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJz'@;
put 'dXBlcnNhbGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNlLnNob3AiLCIqLmJlZ2V0LmFwcCIsImJldGFpbmFib3guY29tIiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2tiYXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEubmV0Iiwi'@;
put 'Ym91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5jb20iLCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2FmZXR5bWFyay5pbyIsInVrMC5iaWd2LmlvIiwiZGgu'@;
put 'Ynl0ZW1hcmsuY28udWsiLCJ2bS5ieXRlbWFyay5jby51ayIsImNhZmpzLmNvbSIsIm15Y2QuZXUiLCJkcnIuYWMiLCJ1d3UuYWkiLCJjYXJyZC5jbyIsImNyZC5jbyIsImp1Lm1wIiwiYWUub3JnIiwiYnIuY29tIiwiY24uY29tIiwiY29tLmRlIiwiY29tLnNlIiwiZGUuY29tIiwiZXUuY29t'@;
put 'IiwiZ2IubmV0IiwiaHUubmV0IiwianAubmV0IiwianBuLmNvbSIsIm1leC5jb20iLCJydS5jb20iLCJzYS5jb20iLCJzZS5uZXQiLCJ1ay5jb20iLCJ1ay5uZXQiLCJ1cy5jb20iLCJ6YS5ieiIsInphLmNvbSIsImFyLmNvbSIsImh1LmNvbSIsImtyLmNvbSIsIm5vLmNvbSIsInFjLmNvbSIs'@;
put 'InV5LmNvbSIsImFmcmljYS5jb20iLCJnci5jb20iLCJpbi5uZXQiLCJ3ZWIuaW4iLCJ1cy5vcmciLCJjby5jb20iLCJhdXMuYmFza2V0YmFsbCIsIm56LmJhc2tldGJhbGwiLCJyYWRpby5hbSIsInJhZGlvLmZtIiwiYy5sYSIsImNlcnRtZ3Iub3JnIiwiY3gudWEiLCJkaXNjb3Vyc2UuZ3Jv'@;
put 'dXAiLCJkaXNjb3Vyc2UudGVhbSIsImNsZXZlcmFwcHMuaW8iLCJjbGVyay5hcHAiLCJjbGVya3N0YWdlLmFwcCIsIioubGNsLmRldiIsIioubGNsc3RhZ2UuZGV2IiwiKi5zdGcuZGV2IiwiKi5zdGdzdGFnZS5kZXYiLCJjbGlja3Jpc2luZy5uZXQiLCJjNjYubWUiLCJjbG91ZDY2LndzIiwi'@;
put 'Y2xvdWQ2Ni56b25lIiwiamRldmNsb3VkLmNvbSIsIndwZGV2Y2xvdWQuY29tIiwiY2xvdWRhY2Nlc3MuaG9zdCIsImZyZWVzaXRlLmhvc3QiLCJjbG91ZGFjY2Vzcy5uZXQiLCJjbG91ZGNvbnRyb2xsZWQuY29tIiwiY2xvdWRjb250cm9sYXBwLmNvbSIsIiouY2xvdWRlcmEuc2l0ZSIsInBh'@;
put 'Z2VzLmRldiIsInRyeWNsb3VkZmxhcmUuY29tIiwid29ya2Vycy5kZXYiLCJ3bmV4dC5hcHAiLCJjby5jYSIsIioub3RhcC5jbyIsImNvLmN6IiwiYy5jZG43Ny5vcmciLCJjZG43Ny1zc2wubmV0Iiwici5jZG43Ny5uZXQiLCJyc2MuY2RuNzcub3JnIiwic3NsLm9yaWdpbi5jZG43Ny1zZWN1'@;
put 'cmUub3JnIiwiY2xvdWRucy5hc2lhIiwiY2xvdWRucy5iaXoiLCJjbG91ZG5zLmNsdWIiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5ldSIsImNsb3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJjbG91ZG5zLm9yZyIsImNsb3VkbnMucHJvIiwiY2xvdWRucy5wdyIsImNsb3VkbnMudXMiLCJjbnB5'@;
put 'LmdkbiIsImNvZGViZXJnLnBhZ2UiLCJjby5ubCIsImNvLm5vIiwid2ViaG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5ubCIsImFjLnJ1IiwiZWR1LnJ1IiwiZ292LnJ1IiwiaW50LnJ1IiwibWlsLnJ1IiwidGVzdC5ydSIsImR5bi5jb3NpZG5zLmRlIiwiZHluYW1pc2NoZXMtZG5zLmRl'@;
put 'IiwiZG5zdXBkYXRlci5kZSIsImludGVybmV0LWRucy5kZSIsImwtby1nLWktbi5kZSIsImR5bmFtaWMtZG5zLmluZm8iLCJmZXN0ZS1pcC5uZXQiLCJrbngtc2VydmVyLm5ldCIsInN0YXRpYy1hY2Nlc3MubmV0IiwicmVhbG0uY3oiLCIqLmNyeXB0b25vbWljLm5ldCIsImN1cGNha2UuaXMi'@;
put 'LCJjdXJ2LmRldiIsIiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29tIiwiKi5vY3MuY3VzdG9tZXItb2NpLmNvbSIsImN5b24ubGluayIsImN5b24uc2l0ZSIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwi'@;
put 'cGxhdGZvcm0wLmFwcCIsImRhcGxpZS5tZSIsImxvY2FsaG9zdC5kYXBsaWUubWUiLCJkYXR0b2xvY2FsLmNvbSIsImRhdHRvcmVsYXkuY29tIiwiZGF0dG93ZWIuY29tIiwibXlkYXR0by5jb20iLCJkYXR0b2xvY2FsLm5ldCIsIm15ZGF0dG8ubmV0IiwiYml6LmRrIiwiY28uZGsiLCJmaXJt'@;
put 'LmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8iLCIqLmRhcHBzLmVhcnRoIiwiKi5ienouZGFwcHMuZWFydGgiLCJidWlsdHdpdGhkYXJrLmNvbSIsImRlbW8uZGF0YWRldGVjdC5jb20iLCJpbnN0YW5jZS5kYXRhZGV0ZWN0LmNvbSIsImVkZ2VzdGFjay5tZSIs'@;
put 'ImRkbnM1LmNvbSIsImRlYmlhbi5uZXQiLCJkZW5vLmRldiIsImRlbm8tc3RhZ2luZy5kZXYiLCJkZWR5bi5pbyIsImRldGEuYXBwIiwiZGV0YS5kZXYiLCIqLnJzcy5teS5pZCIsIiouZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5jb20iLCJqb3ppLmJp'@;
put 'eiIsImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMuY29tIiwic2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNvbSIsIm15ZHJvYm8uY29tIiwiZHJ1ZC5pbyIsImRydWQudXMiLCJkdWNrZG5zLm9yZyIsImJpcC5zaCIsImJpdGJyaWRnZS5uZXQiLCJkeS5m'@;
put 'aSIsInR1bmsub3JnIiwiZHluZG5zLWF0LWhvbWUuY29tIiwiZHluZG5zLWF0LXdvcmsuY29tIiwiZHluZG5zLWJsb2cuY29tIiwiZHluZG5zLWZyZWUuY29tIiwiZHluZG5zLWhvbWUuY29tIiwiZHluZG5zLWlwLmNvbSIsImR5bmRucy1tYWlsLmNvbSIsImR5bmRucy1vZmZpY2UuY29tIiwi'@;
put 'ZHluZG5zLXBpY3MuY29tIiwiZHluZG5zLXJlbW90ZS5jb20iLCJkeW5kbnMtc2VydmVyLmNvbSIsImR5bmRucy13ZWIuY29tIiwiZHluZG5zLXdpa2kuY29tIiwiZHluZG5zLXdvcmsuY29tIiwiZHluZG5zLmJpeiIsImR5bmRucy5pbmZvIiwiZHluZG5zLm9yZyIsImR5bmRucy50diIsImF0'@;
put 'LWJhbmQtY2FtcC5uZXQiLCJhdGguY3giLCJiYXJyZWwtb2Yta25vd2xlZGdlLmluZm8iLCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiYmV0dGVyLXRoYW4udHYiLCJibG9nZG5zLmNvbSIsImJsb2dkbnMubmV0IiwiYmxvZ2Rucy5vcmciLCJibG9nc2l0ZS5vcmciLCJib2xkbHlnb2lu'@;
put 'Z25vd2hlcmUub3JnIiwiYnJva2UtaXQubmV0IiwiYnV5c2hvdXNlcy5uZXQiLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRuc2FsaWFzLm5ldCIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8uY29tIiwiZG5zZG9qby5uZXQiLCJkbnNkb2pvLm9yZyIsImRvZXMtaXQubmV0IiwiZG9l'@;
put 'c250ZXhpc3QuY29tIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0LmNvbSIsImRvbnRleGlzdC5uZXQiLCJkb250ZXhpc3Qub3JnIiwiZG9vbWRucy5jb20iLCJkb29tZG5zLm9yZyIsImR2cmRucy5vcmciLCJkeW4tby1zYXVyLmNvbSIsImR5bmFsaWFzLmNvbSIsImR5bmFsaWFzLm5l'@;
put 'dCIsImR5bmFsaWFzLm9yZyIsImR5bmF0aG9tZS5uZXQiLCJkeW5kbnMud3MiLCJlbmRvZmludGVybmV0Lm5ldCIsImVuZG9maW50ZXJuZXQub3JnIiwiZW5kb2Z0aGVpbnRlcm5ldC5vcmciLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEtbWFzaW9uLmNvbSIsImVzdC1sZS1wYXRy'@;
put 'b24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJpeiIsImZvci1vdXIuaW5mbyIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6IiwiZm9yZ290Lmhlci5uYW1lIiwiZm9yZ290Lmhpcy5uYW1lIiwiZnJvbS1hay5jb20iLCJmcm9tLWFs'@;
put 'LmNvbSIsImZyb20tYXIuY29tIiwiZnJvbS1hei5uZXQiLCJmcm9tLWNhLmNvbSIsImZyb20tY28ubmV0IiwiZnJvbS1jdC5jb20iLCJmcm9tLWRjLmNvbSIsImZyb20tZGUuY29tIiwiZnJvbS1mbC5jb20iLCJmcm9tLWdhLmNvbSIsImZyb20taGkuY29tIiwiZnJvbS1pYS5jb20iLCJmcm9t'@;
put 'LWlkLmNvbSIsImZyb20taWwuY29tIiwiZnJvbS1pbi5jb20iLCJmcm9tLWtzLmNvbSIsImZyb20ta3kuY29tIiwiZnJvbS1sYS5uZXQiLCJmcm9tLW1hLmNvbSIsImZyb20tbWQuY29tIiwiZnJvbS1tZS5vcmciLCJmcm9tLW1pLmNvbSIsImZyb20tbW4uY29tIiwiZnJvbS1tby5jb20iLCJm'@;
put 'cm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5kLmNvbSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW55Lm5ldCIsImZyb20tb2guY29tIiwiZnJvbS1vay5jb20i'@;
put 'LCJmcm9tLW9yLmNvbSIsImZyb20tcGEuY29tIiwiZnJvbS1wci5jb20iLCJmcm9tLXJpLmNvbSIsImZyb20tc2MuY29tIiwiZnJvbS1zZC5jb20iLCJmcm9tLXRuLmNvbSIsImZyb20tdHguY29tIiwiZnJvbS11dC5jb20iLCJmcm9tLXZhLmNvbSIsImZyb20tdnQuY29tIiwiZnJvbS13YS5j'@;
put 'b20iLCJmcm9tLXdpLmNvbSIsImZyb20td3YuY29tIiwiZnJvbS13eS5jb20iLCJmdHBhY2Nlc3MuY2MiLCJmdWV0dGVydGRhc25ldHouZGUiLCJnYW1lLWhvc3Qub3JnIiwiZ2FtZS1zZXJ2ZXIuY2MiLCJnZXRteWlwLmNvbSIsImdldHMtaXQubmV0IiwiZ28uZHluZG5zLm9yZyIsImdvdGRu'@;
put 'cy5jb20iLCJnb3RkbnMub3JnIiwiZ3Jva3MtdGhlLmluZm8iLCJncm9rcy10aGlzLmluZm8iLCJoYW0tcmFkaW8tb3AubmV0IiwiaGVyZS1mb3ItbW9yZS5pbmZvIiwiaG9iYnktc2l0ZS5jb20iLCJob2JieS1zaXRlLm9yZyIsImhvbWUuZHluZG5zLm9yZyIsImhvbWVkbnMub3JnIiwiaG9t'@;
put 'ZWZ0cC5uZXQiLCJob21lZnRwLm9yZyIsImhvbWVpcC5uZXQiLCJob21lbGludXguY29tIiwiaG9tZWxpbnV4Lm5ldCIsImhvbWVsaW51eC5vcmciLCJob21ldW5peC5jb20iLCJob21ldW5peC5uZXQiLCJob21ldW5peC5vcmciLCJpYW1hbGxhbWEuY29tIiwiaW4tdGhlLWJhbmQubmV0Iiwi'@;
put 'aXMtYS1hbmFyY2hpc3QuY29tIiwiaXMtYS1ibG9nZ2VyLmNvbSIsImlzLWEtYm9va2tlZXBlci5jb20iLCJpcy1hLWJydWluc2Zhbi5vcmciLCJpcy1hLWJ1bGxzLWZhbi5jb20iLCJpcy1hLWNhbmRpZGF0ZS5vcmciLCJpcy1hLWNhdGVyZXIuY29tIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIs'@;
put 'ImlzLWEtY2hlZi5jb20iLCJpcy1hLWNoZWYubmV0IiwiaXMtYS1jaGVmLm9yZyIsImlzLWEtY29uc2VydmF0aXZlLmNvbSIsImlzLWEtY3BhLmNvbSIsImlzLWEtY3ViaWNsZS1zbGF2ZS5jb20iLCJpcy1hLWRlbW9jcmF0LmNvbSIsImlzLWEtZGVzaWduZXIuY29tIiwiaXMtYS1kb2N0b3Iu'@;
put 'Y29tIiwiaXMtYS1maW5hbmNpYWxhZHZpc29yLmNvbSIsImlzLWEtZ2Vlay5jb20iLCJpcy1hLWdlZWsubmV0IiwiaXMtYS1nZWVrLm9yZyIsImlzLWEtZ3JlZW4uY29tIiwiaXMtYS1ndXJ1LmNvbSIsImlzLWEtaGFyZC13b3JrZXIuY29tIiwiaXMtYS1odW50ZXIuY29tIiwiaXMtYS1rbmln'@;
put 'aHQub3JnIiwiaXMtYS1sYW5kc2NhcGVyLmNvbSIsImlzLWEtbGF3eWVyLmNvbSIsImlzLWEtbGliZXJhbC5jb20iLCJpcy1hLWxpYmVydGFyaWFuLmNvbSIsImlzLWEtbGludXgtdXNlci5vcmciLCJpcy1hLWxsYW1hLmNvbSIsImlzLWEtbXVzaWNpYW4uY29tIiwiaXMtYS1uYXNjYXJmYW4u'@;
put 'Y29tIiwiaXMtYS1udXJzZS5jb20iLCJpcy1hLXBhaW50ZXIuY29tIiwiaXMtYS1wYXRzZmFuLm9yZyIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIsImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJpcy1hLXJvY2tzdGFy'@;
put 'LmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc294ZmFuLm9yZyIsImlzLWEtc3R1ZGVudC5jb20iLCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4tYWNjb3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJp'@;
put 'cy1hbi1hY3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1hcnRpc3QuY29tIiwiaXMtYW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtYnkudXMiLCJpcy1jZXJ0aWZpZWQuY29tIiwiaXMtZm91bmQub3JnIiwiaXMtZ29uZS5jb20iLCJp'@;
put 'cy1pbnRvLWFuaW1lLmNvbSIsImlzLWludG8tY2Fycy5jb20iLCJpcy1pbnRvLWNhcnRvb25zLmNvbSIsImlzLWludG8tZ2FtZXMuY29tIiwiaXMtbGVldC5jb20iLCJpcy1sb3N0Lm9yZyIsImlzLW5vdC1jZXJ0aWZpZWQuY29tIiwiaXMtc2F2ZWQub3JnIiwiaXMtc2xpY2suY29tIiwiaXMt'@;
put 'dWJlcmxlZXQuY29tIiwiaXMtdmVyeS1iYWQub3JnIiwiaXMtdmVyeS1ldmlsLm9yZyIsImlzLXZlcnktZ29vZC5vcmciLCJpcy12ZXJ5LW5pY2Uub3JnIiwiaXMtdmVyeS1zd2VldC5vcmciLCJpcy13aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWdlZWsubmV0IiwiaXNh'@;
put 'LWdlZWsub3JnIiwiaXNhLWhvY2tleW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImlzdGVpbmdlZWsuZGUiLCJpc3RtZWluLmRlIiwia2lja3MtYXNzLm5ldCIsImtpY2tzLWFzcy5vcmciLCJrbm93c2l0YWxsLmluZm8iLCJsYW5kLTQtc2FsZS51cyIsImxlYnRpbW5ldHouZGUi'@;
put 'LCJsZWl0dW5nc2VuLmRlIiwibGlrZXMtcGllLmNvbSIsImxpa2VzY2FuZHkuY29tIiwibWVyc2VpbmUubnUiLCJtaW5lLm51IiwibWlzY29uZnVzZWQub3JnIiwibXlwZXRzLndzIiwibXlwaG90b3MuY2MiLCJuZWF0LXVybC5jb20iLCJvZmZpY2Utb24tdGhlLm5ldCIsIm9uLXRoZS13ZWIu'@;
put 'dHYiLCJwb2R6b25lLm5ldCIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJzYXZlcy10aGUtd2hhbGVzLmNvbSIsInNjcmFwcGVyLXNpdGUubmV0Iiwic2NyYXBwaW5nLmNjIiwic2VsZmlwLmJpeiIsInNlbGZpcC5jb20iLCJzZWxmaXAuaW5mbyIsInNlbGZpcC5uZXQiLCJzZWxm'@;
put 'aXAub3JnIiwic2VsbHMtZm9yLWxlc3MuY29tIiwic2VsbHMtZm9yLXUuY29tIiwic2VsbHMtaXQubmV0Iiwic2VsbHN5b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5jb20iLCJzZXJ2ZWJicy5uZXQiLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5uZXQiLCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2ZWdh'@;
put 'bWUub3JnIiwic2hhY2tuZXQubnUiLCJzaW1wbGUtdXJsLmNvbSIsInNwYWNlLXRvLXJlbnQuY29tIiwic3R1ZmYtNC1zYWxlLm9yZyIsInN0dWZmLTQtc2FsZS51cyIsInRlYWNoZXMteW9nYS5jb20iLCJ0aHJ1aGVyZS5uZXQiLCJ0cmFldW10Z2VyYWRlLmRlIiwid2ViaG9wLmJpeiIsIndl'@;
put 'YmhvcC5pbmZvIiwid2ViaG9wLm5ldCIsIndlYmhvcC5vcmciLCJ3b3JzZS10aGFuLnR2Iiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiZGRuc3MuZGUiLCJkeW4uZGRuc3MuZGUiLCJkeW5kbnMuZGRuc3MuZGUiLCJkeW5kbnMxLmRlIiwiZHluLWlwMjQuZGUiLCJob21lLXdlYnNlcnZlci5kZSIs'@;
put 'ImR5bi5ob21lLXdlYnNlcnZlci5kZSIsIm15aG9tZS1zZXJ2ZXIuZGUiLCJkZG5zcy5vcmciLCJkZWZpbmltYS5uZXQiLCJkZWZpbmltYS5pbyIsIm9uZGlnaXRhbG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsImJjaS5kbnN0cmFjZS5wcm8iLCJkZG5zZnJlZS5jb20i'@;
put 'LCJkZG5zZ2Vlay5jb20iLCJnaWl6ZS5jb20iLCJnbGVlemUuY29tIiwia296b3cuY29tIiwibG9zZXlvdXJpcC5jb20iLCJvb2d1eS5jb20iLCJ0aGV3b3JrcGMuY29tIiwiY2FzYWNhbS5uZXQiLCJkeW51Lm5ldCIsImFjY2Vzc2NhbS5vcmciLCJjYW1kdnIub3JnIiwiZnJlZWRkbnMub3Jn'@;
put 'IiwibXl3aXJlLm9yZyIsIndlYnJlZGlyZWN0Lm9yZyIsIm15ZGRucy5yb2NrcyIsImJsb2dzaXRlLnh5eiIsImR5bnY2Lm5ldCIsImU0LmN6IiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImVsZW1lbnRvci5jbG91ZCIsImVsZW1lbnRvci5jb29sIiwiZW4tcm9vdC5mciIs'@;
put 'Im15dHVsZWFwLmNvbSIsInR1bGVhcC1wYXJ0bmVycy5jb20iLCJlbmNyLmFwcCIsImVuY29yZWFwaS5jb20iLCJvbnJlZC5vbmUiLCJzdGFnaW5nLm9ucmVkLm9uZSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJhc3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1'@;
put 'LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1Lm9yZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIsImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5vcmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmci'@;
put 'LCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJoci5ldS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5vcmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAuZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUu'@;
put 'b3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWMuZXUub3JnIiwibWUuZXUub3JnIiwibWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56LmV1Lm9yZyIsInBhcmlzLmV1Lm9yZyIs'@;
put 'InBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInEtYS5ldS5vcmciLCJyby5ldS5vcmciLCJydS5ldS5vcmciLCJzZS5ldS5vcmciLCJzaS5ldS5vcmciLCJzay5ldS5vcmciLCJ0ci5ldS5vcmciLCJ1ay5ldS5vcmciLCJ1cy5ldS5vcmciLCJldXJvZGlyLnJ1IiwiZXUtMS5ldmVubm9kZS5jb20i'@;
put 'LCJldS0yLmV2ZW5ub2RlLmNvbSIsImV1LTMuZXZlbm5vZGUuY29tIiwiZXUtNC5ldmVubm9kZS5jb20iLCJ1cy0xLmV2ZW5ub2RlLmNvbSIsInVzLTIuZXZlbm5vZGUuY29tIiwidXMtMy5ldmVubm9kZS5jb20iLCJ1cy00LmV2ZW5ub2RlLmNvbSIsInR3bWFpbC5jYyIsInR3bWFpbC5uZXQi'@;
put 'LCJ0d21haWwub3JnIiwibXltYWlsZXIuY29tLnR3IiwidXJsLnR3Iiwib25mYWJyaWNhLmNvbSIsImFwcHMuZmJzYnguY29tIiwicnUubmV0IiwiYWR5Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIsImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwi'@;
put 'a2FsbXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUiLCJuYWxjaGlrLnJ1Iiwibm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1IiwidmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIs'@;
put 'ImFkeWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3UiLCJhemVyYmFpamFuLnN1IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFyYS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0'@;
put 'YW4uc3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3ZvLnN1IiwiamFtYnlsLnN1Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRhLnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3Np'@;
put 'YS5zdSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1IiwibW9yZG92aWEuc3UiLCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5vcnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3Ui'@;
put 'LCJvYm5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3UiLCJ0ZXJtZXouc3UiLCJ0b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1'@;
put 'IiwidmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdlY29tcHV0ZS5hcHAiLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZhc3RseWxiLm5ldCIsIm1hcC5mYXN0bHlsYi5uZXQiLCJmcmVldGxzLmZhc3RseS5uZXQiLCJt'@;
put 'YXAuZmFzdGx5Lm5ldCIsImEucHJvZC5mYXN0bHkubmV0IiwiZ2xvYmFsLnByb2QuZmFzdGx5Lm5ldCIsImEuc3NsLmZhc3RseS5uZXQiLCJiLnNzbC5mYXN0bHkubmV0IiwiZ2xvYmFsLnNzbC5mYXN0bHkubmV0IiwiZmFzdHZwcy1zZXJ2ZXIuY29tIiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0'@;
put 'Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJmZWRvcmFpbmZyYWNsb3VkLm9yZyIsImZlZG9yYXBlb3BsZS5vcmciLCJjbG91ZC5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5zdGcuZmVkb3JhcHJvamVjdC5vcmciLCJj'@;
put 'b25uLnVrIiwiY29wcm8udWsiLCJob3NwLnVrIiwibXlkb2Jpc3MuY29tIiwiZmgtbXVlbnN0ZXIuaW8iLCJmaWxlZ2Vhci5tZSIsImZpbGVnZWFyLWF1Lm1lIiwiZmlsZWdlYXItZGUubWUiLCJmaWxlZ2Vhci1nYi5tZSIsImZpbGVnZWFyLWllLm1lIiwiZmlsZWdlYXItanAubWUiLCJmaWxl'@;
put 'Z2Vhci1zZy5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZpcmV3ZWIuYXBwIiwiZmxhcC5pZCIsIm9uZmxhc2hkcml2ZS5hcHAiLCJmbGRydi5jb20iLCJmbHkuZGV2IiwiZWRnZWFwcC5uZXQiLCJzaHcuaW8iLCJmbHlubmhvc3RpbmcubmV0IiwiZm9yZ2VibG9ja3MuY29tIiwiaWQuZm9yZ2Vy'@;
put 'b2NrLmlvIiwiZnJhbWVyLmFwcCIsImZyYW1lcmNhbnZhcy5jb20iLCIqLmZydXNreS5kZSIsInJhdnBhZ2UuY28uaWwiLCIwZS52YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1vcy5mciIsImZyZWVib3hvcy5mciIs'@;
put 'ImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIndpZW4uZnVua2ZldWVyLmF0IiwiKi5mdXR1cmVjbXMuYXQiLCIqLmV4LmZ1dHVyZWNtcy5hdCIsIiouaW4uZnV0dXJlY21zLmF0IiwiZnV0dXJlaG9zdGluZy5hdCIsImZ1dHVyZW1haWxpbmcuYXQiLCIqLmV4Lm9ydHNpbmZvLmF0'@;
put 'IiwiKi5rdW5kZW4ub3J0c2luZm8uYXQiLCIqLnN0YXRpY3MuY2xvdWQiLCJpbmRlcGVuZGVudC1jb21taXNzaW9uLnVrIiwiaW5kZXBlbmRlbnQtaW5xdWVzdC51ayIsImluZGVwZW5kZW50LWlucXVpcnkudWsiLCJpbmRlcGVuZGVudC1wYW5lbC51ayIsImluZGVwZW5kZW50LXJldmlldy51'@;
put 'ayIsInB1YmxpYy1pbnF1aXJ5LnVrIiwicm95YWwtY29tbWlzc2lvbi51ayIsImNhbXBhaWduLmdvdi51ayIsInNlcnZpY2UuZ292LnVrIiwiYXBpLmdvdi51ayIsImdlaGlybi5uZS5qcCIsInVzZXJjb250ZW50LmpwIiwiZ2VudGFwcHMuY29tIiwiZ2VudGxlbnRhcGlzLmNvbSIsImxhYi5t'@;
put 'cyIsImNkbi1lZGdlcy5uZXQiLCJnaG9zdC5pbyIsImdzai5ieiIsImdpdGh1YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21tdW5pdHkiLCJjby5y'@;
put 'byIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2guanAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQuanAiLCJjYW5keXBv'@;
put 'cC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hpY2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAiLCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJjdXRlZ2lybC5qcCIs'@;
put 'ImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdvaXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZyZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJnbG9vbXkuanAiLCJn'@;
put 'b25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwiaGVyLmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxsLmpwIiwia2lsby5q'@;
put 'cCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIsImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1vZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwibmFtYXN0ZS5qcCIs'@;
put 'Im5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIsInBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBlcHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5qcCIsInB1bnl1Lmpw'@;
put 'IiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3AuanAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5qcCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0aGljay5qcCIsInRv'@;
put 'bmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIsInZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRlc25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJjbG91ZGFwcHMuZGlnaXRhbCIs'@;
put 'ImxvbmRvbi5jbG91ZGFwcHMuZGlnaXRhbCIsInB5bW50LnVrIiwiaG9tZW9mZmljZS5nb3YudWsiLCJyby5pbSIsImdvaXAuZGUiLCJydW4uYXBwIiwiYS5ydW4uYXBwIiwid2ViLmFwcCIsIiouMGVtbS5jb20iLCJhcHBzcG90LmNvbSIsIiouci5hcHBzcG90LmNvbSIsImNvZGVzcG90LmNv'@;
put 'bSIsImdvb2dsZWFwaXMuY29tIiwiZ29vZ2xlY29kZS5jb20iLCJwYWdlc3BlZWRtb2JpbGl6ZXIuY29tIiwicHVibGlzaHByb3h5LmNvbSIsIndpdGhnb29nbGUuY29tIiwid2l0aHlvdXR1YmUuY29tIiwiKi5nYXRld2F5LmRldiIsImNsb3VkLmdvb2ciLCJ0cmFuc2xhdGUuZ29vZyIsIiou'@;
put 'dXNlcmNvbnRlbnQuZ29vZyIsImNsb3VkZnVuY3Rpb25zLm5ldCIsImJsb2dzcG90LmFlIiwiYmxvZ3Nwb3QuYWwiLCJibG9nc3BvdC5hbSIsImJsb2dzcG90LmJhIiwiYmxvZ3Nwb3QuYmUiLCJibG9nc3BvdC5iZyIsImJsb2dzcG90LmJqIiwiYmxvZ3Nwb3QuY2EiLCJibG9nc3BvdC5jZiIs'@;
put 'ImJsb2dzcG90LmNoIiwiYmxvZ3Nwb3QuY2wiLCJibG9nc3BvdC5jby5hdCIsImJsb2dzcG90LmNvLmlkIiwiYmxvZ3Nwb3QuY28uaWwiLCJibG9nc3BvdC5jby5rZSIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jby56YSIsImJsb2dzcG90LmNvbSIsImJs'@;
put 'b2dzcG90LmNvbS5hciIsImJsb2dzcG90LmNvbS5hdSIsImJsb2dzcG90LmNvbS5iciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNvbS5jbyIsImJsb2dzcG90LmNvbS5jeSIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIsImJsb2dzcG90LmNvbS5lcyIsImJsb2dz'@;
put 'cG90LmNvbS5tdCIsImJsb2dzcG90LmNvbS5uZyIsImJsb2dzcG90LmNvbS50ciIsImJsb2dzcG90LmNvbS51eSIsImJsb2dzcG90LmN2IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsImJsb2dzcG90LmRrIiwiYmxvZ3Nwb3QuZmkiLCJibG9nc3BvdC5mciIsImJsb2dzcG90LmdyIiwi'@;
put 'YmxvZ3Nwb3QuaGsiLCJibG9nc3BvdC5ociIsImJsb2dzcG90Lmh1IiwiYmxvZ3Nwb3QuaWUiLCJibG9nc3BvdC5pbiIsImJsb2dzcG90LmlzIiwiYmxvZ3Nwb3QuaXQiLCJibG9nc3BvdC5qcCIsImJsb2dzcG90LmtyIiwiYmxvZ3Nwb3QubGkiLCJibG9nc3BvdC5sdCIsImJsb2dzcG90Lmx1'@;
put 'IiwiYmxvZ3Nwb3QubWQiLCJibG9nc3BvdC5tayIsImJsb2dzcG90Lm1yIiwiYmxvZ3Nwb3QubXgiLCJibG9nc3BvdC5teSIsImJsb2dzcG90Lm5sIiwiYmxvZ3Nwb3Qubm8iLCJibG9nc3BvdC5wZSIsImJsb2dzcG90LnB0IiwiYmxvZ3Nwb3QucWEiLCJibG9nc3BvdC5yZSIsImJsb2dzcG90'@;
put 'LnJvIiwiYmxvZ3Nwb3QucnMiLCJibG9nc3BvdC5ydSIsImJsb2dzcG90LnNlIiwiYmxvZ3Nwb3Quc2ciLCJibG9nc3BvdC5zaSIsImJsb2dzcG90LnNrIiwiYmxvZ3Nwb3Quc24iLCJibG9nc3BvdC50ZCIsImJsb2dzcG90LnR3IiwiYmxvZ3Nwb3QudWciLCJibG9nc3BvdC52biIsImdvdXBp'@;
put 'bGUuZnIiLCJnb3YubmwiLCJhd3NtcHBsLmNvbSIsImdceGZjbnN0aWdiZXN0ZWxsZW4uZGUiLCJnXHhmY25zdGlnbGllZmVybi5kZSIsImZpbi5jaSIsImZyZWUuaHIiLCJjYWEubGkiLCJ1YS5ycyIsImNvbmYuc2UiLCJocy56b25lIiwiaHMucnVuIiwiaGFzaGJhbmcuc2giLCJoYXN1cmEu'@;
put 'YXBwIiwiaGFzdXJhLWFwcC5pbyIsInBhZ2VzLml0LmhzLWhlaWxicm9ubi5kZSIsImhlcGZvcmdlLm9yZyIsImhlcm9rdWFwcC5jb20iLCJoZXJva3Vzc2wuY29tIiwicmF2ZW5kYi5jbG91ZCIsIm15cmF2ZW5kYi5jb20iLCJyYXZlbmRiLmNvbW11bml0eSIsInJhdmVuZGIubWUiLCJkZXZl'@;
put 'bG9wbWVudC5ydW4iLCJyYXZlbmRiLnJ1biIsImhvbWVza2xlcC5wbCIsInNlY2Fhcy5oayIsImhvcGxpeC5zaG9wIiwib3J4LmJpeiIsImJpei5nbCIsImNvbC5uZyIsImZpcm0ubmciLCJnZW4ubmciLCJsdGQubmciLCJuZ28ubmciLCJlZHUuc2NvdCIsInNjaC5zbyIsImhvc3R5aG9zdGlu'@;
put 'Zy5pbyIsImhceGU0a2tpbmVuLmZpIiwiKi5tb29uc2NhbGUuaW8iLCJtb29uc2NhbGUubmV0IiwiaWtpLmZpIiwiaWJ4b3MuaXQiLCJpbGlhZGJveG9zLml0IiwiaW1wZXJ0cml4Y2RuLmNvbSIsImltcGVydHJpeC5jb20iLCJzbXVzaGNkbi5jb20iLCJ3cGhvc3RlZG1haWwuY29tIiwid3Bt'@;
put 'dWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVybGluLmRlIiwiaW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tZHNsLm5ldCIsImluLWRzbC5vcmciLCJpbi12cG4uZGUiLCJpbi12cG4ubmV0IiwiaW4t'@;
put 'dnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZvLmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwiYW0ubGVnLmJyIiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVnLmJyIiwibWEubGVnLmJyIiwibWcubGVn'@;
put 'LmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEubGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJyIiwicGkubGVnLmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMubGVnLmJyIiwic2MubGVnLmJyIiwic2Uu'@;
put 'bGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwicGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImlvcHN5cy5zZSIsImlwaWZvbnkubmV0IiwiaXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIsInRlc3QtaXNlcnYu'@;
put 'ZGUiLCJpc2Vydi5kZXYiLCJpb2JiLm5ldCIsIm1lbC5jbG91ZGxldHMuY29tLmF1IiwiY2xvdWQuaW50ZXJob3N0c29sdXRpb25zLmJlIiwidXNlcnMuc2NhbGUudmlydHVhbGNsb3VkLmNvbS5iciIsIm15Y2xvdWQuYnkiLCJhbHAxLmFlLmZsb3cuY2giLCJhcHBlbmdpbmUuZmxvdy5jaCIs'@;
put 'ImVzLTEuYXhhcm5ldC5jbG91ZCIsImRpYWRlbS5jbG91ZCIsInZpcC5qZWxhc3RpYy5jbG91ZCIsImplbGUuY2xvdWQiLCJpdDEuZXVyLmFydWJhLmplbnYtYXJ1YmEuY2xvdWQiLCJpdDEuamVudi1hcnViYS5jbG91ZCIsImtlbGl3ZWIuY2xvdWQiLCJjcy5rZWxpd2ViLmNsb3VkIiwib3hh'@;
put 'LmNsb3VkIiwidG4ub3hhLmNsb3VkIiwidWsub3hhLmNsb3VkIiwicHJpbWV0ZWwuY2xvdWQiLCJ1ay5wcmltZXRlbC5jbG91ZCIsImNhLnJlY2xhaW0uY2xvdWQiLCJ1ay5yZWNsYWltLmNsb3VkIiwidXMucmVjbGFpbS5jbG91ZCIsImNoLnRyZW5kaG9zdGluZy5jbG91ZCIsImRlLnRyZW5k'@;
put 'aG9zdGluZy5jbG91ZCIsImplbGUuY2x1YiIsImFtc2NvbXB1dGUuY29tIiwiY2xpY2tldGNsb3VkLmNvbSIsImRvcGFhcy5jb20iLCJoaWRvcmEuY29tIiwicGFhcy5ob3N0ZWQtYnktcHJldmlkZXIuY29tIiwicmFnLWNsb3VkLmhvc3RldXIuY29tIiwicmFnLWNsb3VkLWNoLmhvc3RldXIu'@;
put 'Y29tIiwiamNsb3VkLmlrLXNlcnZlci5jb20iLCJqY2xvdWQtdmVyLWpwYy5pay1zZXJ2ZXIuY29tIiwiZGVtby5qZWxhc3RpYy5jb20iLCJraWxhdGlyb24uY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2FmYWljbG91ZC5jb20iLCJsb24ud2FmYWljbG91ZC5jb20iLCJyeWQu'@;
put 'd2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29tLmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNsb3VkLmhvc3QiLCJwYWFzLmJlZWJ5dGUu'@;
put 'aW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5pbyIsImNsb3VkLWZyMS51bmlzcGFjZS5pbyIsImpjLm5lZW4uaXQiLCJjbG91ZC5qZWxhc3RpYy5vcGVuLnRpbS5pdCIsImpjbG91ZC5reiIsInVwYWFzLmthenRlbGVwb3J0Lmt6IiwiY2xvdWRqaWZmeS5uZXQiLCJmcmExLWRlLmNs'@;
put 'b3VkamlmZnkubmV0Iiwid2VzdDEtdXMuY2xvdWRqaWZmeS5uZXQiLCJqbHMtc3RvMS5lbGFzdHgubmV0IiwiamxzLXN0bzIuZWxhc3R4Lm5ldCIsImpscy1zdG8zLmVsYXN0eC5uZXQiLCJmYXN0c3RhY2tzLm5ldCIsImZyLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMS5wYWFzLm1h'@;
put 'c3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUt'@;
put 'aWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJqZWxhc3RpYy50c3VrYWVydS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xvdWQucnUiLCJqZWxhc3RpYy5yZWdydWhvc3RpbmcucnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFz'@;
put 'dGljLnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIsInBoeC5lbnNjYWxlZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5teWppbm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBz'@;
put 'Lm15amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwiKi50cml0b24uem9uZSIsIiouY25zLmpveWVudC5jb20iLCJqcy5vcmciLCJrYWFzLmdnIiwia2hwbGF5Lm5sIiwia3Rpc3RvcnkuY29tIiwia2Fwc2kuZmkiLCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0IiwidW5pNS5uZXQiLCJr'@;
put 'bmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIm95YS50byIsImt1bGV1dmVuLmNsb3VkIiwiZXpwcm94eS5rdWxldXZlbi5iZSIsImNvLmtyZCIsImVkdS5rcmQiLCJrcmVsbGlhbi5uZXQiLCJ3ZWJ0aGluZ3MuaW8iLCJnaXQtcmVwb3MuZGUiLCJsY3ViZS1zZXJ2ZXIuZGUi'@;
put 'LCJzdm4tcmVwb3MuZGUiLCJsZWFkcGFnZXMuY28iLCJscGFnZXMuY28iLCJscHVzZXJjb250ZW50LmNvbSIsImxlbHV4LnNpdGUiLCJjby5idXNpbmVzcyIsImNvLmVkdWNhdGlvbiIsImNvLmV2ZW50cyIsImNvLmZpbmFuY2lhbCIsImNvLm5ldHdvcmsiLCJjby5wbGFjZSIsImNvLnRlY2hu'@;
put 'b2xvZ3kiLCJhcHAubG1wbS5jb20iLCJsaW5reWFyZC5jbG91ZCIsImxpbmt5YXJkLWNsb3VkLmNoIiwibWVtYmVycy5saW5vZGUuY29tIiwiKi5ub2RlYmFsYW5jZXIubGlub2RlLmNvbSIsIioubGlub2Rlb2JqZWN0cy5jb20iLCJpcC5saW5vZGV1c2VyY29udGVudC5jb20iLCJ3ZS5icyIs'@;
put 'IioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9jYWx6b25lLnh5eiIsImxvZ2lubGluZS5hcHAiLCJsb2dpbmxpbmUuZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJzZXJ2ZXJzLnJ1biIsImxvaG11cy5tZSIsImtyYXNuaWsucGwiLCJs'@;
put 'ZWN6bmEucGwiLCJsdWJhcnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRuaWsucGwiLCJnbHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY28udWsiLCJiYXJzeW9ubGluZS5jby51ayIsImJhcnN5Y2VudGVyLmNv'@;
put 'bSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmNsdWIiLCJiYXJzeS5kZSIsImJhcnN5LmV1IiwiYmFyc3kuaW4iLCJiYXJzeS5pbmZvIiwiYmFyc3kuaW8iLCJiYXJzeS5tZSIsImJhcnN5Lm1lbnUiLCJiYXJzeS5tb2JpIiwiYmFyc3kubmV0IiwiYmFyc3kub25saW5lIiwiYmFyc3kub3Jn'@;
put 'IiwiYmFyc3kucHJvIiwiYmFyc3kucHViIiwiYmFyc3kucm8iLCJiYXJzeS5zaG9wIiwiYmFyc3kuc2l0ZSIsImJhcnN5LnN1cHBvcnQiLCJiYXJzeS51ayIsIioubWFnZW50b3NpdGUuY2xvdWQiLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwiaGIuY2xkbWFpbC5ydSIsImNuLnZ1'@;
put 'IiwibWF6ZXBsYXkuY29tIiwibWNwZS5tZSIsIm1jZGlyLm1lIiwibWNkaXIucnUiLCJtY3ByZS5ydSIsInZwcy5tY2Rpci5ydSIsIm1lZGlhdGVjaC5ieSIsIm1lZGlhdGVjaC5kZXYiLCJocmEuaGVhbHRoIiwibWluaXNlcnZlci5jb20iLCJtZW1zZXQubmV0IiwibWVzc2VybGkuYXBwIiwi'@;
put 'Ki5jbG91ZC5tZXRhY2VudHJ1bS5jeiIsImN1c3RvbS5tZXRhY2VudHJ1bS5jeiIsImZsdC5jbG91ZC5tdW5pLmN6IiwidXNyLmNsb3VkLm11bmkuY3oiLCJtZXRlb3JhcHAuY29tIiwiZXUubWV0ZW9yYXBwLmNvbSIsImNvLnBsIiwiKi5henVyZWNvbnRhaW5lci5pbyIsImF6dXJld2Vic2l0'@;
put 'ZXMubmV0IiwiYXp1cmUtbW9iaWxlLm5ldCIsImNsb3VkYXBwLm5ldCIsImF6dXJlc3RhdGljYXBwcy5uZXQiLCIxLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjZW50cmFsdXMuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3Rhc2lhLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0dXMyLmF6dXJl'@;
put 'c3RhdGljYXBwcy5uZXQiLCJ3ZXN0ZXVyb3BlLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjc3guY2MiLCJtaW50ZXJlLnNpdGUiLCJmb3J0ZS5pZCIsIm1vemlsbGEtaW90Lm9yZyIsImJtb2F0dGFjaG1lbnRzLm9yZyIsIm5ldC5ydSIsIm9y'@;
put 'Zy5ydSIsInBwLnJ1IiwiaG9zdGVkcGkuY29tIiwiY3VzdG9tZXIubXl0aGljLWJlYXN0cy5jb20iLCJjYXJhY2FsLm15dGhpYy1iZWFzdHMuY29tIiwiZmVudGlnZXIubXl0aGljLWJlYXN0cy5jb20iLCJseW54Lm15dGhpYy1iZWFzdHMuY29tIiwib2NlbG90Lm15dGhpYy1iZWFzdHMuY29t'@;
put 'Iiwib25jaWxsYS5teXRoaWMtYmVhc3RzLmNvbSIsIm9uemEubXl0aGljLWJlYXN0cy5jb20iLCJzcGhpbngubXl0aGljLWJlYXN0cy5jb20iLCJ2cy5teXRoaWMtYmVhc3RzLmNvbSIsIngubXl0aGljLWJlYXN0cy5jb20iLCJ5YWxpLm15dGhpYy1iZWFzdHMuY29tIiwiY3VzdC5yZXRyb3Nu'@;
put 'dWIuY28udWsiLCJ1aS5uYWJ1LmNhc2EiLCJwb255LmNsdWIiLCJvZi5mYXNoaW9uIiwiaW4ubG9uZG9uIiwib2YubG9uZG9uIiwiZnJvbS5tYXJrZXRpbmciLCJ3aXRoLm1hcmtldGluZyIsImZvci5tZW4iLCJyZXBhaXIubWVuIiwiYW5kLm1vbSIsImZvci5tb20iLCJmb3Iub25lIiwidW5k'@;
put 'ZXIub25lIiwiZm9yLnNhbGUiLCJ0aGF0LndpbiIsImZyb20ud29yayIsInRvLndvcmsiLCJjbG91ZC5ub3NwYW1wcm94eS5jb20iLCJuZXRsaWZ5LmFwcCIsIjR1LmNvbSIsIm5ncm9rLmlvIiwibmgtc2Vydi5jby51ayIsIm5mc2hvc3QuY29tIiwiKi5kZXZlbG9wZXIuYXBwIiwibm9vcC5h'@;
put 'cHAiLCIqLm5vcnRoZmxhbmsuYXBwIiwiKi5idWlsZC5ydW4iLCIqLmNvZGUucnVuIiwiKi5kYXRhYmFzZS5ydW4iLCIqLm1pZ3JhdGlvbi5ydW4iLCJub3RpY2VhYmxlLm5ld3MiLCJkbnNraW5nLmNoIiwibXlwaS5jbyIsIm40dC5jbyIsIjAwMXd3dy5jb20iLCJkZG5zbGl2ZS5jb20iLCJt'@;
put 'eWlwaG9zdC5jb20iLCJmb3J1bXouaW5mbyIsIjE2LWIuaXQiLCIzMi1iLml0IiwiNjQtYi5pdCIsInNvdW5kY2FzdC5tZSIsInRjcDQubWUiLCJkbnN1cC5uZXQiLCJoaWNhbS5uZXQiLCJub3ctZG5zLm5ldCIsIm93bmlwLm5ldCIsInZwbmRucy5uZXQiLCJkeW5zZXJ2Lm9yZyIsIm5vdy1k'@;
put 'bnMub3JnIiwieDQ0My5wdyIsIm5vdy1kbnMudG9wIiwibnRkbGwudG9wIiwiZnJlZWRkbnMudXMiLCJjcmFmdGluZy54eXoiLCJ6YXB0by54eXoiLCJuc3VwZGF0ZS5pbmZvIiwibmVyZHBvbC5vdmgiLCJibG9nc3l0ZS5jb20iLCJicmFzaWxpYS5tZSIsImNhYmxlLW1vZGVtLm9yZyIsImNp'@;
put 'c2NvZnJlYWsuY29tIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVzLm9yZyIsImRhbW5zZXJ2ZXIuY29tIiwiZGRucy5tZSIsImRpdGNoeW91cmlwLmNvbSIsImRuc2Zvci5tZSIsImRuc2lza2lua3kuY29tIiwiZHZyY2FtLmluZm8iLCJkeW5ucy5jb20iLCJlYXRpbmctb3Jn'@;
put 'YW5pYy5uZXQiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ2Vla2dhbGF4eS5jb20iLCJnb2xmZmFuLnVzIiwiaGVhbHRoLWNhcmVyZWZvcm0uY29tIiwiaG9tZXNlY3VyaXR5bWFjLmNvbSIsImhvbWVzZWN1cml0eXBjLmNvbSIsImhvcHRvLm1lIiwiaWxvdmVjb2xsZWdlLmluZm8iLCJsb2dpbnRv'@;
put 'Lm1lIiwibWxiZmFuLm9yZyIsIm1tYWZhbi5iaXoiLCJteWFjdGl2ZWRpcmVjdG9yeS5jb20iLCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEuY29tIiwibXlzZWN1cml0eWNhbWVyYS5uZXQiLCJteXNl'@;
put 'Y3VyaXR5Y2FtZXJhLm9yZyIsIm5ldC1mcmVha3MuY29tIiwibmZsZmFuLm9yZyIsIm5obGZhbi5uZXQiLCJuby1pcC5jYSIsIm5vLWlwLmNvLnVrIiwibm8taXAubmV0Iiwibm9pcC51cyIsIm9udGhld2lmaS5jb20iLCJwZ2FmYW4ubmV0IiwicG9pbnQydGhpcy5jb20iLCJwb2ludHRvLnVz'@;
put 'IiwicHJpdmF0aXplaGVhbHRoaW5zdXJhbmNlLm5ldCIsInF1aWNrc3l0ZXMuY29tIiwicmVhZC1ib29rcy5vcmciLCJzZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmVleGNoYW5nZS5jb20iLCJzZXJ2ZWh1bW91ci5jb20iLCJzZXJ2ZXAycC5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1'@;
put 'ZmZ0b3JlYWQuY29tIiwidWZjZmFuLm9yZyIsInVudXN1YWxwZXJzb24uY29tIiwid29ya2lzYm9yaW5nLmNvbSIsIjN1dGlsaXRpZXMuY29tIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJkZG5za2luZy5jb20iLCJnb3RkbnMuY2giLCJob3B0by5vcmciLCJteWZ0cC5iaXoiLCJteWZ0'@;
put 'cC5vcmciLCJteXZuYy5jb20iLCJuby1pcC5iaXoiLCJuby1pcC5pbmZvIiwibm8taXAub3JnIiwibm9pcC5tZSIsInJlZGlyZWN0bWUubmV0Iiwic2VydmViZWVyLmNvbSIsInNlcnZlYmxvZy5uZXQiLCJzZXJ2ZWNvdW50ZXJzdHJpa2UuY29tIiwic2VydmVmdHAuY29tIiwic2VydmVnYW1l'@;
put 'LmNvbSIsInNlcnZlaGFsZmxpZmUuY29tIiwic2VydmVodHRwLmNvbSIsInNlcnZlaXJjLmNvbSIsInNlcnZlbWluZWNyYWZ0Lm5ldCIsInNlcnZlbXAzLmNvbSIsInNlcnZlcGljcy5jb20iLCJzZXJ2ZXF1YWtlLmNvbSIsInN5dGVzLm5ldCIsIndlYmhvcC5tZSIsInphcHRvLm9yZyIsInN0'@;
put 'YWdlLm5vZGVhcnQuaW8iLCJwY2xvdWQuaG9zdCIsIm55Yy5tbiIsInN0YXRpYy5vYnNlcnZhYmxldXNlcmNvbnRlbnQuY29tIiwiY3lhLmdnIiwib21nLmxvbCIsImNsb3VkeWNsdXN0ZXIubmV0Iiwib21uaXdlLnNpdGUiLCJzZXJ2aWNlLm9uZSIsIm5pZC5pbyIsIm9wZW5zb2NpYWwuc2l0'@;
put 'ZSIsIm9wZW5jcmFmdC5ob3N0aW5nIiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIsInRlY2gub3JhbmdlIiwiYXV0aGdlYXItc3RhZ2luZy5jb20iLCJhdXRoZ2VhcmFwcHMuY29tIiwic2t5Z2VhcmFwcC5jb20iLCJvdXRzeXN0ZW1zY2xvdWQuY29tIiwiKi53ZWJwYWFzLm92aC5u'@;
put 'ZXQiLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIm93bnByb3ZpZGVyLmNvbSIsIm93bi5wbSIsIioub3dvLmNvZGVzIiwib3gucnMiLCJveS5sYyIsInBnZm9nLmNvbSIsInBhZ2Vmcm9udGFwcC5jb20iLCJwYWdleGwuY29tIiwiKi5wYXl3aGlybC5jb20iLCJiYXIwLm5ldCIsImJhcjEubmV0Iiwi'@;
put 'YmFyMi5uZXQiLCJyZHYudG8iLCJhcnQucGwiLCJnbGl3aWNlLnBsIiwia3Jha293LnBsIiwicG96bmFuLnBsIiwid3JvYy5wbCIsInpha29wYW5lLnBsIiwicGFudGhlb25zaXRlLmlvIiwiZ290cGFudGhlb24uY29tIiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIsImxrMy5ydSIs'@;
put 'Im9uLXdlYi5mciIsImJjLnBsYXRmb3JtLnNoIiwiZW50LnBsYXRmb3JtLnNoIiwiZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBsYXR0ZXJwLnVzIiwi'@;
put 'cGRucy5wYWdlIiwicGxlc2sucGFnZSIsInBsZXNrbnMuY29tIiwiZHluNTMuaW8iLCJvbnBvcnRlci5ydW4iLCJjby5ibiIsInBvc3RtYW4tZWNoby5jb20iLCJwc3Rtbi5pbyIsIm1vY2sucHN0bW4uaW8iLCJodHRwYmluLm9yZyIsInByZXF1YWxpZnltZS50b2RheSIsInhlbi5wcmdtci5j'@;
put 'b20iLCJwcml2LmF0IiwicHJ2Y3kucGFnZSIsIiouZHdlYi5saW5rIiwicHJvdG9uZXQuaW8iLCJjaGlydXJnaWVucy1kZW50aXN0ZXMtZW4tZnJhbmNlLmZyIiwiYnllbi5zaXRlIiwicHVidGxzLm9yZyIsInB5dGhvbmFueXdoZXJlLmNvbSIsImV1LnB5dGhvbmFueXdoZXJlLmNvbSIsInFv'@;
put 'dG8uaW8iLCJxdWFsaWZpb2FwcC5jb20iLCJxYnVzZXIuY29tIiwiY2xvdWRzaXRlLmJ1aWxkZXJzIiwiaW5zdGFuY2VzLnNwYXduLmNjIiwiaW5zdGFudGNsb3VkLmNuIiwicmFzLnJ1IiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsImRldi1teXFuYXBjbG91ZC5jb20iLCJh'@;
put 'bHBoYS1teXFuYXBjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCIqLnF1aXBlbGVtZW50cy5jb20iLCJ2YXBvci5jbG91ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJnLnZicnBsc2J4LmlvIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJhbmNoZXIu'@;
put 'Y2xvdWQiLCIqLm9uLXJpby5pbyIsInJlYWR0aGVkb2NzLmlvIiwicmhjbG91ZC5jb20iLCJhcHAucmVuZGVyLmNvbSIsIm9ucmVuZGVyLmNvbSIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVwbC5ydW4iLCJyZXNpbmRldmljZS5pbyIsImRldmljZXMucmVzaW5zdGFnaW5nLmlvIiwiaHpj'@;
put 'LmlvIiwid2VsbGJlaW5nem9uZS5ldSIsIndlbGxiZWluZ3pvbmUuY28udWsiLCJhZGltby5jby51ayIsIml0Y291bGRiZXdvci5zZSIsImdpdC1wYWdlcy5yaXQuZWR1Iiwicm9ja3kucGFnZSIsIlx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0M2Vc'@;
put 'dTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNlXHUwNDQw'@;
put 'XHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0MzguXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1MDQ0MFx1MDQ0M1x1'@;
put 'MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCIqLmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWlsZGVyLmNvZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsInNhbmRjYXRzLmlvIiwibG9nb2lwLmRlIiwibG9nb2lwLmNvbSIsImZyLXBhci0xLmJhcmVtZXRhbC5z'@;
put 'Y3cuY2xvdWQiLCJmci1wYXItMi5iYXJlbWV0YWwuc2N3LmNsb3VkIiwibmwtYW1zLTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIsImZuYy5mci1wYXIuc2N3LmNsb3VkIiwiZnVuY3Rpb25zLmZuYy5mci1wYXIuc2N3LmNsb3VkIiwiazhzLmZyLXBhci5zY3cuY2xvdWQiLCJub2Rlcy5rOHMuZnIt'@;
put 'cGFyLnNjdy5jbG91ZCIsInMzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLmZyLXBhci5zY3cuY2xvdWQiLCJ3aG0uZnItcGFyLnNjdy5jbG91ZCIsInByaXYuaW5zdGFuY2VzLnNjdy5jbG91ZCIsInB1Yi5pbnN0YW5jZXMuc2N3LmNsb3VkIiwiazhzLnNjdy5jbG91ZCIsIms4cy5u'@;
put 'bC1hbXMuc2N3LmNsb3VkIiwibm9kZXMuazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJzMy5ubC1hbXMuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5ubC1hbXMuc2N3LmNsb3VkIiwid2htLm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMucGwtd2F3LnNjdy5jbG91ZCIsIm5vZGVzLms4cy5wbC13YXcuc2N3'@;
put 'LmNsb3VkIiwiczMucGwtd2F3LnNjdy5jbG91ZCIsInMzLXdlYnNpdGUucGwtd2F3LnNjdy5jbG91ZCIsInNjYWxlYm9vay5zY3cuY2xvdWQiLCJzbWFydGxhYmVsaW5nLnNjdy5jbG91ZCIsImRlZGlib3guZnIiLCJzY2hva29rZWtzLm5ldCIsImdvdi5zY290Iiwic2VydmljZS5nb3Yuc2Nv'@;
put 'dCIsInNjcnlzZWMuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5jb20iLCJmaXJld2FsbC1nYXRld2F5LmRlIiwibXktZ2F0ZXdheS5kZSIsIm15LXJvdXRlci5kZSIsInNwZG5zLmRlIiwic3BkbnMuZXUiLCJmaXJld2FsbC1nYXRld2F5Lm5ldCIsIm15LWZpcmV3YWxsLm9yZyIsIm15ZmlyZXdh'@;
put 'bGwub3JnIiwic3BkbnMub3JnIiwic2VpZGF0Lm5ldCIsInNlbGxmeS5zdG9yZSIsInNlbnNlZXJpbmcubmV0IiwibWluaXNpdGUubXMiLCJtYWduZXQucGFnZSIsImJpei51YSIsImNvLnVhIiwicHAudWEiLCJzaGlmdGNyeXB0by5kZXYiLCJzaGlmdGNyeXB0by5pbyIsInNoaWZ0ZWRpdC5p'@;
put 'byIsIm15c2hvcGJsb2Nrcy5jb20iLCJteXNob3BpZnkuY29tIiwic2hvcGl0c2l0ZS5jb20iLCJzaG9wd2FyZS5zdG9yZSIsIm1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0'@;
put 'ZWxlYWYubmV0IiwiYm91bnR5LWZ1bGwuY29tIiwiYWxwaGEuYm91bnR5LWZ1bGwuY29tIiwiYmV0YS5ib3VudHktZnVsbC5jb20iLCJzbWFsbC13ZWIub3JnIiwidnA0Lm1lIiwidHJ5LXNub3dwbG93LmNvbSIsInNyaHQuc2l0ZSIsInN0YWNraGVyby1uZXR3b3JrLmNvbSIsIm11c2ljaWFu'@;
put 'LmlvIiwibm92ZWNvcmUuc2l0ZSIsInN0YXRpYy5sYW5kIiwiZGV2LnN0YXRpYy5sYW5kIiwic2l0ZXMuc3RhdGljLmxhbmQiLCJzdG9yZWJhc2Uuc3RvcmUiLCJ2cHMtaG9zdC5uZXQiLCJhdGwuamVsYXN0aWMudnBzLWhvc3QubmV0IiwibmpzLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInJp'@;
put 'Yy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJhcHBzLmxhaXIuaW8iLCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiY3VzdG9tZXIuc3BlZWRwYXJ0bmVyLmRlIiwibXlzcHJlYWRzaG9wLmF0IiwibXlzcHJlYWRzaG9wLmNvbS5hdSIsIm15c3By'@;
put 'ZWFkc2hvcC5iZSIsIm15c3ByZWFkc2hvcC5jYSIsIm15c3ByZWFkc2hvcC5jaCIsIm15c3ByZWFkc2hvcC5jb20iLCJteXNwcmVhZHNob3AuZGUiLCJteXNwcmVhZHNob3AuZGsiLCJteXNwcmVhZHNob3AuZXMiLCJteXNwcmVhZHNob3AuZmkiLCJteXNwcmVhZHNob3AuZnIiLCJteXNwcmVh'@;
put 'ZHNob3AuaWUiLCJteXNwcmVhZHNob3AuaXQiLCJteXNwcmVhZHNob3AubmV0IiwibXlzcHJlYWRzaG9wLm5sIiwibXlzcHJlYWRzaG9wLm5vIiwibXlzcHJlYWRzaG9wLnBsIiwibXlzcHJlYWRzaG9wLnNlIiwibXlzcHJlYWRzaG9wLmNvLnVrIiwiYXBpLnN0ZGxpYi5jb20iLCJzdG9yai5m'@;
put 'YXJtIiwidXR3ZW50ZS5pbyIsInNvYy5zcmNmLm5ldCIsInVzZXIuc3JjZi5uZXQiLCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3UucGFiYS5zZSIsIiouczV5LmlvIiwiKi5zZW5zaW9zaXRlLmNsb3VkIiwic3luY2xvdWQuaXQi'@;
put 'LCJkc2Nsb3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFzLmNvbSIsImZhbWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFzLm5ldCIsImZh'@;
put 'bWlseWRzLm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwidnBucGx1cy50byIsImRpcmVjdC5xdWlja2Nvbm5lY3QudG8iLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsImJldGEudGFpbHNjYWxlLm5ldCIsInRzLm5ldCIsImdkYS5wbCIsImdkYW5zay5wbCIs'@;
put 'ImdkeW5pYS5wbCIsIm1lZC5wbCIsInNvcG90LnBsIiwic2l0ZS50Yi1ob3N0aW5nLmNvbSIsImVkdWdpdC5pbyIsInMzLnRlY2tpZHMub3JnIiwidGVsZWJpdC5hcHAiLCJ0ZWxlYml0LmlvIiwiKi50ZWxlYml0Lnh5eiIsImd3aWRkbGUuY28udWsiLCIqLmZpcmVuZXQuY2giLCIqLnN2Yy5m'@;
put 'aXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIsImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsImN1c3QuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kZXYudGhp'@;
put 'bmdkdXN0LmlvIiwicmVzZXJ2ZC5kaXNyZWMudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5ldHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBhZ2VzLnRvcnByb2pl'@;
put 'Y3QubmV0IiwiYmxveGNtcy5jb20iLCJ0b3dubmV3cy1zdGFnaW5nLmNvbSIsInRiaXRzLm1lIiwiMTJocC5hdCIsIjJpeC5hdCIsIjRsaW1hLmF0IiwibGltYS1jaXR5LmF0IiwiMTJocC5jaCIsIjJpeC5jaCIsIjRsaW1hLmNoIiwibGltYS1jaXR5LmNoIiwidHJhZmZpY3BsZXguY2xvdWQi'@;
put 'LCJkZS5jb29sIiwiMTJocC5kZSIsIjJpeC5kZSIsIjRsaW1hLmRlIiwibGltYS1jaXR5LmRlIiwiMTMzNy5waWN0dXJlcyIsImNsYW4ucmlwIiwibGltYS1jaXR5LnJvY2tzIiwid2Vic3BhY2Uucm9ja3MiLCJsaW1hLnpvbmUiLCIqLnRyYW5zdXJsLmJlIiwiKi50cmFuc3VybC5ldSIsIiou'@;
put 'dHJhbnN1cmwubmwiLCJzaXRlLnRyYW5zaXAubWUiLCJ0dXhmYW1pbHkub3JnIiwiZGQtZG5zLmRlIiwiZGlza3N0YXRpb24uZXUiLCJkaXNrc3RhdGlvbi5vcmciLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdvci5kZSIsIm15'@;
put 'LXZpZ29yLmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRpc2tzdGF0aW9uLmRlIiwic3lub2xvZ3ktZHMuZGUiLCJ0eXBlZHJlYW0uYXBwIiwicHJvLnR5cGVmb3JtLmNvbSIsInViZXIuc3BhY2UiLCIqLnViZXJzcGFjZS5kZSIsImhrLmNvbSIsImhrLm9yZyIsImx0'@;
put 'ZC5oayIsImluYy5oayIsIm5hbWUucG0iLCJzY2gudGYiLCJiaXoud2YiLCJzY2gud2YiLCJvcmcueXQiLCJ2aXJ0dWFsdXNlci5kZSIsInZpcnR1YWwtdXNlci5kZSIsInVwbGkuaW8iLCJ1cm93bi5jbG91ZCIsImRuc3VwZGF0ZS5pbmZvIiwibGliLmRlLnVzIiwiMjAzOC5pbyIsInZlcmNl'@;
put 'bC5hcHAiLCJ2ZXJjZWwuZGV2Iiwibm93LnNoIiwicm91dGVyLm1hbmFnZW1lbnQiLCJ2LWluZm8uaW5mbyIsInZvb3Jsb3Blci5jbG91ZCIsIm5la28uYW0iLCJueWFhLmFtIiwiYmUuYXgiLCJjYXQuYXgiLCJlcy5heCIsImV1LmF4IiwiZ2cuYXgiLCJtYy5heCIsInVzLmF4IiwieHkuYXgi'@;
put 'LCJubC5jaSIsInh4LmdsIiwiYXBwLmdwIiwiYmxvZy5ndCIsImRlLmd0IiwidG8uZ3QiLCJiZS5neSIsImNjLmhuIiwiYmxvZy5rZyIsImlvLmtnIiwianAua2ciLCJ0di5rZyIsInVrLmtnIiwidXMua2ciLCJkZS5scyIsImF0Lm1kIiwiZGUubWQiLCJqcC5tZCIsInRvLm1kIiwiaW5kaWUu'@;
put 'cG9ybiIsInZ4bC5zaCIsImNoLnRjIiwibWUudGMiLCJ3ZS50YyIsIm55YW4udG8iLCJhdC52ZyIsImJsb2cudnUiLCJkZXYudnUiLCJtZS52dSIsInYudWEiLCIqLnZ1bHRyb2JqZWN0cy5jb20iLCJ3YWZmbGVjZWxsLmNvbSIsIioud2ViaGFyZS5kZXYiLCJyZXNlcnZlLW9ubGluZS5uZXQi'@;
put 'LCJyZXNlcnZlLW9ubGluZS5jb20iLCJib29rb25saW5lLmFwcCIsImhvdGVsd2l0aGZsaWdodC5jb20iLCJ3ZWRlcGxveS5pbyIsIndlZGVwbG95Lm1lIiwid2VkZXBsb3kuc2giLCJyZW1vdGV3ZC5jb20iLCJwYWdlcy53aWFyZHdlYi5jb20iLCJ3bWZsYWJzLm9yZyIsInRvb2xmb3JnZS5v'@;
put 'cmciLCJ3bWNsb3VkLm9yZyIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwibWVzc3dpdGhkbnMuY29tIiwid29sdGxhYi1kZW1vLmNvbSIsIm15Zm9ydW0uY29tbXVuaXR5IiwiY29tbXVuaXR5LXByby5kZSIsImRpc2t1c3Npb25zYmVyZWljaC5kZSIsImNvbW11bml0eS1wcm8ubmV0'@;
put 'IiwibWVpbmZvcnVtLm5ldCIsImFmZmluaXR5bG90dGVyeS5vcmcudWsiLCJyYWZmbGVlbnRyeS5vcmcudWsiLCJ3ZWVrbHlsb3R0ZXJ5Lm9yZy51ayIsIndwZW5naW5lcG93ZXJlZC5jb20iLCJqcy53cGVuZ2luZXBvd2VyZWQuY29tIiwid2l4c2l0ZS5jb20iLCJlZGl0b3J4LmlvIiwiaGFs'@;
put 'Zi5ob3N0IiwieG5iYXkuY29tIiwidTIueG5iYXkuY29tIiwidTItbG9jYWwueG5iYXkuY29tIiwiY2lzdHJvbi5ubCIsImRlbW9uLm5sIiwieHM0YWxsLnNwYWNlIiwieWFuZGV4Y2xvdWQubmV0Iiwic3RvcmFnZS55YW5kZXhjbG91ZC5uZXQiLCJ3ZWJzaXRlLnlhbmRleGNsb3VkLm5ldCIs'@;
put 'Im9mZmljaWFsLmFjYWRlbXkiLCJ5b2xhc2l0ZS5jb20iLCJ5Ym8uZmFpdGgiLCJ5b21iby5tZSIsImhvbWVsaW5rLm9uZSIsInliby5wYXJ0eSIsInliby5yZXZpZXciLCJ5Ym8uc2NpZW5jZSIsInliby50cmFkZSIsInluaC5mciIsIm5vaG9zdC5tZSIsIm5vaG8uc3QiLCJ6YS5uZXQiLCJ6'@;
put 'YS5vcmciLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0nKX19LG09e307ZnVuY3Rpb24gbGUoTSl7dmFyIE89bVtNXTtpZih2b2lkIDAhPT1PKXJldHVybiBPLmV4cG9ydHM7dmFyIFI9bVtNXT17aWQ6TSxsb2Fk'@;
put 'ZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIHhbTV0uY2FsbChSLmV4cG9ydHMsUixSLmV4cG9ydHMsbGUpLFIubG9hZGVkPSEwLFIuZXhwb3J0c31yZXR1cm4gbGUuZD0oTSxPKT0+e2Zvcih2YXIgUiBpbiBPKWxlLm8oTyxSKSYmIWxlLm8oTSxSKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KE0s'@;
put 'Uix7ZW51bWVyYWJsZTohMCxnZXQ6T1tSXX0pfSxsZS5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2h7aWYoIm9iamVjdCI9PXR5cGVv'@;
put 'ZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbGUubz0oTSxPKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE0sTyksbGUucj1NPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KE0sU3ltYm9sLnRvU3Ry'@;
put 'aW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbGUubm1kPU09PihNLnBhdGhzPVtdLE0uY2hpbGRyZW58fChNLmNoaWxkcmVuPVtdKSxNKSxsZSgzNjA3KX0pKCl9LDEyMDcwOmZ1bmN0aW9uKGF0LEllLEYp'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKFIpe3JldHVybiBSJiZSLl9fZXNNb2R1bGU/Ujp7ZGVmYXVsdDpSfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEllLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxJZS5pc1NwZWNpYWxNaXNz'@;
put 'aW5nPUllLmNob2ljZVZhbGlkYXRvcj1JZS5jb25maXJtYXRpb25WYWxpZGF0b3I9SWUudXJsVmFsaWRhdG9yPXZvaWQgMDt2YXIgeD1hZShGKDc4NTMyKSk7SWUudXJsVmFsaWRhdG9yPWZ1bmN0aW9uKFIseil7cmV0dXJuISF4LmRlZmF1bHQuaXNIdHRwVXJpKFIpfHwhIXguZGVmYXVsdC5p'@;
put 'c0h0dHBzVXJpKFIpfHwiIj09PVJ8fHp9LEllLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1mdW5jdGlvbihSKXtyZXR1cm4hMD09PVJ8fCExPT09Un0sSWUuY2hvaWNlVmFsaWRhdG9yPWZ1bmN0aW9uKFIseixLKXtyZXR1cm4gUj4wJiZSPD16fHxLfSxJZS5pc1NwZWNpYWxNaXNzaW5nPWZ1bmN0'@;
put 'aW9uKFIpe3JldHVybigic3RyaW5nIiE9dHlwZW9mIFJ8fCFSLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoUil9fSw3Njc3MTooYXQsSWUpPT57InVzZSBzdHJpY3QiO3ZhciB4O0llLkQ9dm9pZCAwLCh4PUllLkR8fChJZS5EPXt9'@;
put 'KSkuU2FzVml5YT0iU0FTVklZQSIseC5TYXM5PSJTQVM5Iix4LlNhc2pzPSJTQVNKUyJ9LDUxNzE0OihhdCxJZSk9PnsidXNlIHN0cmljdCI7SWUuUj12b2lkIDAsSWUuUj1mdW5jdGlvbih4LG0sbGUpe2lmKHZvaWQgMD09PW0mJihtPTEpLHZvaWQgMD09PWxlJiYobGU9MTA5OTUxMTYyNzc3'@;
put 'NiksMD09PXgpcmV0dXJuIjAgQiI7eD14PmxlP2xlOng7dmFyIFI9bTwwPzA6bSx6PU1hdGguZmxvb3IoTWF0aC5sb2coeCkvTWF0aC5sb2coMTAyNCkpO3JldHVybih4L01hdGgucG93KDEwMjQseikpLnRvRml4ZWQoUikrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bel19fSw4MDc4'@;
put 'ODpmdW5jdGlvbihhdCl7dmFyIEllPXt2ZXJzaW9uOiIxLjE1LjAifTtJZVs0MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFh'@;
put 'XHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4'@;
put 'XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5'@;
put 'Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1'@;
put 'MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUw'@;
put 'Mzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFy'@;
put 'Q29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbNjIwXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJc'@;
put 'eDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlc'@;
put 'eGUyXHhlNFx4ZTBcdTAxMDVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMDdceGM0XHUwMTA0XHUwMTE4XHUwMTE5XHUwMTQyXHhmNFx4ZjZcdTAxMDZceGZiXHhmOVx1MDE1YVx4ZDZceGRjXHhhMlx1MDE0MVx4YTVcdTAxNWJcdTAxOTJcdTAxNzlcdTAxN2JceGYzXHhkM1x1MDE0NFx1'@;
put 'MDE0M1x1MDE3YVx1MDE3Y1x4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNc'@;
put 'dTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1'@;
put 'OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFc'@;
put 'dTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIEY9Ilww'@;
put 'XHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJT'@;
put 'VFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUw'@;
put 'M2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3'@;
put 'XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUy'@;
put 'NTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2Fm'@;
put 'XHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYh'@;
put 'PW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbODUwXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxy'@;
put 'XHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6'@;
put 'e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhh'@;
put 'YVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMz'@;
put 'XHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhk'@;
put 'Ylx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVtt'@;
put 'XT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgx'@;
put 'Ylx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJc'@;
put 'dTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAx'@;
put 'MTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEw'@;
put 'Mlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAx'@;
put 'NDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1t'@;
put 'OysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4'@;
put 'MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8'@;
put 'fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhk'@;
put 'MVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNj'@;
put 'XHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRc'@;
put 'eGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdCht'@;
put 'KV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbODYxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThc'@;
put 'eDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFc'@;
put 'eGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1'@;
put 'OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZc'@;
put 'dTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1'@;
put 'MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9'@;
put 'PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg2NV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4'@;
put 'MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4'@;
put 'ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUy'@;
put 'MzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVl'@;
put 'XHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5'@;
put 'M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFl'@;
put 'PVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgw'@;
put 'Nlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hp'@;
put 'amtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1'@;
put 'MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5'@;
put 'M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1'@;
put 'MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0'@;
put 'OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNo'@;
put 'YXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NzRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgx'@;
put 'Mlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThc'@;
put 'dTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBl'@;
put 'MzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZc'@;
put 'dTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1t'@;
put 'KSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4OTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlc'@;
put 'eDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDEwY1x4ZmNceGU5XHUwMTBmXHhlNFx1MDEwZVx1MDE2NFx1MDEw'@;
put 'ZFx1MDExYlx1MDExYVx1MDEzOVx4Y2RcdTAxM2VcdTAxZWFceGM0XHhjMVx4YzlcdTAxN2VcdTAxN2RceGY0XHhmNlx4ZDNcdTAxNmZceGRhXHhmZFx4ZDZceGRjXHUwMTYwXHUwMTNkXHhkZFx1MDE1OFx1MDE2NVx4ZTFceGVkXHhmM1x4ZmFcdTAxNDhcdTAxNDdcdTAxNmVceGQ0XHUwMTYx'@;
put 'XHUwMTU5XHUwMTU1XHUwMTU0XHhiY1x4YTdceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUz'@;
put 'Y1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4'@;
put 'ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBc'@;
put 'eGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbOTMyXT1mdW5jdGlvbigpe3ZhciBtLEY9W10sYWU9e30seD1bXTtmb3IoeFsw'@;
put 'XT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1O'@;
put 'T1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNjFcdWZmNjJcdWZmNjNcdWZmNjRcdWZmNjVcdWZmNjZcdWZmNjdcdWZmNjhcdWZmNjlcdWZmNmFcdWZmNmJcdWZmNmNcdWZmNmRc'@;
put 'dWZmNmVcdWZmNmZcdWZmNzBcdWZmNzFcdWZmNzJcdWZmNzNcdWZmNzRcdWZmNzVcdWZmNzZcdWZmNzdcdWZmNzhcdWZmNzlcdWZmN2FcdWZmN2JcdWZmN2NcdWZmN2RcdWZmN2VcdWZmN2ZcdWZmODBcdWZmODFcdWZmODJcdWZmODNcdWZmODRcdWZmODVcdWZmODZcdWZmODdcdWZmODhcdWZm'@;
put 'ODlcdWZmOGFcdWZmOGJcdWZmOGNcdWZmOGRcdWZmOGVcdWZmOGZcdWZmOTBcdWZmOTFcdWZmOTJcdWZmOTNcdWZmOTRcdWZmOTVcdWZmOTZcdWZmOTdcdWZmOThcdWZmOTlcdWZmOWFcdWZmOWJcdWZmOWNcdWZmOWRcdWZmOWVcdWZmOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMw'@;
put 'MDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAx'@;
put 'NVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1'@;
put 'MzAwZlx1MzAxMFx1MzAxMVx1ZmYwYlx1ZmYwZFx4YjFceGQ3XHVmZmZkXHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNc'@;
put 'dWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUy'@;
put 'MWQ0XHUyMjAwXHUyMjAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJi'@;
put 'XHUyMjJjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjVlZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEy'@;
put 'OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMjldW21dXT0zMzAyNCttLEZbMzMwMjQrbV09eFsxMjldW21dKTtmb3IoeFsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhc'@;
put 'dWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZm'@;
put 'NTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBc'@;
put 'dTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMw'@;
put 'NmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdc'@;
put 'dTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxtPTA7bSE9eFsxMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMwXVttXV09MzMyODArbSxGWzMzMjgwK21dPXhbMTMwXVttXSk7Zm9yKHhbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUz'@;
put 'MGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2'@;
put 'XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHVmZmZkXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUz'@;
put 'MGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzll'@;
put 'XHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUw'@;
put 'M2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMV1bbV1dPTMzNTM2K20sRlszMzUzNittXT14WzEzMV1bbV0pO2Zvcih4WzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1'@;
put 'MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQz'@;
put 'M1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1ZmZmZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1'@;
put 'MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUw'@;
put 'MVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzJdW21dXT0zMzc5MittLEZbMzM3OTIrbV09eFsxMzJdW21dKTtmb3IoeFsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFc'@;
put 'dTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMz'@;
put 'OWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlc'@;
put 'dTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM1XVttXV09MzQ1NjArbSxGWzM0NTYwK21dPXhbMTM1XVttXSk7Zm9yKHhbMTM2XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1'@;
put 'OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1'@;
put 'XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4'@;
put 'MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1'@;
put 'XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNl1bbV1dPTM0ODE2K20sRlszNDgxNittXT14WzEzNl1bbV0pO2Zvcih4WzEz'@;
put 'N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUy'@;
put 'Nlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1'@;
put 'NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4Nlx1ZmZmZFx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNi'@;
put 'Zlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkY1x1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1'@;
put 'NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZh'@;
put 'MVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1'@;
put 'OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAy'@;
put 'YVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzddW21dXT0zNTA3MittLEZbMzUwNzIrbV09eFsxMzdd'@;
put 'W21dKTtmb3IoeFsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5'@;
put 'MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4Mzhc'@;
put 'dTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYw'@;
put 'NzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVc'@;
put 'dTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZi'@;
put 'NTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNc'@;
put 'dTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVl'@;
put 'N2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM4XVttXV09MzUzMjgrbSxGWzM1'@;
put 'MzI4K21dPXhbMTM4XVttXSk7Zm9yKHhbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4'@;
put 'Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAz'@;
put 'XHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHVmZmZkXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3'@;
put 'MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0Zjli'@;
put 'XHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4'@;
put 'MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgx'@;
put 'XHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1'@;
put 'NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOV1bbV1d'@;
put 'PTM1NTg0K20sRlszNTU4NCttXT14WzEzOV1bbV0pO2Zvcih4WzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1'@;
put 'Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNi'@;
put 'Mlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOFx1ZmZmZFx1NTI4N1x1NjIxZlx1'@;
put 'NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJm'@;
put 'M1x1NjM3Mlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1'@;
put 'NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNm'@;
put 'MFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1'@;
put 'NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQwXVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'YWVbeFsxNDBdW21dXT0zNTg0MCttLEZbMzU4NDArbV09eFsxNDBdW21dKTtmb3IoeFsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVc'@;
put 'dTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4'@;
put 'NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRc'@;
put 'dTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYw'@;
put 'ZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZc'@;
put 'dTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcy'@;
put 'ODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFc'@;
put 'dTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MV1bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGFlW3hbMTQxXVttXV09MzYwOTYrbSxGWzM2MDk2K21dPXhbMTQxXVttXSk7Zm9yKHhbMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5'@;
put 'XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2'@;
put 'NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2Nzlk'@;
put 'XHU2YjYyXHVmZmZkXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1'@;
put 'MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmVi'@;
put 'XHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3'@;
put 'OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5'@;
put 'XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQyXS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'eFsxNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0Ml1bbV1dPTM2MzUyK20sRlszNjM1MittXT14WzE0Ml1bbV0pO2Zvcih4WzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEw'@;
put 'MVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1'@;
put 'NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVl'@;
put 'Y1x1Njk2Zlx1NmI4OVx1NmRmM1x1ZmZmZFx1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1'@;
put 'NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3'@;
put 'MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1'@;
put 'N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdj'@;
put 'ZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0M10ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PXhbMTQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDNdW21dXT0zNjYwOCttLEZbMzY2MDgrbV09eFsxNDNdW21dKTtmb3IoeFsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZi'@;
put 'OTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1Yjlc'@;
put 'dTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdi'@;
put 'MjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBc'@;
put 'dTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2'@;
put 'NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVc'@;
put 'dTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUz'@;
put 'NDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'eFsxNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ0XVttXV09MzY4NjQrbSxGWzM2ODY0K21dPXhbMTQ0XVttXSk7Zm9yKHhbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3'@;
put 'ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2Fh'@;
put 'XHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1'@;
put 'YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHVmZmZkXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZj'@;
put 'XHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1'@;
put 'YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQw'@;
put 'XHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1'@;
put 'OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPXhbMTQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NV1bbV1dPTM3MTIwK20sRlszNzEyMCttXT14WzE0NV1bbV0pO2Zvcih4WzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBh'@;
put 'ZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1'@;
put 'N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNFx1ZmZmZFx1OTAxMFx1NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEz'@;
put 'Ylx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNVx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1'@;
put 'NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZm'@;
put 'ZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1'@;
put 'NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxM1x1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDZdW21dXT0zNzM3NittLEZbMzczNzYrbV09eFsxNDZdW21dKTtmb3IoeFsxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVj'@;
put 'NTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRc'@;
put 'dTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdWZmZmRcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4'@;
put 'YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZc'@;
put 'dTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZi'@;
put 'ZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVc'@;
put 'dTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUx'@;
put 'NjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ3XVttXV09Mzc2MzIrbSxGWzM3NjMyK21dPXhbMTQ3XVttXSk7Zm9yKHhbMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1'@;
put 'ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMz'@;
put 'XHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHVmZmZkXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0'@;
put 'ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhj'@;
put 'XHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2'@;
put 'YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1Zjdj'@;
put 'XHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3'@;
put 'NDM1XHU3NzA5XHU3ZjhlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OF1bbV1dPTM3ODg4K20sRlszNzg4OCttXT14WzE0OF1bbV0pO2Zvcih4WzE0OV09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1'@;
put 'NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNh'@;
put 'N1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3N1x1ZmZmZFx1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1'@;
put 'OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1'@;
put 'NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1'@;
put 'ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIx'@;
put 'N1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1'@;
put 'NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDldW21dXT0zODE0NCttLEZbMzgxNDQrbV09eFsxNDldW21dKTtmb3Io'@;
put 'eFsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNc'@;
put 'dTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUw'@;
put 'ZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFc'@;
put 'dTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTli'@;
put 'NDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVc'@;
put 'dTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2'@;
put 'ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZc'@;
put 'dTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUwXVttXV09Mzg0MDArbSxGWzM4NDAwK21dPXhb'@;
put 'MTUwXVttXSk7Zm9yKHhbMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3'@;
put 'XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2'@;
put 'NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHVmZmZkXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1'@;
put 'XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4'@;
put 'OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIx'@;
put 'XHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5'@;
put 'YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4'@;
put 'XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1MV1bbV1dPTM4NjU2K20s'@;
put 'RlszODY1NittXT14WzE1MV1bbV0pO2Zvcih4WzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVj'@;
put 'YVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1'@;
put 'OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVj'@;
put 'NFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1'@;
put 'NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1'@;
put 'NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTJd'@;
put 'W21dXT0zODkxMittLEZbMzg5MTIrbV09eFsxNTJdW21dKTtmb3IoeFsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUw'@;
put 'ZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNc'@;
put 'dTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUx'@;
put 'ZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhc'@;
put 'dTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUz'@;
put 'MjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJc'@;
put 'dTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0'@;
put 'N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YThcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1M11bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMTUzXVttXV09MzkxNjgrbSxGWzM5MTY4K21dPXhbMTUzXVttXSk7Zm9yKHhbMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1'@;
put 'NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTll'@;
put 'XHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHVm'@;
put 'ZmZkXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5'@;
put 'XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1'@;
put 'N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFi'@;
put 'XHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1'@;
put 'OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTRdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1NF1bbV1dPTM5NDI0K20sRlszOTQyNCttXT14WzE1NF1bbV0pO2Zvcih4WzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1'@;
put 'NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFk'@;
put 'N1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1'@;
put 'NWI3YVx1NWI4MFx1ZmZmZFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMy'@;
put 'OFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1M1x1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1'@;
put 'NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4'@;
put 'Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1'@;
put 'NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NV0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMTU1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTVdW21dXT0zOTY4MCttLEZbMzk2ODArbV09eFsxNTVdW21dKTtmb3IoeFsxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFc'@;
put 'dTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVm'@;
put 'NTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRc'@;
put 'dTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYw'@;
put 'NDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVc'@;
put 'dTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYx'@;
put 'NTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZc'@;
put 'dTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTZdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzE1Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU2XVttXV09Mzk5MzYrbSxGWzM5OTM2K21dPXhbMTU2XVttXSk7Zm9yKHhbMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjFlXHU2MjIx'@;
put 'XHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2'@;
put 'MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2'@;
put 'XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHVmZmZkXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2'@;
put 'NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2'@;
put 'XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2'@;
put 'NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0'@;
put 'XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMTU3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1N11bbV1dPTQwMTkyK20sRls0MDE5MittXT14WzE1N11bbV0pO2Zvcih4WzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1'@;
put 'Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1Njdl'@;
put 'N1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZVx1ZmZmZFx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1'@;
put 'NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZFx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1Njkx'@;
put 'YVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1'@;
put 'NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmEx'@;
put 'NFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzE1OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNThdW21dXT00MDQ0OCttLEZbNDA0NDgrbV09eFsxNThdW21dKTtmb3IoeFsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNc'@;
put 'dTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZi'@;
put 'YjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJc'@;
put 'dTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZk'@;
put 'MzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVc'@;
put 'dTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZl'@;
put 'YWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU5XVttXV09NDA3MDQrbSxGWzQwNzA0K21dPXhbMTU5XVttXSk7Zm9yKHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0'@;
put 'XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3'@;
put 'MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkXHVmZmZkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThm'@;
put 'XHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3'@;
put 'MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3'@;
put 'XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3'@;
put 'M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0'@;
put 'XHU3M2YxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUy'@;
put 'Y1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1'@;
put 'NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVmZlx1ZmZmZFx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYy'@;
put 'MFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1'@;
put 'NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1Nzcy'@;
put 'NVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1'@;
put 'NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1Nzhi'@;
put 'Y1x1NzhjNVx1NzhjYVx1NzhlY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5'@;
put 'N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNc'@;
put 'dTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdh'@;
put 'ZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVc'@;
put 'dTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdj'@;
put 'MTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZc'@;
put 'dTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdj'@;
put 'ZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7'@;
put 'Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3'@;
put 'ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZi'@;
put 'XHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHVmZmZkXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3'@;
put 'ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRl'@;
put 'XHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3'@;
put 'ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4'@;
put 'XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4'@;
put 'MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODExMitt'@;
put 'XT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1'@;
put 'ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFm'@;
put 'YVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ZmZmZFx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1'@;
put 'ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOVx1ODMzNVx1ODMz'@;
put 'NFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1'@;
put 'ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2'@;
put 'Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1'@;
put 'ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2'@;
put 'OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRc'@;
put 'dTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2'@;
put 'NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZc'@;
put 'dTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3'@;
put 'NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3Zjdc'@;
put 'dTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4'@;
put 'OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVc'@;
put 'dTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4'@;
put 'XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4'@;
put 'YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHVmZmZkXHU4YWU0'@;
put 'XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4'@;
put 'YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4Yzdh'@;
put 'XHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4'@;
put 'ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRm'@;
put 'XHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2'@;
put 'MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1'@;
put 'OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1'@;
put 'Y1x1ZmZmZFx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1'@;
put 'OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOFx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBh'@;
put 'OFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1'@;
put 'OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5'@;
put 'NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMx'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkz'@;
put 'MzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBc'@;
put 'dTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1'@;
put 'OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZc'@;
put 'dTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2'@;
put 'YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNc'@;
put 'dTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3'@;
put 'ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODcxXHU5ODc0XHU5ODczXHU5'@;
put 'OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRi'@;
put 'XHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5'@;
put 'YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHVmZmZkXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRm'@;
put 'XHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5'@;
put 'YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYy'@;
put 'XHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5'@;
put 'Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMz'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ1ZFx1'@;
put 'OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRl'@;
put 'ZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1'@;
put 'OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZlx1ZmZmZFx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2'@;
put 'MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMFx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRm'@;
put 'ZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFc'@;
put 'dTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVj'@;
put 'YmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZc'@;
put 'dTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3'@;
put 'YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2Zc'@;
put 'dTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM3XVttXV09NjA2NzIrbSxGWzYwNjcyK21dPXhbMjM3XVttXSk7Zm9yKHhbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3'@;
put 'NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3'@;
put 'XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHVmZmZkXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4'@;
put 'YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNj'@;
put 'XHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5'@;
put 'M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRj'@;
put 'XHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOF1bbV1dPTYwOTI4K20sRls2MDkyOCttXT14WzIzOF1bbV0pO2Zvcih4WzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZlMlx1ZmZlNFx1'@;
put 'ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MjIzNVx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5'@;
put 'YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1ZmZmZFx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1'@;
put 'NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUy'@;
put 'Zlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1'@;
put 'NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1Njcw'@;
put 'ZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1'@;
put 'NmQ4N1x1NmQ2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTBdW21dXT02NGUzK20sRls2NGUzK21dPXhbMjUwXVttXSk7Zm9yKHhbMjUxXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3'@;
put 'MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZm'@;
put 'XHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3'@;
put 'ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3'@;
put 'XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5'@;
put 'MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFk'@;
put 'XHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVm'@;
put 'YTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MV1bbV1dPTY0MjU2K20sRls2NDI1NittXT14WzI1MV1bbV0pO2Zvcih4WzI1Ml09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTJdW21dXT02NDUxMittLEZbNjQ1MTIrbV09eFsyNTJdW21d'@;
put 'KTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0oKSxJZVs5MzZdPWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4'@;
put 'MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzBdW21dXT0wK20sRlswK21dPXhbMF1b'@;
put 'bV0pO2Zvcih4WzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUz'@;
put 'MVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1'@;
put 'NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4NVx1NGU4N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5'@;
put 'ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1'@;
put 'NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYy'@;
put 'M1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1NGY0NVx1NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1'@;
put 'NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5'@;
put 'M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMjldW21dXT0zMzAyNCttLEZbMzMw'@;
put 'MjQrbV09eFsxMjldW21dKTtmb3IoeFsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjBcdTRmYjFcdTRmYjJcdTRmYjNcdTRmYjRcdTRmYjZcdTRmYjdcdTRmYjhcdTRmYjlcdTRmYmFcdTRm'@;
put 'YmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDJcdTRmZDNcdTRmZDRcdTRmZDVcdTRmZDZcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNc'@;
put 'dTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBcdTUwMDFcdTUwMDJcdTUwMDNcdTUwMDRcdTUwMDVcdTUwMDZcdTUwMDdcdTUwMDhcdTUwMDlcdTUwMGFcdWZmZmRcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUw'@;
put 'MTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmZcdTUwMzBcdTUwMzFcdTUwMzJcdTUwMzNcdTUwMzRcdTUwMzVcdTUwMzZcdTUwMzdcdTUwMzhcdTUwMzlcdTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBc'@;
put 'dTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUwNGRcdTUwNTBcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTRcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWRcdTUwNWVcdTUwNWZcdTUwNjBcdTUwNjFcdTUwNjJcdTUwNjNcdTUwNjRcdTUw'@;
put 'NjZcdTUwNjdcdTUwNjhcdTUwNjlcdTUwNmFcdTUwNmJcdTUwNmRcdTUwNmVcdTUwNmZcdTUwNzBcdTUwNzFcdTUwNzJcdTUwNzNcdTUwNzRcdTUwNzVcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFc'@;
put 'dTUwOGJcdTUwOGNcdTUwOGVcdTUwOGZcdTUwOTBcdTUwOTFcdTUwOTJcdTUwOTNcdTUwOTRcdTUwOTVcdTUwOTZcdTUwOTdcdTUwOThcdTUwOTlcdTUwOWFcdTUwOWJcdTUwOWNcdTUwOWRcdTUwOWVcdTUwOWZcdTUwYTBcdTUwYTFcdTUwYTJcdTUwYTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUw'@;
put 'YWRcdTUwYWVcdTUwYWZcdTUwYjBcdTUwYjFcdTUwYjNcdTUwYjRcdTUwYjVcdTUwYjZcdTUwYjdcdTUwYjhcdTUwYjlcdTUwYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMwXVttXV09'@;
put 'MzMyODArbSxGWzMzMjgwK21dPXhbMTMwXVttXSk7Zm9yKHhbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGJkXHU1MGJlXHU1MGJmXHU1MGMwXHU1MGMxXHU1MGMyXHU1MGMzXHU1MGM0XHU1MGM1XHU1MGM2XHU1MGM3XHU1'@;
put 'MGM4XHU1MGM5XHU1MGNhXHU1MGNiXHU1MGNjXHU1MGNkXHU1MGNlXHU1MGQwXHU1MGQxXHU1MGQyXHU1MGQzXHU1MGQ0XHU1MGQ1XHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRiXHU1MGRjXHU1MGRkXHU1MGRlXHU1MGRmXHU1MGUwXHU1MGUxXHU1MGUyXHU1MGUzXHU1MGU0XHU1MGU1XHU1MGU4'@;
put 'XHU1MGU5XHU1MGVhXHU1MGViXHU1MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0XHU1MGY2XHU1MGY3XHU1MGY4XHU1MGY5XHU1MGZhXHU1MGZjXHU1MGZkXHU1MGZlXHU1MGZmXHU1MTAwXHU1MTAxXHU1MTAyXHU1MTAzXHU1MTA0XHU1MTA1XHU1MTA4XHVmZmZkXHU1MTA5XHU1MTBhXHU1'@;
put 'MTBjXHU1MTBkXHU1MTBlXHU1MTBmXHU1MTEwXHU1MTExXHU1MTEzXHU1MTE0XHU1MTE1XHU1MTE2XHU1MTE3XHU1MTE4XHU1MTE5XHU1MTFhXHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1MTFmXHU1MTIwXHU1MTIyXHU1MTIzXHU1MTI0XHU1MTI1XHU1MTI2XHU1MTI3XHU1MTI4XHU1MTI5'@;
put 'XHU1MTJhXHU1MTJiXHU1MTJjXHU1MTJkXHU1MTJlXHU1MTJmXHU1MTMwXHU1MTMxXHU1MTMyXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM2XHU1MTM3XHU1MTM4XHU1MTM5XHU1MTNhXHU1MTNiXHU1MTNjXHU1MTNkXHU1MTNlXHU1MTQyXHU1MTQ3XHU1MTRhXHU1MTRjXHU1MTRlXHU1MTRmXHU1'@;
put 'MTUwXHU1MTUyXHU1MTUzXHU1MTU3XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU1MTVmXHU1MTYwXHU1MTYxXHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1MTdmXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThh'@;
put 'XHU1MThiXHU1MThlXHU1MThmXHU1MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4XHU1MTlhXHU1MTlkXHU1MTllXHU1MTlmXHU1MWExXHU1MWEzXHU1MWE2XHU1MWE3XHU1MWE4XHU1MWE5XHU1MWFhXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1MWI5XHU1MWJhXHU1MWJlXHU1MWJmXHU1'@;
put 'MWMxXHU1MWMyXHU1MWMzXHU1MWM1XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1MWQwXHU1MWQyXHU1MWQzXHU1MWQ0XHU1MWQ1XHU1MWQ2XHU1MWQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzFdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzEzMV1bbV1dPTMzNTM2K20sRlszMzUzNittXT14WzEzMV1bbV0pO2Zvcih4WzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1'@;
put 'NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIy'@;
put 'M1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0OVx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1'@;
put 'NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1NTI3NFx1NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3'@;
put 'ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1'@;
put 'NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJk'@;
put 'NFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJlYVx1NTJlYlx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1'@;
put 'NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMyXVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxMzJdW21dXT0zMzc5MittLEZbMzM3OTIrbV09eFsxMzJdW21dKTtmb3IoeFsxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMWJcdTUzMWNc'@;
put 'dTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMmZcdTUzMzBcdTUzMzFcdTUzMzJcdTUzMzNcdTUzMzRcdTUzMzVcdTUzMzZcdTUzMzdcdTUzMzhcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUz'@;
put 'NGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVc'@;
put 'dTUzOGZcdWZmZmRcdTUzOTBcdTUzOTFcdTUzOTJcdTUzOTNcdTUzOTRcdTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWZcdTUzYjBcdTUzYjFcdTUzYjJcdTUzYjNcdTUzYjRcdTUz'@;
put 'YjVcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzNcdTUzYzRcdTUzYzVcdTUzYzZcdTUzYzdcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUzZTFcdTUzZTJcdTUzZTdcdTUzZjRc'@;
put 'dTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2ZcdTU0NDFcdTU0NDJcdTU0NDRcdTU0'@;
put 'NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWRcdTU0NWVcdTU0NWZcdTU0NjBcdTU0NjFcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjlcdTU0NmFcdTU0NmJcdTU0NmNcdTU0NmRcdTU0NmVcdTU0NmZcdTU0NzBcdTU0NzRcdTU0NzlcdTU0N2Fc'@;
put 'dTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzEzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMzXVttXV09MzQwNDgrbSxGWzM0MDQ4K21dPXhbMTMzXVttXSk7Zm9yKHhbMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGEyXHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIy'@;
put 'XHU1NGI1XHU1NGI2XHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJjXHU1NGJlXHU1NGMzXHU1NGM1XHU1NGNhXHU1NGNiXHU1NGQ2XHU1NGQ4XHU1NGRiXHU1NGUwXHU1NGUxXHU1NGUyXHU1NGUzXHU1NGU0XHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1NGYxXHU1NGY0XHU1NGY1XHU1NGY2XHU1'@;
put 'NGY3XHU1NGY4XHU1NGY5XHU1NGZiXHU1NGZlXHU1NTAwXHU1NTAyXHU1NTAzXHU1NTA0XHU1NTA1XHU1NTA4XHU1NTBhXHU1NTBiXHU1NTBjXHU1NTBkXHU1NTBlXHU1NTEyXHU1NTEzXHU1NTE1XHU1NTE2XHU1NTE3XHU1NTE4XHU1NTE5XHU1NTFhXHU1NTFjXHU1NTFkXHU1NTFlXHU1NTFm'@;
put 'XHU1NTIxXHU1NTI1XHU1NTI2XHVmZmZkXHU1NTI4XHU1NTI5XHU1NTJiXHU1NTJkXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRiXHU1NTRjXHU1NTRkXHU1NTRlXHU1NTRmXHU1'@;
put 'NTUxXHU1NTUyXHU1NTUzXHU1NTU0XHU1NTU3XHU1NTU4XHU1NTU5XHU1NTVhXHU1NTViXHU1NTVkXHU1NTVlXHU1NTVmXHU1NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZmXHU1NTcwXHU1NTcxXHU1NTcyXHU1NTczXHU1NTc0XHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdm'@;
put 'XHU1NTg1XHU1NTg2XHU1NThjXHU1NThkXHU1NThlXHU1NTkwXHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlhXHU1NTliXHU1NTllXHU1NWEwXHU1NWExXHU1NWEyXHU1NWEzXHU1NWE0XHU1NWE1XHU1NWE2XHU1NWE4XHU1NWE5XHU1NWFhXHU1NWFiXHU1NWFjXHU1NWFkXHU1'@;
put 'NWFlXHU1NWFmXHU1NWIwXHU1NWIyXHU1NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1NWJjXHU1NWJmXHU1NWMwXHU1NWMxXHU1NWMyXHU1NWMzXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNiXHU1NWNlXHU1NWNmXHU1NWQwXHU1NWQ1XHU1NWQ3XHU1NWQ4XHU1NWQ5XHU1NWRhXHU1NWRi'@;
put 'XHU1NWRlXHU1NWUwXHU1NWUyXHU1NWU3XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYwXHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4XHU1NWY5XHU1NWZhXHU1NWZiXHU1NWZjXHU1NWZmXHU1NjAyXHU1NjAzXHU1NjA0XHU1NjA1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM0XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNF1bbV1dPTM0MzA0K20sRlszNDMwNCttXT14WzEzNF1bbV0pO2Zvcih4WzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYw'@;
put 'YVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1'@;
put 'NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0Ylx1NTY0Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1'@;
put 'Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1'@;
put 'NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5OVx1NTY5YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZh'@;
put 'Mlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1'@;
put 'NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZl'@;
put 'OVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1NTcwZFx1NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzEzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzVdW21dXT0zNDU2MCttLEZbMzQ1NjArbV09eFsxMzVdW21dKTtmb3IoeFsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3'@;
put 'MTJcdTU3MTNcdTU3MTRcdTU3MTVcdTU3MTZcdTU3MTdcdTU3MThcdTU3MTlcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzRcdTU3MzVcdTU3MzZcdTU3MzdcdTU3MzhcdTU3M2Nc'@;
put 'dTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3NTJcdTU3NTNcdTU3NTRcdTU3NTVcdTU3NTZcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3'@;
put 'NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODBcdWZmZmRcdTU3ODFcdTU3ODdcdTU3ODhcdTU3ODlcdTU3OGFcdTU3OGRcdTU3OGVcdTU3OGZcdTU3OTBcdTU3OTFcdTU3OTRcdTU3OTVcdTU3OTZcdTU3OTdcdTU3OThcdTU3OTlcdTU3OWFcdTU3OWNcdTU3OWRc'@;
put 'dTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjlcdTU3YmFcdTU3YmJcdTU3YmNcdTU3YmRcdTU3YmVcdTU3YmZcdTU3YzBcdTU3YzFcdTU3YzRcdTU3YzVcdTU3YzZcdTU3YzdcdTU3YzhcdTU3'@;
put 'YzlcdTU3Y2FcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTVcdTU3ZTZcdTU3ZTdcdTU3ZThcdTU3ZTlcdTU3ZWFcdTU3ZWJcdTU3ZWNcdTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNc'@;
put 'dTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhcdTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4'@;
put 'MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjVcdTU4MjZcdTU4MjdcdTU4MjhcdTU4MjlcdTU4MmJcdTU4MmNcdTU4MmRcdTU4MmVcdTU4MmZcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzZcdTU4MzdcdTU4MzhcdTU4MzlcdTU4M2FcdTU4M2JcdTU4M2NcdTU4M2RcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM2XVttXV09MzQ4MTYrbSxGWzM0ODE2K21dPXhbMTM2XVttXSk7Zm9yKHhbMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU1ODNlXHU1ODNmXHU1ODQwXHU1ODQxXHU1ODQyXHU1ODQzXHU1ODQ1XHU1ODQ2XHU1ODQ3XHU1ODQ4XHU1ODQ5XHU1ODRhXHU1ODRiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5XHU1ODVhXHU1ODViXHU1ODVjXHU1ODVk'@;
put 'XHU1ODVmXHU1ODYwXHU1ODYxXHU1ODYyXHU1ODYzXHU1ODY0XHU1ODY2XHU1ODY3XHU1ODY4XHU1ODY5XHU1ODZhXHU1ODZkXHU1ODZlXHU1ODZmXHU1ODcwXHU1ODcxXHU1ODcyXHU1ODczXHU1ODc0XHU1ODc1XHU1ODc2XHU1ODc3XHU1ODc4XHU1ODc5XHU1ODdhXHU1ODdiXHU1ODdjXHU1'@;
put 'ODdkXHU1ODdmXHU1ODgyXHU1ODg0XHU1ODg2XHU1ODg3XHU1ODg4XHU1ODhhXHU1ODhiXHU1ODhjXHVmZmZkXHU1ODhkXHU1ODhlXHU1ODhmXHU1ODkwXHU1ODkxXHU1ODk0XHU1ODk1XHU1ODk2XHU1ODk3XHU1ODk4XHU1ODliXHU1ODljXHU1ODlkXHU1OGEwXHU1OGExXHU1OGEyXHU1OGEz'@;
put 'XHU1OGE0XHU1OGE1XHU1OGE2XHU1OGE3XHU1OGFhXHU1OGFiXHU1OGFjXHU1OGFkXHU1OGFlXHU1OGFmXHU1OGIwXHU1OGIxXHU1OGIyXHU1OGIzXHU1OGI0XHU1OGI1XHU1OGI2XHU1OGI3XHU1OGI4XHU1OGI5XHU1OGJhXHU1OGJiXHU1OGJkXHU1OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1'@;
put 'OGMzXHU1OGM0XHU1OGM2XHU1OGM3XHU1OGM4XHU1OGM5XHU1OGNhXHU1OGNiXHU1OGNjXHU1OGNkXHU1OGNlXHU1OGNmXHU1OGQwXHU1OGQyXHU1OGQzXHU1OGQ0XHU1OGQ2XHU1OGQ3XHU1OGQ4XHU1OGQ5XHU1OGRhXHU1OGRiXHU1OGRjXHU1OGRkXHU1OGRlXHU1OGRmXHU1OGUwXHU1OGUx'@;
put 'XHU1OGUyXHU1OGUzXHU1OGU1XHU1OGU2XHU1OGU3XHU1OGU4XHU1OGU5XHU1OGVhXHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYyXHU1OGY0XHU1OGY1XHU1OGY3XHU1OGY4XHU1OGZhXHU1OGZiXHU1OGZjXHU1OGZkXHU1OGZlXHU1OGZmXHU1OTAwXHU1OTAxXHU1OTAzXHU1OTA1XHU1OTA2XHU1'@;
put 'OTA4XHU1OTA5XHU1OTBhXHU1OTBiXHU1OTBjXHU1OTBlXHU1OTEwXHU1OTExXHU1OTEyXHU1OTEzXHU1OTE3XHU1OTE4XHU1OTFiXHU1OTFkXHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMyXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNi'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzN11bbV1dPTM1MDcyK20sRlszNTA3MittXT14WzEzN11bbV0pO2Zvcih4WzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1Y1x1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2'@;
put 'N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1'@;
put 'NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1NTliNFx1NTliNVx1NTliNlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1NTliZFx1NTli'@;
put 'Zlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlkZlx1NTllMFx1NTllMVx1NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1'@;
put 'NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWEx'@;
put 'NVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEyZlx1NWEzMFx1NWEzM1x1NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1'@;
put 'NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1NWE1NFx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1'@;
put 'ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzhdW21dXT0zNTMyOCttLEZbMzUzMjgrbV09eFsxMzhdW21dKTtmb3IoeFsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhcdTVhNjlcdTVhNmJcdTVhNmNcdTVhNmRcdTVhNmVcdTVhNmZcdTVhNzBcdTVhNzFcdTVhNzJcdTVhNzNcdTVhNzhcdTVhNzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVh'@;
put 'N2VcdTVhODBcdTVhODFcdTVhODJcdTVhODNcdTVhODRcdTVhODVcdTVhODZcdTVhODdcdTVhODhcdTVhODlcdTVhOGFcdTVhOGJcdTVhOGNcdTVhOGRcdTVhOGVcdTVhOGZcdTVhOTBcdTVhOTFcdTVhOTNcdTVhOTRcdTVhOTVcdTVhOTZcdTVhOTdcdTVhOThcdTVhOTlcdTVhOWNcdTVhOWRc'@;
put 'dTVhOWVcdTVhOWZcdTVhYTBcdTVhYTFcdTVhYTJcdTVhYTNcdTVhYTRcdTVhYTVcdTVhYTZcdTVhYTdcdTVhYThcdTVhYTlcdTVhYWJcdTVhYWNcdWZmZmRcdTVhYWRcdTVhYWVcdTVhYWZcdTVhYjBcdTVhYjFcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjlcdTVhYmFcdTVhYmJcdTVhYmNcdTVh'@;
put 'YmRcdTVhYmZcdTVhYzBcdTVhYzNcdTVhYzRcdTVhYzVcdTVhYzZcdTVhYzdcdTVhYzhcdTVhY2FcdTVhY2JcdTVhY2RcdTVhY2VcdTVhY2ZcdTVhZDBcdTVhZDFcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVc'@;
put 'dTVhZTdcdTVhZThcdTVhZWFcdTVhZWNcdTVhZWRcdTVhZWVcdTVhZWZcdTVhZjBcdTVhZjJcdTVhZjNcdTVhZjRcdTVhZjVcdTVhZjZcdTVhZjdcdTVhZjhcdTVhZjlcdTVhZmFcdTVhZmJcdTVhZmNcdTVhZmRcdTVhZmVcdTVhZmZcdTViMDBcdTViMDFcdTViMDJcdTViMDNcdTViMDRcdTVi'@;
put 'MDVcdTViMDZcdTViMDdcdTViMDhcdTViMGFcdTViMGJcdTViMGNcdTViMGRcdTViMGVcdTViMGZcdTViMTBcdTViMTFcdTViMTJcdTViMTNcdTViMTRcdTViMTVcdTViMThcdTViMTlcdTViMWFcdTViMWJcdTViMWNcdTViMWRcdTViMWVcdTViMWZcdTViMjBcdTViMjFcdTViMjJcdTViMjNc'@;
put 'dTViMjRcdTViMjVcdTViMjZcdTViMjdcdTViMjhcdTViMjlcdTViMmFcdTViMmJcdTViMmNcdTViMmRcdTViMmVcdTViMmZcdTViMzBcdTViMzFcdTViMzNcdTViMzVcdTViMzZcdTViMzhcdTViMzlcdTViM2FcdTViM2JcdTViM2NcdTViM2RcdTViM2VcdTViM2ZcdTViNDFcdTViNDJcdTVi'@;
put 'NDNcdTViNDRcdTViNDVcdTViNDZcdTViNDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM5XVttXV09MzU1ODQrbSxGWzM1NTg0K21dPXhbMTM5XVttXSk7Zm9yKHhbMTQwXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YjQ4XHU1YjQ5XHU1YjRhXHU1YjRiXHU1YjRjXHU1YjRkXHU1YjRlXHU1YjRmXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1YjZiXHU1YjZkXHU1YjZlXHU1YjZmXHU1'@;
put 'YjcyXHU1Yjc0XHU1Yjc2XHU1Yjc3XHU1Yjc4XHU1Yjc5XHU1YjdiXHU1YjdjXHU1YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1YjhhXHU1YjhkXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkyXHU1Yjk0XHU1Yjk2XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFlXHU1YmFm'@;
put 'XHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJiXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNhXHU1YmNiXHU1YmNkXHU1YmNlXHU1YmNmXHVmZmZkXHU1YmQxXHU1YmQ0XHU1YmQ1XHU1YmQ2XHU1YmQ3XHU1YmQ4XHU1YmQ5XHU1YmRhXHU1YmRiXHU1YmRjXHU1'@;
put 'YmUwXHU1YmUyXHU1YmUzXHU1YmU2XHU1YmU3XHU1YmU5XHU1YmVhXHU1YmViXHU1YmVjXHU1YmVkXHU1YmVmXHU1YmYxXHU1YmYyXHU1YmYzXHU1YmY0XHU1YmY1XHU1YmY2XHU1YmY3XHU1YmZkXHU1YmZlXHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBj'@;
put 'XHU1YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1YzEzXHU1YzE3XHU1YzE5XHU1YzFiXHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIxXHU1YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJhXHU1YzJiXHU1YzJkXHU1YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1'@;
put 'YzQzXHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRjXHU1YzRkXHU1YzUyXHU1YzUzXHU1YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1YzVhXHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1YzYyXHU1YzY0XHU1YzY3XHU1YzY4XHU1YzY5XHU1YzZhXHU1YzZiXHU1YzZjXHU1YzZkXHU1YzcwXHU1Yzcy'@;
put 'XHU1YzczXHU1Yzc0XHU1Yzc1XHU1Yzc2XHU1Yzc3XHU1Yzc4XHU1YzdiXHU1YzdjXHU1YzdkXHU1YzdlXHU1YzgwXHU1YzgzXHU1Yzg0XHU1Yzg1XHU1Yzg2XHU1Yzg3XHU1Yzg5XHU1YzhhXHU1YzhiXHU1YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1Yzk1XHU1YzlkXHU1YzllXHU1YzlmXHU1'@;
put 'Y2EwXHU1Y2ExXHU1Y2E0XHU1Y2E1XHU1Y2E2XHU1Y2E3XHU1Y2E4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MF1bbV1dPTM1ODQwK20sRlszNTg0MCttXT14WzE0MF1bbV0pO2Zvcih4'@;
put 'WzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1'@;
put 'NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNkZFx1NWNkZVx1NWNkZlx1NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNl'@;
put 'Ylx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1'@;
put 'NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQz'@;
put 'M1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1NWQ0ZVx1NWQ0Zlx1NWQ1MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1'@;
put 'NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3'@;
put 'OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1NWQ4ZVx1NWQ4Zlx1NWQ5MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1'@;
put 'NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDFdW21dXT0zNjA5NittLEZbMzYwOTYrbV09eFsx'@;
put 'NDFdW21dKTtmb3IoeFsxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkYTFcdTVkYTJcdTVkYTNcdTVkYTRcdTVkYTVcdTVkYTZcdTVkYTdcdTVkYThcdTVkYTlcdTVkYWFcdTVkYWJcdTVkYWNcdTVkYWRcdTVkYWVcdTVkYWZc'@;
put 'dTVkYjBcdTVkYjFcdTVkYjJcdTVkYjNcdTVkYjRcdTVkYjVcdTVkYjZcdTVkYjhcdTVkYjlcdTVkYmFcdTVkYmJcdTVkYmNcdTVkYmRcdTVkYmVcdTVkYmZcdTVkYzBcdTVkYzFcdTVkYzJcdTVkYzNcdTVkYzRcdTVkYzZcdTVkYzdcdTVkYzhcdTVkYzlcdTVkY2FcdTVkY2JcdTVkY2NcdTVk'@;
put 'Y2VcdTVkY2ZcdTVkZDBcdTVkZDFcdTVkZDJcdTVkZDNcdTVkZDRcdTVkZDVcdTVkZDZcdTVkZDdcdTVkZDhcdTVkZDlcdTVkZGFcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWRcdWZmZmRcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjhcdTVkZjlcdTVkZmFc'@;
put 'dTVkZmJcdTVkZmNcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJcdTVlMTNcdTVlMTdcdTVlMWVcdTVlMWZcdTVlMjBcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjRcdTVlMjVcdTVlMjhcdTVlMjlcdTVlMmFcdTVlMmJcdTVlMmNcdTVl'@;
put 'MmZcdTVlMzBcdTVlMzJcdTVlMzNcdTVlMzRcdTVlMzVcdTVlMzZcdTVlMzlcdTVlM2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNcdTVlNDZcdTVlNDdcdTVlNDhcdTVlNDlcdTVlNGFcdTVlNGJcdTVlNGRcdTVlNGVcdTVlNGZcdTVlNTBcdTVlNTFcdTVlNTJcdTVlNTNcdTVlNTZc'@;
put 'dTVlNTdcdTVlNThcdTVlNTlcdTVlNWFcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjNcdTVlNjRcdTVlNjVcdTVlNjZcdTVlNjdcdTVlNjhcdTVlNjlcdTVlNmFcdTVlNmJcdTVlNmNcdTVlNmRcdTVlNmVcdTVlNmZcdTVlNzBcdTVlNzFcdTVlNzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVl'@;
put 'ODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJcdTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYThcdTVlYTlcdTVlYWFcdTVlYWJcdTVlYWNcdTVlYWVcdTVlYWZcdTVlYjBcdTVlYjFcdTVlYjJcdTVlYjRc'@;
put 'dTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVlYmZcdTVlYzBcdTVlYzFcdTVlYzJcdTVlYzNcdTVlYzRcdTVlYzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQyXVttXV09MzYzNTIrbSxG'@;
put 'WzM2MzUyK21dPXhbMTQyXVttXSk7Zm9yKHhbMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiXHU1ZWNjXHU1ZWNkXHU1ZWNlXHU1ZWNmXHU1ZWQwXHU1ZWQ0XHU1ZWQ1XHU1ZWQ3XHU1ZWQ4'@;
put 'XHU1ZWQ5XHU1ZWRhXHU1ZWRjXHU1ZWRkXHU1ZWRlXHU1ZWRmXHU1ZWUwXHU1ZWUxXHU1ZWUyXHU1ZWUzXHU1ZWU0XHU1ZWU1XHU1ZWU2XHU1ZWU3XHU1ZWU5XHU1ZWViXHU1ZWVjXHU1ZWVkXHU1ZWVlXHU1ZWVmXHU1ZWYwXHU1ZWYxXHU1ZWYyXHU1ZWYzXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1'@;
put 'ZWZiXHU1ZWZjXHU1ZWZkXHU1ZjA1XHU1ZjA2XHU1ZjA3XHU1ZjA5XHU1ZjBjXHU1ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1ZjE0XHU1ZjE2XHU1ZjE5XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHVmZmZkXHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJl'@;
put 'XHU1ZjMwXHU1ZjMyXHU1ZjMzXHU1ZjM0XHU1ZjM1XHU1ZjM2XHU1ZjM3XHU1ZjM4XHU1ZjNiXHU1ZjNkXHU1ZjNlXHU1ZjNmXHU1ZjQxXHU1ZjQyXHU1ZjQzXHU1ZjQ0XHU1ZjQ1XHU1ZjQ2XHU1ZjQ3XHU1ZjQ4XHU1ZjQ5XHU1ZjRhXHU1ZjRiXHU1ZjRjXHU1ZjRkXHU1ZjRlXHU1ZjRmXHU1'@;
put 'ZjUxXHU1ZjU0XHU1ZjU5XHU1ZjVhXHU1ZjViXHU1ZjVjXHU1ZjVlXHU1ZjVmXHU1ZjYwXHU1ZjYzXHU1ZjY1XHU1ZjY3XHU1ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1Zjhk'@;
put 'XHU1ZjhlXHU1ZjhmXHU1ZjkxXHU1ZjkzXHU1Zjk0XHU1Zjk2XHU1ZjlhXHU1ZjliXHU1ZjlkXHU1ZjllXHU1ZjlmXHU1ZmEwXHU1ZmEyXHU1ZmEzXHU1ZmE0XHU1ZmE1XHU1ZmE2XHU1ZmE3XHU1ZmE5XHU1ZmFiXHU1ZmFjXHU1ZmFmXHU1ZmIwXHU1ZmIxXHU1ZmIyXHU1ZmIzXHU1ZmI0XHU1'@;
put 'ZmI2XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJiXHU1ZmJlXHU1ZmJmXHU1ZmMwXHU1ZmMxXHU1ZmMyXHU1ZmM3XHU1ZmM4XHU1ZmNhXHU1ZmNiXHU1ZmNlXHU1ZmQzXHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1ZmRjXHU1ZmRlXHU1ZmRmXHU1ZmUyXHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4'@;
put 'XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1ZmYzXHU1ZmY0XHU1ZmY2XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZjXHU2MDA3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0M11b'@;
put 'bV1dPTM2NjA4K20sRlszNjYwOCttXT14WzE0M11bbV0pO2Zvcih4WzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAx'@;
put 'ZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NFx1NjA0NVx1NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1'@;
put 'NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4'@;
put 'Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1'@;
put 'NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1NjBkMFx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBk'@;
put 'Ylx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1'@;
put 'NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1NjEyZlx1NjEzMFx1NjEzMVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEz'@;
put 'Nlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ0XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxNDRdW21dXT0zNjg2NCttLEZbMzY4NjQrbV09eFsxNDRdW21dKTtmb3IoeFsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYx'@;
put 'NTRcdTYxNTZcdTYxNTdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNWJcdTYxNWNcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjlcdTYxNmFcdTYxNmJcdTYxNmNcdTYxNmRcdTYxNmVcdTYxNmZcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZc'@;
put 'dTYxNzhcdTYxNzlcdTYxN2FcdTYxN2JcdTYxN2NcdTYxN2RcdTYxN2VcdTYxN2ZcdTYxODBcdTYxODFcdTYxODJcdTYxODNcdTYxODRcdTYxODVcdTYxODZcdTYxODdcdTYxODhcdTYxODlcdTYxOGFcdTYxOGNcdTYxOGRcdTYxOGZcdTYxOTBcdTYxOTFcdTYxOTJcdTYxOTNcdTYxOTVcdWZm'@;
put 'ZmRcdTYxOTZcdTYxOTdcdTYxOThcdTYxOTlcdTYxOWFcdTYxOWJcdTYxOWNcdTYxOWVcdTYxOWZcdTYxYTBcdTYxYTFcdTYxYTJcdTYxYTNcdTYxYTRcdTYxYTVcdTYxYTZcdTYxYWFcdTYxYWJcdTYxYWRcdTYxYWVcdTYxYWZcdTYxYjBcdTYxYjFcdTYxYjJcdTYxYjNcdTYxYjRcdTYxYjVc'@;
put 'dTYxYjZcdTYxYjhcdTYxYjlcdTYxYmFcdTYxYmJcdTYxYmNcdTYxYmRcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzNcdTYxYzRcdTYxYzVcdTYxYzZcdTYxYzdcdTYxYzlcdTYxY2NcdTYxY2RcdTYxY2VcdTYxY2ZcdTYxZDBcdTYxZDNcdTYxZDVcdTYxZDZcdTYxZDdcdTYxZDhcdTYxZDlcdTYx'@;
put 'ZGFcdTYxZGJcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTBcdTYxZTFcdTYxZTJcdTYxZTNcdTYxZTRcdTYxZTVcdTYxZTdcdTYxZThcdTYxZTlcdTYxZWFcdTYxZWJcdTYxZWNcdTYxZWRcdTYxZWVcdTYxZWZcdTYxZjBcdTYxZjFcdTYxZjJcdTYxZjNcdTYxZjRcdTYxZjZcdTYxZjdc'@;
put 'dTYxZjhcdTYxZjlcdTYxZmFcdTYxZmJcdTYxZmNcdTYxZmRcdTYxZmVcdTYyMDBcdTYyMDFcdTYyMDJcdTYyMDNcdTYyMDRcdTYyMDVcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYy'@;
put 'MmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzhcdTYyMzlcdTYyM2FcdTYyM2JcdTYyM2NcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NV1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ1XVttXV09MzcxMjArbSxGWzM3MTIwK21dPXhbMTQ1XVttXSk7Zm9yKHhbMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjRmXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2'@;
put 'MjVhXHU2MjVjXHU2MjVkXHU2MjVlXHU2MjVmXHU2MjYwXHU2MjYxXHU2MjYyXHU2MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2MjcyXHU2Mjc0XHU2Mjc1XHU2Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2MjgxXHU2MjgyXHU2MjgzXHU2Mjg1XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2Mjhi'@;
put 'XHU2MjhjXHU2MjhkXHU2MjhlXHU2MjhmXHU2MjkwXHU2Mjk0XHU2Mjk5XHU2MjljXHU2MjlkXHU2MjllXHU2MmEzXHU2MmE2XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIwXHU2MmIyXHU2MmIzXHU2MmI0XHU2MmI2XHU2MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2'@;
put 'MmMwXHU2MmMxXHVmZmZkXHU2MmMzXHU2MmNiXHU2MmNmXHU2MmQxXHU2MmQ1XHU2MmRkXHU2MmRlXHU2MmUwXHU2MmUxXHU2MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2MmY4XHU2MmY5XHU2MmZhXHU2MmZiXHU2MzAwXHU2MzAzXHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBh'@;
put 'XHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEyXHU2MzEzXHU2MzE0XHU2MzE1XHU2MzE3XHU2MzE4XHU2MzE5XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJkXHU2MzJlXHU2MzMwXHU2MzMxXHU2MzMzXHU2MzM0XHU2MzM1XHU2MzM2XHU2MzM3XHU2MzM4XHU2'@;
put 'MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU2XHU2MzU3XHU2MzU4XHU2MzU5XHU2MzVhXHU2MzViXHU2MzVjXHU2MzVkXHU2MzYwXHU2MzY0XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZh'@;
put 'XHU2MzZiXHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2MzczXHU2Mzc0XHU2Mzc1XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2MzdkXHU2MzdlXHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1XHU2Mzg2XHU2MzhiXHU2MzhkXHU2MzkxXHU2MzkzXHU2Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5XHU2'@;
put 'MzlhXHU2MzliXHU2MzljXHU2MzlkXHU2MzllXHU2MzlmXHU2M2ExXHU2M2E0XHU2M2E2XHU2M2FiXHU2M2FmXHU2M2IxXHU2M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ2XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0Nl1bbV1dPTM3Mzc2K20sRlszNzM3NittXT14WzE0Nl1bbV0pO2Zvcih4WzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1'@;
put 'NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNlNlx1NjNlN1x1NjNlOFx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNm'@;
put 'MFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNVx1NjQxNlx1NjQxN1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1'@;
put 'NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQzOVx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0'@;
put 'OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1NjQ2M1x1NjQ2NFx1NjQ2NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1'@;
put 'NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4OFx1NjQ4OVx1NjQ4YVx1NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4'@;
put 'Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1'@;
put 'NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0N10ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDddW21dXT0zNzYzMittLEZbMzc2MzIrbV09eFsxNDddW21dKTtmb3IoeFsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0ZGJcdTY0ZGNc'@;
put 'dTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTdcdTY0ZThcdTY0ZTlcdTY0ZWFcdTY0ZWJcdTY0ZWNcdTY0ZWRcdTY0ZWVcdTY0ZWZcdTY0ZjBcdTY0ZjFcdTY0ZjJcdTY0ZjNcdTY0ZjRcdTY0ZjVcdTY0ZjZcdTY0ZjdcdTY0ZjhcdTY0ZjlcdTY0ZmFcdTY0ZmJcdTY0'@;
put 'ZmNcdTY0ZmRcdTY0ZmVcdTY0ZmZcdTY1MDFcdTY1MDJcdTY1MDNcdTY1MDRcdTY1MDVcdTY1MDZcdTY1MDdcdTY1MDhcdTY1MGFcdTY1MGJcdTY1MGNcdTY1MGRcdTY1MGVcdTY1MGZcdTY1MTBcdTY1MTFcdTY1MTNcdTY1MTRcdTY1MTVcdTY1MTZcdTY1MTdcdTY1MTlcdTY1MWFcdTY1MWJc'@;
put 'dTY1MWNcdTY1MWRcdTY1MWVcdTY1MWZcdTY1MjBcdTY1MjFcdWZmZmRcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjZcdTY1MjdcdTY1MjhcdTY1MjlcdTY1MmFcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDBcdTY1NDFcdTY1'@;
put 'NDJcdTY1NDNcdTY1NDRcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVc'@;
put 'dTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzhcdTY1NzlcdTY1N2FcdTY1N2JcdTY1N2NcdTY1N2RcdTY1N2VcdTY1N2ZcdTY1ODBcdTY1ODFcdTY1ODJcdTY1ODNcdTY1ODRcdTY1ODVcdTY1ODZcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1'@;
put 'OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjFcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YjVcdTY1YjZcdTY1YjdcdTY1YjhcdTY1YmFcdTY1YmJcdTY1YmVcdTY1YmZcdTY1YzBc'@;
put 'dTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDhcdTY1ZDlcdTY1ZGFcdTY1ZGJcdTY1ZGNcdTY1ZGRcdTY1ZGVcdTY1ZGZcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ4XVttXV09Mzc4ODgrbSxGWzM3ODg4K21dPXhbMTQ4XVttXSk7Zm9yKHhbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2NWZiXHU2NWZjXHU2NWZkXHU2NWZlXHU2NWZmXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBkXHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2'@;
put 'NjFjXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3XHU2NjM4XHU2NjM5XHU2NjNhXHU2NjNiXHU2NjNkXHU2NjNmXHU2NjQwXHU2NjQyXHU2NjQ0XHU2NjQ1XHU2NjQ2XHU2NjQ3'@;
put 'XHU2NjQ4XHU2NjQ5XHU2NjRhXHU2NjRkXHU2NjRlXHU2NjUwXHU2NjUxXHU2NjU4XHVmZmZkXHU2NjU5XHU2NjViXHU2NjVjXHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2NjY1XHU2NjY3XHU2NjY5XHU2NjZhXHU2NjZiXHU2NjZjXHU2NjZkXHU2NjcxXHU2NjcyXHU2NjczXHU2'@;
put 'Njc1XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2NjdmXHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1XHU2Njk4XHU2Njk5XHU2NjlhXHU2Njli'@;
put 'XHU2NjljXHU2NjllXHU2NjlmXHU2NmEwXHU2NmExXHU2NmEyXHU2NmEzXHU2NmE0XHU2NmE1XHU2NmE2XHU2NmE5XHU2NmFhXHU2NmFiXHU2NmFjXHU2NmFkXHU2NmFmXHU2NmIwXHU2NmIxXHU2NmIyXHU2NmIzXHU2NmI1XHU2NmI2XHU2NmI3XHU2NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2'@;
put 'NmJkXHU2NmJmXHU2NmMwXHU2NmMxXHU2NmMyXHU2NmMzXHU2NmM0XHU2NmM1XHU2NmM2XHU2NmM3XHU2NmM4XHU2NmM5XHU2NmNhXHU2NmNiXHU2NmNjXHU2NmNkXHU2NmNlXHU2NmNmXHU2NmQwXHU2NmQxXHU2NmQyXHU2NmQzXHU2NmQ0XHU2NmQ1XHU2NmQ2XHU2NmQ3XHU2NmQ4XHU2NmRh'@;
put 'XHU2NmRlXHU2NmRmXHU2NmUwXHU2NmUxXHU2NmUyXHU2NmUzXHU2NmU0XHU2NmU1XHU2NmU3XHU2NmU4XHU2NmVhXHU2NmViXHU2NmVjXHU2NmVkXHU2NmVlXHU2NmVmXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZhXHU2NmZiXHU2NmZkXHU2NzAxXHU2NzAyXHU2NzAzXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OV1bbV1dPTM4MTQ0K20sRlszODE0NCttXT14WzE0OV1bbV0pO2Zvcih4WzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1NjcyMlx1NjcyM1x1NjcyNFx1NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1'@;
put 'NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1N1x1Njc1OFx1Njc1OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2'@;
put 'Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1'@;
put 'Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1NjdiY1x1NjdiZFx1NjdiZVx1NjdiZlx1NjdjMFx1NjdjMlx1Njdj'@;
put 'NVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1'@;
put 'NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1NjgxY1x1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMlx1NjgyM1x1Njgy'@;
put 'NFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1Nlx1Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1'@;
put 'Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTBdW21dXT0zODQwMCttLEZbMzg0MDArbV09eFsxNTBdW21dKTtmb3IoeFsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmNcdTY4NmRcdTY4NmVcdTY4NmZcdTY4NzBcdTY4NzFcdTY4NzJcdTY4NzNcdTY4NzVcdTY4NzhcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4N2RcdTY4N2VcdTY4N2ZcdTY4ODBc'@;
put 'dTY4ODJcdTY4ODRcdTY4ODdcdTY4ODhcdTY4ODlcdTY4OGFcdTY4OGJcdTY4OGNcdTY4OGRcdTY4OGVcdTY4OTBcdTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OThcdTY4OTlcdTY4OWFcdTY4OWJcdTY4OWNcdTY4OWRcdTY4OWVcdTY4OWZcdTY4YTBcdTY4YTFcdTY4YTNcdTY4'@;
put 'YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJcdTY4YjRcdTY4YjZcdTY4YjdcdTY4YjhcdWZmZmRcdTY4YjlcdTY4YmFcdTY4YmJcdTY4YmNcdTY4YmRcdTY4YmVcdTY4YmZcdTY4YzFcdTY4YzNcdTY4YzRcdTY4YzVcdTY4YzZcdTY4YzdcdTY4Yzhc'@;
put 'dTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGJcdTY4ZGNcdTY4ZGRcdTY4ZGVcdTY4ZGZcdTY4ZTFcdTY4ZTJcdTY4ZTRcdTY4ZTVcdTY4ZTZcdTY4ZTdcdTY4ZThcdTY4ZTlcdTY4ZWFcdTY4ZWJcdTY4ZWNcdTY4'@;
put 'ZWRcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDZcdTY5MDdcdTY5MDhcdTY5MDlcdTY5MGFcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTNcdTY5MTRcdTY5MTVcdTY5MTZc'@;
put 'dTY5MTdcdTY5MThcdTY5MTlcdTY5MWFcdTY5MWJcdTY5MWNcdTY5MWRcdTY5MWVcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjVcdTY5MjZcdTY5MjdcdTY5MjhcdTY5MjlcdTY5MmFcdTY5MmJcdTY5MmNcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5'@;
put 'MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDNcdTY5NDRcdTY5NDVcdTY5NDZcdTY5NDdcdTY5NDhcdTY5NDlcdTY5NGFcdTY5NGJcdTY5NGNcdTY5NGRcdTY5NGVcdTY5NGZcdTY5NTBcdTY5NTFcdTY5NTJcdTY5NTNcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlc'@;
put 'dTY5NWJcdTY5NWNcdTY5NWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUxXVttXV09Mzg2NTYrbSxGWzM4NjU2K21dPXhbMTUxXVttXSk7Zm9yKHhbMTUyXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTYxXHU2OTYyXHU2OTY0XHU2OTY1XHU2OTY3XHU2OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcyXHU2OTczXHU2OTc0XHU2OTc1XHU2OTc2XHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdl'@;
put 'XHU2OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThjXHU2OThlXHU2OThmXHU2OTkwXHU2OTkxXHU2OTkyXHU2OTkzXHU2OTk2XHU2OTk3XHU2OTk5XHU2OTlhXHU2OTlkXHU2OTllXHU2OTlmXHU2OWEwXHU2OWExXHU2OWEyXHU2OWEzXHU2OWE0XHU2OWE1XHU2OWE2XHU2'@;
put 'OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2OWIzXHU2OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2OWJhXHU2OWJjXHU2OWJkXHVmZmZkXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyXHU2OWMzXHU2OWM0XHU2OWM1XHU2OWM2XHU2OWM3XHU2OWM4XHU2OWM5XHU2OWNi'@;
put 'XHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQyXHU2OWQzXHU2OWQ1XHU2OWQ2XHU2OWQ3XHU2OWQ4XHU2OWQ5XHU2OWRhXHU2OWRjXHU2OWRkXHU2OWRlXHU2OWUxXHU2OWUyXHU2OWUzXHU2OWU0XHU2OWU1XHU2OWU2XHU2OWU3XHU2OWU4XHU2OWU5XHU2OWVhXHU2OWViXHU2OWVjXHU2OWVlXHU2'@;
put 'OWVmXHU2OWYwXHU2OWYxXHU2OWYzXHU2OWY0XHU2OWY1XHU2OWY2XHU2OWY3XHU2OWY4XHU2OWY5XHU2OWZhXHU2OWZiXHU2OWZjXHU2OWZlXHU2YTAwXHU2YTAxXHU2YTAyXHU2YTAzXHU2YTA0XHU2YTA1XHU2YTA2XHU2YTA3XHU2YTA4XHU2YTA5XHU2YTBiXHU2YTBjXHU2YTBkXHU2YTBl'@;
put 'XHU2YTBmXHU2YTEwXHU2YTExXHU2YTEyXHU2YTEzXHU2YTE0XHU2YTE1XHU2YTE2XHU2YTE5XHU2YTFhXHU2YTFiXHU2YTFjXHU2YTFkXHU2YTFlXHU2YTIwXHU2YTIyXHU2YTIzXHU2YTI0XHU2YTI1XHU2YTI2XHU2YTI3XHU2YTI5XHU2YTJiXHU2YTJjXHU2YTJkXHU2YTJlXHU2YTMwXHU2'@;
put 'YTMyXHU2YTMzXHU2YTM0XHU2YTM2XHU2YTM3XHU2YTM4XHU2YTM5XHU2YTNhXHU2YTNiXHU2YTNjXHU2YTNmXHU2YTQwXHU2YTQxXHU2YTQyXHU2YTQzXHU2YTQ1XHU2YTQ2XHU2YTQ4XHU2YTQ5XHU2YTRhXHU2YTRiXHU2YTRjXHU2YTRkXHU2YTRlXHU2YTRmXHU2YTUxXHU2YTUyXHU2YTUz'@;
put 'XHU2YTU0XHU2YTU1XHU2YTU2XHU2YTU3XHU2YTVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Ml1bbV1dPTM4OTEyK20sRlszODkxMittXT14WzE1Ml1bbV0pO2Zvcih4WzE1M109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2YVx1NmE2Ylx1NmE2Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3'@;
put 'MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1NmE4Ylx1NmE4Y1x1NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1'@;
put 'NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZFx1NmFhZVx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFi'@;
put 'M1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1NmFjOVx1NmFjYVx1NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1'@;
put 'NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFlNFx1NmFlNVx1NmFlNlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFl'@;
put 'YVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1NmIwMFx1NmIwMVx1NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1'@;
put 'NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIxYlx1NmIxY1x1NmIxZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIy'@;
put 'Nlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTNdW21dXT0zOTE2OCttLEZbMzkxNjgrbV09eFsxNTNdW21dKTtm'@;
put 'b3IoeFsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiMmZcdTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZi'@;
put 'NDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGRcdTZiNGVcdTZiNGZcdTZiNTBcdTZiNTFcdTZiNTJcdTZiNTNcdTZiNTRcdTZiNTVcdTZiNTZcdTZiNTdcdTZiNThcdTZiNWFcdTZiNWJcdTZiNWNcdTZiNWRcdTZiNWVcdTZiNWZcdTZiNjBcdTZiNjFcdTZiNjhcdTZiNjlcdTZiNmJcdTZiNmNc'@;
put 'dTZiNmRcdTZiNmVcdTZiNmZcdTZiNzBcdTZiNzFcdTZiNzJcdTZiNzNcdTZiNzRcdTZiNzVcdTZiNzZcdTZiNzdcdTZiNzhcdTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODhcdWZmZmRcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZi'@;
put 'OTdcdTZiOThcdTZiOTlcdTZiOWNcdTZiOWRcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYTRcdTZiYTVcdTZiYTZcdTZiYTdcdTZiYThcdTZiYTlcdTZiYWJcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYWZcdTZiYjBcdTZiYjFcdTZiYjJcdTZiYjZcdTZiYjhcdTZiYjlcdTZiYmFc'@;
put 'dTZiYmJcdTZiYmNcdTZiYmRcdTZiYmVcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzZcdTZiYzdcdTZiYzhcdTZiYzlcdTZiY2FcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGNcdTZiZGRcdTZiZGVcdTZiZGZcdTZiZTBcdTZiZTJcdTZiZTNcdTZiZTRcdTZiZTVcdTZi'@;
put 'ZTZcdTZiZTdcdTZiZThcdTZiZTlcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJcdTZiZmNcdTZiZmVcdTZiZmZcdTZjMDBcdTZjMDFcdTZjMDJcdTZjMDNcdTZjMDRcdTZjMDhcdTZjMDlcdTZjMGFcdTZjMGJc'@;
put 'dTZjMGNcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZjMWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNcdTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZj'@;
put 'NGJcdTZjNGNcdTZjNGRcdTZjNGVcdTZjNGZcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNThcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU0XVttXV09Mzk0MjQrbSxGWzM5NDI0K21d'@;
put 'PXhbMTU0XVttXSk7Zm9yKHhbMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzU5XHU2YzVhXHU2YzYyXHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiXHU2YzZjXHU2YzZkXHU2YzZlXHU2YzZmXHU2YzcxXHU2YzczXHU2'@;
put 'Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2YzdmXHU2YzgwXHU2Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2YzhkXHU2YzhlXHU2YzkxXHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2YzlhXHU2YzljXHU2YzlkXHU2YzllXHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2Fj'@;
put 'XHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3XHU2Y2JhXHU2Y2MwXHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2XHU2Y2M3XHU2Y2M4XHU2Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2QyXHU2Y2Q4XHVmZmZkXHU2Y2Q5XHU2Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2'@;
put 'Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2Y2VkXHU2Y2YyXHU2Y2Y0XHU2Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2ZDAzXHU2ZDA1XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2ZDBmXHU2ZDEwXHU2ZDExXHU2ZDEzXHU2ZDE0XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFj'@;
put 'XHU2ZDFkXHU2ZDFmXHU2ZDIwXHU2ZDIxXHU2ZDIyXHU2ZDIzXHU2ZDI0XHU2ZDI2XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJkXHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQyXHU2ZDQ0XHU2ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2'@;
put 'ZDU2XHU2ZDU3XHU2ZDU4XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYyXHU2ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2ZDdhXHU2ZDdiXHU2ZDdkXHU2ZDdlXHU2ZDdmXHU2ZDgw'@;
put 'XHU2ZDgxXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2ZDhkXHU2ZDhmXHU2ZDkwXHU2ZDkyXHU2ZDk2XHU2ZDk3XHU2ZDk4XHU2ZDk5XHU2ZDlhXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIwXHU2ZGIxXHU2ZGIzXHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2'@;
put 'ZGI5XHU2ZGJhXHU2ZGJiXHU2ZGJjXHU2ZGJkXHU2ZGJlXHU2ZGMxXHU2ZGMyXHU2ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1NV1bbV1dPTM5Njgw'@;
put 'K20sRlszOTY4MCttXT14WzE1NV1bbV0pO2Zvcih4WzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1'@;
put 'NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1NmUwMlx1NmUwM1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUw'@;
put 'OFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNVx1ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1'@;
put 'NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2'@;
put 'MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3OFx1NmU3OVx1NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1'@;
put 'NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVh'@;
put 'Nlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1'@;
put 'NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'NTZdW21dXT0zOTkzNittLEZbMzk5MzYrbV09eFsxNTZdW21dKTtmb3IoeFsxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmFcdTZlZmJc'@;
put 'dTZlZmNcdTZlZmRcdTZlZmVcdTZlZmZcdTZmMDBcdTZmMDFcdTZmMDNcdTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGFcdTZmMGJcdTZmMGNcdTZmMGRcdTZmMGVcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTZcdTZmMTdcdTZmMThcdTZmMTlcdTZmMWFcdTZmMWJcdTZmMWNcdTZmMWRcdTZm'@;
put 'MWVcdTZmMWZcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZmMzdcdTZmMzhcdTZmMzlcdTZmM2FcdTZmM2JcdTZmM2NcdTZmM2RcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDJcdWZmZmRcdTZmNDNc'@;
put 'dTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGVcdTZmNGZcdTZmNTBcdTZmNTFcdTZmNTJcdTZmNTNcdTZmNTRcdTZmNTVcdTZmNTZcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjdcdTZm'@;
put 'NjhcdTZmNjlcdTZmNmFcdTZmNmJcdTZmNmNcdTZmNmZcdTZmNzBcdTZmNzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2JcdTZmN2RcdTZmN2VcdTZmN2ZcdTZmODBcdTZmODFcdTZmODJcdTZmODNcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGZcdTZmOTBc'@;
put 'dTZmOTFcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTVcdTZmOTZcdTZmOTdcdTZmOThcdTZmOTlcdTZmOWFcdTZmOWJcdTZmOWRcdTZmOWVcdTZmOWZcdTZmYTBcdTZmYTJcdTZmYTNcdTZmYTRcdTZmYTVcdTZmYTZcdTZmYThcdTZmYTlcdTZmYWFcdTZmYWJcdTZmYWNcdTZmYWRcdTZmYWVcdTZm'@;
put 'YWZcdTZmYjBcdTZmYjFcdTZmYjJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmFcdTZmYmJcdTZmYmNcdTZmYmRcdTZmYmVcdTZmYmZcdTZmYzFcdTZmYzNcdTZmYzRcdTZmYzVcdTZmYzZcdTZmYzdcdTZmYzhcdTZmY2FcdTZmY2JcdTZmY2NcdTZmY2RcdTZmY2VcdTZmY2ZcdTZmZDBc'@;
put 'dTZmZDNcdTZmZDRcdTZmZDVcdTZmZDZcdTZmZDdcdTZmZDhcdTZmZDlcdTZmZGFcdTZmZGJcdTZmZGNcdTZmZGRcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRcdTZmZTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1N11bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTU3XVttXV09NDAxOTIrbSxGWzQwMTkyK21dPXhbMTU3XVttXSk7Zm9yKHhbMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmU2XHU2ZmU3XHU2ZmU4XHU2ZmU5XHU2ZmVhXHU2ZmViXHU2ZmVjXHU2ZmVk'@;
put 'XHU2ZmYwXHU2ZmYxXHU2ZmYyXHU2ZmYzXHU2ZmY0XHU2ZmY1XHU2ZmY2XHU2ZmY3XHU2ZmY4XHU2ZmY5XHU2ZmZhXHU2ZmZiXHU2ZmZjXHU2ZmZkXHU2ZmZlXHU2ZmZmXHU3MDAwXHU3MDAxXHU3MDAyXHU3MDAzXHU3MDA0XHU3MDA1XHU3MDA2XHU3MDA3XHU3MDA4XHU3MDA5XHU3MDBhXHU3'@;
put 'MDBiXHU3MDBjXHU3MDBkXHU3MDBlXHU3MDBmXHU3MDEwXHU3MDEyXHU3MDEzXHU3MDE0XHU3MDE1XHU3MDE2XHU3MDE3XHU3MDE4XHU3MDE5XHU3MDFjXHU3MDFkXHU3MDFlXHU3MDFmXHU3MDIwXHU3MDIxXHU3MDIyXHU3MDI0XHU3MDI1XHU3MDI2XHU3MDI3XHU3MDI4XHU3MDI5XHU3MDJh'@;
put 'XHVmZmZkXHU3MDJiXHU3MDJjXHU3MDJkXHU3MDJlXHU3MDJmXHU3MDMwXHU3MDMxXHU3MDMyXHU3MDMzXHU3MDM0XHU3MDM2XHU3MDM3XHU3MDM4XHU3MDNhXHU3MDNiXHU3MDNjXHU3MDNkXHU3MDNlXHU3MDNmXHU3MDQwXHU3MDQxXHU3MDQyXHU3MDQzXHU3MDQ0XHU3MDQ1XHU3MDQ2XHU3'@;
put 'MDQ3XHU3MDQ4XHU3MDQ5XHU3MDRhXHU3MDRiXHU3MDRkXHU3MDRlXHU3MDUwXHU3MDUxXHU3MDUyXHU3MDUzXHU3MDU0XHU3MDU1XHU3MDU2XHU3MDU3XHU3MDU4XHU3MDU5XHU3MDVhXHU3MDViXHU3MDVjXHU3MDVkXHU3MDVmXHU3MDYwXHU3MDYxXHU3MDYyXHU3MDYzXHU3MDY0XHU3MDY1'@;
put 'XHU3MDY2XHU3MDY3XHU3MDY4XHU3MDY5XHU3MDZhXHU3MDZlXHU3MDcxXHU3MDcyXHU3MDczXHU3MDc0XHU3MDc3XHU3MDc5XHU3MDdhXHU3MDdiXHU3MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3MDhiXHU3MDhjXHU3MDhkXHU3MDhmXHU3MDkwXHU3'@;
put 'MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllXHU3MDlmXHU3MGEwXHU3MGExXHU3MGEyXHU3MGEzXHU3MGE0XHU3MGE1XHU3MGE2XHU3MGE3XHU3MGE4XHU3MGE5XHU3MGFhXHU3MGIwXHU3MGIyXHU3MGI0XHU3MGI1XHU3MGI2XHU3MGJhXHU3MGJlXHU3MGJmXHU3MGM0'@;
put 'XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiXHU3MGNjXHU3MGNkXHU3MGNlXHU3MGNmXHU3MGQwXHU3MGQxXHU3MGQyXHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ3XHU3MGRhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNThd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1OF1bbV1dPTQwNDQ4K20sRls0MDQ0OCttXT14WzE1OF1bbV0pO2Zvcih4WzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBkY1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBl'@;
put 'Mlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1NzEwNVx1NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1'@;
put 'NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEyYVx1NzEyYlx1NzEyY1x1NzEyZFx1NzEyZVx1NzEz'@;
put 'Mlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1'@;
put 'NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3'@;
put 'Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1'@;
put 'NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFi'@;
put 'ZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1OV0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTU5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTldW21dXT00MDcwNCttLEZbNDA3MDQrbV09eFsxNTldW21dKTtmb3IoeFsxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxZDZcdTcxZDdcdTcxZDhcdTcx'@;
put 'ZDlcdTcxZGFcdTcxZGJcdTcxZGNcdTcxZGRcdTcxZGVcdTcxZGZcdTcxZTFcdTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZThcdTcxZTlcdTcxZWFcdTcxZWJcdTcxZWNcdTcxZWRcdTcxZWZcdTcxZjBcdTcxZjFcdTcxZjJcdTcxZjNcdTcxZjRcdTcxZjVcdTcxZjZcdTcxZjdcdTcxZjhc'@;
put 'dTcxZmFcdTcxZmJcdTcxZmNcdTcxZmRcdTcxZmVcdTcxZmZcdTcyMDBcdTcyMDFcdTcyMDJcdTcyMDNcdTcyMDRcdTcyMDVcdTcyMDdcdTcyMDhcdTcyMDlcdTcyMGFcdTcyMGJcdTcyMGNcdTcyMGRcdTcyMGVcdTcyMGZcdTcyMTBcdTcyMTFcdTcyMTJcdTcyMTNcdTcyMTRcdTcyMTVcdTcy'@;
put 'MTZcdTcyMTdcdTcyMThcdTcyMTlcdTcyMWFcdWZmZmRcdTcyMWJcdTcyMWNcdTcyMWVcdTcyMWZcdTcyMjBcdTcyMjFcdTcyMjJcdTcyMjNcdTcyMjRcdTcyMjVcdTcyMjZcdTcyMjdcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2Nc'@;
put 'dTcyM2VcdTcyNDBcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDRcdTcyNDVcdTcyNDZcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcy'@;
put 'NjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODVcdTcyODZcdTcyODdcdTcyODhcdTcyODlcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTNcdTcyOTRc'@;
put 'dTcyOTVcdTcyOTZcdTcyOTdcdTcyOThcdTcyOTlcdTcyOWFcdTcyOWJcdTcyOWNcdTcyOWRcdTcyOWVcdTcyYTBcdTcyYTFcdTcyYTJcdTcyYTNcdTcyYTRcdTcyYTVcdTcyYTZcdTcyYTdcdTcyYThcdTcyYTlcdTcyYWFcdTcyYWJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcy'@;
put 'YmFcdTcyYmJcdTcyYmNcdTcyYmRcdTcyYmVcdTcyYmZcdTcyYzBcdTcyYzVcdTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjBd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYwXVttXV09NDA5NjArbSxGWzQwOTYwK21dPXhbMTYwXVttXSk7Zm9yKHhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZmNWVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlc'@;
put 'dTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIy'@;
put 'MWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhh'@;
put 'NFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjFdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzE2MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYxXVttXV09NDEyMTYrbSxGWzQxMjE2K21dPXhbMTYxXVttXSk7Zm9yKHhbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUy'@;
put 'NDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIx'@;
put 'XHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Ml1bbV1dPTQxNDcyK20sRls0MTQ3MittXT14WzE2Ml1bbV0pO2Zvcih4WzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYw'@;
put 'ZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1'@;
put 'ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0'@;
put 'NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjNdW21dXT00MTcyOCttLEZbNDE3MjgrbV09eFsxNjNdW21dKTtmb3IoeFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMw'@;
put 'NGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZc'@;
put 'dTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMw'@;
put 'ODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY0XVttXV09NDE5ODQrbSxGWzQxOTg0K21dPXhbMTY0XVttXSk7Zm9yKHhbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUz'@;
put 'MGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0'@;
put 'XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUz'@;
put 'MGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NV1bbV1dPTQyMjQwK20sRls0MjI0MCttXT14WzE2NV1bbV0pO2Zvcih4WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1'@;
put 'MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNi'@;
put 'Mlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NFx1ZmZmZFx1ZmZmZFx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMVx1ZmZmZFx1ZmUzM1x1ZmUzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjZdW21dXT00MjQ5NittLEZbNDI0OTYrbV09eFsxNjZdW21dKTtmb3IoeFsxNjddPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNc'@;
put 'dTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0'@;
put 'MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0Mzlc'@;
put 'dTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY3XVttXV09NDI3NTIrbSxGWzQyNzUyK21dPXhbMTY3XVttXSk7'@;
put 'Zm9yKHhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUy'@;
put 'MjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3'@;
put 'XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZmXHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThiXHUyNThjXHUyNThkXHUyNThlXHUy'@;
put 'NThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1'@;
put 'MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4XHVmZmZkXHUwMjYxXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFk'@;
put 'XHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OF1bbV1dPTQzMDA4K20sRls0MzAwOCttXT14WzE2OF1bbV0pO2Zvcih4WzE2OV09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1'@;
put 'MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNFx1ZmZmZFx1MjEyMVx1MzIzMVx1ZmZmZFx1MjAxMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OVx1ZmU0YVx1ZmU0Ylx1ZmU0Y1x1ZmU0ZFx1ZmU0'@;
put 'ZVx1ZmU0Zlx1ZmU1MFx1ZmU1MVx1ZmU1Mlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1OVx1ZmU1YVx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmZmZFx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUw'@;
put 'MFx1MjUwMVx1MjUwMlx1MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUwY1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUxMFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1'@;
put 'MjUxY1x1MjUxZFx1MjUxZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUz'@;
put 'N1x1MjUzOFx1MjUzOVx1MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjldW21dXT00MzI2NCttLEZbNDMyNjQrbV09eFsxNjldW21d'@;
put 'KTtmb3IoeFsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZGNcdTcyZGRcdTcyZGZcdTcyZTJcdTcyZTNcdTcyZTRcdTcyZTVcdTcyZTZcdTcyZTdcdTcyZWFcdTcyZWJcdTcyZjVcdTcyZjZcdTcyZjlcdTcyZmRcdTcyZmVc'@;
put 'dTcyZmZcdTczMDBcdTczMDJcdTczMDRcdTczMDVcdTczMDZcdTczMDdcdTczMDhcdTczMDlcdTczMGJcdTczMGNcdTczMGRcdTczMGZcdTczMTBcdTczMTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTczMjRcdTczMjZcdTczMjdcdTczMjhcdTcz'@;
put 'MmRcdTczMmZcdTczMzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTczM2JcdTczM2NcdTczM2RcdTczNDBcdTczNDFcdTczNDJcdTczNDNcdTczNDRcdTczNDVcdTczNDZcdTczNDdcdTczNDhcdWZmZmRcdTczNDlcdTczNGFcdTczNGJcdTczNGNcdTczNGVcdTczNGZcdTczNTFc'@;
put 'dTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNThcdTczNTlcdTczNWFcdTczNWJcdTczNWNcdTczNWRcdTczNWVcdTczNWZcdTczNjFcdTczNjJcdTczNjNcdTczNjRcdTczNjVcdTczNjZcdTczNjdcdTczNjhcdTczNjlcdTczNmFcdTczNmJcdTczNmVcdTczNzBcdTczNzFcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcwXVttXV09NDM1MjArbSxGWzQzNTIw'@;
put 'K21dPXhbMTcwXVttXSk7Zm9yKHhbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3MzdjXHU3MzdkXHU3MzdmXHU3Mzgw'@;
put 'XHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzXHU3M2E0XHU3M2E1XHU3'@;
put 'M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2NjXHU3M2NlXHU3M2QyXHU3M2Qz'@;
put 'XHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3M2Y0XHU3M2Y1XHU3M2Y2XHU3'@;
put 'M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3MV1bbV1dPTQz'@;
put 'Nzc2K20sRls0Mzc3NittXT14WzE3MV1bbV0pO2Zvcih4WzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzNmOFx1NzNmOVx1NzNmYVx1NzNmYlx1NzNmY1x1NzNmZFx1NzNmZVx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwMlx1NzQw'@;
put 'NFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMVx1NzQxMlx1NzQxM1x1NzQxNFx1NzQxNVx1NzQxNlx1NzQxN1x1NzQxOFx1NzQxOVx1NzQxY1x1NzQxZFx1NzQxZVx1NzQxZlx1NzQyMFx1NzQyMVx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1'@;
put 'NzQyZlx1NzQzMVx1NzQzMlx1NzQzN1x1NzQzOFx1NzQzOVx1NzQzYVx1NzQzYlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0Mlx1NzQ0M1x1NzQ0NFx1NzQ0NVx1NzQ0Nlx1NzQ0N1x1NzQ0OFx1NzQ0OVx1NzQ0YVx1NzQ0Ylx1NzQ0Y1x1NzQ0ZFx1ZmZmZFx1NzQ0ZVx1NzQ0Zlx1NzQ1'@;
put 'MFx1NzQ1MVx1NzQ1Mlx1NzQ1M1x1NzQ1NFx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MFx1NzQ2MVx1NzQ2Mlx1NzQ2M1x1NzQ2NFx1NzQ2NVx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2OVx1NzQ2YVx1NzQ2Ylx1NzQ2Y1x1NzQ2ZVx1NzQ2Zlx1NzQ3MVx1NzQ3Mlx1NzQ3M1x1NzQ3NFx1NzQ3NVx1'@;
put 'NzQ3OFx1NzQ3OVx1NzQ3YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVb'@;
put 'eFsxNzJdW21dXT00NDAzMittLEZbNDQwMzIrbV09eFsxNzJdW21dKTtmb3IoeFsxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2JcdTc0N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0ODRcdTc0ODVcdTc0ODZcdTc0ODhcdTc0'@;
put 'ODlcdTc0OGFcdTc0OGNcdTc0OGRcdTc0OGZcdTc0OTFcdTc0OTJcdTc0OTNcdTc0OTRcdTc0OTVcdTc0OTZcdTc0OTdcdTc0OThcdTc0OTlcdTc0OWFcdTc0OWJcdTc0OWRcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTJcdTc0YTNcdTc0YTRcdTc0YTVcdTc0YTZcdTc0YWFcdTc0YWJcdTc0YWNc'@;
put 'dTc0YWRcdTc0YWVcdTc0YWZcdTc0YjBcdTc0YjFcdTc0YjJcdTc0YjNcdTc0YjRcdTc0YjVcdTc0YjZcdTc0YjdcdTc0YjhcdTc0YjlcdTc0YmJcdTc0YmNcdTc0YmRcdTc0YmVcdTc0YmZcdTc0YzBcdTc0YzFcdTc0YzJcdTc0YzNcdTc0YzRcdTc0YzVcdTc0YzZcdTc0YzdcdWZmZmRcdTc0'@;
put 'YzhcdTc0YzlcdTc0Y2FcdTc0Y2JcdTc0Y2NcdTc0Y2RcdTc0Y2VcdTc0Y2ZcdTc0ZDBcdTc0ZDFcdTc0ZDNcdTc0ZDRcdTc0ZDVcdTc0ZDZcdTc0ZDdcdTc0ZDhcdTc0ZDlcdTc0ZGFcdTc0ZGJcdTc0ZGRcdTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTdcdTc0ZThcdTc0ZTlcdTc0ZWFcdTc0ZWJc'@;
put 'dTc0ZWNcdTc0ZWRcdTc0ZjBcdTc0ZjFcdTc0ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3M11bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGFlW3hbMTczXVttXV09NDQyODgrbSxGWzQ0Mjg4K21dPXhbMTczXVttXSk7Zm9yKHhbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZhXHU3NGZiXHU3NGZjXHU3'@;
put 'NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3NTIxXHU3NTIyXHU3NTIz'@;
put 'XHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3'@;
put 'NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3NTdiXHU3NTdjXHU3NTdk'@;
put 'XHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsx'@;
put 'NzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NF1bbV1dPTQ0NTQ0K20sRls0NDU0NCttXT14WzE3NF1bbV0pO2Zvcih4WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1'@;
put 'NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNlx1NzVhN1x1NzVhOFx1NzVhOVx1NzVhYVx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVk'@;
put 'MFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1'@;
put 'NzYwNFx1NzYwNlx1NzYwN1x1ZmZmZFx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYz'@;
put 'Mlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3NV0ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PXhbMTc1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzVdW21dXT00NDgwMCttLEZbNDQ4MDArbV09eFsxNzVdW21dKTtmb3IoeFsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NDVcdTc2NDZcdTc2NDdc'@;
put 'dTc2NDhcdTc2NDlcdTc2NGFcdTc2NGJcdTc2NGVcdTc2NGZcdTc2NTBcdTc2NTFcdTc2NTJcdTc2NTNcdTc2NTVcdTc2NTdcdTc2NThcdTc2NTlcdTc2NWFcdTc2NWJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFcdTc2NjJcdTc2NjRcdTc2NjVcdTc2NjZcdTc2NjdcdTc2NjhcdTc2NjlcdTc2'@;
put 'NmFcdTc2NmNcdTc2NmRcdTc2NmVcdTc2NzBcdTc2NzFcdTc2NzJcdTc2NzNcdTc2NzRcdTc2NzVcdTc2NzZcdTc2NzdcdTc2NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNcdTc2OGRcdTc2OGZcdTc2OTBcdTc2OTJcdTc2OTRc'@;
put 'dTc2OTVcdTc2OTdcdTc2OThcdTc2OWFcdTc2OWJcdWZmZmRcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWZcdTc2YTBcdTc2YTFcdTc2YTJcdTc2YTNcdTc2YTVcdTc2YTZcdTc2YTdcdTc2YThcdTc2YTlcdTc2YWFcdTc2YWJcdTc2YWNcdTc2YWRcdTc2YWZcdTc2YjBcdTc2YjNcdTc2YjVcdTc2'@;
put 'YjZcdTc2YjdcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YmJcdTc2YmNcdTc2YmRcdTc2YmVcdTc2YzBcdTc2YzFcdTc2YzNcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRc'@;
put 'dTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1'@;
put 'YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVc'@;
put 'dTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsx'@;
put 'NzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc2XVttXV09NDUwNTYrbSxGWzQ1MDU2K21dPXhbMTc2XVttXSk7Zm9yKHhbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NmM0'@;
put 'XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3NmYzXHU3NmY1XHU3'@;
put 'NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFl'@;
put 'XHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3NzQ5XHU3NzRhXHU3'@;
put 'NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkx'@;
put 'XHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3'@;
put 'YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVl'@;
put 'XHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPXhbMTc3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3N11bbV1dPTQ1MzEyK20sRls0NTMxMittXT14WzE3N11bbV0pO2Zvcih4WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZFx1Nzc2ZVx1Nzc2Zlx1Nzc3MFx1Nzc3MVx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3NVx1Nzc3Nlx1Nzc3N1x1Nzc3OFx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1'@;
put 'Nzc4Nlx1Nzc4N1x1Nzc4OFx1Nzc4OVx1Nzc4YVx1Nzc4Ylx1Nzc4Zlx1Nzc5MFx1Nzc5M1x1Nzc5NFx1Nzc5NVx1Nzc5Nlx1Nzc5N1x1Nzc5OFx1Nzc5OVx1Nzc5YVx1Nzc5Ylx1Nzc5Y1x1Nzc5ZFx1Nzc5ZVx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1Nzdh'@;
put 'ZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNlx1NzdiN1x1NzdiOFx1NzdiOVx1NzdiYVx1ZmZmZFx1NzdiY1x1NzdiZVx1NzdjMFx1NzdjMVx1NzdjMlx1NzdjM1x1NzdjNFx1NzdjNVx1NzdjNlx1NzdjN1x1NzdjOFx1NzdjOVx1NzdjYVx1NzdjYlx1NzdjY1x1NzdjZVx1NzdjZlx1'@;
put 'NzdkMFx1NzdkMVx1NzdkMlx1NzdkM1x1NzdkNFx1NzdkNVx1NzdkNlx1NzdkOFx1NzdkOVx1NzdkYVx1NzdkZFx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlMVx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRj'@;
put 'Mlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1'@;
put 'OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0'@;
put 'Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzhdW21dXT00NTU2OCttLEZbNDU1NjgrbV09eFsxNzhdW21dKTtmb3IoeFsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZTZcdTc3ZThcdTc3ZWFcdTc3ZWZcdTc3ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRcdTc3ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDNcdTc4MDRcdTc4MDVcdTc4MDZcdTc4MDdcdTc4MDhcdTc4MGFcdTc4MGJcdTc4MGVcdTc4MGZc'@;
put 'dTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4MWJcdTc4MWVcdTc4MjBcdTc4MjFcdTc4MjJcdTc4MjRcdTc4MjhcdTc4MmFcdTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4M2ZcdTc4NDFcdTc4NDJcdTc4NDNcdTc4NDRcdTc4NDZcdTc4'@;
put 'NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRcdTc4NGZcdTc4NTFcdTc4NTNcdTc4NTRcdTc4NThcdTc4NTlcdTc4NWFcdWZmZmRcdTc4NWJcdTc4NWNcdTc4NWVcdTc4NWZcdTc4NjBcdTc4NjFcdTc4NjJcdTc4NjNcdTc4NjRcdTc4NjVcdTc4NjZcdTc4NjdcdTc4NjhcdTc4NjlcdTc4NmZc'@;
put 'dTc4NzBcdTc4NzFcdTc4NzJcdTc4NzNcdTc4NzRcdTc4NzVcdTc4NzZcdTc4NzhcdTc4NzlcdTc4N2FcdTc4N2JcdTc4N2RcdTc4N2VcdTc4N2ZcdTc4ODBcdTc4ODFcdTc4ODJcdTc4ODNcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1'@;
put 'MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFc'@;
put 'dTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdm'@;
put 'YzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFc'@;
put 'dTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc5XVttXV09NDU4MjQrbSxGWzQ1ODI0K21dPXhbMTc5XVttXSk7Zm9yKHhbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3OGE5XHU3OGFh'@;
put 'XHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3'@;
put 'OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3OGYxXHU3OGYz'@;
put 'XHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1'@;
put 'ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1'@;
put 'XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1'@;
put 'MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUz'@;
put 'XHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MF1bbV1dPTQ2MDgwK20sRls0NjA4MCttXT14WzE4MF1bbV0pO2Zvcih4WzE4MV09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkwZFx1NzkwZVx1NzkwZlx1NzkxMFx1NzkxMVx1NzkxMlx1NzkxNFx1NzkxNVx1NzkxNlx1NzkxN1x1NzkxOFx1NzkxOVx1NzkxYVx1NzkxYlx1NzkxY1x1NzkxZFx1NzkxZlx1NzkyMFx1NzkyMVx1Nzky'@;
put 'Mlx1NzkyM1x1NzkyNVx1NzkyNlx1NzkyN1x1NzkyOFx1NzkyOVx1NzkyYVx1NzkyYlx1NzkyY1x1NzkyZFx1NzkyZVx1NzkyZlx1NzkzMFx1NzkzMVx1NzkzMlx1NzkzM1x1NzkzNVx1NzkzNlx1NzkzN1x1NzkzOFx1NzkzOVx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1'@;
put 'Nzk0N1x1Nzk0YVx1Nzk0Ylx1Nzk0Y1x1Nzk0ZFx1Nzk0ZVx1Nzk0Zlx1Nzk1MFx1Nzk1MVx1Nzk1Mlx1Nzk1NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2M1x1ZmZmZFx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MFx1Nzk3MVx1Nzk3Mlx1Nzk3'@;
put 'M1x1Nzk3NFx1Nzk3NVx1Nzk3Nlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZFx1Nzk3ZVx1Nzk3Zlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1'@;
put 'OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZk'@;
put 'N1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1'@;
put 'OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRj'@;
put 'Y1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODFdW21dXT00NjMzNittLEZbNDYzMzYrbV09eFsxODFdW21dKTtmb3IoeFsx'@;
put 'ODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTNcdTc5OTRcdTc5OTVcdTc5OTZcdTc5OTdcdTc5OThcdTc5OTlcdTc5OWJcdTc5OWNcdTc5OWRcdTc5OWVcdTc5OWZcdTc5YTBcdTc5YTFcdTc5YTJcdTc5YTNcdTc5YTRcdTc5'@;
put 'YTVcdTc5YTZcdTc5YThcdTc5YTlcdTc5YWFcdTc5YWJcdTc5YWNcdTc5YWRcdTc5YWVcdTc5YWZcdTc5YjBcdTc5YjFcdTc5YjJcdTc5YjRcdTc5YjVcdTc5YjZcdTc5YjdcdTc5YjhcdTc5YmNcdTc5YmZcdTc5YzJcdTc5YzRcdTc5YzVcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2NcdTc5Y2Vc'@;
put 'dTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDlcdTc5ZGFcdTc5ZGJcdTc5ZGNcdTc5ZGRcdTc5ZGVcdTc5ZTBcdTc5ZTFcdTc5ZTJcdTc5ZTVcdTc5ZThcdTc5ZWFcdWZmZmRcdTc5ZWNcdTc5ZWVcdTc5ZjFcdTc5ZjJcdTc5ZjNcdTc5ZjRcdTc5ZjVcdTc5ZjZcdTc5'@;
put 'ZjdcdTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdhMDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdhMGFcdTdhMGNcdTdhMGZcdTdhMTBcdTdhMTFcdTdhMTJcdTdhMTNcdTdhMTVcdTdhMTZcdTdhMThcdTdhMTlcdTdhMWJcdTdhMWNcdTRlMDFcdTc2ZWZcdTUzZWVc'@;
put 'dTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcy'@;
put 'OGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRc'@;
put 'dTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5'@;
put 'N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgyXVttXV09NDY1OTIrbSxGWzQ2NTkyK21dPXhbMTgy'@;
put 'XVttXSk7Zm9yKHhbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3YTJlXHU3'@;
put 'YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUyXHU3YTUz'@;
put 'XHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3YTZlXHU3'@;
put 'YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMw'@;
put 'XHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2'@;
put 'NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVm'@;
put 'XHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4'@;
put 'MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4M11bbV1dPTQ2ODQ4K20sRls0'@;
put 'Njg0OCttXT14WzE4M11bbV0pO2Zvcih4WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZVx1N2FhZlx1N2FiMFx1N2FiMVx1N2FiMlx1N2FiNFx1N2FiNVx1'@;
put 'N2FiNlx1N2FiN1x1N2FiOFx1N2FiOVx1N2FiYVx1N2FiYlx1N2FiY1x1N2FiZFx1N2FiZVx1N2FjMFx1N2FjMVx1N2FjMlx1N2FjM1x1N2FjNFx1N2FjNVx1N2FjNlx1N2FjN1x1N2FjOFx1N2FjOVx1N2FjYVx1N2FjY1x1N2FjZFx1N2FjZVx1N2FjZlx1N2FkMFx1N2FkMVx1N2FkMlx1N2Fk'@;
put 'M1x1N2FkNFx1N2FkNVx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlN1x1N2FlOFx1N2FlOVx1N2FlYVx1N2FlYlx1N2FlY1x1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmM1x1ZmZmZFx1N2FmNFx1N2FmNVx1N2FmNlx1N2FmN1x1'@;
put 'N2FmOFx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2Iy'@;
put 'OVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1'@;
put 'NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRh'@;
put 'Mlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1'@;
put 'ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODRdW21d'@;
put 'XT00NzEwNCttLEZbNDcxMDQrbV09eFsxODRdW21dKTtmb3IoeFsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdiMzZcdTdiMzdcdTdiMzlcdTdiM2JcdTdiM2RcdTdiM2Zc'@;
put 'dTdiNDBcdTdiNDFcdTdiNDJcdTdiNDNcdTdiNDRcdTdiNDZcdTdiNDhcdTdiNGFcdTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVcdTdiNTdcdTdiNTlcdTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdiNjNcdTdiNjRcdTdiNjVcdTdiNjZcdTdiNjdcdTdiNjhcdTdiNjlcdTdiNmFcdTdiNmJcdTdi'@;
put 'NmNcdTdiNmRcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdiN2FcdTdiN2NcdTdiN2RcdTdiN2ZcdTdiODFcdTdiODJcdTdiODNcdTdiODRcdTdiODZcdTdiODdcdTdiODhcdTdiODlcdTdiOGFcdTdiOGJcdTdiOGNcdTdiOGVcdTdiOGZcdWZmZmRcdTdiOTFcdTdiOTJc'@;
put 'dTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFcdTdiOWJcdTdiOWVcdTdiOWZcdTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVcdTdiYWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdiYjZcdTdiYjdcdTdiYjlcdTdiYmFcdTdiYmJcdTdiYmNcdTdiYmRcdTdiYmVcdTdiYmZcdTdi'@;
put 'YzBcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJc'@;
put 'dTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRl'@;
put 'NTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2Nzhc'@;
put 'dTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NV1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGFlW3hbMTg1XVttXV09NDczNjArbSxGWzQ3MzYwK21dPXhbMTg1XVttXSk7Zm9yKHhbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQw'@;
put 'XHU3YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2XHU3'@;
put 'YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVmZmZk'@;
put 'XHU3YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5XHU3'@;
put 'YzNhXHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJl'@;
put 'XHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5'@;
put 'NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5'@;
put 'XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODZdW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihhZVt4WzE4Nl1bbV1dPTQ3NjE2K20sRls0NzYxNittXT14WzE4Nl1bbV0pO2Zvcih4WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2M0M1x1N2M0NFx1N2M0NVx1N2M0Nlx1N2M0N1x1N2M0OFx1N2M0'@;
put 'OVx1N2M0YVx1N2M0Ylx1N2M0Y1x1N2M0ZVx1N2M0Zlx1N2M1MFx1N2M1MVx1N2M1Mlx1N2M1M1x1N2M1NFx1N2M1NVx1N2M1Nlx1N2M1N1x1N2M1OFx1N2M1OVx1N2M1YVx1N2M1Ylx1N2M1Y1x1N2M1ZFx1N2M1ZVx1N2M1Zlx1N2M2MFx1N2M2MVx1N2M2Mlx1N2M2M1x1N2M2NFx1N2M2NVx1'@;
put 'N2M2Nlx1N2M2N1x1N2M2OFx1N2M2OVx1N2M2YVx1N2M2Ylx1N2M2Y1x1N2M2ZFx1N2M2ZVx1N2M2Zlx1N2M3MFx1N2M3MVx1N2M3Mlx1N2M3NVx1N2M3Nlx1N2M3N1x1N2M3OFx1N2M3OVx1N2M3YVx1N2M3ZVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2M4Mlx1N2M4M1x1N2M4NFx1N2M4NVx1N2M4'@;
put 'Nlx1N2M4N1x1ZmZmZFx1N2M4OFx1N2M4YVx1N2M4Ylx1N2M4Y1x1N2M4ZFx1N2M4ZVx1N2M4Zlx1N2M5MFx1N2M5M1x1N2M5NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1'@;
put 'N2NiMFx1N2NiNFx1N2NiNVx1N2NiNlx1N2NiN1x1N2NiOFx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRl'@;
put 'ZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1'@;
put 'NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1'@;
put 'MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4N10ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PXhbMTg3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODddW21dXT00Nzg3MittLEZbNDc4NzIrbV09eFsxODddW21dKTtmb3IoeFsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjYmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdj'@;
put 'YzRcdTdjYzZcdTdjYzlcdTdjY2JcdTdjY2VcdTdjY2ZcdTdjZDBcdTdjZDFcdTdjZDJcdTdjZDNcdTdjZDRcdTdjZDhcdTdjZGFcdTdjZGJcdTdjZGRcdTdjZGVcdTdjZTFcdTdjZTJcdTdjZTNcdTdjZTRcdTdjZTVcdTdjZTZcdTdjZTdcdTdjZTlcdTdjZWFcdTdjZWJcdTdjZWNcdTdjZWRc'@;
put 'dTdjZWVcdTdjZjBcdTdjZjFcdTdjZjJcdTdjZjNcdTdjZjRcdTdjZjVcdTdjZjZcdTdjZjdcdTdjZjlcdTdjZmFcdTdjZmNcdTdjZmRcdTdjZmVcdTdjZmZcdTdkMDBcdTdkMDFcdTdkMDJcdTdkMDNcdTdkMDRcdTdkMDVcdTdkMDZcdTdkMDdcdTdkMDhcdTdkMDlcdTdkMGJcdTdkMGNcdTdk'@;
put 'MGRcdTdkMGVcdTdkMGZcdTdkMTBcdWZmZmRcdTdkMTFcdTdkMTJcdTdkMTNcdTdkMTRcdTdkMTVcdTdkMTZcdTdkMTdcdTdkMThcdTdkMTlcdTdkMWFcdTdkMWJcdTdkMWNcdTdkMWRcdTdkMWVcdTdkMWZcdTdkMjFcdTdkMjNcdTdkMjRcdTdkMjVcdTdkMjZcdTdkMjhcdTdkMjlcdTdkMmFc'@;
put 'dTdkMmNcdTdkMmRcdTdkMmVcdTdkMzBcdTdkMzFcdTdkMzJcdTdkMzNcdTdkMzRcdTdkMzVcdTdkMzZcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1'@;
put 'YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFc'@;
put 'dTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5'@;
put 'NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODhdLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT14WzE4OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg4XVttXV09NDgxMjgrbSxGWzQ4MTI4K21dPXhbMTg4XVttXSk7Zm9yKHhbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3'@;
put 'ZDM5XHU3ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0'@;
put 'XHU3ZDU1XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3'@;
put 'ZDcxXHU3ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhj'@;
put 'XHU3ZDhkXHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2'@;
put 'ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1Mjdm'@;
put 'XHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3'@;
put 'NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PXhbMTg5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OV1bbV1dPTQ4Mzg0K20sRls0ODM4NCttXT14WzE4OV1bbV0pO2Zvcih4WzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'N2Q5OVx1N2Q5YVx1N2Q5Ylx1N2Q5Y1x1N2Q5ZFx1N2Q5ZVx1N2Q5Zlx1N2RhMFx1N2RhMVx1N2RhMlx1N2RhM1x1N2RhNFx1N2RhNVx1N2RhN1x1N2RhOFx1N2RhOVx1N2RhYVx1N2RhYlx1N2RhY1x1N2RhZFx1N2RhZlx1N2RiMFx1N2RiMVx1N2RiMlx1N2RiM1x1N2RiNFx1N2RiNVx1N2Ri'@;
put 'Nlx1N2RiN1x1N2RiOFx1N2RiOVx1N2RiYVx1N2RiYlx1N2RiY1x1N2RiZFx1N2RiZVx1N2RiZlx1N2RjMFx1N2RjMVx1N2RjMlx1N2RjM1x1N2RjNFx1N2RjNVx1N2RjNlx1N2RjN1x1N2RjOFx1N2RjOVx1N2RjYVx1N2RjYlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RjZlx1N2RkMFx1N2RkMVx1'@;
put 'N2RkMlx1N2RkM1x1N2RkNFx1N2RkNVx1N2RkNlx1N2RkN1x1N2RkOFx1N2RkOVx1ZmZmZFx1N2RkYVx1N2RkYlx1N2RkY1x1N2RkZFx1N2RkZVx1N2RkZlx1N2RlMFx1N2RlMVx1N2RlMlx1N2RlM1x1N2RlNFx1N2RlNVx1N2RlNlx1N2RlN1x1N2RlOFx1N2RlOVx1N2RlYVx1N2RlYlx1N2Rl'@;
put 'Y1x1N2RlZFx1N2RlZVx1N2RlZlx1N2RmMFx1N2RmMVx1N2RmMlx1N2RmM1x1N2RmNFx1N2RmNVx1N2RmNlx1N2RmN1x1N2RmOFx1N2RmOVx1N2RmYVx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1'@;
put 'NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVl'@;
put 'N1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1'@;
put 'NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT14WzE5MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTBdW21dXT00ODY0MCttLEZbNDg2NDArbV09eFsxOTBdW21dKTtmb3IoeFsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTdkZmJcdTdkZmNcdTdkZmRcdTdkZmVcdTdkZmZcdTdlMDBcdTdlMDFcdTdlMDJcdTdlMDNcdTdlMDRcdTdlMDVcdTdlMDZcdTdlMDdcdTdlMDhcdTdlMDlcdTdlMGFcdTdlMGJcdTdlMGNcdTdlMGRcdTdlMGVcdTdlMGZcdTdlMTBcdTdlMTFcdTdlMTJcdTdlMTNcdTdl'@;
put 'MTRcdTdlMTVcdTdlMTZcdTdlMTdcdTdlMThcdTdlMTlcdTdlMWFcdTdlMWJcdTdlMWNcdTdlMWRcdTdlMWVcdTdlMWZcdTdlMjBcdTdlMjFcdTdlMjJcdTdlMjNcdTdlMjRcdTdlMjVcdTdlMjZcdTdlMjdcdTdlMjhcdTdlMjlcdTdlMmFcdTdlMmJcdTdlMmNcdTdlMmRcdTdlMmVcdTdlMmZc'@;
put 'dTdlMzBcdTdlMzFcdTdlMzJcdTdlMzNcdTdlMzRcdTdlMzVcdTdlMzZcdTdlMzdcdTdlMzhcdTdlMzlcdWZmZmRcdTdlM2FcdTdlM2NcdTdlM2RcdTdlM2VcdTdlM2ZcdTdlNDBcdTdlNDJcdTdlNDNcdTdlNDRcdTdlNDVcdTdlNDZcdTdlNDhcdTdlNDlcdTdlNGFcdTdlNGJcdTdlNGNcdTdl'@;
put 'NGRcdTdlNGVcdTdlNGZcdTdlNTBcdTdlNTFcdTdlNTJcdTdlNTNcdTdlNTRcdTdlNTVcdTdlNTZcdTdlNTdcdTdlNThcdTdlNTlcdTdlNWFcdTdlNWJcdTdlNWNcdTdlNWRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlc'@;
put 'dTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4'@;
put 'ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNc'@;
put 'dTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUw'@;
put 'ODBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkxXVttXV09NDg4OTYrbSxGWzQ4ODk2K21dPXhbMTkxXVttXSk7Zm9yKHhbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3'@;
put 'ZTc1XHU3ZTc2XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkx'@;
put 'XHU3ZTkyXHU3ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTllXHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3'@;
put 'ZjNjXHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5'@;
put 'XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3'@;
put 'NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3Yzdi'@;
put 'XHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1'@;
put 'MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Ml1bbV1dPTQ5MTUyK20sRls0OTE1MittXT14WzE5Ml1bbV0pO2Zvcih4WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1N2Y2MFx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2N1x1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1'@;
put 'N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4MFx1N2Y4Mlx1N2Y4M1x1N2Y4NFx1N2Y4NVx1N2Y4Nlx1N2Y4N1x1N2Y4OFx1N2Y4OVx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Mlx1N2Y5M1x1N2Y5NVx1N2Y5Nlx1N2Y5N1x1N2Y5OFx1N2Y5OVx1N2Y5'@;
put 'Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOFx1N2ZhOVx1N2ZhYVx1N2ZhYlx1N2ZhY1x1N2ZhZFx1N2ZhZVx1N2ZiMVx1ZmZmZFx1N2ZiM1x1N2ZiNFx1N2ZiNVx1N2ZiNlx1N2ZiN1x1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1'@;
put 'N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZlx1N2ZkMFx1N2ZkMVx1N2ZkMlx1N2ZkM1x1N2ZkNlx1N2ZkN1x1N2ZkOVx1N2ZkYVx1N2ZkYlx1N2ZkY1x1N2ZkZFx1N2ZkZVx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4'@;
put 'M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1'@;
put 'NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0'@;
put 'MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1'@;
put 'OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTNdW21dXT00OTQwOCttLEZbNDk0MDgrbV09eFsxOTNdW21dKTtmb3IoeFsxOTRdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTRcdTdmZTdcdTdmZThcdTdmZWFcdTdmZWJcdTdmZWNcdTdmZWRcdTdmZWZcdTdmZjJcdTdmZjRcdTdmZjVcdTdmZjZcdTdmZjdcdTdmZjhcdTdmZjlcdTdmZmFcdTdmZmRcdTdmZmVcdTdmZmZc'@;
put 'dTgwMDJcdTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRcdTgwMWVcdTgwMWZcdTgwMjFcdTgwMjNcdTgwMjRcdTgwMmJcdTgwMmNcdTgwMmRcdTgwMmVcdTgwMmZcdTgwMzBcdTgwMzJcdTgwMzRcdTgwMzlcdTgwM2FcdTgw'@;
put 'M2NcdTgwM2VcdTgwNDBcdTgwNDFcdTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgwNDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgwNTFcdTgwNTNcdTgwNTVcdTgwNTZcdTgwNTdcdWZmZmRcdTgwNTlcdTgwNWJcdTgwNWNcdTgwNWRcdTgwNWVcdTgwNWZcdTgwNjBcdTgwNjFcdTgwNjJcdTgwNjNc'@;
put 'dTgwNjRcdTgwNjVcdTgwNjZcdTgwNjdcdTgwNjhcdTgwNmJcdTgwNmNcdTgwNmRcdTgwNmVcdTgwNmZcdTgwNzBcdTgwNzJcdTgwNzNcdTgwNzRcdTgwNzVcdTgwNzZcdTgwNzdcdTgwNzhcdTgwNzlcdTgwN2FcdTgwN2JcdTgwN2NcdTgwN2RcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5'@;
put 'N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVc'@;
put 'dTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0'@;
put 'MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJc'@;
put 'dTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk0XVttXV09NDk2NjQrbSxGWzQ5NjY0K21dPXhbMTk0XVttXSk7Zm9y'@;
put 'KHhbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDll'@;
put 'XHU4MGEzXHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4'@;
put 'MGUwXHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFm'@;
put 'XHU4MTIwXHU4MTIxXHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4'@;
put 'MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQx'@;
put 'XHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2'@;
put 'Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFm'@;
put 'XHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NV1bbV1dPTQ5OTIwK20sRls0OTkyMCttXT14'@;
put 'WzE5NV1bbV0pO2Zvcih4WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0MFx1ODE0MVx1ODE0Mlx1ODE0M1x1ODE0NFx1ODE0NVx1ODE0N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1'@;
put 'OFx1ODE1Ylx1ODE1Y1x1ODE1ZFx1ODE1ZVx1ODE1Zlx1ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4M1x1ODE4NFx1ODE4NVx1ODE4Nlx1ODE4N1x1'@;
put 'ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5Mlx1ODE5M1x1ODE5NFx1ODE5NVx1ODE5Nlx1ODE5N1x1ODE5OVx1ODE5YVx1ODE5ZVx1ODE5Zlx1ODFhMFx1ODFhMVx1ODFhMlx1ODFhNFx1ODFhNVx1ZmZmZFx1ODFhN1x1ODFhOVx1ODFhYlx1ODFhY1x1ODFhZFx1ODFh'@;
put 'ZVx1ODFhZlx1ODFiMFx1ODFiMVx1ODFiMlx1ODFiNFx1ODFiNVx1ODFiNlx1ODFiN1x1ODFiOFx1ODFiOVx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZFx1ODFjZVx1ODFjZlx1ODFkMFx1ODFkMVx1ODFkMlx1ODFkM1x1'@;
put 'NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJk'@;
put 'Zlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1'@;
put 'NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0'@;
put 'Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTZdW21dXT01MDE3Nitt'@;
put 'LEZbNTAxNzYrbV09eFsxOTZdW21dKTtmb3IoeFsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxZDRcdTgxZDVcdTgxZDZcdTgxZDdcdTgxZDhcdTgxZDlcdTgxZGFcdTgxZGJcdTgxZGNcdTgxZGRcdTgxZGVcdTgxZGZcdTgx'@;
put 'ZTBcdTgxZTFcdTgxZTJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgxZWJcdTgxZWVcdTgxZWZcdTgxZjBcdTgxZjFcdTgxZjJcdTgxZjVcdTgxZjZcdTgxZjdcdTgxZjhcdTgxZjlcdTgxZmFcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDdcdTgyMDhcdTgyMDlcdTgyMGFcdTgyMGJc'@;
put 'dTgyMGVcdTgyMGZcdTgyMTFcdTgyMTNcdTgyMTVcdTgyMTZcdTgyMTdcdTgyMThcdTgyMTlcdTgyMWFcdTgyMWRcdTgyMjBcdTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlcdTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2RcdTgyM2ZcdWZmZmRcdTgyNDBcdTgyNDFcdTgyNDJcdTgy'@;
put 'NDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgyNGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgyNTBcdTgyNTFcdTgyNTJcdTgyNTNcdTgyNTRcdTgyNTVcdTgyNTZcdTgyNTdcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjBcdTgyNjFcdTgyNjJcdTgyNjNcdTgyNjRcdTgyNjVcdTgyNjZc'@;
put 'dTgyNjdcdTgyNjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1'@;
put 'ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFc'@;
put 'dTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdi'@;
put 'ZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk3'@;
put 'XVttXV09NTA0MzIrbSxGWzUwNDMyK21dPXhbMTk3XVttXSk7Zm9yKHhbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4'@;
put 'MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJm'@;
put 'XHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4'@;
put 'MmZjXHU4MmZkXHU4MmZlXHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMw'@;
put 'XHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4'@;
put 'MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0'@;
put 'XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5'@;
put 'YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOThdW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihhZVt4WzE5OF1bbV1dPTUwNjg4K20sRls1MDY4OCttXT14WzE5OF1bbV0pO2Zvcih4WzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YVx1'@;
put 'ODM0Ylx1ODM0Y1x1ODM0ZFx1ODM0ZVx1ODM1M1x1ODM1NVx1ODM1Nlx1ODM1N1x1ODM1OFx1ODM1OVx1ODM1ZFx1ODM2Mlx1ODM3MFx1ODM3MVx1ODM3Mlx1ODM3M1x1ODM3NFx1ODM3NVx1ODM3Nlx1ODM3OVx1ODM3YVx1ODM3ZVx1ODM3Zlx1ODM4MFx1ODM4MVx1ODM4Mlx1ODM4M1x1ODM4'@;
put 'NFx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMVx1ODNhMlx1ODNhM1x1ODNhNFx1ODNhNVx1ODNhNlx1ODNhN1x1ODNhY1x1ODNhZFx1ODNhZVx1'@;
put 'ZmZmZFx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNl'@;
put 'NFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1'@;
put 'NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMw'@;
put 'NFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1'@;
put 'NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk5XVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTldW21dXT01MDk0NCttLEZbNTA5NDQrbV09eFsxOTldW21dKTtmb3IoeFsyMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZWVcdTgzZWZcdTgzZjNcdTgzZjRcdTgzZjVcdTgzZjZc'@;
put 'dTgzZjdcdTgzZmFcdTgzZmJcdTgzZmNcdTgzZmVcdTgzZmZcdTg0MDBcdTg0MDJcdTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlcdTg0MGFcdTg0MTBcdTg0MTJcdTg0MTNcdTg0MTRcdTg0MTVcdTg0MTZcdTg0MTdcdTg0MTlcdTg0MWFcdTg0MWJcdTg0MWVcdTg0MWZcdTg0MjBcdTg0MjFcdTg0'@;
put 'MjJcdTg0MjNcdTg0MjlcdTg0MmFcdTg0MmJcdTg0MmNcdTg0MmRcdTg0MmVcdTg0MmZcdTg0MzBcdTg0MzJcdTg0MzNcdTg0MzRcdTg0MzVcdTg0MzZcdTg0MzdcdTg0MzlcdTg0M2FcdTg0M2JcdTg0M2VcdTg0M2ZcdTg0NDBcdTg0NDFcdTg0NDJcdTg0NDNcdTg0NDRcdTg0NDVcdTg0NDdc'@;
put 'dTg0NDhcdTg0NDlcdWZmZmRcdTg0NGFcdTg0NGJcdTg0NGNcdTg0NGRcdTg0NGVcdTg0NGZcdTg0NTBcdTg0NTJcdTg0NTNcdTg0NTRcdTg0NTVcdTg0NTZcdTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjRcdTg0NjVcdTg0NjZcdTg0NjdcdTg0NjhcdTg0NmFcdTg0'@;
put 'NmVcdTg0NmZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0N2NcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2Mzhc'@;
put 'dTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThi'@;
put 'YTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRc'@;
put 'dTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDBdLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT14WzIwMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAwXVttXV09NTEyMDArbSxGWzUxMjAwK21dPXhbMjAwXVttXSk7Zm9yKHhbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgw'@;
put 'XHU4NDgxXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4'@;
put 'NGE3XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNm'@;
put 'XHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4'@;
put 'NGY2XHU4NGY3XHU4NGY4XHU4NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQw'@;
put 'XHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4'@;
put 'ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJl'@;
put 'XHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAxXS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09eFsyMDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMV1bbV1dPTUxNDU2K20sRls1MTQ1NittXT14WzIwMV1bbV0pO2Zvcih4WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUwM1x1ODUw'@;
put 'NFx1ODUwNVx1ODUwNlx1ODUwN1x1ODUwOFx1ODUwOVx1ODUwYVx1ODUwYlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMlx1ODUyM1x1ODUyNFx1ODUyNVx1ODUyNlx1'@;
put 'ODUyN1x1ODUyOFx1ODUyOVx1ODUyYVx1ODUyZFx1ODUyZVx1ODUyZlx1ODUzMFx1ODUzMVx1ODUzMlx1ODUzM1x1ODUzNFx1ODUzNVx1ODUzNlx1ODUzZVx1ODUzZlx1ODU0MFx1ODU0MVx1ODU0Mlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0Ylx1ODU0Y1x1ODU0ZFx1ODU0ZVx1ODU0'@;
put 'Zlx1ODU1MFx1ODU1MVx1ODU1Mlx1ODU1M1x1ODU1NFx1ODU1NVx1ZmZmZFx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1Zlx1ODU2MFx1ODU2MVx1ODU2Mlx1ODU2M1x1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OVx1ODU2YVx1ODU2Ylx1ODU2Y1x1ODU2ZFx1ODU2ZVx1'@;
put 'ODU2Zlx1ODU3MFx1ODU3MVx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1Nzdm'@;
put 'M1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1'@;
put 'NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIx'@;
put 'Mlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLG09'@;
put 'MDttIT14WzIwMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDJdW21dXT01MTcxMittLEZbNTE3MTIrbV09eFsyMDJdW21dKTtmb3IoeFsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTg1ODJcdTg1ODNcdTg1ODZcdTg1ODhcdTg1ODlcdTg1OGFcdTg1OGJcdTg1OGNcdTg1OGRcdTg1OGVcdTg1OTBcdTg1OTFcdTg1OTJcdTg1OTNcdTg1OTRcdTg1OTVcdTg1OTZcdTg1OTdcdTg1OThcdTg1OTlcdTg1OWFcdTg1OWRcdTg1OWVcdTg1OWZcdTg1YTBcdTg1YTFcdTg1YTJc'@;
put 'dTg1YTNcdTg1YTVcdTg1YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRcdTg1YjFcdTg1YjJcdTg1YjNcdTg1YjRcdTg1YjVcdTg1YjZcdTg1YjhcdTg1YmFcdTg1YmJcdTg1YmNcdTg1YmRcdTg1YmVcdTg1YmZcdTg1YzBcdTg1YzJcdTg1YzNcdTg1YzRcdTg1YzVcdTg1YzZcdTg1'@;
put 'YzdcdTg1YzhcdTg1Y2FcdTg1Y2JcdTg1Y2NcdTg1Y2RcdTg1Y2VcdTg1ZDFcdTg1ZDJcdWZmZmRcdTg1ZDRcdTg1ZDZcdTg1ZDdcdTg1ZDhcdTg1ZDlcdTg1ZGFcdTg1ZGJcdTg1ZGRcdTg1ZGVcdTg1ZGZcdTg1ZTBcdTg1ZTFcdTg1ZTJcdTg1ZTNcdTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThc'@;
put 'dTg1ZWFcdTg1ZWJcdTg1ZWNcdTg1ZWRcdTg1ZWVcdTg1ZWZcdTg1ZjBcdTg1ZjFcdTg1ZjJcdTg1ZjNcdTg1ZjRcdTg1ZjVcdTg1ZjZcdTg1ZjdcdTg1ZjhcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThj'@;
put 'MDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNc'@;
put 'dTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2'@;
put 'N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxtPTA7bSE9eFsyMDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAzXVttXV09NTE5NjgrbSxGWzUxOTY4K21dPXhbMjAzXVttXSk7Zm9yKHhbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1'@;
put 'XHU4NjE3XHU4NjE4XHU4NjE5XHU4NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4'@;
put 'NjM0XHU4NjM1XHU4NjM2XHU4NjM3XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2'@;
put 'XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1'@;
put 'OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEw'@;
put 'XHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5'@;
put 'ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJj'@;
put 'XHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNF1bbV1dPTUyMjI0K20sRls1MjIyNCttXT14WzIwNF1bbV0pO2Zvcih4WzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3Mlx1ODY3M1x1ODY3NFx1ODY3NVx1ODY3Nlx1ODY3N1x1ODY3OFx1ODY4M1x1ODY4NFx1ODY4NVx1ODY4Nlx1ODY4N1x1ODY4OFx1ODY4OVx1ODY4ZVx1ODY4Zlx1ODY5MFx1ODY5MVx1ODY5Mlx1ODY5'@;
put 'NFx1ODY5Nlx1ODY5N1x1ODY5OFx1ODY5OVx1ODY5YVx1ODY5Ylx1ODY5ZVx1ODY5Zlx1ODZhMFx1ODZhMVx1ODZhMlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYlx1ODZiY1x1ODZiZFx1ODZiZVx1ODZiZlx1ODZjMVx1'@;
put 'ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkY1x1ZmZmZFx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZm'@;
put 'NVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1'@;
put 'Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0'@;
put 'ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1'@;
put 'ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1Njcx'@;
put 'Ylx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDVdW21dXT01MjQ4MCttLEZbNTI0ODArbV09eFsyMDVdW21dKTtmb3IoeFsyMDZdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3MTlcdTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBcdTg3MjRcdTg3MjZcdTg3MjdcdTg3MjhcdTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3'@;
put 'MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3NDBcdTg3NDFcdTg3NDJcdTg3NDNcdTg3NDRcdTg3NDVcdTg3NDZcdTg3NGFcdTg3NGJcdTg3NGRcdTg3NGZcdTg3NTBcdTg3NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZcdTg3NThcdTg3NWFcdTg3NWJcdTg3NWNcdTg3NWRcdTg3NWVcdTg3NWZc'@;
put 'dTg3NjFcdTg3NjJcdTg3NjZcdTg3NjdcdTg3NjhcdTg3NjlcdTg3NmFcdTg3NmJcdTg3NmNcdTg3NmRcdTg3NmZcdTg3NzFcdTg3NzJcdTg3NzNcdTg3NzVcdWZmZmRcdTg3NzdcdTg3NzhcdTg3NzlcdTg3N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3'@;
put 'OGFcdTg3OGNcdTg3OGVcdTg3OGZcdTg3OTBcdTg3OTFcdTg3OTJcdTg3OTRcdTg3OTVcdTg3OTZcdTg3OThcdTg3OTlcdTg3OWFcdTg3OWJcdTg3OWNcdTg3OWRcdTg3OWVcdTg3YTBcdTg3YTFcdTg3YTJcdTg3YTNcdTg3YTRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVc'@;
put 'dTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZl'@;
put 'MjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJc'@;
put 'dTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3'@;
put 'ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA2XVttXV09NTI3MzYrbSxGWzUyNzM2K21dPXhbMjA2XVttXSk7Zm9yKHhbMjA3XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4'@;
put 'N2MxXHU4N2MyXHU4N2MzXHU4N2M0XHU4N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0'@;
put 'XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2YxXHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4'@;
put 'ODA1XHU4ODA2XHU4ODA3XHU4ODA4XHU4ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5'@;
put 'XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0'@;
put 'ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmEx'@;
put 'XHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1'@;
put 'MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwN11bbV1dPTUyOTkyK20sRls1Mjk5MittXT14WzIwN11bbV0p'@;
put 'O2Zvcih4WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyNFx1ODgyNVx1ODgyNlx1ODgyN1x1ODgyOFx1ODgyOVx1ODgyYVx1ODgyYlx1ODgyY1x1ODgyZFx1ODgyZVx1ODgyZlx1ODgzMFx1ODgzMVx1ODgzM1x1ODgzNFx1'@;
put 'ODgzNVx1ODgzNlx1ODgzN1x1ODgzOFx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1ODg0Nlx1ODg0N1x1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg0Zlx1ODg1MFx1ODg1MVx1ODg1Mlx1ODg1M1x1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1'@;
put 'YVx1ODg1Ylx1ODg1Y1x1ODg1ZFx1ODg1ZVx1ODg1Zlx1ODg2MFx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YVx1ZmZmZFx1ODg3Ylx1ODg3Y1x1ODg4MFx1ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1'@;
put 'ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5N1x1ODg5OFx1ODg5OVx1ODg5YVx1ODg5Ylx1ODg5ZFx1ODg5ZVx1ODg5Zlx1ODhhMFx1ODhhMVx1ODhhM1x1ODhhNVx1ODhhNlx1ODhhN1x1ODhhOFx1ODhhOVx1ODhhYVx1NWMwZlx1NWI1'@;
put 'ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1'@;
put 'ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMw'@;
put 'OFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1'@;
put 'N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDhdW21dXT01MzI0OCttLEZbNTMyNDgr'@;
put 'bV09eFsyMDhdW21dKTtmb3IoeFsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4YWNcdTg4YWVcdTg4YWZcdTg4YjBcdTg4YjJcdTg4YjNcdTg4YjRcdTg4YjVcdTg4YjZcdTg4YjhcdTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRc'@;
put 'dTg4YmVcdTg4YmZcdTg4YzBcdTg4YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2FcdTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4Y2ZcdTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4ZDdcdTg4ZGFcdTg4ZGJcdTg4ZGNcdTg4ZGRcdTg4ZGVcdTg4ZTBcdTg4ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTlcdTg4'@;
put 'ZWFcdTg4ZWJcdTg4ZWNcdTg4ZWRcdTg4ZWVcdTg4ZWZcdTg4ZjJcdTg4ZjVcdTg4ZjZcdTg4ZjdcdTg4ZmFcdTg4ZmJcdTg4ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDNcdTg5MDRcdTg5MDVcdTg5MDZcdTg5MDdcdTg5MDhcdWZmZmRcdTg5MDlcdTg5MGJcdTg5MGNcdTg5MGRcdTg5MGVc'@;
put 'dTg5MGZcdTg5MTFcdTg5MTRcdTg5MTVcdTg5MTZcdTg5MTdcdTg5MThcdTg5MWNcdTg5MWRcdTg5MWVcdTg5MWZcdTg5MjBcdTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5MmZcdTg5MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5'@;
put 'MzdcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZc'@;
put 'dTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcw'@;
put 'OGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFc'@;
put 'dTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA5XVttXV09NTM1'@;
put 'MDQrbSxGWzUzNTA0K21dPXhbMjA5XVttXSk7Zm9yKHhbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1'@;
put 'XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4OTQ5XHU4OTRhXHU4OTRiXHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4'@;
put 'OTYzXHU4OTY0XHU4OTY1XHU4OTY3XHU4OTY4XHU4OTY5XHU4OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgw'@;
put 'XHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3XHU4OTg4XHU4OTg5XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4'@;
put 'OTlmXHU4OWEwXHU4OWExXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFj'@;
put 'XHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4'@;
put 'MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1'@;
put 'XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4'@;
put 'WzIxMF1bbV1dPTUzNzYwK20sRls1Mzc2MCttXT14WzIxMF1bbV0pO2Zvcih4WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODlhMlx1ODlhM1x1ODlhNFx1ODlhNVx1ODlhNlx1ODlhN1x1ODlhOFx1ODlhOVx1ODlhYVx1ODlh'@;
put 'Ylx1ODlhY1x1ODlhZFx1ODlhZVx1ODlhZlx1ODliMFx1ODliMVx1ODliMlx1ODliM1x1ODliNFx1ODliNVx1ODliNlx1ODliN1x1ODliOFx1ODliOVx1ODliYVx1ODliYlx1ODliY1x1ODliZFx1ODliZVx1ODliZlx1ODljMFx1ODljM1x1ODljZFx1ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1'@;
put 'ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNFx1ODlmNVx1ODlmNlx1ODlmN1x1ODlmOFx1ODlmOVx1ODlmYVx1ZmZmZFx1ODlm'@;
put 'Ylx1ODlmY1x1ODlmZFx1ODlmZVx1ODlmZlx1OGEwMVx1OGEwMlx1OGEwM1x1OGEwNFx1OGEwNVx1OGEwNlx1OGEwOFx1OGEwOVx1OGEwYVx1OGEwYlx1OGEwY1x1OGEwZFx1OGEwZVx1OGEwZlx1OGExMFx1OGExMVx1OGExMlx1OGExM1x1OGExNFx1OGExNVx1OGExNlx1OGExN1x1OGExOFx1'@;
put 'OGExOVx1OGExYVx1OGExYlx1OGExY1x1OGExZFx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFj'@;
put 'M1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1'@;
put 'NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4'@;
put 'N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjExXVttXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoYWVbeFsyMTFdW21dXT01NDAxNittLEZbNTQwMTYrbV09eFsyMTFdW21dKTtmb3IoeFsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhMWVcdThhMWZcdThhMjBcdThhMjFcdThhMjJcdThhMjNcdThhMjRcdThh'@;
put 'MjVcdThhMjZcdThhMjdcdThhMjhcdThhMjlcdThhMmFcdThhMmJcdThhMmNcdThhMmRcdThhMmVcdThhMmZcdThhMzBcdThhMzFcdThhMzJcdThhMzNcdThhMzRcdThhMzVcdThhMzZcdThhMzdcdThhMzhcdThhMzlcdThhM2FcdThhM2JcdThhM2NcdThhM2RcdThhM2ZcdThhNDBcdThhNDFc'@;
put 'dThhNDJcdThhNDNcdThhNDRcdThhNDVcdThhNDZcdThhNDdcdThhNDlcdThhNGFcdThhNGJcdThhNGNcdThhNGRcdThhNGVcdThhNGZcdThhNTBcdThhNTFcdThhNTJcdThhNTNcdThhNTRcdThhNTVcdThhNTZcdThhNTdcdThhNThcdThhNTlcdThhNWFcdThhNWJcdThhNWNcdThhNWRcdThh'@;
put 'NWVcdWZmZmRcdThhNWZcdThhNjBcdThhNjFcdThhNjJcdThhNjNcdThhNjRcdThhNjVcdThhNjZcdThhNjdcdThhNjhcdThhNjlcdThhNmFcdThhNmJcdThhNmNcdThhNmRcdThhNmVcdThhNmZcdThhNzBcdThhNzFcdThhNzJcdThhNzNcdThhNzRcdThhNzVcdThhNzZcdThhNzdcdThhNzhc'@;
put 'dThhN2FcdThhN2JcdThhN2NcdThhN2RcdThhN2VcdThhN2ZcdThhODBcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdm'@;
put 'MThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVc'@;
put 'dTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkw'@;
put 'MjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIx'@;
put 'Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEyXVttXV09NTQyNzIrbSxGWzU0MjcyK21dPXhbMjEyXVttXSk7Zm9yKHhbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4'@;
put 'YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4YThjXHU4YThkXHU4YThlXHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0'@;
put 'XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4XHU4YWE5XHU4YWFhXHU4YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4'@;
put 'YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4YWMzXHU4YWM0XHU4YWM1XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRh'@;
put 'XHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRlXHU4YWRmXHU4YWUwXHU4YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3'@;
put 'Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0'@;
put 'XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4'@;
put 'ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEzXS5sZW5ndGg7Kytt'@;
put 'KTY1NTMzIT09eFsyMTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxM11bbV1dPTU0NTI4K20sRls1NDUyOCttXT14WzIxM11bbV0pO2Zvcih4WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlNFx1OGFlNVx1OGFlNlx1'@;
put 'OGFlN1x1OGFlOFx1OGFlOVx1OGFlYVx1OGFlYlx1OGFlY1x1OGFlZFx1OGFlZVx1OGFlZlx1OGFmMFx1OGFmMVx1OGFmMlx1OGFmM1x1OGFmNFx1OGFmNVx1OGFmNlx1OGFmN1x1OGFmOFx1OGFmOVx1OGFmYVx1OGFmYlx1OGFmY1x1OGFmZFx1OGFmZVx1OGFmZlx1OGIwMFx1OGIwMVx1OGIw'@;
put 'Mlx1OGIwM1x1OGIwNFx1OGIwNVx1OGIwNlx1OGIwOFx1OGIwOVx1OGIwYVx1OGIwYlx1OGIwY1x1OGIwZFx1OGIwZVx1OGIwZlx1OGIxMFx1OGIxMVx1OGIxMlx1OGIxM1x1OGIxNFx1OGIxNVx1OGIxNlx1OGIxN1x1OGIxOFx1OGIxOVx1OGIxYVx1OGIxYlx1OGIxY1x1OGIxZFx1OGIxZVx1'@;
put 'OGIxZlx1OGIyMFx1OGIyMVx1OGIyMlx1OGIyM1x1ZmZmZFx1OGIyNFx1OGIyNVx1OGIyN1x1OGIyOFx1OGIyOVx1OGIyYVx1OGIyYlx1OGIyY1x1OGIyZFx1OGIyZVx1OGIyZlx1OGIzMFx1OGIzMVx1OGIzMlx1OGIzM1x1OGIzNFx1OGIzNVx1OGIzNlx1OGIzN1x1OGIzOFx1OGIzOVx1OGIz'@;
put 'YVx1OGIzYlx1OGIzY1x1OGIzZFx1OGIzZVx1OGIzZlx1OGI0MFx1OGI0MVx1OGI0Mlx1OGI0M1x1OGI0NFx1OGI0NVx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1'@;
put 'NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVk'@;
put 'NFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1'@;
put 'OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIx'@;
put 'NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTRdW21dXT01NDc4NCttLEZbNTQ3ODQrbV09eFsyMTRdW21dKTtmb3IoeFsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNDZc'@;
put 'dThiNDdcdThiNDhcdThiNDlcdThiNGFcdThiNGJcdThiNGNcdThiNGRcdThiNGVcdThiNGZcdThiNTBcdThiNTFcdThiNTJcdThiNTNcdThiNTRcdThiNTVcdThiNTZcdThiNTdcdThiNThcdThiNTlcdThiNWFcdThiNWJcdThiNWNcdThiNWRcdThiNWVcdThiNWZcdThiNjBcdThiNjFcdThi'@;
put 'NjJcdThiNjNcdThiNjRcdThiNjVcdThiNjdcdThiNjhcdThiNjlcdThiNmFcdThiNmJcdThiNmRcdThiNmVcdThiNmZcdThiNzBcdThiNzFcdThiNzJcdThiNzNcdThiNzRcdThiNzVcdThiNzZcdThiNzdcdThiNzhcdThiNzlcdThiN2FcdThiN2JcdThiN2NcdThiN2RcdThiN2VcdThiN2Zc'@;
put 'dThiODBcdThiODFcdThiODJcdThiODNcdThiODRcdThiODVcdThiODZcdWZmZmRcdThiODdcdThiODhcdThiODlcdThiOGFcdThiOGJcdThiOGNcdThiOGRcdThiOGVcdThiOGZcdThiOTBcdThiOTFcdThiOTJcdThiOTNcdThiOTRcdThiOTVcdThiOTZcdThiOTdcdThiOThcdThiOTlcdThi'@;
put 'OWFcdThiOWJcdThiOWNcdThiOWRcdThiOWVcdThiOWZcdThiYWNcdThiYjFcdThiYmJcdThiYzdcdThiZDBcdThiZWFcdThjMDlcdThjMWVcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4Njlc'@;
put 'dTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThk'@;
put 'NDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2Zc'@;
put 'dTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxtPTA7bSE9eFsyMTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE1XVttXV09NTUwNDArbSxGWzU1MDQwK21dPXhbMjE1XVttXSk7Zm9yKHhbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4YzNiXHU4YzNjXHU4YzNkXHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4'@;
put 'YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVkXHU4YzVlXHU4YzVmXHU4YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4Yzdj'@;
put 'XHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4YzgxXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4'@;
put 'YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2EyXHU4Y2EzXHU4Y2E0XHU4Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5'@;
put 'XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1'@;
put 'MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1Mjgy'@;
put 'XHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNl1bbV1dPTU1Mjk2K20sRls1NTI5NittXT14WzIxNl1bbV0pO2Zvcih4WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhZVx1OGNhZlx1OGNiMFx1OGNiMVx1OGNiMlx1OGNiM1x1OGNiNFx1OGNiNVx1OGNiNlx1OGNiN1x1OGNiOFx1OGNiOVx1OGNiYVx1OGNiYlx1OGNiY1x1OGNiZFx1OGNiZVx1OGNiZlx1OGNjMFx1OGNjMVx1OGNjMlx1OGNjM1x1OGNjNFx1OGNjNVx1'@;
put 'OGNjNlx1OGNjN1x1OGNjOFx1OGNjOVx1OGNjYVx1OGNjYlx1OGNjY1x1OGNjZFx1OGNjZVx1OGNjZlx1OGNkMFx1OGNkMVx1OGNkMlx1OGNkM1x1OGNkNFx1OGNkNVx1OGNkNlx1OGNkN1x1OGNkOFx1OGNkOVx1OGNkYVx1OGNkYlx1OGNkY1x1OGNkZFx1OGNkZVx1OGNkZlx1OGNlMFx1OGNl'@;
put 'MVx1OGNlMlx1OGNlM1x1OGNlNFx1OGNlNVx1OGNlNlx1OGNlN1x1OGNlOFx1OGNlOVx1OGNlYVx1OGNlYlx1OGNlY1x1ZmZmZFx1OGNlZFx1OGNlZVx1OGNlZlx1OGNmMFx1OGNmMVx1OGNmMlx1OGNmM1x1OGNmNFx1OGNmNVx1OGNmNlx1OGNmN1x1OGNmOFx1OGNmOVx1OGNmYVx1OGNmYlx1'@;
put 'OGNmY1x1OGNmZFx1OGNmZVx1OGNmZlx1OGQwMFx1OGQwMVx1OGQwMlx1OGQwM1x1OGQwNFx1OGQwNVx1OGQwNlx1OGQwN1x1OGQwOFx1OGQwOVx1OGQwYVx1OGQwYlx1OGQwY1x1OGQwZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4'@;
put 'Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1'@;
put 'NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3'@;
put 'NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1'@;
put 'NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTddW21dXT01NTU1MittLEZbNTU1NTIrbV09eFsyMTddW21dKTtmb3IoeFsyMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMGVcdThkMGZcdThkMTBcdThkMTFcdThkMTJcdThkMTNcdThkMTRcdThkMTVcdThkMTZcdThkMTdcdThkMThcdThkMTlcdThkMWFcdThkMWJcdThkMWNcdThkMjBcdThkNTFcdThkNTJcdThkNTdcdThkNWZcdThkNjVcdThkNjhc'@;
put 'dThkNjlcdThkNmFcdThkNmNcdThkNmVcdThkNmZcdThkNzFcdThkNzJcdThkNzhcdThkNzlcdThkN2FcdThkN2JcdThkN2NcdThkN2RcdThkN2VcdThkN2ZcdThkODBcdThkODJcdThkODNcdThkODZcdThkODdcdThkODhcdThkODlcdThkOGNcdThkOGRcdThkOGVcdThkOGZcdThkOTBcdThk'@;
put 'OTJcdThkOTNcdThkOTVcdThkOTZcdThkOTdcdThkOThcdThkOTlcdThkOWFcdThkOWJcdThkOWNcdThkOWRcdThkOWVcdThkYTBcdThkYTFcdWZmZmRcdThkYTJcdThkYTRcdThkYTVcdThkYTZcdThkYTdcdThkYThcdThkYTlcdThkYWFcdThkYWJcdThkYWNcdThkYWRcdThkYWVcdThkYWZc'@;
put 'dThkYjBcdThkYjJcdThkYjZcdThkYjdcdThkYjlcdThkYmJcdThkYmRcdThkYzBcdThkYzFcdThkYzJcdThkYzVcdThkYzdcdThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJcdThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThi'@;
put 'YWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZc'@;
put 'dThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThj'@;
put 'MzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFc'@;
put 'dTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE4XVttXV09NTU4MDgrbSxGWzU1ODA4K21dPXhbMjE4XVttXSk7Zm9yKHhbMjE5XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZl'@;
put 'XHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAzXHU4ZTA0XHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4'@;
put 'ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0'@;
put 'XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVhXHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYxXHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5'@;
put 'MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZm'@;
put 'XHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1'@;
put 'NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2Qy'@;
put 'XHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOV1bbV1dPTU2MDY0K20sRls1NjA2NCttXT14WzIxOV1bbV0pO2Zvcih4WzIy'@;
put 'MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU3M1x1OGU3NVx1OGU3N1x1OGU3OFx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OFx1OGU4OVx1OGU4YVx1OGU4'@;
put 'Ylx1OGU4Y1x1OGU4ZFx1OGU4ZVx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NVx1OGU5Nlx1OGU5N1x1OGU5OFx1OGU5OVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5Zlx1OGVhMFx1OGVhMVx1OGVhMlx1OGVhM1x1OGVhNFx1OGVhNVx1OGVhNlx1OGVhN1x1OGVhOFx1OGVhOVx1OGVhYVx1OGVhZFx1'@;
put 'OGVhZVx1OGViMFx1OGViMVx1OGViM1x1OGViNFx1OGViNVx1OGViNlx1OGViN1x1OGViOFx1OGViOVx1OGViYlx1OGViY1x1OGViZFx1OGViZVx1OGViZlx1OGVjMFx1OGVjMVx1OGVjMlx1ZmZmZFx1OGVjM1x1OGVjNFx1OGVjNVx1OGVjNlx1OGVjN1x1OGVjOFx1OGVjOVx1OGVjYVx1OGVj'@;
put 'Ylx1OGVjY1x1OGVjZFx1OGVjZlx1OGVkMFx1OGVkMVx1OGVkMlx1OGVkM1x1OGVkNFx1OGVkNVx1OGVkNlx1OGVkN1x1OGVkOFx1OGVkOVx1OGVkYVx1OGVkYlx1OGVkY1x1OGVkZFx1OGVkZVx1OGVkZlx1OGVlMFx1OGVlMVx1OGVlMlx1OGVlM1x1OGVlNFx1NTgwYlx1NTgwZFx1NTdmZFx1'@;
put 'NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJi'@;
put 'OFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1'@;
put 'ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1'@;
put 'Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjBdW21dXT01NjMyMCttLEZbNTYzMjArbV09eFsyMjBd'@;
put 'W21dKTtmb3IoeFsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZTVcdThlZTZcdThlZTdcdThlZThcdThlZTlcdThlZWFcdThlZWJcdThlZWNcdThlZWRcdThlZWVcdThlZWZcdThlZjBcdThlZjFcdThlZjJcdThlZjNcdThl'@;
put 'ZjRcdThlZjVcdThlZjZcdThlZjdcdThlZjhcdThlZjlcdThlZmFcdThlZmJcdThlZmNcdThlZmRcdThlZmVcdThlZmZcdThmMDBcdThmMDFcdThmMDJcdThmMDNcdThmMDRcdThmMDVcdThmMDZcdThmMDdcdThmMDhcdThmMDlcdThmMGFcdThmMGJcdThmMGNcdThmMGRcdThmMGVcdThmMGZc'@;
put 'dThmMTBcdThmMTFcdThmMTJcdThmMTNcdThmMTRcdThmMTVcdThmMTZcdThmMTdcdThmMThcdThmMTlcdThmMWFcdThmMWJcdThmMWNcdThmMWRcdThmMWVcdThmMWZcdThmMjBcdThmMjFcdThmMjJcdThmMjNcdWZmZmRcdThmMjRcdThmMjVcdThmMjZcdThmMjdcdThmMjhcdThmMjlcdThm'@;
put 'MmFcdThmMmJcdThmMmNcdThmMmRcdThmMmVcdThmMmZcdThmMzBcdThmMzFcdThmMzJcdThmMzNcdThmMzRcdThmMzVcdThmMzZcdThmMzdcdThmMzhcdThmMzlcdThmM2FcdThmM2JcdThmM2NcdThmM2RcdThmM2VcdThmM2ZcdThmNDBcdThmNDFcdThmNDJcdThmNDNcdThmNDRcdTgzNjhc'@;
put 'dTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0'@;
put 'MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFc'@;
put 'dTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0'@;
put 'YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIxXVttXV09NTY1NzYrbSxGWzU2'@;
put 'NTc2K21dPXhbMjIxXVttXSk7Zm9yKHhbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4'@;
put 'ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3XHU4ZjU4XHU4ZjU5XHU4ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEy'@;
put 'XHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4'@;
put 'ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1'@;
put 'XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4'@;
put 'NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3'@;
put 'XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2'@;
put 'M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMl1bbV1d'@;
put 'PTU2ODMyK20sRls1NjgzMittXT14WzIyMl1bbV0pO2Zvcih4WzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyN1x1OTAyOFx1OTAyOVx1OTAyYVx1OTAyYlx1OTAyY1x1'@;
put 'OTAzMFx1OTAzMVx1OTAzMlx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OFx1OTA0OVx1OTA0YVx1OTA0Ylx1OTA0Y1x1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1OVx1OTA1YVx1OTA1Y1x1OTA1ZFx1OTA1'@;
put 'ZVx1OTA1Zlx1OTA2MFx1OTA2MVx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2Zlx1OTA3MFx1OTA3MVx1OTA3Mlx1OTA3M1x1OTA3Nlx1OTA3N1x1OTA3OFx1OTA3OVx1OTA3YVx1OTA3Ylx1OTA3Y1x1OTA3ZVx1OTA4MVx1ZmZmZFx1OTA4NFx1OTA4NVx1'@;
put 'OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4Y1x1OTA4ZFx1OTA4ZVx1OTA4Zlx1OTA5MFx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBiMlx1OTBiN1x1OTBi'@;
put 'Y1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1'@;
put 'NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRi'@;
put 'NFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1'@;
put 'NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIzXVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'YWVbeFsyMjNdW21dXT01NzA4OCttLEZbNTcwODgrbV09eFsyMjNdW21dKTtmb3IoeFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlcdTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJc'@;
put 'dTkwZDRcdTkwZDVcdTkwZDZcdTkwZDhcdTkwZDlcdTkwZGFcdTkwZGVcdTkwZGZcdTkwZTBcdTkwZTNcdTkwZTRcdTkwZTVcdTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBcdTkwZjFcdTkwZjJcdTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkwZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkw'@;
put 'ZmZcdTkxMDBcdTkxMDFcdTkxMDNcdTkxMDVcdTkxMDZcdTkxMDdcdTkxMDhcdTkxMDlcdTkxMGFcdTkxMGJcdTkxMGNcdTkxMGRcdTkxMGVcdTkxMGZcdTkxMTBcdTkxMTFcdTkxMTJcdTkxMTNcdTkxMTRcdTkxMTVcdTkxMTZcdTkxMTdcdTkxMThcdTkxMWFcdTkxMWJcdTkxMWNcdWZmZmRc'@;
put 'dTkxMWRcdTkxMWZcdTkxMjBcdTkxMjFcdTkxMjRcdTkxMjVcdTkxMjZcdTkxMjdcdTkxMjhcdTkxMjlcdTkxMmFcdTkxMmJcdTkxMmNcdTkxMmRcdTkxMmVcdTkxMzBcdTkxMzJcdTkxMzNcdTkxMzRcdTkxMzVcdTkxMzZcdTkxMzdcdTkxMzhcdTkxM2FcdTkxM2JcdTkxM2NcdTkxM2RcdTkx'@;
put 'M2VcdTkxM2ZcdTkxNDBcdTkxNDFcdTkxNDJcdTkxNDRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRc'@;
put 'dTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2'@;
put 'MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdc'@;
put 'dTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNF1bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGFlW3hbMjI0XVttXV09NTczNDQrbSxGWzU3MzQ0K21dPXhbMjI0XVttXSk7Zm9yKHhbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1'@;
put 'XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5'@;
put 'MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5MTljXHU5MTlkXHU5MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5'@;
put 'XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJmXHU5MWMwXHU5MWMxXHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5'@;
put 'MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5MWU0XHU5MWU1XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2Jk'@;
put 'XHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1'@;
put 'ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFk'@;
put 'XHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI1XS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'eFsyMjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNV1bbV1dPTU3NjAwK20sRls1NzYwMCttXT14WzIyNV1bbV0pO2Zvcih4WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlNlx1OTFlN1x1OTFlOFx1OTFlOVx1OTFl'@;
put 'YVx1OTFlYlx1OTFlY1x1OTFlZFx1OTFlZVx1OTFlZlx1OTFmMFx1OTFmMVx1OTFmMlx1OTFmM1x1OTFmNFx1OTFmNVx1OTFmNlx1OTFmN1x1OTFmOFx1OTFmOVx1OTFmYVx1OTFmYlx1OTFmY1x1OTFmZFx1OTFmZVx1OTFmZlx1OTIwMFx1OTIwMVx1OTIwMlx1OTIwM1x1OTIwNFx1OTIwNVx1'@;
put 'OTIwNlx1OTIwN1x1OTIwOFx1OTIwOVx1OTIwYVx1OTIwYlx1OTIwY1x1OTIwZFx1OTIwZVx1OTIwZlx1OTIxMFx1OTIxMVx1OTIxMlx1OTIxM1x1OTIxNFx1OTIxNVx1OTIxNlx1OTIxN1x1OTIxOFx1OTIxOVx1OTIxYVx1OTIxYlx1OTIxY1x1OTIxZFx1OTIxZVx1OTIxZlx1OTIyMFx1OTIy'@;
put 'MVx1OTIyMlx1OTIyM1x1OTIyNFx1ZmZmZFx1OTIyNVx1OTIyNlx1OTIyN1x1OTIyOFx1OTIyOVx1OTIyYVx1OTIyYlx1OTIyY1x1OTIyZFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzMVx1OTIzMlx1OTIzM1x1OTIzNFx1OTIzNVx1OTIzNlx1OTIzN1x1OTIzOFx1OTIzOVx1OTIzYVx1OTIzYlx1'@;
put 'OTIzY1x1OTIzZFx1OTIzZVx1OTIzZlx1OTI0MFx1OTI0MVx1OTI0Mlx1OTI0M1x1OTI0NFx1OTI0NVx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2'@;
put 'MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1'@;
put 'OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZm'@;
put 'ZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNl0ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PXhbMjI2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjZdW21dXT01Nzg1NittLEZbNTc4NTYrbV09eFsyMjZdW21dKTtmb3IoeFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyNDZcdTkyNDdcdTky'@;
put 'NDhcdTkyNDlcdTkyNGFcdTkyNGJcdTkyNGNcdTkyNGRcdTkyNGVcdTkyNGZcdTkyNTBcdTkyNTFcdTkyNTJcdTkyNTNcdTkyNTRcdTkyNTVcdTkyNTZcdTkyNTdcdTkyNThcdTkyNTlcdTkyNWFcdTkyNWJcdTkyNWNcdTkyNWRcdTkyNWVcdTkyNWZcdTkyNjBcdTkyNjFcdTkyNjJcdTkyNjNc'@;
put 'dTkyNjRcdTkyNjVcdTkyNjZcdTkyNjdcdTkyNjhcdTkyNjlcdTkyNmFcdTkyNmJcdTkyNmNcdTkyNmRcdTkyNmVcdTkyNmZcdTkyNzBcdTkyNzFcdTkyNzJcdTkyNzNcdTkyNzVcdTkyNzZcdTkyNzdcdTkyNzhcdTkyNzlcdTkyN2FcdTkyN2JcdTkyN2NcdTkyN2RcdTkyN2VcdTkyN2ZcdTky'@;
put 'ODBcdTkyODFcdTkyODJcdTkyODNcdTkyODRcdTkyODVcdWZmZmRcdTkyODZcdTkyODdcdTkyODhcdTkyODlcdTkyOGFcdTkyOGJcdTkyOGNcdTkyOGRcdTkyOGZcdTkyOTBcdTkyOTFcdTkyOTJcdTkyOTNcdTkyOTRcdTkyOTVcdTkyOTZcdTkyOTdcdTkyOThcdTkyOTlcdTkyOWFcdTkyOWJc'@;
put 'dTkyOWNcdTkyOWRcdTkyOWVcdTkyOWZcdTkyYTBcdTkyYTFcdTkyYTJcdTkyYTNcdTkyYTRcdTkyYTVcdTkyYTZcdTkyYTdcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYw'@;
put 'YzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNc'@;
put 'dTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZj'@;
put 'OGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'eFsyMjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI3XVttXV09NTgxMTIrbSxGWzU4MTEyK21dPXhbMjI3XVttXSk7Zm9yKHhbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5'@;
put 'MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFmXHU5MmIwXHU5MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0'@;
put 'XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5MmNjXHU5MmNkXHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5'@;
put 'MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3XHU5MmU4XHVmZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZi'@;
put 'XHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5MzAyXHU5MzAzXHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2'@;
put 'ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2'@;
put 'XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2'@;
put 'ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPXhbMjI4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOF1bbV1dPTU4MzY4K20sRls1ODM2OCttXT14WzIyOF1bbV0pO2Zvcih4WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1OTMwYVx1OTMwYlx1OTMwY1x1OTMwZFx1OTMwZVx1OTMwZlx1OTMxMFx1OTMxMVx1OTMxMlx1OTMxM1x1OTMxNFx1OTMxNVx1OTMxNlx1OTMxN1x1OTMxOFx1OTMxOVx1OTMxYVx1OTMxYlx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMFx1OTMyMVx1OTMyMlx1OTMy'@;
put 'M1x1OTMyNFx1OTMyNVx1OTMyNlx1OTMyN1x1OTMyOFx1OTMyOVx1OTMyYVx1OTMyYlx1OTMyY1x1OTMyZFx1OTMyZVx1OTMyZlx1OTMzMFx1OTMzMVx1OTMzMlx1OTMzM1x1OTMzNFx1OTMzNVx1OTMzNlx1OTMzN1x1OTMzOFx1OTMzOVx1OTMzYVx1OTMzYlx1OTMzY1x1OTMzZFx1OTMzZlx1'@;
put 'OTM0MFx1OTM0MVx1OTM0Mlx1OTM0M1x1OTM0NFx1OTM0NVx1OTM0Nlx1OTM0N1x1OTM0OFx1OTM0OVx1ZmZmZFx1OTM0YVx1OTM0Ylx1OTM0Y1x1OTM0ZFx1OTM0ZVx1OTM0Zlx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1M1x1OTM1NFx1OTM1NVx1OTM1Nlx1OTM1N1x1OTM1OFx1OTM1OVx1OTM1'@;
put 'YVx1OTM1Ylx1OTM1Y1x1OTM1ZFx1OTM1ZVx1OTM1Zlx1OTM2MFx1OTM2MVx1OTM2Mlx1OTM2M1x1OTM2NFx1OTM2NVx1OTM2Nlx1OTM2N1x1OTM2OFx1OTM2OVx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1'@;
put 'NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZl'@;
put 'OVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1'@;
put 'OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlh'@;
put 'M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjldW21dXT01ODYyNCttLEZbNTg2MjQrbV09eFsyMjldW21dKTtmb3IoeFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzNmNcdTkzNmRcdTkzNmVcdTkzNmZcdTkzNzBcdTkzNzFcdTkzNzJcdTkzNzNcdTkzNzRcdTkzNzVcdTkzNzZcdTkzNzdcdTkzNzhcdTkzNzlcdTkzN2FcdTkzN2JcdTkzN2NcdTkzN2RcdTkzN2VcdTkzN2ZcdTkzODBcdTkzODFcdTkzODJcdTkz'@;
put 'ODNcdTkzODRcdTkzODVcdTkzODZcdTkzODdcdTkzODhcdTkzODlcdTkzOGFcdTkzOGJcdTkzOGNcdTkzOGRcdTkzOGVcdTkzOTBcdTkzOTFcdTkzOTJcdTkzOTNcdTkzOTRcdTkzOTVcdTkzOTZcdTkzOTdcdTkzOThcdTkzOTlcdTkzOWFcdTkzOWJcdTkzOWNcdTkzOWRcdTkzOWVcdTkzOWZc'@;
put 'dTkzYTBcdTkzYTFcdTkzYTJcdTkzYTNcdTkzYTRcdTkzYTVcdTkzYTZcdTkzYTdcdTkzYThcdTkzYTlcdTkzYWFcdTkzYWJcdWZmZmRcdTkzYWNcdTkzYWRcdTkzYWVcdTkzYWZcdTkzYjBcdTkzYjFcdTkzYjJcdTkzYjNcdTkzYjRcdTkzYjVcdTkzYjZcdTkzYjdcdTkzYjhcdTkzYjlcdTkz'@;
put 'YmFcdTkzYmJcdTkzYmNcdTkzYmRcdTkzYmVcdTkzYmZcdTkzYzBcdTkzYzFcdTkzYzJcdTkzYzNcdTkzYzRcdTkzYzVcdTkzYzZcdTkzYzdcdTkzYzhcdTkzYzlcdTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdc'@;
put 'dTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVh'@;
put 'YmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVc'@;
put 'dTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdl'@;
put 'YTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMwXVttXV09NTg4ODArbSxGWzU4ODgwK21dPXhbMjMwXVttXSk7Zm9yKHhbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2NlXHU5M2NmXHU5M2QwXHU5M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5'@;
put 'M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5M2ViXHU5M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2Zm'@;
put 'XHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2XHU5NDA3XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5'@;
put 'NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5NDIxXHU5NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5'@;
put 'XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3'@;
put 'ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNl'@;
put 'XHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3'@;
put 'NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMV1bbV1dPTU5MTM2K20sRls1OTEzNittXT14WzIzMV1bbV0pO2Zvcih4WzIzMl09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQyZlx1OTQzMFx1OTQzMVx1OTQzMlx1OTQzM1x1OTQzNFx1OTQzNVx1OTQzNlx1OTQzN1x1OTQzOFx1OTQzOVx1OTQzYVx1OTQzYlx1OTQzY1x1OTQzZFx1OTQzZlx1OTQ0MFx1OTQ0MVx1OTQ0Mlx1'@;
put 'OTQ0M1x1OTQ0NFx1OTQ0NVx1OTQ0Nlx1OTQ0N1x1OTQ0OFx1OTQ0OVx1OTQ0YVx1OTQ0Ylx1OTQ0Y1x1OTQ0ZFx1OTQ0ZVx1OTQ0Zlx1OTQ1MFx1OTQ1MVx1OTQ1Mlx1OTQ1M1x1OTQ1NFx1OTQ1NVx1OTQ1Nlx1OTQ1N1x1OTQ1OFx1OTQ1OVx1OTQ1YVx1OTQ1Ylx1OTQ1Y1x1OTQ1ZFx1OTQ1'@;
put 'ZVx1OTQ1Zlx1OTQ2MFx1OTQ2MVx1OTQ2Mlx1OTQ2M1x1OTQ2NFx1OTQ2NVx1OTQ2Nlx1OTQ2N1x1OTQ2OFx1OTQ2OVx1OTQ2YVx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1ZmZmZFx1OTQ3MFx1OTQ3MVx1OTQ3Mlx1OTQ3M1x1OTQ3NFx1OTQ3NVx1OTQ3Nlx1OTQ3N1x1OTQ3OFx1OTQ3OVx1'@;
put 'OTQ3YVx1OTQ3Ylx1OTQ3Y1x1OTQ3ZFx1OTQ3ZVx1OTQ3Zlx1OTQ4MFx1OTQ4MVx1OTQ4Mlx1OTQ4M1x1OTQ4NFx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1'@;
put 'N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1'@;
put 'Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1Njdl'@;
put 'Mlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1'@;
put 'Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzJdW21dXT01OTM5MittLEZbNTkzOTIrbV09eFsyMzJdW21dKTtmb3Io'@;
put 'eFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1MjdcdTk1MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVcdTk1NzRcdTk1NzVcdTk1NzdcdTk1NzhcdTk1NzlcdTk1N2FcdTk1N2Jc'@;
put 'dTk1N2NcdTk1N2RcdTk1N2VcdTk1ODBcdTk1ODFcdTk1ODJcdTk1ODNcdTk1ODRcdTk1ODVcdTk1ODZcdTk1ODdcdTk1ODhcdTk1ODlcdTk1OGFcdTk1OGJcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OGZcdTk1OTBcdTk1OTFcdTk1OTJcdTk1OTNcdTk1OTRcdTk1OTVcdTk1OTZcdTk1OTdcdTk1'@;
put 'OThcdTk1OTlcdTk1OWFcdTk1OWJcdTk1OWNcdTk1OWRcdTk1OWVcdTk1OWZcdTk1YTBcdTk1YTFcdTk1YTJcdTk1YTNcdTk1YTRcdTk1YTVcdTk1YTZcdTk1YTdcdTk1YThcdTk1YTlcdTk1YWFcdWZmZmRcdTk1YWJcdTk1YWNcdTk1YWRcdTk1YWVcdTk1YWZcdTk1YjBcdTk1YjFcdTk1YjJc'@;
put 'dTk1YjNcdTk1YjRcdTk1YjVcdTk1YjZcdTk1YjdcdTk1YjhcdTk1YjlcdTk1YmFcdTk1YmJcdTk1YmNcdTk1YmRcdTk1YmVcdTk1YmZcdTk1YzBcdTk1YzFcdTk1YzJcdTk1YzNcdTk1YzRcdTk1YzVcdTk1YzZcdTk1YzdcdTk1YzhcdTk1YzlcdTk1Y2FcdTk1Y2JcdTY5MjRcdTY4ZjBcdTY5'@;
put 'MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJc'@;
put 'dTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZh'@;
put 'N2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdc'@;
put 'dThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMzXVttXV09NTk2NDgrbSxGWzU5NjQ4K21dPXhb'@;
put 'MjMzXVttXSk7Zm9yKHhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRh'@;
put 'XHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5NWUyXHU5NWUzXHU5NWU0XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5'@;
put 'NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVl'@;
put 'XHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5NjZmXHU5NjcwXHU5NjcxXHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4'@;
put 'ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5'@;
put 'XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2'@;
put 'NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2'@;
put 'XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNF1bbV1dPTU5OTA0K20s'@;
put 'Rls1OTkwNCttXT14WzIzNF1bbV0pO2Zvcih4WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZFx1OTY5ZVx1OTY5Zlx1OTZh'@;
put 'MFx1OTZhMVx1OTZhMlx1OTZhM1x1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOFx1OTZhOVx1OTZhYVx1OTZhYlx1OTZhY1x1OTZhZFx1OTZhZVx1OTZhZlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1'@;
put 'OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNlx1OTZkN1x1OTZkOFx1OTZkOVx1OTZkYVx1OTZkYlx1OTZkY1x1OTZkZFx1OTZkZVx1OTZkZlx1OTZlMVx1OTZlMlx1OTZlM1x1OTZlNFx1OTZlNVx1OTZlNlx1OTZlN1x1OTZlYlx1ZmZmZFx1OTZlY1x1OTZlZFx1OTZlZVx1OTZm'@;
put 'MFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxN1x1OTcxOFx1OTcxOVx1OTcxYVx1OTcxYlx1OTcxZFx1'@;
put 'OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1'@;
put 'Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1'@;
put 'ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2'@;
put 'ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzVd'@;
put 'W21dXT02MDE2MCttLEZbNjAxNjArbV09eFsyMzVdW21dKTtmb3IoeFsyMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3MjFcdTk3MjJcdTk3MjNcdTk3MjRcdTk3MjVcdTk3MjZcdTk3MjdcdTk3MjhcdTk3MjlcdTk3MmJcdTk3'@;
put 'MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzNcdTk3MzRcdTk3MzVcdTk3MzZcdTk3MzdcdTk3M2FcdTk3M2JcdTk3M2NcdTk3M2RcdTk3M2ZcdTk3NDBcdTk3NDFcdTk3NDJcdTk3NDNcdTk3NDRcdTk3NDVcdTk3NDZcdTk3NDdcdTk3NDhcdTk3NDlcdTk3NGFcdTk3NGJcdTk3NGNcdTk3NGRc'@;
put 'dTk3NGVcdTk3NGZcdTk3NTBcdTk3NTFcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NmFcdTk3NmJcdTk3NmNcdTk3NmRcdTk3NmVcdTk3NmZcdTk3NzBcdTk3NzFcdWZmZmRcdTk3NzJcdTk3'@;
put 'NzVcdTk3NzdcdTk3NzhcdTk3NzlcdTk3N2FcdTk3N2JcdTk3N2RcdTk3N2VcdTk3N2ZcdTk3ODBcdTk3ODFcdTk3ODJcdTk3ODNcdTk3ODRcdTk3ODZcdTk3ODdcdTk3ODhcdTk3ODlcdTk3OGFcdTk3OGNcdTk3OGVcdTk3OGZcdTk3OTBcdTk3OTNcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTlc'@;
put 'dTk3OWFcdTk3OWJcdTk3OWNcdTk3OWRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1'@;
put 'YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFc'@;
put 'dTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5'@;
put 'NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNl1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMjM2XVttXV09NjA0MTYrbSxGWzYwNDE2K21dPXhbMjM2XVttXSk7Zm9yKHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5'@;
put 'N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1XHU5N2I2XHU5N2I3XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4'@;
put 'XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2QwXHU5N2QxXHU5N2QyXHU5N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVm'@;
put 'ZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5N2YyXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4'@;
put 'XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3'@;
put 'N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRj'@;
put 'XHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3'@;
put 'NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzddW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3MittXT14WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTgwZlx1OTgxMFx1OTgxMVx1OTgxMlx1OTgxM1x1OTgxNFx1'@;
put 'OTgxNVx1OTgxNlx1OTgxN1x1OTgxOFx1OTgxOVx1OTgxYVx1OTgxYlx1OTgxY1x1OTgxZFx1OTgxZVx1OTgxZlx1OTgyMFx1OTgyMVx1OTgyMlx1OTgyM1x1OTgyNFx1OTgyNVx1OTgyNlx1OTgyN1x1OTgyOFx1OTgyOVx1OTgyYVx1OTgyYlx1OTgyY1x1OTgyZFx1OTgyZVx1OTgyZlx1OTgz'@;
put 'MFx1OTgzMVx1OTgzMlx1OTgzM1x1OTgzNFx1OTgzNVx1OTgzNlx1OTgzN1x1OTgzOFx1OTgzOVx1OTgzYVx1OTgzYlx1OTgzY1x1OTgzZFx1OTgzZVx1OTgzZlx1OTg0MFx1OTg0MVx1OTg0Mlx1OTg0M1x1OTg0NFx1OTg0NVx1OTg0Nlx1OTg0N1x1OTg0OFx1OTg0OVx1OTg0YVx1OTg0Ylx1'@;
put 'OTg0Y1x1OTg0ZFx1ZmZmZFx1OTg0ZVx1OTg0Zlx1OTg1MFx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1NFx1OTg1NVx1OTg1Nlx1OTg1N1x1OTg1OFx1OTg1OVx1OTg1YVx1OTg1Ylx1OTg1Y1x1OTg1ZFx1OTg1ZVx1OTg1Zlx1OTg2MFx1OTg2MVx1OTg2Mlx1OTg2M1x1OTg2NFx1OTg2NVx1OTg2'@;
put 'Nlx1OTg2N1x1OTg2OFx1OTg2OVx1OTg2YVx1OTg2Ylx1OTg2Y1x1OTg2ZFx1OTg2ZVx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1'@;
put 'NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5'@;
put 'NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRjYVx1OTRjYlx1OTRjY1x1'@;
put 'OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOF0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDkyOCttLEZbNjA5MjgrbV09eFsyMzhdW21dKTtmb3IoeFsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NmZcdTk4NzBcdTk4NzFcdTk4NzJc'@;
put 'dTk4NzNcdTk4NzRcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNcdTk4YThcdTk4YTlcdTk4YWFcdTk4YWJcdTk4YWNcdTk4YWRcdTk4YWVcdTk4YWZcdTk4YjBcdTk4YjFcdTk4YjJcdTk4YjNcdTk4YjRcdTk4YjVcdTk4YjZcdTk4YjdcdTk4YjhcdTk4YjlcdTk4YmFcdTk4'@;
put 'YmJcdTk4YmNcdTk4YmRcdTk4YmVcdTk4YmZcdTk4YzBcdTk4YzFcdTk4YzJcdTk4YzNcdTk4YzRcdTk4YzVcdTk4YzZcdTk4YzdcdTk4YzhcdTk4YzlcdTk4Y2FcdTk4Y2JcdTk4Y2NcdTk4Y2RcdTk4Y2ZcdTk4ZDBcdTk4ZDRcdTk4ZDZcdTk4ZDdcdTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTBc'@;
put 'dTk4ZTFcdTk4ZTJcdTk4ZTNcdTk4ZTRcdWZmZmRcdTk4ZTVcdTk4ZTZcdTk4ZTlcdTk4ZWFcdTk4ZWJcdTk4ZWNcdTk4ZWRcdTk4ZWVcdTk4ZWZcdTk4ZjBcdTk4ZjFcdTk4ZjJcdTk4ZjNcdTk4ZjRcdTk4ZjVcdTk4ZjZcdTk4ZjdcdTk4ZjhcdTk4ZjlcdTk4ZmFcdTk4ZmJcdTk4ZmNcdTk4'@;
put 'ZmRcdTk4ZmVcdTk4ZmZcdTk5MDBcdTk5MDFcdTk5MDJcdTk5MDNcdTk5MDRcdTk5MDVcdTk5MDZcdTk5MDdcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlc'@;
put 'dTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1'@;
put 'M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1Njhc'@;
put 'dTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzldLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzIzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM5XVttXV09NjExODQrbSxGWzYxMTg0K21dPXhbMjM5XVttXSk7Zm9yKHhbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5'@;
put 'XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5OTE0XHU5OTE1XHU5OTE2XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5'@;
put 'OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMwXHU5OTMxXHU5OTMyXHU5OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQz'@;
put 'XHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5OTRiXHU5OTRjXHU5OTRkXHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5'@;
put 'OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIw'@;
put 'XHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5'@;
put 'ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIw'@;
put 'XHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMjQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MF1bbV1dPTYxNDQwK20sRls2MTQ0MCttXT14WzI0MF1bbV0pO2Zvcih4WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OTk4Y1x1OTk4ZVx1OTk5YVx1OTk5Ylx1OTk5Y1x1OTk5ZFx1OTk5ZVx1OTk5Zlx1OTlhMFx1OTlhMVx1OTlhMlx1OTlhM1x1OTlhNFx1OTlhNlx1OTlhN1x1OTlhOVx1OTlhYVx1OTlhYlx1OTlhY1x1OTlhZFx1OTlhZVx1OTlhZlx1OTliMFx1OTliMVx1OTliMlx1OTliM1x1OTliNFx1'@;
put 'OTliNVx1OTliNlx1OTliN1x1OTliOFx1OTliOVx1OTliYVx1OTliYlx1OTliY1x1OTliZFx1OTliZVx1OTliZlx1OTljMFx1OTljMVx1OTljMlx1OTljM1x1OTljNFx1OTljNVx1OTljNlx1OTljN1x1OTljOFx1OTljOVx1OTljYVx1OTljYlx1OTljY1x1OTljZFx1OTljZVx1OTljZlx1OTlk'@;
put 'MFx1OTlkMVx1OTlkMlx1OTlkM1x1OTlkNFx1OTlkNVx1OTlkNlx1OTlkN1x1OTlkOFx1ZmZmZFx1OTlkOVx1OTlkYVx1OTlkYlx1OTlkY1x1OTlkZFx1OTlkZVx1OTlkZlx1OTllMFx1OTllMVx1OTllMlx1OTllM1x1OTllNFx1OTllNVx1OTllNlx1OTllN1x1OTllOFx1OTllOVx1OTllYVx1'@;
put 'OTllYlx1OTllY1x1OTllZFx1OTllZVx1OTllZlx1OTlmMFx1OTlmMVx1OTlmMlx1OTlmM1x1OTlmNFx1OTlmNVx1OTlmNlx1OTlmN1x1OTlmOFx1OTlmOVx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0'@;
put 'ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1'@;
put 'ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZi'@;
put 'Mlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4M1x1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzI0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDFdW21dXT02MTY5NittLEZbNjE2OTYrbV09eFsyNDFdW21dKTtmb3IoeFsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTk5ZmFcdTk5ZmJcdTk5ZmNcdTk5ZmRcdTk5ZmVcdTk5ZmZcdTlhMDBcdTlhMDFcdTlhMDJcdTlhMDNcdTlhMDRcdTlhMDVcdTlhMDZcdTlhMDdcdTlhMDhcdTlhMDlcdTlhMGFcdTlhMGJcdTlhMGNcdTlhMGRcdTlhMGVcdTlhMGZcdTlhMTBcdTlhMTFcdTlhMTJc'@;
put 'dTlhMTNcdTlhMTRcdTlhMTVcdTlhMTZcdTlhMTdcdTlhMThcdTlhMTlcdTlhMWFcdTlhMWJcdTlhMWNcdTlhMWRcdTlhMWVcdTlhMWZcdTlhMjBcdTlhMjFcdTlhMjJcdTlhMjNcdTlhMjRcdTlhMjVcdTlhMjZcdTlhMjdcdTlhMjhcdTlhMjlcdTlhMmFcdTlhMmJcdTlhMmNcdTlhMmRcdTlh'@;
put 'MmVcdTlhMmZcdTlhMzBcdTlhMzFcdTlhMzJcdTlhMzNcdTlhMzRcdTlhMzVcdTlhMzZcdTlhMzdcdTlhMzhcdWZmZmRcdTlhMzlcdTlhM2FcdTlhM2JcdTlhM2NcdTlhM2RcdTlhM2VcdTlhM2ZcdTlhNDBcdTlhNDFcdTlhNDJcdTlhNDNcdTlhNDRcdTlhNDVcdTlhNDZcdTlhNDdcdTlhNDhc'@;
put 'dTlhNDlcdTlhNGFcdTlhNGJcdTlhNGNcdTlhNGRcdTlhNGVcdTlhNGZcdTlhNTBcdTlhNTFcdTlhNTJcdTlhNTNcdTlhNTRcdTlhNTVcdTlhNTZcdTlhNTdcdTlhNThcdTlhNTlcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4'@;
put 'YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFc'@;
put 'dTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3'@;
put 'MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThc'@;
put 'dTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQyXVttXV09NjE5NTIrbSxGWzYxOTUyK21dPXhbMjQyXVttXSk7Zm9yKHhbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5YTVlXHU5YTVmXHU5YTYwXHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThl'@;
put 'XHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFkXHU5YWFlXHU5YWFmXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5'@;
put 'YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5YWRhXHU5YWRiXHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYw'@;
put 'XHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZhXHU5YWZjXHU5YWZkXHU5YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4'@;
put 'N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZk'@;
put 'XHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3'@;
put 'YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZj'@;
put 'XHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0M11bbV1dPTYyMjA4K20sRls2MjIwOCttXT14WzI0M11bbV0pO2Zvcih4WzI0NF09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIwN1x1OWIwOVx1OWIwYVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNFx1OWIxNVx1OWIxNlx1OWIxN1x1OWIxOFx1OWIxOVx1OWIxYVx1OWIxYlx1OWIxY1x1OWIxZFx1OWIx'@;
put 'ZVx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNFx1OWIyNVx1OWIyNlx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyYlx1OWIyY1x1OWIyZFx1OWIyZVx1OWIzMFx1OWIzMVx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzNlx1OWIzN1x1OWIzOFx1OWIzOVx1OWIzYVx1OWIzZFx1OWIzZVx1OWIzZlx1'@;
put 'OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1OFx1OWI1OVx1OWI1YVx1ZmZmZFx1OWI1Ylx1OWI1Y1x1OWI1ZFx1OWI1ZVx1OWI1Zlx1OWI2MFx1OWI2MVx1OWI2Mlx1OWI2M1x1OWI2NFx1OWI2NVx1OWI2'@;
put 'Nlx1OWI2N1x1OWI2OFx1OWI2OVx1OWI2YVx1OWI2Ylx1OWI2Y1x1OWI2ZFx1OWI2ZVx1OWI2Zlx1OWI3MFx1OWI3MVx1OWI3Mlx1OWI3M1x1OWI3NFx1OWI3NVx1OWI3Nlx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3YVx1OWI3Ylx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1'@;
put 'ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4'@;
put 'OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1'@;
put 'ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0'@;
put 'OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDRdW21dXT02MjQ2NCttLEZbNjI0NjQrbV09eFsyNDRdW21dKTtmb3IoeFsyNDVdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2NcdTliN2RcdTliN2VcdTliN2ZcdTliODBcdTliODFcdTliODJcdTliODNcdTliODRcdTliODVcdTliODZcdTliODdcdTliODhcdTliODlcdTliOGFcdTliOGJcdTliOGNcdTliOGRcdTli'@;
put 'OGVcdTliOGZcdTliOTBcdTliOTFcdTliOTJcdTliOTNcdTliOTRcdTliOTVcdTliOTZcdTliOTdcdTliOThcdTliOTlcdTliOWFcdTliOWJcdTliOWNcdTliOWRcdTliOWVcdTliOWZcdTliYTBcdTliYTFcdTliYTJcdTliYTNcdTliYTRcdTliYTVcdTliYTZcdTliYTdcdTliYThcdTliYTlc'@;
put 'dTliYWFcdTliYWJcdTliYWNcdTliYWRcdTliYWVcdTliYWZcdTliYjBcdTliYjFcdTliYjJcdTliYjNcdTliYjRcdTliYjVcdTliYjZcdTliYjdcdTliYjhcdTliYjlcdTliYmFcdWZmZmRcdTliYmJcdTliYmNcdTliYmRcdTliYmVcdTliYmZcdTliYzBcdTliYzFcdTliYzJcdTliYzNcdTli'@;
put 'YzRcdTliYzVcdTliYzZcdTliYzdcdTliYzhcdTliYzlcdTliY2FcdTliY2JcdTliY2NcdTliY2RcdTliY2VcdTliY2ZcdTliZDBcdTliZDFcdTliZDJcdTliZDNcdTliZDRcdTliZDVcdTliZDZcdTliZDdcdTliZDhcdTliZDlcdTliZGFcdTliZGJcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlc'@;
put 'dTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThk'@;
put 'YjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNc'@;
put 'dThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThj'@;
put 'ODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ1XVttXV09NjI3MjArbSxGWzYyNzIwK21dPXhbMjQ1XVttXSk7'@;
put 'Zm9yKHhbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YmRjXHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5'@;
put 'YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1XHU5YmY2XHU5YmY3XHU5YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3'@;
put 'XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5YzExXHU5YzEyXHU5YzEzXHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5'@;
put 'YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJiXHU5YzJjXHU5YzJkXHU5YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWVi'@;
put 'XHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5'@;
put 'ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5Yzkx'@;
put 'XHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5'@;
put 'Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Nl1bbV1dPTYyOTc2K20sRls2Mjk3Nitt'@;
put 'XT14WzI0Nl1bbV0pO2Zvcih4WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWMzY1x1OWMzZFx1OWMzZVx1OWMzZlx1OWM0MFx1OWM0MVx1OWM0Mlx1OWM0M1x1OWM0NFx1OWM0NVx1OWM0Nlx1OWM0N1x1OWM0OFx1OWM0OVx1'@;
put 'OWM0YVx1OWM0Ylx1OWM0Y1x1OWM0ZFx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1MVx1OWM1Mlx1OWM1M1x1OWM1NFx1OWM1NVx1OWM1Nlx1OWM1N1x1OWM1OFx1OWM1OVx1OWM1YVx1OWM1Ylx1OWM1Y1x1OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2MFx1OWM2MVx1OWM2Mlx1OWM2M1x1OWM2NFx1OWM2'@;
put 'NVx1OWM2Nlx1OWM2N1x1OWM2OFx1OWM2OVx1OWM2YVx1OWM2Ylx1OWM2Y1x1OWM2ZFx1OWM2ZVx1OWM2Zlx1OWM3MFx1OWM3MVx1OWM3Mlx1OWM3M1x1OWM3NFx1OWM3NVx1OWM3Nlx1OWM3N1x1OWM3OFx1OWM3OVx1OWM3YVx1ZmZmZFx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1'@;
put 'OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNiZVx1OWNiZlx1OWNjMFx1OWNjMVx1OWNjMlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1OWNl'@;
put 'MVx1OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1'@;
put 'OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFl'@;
put 'Zlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1'@;
put 'OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDddW21dXT02MzIz'@;
put 'MittLEZbNjMyMzIrbV09eFsyNDddW21dKTtmb3IoeFsyNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljZTNcdTljZTRcdTljZTVcdTljZTZcdTljZTdcdTljZThcdTljZTlcdTljZWFcdTljZWJcdTljZWNcdTljZWRcdTljZWVc'@;
put 'dTljZWZcdTljZjBcdTljZjFcdTljZjJcdTljZjNcdTljZjRcdTljZjVcdTljZjZcdTljZjdcdTljZjhcdTljZjlcdTljZmFcdTljZmJcdTljZmNcdTljZmRcdTljZmVcdTljZmZcdTlkMDBcdTlkMDFcdTlkMDJcdTlkMDNcdTlkMDRcdTlkMDVcdTlkMDZcdTlkMDdcdTlkMDhcdTlkMDlcdTlk'@;
put 'MGFcdTlkMGJcdTlkMGNcdTlkMGRcdTlkMGVcdTlkMGZcdTlkMTBcdTlkMTFcdTlkMTJcdTlkMTNcdTlkMTRcdTlkMTVcdTlkMTZcdTlkMTdcdTlkMThcdTlkMTlcdTlkMWFcdTlkMWJcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMWZcdTlkMjBcdTlkMjFcdWZmZmRcdTlkMjJcdTlkMjNcdTlkMjRc'@;
put 'dTlkMjVcdTlkMjZcdTlkMjdcdTlkMjhcdTlkMjlcdTlkMmFcdTlkMmJcdTlkMmNcdTlkMmRcdTlkMmVcdTlkMmZcdTlkMzBcdTlkMzFcdTlkMzJcdTlkMzNcdTlkMzRcdTlkMzVcdTlkMzZcdTlkMzdcdTlkMzhcdTlkMzlcdTlkM2FcdTlkM2JcdTlkM2NcdTlkM2RcdTlkM2VcdTlkM2ZcdTlk'@;
put 'NDBcdTlkNDFcdTlkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MjQ4XVttXV09NjM0ODgrbSxGWzYzNDg4K21dPXhbMjQ4XVttXSk7Zm9yKHhbMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRj'@;
put 'XHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2XHU5ZDU3XHU5ZDU4XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5'@;
put 'ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5ZDcyXHU5ZDczXHU5ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgy'@;
put 'XHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhjXHU5ZDhkXHU5ZDhlXHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5'@;
put 'ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDldW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzI0OV1bbV1dPTYzNzQ0K20sRls2Mzc0NCttXT14WzI0OV1bbV0pO2Zvcih4WzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhM1x1OWRhNFx1OWRhNVx1OWRhNlx1OWRhN1x1OWRhOFx1OWRhOVx1OWRh'@;
put 'YVx1OWRhYlx1OWRhY1x1OWRhZFx1OWRhZVx1OWRhZlx1OWRiMFx1OWRiMVx1OWRiMlx1OWRiM1x1OWRiNFx1OWRiNVx1OWRiNlx1OWRiN1x1OWRiOFx1OWRiOVx1OWRiYVx1OWRiYlx1OWRiY1x1OWRiZFx1OWRiZVx1OWRiZlx1OWRjMFx1OWRjMVx1OWRjMlx1OWRjM1x1OWRjNFx1OWRjNVx1'@;
put 'OWRjNlx1OWRjN1x1OWRjOFx1OWRjOVx1OWRjYVx1OWRjYlx1OWRjY1x1OWRjZFx1OWRjZVx1OWRjZlx1OWRkMFx1OWRkMVx1OWRkMlx1OWRkM1x1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkOFx1OWRkOVx1OWRkYVx1OWRkYlx1OWRkY1x1OWRkZFx1OWRkZVx1OWRkZlx1OWRlMFx1OWRl'@;
put 'MVx1ZmZmZFx1OWRlMlx1OWRlM1x1OWRlNFx1OWRlNVx1OWRlNlx1OWRlN1x1OWRlOFx1OWRlOVx1OWRlYVx1OWRlYlx1OWRlY1x1OWRlZFx1OWRlZVx1OWRlZlx1OWRmMFx1OWRmMVx1OWRmMlx1OWRmM1x1OWRmNFx1OWRmNVx1OWRmNlx1OWRmN1x1OWRmOFx1OWRmOVx1OWRmYVx1OWRmYlx1'@;
put 'OWRmY1x1OWRmZFx1OWRmZVx1OWRmZlx1OWUwMFx1OWUwMVx1OWUwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUw'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTBdW21dXT02NGUzK20sRls2NGUzK21dPXhbMjUwXVttXSk7Zm9yKHhbMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZTAzXHU5ZTA0XHU5ZTA1XHU5ZTA2XHU5ZTA3XHU5ZTA4'@;
put 'XHU5ZTA5XHU5ZTBhXHU5ZTBiXHU5ZTBjXHU5ZTBkXHU5ZTBlXHU5ZTBmXHU5ZTEwXHU5ZTExXHU5ZTEyXHU5ZTEzXHU5ZTE0XHU5ZTE1XHU5ZTE2XHU5ZTE3XHU5ZTE4XHU5ZTE5XHU5ZTFhXHU5ZTFiXHU5ZTFjXHU5ZTFkXHU5ZTFlXHU5ZTI0XHU5ZTI3XHU5ZTJlXHU5ZTMwXHU5ZTM0XHU5'@;
put 'ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5ZTU2XHU5ZTU5XHU5ZTVkXHU5ZTVmXHU5ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0XHU5ZTc1XHU5ZTc2XHU5ZTc3XHU5ZTc4XHU5ZTc5XHU5ZTdhXHU5ZTdiXHU5ZTdj'@;
put 'XHU5ZTdkXHU5ZTgwXHVmZmZkXHU5ZTgxXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg2XHU5ZTg5XHU5ZThhXHU5ZThjXHU5ZThkXHU5ZThlXHU5ZThmXHU5ZTkwXHU5ZTkxXHU5ZTk0XHU5ZTk1XHU5ZTk2XHU5ZTk3XHU5ZTk4XHU5ZTk5XHU5ZTlhXHU5ZTliXHU5ZTljXHU5ZTllXHU5ZWEwXHU5'@;
put 'ZWExXHU5ZWEyXHU5ZWEzXHU5ZWE0XHU5ZWE1XHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5ZWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUxXS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09eFsyNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MV1bbV1dPTY0MjU2K20sRls2NDI1NittXT14WzI1MV1bbV0pO2Zvcih4WzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVh'@;
put 'ZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWViZlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1'@;
put 'OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYw'@;
put 'MVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1'@;
put 'OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1Ml0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTJdW21dXT02NDUxMittLEZbNjQ1MTIrbV09eFsyNTJdW21dKTtmb3IoeFsyNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmMzJcdTlm'@;
put 'MzNcdTlmMzRcdTlmMzVcdTlmMzZcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2ZcdTlmNDBcdTlmNDFcdTlmNDJcdTlmNDNcdTlmNDVcdTlmNDZcdTlmNDdcdTlmNDhcdTlmNDlcdTlmNGFcdTlmNGJcdTlmNGNcdTlmNGRcdTlmNGVcdTlmNGZcdTlmNTJcdTlmNTNcdTlmNTRcdTlmNTVcdTlmNTZc'@;
put 'dTlmNTdcdTlmNThcdTlmNTlcdTlmNWFcdTlmNWJcdTlmNWNcdTlmNWRcdTlmNWVcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjJcdTlmNjNcdTlmNjRcdTlmNjVcdTlmNjZcdTlmNjdcdTlmNjhcdTlmNjlcdTlmNmFcdTlmNmJcdTlmNmNcdTlmNmRcdTlmNmVcdTlmNmZcdTlmNzBcdTlmNzFcdTlm'@;
put 'NzJcdTlmNzNcdTlmNzRcdTlmNzVcdTlmNzZcdTlmNzdcdTlmNzhcdWZmZmRcdTlmNzlcdTlmN2FcdTlmN2JcdTlmN2NcdTlmN2RcdTlmN2VcdTlmODFcdTlmODJcdTlmOGRcdTlmOGVcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTNcdTlmOTRcdTlmOTVcdTlmOTZcdTlmOTdcdTlmOThc'@;
put 'dTlmOWNcdTlmOWRcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTRcdTlmYTVcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9eFsyNTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUzXVttXV09NjQ3NjgrbSxGWzY0NzY4K21dPXhbMjUzXVttXSk7Zm9yKHhbMjU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmYTBjXHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVmYTE4XHVmYTFmXHVmYTIwXHVmYTIxXHVmYTIzXHVmYTI0XHVmYTI3XHVmYTI4XHVmYTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPXhbMjU0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1NF1bbV1dPTY1MDI0K20sRls2NTAyNCttXT14WzI1NF1bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEllWzk0OV09ZnVuY3Rpb24oKXt2YXIgbSxG'@;
put 'PVtdLGFlPXt9LHg9W107Zm9yKHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4'@;
put 'OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiXHVhYzBjXHVhYzBkXHVhYzBlXHVhYzBmXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1XHVhYzI2XHVhYzI3XHVhYzI4XHVhYzI5XHVhYzJhXHVhYzJiXHVhYzJlXHVh'@;
put 'YzMyXHVhYzMzXHVhYzM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQxXHVhYzQyXHVhYzQzXHVhYzQ0XHVhYzQ1XHVhYzQ2XHVhYzQ3XHVhYzQ4XHVhYzQ5XHVhYzRhXHVhYzRj'@;
put 'XHVhYzRlXHVhYzRmXHVhYzUwXHVhYzUxXHVhYzUyXHVhYzUzXHVhYzU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkXHVhYzVlXHVhYzVmXHVhYzYwXHVhYzYxXHVhYzYyXHVhYzYzXHVhYzY0XHVhYzY1XHVh'@;
put 'YzY2XHVhYzY3XHVhYzY4XHVhYzY5XHVhYzZhXHVhYzZiXHVhYzZjXHVhYzZkXHVhYzZlXHVhYzZmXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiXHVhYzdjXHVhYzdkXHVhYzdlXHVhYzdmXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVhYzhlXHVhYzhmXHVhYzkxXHVhYzky'@;
put 'XHVhYzkzXHVhYzk1XHVhYzk2XHVhYzk3XHVhYzk4XHVhYzk5XHVhYzlhXHVhYzliXHVhYzllXHVhY2EyXHVhY2EzXHVhY2E0XHVhY2E1XHVhY2E2XHVhY2E3XHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxXHVhY2IyXHVhY2IzXHVhY2I0XHVhY2I1XHVhY2I2XHVhY2I3XHVhY2JhXHVhY2JlXHVh'@;
put 'Y2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkXHVhY2NlXHVhY2NmXHVhY2QwXHVhY2QxXHVhY2QyXHVhY2QzXHVhY2Q0XHVhY2Q2XHVhY2Q4XHVhY2Q5XHVhY2RhXHVhY2RiXHVhY2RjXHVhY2RkXHVhY2RlXHVhY2RmXHVhY2Uy'@;
put 'XHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3XHVhY2Y4XHVhY2Y5XHVhY2ZhXHVhY2ZiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3XHVhZDA4XHVhZDA5XHVhZDBhXHVhZDBiXHVhZDBlXHVhZDEwXHVh'@;
put 'ZDEyXHVhZDEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEyOV1bbV1dPTMzMDI0K20sRlszMzAyNCttXT14WzEyOV1bbV0pO2Zvcih4WzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQxNFx1YWQxNVx1YWQxNlx1YWQxN1x1YWQxOVx1YWQxYVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMVx1YWQyMlx1YWQyM1x1YWQyNFx1YWQyNVx1YWQyNlx1YWQyN1x1YWQyOFx1YWQyYVx1YWQyYlx1YWQyZVx1'@;
put 'YWQyZlx1YWQzMFx1YWQzMVx1YWQzMlx1YWQzM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQzNlx1YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZFx1YWQzZVx1YWQzZlx1YWQ0MFx1YWQ0MVx1YWQ0Mlx1YWQ0M1x1YWQ0Nlx1YWQ0OFx1YWQ0YVx1YWQ0Ylx1YWQ0'@;
put 'Y1x1YWQ0ZFx1YWQ0ZVx1YWQ0Zlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1YWQ1NVx1YWQ1Nlx1YWQ1N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQ1OVx1YWQ1YVx1YWQ1Ylx1YWQ1Y1x1YWQ1ZFx1YWQ1ZVx1YWQ1Zlx1YWQ2MFx1YWQ2Mlx1YWQ2NFx1YWQ2NVx1YWQ2Nlx1'@;
put 'YWQ2N1x1YWQ2OFx1YWQ2OVx1YWQ2YVx1YWQ2Ylx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1YWQ3Mlx1YWQ3N1x1YWQ3OFx1YWQ3OVx1YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4M1x1YWQ4NFx1YWQ4NVx1YWQ4Nlx1YWQ4N1x1YWQ4YVx1YWQ4Ylx1YWQ4ZFx1YWQ4ZVx1YWQ4Zlx1YWQ5MVx1YWQ5Mlx1YWQ5'@;
put 'M1x1YWQ5NFx1YWQ5NVx1YWQ5Nlx1YWQ5N1x1YWQ5OFx1YWQ5OVx1YWQ5YVx1YWQ5Ylx1YWQ5ZVx1YWQ5Zlx1YWRhMFx1YWRhMVx1YWRhMlx1YWRhM1x1YWRhNVx1YWRhNlx1YWRhN1x1YWRhOFx1YWRhOVx1YWRhYVx1YWRhYlx1YWRhY1x1YWRhZFx1YWRhZVx1YWRhZlx1YWRiMFx1YWRiMVx1'@;
put 'YWRiMlx1YWRiM1x1YWRiNFx1YWRiNVx1YWRiNlx1YWRiOFx1YWRiOVx1YWRiYVx1YWRiYlx1YWRiY1x1YWRiZFx1YWRiZVx1YWRiZlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOVx1YWRjYVx1YWRjYlx1YWRjY1x1YWRjZFx1YWRjZVx1YWRjZlx1YWRkMlx1YWRkNFx1YWRk'@;
put 'NVx1YWRkNlx1YWRkN1x1YWRkOFx1YWRkOVx1YWRkYVx1YWRkYlx1YWRkZFx1YWRkZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRlM1x1YWRlNVx1YWRlNlx1YWRlN1x1YWRlOFx1YWRlOVx1YWRlYVx1YWRlYlx1YWRlY1x1YWRlZFx1YWRlZVx1YWRlZlx1YWRmMFx1YWRmMVx1YWRmMlx1YWRmM1x1'@;
put 'YWRmNFx1YWRmNVx1YWRmNlx1YWRmN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzBdW21dXT0zMzI4MCttLEZbMzMyODArbV09eFsxMzBdW21dKTtmb3IoeFsxMzFdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFlMDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBcdWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVc'@;
put 'dWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFlMjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFl'@;
put 'MmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZc'@;
put 'dWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFlNzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFl'@;
put 'N2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFlOGJcdWFlOGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdcdWFlOThcdWFlOTlcdWFlOWFcdWFlOWJc'@;
put 'dWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdcdWFlYThcdWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFlYjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFl'@;
put 'YjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFlYzhcdWFlYzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFcdWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZc'@;
put 'dWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMxXVttXV09MzM1MzYrbSxGWzMzNTM2K21dPXhbMTMxXVttXSk7Zm9yKHhbMTMy'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlXHVhZWVmXHVhZWYwXHVhZWYxXHVhZWYyXHVhZWYzXHVhZWY1XHVhZWY2XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZi'@;
put 'XHVhZWZkXHVhZWZlXHVhZWZmXHVhZjAwXHVhZjAxXHVhZjAyXHVhZjAzXHVhZjA0XHVhZjA1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExXHVhZjEyXHVhZjEzXHVhZjE0XHVhZjE1XHVh'@;
put 'ZjE2XHVhZjE3XHVhZjE4XHVhZjE5XHVhZjFhXHVhZjFiXHVhZjFjXHVhZjFkXHVhZjFlXHVhZjFmXHVhZjIwXHVhZjIxXHVhZjIyXHVhZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjI0XHVhZjI1XHVhZjI2XHVhZjI3XHVhZjI4XHVhZjI5XHVhZjJhXHVhZjJi'@;
put 'XHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1XHVhZjM2XHVhZjM3XHVhZjM4XHVhZjM5XHVhZjNhXHVhZjNiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhXHVhZjRiXHVhZjRjXHVhZjRkXHVhZjRlXHVhZjRmXHVhZjUxXHVhZjUyXHVhZjUzXHVhZjU0XHVh'@;
put 'ZjU1XHVhZjU2XHVhZjU3XHVhZjU4XHVhZjU5XHVhZjVhXHVhZjViXHVhZjVlXHVhZjVmXHVhZjYwXHVhZjYxXHVhZjYyXHVhZjYzXHVhZjY2XHVhZjY3XHVhZjY4XHVhZjY5XHVhZjZhXHVhZjZiXHVhZjZjXHVhZjZkXHVhZjZlXHVhZjZmXHVhZjcwXHVhZjcxXHVhZjcyXHVhZjczXHVhZjc0'@;
put 'XHVhZjc1XHVhZjc2XHVhZjc3XHVhZjc4XHVhZjdhXHVhZjdiXHVhZjdjXHVhZjdkXHVhZjdlXHVhZjdmXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5XHVhZjhhXHVhZjhiXHVhZjhjXHVhZjhkXHVhZjhlXHVhZjhmXHVhZjkyXHVhZjkzXHVhZjk0XHVhZjk2XHVh'@;
put 'Zjk3XHVhZjk4XHVhZjk5XHVhZjlhXHVhZjliXHVhZjlkXHVhZjllXHVhZjlmXHVhZmEwXHVhZmExXHVhZmEyXHVhZmEzXHVhZmE0XHVhZmE1XHVhZmE2XHVhZmE3XHVhZmE4XHVhZmE5XHVhZmFhXHVhZmFiXHVhZmFjXHVhZmFkXHVhZmFlXHVhZmFmXHVhZmIwXHVhZmIxXHVhZmIyXHVhZmIz'@;
put 'XHVhZmI0XHVhZmI1XHVhZmI2XHVhZmI3XHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMl1bbV1dPTMzNzkyK20sRlszMzc5MittXT14WzEzMl1b'@;
put 'bV0pO2Zvcih4WzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZiZlx1YWZjMVx1YWZjMlx1YWZjM1x1YWZjNFx1YWZjNVx1YWZjNlx1YWZjYVx1YWZjY1x1YWZjZlx1YWZkMFx1YWZkMVx1YWZkMlx1YWZkM1x1YWZk'@;
put 'NVx1YWZkNlx1YWZkN1x1YWZkOFx1YWZkOVx1YWZkYVx1YWZkYlx1YWZkZFx1YWZkZVx1YWZkZlx1YWZlMFx1YWZlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZlMlx1YWZlM1x1YWZlNFx1YWZlNVx1YWZlNlx1YWZlN1x1YWZlYVx1YWZlYlx1YWZlY1x1YWZlZFx1'@;
put 'YWZlZVx1YWZlZlx1YWZmMlx1YWZmM1x1YWZmNVx1YWZmNlx1YWZmN1x1YWZmOVx1YWZmYVx1YWZmYlx1YWZmY1x1YWZmZFx1YWZmZVx1YWZmZlx1YjAwMlx1YjAwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjAwNVx1YjAwNlx1YjAwN1x1YjAwOFx1YjAwOVx1YjAw'@;
put 'YVx1YjAwYlx1YjAwZFx1YjAwZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1YjAxNVx1YjAxNlx1YjAxN1x1YjAxOFx1YjAxOVx1YjAxYVx1YjAxYlx1YjAxZVx1YjAxZlx1YjAyMFx1YjAyMVx1YjAyMlx1YjAyM1x1YjAyNFx1YjAyNVx1YjAyNlx1YjAyN1x1YjAyOVx1YjAyYVx1YjAyYlx1'@;
put 'YjAyY1x1YjAyZFx1YjAyZVx1YjAyZlx1YjAzMFx1YjAzMVx1YjAzMlx1YjAzM1x1YjAzNFx1YjAzNVx1YjAzNlx1YjAzN1x1YjAzOFx1YjAzOVx1YjAzYVx1YjAzYlx1YjAzY1x1YjAzZFx1YjAzZVx1YjAzZlx1YjA0MFx1YjA0MVx1YjA0Mlx1YjA0M1x1YjA0Nlx1YjA0N1x1YjA0OVx1YjA0'@;
put 'Ylx1YjA0ZFx1YjA0Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1OFx1YjA1YVx1YjA1Ylx1YjA1Y1x1YjA1ZVx1YjA1Zlx1YjA2MFx1YjA2MVx1YjA2Mlx1YjA2M1x1YjA2NFx1YjA2NVx1YjA2Nlx1YjA2N1x1YjA2OFx1YjA2OVx1YjA2YVx1YjA2Ylx1YjA2Y1x1YjA2ZFx1YjA2ZVx1'@;
put 'YjA2Zlx1YjA3MFx1YjA3MVx1YjA3Mlx1YjA3M1x1YjA3NFx1YjA3NVx1YjA3Nlx1YjA3N1x1YjA3OFx1YjA3OVx1YjA3YVx1YjA3Ylx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NVx1YjA4Nlx1YjA4N1x1YjA4OFx1YjA4OVx1YjA4YVx1YjA4Ylx1YjA4ZVx1YjA5MFx1YjA5'@;
put 'Mlx1YjA5M1x1YjA5NFx1YjA5NVx1YjA5Nlx1YjA5N1x1YjA5Ylx1YjA5ZFx1YjA5ZVx1YjBhM1x1YjBhNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzNdW21dXT0zNDA0OCttLEZbMzQw'@;
put 'NDgrbV09eFsxMzNdW21dKTtmb3IoeFsxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIw'@;
put 'YmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2ZcdWIwZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNc'@;
put 'dWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIwZWJcdWIwZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIw'@;
put 'ZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBcdWIxMDFcdWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZc'@;
put 'dWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmRcdWIxMmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIx'@;
put 'NDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdc'@;
put 'dWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIxNzRcdWIxNzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRcdWIxODVcdWIxODZcdWIxODdcdWIx'@;
put 'OGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM0XVttXV09'@;
put 'MzQzMDQrbSxGWzM0MzA0K21dPXhbMTM0XVttXSk7Zm9yKHhbMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMTllXHViMTlmXHViMWEwXHViMWExXHViMWEyXHViMWEzXHViMWE0XHViMWE1XHViMWE2XHViMWE3XHVi'@;
put 'MWE5XHViMWFhXHViMWFiXHViMWFjXHViMWFkXHViMWFlXHViMWFmXHViMWIwXHViMWIxXHViMWIyXHViMWIzXHViMWI0XHViMWI1XHViMWI2XHViMWI3XHViMWI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWI5XHViMWJhXHViMWJiXHViMWJjXHViMWJkXHViMWJl'@;
put 'XHViMWJmXHViMWMwXHViMWMxXHViMWMyXHViMWMzXHViMWM0XHViMWM1XHViMWM2XHViMWM3XHViMWM4XHViMWM5XHViMWNhXHViMWNiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWQ2XHVi'@;
put 'MWQ3XHViMWQ4XHViMWQ5XHViMWRhXHViMWRiXHViMWRlXHViMWUwXHViMWUxXHViMWUyXHViMWUzXHViMWU0XHViMWU1XHViMWU2XHViMWU3XHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxXHViMWYyXHViMWYzXHViMWY0XHViMWY1XHViMWY2XHViMWY3XHViMWY4XHViMWZh'@;
put 'XHViMWZjXHViMWZlXHViMWZmXHViMjAwXHViMjAxXHViMjAyXHViMjAzXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkXHViMjBlXHViMjBmXHViMjEwXHViMjExXHViMjEyXHViMjEzXHViMjE2XHViMjE4XHViMjFhXHViMjFiXHViMjFjXHViMjFkXHViMjFlXHViMjFmXHViMjIxXHVi'@;
put 'MjIyXHViMjIzXHViMjI0XHViMjI1XHViMjI2XHViMjI3XHViMjI4XHViMjI5XHViMjJhXHViMjJiXHViMjJjXHViMjJkXHViMjJlXHViMjJmXHViMjMwXHViMjMxXHViMjMyXHViMjMzXHViMjM1XHViMjM2XHViMjM3XHViMjM4XHViMjM5XHViMjNhXHViMjNiXHViMjNkXHViMjNlXHViMjNm'@;
put 'XHViMjQwXHViMjQxXHViMjQyXHViMjQzXHViMjQ0XHViMjQ1XHViMjQ2XHViMjQ3XHViMjQ4XHViMjQ5XHViMjRhXHViMjRiXHViMjRjXHViMjRkXHViMjRlXHViMjRmXHViMjUwXHViMjUxXHViMjUyXHViMjUzXHViMjU0XHViMjU1XHViMjU2XHViMjU3XHViMjU5XHViMjVhXHViMjViXHVi'@;
put 'MjVkXHViMjVlXHViMjVmXHViMjYxXHViMjYyXHViMjYzXHViMjY0XHViMjY1XHViMjY2XHViMjY3XHViMjZhXHViMjZiXHViMjZjXHViMjZkXHViMjZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzVdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzEzNV1bbV1dPTM0NTYwK20sRlszNDU2MCttXT14WzEzNV1bbV0pO2Zvcih4WzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI2Zlx1YjI3MFx1YjI3MVx1YjI3Mlx1YjI3M1x1YjI3Nlx1YjI3N1x1YjI3OFx1'@;
put 'YjI3OVx1YjI3YVx1YjI3Ylx1YjI3ZFx1YjI3ZVx1YjI3Zlx1YjI4MFx1YjI4MVx1YjI4Mlx1YjI4M1x1YjI4Nlx1YjI4N1x1YjI4OFx1YjI4YVx1YjI4Ylx1YjI4Y1x1YjI4ZFx1YjI4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI4Zlx1YjI5Mlx1YjI5M1x1YjI5'@;
put 'NVx1YjI5Nlx1YjI5N1x1YjI5Ylx1YjI5Y1x1YjI5ZFx1YjI5ZVx1YjI5Zlx1YjJhMlx1YjJhNFx1YjJhN1x1YjJhOFx1YjJhOVx1YjJhYlx1YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1YjJiOFx1YjJiOVx1YjJiYVx1YjJiYlx1YjJiY1x1YjJiZFx1YjJiZVx1YjJiZlx1YjJjMFx1YjJjMVx1YjJjMlx1YjJjM1x1YjJjNFx1YjJjNVx1YjJjNlx1YjJjN1x1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJkM1x1YjJkNFx1YjJkNVx1YjJkNlx1YjJk'@;
put 'N1x1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJlN1x1YjJlOVx1YjJlYVx1YjJmMFx1YjJmMVx1YjJmMlx1YjJmNlx1YjJmY1x1YjJmZFx1YjJmZVx1YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMwN1x1YjMwOVx1YjMwYVx1YjMwYlx1YjMwY1x1YjMwZFx1'@;
put 'YjMwZVx1YjMwZlx1YjMxMlx1YjMxNlx1YjMxN1x1YjMxOFx1YjMxOVx1YjMxYVx1YjMxYlx1YjMxZFx1YjMxZVx1YjMxZlx1YjMyMFx1YjMyMVx1YjMyMlx1YjMyM1x1YjMyNFx1YjMyNVx1YjMyNlx1YjMyN1x1YjMyOFx1YjMyOVx1YjMyYVx1YjMyYlx1YjMyY1x1YjMyZFx1YjMyZVx1YjMy'@;
put 'Zlx1YjMzMFx1YjMzMVx1YjMzMlx1YjMzM1x1YjMzNFx1YjMzNVx1YjMzNlx1YjMzN1x1YjMzOFx1YjMzOVx1YjMzYVx1YjMzYlx1YjMzY1x1YjMzZFx1YjMzZVx1YjMzZlx1YjM0MFx1YjM0MVx1YjM0Mlx1YjM0M1x1YjM0NFx1YjM0NVx1YjM0Nlx1YjM0N1x1YjM0OFx1YjM0OVx1YjM0YVx1'@;
put 'YjM0Ylx1YjM0Y1x1YjM0ZFx1YjM0ZVx1YjM0Zlx1YjM1MFx1YjM1MVx1YjM1Mlx1YjM1M1x1YjM1N1x1YjM1OVx1YjM1YVx1YjM1ZFx1YjM2MFx1YjM2MVx1YjM2Mlx1YjM2M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM2XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxMzZdW21dXT0zNDgxNittLEZbMzQ4MTYrbV09eFsxMzZdW21dKTtmb3IoeFsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZc'@;
put 'dWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJcdWIzODZcdWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIz'@;
put 'OGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIzOWVcdWIzOWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdcdWIzYjhcdWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIz'@;
put 'YzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFc'@;
put 'dWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZcdWI0MDBcdWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0'@;
put 'MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBc'@;
put 'dWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2VcdWI0M2ZcdWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzddLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzEzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM3XVttXV09MzUwNzIrbSxGWzM1MDcyK21dPXhbMTM3XVttXSk7Zm9yKHhbMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDQ1XHViNDQ2XHViNDQ3XHViNDQ4'@;
put 'XHViNDQ5XHViNDRhXHViNDRiXHViNDRjXHViNDRkXHViNDRlXHViNDRmXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5XHViNDVhXHViNDViXHViNDVjXHViNDVkXHViNDVlXHViNDVmXHViNDYyXHViNDY0XHViNDY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHViNDY3XHViNDY4XHViNDY5XHViNDZhXHViNDZiXHViNDZkXHViNDZlXHViNDZmXHViNDcwXHViNDcxXHViNDcyXHViNDczXHViNDc0XHViNDc1XHViNDc2XHViNDc3XHViNDc4XHViNDc5XHViNDdhXHViNDdiXHViNDdjXHViNDdkXHViNDdlXHViNDdmXHViNDgxXHViNDgyXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDgzXHViNDg0XHViNDg1XHViNDg2XHViNDg3XHViNDg5XHViNDhhXHViNDhiXHViNDhjXHViNDhkXHViNDhlXHViNDhmXHViNDkwXHViNDkxXHViNDkyXHViNDkzXHViNDk0XHViNDk1XHViNDk2XHViNDk3XHViNDk4XHViNDk5XHVi'@;
put 'NDlhXHViNDliXHViNDljXHViNDllXHViNDlmXHViNGEwXHViNGExXHViNGEyXHViNGEzXHViNGE1XHViNGE2XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkXHViNGFlXHViNGFmXHViNGIwXHViNGIxXHViNGIyXHViNGIzXHViNGI0XHViNGI2XHViNGI4XHViNGJhXHViNGJiXHViNGJj'@;
put 'XHViNGJkXHViNGJlXHViNGJmXHViNGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3XHViNGM5XHViNGNhXHViNGNiXHViNGNjXHViNGNkXHViNGNlXHViNGNmXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2XHViNGQ3XHViNGQ4XHViNGQ5XHViNGRhXHViNGRiXHViNGRlXHVi'@;
put 'NGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3XHViNGU4XHViNGU5XHViNGVhXHViNGViXHViNGVlXHViNGYwXHViNGYyXHViNGYzXHViNGY0XHViNGY1XHViNGY2XHViNGY3XHViNGY5XHViNGZhXHViNGZiXHViNGZjXHViNGZkXHViNGZlXHViNGZmXHViNTAwXHViNTAxXHViNTAyXHViNTAz'@;
put 'XHViNTA0XHViNTA1XHViNTA2XHViNTA3XHViNTA4XHViNTA5XHViNTBhXHViNTBiXHViNTBjXHViNTBkXHViNTBlXHViNTBmXHViNTEwXHViNTExXHViNTEyXHViNTEzXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM4XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOF1bbV1dPTM1MzI4K20sRlszNTMyOCttXT14WzEzOF1bbV0pO2Zvcih4WzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjUxZVx1YjUx'@;
put 'Zlx1YjUyMFx1YjUyMVx1YjUyMlx1YjUyM1x1YjUyNlx1YjUyYlx1YjUyY1x1YjUyZFx1YjUyZVx1YjUyZlx1YjUzMlx1YjUzM1x1YjUzNVx1YjUzNlx1YjUzN1x1YjUzOVx1YjUzYVx1YjUzYlx1YjUzY1x1YjUzZFx1YjUzZVx1YjUzZlx1YjU0Mlx1YjU0Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1YjU0Zlx1YjU1MVx1YjU1Mlx1YjU1M1x1YjU1NVx1YjU1Nlx1YjU1N1x1YjU1OFx1YjU1OVx1YjU1YVx1YjU1Ylx1YjU1ZVx1YjU2Mlx1YjU2M1x1YjU2NFx1YjU2NVx1YjU2Nlx1YjU2N1x1YjU2OFx1YjU2'@;
put 'OVx1YjU2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU2Ylx1YjU2Y1x1YjU2ZFx1YjU2ZVx1YjU2Zlx1YjU3MFx1YjU3MVx1YjU3Mlx1YjU3M1x1YjU3NFx1YjU3NVx1YjU3Nlx1YjU3N1x1YjU3OFx1YjU3OVx1YjU3YVx1YjU3Ylx1YjU3Y1x1YjU3ZFx1YjU3ZVx1'@;
put 'YjU3Zlx1YjU4MFx1YjU4MVx1YjU4Mlx1YjU4M1x1YjU4NFx1YjU4NVx1YjU4Nlx1YjU4N1x1YjU4OFx1YjU4OVx1YjU4YVx1YjU4Ylx1YjU4Y1x1YjU4ZFx1YjU4ZVx1YjU4Zlx1YjU5MFx1YjU5MVx1YjU5Mlx1YjU5M1x1YjU5NFx1YjU5NVx1YjU5Nlx1YjU5N1x1YjU5OFx1YjU5OVx1YjU5'@;
put 'YVx1YjU5Ylx1YjU5Y1x1YjU5ZFx1YjU5ZVx1YjU5Zlx1YjVhMlx1YjVhM1x1YjVhNVx1YjVhNlx1YjVhN1x1YjVhOVx1YjVhY1x1YjVhZFx1YjVhZVx1YjVhZlx1YjViMlx1YjViNlx1YjViN1x1YjViOFx1YjViOVx1YjViYVx1YjViZVx1YjViZlx1YjVjMVx1YjVjMlx1YjVjM1x1YjVjNVx1'@;
put 'YjVjNlx1YjVjN1x1YjVjOFx1YjVjOVx1YjVjYVx1YjVjYlx1YjVjZVx1YjVkMlx1YjVkM1x1YjVkNFx1YjVkNVx1YjVkNlx1YjVkN1x1YjVkOVx1YjVkYVx1YjVkYlx1YjVkY1x1YjVkZFx1YjVkZVx1YjVkZlx1YjVlMFx1YjVlMVx1YjVlMlx1YjVlM1x1YjVlNFx1YjVlNVx1YjVlNlx1YjVl'@;
put 'N1x1YjVlOFx1YjVlOVx1YjVlYVx1YjVlYlx1YjVlZFx1YjVlZVx1YjVlZlx1YjVmMFx1YjVmMVx1YjVmMlx1YjVmM1x1YjVmNFx1YjVmNVx1YjVmNlx1YjVmN1x1YjVmOFx1YjVmOVx1YjVmYVx1YjVmYlx1YjVmY1x1YjVmZFx1YjVmZVx1YjVmZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzEzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzldW21dXT0zNTU4NCttLEZbMzU1ODQrbV09eFsxMzldW21dKTtmb3IoeFsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNcdWI2MGRcdWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2MjdcdWI2MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2'@;
put 'MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2VcdWI2M2ZcdWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRc'@;
put 'dWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2NWJcdWI2NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2'@;
put 'NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2NzhcdWI2NzlcdWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZc'@;
put 'dWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2OTRcdWI2OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2'@;
put 'YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZcdWI2YjdcdWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQwXVttXV09MzU4NDArbSxGWzM1ODQwK21dPXhbMTQwXVttXSk7Zm9yKHhbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHViNmMzXHViNmM0XHViNmM1XHViNmM2XHViNmM3XHViNmM4XHViNmM5XHViNmNhXHViNmNiXHViNmNjXHViNmNkXHViNmNlXHViNmNmXHViNmQwXHViNmQxXHViNmQyXHViNmQzXHViNmQ1XHViNmQ2XHViNmQ3XHViNmQ4XHViNmQ5XHViNmRhXHViNmRiXHViNmRj'@;
put 'XHViNmRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmRlXHViNmRmXHViNmUwXHViNmUxXHViNmUyXHViNmUzXHViNmU0XHViNmU1XHViNmU2XHViNmU3XHViNmU4XHViNmU5XHViNmVhXHViNmViXHViNmVjXHViNmVkXHViNmVlXHViNmVmXHViNmYxXHViNmYyXHVi'@;
put 'NmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmZiXHViNmZjXHViNmZkXHViNmZlXHViNmZmXHViNzAyXHViNzAzXHViNzA0XHViNzA2XHViNzA3XHViNzA4XHViNzA5XHViNzBhXHViNzBiXHViNzBjXHViNzBk'@;
put 'XHViNzBlXHViNzBmXHViNzEwXHViNzExXHViNzEyXHViNzEzXHViNzE0XHViNzE1XHViNzE2XHViNzE3XHViNzE4XHViNzE5XHViNzFhXHViNzFiXHViNzFjXHViNzFkXHViNzFlXHViNzFmXHViNzIwXHViNzIxXHViNzIyXHViNzIzXHViNzI0XHViNzI1XHViNzI2XHViNzI3XHViNzJhXHVi'@;
put 'NzJiXHViNzJkXHViNzJlXHViNzMxXHViNzMyXHViNzMzXHViNzM0XHViNzM1XHViNzM2XHViNzM3XHViNzNhXHViNzNjXHViNzNkXHViNzNlXHViNzNmXHViNzQwXHViNzQxXHViNzQyXHViNzQzXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkXHViNzRlXHViNzRm'@;
put 'XHViNzUwXHViNzUxXHViNzUyXHViNzUzXHViNzU2XHViNzU3XHViNzU4XHViNzU5XHViNzVhXHViNzViXHViNzVjXHViNzVkXHViNzVlXHViNzVmXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5XHViNzZhXHViNzZiXHViNzZjXHViNzZkXHViNzZlXHViNzZmXHVi'@;
put 'NzcyXHViNzc0XHViNzc2XHViNzc3XHViNzc4XHViNzc5XHViNzdhXHViNzdiXHViNzdlXHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1XHViNzg2XHViNzg3XHViNzg4XHViNzg5XHViNzhhXHViNzhiXHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzll'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MV1bbV1dPTM2MDk2K20sRlszNjA5NittXT14WzE0MV1bbV0pO2Zvcih4WzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjc5Zlx1YjdhMVx1YjdhMlx1YjdhM1x1YjdhNFx1YjdhNVx1YjdhNlx1YjdhN1x1YjdhYVx1YjdhZVx1YjdhZlx1YjdiMFx1YjdiMVx1YjdiMlx1YjdiM1x1YjdiNlx1YjdiN1x1YjdiOVx1YjdiYVx1YjdiYlx1YjdiY1x1YjdiZFx1Yjdi'@;
put 'ZVx1YjdiZlx1YjdjMFx1YjdjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjdjMlx1YjdjM1x1YjdjNFx1YjdjNVx1YjdjNlx1YjdjOFx1YjdjYVx1YjdjYlx1YjdjY1x1YjdjZFx1YjdjZVx1YjdjZlx1YjdkMFx1YjdkMVx1YjdkMlx1YjdkM1x1YjdkNFx1YjdkNVx1'@;
put 'YjdkNlx1YjdkN1x1YjdkOFx1YjdkOVx1YjdkYVx1YjdkYlx1YjdkY1x1YjdkZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjdkZVx1YjdkZlx1YjdlMFx1YjdlMVx1YjdlMlx1YjdlM1x1YjdlNFx1YjdlNVx1YjdlNlx1YjdlN1x1YjdlOFx1YjdlOVx1YjdlYVx1Yjdl'@;
put 'Ylx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNVx1YjdmNlx1YjdmN1x1YjdmOFx1YjdmOVx1YjdmYVx1YjdmYlx1YjdmZVx1YjgwMlx1YjgwM1x1YjgwNFx1YjgwNVx1YjgwNlx1YjgwYVx1YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1YjgxMVx1YjgxMlx1YjgxM1x1YjgxNFx1'@;
put 'YjgxNVx1YjgxNlx1YjgxN1x1YjgxYVx1YjgxY1x1YjgxZVx1YjgxZlx1YjgyMFx1YjgyMVx1YjgyMlx1YjgyM1x1YjgyNlx1YjgyN1x1YjgyOVx1YjgyYVx1YjgyYlx1YjgyZFx1YjgyZVx1YjgyZlx1YjgzMFx1YjgzMVx1YjgzMlx1YjgzM1x1YjgzNlx1YjgzYVx1YjgzYlx1YjgzY1x1Yjgz'@;
put 'ZFx1YjgzZVx1YjgzZlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NVx1Yjg0Nlx1Yjg0N1x1Yjg0OFx1Yjg0OVx1Yjg0YVx1Yjg0Ylx1Yjg0Y1x1Yjg0ZFx1Yjg0ZVx1Yjg0Zlx1Yjg1MFx1Yjg1Mlx1Yjg1NFx1Yjg1NVx1Yjg1Nlx1Yjg1N1x1Yjg1OFx1Yjg1OVx1Yjg1YVx1Yjg1Ylx1Yjg1ZVx1'@;
put 'Yjg1Zlx1Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NVx1Yjg2Nlx1Yjg2N1x1Yjg2OFx1Yjg2OVx1Yjg2YVx1Yjg2Ylx1Yjg2ZVx1Yjg3MFx1Yjg3Mlx1Yjg3M1x1Yjg3NFx1Yjg3NVx1Yjg3Nlx1Yjg3N1x1Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZFx1Yjg3ZVx1Yjg3Zlx1Yjg4MFx1Yjg4MVx1Yjg4'@;
put 'Mlx1Yjg4M1x1Yjg4NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDJdW21dXT0zNjM1MittLEZbMzYzNTIrbV09eFsxNDJdW21dKTtmb3IoeFsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJcdWI4OGNcdWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4'@;
put 'OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4YTJcdWI4YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFc'@;
put 'dWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4'@;
put 'Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4ZTBcdWI4ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJc'@;
put 'dWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVcdWI5MDZcdWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5'@;
put 'MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5MjNcdWI5MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBc'@;
put 'dWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5'@;
put 'NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQzXVttXV09MzY2MDgrbSxGWzM2NjA4K21dPXhbMTQzXVttXSk7Zm9yKHhbMTQ0XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxXHViOTYyXHViOTYzXHViOTY0XHViOTY1XHViOTY2XHViOTY3XHViOTZhXHViOTZjXHViOTZlXHViOTZmXHViOTcwXHViOTcxXHVi'@;
put 'OTcyXHViOTczXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTdlXHViOTdmXHViOTgwXHViOTgxXHViOTgyXHViOTgzXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmXHViOTkwXHViOTkxXHViOTky'@;
put 'XHViOTkzXHViOTk0XHViOTk1XHViOTk2XHViOTk3XHViOTk4XHViOTk5XHViOTlhXHViOTliXHViOTljXHViOTlkXHViOTllXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTlmXHViOWEwXHViOWExXHViOWEyXHViOWEzXHViOWE0XHViOWE1XHViOWE2XHViOWE3XHVi'@;
put 'OWE4XHViOWE5XHViOWFhXHViOWFiXHViOWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1XHViOWI2XHViOWI3XHViOWI4XHViOWI5XHViOWJhXHViOWJiXHViOWJlXHViOWMwXHViOWMyXHViOWMzXHViOWM0XHViOWM1XHViOWM2XHViOWM3XHViOWNhXHViOWNiXHViOWNkXHViOWQz'@;
put 'XHViOWQ0XHViOWQ1XHViOWQ2XHViOWQ3XHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkXHViOWVlXHViOWVmXHViOWYwXHViOWYxXHViOWYyXHViOWYzXHViOWY2XHViOWZiXHViOWZjXHViOWZkXHViOWZlXHViOWZmXHVi'@;
put 'YTAyXHViYTAzXHViYTA0XHViYTA1XHViYTA2XHViYTA3XHViYTA5XHViYTBhXHViYTBiXHViYTBjXHViYTBkXHViYTBlXHViYTBmXHViYTEwXHViYTExXHViYTEyXHViYTEzXHViYTE0XHViYTE2XHViYTE3XHViYTE4XHViYTE5XHViYTFhXHViYTFiXHViYTFjXHViYTFkXHViYTFlXHViYTFm'@;
put 'XHViYTIwXHViYTIxXHViYTIyXHViYTIzXHViYTI0XHViYTI1XHViYTI2XHViYTI3XHViYTI4XHViYTI5XHViYTJhXHViYTJiXHViYTJjXHViYTJkXHViYTJlXHViYTJmXHViYTMwXHViYTMxXHViYTMyXHViYTMzXHViYTM0XHViYTM1XHViYTM2XHViYTM3XHViYTNhXHViYTNiXHViYTNkXHVi'@;
put 'YTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NF1bbV1dPTM2ODY0K20sRlszNjg2NCttXT14WzE0NF1bbV0pO2Zvcih4'@;
put 'WzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE0N1x1YmE0YVx1YmE0Y1x1YmE0Zlx1YmE1MFx1YmE1MVx1YmE1Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1YmE1ZFx1YmE1ZVx1YmE1Zlx1YmE2MFx1'@;
put 'YmE2MVx1YmE2Mlx1YmE2M1x1YmE2Nlx1YmE2YVx1YmE2Ylx1YmE2Y1x1YmE2ZFx1YmE2ZVx1YmE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE3Mlx1YmE3M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OVx1YmE3YVx1YmE3Ylx1YmE3Y1x1YmE3ZFx1YmE3ZVx1YmE3'@;
put 'Zlx1YmE4MFx1YmE4MVx1YmE4Mlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4Ylx1YmE4ZFx1YmE4ZVx1YmE4Zlx1YmE5MFx1YmE5MVx1YmE5Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE5M1x1YmE5NFx1YmE5NVx1YmE5Nlx1YmE5N1x1YmE5OFx1YmE5OVx1'@;
put 'YmE5YVx1YmE5Ylx1YmE5Y1x1YmE5ZFx1YmE5ZVx1YmE5Zlx1YmFhMFx1YmFhMVx1YmFhMlx1YmFhM1x1YmFhNFx1YmFhNVx1YmFhNlx1YmFhN1x1YmFhYVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiM1x1YmFiNFx1YmFiNVx1YmFiNlx1YmFiN1x1YmFiYVx1YmFiY1x1YmFiZVx1YmFi'@;
put 'Zlx1YmFjMFx1YmFjMVx1YmFjMlx1YmFjM1x1YmFjNVx1YmFjNlx1YmFjN1x1YmFjOVx1YmFjYVx1YmFjYlx1YmFjY1x1YmFjZFx1YmFjZVx1YmFjZlx1YmFkMFx1YmFkMVx1YmFkMlx1YmFkM1x1YmFkNFx1YmFkNVx1YmFkNlx1YmFkN1x1YmFkYVx1YmFkYlx1YmFkY1x1YmFkZFx1YmFkZVx1'@;
put 'YmFkZlx1YmFlMFx1YmFlMVx1YmFlMlx1YmFlM1x1YmFlNFx1YmFlNVx1YmFlNlx1YmFlN1x1YmFlOFx1YmFlOVx1YmFlYVx1YmFlYlx1YmFlY1x1YmFlZFx1YmFlZVx1YmFlZlx1YmFmMFx1YmFmMVx1YmFmMlx1YmFmM1x1YmFmNFx1YmFmNVx1YmFmNlx1YmFmN1x1YmFmOFx1YmFmOVx1YmFm'@;
put 'YVx1YmFmYlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIwNVx1YmIwNlx1YmIwN1x1YmIwOFx1YmIwOVx1YmIwYVx1YmIwYlx1YmIwY1x1YmIwZVx1YmIxMFx1YmIxMlx1YmIxM1x1YmIxNFx1YmIxNVx1YmIxNlx1YmIxN1x1YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1'@;
put 'YmIxZVx1YmIxZlx1YmIyMVx1YmIyMlx1YmIyM1x1YmIyNFx1YmIyNVx1YmIyNlx1YmIyN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDVdW21dXT0zNzEyMCttLEZbMzcxMjArbV09eFsx'@;
put 'NDVdW21dKTtmb3IoeFsxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhcdWJiMmFcdWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2Zc'@;
put 'dWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJi'@;
put 'NWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZcdWJiNzBcdWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZc'@;
put 'dWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJiODVcdWJiODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJi'@;
put 'OTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNcdWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNc'@;
put 'dWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJi'@;
put 'ZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRcdWJiZTVcdWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFc'@;
put 'dWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ2XVttXV09MzczNzYrbSxG'@;
put 'WzM3Mzc2K21dPXhbMTQ2XVttXSk7Zm9yKHhbMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzAzXHViYzA0XHViYzA1XHViYzA2XHViYzA3XHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5XHViYzFh'@;
put 'XHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzM2XHViYzM3XHViYzM5XHViYzNhXHViYzNiXHViYzNjXHViYzNkXHVi'@;
put 'YzNlXHViYzNmXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHViYzRlXHViYzRmXHViYzUxXHViYzUyXHViYzUzXHViYzU0XHViYzU1XHViYzU2XHViYzU3XHViYzU4XHViYzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzVhXHViYzViXHViYzVj'@;
put 'XHViYzVlXHViYzVmXHViYzYwXHViYzYxXHViYzYyXHViYzYzXHViYzY0XHViYzY1XHViYzY2XHViYzY3XHViYzY4XHViYzY5XHViYzZhXHViYzZiXHViYzZjXHViYzZkXHViYzZlXHViYzZmXHViYzcwXHViYzcxXHViYzcyXHViYzczXHViYzc0XHViYzc1XHViYzc2XHViYzc3XHViYzc4XHVi'@;
put 'Yzc5XHViYzdhXHViYzdiXHViYzdjXHViYzdkXHViYzdlXHViYzdmXHViYzgwXHViYzgxXHViYzgyXHViYzgzXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmXHViYzkwXHViYzkxXHViYzkyXHViYzkzXHViYzk2XHViYzk4XHViYzliXHViYzljXHViYzlkXHViYzllXHViYzlm'@;
put 'XHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5XHViY2FhXHViY2FiXHViY2FjXHViY2FkXHViY2FlXHViY2FmXHViY2IyXHViY2I2XHViY2I3XHViY2I4XHViY2I5XHViY2JhXHViY2JiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHViY2M1XHViY2M2XHViY2M3XHViY2M4XHVi'@;
put 'Y2M5XHViY2NhXHViY2NiXHViY2NjXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkXHViY2RlXHViY2RmXHViY2UwXHViY2UxXHViY2UyXHViY2UzXHViY2U0XHViY2U1XHViY2U2XHViY2U3XHViY2U4XHViY2U5XHViY2VhXHViY2Vi'@;
put 'XHViY2VjXHViY2VkXHViY2VlXHViY2VmXHViY2YwXHViY2YxXHViY2YyXHViY2YzXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0N11b'@;
put 'bV1dPTM3NjMyK20sRlszNzYzMittXT14WzE0N11bbV0pO2Zvcih4WzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmNmZVx1YmNmZlx1YmQwMFx1YmQwMVx1YmQwMlx1YmQwM1x1YmQwNlx1YmQwOFx1YmQwYVx1YmQw'@;
put 'Ylx1YmQwY1x1YmQwZFx1YmQwZVx1YmQwZlx1YmQxMVx1YmQxMlx1YmQxM1x1YmQxNVx1YmQxNlx1YmQxN1x1YmQxOFx1YmQxOVx1YmQxYVx1YmQxYlx1YmQxY1x1YmQxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQxZVx1YmQxZlx1YmQyMFx1YmQyMVx1YmQyMlx1'@;
put 'YmQyM1x1YmQyNVx1YmQyNlx1YmQyN1x1YmQyOFx1YmQyOVx1YmQyYVx1YmQyYlx1YmQyZFx1YmQyZVx1YmQyZlx1YmQzMFx1YmQzMVx1YmQzMlx1YmQzM1x1YmQzNFx1YmQzNVx1YmQzNlx1YmQzN1x1YmQzOFx1YmQzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQz'@;
put 'YVx1YmQzYlx1YmQzY1x1YmQzZFx1YmQzZVx1YmQzZlx1YmQ0MVx1YmQ0Mlx1YmQ0M1x1YmQ0NFx1YmQ0NVx1YmQ0Nlx1YmQ0N1x1YmQ0YVx1YmQ0Ylx1YmQ0ZFx1YmQ0ZVx1YmQ0Zlx1YmQ1MVx1YmQ1Mlx1YmQ1M1x1YmQ1NFx1YmQ1NVx1YmQ1Nlx1YmQ1N1x1YmQ1YVx1YmQ1Ylx1YmQ1Y1x1'@;
put 'YmQ1ZFx1YmQ1ZVx1YmQ1Zlx1YmQ2MFx1YmQ2MVx1YmQ2Mlx1YmQ2M1x1YmQ2NVx1YmQ2Nlx1YmQ2N1x1YmQ2OVx1YmQ2YVx1YmQ2Ylx1YmQ2Y1x1YmQ2ZFx1YmQ2ZVx1YmQ2Zlx1YmQ3MFx1YmQ3MVx1YmQ3Mlx1YmQ3M1x1YmQ3NFx1YmQ3NVx1YmQ3Nlx1YmQ3N1x1YmQ3OFx1YmQ3OVx1YmQ3'@;
put 'YVx1YmQ3Ylx1YmQ3Y1x1YmQ3ZFx1YmQ3ZVx1YmQ3Zlx1YmQ4Mlx1YmQ4M1x1YmQ4NVx1YmQ4Nlx1YmQ4Ylx1YmQ4Y1x1YmQ4ZFx1YmQ4ZVx1YmQ4Zlx1YmQ5Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5Ylx1YmQ5ZFx1YmQ5ZVx1YmQ5Zlx1YmRhMFx1YmRhMVx1YmRhMlx1YmRhM1x1'@;
put 'YmRhNVx1YmRhNlx1YmRhN1x1YmRhOFx1YmRhOVx1YmRhYVx1YmRhYlx1YmRhY1x1YmRhZFx1YmRhZVx1YmRhZlx1YmRiMVx1YmRiMlx1YmRiM1x1YmRiNFx1YmRiNVx1YmRiNlx1YmRiN1x1YmRiOVx1YmRiYVx1YmRiYlx1YmRiY1x1YmRiZFx1YmRiZVx1YmRiZlx1YmRjMFx1YmRjMVx1YmRj'@;
put 'Mlx1YmRjM1x1YmRjNFx1YmRjNVx1YmRjNlx1YmRjN1x1YmRjOFx1YmRjOVx1YmRjYVx1YmRjYlx1YmRjY1x1YmRjZFx1YmRjZVx1YmRjZlx1YmRkMFx1YmRkMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ4XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxNDhdW21dXT0zNzg4OCttLEZbMzc4ODgrbV09eFsxNDhdW21dKTtmb3IoeFsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJk'@;
put 'ZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJkZWRcdWJkZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVc'@;
put 'dWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhcdWJlMDlcdWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJlMjVcdWJlMjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFc'@;
put 'dWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBcdWJlNDFcdWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJl'@;
put 'NTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJlNmNcdWJlNmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFc'@;
put 'dWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZcdWJlOTdcdWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJl'@;
put 'YTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJlYjVcdWJlYjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0OV1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ5XVttXV09MzgxNDQrbSxGWzM4MTQ0K21dPXhbMTQ5XVttXSk7Zm9yKHhbMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWI4XHViZWI5XHViZWJhXHViZWJiXHViZWJjXHVi'@;
put 'ZWJkXHViZWJlXHViZWJmXHViZWMwXHViZWMxXHViZWMyXHViZWMzXHViZWM0XHViZWM1XHViZWM2XHViZWM3XHViZWM4XHViZWM5XHViZWNhXHViZWNiXHViZWNjXHViZWNkXHViZWNlXHViZWNmXHViZWQyXHViZWQzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWQ1'@;
put 'XHViZWQ2XHViZWQ5XHViZWRhXHViZWRiXHViZWRjXHViZWRkXHViZWRlXHViZWRmXHViZWUxXHViZWUyXHViZWU2XHViZWU3XHViZWU4XHViZWU5XHViZWVhXHViZWViXHViZWVkXHViZWVlXHViZWVmXHViZWYwXHViZWYxXHViZWYyXHViZWYzXHViZWY0XHViZWY1XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWY2XHViZWY3XHViZWY4XHViZWY5XHViZWZhXHViZWZiXHViZWZjXHViZWZkXHViZWZlXHViZWZmXHViZjAwXHViZjAyXHViZjAzXHViZjA0XHViZjA1XHViZjA2XHViZjA3XHViZjBhXHViZjBiXHViZjBjXHViZjBkXHViZjBlXHViZjBmXHViZjEw'@;
put 'XHViZjExXHViZjEyXHViZjEzXHViZjE0XHViZjE1XHViZjE2XHViZjE3XHViZjFhXHViZjFlXHViZjFmXHViZjIwXHViZjIxXHViZjIyXHViZjIzXHViZjI0XHViZjI1XHViZjI2XHViZjI3XHViZjI4XHViZjI5XHViZjJhXHViZjJiXHViZjJjXHViZjJkXHViZjJlXHViZjJmXHViZjMwXHVi'@;
put 'ZjMxXHViZjMyXHViZjMzXHViZjM0XHViZjM1XHViZjM2XHViZjM3XHViZjM4XHViZjM5XHViZjNhXHViZjNiXHViZjNjXHViZjNkXHViZjNlXHViZjNmXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5XHViZjRhXHViZjRiXHViZjRjXHViZjRkXHViZjRlXHViZjRmXHViZjUy'@;
put 'XHViZjUzXHViZjU0XHViZjU2XHViZjU3XHViZjU4XHViZjU5XHViZjVhXHViZjViXHViZjVjXHViZjVkXHViZjVlXHViZjVmXHViZjYwXHViZjYxXHViZjYyXHViZjYzXHViZjY0XHViZjY1XHViZjY2XHViZjY3XHViZjY4XHViZjY5XHViZjZhXHViZjZiXHViZjZjXHViZjZkXHViZjZlXHVi'@;
put 'ZjZmXHViZjcwXHViZjcxXHViZjcyXHViZjczXHViZjc0XHViZjc1XHViZjc2XHViZjc3XHViZjc4XHViZjc5XHViZjdhXHViZjdiXHViZjdjXHViZjdkXHViZjdlXHViZjdmXHViZjgwXHViZjgxXHViZjgyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUwXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxNTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1MF1bbV1dPTM4NDAwK20sRlszODQwMCttXT14WzE1MF1bbV0pO2Zvcih4WzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmY4M1x1YmY4NFx1YmY4NVx1'@;
put 'YmY4Nlx1YmY4N1x1YmY4OFx1YmY4OVx1YmY4YVx1YmY4Ylx1YmY4Y1x1YmY4ZFx1YmY4ZVx1YmY4Zlx1YmY5MFx1YmY5MVx1YmY5Mlx1YmY5M1x1YmY5NVx1YmY5Nlx1YmY5N1x1YmY5OFx1YmY5OVx1YmY5YVx1YmY5Ylx1YmY5Y1x1YmY5ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1YmY5ZVx1YmY5Zlx1YmZhMFx1YmZhMVx1YmZhMlx1YmZhM1x1YmZhNFx1YmZhNVx1YmZhNlx1YmZhN1x1YmZhOFx1YmZhOVx1YmZhYVx1YmZhYlx1YmZhY1x1YmZhZFx1YmZhZVx1YmZhZlx1YmZiMVx1YmZiMlx1YmZiM1x1YmZiNFx1YmZiNVx1YmZiNlx1YmZiN1x1YmZiOFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmZiOVx1YmZiYVx1YmZiYlx1YmZiY1x1YmZiZFx1YmZiZVx1YmZiZlx1YmZjMFx1YmZjMVx1YmZjMlx1YmZjM1x1YmZjNFx1YmZjNlx1YmZjN1x1YmZjOFx1YmZjOVx1YmZjYVx1YmZjYlx1YmZjZVx1YmZjZlx1YmZkMVx1YmZk'@;
put 'Mlx1YmZkM1x1YmZkNVx1YmZkNlx1YmZkN1x1YmZkOFx1YmZkOVx1YmZkYVx1YmZkYlx1YmZkZFx1YmZkZVx1YmZlMFx1YmZlMlx1YmZlM1x1YmZlNFx1YmZlNVx1YmZlNlx1YmZlN1x1YmZlOFx1YmZlOVx1YmZlYVx1YmZlYlx1YmZlY1x1YmZlZFx1YmZlZVx1YmZlZlx1YmZmMFx1YmZmMVx1'@;
put 'YmZmMlx1YmZmM1x1YmZmNFx1YmZmNVx1YmZmNlx1YmZmN1x1YmZmOFx1YmZmOVx1YmZmYVx1YmZmYlx1YmZmY1x1YmZmZFx1YmZmZVx1YmZmZlx1YzAwMFx1YzAwMVx1YzAwMlx1YzAwM1x1YzAwNFx1YzAwNVx1YzAwNlx1YzAwN1x1YzAwOFx1YzAwOVx1YzAwYVx1YzAwYlx1YzAwY1x1YzAw'@;
put 'ZFx1YzAwZVx1YzAwZlx1YzAxMFx1YzAxMVx1YzAxMlx1YzAxM1x1YzAxNFx1YzAxNVx1YzAxNlx1YzAxN1x1YzAxOFx1YzAxOVx1YzAxYVx1YzAxYlx1YzAxY1x1YzAxZFx1YzAxZVx1YzAxZlx1YzAyMFx1YzAyMVx1YzAyMlx1YzAyM1x1YzAyNFx1YzAyNVx1YzAyNlx1YzAyN1x1YzAyOFx1'@;
put 'YzAyOVx1YzAyYVx1YzAyYlx1YzAyY1x1YzAyZFx1YzAyZVx1YzAyZlx1YzAzMFx1YzAzMVx1YzAzMlx1YzAzM1x1YzAzNFx1YzAzNVx1YzAzNlx1YzAzN1x1YzAzOFx1YzAzOVx1YzAzYVx1YzAzYlx1YzAzZFx1YzAzZVx1YzAzZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1MV0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTFdW21dXT0zODY1NittLEZbMzg2NTYrbV09eFsxNTFdW21dKTtmb3IoeFsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBc'@;
put 'dWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMwNTBcdWMwNTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJcdWMwNmNcdWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdc'@;
put 'dWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMwODFcdWMwODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMw'@;
put 'OGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJcdWMwYTRcdWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhc'@;
put 'dWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMwZDJcdWMwZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMw'@;
put 'ZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFcdWMwZmJcdWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlc'@;
put 'dWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMxMWJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUyXVttXV09Mzg5MTIrbSxGWzM4OTEyK21dPXhbMTUyXVttXSk7Zm9yKHhbMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxXHVjMTQyXHVjMTQzXHVjMTQ0XHVjMTQ1XHVjMTQ2XHVjMTQ3XHVjMTRhXHVjMTRlXHVjMTRmXHVjMTUwXHVjMTUxXHVjMTUyXHVjMTUzXHVjMTU2XHVjMTU3XHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkXHVjMTVlXHVjMTVmXHVjMTYwXHVjMTYxXHVjMTYyXHVjMTYzXHVjMTY2XHVjMTZhXHVjMTZiXHVjMTZjXHVjMTZkXHVjMTZlXHVjMTZmXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2'@;
put 'XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTdjXHVjMTdkXHVjMTdlXHVjMTdmXHVjMTgwXHVjMTgxXHVjMTgyXHVjMTgzXHVjMTg0XHVjMTg2XHVjMTg3XHVjMTg4XHVjMTg5XHVjMThhXHVjMThiXHVjMThmXHVjMTkxXHVj'@;
put 'MTkyXHVjMTkzXHVjMTk1XHVjMTk3XHVjMTk4XHVjMTk5XHVjMTlhXHVjMTliXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxXHVjMWIyXHVjMWIzXHVjMWI0XHVjMWI1XHVjMWI2XHVjMWI3XHVjMWI4'@;
put 'XHVjMWI5XHVjMWJhXHVjMWJiXHVjMWJjXHVjMWJlXHVjMWJmXHVjMWMwXHVjMWMxXHVjMWMyXHVjMWMzXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkXHVjMWNlXHVjMWNmXHVjMWQwXHVjMWQxXHVjMWQyXHVjMWQzXHVjMWQ1XHVjMWQ2XHVjMWQ5XHVjMWRhXHVj'@;
put 'MWRiXHVjMWRjXHVjMWRkXHVjMWRlXHVjMWRmXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5XHVjMWVhXHVjMWViXHVjMWVjXHVjMWVkXHVjMWVlXHVjMWVmXHVjMWYyXHVjMWY0XHVjMWY1XHVjMWY2XHVjMWY3XHVjMWY4XHVjMWY5XHVjMWZhXHVjMWZiXHVjMWZl'@;
put 'XHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1XHVjMjA2XHVjMjA3XHVjMjA4XHVjMjA5XHVjMjBhXHVjMjBiXHVjMjBlXHVjMjEwXHVjMjEyXHVjMjEzXHVjMjE0XHVjMjE1XHVjMjE2XHVjMjE3XHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1M11bbV1dPTM5MTY4K20sRlszOTE2OCttXT14WzE1M11bbV0pO2Zvcih4WzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIyYVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIzM1x1YzIzNVx1YzIzNlx1YzIzN1x1YzIzOFx1YzIzOVx1YzIzYVx1YzIzYlx1YzIzY1x1YzIzZFx1YzIzZVx1YzIzZlx1YzI0MFx1YzI0MVx1YzI0Mlx1YzI0M1x1'@;
put 'YzI0NFx1YzI0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI0Nlx1YzI0N1x1YzI0OVx1YzI0YVx1YzI0Ylx1YzI0Y1x1YzI0ZFx1YzI0ZVx1YzI0Zlx1YzI1Mlx1YzI1M1x1YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OVx1YzI1YVx1YzI1Ylx1YzI1Y1x1YzI1ZFx1YzI1'@;
put 'ZVx1YzI1Zlx1YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI2N1x1YzI2OFx1YzI2OVx1YzI2YVx1YzI2Ylx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3NVx1YzI3Nlx1YzI3N1x1YzI3OFx1YzI3OVx1'@;
put 'YzI3YVx1YzI3Ylx1YzI3ZVx1YzI4MFx1YzI4Mlx1YzI4M1x1YzI4NFx1YzI4NVx1YzI4Nlx1YzI4N1x1YzI4YVx1YzI4Ylx1YzI4Y1x1YzI4ZFx1YzI4ZVx1YzI4Zlx1YzI5MVx1YzI5Mlx1YzI5M1x1YzI5NFx1YzI5NVx1YzI5Nlx1YzI5N1x1YzI5OVx1YzI5YVx1YzI5Y1x1YzI5ZVx1YzI5'@;
put 'Zlx1YzJhMFx1YzJhMVx1YzJhMlx1YzJhM1x1YzJhNlx1YzJhN1x1YzJhOVx1YzJhYVx1YzJhYlx1YzJhZVx1YzJhZlx1YzJiMFx1YzJiMVx1YzJiMlx1YzJiM1x1YzJiNlx1YzJiOFx1YzJiYVx1YzJiYlx1YzJiY1x1YzJiZFx1YzJiZVx1YzJiZlx1YzJjMFx1YzJjMVx1YzJjMlx1YzJjM1x1'@;
put 'YzJjNFx1YzJjNVx1YzJjNlx1YzJjN1x1YzJjOFx1YzJjOVx1YzJjYVx1YzJjYlx1YzJjY1x1YzJjZFx1YzJjZVx1YzJjZlx1YzJkMFx1YzJkMVx1YzJkMlx1YzJkM1x1YzJkNFx1YzJkNVx1YzJkNlx1YzJkN1x1YzJkOFx1YzJkOVx1YzJkYVx1YzJkYlx1YzJkZVx1YzJkZlx1YzJlMVx1YzJl'@;
put 'Mlx1YzJlNVx1YzJlNlx1YzJlN1x1YzJlOFx1YzJlOVx1YzJlYVx1YzJlZVx1YzJmMFx1YzJmMlx1YzJmM1x1YzJmNFx1YzJmNVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJmZVx1YzJmZlx1YzMwMVx1YzMwMlx1YzMwM1x1YzMwNFx1YzMwNVx1YzMwNlx1YzMwN1x1YzMwYVx1YzMwYlx1YzMwZVx1'@;
put 'YzMwZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTRdW21dXT0zOTQyNCttLEZbMzk0MjQrbV09eFsxNTRdW21dKTtmb3IoeFsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMzMWZcdWMzMjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVc'@;
put 'dWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhcdWMzMzlcdWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMz'@;
put 'NDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMzNGZcdWMzNTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFc'@;
put 'dWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMz'@;
put 'N2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMzOTJcdWMzOTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRc'@;
put 'dWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRcdWMzYWVcdWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMz'@;
put 'YjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMzY2FcdWMzY2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVc'@;
put 'dWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU1XVttXV09Mzk2ODArbSxGWzM5NjgwK21dPXhbMTU1XVttXSk7Zm9yKHhbMTU2XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzXHVjM2U0XHVjM2U1XHVjM2U2XHVjM2U3XHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlXHVjM2VmXHVjM2YwXHVjM2YxXHVjM2YyXHVjM2YzXHVjM2Y2XHVjM2Y3'@;
put 'XHVjM2Y5XHVjM2ZhXHVjM2ZiXHVjM2ZjXHVjM2ZkXHVjM2ZlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2ZmXHVjNDAwXHVjNDAxXHVjNDAyXHVjNDAzXHVjNDA0XHVjNDA1XHVjNDA2XHVjNDA3XHVjNDA5XHVjNDBhXHVjNDBiXHVjNDBjXHVjNDBkXHVjNDBlXHVj'@;
put 'NDBmXHVjNDExXHVjNDEyXHVjNDEzXHVjNDE0XHVjNDE1XHVjNDE2XHVjNDE3XHVjNDE4XHVjNDE5XHVjNDFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNDFiXHVjNDFjXHVjNDFkXHVjNDFlXHVjNDFmXHVjNDIwXHVjNDIxXHVjNDIyXHVjNDIzXHVjNDI1XHVjNDI2'@;
put 'XHVjNDI3XHVjNDI4XHVjNDI5XHVjNDJhXHVjNDJiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1XHVjNDM2XHVjNDM3XHVjNDM4XHVjNDM5XHVjNDNhXHVjNDNiXHVjNDNlXHVjNDNmXHVjNDQwXHVjNDQxXHVjNDQyXHVjNDQzXHVjNDQ0XHVjNDQ1XHVjNDQ2XHVj'@;
put 'NDQ3XHVjNDQ5XHVjNDRhXHVjNDRiXHVjNDRjXHVjNDRkXHVjNDRlXHVjNDRmXHVjNDUwXHVjNDUxXHVjNDUyXHVjNDUzXHVjNDU0XHVjNDU1XHVjNDU2XHVjNDU3XHVjNDU4XHVjNDU5XHVjNDVhXHVjNDViXHVjNDVjXHVjNDVkXHVjNDVlXHVjNDVmXHVjNDYwXHVjNDYxXHVjNDYyXHVjNDYz'@;
put 'XHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkXHVjNDZlXHVjNDZmXHVjNDcwXHVjNDcxXHVjNDcyXHVjNDczXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhXHVjNDdiXHVjNDdjXHVjNDdkXHVjNDdlXHVjNDdmXHVjNDgxXHVjNDgyXHVjNDgzXHVjNDg0XHVjNDg1XHVjNDg2XHVj'@;
put 'NDg3XHVjNDg4XHVjNDg5XHVjNDhhXHVjNDhiXHVjNDhjXHVjNDhkXHVjNDhlXHVjNDhmXHVjNDkwXHVjNDkxXHVjNDkyXHVjNDkzXHVjNDk1XHVjNDk2XHVjNDk3XHVjNDk4XHVjNDk5XHVjNDlhXHVjNDliXHVjNDlkXHVjNDllXHVjNDlmXHVjNGEwXHVjNGExXHVjNGEyXHVjNGEzXHVjNGE0'@;
put 'XHVjNGE1XHVjNGE2XHVjNGE3XHVjNGE4XHVjNGE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Nl1bbV1dPTM5OTM2K20sRlszOTkzNittXT14WzE1Nl1bbV0pO2Zvcih4WzE1N109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRhYVx1YzRhYlx1YzRhY1x1YzRhZFx1YzRhZVx1YzRhZlx1YzRiMFx1YzRiMVx1YzRiMlx1YzRiM1x1YzRiNFx1YzRiNVx1YzRiNlx1YzRiN1x1YzRiOVx1YzRiYVx1YzRiYlx1YzRi'@;
put 'ZFx1YzRiZVx1YzRiZlx1YzRjMFx1YzRjMVx1YzRjMlx1YzRjM1x1YzRjNFx1YzRjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRjNlx1YzRjN1x1YzRjOFx1YzRjOVx1YzRjYVx1YzRjYlx1YzRjY1x1YzRjZFx1YzRjZVx1YzRjZlx1YzRkMFx1YzRkMVx1YzRkMlx1'@;
put 'YzRkM1x1YzRkNFx1YzRkNVx1YzRkNlx1YzRkN1x1YzRkOFx1YzRkOVx1YzRkYVx1YzRkYlx1YzRkY1x1YzRkZFx1YzRkZVx1YzRkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRlMFx1YzRlMVx1YzRlMlx1YzRlM1x1YzRlNFx1YzRlNVx1YzRlNlx1YzRlN1x1YzRl'@;
put 'OFx1YzRlYVx1YzRlYlx1YzRlY1x1YzRlZFx1YzRlZVx1YzRlZlx1YzRmMlx1YzRmM1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRmOVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1YzUwMlx1YzUwM1x1YzUwNFx1YzUwNVx1YzUwNlx1YzUwN1x1YzUwOFx1YzUwOVx1YzUwYVx1YzUwYlx1YzUwZFx1'@;
put 'YzUwZVx1YzUwZlx1YzUxMVx1YzUxMlx1YzUxM1x1YzUxNVx1YzUxNlx1YzUxN1x1YzUxOFx1YzUxOVx1YzUxYVx1YzUxYlx1YzUxZFx1YzUxZVx1YzUxZlx1YzUyMFx1YzUyMVx1YzUyMlx1YzUyM1x1YzUyNFx1YzUyNVx1YzUyNlx1YzUyN1x1YzUyYVx1YzUyYlx1YzUyZFx1YzUyZVx1YzUy'@;
put 'Zlx1YzUzMVx1YzUzMlx1YzUzM1x1YzUzNFx1YzUzNVx1YzUzNlx1YzUzN1x1YzUzYVx1YzUzY1x1YzUzZVx1YzUzZlx1YzU0MFx1YzU0MVx1YzU0Mlx1YzU0M1x1YzU0Nlx1YzU0N1x1YzU0Ylx1YzU0Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1'@;
put 'YzU2Mlx1YzU2M1x1YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OVx1YzU2YVx1YzU2Ylx1YzU2Y1x1YzU2ZFx1YzU2ZVx1YzU2Zlx1YzU3Mlx1YzU3Nlx1YzU3N1x1YzU3OFx1YzU3OVx1YzU3YVx1YzU3Ylx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4'@;
put 'OVx1YzU4YVx1YzU4Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTddW21dXT00MDE5MittLEZbNDAxOTIrbV09eFsxNTddW21dKTtm'@;
put 'b3IoeFsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1'@;
put 'YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1YjdcdWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJc'@;
put 'dWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1'@;
put 'ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFcdWM2MTJcdWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFcdWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBc'@;
put 'dWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2'@;
put 'NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVcdWM2NjZcdWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNc'@;
put 'dWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2OGFcdWM2OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2'@;
put 'OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU4XVttXV09NDA0NDgrbSxGWzQwNDQ4K21d'@;
put 'PXhbMTU4XVttXSk7Zm9yKHhbMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmE4XHVjNmFhXHVjNmFiXHVjNmFjXHVjNmFkXHVjNmFlXHVjNmFmXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiXHVj'@;
put 'NmJjXHVjNmJkXHVjNmJlXHVjNmJmXHVjNmMyXHVjNmM0XHVjNmM2XHVjNmM3XHVjNmM4XHVjNmM5XHVjNmNhXHVjNmNiXHVjNmNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1XHVjNmQ2XHVjNmQ3XHVjNmQ4XHVjNmQ5'@;
put 'XHVjNmRhXHVjNmRiXHVjNmRlXHVjNmRmXHVjNmUyXHVjNmUzXHVjNmU0XHVjNmU1XHVjNmU2XHVjNmU3XHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmYzXHVjNmY0XHVjNmY1XHVjNmY2XHVj'@;
put 'NmY3XHVjNmZhXHVjNmZiXHVjNmZjXHVjNmZlXHVjNmZmXHVjNzAwXHVjNzAxXHVjNzAyXHVjNzAzXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkXHVjNzBlXHVjNzBmXHVjNzEwXHVjNzExXHVjNzEyXHVjNzEzXHVjNzE2XHVjNzE4XHVjNzFhXHVjNzFiXHVjNzFjXHVjNzFk'@;
put 'XHVjNzFlXHVjNzFmXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5XHVjNzJhXHVjNzJiXHVjNzJjXHVjNzJkXHVjNzJlXHVjNzJmXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1XHVj'@;
put 'NzQ2XHVjNzQ3XHVjNzQ4XHVjNzQ5XHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxXHVjNzYyXHVjNzYzXHVjNzY0XHVjNzY1XHVjNzY2XHVjNzY3XHVjNzY5XHVjNzZhXHVjNzZjXHVjNzZkXHVjNzZlXHVjNzZmXHVjNzcwXHVjNzcx'@;
put 'XHVjNzcyXHVjNzczXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliXHVjNzljXHVjNzlkXHVjNzllXHVjNzlmXHVjN2EyXHVjN2E3XHVj'@;
put 'N2E4XHVjN2E5XHVjN2FhXHVjN2FiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1OV1bbV1dPTQwNzA0'@;
put 'K20sRls0MDcwNCttXT14WzE1OV1bbV0pO2Zvcih4WzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdiOFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMlx1YzdjM1x1YzdjNFx1YzdjNVx1YzdjNlx1YzdjN1x1'@;
put 'YzdjYVx1YzdjYlx1YzdjZFx1YzdjZlx1YzdkMVx1YzdkMlx1YzdkM1x1YzdkNFx1YzdkNVx1YzdkNlx1YzdkN1x1YzdkOVx1YzdkYVx1YzdkYlx1YzdkY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdkZVx1YzdkZlx1YzdlMFx1YzdlMVx1YzdlMlx1YzdlM1x1Yzdl'@;
put 'NVx1YzdlNlx1YzdlN1x1YzdlOVx1YzdlYVx1YzdlYlx1YzdlZFx1YzdlZVx1YzdlZlx1YzdmMFx1YzdmMVx1YzdmMlx1YzdmM1x1YzdmNFx1YzdmNVx1YzdmNlx1YzdmN1x1YzdmOFx1YzdmOVx1YzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdmYlx1YzdmY1x1'@;
put 'YzdmZFx1YzdmZVx1YzdmZlx1YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1YzgwOVx1YzgwYlx1YzgwY1x1YzgwZFx1YzgwZVx1YzgwZlx1YzgxMlx1YzgxNFx1YzgxN1x1YzgxOFx1YzgxOVx1YzgxYVx1YzgxYlx1YzgxZVx1YzgxZlx1YzgyMVx1YzgyMlx1YzgyM1x1YzgyNVx1Yzgy'@;
put 'Nlx1YzgyN1x1YzgyOFx1YzgyOVx1YzgyYVx1YzgyYlx1YzgyZVx1YzgzMFx1YzgzMlx1YzgzM1x1YzgzNFx1YzgzNVx1YzgzNlx1YzgzN1x1YzgzOVx1YzgzYVx1YzgzYlx1YzgzZFx1YzgzZVx1YzgzZlx1Yzg0MVx1Yzg0Mlx1Yzg0M1x1Yzg0NFx1Yzg0NVx1Yzg0Nlx1Yzg0N1x1Yzg0YVx1'@;
put 'Yzg0Ylx1Yzg0ZVx1Yzg0Zlx1Yzg1MFx1Yzg1MVx1Yzg1Mlx1Yzg1M1x1Yzg1NVx1Yzg1Nlx1Yzg1N1x1Yzg1OFx1Yzg1OVx1Yzg1YVx1Yzg1Ylx1Yzg1Y1x1Yzg1ZFx1Yzg1ZVx1Yzg1Zlx1Yzg2MFx1Yzg2MVx1Yzg2Mlx1Yzg2M1x1Yzg2NFx1Yzg2NVx1Yzg2Nlx1Yzg2N1x1Yzg2OFx1Yzg2'@;
put 'OVx1Yzg2YVx1Yzg2Ylx1Yzg2Y1x1Yzg2ZFx1Yzg2ZVx1Yzg2Zlx1Yzg3Mlx1Yzg3M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3OVx1Yzg3Ylx1Yzg3Y1x1Yzg3ZFx1Yzg3ZVx1Yzg3Zlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZVx1Yzg4Zlx1Yzg5MFx1Yzg5MVx1Yzg5Mlx1'@;
put 'Yzg5M1x1Yzg5NVx1Yzg5Nlx1Yzg5N1x1Yzg5OFx1Yzg5OVx1Yzg5YVx1Yzg5Ylx1Yzg5Y1x1Yzg5ZVx1YzhhMFx1YzhhMlx1YzhhM1x1YzhhNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'NjBdW21dXT00MDk2MCttLEZbNDA5NjArbV09eFsxNjBdW21dKTtmb3IoeFsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVc'@;
put 'dWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4'@;
put 'YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4ZGVcdWM4ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4ZjdcdWM4ZjhcdWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5'@;
put 'MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNc'@;
put 'dTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYx'@;
put 'XHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIz'@;
put 'NVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjFd'@;
put 'W21dXT00MTIxNittLEZbNDEyMTYrbV09eFsxNjFdW21dKTtmb3IoeFsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MTBcdWM5MTJcdWM5MTNcdWM5MTRcdWM5MTVcdWM5MTZcdWM5MTdcdWM5MTlcdWM5MWFcdWM5'@;
put 'MWJcdWM5MWNcdWM5MWRcdWM5MWVcdWM5MWZcdWM5MjBcdWM5MjFcdWM5MjJcdWM5MjNcdWM5MjRcdWM5MjVcdWM5MjZcdWM5MjdcdWM5MjhcdWM5MjlcdWM5MmFcdWM5MmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MmRcdWM5MmVcdWM5MmZcdWM5MzBcdWM5MzFc'@;
put 'dWM5MzJcdWM5MzNcdWM5MzVcdWM5MzZcdWM5MzdcdWM5MzhcdWM5MzlcdWM5M2FcdWM5M2JcdWM5M2NcdWM5M2RcdWM5M2VcdWM5M2ZcdWM5NDBcdWM5NDFcdWM5NDJcdWM5NDNcdWM5NDRcdWM5NDVcdWM5NDZcdWM5NDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5'@;
put 'NDhcdWM5NDlcdWM5NGFcdWM5NGJcdWM5NGNcdWM5NGRcdWM5NGVcdWM5NGZcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTlcdWM5NWFcdWM5NWJcdWM5NWNcdWM5NWRcdWM5NWVcdWM5NWZcdWM5NjJcdWM5NjRcdWM5NjVcdWM5NjZcdWM5NjdcdWM5NjhcdWM5NjlcdWM5NmFc'@;
put 'dWM5NmJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1'@;
put 'MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVc'@;
put 'dTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Ml1b'@;
put 'bV1dPTQxNDcyK20sRls0MTQ3MittXT14WzE2Ml1bbV0pO2Zvcih4WzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NVx1Yzk3Nlx1Yzk3N1x1Yzk3OFx1Yzk3OVx1Yzk3YVx1Yzk3'@;
put 'Ylx1Yzk3ZFx1Yzk3ZVx1Yzk3Zlx1Yzk4MFx1Yzk4MVx1Yzk4Mlx1Yzk4M1x1Yzk4NFx1Yzk4NVx1Yzk4Nlx1Yzk4N1x1Yzk4YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk5MVx1Yzk5Mlx1Yzk5M1x1Yzk5NFx1Yzk5NVx1'@;
put 'Yzk5Nlx1Yzk5N1x1Yzk5YVx1Yzk5Y1x1Yzk5ZVx1Yzk5Zlx1YzlhMFx1YzlhMVx1YzlhMlx1YzlhM1x1YzlhNFx1YzlhNVx1YzlhNlx1YzlhN1x1YzlhOFx1YzlhOVx1YzlhYVx1YzlhYlx1YzlhY1x1YzlhZFx1YzlhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzlh'@;
put 'Zlx1YzliMFx1YzliMVx1YzliMlx1YzliM1x1YzliNFx1YzliNVx1YzliNlx1YzliN1x1YzliOFx1YzliOVx1YzliYVx1YzliYlx1YzliY1x1YzliZFx1YzliZVx1YzliZlx1YzljMlx1YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYlx1YzljY1x1YzljZFx1YzljZVx1YzljZlx1YzlkMlx1'@;
put 'YzlkNFx1YzlkN1x1YzlkOFx1YzlkYlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmYwNFx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYx'@;
put 'OFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1'@;
put 'ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmZlNlx1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0'@;
put 'Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYzXVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxNjNdW21dXT00MTcyOCttLEZbNDE3MjgrbV09eFsxNjNdW21dKTtmb3IoeFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5'@;
put 'ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdc'@;
put 'dWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNhMjBcdWNhMjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZcdWNhMzdcdWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBc'@;
put 'dWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMxM2NcdTMxM2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMx'@;
put 'NDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdcdTMxNThcdTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFc'@;
put 'dTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMxNzNcdTMxNzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMx'@;
put 'N2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NF1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTY0XVttXV09NDE5ODQrbSxGWzQxOTg0K21dPXhbMTY0XVttXSk7Zm9yKHhbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTQ3XHVjYTQ4XHVjYTQ5XHVjYTRhXHVjYTRiXHVj'@;
put 'YTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1XHVjYTU2XHVjYTU3XHVjYTU4XHVjYTU5XHVjYTVhXHVjYTViXHVjYTVlXHVjYTYyXHVjYTYzXHVjYTY0XHVjYTY1XHVjYTY2XHVjYTY3XHVjYTY5XHVjYTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTZi'@;
put 'XHVjYTZjXHVjYTZkXHVjYTZlXHVjYTZmXHVjYTcwXHVjYTcxXHVjYTcyXHVjYTczXHVjYTc0XHVjYTc1XHVjYTc2XHVjYTc3XHVjYTc4XHVjYTc5XHVjYTdhXHVjYTdiXHVjYTdjXHVjYTdlXHVjYTdmXHVjYTgwXHVjYTgxXHVjYTgyXHVjYTgzXHVjYTg1XHVjYTg2XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTg3XHVjYTg4XHVjYTg5XHVjYThhXHVjYThiXHVjYThjXHVjYThkXHVjYThlXHVjYThmXHVjYTkwXHVjYTkxXHVjYTkyXHVjYTkzXHVjYTk0XHVjYTk1XHVjYTk2XHVjYTk3XHVjYTk5XHVjYTlhXHVjYTliXHVjYTljXHVjYTlkXHVjYTllXHVjYTlm'@;
put 'XHVjYWEwXHVjYWExXHVjYWEyXHVjYWEzXHVjYWE0XHVjYWE1XHVjYWE2XHVjYWE3XHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUy'@;
put 'MTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlm'@;
put 'XHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUw'@;
put 'M2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY1XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxNjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NV1bbV1dPTQyMjQwK20sRls0MjI0MCttXT14WzE2NV1bbV0pO2Zvcih4WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FhOFx1Y2FhOVx1Y2FhYVx1'@;
put 'Y2FhYlx1Y2FhY1x1Y2FhZFx1Y2FhZVx1Y2FhZlx1Y2FiMFx1Y2FiMVx1Y2FiMlx1Y2FiM1x1Y2FiNFx1Y2FiNVx1Y2FiNlx1Y2FiN1x1Y2FiOFx1Y2FiOVx1Y2FiYVx1Y2FiYlx1Y2FiZVx1Y2FiZlx1Y2FjMVx1Y2FjMlx1Y2FjM1x1Y2FjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1Y2FjNlx1Y2FjN1x1Y2FjOFx1Y2FjOVx1Y2FjYVx1Y2FjYlx1Y2FjZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2FkNVx1Y2FkNlx1Y2FkN1x1Y2FkYVx1Y2FkYlx1Y2FkY1x1Y2FkZFx1Y2FkZVx1Y2FkZlx1Y2FlMVx1Y2FlMlx1Y2FlM1x1Y2FlNFx1Y2FlNVx1Y2FlNlx1Y2FlN1x1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FlOFx1Y2FlOVx1Y2FlYVx1Y2FlYlx1Y2FlZFx1Y2FlZVx1Y2FlZlx1Y2FmMFx1Y2FmMVx1Y2FmMlx1Y2FmM1x1Y2FmNVx1Y2FmNlx1Y2FmN1x1Y2FmOFx1Y2FmOVx1Y2FmYVx1Y2FmYlx1Y2FmY1x1Y2FmZFx1Y2FmZVx1Y2Fm'@;
put 'Zlx1Y2IwMFx1Y2IwMVx1Y2IwMlx1Y2IwM1x1Y2IwNFx1Y2IwNVx1Y2IwNlx1Y2IwN1x1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1'@;
put 'MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUxMVx1MjUxYVx1MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1MjUxZVx1MjUxZlx1MjUyMVx1MjUyMlx1MjUy'@;
put 'Nlx1MjUyN1x1MjUyOVx1MjUyYVx1MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUzNVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUzZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Nl0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTY2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjZdW21dXT00MjQ5NittLEZbNDI0OTYrbV09eFsxNjZdW21dKTtmb3IoeFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJc'@;
put 'dWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJcdWNiMjNcdWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNiMzhcdWNiMzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJc'@;
put 'dWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJcdWNiNTNcdWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNi'@;
put 'NWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRc'@;
put 'dTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJcdTMzYjNcdTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlcdTMzODBcdTMzODFcdTMz'@;
put 'ODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFc'@;
put 'dTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxNjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY3XVttXV09NDI3NTIrbSxGWzQyNzUyK21dPXhbMTY3XVttXSk7Zm9yKHhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVjYjZkXHVjYjZlXHVjYjZmXHVjYjcwXHVjYjcxXHVjYjcyXHVjYjczXHVjYjc0XHVjYjc1XHVjYjc2XHVjYjc3XHVjYjdhXHVjYjdiXHVjYjdjXHVjYjdkXHVjYjdlXHVjYjdmXHVjYjgwXHVjYjgxXHVjYjgyXHVjYjgzXHVjYjg0XHVjYjg1XHVjYjg2XHVjYjg3XHVjYjg4XHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjg5XHVjYjhhXHVjYjhiXHVjYjhjXHVjYjhkXHVjYjhlXHVjYjhmXHVjYjkwXHVjYjkxXHVjYjkyXHVjYjkzXHVjYjk0XHVjYjk1XHVjYjk2XHVjYjk3XHVjYjk4XHVjYjk5XHVjYjlhXHVjYjliXHVjYjlkXHVjYjllXHVjYjlm'@;
put 'XHVjYmEwXHVjYmExXHVjYmEyXHVjYmEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmE0XHVjYmE1XHVjYmE2XHVjYmE3XHVjYmE4XHVjYmE5XHVjYmFhXHVjYmFiXHVjYmFjXHVjYmFkXHVjYmFlXHVjYmFmXHVjYmIwXHVjYmIxXHVjYmIyXHVjYmIzXHVjYmI0XHVj'@;
put 'YmI1XHVjYmI2XHVjYmI3XHVjYmI5XHVjYmJhXHVjYmJiXHVjYmJjXHVjYmJkXHVjYmJlXHVjYmJmXHVjYmMwXHVjYmMxXHVjYmMyXHVjYmMzXHVjYmM0XHhjNlx4ZDBceGFhXHUwMTI2XHVmZmZkXHUwMTMyXHVmZmZkXHUwMTNmXHUwMTQxXHhkOFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRh'@;
put 'XHVmZmZkXHUzMjYwXHUzMjYxXHUzMjYyXHUzMjYzXHUzMjY0XHUzMjY1XHUzMjY2XHUzMjY3XHUzMjY4XHUzMjY5XHUzMjZhXHUzMjZiXHUzMjZjXHUzMjZkXHUzMjZlXHUzMjZmXHUzMjcwXHUzMjcxXHUzMjcyXHUzMjczXHUzMjc0XHUzMjc1XHUzMjc2XHUzMjc3XHUzMjc4XHUzMjc5XHUz'@;
put 'MjdhXHUzMjdiXHUyNGQwXHUyNGQxXHUyNGQyXHUyNGQzXHUyNGQ0XHUyNGQ1XHUyNGQ2XHUyNGQ3XHUyNGQ4XHUyNGQ5XHUyNGRhXHUyNGRiXHUyNGRjXHUyNGRkXHUyNGRlXHUyNGRmXHUyNGUwXHUyNGUxXHUyNGUyXHUyNGUzXHUyNGU0XHUyNGU1XHUyNGU2XHUyNGU3XHUyNGU4XHUyNGU5'@;
put 'XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MTY4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OF1bbV1dPTQzMDA4K20sRls0MzAwOCttXT14WzE2OF1bbV0pO2Zvcih4WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1Y2JjNVx1Y2JjNlx1Y2JjN1x1Y2JjOFx1Y2JjOVx1Y2JjYVx1Y2JjYlx1Y2JjY1x1Y2JjZFx1Y2JjZVx1Y2JjZlx1Y2JkMFx1Y2JkMVx1Y2JkMlx1Y2JkM1x1Y2JkNVx1Y2JkNlx1Y2JkN1x1Y2JkOFx1Y2JkOVx1Y2JkYVx1Y2JkYlx1Y2JkY1x1Y2JkZFx1Y2JkZVx1Y2JkZlx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JlMFx1Y2JlMVx1Y2JlMlx1Y2JlM1x1Y2JlNVx1Y2JlNlx1Y2JlOFx1Y2JlYVx1Y2JlYlx1Y2JlY1x1Y2JlZFx1Y2JlZVx1Y2JlZlx1Y2JmMFx1Y2JmMVx1Y2JmMlx1Y2JmM1x1Y2JmNFx1Y2JmNVx1Y2JmNlx1Y2JmN1x1Y2JmOFx1Y2Jm'@;
put 'OVx1Y2JmYVx1Y2JmYlx1Y2JmY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JmZFx1Y2JmZVx1Y2JmZlx1Y2MwMFx1Y2MwMVx1Y2MwMlx1Y2MwM1x1Y2MwNFx1Y2MwNVx1Y2MwNlx1Y2MwN1x1Y2MwOFx1Y2MwOVx1Y2MwYVx1Y2MwYlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1'@;
put 'Y2MxMlx1Y2MxM1x1Y2MxNVx1Y2MxNlx1Y2MxN1x1Y2MxOFx1Y2MxOVx1Y2MxYVx1Y2MxYlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUw'@;
put 'MTQ5XHUzMjAwXHUzMjAxXHUzMjAyXHUzMjAzXHUzMjA0XHUzMjA1XHUzMjA2XHUzMjA3XHUzMjA4XHUzMjA5XHUzMjBhXHUzMjBiXHUzMjBjXHUzMjBkXHUzMjBlXHUzMjBmXHUzMjEwXHUzMjExXHUzMjEyXHUzMjEzXHUzMjE0XHUzMjE1XHUzMjE2XHUzMjE3XHUzMjE4XHUzMjE5XHUzMjFh'@;
put 'XHUzMjFiXHUyNDljXHUyNDlkXHUyNDllXHUyNDlmXHUyNGEwXHUyNGExXHUyNGEyXHUyNGEzXHUyNGE0XHUyNGE1XHUyNGE2XHUyNGE3XHUyNGE4XHUyNGE5XHUyNGFhXHUyNGFiXHUyNGFjXHUyNGFkXHUyNGFlXHUyNGFmXHUyNGIwXHUyNGIxXHUyNGIyXHUyNGIzXHUyNGI0XHUyNGI1XHUy'@;
put 'NDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdmXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY5'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OV1bbV1dPTQzMjY0K20sRls0MzI2NCttXT14WzE2OV1bbV0pO2Zvcih4WzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0M1x1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1'@;
put 'Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3ZFx1Y2M3ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4'@;
put 'Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1'@;
put 'MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2'@;
put 'YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1'@;
put 'MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzE3MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzBdW21dXT00MzUyMCttLEZbNDM1MjArbV09eFsxNzBdW21dKTtmb3IoeFsxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNjYTFcdWNjYTJcdWNjYTNcdWNjYTRcdWNjYTVcdWNjYTZcdWNjYTdcdWNjYWFcdWNjYWVcdWNjYWZcdWNjYjBcdWNjYjFcdWNjYjJcdWNjYjNcdWNjYjZcdWNjYjdcdWNj'@;
put 'YjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjYmFcdWNjYmJcdWNjYmRcdWNjYmVcdWNjYmZcdWNjYzBcdWNjYzFcdWNjYzJcdWNjYzNcdWNjYzZcdWNjYzhcdWNjY2FcdWNjY2JcdWNjY2NcdWNjY2RcdWNjY2VcdWNjY2ZcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDVc'@;
put 'dWNjZDZcdWNjZDdcdWNjZDhcdWNjZDlcdWNjZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjZGJcdWNjZGNcdWNjZGRcdWNjZGVcdWNjZGZcdWNjZTBcdWNjZTFcdWNjZTJcdWNjZTNcdWNjZTVcdWNjZTZcdWNjZTdcdWNjZThcdWNjZTlcdWNjZWFcdWNjZWJcdWNj'@;
put 'ZWRcdWNjZWVcdWNjZWZcdWNjZjFcdWNjZjJcdWNjZjNcdWNjZjRcdWNjZjVcdWNjZjZcdWNjZjdcdWNjZjhcdWNjZjlcdWNjZmFcdWNjZmJcdWNjZmNcdWNjZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNc'@;
put 'dTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMw'@;
put 'YzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNc'@;
put 'dTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcxXVttXV09NDM3NzYrbSxGWzQzNzc2K21dPXhbMTcxXVttXSk7Zm9yKHhbMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2ZlXHVjY2ZmXHVjZDAwXHVjZDAyXHVjZDAzXHVjZDA0XHVjZDA1XHVjZDA2XHVjZDA3XHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDExXHVjZDEyXHVjZDEzXHVjZDE0XHVjZDE1XHVjZDE2XHVjZDE3XHVjZDFhXHVjZDFjXHVj'@;
put 'ZDFlXHVjZDFmXHVjZDIwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDIxXHVjZDIyXHVjZDIzXHVjZDI1XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJiXHVjZDJkXHVjZDJlXHVjZDJmXHVjZDMwXHVjZDMxXHVjZDMyXHVjZDMzXHVjZDM0XHVjZDM1XHVjZDM2'@;
put 'XHVjZDM3XHVjZDM4XHVjZDNhXHVjZDNiXHVjZDNjXHVjZDNkXHVjZDNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDNmXHVjZDQwXHVjZDQxXHVjZDQyXHVjZDQzXHVjZDQ0XHVjZDQ1XHVjZDQ2XHVjZDQ3XHVjZDQ4XHVjZDQ5XHVjZDRhXHVjZDRiXHVjZDRjXHVj'@;
put 'ZDRkXHVjZDRlXHVjZDRmXHVjZDUwXHVjZDUxXHVjZDUyXHVjZDUzXHVjZDU0XHVjZDU1XHVjZDU2XHVjZDU3XHVjZDU4XHVjZDU5XHVjZDVhXHVjZDViXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4'@;
put 'XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNm'@;
put 'XHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Ml1bbV1dPTQ0MDMyK20sRls0NDAzMittXT14WzE3Ml1bbV0pO2Zvcih4WzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3Mlx1Y2Q3M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1'@;
put 'Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1Y2Q4YVx1Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5'@;
put 'Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1'@;
put 'Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1Y2RjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTczXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzNdW21dXT00NDI4OCttLEZbNDQyODgrbV09eFsxNzNdW21dKTtmb3IoeFsxNzRdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYzZcdWNkYzdcdWNkYzhcdWNkYzlcdWNkY2FcdWNkY2JcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDFcdWNkZDJcdWNkZDNcdWNkZDRcdWNkZDVcdWNkZDZcdWNkZDdcdWNkZDhcdWNkZDlcdWNkZGFc'@;
put 'dWNkZGJcdWNkZGNcdWNkZGRcdWNkZGVcdWNkZGZcdWNkZTBcdWNkZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkZTJcdWNkZTNcdWNkZTRcdWNkZTVcdWNkZTZcdWNkZTdcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNkZWZcdWNkZjFcdWNkZjJcdWNk'@;
put 'ZjNcdWNkZjRcdWNkZjVcdWNkZjZcdWNkZjdcdWNkZmFcdWNkZmNcdWNkZmVcdWNkZmZcdWNlMDBcdWNlMDFcdWNlMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGRcdWNlMGVcdWNlMGZc'@;
put 'dWNlMTBcdWNlMTFcdWNlMTJcdWNlMTNcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWFcdWNlMWJcdWNlMWNcdWNlMWRcdWNlMWVcdWNlMWZcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc0XVttXV09NDQ1NDQrbSxGWzQ0NTQ0K21dPXhbMTc0XVttXSk7Zm9yKHhbMTc1'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTJjXHVjZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2XHVjZTM3XHVjZTM4XHVjZTM5XHVjZTNhXHVjZTNiXHVjZTNjXHVjZTNkXHVjZTNlXHVjZTNmXHVjZTQw'@;
put 'XHVjZTQxXHVjZTQyXHVjZTQzXHVjZTQ0XHVjZTQ1XHVjZTQ2XHVjZTQ3XHVjZTQ4XHVjZTQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTRhXHVjZTRiXHVjZTRjXHVjZTRkXHVjZTRlXHVjZTRmXHVjZTUwXHVjZTUxXHVjZTUyXHVjZTUzXHVjZTU0XHVjZTU1XHVj'@;
put 'ZTU2XHVjZTU3XHVjZTVhXHVjZTViXHVjZTVkXHVjZTVlXHVjZTYyXHVjZTYzXHVjZTY0XHVjZTY1XHVjZTY2XHVjZTY3XHVjZTZhXHVjZTZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTZlXHVjZTZmXHVjZTcwXHVjZTcxXHVjZTcyXHVjZTczXHVjZTc2XHVjZTc3'@;
put 'XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkXHVjZTdlXHVjZTdmXHVjZTgwXHVjZTgxXHVjZTgyXHVjZTgzXHVjZTg2XHVjZTg4XHVjZThhXHVjZThiXHVjZThjXHVjZThkXHVjZThlXHVjZThmXHVjZTkyXHVjZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVjZTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NV1bbV1dPTQ0ODAwK20sRls0NDgwMCttXT14WzE3NV1b'@;
put 'bV0pO2Zvcih4WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2VhMlx1Y2VhNlx1Y2VhN1x1Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2Vh'@;
put 'Zlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1Y2ViZFx1Y2ViZVx1Y2ViZlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1'@;
put 'Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2Vk'@;
put 'Ylx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1Y2VmNlx1Y2VmYVx1Y2VmYlx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1'@;
put 'YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMyMFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMz'@;
put 'OVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1'@;
put 'YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNl'@;
put 'Zlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzZdW21dXT00NTA1NittLEZbNDUw'@;
put 'NTYrbV09eFsxNzZdW21dKTtmb3IoeFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDlcdWNmMGFcdWNmMGJcdWNmMGNcdWNmMGRcdWNmMGVcdWNmMGZcdWNm'@;
put 'MTJcdWNmMTRcdWNmMTZcdWNmMTdcdWNmMThcdWNmMTlcdWNmMWFcdWNmMWJcdWNmMWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJcdWNmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMjVcdWNmMjZcdWNmMjdcdWNmMjhcdWNmMjlcdWNmMmFcdWNmMmJcdWNmMmVc'@;
put 'dWNmMzJcdWNmMzNcdWNmMzRcdWNmMzVcdWNmMzZcdWNmMzdcdWNmMzlcdWNmM2FcdWNmM2JcdWNmM2NcdWNmM2RcdWNmM2VcdWNmM2ZcdWNmNDBcdWNmNDFcdWNmNDJcdWNmNDNcdWNmNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNDVcdWNmNDZcdWNmNDdcdWNm'@;
put 'NDhcdWNmNDlcdWNmNGFcdWNmNGJcdWNmNGNcdWNmNGRcdWNmNGVcdWNmNGZcdWNmNTBcdWNmNTFcdWNmNTJcdWNmNTNcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWRcdWNmNWVcdWNmNWZcdWNmNjBcdWNmNjFcdWNmNjJcdWNmNjNcdWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJc'@;
put 'dWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFk'@;
put 'NzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRc'@;
put 'dWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFl'@;
put 'NTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc3XVttXV09'@;
put 'NDUzMTIrbSxGWzQ1MzEyK21dPXhbMTc3XVttXSk7Zm9yKHhbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjZkXHVjZjZlXHVjZjZmXHVjZjcyXHVjZjczXHVjZjc1XHVjZjc2XHVjZjc3XHVjZjc5XHVjZjdhXHVj'@;
put 'ZjdiXHVjZjdjXHVjZjdkXHVjZjdlXHVjZjdmXHVjZjgxXHVjZjgyXHVjZjgzXHVjZjg0XHVjZjg2XHVjZjg3XHVjZjg4XHVjZjg5XHVjZjhhXHVjZjhiXHVjZjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjhlXHVjZjhmXHVjZjkwXHVjZjkxXHVjZjkyXHVjZjkz'@;
put 'XHVjZjk0XHVjZjk1XHVjZjk2XHVjZjk3XHVjZjk4XHVjZjk5XHVjZjlhXHVjZjliXHVjZjljXHVjZjlkXHVjZjllXHVjZjlmXHVjZmEwXHVjZmEyXHVjZmEzXHVjZmE0XHVjZmE1XHVjZmE2XHVjZmE3XHVjZmE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmFhXHVj'@;
put 'ZmFiXHVjZmFjXHVjZmFkXHVjZmFlXHVjZmFmXHVjZmIxXHVjZmIyXHVjZmIzXHVjZmI0XHVjZmI1XHVjZmI2XHVjZmI3XHVjZmI4XHVjZmI5XHVjZmJhXHVjZmJiXHVjZmJjXHVjZmJkXHVjZmJlXHVjZmJmXHVjZmMwXHVjZmMxXHVjZmMyXHVjZmMzXHVjZmM1XHVjZmM2XHVjZmM3XHVjZmM4'@;
put 'XHVjZmM5XHVjZmNhXHVjZmNiXHVhZTc5XHVhZTdiXHVhZTdjXHVhZTdkXHVhZTg0XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJkXHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQxXHVhZWQ4XHVhZWQ5XHVhZWRjXHVhZWU4XHVhZWViXHVhZWVkXHVhZWY0XHVh'@;
put 'ZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEwXHVhZjJjXHVhZjJkXHVhZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVhZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVhZjVjXHVhZjVkXHVhZjY0XHVhZjY1XHVhZjc5XHVhZjgwXHVhZjg0XHVhZjg4'@;
put 'XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVhZmI5XHVhZmJjXHVhZmMwXHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNiXHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYxXHVhZmY0XHVhZmY4XHViMDAwXHViMDAxXHViMDA0XHViMDBjXHViMDEwXHVi'@;
put 'MDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1XHViMDQ4XHViMDRhXHViMDRjXHViMDRlXHViMDUzXHViMDU0XHViMDU1XHViMDU3XHViMDU5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzhdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE3OF1bbV1dPTQ1NTY4K20sRls0NTU2OCttXT14WzE3OF1bbV0pO2Zvcih4WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZjY1x1Y2ZjZFx1Y2ZjZVx1Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1'@;
put 'Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2Zl'@;
put 'ZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAwOFx1ZDAwOVx1ZDAwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1ZDAyMFx1ZDAyMVx1ZDAyMlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAy'@;
put 'N1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1'@;
put 'YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjEx'@;
put 'OVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1'@;
put 'YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc5XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxNzldW21dXT00NTgyNCttLEZbNDU4MjQrbV09eFsxNzldW21dKTtmb3IoeFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMmVcdWQwMmZcdWQwMzBcdWQwMzFcdWQwMzJcdWQwMzNc'@;
put 'dWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2RcdWQwM2VcdWQwM2ZcdWQwNDBcdWQwNDFcdWQwNDJcdWQwNDNcdWQwNDZcdWQwNDhcdWQwNGFcdWQwNGJcdWQwNGNcdWQwNGRcdWQwNGVcdWQwNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNTFcdWQw'@;
put 'NTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTlcdWQwNWFcdWQwNWJcdWQwNWNcdWQwNWRcdWQwNWVcdWQwNWZcdWQwNjFcdWQwNjJcdWQwNjNcdWQwNjRcdWQwNjVcdWQwNjZcdWQwNjdcdWQwNjhcdWQwNjlcdWQwNmFcdWQwNmJcdWQwNmVcdWQwNmZcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzVcdWQwNzZcdWQwNzdcdWQwNzhcdWQwNzlcdWQwN2FcdWQwN2JcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODJcdWQwODNcdWQwODRcdWQwODVcdWQwODZcdWQwODdcdWQwODhcdWQwODlcdWQwOGFcdWQwOGJcdWQwOGNcdWQw'@;
put 'OGRcdWQwOGVcdWQwOGZcdWQwOTBcdWQwOTFcdWQwOTJcdWQwOTNcdWQwOTRcdWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2Nc'@;
put 'dWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIy'@;
put 'YzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIyZWJcdWIyZWNcdWIyZWRcdWIyZWVcdWIyZWZcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjdcdWIyZjhcdWIyZjlcdWIyZmFcdWIyZmJcdWIyZmZcdWIzMDBc'@;
put 'dWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVcdWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODBdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzE4MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgwXVttXV09NDYwODArbSxGWzQ2MDgwK21dPXhbMTgwXVttXSk7Zm9yKHhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDk1XHVkMDk2XHVkMDk3XHVkMDk4'@;
put 'XHVkMDk5XHVkMDlhXHVkMDliXHVkMDljXHVkMDlkXHVkMDllXHVkMDlmXHVkMGEwXHVkMGExXHVkMGEyXHVkMGEzXHVkMGE2XHVkMGE3XHVkMGE5XHVkMGFhXHVkMGFiXHVkMGFkXHVkMGFlXHVkMGFmXHVkMGIwXHVkMGIxXHVkMGIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhXHVkMGJiXHVkMGJjXHVkMGJkXHVkMGJlXHVkMGJmXHVkMGMyXHVkMGMzXHVkMGM1XHVkMGM2XHVkMGM3XHVkMGNhXHVkMGNiXHVkMGNjXHVkMGNkXHVkMGNlXHVkMGNmXHVkMGQyXHVkMGQ2XHVkMGQ3XHVkMGQ4XHVkMGQ5XHVkMGRhXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGRiXHVkMGRlXHVkMGRmXHVkMGUxXHVkMGUyXHVkMGUzXHVkMGU1XHVkMGU2XHVkMGU3XHVkMGU4XHVkMGU5XHVkMGVhXHVkMGViXHVkMGVlXHVkMGYyXHVkMGYzXHVkMGY0XHVkMGY1XHVkMGY2XHVkMGY3XHVkMGY5XHVkMGZhXHVk'@;
put 'MGZiXHVkMGZjXHVkMGZkXHVkMGZlXHVkMGZmXHVkMTAwXHVkMTAxXHVkMTAyXHVkMTAzXHVkMTA0XHViMzY3XHViMzY5XHViMzZiXHViMzZlXHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgwXHViMzgxXHViMzgzXHViMzg0XHViMzg1XHViMzhjXHViMzkwXHViMzk0XHViM2EwXHViM2Ex'@;
put 'XHViM2E4XHViM2FjXHViM2M0XHViM2M1XHViM2M4XHViM2NiXHViM2NjXHViM2NlXHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3XHViM2Q5XHViM2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHViM2ZjXHViNDEwXHViNDE4XHViNDFjXHViNDIwXHViNDI4XHViNDI5XHViNDJiXHViNDM0XHVi'@;
put 'NDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYwXHViNDYxXHViNDYzXHViNDY1XHViNDZjXHViNDgwXHViNDg4XHViNDlkXHViNGE0XHViNGE4XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMwXHViNGM0XHViNGM4XHViNGQwXHViNGQ1XHViNGRjXHViNGRkXHViNGUwXHViNGUzXHViNGU0'@;
put 'XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHViNGYxXHViNGY4XHViNTE0XHViNTE1XHViNTE4XHViNTFiXHViNTFjXHViNTI0XHViNTI1XHViNTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHViNTMxXHViNTM0XHViNTM4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgxXS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxODFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MV1bbV1dPTQ2MzM2K20sRls0NjMzNittXT14WzE4MV1bbV0pO2Zvcih4WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEw'@;
put 'Nlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1ZDExY1x1ZDExZFx1ZDExZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEz'@;
put 'ZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NVx1ZDE1Nlx1ZDE1N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1'@;
put 'ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVh'@;
put 'MFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1'@;
put 'YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0'@;
put 'NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzE4Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODJdW21dXT00NjU5MittLEZbNDY1OTIrbV09eFsxODJdW21dKTtmb3IoeFsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWQxNmVcdWQxNmZcdWQxNzBcdWQxNzFcdWQxNzJcdWQxNzNcdWQxNzRcdWQxNzVcdWQxNzZcdWQxNzdcdWQxNzhcdWQxNzlcdWQxN2FcdWQxN2JcdWQxN2RcdWQxN2VcdWQxN2ZcdWQxODBcdWQxODFcdWQxODJcdWQxODNcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGFcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxOGJcdWQxOGNcdWQxOGRcdWQxOGVcdWQxOGZcdWQxOTBcdWQxOTFcdWQxOTJcdWQxOTNcdWQxOTRcdWQxOTVcdWQxOTZcdWQxOTdcdWQxOThcdWQxOTlcdWQxOWFcdWQxOWJcdWQxOWNcdWQxOWRcdWQxOWVcdWQxOWZcdWQxYTJcdWQx'@;
put 'YTNcdWQxYTVcdWQxYTZcdWQxYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxYTlcdWQxYWFcdWQxYWJcdWQxYWNcdWQxYWRcdWQxYWVcdWQxYWZcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzFc'@;
put 'dWQxYzJcdWQxYzNcdWQxYzRcdWQxYzVcdWQxYzZcdWQxYzdcdWQxYzhcdWQxYzlcdWQxY2FcdWQxY2JcdWQxY2NcdWQxY2RcdWQxY2VcdWQxY2ZcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3'@;
put 'YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4Mzlc'@;
put 'dWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4'@;
put 'ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjlcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxODNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgzXVttXV09NDY4NDgrbSxGWzQ2ODQ4K21dPXhbMTgzXVttXSk7Zm9yKHhbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVkMWQwXHVkMWQxXHVkMWQyXHVkMWQzXHVkMWQ0XHVkMWQ1XHVkMWQ2XHVkMWQ3XHVkMWQ5XHVkMWRhXHVkMWRiXHVkMWRjXHVkMWRkXHVkMWRlXHVkMWRmXHVkMWUwXHVkMWUxXHVkMWUyXHVkMWUzXHVkMWU0XHVkMWU1XHVkMWU2XHVkMWU3XHVkMWU4XHVkMWU5'@;
put 'XHVkMWVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWViXHVkMWVjXHVkMWVkXHVkMWVlXHVkMWVmXHVkMWYwXHVkMWYxXHVkMWYyXHVkMWYzXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5XHVkMWZhXHVkMWZiXHVkMWZjXHVkMWZkXHVkMWZlXHVkMWZmXHVkMjAwXHVk'@;
put 'MjAxXHVkMjAyXHVkMjAzXHVkMjA0XHVkMjA1XHVkMjA2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjA4XHVkMjBhXHVkMjBiXHVkMjBjXHVkMjBkXHVkMjBlXHVkMjBmXHVkMjExXHVkMjEyXHVkMjEzXHVkMjE0XHVkMjE1XHVkMjE2XHVkMjE3XHVkMjE4XHVkMjE5'@;
put 'XHVkMjFhXHVkMjFiXHVkMjFjXHVkMjFkXHVkMjFlXHVkMjFmXHVkMjIwXHVkMjIxXHVkMjIyXHVkMjIzXHVkMjI0XHVkMjI1XHVkMjI2XHVkMjI3XHVkMjI4XHVkMjI5XHViOTZiXHViOTZkXHViOTc0XHViOTc1XHViOTc4XHViOTdjXHViOTg0XHViOTg1XHViOTg3XHViOTg5XHViOThhXHVi'@;
put 'OThkXHViOThlXHViOWFjXHViOWFkXHViOWIwXHViOWI0XHViOWJjXHViOWJkXHViOWJmXHViOWMxXHViOWM4XHViOWM5XHViOWNjXHViOWNlXHViOWNmXHViOWQwXHViOWQxXHViOWQyXHViOWQ4XHViOWQ5XHViOWRiXHViOWRkXHViOWRlXHViOWUxXHViOWUzXHViOWU0XHViOWU1XHViOWU4'@;
put 'XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHViOWZhXHViYTAwXHViYTAxXHViYTA4XHViYTE1XHViYTM4XHViYTM5XHViYTNjXHViYTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRiXHViYTRkXHViYTRlXHViYTUzXHViYTU0XHViYTU1XHViYTU4XHViYTVjXHViYTY0XHVi'@;
put 'YTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0XHViYTc4XHViYTgzXHViYTg0XHViYTg1XHViYTg3XHViYThjXHViYWE4XHViYWE5XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHViYWI4XHViYWI5XHViYWJiXHViYWJkXHViYWM0XHViYWM4XHViYWQ4XHViYWQ5XHViYWZj'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NF1bbV1dPTQ3MTA0K20sRls0NzEwNCttXT14WzE4NF1bbV0pO2Zvcih4WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1ZDI0Mlx1ZDI0M1x1ZDI0NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0'@;
put 'OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1OFx1ZDI1OVx1ZDI1YVx1ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1'@;
put 'ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1ZDI3MFx1ZDI3MVx1ZDI3Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3'@;
put 'Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1'@;
put 'YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJi'@;
put 'NFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMxNVx1YmMxNlx1YmMxN1x1YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1'@;
put 'YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5'@;
put 'NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODVdW21dXT00NzM2MCttLEZbNDczNjArbV09eFsxODVdW21dKTtmb3IoeFsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTZcdWQyOTdcdWQyOThcdWQyOTlcdWQyOWFcdWQyOWJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTVcdWQyYTZcdWQy'@;
put 'YTdcdWQyYThcdWQyYTlcdWQyYWFcdWQyYWJcdWQyYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyYWVcdWQyYWZcdWQyYjBcdWQyYjJcdWQyYjNcdWQyYjRcdWQyYjVcdWQyYjZcdWQyYjdcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzNcdWQyYzRc'@;
put 'dWQyYzVcdWQyYzZcdWQyYzdcdWQyY2FcdWQyY2NcdWQyY2RcdWQyY2VcdWQyY2ZcdWQyZDBcdWQyZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGRcdWQyZGVcdWQyZGZcdWQy'@;
put 'ZTBcdWQyZTFcdWQyZTJcdWQyZTNcdWQyZTZcdWQyZTdcdWQyZThcdWQyZTlcdWQyZWFcdWQyZWJcdWQyZWNcdWQyZWRcdWQyZWVcdWQyZWZcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThc'@;
put 'dWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJk'@;
put 'MjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhc'@;
put 'dWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJl'@;
put 'NWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg2XVttXV09NDc2MTYrbSxGWzQ3NjE2K21dPXhbMTg2XVttXSk7Zm9yKHhbMTg3XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmZiXHVkMmZjXHVkMmZkXHVkMmZlXHVkMmZmXHVkMzAyXHVkMzA0XHVkMzA2XHVkMzA3XHVkMzA4XHVkMzA5XHVkMzBhXHVkMzBiXHVkMzBmXHVkMzExXHVkMzEyXHVkMzEzXHVkMzE1XHVk'@;
put 'MzE3XHVkMzE4XHVkMzE5XHVkMzFhXHVkMzFiXHVkMzFlXHVkMzIyXHVkMzIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJmXHVkMzMxXHVkMzMyXHVkMzMzXHVkMzM0XHVkMzM1XHVkMzM2'@;
put 'XHVkMzM3XHVkMzNhXHVkMzNlXHVkMzNmXHVkMzQwXHVkMzQxXHVkMzQyXHVkMzQzXHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzRhXHVkMzRiXHVkMzRjXHVkMzRkXHVkMzRlXHVkMzRmXHVkMzUwXHVkMzUxXHVkMzUyXHVk'@;
put 'MzUzXHVkMzU0XHVkMzU1XHVkMzU2XHVkMzU3XHVkMzU4XHVkMzU5XHVkMzVhXHVkMzViXHVkMzVjXHVkMzVkXHVkMzVlXHVkMzVmXHVkMzYwXHVkMzYxXHVkMzYyXHVkMzYzXHVkMzY0XHVkMzY1XHVkMzY2XHVkMzY3XHVkMzY4XHVkMzY5XHViZTY4XHViZTZhXHViZTcwXHViZTcxXHViZTcz'@;
put 'XHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0XHViZThjXHViZThkXHViZThmXHViZTkwXHViZTkxXHViZTk4XHViZTk5XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHViZWUzXHViZWU0XHViZWU1XHViZWVjXHViZjAxXHViZjA4XHVi'@;
put 'ZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHViZjQxXHViZjQ0XHViZjQ4XHViZjUwXHViZjUxXHViZjU1XHViZjk0XHViZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRmXHViZmUxXHVjMDNjXHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYw'@;
put 'XHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEwXHVjMGExXHVjMGEzXHVjMGE1XHVjMGFjXHVjMGFkXHVjMGFmXHVjMGIwXHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVjMGMwXHVjMGMxXHVjMGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVj'@;
put 'MGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4N11bbV1dPTQ3ODcyK20sRls0Nzg3MittXT14WzE4N11bbV0pO2Zvcih4'@;
put 'WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1ZDM3NFx1ZDM3NVx1ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1'@;
put 'ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5Mlx1ZDM5M1x1ZDM5NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5'@;
put 'YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1ZDNiMFx1ZDNiMVx1ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1'@;
put 'ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNkM1x1ZDNkNFx1ZDNkNVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBl'@;
put 'Y1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1'@;
put 'YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5'@;
put 'Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1'@;
put 'YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODhdW21dXT00ODEyOCttLEZbNDgxMjgrbV09eFsx'@;
put 'ODhdW21dKTtmb3IoeFsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZDdcdWQzZDlcdWQzZGFcdWQzZGJcdWQzZGNcdWQzZGRcdWQzZGVcdWQzZGZcdWQzZTBcdWQzZTJcdWQzZTRcdWQzZTVcdWQzZTZcdWQzZTdc'@;
put 'dWQzZThcdWQzZTlcdWQzZWFcdWQzZWJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDJcdWQ0MDNcdWQ0MDRcdWQ0'@;
put 'MDVcdWQ0MDZcdWQ0MDdcdWQ0MDlcdWQ0MGFcdWQ0MGJcdWQ0MGNcdWQ0MGRcdWQ0MGVcdWQ0MGZcdWQ0MTBcdWQ0MTFcdWQ0MTJcdWQ0MTNcdWQ0MTRcdWQ0MTVcdWQ0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MTdcdWQ0MThcdWQ0MTlcdWQ0MWFcdWQ0MWJc'@;
put 'dWQ0MWNcdWQ0MWVcdWQ0MWZcdWQ0MjBcdWQ0MjFcdWQ0MjJcdWQ0MjNcdWQ0MjRcdWQ0MjVcdWQ0MjZcdWQ0MjdcdWQ0MjhcdWQ0MjlcdWQ0MmFcdWQ0MmJcdWQ0MmNcdWQ0MmRcdWQ0MmVcdWQ0MmZcdWQ0MzBcdWQ0MzFcdWQ0MzJcdWQ0MzNcdWQ0MzRcdWQ0MzVcdWQ0MzZcdWQ0MzdcdWMy'@;
put 'MmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNcdWMyNmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThc'@;
put 'dWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJcdWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMz'@;
put 'MTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMzNzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJc'@;
put 'dWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg5XVttXV09NDgzODQrbSxG'@;
put 'WzQ4Mzg0K21dPXhbMTg5XVttXSk7Zm9yKHhbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDM4XHVkNDM5XHVkNDNhXHVkNDNiXHVkNDNjXHVkNDNkXHVkNDNlXHVkNDNmXHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1'@;
put 'XHVkNDQ2XHVkNDQ3XHVkNDQ4XHVkNDQ5XHVkNDRhXHVkNDRiXHVkNDRjXHVkNDRkXHVkNDRlXHVkNDRmXHVkNDUwXHVkNDUxXHVkNDUyXHVkNDUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDU0XHVkNDU1XHVkNDU2XHVkNDU3XHVkNDU4XHVkNDU5XHVkNDVhXHVk'@;
put 'NDViXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1XHVkNDY2XHVkNDY3XHVkNDY4XHVkNDY5XHVkNDZhXHVkNDZiXHVkNDZjXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDczXHVkNDc0XHVkNDc1'@;
put 'XHVkNDc2XHVkNDc3XHVkNDdhXHVkNDdiXHVkNDdkXHVkNDdlXHVkNDgxXHVkNDgzXHVkNDg0XHVkNDg1XHVkNDg2XHVkNDg3XHVkNDhhXHVkNDhjXHVkNDhlXHVkNDhmXHVkNDkwXHVkNDkxXHVkNDkyXHVkNDkzXHVkNDk1XHVkNDk2XHVkNDk3XHVkNDk4XHVkNDk5XHVkNDlhXHVkNDliXHVk'@;
put 'NDljXHVkNDlkXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4XHVjNDY0XHVjNDY1XHVjNDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVjNDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVjNGYwXHVjNGYxXHVjNGY0XHVjNGY4XHVjNGZhXHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBj'@;
put 'XHVjNTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVjNTJjXHVjNTMwXHVjNTM4XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRlXHVjNTUzXHVjNTU0XHVjNTU1XHVjNTU3XHVjNTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVj'@;
put 'NTYwXHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcxXHVjNTczXHVjNTc0XHVjNTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVjNTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVjNTk3XHVjNTk4XHVjNTljXHVjNWEwXHVjNWE5XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5'@;
put 'XHVjNWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0XHVjNWM1XHVjNWM2XHVjNWM3XHVjNWM4XHVjNWM5XHVjNWNhXHVjNWNjXHVjNWNlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MF1b'@;
put 'bV1dPTQ4NjQwK20sRls0ODY0MCttXT14WzE5MF1bbV0pO2Zvcih4WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1ZDRhMlx1ZDRhM1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRh'@;
put 'N1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRiOVx1ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1'@;
put 'ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRk'@;
put 'Nlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMVx1ZDRmMlx1ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1'@;
put 'ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1YzVmZlx1YzYwMFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYw'@;
put 'N1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1'@;
put 'YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZi'@;
put 'OFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkxXVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxOTFdW21dXT00ODg5NittLEZbNDg4OTYrbV09eFsxOTFdW21dKTtmb3IoeFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZmVcdWQ0ZmZcdWQ1MDBcdWQ1MDFcdWQ1MDJcdWQ1MDNcdWQ1MDVcdWQ1'@;
put 'MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGRcdWQ1MGVcdWQ1MGZcdWQ1MTBcdWQ1MTFcdWQ1MTJcdWQ1MTNcdWQ1MTZcdWQ1MThcdWQ1MTlcdWQ1MWFcdWQ1MWJcdWQ1MWNcdWQ1MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MWVcdWQ1MWZcdWQ1MjBc'@;
put 'dWQ1MjFcdWQ1MjJcdWQ1MjNcdWQ1MjRcdWQ1MjVcdWQ1MjZcdWQ1MjdcdWQ1MjhcdWQ1MjlcdWQ1MmFcdWQ1MmJcdWQ1MmNcdWQ1MmRcdWQ1MmVcdWQ1MmZcdWQ1MzBcdWQ1MzFcdWQ1MzJcdWQ1MzNcdWQ1MzRcdWQ1MzVcdWQ1MzZcdWQ1MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWQ1MzhcdWQ1MzlcdWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDVcdWQ1NDZcdWQ1NDdcdWQ1NDhcdWQ1NDlcdWQ1NGFcdWQ1NGJcdWQ1NGVcdWQ1NTBcdWQ1NTJcdWQ1NTNcdWQ1NTRcdWQ1NTVcdWQ1NTZcdWQ1NTdcdWQ1NWFcdWQ1NWJc'@;
put 'dWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3'@;
put 'MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTFcdWM3NTJcdWM3NTNcdWM3NTRcdWM3NTVcdWM3NTZcdWM3NTdcdWM3NThcdWM3NWNcdWM3NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2Vc'@;
put 'dWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3'@;
put 'YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Ml1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTkyXVttXV09NDkxNTIrbSxGWzQ5MTUyK21dPXhbMTkyXVttXSk7Zm9yKHhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTY0XHVkNTY2XHVkNTY3XHVkNTZhXHVkNTZjXHVk'@;
put 'NTZlXHVkNTZmXHVkNTcwXHVkNTcxXHVkNTcyXHVkNTczXHVkNTc2XHVkNTc3XHVkNTc5XHVkNTdhXHVkNTdiXHVkNTdkXHVkNTdlXHVkNTdmXHVkNTgwXHVkNTgxXHVkNTgyXHVkNTgzXHVkNTg2XHVkNThhXHVkNThiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNThj'@;
put 'XHVkNThkXHVkNThlXHVkNThmXHVkNTkxXHVkNTkyXHVkNTkzXHVkNTk0XHVkNTk1XHVkNTk2XHVkNTk3XHVkNTk4XHVkNTk5XHVkNTlhXHVkNTliXHVkNTljXHVkNTlkXHVkNTllXHVkNTlmXHVkNWEwXHVkNWExXHVkNWEyXHVkNWEzXHVkNWE0XHVkNWE2XHVkNWE3XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWE4XHVkNWE5XHVkNWFhXHVkNWFiXHVkNWFjXHVkNWFkXHVkNWFlXHVkNWFmXHVkNWIwXHVkNWIxXHVkNWIyXHVkNWIzXHVkNWI0XHVkNWI1XHVkNWI2XHVkNWI3XHVkNWI4XHVkNWI5XHVkNWJhXHVkNWJiXHVkNWJjXHVkNWJkXHVkNWJlXHVkNWJm'@;
put 'XHVkNWMwXHVkNWMxXHVkNWMyXHVkNWMzXHVkNWM0XHVkNWM1XHVkNWM2XHVkNWM3XHVjODEwXHVjODExXHVjODEzXHVjODE1XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVjODNjXHVjODQwXHVjODQ4XHVjODQ5XHVjODRjXHVj'@;
put 'ODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0XHVjODc4XHVjODdhXHVjODgwXHVjODgxXHVjODgzXHVjODg1XHVjODg2XHVjODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJkXHVjOGM0XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1'@;
put 'XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVjOGU0XHVjOGY1XHVjOGZjXHVjOGZkXHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVjOTU4XHVjOTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVj'@;
put 'OTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5XHVjOThjXHVjOTkwXHVjOTk4XHVjOTk5XHVjOTliXHVjOTlkXHVjOWMwXHVjOWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkzXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxOTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5M11bbV1dPTQ5NDA4K20sRls0OTQwOCttXT14WzE5M11bbV0pO2Zvcih4WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1'@;
put 'ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1ZDYwY1x1ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYyOVx1ZDYyYVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYy'@;
put 'Zlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1'@;
put 'YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2Fj'@;
put 'Y1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1'@;
put 'Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NF0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTk0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTRdW21dXT00OTY2NCttLEZbNDk2NjQrbV09eFsxOTRdW21dKTtmb3IoeFsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2M2Rc'@;
put 'dWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZcdWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWRcdWQ2NWVcdWQ2NWZcdWQ2NjBcdWQ2NjFcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2NjJcdWQ2NjNcdWQ2NjRcdWQ2NjVcdWQ2NjZcdWQ2NjhcdWQ2NmFcdWQ2NmJcdWQ2NmNcdWQ2NmRcdWQ2NmVcdWQ2NmZcdWQ2NzJcdWQ2NzNcdWQ2NzVcdWQ2NzZcdWQ2NzdcdWQ2NzhcdWQ2NzlcdWQ2N2FcdWQ2N2JcdWQ2N2NcdWQ2N2RcdWQ2N2Vc'@;
put 'dWQ2N2ZcdWQ2ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODZcdWQ2ODdcdWQ2ODhcdWQ2ODlcdWQ2OGFcdWQ2OGJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTVcdWQ2OTZcdWQ2OTdcdWQ2OThcdWQ2OTlcdWQ2'@;
put 'OWFcdWQ2OWJcdWQ2OWNcdWQ2OWVcdWQ2YTBcdWQ2YTJcdWQ2YTNcdWQ2YTRcdWQ2YTVcdWQ2YTZcdWQ2YTdcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZc'@;
put 'dWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNk'@;
put 'MDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlc'@;
put 'dWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxOTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk1XVttXV09NDk5MjArbSxGWzQ5OTIwK21dPXhbMTk1XVttXSk7Zm9yKHhbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVkNmFiXHVkNmFkXHVkNmFlXHVkNmFmXHVkNmIxXHVkNmIyXHVkNmIzXHVkNmI0XHVkNmI1XHVkNmI2XHVkNmI3XHVkNmI4XHVkNmJhXHVkNmJjXHVkNmJkXHVkNmJlXHVkNmJmXHVkNmMwXHVkNmMxXHVkNmMyXHVkNmMzXHVkNmM2XHVkNmM3XHVkNmM5XHVkNmNhXHVkNmNiXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmNkXHVkNmNlXHVkNmNmXHVkNmQwXHVkNmQyXHVkNmQzXHVkNmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhXHVkNmRiXHVkNmRjXHVkNmRkXHVkNmRlXHVkNmRmXHVkNmUxXHVkNmUyXHVkNmUzXHVkNmU1XHVkNmU2XHVkNmU3XHVkNmU5'@;
put 'XHVkNmVhXHVkNmViXHVkNmVjXHVkNmVkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmVlXHVkNmVmXHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVkNmY2XHVkNmY3XHVkNmY4XHVkNmY5XHVkNmZhXHVkNmZiXHVkNmZlXHVkNmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVk'@;
put 'NzA1XHVkNzA2XHVkNzA3XHVkNzA4XHVkNzA5XHVkNzBhXHVkNzBiXHVkNzBjXHVkNzBkXHVkNzBlXHVkNzBmXHVkNzEwXHVkNzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVjZTVjXHVjZTVmXHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVjZTZiXHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4'@;
put 'XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0XHVjZTk4XHVjZWEwXHVjZWExXHVjZWEzXHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMxXHVjZWU0XHVjZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0XHVjZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVj'@;
put 'ZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVjZjFjXHVjZjIwXHVjZjI0XHVjZjJjXHVjZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVjZjU0XHVjZjU1XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVjZjY3XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0'@;
put 'XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0XHVjZmUwXHVjZmUxXHVjZmU0XHVjZmU4XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZjXHVkMDAwXHVkMDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0XHVkMDM1XHVkMDM4XHVkMDNjXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTk2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Nl1bbV1dPTUwMTc2K20sRls1MDE3NittXT14WzE5Nl1bbV0pO2Zvcih4WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDczMFx1ZDczMVx1ZDczMlx1ZDczM1x1ZDczNlx1'@;
put 'ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1ZDc0ZFx1ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1'@;
put 'M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1'@;
put 'ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3'@;
put 'MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1'@;
put 'ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4'@;
put 'NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1'@;
put 'ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTddW21dXT01MDQzMittLEZbNTA0MzIrbV09eFsxOTddW21dKTtmb3IoeFsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3OGRcdWQ3OGVcdWQ3OGZcdWQ3OTFcdWQ3OTJcdWQ3OTNcdWQ3OTRcdWQ3OTVcdWQ3OTZcdWQ3OTdcdWQ3OWFcdWQ3OWNcdWQ3OWVcdWQ3OWZcdWQ3YTBcdWQ3YTFcdWQ3YTJcdWQ3YTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQy'@;
put 'OWNcdWQyYTBcdWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNc'@;
put 'dWQzMGRcdWQzMGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQz'@;
put 'OGRcdWQzOGZcdWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNc'@;
put 'dWQzZmRcdWQzZmZcdWQ0MDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk4XVttXV09NTA2ODgrbSxGWzUwNjg4K21dPXhbMTk4XVttXSk7Zm9yKHhbMTk5XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDA4XHVkNDFkXHVkNDQwXHVkNDQ0XHVkNDVjXHVkNDYwXHVk'@;
put 'NDY0XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVkNDdjXHVkNDdmXHVkNDgwXHVkNDgyXHVkNDg4XHVkNDg5XHVkNDhiXHVkNDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVkNGU4XHVkNGVjXHVkNGYwXHVkNGY4XHVkNGZiXHVkNGZkXHVkNTA0XHVkNTA4'@;
put 'XHVkNTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNjXHVkNTNkXHVkNTQwXHVkNTQ0XHVkNTRjXHVkNTRkXHVkNTRmXHVkNTUxXHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZiXHVkNTZkXHVkNTc0XHVkNTc1XHVkNTc4XHVkNTdjXHVkNTg0XHVkNTg1XHVk'@;
put 'NTg3XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVkNWM4XHVkNWM5XHVkNWNjXHVkNWQwXHVkNWQyXHVkNWQ4XHVkNWQ5XHVkNWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVkNWY3XHVkNWY5XHVkNjAwXHVkNjAxXHVkNjA0XHVkNjA4XHVkNjEwXHVkNjEx'@;
put 'XHVkNjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OV1bbV1dPTUwOTQ0K20sRls1MDk0NCttXT14WzE5OV1bbV0pO2Zvcih4WzIwMF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1'@;
put 'ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZh'@;
put 'Y1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1'@;
put 'ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4'@;
put 'OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDBdW21dXT01MTIwMCttLEZbNTEyMDArbV09eFsyMDBdW21dKTtm'@;
put 'b3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmM2RcdTRmNzNc'@;
put 'dTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThjYzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUy'@;
put 'M2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2ZcdTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhc'@;
put 'dTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYxYmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZl'@;
put 'MWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAyXVttXV09NTE3MTIrbSxGWzUxNzEyK21d'@;
put 'PXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4XHU1OWRjXHU1Y2ExXHU1ZDE3XHU1ZWI3XHU1ZjNhXHU1ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDczXHU3ZGIxXHU3ZjhjXHU4MTU0XHU4MjIxXHU4NTkxXHU4OTQxXHU4YjFiXHU5'@;
put 'MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2MTM3XHU2MTNlXHU2MTY4XHU2NTM5XHU2OWVhXHU2ZjExXHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVmOTAwXHU5M2E3XHU5NThiXHU1NTgwXHU1YmEyXHU1NzUxXHVmOTAxXHU3Y2Iz'@;
put 'XHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZlXHU2NGRhXHU2NGU3XHU2ZTIwXHU3MGFjXHU3OTViXHU4ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdlXHU0ZWY2XHU1MDY1XHU1ZGZlXHU1ZWZhXHU2MTA2XHU2OTU3XHU4MTcxXHU4'@;
put 'NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1MTA5XHU1MjhkXHU1MjkyXHU2YWEyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwM11bbV1dPTUxOTY4'@;
put 'K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1'@;
put 'OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFh'@;
put 'Y1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1'@;
put 'OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsy'@;
put 'MDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsyMDRdW21dKTtmb3IoeFsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFcdThjM2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJc'@;
put 'dTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZcdTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4'@;
put 'NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZlZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRc'@;
put 'dTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0ZGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNV1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxGWzUyNDgwK21dPXhbMjA1XVttXSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWQxXHU4M2QzXHU4YTg3XHU4YWIyXHU4ZGU4XHU5MDRlXHU5MzRiXHU5ODQ2XHU1ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYzXHU2OGZhXHU2YjNlXHU3MDRjXHU3NDJm'@;
put 'XHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRjXHU5OTI4XHU1MjJlXHU2MDVkXHU2MmVjXHU5MDAyXHU0ZjhhXHU1MTQ5XHU1MzIxXHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4MGYxXHU5NDViXHU1MzY2XHU2MzliXHU3'@;
put 'ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2MmQwXHU2OWQwXHU5YjQxXHU1YjhmXHU3ZDE4XHU4MGIxXHU4ZjVmXHU0ZWE0XHU1MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEwXHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIxXHU2YTRiXHU3MmUxXHU3NjhlXHU3N2Vm'@;
put 'XHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRlXHU5MGNhXHU5OTAzXHU5YTU1XHU5YmFiXHU0ZTE4XHU0ZTQ1XHU0ZTVkXHU0ZWM3XHU0ZmYxXHU1MTc3XHU1MmZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDZd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1bbV1dPTUyNzM2K20sRls1MjczNittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1NmJl'@;
put 'Y1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1'@;
put 'OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcw'@;
put 'OFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwN10ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDddW21dXT01Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1'@;
put 'YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJcdTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJc'@;
put 'dThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3'@;
put 'ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFcdTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDhd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2ZGM3XHU3Mzk4XHU3NDI2XHU3NDJhXHU3'@;
put 'NDgyXHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3OTQ3XHU3OTQ4XHU3OTdhXHU3Yjk1XHU3ZDAwXHU3ZGJhXHU3Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUyXHU5OTUxXHU5YTBlXHU5YTBmXHU5YTY1'@;
put 'XHU5ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQxXHU1NWFiXHU1MTNhXHVmOTBiXHVmOTBjXHU1YTFjXHU2MWU2XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlXHVmOTBmXHVmOTEwXHVmOTExXHVmOTEyXHVmOTEzXHU5MGEzXHVmOTE0XHVmOTE1XHVmOTE2XHVmOTE3XHVm'@;
put 'OTE4XHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVmOTFjXHU2Njk2XHVmOTFkXHU3MTU2XHVmOTFlXHVmOTFmXHU5NmUzXHVmOTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0XHVmOTI1XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1ZjkyYlx1ZjkyY1x1NGU0M1x1'@;
put 'ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzM1x1ZjkzNFx1Zjkz'@;
put 'NVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1'@;
put 'Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNlx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3IoeFsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBc'@;
put 'dTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkzNWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1'@;
put 'NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRcdTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZc'@;
put 'dTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTViODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0'@;
put 'MTdcdTY4NDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhbMjExXVttXSk7Zm9yKHhbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIxXHU2ZWQ0XHU2ZmU0XHU3MWZlXHU3NmRj'@;
put 'XHU3Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYzXHU4ZTQ4XHU5MDAzXHU5MDE0XHU5MDUzXHU5MGZkXHU5MzRkXHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3ZTliXHU4YjgwXHU1OGE5XHU2MGM3XHU2'@;
put 'NTY2XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5ODEzXHU0ZTZkXHU3YTgxXHU0ZWRkXHU1MWFjXHU1MWNkXHU1MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDYzXHU5Mjg1XHU1MTVj'@;
put 'XHU2NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVhXHU4YzQ2XHU5MDE3XHU5ODJkXHU1YzZmXHU4MWMwXHU4MjlhXHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4YjA0XHU5MTI3XHU5YTMwXHU1NTg3XHU2'@;
put 'MWY2XHVmOTViXHU3NjY5XHU3Zjg1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20sRls1NDI3MittXT14WzIxMl1bbV0pO2Zvcih4WzIxM109Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1Zjk1Y1x1NmQx'@;
put 'Ylx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVjZFx1ODk2NFx1'@;
put 'ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1N2NiMVx1N2Nl'@;
put 'N1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAxZFx1NzkyYlx1'@;
put 'OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNdW21dXT01NDUyOCttLEZbNTQ1MjgrbV09eFsyMTNdW21dKTtmb3IoeFsyMTRd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDlcdTc0ODlcdTdkZjRcdTgw'@;
put 'NmZcdTg0ZWVcdThmMjZcdTkwMjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2Vc'@;
put 'dTgwNDZcdTkwMWVcdTkyMzRcdTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTli'@;
put 'NmZcdTlkZmFcdTllNzVcdTc4OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFc'@;
put 'dTViZWVcdTVlZDZcdTY1OTlcdTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE0XVttXV09NTQ3ODQrbSxGWzU0Nzg0K21dPXhbMjE0XVtt'@;
put 'XSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDdjXHU5'@;
put 'YjI3XHU5ZjhkXHU1OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRhXHU2ZjBmXHU3NjNiXHU3ZDJmXHU3ZTM3XHU4NTFlXHU4OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBmXHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3ODZiXHU4YjJj'@;
put 'XHU5ODVlXHU1MTZkXHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1ZDE5XHU2ZGVhXHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2MTQ0XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3ZGJlXHU4M2YxXHU5Njc1XHU0ZmRhXHU1MjI5XHU1Mzk4XHU1'@;
put 'NDBmXHU1NTBlXHU1YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZjXHU3MjgxXHU3MmY4XHU3NDA2XHU3NDgzXHVmOTYyXHU3NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUyXHU5YmM5XHU1NDFkXHU2ZjdlXHU3MWQwXHU3NDk4XHU4NWZh'@;
put 'XHU4ZWFhXHU5NmEzXHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3NDMzXHU4MWU4XHU5NzE2XHU3ODJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNV1bbV1dPTU1MDQwK20sRls1NTA0'@;
put 'MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVm'@;
put 'Zlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1'@;
put 'OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5'@;
put 'M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTZdW21dXT01'@;
put 'NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtmb3IoeFsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0'@;
put 'NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZc'@;
put 'dTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2JcdTcxMjFcdTczZjdcdTc1NWRcdTdl'@;
put 'NDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxN11bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21dPXhbMjE3XVttXSk7Zm9yKHhbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Yzc2XHU3ZDBhXHU3ZDBiXHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVmXHU1MmZmXHU2Yzk1XHU3MjY5XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2NzJhXHU2OGI2XHU2OTYzXHU2ZTNjXHU2ZTQ0XHU3NzA5XHU3'@;
put 'YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2NWZiXHU2NWZjXHU2YzExXHU2Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFjXHU4YjEwXHU1MjVkXHU1MzVhXHU2MmNkXHU2NDBmXHU2NGIy'@;
put 'XHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFiXHU4MThhXHU4MjM2XHU4NTg0XHU4ZmViXHU5NmY5XHU5OWMxXHU0ZjM0XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2NTkxXHU2OWMzXHU2Y2VlXHU2ZjU4XHU3M2VkXHU3NTU0XHU3'@;
put 'NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1MmMzXHU2MmQ0XHU2NGE1XHU2ZTI0XHU2ZjUxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMThdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4K20sRls1NTgwOCttXT14WzIxOF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1'@;
put 'NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhm'@;
put 'NFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1'@;
put 'OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTldW21dXT01NjA2NCttLEZbNTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4YTdcdTg2MTdcdTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFcdThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVc'@;
put 'dTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTViZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5'@;
put 'MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2JcdTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdc'@;
put 'dTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0OTBcdTU3ZTBcdTU5MmJcdTVhNjZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjBdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIwXVttXV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YjVhXHU1Yjc1XHU1YmNjXHU1ZTljXHVmOTY2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2ZWE1XHU3MjM2XHU3YjI2XHU3YzNmXHU3ZjM2XHU4MTUwXHU4MTUx'@;
put 'XHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2ZiXHU4ZDc0XHU4ZGJhXHU5MGU4XHU5MWRjXHU5NjFjXHU5NjQ0XHU5OWQ5XHU5Y2U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIzXHU1OTU0XHU1OTZlXHU1ZmZmXHU2MWE0XHU2MjZlXHU2NjEwXHU2'@;
put 'YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5NmYwXHVmOTY3XHU0ZjViXHU1ZjE3XHU1ZjdmXHU2MmMyXHU1ZDI5XHU2NzBiXHU2OGRhXHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1MDk5XHU1MzE1XHU1MzJhXHU1MzUxXHU1OTgzXHU1YTYyXHU1ZTg3'@;
put 'XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0XHU2YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4XHVmOTY4XHU3NDM1XHU3NWZhXHU3ODEyXHU3ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNiXHU3ZmUxXHU4MGE1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIy'@;
put 'YVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1'@;
put 'NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0'@;
put 'MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3'@;
put 'MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgyOWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBc'@;
put 'dTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBcdTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdk'@;
put 'MjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVlYjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzJc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7Zm9yKHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1'@;
put 'OTE1XHU1OTZkXHU1ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2ZGM1XHU2ZjVmXHU3N2YzXHU3OGE5XHU4NGM2XHU5MWNiXHU5MzJiXHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNiXHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0'@;
put 'XHU3NDg3XHU3NGJmXHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdhXHU4MWIzXHU4MjM5XHU4NjFhXHU4N2VjXHU4YTc1XHU4ZGUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4'@;
put 'OTNiXHU4YTJkXHU4YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3ZTk2XHU4N2ZlXHU4ZDBkXHU5NTgzXHU5NjVkXHU2NTFkXHU2ZDg5XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFmXHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRi'@;
put 'XHU3NzAxXHU3YjZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1'@;
put 'NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4'@;
put 'ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1'@;
put 'NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4'@;
put 'OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZc'@;
put 'dTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZkMTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThh'@;
put 'YjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNcdTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVc'@;
put 'dTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYwNDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5'@;
put 'YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVcdTVkMDdcdTVkMjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhb'@;
put 'MjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDY5XHU3NDVmXHU4MTlk'@;
put 'XHU4NzY4XHU2ZmQ1XHU2MmZlXHU3ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4XHU1MGU3XHU1MmRkXHU1MzQ3XHU2MjdmXHU2NjA3XHU3ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRlXHU1YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2'@;
put 'NWJkXHU2NjJmXHU2NjQyXHU2N2JlXHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4YTY2XHU4YTY5XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2Yjk2XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1'@;
put 'XHU4YjU4XHU4ZWZlXHU5OGRmXHU5OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdiXHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIwXHU2NjY4XHU3MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAzXHU4YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4'@;
put 'ZmM1XHU1OTMxXHU1YmE0XHU1YmU2XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2YzgxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIy'@;
put 'N11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3'@;
put 'Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1'@;
put 'OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVj'@;
put 'Ylx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1'@;
put 'Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZb'@;
put 'NTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRcdWY5NzdcdTRmNmZc'@;
put 'dWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkxYzBcdTk2N2RcdWY5'@;
put 'N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFcdTUxM2NcdTU2YjRc'@;
put 'dTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVtt'@;
put 'XV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4ZjNmXHU4ZjVkXHVmOTg2XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1N2RmXHU1Zjc5XHU2NjEzXHVmOThiXHVmOThj'@;
put 'XHU3NWFiXHU3ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThlXHU1ZWY2XHVmOThmXHVmOTkwXHU2MzUwXHU2MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkzXHU2ZGY1XHU2ZjE0XHVmOTkyXHU3MGRmXHU3'@;
put 'MTM2XHU3MTU5XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVmOTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3ZTJmXHVmOTk3XHU4ODRkXHU4ZWRmXHVmOTk4XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVmOTlkXHVmOTllXHU2MDg1XHU2ZDg1XHVmOTlm'@;
put 'XHU3MWIxXHVmOWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMwXHU3NDMwXHU4Mjc2XHU4MmQyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNm'@;
put 'M1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1'@;
put 'NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0'@;
put 'OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRcdTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUx'@;
put 'NDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTViOGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdc'@;
put 'dTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZcdTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4'@;
put 'MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5YzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTg4XHU3YWFmXHU3ZTQ3XHU3ZTVlXHU4MDAwXHU4MTcwXHVmOWMyXHU4N2VmXHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5MDgwXHU5OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3'@;
put 'ZTFmXHU4OTI1XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1ODg5XHU1YmI5XHU1ZWI4XHU2MTQyXHU2OTk1XHU2ZDhjXHU2ZTY3XHU2ZWI2XHU3MTk0XHU3NDYyXHU3NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5XHU4ZTBhXHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThl'@;
put 'XHU0ZjUxXHU1MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQzXHU1YzI0XHU2MTFhXHU2MTgyXHU2NWY0XHU3MjViXHU3Mzk3XHU3NDQwXHU3NmMyXHU3OTUwXHU3OTkxXHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4NWQ1XHU4NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5'@;
put 'MWVhXHU5Njg1XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2ODJmXHU3MTVjXHU3YTM2XHU5MGMxXHU5ODBhXHU0ZTkxXHVmOWM1XHU2YTUyXHU2YjllXHU2ZjkwXHU3MTg5XHU4MDE4XHU4MmI4XHU4NTUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1'@;
put 'NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3'@;
put 'MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1'@;
put 'NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0Mzhc'@;
put 'dTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTcz'@;
put 'YTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNcdTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBc'@;
put 'dTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTViOWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmNcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRlXHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYy'@;
put 'XHU1ZjFiXHU1ZjViXHU2MDIxXHVmOWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNlXHU3M2U1XHVmOWU0XHU3NTcwXHU3NWNkXHVmOWU1XHU3OWZiXHVmOWU2XHU4MDBjXHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5'@;
put 'OGY0XHU5OTBjXHVmOWViXHVmOWVjXHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3ZmZjXHU4YjFhXHU0ZWJhXHU0ZWMxXHU1MjAzXHU1MzcwXHVmOWVkXHU1NGJkXHU1NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVmXHU3ZDZhXHU4MzM1XHVmOWYwXHU4Njkz'@;
put 'XHU4YThkXHVmOWYxXHU5NzZkXHU5Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVhXHU0ZjdlXHU1OGY5XHU2NWU1XHU2ZWEyXHU5MDM4XHU5M2IwXHU5OWI5XHU0ZWZiXHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVmOWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1'@;
put 'MzQ0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1bbV0pO2Zvcih4WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIz'@;
put 'YVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1'@;
put 'NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThl'@;
put 'Zlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1'@;
put 'OGQxM1x1OTFhY1x1OTU3N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIrbV09eFsyMzddW21dKTtmb3IoeFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3'@;
put 'NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdlMjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFc'@;
put 'dTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdcdTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdi'@;
put 'MWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThjY2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJc'@;
put 'dTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5MjgrbSxGWzYwOTI4K21dPXhbMjM4XVttXSk7Zm9yKHhbMjM5XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTRlXHU3NDIwXHU3NTMwXHU3NTM4XHU3'@;
put 'NTUxXHU3NjcyXHU3YjRjXHU3YjhiXHU3YmFkXHU3YmM2XHU3ZThmXHU4YTZlXHU4ZjNlXHU4ZjQ5XHU5MjNmXHU5MjkzXHU5MzIyXHU5NDJiXHU5NmZiXHU5ODVhXHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNhXHU3YmMwXHU3ZDc2XHU1MzYwXHU1Y2Jl'@;
put 'XHU1ZTk3XHU2ZjM4XHU3MGI5XHU3Yzk4XHU5NzExXHU5YjhlXHU5ZWRlXHU2M2E1XHU2NDdhXHU4Nzc2XHU0ZTAxXHU0ZTk1XHU0ZWFkXHU1MDVjXHU1MDc1XHU1NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2MzNhXHU2NTNmXHU2NTc0XHU2NWNjXHU2'@;
put 'Njc2XHU2Njc4XHU2N2ZlXHU2OTY4XHU2YTg5XHU2YjYzXHU2YzQwXHU2ZGMwXHU2ZGU4XHU2ZTFmXHU2ZTVlXHU3MDFlXHU3MGExXHU3MzhlXHU3M2ZkXHU3NTNhXHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3XHU4YTAyXHU4YWVhXHU4YzllXHU5MTJk'@;
put 'XHU5MTRhXHU5MWQ4XHU5MjY2XHU5MmNjXHU5MzIwXHU5NzA2XHU5NzU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOV1bbV1dPTYxMTg0K20sRls2MTE4NCttXT14WzIzOV1bbV0pO2Zv'@;
put 'cih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1'@;
put 'OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJh'@;
put 'OVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1'@;
put 'N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBi'@;
put 'MFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDBdW21dXT02MTQ0MCttLEZbNjE0NDArbV09'@;
put 'eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFcdTZj'@;
put 'ZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUxYzZc'@;
put 'dTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVcdTYx'@;
put 'OGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQxXVttXV09NjE2OTYr'@;
put 'bSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU1NGFiXHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3XHU2NDZmXHU2NTJmXHU2NWU4XHU2NjdhXHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYwXHU2YzlhXHU2ZjJjXHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4MGEyXHU4MTAyXHU4MWYzXHU4MjlkXHU4'@;
put 'MmI3XHU4NzE4XHU4YThjXHVmOWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2NDIyXHU2NjQ5XHU2NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIxXHU3M2NkXHU3NDY4XHU3NGExXHU3NTVi'@;
put 'XHU3NWI5XHU3NmUxXHU3NzFlXHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZiXHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2QxXHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2FkXHU5NjYzXHU5NjczXHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1ZTE5XHU2ODRlXHU3NGM2XHU3NWJlXHU3'@;
put 'OWU5XHU3YTkyXHU4MWEzXHU4NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3ZGRkXHU4ZjJmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0'@;
put 'Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0Ml1bbV0pO2Zvcih4WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1'@;
put 'N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1'@;
put 'OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1'@;
put 'ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQzXVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZbNjIyMDgrbV09eFsyNDNdW21dKTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVcdTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZc'@;
put 'dTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0'@;
put 'MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJcdTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFc'@;
put 'dTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NF1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVttXV09NjI0NjQrbSxGWzYyNDY0K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTEyXHU2OTVhXHU2YTM1XHU3MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBlXHU3OWQyXHU3YTBkXHU4MDk2XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5XHU4YzgyXHU4ZDg1XHU5MTYyXHU5MThi'@;
put 'XHU5MWFlXHU0ZmMzXHU1NmQxXHU3MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1M2UyXHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2NDYwXHU3ZTNkXHU4MDcwXHU4NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1ZDE0XHU2NzAwXHU1ODljXHU2MmJkXHU2'@;
put 'M2E4XHU2OTBlXHU2OTc4XHU2YTFlXHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4NDI5XHU4YWNmXHU4ZGE4XHU4ZmZkXHU5MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4XHU5MzlhXHU5NmRiXHU5YTM2XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVkXHU3YWZhXHU3YjUxXHU3YmM5XHU3ZTJl'@;
put 'XHU4NGM0XHU4ZTU5XHU4ZTc0XHU4ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQzXHU1MWZhXHU2NzJlXHU5ZWRjXHU1MTQ1XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4ODc3XHU2MGI0XHU4MWI1XHU4NDAzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ1XS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NV1bbV1dPTYyNzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVj'@;
put 'NFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1'@;
put 'OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1'@;
put 'M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Nl0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MzhcdTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3'@;
put 'MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYwMjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRc'@;
put 'dTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZcdTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1'@;
put 'ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgyYWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTkyMTFcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7Zm9yKHhbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjJhXHU1MTZiXHU1M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3'@;
put 'YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2ZjhlXHU3MGY5XHU4MWE4XHU2MTBlXHU0ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3XHU3YmM3XHU3ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5YTE5XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUy'@;
put 'XHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNkXHU5NTg5XHU5NjViXHU0ZjQ4XHU1MzA1XHU1MzBkXHU1MzBmXHU1NDg2XHU1NGZhXHU1NzAzXHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIxXHU2MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4'@;
put 'NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5MmVhXHU5OGZkXHU5YjkxXHU1ZTQ1XHU2NmI0XHU2NmRkXHU3MDExXHU3MjA2XHVmYTA3XHU0ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2NzUzXHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5XHU5OGM3XHU5OGM0XHU5YTQzXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPXhbMjQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OF1bbV1dPTYzNDg4K20sRls2MzQ4OCttXT14WzI0OF1bbV0pO2Zvcih4WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1'@;
put 'NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1'@;
put 'MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1'@;
put 'NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5'@;
put 'Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDldW21dXT02Mzc0NCttLEZbNjM3NDQrbV09eFsyNDldW21dKTtmb3IoeFsyNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFc'@;
put 'dTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5'@;
put 'NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZcdTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3Mjlc'@;
put 'dTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThjZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRl'@;
put 'YThcdTUxNDRcdTUyMTFcdTU3OGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUwXVttXV09NjRlMyttLEZbNjRlMyttXT14WzI1MF1bbV0pO2Zvcih4WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWY2Mlx1NmNjMlx1NmVjZVx1NzAwNVx1NzA1MFx1NzBhZlx1'@;
put 'NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdhMlx1ODg2MVx1OTAwOFx1OTBhMlx1OTNhM1x1OTlhOFx1NTE2ZVx1NWY1N1x1NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFhZlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThmYVx1NTk3ZFx1NWNiNVx1NWYyN1x1NjIz'@;
put 'Nlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1NmQ2OVx1NmRjZlx1NmU1Nlx1NmVmOFx1NmY5NFx1NmZlMFx1NmZlOVx1NzA1ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1ODRiZlx1ODY0ZVx1ODY1Zlx1ODc3NFx1'@;
put 'OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2NVx1NjBkMVx1NjIxNlx1OTE3N1x1NWE1YVx1NjYwZlx1NmRmN1x1NmUzZVx1NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRjNFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2QwNVx1ODY3OVx1OGEwY1x1OWQzYlx1NTMx'@;
put 'Nlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1NzU3NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTFdW21dXT02NDI1NittLEZbNjQyNTYrbV09eFsyNTFdW21dKTtmb3IoeFsyNTJdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZc'@;
put 'dThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZk'@;
put 'M2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRc'@;
put 'dTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2'@;
put 'ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZkYzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUyXVttXV09NjQ1MTIrbSxGWzY0NTEyK21dPXhbMjUyXVttXSk7'@;
put 'Zm9yKHhbMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MjNiXHU4MGI0'@;
put 'XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2'@;
put 'Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQx'@;
put 'XHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2'@;
put 'NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1M11bbV1dPTY0NzY4K20sRls2NDc2OCtt'@;
put 'XT14WzI1M11bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEllWzk1MF09ZnVuY3Rpb24oKXt2YXIgbSxGPVtdLGFlPXt9LHg9W107Zm9yKHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgx'@;
put 'Nlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxG'@;
put 'WzArbV09eFswXVttXSk7Zm9yKHhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUw'@;
put 'XHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAx'@;
put 'MFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1'@;
put 'YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUy'@;
put 'MjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkx'@;
put 'XHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2MV1bbV1dPTQxMjE2K20sRls0MTIx'@;
put 'NittXT14WzE2MV1bbV0pO2Zvcih4WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYyMFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2'@;
put 'YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4Zlx1MzNjNFx4YjBcdTUxNTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1'@;
put 'ODhcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdTIxNjBcdTIxNjFcdTIxNjJc'@;
put 'dTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZm'@;
put 'MjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFc'@;
put 'dWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYyXVttXV09NDE0'@;
put 'NzIrbSxGWzQxNDcyK21dPXhbMTYyXVttXSk7Zm9yKHhbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4'@;
put 'XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUw'@;
put 'M2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4'@;
put 'XHUzMTI5XHUwMmQ5XHUwMmM5XHUwMmNhXHUwMmM3XHUwMmNiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4'@;
put 'WzE2M11bbV1dPTQxNzI4K20sRls0MTcyOCttXT14WzE2M11bbV0pO2Zvcih4WzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEz'@;
put 'Zlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1'@;
put 'NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVj'@;
put 'NFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1'@;
put 'NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2'@;
put 'Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY0XVttXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoYWVbeFsxNjRdW21dXT00MTk4NCttLEZbNDE5ODQrbV09eFsxNjRdW21dKTtmb3IoeFsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTZcdTRlMTVcdTRlMTRcdTRlMThcdTRlM2JcdTRlNGRcdTRlNGZcdTRl'@;
put 'NGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFc'@;
put 'dTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlcdTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUzZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5'@;
put 'MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZcdTViNTVcdTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVmMTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYy'@;
put 'NTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZjMTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThcdTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBc'@;
put 'dTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2FcdTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRlYTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRm'@;
put 'MGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRmMDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2'@;
put 'NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY1XVttXV09NDIyNDArbSxGWzQyMjQwK21dPXhbMTY1XVttXSk7Zm9yKHhbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MTcxXHU1MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1'@;
put 'MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEyXHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMz'@;
put 'XHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1'@;
put 'ZTA2XHU1ZTc2XHU1ZTc0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2'@;
put 'NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2YjIxXHU2YjY0XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRlXHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2'@;
put 'XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBjXHU4MDEyXHU4MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0'@;
put 'ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0ZjU3XHU0ZjVlXHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2XHU0ZjYzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY2XS5sZW5ndGg7Kytt'@;
put 'KTY1NTMzIT09eFsxNjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Nl1bbV1dPTQyNDk2K20sRls0MjQ5NittXT14WzE2Nl1bbV0pO2Zvcih4WzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1'@;
put 'NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQz'@;
put 'ZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1'@;
put 'NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1'@;
put 'NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYx'@;
put 'Zlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1'@;
put 'NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2'@;
put 'N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjddW21dXT00Mjc1MittLEZbNDI3NTIrbV09eFsxNjddW21dKTtmb3IoeFsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTNc'@;
put 'dTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZjNzRcdTZjODZcdTZjNzZcdTZjOGRcdTZj'@;
put 'OTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdjZmJcdTdmNTVcdTgwOTZcdTgwOTNc'@;
put 'dTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThkNzBcdThkYjNcdThlYWJcdThlY2Fc'@;
put 'dThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNcdTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJcdTRlOWJcdTRlOWVcdTRlYWJcdTRl'@;
put 'YWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRmNzBcdTRmNzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlcdTUxNzdcdTUxNzZcdTUxNzhc'@;
put 'dTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNcdTU0NzVcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxtPTA7bSE9eFsxNjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY4XVttXV09NDMwMDgrbSxGWzQzMDA4K21dPXhbMTY4XVttXSk7Zm9yKHhbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhiXHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1'@;
put 'NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYz'@;
put 'XHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFhXHU1YzQ4XHU1YzQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2IzXHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1'@;
put 'XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZkXHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0XHU2MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2'@;
put 'MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2MmNiXHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJj'@;
put 'XHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEzXHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBlXHU2NjAwXHU2NjBmXHU2NjE1XHU2NjBhXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OV1bbV1dPTQzMjY0K20sRls0MzI2NCttXT14WzE2OV1bbV0pO2Zvcih4WzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1'@;
put 'Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNj'@;
put 'NVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2'@;
put 'N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1'@;
put 'N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJi'@;
put 'MVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1'@;
put 'OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzBdW21dXT00MzUyMCttLEZbNDM1MjArbV09eFsxNzBdW21dKTtmb3IoeFsxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRlYWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhcdTRmZGZcdTRmY2FcdTRmZDdc'@;
put 'dTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBcdTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUzNTdcdTUzN2JcdTUzOWFcdTUz'@;
put 'ZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0YWFcdTU0YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0'@;
put 'YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJc'@;
put 'dTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJcdTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVmODhcdTVmODVcdTVmOGFcdTVm'@;
put 'OGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVc'@;
put 'dTYyZmRcdTYzMDdcdTYyZjFcdTYyZjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcxXVttXV09NDM3NzYrbSxGWzQzNzc2K21dPXhbMTcxXVttXSk7Zm9yKHhbMTcyXT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmVmXHU2MmVjXHU2MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0'@;
put 'XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2N2QwXHU2N2VjXHU2N2I2XHU2N2FmXHU2N2Y1XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2'@;
put 'YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFmXHU2Y2M5XHU2ZDBiXHU2ZDMyXHU2ZDJhXHU2ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2'@;
put 'Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2ZDJiXHU3MGFiXHU3MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2Ji'@;
put 'XHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRjXHU3NTRlXHU3NTRiXHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEyXHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3'@;
put 'NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3ODBkXHU3OTQ2XHU3OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3'@;
put 'XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Ml1bbV1dPTQ0MDMyK20sRls0NDAzMittXT14WzE3Ml1bbV0pO2Zvcih4WzE3'@;
put 'M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIy'@;
put 'Mlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1'@;
put 'ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1'@;
put 'OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAw'@;
put 'ZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1'@;
put 'NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUw'@;
put 'Nlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTczXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzNdW21dXT00NDI4OCttLEZbNDQyODgrbV09eFsxNzNd'@;
put 'W21dKTtmb3IoeFsxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5'@;
put 'NWFcdTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlcdTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBc'@;
put 'dTVjZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNjNc'@;
put 'dTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNcdTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYzMmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYz'@;
put 'NTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2ZjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZc'@;
put 'dTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBcdTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZiOGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZj'@;
put 'MjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZkNzdcdTZkNTlcdTZkOTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc0XVttXV09NDQ1NDQrbSxGWzQ0'@;
put 'NTQ0K21dPXhbMTc0XVttXSk7Zm9yKHhbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3'@;
put 'MGQ4XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIy'@;
put 'XHU3NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIwXHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3ODMyXHU3OTU1XHU3OTUwXHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3'@;
put 'Yzg5XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIwXHU3ZDIyXHU3ZDE0XHU3ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYx'@;
put 'XHU4MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4MTA2XHU4MGY4XHU4MGYzXHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJjXHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4'@;
put 'MzUwXHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMyXHU4MzM5XHU4MzM2XHU4MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NV1bbV1d'@;
put 'PTQ0ODAwK20sRls0NDgwMCttXT14WzE3NV1bbV0pO2Zvcih4WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1'@;
put 'ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAw'@;
put 'Nlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1'@;
put 'NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2'@;
put 'YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1'@;
put 'NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc2XVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'YWVbeFsxNzZdW21dXT00NTA1NittLEZbNDUwNTYrbV09eFsxNzZdW21dKTtmb3IoeFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhM2NcdTVhNjJcdTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdcdTViYzVcdTViYzRc'@;
put 'dTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVkMjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVlMzNcdTVlMzdcdTVl'@;
put 'YjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlcdTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZcdTYwYmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYwZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYzYTJcdTYzYTVcdTYzNzdc'@;
put 'dTYzNjdcdTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYzODhcdTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1'@;
put 'NWZcdTY1NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4YjVcdTY4N2ZcdTY4NzZc'@;
put 'dTY4YjFcdTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4YThcdTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3N11bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGFlW3hbMTc3XVttXV09NDUzMTIrbSxGWzQ1MzEyK21dPXhbMTc3XVttXSk7Zm9yKHhbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmViXHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5'@;
put 'XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2'@;
put 'ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3MjgxXHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUw'@;
put 'XHU3NGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGY3XHU3NTFjXHU3NTIyXHU3NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNhXHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQyXHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNj'@;
put 'XHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3OTZkXHU3OWZiXHU3YTkyXHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3'@;
put 'ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMyXHU3ZDMxXHU3ZjNkXHU3ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJmXHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1'@;
put 'XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4Mzk2XHU4M2JkXHU4M2FiXHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc4XS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'eFsxNzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OF1bbV1dPTQ1NTY4K20sRls0NTU2OCttXT14WzE3OF1bbV0pO2Zvcih4WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZj'@;
put 'N1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1'@;
put 'OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAy'@;
put 'Mlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3'@;
put 'NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1'@;
put 'NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTVi'@;
put 'Mlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OV0ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PXhbMTc5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzldW21dXT00NTgyNCttLEZbNDU4MjQrbV09eFsxNzldW21dKTtmb3IoeFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNzdcdTVhOWFcdTVh'@;
put 'N2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVjMzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJcdTVlYzRcdTVmM2Nc'@;
put 'dTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFcdTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYzYTNcdTYzOGNcdTYz'@;
put 'Y2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRcdTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1'@;
put 'NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVc'@;
put 'dTY4ZTdcdTY4ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZcdTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZl'@;
put 'MjFcdTZlMzJcdTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZlMWRcdTZlM2VcdTZlY2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'eFsxODBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgwXVttXV09NDYwODArbSxGWzQ2MDgwK21dPXhbMTgwXVttXSk7Zm9yKHhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2'@;
put 'ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2ZTY5XHU2ZTVmXHU3MTE5XHU3MTFhXHU3MTI2XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNhXHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1'@;
put 'XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2XHU3NDI4XHU3NTI1XHU3NTI2XHU3NTZiXHU3NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3'@;
put 'ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3YTAwXHU3YTk4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3'@;
put 'YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3ZDcyXHU3ZDYxXHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDczXHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2'@;
put 'XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4XHU4NDBkXHU4M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4'@;
put 'NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4NmQ0XHU4NmRiXHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVlXHU4YTNjXHU4YTQxXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPXhbMTgxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MV1bbV1dPTQ2MzM2K20sRls0NjMzNittXT14WzE4MV1bbV0pO2Zvcih4WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRj'@;
put 'ZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1'@;
put 'OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1'@;
put 'OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBi'@;
put 'M1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1'@;
put 'NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFi'@;
put 'Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODJdW21dXT00NjU5MittLEZbNDY1OTIrbV09eFsxODJdW21dKTtmb3IoeFsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYx'@;
put 'NGNcdTYxNDRcdTYxNGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZc'@;
put 'dTY1YjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NWFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFcdTY5Njhc'@;
put 'dTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZcdTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZlYzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZlYmFcdTZl'@;
put 'YWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZcdTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdcdTczNDVc'@;
put 'dTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNcdTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3'@;
put 'NjZcdTc3NWVcdTc3NjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgzXVttXV09NDY4NDgrbSxGWzQ2ODQ4K21dPXhbMTgzXVttXSk7Zm9yKHhbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzc5XHU3NzZhXHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3ODdmXHU3OTdhXHU3OTdmXHU3OTgxXHU4'@;
put 'NDJjXHU3OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDViXHU3ZjZlXHU3ZjY5XHU3ZjZhXHU3Zjcy'@;
put 'XHU3ZmE5XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTc5XHU4MTdhXHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3'@;
put 'XHU4NDNkXHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5XHU4NDZjXHU4NDViXHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4'@;
put 'NzA2XHU4NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4OGRjXHU4OGQ4XHU4OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdjXHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZk'@;
put 'XHU4YTYyXHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNlXHU4YTY4XHU4YzYyXHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4'@;
put 'ZWIyXHU4ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NF1bbV1dPTQ3MTA0K20sRls0NzEwNCttXT14WzE4NF1bbV0pO2Zvcih4WzE4NV09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1'@;
put 'OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZj'@;
put 'OVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTli'@;
put 'NFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1'@;
put 'NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2'@;
put 'YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1'@;
put 'NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODVdW21dXT00NzM2MCttLEZbNDczNjArbV09eFsxODVdW21dKTtmb3Io'@;
put 'eFsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0NWZcdTY0N2Fc'@;
put 'dTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJcdTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2RcdTY5YWRcdTY5'@;
put 'Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZmZcdTZlZWZcdTZm'@;
put 'MDZcdTZmMzFcdTZmMzhcdTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZlZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0NjNc'@;
put 'dTc0NmFcdTc0NzBcdTc0NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNcdTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5OGZcdTc5OGRcdTdhMmVcdTdhMzFcdTdh'@;
put 'YWFcdTdhYTlcdTdhZWRcdTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdiYjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBcdTdkY2FcdTdkYjRcdTdkYjJcdTdkYjFc'@;
put 'dTdkYmFcdTdkYTJcdTdkYmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg2XVttXV09NDc2MTYrbSxGWzQ3NjE2K21dPXhb'@;
put 'MTg2XVttXSk7Zm9yKHhbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjcwXHU3ZmUwXHU3ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4MTUwXHU4MTgwXHU4MThmXHU4MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3'@;
put 'XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQxXHU4NGNhXHU4NzNmXHU4NzFjXHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4'@;
put 'NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4YWE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4'@;
put 'YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4Y2QzXHU4Y2QxXHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4XHU5MDVjXHU5MDYzXHU5MDU5XHU5MDVl'@;
put 'XHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0XHU5Mjc4XHU5MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5MjdjXHU5MjkxXHU5NWExXHU5NWE4XHU5NWE5XHU5NWEzXHU5NWE1XHU5NWE0XHU5'@;
put 'Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5ODE4XHU5OGFmXHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0XHU5Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNi'@;
put 'XHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1XHU1MWRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4N11bbV1dPTQ3ODcyK20s'@;
put 'Rls0Nzg3MittXT14WzE4N11bbV0pO2Zvcih4WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYz'@;
put 'NFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1'@;
put 'NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRh'@;
put 'OVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1'@;
put 'NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2'@;
put 'Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODhd'@;
put 'W21dXT00ODEyOCttLEZbNDgxMjgrbV09eFsxODhdW21dKTtmb3IoeFsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2'@;
put 'OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVcdTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRc'@;
put 'dTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNcdTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdmNzdcdTdmYWZcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3'@;
put 'ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRcdThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlc'@;
put 'dThhYzJcdThhYmZcdThhYjBcdThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNcdThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThkNmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThl'@;
put 'MWRcdThlMjJcdThlMGZcdThlMjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OV1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMTg5XVttXV09NDgzODQrbSxGWzQ4Mzg0K21dPXhbMTg5XVttXSk7Zm9yKHhbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5'@;
put 'MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFjXHU5MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3XHU5NzA5XHU5NzYwXHU5NzhkXHU5Nzhi'@;
put 'XHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5OWQwXHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5XHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1OGE4XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1'@;
put 'NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMxXHU1OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJl'@;
put 'XHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2NGM3XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQyXHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2'@;
put 'YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVmXHU2YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2ZmMyXHU2ZmIxXHU2ZmExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTBdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MF1bbV1dPTQ4NjQwK20sRls0ODY0MCttXT14WzE5MF1bbV0pO2Zvcih4WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1'@;
put 'NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYz'@;
put 'OFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1'@;
put 'N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1'@;
put 'ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFl'@;
put 'Ylx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1'@;
put 'OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MV0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMTkxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTFdW21dXT00ODg5NittLEZbNDg4OTYrbV09eFsxOTFdW21dKTtmb3IoeFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVc'@;
put 'dTkzMmVcdTkzMTlcdTk1YmJcdTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVcdTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5'@;
put 'MWJcdTk5MjFcdTk5MWFcdTk5ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlhZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVc'@;
put 'dTU2ODBcdTU2OTBcdTU2ODVcdTU2ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2OGZcdTU4ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVkYmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNc'@;
put 'dTVmYmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBcdTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZh'@;
put 'ZGJcdTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZmZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVc'@;
put 'dTcxZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTJdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzE5Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkyXVttXV09NDkxNTIrbSxGWzQ5MTUyK21dPXhbMTkyXVttXSk7Zm9yKHhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2E3XHU3N2Fk'@;
put 'XHU3N2VmXHU3OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJlXHU3ZTNlXHU3ZTQ2XHU3ZTM3XHU3'@;
put 'ZTMyXHU3ZTQzXHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4MWMyXHU4MWMwXHU4MWJmXHU4MWJk'@;
put 'XHU4MWM5XHU4MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2Qy'@;
put 'XHU4N2M2XHU4N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4'@;
put 'Y2Y4XHU4Y2ZiXHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRhXHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5MzgyXHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1'@;
put 'XHU5MzRiXHU5MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5YTAxXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMTkzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5M11bbV1dPTQ5NDA4K20sRls0OTQwOCttXT14WzE5M11bbV0pO2Zvcih4WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1'@;
put 'NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFm'@;
put 'ZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2My'@;
put 'Ylx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1'@;
put 'ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4'@;
put 'OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzE5NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTRdW21dXT00OTY2NCttLEZbNDk2NjQrbV09eFsxOTRdW21dKTtmb3IoeFsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2FcdTliYzlcdTliZmRcdTliYzhcdTliYzBc'@;
put 'dTlkNTFcdTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVcdTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZhZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcw'@;
put 'MWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcyNThcdTcyYTJcdTczNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5'@;
put 'YjFcdTdhNmJcdTdhNjlcdTdjM2VcdTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVcdTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJc'@;
put 'dTg4MDVcdTg4MGRcdTg3ZjlcdTg3ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlcdThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThlNmNcdThlN2FcdThlNzRcdThmNTRcdThm'@;
put 'NGVcdThmYWRcdTkwOGFcdTkwOGJcdTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFcdTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJc'@;
put 'dTk4NWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk1XVttXV09NDk5MjArbSxGWzQ5OTIwK21dPXhbMTk1XVttXSk7Zm9yKHhbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODU4XHU5ODViXHU5OGJjXHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4'@;
put 'XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3'@;
put 'OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3ZTdjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTgyXHU3ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4NWZiXHU4NWY5XHU4NjExXHU4'@;
put 'NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4XHU5NDAzXHU5M2ZkXHU5NWUx'@;
put 'XHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1YzZjXHU1ZGNkXHU2MWZjXHU2'@;
put 'MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIyXHU4ODIxXHU4ODFmXHU4OTZh'@;
put 'XHU4OTZjXHU4OWJkXHU4Yjc0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Nl1bbV1dPTUwMTc2K20sRls1MDE3NittXT14WzE5Nl1bbV0pO2Zvcih4WzE5N109Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdm'@;
put 'Zlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1'@;
put 'NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1'@;
put 'ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRk'@;
put 'M1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1'@;
put 'OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4'@;
put 'OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTddW21dXT01MDQzMittLEZbNTA0MzIrbV09eFsxOTddW21dKTtmb3IoeFsxOThdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOTZcdTgyNzdcdThkMWJcdTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlcdTlkZmFcdTllN2NcdTllN2RcdTlm'@;
put 'MDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNcdTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlhNjJcdTlhNjVcdTdlOWNcdThiOWNc'@;
put 'dThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk4XVttXV09NTA2ODgrbSxGWzUwNjg4K21dPXhbMTk4XVttXSk7'@;
put 'Zm9yKHhbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTQyXHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0ZTBmXHU1MTg3XHU0ZTBlXHU0'@;
put 'ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUxXHU0ZWRkXHU0ZWRhXHU1MjBj'@;
put 'XHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1YzczXHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzM2XHU2YzQz'@;
put 'XHU2YzNmXHU2YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0ZjEyXHU1MWIxXHU1MjEzXHU1'@;
put 'MjA5XHU1MjEwXHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1YzdjXHU1YzdhXHU1YzdiXHU1Yzdl'@;
put 'XHU1ZGRmXHU1ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2NzNiXHU2NzNhXHU2NzNmXHU2'@;
put 'NzNjXHU2NzMzXHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMV1bbV1dPTUxNDU2K20sRls1MTQ1Nitt'@;
put 'XT14WzIwMV1bbV0pO2Zvcih4WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1'@;
put 'ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2'@;
put 'MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1'@;
put 'NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZk'@;
put 'MVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1'@;
put 'NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDJdW21dXT01MTcx'@;
put 'MittLEZbNTE3MTIrbV09eFsyMDJdW21dKTtmb3IoeFsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTlcdTY3NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJcdTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhc'@;
put 'dTZjNjdcdTZjNmJcdTZjODRcdTZjOGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcyYzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcy'@;
put 'YzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThmYmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2RcdTRmODBcdTRmODdcdTRmNzZcdTRmNzRc'@;
put 'dTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlcdTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUy'@;
put 'YmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRcdTU2Zjdc'@;
put 'dTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MjAzXVttXV09NTE5NjgrbSxGWzUxOTY4K21dPXhbMjAzXVttXSk7Zm9yKHhbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNj'@;
put 'XHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3XHU1YjYyXHU1YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1'@;
put 'Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4XHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBiXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDM0XHU2MDBhXHU2MDE3XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIyXHU2MDBkXHU2MDEwXHU2MDJlXHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFjXHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFh'@;
put 'XHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2NjA5XHU2NWZjXHU2NjA0XHU2NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2'@;
put 'Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2NzdhXHU2NzlmXHU2NzkxXHU2Nzk5XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRlXHU2YzFkXHU2Yzkz'@;
put 'XHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2YyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDRdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzIwNF1bbV1dPTUyMjI0K20sRls1MjIyNCttXT14WzIwNF1bbV0pO2Zvcih4WzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNj'@;
put 'MFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1'@;
put 'NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1Nzdm'@;
put 'YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5'@;
put 'YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1'@;
put 'OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZi'@;
put 'YVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA1'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDVdW21dXT01MjQ4MCttLEZbNTI0ODArbV09eFsyMDVdW21dKTtmb3IoeFsyMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzNcdTgzMGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0'@;
put 'YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVcdTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRc'@;
put 'dTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFcdTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVjNGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVj'@;
put 'ZDdcdTVjY2JcdTVjZGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjZGVcdTVjZGFcdTVjYzlcdTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFcdTVlMjJcdTVlMjNcdTVl'@;
put 'MjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYwNWZcdTYwMjRcdTYwNDRc'@;
put 'dTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFcdTY1NDNcdTY1YWFcdTY1'@;
put 'YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJcdTY3YzhcdTY3YmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDZdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzIwNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA2XVttXV09NTI3MzYrbSxGWzUyNzM2K21dPXhbMjA2XVttXSk7Zm9yKHhbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2N2RjXHU2N2JiXHU2N2Y4XHU2'@;
put 'N2Q4XHU2N2MwXHU2N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2N2RiXHU2N2Zh'@;
put 'XHU2N2M5XHU2N2NhXHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2YjgyXHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2'@;
put 'ZDFhXHU2ZDExXHU2ZDAwXHU2ZDFkXHU2ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDAxXHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlmXHU3MGJlXHU3'@;
put 'MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3MjczXHU3MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3M2I5XHU3M2I2'@;
put 'XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2MzXHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVjXHU3NGVlXHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZiXHU3NmZhXHU3'@;
put 'N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3ODEzXHU3OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA3'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwN11bbV1dPTUyOTkyK20sRls1Mjk5MittXT14WzIwN11bbV0pO2Zvcih4WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1'@;
put 'N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBk'@;
put 'MFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1'@;
put 'ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1'@;
put 'ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAw'@;
put 'N1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1'@;
put 'NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzIwOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDhdW21dXT01MzI0OCttLEZbNTMyNDgrbV09eFsyMDhdW21dKTtmb3IoeFsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTU1MGFcdTU0ZmJcdTU0ZjdcdTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3YzFcdTU5MGVcdTU5'@;
put 'NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVhMmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlcdTVlMjhcdTVlYThc'@;
put 'dTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNcdTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFcdTYwNjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNDFcdTYwYTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJcdTYwOTdcdTYwODdc'@;
put 'dTYwOWNcdTYwOGVcdTYyMTlcdTYyNDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYz'@;
put 'NTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNc'@;
put 'dTY4MzVcdTY4MmJcdTY4MmRcdTY4MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRcdTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZiZTZcdTZiZTRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA5XVttXV09NTM1MDQrbSxGWzUzNTA0K21dPXhbMjA5XVttXSk7Zm9yKHhbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhkXHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVlXHU2ZDY3XHU2ZDYwXHU2'@;
put 'ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3MGQ3XHU3MGQyXHU3MGRl'@;
put 'XHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3MmYzXHU3MmZiXHU3MzAx'@;
put 'XHU3M2QzXHU3M2Q5XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIwXHU3NWMxXHU3NWJiXHU3'@;
put 'NWM0XHU3NWMwXHU3NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3ODJlXHU3ODJiXHU3ODIx'@;
put 'XHU3ODI5XHU3ODMzXHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThjXHU3YThhXHU3YTg3XHU3'@;
put 'YWQ4XHU3YjEwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMF1bbV1dPTUzNzYwK20sRls1Mzc2MCttXT14WzIxMF1bbV0pO2Zvcih4WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1'@;
put 'N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIy'@;
put 'Zlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMx'@;
put 'Nlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1'@;
put 'ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1'@;
put 'N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1'@;
put 'OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjExXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTFdW21dXT01NDAxNittLEZbNTQwMTYrbV09eFsyMTFdW21dKTtmb3IoeFsyMTJdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVcdTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRc'@;
put 'dTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFcdTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUyNmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUz'@;
put 'MmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVcdTU1MzlcdTU1'@;
put 'NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3ZTFc'@;
put 'dTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlcdTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRcdTVhNTdcdTVh'@;
put 'NDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVhNGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVjNTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVkMWFcdTVkMjBc'@;
put 'dTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEyXVttXV09NTQyNzIrbSxGWzU0MjcyK21dPXhbMjEyXVttXSk7Zm9yKHhbMjEz'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDMwXHU1ZDEyXHU1ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhh'@;
put 'XHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNhXHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2'@;
put 'M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2MzNiXHU2MzlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2'@;
put 'MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIy'@;
put 'XHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgwXHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhhXHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2'@;
put 'YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNh'@;
put 'XHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxM11bbV1dPTU0NTI4K20sRls1NDUyOCttXT14WzIxM11b'@;
put 'bV0pO2Zvcih4WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEw'@;
put 'NFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1'@;
put 'NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1'@;
put 'NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2'@;
put 'N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1'@;
put 'N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5'@;
put 'ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTRdW21dXT01NDc4NCttLEZbNTQ3'@;
put 'ODQrbV09eFsyMTRdW21dKTtmb3IoeFsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgx'@;
put 'MjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlcdTgzN2Rc'@;
put 'dTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVcdTgzYWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2YzhcdTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4OWZcdTg4'@;
put 'OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlcdThkYmNc'@;
put 'dThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRcdThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkwZTlcdTkx'@;
put 'NTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE1XVttXV09'@;
put 'NTUwNDArbSxGWzU1MDQwK21dPXhbMjE1XVttXSk7Zm9yKHhbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5'@;
put 'NjZmXHU5NmJmXHU5NzZhXHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkx'@;
put 'XHU1NWE4XHU1NWE1XHU1NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFjXHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1'@;
put 'YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQx'@;
put 'XHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUxXHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1'@;
put 'ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFiXHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2MGNlXHU2MGM0XHU2MTE0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTZdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzIxNl1bbV1dPTU1Mjk2K20sRls1NTI5NittXT14WzIxNl1bbV0pO2Zvcih4WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1'@;
put 'NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNi'@;
put 'ZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1'@;
put 'NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1Njhm'@;
put 'NFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1'@;
put 'NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE3XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsyMTddW21dXT01NTU1MittLEZbNTU1NTIrbV09eFsyMTddW21dKTtmb3IoeFsyMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZlNzFc'@;
put 'dTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZlNTNcdTZlNjVcdTZlMjdcdTZlNzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcx'@;
put 'MWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJcdTcyNWFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0MmJc'@;
put 'dTc0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZc'@;
put 'dTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2ZGFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4'@;
put 'NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdhMDJcdTdhMGFcdTdhMDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdkNThc'@;
put 'dTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdkNjdcdTdkNmFcdTdkNGZcdTdkNmRcdTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMThdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzIxOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE4XVttXV09NTU4MDgrbSxGWzU1ODA4K21dPXhbMjE4XVttXSk7Zm9yKHhbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjY2XHU3ZmEyXHU3ZmEwXHU3ZmExXHU3ZmQ3'@;
put 'XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNhXHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4M2Y5XHU4NDIzXHU4'@;
put 'M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBmXHU4M2RlXHU4NDEx'@;
put 'XHU4NDA2XHU4M2MyXHU4M2YzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2ZlXHU4NmQ4XHU4NmUy'@;
put 'XHU4NmU2XHU4NmQzXHU4NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4OGJkXHU4OGIyXHU4'@;
put 'OTAxXHU4OGM5XHU4OTk1XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4YzgwXHU4Y2JhXHU4Y2Jl'@;
put 'XHU4Y2IwXHU4Y2I5XHU4Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE5XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsyMTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOV1bbV1dPTU2MDY0K20sRls1NjA2NCttXT14WzIxOV1bbV0pO2Zvcih4WzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVl'@;
put 'ZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1'@;
put 'OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4'@;
put 'ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVm'@;
put 'OVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1'@;
put 'NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0'@;
put 'OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzIyMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjBdW21dXT01NjMyMCttLEZbNTYzMjArbV09eFsyMjBdW21dKTtmb3IoeFsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVh'@;
put 'YjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVhY2RcdTVhYjlcdTVhOTBcdTViZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVkZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRc'@;
put 'dTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2JcdTVlYzdcdTVmNDBcdTVmYWZcdTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYz'@;
put 'YzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0'@;
put 'NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZc'@;
put 'dTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFcdTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5'@;
put 'NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJcdWZhMGRcdTZiZmJcdTZiZmNcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsyMjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIxXVttXV09NTY1NzYrbSxGWzU2NTc2K21dPXhbMjIxXVttXSk7Zm9yKHhbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIy'@;
put 'XHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIzXHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3'@;
put 'MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3'@;
put 'MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZlXHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVm'@;
put 'XHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3'@;
put 'N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdjXHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEz'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMl1bbV1dPTU2ODMyK20sRls1NjgzMittXT14WzIyMl1bbV0pO2Zvcih4WzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4'@;
put 'OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1'@;
put 'ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1'@;
put 'ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQz'@;
put 'Mlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1'@;
put 'ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlk'@;
put 'Zlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjNdW21dXT01NzA4OCttLEZbNTcwODgrbV09eFsyMjNdW21dKTtmb3IoeFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTFcdTg5ZTBcdTg5ZTJcdTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRcdThhN2FcdThjM2NcdThjNGJcdThjNGFcdThj'@;
put 'NjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThkNjlcdThkOTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThkZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdc'@;
put 'dThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVcdThmMDdcdThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNDRcdTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFc'@;
put 'dTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTky'@;
put 'MzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTkyNTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZc'@;
put 'dTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBcdTk5YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUw'@;
put 'ZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI0XVttXV09NTczNDQrbSxGWzU3MzQ0K21dPXhbMjI0XVttXSk7Zm9yKHhbMjI1XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1'@;
put 'NjA0XHU1NWZmXHU1NWY5XHU1ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1'@;
put 'XHU1YWVhXHU1YWRhXHU1YWVkXHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRiXHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdk'@;
put 'XHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdlXHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdmXHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1'@;
put 'ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2NDVk'@;
put 'XHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVjXHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2'@;
put 'NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNV1bbV1dPTU3NjAwK20sRls1NzYwMCttXT14WzIyNV1bbV0pO2Zvcih4'@;
put 'WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1'@;
put 'NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVj'@;
put 'ZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVm'@;
put 'OVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1'@;
put 'NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYx'@;
put 'Nlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1'@;
put 'NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjZdW21dXT01Nzg1NittLEZbNTc4NTYrbV09eFsy'@;
put 'MjZdW21dKTtmb3IoeFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhc'@;
put 'dTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRcdTdiOGNcdTdiOWJcdTdiOGVcdTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdk'@;
put 'OWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdkYWZcdTdkYjlcdTdkOTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgw'@;
put 'MjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOGRcdTgxOGNcdTgxOGJcdTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFc'@;
put 'dTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRcdTg0YzdcdTg0Y2NcdTg0OWJcdTg0YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3'@;
put 'NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3MWJcdTg3NDNcdTg3MmNcdTg3NDFcdTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBc'@;
put 'dTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVcdTg4ZmNcdTg4ZjZcdTg4ZmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI3XVttXV09NTgxMTIrbSxG'@;
put 'WzU4MTEyK21dPXhbMjI3XVttXSk7Zm9yKHhbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4YTk5XHU4YThi'@;
put 'XHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAwXHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBlXHU4ZjBkXHU5'@;
put 'MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5MjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU5MmE2XHU5MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5MjhiXHU5MjJk'@;
put 'XHU5NjllXHU5NmExXHU5NmZmXHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5XHU5OWJiXHU5'@;
put 'OWJhXHU5OWMyXHU5OWJkXHU5OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1MGZkXHU1MTBh'@;
put 'XHU1MjhiXHU1MjhjXHU1MmYxXHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOF1b'@;
put 'bV1dPTU4MzY4K20sRls1ODM2OCttXT14WzIyOF1bbV0pO2Zvcih4WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThh'@;
put 'Ylx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1'@;
put 'NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRh'@;
put 'M1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1'@;
put 'NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmEx'@;
put 'Nlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI5XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsyMjldW21dXT01ODYyNCttLEZbNTg2MjQrbV09eFsyMjldW21dKTtmb3IoeFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZmNGZcdTZmODVcdTZmNWFcdTZmOTZcdTZm'@;
put 'NzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBcdTZmNTdcdTZmOTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdcdTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZc'@;
put 'dTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcxOWRcdTcxYTVcdTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTczNWJcdTczNjFcdTczNWFcdTczNTlcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNjJcdTc0ODdcdTc0ODlcdTc0OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlcdTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2'@;
put 'MjhcdTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3ODlcdTc3ODhcdTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZc'@;
put 'dTdhMzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNcdTdiY2VcdTdiYWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFcdTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdk'@;
put 'ZjFcdTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdmZWRcdTdmZWJcdTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMF1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMjMwXVttXV09NTg4ODArbSxGWzU4ODgwK21dPXhbMjMwXVttXSk7Zm9yKHhbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4'@;
put 'MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3'@;
put 'XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4'@;
put 'NTJmXHU4NjYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzViXHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVlXHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4'@;
put 'NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0'@;
put 'XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNlXHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4'@;
put 'Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4ZTE5XHU4ZTI2XHU4ZTI3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMxXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsyMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMV1bbV1dPTU5MTM2K20sRls1OTEzNittXT14WzIzMV1bbV0pO2Zvcih4WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1'@;
put 'OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4'@;
put 'Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1'@;
put 'OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1'@;
put 'OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlk'@;
put 'Nlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1'@;
put 'OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMl0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMjMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzJdW21dXT01OTM5MittLEZbNTkzOTIrbV09eFsyMzJdW21dKTtmb3IoeFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NzNcdTU2NjZc'@;
put 'dTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4YzhcdTU4YmRcdTU4YzlcdTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTViMjhcdTViMWFcdTViMjBcdTViMWVcdTVi'@;
put 'ZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVkYWFcdTVkYThcdTVkYjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJcdTVmYmNcdTYxOWRcdTYxYThcdTYxOTZc'@;
put 'dTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNc'@;
put 'dTY1N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2JcdTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZh'@;
put 'NWFcdTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZhNTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRc'@;
put 'dTZjMDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2VcdTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRcdTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZmYjhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsyMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMzXVttXV09NTk2NDgrbSxGWzU5NjQ4K21dPXhbMjMzXVttXSk7Zm9yKHhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3'@;
put 'MzY5XHU3MzY2XHU3MzY3XHU3MzZjXHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3Nzlh'@;
put 'XHU3NzlkXHU3N2ExXHU3NzljXHU3NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUw'@;
put 'XHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIxXHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3'@;
put 'Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVm'@;
put 'XHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMjM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNF1bbV1dPTU5OTA0K20sRls1OTkwNCttXT14WzIzNF1bbV0pO2Zvcih4WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1'@;
put 'ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODky'@;
put 'ZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlMlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFk'@;
put 'ZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1'@;
put 'OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMw'@;
put 'Zlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1'@;
put 'OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzVdW21dXT02MDE2MCttLEZbNjAxNjArbV09eFsyMzVdW21dKTtmb3IoeFsyMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGJcdTkyZmVcdTkzMDlcdTkzMDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRc'@;
put 'dTk3ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5MjdcdTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlhZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTli'@;
put 'MzNcdTliODBcdTliODVcdTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJcdTliOTNcdTliOTJcdTliOTBcdTliN2FcdTliOTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlkMjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlk'@;
put 'MWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZcdTllODdcdTllYWVcdTllYWRcdTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNcdTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRc'@;
put 'dTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4Y2ZcdTU4ZDJcdTViMmRcdTViMjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVlNmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYx'@;
put 'YjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVcdTY0ZWZcdTY0ZTlcdTY0ZTNcdTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlcdTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVc'@;
put 'dTZhODdcdTZhOTNcdTZhOGVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM2XVttXV09NjA0MTYrbSxGWzYwNDE2K21dPXhbMjM2XVttXSk7Zm9yKHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2ZmVk'@;
put 'XHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3NTEwXHU3'@;
put 'NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3N2I2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3OGZkXHU3'@;
put 'OTAyXHU3OGZiXHU3OGZjXHU3OGYyXHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0XHU3YzBi'@;
put 'XHU3YmYzXHU3YzAyXHU3YzA5XHU3YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNiXHU3'@;
put 'ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEwXHU4NThi'@;
put 'XHU4NWEzXHU4NTdiXHU4NWE0XHU4NTlhXHU4NTllXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3MittXT14WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3'@;
put 'OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1'@;
put 'ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1'@;
put 'OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0'@;
put 'M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1'@;
put 'OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcy'@;
put 'MFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDkyOCttLEZbNjA5MjgrbV09eFsyMzhdW21dKTtm'@;
put 'b3IoeFsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJcdTk5MmNcdTk5MmFcdTk5MzNcdTk5'@;
put 'MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlhMDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlhZmNcdTliNDhcdTliOWFcdTliYThc'@;
put 'dTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJcdTliYTBcdTliYWZcdTlkMzNcdTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNDVcdTlkNDJc'@;
put 'dTlkNDNcdTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFcdTllODlcdTllOGRcdTllYjBcdTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2'@;
put 'OWRcdTU2OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVlNmVcdTYxZDhcdTYxZGZcdTYxZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFcdTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJc'@;
put 'dTY2ZGFcdTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZcdTZhYmFcdTZhYjZcdTZhYjdcdTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcw'@;
put 'MjZcdTZmZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcxZmRcdTczNzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM5XVttXV09NjExODQrbSxGWzYxMTg0K21d'@;
put 'PXhbMjM5XVttXSk7Zm9yKHhbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJlXHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3'@;
put 'NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4'@;
put 'XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4XHU4MDc1XHU4MWQxXHU4MWQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4'@;
put 'N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUzXHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUw'@;
put 'XHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJlXHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4'@;
put 'Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MF1bbV1dPTYxNDQw'@;
put 'K20sRls2MTQ0MCttXT14WzI0MF1bbV0pO2Zvcih4WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1'@;
put 'OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNh'@;
put 'NFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1'@;
put 'OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1'@;
put 'OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1'@;
put 'NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsy'@;
put 'NDFdW21dXT02MTY5NittLEZbNjE2OTYrbV09eFsyNDFdW21dKTtmb3IoeFsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1MGNcdTY1MGVcdTY1ODRcdTY1ZGVc'@;
put 'dTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZhZGZcdTZhZGNcdTZhZDBcdTZhZWJcdTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcw'@;
put 'MTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyYTVcdTcyYTZcdTcyYTRcdTcyYTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5MWRcdTc5MWJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVcdTc5YjBcdTdhNjdcdTdhNjhcdTdjMzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRc'@;
put 'dTdlNjhcdTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgwNzhcdTgxZDdcdTgxZDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1'@;
put 'ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBcdTg3ZmFcdTg4MDNcdTg3ZjZcdTg3ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNc'@;
put 'dTg5NThcdTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThiNDhcdThiNGFcdThiNDBcdThiNTNcdThiNTZcdThiNTRcdThiNGJcdThiNTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Ml1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMjQyXVttXV09NjE5NTIrbSxGWzYxOTUyK21dPXhbMjQyXVttXSk7Zm9yKHhbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4Yzlh'@;
put 'XHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5'@;
put 'M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2VjXHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2XHU5M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2IzXHU5N2I3XHU5N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1'@;
put 'XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5YTFlXHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBiXHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5'@;
put 'YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgxXHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgy'@;
put 'XHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRkXHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDNd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0M11bbV1dPTYyMjA4K20sRls2MjIwOCttXT14WzI0M11bbV0pO2Zvcih4WzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRj'@;
put 'N1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1'@;
put 'NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1Nzky'@;
put 'OFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFk'@;
put 'Ylx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1'@;
put 'OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQy'@;
put 'MFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNmZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0NF0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMjQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDRdW21dXT02MjQ2NCttLEZbNjI0NjQrbV09eFsyNDRdW21dKTtmb3IoeFsyNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZmNcdTk0MGNcdTkzZjZcdTk0'@;
put 'MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFc'@;
put 'dTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZcdTliMTBcdTliMTJcdTliMTFcdTljMGJcdTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlk'@;
put 'OWRcdTlkOTJcdTlkOThcdTlkOTBcdTlkOWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTBcdTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZcdTlkYTZcdTlkYTdcdTll'@;
put 'OTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdcdTllZTZcdTlmMzBcdTlmMmVcdTlmNWJcdTlmNjBcdTlmNWVcdTlmNWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRc'@;
put 'dTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRcdTcwNGFcdTcwNDhcdTcwNDlcdTcwNDVcdTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdl'@;
put 'ODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgxZGRcdTg2MThcdTg2MmFcdTg2MjZcdTg2MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDVd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ1XVttXV09NjI3MjArbSxGWzYyNzIwK21dPXhbMjQ1XVttXSk7Zm9yKHhbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI5XHU4'@;
put 'ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVlXHU4ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1'@;
put 'XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5OGM5XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5'@;
put 'YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5'@;
put 'YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTlj'@;
put 'XHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2'@;
put 'YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3XHU3MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMjQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Nl1bbV1dPTYyOTc2K20sRls2Mjk3NittXT14WzI0Nl1bbV0pO2Zvcih4WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4'@;
put 'NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1'@;
put 'OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1'@;
put 'OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVm'@;
put 'MFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1'@;
put 'NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzI0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDddW21dXT02MzIzMittLEZbNjMyMzIrbV09eFsyNDddW21dKTtmb3IoeFsyNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdThiOGNcdThiOGVcdThiOGJcdThiODhcdThjNDVcdThkMTlcdThlOThcdThmNjRcdThmNjNcdTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTliMWZcdTliMjBcdTljNTJcdTlj'@;
put 'NThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTljNTlcdTljNGNcdTljNGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlkZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRcdTlkZjNcdTlkZThcdTlkZWRc'@;
put 'dTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNcdTlmMzhcdTlmMzdcdTlmMzZcdTlmNDNcdTlmNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTViNGVcdTVjNmRcdTY1MmRcdTY2ZWRc'@;
put 'dTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3ZDVcdTc5MzhcdTc5YjdcdTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVcdThlOWVcdThlOWZcdThlYTBcdThl'@;
put 'OWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNcdTk3NDdcdTk3YzdcdTk3ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTllMDdcdTllMDNcdTllMDZcdTllMDVc'@;
put 'dTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlmNzRcdTlmNzVcdTlmNzZcdTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlcdTc5MzlcdTdjNjlcdTdjNmJcdTdj'@;
put 'ZjZcdTdlOWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ4XVttXV09NjM0ODgrbSxGWzYzNDg4K21dPXhbMjQ4XVttXSk7Zm9yKHhbMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5'@;
put 'NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZlXHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWExXHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5ZjdiXHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMz'@;
put 'XHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZmE0XHU3MDY4XHU3MDY1XHU3Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNm'@;
put 'XHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5NDgyXHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5'@;
put 'YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgxXHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUyXHU3Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3'@;
put 'XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUyNTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUyNTY4XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUy'@;
put 'NTZlXHUyNTcwXHUyNTZmXHUyNTkzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OV1bbV1dPTYzNzQ0K20sRls2Mzc0NCttXT14WzI0OV1bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgp'@;
put 'LEllWzEyNTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAx'@;
put 'MjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2'@;
put 'NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4'@;
put 'YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDEx'@;
put 'YVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVk'@;
put 'XHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxh'@;
put 'ZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgx'@;
put 'YVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBc'@;
put 'dTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVl'@;
put 'XHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJc'@;
put 'dTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0'@;
put 'MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlc'@;
put 'dTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjUyXT1mdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFC'@;
put 'Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZm'@;
put 'ZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFc'@;
put 'eGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4'@;
put 'ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1'@;
put 'NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjUzXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZc'@;
put 'ZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3'@;
put 'eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIx'@;
put 'MjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhi'@;
put 'Ylx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAz'@;
put 'YTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJc'@;
put 'dTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdCht'@;
put 'KTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjU0XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4'@;
put 'MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIw'@;
put 'MzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhh'@;
put 'N1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAx'@;
put 'MWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4Zjdc'@;
put 'eGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjU1XT1mdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFC'@;
put 'Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhi'@;
put 'MVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHVmZmZkXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMx'@;
put 'XHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUw'@;
put 'NWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYo'@;
put 'eFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTI1Nl09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1'@;
put 'XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTky'@;
put 'XHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUw'@;
put 'NmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1'@;
put 'MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNc'@;
put 'eGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiIs'@;
put 'YWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1'@;
put 'XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVm'@;
put 'Z2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUy'@;
put 'MDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3'@;
put 'XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUw'@;
put 'MTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTcz'@;
put 'XHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNThdPWZ1'@;
put 'bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9'@;
put 'Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIw'@;
put 'XHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhk'@;
put 'N1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1'@;
put 'MDFiMFx1MjBhYlx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxZTRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFc'@;
put 'eDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldY'@;
put 'WVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4'@;
put 'ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZc'@;
put 'eGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1'@;
put 'MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsYWU9W10seD17'@;
put 'fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3'@;
put 'XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1u'@;
put 'b3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBc'@;
put 'dTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4'@;
put 'XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRc'@;
put 'dTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAz'@;
put 'YzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJ'@;
put 'ZVsxMDAwN109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEy'@;
put 'MzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFk'@;
put 'XHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQw'@;
put 'Mlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJi'@;
put 'XHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRc'@;
put 'dTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0IixhZT1b'@;
put 'XSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTAwMDhdPWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4'@;
put 'MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RV'@;
put 'VldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFc'@;
put 'dWY4ZWJcdWY4ZWNcdWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJcdWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdTMwZmJcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE1XHVmZjVlXHVmZmZkXHUyMDI2XHUyMDE4XHUyMDE5XHUy'@;
put 'MDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFh'@;
put 'XHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRc'@;
put 'dWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYxXS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2MV1bbV1dPTQxMjE2K20sRls0MTIxNittXT14WzE2MV1bbV0pO2Zvcih4WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3'@;
put 'YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1'@;
put 'MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzE2Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjJdW21dXT00MTQ3MittLEZbNDE0NzIrbV09eFsxNjJdW21dKTtmb3IoeFsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRc'@;
put 'dWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZm'@;
put 'MjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRc'@;
put 'dWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsxNjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYzXVttXV09NDE3MjgrbSxGWzQxNzI4K21dPXhbMTYzXVttXSk7Zm9yKHhbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRi'@;
put 'XHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUz'@;
put 'MDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgy'@;
put 'XHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NF1bbV1dPTQxOTg0K20sRls0MTk4NCttXT14WzE2NF1bbV0pO2Zvcih4WzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBh'@;
put 'OVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1'@;
put 'MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBl'@;
put 'MFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjVdW21dXT00MjI0MCttLEZbNDIyNDArbV09eFsxNjVdW21dKTtmb3IoeFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAz'@;
put 'OTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJc'@;
put 'dTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY2XVttXV09NDI0OTYrbSxGWzQyNDk2K21dPXhbMTY2XVttXSk7Zm9yKHhbMTY3XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUw'@;
put 'NDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJl'@;
put 'XHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUw'@;
put 'NDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2N11bbV1dPTQyNzUyK20sRls0Mjc1MittXT14WzE2N11bbV0pO2Zv'@;
put 'cih4WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAx'@;
put 'Y2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1'@;
put 'MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjhdW21dXT00MzAwOCttLEZbNDMwMDgrbV09eFsxNjhdW21dKTtmb3IoeFsxNjldPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBc'@;
put 'dTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1'@;
put 'MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1Mzdc'@;
put 'dTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY5XVttXV09NDMyNjQrbSxGWzQzMjY0K21dPXhbMTY5XVttXSk7'@;
put 'Zm9yKHhbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTRhXHU5NjNm'@;
put 'XHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3'@;
put 'MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3Njdl'@;
put 'XHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3'@;
put 'OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Nl1bbV1dPTQ1MDU2K20sRls0NTA1Nitt'@;
put 'XT14WzE3Nl1bbV0pO2Zvcih4WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1'@;
put 'NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYw'@;
put 'YVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1'@;
put 'NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzddW21dXT00NTMx'@;
put 'MittLEZbNDUzMTIrbV09eFsxNzddW21dKTtmb3IoeFsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVc'@;
put 'dTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgy'@;
put 'MzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZc'@;
put 'dTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MTc4XVttXV09NDU1NjgrbSxGWzQ1NTY4K21dPXhbMTc4XVttXSk7Zm9yKHhbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0'@;
put 'XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3'@;
put 'OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAx'@;
put 'XHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzldW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzE3OV1bbV1dPTQ1ODI0K20sRls0NTgyNCttXT14WzE3OV1bbV0pO2Zvcih4WzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQz'@;
put 'OVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1'@;
put 'NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMy'@;
put 'Ylx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgw'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODBdW21dXT00NjA4MCttLEZbNDYwODArbV09eFsxODBdW21dKTtmb3IoeFsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUx'@;
put 'NWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRc'@;
put 'dThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVl'@;
put 'OTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODFdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzE4MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgxXVttXV09NDYzMzYrbSxGWzQ2MzM2K21dPXhbMTgxXVttXSk7Zm9yKHhbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0'@;
put 'Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2Vk'@;
put 'XHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2'@;
put 'MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgy'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Ml1bbV1dPTQ2NTkyK20sRls0NjU5MittXT14WzE4Ml1bbV0pO2Zvcih4WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1'@;
put 'NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBh'@;
put 'NVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1'@;
put 'OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzE4M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODNdW21dXT00Njg0OCttLEZbNDY4NDgrbV09eFsxODNdW21dKTtmb3IoeFsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZc'@;
put 'dTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZl'@;
put 'ODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVc'@;
put 'dTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg0XVttXV09NDcxMDQrbSxGWzQ3MTA0K21dPXhbMTg0XVttXSk7Zm9yKHhbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFj'@;
put 'XHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4'@;
put 'NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJm'@;
put 'XHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4'@;
put 'ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NV1bbV1dPTQ3MzYwK20sRls0NzM2MCttXT14WzE4NV1bbV0pO2Zvcih4WzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2'@;
put 'M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1'@;
put 'ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRm'@;
put 'Y1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1'@;
put 'ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODZdW21dXT00NzYxNittLEZbNDc2MTYrbV09eFsxODZdW21dKTtmb3IoeFsxODddPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZj'@;
put 'YWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNc'@;
put 'dTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYw'@;
put 'ZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2Vc'@;
put 'dTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg3XVttXV09NDc4NzIrbSxGWzQ3ODcyK21dPXhbMTg3XVttXSk7Zm9yKHhbMTg4'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDhjXHU5OTY1XHU4ZmY5XHU2'@;
put 'ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBl'@;
put 'XHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0'@;
put 'ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUw'@;
put 'XHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OF1bbV1dPTQ4MTI4K20sRls0ODEyOCttXT14WzE4OF1b'@;
put 'bV0pO2Zvcih4WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA2NVx1'@;
put 'ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0'@;
put 'N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1'@;
put 'NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2Qy'@;
put 'N1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODldW21dXT00ODM4NCttLEZbNDgz'@;
put 'ODQrbV09eFsxODldW21dKTtmb3IoeFsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUx'@;
put 'YzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBc'@;
put 'dTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYz'@;
put 'OThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkwXVttXV09'@;
put 'NDg2NDArbSxGWzQ4NjQwK21dPXhbMTkwXVttXSk7Zm9yKHhbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2'@;
put 'Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJk'@;
put 'XHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3'@;
put 'YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTFdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE5MV1bbV1dPTQ4ODk2K20sRls0ODg5NittXT14WzE5MV1bbV0pO2Zvcih4WzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1'@;
put 'NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2'@;
put 'YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1'@;
put 'Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkyXVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxOTJdW21dXT00OTE1MittLEZbNDkxNTIrbV09eFsxOTJdW21dKTtmb3IoeFsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVc'@;
put 'dTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUy'@;
put 'MTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRc'@;
put 'dTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTNdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzE5M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkzXVttXV09NDk0MDgrbSxGWzQ5NDA4K21dPXhbMTkzXVttXSk7Zm9yKHhbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRm'@;
put 'XHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2'@;
put 'MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJi'@;
put 'XHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk0XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxOTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NF1bbV1dPTQ5NjY0K20sRls0OTY2NCttXT14WzE5NF1bbV0pO2Zvcih4WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5'@;
put 'Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1'@;
put 'OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJk'@;
put 'N1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzE5NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTVdW21dXT00OTkyMCttLEZbNDk5MjArbV09eFsxOTVdW21dKTtmb3IoeFsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZm'@;
put 'MjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNc'@;
put 'dTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgx'@;
put 'N2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxOTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk2XVttXV09NTAxNzYrbSxGWzUwMTc2K21dPXhbMTk2XVttXSk7Zm9yKHhbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1'@;
put 'MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4'@;
put 'XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5'@;
put 'NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5N11bbV1dPTUwNDMyK20sRls1MDQzMittXT14WzE5N11bbV0pO2Zvcih4WzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1'@;
put 'N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0'@;
put 'Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1'@;
put 'NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNl'@;
put 'M1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOThdW21dXT01MDY4OCttLEZbNTA2ODgrbV09eFsxOThdW21dKTtmb3IoeFsxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNc'@;
put 'dThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1'@;
put 'NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRc'@;
put 'dTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2'@;
put 'ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk5XVttXV09NTA5NDQrbSxGWzUwOTQ0K21dPXhbMTk5XVttXSk7Zm9yKHhbMjAwXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2Ji'@;
put 'XHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2'@;
put 'NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2'@;
put 'XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4'@;
put 'NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMF1bbV1dPTUxMjAwK20sRls1MTIwMCttXT14WzIwMF1bbV0pO2Zvcih4'@;
put 'WzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGYxZVx1NjU2M1x1Njg1'@;
put 'MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1'@;
put 'NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRl'@;
put 'OFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1'@;
put 'ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDFdW21dXT01MTQ1NittLEZbNTE0NTYrbV09eFsy'@;
put 'MDFdW21dKTtmb3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3'@;
put 'MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2Jc'@;
put 'dTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTVi'@;
put 'ODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBc'@;
put 'dTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAyXVttXV09NTE3MTIrbSxG'@;
put 'WzUxNzEyK21dPXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1'@;
put 'XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5'@;
put 'MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBi'@;
put 'XHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwM11b'@;
put 'bV1dPTUxOTY4K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMw'@;
put 'OFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1'@;
put 'NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUz'@;
put 'MFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA0XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsyMDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsyMDRdW21dKTtmb3IoeFsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYy'@;
put 'OTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFc'@;
put 'dTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2'@;
put 'NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNV1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxGWzUyNDgwK21dPXhbMjA1XVttXSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2'@;
put 'NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3'@;
put 'XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1'@;
put 'NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA2XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1bbV1dPTUyNzM2K20sRls1MjczNittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1'@;
put 'NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQy'@;
put 'NFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1'@;
put 'Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwN10ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDddW21dXT01Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2Fc'@;
put 'dTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUx'@;
put 'NzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZc'@;
put 'dTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFh'@;
put 'XHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3'@;
put 'MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAx'@;
put 'XHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAw'@;
put 'MFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1'@;
put 'NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEw'@;
put 'Zlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1'@;
put 'OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3IoeFsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0'@;
put 'MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2Rc'@;
put 'dTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRm'@;
put 'NTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJc'@;
put 'dTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhbMjExXVttXSk7Zm9yKHhbMjEyXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5'@;
put 'ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4'@;
put 'XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4'@;
put 'ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYw'@;
put 'XHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20sRls1NDI3MittXT14WzIxMl1bbV0pO2Zvcih4WzIxM109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1'@;
put 'NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2Vm'@;
put 'ZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1'@;
put 'NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4'@;
put 'MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNdW21dXT01NDUyOCttLEZbNTQ1MjgrbV09eFsyMTNdW21dKTtm'@;
put 'b3IoeFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1Yzdc'@;
put 'dTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVm'@;
put 'ZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJc'@;
put 'dTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3'@;
put 'YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE0XVttXV09NTQ3ODQrbSxGWzU0Nzg0K21d'@;
put 'PXhbMjE0XVttXSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1'@;
put 'MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAz'@;
put 'XHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1'@;
put 'ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNV1bbV1dPTU1MDQw'@;
put 'K20sRls1NTA0MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1'@;
put 'Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2'@;
put 'M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1'@;
put 'NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsy'@;
put 'MTZdW21dXT01NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtmb3IoeFsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNc'@;
put 'dTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUx'@;
put 'MDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVc'@;
put 'dTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxN11bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21dPXhbMjE3XVttXSk7Zm9yKHhbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4'@;
put 'XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4'@;
put 'YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVm'@;
put 'XHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMThd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4K20sRls1NTgwOCttXT14WzIxOF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEy'@;
put 'Mlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1'@;
put 'NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3'@;
put 'M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOV0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTldW21dXT01NjA2NCttLEZbNTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlm'@;
put 'MTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRc'@;
put 'dTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgz'@;
put 'NTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjBd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIwXVttXV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4'@;
put 'MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0'@;
put 'XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4'@;
put 'NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1'@;
put 'ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1'@;
put 'NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1'@;
put 'NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJc'@;
put 'dTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0'@;
put 'ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFc'@;
put 'dTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1'@;
put 'NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7Zm9yKHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVj'@;
put 'XHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1'@;
put 'NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5'@;
put 'XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1'@;
put 'ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2'@;
put 'MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1'@;
put 'NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3'@;
put 'N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1'@;
put 'NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTcz'@;
put 'MjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFc'@;
put 'dTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVl'@;
put 'ZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJc'@;
put 'dTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVtt'@;
put 'XSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDZhXHU2'@;
put 'MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFj'@;
put 'XHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5'@;
put 'NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3'@;
put 'XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODEx'@;
put 'MittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2'@;
put 'MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1'@;
put 'NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0'@;
put 'Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01'@;
put 'ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlh'@;
put 'OWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZc'@;
put 'dTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVj'@;
put 'NjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1'@;
put 'YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5'@;
put 'XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5'@;
put 'YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1'@;
put 'N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2Yy'@;
put 'N1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1'@;
put 'NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThc'@;
put 'dTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4'@;
put 'MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRc'@;
put 'dTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4'@;
put 'XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2'@;
put 'YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2Yjkz'@;
put 'XHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIy'@;
put 'NFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1'@;
put 'NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0'@;
put 'ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZj'@;
put 'MGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRc'@;
put 'dTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgx'@;
put 'MmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5'@;
put 'OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFi'@;
put 'XHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3'@;
put 'MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIz'@;
put 'XHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1bbV0pO2Zvcih4WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1'@;
put 'NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1Nzgz'@;
put 'Ylx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1'@;
put 'NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1'@;
put 'MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIrbV09eFsyMzddW21dKTtmb3IoeFsyMzhdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2Rc'@;
put 'dTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2'@;
put 'Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRc'@;
put 'dTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0'@;
put 'ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5MjgrbSxGWzYwOTI4K21dPXhbMjM4XVttXSk7Zm9yKHhb'@;
put 'MjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGU5XHU5NGViXHU5NGVl'@;
put 'XHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5'@;
put 'NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2'@;
put 'XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3'@;
put 'OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOV1bbV1dPTYxMTg0K20sRls2MTE4NCttXT14WzIz'@;
put 'OV1bbV0pO2Zvcih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Ez'@;
put 'OVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1'@;
put 'OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2'@;
put 'ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1'@;
put 'NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDBdW21dXT02MTQ0MCttLEZb'@;
put 'NjE0NDArbV09eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhc'@;
put 'dTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4'@;
put 'ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhc'@;
put 'dTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQxXVtt'@;
put 'XV09NjE2OTYrbSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4Njhi'@;
put 'XHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4'@;
put 'NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4Nzdi'@;
put 'XHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDJdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzI0Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0Ml1bbV0pO2Zvcih4WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgx'@;
put 'Nlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1'@;
put 'N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5'@;
put 'Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQzXVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZbNjIyMDgrbV09eFsyNDNdW21dKTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgy'@;
put 'MzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRc'@;
put 'dTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdk'@;
put 'YTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDRdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVttXV09NjI0NjQrbSxGWzYyNDY0K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5'@;
put 'MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVj'@;
put 'XHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4'@;
put 'ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ1XS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NV1bbV1dPTYyNzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1'@;
put 'OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNj'@;
put 'YVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1'@;
put 'OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRc'@;
put 'dTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTli'@;
put 'NDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJc'@;
put 'dTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7cmV0dXJue2VuYzphZSxkZWM6Rn19KCksSWVbMTAwMjldPWZ1bmN0aW9uKCl7Zm9yKHZhciBG'@;
put 'PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5P'@;
put 'UFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUw'@;
put 'MTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAx'@;
put 'MzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAx'@;
put 'Y1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0'@;
put 'XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVb'@;
put 'bV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTAwNzldPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFh'@;
put 'XHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0'@;
put 'XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFc'@;
put 'dTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIw'@;
put 'MWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFc'@;
put 'dTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9'@;
put 'fSgpLEllWzEwMDgxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywt'@;
put 'Li8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhl'@;
put 'Y1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1'@;
put 'MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhm'@;
put 'Zlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4'@;
put 'XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzI4NTkxXT1mdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFC'@;
put 'Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4'@;
put 'XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFc'@;
put 'eGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4'@;
put 'ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hh'@;
put 'ckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLGF0LmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKGF0LmV4cG9ydHM9SWUpLGZ1bmN0aW9uKEYsYWUpeyJ1c2Ugc3RyaWN0IjtpZih0eXBlb2YgSWU+InUiKXt2YXIgeD1JZTthdC5leHBvcnRzJiZ0eXBl'@;
put 'b2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSI/YXQuZXhwb3J0cz1hZSh4KTpGLmNwdGFibGU9YWUoeCl9ZWxzZSBJZT1hZShJZSl9KHRoaXMsZnVuY3Rpb24oRil7InVzZSBzdHJpY3QiO3ZhciBhZT17MTIwMDoidXRmMTZsZSIsMTIwMToidXRmMTZiZSIsMTJlMzoidXRmMzJsZSIsMTIw'@;
put 'MDE6InV0ZjMyYmUiLDE2OTY5OiJ1dGY2NGxlIiwyMDEyNzoiYXNjaWkiLDY1ZTM6InV0ZjciLDY1MDAxOiJ1dGY4In0seD1bODc0LDEyNTAsMTI1MSwxMjUyLDEyNTMsMTI1NCwxMjU1LDEyNTYsMWU0XSxtPVs5MzIsOTM2LDk0OSw5NTBdLGxlPVs2NTAwMV0sTT17fSxPPXt9LFI9e30sej17'@;
put 'fSxLPWZ1bmN0aW9uKFMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFMpfSxJPWZ1bmN0aW9uKFMpe3JldHVybiBTLmNoYXJDb2RlQXQoMCl9LGs9dHlwZW9mIEJ1ZmZlcjwidSIsRT1mdW5jdGlvbigpe307aWYoayl7dmFyIGo9IUJ1ZmZlci5mcm9tO2lmKCFqKXRyeXtCdWZmZXIuZnJv'@;
put 'bSgiZm9vIiwidXRmOCIpfWNhdGNoe2o9ITB9RT1qP2Z1bmN0aW9uKEMsUyl7cmV0dXJuIFM/bmV3IEJ1ZmZlcihDLFMpOm5ldyBCdWZmZXIoQyl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oQyl7cmV0'@;
put 'dXJuIG5ldyBCdWZmZXIoQyl9KTt2YXIgVj0xMDI0LEI9QnVmZmVyLmFsbG9jVW5zYWZlKFYpLFg9ZnVuY3Rpb24oUyl7dmFyIHY9ZnVuY3Rpb24oUyl7Zm9yKHZhciB2PUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNikscD0wO3A8NjU1MzY7KytwKXZbcF09MDtmb3IodmFyIHc9T2JqZWN0Lmtl'@;
put 'eXMoUyksSj13Lmxlbmd0aCxuZT0wLGRlPXdbbmVdO25lPEo7KytuZSkoZGU9d1tuZV0pJiYodltkZS5jaGFyQ29kZUF0KDApXT1TW2RlXSk7cmV0dXJuIHZ9KEZbU10uZW5jKTtyZXR1cm4gZnVuY3Rpb24odyxKKXt2YXIgZGUsbmU9dy5sZW5ndGgsZmU9MCx4ZT0wLExlPTAsRmU9MDtpZigi'@;
put 'c3RyaW5nIj09dHlwZW9mIHcpZm9yKGRlPUJ1ZmZlci5hbGxvY1Vuc2FmZShuZSksZmU9MDtmZTxuZTsrK2ZlKWRlW2ZlXT12W3cuY2hhckNvZGVBdChmZSldO2Vsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKHcpKXtmb3IoZGU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqbmUpLHhlPTAsZmU9MDtmZTxu'@;
put 'ZTsrK2ZlKShMZT13W2ZlXSk8MTI4P2RlW3hlKytdPXZbTGVdOkxlPDIyND8oZGVbeGUrK109dlsoKDMxJkxlKTw8NikrKDYzJndbZmUrMV0pXSwrK2ZlKTpMZTwyNDA/KGRlW3hlKytdPXZbKCgxNSZMZSk8PDEyKSsoKDYzJndbZmUrMV0pPDw2KSsoNjMmd1tmZSsyXSldLGZlKz0yKTooRmU9'@;
put 'KCg3JkxlKTw8MTgpKygoNjMmd1tmZSsxXSk8PDEyKSsoKDYzJndbZmUrMl0pPDw2KSsoNjMmd1tmZSszXSksZmUrPTMsRmU8NjU1MzY/ZGVbeGUrK109dltGZV06KGRlW3hlKytdPXZbNTUyOTYrKChGZS09NjU1MzYpPj4xMCYxMDIzKV0sZGVbeGUrK109dls1NjMyMCsoMTAyMyZGZSldKSk7'@;
put 'ZGU9ZGUuc2xpY2UoMCx4ZSl9ZWxzZSBmb3IoZGU9QnVmZmVyLmFsbG9jVW5zYWZlKG5lKSxmZT0wO2ZlPG5lOysrZmUpZGVbZmVdPXZbd1tmZV0uY2hhckNvZGVBdCgwKV07cmV0dXJuIEomJiJidWYiIT09Sj8iYXJyIiE9PUo/ZGUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwo'@;
put 'ZGUpOmRlfX0sVT1mdW5jdGlvbihTKXt2YXIgdj1GW1NdLmRlYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLHc9MCxKPSIiO2Zvcih3PTA7dzx2Lmxlbmd0aDsrK3cpaWYoSj12W3ddKXt2YXIgbmU9Si5jaGFyQ29kZUF0KDApO3BbMip3XT0yNTUmbmUscFsyKncrMV09bmU+Pjh9cmV0'@;
put 'dXJuIGZ1bmN0aW9uKGZlKXt2YXIgeGU9ZmUubGVuZ3RoLExlPTAsRmU9MDtpZigyKnhlPlYmJihWPTIqeGUsQj1CdWZmZXIuYWxsb2NVbnNhZmUoVikpLEJ1ZmZlci5pc0J1ZmZlcihmZSkpZm9yKExlPTA7TGU8eGU7TGUrKylCWzIqTGVdPXBbRmU9MipmZVtMZV1dLEJbMipMZSsxXT1wW0Zl'@;
put 'KzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBmZSlmb3IoTGU9MDtMZTx4ZTtMZSsrKUZlPTIqZmUuY2hhckNvZGVBdChMZSksQlsyKkxlXT1wW0ZlXSxCWzIqTGUrMV09cFtGZSsxXTtlbHNlIGZvcihMZT0wO0xlPHhlO0xlKyspQlsyKkxlXT1wW0ZlPTIqZmVbTGVdXSxCWzIqTGUrMV09'@;
put 'cFtGZSsxXTtyZXR1cm4gQi5zbGljZSgwLDIqeGUpLnRvU3RyaW5nKCJ1Y3MyIil9fSxxPWZ1bmN0aW9uKFMpe2Zvcih2YXIgdj1GW1NdLmVuYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLHc9MDt3PDEzMTA3MjsrK3cpcFt3XT0wO2Zvcih2YXIgSj1PYmplY3Qua2V5cyh2KSxuZT0w'@;
put 'LGRlPUpbbmVdO25lPEoubGVuZ3RoOysrbmUpaWYoZGU9SltuZV0pe3ZhciBmZT1kZS5jaGFyQ29kZUF0KDApO3BbMipmZV09MjU1JnZbZGVdLHBbMipmZSsxXT12W2RlXT4+OH1yZXR1cm4gZnVuY3Rpb24oTGUsRmUpe3ZhciBPZT1MZS5sZW5ndGgsamU9QnVmZmVyLmFsbG9jVW5zYWZlKDIq'@;
put 'T2UpLFdlPTAsS2U9MCxZZT0wLEplPTAsbHQ9MDtpZigic3RyaW5nIj09dHlwZW9mIExlKXtmb3IoV2U9SmU9MDtXZTxPZTsrK1dlKUtlPTIqTGUuY2hhckNvZGVBdChXZSksamVbSmUrK109cFtLZSsxXXx8cFtLZV0scFtLZSsxXT4wJiYoamVbSmUrK109cFtLZV0pO2plPWplLnNsaWNlKDAs'@;
put 'SmUpfWVsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKExlKSl7Zm9yKFdlPUplPTA7V2U8T2U7KytXZSkobHQ9TGVbV2VdKTwxMjg/S2U9bHQ6bHQ8MjI0PyhLZT0oKDMxJmx0KTw8NikrKDYzJkxlW1dlKzFdKSwrK1dlKTpsdDwyNDA/KEtlPSgoMTUmbHQpPDwxMikrKCg2MyZMZVtXZSsxXSk8PDYp'@;
put 'Kyg2MyZMZVtXZSsyXSksV2UrPTIpOihLZT0oKDcmbHQpPDwxOCkrKCg2MyZMZVtXZSsxXSk8PDEyKSsoKDYzJkxlW1dlKzJdKTw8NikrKDYzJkxlW1dlKzNdKSxXZSs9MyksS2U8NjU1MzY/KGplW0plKytdPXBbMSsoS2UqPTIpXXx8cFtLZV0scFtLZSsxXT4wJiYoamVbSmUrK109cFtLZV0p'@;
put 'KTooamVbSmUrK109cFsxKyhLZT0yKig1NTI5NisoKFllPUtlLTY1NTM2KT4+MTAmMTAyMykpKV18fHBbS2VdLHBbS2UrMV0+MCYmKGplW0plKytdPXBbS2VdKSxqZVtKZSsrXT1wWzErKEtlPTIqKDU2MzIwKygxMDIzJlllKSkpXXx8cFtLZV0scFtLZSsxXT4wJiYoamVbSmUrK109cFtLZV0p'@;
put 'KTtqZT1qZS5zbGljZSgwLEplKX1lbHNlIGZvcihXZT1KZT0wO1dlPE9lO1dlKyspS2U9MipMZVtXZV0uY2hhckNvZGVBdCgwKSxqZVtKZSsrXT1wW0tlKzFdfHxwW0tlXSxwW0tlKzFdPjAmJihqZVtKZSsrXT1wW0tlXSk7cmV0dXJuIEZlJiYiYnVmIiE9PUZlPyJhcnIiIT09RmU/amUudG9T'@;
put 'dHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoamUpOmplfX0sZWU9ZnVuY3Rpb24oUyl7dmFyIEosdj1GW1NdLmRlYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLHc9MCxuZT0wLGRlPTAsZmU9MDtmb3IoZmU9MDtmZTw2NTUzNjsrK2ZlKXBbMipmZV09MjU1LHBbMipmZSsxXT0y'@;
put 'NTM7Zm9yKHc9MDt3PHYubGVuZ3RoOysrdykoSj12W3ddKSYmKG5lPUouY2hhckNvZGVBdCgwKSxwW2RlPTIqd109MjU1Jm5lLHBbZGUrMV09bmU+PjgpO3JldHVybiBmdW5jdGlvbihMZSl7dmFyIEZlPUxlLmxlbmd0aCxPZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipGZSksamU9MCxXZT0wLEtl'@;
put 'PTA7aWYoQnVmZmVyLmlzQnVmZmVyKExlKSlmb3IoamU9MDtqZTxGZTtqZSsrKTI1NT09PXBbV2U9MipMZVtqZV1dJiYyNTM9PT1wW1dlKzFdJiYoV2U9MiooKExlW2plXTw8OCkrTGVbamUrMV0pLCsramUpLE9lW0tlKytdPXBbV2VdLE9lW0tlKytdPXBbV2UrMV07ZWxzZSBpZigic3RyaW5n'@;
put 'Ij09dHlwZW9mIExlKWZvcihqZT0wO2plPEZlO2plKyspV2U9MipMZS5jaGFyQ29kZUF0KGplKSwyNTU9PT1wW1dlXSYmMjUzPT09cFtXZSsxXSYmKFdlPTIqKChMZS5jaGFyQ29kZUF0KGplKTw8OCkrTGUuY2hhckNvZGVBdChqZSsxKSksKytqZSksT2VbS2UrK109cFtXZV0sT2VbS2UrK109'@;
put 'cFtXZSsxXTtlbHNlIGZvcihqZT0wO2plPEZlO2plKyspMjU1PT09cFtXZT0yKkxlW2plXV0mJjI1Mz09PXBbV2UrMV0mJihXZT0yKigoTGVbamVdPDw4KStMZVtqZSsxXSksKytqZSksT2VbS2UrK109cFtXZV0sT2VbS2UrK109cFtXZSsxXTtyZXR1cm4gT2Uuc2xpY2UoMCxLZSkudG9TdHJp'@;
put 'bmcoInVjczIiKX19O01bNjUwMDFdPWZ1bmN0aW9uIEMoUyl7aWYoInN0cmluZyI9PXR5cGVvZiBTKXJldHVybiBDKFMuc3BsaXQoIiIpLm1hcChJKSk7dmFyIHY9Uy5sZW5ndGgscD0wLHc9MDs0KnY+ViYmKFY9NCp2LEI9QnVmZmVyLmFsbG9jVW5zYWZlKFYpKTt2YXIgSj0wO3Y+PTMmJjIz'@;
put 'OT09U1swXSYmMTg3PT1TWzFdJiYxOTE9PVNbMl0mJihKPTMpO2Zvcih2YXIgbmU9MSxkZT0wLGZlPTA7Sjx2O0orPW5lKW5lPTEsKGZlPVNbSl0pPDEyOD9wPWZlOmZlPDIyND8ocD02NCooMzEmZmUpKyg2MyZTW0orMV0pLG5lPTIpOmZlPDI0MD8ocD0oKDE1JmZlKTw8MTIpKzY0Kig2MyZT'@;
put 'W0orMV0pKyg2MyZTW0orMl0pLG5lPTMpOihwPTI2MjE0NCooNyZmZSkrKCg2MyZTW0orMV0pPDwxMikrNjQqKDYzJlNbSisyXSkrKDYzJlNbSiszXSksbmU9NCkscDw2NTUzNj8oQltkZSsrXT0yNTUmcCxCW2RlKytdPXA+PjgpOih3PTU1Mjk2KygocC09NjU1MzYpPj4xMCYxMDIzKSxwPTU2'@;
put 'MzIwKygxMDIzJnApLEJbZGUrK109MjU1JncsQltkZSsrXT13Pj4+OCxCW2RlKytdPTI1NSZwLEJbZGUrK109cD4+PjgmMjU1KTtyZXR1cm4gQi5zbGljZSgwLGRlKS50b1N0cmluZygidWNzMiIpfSxPWzY1MDAxXT1mdW5jdGlvbihTLHYpe2lmKGsmJkJ1ZmZlci5pc0J1ZmZlcihTKSlyZXR1'@;
put 'cm4gdiYmImJ1ZiIhPT12PyJhcnIiIT09dj9TLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFMpOlM7dmFyIHA9Uy5sZW5ndGgsdz0wLEo9MCxuZT0wLGRlPSJzdHJpbmciPT10eXBlb2YgUzs0KnA+ViYmKFY9NCpwLEI9QnVmZmVyLmFsbG9jVW5zYWZlKFYpKTtmb3IodmFyIGZl'@;
put 'PTA7ZmU8cDsrK2ZlKSh3PWRlP1MuY2hhckNvZGVBdChmZSk6U1tmZV0uY2hhckNvZGVBdCgwKSk8PTEyNz9CW25lKytdPXc6dzw9MjA0Nz8oQltuZSsrXT0xOTIrKHc+PjYpLEJbbmUrK109MTI4Kyg2MyZ3KSk6dz49NTUyOTYmJnc8PTU3MzQzPyh3LT01NTI5NiwrK2ZlLEo9KGRlP1MuY2hh'@;
put 'ckNvZGVBdChmZSk6U1tmZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKHc8PDEwKSxCW25lKytdPTI0MCsoSj4+PjE4JjcpLEJbbmUrK109MTQ0KyhKPj4+MTImNjMpLEJbbmUrK109MTI4KyhKPj4+NiY2MyksQltuZSsrXT0xMjgrKDYzJkopKTooQltuZSsrXT0yMjQrKHc+PjEyKSxCW25lKytd'@;
put 'PTEyOCsodz4+NiY2MyksQltuZSsrXT0xMjgrKDYzJncpKTtyZXR1cm4gdiYmImJ1ZiIhPT12PyJhcnIiIT09dj9CLnNsaWNlKDAsbmUpLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKEIsMCxuZSk6Qi5zbGljZSgwLG5lKX19dmFyIHRlPWZ1bmN0aW9uKCl7aWYoayl7aWYoUlt4'@;
put 'WzBdXSlyZXR1cm47dmFyIFM9MCx2PTA7Zm9yKFM9MDtTPHgubGVuZ3RoOysrUylGW3Y9eFtTXV0mJihSW3ZdPVUodikselt2XT1YKHYpKTtmb3IoUz0wO1M8bS5sZW5ndGg7KytTKUZbdj1tW1NdXSYmKFJbdl09ZWUodikselt2XT1xKHYpKTtmb3IoUz0wO1M8bGUubGVuZ3RoOysrUylNW3Y9'@;
put 'bGVbU11dJiYoUlt2XT1NW3ZdKSxPW3ZdJiYoelt2XT1PW3ZdKX19LG9lPWZ1bmN0aW9uKEMsUyl7cmV0dXJuIiJ9LHNlPWZ1bmN0aW9uKFMpe2RlbGV0ZSBSW1NdLGRlbGV0ZSB6W1NdfSx1ZT17ZW5jYWNoZTp0ZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoayl7aWYoIVJbeFswXV0pcmV0dXJu'@;
put 'O3guZm9yRWFjaChzZSksbS5mb3JFYWNoKHNlKSxsZS5mb3JFYWNoKHNlKX1iPW9lLEQ9MH0sc2Jjczp4LGRiY3M6bX07dGUoKTt2YXIgY2U9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGI9b2UsRD0wO3JldHVybiBG'@;
put 'LnV0aWxzPXtkZWNvZGU6ZnVuY3Rpb24gQyhTLHYpe3ZhciBwO2lmKHA9UltTXSlyZXR1cm4gcCh2KTtpZigic3RyaW5nIj09dHlwZW9mIHYpcmV0dXJuIEMoUyx2LnNwbGl0KCIiKS5tYXAoSSkpO3ZhciBqZSx3PXYubGVuZ3RoLEo9bmV3IEFycmF5KHcpLG5lPSIiLGRlPTAsZmU9MCx4ZT0x'@;
put 'LExlPTAsRmU9MCxPZT1GW1NdLFdlPSIiO2lmKE9lJiYoamU9T2UuZGVjKSlmb3IoZmU9MDtmZTx3O2ZlKz14ZSl7aWYoeGU9MiwobmU9amVbKHZbZmVdPDw4KSt2W2ZlKzFdXSl8fCh4ZT0xLG5lPWplW3ZbZmVdXSksIW5lKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIr'@;
put 'dltmZV0rIiAiK3ZbZmUreGUtMV0rIiAiK2ZlKyIgIit4ZSsiICIramVbdltmZV1dKTtKW0xlKytdPW5lfWVsc2V7aWYoIShXZT1hZVtTXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIrUyk7c3dpdGNoKFdlKXtjYXNlInV0ZjgiOmZvcih3Pj0zJiYyMzk9PXZbMF0mJjE4'@;
put 'Nz09dlsxXSYmMTkxPT12WzJdJiYoZmU9Myk7ZmU8dztmZSs9eGUpeGU9MSx2W2ZlXTwxMjg/ZGU9dltmZV06dltmZV08MjI0PyhkZT02NCooMzEmdltmZV0pKyg2MyZ2W2ZlKzFdKSx4ZT0yKTp2W2ZlXTwyNDA/KGRlPSgoMTUmdltmZV0pPDwxMikrNjQqKDYzJnZbZmUrMV0pKyg2MyZ2W2Zl'@;
put 'KzJdKSx4ZT0zKTooZGU9MjYyMTQ0Kig3JnZbZmVdKSsoKDYzJnZbZmUrMV0pPDwxMikrNjQqKDYzJnZbZmUrMl0pKyg2MyZ2W2ZlKzNdKSx4ZT00KSxkZTw2NTUzNnx8KEZlPTU1Mjk2KygoZGUtPTY1NTM2KT4+MTAmMTAyMyksZGU9NTYzMjArKDEwMjMmZGUpLEpbTGUrK109U3RyaW5nLmZy'@;
put 'b21DaGFyQ29kZShGZSkpLEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShkZSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoayYmQnVmZmVyLmlzQnVmZmVyKHYpKXJldHVybiB2LnRvU3RyaW5nKFdlKTtmb3IoZmU9MDtmZTx3O2ZlKyspSltmZV09U3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlXSk7'@;
put 'TGU9dzticmVhaztjYXNlInV0ZjE2bGUiOmlmKHc+PTImJjI1NT09dlswXSYmMjU0PT12WzFdJiYoZmU9MiksayYmQnVmZmVyLmlzQnVmZmVyKHYpKXJldHVybiB2LnRvU3RyaW5nKFdlKTtmb3IoeGU9MjtmZSsxPHc7ZmUrPXhlKUpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgodltmZSsx'@;
put 'XTw8OCkrdltmZV0pO2JyZWFrO2Nhc2UidXRmMTZiZSI6Zm9yKHc+PTImJjI1ND09dlswXSYmMjU1PT12WzFdJiYoZmU9MikseGU9MjtmZSsxPHc7ZmUrPXhlKUpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgodltmZV08PDgpK3ZbZmUrMV0pO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKHc+'@;
put 'PTQmJjI1NT09dlswXSYmMjU0PT12WzFdJiYwPT09dlsyXSYmMD09PXZbM10mJihmZT00KSx4ZT00O2ZlPHc7ZmUrPXhlKShkZT0odltmZSszXTw8MjQpKyh2W2ZlKzJdPDwxNikrKHZbZmUrMV08PDgpK3ZbZmVdKT42NTUzNT8oZGUtPTY1NTM2LEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29k'@;
put 'ZSg1NTI5NisoZGU+PjEwJjEwMjMpKSxKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmZGUpKSk6SltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGRlKTticmVhaztjYXNlInV0ZjMyYmUiOmZvcih3Pj00JiYyNTU9PXZbM10mJjI1ND09dlsyXSYmMD09PXZbMV0mJjA9'@;
put 'PT12WzBdJiYoZmU9NCkseGU9NDtmZTx3O2ZlKz14ZSkoZGU9KHZbZmVdPDwyNCkrKHZbZmUrMV08PDE2KSsodltmZSsyXTw8OCkrdltmZSszXSk+NjU1MzU/KGRlLT02NTUzNixKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGRlPj4xMCYxMDIzKSksSltMZSsrXT1TdHJpbmcu'@;
put 'ZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmRlKSkpOkpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShkZSk7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3Iodz49NCYmNDM9PXZbMF0mJjQ3PT12WzFdJiYxMTg9PXZbMl0mJih3Pj01JiY1Nj09dlszXSYmNDU9PXZbNF0/ZmU9NTooNTY9PXZbM118fDU3'@;
put 'PT12WzNdfHw0Mz09dlszXXx8NDc9PXZbM10pJiYoZmU9NCkpO2ZlPHc7ZmUrPXhlKWlmKDQzPT09dltmZV0paWYoeGU9MSw0NSE9PXZbZmUrMV0pe2Zvcig7U3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK3hlXSkubWF0Y2goL1tBLVphLXowLTkrXC9dLyk7KXhlKys7dmFyIEtlPTA7NDU9PT12'@;
put 'W2ZlK3hlXSYmKCsreGUsS2U9MSk7Zm9yKHZhciBZZT1bXSxKZT0iIixBZT0wLFRlPTAscWU9MCxYZT0wLFVlPTE7VWU8eGUtS2UmJihBZT1jZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUodltmZStVZSsrXSkpLFRlPWNlLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK1Vl'@;
put 'KytdKSksWWUucHVzaChBZTw8MnxUZT4+NCksLTEhPT0ocWU9Y2UuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKHZbZmUrVWUrK10pKSkmJihZZS5wdXNoKCgxNSZUZSk8PDR8cWU+PjIpLC0xIT09KFhlPWNlLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK1VlKytdKSkpKSk7'@;
put 'KVhlPDY0JiZZZS5wdXNoKCgzJnFlKTw8NnxYZSk7Zm9yKEplPUMoMTIwMSxZZSksVWU9MDtVZTxKZS5sZW5ndGg7KytVZSlKW0xlKytdPUplLmNoYXJBdChVZSl9ZWxzZSB4ZT0yLEpbTGUrK109IisiO2Vsc2UgeGU9MSxKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUodltmZV0pO2JyZWFr'@;
put 'O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitTKyIgIithZVtTXSl9fXJldHVybiBKLnNsaWNlKDAsTGUpLmpvaW4oIiIpfSxlbmNvZGU6ZnVuY3Rpb24gQyhTLHYscCl7aWYoUz09PUQmJmIpcmV0dXJuIGIodixwKTtpZih6W1NdKXJldHVybihiPXpbRD1T'@;
put 'XSkodixwKTtrJiZCdWZmZXIuaXNCdWZmZXIodikmJih2PXYudG9TdHJpbmcoInV0ZjgiKSk7dmFyIEZlLHc9di5sZW5ndGgsSj1rP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KncpOltdLG5lPTAsZGU9MCxmZT0wLHhlPTAsTGU9RltTXSxPZT0iIixqZT0ic3RyaW5nIj09dHlwZW9mIHY7aWYoTGUm'@;
put 'JihGZT1MZS5lbmMpKWZvcihkZT0wO2RlPHc7KytkZSwrK2ZlKShuZT1GZVtqZT92LmNoYXJBdChkZSk6dltkZV1dKT4yNTU/KEpbZmVdPW5lPj44LEpbKytmZV09MjU1Jm5lKTpKW2ZlXT0yNTUmbmU7ZWxzZXtpZighKE9lPWFlW1NdKSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBD'@;
put 'UDogIitTKTtzd2l0Y2goT2Upe2Nhc2UidXRmOCI6aWYoayYmamUpe2ZlPShKPUUodixPZSkpLmxlbmd0aDticmVha31mb3IoZGU9MDtkZTx3OysrZGUsKytmZSkobmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKTw9MTI3P0pbZmVdPW5lOm5lPD0yMDQ3PyhKW2Zl'@;
put 'XT0xOTIrKG5lPj42KSxKWysrZmVdPTEyOCsoNjMmbmUpKTpuZT49NTUyOTYmJm5lPD01NzM0Mz8obmUtPTU1Mjk2LHhlPShqZT92LmNoYXJDb2RlQXQoKytkZSk6dlsrK2RlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsobmU8PDEwKSxKW2ZlXT0yNDArKHhlPj4+MTgmNyksSlsrK2ZlXT0xNDQr'@;
put 'KHhlPj4+MTImNjMpLEpbKytmZV09MTI4Kyh4ZT4+PjYmNjMpLEpbKytmZV09MTI4Kyg2MyZ4ZSkpOihKW2ZlXT0yMjQrKG5lPj4xMiksSlsrK2ZlXT0xMjgrKG5lPj42JjYzKSxKWysrZmVdPTEyOCsoNjMmbmUpKTticmVhaztjYXNlImFzY2lpIjppZihrJiYic3RyaW5nIj09dHlwZW9mIHYp'@;
put 'e2ZlPShKPUUodixPZSkpLmxlbmd0aDticmVha31mb3IoZGU9MDtkZTx3OysrZGUsKytmZSl7aWYoISgobmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKTw9MTI3KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBhc2NpaSAiK25lKTtKW2ZlXT1uZX1icmVhaztjYXNlInV0'@;
put 'ZjE2bGUiOmlmKGsmJiJzdHJpbmciPT10eXBlb2Ygdil7ZmU9KEo9RSh2LE9lKSkubGVuZ3RoO2JyZWFrfWZvcihkZT0wO2RlPHc7KytkZSluZT1qZT92LmNoYXJDb2RlQXQoZGUpOnZbZGVdLmNoYXJDb2RlQXQoMCksSltmZSsrXT0yNTUmbmUsSltmZSsrXT1uZT4+ODticmVhaztjYXNlInV0'@;
put 'ZjE2YmUiOmZvcihkZT0wO2RlPHc7KytkZSluZT1qZT92LmNoYXJDb2RlQXQoZGUpOnZbZGVdLmNoYXJDb2RlQXQoMCksSltmZSsrXT1uZT4+OCxKW2ZlKytdPTI1NSZuZTticmVhaztjYXNlInV0ZjMybGUiOmZvcihkZT0wO2RlPHc7KytkZSkobmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2Rl'@;
put 'XS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyh2WysrZGVdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxKW2ZlKytdPTI1NSZuZSxKW2ZlKytdPTI1NSYobmU+Pj04KSxKW2ZlKytdPTI1NSYobmU+Pj04KSxKW2ZlKytdPTI1NSYobmU+'@;
put 'Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihkZT0wO2RlPHc7KytkZSkobmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyh2WysrZGVdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxK'@;
put 'W2ZlKzNdPTI1NSZuZSxKW2ZlKzJdPTI1NSYobmU+Pj04KSxKW2ZlKzFdPTI1NSYobmU+Pj04KSxKW2ZlXT0yNTUmKG5lPj49OCksZmUrPTQ7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IoZGU9MDtkZTx3O2RlKyspe3ZhciBXZT1qZT92LmNoYXJBdChkZSk6dltkZV0uY2hhckF0KDApO2lmKCIrIiE9'@;
put 'PVdlKWlmKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScoKSwtLi86PyIuaW5kZXhPZihXZSk+LTEpSltmZSsrXT1XZS5jaGFyQ29kZUF0KDApO2Vsc2V7dmFyIEtlPUMoMTIwMSxXZSk7SltmZSsrXT00MyxKW2ZlKytdPWNl'@;
put 'LmNoYXJDb2RlQXQoS2VbMF0+PjIpLEpbZmUrK109Y2UuY2hhckNvZGVBdCgoKDMmS2VbMF0pPDw0KSsoKEtlWzFdfHwwKT4+NCkpLEpbZmUrK109Y2UuY2hhckNvZGVBdCgoKDE1JktlWzFdKTw8MikrKChLZVsyXXx8MCk+PjYpKSxKW2ZlKytdPTQ1fWVsc2UgSltmZSsrXT00MyxKW2ZlKytd'@;
put 'PTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitTKyIgIithZVtTXSl9fXJldHVybiBKPUouc2xpY2UoMCxmZSksaz9wJiYiYnVmIiE9PXA/ImFyciIhPT1wP0oudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoSik6Sjoic3RyIj09'@;
put 'cD9KLm1hcChLKS5qb2luKCIiKTpKfSxoYXNjcDpmdW5jdGlvbihTKXtyZXR1cm4hKCFGW1NdJiYhYWVbU10pfSxtYWdpYzphZSxjYWNoZTp1ZX0sRn0pfSw3NTQ0NjooYXQsSWUpPT57dmFyIEYsYWUseDshZnVuY3Rpb24obSl7aWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKWF0'@;
put 'LmV4cG9ydHM9bSgpO2Vsc2UgaWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKUpTWmlwU3luYz1tKCksYWU9W10sdm9pZCAwIT09KHg9ImZ1bmN0aW9uIj09dHlwZW9mKEY9bSk/Ri5hcHBseShJZSxhZSk6RikmJihhdC5leHBvcnRzPXgpO2Vsc2V7dmFyIGxlO3R5cGVvZiBnbG9i'@;
put 'YWxUaGlzPCJ1Ij9sZT1nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP2xlPXdpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9sZT1nbG9iYWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9sZT0kLmdsb2JhbDp0eXBlb2Ygc2VsZjwidSImJihsZT1zZWxmKSxsZS5KU1ppcFN5bmM9bSgpfX0oZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gTyhSLHosSyl7ZnVuY3Rpb24gSShqLFYpe2lmKCF6W2pdKXtpZighUltqXSl7aWYoaylyZXR1cm4gayhqLCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitqKyInIil9dmFyIFk9eltqXT17ZXhwb3J0czp7fX07UltqXVsw'@;
put 'XS5jYWxsKFkuZXhwb3J0cyxmdW5jdGlvbihYKXtyZXR1cm4gSShSW2pdWzFdW1hdfHxYKX0sWSxZLmV4cG9ydHMsTyxSLHosSyl9cmV0dXJuIHpbal0uZXhwb3J0c31mb3IodmFyIGs9dm9pZCAwLEU9MDtFPEsubGVuZ3RoO0UrKylJKEtbRV0pO3JldHVybiBJfSh7MTpbZnVuY3Rpb24oTyxS'@;
put 'LHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO3ouZW5jb2RlPWZ1bmN0aW9uKEksayl7Zm9yKHZhciBqLFYsQixZLFgsVSxxLEU9IiIsZWU9MDtlZTxJLmxlbmd0aDspWT0oaj1J'@;
put 'LmNoYXJDb2RlQXQoZWUrKykpPj4yLFg9KDMmaik8PDR8KFY9SS5jaGFyQ29kZUF0KGVlKyspKT4+NCxVPSgxNSZWKTw8MnwoQj1JLmNoYXJDb2RlQXQoZWUrKykpPj42LHE9NjMmQixpc05hTihWKT9VPXE9NjQ6aXNOYU4oQikmJihxPTY0KSxFPUUrSy5jaGFyQXQoWSkrSy5jaGFyQXQoWCkr'@;
put 'Sy5jaGFyQXQoVSkrSy5jaGFyQXQocSk7cmV0dXJuIEV9LHouZGVjb2RlPWZ1bmN0aW9uKEksayl7dmFyIFYsQixZLFgsVSxxLEU9IiIsZWU9MDtmb3IoST1JLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTtlZTxJLmxlbmd0aDspWT1LLmluZGV4T2YoSS5jaGFyQXQoZWUrKykp'@;
put 'LFY9KDE1JihYPUsuaW5kZXhPZihJLmNoYXJBdChlZSsrKSkpKTw8NHwoVT1LLmluZGV4T2YoSS5jaGFyQXQoZWUrKykpKT4+MixCPSgzJlUpPDw2fChxPUsuaW5kZXhPZihJLmNoYXJBdChlZSsrKSkpLEUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWTw8MnxYPj40KSw2NCE9VSYmKEUrPVN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUoVikpLDY0IT1xJiYoRSs9U3RyaW5nLmZyb21DaGFyQ29kZShCKSk7cmV0dXJuIEV9fSx7fV0sMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBLKCl7dGhpcy5jb21wcmVzc2VkU2l6ZT0wLHRoaXMudW5jb21wcmVzc2VkU2l6ZT0wLHRoaXMu'@;
put 'Y3JjMzI9MCx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPW51bGwsdGhpcy5jb21wcmVzc2VkQ29udGVudD1udWxsfUsucHJvdG90eXBlPXtnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldENvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxSLmV4cG9y'@;
put 'dHM9S30se31dLDM6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7ei5TVE9SRT17bWFnaWM6IlwwXDAiLGNvbXByZXNzOmZ1bmN0aW9uKEspe3JldHVybiBLfSx1bmNvbXByZXNzOmZ1bmN0aW9uKEspe3JldHVybiBLfSxjb21wcmVzc0lucHV0VHlwZTpudWxsLHVuY29tcHJlc3NJbnB1'@;
put 'dFR5cGU6bnVsbH0sei5ERUZMQVRFPU8oIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo4fV0sNDpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3V0aWxzIiksST1bMCwxOTk2OTU5ODk0LDM5OTM5MTk3ODgsMjU2NzUyNDc5NCwxMjQ2MzQxMzcsMTg4NjA1NzYxNSwzOTE1'@;
put 'NjIxNjg1LDI2NTczOTIwMzUsMjQ5MjY4Mjc0LDIwNDQ1MDgzMjQsMzc3MjExNTIzMCwyNTQ3MTc3ODY0LDE2Mjk0MTk5NSwyMTI1NTYxMDIxLDM4ODc2MDcwNDcsMjQyODQ0NDA0OSw0OTg1MzY1NDgsMTc4OTkyNzY2Niw0MDg5MDE2NjQ4LDIyMjcwNjEyMTQsNDUwNTQ4ODYxLDE4NDMyNTg2'@;
put 'MDMsNDEwNzU4MDc1MywyMjExNjc3NjM5LDMyNTg4Mzk5MCwxNjg0Nzc3MTUyLDQyNTExMjIwNDIsMjMyMTkyNjYzNiwzMzU2MzM0ODcsMTY2MTM2NTQ2NSw0MTk1MzAyNzU1LDIzNjYxMTUzMTcsOTk3MDczMDk2LDEyODE5NTM4ODYsMzU3OTg1NTMzMiwyNzI0Njg4MjQyLDEwMDY4ODgxNDUs'@;
put 'MTI1ODYwNzY4NywzNTI0MTAxNjI5LDI3Njg5NDI0NDMsOTAxMDk3NzIyLDExMTkwMDA2ODQsMzY4NjUxNzIwNiwyODk4MDY1NzI4LDg1MzA0NDQ1MSwxMTcyMjY2MTAxLDM3MDUwMTU3NTksMjg4MjYxNjY2NSw2NTE3Njc5ODAsMTM3MzUwMzU0NiwzMzY5NTU0MzA0LDMyMTgxMDQ1OTgsNTY1'@;
put 'NTA3MjUzLDE0NTQ2MjE3MzEsMzQ4NTExMTcwNSwzMDk5NDM2MzAzLDY3MTI2Njk3NCwxNTk0MTk4MDI0LDMzMjI3MzA5MzAsMjk3MDM0NzgxMiw3OTU4MzU1MjcsMTQ4MzIzMDIyNSwzMjQ0MzY3Mjc1LDMwNjAxNDk1NjUsMTk5NDE0NjE5MiwzMTE1ODUzNCwyNTYzOTA3NzcyLDQwMjM3MTc5'@;
put 'MzAsMTkwNzQ1OTQ2NSwxMTI2MzcyMTUsMjY4MDE1MzI1MywzOTA0NDI3MDU5LDIwMTM3NzYyOTAsMjUxNzIyMDM2LDI1MTcyMTUzNzQsMzc3NTgzMDA0MCwyMTM3NjU2NzYzLDE0MTM3NjgxMywyNDM5Mjc3NzE5LDM4NjUyNzEyOTcsMTgwMjE5NTQ0NCw0NzY4NjQ4NjYsMjIzODAwMTM2OCw0'@;
put 'MDY2NTA4ODc4LDE4MTIzNzA5MjUsNDUzMDkyNzMxLDIxODE2MjUwMjUsNDExMTQ1MTIyMywxNzA2MDg4OTAyLDMxNDA0MjcwNCwyMzQ0NTMyMjAyLDQyNDAwMTc1MzIsMTY1ODY1ODI3MSwzNjY2MTk5NzcsMjM2MjY3MDMyMyw0MjI0OTk0NDA1LDEzMDM1MzU5NjAsOTg0OTYxNDg2LDI3NDcw'@;
put 'MDcwOTIsMzU2OTAzNzUzOCwxMjU2MTcwODE3LDEwMzc2MDQzMTEsMjc2NTIxMDczMywzNTU0MDc5OTk1LDExMzEwMTQ1MDYsODc5Njc5OTk2LDI5MDkyNDM0NjIsMzY2Mzc3MTg1NiwxMTQxMTI0NDY3LDg1NTg0MjI3NywyODUyODAxNjMxLDM3MDg2NDg2NDksMTM0MjUzMzk0OCw2NTQ0NTkz'@;
put 'MDYsMzE4ODM5NjA0OCwzMzczMDE1MTc0LDE0NjY0Nzk5MDksNTQ0MTc5NjM1LDMxMTA1MjM5MTMsMzQ2MjUyMjAxNSwxNTkxNjcxMDU0LDcwMjEzODc3NiwyOTY2NDYwNDUwLDMzNTI3OTk0MTIsMTUwNDkxODgwNyw3ODM1NTE4NzMsMzA4MjY0MDQ0MywzMjMzNDQyOTg5LDM5ODgyOTIzODQs'@;
put 'MjU5NjI1NDY0Niw2MjMxNzA2OCwxOTU3ODEwODQyLDM5Mzk4NDU5NDUsMjY0NzgxNjExMSw4MTQ3MDk5NywxOTQzODAzNTIzLDM4MTQ5MTg5MzAsMjQ4OTU5NjgwNCwyMjUyNzQ0MzAsMjA1Mzc5MDM3NiwzODI2MTc1NzU1LDI0NjY5MDYwMTMsMTY3ODE2NzQzLDIwOTc2NTEzNzcsNDAyNzU1'@;
put 'MjU4MCwyMjY1NDkwMzg2LDUwMzQ0NDA3MiwxNzYyMDUwODE0LDQxNTA0MTcyNDUsMjE1NDEyOTM1NSw0MjY1MjIyMjUsMTg1MjUwNzg3OSw0Mjc1MzEzNTI2LDIzMTIzMTc5MjAsMjgyNzUzNjI2LDE3NDI1NTU4NTIsNDE4OTcwODE0MywyMzk0ODc3OTQ1LDM5NzkxNzc2MywxNjIyMTgzNjM3'@;
put 'LDM2MDQzOTA4ODgsMjcxNDg2NjU1OCw5NTM3Mjk3MzIsMTM0MDA3NjYyNiwzNTE4NzE5OTg1LDI3OTczNjA5OTksMTA2ODgyODM4MSwxMjE5NjM4ODU5LDM2MjQ3NDE4NTAsMjkzNjY3NTE0OCw5MDYxODU0NjIsMTA5MDgxMjUxMiwzNzQ3NjcyMDAzLDI4MjUzNzk2NjksODI5MzI5MTM1LDEx'@;
put 'ODEzMzUxNjEsMzQxMjE3NzgwNCwzMTYwODM0ODQyLDYyODA4NTQwOCwxMzgyNjA1MzY2LDM0MjMzNjkxMDksMzEzODA3ODQ2Nyw1NzA1NjIyMzMsMTQyNjQwMDgxNSwzMzE3MzE2NTQyLDI5OTg3MzM2MDgsNzMzMjM5OTU0LDE1NTUyNjE5NTYsMzI2ODkzNTU5MSwzMDUwMzYwNjI1LDc1MjQ1'@;
put 'OTQwMywxNTQxMzIwMjIxLDI2MDcwNzE5MjAsMzk2NTk3MzAzMCwxOTY5OTIyOTcyLDQwNzM1NDk4LDI2MTc4MzcyMjUsMzk0MzU3NzE1MSwxOTEzMDg3ODc3LDgzOTA4MzcxLDI1MTIzNDE2MzQsMzgwMzc0MDY5MiwyMDc1MjA4NjIyLDIxMzI2MTExMiwyNDYzMjcyNjAzLDM4NTU5OTAyODUs'@;
put 'MjA5NDg1NDA3MSwxOTg5NTg4ODEsMjI2MjAyOTAxMiw0MDU3MjYwNjEwLDE3NTkzNTk5OTIsNTM0NDE0MTkwLDIxNzY3MTg1NDEsNDEzOTMyOTExNSwxODczODM2MDAxLDQxNDY2NDU2NywyMjgyMjQ4OTM0LDQyNzkyMDAzNjgsMTcxMTY4NDU1NCwyODUyODExMTYsMjQwNTgwMTcyNyw0MTY3'@;
put 'MjE2NzQ1LDE2MzQ0Njc3OTUsMzc2MjI5NzAxLDI2ODUwNjc4OTYsMzYwODAwNzQwNiwxMzA4OTE4NjEyLDk1NjU0MzkzOCwyODA4NTU1MTA1LDM0OTU5NTgyNjMsMTIzMTYzNjMwMSwxMDQ3NDI3MDM1LDI5MzI5NTk4MTgsMzY1NDcwMzgzNiwxMDg4MzU5MjcwLDkzNjkxOGUzLDI4NDc3MTQ4'@;
put 'OTksMzczNjgzNzgyOSwxMjAyOTAwODYzLDgxNzIzMzg5NywzMTgzMzQyMTA4LDM0MDEyMzcxMzAsMTQwNDI3NzU1Miw2MTU4MTgxNTAsMzEzNDIwNzQ5MywzNDUzNDIxMjAzLDE0MjM4NTc0NDksNjAxNDUwNDMxLDMwMDk4Mzc2MTQsMzI5NDcxMDQ1NiwxNTY3MTAzNzQ2LDcxMTkyODcyNCwz'@;
put 'MDIwNjY4NDcxLDMyNzIzODAwNjUsMTUxMDMzNDIzNSw3NTUxNjcxMTddO1IuZXhwb3J0cz1mdW5jdGlvbihFLGope2lmKHR5cGVvZiBFPiJ1Inx8IUUubGVuZ3RoKXJldHVybiAwO3ZhciBWPSJzdHJpbmciIT09Sy5nZXRUeXBlT2YoRSk7dHlwZW9mIGo+InUiJiYoaj0wKTt2YXIgWD0wO2pe'@;
put 'PS0xO2Zvcih2YXIgVT0wLHE9RS5sZW5ndGg7VTxxO1UrKylYPVY/RVtVXTpFLmNoYXJDb2RlQXQoVSksaj1qPj4+OF5JWzI1NSYoal5YKV07cmV0dXJuLTFean19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdXRpbHMiKTtmdW5j'@;
put 'dGlvbiBJKGspe3RoaXMuZGF0YT1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5pbmRleD0wfUkucHJvdG90eXBlPXtjaGVja09mZnNldDpmdW5jdGlvbihrKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCtrKX0sY2hlY2tJbmRleDpmdW5jdGlvbihrKXtpZih0aGlzLmxlbmd0aDxrfHxrPDAp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXggPSAiK2srIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihrKXt0aGlzLmNoZWNrSW5kZXgoayksdGhpcy5pbmRleD1rfSxz'@;
put 'a2lwOmZ1bmN0aW9uKGspe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtrKX0sYnl0ZUF0OmZ1bmN0aW9uKGspe30scmVhZEludDpmdW5jdGlvbihrKXt2YXIgaixFPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoayksaj10aGlzLmluZGV4K2stMTtqPj10aGlzLmluZGV4O2otLSlFPShFPDw4KSt0'@;
put 'aGlzLmJ5dGVBdChqKTtyZXR1cm4gdGhpcy5pbmRleCs9ayxFfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKGspe3JldHVybiBLLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMucmVhZERhdGEoaykpfSxyZWFkRGF0YTpmdW5jdGlvbihrKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKGsp'@;
put 'e30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgaz10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKDE5ODArKGs+PjI1JjEyNyksKGs+PjIxJjE1KS0xLGs+PjE2JjMxLGs+PjExJjMxLGs+PjUmNjMsKDMxJmspPDwxKX19LFIuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVu'@;
put 'Y3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt6LmJhc2U2ND0hMSx6LmJpbmFyeT0hMSx6LmRpcj0hMSx6LmNyZWF0ZUZvbGRlcnM9ITEsei5kYXRlPW51bGwsei5jb21wcmVzc2lvbj1udWxsLHouY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'Sz1PKCIuL3V0aWxzIik7ei5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKEkpe3JldHVybiBLLnN0cmluZzJiaW5hcnkoSSl9LHouc3RyaW5nMlVpbnQ4QXJyYXk9ZnVuY3Rpb24oSSl7cmV0dXJuIEsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEkpfSx6LnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0'@;
put 'aW9uKEkpe3JldHVybiBLLnRyYW5zZm9ybVRvKCJzdHJpbmciLEkpfSx6LnN0cmluZzJCbG9iPWZ1bmN0aW9uKEkpe3ZhciBrPUsudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixJKTtyZXR1cm4gSy5hcnJheUJ1ZmZlcjJCbG9iKGspfSx6LmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oSSl7'@;
put 'cmV0dXJuIEsuYXJyYXlCdWZmZXIyQmxvYihJKX0sei50cmFuc2Zvcm1Ubz1mdW5jdGlvbihJLGspe3JldHVybiBLLnRyYW5zZm9ybVRvKEksayl9LHouZ2V0VHlwZU9mPWZ1bmN0aW9uKEkpe3JldHVybiBLLmdldFR5cGVPZihJKX0sei5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oSSl7cmV0dXJu'@;
put 'IEsuY2hlY2tTdXBwb3J0KEkpfSx6Lk1BWF9WQUxVRV8xNkJJVFM9Sy5NQVhfVkFMVUVfMTZCSVRTLHouTUFYX1ZBTFVFXzMyQklUUz1LLk1BWF9WQUxVRV8zMkJJVFMsei5wcmV0dHk9ZnVuY3Rpb24oSSl7cmV0dXJuIEsucHJldHR5KEkpfSx6LmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihJ'@;
put 'KXtyZXR1cm4gSy5maW5kQ29tcHJlc3Npb24oSSl9LHouaXNSZWdFeHA9ZnVuY3Rpb24oSSl7cmV0dXJuIEsuaXNSZWdFeHAoSSl9fSx7Ii4vdXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50'@;
put 'MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIsST1PKCJwYWtvIik7ei51bmNvbXByZXNzSW5wdXRUeXBlPUs/InVpbnQ4YXJyYXkiOiJhcnJheSIsei5jb21wcmVzc0lucHV0VHlwZT1LPyJ1aW50OGFycmF5IjoiYXJyYXkiLHoubWFnaWM9IlxiXDAiLHouY29tcHJlc3M9ZnVu'@;
put 'Y3Rpb24oayl7cmV0dXJuIEkuZGVmbGF0ZVJhdyhrKX0sei51bmNvbXByZXNzPWZ1bmN0aW9uKGspe3JldHVybiBJLmluZmxhdGVSYXcoayl9fSx7cGFrbzoyNH1dLDk6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9iYXNlNjQiKTtmdW5jdGlvbiBJKGssRSl7aWYo'@;
put 'ISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJKGssRSk7dGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9IiIsayYmdGhpcy5sb2FkKGssRSksdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBqPW5ldyBJO2Zvcih2YXIgViBpbiB0aGlzKSJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiB0aGlzW1ZdJiYoaltWXT10aGlzW1ZdKTtyZXR1cm4gan19KEkucHJvdG90eXBlPU8oIi4vb2JqZWN0IikpLmxvYWQ9TygiLi9sb2FkIiksSS5zdXBwb3J0PU8oIi4vc3VwcG9ydCIpLEkuZGVmYXVsdHM9TygiLi9kZWZhdWx0cyIpLEkudXRpbHM9TygiLi9kZXByZWNhdGVkUHVi'@;
put 'bGljVXRpbHMiKSxJLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKGspe3JldHVybiBLLmVuY29kZShrKX0sZGVjb2RlOmZ1bmN0aW9uKGspe3JldHVybiBLLmRlY29kZShrKX19LEkuY29tcHJlc3Npb25zPU8oIi4vY29tcHJlc3Npb25zIiksUi5leHBvcnRzPUl9LHsiLi9iYXNlNjQiOjEsIi4v'@;
put 'Y29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjoxMCwiLi9vYmplY3QiOjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9iYXNlNjQiKSxJPU8oIi4vemlw'@;
put 'RW50cmllcyIpO1IuZXhwb3J0cz1mdW5jdGlvbihrLEUpe3ZhciBqLFYsQixZO2ZvcigoRT1FfHx7fSkuYmFzZTY0JiYoaz1LLmRlY29kZShrKSksaj0oVj1uZXcgSShrLEUpKS5maWxlcyxCPTA7QjxqLmxlbmd0aDtCKyspdGhpcy5maWxlKChZPWpbQl0pLmZpbGVOYW1lLFkuZGVjb21wcmVz'@;
put 'c2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6WS5kYXRlLGRpcjpZLmRpcixjb21tZW50OlkuZmlsZUNvbW1lbnQubGVuZ3RoP1kuZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOkUuY3JlYXRlRm9sZGVyc30pO3JldHVybiBWLnppcENvbW1lbnQubGVu'@;
put 'Z3RoJiYodGhpcy5jb21tZW50PVYuemlwQ29tbWVudCksdGhpc319LHsiLi9iYXNlNjQiOjEsIi4vemlwRW50cmllcyI6MjJ9XSwxMTpbZnVuY3Rpb24oTyxSLHopeyhmdW5jdGlvbihLKXsidXNlIHN0cmljdCI7dmFyIEk9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBLPCJ1Iil7dmFyIGs9IUsu'@;
put 'ZnJvbTtpZighayl0cnl7Sy5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7az0hMH1JPWs/ZnVuY3Rpb24oRSxqKXtyZXR1cm4gaj9uZXcgSyhFLGopOm5ldyBLKEUpfTpLLmZyb20uYmluZChLKSxLLmFsbG9jfHwoSy5hbGxvYz1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IEsoRSl9KX1SLmV4cG9y'@;
put 'dHM9ZnVuY3Rpb24oRSxqKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEU/Sy5hbGxvYyhFKTpJKEUsail9LFIuZXhwb3J0cy50ZXN0PWZ1bmN0aW9uKEUpe3JldHVybiBLLmlzQnVmZmVyKEUpfX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDEyOltm'@;
put 'dW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdWludDhBcnJheVJlYWRlciIpO2Z1bmN0aW9uIEkoayl7dGhpcy5kYXRhPWssdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KEkucHJvdG90eXBlPW5ldyBLKS5yZWFkRGF0YT1mdW5jdGlvbihr'@;
put 'KXt0aGlzLmNoZWNrT2Zmc2V0KGspO3ZhciBFPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrayk7cmV0dXJuIHRoaXMuaW5kZXgrPWssRX0sUi5leHBvcnRzPUl9LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3Qi'@;
put 'O3ZhciBLPU8oIi4vc3VwcG9ydCIpLEk9TygiLi91dGlscyIpLGs9TygiLi9jcmMzMiIpLEU9TygiLi9zaWduYXR1cmUiKSxqPU8oIi4vZGVmYXVsdHMiKSxWPU8oIi4vYmFzZTY0IiksQj1PKCIuL2NvbXByZXNzaW9ucyIpLFk9TygiLi9jb21wcmVzc2VkT2JqZWN0IiksWD1PKCIuL25vZGVC'@;
put 'dWZmZXIiKSxVPU8oIi4vdXRmOCIpLHE9TygiLi9zdHJpbmdXcml0ZXIiKSxlZT1PKCIuL3VpbnQ4QXJyYXlXcml0ZXIiKSx0ZT1mdW5jdGlvbihTKXtpZihTLl9kYXRhIGluc3RhbmNlb2YgWSYmKFMuX2RhdGE9Uy5fZGF0YS5nZXRDb250ZW50KCksUy5vcHRpb25zLmJpbmFyeT0hMCxTLm9w'@;
put 'dGlvbnMuYmFzZTY0PSExLCJ1aW50OGFycmF5Ij09PUkuZ2V0VHlwZU9mKFMuX2RhdGEpKSl7dmFyIHY9Uy5fZGF0YTtTLl9kYXRhPW5ldyBVaW50OEFycmF5KHYubGVuZ3RoKSwwIT09di5sZW5ndGgmJlMuX2RhdGEuc2V0KHYsMCl9cmV0dXJuIFMuX2RhdGF9LG9lPWZ1bmN0aW9uKFMpe3Zh'@;
put 'ciB2PXRlKFMpO3JldHVybiJzdHJpbmciPT09SS5nZXRUeXBlT2Yodik/IVMub3B0aW9ucy5iaW5hcnkmJksubm9kZWJ1ZmZlcj9YKHYsInV0Zi04Iik6Uy5hc0JpbmFyeSgpOnZ9LHNlPWZ1bmN0aW9uKFMpe3ZhciB2PXRlKHRoaXMpO3JldHVybiBudWxsPT09dnx8dHlwZW9mIHY+InUiPyIi'@;
put 'Oih0aGlzLm9wdGlvbnMuYmFzZTY0JiYodj1WLmRlY29kZSh2KSksdj1TJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P0MudXRmOGRlY29kZSh2KTpJLnRyYW5zZm9ybVRvKCJzdHJpbmciLHYpLCFTJiYhdGhpcy5vcHRpb25zLmJpbmFyeSYmKHY9SS50cmFuc2Zvcm1Ubygic3RyaW5nIixDLnV0Zjhl'@;
put 'bmNvZGUodikpKSx2KX0saGU9ZnVuY3Rpb24oUyx2LHApe3RoaXMubmFtZT1TLHRoaXMuZGlyPXAuZGlyLHRoaXMuZGF0ZT1wLmRhdGUsdGhpcy5jb21tZW50PXAuY29tbWVudCx0aGlzLl9kYXRhPXYsdGhpcy5vcHRpb25zPXAsdGhpcy5faW5pdGlhbE1ldGFkYXRhPXtkaXI6cC5kaXIsZGF0'@;
put 'ZTpwLmRhdGV9fTtoZS5wcm90b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVybiBzZS5jYWxsKHRoaXMsITApfSxhc0JpbmFyeTpmdW5jdGlvbigpe3JldHVybiBzZS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgUz1vZSh0aGlzKTtyZXR1cm4gSS50cmFu'@;
put 'c2Zvcm1Ubygibm9kZWJ1ZmZlciIsUyl9LGFzVWludDhBcnJheTpmdW5jdGlvbigpe3ZhciBTPW9lKHRoaXMpO3JldHVybiBJLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixTKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcn19O3Zh'@;
put 'ciB1ZT1mdW5jdGlvbihTLHYpe3ZhciB3LHA9IiI7Zm9yKHc9MDt3PHY7dysrKXArPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JlMpLFM+Pj49ODtyZXR1cm4gcH0sY2U9ZnVuY3Rpb24oKXt2YXIgdixwLFM9e307Zm9yKHY9MDt2PGFyZ3VtZW50cy5sZW5ndGg7disrKWZvcihwIGluIGFyZ3Vt'@;
put 'ZW50c1t2XSlhcmd1bWVudHNbdl0uaGFzT3duUHJvcGVydHkocCkmJnR5cGVvZiBTW3BdPiJ1IiYmKFNbcF09YXJndW1lbnRzW3ZdW3BdKTtyZXR1cm4gU30sYj1mdW5jdGlvbihTLHYscCl7dmFyIEosdz1JLmdldFR5cGVPZih2KTtpZihwPWZ1bmN0aW9uKFMpe3JldHVybiEwPT09KFM9U3x8'@;
put 'e30pLmJhc2U2NCYmbnVsbD09Uy5iaW5hcnkmJihTLmJpbmFyeT0hMCksKFM9Y2UoUyxqKSkuZGF0ZT1TLmRhdGV8fG5ldyBEYXRlLG51bGwhPT1TLmNvbXByZXNzaW9uJiYoUy5jb21wcmVzc2lvbj1TLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkpLFN9KHApLHAuY3JlYXRlRm9sZGVycyYm'@;
put 'KEo9RChTKSkmJkguY2FsbCh0aGlzLEosITApLHAuZGlyfHxudWxsPT09dnx8dHlwZW9mIHY+InUiKXAuYmFzZTY0PSExLHAuYmluYXJ5PSExLHY9bnVsbDtlbHNlIGlmKCJzdHJpbmciPT09dylwLmJpbmFyeSYmIXAuYmFzZTY0JiYhMCE9PXAub3B0aW1pemVkQmluYXJ5U3RyaW5nJiYodj1J'@;
put 'LnN0cmluZzJiaW5hcnkodikpO2Vsc2V7aWYocC5iYXNlNjQ9ITEscC5iaW5hcnk9ITAsISh3fHx2IGluc3RhbmNlb2YgWSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBvZiAnIitTKyInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7ImFycmF5YnVmZmVyIj09PXcmJih2PUku'@;
put 'dHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLHYpKX12YXIgbmU9bmV3IGhlKFMsdixwKTtyZXR1cm4gdGhpcy5maWxlc1tTXT1uZSxuZX0sRD1mdW5jdGlvbihTKXsiLyI9PVMuc2xpY2UoLTEpJiYoUz1TLnN1YnN0cmluZygwLFMubGVuZ3RoLTEpKTt2YXIgdj1TLmxhc3RJbmRleE9mKCIvIik7'@;
put 'cmV0dXJuIHY+MD9TLnN1YnN0cmluZygwLHYpOiIifSxIPWZ1bmN0aW9uKFMsdil7cmV0dXJuIi8iIT1TLnNsaWNlKC0xKSYmKFMrPSIvIiksdj10eXBlb2YgdjwidSImJnYsdGhpcy5maWxlc1tTXXx8Yi5jYWxsKHRoaXMsUyxudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczp2fSksdGhpcy5m'@;
put 'aWxlc1tTXX0sTj1mdW5jdGlvbihTLHYpe3ZhciB3LHA9bmV3IFk7cmV0dXJuIFMuX2RhdGEgaW5zdGFuY2VvZiBZPyhwLnVuY29tcHJlc3NlZFNpemU9Uy5fZGF0YS51bmNvbXByZXNzZWRTaXplLHAuY3JjMzI9Uy5fZGF0YS5jcmMzMiwwPT09cC51bmNvbXByZXNzZWRTaXplfHxTLmRpcj8o'@;
put 'dj1CLlNUT1JFLHAuY29tcHJlc3NlZENvbnRlbnQ9IiIscC5jcmMzMj0wKTpTLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kPT09di5tYWdpYz9wLmNvbXByZXNzZWRDb250ZW50PVMuX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKToodz1TLl9kYXRhLmdldENvbnRlbnQoKSxwLmNvbXByZXNz'@;
put 'ZWRDb250ZW50PXYuY29tcHJlc3MoSS50cmFuc2Zvcm1Ubyh2LmNvbXByZXNzSW5wdXRUeXBlLHcpKSkpOigoISh3PW9lKFMpKXx8MD09PXcubGVuZ3RofHxTLmRpcikmJih2PUIuU1RPUkUsdz0iIikscC51bmNvbXByZXNzZWRTaXplPXcubGVuZ3RoLHAuY3JjMzI9ayh3KSxwLmNvbXByZXNz'@;
put 'ZWRDb250ZW50PXYuY29tcHJlc3MoSS50cmFuc2Zvcm1Ubyh2LmNvbXByZXNzSW5wdXRUeXBlLHcpKSkscC5jb21wcmVzc2VkU2l6ZT1wLmNvbXByZXNzZWRDb250ZW50Lmxlbmd0aCxwLmNvbXByZXNzaW9uTWV0aG9kPXYubWFnaWMscH0sZz1mdW5jdGlvbihTLHYscCx3KXt2YXIgT2UsamUs'@;
put 'SmUsbHQsbmU9SS50cmFuc2Zvcm1Ubygic3RyaW5nIixVLnV0ZjhlbmNvZGUodi5uYW1lKSksZGU9di5jb21tZW50fHwiIixmZT1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZShkZSkpLHhlPW5lLmxlbmd0aCE9PXYubmFtZS5sZW5ndGgsTGU9ZmUubGVuZ3RoIT09ZGUubGVu'@;
put 'Z3RoLEZlPXYub3B0aW9ucyxXZT0iIixLZT0iIixZZT0iIjtKZT12Ll9pbml0aWFsTWV0YWRhdGEuZGlyIT09di5kaXI/di5kaXI6RmUuZGlyLE9lPShsdD12Ll9pbml0aWFsTWV0YWRhdGEuZGF0ZSE9PXYuZGF0ZT92LmRhdGU6RmUuZGF0ZSkuZ2V0SG91cnMoKSxPZTw8PTYsT2V8PWx0Lmdl'@;
put 'dE1pbnV0ZXMoKSxPZTw8PTUsT2V8PWx0LmdldFNlY29uZHMoKS8yLGplPWx0LmdldEZ1bGxZZWFyKCktMTk4MCxqZTw8PTQsamV8PWx0LmdldE1vbnRoKCkrMSxqZTw8PTUsamV8PWx0LmdldERhdGUoKSx4ZSYmKEtlPXVlKDEsMSkrdWUoayhuZSksNCkrbmUsV2UrPSJ1cCIrdWUoS2UubGVu'@;
put 'Z3RoLDIpK0tlKSxMZSYmKFllPXVlKDEsMSkrdWUodGhpcy5jcmMzMihmZSksNCkrZmUsV2UrPSJ1YyIrdWUoWWUubGVuZ3RoLDIpK1llKTt2YXIgUGU9IiI7cmV0dXJuIFBlKz0iXG5cMCIsUGUrPXhlfHxMZT8iXDBcYiI6IlwwXDAiLFBlKz1wLmNvbXByZXNzaW9uTWV0aG9kLFBlKz11ZShP'@;
put 'ZSwyKSxQZSs9dWUoamUsMiksUGUrPXVlKHAuY3JjMzIsNCksUGUrPXVlKHAuY29tcHJlc3NlZFNpemUsNCksUGUrPXVlKHAudW5jb21wcmVzc2VkU2l6ZSw0KSxQZSs9dWUobmUubGVuZ3RoLDIpLFBlKz11ZShXZS5sZW5ndGgsMikse2ZpbGVSZWNvcmQ6RS5MT0NBTF9GSUxFX0hFQURFUitQ'@;
put 'ZStuZStXZSxkaXJSZWNvcmQ6RS5DRU5UUkFMX0ZJTEVfSEVBREVSKyJceDE0XDAiK1BlK3VlKGZlLmxlbmd0aCwyKSsiXDBcMFwwXDAiKyghMD09PUplPyJceDEwXDBcMFwwIjoiXDBcMFwwXDAiKSt1ZSh3LDQpK25lK1dlK2ZlLGNvbXByZXNzZWRPYmplY3Q6cH19LEM9e2xvYWQ6ZnVuY3Rp'@;
put 'b24oUyx2KXt0aHJvdyBuZXcgRXJyb3IoIkxvYWQgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLiBJcyB0aGUgZmlsZSBqc3ppcC1sb2FkLmpzIGluY2x1ZGVkID8iKX0sZmlsdGVyOmZ1bmN0aW9uKFMpe3ZhciBwLHcsSixuZSx2PVtdO2ZvcihwIGluIHRoaXMuZmlsZXMpdGhpcy5maWxlcy5oYXNP'@;
put 'd25Qcm9wZXJ0eShwKSYmKG5lPW5ldyBoZSgoSj10aGlzLmZpbGVzW3BdKS5uYW1lLEouX2RhdGEsY2UoSi5vcHRpb25zKSksdz1wLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgscC5sZW5ndGgpLHAuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmUyh3LG5lKSYmdi5wdXNo'@;
put 'KG5lKSk7cmV0dXJuIHZ9LGZpbGU6ZnVuY3Rpb24oUyx2LHApe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihJLmlzUmVnRXhwKFMpKXt2YXIgdz1TO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihKLG5lKXtyZXR1cm4hbmUuZGlyJiZ3LnRlc3QoSil9KX1yZXR1cm4gdGhpcy5maWx0'@;
put 'ZXIoZnVuY3Rpb24oSixuZSl7cmV0dXJuIW5lLmRpciYmSj09PVN9KVswXXx8bnVsbH1yZXR1cm4gYi5jYWxsKHRoaXMsUz10aGlzLnJvb3QrUyx2LHApLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihTKXtpZighUylyZXR1cm4gdGhpcztpZihJLmlzUmVnRXhwKFMpKXJldHVybiB0aGlzLmZpbHRl'@;
put 'cihmdW5jdGlvbihKLG5lKXtyZXR1cm4gbmUuZGlyJiZTLnRlc3QoSil9KTt2YXIgcD1ILmNhbGwodGhpcyx0aGlzLnJvb3QrUyksdz10aGlzLmNsb25lKCk7cmV0dXJuIHcucm9vdD1wLm5hbWUsd30scmVtb3ZlOmZ1bmN0aW9uKFMpe3ZhciB2PXRoaXMuZmlsZXNbUz10aGlzLnJvb3QrU107'@;
put 'aWYodnx8KCIvIiE9Uy5zbGljZSgtMSkmJihTKz0iLyIpLHY9dGhpcy5maWxlc1tTXSksdiYmIXYuZGlyKWRlbGV0ZSB0aGlzLmZpbGVzW1NdO2Vsc2UgZm9yKHZhciBwPXRoaXMuZmlsdGVyKGZ1bmN0aW9uKEosbmUpe3JldHVybiBuZS5uYW1lLnNsaWNlKDAsUy5sZW5ndGgpPT09U30pLHc9'@;
put 'MDt3PHAubGVuZ3RoO3crKylkZWxldGUgdGhpcy5maWxlc1twW3ddLm5hbWVdO3JldHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbihTKXtTPWNlKFN8fHt9LHtiYXNlNjQ6ITAsY29tcHJlc3Npb246IlNUT1JFIix0eXBlOiJiYXNlNjQiLGNvbW1lbnQ6bnVsbH0pLEkuY2hlY2tTdXBwb3J0'@;
put 'KFMudHlwZSk7dmFyIEosbmUsV2Usdj1bXSxwPTAsdz0wLGRlPUkudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy51dGY4ZW5jb2RlKFMuY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgZmUgaW4gdGhpcy5maWxlcylpZih0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KGZlKSl7'@;
put 'dmFyIHhlPXRoaXMuZmlsZXNbZmVdLExlPXhlLm9wdGlvbnMuY29tcHJlc3Npb258fFMuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxGZT1CW0xlXTtpZighRmUpdGhyb3cgbmV3IEVycm9yKExlKyIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTt2YXIgT2U9Ti5jYWxs'@;
put 'KHRoaXMseGUsRmUpLGplPWcuY2FsbCh0aGlzLGZlLHhlLE9lLHApO3ArPWplLmZpbGVSZWNvcmQubGVuZ3RoK09lLmNvbXByZXNzZWRTaXplLHcrPWplLmRpclJlY29yZC5sZW5ndGgsdi5wdXNoKGplKX1XZT1FLkNFTlRSQUxfRElSRUNUT1JZX0VORCsiXDBcMFwwXDAiK3VlKHYubGVuZ3Ro'@;
put 'LDIpK3VlKHYubGVuZ3RoLDIpK3VlKHcsNCkrdWUocCw0KSt1ZShkZS5sZW5ndGgsMikrZGU7dmFyIEtlPVMudHlwZS50b0xvd2VyQ2FzZSgpO2ZvcihKPSJ1aW50OGFycmF5Ij09PUtlfHwiYXJyYXlidWZmZXIiPT09S2V8fCJibG9iIj09PUtlfHwibm9kZWJ1ZmZlciI9PT1LZT9uZXcgZWUo'@;
put 'cCt3K1dlLmxlbmd0aCk6bmV3IHEocCt3K1dlLmxlbmd0aCksbmU9MDtuZTx2Lmxlbmd0aDtuZSsrKUouYXBwZW5kKHZbbmVdLmZpbGVSZWNvcmQpLEouYXBwZW5kKHZbbmVdLmNvbXByZXNzZWRPYmplY3QuY29tcHJlc3NlZENvbnRlbnQpO2ZvcihuZT0wO25lPHYubGVuZ3RoO25lKyspSi5h'@;
put 'cHBlbmQodltuZV0uZGlyUmVjb3JkKTtKLmFwcGVuZChXZSk7dmFyIFllPUouZmluYWxpemUoKTtzd2l0Y2goUy50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2UidWludDhhcnJheSI6Y2FzZSJhcnJheWJ1ZmZlciI6Y2FzZSJub2RlYnVmZmVyIjpyZXR1cm4gSS50cmFuc2Zvcm1UbyhTLnR5cGUu'@;
put 'dG9Mb3dlckNhc2UoKSxZZSk7Y2FzZSJibG9iIjpyZXR1cm4gSS5hcnJheUJ1ZmZlcjJCbG9iKEkudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixZZSkpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUy5iYXNlNjQ/Vi5lbmNvZGUoWWUpOlllO2RlZmF1bHQ6cmV0dXJuIFllfX0sY3JjMzI6ZnVuY3Rp'@;
put 'b24oUyx2KXtyZXR1cm4gayhTLHYpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKFMpe3JldHVybiBJLnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZShTKSl9LHV0ZjhkZWNvZGU6ZnVuY3Rpb24oUyl7cmV0dXJuIFUudXRmOGRlY29kZShTKX19O1IuZXhwb3J0cz1DfSx7Ii4vYmFzZTY0'@;
put 'IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL2RlZmF1bHRzIjo2LCIuL25vZGVCdWZmZXIiOjExLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nV3JpdGVyIjoxNiwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5V3JpdGVyIjox'@;
put 'OSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt6LkxPQ0FMX0ZJTEVfSEVBREVSPSJQS1x4MDNceDA0Iix6LkNFTlRSQUxfRklMRV9IRUFERVI9IlBLXHgwMVx4MDIiLHouQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2'@;
put 'Iix6LlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDciLHouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDZceDA2Iix6LkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMTU6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9'@;
put 'TygiLi9kYXRhUmVhZGVyIiksST1PKCIuL3V0aWxzIik7ZnVuY3Rpb24gayhFLGope3RoaXMuZGF0YT1FLGp8fCh0aGlzLmRhdGE9SS5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShrLnByb3RvdHlwZT1uZXcgSyku'@;
put 'Ynl0ZUF0PWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdChFKX0say5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihFKX0say5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oRSl7dGhp'@;
put 'cy5jaGVja09mZnNldChFKTt2YXIgaj10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0UpO3JldHVybiB0aGlzLmluZGV4Kz1FLGp9LFIuZXhwb3J0cz1rfSx7Ii4vZGF0YVJlYWRlciI6NSwiLi91dGlscyI6MjF9XSwxNjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgSz1PKCIuL3V0aWxzIiksST1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07SS5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihrKXtrPUsudHJhbnNmb3JtVG8oInN0cmluZyIsayksdGhpcy5kYXRhLnB1c2goayl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5q'@;
put 'b2luKCIiKX19LFIuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0aW9uKE8sUix6KXsoZnVuY3Rpb24oSyl7InVzZSBzdHJpY3QiO2lmKHouYmFzZTY0PSEwLHouYXJyYXk9ITAsei5zdHJpbmc9ITAsei5hcnJheWJ1ZmZlcj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBl'@;
put 'b2YgVWludDhBcnJheTwidSIsei5ub2RlYnVmZmVyPXR5cGVvZiBLPCJ1Iix6LnVpbnQ4YXJyYXk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpei5ibG9iPSExO2Vsc2V7dmFyIEk9bmV3IEFycmF5QnVmZmVyKDApO3RyeXt6LmJsb2I9MD09PW5ldyBCbG9i'@;
put 'KFtJXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3ZhciBFPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7RS5hcHBlbmQoSSksei5ibG9i'@;
put 'PTA9PT1FLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2h7ei5ibG9iPSExfX19fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9kYXRhUmVhZGVyIik7'@;
put 'ZnVuY3Rpb24gSShrKXtrJiYodGhpcy5kYXRhPWssdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTApfShJLnByb3RvdHlwZT1uZXcgSykuYnl0ZUF0PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLmRhdGFba119LEkucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJl'@;
put 'PWZ1bmN0aW9uKGspe2Zvcih2YXIgRT1rLmNoYXJDb2RlQXQoMCksaj1rLmNoYXJDb2RlQXQoMSksVj1rLmNoYXJDb2RlQXQoMiksQj1rLmNoYXJDb2RlQXQoMyksWT10aGlzLmxlbmd0aC00O1k+PTA7LS1ZKWlmKHRoaXMuZGF0YVtZXT09PUUmJnRoaXMuZGF0YVtZKzFdPT09aiYmdGhpcy5k'@;
put 'YXRhW1krMl09PT1WJiZ0aGlzLmRhdGFbWSszXT09PUIpcmV0dXJuIFk7cmV0dXJuLTF9LEkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGspe2lmKHRoaXMuY2hlY2tPZmZzZXQoayksMD09PWspcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciBFPXRoaXMuZGF0YS5zdWJhcnJheSh0'@;
put 'aGlzLmluZGV4LHRoaXMuaW5kZXgrayk7cmV0dXJuIHRoaXMuaW5kZXgrPWssRX0sUi5leHBvcnRzPUl9LHsiLi9kYXRhUmVhZGVyIjo1fV0sMTk6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpLEk9ZnVuY3Rpb24oayl7dGhpcy5kYXRhPW5ldyBVaW50'@;
put 'OEFycmF5KGspLHRoaXMuaW5kZXg9MH07SS5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihrKXswIT09ay5sZW5ndGgmJihrPUsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGspLHRoaXMuZGF0YS5zZXQoayx0aGlzLmluZGV4KSx0aGlzLmluZGV4Kz1rLmxlbmd0aCl9LGZpbmFsaXplOmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LFIuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sMjA6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Zm9yKHZhciBLPU8oIi4vdXRpbHMiKSxJPU8oIi4vc3VwcG9ydCIpLGs9TygiLi9ub2RlQnVmZmVyIiksRT1uZXcgQXJyYXkoMjU2'@;
put 'KSxqPTA7ajwyNTY7aisrKUVbal09aj49MjUyPzY6aj49MjQ4PzU6aj49MjQwPzQ6aj49MjI0PzM6aj49MTkyPzI6MTtFWzI1NF09RVsyNTRdPTE7dmFyIEI9ZnVuY3Rpb24oWCxVKXt2YXIgcTtmb3IoKFU9VXx8WC5sZW5ndGgpPlgubGVuZ3RoJiYoVT1YLmxlbmd0aCkscT1VLTE7cT49MCYm'@;
put 'MTI4PT0oMTkyJlhbcV0pOylxLS07cmV0dXJuIHE8MHx8MD09PXE/VTpxK0VbWFtxXV0+VT9xOlV9LFk9ZnVuY3Rpb24oWCl7dmFyIHEsZWUsdGUsb2Usc2U9WC5sZW5ndGgsaGU9bmV3IEFycmF5KDIqc2UpO2ZvcihlZT0wLHE9MDtxPHNlOylpZigodGU9WFtxKytdKTwxMjgpaGVbZWUrK109'@;
put 'dGU7ZWxzZSBpZigob2U9RVt0ZV0pPjQpaGVbZWUrK109NjU1MzMscSs9b2UtMTtlbHNle2Zvcih0ZSY9Mj09PW9lPzMxOjM9PT1vZT8xNTo3O29lPjEmJnE8c2U7KXRlPXRlPDw2fDYzJlhbcSsrXSxvZS0tO29lPjE/aGVbZWUrK109NjU1MzM6dGU8NjU1MzY/aGVbZWUrK109dGU6KGhlW2Vl'@;
put 'KytdPTU1Mjk2fCh0ZS09NjU1MzYpPj4xMCYxMDIzLGhlW2VlKytdPTU2MzIwfDEwMjMmdGUpfXJldHVybiBoZS5sZW5ndGghPT1lZSYmKGhlLnN1YmFycmF5P2hlPWhlLnN1YmFycmF5KDAsZWUpOmhlLmxlbmd0aD1lZSksSy5hcHBseUZyb21DaGFyQ29kZShoZSl9O3oudXRmOGVuY29kZT1m'@;
put 'dW5jdGlvbihVKXtyZXR1cm4gSS5ub2RlYnVmZmVyP2soVSwidXRmLTgiKTpmdW5jdGlvbihYKXt2YXIgVSxxLGVlLHRlLG9lLHNlPVgubGVuZ3RoLGhlPTA7Zm9yKHRlPTA7dGU8c2U7dGUrKyk1NTI5Nj09KDY0NTEyJihxPVguY2hhckNvZGVBdCh0ZSkpKSYmdGUrMTxzZSYmNTYzMjA9PSg2'@;
put 'NDUxMiYoZWU9WC5jaGFyQ29kZUF0KHRlKzEpKSkmJihxPTY1NTM2KyhxLTU1Mjk2PDwxMCkrKGVlLTU2MzIwKSx0ZSsrKSxoZSs9cTwxMjg/MTpxPDIwNDg/MjpxPDY1NTM2PzM6NDtmb3IoVT1JLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoaGUpOm5ldyBBcnJheShoZSksb2U9MCx0ZT0w'@;
put 'O29lPGhlO3RlKyspNTUyOTY9PSg2NDUxMiYocT1YLmNoYXJDb2RlQXQodGUpKSkmJnRlKzE8c2UmJjU2MzIwPT0oNjQ1MTImKGVlPVguY2hhckNvZGVBdCh0ZSsxKSkpJiYocT02NTUzNisocS01NTI5Njw8MTApKyhlZS01NjMyMCksdGUrKykscTwxMjg/VVtvZSsrXT1xOnE8MjA0OD8oVVtv'@;
put 'ZSsrXT0xOTJ8cT4+PjYsVVtvZSsrXT0xMjh8NjMmcSk6cTw2NTUzNj8oVVtvZSsrXT0yMjR8cT4+PjEyLFVbb2UrK109MTI4fHE+Pj42JjYzLFVbb2UrK109MTI4fDYzJnEpOihVW29lKytdPTI0MHxxPj4+MTgsVVtvZSsrXT0xMjh8cT4+PjEyJjYzLFVbb2UrK109MTI4fHE+Pj42JjYzLFVb'@;
put 'b2UrK109MTI4fDYzJnEpO3JldHVybiBVfShVKX0sei51dGY4ZGVjb2RlPWZ1bmN0aW9uKFUpe2lmKEkubm9kZWJ1ZmZlcilyZXR1cm4gSy50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsVSkudG9TdHJpbmcoInV0Zi04Iik7Zm9yKHZhciBxPVtdLGVlPTAsdGU9KFU9Sy50cmFuc2Zvcm1UbyhJ'@;
put 'LnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsVSkpLmxlbmd0aDtlZTx0ZTspe3ZhciBzZT1CKFUsTWF0aC5taW4oZWUrNjU1MzYsdGUpKTtxLnB1c2goWShJLnVpbnQ4YXJyYXk/VS5zdWJhcnJheShlZSxzZSk6VS5zbGljZShlZSxzZSkpKSxlZT1zZX1yZXR1cm4gcS5qb2luKCIi'@;
put 'KX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3N1cHBvcnQiKSxJPU8oIi4vY29tcHJlc3Npb25zIiksaz1PKCIuL25vZGVCdWZmZXIiKTtmdW5jdGlvbiBFKFgpe3Jl'@;
put 'dHVybiBYfWZ1bmN0aW9uIGooWCxVKXtmb3IodmFyIHE9MDtxPFgubGVuZ3RoOysrcSlVW3FdPTI1NSZYLmNoYXJDb2RlQXQocSk7cmV0dXJuIFV9ZnVuY3Rpb24gVihYKXt2YXIgVT02NTUzNixxPVtdLGVlPVgubGVuZ3RoLHRlPXouZ2V0VHlwZU9mKFgpLG9lPTAsc2U9ITA7dHJ5e3N3aXRj'@;
put 'aCh0ZSl7Y2FzZSJ1aW50OGFycmF5IjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMCkpO2JyZWFrO2Nhc2Uibm9kZWJ1ZmZlciI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGsoMCkpfX1jYXRjaHtzZT0hMX1pZighc2Upe2Zvcih2YXIgaGU9'@;
put 'IiIsdWU9MDt1ZTxYLmxlbmd0aDt1ZSsrKWhlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFhbdWVdKTtyZXR1cm4gaGV9Zm9yKDtvZTxlZSYmVT4xOyl0cnl7cS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwiYXJyYXkiPT09dGV8fCJub2RlYnVmZmVyIj09PXRlP1guc2xpY2Uo'@;
put 'b2UsTWF0aC5taW4ob2UrVSxlZSkpOlguc3ViYXJyYXkob2UsTWF0aC5taW4ob2UrVSxlZSkpKSksb2UrPVV9Y2F0Y2h7VT1NYXRoLmZsb29yKFUvMil9cmV0dXJuIHEuam9pbigiIil9ZnVuY3Rpb24gQihYLFUpe2Zvcih2YXIgcT0wO3E8WC5sZW5ndGg7cSsrKVVbcV09WFtxXTtyZXR1cm4g'@;
put 'VX16LnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oWCl7Zm9yKHZhciBVPSIiLHE9MDtxPFgubGVuZ3RoO3ErKylVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZYLmNoYXJDb2RlQXQocSkpO3JldHVybiBVfSx6LmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oWCl7ei5jaGVja1N1cHBvcnQoImJs'@;
put 'b2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtYXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pfWNhdGNoe3RyeXt2YXIgcT1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIp'@;
put 'O3JldHVybiBxLmFwcGVuZChYKSxxLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19LHouYXBwbHlGcm9tQ2hhckNvZGU9Vjt2YXIgWT17fTtZLnN0cmluZz17c3RyaW5nOkUsYXJyYXk6'@;
put 'ZnVuY3Rpb24oWCl7cmV0dXJuIGooWCxuZXcgQXJyYXkoWC5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIFkuc3RyaW5nLnVpbnQ4YXJyYXkoWCkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBqKFgsbmV3IFVpbnQ4QXJyYXkoWC5sZW5ndGgp'@;
put 'KX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gaihYLGsoWC5sZW5ndGgpKX19LFkuYXJyYXk9e3N0cmluZzpWLGFycmF5OkUsYXJyYXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFgpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4g'@;
put 'bmV3IFVpbnQ4QXJyYXkoWCl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIGsoWCl9fSxZLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oWCl7cmV0dXJuIFYobmV3IFVpbnQ4QXJyYXkoWCkpfSxhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gQihuZXcgVWludDhBcnJheShYKSxu'@;
put 'ZXcgQXJyYXkoWC5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOkUsdWludDhhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWCl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIGsobmV3IFVpbnQ4QXJyYXkoWCkpfX0sWS51aW50OGFycmF5PXtzdHJpbmc6Vixh'@;
put 'cnJheTpmdW5jdGlvbihYKXtyZXR1cm4gQihYLG5ldyBBcnJheShYLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gWC5idWZmZXJ9LHVpbnQ4YXJyYXk6RSxub2RlYnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBrKFgpfX0sWS5ub2RlYnVmZmVyPXtzdHJpbmc6Vixh'@;
put 'cnJheTpmdW5jdGlvbihYKXtyZXR1cm4gQihYLG5ldyBBcnJheShYLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gWS5ub2RlYnVmZmVyLnVpbnQ4YXJyYXkoWCkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBCKFgsbmV3IFVpbnQ4QXJyYXko'@;
put 'WC5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpFfSx6LnRyYW5zZm9ybVRvPWZ1bmN0aW9uKFgsVSl7aWYoVXx8KFU9IiIpLCFYKXJldHVybiBVO3ouY2hlY2tTdXBwb3J0KFgpO3ZhciBxPXouZ2V0VHlwZU9mKFUpO3JldHVybiBZW3FdW1hdKFUpfSx6LmdldFR5cGVPZj1mdW5jdGlvbihYKXtyZXR1'@;
put 'cm4ic3RyaW5nIj09dHlwZW9mIFg/InN0cmluZyI6IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChYKT8iYXJyYXkiOksubm9kZWJ1ZmZlciYmay50ZXN0KFgpPyJub2RlYnVmZmVyIjpLLnVpbnQ4YXJyYXkmJlggaW5zdGFuY2VvZiBVaW50OEFycmF5'@;
put 'PyJ1aW50OGFycmF5IjpLLmFycmF5YnVmZmVyJiZYIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ImFycmF5YnVmZmVyIjp2b2lkIDB9LHouY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKFgpe2lmKCFLW1gudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKFgrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5'@;
put 'IHRoaXMgYnJvd3NlciIpfSx6Lk1BWF9WQUxVRV8xNkJJVFM9NjU1MzUsei5NQVhfVkFMVUVfMzJCSVRTPS0xLHoucHJldHR5PWZ1bmN0aW9uKFgpe3ZhciBxLGVlLFU9IiI7Zm9yKGVlPTA7ZWU8KFh8fCIiKS5sZW5ndGg7ZWUrKylVKz0iXFx4IisoKHE9WC5jaGFyQ29kZUF0KGVlKSk8MTY/'@;
put 'IjAiOiIiKStxLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBVfSx6LmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihYKXtmb3IodmFyIFUgaW4gSSlpZihJLmhhc093blByb3BlcnR5KFUpJiZJW1VdLm1hZ2ljPT09WClyZXR1cm4gSVtVXTtyZXR1cm4gbnVsbH0sei5pc1JlZ0V4'@;
put 'cD1mdW5jdGlvbihYKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChYKX19LHsiLi9jb21wcmVzc2lvbnMiOjMsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTd9XSwyMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgSz1PKCIuL3N0cmluZ1JlYWRlciIpLEk9TygiLi9ub2RlQnVmZmVyUmVhZGVyIiksaz1PKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKSxFPU8oIi4vdXRpbHMiKSxqPU8oIi4vc2lnbmF0dXJlIiksVj1PKCIuL3ppcEVudHJ5IiksQj1PKCIuL3N1cHBvcnQiKSxZPU8oIi4vb2JqZWN0Iik7ZnVu'@;
put 'Y3Rpb24gWChVLHEpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1xLFUmJnRoaXMubG9hZChVKX1YLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTtpZihxIT09VSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1'@;
put 'cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBzaWduYXR1cmUgKCIrRS5wcmV0dHkocSkrIiwgZXhwZWN0ZWQgIitFLnByZXR0eShVKSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRp'@;
put 'c2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6'@;
put 'ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRoaXMuemlwQ29t'@;
put 'bWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PVkudXRmOGRlY29kZSh0aGlzLnppcENvbW1lbnQpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy52ZXJzaW9uTWFkZUJ5'@;
put 'PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMu'@;
put 'Y2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhp'@;
put 'cy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307Zm9yKHZhciBlZSx0ZSxvZSxVPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8VTspZWU9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLG9lPXRoaXMucmVh'@;
put 'ZGVyLnJlYWRTdHJpbmcodGUpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtlZV09e2lkOmVlLGxlbmd0aDp0ZSx2YWx1ZTpvZX19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJl'@;
put 'YWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRocm93IG5ldyBFcnJvcigiTXVsdGktdm9sdW1l'@;
put 'cyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgVSxxO2ZvcihVPTA7VTx0aGlzLmZpbGVzLmxlbmd0aDtVKyspdGhpcy5yZWFkZXIuc2V0SW5kZXgoKHE9dGhpcy5maWxlc1tVXSkubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWdu'@;
put 'YXR1cmUoai5MT0NBTF9GSUxFX0hFQURFUikscS5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSxxLmhhbmRsZVVURjgoKX0scmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgVTtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5y'@;
put 'ZWFkU3RyaW5nKDQpPT09ai5DRU5UUkFMX0ZJTEVfSEVBREVSOykoVT1uZXcgVih7emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKFUpfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFy'@;
put 'IFU9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoai5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO2lmKC0xPT09VSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4'@;
put 'KFUpLHRoaXMuY2hlY2tTaWduYXR1cmUoai5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09RS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09RS5NQVhfVkFMVUVfMTZCSVRT'@;
put 'fHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PUUuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0'@;
put 'PT09RS5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLC0xPT09KFU9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoai5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUg'@;
put 'WklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTt0aGlzLnJlYWRlci5zZXRJbmRleChVKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSx0aGlz'@;
put 'LnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUoai5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX19LHByZXBhcmVSZWFkZXI6ZnVuY3Rp'@;
put 'b24oVSl7dmFyIHE9RS5nZXRUeXBlT2YoVSk7dGhpcy5yZWFkZXI9InN0cmluZyIhPT1xfHxCLnVpbnQ4YXJyYXk/Im5vZGVidWZmZXIiPT09cT9uZXcgSShVKTpuZXcgayhFLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixVKSk6bmV3IEsoVSx0aGlzLmxvYWRPcHRpb25zLm9wdGltaXplZEJp'@;
put 'bmFyeVN0cmluZyl9LGxvYWQ6ZnVuY3Rpb24oVSl7dGhpcy5wcmVwYXJlUmVhZGVyKFUpLHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVhZENlbnRyYWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSxSLmV4cG9ydHM9WH0seyIuL25vZGVCdWZmZXJSZWFkZXIiOjEyLCIuL29i'@;
put 'amVjdCI6MTMsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4LCIuL3V0aWxzIjoyMSwiLi96aXBFbnRyeSI6MjN9XSwyMzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3N0cmlu'@;
put 'Z1JlYWRlciIpLEk9TygiLi91dGlscyIpLGs9TygiLi9jb21wcmVzc2VkT2JqZWN0IiksRT1PKCIuL29iamVjdCIpO2Z1bmN0aW9uIGooVixCKXt0aGlzLm9wdGlvbnM9Vix0aGlzLmxvYWRPcHRpb25zPUJ9ai5wcm90b3R5cGU9e2lzRW5jcnlwdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgx'@;
put 'JnRoaXMuYml0RmxhZyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4gMjA0OD09KDIwNDgmdGhpcy5iaXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKFYsQixZKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgWD1WLmluZGV4O1Yuc2V0SW5kZXgoQik7dmFyIFU9Vi5y'@;
put 'ZWFkRGF0YShZKTtyZXR1cm4gVi5zZXRJbmRleChYKSxVfX0scHJlcGFyZUNvbnRlbnQ6ZnVuY3Rpb24oVixCLFksWCxVKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcT1JLnRyYW5zZm9ybVRvKFgudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENvbXByZXNzZWRDb250ZW50KCkpLGVlPVgu'@;
put 'dW5jb21wcmVzcyhxKTtpZihlZS5sZW5ndGghPT1VKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpO3JldHVybiBlZX19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oVil7dmFyIEIsWTtpZihWLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5n'@;
put 'dGg9Vi5yZWFkSW50KDIpLFk9Vi5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9Vi5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLFYuc2tpcChZKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyBvciBj'@;
put 'b3JydXB0ZWQgemlwIDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKG51bGw9PT0oQj1JLmZpbmRDb21wcmVzc2lvbih0aGlzLmNvbXBy'@;
put 'ZXNzaW9uTWV0aG9kKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitJLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0aGlzLmRlY29tcHJlc3NlZD1uZXcg'@;
put 'ayx0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3JjMzIsdGhpcy5kZWNvbXByZXNzZWQu'@;
put 'Y29tcHJlc3Npb25NZXRob2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChWLFYuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxCKSx0aGlzLmRlY29tcHJlc3NlZC5nZXRD'@;
put 'b250ZW50PXRoaXMucHJlcGFyZUNvbnRlbnQoVixWLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsQix0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPUkudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5kZWNvbXBy'@;
put 'ZXNzZWQuZ2V0Q29udGVudCgpKSxFLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihWKXtpZih0aGlzLnZlcnNpb25NYWRlQnk9Vi5y'@;
put 'ZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD1WLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPVYucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPVYucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9Vi5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9Vi5yZWFkSW50KDQpLHRoaXMuY29t'@;
put 'cHJlc3NlZFNpemU9Vi5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1WLnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1WLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1WLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1WLnJlYWRJbnQoMiks'@;
put 'dGhpcy5kaXNrTnVtYmVyU3RhcnQ9Vi5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1WLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPVYucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVYucmVhZEludCg0KSx0aGlzLmlzRW5jcnlw'@;
put 'dGVkKCkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1WLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoViksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChWKSx0aGlzLmZp'@;
put 'bGVDb21tZW50PVYucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbihWKXtpZih0aGlzLmV4dHJhRmllbGRzWzFdKXt2YXIgQj1uZXcgSyh0aGlz'@;
put 'LmV4dHJhRmllbGRzWzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9Qi5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09SS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5jb21wcmVzc2VkU2l6'@;
put 'ZT1CLnJlYWRJbnQoOCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PUIucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmRpc2tOdW1iZXJTdGFydD1C'@;
put 'LnJlYWRJbnQoNCkpfX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKFYpe3ZhciBZLFgsVSxCPVYuaW5kZXg7Zm9yKHRoaXMuZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307Vi5pbmRleDxCK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KVk9Vi5yZWFkSW50KDIpLFg9Vi5yZWFkSW50'@;
put 'KDIpLFU9Vi5yZWFkU3RyaW5nKFgpLHRoaXMuZXh0cmFGaWVsZHNbWV09e2lkOlksbGVuZ3RoOlgsdmFsdWU6VX19LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPUUudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50'@;
put 'PUUudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBWPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO251bGwhPT1WJiYodGhpcy5maWxlTmFtZT1WKTt2YXIgQj10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtudWxsIT09QiYmKHRoaXMuZmls'@;
put 'ZUNvbW1lbnQ9Qil9fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoVil7dmFyIEI9bmV3IEsoVi52YWx1ZSk7cmV0dXJuIDEhPT1CLnJlYWRJbnQoMSl8fEUuY3JjMzIodGhpcy5maWxlTmFtZSkhPT1CLnJlYWRJ'@;
put 'bnQoNCk/bnVsbDpFLnV0ZjhkZWNvZGUoQi5yZWFkU3RyaW5nKFYubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBWPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKFYpe3ZhciBCPW5ldyBLKFYudmFsdWUpO3JldHVy'@;
put 'biAxIT09Qi5yZWFkSW50KDEpfHxFLmNyYzMyKHRoaXMuZmlsZUNvbW1lbnQpIT09Qi5yZWFkSW50KDQpP251bGw6RS51dGY4ZGVjb2RlKEIucmVhZFN0cmluZyhWLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxSLmV4cG9ydHM9an0seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0'@;
put 'IjoxMywiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3V0aWxzIjoyMX1dLDI0OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBqPXt9OygwLE8oIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoaixPKCIuL2xpYi9kZWZsYXRlIiksTygiLi9saWIvaW5mbGF0ZSIpLE8oIi4vbGli'@;
put 'L3psaWIvY29uc3RhbnRzIikpLFIuZXhwb3J0cz1qfSx7Ii4vbGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9Tygi'@;
put 'Li96bGliL2RlZmxhdGUuanMiKSxJPU8oIi4vdXRpbHMvY29tbW9uIiksaz1PKCIuL3V0aWxzL3N0cmluZ3MiKSxFPU8oIi4vemxpYi9tZXNzYWdlcyIpLGo9TygiLi96bGliL3pzdHJlYW0iKSx0ZT1mdW5jdGlvbih1ZSl7dGhpcy5vcHRpb25zPUkuYXNzaWduKHtsZXZlbDotMSxtZXRob2Q6'@;
put 'OCxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OjAsdG86IiJ9LHVlfHx7fSk7dmFyIGNlPXRoaXMub3B0aW9ucztjZS5yYXcmJmNlLndpbmRvd0JpdHM+MD9jZS53aW5kb3dCaXRzPS1jZS53aW5kb3dCaXRzOmNlLmd6aXAmJmNlLndpbmRvd0JpdHM+'@;
put 'MCYmY2Uud2luZG93Qml0czwxNiYmKGNlLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBqLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgRz1LLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sY2Uu'@;
put 'bGV2ZWwsY2UubWV0aG9kLGNlLndpbmRvd0JpdHMsY2UubWVtTGV2ZWwsY2Uuc3RyYXRlZ3kpO2lmKDAhPT1HKXRocm93IG5ldyBFcnJvcihFW0ddKTtjZS5oZWFkZXImJksuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sY2UuaGVhZGVyKX07ZnVuY3Rpb24gb2UodWUsY2Upe3ZhciBHPW5l'@;
put 'dyB0ZShjZSk7aWYoRy5wdXNoKHVlLCEwKSxHLmVycil0aHJvdyBHLm1zZztyZXR1cm4gRy5yZXN1bHR9dGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odWUsY2Upe3ZhciBELEgsRz10aGlzLnN0cm0sYj10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7SD1j'@;
put 'ZT09PX5+Y2U/Y2U6ITA9PT1jZT80OjAsRy5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIHVlP2suc3RyaW5nMmJ1Zih1ZSk6dWUsRy5uZXh0X2luPTAsRy5hdmFpbF9pbj1HLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09Ry5hdmFpbF9vdXQmJihHLm91dHB1dD1uZXcgSS5CdWY4KGIpLEcubmV4dF9v'@;
put 'dXQ9MCxHLmF2YWlsX291dD1iKSwxIT09KEQ9Sy5kZWZsYXRlKEcsSCkpJiYwIT09RClyZXR1cm4gdGhpcy5vbkVuZChEKSx0aGlzLmVuZGVkPSEwLCExOygwPT09Ry5hdmFpbF9vdXR8fDA9PT1HLmF2YWlsX2luJiY0PT09SCkmJnRoaXMub25EYXRhKCJzdHJpbmciPT09dGhpcy5vcHRpb25z'@;
put 'LnRvP2suYnVmMmJpbnN0cmluZyhJLnNocmlua0J1ZihHLm91dHB1dCxHLm5leHRfb3V0KSk6SS5zaHJpbmtCdWYoRy5vdXRwdXQsRy5uZXh0X291dCkpfXdoaWxlKChHLmF2YWlsX2luPjB8fDA9PT1HLmF2YWlsX291dCkmJjEhPT1EKTtyZXR1cm4gNCE9PUh8fChEPUsuZGVmbGF0ZUVuZCh0'@;
put 'aGlzLnN0cm0pLHRoaXMub25FbmQoRCksdGhpcy5lbmRlZD0hMCwwPT09RCl9LHRlLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odWUpe3RoaXMuY2h1bmtzLnB1c2godWUpfSx0ZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odWUpezA9PT11ZSYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09'@;
put 'dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOkkuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXVlLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LHouRGVmbGF0ZT10ZSx6LmRlZmxhdGU9b2Usei5kZWZsYXRlUmF3PWZ1bmN0aW9u'@;
put 'IHNlKHVlLGNlKXtyZXR1cm4oY2U9Y2V8fHt9KS5yYXc9ITAsb2UodWUsY2UpfSx6Lmd6aXA9ZnVuY3Rpb24gaGUodWUsY2Upe3JldHVybihjZT1jZXx8e30pLmd6aXA9ITAsb2UodWUsY2UpfX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9kZWZs'@;
put 'YXRlLmpzIjozMiwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjY6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi96bGliL2luZmxhdGUuanMiKSxJPU8oIi4vdXRpbHMvY29tbW9uIiksaz1PKCIuL3V0aWxzL3N0cmluZ3MiKSxFPU8o'@;
put 'Ii4vemxpYi9jb25zdGFudHMiKSxqPU8oIi4vemxpYi9tZXNzYWdlcyIpLFY9TygiLi96bGliL3pzdHJlYW0iKSxCPU8oIi4vemxpYi9nemhlYWRlciIpLFk9ZnVuY3Rpb24ocSl7dGhpcy5vcHRpb25zPUkuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxxfHx7'@;
put 'fSk7dmFyIGVlPXRoaXMub3B0aW9ucztlZS5yYXcmJmVlLndpbmRvd0JpdHM+PTAmJmVlLndpbmRvd0JpdHM8MTYmJihlZS53aW5kb3dCaXRzPS1lZS53aW5kb3dCaXRzLDA9PT1lZS53aW5kb3dCaXRzJiYoZWUud2luZG93Qml0cz0tMTUpKSxlZS53aW5kb3dCaXRzPj0wJiZlZS53aW5kb3dC'@;
put 'aXRzPDE2JiYhKHEmJnEud2luZG93Qml0cykmJihlZS53aW5kb3dCaXRzKz0zMiksZWUud2luZG93Qml0cz4xNSYmZWUud2luZG93Qml0czw0OCYmKDE1JmVlLndpbmRvd0JpdHN8fChlZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlz'@;
put 'LmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFYsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciB0ZT1LLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sZWUud2luZG93Qml0cyk7aWYodGUhPT1FLlpfT0spdGhyb3cgbmV3IEVycm9yKGpbdGVdKTt0aGlzLmhlYWRlcj1uZXcgQixLLmluZmxhdGVHZXRI'@;
put 'ZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07ZnVuY3Rpb24gWChxLGVlKXt2YXIgdGU9bmV3IFkoZWUpO2lmKHRlLnB1c2gocSwhMCksdGUuZXJyKXRocm93IHRlLm1zZztyZXR1cm4gdGUucmVzdWx0fVkucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24ocSxlZSl7dmFyIHNlLGhlLHVlLGNl'@;
put 'LEcsdGU9dGhpcy5zdHJtLG9lPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtoZT1lZT09PX5+ZWU/ZWU6ITA9PT1lZT9FLlpfRklOSVNIOkUuWl9OT19GTFVTSCx0ZS5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIHE/ay5iaW5zdHJpbmcyYnVmKHEpOnEsdGUu'@;
put 'bmV4dF9pbj0wLHRlLmF2YWlsX2luPXRlLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09dGUuYXZhaWxfb3V0JiYodGUub3V0cHV0PW5ldyBJLkJ1Zjgob2UpLHRlLm5leHRfb3V0PTAsdGUuYXZhaWxfb3V0PW9lKSwoc2U9Sy5pbmZsYXRlKHRlLEUuWl9OT19GTFVTSCkpIT09RS5aX1NUUkVBTV9F'@;
put 'TkQmJnNlIT09RS5aX09LKXJldHVybiB0aGlzLm9uRW5kKHNlKSx0aGlzLmVuZGVkPSEwLCExO3RlLm5leHRfb3V0JiYoMD09PXRlLmF2YWlsX291dHx8c2U9PT1FLlpfU1RSRUFNX0VORHx8MD09PXRlLmF2YWlsX2luJiZoZT09PUUuWl9GSU5JU0gpJiYoInN0cmluZyI9PT10aGlzLm9wdGlv'@;
put 'bnMudG8/KHVlPWsudXRmOGJvcmRlcih0ZS5vdXRwdXQsdGUubmV4dF9vdXQpLGNlPXRlLm5leHRfb3V0LXVlLEc9ay5idWYyc3RyaW5nKHRlLm91dHB1dCx1ZSksdGUubmV4dF9vdXQ9Y2UsdGUuYXZhaWxfb3V0PW9lLWNlLGNlJiZJLmFycmF5U2V0KHRlLm91dHB1dCx0ZS5vdXRwdXQsdWUs'@;
put 'Y2UsMCksdGhpcy5vbkRhdGEoRykpOnRoaXMub25EYXRhKEkuc2hyaW5rQnVmKHRlLm91dHB1dCx0ZS5uZXh0X291dCkpKX13aGlsZSh0ZS5hdmFpbF9pbj4wJiZzZSE9PUUuWl9TVFJFQU1fRU5EKTtyZXR1cm4gc2U9PT1FLlpfU1RSRUFNX0VORCYmKGhlPUUuWl9GSU5JU0gpLGhlIT09RS5a'@;
put 'X0ZJTklTSHx8KHNlPUsuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoc2UpLHRoaXMuZW5kZWQ9ITAsc2U9PT1FLlpfT0spfSxZLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24ocSl7dGhpcy5jaHVua3MucHVzaChxKX0sWS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24ocSl7cT09'@;
put 'PUUuWl9PSyYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOkkuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXEsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sei5JbmZsYXRlPVksei5p'@;
put 'bmZsYXRlPVgsei5pbmZsYXRlUmF3PWZ1bmN0aW9uIFUocSxlZSl7cmV0dXJuKGVlPWVlfHx7fSkucmF3PSEwLFgocSxlZSl9LHoudW5nemlwPVh9LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvY29uc3RhbnRzIjozMCwiLi96bGliL2d6aGVhZGVy'@;
put 'IjozMywiLi96bGliL2luZmxhdGUuanMiOjM1LCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBJ'@;
put 'bnQzMkFycmF5PCJ1Ijt6LmFzc2lnbj1mdW5jdGlvbihFKXtmb3IodmFyIGo9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2oubGVuZ3RoOyl7dmFyIFY9ai5zaGlmdCgpO2lmKFYpe2lmKCJvYmplY3QiIT10eXBlb2YgVil0aHJvdyBuZXcgVHlwZUVycm9yKFYrIm11'@;
put 'c3QgYmUgbm9uLW9iamVjdCIpO2Zvcih2YXIgQiBpbiBWKVYuaGFzT3duUHJvcGVydHkoQikmJihFW0JdPVZbQl0pfX1yZXR1cm4gRX0sei5zaHJpbmtCdWY9ZnVuY3Rpb24oRSxqKXtyZXR1cm4gRS5sZW5ndGg9PT1qP0U6RS5zdWJhcnJheT9FLnN1YmFycmF5KDAsaik6KEUubGVuZ3RoPWos'@;
put 'RSl9O3ZhciBJPXthcnJheVNldDpmdW5jdGlvbihFLGosVixCLFkpe2lmKGouc3ViYXJyYXkmJkUuc3ViYXJyYXkpRS5zZXQoai5zdWJhcnJheShWLFYrQiksWSk7ZWxzZSBmb3IodmFyIFg9MDtYPEI7WCsrKUVbWStYXT1qW1YrWF19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oRSl7dmFyIGos'@;
put 'VixCLFksWCxVO2ZvcihCPTAsaj0wLFY9RS5sZW5ndGg7ajxWO2orKylCKz1FW2pdLmxlbmd0aDtmb3IoVT1uZXcgVWludDhBcnJheShCKSxZPTAsaj0wLFY9RS5sZW5ndGg7ajxWO2orKylVLnNldChYPUVbal0sWSksWSs9WC5sZW5ndGg7cmV0dXJuIFV9fSxrPXthcnJheVNldDpmdW5jdGlv'@;
put 'bihFLGosVixCLFkpe2Zvcih2YXIgWD0wO1g8QjtYKyspRVtZK1hdPWpbVitYXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihFKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sRSl9fTt6LnNldFR5cGVkPWZ1bmN0aW9uKEUpe0U/KHouQnVmOD1VaW50OEFycmF5LHouQnVmMTY9VWludDE2QXJy'@;
put 'YXksei5CdWYzMj1JbnQzMkFycmF5LHouYXNzaWduKHosSSkpOih6LkJ1Zjg9QXJyYXksei5CdWYxNj1BcnJheSx6LkJ1ZjMyPUFycmF5LHouYXNzaWduKHosaykpfSx6LnNldFR5cGVkKEspfSx7fV0sMjg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9jb21tb24i'@;
put 'KSxJPSEwLGs9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoe0k9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7az0hMX1mb3IodmFyIEU9bmV3IEsuQnVmOCgyNTYpLGo9MDtqPDI1Njtq'@;
put 'KyspRVtqXT1qPj0yNTI/NjpqPj0yNDg/NTpqPj0yNDA/NDpqPj0yMjQ/MzpqPj0xOTI/MjoxO2Z1bmN0aW9uIFYoQixZKXtpZihZPDY1NTM3JiYoQi5zdWJhcnJheSYma3x8IUIuc3ViYXJyYXkmJkkpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsSy5zaHJpbmtCdWYo'@;
put 'QixZKSk7Zm9yKHZhciBYPSIiLFU9MDtVPFk7VSsrKVgrPVN0cmluZy5mcm9tQ2hhckNvZGUoQltVXSk7cmV0dXJuIFh9RVsyNTRdPUVbMjU0XT0xLHouc3RyaW5nMmJ1Zj1mdW5jdGlvbihCKXt2YXIgWSxYLFUscSxlZSx0ZT1CLmxlbmd0aCxvZT0wO2ZvcihxPTA7cTx0ZTtxKyspNTUyOTY9'@;
put 'PSg2NDUxMiYoWD1CLmNoYXJDb2RlQXQocSkpKSYmcSsxPHRlJiY1NjMyMD09KDY0NTEyJihVPUIuY2hhckNvZGVBdChxKzEpKSkmJihYPTY1NTM2KyhYLTU1Mjk2PDwxMCkrKFUtNTYzMjApLHErKyksb2UrPVg8MTI4PzE6WDwyMDQ4PzI6WDw2NTUzNj8zOjQ7Zm9yKFk9bmV3IEsuQnVmOChv'@;
put 'ZSksZWU9MCxxPTA7ZWU8b2U7cSsrKTU1Mjk2PT0oNjQ1MTImKFg9Qi5jaGFyQ29kZUF0KHEpKSkmJnErMTx0ZSYmNTYzMjA9PSg2NDUxMiYoVT1CLmNoYXJDb2RlQXQocSsxKSkpJiYoWD02NTUzNisoWC01NTI5Njw8MTApKyhVLTU2MzIwKSxxKyspLFg8MTI4P1lbZWUrK109WDpYPDIwNDg/'@;
put 'KFlbZWUrK109MTkyfFg+Pj42LFlbZWUrK109MTI4fDYzJlgpOlg8NjU1MzY/KFlbZWUrK109MjI0fFg+Pj4xMixZW2VlKytdPTEyOHxYPj4+NiY2MyxZW2VlKytdPTEyOHw2MyZYKTooWVtlZSsrXT0yNDB8WD4+PjE4LFlbZWUrK109MTI4fFg+Pj4xMiY2MyxZW2VlKytdPTEyOHxYPj4+NiY2'@;
put 'MyxZW2VlKytdPTEyOHw2MyZYKTtyZXR1cm4gWX0sei5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKEIpe3JldHVybiBWKEIsQi5sZW5ndGgpfSx6LmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oQil7Zm9yKHZhciBZPW5ldyBLLkJ1ZjgoQi5sZW5ndGgpLFg9MCxVPVkubGVuZ3RoO1g8VTtYKyspWVtY'@;
put 'XT1CLmNoYXJDb2RlQXQoWCk7cmV0dXJuIFl9LHouYnVmMnN0cmluZz1mdW5jdGlvbihCLFkpe3ZhciBYLFUscSxlZSx0ZT1ZfHxCLmxlbmd0aCxvZT1uZXcgQXJyYXkoMip0ZSk7Zm9yKFU9MCxYPTA7WDx0ZTspaWYoKHE9QltYKytdKTwxMjgpb2VbVSsrXT1xO2Vsc2UgaWYoKGVlPUVbcV0p'@;
put 'PjQpb2VbVSsrXT02NTUzMyxYKz1lZS0xO2Vsc2V7Zm9yKHEmPTI9PT1lZT8zMTozPT09ZWU/MTU6NztlZT4xJiZYPHRlOylxPXE8PDZ8NjMmQltYKytdLGVlLS07ZWU+MT9vZVtVKytdPTY1NTMzOnE8NjU1MzY/b2VbVSsrXT1xOihvZVtVKytdPTU1Mjk2fChxLT02NTUzNik+PjEwJjEwMjMs'@;
put 'b2VbVSsrXT01NjMyMHwxMDIzJnEpfXJldHVybiBWKG9lLFUpfSx6LnV0Zjhib3JkZXI9ZnVuY3Rpb24oQixZKXt2YXIgWDtmb3IoKFk9WXx8Qi5sZW5ndGgpPkIubGVuZ3RoJiYoWT1CLmxlbmd0aCksWD1ZLTE7WD49MCYmMTI4PT0oMTkyJkJbWF0pOylYLS07cmV0dXJuIFg8MHx8MD09PVg/'@;
put 'WTpYK0VbQltYXV0+WT9YOll9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO1IuZXhwb3J0cz1mdW5jdGlvbiBLKEksayxFLGope2Zvcih2YXIgVj02NTUzNSZJfDAsQj1JPj4+MTYmNjU1MzV8MCxZPTA7MCE9PUU7KXtFLT1ZPUU+MmUzPzJlMzpF'@;
put 'O2Rve0I9QisoVj1WK2tbaisrXXwwKXwwfXdoaWxlKC0tWSk7ViU9NjU1MjEsQiU9NjU1MjF9cmV0dXJuIFZ8Qjw8MTZ8MH19LHt9XSwzMDpbZnVuY3Rpb24oTyxSLHope1IuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVT'@;
put 'SDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEs'@;
put 'Wl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31d'@;
put 'LDMxOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBJPWZ1bmN0aW9uIEsoKXtmb3IodmFyIEUsaj1bXSxWPTA7VjwyNTY7VisrKXtFPVY7Zm9yKHZhciBCPTA7Qjw4O0IrKylFPTEmRT8zOTg4MjkyMzg0XkU+Pj4xOkU+Pj4xO2pbVl09RX1yZXR1cm4gan0oKTtSLmV4cG9ydHM9'@;
put 'ZnVuY3Rpb24gayhFLGosVixCKXt2YXIgWT1JLFg9QitWO0VePS0xO2Zvcih2YXIgVT1CO1U8WDtVKyspRT1FPj4+OF5ZWzI1NSYoRV5qW1VdKV07cmV0dXJuLTFeRX19LHt9XSwzMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuLi91dGlscy9jb21tb24iKSxJPU8o'@;
put 'Ii4vdHJlZXMiKSxrPU8oIi4vYWRsZXIzMiIpLEU9TygiLi9jcmMzMiIpLGo9TygiLi9tZXNzYWdlcyIpLFY9MCxxPTAsdGU9LTIsSD0yLE49OCx3PTI4NixKPTMwLG5lPTE5LGRlPTIqdysxLGZlPTE1LHhlPTMsTGU9MjU4LEZlPUxlK3hlKzEsamU9NDIsbHQ9MTEzO2Z1bmN0aW9uIFVlKHJ0'@;
put 'LEl0KXtyZXR1cm4gcnQubXNnPWpbSXRdLEl0fWZ1bmN0aW9uIGh0KHJ0KXtyZXR1cm4ocnQ8PDEpLShydD40Pzk6MCl9ZnVuY3Rpb24gTWUocnQpe2Zvcih2YXIgSXQ9cnQubGVuZ3RoOy0tSXQ+PTA7KXJ0W0l0XT0wfWZ1bmN0aW9uIERlKHJ0KXt2YXIgSXQ9cnQuc3RhdGUsSnQ9SXQucGVu'@;
put 'ZGluZztKdD5ydC5hdmFpbF9vdXQmJihKdD1ydC5hdmFpbF9vdXQpLDAhPT1KdCYmKEsuYXJyYXlTZXQocnQub3V0cHV0LEl0LnBlbmRpbmdfYnVmLEl0LnBlbmRpbmdfb3V0LEp0LHJ0Lm5leHRfb3V0KSxydC5uZXh0X291dCs9SnQsSXQucGVuZGluZ19vdXQrPUp0LHJ0LnRvdGFsX291dCs9'@;
put 'SnQscnQuYXZhaWxfb3V0LT1KdCxJdC5wZW5kaW5nLT1KdCwwPT09SXQucGVuZGluZyYmKEl0LnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiB6ZShydCxJdCl7SS5fdHJfZmx1c2hfYmxvY2socnQscnQuYmxvY2tfc3RhcnQ+PTA/cnQuYmxvY2tfc3RhcnQ6LTEscnQuc3Ryc3RhcnQtcnQuYmxv'@;
put 'Y2tfc3RhcnQsSXQpLHJ0LmJsb2NrX3N0YXJ0PXJ0LnN0cnN0YXJ0LERlKHJ0LnN0cm0pfWZ1bmN0aW9uIGl0KHJ0LEl0KXtydC5wZW5kaW5nX2J1ZltydC5wZW5kaW5nKytdPUl0fWZ1bmN0aW9uIHV0KHJ0LEl0KXtydC5wZW5kaW5nX2J1ZltydC5wZW5kaW5nKytdPUl0Pj4+OCYyNTUscnQu'@;
put 'cGVuZGluZ19idWZbcnQucGVuZGluZysrXT0yNTUmSXR9ZnVuY3Rpb24gTXQocnQsSXQsSnQsRHQpe3ZhciBwdD1ydC5hdmFpbF9pbjtyZXR1cm4gcHQ+RHQmJihwdD1EdCksMD09PXB0PzA6KHJ0LmF2YWlsX2luLT1wdCxLLmFycmF5U2V0KEl0LHJ0LmlucHV0LHJ0Lm5leHRfaW4scHQsSnQp'@;
put 'LDE9PT1ydC5zdGF0ZS53cmFwP3J0LmFkbGVyPWsocnQuYWRsZXIsSXQscHQsSnQpOjI9PT1ydC5zdGF0ZS53cmFwJiYocnQuYWRsZXI9RShydC5hZGxlcixJdCxwdCxKdCkpLHJ0Lm5leHRfaW4rPXB0LHJ0LnRvdGFsX2luKz1wdCxwdCl9ZnVuY3Rpb24gSHQocnQsSXQpe3ZhciBwdCxZdCxK'@;
put 'dD1ydC5tYXhfY2hhaW5fbGVuZ3RoLER0PXJ0LnN0cnN0YXJ0LEluPXJ0LnByZXZfbGVuZ3RoLHp0PXJ0Lm5pY2VfbWF0Y2gseW49cnQuc3Ryc3RhcnQ+cnQud19zaXplLUZlP3J0LnN0cnN0YXJ0LShydC53X3NpemUtRmUpOjAseG49cnQud2luZG93LHNuPXJ0LndfbWFzayxCbj1ydC5wcmV2'@;
put 'LFJuPXJ0LnN0cnN0YXJ0K0xlLCR0PXhuW0R0K0luLTFdLFBuPXhuW0R0K0luXTtydC5wcmV2X2xlbmd0aD49cnQuZ29vZF9tYXRjaCYmKEp0Pj49MiksenQ+cnQubG9va2FoZWFkJiYoenQ9cnQubG9va2FoZWFkKTtkb3tpZih4blsocHQ9SXQpK0luXT09PVBuJiZ4bltwdCtJbi0xXT09PSR0'@;
put 'JiZ4bltwdF09PT14bltEdF0mJnhuWysrcHRdPT09eG5bRHQrMV0pe0R0Kz0yLHB0Kys7ZG97fXdoaWxlKHhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0m'@;
put 'JnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJkR0PFJuKTtpZihZdD1MZS0oUm4tRHQpLER0PVJuLUxlLFl0PkluKXtpZihydC5tYXRjaF9zdGFydD1JdCxJbj1ZdCxZdD49enQpYnJlYWs7JHQ9eG5bRHQrSW4tMV0sUG49eG5b'@;
put 'RHQrSW5dfX19d2hpbGUoKEl0PUJuW0l0JnNuXSk+eW4mJjAhPS0tSnQpO3JldHVybiBJbjw9cnQubG9va2FoZWFkP0luOnJ0Lmxvb2thaGVhZH1mdW5jdGlvbiBQdChydCl7dmFyIEp0LER0LHB0LFl0LEluLEl0PXJ0Lndfc2l6ZTtkb3tpZihZdD1ydC53aW5kb3dfc2l6ZS1ydC5sb29rYWhl'@;
put 'YWQtcnQuc3Ryc3RhcnQscnQuc3Ryc3RhcnQ+PUl0KyhJdC1GZSkpe0suYXJyYXlTZXQocnQud2luZG93LHJ0LndpbmRvdyxJdCxJdCwwKSxydC5tYXRjaF9zdGFydC09SXQscnQuc3Ryc3RhcnQtPUl0LHJ0LmJsb2NrX3N0YXJ0LT1JdCxKdD1EdD1ydC5oYXNoX3NpemU7ZG97cHQ9cnQuaGVh'@;
put 'ZFstLUp0XSxydC5oZWFkW0p0XT1wdD49SXQ/cHQtSXQ6MH13aGlsZSgtLUR0KTtKdD1EdD1JdDtkb3twdD1ydC5wcmV2Wy0tSnRdLHJ0LnByZXZbSnRdPXB0Pj1JdD9wdC1JdDowfXdoaWxlKC0tRHQpO1l0Kz1JdH1pZigwPT09cnQuc3RybS5hdmFpbF9pbilicmVhaztpZihEdD1NdChydC5z'@;
put 'dHJtLHJ0LndpbmRvdyxydC5zdHJzdGFydCtydC5sb29rYWhlYWQsWXQpLHJ0Lmxvb2thaGVhZCs9RHQscnQubG9va2FoZWFkK3J0Lmluc2VydD49eGUpZm9yKHJ0Lmluc19oPXJ0LndpbmRvd1tJbj1ydC5zdHJzdGFydC1ydC5pbnNlcnRdLHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9z'@;
put 'aGlmdF5ydC53aW5kb3dbSW4rMV0pJnJ0Lmhhc2hfbWFzaztydC5pbnNlcnQmJihydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W0luK3hlLTFdKSZydC5oYXNoX21hc2sscnQucHJldltJbiZydC53X21hc2tdPXJ0LmhlYWRbcnQuaW5zX2hdLHJ0LmhlYWRbcnQu'@;
put 'aW5zX2hdPUluLEluKysscnQuaW5zZXJ0LS0sIShydC5sb29rYWhlYWQrcnQuaW5zZXJ0PHhlKSk7KTt9d2hpbGUocnQubG9va2FoZWFkPEZlJiYwIT09cnQuc3RybS5hdmFpbF9pbil9ZnVuY3Rpb24gQ24ocnQsSXQpe2Zvcih2YXIgSnQsRHQ7Oyl7aWYocnQubG9va2FoZWFkPEZlKXtpZihQ'@;
put 'dChydCkscnQubG9va2FoZWFkPEZlJiZJdD09PVYpcmV0dXJuIDE7aWYoMD09PXJ0Lmxvb2thaGVhZClicmVha31pZihKdD0wLHJ0Lmxvb2thaGVhZD49eGUmJihydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0K3hlLTFdKSZydC5oYXNoX21h'@;
put 'c2ssSnQ9cnQucHJldltydC5zdHJzdGFydCZydC53X21hc2tdPXJ0LmhlYWRbcnQuaW5zX2hdLHJ0LmhlYWRbcnQuaW5zX2hdPXJ0LnN0cnN0YXJ0KSwwIT09SnQmJnJ0LnN0cnN0YXJ0LUp0PD1ydC53X3NpemUtRmUmJihydC5tYXRjaF9sZW5ndGg9SHQocnQsSnQpKSxydC5tYXRjaF9sZW5n'@;
put 'dGg+PXhlKWlmKER0PUkuX3RyX3RhbGx5KHJ0LHJ0LnN0cnN0YXJ0LXJ0Lm1hdGNoX3N0YXJ0LHJ0Lm1hdGNoX2xlbmd0aC14ZSkscnQubG9va2FoZWFkLT1ydC5tYXRjaF9sZW5ndGgscnQubWF0Y2hfbGVuZ3RoPD1ydC5tYXhfbGF6eV9tYXRjaCYmcnQubG9va2FoZWFkPj14ZSl7cnQubWF0'@;
put 'Y2hfbGVuZ3RoLS07ZG97cnQuc3Ryc3RhcnQrKyxydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0K3hlLTFdKSZydC5oYXNoX21hc2ssSnQ9cnQucHJldltydC5zdHJzdGFydCZydC53X21hc2tdPXJ0LmhlYWRbcnQuaW5zX2hdLHJ0LmhlYWRb'@;
put 'cnQuaW5zX2hdPXJ0LnN0cnN0YXJ0fXdoaWxlKDAhPS0tcnQubWF0Y2hfbGVuZ3RoKTtydC5zdHJzdGFydCsrfWVsc2UgcnQuc3Ryc3RhcnQrPXJ0Lm1hdGNoX2xlbmd0aCxydC5tYXRjaF9sZW5ndGg9MCxydC5pbnNfaD1ydC53aW5kb3dbcnQuc3Ryc3RhcnRdLHJ0Lmluc19oPShydC5pbnNf'@;
put 'aDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbcnQuc3Ryc3RhcnQrMV0pJnJ0Lmhhc2hfbWFzaztlbHNlIER0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0XSkscnQubG9va2FoZWFkLS0scnQuc3Ryc3RhcnQrKztpZihEdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5h'@;
put 'dmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9cnQuc3Ryc3RhcnQ8eGUtMT9ydC5zdHJzdGFydDp4ZS0xLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCk/MToy'@;
put 'fWZ1bmN0aW9uIFV0KHJ0LEl0KXtmb3IodmFyIEp0LER0LHB0Ozspe2lmKHJ0Lmxvb2thaGVhZDxGZSl7aWYoUHQocnQpLHJ0Lmxvb2thaGVhZDxGZSYmSXQ9PT1WKXJldHVybiAxO2lmKDA9PT1ydC5sb29rYWhlYWQpYnJlYWt9aWYoSnQ9MCxydC5sb29rYWhlYWQ+PXhlJiYocnQuaW5zX2g9'@;
put 'KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLEp0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydCkscnQucHJldl9sZW5ndGg9'@;
put 'cnQubWF0Y2hfbGVuZ3RoLHJ0LnByZXZfbWF0Y2g9cnQubWF0Y2hfc3RhcnQscnQubWF0Y2hfbGVuZ3RoPXhlLTEsMCE9PUp0JiZydC5wcmV2X2xlbmd0aDxydC5tYXhfbGF6eV9tYXRjaCYmcnQuc3Ryc3RhcnQtSnQ8PXJ0Lndfc2l6ZS1GZSYmKHJ0Lm1hdGNoX2xlbmd0aD1IdChydCxKdCks'@;
put 'cnQubWF0Y2hfbGVuZ3RoPD01JiYoMT09PXJ0LnN0cmF0ZWd5fHxydC5tYXRjaF9sZW5ndGg9PT14ZSYmcnQuc3Ryc3RhcnQtcnQubWF0Y2hfc3RhcnQ+NDA5NikmJihydC5tYXRjaF9sZW5ndGg9eGUtMSkpLHJ0LnByZXZfbGVuZ3RoPj14ZSYmcnQubWF0Y2hfbGVuZ3RoPD1ydC5wcmV2X2xl'@;
put 'bmd0aCl7cHQ9cnQuc3Ryc3RhcnQrcnQubG9va2FoZWFkLXhlLER0PUkuX3RyX3RhbGx5KHJ0LHJ0LnN0cnN0YXJ0LTEtcnQucHJldl9tYXRjaCxydC5wcmV2X2xlbmd0aC14ZSkscnQubG9va2FoZWFkLT1ydC5wcmV2X2xlbmd0aC0xLHJ0LnByZXZfbGVuZ3RoLT0yO2RveysrcnQuc3Ryc3Rh'@;
put 'cnQ8PXB0JiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLEp0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFy'@;
put 'dCl9d2hpbGUoMCE9LS1ydC5wcmV2X2xlbmd0aCk7aWYocnQubWF0Y2hfYXZhaWxhYmxlPTAscnQubWF0Y2hfbGVuZ3RoPXhlLTEscnQuc3Ryc3RhcnQrKyxEdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2UgaWYocnQubWF0Y2hfYXZhaWxhYmxlKXtp'@;
put 'ZigoRHQ9SS5fdHJfdGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnQtMV0pKSYmemUocnQsITEpLHJ0LnN0cnN0YXJ0KysscnQubG9va2FoZWFkLS0sMD09PXJ0LnN0cm0uYXZhaWxfb3V0KXJldHVybiAxfWVsc2UgcnQubWF0Y2hfYXZhaWxhYmxlPTEscnQuc3Ryc3RhcnQrKyxydC5s'@;
put 'b29rYWhlYWQtLX1yZXR1cm4gcnQubWF0Y2hfYXZhaWxhYmxlJiYoRHQ9SS5fdHJfdGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnQtMV0pLHJ0Lm1hdGNoX2F2YWlsYWJsZT0wKSxydC5pbnNlcnQ9cnQuc3Ryc3RhcnQ8eGUtMT9ydC5zdHJzdGFydDp4ZS0xLDQ9PT1JdD8oemUocnQs'@;
put 'ITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCk/MToyfXZhciAkbixlbj1mdW5jdGlvbihydCxJdCxKdCxEdCxwdCl7dGhpcy5nb29kX2xlbmd0aD1ydCx0aGlzLm1heF9sYXp5PUl0LHRoaXMubmljZV9s'@;
put 'ZW5ndGg9SnQsdGhpcy5tYXhfY2hhaW49RHQsdGhpcy5mdW5jPXB0fTtmdW5jdGlvbiBmdCgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0'@;
put 'aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPU4sdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1u'@;
put 'dWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1h'@;
put 'dGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhp'@;
put 'cy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9bmV3IEsuQnVmMTYoMipkZSksdGhpcy5keW5fZHRyZWU9bmV3IEsuQnVmMTYoMiooMipKKzEpKSx0aGlzLmJsX3RyZWU9bmV3IEsuQnVmMTYoMiooMipuZSsxKSksTWUodGhpcy5keW5fbHRyZWUpLE1lKHRo'@;
put 'aXMuZHluX2R0cmVlKSxNZSh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBLLkJ1ZjE2KGZlKzEpLHRoaXMuaGVhcD1uZXcgSy5CdWYxNigyKncrMSksTWUodGhpcy5oZWFwKSx0aGlzLmhl'@;
put 'YXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IEsuQnVmMTYoMip3KzEpLE1lKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0'@;
put 'aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIGZuKHJ0KXt2YXIgSXQ7cmV0dXJuIHJ0JiZydC5zdGF0ZT8ocnQudG90YWxfaW49cnQudG90YWxfb3V0PTAscnQuZGF0YV90eXBlPUgsKEl0PXJ0LnN0YXRlKS5wZW5kaW5n'@;
put 'PTAsSXQucGVuZGluZ19vdXQ9MCxJdC53cmFwPDAmJihJdC53cmFwPS1JdC53cmFwKSxJdC5zdGF0dXM9SXQud3JhcD9qZTpsdCxydC5hZGxlcj0yPT09SXQud3JhcD8wOjEsSXQubGFzdF9mbHVzaD1WLEkuX3RyX2luaXQoSXQpLHEpOlVlKHJ0LHRlKX1mdW5jdGlvbiBobihydCl7dmFyIEl0'@;
put 'PWZuKHJ0KTtyZXR1cm4gSXQ9PT1xJiZmdW5jdGlvbiBIbihydCl7cnQud2luZG93X3NpemU9MipydC53X3NpemUsTWUocnQuaGVhZCkscnQubWF4X2xhenlfbWF0Y2g9JG5bcnQubGV2ZWxdLm1heF9sYXp5LHJ0Lmdvb2RfbWF0Y2g9JG5bcnQubGV2ZWxdLmdvb2RfbGVuZ3RoLHJ0Lm5pY2Vf'@;
put 'bWF0Y2g9JG5bcnQubGV2ZWxdLm5pY2VfbGVuZ3RoLHJ0Lm1heF9jaGFpbl9sZW5ndGg9JG5bcnQubGV2ZWxdLm1heF9jaGFpbixydC5zdHJzdGFydD0wLHJ0LmJsb2NrX3N0YXJ0PTAscnQubG9va2FoZWFkPTAscnQuaW5zZXJ0PTAscnQubWF0Y2hfbGVuZ3RoPXJ0LnByZXZfbGVuZ3RoPXhl'@;
put 'LTEscnQubWF0Y2hfYXZhaWxhYmxlPTAscnQuaW5zX2g9MH0ocnQuc3RhdGUpLEl0fWZ1bmN0aW9uIFh0KHJ0LEl0LEp0LER0LHB0LFl0KXtpZighcnQpcmV0dXJuIHRlO3ZhciBJbj0xO2lmKC0xPT09SXQmJihJdD02KSxEdDwwPyhJbj0wLER0PS1EdCk6RHQ+MTUmJihJbj0yLER0LT0xNiks'@;
put 'cHQ8MXx8cHQ+OXx8SnQhPT1OfHxEdDw4fHxEdD4xNXx8SXQ8MHx8SXQ+OXx8WXQ8MHx8WXQ+NClyZXR1cm4gVWUocnQsdGUpOzg9PT1EdCYmKER0PTkpO3ZhciB6dD1uZXcgZnQ7cmV0dXJuIHJ0LnN0YXRlPXp0LHp0LnN0cm09cnQsenQud3JhcD1Jbix6dC5nemhlYWQ9bnVsbCx6dC53X2Jp'@;
put 'dHM9RHQsenQud19zaXplPTE8PHp0LndfYml0cyx6dC53X21hc2s9enQud19zaXplLTEsenQuaGFzaF9iaXRzPXB0KzcsenQuaGFzaF9zaXplPTE8PHp0Lmhhc2hfYml0cyx6dC5oYXNoX21hc2s9enQuaGFzaF9zaXplLTEsenQuaGFzaF9zaGlmdD1+figoenQuaGFzaF9iaXRzK3hlLTEpL3hl'@;
put 'KSx6dC53aW5kb3c9bmV3IEsuQnVmOCgyKnp0Lndfc2l6ZSksenQuaGVhZD1uZXcgSy5CdWYxNih6dC5oYXNoX3NpemUpLHp0LnByZXY9bmV3IEsuQnVmMTYoenQud19zaXplKSx6dC5saXRfYnVmc2l6ZT0xPDxwdCs2LHp0LnBlbmRpbmdfYnVmX3NpemU9NCp6dC5saXRfYnVmc2l6ZSx6dC5w'@;
put 'ZW5kaW5nX2J1Zj1uZXcgSy5CdWY4KHp0LnBlbmRpbmdfYnVmX3NpemUpLHp0LmRfYnVmPXp0LmxpdF9idWZzaXplPj4xLHp0LmxfYnVmPTMqenQubGl0X2J1ZnNpemUsenQubGV2ZWw9SXQsenQuc3RyYXRlZ3k9WXQsenQubWV0aG9kPUp0LGhuKHJ0KX0kbj1bbmV3IGVuKDAsMCwwLDAsZnVu'@;
put 'Y3Rpb24gb24ocnQsSXQpe3ZhciBKdD02NTUzNTtmb3IoSnQ+cnQucGVuZGluZ19idWZfc2l6ZS01JiYoSnQ9cnQucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihydC5sb29rYWhlYWQ8PTEpe2lmKFB0KHJ0KSwwPT09cnQubG9va2FoZWFkJiZJdD09PVYpcmV0dXJuIDE7aWYoMD09PXJ0Lmxv'@;
put 'b2thaGVhZClicmVha31ydC5zdHJzdGFydCs9cnQubG9va2FoZWFkLHJ0Lmxvb2thaGVhZD0wO3ZhciBEdD1ydC5ibG9ja19zdGFydCtKdDtpZigoMD09PXJ0LnN0cnN0YXJ0fHxydC5zdHJzdGFydD49RHQpJiYocnQubG9va2FoZWFkPXJ0LnN0cnN0YXJ0LUR0LHJ0LnN0cnN0YXJ0PUR0LHpl'@;
put 'KHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpfHxydC5zdHJzdGFydC1ydC5ibG9ja19zdGFydD49cnQud19zaXplLUZlJiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHJ0Lmluc2VydD0wLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJt'@;
put 'LmF2YWlsX291dD8zOjQpOihydC5zdHJzdGFydD5ydC5ibG9ja19zdGFydCYmemUocnQsITEpLDEpfSksbmV3IGVuKDQsNCw4LDQsQ24pLG5ldyBlbig0LDUsMTYsOCxDbiksbmV3IGVuKDQsNiwzMiwzMixDbiksbmV3IGVuKDQsNCwxNiwxNixVdCksbmV3IGVuKDgsMTYsMzIsMzIsVXQpLG5l'@;
put 'dyBlbig4LDE2LDEyOCwxMjgsVXQpLG5ldyBlbig4LDMyLDEyOCwyNTYsVXQpLG5ldyBlbigzMiwxMjgsMjU4LDEwMjQsVXQpLG5ldyBlbigzMiwyNTgsMjU4LDQwOTYsVXQpXSx6LmRlZmxhdGVJbml0PWZ1bmN0aW9uIF90KHJ0LEl0KXtyZXR1cm4gWHQocnQsSXQsTiwxNSw4LDApfSx6LmRl'@;
put 'ZmxhdGVJbml0Mj1YdCx6LmRlZmxhdGVSZXNldD1obix6LmRlZmxhdGVSZXNldEtlZXA9Zm4sei5kZWZsYXRlU2V0SGVhZGVyPWZ1bmN0aW9uIHd0KHJ0LEl0KXtyZXR1cm4gcnQmJnJ0LnN0YXRlJiYyPT09cnQuc3RhdGUud3JhcD8ocnQuc3RhdGUuZ3poZWFkPUl0LHEpOnRlfSx6LmRlZmxh'@;
put 'dGU9ZnVuY3Rpb24gTnQocnQsSXQpe3ZhciBKdCxEdCxwdCxZdDtpZighcnR8fCFydC5zdGF0ZXx8SXQ+NXx8SXQ8MClyZXR1cm4gcnQ/VWUocnQsdGUpOnRlO2lmKER0PXJ0LnN0YXRlLCFydC5vdXRwdXR8fCFydC5pbnB1dCYmMCE9PXJ0LmF2YWlsX2lufHw2NjY9PT1EdC5zdGF0dXMmJjQh'@;
put 'PT1JdClyZXR1cm4gVWUocnQsMD09PXJ0LmF2YWlsX291dD8tNTp0ZSk7aWYoRHQuc3RybT1ydCxKdD1EdC5sYXN0X2ZsdXNoLER0Lmxhc3RfZmx1c2g9SXQsRHQuc3RhdHVzPT09amUpaWYoMj09PUR0LndyYXApcnQuYWRsZXI9MCxpdChEdCwzMSksaXQoRHQsMTM5KSxpdChEdCw4KSxEdC5n'@;
put 'emhlYWQ/KGl0KER0LChEdC5nemhlYWQudGV4dD8xOjApKyhEdC5nemhlYWQuaGNyYz8yOjApKyhEdC5nemhlYWQuZXh0cmE/NDowKSsoRHQuZ3poZWFkLm5hbWU/ODowKSsoRHQuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLGl0KER0LDI1NSZEdC5nemhlYWQudGltZSksaXQoRHQsRHQuZ3poZWFk'@;
put 'LnRpbWU+PjgmMjU1KSxpdChEdCxEdC5nemhlYWQudGltZT4+MTYmMjU1KSxpdChEdCxEdC5nemhlYWQudGltZT4+MjQmMjU1KSxpdChEdCw5PT09RHQubGV2ZWw/MjpEdC5zdHJhdGVneT49Mnx8RHQubGV2ZWw8Mj80OjApLGl0KER0LDI1NSZEdC5nemhlYWQub3MpLER0Lmd6aGVhZC5leHRy'@;
put 'YSYmRHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGl0KER0LDI1NSZEdC5nemhlYWQuZXh0cmEubGVuZ3RoKSxpdChEdCxEdC5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLER0Lmd6aGVhZC5oY3JjJiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLDAp'@;
put 'KSxEdC5nemluZGV4PTAsRHQuc3RhdHVzPTY5KTooaXQoRHQsMCksaXQoRHQsMCksaXQoRHQsMCksaXQoRHQsMCksaXQoRHQsMCksaXQoRHQsOT09PUR0LmxldmVsPzI6RHQuc3RyYXRlZ3k+PTJ8fER0LmxldmVsPDI/NDowKSxpdChEdCwzKSxEdC5zdGF0dXM9bHQpO2Vsc2V7dmFyIEluPU4r'@;
put 'KER0LndfYml0cy04PDw0KTw8ODtJbnw9KER0LnN0cmF0ZWd5Pj0yfHxEdC5sZXZlbDwyPzA6RHQubGV2ZWw8Nj8xOjY9PT1EdC5sZXZlbD8yOjMpPDw2LDAhPT1EdC5zdHJzdGFydCYmKElufD0zMiksSW4rPTMxLUluJTMxLER0LnN0YXR1cz1sdCx1dChEdCxJbiksMCE9PUR0LnN0cnN0YXJ0'@;
put 'JiYodXQoRHQscnQuYWRsZXI+Pj4xNiksdXQoRHQsNjU1MzUmcnQuYWRsZXIpKSxydC5hZGxlcj0xfWlmKDY5PT09RHQuc3RhdHVzKWlmKER0Lmd6aGVhZC5leHRyYSl7Zm9yKHB0PUR0LnBlbmRpbmc7RHQuZ3ppbmRleDwoNjU1MzUmRHQuZ3poZWFkLmV4dHJhLmxlbmd0aCkmJihEdC5wZW5k'@;
put 'aW5nIT09RHQucGVuZGluZ19idWZfc2l6ZXx8KER0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRGUocnQpLHB0PUR0LnBlbmRpbmcsRHQucGVuZGluZyE9PUR0LnBlbmRpbmdfYnVmX3Np'@;
put 'emUpKTspaXQoRHQsMjU1JkR0Lmd6aGVhZC5leHRyYVtEdC5nemluZGV4XSksRHQuZ3ppbmRleCsrO0R0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRHQuZ3ppbmRleD09PUR0Lmd6aGVh'@;
put 'ZC5leHRyYS5sZW5ndGgmJihEdC5nemluZGV4PTAsRHQuc3RhdHVzPTczKX1lbHNlIER0LnN0YXR1cz03MztpZig3Mz09PUR0LnN0YXR1cylpZihEdC5nemhlYWQubmFtZSl7cHQ9RHQucGVuZGluZztkb3tpZihEdC5wZW5kaW5nPT09RHQucGVuZGluZ19idWZfc2l6ZSYmKER0Lmd6aGVhZC5o'@;
put 'Y3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRGUocnQpLHB0PUR0LnBlbmRpbmcsRHQucGVuZGluZz09PUR0LnBlbmRpbmdfYnVmX3NpemUpKXtZdD0xO2JyZWFrfVl0PUR0Lmd6aW5kZXg8RHQuZ3poZWFk'@;
put 'Lm5hbWUubGVuZ3RoPzI1NSZEdC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KER0Lmd6aW5kZXgrKyk6MCxpdChEdCxZdCl9d2hpbGUoMCE9PVl0KTtEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxw'@;
put 'dCkpLDA9PT1ZdCYmKER0Lmd6aW5kZXg9MCxEdC5zdGF0dXM9OTEpfWVsc2UgRHQuc3RhdHVzPTkxO2lmKDkxPT09RHQuc3RhdHVzKWlmKER0Lmd6aGVhZC5jb21tZW50KXtwdD1EdC5wZW5kaW5nO2Rve2lmKER0LnBlbmRpbmc9PT1EdC5wZW5kaW5nX2J1Zl9zaXplJiYoRHQuZ3poZWFkLmhj'@;
put 'cmMmJkR0LnBlbmRpbmc+cHQmJihydC5hZGxlcj1FKHJ0LmFkbGVyLER0LnBlbmRpbmdfYnVmLER0LnBlbmRpbmctcHQscHQpKSxEZShydCkscHQ9RHQucGVuZGluZyxEdC5wZW5kaW5nPT09RHQucGVuZGluZ19idWZfc2l6ZSkpe1l0PTE7YnJlYWt9WXQ9RHQuZ3ppbmRleDxEdC5nemhlYWQu'@;
put 'Y29tbWVudC5sZW5ndGg/MjU1JkR0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoRHQuZ3ppbmRleCsrKTowLGl0KER0LFl0KX13aGlsZSgwIT09WXQpO0R0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5n'@;
put 'LXB0LHB0KSksMD09PVl0JiYoRHQuc3RhdHVzPTEwMyl9ZWxzZSBEdC5zdGF0dXM9MTAzO2lmKDEwMz09PUR0LnN0YXR1cyYmKER0Lmd6aGVhZC5oY3JjPyhEdC5wZW5kaW5nKzI+RHQucGVuZGluZ19idWZfc2l6ZSYmRGUocnQpLER0LnBlbmRpbmcrMjw9RHQucGVuZGluZ19idWZfc2l6ZSYm'@;
put 'KGl0KER0LDI1NSZydC5hZGxlciksaXQoRHQscnQuYWRsZXI+PjgmMjU1KSxydC5hZGxlcj0wLER0LnN0YXR1cz1sdCkpOkR0LnN0YXR1cz1sdCksMCE9PUR0LnBlbmRpbmcpe2lmKERlKHJ0KSwwPT09cnQuYXZhaWxfb3V0KXJldHVybiBEdC5sYXN0X2ZsdXNoPS0xLHF9ZWxzZSBpZigwPT09'@;
put 'cnQuYXZhaWxfaW4mJmh0KEl0KTw9aHQoSnQpJiY0IT09SXQpcmV0dXJuIFVlKHJ0LC01KTtpZig2NjY9PT1EdC5zdGF0dXMmJjAhPT1ydC5hdmFpbF9pbilyZXR1cm4gVWUocnQsLTUpO2lmKDAhPT1ydC5hdmFpbF9pbnx8MCE9PUR0Lmxvb2thaGVhZHx8SXQhPT1WJiY2NjYhPT1EdC5zdGF0'@;
put 'dXMpe3ZhciB5bj0yPT09RHQuc3RyYXRlZ3k/ZnVuY3Rpb24gV24ocnQsSXQpe2Zvcih2YXIgSnQ7Oyl7aWYoMD09PXJ0Lmxvb2thaGVhZCYmKFB0KHJ0KSwwPT09cnQubG9va2FoZWFkKSl7aWYoSXQ9PT1WKXJldHVybiAxO2JyZWFrfWlmKHJ0Lm1hdGNoX2xlbmd0aD0wLEp0PUkuX3RyX3Rh'@;
put 'bGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0XSkscnQubG9va2FoZWFkLS0scnQuc3Ryc3RhcnQrKyxKdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9MCw0PT09SXQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9v'@;
put 'dXQ/Mzo0KTpydC5sYXN0X2xpdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpPzE6Mn0oRHQsSXQpOjM9PT1EdC5zdHJhdGVneT9mdW5jdGlvbiBibihydCxJdCl7Zm9yKHZhciBKdCxEdCxwdCxZdCxJbj1ydC53aW5kb3c7Oyl7aWYocnQubG9va2FoZWFkPD1MZSl7aWYoUHQo'@;
put 'cnQpLHJ0Lmxvb2thaGVhZDw9TGUmJkl0PT09VilyZXR1cm4gMTtpZigwPT09cnQubG9va2FoZWFkKWJyZWFrfWlmKHJ0Lm1hdGNoX2xlbmd0aD0wLHJ0Lmxvb2thaGVhZD49eGUmJnJ0LnN0cnN0YXJ0PjAmJihEdD1JbltwdD1ydC5zdHJzdGFydC0xXSk9PT1JblsrK3B0XSYmRHQ9PT1Jblsr'@;
put 'K3B0XSYmRHQ9PT1JblsrK3B0XSl7WXQ9cnQuc3Ryc3RhcnQrTGU7ZG97fXdoaWxlKER0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytw'@;
put 'dF0mJnB0PFl0KTtydC5tYXRjaF9sZW5ndGg9TGUtKFl0LXB0KSxydC5tYXRjaF9sZW5ndGg+cnQubG9va2FoZWFkJiYocnQubWF0Y2hfbGVuZ3RoPXJ0Lmxvb2thaGVhZCl9aWYocnQubWF0Y2hfbGVuZ3RoPj14ZT8oSnQ9SS5fdHJfdGFsbHkocnQsMSxydC5tYXRjaF9sZW5ndGgteGUpLHJ0'@;
put 'Lmxvb2thaGVhZC09cnQubWF0Y2hfbGVuZ3RoLHJ0LnN0cnN0YXJ0Kz1ydC5tYXRjaF9sZW5ndGgscnQubWF0Y2hfbGVuZ3RoPTApOihKdD1JLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydF0pLHJ0Lmxvb2thaGVhZC0tLHJ0LnN0cnN0YXJ0KyspLEp0JiYoemUocnQsITEp'@;
put 'LDA9PT1ydC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHJ0Lmluc2VydD0wLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCk/MToyfShEdCxJdCk6JG5bRHQubGV2'@;
put 'ZWxdLmZ1bmMoRHQsSXQpO2lmKCgzPT09eW58fDQ9PT15bikmJihEdC5zdGF0dXM9NjY2KSwxPT09eW58fDM9PT15bilyZXR1cm4gMD09PXJ0LmF2YWlsX291dCYmKER0Lmxhc3RfZmx1c2g9LTEpLHE7aWYoMj09PXluJiYoMT09PUl0P0kuX3RyX2FsaWduKER0KTo1IT09SXQmJihJLl90cl9z'@;
put 'dG9yZWRfYmxvY2soRHQsMCwwLCExKSwzPT09SXQmJihNZShEdC5oZWFkKSwwPT09RHQubG9va2FoZWFkJiYoRHQuc3Ryc3RhcnQ9MCxEdC5ibG9ja19zdGFydD0wLER0Lmluc2VydD0wKSkpLERlKHJ0KSwwPT09cnQuYXZhaWxfb3V0KSlyZXR1cm4gRHQubGFzdF9mbHVzaD0tMSxxfXJldHVy'@;
put 'biA0IT09SXQ/cTpEdC53cmFwPD0wPzE6KDI9PT1EdC53cmFwPyhpdChEdCwyNTUmcnQuYWRsZXIpLGl0KER0LHJ0LmFkbGVyPj44JjI1NSksaXQoRHQscnQuYWRsZXI+PjE2JjI1NSksaXQoRHQscnQuYWRsZXI+PjI0JjI1NSksaXQoRHQsMjU1JnJ0LnRvdGFsX2luKSxpdChEdCxydC50b3Rh'@;
put 'bF9pbj4+OCYyNTUpLGl0KER0LHJ0LnRvdGFsX2luPj4xNiYyNTUpLGl0KER0LHJ0LnRvdGFsX2luPj4yNCYyNTUpKToodXQoRHQscnQuYWRsZXI+Pj4xNiksdXQoRHQsNjU1MzUmcnQuYWRsZXIpKSxEZShydCksRHQud3JhcD4wJiYoRHQud3JhcD0tRHQud3JhcCksMCE9PUR0LnBlbmRpbmc/'@;
put 'cToxKX0sei5kZWZsYXRlRW5kPWZ1bmN0aW9uIG1uKHJ0KXt2YXIgSXQ7cmV0dXJuIHJ0JiZydC5zdGF0ZT8oSXQ9cnQuc3RhdGUuc3RhdHVzKSE9PWplJiY2OSE9PUl0JiY3MyE9PUl0JiY5MSE9PUl0JiYxMDMhPT1JdCYmSXQhPT1sdCYmNjY2IT09SXQ/VWUocnQsdGUpOihydC5zdGF0ZT1u'@;
put 'dWxsLEl0PT09bHQ/VWUocnQsLTMpOnEpOnRlfSx6LmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9tZXNzYWdlcyI6MzcsIi4vdHJlZXMiOjM4fV0sMzM6'@;
put 'W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPWZ1bmN0aW9uIEsoKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRo'@;
put 'aXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwzNDpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtSLmV4cG9ydHM9ZnVuY3Rpb24oRSxqKXt2YXIgVixCLFksWCxVLHEsZWUsdGUsb2Usc2UsaGUsdWUsY2UsRyxiLEQsSCxOLGcsQyxTLHYscCx3LEo7dz1FLmlucHV0LFk9KEI9RS5u'@;
put 'ZXh0X2luKSsoRS5hdmFpbF9pbi01KSxKPUUub3V0cHV0LFU9KFg9RS5uZXh0X291dCktKGotRS5hdmFpbF9vdXQpLHE9WCsoRS5hdmFpbF9vdXQtMjU3KSxlZT0oVj1FLnN0YXRlKS5kbWF4LHRlPVYud3NpemUsb2U9Vi53aGF2ZSxzZT1WLnduZXh0LGhlPVYud2luZG93LHVlPVYuaG9sZCxj'@;
put 'ZT1WLmJpdHMsRz1WLmxlbmNvZGUsYj1WLmRpc3Rjb2RlLEQ9KDE8PFYubGVuYml0cyktMSxIPSgxPDxWLmRpc3RiaXRzKS0xO2U6ZG97Y2U8MTUmJih1ZSs9d1tCKytdPDxjZSx1ZSs9d1tCKytdPDwoY2UrPTgpLGNlKz04KSxOPUdbdWUmRF07dDpmb3IoOzspe2lmKHVlPj4+PWc9Tj4+PjI0'@;
put 'LGNlLT1nLDA9PShnPU4+Pj4xNiYyNTUpKUpbWCsrXT02NTUzNSZOO2Vsc2V7aWYoISgxNiZnKSl7aWYoNjQmZyl7aWYoMzImZyl7Vi5tb2RlPTEyO2JyZWFrIGV9RS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsVi5tb2RlPTMwO2JyZWFrIGV9Tj1HWyg2NTUzNSZOKSsodWUm'@;
put 'KDE8PGcpLTEpXTtjb250aW51ZSB0fWZvcihDPTY1NTM1Jk4sKGcmPTE1KSYmKGNlPGcmJih1ZSs9d1tCKytdPDxjZSxjZSs9OCksQys9dWUmKDE8PGcpLTEsdWU+Pj49ZyxjZS09ZyksY2U8MTUmJih1ZSs9d1tCKytdPDxjZSx1ZSs9d1tCKytdPDwoY2UrPTgpLGNlKz04KSxOPWJbdWUmSF07'@;
put 'Oyl7aWYodWU+Pj49Zz1OPj4+MjQsY2UtPWcsMTYmKGc9Tj4+PjE2JjI1NSkpe2lmKFM9NjU1MzUmTixjZTwoZyY9MTUpJiYodWUrPXdbQisrXTw8Y2UsKGNlKz04KTxnJiYodWUrPXdbQisrXTw8Y2UsY2UrPTgpKSwoUys9dWUmKDE8PGcpLTEpPmVlKXtFLm1zZz0iaW52YWxpZCBkaXN0YW5j'@;
put 'ZSB0b28gZmFyIGJhY2siLFYubW9kZT0zMDticmVhayBlfWlmKHVlPj4+PWcsY2UtPWcsUz4oZz1YLVUpKXtpZigoZz1TLWcpPm9lJiZWLnNhbmUpe0UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVi5tb2RlPTMwO2JyZWFrIGV9aWYodj0wLHA9aGUsMD09PXNlKXtpZih2'@;
put 'Kz10ZS1nLGc8Qyl7Qy09Zztkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO3Y9WC1TLHA9Sn19ZWxzZSBpZihzZTxnKXtpZih2Kz10ZStzZS1nLChnLT1zZSk8Qyl7Qy09Zztkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO2lmKHY9MCxzZTxDKXtDLT1nPXNlO2Rve0pbWCsrXT1oZVt2'@;
put 'KytdfXdoaWxlKC0tZyk7dj1YLVMscD1KfX19ZWxzZSBpZih2Kz1zZS1nLGc8Qyl7Qy09Zztkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO3Y9WC1TLHA9Sn1mb3IoO0M+MjspSltYKytdPXBbdisrXSxKW1grK109cFt2KytdLEpbWCsrXT1wW3YrK10sQy09MztDJiYoSltYKytdPXBbdisr'@;
put 'XSxDPjEmJihKW1grK109cFt2KytdKSl9ZWxzZXt2PVgtUztkb3tKW1grK109Slt2KytdLEpbWCsrXT1KW3YrK10sSltYKytdPUpbdisrXSxDLT0zfXdoaWxlKEM+Mik7QyYmKEpbWCsrXT1KW3YrK10sQz4xJiYoSltYKytdPUpbdisrXSkpfWJyZWFrfWlmKDY0Jmcpe0UubXNnPSJpbnZhbGlk'@;
put 'IGRpc3RhbmNlIGNvZGUiLFYubW9kZT0zMDticmVhayBlfU49YlsoNjU1MzUmTikrKHVlJigxPDxnKS0xKV19fWJyZWFrfX13aGlsZShCPFkmJlg8cSk7dWUmPSgxPDwoY2UtPShDPWNlPj4zKTw8MykpLTEsRS5uZXh0X2luPUItPUMsRS5uZXh0X291dD1YLEUuYXZhaWxfaW49QjxZP1ktQis1'@;
put 'OjUtKEItWSksRS5hdmFpbF9vdXQ9WDxxP3EtWCsyNTc6MjU3LShYLXEpLFYuaG9sZD11ZSxWLmJpdHM9Y2V9fSx7fV0sMzU6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi4vdXRpbHMvY29tbW9uIiksST1PKCIuL2FkbGVyMzIiKSxrPU8oIi4vY3JjMzIiKSxFPU8o'@;
put 'Ii4vaW5mZmFzdCIpLGo9TygiLi9pbmZ0cmVlcyIpLGVlPTAsc2U9LTIsYj0xLE1lPTg1MixEZT01OTI7ZnVuY3Rpb24gdXQod3Qpe3JldHVybih3dD4+PjI0JjI1NSkrKHd0Pj4+OCY2NTI4MCkrKCg2NTI4MCZ3dCk8PDgpKygoMjU1Jnd0KTw8MjQpfWZ1bmN0aW9uIE10KCl7dGhpcy5tb2Rl'@;
put 'PTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRo'@;
put 'aXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlz'@;
put 'Lm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBLLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBLLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlz'@;
put 'Lndhcz0wfWZ1bmN0aW9uIEh0KHd0KXt2YXIgWHQ7cmV0dXJuIHd0JiZ3dC5zdGF0ZT8od3QudG90YWxfaW49d3QudG90YWxfb3V0PShYdD13dC5zdGF0ZSkudG90YWw9MCx3dC5tc2c9IiIsWHQud3JhcCYmKHd0LmFkbGVyPTEmWHQud3JhcCksWHQubW9kZT1iLFh0Lmxhc3Q9MCxYdC5oYXZl'@;
put 'ZGljdD0wLFh0LmRtYXg9MzI3NjgsWHQuaGVhZD1udWxsLFh0LmhvbGQ9MCxYdC5iaXRzPTAsWHQubGVuY29kZT1YdC5sZW5keW49bmV3IEsuQnVmMzIoTWUpLFh0LmRpc3Rjb2RlPVh0LmRpc3RkeW49bmV3IEsuQnVmMzIoRGUpLFh0LnNhbmU9MSxYdC5iYWNrPS0xLGVlKTpzZX1mdW5jdGlv'@;
put 'biBQdCh3dCl7dmFyIFh0O3JldHVybiB3dCYmd3Quc3RhdGU/KChYdD13dC5zdGF0ZSkud3NpemU9MCxYdC53aGF2ZT0wLFh0LnduZXh0PTAsSHQod3QpKTpzZX1mdW5jdGlvbiBvbih3dCxYdCl7dmFyIF90LE50O3JldHVybiF3dHx8IXd0LnN0YXRlfHwoTnQ9d3Quc3RhdGUsWHQ8MD8oX3Q9'@;
put 'MCxYdD0tWHQpOihfdD0xKyhYdD4+NCksWHQ8NDgmJihYdCY9MTUpKSxYdCYmKFh0PDh8fFh0PjE1KSk/c2U6KG51bGwhPT1OdC53aW5kb3cmJk50LndiaXRzIT09WHQmJihOdC53aW5kb3c9bnVsbCksTnQud3JhcD1fdCxOdC53Yml0cz1YdCxQdCh3dCkpfWZ1bmN0aW9uIENuKHd0LFh0KXt2'@;
put 'YXIgX3QsTnQ7cmV0dXJuIHd0PyhOdD1uZXcgTXQsd3Quc3RhdGU9TnQsTnQud2luZG93PW51bGwsKF90PW9uKHd0LFh0KSkhPT1lZSYmKHd0LnN0YXRlPW51bGwpLF90KTpzZX12YXIgV24sZW4sYm49ITA7ZnVuY3Rpb24gJG4od3Qpe2lmKGJuKXt2YXIgWHQ7Zm9yKFduPW5ldyBLLkJ1ZjMy'@;
put 'KDUxMiksZW49bmV3IEsuQnVmMzIoMzIpLFh0PTA7WHQ8MTQ0Oyl3dC5sZW5zW1h0KytdPTg7Zm9yKDtYdDwyNTY7KXd0LmxlbnNbWHQrK109OTtmb3IoO1h0PDI4MDspd3QubGVuc1tYdCsrXT03O2Zvcig7WHQ8Mjg4Oyl3dC5sZW5zW1h0KytdPTg7Zm9yKGooMSx3dC5sZW5zLDAsMjg4LFdu'@;
put 'LDAsd3Qud29yayx7Yml0czo5fSksWHQ9MDtYdDwzMjspd3QubGVuc1tYdCsrXT01O2ooMix3dC5sZW5zLDAsMzIsZW4sMCx3dC53b3JrLHtiaXRzOjV9KSxibj0hMX13dC5sZW5jb2RlPVduLHd0LmxlbmJpdHM9OSx3dC5kaXN0Y29kZT1lbix3dC5kaXN0Yml0cz01fXouaW5mbGF0ZVJlc2V0'@;
put 'PVB0LHouaW5mbGF0ZVJlc2V0Mj1vbix6LmluZmxhdGVSZXNldEtlZXA9SHQsei5pbmZsYXRlSW5pdD1mdW5jdGlvbiBVdCh3dCl7cmV0dXJuIENuKHd0LDE1KX0sei5pbmZsYXRlSW5pdDI9Q24sei5pbmZsYXRlPWZ1bmN0aW9uIGZ0KHd0LFh0KXt2YXIgX3QsTnQsbW4scnQsSXQsSnQsRHQs'@;
put 'cHQsWXQsSW4senQseW4seG4sc24sUm4sJHQsUG4sbmksbG4sam4scXIsZ2ksVWksS3IsQm49MCx4cj1uZXcgSy5CdWY4KDQpLG5vPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighd3R8fCF3dC5zdGF0ZXx8IXd0Lm91dHB1dHx8IXd0LmlucHV0'@;
put 'JiYwIT09d3QuYXZhaWxfaW4pcmV0dXJuIHNlOzEyPT09KF90PXd0LnN0YXRlKS5tb2RlJiYoX3QubW9kZT0xMyksSXQ9d3QubmV4dF9vdXQsbW49d3Qub3V0cHV0LHJ0PXd0Lm5leHRfaW4sTnQ9d3QuaW5wdXQscHQ9X3QuaG9sZCxZdD1fdC5iaXRzLEluPUp0PXd0LmF2YWlsX2luLHp0PUR0'@;
put 'PXd0LmF2YWlsX291dCxnaT1lZTtlOmZvcig7Oylzd2l0Y2goX3QubW9kZSl7Y2FzZSBiOmlmKDA9PT1fdC53cmFwKXtfdC5tb2RlPTEzO2JyZWFrfWZvcig7WXQ8MTY7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYoMiZfdC53cmFwJiYzNTYxNT09'@;
put 'PXB0KXtfdC5jaGVjaz0wLHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIsMiwwKSxwdD0wLFl0PTAsX3QubW9kZT0yO2JyZWFrfWlmKF90LmZsYWdzPTAsX3QuaGVhZCYmKF90LmhlYWQuZG9uZT0hMSksISgxJl90LndyYXApfHwoKCgyNTUmcHQp'@;
put 'PDw4KSsocHQ+PjgpKSUzMSl7d3QubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixfdC5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZwdCkpe3d0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9MzA7YnJlYWt9aWYoWXQtPTQscXI9OCsoMTUmKHB0Pj4+PTQpKSww'@;
put 'PT09X3Qud2JpdHMpX3Qud2JpdHM9cXI7ZWxzZSBpZihxcj5fdC53Yml0cyl7d3QubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixfdC5tb2RlPTMwO2JyZWFrfV90LmRtYXg9MTw8cXIsd3QuYWRsZXI9X3QuY2hlY2s9MSxfdC5tb2RlPTUxMiZwdD8xMDoxMixwdD0wLFl0PTA7YnJlYWs7Y2Fz'@;
put 'ZSAyOmZvcig7WXQ8MTY7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYoX3QuZmxhZ3M9cHQsOCE9KDI1NSZfdC5mbGFncykpe3d0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmX3QuZmxh'@;
put 'Z3Mpe3d0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixfdC5tb2RlPTMwO2JyZWFrfV90LmhlYWQmJihfdC5oZWFkLnRleHQ9cHQ+PjgmMSksNTEyJl90LmZsYWdzJiYoeHJbMF09MjU1JnB0LHhyWzFdPXB0Pj4+OCYyNTUsX3QuY2hlY2s9ayhfdC5jaGVjayx4ciwyLDApKSxwdD0w'@;
put 'LFl0PTAsX3QubW9kZT0zO2Nhc2UgMzpmb3IoO1l0PDMyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90LmhlYWQmJihfdC5oZWFkLnRpbWU9cHQpLDUxMiZfdC5mbGFncyYmKHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LHhyWzJdPXB0Pj4+'@;
put 'MTYmMjU1LHhyWzNdPXB0Pj4+MjQmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIsNCwwKSkscHQ9MCxZdD0wLF90Lm1vZGU9NDtjYXNlIDQ6Zm9yKDtZdDwxNjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5oZWFkJiYoX3QuaGVhZC54ZmxhZ3M9'@;
put 'MjU1JnB0LF90LmhlYWQub3M9cHQ+PjgpLDUxMiZfdC5mbGFncyYmKHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIsMiwwKSkscHQ9MCxZdD0wLF90Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZfdC5mbGFncyl7Zm9yKDtZdDwxNjspe2lmKDA9PT1K'@;
put 'dClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5sZW5ndGg9cHQsX3QuaGVhZCYmKF90LmhlYWQuZXh0cmFfbGVuPXB0KSw1MTImX3QuZmxhZ3MmJih4clswXT0yNTUmcHQseHJbMV09cHQ+Pj44JjI1NSxfdC5jaGVjaz1rKF90LmNoZWNrLHhyLDIsMCkpLHB0PTAsWXQ9'@;
put 'MH1lbHNlIF90LmhlYWQmJihfdC5oZWFkLmV4dHJhPW51bGwpO190Lm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZfdC5mbGFncyYmKCh5bj1fdC5sZW5ndGgpPkp0JiYoeW49SnQpLHluJiYoX3QuaGVhZCYmKHFyPV90LmhlYWQuZXh0cmFfbGVuLV90Lmxlbmd0aCxfdC5oZWFkLmV4dHJhfHwoX3Qu'@;
put 'aGVhZC5leHRyYT1uZXcgQXJyYXkoX3QuaGVhZC5leHRyYV9sZW4pKSxLLmFycmF5U2V0KF90LmhlYWQuZXh0cmEsTnQscnQseW4scXIpKSw1MTImX3QuZmxhZ3MmJihfdC5jaGVjaz1rKF90LmNoZWNrLE50LHluLHJ0KSksSnQtPXluLHJ0Kz15bixfdC5sZW5ndGgtPXluKSxfdC5sZW5ndGgp'@;
put 'KWJyZWFrIGU7X3QubGVuZ3RoPTAsX3QubW9kZT03O2Nhc2UgNzppZigyMDQ4Jl90LmZsYWdzKXtpZigwPT09SnQpYnJlYWsgZTt5bj0wO2Rve3FyPU50W3J0K3luKytdLF90LmhlYWQmJnFyJiZfdC5sZW5ndGg8NjU1MzYmJihfdC5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUocXIp'@;
put 'KX13aGlsZShxciYmeW48SnQpO2lmKDUxMiZfdC5mbGFncyYmKF90LmNoZWNrPWsoX3QuY2hlY2ssTnQseW4scnQpKSxKdC09eW4scnQrPXluLHFyKWJyZWFrIGV9ZWxzZSBfdC5oZWFkJiYoX3QuaGVhZC5uYW1lPW51bGwpO190Lmxlbmd0aD0wLF90Lm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZf'@;
put 'dC5mbGFncyl7aWYoMD09PUp0KWJyZWFrIGU7eW49MDtkb3txcj1OdFtydCt5bisrXSxfdC5oZWFkJiZxciYmX3QubGVuZ3RoPDY1NTM2JiYoX3QuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHFyKSl9d2hpbGUocXImJnluPEp0KTtpZig1MTImX3QuZmxhZ3MmJihfdC5jaGVj'@;
put 'az1rKF90LmNoZWNrLE50LHluLHJ0KSksSnQtPXluLHJ0Kz15bixxcilicmVhayBlfWVsc2UgX3QuaGVhZCYmKF90LmhlYWQuY29tbWVudD1udWxsKTtfdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZfdC5mbGFncyl7Zm9yKDtZdDwxNjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0'@;
put 'KytdPDxZdCxZdCs9OH1pZihwdCE9PSg2NTUzNSZfdC5jaGVjaykpe3d0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsX3QubW9kZT0zMDticmVha31wdD0wLFl0PTB9X3QuaGVhZCYmKF90LmhlYWQuaGNyYz1fdC5mbGFncz4+OSYxLF90LmhlYWQuZG9uZT0hMCksd3QuYWRsZXI9X3QuY2hl'@;
put 'Y2s9MCxfdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDtZdDwzMjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH13dC5hZGxlcj1fdC5jaGVjaz11dChwdCkscHQ9MCxZdD0wLF90Lm1vZGU9MTE7Y2FzZSAxMTppZigwPT09X3QuaGF2ZWRpY3QpcmV0'@;
put 'dXJuIHd0Lm5leHRfb3V0PUl0LHd0LmF2YWlsX291dD1EdCx3dC5uZXh0X2luPXJ0LHd0LmF2YWlsX2luPUp0LF90LmhvbGQ9cHQsX3QuYml0cz1ZdCwyO3d0LmFkbGVyPV90LmNoZWNrPTEsX3QubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1YdHx8Nj09PVh0KWJyZWFrIGU7Y2FzZSAxMzppZihf'@;
put 'dC5sYXN0KXtwdD4+Pj03Jll0LFl0LT03Jll0LF90Lm1vZGU9Mjc7YnJlYWt9Zm9yKDtZdDwzOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fXN3aXRjaChfdC5sYXN0PTEmcHQsWXQtPTEsMyYocHQ+Pj49MSkpe2Nhc2UgMDpfdC5tb2RlPTE0O2JyZWFr'@;
put 'O2Nhc2UgMTppZigkbihfdCksX3QubW9kZT0yMCw2PT09WHQpe3B0Pj4+PTIsWXQtPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6X3QubW9kZT0xNzticmVhaztjYXNlIDM6d3QubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLF90Lm1vZGU9MzB9cHQ+Pj49MixZdC09MjticmVhaztjYXNlIDE0OmZv'@;
put 'cihwdD4+Pj03Jll0LFl0LT03Jll0O1l0PDMyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKCg2NTUzNSZwdCkhPShwdD4+PjE2XjY1NTM1KSl7d3QubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixfdC5tb2RlPTMwO2JyZWFrfWlm'@;
put 'KF90Lmxlbmd0aD02NTUzNSZwdCxwdD0wLFl0PTAsX3QubW9kZT0xNSw2PT09WHQpYnJlYWsgZTtjYXNlIDE1Ol90Lm1vZGU9MTY7Y2FzZSAxNjppZih5bj1fdC5sZW5ndGgpe2lmKHluPkp0JiYoeW49SnQpLHluPkR0JiYoeW49RHQpLDA9PT15bilicmVhayBlO0suYXJyYXlTZXQobW4sTnQs'@;
put 'cnQseW4sSXQpLEp0LT15bixydCs9eW4sRHQtPXluLEl0Kz15bixfdC5sZW5ndGgtPXluO2JyZWFrfV90Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO1l0PDE0Oyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKF90Lm5sZW49MjU3KygzMSZwdCks'@;
put 'WXQtPTUsX3QubmRpc3Q9MSsoMzEmKHB0Pj4+PTUpKSxZdC09NSxfdC5uY29kZT00KygxNSYocHQ+Pj49NSkpLHB0Pj4+PTQsWXQtPTQsX3Qubmxlbj4yODZ8fF90Lm5kaXN0PjMwKXt3dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixfdC5tb2RlPTMwO2JyZWFr'@;
put 'fV90LmhhdmU9MCxfdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtfdC5oYXZlPF90Lm5jb2RlOyl7Zm9yKDtZdDwzOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90LmxlbnNbbm9bX3QuaGF2ZSsrXV09NyZwdCxwdD4+Pj0zLFl0LT0zfWZvcig7X3QuaGF2'@;
put 'ZTwxOTspX3QubGVuc1tub1tfdC5oYXZlKytdXT0wO2lmKF90LmxlbmNvZGU9X3QubGVuZHluLF90LmxlbmJpdHM9NyxnaT1qKDAsX3QubGVucywwLDE5LF90LmxlbmNvZGUsMCxfdC53b3JrLFVpPXtiaXRzOl90LmxlbmJpdHN9KSxfdC5sZW5iaXRzPVVpLmJpdHMsZ2kpe3d0Lm1zZz0iaW52'@;
put 'YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfV90LmhhdmU9MCxfdC5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtfdC5oYXZlPF90Lm5sZW4rX3QubmRpc3Q7KXtmb3IoOyR0PShCbj1fdC5sZW5jb2RlW3B0JigxPDxfdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsUG49NjU1MzUm'@;
put 'Qm4sISgoUm49Qm4+Pj4yNCk8PVl0KTspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZihQbjwxNilwdD4+Pj1SbixZdC09Um4sX3QubGVuc1tfdC5oYXZlKytdPVBuO2Vsc2V7aWYoMTY9PT1Qbil7Zm9yKEtyPVJuKzI7WXQ8S3I7KXtpZigwPT09SnQp'@;
put 'YnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYocHQ+Pj49Um4sWXQtPVJuLDA9PT1fdC5oYXZlKXt3dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLF90Lm1vZGU9MzA7YnJlYWt9cXI9X3QubGVuc1tfdC5oYXZlLTFdLHluPTMrKDMmcHQpLHB0Pj4+PTIsWXQt'@;
put 'PTJ9ZWxzZSBpZigxNz09PVBuKXtmb3IoS3I9Um4rMztZdDxLcjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1ZdC09Um4scXI9MCx5bj0zKyg3JihwdD4+Pj1SbikpLHB0Pj4+PTMsWXQtPTN9ZWxzZXtmb3IoS3I9Um4rNztZdDxLcjspe2lmKDA9PT1K'@;
put 'dClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1ZdC09Um4scXI9MCx5bj0xMSsoMTI3JihwdD4+Pj1SbikpLHB0Pj4+PTcsWXQtPTd9aWYoX3QuaGF2ZSt5bj5fdC5ubGVuK190Lm5kaXN0KXt3dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLF90Lm1vZGU9MzA7'@;
put 'YnJlYWt9Zm9yKDt5bi0tOylfdC5sZW5zW190LmhhdmUrK109cXJ9fWlmKDMwPT09X3QubW9kZSlicmVhaztpZigwPT09X3QubGVuc1syNTZdKXt3dC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsX3QubW9kZT0zMDticmVha31pZihfdC5sZW5iaXRzPTksZ2k9'@;
put 'aigxLF90LmxlbnMsMCxfdC5ubGVuLF90LmxlbmNvZGUsMCxfdC53b3JrLFVpPXtiaXRzOl90LmxlbmJpdHN9KSxfdC5sZW5iaXRzPVVpLmJpdHMsZ2kpe3d0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfWlmKF90LmRpc3RiaXRzPTYsX3QuZGlz'@;
put 'dGNvZGU9X3QuZGlzdGR5bixnaT1qKDIsX3QubGVucyxfdC5ubGVuLF90Lm5kaXN0LF90LmRpc3Rjb2RlLDAsX3Qud29yayxVaT17Yml0czpfdC5kaXN0Yml0c30pLF90LmRpc3RiaXRzPVVpLmJpdHMsZ2kpe3d0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixfdC5tb2RlPTMwO2JyZWFr'@;
put 'fWlmKF90Lm1vZGU9MjAsNj09PVh0KWJyZWFrIGU7Y2FzZSAyMDpfdC5tb2RlPTIxO2Nhc2UgMjE6aWYoSnQ+PTYmJkR0Pj0yNTgpe3d0Lm5leHRfb3V0PUl0LHd0LmF2YWlsX291dD1EdCx3dC5uZXh0X2luPXJ0LHd0LmF2YWlsX2luPUp0LF90LmhvbGQ9cHQsX3QuYml0cz1ZdCxFKHd0LHp0'@;
put 'KSxJdD13dC5uZXh0X291dCxtbj13dC5vdXRwdXQsRHQ9d3QuYXZhaWxfb3V0LHJ0PXd0Lm5leHRfaW4sTnQ9d3QuaW5wdXQsSnQ9d3QuYXZhaWxfaW4scHQ9X3QuaG9sZCxZdD1fdC5iaXRzLDEyPT09X3QubW9kZSYmKF90LmJhY2s9LTEpO2JyZWFrfWZvcihfdC5iYWNrPTA7JHQ9KEJuPV90'@;
put 'LmxlbmNvZGVbcHQmKDE8PF90LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxQbj02NTUzNSZCbiwhKChSbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKCR0JiYhKDI0MCYkdCkpe2ZvcihuaT1Sbixsbj0kdCxqbj1QbjskdD0o'@;
put 'Qm49X3QubGVuY29kZVtqbisoKHB0JigxPDxuaStsbiktMSk+Pm5pKV0pPj4+MTYmMjU1LFBuPTY1NTM1JkJuLCEobmkrKFJuPUJuPj4+MjQpPD1ZdCk7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9cHQ+Pj49bmksWXQtPW5pLF90LmJhY2srPW5pfWlm'@;
put 'KHB0Pj4+PVJuLFl0LT1SbixfdC5iYWNrKz1SbixfdC5sZW5ndGg9UG4sMD09PSR0KXtfdC5tb2RlPTI2O2JyZWFrfWlmKDMyJiR0KXtfdC5iYWNrPS0xLF90Lm1vZGU9MTI7YnJlYWt9aWYoNjQmJHQpe3d0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixfdC5tb2RlPTMwO2Jy'@;
put 'ZWFrfV90LmV4dHJhPTE1JiR0LF90Lm1vZGU9MjI7Y2FzZSAyMjppZihfdC5leHRyYSl7Zm9yKEtyPV90LmV4dHJhO1l0PEtyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90Lmxlbmd0aCs9cHQmKDE8PF90LmV4dHJhKS0xLHB0Pj4+PV90LmV4dHJh'@;
put 'LFl0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1fdC53YXM9X3QubGVuZ3RoLF90Lm1vZGU9MjM7Y2FzZSAyMzpmb3IoOyR0PShCbj1fdC5kaXN0Y29kZVtwdCYoMTw8X3QuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxQbj02NTUzNSZCbiwhKChSbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09'@;
put 'PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKCEoMjQwJiR0KSl7Zm9yKG5pPVJuLGxuPSR0LGpuPVBuOyR0PShCbj1fdC5kaXN0Y29kZVtqbisoKHB0JigxPDxuaStsbiktMSk+Pm5pKV0pPj4+MTYmMjU1LFBuPTY1NTM1JkJuLCEobmkrKFJuPUJuPj4+MjQpPD1Z'@;
put 'dCk7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9cHQ+Pj49bmksWXQtPW5pLF90LmJhY2srPW5pfWlmKHB0Pj4+PVJuLFl0LT1SbixfdC5iYWNrKz1Sbiw2NCYkdCl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLF90Lm1vZGU9MzA7YnJlYWt9'@;
put 'X3Qub2Zmc2V0PVBuLF90LmV4dHJhPTE1JiR0LF90Lm1vZGU9MjQ7Y2FzZSAyNDppZihfdC5leHRyYSl7Zm9yKEtyPV90LmV4dHJhO1l0PEtyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90Lm9mZnNldCs9cHQmKDE8PF90LmV4dHJhKS0xLHB0Pj4+'@;
put 'PV90LmV4dHJhLFl0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1pZihfdC5vZmZzZXQ+X3QuZG1heCl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsX3QubW9kZT0zMDticmVha31fdC5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PUR0KWJyZWFrIGU7aWYoX3Qub2Zm'@;
put 'c2V0Pih5bj16dC1EdCkpe2lmKCh5bj1fdC5vZmZzZXQteW4pPl90LndoYXZlJiZfdC5zYW5lKXt3dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixfdC5tb2RlPTMwO2JyZWFrfXhuPXluPl90LnduZXh0P190LndzaXplLSh5bi09X3Qud25leHQpOl90LnduZXh0LXluLHlu'@;
put 'Pl90Lmxlbmd0aCYmKHluPV90Lmxlbmd0aCksc249X3Qud2luZG93fWVsc2Ugc249bW4seG49SXQtX3Qub2Zmc2V0LHluPV90Lmxlbmd0aDt5bj5EdCYmKHluPUR0KSxEdC09eW4sX3QubGVuZ3RoLT15bjtkb3ttbltJdCsrXT1zblt4bisrXX13aGlsZSgtLXluKTswPT09X3QubGVuZ3RoJiYo'@;
put 'X3QubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09RHQpYnJlYWsgZTttbltJdCsrXT1fdC5sZW5ndGgsRHQtLSxfdC5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYoX3Qud3JhcCl7Zm9yKDtZdDwzMjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHR8PU50W3J0KytdPDxZdCxZdCs9OH1p'@;
put 'Zih3dC50b3RhbF9vdXQrPXp0LT1EdCxfdC50b3RhbCs9enQsenQmJih3dC5hZGxlcj1fdC5jaGVjaz1fdC5mbGFncz9rKF90LmNoZWNrLG1uLHp0LEl0LXp0KTpJKF90LmNoZWNrLG1uLHp0LEl0LXp0KSksenQ9RHQsKF90LmZsYWdzP3B0OnV0KHB0KSkhPT1fdC5jaGVjayl7d3QubXNnPSJp'@;
put 'bmNvcnJlY3QgZGF0YSBjaGVjayIsX3QubW9kZT0zMDticmVha31wdD0wLFl0PTB9X3QubW9kZT0yODtjYXNlIDI4OmlmKF90LndyYXAmJl90LmZsYWdzKXtmb3IoO1l0PDMyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKHB0IT09KDQyOTQ5Njcy'@;
put 'OTUmX3QudG90YWwpKXt3dC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLF90Lm1vZGU9MzA7YnJlYWt9cHQ9MCxZdD0wfV90Lm1vZGU9Mjk7Y2FzZSAyOTpnaT0xO2JyZWFrIGU7Y2FzZSAzMDpnaT0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4gc2V9cmV0'@;
put 'dXJuIHd0Lm5leHRfb3V0PUl0LHd0LmF2YWlsX291dD1EdCx3dC5uZXh0X2luPXJ0LHd0LmF2YWlsX2luPUp0LF90LmhvbGQ9cHQsX3QuYml0cz1ZdCwoX3Qud3NpemV8fHp0IT09d3QuYXZhaWxfb3V0JiZfdC5tb2RlPDMwJiYoX3QubW9kZTwyN3x8NCE9PVh0KSkmJmZ1bmN0aW9uIEhuKHd0'@;
put 'LFh0LF90LE50KXt2YXIgbW4scnQ9d3Quc3RhdGU7cmV0dXJuIG51bGw9PT1ydC53aW5kb3cmJihydC53c2l6ZT0xPDxydC53Yml0cyxydC53bmV4dD0wLHJ0LndoYXZlPTAscnQud2luZG93PW5ldyBLLkJ1ZjgocnQud3NpemUpKSxOdD49cnQud3NpemU/KEsuYXJyYXlTZXQocnQud2luZG93'@;
put 'LFh0LF90LXJ0LndzaXplLHJ0LndzaXplLDApLHJ0LnduZXh0PTAscnQud2hhdmU9cnQud3NpemUpOigobW49cnQud3NpemUtcnQud25leHQpPk50JiYobW49TnQpLEsuYXJyYXlTZXQocnQud2luZG93LFh0LF90LU50LG1uLHJ0LnduZXh0KSwoTnQtPW1uKT8oSy5hcnJheVNldChydC53aW5k'@;
put 'b3csWHQsX3QtTnQsTnQsMCkscnQud25leHQ9TnQscnQud2hhdmU9cnQud3NpemUpOihydC53bmV4dCs9bW4scnQud25leHQ9PT1ydC53c2l6ZSYmKHJ0LnduZXh0PTApLHJ0LndoYXZlPHJ0LndzaXplJiYocnQud2hhdmUrPW1uKSkpLDB9KHd0LHd0Lm91dHB1dCx3dC5uZXh0X291dCx6dC13'@;
put 'dC5hdmFpbF9vdXQpPyhfdC5tb2RlPTMxLC00KTooenQtPXd0LmF2YWlsX291dCx3dC50b3RhbF9pbis9SW4tPXd0LmF2YWlsX2luLHd0LnRvdGFsX291dCs9enQsX3QudG90YWwrPXp0LF90LndyYXAmJnp0JiYod3QuYWRsZXI9X3QuY2hlY2s9X3QuZmxhZ3M/ayhfdC5jaGVjayxtbix6dCx3'@;
put 'dC5uZXh0X291dC16dCk6SShfdC5jaGVjayxtbix6dCx3dC5uZXh0X291dC16dCkpLHd0LmRhdGFfdHlwZT1fdC5iaXRzKyhfdC5sYXN0PzY0OjApKygxMj09PV90Lm1vZGU/MTI4OjApKygyMD09PV90Lm1vZGV8fDE1PT09X3QubW9kZT8yNTY6MCksKDA9PT1JbiYmMD09PXp0fHw0PT09WHQp'@;
put 'JiZnaT09PWVlJiYoZ2k9LTUpLGdpKX0sei5pbmZsYXRlRW5kPWZ1bmN0aW9uIGZuKHd0KXtpZighd3R8fCF3dC5zdGF0ZSlyZXR1cm4gc2U7dmFyIFh0PXd0LnN0YXRlO3JldHVybiBYdC53aW5kb3cmJihYdC53aW5kb3c9bnVsbCksd3Quc3RhdGU9bnVsbCxlZX0sei5pbmZsYXRlR2V0SGVh'@;
put 'ZGVyPWZ1bmN0aW9uIGhuKHd0LFh0KXt2YXIgX3Q7cmV0dXJuIHd0JiZ3dC5zdGF0ZSYmMiYoX3Q9d3Quc3RhdGUpLndyYXA/KF90LmhlYWQ9WHQsWHQuZG9uZT0hMSxlZSk6c2V9LHouaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxz'@;
put 'L2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL2luZmZhc3QiOjM0LCIuL2luZnRyZWVzIjozNn1dLDM2OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4uL3V0aWxzL2NvbW1vbiIpLFk9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcs'@;
put 'MTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxYPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sVT1bMSwy'@;
put 'LDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0scT1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIs'@;
put 'MjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO1IuZXhwb3J0cz1mdW5jdGlvbih0ZSxvZSxzZSxoZSx1ZSxjZSxHLGIpe3ZhciBkZSxmZSx4ZSxMZSxGZSxXZSxQZSxiZSxBZSxEPWIuYml0cyxIPTAsTj0wLGc9MCxDPTAsUz0wLHY9MCxwPTAsdz0wLEo9'@;
put 'MCxuZT0wLE9lPW51bGwsamU9MCxLZT1uZXcgSy5CdWYxNigxNiksWWU9bmV3IEsuQnVmMTYoMTYpLEplPW51bGwsbHQ9MDtmb3IoSD0wO0g8PTE1O0grKylLZVtIXT0wO2ZvcihOPTA7TjxoZTtOKyspS2Vbb2Vbc2UrTl1dKys7Zm9yKFM9RCxDPTE1O0M+PTEmJjA9PT1LZVtDXTtDLS0pO2lm'@;
put 'KFM+QyYmKFM9QyksMD09PUMpcmV0dXJuIHVlW2NlKytdPTIwOTcxNTIwLHVlW2NlKytdPTIwOTcxNTIwLGIuYml0cz0xLDA7Zm9yKGc9MTtnPEMmJjA9PT1LZVtnXTtnKyspO2ZvcihTPGcmJihTPWcpLHc9MSxIPTE7SDw9MTU7SCsrKWlmKHc8PD0xLCh3LT1LZVtIXSk8MClyZXR1cm4tMTtp'@;
put 'Zih3PjAmJigwPT09dGV8fDEhPT1DKSlyZXR1cm4tMTtmb3IoWWVbMV09MCxIPTE7SDwxNTtIKyspWWVbSCsxXT1ZZVtIXStLZVtIXTtmb3IoTj0wO048aGU7TisrKTAhPT1vZVtzZStOXSYmKEdbWWVbb2Vbc2UrTl1dKytdPU4pO2lmKDA9PT10ZT8oT2U9SmU9RyxXZT0xOSk6MT09PXRlPyhP'@;
put 'ZT1ZLGplLT0yNTcsSmU9WCxsdC09MjU3LFdlPTI1Nik6KE9lPVUsSmU9cSxXZT0tMSksbmU9MCxOPTAsSD1nLEZlPWNlLHY9UyxwPTAseGU9LTEsTGU9KEo9MTw8UyktMSwxPT09dGUmJko+ODUyfHwyPT09dGUmJko+NTkyKXJldHVybiAxO2Zvcig7Oyl7UGU9SC1wLEdbTl08V2U/KGJlPTAs'@;
put 'QWU9R1tOXSk6R1tOXT5XZT8oYmU9SmVbbHQrR1tOXV0sQWU9T2VbamUrR1tOXV0pOihiZT05NixBZT0wKSxkZT0xPDxILXAsZz1mZT0xPDx2O2Rve3VlW0ZlKyhuZT4+cCkrKGZlLT1kZSldPVBlPDwyNHxiZTw8MTZ8QWV8MH13aGlsZSgwIT09ZmUpO2ZvcihkZT0xPDxILTE7bmUmZGU7KWRl'@;
put 'Pj49MTtpZigwIT09ZGU/KG5lJj1kZS0xLG5lKz1kZSk6bmU9MCxOKyssMD09LS1LZVtIXSl7aWYoSD09PUMpYnJlYWs7SD1vZVtzZStHW05dXX1pZihIPlMmJihuZSZMZSkhPT14ZSl7Zm9yKDA9PT1wJiYocD1TKSxGZSs9Zyx3PTE8PCh2PUgtcCk7ditwPEMmJiEoKHctPUtlW3YrcF0pPD0w'@;
put 'KTspdisrLHc8PD0xO2lmKEorPTE8PHYsMT09PXRlJiZKPjg1Mnx8Mj09PXRlJiZKPjU5MilyZXR1cm4gMTt1ZVt4ZT1uZSZMZV09Uzw8MjR8djw8MTZ8RmUtY2V8MH19cmV0dXJuIDAhPT1uZSYmKHVlW0ZlK25lXT1ILXA8PDI0fDY0PDwxNnwwKSxiLmJpdHM9UywwfX0seyIuLi91dGlscy9j'@;
put 'b21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZp'@;
put 'Y2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuLi91dGlscy9jb21tb24iKTtmdW5jdGlvbiBWKGZ0KXtmb3IodmFyIGZuPWZ0Lmxlbmd0aDst'@;
put 'LWZuPj0wOylmdFtmbl09MH12YXIgY2U9MTUsRz0xNixDPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLFM9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNd'@;
put 'LHY9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLHA9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLEo9bmV3IEFycmF5KDU3Nik7VihKKTt2YXIgbmU9bmV3IEFycmF5KDYwKTtWKG5lKTt2YXIgZGU9bmV3IEFycmF5KDUxMik7'@;
put 'VihkZSk7dmFyIGZlPW5ldyBBcnJheSgyNTYpO1YoZmUpO3ZhciB4ZT1uZXcgQXJyYXkoMjkpO1YoeGUpO3ZhciBMZT1uZXcgQXJyYXkoMzApO1YoTGUpO3ZhciBPZSxqZSxXZSxGZT1mdW5jdGlvbihmdCxmbixobix3dCxYdCl7dGhpcy5zdGF0aWNfdHJlZT1mdCx0aGlzLmV4dHJhX2JpdHM9'@;
put 'Zm4sdGhpcy5leHRyYV9iYXNlPWhuLHRoaXMuZWxlbXM9d3QsdGhpcy5tYXhfbGVuZ3RoPVh0LHRoaXMuaGFzX3N0cmVlPWZ0JiZmdC5sZW5ndGh9LEtlPWZ1bmN0aW9uKGZ0LGZuKXt0aGlzLmR5bl90cmVlPWZ0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1mbn07ZnVuY3Rpb24g'@;
put 'WWUoZnQpe3JldHVybiBmdDwyNTY/ZGVbZnRdOmRlWzI1NisoZnQ+Pj43KV19ZnVuY3Rpb24gSmUoZnQsZm4pe2Z0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1JmZuLGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109Zm4+Pj44JjI1NX1mdW5jdGlvbiBsdChmdCxmbixobil7ZnQu'@;
put 'YmlfdmFsaWQ+Ry1obj8oZnQuYmlfYnVmfD1mbjw8ZnQuYmlfdmFsaWQmNjU1MzUsSmUoZnQsZnQuYmlfYnVmKSxmdC5iaV9idWY9Zm4+PkctZnQuYmlfdmFsaWQsZnQuYmlfdmFsaWQrPWhuLUcpOihmdC5iaV9idWZ8PWZuPDxmdC5iaV92YWxpZCY2NTUzNSxmdC5iaV92YWxpZCs9aG4pfWZ1'@;
put 'bmN0aW9uIFBlKGZ0LGZuLGhuKXtsdChmdCxoblsyKmZuXSxoblsyKmZuKzFdKX1mdW5jdGlvbiBiZShmdCxmbil7dmFyIGhuPTA7ZG97aG58PTEmZnQsZnQ+Pj49MSxobjw8PTF9d2hpbGUoLS1mbj4wKTtyZXR1cm4gaG4+Pj4xfWZ1bmN0aW9uIHFlKGZ0LGZuLGhuKXt2YXIgX3QsTnQsd3Q9'@;
put 'bmV3IEFycmF5KGNlKzEpLFh0PTA7Zm9yKF90PTE7X3Q8PWNlO190Kyspd3RbX3RdPVh0PVh0K2huW190LTFdPDwxO2ZvcihOdD0wO050PD1mbjtOdCsrKXt2YXIgbW49ZnRbMipOdCsxXTswIT09bW4mJihmdFsyKk50XT1iZSh3dFttbl0rKyxtbikpfX1mdW5jdGlvbiBVZShmdCl7dmFyIGZu'@;
put 'O2Zvcihmbj0wO2ZuPDI4NjtmbisrKWZ0LmR5bl9sdHJlZVsyKmZuXT0wO2Zvcihmbj0wO2ZuPDMwO2ZuKyspZnQuZHluX2R0cmVlWzIqZm5dPTA7Zm9yKGZuPTA7Zm48MTk7Zm4rKylmdC5ibF90cmVlWzIqZm5dPTA7ZnQuZHluX2x0cmVlWzUxMl09MSxmdC5vcHRfbGVuPWZ0LnN0YXRpY19s'@;
put 'ZW49MCxmdC5sYXN0X2xpdD1mdC5tYXRjaGVzPTB9ZnVuY3Rpb24gaHQoZnQpe2Z0LmJpX3ZhbGlkPjg/SmUoZnQsZnQuYmlfYnVmKTpmdC5iaV92YWxpZD4wJiYoZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT1mdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTB9ZnVuY3Rp'@;
put 'b24gRGUoZnQsZm4saG4sd3Qpe3ZhciBYdD0yKmZuLF90PTIqaG47cmV0dXJuIGZ0W1h0XTxmdFtfdF18fGZ0W1h0XT09PWZ0W190XSYmd3RbZm5dPD13dFtobl19ZnVuY3Rpb24gemUoZnQsZm4saG4pe2Zvcih2YXIgd3Q9ZnQuaGVhcFtobl0sWHQ9aG48PDE7WHQ8PWZ0LmhlYXBfbGVuJiYo'@;
put 'WHQ8ZnQuaGVhcF9sZW4mJkRlKGZuLGZ0LmhlYXBbWHQrMV0sZnQuaGVhcFtYdF0sZnQuZGVwdGgpJiZYdCsrLCFEZShmbix3dCxmdC5oZWFwW1h0XSxmdC5kZXB0aCkpOylmdC5oZWFwW2huXT1mdC5oZWFwW1h0XSxobj1YdCxYdDw8PTE7ZnQuaGVhcFtobl09d3R9ZnVuY3Rpb24gaXQoZnQs'@;
put 'Zm4saG4pe3ZhciB3dCxYdCxOdCxtbixfdD0wO2lmKDAhPT1mdC5sYXN0X2xpdClkb3t3dD1mdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKl90XTw8OHxmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKl90KzFdLFh0PWZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK190XSxfdCsrLDA9PT13dD9QZShm'@;
put 'dCxYdCxmbik6KFBlKGZ0LChOdD1mZVtYdF0pKzI1NisxLGZuKSwwIT09KG1uPUNbTnRdKSYmbHQoZnQsWHQtPXhlW050XSxtbiksUGUoZnQsTnQ9WWUoLS13dCksaG4pLDAhPT0obW49U1tOdF0pJiZsdChmdCx3dC09TGVbTnRdLG1uKSl9d2hpbGUoX3Q8ZnQubGFzdF9saXQpO1BlKGZ0LDI1'@;
put 'Nixmbil9ZnVuY3Rpb24gdXQoZnQsZm4pe3ZhciBOdCxtbixJdCxobj1mbi5keW5fdHJlZSx3dD1mbi5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsWHQ9Zm4uc3RhdF9kZXNjLmhhc19zdHJlZSxfdD1mbi5zdGF0X2Rlc2MuZWxlbXMscnQ9LTE7Zm9yKGZ0LmhlYXBfbGVuPTAsZnQuaGVhcF9tYXg9'@;
put 'NTczLE50PTA7TnQ8X3Q7TnQrKykwIT09aG5bMipOdF0/KGZ0LmhlYXBbKytmdC5oZWFwX2xlbl09cnQ9TnQsZnQuZGVwdGhbTnRdPTApOmhuWzIqTnQrMV09MDtmb3IoO2Z0LmhlYXBfbGVuPDI7KWhuWzIqKEl0PWZ0LmhlYXBbKytmdC5oZWFwX2xlbl09cnQ8Mj8rK3J0OjApXT0xLGZ0LmRl'@;
put 'cHRoW0l0XT0wLGZ0Lm9wdF9sZW4tLSxYdCYmKGZ0LnN0YXRpY19sZW4tPXd0WzIqSXQrMV0pO2Zvcihmbi5tYXhfY29kZT1ydCxOdD1mdC5oZWFwX2xlbj4+MTtOdD49MTtOdC0tKXplKGZ0LGhuLE50KTtJdD1fdDtkb3tOdD1mdC5oZWFwWzFdLGZ0LmhlYXBbMV09ZnQuaGVhcFtmdC5oZWFw'@;
put 'X2xlbi0tXSx6ZShmdCxobiwxKSxtbj1mdC5oZWFwWzFdLGZ0LmhlYXBbLS1mdC5oZWFwX21heF09TnQsZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1tbixoblsyKkl0XT1oblsyKk50XStoblsyKm1uXSxmdC5kZXB0aFtJdF09KGZ0LmRlcHRoW050XT49ZnQuZGVwdGhbbW5dP2Z0LmRlcHRoW050'@;
put 'XTpmdC5kZXB0aFttbl0pKzEsaG5bMipOdCsxXT1oblsyKm1uKzFdPUl0LGZ0LmhlYXBbMV09SXQrKyx6ZShmdCxobiwxKX13aGlsZShmdC5oZWFwX2xlbj49Mik7ZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1mdC5oZWFwWzFdLGZ1bmN0aW9uIFRlKGZ0LGZuKXt2YXIgSXQsSnQsRHQscHQsWXQs'@;
put 'SW4saG49Zm4uZHluX3RyZWUsd3Q9Zm4ubWF4X2NvZGUsWHQ9Zm4uc3RhdF9kZXNjLnN0YXRpY190cmVlLF90PWZuLnN0YXRfZGVzYy5oYXNfc3RyZWUsTnQ9Zm4uc3RhdF9kZXNjLmV4dHJhX2JpdHMsbW49Zm4uc3RhdF9kZXNjLmV4dHJhX2Jhc2UscnQ9Zm4uc3RhdF9kZXNjLm1heF9sZW5n'@;
put 'dGgsenQ9MDtmb3IocHQ9MDtwdDw9Y2U7cHQrKylmdC5ibF9jb3VudFtwdF09MDtmb3IoaG5bMipmdC5oZWFwW2Z0LmhlYXBfbWF4XSsxXT0wLEl0PWZ0LmhlYXBfbWF4KzE7SXQ8NTczO0l0KyspKHB0PWhuWzIqaG5bMiooSnQ9ZnQuaGVhcFtJdF0pKzFdKzFdKzEpPnJ0JiYocHQ9cnQsenQr'@;
put 'KyksaG5bMipKdCsxXT1wdCwhKEp0Pnd0KSYmKGZ0LmJsX2NvdW50W3B0XSsrLFl0PTAsSnQ+PW1uJiYoWXQ9TnRbSnQtbW5dKSxmdC5vcHRfbGVuKz0oSW49aG5bMipKdF0pKihwdCtZdCksX3QmJihmdC5zdGF0aWNfbGVuKz1JbiooWHRbMipKdCsxXStZdCkpKTtpZigwIT09enQpe2Rve2Zv'@;
put 'cihwdD1ydC0xOzA9PT1mdC5ibF9jb3VudFtwdF07KXB0LS07ZnQuYmxfY291bnRbcHRdLS0sZnQuYmxfY291bnRbcHQrMV0rPTIsZnQuYmxfY291bnRbcnRdLS0senQtPTJ9d2hpbGUoenQ+MCk7Zm9yKHB0PXJ0OzAhPT1wdDtwdC0tKWZvcihKdD1mdC5ibF9jb3VudFtwdF07MCE9PUp0Oykh'@;
put 'KChEdD1mdC5oZWFwWy0tSXRdKT53dCkmJihoblsyKkR0KzFdIT09cHQmJihmdC5vcHRfbGVuKz0ocHQtaG5bMipEdCsxXSkqaG5bMipEdF0saG5bMipEdCsxXT1wdCksSnQtLSl9fShmdCxmbikscWUoaG4scnQsZnQuYmxfY291bnQpfWZ1bmN0aW9uIE10KGZ0LGZuLGhuKXt2YXIgd3QsX3Qs'@;
put 'WHQ9LTEsTnQ9Zm5bMV0sbW49MCxydD03LEl0PTQ7Zm9yKDA9PT1OdCYmKHJ0PTEzOCxJdD0zKSxmblsyKihobisxKSsxXT02NTUzNSx3dD0wO3d0PD1objt3dCsrKV90PU50LE50PWZuWzIqKHd0KzEpKzFdLCEoKyttbjxydCYmX3Q9PT1OdCkmJihtbjxJdD9mdC5ibF90cmVlWzIqX3RdKz1t'@;
put 'bjowIT09X3Q/KF90IT09WHQmJmZ0LmJsX3RyZWVbMipfdF0rKyxmdC5ibF90cmVlWzMyXSsrKTptbjw9MTA/ZnQuYmxfdHJlZVszNF0rKzpmdC5ibF90cmVlWzM2XSsrLG1uPTAsWHQ9X3QsMD09PU50PyhydD0xMzgsSXQ9Myk6X3Q9PT1OdD8ocnQ9NixJdD0zKToocnQ9NyxJdD00KSl9ZnVu'@;
put 'Y3Rpb24gSHQoZnQsZm4saG4pe3ZhciB3dCxfdCxYdD0tMSxOdD1mblsxXSxtbj0wLHJ0PTcsSXQ9NDtmb3IoMD09PU50JiYocnQ9MTM4LEl0PTMpLHd0PTA7d3Q8PWhuO3d0KyspaWYoX3Q9TnQsTnQ9Zm5bMiood3QrMSkrMV0sISgrK21uPHJ0JiZfdD09PU50KSl7aWYobW48SXQpZG97UGUo'@;
put 'ZnQsX3QsZnQuYmxfdHJlZSl9d2hpbGUoMCE9LS1tbik7ZWxzZSAwIT09X3Q/KF90IT09WHQmJihQZShmdCxfdCxmdC5ibF90cmVlKSxtbi0tKSxQZShmdCwxNixmdC5ibF90cmVlKSxsdChmdCxtbi0zLDIpKTptbjw9MTA/KFBlKGZ0LDE3LGZ0LmJsX3RyZWUpLGx0KGZ0LG1uLTMsMykpOihQ'@;
put 'ZShmdCwxOCxmdC5ibF90cmVlKSxsdChmdCxtbi0xMSw3KSk7bW49MCxYdD1fdCwwPT09TnQ/KHJ0PTEzOCxJdD0zKTpfdD09PU50PyhydD02LEl0PTMpOihydD03LEl0PTQpfX12YXIgVXQ9ITE7ZnVuY3Rpb24gV24oZnQsZm4saG4sd3Qpe2x0KGZ0LDArKHd0PzE6MCksMyksZnVuY3Rpb24g'@;
put 'TWUoZnQsZm4saG4sd3Qpe2h0KGZ0KSx3dCYmKEplKGZ0LGhuKSxKZShmdCx+aG4pKSxLLmFycmF5U2V0KGZ0LnBlbmRpbmdfYnVmLGZ0LndpbmRvdyxmbixobixmdC5wZW5kaW5nKSxmdC5wZW5kaW5nKz1obn0oZnQsZm4saG4sITApfXouX3RyX2luaXQ9ZnVuY3Rpb24gYm4oZnQpe1V0fHwo'@;
put 'ZnVuY3Rpb24gWGUoKXt2YXIgZnQsZm4saG4sd3QsWHQsX3Q9bmV3IEFycmF5KGNlKzEpO2Zvcihobj0wLHd0PTA7d3Q8Mjg7d3QrKylmb3IoeGVbd3RdPWhuLGZ0PTA7ZnQ8MTw8Q1t3dF07ZnQrKylmZVtobisrXT13dDtmb3IoZmVbaG4tMV09d3QsWHQ9MCx3dD0wO3d0PDE2O3d0KyspZm9y'@;
put 'KExlW3d0XT1YdCxmdD0wO2Z0PDE8PFNbd3RdO2Z0KyspZGVbWHQrK109d3Q7Zm9yKFh0Pj49Nzt3dDwzMDt3dCsrKWZvcihMZVt3dF09WHQ8PDcsZnQ9MDtmdDwxPDxTW3d0XS03O2Z0KyspZGVbMjU2K1h0KytdPXd0O2Zvcihmbj0wO2ZuPD1jZTtmbisrKV90W2ZuXT0wO2ZvcihmdD0wO2Z0'@;
put 'PD0xNDM7KUpbMipmdCsxXT04LGZ0KyssX3RbOF0rKztmb3IoO2Z0PD0yNTU7KUpbMipmdCsxXT05LGZ0KyssX3RbOV0rKztmb3IoO2Z0PD0yNzk7KUpbMipmdCsxXT03LGZ0KyssX3RbN10rKztmb3IoO2Z0PD0yODc7KUpbMipmdCsxXT04LGZ0KyssX3RbOF0rKztmb3IocWUoSiwyODcsX3Qp'@;
put 'LGZ0PTA7ZnQ8MzA7ZnQrKyluZVsyKmZ0KzFdPTUsbmVbMipmdF09YmUoZnQsNSk7T2U9bmV3IEZlKEosQywyNTcsMjg2LGNlKSxqZT1uZXcgRmUobmUsUywwLDMwLGNlKSxXZT1uZXcgRmUobmV3IEFycmF5KDApLHYsMCwxOSw3KX0oKSxVdD0hMCksZnQubF9kZXNjPW5ldyBLZShmdC5keW5f'@;
put 'bHRyZWUsT2UpLGZ0LmRfZGVzYz1uZXcgS2UoZnQuZHluX2R0cmVlLGplKSxmdC5ibF9kZXNjPW5ldyBLZShmdC5ibF90cmVlLFdlKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wLFVlKGZ0KX0sei5fdHJfc3RvcmVkX2Jsb2NrPVduLHouX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uICRuKGZ0'@;
put 'LGZuLGhuLHd0KXt2YXIgWHQsX3QsTnQ9MDtmdC5sZXZlbD4wPygyPT09ZnQuc3RybS5kYXRhX3R5cGUmJihmdC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbiBDbihmdCl7dmFyIGhuLGZuPTQwOTM2MjQ0NDc7Zm9yKGhuPTA7aG48PTMxO2huKyssZm4+Pj49MSlpZigxJmZuJiYwIT09ZnQuZHlu'@;
put 'X2x0cmVlWzIqaG5dKXJldHVybiAwO2lmKDAhPT1mdC5keW5fbHRyZWVbMThdfHwwIT09ZnQuZHluX2x0cmVlWzIwXXx8MCE9PWZ0LmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKGhuPTMyO2huPDI1NjtobisrKWlmKDAhPT1mdC5keW5fbHRyZWVbMipobl0pcmV0dXJuIDE7cmV0dXJuIDB9'@;
put 'KGZ0KSksdXQoZnQsZnQubF9kZXNjKSx1dChmdCxmdC5kX2Rlc2MpLE50PWZ1bmN0aW9uIFB0KGZ0KXt2YXIgZm47Zm9yKE10KGZ0LGZ0LmR5bl9sdHJlZSxmdC5sX2Rlc2MubWF4X2NvZGUpLE10KGZ0LGZ0LmR5bl9kdHJlZSxmdC5kX2Rlc2MubWF4X2NvZGUpLHV0KGZ0LGZ0LmJsX2Rlc2Mp'@;
put 'LGZuPTE4O2ZuPj0zJiYwPT09ZnQuYmxfdHJlZVsyKnBbZm5dKzFdO2ZuLS0pO3JldHVybiBmdC5vcHRfbGVuKz0zKihmbisxKSs1KzUrNCxmbn0oZnQpLChfdD1mdC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oWHQ9ZnQub3B0X2xlbiszKzc+Pj4zKSYmKFh0PV90KSk6WHQ9X3Q9aG4rNSxobis0'@;
put 'PD1YdCYmLTEhPT1mbj9XbihmdCxmbixobix3dCk6ND09PWZ0LnN0cmF0ZWd5fHxfdD09PVh0PyhsdChmdCwyKyh3dD8xOjApLDMpLGl0KGZ0LEosbmUpKToobHQoZnQsNCsod3Q/MTowKSwzKSxmdW5jdGlvbiBvbihmdCxmbixobix3dCl7dmFyIFh0O2ZvcihsdChmdCxmbi0yNTcsNSksbHQo'@;
put 'ZnQsaG4tMSw1KSxsdChmdCx3dC00LDQpLFh0PTA7WHQ8d3Q7WHQrKylsdChmdCxmdC5ibF90cmVlWzIqcFtYdF0rMV0sMyk7SHQoZnQsZnQuZHluX2x0cmVlLGZuLTEpLEh0KGZ0LGZ0LmR5bl9kdHJlZSxobi0xKX0oZnQsZnQubF9kZXNjLm1heF9jb2RlKzEsZnQuZF9kZXNjLm1heF9jb2Rl'@;
put 'KzEsTnQrMSksaXQoZnQsZnQuZHluX2x0cmVlLGZ0LmR5bl9kdHJlZSkpLFVlKGZ0KSx3dCYmaHQoZnQpfSx6Ll90cl90YWxseT1mdW5jdGlvbiBIbihmdCxmbixobil7cmV0dXJuIGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXRdPWZuPj4+OCYyNTUsZnQucGVuZGluZ19i'@;
put 'dWZbZnQuZF9idWYrMipmdC5sYXN0X2xpdCsxXT0yNTUmZm4sZnQucGVuZGluZ19idWZbZnQubF9idWYrZnQubGFzdF9saXRdPTI1NSZobixmdC5sYXN0X2xpdCsrLDA9PT1mbj9mdC5keW5fbHRyZWVbMipobl0rKzooZnQubWF0Y2hlcysrLGZuLS0sZnQuZHluX2x0cmVlWzIqKGZlW2huXSsy'@;
put 'NTYrMSldKyssZnQuZHluX2R0cmVlWzIqWWUoZm4pXSsrKSxmdC5sYXN0X2xpdD09PWZ0LmxpdF9idWZzaXplLTF9LHouX3RyX2FsaWduPWZ1bmN0aW9uIGVuKGZ0KXtsdChmdCwyLDMpLFBlKGZ0LDI1NixKKSxmdW5jdGlvbiBBZShmdCl7MTY9PT1mdC5iaV92YWxpZD8oSmUoZnQsZnQuYmlf'@;
put 'YnVmKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wKTpmdC5iaV92YWxpZD49OCYmKGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1JmZ0LmJpX2J1ZixmdC5iaV9idWY+Pj04LGZ0LmJpX3ZhbGlkLT04KX0oZnQpfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzk6W2Z1bmN0aW9u'@;
put 'KE8sUix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPWZ1bmN0aW9uIEsoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90'@;
put 'YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0se31dfSx7fSxbOV0pKDkpfSl9LDgzNDE3OihhdCxJZSxGKT0+eyFmdW5jdGlvbiB4KE0pe00udmVyc2lvbj0iMS4yMDIxMTEyMi4xIjt2YXIgTz0xMjAwLFI9MTI1Mjt0'@;
put 'eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0YWJsZT1GKDgwNzg4KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPUYoODA3ODgpKSk7Zm9yKHZhciB6PVs4NzQsOTMyLDkzNiw5NDksOTUwLDFlNF0sSz0wO0s8PTg7KytLKXoucHVzaCgx'@;
put 'MjUwK0spO3ZhciBJPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1LDE3ODoxMjU2LDE4NjoxMjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4OjEyNTAs'@;
put 'MjU1OjEyNTIsNjk6Njk2OX0saz1mdW5jdGlvbih5KXstMSE9ei5pbmRleE9mKHkpJiYoUj1JWzBdPXkpfSxqPWZ1bmN0aW9uKHkpe089eSxrKHkpfTtmdW5jdGlvbiBWKCl7aigxMjAwKSxmdW5jdGlvbiBFKCl7aygxMjUyKX0oKX1mdW5jdGlvbiBCKHkpe2Zvcih2YXIgUD1bXSxMPTAsUT15'@;
put 'Lmxlbmd0aDtMPFE7KytMKVBbTF09eS5jaGFyQ29kZUF0KEwpO3JldHVybiBQfXZhciBVPWZ1bmN0aW9uKHkpe3ZhciBQPXkuY2hhckNvZGVBdCgwKSxMPXkuY2hhckNvZGVBdCgxKTtyZXR1cm4gMjU1PT1QJiYyNTQ9PUw/ZnVuY3Rpb24gWSh5KXtmb3IodmFyIFA9W10sTD0wO0w8eS5sZW5n'@;
put 'dGg+PjE7KytMKVBbTF09U3RyaW5nLmZyb21DaGFyQ29kZSh5LmNoYXJDb2RlQXQoMipMKSsoeS5jaGFyQ29kZUF0KDIqTCsxKTw8OCkpO3JldHVybiBQLmpvaW4oIiIpfSh5LnNsaWNlKDIpKToyNTQ9PVAmJjI1NT09TD9mdW5jdGlvbiBYKHkpe2Zvcih2YXIgUD1bXSxMPTA7TDx5Lmxlbmd0'@;
put 'aD4+MTsrK0wpUFtMXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHkuY2hhckNvZGVBdCgyKkwrMSkrKHkuY2hhckNvZGVBdCgyKkwpPDw4KSk7cmV0dXJuIFAuam9pbigiIil9KHkuc2xpY2UoMikpOjY1Mjc5PT1QP3kuc2xpY2UoMSk6eX0scT1mdW5jdGlvbihQKXtyZXR1cm4gU3RyaW5nLmZyb21D'@;
put 'aGFyQ29kZShQKX0sZWU9ZnVuY3Rpb24oUCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUCl9O3R5cGVvZiBjcHRhYmxlPCJ1IiYmKGo9ZnVuY3Rpb24oeSl7Tz15LGsoeSl9LFU9ZnVuY3Rpb24oeSl7cmV0dXJuIDI1NT09PXkuY2hhckNvZGVBdCgwKSYmMjU0PT09eS5jaGFyQ29kZUF0'@;
put 'KDEpP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsQih5LnNsaWNlKDIpKSk6eX0scT1mdW5jdGlvbihQKXtyZXR1cm4gMTIwMD09PU8/U3RyaW5nLmZyb21DaGFyQ29kZShQKTpjcHRhYmxlLnV0aWxzLmRlY29kZShPLFsyNTUmUCxQPj44XSlbMF19LGVlPWZ1bmN0aW9uKFApe3JldHVybiBj'@;
put 'cHRhYmxlLnV0aWxzLmRlY29kZShSLFtQXSlbMF19KTt2YXIgUCx0ZT1udWxsLHNlPShQPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIse2VuY29kZTpmdW5jdGlvbihMKXtmb3IodmFyIFE9IiIscmU9MCxwZT0wLF9l'@;
put 'PTAsdmU9MCxTZT0wLEhlPTAsQmU9MCxHZT0wO0dlPEwubGVuZ3RoOyl2ZT0ocmU9TC5jaGFyQ29kZUF0KEdlKyspKT4+MixTZT0oMyZyZSk8PDR8KHBlPUwuY2hhckNvZGVBdChHZSsrKSk+PjQsSGU9KDE1JnBlKTw8MnwoX2U9TC5jaGFyQ29kZUF0KEdlKyspKT4+NixCZT02MyZfZSxpc05h'@;
put 'TihwZSk/SGU9QmU9NjQ6aXNOYU4oX2UpJiYoQmU9NjQpLFErPVAuY2hhckF0KHZlKStQLmNoYXJBdChTZSkrUC5jaGFyQXQoSGUpK1AuY2hhckF0KEJlKTtyZXR1cm4gUX0sZGVjb2RlOmZ1bmN0aW9uKFEpe3ZhciByZT0iIixTZT0wLEhlPTAsQmU9MCxHZT0wO1E9US5yZXBsYWNlKC9bXlx3'@;
put 'XCtcL1w9XS9nLCIiKTtmb3IodmFyIG50PTA7bnQ8US5sZW5ndGg7KVNlPVAuaW5kZXhPZihRLmNoYXJBdChudCsrKSksSGU9UC5pbmRleE9mKFEuY2hhckF0KG50KyspKSxyZSs9U3RyaW5nLmZyb21DaGFyQ29kZShTZTw8MnxIZT4+NCksNjQhPT0oQmU9UC5pbmRleE9mKFEuY2hhckF0KG50'@;
put 'KyspKSkmJihyZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmSGUpPDw0fEJlPj4yKSksNjQhPT0oR2U9UC5pbmRleE9mKFEuY2hhckF0KG50KyspKSkmJihyZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMyZCZSk8PDZ8R2UpKTtyZXR1cm4gcmV9fSksaGU9dHlwZW9mIEJ1ZmZlcjwidSImJnR5'@;
put 'cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lvbnMubm9kZSx1ZT1mdW5jdGlvbigpe307aWYodHlwZW9mIEJ1ZmZlcjwidSIpe3ZhciBjZT0hQnVmZmVyLmZyb207aWYoIWNlKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIp'@;
put 'fWNhdGNoe2NlPSEwfXVlPWNlP2Z1bmN0aW9uKHksUCl7cmV0dXJuIFA/bmV3IEJ1ZmZlcih5LFApOm5ldyBCdWZmZXIoeSl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2N8fChCdWZmZXIuYWxsb2M9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBCdWZmZXIoeSl9KSxCdWZm'@;
put 'ZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBCdWZmZXIoeSl9KX1mdW5jdGlvbiBHKHkpe3JldHVybiBoZT9CdWZmZXIuYWxsb2MoeSk6bmV3IEFycmF5KHkpfWZ1bmN0aW9uIGIoeSl7cmV0dXJuIGhlP0J1ZmZlci5hbGxvY1Vuc2Fm'@;
put 'ZSh5KTpuZXcgQXJyYXkoeSl9dmFyIEQ9ZnVuY3Rpb24oUCl7cmV0dXJuIGhlP3VlKFAsImJpbmFyeSIpOlAuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihMKXtyZXR1cm4gMjU1JkwuY2hhckNvZGVBdCgwKX0pfTtmdW5jdGlvbiBIKHkpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpcmV0dXJu'@;
put 'IEQoeSk7Zm9yKHZhciBQPW5ldyBBcnJheUJ1ZmZlcih5Lmxlbmd0aCksTD1uZXcgVWludDhBcnJheShQKSxRPTA7USE9eS5sZW5ndGg7KytRKUxbUV09MjU1JnkuY2hhckNvZGVBdChRKTtyZXR1cm4gUH1mdW5jdGlvbiBOKHkpe2lmKEFycmF5LmlzQXJyYXkoeSkpcmV0dXJuIHkubWFwKGZ1'@;
put 'bmN0aW9uKFEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFEpfSkuam9pbigiIik7Zm9yKHZhciBQPVtdLEw9MDtMPHkubGVuZ3RoOysrTClQW0xdPVN0cmluZy5mcm9tQ2hhckNvZGUoeVtMXSk7cmV0dXJuIFAuam9pbigiIil9ZnVuY3Rpb24gQyh5KXtpZih0eXBlb2YgQXJyYXlCdWZm'@;
put 'ZXI+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtpZih5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIEMobmV3IFVpbnQ4QXJyYXkoeSkpO2Zvcih2YXIgUD1uZXcgQXJyYXkoeS5sZW5ndGgpLEw9MDtMPHkubGVuZ3RoOysrTClQW0xdPXlbTF07cmV0dXJuIFB9dmFy'@;
put 'IFM9ZnVuY3Rpb24oeSl7dmFyIFA9W107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihMKXtBcnJheS5pc0FycmF5KEwpP1A9UC5jb25jYXQoTCk6KHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkwgaW5zdGFu'@;
put 'Y2VvZiBBcnJheUJ1ZmZlcikmJihQPVAuY29uY2F0KEMoTCkpKX0pLFB9LHY9L1x1MDAwMC9nLHA9L1tcdTAwMDEtXHUwMDA2XS9nLHc9e30sSj1mdW5jdGlvbihQKXtmdW5jdGlvbiBMKEt0KXtmb3IodmFyIGduPSIiLExuPUt0Lmxlbmd0aC0xO0xuPj0wOylnbis9S3QuY2hhckF0KExuLS0p'@;
put 'O3JldHVybiBnbn1mdW5jdGlvbiBRKEt0LGduKXtmb3IodmFyIExuPSIiO0xuLmxlbmd0aDxnbjspTG4rPUt0O3JldHVybiBMbn1mdW5jdGlvbiByZShLdCxnbil7dmFyIExuPSIiK0t0O3JldHVybiBMbi5sZW5ndGg+PWduP0xuOlEoIjAiLGduLUxuLmxlbmd0aCkrTG59ZnVuY3Rpb24gcGUo'@;
put 'S3QsZ24pe3ZhciBMbj0iIitLdDtyZXR1cm4gTG4ubGVuZ3RoPj1nbj9MbjpRKCIgIixnbi1Mbi5sZW5ndGgpK0xufWZ1bmN0aW9uIF9lKEt0LGduKXt2YXIgTG49IiIrS3Q7cmV0dXJuIExuLmxlbmd0aD49Z24/TG46TG4rUSgiICIsZ24tTG4ubGVuZ3RoKX1QLnZlcnNpb249IjEuMjAyMTA3'@;
put 'MjYuMSI7dmFyIEhlPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIEJlKEt0LGduKXtyZXR1cm4gS3Q+SGV8fEt0PC1IZT9mdW5jdGlvbiB2ZShLdCxnbil7dmFyIExuPSIiK01hdGgucm91bmQoS3QpO3JldHVybiBMbi5sZW5ndGg+PWduP0xuOlEoIjAiLGduLUxuLmxlbmd0aCkrTG59KEt0LGdu'@;
put 'KTpmdW5jdGlvbiBTZShLdCxnbil7dmFyIExuPSIiK0t0O3JldHVybiBMbi5sZW5ndGg+PWduP0xuOlEoIjAiLGduLUxuLmxlbmd0aCkrTG59KE1hdGgucm91bmQoS3QpLGduKX1mdW5jdGlvbiBHZShLdCxnbil7cmV0dXJuIEt0Lmxlbmd0aD49NysoZ249Z258fDApJiYxMDM9PSgzMnxLdC5j'@;
put 'aGFyQ29kZUF0KGduKSkmJjEwMT09KDMyfEt0LmNoYXJDb2RlQXQoZ24rMSkpJiYxMTA9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzIpKSYmMTAxPT0oMzJ8S3QuY2hhckNvZGVBdChnbiszKSkmJjExND09KDMyfEt0LmNoYXJDb2RlQXQoZ24rNCkpJiY5Nz09KDMyfEt0LmNoYXJDb2RlQXQoZ24r'@;
put 'NSkpJiYxMDg9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzYpKX1mdW5jdGlvbiBudChLdCl7Zm9yKHZhciBnbj1bXSxMbj1PYmplY3Qua2V5cyhLdCksV3I9MDtXciE9PUxuLmxlbmd0aDsrK1dyKWduW0t0W0xuW1dyXV1dPUxuW1dyXTtyZXR1cm4gZ259dmFyIGR0PVtbIlN1biIsIlN1bmRheSJd'@;
put 'LFsiTW9uIiwiTW9uZGF5Il0sWyJUdWUiLCJUdWVzZGF5Il0sWyJXZWQiLCJXZWRuZXNkYXkiXSxbIlRodSIsIlRodXJzZGF5Il0sWyJGcmkiLCJGcmlkYXkiXSxbIlNhdCIsIlNhdHVyZGF5Il1dLEN0PVtbIkoiLCJKYW4iLCJKYW51YXJ5Il0sWyJGIiwiRmViIiwiRmVicnVhcnkiXSxbIk0i'@;
put 'LCJNYXIiLCJNYXJjaCJdLFsiQSIsIkFwciIsIkFwcmlsIl0sWyJNIiwiTWF5IiwiTWF5Il0sWyJKIiwiSnVuIiwiSnVuZSJdLFsiSiIsIkp1bCIsIkp1bHkiXSxbIkEiLCJBdWciLCJBdWd1c3QiXSxbIlMiLCJTZXAiLCJTZXB0ZW1iZXIiXSxbIk8iLCJPY3QiLCJPY3RvYmVyIl0sWyJOIiwi'@;
put 'Tm92IiwiTm92ZW1iZXIiXSxbIkQiLCJEZWMiLCJEZWNlbWJlciJdXTtmdW5jdGlvbiBjdChLdCl7S3RbMF09IkdlbmVyYWwiLEt0WzFdPSIwIixLdFsyXT0iMC4wMCIsS3RbM109IiMsIyMwIixLdFs0XT0iIywjIzAuMDAiLEt0WzldPSIwJSIsS3RbMTBdPSIwLjAwJSIsS3RbMTFdPSIwLjAw'@;
put 'RSswMCIsS3RbMTJdPSIjID8vPyIsS3RbMTNdPSIjID8/Lz8/IixLdFsxNF09Im0vZC95eSIsS3RbMTVdPSJkLW1tbS15eSIsS3RbMTZdPSJkLW1tbSIsS3RbMTddPSJtbW0teXkiLEt0WzE4XT0iaDptbSBBTS9QTSIsS3RbMTldPSJoOm1tOnNzIEFNL1BNIixLdFsyMF09Img6bW0iLEt0WzIx'@;
put 'XT0iaDptbTpzcyIsS3RbMjJdPSJtL2QveXkgaDptbSIsS3RbMzddPSIjLCMjMCA7KCMsIyMwKSIsS3RbMzhdPSIjLCMjMCA7W1JlZF0oIywjIzApIixLdFszOV09IiMsIyMwLjAwOygjLCMjMC4wMCkiLEt0WzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixLdFs0NV09Im1tOnNzIixL'@;
put 'dFs0Nl09IltoXTptbTpzcyIsS3RbNDddPSJtbXNzLjAiLEt0WzQ4XT0iIyMwLjBFKzAiLEt0WzQ5XT0iQCIsS3RbNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsU24oS3QpfXZhciBidD17fTtjdChidCk7dmFyIEZ0PVtd'@;
put 'LEV0PTA7Zm9yKEV0PTU7RXQ8PTg7KytFdClGdFtFdF09MzIrRXQ7Zm9yKEV0PTIzO0V0PD0yNjsrK0V0KUZ0W0V0XT0wO2ZvcihFdD0yNztFdDw9MzE7KytFdClGdFtFdF09MTQ7Zm9yKEV0PTUwO0V0PD01ODsrK0V0KUZ0W0V0XT0xNDtmb3IoRXQ9NTk7RXQ8PTYyOysrRXQpRnRbRXRdPUV0'@;
put 'LTU4O2ZvcihFdD02NztFdDw9Njg7KytFdClGdFtFdF09RXQtNTg7Zm9yKEV0PTcyO0V0PD03NTsrK0V0KUZ0W0V0XT1FdC01ODtmb3IoRXQ9Njc7RXQ8PTY4OysrRXQpRnRbRXRdPUV0LTU3O2ZvcihFdD03NjtFdDw9Nzg7KytFdClGdFtFdF09RXQtNTY7Zm9yKEV0PTc5O0V0PD04MTsrK0V0'@;
put 'KUZ0W0V0XT1FdC0zNDt2YXIgVHQ9W107ZnVuY3Rpb24gWnQoS3QsZ24sTG4pe2Zvcih2YXIgV3I9S3Q8MD8tMToxLFhuPUt0KldyLGVpPTAsaXI9MSxyaT0wLG1vPTEsaWk9MCx6aT0wLEpyPU1hdGguZmxvb3IoWG4pO2lpPGduJiYocmk9KEpyPU1hdGguZmxvb3IoWG4pKSppcitlaSx6aT1K'@;
put 'cippaSttbywhKFhuLUpyPDVlLTgpKTspWG49MS8oWG4tSnIpLGVpPWlyLGlyPXJpLG1vPWlpLGlpPXppO2lmKHppPmduJiYoaWk+Z24/KHppPW1vLHJpPWVpKTooemk9aWkscmk9aXIpKSwhTG4pcmV0dXJuWzAsV3IqcmksemldO3ZhciB3cz1NYXRoLmZsb29yKFdyKnJpL3ppKTtyZXR1cm5b'@;
put 'd3MsV3Iqcmktd3MqemksemldfWZ1bmN0aW9uIHBuKEt0LGduLExuKXtpZihLdD4yOTU4NDY1fHxLdDwwKXJldHVybiBudWxsO3ZhciBXcj0wfEt0LFhuPU1hdGguZmxvb3IoODY0MDAqKEt0LVdyKSksZWk9MCxpcj1bXSxyaT17RDpXcixUOlhuLHU6ODY0MDAqKEt0LVdyKS1Ybix5OjAsbTow'@;
put 'LGQ6MCxIOjAsTTowLFM6MCxxOjB9O2lmKE1hdGguYWJzKHJpLnUpPDFlLTYmJihyaS51PTApLGduJiZnbi5kYXRlMTkwNCYmKFdyKz0xNDYyKSxyaS51Pi45OTk5JiYocmkudT0wLDg2NDAwPT0rK1huJiYocmkuVD1Ybj0wLCsrV3IsKytyaS5EKSksNjA9PT1Xcilpcj1Mbj9bMTMxNywxMCwy'@;
put 'OV06WzE5MDAsMiwyOV0sZWk9MztlbHNlIGlmKDA9PT1Xcilpcj1Mbj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLGVpPTY7ZWxzZXtXcj42MCYmLS1Xcjt2YXIgbW89bmV3IERhdGUoMTkwMCwwLDEpO21vLnNldERhdGUobW8uZ2V0RGF0ZSgpK1dyLTEpLGlyPVttby5nZXRGdWxsWWVhcigpLG1v'@;
put 'LmdldE1vbnRoKCkrMSxtby5nZXREYXRlKCldLGVpPW1vLmdldERheSgpLFdyPDYwJiYoZWk9KGVpKzYpJTcpLExuJiYoZWk9ZnVuY3Rpb24gX28oS3QsZ24pe2duWzBdLT01ODE7dmFyIExuPUt0LmdldERheSgpO3JldHVybiBLdDw2MCYmKExuPShMbis2KSU3KSxMbn0obW8saXIpKX1yZXR1'@;
put 'cm4gcmkueT1pclswXSxyaS5tPWlyWzFdLHJpLmQ9aXJbMl0scmkuUz1YbiU2MCxYbj1NYXRoLmZsb29yKFhuLzYwKSxyaS5NPVhuJTYwLFhuPU1hdGguZmxvb3IoWG4vNjApLHJpLkg9WG4scmkucT1laSxyaX1UdFs1XT1UdFs2M109JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLFR0WzZd'@;
put 'PVR0WzY0XT0nIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyxUdFs3XT1UdFs2NV09JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLFR0WzhdPVR0WzY2XT0nIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxUdFs0MV09J18oKiAjLCMjMF8pO18oKiBc'@;
put 'XCgjLCMjMFxcKTtfKCogIi0iXyk7XyhAXyknLFR0WzQyXT0nXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsVHRbNDNdPSdfKCogIywjIzAuMDBfKTtfKCogXFwoIywjIzAuMDBcXCk7XygqICItIj8/Xyk7XyhAXyknLFR0WzQ0XT0nXygiJCIq'@;
put 'ICMsIyMwLjAwXyk7XygiJCIqIFxcKCMsIyMwLjAwXFwpO18oIiQiKiAiLSI/P18pO18oQF8pJyxQLnBhcnNlX2RhdGVfY29kZT1wbjt2YXIgS249bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksdW49S24uZ2V0VGltZSgpLHFuPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiB6'@;
put 'bihLdCxnbil7dmFyIExuPUt0LmdldFRpbWUoKTtyZXR1cm4gZ24/TG4tPTEyNjIzMDRlNTpLdD49cW4mJihMbis9ODY0ZTUpLChMbi0odW4rNmU0KihLdC5nZXRUaW1lem9uZU9mZnNldCgpLUtuLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9dmFyIGtuPSIiLGVyPXsiZW4tdXMiOnt5'@;
put 'OiJ5IixkOiJkIiwiLCI6IiwiLCIuIjoiLiIsZGF0ZToiXy8ifSwiZGUtZGUiOnt5OiJqIixkOiJ0IiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy4ifSwiaXQtaXQiOnt5OiJ5IixkOiJkIiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy8ifX0sdHI9ZXJba24udG9Mb3dlckNhc2UoKV18fGVyWyJl'@;
put 'bi11cyJdLFpuPW50KHRyKSxWcj0iJCIsb2k9IiIsUXI9IiwiLHVyPSIuIixBbj0iLyI7ZnVuY3Rpb24gU24oS3Qpe3N3aXRjaCgoa258fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpLdFsyN109IlskLTQwNF1lL20vZCIsS3RbMjhdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgi'@;
put 'ZCJcdTY1ZTUiJyxLdFsyOV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMwXT0nbSIvImQiLyJ5eScsS3RbMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMyXT0naGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzMzXT0naGgiXHU2NjQyIm1t'@;
put 'Ilx1NTIwNiJzcyJcdTc5ZDIiJyxLdFszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM2XT0iWyQtNDA0XWUvbS9kIixL'@;
put 'dFs1MF09IlskLTQwNF1lL20vZCIsS3RbNTFdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1Ml09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzUzXT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIi'@;
put 'bW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzU0XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFs1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQy'@;
put 'Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFs1N109IlskLTQwNF1lL20vZCIsS3RbNThdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlInpoLWNuIjpLdFsyN109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbMjhdPSdtIlx1NjcwOCJkIlx1NjVlNSIn'@;
put 'LEt0WzI5XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMF09J20iLSJkIi0ieXknLEt0WzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMl09J2giXHU2NWY2Im1tIlx1NTIwNiInLEt0WzMzXT0naCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM0XT0n'@;
put 'XHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxLdFszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM2XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1MF09J3l5eXkiXHU1ZTc0Im0i'@;
put 'XHU2NzA4IicsS3RbNTFdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1M109J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTRdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVm'@;
put 'NiJtbSJcdTUyMDYiJyxLdFs1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzU3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1OF09J20iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJqYS1qcCI6S3RbMjddPSdb'@;
put 'JC00MTFdZ2UiLiJtIi4iZCcsS3RbMjhdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFsyOV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMwXT0nbSIvImQiLyJ5eScsS3RbMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1'@;
put 'NjVlNSInLEt0WzMyXT0naCJcdTY2NDIibW0iXHU1MjA2IicsS3RbMzNdPSdoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbMzRdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzM1XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszNl09J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1'@;
put 'MF09J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1MV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1M109J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTRdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgi'@;
put 'ZCJcdTY1ZTUiJyxLdFs1NV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTZdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU3XT0nWyQtNDExXWdlIi4ibSIuImQnLEt0WzU4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJrby1rciI6S3Rb'@;
put 'MjddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxLdFsyOF09Im1tLWRkIixLdFsyOV09Im1tLWRkIixLdFszMF09Im1tLWRkLXl5IixLdFszMV09J3l5eXkiXHViMTQ0IiBtbSJcdWM2ZDQiIGRkIlx1Yzc3YyInLEt0WzMyXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCInLEt0'@;
put 'WzMzXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCIgc3MiXHVjZDA4IicsS3RbMzRdPSJ5eXl5LW1tLWRkIixLdFszNV09Inl5eXktbW0tZGQiLEt0WzM2XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3RbNTBdPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUi'@;
put 'JyxLdFs1MV09Im1tLWRkIixLdFs1Ml09Inl5eXktbW0tZGQiLEt0WzUzXT0ieXl5eS1tbS1kZCIsS3RbNTRdPSJtbS1kZCIsS3RbNTVdPSJ5eXl5LW1tLWRkIixLdFs1Nl09Inl5eXktbW0tZGQiLEt0WzU3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3RbNThdPSJt'@;
put 'bS1kZCI7YnJlYWs7Y2FzZSJ0aC10aCI6S3RbNTldPScidCIwJyxLdFs2MF09JyJ0IjAuMDAnLEt0WzYxXT0nInQiIywjIzAnLEt0WzYyXT0nInQiIywjIzAuMDAnLEt0WzY3XT0idDAlIixLdFs2OF09InQwLjAwJSIsS3RbNjldPSJ0IyA/Lz8iLEt0WzcwXT0idCMgPz8vPz8iLEt0WzcxXT0n'@;
put 'XHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiJyxLdFs3Ml09J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsS3RbNzNdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQnLEt0Wzc0XT0nXHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUw'@;
put 'ZTFiXHUwZTFiJyxLdFs3NV09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOScsS3RbNzZdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0Wzc3XT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiIFx1MGUwYSI6Ilx1MGUxOVx1MGUxOScsS3Rb'@;
put 'NzhdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0Wzc5XT0nW1x1MGUwYV1cdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0WzgwXT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3LjAnLEt0WzgxXT0iZC9tL2JiIn19UC5fZ2VuZXJhbF9pbnQ9ZnVuY3Rpb24gQ2koS3Qp'@;
put 'e3JldHVybiBLdC50b1N0cmluZygxMCl9O3ZhciBqcj1mdW5jdGlvbigpe3ZhciBnbj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKykkLztmdW5jdGlvbiBMbihpaSl7cmV0dXJuLTE9PWlpLmluZGV4T2YoIi4iKT9paTppaS5yZXBsYWNlKGduLCIkMSIpfXZhciBXcj0vKD86XC4wKnwoXC5cZCpb'@;
put 'MS05XSkwKylbRWVdLyxYbj0vKEVbKy1dKShcZCkkLztyZXR1cm4gZnVuY3Rpb24oemkpe3ZhciBKcj1mdW5jdGlvbiBtbyhpaSl7dmFyIEpyLHppPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMoaWkpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIEpyPXppPj0tNCYmemk8PS0xP2lpLnRvUHJl'@;
put 'Y2lzaW9uKDEwK3ppKTpNYXRoLmFicyh6aSk8PTk/ZnVuY3Rpb24gaXIoaWkpe3ZhciB6aT1paTwwPzEyOjExLEpyPUxuKGlpLnRvRml4ZWQoMTIpKTtyZXR1cm4gSnIubGVuZ3RoPD16aXx8KEpyPWlpLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD16aT9KcjppaS50b0V4cG9uZW50aWFsKDUp'@;
put 'fShpaSk6MTA9PT16aT9paS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gcmkoaWkpe3ZhciB6aT1MbihpaS50b0ZpeGVkKDExKSk7cmV0dXJuIHppLmxlbmd0aD4oaWk8MD8xMjoxMSl8fCIwIj09PXppfHwiLTAiPT09emk/aWkudG9QcmVjaXNpb24oNik6eml9KGlpKSxMbihm'@;
put 'dW5jdGlvbiBlaShpaSl7cmV0dXJuLTE9PWlpLmluZGV4T2YoIkUiKT9paTppaS5yZXBsYWNlKFdyLCIkMUUiKS5yZXBsYWNlKFhuLCIkMTAkMiIpfShKci50b1VwcGVyQ2FzZSgpKSl9KHppKTtyZXR1cm4iLCI9PT1RciYmIi4iPT09dXI/SnI6SnIucmVwbGFjZSgvWywuXS9nLGZ1bmN0aW9u'@;
put 'KHdzKXtyZXR1cm4iLCI9PXdzP1FyOnVyfSl9fSgpO2Z1bmN0aW9uIGppKEt0LGduKXtzd2l0Y2godHlwZW9mIEt0KXtjYXNlInN0cmluZyI6cmV0dXJuIEt0O2Nhc2UiYm9vbGVhbiI6cmV0dXJuIEt0PyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxLdCk9PT1LdD9LdC50'@;
put 'b1N0cmluZygxMCk6anIoS3QpO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4iIjtjYXNlIm9iamVjdCI6aWYobnVsbD09S3QpcmV0dXJuIiI7aWYoS3QgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBudSgxNCx6bihLdCxnbiYmZ24uZGF0ZTE5MDQpLGduKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9y'@;
put 'dGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK0t0KX1QLl9nZW5lcmFsX251bT1qcixQLl9nZW5lcmFsPWppO3ZhciBEaT0iXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5Ii5zcGxpdCgiIik7ZnVuY3Rpb24gWW8oS3QsZ24s'@;
put 'TG4sV3Ipe3ZhciBtbyxYbj0iIixlaT0wLGlyPTAscmk9TG4ueSxpaT0wO3N3aXRjaChLdCl7Y2FzZSA5ODpyaT1Mbi55KzU0MztjYXNlIDEyMTpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPXJpJTEwMCxpaT0yO2JyZWFrO2RlZmF1bHQ6bW89cmklMWU0LGlpPTR9YnJlYWs7'@;
put 'Y2FzZSAxMDk6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Mbi5tLGlpPWduLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIEN0W0xuLm0tMV1bMV07Y2FzZSA1OnJldHVybiBDdFtMbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEN0W0xuLm0tMV1bMl19YnJlYWs7Y2FzZSAx'@;
put 'MDA6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Mbi5kLGlpPWduLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIGR0W0xuLnFdWzBdO2RlZmF1bHQ6cmV0dXJuIGR0W0xuLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89'@;
put 'MSsoTG4uSCsxMSklMTIsaWk9Z24ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK2dufWJyZWFrO2Nhc2UgNzI6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Mbi5ILGlpPWduLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3Vy'@;
put 'IGZvcm1hdDogIitnbn1icmVhaztjYXNlIDc3OnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89TG4uTSxpaT1nbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgbWludXRlIGZvcm1hdDogIitnbn1icmVhaztjYXNlIDExNTppZigicyIhPWduJiYic3MiIT1nbiYmIi4w'@;
put 'IiE9Z24mJiIuMDAiIT1nbiYmIi4wMDAiIT1nbil0aHJvdyJiYWQgc2Vjb25kIGZvcm1hdDogIitnbjtyZXR1cm4gMCE9PUxuLnV8fCJzIiE9Z24mJiJzcyIhPWduPyhpcj1Xcj49Mj8zPT09V3I/MWUzOjEwMDoxPT09V3I/MTA6MSwoZWk9TWF0aC5yb3VuZChpciooTG4uUytMbi51KSkpPj02'@;
put 'MCppciYmKGVpPTApLCJzIj09PWduPzA9PT1laT8iMCI6IiIrZWkvaXI6KFhuPXJlKGVpLDIrV3IpLCJzcyI9PT1nbj9Ybi5zdWJzdHIoMCwyKToiLiIrWG4uc3Vic3RyKDIsZ24ubGVuZ3RoLTEpKSk6cmUoTG4uUyxnbi5sZW5ndGgpO2Nhc2UgOTA6c3dpdGNoKGduKXtjYXNlIltoXSI6Y2Fz'@;
put 'ZSJbaGhdIjpjYXNlIltcdTBlMGFdIjpjYXNlIltcdTBlMGFcdTBlMGFdIjptbz0yNCpMbi5EK0xuLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Y2FzZSJbXHUwZTE5XSI6Y2FzZSJbXHUwZTE5XHUwZTE5XSI6bW89NjAqKDI0KkxuLkQrTG4uSCkrTG4uTTticmVhaztjYXNlIltzXSI6'@;
put 'Y2FzZSJbc3NdIjpjYXNlIltcdTBlMTddIjpjYXNlIltcdTBlMTdcdTBlMTddIjptbz02MCooNjAqKDI0KkxuLkQrTG4uSCkrTG4uTSkrTWF0aC5yb3VuZChMbi5TK0xuLnUpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFic3RpbWUgZm9ybWF0OiAiK2dufWlpPTM9PT1nbi5sZW5ndGg/MToy'@;
put 'O2JyZWFrO2Nhc2UgMTAxOm1vPXJpLGlpPTE7YnJlYWs7Y2FzZSAzNjIzOm1vPUxuLmQsaWk9Z24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNDpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPUxuLm0saWk9Z24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gQ3RbTG4ubS0xXVsx'@;
put 'XTtjYXNlIDU6cmV0dXJuIEN0W0xuLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gQ3RbTG4ubS0xXVsyXX1icmVhaztjYXNlIDM2MTE6c3dpdGNoKHJpPUxuLnkrNTQzLGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1yaSUxMDAsaWk9MjticmVhaztkZWZhdWx0Om1vPXJpJTFlNCxpaT00fWJy'@;
put 'ZWFrO2Nhc2UgMzU5NDptbz1Mbi5ILGlpPWduLmxlbmd0aDticmVhaztjYXNlIDM2MDk6bW89TG4uTSxpaT1nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA3Om1vPUxuLlMsaWk9Z24ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3cgS3QudG9TdHJpbmcoMTYpfXZhciB6aT1paT4wP3JlKG1vLGlp'@;
put 'KToiIjtyZXR1cm4oOTA9PUt0P2duLmNoYXJDb2RlQXQoMSk8MzU4NDpLdDwzNTg0KT96aTp6aS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKEpyKXtyZXR1cm4gRGlbK0pyXX0pfWZ1bmN0aW9uIGxvKEt0KXtpZihLdC5sZW5ndGg8PTMpcmV0dXJuIEt0O2Zvcih2YXIgTG49S3QubGVuZ3Ro'@;
put 'JTMsV3I9S3Quc3Vic3RyKDAsTG4pO0xuIT1LdC5sZW5ndGg7TG4rPTMpV3IrPShXci5sZW5ndGg+MD8iLCI6IiIpK0t0LnN1YnN0cihMbiwzKTtyZXR1cm4gV3J9dmFyIEFvPWZ1bmN0aW9uKCl7dmFyIGduPS8lL2c7ZnVuY3Rpb24gWG4oYW4sVnQpe3ZhciBXdCxkbj1hbi5pbmRleE9mKCJF'@;
put 'IiktYW4uaW5kZXhPZigiLiIpLTE7aWYoYW4ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVZ0KXJldHVybiIwLjBFKzAiO2lmKFZ0PDApcmV0dXJuIi0iK1huKGFuLC1WdCk7dmFyIFRuPWFuLmluZGV4T2YoIi4iKTstMT09PVRuJiYoVG49YW4uaW5kZXhPZigiRSIpKTt2YXIgbnI9TWF0'@;
put 'aC5mbG9vcihNYXRoLmxvZyhWdCkqTWF0aC5MT0cxMEUpJVRuO2lmKG5yPDAmJihucis9VG4pLC0xPT09KFd0PShWdC9NYXRoLnBvdygxMCxucikpLnRvUHJlY2lzaW9uKGRuKzErKFRuK25yKSVUbikpLmluZGV4T2YoImUiKSl7dmFyIGJyPU1hdGguZmxvb3IoTWF0aC5sb2coVnQpKk1hdGgu'@;
put 'TE9HMTBFKTtmb3IoLTE9PT1XdC5pbmRleE9mKCIuIik/V3Q9V3QuY2hhckF0KDApKyIuIitXdC5zdWJzdHIoMSkrIkUrIisoYnItV3QubGVuZ3RoK25yKTpXdCs9IkUrIisoYnItbnIpOyIwLiI9PT1XdC5zdWJzdHIoMCwyKTspV3Q9KFd0PVd0LmNoYXJBdCgwKStXdC5zdWJzdHIoMixUbikr'@;
put 'Ii4iK1d0LnN1YnN0cigyK1RuKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO1d0PVd0LnJlcGxhY2UoL1wrLS8sIi0iKX1XdD1XdC5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKHpyLExyLHhpLGNpKXtyZXR1cm4g'@;
put 'THIreGkrY2kuc3Vic3RyKDAsKFRuK25yKSVUbikrIi4iK2NpLnN1YnN0cihucikrIkUifSl9ZWxzZSBXdD1WdC50b0V4cG9uZW50aWFsKGRuKTtyZXR1cm4gYW4ubWF0Y2goL0VcKzAwJC8pJiZXdC5tYXRjaCgvZVsrLV1cZCQvKSYmKFd0PVd0LnN1YnN0cigwLFd0Lmxlbmd0aC0xKSsiMCIr'@;
put 'V3QuY2hhckF0KFd0Lmxlbmd0aC0xKSksYW4ubWF0Y2goL0VcLS8pJiZXdC5tYXRjaCgvZVwrLykmJihXdD1XdC5yZXBsYWNlKC9lXCsvLCJlIikpLFd0LnJlcGxhY2UoImUiLCJFIil9dmFyIGVpPS8jIChcPyspKCA/KVwvKCA/KShcZCspLyxtbz0vXiMqMCpcLihbMCNdKykvLGlpPS9cKS4q'@;
put 'WzAjXS8semk9L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0aW9uIEpyKGFuKXtmb3IodmFyIFd0LFZ0PSIiLGRuPTA7ZG4hPWFuLmxlbmd0aDsrK2RuKXN3aXRjaChXdD1hbi5jaGFyQ29kZUF0KGRuKSl7Y2FzZSAzNTpicmVhaztjYXNlIDYzOlZ0Kz0iICI7YnJlYWs7Y2FzZSA0ODpWdCs9'@;
put 'IjAiO2JyZWFrO2RlZmF1bHQ6VnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoV3QpfXJldHVybiBWdH1mdW5jdGlvbiB3cyhhbixWdCl7dmFyIFd0PU1hdGgucG93KDEwLFZ0KTtyZXR1cm4iIitNYXRoLnJvdW5kKGFuKld0KS9XdH1mdW5jdGlvbiB2cyhhbixWdCl7aWYoVnQ+MTEpcmV0dXJuIHZz'@;
put 'KGFuLDExKSpNYXRoLnBvdygxMCxWdC0xMSk7dmFyIFd0PWFuLU1hdGguZmxvb3IoYW4pLGRuPU1hdGgucG93KDEwLFZ0KTtyZXR1cm4gVnQ8KCIiK01hdGgucm91bmQoV3QqZG4pKS5sZW5ndGg/MDpNYXRoLnJvdW5kKFd0KmRuKX1mdW5jdGlvbiBoYShhbixWdCxXdCl7aWYoNDA9PT1hbi5j'@;
put 'aGFyQ29kZUF0KDApJiYhVnQubWF0Y2goaWkpKXt2YXIgZG49VnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIFd0Pj0wP2hhKCJuIixkbixXdCk6IigiK2hhKCJuIixkbiwtV3QpKyIpIn1pZig0ND09PVZ0LmNoYXJDb2RlQXQo'@;
put 'VnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBXcihhbixWdCxXdCl7Zm9yKHZhciBkbj1WdC5sZW5ndGgtMTs0ND09PVZ0LmNoYXJDb2RlQXQoZG4tMSk7KS0tZG47cmV0dXJuIEFvKGFuLFZ0LnN1YnN0cigwLGRuKSxXdC9NYXRoLnBvdygxMCwzKihWdC5sZW5ndGgtZG4pKSl9KGFuLFZ0'@;
put 'LFd0KTtpZigtMSE9PVZ0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gTG4oYW4sVnQsV3Qpe3ZhciBkbj1WdC5yZXBsYWNlKGduLCIiKSxUbj1WdC5sZW5ndGgtZG4ubGVuZ3RoO3JldHVybiBBbyhhbixkbixXdCpNYXRoLnBvdygxMCwyKlRuKSkrUSgiJSIsVG4pfShhbixWdCxXdCk7'@;
put 'aWYoLTEhPT1WdC5pbmRleE9mKCJFIikpcmV0dXJuIFhuKFZ0LFd0KTtpZigzNj09PVZ0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK2hhKGFuLFZ0LnN1YnN0cigiICI9PVZ0LmNoYXJBdCgxKT8yOjEpLFd0KTt2YXIgVG4sbnIsYnIsenIsTHI9TWF0aC5hYnMoV3QpLHhpPVd0PDA/Ii0iOiIi'@;
put 'O2lmKFZ0Lm1hdGNoKC9eMDArJC8pKXJldHVybiB4aStCZShMcixWdC5sZW5ndGgpO2lmKFZ0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIjAiPT09KFRuPUJlKFd0LDApKSYmKFRuPSIiKSxUbi5sZW5ndGg+VnQubGVuZ3RoP1RuOkpyKFZ0LnN1YnN0cigwLFZ0Lmxlbmd0aC1Ubi5sZW5ndGgp'@;
put 'KStUbjtpZihucj1WdC5tYXRjaChlaSkpcmV0dXJuIGZ1bmN0aW9uIGlyKGFuLFZ0LFd0KXt2YXIgZG49cGFyc2VJbnQoYW5bNF0sMTApLFRuPU1hdGgucm91bmQoVnQqZG4pLG5yPU1hdGguZmxvb3IoVG4vZG4pLGJyPVRuLW5yKmRuLHpyPWRuO3JldHVybiBXdCsoMD09PW5yPyIiOiIiK25y'@;
put 'KSsiICIrKDA9PT1icj9RKCIgIixhblsxXS5sZW5ndGgrMSthbls0XS5sZW5ndGgpOnBlKGJyLGFuWzFdLmxlbmd0aCkrYW5bMl0rIi8iK2FuWzNdK3JlKHpyLGFuWzRdLmxlbmd0aCkpfShucixMcix4aSk7aWYoVnQubWF0Y2goL14jKzArJC8pKXJldHVybiB4aStCZShMcixWdC5sZW5ndGgt'@;
put 'VnQuaW5kZXhPZigiMCIpKTtpZihucj1WdC5tYXRjaChtbykpcmV0dXJuIFRuPXdzKFd0LG5yWzFdLmxlbmd0aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrSnIobnJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitKcihuclsxXSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihVbyx0'@;
put 'aSl7cmV0dXJuIi4iK3RpK1EoIjAiLEpyKG5yWzFdKS5sZW5ndGgtdGkubGVuZ3RoKX0pLC0xIT09VnQuaW5kZXhPZigiMC4iKT9UbjpUbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFZ0PVZ0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbnI9VnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJl'@;
put 'dHVybiB4aSt3cyhMcixuclsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLG5yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYobnI9VnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0'@;
put 'dXJuIHhpK2xvKEJlKExyLDApKTtpZihucj1WdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gV3Q8MD8iLSIraGEoYW4sVnQsLVd0KTpsbygiIisoTWF0aC5mbG9vcihXdCkrZnVuY3Rpb24gbWwoYW4sVnQpe3JldHVybiBWdDwoIiIrTWF0aC5yb3VuZCgoYW4tTWF0aC5mbG9v'@;
put 'cihhbikpKk1hdGgucG93KDEwLFZ0KSkpLmxlbmd0aD8xOjB9KFd0LG5yWzFdLmxlbmd0aCkpKSsiLiIrcmUodnMoV3QsbnJbMV0ubGVuZ3RoKSxuclsxXS5sZW5ndGgpO2lmKG5yPVZ0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBoYShhbixWdC5yZXBsYWNlKC9eIywjKiwvLCIiKSxXdCk7'@;
put 'aWYobnI9VnQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIFRuPUwoaGEoYW4sVnQucmVwbGFjZSgvW1xcLV0vZywiIiksV3QpKSxicj0wLEwoTChWdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKFVvKXtyZXR1cm4gYnI8VG4ubGVu'@;
put 'Z3RoP1RuLmNoYXJBdChicisrKToiMCI9PT1Vbz8iMCI6IiJ9KSk7aWYoVnQubWF0Y2goemkpKXJldHVybiIoIisoVG49aGEoYW4sIiMjIyMjIyMjIyMiLFd0KSkuc3Vic3RyKDAsMykrIikgIitUbi5zdWJzdHIoMywzKSsiLSIrVG4uc3Vic3RyKDYpO3ZhciBjaT0iIjtpZihucj1WdC5tYXRj'@;
put 'aCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIGJyPU1hdGgubWluKG5yWzRdLmxlbmd0aCw3KSx6cj1adChMcixNYXRoLnBvdygxMCxiciktMSwhMSksVG49IiIreGksIiAiPT0oY2k9QW8oIm4iLG5yWzFdLHpyWzFdKSkuY2hhckF0KGNpLmxlbmd0aC0xKSYmKGNpPWNp'@;
put 'LnN1YnN0cigwLGNpLmxlbmd0aC0xKSsiMCIpLFRuKz1jaStuclsyXSsiLyIrbnJbM10sKGNpPV9lKHpyWzJdLGJyKSkubGVuZ3RoPG5yWzRdLmxlbmd0aCYmKGNpPUpyKG5yWzRdLnN1YnN0cihucls0XS5sZW5ndGgtY2kubGVuZ3RoKSkrY2kpLFRuKz1jaTtpZihucj1WdC5tYXRjaCgvXiMg'@;
put 'KFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gYnI9TWF0aC5taW4oTWF0aC5tYXgobnJbMV0ubGVuZ3RoLG5yWzRdLmxlbmd0aCksNykseGkrKCh6cj1adChMcixNYXRoLnBvdygxMCxiciktMSwhMCkpWzBdfHwoenJbMV0/IiI6IjAiKSkrIiAiKyh6clsxXT9wZSh6clsxXSxi'@;
put 'cikrbnJbMl0rIi8iK25yWzNdK19lKHpyWzJdLGJyKTpRKCIgIiwyKmJyKzErbnJbMl0ubGVuZ3RoK25yWzNdLmxlbmd0aCkpO2lmKG5yPVZ0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBUbj1CZShXdCwwKSxWdC5sZW5ndGg8PVRuLmxlbmd0aD9UbjpKcihWdC5zdWJzdHIoMCxWdC5sZW5n'@;
put 'dGgtVG4ubGVuZ3RoKSkrVG47aWYobnI9VnQubWF0Y2goL14oWyMwP10rKVwuKFsjMF0rKSQvKSl7VG49IiIrV3QudG9GaXhlZChNYXRoLm1pbihuclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLGJyPVRuLmluZGV4T2YoIi4iKTt2YXIgQ289VnQuaW5kZXhPZigi'@;
put 'LiIpLWJyLHBvPVZ0Lmxlbmd0aC1Ubi5sZW5ndGgtQ287cmV0dXJuIEpyKFZ0LnN1YnN0cigwLENvKStUbitWdC5zdWJzdHIoVnQubGVuZ3RoLXBvKSl9aWYobnI9VnQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBicj12cyhXdCxuclsxXS5sZW5ndGgpLFd0PDA/Ii0iK2hh'@;
put 'KGFuLFZ0LC1XdCk6bG8oZnVuY3Rpb24gamwoYW4pe3JldHVybiBhbjwyMTQ3NDgzNjQ3JiZhbj4tMjE0NzQ4MzY0OD8iIisoYW4+PTA/MHxhbjphbi0xfDApOiIiK01hdGguZmxvb3IoYW4pfShXdCkpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rp'@;
put 'b24oVW8pe3JldHVybiIwMCwiKyhVby5sZW5ndGg8Mz9yZSgwLDMtVW8ubGVuZ3RoKToiIikrVW99KSsiLiIrcmUoYnIsbnJbMV0ubGVuZ3RoKTtzd2l0Y2goVnQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIGhhKGFuLCIjLCMjMC4wMCIsV3QpO2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMi'@;
put 'OmNhc2UiIywjIyMiOnZhciBWaT1sbyhCZShMciwwKSk7cmV0dXJuIjAiIT09Vmk/eGkrVmk6IiI7Y2FzZSIjIyMsIyMjLjAwIjpyZXR1cm4gaGEoYW4sIiMjIywjIzAuMDAiLFd0KS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJldHVybiBoYShhbiwiIywjIzAuMDAiLFd0'@;
put 'KS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1Z0KyJ8Iil9ZnVuY3Rpb24gbm4oYW4sVnQpe3ZhciBXdCxkbj1hbi5pbmRleE9mKCJFIiktYW4uaW5kZXhPZigiLiIpLTE7aWYoYW4ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9'@;
put 'PVZ0KXJldHVybiIwLjBFKzAiO2lmKFZ0PDApcmV0dXJuIi0iK25uKGFuLC1WdCk7dmFyIFRuPWFuLmluZGV4T2YoIi4iKTstMT09PVRuJiYoVG49YW4uaW5kZXhPZigiRSIpKTt2YXIgbnI9TWF0aC5mbG9vcihNYXRoLmxvZyhWdCkqTWF0aC5MT0cxMEUpJVRuO2lmKG5yPDAmJihucis9VG4p'@;
put 'LCEoV3Q9KFZ0L01hdGgucG93KDEwLG5yKSkudG9QcmVjaXNpb24oZG4rMSsoVG4rbnIpJVRuKSkubWF0Y2goL1tFZV0vKSl7dmFyIGJyPU1hdGguZmxvb3IoTWF0aC5sb2coVnQpKk1hdGguTE9HMTBFKTstMT09PVd0LmluZGV4T2YoIi4iKT9XdD1XdC5jaGFyQXQoMCkrIi4iK1d0LnN1YnN0'@;
put 'cigxKSsiRSsiKyhici1XdC5sZW5ndGgrbnIpOld0Kz0iRSsiKyhici1uciksV3Q9V3QucmVwbGFjZSgvXCstLywiLSIpfVd0PVd0LnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oenIsTHIseGksY2kpe3JldHVybiBMcit4aStjaS5zdWJzdHIoMCwoVG4rbnIp'@;
put 'JVRuKSsiLiIrY2kuc3Vic3RyKG5yKSsiRSJ9KX1lbHNlIFd0PVZ0LnRvRXhwb25lbnRpYWwoZG4pO3JldHVybiBhbi5tYXRjaCgvRVwrMDAkLykmJld0Lm1hdGNoKC9lWystXVxkJC8pJiYoV3Q9V3Quc3Vic3RyKDAsV3QubGVuZ3RoLTEpKyIwIitXdC5jaGFyQXQoV3QubGVuZ3RoLTEpKSxh'@;
put 'bi5tYXRjaCgvRVwtLykmJld0Lm1hdGNoKC9lXCsvKSYmKFd0PVd0LnJlcGxhY2UoL2VcKy8sImUiKSksV3QucmVwbGFjZSgiZSIsIkUiKX1mdW5jdGlvbiBfbihhbixWdCxXdCl7aWYoNDA9PT1hbi5jaGFyQ29kZUF0KDApJiYhVnQubWF0Y2goaWkpKXt2YXIgZG49VnQucmVwbGFjZSgvXCgg'@;
put 'Ki8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIFd0Pj0wP19uKCJuIixkbixXdCk6IigiK19uKCJuIixkbiwtV3QpKyIpIn1pZig0ND09PVZ0LmNoYXJDb2RlQXQoVnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiB5ZihhbixWdCxXdCl7Zm9yKHZhciBk'@;
put 'bj1WdC5sZW5ndGgtMTs0ND09PVZ0LmNoYXJDb2RlQXQoZG4tMSk7KS0tZG47cmV0dXJuIEFvKGFuLFZ0LnN1YnN0cigwLGRuKSxXdC9NYXRoLnBvdygxMCwzKihWdC5sZW5ndGgtZG4pKSl9KGFuLFZ0LFd0KTtpZigtMSE9PVZ0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gb3AoYW4s'@;
put 'VnQsV3Qpe3ZhciBkbj1WdC5yZXBsYWNlKGduLCIiKSxUbj1WdC5sZW5ndGgtZG4ubGVuZ3RoO3JldHVybiBBbyhhbixkbixXdCpNYXRoLnBvdygxMCwyKlRuKSkrUSgiJSIsVG4pfShhbixWdCxXdCk7aWYoLTEhPT1WdC5pbmRleE9mKCJFIikpcmV0dXJuIG5uKFZ0LFd0KTtpZigzNj09PVZ0'@;
put 'LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK19uKGFuLFZ0LnN1YnN0cigiICI9PVZ0LmNoYXJBdCgxKT8yOjEpLFd0KTt2YXIgVG4sbnIsYnIsenIsTHI9TWF0aC5hYnMoV3QpLHhpPVd0PDA/Ii0iOiIiO2lmKFZ0Lm1hdGNoKC9eMDArJC8pKXJldHVybiB4aStyZShMcixWdC5sZW5ndGgpO2lm'@;
put 'KFZ0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIFRuPSIiK1d0LDA9PT1XdCYmKFRuPSIiKSxUbi5sZW5ndGg+VnQubGVuZ3RoP1RuOkpyKFZ0LnN1YnN0cigwLFZ0Lmxlbmd0aC1Ubi5sZW5ndGgpKStUbjtpZihucj1WdC5tYXRjaChlaSkpcmV0dXJuIGZ1bmN0aW9uIHJpKGFuLFZ0LFd0KXty'@;
put 'ZXR1cm4gV3QrKDA9PT1WdD8iIjoiIitWdCkrUSgiICIsYW5bMV0ubGVuZ3RoKzIrYW5bNF0ubGVuZ3RoKX0obnIsTHIseGkpO2lmKFZ0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4geGkrcmUoTHIsVnQubGVuZ3RoLVZ0LmluZGV4T2YoIjAiKSk7aWYobnI9VnQubWF0Y2gobW8pKXJldHVybiBU'@;
put 'bj0oVG49KCIiK1d0KS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitKcihuclsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK0pyKG5yWzFdKSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihVbyx0aSl7cmV0dXJuIi4iK3RpK1EoIjAiLEpyKG5yWzFdKS5sZW5ndGgtdGkubGVuZ3RoKX0p'@;
put 'LC0xIT09VnQuaW5kZXhPZigiMC4iKT9UbjpUbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFZ0PVZ0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbnI9VnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiB4aSsoIiIrTHIpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJl'@;
put 'cGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLG5yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYobnI9VnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIHhpK2xvKCIiK0xyKTtpZihucj1WdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gV3Q8'@;
put 'MD8iLSIrX24oYW4sVnQsLVd0KTpsbygiIitXdCkrIi4iK1EoIjAiLG5yWzFdLmxlbmd0aCk7aWYobnI9VnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIF9uKGFuLFZ0LnJlcGxhY2UoL14jLCMqLC8sIiIpLFd0KTtpZihucj1WdC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSly'@;
put 'ZXR1cm4gVG49TChfbihhbixWdC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxXdCkpLGJyPTAsTChMKFZ0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVW8pe3JldHVybiBicjxUbi5sZW5ndGg/VG4uY2hhckF0KGJyKyspOiIwIj09PVVvPyIwIjoiIn0pKTtpZihW'@;
put 'dC5tYXRjaCh6aSkpcmV0dXJuIigiKyhUbj1fbihhbiwiIyMjIyMjIyMjIyIsV3QpKS5zdWJzdHIoMCwzKSsiKSAiK1RuLnN1YnN0cigzLDMpKyItIitUbi5zdWJzdHIoNik7dmFyIGNpPSIiO2lmKG5yPVZ0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gYnI9'@;
put 'TWF0aC5taW4obnJbNF0ubGVuZ3RoLDcpLHpyPVp0KExyLE1hdGgucG93KDEwLGJyKS0xLCExKSxUbj0iIit4aSwiICI9PShjaT1BbygibiIsbnJbMV0senJbMV0pKS5jaGFyQXQoY2kubGVuZ3RoLTEpJiYoY2k9Y2kuc3Vic3RyKDAsY2kubGVuZ3RoLTEpKyIwIiksVG4rPWNpK25yWzJdKyIv'@;
put 'IituclszXSwoY2k9X2UoenJbMl0sYnIpKS5sZW5ndGg8bnJbNF0ubGVuZ3RoJiYoY2k9SnIobnJbNF0uc3Vic3RyKG5yWzRdLmxlbmd0aC1jaS5sZW5ndGgpKStjaSksVG4rPWNpO2lmKG5yPVZ0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBicj1NYXRo'@;
put 'Lm1pbihNYXRoLm1heChuclsxXS5sZW5ndGgsbnJbNF0ubGVuZ3RoKSw3KSx4aSsoKHpyPVp0KExyLE1hdGgucG93KDEwLGJyKS0xLCEwKSlbMF18fCh6clsxXT8iIjoiMCIpKSsiICIrKHpyWzFdP3BlKHpyWzFdLGJyKStuclsyXSsiLyIrbnJbM10rX2UoenJbMl0sYnIpOlEoIiAiLDIqYnIr'@;
put 'MStuclsyXS5sZW5ndGgrbnJbM10ubGVuZ3RoKSk7aWYobnI9VnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIFZ0Lmxlbmd0aDw9KFRuPSIiK1d0KS5sZW5ndGg/VG46SnIoVnQuc3Vic3RyKDAsVnQubGVuZ3RoLVRuLmxlbmd0aCkpK1RuO2lmKG5yPVZ0Lm1hdGNoKC9eKFsjMF0rKVwuKFsj'@;
put 'MF0rKSQvKSl7VG49IiIrV3QudG9GaXhlZChNYXRoLm1pbihuclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLGJyPVRuLmluZGV4T2YoIi4iKTt2YXIgQ289VnQuaW5kZXhPZigiLiIpLWJyLHBvPVZ0Lmxlbmd0aC1Ubi5sZW5ndGgtQ287cmV0dXJuIEpyKFZ0LnN1'@;
put 'YnN0cigwLENvKStUbitWdC5zdWJzdHIoVnQubGVuZ3RoLXBvKSl9aWYobnI9VnQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBXdDwwPyItIitfbihhbixWdCwtV3QpOmxvKCIiK1d0KS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0'@;
put 'aW9uKFVvKXtyZXR1cm4iMDAsIisoVW8ubGVuZ3RoPDM/cmUoMCwzLVVvLmxlbmd0aCk6IiIpK1VvfSkrIi4iK3JlKDAsbnJbMV0ubGVuZ3RoKTt2YXIgVmk9bG8oIiIrTHIpO3N3aXRjaChWdCl7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6cmV0dXJuIjAiIT09Vmk/'@;
put 'eGkrVmk6IiI7Y2FzZSIjLCMwMCI6cmV0dXJuIjAwIiE9PShWaT1yZShWaSwyKSk/eGkrVmk6IiI7ZGVmYXVsdDppZihWdC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIF9uKGFuLFZ0LnNsaWNlKDAsVnQubGFzdEluZGV4T2YoIi4iKSksV3QpK0pyKFZ0LnNsaWNlKFZ0Lmxhc3RJbmRleE9m'@;
put 'KCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitWdCsifCIpfXJldHVybiBmdW5jdGlvbihWdCxXdCxkbil7cmV0dXJuIjAsMCI9PVd0JiYoV3Q9IiMsIzAwIiksKDB8ZG4pPT09ZG4/X24oVnQsV3QsZG4pOmhhKFZ0LFd0LGRuKX19KCk7ZnVuY3Rpb24geG8o'@;
put 'S3Qpe2Zvcih2YXIgZ249W10sTG49ITEsV3I9MCxYbj0wO1dyPEt0Lmxlbmd0aDsrK1dyKXN3aXRjaChLdC5jaGFyQ29kZUF0KFdyKSl7Y2FzZSAzNDpMbj0hTG47YnJlYWs7Y2FzZSA5NTpjYXNlIDQyOmNhc2UgOTI6KytXcjticmVhaztjYXNlIDU5OmduW2duLmxlbmd0aF09S3Quc3Vic3Ry'@;
put 'KFhuLFdyLVhuKSxYbj1XcisxfWlmKGduW2duLmxlbmd0aF09S3Quc3Vic3RyKFhuKSwhMD09PUxuKXRocm93IG5ldyBFcnJvcigiRm9ybWF0IHwiK0t0KyJ8IHVudGVybWluYXRlZCBzdHJpbmcgIik7cmV0dXJuIGdufVAuX3NwbGl0PXhvO3ZhciBoaT0vXFtbSGhNbVNzXHUwRTBBXHUwRTE5'@;
put 'XHUwRTE3XSpcXS87ZnVuY3Rpb24gdGEoS3Qpe2Zvcih2YXIgZ249MCxMbj0iIixXcj0iIjtnbjxLdC5sZW5ndGg7KXN3aXRjaChMbj1LdC5jaGFyQXQoZ24pKXtjYXNlIkciOkdlKEt0LGduKSYmKGduKz02KSxnbisrO2JyZWFrO2Nhc2UnIic6Zm9yKDszNCE9PUt0LmNoYXJDb2RlQXQoKytn'@;
put 'bikmJmduPEt0Lmxlbmd0aDspOysrZ247YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpnbis9MjticmVhaztjYXNlIkAiOisrZ247YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PUt0LmNoYXJBdChnbisxKXx8IjIiPT09S3QuY2hhckF0KGduKzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJE'@;
put 'IjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PUt0LnN1YnN0cihnbiwzKS50b1VwcGVyQ2Fz'@;
put 'ZSgpfHwiQU0vUE0iPT09S3Quc3Vic3RyKGduLDUpLnRvVXBwZXJDYXNlKCl8fCJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PUt0LnN1YnN0cihnbiw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrZ247YnJlYWs7Y2FzZSJbIjpmb3IoV3I9TG47Il0iIT09S3QuY2hhckF0KGduKysp'@;
put 'JiZnbjxLdC5sZW5ndGg7KVdyKz1LdC5jaGFyQXQoZ24pO2lmKFdyLm1hdGNoKGhpKSlyZXR1cm4hMDticmVhaztjYXNlIi4iOmNhc2UiMCI6Y2FzZSIjIjpmb3IoO2duPEt0Lmxlbmd0aCYmKCIwIz8uLEUrLSUiLmluZGV4T2YoTG49S3QuY2hhckF0KCsrZ24pKT4tMXx8IlxcIj09TG4mJiIt'@;
put 'Ij09S3QuY2hhckF0KGduKzEpJiYiMCMiLmluZGV4T2YoS3QuY2hhckF0KGduKzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7S3QuY2hhckF0KCsrZ24pPT09TG47KTticmVhaztjYXNlIioiOisrZ24sKCIgIj09S3QuY2hhckF0KGduKXx8IioiPT1LdC5jaGFyQXQoZ24pKSYmKytnbjti'@;
put 'cmVhaztjYXNlIigiOmNhc2UiKSI6KytnbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoO2duPEt0Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoS3QuY2hhckF0KCsrZ24pKT4tMTsp'@;
put 'O2JyZWFrO2RlZmF1bHQ6Kytnbn1yZXR1cm4hMX1mdW5jdGlvbiBNbihLdCxnbixMbixXcil7Zm9yKHZhciBpaSx6aSxKcixYbj1bXSxlaT0iIixpcj0wLHJpPSIiLG1vPSJ0Iix3cz0iSCI7aXI8S3QubGVuZ3RoOylzd2l0Y2gocmk9S3QuY2hhckF0KGlyKSl7Y2FzZSJHIjppZighR2UoS3Qs'@;
put 'aXIpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK3JpKyIgaW4gIitLdCk7WG5bWG4ubGVuZ3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LGlyKz03O2JyZWFrO2Nhc2UnIic6Zm9yKGVpPSIiOzM0IT09KEpyPUt0LmNoYXJDb2RlQXQoKytpcikpJiZpcjxLdC5sZW5n'@;
put 'dGg7KWVpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEpyKTtYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OmVpfSwrK2lyO2JyZWFrO2Nhc2UiXFwiOnZhciB2cz1LdC5jaGFyQXQoKytpcik7WG5bWG4ubGVuZ3RoXT17dDoiKCI9PT12c3x8IikiPT09dnM/dnM6InQiLHY6dnN9LCsraXI7YnJlYWs7Y2Fz'@;
put 'ZSJfIjpYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OiIgIn0saXIrPTI7YnJlYWs7Y2FzZSJAIjpYbltYbi5sZW5ndGhdPXt0OiJUIix2OmdufSwrK2lyO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1LdC5jaGFyQXQoaXIrMSl8fCIyIj09PUt0LmNoYXJBdChpcisxKSl7aWYobnVsbD09'@;
put 'aWkmJm51bGw9PShpaT1wbihnbixMbiwiMiI9PT1LdC5jaGFyQXQoaXIrMSkpKSlyZXR1cm4iIjtYbltYbi5sZW5ndGhdPXt0OiJYIix2Okt0LnN1YnN0cihpciwyKX0sbW89cmksaXIrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6cmk9'@;
put 'cmkudG9Mb3dlckNhc2UoKTtjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOmlmKGduPDB8fG51bGw9'@;
put 'PWlpJiZudWxsPT0oaWk9cG4oZ24sTG4pKSlyZXR1cm4iIjtmb3IoZWk9cmk7KytpcjxLdC5sZW5ndGgmJkt0LmNoYXJBdChpcikudG9Mb3dlckNhc2UoKT09PXJpOyllaSs9cmk7Im0iPT09cmkmJiJoIj09PW1vLnRvTG93ZXJDYXNlKCkmJihyaT0iTSIpLCJoIj09PXJpJiYocmk9d3MpLFhu'@;
put 'W1huLmxlbmd0aF09e3Q6cmksdjplaX0sbW89cmk7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjp2YXIgamw9e3Q6cmksdjpyaX07aWYobnVsbD09aWkmJihpaT1wbihnbixMbikpLCJBL1AiPT09S3Quc3Vic3RyKGlyLDMpLnRvVXBwZXJDYXNlKCk/KG51bGwhPWlpJiYoamwu'@;
put 'dj1paS5IPj0xMj8iUCI6IkEiKSxqbC50PSJUIix3cz0iaCIsaXIrPTMpOiJBTS9QTSI9PT1LdC5zdWJzdHIoaXIsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9aWkmJihqbC52PWlpLkg+PTEyPyJQTSI6IkFNIiksamwudD0iVCIsaXIrPTUsd3M9ImgiKToiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1'@;
put 'NTM0OCI9PT1LdC5zdWJzdHIoaXIsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9aWkmJihqbC52PWlpLkg+PTEyPyJcdTRlMGJcdTUzNDgiOiJcdTRlMGFcdTUzNDgiKSxqbC50PSJUIixpcis9NSx3cz0iaCIpOihqbC50PSJ0IiwrK2lyKSxudWxsPT1paSYmIlQiPT09amwudClyZXR1cm4iIjtY'@;
put 'bltYbi5sZW5ndGhdPWpsLG1vPXJpO2JyZWFrO2Nhc2UiWyI6Zm9yKGVpPXJpOyJdIiE9PUt0LmNoYXJBdChpcisrKSYmaXI8S3QubGVuZ3RoOyllaSs9S3QuY2hhckF0KGlyKTtpZigiXSIhPT1laS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcrZWkrInwiO2lm'@;
put 'KGVpLm1hdGNoKGhpKSl7aWYobnVsbD09aWkmJm51bGw9PShpaT1wbihnbixMbikpKXJldHVybiIiO1huW1huLmxlbmd0aF09e3Q6IloiLHY6ZWkudG9Mb3dlckNhc2UoKX0sbW89ZWkuY2hhckF0KDEpfWVsc2UgZWkuaW5kZXhPZigiJCIpPi0xJiYoZWk9KGVpLm1hdGNoKC9cJChbXi1cW1xd'@;
put 'XSopLyl8fFtdKVsxXXx8IiQiLHRhKEt0KXx8KFhuW1huLmxlbmd0aF09e3Q6InQiLHY6ZWl9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1paSl7Zm9yKGVpPXJpOysraXI8S3QubGVuZ3RoJiYiMCI9PT0ocmk9S3QuY2hhckF0KGlyKSk7KWVpKz1yaTtYbltYbi5sZW5ndGhdPXt0OiJzIix2'@;
put 'OmVpfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKGVpPXJpOysraXI8S3QubGVuZ3RoJiYiMCM/LixFKy0lIi5pbmRleE9mKHJpPUt0LmNoYXJBdChpcikpPi0xOyllaSs9cmk7WG5bWG4ubGVuZ3RoXT17dDoibiIsdjplaX07YnJlYWs7Y2FzZSI/Ijpmb3IoZWk9cmk7S3QuY2hhckF0KCsr'@;
put 'aXIpPT09cmk7KWVpKz1yaTtYbltYbi5sZW5ndGhdPXt0OnJpLHY6ZWl9LG1vPXJpO2JyZWFrO2Nhc2UiKiI6KytpciwoIiAiPT1LdC5jaGFyQXQoaXIpfHwiKiI9PUt0LmNoYXJBdChpcikpJiYrK2lyO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpYbltYbi5sZW5ndGhdPXt0OjE9PT1Xcj8idCI6'@;
put 'cmksdjpyaX0sKytpcjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoZWk9cmk7aXI8S3QubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihLdC5jaGFyQXQoKytpcikpPi0xOyllaSs9S3Qu'@;
put 'Y2hhckF0KGlyKTtYbltYbi5sZW5ndGhdPXt0OiJEIix2OmVpfTticmVhaztjYXNlIiAiOlhuW1huLmxlbmd0aF09e3Q6cmksdjpyaX0sKytpcjticmVhaztjYXNlIiQiOlhuW1huLmxlbmd0aF09e3Q6InQiLHY6VnJ9LCsraXI7YnJlYWs7Y2FzZSIvIjpYbltYbi5sZW5ndGhdPVhuLmxlbmd0'@;
put 'aD4wJiZ0YShYbltYbi5sZW5ndGgtMV0udik/e3Q6InQiLHY6QW59Ont0OiJ0Iix2OiIvIn0sKytpcjticmVhaztkZWZhdWx0OmlmKC0xPT09IiwkLSsvKCk6IV4mJ357fTw+PVx1MjBhY2FjZmlqa2xvcHFydHV2d3h6UCIuaW5kZXhPZihyaSkpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6'@;
put 'ZWQgY2hhcmFjdGVyICIrcmkrIiBpbiAiK0t0KTtYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OnJpfSwrK2lyfXZhciBvcCxoYT0wLHlmPTA7Zm9yKGlyPVhuLmxlbmd0aC0xLG1vPSJ0Ijtpcj49MDstLWlyKXN3aXRjaChYbltpcl0udCl7Y2FzZSJoIjpjYXNlIkgiOlhuW2lyXS50PXdzLG1vPSJo'@;
put 'IixoYTwxJiYoaGE9MSk7YnJlYWs7Y2FzZSJzIjoob3A9WG5baXJdLnYubWF0Y2goL1wuMCskLykpJiYoeWY9TWF0aC5tYXgoeWYsb3BbMF0ubGVuZ3RoLTEpKSxoYTwzJiYoaGE9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjptbz1Ybltpcl0udDticmVhaztjYXNlIm0iOiJz'@;
put 'Ij09PW1vJiYoWG5baXJdLnQ9Ik0iLGhhPDImJihoYT0yKSk7YnJlYWs7Y2FzZSJYIjpicmVhaztjYXNlIloiOmhhPDEmJlhuW2lyXS52Lm1hdGNoKC9bSGhdLykmJihoYT0xKSxoYTwyJiZYbltpcl0udi5tYXRjaCgvW01tXS8pJiYoaGE9MiksaGE8MyYmWG5baXJdLnYubWF0Y2goL1tTc10v'@;
put 'KSYmKGhhPTMpfXN3aXRjaChoYSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTppaS51Pj0uNSYmKGlpLnU9MCwrK2lpLlMpLGlpLlM+PTYwJiYoaWkuUz0wLCsraWkuTSksaWkuTT49NjAmJihpaS5NPTAsKytpaS5IKTticmVhaztjYXNlIDI6aWkudT49LjUmJihpaS51PTAsKytpaS5TKSxpaS5TPj02'@;
put 'MCYmKGlpLlM9MCwrK2lpLk0pfXZhciBfbixubj0iIjtmb3IoaXI9MDtpcjxYbi5sZW5ndGg7Kytpcilzd2l0Y2goWG5baXJdLnQpe2Nhc2UidCI6Y2FzZSJUIjpjYXNlIiAiOmNhc2UiRCI6YnJlYWs7Y2FzZSJYIjpYbltpcl0udj0iIixYbltpcl0udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNl'@;
put 'Im0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjpYbltpcl0udj1ZbyhYbltpcl0u'@;
put 'dC5jaGFyQ29kZUF0KDApLFhuW2lyXS52LGlpLHlmKSxYbltpcl0udD0idCI7YnJlYWs7Y2FzZSJuIjpjYXNlIj8iOmZvcihfbj1pcisxO251bGwhPVhuW19uXSYmKCI/Ij09PShyaT1Ybltfbl0udCl8fCJEIj09PXJpfHwoIiAiPT09cml8fCJ0Ij09PXJpKSYmbnVsbCE9WG5bX24rMV0mJigi'@;
put 'PyI9PT1YbltfbisxXS50fHwidCI9PT1YbltfbisxXS50JiYiLyI9PT1YbltfbisxXS52KXx8IigiPT09WG5baXJdLnQmJigiICI9PT1yaXx8Im4iPT09cml8fCIpIj09PXJpKXx8InQiPT09cmkmJigiLyI9PT1Ybltfbl0udnx8IiAiPT09WG5bX25dLnYmJm51bGwhPVhuW19uKzFdJiYiPyI9'@;
put 'PVhuW19uKzFdLnQpKTspWG5baXJdLnYrPVhuW19uXS52LFhuW19uXT17djoiIix0OiI7In0sKytfbjtubis9WG5baXJdLnYsaXI9X24tMTticmVhaztjYXNlIkciOlhuW2lyXS50PSJ0IixYbltpcl0udj1qaShnbixMbil9dmFyIFZ0LFd0LGFuPSIiO2lmKG5uLmxlbmd0aD4wKXs0MD09bm4u'@;
put 'Y2hhckNvZGVBdCgwKT8oVnQ9Z248MCYmNDU9PT1ubi5jaGFyQ29kZUF0KDApPy1nbjpnbixXdD1BbygibiIsbm4sVnQpKTooV3Q9QW8oIm4iLG5uLFZ0PWduPDAmJldyPjE/LWduOmduKSxWdDwwJiZYblswXSYmInQiPT1YblswXS50JiYoV3Q9V3Quc3Vic3RyKDEpLFhuWzBdLnY9Ii0iK1hu'@;
put 'WzBdLnYpKSxfbj0oV3Q9V3QucmVwbGFjZSgvWyxcLl0vZyxmdW5jdGlvbihicil7cmV0dXJuIi4iPT1icj91cjpRcn0pKS5sZW5ndGgtMTt2YXIgZG49WG4ubGVuZ3RoO2Zvcihpcj0wO2lyPFhuLmxlbmd0aDsrK2lyKWlmKG51bGwhPVhuW2lyXSYmInQiIT1Ybltpcl0udCYmWG5baXJdLnYu'@;
put 'aW5kZXhPZigiLiIpPi0xKXtkbj1pcjticmVha312YXIgVG49WG4ubGVuZ3RoO2lmKGRuPT09WG4ubGVuZ3RoJiYtMT09PVd0LmluZGV4T2YoIkUiKSl7Zm9yKGlyPVhuLmxlbmd0aC0xO2lyPj0wOy0taXIpbnVsbD09WG5baXJdfHwtMT09PSJuPyIuaW5kZXhPZihYbltpcl0udCl8fChfbj49'@;
put 'WG5baXJdLnYubGVuZ3RoLTE/WG5baXJdLnY9V3Quc3Vic3RyKDErKF9uLT1Ybltpcl0udi5sZW5ndGgpLFhuW2lyXS52Lmxlbmd0aCk6X248MD9Ybltpcl0udj0iIjooWG5baXJdLnY9V3Quc3Vic3RyKDAsX24rMSksX249LTEpLFhuW2lyXS50PSJ0IixUbj1pcik7X24+PTAmJlRuPFhuLmxl'@;
put 'bmd0aCYmKFhuW1RuXS52PVd0LnN1YnN0cigwLF9uKzEpK1huW1RuXS52KX1lbHNlIGlmKGRuIT09WG4ubGVuZ3RoJiYtMT09PVd0LmluZGV4T2YoIkUiKSl7Zm9yKF9uPVd0LmluZGV4T2YodXIpLTEsaXI9ZG47aXI+PTA7LS1pcilpZihudWxsIT1Ybltpcl0mJi0xIT09Im4/Ii5pbmRleE9m'@;
put 'KFhuW2lyXS50KSl7Zm9yKHppPVhuW2lyXS52LmluZGV4T2YoIi4iKT4tMSYmaXI9PT1kbj9Ybltpcl0udi5pbmRleE9mKCIuIiktMTpYbltpcl0udi5sZW5ndGgtMSxhbj1Ybltpcl0udi5zdWJzdHIoemkrMSk7emk+PTA7LS16aSlfbj49MCYmKCIwIj09PVhuW2lyXS52LmNoYXJBdCh6aSl8'@;
put 'fCIjIj09PVhuW2lyXS52LmNoYXJBdCh6aSkpJiYoYW49V3QuY2hhckF0KF9uLS0pK2FuKTtYbltpcl0udj1hbixYbltpcl0udD0idCIsVG49aXJ9Zm9yKF9uPj0wJiZUbjxYbi5sZW5ndGgmJihYbltUbl0udj1XdC5zdWJzdHIoMCxfbisxKStYbltUbl0udiksX249V3QuaW5kZXhPZih1cikr'@;
put 'MSxpcj1kbjtpcjxYbi5sZW5ndGg7KytpcilpZihudWxsIT1Ybltpcl0mJigtMSE9PSJuPygiLmluZGV4T2YoWG5baXJdLnQpfHxpcj09PWRuKSl7Zm9yKHppPVhuW2lyXS52LmluZGV4T2YodXIpPi0xJiZpcj09PWRuP1huW2lyXS52LmluZGV4T2YodXIpKzE6MCxhbj1Ybltpcl0udi5zdWJz'@;
put 'dHIoMCx6aSk7emk8WG5baXJdLnYubGVuZ3RoOysremkpX248V3QubGVuZ3RoJiYoYW4rPVd0LmNoYXJBdChfbisrKSk7WG5baXJdLnY9YW4sWG5baXJdLnQ9InQiLFRuPWlyfX19Zm9yKGlyPTA7aXI8WG4ubGVuZ3RoOysraXIpbnVsbCE9WG5baXJdJiYibj8iLmluZGV4T2YoWG5baXJdLnQp'@;
put 'Pi0xJiYoWG5baXJdLnY9QW8oWG5baXJdLnQsWG5baXJdLnYsVnQ9V3I+MSYmZ248MCYmaXI+MCYmIi0iPT09WG5baXItMV0udj8tZ246Z24pLnJlcGxhY2UoL1wuL2csdXIpLnJlcGxhY2UoLywvLFFyKSxYbltpcl0udD0idCIpO3ZhciBucj0iIjtmb3IoaXI9MDtpciE9PVhuLmxlbmd0aDsr'@;
put 'K2lyKW51bGwhPVhuW2lyXSYmKG5yKz1Ybltpcl0udik7cmV0dXJuIG5yfVAuaXNfZGF0ZT10YSxQLl9ldmFsPU1uO3ZhciB5cz0vXFtbPTw+XS8sRWw9L1xbKD18Pls9XT98PFs+PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIHNsKEt0LGduKXtpZihudWxsPT1nbilyZXR1cm4h'@;
put 'MTt2YXIgTG49cGFyc2VGbG9hdChnblsyXSk7c3dpdGNoKGduWzFdKXtjYXNlIj0iOmlmKEt0PT1MbilyZXR1cm4hMDticmVhaztjYXNlIj4iOmlmKEt0PkxuKXJldHVybiEwO2JyZWFrO2Nhc2UiPCI6aWYoS3Q8TG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYoS3QhPUxuKXJldHVybiEw'@;
put 'O2JyZWFrO2Nhc2UiPj0iOmlmKEt0Pj1MbilyZXR1cm4hMDticmVhaztjYXNlIjw9IjppZihLdDw9TG4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbnUoS3QsZ24sTG4pe251bGw9PUxuJiYoTG49e30pO3ZhciBXcj0iIjtzd2l0Y2godHlwZW9mIEt0KXtjYXNlInN0cmluZyI6V3I9Im0v'@;
put 'ZC95eSI9PUt0JiZMbi5kYXRlTkY/TG4uZGF0ZU5GOkt0O2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oV3I9MTQ9PUt0JiZMbi5kYXRlTkY/TG4uZGF0ZU5GOihudWxsIT1Mbi50YWJsZT9Mbi50YWJsZTpidClbS3RdKSYmKFdyPUxuLnRhYmxlJiZMbi50YWJsZVtGdFtLdF1dfHxidFtGdFtL'@;
put 'dF1dKSxudWxsPT1XciYmKFdyPVR0W0t0XXx8IkdlbmVyYWwiKX1pZihHZShXciwwKSlyZXR1cm4gamkoZ24sTG4pO2duIGluc3RhbmNlb2YgRGF0ZSYmKGduPXpuKGduLExuLmRhdGUxOTA0KSk7dmFyIFhuPWZ1bmN0aW9uIGdsKEt0LGduKXt2YXIgTG49eG8oS3QpLFdyPUxuLmxlbmd0aCxY'@;
put 'bj1MbltXci0xXS5pbmRleE9mKCJAIik7aWYoV3I8NCYmWG4+LTEmJi0tV3IsTG4ubGVuZ3RoPjQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZmluZCByaWdodCBmb3JtYXQgZm9yIHwiK0xuLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgZ24pcmV0dXJuWzQsND09PUxuLmxl'@;
put 'bmd0aHx8WG4+LTE/TG5bTG4ubGVuZ3RoLTFdOiJAIl07c3dpdGNoKExuLmxlbmd0aCl7Y2FzZSAxOkxuPVhuPi0xP1siR2VuZXJhbCIsIkdlbmVyYWwiLCJHZW5lcmFsIixMblswXV06W0xuWzBdLExuWzBdLExuWzBdLCJAIl07YnJlYWs7Y2FzZSAyOkxuPVhuPi0xP1tMblswXSxMblswXSxM'@;
put 'blswXSxMblsxXV06W0xuWzBdLExuWzFdLExuWzBdLCJAIl07YnJlYWs7Y2FzZSAzOkxuPVhuPi0xP1tMblswXSxMblsxXSxMblswXSxMblsyXV06W0xuWzBdLExuWzFdLExuWzJdLCJAIl19dmFyIGVpPWduPjA/TG5bMF06Z248MD9MblsxXTpMblsyXTtpZigtMT09PUxuWzBdLmluZGV4T2Yo'@;
put 'IlsiKSYmLTE9PT1MblsxXS5pbmRleE9mKCJbIikpcmV0dXJuW1dyLGVpXTtpZihudWxsIT1MblswXS5tYXRjaCh5cyl8fG51bGwhPUxuWzFdLm1hdGNoKHlzKSl7dmFyIGlyPUxuWzBdLm1hdGNoKEVsKSxyaT1MblsxXS5tYXRjaChFbCk7cmV0dXJuIHNsKGduLGlyKT9bV3IsTG5bMF1dOnNs'@;
put 'KGduLHJpKT9bV3IsTG5bMV1dOltXcixMbltudWxsIT1pciYmbnVsbCE9cmk/MjoxXV19cmV0dXJuW1dyLGVpXX0oV3IsZ24pO2lmKEdlKFhuWzFdKSlyZXR1cm4gamkoZ24sTG4pO2lmKCEwPT09Z24pZ249IlRSVUUiO2Vsc2UgaWYoITE9PT1nbilnbj0iRkFMU0UiO2Vsc2UgaWYoIiI9PT1n'@;
put 'bnx8bnVsbD09Z24pcmV0dXJuIiI7cmV0dXJuIE1uKFhuWzFdLGduLExuLFhuWzBdKX1mdW5jdGlvbiB0bChLdCxnbil7aWYoIm51bWJlciIhPXR5cGVvZiBnbil7Z249K2dufHwtMTtmb3IodmFyIExuPTA7TG48MzkyOysrTG4paWYobnVsbCE9YnRbTG5dKXtpZihidFtMbl09PUt0KXtnbj1M'@;
put 'bjticmVha319ZWxzZSBnbjwwJiYoZ249TG4pO2duPDAmJihnbj0zOTEpfXJldHVybiBidFtnbl09S3QsZ259UC5sb2FkPXRsLFAuX3RhYmxlPWJ0LFAuZ2V0X3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGJ0fSxQLmxvYWRfdGFibGU9ZnVuY3Rpb24oZ24pe2Zvcih2YXIgTG49MDszOTIhPUxu'@;
put 'OysrTG4pdm9pZCAwIT09Z25bTG5dJiZ0bChnbltMbl0sTG4pfSxQLmluaXRfdGFibGU9Y3QsUC5mb3JtYXQ9bnUsUC5nZXRsb2NhbGU9ZnVuY3Rpb24gdnIoKXtyZXR1cm4ga258fCJlbi1VUyJ9LFAuc2V0bG9jYWxlPWZ1bmN0aW9uIHJyKEt0KXtpZihmdW5jdGlvbiBwcihLdCl7dmFyIGdu'@;
put 'PTA7c3dpdGNoKChrbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNhc2UiemgtY24iOmNhc2UiamEtanAiOmNhc2Uia28ta3IiOmZvcihnbj0yNztnbjw9MzY7KytnbilkZWxldGUgS3RbZ25dO2Zvcihnbj01MDtnbjw9NTg7KytnbilkZWxldGUgS3RbZ25dO2JyZWFrO2Nhc2Ui'@;
put 'dGgtdGgiOmZvcihnbj01OTtnbjw9NjI7KytnbilkZWxldGUgS3RbZ25dO2Zvcihnbj02Nztnbjw9ODE7KytnbilkZWxldGUgS3RbZ25dfX0oYnQpLGtuPUt0LFNuKGJ0KSx0eXBlb2YgSW50bDwidSIpe3ZhciBnbj1JbnRsLkRhdGVUaW1lRm9ybWF0KEt0KTtpZihnbi5mb3JtYXRUb1BhcnRz'@;
put 'KXtmb3IodmFyIExuPWduLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUsMCwwLDApKSxXcj0wO1dyPDc7KytXcilkdFtXcl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7d2Vla2RheToibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K1dyLDAsMCwwKSlb'@;
put 'MF0udmFsdWUsZHRbV3JdWzBdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse3dlZWtkYXk6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUrV3IsMCwwLDApKVswXS52YWx1ZTtmb3IodmFyIFhuPTA7WG48MTI7KytYbilDdFtYbl1bMl09SW50bC5EYXRlVGltZUZvcm1h'@;
put 'dChLdCx7bW9udGg6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLFhuLDIsMCwwLDApKVswXS52YWx1ZSxDdFtYbl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7bW9udGg6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxYbiwyLDAsMCwwKSlbMF0u'@;
put 'dmFsdWUsQ3RbWG5dWzBdPUN0W1huXVsxXS5zbGljZSgwLDEpO2Zvcih2YXIgZWk9IiIsaXI9MDtpcjxMbi5sZW5ndGg7Kytpcil7dmFyIHJpPUxuW2lyXS52YWx1ZTtzd2l0Y2goTG5baXJdLnR5cGUpe2Nhc2UieWVhciI6ZWkrPTI9PXJpLmxlbmd0aD8ieXkiOiJ5eXl5IjticmVhaztjYXNl'@;
put 'Im1vbnRoIjplaSs9IjEiPT1yaT8ibSI6IjAxIj09cmk/Im1tIjpyaT09Q3RbMF1bMV0/Im1tbSI6cmk9PUN0WzBdWzJdPyJtbW1tIjpyaT09Q3RbMF1bMF0/Im1tbW1tIjoibW0iO2JyZWFrO2Nhc2UiZGF5IjplaSs9IjUiPT1yaT8iZCI6IjA1Ij09cmk/ImRkIjpyaT09ZHRbMF1bMF0/ImRk'@;
put 'ZCI6cmk9PWR0WzBdWzFdPyJkZGRkIjoiZGQiO2JyZWFrO2Nhc2UibGl0ZXJhbCI6ZWkrPXJpLnJlcGxhY2UoLy4vZywiXFwkJiIpLDE9PXJpLmxlbmd0aCYmKEFuPXJpKX19KEt0Lm1hdGNoKC9lbi9pKSYmS3QubWF0Y2goL3VzL2kpfHwhS3QpJiYoZWk9Im0vZC95eSIpLGJ0WzE0XT1laX1l'@;
put 'bHNlImphLWpwIj09S3QudG9Mb3dlckNhc2UoKSYmKGJ0WzE0XT0ieXl5eVxcL21cXC9kIik7dmFyIG1vPUludGwuTnVtYmVyRm9ybWF0KEt0LHt9KS5mb3JtYXQoMTIzNDU2Ny44OSk7bW8mJihRcj0obW8ubWF0Y2goLzEoLiopMi8pfHxbXSlbMV0sdXI9KG1vLm1hdGNoKC83KC4qKTgvKXx8'@;
put 'W10pWzFdKX1lcltLdC50b0xvd2VyQ2FzZSgpXXx8KGVyW0t0LnRvTG93ZXJDYXNlKCldPXsiLiI6dXIsIiwiOlFyfSksWm49bnQodHI9ZXJbS3QudG9Mb3dlckNhc2UoKV18fGVyWyJlbi11cyJdKX0sUC5ub3JtYWxpemU9ZnVuY3Rpb24gTXMoS3Qpe2Zvcih2YXIgZ249MCxMbj0wLFdyPSIi'@;
put 'LFhuPSIiLGVpPSIiLGlyPXRyLnl8fCJ5IixyaT1pci50b1VwcGVyQ2FzZSgpLG1vPXRyLmR8fCJkIixpaT1tby50b1VwcGVyQ2FzZSgpLHppPXRyWyIuIl0sSnI9dHJbIiwiXSx3cz0iMCM/RSstJSIrdHJbIiwiXSt6aTtnbjxLdC5sZW5ndGg7KXN3aXRjaChXcj1LdC5jaGFyQXQoZ24pKXtj'@;
put 'YXNlIkciOmduKyssZWkrPVdyO2JyZWFrO2Nhc2UnIic6Zm9yKGVpKz1XcjszNCE9PShMbj1LdC5jaGFyQ29kZUF0KCsrZ24pKSYmZ248S3QubGVuZ3RoOyllaSs9U3RyaW5nLmZyb21DaGFyQ29kZShMbik7ZWkrPSciJywrK2duO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6ZWkrPUt0LnNsaWNl'@;
put 'KGduLGduKzIpLGduKz0yO2JyZWFrO2Nhc2UiQCI6ZWkrPVdyLCsrZ247YnJlYWs7Y2FzZSJCIjpjYXNlImIiOisrZ24sZWkrPVdyO2JyZWFrO2Nhc2UgaXI6Y2FzZSByaTpjYXNlIG1vOmNhc2UgaWk6ZWkrPVpuW1dyLnRvTG93ZXJDYXNlKCldLCsrZ247YnJlYWs7Y2FzZSJNIjpjYXNlIkgi'@;
put 'OmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJBIjpjYXNlImEiOmVpKz1XciwrK2duO2JyZWFrO2Nhc2UiWyI6Zm9yKFhuPVdyOyJdIiE9PUt0LmNoYXJBdChnbisrKSYmZ248S3QubGVuZ3RoOylYbis9S3QuY2hhckF0KGduKTtl'@;
put 'aSs9WG47YnJlYWs7Y2FzZSBKcjplaSs9JyInK1dyKyciJywrK2duO2JyZWFrO2Nhc2Ugemk6aWYoIShnbjxLdC5sZW5ndGgmJih3cy5pbmRleE9mKFdyPUt0LmNoYXJBdCgrK2duKSk+LTF8fCJcXCI9PVdyJiYiLSI9PUt0LmNoYXJBdChnbisxKSYmIjAjIi5pbmRleE9mKEt0LmNoYXJBdChn'@;
put 'bisyKSk+LTEpKSl7ZWkrPSciJyt6aSsnIic7YnJlYWt9V3I9emksLS1nbjtjYXNlIjAiOmNhc2UiIyI6Zm9yKGVpKz1abltXci50b0xvd2VyQ2FzZSgpXXx8V3I7Z248S3QubGVuZ3RoJiYod3MuaW5kZXhPZihXcj1LdC5jaGFyQXQoKytnbikpPi0xfHwiXFwiPT1XciYmIi0iPT1LdC5jaGFy'@;
put 'QXQoZ24rMSkmJiIwIyIuaW5kZXhPZihLdC5jaGFyQXQoZ24rMikpPi0xKTspZWkrPVpuW1dyLnRvTG93ZXJDYXNlKCldfHxXcjticmVhaztjYXNlIj8iOmZvcihlaSs9V3I7S3QuY2hhckF0KCsrZ24pPT09V3I7KWVpKz1XcjticmVhaztjYXNlIioiOmVpKz1XciwrK2duLCgiICI9PUt0LmNo'@;
put 'YXJBdChnbil8fCIqIj09S3QuY2hhckF0KGduKSkmJihlaSs9S3QuY2hhckF0KGduKSwrK2duKTticmVhaztjYXNlIigiOmNhc2UiKSI6ZWkrPVdyLCsrZ247YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2Ui'@;
put 'OSI6Zm9yKGVpKz1XcjtnbjxLdC5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKEt0LmNoYXJBdCgrK2duKSk+LTE7KWVpKz1LdC5jaGFyQXQoZ24pO2JyZWFrO2RlZmF1bHQ6ZWkrPVdyLCsrZ259cmV0dXJuIGVpfSxQLmdldGN1cnJlbmN5PWZ1bmN0aW9uIGtpKCl7cmV0dXJuIG9pfHwi'@;
put 'VVNEIn0sUC5zZXRjdXJyZW5jeT1mdW5jdGlvbiBMaShLdCl7b2k9S3QsVnI9dHlwZW9mIEludGw8InUiP0ludGwuTnVtYmVyRm9ybWF0KGtuLHtzdHlsZToiY3VycmVuY3kiLGN1cnJlbmN5RGlzcGxheToic3ltYm9sIixjdXJyZW5jeTpLdH0pLmZvcm1hdCgwKS5yZXBsYWNlKC9bMFwuXCxc'@;
put 'c10vZywiIik6IiQifX07Sih3KTt2YXIgT2UsbmU9eyJHZW5lcmFsIE51bWJlciI6IkdlbmVyYWwiLCJHZW5lcmFsIERhdGUiOncuX3RhYmxlWzIyXSwiTG9uZyBEYXRlIjoiZGRkZCwgbW1tbSBkZCwgeXl5eSIsIk1lZGl1bSBEYXRlIjp3Ll90YWJsZVsxNV0sIlNob3J0IERhdGUiOncuX3Rh'@;
put 'YmxlWzE0XSwiTG9uZyBUaW1lIjp3Ll90YWJsZVsxOV0sIk1lZGl1bSBUaW1lIjp3Ll90YWJsZVsxOF0sIlNob3J0IFRpbWUiOncuX3RhYmxlWzIwXSxDdXJyZW5jeTonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxGaXhlZDp3Ll90YWJsZVsyXSxTdGFuZGFyZDp3Ll90'@;
put 'YWJsZVs0XSxQZXJjZW50OncuX3RhYmxlWzEwXSxTY2llbnRpZmljOncuX3RhYmxlWzExXSwiWWVzL05vIjonIlllcyI7IlllcyI7Ik5vIjtAJywiVHJ1ZS9GYWxzZSI6JyJUcnVlIjsiVHJ1ZSI7IkZhbHNlIjtAJywiT24vT2ZmIjonIlllcyI7IlllcyI7Ik5vIjtAJ30sZGU9ezU6JyIkIiMs'@;
put 'IyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJH'@;
put 'ZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCog'@;
put 'KCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtfKCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywj'@;
put 'IzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9kL3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIs'@;
put 'NjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIw'@;
put 'JSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIs'@;
put 'ODE6Im1tc3MuMCJ9LGZlPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2c7IWZ1bmN0aW9uKHkpe3kudmVyc2lvbj0iMS4yLjAiO3ZhciBMPWZ1bmN0aW9uIFAoKXtmb3IodmFyIHZlPTAsU2U9bmV3IEFycmF5KDI1NiksSGU9MDsyNTYhPUhlOysrSGUpU2VbSGVdPXZlPTEmKHZl'@;
put 'PTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPUhlKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+'@;
put 'Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MTtyZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KFNlKTpTZX0oKTt5LnRhYmxlPUwseS5ic3RyPWZ1bmN0'@;
put 'aW9uIFEodmUsU2Upe2Zvcih2YXIgSGU9LTFeU2UsQmU9dmUubGVuZ3RoLTEsR2U9MDtHZTxCZTspSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVedmUuY2hhckNvZGVBdChHZSsrKSldKT4+PjheTFsyNTUmKEhlXnZlLmNoYXJDb2RlQXQoR2UrKykpXTtyZXR1cm4gR2U9PT1CZSYmKEhlPUhlPj4+'@;
put 'OF5MWzI1NSYoSGVedmUuY2hhckNvZGVBdChHZSkpXSksLTFeSGV9LHkuYnVmPWZ1bmN0aW9uIHJlKHZlLFNlKXtpZih2ZS5sZW5ndGg+MWU0KXJldHVybiBmdW5jdGlvbiBwZSh2ZSxTZSl7Zm9yKHZhciBIZT0tMV5TZSxCZT12ZS5sZW5ndGgtNyxHZT0wO0dlPEJlOylIZT0oSGU9KEhlPShI'@;
put 'ZT0oSGU9KEhlPShIZT0oSGU9SGU+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVe'@;
put 'dmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV07Zm9yKDtHZTxCZSs3OylIZT1IZT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV07cmV0dXJuLTFeSGV9KHZlLFNlKTtmb3IodmFyIEhlPS0xXlNlLEJlPXZlLmxlbmd0aC0zLEdlPTA7'@;
put 'R2U8QmU7KUhlPShIZT0oSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXTtmb3IoO0dlPEJlKzM7KUhlPUhlPj4+OF5MWzI1NSYoSGVedmVb'@;
put 'R2UrK10pXTtyZXR1cm4tMV5IZX0seS5zdHI9ZnVuY3Rpb24gX2UodmUsU2Upe2Zvcih2YXIgbnQsZHQsSGU9LTFeU2UsQmU9MCxHZT12ZS5sZW5ndGg7QmU8R2U7KShudD12ZS5jaGFyQ29kZUF0KEJlKyspKTwxMjg/SGU9SGU+Pj44XkxbMjU1JihIZV5udCldOm50PDIwNDg/SGU9KEhlPUhl'@;
put 'Pj4+OF5MWzI1NSYoSGVeKDE5MnxudD4+NiYzMSkpXSk+Pj44XkxbMjU1JihIZV4oMTI4fDYzJm50KSldOm50Pj01NTI5NiYmbnQ8NTczNDQ/KG50PTY0KygxMDIzJm50KSxkdD0xMDIzJnZlLmNoYXJDb2RlQXQoQmUrKyksSGU9KEhlPShIZT0oSGU9SGU+Pj44XkxbMjU1JihIZV4oMjQwfG50'@;
put 'Pj44JjcpKV0pPj4+OF5MWzI1NSYoSGVeKDEyOHxudD4+MiY2MykpXSk+Pj44XkxbMjU1JihIZV4oMTI4fGR0Pj42JjE1fCgzJm50KTw8NCkpXSk+Pj44XkxbMjU1JihIZV4oMTI4fDYzJmR0KSldKTpIZT0oSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVeKDIyNHxudD4+MTImMTUpKV0pPj4+OF5M'@;
put 'WzI1NSYoSGVeKDEyOHxudD4+NiY2MykpXSk+Pj44XkxbMjU1JihIZV4oMTI4fDYzJm50KSldO3JldHVybi0xXkhlfX0oT2U9e30pO3ZhciBXZSxqZT1mdW5jdGlvbigpe3ZhciBTZSxQPXt9O2Z1bmN0aW9uIFEobm4pe2lmKCIvIj09bm4uY2hhckF0KG5uLmxlbmd0aC0xKSlyZXR1cm4tMT09'@;
put 'PW5uLnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9ubjpRKG5uLnNsaWNlKDAsLTEpKTt2YXIgX249bm4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PV9uP25uOm5uLnNsaWNlKDAsX24rMSl9ZnVuY3Rpb24gcmUobm4pe2lmKCIvIj09bm4uY2hhckF0KG5uLmxlbmd0aC0xKSlyZXR1cm4g'@;
put 'cmUobm4uc2xpY2UoMCwtMSkpO3ZhciBfbj1ubi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09X24/bm46bm4uc2xpY2UoX24rMSl9ZnVuY3Rpb24gcGUobm4sX24peyJzdHJpbmciPT10eXBlb2YgX24mJihfbj1uZXcgRGF0ZShfbikpO3ZhciBhbj1fbi5nZXRIb3VycygpO2FuPShhbj1h'@;
put 'bjw8Nnxfbi5nZXRNaW51dGVzKCkpPDw1fF9uLmdldFNlY29uZHMoKT4+PjEsbm4ud3JpdGVfc2hpZnQoMixhbik7dmFyIFZ0PV9uLmdldEZ1bGxZZWFyKCktMTk4MDtWdD0oVnQ9VnQ8PDR8X24uZ2V0TW9udGgoKSsxKTw8NXxfbi5nZXREYXRlKCksbm4ud3JpdGVfc2hpZnQoMixWdCl9ZnVu'@;
put 'Y3Rpb24gdmUobm4pe29sKG5uLDApO2Zvcih2YXIgX249e30sYW49MDtubi5sPD1ubi5sZW5ndGgtNDspe3ZhciBWdD1ubi5yZWFkX3NoaWZ0KDIpLFd0PW5uLnJlYWRfc2hpZnQoMiksZG49bm4ubCtXdCxUbj17fTsyMTU4OT09PVZ0JiYoMSYoYW49bm4ucmVhZF9zaGlmdCgxKSkmJihUbi5t'@;
put 'dGltZT1ubi5yZWFkX3NoaWZ0KDQpKSxXdD41JiYoMiZhbiYmKFRuLmF0aW1lPW5uLnJlYWRfc2hpZnQoNCkpLDQmYW4mJihUbi5jdGltZT1ubi5yZWFkX3NoaWZ0KDQpKSksVG4ubXRpbWUmJihUbi5tdD1uZXcgRGF0ZSgxZTMqVG4ubXRpbWUpKSksbm4ubD1kbixfbltWdF09VG59cmV0dXJu'@;
put 'IF9ufWZ1bmN0aW9uIEhlKCl7cmV0dXJuIFNlfHwoU2U9Rig3ODc3MykpfWZ1bmN0aW9uIEJlKG5uLF9uKXtpZig4MD09bm5bMF0mJjc1PT1ublsxXSlyZXR1cm4gSnIobm4sX24pO2lmKG5uLmxlbmd0aDw1MTIpdGhyb3cgbmV3IEVycm9yKCJDRkIgZmlsZSBzaXplICIrbm4ubGVuZ3RoKyIg'@;
put 'PCA1MTIiKTt2YXIgYW4sV3QsZG4sVG4sbnIsYnIsVnQ9NTEyLHpyPVtdLExyPW5uLnNsaWNlKDAsNTEyKTtvbChMciwwKTt2YXIgeGk9ZnVuY3Rpb24gR2Uobm4pe2lmKDgwPT1ubltubi5sXSYmNzU9PW5uW25uLmwrMV0pcmV0dXJuWzAsMF07bm4uY2hrKFZyLCJIZWFkZXIgU2lnbmF0dXJl'@;
put 'OiAiKSxubi5sKz0xNjt2YXIgX249bm4ucmVhZF9zaGlmdCgyLCJ1Iik7cmV0dXJuW25uLnJlYWRfc2hpZnQoMiwidSIpLF9uXX0oTHIpO3N3aXRjaChhbj14aVswXSl7Y2FzZSAzOlZ0PTUxMjticmVhaztjYXNlIDQ6VnQ9NDA5NjticmVhaztjYXNlIDA6aWYoMD09eGlbMV0pcmV0dXJuIEpy'@;
put 'KG5uLF9uKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiTWFqb3IgVmVyc2lvbjogRXhwZWN0ZWQgMyBvciA0IHNhdyAiK2FuKX01MTIhPT1WdCYmb2woTHI9bm4uc2xpY2UoMCxWdCksMjgpO3ZhciBjaT1ubi5zbGljZSgwLFZ0KTshZnVuY3Rpb24gbnQobm4sX24pe3ZhciBhbjtzd2l0Y2go'@;
put 'bm4ubCs9Mixhbj1ubi5yZWFkX3NoaWZ0KDIpKXtjYXNlIDk6aWYoMyE9X24pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgc2F3ICIrYW4pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9X24pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDEyIHNh'@;
put 'dyAiK2FuKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IG9yIDEyIHNhdyAiK2FuKX1ubi5jaGsoIjA2MDAiLCJNaW5pIFNlY3RvciBTaGlmdDogIiksbm4uY2hrKCIwMDAwMDAwMDAwMDAiLCJSZXNlcnZlZDogIil9KExyLGFuKTt2YXIg'@;
put 'Q289THIucmVhZF9zaGlmdCg0LCJpIik7aWYoMz09PWFuJiYwIT09Q28pdGhyb3cgbmV3IEVycm9yKCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK0NvKTtMci5sKz00LFRuPUxyLnJlYWRfc2hpZnQoNCwiaSIpLExyLmwrPTQsTHIuY2hrKCIwMDEwMDAwMCIsIk1pbmkg'@;
put 'U3RyZWFtIEN1dG9mZiBTaXplOiAiKSxucj1Mci5yZWFkX3NoaWZ0KDQsImkiKSxXdD1Mci5yZWFkX3NoaWZ0KDQsImkiKSxicj1Mci5yZWFkX3NoaWZ0KDQsImkiKSxkbj1Mci5yZWFkX3NoaWZ0KDQsImkiKTtmb3IodmFyIHBvPS0xLFZpPTA7Vmk8MTA5JiYhKChwbz1Mci5yZWFkX3NoaWZ0'@;
put 'KDQsImkiKSk8MCk7KytWaSl6cltWaV09cG87dmFyIFVvPWZ1bmN0aW9uIGR0KG5uLF9uKXtmb3IodmFyIGFuPU1hdGguY2VpbChubi5sZW5ndGgvX24pLTEsVnQ9W10sV3Q9MTtXdDxhbjsrK1d0KVZ0W1d0LTFdPW5uLnNsaWNlKFd0Kl9uLChXdCsxKSpfbik7cmV0dXJuIFZ0W2FuLTFdPW5u'@;
put 'LnNsaWNlKGFuKl9uKSxWdH0obm4sVnQpO2J0KGJyLGRuLFVvLFZ0LHpyKTt2YXIgdGk9ZnVuY3Rpb24gRXQobm4sX24sYW4sVnQpe3ZhciBXdD1ubi5sZW5ndGgsZG49W10sVG49W10sbnI9W10sYnI9W10senI9VnQtMSxMcj0wLHhpPTAsY2k9MCxDbz0wO2ZvcihMcj0wO0xyPFd0OysrTHIp'@;
put 'aWYobnI9W10sKGNpPUxyK19uKT49V3QmJihjaS09V3QpLCFUbltjaV0pe2JyPVtdO3ZhciBwbz1bXTtmb3IoeGk9Y2k7eGk+PTA7KXtwb1t4aV09ITAsVG5beGldPSEwLG5yW25yLmxlbmd0aF09eGksYnIucHVzaChublt4aV0pO3ZhciBWaT1hbltNYXRoLmZsb29yKDQqeGkvVnQpXTtpZihW'@;
put 'dDw0KyhDbz00KnhpJnpyKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK3hpKyIgNCAiK1Z0KTtpZighbm5bVmldfHxwb1t4aT1vcyhubltWaV0sQ28pXSlicmVha31kbltjaV09e25vZGVzOm5yLGRhdGE6U2EoW2JyXSl9fXJldHVybiBkbn0oVW8sVG4senIsVnQp'@;
put 'O3RpW1RuXS5uYW1lPSIhRGlyZWN0b3J5IixXdD4wJiZuciE9PVpuJiYodGlbbnJdLm5hbWU9IiFNaW5pRkFUIiksdGlbenJbMF1dLm5hbWU9IiFGQVQiLHRpLmZhdF9hZGRycz16cix0aS5zc3o9VnQ7dmFyIGxjPVtdLE51PVtdLFY2PVtdOyhmdW5jdGlvbiBUdChubixfbixhbixWdCxXdCxk'@;
put 'bixUbixucil7Zm9yKHZhciBDbyxicj0wLHpyPVZ0Lmxlbmd0aD8yOjAsTHI9X25bbm5dLmRhdGEseGk9MCxjaT0wO3hpPExyLmxlbmd0aDt4aSs9MTI4KXt2YXIgcG89THIuc2xpY2UoeGkseGkrMTI4KTtvbChwbyw2NCksY2k9cG8ucmVhZF9zaGlmdCgyKSxDbz1FdShwbywwLGNpLXpyKSxW'@;
put 'dC5wdXNoKENvKTt2YXIgVmk9e25hbWU6Q28sdHlwZTpwby5yZWFkX3NoaWZ0KDEpLGNvbG9yOnBvLnJlYWRfc2hpZnQoMSksTDpwby5yZWFkX3NoaWZ0KDQsImkiKSxSOnBvLnJlYWRfc2hpZnQoNCwiaSIpLEM6cG8ucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6cG8ucmVhZF9zaGlmdCgxNiks'@;
put 'c3RhdGU6cG8ucmVhZF9zaGlmdCg0LCJpIiksc3RhcnQ6MCxzaXplOjB9OzAhPT1wby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpJiYoVmkuY3Q9WnQocG8scG8ubC04KSksMCE9PXBvLnJlYWRfc2hpZnQoMikrcG8ucmVh'@;
put 'ZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikmJihWaS5tdD1adChwbyxwby5sLTgpKSxWaS5zdGFydD1wby5yZWFkX3NoaWZ0KDQsImkiKSxWaS5zaXplPXBvLnJlYWRfc2hpZnQoNCwiaSIpLFZpLnNpemU8MCYmVmkuc3RhcnQ8MCYmKFZpLnNpemU9VmkudHlw'@;
put 'ZT0wLFZpLnN0YXJ0PVpuLFZpLm5hbWU9IiIpLDU9PT1WaS50eXBlPyhicj1WaS5zdGFydCxXdD4wJiZiciE9PVpuJiYoX25bYnJdLm5hbWU9IiFTdHJlYW1EYXRhIikpOlZpLnNpemU+PTQwOTY/KFZpLnN0b3JhZ2U9ImZhdCIsdm9pZCAwPT09X25bVmkuc3RhcnRdJiYoX25bVmkuc3RhcnRd'@;
put 'PUZ0KGFuLFZpLnN0YXJ0LF9uLmZhdF9hZGRycyxfbi5zc3opKSxfbltWaS5zdGFydF0ubmFtZT1WaS5uYW1lLFZpLmNvbnRlbnQ9X25bVmkuc3RhcnRdLmRhdGEuc2xpY2UoMCxWaS5zaXplKSk6KFZpLnN0b3JhZ2U9Im1pbmlmYXQiLFZpLnNpemU8MD9WaS5zaXplPTA6YnIhPT1abiYmVmku'@;
put 'c3RhcnQhPT1abiYmX25bYnJdJiYoVmkuY29udGVudD1jdChWaSxfblticl0uZGF0YSwoX25bbnJdfHx7fSkuZGF0YSkpKSxWaS5jb250ZW50JiZvbChWaS5jb250ZW50LDApLGRuW0NvXT1WaSxUbi5wdXNoKFZpKX19KShUbix0aSxVbyxsYyxXdCx7fSxOdSxuciksZnVuY3Rpb24gQ3Qobm4s'@;
put 'X24sYW4pe2Zvcih2YXIgVnQ9MCxXdD0wLGRuPTAsVG49MCxucj0wLGJyPWFuLmxlbmd0aCx6cj1bXSxMcj1bXTtWdDxicjsrK1Z0KXpyW1Z0XT1McltWdF09VnQsX25bVnRdPWFuW1Z0XTtmb3IoO25yPExyLmxlbmd0aDsrK25yKVd0PW5uW1Z0PUxyW25yXV0uTCxkbj1ubltWdF0uUixUbj1u'@;
put 'bltWdF0uQyx6cltWdF09PT1WdCYmKC0xIT09V3QmJnpyW1d0XSE9PVd0JiYoenJbVnRdPXpyW1d0XSksLTEhPT1kbiYmenJbZG5dIT09ZG4mJih6cltWdF09enJbZG5dKSksLTEhPT1UbiYmKHpyW1RuXT1WdCksLTEhPT1XdCYmVnQhPXpyW1Z0XSYmKHpyW1d0XT16cltWdF0sTHIubGFzdElu'@;
put 'ZGV4T2YoV3QpPG5yJiZMci5wdXNoKFd0KSksLTEhPT1kbiYmVnQhPXpyW1Z0XSYmKHpyW2RuXT16cltWdF0sTHIubGFzdEluZGV4T2YoZG4pPG5yJiZMci5wdXNoKGRuKSk7Zm9yKFZ0PTE7VnQ8YnI7KytWdCl6cltWdF09PT1WdCYmKC0xIT09ZG4mJnpyW2RuXSE9PWRuP3pyW1Z0XT16cltk'@;
put 'bl06LTEhPT1XdCYmenJbV3RdIT09V3QmJih6cltWdF09enJbV3RdKSk7Zm9yKFZ0PTE7VnQ8YnI7KytWdClpZigwIT09bm5bVnRdLnR5cGUpe2lmKChucj1WdCkhPXpyW25yXSlkb3tfbltWdF09X25bbnI9enJbbnJdXSsiLyIrX25bVnRdfXdoaWxlKDAhPT1uciYmLTEhPT16cltucl0mJm5y'@;
put 'IT16cltucl0pO3pyW1Z0XT0tMX1mb3IoX25bMF0rPSIvIixWdD0xO1Z0PGJyOysrVnQpMiE9PW5uW1Z0XS50eXBlJiYoX25bVnRdKz0iLyIpfShOdSxWNixsYyksbGMuc2hpZnQoKTt2YXIgd2Y9e0ZpbGVJbmRleDpOdSxGdWxsUGF0aHM6VjZ9O3JldHVybiBfbiYmX24ucmF3JiYod2YucmF3'@;
put 'PXtoZWFkZXI6Y2ksc2VjdG9yczpVb30pLHdmfWZ1bmN0aW9uIGN0KG5uLF9uLGFuKXtmb3IodmFyIFd0PW5uLnNpemUsZG49W10sVG49bm4uc3RhcnQ7YW4mJld0PjAmJlRuPj0wOylkbi5wdXNoKF9uLnNsaWNlKFRuKnRyLFRuKnRyK3RyKSksV3QtPXRyLFRuPW9zKGFuLDQqVG4pO3JldHVy'@;
put 'biAwPT09ZG4ubGVuZ3RoP2ZyKDApOlMoZG4pLnNsaWNlKDAsbm4uc2l6ZSl9ZnVuY3Rpb24gYnQobm4sX24sYW4sVnQsV3Qpe3ZhciBkbj1abjtpZihubj09PVpuKXtpZigwIT09X24pdGhyb3cgbmV3IEVycm9yKCJESUZBVCBjaGFpbiBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQiKX1lbHNlIGlm'@;
put 'KC0xIT09bm4pe3ZhciBUbj1hbltubl0sbnI9KFZ0Pj4+MiktMTtpZighVG4pcmV0dXJuO2Zvcih2YXIgYnI9MDticjxuciYmKGRuPW9zKFRuLDQqYnIpKSE9PVpuOysrYnIpV3QucHVzaChkbik7YnQob3MoVG4sVnQtNCksX24tMSxhbixWdCxXdCl9fWZ1bmN0aW9uIEZ0KG5uLF9uLGFuLFZ0'@;
put 'LFd0KXt2YXIgZG49W10sVG49W107V3R8fChXdD1bXSk7dmFyIG5yPVZ0LTEsYnI9MCx6cj0wO2Zvcihicj1fbjticj49MDspe1d0W2JyXT0hMCxkbltkbi5sZW5ndGhdPWJyLFRuLnB1c2gobm5bYnJdKTt2YXIgTHI9YW5bTWF0aC5mbG9vcig0KmJyL1Z0KV07aWYoVnQ8NCsoenI9NCpiciZu'@;
put 'cikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIiticisiIDQgIitWdCk7aWYoIW5uW0xyXSlicmVhazticj1vcyhubltMcl0senIpfXJldHVybntub2RlczpkbixkYXRhOlNhKFtUbl0pfX1mdW5jdGlvbiBadChubixfbil7cmV0dXJuIG5ldyBEYXRlKDFlMyooeWko'@;
put 'bm4sX24rNCkvMWU3Kk1hdGgucG93KDIsMzIpK3lpKG5uLF9uKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiB1bihubixfbil7dmFyIGFuPV9ufHx7fSxWdD1hbi5yb290fHwiUm9vdCBFbnRyeSI7aWYobm4uRnVsbFBhdGhzfHwobm4uRnVsbFBhdGhzPVtdKSxubi5GaWxlSW5kZXh8fChu'@;
put 'bi5GaWxlSW5kZXg9W10pLG5uLkZ1bGxQYXRocy5sZW5ndGghPT1ubi5GaWxlSW5kZXgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaW5jb25zaXN0ZW50IENGQiBzdHJ1Y3R1cmUiKTswPT09bm4uRnVsbFBhdGhzLmxlbmd0aCYmKG5uLkZ1bGxQYXRoc1swXT1WdCsiLyIsbm4uRmlsZUluZGV4'@;
put 'WzBdPXtuYW1lOlZ0LHR5cGU6NX0pLGFuLkNMU0lEJiYobm4uRmlsZUluZGV4WzBdLmNsc2lkPWFuLkNMU0lEKSxmdW5jdGlvbiBxbihubil7dmFyIF9uPSJceDAxU2gzM3RKNSI7aWYoIWplLmZpbmQobm4sIi8iK19uKSl7dmFyIGFuPWZyKDQpO2FuWzBdPTU1LGFuWzFdPWFuWzNdPTUwLGFu'@;
put 'WzJdPTU0LG5uLkZpbGVJbmRleC5wdXNoKHtuYW1lOl9uLHR5cGU6Mixjb250ZW50OmFuLHNpemU6NCxMOjY5LFI6NjksQzo2OX0pLG5uLkZ1bGxQYXRocy5wdXNoKG5uLkZ1bGxQYXRoc1swXStfbiksem4obm4pfX0obm4pfWZ1bmN0aW9uIHpuKG5uLF9uKXt1bihubik7Zm9yKHZhciBhbj0h'@;
put 'MSxWdD0hMSxXdD1ubi5GdWxsUGF0aHMubGVuZ3RoLTE7V3Q+PTA7LS1XdCl7dmFyIGRuPW5uLkZpbGVJbmRleFtXdF07c3dpdGNoKGRuLnR5cGUpe2Nhc2UgMDpWdD9hbj0hMDoobm4uRmlsZUluZGV4LnBvcCgpLG5uLkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNl'@;
put 'IDU6VnQ9ITAsaXNOYU4oZG4uUipkbi5MKmRuLkMpJiYoYW49ITApLGRuLlI+LTEmJmRuLkw+LTEmJmRuLlI9PWRuLkwmJihhbj0hMCk7YnJlYWs7ZGVmYXVsdDphbj0hMH19aWYoYW58fF9uKXt2YXIgVG49bmV3IERhdGUoMTk4NywxLDE5KSxucj0wLGJyPVtdO2ZvcihXdD0wO1d0PG5uLkZ1'@;
put 'bGxQYXRocy5sZW5ndGg7KytXdCkwIT09bm4uRmlsZUluZGV4W1d0XS50eXBlJiZici5wdXNoKFtubi5GdWxsUGF0aHNbV3RdLG5uLkZpbGVJbmRleFtXdF1dKTtmb3IoV3Q9MDtXdDxici5sZW5ndGg7KytXdCl7dmFyIHpyPVEoYnJbV3RdWzBdKTtmb3IoVnQ9ITEsbnI9MDtucjxici5sZW5n'@;
put 'dGg7Kytucilicltucl1bMF09PT16ciYmKFZ0PSEwKTtWdHx8YnIucHVzaChbenIse25hbWU6cmUoenIpLnJlcGxhY2UoIi8iLCIiKSx0eXBlOjEsY2xzaWQ6a2ksY3Q6VG4sbXQ6VG4sY29udGVudDpudWxsfV0pfWZvcihici5zb3J0KGZ1bmN0aW9uKGNpLENvKXtyZXR1cm4gZnVuY3Rpb24g'@;
put 'TChubixfbil7Zm9yKHZhciBhbj1ubi5zcGxpdCgiLyIpLFZ0PV9uLnNwbGl0KCIvIiksV3Q9MCxkbj0wLFRuPU1hdGgubWluKGFuLmxlbmd0aCxWdC5sZW5ndGgpO1d0PFRuOysrV3Qpe2lmKGRuPWFuW1d0XS5sZW5ndGgtVnRbV3RdLmxlbmd0aClyZXR1cm4gZG47aWYoYW5bV3RdIT1WdFtX'@;
put 'dF0pcmV0dXJuIGFuW1d0XTxWdFtXdF0/LTE6MX1yZXR1cm4gYW4ubGVuZ3RoLVZ0Lmxlbmd0aH0oY2lbMF0sQ29bMF0pfSksbm4uRnVsbFBhdGhzPVtdLG5uLkZpbGVJbmRleD1bXSxXdD0wO1d0PGJyLmxlbmd0aDsrK1d0KW5uLkZ1bGxQYXRoc1tXdF09YnJbV3RdWzBdLG5uLkZpbGVJbmRl'@;
put 'eFtXdF09YnJbV3RdWzFdO2ZvcihXdD0wO1d0PGJyLmxlbmd0aDsrK1d0KXt2YXIgTHI9bm4uRmlsZUluZGV4W1d0XSx4aT1ubi5GdWxsUGF0aHNbV3RdO2lmKExyLm5hbWU9cmUoeGkpLnJlcGxhY2UoIi8iLCIiKSxMci5MPUxyLlI9THIuQz0tKExyLmNvbG9yPTEpLExyLnNpemU9THIuY29u'@;
put 'dGVudD9Mci5jb250ZW50Lmxlbmd0aDowLExyLnN0YXJ0PTAsTHIuY2xzaWQ9THIuY2xzaWR8fGtpLDA9PT1XdClMci5DPWJyLmxlbmd0aD4xPzE6LTEsTHIuc2l6ZT0wLExyLnR5cGU9NTtlbHNlIGlmKCIvIj09eGkuc2xpY2UoLTEpKXtmb3IobnI9V3QrMTtucjxici5sZW5ndGgmJlEobm4u'@;
put 'RnVsbFBhdGhzW25yXSkhPXhpOysrbnIpO2ZvcihMci5DPW5yPj1ici5sZW5ndGg/LTE6bnIsbnI9V3QrMTtucjxici5sZW5ndGgmJlEobm4uRnVsbFBhdGhzW25yXSkhPVEoeGkpOysrbnIpO0xyLlI9bnI+PWJyLmxlbmd0aD8tMTpucixMci50eXBlPTF9ZWxzZSBRKG5uLkZ1bGxQYXRoc1tX'@;
put 'dCsxXXx8IiIpPT1RKHhpKSYmKExyLlI9V3QrMSksTHIudHlwZT0yfX19ZnVuY3Rpb24ga24obm4sX24pe3ZhciBhbj1fbnx8e307aWYoem4obm4pLCJ6aXAiPT1hbi5maWxlVHlwZSlyZXR1cm4gZnVuY3Rpb24gdnMobm4sX24pe3ZhciBhbj1fbnx8e30sVnQ9W10sV3Q9W10sZG49ZnIoMSks'@;
put 'VG49YW4uY29tcHJlc3Npb24/ODowLG5yPTAsenI9MCxMcj0wLHhpPTAsY2k9MCxDbz1ubi5GdWxsUGF0aHNbMF0scG89Q28sVmk9bm4uRmlsZUluZGV4WzBdLFVvPVtdLHRpPTA7Zm9yKHpyPTE7enI8bm4uRnVsbFBhdGhzLmxlbmd0aDsrK3pyKWlmKHBvPW5uLkZ1bGxQYXRoc1t6cl0uc2xp'@;
put 'Y2UoQ28ubGVuZ3RoKSwoVmk9bm4uRmlsZUluZGV4W3pyXSkuc2l6ZSYmVmkuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9cG8pe3ZhciB6bD14aSxsYz1mcihwby5sZW5ndGgpO2ZvcihMcj0wO0xyPHBvLmxlbmd0aDsrK0xyKWxjLndyaXRlX3NoaWZ0KDEsMTI3JnBvLmNoYXJDb2RlQXQoTHIp'@;
put 'KTtsYz1sYy5zbGljZSgwLGxjLmwpLFVvW2NpXT1PZS5idWYoVmkuY29udGVudCwwKTt2YXIgTnU9VmkuY29udGVudDs4PT1UbiYmKE51PXByKE51KSksKGRuPWZyKDMwKSkud3JpdGVfc2hpZnQoNCw2NzMyNDc1MiksZG4ud3JpdGVfc2hpZnQoMiwyMCksZG4ud3JpdGVfc2hpZnQoMixuciks'@;
put 'ZG4ud3JpdGVfc2hpZnQoMixUbiksVmkubXQ/cGUoZG4sVmkubXQpOmRuLndyaXRlX3NoaWZ0KDQsMCksZG4ud3JpdGVfc2hpZnQoLTQsOCZucj8wOlVvW2NpXSksZG4ud3JpdGVfc2hpZnQoNCw4Jm5yPzA6TnUubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCg0LDgmbnI/MDpWaS5jb250ZW50Lmxl'@;
put 'bmd0aCksZG4ud3JpdGVfc2hpZnQoMixsYy5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDIsMCkseGkrPWRuLmxlbmd0aCxWdC5wdXNoKGRuKSx4aSs9bGMubGVuZ3RoLFZ0LnB1c2gobGMpLHhpKz1OdS5sZW5ndGgsVnQucHVzaChOdSksOCZuciYmKChkbj1mcigxMikpLndyaXRlX3NoaWZ0KC00'@;
put 'LFVvW2NpXSksZG4ud3JpdGVfc2hpZnQoNCxOdS5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDQsVmkuY29udGVudC5sZW5ndGgpLHhpKz1kbi5sLFZ0LnB1c2goZG4pKSwoZG49ZnIoNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0'@;
put 'KDIsMjApLGRuLndyaXRlX3NoaWZ0KDIsbnIpLGRuLndyaXRlX3NoaWZ0KDIsVG4pLGRuLndyaXRlX3NoaWZ0KDQsMCksZG4ud3JpdGVfc2hpZnQoLTQsVW9bY2ldKSxkbi53cml0ZV9zaGlmdCg0LE51Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoNCxWaS5jb250ZW50Lmxlbmd0aCksZG4ud3Jp'@;
put 'dGVfc2hpZnQoMixsYy5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoNCwwKSxkbi53cml0ZV9zaGlmdCg0LHpsKSx0aSs9ZG4ubCxXdC5wdXNoKGRuKSx0'@;
put 'aSs9bGMubGVuZ3RoLFd0LnB1c2gobGMpLCsrY2l9cmV0dXJuKGRuPWZyKDIyKSkud3JpdGVfc2hpZnQoNCwxMDEwMTAyNTYpLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLGNpKSxkbi53cml0ZV9zaGlmdCgyLGNpKSxkbi53cml0ZV9z'@;
put 'aGlmdCg0LHRpKSxkbi53cml0ZV9zaGlmdCg0LHhpKSxkbi53cml0ZV9zaGlmdCgyLDApLFMoW1MoVnQpLFMoV3QpLGRuXSl9KG5uLGFuKTt2YXIgVnQ9ZnVuY3Rpb24oQ28pe2Zvcih2YXIgcG89MCxWaT0wLFVvPTA7VW88Q28uRmlsZUluZGV4Lmxlbmd0aDsrK1VvKXt2YXIgdGk9Q28uRmls'@;
put 'ZUluZGV4W1VvXTtpZih0aS5jb250ZW50KXt2YXIgemw9dGkuY29udGVudC5sZW5ndGg7emw+MCYmKHpsPDQwOTY/cG8rPXpsKzYzPj42OlZpKz16bCs1MTE+PjkpfX1mb3IodmFyIGxjPUNvLkZ1bGxQYXRocy5sZW5ndGgrMz4+MixWNj1wbysxMjc+Pjcsd2Y9KHBvKzc+PjMpK1ZpK2xjK1Y2'@;
put 'LHFkPXdmKzEyNz4+NyxiXz1xZDw9MTA5PzA6TWF0aC5jZWlsKChxZC0xMDkpLzEyNyk7d2YrcWQrYl8rMTI3Pj43PnFkOyliXz0rK3FkPD0xMDk/MDpNYXRoLmNlaWwoKHFkLTEwOSkvMTI3KTt2YXIgUTE9WzEsYl8scWQsVjYsbGMsVmkscG8sMF07cmV0dXJuIENvLkZpbGVJbmRleFswXS5z'@;
put 'aXplPXBvPDw2LFExWzddPShDby5GaWxlSW5kZXhbMF0uc3RhcnQ9UTFbMF0rUTFbMV0rUTFbMl0rUTFbM10rUTFbNF0rUTFbNV0pKyhRMVs2XSs3Pj4zKSxRMX0obm4pLFd0PWZyKFZ0WzddPDw5KSxkbj0wLFRuPTA7Zm9yKGRuPTA7ZG48ODsrK2RuKVd0LndyaXRlX3NoaWZ0KDEsb2lbZG5d'@;
put 'KTtmb3IoZG49MDtkbjw4OysrZG4pV3Qud3JpdGVfc2hpZnQoMiwwKTtmb3IoV3Qud3JpdGVfc2hpZnQoMiw2MiksV3Qud3JpdGVfc2hpZnQoMiwzKSxXdC53cml0ZV9zaGlmdCgyLDY1NTM0KSxXdC53cml0ZV9zaGlmdCgyLDkpLFd0LndyaXRlX3NoaWZ0KDIsNiksZG49MDtkbjwzOysrZG4p'@;
put 'V3Qud3JpdGVfc2hpZnQoMiwwKTtmb3IoV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LFZ0WzJdKSxXdC53cml0ZV9zaGlmdCg0LFZ0WzBdK1Z0WzFdK1Z0WzJdK1Z0WzNdLTEpLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCw0MDk2KSxXdC53cml0ZV9z'@;
put 'aGlmdCg0LFZ0WzNdP1Z0WzBdK1Z0WzFdK1Z0WzJdLTE6Wm4pLFd0LndyaXRlX3NoaWZ0KDQsVnRbM10pLFd0LndyaXRlX3NoaWZ0KC00LFZ0WzFdP1Z0WzBdLTE6Wm4pLFd0LndyaXRlX3NoaWZ0KDQsVnRbMV0pLGRuPTA7ZG48MTA5OysrZG4pV3Qud3JpdGVfc2hpZnQoLTQsZG48VnRbMl0/'@;
put 'VnRbMV0rZG46LTEpO2lmKFZ0WzFdKWZvcihUbj0wO1RuPFZ0WzFdOysrVG4pe2Zvcig7ZG48MjM2KzEyNypUbjsrK2RuKVd0LndyaXRlX3NoaWZ0KC00LGRuPFZ0WzJdP1Z0WzFdK2RuOi0xKTtXdC53cml0ZV9zaGlmdCgtNCxUbj09PVZ0WzFdLTE/Wm46VG4rMSl9dmFyIG5yPWZ1bmN0aW9u'@;
put 'KENvKXtmb3IoVG4rPUNvO2RuPFRuLTE7KytkbilXdC53cml0ZV9zaGlmdCgtNCxkbisxKTtDbyYmKCsrZG4sV3Qud3JpdGVfc2hpZnQoLTQsWm4pKX07Zm9yKFRuPWRuPTAsVG4rPVZ0WzFdO2RuPFRuOysrZG4pV3Qud3JpdGVfc2hpZnQoLTQsTGkuRElGU0VDVCk7Zm9yKFRuKz1WdFsyXTtk'@;
put 'bjxUbjsrK2RuKVd0LndyaXRlX3NoaWZ0KC00LExpLkZBVFNFQ1QpO25yKFZ0WzNdKSxucihWdFs0XSk7Zm9yKHZhciBicj0wLHpyPTAsTHI9bm4uRmlsZUluZGV4WzBdO2JyPG5uLkZpbGVJbmRleC5sZW5ndGg7KyticikoTHI9bm4uRmlsZUluZGV4W2JyXSkuY29udGVudCYmISgoenI9THIu'@;
put 'Y29udGVudC5sZW5ndGgpPDQwOTYpJiYoTHIuc3RhcnQ9VG4sbnIoenIrNTExPj45KSk7Zm9yKG5yKFZ0WzZdKzc+PjMpOzUxMSZXdC5sOylXdC53cml0ZV9zaGlmdCgtNCxMaS5FTkRPRkNIQUlOKTtmb3IoVG49ZG49MCxicj0wO2JyPG5uLkZpbGVJbmRleC5sZW5ndGg7KyticikoTHI9bm4u'@;
put 'RmlsZUluZGV4W2JyXSkuY29udGVudCYmKHpyPUxyLmNvbnRlbnQubGVuZ3RoKSYmISh6cj49NDA5NikmJihMci5zdGFydD1Ubixucih6cis2Mz4+NikpO2Zvcig7NTExJld0Lmw7KVd0LndyaXRlX3NoaWZ0KC00LExpLkVORE9GQ0hBSU4pO2Zvcihkbj0wO2RuPFZ0WzRdPDwyOysrZG4pe3Zh'@;
put 'ciB4aT1ubi5GdWxsUGF0aHNbZG5dO2lmKHhpJiYwIT09eGkubGVuZ3RoKXtMcj1ubi5GaWxlSW5kZXhbZG5dLDA9PT1kbiYmKExyLnN0YXJ0PUxyLnNpemU/THIuc3RhcnQtMTpabik7dmFyIGNpPTA9PT1kbiYmYW4ucm9vdHx8THIubmFtZTtpZih6cj0yKihjaS5sZW5ndGgrMSksV3Qud3Jp'@;
put 'dGVfc2hpZnQoNjQsY2ksInV0ZjE2bGUiKSxXdC53cml0ZV9zaGlmdCgyLHpyKSxXdC53cml0ZV9zaGlmdCgxLExyLnR5cGUpLFd0LndyaXRlX3NoaWZ0KDEsTHIuY29sb3IpLFd0LndyaXRlX3NoaWZ0KC00LExyLkwpLFd0LndyaXRlX3NoaWZ0KC00LExyLlIpLFd0LndyaXRlX3NoaWZ0KC00'@;
put 'LExyLkMpLExyLmNsc2lkKVd0LndyaXRlX3NoaWZ0KDE2LExyLmNsc2lkLCJoZXgiKTtlbHNlIGZvcihicj0wO2JyPDQ7KyticilXdC53cml0ZV9zaGlmdCg0LDApO1d0LndyaXRlX3NoaWZ0KDQsTHIuc3RhdGV8fDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCwwKSxX'@;
put 'dC53cml0ZV9zaGlmdCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCxMci5zdGFydCksV3Qud3JpdGVfc2hpZnQoNCxMci5zaXplKSxXdC53cml0ZV9zaGlmdCg0LDApfWVsc2V7Zm9yKGJyPTA7YnI8MTc7KyticilXdC53cml0ZV9zaGlmdCg0LDApO2Zvcihicj0w'@;
put 'O2JyPDM7KyticilXdC53cml0ZV9zaGlmdCg0LC0xKTtmb3IoYnI9MDticjwxMjsrK2JyKVd0LndyaXRlX3NoaWZ0KDQsMCl9fWZvcihkbj0xO2RuPG5uLkZpbGVJbmRleC5sZW5ndGg7KytkbilpZigoTHI9bm4uRmlsZUluZGV4W2RuXSkuc2l6ZT49NDA5Nil7Zm9yKFd0Lmw9THIuc3RhcnQr'@;
put 'MTw8OSxicj0wO2JyPExyLnNpemU7KyticilXdC53cml0ZV9zaGlmdCgxLExyLmNvbnRlbnRbYnJdKTtmb3IoOzUxMSZicjsrK2JyKVd0LndyaXRlX3NoaWZ0KDEsMCl9Zm9yKGRuPTE7ZG48bm4uRmlsZUluZGV4Lmxlbmd0aDsrK2RuKWlmKChMcj1ubi5GaWxlSW5kZXhbZG5dKS5zaXplPjAm'@;
put 'JkxyLnNpemU8NDA5Nil7Zm9yKGJyPTA7YnI8THIuc2l6ZTsrK2JyKVd0LndyaXRlX3NoaWZ0KDEsTHIuY29udGVudFticl0pO2Zvcig7NjMmYnI7KyticilXdC53cml0ZV9zaGlmdCgxLDApfWZvcig7V3QubDxXdC5sZW5ndGg7KVd0LndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFd0fVAudmVy'@;
put 'c2lvbj0iMS4xLjQiO3ZhciB2cix0cj02NCxabj0tMixWcj0iZDBjZjExZTBhMWIxMWFlMSIsb2k9WzIwOCwyMDcsMTcsMjI0LDE2MSwxNzcsMjYsMjI1XSxraT0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLExpPXtNQVhSRUdTRUNUOi02LERJRlNFQ1Q6LTQsRkFUU0VDVDot'@;
put 'MyxFTkRPRkNIQUlOOlpuLEZSRUVTRUNUOi0xLEhFQURFUl9TSUdOQVRVUkU6VnIsSEVBREVSX01JTk9SX1ZFUlNJT046IjNlMDAiLE1BWFJFR1NJRDotNixOT1NUUkVBTTotMSxIRUFERVJfQ0xTSUQ6a2ksRW50cnlUeXBlczpbInVua25vd24iLCJzdG9yYWdlIiwic3RyZWFtIiwibG9ja2J5'@;
put 'dGVzIiwicHJvcGVydHkiLCJyb290Il19O2Z1bmN0aW9uIHVyKG5uKXtmb3IodmFyIF9uPW5ldyBBcnJheShubi5sZW5ndGgpLGFuPTA7YW48bm4ubGVuZ3RoOysrYW4pX25bYW5dPVN0cmluZy5mcm9tQ2hhckNvZGUobm5bYW5dKTtyZXR1cm4gX24uam9pbigiIil9ZnVuY3Rpb24gcHIobm4p'@;
put 'e3JldHVybiB2cj92ci5kZWZsYXRlUmF3U3luYyhubik6Z2wobm4pfWZvcih2YXIgbm4sX24sQ2k9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLGpyPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3'@;
put 'LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxqaT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSxEaT10eXBlb2YgVWludDhB'@;
put 'cnJheTwidSIsWW89RGk/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxsbz0wO2xvPDI1NjsrK2xvKVlvW2xvXT0odm9pZCAwLDI1NSYoKF9uPTEzOTUzNiYoKG5uPWxvKTw8MXxubjw8MTEpfDU1ODE0NCYobm48PDV8bm48PDE1KSk+PjE2fF9uPj44fF9uKSk7ZnVuY3Rpb24gQW8obm4sX24pe3Zh'@;
put 'ciBhbj1Zb1syNTUmbm5dO3JldHVybiBfbjw9OD9hbj4+PjgtX246KGFuPWFuPDw4fFlvW25uPj44JjI1NV0sX248PTE2P2FuPj4+MTYtX246KGFuPWFuPDw4fFlvW25uPj4xNiYyNTVdKT4+PjI0LV9uKX1mdW5jdGlvbiB4byhubixfbil7dmFyIGFuPTcmX24sVnQ9X24+Pj4zO3JldHVybihu'@;
put 'bltWdF18KGFuPD02PzA6bm5bVnQrMV08PDgpKT4+PmFuJjN9ZnVuY3Rpb24gaGkobm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4obm5bVnRdfChhbjw9NT8wOm5uW1Z0KzFdPDw4KSk+Pj5hbiY3fWZ1bmN0aW9uIE1uKG5uLF9uKXt2YXIgYW49NyZfbixWdD1fbj4+PjM7cmV0'@;
put 'dXJuKG5uW1Z0XXwoYW48PTM/MDpubltWdCsxXTw8OCkpPj4+YW4mMzF9ZnVuY3Rpb24gTXMobm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4obm5bVnRdfChhbjw9MT8wOm5uW1Z0KzFdPDw4KSk+Pj5hbiYxMjd9ZnVuY3Rpb24geXMobm4sX24sYW4pe3ZhciBWdD03Jl9uLFd0'@;
put 'PV9uPj4+MyxUbj1ubltXdF0+Pj5WdDtyZXR1cm4gYW48OC1WdHx8KFRufD1ubltXdCsxXTw8OC1WdCxhbjwxNi1WdCl8fChUbnw9bm5bV3QrMl08PDE2LVZ0LGFuPDI0LVZ0KXx8KFRufD1ubltXdCszXTw8MjQtVnQpLFRuJigxPDxhbiktMX1mdW5jdGlvbiBFbChubixfbil7dmFyIGFuPW5u'@;
put 'Lmxlbmd0aCxWdD0yKmFuPl9uPzIqYW46X24rNSxXdD0wO2lmKGFuPj1fbilyZXR1cm4gbm47aWYoaGUpe3ZhciBkbj1iKFZ0KTtpZihubi5jb3B5KW5uLmNvcHkoZG4pO2Vsc2UgZm9yKDtXdDxubi5sZW5ndGg7KytXdClkbltXdF09bm5bV3RdO3JldHVybiBkbn1pZihEaSl7dmFyIFRuPW5l'@;
put 'dyBVaW50OEFycmF5KFZ0KTtpZihUbi5zZXQpVG4uc2V0KG5uKTtlbHNlIGZvcig7V3Q8bm4ubGVuZ3RoOysrV3QpVG5bV3RdPW5uW1d0XTtyZXR1cm4gVG59cmV0dXJuIG5uLmxlbmd0aD1WdCxubn1mdW5jdGlvbiBzbChubil7Zm9yKHZhciBfbj1uZXcgQXJyYXkobm4pLGFuPTA7YW48bm47'@;
put 'Kythbilfblthbl09MDtyZXR1cm4gX259dmFyIGdsPWZ1bmN0aW9uKF9uKXt2YXIgYW49ZnIoNTArTWF0aC5mbG9vcigxLjEqX24ubGVuZ3RoKSksVnQ9ZnVuY3Rpb24oYW4sVnQpe2Zvcih2YXIgV3Q9MDtXdDxhbi5sZW5ndGg7KXt2YXIgZG49TWF0aC5taW4oNjU1MzUsYW4ubGVuZ3RoLVd0'@;
put 'KTtmb3IoVnQud3JpdGVfc2hpZnQoMSwrKFd0K2RuPT1hbi5sZW5ndGgpKSxWdC53cml0ZV9zaGlmdCgyLGRuKSxWdC53cml0ZV9zaGlmdCgyLDY1NTM1Jn5kbik7ZG4tLSA+MDspVnRbVnQubCsrXT1hbltXdCsrXX1yZXR1cm4gVnQubH0oX24sYW4pO3JldHVybiBhbi5zbGljZSgwLFZ0KX07'@;
put 'ZnVuY3Rpb24gbnUobm4sX24sYW4pe3ZhciBWdD0xLFd0PTAsZG49MCxUbj0wLG5yPTAsYnI9bm4ubGVuZ3RoLHpyPURpP25ldyBVaW50MTZBcnJheSgzMik6c2woMzIpO2Zvcihkbj0wO2RuPDMyOysrZG4penJbZG5dPTA7Zm9yKGRuPWJyO2RuPGFuOysrZG4pbm5bZG5dPTA7YnI9bm4ubGVu'@;
put 'Z3RoO3ZhciBMcj1EaT9uZXcgVWludDE2QXJyYXkoYnIpOnNsKGJyKTtmb3IoZG49MDtkbjxicjsrK2RuKXpyW1d0PW5uW2RuXV0rKyxWdDxXdCYmKFZ0PVd0KSxMcltkbl09MDtmb3IoenJbMF09MCxkbj0xO2RuPD1WdDsrK2RuKXpyW2RuKzE2XT1ucj1ucit6cltkbi0xXTw8MTtmb3IoZG49'@;
put 'MDtkbjxicjsrK2RuKTAhPShucj1ubltkbl0pJiYoTHJbZG5dPXpyW25yKzE2XSsrKTt2YXIgeGk9MDtmb3IoZG49MDtkbjxicjsrK2RuKWlmKDAhPSh4aT1ubltkbl0pKWZvcihucj1BbyhMcltkbl0sVnQpPj5WdC14aSxUbj0oMTw8VnQrNC14aSktMTtUbj49MDstLVRuKV9uW25yfFRuPDx4'@;
put 'aV09MTUmeGl8ZG48PDQ7cmV0dXJuIFZ0fXZhciB0bD1EaT9uZXcgVWludDE2QXJyYXkoNTEyKTpzbCg1MTIpLEt0PURpP25ldyBVaW50MTZBcnJheSgzMik6c2woMzIpO2lmKCFEaSl7Zm9yKHZhciBnbj0wO2duPDUxMjsrK2duKXRsW2duXT0wO2Zvcihnbj0wO2duPDMyOysrZ24pS3RbZ25d'@;
put 'PTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBubj1bXSxfbj0wO19uPDMyO19uKyspbm4ucHVzaCg1KTtudShubixLdCwzMik7dmFyIGFuPVtdO2Zvcihfbj0wO19uPD0xNDM7X24rKylhbi5wdXNoKDgpO2Zvcig7X248PTI1NTtfbisrKWFuLnB1c2goOSk7Zm9yKDtfbjw9Mjc5O19uKyspYW4ucHVz'@;
put 'aCg3KTtmb3IoO19uPD0yODc7X24rKylhbi5wdXNoKDgpO251KGFuLHRsLDI4OCl9KCk7dmFyIExuPURpP25ldyBVaW50MTZBcnJheSgzMjc2OCk6c2woMzI3NjgpLFdyPURpP25ldyBVaW50MTZBcnJheSgzMjc2OCk6c2woMzI3NjgpLFhuPURpP25ldyBVaW50MTZBcnJheSgxMjgpOnNsKDEy'@;
put 'OCksZWk9MSxpcj0xO2Z1bmN0aW9uIHJpKG5uLF9uKXt2YXIgYW49TW4obm4sX24pKzI1NyxWdD1Nbihubixfbis9NSkrMSxXdD1mdW5jdGlvbiB0YShubixfbil7dmFyIGFuPTcmX24sVnQ9X24+Pj4zO3JldHVybihubltWdF18KGFuPD00PzA6bm5bVnQrMV08PDgpKT4+PmFuJjE1fShubixf'@;
put 'bis9NSkrNDtfbis9NDtmb3IodmFyIGRuPTAsVG49RGk/bmV3IFVpbnQ4QXJyYXkoMTkpOnNsKDE5KSxucj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sYnI9MSx6cj1EaT9uZXcgVWludDhBcnJheSg4KTpzbCg4KSxMcj1EaT9uZXcgVWludDhBcnJheSg4KTpzbCg4'@;
put 'KSx4aT1Ubi5sZW5ndGgsY2k9MDtjaTxXdDsrK2NpKVRuW0NpW2NpXV09ZG49aGkobm4sX24pLGJyPGRuJiYoYnI9ZG4pLHpyW2RuXSsrLF9uKz0zO3ZhciBDbz0wO2Zvcih6clswXT0wLGNpPTE7Y2k8PWJyOysrY2kpTHJbY2ldPUNvPUNvK3pyW2NpLTFdPDwxO2ZvcihjaT0wO2NpPHhpOysr'@;
put 'Y2kpMCE9KENvPVRuW2NpXSkmJihucltjaV09THJbQ29dKyspO3ZhciBwbz0wO2ZvcihjaT0wO2NpPHhpOysrY2kpaWYoMCE9KHBvPVRuW2NpXSkpe0NvPVlvW25yW2NpXV0+PjgtcG87Zm9yKHZhciBWaT0oMTw8Ny1wbyktMTtWaT49MDstLVZpKVhuW0NvfFZpPDxwb109NyZwb3xjaTw8M312'@;
put 'YXIgVW89W107Zm9yKGJyPTE7VW8ubGVuZ3RoPGFuK1Z0Oylzd2l0Y2goQ289WG5bTXMobm4sX24pXSxfbis9NyZDbyxDbz4+Pj0zKXtjYXNlIDE2OmZvcihkbj0zK3hvKG5uLF9uKSxfbis9MixDbz1Vb1tVby5sZW5ndGgtMV07ZG4tLSA+MDspVW8ucHVzaChDbyk7YnJlYWs7Y2FzZSAxNzpm'@;
put 'b3IoZG49MytoaShubixfbiksX24rPTM7ZG4tLSA+MDspVW8ucHVzaCgwKTticmVhaztjYXNlIDE4OmZvcihkbj0xMStNcyhubixfbiksX24rPTc7ZG4tLSA+MDspVW8ucHVzaCgwKTticmVhaztkZWZhdWx0OlVvLnB1c2goQ28pLGJyPENvJiYoYnI9Q28pfXZhciB0aT1Vby5zbGljZSgwLGFu'@;
put 'KSx6bD1Vby5zbGljZShhbik7Zm9yKGNpPWFuO2NpPDI4NjsrK2NpKXRpW2NpXT0wO2ZvcihjaT1WdDtjaTwzMDsrK2NpKXpsW2NpXT0wO3JldHVybiBlaT1udSh0aSxMbiwyODYpLGlyPW51KHpsLFdyLDMwKSxfbn1mdW5jdGlvbiBpaShubixfbil7dmFyIFZ0PWZ1bmN0aW9uIG1vKG5uLF9u'@;
put 'KXtpZigzPT1ublswXSYmISgzJm5uWzFdKSlyZXR1cm5bRyhfbiksMl07Zm9yKHZhciBhbj0wLFZ0PTAsV3Q9Yihfbnx8MTw8MTgpLGRuPTAsVG49V3QubGVuZ3RoPj4+MCxucj0wLGJyPTA7ISgxJlZ0KTspaWYoVnQ9aGkobm4sYW4pLGFuKz0zLFZ0Pj4+MSlmb3IoVnQ+Pj4xPT0xPyhucj05'@;
put 'LGJyPTUpOihhbj1yaShubixhbiksbnI9ZWksYnI9aXIpLCFfbiYmVG48ZG4rMzI3NjcmJihUbj0oV3Q9RWwoV3QsZG4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciBMcj15cyhubixhbixucikseGk9VnQ+Pj4xPT0xP3RsW0xyXTpMbltMcl07aWYoYW4rPTE1JnhpLCh4aT4+Pj00KT4+PjgmMjU1'@;
put 'KXtpZigyNTY9PXhpKWJyZWFrO3ZhciBjaT0oeGktPTI1Nyk8OD8wOnhpLTQ+PjI7Y2k+NSYmKGNpPTApO3ZhciBDbz1kbitqclt4aV07Y2k+MCYmKENvKz15cyhubixhbixjaSksYW4rPWNpKSxMcj15cyhubixhbixiciksYW4rPTE1Jih4aT1WdD4+PjE9PTE/S3RbTHJdOldyW0xyXSk7dmFy'@;
put 'IHBvPSh4aT4+Pj00KTw0PzA6eGktMj4+MSxWaT1qaVt4aV07Zm9yKHBvPjAmJihWaSs9eXMobm4sYW4scG8pLGFuKz1wbyksIV9uJiZUbjxDbyYmKFRuPShXdD1FbChXdCxDbykpLmxlbmd0aCk7ZG48Q287KVd0W2RuXT1XdFtkbi1WaV0sKytkbn1lbHNlIFd0W2RuKytdPXhpfWVsc2V7NyZh'@;
put 'biYmKGFuKz04LSg3JmFuKSk7dmFyIHpyPW5uW2FuPj4+M118bm5bMSsoYW4+Pj4zKV08PDg7aWYoYW4rPTMyLCFfbiYmVG48ZG4renImJihUbj0oV3Q9RWwoV3QsZG4renIpKS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBubi5jb3B5KW5uLmNvcHkoV3QsZG4sYW4+Pj4zLChhbj4+PjMp'@;
put 'K3pyKSxkbis9enIsYW4rPTgqenI7ZWxzZSBmb3IoO3pyLS0gPjA7KVd0W2RuKytdPW5uW2FuPj4+M10sYW4rPTh9cmV0dXJuW19uP1d0Old0LnNsaWNlKDAsZG4pLGFuKzc+Pj4zXX0obm4uc2xpY2Uobm4ubHx8MCksX24pO3JldHVybiBubi5sKz1WdFsxXSxWdFswXX1mdW5jdGlvbiB6aShu'@;
put 'bixfbil7aWYoIW5uKXRocm93IG5ldyBFcnJvcihfbik7dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLmVycm9yKF9uKX1mdW5jdGlvbiBKcihubixfbil7dmFyIGFuPW5uO29sKGFuLDApO3ZhciBkbj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07dW4oZG4se3Jvb3Q6X24ucm9vdH0p'@;
put 'O2Zvcih2YXIgVG49YW4ubGVuZ3RoLTQ7KDgwIT1hbltUbl18fDc1IT1hbltUbisxXXx8NSE9YW5bVG4rMl18fDYhPWFuW1RuKzNdKSYmVG4+PTA7KS0tVG47YW4ubD1Ubis0LGFuLmwrPTQ7dmFyIG5yPWFuLnJlYWRfc2hpZnQoMik7YW4ubCs9Njt2YXIgYnI9YW4ucmVhZF9zaGlmdCg0KTtm'@;
put 'b3IoYW4ubD1icixUbj0wO1RuPG5yOysrVG4pe2FuLmwrPTIwO3ZhciB6cj1hbi5yZWFkX3NoaWZ0KDQpLExyPWFuLnJlYWRfc2hpZnQoNCkseGk9YW4ucmVhZF9zaGlmdCgyKSxjaT1hbi5yZWFkX3NoaWZ0KDIpLENvPWFuLnJlYWRfc2hpZnQoMik7YW4ubCs9ODt2YXIgcG89YW4ucmVhZF9z'@;
put 'aGlmdCg0KSxWaT12ZShhbi5zbGljZShhbi5sK3hpLGFuLmwreGkrY2kpKTthbi5sKz14aStjaStDbzt2YXIgVW89YW4ubDthbi5sPXBvKzQsd3MoYW4senIsTHIsZG4sVmkpLGFuLmw9VW99cmV0dXJuIGRufWZ1bmN0aW9uIHdzKG5uLF9uLGFuLFZ0LFd0KXtubi5sKz0yO3ZhciBkbj1ubi5y'@;
put 'ZWFkX3NoaWZ0KDIpLFRuPW5uLnJlYWRfc2hpZnQoMiksbnI9ZnVuY3Rpb24gX2Uobm4pe3ZhciBfbj02NTUzNSZubi5yZWFkX3NoaWZ0KDIpLGFuPTY1NTM1Jm5uLnJlYWRfc2hpZnQoMiksVnQ9bmV3IERhdGUsV3Q9MzEmYW4sZG49MTUmKGFuPj4+PTUpO2FuPj4+PTQsVnQuc2V0TWlsbGlz'@;
put 'ZWNvbmRzKDApLFZ0LnNldEZ1bGxZZWFyKGFuKzE5ODApLFZ0LnNldE1vbnRoKGRuLTEpLFZ0LnNldERhdGUoV3QpO3ZhciBUbj0zMSZfbixucj02MyYoX24+Pj49NSk7cmV0dXJuIFZ0LnNldEhvdXJzKF9uPj4+PTYpLFZ0LnNldE1pbnV0ZXMobnIpLFZ0LnNldFNlY29uZHMoVG48PDEpLFZ0'@;
put 'fShubik7aWYoODI1NyZkbil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7Zm9yKHZhciBicj1ubi5yZWFkX3NoaWZ0KDQpLHpyPW5uLnJlYWRfc2hpZnQoNCksTHI9bm4ucmVhZF9zaGlmdCg0KSx4aT1ubi5yZWFkX3NoaWZ0KDIpLGNpPW5uLnJlYWRfc2hp'@;
put 'ZnQoMiksQ289IiIscG89MDtwbzx4aTsrK3BvKUNvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5uW25uLmwrK10pO2lmKGNpKXt2YXIgVmk9dmUobm4uc2xpY2Uobm4ubCxubi5sK2NpKSk7KFZpWzIxNTg5XXx8e30pLm10JiYobnI9VmlbMjE1ODldLm10KSwoKFd0fHx7fSlbMjE1ODldfHx7fSku'@;
put 'bXQmJihucj1XdFsyMTU4OV0ubXQpfW5uLmwrPWNpO3ZhciBVbz1ubi5zbGljZShubi5sLG5uLmwrenIpO3N3aXRjaChUbil7Y2FzZSA4OlVvPWZ1bmN0aW9uIFNuKG5uLF9uKXtpZighdnIpcmV0dXJuIGlpKG5uLF9uKTt2YXIgVnQ9bmV3KDAsdnIuSW5mbGF0ZVJhdyksV3Q9VnQuX3Byb2Nl'@;
put 'c3NDaHVuayhubi5zbGljZShubi5sKSxWdC5fZmluaXNoRmx1c2hGbGFnKTtyZXR1cm4gbm4ubCs9VnQuYnl0ZXNSZWFkLFd0fShubixMcik7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24gbWV0aG9kICIrVG4p'@;
put 'fXZhciB0aT0hMTs4JmRuJiYoMTM0Njk1NzYwPT0oYnI9bm4ucmVhZF9zaGlmdCg0KSkmJihicj1ubi5yZWFkX3NoaWZ0KDQpLHRpPSEwKSx6cj1ubi5yZWFkX3NoaWZ0KDQpLExyPW5uLnJlYWRfc2hpZnQoNCkpLHpyIT1fbiYmemkodGksIkJhZCBjb21wcmVzc2VkIHNpemU6ICIrX24rIiAh'@;
put 'PSAiK3pyKSxMciE9YW4mJnppKHRpLCJCYWQgdW5jb21wcmVzc2VkIHNpemU6ICIrYW4rIiAhPSAiK0xyKTt2YXIgemw9T2UuYnVmKFVvLDApO2JyPj4wIT16bD4+MCYmemkodGksIkJhZCBDUkMzMiBjaGVja3N1bTogIiticisiICE9ICIremwpLGpsKFZ0LENvLFVvLHt1bnNhZmU6ITAsbXQ6'@;
put 'bnJ9KX1mdW5jdGlvbiBqbChubixfbixhbixWdCl7dmFyIFd0PVZ0JiZWdC51bnNhZmU7V3R8fHVuKG5uKTt2YXIgZG49IVd0JiZqZS5maW5kKG5uLF9uKTtpZighZG4pe3ZhciBUbj1ubi5GdWxsUGF0aHNbMF07X24uc2xpY2UoMCxUbi5sZW5ndGgpPT1Ubj9Ubj1fbjooIi8iIT1Ubi5zbGlj'@;
put 'ZSgtMSkmJihUbis9Ii8iKSxUbj0oVG4rX24pLnJlcGxhY2UoIi8vIiwiLyIpKSxkbj17bmFtZTpyZShfbiksdHlwZToyfSxubi5GaWxlSW5kZXgucHVzaChkbiksbm4uRnVsbFBhdGhzLnB1c2goVG4pLFd0fHxqZS51dGlscy5jZmJfZ2Mobm4pfXJldHVybiBkbi5jb250ZW50PWFuLGRuLnNp'@;
put 'emU9YW4/YW4ubGVuZ3RoOjAsVnQmJihWdC5DTFNJRCYmKGRuLmNsc2lkPVZ0LkNMU0lEKSxWdC5tdCYmKGRuLm10PVZ0Lm10KSxWdC5jdCYmKGRuLmN0PVZ0LmN0KSksZG59cmV0dXJuIFAuZmluZD1mdW5jdGlvbiBlcihubixfbil7dmFyIGFuPW5uLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24o'@;
put 'YnIpe3JldHVybiBici50b1VwcGVyQ2FzZSgpfSksVnQ9YW4ubWFwKGZ1bmN0aW9uKGJyKXt2YXIgenI9YnIuc3BsaXQoIi8iKTtyZXR1cm4genJbenIubGVuZ3RoLSgiLyI9PWJyLnNsaWNlKC0xKT8yOjEpXX0pLFd0PSExOzQ3PT09X24uY2hhckNvZGVBdCgwKT8oV3Q9ITAsX249YW5bMF0u'@;
put 'c2xpY2UoMCwtMSkrX24pOld0PS0xIT09X24uaW5kZXhPZigiLyIpO3ZhciBkbj1fbi50b1VwcGVyQ2FzZSgpLFRuPSEwPT09V3Q/YW4uaW5kZXhPZihkbik6VnQuaW5kZXhPZihkbik7aWYoLTEhPT1UbilyZXR1cm4gbm4uRmlsZUluZGV4W1RuXTt2YXIgbnI9IWRuLm1hdGNoKHApO2Zvcihk'@;
put 'bj1kbi5yZXBsYWNlKHYsIiIpLG5yJiYoZG49ZG4ucmVwbGFjZShwLCIhIikpLFRuPTA7VG48YW4ubGVuZ3RoOysrVG4paWYoKG5yP2FuW1RuXS5yZXBsYWNlKHAsIiEiKTphbltUbl0pLnJlcGxhY2UodiwiIik9PWRufHwobnI/VnRbVG5dLnJlcGxhY2UocCwiISIpOlZ0W1RuXSkucmVwbGFj'@;
put 'ZSh2LCIiKT09ZG4pcmV0dXJuIG5uLkZpbGVJbmRleFtUbl07cmV0dXJuIG51bGx9LFAucmVhZD1mdW5jdGlvbiBLbihubixfbil7c3dpdGNoKF9uJiZfbi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJmaWxlIjpyZXR1cm4gZnVuY3Rpb24gcG4obm4sX24pe3JldHVybiBIZSgpLEJlKFNlLnJlYWRG'@;
put 'aWxlU3luYyhubiksX24pfShubixfbik7Y2FzZSJiYXNlNjQiOnJldHVybiBCZShEKHNlLmRlY29kZShubikpLF9uKTtjYXNlImJpbmFyeSI6cmV0dXJuIEJlKEQobm4pLF9uKX1yZXR1cm4gQmUobm4sX24pfSxQLnBhcnNlPUJlLFAud3JpdGU9ZnVuY3Rpb24gQW4obm4sX24pe3ZhciBhbj1r'@;
put 'bihubixfbik7c3dpdGNoKF9uJiZfbi50eXBlKXtjYXNlImZpbGUiOnJldHVybiBIZSgpLFNlLndyaXRlRmlsZVN5bmMoX24uZmlsZW5hbWUsYW4pLGFuO2Nhc2UiYmluYXJ5IjpyZXR1cm4gdXIoYW4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gc2UuZW5jb2RlKHVyKGFuKSl9cmV0dXJuIGFufSxQ'@;
put 'LndyaXRlRmlsZT1mdW5jdGlvbiBRcihubixfbixhbil7SGUoKTt2YXIgVnQ9a24obm4sYW4pO1NlLndyaXRlRmlsZVN5bmMoX24sVnQpfSxQLnV0aWxzPXtjZmJfbmV3OmZ1bmN0aW9uIG1sKG5uKXt2YXIgX249e307cmV0dXJuIHVuKF9uLG5uKSxfbn0sY2ZiX2FkZDpqbCxjZmJfZGVsOmZ1'@;
put 'bmN0aW9uIGhhKG5uLF9uKXt1bihubik7dmFyIGFuPWplLmZpbmQobm4sX24pO2lmKGFuKWZvcih2YXIgVnQ9MDtWdDxubi5GaWxlSW5kZXgubGVuZ3RoOysrVnQpaWYobm4uRmlsZUluZGV4W1Z0XT09YW4pcmV0dXJuIG5uLkZpbGVJbmRleC5zcGxpY2UoVnQsMSksbm4uRnVsbFBhdGhzLnNw'@;
put 'bGljZShWdCwxKSwhMDtyZXR1cm4hMX0sY2ZiX21vdjpmdW5jdGlvbiB5Zihubixfbixhbil7dW4obm4pO3ZhciBWdD1qZS5maW5kKG5uLF9uKTtpZihWdClmb3IodmFyIFd0PTA7V3Q8bm4uRmlsZUluZGV4Lmxlbmd0aDsrK1d0KWlmKG5uLkZpbGVJbmRleFtXdF09PVZ0KXJldHVybiBubi5G'@;
put 'aWxlSW5kZXhbV3RdLm5hbWU9cmUoYW4pLG5uLkZ1bGxQYXRoc1tXdF09YW4sITA7cmV0dXJuITF9LGNmYl9nYzpmdW5jdGlvbiBvcChubil7em4obm4sITApfSxSZWFkU2hpZnQ6SGEsQ2hlY2tGaWVsZDpCaCxwcmVwX2Jsb2I6b2wsYmNvbmNhdDpTLHVzZV96bGliOmZ1bmN0aW9uIHJyKG5u'@;
put 'KXt0cnl7dmFyIGFuPW5ldygwLG5uLkluZmxhdGVSYXcpO2lmKGFuLl9wcm9jZXNzQ2h1bmsobmV3IFVpbnQ4QXJyYXkoWzMsMF0pLGFuLl9maW5pc2hGbHVzaEZsYWcpLCFhbi5ieXRlc1JlYWQpdGhyb3cgbmV3IEVycm9yKCJ6bGliIGRvZXMgbm90IGV4cG9zZSBieXRlc1JlYWQiKTt2cj1u'@;
put 'bn1jYXRjaChWdCl7Y29uc29sZS5lcnJvcigiY2Fubm90IHVzZSBuYXRpdmUgemxpYjogIisoVnQubWVzc2FnZXx8VnQpKX19LF9kZWZsYXRlUmF3OmdsLF9pbmZsYXRlUmF3OmlpLGNvbnN0czpMaX0sUH0oKTt0cnl7V2U9Rig3ODc3Myl9Y2F0Y2h7fWZ1bmN0aW9uIEtlKHkpe3JldHVybiJz'@;
put 'dHJpbmciPT10eXBlb2YgeT9IKHkpOkFycmF5LmlzQXJyYXkoeSk/ZnVuY3Rpb24gZyh5KXtpZih0eXBlb2YgVWludDhBcnJheT4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO3JldHVybiBuZXcgVWludDhBcnJheSh5KX0oeSk6eX1mdW5jdGlvbiBZZSh5LFAsTCl7aWYodHlw'@;
put 'ZW9mIFdlPCJ1IiYmV2Uud3JpdGVGaWxlU3luYylyZXR1cm4gTD9XZS53cml0ZUZpbGVTeW5jKHksUCxMKTpXZS53cml0ZUZpbGVTeW5jKHksUCk7dmFyIFE9InV0ZjgiPT1MP0xvKFApOlA7aWYodHlwZW9mIElFX1NhdmVGaWxlPCJ1IilyZXR1cm4gSUVfU2F2ZUZpbGUoUSx5KTtpZih0eXBl'@;
put 'b2YgQmxvYjwidSIpe3ZhciByZT1uZXcgQmxvYihbS2UoUSldLHt0eXBlOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0ifSk7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5tc1NhdmVCbG9iKXJldHVybiBuYXZpZ2F0b3IubXNTYXZlQmxvYihyZSx5KTtpZih0eXBlb2Ygc2F2'@;
put 'ZUFzPCJ1IilyZXR1cm4gc2F2ZUFzKHJlLHkpO2lmKHR5cGVvZiBVUkw8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZVUkwuY3JlYXRlT2JqZWN0VVJMKXt2YXIgcGU9VVJMLmNyZWF0ZU9iamVjdFVSTChyZSk7aWYoIm9iamVjdCI9PXR5cGVvZiBj'@;
put 'aHJvbWUmJiJmdW5jdGlvbiI9PXR5cGVvZihjaHJvbWUuZG93bmxvYWRzfHx7fSkuZG93bmxvYWQpcmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwocGUpfSw2ZTQpLGNocm9t'@;
put 'ZS5kb3dubG9hZHMuZG93bmxvYWQoe3VybDpwZSxmaWxlbmFtZTp5LHNhdmVBczohMH0pO3ZhciBfZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aWYobnVsbCE9X2UuZG93bmxvYWQpcmV0dXJuIF9lLmRvd25sb2FkPXksX2UuaHJlZj1wZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk'@;
put 'KF9lKSxfZS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoX2UpLFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwocGUpfSw2ZTQpLHBlfX1pZih0eXBlb2YgJDwidSImJnR5'@;
put 'cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciB2ZT1GaWxlKHkpO3JldHVybiB2ZS5vcGVuKCJ3IiksdmUuZW5jb2Rpbmc9ImJpbmFyeSIsQXJyYXkuaXNBcnJheShQKSYmKFA9TihQKSksdmUud3JpdGUoUCksdmUuY2xvc2UoKSxQfWNhdGNoKFNlKXtpZighU2UubWVz'@;
put 'c2FnZXx8IVNlLm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgU2V9dGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2F2ZSBmaWxlICIreSl9ZnVuY3Rpb24gbHQoeSl7Zm9yKHZhciBQPU9iamVjdC5rZXlzKHkpLEw9W10sUT0wO1E8UC5sZW5ndGg7KytRKU9iamVjdC5wcm90b3R5cGUu'@;
put 'aGFzT3duUHJvcGVydHkuY2FsbCh5LFBbUV0pJiZMLnB1c2goUFtRXSk7cmV0dXJuIEx9ZnVuY3Rpb24gUGUoeSxQKXtmb3IodmFyIEw9W10sUT1sdCh5KSxyZT0wO3JlIT09US5sZW5ndGg7KytyZSludWxsPT1MW3lbUVtyZV1dW1BdXSYmKExbeVtRW3JlXV1bUF1dPVFbcmVdKTtyZXR1cm4g'@;
put 'TH1mdW5jdGlvbiBiZSh5KXtmb3IodmFyIFA9W10sTD1sdCh5KSxRPTA7USE9PUwubGVuZ3RoOysrUSlQW3lbTFtRXV1dPUxbUV07cmV0dXJuIFB9ZnVuY3Rpb24gQWUoeSl7Zm9yKHZhciBQPVtdLEw9bHQoeSksUT0wO1EhPT1MLmxlbmd0aDsrK1EpUFt5W0xbUV1dXT1wYXJzZUludChMW1Fd'@;
put 'LDEwKTtyZXR1cm4gUH12YXIgVWUsaHQscWU9bmV3IERhdGUoMTg5OSwxMSwzMCwwLDAsMCksWGU9MDtmdW5jdGlvbiBNZSgpe1hlPXFlLmdldFRpbWUoKSs2ZTQqKChuZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKS1xZS5nZXRUaW1lem9uZU9mZnNldCgpKSxVZT1mdW5jdGlvbihQLEwp'@;
put 'e3ZhciBRPVAuZ2V0VGltZSgpO3JldHVybiBMJiYoUS09MTI2MzE2OGU1KSwoUS1YZSkvODY0ZTV9LGh0PWZ1bmN0aW9uKFApe3ZhciBMPW5ldyBEYXRlO3JldHVybiBMLnNldFRpbWUoMjQqUCo2MCo2MCoxZTMrWGUpLEx9fWZ1bmN0aW9uIGl0KHkpe3ZhciBQPTAsTD0wLFE9ITEscmU9eS5t'@;
put 'YXRjaCgvUChbMC05XC5dK1kpPyhbMC05XC5dK00pPyhbMC05XC5dK0QpP1QoWzAtOVwuXStIKT8oWzAtOVwuXStNKT8oWzAtOVwuXStTKT8vKTtpZighcmUpdGhyb3cgbmV3IEVycm9yKCJ8Iit5KyJ8IGlzIG5vdCBhbiBJU084NjAxIER1cmF0aW9uIik7Zm9yKHZhciBwZT0xO3BlIT1yZS5s'@;
put 'ZW5ndGg7KytwZSlpZihyZVtwZV0pe3N3aXRjaChMPTEscGU+MyYmKFE9ITApLHJlW3BlXS5zbGljZShyZVtwZV0ubGVuZ3RoLTEpKXtjYXNlIlkiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiAiK3JlW3BlXS5zbGljZShyZVtwZV0ubGVuZ3RoLTEp'@;
put 'KTtjYXNlIkQiOkwqPTI0O2Nhc2UiSCI6TCo9NjA7Y2FzZSJNIjppZighUSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogTSIpO0wqPTYwfVArPUwqcGFyc2VJbnQocmVbcGVdLDEwKX1yZXR1cm4gUH1NZSgpO3ZhciB1dD1uZXcgRGF0ZSgiMjAxNy0w'@;
put 'Mi0xOVQxOTowNjowOS4wMDBaIik7aXNOYU4odXQuZ2V0RnVsbFllYXIoKSkmJih1dD1uZXcgRGF0ZSgiMi8xOS8xNyIpKTt2YXIgTXQ9MjAxNz09dXQuZ2V0RnVsbFllYXIoKTtmdW5jdGlvbiBIdCh5LFApe3ZhciBMPW5ldyBEYXRlKHkpO2lmKE10KXJldHVybiBQPjA/TC5zZXRUaW1lKEwu'@;
put 'Z2V0VGltZSgpKzYwKkwuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpOlA8MCYmTC5zZXRUaW1lKEwuZ2V0VGltZSgpLTYwKkwuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpLEw7aWYoeSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHk7aWYoMTkxNz09dXQuZ2V0RnVsbFllYXIoKSYmIWlzTmFOKEwu'@;
put 'Z2V0RnVsbFllYXIoKSkpe3ZhciBRPUwuZ2V0RnVsbFllYXIoKTtyZXR1cm4geS5pbmRleE9mKCIiK1EpPi0xfHxMLnNldEZ1bGxZZWFyKEwuZ2V0RnVsbFllYXIoKSsxMDApLEx9dmFyIHJlPXkubWF0Y2goL1xkKy9nKXx8WyIyMDE3IiwiMiIsIjE5IiwiMCIsIjAiLCIwIl0scGU9bmV3IERh'@;
put 'dGUoK3JlWzBdLCtyZVsxXS0xLCtyZVsyXSwrcmVbM118fDAsK3JlWzRdfHwwLCtyZVs1XXx8MCk7cmV0dXJuIHkuaW5kZXhPZigiWiIpPi0xJiYocGU9bmV3IERhdGUocGUuZ2V0VGltZSgpLTYwKnBlLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSkscGV9ZnVuY3Rpb24gUHQoeSl7Zm9yKHZh'@;
put 'ciBQPSIiLEw9MDtMIT15Lmxlbmd0aDsrK0wpUCs9U3RyaW5nLmZyb21DaGFyQ29kZSh5W0xdKTtyZXR1cm4gUH1mdW5jdGlvbiBvbih5KXtpZigib2JqZWN0IiE9dHlwZW9mIHl8fG51bGw9PXkpcmV0dXJuIHk7aWYoeSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKHkuZ2V0VGlt'@;
put 'ZSgpKTtpZihBcnJheS5pc0FycmF5KHkpKXJldHVybiBmdW5jdGlvbiBDbih5KXtmb3IodmFyIFA9W10sTD0wO0w8eS5sZW5ndGg7KytMKXt2YXIgUT15W0xdOyJvYmplY3QiPT10eXBlb2YgUT9QW0xdPW9uKFEpOm51bGwhPVEmJihQW0xdPVEpfXJldHVybiBQfSh5KTt2YXIgUD17fTtmb3Io'@;
put 'dmFyIEwgaW4geSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeSxMKSYmKFBbTF09b24oeVtMXSkpO3JldHVybiBQfWZ1bmN0aW9uIFV0KHksUCl7aWYoIm9iamVjdCIhPXR5cGVvZiBQfHxudWxsPT1QKXJldHVybiB5O2Zvcih2YXIgTCBpbiBQKU9iamVjdC5wcm90b3R5'@;
put 'cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEwpJiYoeVtMXT1vbihQW0xdKSk7cmV0dXJuIHl9ZnVuY3Rpb24gYm4oeSxQKXtmb3IodmFyIEw9IiI7TC5sZW5ndGg8UDspTCs9eTtyZXR1cm4gTH1mdW5jdGlvbiBXbih5KXt2YXIgUD1OdW1iZXIoeSk7aWYoIWlzTmFOKFApKXJldHVybiBpc0Zp'@;
put 'bml0ZShQKT9QOk5hTjtpZighL1xkLy50ZXN0KHkpKXJldHVybiBQO3ZhciBMPTEsUT15LnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZywiJDEkMiIpLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBMKj0xMDAsIiJ9KTtyZXR1cm4gaXNOYU4oUD1O'@;
put 'dW1iZXIoUSkpJiYoUT1RLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKHJlLHBlKXtyZXR1cm4gTD0tTCxwZX0pLGlzTmFOKFA9TnVtYmVyKFEpKSk/UDpQL0x9ZnVuY3Rpb24gZW4oeSl7dmFyIFA9bmV3IERhdGUoeSksTD1uZXcgRGF0ZShOYU4pLFE9UC5nZXRZZWFyKCkscmU9UC5n'@;
put 'ZXRNb250aCgpLHBlPVAuZ2V0RGF0ZSgpO3JldHVybiBpc05hTihwZSl8fFE8MHx8UT44MDk5P0w6KHJlPjB8fHBlPjEpJiYxMDEhPVF8fHkudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKT9QOnkubWF0Y2goL1te'@;
put 'LTAtOTosXC9cXF0vKT9MOlB9ZnVuY3Rpb24gJG4oeSxQKXtpZihQJiZQLnJhdylyZXR1cm57dDoicyIsdjp5fTtpZigheSlyZXR1cm57dDoieiJ9O2lmKCJUUlVFIj09PXkpcmV0dXJue3Q6ImIiLHY6ITB9O2lmKCJGQUxTRSI9PT15KXJldHVybnt0OiJiIix2OiExfTt2YXIgTD0iIixRPU51'@;
put 'bWJlcih5KTtpZihpc0Zpbml0ZShRKSlyZXR1cm57dDoibiIsdjpRfTtpZihpc05hTihRKSYmL1xkLy50ZXN0KHkpKXt2YXIgcmU9MSxwZT15LnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZyxmdW5jdGlvbihudCxkdCxDdCl7cmV0dXJuIEx8fChMPSIjLCMjMCIpLGR0K0N0fSkucmVwbGFjZSgv'@;
put 'WyRdL2csIiIpLnJlcGxhY2UoL1wuXGQqLyxmdW5jdGlvbihudCl7THx8KEw9IjAiKSxMKz0iLiI7Zm9yKHZhciBkdD0yO2R0PD1udC5sZW5ndGg7KytkdClMKz0iMCI7cmV0dXJuIG50fSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gcmUqPTEwMCxMfHwoTD0iMCIpLEwrPSIl'@;
put 'IiwiIn0pO2lmKCFpc05hTihRPU51bWJlcihwZSkpKXJldHVybnt0OiJuIix2OlEvcmUsejpMfTtpZihwZT1wZS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihudCxkdCl7cmV0dXJuIHJlPS1yZSxkdH0pLCFpc05hTihRPU51bWJlcihwZSkpKXJldHVybnt0OiJuIix2OlEvcmUsejoo'@;
put 'THx8IjAiKSsiXyk7KCIrKEx8fCIwIikrIik7QCJ9fWU6aWYoIVB8fCFQLnJhd0RhdGVzKXt2YXIgX2U9UCYmUC5jZWxsRGF0ZXMsdmU9bmV3IERhdGUoeSksSGU9dmUuZ2V0WWVhcigpLEJlPXZlLmdldE1vbnRoKCksR2U9dmUuZ2V0RGF0ZSgpO2lmKGlzTmFOKEdlKXx8SGU8MHx8SGU+ODA5'@;
put 'OSlicmVhayBlO2lmKChCZT4wfHxHZT4xKSYmMTAxIT1IZSlyZXR1cm57dDpfZT8iZCI6Im4iLHY6X2U/dmU6VWUodmUpLHo6UC5kYXRlTkZ8fHcuX3RhYmxlWzE0XX07aWYoeS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92'@;
put 'fGRlYy8pKXJldHVybnt0Ol9lPyJkIjoibiIsdjpfZT92ZTpVZSh2ZSksejpQLmRhdGVORnx8dy5fdGFibGVbMTRdfTtpZih5Lm1hdGNoKC9bXi0wLTk6LFwvXFxdLykpYnJlYWsgZTtyZXR1cm4gdmV9cmV0dXJue3Q6InMiLHY6eX19dmFyIHp0LEhuPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/'@;
put 'YikvaSkubGVuZ3RoO2Z1bmN0aW9uIGhuKHkpe3JldHVybiBudWxsIT15JiYheX1mdW5jdGlvbiB3dCh5KXtyZXR1cm4geS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt5LnNsaWNlKDEpfWZ1bmN0aW9uIFh0KHkpe3JldHVybiB5P3kuZGF0YT9VKHkuZGF0YSk6eS5hc05vZGVCdWZmZXImJmhl'@;
put 'P1UoeS5hc05vZGVCdWZmZXIoKS50b1N0cmluZygiYmluYXJ5IikpOnkuYXNCaW5hcnk/VSh5LmFzQmluYXJ5KCkpOnkuX2RhdGEmJnkuX2RhdGEuZ2V0Q29udGVudD9VKFB0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHkuX2RhdGEuZ2V0Q29udGVudCgpLDApKSk6eS5jb250ZW50JiZ5'@;
put 'LnR5cGU/VShQdCh5LmNvbnRlbnQpKTpudWxsOm51bGx9ZnVuY3Rpb24gX3QoeSl7aWYoIXkpcmV0dXJuIG51bGw7aWYoeS5kYXRhKXJldHVybiBCKHkuZGF0YSk7aWYoeS5hc05vZGVCdWZmZXImJmhlKXJldHVybiB5LmFzTm9kZUJ1ZmZlcigpO2lmKHkuX2RhdGEmJnkuX2RhdGEuZ2V0Q29u'@;
put 'dGVudCl7dmFyIFA9eS5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBQP0IoUCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUCl9cmV0dXJuIHkuY29udGVudCYmeS50eXBlP3kuY29udGVudDpudWxsfWZ1bmN0aW9uIG1uKHksUCl7Zm9yKHZhciBMPXkuRnVs'@;
put 'bFBhdGhzfHxsdCh5LmZpbGVzKSxRPVAudG9Mb3dlckNhc2UoKSxyZT1RLnJlcGxhY2UoL1wvL2csIlxcIikscGU9MDtwZTxMLmxlbmd0aDsrK3BlKXt2YXIgX2U9TFtwZV0udG9Mb3dlckNhc2UoKTtpZihRPT1fZXx8cmU9PV9lKXJldHVybiB5LmZpbGVzW0xbcGVdXX1yZXR1cm4gbnVsbH1m'@;
put 'dW5jdGlvbiBydCh5LFApe3ZhciBMPW1uKHksUCk7aWYobnVsbD09TCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZpbGUgIitQKyIgaW4gemlwIik7cmV0dXJuIEx9ZnVuY3Rpb24gSXQoeSxQLEwpe2lmKCFMKXJldHVybiBmdW5jdGlvbiBOdCh5KXtyZXR1cm4geSYmIi5iaW4iPT09'@;
put 'eS5uYW1lLnNsaWNlKC00KT9fdCh5KTpYdCh5KX0ocnQoeSxQKSk7aWYoIVApcmV0dXJuIG51bGw7dHJ5e3JldHVybiBJdCh5LFApfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBKdCh5LFAsTCl7aWYoIUwpcmV0dXJuIFh0KHJ0KHksUCkpO2lmKCFQKXJldHVybiBudWxsO3RyeXtyZXR1'@;
put 'cm4gSnQoeSxQKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gRHQoeSxQLEwpe2lmKCFMKXJldHVybiBfdChydCh5LFApKTtpZighUClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIER0KHksUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFl0KHksUCxMKXt5LkZ1bGxQYXRocz9qZS51'@;
put 'dGlscy5jZmJfYWRkKHksUCxMKTp5LmZpbGUoUCxMKX1mdW5jdGlvbiB5bigpe3JldHVybiB6dD9uZXcgenQ6amUudXRpbHMuY2ZiX25ldygpfWZ1bmN0aW9uIHhuKHksUCl7dmFyIEw7aWYoenQpc3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOkw9bmV3IHp0KHkse2Jhc2U2NDohMH0pO2Jy'@;
put 'ZWFrO2Nhc2UiYmluYXJ5IjpjYXNlImFycmF5IjpMPW5ldyB6dCh5LHtiYXNlNjQ6ITF9KTticmVhaztjYXNlImJ1ZmZlciI6TD1uZXcgenQoeSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBlKX1lbHNlIHN3aXRjaChQLnR5cGUpe2Nh'@;
put 'c2UiYmFzZTY0IjpMPWplLnJlYWQoeSx7dHlwZToiYmFzZTY0In0pO2JyZWFrO2Nhc2UiYmluYXJ5IjpMPWplLnJlYWQoeSx7dHlwZToiYmluYXJ5In0pO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpMPWplLnJlYWQoeSx7dHlwZToiYnVmZmVyIn0pO2JyZWFrO2RlZmF1bHQ6dGhy'@;
put 'b3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9cmV0dXJuIEx9ZnVuY3Rpb24gc24oeSxQKXtpZigiLyI9PXkuY2hhckF0KDApKXJldHVybiB5LnNsaWNlKDEpO3ZhciBMPVAuc3BsaXQoIi8iKTsiLyIhPVAuc2xpY2UoLTEpJiZMLnBvcCgpO2Zvcih2YXIgUT15LnNw'@;
put 'bGl0KCIvIik7MCE9PVEubGVuZ3RoOyl7dmFyIHJlPVEuc2hpZnQoKTsiLi4iPT09cmU/TC5wb3AoKToiLiIhPT1yZSYmTC5wdXNoKHJlKX1yZXR1cm4gTC5qb2luKCIvIil9dHlwZW9mIEpTWmlwU3luYzwidSImJih6dD1KU1ppcFN5bmMpLGF0LmV4cG9ydHMmJnR5cGVvZiB6dD4idSImJih6'@;
put 'dD1GKDc1NDQ2KSk7dmFyIEJuPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+XHJcbicsUm49Lyg/OlteIlxzPz5cL10rKVxzKj1ccyooKD86IikoPzpbXiJdKj8pKD86Iil8KD86JykoPzpbXiddKj8pKD86Jyl8KD86W14nIj5cc10rKSkv'@;
put 'ZywkdD0vPFtcL1w/XT9bYS16QS1aMC05Ol8tXSsoPzpccytbXiJccz8+XC9dK1xzKj1ccyooPzoiW14iXSoifCdbXiddKid8W14nIj5ccz1dKykpKlxzP1tcL1w/XT8+L2c7Qm4ubWF0Y2goJHQpfHwoJHQ9LzxbXj5dKj4vZyk7dmFyIFBuPS88XHcqOi8sbmk9LzwoXC8/KVx3KzovO2Z1bmN0'@;
put 'aW9uIGxuKHksUCxMKXtmb3IodmFyIFE9e30scmU9MCxwZT0wO3JlIT09eS5sZW5ndGgmJjMyIT09KHBlPXkuY2hhckNvZGVBdChyZSkpJiYxMCE9PXBlJiYxMyE9PXBlOysrcmUpO2lmKFB8fChRWzBdPXkuc2xpY2UoMCxyZSkpLHJlPT09eS5sZW5ndGgpcmV0dXJuIFE7dmFyIF9lPXkubWF0'@;
put 'Y2goUm4pLHZlPTAsU2U9IiIsSGU9MCxCZT0iIixHZT0iIixudD0xO2lmKF9lKWZvcihIZT0wO0hlIT1fZS5sZW5ndGg7KytIZSl7Zm9yKEdlPV9lW0hlXSxwZT0wO3BlIT1HZS5sZW5ndGgmJjYxIT09R2UuY2hhckNvZGVBdChwZSk7KytwZSk7Zm9yKEJlPUdlLnNsaWNlKDAscGUpLnRyaW0o'@;
put 'KTszMj09R2UuY2hhckNvZGVBdChwZSsxKTspKytwZTtmb3IobnQ9MzQ9PShyZT1HZS5jaGFyQ29kZUF0KHBlKzEpKXx8Mzk9PXJlPzE6MCxTZT1HZS5zbGljZShwZSsxK250LEdlLmxlbmd0aC1udCksdmU9MDt2ZSE9QmUubGVuZ3RoJiY1OCE9PUJlLmNoYXJDb2RlQXQodmUpOysrdmUpO2lm'@;
put 'KHZlPT09QmUubGVuZ3RoKUJlLmluZGV4T2YoIl8iKT4wJiYoQmU9QmUuc2xpY2UoMCxCZS5pbmRleE9mKCJfIikpKSxRW0JlXT1TZSxMfHwoUVtCZS50b0xvd2VyQ2FzZSgpXT1TZSk7ZWxzZXt2YXIgZHQ9KDU9PT12ZSYmInhtbG5zIj09PUJlLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrQmUu'@;
put 'c2xpY2UodmUrMSk7aWYoUVtkdF0mJiJleHQiPT1CZS5zbGljZSh2ZS0zLHZlKSljb250aW51ZTtRW2R0XT1TZSxMfHwoUVtkdC50b0xvd2VyQ2FzZSgpXT1TZSl9fXJldHVybiBRfWZ1bmN0aW9uIGpuKHkpe3JldHVybiB5LnJlcGxhY2UobmksIjwkMSIpfXZhciBxcj17IiZxdW90OyI6JyIn'@;
put 'LCImYXBvczsiOiInIiwiJmd0OyI6Ij4iLCImbHQ7IjoiPCIsIiZhbXA7IjoiJiJ9LGdpPWJlKHFyKSx4cj1mdW5jdGlvbigpe3ZhciB5PS8mKD86cXVvdHxhcG9zfGd0fGx0fGFtcHwjeD8oW1xkYS1mQS1GXSspKTsvZ2ksUD0vX3goW1xkYS1mQS1GXXs0fSlfL2dpO3JldHVybiBmdW5jdGlv'@;
put 'biBMKFEpe3ZhciByZT1RKyIiLHBlPXJlLmluZGV4T2YoIjwhW0NEQVRBWyIpO2lmKC0xPT1wZSlyZXR1cm4gcmUucmVwbGFjZSh5LGZ1bmN0aW9uKHZlLFNlKXtyZXR1cm4gcXJbdmVdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFNlLHZlLmluZGV4T2YoIngiKT4tMT8xNjoxMCkp'@;
put 'fHx2ZX0pLnJlcGxhY2UoUCxmdW5jdGlvbih2ZSxTZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoU2UsMTYpKX0pO3ZhciBfZT1yZS5pbmRleE9mKCJdXT4iKTtyZXR1cm4gTChyZS5zbGljZSgwLHBlKSkrcmUuc2xpY2UocGUrOSxfZSkrTChyZS5zbGljZShfZSszKSl9'@;
put 'fSgpLFVpPS9bJjw+JyJdL2csS3I9L1tcdTAwMDAtXHUwMDA4XHUwMDBiLVx1MDAxZl0vZyxubz0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5jdGlvbiBIcih5KXtyZXR1cm4oeSsiIikucmVwbGFjZShubywiX3gwMDVGJCYiKS5yZXBsYWNlKFVpLGZ1bmN0aW9uKEwpe3JldHVybiBnaVtMXX0p'@;
put 'LnJlcGxhY2UoS3IsZnVuY3Rpb24oTCl7cmV0dXJuIl94IisoIjAwMCIrTC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyJfIn0pfWZ1bmN0aW9uIHFpKHkpe3JldHVybiBIcih5KS5yZXBsYWNlKC9cbi9nLCJfeDAwMGFfIil9ZnVuY3Rpb24gSmkoeSl7cmV0dXJuIEhy'@;
put 'KHkpLnJlcGxhY2UoLyAvZywiX3gwMDIwXyIpfXZhciBhbz0vW1x1MDAwMC1cdTAwMWZdL2c7ZnVuY3Rpb24gcm8oeSl7cmV0dXJuKHkrIiIpLnJlcGxhY2UoVWksZnVuY3Rpb24oTCl7cmV0dXJuIGdpW0xdfSkucmVwbGFjZSgvXG4vZywiPGJyLz4iKS5yZXBsYWNlKGFvLGZ1bmN0aW9uKEwp'@;
put 'e3JldHVybiImI3giKygiMDAwIitMLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIjsifSl9ZnVuY3Rpb24gaW8oeSl7cmV0dXJuKHkrIiIpLnJlcGxhY2UoVWksZnVuY3Rpb24oTCl7cmV0dXJuIGdpW0xdfSkucmVwbGFjZShhbyxmdW5jdGlvbihMKXtyZXR1cm4iJiN4'@;
put 'IitMLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsifSl9dmFyIEdpPWZ1bmN0aW9uKCl7dmFyIHk9LyYjKFxkKyk7L2c7ZnVuY3Rpb24gUChMLFEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFEsMTApKX1yZXR1cm4gZnVuY3Rpb24oUSl7'@;
put 'cmV0dXJuIFEucmVwbGFjZSh5LFApfX0oKSxobz1mdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC8oXHJcbnxbXHJcbl0pL2csIiYjMTA7Iil9O2Z1bmN0aW9uIHlyKHkpe3N3aXRjaCh5KXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVlIjpjYXNlIlRSVUUiOnJldHVybiEwO2Rl'@;
put 'ZmF1bHQ6cmV0dXJuITF9fXZhciBQaT1mdW5jdGlvbihQKXtmb3IodmFyIEw9IiIsUT0wLHJlPTAscGU9MCxfZT0wLHZlPTAsU2U9MDtRPFAubGVuZ3RoOykocmU9UC5jaGFyQ29kZUF0KFErKykpPDEyOD9MKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJlKToocGU9UC5jaGFyQ29kZUF0KFErKyks'@;
put 'cmU+MTkxJiZyZTwyMjQ/KHZlPSgzMSZyZSk8PDYsdmV8PTYzJnBlLEwrPVN0cmluZy5mcm9tQ2hhckNvZGUodmUpKTooX2U9UC5jaGFyQ29kZUF0KFErKykscmU8MjQwP0wrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JnJlKTw8MTJ8KDYzJnBlKTw8Nnw2MyZfZSk6KFNlPSgoNyZyZSk8PDE4'@;
put 'fCg2MyZwZSk8PDEyfCg2MyZfZSk8PDZ8NjMmKHZlPVAuY2hhckNvZGVBdChRKyspKSktNjU1MzYsTCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoU2U+Pj4xMCYxMDIzKSksTCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZTZSkpKSkpO3JldHVybiBMfSxMbz1mdW5jdGlv'@;
put 'bih5KXtmb3IodmFyIFA9W10sTD0wLFE9MCxyZT0wO0w8eS5sZW5ndGg7KXN3aXRjaChRPXkuY2hhckNvZGVBdChMKyspLCEwKXtjYXNlIFE8MTI4OlAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFEpKTticmVhaztjYXNlIFE8MjA0ODpQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxOTIr'@;
put 'KFE+PjYpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZRKSkpO2JyZWFrO2Nhc2UgUT49NTUyOTYmJlE8NTczNDQ6US09NTUyOTYscmU9eS5jaGFyQ29kZUF0KEwrKyktNTYzMjArKFE8PDEwKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyNDArKHJlPj4xOCY3KSkp'@;
put 'LFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsocmU+PjEyJjYzKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsocmU+PjYmNjMpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZyZSkpKTticmVhaztkZWZhdWx0OlAucHVzaChTdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlKDIyNCsoUT4+MTIpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhRPj42JjYzKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmUSkpKX1yZXR1cm4gUC5qb2luKCIiKX07aWYoaGUpe3ZhciBocz1mdW5jdGlvbihQKXt2YXIgUSxyZSxTZSxMPUJ1'@;
put 'ZmZlci5hbGxvYygyKlAubGVuZ3RoKSxwZT0xLF9lPTAsdmU9MDtmb3IocmU9MDtyZTxQLmxlbmd0aDtyZSs9cGUpcGU9MSwoU2U9UC5jaGFyQ29kZUF0KHJlKSk8MTI4P1E9U2U6U2U8MjI0PyhRPTY0KigzMSZTZSkrKDYzJlAuY2hhckNvZGVBdChyZSsxKSkscGU9Mik6U2U8MjQwPyhRPTQw'@;
put 'OTYqKDE1JlNlKSs2NCooNjMmUC5jaGFyQ29kZUF0KHJlKzEpKSsoNjMmUC5jaGFyQ29kZUF0KHJlKzIpKSxwZT0zKToocGU9NCxRPTI2MjE0NCooNyZTZSkrNDA5NiooNjMmUC5jaGFyQ29kZUF0KHJlKzEpKSs2NCooNjMmUC5jaGFyQ29kZUF0KHJlKzIpKSsoNjMmUC5jaGFyQ29kZUF0KHJl'@;
put 'KzMpKSx2ZT01NTI5NisoKFEtPTY1NTM2KT4+PjEwJjEwMjMpLFE9NTYzMjArKDEwMjMmUSkpLDAhPT12ZSYmKExbX2UrK109MjU1JnZlLExbX2UrK109dmU+Pj44LHZlPTApLExbX2UrK109USUyNTYsTFtfZSsrXT1RPj4+ODtyZXR1cm4gTC5zbGljZSgwLF9lKS50b1N0cmluZygidWNzMiIp'@;
put 'fSxycz0iZm9vIGJhciBiYXpceGUyXHg5OFx4ODNceGYwXHg5Zlx4OGRceGEzIjtQaShycyk9PWhzKHJzKSYmKFBpPWhzKTt2YXIgTGM9ZnVuY3Rpb24oUCl7cmV0dXJuIHVlKFAsImJpbmFyeSIpLnRvU3RyaW5nKCJ1dGY4Iil9O1BpKHJzKT09TGMocnMpJiYoUGk9TGMpLExvPWZ1bmN0aW9u'@;
put 'KHkpe3JldHVybiB1ZSh5LCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfX12YXIgeSx1bD0oeT17fSxmdW5jdGlvbihMLFEpe3ZhciByZT1MKyJ8IisoUXx8IiIpO3JldHVybiB5W3JlXT95W3JlXTp5W3JlXT1uZXcgUmVnRXhwKCI8KD86XFx3KzopPyIrTCsnKD86IHhtbDpzcGFjZT0icHJl'@;
put 'c2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytMKyI+IixRfHwiIil9KSxSYz1mdW5jdGlvbigpe3ZhciB5PVtbIm5ic3AiLCIgIl0sWyJtaWRkb3QiLCJceGI3Il0sWyJxdW90IiwnIiddLFsiYXBvcyIsIiciXSxbImd0IiwiPiJdLFsibHQiLCI8Il0sWyJhbXAi'@;
put 'LCImIl1dLm1hcChmdW5jdGlvbihQKXtyZXR1cm5bbmV3IFJlZ0V4cCgiJiIrUFswXSsiOyIsImlnIiksUFsxXV19KTtyZXR1cm4gZnVuY3Rpb24oTCl7Zm9yKHZhciBRPUwucmVwbGFjZSgvXltcdFxuXHIgXSsvLCIiKS5yZXBsYWNlKC9bXHRcblxyIF0rJC8sIiIpLnJlcGxhY2UoL1tcdFxu'@;
put 'XHIgXSsvZywiICIpLnJlcGxhY2UoLzxccypbYkJdW3JSXVxzKlwvPz4vZywiXG4iKS5yZXBsYWNlKC88W14+XSo+L2csIiIpLHJlPTA7cmU8eS5sZW5ndGg7KytyZSlRPVEucmVwbGFjZSh5W3JlXVswXSx5W3JlXVsxXSk7cmV0dXJuIFF9fSgpLE4wPWZ1bmN0aW9uKCl7dmFyIHk9e307cmV0'@;
put 'dXJuIGZ1bmN0aW9uKEwpe3JldHVybiB2b2lkIDAhPT15W0xdP3lbTF06eVtMXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK0wrIj4oW1xcc1xcU10qPyk8Lyg/OnZ0Oik/IitMKyI+IiwiZyIpfX0oKSxzMz0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyxrMj0vPCg/OnZ0OikoW14+XSopPihbXHNc'@;
put 'U10qKTwvO2Z1bmN0aW9uIGUwKHksUCl7dmFyIEw9bG4oeSksUT15Lm1hdGNoKE4wKEwuYmFzZVR5cGUpKXx8W10scmU9W107aWYoUS5sZW5ndGghPUwuc2l6ZSl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHZlY3RvciBsZW5ndGggIitRLmxlbmd0aCsiICE9ICIrTC5z'@;
put 'aXplKTtyZXR1cm4gcmV9cmV0dXJuIFEuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIF9lPXBlLnJlcGxhY2UoczMsIiIpLm1hdGNoKGsyKTtfZSYmcmUucHVzaCh7djpQaShfZVsyXSksdDpfZVsxXX0pfSkscmV9dmFyIHh1PS8oXlxzfFxzJHxcbikvO2Z1bmN0aW9uIGZzKHksUCl7cmV0dXJu'@;
put 'IjwiK3krKFAubWF0Y2goeHUpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUCsiPC8iK3krIj4ifWZ1bmN0aW9uIFBhKHkpe3JldHVybiBsdCh5KS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuIiAiK1ArJz0iJyt5W1BdKyciJ30pLmpvaW4oIiIpfWZ1bmN0aW9uIFNyKHksUCxMKXty'@;
put 'ZXR1cm4iPCIreSsobnVsbCE9TD9QYShMKToiIikrKG51bGwhPVA/KFAubWF0Y2goeHUpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUCsiPC8iK3k6Ii8iKSsiPiJ9ZnVuY3Rpb24gUGgoeSxQKXt0cnl7cmV0dXJuIHkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKi8sIiIp'@;
put 'fWNhdGNoKEwpe2lmKFApdGhyb3cgTH1yZXR1cm4iIn12YXIgQXIsX2MsaXM9e2RjOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsZGN0ZXJtczoiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIsZGNtaXR5cGU6Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS8iLG14OiJo'@;
put 'dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9tYWMvZXhjZWwvMjAwOC9tYWluIixyOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIixzanM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y'@;
put 'Zy9wYWNrYWdlLzIwMDYvc2hlZXRqcy9jb3JlLXByb3BlcnRpZXMiLHZ0OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyIseHNpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIseHNk'@;
put 'OiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsbWFpbjpbImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFz'@;
put 'Lm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvMiJdfSxXaT17bzoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIix4OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQt'@;
put 'Y29tOm9mZmljZTpleGNlbCIsc3M6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0IixkdDoidXVpZDpDMkY0MTAxMC02NUIzLTExZDEtQTI5Ri0wMEFBMDBDMTQ4ODIiLG12OiJodHRwOi8vbWFjVm1sU2NoZW1hVXJpIix2OiJ1cm46c2NoZW1hcy1taWNyb3Nv'@;
put 'ZnQtY29tOnZtbCIsaHRtbDoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9LFNhPWZ1bmN0aW9uKHkpe2Zvcih2YXIgUD1bXSxRPTA7UTx5WzBdLmxlbmd0aDsrK1EpaWYoeVswXVtRXSlmb3IodmFyIHJlPTAscGU9eVswXVtRXS5sZW5ndGg7cmU8cGU7cmUrPTEwMjQwKVAucHVz'@;
put 'aC5hcHBseShQLHlbMF1bUV0uc2xpY2UocmUscmUrMTAyNDApKTtyZXR1cm4gUH0sRmg9U2EsRXU9ZnVuY3Rpb24oeSxQLEwpe2Zvcih2YXIgUT1bXSxyZT1QO3JlPEw7cmUrPTIpUS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoWW4oeSxyZSkpKTtyZXR1cm4gUS5qb2luKCIiKS5yZXBsYWNl'@;
put 'KHYsIiIpfSxBcz1FdSxuMD1mdW5jdGlvbih5LFAsTCl7Zm9yKHZhciBRPVtdLHJlPVA7cmU8UCtMOysrcmUpUS5wdXNoKCgiMCIreVtyZV0udG9TdHJpbmcoMTYpKS5zbGljZSgtMikpO3JldHVybiBRLmpvaW4oIiIpfSxxYT1uMCx2Yz1mdW5jdGlvbih5LFAsTCl7Zm9yKHZhciBRPVtdLHJl'@;
put 'PVA7cmU8TDtyZSsrKVEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFFpKHkscmUpKSk7cmV0dXJuIFEuam9pbigiIil9LEhoPXZjLElzPWZ1bmN0aW9uKHksUCl7dmFyIEw9eWkoeSxQKTtyZXR1cm4gTD4wP3ZjKHksUCs0LFArNCtMLTEpOiIifSxibz1JcyxyMD1mdW5jdGlvbih5LFApe3Zh'@;
put 'ciBMPXlpKHksUCk7cmV0dXJuIEw+MD92Yyh5LFArNCxQKzQrTC0xKToiIn0sVDI9cjAsRDI9ZnVuY3Rpb24oeSxQKXt2YXIgTD0yKnlpKHksUCk7cmV0dXJuIEw+MD92Yyh5LFArNCxQKzQrTC0xKToiIn0sbDM9RDI7QXI9X2M9ZnVuY3Rpb24oUCxMKXt2YXIgUT15aShQLEwpO3JldHVybiBR'@;
put 'PjA/RXUoUCxMKzQsTCs0K1EpOiIifTt2YXIgbzAsSTIsa289ZnVuY3Rpb24oeSxQKXt2YXIgTD15aSh5LFApO3JldHVybiBMPjA/dmMoeSxQKzQsUCs0K0wpOiIifSxDcz1rbztvMD1JMj1mdW5jdGlvbih5LFApe3JldHVybiBmdW5jdGlvbiAkYSh5LFApe2Zvcih2YXIgTD0xLTIqKHlbUCs3'@;
put 'XT4+PjcpLFE9KCgxMjcmeVtQKzddKTw8NCkrKHlbUCs2XT4+PjQmMTUpLHJlPTE1JnlbUCs2XSxwZT01O3BlPj0wOy0tcGUpcmU9MjU2KnJlK3lbUCtwZV07cmV0dXJuIDIwNDc9PVE/MD09cmU/TCooMS8wKTpOYU46KDA9PVE/UT0tMTAyMjooUS09MTAyMyxyZSs9TWF0aC5wb3coMiw1Mikp'@;
put 'LEwqTWF0aC5wb3coMixRLTUyKSpyZSl9KHksUCl9O3ZhciBOaD1mdW5jdGlvbihQKXtyZXR1cm4gQXJyYXkuaXNBcnJheShQKX07aGUmJihFdT1mdW5jdGlvbih5LFAsTCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih5KT95LnRvU3RyaW5nKCJ1dGYxNmxlIixQLEwpLnJlcGxhY2UodiwiIik6'@;
put 'QXMoeSxQLEwpfSxuMD1mdW5jdGlvbih5LFAsTCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih5KT95LnRvU3RyaW5nKCJoZXgiLFAsUCtMKTpxYSh5LFAsTCl9LElzPWZ1bmN0aW9uKFAsTCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gYm8oUCxMKTt2YXIgUT1QLnJlYWRVSW50MzJM'@;
put 'RShMKTtyZXR1cm4gUT4wP1AudG9TdHJpbmcoInV0ZjgiLEwrNCxMKzQrUS0xKToiIn0scjA9ZnVuY3Rpb24oUCxMKXtpZighQnVmZmVyLmlzQnVmZmVyKFApKXJldHVybiBUMihQLEwpO3ZhciBRPVAucmVhZFVJbnQzMkxFKEwpO3JldHVybiBRPjA/UC50b1N0cmluZygidXRmOCIsTCs0LEwr'@;
put 'NCtRLTEpOiIifSxEMj1mdW5jdGlvbihQLEwpe2lmKCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJuIGwzKFAsTCk7dmFyIFE9MipQLnJlYWRVSW50MzJMRShMKTtyZXR1cm4gUC50b1N0cmluZygidXRmMTZsZSIsTCs0LEwrNCtRLTEpfSxBcj1mdW5jdGlvbihQLEwpe2lmKCFCdWZmZXIuaXNC'@;
put 'dWZmZXIoUCkpcmV0dXJuIF9jKFAsTCk7dmFyIFE9UC5yZWFkVUludDMyTEUoTCk7cmV0dXJuIFAudG9TdHJpbmcoInV0ZjE2bGUiLEwrNCxMKzQrUSl9LGtvPWZ1bmN0aW9uKFAsTCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gQ3MoUCxMKTt2YXIgUT1QLnJlYWRVSW50MzJMRShM'@;
put 'KTtyZXR1cm4gUC50b1N0cmluZygidXRmOCIsTCs0LEwrNCtRKX0sdmM9ZnVuY3Rpb24oUCxMLFEpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUCk/UC50b1N0cmluZygidXRmOCIsTCxRKTpIaChQLEwsUSl9LFNhPWZ1bmN0aW9uKHkpe3JldHVybiB5WzBdLmxlbmd0aD4wJiZCdWZmZXIuaXNC'@;
put 'dWZmZXIoeVswXVswXSk/QnVmZmVyLmNvbmNhdCh5WzBdKTpGaCh5KX0sUz1mdW5jdGlvbih5KXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHlbMF0pP0J1ZmZlci5jb25jYXQoeSk6W10uY29uY2F0LmFwcGx5KFtdLHkpfSxvMD1mdW5jdGlvbihQLEwpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIo'@;
put 'UCk/UC5yZWFkRG91YmxlTEUoTCk6STIoUCxMKX0sTmg9ZnVuY3Rpb24oUCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihQKXx8QXJyYXkuaXNBcnJheShQKX0pLHR5cGVvZiBjcHRhYmxlPCJ1IiYmKEV1PWZ1bmN0aW9uKHksUCxMKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCx5'@;
put 'LnNsaWNlKFAsTCkpLnJlcGxhY2UodiwiIil9LHZjPWZ1bmN0aW9uKHksUCxMKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEseS5zbGljZShQLEwpKX0sSXM9ZnVuY3Rpb24oeSxQKXt2YXIgTD15aSh5LFApO3JldHVybiBMPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoUix5LnNs'@;
put 'aWNlKFArNCxQKzQrTC0xKSk6IiJ9LHIwPWZ1bmN0aW9uKHksUCl7dmFyIEw9eWkoeSxQKTtyZXR1cm4gTD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKE8seS5zbGljZShQKzQsUCs0K0wtMSkpOiIifSxEMj1mdW5jdGlvbih5LFApe3ZhciBMPTIqeWkoeSxQKTtyZXR1cm4gTD4wP2NwdGFibGUu'@;
put 'dXRpbHMuZGVjb2RlKDEyMDAseS5zbGljZShQKzQsUCs0K0wtMSkpOiIifSxBcj1mdW5jdGlvbih5LFApe3ZhciBMPXlpKHksUCk7cmV0dXJuIEw+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLHkuc2xpY2UoUCs0LFArNCtMKSk6IiJ9LGtvPWZ1bmN0aW9uKHksUCl7dmFyIEw9eWkoeSxQ'@;
put 'KTtyZXR1cm4gTD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLHkuc2xpY2UoUCs0LFArNCtMKSk6IiJ9KTt2YXIgUWk9ZnVuY3Rpb24oeSxQKXtyZXR1cm4geVtQXX0sWW49ZnVuY3Rpb24oeSxQKXtyZXR1cm4gMjU2KnlbUCsxXSt5W1BdfSxiaT1mdW5jdGlvbih5LFApe3ZhciBMPTI1'@;
put 'Nip5W1ArMV0reVtQXTtyZXR1cm4gTDwzMjc2OD9MOi0xKig2NTUzNS1MKzEpfSx5aT1mdW5jdGlvbih5LFApe3JldHVybiB5W1ArM10qKDE8PDI0KSsoeVtQKzJdPDwxNikrKHlbUCsxXTw8OCkreVtQXX0sb3M9ZnVuY3Rpb24oeSxQKXtyZXR1cm4geVtQKzNdPDwyNHx5W1ArMl08PDE2fHlb'@;
put 'UCsxXTw8OHx5W1BdfSxGYT1mdW5jdGlvbih5LFApe3JldHVybiB5W1BdPDwyNHx5W1ArMV08PDE2fHlbUCsyXTw8OHx5W1ArM119O2Z1bmN0aW9uIEhhKHksUCl7dmFyIFEscmUsX2UsdmUsU2UsSGUsTD0iIixwZT1bXTtzd2l0Y2goUCl7Y2FzZSJkYmNzIjppZihIZT10aGlzLmwsaGUmJkJ1'@;
put 'ZmZlci5pc0J1ZmZlcih0aGlzKSlMPXRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKnkpLnRvU3RyaW5nKCJ1dGYxNmxlIik7ZWxzZSBmb3IoU2U9MDtTZTx5OysrU2UpTCs9U3RyaW5nLmZyb21DaGFyQ29kZShZbih0aGlzLEhlKSksSGUrPTI7eSo9MjticmVhaztjYXNlInV0ZjgiOkw9dmMo'@;
put 'dGhpcyx0aGlzLmwsdGhpcy5sK3kpO2JyZWFrO2Nhc2UidXRmMTZsZSI6TD1FdSh0aGlzLHRoaXMubCx0aGlzLmwrKHkqPTIpKTticmVhaztjYXNlIndzdHIiOmlmKCEodHlwZW9mIGNwdGFibGU8InUiKSlyZXR1cm4gSGEuY2FsbCh0aGlzLHksImRiY3MiKTtMPWNwdGFibGUudXRpbHMuZGVj'@;
put 'b2RlKE8sdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqeSkpLHkqPTI7YnJlYWs7Y2FzZSJscHN0ci1hbnNpIjpMPUlzKHRoaXMsdGhpcy5sKSx5PTQreWkodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBzdHItY3AiOkw9cjAodGhpcyx0aGlzLmwpLHk9NCt5aSh0aGlzLHRoaXMubCk7YnJl'@;
put 'YWs7Y2FzZSJscHdzdHIiOkw9RDIodGhpcyx0aGlzLmwpLHk9NCsyKnlpKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwcDQiOnk9NCt5aSh0aGlzLHRoaXMubCksTD1Bcih0aGlzLHRoaXMubCksMiZ5JiYoeSs9Mik7YnJlYWs7Y2FzZSI4bHBwNCI6eT00K3lpKHRoaXMsdGhpcy5sKSxMPWtv'@;
put 'KHRoaXMsdGhpcy5sKSwzJnkmJih5Kz00LSgzJnkpKTticmVhaztjYXNlImNzdHIiOmZvcih5PTAsTD0iIjswIT09KF9lPVFpKHRoaXMsdGhpcy5sK3krKykpOylwZS5wdXNoKHEoX2UpKTtMPXBlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiX3dzdHIiOmZvcih5PTAsTD0iIjswIT09KF9lPVluKHRo'@;
put 'aXMsdGhpcy5sK3kpKTspcGUucHVzaChxKF9lKSkseSs9Mjt5Kz0yLEw9cGUuam9pbigiIik7YnJlYWs7Y2FzZSJkYmNzLWNvbnQiOmZvcihMPSIiLEhlPXRoaXMubCxTZT0wO1NlPHk7KytTZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKEhlKSlyZXR1cm4gX2U9UWko'@;
put 'dGhpcyxIZSksdGhpcy5sPUhlKzEsdmU9SGEuY2FsbCh0aGlzLHktU2UsX2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpLHBlLmpvaW4oIiIpK3ZlO3BlLnB1c2gocShZbih0aGlzLEhlKSkpLEhlKz0yfUw9cGUuam9pbigiIikseSo9MjticmVhaztjYXNlImNwc3RyIjppZih0eXBlb2YgY3B0'@;
put 'YWJsZTwidSIpe0w9Y3B0YWJsZS51dGlscy5kZWNvZGUoTyx0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwreSkpO2JyZWFrfWNhc2Uic2Jjcy1jb250Ijpmb3IoTD0iIixIZT10aGlzLmwsU2U9MDtTZSE9eTsrK1NlKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YoSGUpKXJl'@;
put 'dHVybiBfZT1RaSh0aGlzLEhlKSx0aGlzLmw9SGUrMSx2ZT1IYS5jYWxsKHRoaXMseS1TZSxfZT8iZGJjcy1jb250Ijoic2Jjcy1jb250IikscGUuam9pbigiIikrdmU7cGUucHVzaChxKFFpKHRoaXMsSGUpKSksSGUrPTF9TD1wZS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaCh5KXtj'@;
put 'YXNlIDE6cmV0dXJuIFE9UWkodGhpcyx0aGlzLmwpLHRoaXMubCsrLFE7Y2FzZSAyOnJldHVybiBRPSgiaSI9PT1QP2JpOlluKSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLFE7Y2FzZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT1QJiYxMjgmdGhpc1t0aGlzLmwrM10/KHJlPXlpKHRoaXMsdGhpcy5s'@;
put 'KSx0aGlzLmwrPTQscmUpOihRPSh5PjA/b3M6RmEpKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsUSk7Y2FzZSA4OmNhc2UtODppZigiZiI9PT1QKXJldHVybiByZT04PT15P28wKHRoaXMsdGhpcy5sKTpvMChbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhp'@;
put 'c1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxyZTt5PTg7Y2FzZSAxNjpMPW4wKHRoaXMsdGhpcy5sLHkpfX1yZXR1cm4gdGhpcy5sKz15LEx9dmFyICRvPWZ1bmN0aW9uKHksUCxMKXt5'@;
put 'W0xdPTI1NSZQLHlbTCsxXT1QPj4+OCYyNTUseVtMKzJdPVA+Pj4xNiYyNTUseVtMKzNdPVA+Pj4yNCYyNTV9LFYwPWZ1bmN0aW9uKHksUCxMKXt5W0xdPTI1NSZQLHlbTCsxXT1QPj44JjI1NSx5W0wrMl09UD4+MTYmMjU1LHlbTCszXT1QPj4yNCYyNTV9LERhPWZ1bmN0aW9uKHksUCxMKXt5'@;
put 'W0xdPTI1NSZQLHlbTCsxXT1QPj4+OCYyNTV9O2Z1bmN0aW9uIFZoKHksUCxMKXt2YXIgUT0wLHJlPTA7aWYoImRiY3MiPT09TCl7Zm9yKHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpRGEodGhpcyxQLmNoYXJDb2RlQXQocmUpLHRoaXMubCsyKnJlKTtRPTIqUC5sZW5ndGh9ZWxzZSBpZigic2Jj'@;
put 'cyI9PT1MKXtpZih0eXBlb2YgY3B0YWJsZTwidSImJjg3ND09Uilmb3IocmU9MDtyZSE9UC5sZW5ndGg7KytyZSl7dmFyIHBlPWNwdGFibGUudXRpbHMuZW5jb2RlKFIsUC5jaGFyQXQocmUpKTt0aGlzW3RoaXMubCtyZV09cGVbMF19ZWxzZSBmb3IoUD1QLnJlcGxhY2UoL1teXHgwMC1ceDdG'@;
put 'XS9nLCJfIikscmU9MDtyZSE9UC5sZW5ndGg7KytyZSl0aGlzW3RoaXMubCtyZV09MjU1JlAuY2hhckNvZGVBdChyZSk7UT1QLmxlbmd0aH1lbHNle2lmKCJoZXgiPT09TCl7Zm9yKDtyZTx5OysrcmUpdGhpc1t0aGlzLmwrK109cGFyc2VJbnQoUC5zbGljZSgyKnJlLDIqcmUrMiksMTYpfHww'@;
put 'O3JldHVybiB0aGlzfWlmKCJ1dGYxNmxlIj09PUwpe3ZhciBfZT1NYXRoLm1pbih0aGlzLmwreSx0aGlzLmxlbmd0aCk7Zm9yKHJlPTA7cmU8TWF0aC5taW4oUC5sZW5ndGgseSk7KytyZSl7dmFyIHZlPVAuY2hhckNvZGVBdChyZSk7dGhpc1t0aGlzLmwrK109MjU1JnZlLHRoaXNbdGhpcy5s'@;
put 'KytdPXZlPj44fWZvcig7dGhpcy5sPF9lOyl0aGlzW3RoaXMubCsrXT0wO3JldHVybiB0aGlzfXN3aXRjaCh5KXtjYXNlIDE6UT0xLHRoaXNbdGhpcy5sXT0yNTUmUDticmVhaztjYXNlIDI6UT0yLHRoaXNbdGhpcy5sXT0yNTUmUCx0aGlzW3RoaXMubCsxXT0yNTUmKFA+Pj49OCk7YnJlYWs7'@;
put 'Y2FzZSAzOlE9Myx0aGlzW3RoaXMubF09MjU1JlAsdGhpc1t0aGlzLmwrMV09MjU1JihQPj4+PTgpLHRoaXNbdGhpcy5sKzJdPTI1NSYoUD4+Pj04KTticmVhaztjYXNlIDQ6UT00LCRvKHRoaXMsUCx0aGlzLmwpO2JyZWFrO2Nhc2UgODppZihRPTgsImYiPT09TCl7IWZ1bmN0aW9uIHQwKHks'@;
put 'UCxMKXt2YXIgUT0oUDwwfHwxL1A9PS0xLzA/MTowKTw8NyxyZT0wLHBlPTAsX2U9UT8tUDpQO2lzRmluaXRlKF9lKT8wPT1fZT9yZT1wZT0wOihyZT1NYXRoLmZsb29yKE1hdGgubG9nKF9lKS9NYXRoLkxOMikscGU9X2UqTWF0aC5wb3coMiw1Mi1yZSkscmU8PS0xMDIzJiYoIWlzRmluaXRl'@;
put 'KHBlKXx8cGU8TWF0aC5wb3coMiw1MikpP3JlPS0xMDIyOihwZS09TWF0aC5wb3coMiw1MikscmUrPTEwMjMpKToocmU9MjA0NyxwZT1pc05hTihQKT8yNjk4NTowKTtmb3IodmFyIHZlPTA7dmU8PTU7Kyt2ZSxwZS89MjU2KXlbTCt2ZV09MjU1JnBlO3lbTCs2XT0oMTUmcmUpPDw0fDE1JnBl'@;
put 'LHlbTCs3XT1yZT4+NHxRfSh0aGlzLFAsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDpRPTQsVjAodGhpcyxQLHRoaXMubCl9fXJldHVybiB0aGlzLmwrPVEsdGhpc31mdW5jdGlvbiBCaCh5LFApe3ZhciBMPW4wKHRoaXMsdGhpcy5sLHkubGVuZ3RoPj4xKTtpZihMIT09eSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoUCsiRXhwZWN0ZWQgIit5KyIgc2F3ICIrTCk7dGhpcy5sKz15Lmxlbmd0aD4+MX1mdW5jdGlvbiBvbCh5LFApe3kubD1QLHkucmVhZF9zaGlmdD1IYSx5LmNoaz1CaCx5LndyaXRlX3NoaWZ0PVZofWZ1bmN0aW9uIGJjKHksUCl7eS5sKz1QfWZ1bmN0aW9uIGZyKHkp'@;
put 'e3ZhciBQPUcoeSk7cmV0dXJuIG9sKFAsMCksUH1mdW5jdGlvbiBIbyh5LFAsTCl7aWYoeSl7dmFyIFEscmUscGU7b2woeSx5Lmx8fDApO2Zvcih2YXIgX2U9eS5sZW5ndGgsdmU9MCxTZT0wO3kubDxfZTspezEyOCYodmU9eS5yZWFkX3NoaWZ0KDEpKSYmKHZlPSgxMjcmdmUpKygoMTI3Jnku'@;
put 'cmVhZF9zaGlmdCgxKSk8PDcpKTt2YXIgSGU9bWZbdmVdfHxtZls2NTUzNV07Zm9yKHBlPTEyNyYoUT15LnJlYWRfc2hpZnQoMSkpLHJlPTE7cmU8NCYmMTI4JlE7KytyZSlwZSs9KDEyNyYoUT15LnJlYWRfc2hpZnQoMSkpKTw8NypyZTtTZT15LmwrcGU7dmFyIEJlPShIZS5mfHxiYykoeSxw'@;
put 'ZSxMKTtpZih5Lmw9U2UsUChCZSxIZS5uLHZlKSlyZXR1cm59fX1mdW5jdGlvbiB5Yygpe3ZhciB5PVtdLFA9aGU/MjU2OjIwNDgsTD1mdW5jdGlvbihIZSl7dmFyIEJlPWZyKEhlKTtyZXR1cm4gb2woQmUsMCksQmV9LFE9TChQKSxyZT1mdW5jdGlvbigpe1EmJihRLmxlbmd0aD5RLmwmJigo'@;
put 'UT1RLnNsaWNlKDAsUS5sKSkubD1RLmxlbmd0aCksUS5sZW5ndGg+MCYmeS5wdXNoKFEpLFE9bnVsbCl9LHBlPWZ1bmN0aW9uKEhlKXtyZXR1cm4gUSYmSGU8US5sZW5ndGgtUS5sP1E6KHJlKCksUT1MKE1hdGgubWF4KEhlKzEsUCkpKX07cmV0dXJue25leHQ6cGUscHVzaDpmdW5jdGlvbihI'@;
put 'ZSl7cmUoKSxudWxsPT0oUT1IZSkubCYmKFEubD1RLmxlbmd0aCkscGUoUCl9LGVuZDpmdW5jdGlvbigpe3JldHVybiByZSgpLFNhKFt5XSl9LF9idWZzOnl9fWZ1bmN0aW9uIHVpKHksUCxMLFEpe3ZhciBwZSxyZT0rYjVbUF07aWYoIWlzTmFOKHJlKSl7UXx8KFE9bWZbcmVdLnB8fChMfHxb'@;
put 'XSkubGVuZ3RofHwwKSxwZT0xKyhyZT49MTI4PzE6MCkrMSxRPj0xMjgmJisrcGUsUT49MTYzODQmJisrcGUsUT49MjA5NzE1MiYmKytwZTt2YXIgX2U9eS5uZXh0KHBlKTtyZTw9MTI3P19lLndyaXRlX3NoaWZ0KDEscmUpOihfZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JnJlKSksX2Uud3Jp'@;
put 'dGVfc2hpZnQoMSxyZT4+NykpO2Zvcih2YXIgdmU9MDs0IT12ZTsrK3ZlKXtpZighKFE+PTEyOCkpe19lLndyaXRlX3NoaWZ0KDEsUSk7YnJlYWt9X2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZRKSksUT4+PTd9UT4wJiZOaChMKSYmeS5wdXNoKEwpfX1mdW5jdGlvbiBsdSh5LFAsTCl7dmFy'@;
put 'IFE9b24oeSk7aWYoUC5zPyhRLmNSZWwmJihRLmMrPVAucy5jKSxRLnJSZWwmJihRLnIrPVAucy5yKSk6KFEuY1JlbCYmKFEuYys9UC5jKSxRLnJSZWwmJihRLnIrPVAucikpLCFMfHxMLmJpZmY8MTIpe2Zvcig7US5jPj0yNTY7KVEuYy09MjU2O2Zvcig7US5yPj02NTUzNjspUS5yLT02NTUz'@;
put 'Nn1yZXR1cm4gUX1mdW5jdGlvbiBocih5LFAsTCl7dmFyIFE9b24oeSk7cmV0dXJuIFEucz1sdShRLnMsUC5zLEwpLFEuZT1sdShRLmUsUC5zLEwpLFF9ZnVuY3Rpb24gTDIoeSxQKXtpZih5LmNSZWwmJnkuYzwwKWZvcih5PW9uKHkpO3kuYzwwOyl5LmMrPVA+OD8xNjM4NDoyNTY7aWYoeS5y'@;
put 'UmVsJiZ5LnI8MClmb3IoeT1vbih5KTt5LnI8MDspeS5yKz1QPjg/MTA0ODU3NjpQPjU/NjU1MzY6MTYzODQ7aWYoeS5jUmVsJiZ5LmM+PShQPjg/MTYzODQ6MjU2KSlmb3IoeT1vbih5KTt5LmM+PShQPjg/MTYzODQ6MjU2KTspeS5jLT1QPjg/MTYzODQ6MjU2O2lmKHkuclJlbCYmeS5yPj0x'@;
put 'MDQ4NTc2KWZvcih5PW9uKHkpO3kucj49MTA0ODU3NjspeS5yLT0xMDQ4NTc2O3ZhciBMPWRpKHkpO3JldHVybiF5LmNSZWwmJm51bGwhPXkuY1JlbCYmKEw9ZnVuY3Rpb24gSzcoeSl7cmV0dXJuIHkucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KEwpKSwheS5yUmVsJiZudWxsIT15LnJS'@;
put 'ZWwmJihMPWZ1bmN0aW9uIG5tKHkpe3JldHVybiB5LnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShMKSksTH1mdW5jdGlvbiBtaSh5LFApe3JldHVybiAwIT15LnMucnx8eS5zLnJSZWx8fHkuZS5yIT0oUC5iaWZmPj0xMj8xMDQ4NTc1OlAuYmlmZj49OD82NTUzNjoxNjM4'@;
put 'NCl8fHkuZS5yUmVsPzAhPXkucy5jfHx5LnMuY1JlbHx8eS5lLmMhPShQLmJpZmY+PTEyPzE2MzgzOjI1NSl8fHkuZS5jUmVsP0wyKHkucyxQLmJpZmYpKyI6IitMMih5LmUsUC5iaWZmKTooeS5zLnJSZWw/IiI6IiQiKStIcyh5LnMucikrIjoiKyh5LmUuclJlbD8iIjoiJCIpK0hzKHkuZS5y'@;
put 'KTooeS5zLmNSZWw/IiI6IiQiKStOcyh5LnMuYykrIjoiKyh5LmUuY1JlbD8iIjoiJCIpK05zKHkuZS5jKX12YXIgeGQ9e307ZnVuY3Rpb24gQjAoeSl7cmV0dXJuIHBhcnNlSW50KGZ1bmN0aW9uIGMzKHkpe3JldHVybiB5LnJlcGxhY2UoL1wkKFxkKykkLywiJDEiKX0oeSksMTApLTF9ZnVu'@;
put 'Y3Rpb24gSHMoeSl7cmV0dXJuIiIrKHkrMSl9ZnVuY3Rpb24gamgoeSl7Zm9yKHZhciBQPWZ1bmN0aW9uIG5zKHkpe3JldHVybiB5LnJlcGxhY2UoL15cJChbQS1aXSkvLCIkMSIpfSh5KSxMPTAsUT0wO1EhPT1QLmxlbmd0aDsrK1EpTD0yNipMK1AuY2hhckNvZGVBdChRKS02NDtyZXR1cm4g'@;
put 'TC0xfWZ1bmN0aW9uIE5zKHkpe2lmKHk8MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY29sdW1uICIreSk7dmFyIFA9IiI7Zm9yKCsreTt5O3k9TWF0aC5mbG9vcigoeS0xKS8yNikpUD1TdHJpbmcuZnJvbUNoYXJDb2RlKCh5LTEpJTI2KzY1KStQO3JldHVybiBQfWZ1bmN0aW9uIHNzKHkp'@;
put 'e2Zvcih2YXIgUD0wLEw9MCxRPTA7UTx5Lmxlbmd0aDsrK1Epe3ZhciByZT15LmNoYXJDb2RlQXQoUSk7cmU+PTQ4JiZyZTw9NTc/UD0xMCpQKyhyZS00OCk6cmU+PTY1JiZyZTw9OTAmJihMPTI2KkwrKHJlLTY0KSl9cmV0dXJue2M6TC0xLHI6UC0xfX1mdW5jdGlvbiBkaSh5KXtmb3IodmFy'@;
put 'IFA9eS5jKzEsTD0iIjtQO1A9KFAtMSkvMjZ8MClMPVN0cmluZy5mcm9tQ2hhckNvZGUoKFAtMSklMjYrNjUpK0w7cmV0dXJuIEwrKHkucisxKX1mdW5jdGlvbiBXcyh5KXt2YXIgUD15LmluZGV4T2YoIjoiKTtyZXR1cm4tMT09UD97czpzcyh5KSxlOnNzKHkpfTp7czpzcyh5LnNsaWNlKDAs'@;
put 'UCkpLGU6c3MoeS5zbGljZShQKzEpKX19ZnVuY3Rpb24gT28oeSxQKXtyZXR1cm4gdHlwZW9mIFA+InUifHwibnVtYmVyIj09dHlwZW9mIFA/T28oeS5zLHkuZSk6KCJzdHJpbmciIT10eXBlb2YgeSYmKHk9ZGkoeSkpLCJzdHJpbmciIT10eXBlb2YgUCYmKFA9ZGkoUCkpLHk9PVA/eTp5KyI6'@;
put 'IitQKX1mdW5jdGlvbiBPaSh5KXt2YXIgUD1KU09OLnBhcnNlKCd7InMiOnsiYyI6MCwiciI6MH0sImUiOnsiYyI6MCwiciI6MH19JyksTD0wLFE9MCxyZT0wLHBlPXkubGVuZ3RoO2ZvcihMPTA7UTxwZSYmISgocmU9eS5jaGFyQ29kZUF0KFEpLTY0KTwxfHxyZT4yNik7KytRKUw9MjYqTCty'@;
put 'ZTtmb3IoUC5zLmM9LS1MLEw9MDtRPHBlJiYhKChyZT15LmNoYXJDb2RlQXQoUSktNDgpPDB8fHJlPjkpOysrUSlMPTEwKkwrcmU7aWYoUC5zLnI9LS1MLFE9PT1wZXx8NTg9PT15LmNoYXJDb2RlQXQoKytRKSlyZXR1cm4gUC5lLmM9UC5zLmMsUC5lLnI9UC5zLnIsUDtmb3IoTD0wO1EhPXBl'@;
put 'JiYhKChyZT15LmNoYXJDb2RlQXQoUSktNjQpPDF8fHJlPjI2KTsrK1EpTD0yNipMK3JlO2ZvcihQLmUuYz0tLUwsTD0wO1EhPXBlJiYhKChyZT15LmNoYXJDb2RlQXQoUSktNDgpPDB8fHJlPjkpOysrUSlMPTEwKkwrcmU7cmV0dXJuIFAuZS5yPS0tTCxQfWZ1bmN0aW9uIHJtKHksUCl7dmFy'@;
put 'IEw9ImQiPT15LnQmJlAgaW5zdGFuY2VvZiBEYXRlO2lmKG51bGwhPXkueil0cnl7cmV0dXJuIHkudz13LmZvcm1hdCh5LnosTD9VZShQKTpQKX1jYXRjaHt9dHJ5e3JldHVybiB5Lnc9dy5mb3JtYXQoKHkuWEZ8fHt9KS5udW1GbXRJZHx8KEw/MTQ6MCksTD9VZShQKTpQKX1jYXRjaHtyZXR1'@;
put 'cm4iIitQfX1mdW5jdGlvbiBjdSh5LFAsTCl7cmV0dXJuIG51bGw9PXl8fG51bGw9PXkudHx8InoiPT15LnQ/IiI6dm9pZCAwIT09eS53P3kudzooImQiPT15LnQmJiF5LnomJkwmJkwuZGF0ZU5GJiYoeS56PUwuZGF0ZU5GKSwiZSI9PXkudD9Rb1t5LnZdfHx5LnY6cm0oeSxudWxsPT1QP3ku'@;
put 'djpQKSl9ZnVuY3Rpb24gRWQoeSxQKXt2YXIgTD1QJiZQLnNoZWV0P1Auc2hlZXQ6IlNoZWV0MSIsUT17fTtyZXR1cm4gUVtMXT15LHtTaGVldE5hbWVzOltMXSxTaGVldHM6UX19ZnVuY3Rpb24gczAoeSxQLEwpe3ZhciBRPUx8fHt9LHJlPXk/QXJyYXkuaXNBcnJheSh5KTpRLmRlbnNlO251'@;
put 'bGwhPXRlJiZudWxsPT1yZSYmKHJlPXRlKTt2YXIgcGU9eXx8KHJlP1tdOnt9KSxfZT0wLHZlPTA7aWYocGUmJm51bGwhPVEub3JpZ2luKXtpZigibnVtYmVyIj09dHlwZW9mIFEub3JpZ2luKV9lPVEub3JpZ2luO2Vsc2V7dmFyIFNlPSJzdHJpbmciPT10eXBlb2YgUS5vcmlnaW4/c3MoUS5v'@;
put 'cmlnaW4pOlEub3JpZ2luO19lPVNlLnIsdmU9U2UuY31wZVsiIXJlZiJdfHwocGVbIiFyZWYiXT0iQTE6QTEiKX12YXIgSGU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAscjowfX07aWYocGVbIiFyZWYiXSl7dmFyIEJlPU9pKHBlWyIhcmVmIl0pO0hlLnMuYz1CZS5zLmMsSGUucy5yPUJlLnMu'@;
put 'cixIZS5lLmM9TWF0aC5tYXgoSGUuZS5jLEJlLmUuYyksSGUuZS5yPU1hdGgubWF4KEhlLmUucixCZS5lLnIpLC0xPT1fZSYmKEhlLmUucj1fZT1CZS5lLnIrMSl9Zm9yKHZhciBHZT0wO0dlIT1QLmxlbmd0aDsrK0dlKWlmKFBbR2VdKXtpZighQXJyYXkuaXNBcnJheShQW0dlXSkpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBhbiBhcnJheSBvZiBhcnJheXMiKTtmb3IodmFyIG50PTA7bnQhPVBbR2VdLmxlbmd0aDsrK250KWlmKCEodHlwZW9mIFBbR2VdW250XT4idSIpKXt2YXIgZHQ9e3Y6UFtHZV1bbnRdfSxDdD1fZStHZSxjdD12ZStudDtpZihIZS5zLnI+'@;
put 'Q3QmJihIZS5zLnI9Q3QpLEhlLnMuYz5jdCYmKEhlLnMuYz1jdCksSGUuZS5yPEN0JiYoSGUuZS5yPUN0KSxIZS5lLmM8Y3QmJihIZS5lLmM9Y3QpLCFQW0dlXVtudF18fCJvYmplY3QiIT10eXBlb2YgUFtHZV1bbnRdfHxBcnJheS5pc0FycmF5KFBbR2VdW250XSl8fFBbR2VdW250XWluc3Rh'@;
put 'bmNlb2YgRGF0ZSlpZihBcnJheS5pc0FycmF5KGR0LnYpJiYoZHQuZj1QW0dlXVtudF1bMV0sZHQudj1kdC52WzBdKSxudWxsPT09ZHQudilpZihkdC5mKWR0LnQ9Im4iO2Vsc2UgaWYoUS5udWxsRXJyb3IpZHQudD0iZSIsZHQudj0wO2Vsc2V7aWYoIVEuc2hlZXRTdHVicyljb250aW51ZTtk'@;
put 'dC50PSJ6In1lbHNlIm51bWJlciI9PXR5cGVvZiBkdC52P2R0LnQ9Im4iOiJib29sZWFuIj09dHlwZW9mIGR0LnY/ZHQudD0iYiI6ZHQudiBpbnN0YW5jZW9mIERhdGU/KGR0Lno9US5kYXRlTkZ8fHcuX3RhYmxlWzE0XSxRLmNlbGxEYXRlcz8oZHQudD0iZCIsZHQudz13LmZvcm1hdChkdC56'@;
put 'LFVlKGR0LnYpKSk6KGR0LnQ9Im4iLGR0LnY9VWUoZHQudiksZHQudz13LmZvcm1hdChkdC56LGR0LnYpKSk6ZHQudD0icyI7ZWxzZSBkdD1QW0dlXVtudF07aWYoZHQmJmR0LmgpdHJ5e2R0LlI9RnUuaHRtbF90b19ycyhkdC5oKSxkdC52PSIiO2Zvcih2YXIgYnQ9MDtidDxkdC5SLmxlbmd0'@;
put 'aDsrK2J0KWR0LnYrPWR0LlJbYnRdLnZ8fCIifWNhdGNoe31pZihyZSlwZVtDdF18fChwZVtDdF09W10pLHBlW0N0XVtjdF0mJnBlW0N0XVtjdF0ucyYmKGR0LnM9cGVbQ3RdW2N0XS5zKSxwZVtDdF1bY3RdJiZwZVtDdF1bY3RdLnomJihkdC56PXBlW0N0XVtjdF0ueikscGVbQ3RdW2N0XT1k'@;
put 'dDtlbHNle3ZhciBGdD1kaSh7YzpjdCxyOkN0fSk7cGVbRnRdJiZwZVtGdF0ucyYmKGR0LnM9cGVbRnRdLnMpLHBlW0Z0XSYmcGVbRnRdLnomJihkdC56PXBlW0Z0XS56KSxwZVtGdF09ZHR9fX1yZXR1cm4gSGUucy5jPDFlNyYmKHBlWyIhcmVmIl09T28oSGUpKSxwZX1mdW5jdGlvbiBrMSh5'@;
put 'LFApe3JldHVybiBzMChudWxsLHksUCl9ZnVuY3Rpb24ga3UoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoNCkpLFAud3JpdGVfc2hpZnQoNCx5KSxQfWZ1bmN0aW9uIHdjKHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PVA/IiI6eS5yZWFkX3NoaWZ0KFAsImRiY3MiKX1mdW5jdGlv'@;
put 'biBuYyh5LFApe3ZhciBMPSExO3JldHVybiBudWxsPT1QJiYoTD0hMCxQPWZyKDQrMip5Lmxlbmd0aCkpLFAud3JpdGVfc2hpZnQoNCx5Lmxlbmd0aCkseS5sZW5ndGg+MCYmUC53cml0ZV9zaGlmdCgwLHksImRiY3MiKSxMP1Auc2xpY2UoMCxQLmwpOlB9ZnVuY3Rpb24gb20oeSl7cmV0dXJu'@;
put 'e2ljaDp5LnJlYWRfc2hpZnQoMiksaWZudDp5LnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIGNhKHksUCl7dmFyIEw9eS5sLFE9eS5yZWFkX3NoaWZ0KDEpLHJlPXdjKHkpLHBlPVtdLF9lPXt0OnJlLGg6cmV9O2lmKDEmUSl7Zm9yKHZhciB2ZT15LnJlYWRfc2hpZnQoNCksU2U9MDtTZSE9dmU7'@;
put 'KytTZSlwZS5wdXNoKG9tKHkpKTtfZS5yPXBlfWVsc2UgX2Uucj1be2ljaDowLGlmbnQ6MH1dO3JldHVybiB5Lmw9TCtQLF9lfSFmdW5jdGlvbih5LFApe3ZhciBMO2lmKHR5cGVvZiBjcnlwdG9Ccm93c2VyaWZ5PCJ1IilMPWNyeXB0b0Jyb3dzZXJpZnk7ZWxzZSBpZih0eXBlb2YgUDwidSIp'@;
put 'TD1QO2Vsc2UgdHJ5e0w9Rig3NzkwMyl9Y2F0Y2h7TD1udWxsfXkucmM0PWZ1bmN0aW9uKFEscmUpe3ZhciBwZT1uZXcgQXJyYXkoMjU2KSxfZT0wLHZlPTAsU2U9MCxIZT0wO2Zvcih2ZT0wOzI1NiE9dmU7Kyt2ZSlwZVt2ZV09dmU7Zm9yKHZlPTA7MjU2IT12ZTsrK3ZlKVNlPVNlK3BlW3Zl'@;
put 'XStRW3ZlJVEubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NSxIZT1wZVt2ZV0scGVbdmVdPXBlW1NlXSxwZVtTZV09SGU7dmU9U2U9MDt2YXIgQmU9RyhyZS5sZW5ndGgpO2ZvcihfZT0wO19lIT1yZS5sZW5ndGg7KytfZSlIZT1wZVt2ZT12ZSsxJjI1NV0scGVbdmVdPXBlW1NlPShTZStwZVt2'@;
put 'ZV0pJTI1Nl0scGVbU2VdPUhlLEJlW19lXT1yZVtfZV1ecGVbcGVbdmVdK3BlW1NlXSYyNTVdO3JldHVybiBCZX0seS5tZDU9ZnVuY3Rpb24oUSl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjcnlwdG8iKTtyZXR1cm4gTC5jcmVhdGVIYXNoKCJtZDUiKS51cGRhdGUoQnVm'@;
put 'ZmVyLmZyb20oUSkpLmRpZ2VzdCgiaGV4Iil9fSh4ZCx0eXBlb2YgY3J5cHRvPCJ1Ij9jcnlwdG86dm9pZCAwKTt2YXIgWDc9Y2E7ZnVuY3Rpb24gdXUoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBMKz15LnJlYWRfc2hpZnQoMSk8PDE2LHkubCsr'@;
put 'LHtjOlAsaVN0eWxlUmVmOkx9fWZ1bmN0aW9uIEZpKHksUCl7cmV0dXJuIG51bGw9PVAmJihQPWZyKDgpKSxQLndyaXRlX3NoaWZ0KC00LHkuYyksUC53cml0ZV9zaGlmdCgzLHkuaVN0eWxlUmVmfHx5LnMpLFAud3JpdGVfc2hpZnQoMSwwKSxQfWZ1bmN0aW9uIGEwKHkpe3ZhciBQPXkucmVh'@;
put 'ZF9zaGlmdCgyKTtyZXR1cm4gUCs9eS5yZWFkX3NoaWZ0KDEpPDwxNix5LmwrKyx7YzotMSxpU3R5bGVSZWY6UH19ZnVuY3Rpb24gS2MoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9ZnIoNCkpLFAud3JpdGVfc2hpZnQoMyx5LmlTdHlsZVJlZnx8eS5zKSxQLndyaXRlX3NoaWZ0KDEsMCksUH12'@;
put 'YXIgemg9d2Msc209bmM7ZnVuY3Rpb24gQXUoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09UHx8NDI5NDk2NzI5NT09PVA/IiI6eS5yZWFkX3NoaWZ0KFAsImRiY3MiKX1mdW5jdGlvbiBBZCh5LFApe3ZhciBMPSExO3JldHVybiBudWxsPT1QJiYoTD0hMCxQPWZyKDEyNykp'@;
put 'LFAud3JpdGVfc2hpZnQoNCx5Lmxlbmd0aD4wP3kubGVuZ3RoOjQyOTQ5NjcyOTUpLHkubGVuZ3RoPjAmJlAud3JpdGVfc2hpZnQoMCx5LCJkYmNzIiksTD9QLnNsaWNlKDAsUC5sKTpQfXZhciBkdT13YyxUMT1BdSxPYz1BZDtmdW5jdGlvbiBYYyh5KXt2YXIgUD15LnNsaWNlKHkubCx5Lmwr'@;
put 'NCksTD0xJlBbMF0sUT0yJlBbMF07eS5sKz00LFBbMF0mPTI1Mjt2YXIgcmU9MD09PVE/bzAoWzAsMCwwLDAsUFswXSxQWzFdLFBbMl0sUFszXV0sMCk6b3MoUCwwKT4+MjtyZXR1cm4gTD9yZS8xMDA6cmV9ZnVuY3Rpb24gU3MoeSxQKXtudWxsPT1QJiYoUD1mcig0KSk7dmFyIEw9MCxRPTAs'@;
put 'cmU9MTAwKnk7aWYoeT09KDB8eSkmJnk+PS0oMTw8MjkpJiZ5PDE8PDI5P1E9MTpyZT09KDB8cmUpJiZyZT49LSgxPDwyOSkmJnJlPDE8PDI5JiYoUT0xLEw9MSksIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBSa051bWJlciAiK3kpO1Aud3JpdGVfc2hpZnQoLTQsKChMP3JlOnkp'@;
put 'PDwyKSsoTCsyKSl9ZnVuY3Rpb24gVGQoeSl7dmFyIFA9e3M6e30sZTp7fX07cmV0dXJuIFAucy5yPXkucmVhZF9zaGlmdCg0KSxQLmUucj15LnJlYWRfc2hpZnQoNCksUC5zLmM9eS5yZWFkX3NoaWZ0KDQpLFAuZS5jPXkucmVhZF9zaGlmdCg0KSxQfXZhciBKYz1UZCxEMT1mdW5jdGlvbiBV'@;
put 'aCh5LFApe3JldHVybiBQfHwoUD1mcigxNikpLFAud3JpdGVfc2hpZnQoNCx5LnMuciksUC53cml0ZV9zaGlmdCg0LHkuZS5yKSxQLndyaXRlX3NoaWZ0KDQseS5zLmMpLFAud3JpdGVfc2hpZnQoNCx5LmUuYyksUH07ZnVuY3Rpb24gbDAoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxM'@;
put 'PVtdLFE9MDtRPFA7KytRKXt2YXIgcmU9SmMoeSk7TC5wdXNoKE9vKHJlKSl9cmV0dXJuIEwuam9pbigiLCIpfWZ1bmN0aW9uIG1hKHkpe2lmKHkubGVuZ3RoLXkubDw4KXRocm93IlhMUyBYbnVtIEJ1ZmZlciB1bmRlcmZsb3ciO3JldHVybiB5LnJlYWRfc2hpZnQoOCwiZiIpfWZ1bmN0aW9u'@;
put 'IFBjKHksUCl7cmV0dXJuKFB8fGZyKDgpKS53cml0ZV9zaGlmdCg4LHksImYiKX1mdW5jdGlvbiBEZCh5KXt2YXIgUD17fSxRPXkucmVhZF9zaGlmdCgxKT4+PjEscmU9eS5yZWFkX3NoaWZ0KDEpLHBlPXkucmVhZF9zaGlmdCgyLCJpIiksX2U9eS5yZWFkX3NoaWZ0KDEpLHZlPXkucmVhZF9z'@;
put 'aGlmdCgxKSxTZT15LnJlYWRfc2hpZnQoMSk7c3dpdGNoKHkubCsrLFEpe2Nhc2UgMDpQLmF1dG89MTticmVhaztjYXNlIDE6UC5pbmRleD1yZTt2YXIgSGU9Q3JbcmVdO0hlJiYoUC5yZ2I9ejEoSGUpKTticmVhaztjYXNlIDI6UC5yZ2I9ejEoW19lLHZlLFNlXSk7YnJlYWs7Y2FzZSAzOlAu'@;
put 'dGhlbWU9cmV9cmV0dXJuIDAhPXBlJiYoUC50aW50PXBlPjA/cGUvMzI3Njc6cGUvMzI3NjgpLFB9ZnVuY3Rpb24gUjIoeSxQKXtpZihQfHwoUD1mcig4KSksIXl8fHkuYXV0bylyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQO251bGwhPXkuaW5kZXg/KFAu'@;
put 'd3JpdGVfc2hpZnQoMSwyKSxQLndyaXRlX3NoaWZ0KDEseS5pbmRleCkpOm51bGwhPXkudGhlbWU/KFAud3JpdGVfc2hpZnQoMSw2KSxQLndyaXRlX3NoaWZ0KDEseS50aGVtZSkpOihQLndyaXRlX3NoaWZ0KDEsNSksUC53cml0ZV9zaGlmdCgxLDApKTt2YXIgTD15LnRpbnR8fDA7aWYoTD4w'@;
put 'P0wqPTMyNzY3Okw8MCYmKEwqPTMyNzY4KSxQLndyaXRlX3NoaWZ0KDIsTCkseS5yZ2ImJm51bGw9PXkudGhlbWUpe3ZhciBRPXkucmdifHwiRkZGRkZGIjsibnVtYmVyIj09dHlwZW9mIFEmJihRPSgiMDAwMDAwIitRLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpKSxQLndyaXRlX3NoaWZ0KDEs'@;
put 'cGFyc2VJbnQoUS5zbGljZSgwLDIpLDE2KSksUC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFEuc2xpY2UoMiw0KSwxNikpLFAud3JpdGVfc2hpZnQoMSxwYXJzZUludChRLnNsaWNlKDQsNiksMTYpKSxQLndyaXRlX3NoaWZ0KDEsMjU1KX1lbHNlIFAud3JpdGVfc2hpZnQoMiwwKSxQLndyaXRl'@;
put 'X3NoaWZ0KDEsMCksUC53cml0ZV9zaGlmdCgxLDApO3JldHVybiBQfWZ1bmN0aW9uIGY0KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5sKysse2ZCb2xkOjEmUCxmSXRhbGljOjImUCxmVW5kZXJsaW5lOjQmUCxmU3RyaWtlb3V0OjgmUCxmT3V0bGluZToxNiZQLGZTaGFkb3c6'@;
put 'MzImUCxmQ29uZGVuc2U6NjQmUCxmRXh0ZW5kOjEyOCZQfX1mdW5jdGlvbiBwNCh5LFApe3ZhciBRPXkucmVhZF9zaGlmdCg0KTtzd2l0Y2goUSl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgNDI5NDk2NzI5NTpjYXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6IkJJVE1BUCIsMzoiTUVUQUZJTEVQSUNU'@;
put 'Iiw4OiJESUIiLDE0OiJFTkhNRVRBRklMRSJ9W3kucmVhZF9zaGlmdCg0KV18fCIifWlmKFE+NDAwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJkOiAiK1EudG9TdHJpbmcoMTYpKTtyZXR1cm4geS5sLT00LHkucmVhZF9zaGlmdCgwLDE9PVA/Imxwc3RyIjoibHB3c3Ry'@;
put 'Iil9dmFyIHUzPTIsTWE9MyxGYz0xMixhbT04MSx0OT1bODAsYW1dLF80PXsxOntuOiJDb2RlUGFnZSIsdDp1M30sMjp7bjoiQ2F0ZWdvcnkiLHQ6ODB9LDM6e246IlByZXNlbnRhdGlvbkZvcm1hdCIsdDo4MH0sNDp7bjoiQnl0ZUNvdW50Iix0Ok1hfSw1OntuOiJMaW5lQ291bnQiLHQ6TWF9'@;
put 'LDY6e246IlBhcmFncmFwaENvdW50Iix0Ok1hfSw3OntuOiJTbGlkZUNvdW50Iix0Ok1hfSw4OntuOiJOb3RlQ291bnQiLHQ6TWF9LDk6e246IkhpZGRlbkNvdW50Iix0Ok1hfSwxMDp7bjoiTXVsdGltZWRpYUNsaXBDb3VudCIsdDpNYX0sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246'@;
put 'IkhlYWRpbmdQYWlycyIsdDo0MDk2fEZjfSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1VwVG9EYXRlIix0OjExfSwxNzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6TWF9LDE5OntuOiJT'@;
put 'aGFyZWREb2MiLHQ6MTF9LDIyOntuOiJIeXBlcmxpbmtzQ2hhbmdlZCIsdDoxMX0sMjM6e246IkFwcFZlcnNpb24iLHQ6TWEscDoidmVyc2lvbiJ9LDI0OntuOiJEaWdTaWciLHQ6NjV9LDI2OntuOiJDb250ZW50VHlwZSIsdDo4MH0sMjc6e246IkNvbnRlbnRTdGF0dXMiLHQ6ODB9LDI4Ontu'@;
put 'OiJMYW5ndWFnZSIsdDo4MH0sMjk6e246IlZlcnNpb24iLHQ6ODB9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSx3cj17MTp7bjoiQ29kZVBhZ2UiLHQ6dTN9LDI6e246IlRpdGxlIix0Ojgw'@;
put 'fSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxhc3RBdXRob3IiLHQ6ODB9LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6e246IkVk'@;
put 'aXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDpNYX0sMTU6e246IldvcmRDb3VudCIsdDpNYX0sMTY6e246IkNoYXJDb3VudCIsdDpNYX0s'@;
put 'MTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6TWF9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxiND1QZShf'@;
put 'NCwibiIpLHk0PVBlKHdyLCJuIiksbG09ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJSVSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4'@;
put 'OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oi'@;
put 'LDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LHZpPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIs'@;
put 'ImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5'@;
put 'MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiB3NCh5KXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuW1A+PjE2JjI1NSxQPj44JjI1NSwyNTUmUF19KX12YXIgaDM9dzQoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3Nzcy'@;
put 'MTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0'@;
put 'MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2'@;
put 'NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDAsMTY3NzcyMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pLENyPW9uKGgzKSxOYT13NChbMTI2MzIyNTYs'@;
put 'OTg2ODk1MCw4NDIxNTA0LDY3MTA4ODYsMzM1NTQ0MywxNjcxMTY4MCwzMjc2OCwxMzM2OTQ5NywxMjgsMzM5NDU2MCwyNjM2NywxMDAyNzIxMiwxMDA1MzE3MSwxMjgsMzI3NjgsODM4ODYwOCwzMjg5Niw4Mzg4NzM2LDg0MjEzNzYsMTM2MzE0ODgsMTQ1Mzk5OTQsMTMwNjg4NTAsMTM5MjQz'@;
put 'NTIsOTk2NzQ5Niw5MTc1MjY3LDkxOTUwMDgsMzY4MzUzNywxMDY5MjU4LDg4ODA4OTksNzQ5NDY0LDI4OTM0NzYsMTE3NDU3MzAsMzc1MDIwMSwxNTU1OTUwMywxODM3OTQxLDEyMDg0MzU5LDc2MzIyNTAsNzM2MzMyOCw5NTE0NTg4LDgyODg2MTcsMzAzNjgxNCwxMTE4NDgxMF0pLFFvPXsw'@;
put 'OiIjTlVMTCEiLDc6IiNESVYvMCEiLDE1OiIjVkFMVUUhIiwyMzoiI1JFRiEiLDI5OiIjTkFNRT8iLDM2OiIjTlVNISIsNDI6IiNOL0EiLDQzOiIjR0VUVElOR19EQVRBIiwyNTU6IiNXVEY/In0sS2E9QWUoUW8pLFJsPXsiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv'@;
put 'Y3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1hY3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4'@;
put 'Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbCI6ImNvcmVwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGllcyt4bWwi'@;
put 'OiJjdXN0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZXh0ZW5kZWQtcHJvcGVydGllcyt4bWwiOiJleHRwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b21YbWxQcm9wZXJ0aWVzK3ht'@;
put 'bCI6ImN1c3RvbXhtbHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92'@;
put 'bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sIjoiY2hhcnRvYmpzIiwiYXBwbGljYXRpb24v'@;
put 'dm5kLm1zLW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sIjoiY2hhcnRjb2xvcnMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiY2hhcnRzdHlsZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0ZXgreG1sIjoiY2hhcnRleHMiLCJhcHBsaWNh'@;
put 'dGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m'@;
put 'ZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl'@;
put 'bC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIjoiY29ubnMiLCJhcHBs'@;
put 'aWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRh'@;
put 'ZGF0YSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24iOiJwaXZvdGNhY2hlcyIsImFw'@;
put 'cGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCI6InBpdm90Y2FjaGVzIiwiYXBwbGlj'@;
put 'YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnF1ZXJ5VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3Jt'@;
put 'YXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnlUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnVzZXJOYW1lcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25IZWFkZXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu'@;
put 'ZC5tcy1leGNlbC5yZXZpc2lvbkxvZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkhlYWRlcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu'@;
put 'dC5zcHJlYWRzaGVldG1sLnJldmlzaW9uTG9nK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VyTmFtZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZVNpbmdsZUNlbGxz'@;
put 'IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs'@;
put 'LnNsaWNlckNhY2hlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndzU29ydE1hcCI6IlRPRE8iLCJhcHBs'@;
put 'aWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQu'@;
put 'dGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs'@;
put 'LlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVw'@;
put 'ZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiY3Ry'@;
put 'bHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiOiJkYXRhbW9kZWxzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlN1cnZleSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv'@;
put 'Y3VtZW50LmRyYXdpbmcreG1sIjoiZHJhd2luZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2lu'@;
put 'Z21sLmRpYWdyYW1Db2xvcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbURhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5n'@;
put 'bWwuZGlhZ3JhbUxheW91dCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtU3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3'@;
put 'aW5nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sIjoicmVscyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5vbGVPYmplY3QiOiJUT0RPIiwiaW1hZ2UvcG5nIjoiVE9ETyIsc2hl'@;
put 'ZXQ6ImpzIn0sSWQ9ZnVuY3Rpb24oKXt2YXIgeT17d29ya2Jvb2tzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCIseGxzbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3Jv'@;
put 'RW5hYmxlZC5tYWluK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiIseGxhbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGx0eDoiYXBwbGljYXRpb24vdm5kLm9w'@;
put 'ZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWwifSxzdHJzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCIseGxzYjoiYXBwbGlj'@;
put 'YXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MifSxjb21tZW50czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMi'@;
put 'fSxzaGVldHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53b3Jrc2hlZXQifSxjaGFydHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5v'@;
put 'cGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCJ9LGRpYWxvZ3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5z'@;
put 'cHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmRpYWxvZ3NoZWV0In0sbWFjcm9zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNy'@;
put 'b3NoZWV0In0sdGFibGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSJ9LHBpdm90czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9w'@;
put 'ZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIn0scGl2b3RjYWNoZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu'@;
put 'dC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIn0scGl2b3RyZWNvcmRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3By'@;
put 'ZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyJ9LGNvbm5zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0'@;
put 'aW9ucyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyJ9LGxpbmtzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92'@;
put 'bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIn0sc3R5bGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc3R5bGVzIn19O3JldHVybiBsdCh5'@;
put 'KS5mb3JFYWNoKGZ1bmN0aW9uKFApe1sieGxzbSIsInhsYW0iXS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3lbUF1bTF18fCh5W1BdW0xdPXlbUF0ueGxzeCl9KX0pLGx0KHkpLmZvckVhY2goZnVuY3Rpb24oUCl7bHQoeVtQXSkuZm9yRWFjaChmdW5jdGlvbihMKXtSbFt5W1BdW0xdXT1QfSl9KSx5'@;
put 'fSgpLEhjPWZ1bmN0aW9uIFRlKHkpe2Zvcih2YXIgUD1bXSxMPWx0KHkpLFE9MDtRIT09TC5sZW5ndGg7KytRKW51bGw9PVBbeVtMW1FdXV0mJihQW3lbTFtRXV1dPVtdKSxQW3lbTFtRXV1dLnB1c2goTFtRXSk7cmV0dXJuIFB9KFJsKTtpcy5DVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZv'@;
put 'cm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIjt2YXIgZjM9U3IoIlR5cGVzIixudWxsLHt4bWxuczppcy5DVCwieG1sbnM6eHNkIjppcy54c2QsInhtbG5zOnhzaSI6aXMueHNpfSksbjk9W1sieG1sIiwiYXBwbGljYXRpb24veG1sIl0sWyJiaW4iLCJhcHBsaWNhdGlvbi92'@;
put 'bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIl0sWyJ2bWwiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyJdLFsiZGF0YSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu'@;
put 'dC5tb2RlbCtkYXRhIl0sWyJibXAiLCJpbWFnZS9ibXAiXSxbInBuZyIsImltYWdlL3BuZyJdLFsiZ2lmIiwiaW1hZ2UvZ2lmIl0sWyJlbWYiLCJpbWFnZS94LWVtZiJdLFsid21mIiwiaW1hZ2UveC13bWYiXSxbImpwZyIsImltYWdlL2pwZWciXSxbImpwZWciLCJpbWFnZS9qcGVnIl0sWyJ0'@;
put 'aWYiLCJpbWFnZS90aWZmIl0sWyJ0aWZmIiwiaW1hZ2UvdGlmZiJdLFsicGRmIiwiYXBwbGljYXRpb24vcGRmIl0sWyJyZWxzIixIYy5yZWxzWzBdXV0ubWFwKGZ1bmN0aW9uKHkpe3JldHVybiBTcigiRGVmYXVsdCIsbnVsbCx7RXh0ZW5zaW9uOnlbMF0sQ29udGVudFR5cGU6eVsxXX0pfSks'@;
put 'SGk9e1dCOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixTSEVFVDoiaHR0cDovL3NoZWV0anMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw'@;
put 'cy9vZmZpY2VEb2N1bWVudCIsSExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaHlwZXJsaW5rIixWTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3Jl'@;
put 'bGF0aW9uc2hpcHMvdm1sRHJhd2luZyIsWFBBVEg6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rUGF0aCIsWE1JU1M6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYv'@;
put 'cmVsYXRpb25zaGlwcy94bEV4dGVybmFsTGlua1BhdGgveGxQYXRoTWlzc2luZyIsWExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rIixDWE1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1s'@;
put 'Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbCIsQ1hNTFA6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sUHJvcHMiLFZCQToiaHR0cDovL3NjaGVt'@;
put 'YXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3ZiYVByb2plY3QifTtmdW5jdGlvbiBCaSh5KXt2YXIgUD15Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIHkuc2xpY2UoMCxQKzEpKyJfcmVscy8iK3kuc2xpY2UoUCsxKSsiLnJlbHMifWZ1bmN0aW9uIERvKHksUCl7'@;
put 'dmFyIEw9eyIhaWQiOnt9fTtpZigheSlyZXR1cm4gTDsiLyIhPT1QLmNoYXJBdCgwKSYmKFA9Ii8iK1ApO3ZhciBRPXt9O3JldHVybih5Lm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBwZT1sbihyZSk7aWYoIjxSZWxhdGlvbnNoaXAiPT09cGVbMF0pe3ZhciBfZT17'@;
put 'fTtfZS5UeXBlPXBlLlR5cGUsX2UuVGFyZ2V0PXBlLlRhcmdldCxfZS5JZD1wZS5JZCxfZS5UYXJnZXRNb2RlPXBlLlRhcmdldE1vZGU7dmFyIHZlPSJFeHRlcm5hbCI9PT1wZS5UYXJnZXRNb2RlP3BlLlRhcmdldDpzbihwZS5UYXJnZXQsUCk7TFt2ZV09X2UsUVtwZS5JZF09X2V9fSksTFsi'@;
put 'IWlkIl09USxMfWlzLlJFTFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyI7dmFyIHVhPVNyKCJSZWxhdGlvbnNoaXBzIixudWxsLHt4bWxuczppcy5SRUxTfSk7ZnVuY3Rpb24gWGEoeSl7dmFyIFA9W0JuLHVhXTtyZXR1cm4g'@;
put 'bHQoeVsiIWlkIl0pLmZvckVhY2goZnVuY3Rpb24oTCl7UFtQLmxlbmd0aF09U3IoIlJlbGF0aW9uc2hpcCIsbnVsbCx5WyIhaWQiXVtMXSl9KSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvUmVsYXRpb25zaGlwcz4iLFBbMV09UFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUC5qb2luKCIi'@;
put 'KX12YXIgSTE9W0hpLkhMSU5LLEhpLlhQQVRILEhpLlhNSVNTXTtmdW5jdGlvbiB6byh5LFAsTCxRLHJlLHBlKXtpZihyZXx8KHJlPXt9KSx5WyIhaWQiXXx8KHlbIiFpZCJdPXt9KSxQPDApZm9yKFA9MTt5WyIhaWQiXVsicklkIitQXTsrK1ApO2lmKHJlLklkPSJySWQiK1AscmUuVHlwZT1R'@;
put 'LHJlLlRhcmdldD1MLHBlP3JlLlRhcmdldE1vZGU9cGU6STEuaW5kZXhPZihyZS5UeXBlKT4tMSYmKHJlLlRhcmdldE1vZGU9IkV4dGVybmFsIikseVsiIWlkIl1bcmUuSWRdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3JpdGUgcklkICIrUCk7cmV0dXJuIHlbIiFpZCJdW3JlLklkXT1y'@;
put 'ZSx5WygiLyIrcmUuVGFyZ2V0KS5yZXBsYWNlKCIvLyIsIi8iKV09cmUsUH12YXIgVHU9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiO2Z1bmN0aW9uIEwxKHksUCxMKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicreSsnIj5c'@;
put 'bicsJyAgICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvJysoTHx8Im9kZiIpKyIjIitQKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX1mdW5jdGlvbiBWbyh5LFApe3JldHVyblsn'@;
put 'ICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJyt5KyciPlxuJywnICAgIDxuczA6aGFzUGFydCB4bWxuczpuczA9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjIiByZGY6cmVzb3VyY2U9IicrUCsnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0'@;
put 'aW9uPlxuIl0uam9pbigiIil9dmFyIFM0PWZ1bmN0aW9uKCl7dmFyIHk9JzxvZmZpY2U6ZG9jdW1lbnQtbWV0YSB4bWxuczpvZmZpY2U9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIgeG1sbnM6bWV0YT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5k'@;
put 'b2N1bWVudDp4bWxuczptZXRhOjEuMCIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgb2ZmaWNlOnZlcnNpb249IjEuMiI+PG9mZmljZTptZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVl'@;
put 'dEpTICcrTS52ZXJzaW9uKyI8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNlOm1ldGE+PC9vZmZpY2U6ZG9jdW1lbnQtbWV0YT4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB5fX0oKSxPbD1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250ZW50U3RhdHVzIiwiQ29udGVudFN0'@;
put 'YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIsIlZlcnNpb24iXSxbImRjOmNyZWF0'@;
put 'b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVk'@;
put 'IiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXTtpcy5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyIsSGkuQ09SRV9Q'@;
put 'Uk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyI7dmFyIEphPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PW5ldyBBcnJheShPbC5sZW5ndGgpLFA9MDtQPE9sLmxlbmd0aDsrK1Ape3Zh'@;
put 'ciBMPU9sW1BdLFE9Iig/OiIrTFswXS5zbGljZSgwLExbMF0uaW5kZXhPZigiOiIpKSsiOikiK0xbMF0uc2xpY2UoTFswXS5pbmRleE9mKCI6IikrMSk7eVtQXT1uZXcgUmVnRXhwKCI8IitRKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrUSsiPiIpfXJldHVybiB5fSgpO2Z1bmN0aW9uIE8yKHkp'@;
put 'e3ZhciBQPXt9O3k9UGkoeSk7Zm9yKHZhciBMPTA7TDxPbC5sZW5ndGg7KytMKXt2YXIgUT1PbFtMXSxyZT15Lm1hdGNoKEphW0xdKTtudWxsIT1yZSYmcmUubGVuZ3RoPjAmJihQW1FbMV1dPXhyKHJlWzFdKSksImRhdGUiPT09UVsyXSYmUFtRWzFdXSYmKFBbUVsxXV09SHQoUFtRWzFdXSkp'@;
put 'fXJldHVybiBQfXZhciBQMj1TcigiY3A6Y29yZVByb3BlcnRpZXMiLG51bGwseyJ4bWxuczpjcCI6aXMuQ09SRV9QUk9QUywieG1sbnM6ZGMiOmlzLmRjLCJ4bWxuczpkY3Rlcm1zIjppcy5kY3Rlcm1zLCJ4bWxuczpkY21pdHlwZSI6aXMuZGNtaXR5cGUsInhtbG5zOnhzaSI6aXMueHNpfSk7'@;
put 'ZnVuY3Rpb24gaHUoeSxQLEwsUSxyZSl7bnVsbCE9cmVbeV18fG51bGw9PVB8fCIiPT09UHx8KHJlW3ldPVAsUD1IcihQKSxRW1EubGVuZ3RoXT1MP1NyKHksUCxMKTpmcyh5LFApKX12YXIgUjE9W1siQXBwbGljYXRpb24iLCJBcHBsaWNhdGlvbiIsInN0cmluZyJdLFsiQXBwVmVyc2lvbiIs'@;
put 'IkFwcFZlcnNpb24iLCJzdHJpbmciXSxbIkNvbXBhbnkiLCJDb21wYW55Iiwic3RyaW5nIl0sWyJEb2NTZWN1cml0eSIsIkRvY1NlY3VyaXR5Iiwic3RyaW5nIl0sWyJNYW5hZ2VyIiwiTWFuYWdlciIsInN0cmluZyJdLFsiSHlwZXJsaW5rc0NoYW5nZWQiLCJIeXBlcmxpbmtzQ2hhbmdlZCIs'@;
put 'ImJvb2wiXSxbIlNoYXJlZERvYyIsIlNoYXJlZERvYyIsImJvb2wiXSxbIkxpbmtzVXBUb0RhdGUiLCJMaW5rc1VwVG9EYXRlIiwiYm9vbCJdLFsiU2NhbGVDcm9wIiwiU2NhbGVDcm9wIiwiYm9vbCJdLFsiSGVhZGluZ1BhaXJzIiwiSGVhZGluZ1BhaXJzIiwicmF3Il0sWyJUaXRsZXNPZlBh'@;
put 'cnRzIiwiVGl0bGVzT2ZQYXJ0cyIsInJhdyJdXTtmdW5jdGlvbiB1MCh5LFAsTCxRKXt2YXIgcmU9W107aWYoInN0cmluZyI9PXR5cGVvZiB5KXJlPWUwKHksUSk7ZWxzZSBmb3IodmFyIHBlPTA7cGU8eS5sZW5ndGg7KytwZSlyZT1yZS5jb25jYXQoeVtwZV0ubWFwKGZ1bmN0aW9uKEJlKXty'@;
put 'ZXR1cm57djpCZX19KSk7dmFyIF9lPSJzdHJpbmciPT10eXBlb2YgUD9lMChQLFEpLm1hcChmdW5jdGlvbihCZSl7cmV0dXJuIEJlLnZ9KTpQLHZlPTAsU2U9MDtpZihfZS5sZW5ndGg+MClmb3IodmFyIEhlPTA7SGUhPT1yZS5sZW5ndGg7SGUrPTIpe3N3aXRjaChTZT0rcmVbSGUrMV0udixy'@;
put 'ZVtIZV0udil7Y2FzZSJXb3Jrc2hlZXRzIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Y2FzZSJcdTA0MWJcdTA0MzhcdTA0NDFcdTA0NDJcdTA0NGIiOmNhc2UiXHUwNjIzXHUwNjQ4XHUwNjMxXHUwNjI3XHUwNjQyIFx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NVx1MDY0NCI6Y2FzZSJcdTMw'@;
put 'ZWZcdTMwZmNcdTMwYWZcdTMwYjdcdTMwZmNcdTMwYzgiOmNhc2UiXHUwNWQyXHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVlMlx1MDVkMVx1MDVkNVx1MDVkM1x1MDVkNCI6Y2FzZSJBcmJlaXRzYmxceGU0dHRlciI6Y2FzZSJceGM3YWxcdTAxMzFcdTAxNWZtYSBT'@;
put 'YXlmYWxhclx1MDEzMSI6Y2FzZSJGZXVpbGxlcyBkZSBjYWxjdWwiOmNhc2UiRm9nbGkgZGkgbGF2b3JvIjpjYXNlIkZvbGhhcyBkZSBjXHhlMWxjdWxvIjpjYXNlIlBsYW5pbGhhcyI6Y2FzZSJSZWduZWFyayI6Y2FzZSJIb2phcyBkZSBjXHhlMWxjdWxvIjpjYXNlIldlcmtibGFkZW4iOkwu'@;
put 'V29ya3NoZWV0cz1TZSxMLlNoZWV0TmFtZXM9X2Uuc2xpY2UodmUsdmUrU2UpO2JyZWFrO2Nhc2UiTmFtZWQgUmFuZ2VzIjpjYXNlIlJhbmdvcyBjb24gbm9tYnJlIjpjYXNlIlx1NTQwZFx1NTI0ZFx1NGVkOFx1MzA0ZFx1NGUwMFx1ODlhNyI6Y2FzZSJCZW5hbm50ZSBCZXJlaWNoZSI6Y2Fz'@;
put 'ZSJOYXZuZ2l2bmUgb21yXHhlNWRlciI6TC5OYW1lZFJhbmdlcz1TZSxMLkRlZmluZWROYW1lcz1fZS5zbGljZSh2ZSx2ZStTZSk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpMLkNoYXJ0c2hlZXRzPVNlLEwuQ2hhcnROYW1lcz1fZS5zbGljZSh2ZSx2ZStTZSl9dmUrPVNl'@;
put 'fX1pcy5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLEhpLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRp'@;
put 'b25zaGlwcy9leHRlbmRlZC1wcm9wZXJ0aWVzIjt2YXIgZzM9U3IoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOmlzLkVYVF9QUk9QUywieG1sbnM6dnQiOmlzLnZ0fSk7aXMuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYv'@;
put 'Y3VzdG9tLXByb3BlcnRpZXMiLEhpLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiO3ZhciBBdz0vPFtePl0rPltePF0qL2csdW09U3IoIlByb3BlcnRpZXMiLG51'@;
put 'bGwse3htbG5zOmlzLkNVU1RfUFJPUFMsInhtbG5zOnZ0Ijppcy52dH0pO3ZhciBGMj17VGl0bGU6IlRpdGxlIixTdWJqZWN0OiJTdWJqZWN0IixBdXRob3I6IkF1dGhvciIsS2V5d29yZHM6IktleXdvcmRzIixDb21tZW50czoiRGVzY3JpcHRpb24iLExhc3RBdXRob3I6Ikxhc3RBdXRob3Ii'@;
put 'LFJldk51bWJlcjoiUmV2aXNpb24iLEFwcGxpY2F0aW9uOiJBcHBOYW1lIixMYXN0UHJpbnRlZDoiTGFzdFByaW50ZWQiLENyZWF0ZWREYXRlOiJDcmVhdGVkIixNb2RpZmllZERhdGU6Ikxhc3RTYXZlZCIsQ2F0ZWdvcnk6IkNhdGVnb3J5IixNYW5hZ2VyOiJNYW5hZ2VyIixDb21wYW55OiJD'@;
put 'b21wYW55IixBcHBWZXJzaW9uOiJWZXJzaW9uIixDb250ZW50U3RhdHVzOiJDb250ZW50U3RhdHVzIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixMYW5ndWFnZToiTGFuZ3VhZ2UifSxIMj1iZShGMik7ZnVuY3Rpb24gUmQoeSxQLEwpe3lbUD1IMltQXXx8UF09TH1mdW5jdGlvbiBDYyh5KXt2'@;
put 'YXIgUD15LnJlYWRfc2hpZnQoNCksTD15LnJlYWRfc2hpZnQoNCk7cmV0dXJuIG5ldyBEYXRlKDFlMyooTC8xZTcqTWF0aC5wb3coMiwzMikrUC8xZTctMTE2NDQ0NzM2MDApKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuMDAwLywiIil9ZnVuY3Rpb24gT2QoeSxQLEwpe3ZhciBRPXkubCxy'@;
put 'ZT15LnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihMKWZvcig7eS5sLVEmMzspKyt5Lmw7cmV0dXJuIHJlfWZ1bmN0aW9uIFAxKHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoMCwibHB3c3RyIik7cmV0dXJuIEwmJih5LmwrPTQtKFEubGVuZ3RoKzEmMykmMyksUX1mdW5jdGlvbiBxaCh5'@;
put 'LFAsTCl7cmV0dXJuIDMxPT09UD9QMSh5KTpPZCh5LDAsTCl9ZnVuY3Rpb24gUWMoeSxQLEwpe3JldHVybiBxaCh5LFAsITE9PT1MPzA6NCl9ZnVuY3Rpb24gczkoeSl7dmFyIFA9eS5sLEw9RTQoeSxhbSk7cmV0dXJuIDA9PXlbeS5sXSYmMD09eVt5LmwrMV0mJnkubC1QJjImJih5LmwrPTIp'@;
put 'LFtMLEU0KHksTWEpXX1mdW5jdGlvbiBkbSh5LFApe2Zvcih2YXIgTD15LnJlYWRfc2hpZnQoNCksUT17fSxyZT0wO3JlIT1MOysrcmUpe3ZhciBwZT15LnJlYWRfc2hpZnQoNCksX2U9eS5yZWFkX3NoaWZ0KDQpO1FbcGVdPXkucmVhZF9zaGlmdChfZSwxMjAwPT09UD8idXRmMTZsZSI6InV0'@;
put 'ZjgiKS5yZXBsYWNlKHYsIiIpLnJlcGxhY2UocCwiISIpLDEyMDA9PT1QJiZfZSUyJiYoeS5sKz0yKX1yZXR1cm4gMyZ5LmwmJih5Lmw9eS5sPj4zPDwyKSxRfWZ1bmN0aW9uIGhtKHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KSxMPXkuc2xpY2UoeS5sLHkubCtQKTtyZXR1cm4geS5sKz1QLCgz'@;
put 'JlApPjAmJih5LmwrPTQtKDMmUCkmMyksTH1mdW5jdGlvbiBFNCh5LFAsTCl7dmFyIHJlLFE9eS5yZWFkX3NoaWZ0KDIpLHBlPUx8fHt9O2lmKHkubCs9MixQIT09RmMmJlEhPT1QJiYtMT09PXQ5LmluZGV4T2YoUCkmJig0MTI2IT0oNjU1MzQmUCl8fDQxMjYhPSg2NTUzNCZRKSkpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJFeHBlY3RlZCB0eXBlICIrUCsiIHNhdyAiK1EpO3N3aXRjaChQPT09RmM/UTpQKXtjYXNlIDI6cmV0dXJuIHJlPXkucmVhZF9zaGlmdCgyLCJpIikscGUucmF3fHwoeS5sKz0yKSxyZTtjYXNlIDM6cmV0dXJuIHkucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4g'@;
put 'MCE9PXkucmVhZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiB5LnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gT2QoeSwwLDQpLnJlcGxhY2UodiwiIik7Y2FzZSAzMTpyZXR1cm4gUDEoeSk7Y2FzZSA2NDpyZXR1cm4gQ2MoeSk7Y2FzZSA2NTpyZXR1cm4gaG0oeSk7Y2FzZSA3MTpyZXR1'@;
put 'cm4gZnVuY3Rpb24gRHcoeSl7dmFyIFA9e307cmV0dXJuIFAuU2l6ZT15LnJlYWRfc2hpZnQoNCkseS5sKz1QLlNpemUrMy0oUC5TaXplLTEpJTQsUH0oeSk7Y2FzZSA4MDpyZXR1cm4gUWMoeSxRLCFwZS5yYXcpLnJlcGxhY2UodiwiIik7Y2FzZSA4MTpyZXR1cm4gZnVuY3Rpb24geDQoeSxQ'@;
put 'KXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIlZ0VW5hbGlnbmVkU3RyaW5nIG11c3QgaGF2ZSBwb3NpdGl2ZSBsZW5ndGgiKTtyZXR1cm4gcWgoeSxQLDApfSh5LFEpLnJlcGxhY2UodiwiIik7Y2FzZSA0MTA4OnJldHVybiBmdW5jdGlvbiBhOSh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQp'@;
put 'LEw9W10sUT0wO1E8UC8yOysrUSlMLnB1c2goczkoeSkpO3JldHVybiBMfSh5KTtjYXNlIDQxMjY6Y2FzZSA0MTI3OnJldHVybiA0MTI3PT1RP2Z1bmN0aW9uIGk5KHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXSxRPTA7USE9UDsrK1Epe3ZhciByZT15Lmw7TFtRXT15LnJlYWRf'@;
put 'c2hpZnQoMCwibHB3c3RyIikucmVwbGFjZSh2LCIiKSx5LmwtcmUmMiYmKHkubCs9Mil9cmV0dXJuIEx9KHkpOmZ1bmN0aW9uIG85KHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXSxRPTA7USE9UDsrK1EpTFtRXT15LnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNlKHYs'@;
put 'IiIpO3JldHVybiBMfSh5KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrUCsiICIrUSl9fWZ1bmN0aW9uIGw5KHksUCl7dmFyIEw9ZnIoNCksUT1mcig0KTtzd2l0Y2goTC53cml0ZV9zaGlmdCg0LDgwPT15PzMxOnkpLHkp'@;
put 'e2Nhc2UgMzpRLndyaXRlX3NoaWZ0KC00LFApO2JyZWFrO2Nhc2UgNTooUT1mcig4KSkud3JpdGVfc2hpZnQoOCxQLCJmIik7YnJlYWs7Y2FzZSAxMTpRLndyaXRlX3NoaWZ0KDQsUD8xOjApO2JyZWFrO2Nhc2UgNjQ6UT1mdW5jdGlvbiBpYyh5KXt2YXIgTD0oInN0cmluZyI9PXR5cGVvZiB5'@;
put 'P25ldyBEYXRlKERhdGUucGFyc2UoeSkpOnkpLmdldFRpbWUoKS8xZTMrMTE2NDQ0NzM2MDAsUT1MJU1hdGgucG93KDIsMzIpLHJlPShMLVEpL01hdGgucG93KDIsMzIpO3JlKj0xZTc7dmFyIHBlPShRKj0xZTcpL01hdGgucG93KDIsMzIpfDA7cGU+MCYmKFElPU1hdGgucG93KDIsMzIpLHJl'@;
put 'Kz1wZSk7dmFyIF9lPWZyKDgpO3JldHVybiBfZS53cml0ZV9zaGlmdCg0LFEpLF9lLndyaXRlX3NoaWZ0KDQscmUpLF9lfShQKTticmVhaztjYXNlIDMxOmNhc2UgODA6Zm9yKChRPWZyKDQrMiooUC5sZW5ndGgrMSkrKFAubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsUC5sZW5ndGgr'@;
put 'MSksUS53cml0ZV9zaGlmdCgwLFAsImRiY3MiKTtRLmwhPVEubGVuZ3RoOylRLndyaXRlX3NoaWZ0KDEsMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK3krIiAiK1ApfXJldHVybiBTKFtMLFFdKX1mdW5jdGlv'@;
put 'biBGMSh5LFApe3ZhciBMPXkubCxRPXkucmVhZF9zaGlmdCg0KSxyZT15LnJlYWRfc2hpZnQoNCkscGU9W10sX2U9MCx2ZT0wLFNlPS0xLEhlPXt9O2ZvcihfZT0wO19lIT1yZTsrK19lKXt2YXIgQmU9eS5yZWFkX3NoaWZ0KDQpLEdlPXkucmVhZF9zaGlmdCg0KTtwZVtfZV09W0JlLEdlK0xd'@;
put 'fXBlLnNvcnQoZnVuY3Rpb24oRXQsVHQpe3JldHVybiBFdFsxXS1UdFsxXX0pO3ZhciBudD17fTtmb3IoX2U9MDtfZSE9cmU7KytfZSl7aWYoeS5sIT09cGVbX2VdWzFdKXt2YXIgZHQ9ITA7aWYoX2U+MCYmUClzd2l0Y2goUFtwZVtfZS0xXVswXV0udCl7Y2FzZSAyOnkubCsyPT09cGVbX2Vd'@;
put 'WzFdJiYoeS5sKz0yLGR0PSExKTticmVhaztjYXNlIDgwOmNhc2UgNDEwODp5Lmw8PXBlW19lXVsxXSYmKHkubD1wZVtfZV1bMV0sZHQ9ITEpfWlmKCghUHx8MD09X2UpJiZ5Lmw8PXBlW19lXVsxXSYmKGR0PSExLHkubD1wZVtfZV1bMV0pLGR0KXRocm93IG5ldyBFcnJvcigiUmVhZCBFcnJv'@;
put 'cjogRXhwZWN0ZWQgYWRkcmVzcyAiK3BlW19lXVsxXSsiIGF0ICIreS5sKyIgOiIrX2UpfWlmKFApe3ZhciBDdD1QW3BlW19lXVswXV07aWYobnRbQ3Qubl09RTQoeSxDdC50LHtyYXc6ITB9KSwidmVyc2lvbiI9PT1DdC5wJiYobnRbQ3Qubl09U3RyaW5nKG50W0N0Lm5dPj4xNikrIi4iKygi'@;
put 'MDAwMCIrU3RyaW5nKDY1NTM1Jm50W0N0Lm5dKSkuc2xpY2UoLTQpKSwiQ29kZVBhZ2UiPT1DdC5uKXN3aXRjaChudFtDdC5uXSl7Y2FzZSAwOm50W0N0Lm5dPTEyNTI7Y2FzZSA4NzQ6Y2FzZSA5MzI6Y2FzZSA5MzY6Y2FzZSA5NDk6Y2FzZSA5NTA6Y2FzZSAxMjUwOmNhc2UgMTI1MTpjYXNl'@;
put 'IDEyNTM6Y2FzZSAxMjU0OmNhc2UgMTI1NTpjYXNlIDEyNTY6Y2FzZSAxMjU3OmNhc2UgMTI1ODpjYXNlIDFlNDpjYXNlIDEyMDA6Y2FzZSAxMjAxOmNhc2UgMTI1MjpjYXNlIDY1ZTM6Y2FzZS01MzY6Y2FzZSA2NTAwMTpjYXNlLTUzNTpqKHZlPW50W0N0Lm5dPj4+MCY2NTUzNSk7YnJlYWs7'@;
put 'ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK250W0N0Lm5dKX19ZWxzZSBpZigxPT09cGVbX2VdWzBdKXtpZih2ZT1udC5Db2RlUGFnZT1FNCh5LHUzKSxqKHZlKSwtMSE9PVNlKXt2YXIgY3Q9eS5sO3kubD1wZVtTZV1bMV0sSGU9ZG0oeSx2ZSkseS5s'@;
put 'PWN0fX1lbHNlIGlmKDA9PT1wZVtfZV1bMF0pe2lmKDA9PT12ZSl7U2U9X2UseS5sPXBlW19lKzFdWzFdO2NvbnRpbnVlfUhlPWRtKHksdmUpfWVsc2V7dmFyIEZ0LGJ0PUhlW3BlW19lXVswXV07c3dpdGNoKHlbeS5sXSl7Y2FzZSA2NTp5LmwrPTQsRnQ9aG0oeSk7YnJlYWs7Y2FzZSAzMDpj'@;
put 'YXNlIDMxOnkubCs9NCxGdD1RYyh5LHlbeS5sLTRdKS5yZXBsYWNlKC9cdTAwMDArJC8sIiIpO2JyZWFrO2Nhc2UgMzp5LmwrPTQsRnQ9eS5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OnkubCs9NCxGdD15LnJlYWRfc2hpZnQoNCk7YnJlYWs7Y2FzZSA1OnkubCs9NCxGdD15LnJl'@;
put 'YWRfc2hpZnQoOCwiZiIpO2JyZWFrO2Nhc2UgMTE6eS5sKz00LEZ0PVNvKHksNCk7YnJlYWs7Y2FzZSA2NDp5LmwrPTQsRnQ9SHQoQ2MoeSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnBhcnNlZCB2YWx1ZTogIit5W3kubF0pfW50W2J0XT1GdH19cmV0dXJuIHkubD1MK1Es'@;
put 'bnR9dmFyIGZtPVsiQ29kZVBhZ2UiLCJUaHVtYm5haWwiLCJfUElEX0xJTktCQVNFIiwiX1BJRF9ITElOS1MiLCJTeXN0ZW1JZGVudGlmaWVyIiwiRk1USUQiXS5jb25jYXQoWyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyIsIk5hbWVkUmFuZ2VzIiwiRGVmaW5lZE5hbWVzIiwiQ2hhcnRzaGVl'@;
put 'dHMiLCJDaGFydE5hbWVzIl0pO2Z1bmN0aW9uIEl3KHkpe3N3aXRjaCh0eXBlb2YgeSl7Y2FzZSJib29sZWFuIjpyZXR1cm4gMTE7Y2FzZSJudW1iZXIiOnJldHVybigwfHkpPT15PzM6NTtjYXNlInN0cmluZyI6cmV0dXJuIDMxO2Nhc2Uib2JqZWN0IjppZih5IGluc3RhbmNlb2YgRGF0ZSly'@;
put 'ZXR1cm4gNjR9cmV0dXJuLTF9ZnVuY3Rpb24gYzkoeSxQLEwpe3ZhciBRPWZyKDgpLHJlPVtdLHBlPVtdLF9lPTgsdmU9MCxTZT1mcig4KSxIZT1mcig4KTtpZihTZS53cml0ZV9zaGlmdCg0LDIpLFNlLndyaXRlX3NoaWZ0KDQsMTIwMCksSGUud3JpdGVfc2hpZnQoNCwxKSxwZS5wdXNoKFNl'@;
put 'KSxyZS5wdXNoKEhlKSxfZSs9OCtTZS5sZW5ndGgsIVApeyhIZT1mcig4KSkud3JpdGVfc2hpZnQoNCwwKSxyZS51bnNoaWZ0KEhlKTt2YXIgQmU9W2ZyKDQpXTtmb3IoQmVbMF0ud3JpdGVfc2hpZnQoNCx5Lmxlbmd0aCksdmU9MDt2ZTx5Lmxlbmd0aDsrK3ZlKXt2YXIgR2U9eVt2ZV1bMF07'@;
put 'Zm9yKChTZT1mcig4KzIqKEdlLmxlbmd0aCsxKSsoR2UubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsdmUrMiksU2Uud3JpdGVfc2hpZnQoNCxHZS5sZW5ndGgrMSksU2Uud3JpdGVfc2hpZnQoMCxHZSwiZGJjcyIpO1NlLmwhPVNlLmxlbmd0aDspU2Uud3JpdGVfc2hpZnQoMSwwKTtC'@;
put 'ZS5wdXNoKFNlKX1TZT1TKEJlKSxwZS51bnNoaWZ0KFNlKSxfZSs9OCtTZS5sZW5ndGh9Zm9yKHZlPTA7dmU8eS5sZW5ndGg7Kyt2ZSlpZigoIVB8fFBbeVt2ZV1bMF1dKSYmIShmbS5pbmRleE9mKHlbdmVdWzBdKT4tMSkmJm51bGwhPXlbdmVdWzFdKXt2YXIgbnQ9eVt2ZV1bMV0sZHQ9MDtp'@;
put 'ZihQKXt2YXIgQ3Q9TFtkdD0rUFt5W3ZlXVswXV1dO2lmKCJ2ZXJzaW9uIj09Q3QucCYmInN0cmluZyI9PXR5cGVvZiBudCl7dmFyIGN0PW50LnNwbGl0KCIuIik7bnQ9KCtjdFswXTw8MTYpKygrY3RbMV18fDApfVNlPWw5KEN0LnQsbnQpfWVsc2V7dmFyIGJ0PUl3KG50KTstMT09YnQmJihi'@;
put 'dD0zMSxudD1TdHJpbmcobnQpKSxTZT1sOShidCxudCl9cGUucHVzaChTZSksKEhlPWZyKDgpKS53cml0ZV9zaGlmdCg0LFA/ZHQ6Mit2ZSkscmUucHVzaChIZSksX2UrPTgrU2UubGVuZ3RofXZhciBGdD04KihwZS5sZW5ndGgrMSk7Zm9yKHZlPTA7dmU8cGUubGVuZ3RoOysrdmUpcmVbdmVd'@;
put 'LndyaXRlX3NoaWZ0KDQsRnQpLEZ0Kz1wZVt2ZV0ubGVuZ3RoO3JldHVybiBRLndyaXRlX3NoaWZ0KDQsX2UpLFEud3JpdGVfc2hpZnQoNCxwZS5sZW5ndGgpLFMoW1FdLmNvbmNhdChyZSkuY29uY2F0KHBlKSl9ZnVuY3Rpb24gdTkoeSxQLEwpe3ZhciBRPXkuY29udGVudDtpZighUSlyZXR1'@;
put 'cm57fTtvbChRLDApO3ZhciByZSxwZSxfZSx2ZSxTZT0wO1EuY2hrKCJmZWZmIiwiQnl0ZSBPcmRlcjogIiksUS5yZWFkX3NoaWZ0KDIpO3ZhciBIZT1RLnJlYWRfc2hpZnQoNCksQmU9US5yZWFkX3NoaWZ0KDE2KTtpZihCZSE9PWplLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQmJkJlIT09'@;
put 'TCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK0JlKTtpZigxIT09KHJlPVEucmVhZF9zaGlmdCg0KSkmJjIhPT1yZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAjU2V0czogIityZSk7aWYocGU9US5yZWFkX3NoaWZ0KDE2KSx2ZT1RLnJlYWRfc2hpZnQo'@;
put 'NCksMT09PXJlJiZ2ZSE9PVEubCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaDogIit2ZSsiICE9PSAiK1EubCk7Mj09PXJlJiYoX2U9US5yZWFkX3NoaWZ0KDE2KSxTZT1RLnJlYWRfc2hpZnQoNCkpO3ZhciBDdCxHZT1GMShRLFApLG50PXtTeXN0ZW1JZGVudGlmaWVyOkhlfTtm'@;
put 'b3IodmFyIGR0IGluIEdlKW50W2R0XT1HZVtkdF07aWYobnQuRk1USUQ9cGUsMT09PXJlKXJldHVybiBudDtpZihTZS1RLmw9PTImJihRLmwrPTIpLFEubCE9PVNlKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrUS5sKyIgIT09ICIrU2UpO3RyeXtDdD1GMShRLG51bGwp'@;
put 'fWNhdGNoe31mb3IoZHQgaW4gQ3QpbnRbZHRdPUN0W2R0XTtyZXR1cm4gbnQuRk1USUQ9W3BlLF9lXSxudH1mdW5jdGlvbiB3aSh5LFAsTCxRLHJlLHBlKXt2YXIgX2U9ZnIocmU/Njg6NDgpLHZlPVtfZV07X2Uud3JpdGVfc2hpZnQoMiw2NTUzNCksX2Uud3JpdGVfc2hpZnQoMiwwKSxfZS53'@;
put 'cml0ZV9zaGlmdCg0LDg0MjQxMjU5OSksX2Uud3JpdGVfc2hpZnQoMTYsamUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCwiaGV4IiksX2Uud3JpdGVfc2hpZnQoNCxyZT8yOjEpLF9lLndyaXRlX3NoaWZ0KDE2LFAsImhleCIpLF9lLndyaXRlX3NoaWZ0KDQscmU/Njg6NDgpO3ZhciBTZT1j'@;
put 'OSh5LEwsUSk7aWYodmUucHVzaChTZSkscmUpe3ZhciBIZT1jOShyZSxudWxsLG51bGwpO19lLndyaXRlX3NoaWZ0KDE2LHBlLCJoZXgiKSxfZS53cml0ZV9zaGlmdCg0LDY4K1NlLmxlbmd0aCksdmUucHVzaChIZSl9cmV0dXJuIFModmUpfWZ1bmN0aW9uIFBkKHksUCl7cmV0dXJuIHkucmVh'@;
put 'ZF9zaGlmdChQKSxudWxsfWZ1bmN0aW9uIFNvKHksUCl7cmV0dXJuIDE9PT15LnJlYWRfc2hpZnQoUCl9ZnVuY3Rpb24gUGwoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoMikpLFAud3JpdGVfc2hpZnQoMiwrISF5KSxQfWZ1bmN0aW9uIGhsKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoMiwidSIpfWZ1'@;
put 'bmN0aW9uIGZ1KHksUCl7cmV0dXJuIFB8fChQPWZyKDIpKSxQLndyaXRlX3NoaWZ0KDIseSksUH1mdW5jdGlvbiBIMSh5LFApe3JldHVybiBmdW5jdGlvbiBrNCh5LFAsTCl7Zm9yKHZhciBRPVtdLHJlPXkubCtQO3kubDxyZTspUS5wdXNoKEwoeSxyZS15LmwpKTtpZihyZSE9PXkubCl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIlNsdXJwIGVycm9yIik7cmV0dXJuIFF9KHksUCxobCl9ZnVuY3Rpb24gZDkoeSxQLEwpe3JldHVybiBMfHwoTD1mcigyKSksTC53cml0ZV9zaGlmdCgxLCJlIj09UD8reTorISF5KSxMLndyaXRlX3NoaWZ0KDEsImUiPT1QPzE6MCksTH1mdW5jdGlvbiBGZCh5LFAsTCl7'@;
put 'dmFyIFE9eS5yZWFkX3NoaWZ0KEwmJkwuYmlmZj49MTI/MjoxKSxyZT0ic2Jjcy1jb250IixwZT1PO0wmJkwuYmlmZj49OCYmKE89MTIwMCksTCYmOCE9TC5iaWZmPzEyPT1MLmJpZmYmJihyZT0id3N0ciIpOnkucmVhZF9zaGlmdCgxKSYmKHJlPSJkYmNzLWNvbnQiKSxMLmJpZmY+PTImJkwu'@;
put 'YmlmZjw9NSYmKHJlPSJjcHN0ciIpO3ZhciB2ZT1RP3kucmVhZF9zaGlmdChRLHJlKToiIjtyZXR1cm4gTz1wZSx2ZX1mdW5jdGlvbiBnbSh5KXt2YXIgUD1PO089MTIwMDt2YXIgU2UsTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoMSkscmU9NCZRLHBlPTgmUSxfZT0xKygxJlEp'@;
put 'LHZlPTAsSGU9e307cGUmJih2ZT15LnJlYWRfc2hpZnQoMikpLHJlJiYoU2U9eS5yZWFkX3NoaWZ0KDQpKTt2YXIgR2U9MD09PUw/IiI6eS5yZWFkX3NoaWZ0KEwsMj09X2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpO2lmKHBlKWZvcihIZS5fUj1bXTt2ZS0tID4wOylIZS5fUi5wdXNoKHtp'@;
put 'ZHg6eS5yZWFkX3NoaWZ0KDIpLGlmbnQ6eS5yZWFkX3NoaWZ0KDIpfSk7cmV0dXJuIHJlJiYoeS5sKz1TZSksSGUudD1HZSxwZXx8KEhlLnI9Ijx0PiIrSGUudCsiPC90PiIpLE89UCxIZX1mdW5jdGlvbiBqMCh5LFApe3ZhciBMPXkuUiYmeS5SLmxlbmd0aHx8eS5yO3kuciYmKHkuUj1EbSh5'@;
put 'LnIpKTt2YXIgUT0iIixyZT0wO0w/eS5SLmZvckVhY2goZnVuY3Rpb24oQ3Qpe3JlKyssUSs9Q3Qudnx8IiJ9KTooUT15LnR8fCIiLHJlPTEpO3ZhciBwZT1mcigzKyhyZT4xPzI6MCkpO3BlLndyaXRlX3NoaWZ0KDIsUS5sZW5ndGgpLHBlLndyaXRlX3NoaWZ0KDEsMXwocmU+MT84OjApKSxy'@;
put 'ZT4xJiZwZS53cml0ZV9zaGlmdCgyLHJlKTt2YXIgX2U9ZnIoMipRLmxlbmd0aCk7X2Uud3JpdGVfc2hpZnQoMipRLmxlbmd0aCxRLCJ1dGYxNmxlIik7dmFyIHZlPVtwZSxfZV07aWYoTCl7dmFyIFNlPWZyKDQqeS5SLmxlbmd0aCksSGU9MDt2ZS5wdXNoKFNlKTtmb3IodmFyIEJlPTA7QmU8'@;
put 'eS5SLmxlbmd0aDsrK0JlKXt2YXIgR2U9eS5SW0JlXTtTZS53cml0ZV9zaGlmdCgyLEhlKSxIZSs9KEdlLnZ8fCIiKS5sZW5ndGg7dmFyIG50PUdlLnM/Z3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpHZS5zfSxQKTowLGR0PVAuY2VsbFhmc1tudF0uZm9udElkO1Nl'@;
put 'LndyaXRlX3NoaWZ0KDIsZHQ8ND9kdDpkdCsxKX19cmV0dXJuIFModmUpfWZ1bmN0aW9uIEhkKHksUCxMKXtpZihMKXtpZihMLmJpZmY+PTImJkwuYmlmZjw9NSlyZXR1cm4geS5yZWFkX3NoaWZ0KFAsImNwc3RyIik7aWYoTC5iaWZmPj0xMilyZXR1cm4geS5yZWFkX3NoaWZ0KFAsImRiY3Mt'@;
put 'Y29udCIpfXZhciByZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHkucmVhZF9zaGlmdChQLDA9PT1yZT8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gTjIoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKTtyZXR1cm4gMD09PVE/KHkubCsrLCIiKTpI'@;
put 'ZCh5LFEsTCl9ZnVuY3Rpb24gVjIoeSxQLEwpe2lmKEwuYmlmZj41KXJldHVybiBOMih5LDAsTCk7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09UT8oeS5sKyssIiIpOnkucmVhZF9zaGlmdChRLEwuYmlmZjw9NHx8IXkubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlv'@;
put 'biBtbSh5LFAsTCl7cmV0dXJuIEx8fChMPWZyKDMrMip5Lmxlbmd0aCkpLEwud3JpdGVfc2hpZnQoMix5Lmxlbmd0aCksTC53cml0ZV9zaGlmdCgxLDEpLEwud3JpdGVfc2hpZnQoMzEseSwidXRmMTZsZSIpLEx9ZnVuY3Rpb24gQTQoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpO3JldHVybiBQ'@;
put 'PjA/eS5yZWFkX3NoaWZ0KFAsInV0ZjE2bGUiKS5yZXBsYWNlKHYsIiIpOiIifWZ1bmN0aW9uIF8zKHksUCl7UHx8KFA9ZnIoNisyKnkubGVuZ3RoKSksUC53cml0ZV9zaGlmdCg0LDEreS5sZW5ndGgpO2Zvcih2YXIgTD0wO0w8eS5sZW5ndGg7KytMKVAud3JpdGVfc2hpZnQoMix5LmNoYXJD'@;
put 'b2RlQXQoTCkpO3JldHVybiBQLndyaXRlX3NoaWZ0KDIsMCksUH1mdW5jdGlvbiBiMyh5KXt2YXIgUD1mcig1MTIpLEw9MCxRPXkuVGFyZ2V0OyJmaWxlOi8vIj09US5zbGljZSgwLDcpJiYoUT1RLnNsaWNlKDcpKTt2YXIgcmU9US5pbmRleE9mKCIjIikscGU9cmU+LTE/MzE6MjM7c3dpdGNo'@;
put 'KFEuY2hhckF0KDApKXtjYXNlIiMiOnBlPTI4O2JyZWFrO2Nhc2UiLiI6cGUmPS0zfVAud3JpdGVfc2hpZnQoNCwyKSxQLndyaXRlX3NoaWZ0KDQscGUpO3ZhciBfZT1bOCw2ODE1ODI3LDY2MTkyMzcsNDg0OTc4MCw4M107Zm9yKEw9MDtMPF9lLmxlbmd0aDsrK0wpUC53cml0ZV9zaGlmdCg0'@;
put 'LF9lW0xdKTtpZigyOD09cGUpXzMoUT1RLnNsaWNlKDEpLFApO2Vsc2UgaWYoMiZwZSl7Zm9yKF9lPSJlMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxMPTA7TDxfZS5sZW5ndGg7KytMKVAud3JpdGVfc2hpZnQoMSxwYXJzZUludChf'@;
put 'ZVtMXSwxNikpO3ZhciB2ZT1yZT4tMT9RLnNsaWNlKDAscmUpOlE7Zm9yKFAud3JpdGVfc2hpZnQoNCwyKih2ZS5sZW5ndGgrMSkpLEw9MDtMPHZlLmxlbmd0aDsrK0wpUC53cml0ZV9zaGlmdCgyLHZlLmNoYXJDb2RlQXQoTCkpO1Aud3JpdGVfc2hpZnQoMiwwKSw4JnBlJiZfMyhyZT4tMT9R'@;
put 'LnNsaWNlKHJlKzEpOiIiLFApfWVsc2V7Zm9yKF9lPSIwMyAwMyAwMCAwMCAwMCAwMCAwMCAwMCBjMCAwMCAwMCAwMCAwMCAwMCAwMCA0NiIuc3BsaXQoIiAiKSxMPTA7TDxfZS5sZW5ndGg7KytMKVAud3JpdGVfc2hpZnQoMSxwYXJzZUludChfZVtMXSwxNikpO2Zvcih2YXIgU2U9MDsiLi4v'@;
put 'Ij09US5zbGljZSgzKlNlLDMqU2UrMyl8fCIuLlxcIj09US5zbGljZSgzKlNlLDMqU2UrMyk7KSsrU2U7Zm9yKFAud3JpdGVfc2hpZnQoMixTZSksUC53cml0ZV9zaGlmdCg0LFEubGVuZ3RoLTMqU2UrMSksTD0wO0w8US5sZW5ndGgtMypTZTsrK0wpUC53cml0ZV9zaGlmdCgxLDI1NSZRLmNo'@;
put 'YXJDb2RlQXQoTCszKlNlKSk7Zm9yKFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDIsNjU1MzUpLFAud3JpdGVfc2hpZnQoMiw1NzAwNSksTD0wO0w8NjsrK0wpUC53cml0ZV9zaGlmdCg0LDApfXJldHVybiBQLnNsaWNlKDAsUC5sKX1mdW5jdGlvbiB2bSh5KXtyZXR1cm5beS5y'@;
put 'ZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKSx5LnJlYWRfc2hpZnQoMSkseS5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiBoOSh5LFApe3ZhciBMPXZtKHkpO3JldHVybiBMWzNdPTAsTH1mdW5jdGlvbiBMdSh5KXtyZXR1cm57cjp5LnJlYWRfc2hpZnQoMiksYzp5LnJlYWRfc2hpZnQoMiks'@;
put 'aXhmZTp5LnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHowKHksUCxMLFEpe3JldHVybiBRfHwoUT1mcig2KSksUS53cml0ZV9zaGlmdCgyLHkpLFEud3JpdGVfc2hpZnQoMixQKSxRLndyaXRlX3NoaWZ0KDIsTHx8MCksUX1mdW5jdGlvbiBwOSh5LFAsTCl7dmFyIFE9TC5iaWZmPjg/NDoyO3Jl'@;
put 'dHVyblt5LnJlYWRfc2hpZnQoUSkseS5yZWFkX3NoaWZ0KFEsImkiKSx5LnJlYWRfc2hpZnQoUSwiaSIpXX1mdW5jdGlvbiBnOSh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDIpLFhjKHkpXX1mdW5jdGlvbiBLaCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMik7cmV0'@;
put 'dXJue3M6e2M6eS5yZWFkX3NoaWZ0KDIpLHI6UH0sZTp7Yzp5LnJlYWRfc2hpZnQoMikscjpMfX19ZnVuY3Rpb24gVTAoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoOCkpLFAud3JpdGVfc2hpZnQoMix5LnMuciksUC53cml0ZV9zaGlmdCgyLHkuZS5yKSxQLndyaXRlX3NoaWZ0KDIseS5zLmMpLFAu'@;
put 'd3JpdGVfc2hpZnQoMix5LmUuYyksUH1mdW5jdGlvbiBfbSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6eS5yZWFkX3NoaWZ0KDEpLHI6UH0sZTp7Yzp5LnJlYWRfc2hpZnQoMSkscjpMfX19dmFyIHZhPV9tO2Z1bmN0aW9uIFQ0KHkpe3ku'@;
put 'bCs9NDt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIHkubCs9MTIsW0wsUCxRXX1mdW5jdGlvbiBGbCh5KXt5LmwrPTIseS5sKz15LnJlYWRfc2hpZnQoMil9dmFyIGJtPXswOkZsLDQ6RmwsNTpGbCw2OkZsLDc6ZnVuY3Rp'@;
put 'b24gXzkoeSl7cmV0dXJuIHkubCs9NCx5LmNmPXkucmVhZF9zaGlmdCgyKSx7fX0sODpGbCw5OkZsLDEwOkZsLDExOkZsLDEyOkZsLDEzOmZ1bmN0aW9uIHY5KHkpe3ZhciBQPXt9O3JldHVybiB5LmwrPTQseS5sKz0xNixQLmZTaGFyZWROb3RlPXkucmVhZF9zaGlmdCgyKSx5LmwrPTQsUH0s'@;
put 'MTQ6RmwsMTU6RmwsMTY6RmwsMTc6RmwsMTg6RmwsMTk6RmwsMjA6RmwsMjE6VDR9O2Z1bmN0aW9uIFJ1KHksUCl7dmFyIEw9e0JJRkZWZXI6MCxkdDowfTtzd2l0Y2goTC5CSUZGVmVyPXkucmVhZF9zaGlmdCgyKSwoUC09Mik+PTImJihMLmR0PXkucmVhZF9zaGlmdCgyKSx5LmwtPTIpLEwu'@;
put 'QklGRlZlcil7Y2FzZSAxNTM2OmNhc2UgMTI4MDpjYXNlIDEwMjQ6Y2FzZSA3Njg6Y2FzZSA1MTI6Y2FzZSAyOmNhc2UgNzpicmVhaztkZWZhdWx0OmlmKFA+Nil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgQklGRiBWZXIgIitMLkJJRkZWZXIpfXJldHVybiB5LnJlYWRfc2hpZnQoUCks'@;
put 'TH1mdW5jdGlvbiBENCh5LFAsTCl7dmFyIFE9MTUzNixyZT0xNjtzd2l0Y2goTC5ib29rVHlwZSl7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmJyZWFrO2Nhc2UiYmlmZjUiOlE9MTI4MCxyZT04O2JyZWFrO2Nhc2UiYmlmZjQiOlE9NCxyZT02O2JyZWFrO2Nhc2UiYmlmZjMiOlE9MyxyZT02O2Jy'@;
put 'ZWFrO2Nhc2UiYmlmZjIiOlE9MixyZT00O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBCSUZGIHZlcnNpb24iKX12YXIgcGU9ZnIocmUpO3JldHVybiBwZS53cml0ZV9zaGlmdCgyLFEpLHBlLndyaXRlX3NoaWZ0KDIsUCkscmU+NCYmcGUud3JpdGVfc2hpZnQo'@;
put 'MiwyOTI4MikscmU+NiYmcGUud3JpdGVfc2hpZnQoMiwxOTk3KSxyZT44JiYocGUud3JpdGVfc2hpZnQoMiw0OTE2MSkscGUud3JpdGVfc2hpZnQoMiwxKSxwZS53cml0ZV9zaGlmdCgyLDE3OTgpLHBlLndyaXRlX3NoaWZ0KDIsMCkpLHBlfWZ1bmN0aW9uIFkwKHksUCl7dmFyIEw9IVB8fFAu'@;
put 'YmlmZj49OD8yOjEsUT1mcig4K0wqeS5uYW1lLmxlbmd0aCk7US53cml0ZV9zaGlmdCg0LHkucG9zKSxRLndyaXRlX3NoaWZ0KDEseS5oc3x8MCksUS53cml0ZV9zaGlmdCgxLHkuZHQpLFEud3JpdGVfc2hpZnQoMSx5Lm5hbWUubGVuZ3RoKSxQLmJpZmY+PTgmJlEud3JpdGVfc2hpZnQoMSwx'@;
put 'KSxRLndyaXRlX3NoaWZ0KEwqeS5uYW1lLmxlbmd0aCx5Lm5hbWUsUC5iaWZmPDg/InNiY3MiOiJ1dGYxNmxlIik7dmFyIHJlPVEuc2xpY2UoMCxRLmwpO3JldHVybiByZS5sPVEubCxyZX1mdW5jdGlvbiBJcih5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLEpjKHkpfWZ1bmN0aW9uIGVzKHkp'@;
put 'e3JldHVybiB5LnJlYWRfc2hpZnQoNCksbDAoeSl9ZnVuY3Rpb24gb2MoeSxQLEwpe3JldHVybiB5LnJlYWRfc2hpZnQoNCksb1MoeSwwLEwpfWZ1bmN0aW9uIFcwKHksUCxMKXt2YXIgUT0wO0wmJjI9PUwuYmlmZnx8KFE9eS5yZWFkX3NoaWZ0KDIpKTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIp'@;
put 'O3JldHVybiBMJiYyPT1MLmJpZmYmJihRPTEtKHJlPj4xNSkscmUmPTMyNzY3KSxbe1Vuc3luY2VkOjEmUSxEeVplcm86KDImUSk+PjEsRXhBc2M6KDQmUSk+PjIsRXhEc2M6KDgmUSk+PjN9LHJlXX1mdW5jdGlvbiBYcih5LFAsTCxRKXt2YXIgcmU9TCYmNT09TC5iaWZmO1F8fChRPWZyKHJl'@;
put 'PzMrUC5sZW5ndGg6NSsyKlAubGVuZ3RoKSksUS53cml0ZV9zaGlmdCgyLHkpLFEud3JpdGVfc2hpZnQocmU/MToyLFAubGVuZ3RoKSxyZXx8US53cml0ZV9zaGlmdCgxLDEpLFEud3JpdGVfc2hpZnQoKHJlPzE6MikqUC5sZW5ndGgsUCxyZT8ic2JjcyI6InV0ZjE2bGUiKTt2YXIgcGU9US5s'@;
put 'ZW5ndGg+US5sP1Euc2xpY2UoMCxRLmwpOlE7cmV0dXJuIG51bGw9PXBlLmwmJihwZS5sPXBlLmxlbmd0aCkscGV9dmFyIFRzPVYyO2Z1bmN0aW9uIEJ0KHksUCxMKXt2YXIgUT15LmwrUCxyZT04IT1MLmJpZmYmJkwuYmlmZj8yOjQscGU9eS5yZWFkX3NoaWZ0KHJlKSxfZT15LnJlYWRfc2hp'@;
put 'ZnQocmUpLHZlPXkucmVhZF9zaGlmdCgyKSxTZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIHkubD1RLHtzOntyOnBlLGM6dmV9LGU6e3I6X2UsYzpTZX19fWZ1bmN0aW9uIENtKHksUCxMLFEpe3ZhciBwZT0hTHx8IUwuYmlmZnx8OD09TC5iaWZmO1F8fChRPWZyKEwmJjU9PUwuYmlmZj8xNjoy'@;
put 'MCkpLFEud3JpdGVfc2hpZnQoMixwZSYmTC5jZWxsU3R5bGVzJiZ5LmZvbnRJZCYmKHkuZm9udElkPDQ/eS5mb250SWQ6eS5mb250SWQrMSl8fDApO3ZhciBfZT0xO3kucHJvdGVjdGlvbiYmKHkucHJvdGVjdGlvbi5lZGl0YWJsZSYmKF9lJj0tMikseS5wcm90ZWN0aW9uLmhpZGRlbiYmKF9l'@;
put 'fD0yKSkseS5zdHlsZT8oUS53cml0ZV9zaGlmdCgyLHkubnVtRm10SWR8fDApLFEud3JpdGVfc2hpZnQoMiw2NTUyNHxfZSkpOihRLndyaXRlX3NoaWZ0KDIseS5udW1GbXRJZHx8MCksUS53cml0ZV9zaGlmdCgyLFA8PDR8X2UpKTt2YXIgdmU9eS5hbGlnbm1lbnR8fHt9O2lmKHBlKXt2YXIg'@;
put 'U2U9MCxIZT0wO1dtLmluZGV4T2YodmUuaG9yaXpvbnRhbCk+LTEmJihTZXw9V20uaW5kZXhPZih2ZS5ob3Jpem9udGFsKSksdmUud3JhcFRleHQmJihTZXw9OCksQjQuaW5kZXhPZih2ZS52ZXJ0aWNhbCk+LTE/U2V8PUI0LmluZGV4T2YodmUudmVydGljYWwpPDw0Om51bGw9PXZlLnZlcnRp'@;
put 'Y2FsJiYoU2V8PTMyKSxRLndyaXRlX3NoaWZ0KDEsU2UpLFEud3JpdGVfc2hpZnQoMSwwKSx2ZS5zaHJpbmtUb0ZpdCYmKEhlfD0xNiksUS53cml0ZV9zaGlmdCgyLEhlKTt2YXIgQmU9bnVsbDtudWxsIT15LmJvcmRlcklkJiYoQmU9TC5Cb3JkZXJzJiZMLkJvcmRlcnNbeS5ib3JkZXJJZHx8'@;
put 'MF18fHt9KTt2YXIgR2U9MCxudD0wLGR0PTA7QmUmJihudWxsIT1CZS5sZWZ0JiZCZS5sZWZ0LnN0eWxlJiYoR2V8PShkdD1XMi5pbmRleE9mKEJlLmxlZnQuc3R5bGUpKT4tMT9kdDowKSxudWxsIT1CZS5yaWdodCYmQmUucmlnaHQuc3R5bGUmJihHZXw9KChkdD1XMi5pbmRleE9mKEJlLnJp'@;
put 'Z2h0LnN0eWxlKSk+LTE/ZHQ6MCk8PDQpLG51bGwhPUJlLnRvcCYmQmUudG9wLnN0eWxlJiYobnR8PShkdD1XMi5pbmRleE9mKEJlLnRvcC5zdHlsZSkpPi0xP2R0OjApLG51bGwhPUJlLmJvdHRvbSYmQmUuYm90dG9tLnN0eWxlJiYobnR8PSgoZHQ9VzIuaW5kZXhPZihCZS5ib3R0b20uc3R5'@;
put 'bGUpKT4tMT9kdDowKTw8NCkpLFEud3JpdGVfc2hpZnQoMSxHZSksUS53cml0ZV9zaGlmdCgxLG50KSxRLndyaXRlX3NoaWZ0KDIsMCksUS53cml0ZV9zaGlmdCgyLDApLFEud3JpdGVfc2hpZnQoMSwwKTt2YXIgQ3Q9MCxjdD1MLkZpbGxzJiZMLkZpbGxzW3kuZmlsbElkfHwwXXx8e307KGN0'@;
put 'LmZnQ29sb3J8fGN0LmJnQ29sb3IpJiYoQ3R8PTQpLFEud3JpdGVfc2hpZnQoMSxDdCk7dmFyIGJ0PTA7YnR8PUgzKGN0LmZnQ29sb3IsNjUpLGJ0fD1IMyhjdC5iZ0NvbG9yLDY1KTw8NyxRLndyaXRlX3NoaWZ0KDIsYnQpfWVsc2UgUS53cml0ZV9zaGlmdCg0LDApLFEud3JpdGVfc2hpZnQo'@;
put 'NCwwKSxRLndyaXRlX3NoaWZ0KDIsMCk7cmV0dXJuIFF9ZnVuY3Rpb24gTmMoeSxQLEwpe3ZhciBRPUx1KHkpOygyPT1MLmJpZmZ8fDk9PVApJiYrK3kubDt2YXIgcmU9ZnVuY3Rpb24gcG0oeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiAxPT09eS5yZWFkX3NoaWZ0KDEpP1A6MT09'@;
put 'PVB9KHkpO3JldHVybiBRLnZhbD1yZSxRLnQ9ITA9PT1yZXx8ITE9PT1yZT8iYiI6ImUiLFF9dmFyIFYxPWZ1bmN0aW9uIHkzKHksUCxMKXtyZXR1cm4gMD09PVA/IiI6VjIoeSwwLEwpfTtmdW5jdGlvbiB5OSh5LFAsTCl7dmFyIHJlLFE9eS5yZWFkX3NoaWZ0KDIpLHBlPXtmQnVpbHRJbjox'@;
put 'JlEsZldhbnRBZHZpc2U6UT4+PjEmMSxmV2FudFBpY3Q6UT4+PjImMSxmT2xlOlE+Pj4zJjEsZk9sZUxpbms6UT4+PjQmMSxjZjpRPj4+NSYxMDIzLGZJY29uOlE+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1MLnNiY2NoJiYocmU9ZnVuY3Rpb24gUncoeSxQLEwpe3kubCs9NDt2YXIgUT15Lmwr'@;
put 'KFAtPTQpLHJlPUZkKHksMCxMKSxwZT15LnJlYWRfc2hpZnQoMik7aWYocGUhPT0oUS09eS5sKSl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBBZGRpblVkZjogcGFkZGluZyA9ICIrUSsiICE9ICIrcGUpO3JldHVybiB5LmwrPXBlLHJlfSh5LFAtMixMKSkscGUuYm9keT1yZXx8eS5yZWFk'@;
put 'X3NoaWZ0KFAtMiksInN0cmluZyI9PXR5cGVvZiByZSYmKHBlLk5hbWU9cmUpLHBlfXZhciBLVD1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEiLCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFjdCIsIl94bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVy'@;
put 'aWEiLCJfeGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJfeGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0uU2hlZXRfVGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJh'@;
put 'c2UiXTtmdW5jdGlvbiBWdyh5LFAsTCl7dmFyIFE9eS5sK1AscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgxKSxfZT15LnJlYWRfc2hpZnQoMSksdmU9eS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpLFNlPTA7KCFMfHxMLmJpZmY+PTUpJiYoNSE9TC5iaWZmJiYoeS5s'@;
put 'Kz0yKSxTZT15LnJlYWRfc2hpZnQoMiksNT09TC5iaWZmJiYoeS5sKz0yKSx5LmwrPTQpO3ZhciBIZT1IZCh5LF9lLEwpOzMyJnJlJiYoSGU9S1RbSGUuY2hhckNvZGVBdCgwKV0pO3ZhciBCZT1RLXkubDtMJiYyPT1MLmJpZmYmJi0tQmU7dmFyIEdlPVEhPXkubCYmMCE9PXZlJiZCZT4wP2Z1'@;
put 'bmN0aW9uIGQ2KHksUCxMLFEpe3ZhciBfZSxyZT15LmwrUCxwZT1uNSh5LFEsTCk7cmV0dXJuIHJlIT09eS5sJiYoX2U9ajMoeSxyZS15LmwscGUsTCkpLFtwZSxfZV19KHksQmUsTCx2ZSk6W107cmV0dXJue2NoS2V5OnBlLE5hbWU6SGUsaXRhYjpTZSxyZ2NlOkdlfX1mdW5jdGlvbiBTbSh5'@;
put 'LFAsTCl7aWYoTC5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIHc5KHksUCxMKXszPT15W3kubCsxXSYmeVt5LmxdKys7dmFyIFE9RmQoeSwwLEwpO3JldHVybiAzPT1RLmNoYXJDb2RlQXQoMCk/US5zbGljZSgxKTpRfSh5LDAsTCk7Zm9yKHZhciBRPVtdLHJlPXkubCtQLHBlPXkucmVhZF9zaGlm'@;
put 'dChMLmJpZmY+OD80OjIpOzAhPXBlLS07KVEucHVzaChwOSh5LDAsTCkpO2lmKHkubCE9cmUpdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIreS5sKyIgIT0gIityZSk7cmV0dXJuIFF9ZnVuY3Rpb24gancoeSxQLEwpe3ZhciBRPXZhKHksNik7c3dpdGNoKEwuYmlmZil7Y2Fz'@;
put 'ZSAyOnkubCsrLFAtPTc7YnJlYWs7Y2FzZSAzOmNhc2UgNDp5LmwrPTIsUC09ODticmVhaztkZWZhdWx0OnkubCs9NixQLT0xMn1yZXR1cm5bUSxmdih5LFAsTCldfXZhciBNbT1bXTtmdW5jdGlvbiBYaCh5KXt2YXIgUD1mcigyNCksTD1zcyh5WzBdKTtQLndyaXRlX3NoaWZ0KDIsTC5yKSxQ'@;
put 'LndyaXRlX3NoaWZ0KDIsTC5yKSxQLndyaXRlX3NoaWZ0KDIsTC5jKSxQLndyaXRlX3NoaWZ0KDIsTC5jKTtmb3IodmFyIFE9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLHJlPTA7cmU8MTY7KytyZSlQLndyaXRlX3NoaWZ0KDEs'@;
put 'cGFyc2VJbnQoUVtyZV0sMTYpKTtyZXR1cm4gUyhbUCxiMyh5WzFdKV0pfWZ1bmN0aW9uIFFUKHkpe3ZhciBQPXlbMV0uVG9vbHRpcCxMPWZyKDEwKzIqKFAubGVuZ3RoKzEpKTtMLndyaXRlX3NoaWZ0KDIsMjA0OCk7dmFyIFE9c3MoeVswXSk7TC53cml0ZV9zaGlmdCgyLFEuciksTC53cml0'@;
put 'ZV9zaGlmdCgyLFEuciksTC53cml0ZV9zaGlmdCgyLFEuYyksTC53cml0ZV9zaGlmdCgyLFEuYyk7Zm9yKHZhciByZT0wO3JlPFAubGVuZ3RoOysrcmUpTC53cml0ZV9zaGlmdCgyLFAuY2hhckNvZGVBdChyZSkpO3JldHVybiBMLndyaXRlX3NoaWZ0KDIsMCksTH1mdW5jdGlvbiBWZCh5LFAs'@;
put 'TCl7aWYoIUwuY2VsbFN0eWxlcylyZXR1cm4gYmMoeSxQKTt2YXIgUT1MJiZMLmJpZmY+PTEyPzQ6MixyZT15LnJlYWRfc2hpZnQoUSkscGU9eS5yZWFkX3NoaWZ0KFEpLF9lPXkucmVhZF9zaGlmdChRKSx2ZT15LnJlYWRfc2hpZnQoUSksU2U9eS5yZWFkX3NoaWZ0KDIpOzI9PVEmJih5Lmwr'@;
put 'PTIpO3ZhciBIZT17czpyZSxlOnBlLHc6X2UsaXhmZTp2ZSxmbGFnczpTZX07cmV0dXJuKEwuYmlmZj49NXx8IUwuYmlmZikmJihIZS5sZXZlbD1TZT4+OCY3KSxIZX1NbVs4XT1mdW5jdGlvbih5LFApe3ZhciBMPXkubCtQO3kubCs9MTA7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpO3kubCs9NCx5'@;
put 'LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTQ7dmFyIHJlPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5sKz1yZSx5Lmw9TCx7Zm10OlF9fTt2YXIgcXc9THUsS3c9SDEsaUQ9TjI7dmFyIEIyPWZ1bmN0aW9uKCl7dmFyIHk9ezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4'@;
put 'NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0'@;
put 'LDIwMzoxMjUzLDA6MjAxMjcsODo4NjUsOTo0MzcsMTA6ODUwLDExOjQzNywxMzo0MzcsMTQ6ODUwLDE1OjQzNywxNjo4NTAsMTc6NDM3LDE4Ojg1MCwxOTo5MzIsMjA6ODUwLDIxOjQzNywyMjo4NTAsMjM6ODY1LDI0OjQzNywyNTo0MzcsMjY6ODUwLDI3OjQzNywyODo4NjMsMjk6ODUwLDMx'@;
put 'Ojg1MiwzNDo4NTIsMzU6ODUyLDM2Ojg2MCwzNzo4NTAsMzg6ODY2LDU1Ojg1MCw2NDo4NTIsNzc6OTM2LDc4Ojk0OSw3OTo5NTAsODA6ODc0LDg3OjEyNTIsODg6MTI1Miw4OToxMjUyLDEwODo4NjMsMTM0OjczNywxMzU6ODUyLDEzNjo4NTcsMjA0OjEyNTcsMjU1OjE2OTY5fSxQPWJlKHsx'@;
put 'OjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5'@;
put 'LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3fSk7ZnVuY3Rpb24gcmUoU2UsSGUpe3ZhciBCZT1IZXx8e307cmV0dXJuIEJlLmRhdGVORnx8KEJlLmRhdGVORj0ieXl5eW1tZGQiKSxrMShmdW5jdGlvbiBRKFNlLEhlKXt2YXIgQmU9W10sR2U9'@;
put 'RygxKTtzd2l0Y2goSGUudHlwZSl7Y2FzZSJiYXNlNjQiOkdlPUQoc2UuZGVjb2RlKFNlKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkdlPUQoU2UpO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpHZT1TZX1vbChHZSwwKTt2YXIgbnQ9R2UucmVhZF9zaGlmdCgxKSxkdD0hISgxMzYmbnQp'@;
put 'LEN0PSExLGN0PSExO3N3aXRjaChudCl7Y2FzZSAyOmNhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDI0NTpicmVhaztjYXNlIDQ4OmNhc2UgNDk6Q3Q9ITAsZHQ9ITA7YnJlYWs7Y2FzZSAxNDA6Y3Q9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRl'@;
put 'ZCBWZXJzaW9uOiAiK250LnRvU3RyaW5nKDE2KSl9dmFyIGJ0PTAsRnQ9NTIxOzI9PW50JiYoYnQ9R2UucmVhZF9zaGlmdCgyKSksR2UubCs9MywyIT1udCYmKGJ0PUdlLnJlYWRfc2hpZnQoNCkpLGJ0PjEwNDg1NzYmJihidD0xZTYpLDIhPW50JiYoRnQ9R2UucmVhZF9zaGlmdCgyKSk7dmFy'@;
put 'IEV0PUdlLnJlYWRfc2hpZnQoMiksVHQ9SGUuY29kZXBhZ2V8fDEyNTI7MiE9bnQmJihHZS5sKz0xNixHZS5yZWFkX3NoaWZ0KDEpLDAhPT1HZVtHZS5sXSYmKFR0PXlbR2VbR2UubF1dKSxHZS5sKz0xLEdlLmwrPTIpLGN0JiYoR2UubCs9MzYpO2Zvcih2YXIgWnQ9W10scG49e30sS249TWF0'@;
put 'aC5taW4oR2UubGVuZ3RoLDI9PW50PzUyMTpGdC0xMC0oQ3Q/MjY0OjApKSx1bj1jdD8zMjoxMTtHZS5sPEtuJiYxMyE9R2VbR2UubF07KXN3aXRjaChwbj17fSxwbi5uYW1lPWNwdGFibGUudXRpbHMuZGVjb2RlKFR0LEdlLnNsaWNlKEdlLmwsR2UubCt1bikpLnJlcGxhY2UoL1tcdTAwMDBc'@;
put 'clxuXS4qJC9nLCIiKSxHZS5sKz11bixwbi50eXBlPVN0cmluZy5mcm9tQ2hhckNvZGUoR2UucmVhZF9zaGlmdCgxKSksMiE9bnQmJiFjdCYmKHBuLm9mZnNldD1HZS5yZWFkX3NoaWZ0KDQpKSxwbi5sZW49R2UucmVhZF9zaGlmdCgxKSwyPT1udCYmKHBuLm9mZnNldD1HZS5yZWFkX3NoaWZ0'@;
put 'KDIpKSxwbi5kZWM9R2UucmVhZF9zaGlmdCgxKSxwbi5uYW1lLmxlbmd0aCYmWnQucHVzaChwbiksMiE9bnQmJihHZS5sKz1jdD8xMzoxNCkscG4udHlwZSl7Y2FzZSJCIjooIUN0fHw4IT1wbi5sZW4pJiZIZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK3BuLm5hbWUrIjoiK3BuLnR5'@;
put 'cGUpO2JyZWFrO2Nhc2UiRyI6Y2FzZSJQIjpIZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK3BuLm5hbWUrIjoiK3BuLnR5cGUpO2JyZWFrO2Nhc2UiKyI6Y2FzZSIwIjpjYXNlIkAiOmNhc2UiQyI6Y2FzZSJEIjpjYXNlIkYiOmNhc2UiSSI6Y2FzZSJMIjpjYXNlIk0iOmNhc2UiTiI6'@;
put 'Y2FzZSJPIjpjYXNlIlQiOmNhc2UiWSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gRmllbGQgVHlwZTogIitwbi50eXBlKX1pZigxMyE9PUdlW0dlLmxdJiYoR2UubD1GdC0xKSwxMyE9PUdlLnJlYWRfc2hpZnQoMSkpdGhyb3cgbmV3IEVycm9yKCJEQkYgVGVybWlu'@;
put 'YXRvciBub3QgZm91bmQgIitHZS5sKyIgIitHZVtHZS5sXSk7R2UubD1GdDt2YXIgcW49MCx6bj0wO2ZvcihCZVswXT1bXSx6bj0wO3puIT1adC5sZW5ndGg7Kyt6bilCZVswXVt6bl09WnRbem5dLm5hbWU7Zm9yKDtidC0tID4wOylpZig0MiE9PUdlW0dlLmxdKWZvcigrK0dlLmwsQmVbKytx'@;
put 'bl09W10sem49MCx6bj0wO3puIT1adC5sZW5ndGg7Kyt6bil7dmFyIGtuPUdlLnNsaWNlKEdlLmwsR2UubCtadFt6bl0ubGVuKTtHZS5sKz1adFt6bl0ubGVuLG9sKGtuLDApO3ZhciBlcj1jcHRhYmxlLnV0aWxzLmRlY29kZShUdCxrbik7c3dpdGNoKFp0W3puXS50eXBlKXtjYXNlIkMiOmVy'@;
put 'LnRyaW0oKS5sZW5ndGgmJihCZVtxbl1bem5dPWVyLnJlcGxhY2UoL1xzKyQvLCIiKSk7YnJlYWs7Y2FzZSJEIjpCZVtxbl1bem5dPTg9PT1lci5sZW5ndGg/bmV3IERhdGUoK2VyLnNsaWNlKDAsNCksK2VyLnNsaWNlKDQsNiktMSwrZXIuc2xpY2UoNiw4KSk6ZXI7YnJlYWs7Y2FzZSJGIjpC'@;
put 'ZVtxbl1bem5dPXBhcnNlRmxvYXQoZXIudHJpbSgpKTticmVhaztjYXNlIisiOmNhc2UiSSI6QmVbcW5dW3puXT1jdD8yMTQ3NDgzNjQ4XmtuLnJlYWRfc2hpZnQoLTQsImkiKTprbi5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIkwiOnN3aXRjaChlci50cmltKCkudG9VcHBlckNhc2Uo'@;
put 'KSl7Y2FzZSJZIjpjYXNlIlQiOkJlW3FuXVt6bl09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOkJlW3FuXVt6bl09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitlcisifCIpfWJyZWFrO2Nhc2UiTSI6'@;
put 'aWYoIWR0KXRocm93IG5ldyBFcnJvcigiREJGIFVuZXhwZWN0ZWQgTUVNTyBmb3IgdHlwZSAiK250LnRvU3RyaW5nKDE2KSk7QmVbcW5dW3puXT0iIyNNRU1PIyMiKyhjdD9wYXJzZUludChlci50cmltKCksMTApOmtuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KGVyPWVyLnJlcGxh'@;
put 'Y2UoL1x1MDAwMC9nLCIiKS50cmltKCkpJiYiLiIhPWVyJiYoQmVbcW5dW3puXT0rZXJ8fDApO2JyZWFrO2Nhc2UiQCI6QmVbcW5dW3puXT1uZXcgRGF0ZShrbi5yZWFkX3NoaWZ0KC04LCJmIiktNjIxMzU2ODMyZTUpO2JyZWFrO2Nhc2UiVCI6QmVbcW5dW3puXT1uZXcgRGF0ZSg4NjRlNSoo'@;
put 'a24ucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStrbi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIlkiOkJlW3FuXVt6bl09a24ucmVhZF9zaGlmdCg0LCJpIikvMWU0O2JyZWFrO2Nhc2UiTyI6QmVbcW5dW3puXT0ta24ucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoQ3QmJjg9'@;
put 'PVp0W3puXS5sZW4pe0JlW3FuXVt6bl09a24ucmVhZF9zaGlmdCg4LCJmIik7YnJlYWt9Y2FzZSJHIjpjYXNlIlAiOmtuLmwrPVp0W3puXS5sZW47YnJlYWs7Y2FzZSIwIjppZigiX051bGxGbGFncyI9PT1adFt6bl0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVu'@;
put 'c3VwcG9ydGVkIGRhdGEgdHlwZSAiK1p0W3puXS50eXBlKX19ZWxzZSBHZS5sKz1FdDtpZigyIT1udCYmR2UubDxHZS5sZW5ndGgmJjI2IT1HZVtHZS5sKytdKXRocm93IG5ldyBFcnJvcigiREJGIEVPRiBNYXJrZXIgbWlzc2luZyAiKyhHZS5sLTEpKyIgb2YgIitHZS5sZW5ndGgrIiAiK0dl'@;
put 'W0dlLmwtMV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gSGUmJkhlLnNoZWV0Um93cyYmKEJlPUJlLnNsaWNlKDAsSGUuc2hlZXRSb3dzKSksQmV9KFNlLEJlKSxCZSl9dmFyIF9lPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dmVyc2lvbnM6WzIsMyw0OCw0OSwxMzEsMTM5'@;
put 'LDE0MCwyNDVdLHRvX3dvcmtib29rOmZ1bmN0aW9uIHBlKFNlLEhlKXt0cnl7cmV0dXJuIEVkKHJlKFNlLEhlKSxIZSl9Y2F0Y2goQmUpe2lmKEhlJiZIZS5XVEYpdGhyb3cgQmV9cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hlZXQ6cmUsZnJvbV9zaGVldDpmdW5jdGlv'@;
put 'biB2ZShTZSxIZSl7dmFyIEJlPUhlfHx7fTtpZigrQmUuY29kZXBhZ2U+PTAmJmooK0JlLmNvZGVwYWdlKSwic3RyaW5nIj09QmUudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBEQkYgdG8gSlMgc3RyaW5nIik7dmFyIEdlPXljKCksbnQ9SDYoU2Use2hlYWRlcjoxLHJhdzoh'@;
put 'MCxjZWxsRGF0ZXM6ITB9KSxkdD1udFswXSxDdD1udC5zbGljZSgxKSxjdD0wLGJ0PTAsRnQ9MCxFdD0xO2ZvcihjdD0wO2N0PGR0Lmxlbmd0aDsrK2N0KWlmKG51bGwhPWN0KXtpZigrK0Z0LCJudW1iZXIiPT10eXBlb2YgZHRbY3RdJiYoZHRbY3RdPWR0W2N0XS50b1N0cmluZygxMCkpLCJz'@;
put 'dHJpbmciIT10eXBlb2YgZHRbY3RdKXRocm93IG5ldyBFcnJvcigiREJGIEludmFsaWQgY29sdW1uIG5hbWUgIitkdFtjdF0rIiB8Iit0eXBlb2YgZHRbY3RdKyJ8Iik7aWYoZHQuaW5kZXhPZihkdFtjdF0pIT09Y3QpZm9yKGJ0PTA7YnQ8MTAyNDsrK2J0KWlmKC0xPT1kdC5pbmRleE9mKGR0'@;
put 'W2N0XSsiXyIrYnQpKXtkdFtjdF0rPSJfIitidDticmVha319dmFyIFR0PU9pKFNlWyIhcmVmIl0pLFp0PVtdO2ZvcihjdD0wO2N0PD1UdC5lLmMtVHQucy5jOysrY3Qpe3ZhciBwbj1bXTtmb3IoYnQ9MDtidDxDdC5sZW5ndGg7KytidCludWxsIT1DdFtidF1bY3RdJiZwbi5wdXNoKEN0W2J0'@;
put 'XVtjdF0pO2lmKDAhPXBuLmxlbmd0aCYmbnVsbCE9ZHRbY3RdKXt2YXIgS249IiIsdW49IiI7Zm9yKGJ0PTA7YnQ8cG4ubGVuZ3RoOysrYnQpe3N3aXRjaCh0eXBlb2YgcG5bYnRdKXtjYXNlIm51bWJlciI6dW49IkIiO2JyZWFrO2Nhc2Uic3RyaW5nIjpkZWZhdWx0OnVuPSJDIjticmVhaztj'@;
put 'YXNlImJvb2xlYW4iOnVuPSJMIjticmVhaztjYXNlIm9iamVjdCI6dW49cG5bYnRdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9aWYoIkMiPT0oS249S24mJktuIT11bj8iQyI6dW4pKWJyZWFrfUV0Kz1fZVtLbl18fDAsWnRbY3RdPUtufWVsc2UgWnRbY3RdPSI/In12YXIgcW49R2UubmV4dCgz'@;
put 'Mik7Zm9yKHFuLndyaXRlX3NoaWZ0KDQsMzE4OTAyNTc2KSxxbi53cml0ZV9zaGlmdCg0LEN0Lmxlbmd0aCkscW4ud3JpdGVfc2hpZnQoMiwyOTYrMzIqRnQpLHFuLndyaXRlX3NoaWZ0KDIsRXQpLGN0PTA7Y3Q8NDsrK2N0KXFuLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHFuLndyaXRlX3NoaWZ0'@;
put 'KDQsMHwoK1BbUl18fDMpPDw4KSxjdD0wLGJ0PTA7Y3Q8ZHQubGVuZ3RoOysrY3QpaWYobnVsbCE9ZHRbY3RdKXt2YXIgem49R2UubmV4dCgzMiksa249KGR0W2N0XS5zbGljZSgtMTApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7em4ud3JpdGVfc2hpZnQoMSxrbiwi'@;
put 'c2JjcyIpLHpuLndyaXRlX3NoaWZ0KDEsIj8iPT1adFtjdF0/IkMiOlp0W2N0XSwic2JjcyIpLHpuLndyaXRlX3NoaWZ0KDQsYnQpLHpuLndyaXRlX3NoaWZ0KDEsX2VbWnRbY3RdXXx8MCksem4ud3JpdGVfc2hpZnQoMSwwKSx6bi53cml0ZV9zaGlmdCgxLDIpLHpuLndyaXRlX3NoaWZ0KDQs'@;
put 'MCksem4ud3JpdGVfc2hpZnQoMSwwKSx6bi53cml0ZV9zaGlmdCg0LDApLHpuLndyaXRlX3NoaWZ0KDQsMCksYnQrPV9lW1p0W2N0XV18fDB9dmFyIGVyPUdlLm5leHQoMjY0KTtmb3IoZXIud3JpdGVfc2hpZnQoNCwxMyksY3Q9MDtjdDw2NTsrK2N0KWVyLndyaXRlX3NoaWZ0KDQsMCk7Zm9y'@;
put 'KGN0PTA7Y3Q8Q3QubGVuZ3RoOysrY3Qpe3ZhciB0cj1HZS5uZXh0KEV0KTtmb3IodHIud3JpdGVfc2hpZnQoMSwwKSxidD0wO2J0PGR0Lmxlbmd0aDsrK2J0KWlmKG51bGwhPWR0W2J0XSlzd2l0Y2goWnRbYnRdKXtjYXNlIkwiOnRyLndyaXRlX3NoaWZ0KDEsbnVsbD09Q3RbY3RdW2J0XT82'@;
put 'MzpDdFtjdF1bYnRdPzg0OjcwKTticmVhaztjYXNlIkIiOnRyLndyaXRlX3NoaWZ0KDgsQ3RbY3RdW2J0XXx8MCwiZiIpO2JyZWFrO2Nhc2UiRCI6Q3RbY3RdW2J0XT8odHIud3JpdGVfc2hpZnQoNCwoIjAwMDAiK0N0W2N0XVtidF0uZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTQpLCJzYmNzIiks'@;
put 'dHIud3JpdGVfc2hpZnQoMiwoIjAwIisoQ3RbY3RdW2J0XS5nZXRNb250aCgpKzEpKS5zbGljZSgtMiksInNiY3MiKSx0ci53cml0ZV9zaGlmdCgyLCgiMDAiK0N0W2N0XVtidF0uZ2V0RGF0ZSgpKS5zbGljZSgtMiksInNiY3MiKSk6dHIud3JpdGVfc2hpZnQoOCwiMDAwMDAwMDAiLCJzYmNz'@;
put 'Iik7YnJlYWs7Y2FzZSJDIjp2YXIgWm49U3RyaW5nKEN0W2N0XVtidF18fCIiKTtmb3IodHIud3JpdGVfc2hpZnQoMSxabiwic2JjcyIpLEZ0PTA7RnQ8MjUwLVpuLmxlbmd0aDsrK0Z0KXRyLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1cm4gR2UubmV4dCgxKS53cml0ZV9zaGlmdCgxLDI2KSxH'@;
put 'ZS5lbmQoKX19fSgpLEU5PWZ1bmN0aW9uKCl7dmFyIHk9e0FBOiJceGMwIixCQToiXHhjMSIsQ0E6Ilx4YzIiLERBOjE5NSxIQToiXHhjNCIsSkE6MTk3LEFFOiJceGM4IixCRToiXHhjOSIsQ0U6Ilx4Y2EiLEhFOiJceGNiIixBSToiXHhjYyIsQkk6Ilx4Y2QiLENJOiJceGNlIixISToiXHhj'@;
put 'ZiIsQU86Ilx4ZDIiLEJPOiJceGQzIixDTzoiXHhkNCIsRE86MjEzLEhPOiJceGQ2IixBVToiXHhkOSIsQlU6Ilx4ZGEiLENVOiJceGRiIixIVToiXHhkYyIsQWE6Ilx4ZTAiLEJhOiJceGUxIixDYToiXHhlMiIsRGE6MjI3LEhhOiJceGU0IixKYToyMjksQWU6Ilx4ZTgiLEJlOiJceGU5IixD'@;
put 'ZToiXHhlYSIsSGU6Ilx4ZWIiLEFpOiJceGVjIixCaToiXHhlZCIsQ2k6Ilx4ZWUiLEhpOiJceGVmIixBbzoiXHhmMiIsQm86Ilx4ZjMiLENvOiJceGY0IixEbzoyNDUsSG86Ilx4ZjYiLEF1OiJceGY5IixCdToiXHhmYSIsQ3U6Ilx4ZmIiLEh1OiJceGZjIixLQzoiXHhjNyIsS2M6Ilx4ZTci'@;
put 'LHE6Ilx4ZTYiLHo6Ilx1MDE1MyIsYToiXHhjNiIsajoiXHUwMTUyIixETjoyMDksRG46MjQxLEh5OjI1NSxTOjE2OSxjOjE3MCxSOjE3NCwiQiAiOjE4MCwwOjE3NiwxOjE3NywyOjE3OCwzOjE3OSw1OjE4MSw2OjE4Miw3OjE4MyxROjE4NSxrOjE4NixiOjIwOCxpOjIxNixsOjIyMixzOjI0'@;
put 'MCx5OjI0OCwiISI6MTYxLCciJzoxNjIsIiMiOjE2MywiKCI6MTY0LCIlIjoxNjUsIiciOjE2NywiSCAiOjE2OCwiKyI6MTcxLCI7IjoxODcsIjwiOjE4OCwiPSI6MTg5LCI+IjoxOTAsIj8iOjE5MSwieyI6MjIzfSxQPW5ldyBSZWdFeHAoIlx4MWJOKCIrbHQoeSkuam9pbigifCIpLnJlcGxh'@;
put 'Y2UoL1x8XHxcfC8sInxcXHx8IikucmVwbGFjZSgvKFs/KCkrXSkvZywiXFwkMSIpKyJ8XFx8KSIsImdtIiksTD1mdW5jdGlvbihudCxkdCl7dmFyIEN0PXlbZHRdO3JldHVybiJudW1iZXIiPT10eXBlb2YgQ3Q/ZWUoQ3QpOkN0fSxRPWZ1bmN0aW9uKG50LGR0LEN0KXt2YXIgY3Q9ZHQuY2hh'@;
put 'ckNvZGVBdCgwKS0zMjw8NHxDdC5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09Y3Q/bnQ6ZWUoY3QpfTtmdW5jdGlvbiBwZShudCxkdCl7dmFyIGVyLEN0PW50LnNwbGl0KC9bXG5ccl0rLyksY3Q9LTEsYnQ9LTEsRnQ9MCxFdD0wLFR0PVtdLFp0PVtdLHBuPW51bGwsS249e30sdW49W10s'@;
put 'cW49W10sem49W10sa249MDtmb3IoK2R0LmNvZGVwYWdlPj0wJiZqKCtkdC5jb2RlcGFnZSk7RnQhPT1DdC5sZW5ndGg7KytGdCl7a249MDt2YXIgb2ksdHI9Q3RbRnRdLnRyaW0oKS5yZXBsYWNlKC9ceDFCKFtceDIwLVx4MkZdKShbXHgzMC1ceDNGXSkvZyxRKS5yZXBsYWNlKFAsTCksWm49'@;
put 'dHIucmVwbGFjZSgvOzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihDaSl7cmV0dXJuIENpLnJlcGxhY2UoL1x1MDAwMC9nLCI7Iil9KTtpZih0ci5sZW5ndGg+MClzd2l0Y2goWm5bMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2Fz'@;
put 'ZSJQIjoiUCI9PVpuWzFdLmNoYXJBdCgwKSYmWnQucHVzaCh0ci5zbGljZSgzKS5yZXBsYWNlKC87Oy9nLCI7IikpO2JyZWFrO2Nhc2UiQyI6dmFyIGtpPSExLExpPSExLFFyPSExLHVyPSExLEFuPS0xLHZyPS0xO2ZvcihFdD0xO0V0PFpuLmxlbmd0aDsrK0V0KXN3aXRjaChabltFdF0uY2hh'@;
put 'ckF0KDApKXtjYXNlIkEiOmNhc2UiRyI6YnJlYWs7Y2FzZSJYIjpidD1wYXJzZUludChabltFdF0uc2xpY2UoMSkpLTEsTGk9ITA7YnJlYWs7Y2FzZSJZIjpmb3IoY3Q9cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xLExpfHwoYnQ9MCksZXI9VHQubGVuZ3RoO2VyPD1jdDsrK2VyKVR0W2Vy'@;
put 'XT1bXTticmVhaztjYXNlIksiOiciJz09PShvaT1abltFdF0uc2xpY2UoMSkpLmNoYXJBdCgwKT9vaT1vaS5zbGljZSgxLG9pLmxlbmd0aC0xKToiVFJVRSI9PT1vaT9vaT0hMDoiRkFMU0UiPT09b2k/b2k9ITE6aXNOYU4oV24ob2kpKT9pc05hTihlbihvaSkuZ2V0RGF0ZSgpKXx8KG9pPUh0'@;
put 'KG9pKSk6KG9pPVduKG9pKSxudWxsIT09cG4mJncuaXNfZGF0ZShwbikmJihvaT1odChvaSkpKSx0eXBlb2YgY3B0YWJsZTwidSImJiJzdHJpbmciPT10eXBlb2Ygb2kmJiJzdHJpbmciIT0oZHR8fHt9KS50eXBlJiYoZHR8fHt9KS5jb2RlcGFnZSYmKG9pPWNwdGFibGUudXRpbHMuZGVjb2Rl'@;
put 'KGR0LmNvZGVwYWdlLG9pKSksa2k9ITA7YnJlYWs7Y2FzZSJFIjp1cj0hMDt2YXIgcnI9YWYoWm5bRXRdLnNsaWNlKDEpLHtyOmN0LGM6YnR9KTtUdFtjdF1bYnRdPVtUdFtjdF1bYnRdLHJyXTticmVhaztjYXNlIlMiOlFyPSEwLFR0W2N0XVtidF09W1R0W2N0XVtidF0sIlM1UyJdO2JyZWFr'@;
put 'O2Nhc2UiUiI6QW49cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6dnI9cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xO2JyZWFrO2RlZmF1bHQ6aWYoZHQmJmR0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK3RyKX1pZihraSYmKFR0W2N0'@;
put 'XVtidF0mJjI9PVR0W2N0XVtidF0ubGVuZ3RoP1R0W2N0XVtidF1bMF09b2k6VHRbY3RdW2J0XT1vaSxwbj1udWxsKSxRcil7aWYodXIpdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIFNuPUFuPi0xJiZUdFtBbl1bdnJd'@;
put 'O2lmKCFTbnx8IVNuWzFdKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgZmluZCBiYXNlIik7VHRbY3RdW2J0XVsxXT1qQyhTblsxXSx7cjpjdC1BbixjOmJ0LXZyfSl9YnJlYWs7Y2FzZSJGIjp2YXIgcHI9MDtmb3IoRXQ9MTtFdDxabi5sZW5ndGg7KytFdClz'@;
put 'd2l0Y2goWm5bRXRdLmNoYXJBdCgwKSl7Y2FzZSJYIjpidD1wYXJzZUludChabltFdF0uc2xpY2UoMSkpLTEsKytwcjticmVhaztjYXNlIlkiOmZvcihjdD1wYXJzZUludChabltFdF0uc2xpY2UoMSkpLTEsZXI9VHQubGVuZ3RoO2VyPD1jdDsrK2VyKVR0W2VyXT1bXTticmVhaztjYXNlIk0i'@;
put 'OmtuPXBhcnNlSW50KFpuW0V0XS5zbGljZSgxKSkvMjA7YnJlYWs7Y2FzZSJGIjpjYXNlIkciOmNhc2UiUyI6Y2FzZSJEIjpjYXNlIk4iOmJyZWFrO2Nhc2UiUCI6cG49WnRbcGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKV07YnJlYWs7Y2FzZSJXIjpmb3Ioem49Wm5bRXRdLnNsaWNlKDEpLnNw'@;
put 'bGl0KCIgIiksZXI9cGFyc2VJbnQoem5bMF0sMTApO2VyPD1wYXJzZUludCh6blsxXSwxMCk7Kytlcilrbj1wYXJzZUludCh6blsyXSwxMCkscW5bZXItMV09MD09PWtuP3toaWRkZW46ITB9Ont3Y2g6a259LHB1KHFuW2VyLTFdKTticmVhaztjYXNlIkMiOnFuW2J0PXBhcnNlSW50KFpuW0V0'@;
put 'XS5zbGljZSgxKSktMV18fChxbltidF09e30pO2JyZWFrO2Nhc2UiUiI6dW5bY3Q9cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xXXx8KHVuW2N0XT17fSksa24+MD8odW5bY3RdLmhwdD1rbix1bltjdF0uaHB4PVUxKGtuKSk6MD09PWtuJiYodW5bY3RdLmhpZGRlbj0hMCk7YnJlYWs7ZGVm'@;
put 'YXVsdDppZihkdCYmZHQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrdHIpfXByPDEmJihwbj1udWxsKTticmVhaztkZWZhdWx0OmlmKGR0JiZkdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIit0cil9fXJldHVybiB1bi5sZW5ndGg+MCYmKEtu'@;
put 'WyIhcm93cyJdPXVuKSxxbi5sZW5ndGg+MCYmKEtuWyIhY29scyJdPXFuKSxkdCYmZHQuc2hlZXRSb3dzJiYoVHQ9VHQuc2xpY2UoMCxkdC5zaGVldFJvd3MpKSxbVHQsS25dfWZ1bmN0aW9uIF9lKG50LGR0KXt2YXIgQ3Q9ZnVuY3Rpb24gcmUobnQsZHQpe3N3aXRjaChkdC50eXBlKXtjYXNl'@;
put 'ImJhc2U2NCI6cmV0dXJuIHBlKHNlLmRlY29kZShudCksZHQpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gcGUobnQsZHQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gcGUobnQudG9TdHJpbmcoImJpbmFyeSIpLGR0KTtjYXNlImFycmF5IjpyZXR1cm4gcGUoUHQobnQpLGR0KX10aHJvdyBuZXcgRXJyb3Io'@;
put 'IlVucmVjb2duaXplZCB0eXBlICIrZHQudHlwZSl9KG50LGR0KSxidD1DdFsxXSxGdD1rMShDdFswXSxkdCk7cmV0dXJuIGx0KGJ0KS5mb3JFYWNoKGZ1bmN0aW9uKEV0KXtGdFtFdF09YnRbRXRdfSksRnR9ZnVuY3Rpb24gU2UobnQsZHQsQ3QsY3Qpe3ZhciBidD0iQztZIisoQ3QrMSkrIjtY'@;
put 'IisoY3QrMSkrIjtLIjtzd2l0Y2gobnQudCl7Y2FzZSJuIjpidCs9bnQudnx8MCxudC5mJiYhbnQuRiYmKGJ0Kz0iO0UiK0s5KG50LmYse3I6Q3QsYzpjdH0pKTticmVhaztjYXNlImIiOmJ0Kz1udC52PyJUUlVFIjoiRkFMU0UiO2JyZWFrO2Nhc2UiZSI6YnQrPW50Lnd8fG50LnY7YnJlYWs7'@;
put 'Y2FzZSJkIjpidCs9JyInKyhudC53fHxudC52KSsnIic7YnJlYWs7Y2FzZSJzIjpidCs9JyInK250LnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJuIGJ0fXJldHVybiB5WyJ8Il09MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiB2ZShudCxkdCl7cmV0dXJuIEVkKF9lKG50LGR0KSxkdCl9'@;
put 'LHRvX3NoZWV0Ol9lLGZyb21fc2hlZXQ6ZnVuY3Rpb24gR2UobnQsZHQpe3ZhciBGdCxDdD1bIklEO1BTaGVldEpTO047RSJdLGN0PVtdLGJ0PU9pKG50WyIhcmVmIl0pLEV0PUFycmF5LmlzQXJyYXkobnQpLFR0PSJcclxuIjtDdC5wdXNoKCJQO1BHZW5lcmFsIiksQ3QucHVzaCgiRjtQMDtE'@;
put 'RzBHODtNMjU1IiksbnRbIiFjb2xzIl0mJmZ1bmN0aW9uIEhlKG50LGR0KXtkdC5mb3JFYWNoKGZ1bmN0aW9uKEN0LGN0KXt2YXIgYnQ9IkY7VyIrKGN0KzEpKyIgIisoY3QrMSkrIiAiO0N0LmhpZGRlbj9idCs9IjAiOigibnVtYmVyIj09dHlwZW9mIEN0LndpZHRoJiYhQ3Qud3B4JiYoQ3Qu'@;
put 'd3B4PU1jKEN0LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiBDdC53cHgmJiFDdC53Y2gmJihDdC53Y2g9dGYoQ3Qud3B4KSksIm51bWJlciI9PXR5cGVvZiBDdC53Y2gmJihidCs9TWF0aC5yb3VuZChDdC53Y2gpKSksIiAiIT1idC5jaGFyQXQoYnQubGVuZ3RoLTEpJiZudC5wdXNoKGJ0KX0p'@;
put 'fShDdCxudFsiIWNvbHMiXSksbnRbIiFyb3dzIl0mJmZ1bmN0aW9uIEJlKG50LGR0KXtkdC5mb3JFYWNoKGZ1bmN0aW9uKEN0LGN0KXt2YXIgYnQ9IkY7IjtDdC5oaWRkZW4/YnQrPSJNMDsiOkN0LmhwdD9idCs9Ik0iKzIwKkN0LmhwdCsiOyI6Q3QuaHB4JiYoYnQrPSJNIisyMCpqMihDdC5o'@;
put 'cHgpKyI7IiksYnQubGVuZ3RoPjImJm50LnB1c2goYnQrIlIiKyhjdCsxKSl9KX0oQ3QsbnRbIiFyb3dzIl0pLEN0LnB1c2goIkI7WSIrKGJ0LmUuci1idC5zLnIrMSkrIjtYIisoYnQuZS5jLWJ0LnMuYysxKSsiO0QiK1tidC5zLmMsYnQucy5yLGJ0LmUuYyxidC5lLnJdLmpvaW4oIiAiKSk7'@;
put 'Zm9yKHZhciBadD1idC5zLnI7WnQ8PWJ0LmUucjsrK1p0KWZvcih2YXIgcG49YnQucy5jO3BuPD1idC5lLmM7Kytwbil7dmFyIEtuPWRpKHtyOlp0LGM6cG59KTsoRnQ9RXQ/KG50W1p0XXx8W10pW3BuXTpudFtLbl0pJiYobnVsbCE9RnQudnx8RnQuZiYmIUZ0LkYpJiZjdC5wdXNoKFNlKEZ0'@;
put 'LDAsWnQscG4pKX1yZXR1cm4gQ3Quam9pbihUdCkrVHQrY3Quam9pbihUdCkrVHQrIkUiK1R0fX19KCksTTM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQKHBlLF9lKXtmb3IodmFyIHZlPXBlLnNwbGl0KCJcbiIpLFNlPS0xLEhlPS0xLEJlPTAsR2U9W107QmUhPT12ZS5sZW5ndGg7KytCZSlpZigi'@;
put 'Qk9UIiE9PXZlW0JlXS50cmltKCkpe2lmKCEoU2U8MCkpe2Zvcih2YXIgbnQ9dmVbQmVdLnRyaW0oKS5zcGxpdCgiLCIpLGR0PW50WzBdLEN0PW50WzFdLGN0PXZlWysrQmVdfHwiIjsxJihjdC5tYXRjaCgvWyJdL2cpfHxbXSkubGVuZ3RoJiZCZTx2ZS5sZW5ndGgtMTspY3QrPSJcbiIrdmVb'@;
put 'KytCZV07c3dpdGNoKGN0PWN0LnRyaW0oKSwrZHQpe2Nhc2UtMTppZigiQk9UIj09PWN0KXtHZVsrK1NlXT1bXSxIZT0wO2NvbnRpbnVlfWlmKCJFT0QiIT09Y3QpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK2N0KTticmVhaztjYXNlIDA6R2Vb'@;
put 'U2VdW0hlXT0iVFJVRSI9PT1jdHx8IkZBTFNFIiE9PWN0JiYoaXNOYU4oV24oQ3QpKT9pc05hTihlbihDdCkuZ2V0RGF0ZSgpKT9DdDpIdChDdCk6V24oQ3QpKSwrK0hlO2JyZWFrO2Nhc2UgMTooY3Q9KGN0PWN0LnNsaWNlKDEsY3QubGVuZ3RoLTEpKS5yZXBsYWNlKC8iIi9nLCciJykpJiZj'@;
put 'dC5tYXRjaCgvXj0iLioiJC8pJiYoY3Q9Y3Quc2xpY2UoMiwtMSkpLEdlW1NlXVtIZSsrXT0iIiE9PWN0P2N0Om51bGx9aWYoIkVPRCI9PT1jdClicmVha319ZWxzZSBHZVsrK1NlXT1bXSxIZT0wO3JldHVybiBfZSYmX2Uuc2hlZXRSb3dzJiYoR2U9R2Uuc2xpY2UoMCxfZS5zaGVldFJvd3Mp'@;
put 'KSxHZX1mdW5jdGlvbiBMKHBlLF9lKXtyZXR1cm4gazEoZnVuY3Rpb24geShwZSxfZSl7c3dpdGNoKF9lLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gUChzZS5kZWNvZGUocGUpLF9lKTtjYXNlImJpbmFyeSI6cmV0dXJuIFAocGUsX2UpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gUChwZS50b1N0'@;
put 'cmluZygiYmluYXJ5IiksX2UpO2Nhc2UiYXJyYXkiOnJldHVybiBQKFB0KHBlKSxfZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK19lLnR5cGUpfShwZSxfZSksX2UpfXZhciBwZSxfZTtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gUShwZSxfZSl7cmV0dXJuIEVk'@;
put 'KEwocGUsX2UpLF9lKX0sdG9fc2hlZXQ6TCxmcm9tX3NoZWV0OihwZT1mdW5jdGlvbihTZSxIZSxCZSxHZSxudCl7U2UucHVzaChIZSksU2UucHVzaChCZSsiLCIrR2UpLFNlLnB1c2goJyInK250LnJlcGxhY2UoLyIvZywnIiInKSsnIicpfSxfZT1mdW5jdGlvbihTZSxIZSxCZSxHZSl7U2Uu'@;
put 'cHVzaChIZSsiLCIrQmUpLFNlLnB1c2goMT09SGU/JyInK0dlLnJlcGxhY2UoLyIvZywnIiInKSsnIic6R2UpfSxmdW5jdGlvbihTZSl7dmFyIEdlLEhlPVtdLEJlPU9pKFNlWyIhcmVmIl0pLG50PUFycmF5LmlzQXJyYXkoU2UpO3BlKEhlLCJUQUJMRSIsMCwxLCJzaGVldGpzIikscGUoSGUs'@;
put 'IlZFQ1RPUlMiLDAsQmUuZS5yLUJlLnMucisxLCIiKSxwZShIZSwiVFVQTEVTIiwwLEJlLmUuYy1CZS5zLmMrMSwiIikscGUoSGUsIkRBVEEiLDAsMCwiIik7Zm9yKHZhciBkdD1CZS5zLnI7ZHQ8PUJlLmUucjsrK2R0KXtfZShIZSwtMSwwLCJCT1QiKTtmb3IodmFyIEN0PUJlLnMuYztDdDw9'@;
put 'QmUuZS5jOysrQ3Qpe3ZhciBjdD1kaSh7cjpkdCxjOkN0fSk7aWYoR2U9bnQ/KFNlW2R0XXx8W10pW0N0XTpTZVtjdF0pc3dpdGNoKEdlLnQpe2Nhc2UibiI6dmFyIGJ0PUdlLnc7IWJ0JiZudWxsIT1HZS52JiYoYnQ9R2UudiksbnVsbD09YnQ/X2UoSGUsMSwwLEdlLmYmJiFHZS5GPyI9IitH'@;
put 'ZS5mOiIiKTpfZShIZSwwLGJ0LCJWIik7YnJlYWs7Y2FzZSJiIjpfZShIZSwwLEdlLnY/MTowLEdlLnY/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UicyI6X2UoSGUsMSwwLGlzTmFOKEdlLnYpP0dlLnY6Jz0iJytHZS52KyciJyk7YnJlYWs7Y2FzZSJkIjpHZS53fHwoR2Uudz13LmZvcm1h'@;
put 'dChHZS56fHx3Ll90YWJsZVsxNF0sVWUoSHQoR2UudikpKSksX2UoSGUsMCxHZS53LCJWIik7YnJlYWs7ZGVmYXVsdDpfZShIZSwxLDAsIiIpfWVsc2UgX2UoSGUsMSwwLCIiKX19cmV0dXJuIF9lKEhlLC0xLDAsIkVPRCIpLEhlLmpvaW4oIlxyXG4iKX0pfX0oKSxPND1mdW5jdGlvbigpe2Z1'@;
put 'bmN0aW9uIHkoR2Upe3JldHVybiBHZS5yZXBsYWNlKC9cXGIvZywiXFwiKS5yZXBsYWNlKC9cXGMvZywiOiIpLnJlcGxhY2UoL1xcbi9nLCJcbiIpfWZ1bmN0aW9uIFAoR2Upe3JldHVybiBHZS5yZXBsYWNlKC9cXC9nLCJcXGIiKS5yZXBsYWNlKC86L2csIlxcYyIpLnJlcGxhY2UoL1xuL2cs'@;
put 'IlxcbiIpfWZ1bmN0aW9uIFEoR2UsbnQpe3JldHVybiBrMShmdW5jdGlvbiBMKEdlLG50KXtmb3IodmFyIGR0PUdlLnNwbGl0KCJcbiIpLEN0PS0xLGN0PS0xLGJ0PTAsRnQ9W107YnQhPT1kdC5sZW5ndGg7KytidCl7dmFyIEV0PWR0W2J0XS50cmltKCkuc3BsaXQoIjoiKTtpZigiY2VsbCI9'@;
put 'PT1FdFswXSl7dmFyIFR0PXNzKEV0WzFdKTtpZihGdC5sZW5ndGg8PVR0LnIpZm9yKEN0PUZ0Lmxlbmd0aDtDdDw9VHQucjsrK0N0KUZ0W0N0XXx8KEZ0W0N0XT1bXSk7c3dpdGNoKEN0PVR0LnIsY3Q9VHQuYyxFdFsyXSl7Y2FzZSJ0IjpGdFtDdF1bY3RdPXkoRXRbM10pO2JyZWFrO2Nhc2Ui'@;
put 'diI6RnRbQ3RdW2N0XT0rRXRbM107YnJlYWs7Y2FzZSJ2dGYiOnZhciBadD1FdFtFdC5sZW5ndGgtMV07Y2FzZSJ2dGMiOkZ0W0N0XVtjdF09Im5sIj09PUV0WzNdPyEhK0V0WzRdOitFdFs0XSwidnRmIj09RXRbMl0mJihGdFtDdF1bY3RdPVtGdFtDdF1bY3RdLFp0XSl9fX1yZXR1cm4gbnQm'@;
put 'Jm50LnNoZWV0Um93cyYmKEZ0PUZ0LnNsaWNlKDAsbnQuc2hlZXRSb3dzKSksRnR9KEdlLG50KSxudCl9dmFyIHBlPVsic29jaWFsY2FsYzp2ZXJzaW9uOjEuNSIsIk1JTUUtVmVyc2lvbjogMS4wIiwiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PVNvY2lhbENhbGNT'@;
put 'cHJlYWRzaGVldENvbnRyb2xTYXZlIl0uam9pbigiXG4iKSxfZT1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIsdmU9WyIjIFNvY2lhbENhbGMgU3ByZWFkc2hlZXQg'@;
put 'Q29udHJvbCBTYXZlIiwicGFydDpzaGVldCJdLmpvaW4oIlxuIiksU2U9Ii0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUtLSI7ZnVuY3Rpb24gSGUoR2Upe2lmKCFHZXx8IUdlWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciBDdCxudD1bXSxkdD1bXSxjdD0iIixidD1XcyhHZVsi'@;
put 'IXJlZiJdKSxGdD1BcnJheS5pc0FycmF5KEdlKSxFdD1idC5zLnI7RXQ8PWJ0LmUucjsrK0V0KWZvcih2YXIgVHQ9YnQucy5jO1R0PD1idC5lLmM7KytUdClpZihjdD1kaSh7cjpFdCxjOlR0fSksKEN0PUZ0PyhHZVtFdF18fFtdKVtUdF06R2VbY3RdKSYmbnVsbCE9Q3QudiYmInoiIT09Q3Qu'@;
put 'dCl7c3dpdGNoKGR0PVsiY2VsbCIsY3QsInQiXSxDdC50KXtjYXNlInMiOmNhc2Uic3RyIjpkdC5wdXNoKFAoQ3QudikpO2JyZWFrO2Nhc2UibiI6Q3QuZj8oZHRbMl09InZ0ZiIsZHRbM109Im4iLGR0WzRdPUN0LnYsZHRbNV09UChDdC5mKSk6KGR0WzJdPSJ2IixkdFszXT1DdC52KTticmVh'@;
put 'aztjYXNlImIiOmR0WzJdPSJ2dCIrKEN0LmY/ImYiOiJjIiksZHRbM109Im5sIixkdFs0XT1DdC52PyIxIjoiMCIsZHRbNV09UChDdC5mfHwoQ3Qudj8iVFJVRSI6IkZBTFNFIikpO2JyZWFrO2Nhc2UiZCI6dmFyIFp0PVVlKEh0KEN0LnYpKTtkdFsyXT0idnRjIixkdFszXT0ibmQiLGR0WzRd'@;
put 'PSIiK1p0LGR0WzVdPUN0Lnd8fHcuZm9ybWF0KEN0Lnp8fHcuX3RhYmxlWzE0XSxadCk7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX1udC5wdXNoKGR0LmpvaW4oIjoiKSl9cmV0dXJuIG50LnB1c2goInNoZWV0OmM6IisoYnQuZS5jLWJ0LnMuYysxKSsiOnI6IisoYnQuZS5yLWJ0LnMucisxKSsi'@;
put 'OnR2ZjoxIiksbnQucHVzaCgidmFsdWVmb3JtYXQ6MTp0ZXh0LXdpa2kiKSxudC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiByZShHZSxudCl7cmV0dXJuIEVkKFEoR2UsbnQpLG50KX0sdG9fc2hlZXQ6USxmcm9tX3NoZWV0OmZ1bmN0aW9uIEJlKEdlKXtyZXR1cm5b'@;
put 'cGUsX2UsdmUsX2UsSGUoR2UpLFNlXS5qb2luKCJcbiIpfX19KCksQjE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KEJlLEdlLG50LGR0LEN0KXtDdC5yYXc/R2VbbnRdW2R0XT1CZToiIj09PUJlfHwoR2VbbnRdW2R0XT0kbihCZSxDdCk/JG4oQmUsQ3QpLnY6QmUpfXZhciBMPXs0NDoiLCIsOToi'@;
put 'XHQiLDU5OiI7In0sUT17NDQ6Myw5OjIsNTk6MX07ZnVuY3Rpb24gcmUoQmUpe2Zvcih2YXIgR2U9e30sbnQ9ITEsZHQ9MCxDdD0wO2R0PEJlLmxlbmd0aDsrK2R0KTM0PT0oQ3Q9QmUuY2hhckNvZGVBdChkdCkpP250PSFudDohbnQmJkN0IGluIEwmJihHZVtDdF09KEdlW0N0XXx8MCkrMSk7'@;
put 'Zm9yKGR0IGluIEN0PVtdLEdlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHZSxkdCkmJkN0LnB1c2goW0dlW2R0XSxkdF0pO2lmKCFDdC5sZW5ndGgpZm9yKGR0IGluIEdlPVEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdlLGR0KSYmQ3QucHVz'@;
put 'aChbR2VbZHRdLGR0XSk7cmV0dXJuIEN0LnNvcnQoZnVuY3Rpb24oY3QsYnQpe3JldHVybiBjdFswXS1idFswXXx8UVtjdFsxXV0tUVtidFsxXV19KSxMW0N0LnBvcCgpWzFdXX1mdW5jdGlvbiBfZShCZSxHZSl7cmV0dXJuIUdlfHwhR2UuUFJOfHwic2VwPSI9PUJlLnNsaWNlKDAsNCl8fEJl'@;
put 'LmluZGV4T2YoIlx0Iik+PTB8fEJlLmluZGV4T2YoIiwiKT49MHx8QmUuaW5kZXhPZigiOyIpPj0wP2Z1bmN0aW9uIHBlKEJlLEdlKXt2YXIgbnQ9R2V8fHt9LGR0PSIiO251bGwhPXRlJiZudWxsPT1udC5kZW5zZSYmKG50LmRlbnNlPXRlKTt2YXIgQ3Q9bnQuZGVuc2U/W106e30sY3Q9e3M6'@;
put 'e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTsic2VwPSI9PUJlLnNsaWNlKDAsNCk/MTM9PUJlLmNoYXJDb2RlQXQoNSkmJjEwPT1CZS5jaGFyQ29kZUF0KDYpPyhkdD1CZS5jaGFyQXQoNCksQmU9QmUuc2xpY2UoNykpOjEzPT1CZS5jaGFyQ29kZUF0KDUpfHwxMD09QmUuY2hhckNvZGVBdCg1KT8o'@;
put 'ZHQ9QmUuY2hhckF0KDQpLEJlPUJlLnNsaWNlKDYpKTpkdD1yZShCZS5zbGljZSgwLDEwMjQpKTpkdD1yZShCZS5zbGljZSgwLDEwMjQpKTt2YXIgYnQ9MCxGdD0wLEV0PTAsVHQ9MCxadD0wLHBuPWR0LmNoYXJDb2RlQXQoMCksS249ITEsdW49MCxxbj1CZS5jaGFyQ29kZUF0KDApO0JlPUJl'@;
put 'LnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7dmFyIHpuPW51bGwhPW50LmRhdGVORj9mdW5jdGlvbiB4ZSh5KXt2YXIgUD0ibnVtYmVyIj09dHlwZW9mIHk/dy5fdGFibGVbeV06eTtyZXR1cm4gUD1QLnJlcGxhY2UoZmUsIihcXGQrKSIpLG5ldyBSZWdFeHAoIl4iK1ArIiQiKX0obnQuZGF0ZU5G'@;
put 'KTpudWxsO2Z1bmN0aW9uIGtuKCl7dmFyIGVyPUJlLnNsaWNlKFR0LFp0KSx0cj17fTtpZignIic9PWVyLmNoYXJBdCgwKSYmJyInPT1lci5jaGFyQXQoZXIubGVuZ3RoLTEpJiYoZXI9ZXIuc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSwwPT09ZXIubGVuZ3RoKXRyLnQ9InoiO2Vs'@;
put 'c2UgaWYobnQucmF3KXRyLnQ9InMiLHRyLnY9ZXI7ZWxzZSBpZigwPT09ZXIudHJpbSgpLmxlbmd0aCl0ci50PSJzIix0ci52PWVyO2Vsc2UgaWYoNjE9PWVyLmNoYXJDb2RlQXQoMCkpMzQ9PWVyLmNoYXJDb2RlQXQoMSkmJjM0PT1lci5jaGFyQ29kZUF0KGVyLmxlbmd0aC0xKT8odHIudD0i'@;
put 'cyIsdHIudj1lci5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIFg5KHkpe3JldHVybiAxIT15Lmxlbmd0aH0oZXIpPyh0ci50PSJuIix0ci5mPWVyLnNsaWNlKDEpKToodHIudD0icyIsdHIudj1lcik7ZWxzZSBpZigiVFJVRSI9PWVyKXRyLnQ9ImIiLHRyLnY9ITA7'@;
put 'ZWxzZSBpZigiRkFMU0UiPT1lcil0ci50PSJiIix0ci52PSExO2Vsc2UgaWYoaXNOYU4oRXQ9V24oZXIpKSlpZighaXNOYU4oZW4oZXIpLmdldERhdGUoKSl8fHpuJiZlci5tYXRjaCh6bikpe3RyLno9bnQuZGF0ZU5GfHx3Ll90YWJsZVsxNF07dmFyIFpuPTA7em4mJmVyLm1hdGNoKHpuKSYm'@;
put 'KGVyPWZ1bmN0aW9uIExlKHksUCxMKXt2YXIgUT0tMSxyZT0tMSxwZT0tMSxfZT0tMSx2ZT0tMSxTZT0tMTsoUC5tYXRjaChmZSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEdlLG50KXt2YXIgZHQ9cGFyc2VJbnQoTFtudCsxXSwxMCk7c3dpdGNoKEdlLnRvTG93ZXJDYXNlKCkuY2hhckF0KDAp'@;
put 'KXtjYXNlInkiOlE9ZHQ7YnJlYWs7Y2FzZSJkIjpwZT1kdDticmVhaztjYXNlImgiOl9lPWR0O2JyZWFrO2Nhc2UicyI6U2U9ZHQ7YnJlYWs7Y2FzZSJtIjpfZT49MD92ZT1kdDpyZT1kdH19KSxTZT49MCYmLTE9PXZlJiZyZT49MCYmKHZlPXJlLHJlPS0xKTt2YXIgSGU9KCIiKyhRPj0wP1E6'@;
put 'KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIisocmU+PTE/cmU6MSkpLnNsaWNlKC0yKSsiLSIrKCIwMCIrKHBlPj0xP3BlOjEpKS5zbGljZSgtMik7Nz09SGUubGVuZ3RoJiYoSGU9IjAiK0hlKSw4PT1IZS5sZW5ndGgmJihIZT0iMjAiK0hlKTt2YXIgQmU9'@;
put 'KCIwMCIrKF9lPj0wP19lOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyh2ZT49MD92ZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoU2U+PTA/U2U6MCkpLnNsaWNlKC0yKTtyZXR1cm4tMT09X2UmJi0xPT12ZSYmLTE9PVNlP0hlOi0xPT1RJiYtMT09cmUmJi0xPT1wZT9CZTpIZSsiVCIrQmV9'@;
put 'KDAsbnQuZGF0ZU5GLGVyLm1hdGNoKHpuKXx8W10pLFpuPTEpLG50LmNlbGxEYXRlcz8odHIudD0iZCIsdHIudj1IdChlcixabikpOih0ci50PSJuIix0ci52PVVlKEh0KGVyLFpuKSkpLCExIT09bnQuY2VsbFRleHQmJih0ci53PXcuZm9ybWF0KHRyLnosdHIudiBpbnN0YW5jZW9mIERhdGU/'@;
put 'VWUodHIudik6dHIudikpLG50LmNlbGxORnx8ZGVsZXRlIHRyLnp9ZWxzZSB0ci50PSJzIix0ci52PWVyO2Vsc2UgdHIudD0ibiIsITEhPT1udC5jZWxsVGV4dCYmKHRyLnc9ZXIpLHRyLnY9RXQ7aWYoInoiPT10ci50fHwobnQuZGVuc2U/KEN0W2J0XXx8KEN0W2J0XT1bXSksQ3RbYnRdW0Z0'@;
put 'XT10cik6Q3RbZGkoe2M6RnQscjpidH0pXT10cikscW49QmUuY2hhckNvZGVBdChUdD1adCsxKSxjdC5lLmM8RnQmJihjdC5lLmM9RnQpLGN0LmUucjxidCYmKGN0LmUucj1idCksdW49PXBuKSsrRnQ7ZWxzZSBpZihGdD0wLCsrYnQsbnQuc2hlZXRSb3dzJiZudC5zaGVldFJvd3M8PWJ0KXJl'@;
put 'dHVybiEwfWU6Zm9yKDtadDxCZS5sZW5ndGg7KytadClzd2l0Y2godW49QmUuY2hhckNvZGVBdChadCkpe2Nhc2UgMzQ6MzQ9PT1xbiYmKEtuPSFLbik7YnJlYWs7Y2FzZSBwbjpjYXNlIDEwOmNhc2UgMTM6aWYoIUtuJiZrbigpKWJyZWFrIGV9cmV0dXJuIFp0LVR0PjAmJmtuKCksQ3RbIiFy'@;
put 'ZWYiXT1PbyhjdCksQ3R9KEJlLEdlKTprMShmdW5jdGlvbiBQKEJlLEdlKXt2YXIgbnQ9R2V8fHt9LGR0PVtdO2lmKCFCZXx8MD09PUJlLmxlbmd0aClyZXR1cm4gZHQ7Zm9yKHZhciBDdD1CZS5zcGxpdCgvW1xyXG5dLyksY3Q9Q3QubGVuZ3RoLTE7Y3Q+PTAmJjA9PT1DdFtjdF0ubGVuZ3Ro'@;
put 'OyktLWN0O2Zvcih2YXIgYnQ9MTAsRnQ9MCxFdD0wO0V0PD1jdDsrK0V0KS0xPT0oRnQ9Q3RbRXRdLmluZGV4T2YoIiAiKSk/RnQ9Q3RbRXRdLmxlbmd0aDpGdCsrLGJ0PU1hdGgubWF4KGJ0LEZ0KTtmb3IoRXQ9MDtFdDw9Y3Q7KytFdCl7ZHRbRXRdPVtdO3ZhciBUdD0wO2Zvcih5KEN0W0V0'@;
put 'XS5zbGljZSgwLGJ0KS50cmltKCksZHQsRXQsVHQsbnQpLFR0PTE7VHQ8PShDdFtFdF0ubGVuZ3RoLWJ0KS8xMCsxOysrVHQpeShDdFtFdF0uc2xpY2UoYnQrMTAqKFR0LTEpLGJ0KzEwKlR0KS50cmltKCksZHQsRXQsVHQsbnQpfXJldHVybiBudC5zaGVldFJvd3MmJihkdD1kdC5zbGljZSgw'@;
put 'LG50LnNoZWV0Um93cykpLGR0fShCZSxHZSksR2UpfWZ1bmN0aW9uIHZlKEJlLEdlKXt2YXIgbnQ9IiIsZHQ9InN0cmluZyI9PUdlLnR5cGU/WzAsMCwwLDBdOmZfKEJlLEdlKTtzd2l0Y2goR2UudHlwZSl7Y2FzZSJiYXNlNjQiOm50PXNlLmRlY29kZShCZSk7YnJlYWs7Y2FzZSJiaW5hcnki'@;
put 'OmNhc2Uic3RyaW5nIjpudD1CZTticmVhaztjYXNlImJ1ZmZlciI6bnQ9NjUwMDE9PUdlLmNvZGVwYWdlP0JlLnRvU3RyaW5nKCJ1dGY4Iik6R2UuY29kZXBhZ2UmJnR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZShHZS5jb2RlcGFnZSxCZSk6QmUudG9TdHJpbmcoImJp'@;
put 'bmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOm50PVB0KEJlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitHZS50eXBlKX1yZXR1cm4gMjM5PT1kdFswXSYmMTg3PT1kdFsxXSYmMTkxPT1kdFsyXT9udD1QaShudC5zbGljZSgzKSk6ImJpbmFyeSI9'@;
put 'PUdlLnR5cGUmJnR5cGVvZiBjcHRhYmxlPCJ1IiYmR2UuY29kZXBhZ2UmJihudD1jcHRhYmxlLnV0aWxzLmRlY29kZShHZS5jb2RlcGFnZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgyODU5MSxudCkpKSwic29jaWFsY2FsYzp2ZXJzaW9uOiI9PW50LnNsaWNlKDAsMTkpP080LnRvX3NoZWV0KCJz'@;
put 'dHJpbmciPT1HZS50eXBlP250OlBpKG50KSxHZSk6X2UobnQsR2UpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBTZShCZSxHZSl7cmV0dXJuIEVkKHZlKEJlLEdlKSxHZSl9LHRvX3NoZWV0OnZlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gSGUoQmUpe2Zvcih2YXIgZHQsR2U9W10sbnQ9T2ko'@;
put 'QmVbIiFyZWYiXSksQ3Q9QXJyYXkuaXNBcnJheShCZSksY3Q9bnQucy5yO2N0PD1udC5lLnI7KytjdCl7Zm9yKHZhciBidD1bXSxGdD1udC5zLmM7RnQ8PW50LmUuYzsrK0Z0KXt2YXIgRXQ9ZGkoe3I6Y3QsYzpGdH0pO2lmKChkdD1DdD8oQmVbY3RdfHxbXSlbRnRdOkJlW0V0XSkmJm51bGwh'@;
put 'PWR0LnYpe2Zvcih2YXIgVHQ9KGR0Lnd8fChjdShkdCksZHQudyl8fCIiKS5zbGljZSgwLDEwKTtUdC5sZW5ndGg8MTA7KVR0Kz0iICI7YnQucHVzaChUdCsoMD09PUZ0PyIgIjoiIikpfWVsc2UgYnQucHVzaCgiICAgICAgICAgICIpfUdlLnB1c2goYnQuam9pbigiIikpfXJldHVybiBHZS5q'@;
put 'b2luKCJcbiIpfX19KCksVG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KEFuLHZyLHJyKXtpZihBbil7b2woQW4sQW4ubHx8MCk7Zm9yKHZhciBTbj1yci5FbnVtfHxRcjtBbi5sPEFuLmxlbmd0aDspe3ZhciBwcj1Bbi5yZWFkX3NoaWZ0KDIpLENpPVNuW3ByXXx8U25bNjU1MzVdLGpyPUFuLnJl'@;
put 'YWRfc2hpZnQoMiksamk9QW4ubCtqcixfbz1DaS5mJiZDaS5mKEFuLGpyLHJyKTtpZihBbi5sPWppLHZyKF9vLENpLHByKSlyZXR1cm59fX1mdW5jdGlvbiBMKEFuLHZyKXtpZighQW4pcmV0dXJuIEFuO3ZhciBycj12cnx8e307bnVsbCE9dGUmJm51bGw9PXJyLmRlbnNlJiYocnIuZGVuc2U9'@;
put 'dGUpO3ZhciBTbj1yci5kZW5zZT9bXTp7fSxwcj0iU2hlZXQxIixDaT0wLGpyPXt9LGppPVtwcl0sX289W10sRGk9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxZbz1yci5zaGVldFJvd3N8fDA7aWYoMj09QW5bMl0pcnIuRW51bT1Rcix5KEFuLGZ1bmN0aW9uKGhpLHRhLE1uKXtzd2l0Y2go'@;
put 'TW4pe2Nhc2UgMDpyci52ZXJzPWhpLGhpPj00MDk2JiYocnIucXBybz0hMCk7YnJlYWs7Y2FzZSA2OkRpPWhpO2JyZWFrO2Nhc2UgMTU6Y2FzZSA1MTpyci5xcHJvfHwoaGlbMV0udj1oaVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09TW4mJjExMj09KDExMiZo'@;
put 'aVsyXSkmJigxNSZoaVsyXSk+MSYmKDE1JmhpWzJdKTwxNSYmKGhpWzFdLno9cnIuZGF0ZU5GfHx3Ll90YWJsZVsxNF0scnIuY2VsbERhdGVzJiYoaGlbMV0udD0iZCIsaGlbMV0udj1odChoaVsxXS52KSkpO3ZhciBNcz1yci5kZW5zZT8oU25baGlbMF0ucl18fFtdKVtoaVswXS5jXTpTbltk'@;
put 'aShoaVswXSldO2lmKE1zKXtNcy50PWhpWzFdLnQsTXMudj1oaVsxXS52LG51bGwhPWhpWzFdLnomJihNcy56PWhpWzFdLnopLG51bGwhPWhpWzFdLmYmJihNcy5mPWhpWzFdLmYpO2JyZWFrfXJyLmRlbnNlPyhTbltoaVswXS5yXXx8KFNuW2hpWzBdLnJdPVtdKSxTbltoaVswXS5yXVtoaVsw'@;
put 'XS5jXT1oaVsxXSk6U25bZGkoaGlbMF0pXT1oaVsxXX19LHJyKTtlbHNle2lmKDI2IT1BblsyXSYmMTQhPUFuWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK0FuWzJdKTtyci5FbnVtPXVyLDE0PT1BblsyXSYmKHJyLnFwcm89ITAsQW4ubD0wKSx5KEFuLGZ1'@;
put 'bmN0aW9uKGhpLHRhLE1uKXtzd2l0Y2goTW4pe2Nhc2UgMjI6aGlbMV0udj1oaVsxXS52LnNsaWNlKDEpO2Nhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKGhpWzNdPkNpJiYoU25bIiFyZWYiXT1PbyhEaSksanJbcHJdPVNuLFNuPXJyLmRlbnNlP1td'@;
put 'Ont9LERpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0samkucHVzaChwcj0iU2hlZXQiKygoQ2k9aGlbM10pKzEpKSksWW8+MCYmaGlbMF0ucj49WW8pYnJlYWs7cnIuZGVuc2U/KFNuW2hpWzBdLnJdfHwoU25baGlbMF0ucl09W10pLFNuW2hpWzBdLnJdW2hpWzBdLmNdPWhpWzFdKTpTbltk'@;
put 'aShoaVswXSldPWhpWzFdLERpLmUuYzxoaVswXS5jJiYoRGkuZS5jPWhpWzBdLmMpLERpLmUucjxoaVswXS5yJiYoRGkuZS5yPWhpWzBdLnIpO2JyZWFrO2Nhc2UgMjc6aGlbMTRlM10mJihfb1toaVsxNGUzXVswXV09aGlbMTRlM11bMV0pfX0scnIpfWlmKFNuWyIhcmVmIl09T28oRGkpLGpy'@;
put 'W3ByXT1TbiwhX28ubGVuZ3RoKXJldHVybntTaGVldE5hbWVzOmppLFNoZWV0czpqcn07Zm9yKHZhciBsbz17fSxBbz1bXSx4bz0wO3hvPF9vLmxlbmd0aDsrK3hvKWpyW2ppW3hvXV0mJihBby5wdXNoKF9vW3hvXSksbG9bX29beG9dXT1qcltqaVt4b11dKTtyZXR1cm57U2hlZXROYW1lczpB'@;
put 'byxTaGVldHM6bG99fWZ1bmN0aW9uIEhlKEFuLHZyLHJyKXt2YXIgU249W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gcnIucXBybyYmMjA3NjghPXJyLnZlcnM/KFNuWzBdLmM9QW4ucmVhZF9zaGlmdCgxKSxBbi5sKyssU25bMF0ucj1Bbi5yZWFkX3NoaWZ0KDIpLEFuLmwrPTIp'@;
put 'OihTblsyXT1Bbi5yZWFkX3NoaWZ0KDEpLFNuWzBdLmM9QW4ucmVhZF9zaGlmdCgyKSxTblswXS5yPUFuLnJlYWRfc2hpZnQoMikpLFNufWZ1bmN0aW9uIEJlKEFuLHZyLHJyKXt2YXIgU249QW4ubCt2cixwcj1IZShBbiwwLHJyKTtpZihwclsxXS50PSJzIiwyMDc2OD09cnIudmVycyl7QW4u'@;
put 'bCsrO3ZhciBDaT1Bbi5yZWFkX3NoaWZ0KDEpO3JldHVybiBwclsxXS52PUFuLnJlYWRfc2hpZnQoQ2ksInV0ZjgiKSxwcn1yZXR1cm4gcnIucXBybyYmQW4ubCsrLHByWzFdLnY9QW4ucmVhZF9zaGlmdChTbi1Bbi5sLCJjc3RyIikscHJ9ZnVuY3Rpb24gR2UoQW4sdnIscnIpe3ZhciBTbj1m'@;
put 'cig3K3JyLmxlbmd0aCk7U24ud3JpdGVfc2hpZnQoMSwyNTUpLFNuLndyaXRlX3NoaWZ0KDIsdnIpLFNuLndyaXRlX3NoaWZ0KDIsQW4pLFNuLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgcHI9MDtwcjxTbi5sZW5ndGg7Kytwcil7dmFyIENpPXJyLmNoYXJDb2RlQXQocHIpO1NuLndyaXRl'@;
put 'X3NoaWZ0KDEsQ2k+PTEyOD85NTpDaSl9cmV0dXJuIFNuLndyaXRlX3NoaWZ0KDEsMCksU259ZnVuY3Rpb24gZHQoQW4sdnIscnIpe3ZhciBTbj1mcig3KTtyZXR1cm4gU24ud3JpdGVfc2hpZnQoMSwyNTUpLFNuLndyaXRlX3NoaWZ0KDIsdnIpLFNuLndyaXRlX3NoaWZ0KDIsQW4pLFNuLndy'@;
put 'aXRlX3NoaWZ0KDIscnIsImkiKSxTbn1mdW5jdGlvbiBjdChBbix2cixycil7dmFyIFNuPWZyKDEzKTtyZXR1cm4gU24ud3JpdGVfc2hpZnQoMSwyNTUpLFNuLndyaXRlX3NoaWZ0KDIsdnIpLFNuLndyaXRlX3NoaWZ0KDIsQW4pLFNuLndyaXRlX3NoaWZ0KDgscnIsImYiKSxTbn1mdW5jdGlv'@;
put 'biBGdChBbix2cixycil7dmFyIFNuPTMyNzY4JnZyO3JldHVybiB2cj0oU24/QW46MCkrKCh2ciY9LTMyNzY5KT49ODE5Mj92ci0xNjM4NDp2ciksKFNuPyIiOiIkIikrKHJyP05zKHZyKTpIcyh2cikpfXZhciBUdD17NTE6WyJGQUxTRSIsMF0sNTI6WyJUUlVFIiwwXSw3MDpbIkxFTiIsMV0s'@;
put 'ODA6WyJTVU0iLDY5XSw4MTpbIkFWRVJBR0VBIiw2OV0sODI6WyJDT1VOVEEiLDY5XSw4MzpbIk1JTkEiLDY5XSw4NDpbIk1BWEEiLDY5XSwxMTE6WyJUIiwxXX0sWnQ9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIrIiwiLSIsIioiLCIvIiwiXiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8'@;
put 'IiwiPiIsIiIsIiIsIiIsIiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtmdW5jdGlvbiBLbihBbil7dmFyIHZyPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIHZyWzBdLnI9QW4ucmVhZF9zaGlmdCgyKSx2clszXT1BbltBbi5sKytdLHZyWzBdLmM9QW5bQW4ubCsrXSx2cn1m'@;
put 'dW5jdGlvbiBxbihBbix2cixycixTbil7dmFyIHByPWZyKDYrU24ubGVuZ3RoKTtwci53cml0ZV9zaGlmdCgyLEFuKSxwci53cml0ZV9zaGlmdCgxLHJyKSxwci53cml0ZV9zaGlmdCgxLHZyKSxwci53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIENpPTA7Q2k8U24ubGVuZ3RoOysrQ2kpe3Zh'@;
put 'ciBqcj1Tbi5jaGFyQ29kZUF0KENpKTtwci53cml0ZV9zaGlmdCgxLGpyPj0xMjg/OTU6anIpfXJldHVybiBwci53cml0ZV9zaGlmdCgxLDApLHByfWZ1bmN0aW9uIGtuKEFuLHZyKXt2YXIgcnI9S24oQW4pLFNuPUFuLnJlYWRfc2hpZnQoNCkscHI9QW4ucmVhZF9zaGlmdCg0KSxDaT1Bbi5y'@;
put 'ZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1DaSlyZXR1cm4gMD09PVNuJiYzMjIxMjI1NDcyPT09cHI/KHJyWzFdLnQ9ImUiLHJyWzFdLnY9MTUpOjA9PT1TbiYmMzQ4OTY2MDkyOD09PXByPyhyclsxXS50PSJlIixyclsxXS52PTQyKTpyclsxXS52PTAscnI7dmFyIGpyPTMyNzY4JkNpO3JldHVy'@;
put 'biBDaT0oMzI3NjcmQ2kpLTE2NDQ2LHJyWzFdLnY9KDEtMipqcikqKHByKk1hdGgucG93KDIsQ2krMzIpK1NuKk1hdGgucG93KDIsQ2kpKSxycn1mdW5jdGlvbiBlcihBbix2cixycixTbil7dmFyIHByPWZyKDE0KTtpZihwci53cml0ZV9zaGlmdCgyLEFuKSxwci53cml0ZV9zaGlmdCgxLHJy'@;
put 'KSxwci53cml0ZV9zaGlmdCgxLHZyKSwwPT1TbilyZXR1cm4gcHIud3JpdGVfc2hpZnQoNCwwKSxwci53cml0ZV9zaGlmdCg0LDApLHByLndyaXRlX3NoaWZ0KDIsNjU1MzUpLHByO3ZhciBDaT0wLGpyPTAsX289MDtyZXR1cm4gU248MCYmKENpPTEsU249LVNuKSxqcj0wfE1hdGgubG9nMihT'@;
put 'biksMjE0NzQ4MzY0OCYoX289KFNuLz1NYXRoLnBvdygyLGpyLTMxKSk+Pj4wKXx8KCsranIsX289KFNuLz0yKT4+PjApLFNuLT1fbyxfb3w9MjE0NzQ4MzY0OCxfbz4+Pj0wLFNuKj1NYXRoLnBvdygyLDMyKSxwci53cml0ZV9zaGlmdCg0LFNuPj4+MCkscHIud3JpdGVfc2hpZnQoNCxfbyks'@;
put 'cHIud3JpdGVfc2hpZnQoMixqcis9MTYzODMrKENpPzMyNzY4OjApKSxwcn1mdW5jdGlvbiBWcihBbix2cil7dmFyIHJyPUtuKEFuKSxTbj1Bbi5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gcnJbMV0udj1Tbixycn1mdW5jdGlvbiBMaShBbix2cil7dmFyIHJyPWZyKDUrQW4ubGVuZ3RoKTty'@;
put 'ci53cml0ZV9zaGlmdCgyLDE0ZTMpLHJyLndyaXRlX3NoaWZ0KDIsdnIpO2Zvcih2YXIgU249MDtTbjxBbi5sZW5ndGg7KytTbil7dmFyIHByPUFuLmNoYXJDb2RlQXQoU24pO3JyW3JyLmwrK109cHI+MTI3Pzk1OnByfXJldHVybiBycltyci5sKytdPTAscnJ9dmFyIFFyPXswOntuOiJCT0Yi'@;
put 'LGY6aGx9LDE6e246IkVPRiJ9LDI6e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gdmUoQW4pe3ZhciB2cj17czp7YzowLHI6MH0sZTp7YzowLHI6MH19O3JldHVybiB2ci5zLmM9QW4ucmVh'@;
put 'ZF9zaGlmdCgyKSx2ci5zLnI9QW4ucmVhZF9zaGlmdCgyKSx2ci5lLmM9QW4ucmVhZF9zaGlmdCgyKSx2ci5lLnI9QW4ucmVhZF9zaGlmdCgyKSw2NTUzNT09dnIucy5jJiYodnIucy5jPXZyLmUuYz12ci5zLnI9dnIuZS5yPTApLHZyfX0sNzp7bjoiV0lORE9XMSJ9LDg6e246IkNPTFcxIn0s'@;
put 'OTp7bjoiV0lOVFdPIn0sMTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUifSwxMjp7bjoiQkxBTksifSwxMzp7bjoiSU5URUdFUiIsZjpmdW5jdGlvbiBudChBbix2cixycil7dmFyIFNuPUhlKEFuLDAscnIpO3JldHVybiBTblsxXS52PUFuLnJlYWRfc2hpZnQoMiwiaSIpLFNufX0sMTQ6e246'@;
put 'Ik5VTUJFUiIsZjpmdW5jdGlvbiBDdChBbix2cixycil7dmFyIFNuPUhlKEFuLDAscnIpO3JldHVybiBTblsxXS52PUFuLnJlYWRfc2hpZnQoOCwiZiIpLFNufX0sMTU6e246IkxBQkVMIixmOkJlfSwxNjp7bjoiRk9STVVMQSIsZjpmdW5jdGlvbiBidChBbix2cixycil7dmFyIFNuPUFuLmwr'@;
put 'dnIscHI9SGUoQW4sMCxycik7aWYocHJbMV0udj1Bbi5yZWFkX3NoaWZ0KDgsImYiKSxyci5xcHJvKUFuLmw9U247ZWxzZXt2YXIgQ2k9QW4ucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gcG4oQW4sdnIpe29sKEFuLDApO2Zvcih2YXIgcnI9W10sU249MCxwcj0iIixDaT0iIjtBbi5sPEFuLmxl'@;
put 'bmd0aDspe3ZhciBqcj1BbltBbi5sKytdO3N3aXRjaChqcil7Y2FzZSAwOnJyLnB1c2goQW4ucmVhZF9zaGlmdCg4LCJmIikpO2JyZWFrO2Nhc2UgMTpDaT1GdCh2clswXS5jLEFuLnJlYWRfc2hpZnQoMiksITApLHByPUZ0KHZyWzBdLnIsQW4ucmVhZF9zaGlmdCgyKSwhMSkscnIucHVzaChD'@;
put 'aStwcik7YnJlYWs7Y2FzZSAyOnZhciBqaT1GdCh2clswXS5jLEFuLnJlYWRfc2hpZnQoMiksITApLF9vPUZ0KHZyWzBdLnIsQW4ucmVhZF9zaGlmdCgyKSwhMSk7Q2k9RnQodnJbMF0uYyxBbi5yZWFkX3NoaWZ0KDIpLCEwKSxwcj1GdCh2clswXS5yLEFuLnJlYWRfc2hpZnQoMiksITEpLHJy'@;
put 'LnB1c2goamkrX28rIjoiK0NpK3ByKTticmVhaztjYXNlIDM6aWYoQW4ubDxBbi5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVuZCIpO2JyZWFrO2Nhc2UgNDpyci5wdXNoKCIoIityci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgNTpyci5w'@;
put 'dXNoKEFuLnJlYWRfc2hpZnQoMikpO2JyZWFrO2Nhc2UgNjpmb3IodmFyIERpPSIiO2pyPUFuW0FuLmwrK107KURpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGpyKTtyci5wdXNoKCciJytEaS5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6cnIucHVzaCgiLSIrcnIucG9wKCkp'@;
put 'O2JyZWFrO2Nhc2UgMjM6cnIucHVzaCgiKyIrcnIucG9wKCkpO2JyZWFrO2Nhc2UgMjI6cnIucHVzaCgiTk9UKCIrcnIucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6dmFyIFlvPXJyLnBvcCgpLGxvPXJyLnBvcCgpO3JyLnB1c2goWyJBTkQiLCJPUiJdW2pyLTIwXSsiKCIrbG8r'@;
put 'IiwiK1lvKyIpIik7YnJlYWs7ZGVmYXVsdDppZihqcjwzMiYmWnRbanJdKVlvPXJyLnBvcCgpLGxvPXJyLnBvcCgpLHJyLnB1c2gobG8rWnRbanJdK1lvKTtlbHNle2lmKCFUdFtqcl0pcmV0dXJuIGpyPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK2pyLnRvU3RyaW5n'@;
put 'KDE2KSk6anI8PTI0P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBvcCAiK2pyLnRvU3RyaW5nKDE2KSk6anI8PTMwP2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK2pyLnRvU3RyaW5nKDE2KSk6anI8PTExNT9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQg'@;
put 'ZnVuY3Rpb24gb3Bjb2RlICIranIudG9TdHJpbmcoMTYpKTpjb25zb2xlLmVycm9yKCJXSzEgdW5yZWNvZ25pemVkIG9wY29kZSAiK2pyLnRvU3RyaW5nKDE2KSk7aWYoNjk9PShTbj1UdFtqcl1bMV0pJiYoU249QW5bQW4ubCsrXSksU24+cnIubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUu'@;
put 'ZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSAweCIranIudG9TdHJpbmcoMTYpKyI6fCIrcnIuam9pbigifCIpKyJ8Iik7dmFyIEFvPXJyLnNsaWNlKC1Tbik7cnIubGVuZ3RoLT1Tbixyci5wdXNoKFR0W2pyXVswXSsiKCIrQW8uam9pbigiLCIpKyIpIil9fX0xPT1yci5sZW5ndGg/dnJb'@;
put 'MV0uZj0iIityclswXTpjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgfCIrcnIuam9pbigifCIpKyJ8Iil9KShBbi5zbGljZShBbi5sLEFuLmwrQ2kpLHByKSxBbi5sKz1DaX1yZXR1cm4gcHJ9fSwyNDp7bjoiVEFCTEUifSwyNTp7bjoiT1JBTkdFIn0sMjY6e246IlBSQU5H'@;
put 'RSJ9LDI3OntuOiJTUkFOR0UifSwyODp7bjoiRlJBTkdFIn0sMjk6e246IktSQU5HRTEifSwzMjp7bjoiSFJBTkdFIn0sMzU6e246IktSQU5HRTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4OntuOiJIRUFERVIifSwzOTp7bjoiU0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9'@;
put 'LDQxOntuOiJMQUJFTEZNVCJ9LDQyOntuOiJUSVRMRVMifSw0Mzp7bjoiU0hFRVRKUyJ9LDQ1OntuOiJHUkFQSCJ9LDQ2OntuOiJOR1JBUEgifSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0sNDk6e246IkNVUlNPUlcxMiJ9LDUwOntuOiJXSU5ET1cifSw1MTp7bjoi'@;
put 'U1RSSU5HIixmOkJlfSw1NTp7bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0s'@;
put 'Njc6e246IlNZTVNQTElUIn0sNjg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9'@;
put 'LDEwNDp7bjoiRk5BTUU/PyJ9LDEwNTp7bjoiTVJBTkdFUz8/In0sNjU1MzU6e246IiJ9fSx1cj17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRM'@;
put 'QVlPVVQifSw3OntuOiJDT0xVTU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMi'@;
put 'fSwxNTp7bjoiUFJJTlRNQUlOIn0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIHVuKEFuLHZyKXt2'@;
put 'YXIgcnI9S24oQW4pO3JldHVybiByclsxXS50PSJzIixyclsxXS52PUFuLnJlYWRfc2hpZnQodnItNCwiY3N0ciIpLHJyfX0sMjM6e246Ik5VTUJFUjE3IixmOmtufSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gem4oQW4sdnIpe3ZhciBycj1LbihBbik7cnJbMV0udj1Bbi5yZWFkX3No'@;
put 'aWZ0KDIpO3ZhciBTbj1yclsxXS52Pj4xO2lmKDEmcnJbMV0udilzd2l0Y2goNyZTbil7Y2FzZSAwOlNuPTVlMyooU24+PjMpO2JyZWFrO2Nhc2UgMTpTbj01MDAqKFNuPj4zKTticmVhaztjYXNlIDI6U249KFNuPj4zKS8yMDticmVhaztjYXNlIDM6U249KFNuPj4zKS8yMDA7YnJlYWs7Y2Fz'@;
put 'ZSA0OlNuPShTbj4+MykvMmUzO2JyZWFrO2Nhc2UgNTpTbj0oU24+PjMpLzJlNDticmVhaztjYXNlIDY6U249KFNuPj4zKS8xNjticmVhaztjYXNlIDc6U249KFNuPj4zKS82NH1yZXR1cm4gcnJbMV0udj1Tbixycn19LDI1OntuOiJGT1JNVUxBMTkiLGY6ZnVuY3Rpb24gdHIoQW4sdnIpe3Zh'@;
put 'ciBycj1rbihBbik7cmV0dXJuIEFuLmwrPXZyLTE0LHJyfX0sMjY6e246IkZPUk1VTEExQSJ9LDI3OntuOiJYRk9STUFUIixmOmZ1bmN0aW9uIGtpKEFuLHZyKXtmb3IodmFyIHJyPXt9LFNuPUFuLmwrdnI7QW4ubDxTbjspe3ZhciBwcj1Bbi5yZWFkX3NoaWZ0KDIpO2lmKDE0ZTM9PXByKXtm'@;
put 'b3IocnJbcHJdPVswLCIiXSxycltwcl1bMF09QW4ucmVhZF9zaGlmdCgyKTtBbltBbi5sXTspcnJbcHJdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEFuW0FuLmxdKSxBbi5sKys7QW4ubCsrfX1yZXR1cm4gcnJ9fSwyODp7bjoiRFRMQUJFTE1JU0MifSwyOTp7bjoiRFRMQUJFTENFTEwifSwz'@;
put 'MDp7bjoiR1JBUEhXSU5ET1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFVVE8ifSwzMzp7bjoiUVVFUlkifSwzNDp7bjoiSElEREVOU0hFRVQifSwzNTp7bjoiPz8ifSwzNzp7bjoiTlVNQkVSMjUiLGY6ZnVuY3Rpb24gWm4oQW4sdnIpe3ZhciBycj1LbihBbiksU249QW4ucmVhZF9zaGlm'@;
put 'dCg0KTtyZXR1cm4gcnJbMV0udj1Tbj4+Nixycn19LDM4OntuOiI/PyJ9LDM5OntuOiJOVU1CRVIyNyIsZjpWcn0sNDA6e246IkZPUk1VTEEyOCIsZjpmdW5jdGlvbiBvaShBbix2cil7dmFyIHJyPVZyKEFuKTtyZXR1cm4gQW4ubCs9dnItMTAscnJ9fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/'@;
put 'PyJ9LDE1MDp7bjoiPz8ifSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1Mzp7bjoiPz8ifSwxNTQ6e246Ij8/In0sMTU1OntuOiI/PyJ9LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3NTp7bjoiPz8ifSwxNzY6e246Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7'@;
put 'bjoiPz8ifSwxODU6e246Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8ifSwxODg6e246Ij8/In0sMTk1OntuOiI/PyJ9LDIwMTp7bjoiPz8ifSwyMDU6e246Ij8/In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8ifSwyMDg6e246Ij8/In0sMjU2OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwy'@;
put 'NjA6e246Ij8/In0sMjYxOntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246Ij8/In0sMjY1OntuOiI/PyJ9LDI2Njp7bjoiPz8ifSwyNjc6e246Ij8/In0sMjY4OntuOiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246Ij8/In0sMzg0OntuOiI/PyJ9LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/'@;
put 'In0sMzkzOntuOiI/PyJ9LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0OntuOiI/PyJ9LDUxMzp7bjoiPz8ifSw1MTY6e246Ij8/In0sNTE3OntuOiI/PyJ9LDY0MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQyOntuOiI/PyJ9LDY0Mzp7bjoiPz8ifSw2NDQ6e246Ij8/In0sNjQ1Ontu'@;
put 'OiI/PyJ9LDY0Njp7bjoiPz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9LDY1ODp7bjoiPz8ifSw2NTk6e246Ij8/In0sNjYwOntuOiI/PyJ9LDY2MTp7bjoiPz8ifSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9LDY2Njp7bjoiPz8ifSw3Njg6e246Ij8/In0sNzcyOntuOiI/PyJ9LDE2'@;
put 'MDA6e246Ij8/In0sMTYwMjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6e246Ij8/In0sMTc5NTp7bjoiPz8ifSwxNzk2OntuOiI/PyJ9LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5OntuOiI/PyJ9LDIwNTI6e246Ij8/In0sMjY4ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8i'@;
put 'fSwxMjg0OTp7bjoiPz8ifSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8ifSw2NTUzNTp7bjoiIn19O3JldHVybntzaGVldF90b193azE6ZnVuY3Rpb24gUShBbix2cil7dmFyIHJyPXZyfHx7fTtpZigrcnIuY29kZXBhZ2U+PTAmJmooK3JyLmNvZGVwYWdlKSwic3RyaW5nIj09cnIudHlw'@;
put 'ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzEgdG8gSlMgc3RyaW5nIik7dmFyIFNuPXljKCkscHI9T2koQW5bIiFyZWYiXSksQ2k9QXJyYXkuaXNBcnJheShBbiksanI9W107U2koU24sMCxmdW5jdGlvbiBwZShBbil7dmFyIHZyPWZyKDIpO3JldHVybiB2ci53cml0ZV9zaGlm'@;
put 'dCgyLEFuKSx2cn0oMTAzMCkpLFNpKFNuLDYsZnVuY3Rpb24gU2UoQW4pe3ZhciB2cj1mcig4KTtyZXR1cm4gdnIud3JpdGVfc2hpZnQoMixBbi5zLmMpLHZyLndyaXRlX3NoaWZ0KDIsQW4ucy5yKSx2ci53cml0ZV9zaGlmdCgyLEFuLmUuYyksdnIud3JpdGVfc2hpZnQoMixBbi5lLnIpLHZy'@;
put 'fShwcikpO2Zvcih2YXIgamk9cHIucy5yO2ppPD1wci5lLnI7KytqaSlmb3IodmFyIF9vPUhzKGppKSxEaT1wci5zLmM7RGk8PXByLmUuYzsrK0RpKXtqaT09PXByLnMuciYmKGpyW0RpXT1OcyhEaSkpO3ZhciBsbz1DaT8oQW5bamldfHxbXSlbRGldOkFuW2pyW0RpXStfb107bG8mJiJ6IiE9'@;
put 'bG8udCYmKCJuIj09bG8udD8oMHxsby52KT09bG8udiYmbG8udj49LTMyNzY4JiZsby52PD0zMjc2Nz9TaShTbiwxMyxkdChqaSxEaSxsby52KSk6U2koU24sMTQsY3QoamksRGksbG8udikpOlNpKFNuLDE1LEdlKGppLERpLGN1KGxvKS5zbGljZSgwLDIzOSkpKSl9cmV0dXJuIFNpKFNuLDEp'@;
put 'LFNuLmVuZCgpfSxib29rX3RvX3drMzpmdW5jdGlvbiByZShBbix2cil7dmFyIHJyPXZyfHx7fTtpZigrcnIuY29kZXBhZ2U+PTAmJmooK3JyLmNvZGVwYWdlKSwic3RyaW5nIj09cnIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzMgdG8gSlMgc3RyaW5nIik7dmFyIFNu'@;
put 'PXljKCk7U2koU24sMCxmdW5jdGlvbiBfZShBbil7dmFyIHZyPWZyKDI2KTt2ci53cml0ZV9zaGlmdCgyLDQwOTYpLHZyLndyaXRlX3NoaWZ0KDIsNCksdnIud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIHJyPTAsU249MCxwcj0wLENpPTA7Q2k8QW4uU2hlZXROYW1lcy5sZW5ndGg7KytDaSl7'@;
put 'dmFyIGppPUFuLlNoZWV0c1tBbi5TaGVldE5hbWVzW0NpXV07aWYoamkmJmppWyIhcmVmIl0peysrcHI7dmFyIF9vPVdzKGppWyIhcmVmIl0pO3JyPF9vLmUuciYmKHJyPV9vLmUuciksU248X28uZS5jJiYoU249X28uZS5jKX19cmV0dXJuIHZyLndyaXRlX3NoaWZ0KDIscnIpLHZyLndyaXRl'@;
put 'X3NoaWZ0KDEscHIpLHZyLndyaXRlX3NoaWZ0KDEsU24pLHZyLndyaXRlX3NoaWZ0KDIsMCksdnIud3JpdGVfc2hpZnQoMiwwKSx2ci53cml0ZV9zaGlmdCgxLDEpLHZyLndyaXRlX3NoaWZ0KDEsMiksdnIud3JpdGVfc2hpZnQoNCwwKSx2ci53cml0ZV9zaGlmdCg0LDApLHZyfShBbikpO2Zv'@;
put 'cih2YXIgcHI9MCxDaT0wO3ByPEFuLlNoZWV0TmFtZXMubGVuZ3RoOysrcHIpKEFuLlNoZWV0c1tBbi5TaGVldE5hbWVzW3ByXV18fHt9KVsiIXJlZiJdJiZTaShTbiwyNyxMaShBbi5TaGVldE5hbWVzW3ByXSxDaSsrKSk7dmFyIGpyPTA7Zm9yKHByPTA7cHI8QW4uU2hlZXROYW1lcy5sZW5n'@;
put 'dGg7Kytwcil7dmFyIGppPUFuLlNoZWV0c1tBbi5TaGVldE5hbWVzW3ByXV07aWYoamkmJmppWyIhcmVmIl0pe2Zvcih2YXIgX289T2koamlbIiFyZWYiXSksRGk9QXJyYXkuaXNBcnJheShqaSksWW89W10sbG89X28ucy5yO2xvPD1fby5lLnI7Kytsbylmb3IodmFyIEFvPUhzKGxvKSx4bz1f'@;
put 'by5zLmM7eG88PV9vLmUuYzsrK3hvKXtsbz09PV9vLnMuciYmKFlvW3hvXT1Ocyh4bykpO3ZhciB0YT1EaT8oamlbbG9dfHxbXSlbeG9dOmppW1lvW3hvXStBb107dGEmJiJ6IiE9dGEudCYmKCJuIj09dGEudD9TaShTbiwyMyxlcihsbyx4byxqcix0YS52KSk6U2koU24sMjIscW4obG8seG8s'@;
put 'anIsY3UodGEpLnNsaWNlKDAsMjM5KSkpKX0rK2pyfX1yZXR1cm4gU2koU24sMSksU24uZW5kKCl9LHRvX3dvcmtib29rOmZ1bmN0aW9uIFAoQW4sdnIpe3N3aXRjaCh2ci50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIEwoRChzZS5kZWNvZGUoQW4pKSx2cik7Y2FzZSJiaW5hcnkiOnJldHVy'@;
put 'biBMKEQoQW4pLHZyKTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuIEwoQW4sdnIpfXRocm93IlVuc3VwcG9ydGVkIHR5cGUgIit2ci50eXBlfX19KCksRG09ZnVuY3Rpb24oKXt2YXIgeT11bCgidCIpLFA9dWwoInJQciIpO2Z1bmN0aW9uIEwocGUpe3ZhciBfZT1wZS5tYXRjaCh5'@;
put 'KTtpZighX2UpcmV0dXJue3Q6InMiLHY6IiJ9O3ZhciB2ZT17dDoicyIsdjp4cihfZVsxXSl9LFNlPXBlLm1hdGNoKFApO3JldHVybiBTZSYmKHZlLnM9ZnVuY3Rpb24gSncoeSl7dmFyIFA9e30sTD15Lm1hdGNoKCR0KSxRPTAscmU9ITE7aWYoTClmb3IoO1EhPUwubGVuZ3RoOysrUSl7dmFy'@;
put 'IHBlPWxuKExbUV0pO3N3aXRjaChwZVswXS5yZXBsYWNlKC9cdyo6L2csIiIpKXtjYXNlIjxjb25kZW5zZSI6Y2FzZSI8ZXh0ZW5kIjpicmVhaztjYXNlIjxzaGFkb3ciOmlmKCFwZS52YWwpYnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hhZG93Lz4iOlAuc2hhZG93PTE7YnJlYWs7Y2Fz'@;
put 'ZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09cGUudmFsKWJyZWFrO1AuY3A9SVtwYXJzZUludChwZS52YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighcGUudmFsKWJyZWFrO2Nhc2UiPG91dGxpbmU+IjpjYXNlIjxvdXRsaW5lLz4iOlAub3V0bGluZT0x'@;
put 'O2JyZWFrO2Nhc2UiPC9vdXRsaW5lPiI6YnJlYWs7Y2FzZSI8ckZvbnQiOlAubmFtZT1wZS52YWw7YnJlYWs7Y2FzZSI8c3oiOlAuc3o9cGUudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIXBlLnZhbClicmVhaztjYXNlIjxzdHJpa2U+IjpjYXNlIjxzdHJpa2UvPiI6UC5zdHJpa2U9MTti'@;
put 'cmVhaztjYXNlIjwvc3RyaWtlPiI6YnJlYWs7Y2FzZSI8dSI6aWYoIXBlLnZhbClicmVhaztzd2l0Y2gocGUudmFsKXtjYXNlImRvdWJsZSI6UC51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOlAudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGlu'@;
put 'ZyI6UC51bmRlcmxpbmU9MzR9Y2FzZSI8dT4iOmNhc2UiPHUvPiI6UC51bmRlcmxpbmV8fChQLnVuZGVybGluZT0xKTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09cGUudmFsKWJyZWFrO2Nhc2UiPGI+IjpjYXNlIjxiLz4iOlAuYm9sZD0xO2JyZWFrO2Nhc2UiPC9i'@;
put 'PiI6YnJlYWs7Y2FzZSI8aSI6aWYoIjAiPT1wZS52YWwpYnJlYWs7Y2FzZSI8aT4iOmNhc2UiPGkvPiI6UC5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpwZS5yZ2ImJihQLmNvbG9yPXtyZ2I6OD09cGUucmdiLmxlbmd0aD9wZS5yZ2Iuc2xpY2UoMiw4KToo'@;
put 'IjAwMDAwMCIrcGUucmdiKS5zbGljZSgtNil9KTticmVhaztjYXNlIjxmYW1pbHkiOlAuZmFtaWx5PXBlLnZhbDticmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHBlLnZhbHx8Im5vbmUiKSYmKFAudmFsaWduPXBlLnZhbC5yZXBsYWNlKCJzY3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8'@;
put 'c2NoZW1lIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOnJlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpyZT0hMTticmVhaztkZWZhdWx0OmlmKDQ3IT09cGVbMF0uY2hhckNvZGVBdCgxKSYmIXJlKXRocm93IG5ldyBFcnJvcigi'@;
put 'VW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIrcGVbMF0pfX1yZXR1cm4gUH0oU2VbMV0pKSx2ZX12YXIgUT0vPCg/Olx3KzopP3I+L2cscmU9LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24oX2Upe3JldHVybiBfZS5yZXBsYWNlKFEsIiIpLnNwbGl0KHJlKS5tYXAoTCkuZmlsdGVy'@;
put 'KGZ1bmN0aW9uKHZlKXtyZXR1cm4gdmUudn0pfX0oKSxqMT17MToic2luZ2xlIiwyOiJkb3VibGUiLDMzOiJzaW5nbGUtYWNjb3VudGluZyIsMzQ6ImRvdWJsZS1hY2NvdW50aW5nIn0sazk9ZnVuY3Rpb24oKXt2YXIgUD0vKFxyXG58XG4pL2c7ZnVuY3Rpb24gUShyZSl7dmFyIHBlPVtbXSxy'@;
put 'ZS52LFtdXTtyZXR1cm4gcmUudj8ocmUucyYmZnVuY3Rpb24gTChyZSxwZSxfZSl7dmFyIHZlPVtdO3JlLnVuZGVybGluZSYmdmUucHVzaCgidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IikscmUudW5kZXJsaW5lPjEmJnZlLnB1c2goInRleHQtdW5kZXJsaW5lLXN0eWxlOiIrajFbcmUu'@;
put 'dW5kZXJsaW5lXSsiOyIpLHJlLnN6JiZ2ZS5wdXNoKCJmb250LXNpemU6IityZS5zeisicHQ7IikscmUub3V0bGluZSYmdmUucHVzaCgidGV4dC1lZmZlY3Q6IG91dGxpbmU7IikscmUuc2hhZG93JiZ2ZS5wdXNoKCJ0ZXh0LXNoYWRvdzogYXV0bzsiKSxyZS5jb2xvciYmcmUuY29sb3Iucmdi'@;
put 'JiZ2ZS5wdXNoKCJjb2xvcjogIyIrT3UocmUuY29sb3IucmdiKSsiOyIpLHBlLnB1c2goJzxzcGFuIHN0eWxlPSInK3ZlLmpvaW4oIiIpKyciPicpLHJlLmJvbGQmJihwZS5wdXNoKCI8Yj4iKSxfZS5wdXNoKCI8L2I+IikpLHJlLml0YWxpYyYmKHBlLnB1c2goIjxpPiIpLF9lLnB1c2goIjwv'@;
put 'aT4iKSkscmUuc3RyaWtlJiYocGUucHVzaCgiPHM+IiksX2UucHVzaCgiPC9zPiIpKTt2YXIgU2U9cmUudmFsaWdufHwiIjsic3VwZXJzY3JpcHQiPT1TZXx8InN1cGVyIj09U2U/U2U9InN1cCI6InN1YnNjcmlwdCI9PVNlJiYoU2U9InN1YiIpLCIiIT1TZSYmKHBlLnB1c2goIjwiK1NlKyI+'@;
put 'IiksX2UucHVzaCgiPC8iK1NlKyI+IikpLF9lLnB1c2goIjwvc3Bhbj4iKX0ocmUucyxwZVswXSxwZVsyXSkscGVbMF0uam9pbigiIikrcGVbMV0ucmVwbGFjZShQLCI8YnIvPiIpK3BlWzJdLmpvaW4oIiIpKToiIn1yZXR1cm4gZnVuY3Rpb24ocGUpe3JldHVybiBwZS5tYXAoUSkuam9pbigi'@;
put 'Iil9fSgpO2Z1bmN0aW9uIEpoKHkpe3JldHVybiB5Lm1hcChmdW5jdGlvbihMKXtyZXR1cm4gZnVuY3Rpb24gSW0oeSl7dmFyIFA9IiIsTD1bXTtyZXR1cm4geS5zJiYoeS5zLmJvbGQmJkwucHVzaCgiPGIvPiIpLHkucy5pdGFsaWMmJkwucHVzaCgiPGkvPiIpLHkucy5zdHJpa2UmJkwucHVz'@;
put 'aCgiPHN0cmlrZS8+IikseS5zLnVuZGVybGluZSYmTC5wdXNoKCc8dSB2YWw9IicrKGptW3kucy51bmRlcmxpbmVdfHwic2luZ2xlIikrJyIvPicpLHkucy5jb2xvciYmTC5wdXNoKFVkKHkucy5jb2xvcikpLHkucy5zeiYmTC5wdXNoKCc8c3ogdmFsPSInK3kucy5zeisnIi8+JykseS5zLm5h'@;
put 'bWUmJkwucHVzaCgnPHJGb250IHZhbD0iJyt5LnMubmFtZSsnIi8+JyksKCJzdXBlciI9PXkucy52YWxpZ258fCJzdWIiPT15LnMudmFsaWduKSYmTC5wdXNoKCc8dmVydEFsaWduIHZhbD0iJyt5LnMudmFsaWduKydzY3JpcHQiLz4nKSksTC5sZW5ndGgmJihQKz0iPHJQcj4iK0wuam9pbigi'@;
put 'IikrIjwvclByPiIpLCI8cj4iKyhQKz1TcigidCIsSHIoeS52KSxudWxsKSkrIjwvcj4ifShMKX0pLmpvaW4oIiIpfXZhciBRdz0vPCg/Olx3KzopP3RbXj5dKj4oW148XSopPFwvKD86XHcrOik/dD4vZyxBOT0vPCg/Olx3KzopP3JcYltePl0qPi8sVDk9LzwoPzpcdys6KT9yUGguKj8+KFtc'@;
put 'c1xTXSo/KTxcLyg/Olx3KzopP3JQaD4vZztmdW5jdGlvbiBEOSh5LFApe3ZhciBMPSFQfHxQLmNlbGxIVE1MLFE9e307cmV0dXJuIHk/KHkubWF0Y2goL15ccyo8KD86XHcrOik/dFtePl0qPi8pPyhRLnQ9eHIoUGkoeS5zbGljZSh5LmluZGV4T2YoIj4iKSsxKS5zcGxpdCgvPFwvKD86XHcr'@;
put 'Oik/dD4vKVswXXx8IiIpKSxRLnI9UGkoeSksTCYmKFEuaD1ybyhRLnQpKSk6eS5tYXRjaChBOSkmJihRLnI9UGkoeSksUS50PXhyKFBpKCh5LnJlcGxhY2UoVDksIiIpLm1hdGNoKFF3KXx8W10pLmpvaW4oIiIpLnJlcGxhY2UoJHQsIiIpKSksUS5SPURtKFEuciksTCYmKFEuaD1rOShRLlIp'@;
put 'KSksUSk6e3Q6IiJ9fXZhciBlQz0vPCg/Olx3KzopP3NzdChbXj5dKik+KFtcc1xTXSopPFwvKD86XHcrOik/c3N0Pi8sdEM9LzwoPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vZyxuQz0vPFwvKD86XHcrOik/KD86c2l8c3N0SXRlbSk+LztIaS5TU1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxm'@;
put 'b3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hhcmVkU3RyaW5ncyI7dmFyIGxEPS9eXHN8XHMkfFtcdFxuXHJdLztmdW5jdGlvbiBMbSh5LFApe2lmKCFQLmJvb2tTU1QpcmV0dXJuIiI7dmFyIEw9W0JuXTtMW0wubGVuZ3RoXT1Tcigic3N0IixudWxsLHt4'@;
put 'bWxuczppcy5tYWluWzBdLGNvdW50OnkuQ291bnQsdW5pcXVlQ291bnQ6eS5VbmlxdWV9KTtmb3IodmFyIFE9MDtRIT15Lmxlbmd0aDsrK1EpaWYobnVsbCE9eVtRXSl7dmFyIHJlPXlbUV0scGU9IjxzaT4iO3JlLnI/cGUrPXJlLnI6KHBlKz0iPHQiLHJlLnR8fChyZS50PSIiKSxyZS50Lm1h'@;
put 'dGNoKGxEKSYmKHBlKz0nIHhtbDpzcGFjZT0icHJlc2VydmUiJykscGUrPSI+IitIcihyZS50KSsiPC90PiIpLExbTC5sZW5ndGhdPXBlKz0iPC9zaT4ifXJldHVybiBMLmxlbmd0aD4yJiYoTFtMLmxlbmd0aF09Ijwvc3N0PiIsTFsxXT1MWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxMLmpvaW4o'@;
put 'IiIpfXZhciBvQz1mdW5jdGlvbiBBMSh5LFAsTCl7dmFyIFE9MTMrNCp5LnQubGVuZ3RoLHJlPXkuUiYmeS5SLmxlbmd0aHx8eS5yO3kuciYmKHkuUj1EbSh5LnIpKSxyZSYmKFErPTQrNCp5LlIubGVuZ3RoKTt2YXIgcGU9ITE7aWYobnVsbD09TCYmKHBlPSEwLEw9ZnIoUSkpLEwud3JpdGVf'@;
put 'c2hpZnQoMSxyZT8xOjApLG5jKHkudCxMKSxyZSl7TC53cml0ZV9zaGlmdCg0LHkuUi5sZW5ndGgpO2Zvcih2YXIgX2U9MCx2ZT0wO3ZlPHkuUi5sZW5ndGg7Kyt2ZSl7dmFyIFNlPXkuUlt2ZV07TC53cml0ZV9zaGlmdCgyLF9lKSxfZSs9KFNlLnZ8fCIiKS5sZW5ndGg7dmFyIEhlPVNlLnM/'@;
put 'Z3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpTZS5zfSxQKTowO0wud3JpdGVfc2hpZnQoMixQLmNlbGxYZnNbSGVdLmZvbnRJZCl9fXJldHVybiBwZT9MLnNsaWNlKDAsTC5sKTpMfTtmdW5jdGlvbiB4Myh5LFApe3ZhciBMPXljKCk7dWkoTCwiQnJ0QmVnaW5Tc3Qi'@;
put 'LGZ1bmN0aW9uIGlDKHksUCl7cmV0dXJuIFB8fChQPWZyKDgpKSxQLndyaXRlX3NoaWZ0KDQseS5Db3VudCksUC53cml0ZV9zaGlmdCg0LHkuVW5pcXVlKSxQfSh5KSk7Zm9yKHZhciBRPTA7UTx5Lmxlbmd0aDsrK1EpdWkoTCwiQnJ0U1NUSXRlbSIsb0MoeVtRXSxQKSk7cmV0dXJuIHVpKEws'@;
put 'IkJydEVuZFNzdCIpLEwuZW5kKCl9ZnVuY3Rpb24geGEoeSl7aWYodHlwZW9mIGNwdGFibGU8InUiKXJldHVybiBjcHRhYmxlLnV0aWxzLmVuY29kZShSLHkpO2Zvcih2YXIgUD1bXSxMPXkuc3BsaXQoIiIpLFE9MDtRPEwubGVuZ3RoOysrUSlQW1FdPUxbUV0uY2hhckNvZGVBdCgwKTtyZXR1'@;
put 'cm4gUH1mdW5jdGlvbiBHMCh5LFApe3ZhciBMPXt9O3JldHVybiBMLk1ham9yPXkucmVhZF9zaGlmdCgyKSxMLk1pbm9yPXkucmVhZF9zaGlmdCgyKSxQPj00JiYoeS5sKz1QLTQpLEx9ZnVuY3Rpb24gc0MoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPXkubCtQLTQsUT17fSxyZT15'@;
put 'LnJlYWRfc2hpZnQoNCkscGU9W107cmUtLSA+MDspcGUucHVzaCh7dDp5LnJlYWRfc2hpZnQoNCksdjp5LnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoUS5uYW1lPXkucmVhZF9zaGlmdCgwLCJscHA0IiksUS5jb21wcz1wZSx5LmwhPUwpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YVNwYWNl'@;
put 'TWFwRW50cnk6ICIreS5sKyIgIT0gIitMKTtyZXR1cm4gUX1mdW5jdGlvbiBJOSh5LFApe3ZhciBMPXkubCtQLFE9e307US5GbGFncz02MyZ5LnJlYWRfc2hpZnQoNCkseS5sKz00LFEuQWxnSUQ9eS5yZWFkX3NoaWZ0KDQpO3ZhciByZT0hMTtzd2l0Y2goUS5BbGdJRCl7Y2FzZSAyNjEyNjpj'@;
put 'YXNlIDI2MTI3OmNhc2UgMjYxMjg6cmU9MzY9PVEuRmxhZ3M7YnJlYWs7Y2FzZSAyNjYyNTpyZT00PT0oNTImUS5GbGFncyk7YnJlYWs7Y2FzZSAwOnJlPTE2PT1RLkZsYWdzfHw0PT1RLkZsYWdzfHwzNj09US5GbGFnczticmVhaztkZWZhdWx0OnRocm93IlVucmVjb2duaXplZCBlbmNyeXB0'@;
put 'aW9uIGFsZ29yaXRobTogIitRLkFsZ0lEfWlmKCFyZSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gRmxhZ3MvQWxnSUQgbWlzbWF0Y2giKTtyZXR1cm4gUS5BbGdJREhhc2g9eS5yZWFkX3NoaWZ0KDQpLFEuS2V5U2l6ZT15LnJlYWRfc2hpZnQoNCksUS5Qcm92aWRlclR5cGU9eS5yZWFk'@;
put 'X3NoaWZ0KDQpLHkubCs9OCxRLkNTUE5hbWU9eS5yZWFkX3NoaWZ0KEwteS5sPj4xLCJ1dGYxNmxlIikseS5sPUwsUX1mdW5jdGlvbiBSbSh5LFApe3ZhciBMPXt9LFE9eS5sK1A7cmV0dXJuIHkubCs9NCxMLlNhbHQ9eS5zbGljZSh5LmwseS5sKzE2KSx5LmwrPTE2LEwuVmVyaWZpZXI9eS5z'@;
put 'bGljZSh5LmwseS5sKzE2KSx5LmwrPTE2LHkucmVhZF9zaGlmdCg0KSxMLlZlcmlmaWVySGFzaD15LnNsaWNlKHkubCxRKSx5Lmw9USxMfWZ1bmN0aW9uIGdaKHkpe2lmKDM2IT0oNjMmeS5yZWFkX3NoaWZ0KDQpKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb25JbmZvIG1pc21hdGNoIik7'@;
put 'dmFyIEw9eS5yZWFkX3NoaWZ0KDQpO3JldHVybnt0OiJTdGQiLGg6STkoeSxMKSx2OlJtKHkseS5sZW5ndGgteS5sKX19ZnVuY3Rpb24gaEQoKXt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkOiBFQ01BLTM3NiBFeHRlbnNpYmxlIil9ZnVuY3Rpb24gbVooeSl7'@;
put 'dmFyIFA9WyJzYWx0U2l6ZSIsImJsb2NrU2l6ZSIsImtleUJpdHMiLCJoYXNoU2l6ZSIsImNpcGhlckFsZ29yaXRobSIsImNpcGhlckNoYWluaW5nIiwiaGFzaEFsZ29yaXRobSIsInNhbHRWYWx1ZSJdO3kubCs9NDt2YXIgTD15LnJlYWRfc2hpZnQoeS5sZW5ndGgteS5sLCJ1dGY4IiksUT17'@;
put 'fTtyZXR1cm4gTC5yZXBsYWNlKCR0LGZ1bmN0aW9uKHBlKXt2YXIgX2U9bG4ocGUpO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJl'@;
put 'YWs7Y2FzZSI8a2V5RGF0YSI6UC5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtRW3ZlXT1fZVt2ZV19KTticmVhaztjYXNlIjxkYXRhSW50ZWdyaXR5IjpRLmVuY3J5cHRlZEhtYWNLZXk9X2UuZW5jcnlwdGVkSG1hY0tleSxRLmVuY3J5cHRlZEhtYWNWYWx1ZT1fZS5lbmNyeXB0ZWRIbWFjVmFsdWU7'@;
put 'YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOlEuZW5jcz1bXTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOlEudXJpPV9lLnVyaTticmVhaztjYXNlIjxlbmNyeXB0ZWRLZXkiOlEuZW5jcy5wdXNoKF9lKTticmVhaztkZWZhdWx0OnRocm93IF9lWzBd'@;
put 'fX0pLFF9ZnVuY3Rpb24gYUMoeSl7dmFyIEwscGUsUD0wLFE9eGEoeSkscmU9US5sZW5ndGgrMTtmb3IoKEw9RyhyZSkpWzBdPVEubGVuZ3RoLHBlPTE7cGUhPXJlOysrcGUpTFtwZV09UVtwZS0xXTtmb3IocGU9cmUtMTtwZT49MDstLXBlKVA9KCgxNjM4NCZQPzE6MCl8UDw8MSYzMjc2Nyle'@;
put 'TFtwZV07cmV0dXJuIDUyODExXlB9dmFyIGZEPWZ1bmN0aW9uKCl7dmFyIHk9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwxMjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sUD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4Nywz'@;
put 'NDA0MSwxMDI1Miw0MzM3MCwyMDE2M10sTD1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUsNjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3'@;
put 'MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcwLDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDks'@;
put 'Nzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMs'@;
put 'NzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIwLDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0scmU9ZnVuY3Rpb24oX2UsdmUpe3JldHVybiBmdW5j'@;
put 'dGlvbihfZSl7cmV0dXJuIDI1NSYoX2U+PjF8X2U8PDcpfShfZV52ZSl9O3JldHVybiBmdW5jdGlvbih2ZSl7Zm9yKHZhciBTZT14YSh2ZSksSGU9ZnVuY3Rpb24oX2Upe2Zvcih2YXIgdmU9UFtfZS5sZW5ndGgtMV0sU2U9MTA0LEhlPV9lLmxlbmd0aC0xO0hlPj0wOy0tSGUpZm9yKHZhciBC'@;
put 'ZT1fZVtIZV0sR2U9MDs3IT1HZTsrK0dlKTY0JkJlJiYodmVePUxbU2VdKSxCZSo9MiwtLVNlO3JldHVybiB2ZX0oU2UpLEJlPVNlLmxlbmd0aCxHZT1HKDE2KSxudD0wOzE2IT1udDsrK250KUdlW250XT0wO3ZhciBjdDtmb3IoMT09KDEmQmUpJiYoR2VbQmVdPXJlKHlbMF0sSGU+PjgpLEdl'@;
put 'Wy0tQmVdPXJlKFNlW1NlLmxlbmd0aC0xXSwyNTUmSGUpKTtCZT4wOylHZVstLUJlXT1yZShTZVtCZV0sSGU+PjgpLEdlWy0tQmVdPXJlKFNlW0JlXSwyNTUmSGUpO2ZvcihCZT0xNSxjdD0xNS1TZS5sZW5ndGg7Y3Q+MDspR2VbQmVdPXJlKHlbY3RdLEhlPj44KSwtLWN0LEdlWy0tQmVdPXJl'@;
put 'KFNlW0JlXSwyNTUmSGUpLC0tQmUsLS1jdDtyZXR1cm4gR2V9fSgpO3ZhciBPbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHkocmUscGUpe3N3aXRjaChwZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFAoc2UuZGVjb2RlKHJlKSxwZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBQKHJlLHBlKTtjYXNl'@;
put 'ImJ1ZmZlciI6cmV0dXJuIFAocmUudG9TdHJpbmcoImJpbmFyeSIpLHBlKTtjYXNlImFycmF5IjpyZXR1cm4gUChQdChyZSkscGUpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitwZS50eXBlKX1mdW5jdGlvbiBQKHJlLHBlKXt2YXIgdmU9KHBlfHx7fSkuZGVuc2U/W106'@;
put 'e307aWYoIXJlLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cgbmV3IEVycm9yKCJSVEYgbWlzc2luZyB0YWJsZSIpO3JldHVybiB2ZVsiIXJlZiJdPU9vKHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLHZlfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBMKHJlLHBlKXtyZXR1cm4gRWQoeShy'@;
put 'ZSxwZSkscGUpfSx0b19zaGVldDp5LGZyb21fc2hlZXQ6ZnVuY3Rpb24gUShyZSl7Zm9yKHZhciB2ZSxwZT1bIntcXHJ0ZjFcXGFuc2kiXSxfZT1PaShyZVsiIXJlZiJdKSxTZT1BcnJheS5pc0FycmF5KHJlKSxIZT1fZS5zLnI7SGU8PV9lLmUucjsrK0hlKXtwZS5wdXNoKCJcXHRyb3dkXFx0'@;
put 'cmF1dG9maXQxIik7Zm9yKHZhciBCZT1fZS5zLmM7QmU8PV9lLmUuYzsrK0JlKXBlLnB1c2goIlxcY2VsbHgiKyhCZSsxKSk7Zm9yKHBlLnB1c2goIlxccGFyZFxcaW50YmwiKSxCZT1fZS5zLmM7QmU8PV9lLmUuYzsrK0JlKXt2YXIgR2U9ZGkoe3I6SGUsYzpCZX0pOyh2ZT1TZT8ocmVbSGVd'@;
put 'fHxbXSlbQmVdOnJlW0dlXSkmJihudWxsIT12ZS52fHx2ZS5mJiYhdmUuRikmJihwZS5wdXNoKCIgIisodmUud3x8KGN1KHZlKSx2ZS53KSkpLHBlLnB1c2goIlxcY2VsbCIpKX1wZS5wdXNoKCJcXHBhcmRcXGludGJsXFxyb3ciKX1yZXR1cm4gcGUuam9pbigiIikrIn0ifX19KCk7ZnVuY3Rp'@;
put 'b24gZWYoeSl7dmFyIFA9eS5zbGljZSgiIyI9PT15WzBdPzE6MCkuc2xpY2UoMCw2KTtyZXR1cm5bcGFyc2VJbnQoUC5zbGljZSgwLDIpLDE2KSxwYXJzZUludChQLnNsaWNlKDIsNCksMTYpLHBhcnNlSW50KFAuc2xpY2UoNCw2KSwxNildfWZ1bmN0aW9uIHoxKHkpe2Zvcih2YXIgUD0wLEw9'@;
put 'MTszIT1QOysrUClMPTI1NipMKyh5W1BdPjI1NT8yNTU6eVtQXTwwPzA6eVtQXSk7cmV0dXJuIEwudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gJDAoeSxQKXtpZihudWxsPT15KXJldHVybiBudWxsIT1QO2lmKG51bGw9PVApcmV0dXJuITA7aWYoMT09eS5h'@;
put 'dXRvJiYxPT1QLmF1dG8pcmV0dXJuITE7aWYoISF5LmF1dG8hPSEhUC5hdXRvfHxudWxsPT15LnRoZW1lIT0obnVsbD09UC50aGVtZSkpcmV0dXJuITA7aWYobnVsbCE9eS50aGVtZSlyZXR1cm4geS50aGVtZSE9UC50aGVtZXx8eS50aW50IT1QLnRpbnQ7aWYobnVsbD09eS5yZ2ImJm51bGw9'@;
put 'PVAucmdiKXJldHVybiExO3ZhciBMPXkucmdiOyJudW1iZXIiPT10eXBlb2YgTCYmKEw9TC50b1N0cmluZygxNikpLEw9TC5zbGljZSgtNik7dmFyIFE9UC5yZ2I7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBRJiYoUT1RLnRvU3RyaW5nKDE2KSksUT1RLnNsaWNlKC02KSxMLnRvTG93ZXJDYXNl'@;
put 'KCkhPVEudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBQbSh5LFApe3JldHVybiBudWxsPT15P251bGwhPVA6bnVsbD09UD9udWxsIT15Onkuc3R5bGUhPVAuc3R5bGV8fCQwKHkuY29sb3IsUC5jb2xvcil9ZnVuY3Rpb24gQmQoeSxQKXtpZigwPT09UClyZXR1cm4geTt2YXIgTD1mdW5jdGlvbiBw'@;
put 'MCh5KXt2YXIgUD15WzBdLzI1NSxMPXlbMV0vMjU1LFE9eVsyXS8yNTUscmU9TWF0aC5tYXgoUCxMLFEpLHBlPU1hdGgubWluKFAsTCxRKSxfZT1yZS1wZTtpZigwPT09X2UpcmV0dXJuWzAsMCxQXTt2YXIgU2UsdmU9MCxIZT1yZStwZTtzd2l0Y2goU2U9X2UvKEhlPjE/Mi1IZTpIZSkscmUp'@;
put 'e2Nhc2UgUDp2ZT0oKEwtUSkvX2UrNiklNjticmVhaztjYXNlIEw6dmU9KFEtUCkvX2UrMjticmVhaztjYXNlIFE6dmU9KFAtTCkvX2UrNH1yZXR1cm5bdmUvNixTZSxIZS8yXX0oZWYoeSkpO3JldHVybiBMWzJdPVA8MD9MWzJdKigxK1ApOjEtKDEtTFsyXSkqKDEtUCksejEoZnVuY3Rpb24g'@;
put 'RjQoeSl7dmFyIFNlLEw9eVsxXSxRPXlbMl0scmU9MipMKihRPC41P1E6MS1RKSxwZT1RLXJlLzIsX2U9W3BlLHBlLHBlXSx2ZT02KnlbMF07aWYoMCE9PUwpc3dpdGNoKDB8dmUpe2Nhc2UgMDpjYXNlIDY6U2U9cmUqdmUsX2VbMF0rPXJlLF9lWzFdKz1TZTticmVhaztjYXNlIDE6X2VbMF0r'@;
put 'PVNlPXJlKigyLXZlKSxfZVsxXSs9cmU7YnJlYWs7Y2FzZSAyOlNlPXJlKih2ZS0yKSxfZVsxXSs9cmUsX2VbMl0rPVNlO2JyZWFrO2Nhc2UgMzpfZVsxXSs9U2U9cmUqKDQtdmUpLF9lWzJdKz1yZTticmVhaztjYXNlIDQ6U2U9cmUqKHZlLTQpLF9lWzJdKz1yZSxfZVswXSs9U2U7YnJlYWs7'@;
put 'Y2FzZSA1Ol9lWzJdKz1TZT1yZSooNi12ZSksX2VbMF0rPXJlfWZvcih2YXIgSGU9MDszIT1IZTsrK0hlKV9lW0hlXT1NYXRoLnJvdW5kKDI1NSpfZVtIZV0pO3JldHVybiBfZX0oTCkpfXZhciBsQz02LHBsPWxDO2Z1bmN0aW9uIE1jKHkpe3JldHVybiBNYXRoLmZsb29yKCh5K01hdGgucm91'@;
put 'bmQoMTI4L3BsKS8yNTYpKnBsKX1mdW5jdGlvbiB0Zih5KXtyZXR1cm4gTWF0aC5mbG9vcigoeS01KS9wbCoxMDArLjUpLzEwMH1mdW5jdGlvbiBqZCh5KXtyZXR1cm4gTWF0aC5yb3VuZCgoeSpwbCs1KS9wbCoyNTYpLzI1Nn1mdW5jdGlvbiBwdSh5KXt5LmJlc3RGaXQmJmRlbGV0ZSB5LmJl'@;
put 'c3RGaXQseS53aWR0aD8oeS53cHg9TWMoeS53aWR0aCkseS53Y2g9dGYoeS53cHgpLHkuTURXPXBsKTp5LndweD8oeS53Y2g9dGYoeS53cHgpLHkud2lkdGg9amQoeS53Y2gpLHkuTURXPXBsKToibnVtYmVyIj09dHlwZW9mIHkud2NoJiYoeS53aWR0aD1qZCh5LndjaCkseS53cHg9TWMoeS53'@;
put 'aWR0aCkseS5NRFc9cGwpLHkuY3VzdG9tV2lkdGgmJmRlbGV0ZSB5LmN1c3RvbVdpZHRofXZhciBMOT05NixuZj1MOTtmdW5jdGlvbiBqMih5KXtyZXR1cm4gNzIqeS9uZn1mdW5jdGlvbiBVMSh5KXtyZXR1cm4geSpuZi83Mn1mdW5jdGlvbiBGbSh5KXtuZj15PXtvc3g6NzIsd2luOjk2LHdp'@;
put 'bjEwMDo5Nix3aW4xMjU6MTIwLHdpbjE1MDoxNDR9W3ldfHx5fHxMOSxObT1nMFt5XX1mdW5jdGlvbiBJMyh5KXt5LmhweD95LmhwdD1qMih5LmhweCk6eS5ocHQmJih5LmhweD1VMSh5LmhwdCkpfXZhciBIND17Tm9uZToibm9uZSIsU29saWQ6InNvbGlkIixHcmF5NTA6Im1lZGl1bUdyYXki'@;
put 'LEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGlnaHRHcmF5IixIb3J6U3RyaXBlOiJkYXJrSG9yaXpvbnRhbCIsVmVydFN0cmlwZToiZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0cmlwZToiZGFya0Rvd24iLERpYWdTdHJpcGU6ImRhcmtVcCIsRGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhp'@;
put 'Y2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGluSG9yelN0cmlwZToibGlnaHRIb3Jpem9udGFsIixUaGluVmVydFN0cmlwZToibGlnaHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFnU3RyaXBlOiJsaWdodERvd24iLFRoaW5Ib3J6Q3Jvc3M6ImxpZ2h0R3JpZCJ9LF9EPWJlKEg0KSx6Mj17'@;
put 'b3JhbmdlOjE2NzUzOTIwLGJsYWNrOjAsbmF2eToxMjgsYmx1ZToyNTUsZ3JlZW46MzI3NjgsdGVhbDozMjg5NixsaW1lOjY1MjgwLGFxdWE6NjU1MzUsc2lsdmVyOjEyNjMyMjU2LG1hcm9vbjo4Mzg4NjA4LHB1cnBsZTo4Mzg4NzM2LG9saXZlOjg0MjEzNzYsZ3JheTo4NDIxNTA0LHJlZDox'@;
put 'NjcxMTY4MCxmdWNoc2lhOjE2NzExOTM1LHllbGxvdzoxNjc3Njk2MCx3aGl0ZToxNjc3NzIxNX07ZnVuY3Rpb24gTjQoeSxQKXtpZih5LnJlcGxhY2UoIiMiLCIiKS5tYXRjaCgvXlswLTlhLWZBLUZdezZ9JC8pKXJldHVybiBwYXJzZUludCh5LnJlcGxhY2UoIiMiLCIiKSwxNik7aWYoejJb'@;
put 'eV0pcmV0dXJuIHoyW3ldO3ZhciBMPXkubWF0Y2goL3JnYlwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccypcKS8pO2lmKEwpcmV0dXJuKCtMWzFdPDwxNikrKCtMWzJdPDw4KSsgK0xbM107aWYoTD15Lm1hdGNoKC9yZ2JhXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyoo'@;
put 'XGQqKVxzKihcZCopLykpcmV0dXJuIDAhPShMWzRdJiZMWzRdLmxlbmd0aD4wJiYrTFs0XXx8MCl8fCtMWzFdPjB8fCtMWzJdPjB8fCtMWzNdPjA/KCtMWzFdPDwxNikrKCtMWzJdPDw4KSsgK0xbM106UD8tMToxNjc3NzIxNTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSFRNTCBjb2xvciAi'@;
put 'K3kpfXZhciBnMD17fTtmdW5jdGlvbiBIbSh5KXt5PXl8fDk2O3ZhciBQPXtDYWxpYnJpOltdLEFyaWFsOltdLCJTcGFya2Fzc2UgUmciOltdLFx1NWI4Ylx1NGY1MzpbXSxcdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWY6W10sIkNlbnR1cnkgR290aGljIjpbXX07cmV0dXJuIFAuQ2Fs'@;
put 'aWJyaVsxMV09NyxQLkNhbGlicmlbMTJdPXs3Mjo2LDk2OjgsMTIwOjEwLDE0NDoxMn1beV18fDgsUC5DYWxpYnJpWzEzXT0xMCxQLkNhbGlicmlbMTRdPTExLFAuQ2FsaWJyaVsxNl09MTIsUC5DYWxpYnJpWzE4XT0xNCxQLkNhbGlicmlbMjBdPTE2LFAuXHU1YjhiXHU0ZjUzWzExXT04LFAu'@;
put 'XHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmWzExXT04LFBbIlNwYXJrYXNzZSBSZyJdWzExXT03LFAuQXJpYWxbMTBdPTcsUFsiQ2VudHVyeSBHb3RoaWMiXVsxMl09OSxQfWcwWzcyXT1IbSg3MiksZzBbOTZdPUhtKDk2KSxnMFsxMjBdPUhtKDEyMCksZzBbMTQ0XT1IbSgxNDQpO3Zh'@;
put 'ciBObT1nMFs5Nl07ZnVuY3Rpb24gVm0oeSl7cmV0dXJuKE5tW3kubmFtZXx8eS5Gb250TmFtZV18fFtdKVt5LnN6fHx5LlNpemVdfWZ1bmN0aW9uIFoxKHkpe2lmKHkpe3ZhciBQPVZtKHkpO2lmKFApcmV0dXJuIHBsPVB9cmV0dXJuIHBsPTZ9ZnVuY3Rpb24gUjkoeSxQLEwpe3JldHVybiB6'@;
put 'MShmdW5jdGlvbiB1Qyh5LFAsTCl7cmV0dXJuW01hdGgucm91bmQoUFswXSpMK3lbMF0qKDEtTCkpLE1hdGgucm91bmQoUFsxXSpMK3lbMV0qKDEtTCkpLE1hdGgucm91bmQoUFsyXSpMK3lbMl0qKDEtTCkpXX0oZWYoIm51bWJlciI9PXR5cGVvZiB5LnJnYj8oIjAwMDAwIit5LnRvU3RyaW5n'@;
put 'KDE2KSkuc2xpY2UoLTYpOnkucmdiKSxlZigibnVtYmVyIj09dHlwZW9mIFAucmdiPygiMDAwMDAiK1AudG9TdHJpbmcoMTYpKS5zbGljZSgtNik6UC5yZ2IpLEwpKX1mdW5jdGlvbiBCbSh5LFAsTCl7aWYoTClzd2l0Y2goK3kpe2Nhc2UgNjQ6eT02NTticmVhaztjYXNlIDY1Onk9NjR9dmFy'@;
put 'IFE9UCYmUFsreV18fENyWyt5XXx8TmFbK3ktMjAwXTtpZig4MT09K3kmJihRPUNyWzFdKSxRfHwoUT1DclsxXSksIVEpdGhyb3cgbmV3IEVycm9yKCJiYWQgSUNWIGluZGV4ICIreSk7cmV0dXJuIHoxKFEpfWZ1bmN0aW9uIFUyKHksUCxMKXt2YXIgUT17fTtyZXR1cm4gbnVsbCE9eS5pbmRl'@;
put 'eGVkJiYoUS5pbmRleD1wYXJzZUludCh5LmluZGV4ZWQsMTApLFEucmdiPUJtKFEuaW5kZXgsUC5JbmRleGVkKSksbnVsbCE9eS50aGVtZSYmKFEudGhlbWU9cGFyc2VJbnQoeS50aGVtZSwxMCkpLG51bGwhPXkudGludCYmKFEudGludD1wYXJzZUZsb2F0KHkudGludCkpLG51bGwhPXkucmdi'@;
put 'JiYoUS5yZ2I9eS5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1RLnRoZW1lJiYhUS5yZ2ImJkwudGhlbWVFbGVtZW50cyYmKFEucmdiPUJkKEwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUS50aGVtZV0ucmdiLFEudGludHx8MCksUS5yYXdfcmdiPUwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUS50'@;
put 'aGVtZV0ucmdiKSxRfWZ1bmN0aW9uIEwzKHksUCxMLFEpe1AuQm9yZGVycz1bXTt2YXIgcmU9e30scGU9e30sX2U9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPWxuKHZlKTtzd2l0Y2goam4oU2VbMF0pKXtjYXNlIjxib3JkZXJzIjpjYXNlIjxi'@;
put 'b3JkZXJzPiI6Y2FzZSI8L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6Y2FzZSI8bGVmdC8+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjwvdG9wPiI6Y2FzZSI8Ym90dG9tLz4iOmNhc2UiPC9ib3R0b20+IjpjYXNlIjxk'@;
put 'aWFnb25hbCI6Y2FzZSI8ZGlhZ29uYWw+IjpjYXNlIjxkaWFnb25hbC8+IjpjYXNlIjxob3Jpem9udGFsIjpjYXNlIjxob3Jpem9udGFsPiI6Y2FzZSI8aG9yaXpvbnRhbC8+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNlIjxzdGFydCI6'@;
put 'Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0'@;
put 'PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6cmU9e30sU2UuZGlhZ29uYWxVcCYmKHJlLmRpYWdvbmFsVXA9eXIoU2UuZGlhZ29uYWxVcCkpLFNlLmRpYWdvbmFsRG93biYmKHJlLmRpYWdvbmFsRG93bj15cihTZS5kaWFnb25hbERvd24pKSxQ'@;
put 'LkJvcmRlcnMucHVzaChyZSk7YnJlYWs7Y2FzZSI8bGVmdCI6Y2FzZSI8bGVmdD4iOnBlPXJlLmxlZnQ9e30sU2Uuc3R5bGUmJihwZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8cmlnaHQiOmNhc2UiPHJpZ2h0PiI6cGU9cmUucmlnaHQ9e30sU2Uuc3R5bGUmJihwZS5zdHlsZT1TZS5z'@;
put 'dHlsZSk7YnJlYWs7Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjpwZT1yZS50b3A9e30sU2Uuc3R5bGUmJihwZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpwZT1yZS5ib3R0b209e30sU2Uuc3R5bGUmJihwZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7'@;
put 'Y2FzZSI8L2RpYWdvbmFsPiI6cmUuZGlhZ29uYWw9cGUscGU9e307YnJlYWs7Y2FzZSI8L2hvcml6b250YWw+IjpyZS5ob3Jpem9udGFsPXBlLHBlPXt9O2JyZWFrO2Nhc2UiPC92ZXJ0aWNhbD4iOnJlLnZlcnRpY2FsPXBlLHBlPXt9O2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4i'@;
put 'OnBlLmNvbG9yfHwocGUuY29sb3I9e30pLFNlLmF1dG8mJihwZS5jb2xvci5hdXRvPXlyKFNlLmF1dG8pKSxudWxsIT1TZS5yZ2I/cGUuY29sb3IucmdiPVNlLnJnYi5zbGljZSgtNik6U2UuaW5kZXhlZD8ocGUuY29sb3IuaW5kZXg9cGFyc2VJbnQoU2UuaW5kZXhlZCwxMCkscGUuY29sb3Iu'@;
put 'cmdiPUJtKHBlLmNvbG9yLmluZGV4LFAuSW5kZXhlZCwhMSkpOlNlLnRoZW1lJiYocGUuY29sb3IudGhlbWU9cGFyc2VJbnQoU2UudGhlbWUsMTApLFNlLnRpbnQmJihwZS5jb2xvci50aW50PXBhcnNlRmxvYXQoU2UudGludCkpLFNlLnRoZW1lJiZMLnRoZW1lRWxlbWVudHMmJkwudGhlbWVF'@;
put 'bGVtZW50cy5jbHJTY2hlbWUmJihwZS5jb2xvci5yZ2I9QmQoTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtwZS5jb2xvci50aGVtZV0ucmdiLHBlLmNvbG9yLnRpbnR8fDApKSksIVNlLmF1dG8mJm51bGw9PVNlLnJnYiYmIVNlLmluZGV4ZWQmJmRlbGV0ZSBwZS5jb2xvcjticmVhaztjYXNl'@;
put 'IjxleHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpfZT0hMTticmVhaztkZWZhdWx0OmlmKFEmJlEuV1RGJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitTZVswXSsiIGluIGJvcmRlcnMiKX19KX1mdW5jdGlvbiBSMyh5LFApe3ZhciBMPVsiPCIrUF07cmV0dXJuIHkm'@;
put 'Jnkuc3R5bGU/KEwucHVzaCgnIHN0eWxlPSInK3kuc3R5bGUrJyInKSx5LmNvbG9yPyhMLnB1c2goIj4iKSxMLnB1c2goVWQoeS5jb2xvciwhMCkpLEwuam9pbigiIikrIjwvIitQKyI+Iik6TC5qb2luKCIiKSsiLz4iKTpMWzBdKyIvPiJ9ZnVuY3Rpb24gTzkoeSxQLEwsUSl7UC5GaWxscz1b'@;
put 'XTt2YXIgcmU9e30scGU9e30sX2U9ITEsdmU9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihTZSl7dmFyIEhlPWxuKFNlKTtzd2l0Y2goam4oSGVbMF0pKXtjYXNlIjxmaWxscyI6Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+IjpjYXNlIjwvZmlsbD4iOmNhc2Ui'@;
put 'PC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0NvbG9yLz4iOmNhc2UiPC9iZ0NvbG9yPiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdDb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwv'@;
put 'ZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4iOmNhc2UiPGZpbGwiOmNhc2UiPGZpbGwvPiI6UC5GaWxscy5wdXNoKHJlPXt9KTticmVhaztjYXNlIjxncmFkaWVudEZpbGw+IjpyZS5zdG9wcz1bXTticmVhaztjYXNlIjxncmFkaWVudEZpbGwiOnJlLnN0b3BzPVtdLEhlLmRlZ3JlZSYmKHJl'@;
put 'LmFuZ2xlPStIZS5kZWdyZWUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsIjpjYXNlIjxwYXR0ZXJuRmlsbD4iOkhlLnBhdHRlcm5UeXBlJiYocmUucGF0dGVyblR5cGU9SGUucGF0dGVyblR5cGUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsLz4iOmNhc2UiPC9wYXR0ZXJuRmlsbD4iOmlmKF9l'@;
put 'KXRocm93IG5ldyBFcnJvcigiYmFkIHN0b3AiKTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8YmdDb2xvciI6Y2FzZSI8ZmdDb2xvciI6dmFyIEJlPWpuKEhlWzBdKS5zbGljZSgxKTsiY29sb3IiIT1CZSYmIXJlW0JlXSYmKHJlW0JlXT17fSk7dmFyIEdlPV9lP3BlOnJlW0JlXTtudWxsIT1I'@;
put 'ZS5pbmRleGVkJiYoR2UuaW5kZXg9cGFyc2VJbnQoSGUuaW5kZXhlZCwxMCksR2UucmdiPUJtKEdlLmluZGV4LFAuSW5kZXhlZCkpLG51bGwhPUhlLnRoZW1lJiYoR2UudGhlbWU9cGFyc2VJbnQoSGUudGhlbWUsMTApKSxudWxsIT1IZS50aW50JiYoR2UudGludD1wYXJzZUZsb2F0KEhlLnRp'@;
put 'bnQpKSxudWxsIT1IZS5yZ2ImJihHZS5yZ2I9SGUucmdiLnNsaWNlKC02KSksbnVsbCE9SGUuYXV0byYmZGVsZXRlIHJlW0JlXSxudWxsIT1HZS50aGVtZSYmIUdlLnJnYiYmTC50aGVtZUVsZW1lbnRzJiYoR2UucmdiPUJkKEwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbR2UudGhlbWVdLnJn'@;
put 'YixHZS50aW50fHwwKSxRLldURiYmKEdlLnJhd19yZ2I9TC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtHZS50aGVtZV0ucmdiKSk7YnJlYWs7Y2FzZSI8c3RvcD4iOl9lPSEwLHBlPXt9O2JyZWFrO2Nhc2UiPHN0b3AiOl9lPSEwLHBlPXt9LG51bGwhPUhlLnBvc2l0aW9uJiYocGUudj1wYXJz'@;
put 'ZUZsb2F0KEhlLnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0b3A+IjpfZT0hMSxyZS5zdG9wcy5wdXNoKHBlKTticmVhaztjYXNlIjxleHQiOnZlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+Ijp2ZT0hMTticmVhaztkZWZhdWx0OmlmKFEmJlEuV1RGJiYhdmUpdGhyb3cgbmV3IEVycm9yKCJ1bnJl'@;
put 'Y29nbml6ZWQgIitIZVswXSsiIGluIGZpbGxzIil9fSl9ZnVuY3Rpb24geUQoeSxQLEwsUSl7UC5Gb250cz1bXTt2YXIgcmU9e30scGU9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihfZSl7dmFyIHZlPWxuKF9lKTtzd2l0Y2goam4odmVbMF0pKXtjYXNlIjxmb250'@;
put 'cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+IjpicmVhaztjYXNlIjxmb250IjpjYXNlIjxmb250PiI6aWYoIi8+IiE9X2Uuc2xpY2UoLTIpKWJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+IjpQLkZvbnRzLnB1c2gocmUpLHJlPXt9O2JyZWFrO2Nhc2UiPG5hbWUiOnZlLnZh'@;
put 'bCYmKHJlLm5hbWU9UGkodmUudmFsKSk7YnJlYWs7Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmJyZWFrO2Nhc2UiPGIiOnJlLmJvbGQ9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjpyZS5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNl'@;
put 'IjxpIjpyZS5pdGFsaWM9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxpLz4iOmNhc2UiPGk+IjpyZS5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaCh2ZS52YWwpe2Nhc2Uibm9uZSI6cmUudW5kZXJsaW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUi'@;
put 'OnJlLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiZG91YmxlIjpyZS51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOnJlLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOnJlLnVuZGVybGluZT0zNH1icmVhaztjYXNlIjx1Lz4iOmNhc2UiPHU+'@;
put 'IjpyZS51bmRlcmxpbmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlrZSI6cmUuc3RyaWtlPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOnJlLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPG91dGxpbmUiOnJlLm91dGxpbmU9dmUudmFsP3lyKHZlLnZh'@;
put 'bCk6MTticmVhaztjYXNlIjxvdXRsaW5lLz4iOnJlLm91dGxpbmU9MTticmVhaztjYXNlIjxzaGFkb3ciOnJlLnNoYWRvdz12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPHNoYWRvdy8+IjpyZS5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6cmUuY29uZGVuc2U9dmUudmFs'@;
put 'P3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpyZS5jb25kZW5zZT0xO2JyZWFrO2Nhc2UiPGV4dGVuZCI6cmUuZXh0ZW5kPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOnJlLmV4dGVuZD0xO2JyZWFrO2Nhc2UiPHN6Ijp2ZS52YWwmJihyZS5z'@;
put 'ej0rdmUudmFsKTticmVhaztjYXNlIjxzei8+IjpjYXNlIjwvc3o+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHZlLnZhbHx8Im5vbmUiKSYmKHJlLnZhbGlnbj12ZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVy'@;
put 'dEFsaWduPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5Ijp2ZS52YWwmJihyZS5mYW1pbHk9cGFyc2VJbnQodmUudmFsLDEwKSk7YnJlYWs7Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjxzY2hlbWUiOnZlLnZhbCYmKHJlLnNjaGVtZT12ZS52YWwpO2JyZWFrO2Nhc2Ui'@;
put 'PHNjaGVtZS8+IjpjYXNlIjwvc2NoZW1lPiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT12ZS52YWwpYnJlYWs7dmUuY29kZXBhZ2U9SVtwYXJzZUludCh2ZS52YWwsMTApXTticmVhaztjYXNlIjxjb2xvciI6cmUuY29sb3J8fChyZS5jb2xvcj17fSksdmUuYXV0byYmKHJlLmNvbG9y'@;
put 'LmF1dG89eXIodmUuYXV0bykpLHZlLnJnYj9yZS5jb2xvci5yZ2I9dmUucmdiLnNsaWNlKC02KTp2ZS5pbmRleGVkPyhyZS5jb2xvci5pbmRleD1wYXJzZUludCh2ZS5pbmRleGVkLDEwKSxyZS5jb2xvci5yZ2I9Qm0ocmUuY29sb3IuaW5kZXgsUC5JbmRleGVkKSk6dmUudGhlbWUmJihyZS5j'@;
put 'b2xvci50aGVtZT1wYXJzZUludCh2ZS50aGVtZSwxMCksdmUudGludCYmKHJlLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdCh2ZS50aW50KSksdmUudGhlbWUmJkwudGhlbWVFbGVtZW50cyYmTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKHJlLmNvbG9yLnJnYj1CZChMLnRoZW1lRWxlbWVudHMu'@;
put 'Y2xyU2NoZW1lW3JlLmNvbG9yLnRoZW1lXS5yZ2IscmUuY29sb3IudGludHx8MCkpKTticmVhaztjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpicmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpwZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOnBlPSExO2JyZWFr'@;
put 'O2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6cGU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUSYmUS5XVEYmJiFwZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3ZlWzBdKyIg'@;
put 'aW4gZm9udHMiKX19KX12YXIgam09ezA6Im5vbmUiLDE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlQWNjb3VudGluZyIsMzQ6ImRvdWJsZUFjY291bnRpbmcifSx6ZD1bIm51bUZtdElkIiwiZmlsbElkIiwiZm9udElkIiwiYm9yZGVySWQiLCJ4ZklkIl0sWjI9WyJhcHBseUFsaWdu'@;
put 'bWVudCIsImFwcGx5Qm9yZGVyIiwiYXBwbHlGaWxsIiwiYXBwbHlGb250IiwiYXBwbHlOdW1iZXJGb3JtYXQiLCJhcHBseVByb3RlY3Rpb24iLCJwaXZvdEJ1dHRvbiIsInF1b3RlUHJlZml4Il0seEQ9ZnVuY3Rpb24oKXt2YXIgeT0vPCg/Olx3KzopP2ZvbnQoW14+XSopPltcU1xzXSo/PFwv'@;
put 'KD86XHcrOik/Zm9udD4vLFA9LzwoPzpcdys6KT9udW1GbXQoW14+XSopXC8+LyxMPS88KD86XHcrOik/ZmlsbChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxsPi8scmU9LzwoPzpcdys6KT9ib3JkZXIoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVyPi87cmV0dXJuIGZ1'@;
put 'bmN0aW9uKHZlLFNlLEhlLEJlKXt2YXIgZHQsQ3QsR2U9e30sbnQ9e307cmV0dXJuKGR0PXZlLm1hdGNoKHkpKSYmKHlEKGR0LEdlLEhlLEJlKSwoR2UuRm9udHN8fFtdKVswXSYmVXQobnQsR2UuRm9udHNbMF0pKSwoZHQ9dmUubWF0Y2goUCkpJiYoQ3Q9bG4oUGkoZHRbMF0pKSxudC56PUN0'@;
put 'LmZvcm1hdENvZGU/eHIoQ3QuZm9ybWF0Q29kZSk6KFNlLk51bWJlckZtdHx8W10pWytDdC5udW1GbXRJZF18fCJHZW5lcmFsIiksKGR0PXZlLm1hdGNoKEwpKSYmKE85KGR0LEdlLEhlLEJlKSwoR2UuRmlsbHN8fFtdKVswXSYmVXQobnQsR2UuRmlsbHNbMF0pKSwoZHQ9dmUubWF0Y2gocmUp'@;
put 'KSYmKEwzKGR0LEdlLEhlLEJlKSwoR2UuQm9yZGVyc3x8W10pWzBdJiZVdChudCxHZS5Cb3JkZXJzWzBdKSksbnR9fSgpLE1aPS88KD86XHcrOik/ZHhmPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmPi9nLGtaPS88KD86XHcrOik/dGFibGVTdHlsZVxiLio/PltcU1xzXSo/PFwvKD86XHcrOik/'@;
put 'dGFibGVTdHlsZT4vZzt2YXIgWm09ZnVuY3Rpb24oKXt2YXIgUD0vPCg/Olx3KzopP251bUZtdHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/bnVtRm10cz4vLEw9LzwoPzpcdys6KT9jZWxsU3R5bGVYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlWGZzPi8sUT0v'@;
put 'PCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlcz4vLHJlPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8scGU9LzwoPzpcdys6KT9maWxscyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6'@;
put 'KT9maWxscz4vLF9lPS88KD86XHcrOik/Zm9udHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udHM+Lyx2ZT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vLFNlPS88KD86XHcrOik/aW5kZXhlZENvbG9ycyhbXj5dKik+W1xTXHNd'@;
put 'Kj88XC8oPzpcdys6KT9pbmRleGVkQ29sb3JzPi8sSGU9LzwoPzpcdys6KT90YWJsZVN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlcz4vLEJlPS88KD86XHcrOik/ZHhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9keGZzPi87cmV0dXJuIGZ1bmN0aW9u'@;
put 'KG50LGR0LEN0KXt2YXIgYnQsY3Q9e307cmV0dXJuIG50PygoYnQ9KG50PW50LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIikpLm1hdGNoKFNlKSkmJmZ1bmN0aW9uIFA5KHksUCxMKXtQLkluZGV4ZWR8'@;
put 'fChQLkluZGV4ZWQ9W10pO3ZhciBRPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBwZT1sbihyZSk7c3dpdGNoKGpuKHBlWzBdKSl7Y2FzZSI8aW5kZXhlZENvbG9ycz4iOmNhc2UiPGluZGV4ZWRDb2xvcnMiOmNhc2UiPGluZGV4ZWRDb2xvcnMvPiI6'@;
put 'Y2FzZSI8L2luZGV4ZWRDb2xvcnM+IjpjYXNlIjwvcmdiQ29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxyZ2JDb2xvciI6ZGVsZXRlIHBlWzBdO3ZhciBfZT1wYXJzZUludChwZS5yZ2Iuc2xpY2UoLTYpLDE2KTtQLkluZGV4'@;
put 'ZWQucHVzaChbX2U+PjE2JjI1NSxfZT4+OCYyNTUsMjU1Jl9lXSk7YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiBjZWxsU3R5'@;
put 'bGVzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goUCkpJiZmdW5jdGlvbiBDRCh5LFAsTCl7UC5OdW1iZXJGbXQ9W107Zm9yKHZhciBRPWx0KHcuX3RhYmxlKSxyZT0wO3JlPFEubGVuZ3RoOysrcmUpUC5OdW1iZXJGbXRbUVtyZV1dPXcuX3RhYmxlW1FbcmVdXTt2YXIgcGU9eVswXS5t'@;
put 'YXRjaCgkdCk7aWYocGUpZm9yKHJlPTA7cmU8cGUubGVuZ3RoOysrcmUpe3ZhciBfZT1sbihwZVtyZV0pO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPG51bUZtdHMiOmNhc2UiPC9udW1GbXRzPiI6Y2FzZSI8bnVtRm10cy8+IjpjYXNlIjxudW1GbXRzPiI6Y2FzZSI8L251bUZtdD4iOmJyZWFr'@;
put 'O2Nhc2UiPG51bUZtdCI6dmFyIHZlPXhyKFBpKF9lLmZvcm1hdENvZGUpKSxTZT1wYXJzZUludChfZS5udW1GbXRJZCwxMCk7aWYoUC5OdW1iZXJGbXRbU2VdPXZlLFNlPjApe2lmKFNlPjM5Mil7Zm9yKFNlPTM5MjtTZT42MCYmbnVsbCE9UC5OdW1iZXJGbXRbU2VdOy0tU2UpO1AuTnVtYmVy'@;
put 'Rm10W1NlXT12ZX13LmxvYWQodmUsU2UpfWJyZWFrO2RlZmF1bHQ6aWYoTC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitfZVswXSsiIGluIG51bUZtdHMiKX19fShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKF9lKSkmJnlEKGJ0LGN0LGR0LEN0KSwoYnQ9bnQubWF0Y2gocGUp'@;
put 'KSYmTzkoYnQsY3QsZHQsQ3QpLChidD1udC5tYXRjaCh2ZSkpJiZMMyhidCxjdCxkdCxDdCksKGJ0PW50Lm1hdGNoKEwpKSYmZnVuY3Rpb24gaEMoeSxQLEwpe1AuQ2VsbFN0eWxlWGY9W107dmFyIFEscmU9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFy'@;
put 'IF9lPWxuKHBlKSx2ZT0wO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPGNlbGxTdHlsZVhmcyI6Y2FzZSI8Y2VsbFN0eWxlWGZzPiI6Y2FzZSI8Y2VsbFN0eWxlWGZzLz4iOmNhc2UiPC9jZWxsU3R5bGVYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rp'@;
put 'b24+IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKFE9X2UpWzBdLHZlPTA7dmU8emQubGVuZ3RoOysrdmUpUVt6ZFt2ZV1dJiYoUVt6ZFt2ZV1dPXBh'@;
put 'cnNlSW50KFFbemRbdmVdXSwxMCkpO2Zvcih2ZT0wO3ZlPFoyLmxlbmd0aDsrK3ZlKVFbWjJbdmVdXSYmKFFbWjJbdmVdXT15cihRW1oyW3ZlXV0pKTtpZihQLk51bWJlckZtdCYmUS5udW1GbXRJZD4zOTIpZm9yKHZlPTM5Mjt2ZT42MDstLXZlKWlmKFAuTnVtYmVyRm10W1EubnVtRm10SWRd'@;
put 'PT1QLk51bWJlckZtdFt2ZV0pe1EubnVtRm10SWQ9dmU7YnJlYWt9UC5DZWxsU3R5bGVYZi5wdXNoKFEpO2JyZWFrO2Nhc2UiPGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciBTZT17fTtfZS52ZXJ0aWNhbCYmKFNlLnZlcnRpY2FsPV9lLnZlcnRpY2FsKSxfZS5ob3Jpem9udGFs'@;
put 'JiYoU2UuaG9yaXpvbnRhbD1fZS5ob3Jpem9udGFsKSxudWxsIT1fZS50ZXh0Um90YXRpb24mJihTZS50ZXh0Um90YXRpb249X2UudGV4dFJvdGF0aW9uKSxfZS5pbmRlbnQmJihTZS5pbmRlbnQ9X2UuaW5kZW50KSxfZS53cmFwVGV4dCYmKFNlLndyYXBUZXh0PV9lLndyYXBUZXh0KSxfZS5z'@;
put 'aHJpbmtUb0ZpdCYmKFNlLnNocmlua1RvRml0PXlyKF9lLnNocmlua1RvRml0KSksUS5hbGlnbm1lbnQ9U2U7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6US5wcm90ZWN0aW9uPXt9LHlyKF9lLmhpZGRlbikmJihRLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1fZS5sb2NrZWQmJihRLnBy'@;
put 'b3RlY3Rpb24uZWRpdGFibGU9IXlyKF9lLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPGV4dCI6cmU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFyZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK19lWzBdKyIgaW4gY2VsbFN0eWxl'@;
put 'WGZzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goUSkpJiZmdW5jdGlvbiBTRCh5LFAsTCl7UC5DZWxsU3R5bGVYZnx8KFAuQ2VsbFN0eWxlWGY9W10pO3ZhciBRPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBwZT1sbihyZSk7c3dpdGNoKGpu'@;
put 'KHBlWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNhc2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxTdHlsZXM+IjpjYXNlIjwveGY+IjpjYXNlIjwvY2VsbFN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJl'@;
put 'YWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIHBlWzBdO3ZhciBfZT0rcGUueGZJZDtpZihQLkNlbGxTdHlsZVhmW19lXSlQLkNlbGxTdHlsZVhmW19lXS5zdHlsZT1QaShwZS5uYW1lKTtlbHNlIGlmKCFwZS5idWlsdGluSWQpdGhyb3cgbmV3IEVycm9yKCJD'@;
put 'b3VsZCBub3QgZmluZCBDZWxsU3R5bGUgIitfZSk7YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9'@;
put 'KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2gocmUpKSYmZnVuY3Rpb24gZEMoeSxQLEwpe1AuQ2VsbFhmPVtdO3ZhciBRLHJlPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBfZT1sbihwZSksdmU9MDtzd2l0Y2goam4oX2VbMF0pKXtjYXNlIjxjZWxsWGZz'@;
put 'IjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0'@;
put 'PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoUT1fZSlbMF0sdmU9MDt2ZTx6ZC5sZW5ndGg7Kyt2ZSlRW3pkW3ZlXV0mJihRW3pkW3ZlXV09cGFyc2VJbnQoUVt6ZFt2ZV1dLDEwKSk7Zm9yKHZlPTA7dmU8WjIubGVuZ3RoOysrdmUpUVtaMlt2ZV1dJiYoUVtaMlt2'@;
put 'ZV1dPXlyKFFbWjJbdmVdXSkpO2lmKFAuTnVtYmVyRm10JiZRLm51bUZtdElkPjM5Milmb3IodmU9MzkyO3ZlPjYwOy0tdmUpaWYoUC5OdW1iZXJGbXRbUS5udW1GbXRJZF09PVAuTnVtYmVyRm10W3ZlXSl7US5udW1GbXRJZD12ZTticmVha31QLkNlbGxTdHlsZVhmJiZRLnhmSWQmJlAuQ2Vs'@;
put 'bFN0eWxlWGZbUS54ZklkXSYmUC5DZWxsU3R5bGVYZltRLnhmSWRdLnN0eWxlJiYoUS5zdHlsZT1QLkNlbGxTdHlsZVhmW1EueGZJZF0uc3R5bGUpLFAuQ2VsbFhmLnB1c2goUSk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIFNlPXt9O19lLnZlcnRpY2Fs'@;
put 'JiYoU2UudmVydGljYWw9X2UudmVydGljYWwpLF9lLmhvcml6b250YWwmJihTZS5ob3Jpem9udGFsPV9lLmhvcml6b250YWwpLG51bGwhPV9lLnRleHRSb3RhdGlvbiYmKFNlLnRleHRSb3RhdGlvbj1fZS50ZXh0Um90YXRpb24pLF9lLmluZGVudCYmKFNlLmluZGVudD1fZS5pbmRlbnQpLF9l'@;
put 'LndyYXBUZXh0JiYoU2Uud3JhcFRleHQ9eXIoX2Uud3JhcFRleHQpKSxfZS5zaHJpbmtUb0ZpdCYmKFNlLnNocmlua1RvRml0PXlyKF9lLnNocmlua1RvRml0KSksUS5hbGlnbm1lbnQ9U2U7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6US5wcm90ZWN0aW9uPXt9LHlyKF9lLmhpZGRlbikmJihR'@;
put 'LnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1fZS5sb2NrZWQmJihRLnByb3RlY3Rpb24uZWRpdGFibGU9IXlyKF9lLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6cmU9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpjYXNlIjwv'@;
put 'ZXh0PiI6cmU9ITE7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURiYmIXJlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrX2VbMF0rIiBpbiBjZWxsWGZzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goQmUpKSYmZnVuY3Rpb24gRjkoeSxQLEwsUSl7UC5EWEZ8fChQLkRYRj1b'@;
put 'XSksKHlbMF0ubWF0Y2goTVopfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyZSl7UC5EWEYucHVzaCh4RChyZSxQLEwsUSkpfSl9KGJ0LGN0LGR0LEN0KSwoYnQ9bnQubWF0Y2goSGUpKSYmZnVuY3Rpb24gQVooeSxQLEwsUSl7UC5UYWJsZXx8KFAuVGFibGU9W10pLCh5WzBdLm1hdGNoKGtaKXx8'@;
put 'W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe1AuVGFibGUucHVzaChmdW5jdGlvbiB4Wih5LFAsTCxRKXt2YXIgcmU9ITEscGU9e307cmV0dXJuKHkubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihfZSl7dmFyIHZlPWxuKF9lKTtzd2l0Y2goam4odmVbMF0pKXtjYXNlIjx0YWJsZVN0'@;
put 'eWxlPiI6Y2FzZSI8dGFibGVTdHlsZSI6cGUubmFtZT12ZS5uYW1lLnJlcGxhY2UoL14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxwZS5yYXduYW1lPXZlLm5hbWUscGUucGl2b3Q9IXZlLnBpdm90fHx5cih2ZS5waXZvdCkscGUudGFibGU9IXZlLnRhYmxlfHx5cih2ZS50YWJsZSk7YnJlYWs7'@;
put 'Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHRhYmxlU3R5bGVFbGVtZW50IjppZih2ZS50eXBlJiZ2ZS5keGZJZCl7aWYoIVAuRFhGfHwhUC5EWEZbK3ZlLmR4Zklk'@;
put 'XSl0aHJvdyBuZXcgRXJyb3IoX2UrIiBjYW5ub3QgZmluZCBEWEYiKTtwZVt2ZS50eXBlXT1QLkRYRlsrdmUuZHhmSWRdfWJyZWFrO2Nhc2UiPGV4dCI6cmU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUSYmUS5XVEYmJiFyZSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'InVucmVjb2duaXplZCAiK3ZlWzBdKyIgaW4gdGFibGVTdHlsZSIpfX0pLHBlfShyZSxQLDAsUSkpfSl9KGJ0LGN0LDAsQ3QpLChjdC5Gb250c3x8W10pWzBdJiZaMShjdC5Gb250c1swXSksY3QpOmN0fX0oKSxmQz1Tcigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6aXMubWFpblswXSwieG1s'@;
put 'bnM6dnQiOmlzLnZ0fSk7ZnVuY3Rpb24gcEMoeSxQKXt2YXIgUSxMPVtCbixmQ107eS5TU0YmJm51bGwhPShRPWZ1bmN0aW9uIHptKHkpe3ZhciBQPVsiPG51bUZtdHM+Il07cmV0dXJuW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihMKXtmb3IodmFy'@;
put 'IFE9TFswXTtRPD1MWzFdOysrUSludWxsIT15W1FdJiYoUFtQLmxlbmd0aF09U3IoIm51bUZtdCIsbnVsbCx7bnVtRm10SWQ6USxmb3JtYXRDb2RlOkhyKHlbUV0pfSkpfSksMT09PVAubGVuZ3RoPyIiOihQW1AubGVuZ3RoXT0iPC9udW1GbXRzPiIsUFswXT1TcigibnVtRm10cyIsbnVsbCx7'@;
put 'Y291bnQ6UC5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLFAuam9pbigiIikpfSh5LlNTRikpJiYoTFtMLmxlbmd0aF09USksTFtMLmxlbmd0aF09ZnVuY3Rpb24gd0QoeSl7dmFyIFA9W107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1bIjxmb250PiJdO0wuYm9sZCYm'@;
put 'US5wdXNoKCI8Yi8+IiksTC5pdGFsaWMmJlEucHVzaCgiPGkvPiIpLEwuc3RyaWtlJiZRLnB1c2goIjxzdHJpa2UvPiIpLEwuc2hhZG93JiZRLnB1c2goIjxzaGFkb3cvPiIpLGptWytMLnVuZGVybGluZV0mJlEucHVzaCgnPHUgdmFsPSInK2ptWytMLnVuZGVybGluZV0rJyIvPicpLEwuc3om'@;
put 'JlEucHVzaCgnPHN6IHZhbD0iJytMLnN6KyciLz4nKSxMLmNvbG9yJiZRLnB1c2goVWQoTC5jb2xvciwhMCkpLEwubmFtZSYmUS5wdXNoKCc8bmFtZSB2YWw9IicrTC5uYW1lKyciLz4nKSxMLmZhbWlseSYmUS5wdXNoKCc8ZmFtaWx5IHZhbD0iJytMLmZhbWlseSsnIi8+JyksTC5zY2hlbWUm'@;
put 'JlEucHVzaCgnPHNjaGVtZSB2YWw9IicrTC5zY2hlbWUrJyIvPicpLEwudmFsaWduJiZRLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK0wudmFsaWduKygic3ViIj09TC52YWxpZ258fCJzdXBlciI9PUwudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+JyksUC5wdXNoKFEuam9pbigiIikrIjwvZm9u'@;
put 'dD4iKX0pLCc8Zm9udHMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2ZvbnRzPiJ9KCh5LlN0eWxlc3x8e30pLkZvbnRzfHxbXSksTFtMLmxlbmd0aF09ZnVuY3Rpb24gYkQoeSl7dmFyIFA9W107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1udWxsO2lm'@;
put 'KEwuc3RvcHMmJkwuc3RvcHMubGVuZ3RoKXt2YXIgcmU9e307TC5hbmdsZSYmKHJlLmRlZ3JlZT1NYXRoLnJvdW5kKEwuYW5nbGUpKSxRPUwuc3RvcHMubWFwKGZ1bmN0aW9uKHBlKXtyZXR1cm4gU3IoInN0b3AiLFVkKHBlLCJjb2xvciIsITApLG51bGwhPXBlLnY/e3Bvc2l0aW9uOnBlLnZ9'@;
put 'Ont9KX0pLFAucHVzaCgiPGZpbGw+IitTcigiZ3JhZGllbnRGaWxsIixRLmpvaW4oIiIpLHJlKSsiPC9maWxsPiIpfWVsc2V7aWYoTC5mZ0NvbG9yKXtpZihRPShRfHwiIikrIjxmZ0NvbG9yICIsTC5mZ0NvbG9yLnRoZW1lKVErPSd0aGVtZT0iJytMLmZnQ29sb3IudGhlbWUrJyInKyhMLmZn'@;
put 'Q29sb3IudGludD8nIHRpbnQ9IicrTC5mZ0NvbG9yLnRpbnQrJyInOiIiKSsiLz4iO2Vsc2UgaWYobnVsbCE9TC5mZ0NvbG9yLmluZGV4JiZudWxsPT1MLmZnQ29sb3IucmdiKVErPSdpbmRleGVkPSInK0wuZmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKEwuZmdDb2xvci5hdXRvKVErPSdh'@;
put 'dXRvPSIxIi8+JztlbHNle2lmKG51bGw9PUwuZmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3IgIitsdChMLmZnQ29sb3IpLmpvaW4oInwiKSk7USs9J3JnYj0iRkYnK091KEwuZmdDb2xvci5yZ2IpKyciLz4nfSJzb2xpZCI9PUwucGF0dGVyblR5cGUmJiFMLmJnQ29sb3Im'@;
put 'JihMLmJnQ29sb3I9e2luZGV4OjY0fSl9aWYoTC5iZ0NvbG9yKWlmKFE9KFF8fCIiKSsiPGJnQ29sb3IgIixMLmJnQ29sb3IudGhlbWUpUSs9J3RoZW1lPSInK0wuYmdDb2xvci50aGVtZSsnIi8+JztlbHNlIGlmKG51bGwhPUwuYmdDb2xvci5pbmRleCYmbnVsbD09TC5iZ0NvbG9yLnJnYilR'@;
put 'Kz0naW5kZXhlZD0iJytMLmJnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZihMLmJnQ29sb3IuYXV0bylRKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihudWxsPT1MLmJnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrbHQoTC5iZ0NvbG9yKS5qb2luKCJ8IikpO1ErPSdyZ2I9'@;
put 'IkZGJytPdShMLmJnQ29sb3IucmdiKSsnIi8+J31QLnB1c2goIjxmaWxsPiIrU3IoInBhdHRlcm5GaWxsIixRLHtwYXR0ZXJuVHlwZTpMLnBhdHRlcm5UeXBlfSkrIjwvZmlsbD4iKX19KSwnPGZpbGxzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9maWxscz4ifSgoeS5T'@;
put 'dHlsZXN8fHt9KS5GaWxsc3x8W10pLExbTC5sZW5ndGhdPWZ1bmN0aW9uIHdaKHkpe3ZhciBQPVtdO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9W107US5wdXNoKFIzKEwubGVmdCwibGVmdCIpKSxRLnB1c2goUjMoTC5yaWdodCwicmlnaHQiKSksUS5wdXNoKFIzKEwudG9w'@;
put 'LCJ0b3AiKSksUS5wdXNoKFIzKEwuYm90dG9tLCJib3R0b20iKSksUS5wdXNoKFIzKEwuZGlhZ29uYWwsImRpYWdvbmFsIikpLFAucHVzaCgiPGJvcmRlcj4iK1Euam9pbigiIikrIjwvYm9yZGVyPiIpfSksJzxib3JkZXJzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9i'@;
put 'b3JkZXJzPiJ9KCh5LlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxMW0wubGVuZ3RoXT1mdW5jdGlvbiBTWih5KXt2YXIgUD1bJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIi8+J107aWYoeSlmb3IodmFyIEw9MTtMPHkubGVuZ3RoOysrTClQLnB1'@;
put 'c2goU3IoInhmIixudWxsLHtudW1GbXRJZDp5W0xdLm51bUZtdElkfHwwLGZvbnRJZDp5W0xdLmZvbnRJZHx8MCxmaWxsSWQ6eVtMXS5maWxsSWR8fDAsYm9yZGVySWQ6eVtMXS5ib3JkZXJJZHx8MH0pKTtyZXR1cm4nPGNlbGxTdHlsZVhmcyBjb3VudD0iJytQLmxlbmd0aCsnIj4nK1Auam9p'@;
put 'bigiIikrIjwvY2VsbFN0eWxlWGZzPiJ9KFAuY2VsbFN0eWxlWGZzKSwoUT1mdW5jdGlvbiBDWih5KXt2YXIgUD1bXTtyZXR1cm4gUFtQLmxlbmd0aF09U3IoImNlbGxYZnMiLG51bGwpLHkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1MLmFsaWdubWVudDtkZWxldGUgTC5hbGlnbm1lbnQ7'@;
put 'dmFyIHJlPUwucHJvdGVjdGlvbjtkZWxldGUgTC5wcm90ZWN0aW9uO3ZhciBwZT1RP1NyKCJhbGlnbm1lbnQiLG51bGwsUSk6IiI7cGUrPXJlP1NyKCJwcm90ZWN0aW9uIixudWxsLHtoaWRkZW46cmUuaGlkZGVuPzE6MCxsb2NrZWQ6cmUuZWRpdGFibGU/MDoxfSk6IiIsUFtQLmxlbmd0aF09'@;
put 'U3IoInhmIixwZXx8bnVsbCxMKSxRJiYoTC5hbGlnbm1lbnQ9USkscmUmJihMLnByb3RlY3Rpb249cmUpfSksUFtQLmxlbmd0aF09IjwvY2VsbFhmcz4iLDI9PT1QLmxlbmd0aD8iIjooUFswXT1TcigiY2VsbFhmcyIsbnVsbCx7Y291bnQ6UC5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIp'@;
put 'LFAuam9pbigiIikpfShQLmNlbGxYZnMpKSYmKExbTC5sZW5ndGhdPVEpLExbTC5sZW5ndGhdPWZ1bmN0aW9uIE1EKHkpe3ZhciBQPVsnPGNlbGxTdHlsZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIvPiddO2lmKHkpZm9yKHZhciBMPTE7TDx5Lmxlbmd0aDsrK0wpUC5w'@;
put 'dXNoKFNyKCJjZWxsU3R5bGUiLG51bGwse25hbWU6eVtMXS5uYW1lLHhmSWQ6TH0pKTtyZXR1cm4nPGNlbGxTdHlsZXMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2NlbGxTdHlsZXM+In0oUC5jZWxsU3R5bGVYZnMpLHkuU3R5bGVzLkRYRnx8KHkuU3R5bGVzLkRYRj1b'@;
put 'XSk7dmFyIHJlPWZ1bmN0aW9uIFRaKHksUCxMKXt2YXIgUT1bJzx0YWJsZVN0eWxlcyBjb3VudD0iJysoeXx8W10pLmxlbmd0aCsnIiBkZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRlZmF1bHRQaXZvdFN0eWxlPSJQaXZvdFN0eWxlTWVkaXVtNCInXTtyZXR1cm4geSYm'@;
put 'eS5sZW5ndGg/KFFbMF0rPSI+Iix5LmZvckVhY2goZnVuY3Rpb24ocmUpe1EucHVzaChmdW5jdGlvbiBFWih5LFAsTCl7dmFyIFE9W107WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJzdENvbHVtbiIsImxhc3RDb2x1bW4iLCJmaXJzdFJvd1N0cmlwZSIsInNlY29u'@;
put 'ZFJvd1N0cmlwZSIsImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3RyaXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhlYWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwiLCJmaXJzdFN1YnRvdGFsQ29sdW1uIiwic2Vjb25kU3VidG90YWxDb2x1bW4i'@;
put 'LCJ0aGlyZFN1YnRvdGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29uZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJvdyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vjb25kQ29sdW1uU3ViaGVhZGluZyIsInRoaXJkQ29sdW1uU3ViaGVhZGluZyIs'@;
put 'ImZpcnN0Um93U3ViaGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGlyZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJlbHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtpZih5W3BlXSl7dmFyIF9lPUZvKFAseVtwZV0pO1EucHVzaCgnPHRhYmxl'@;
put 'U3R5bGVFbGVtZW50IGR4ZklkPSInK19lKyciIHR5cGU9IicrcGUrJyIvPicpfX0pO3ZhciByZT0nPHRhYmxlU3R5bGUgY291bnQ9IicrUS5sZW5ndGgrJyIgcGl2b3Q9IicrICshIXkucGl2b3QrJyIgbmFtZT0iJyt5Lm5hbWUrJyInO3JldHVybiBRLmxlbmd0aD9yZSsiPiIrUS5qb2luKCIi'@;
put 'KSsiPC90YWJsZVN0eWxlPiI6cmUrIi8+In0ocmUsUCkpfSksUS5qb2luKCIiKSsiPC90YWJsZVN0eWxlcz4iKTpRWzBdKyIvPiJ9KCh5LlN0eWxlc3x8e30pLlRhYmxlfHxbXSx5LlN0eWxlcy5EWEYpO3JldHVybiBMW0wubGVuZ3RoXT1mdW5jdGlvbiBVbSh5LFApe2lmKCF5Lmxlbmd0aCly'@;
put 'ZXR1cm4nPGR4ZnMgY291bnQ9IjAiLz4nO3ZhciBMPVsnPGR4ZnMgY291bnQ9IicreS5sZW5ndGgrJyI+J107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihRKXtMLnB1c2goZnVuY3Rpb24gRUQoeSxQKXt2YXIgTD17Ym9sZDoiYiIsaXRhbGljOiJpIix2YWxpZ246InZlcnRBbGlnbiJ9LFE9'@;
put 'WyI8ZHhmPiJdLHJlPVtdLHBlPVtdLF9lPVtdLFNlPVtdO3JldHVybiBsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtzd2l0Y2goQmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlInVuZGVybGluZSI6Y2FzZSJjb2xvciI6Y2FzZSJ2YWxpZ24iOmNhc2Uic3oi'@;
put 'OmNhc2UibmFtZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjaGFyc2V0IjpjYXNlImZhbWlseSI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOmNhc2Uic2NoZW1lIjpyZS5wdXNoKEJlKTticmVhaztjYXNlImJnQ29sb3IiOmNhc2UiZmdDb2xvciI6X2UucHVzaChCZSk7'@;
put 'YnJlYWs7Y2FzZSJ6IjpwZS5wdXNoKEJlKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjpTZS5wdXNoKEJlKTticmVhaztjYXNlInBhdHRlcm5UeXBlIjpjYXNl'@;
put 'ImRpYWdvbmFsRG93biI6Y2FzZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNlImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgIitCZSsiIGluIERYRiJ9fSkscmUubGVuZ3RoPjAmJihRLnB1c2goIjxmb250PiIpLHJlLmZvckVhY2goZnVuY3Rpb24oQmUpe3N3'@;
put 'aXRjaChCZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpRLnB1c2goIjwiKyhMW0JlXXx8QmUpKycgdmFsPSInKyh5W0JlXT8iMSI6IjAiKSsnIi8+Jyk7YnJlYWs7Y2Fz'@;
put 'ZSJjb2xvciI6US5wdXNoKFVkKHlbQmVdLEJlLCEwKSk7YnJlYWs7Y2FzZSJmYW1pbHkiOmNhc2UibmFtZSI6Y2FzZSJzeiI6Y2FzZSJzY2hlbWUiOlEucHVzaCgiPCIrKExbQmVdfHxCZSkrJyB2YWw9IicreVtCZV0rJyIvPicpO2JyZWFrO2Nhc2UidW5kZXJsaW5lIjpRLnB1c2goJzx1IHZh'@;
put 'bD0iJytqbVt5W0JlXXx8MF0rJyIvPicpO2JyZWFrO2Nhc2UidmFsaWduIjpRLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK3kudmFsaWduKygic3ViIj09eS52YWxpZ258fCJzdXBlciI9PXkudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+Jyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRl'@;
put 'ZCAiK0JlKyIgOiBmb250IERYRiJ9fSksUS5wdXNoKCI8L2ZvbnQ+IikpLHBlLmxlbmd0aD4wJiZRLnB1c2goJzxudW1GbXQgZm9ybWF0Q29kZT0iJytIcih5LnopKyciIG51bUZtdElkPSInK2Z1bmN0aW9uIFkzKHksUCl7aWYoIm51bWJlciI9PXR5cGVvZiB5KXJldHVybiB5O3ZhciBMPVAu'@;
put 'cmV2c3NmW3k/PyJHZW5lcmFsIl0sUT02MDtpZihudWxsPT1MKWZvcig7UTwzOTI7KytRKWlmKG51bGw9PVAuc3NmW1FdKXJldHVybiB3LmxvYWQoeSxRKSxQLnNzZltRXT15LFAucmV2c3NmW3ldPVEsUTtyZXR1cm4gTH0oeS56LFApKyciLz4nKSxfZS5sZW5ndGg+MCYmKFEucHVzaCgiPGZp'@;
put 'bGw+IiksUS5wdXNoKCI8cGF0dGVybkZpbGwiKyh5LnBhdHRlcm5UeXBlPycgcGF0dGVyblR5cGU9IicreS5wYXR0ZXJuVHlwZSsnIj4nOiI+IikpLF9lLmZvckVhY2goZnVuY3Rpb24oQmUpe3N3aXRjaChCZSl7Y2FzZSJwYXR0ZXJuVHlwZSI6YnJlYWs7Y2FzZSJmZ0NvbG9yIjpjYXNlImJn'@;
put 'Q29sb3IiOlEucHVzaChVZCh5W0JlXSxCZSwhMCkpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitCZSsiIDogZmlsbCBEWEYifX0pLFEucHVzaCgiPC9wYXR0ZXJuRmlsbD4iKSxRLnB1c2goIjwvZmlsbD4iKSksU2UubGVuZ3RoPjA/KFEucHVzaChbIjxib3JkZXIiLG51bGwh'@;
put 'PXkuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyArISF5LmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9eS5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEheS5kaWFnb25hbFVwKyciJzoiIiwiPiJdLmpvaW4oIiIpKSxTZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtRLnB1c2go'@;
put 'UjMoeVtCZV0sQmUpKX0pLFEucHVzaCgiPC9ib3JkZXI+IikpOihudWxsIT15LmRpYWdvbmFsRG93bnx8bnVsbCE9eS5kaWFnb25hbFVwKSYmUS5wdXNoKFsiPGJvcmRlciIsbnVsbCE9eS5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIXkuZGlhZ29uYWxEb3duKyciJzoiIixu'@;
put 'dWxsIT15LmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISF5LmRpYWdvbmFsVXArJyInOiIiLCIvPiJdLmpvaW4oIiIpKSwxPT1RLmxlbmd0aD8iPGR4Zi8+IjpRLmpvaW4oIiIpKyI8L2R4Zj4ifShRLFApKX0pLEwuam9pbigiIikrIjwvZHhmcz4ifSh5LlN0eWxlcy5EWEYsUCksTFtM'@;
put 'Lmxlbmd0aF09cmUsTC5sZW5ndGg+MiYmKExbTC5sZW5ndGhdPSI8L3N0eWxlU2hlZXQ+IixMWzFdPUxbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEwuam9pbigiIil9ZnVuY3Rpb24gTzMoeSxQLEwpe0x8fChMPWZyKDYrNCpQLmxlbmd0aCkpLEwud3JpdGVfc2hpZnQoMix5KSxuYyhQLEwpO3Zh'@;
put 'ciBRPUwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMO3JldHVybiBudWxsPT1MLmwmJihMLmw9TC5sZW5ndGgpLFF9ZnVuY3Rpb24gWW0oeSl7cmV0dXJue2NvbG9yOkRkKHkpLHBvczptYSh5KX19SGkuU1RZPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9j'@;
put 'dW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyI7dmFyIFY0PVsibm9uZSIsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxs'@;
put 'aXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLFkyPWJlKFY0KSxXbT1bImdlbmVyYWwiLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJmaWxsIiwi'@;
put 'anVzdGlmeSIsImNlbnRlckNvbnRpbnVvdXMiLCJkaXN0cmlidXRlZCJdLEI0PVsidG9wIiwiY2VudGVyIiwiYm90dG9tIiwianVzdGlmeSIsImRpc3RyaWJ1dGVkIl07ZnVuY3Rpb24gTjkoeSxQLEwpe0x8fChMPWZyKDE2KSksTC53cml0ZV9zaGlmdCgyLFB8fDApLEwud3JpdGVfc2hpZnQo'@;
put 'Mix5Lm51bUZtdElkfHwwKSxMLndyaXRlX3NoaWZ0KDIseS5mb250SWR8fDApLEwud3JpdGVfc2hpZnQoMix5LmZpbGxJZHx8MCksTC53cml0ZV9zaGlmdCgyLHkuYm9yZGVySWR8fDApLEwud3JpdGVfc2hpZnQoMSx5LmFsaWdubWVudCYmeS5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHwwKSxM'@;
put 'LndyaXRlX3NoaWZ0KDEseS5hbGlnbm1lbnQmJnkuYWxpZ25tZW50LmluZGVudHx8MCk7dmFyIFE9MCxyZT0wO2lmKHkuYWxpZ25tZW50KXtpZih5LmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgcGU9V20uaW5kZXhPZih5LmFsaWdubWVudC5ob3Jpem9udGFsKTtwZTwwJiYocGU9MCksUXw9'@;
put 'cGV9aWYoeS5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBfZT1CNC5pbmRleE9mKHkuYWxpZ25tZW50LnZlcnRpY2FsKTtfZTwwJiYoX2U9MiksUXw9X2U8PDN9eS5hbGlnbm1lbnQud3JhcFRleHQmJihRfD02NCkseS5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihyZXw9MSl9cmV0dXJuIEwud3Jp'@;
put 'dGVfc2hpZnQoMSxRKSxMLndyaXRlX3NoaWZ0KDEscmUpLEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTH12YXIgVzI9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwiaGFpciIsIm1lZGl1bURhc2hlZCIsImRh'@;
put 'c2hEb3QiLCJtZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiBqNCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7eS5sKz0xO3ZhciBMPURkKHkpO3JldHVybntzdHlsZTpXMltQXSxjb2xvcjpMfX1mdW5jdGlvbiBQ'@;
put 'Myh5LFApe3JldHVybiBQfHwoUD1mcigxMCkpLHkmJnkuc3R5bGUmJiIiIT15LnN0eWxlJiYibm9uZSIhPXkuc3R5bGUmJi0xIT09VzIuaW5kZXhPZih5LnN0eWxlKT8oUC53cml0ZV9zaGlmdCgxLFcyLmluZGV4T2YoeS5zdHlsZSkpLFAud3JpdGVfc2hpZnQoMSwwKSx5LmNvbG9yP1IyKHku'@;
put 'Y29sb3IsUCk6KFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCkpKTooUC53cml0ZV9zaGlmdCgxLDApLFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApKSxQfWZ1bmN0aW9uIHR1KHksUCl7cmV0dXJuIFB8fChQPWZyKDUy'@;
put 'KSksUC53cml0ZV9zaGlmdCg0LHkueGZJZCksUC53cml0ZV9zaGlmdCgyLDEpLFAud3JpdGVfc2hpZnQoMSwreS5idWlsdGluSWQpLFAud3JpdGVfc2hpZnQoMSwwKSxBZCh5Lm5hbWV8fCIiLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfWZ1bmN0aW9uIHo0KHksUCl7IVB8fCFQ'@;
put 'LnRoZW1lRWxlbWVudHN8fCFQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT15LnRoZW1lJiYoeS5yZ2I9QmQoUC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVt5LnRoZW1lXS5yZ2IseS50aW50fHwwKSl9ZnVuY3Rpb24gUEQoeSxQKXt2YXIgTD15YygpO3JldHVybiB1aShMLCJCcnRC'@;
put 'ZWdpblN0eWxlU2hlZXQiKSxmdW5jdGlvbiBWYyh5LFApe2lmKFApe3ZhciBMPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihRKXtmb3IodmFyIHJlPVFbMF07cmU8PVFbMV07KytyZSludWxsIT1QW3JlXSYmKytMfSksMCE9TCYmKHVpKHksIkJy'@;
put 'dEJlZ2luRm10cyIsa3UoTCkpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oUSl7Zm9yKHZhciByZT1RWzBdO3JlPD1RWzFdOysrcmUpbnVsbCE9UFtyZV0mJnVpKHksIkJydEZtdCIsTzMocmUsUFtyZV0pKX0pLHVpKHksIkJydEVuZEZtdHMiKSl9'@;
put 'fShMLHkuU1NGKSxmdW5jdGlvbiBVNCh5LFApe3ZhciBMPVAubGVuZ3RoOzAhPUwmJih1aSh5LCJCcnRCZWdpbkZvbnRzIixrdShMKSksUC5mb3JFYWNoKGZ1bmN0aW9uKFEpe3VpKHksIkJydEZvbnQiLGZ1bmN0aW9uIHZDKHksUCl7UHx8KFA9ZnIoMTUzKSksUC53cml0ZV9zaGlmdCgyLDIw'@;
put 'Knkuc3opLGZ1bmN0aW9uIFloKHksUCl7UHx8KFA9ZnIoMikpLFAud3JpdGVfc2hpZnQoMSwoeS5pdGFsaWM/MjowKXwoeS5zdHJpa2U/ODowKXwoeS5vdXRsaW5lPzE2OjApfCh5LnNoYWRvdz8zMjowKXwoeS5jb25kZW5zZT82NDowKXwoeS5leHRlbmQ/MTI4OjApKSxQLndyaXRlX3NoaWZ0'@;
put 'KDEsMCl9KHksUCksUC53cml0ZV9zaGlmdCgyLHkuYm9sZD83MDA6NDAwKTt2YXIgTD0wOyJzdXBlciI9PXkudmFsaWduP0w9MToic3ViIj09eS52YWxpZ24mJihMPTIpLFAud3JpdGVfc2hpZnQoMixMKSxQLndyaXRlX3NoaWZ0KDEseS51bmRlcmxpbmV8fDApLFAud3JpdGVfc2hpZnQoMSx5'@;
put 'LmZhbWlseXx8MCksUC53cml0ZV9zaGlmdCgxLHkuY2hhcnNldHx8MCksUC53cml0ZV9zaGlmdCgxLDApLFIyKHkuY29sb3IsUCk7dmFyIFE9MDtyZXR1cm4ibWFqb3IiPT15LnNjaGVtZSYmKFE9MSksIm1pbm9yIj09eS5zY2hlbWUmJihRPTIpLFAud3JpdGVfc2hpZnQoMSxRKSxuYyh5Lm5h'@;
put 'bWUsUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KFEpKX0pLHVpKHksIkJydEVuZEZvbnRzIikpfShMLCh5LlN0eWxlc3x8e30pLkZvbnRzfHxbXSksZnVuY3Rpb24gX0MoeSxQKXt2YXIgTD1QLmxlbmd0aDswIT1MJiYodWkoeSwiQnJ0QmVnaW5GaWxscyIsa3UoTCkpLFAuZm9y'@;
put 'RWFjaChmdW5jdGlvbihRKXt1aSh5LCJCcnRGaWxsIixmdW5jdGlvbiBBRCh5LFApe1B8fChQPWZyKDg0KSk7dmFyIEw9WTJbeS5wYXR0ZXJuVHlwZV07bnVsbD09TCYmKEw9NDApLFAud3JpdGVfc2hpZnQoNCxMPStMKTt2YXIgUT0wO2lmKDQwIT1MKWZvcihSMih5LmZnQ29sb3J8fHtpbmRl'@;
put 'eDo2NH0sUCksUjIoeS5iZ0NvbG9yfHx7aW5kZXg6NjV9LFApO1E8MTI7KytRKVAud3JpdGVfc2hpZnQoNCwwKTtlbHNle2Zvcig7UTw0OysrUSlQLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKDtRPDEyOysrUSlQLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIFAubGVuZ3RoPlAubD9QLnNsaWNlKDAs'@;
put 'UC5sKTpQfShRKSl9KSx1aSh5LCJCcnRFbmRGaWxscyIpKX0oTCwoeS5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGZ1bmN0aW9uIGJDKHksUCl7dmFyIEw9UC5sZW5ndGg7MCE9TCYmKHVpKHksIkJydEJlZ2luQm9yZGVycyIsa3UoTCkpLFAuZm9yRWFjaChmdW5jdGlvbihRKXt1aSh5LCJCcnRC'@;
put 'b3JkZXIiLGZ1bmN0aW9uIEREKHksUCl7cmV0dXJuIFB8fChQPWZyKDUxKSksUC53cml0ZV9zaGlmdCgxLDApLFAzKHkudG9wLFApLFAzKHkuYm90dG9tLFApLFAzKHkubGVmdCxQKSxQMyh5LnJpZ2h0LFApLFAzKG51bGwsUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KFEpKX0p'@;
put 'LHVpKHksIkJydEVuZEJvcmRlcnMiKSl9KEwsKHkuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGZ1bmN0aW9uIElEKHksUCl7dmFyIEw9MTtpZihQJiYoTD1QLmxlbmd0aCksdWkoeSwiQnJ0QmVnaW5DZWxsU3R5bGVYRnMiLGt1KEwpKSx1aSh5LCJCcnRYRiIsTjkoe251bUZtdElkOjAsZm9u'@;
put 'dElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxQKWZvcih2YXIgUT0xO1E8UC5sZW5ndGg7KytRKXVpKHksIkJydFhGIixOOSh7bnVtRm10SWQ6UFtRXS5udW1GbXRJZHx8MCxmb250SWQ6UFtRXS5mb250SWR8fDAsZmlsbElkOlBbUV0uZmlsbElkfHwwLGJvcmRlcklkOlBbUV0u'@;
put 'Ym9yZGVySWR8fDB9LDY1NTM1KSk7dWkoeSwiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KEwsUC5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIHlDKHksUCl7dWkoeSwiQnJ0QmVnaW5DZWxsWEZzIixrdShQLmxlbmd0aCkpLFAuZm9yRWFjaChmdW5jdGlvbihMKXt1aSh5LCJCcnRYRiIsTjkoTCwwKSl9'@;
put 'KSx1aSh5LCJCcnRFbmRDZWxsWEZzIil9KEwsUC5jZWxsWGZzKSxmdW5jdGlvbiBMRCh5LFApe3ZhciBMPTE7aWYoUCYmKEw9UC5sZW5ndGgpLHVpKHksIkJydEJlZ2luU3R5bGVzIixrdShMKSksdWkoeSwiQnJ0U3R5bGUiLHR1KHt4ZklkOjAsYnVpbHRpbklkOjAsbmFtZToiTm9ybWFsIn0p'@;
put 'KSxQKWZvcih2YXIgUT0xO1E8UC5sZW5ndGg7KytRKXVpKHksIkJydFN0eWxlIix0dSh7eGZJZDpRLGJ1aWx0aW5JZDowLG5hbWU6UFtRXS5uYW1lfSkpO3VpKHksIkJydEVuZFN0eWxlcyIpfShMLFAuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiB3Qyh5KXt1aSh5LCJCcnRCZWdpbkRYRnMiLGt1'@;
put 'KDApKSx1aSh5LCJCcnRFbmREWEZzIil9KEwpLGZ1bmN0aW9uIFJEKHkpe3VpKHksIkJydEJlZ2luVGFibGVTdHlsZXMiLGZ1bmN0aW9uIFY5KHksUCxMKXt2YXIgUT1mcigyMDUyKTtyZXR1cm4gUS53cml0ZV9zaGlmdCg0LHkpLEFkKFAsUSksQWQoTCxRKSxRLmxlbmd0aD5RLmw/US5zbGlj'@;
put 'ZSgwLFEubCk6UX0oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVkaXVtNCIpKSx1aSh5LCJCcnRFbmRUYWJsZVN0eWxlcyIpfShMKSx1aShMLCJCcnRFbmRTdHlsZVNoZWV0IiksTC5lbmQoKX1IaS5USEVNRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m'@;
put 'ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIEZEPVsiPC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6YWNjZW50ND4iLCI8L2E6YWNjZW50NT4i'@;
put 'LCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIGo5KHksUCxMKXtQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtdO3ZhciBRPXt9Oyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBwZT1sbihyZSk7c3dpdGNo'@;
put 'KHBlWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8L2E6Y2xyU2NoZW1lPiI6Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6US5yZ2I9cGUudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xyIjpRLnJnYj1wZS5sYXN0Q2xyO2JyZWFr'@;
put 'O2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2FzZSI8YTpsdDE+IjpjYXNlIjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2UiPC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8L2E6YWNjZW50MT4iOmNhc2UiPGE6YWNj'@;
put 'ZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxhOmFjY2VudDM+IjpjYXNlIjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNlIjxhOmFjY2VudDY+IjpjYXNlIjwvYTph'@;
put 'Y2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9hOmhsaW5rPiI6Y2FzZSI8YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5rPiI6Ii8iPT09cGVbMF0uY2hhckF0KDEpPyhQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0ZELmluZGV4T2YocGVbMF0pXT1RLFE9e30pOlEubmFtZT1w'@;
put 'ZVswXS5zbGljZSgzLHBlWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKEwmJkwuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiB6OSgpe31mdW5jdGlvbiBIRCgpe312YXIgWjQ9LzxhOmNsclNjaGVtZShb'@;
put 'Xj5dKik+W1xzXFNdKjxcL2E6Y2xyU2NoZW1lPi8sTkQ9LzxhOmZvbnRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+LyxWRD0vPGE6Zm10U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmbXRTY2hlbWU+LyxTQz0vPGE6dGhlbWVFbGVtZW50cyhbXj5dKik+W1xzXFNdKjxc'@;
put 'L2E6dGhlbWVFbGVtZW50cz4vO2Z1bmN0aW9uIEdtKHksUCl7aWYoIXl8fDA9PT15Lmxlbmd0aClyZXR1cm4gR20ocmYoKSk7dmFyIEwsUT17fTtpZighKEw9eS5tYXRjaChTQykpKXRocm93IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gQ0MoeSxQLEwpe3ZhciBRO1AudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLFo0LGo5XSxbImZvbnRTY2hlbWUiLE5ELHo5XSxbImZtdFNjaGVtZSIsVkQsSERdXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtpZighKFE9eS5tYXRjaChyZVsxXSkpKXRocm93IG5ldyBFcnJvcihy'@;
put 'ZVswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7cmVbMl0oUSxQLEwpfSl9KExbMF0sUSxQKSxRLnJhdz15LFF9ZnVuY3Rpb24gcmYoeSxQKXtpZihQJiZQLnRoZW1lWExTWClyZXR1cm4gUC50aGVtZVhMU1g7aWYoeSYmInN0cmluZyI9PXR5cGVvZiB5LnJhdylyZXR1cm4geS5y'@;
put 'YXc7dmFyIEw9W0JuXTtyZXR1cm4gTFtMLmxlbmd0aF09JzxhOnRoZW1lIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBuYW1lPSJPZmZpY2UgVGhlbWUiPicsTFtMLmxlbmd0aF09IjxhOnRoZW1lRWxlbWVudHM+IixMW0wu'@;
put 'bGVuZ3RoXT0nPGE6Y2xyU2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxMW0wubGVuZ3RoXT0nPGE6ZGsxPjxhOnN5c0NsciB2YWw9IndpbmRvd1RleHQiIGxhc3RDbHI9IjAwMDAwMCIvPjwvYTpkazE+JyxMW0wubGVuZ3RoXT0nPGE6bHQxPjxhOnN5c0NsciB2YWw9IndpbmRvdyIgbGFzdENscj0i'@;
put 'RkZGRkZGIi8+PC9hOmx0MT4nLExbTC5sZW5ndGhdPSc8YTpkazI+PGE6c3JnYkNsciB2YWw9IjFGNDk3RCIvPjwvYTpkazI+JyxMW0wubGVuZ3RoXT0nPGE6bHQyPjxhOnNyZ2JDbHIgdmFsPSJFRUVDRTEiLz48L2E6bHQyPicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDE+PGE6c3JnYkNsciB2'@;
put 'YWw9IjRGODFCRCIvPjwvYTphY2NlbnQxPicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDI+PGE6c3JnYkNsciB2YWw9IkMwNTA0RCIvPjwvYTphY2NlbnQyPicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9IjlCQkI1OSIvPjwvYTphY2NlbnQzPicsTFtMLmxlbmd0aF09'@;
put 'JzxhOmFjY2VudDQ+PGE6c3JnYkNsciB2YWw9IjgwNjRBMiIvPjwvYTphY2NlbnQ0PicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDU+PGE6c3JnYkNsciB2YWw9IjRCQUNDNiIvPjwvYTphY2NlbnQ1PicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDY+PGE6c3JnYkNsciB2YWw9IkY3OTY0NiIvPjwv'@;
put 'YTphY2NlbnQ2PicsTFtMLmxlbmd0aF09JzxhOmhsaW5rPjxhOnNyZ2JDbHIgdmFsPSIwMDAwRkYiLz48L2E6aGxpbms+JyxMW0wubGVuZ3RoXT0nPGE6Zm9sSGxpbms+PGE6c3JnYkNsciB2YWw9IjgwMDA4MCIvPjwvYTpmb2xIbGluaz4nLExbTC5sZW5ndGhdPSI8L2E6Y2xyU2NoZW1lPiIs'@;
put 'TFtMLmxlbmd0aF09JzxhOmZvbnRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLExbTC5sZW5ndGhdPSI8YTptYWpvckZvbnQ+IixMW0wubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbWJyaWEiLz4nLExbTC5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxMW0wubGVuZ3RoXT0nPGE6'@;
put 'Y3MgdHlwZWZhY2U9IiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVj'@;
put 'NzQwIFx1YWNlMFx1YjUxNSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLExbTC5sZW5n'@;
put 'dGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNl'@;
put 'PSJUYWhvbWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZh'@;
put 'Y2U9IlNocnV0aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iTW9vbEJvcmFuIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0'@;
put 'eXBlZmFjZT0iUmFhdmkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsTFtMLmxlbmd0aF09JzxhOmZv'@;
put 'bnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1W'@;
put 'IEJvbGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFj'@;
put 'ZT0iTGF0aGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9'@;
put 'Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsTFtMLmxlbmd0aF09Jzxh'@;
put 'OmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jv'@;
put 'c29mdCBVaWdodXIiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLExbTC5sZW5ndGhdPSI8L2E6bWFqb3JGb250PiIsTFtMLmxlbmd0aF09IjxhOm1pbm9yRm9udD4iLExbTC5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2Fs'@;
put 'aWJyaSIvPicsTFtMLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLExbTC5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFm'@;
put 'Ii8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNj'@;
put 'cmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IkFyaWFsIi8+JyxMW0wu'@;
put 'bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLExb'@;
put 'TC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+'@;
put 'JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50'@;
put 'YWdlbmV0IENoZXJva2VlIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsTFtMLmxlbmd0'@;
put 'aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxMW0wu'@;
put 'bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9Ikth'@;
put 'bGluZ2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBl'@;
put 'ZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IkFyaWFsIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBz'@;
put 'Y3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxMW0wubGVuZ3RoXT0iPC9hOm1pbm9yRm9udD4iLExbTC5sZW5ndGhdPSI8L2E6Zm9udFNjaGVtZT4iLExbTC5s'@;
put 'ZW5ndGhdPSc8YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLExbTC5sZW5ndGhdPSI8YTpmaWxsU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLExbTC5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RX'@;
put 'aXRoU2hhcGU9IjEiPicsTFtMLmxlbmd0aF09IjxhOmdzTHN0PiIsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxl'@;
put 'bmd0aF09JzxhOmdzIHBvcz0iMzUwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMzcwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZh'@;
put 'bD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxNTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIxIi8+JyxMW0wubGVuZ3RoXT0i'@;
put 'PC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxMW0wubGVuZ3RoXT0iPGE6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjEwMDAwMCIvPjxhOnNoYWRl'@;
put 'IHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMTMwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxh'@;
put 'OnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09IjwvYTpm'@;
put 'aWxsU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6bG5TdHlsZUxzdD4iLExbTC5sZW5ndGhdPSc8YTpsbiB3PSI5NTI1IiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iOTUwMDAiLz48'@;
put 'YTpzYXRNb2QgdmFsPSIxMDUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLExbTC5sZW5ndGhdPSc8YTpsbiB3PSIyNTQwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNj'@;
put 'aGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsTFtMLmxlbmd0aF09JzxhOmxuIHc9IjM4MTAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhD'@;
put 'bHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxMW0wubGVuZ3RoXT0iPC9hOmxuU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixMW0wubGVuZ3RoXT0iPGE6ZWZm'@;
put 'ZWN0THN0PiIsTFtMLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM4MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hk'@;
put 'dz4nLExbTC5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixMW0wubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBk'@;
put 'aXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixMW0wubGVuZ3RoXT0iPC9hOmVm'@;
put 'ZmVjdFN0eWxlPiIsTFtMLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsTFtMLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNs'@;
put 'ciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSc8YTpzY2VuZTNkPjxhOmNhbWVyYSBwcnN0PSJvcnRob2dyYXBoaWNGcm9udCI+PGE6cm90IGxhdD0i'@;
put 'MCIgbG9uPSIwIiByZXY9IjAiLz48L2E6Y2FtZXJhPjxhOmxpZ2h0UmlnIHJpZz0idGhyZWVQdCIgZGlyPSJ0Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMTIwMDAwMCIvPjwvYTpsaWdodFJpZz48L2E6c2NlbmUzZD4nLExbTC5sZW5ndGhdPSc8YTpzcDNkPjxhOmJldmVsVCB3PSI2'@;
put 'MzUwMCIgaD0iMjU0MDAiLz48L2E6c3AzZD4nLExbTC5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09IjxhOmJnRmlsbFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIg'@;
put 'dmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxMW0wubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLExbTC5sZW5ndGhdPSI8YTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDAw'@;
put 'MDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjQwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQ1MDAwIi8+PGE6c2hhZGUgdmFsPSI5OTAwMCIvPjxhOnNhdE1vZCB2YWw9'@;
put 'IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIyMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjI1NTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxl'@;
put 'bmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iLTgwMDAwIiByPSI1MDAwMCIgYj0iMTgwMDAwIi8+PC9hOnBhdGg+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09Jzxh'@;
put 'OmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxMW0wubGVuZ3RoXT0iPGE6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjgwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48'@;
put 'L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjMwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0iPC9hOmdzTHN0PiIsTFtMLmxl'@;
put 'bmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSI1MDAwMCIgcj0iNTAwMDAiIGI9IjUwMDAwIi8+PC9hOnBhdGg+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09IjwvYTpiZ0ZpbGxTdHlsZUxzdD4iLExbTC5sZW5n'@;
put 'dGhdPSI8L2E6Zm10U2NoZW1lPiIsTFtMLmxlbmd0aF09IjwvYTp0aGVtZUVsZW1lbnRzPiIsTFtMLmxlbmd0aF09IjxhOm9iamVjdERlZmF1bHRzPiIsTFtMLmxlbmd0aF09IjxhOnNwRGVmPiIsTFtMLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxl'@;
put 'PjxhOmxuUmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMyI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48'@;
put 'L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0ibHQxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsTFtMLmxlbmd0aF09IjwvYTpzcERlZj4iLExbTC5sZW5ndGhdPSI8YTpsbkRlZj4iLExbTC5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIv'@;
put 'PjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjAiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIxIj48YTpzY2hl'@;
put 'bWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9InR4MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLExbTC5sZW5ndGhdPSI8L2E6bG5EZWY+IixMW0wubGVuZ3RoXT0iPC9hOm9iamVjdERlZmF1bHRzPiIs'@;
put 'TFtMLmxlbmd0aF09IjxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4iLExbTC5sZW5ndGhdPSI8L2E6dGhlbWU+IixMLmpvaW4oIiIpfWZ1bmN0aW9uIGpEKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKS00LFE9W1BdO3N3aXRjaChQKXtjYXNlIDQ6Y2FzZSA1OmNhc2Ug'@;
put 'NzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOlFbMV09ZnVuY3Rpb24gVTkoeSl7dmFyIFA9e307c3dpdGNoKFAueGNsclR5cGU9eS5yZWFkX3NoaWZ0KDIpLFAublRpbnRTaGFkZT15LnJlYWRfc2hpZnQoMiksUC54Y2xyVHlwZSl7Y2FzZSAwOmNhc2UgNDp5LmwrPTQ7'@;
put 'YnJlYWs7Y2FzZSAxOlAueGNsclZhbHVlPWZ1bmN0aW9uIHFtKHksUCl7cmV0dXJuIGJjKHksUCl9KHksNCk7YnJlYWs7Y2FzZSAyOlAueGNsclZhbHVlPXZtKHkpO2JyZWFrO2Nhc2UgMzpQLnhjbHJWYWx1ZT1mdW5jdGlvbiBNQyh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpfSh5KX1yZXR1'@;
put 'cm4geS5sKz04LFB9KHkpO2JyZWFrO2Nhc2UgNjpRWzFdPWZ1bmN0aW9uIEJEKHksUCl7cmV0dXJuIGJjKHksUCl9KHksTCk7YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OlFbMV09eS5yZWFkX3NoaWZ0KDE9PT1MPzE6Mik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXpl'@;
put 'ZCBFeHRQcm9wIHR5cGU6ICIrUCsiICIrTCl9cmV0dXJuIFF9ZnVuY3Rpb24gVUQoeSxQKXtQLmZvckVhY2goZnVuY3Rpb24oTCl7c3dpdGNoKExbMF0pe2Nhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6YnJl'@;
put 'YWs7Y2FzZSAxMzp5LmZvbnQmJnkuZm9udC5jb2xvciYmQXJyYXkuaXNBcnJheShMWzFdLnhjbHJWYWx1ZSkmJih5LmZvbnQuY29sb3IucmdiPXoxKExbMV0ueGNsclZhbHVlKSl9fSl9ZnVuY3Rpb24gZGEoeSl7cmV0dXJuIHkvOTE0NDAwKm5mfWZ1bmN0aW9uIHhDKHksUCl7dmFyIEw9e307'@;
put 'aWYoeS5wb3MpTC54PWRhKHkucG9zLngpLEwueT1kYSh5LnBvcy55KTtlbHNle2lmKCF5LmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7TC5yPXkuZnJvbS5yfHwwLEwuYz15LmZyb20uY3x8MCx5LmZyb20uY09mZiYmKEwueD1kYSh5LmZyb20uY09mZikpLHkuZnJvbS5yT2ZmJiYoTC55'@;
put 'PWRhKHkuZnJvbS5yT2ZmKSl9aWYoeS5leHQpTC53PWRhKHkuZXh0LngpLEwuaD1kYSh5LmV4dC55KTtlbHNle2lmKCF5LnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtMLkM9eS50by5jLEwuUj15LnRvLnIseS50by5jT2ZmJiYoTC5YPWRhKHkudG8uY09mZikpLHkudG8uck9mZiYmKEwuWT1k'@;
put 'YSh5LnRvLnJPZmYpKX1yZXR1cm4gTH1mdW5jdGlvbiBzZih5LFApe3ZhciBMPXt4Oi0xLHk6LTEsdzotMSxoOi0xfTtpZih5LnBvcylMLng9ZGEoeS5wb3MueCksTC55PWRhKHkucG9zLnkpO2Vsc2V7aWYoIXkuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjtMLng9WTEoUCx5LmZyb20u'@;
put 'YywiQyIpK2RhKHkuZnJvbS5jT2ZmKSxMLnk9WTEoUCx5LmZyb20uciwiUiIpK2RhKHkuZnJvbS5yT2ZmKX1pZih5LmV4dClMLnc9ZGEoeS5leHQueCksTC5oPWRhKHkuZXh0LnkpO2Vsc2V7aWYoIXkudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO0wudz1ZMShQLHkudG8uYywiQyIpK2RhKHku'@;
put 'dG8uY09mZiktTC54LEwuaD1ZMShQLHkudG8uciwiUiIpK2RhKHkudG8uck9mZiktTC55fXJldHVybiBMfWZ1bmN0aW9uIEttKHksUCl7dmFyIEw9e3I6LTEsYzotMSx4Oi0xLHk6LTEsUjotMSxDOi0xLFg6LTEsWTotMX07c3dpdGNoKHkudHlwZSl7Y2FzZSJ0d29DZWxsQW5jaG9yIjpMLnI9'@;
put 'eS5mcm9tLnIsTC55PWRhKHkuZnJvbS5yT2ZmKSxMLlI9eS50by5yLEwuWT1kYSh5LnRvLnJPZmYpLEwuYz15LmZyb20uYyxMLng9ZGEoeS5mcm9tLmNPZmYpLEwuQz15LnRvLmMsTC5YPWRhKHkudG8uY09mZik7YnJlYWs7Y2FzZSJvbmVDZWxsQW5jaG9yIjpMLnI9eS5mcm9tLnIsTC55PWRh'@;
put 'KHkuZnJvbS5yT2ZmKTt2YXIgUT1HMihQLEwucixMLnkrZGEoeS5leHQueSkpO0wuUj1RWzBdLEwuWT1RWzFdLEwuYz15LmZyb20uYyxMLng9ZGEoeS5mcm9tLmNPZmYpO3ZhciByZT1KbShQLEwuYyxMLngrZGEoeS5leHQueCkpO0wuQz1yZVswXSxMLlg9cmVbMV07YnJlYWs7Y2FzZSJhYnNv'@;
put 'bHV0ZUFuY2hvciI6dmFyIHBlPUcyKFAsMCxkYSh5LnBvcy55KSk7TC5yPXBlWzBdLEwueT1wZVsxXTt2YXIgX2U9RzIoUCxMLnIsTC55K2RhKHkuZXh0LnkpKTtMLlI9X2VbMF0sTC5ZPV9lWzFdO3ZhciB2ZT1HMihQLDAsZGEoeS5wb3MueCkpO0wuYz12ZVswXSxMLng9dmVbMV07dmFyIFNl'@;
put 'PUcyKFAsTC5jLEwueCtkYSh5LmV4dC54KSk7TC5DPVNlWzBdLEwuWD1TZVsxXTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhbmNob3IgdHlwZSAiK3kudHlwZX1yZXR1cm4gTH1mdW5jdGlvbiBYbSh5LFApe3ZhciBMPXkudHJpbSgpLnNwbGl0KC9ccyosXHMqLyk7UFsiIXBvcyJdPXtjOitM'@;
put 'WzBdLHg6K0xbMV0scjorTFsyXSx5OitMWzNdLEM6K0xbNF0sWDorTFs1XSxSOitMWzZdLFk6K0xbN119fWZ1bmN0aW9uIEVDKHksUCxMKXt2YXIgUT0tMTtpZihudWxsIT15LlJ8fG51bGwhPXkuQylRPTA7ZWxzZXtpZihudWxsPT15Lnh8fG51bGw9PXkueXx8bnVsbD09eS53fHxudWxsPT15'@;
put 'LmgpdGhyb3ciY2Fubm90IHBhcnNlIGFuY2hvciAiK0pTT04uc3RyaW5naWZ5KHkpO1E9MSsyKiEoeS5jfHx5LnIpfWlmKFEhPVApe3N3aXRjaChQKXtjYXNlIDA6Y2FzZSAxOmlmKDMhPVEpYnJlYWs7dmFyIHJlPUptKEwseS5jfHwwLHkueHx8MCk7eS5jPXJlWzBdLHkueD1yZVsxXTt2YXIg'@;
put 'cGU9RzIoTCx5LnJ8fDAseS55fHwwKTt5LnI9cGVbMF0seS55PXBlWzFdO2JyZWFrO2Nhc2UgMzppZigzPT1RKWJyZWFrO3ZhciBfZT15LmN8fDAsdmU9eS54fHwwO2RlbGV0ZSB5LmMsZGVsZXRlIHkueCx5Lng9KF9lP1k0KEwsX2UpOjApK3ZlO3ZhciBTZT15LnJ8fDAsSGU9eS55fHwwO2Rl'@;
put 'bGV0ZSB5LnIsZGVsZXRlIHkueSx5Lnk9KFNlP0YzKEwsU2UpOjApK0hlO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitQfXN3aXRjaChQKXtjYXNlIDA6aWYoMD09USlicmVhazt2YXIgQmU9Sm0oTCx5LmN8fDAsKHkueHx8MCkreS53KTtk'@;
put 'ZWxldGUgeS53LHkuQz1CZVswXSx5Llg9QmVbMV07dmFyIEdlPUcyKEwseS5yfHwwLCh5Lnl8fDApK3kuaCk7ZGVsZXRlIHkuaCx5LlI9R2VbMF0seS5ZPUdlWzFdO2JyZWFrO2Nhc2UgMTpjYXNlIDM6aWYoMCE9USlicmVhazt2YXIgbnQ9eS5DfHwwLGR0PXkuWHx8MDtkZWxldGUgeS5DLGRl'@;
put 'bGV0ZSB5LlgseS53PVk0KEwsbnQpK2R0LSh5LmM/WTQoTCx5LmMpOjApLSh5Lnh8fDApO3ZhciBDdD15LlJ8fDAsY3Q9eS5ZfHwwO2RlbGV0ZSB5LlIsZGVsZXRlIHkuWSx5Lmg9RjMoTCxDdCkrY3QtKHkucj9GMyhMLHkucik6MCktKHkueXx8MCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252'@;
put 'ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK1B9fX1mdW5jdGlvbiBrQyh5KXt2YXIgUD1beS5jfHwwLE1hdGgucm91bmQoeS54fHwwKSx5LnJ8fDAsTWF0aC5yb3VuZCh5Lnl8fDApXTtyZXR1cm4oUD1QLmNvbmNhdCh5LmgmJnkudz9bUFswXSxNYXRoLnJvdW5kKFBbMV0reS53KSxQ'@;
put 'WzJdLE1hdGgucm91bmQoUFszXSt5LmgpXTpbeS5DfHwwLE1hdGgucm91bmQoeS5YfHwwKSx5LlJ8fDAsTWF0aC5yb3VuZCh5Lll8fDApXSkpLmpvaW4oIiwgIil9ZnVuY3Rpb24gRjMoeSxQKXtpZigheSlyZXR1cm4gMDtmb3IodmFyIEw9MDstLVA+PTA7KXt2YXIgUT0oKHlbIiFyb3dzIl18'@;
put 'fFtdKVtQXXx8e30pLmhweDtudWxsPT1RJiYoUT0oKHlbIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1RJiYoUT0yNCksTCs9UX1yZXR1cm4gTH1mdW5jdGlvbiBZNCh5LFApe2lmKCF5KXJldHVybiAwO2Zvcih2YXIgTD0wOy0tUD49MDspe3ZhciBRPSgoeVsiIWNv'@;
put 'bHMiXXx8W10pW1BdfHx7fSkud3B4O2lmKG51bGw9PVEmJihRPSgoeVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PVEpe3ZhciByZT17d2NoOjguNDN9O3B1KHJlKSx5WyIhY29scyJdJiYoeVsiIWNvbHMiXVtQXT1yZSksUT1yZS53cHh9TCs9UX1yZXR1cm4gTH1m'@;
put 'dW5jdGlvbiBZMSh5LFAsTCl7cmV0dXJuIkMiPT1MP1k0KHksUCk6RjMoeSxQKX1mdW5jdGlvbiBHMih5LFAsTCl7dmFyIFE9W1AsTF07aWYoIXkpcmV0dXJuIFE7Zm9yKDs7KXt2YXIgcmU9KHlbIiFyb3dzIl18fFtdKVtRWzBdXXx8e307aWYocmUuaGlkZGVuKSsrUVswXTtlbHNle3ZhciBw'@;
put 'ZT1yZS5ocHg7aWYobnVsbD09cGUmJihwZT0oKHlbIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1wZSYmKHBlPVUxKDE1KSksUVsxXTxwZSlicmVhaztRWzBdKyssUVsxXS09cGV9fXJldHVybiBRfWZ1bmN0aW9uIEptKHksUCxMKXt2YXIgUT1bUCxMXTtpZigheSly'@;
put 'ZXR1cm4gUTtmb3IoOzspe3ZhciByZT0oeVsiIWNvbHMiXXx8W10pW1FbMF1dfHx7fTtpZihyZS5oaWRkZW58fDA9PT1yZS53cHgpKytRWzBdO2Vsc2V7dmFyIHBlPXJlLndweDtpZihudWxsPT1wZSYmKHBlPSgoeVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PXBl'@;
put 'KXt2YXIgX2U9e3djaDo4LjQzfTtwdShfZSkseVsiIWNvbHMiXSYmKHlbIiFjb2xzIl1bUVswXV09X2UpLHBlPV9lLndweH1pZihRWzFdPHBlKWJyZWFrO1FbMF0rKyxRWzFdLT1wZX19cmV0dXJuIFF9ZnVuY3Rpb24gT3UoeSl7cmV0dXJuKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIHk/'@;
put 'eS50b1N0cmluZygxNik6eSkpLnNsaWNlKC02KX1mdW5jdGlvbiBVZCh5LFAsTCl7dmFyIFE9InN0cmluZyI9PXR5cGVvZiBQPyEhTDohIVA7InN0cmluZyIhPXR5cGVvZiBQJiYoUD0iY29sb3IiKTt2YXIgcmU9IjwiK1ArIiAiO3JldHVybiB5LmF1dG8/cmUrJ2F1dG89IjEiLz4nOnkuaW5k'@;
put 'ZXgmJm51bGw9PXkucmdiP3JlKydpbmRleGVkPSInK3kuaW5kZXgrJyIvPic6bnVsbCE9eS50aGVtZT9yZSsndGhlbWU9IicreS50aGVtZSsnIicrKHkudGludD8nIHRpbnQ9IicreS50aW50KyciJzoiIikrIi8+IjpudWxsIT15LnJnYj9yZSsncmdiPSInKyhRPyJGRiI6IiIpK091KHkucmdi'@;
put 'KSsnIi8+JzpyZSsiLz4ifWZ1bmN0aW9uIEgzKHksUCl7aWYoIXl8fG51bGw9PXkucmdiKXJldHVybiBQO2Zvcih2YXIgTD0oIjAwMDAwMCIreS5yZ2IudG9TdHJpbmcoMTYpKS5zbGljZSgtNiksUT1bTC5zbGljZSgwLDIpLEwuc2xpY2UoMiw0KSxMLnNsaWNlKDQsNildLm1hcChmdW5jdGlv'@;
put 'bihfZSl7cmV0dXJuIHBhcnNlSW50KF9lLDE2KX0pLHJlPTA7cmU8Q3IubGVuZ3RoOysrcmUpe3ZhciBwZT1DcltyZV07aWYocGVbMF09PVFbMF0mJnBlWzFdPT1RWzFdJiZwZVsyXT09UVsyXSlyZXR1cm4gcmV9cmV0dXJuIENyLmxlbmd0aDw2ND8oQ3IucHVzaChbUVswXSxRWzFdLFFbMl1d'@;
put 'KSxDci5sZW5ndGgtMSk6UH1mdW5jdGlvbiBXMSh5KXt2YXIgUD1bIiIsIiIsIiJdO2lmKCF5KXJldHVybltdO3ZhciBMPSIiLFE9eSYmeS5zP2Z1bmN0aW9uIFpEKHkpe3ZhciBQPVsiIiwiIl07aWYoIXkpcmV0dXJuIFA7aWYoeS5zeiYmKFBbMF0rPSImIit5LnN6LFBbMV09IiYxMiIrUFsx'@;
put 'XSkseS5uYW1lJiYoUFswXSs9JyYiJyt5Lm5hbWUrJyxSZWd1bGFyIicsUFsxXT0nJiItLFJlZ3VsYXIiJytQWzFdKSx5LmJvbGQmJihQWzBdKz0iJkIiLFBbMV09IiZCIitQWzFdKSx5LnVuZGVybGluZSl7dmFyIEw9Mj09eS51bmRlcmxpbmU/IiZFIjoiJlUiO1BbMF0rPUwsUFsxXT1MK1Bb'@;
put 'MV19cmV0dXJuIHkuaXRhbGljJiYoUFswXSs9IiZJIixQWzFdPSImSSIrUFsxXSkseS5jb2xvciYmbnVsbCE9eS5jb2xvci5yZ2ImJihQWzBdKz0iJksiK091KHkuY29sb3IucmdiKSxQWzFdKz0iJkswMDAwMDAiKSx5LnN0cmlrZSYmKFBbMF0rPSImUyIsUFsxXT0iJlMiK1BbMV0pLCJzdXBl'@;
put 'ciI9PXkudmFsaWduJiYoUFswXSs9IiZYIixQWzFdPSImWCIrUFsxXSksInN1YiI9PXkudmFsaWduJiYoUFswXSs9IiZZIixQWzFdPSImWSIrUFsxXSksUH0oeS5zKTpbIiIsIiJdO3JldHVybiJzdHJpbmciPT10eXBlb2YgeT9beSx5LHldOm51bGwhPXkuZmlyc3R8fG51bGwhPXkuZXZlbnx8'@;
put 'bnVsbCE9eS5vZGQ/KG51bGwhPXkub2RkJiYoUFswXT1XMSh5Lm9kZClbMF0pLHZvaWQgMD09PXkuZmlyc3QmJlBbMF0mJihQWzFdPVBbMF0pLG51bGwhPXkuZmlyc3QmJihQWzFdPVcxKHkuZmlyc3QpWzBdKSxudWxsIT15LmV2ZW4mJihQWzJdPVcxKHkuZXZlbilbMF0pLFApOnkubGVmdHx8'@;
put 'eS5jZW50ZXJ8fHkucmlnaHQ/KHkubGVmdCYmKEwrPSImTCIrVzEoeS5sZWZ0KVswXSkseS5jZW50ZXImJihMKz0iJkMiK1cxKHkuY2VudGVyKVswXSkseS5yaWdodCYmKEwrPSImUiIrVzEoeS5yaWdodClbMF0pLFtMLEwsTF0pOm51bGwhPXkudj9bTD1RWzBdK3kudi5yZXBsYWNlKC8mL2cs'@;
put 'IiYmIikrUVsxXSxMLExdOm51bGwhPXkudz9bTD1RWzBdK3kudytRWzFdLEwsTF06QXJyYXkuaXNBcnJheSh5LlIpPyh5LlIuZm9yRWFjaChmdW5jdGlvbihyZSl7TCs9VzEocmUpWzBdfSksW0wsTCxMXSk6W119dmFyIFFtPXsxOiJMZXR0ZXIiLDM6IlRhYmxvaWQiLDU6IkxlZ2FsIiw3OiJF'@;
put 'eGVjdXRpdmUiLDg6IkEzIiw5OiJBNCIsMTE6IkE1IiwxMjoiQjQiLDEzOiJCNSIsMTQ6IkZvbGlvIiwyMDoiRW52ZWxvcGUiLDM3OiJNb25hcmNoIiw3MDoiQTYifSxaOT1iZShRbSk7SGkuQ09OTj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIw'@;
put 'MDYvcmVsYXRpb25zaGlwcy9jb25uZWN0aW9ucyI7dmFyIHQ2PVNyKCJleHRlcm5hbExpbmsiLG51bGwse3htbG5zOmlzLm1haW5bMF19KTtIaS5JTUc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaW1hZ2UiLEhp'@;
put 'LkRSQVc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZHJhd2luZyI7dmFyIFlEPXt0OiJ0b3AiLGN0cjoiY2VudGVyIixiOiJib3R0b20iLGp1c3Q6InRvcCIsZGlzdDoidG9wIn0sTEM9e2N0cjoiY2VudGVyIixk'@;
put 'aXN0OiJjZW50ZXIiLGp1c3Q6ImNlbnRlciIsanVzdExvdzoiY2VudGVyIixsOiJsZWZ0IixyOiJyaWdodCIsdGhhaURpc3Q6ImNlbnRlciJ9O2Z1bmN0aW9uIFJDKCl7dmFyIHk9W0JuXTtyZXR1cm4geS5wdXNoKCc8eGRyOndzRHIgeG1sbnM6eGRyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1s'@;
put 'Zm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvc3ByZWFkc2hlZXREcmF3aW5nIiB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIvPicpLHkuam9pbigiIil9ZnVuY3Rpb24gT0MoeSl7dmFyIEwsUD15WyIhZGF0YSJdO3JldHVy'@;
put 'biJiYXNlNjQiPT09eVsiIWRhdGF0eXBlIl0/KChMPVAubWF0Y2goL15kYXRhOi4qLC8pKSYmKFA9UC5zbGljZShMWzBdLmxlbmd0aCkpLHNlLmRlY29kZShQKSk6UH1IaS5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRp'@;
put 'b25zaGlwcy90YWJsZSI7dmFyIE4zPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVtePl0qKT8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3NoYXBlPi9nO2Z1bmN0aW9uIHFEKHksUCxMLFEpe3ZhciByZT1bMjE2MDAsMjE2MDBdLHBlPVsibTAsMGwwIixyZVsxXSxyZVswXSxyZVsxXSxyZVswXSwi'@;
put 'MHhlIl0uam9pbigiLCIpLF9lPVtTcigieG1sIixudWxsLHsieG1sbnM6diI6V2kudiwieG1sbnM6byI6V2kubywieG1sbnM6eCI6V2kueCwieG1sbnM6bXYiOldpLm12fSkucmVwbGFjZSgvXC8+LywiPiIpLFNyKCJvOnNoYXBlbGF5b3V0IixTcigibzppZG1hcCIsbnVsbCx7InY6ZXh0Ijoi'@;
put 'ZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0sdmU9MTAyNCp5LFNlPUx8fFtdO1NlLmxlbmd0aD4wJiZfZS5wdXNoKFNyKCJ2OnNoYXBldHlwZSIsW1NyKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxTcigidjpwYXRoIixudWxsLHtzaGFkb3dvazoiZiIsZXh0cnVzaW9u'@;
put 'b2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6ImYiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KSxTcigibzpsb2NrIixudWxsLHsidjpleHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6ZTpyZS5qb2luKCIsIiksIm86c3B0Ijoy'@;
put 'MDEscGF0aDpwZX0pKSxTZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXsrK3ZlLF9lPV9lLmNvbmNhdChmdW5jdGlvbiBGQyh5LFApe3ZhciBMPXtpZDoiX3gwMDAwX3MiK1AsdHlwZToiI194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAtc3R5bGU6dGlnaHQifTsoIlJhZGlvIj09eVsiIXR5cGUi'@;
put 'XXx8IkNoZWNrYm94Ij09eVsiIXR5cGUiXXx8Ikxpc3QiPT15WyIhdHlwZSJdfHwiRHJvcCI9PXlbIiF0eXBlIl0pJiYoTC5zdHJva2VkPSJmIiksIkxhYmVsIj09eVsiIXR5cGUiXSYmKEwuZmlsbGVkPSJmIik7dmFyIFE9IiI7eS50JiZQQ1t5WyIhdHlwZSJdXSYmKFE9UENbeVsiIXR5cGUi'@;
put 'XV0ucmVwbGFjZSgvIyMjIy8sSHIoeS50KSkpO3ZhciByZT1bXTtyZXR1cm4geS5tYWNybyYmcmUucHVzaChmcygieDpGbWxhTWFjcm8iLHkubWFjcm8pKSx5LmxpbmsmJnJlLnB1c2goZnMoIng6Rm1sYUxpbmsiLHkubGluaykpLHkudmFsJiZyZS5wdXNoKGZzKCJSYWRpbyI9PXlbIiF0eXBl'@;
put 'Il18fCJDaGVja2JveCI9PXlbIiF0eXBlIl0/Ing6Q2hlY2tlZCI6Ing6VmFsIixTdHJpbmcoeS52YWwpKSkseS5yZWYmJnJlLnB1c2goZnMoIng6Rm1sYVJhbmdlIix5LnJlZikpLHkuc2VsJiYiTGlzdCI9PXlbIiF0eXBlIl0mJnJlLnB1c2goZnMoIng6U2VsVHlwZSIseS5zZWwpKSx5Lm1p'@;
put 'biYmcmUucHVzaChmcygieDpNaW4iLFN0cmluZyh5Lm1pbikpKSx5Lm1heCYmcmUucHVzaChmcygieDpNYXgiLFN0cmluZyh5Lm1heCkpKSx5LnN0ZXAmJnJlLnB1c2goZnMoIng6SW5jIixTdHJpbmcoeS5zdGVwKSkpLHkucGFnZSYmcmUucHVzaChmcygieDpQYWdlIixTdHJpbmcoeS5wYWdl'@;
put 'KSkpLFtdLmNvbmNhdChbIjx2OnNoYXBlIitQYShMKSsiPiJdKS5jb25jYXQoRzlbeVsiIXR5cGUiXV18fFtdKS5jb25jYXQoW1FdKS5jb25jYXQoWyc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9IicreVsiIXR5cGUiXSsnIj4nLGZzKCJ4OkFuY2hvciIsa0MoeVsiIXBvcyJdKSksZnMoIng6'@;
put 'UHJpbnRPYmplY3QiLCJGYWxzZSIpXSkuY29uY2F0KHJlKS5jb25jYXQoTFpbeVsiIXR5cGUiXV18fFtdKS5jb25jYXQoWyI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShCZSx2ZSkpfSk7dmFyIEhlPVB8fFtdO3JldHVybiBIZS5sZW5ndGg+MCYmX2UucHVzaChTcigidjpzaGFw'@;
put 'ZXR5cGUiLFtTcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksU3IoInY6cGF0aCIsbnVsbCx7Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTpyZS5qb2luKCIsIiksIm86'@;
put 'c3B0IjoyMDIscGF0aDpwZX0pKSxIZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXsrK3ZlLF9lPV9lLmNvbmNhdChmdW5jdGlvbiBLNCh5LFAsTCl7dmFyIFE9c3MoeVswXSkscmU9eVsxXS5maWxsfHx7fTt5WzFdLnMmJihyZT17dHlwZTp5WzFdLnMucGF0dGVyblR5cGV8fCJzb2xpZCJ9LHlbMV0u'@;
put 'cy5mZ0NvbG9yJiYocmUuY29sb3IyPXJlLmNvbG9yMT0iIyIrT3UoeVsxXS5zLmZnQ29sb3IucmdiKSkseVsxXS5zLmJnQ29sb3ImJihyZS5jb2xvcjI9IiMiK091KHlbMV0ucy5iZ0NvbG9yLnJnYikpKTt2YXIgcGU9e2NvbG9yMjpyZS5jb2xvcjJ8fCIjQkVGRjgyIix0eXBlOnJlLnR5cGV8'@;
put 'fCJncmFkaWVudCJ9OyJncmFkaWVudCI9PXBlLnR5cGUmJihwZS5hbmdsZT0iLTE4MCIpO3ZhciBfZT0iZ3JhZGllbnQiPT1wZS50eXBlP1NyKCJvOmZpbGwiLG51bGwse3R5cGU6ImdyYWRpZW50VW5zY2FsZWQiLCJ2OmV4dCI6InZpZXcifSk6bnVsbCx2ZT1TcigidjpmaWxsIixfZSxwZSks'@;
put 'U2U9e307eVsxXS5zaGFkb3cmJih5WzFdLnNoYWRvdy5jb2xvciYmKFNlLmNvbG9yPXlbMV0uc2hhZG93LmNvbG9yKSx5WzFdLnNoYWRvdy5vbiYmKFNlLm9uPXlbMV0uc2hhZG93Lm9uKSksU2Uub2JzY3VyZWQ9InQiO3ZhciBIZT0hMCxCZT0hMCxHZT15WzFdWyIhcG9zIl0/b24oeVsxXVsi'@;
put 'IXBvcyJdKTpudWxsO3JldHVybiBHZSYmKEJlPW51bGw9PUdlLlImJm51bGw9PUdlLkMmJm51bGw9PUdlLlgmJm51bGw9PUdlLlksSGU9IUdlLnImJiFHZS5jLEVDKEdlLDAsTCkpLFsiPHY6c2hhcGUiK1BhKHtpZDoiX3gwMDAwX3MiK1AsdHlwZToiI194MDAwMF90MjAyIixzdHlsZToicG9z'@;
put 'aXRpb246YWJzb2x1dGU7IG1hcmdpbi1sZWZ0OjgwcHQ7bWFyZ2luLXRvcDo1cHQ7d2lkdGg6MTA0cHQ7aGVpZ2h0OjY0cHQ7ei1pbmRleDoxMCIrKHlbMV0uaGlkZGVuPyI7dmlzaWJpbGl0eTpoaWRkZW4iOiIiKSxmaWxsY29sb3I6cmUuY29sb3IxfHwiI0VDRkFENCIsc3Ryb2tlY29sb3I6'@;
put 'KHlbMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+Iix2ZSxTcigidjpzaGFkb3ciLG51bGwsU2UpLFNyKCJ2OnBhdGgiLG51bGwseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvZGl2Pjwvdjp0ZXh0'@;
put 'Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxIZT8iPHg6TW92ZVdpdGhDZWxscy8+IjoiIixCZT8iPHg6U2l6ZVdpdGhDZWxscy8+IjoiIixmcygieDpBbmNob3IiLEdlP2tDKEdlKTp5WzFdLnJhd2FuY2hvcnx8W1EuYysxLDAsUS5yKzEsMCxRLmMrMywyMCxRLnIr'@;
put 'NSwyMF0uam9pbigiLCIpKSxmcygieDpBdXRvRmlsbCIsIkZhbHNlIiksZnMoIng6Um93IixTdHJpbmcoUS5yKSksZnMoIng6Q29sdW1uIixTdHJpbmcoUS5jKSkseVsxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXX0oQmUsdmUsUSkp'@;
put 'fSksX2UucHVzaCgiPC94bWw+IiksX2Uuam9pbigiIil9dmFyIExaPXtCdXR0b246WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpUZXh0SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+Il0sR0JveDpb'@;
put 'Ijx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJlbDpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiJdLFJhZGlvOlsiPHg6U2l6ZVdpdGhD'@;
put 'ZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpB'@;
put 'dXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6'@;
put 'QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwveDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5Db21ibzwveDpEcm9wU3R5bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJvcExpbmVzPiJdLExpc3Q6WyI8eDpTaXpl'@;
put 'V2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4PiIsIjx4OkluYz4xPC94OkluYz4iLCI8'@;
put 'eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jpei8+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxQQz17QnV0dG9uOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0'@;
put 'aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0nQ2FsaWJyaScgc2l6ZT0nMjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLEdCb3g6Ijx2OnRleHRib3ggc3R5bGU9'@;
put 'J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLFJhZGlvOiI8'@;
put 'djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRi'@;
put 'b3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250'@;
put 'PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0n'@;
put 'IzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6ImRhZnVxIn0sRzk9e0J1dHRvbjpbJzx2OmZpbGwgY29sb3IyPSIjZjBmMGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10s'@;
put 'R0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJvcDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU3BpbjpbJzxvOmxv'@;
put 'Y2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sUmFkaW86Wyc8djpwYXRoIHNoYWRv'@;
put 'd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxDaGVja2JveDpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0i'@;
put 'dCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIG42KHksUCxMLFEpe3ZhciByZT17IiFpZCI6e319LHBlPVtTcigieG1sIixudWxsLHsieG1sbnM6diI6V2kudiwieG1sbnM6byI6V2kubywieG1sbnM6eCI6V2kueH0pLnJlcGxhY2UoL1wvPi8sIj4iKSxTcigibzpzaGFwZWxheW91dCIsU3Io'@;
put 'Im86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpleHQiOiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0idCIgcGF0aD0ibUA0QDVsQDRAMTFAOUAx'@;
put 'MUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4nLCc8djpzdHJva2Ugam9pbnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFzPiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+JywnPHY6ZiBlcW49InN1'@;
put 'bSAwIDAgQDEiLz4nLCc8djpmIGVxbj0icHJvZCBAMiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDAgMSIvPicsJzx2OmYgZXFuPSJwcm9kIEA2'@;
put 'IDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDEwIDIxNjAwIDAiLz4nLCI8L3Y6Zm9ybXVsYXM+'@;
put 'IiwnPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFwZXR5cGU+Il0sX2U9MTtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2go'@;
put 'ZnVuY3Rpb24odmUpe1FbdmVdJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24oU2Upe1FbdmVdW1NlXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtpZihBcnJheS5pc0FycmF5KFFbdmVdW1NlXVtIZV0pKWZvcih2YXIgQmU9'@;
put 'MDtCZTxRW3ZlXVtTZV1bSGVdLmxlbmd0aDsrK0JlKWlmKFFbdmVdW1NlXVtIZV1bQmVdKXt2YXIgR2U9UVt2ZV1bU2VdW0hlXVtCZV07aWYoInJlbW90ZSI9PUdlWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNlIGxpbmtlZCBpbWFnZSBpbiBoZWFkZXIgb3IgZm9vdGVyIjtmb3IoO21u'@;
put 'KHksInhsL21lZGlhL2ltYWdlIitfZSsiLmpwZyIpOykrK19lO3kuZmlsZSgieGwvbWVkaWEvaW1hZ2UiK19lKyIuanBnIixPQyhHZSkse2JpbmFyeTohMH0pLHpvKHJlLC0xLCIuLi9tZWRpYS9pbWFnZSIrX2UrIi5qcGciLEhpLklNRyk7dmFyIG50PSJfeDAwMDBfcyIrKDEwMjUrR2UuX2Nu'@;
put 'dCksZHQ9InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowO3otaW5kZXg6IisoR2UuX2NudCsxKSsiOyI7ZHQrPSJ3aWR0aDoiK0dlWyIhcG9zIl0udysicHg7IixkdCs9ImhlaWdodDoiK0dlWyIhcG9zIl0uaCsicHg7Ijt2YXIgQ3Q9SGUuY2hhckF0KDApLnRv'@;
put 'VXBwZXJDYXNlKCkrdmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7Im9kZCIhPT1TZSYmKEN0Kz1TZS50b1VwcGVyQ2FzZSgpKSxRW3ZlXVtTZV1bSGVdLmxlbmd0aD4xJiYoQ3QrPUJlKSxwZS5wdXNoKFNyKCJ2OnNoYXBlIixbJzx2OmltYWdlZGF0YSBvOnJlbGlkPSJySWQnKyhHZS5fY250'@;
put 'KzEpKyciIG86dGl0bGU9InNoZWV0anMiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLmpvaW4oIiIpLHtpZDpDdCwibzpzcGlkIjpudCx0eXBlOiIjX3gwMDAwX3Q3NSIsc3R5bGU6ZHR9KSl9fSl9KX0pLHBlLnB1c2goIjwveG1sPiIpLHkuZmlsZSgieGwvZHJh'@;
put 'd2luZ3Mvdm1sRHJhd2luZyIrTCsiSEYudm1sIixwZS5qb2luKCIiKSkseS5maWxlKCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5nIitMKyJIRi52bWwucmVscyIsWGEocmUpKX1IaS5DTU5UPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAw'@;
put 'Ni9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzIjt2YXIgTkM9U3IoImNvbW1lbnRzIixudWxsLHt4bWxuczppcy5tYWluWzBdfSk7ZnVuY3Rpb24gVkMoeSl7dmFyIFA9W0JuLE5DXSxMPVtdO3JldHVybiBQLnB1c2goIjxhdXRob3JzPiIpLHkuZm9yRWFjaChmdW5jdGlvbihRKXtRWzFdLmZvckVh'@;
put 'Y2goZnVuY3Rpb24ocmUpe3ZhciBwZT1IcihyZS5hKTtMLmluZGV4T2YocGUpPi0xfHwoTC5wdXNoKHBlKSxQLnB1c2goIjxhdXRob3I+IitwZSsiPC9hdXRob3I+IikpfSl9KSxQLnB1c2goIjwvYXV0aG9ycz4iKSxQLnB1c2goIjxjb21tZW50TGlzdD4iKSx5LmZvckVhY2goZnVuY3Rpb24o'@;
put 'USl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtQLnB1c2goJzxjb21tZW50IHJlZj0iJytRWzBdKyciIGF1dGhvcklkPSInK0wuaW5kZXhPZihIcihyZS5hKSkrJyI+PHRleHQ+JyksUC5wdXNoKHJlLlI/SmgocmUuUik6ZnMoInQiLG51bGw9PXJlLnQ/IiI6SHIocmUudCkpKSxQLnB1c2go'@;
put 'IjwvdGV4dD48L2NvbW1lbnQ+Iil9KX0pLFAucHVzaCgiPC9jb21tZW50TGlzdD4iKSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvY29tbWVudHM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9dmFyIFhEPXdjO2Z1bmN0aW9uIGVJKHkpe3ZhciBQPXljKCks'@;
put 'TD1bXTtyZXR1cm4gdWkoUCwiQnJ0QmVnaW5Db21tZW50cyIpLHVpKFAsIkJydEJlZ2luQ29tbWVudEF1dGhvcnMiKSx5LmZvckVhY2goZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtMLmluZGV4T2YocmUuYSk+LTF8fChMLnB1c2gocmUuYS5zbGljZSgwLDU0KSksdWko'@;
put 'UCwiQnJ0Q29tbWVudEF1dGhvciIsZnVuY3Rpb24gSkQoeSl7cmV0dXJuIG5jKHkuc2xpY2UoMCw1NCkpfShyZS5hKSkpfSl9KSx1aShQLCJCcnRFbmRDb21tZW50QXV0aG9ycyIpLHVpKFAsIkJydEJlZ2luQ29tbWVudExpc3QiKSx5LmZvckVhY2goZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKHJlKXtyZS5pYXV0aG9yPUwuaW5kZXhPZihyZS5hKTt2YXIgcGU9e3M6c3MoUVswXSksZTpzcyhRWzBdKX07dWkoUCwiQnJ0QmVnaW5Db21tZW50IixmdW5jdGlvbiBLRCh5LFApe3JldHVybiBudWxsPT1QJiYoUD1mcigzNikpLFAud3JpdGVfc2hpZnQoNCx5WzFdLmlhdXRo'@;
put 'b3IpLEQxKHlbMF0sUCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApLFB9KFtwZSxyZV0pKSxyZS50JiZyZS50Lmxlbmd0aD4wJiZ1aShQLCJCcnRDb21tZW50VGV4dCIsZnVuY3Rpb24gYXIoeSxQKXt2'@;
put 'YXIgTD0hMTtyZXR1cm4gbnVsbD09UCYmKEw9ITAsUD1mcigyMys0KnkudC5sZW5ndGgpKSxQLndyaXRlX3NoaWZ0KDEsMSksbmMoeS50LFApLFAud3JpdGVfc2hpZnQoNCwxKSxmdW5jdGlvbiBrZCh5LFApe1B8fChQPWZyKDQpKSxQLndyaXRlX3NoaWZ0KDIseS5pY2h8fDApLFAud3JpdGVf'@;
put 'c2hpZnQoMix5LmlmbnR8fDApfSh7aWNoOjAsaWZudDowfSxQKSxMP1Auc2xpY2UoMCxQLmwpOlB9KHJlKSksdWkoUCwiQnJ0RW5kQ29tbWVudCIpLGRlbGV0ZSByZS5pYXV0aG9yfSl9KSx1aShQLCJCcnRFbmRDb21tZW50TGlzdCIpLHVpKFAsIkJydEVuZENvbW1lbnRzIiksUC5lbmQoKX12'@;
put 'YXIgJDI9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsUlo9WyJ4bHNiIiwieGxzbSIsInhsYW0iLCJiaWZmOCIsInhsYSJdO0hpLkRTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxv'@;
put 'Z3NoZWV0IixIaS5NUz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCI7dmFyIGFmPWZ1bmN0aW9uKCl7dmFyIHk9LyhefFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTldXGQqfClDKFxbPy0/XGQrXF18WzEtOV1c'@;
put 'ZCp8KSg/IVtBLVphLXowLTlfXSkvZyxQPXtyOjAsYzowfTtmdW5jdGlvbiBMKFEscmUscGUsX2Upe3ZhciB2ZT0hMSxTZT0hMTswPT1wZS5sZW5ndGg/U2U9ITA6IlsiPT1wZS5jaGFyQXQoMCkmJihTZT0hMCxwZT1wZS5zbGljZSgxLC0xKSksMD09X2UubGVuZ3RoP3ZlPSEwOiJbIj09X2Uu'@;
put 'Y2hhckF0KDApJiYodmU9ITAsX2U9X2Uuc2xpY2UoMSwtMSkpO3ZhciBIZT1wZS5sZW5ndGg+MD8wfHBhcnNlSW50KHBlLDEwKTowLEJlPV9lLmxlbmd0aD4wPzB8cGFyc2VJbnQoX2UsMTApOjA7cmV0dXJuIHZlP0JlKz1QLmM6LS1CZSxTZT9IZSs9UC5yOi0tSGUscmUrKHZlPyIiOiIkIikr'@;
put 'TnMoQmUpKyhTZT8iIjoiJCIpK0hzKEhlKX1yZXR1cm4gZnVuY3Rpb24ocmUscGUpe3JldHVybiBQPXBlLHJlLnJlcGxhY2UoeSxMKX19KCkscTk9LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0z'@;
put 'XVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csSzk9ZnVuY3Rpb24oUCxMKXtyZXR1cm4gUC5yZXBsYWNlKHE5LGZ1bmN0aW9uKFEscmUscGUsX2UsdmUsU2Upe3ZhciBI'@;
put 'ZT1qaChfZSktKHBlPzA6TC5jKSxCZT1CMChTZSktKHZlPzA6TC5yKTtyZXR1cm4gcmUrIlIiKygwPT1CZT8iIjp2ZT9CZSsxOiJbIitCZSsiXSIpKyJDIisoMD09SGU/IiI6cGU/SGUrMToiWyIrSGUrIl0iKX0pfTtmdW5jdGlvbiBqQyh5LFApe3JldHVybiB5LnJlcGxhY2UocTksZnVuY3Rp'@;
put 'b24oTCxRLHJlLHBlLF9lLHZlKXtyZXR1cm4gUSsoIiQiPT1yZT9yZStwZTpOcyhqaChwZSkrUC5jKSkrKCIkIj09X2U/X2UrdmU6SHMoQjAodmUpK1AucikpfSkucmVwbGFjZSgvKFxkKyk6KFxkKykvZyxmdW5jdGlvbihMLFEscmUpe3JldHVybiBIcyhCMChRKStQLnIpKyI6IitIcyhCMChy'@;
put 'ZSkrUC5yKX0pfWZ1bmN0aW9uIG5JKHksUCxMKXt2YXIgcmU9V3MoUCkucyxwZT1zcyhMKTtyZXR1cm4gakMoeSx7cjpwZS5yLXJlLnIsYzpwZS5jLXJlLmN9KX1mdW5jdGlvbiBHMSh5KXtyZXR1cm4geS5yZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIEJhKHkpe3kubCs9MX1mdW5j'@;
put 'dGlvbiBaZCh5LFApe3ZhciBMPXkucmVhZF9zaGlmdCgxPT1QPzE6Mik7cmV0dXJuWzE2MzgzJkwsTD4+MTQmMSxMPj4xNSYxXX1mdW5jdGlvbiBKOSh5LFAsTCl7dmFyIFE9MjtpZihMKXtpZihMLmJpZmY+PTImJkwuYmlmZjw9NSlyZXR1cm4gUTkoeSk7MTI9PUwuYmlmZiYmKFE9NCl9dmFy'@;
put 'IHJlPXkucmVhZF9zaGlmdChRKSxwZT15LnJlYWRfc2hpZnQoUSksX2U9WmQoeSwyKSx2ZT1aZCh5LDIpO3JldHVybntzOntyOnJlLGM6X2VbMF0sY1JlbDpfZVsxXSxyUmVsOl9lWzJdfSxlOntyOnBlLGM6dmVbMF0sY1JlbDp2ZVsxXSxyUmVsOnZlWzJdfX19ZnVuY3Rpb24gUTkoeSl7dmFy'@;
put 'IFA9WmQoeSwyKSxMPVpkKHksMiksUT15LnJlYWRfc2hpZnQoMSkscmU9eS5yZWFkX3NoaWZ0KDEpO3JldHVybntzOntyOlBbMF0sYzpRLGNSZWw6UFsxXSxyUmVsOlBbMl19LGU6e3I6TFswXSxjOnJlLGNSZWw6TFsxXSxyUmVsOkxbMl19fX1mdW5jdGlvbiBySSh5LFAsTCl7aWYoTCYmTC5i'@;
put 'aWZmPj0yJiZMLmJpZmY8PTUpcmV0dXJuIGZ1bmN0aW9uIFZaKHkpe3ZhciBQPVpkKHksMiksTD15LnJlYWRfc2hpZnQoMSk7cmV0dXJue3I6UFswXSxjOkwsY1JlbDpQWzFdLHJSZWw6UFsyXX19KHkpO3ZhciBRPXkucmVhZF9zaGlmdChMJiYxMj09TC5iaWZmPzQ6MikscmU9WmQoeSwyKTty'@;
put 'ZXR1cm57cjpRLGM6cmVbMF0sY1JlbDpyZVsxXSxyUmVsOnJlWzJdfX1mdW5jdGlvbiBldih5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMik7cmV0dXJue3I6UCxjOjI1NSZMLGZRdW90ZWQ6ISEoMTYzODQmTCksY1JlbDpMPj4xNSxyUmVsOkw+PjE1fX1mdW5jdGlv'@;
put 'biBxMih5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gJEMoeSxQKXt2YXIgTD1beS5yZWFkX3NoaWZ0KDEpXTtpZigxMj09UClzd2l0Y2goTFswXSl7Y2FzZSAyOkxbMF09NDticmVhaztjYXNlIDQ6TFswXT0xNjticmVhaztjYXNlIDA6TFswXT0x'@;
put 'O2JyZWFrO2Nhc2UgMTpMWzBdPTJ9c3dpdGNoKExbMF0pe2Nhc2UgNDpMWzFdPVNvKHksMSk/IlRSVUUiOiJGQUxTRSIsMTIhPVAmJih5LmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjpMWzFdPVFvW3lbeS5sXV0seS5sKz0xMj09UD80Ojg7YnJlYWs7Y2FzZSAwOnkubCs9ODticmVhaztj'@;
put 'YXNlIDE6TFsxXT1tYSh5KTticmVhaztjYXNlIDI6TFsxXT1WMih5LDAse2JpZmY6UD4wJiZQPDg/MjpQfSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIitMWzBdKX1yZXR1cm4gTH1mdW5jdGlvbiBpdih5LFAsTCl7Zm9yKHZhciBRPXkucmVhZF9zaGlmdCgx'@;
put 'Mj09TC5iaWZmPzQ6MikscmU9W10scGU9MDtwZSE9UTsrK3BlKXJlLnB1c2goKDEyPT1MLmJpZmY/SmM6S2gpKHksOCkpO3JldHVybiByZX1mdW5jdGlvbiBnSSh5LFAsTCl7dmFyIFE9MCxyZT0wOzEyPT1MLmJpZmY/KFE9eS5yZWFkX3NoaWZ0KDQpLHJlPXkucmVhZF9zaGlmdCg0KSk6KHJl'@;
put 'PTEreS5yZWFkX3NoaWZ0KDEpLFE9MSt5LnJlYWRfc2hpZnQoMikpLEwuYmlmZj49MiYmTC5iaWZmPDgmJigtLVEsMD09LS1yZSYmKHJlPTI1NikpO2Zvcih2YXIgcGU9MCxfZT1bXTtwZSE9USYmKF9lW3BlXT1bXSk7KytwZSlmb3IodmFyIHZlPTA7dmUhPXJlOysrdmUpX2VbcGVdW3ZlXT0k'@;
put 'Qyh5LEwuYmlmZik7cmV0dXJuIF9lfWZ1bmN0aW9uIGU1KHksUCxMKXtyZXR1cm4geS5sKz0yLFtldih5KV19ZnVuY3Rpb24gdDUoeSl7cmV0dXJuIHkubCs9NixbXX12YXIgbzY9ZTUsdkk9dDUsbHY9dDUsczY9ZTU7ZnVuY3Rpb24gcTAoeSl7cmV0dXJuIHkubCs9MixbaGwoeSksMSZ5LnJl'@;
put 'YWRfc2hpZnQoMildfXZhciBjdj1lNSx1dj1xMCxfST10NSxiST1lNSxRQz1lNSxCMz1bIkRhdGEiLCJBbGwiLCJIZWFkZXJzIiwiPz8iLCI/RGF0YTIiLCI/PyIsIj9EYXRhSGVhZGVycyIsIj8/IiwiVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0RhdGFUb3RhbHMiLCI/PyIsIj8/IiwiPz8i'@;
put 'LCI/Q3VycmVudCJdLEdzPXsxOntuOiJQdGdFeHAiLGY6ZnVuY3Rpb24gVVooeSxQLEwpe3JldHVybiB5LmwrKyxMJiYxMj09TC5iaWZmP1t5LnJlYWRfc2hpZnQoNCwiaSIpLDBdOlt5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpXX19LDI6e246IlB0Z1Ri'@;
put 'bCIsZjpiY30sMzp7bjoiUHRnQWRkIixmOkJhfSw0OntuOiJQdGdTdWIiLGY6QmF9LDU6e246IlB0Z011bCIsZjpCYX0sNjp7bjoiUHRnRGl2IixmOkJhfSw3OntuOiJQdGdQb3dlciIsZjpCYX0sODp7bjoiUHRnQ29uY2F0IixmOkJhfSw5OntuOiJQdGdMdCIsZjpCYX0sMTA6e246IlB0Z0xl'@;
put 'IixmOkJhfSwxMTp7bjoiUHRnRXEiLGY6QmF9LDEyOntuOiJQdGdHZSIsZjpCYX0sMTM6e246IlB0Z0d0IixmOkJhfSwxNDp7bjoiUHRnTmUiLGY6QmF9LDE1OntuOiJQdGdJc2VjdCIsZjpCYX0sMTY6e246IlB0Z1VuaW9uIixmOkJhfSwxNzp7bjoiUHRnUmFuZ2UiLGY6QmF9LDE4OntuOiJQ'@;
put 'dGdVcGx1cyIsZjpCYX0sMTk6e246IlB0Z1VtaW51cyIsZjpCYX0sMjA6e246IlB0Z1BlcmNlbnQiLGY6QmF9LDIxOntuOiJQdGdQYXJlbiIsZjpCYX0sMjI6e246IlB0Z01pc3NBcmciLGY6QmF9LDIzOntuOiJQdGdTdHIiLGY6ZnVuY3Rpb24gR0MoeSxQLEwpe3JldHVybiB5LmwrKyxGZCh5'@;
put 'LDAsTCl9fSwyNjp7bjoiUHRnU2hlZXQiLGY6ZnVuY3Rpb24gQ0koeSxQLEwpe3JldHVybiB5LmwrPTUseS5sKz0yLHkubCs9Mj09TC5iaWZmPzE6NCxbIlBUR1NIRUVUIl19fSwyNzp7bjoiUHRnRW5kU2hlZXQiLGY6ZnVuY3Rpb24gZHYoeSxQLEwpe3JldHVybiB5LmwrPTI9PUwuYmlmZj80'@;
put 'OjUsWyJQVEdFTkRTSEVFVCJdfX0sMjg6e246IlB0Z0VyciIsZjpmdW5jdGlvbiBKNCh5KXtyZXR1cm4geS5sKyssUW9beS5yZWFkX3NoaWZ0KDEpXX19LDI5OntuOiJQdGdCb29sIixmOmZ1bmN0aW9uIFE0KHkpe3JldHVybiB5LmwrKywwIT09eS5yZWFkX3NoaWZ0KDEpfX0sMzA6e246IlB0'@;
put 'Z0ludCIsZjpmdW5jdGlvbiBNaSh5KXtyZXR1cm4geS5sKysseS5yZWFkX3NoaWZ0KDIpfX0sMzE6e246IlB0Z051bSIsZjpmdW5jdGlvbiBXQyh5KXtyZXR1cm4geS5sKyssbWEoeSl9fSwzMjp7bjoiUHRnQXJyYXkiLGY6ZnVuY3Rpb24gYUkoeSxQLEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+'@;
put 'PjU7cmV0dXJuIHkubCs9Mj09TC5iaWZmPzY6MTI9PUwuYmlmZj8xNDo3LFtRXX19LDMzOntuOiJQdGdGdW5jIixmOmZ1bmN0aW9uIGZJKHksUCxMKXt2YXIgUT0oOTYmeVt5LmxdKT4+NTt5LmwrPTE7dmFyIHJlPXkucmVhZF9zaGlmdChMJiZMLmJpZmY8PTM/MToyKTtyZXR1cm5bYnZbcmVd'@;
put 'LF92W3JlXSxRXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIHBJKHksUCxMKXt2YXIgUT15W3kubCsrXSxyZT15LnJlYWRfc2hpZnQoMSkscGU9TCYmTC5iaWZmPD0zP1s4OD09UT8tMTowLHkucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gWUMoeSl7cmV0dXJuW3lbeS5sKzFdPj43'@;
put 'LDMyNzY3JnkucmVhZF9zaGlmdCgyKV19KHkpO3JldHVybltyZSwoMD09PXBlWzBdP192OmtJKVtwZVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24gcUMoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCgxKT4+PjUmMyxwZT15LnJlYWRfc2hpZnQoIUx8fEwuYmlmZj49OD80OjIp'@;
put 'O3N3aXRjaChMLmJpZmYpe2Nhc2UgMjp5LmwrPTU7YnJlYWs7Y2FzZSAzOmNhc2UgNDp5LmwrPTg7YnJlYWs7Y2FzZSA1OnkubCs9MTJ9cmV0dXJuW1EsMCxwZV19fSwzNjp7bjoiUHRnUmVmIixmOmZ1bmN0aW9uIFpDKHksUCxMKXt2YXIgUT0oOTYmeVt5LmxdKT4+NTtyZXR1cm4geS5sKz0x'@;
put 'LFtRLHJJKHksMCxMKV19fSwzNzp7bjoiUHRnQXJlYSIsZjpmdW5jdGlvbiBqWih5LFAsTCl7cmV0dXJuWyg5NiZ5W3kubCsrXSk+PjUsSjkoeSwwLEwpXX19LDM4OntuOiJQdGdNZW1BcmVhIixmOmZ1bmN0aW9uIFpaKHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJu'@;
put 'IHkubCs9TCYmMj09TC5iaWZmPzM6NCxbUSx5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MildfX0sMzk6e246IlB0Z01lbUVyciIsZjpiY30sNDA6e246IlB0Z01lbU5vTWVtIixmOmJjfSw0MTp7bjoiUHRnTWVtRnVuYyIsZjpmdW5jdGlvbiBzdih5LFAsTCl7cmV0dXJuW3kucmVhZF9z'@;
put 'aGlmdCgxKT4+PjUmMyx5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MildfX0sNDI6e246IlB0Z1JlZkVyciIsZjpmdW5jdGlvbiBtSSh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiB5LmwrPTQsTC5iaWZmPDgmJnkubC0tLDEyPT1MLmJpZmYmJih5LmwrPTIp'@;
put 'LFtRXX19LDQzOntuOiJQdGdBcmVhRXJyIixmOmZ1bmN0aW9uIGlJKHksUCxMKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41O3JldHVybiB5LmwrPUwmJkwuYmlmZj44PzEyOkwuYmlmZjw4PzY6OCxbUV19fSw0NDp7bjoiUHRnUmVmTiIsZjpmdW5jdGlvbiBkSSh5LFAsTCl7dmFyIFE9KDk2Jnlb'@;
put 'eS5sXSk+PjU7eS5sKz0xO3ZhciByZT1mdW5jdGlvbiB0dih5LFAsTCl7dmFyIFE9TCYmTC5iaWZmP0wuYmlmZjo4O2lmKFE+PTImJlE8PTUpcmV0dXJuIGZ1bmN0aW9uIEJaKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgxKSxRPSgzMjc2OCZQKT4+MTUscmU9KDE2'@;
put 'Mzg0JlApPj4xNDtyZXR1cm4gUCY9MTYzODMsMT09USYmUD49ODE5MiYmKFAtPTE2Mzg0KSwxPT1yZSYmTD49MTI4JiYoTC09MjU2KSx7cjpQLGM6TCxjUmVsOnJlLHJSZWw6UX19KHkpO3ZhciByZT15LnJlYWRfc2hpZnQoUT49MTI/NDoyKSxwZT15LnJlYWRfc2hpZnQoMiksX2U9KDE2Mzg0'@;
put 'JnBlKT4+MTQsdmU9KDMyNzY4JnBlKT4+MTU7aWYocGUmPTE2MzgzLDE9PXZlKWZvcig7cmU+NTI0Mjg3OylyZS09MTA0ODU3NjtpZigxPT1fZSlmb3IoO3BlPjgxOTE7KXBlLT0xNjM4NDtyZXR1cm57cjpyZSxjOnBlLGNSZWw6X2UsclJlbDp2ZX19KHksMCxMKTtyZXR1cm5bUSxyZV19fSw0'@;
put 'NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gc0koeSxQLEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+PjUscmU9ZnVuY3Rpb24gTlooeSxQLEwpe2lmKEwuYmlmZjw4KXJldHVybiBROSh5KTt2YXIgUT15LnJlYWRfc2hpZnQoMTI9PUwuYmlmZj80OjIpLHJlPXkucmVhZF9zaGlmdCgxMj09TC5i'@;
put 'aWZmPzQ6MikscGU9WmQoeSwyKSxfZT1aZCh5LDIpO3JldHVybntzOntyOlEsYzpwZVswXSxjUmVsOnBlWzFdLHJSZWw6cGVbMl19LGU6e3I6cmUsYzpfZVswXSxjUmVsOl9lWzFdLHJSZWw6X2VbMl19fX0oeSwwLEwpO3JldHVybltRLHJlXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5j'@;
put 'dGlvbiBhNih5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpPj4+NSYzLHkucmVhZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIFNJKHkpe3JldHVyblt5LnJlYWRfc2hpZnQoMSk+Pj41JjMseS5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpm'@;
put 'dW5jdGlvbiBLQyh5LFAsTCl7cmV0dXJuIDU9PUwuYmlmZj9mdW5jdGlvbiBvdih5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk+Pj41JjMsTD15LnJlYWRfc2hpZnQoMiwiaSIpO3kubCs9ODt2YXIgUT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIHkubCs9MTIsW1AsTCxRXX0oeSk6W3kucmVhZF9z'@;
put 'aGlmdCgxKT4+PjUmMyx5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDQpXX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBoSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sXSk+PjU7eS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIEwmJjU9PUwuYmlmZiYmKHkubCs9'@;
put 'MTIpLFtRLHJlLHJJKHksMCxMKV19fSw1OTp7bjoiUHRnQXJlYTNkIixmOmZ1bmN0aW9uIHpDKHksUCxMKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41LHJlPXkucmVhZF9zaGlmdCgyLCJpIik7aWYoTCYmNT09PUwuYmlmZil5LmwrPTEyO3JldHVybltRLHJlLEo5KHksMCxMKV19fSw2MDp7bjoi'@;
put 'UHRnUmVmRXJyM2QiLGY6ZnVuY3Rpb24gYXYoeSxQLEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+PjUscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPTQ7aWYoTClzd2l0Y2goTC5iaWZmKXtjYXNlIDU6cGU9MTU7YnJlYWs7Y2FzZSAxMjpwZT02fXJldHVybiB5LmwrPXBlLFtRLHJlXX19LDYxOntuOiJQ'@;
put 'dGdBcmVhRXJyM2QiLGY6ZnVuY3Rpb24gb0koeSxQLEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+PjUscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPTg7aWYoTClzd2l0Y2goTC5iaWZmKXtjYXNlIDU6eS5sKz0xMixwZT02O2JyZWFrO2Nhc2UgMTI6cGU9MTJ9cmV0dXJuIHkubCs9cGUsW1EscmVdfX0s'@;
put 'MjU1Ont9fSxNST17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQsNjc6MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3'@;
put 'Njo0NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6NDcsODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6NjF9OyFmdW5jdGlvbigpe2Zvcih2YXIgeSBpbiBNSSlHc1t5XT1H'@;
put 'c1tNSVt5XV19KCk7dmFyIHRTPXsxOntuOiJQdGdFbGZMZWwiLGY6cTB9LDI6e246IlB0Z0VsZlJ3IixmOmJJfSwzOntuOiJQdGdFbGZDb2wiLGY6bzZ9LDY6e246IlB0Z0VsZlJ3ViIsZjpRQ30sNzp7bjoiUHRnRWxmQ29sViIsZjpzNn0sMTA6e246IlB0Z0VsZlJhZGljYWwiLGY6Y3Z9LDEx'@;
put 'OntuOiJQdGdFbGZSYWRpY2FsUyIsZjpfSX0sMTM6e246IlB0Z0VsZkNvbFMiLGY6dkl9LDE1OntuOiJQdGdFbGZDb2xTViIsZjpsdn0sMTY6e246IlB0Z0VsZlJhZGljYWxMZWwiLGY6dXZ9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIHlJKHkpe3kubCs9Mjt2YXIgUD15LnJlYWRfc2hp'@;
put 'ZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoNCkscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTpQLGNvbHR5cGU6MyZMLHJ0OkIzW0w+PjImMzFdLGlkeDpRLGM6cmUsQzpwZX19fSwyOTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0'@;
put 'aW9uIHdJKHkpe3JldHVybiB5LmwrPTIsW3kucmVhZF9zaGlmdCg0KV19fSwyNTU6e319LGw2PXswOntuOiJQdGdBdHRyTm9vcCIsZjpmdW5jdGlvbiBlUyh5KXtyZXR1cm4geS5sKz00LFswLDBdfX0sMTp7bjoiUHRnQXR0clNlbWkiLGY6ZnVuY3Rpb24gVjMoeSxQLEwpe3ZhciBRPTI1NSZ5'@;
put 'W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9TCYmMj09TC5iaWZmPzM6NCxbUV19fSwyOntuOiJQdGdBdHRySWYiLGY6ZnVuY3Rpb24gbnYoeSxQLEwpe3ZhciBRPTI1NSZ5W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9MixbUSx5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MildfX0sNDp7bjoi'@;
put 'UHRnQXR0ckNob29zZSIsZjpmdW5jdGlvbiByNih5LFAsTCl7eS5sKz0yO2Zvcih2YXIgUT15LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MikscmU9W10scGU9MDtwZTw9UTsrK3BlKXJlLnB1c2goeS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpKTtyZXR1cm4gcmV9fSw4OntuOiJQ'@;
put 'dGdBdHRyR290byIsZjpmdW5jdGlvbiBsSSh5LFAsTCl7dmFyIFE9MjU1JnlbeS5sKzFdPzE6MDtyZXR1cm4geS5sKz0yLFtRLHkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKV19fSwxNjp7bjoiUHRnQXR0clN1bSIsZjpmdW5jdGlvbiB6Wih5LFAsTCl7eS5sKz1MJiYyPT1MLmJpZmY/'@;
put 'Mzo0fX0sMzI6e246IlB0Z0F0dHJCYXhjZWwiLGY6ZnVuY3Rpb24gVUMoeSl7dmFyIFA9MSZ5W3kubCsxXTtyZXR1cm4geS5sKz00LFtQLDFdfX0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiB1SSh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDIpLHEyKHkpfX0sNjU6e246IlB0Z0F0'@;
put 'dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gcnYoeSl7cmV0dXJuIHkucmVhZF9zaGlmdCgyKSxxMih5KX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gY0koeSl7dmFyIFA9MjU1JnlbeS5sKzFdPzE6MDtyZXR1cm4geS5sKz0yLFtQLHkucmVhZF9zaGlmdCgyKV19fSwyNTU6'@;
put 'e319O2Z1bmN0aW9uIGozKHksUCxMLFEscmUpe2lmKFEuYmlmZjw4KXJldHVybiBiYyh5LFApO2Zvcih2YXIgcGU9eS5sK1AsX2U9W10sdmU9MDt2ZSE9PUwubGVuZ3RoOysrdmUpc3dpdGNoKExbdmVdWzBdKXtjYXNlIlB0Z0FycmF5IjpMW3ZlXVsxXT1nSSh5LDAsUSksX2UucHVzaChMW3Zl'@;
put 'XVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjpMW3ZlXVsyXT1pdih5LDAsUSksX2UucHVzaChMW3ZlXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOlEmJjEyPT1RLmJpZmYmJihMW3ZlXVsxXVsxXT15LnJlYWRfc2hpZnQoNCksX2UucHVzaChMW3ZlXVsxXSkpO2JyZWFrO2Nhc2UiUHRnTGlz'@;
put 'dCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK0xbdmVdWzBdfXJldHVybiBQPXBlLXkubCwhcmUmJjAhPT1QJiZfZS5wdXNoKGJjKHksUCkpLF9lfWZ1bmN0aW9uIG41KHksUCxMKXtmb3IodmFyIHJl'@;
put 'LHBlLFE9eS5sK1AsX2U9W107USE9eS5sOylQPVEteS5sLHJlPUdzW3BlPXlbeS5sXV0sKDI0PT09cGV8fDI1PT09cGUpJiYocmU9KDI0PT09cGU/dFM6bDYpW3lbeS5sKzFdXSkscmUmJnJlLmY/X2UucHVzaChbcmUubixyZS5mKHksUCxMKV0pOmJjKHksUCk7cmV0dXJuIF9lfWZ1bmN0aW9u'@;
put 'IFlaKHkpe2Zvcih2YXIgUD1bXSxMPTA7TDx5Lmxlbmd0aDsrK0wpe2Zvcih2YXIgUT15W0xdLHJlPVtdLHBlPTA7cGU8US5sZW5ndGg7KytwZSl7dmFyIF9lPVFbcGVdO3JlLnB1c2goX2U/Mj09PV9lWzBdPyciJytfZVsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOl9lWzFdOiIiKX1QLnB1'@;
put 'c2gocmUuam9pbigiLCIpKX1yZXR1cm4gUC5qb2luKCI7Iil9bDZbMzNdPWw2WzMyXTt2YXIgYzY9e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8'@;
put 'PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9LHhJPW5ldyBSZWdFeHAoL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiB1Nih5LFAsTCl7aWYoIXkpcmV0dXJuIlNIMzNUSlNFUlIwIjtpZihMLmJpZmY+OCYmKCF5LlhUSXx8IXkuWFRJW1BdKSlyZXR1cm4geS5T'@;
put 'aGVldE5hbWVzW1BdO2lmKCF5LlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYiO3ZhciBRPXkuWFRJW1BdO2lmKEwuYmlmZjw4KXJldHVybiBQPjFlNCYmKFAtPTY1NTM2KSxQPDAmJihQPS1QKSwwPT1QPyIiOnkuWFRJW1AtMV07aWYoIVEpcmV0dXJuIlNIMzNUSlNFUlIxIjt2YXIgcmU9IiI7aWYo'@;
put 'TC5iaWZmPjgpc3dpdGNoKHlbUVswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiByZT0tMT09UVsxXT8iI1JFRiI6eS5TaGVldE5hbWVzW1FbMV1dLFFbMV09PVFbMl0/cmU6cmUrIjoiK3kuU2hlZXROYW1lc1tRWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9TC5TSUQ/eS5TaGVldE5hbWVzW0wu'@;
put 'U0lEXToiU0gzM1RKU1NBTUUiK3lbUVswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIreVtRWzBdXVswXX1zd2l0Y2goeVtRWzBdXVswXVswXSl7Y2FzZSAxMDI1OnJldHVybiByZT0tMT09UVsxXT8iI1JFRiI6eS5TaGVldE5hbWVzW1FbMV1dfHwiU0gzM1RKU0VSUjMiLFFbMV09'@;
put 'PVFbMl0/cmU6cmUrIjoiK3kuU2hlZXROYW1lc1tRWzJdXTtjYXNlIDE0ODQ5OnJldHVybiB5W1FbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihwZSl7cmV0dXJuIHBlLk5hbWV9KS5qb2luKCI7OyIpO2RlZmF1bHQ6cmV0dXJuIHlbUVswXV1bMF1bM10/KHJlPS0xPT1RWzFdPyIjUkVGIjp5'@;
put 'W1FbMF1dWzBdWzNdW1FbMV1dfHwiU0gzM1RKU0VSUjQiLFFbMV09PVFbMl0/cmU6cmUrIjoiK3lbUVswXV1bMF1bM11bUVsyXV0pOiJTSDMzVEpTRVJSMiJ9fWZ1bmN0aW9uIGNmKHksUCxMKXtyZXR1cm4gZnVuY3Rpb24gaHYoeSxQKXtpZighKHl8fFAmJlAuYmlmZjw9NSYmUC5iaWZmPj0y'@;
put 'KSl0aHJvdyBuZXcgRXJyb3IoImVtcHR5IHNoZWV0IG5hbWUiKTtyZXR1cm4vI1JFRi8udGVzdCh5KT95OnhJLnRlc3QoeSk/IiciK3krIiciOnl9KHU2KHksUCxMKSxMKX1mdW5jdGlvbiB4bCh5LFAsTCxRLHJlLHBlKXt2YXIgSGUsQmUsR2UsQ3QsX2U9cmUmJnJlLmJpZmZ8fDgsdmU9cGUm'@;
put 'Jm51bGwhPVA/UDp7czp7YzowLHI6MH0sZTp7YzowLHI6MH19LFNlPVtdLG50PTAsZHQ9MCxjdD0iIjtpZigheVswXXx8IXlbMF1bMF0pcmV0dXJuIiI7Zm9yKHZhciBidD0tMSxGdD0iIixFdD0wLFR0PXlbMF0ubGVuZ3RoO0V0PFR0OysrRXQpe3ZhciBadD15WzBdW0V0XTtzd2l0Y2goWnRb'@;
put 'MF0pe2Nhc2UiUHRnVW1pbnVzIjpTZS5wdXNoKCItIitTZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdVcGx1cyI6U2UucHVzaCgiKyIrU2UucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6U2UucHVzaChTZS5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6'@;
put 'Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2VyIjpjYXNlIlB0Z1N1YiI6aWYoSGU9U2UucG9wKCksQmU9U2UucG9wKCksYnQ+PTApe3N3aXRj'@;
put 'aCh5WzBdW2J0XVsxXVswXSl7Y2FzZSAwOkZ0PWJuKCIgIix5WzBdW2J0XVsxXVsxXSk7YnJlYWs7Y2FzZSAxOkZ0PWJuKCJcciIseVswXVtidF1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoRnQ9IiIscmUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBl'@;
put 'ICIreVswXVtidF1bMV1bMF0pfUJlKz1GdCxidD0tMX1TZS5wdXNoKEJlK2M2W1p0WzBdXStIZSk7YnJlYWs7Y2FzZSJQdGdJc2VjdCI6SGU9U2UucG9wKCksQmU9U2UucG9wKCksU2UucHVzaChCZSsiICIrSGUpO2JyZWFrO2Nhc2UiUHRnVW5pb24iOkhlPVNlLnBvcCgpLEJlPVNlLnBvcCgp'@;
put 'LFNlLnB1c2goQmUrIiwiK0hlKTticmVhaztjYXNlIlB0Z1JhbmdlIjpIZT1TZS5wb3AoKSxCZT1TZS5wb3AoKSxTZS5wdXNoKEJlKyI6IitIZSk7YnJlYWs7Y2FzZSJQdGdBdHRyQ2hvb3NlIjpjYXNlIlB0Z0F0dHJHb3RvIjpjYXNlIlB0Z0F0dHJJZiI6Y2FzZSJQdGdBdHRySWZFcnJvciI6'@;
put 'Y2FzZSJQdGdBdHRyQmF4Y2VsIjpjYXNlIlB0Z0F0dHJTZW1pIjpjYXNlIlB0Z01lbUFyZWEiOmNhc2UiUHRnVGJsIjpjYXNlIlB0Z01lbUVyciI6Y2FzZSJQdGdNZW1BcmVhTiI6Y2FzZSJQdGdNZW1Ob01lbU4iOmNhc2UiUHRnQXR0ck5vb3AiOmNhc2UiUHRnU2hlZXQiOmNhc2UiUHRnRW5k'@;
put 'U2hlZXQiOmNhc2UiUHRnTWVtRnVuYyI6Y2FzZSJQdGdNZW1Ob01lbSI6YnJlYWs7Y2FzZSJQdGdSZWYiOkdlPWx1KFp0WzFdWzFdLHZlLHJlKSxTZS5wdXNoKEwyKEdlLF9lKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpHZT1MP2x1KFp0WzFdWzFdLEwscmUpOlp0WzFdWzFdLFNlLnB1c2goTDIo'@;
put 'R2UsX2UpKTticmVhaztjYXNlIlB0Z1JlZjNkIjpudD1adFsxXVsxXSxHZT1sdShadFsxXVsyXSx2ZSxyZSksY3Q9Y2YoUSxudCxyZSksU2UucHVzaChjdCsiISIrTDIoR2UsX2UpKTticmVhaztjYXNlIlB0Z0Z1bmMiOmNhc2UiUHRnRnVuY1ZhciI6dmFyIEtuPVp0WzFdWzBdLHVuPVp0WzFd'@;
put 'WzFdO0tufHwoS249MCk7dmFyIHFuPTA9PShLbiY9MTI3KT9bXTpTZS5zbGljZSgtS24pO1NlLmxlbmd0aC09S24sIlVzZXIiPT09dW4mJih1bj1xbi5zaGlmdCgpKSxTZS5wdXNoKHVuKyIoIitxbi5qb2luKCIsIikrIikiKTticmVhaztjYXNlIlB0Z0Jvb2wiOlNlLnB1c2goWnRbMV0/IlRS'@;
put 'VUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6U2UucHVzaChTdHJpbmcoWnRbMV0pKTticmVhaztjYXNlIlB0Z1N0ciI6U2UucHVzaCgnIicrWnRbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdFcnIiOlNlLnB1c2goWnRbMV0pO2Jy'@;
put 'ZWFrO2Nhc2UiUHRnQXJlYU4iOkN0PWhyKFp0WzFdWzFdLEw/e3M6TH06dmUscmUpLFNlLnB1c2gobWkoQ3QscmUpKTticmVhaztjYXNlIlB0Z0FyZWEiOkN0PWhyKFp0WzFdWzFdLHZlLHJlKSxTZS5wdXNoKG1pKEN0LHJlKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOm50PVp0WzFdWzFdLEN0'@;
put 'PWhyKFp0WzFdWzJdLHZlLHJlKSxjdD1jZihRLG50LHJlKSxTZS5wdXNoKGN0KyIhIittaShDdCxyZSkpO2JyZWFrO2Nhc2UiUHRnQXR0clN1bSI6U2UucHVzaCgiU1VNKCIrU2UucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciB6bj0oUS5uYW1lc3x8W10pWyhkdD1adFsxXVsy'@;
put 'XSktMV18fChRWzBdfHxbXSlbZHRdLGtuPXpuP3puLk5hbWU6IlNIMzNUSlNOQU1FIitTdHJpbmcoZHQpO2tuIGluIG81JiYoa249bzVba25dKSxTZS5wdXNoKGtuKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgdHIsZXI9WnRbMV1bMV07aWYoZHQ9WnRbMV1bMl0sIShyZS5iaWZmPD01KSl7'@;
put 'dmFyIFpuPSIiO2lmKDE0ODQ5PT0oKFFbZXJdfHxbXSlbMF18fFtdKVswXXx8KDEwMjU9PSgoUVtlcl18fFtdKVswXXx8W10pWzBdP1FbZXJdW2R0XSYmUVtlcl1bZHRdLml0YWI+MCYmKFpuPVEuU2hlZXROYW1lc1tRW2VyXVtkdF0uaXRhYi0xXSsiISIpOlpuPVEuU2hlZXROYW1lc1tkdC0x'@;
put 'XSsiISIpLFFbZXJdJiZRW2VyXVtkdF0pWm4rPVFbZXJdW2R0XS5OYW1lO2Vsc2UgaWYoUVswXSYmUVswXVtkdF0pWm4rPVFbMF1bZHRdLk5hbWU7ZWxzZXt2YXIgb2k9KHU2KFEsZXIscmUpfHwiIikuc3BsaXQoIjs7Iik7b2lbZHQtMV0/Wm49b2lbZHQtMV06Wm4rPSJTSDMzVEpTRVJSWCJ9'@;
put 'U2UucHVzaChabik7YnJlYWt9ZXI8MCYmKGVyPS1lciksUVtlcl0mJih0cj1RW2VyXVtkdF0pLHRyfHwodHI9e05hbWU6IlNIMzNUSlNFUlJZIn0pLFNlLnB1c2godHIuTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6dmFyIGtpPSIoIixMaT0iKSI7aWYoYnQ+PTApe3N3aXRjaChGdD0iIix5'@;
put 'WzBdW2J0XVsxXVswXSl7Y2FzZSAyOmtpPWJuKCIgIix5WzBdW2J0XVsxXVsxXSkra2k7YnJlYWs7Y2FzZSAzOmtpPWJuKCJcciIseVswXVtidF1bMV1bMV0pK2tpO2JyZWFrO2Nhc2UgNDpMaT1ibigiICIseVswXVtidF1bMV1bMV0pK0xpO2JyZWFrO2Nhc2UgNTpMaT1ibigiXHIiLHlbMF1b'@;
put 'YnRdWzFdWzFdKStMaTticmVhaztkZWZhdWx0OmlmKHJlLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK3lbMF1bYnRdWzFdWzBdKX1idD0tMX1TZS5wdXNoKGtpK1NlLnBvcCgpK0xpKTticmVhaztjYXNlIlB0Z1JlZkVyciI6Y2FzZSJQdGdBcmVh'@;
put 'RXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Y2FzZSJQdGdSZWZFcnIzZCI6U2UucHVzaCgiI1JFRiEiKTticmVhaztjYXNlIlB0Z0V4cCI6dmFyIHVyPXtjOkwuYyxyOkwucn07aWYoUS5zaGFyZWRmW2RpKEdlPXtjOlp0WzFdWzFdLHI6WnRbMV1bMF19KV0pe3ZhciBBbj1RLnNoYXJlZGZbZGko'@;
put 'R2UpXTtTZS5wdXNoKHhsKEFuLHZlLHVyLFEscmUpKX1lbHNle3ZhciB2cj0hMTtmb3IoSGU9MDtIZSE9US5hcnJheWYubGVuZ3RoOysrSGUpaWYoIShHZS5jPChCZT1RLmFycmF5ZltIZV0pWzBdLnMuY3x8R2UuYz5CZVswXS5lLmN8fEdlLnI8QmVbMF0ucy5yfHxHZS5yPkJlWzBdLmUucikp'@;
put 'e1NlLnB1c2goeGwoQmVbMV0sdmUsdXIsUSxyZSkpLHZyPSEwO2JyZWFrfXZyfHxTZS5wdXNoKFp0WzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpTZS5wdXNoKCJ7IitZWihadFsxXSkrIn0iKTticmVhaztjYXNlIlB0Z0F0dHJTcGFjZSI6Y2FzZSJQdGdBdHRyU3BhY2VTZW1pIjpidD1FdDti'@;
put 'cmVhaztjYXNlIlB0Z01pc3NBcmciOlNlLnB1c2goIiIpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6U2UucHVzaCgiVGFibGUiK1p0WzFdLmlkeCsiWyMiK1p0WzFdLnJ0KyJdIik7YnJlYWs7Y2FzZSJQdGdFbGZDb2wiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6Y2FzZSJQdGdF'@;
put 'bGZDb2xWIjpjYXNlIlB0Z0VsZkxlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsIjpjYXNlIlB0Z0VsZlJhZGljYWxMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmUnciOmNhc2UiUHRnRWxmUndWIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVMRnMiKTtkZWZhdWx0OnRo'@;
put 'cm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEZvcm11bGEgVG9rZW46ICIrU3RyaW5nKFp0KSl9aWYoMyE9cmUuYmlmZiYmYnQ+PTAmJi0xPT1bIlB0Z0F0dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRyR290byJdLmluZGV4T2YoeVswXVtFdF1bMF0pKXt2YXIgU249ITA7'@;
put 'c3dpdGNoKChadD15WzBdW2J0XSlbMV1bMF0pe2Nhc2UgNDpTbj0hMTtjYXNlIDA6RnQ9Ym4oIiAiLFp0WzFdWzFdKTticmVhaztjYXNlIDU6U249ITE7Y2FzZSAxOkZ0PWJuKCJcciIsWnRbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoRnQ9IiIscmUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5l'@;
put 'eHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrWnRbMV1bMF0pfVNlLnB1c2goKFNuP0Z0OiIiKStTZS5wb3AoKSsoU24/IiI6RnQpKSxidD0tMX19aWYoU2UubGVuZ3RoPjEmJnJlLldURil0aHJvdyBuZXcgRXJyb3IoImJhZCBmb3JtdWxhIHN0YWNrIik7cmV0dXJuIFNlWzBdfWZ1bmN0aW9u'@;
put 'IGZ2KHksUCxMKXt2YXIgcGUsUT15LmwrUCxyZT0yPT1MLmJpZmY/MToyLF9lPXkucmVhZF9zaGlmdChyZSk7aWYoNjU1MzU9PV9lKXJldHVybltbXSxiYyh5LFAtMildO3ZhciB2ZT1uNSh5LF9lLEwpO3JldHVybiBQIT09X2UrcmUmJihwZT1qMyh5LFAtX2UtcmUsdmUsTCkpLHkubD1RLFt2'@;
put 'ZSxwZV19ZnVuY3Rpb24gaTUoeSxQLEwpe3ZhciByZSxRPXkubCtQLHBlPXkucmVhZF9zaGlmdCgyKSxfZT1uNSh5LHBlLEwpO3JldHVybiA2NTUzNT09cGU/W1tdLGJjKHksUC0yKV06KFAhPT1wZSsyJiYocmU9ajMoeSxRLXBlLTIsX2UsTCkpLFtfZSxyZV0pfWZ1bmN0aW9uIHozKHksUCxM'@;
put 'KXt2YXIgUT15LmwrUCxyZT1MdSh5KTsyPT1MLmJpZmYmJisreS5sO3ZhciBwZT1mdW5jdGlvbiBuUyh5KXt2YXIgUDtpZig2NTUzNSE9PVluKHkseS5sKzYpKXJldHVyblttYSh5KSwibiJdO3N3aXRjaCh5W3kubF0pe2Nhc2UgMDpyZXR1cm4geS5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2Ug'@;
put 'MTpyZXR1cm4gUD0xPT09eVt5LmwrMl0seS5sKz04LFtQLCJiIl07Y2FzZSAyOnJldHVybiBQPXlbeS5sKzJdLHkubCs9OCxbUCwiZSJdO2Nhc2UgMzpyZXR1cm4geS5sKz04LFsiIiwicyJdfXJldHVybltdfSh5KSxfZT15LnJlYWRfc2hpZnQoMSk7MiE9TC5iaWZmJiYoeS5yZWFkX3NoaWZ0'@;
put 'KDEpLEwuYmlmZj49NSYmeS5yZWFkX3NoaWZ0KDQpKTt2YXIgdmU9ZnVuY3Rpb24gcjUoeSxQLEwpe3ZhciBwZSxRPXkubCtQLHJlPTI9PUwuYmlmZj8xOjIsX2U9eS5yZWFkX3NoaWZ0KHJlKTtpZig2NTUzNT09X2UpcmV0dXJuW1tdLGJjKHksUC0yKV07dmFyIHZlPW41KHksX2UsTCk7cmV0'@;
put 'dXJuIFAhPT1fZStyZSYmKHBlPWozKHksUC1fZS1yZSx2ZSxMKSkseS5sPVEsW3ZlLHBlXX0oeSxRLXkubCxMKTtyZXR1cm57Y2VsbDpyZSx2YWw6cGVbMF0sZm9ybXVsYTp2ZSxzaGFyZWQ6X2U+PjMmMSx0dDpwZVsxXX19ZnVuY3Rpb24gdWYoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCg0'@;
put 'KSxyZT1uNSh5LFEsTCkscGU9eS5yZWFkX3NoaWZ0KDQpO3JldHVybltyZSxwZT4wP2ozKHkscGUscmUsTCwhMCk6bnVsbF19dmFyIHJTPXVmLGg2PXVmLGlTPXVmLG9TPWZ1bmN0aW9uIGd2KHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9eS5yZWFkX3NoaWZ0KDQpLHBlPW41KHks'@;
put 'USxMKTtyZXR1cm5bcGUscmU+MD9qMyh5LHJlLHBlLEwsITApOm51bGxdfSxzUz11ZixFST11ZjtmdW5jdGlvbiBtdih5KXtpZigoMHx5KT09eSYmeTxNYXRoLnBvdygyLDE2KSYmeT49MCl7dmFyIFA9ZnIoMTEpO3JldHVybiBQLndyaXRlX3NoaWZ0KDQsMyksUC53cml0ZV9zaGlmdCgxLDMw'@;
put 'KSxQLndyaXRlX3NoaWZ0KDIseSksUC53cml0ZV9zaGlmdCg0LDApLFB9dmFyIEw9ZnIoMTcpO3JldHVybiBMLndyaXRlX3NoaWZ0KDQsMTEpLEwud3JpdGVfc2hpZnQoMSwzMSksTC53cml0ZV9zaGlmdCg4LHkpLEwud3JpdGVfc2hpZnQoNCwwKSxMfWZ1bmN0aW9uIGFTKHkpe3ZhciBQPWZy'@;
put 'KDcpO1Aud3JpdGVfc2hpZnQoNCwzKzIqeS5sZW5ndGgpLFAud3JpdGVfc2hpZnQoMSwyMyksUC53cml0ZV9zaGlmdCgyLHkubGVuZ3RoKTt2YXIgTD1mcigyKnkubGVuZ3RoKTtMLndyaXRlX3NoaWZ0KDIqeS5sZW5ndGgseSwidXRmMTZsZSIpO3ZhciBRPWZyKDQpO3JldHVybiBRLndyaXRl'@;
put 'X3NoaWZ0KDQsMCksUyhbUCxMLFFdKX1mdW5jdGlvbiBVMyh5KXtpZih5Lm1hdGNoKC9eIyhESVZcLzAhfEdFVFRJTkdfREFUQXxOXC9BfE5BTUVcP3xOVUxMIXxOVU0hfFJFRiF8VkFMVUUhKSQvKSlyZXR1cm4gZnVuY3Rpb24gR1ooeSl7dmFyIFA9ZnIoMTApO3JldHVybiBQLndyaXRlX3No'@;
put 'aWZ0KDQsMiksUC53cml0ZV9zaGlmdCgxLDI4KSxQLndyaXRlX3NoaWZ0KDEseSksUC53cml0ZV9zaGlmdCg0LDApLFB9KCtLYVt5XSk7aWYoeS5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRb'@;
put 'MC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pJC8pKXJldHVybiBmdW5jdGlvbiB2dih5KXt2YXIgUD1zcyh5KSxMPWZyKDE1KTtyZXR1cm4gTC53cml0ZV9zaGlmdCg0LDcpLEwud3JpdGVfc2hpZnQoMSwzNiksTC53cml0ZV9z'@;
put 'aGlmdCg0LFAuciksTC53cml0ZV9zaGlmdCgyLFAuY3woIiQiPT15LmNoYXJBdCgwKT8wOjEpPDwxNHwoeS5tYXRjaCgvXCRcZC8pPzA6MSk8PDE1KSxMLndyaXRlX3NoaWZ0KDQsMCksTH0oeSk7aWYoeS5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIGFTKHkpO3Rocm93IkZvcm11bGEgfCIreSsi'@;
put 'fCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIga0k9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoi'@;
put 'UVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIs'@;
put 'MjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJE'@;
put 'QVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0'@;
put 'NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2'@;
put 'MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5M'@;
put 'SU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIs'@;
put 'ODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6'@;
put 'IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklO'@;
put 'RC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJE'@;
put 'RUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9B'@;
put 'UkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwx'@;
put 'MzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElO'@;
put 'RSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1'@;
put 'MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6'@;
put 'IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToi'@;
put 'TUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5B'@;
put 'UkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RF'@;
put 'IiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJ'@;
put 'R04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBS'@;
put 'RVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFU'@;
put 'QSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRP'@;
put 'Vy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8i'@;
put 'LDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9P'@;
put 'Sy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9P'@;
put 'TCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5'@;
put 'OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1Qu'@;
put 'QURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9O'@;
put 'Uy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxM'@;
put 'RVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQu'@;
put 'TUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVS'@;
put 'VElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRF'@;
put 'TEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VC'@;
put 'VE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIw'@;
put 'OiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIu'@;
put 'Q0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBS'@;
put 'T1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFM'@;
put 'T0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5M'@;
put 'SVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFS'@;
put 'LlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hF'@;
put 'RVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRB'@;
put 'QkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hF'@;
put 'RVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEi'@;
put 'LDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMi'@;
put 'LDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LF92PXswOiJDT1VOVCIsMToiSUYiLDI6'@;
put 'IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6'@;
put 'IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIs'@;
put 'MzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNU'@;
put 'Iiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJN'@;
put 'T05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJD'@;
put 'SCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElP'@;
put 'TiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQu'@;
put 'VkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwx'@;
put 'MjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVB'@;
put 'RExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoi'@;
put 'SU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoi'@;
put 'REVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJD'@;
put 'T1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwx'@;
put 'ODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUi'@;
put 'LDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNI'@;
put 'QiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZ'@;
put 'IiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwy'@;
put 'MzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5G'@;
put 'TyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRF'@;
put 'IiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3'@;
put 'OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3'@;
put 'ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElT'@;
put 'VCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NP'@;
put 'TiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJT'@;
put 'T04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJT'@;
put 'TUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQ'@;
put 'SVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksi'@;
put 'LDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5H'@;
put 'RVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJ'@;
put 'REFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQ'@;
put 'IiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwz'@;
put 'ODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6'@;
put 'IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6'@;
put 'IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVS'@;
put 'RkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElT'@;
put 'QyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0'@;
put 'ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1E'@;
put 'VVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0'@;
put 'Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VO'@;
put 'VCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LGJ2PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoy'@;
put 'LDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoy'@;
put 'LDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEs'@;
put 'MTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2'@;
put 'OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIs'@;
put 'Mjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAy'@;
put 'OjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMs'@;
put 'MzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1'@;
put 'OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYs'@;
put 'NDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0sbzU9eyJfeGxmbi5BQ09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdF'@;
put 'SUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJCQVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4u'@;
put 'QklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5JTlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklU'@;
put 'UlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5NQVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoi'@;
put 'Q0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5SVCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJf'@;
put 'eGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJDT05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJD'@;
put 'T1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJDU0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJ'@;
put 'TkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJGQy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxm'@;
put 'bi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYuVEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJ'@;
put 'U0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09ORklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNB'@;
put 'U1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVDQVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJf'@;
put 'eGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBSRUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5B'@;
put 'IjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09UIjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIs'@;
put 'Il94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEiOiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJM'@;
put 'T0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoiTUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVO'@;
put 'SVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09SS0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5J'@;
put 'TlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMuSU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVY'@;
put 'QyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6'@;
put 'IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVF'@;
put 'UllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEiLCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMi'@;
put 'LCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVWLlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJU'@;
put 'IjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklOViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVO'@;
put 'SUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5WQVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwi'@;
put 'OiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5jdGlvbiBsUyh5KXtyZXR1cm4ib2Y6Ij09eS5zbGljZSgwLDMpJiYoeT15LnNsaWNlKDMpKSw2MT09eS5jaGFyQ29kZUF0KDApJiY2MT09KHk9eS5zbGljZSgxKSkuY2hhckNvZGVB'@;
put 'dCgwKSYmKHk9eS5zbGljZSgxKSksKHk9KHk9KHk9eS5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIpKS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKFAsTCl7cmV0dXJuIEwucmVwbGFjZSgvXC4vZywiIil9KSku'@;
put 'cmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxhY2UoL1x8L2csIjsiKX1mdW5jdGlvbiBjUyh5KXtyZXR1cm4oIm9mOj0iK3kucmVwbGFjZShxOSwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFj'@;
put 'ZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24geXYoeSl7dmFyIFA9eS5zcGxpdCgiOiIpO3JldHVybltQWzBdLnNwbGl0KCIuIilbMF0sUFswXS5zcGxpdCgiLiIpWzFdKyhQLmxlbmd0aD4xPyI6IisoUFsxXS5zcGxpdCgiLiIpWzFdfHxQWzFdLnNwbGl0KCIuIilbMF0p'@;
put 'OiIiKV19ZnVuY3Rpb24gdVMoeSl7cmV0dXJuIHkucmVwbGFjZSgvXC4vLCIhIil9dmFyIGY2PXt9LFozPXt9O0hpLldTPVsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5v'@;
put 'Y2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdO3ZhciBLMD10eXBlb2YgTWFwPCJ1IjtmdW5jdGlvbiB3dih5LFAsTCxRKXt2YXIgcmU9MCxwZT15Lmxlbmd0aDtpZihRKXtpZihLMD9RLmhhcyhQKTpPYmplY3QucHJvdG90eXBlLmhhc093blBy'@;
put 'b3BlcnR5LmNhbGwoUSxQKSlmb3IodmFyIF9lPUswP1EuZ2V0KFApOlFbUF07cmU8X2UubGVuZ3RoOysrcmUpaWYoeVtfZVtyZV1dLnQ9PT1QJiYoIXlbX2VbcmVdXS5yJiYhTHx8eVtfZVtyZV1dLnI9PUwpKXJldHVybiB5LkNvdW50KyssX2VbcmVdfWVsc2UgZm9yKDtyZTxwZTsrK3JlKWlm'@;
put 'KHlbcmVdLnQ9PT1QJiYoIXlbcmVdLnImJiFMfHx5W3JlXS5yPT1MKSlyZXR1cm4geS5Db3VudCsrLHJlO3JldHVybiB5W3BlXT17dDpQLHI6TH0seS5Db3VudCsrLHkuVW5pcXVlKyssUSYmKEswPyhRLmhhcyhQKXx8US5zZXQoUCxbXSksUS5nZXQoUCkucHVzaChwZSkpOihPYmplY3QucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUSxQKXx8KFFbUF09W10pLFFbUF0ucHVzaChwZSkpKSxwZX1mdW5jdGlvbiBZZCh5LFApe3ZhciBMPXttaW46eSsxLG1heDp5KzF9LFE9cGw7aWYoIVApcmV0dXJuIFA7dmFyIHJlPS0xO3JldHVybiBQLmF1dG8mJihMLmJlc3RGaXQ9MSxQLmJl'@;
put 'c3R3aWR0aCYmKHJlPVAuYmVzdHdpZHRoKSxkZWxldGUgUC5iZXN0d2lkdGgpLG51bGwhPVAud3B4P3JlPXRmKFAud3B4KTpudWxsIT1QLndjaD9yZT1QLndjaDpudWxsIT1QLndpZHRoJiYoTC5jdXN0b21XaWR0aD0xKSxyZT4tMT8oTC53aWR0aD1qZChyZSksTC5jdXN0b21XaWR0aD0xKTpu'@;
put 'dWxsIT1QLndpZHRoJiYoTC53aWR0aD1QLndpZHRoKSxQLmhpZGRlbiYmKEwuaGlkZGVuPSEwKSxMLmJlc3RGaXQmJmRlbGV0ZSBMLmN1c3RvbVdpZHRoLHBsPVEsbnVsbCE9UC5sZXZlbCYmKEwub3V0bGluZUxldmVsPUwubGV2ZWw9UC5sZXZlbCksbnVsbCE9UC5zdHlsZSYmKEwuc3R5bGU9'@;
put 'UC5zdHlsZSksTH1mdW5jdGlvbiBOaSh5LFAsTCl7dmFyIFE9V3MoeVsiIXJlZiJdKSxyZT0wLHBlPXlbIiFtZXJnZXMiXXx8W10sX2U9QXJyYXkuaXNBcnJheSh5KTtlOmZvcih2YXIgdmU9MDt2ZTw9US5lLnI7Kyt2ZSl7Zm9yKHZhciBTZT0wO1NlPHBlLmxlbmd0aDsrK1NlKWlmKHBlW1Nl'@;
put 'XS5zLnI8PXZlJiZ2ZTw9cGVbU2VdLmUuciYmcGVbU2VdLnMuYzw9TCYmTDw9cGVbU2VdLmUuYyljb250aW51ZSBlO3ZhciBIZT1fZT8oeVt2ZV18fFtdKVtMXTp5W2RpKHtyOnZlLGM6TH0pXTtpZihIZSl7dmFyIEJlPTE7aWYoSGUucyYmKEJlPVZtKEhlLnMpL05tLkNhbGlicmlbMTJdfHwx'@;
put 'KSxIZS53KXJlPU1hdGgubWF4KHJlLEhlLncubGVuZ3RoKkJlKTtlbHNlIHN3aXRjaChIZS50KXtjYXNlImIiOmNhc2UiZSI6cmU9TWF0aC5tYXgocmUsNSpCZSk7YnJlYWs7Y2FzZSJzIjpyZT1NYXRoLm1heChyZSxIZS52Lmxlbmd0aCpCZSoxLjJ8MCk7YnJlYWs7Y2FzZSJuIjpybShIZSxI'@;
put 'ZS52KSxyZT1NYXRoLm1heChyZSxTdHJpbmcoSGUud3x8SGUudikubGVuZ3RoKkJlKTticmVhaztjYXNlImQiOnJlPU1hdGgubWF4KHJlLDgqQmUpfX19cmU8MSYmKHJlPTEpLFAuYmVzdHdpZHRoPXJlfWZ1bmN0aW9uIGRmKHksUCl7aWYoeSl7dmFyIEw9Wy43LC43LC43NSwuNzUsLjMsLjNd'@;
put 'OyJ4bG1sIj09UCYmKEw9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT15LmxlZnQmJih5LmxlZnQ9TFswXSksbnVsbD09eS5yaWdodCYmKHkucmlnaHQ9TFsxXSksbnVsbD09eS50b3AmJih5LnRvcD1MWzJdKSxudWxsPT15LmJvdHRvbSYmKHkuYm90dG9tPUxbM10pLG51bGw9PXkuaGVhZGVyJiYo'@;
put 'eS5oZWFkZXI9TFs0XSksbnVsbD09eS5mb290ZXImJih5LmZvb3Rlcj1MWzVdKX19ZnVuY3Rpb24gRm8oeSxQKXtmb3IodmFyIEw9bHQoUCksUT0wO1E8eS5sZW5ndGg7KytRKXt2YXIgcmU9ITAscGU9eVtRXTtpZihwZSYmTC5sZW5ndGg9PWx0KHBlKS5sZW5ndGgmJihMLmZvckVhY2goZnVu'@;
put 'Y3Rpb24oX2Upe2lmKHJlKXtpZihudWxsPT09UFtfZV0hPShudWxsPT09cGVbX2VdKSlyZXR1cm4gdm9pZChyZT0hMSk7aWYoIm9iamVjdCI9PXR5cGVvZiBQW19lXSlpZihbImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5pbmRleE9mKF9lKT4tMSl7aWYoJDAoUFtfZV0scGVbX2VdKSly'@;
put 'ZXR1cm4gdm9pZChyZT0hMSl9ZWxzZXtpZighKFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uaW5kZXhPZihfZSk+LTEpKXJldHVybiB2b2lkKHJlPSExKTtpZihQbShQW19lXSxwZVtfZV0pKXJldHVybiB2b2lkKHJlPSExKX1pZihQW19lXSE9cGVbX2VdKXJldHVybiB2b2lkKHJl'@;
put 'PSExKX19KSxyZSkpcmV0dXJuIFF9cmV0dXJuIHlbeS5sZW5ndGhdPW9uKFApLHkubGVuZ3RoLTF9ZnVuY3Rpb24gZ3UoeSxQLEwsUSl7dmFyIHJlPVEucmV2c3NmW251bGwhPUwuej9MLno6IkdlbmVyYWwiXSxwZT02MCxfZT15Lmxlbmd0aDtpZihudWxsPT1yZSYmUS5zc2YpZm9yKDtwZTwz'@;
put 'OTI7KytwZSlpZihudWxsPT1RLnNzZltwZV0pe3cubG9hZChMLnoscGUpLFEuc3NmW3BlXT1MLnosUS5yZXZzc2ZbTC56XT1yZT1wZTticmVha312YXIgdmU9MCxTZT0wLEhlPTAsQmU9MDtpZihRLmNlbGxTdHlsZXMpe2lmKEwucyl7aWYoUS5Gb250cyl7TC5zLmNvbG9yfHwoTC5zLmNvbG9y'@;
put 'PXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIgR2U9KEwucy5ib2xkPzE6MCl8KEwucy5pdGFsaWM/MjowKXwoTC5zLnN0cmlrZT80OjApfChMLnMuc2hhZG93Pzg6MCk7dmU8US5Gb250cy5sZW5ndGg7Kyt2ZSl7dmFyIG50PVEuRm9udHNbdmVdO2lmKG51bGw9PW50LmZvbnRoYXNo'@;
put 'JiYobnQuZm9udGhhc2g9KG50LmJvbGQ/MTowKXwobnQuaXRhbGljPzI6MCl8KG50LnN0cmlrZT80OjApfChudC5zaGFkb3c/ODowKSksIShHZSE9bnQuZm9udGhhc2h8fCEhTC5zLmNvbG9yIT0hIW50LmNvbG9yfHxMLnMudmFsaWduIT1udC52YWxpZ258fChMLnMuc3p8fG50LnN6KSYmKEwu'@;
put 'cy5zenx8MTIpIT0obnQuc3p8fDEyKXx8TC5zLm5hbWUmJkwucy5uYW1lIT1udC5uYW1lfHwoTC5zLnVuZGVybGluZXx8MCkhPShudC51bmRlcmxpbmV8fDApfHxMLnMuY29sb3ImJiQwKEwucy5jb2xvcixudC5jb2xvcikpKWJyZWFrfXZlPT1RLkZvbnRzLmxlbmd0aCYmKFEuRm9udHMucHVz'@;
put 'aCh7c3o6TC5zLnN6fHwxMixjb2xvcjpMLnMuY29sb3J8fHt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZTpMLnMubmFtZXx8IkNhbGlicmkiLGZhbWlseTpMLnMuZmFtaWx5fHwyLHNjaGVtZTpMLnMuc2NoZW1lLGJvbGQ6TC5zLmJvbGQsaXRhbGljOkwucy5pdGFsaWMsc3RyaWtlOkwucy5z'@;
put 'dHJpa2Usc2hhZG93Okwucy5zaGFkb3csdmFsaWduOkwucy52YWxpZ24sdW5kZXJsaW5lOkwucy51bmRlcmxpbmV9KSwxPT1RLkZvbnRzLmxlbmd0aCYmWjEoUS5Gb250c1swXSkpfWlmKFEuRmlsbHMpe2Zvcig7U2U8US5GaWxscy5sZW5ndGg7KytTZSl7dmFyIGR0PVEuRmlsbHNbU2VdO2lm'@;
put 'KCEhTC5zLnN0b3BzPT0hIWR0LnN0b3BzKXtpZihMLnMuc3RvcHMpe2lmKEwucy5hbmdsZSE9ZHQuYW5nbGUpY29udGludWU7dmFyIEN0PSEwO2lmKEwucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKEV0LFR0KXskMChFdCxkdC5zdG9wc1tUdF0pJiYoQ3Q9ITEpLEV0LnYhPWR0LnN0b3BzW1R0'@;
put 'XS52JiYoQ3Q9ITEpfSksIUN0KWNvbnRpbnVlfWVsc2V7aWYobnVsbD09TC5zLnBhdHRlcm5UeXBlJiZMLnMuZmdDb2xvciYmKEwucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1MLnMucGF0dGVyblR5cGUpYnJlYWs7aWYoTC5zLnBhdHRlcm5UeXBlIT1kdC5wYXR0ZXJuVHlwZXx8JDAo'@;
put 'TC5zLmZnQ29sb3IsZHQuZmdDb2xvcil8fCQwKEwucy5iZ0NvbG9yLGR0LmJnQ29sb3IpKWNvbnRpbnVlfWJyZWFrfX1pZihTZT09US5GaWxscy5sZW5ndGgpe3ZhciBjdD17fTtMLnMuc3RvcHM/KG51bGwhPUwucy5hbmdsZSYmKGN0LmFuZ2xlPUwucy5hbmdsZSksY3Quc3RvcHM9W10sTC5z'@;
put 'LnN0b3BzLmZvckVhY2goZnVuY3Rpb24oRXQpe2N0LnN0b3BzLnB1c2gob24oRXQpKX0pKTpjdD17cGF0dGVyblR5cGU6TC5zLnBhdHRlcm5UeXBlLGZnQ29sb3I6TC5zLmZnQ29sb3IsYmdDb2xvcjpMLnMuYmdDb2xvcn0sUS5GaWxscy5wdXNoKGN0KX19aWYoUS5Cb3JkZXJzKXtmb3IoO0hl'@;
put 'PFEuQm9yZGVycy5sZW5ndGg7KytIZSl7dmFyIGJ0PVEuQm9yZGVyc1tIZV0sRnQ9InRvcCI7aWYoTC5zW0Z0XSl7aWYoIWJ0W0Z0XXx8TC5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtG'@;
put 'dF0pY29udGludWU7aWYoTC5zW0Z0PSJib3R0b20iXSl7aWYoIWJ0W0Z0XXx8TC5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGludWU7aWYoTC5zW0Z0PSJsZWZ0Il0pe2lm'@;
put 'KCFidFtGdF18fEwuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8JDAoTC5zW0Z0XS5jb2xvcixidFtGdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbRnRdKWNvbnRpbnVlO2lmKEwuc1tGdD0icmlnaHQiXSl7aWYoIWJ0W0Z0XXx8TC5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0'@;
put 'eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGludWU7YnJlYWt9SGU9PVEuQm9yZGVycy5sZW5ndGgmJlEuQm9yZGVycy5wdXNoKHt0b3A6TC5zLnRvcCYmb24oTC5zLnRvcCl8fHZvaWQgMCxib3R0b206TC5zLmJv'@;
put 'dHRvbSYmb24oTC5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0Okwucy5sZWZ0JiZvbihMLnMubGVmdCl8fHZvaWQgMCxyaWdodDpMLnMucmlnaHQmJm9uKEwucy5yaWdodCl8fHZvaWQgMH0pfWlmKFAmJkwucy5zdHlsZSYmIk5vcm1hbCIhPT1MLnMuc3R5bGUpe2ZvcihCZT0xO0JlPFAubGVuZ3Ro'@;
put 'JiZQW0JlXS5uYW1lIT1MLnMuc3R5bGU7KytCZSk7QmU9PVAubGVuZ3RoJiZQLnB1c2goe25hbWU6TC5zLnN0eWxlLG51bUZtdElkOnJlLGZvbnRJZDp2ZSxmaWxsSWQ6U2UsYm9yZGVySWQ6SGV9KX19Zm9yKHBlPTA7cGUhPV9lOysrcGUpaWYoeVtwZV0ubnVtRm10SWQ9PXJlJiZ5W3BlXS5m'@;
put 'b250SWQ9PXZlJiZ5W3BlXS5maWxsSWQ9PVNlJiZ5W3BlXS5ib3JkZXJJZD09SGUmJnlbcGVdLnhmSWQ9PUJlKXtpZihMLnMmJkwucy5hbGlnbm1lbnQpe2lmKCF5W3BlXS5hbGlnbm1lbnQpY29udGludWU7aWYoTC5zLmFsaWdubWVudC5ob3Jpem9udGFsIT15W3BlXS5hbGlnbm1lbnQuaG9y'@;
put 'aXpvbnRhbHx8TC5zLmFsaWdubWVudC52ZXJ0aWNhbCE9eVtwZV0uYWxpZ25tZW50LnZlcnRpY2FsfHxMLnMuYWxpZ25tZW50LndyYXBUZXh0IT15W3BlXS5hbGlnbm1lbnQud3JhcFRleHR8fEwucy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQhPXlbcGVdLmFsaWdubWVudC5zaHJpbmtUb0ZpdHx8'@;
put 'TC5zLmFsaWdubWVudC50ZXh0Um90YXRpb24hPXlbcGVdLmFsaWdubWVudC50ZXh0Um90YXRpb258fEwucy5hbGlnbm1lbnQuaW5kZW50IT15W3BlXS5hbGlnbm1lbnQuaW5kZW50KWNvbnRpbnVlfWVsc2UgaWYoeVtwZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKEwucyl7aWYoISFMLnMuaGlk'@;
put 'ZGVuPT0oIXlbcGVdLnByb3RlY3Rpb258fCF5W3BlXS5wcm90ZWN0aW9uLmhpZGRlbil8fCEhTC5zLmVkaXRhYmxlPT0oIXlbcGVdLnByb3RlY3Rpb258fCF5W3BlXS5wcm90ZWN0aW9uLmVkaXRhYmxlKSljb250aW51ZX1lbHNlIGlmKHlbcGVdLnByb3RlY3Rpb24pY29udGludWU7cmV0dXJu'@;
put 'IHBlfX1lbHNlIGZvcihwZT0wO3BlIT1fZTsrK3BlKWlmKHlbcGVdLm51bUZtdElkPT09cmUpcmV0dXJuIHBlO3JldHVybiB5W19lXT17bnVtRm10SWQ6cmUsZm9udElkOnZlLGZpbGxJZDpTZSxib3JkZXJJZDpIZSx4ZklkOkJlLGFwcGx5TnVtYmVyRm9ybWF0OjF9LHZlPjAmJih5W19lXS5h'@;
put 'cHBseUZvbnQ9MSksU2U+MCYmKHlbX2VdLmFwcGx5RmlsbD0xKSxIZT4wJiYoeVtfZV0uYXBwbHlCb3JkZXI9MSksIVAmJkwucyYmTC5zLnN0eWxlJiYiTm9ybWFsIiE9TC5zLnN0eWxlJiYoeVtfZV0uc3R5bGU9TC5zLnN0eWxlKSxMLnMmJkwucy5hbGlnbm1lbnQmJih5W19lXS5hbGlnbm1l'@;
put 'bnQ9e30sWyJob3Jpem9udGFsIiwidmVydGljYWwiLCJ3cmFwVGV4dCIsInNocmlua1RvRml0IiwiaW5kZW50IiwidGV4dFJvdGF0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihFdCl7bnVsbCE9TC5zLmFsaWdubWVudFtFdF0mJih5W19lXS5hbGlnbm1lbnRbRXRdPUwucy5hbGlnbm1lbnRbRXRd'@;
put 'KX0pKSxMLnMmJkwucy5oaWRkZW4mJih5W19lXS5wcm90ZWN0aW9ufHwoeVtfZV0ucHJvdGVjdGlvbj17fSkseVtfZV0ucHJvdGVjdGlvbi5oaWRkZW49ITApLEwucyYmTC5zLmVkaXRhYmxlJiYoeVtfZV0ucHJvdGVjdGlvbnx8KHlbX2VdLnByb3RlY3Rpb249e30pLHlbX2VdLnByb3RlY3Rp'@;
put 'b24uZWRpdGFibGU9ITApLF9lfWZ1bmN0aW9uIHA2KHksUCxMLFEscmUscGUsX2UsdmUpeyJkIj09PXkudCYmInN0cmluZyI9PXR5cGVvZiB5LnYmJih5LnY9SHQoeS52KSk7dHJ5e3BlLmNlbGxORiYmKHkuej13Ll90YWJsZVtQXSl9Y2F0Y2goSGUpe2lmKHBlLldURil0aHJvdyBIZX1pZigo'@;
put 'IXBlfHwhMSE9PXBlLmNlbGxUZXh0KSYmInoiIT15LnQpdHJ5e2lmKG51bGw9PXcuX3RhYmxlW1BdJiZ3LmxvYWQoZGVbUF18fCJHZW5lcmFsIixQKSwiZSI9PT15LnQpeS53PXkud3x8UW9beS52XTtlbHNlIGlmKDA9PT1QKWlmKCJuIj09PXkudCl5Lnc9KDB8eS52KT09PXkudj93Ll9nZW5l'@;
put 'cmFsX2ludCh5LnYpOncuX2dlbmVyYWxfbnVtKHkudik7ZWxzZSBpZigiZCI9PT15LnQpe3ZhciBTZT1VZSh5LnYpO3kudz0oMHxTZSk9PT1TZT93Ll9nZW5lcmFsX2ludChTZSk6dy5fZ2VuZXJhbF9udW0oU2UpfWVsc2V7aWYodm9pZCAwPT09eS52KXJldHVybiIiO3kudz13Ll9nZW5lcmFs'@;
put 'KHkudixaMyl9ZWxzZSB5Lnc9dy5mb3JtYXQoUCwiZCI9PT15LnQ/VWUoeS52KTp5LnYsWjMpfWNhdGNoKEhlKXtpZihwZS5XVEYpdGhyb3cgSGV9aWYocGUuY2VsbFN0eWxlcyYmdmUpe2lmKHkucz17fSxudWxsIT1MJiZ2ZS5GaWxscyl0cnl7VXQoeS5zLHZlLkZpbGxzW0xdKX1jYXRjaChI'@;
put 'ZSl7aWYocGUuV1RGKXRocm93IEhlfWlmKG51bGwhPVEmJnZlLkZvbnRzKXRyeXtVdCh5LnMsdmUuRm9udHNbUV0pfWNhdGNoKEhlKXtpZihwZS5XVEYpdGhyb3cgSGV9aWYobnVsbCE9cmUmJnZlLkJvcmRlcnMpdHJ5e1V0KHkucyx2ZS5Cb3JkZXJzW3JlXSl9Y2F0Y2goSGUpe2lmKHBlLldU'@;
put 'Ril0aHJvdyBIZX19fWZ1bmN0aW9uIHM1KHksUCxMKXtpZih5JiZ5WyIhcmVmIl0pe3ZhciBRPU9pKHlbIiFyZWYiXSk7aWYoUS5lLmM8US5zLmN8fFEuZS5yPFEucy5yKXRocm93IG5ldyBFcnJvcigiQmFkIHJhbmdlICgiK0wrIik6ICIreVsiIXJlZiJdKX19dmFyIEN2PS88KD86XHc6KT9t'@;
put 'ZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGE1PS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sZFM9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20sJFo9LyIoXHcqOlx3KikiLyxTdj0vPCg/Olx3Oik/Y29s'@;
put 'XGJbXj5dKltcL10/Pi9nLGhmPS88KD86XHc6KT9jb250cm9sXGJbXj5dKltcL10/Pi9nLGc2PS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxNdj0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLHh2PS88KD86'@;
put 'XHc6KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sVEk9LzwoPzpcdzopP3NoZWV0UHJvdGVjdGlvblxiKD86W14+YS16XVtePl0qKT9cLz4vLERJPS88KD86XHc6KT9zaGVldFByW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0UHIpPi8sSUk9LzwoPzpcdzop'@;
put 'P3NoZWV0Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRWaWV3cyk+LyxoUz0vPCg/Olx3KzopP2RhdGFWYWxpZGF0aW9uc1tePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2RhdGFWYWxpZGF0aW9ucyk+LyxtNj0vPCg/Olx3KzopP2NvbmRpdGlv'@;
put 'bmFsRm9ybWF0dGluZ1xiW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nKT4vZyxmZj0vPCg/Olx3Oik/c2hlZXRGb3JtYXRQcltePl0qXC8+LyxFdj0vPCg/Olx3KzopP3RhYmxlUGFydHMuKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3Rh'@;
put 'YmxlUGFydHM+LyxXMz0vPCg/Olx3Oik/cGFnZVNldHVwW14+XSpcLz4vLFdkPS88KD86XHc6KT9yb3dCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/cm93QnJlYWtzKT4vLGZTPS88KD86XHc6KT9jb2xCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3'@;
put 'Oik/Y29sQnJlYWtzKT4vLHFaPS88KD86XHc6KT9oZWFkZXJGb290ZXJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/aGVhZGVyRm9vdGVyKT4vLExJPS88KD86XHc6KT9wcmludE9wdGlvbnNcYltePlwvXSpcLz4vO3ZhciBwUz0vPCg/Olx3Oik/dGFibGVQYXJ0XGJbXlwvPl0q'@;
put 'W1wvXT8+L2c7ZnVuY3Rpb24gdjYoeSxQLEwsUSl7dmFyIHJlPWxuKHkpO0wuU2hlZXRzW1FdfHwoTC5TaGVldHNbUV09e30pLHJlLmNvZGVOYW1lJiYoTC5TaGVldHNbUV0uQ29kZU5hbWU9cmUuY29kZU5hbWUpfXZhciBfNj0vPCg/Olx3Oik/dGFiQ29sb3JbXj5dKltcL10/Pi8sbVM9Lzwo'@;
put 'PzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLHZTPS88KD86XHc6KT9vdXRsaW5lUHJbXj5dKltcL10/Pi8sQ2U9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQiLG5vbmU6Im5vbmUifSxrdj1iZShDZSksUkk9e2Rpc3BsYXllZDoiZGlzcGxheWVkIixub25lOiJibGFu'@;
put 'ayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sYlM9YmUoUkkpLENTPS88KD86XHc6KT9icmtbXj5dKlwvPi9nLEF2PVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENlbGxzIiwic2VsZWN0VW5sb2NrZWRDZWxscyJdLFR2PVsiZm9ybWF0Q29sdW1ucyIsImZvcm1hdFJvd3Mi'@;
put 'LCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5zZXJ0SHlwZXJsaW5rcyIsImRlbGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9GaWx0ZXIiLCJwaXZvdFRhYmxlcyJdO2Z1bmN0aW9uIHhTKHkpe3ZhciBQPXt9O3JldHVyblsibGVmdCIs'@;
put 'InJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihMKXt5W0xdJiYoUFtMXT1wYXJzZUZsb2F0KHlbTF0pKX0pLFB9dmFyIHk2PXtDdXN0b206ImN1c3RvbSIsRGF0ZToiZGF0ZSIsVGltZToidGltZSIsTGVuZ3RoOiJ0ZXh0TGVuZ3RoIixM'@;
put 'aXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToibm9uZSJ9LGtTPWJlKHk2KSwkMz17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1YWwiLE5FOiJub3RFcXVhbCIsR1Q6ImdyZWF0ZXJUaGFuIixMVDoibGVzc1RoYW4iLEdFOiJncmVhdGVy'@;
put 'VGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxBUz1iZSgkMyk7ZnVuY3Rpb24gVFMoeSxQLEwpe3ZhciBRPVtdLHJlPXt9LHBlPSIiLF9lPSExLHZlPTAsU2U9MDtyZXR1cm4geS5yZXBsYWNlKCR0LGZ1bmN0aW9uKEhlLEJlKXt2YXIgR2U9bG4oSGUpO3N3aXRjaChqbihHZVsw'@;
put 'XSkpe2Nhc2UiPGRhdGFWYWxpZGF0aW9ucyI6Y2FzZSI8ZGF0YVZhbGlkYXRpb25zPiI6Y2FzZSI8L2RhdGFWYWxpZGF0aW9ucz4iOmJyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uIjpyZT17dDprU1tHZS50eXBlfHwibm9uZSJdLHJlZjoocGU9R2Uuc3FyZWYpP3BlLmluZGV4T2YoIiAiKT4t'@;
put 'MT9wZTpPaShwZSk6IiJ9LEdlLm9wZXJhdG9yJiYocmUub3A9QVNbR2Uub3BlcmF0b3JdKSxyZS5ibGFuaz0hIUdlLmFsbG93QmxhbmsmJnlyKEdlLmFsbG93QmxhbmspLCghR2Uuc2hvd0lucHV0TWVzc2FnZXx8IXlyKEdlLnNob3dJbnB1dE1lc3NhZ2UpKSYmKHJlLmlucHV0PSExKSxHZS5w'@;
put 'cm9tcHRUaXRsZSYmKChyZS5pbnB1dHx8KHJlLmlucHV0PXt9KSkudGl0bGU9eHIoR2UucHJvbXB0VGl0bGUpKSxHZS5wcm9tcHQmJigocmUuaW5wdXR8fChyZS5pbnB1dD17fSkpLm1lc3NhZ2U9eHIoR2UucHJvbXB0KSksKCFHZS5zaG93RXJyb3JNZXNzYWdlfHwheXIoR2Uuc2hvd0Vycm9y'@;
put 'TWVzc2FnZSkpJiYocmUuZXJyb3I9ITEpLEdlLmVycm9yVGl0bGUmJigocmUuZXJyb3J8fChyZS5lcnJvcj17fSkpLnRpdGxlPXhyKEdlLmVycm9yVGl0bGUpKSxHZS5lcnJvciYmKChyZS5lcnJvcnx8KHJlLmVycm9yPXt9KSkubWVzc2FnZT14cihHZS5lcnJvcikpLHJlLmVycm9yP3JlLmVy'@;
put 'cm9yLnN0eWxlPUdlLmVycm9yU3R5bGV8fCJzdG9wIjpHZS5lcnJvclN0eWxlJiYocmUuZXJyb3I9e3N0eWxlOkdlLmVycm9yU3R5bGV9KSxyZS50JiZRLnB1c2gocmUpO2JyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uLz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbj4iOmJyZWFrO2Nhc2UiPHNx'@;
put 'cmVmPiI6U2U9QmUrSGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOnBlPXkuc2xpY2UoU2UsQmUpLHJlLnJlZj1wZT9wZS5pbmRleE9mKCIgIik+LTE/cGU6T2kocGUpOiIiO2JyZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6Y2FzZSI8Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxh'@;
put 'MiI6Y2FzZSI8Zm9ybXVsYTI+Ijp2ZT1CZStIZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGExPiI6Y2FzZSI8L2Zvcm11bGEyPiI6aWYoTClicmVhaztjYXNlIjwvZj4iOnZhciBudD14cihQaSh5LnNsaWNlKHZlLEJlKSkpO3N3aXRjaChyZS50KXtjYXNlIkxpc3QiOmlmKHJlLmx8fHJl'@;
put 'LmYpYnJlYWs7aWYoMzQ9PW50LmNoYXJDb2RlQXQoMCkpe3JlLmw9bnQuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6bnVsbD09cmUuZiYmKHJlLmY9bnQpO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNl'@;
put 'Ildob2xlIjpyZS5vcHx8KHJlLm9wPSJJTiIpLG51bGw9PXJlLnY/cmUudj1pc05hTigrbnQpP250OitudDoocmUubWluPXJlLnYscmUubWF4PWlzTmFOKCtudCk/bnQ6K250LGRlbGV0ZSByZS52KX1icmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+Ijpi'@;
put 'cmVhaztjYXNlIjxleHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpfZT0hMTticmVhaztkZWZhdWx0OmlmKFAmJlAuV1RGJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitHZVswXSsiIGluIGRhdGEgdmFsaWRhdGlvbiIpfXJldHVybiBIZX0pLFF9dmFyIFJ2PXtJTjoi'@;
put 'Y29udGFpbnNUZXh0IixPVDoibm90Q29udGFpbnNUZXh0IixTVDoiYmVnaW5zV2l0aCIsTkQ6ImVuZHNXaXRoIn0sRFM9YmUoUnYpLElTPXtMTToibGFzdE1vbnRoIixMUzoibGFzdDdEYXlzIixMVzoibGFzdFdlZWsiLE5NOiJuZXh0TW9udGgiLE5XOiJuZXh0V2VlayIsVE06InRoaXNNb250'@;
put 'aCIsVFc6InRoaXNXZWVrIixURDoidG9kYXkiLFRPOiJ0b21vcnJvdyIsWVM6Inllc3RlcmRheSJ9LFZJPWJlKElTKTtmdW5jdGlvbiB3Nih5KXt2YXIgUD17fTtyZXR1cm4gbnVsbCE9eS52YWwmJihpc05hTigreS52YWwpP1AuZj15LnZhbDpQLnY9K3kudmFsKSxQLnQ9eS50eXBlLFB9ZnVu'@;
put 'Y3Rpb24gcGYoeSl7cmV0dXJuIFNyKCJjZnZvIixudWxsLHt0eXBlOnkudCx2YWw6bnVsbCE9eS52P3kudjpIcih5LmYpfSl9ZnVuY3Rpb24gQzYoeSxQLEwsUSl7dmFyIHJlPXc2KHkpO3JldHVybiByZS5jb2xvcj1VMihQLEwsUSkscmV9ZnVuY3Rpb24gTFMoeSxQLEwsUSxyZSl7dmFyIHBl'@;
put 'PSh5Lm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBCSSh5LFAsTCxRLHJlLHBlKXt2YXIgX2U9ITEsdmU9W10sU2U9e2Y6W119LEhlPTAsQmU9MCxHZT17Y2Z2b3M6W10sY29sb3JzOltdfSxudD17fSxkdD0tMSxDdD0wLGN0PSIiO3JldHVybiB5'@;
put 'LnJlcGxhY2UoJHQsZnVuY3Rpb24oYnQsRnQpe3ZhciBFdD1sbihidCk7c3dpdGNoKGpuKEV0WzBdKSl7Y2FzZSI8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIjpjYXNlIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiI6YnJlYWs7Y2FzZSI8Y2ZSdWxlIjpjYXNlIjxjZlJ1bGU+IjppZihCZT1GdCxu'@;
put 'dD1FdCxTZT17cmVmOlAsZjpbXX0sIWJ0Lm1hdGNoKC9cLz4vKSlicmVhaztjYXNlIjwvY2ZSdWxlPiI6c3dpdGNoKG50LmR4ZklkJiZyZSYmcmUuRFhGJiYoU2Uucz1yZS5EWEZbK250LmR4ZklkXSksbnQudHlwZSl7Y2FzZSJkdXBsaWNhdGVWYWx1ZXMiOlNlLnQ9ImR1cCI7YnJlYWs7Y2Fz'@;
put 'ZSJ1bmlxdWVWYWx1ZXMiOlNlLnQ9InVuaXF1ZSI7YnJlYWs7Y2FzZSJjb250YWluc0JsYW5rcyI6U2UudD0iYmxhbmsiLFNlLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0JsYW5rcyI6U2UudD0iYmxhbmsiLFNlLnY9ITE7YnJlYWs7Y2FzZSJjb250YWluc0Vycm9ycyI6U2UudD0iZXJy'@;
put 'b3IiLFNlLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0Vycm9ycyI6U2UudD0iZXJyb3IiLFNlLnY9ITE7YnJlYWs7Y2FzZSJjZWxsSXMiOnN3aXRjaChudC5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnMiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRz'@;
put 'V2l0aCI6aWYoU2UudD0idGV4dCIsU2Uub3A9RFNbbnQub3BlcmF0b3JdLG51bGw9PW50LnRleHQpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitTZS5vcCsiIG1pc3NpbmcgdGV4dCIpO1NlLnY9bnQudGV4dCxTZS5mPVNlLmZbMF0sbnVsbD09U2UuZiYmZGVsZXRlIFNlLmY7YnJl'@;
put 'YWs7ZGVmYXVsdDpTZS50PSJ2YWwiLFNlLm9wPUFTW250Lm9wZXJhdG9yXSwxPT1TZS5mLmxlbmd0aD9pc05hTigrU2UuZlswXSk/U2UuZj1TZS5mWzBdOihTZS52PStTZS5mWzBdLGRlbGV0ZSBTZS5mKTooU2UubWluPWlzTmFOKCtTZS5mWzBdKT9TZS5mWzBdOitTZS5mWzBdLFNlLm1heD1p'@;
put 'c05hTigrU2UuZlsxXSk/U2UuZlsxXTorU2UuZlsxXSxkZWxldGUgU2UuZil9YnJlYWs7Y2FzZSJleHByZXNzaW9uIjpTZS50PSJmb3JtdWxhIixTZS5mPVNlLmZbMF07YnJlYWs7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnNUZXh0IjpjYXNlImJlZ2luc1dpdGgiOmNhc2Ui'@;
put 'ZW5kc1dpdGgiOmlmKFNlLnQ9InRleHQiLFNlLm9wPURTW250LnR5cGVdLG51bGw9PW50LnRleHQmJlNlLmYubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitTZS5vcCsiIG1pc3NpbmcgdGV4dCIpO1NlLnY9bnVsbCE9bnQudGV4dD9udC50ZXh0OlNlLmZbMV0ubWF0'@;
put 'Y2goLyIuKiIvKT9TZS5mWzFdLnNsaWNlKDEsLTEpOlNlLmZbMV0sU2UuZj1TZS5mWzBdLG51bGw9PVNlLmYmJmRlbGV0ZSBTZS5mO2JyZWFrO2Nhc2UiY29sb3JTY2FsZSI6aWYoU2UudD0ic2NhbGUiLCFTZS5jb2xvclNjYWxlKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBjb2xvclNjYWxl'@;
put 'Iik7U2UuY21pbj1DNigoR2U9U2UuY29sb3JTY2FsZSkuY2Z2b3NbMF0sR2UuY29sb3JzWzBdLHJlLFEpLDM9PUdlLmNmdm9zLmxlbmd0aCYmKFNlLmNtaWQ9QzYoR2UuY2Z2b3NbMV0sR2UuY29sb3JzWzFdLHJlLFEpKSxTZS5jbWF4PUM2KEdlLmNmdm9zW0dlLmNmdm9zLmxlbmd0aC0xXSxH'@;
put 'ZS5jb2xvcnNbR2UuY2Z2b3MubGVuZ3RoLTFdLHJlLFEpO2JyZWFrO2Nhc2UiZGF0YUJhciI6aWYoU2UudD0iYmFyIiwhU2UuZGF0YUJhcil0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgZGF0YUJhciIpOyhHZT1TZS5kYXRhQmFyKS5jb2xvcnNbMF0mJihTZS5jb2xvcj1VMihHZS5jb2xvcnNb'@;
put 'MF0scmUsUSkpLFNlLmNtaW49dzYoR2UuY2Z2b3NbMF0pLFNlLmNtYXg9dzYoR2UuY2Z2b3NbMV0pO2JyZWFrO2Nhc2UiaWNvblNldCI6aWYoU2UudD0iaWNvbiIsIVNlLmljb25TZXQpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGljb25TZXQiKTtTZS50aHJlc2g9KEdlPVNlLmljb25TZXQp'@;
put 'LmNmdm9zLm1hcChmdW5jdGlvbihUdCl7cmV0dXJuIHc2KFR0KX0pLFNlLnY9R2UudGFnJiZHZS50YWcuaWNvblNldHx8IjNUcmFmZmljTGlnaHRzMSIsU2UucmV2PXlyKEdlLnRhZy5yZXZlcnNlfHwiZmFsc2UiKSxTZS5wY3Q9eXIoR2UudGFnLnBlcmNlbnR8fCJ0cnVlIiksU2UuaGlkZGVu'@;
put 'PSF5cihHZS50YWcuc2hvd1ZhbHVlfHwidHJ1ZSIpO2JyZWFrO2Nhc2UidGltZVBlcmlvZCI6U2UudD0iZGF0ZSIsU2Uub3A9VklbbnQudGltZVBlcmlvZF07YnJlYWs7Y2FzZSJhYm92ZUF2ZXJhZ2UiOlNlLnQ9ImF2ZyIsU2Uub3A9IjAiPT1udC5hYm92ZUF2ZXJhZ2U/IkwiOiJHIixTZS5v'@;
put 'cCs9bnQuc3RkRGV2P250LnN0ZERldjp5cihudC5lcXVhbEF2ZXJhZ2V8fCIwIik/IkUiOiJUIjticmVhaztjYXNlInRvcDEwIjpTZS50PSJyYW5rIixTZS5vcD0oeXIobnQuYm90dG9tfHwiMCIpPyJCIjoiVCIpKyh5cihudC5wZXJjZW50fHwiMCIpPyJQIjoiViIpLFNlLnY9K250LnJhbms7'@;
put 'YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCBDRiBUeXBlICIrbnQudHlwZX1pZihkZWxldGUgU2UuY29sb3JTY2FsZSxkZWxldGUgU2UuZGF0YUJhcixkZWxldGUgU2UuaWNvblNldCwhU2UudCl0aHJvdyBjb25zb2xlLmxvZyh5LnNsaWNlKEJlLEZ0K2J0Lmxlbmd0aCkpLCJiYWQg'@;
put 'Q0YgcnVsZSI7bnVsbCE9U2UuZiYmIVNlLmYubGVuZ3RoJiZkZWxldGUgU2UuZixTZS5kZWx8fHZlLnB1c2goU2UpO2JyZWFrO2Nhc2UiPGZvcm11bGEiOmNhc2UiPGZvcm11bGE+IjpIZT1GdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGE+IjpTZS5mLnB1c2goeHIoeS5zbGljZShI'@;
put 'ZSxGdCkpKTticmVhaztjYXNlIjxmIjpjYXNlIjxmPiI6SGU9RnQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mPiI6U2UuZi5wdXNoKHhyKHkuc2xpY2UoSGUsRnQpKSk7YnJlYWs7Y2FzZSI8c3FyZWY+IjpDdD1GdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6Y3Q9eS5zbGljZShD'@;
put 'dCxGdCksUD1jdD9jdC5pbmRleE9mKCIgIik+LTE/Y3Q6T2koY3QpOiIiLFNlLnJlZj1QLHZlLmZvckVhY2goZnVuY3Rpb24oVHQpe1R0LnJlZj1QfSk7YnJlYWs7Y2FzZSI8Y29sb3JTY2FsZSI6Y2FzZSI8Y29sb3JTY2FsZT4iOmNhc2UiPGRhdGFCYXIiOmNhc2UiPGRhdGFCYXI+IjpjYXNl'@;
put 'IjxpY29uU2V0IjpjYXNlIjxpY29uU2V0PiI6R2U9e2Nmdm9zOltdLGNvbG9yczpbXSx0YWc6RXR9LEhlPUZ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvY29sb3JTY2FsZT4iOlNlLmNvbG9yU2NhbGU9R2U7YnJlYWs7Y2FzZSI8L2RhdGFCYXI+IjpTZS5kYXRhQmFyPUdlO2JyZWFrO2Nhc2Ui'@;
put 'PC9pY29uU2V0PiI6U2UuaWNvblNldD1HZTticmVhaztjYXNlIjxjZnZvIjpjYXNlIjxjZnZvLz4iOkdlLmNmdm9zLnB1c2goRXQpO2JyZWFrO2Nhc2UiPC9jZnZvPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOkdlLmNvbG9ycy5wdXNoKEV0KTticmVhaztjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRM'@;
put 'c3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpfZT0hMTticmVhaztjYXNlIjxuZWdhdGl2ZUZpbGxDb2xvciI6Y2FzZSI8YXhpc0NvbG9yIjpjYXNlIjxib3JkZXJDb2xvciI6Y2FzZSI8bmVnYXRpdmVC'@;
put 'b3JkZXJDb2xvciI6Y2FzZSI8Y2ZJY29uIjpTZS5kZWw9ITA7YnJlYWs7Y2FzZSI8ZHhmPiI6X2U9ITAsZHQ9RnQ7YnJlYWs7Y2FzZSI8L2R4Zj4iOl9lPSExLFNlLnM9eEQoeS5zbGljZShkdCxGdCtidC5sZW5ndGgpLHJlLFEsTCk7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURil7aWYocGUp'@;
put 'YnJlYWs7aWYoIV9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrRXRbMF0rIiBpbiBjb25kZm10Iil9fXJldHVybiBidH0pLHZlfSh5LHBlLFAsTCxRLHJlKX12YXIgekk9LzwoPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi9nO2Z1bmN0aW9uIGM1KHksUCl7'@;
put 'dmFyIEw9MCxRPTAscmU9MCxwZT0wO2lmKCFQfHwhUC5DZWxsWGYpcmV0dXJuIG51bGw7dmFyIF9lPVAuQ2VsbFhmW3ldO251bGwhPV9lJiYobnVsbCE9X2UubnVtRm10SWQmJihMPV9lLm51bUZtdElkKSxudWxsIT1fZS5maWxsSWQmJihRPV9lLmZpbGxJZCksbnVsbCE9X2UuZm9udElkJiYo'@;
put 'cmU9X2UuZm9udElkKSxudWxsIT1fZS5ib3JkZXJJZCYmKHBlPV9lLmJvcmRlcklkKSk7dmFyIHZlPXt0OiJ6In07dHJ5e3A2KHZlLEwsUSxyZSxwZSx7V1RGOjEsY2VsbFN0eWxlczohMH0sMCxQKX1jYXRjaHt9cmV0dXJuIHZlLnN9ZnVuY3Rpb24gVUkoeSxQLEwsUSl7aWYodm9pZCAwPT09'@;
put 'eS52JiZ2b2lkIDA9PT15LmYmJm51bGw9PXkucyYmIXkuY3x8InoiPT09eS50JiYheS5jJiYhUS5zaGVldFN0dWJzKXJldHVybiIiO3ZhciByZT0iIixwZT15LnQsX2U9eS52O2lmKCJ6IiE9PXkudClzd2l0Y2goeS50KXtjYXNlImIiOnJlPXkudj8iMSI6IjAiO2JyZWFrO2Nhc2UibiI6cmU9'@;
put 'IiIreS52O2JyZWFrO2Nhc2UiZSI6cmU9UW9beS52XTticmVhaztjYXNlImQiOlEmJlEuY2VsbERhdGVzP3JlPUh0KHkudiwtMSkudG9JU09TdHJpbmcoKTooKHk9b24oeSkpLnQ9Im4iLHJlPSIiKyh5LnY9VWUoSHQoeS52KSkpKSx0eXBlb2YgeS56PiJ1IiYmKHkuej13Ll90YWJsZVsxNF0p'@;
put 'O2JyZWFrO2RlZmF1bHQ6cmU9eS52fXZhciB2ZT0ieiI9PXkudD8iIjpmcygidiIsSHIocmUpKSxTZT17cjpQfSxIZT1RP2d1KFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyx5LFEpOjA7c3dpdGNoKDAhPT1IZSYmKFNlLnM9SGUpLHkudCl7Y2FzZSJuIjpjYXNlInoiOmJyZWFrO2Nhc2UiZCI6'@;
put 'U2UudD0iZCI7YnJlYWs7Y2FzZSJiIjpTZS50PSJiIjticmVhaztjYXNlImUiOlNlLnQ9ImUiO2JyZWFrO2RlZmF1bHQ6aWYobnVsbD09eS52KXtkZWxldGUgeS50O2JyZWFrfWlmKFEmJlEuYm9va1NTVCl7dmU9ZnMoInYiLCIiK3d2KFEuU3RyaW5ncyx5LnYseS5SP3kucj1KaCh5LlIpOm51'@;
put 'bGwsUS5yZXZTdHJpbmdzKSksU2UudD0icyI7YnJlYWt9QXJyYXkuaXNBcnJheSh5LlIpPyh2ZT0iPGlzPiIrSmgoeS5SKSsiPC9pcz4iLFNlLnQ9ImlubGluZVN0ciIpOlNlLnQ9InN0ciJ9aWYoeS50IT1wZSYmKHkudD1wZSx5LnY9X2UpLHkuZil7dmFyIEJlPXkuRiYmeS5GLnNsaWNlKDAs'@;
put 'UC5sZW5ndGgpPT1QP3t0OiJhcnJheSIscmVmOnkuRn06bnVsbDt2ZT1TcigiZiIsSHIoeS5mKSxCZSkrKG51bGwhPXkudj92ZToiIil9cmV0dXJuIHkubCYmTFsiIWxpbmtzIl0ucHVzaChbUCx5LmxdKSx5LmMmJkxbIiFjb21tZW50cyJdLnB1c2goW1AseS5jXSksU3IoImMiLHZlLFNlKX12'@;
put 'YXIgWkk9ZnVuY3Rpb24oKXt2YXIgeT0vPCg/Olx3KzopP2NbIFwvPl0vLFA9LzxcLyg/Olx3KzopP3Jvdz4vLEw9L3I9WyInXShbXiInXSopWyInXS8sUT0vPCg/Olx3KzopP2lzPihbXFNcc10qPyk8XC8oPzpcdys6KT9pcz4vLHJlPS9yZWY9WyInXShbXiInXSopWyInXS8scGU9dWwoInYi'@;
put 'KSxfZT11bCgiZiIpO3JldHVybiBmdW5jdGlvbihTZSxIZSxCZSxHZSxudCxkdCxDdCl7Zm9yKHZhciB1bixxbixlcix0cixRcixjdD0wLGJ0PSIiLEZ0PVtdLEV0PVtdLFR0PTAsWnQ9MCxwbj0wLEtuPSIiLHpuPTAsa249MCxabj0wLFZyPTAsb2k9MCxraT0wLExpPUFycmF5LmlzQXJyYXko'@;
put 'Q3QuQ2VsbFhmKSx1cj1bXSxBbj1bXSx2cj1BcnJheS5pc0FycmF5KEJlKSxycj1bXSxTbj17fSxwcj0hMSxDaT1TZS5zcGxpdChQKSxqcj0hIUdlLnNoZWV0U3R1YnMsamk9ISFHZS5jZWxsSFRNTCxfbz0hKCExPT09R2UuY2VsbFRleHQmJiFHZS5jZWxsTkYmJiFHZS5jZWxsU3R5bGVzKSxE'@;
put 'aT0wLFlvPUNpLmxlbmd0aDtEaSE9WW87KytEaSl7dmFyIGxvPShidD1DaVtEaV0udHJpbSgpKS5sZW5ndGg7aWYoMCE9PWxvKXt2YXIgQW89MDtlOmZvcihjdD0wO2N0PGxvOysrY3Qpc3dpdGNoKGJ0W2N0XSl7Y2FzZSI+IjppZigiLyIhPWJ0W2N0LTFdKXsrK2N0O2JyZWFrIGV9R2UuY2Vs'@;
put 'bFN0eWxlcyYmbnVsbCE9KHFuPWxuKGJ0LnNsaWNlKEFvLGN0KSwhMCkpLnImJnBhcnNlSW50KHFuLnIsMTApJiYoem49cGFyc2VJbnQocW4uciwxMCksU249e30scHI9ITEscW4uaHQmJihwcj0hMCxTbi5ocHQ9cGFyc2VGbG9hdChxbi5odCksU24uaHB4PVUxKFNuLmhwdCkpLHFuLmR5RGVz'@;
put 'Y2VudCYmKHByPSEwLFNuLmR5RGVzY2VudD1xbi5keURlc2NlbnQpLCIxIj09cW4uaGlkZGVuJiYocHI9ITAsU24uaGlkZGVuPSEwKSxudWxsIT1xbi5vdXRsaW5lTGV2ZWwmJihwcj0hMCxTbi5sZXZlbD0rcW4ub3V0bGluZUxldmVsKSxxbi5zJiZDdCYmQ3QuQ2VsbFhmJiYocHI9ITAsU24u'@;
put 'cz1jNShxbi5zLEN0KSkscHImJihyclt6bi0xXT1TbikpO2JyZWFrO2Nhc2UiPCI6QW89Y3R9aWYoQW8+PWN0KWJyZWFrO2lmKHpuPW51bGwhPShxbj1sbihidC5zbGljZShBbyxjdCksITApKS5yP3BhcnNlSW50KHFuLnIsMTApOnpuKzEsa249LTEsIShHZS5zaGVldFJvd3MmJkdlLnNoZWV0'@;
put 'Um93czx6bikpe0dlLm5vZGltfHwobnQucy5yPnpuLTEmJihudC5zLnI9em4tMSksbnQuZS5yPHpuLTEmJihudC5lLnI9em4tMSkpO3ZhciB4bz17dDoicm93Iixyb3c6W10sUjp6bi0xLGlkeDpIZX07R2UuY2VsbFN0eWxlcyYmKFNuPXt9LHByPSExLHFuLmh0JiYocHI9ITAsU24uaHB0PXBh'@;
put 'cnNlRmxvYXQocW4uaHQpLFNuLmhweD1VMShTbi5ocHQpKSxxbi5keURlc2NlbnQmJihwcj0hMCxTbi5keURlc2NlbnQ9cW4uZHlEZXNjZW50KSwiMSI9PXFuLmhpZGRlbiYmKHByPSEwLFNuLmhpZGRlbj0hMCksbnVsbCE9cW4ub3V0bGluZUxldmVsJiYocHI9ITAsU24ubGV2ZWw9K3FuLm91'@;
put 'dGxpbmVMZXZlbCkscW4ucyYmKHByPSEwLFNuLnM9YzUocW4ucyxDdCkpLHByJiYoR2UuY2FsbGJhY2s/eG8ucHJvcHM9U246cnJbem4tMV09U24pKSxGdD1idC5zbGljZShjdCkuc3BsaXQoeSk7Zm9yKHZhciBoaT0wO2hpIT1GdC5sZW5ndGgmJiI8Ij09RnRbaGldLnRyaW0oKS5jaGFyQXQo'@;
put 'MCk7KytoaSk7Zm9yKEZ0PUZ0LnNsaWNlKGhpKSxjdD0wO2N0IT1GdC5sZW5ndGg7KytjdClpZigwIT09KGJ0PUZ0W2N0XS50cmltKCkpLmxlbmd0aCl7aWYoRXQ9YnQubWF0Y2goTCksVHQ9Y3QsWnQ9MCxwbj0wLGJ0PSI8YyAiKygiPCI9PWJ0LnNsaWNlKDAsMSk/Ij4iOiIiKStidCxudWxs'@;
put 'IT1FdCYmMj09PUV0Lmxlbmd0aCl7Zm9yKFR0PTAsS249RXRbMV0sWnQ9MDtadCE9S24ubGVuZ3RoJiYhKChwbj1Lbi5jaGFyQ29kZUF0KFp0KS02NCk8MXx8cG4+MjYpOysrWnQpVHQ9MjYqVHQrcG47a249LS1UdH1lbHNlKytrbjtmb3IoWnQ9MDtadCE9YnQubGVuZ3RoJiY2MiE9PWJ0LmNo'@;
put 'YXJDb2RlQXQoWnQpOysrWnQpO2lmKCsrWnQsKHFuPWxuKGJ0LnNsaWNlKDAsWnQpLCEwKSkucnx8KHFuLnI9ZGkoe3I6em4tMSxjOmtufSkpLHVuPXt0OiIifSxudWxsIT0oRXQ9KEtuPWJ0LnNsaWNlKFp0KSkubWF0Y2gocGUpKSYmIiIhPT1FdFsxXSYmKHVuLnY9eHIoRXRbMV0pKSxHZS5j'@;
put 'ZWxsRm9ybXVsYSl7aWYobnVsbCE9KEV0PUtuLm1hdGNoKF9lKSkmJiIiIT09RXRbMV0pe2lmKHVuLmY9eHIoUGkoRXRbMV0pKS5yZXBsYWNlKC9cclxuL2csIlxuIiksR2UueGxmbnx8KHVuLmY9RzEodW4uZikpLEV0WzBdLmluZGV4T2YoJ3Q9ImFycmF5IicpPi0xKXVuLkY9KEtuLm1hdGNo'@;
put 'KHJlKXx8W10pWzFdLHVuLkYuaW5kZXhPZigiOiIpPi0xJiZ1ci5wdXNoKFtPaSh1bi5GKSx1bi5GXSk7ZWxzZSBpZihFdFswXS5pbmRleE9mKCd0PSJzaGFyZWQiJyk+LTEpe3RyPWxuKEV0WzBdKTt2YXIgdGE9eHIoUGkoRXRbMV0pKTtHZS54bGZufHwodGE9RzEodGEpKSxBbltwYXJzZUlu'@;
put 'dCh0ci5zaSwxMCldPVt0cix0YSxxbi5yXX19ZWxzZShFdD1Lbi5tYXRjaCgvPGZbXj5dKlwvPi8pKSYmQW5bKHRyPWxuKEV0WzBdKSkuc2ldJiYodW4uZj1uSShBblt0ci5zaV1bMV0sQW5bdHIuc2ldWzJdLHFuLnIpKTt2YXIgTW49c3MocW4ucik7Zm9yKFp0PTA7WnQ8dXIubGVuZ3RoOysr'@;
put 'WnQpTW4ucj49dXJbWnRdWzBdLnMuciYmTW4ucjw9dXJbWnRdWzBdLmUuciYmTW4uYz49dXJbWnRdWzBdLnMuYyYmTW4uYzw9dXJbWnRdWzBdLmUuYyYmKHVuLkY9dXJbWnRdWzFdKX1pZihudWxsPT1xbi50JiZ2b2lkIDA9PT11bi52KWlmKHVuLmZ8fHVuLkYpdW4udj0wLHVuLnQ9Im4iO2Vs'@;
put 'c2V7aWYoIWpyKWNvbnRpbnVlO3VuLnQ9InoifWVsc2UgdW4udD1xbi50fHwibiI7c3dpdGNoKG50LnMuYz5rbiYmKG50LnMuYz1rbiksbnQuZS5jPGtuJiYobnQuZS5jPWtuKSx1bi50KXtjYXNlIm4iOmlmKCIiPT11bi52fHxudWxsPT11bi52KXtpZighanIpY29udGludWU7dW4udD0ieiJ9'@;
put 'ZWxzZSB1bi52PXBhcnNlRmxvYXQodW4udik7YnJlYWs7Y2FzZSJzIjppZih0eXBlb2YgdW4udj4idSIpe2lmKCFqciljb250aW51ZTt1bi50PSJ6In1lbHNlIGVyPWY2W3BhcnNlSW50KHVuLnYsMTApXSx1bi52PWVyLnQsdW4ucj1lci5yLGVyLlImJih1bi5SPWVyLlIpLGppJiYodW4uaD1l'@;
put 'ci5oKTticmVhaztjYXNlInN0ciI6dW4udD0icyIsdW4udj1udWxsIT11bi52P1BpKHVuLnYpOiIiLGppJiYodW4uaD1ybyh1bi52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOkV0PUtuLm1hdGNoKFEpLHVuLnQ9InMiLG51bGwhPUV0JiYoZXI9RDkoRXRbMV0pKT8odW4udj1lci50LGVyLlIm'@;
put 'Jih1bi5SPWVyLlIpLGppJiYodW4uaD1lci5oKSk6dW4udj0iIjticmVhaztjYXNlImIiOnVuLnY9eXIodW4udik7YnJlYWs7Y2FzZSJkIjpHZS5jZWxsRGF0ZXM/dW4udj1IdCh1bi52LDEpOih1bi52PVVlKEh0KHVuLnYsMSkpLHVuLnQ9Im4iKTticmVhaztjYXNlImUiOiExIT09R2UuY2Vs'@;
put 'bFRleHQmJih1bi53PXVuLnYpLHVuLnY9S2FbdW4udl19aWYoX28pe1puPVZyPW9pPWtpPTAsUXI9bnVsbCxMaSYmdm9pZCAwIT09cW4ucyYmbnVsbCE9KFFyPUN0LkNlbGxYZltxbi5zXSkmJihudWxsIT1Rci5udW1GbXRJZCYmKFpuPVFyLm51bUZtdElkKSxHZS5jZWxsU3R5bGVzJiYobnVs'@;
put 'bCE9UXIuZmlsbElkJiYoVnI9UXIuZmlsbElkKSxudWxsIT1Rci5mb250SWQmJihvaT1Rci5mb250SWQpLG51bGwhPVFyLmJvcmRlcklkJiYoa2k9UXIuYm9yZGVySWQpKSk7dHJ5e3A2KHVuLFpuLFZyLG9pLGtpLEdlLDAsQ3QpfWNhdGNoe31HZS5jZWxsU3R5bGVzJiZ1bi5zJiYoUXImJlFy'@;
put 'LmFsaWdubWVudCYmKHVuLnMuYWxpZ25tZW50PW9uKFFyLmFsaWdubWVudCkpLFFyJiZRci5wcm90ZWN0aW9uJiYobnVsbCE9UXIucHJvdGVjdGlvbi5oaWRkZW4mJih1bi5zLmhpZGRlbj1Rci5wcm90ZWN0aW9uLmhpZGRlbiksbnVsbCE9UXIucHJvdGVjdGlvbi5lZGl0YWJsZSYmKHVuLnMu'@;
put 'ZWRpdGFibGU9UXIucHJvdGVjdGlvbi5lZGl0YWJsZSkpLFFyJiZRci5zdHlsZSYmKHVuLnMuc3R5bGU9UXIuc3R5bGUpKSxHZS5jZWxsRGF0ZXMmJkxpJiYibiI9PXVuLnQmJncuaXNfZGF0ZSh3Ll90YWJsZVtabl0pJiYodW4udD0iZCIsdW4udj1odCh1bi52KSl9dmFyIE1zO0dlLm5vZGlt'@;
put 'JiYoTXM9c3MocW4uciksbnQucy5yPk1zLnImJihudC5zLnI9TXMuciksbnQuZS5yPE1zLnImJihudC5lLnI9TXMucikpLEdlLmNhbGxiYWNrPyhNcz1zcyhxbi5yKSx4by5yb3dbTXMuY109dW4pOnZyPyhCZVsoTXM9c3MocW4ucikpLnJdfHwoQmVbTXMucl09W10pLEJlW01zLnJdW01zLmNd'@;
put 'PXVuKTpCZVtxbi5yXT11bn1HZS5jYWxsYmFjayYmR2UuY2FsbGJhY2soeG8pfX19anImJiFHZS5jYWxsYmFjayYmYzUoMCxDdCkscnIubGVuZ3RoPjAmJihCZVsiIXJvd3MiXT1ycil9fSgpLFJTPVNyKCJ3b3Jrc2hlZXQiLG51bGwse3htbG5zOmlzLm1haW5bMF0sInhtbG5zOnIiOmlzLnIs'@;
put 'InhtbG5zOngxNGFjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoi'@;
put 'eDE0YWMifSk7ZnVuY3Rpb24gV0koeSxQLEwsUSl7dmFyIF9lLHJlPVtCbixSU10sdmU9IiIsU2U9TC5TaGVldHNbTC5TaGVldE5hbWVzW3ldXTtudWxsPT1TZSYmKFNlPXt9KTt2YXIgSGU9U2VbIiFyZWYiXXx8IkExIixCZT1PaShIZSk7aWYoQmUuZS5jPjE2MzgzfHxCZS5lLnI+MTA0ODU3'@;
put 'NSl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiK0hlKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO0JlLmUuYz1NYXRoLm1pbihCZS5lLmMsMTYzODMpLEJlLmUucj1NYXRoLm1pbihCZS5lLmMsMTA0ODU3NSksSGU9T28oQmUpfVF8fChRPXt9KSxTZVsi'@;
put 'IWNvbW1lbnRzIl09W107dmFyIEdlPVtdLG50PVNlWyIhcHJpbnQiXTtpZihmdW5jdGlvbiBabyh5LFAsTCxRLHJlKXt2YXIgcGU9ITEsX2U9e30sdmU9bnVsbDtpZigieGxzeCIhPT1RLmJvb2tUeXBlJiZQLnZiYXJhdyl7dmFyIFNlPVAuU2hlZXROYW1lc1tMXTt0cnl7UC5Xb3JrYm9vayYm'@;
put 'KFNlPVAuV29ya2Jvb2suU2hlZXRzW0xdLkNvZGVOYW1lfHxTZSl9Y2F0Y2h7fXBlPSEwLF9lLmNvZGVOYW1lPUhyKFNlKX15JiZ5WyIhY29uZGZtdCJdJiYoX2UuZW5hYmxlRm9ybWF0Q29uZGl0aW9uc0NhbGN1bGF0aW9uPSIxIikseSYmeVsiIXRhYmNvbG9yIl0mJih2ZT0odmV8fCIiKSsn'@;
put 'PHRhYkNvbG9yIHJnYj0iRkYnK091KHlbIiF0YWJjb2xvciJdLnJnYikrJyIvPicpO3ZhciBIZT0hMSxCZT17fTtpZigoKCh5fHx7fSlbIiFwcmludCJdfHx7fSkucHJvcHN8fHt9KS5maXQmJihIZT0hMCxCZS5maXRUb1BhZ2U9MSksSGUmJih2ZT0odmV8fCIiKStTcigicGFnZVNldFVwUHIi'@;
put 'LG51bGwsQmUpKSx5JiZ5WyIhb3V0bGluZSJdKXt2YXIgR2U9e3N1bW1hcnlCZWxvdzoxLHN1bW1hcnlSaWdodDoxfTt5WyIhb3V0bGluZSJdLmFib3ZlJiYoR2Uuc3VtbWFyeUJlbG93PTApLHlbIiFvdXRsaW5lIl0ubGVmdCYmKEdlLnN1bW1hcnlSaWdodD0wKSx2ZT0odmV8fCIiKStTcigi'@;
put 'b3V0bGluZVByIixudWxsLEdlKX0hcGUmJiF2ZXx8KHJlW3JlLmxlbmd0aF09U3IoInNoZWV0UHIiLHZlLF9lKSl9KFNlLEwseSxQLHJlKSxyZVtyZS5sZW5ndGhdPVNyKCJkaW1lbnNpb24iLG51bGwse3JlZjpIZX0pLHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gT3YoeSxQLEwsUSl7dmFyIHJl'@;
put 'PXt3b3JrYm9va1ZpZXdJZDoiMCJ9O2lmKCgoKFF8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSkubGVuZ3RoKXt2YXIgcGU9US5Xb3JrYm9vay5WaWV3cyxfZT1wZVtMXXx8cGVbMF07cmUucmlnaHRUb0xlZnQ9X2UuUlRMPyIxIjoiMCIsX2Uuem9vbSYmKHJlLnpvb21TY2FsZT1fZS56'@;
put 'b29tKSxudWxsIT1fZS5ncmlkJiYocmUuc2hvd0dyaWRMaW5lcz1fZS5ncmlkKSxfZS52aWV3JiYocmUudmlldz1fZS52aWV3KX1udWxsIT15WyIhZ3JpZGxpbmVzIl0mJihyZS5zaG93R3JpZExpbmVzPSEheVsiIWdyaWRsaW5lcyJdKTt2YXIgdmU9IiIsU2U9e3I6MCxjOjB9O2lmKHlbIiFz'@;
put 'ZWwiXSl7aWYoIShTZT15WyIhc2VsIl0uY2VsbCkpe2lmKCF5WyIhc2VsIl0ucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO1NlPVdzKHlbIiFzZWwiXS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zfSJzdHJpbmciPT10'@;
put 'eXBlb2YgU2UmJihTZT1zcyhTZSkpfXZhciBCZT15WyIhZnJlZXplIl0/InN0cmluZyI9PXR5cGVvZiB5WyIhZnJlZXplIl0/c3MoeVsiIWZyZWV6ZSJdKTp5WyIhZnJlZXplIl06e2M6MCxyOjB9O2lmKHlbIiFmcmVlemUiXSl7dmFyIEdlPWRpKEJlKSxudD17c3RhdGU6ImZyb3plbiIseFNw'@;
put 'bGl0OkJlLmMseVNwbGl0OkJlLnIsdG9wTGVmdENlbGw6R2V9O3lbIiFzZWwiXSYmKG50LmFjdGl2ZVBhbmU9KFNlLnI+PUJlLnImJkJlLnI+MD8iYm90dG9tIjoidG9wIikrKFNlLmM+PUJlLmMmJkJlLmM+MD8iUmlnaHQiOiJMZWZ0IikpLHZlPVNyKCJwYW5lIixudWxsLG50KX1pZih5WyIh'@;
put 'c2VsIl0pe3ZhciBkdD17YWN0aXZlQ2VsbDoic3RyaW5nIj09dHlwZW9mIFNlP1NlOmRpKFNlKX07ZHQuc3FyZWY9eVsiIXNlbCJdLnJhbmdlP3lbIiFzZWwiXS5yYW5nZTpkdC5hY3RpdmVDZWxsKyI6IitkdC5hY3RpdmVDZWxsLHZlKz1Tcigic2VsZWN0aW9uIixudWxsLGR0KSx5WyIhZnJl'@;
put 'ZXplIl0mJihCZS5jPjAmJihkdC5wYW5lPSJ0b3BSaWdodCIsdmUrPVNyKCJzZWxlY3Rpb24iLG51bGwsZHQpKSxCZS5yPjAmJihkdC5wYW5lPSJib3R0b21MZWZ0Iix2ZSs9U3IoInNlbGVjdGlvbiIsbnVsbCxkdCkpLEJlLmM+MCYmQmUucj4wJiYoZHQucGFuZT0iYm90dG9tUmlnaHQiLHZl'@;
put 'Kz1Tcigic2VsZWN0aW9uIixudWxsLGR0KSkpfXJldHVybiBTcigic2hlZXRWaWV3cyIsU3IoInNoZWV0VmlldyIsdmV8fG51bGwscmUpLHt9KX0oU2UsMCx5LEwpLFAuc2hlZXRGb3JtYXQpe3ZhciBkdD17ZGVmYXVsdFJvd0hlaWdodDpQLnNoZWV0Rm9ybWF0LmRlZmF1bHRSb3dIZWlnaHR8'@;
put 'fCIxNiIsYmFzZUNvbFdpZHRoOlAuc2hlZXRGb3JtYXQuYmFzZUNvbFdpZHRofHwiMTAifTtudWxsIT1QLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdyYmKGR0Lm91dGxpbmVMZXZlbFJvdz1QLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdykscmVbcmUubGVuZ3RoXT1Tcigic2hlZXRG'@;
put 'b3JtYXRQciIsbnVsbCxkdCl9ZWxzZSBpZihTZVsiIXNoZWV0Rm9ybWF0Il0pe3ZhciBDdD17fSxjdD0hMTtTZVsiIXNoZWV0Rm9ybWF0Il0ucm93JiYoU2VbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQ/KGN0PSEwLEN0LmRlZmF1bHRSb3dIZWlnaHQ9U2VbIiFzaGVldEZvcm1hdCJdLnJvdy5o'@;
put 'cHQsQ3QuY3VzdG9tSGVpZ2h0PTEpOlNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4PyhjdD0hMCxDdC5kZWZhdWx0Um93SGVpZ2h0PWoyKFNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4KSxDdC5jdXN0b21IZWlnaHQ9MSk6KDA9PT1TZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdHx8MD09PVNl'@;
put 'WyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4fHxTZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhpZGRlbikmJihjdD0hMCxDdC5kZWZhdWx0Um93SGVpZ2h0PUN0LmRlZmF1bHRSb3dIZWlnaHR8fDE2LEN0LmN1c3RvbUhlaWdodD0xLEN0Lnplcm9IZWlnaHQ9MSksU2VbIiFzaGVldEZvcm1hdCJdLmR5'@;
put 'RGVzY2VudCYmKEN0WyJ4MTRhYzpkeURlc2NlbnQiXT1TZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50KSksU2VbIiFzaGVldEZvcm1hdCJdLmNvbCYmKFNlWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NofHxwdShTZVsiIXNoZWV0Rm9ybWF0Il0uY29sKSxDdC5kZWZhdWx0Q29sV2lkdGg9U2Vb'@;
put 'IiFzaGVldEZvcm1hdCJdLmNvbC53Y2grNS9wbHx8MCxjdD0hMCksbnVsbD09Q3QuZGVmYXVsdFJvd0hlaWdodCYmKEN0LmRlZmF1bHRSb3dIZWlnaHQ9MTYpLG51bGw9PUN0LmRlZmF1bHRDb2xXaWR0aCYmKEN0LmRlZmF1bHRDb2xXaWR0aD0xMCksQ3Qub3V0bGluZUxldmVsUm93PUN0Lm91'@;
put 'dGxpbmVMZXZlbFJvd3x8NyxjdCYmKHJlW3JlLmxlbmd0aF09U3IoInNoZWV0Rm9ybWF0UHIiLG51bGwsQ3QpKX1udWxsIT1TZVsiIWNvbHMiXSYmU2VbIiFjb2xzIl0ubGVuZ3RoPjAmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIER2KHksUCxMKXtmb3IodmFyIHJlLFE9WyI8Y29scz4iXSxw'@;
put 'ZT0wO3BlIT1QLmxlbmd0aDsrK3BlKWlmKHJlPVBbcGVdKXtpZihyZS5hdXRvJiZOaSh5LHJlLHBlKSxyZS5zfHxyZS56KXt2YXIgX2U9e3Q6InoifTtudWxsIT1yZS5zJiYoX2Uucz1yZS5zKSxudWxsIT1yZS56JiYoX2Uuej1yZS56KSxyZS5zdHlsZT1ndShMLmNlbGxYZnMsTC5jZWxsU3R5'@;
put 'bGVYZnMsX2UsTCl9UVtRLmxlbmd0aF09U3IoImNvbCIsbnVsbCxZZChwZSxyZSkpfXJldHVybiBRW1EubGVuZ3RoXT0iPC9jb2xzPiIsUS5qb2luKCIiKX0oU2UsU2VbIiFjb2xzIl0sUCkpLHJlW19lPXJlLmxlbmd0aF09IjxzaGVldERhdGEvPiIsU2VbIiFsaW5rcyJdPVtdLG51bGwhPVNl'@;
put 'WyIhcmVmIl0mJih2ZT1mdW5jdGlvbiBZSSh5LFAsTCxRKXt2YXIgU2UsYnQscmU9W10scGU9W10sX2U9T2koeVsiIXJlZiJdKSx2ZT0iIixIZT0iIixCZT1bXSxHZT0wLG50PTAsZHQ9eVsiIXJvd3MiXSxDdD1BcnJheS5pc0FycmF5KHkpLGN0PXtyOkhlfSxGdD0tMTtmb3IobnQ9X2Uucy5j'@;
put 'O250PD1fZS5lLmM7KytudClCZVtudF09TnMobnQpO2ZvcihHZT1fZS5zLnI7R2U8PV9lLmUucjsrK0dlKXtmb3IocGU9W10sSGU9SHMoR2UpLG50PV9lLnMuYztudDw9X2UuZS5jOysrbnQpe1NlPUJlW250XStIZTt2YXIgRXQ9Q3Q/KHlbR2VdfHxbXSlbbnRdOnlbU2VdO3ZvaWQgMCE9PUV0'@;
put 'JiZudWxsIT0odmU9VUkoRXQsU2UseSxQKSkmJnBlLnB1c2godmUpfShwZS5sZW5ndGg+MHx8ZHQmJmR0W0dlXSkmJihjdD17cjpIZX0sZHQmJmR0W0dlXSYmKChidD1kdFtHZV0pLmhpZGRlbiYmKGN0LmhpZGRlbj0xKSxGdD0tMSxidC5ocHg/RnQ9ajIoYnQuaHB4KTpidC5ocHQmJihGdD1i'@;
put 'dC5ocHQpLEZ0Pi0xJiYoY3QuaHQ9RnQsY3QuY3VzdG9tSGVpZ2h0PTEpLGJ0LmxldmVsJiYoY3Qub3V0bGluZUxldmVsPWJ0LmxldmVsKSxidC5keURlc2NlbnQmJihjdFsieDE0YWM6ZHlEZXNjZW50Il09YnQuZHlEZXNjZW50KSxidC5zJiYoY3Qucz1ndShQLmNlbGxYZnMsUC5jZWxsU3R5'@;
put 'bGVYZnMse3Q6InoiLHM6YnQuc30sUCksY3QuY3VzdG9tRm9ybWF0PTEpKSxyZVtyZS5sZW5ndGhdPVNyKCJyb3ciLHBlLmpvaW4oIiIpLGN0KSl9aWYoZHQpZm9yKDtHZTxkdC5sZW5ndGg7KytHZSlkdCYmZHRbR2VdJiYoY3Q9e3I6R2UrMX0sKGJ0PWR0W0dlXSkuaGlkZGVuJiYoY3QuaGlk'@;
put 'ZGVuPTEpLEZ0PS0xLGJ0LmhweD9GdD1qMihidC5ocHgpOmJ0LmhwdCYmKEZ0PWJ0LmhwdCksRnQ+LTEmJihjdC5odD1GdCxjdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2ZWwmJihjdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwpLHJlW3JlLmxlbmd0aF09U3IoInJvdyIsIiIsY3QpKTtyZXR1cm4g'@;
put 'cmUuam9pbigiIil9KFNlLFApLHZlLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT12ZSkpLHJlLmxlbmd0aD5fZSsxJiYocmVbcmUubGVuZ3RoXT0iPC9zaGVldERhdGE+IixyZVtfZV09cmVbX2VdLnJlcGxhY2UoIi8+IiwiPiIpKSxTZVsiIXByb3RlY3QiXSYmKHJlW3JlLmxlbmd0aF09ZnVu'@;
put 'Y3Rpb24gRWEoeSl7dmFyIFA9e3NoZWV0OjF9O3JldHVybiBBdi5mb3JFYWNoKGZ1bmN0aW9uKEwpe251bGwhPXlbTF0mJnlbTF0mJihQW0xdPSIxIil9KSxUdi5mb3JFYWNoKGZ1bmN0aW9uKEwpe251bGwhPXlbTF0mJiF5W0xdJiYoUFtMXT0iMCIpfSkseS5wYXNzd29yZD9QLnBhc3N3b3Jk'@;
put 'PWFDKHkucGFzc3dvcmQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOnkuZW5jcnlwdGlvbiYmKFAuYWxnb3JpdGhtTmFtZT15LmVuY3J5cHRpb24uYWxnbyxQLmhhc2hWYWx1ZT15LmVuY3J5cHRpb24uaGFzaCxQLnNhbHRWYWx1ZT15LmVuY3J5cHRpb24uc2FsdCxQLnNwaW5Db3VudD15'@;
put 'LmVuY3J5cHRpb24uc3BpbiksU3IoInNoZWV0UHJvdGVjdGlvbiIsbnVsbCxQKX0oU2VbIiFwcm90ZWN0Il0pKSxudWxsIT1TZVsiIWF1dG9maWx0ZXIiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gRVMoeSxQLEwsUSl7dmFyIHJlPSJzdHJpbmciPT10eXBlb2YgeS5yZWY/eS5yZWY6T28o'@;
put 'eS5yZWYpO0wuV29ya2Jvb2t8fChMLldvcmtib29rPXtTaGVldHM6W119KSxMLldvcmtib29rLk5hbWVzfHwoTC5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIHBlPUwuV29ya2Jvb2suTmFtZXMsX2U9V3MocmUpO19lLnMucj09X2UuZS5yJiYoX2UuZS5yPVdzKFBbIiFyZWYiXSkuZS5yLHJlPU9v'@;
put 'KF9lKSk7Zm9yKHZhciB2ZT0wO3ZlPHBlLmxlbmd0aDsrK3ZlKXt2YXIgU2U9cGVbdmVdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1TZS5OYW1lJiZTZS5TaGVldD09USl7U2UuUmVmPSInIitMLlNoZWV0TmFtZXNbUV0rIichIityZTticmVha319cmV0dXJuIHZlPT1wZS5sZW5ndGgm'@;
put 'JnBlLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6USxSZWY6IiciK0wuU2hlZXROYW1lc1tRXSsiJyEiK3JlfSksU3IoImF1dG9GaWx0ZXIiLG51bGwse3JlZjpyZX0pfShTZVsiIWF1dG9maWx0ZXIiXSxTZSxMLHkpKSxudWxsIT1TZVsiIW1lcmdlcyJdJiZTZVsi'@;
put 'IW1lcmdlcyJdLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBKWih5KXtpZigwPT09eS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPSc8bWVyZ2VDZWxscyBjb3VudD0iJyt5Lmxlbmd0aCsnIj4nLEw9MDtMIT15Lmxlbmd0aDsrK0wpUCs9JzxtZXJnZUNlbGwgcmVmPSInK09v'@;
put 'KHlbTF0pKyciLz4nO3JldHVybiBQKyI8L21lcmdlQ2VsbHM+In0oU2VbIiFtZXJnZXMiXSkpLFNlWyIhY29uZGZtdCJdJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBqSSh5LFApe3JldHVybiB5Lm1hcChmdW5jdGlvbihMLFEpe3JldHVybiBmdW5jdGlvbiBQdSh5LFAsTCl7dmFyIFE9eS5z'@;
put 'P0ZvKEwuRFhGLHkucyk6LTEscmU9InN0cmluZyI9PXR5cGVvZiB5LnJlZj95LnJlZjpPbyh5LnJlZiksX2U9T2kocmUucmVwbGFjZSgvXHMuKiQvLCIiKSkucztfZS5yPDAmJihfZS5yPTApLF9lLmM8MCYmKF9lLmM9MCk7dmFyIHZlPSIiLFNlPXtwcmlvcml0eTpQKzF9O3N3aXRjaChRPi0x'@;
put 'JiYoU2UuZHhmSWQ9USkseS50KXtjYXNlInVuaXF1ZSI6U2UudHlwZT0idW5pcXVlVmFsdWVzIjticmVhaztjYXNlImR1cCI6U2UudHlwZT0iZHVwbGljYXRlVmFsdWVzIjticmVhaztjYXNlImJsYW5rIjpTZS50eXBlPSh5LnY/ImMiOiJub3RDIikrIm9udGFpbnNCbGFua3MiLHZlPSI8Zm9y'@;
put 'bXVsYT5MRU4oVFJJTSgiK2RpKF9lKSsiKSkiKyh5LnY/Ij0iOiImZ3Q7IikrIjA8L2Zvcm11bGE+IjticmVhaztjYXNlImVycm9yIjpTZS50eXBlPSh5LnY/ImMiOiJub3RDIikrIm9udGFpbnNFcnJvcnMiO2JyZWFrO2Nhc2UiZm9ybXVsYSI6U2UudHlwZT0iZXhwcmVzc2lvbiIsdmU9U3Io'@;
put 'ImZvcm11bGEiLEhyKHkuZikse30pO2JyZWFrO2Nhc2UiZGF0ZSI6U2UudHlwZT0idGltZVBlcmlvZCIsU2UudGltZVBlcmlvZD1JU1t5Lm9wXTticmVhaztjYXNlInRleHQiOnN3aXRjaChTZS50eXBlPVNlLm9wZXJhdG9yPVJ2W3kub3BdLFNlLnRleHQ9eS52LHkub3Ape2Nhc2UiSU4iOnZl'@;
put 'PSc8Zm9ybXVsYT5OT1QoSVNFUlJPUihTRUFSQ0goIicrSHIoeS52KSsnIiwnK2RpKF9lKSsiKSkpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJPVCI6dmU9Jzxmb3JtdWxhPklTRVJST1IoU0VBUkNIKCInK0hyKHkudikrJyIsJytkaShfZSkrIikpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJTVCI6'@;
put 'dmU9Ijxmb3JtdWxhPkxFRlQoIitkaShfZSkrJyxMRU4oIicrSHIoeS52KSsnIikpPSInK0hyKHkudikrJyI8L2Zvcm11bGE+JzticmVhaztjYXNlIk5EIjp2ZT0iPGZvcm11bGE+UklHSFQoIitkaShfZSkrJyxMRU4oIicrSHIoeS52KSsnIikpPSInK0hyKHkudikrJyI8L2Zvcm11bGE+J31i'@;
put 'cmVhaztjYXNlInZhbCI6U2UudHlwZT0iY2VsbElzIixTZS5vcGVyYXRvcj0kM1t5Lm9wXSx2ZT1udWxsIT15Lm1pbj9TcigiZm9ybXVsYSIsSHIoU3RyaW5nKHkubWluKSkse30pK1NyKCJmb3JtdWxhIixIcihTdHJpbmcoeS5tYXgpKSx7fSk6U3IoImZvcm11bGEiLEhyKG51bGwhPXkudj9T'@;
put 'dHJpbmcoInN0cmluZyI9PXR5cGVvZiB5LnY/JyInK3kudi5yZXBsYWNlKC8iL2csJyIiJykrJyInOnkudik6eS5mKSx7fSk7YnJlYWs7Y2FzZSJhdmciOnN3aXRjaChTZS50eXBlPSJhYm92ZUF2ZXJhZ2UiLFNlLmFib3ZlQXZlcmFnZT0iTCI9PXkub3AuY2hhckF0KDApPyIwIjoiMSIseS5v'@;
put 'cC5jaGFyQXQoMSkpe2Nhc2UiVCI6U2UuZXF1YWxBdmVyYWdlPSIwIjticmVhaztjYXNlIkUiOlNlLmVxdWFsQXZlcmFnZT0iMSI7YnJlYWs7ZGVmYXVsdDpTZS5zdGREZXY9eS5vcC5jaGFyQXQoMSl9YnJlYWs7Y2FzZSJyYW5rIjpTZS50eXBlPSJ0b3AxMCIsU2UuYm90dG9tPSJCIj09eS5v'@;
put 'cC5jaGFyQXQoMCk/IjEiOiIwIixTZS5wZXJjZW50PSJQIj09eS5vcC5jaGFyQXQoMSk/IjEiOiIwIixTZS5yYW5rPXkudjticmVhaztjYXNlImljb24iOlNlLnR5cGU9Imljb25TZXQiO3ZhciBIZT17aWNvblNldDp5LnYscGVyY2VudDp5LnBjdD8idHJ1ZSI6ImZhbHNlIn07eS5yZXYmJihI'@;
put 'ZS5yZXZlcnNlPSJ0cnVlIikseS5oaWRkZW4mJihIZS5zaG93VmFsdWU9ImZhbHNlIiksdmU9U3IoImljb25TZXQiLHkudGhyZXNoLm1hcChwZikuam9pbigiIiksSGUpO2JyZWFrO2Nhc2Uic2NhbGUiOlNlLnR5cGU9ImNvbG9yU2NhbGUiLHZlKz1wZih5LmNtaW4pLHkuY21pZCYmKHZlKz1w'@;
put 'Zih5LmNtaWQpKSx2ZSs9cGYoeS5jbWF4KSx2ZSs9VWQoeS5jbWluLmNvbG9yKSx5LmNtaWQmJih2ZSs9VWQoeS5jbWlkLmNvbG9yKSksdmU9U3IoImNvbG9yU2NhbGUiLHZlKz1VZCh5LmNtYXguY29sb3IpLHt9KTticmVhaztjYXNlImJhciI6U2UudHlwZT0iZGF0YUJhciIsdmUrPXBmKHku'@;
put 'Y21pbiksdmUrPXBmKHkuY21heCksdmU9U3IoImRhdGFCYXIiLHZlKz1VZCh5LmNvbG9yKSx7fSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBjb25zb2xlLmxvZyh5KSwiQ0YgbWlzc2luZyB0eXBlICIreS50fXJldHVybic8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIHNxcmVmPSInK3JlKyciPicrU3Io'@;
put 'ImNmUnVsZSIsIiI9PXZlP251bGw6dmUsU2UpKyI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4ifShMLFEsUCl9KS5qb2luKCIiKX0oU2VbIiFjb25kZm10Il0sUCkpLFNlWyIhdmFsaWRhdGlvbnMiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gTkkoeSl7aWYoIXl8fDA9PXkubGVuZ3RoKXJl'@;
put 'dHVybiIiO2Zvcih2YXIgUD1bXSxMPTAsUT0wO1E8eS5sZW5ndGg7KytRKXt2YXIgcmU9eVtRXSxwZT15NltyZS50XTtpZihyZS5yZWYmJigic3RyaW5nIiE9dHlwZW9mIHJlLnJlZnx8LTEhPXJlLnJlZi5pbmRleE9mKCIgIil8fChyZS5yZWY9T2kocmUucmVmKSxyZS5yZWYucyYmIShyZS5y'@;
put 'ZWYucy5jPDApKSkpeysrTDt2YXIgX2U9e3R5cGU6cGUsYWxsb3dCbGFuazorKDAhPXJlLmJsYW5rKSxzaG93SW5wdXRNZXNzYWdlOisoMCE9cmUuaW5wdXQpLHNob3dFcnJvck1lc3NhZ2U6KygwIT1yZS5lcnJvciksc3FyZWY6InN0cmluZyI9PXR5cGVvZiByZS5yZWY/cmUucmVmOk9vKHJl'@;
put 'LnJlZil9O2lmKHJlLmlucHV0JiYocmUuaW5wdXQudGl0bGUmJihfZS5wcm9tcHRUaXRsZT1xaShyZS5pbnB1dC50aXRsZSkpLHJlLmlucHV0Lm1lc3NhZ2UmJihfZS5wcm9tcHQ9cWkocmUuaW5wdXQubWVzc2FnZSkpKSxyZS5lcnJvciYmKHJlLmVycm9yLnRpdGxlJiYoX2UuZXJyb3JUaXRs'@;
put 'ZT1xaShyZS5lcnJvci50aXRsZSkpLHJlLmVycm9yLm1lc3NhZ2UmJihfZS5lcnJvcj1xaShyZS5lcnJvci5tZXNzYWdlKSkscmUuZXJyb3Iuc3R5bGUmJihfZS5lcnJvclN0eWxlPXJlLmVycm9yLnN0eWxlKSksIXBlKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2du'@;
put 'aXplZCB0eXBlICIrcmUudCk7dmFyIHZlPSIiO3N3aXRjaChyZS50KXtjYXNlIkFueSI6YnJlYWs7Y2FzZSJMaXN0IjpjYXNlIkN1c3RvbSI6aWYocmUubCl7aWYocmUubC5qb2luKCIsIikubGVuZ3RoPjI1MCl0aHJvdyBuZXcgRXJyb3IoIkRWIGxlbmd0aCA+IDI1MCB0cmlnZ2VycyBjb3Jy'@;
put 'dXB0aW9uIGVycm9ycyBpbiBFeGNlbC4gIFVzZSBhIGxvb2t1cCB0YWJsZSIpO3ZlPSc8Zm9ybXVsYTE+IicrSHIocmUubC5qb2luKCIsIikpKyciPC9mb3JtdWxhMT4nfWVsc2UgdmU9Ijxmb3JtdWxhMT4iK0hyKHJlLmYpKyI8L2Zvcm11bGExPiI7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlRp'@;
put 'bWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKCEkM1tyZS5vcF0pdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIityZS5vcCsiIGZvciAiK3JlLnQpO2lmKF9lLm9wZXJhdG9yPSQzW3JlLm9wXSxudWxsIT1yZS52KXZlPSI8Zm9y'@;
put 'bXVsYTE+IitIcihTdHJpbmcocmUudiBpbnN0YW5jZW9mIERhdGU/VWUocmUudik6cmUudikpKyI8L2Zvcm11bGExPiI7ZWxzZXtpZihudWxsPT1yZS5taW58fG51bGw9PXJlLm1heCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1'@;
put 'aXJlZCBmb3IgVHlwZSAiK3JlLnQpO3ZlPSI8Zm9ybXVsYTE+IitIcihTdHJpbmcocmUubWluIGluc3RhbmNlb2YgRGF0ZT9VZShyZS5taW4pOnJlLm1pbikpKyI8L2Zvcm11bGExPjxmb3JtdWxhMj4iK0hyKFN0cmluZyhyZS5tYXggaW5zdGFuY2VvZiBEYXRlP1VlKHJlLm1heCk6cmUubWF4'@;
put 'KSkrIjwvZm9ybXVsYTI+In19UC5wdXNoKFNyKCJkYXRhVmFsaWRhdGlvbiIsdmV8fG51bGwsX2UpKX19cmV0dXJuIEw+MD8nPGRhdGFWYWxpZGF0aW9ucyBjb3VudD0iJytMKyciPicrUC5qb2luKCIiKSsiPC9kYXRhVmFsaWRhdGlvbnM+IjoiIn0oU2VbIiF2YWxpZGF0aW9ucyJdKSk7dmFy'@;
put 'IEZ0LGJ0PS0xLEV0PS0xO2lmKFNlWyIhbGlua3MiXS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0aF09IjxoeXBlcmxpbmtzPiIsU2VbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24odW4pe3VuWzFdLlRhcmdldCYmKEZ0PXtyZWY6dW5bMF19LCIjIiE9dW5bMV0uVGFyZ2V0LmNoYXJBdCgwKSYm'@;
put 'KEV0PXpvKFEsLTEsSHIodW5bMV0uVGFyZ2V0KS5yZXBsYWNlKC8jLiokLywiIiksSGkuSExJTkspLEZ0WyJyOmlkIl09InJJZCIrRXQpLChidD11blsxXS5UYXJnZXQuaW5kZXhPZigiIyIpKT4tMSYmKEZ0LmxvY2F0aW9uPUhyKHVuWzFdLlRhcmdldC5zbGljZShidCsxKSkpLHVuWzFdLlRv'@;
put 'b2x0aXAmJihGdC50b29sdGlwPUhyKHVuWzFdLlRvb2x0aXApKSxyZVtyZS5sZW5ndGhdPVNyKCJoeXBlcmxpbmsiLG51bGwsRnQpKX0pLHJlW3JlLmxlbmd0aF09IjwvaHlwZXJsaW5rcz4iKSxkZWxldGUgU2VbIiFsaW5rcyJdLG50KXt2YXIgVHQ9ZnVuY3Rpb24gd1MoeSl7aWYoeS5wcm9w'@;
put 'cyl7dmFyIFA9e30sTD15LnByb3BzO3JldHVybiBMLmdyaWRsaW5lcyYmKFAuZ3JpZExpbmVzPVAuZ3JpZExpbmVzU2V0PTEpLEwuaGVhZGluZ3MmJihQLmhlYWRpbmdzPTEpLEwuY2VudGVyWCYmKFAuaG9yaXpvbnRhbENlbnRlcmVkPTEpLEwuY2VudGVyWSYmKFAudmVydGljYWxDZW50ZXJl'@;
put 'ZD0xKSxTcigicHJpbnRPcHRpb25zIixudWxsLFApfXJldHVybiIifShudCk7VHQubGVuZ3RoJiYocmVbcmUubGVuZ3RoXT1UdCl9aWYoKG51bGwhPVNlWyIhbWFyZ2lucyJdfHxudCYmbnQubWFyZ2lucykmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIGI2KHkpe3JldHVybiBkZih5KSxTcigi'@;
put 'cGFnZU1hcmdpbnMiLG51bGwseSl9KFNlWyIhbWFyZ2lucyJdfHxudC5tYXJnaW5zKSksbnQpe3ZhciBadD1mdW5jdGlvbiBPSSh5KXtpZih5LnByb3BzKXt2YXIgUD17fSxMPXkucHJvcHM7aWYoTC5vcmllbnRhdGlvbiYmKFAub3JpZW50YXRpb249TC5vcmllbnRhdGlvbiksTC5zY2FsZSYm'@;
put 'KFAuc2NhbGU9TC5zY2FsZSksTC5maXQmJihudWxsIT1MLmZpdC5oZWlnaHQmJihQLmZpdFRvSGVpZ2h0PUwuZml0LmhlaWdodCksbnVsbCE9TC5maXQud2lkdGgmJihQLmZpdFRvV2lkdGg9TC5maXQud2lkdGgpKSxMLmRwaSYmKFAuaG9yaXpvbnRhbERwaT1QLnZlcnRpY2FsRHBpPUwuZHBp'@;
put 'KSxudWxsIT1MLmZpcnN0JiYoUC5maXJzdFBhZ2VOdW1iZXI9TC5maXJzdCxQLnVzZUZpcnN0UGFnZU51bWJlcj0xKSxMLmJ3JiYoUC5ibGFja0FuZFdoaXRlPTEpLEwuZHJhZnQmJihQLmRyYWZ0PTEpLEwuY29tbWVudHMmJihQLmNlbGxDb21tZW50cz1DZVtMLmNvbW1lbnRzXXx8Im5vbmUi'@;
put 'KSxMLmVycm9ycyYmKFAuZXJyb3JzPVJJW0wuZXJyb3JzXXx8Im5vbmUiKSxMLnBhcGVyKXN3aXRjaCh0eXBlb2YgTC5wYXBlcil7Y2FzZSJudW1iZXIiOlAucGFwZXJTaXplPUwucGFwZXI7YnJlYWs7Y2FzZSJzdHJpbmciOlo5W0wucGFwZXJdP1AucGFwZXJTaXplPVo5W0wucGFwZXJdOitM'@;
put 'LnBhcGVyJiYoUC5wYXBlclNpemU9K0wucGFwZXIpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZighTC5wYXBlci5oZWlnaHR8fCFMLnBhcGVyLndpZHRoKXRocm93IkN1c3RvbSBQYXBlciBTaXplIG11c3QgaW5jbHVkZSB3aWR0aCBhbmQgaGVpZ2h0ISI7UC5wYXBlckhlaWdodD1MLnBhcGVyLmhl'@;
put 'aWdodCxQLnBhcGVyV2lkdGg9TC5wYXBlci53aWR0aH1yZXR1cm5bMSwhMCwidHJ1ZSIsIm92ZXIiXS5pbmRleE9mKEwub3JkZXIpPi0xJiYoUC5wYWdlT3JkZXI9Im92ZXJUaGVuRG93biIpLFNyKCJwYWdlU2V0dXAiLG51bGwsUCl9cmV0dXJuIiJ9KG50KTtadC5sZW5ndGgmJihyZVtyZS5s'@;
put 'ZW5ndGhdPVp0KSxadD1mdW5jdGlvbiBMdih5KXt2YXIgUD1bXSxMPSIiLFE9IiIscmU9IiIscGU9IiIsX2U9IiIsdmU9IiIsU2U9IiIsSGU9VzEoeS5oZWFkZXIpO0hlLmxlbmd0aCYmKFE9SGVbMF0sdmU9SGVbMV0scGU9SGVbMl0pO3ZhciBCZT1XMSh5LmZvb3Rlcik7cmV0dXJuIEJlLmxl'@;
put 'bmd0aCYmKHJlPUJlWzBdLFNlPUJlWzFdLF9lPUJlWzJdKSxRJiZQLnB1c2goIjxvZGRIZWFkZXI+IitIcihRKSsiPC9vZGRIZWFkZXI+IikscmUmJlAucHVzaCgiPG9kZEZvb3Rlcj4iK0hyKHJlKSsiPC9vZGRGb290ZXI+IiksKF9lIT1yZXx8cGUhPVEpJiYoTCs9JyBkaWZmZXJlbnRPZGRF'@;
put 'dmVuPSIxIicsUC5wdXNoKCI8ZXZlbkhlYWRlcj4iK0hyKHBlKSsiPC9ldmVuSGVhZGVyPiIpLFAucHVzaCgiPGV2ZW5Gb290ZXI+IitIcihfZSkrIjwvZXZlbkZvb3Rlcj4iKSksKFNlIT1yZXx8dmUhPVEpJiYoTCs9JyBkaWZmZXJlbnRGaXJzdD0iMSInLFAucHVzaCgiPGZpcnN0SGVhZGVy'@;
put 'PiIrSHIodmUpKyI8L2ZpcnN0SGVhZGVyPiIpLFAucHVzaCgiPGZpcnN0Rm9vdGVyPiIrSHIoU2UpKyI8L2ZpcnN0Rm9vdGVyPiIpKSxQLmxlbmd0aD8iPGhlYWRlckZvb3RlciIrTCsiPiIrUC5qb2luKCIiKSsiPC9oZWFkZXJGb290ZXI+IjoiIn0obnQpLFp0Lmxlbmd0aCYmKHJlW3JlLmxl'@;
put 'bmd0aF09WnQpfWlmKChudWxsIT1TZVsiIXJvd0JyZWFrcyJdfHxudCYmbnQucm93QnJlYWtzKSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gRkkoeSl7aWYoMD09eS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPVsnPHJvd0JyZWFrcyBjb3VudD0iJyt5Lmxlbmd0aCsnIiBtYW51YWxCcmVh'@;
put 'a0NvdW50PSInK3kubGVuZ3RoKyciPiddLEw9MDtMPHkubGVuZ3RoOysrTClQLnB1c2goJzxicmsgaWQ9IicreVtMXS5SKyciIG1hbj0iMSIvPicpO3JldHVybiBQLmpvaW4oIiIpKyI8L3Jvd0JyZWFrcz4ifShTZVsiIXJvd0JyZWFrcyJdfHxudC5yb3dCcmVha3MpKSwobnVsbCE9U2VbIiFj'@;
put 'b2xCcmVha3MiXXx8bnQmJm50LmNvbEJyZWFrcykmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIFFaKHkpe2lmKDA9PXkubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD1bJzxjb2xCcmVha3MgY291bnQ9IicreS5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJyt5Lmxlbmd0aCsnIj4nXSxM'@;
put 'PTA7TDx5Lmxlbmd0aDsrK0wpUC5wdXNoKCc8YnJrIGlkPSInK3lbTF0uQysnIiBtYW49IjEiLz4nKTtyZXR1cm4gUC5qb2luKCIiKSsiPC9jb2xCcmVha3M+In0oU2VbIiFjb2xCcmVha3MiXXx8bnQuY29sQnJlYWtzKSksKCFQfHxQLmlnbm9yZUVDfHxudWxsPT1QLmlnbm9yZUVDKSYmKHJl'@;
put 'W3JlLmxlbmd0aF09ZnMoImlnbm9yZWRFcnJvcnMiLFNyKCJpZ25vcmVkRXJyb3IiLG51bGwse251bWJlclN0b3JlZEFzVGV4dDoxLHNxcmVmOkhlfSkpKSxTZVsiIWNoYXJ0cyJdJiZHZS5wdXNoLmFwcGx5KEdlLFNlWyIhY2hhcnRzIl0pLFNlWyIhaW1hZ2VzIl0mJkdlLnB1c2guYXBwbHko'@;
put 'R2UsU2VbIiFpbWFnZXMiXSksU2VbIiFzaGFwZXMiXSYmR2UucHVzaC5hcHBseShHZSxTZVsiIXNoYXBlcyJdKSxHZS5sZW5ndGg+MCYmKEV0PXpvKFEsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyh5KzEpKyIueG1sIixIaS5EUkFXKSxyZVtyZS5sZW5ndGhdPVNyKCJkcmF3aW5nIixudWxs'@;
put 'LHsicjppZCI6InJJZCIrRXR9KSxTZVsiIWRyYXdpbmciXT1HZSksKFNlWyIhY29tbWVudHMiXS5sZW5ndGg+MHx8KFNlWyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wKSYmKEV0PXpvKFEsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyh5KzEpKyIudm1sIixIaS5WTUwpLHJlW3JlLmxl'@;
put 'bmd0aF09U3IoImxlZ2FjeURyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitFdH0pLFNlWyIhbGVnYWN5Il09RXQpLFNlWyIhcHJpbnQiXSYmU2VbIiFwcmludCJdLmltYWdlcyl7dmFyIHBuPVNlWyIhcHJpbnQiXS5pbWFnZXMsS249MDtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVu'@;
put 'Y3Rpb24odW4pe3BuW3VuXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHFuKXtwblt1bl1bcW5dJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oem4pe2lmKEFycmF5LmlzQXJyYXkocG5bdW5dW3FuXVt6bl0pKWZvcih2YXIga249'@;
put 'MDtrbjxwblt1bl1bcW5dW3puXS5sZW5ndGg7Kytrbilwblt1bl1bcW5dW3puXVtrbl0mJihwblt1bl1bcW5dW3puXVtrbl0uX2NudD1LbisrKX0pfSl9KSxLbj4wJiYoRXQ9em8oUSwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKHkrMSkrIkhGLnZtbCIsSGkuVk1MKSxyZVtyZS5sZW5n'@;
put 'dGhdPVNyKCJsZWdhY3lEcmF3aW5nSEYiLG51bGwseyJyOmlkIjoicklkIitFdH0pLFNlWyIhbGVnYWN5SEYiXT1FdCl9cmV0dXJuKFNlWyIhdGFibGVzIl18fFtdKS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0aF09Jzx0YWJsZVBhcnRzIGNvdW50PSInK1NlWyIhdGFibGVzIl0ubGVuZ3RoKyci'@;
put 'PicsU2VbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKHVuLHFuKXtFdD16byhRLC0xLCIuLi90YWJsZXMvdGFibGUiKyh5KzEpKyJfIitxbisiLnhtbCIsSGkuVEFCTEUpLHJlW3JlLmxlbmd0aF09Jzx0YWJsZVBhcnQgcjppZD0icklkJytFdCsnIi8+J30pLHJlW3JlLmxlbmd0aF09Ijwv'@;
put 'dGFibGVQYXJ0cz4iKSxyZS5sZW5ndGg+MSYmKHJlW3JlLmxlbmd0aF09Ijwvd29ya3NoZWV0PiIscmVbMV09cmVbMV0ucmVwbGFjZSgiLz4iLCI+IikpLHJlLmpvaW4oIiIpfWZ1bmN0aW9uICRJKHksUCxMLFEpe3ZhciByZT1mdW5jdGlvbiBQdih5LFAsTCl7dmFyIFE9ZnIoMTQ1KSxyZT0o'@;
put 'TFsiIXJvd3MiXXx8W10pW3ldfHx7fTtRLndyaXRlX3NoaWZ0KDQseSksUS53cml0ZV9zaGlmdCg0LDApO3ZhciBwZT0zMjA7cmUuaHB4P3BlPTIwKmoyKHJlLmhweCk6cmUuaHB0JiYocGU9MjAqcmUuaHB0KSxRLndyaXRlX3NoaWZ0KDIscGUpLFEud3JpdGVfc2hpZnQoMSwwKTt2YXIgX2U9'@;
put 'MDtyZS5sZXZlbCYmKF9lfD1yZS5sZXZlbCkscmUuaGlkZGVuJiYoX2V8PTE2KSwocmUuaHB4fHxyZS5ocHQpJiYoX2V8PTMyKSxRLndyaXRlX3NoaWZ0KDEsX2UpLFEud3JpdGVfc2hpZnQoMSwwKTt2YXIgdmU9MCxTZT1RLmw7US5sKz00O2Zvcih2YXIgSGU9e3I6eSxjOjB9LEJlPTA7QmU8'@;
put 'MTY7KytCZSlpZighKFAucy5jPkJlKzE8PDEwfHxQLmUuYzxCZTw8MTApKXtmb3IodmFyIEdlPS0xLG50PS0xLGR0PUJlPDwxMDtkdDxCZSsxPDwxMDsrK2R0KUhlLmM9ZHQsKEFycmF5LmlzQXJyYXkoTCk/KExbSGUucl18fFtdKVtIZS5jXTpMW2RpKEhlKV0pJiYoR2U8MCYmKEdlPWR0KSxu'@;
put 'dD1kdCk7R2U8MHx8KCsrdmUsUS53cml0ZV9zaGlmdCg0LEdlKSxRLndyaXRlX3NoaWZ0KDQsbnQpKX12YXIgY3Q9US5sO3JldHVybiBRLmw9U2UsUS53cml0ZV9zaGlmdCg0LHZlKSxRLmw9Y3QsUS5sZW5ndGg+US5sP1Euc2xpY2UoMCxRLmwpOlF9KFEsTCxQKTsocmUubGVuZ3RoPjE3fHwo'@;
put 'UFsiIXJvd3MiXXx8W10pW1FdKSYmdWkoeSwiQnJ0Um93SGRyIixyZSl9dmFyIHFJPUpjLEtJPUQxO2Z1bmN0aW9uIGpTKHkpe3JldHVyblthMCh5KSxtYSh5KSwibiJdfXZhciBsTD1KYyxZUz1EMSxxUz1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJd'@;
put 'LGVvPVsiQW55IiwiV2hvbGUiLCJEZWNpbWFsIiwiTGlzdCIsIkRhdGUiLCJUaW1lIiwiTGVuZ3RoIiwiQ3VzdG9tIl0sQnY9WyJJTiIsIk9UIiwiRVEiLCJORSIsIkdUIiwiTFQiLCJHRSIsIkxFIl07ZnVuY3Rpb24gd0woeSl7dmFyIFA9ZnIoNCksTD1bUF0sUT1lby5pbmRleE9mKHkudCk7'@;
put 'aWYoUTwwKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIreS50KTt2YXIgcGU9QnYuaW5kZXhPZih5Lm9wKTtzd2l0Y2goUSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDc6cGU9MDticmVhaztkZWZhdWx0OmlmKC0xPT1wZSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK3kub3ArIiBmb3IgIit5LnQpfVAud3JpdGVfc2hpZnQoMSwwfFEpLFAud3JpdGVfc2hpZnQoMSwxKSxQLndyaXRlX3NoaWZ0KDEsMTJ8cGU8PDQpLFAud3JpdGVfc2hpZnQoMSwwKSxMLnB1c2goZnVuY3Rpb24gWmgoeSl7dmFyIFA9eS5zcGxp'@;
put 'dCgvXHMqLFxzKi8pLEw9ZnIoNCk7TC53cml0ZV9zaGlmdCg0LFAubGVuZ3RoKTt2YXIgUT1bTF07cmV0dXJuIFAuZm9yRWFjaChmdW5jdGlvbihyZSl7US5wdXNoKEQxKE9pKHJlKSkpfSksUyhRKX0oInN0cmluZyI9PXR5cGVvZiB5LnJlZj95LnJlZjpPbyh5LnJlZikpKTt2YXIgX2U9ZnIo'@;
put 'MTYpO19lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksX2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxfZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLF9lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksTC5wdXNoKF9lKTt2YXIgdmU9ZnIoOCk7dmUud3JpdGVfc2hpZnQoNCwwKSx2'@;
put 'ZS53cml0ZV9zaGlmdCg0LDApO3ZhciBTZT0xO3N3aXRjaCh5LnQpe2Nhc2UiQW55IjpMLnB1c2godmUpLEwucHVzaCh2ZSk7YnJlYWs7Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYobnVsbCE9eS52fHxudWxsIT15LmYpTC5wdXNoKCJudW1iZXIiPT10eXBlb2Yg'@;
put 'eS52P212KHkudik6VTMobnVsbD09eS52P3kuZjp5LnYpKTtlbHNle2lmKG51bGw9PXkubWlufHxudWxsPT15Lm1heCl0aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK3kudDtMLnB1c2goIm51bWJlciI9PXR5'@;
put 'cGVvZiB5Lm1pbj9tdih5Lm1pbik6VTMoeS5taW4pKSxMLnB1c2goIm51bWJlciI9PXR5cGVvZiB5Lm1heD9tdih5Lm1heCk6VTMoeS5tYXgpKSxTZT0yfWJyZWFrO2Nhc2UiTGlzdCI6aWYobnVsbCE9eS5sKXtMLnB1c2goYVMoeS5sLmpvaW4oIiwiKSkpO2JyZWFrfWNhc2UiQ3VzdG9tIjpp'@;
put 'ZigibnVsbCIhPXkuZil7TC5wdXNoKFUzKHkuZikpO2JyZWFrfXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYGZgIisoIkxpc3QiPT15LnQ/IiBvciBgbGAiOiIiKSsiIHJlcXVpcmVkIGZvciBUeXBlICIreS50O2RlZmF1bHQ6dGhyb3ciWExTQiBkb2VzIG5vdCBzdXBwb3J0'@;
put 'IERhdGEgVmFsaWRhdGlvbiB0eXBlICIreS50fXJldHVybiAxPT1TZSYmTC5wdXNoKHZlKSxTKEwpfWZ1bmN0aW9uIFNMKHksUCxMLFEscmUscGUsX2Upe2lmKHZvaWQgMD09PVAudiYmbnVsbD09UC5zfHwieiI9PT1QLnQmJiFyZS5zaGVldFN0dWJzKXJldHVybiExO3ZhciB2ZT0iIjtzd2l0'@;
put 'Y2goUC50KXtjYXNlImIiOnZlPVAudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZCI6KFA9b24oUCkpLno9UC56fHx3Ll90YWJsZVsxNF0sUC52PVVlKEh0KFAudikpLFAudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNlImUiOnZlPSIiK1AudjticmVhaztkZWZhdWx0OnZlPVAudn12YXIgU2U9e3I6TCxj'@;
put 'OlF9O3N3aXRjaChTZS5zPWd1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLFAscmUpLFAubCYmcGVbIiFsaW5rcyJdLnB1c2goW2RpKFNlKSxQLmxdKSxQLmMmJnBlWyIhY29tbWVudHMiXS5wdXNoKFtkaShTZSksUC5jXSksUC50KXtjYXNlInMiOmNhc2Uic3RyIjppZihyZS5ib29rU1NU'@;
put 'KXtpZih2ZT13dihyZS5TdHJpbmdzLFAudixQLlI/UC5yPUpoKFAuUik6bnVsbCxyZS5yZXZTdHJpbmdzKSxQLlIpZm9yKHZhciBIZT0wO0hlPFAuUi5sZW5ndGg7KytIZSlQLlJbSGVdLnMmJmd1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpQLlJbSGVdLnN9LHJl'@;
put 'KTtTZS50PSJzIixTZS52PXZlLF9lP3VpKHksIkJydFNob3J0SXNzdCIsZnVuY3Rpb24gdEwoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig4KSksS2MoUCxMKSxMLndyaXRlX3NoaWZ0KDQsUC52KSxMfSgwLFNlKSk6dWkoeSwiQnJ0Q2VsbElzc3QiLGZ1bmN0aW9uIE52KHksUCxMKXty'@;
put 'ZXR1cm4gbnVsbD09TCYmKEw9ZnIoMTIpKSxGaShQLEwpLEwud3JpdGVfc2hpZnQoNCxQLnYpLEx9KDAsU2UpKX1lbHNlIFNlLnQ9InN0ciIsX2U/dWkoeSwiQnJ0U2hvcnRTdCIsZnVuY3Rpb24gclkoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig4KzQqeS52Lmxlbmd0aCkpLEtjKFAs'@;
put 'TCksbmMoeS52LEwpLEwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMfShQLFNlKSk6dWkoeSwiQnJ0Q2VsbFN0IixmdW5jdGlvbiB1NSh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDEyKzQqeS52Lmxlbmd0aCkpLEZpKFAsTCksbmMoeS52LEwpLEwubGVuZ3RoPkwubD9MLnNsaWNl'@;
put 'KDAsTC5sKTpMfShQLFNlKSk7cmV0dXJuITA7Y2FzZSJuIjpyZXR1cm4gUC52PT0oMHxQLnYpJiZQLnY+LTFlMyYmUC52PDFlMz9fZT91aSh5LCJCcnRTaG9ydFJrIixmdW5jdGlvbiBvTCh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDgpKSxLYyhQLEwpLFNzKHkudixMKSxMfShQLFNl'@;
put 'KSk6dWkoeSwiQnJ0Q2VsbFJrIixmdW5jdGlvbiBuWSh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDEyKSksRmkoUCxMKSxTcyh5LnYsTCksTH0oUCxTZSkpOl9lP3VpKHksIkJydFNob3J0UmVhbCIsZnVuY3Rpb24gckwoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcigxMikpLEtj'@;
put 'KFAsTCksUGMoeS52LEwpLEx9KFAsU2UpKTp1aSh5LCJCcnRDZWxsUmVhbCIsZnVuY3Rpb24gVnYoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcigxNikpLEZpKFAsTCksUGMoeS52LEwpLEx9KFAsU2UpKSwhMDtjYXNlImIiOnJldHVybiBTZS50PSJiIixfZT91aSh5LCJCcnRTaG9ydEJv'@;
put 'b2wiLGZ1bmN0aW9uIEh2KHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoNSkpLEtjKFAsTCksTC53cml0ZV9zaGlmdCgxLHkudj8xOjApLEx9KFAsU2UpKTp1aSh5LCJCcnRDZWxsQm9vbCIsZnVuY3Rpb24gRlMoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig5KSksRmkoUCxMKSxM'@;
put 'LndyaXRlX3NoaWZ0KDEseS52PzE6MCksTH0oUCxTZSkpLCEwO2Nhc2UiZSI6cmV0dXJuIFNlLnQ9ImUiLF9lP3VpKHksIkJydFNob3J0RXJyb3IiLGZ1bmN0aW9uIFZTKHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoOCkpLEtjKFAsTCksTC53cml0ZV9zaGlmdCgxLHkudiksTC53cml0'@;
put 'ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMSwwKSxMfShQLFNlKSk6dWkoeSwiQnJ0Q2VsbEVycm9yIixmdW5jdGlvbiBIUyh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDkpKSxGaShQLEwpLEwud3JpdGVfc2hpZnQoMSx5LnYpLEx9KFAsU2UpKSwhMH1yZXR1cm4gX2U/dWkoeSwi'@;
put 'QnJ0U2hvcnRCbGFuayIsZnVuY3Rpb24gZUwoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig0KSksS2MoUCxMKX0oMCxTZSkpOnVpKHksIkJydENlbGxCbGFuayIsZnVuY3Rpb24gUUkoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig4KSksRmkoUCxMKX0oMCxTZSkpLCEwfWZ1bmN0'@;
put 'aW9uIEFMKHksUCxMLFEpe3ZhciByZT15YygpLHBlPUwuU2hlZXROYW1lc1t5XSxfZT1MLlNoZWV0c1twZV18fHt9LHZlPXBlO3RyeXtMJiZMLldvcmtib29rJiYodmU9TC5Xb3JrYm9vay5TaGVldHNbeV0uQ29kZU5hbWV8fHZlKX1jYXRjaHt9dmFyIFNlPU9pKF9lWyIhcmVmIl18fCJBMSIp'@;
put 'O2lmKFNlLmUuYz4xNjM4M3x8U2UuZS5yPjEwNDg1NzUpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoX2VbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7U2UuZS5jPU1hdGgubWluKFNlLmUuYywxNjM4MyksU2UuZS5yPU1h'@;
put 'dGgubWluKFNlLmUuYywxMDQ4NTc1KX1yZXR1cm4gX2VbIiFsaW5rcyJdPVtdLF9lWyIhY29tbWVudHMiXT1bXSx1aShyZSwiQnJ0QmVnaW5TaGVldCIpLChMLnZiYXJhd3x8X2VbIiFvdXRsaW5lIl0pJiZ1aShyZSwiQnJ0V3NQcm9wIixmdW5jdGlvbiAkMSh5LFAsTCl7bnVsbD09TCYmKEw9'@;
put 'ZnIoODQrNCp5Lmxlbmd0aCkpO3ZhciBRPTE5MjtQJiYoUC5hYm92ZSYmKFEmPS02NSksUC5sZWZ0JiYoUSY9LTEyOSkpLEwud3JpdGVfc2hpZnQoMSxRKTtmb3IodmFyIHJlPTE7cmU8MzsrK3JlKUwud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gUjIoe2F1dG86MX0sTCksTC53cml0ZV9zaGlm'@;
put 'dCgtNCwtMSksTC53cml0ZV9zaGlmdCgtNCwtMSksc20oeSxMKSxMLnNsaWNlKDAsTC5sKX0odmUsX2VbIiFvdXRsaW5lIl0pKSx1aShyZSwiQnJ0V3NEaW0iLEtJKFNlKSksZnVuY3Rpb24gZU0oeSxQLEwpe3VpKHksIkJydEJlZ2luV3NWaWV3cyIpLHVpKHksIkJydEJlZ2luV3NWaWV3Iixm'@;
put 'dW5jdGlvbiBtTCh5LFAsTCl7bnVsbD09TCYmKEw9ZnIoMzApKTt2YXIgUT05MjQ7cmV0dXJuKCgoUHx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJihRfD0zMiksaG4oeVsiIWdyaWRsaW5lcyJdKSYmKFEmPS01KSxobigoKChQfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLmdyaWQpJiYo'@;
put 'USY9LTUpLEwud3JpdGVfc2hpZnQoMixRKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCgxLDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDIsMTAwKSxMLndy'@;
put 'aXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTH0oUCxMKSksUFsiIWZyZWV6ZSJdJiZ1aSh5LCJCcnRQYW5lIixmdW5jdGlvbiAkUyh5KXt2YXIgUD1zcyh5WyIhZnJlZXplIl0pLEw9ZnIoMjkpO3JldHVybiBM'@;
put 'LndyaXRlX3NoaWZ0KDgsUC5jLCJmIiksTC53cml0ZV9zaGlmdCg4LFAuciwiZiIpLEwud3JpdGVfc2hpZnQoNCxQLnIpLEwud3JpdGVfc2hpZnQoNCxQLmMpLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDEsMyksTH0oUCkpLFBbIiFzZWwiXSYmdWkoeSwiQnJ0U2VsIixmdW5j'@;
put 'dGlvbiBkTCh5LFApe3ZhciBMPWZyKDM2KSxRPXkuY2VsbDtpZighUSl7aWYoIXkucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO1E9ZGkoV3MoeS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgcmU9InN0cmlu'@;
put 'ZyI9PXR5cGVvZiBRP3NzKFEpOlE7aWYoUCl7dmFyIHBlPSJzdHJpbmciPT10eXBlb2YgUD9zcyhQKTpQO0wud3JpdGVfc2hpZnQoNCxyZS5yPj1wZS5yJiZyZS5jPj1wZS5jPzA6cmUucj49cGUuciYmcmUuYzxwZS5jPzI6cmUucjxwZS5yJiZyZS5jPj1wZS5jPzE6Myl9ZWxzZSBMLndyaXRl'@;
put 'X3NoaWZ0KDQsMyk7cmV0dXJuIEwud3JpdGVfc2hpZnQoNCxyZS5yKSxMLndyaXRlX3NoaWZ0KDQscmUuYyksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwxKSxMLndyaXRlX3NoaWZ0KDQscmUuciksTC53cml0ZV9zaGlmdCg0LHJlLnIpLEwud3JpdGVfc2hpZnQoNCxyZS5j'@;
put 'KSxMLndyaXRlX3NoaWZ0KDQscmUuYyksTH0oUFsiIXNlbCJdLFBbIiFmcmVlemUiXSkpLHVpKHksIkJydEVuZFdzVmlldyIpLHVpKHksIkJydEVuZFdzVmlld3MiKX0ocmUsX2UsTC5Xb3JrYm9vayksZnVuY3Rpb24gWFMoeSxQKXshUHx8IVBbIiFjb2xzIl18fCh1aSh5LCJCcnRCZWdpbkNv'@;
put 'bEluZm9zIiksUFsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKEwsUSl7TCYmdWkoeSwiQnJ0Q29sSW5mbyIsZnVuY3Rpb24gaVkoeSxQLEwpe251bGw9PUwmJihMPWZyKDE4KSk7dmFyIFE9WWQoeSxQKTtMLndyaXRlX3NoaWZ0KC00LHkpLEwud3JpdGVfc2hpZnQoLTQseSksTC53cml0ZV9z'@;
put 'aGlmdCg0LDI1NiooUS53aWR0aHx8MTApKSxMLndyaXRlX3NoaWZ0KDQsMCk7dmFyIHJlPTA7cmV0dXJuIFAuaGlkZGVuJiYocmV8PTEpLCJudW1iZXIiPT10eXBlb2YgUS53aWR0aCYmKHJlfD0yKSxQLmxldmVsJiYocmV8PVAubGV2ZWw8PDgpLEwud3JpdGVfc2hpZnQoMixyZSksTH0oUSxM'@;
put 'KSl9KSx1aSh5LCJCcnRFbmRDb2xJbmZvcyIpKX0ocmUsX2UpLGZ1bmN0aW9uIE1MKHksUCxMLFEpe3ZhciByZT1PaShQWyIhcmVmIl18fCJBMSIpLF9lPSIiLHZlPVtdO3VpKHksIkJydEJlZ2luU2hlZXREYXRhIik7dmFyIFNlPUFycmF5LmlzQXJyYXkoUCksSGU9cmUuZS5yO1BbIiFyb3dz'@;
put 'Il0mJihIZT1NYXRoLm1heChyZS5lLnIsUFsiIXJvd3MiXS5sZW5ndGgtMSkpO2Zvcih2YXIgQmU9cmUucy5yO0JlPD1IZTsrK0JlKXtfZT1IcyhCZSksJEkoeSxQLHJlLEJlKTt2YXIgR2U9ITE7aWYoQmU8PXJlLmUucilmb3IodmFyIG50PXJlLnMuYztudDw9cmUuZS5jOysrbnQpe0JlPT09'@;
put 'cmUucy5yJiYodmVbbnRdPU5zKG50KSk7dmFyIGR0PVNlPyhQW0JlXXx8W10pW250XTpQW3ZlW250XStfZV07R2U9ISFkdCYmU0woeSxkdCxCZSxudCxRLFAsR2UpfX11aSh5LCJCcnRFbmRTaGVldERhdGEiKX0ocmUsX2UsMCxQKSxmdW5jdGlvbiBrNih5LFApe1BbIiFwcm90ZWN0Il0mJnVp'@;
put 'KHksIkJydFNoZWV0UHJvdGVjdGlvbiIsZnVuY3Rpb24gX0woeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9ZnIoNjYpKSxQLndyaXRlX3NoaWZ0KDIseS5wYXNzd29yZD9hQyh5LnBhc3N3b3JkKTowKSxQLndyaXRlX3NoaWZ0KDQsMSksW1sib2JqZWN0cyIsITFdLFsic2NlbmFyaW9zIiwhMV0s'@;
put 'WyJmb3JtYXRDZWxscyIsITBdLFsiZm9ybWF0Q29sdW1ucyIsITBdLFsiZm9ybWF0Um93cyIsITBdLFsiaW5zZXJ0Q29sdW1ucyIsITBdLFsiaW5zZXJ0Um93cyIsITBdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsITBdLFsiZGVsZXRlQ29sdW1ucyIsITBdLFsiZGVsZXRlUm93cyIsITBdLFsic2Vs'@;
put 'ZWN0TG9ja2VkQ2VsbHMiLCExXSxbInNvcnQiLCEwXSxbImF1dG9GaWx0ZXIiLCEwXSxbInBpdm90VGFibGVzIiwhMF0sWyJzZWxlY3RVbmxvY2tlZENlbGxzIiwhMV1dLmZvckVhY2goZnVuY3Rpb24oTCl7UC53cml0ZV9zaGlmdCg0LExbMV0/bnVsbD09eVtMWzBdXXx8eVtMWzBdXT8wOjE6'@;
put 'bnVsbCE9eVtMWzBdXSYmeVtMWzBdXT8wOjEpfSksUH0oUFsiIXByb3RlY3QiXSkpfShyZSxfZSksZnVuY3Rpb24gUVMoeSxQLEwsUSl7aWYoUFsiIWF1dG9maWx0ZXIiXSl7dmFyIHJlPVBbIiFhdXRvZmlsdGVyIl0scGU9InN0cmluZyI9PXR5cGVvZiByZS5yZWY/cmUucmVmOk9vKHJlLnJl'@;
put 'Zik7TC5Xb3JrYm9va3x8KEwuV29ya2Jvb2s9e1NoZWV0czpbXX0pLEwuV29ya2Jvb2suTmFtZXN8fChMLldvcmtib29rLk5hbWVzPVtdKTt2YXIgX2U9TC5Xb3JrYm9vay5OYW1lcyx2ZT1XcyhwZSk7dmUucy5yPT12ZS5lLnImJih2ZS5lLnI9V3MoUFsiIXJlZiJdKS5lLnIscGU9T28odmUp'@;
put 'KTtmb3IodmFyIFNlPTA7U2U8X2UubGVuZ3RoOysrU2Upe3ZhciBIZT1fZVtTZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PUhlLk5hbWUmJkhlLlNoZWV0PT1RKXtIZS5SZWY9IiciK0wuU2hlZXROYW1lc1tRXSsiJyEiK3BlO2JyZWFrfX1TZT09X2UubGVuZ3RoJiZfZS5wdXNoKHtO'@;
put 'YW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OlEsUmVmOiInIitMLlNoZWV0TmFtZXNbUV0rIichIitwZX0pLHVpKHksIkJydEJlZ2luQUZpbHRlciIsRDEoT2kocGUpKSksdWkoeSwiQnJ0RW5kQUZpbHRlciIpfX0ocmUsX2UsTCx5KSxmdW5jdGlvbiB4TCh5LFApeyFQfHwhUFsi'@;
put 'IW1lcmdlcyJdfHwodWkoeSwiQnJ0QmVnaW5NZXJnZUNlbGxzIixmdW5jdGlvbiBXUyh5LFApe3JldHVybiBudWxsPT1QJiYoUD1mcig0KSksUC53cml0ZV9zaGlmdCg0LHkpLFB9KFBbIiFtZXJnZXMiXS5sZW5ndGgpKSxQWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihMKXt1aSh5LCJC'@;
put 'cnRNZXJnZUNlbGwiLFlTKEwpKX0pLHVpKHksIkJydEVuZE1lcmdlQ2VsbHMiKSl9KHJlLF9lKSxmdW5jdGlvbiBrTCh5LFApe2lmKFApe3VpKHksIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIEtTKHksUCl7bnVsbD09UCYmKFA9ZnIoMTgpKSxQLndyaXRlX3NoaWZ0KDIsMCksUC53cml0ZV9z'@;
put 'aGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBMPTAsUT0wO1E8eS5sZW5ndGg7KytRKSgoeVtRXXx8e30pLnJlZnx8e30pLnMmJnlbUV0ucmVmLnMuYzwwfHwrK0w7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCxMKSxQfShQKSk7Zm9yKHZhciBM'@;
put 'PTA7TDxQLmxlbmd0aDsrK0wpKChQW0xdfHx7fSkucmVmfHx7fSkucyYmUFtMXS5yZWYucy5jPDB8fHVpKHksIkJydERWYWwiLHdMKFBbTF0pKTt1aSh5LCJCcnRFbmREVmFscyIpfX0ocmUsX2VbIiF2YWxpZGF0aW9ucyJdKSxmdW5jdGlvbiBFTCh5LFAsTCl7UFsiIWxpbmtzIl0uZm9yRWFj'@;
put 'aChmdW5jdGlvbihRKXtpZihRWzFdLlRhcmdldCl7dmFyIHJlPXpvKEwsLTEsUVsxXS5UYXJnZXQucmVwbGFjZSgvIy4qJC8sIiIpLEhpLkhMSU5LKTt1aSh5LCJCcnRITGluayIsZnVuY3Rpb24gY0woeSxQKXt2YXIgTD1mcig1MCs0Kih5WzFdLlRhcmdldC5sZW5ndGgrKHlbMV0uVG9vbHRp'@;
put 'cHx8IiIpLmxlbmd0aCkpO0QxKHtzOnNzKHlbMF0pLGU6c3MoeVswXSl9LEwpLE9jKCJySWQiK1AsTCk7dmFyIFE9eVsxXS5UYXJnZXQuaW5kZXhPZigiIyIpO3JldHVybiBuYygoLTE9PVE/IiI6eVsxXS5UYXJnZXQuc2xpY2UoUSsxKSl8fCIiLEwpLG5jKHlbMV0uVG9vbHRpcHx8IiIsTCks'@;
put 'bmMoIiIsTCksTC5zbGljZSgwLEwubCl9KFEscmUpKX19KSxkZWxldGUgUFsiIWxpbmtzIl19KHJlLF9lLFEpLF9lWyIhbWFyZ2lucyJdJiZ1aShyZSwiQnJ0TWFyZ2lucyIsZnVuY3Rpb24gcEwoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9ZnIoNDgpKSxkZih5KSxxUy5mb3JFYWNoKGZ1bmN0'@;
put 'aW9uKEwpe1BjKHlbTF0sUCl9KSxQfShfZVsiIW1hcmdpbnMiXSkpLCghUHx8UC5pZ25vcmVFQ3x8bnVsbD09UC5pZ25vcmVFQykmJmZ1bmN0aW9uIEpTKHksUCl7IVB8fCFQWyIhcmVmIl18fCh1aSh5LCJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MiKSx1aSh5LCJCcnRDZWxsSWdub3JlRUMiLGZ1'@;
put 'bmN0aW9uIHZMKHkpe3ZhciBQPWZyKDI0KTtyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDQpLFAud3JpdGVfc2hpZnQoNCwxKSxEMSh5LFApLFB9KE9pKFBbIiFyZWYiXSkpKSx1aSh5LCJCcnRFbmRDZWxsSWdub3JlRUNzIikpfShyZSxfZSksZnVuY3Rpb24gb1koeSxQLEwsUSl7aWYoUFsiIWNv'@;
put 'bW1lbnRzIl0ubGVuZ3RoPjApe3ZhciByZT16byhRLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoTCsxKSsiLnZtbCIsSGkuVk1MKTt1aSh5LCJCcnRMZWdhY3lEcmF3aW5nIixPYygicklkIityZSkpLFBbIiFsZWdhY3kiXT1yZX19KHJlLF9lLHksUSksdWkocmUsIkJydEVuZFNoZWV0'@;
put 'IikscmUuZW5kKCl9ZnVuY3Rpb24gQTYoeSl7dmFyIFEsUD1bXSxMPXkubWF0Y2goL148YzpudW1DYWNoZT4vKTsoeS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgX2U9cGUubWF0Y2goLzxjOnB0IGlkeD0i'@;
put 'KFxkKj8pIj48Yzp2PiguKik8XC9jOnY+PFwvYzpwdD4vKTtfZSYmKFBbK19lWzFdXT1MPytfZVsyXTpfZVsyXSl9KTt2YXIgcmU9eHIoKHkubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oeS5tYXRj'@;
put 'aCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7UT1wZS5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLFtQLHJlLFFdfUhpLkNIQVJUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBz'@;
put 'L2NoYXJ0IixIaS5DSEFSVEVYPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDE0L3JlbGF0aW9uc2hpcHMvY2hhcnRFeCI7dmFyIGY1PS88KD86XHcrOik/Y2hhcnQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NoYXJ0Pi8sQmM9LzwoPzpcdys6KT9wbG90QXJlYT4oW1xz'@;
put 'XFNdKj8pPFwvKD86XHcrOik/cGxvdEFyZWE+LyxnZj0vPCg/Olx3KzopP2xlZ2VuZD4oW1xzXFNdKj8pPFwvKD86XHcrOik/bGVnZW5kPi8sVDY9LzwoPzpcdys6KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGl0bGU+LztmdW5jdGlvbiBtMCh5LFAsTCxRLHJlLHBlLF9lLHZlKXt2'@;
put 'YXIgU2U9cGV8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCF5KXJldHVybiBwZTtfZSYmX2UuQW5jaG9yJiYoU2VbIiFwb3MiXT1zZihfZS5BbmNob3IsdmUpLFNlWyIhcG9zVHlwZSJdPV9lLkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLFNlWyIhYWJzcG9zIl09c2YoX2UuQW5jaG9y'@;
put 'LHZlKSxTZVsiIXJlbHBvcyJdPUttKF9lLkFuY2hvcix2ZSkpLFNlWyIhcGxvdCJdPVtdO3ZhciBIZT0iIixCZT0iIixHZT15Lm1hdGNoKGY1KTtHZT8oSGU9eS5zbGljZSgwLEdlLmluZGV4KSxCZT15LnNsaWNlKEdlLmluZGV4K0dlWzBdLmxlbmd0aCkpOkhlPUJlPXk7dmFyIG50PVtdLGR0'@;
put 'PUhlLm1hdGNoKC88YzpsYW5nLio/Pi8pfHx5Lm1hdGNoKC88YzpsYW5nLio/Pi8pfHxCZS5tYXRjaCgvPGM6bGFuZy4qPz4vKTtyZXR1cm4gZHQmJihTZVsiIWxhbmciXT0obG4oZHRbMF0pfHx7fSkudmFsfHwiZW4tVVMiKSxHZSYmKChudD1HZVsxXS5tYXRjaChUNikpJiZmdW5jdGlvbiBx'@;
put 'MSh5LFApe3ZhciBMPSIiO3kubWF0Y2goLzxjOnJpY2g+LykmJnkucmVwbGFjZSgvPGE6dD4oW1xzXFNdKj8pPFwvYTp0Pi9nLGZ1bmN0aW9uKFEscmUpe0wrPXJlfSksUFsiIXRpdGxlIl09THx8IkNoYXJ0IFRpdGxlIn0obnRbMV0sU2UpLGZ1bmN0aW9uIEszKHksUCl7aWYoeSl7dmFyIEw9'@;
put 'MCxRPTAscmU9IkEiLHBlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19O3kucmVwbGFjZShUcixmdW5jdGlvbihfZSx2ZSl7dmFyIFNlPXt0OnZlLGM6TCx3OjAsc2VyOltdfSxIZT1bXSxCZT0oX2UubWF0Y2goLzxjOnNlci8pfHxbXSkuaW5kZXgsR2U9QmU/X2Uuc2xpY2UoMCxCZSk6'@;
put 'X2U7InNjYXR0ZXIiPT12ZSYmKEhlPV9lLm1hdGNoKC88YzpzY2F0dGVyU3R5bGUoW15cLz5dKilcLz4vbSkpJiZsbihIZVswXSksImJhciI9PXZlJiYoSGU9X2UubWF0Y2goLzxjOmJhckRpcihbXlwvPl0qKVwvPi9tKSkmJihTZS5iYXJEaXI9ImJhciI9PWxuKEhlWzBdKS52YWw/ImgiOiJ2'@;
put 'IiksKEhlPUdlLm1hdGNoKC88Yzpncm91cGluZyhbXlwvPl0qKVwvPi9tKSkmJihTZS5ncm91cGluZz1sbihIZVswXSkudmFsfHwic3RhbmRhcmQiKSwoX2UubWF0Y2gocTMpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihkdCl7dmFyIEN0PVtdLGN0PXt9LGJ0PVtdO2lmKGR0Lm1hdGNoKC88Yzp0'@;
put 'eD4vKSl7dmFyIEZ0PUE2KChkdC5tYXRjaCgvPGM6dHg+KFtcc1xTXSo/KTxcL2M6dHg+Lyl8fFtdKVsxXXx8IiIpfHxbXTtGdFswXSYmRnRbMF1bMF0mJihjdC5uYW1lPUZ0WzBdWzBdKSxGdFsyXSYmKGN0Lm5hbWVyZWY9RnRbMl0pfVsieFZhbCIsInlWYWwiLCJjYXQiLCJ2YWwiLCJidWJi'@;
put 'bGVTaXplIl0uZm9yRWFjaChmdW5jdGlvbihFdCl7dmFyIFp0LFR0PWR0Lm1hdGNoKG5ldyBSZWdFeHAoIjxjOiIrRXQrIj5bXFxzXFxTXSo/PFxcL2M6IitFdCsiPiIsImdtIikpO1R0JiYoKFR0WzBdLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9u'@;
put 'KHBuKXtadD1wbi5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLChUdFswXS5tYXRjaCgvPGM6KD86XHcqKUNhY2hlPltcc1xTXSo/PFwvYzooPzpcdyopQ2FjaGU+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocG4pe3ZhciBLbj1BNihwbik7cGUucy5yPXBlLnMuYz0wLHBlLmUuYz1MLHJlPU5z'@;
put 'KEwpLEtuWzBdLmZvckVhY2goZnVuY3Rpb24odW4scW4pe1BbcmUrSHMocW4pXT17dDoibnVtYmVyIj09dHlwZW9mIHVuPyJuIjoicyIsdjp1bix6OktuWzFdfSxRPXFufSkscGUuZS5yPFEmJihwZS5lLnI9USksKytMLFNlLncrKyxDdC5wdXNoKEV0KSwoS25bMl18fFp0KSYmYnQucHVzaChL'@;
put 'blsyXXx8WnQpLCJ2YWwiPT1FdCYmKGN0Lno9S25bMV18fCJHZW5lcmFsIil9KSl9KSwoSGU9X2UubWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihjdC5zbW9vdGg9bnVsbD09bG4oSGVbMF0pLnZhbHx8eXIobG4oSGVbMF0pLnZhbCkpLGN0LmNvbHM9Q3QsY3QucmFuZ2VzPWJ0'@;
put 'LFNlLnNlci5wdXNoKGN0KX0pLCJkb3VnaG51dCI9PXZlJiYoSGU9X2UubWF0Y2goLzxjOmhvbGVTaXplKFteXC8+XSopXC8+L20pKSYmKFNlLmhvbGU9KGxuKEhlWzBdKS52YWx8fDEwKS8xMDApLFBbIiFwbG90Il0ucHVzaChTZSl9KSxMPjAmJihQWyIhcmVmIl09T28ocGUpKX19KChHZVsx'@;
put 'XS5tYXRjaChCYyl8fFtdKVsxXSxTZSksbnVsbCE9KG50PUdlWzFdLm1hdGNoKGdmKSkmJmZ1bmN0aW9uIFRMKHksUCl7dmFyIEw7UFsiIWxlZ2VuZCJdPXtwb3M6InIifSwoTD15Lm1hdGNoKC88YzpsZWdlbmRQb3MoW15cLz5dKilcLz4vbSkpJiYoUFsiIWxlZ2VuZCJdLnBvcz1sbihMWzBd'@;
put 'KS52YWx8fCJyIil9KG50WzBdLFNlKSksU2V9dmFyIFRyPS88YzooKD86YXJlYXxsaW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/KUNoYXJ0W14+XSo+KFtcc1xTXSo/KTxcL2M6KD86YXJlYXxsaW5lfHN0b2NrfHJh'@;
put 'ZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/Q2hhcnQ+L2dtLHEzPS88YzpzZXI+KFtcc1xTXSo/KTxcL2M6c2VyPi9nbTtIaS5DUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVs'@;
put 'YXRpb25zaGlwcy9jaGFydHNoZWV0Ijt2YXIgWDM9U3IoImNoYXJ0c2hlZXQiLG51bGwse3htbG5zOmlzLm1haW5bMF0sInhtbG5zOnIiOmlzLnJ9KTtmdW5jdGlvbiBRMyh5LFAsTCxRKXt2YXIgcmU9W0JuLFgzXTtyZXR1cm4gcmUucHVzaCgiPHNoZWV0UHIvPiIpLHJlLnB1c2goJzxzaGVl'@;
put 'dFZpZXdzPjxzaGVldFZpZXcgem9vbVNjYWxlPSIxMDAiIHdvcmtib29rVmlld0lkPSIwIiB6b29tVG9GaXQ9IjEiLz48L3NoZWV0Vmlld3M+JykscmVbcmUubGVuZ3RoXT1TcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQxIn0pLHpvKFEsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyh5'@;
put 'KzEpKyIueG1sIixIaS5EUkFXKSxyZS5sZW5ndGg+MiYmKHJlW3JlLmxlbmd0aF09IjwvY2hhcnRzaGVldD4iLHJlWzFdPXJlWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxyZS5qb2luKCIiKX1mdW5jdGlvbiBucCgpe3ZhciB5PXljKCk7cmV0dXJuIHVpKHksIkJydEJlZ2luU2hlZXQiKSx1aSh5'@;
put 'LCJCcnRFbmRTaGVldCIpLHkuZW5kKCl9dmFyIEsyPVtbImFsbG93UmVmcmVzaFF1ZXJ5IiwhMSwiYm9vbCJdLFsiYXV0b0NvbXByZXNzUGljdHVyZXMiLCEwLCJib29sIl0sWyJiYWNrdXBGaWxlIiwhMSwiYm9vbCJdLFsiY2hlY2tDb21wYXRpYmlsaXR5IiwhMSwiYm9vbCJdLFsiQ29kZU5h'@;
put 'bWUiLCIiXSxbImRhdGUxOTA0IiwhMSwiYm9vbCJdLFsiZGVmYXVsdFRoZW1lVmVyc2lvbiIsMCwiaW50Il0sWyJmaWx0ZXJQcml2YWN5IiwhMSwiYm9vbCJdLFsiaGlkZVBpdm90RmllbGRMaXN0IiwhMSwiYm9vbCJdLFsicHJvbXB0ZWRTb2x1dGlvbnMiLCExLCJib29sIl0sWyJwdWJsaXNo'@;
put 'SXRlbXMiLCExLCJib29sIl0sWyJyZWZyZXNoQWxsQ29ubmVjdGlvbnMiLCExLCJib29sIl0sWyJzYXZlRXh0ZXJuYWxMaW5rVmFsdWVzIiwhMCwiYm9vbCJdLFsic2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXMiLCEwLCJib29sIl0sWyJzaG93SW5rQW5ub3RhdGlvbiIsITAsImJvb2wiXSxb'@;
put 'InNob3dPYmplY3RzIiwiYWxsIl0sWyJzaG93UGl2b3RDaGFydEZpbHRlciIsITEsImJvb2wiXSxbInVwZGF0ZUxpbmtzIiwidXNlclNldCJdXSx0TT1bWyJhY3RpdmVUYWIiLDAsImludCJdLFsiYXV0b0ZpbHRlckRhdGVHcm91cGluZyIsITAsImJvb2wiXSxbImZpcnN0U2hlZXQiLDAsImlu'@;
put 'dCJdLFsibWluaW1pemVkIiwhMSwiYm9vbCJdLFsic2hvd0hvcml6b250YWxTY3JvbGwiLCEwLCJib29sIl0sWyJzaG93U2hlZXRUYWJzIiwhMCwiYm9vbCJdLFsic2hvd1ZlcnRpY2FsU2Nyb2xsIiwhMCwiYm9vbCJdLFsidGFiUmF0aW8iLDYwMCwiaW50Il0sWyJ2aXNpYmlsaXR5Iiwidmlz'@;
put 'aWJsZSJdXSxuTT1bXSxyTT1bWyJjYWxjQ29tcGxldGVkIiwidHJ1ZSJdLFsiY2FsY01vZGUiLCJhdXRvIl0sWyJjYWxjT25TYXZlIiwidHJ1ZSJdLFsiY29uY3VycmVudENhbGMiLCJ0cnVlIl0sWyJmdWxsQ2FsY09uTG9hZCIsImZhbHNlIl0sWyJmdWxsUHJlY2lzaW9uIiwidHJ1ZSJdLFsi'@;
put 'aXRlcmF0ZSIsImZhbHNlIl0sWyJpdGVyYXRlQ291bnQiLCIxMDAiXSxbIml0ZXJhdGVEZWx0YSIsIjAuMDAxIl0sWyJyZWZNb2RlIiwiQTEiXV07ZnVuY3Rpb24ganYoeSxQKXtmb3IodmFyIEw9MDtMIT15Lmxlbmd0aDsrK0wpZm9yKHZhciBRPXlbTF0scmU9MDtyZSE9UC5sZW5ndGg7Kyty'@;
put 'ZSl7dmFyIHBlPVBbcmVdO2lmKG51bGw9PVFbcGVbMF1dKVFbcGVbMF1dPXBlWzFdO2Vsc2Ugc3dpdGNoKHBlWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgUVtwZVswXV0mJihRW3BlWzBdXT15cihRW3BlWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIFFb'@;
put 'cGVbMF1dJiYoUVtwZVswXV09cGFyc2VJbnQoUVtwZVswXV0sMTApKX19fWZ1bmN0aW9uIHp2KHksUCl7Zm9yKHZhciBMPTA7TCE9UC5sZW5ndGg7KytMKXt2YXIgUT1QW0xdO2lmKG51bGw9PXlbUVswXV0peVtRWzBdXT1RWzFdO2Vsc2Ugc3dpdGNoKFFbMl0pe2Nhc2UiYm9vbCI6InN0cmlu'@;
put 'ZyI9PXR5cGVvZiB5W1FbMF1dJiYoeVtRWzBdXT15cih5W1FbMF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJzdHJpbmciPT10eXBlb2YgeVtRWzBdXSYmKHlbUVswXV09cGFyc2VJbnQoeVtRWzBdXSwxMCkpfX19ZnVuY3Rpb24gVXYoeSl7enYoeS5XQlByb3BzLEsyKSx6dih5LkNhbGNQcixyTSks'@;
put 'anYoeS5XQlZpZXcsdE0pLGp2KHkuU2hlZXRzLG5NKSxaMy5kYXRlMTkwND15cih5LldCUHJvcHMuZGF0ZTE5MDQpfXZhciBvTT0iXVsqPy9cXCIuc3BsaXQoIiIpO2Z1bmN0aW9uIFp2KHksUCl7aWYoeS5sZW5ndGg+MzEpe2lmKFApcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJTaGVldCBu'@;
put 'YW1lcyBjYW5ub3QgZXhjZWVkIDMxIGNoYXJzIil9dmFyIEw9ITA7cmV0dXJuIG9NLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoLTEhPXkuaW5kZXhPZihRKSl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lIGNhbm5vdCBjb250YWluIDogXFwgLyA/ICogWyBdIik7TD0hMX19KSxM'@;
put 'fXZhciBzWT0vPFx3Kzp3b3JrYm9vay8sbFk9U3IoIndvcmtib29rIixudWxsLHt4bWxuczppcy5tYWluWzBdLCJ4bWxuczpyIjppcy5yfSk7ZnVuY3Rpb24gUkwoeSxQKXt2YXIgTD1QfHx7fSxRPVtCbl07UVtRLmxlbmd0aF09bFk7dmFyIHJlPXkuV29ya2Jvb2smJih5Lldvcmtib29rLk5h'@;
put 'bWVzfHxbXSkubGVuZ3RoPjA7eS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5Nb2RpZnkmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBJTCh5KXt2YXIgUD17fTtyZXR1cm4geS53YXJuJiYoUC5yZWFkT25seVJlY29tbWVuZGVkPTEpLFAudXNlck5hbWU9eS51c2VyfHwiU2hlZXQgSlMiLHkuZW5jcnlw'@;
put 'dGlvbiYmKHkuZW5jcnlwdGlvbi5hbGdvJiYoUC5hbGdvcml0aG1OYW1lPXkuZW5jcnlwdGlvbi5hbGdvKSx5LmVuY3J5cHRpb24uaGFzaCYmKFAuaGFzaFZhbHVlPXkuZW5jcnlwdGlvbi5oYXNoKSx5LmVuY3J5cHRpb24uc2FsdCYmKFAuc2FsdFZhbHVlPXkuZW5jcnlwdGlvbi5zYWx0KSx5'@;
put 'LmVuY3J5cHRpb24uc3BpbiYmKFAuc3BpbkNvdW50PXkuZW5jcnlwdGlvbi5zcGluKSksU3IoImZpbGVTaGFyaW5nIixudWxsLFApfSh5Lldvcmtib29rLk1vZGlmeSkpO3ZhciBwZT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O3kuV29ya2Jvb2smJnkuV29ya2Jvb2suV0JQcm9wcyYmKEsy'@;
put 'LmZvckVhY2goZnVuY3Rpb24oSGUpe251bGwhPXkuV29ya2Jvb2suV0JQcm9wc1tIZVswXV0mJnkuV29ya2Jvb2suV0JQcm9wc1tIZVswXV0hPUhlWzFdJiYocGVbSGVbMF1dPXkuV29ya2Jvb2suV0JQcm9wc1tIZVswXV0pfSkseS5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lJiYocGUuY29k'@;
put 'ZU5hbWU9eS5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRlbGV0ZSBwZS5Db2RlTmFtZSkpLFFbUS5sZW5ndGhdPVNyKCJ3b3JrYm9va1ByIixudWxsLHBlKSx5Lldvcmtib29rJiZ5Lldvcmtib29rLlByb3RlY3Rpb24mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBMTCh5KXt2YXIgUD17fTty'@;
put 'ZXR1cm4geS5sb2NrU3RydWN0dXJlJiYoUC5sb2NrU3RydWN0dXJlPTEpLHkubG9ja1dpbmRvd3MmJihQLmxvY2tXaW5kb3dzPTEpLHkuZW5jcnlwdGlvbiYmKHkuZW5jcnlwdGlvbi5hbGdvJiYoUC53b3JrYm9va0FsZ29yaXRobU5hbWU9eS5lbmNyeXB0aW9uLmFsZ28pLHkuZW5jcnlwdGlv'@;
put 'bi5oYXNoJiYoUC53b3JrYm9va0hhc2hWYWx1ZT15LmVuY3J5cHRpb24uaGFzaCkseS5lbmNyeXB0aW9uLnNhbHQmJihQLndvcmtib29rU2FsdFZhbHVlPXkuZW5jcnlwdGlvbi5zYWx0KSx5LmVuY3J5cHRpb24uc3BpbiYmKFAud29ya2Jvb2tTcGluQ291bnQ9eS5lbmNyeXB0aW9uLnNwaW4p'@;
put 'KSxTcigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLFApfSh5Lldvcmtib29rLlByb3RlY3Rpb24pKTt2YXIgX2U9eS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5TaGVldHN8fFtdLHZlPTA7aWYoX2UmJl9lWzBdJiZfZVswXS5IaWRkZW4pe2ZvcihRW1EubGVuZ3RoXT0iPGJvb2tWaWV3cz4iLHZl'@;
put 'PTA7dmUhPXkuU2hlZXROYW1lcy5sZW5ndGgmJl9lW3ZlXSYmX2VbdmVdLkhpZGRlbjsrK3ZlKTt2ZT09eS5TaGVldE5hbWVzLmxlbmd0aCYmKHZlPTApLFFbUS5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrdmUrJyIgYWN0aXZlVGFiPSInK3ZlKyciLz4nLFFbUS5sZW5n'@;
put 'dGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihRW1EubGVuZ3RoXT0iPHNoZWV0cz4iLHZlPTA7dmUhPXkuU2hlZXROYW1lcy5sZW5ndGg7Kyt2ZSl7dmFyIFNlPXtuYW1lOkhyKHkuU2hlZXROYW1lc1t2ZV0uc2xpY2UoMCwzMSkpfTtpZihTZS5zaGVldElkPSIiKyh2ZSsxKSxTZVsicjppZCJdPSJy'@;
put 'SWQiKyh2ZSsxKSxfZVt2ZV0pc3dpdGNoKF9lW3ZlXS5IaWRkZW4pe2Nhc2UgMTpTZS5zdGF0ZT0iaGlkZGVuIjticmVhaztjYXNlIDI6U2Uuc3RhdGU9InZlcnlIaWRkZW4ifVFbUS5sZW5ndGhdPVNyKCJzaGVldCIsbnVsbCxTZSl9cmV0dXJuIFFbUS5sZW5ndGhdPSI8L3NoZWV0cz4iLHku'@;
put 'RXh0ZXJuYWxXQiYmeS5FeHRlcm5hbFdCLmxlbmd0aCYmKFFbUS5sZW5ndGhdPSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiIsKHkuRXh0ZXJuYWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oSGUsQmUpe3ZhciBHZT16byhMLndicmVscywtMSwiZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhC'@;
put 'ZSsxKSsiLnhtbCIsSGkuWExJTkspO1FbUS5sZW5ndGhdPSc8ZXh0ZXJuYWxSZWZlcmVuY2UgcjppZD0icklkJytHZSsnIi8+J30pLFFbUS5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxyZSYmKFFbUS5sZW5ndGhdPSI8ZGVmaW5lZE5hbWVzPiIseS5Xb3JrYm9vayYmeS5Xb3Jr'@;
put 'Ym9vay5OYW1lcyYmeS5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKEhlKXt2YXIgQmU9e25hbWU6SGUuTmFtZX07SGUuQ29tbWVudCYmKEJlLmNvbW1lbnQ9SGUuQ29tbWVudCksbnVsbCE9SGUuU2hlZXQmJihCZS5sb2NhbFNoZWV0SWQ9IiIrSGUuU2hlZXQpLEhlLkhpZGRlbiYm'@;
put 'KEJlLmhpZGRlbj0iMSIpLEhlLlJlZiYmKFFbUS5sZW5ndGhdPVNyKCJkZWZpbmVkTmFtZSIsSHIoSGUuUmVmKSxCZSkpfSksUVtRLmxlbmd0aF09IjwvZGVmaW5lZE5hbWVzPiIpLEwmJkwucGl2b3RzJiZMLnBpdm90cy5sZW5ndGg+MCYmKFEucHVzaCgiPHBpdm90Q2FjaGVzPiIpLEwucGl2'@;
put 'b3RzLmZvckVhY2goZnVuY3Rpb24oSGUsQmUpe1EucHVzaCgnPHBpdm90Q2FjaGUgY2FjaGVJZD0iJysoQmUrMSkrJyIgcjppZD0icklkJytIZVsyXSsnIi8+Jyl9KSxRLnB1c2goIjwvcGl2b3RDYWNoZXM+IikpLFEubGVuZ3RoPjImJihRW1EubGVuZ3RoXT0iPC93b3JrYm9vaz4iLFFbMV09'@;
put 'UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIiKX1mdW5jdGlvbiBPTCh5LFApe3JldHVybiBQfHwoUD1mcigxMjcpKSxQLndyaXRlX3NoaWZ0KDQseS5IaWRkZW4pLFAud3JpdGVfc2hpZnQoNCx5LmlUYWJJRCksT2MoeS5zdHJSZWxJRCxQKSxuYyh5Lm5hbWUuc2xpY2UoMCwzMSks'@;
put 'UCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9ZnVuY3Rpb24gV3YoeSxQKXt2YXIgTD17fTtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLEwuQXJjaElEPXkucmVhZF9zaGlmdCg0KSx5LmwrPVAtOCxMfWZ1bmN0aW9uIEhMKHksUCl7dmFyIEw9eWMoKTtyZXR1cm4gdWkoTCwiQnJ0QmVn'@;
put 'aW5Cb29rIiksdWkoTCwiQnJ0RmlsZVZlcnNpb24iLGZ1bmN0aW9uIHNNKHksUCl7UHx8KFA9ZnIoMTI3KSk7Zm9yKHZhciBMPTA7NCE9TDsrK0wpUC53cml0ZV9zaGlmdCg0LDApO3JldHVybiBuYygiU2hlZXRKUyIsUCksbmMoTS52ZXJzaW9uLFApLG5jKE0udmVyc2lvbixQKSxuYygiNzI2'@;
put 'MiIsUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KCkpLHVpKEwsIkJydFdiUHJvcCIsZnVuY3Rpb24gRkwoeSxQKXtQfHwoUD1mcig3MikpO3ZhciBMPTA7cmV0dXJuIHkmJnkuZmlsdGVyUHJpdmFjeSYmKEx8PTgpLFAud3JpdGVfc2hpZnQoNCxMKSxQLndyaXRlX3NoaWZ0KDQs'@;
put 'MCksc20oeSYmeS5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIsUCksUC5zbGljZSgwLFAubCl9KHkuV29ya2Jvb2smJnkuV29ya2Jvb2suV0JQcm9wc3x8bnVsbCkpLGZ1bmN0aW9uIGFNKHksUCl7aWYoUC5Xb3JrYm9vayYmUC5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgTD1QLldvcmtib29r'@;
put 'LlNoZWV0cyxRPTAscmU9LTEscGU9LTE7UTxMLmxlbmd0aDsrK1EpIUxbUV18fCFMW1FdLkhpZGRlbiYmLTE9PXJlP3JlPVE6MT09TFtRXS5IaWRkZW4mJi0xPT1wZSYmKHBlPVEpO3BlPnJlfHwodWkoeSwiQnJ0QmVnaW5Cb29rVmlld3MiKSx1aSh5LCJCcnRCb29rVmlldyIsZnVuY3Rpb24g'@;
put 'ZzUoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoMjkpKSxQLndyaXRlX3NoaWZ0KC00LDApLFAud3JpdGVfc2hpZnQoLTQsNDYwKSxQLndyaXRlX3NoaWZ0KDQsMjg4MDApLFAud3JpdGVfc2hpZnQoNCwxNzYwMCksUC53cml0ZV9zaGlmdCg0LDUwMCksUC53cml0ZV9zaGlmdCg0LHkpLFAud3JpdGVf'@;
put 'c2hpZnQoNCx5KSxQLndyaXRlX3NoaWZ0KDEsMTIwKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH0ocmUpKSx1aSh5LCJCcnRFbmRCb29rVmlld3MiKSl9fShMLHkpLGZ1bmN0aW9uIEQ2KHksUCl7dWkoeSwiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIEw9MDtMIT1QLlNoZWV0'@;
put 'TmFtZXMubGVuZ3RoOysrTCl1aSh5LCJCcnRCdW5kbGVTaCIsT0woe0hpZGRlbjpQLldvcmtib29rJiZQLldvcmtib29rLlNoZWV0cyYmUC5Xb3JrYm9vay5TaGVldHNbTF0mJlAuV29ya2Jvb2suU2hlZXRzW0xdLkhpZGRlbnx8MCxpVGFiSUQ6TCsxLHN0clJlbElEOiJySWQiKyhMKzEpLG5h'@;
put 'bWU6UC5TaGVldE5hbWVzW0xdfSkpO3VpKHksIkJydEVuZEJ1bmRsZVNocyIpfShMLHkpLHVpKEwsIkJydEVuZEJvb2siKSxMLmVuZCgpfWZ1bmN0aW9uIFpMKHksUCxMLFEscmUpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9BTDpXSSkoeSxMLFEscmUpfWZ1bmN0aW9uIGxNKHksUCxM'@;
put 'LFEscmUpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9ucDpRMykoeSxMLFEscmUpfWZ1bmN0aW9uIFdMKHksUCxMKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/eDM6TG0pKHksTCl9ZnVuY3Rpb24gUWUoeSxQLEwpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9lSTpWQyko'@;
put 'eSxMKX12YXIgS3Y9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZyxYdj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIG11KHksUCl7dmFyIEw9eS5zcGxpdCgvXHMrLyksUT1bXTtpZihQ'@;
put 'fHwoUVswXT1MWzBdKSwxPT09TC5sZW5ndGgpcmV0dXJuIFE7dmFyIHBlLF9lLFNlLHJlPXkubWF0Y2goS3YpO2lmKHJlKWZvcihTZT0wO1NlIT1yZS5sZW5ndGg7KytTZSktMT09PShfZT0ocGU9cmVbU2VdLm1hdGNoKFh2KSlbMV0uaW5kZXhPZigiOiIpKT9RW3BlWzFdXT1wZVsyXS5zbGlj'@;
put 'ZSgxLHBlWzJdLmxlbmd0aC0xKTpRWyJ4bWxuczoiPT09cGVbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK3BlWzFdLnNsaWNlKDYpOnBlWzFdLnNsaWNlKF9lKzEpXT1wZVsyXS5zbGljZSgxLHBlWzJdLmxlbmd0aC0xKTtyZXR1cm4gUX1mdW5jdGlvbiBjTSh5KXt2YXIgTD17fTtpZigxPT09eS5z'@;
put 'cGxpdCgvXHMrLykubGVuZ3RoKXJldHVybiBMO3ZhciByZSxwZSx2ZSxRPXkubWF0Y2goS3YpO2lmKFEpZm9yKHZlPTA7dmUhPVEubGVuZ3RoOysrdmUpLTE9PT0ocGU9KHJlPVFbdmVdLm1hdGNoKFh2KSlbMV0uaW5kZXhPZigiOiIpKT9MW3JlWzFdXT1yZVsyXS5zbGljZSgxLHJlWzJdLmxl'@;
put 'bmd0aC0xKTpMWyJ4bWxuczoiPT09cmVbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK3JlWzFdLnNsaWNlKDYpOnJlWzFdLnNsaWNlKHBlKzEpXT1yZVsyXS5zbGljZSgxLHJlWzJdLmxlbmd0aC0xKTtyZXR1cm4gTH1mdW5jdGlvbiBHTCh5KXt2YXIgUD17fTtpZih5LkRlZmF1bHRSb3dIZWlnaHQp'@;
put 'e3ZhciBMPXtocHg6NCpwYXJzZUludCh5LkRlZmF1bHRSb3dIZWlnaHQpLzN9O0kzKEwpLFAucm93PUx9aWYoeS5EZWZhdWx0Q29sV2lkdGgpe3ZhciBRPXt3cHg6NCpwYXJzZUludCh5LkRlZmF1bHRDb2xXaWR0aCkvM307cHUoUSksUC5jb2w9UX1yZXR1cm4gUH1mdW5jdGlvbiBSZSh5LFAs'@;
put 'TCxRKXt2YXIgcmU9UTtzd2l0Y2goKExbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIiLCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6cmU9eXIoUSk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOnJlPXBhcnNlSW50KFEsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UiZmxvYXQiOnJlPXBh'@;
put 'cnNlRmxvYXQoUSk7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjpyZT1IdChRKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHBy'@;
put 'b3A6IitMWzBdKX15W3hyKFApXT1yZX12YXIgdU09ezA6Ik5vbmUiLDE6IlNpbmdsZSIsMjoiRG91YmxlIiwzMzoiU2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSxtZT1BZSh1TSk7ZnVuY3Rpb24geWUoeSxQLEwsUSl7aWYoUS5jZWxsU3R5bGVzKXtpZihMPUwucmVw'@;
put 'bGFjZSgvXHMrL2csIiAiKSxQLkludGVyaW9yKXt2YXIgcmU9UC5JbnRlcmlvcjtyZS5QYXR0ZXJuJiYocmUucGF0dGVyblR5cGU9SDRbcmUuUGF0dGVybl18fHJlLlBhdHRlcm4pLHJlLkNvbG9yJiZyZS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYocmUuZmdDb2xvcj17cmdiOnJl'@;
put 'LkNvbG9yLnNsaWNlKDEpfSl9IWZ1bmN0aW9uIGRNKHkpe3kuQm9yZGVycyYmKHkuQm9yZGVycy5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBMPVAuUG9zaXRpb24udG9Mb3dlckNhc2UoKTt5W0xdPXtzdHlsZTpxdChQLkxpbmVTdHlsZSwrUC5XZWlnaHQpLGNvbG9yOntyZ2I6KFAuQ29sb3J8'@;
put 'fCIjMDAwMDAwIikuc2xpY2UoMSl9fX0pLGRlbGV0ZSB5LkJvcmRlcnMpfShQKTt2YXIgX2UscGU9TC5tYXRjaCgvPCg/Olx3KzopP0ZvbnRcc1tePl0qPi8pO3BlJiYoeXIoKF9lPWxuKHBlWzBdKSkuQm9sZCkmJihQLkJvbGQ9ITApLHlyKF9lLkl0YWxpYykmJihQLkl0YWxpYz0hMCkseXIo'@;
put 'X2UuU3RyaWtlVGhyb3VnaCkmJihQLlN0cmlrZT0hMCksX2UuU2l6ZSYmKFAuU2l6ZT0rX2UuU2l6ZSksUC5Gb250TmFtZT1fZS5Gb250TmFtZT9fZS5Gb250TmFtZToiQXJpYWwiLF9lLlVuZGVybGluZSYmKFAuVW5kZXJsaW5lPW1lW19lLlVuZGVybGluZV0pLF9lLkNvbG9yJiYoUC5SR0I9'@;
put 'X2UuQ29sb3Iuc2xpY2UoLTYpKSksUC5BbGlnbm1lbnQmJihQLmFsaWdubWVudD17fSxQLkFsaWdubWVudC5WZXJ0aWNhbCYmKFAuYWxpZ25tZW50LnZlcnRpY2FsPVAuQWxpZ25tZW50LlZlcnRpY2FsLnRvTG93ZXJDYXNlKCkpLFAuQWxpZ25tZW50Lkhvcml6b250YWwmJihQLmFsaWdubWVu'@;
put 'dC5ob3Jpem9udGFsPVAuQWxpZ25tZW50Lkhvcml6b250YWwudG9Mb3dlckNhc2UoKSkseXIoUC5BbGlnbm1lbnQuV3JhcFRleHR8fCIwIik/UC5hbGlnbm1lbnQud3JhcFRleHQ9ITA6bnVsbD09UC5BbGlnbm1lbnQuV3JhcFRleHQmJmRlbGV0ZSBQLmFsaWdubWVudC53cmFwVGV4dCx5cihQ'@;
put 'LkFsaWdubWVudC5TaHJpbmtUb0ZpdHx8IjAiKSYmKFAuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSwrUC5BbGlnbm1lbnQuSW5kZW50JiYoUC5hbGlnbm1lbnQuaW5kZW50PStQLkFsaWdubWVudC5JbmRlbnR8fDApLCtQLkFsaWdubWVudC5Sb3RhdGUmJihQLmFsaWdubWVudC50ZXh0Um90'@;
put 'YXRpb249K1AuQWxpZ25tZW50LlJvdGF0ZXx8MCkpfXlbUC5JRF09UCwoIkRlZmF1bHQiPT1QLklEfHwiTm9ybWFsIj09UC5OYW1lKSYmWjEoUCl9ZnVuY3Rpb24gcXQoeSxQKXtzd2l0Y2goeSl7Y2FzZSJOb25lIjpyZXR1cm4ibm9uZSI7Y2FzZSJEYXNoIjpyZXR1cm4iZGFzaGVkIjtjYXNl'@;
put 'IkRvdCI6cmV0dXJuImRvdHRlZCI7Y2FzZSJEYXNoRG90IjpyZXR1cm4iZGFzaERvdCI7Y2FzZSJEYXNoRG90RG90IjpyZXR1cm4iZGFzaERvdERvdCI7Y2FzZSJTbGFudERhc2hEb3QiOnJldHVybiJzbGFudERhc2hEb3QiO2Nhc2UiRG91YmxlIjpyZXR1cm4iZG91YmxlIjtjYXNlIkNvbnRp'@;
put 'bnVvdXMiOnN3aXRjaCgrUHx8MCl7Y2FzZSAwOnJldHVybiJoYWlyIjtjYXNlIDE6cmV0dXJuInRoaW4iO2Nhc2UgMjpyZXR1cm4ibWVkaXVtIjtjYXNlIDM6cmV0dXJuInRoaWNrIn1yZXR1cm4idGhpbiJ9cmV0dXJuIHl9ZnVuY3Rpb24gaE0oeSxQLEwsUSxyZSxwZSxfZSx2ZSxTZSxIZSl7'@;
put 'dmFyIEJlPSJHZW5lcmFsIixHZT1RLlN0eWxlSUQsbnQ9e307SGU9SGV8fHt9O3ZhciBkdD1bXSxDdD0wO2Zvcih2b2lkIDA9PT1HZSYmdmUmJihHZT12ZS5TdHlsZUlEKSx2b2lkIDA9PT1HZSYmX2UmJihHZT1fZS5TdHlsZUlEKTt2b2lkIDAhPT1wZVtHZV07KXt2YXIgY3Q9cGVbR2VdO2lm'@;
put 'KCJHZW5lcmFsIj09QmUmJmN0Lm5mJiYoQmU9cGVbR2VdLm5mKSxjdC5JbnRlcmlvciYmZHQucHVzaChwZVtHZV0uSW50ZXJpb3IpLGN0LmFsaWdubWVudCYmKG50LmFsaWdubWVudHx8KG50LmFsaWdubWVudD1vbihjdC5hbGlnbm1lbnQpKSksbnVsbD09bnQuYm9sZCYmY3QuQm9sZCYmKG50'@;
put 'LmJvbGQ9ITApLG51bGw9PW50Lml0YWxpYyYmY3QuSXRhbGljJiYobnQuaXRhbGljPSEwKSxudWxsPT1udC5zdHJpa2UmJmN0LlN0cmlrZSYmKG50LnN0cmlrZT0hMCksbnVsbD09bnQuc3omJmN0LlNpemUmJihudC5zej1jdC5TaXplKSxudWxsPT1udC5uYW1lJiZjdC5Gb250TmFtZSYmKG50'@;
put 'Lm5hbWU9Y3QuRm9udE5hbWUpLG51bGw9PW50LnVuZGVybGluZSYmY3QuVW5kZXJsaW5lJiYobnQudW5kZXJsaW5lPWN0LlVuZGVybGluZSksbnVsbD09bnQuY29sb3ImJmN0LlJHQiYmKG50LmNvbG9yPXtyZ2I6Y3QuUkdCfSksWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXS5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKFR0KXtudWxsPT1udFtUdF0mJmN0W1R0XSYmKG50W1R0XT1vbihjdFtUdF0pKX0pLCJEZWZhdWx0Ij09R2UpYnJlYWs7R2U9Y3QuUGFyZW50fHwiRGVmYXVsdCJ9bnQubmFtZXx8KG50Lm5hbWU9cGUuRGVmYXVsdCYmcGUuRGVmYXVsdC5Gb250TmFtZXx8IkFyaWFsIiks'@;
put 'bnQuc3p8fChudC5zej1wZS5EZWZhdWx0JiZwZS5EZWZhdWx0LlNpemV8fDEyKTt2YXIgYnQ9IiI7aWYoeXx8US5Gb3JtdWxhfHwiU3RyaW5nIj09TC5UeXBlfHwiTnVtYmVyIj09TC5UeXBlKXN3aXRjaChMLlR5cGUpe2Nhc2UiQm9vbGVhbiI6US50PSJiIixRLnY9eXIoeSk7YnJlYWs7Y2Fz'@;
put 'ZSJTdHJpbmciOlEudD0icyIsYnQ9R2koeHIoeSkpLFEudj15LmluZGV4T2YoIjwiKT4tMT94cihQfHx5KS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LHkuaW5kZXhPZigiPCIpPi0xJiYoUS5SPUZ1Lmh0bWxfdG9fcnMoeHIoeSkpKTticmVhaztjYXNlIkRhdGVUaW1lIjoiWiIhPXkuc2xp'@;
put 'Y2UoLTEpJiYoeSs9IloiKSxRLnY9KEh0KHkpLW5ldyBEYXRlKERhdGUuVVRDKDE4OTksMTEsMzApKSkvODY0ZTUsUS52IT1RLnY/US52PXhyKHkpOlEudjw2MCYmKFEudj1RLnYtMSksKCFCZXx8IkdlbmVyYWwiPT1CZSkmJihCZT0ieXl5eS1tbS1kZCIpO2Nhc2UiTnVtYmVyIjp2b2lkIDA9'@;
put 'PT1RLnYmJihRLnY9K3kpLFEudHx8KFEudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3IiOlEudD0iZSIsUS52PUthW3ldLCExIT09SGUuY2VsbFRleHQmJihRLnc9eSk7YnJlYWs7ZGVmYXVsdDoiIj09eSYmIiI9PVA/US50PSJ6IjooUS50PSJzIixidD1HaSh4cih5KSksUS52PXkuaW5kZXhPZigi'@;
put 'PCIpPi0xP3hyKFB8fHkpLnJlcGxhY2UoLzxbXl0qPz4vZywiIik6YnQseS5pbmRleE9mKCI8Iik+LTEmJihRLlI9RnUuaHRtbF90b19ycyh4cih5KSkpKX1lbHNlIFEudD0ieiIsZGVsZXRlIFEudjtpZihmdW5jdGlvbiBKdih5LFAsTCl7aWYoInoiIT09eS50KXtpZighTHx8ITEhPT1MLmNl'@;
put 'bGxUZXh0KXRyeXt5Lnc9ImUiPT09eS50P3kud3x8UW9beS52XToiR2VuZXJhbCI9PT1QPyJuIj09PXkudD8oMHx5LnYpPT09eS52P3cuX2dlbmVyYWxfaW50KHkudik6dy5fZ2VuZXJhbF9udW0oeS52KTp3Ll9nZW5lcmFsKHkudik6ZnVuY3Rpb24gJGkoeSxQKXt2YXIgTD1uZVt5XXx8eHIo'@;
put 'eSk7cmV0dXJuIkdlbmVyYWwiPT09TD93Ll9nZW5lcmFsKFApOncuZm9ybWF0KEwsUCl9KFB8fCJHZW5lcmFsIix5LnYpfWNhdGNoKHBlKXtpZihMLldURil0aHJvdyBwZX10cnl7dmFyIFE9bmVbUF18fFB8fCJHZW5lcmFsIjtpZihMLmNlbGxORiYmKHkuej1RKSxMLmNlbGxEYXRlcyYmIm4i'@;
put 'PT15LnQmJncuaXNfZGF0ZShRKSl7dmFyIHJlPXcucGFyc2VfZGF0ZV9jb2RlKHkudik7cmUmJih5LnQ9ImQiLHkudj1uZXcgRGF0ZShyZS55LHJlLm0tMSxyZS5kLHJlLkgscmUuTSxyZS5TLHJlLnUpKX19Y2F0Y2gocGUpe2lmKEwuV1RGKXRocm93IHBlfX19KFEsQmUsSGUpLCExIT09SGUu'@;
put 'Y2VsbEZvcm11bGEpaWYoUS5Gb3JtdWxhKXt2YXIgRnQ9eHIoUS5Gb3JtdWxhKTs2MT09RnQuY2hhckNvZGVBdCgwKSYmKEZ0PUZ0LnNsaWNlKDEpKSxRLmY9YWYoRnQscmUpLGRlbGV0ZSBRLkZvcm11bGEsIlJDIj09US5BcnJheVJhbmdlP1EuRj1hZigiUkM6UkMiLHJlKTpRLkFycmF5UmFu'@;
put 'Z2UmJihRLkY9YWYoUS5BcnJheVJhbmdlLHJlKSxTZS5wdXNoKFtPaShRLkYpLFEuRl0pKX1lbHNlIGZvcihDdD0wO0N0PFNlLmxlbmd0aDsrK0N0KXJlLnI+PVNlW0N0XVswXS5zLnImJnJlLnI8PVNlW0N0XVswXS5lLnImJnJlLmM+PVNlW0N0XVswXS5zLmMmJnJlLmM8PVNlW0N0XVswXS5l'@;
put 'LmMmJihRLkY9U2VbQ3RdWzFdKTtpZihIZS5jZWxsU3R5bGVzJiYoZHQuZm9yRWFjaChmdW5jdGlvbihUdCl7IW50LnBhdHRlcm5UeXBlJiZUdC5wYXR0ZXJuVHlwZSYmKG50LnBhdHRlcm5UeXBlPVR0LnBhdHRlcm5UeXBlKSwhbnQuZmdDb2xvciYmVHQuZmdDb2xvciYmKG50LmZnQ29sb3I9'@;
put 'VHQuZmdDb2xvcil9KSxRLnM9bnQpLHZvaWQgMCE9PVEuU3R5bGVJRCYmKFEuaXhmZT1RLlN0eWxlSUQpLFEuUiYmUS5zKXt2YXIgRXQ9b24oUS5zKTtkZWxldGUgRXQuYm9sZCxkZWxldGUgRXQuaXRhbGljLGRlbGV0ZSBFdC51bmRlcmxpbmUsZGVsZXRlIEV0LnN0cmlrZSxRLlIuZm9yRWFj'@;
put 'aChmdW5jdGlvbihUdCl7VHQucz1VdChvbihFdCksVHQucyl9KX19ZnVuY3Rpb24gJEwoeSl7eS50PXkudnx8IiIseS50PXkudC5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSx5LnY9eS53PXkuaXhmZT12b2lkIDB9ZnVuY3Rpb24gUXYoeSl7aWYoaGUmJkJ1ZmZl'@;
put 'ci5pc0J1ZmZlcih5KSlyZXR1cm4geS50b1N0cmluZygidXRmOCIpO2lmKCJzdHJpbmciPT10eXBlb2YgeSlyZXR1cm4geTtpZih0eXBlb2YgVWludDhBcnJheTwidSImJnkgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBQaShOKEMoeSkpKTt0aHJvdyBuZXcgRXJyb3IoIkJhZCBpbnB1'@;
put 'dCBmb3JtYXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmciKX12YXIgQnI9LzwoXC8/KShbXlxzPz48IVwvOl0qOnwpKFteXHM/PD46XC9cW10rKSg/Oltccz86PFwvXVtePl0qKT8+L2dtO2Z1bmN0aW9uIFVyKHksUCl7dmFyIEw9UHx8e30sUT1VKFF2KHkpKTsoImJpbmFyeSI9PUwudHlw'@;
put 'ZXx8ImFycmF5Ij09TC50eXBlfHwiYmFzZTY0Ij09TC50eXBlKSYmKFE9dHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLEIoUSkpOlBpKFEpKTt2YXIgcmU9US5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCkscGU9ITE7aWYoKDEwMjMmcmUuaW5kZXhPZigi'@;
put 'PiIpKT5NYXRoLm1pbigxMDIzJnJlLmluZGV4T2YoIiwiKSwxMDIzJnJlLmluZGV4T2YoIjsiKSkpe3ZhciBfZT1vbihMKTtyZXR1cm4gX2UudHlwZT0ic3RyaW5nIixCMS50b193b3JrYm9vayhRLF9lKX1pZigtMT09cmUuaW5kZXhPZigiPD94bWwiKSYmWyJodG1sIiwidGFibGUiLCJoZWFk'@;
put 'IiwibWV0YSIsInNjcmlwdCIsInN0eWxlIiwiZGl2Il0uZm9yRWFjaChmdW5jdGlvbihudSl7cmUuaW5kZXhPZigiPCIrbnUpPj0wJiYocGU9ITApfSkscGUpcmV0dXJuIEZ1LnRvX3dvcmtib29rKFEsTCk7dmFyIHZlLEhlLFNlPVtdO251bGwhPXRlJiZudWxsPT1MLmRlbnNlJiYoTC5kZW5z'@;
put 'ZT10ZSk7dmFyIHVyLEJlPXt9LEdlPVtdLG50PUwuZGVuc2U/W106e30sZHQ9IiIsQ3Q9e30sY3Q9e30sYnQ9e30sRnQ9bXUoJzxEYXRhIHNzOlR5cGU9IlN0cmluZyI+JyksRXQ9MCxUdD0wLFp0PTAscG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sS249e30sdW49e30scW49IiIs'@;
put 'em49MCxrbj1bXSxlcj17fSx0cj17fSxabj0wLFZyPVtdLG9pPXt9LGtpPVtdLExpPXt9LFFyPVtdLEFuPSExLHZyPVtdLHJyPVtdLFNuPXt9LHByPTAsQ2k9MCxqcj17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfX0samk9e307QnIubGFzdEluZGV4PTAsUT1RLnJlcGxhY2UoLzwh'@;
put 'LS0oW1xzXFNdKj8pLS0+L2dtLCIiKTtmb3IodmFyIF9vPSIiO3ZlPUJyLmV4ZWMoUSk7KXN3aXRjaCh2ZVszXT0oX289dmVbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEiPT1fbyl7aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UiLyIhPT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFt2ZVszXSwhMF0pO2JyZWFrfWlmKFNlW1NlLmxlbmd0aC0xXVsxXSlicmVhazsiLyI9PT12ZVsxXT9oTShRLnNsaWNlKEV0LHZlLmlu'@;
put 'ZGV4KSxxbixGdCwiY29tbWVudCI9PVNlW1NlLmxlbmd0aC0xXVswXT9MaTpjdCx7YzpUdCxyOlp0fSxLbixRcltUdF0sYnQsdnIsTCk6KHFuPSIiLEZ0PW11KHZlWzBdKSxFdD12ZS5pbmRleCt2ZVswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiY2VsbCI6aWYoIi8iPT09dmVbMV18fCIvPiI9PT12'@;
put 'ZVswXS5zbGljZSgtMikpe2lmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpe2lmKChjdD1jTSh2ZVswXSkpLkluZGV4JiYoVHQ9K2N0LkluZGV4LTEpLFR0PHBuLnMuYyYmKHBuLnMuYz1UdCksVHQ+cG4uZS5jJiYocG4uZS5jPVR0KSxraT1bXSwhTC5zaGVldFN0dWJzKXsrK1R0O2JyZWFrfWhN'@;
put 'KCIiLCIiLHt9LCJjb21tZW50Ij09U2VbU2UubGVuZ3RoLTFdWzBdP0xpOmN0LHtjOlR0LHI6WnR9LEtuLFFyW1R0XSxidCx2cixMKX1pZihraS5sZW5ndGg+MCYmKGN0LmM9a2kpLCghTC5zaGVldFJvd3N8fEwuc2hlZXRSb3dzPlp0KSYmKHZvaWQgMCE9PWN0LnZ8fEwuc2hlZXRTdHVicykm'@;
put 'JihMLmRlbnNlPyhudFtadF18fChudFtadF09W10pLG50W1p0XVtUdF09Y3QpOm50W05zKFR0KStIcyhadCldPWN0KSxjdC5IUmVmJiYoY3QubD17VGFyZ2V0OnhyKGN0LkhSZWYpfSxjdC5IUmVmU2NyZWVuVGlwJiYoY3QubC5Ub29sdGlwPWN0LkhSZWZTY3JlZW5UaXApLGRlbGV0ZSBjdC5I'@;
put 'UmVmLGRlbGV0ZSBjdC5IUmVmU2NyZWVuVGlwKSwoY3QuTWVyZ2VBY3Jvc3N8fGN0Lk1lcmdlRG93bikmJihwcj1UdCsoMHxwYXJzZUludChjdC5NZXJnZUFjcm9zcywxMCkpLENpPVp0KygwfHBhcnNlSW50KGN0Lk1lcmdlRG93biwxMCkpLChwcj5UdHx8Q2k+WnQpJiZrbi5wdXNoKHtzOntj'@;
put 'OlR0LHI6WnR9LGU6e2M6cHIscjpDaX19KSksTC5zaGVldFN0dWJzKWlmKGN0Lk1lcmdlQWNyb3NzfHxjdC5NZXJnZURvd24pe2Zvcih2YXIgRGk9VHQ7RGk8PXByOysrRGkpZm9yKHZhciBZbz1adDtZbzw9Q2k7KytZbykoRGk+VHR8fFlvPlp0KSYmKEwuZGVuc2U/KG50W1lvXXx8KG50W1lv'@;
put 'XT1bXSksbnRbWW9dW0RpXT17dDoieiJ9KTpudFtOcyhEaSkrSHMoWW8pXT17dDoieiJ9KTtUdD1wcisxfWVsc2UrK1R0O2Vsc2UgY3QuTWVyZ2VBY3Jvc3M/VHQ9cHIrMTorK1R0fWVsc2UoY3Q9Y00odmVbMF0pKS5JbmRleCYmKFR0PStjdC5JbmRleC0xKSxUdDxwbi5zLmMmJihwbi5zLmM9'@;
put 'VHQpLFR0PnBuLmUuYyYmKHBuLmUuYz1UdCksIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSYmKytUdCxraT1bXTticmVhaztjYXNlInJvdyI6Ii8iPT09dmVbMV18fCIvPiI9PT12ZVswXS5zbGljZSgtMik/KFp0PHBuLnMuciYmKHBuLnMucj1adCksWnQ+cG4uZS5yJiYocG4uZS5yPVp0KSwiLz4i'@;
put 'PT09dmVbMF0uc2xpY2UoLTIpJiYoYnQ9bXUodmVbMF0pKS5JbmRleCYmKFp0PStidC5JbmRleC0xKSxUdD0wLCsrWnQpOigoYnQ9bXUodmVbMF0pKS5JbmRleCYmKFp0PStidC5JbmRleC0xKSxTbj17fSwoIjAiPT1idC5BdXRvRml0SGVpZ2h0fHxidC5IZWlnaHQpJiYoU24uaHB0PXBhcnNl'@;
put 'RmxvYXQoYnQuSGVpZ2h0KSxTbi5ocHg9VTEoU24uaHB0KSxycltadF09U24pLCIxIj09YnQuSGlkZGVuJiYoU24uaGlkZGVuPSEwLHJyW1p0XT1TbikpO2JyZWFrO2Nhc2Uid29ya3NoZWV0IjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBF'@;
put 'cnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSk7R2UucHVzaChkdCkscG4ucy5yPD1wbi5lLnImJnBuLnMuYzw9cG4uZS5jJiYobnRbIiFyZWYiXT1PbyhwbiksTC5zaGVldFJvd3MmJkwuc2hlZXRSb3dzPD1wbi5lLnImJihudFsiIWZ1bGxyZWYiXT1udFsiIXJlZiJdLHBuLmUucj1M'@;
put 'LnNoZWV0Um93cy0xLG50WyIhcmVmIl09T28ocG4pKSksa24ubGVuZ3RoJiYobnRbIiFtZXJnZXMiXT1rbiksUXIubGVuZ3RoPjAmJihudFsiIWNvbHMiXT1RcikscnIubGVuZ3RoPjAmJihudFsiIXJvd3MiXT1yciksQ3QmJihudFsiIXNoZWV0Rm9ybWF0Il09R0woQ3QpKSxCZVtkdF09bnR9'@;
put 'ZWxzZSBwbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxadD1UdD0wLFNlLnB1c2goW3ZlWzNdLCExXSksSGU9bXUodmVbMF0pLGR0PXhyKEhlLk5hbWUpLG50PUwuZGVuc2U/W106e30sa249W10sdnI9W10scnI9W10sanIuU2hlZXRzLnB1c2goamk9e25hbWU6ZHQsSGlkZGVuOjB9'@;
put 'KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZXtpZigiLz4iPT12ZVswXS5zbGljZSgtMikpYnJlYWs7Q3Q9bXUodmVbMF0pLFNlLnB1c2go'@;
put 'W3ZlWzNdLCExXSksUXI9W10sQW49ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09dmVbMV0/eWUoS24sdW4scW4sTCk6KHVuPW11KHZlWzBdKSxxbj0iIik7YnJlYWs7Y2FzZSJudW1iZXJmb3JtYXQiOnVuLm5mPXhyKG11KHZlWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiksbmVbdW4ubmZdJiYo'@;
put 'dW4ubmY9bmVbdW4ubmZdKTtmb3IodmFyIGxvPTA7MzkyIT1sbyYmdy5fdGFibGVbbG9dIT11bi5uZjsrK2xvKTtpZigzOTI9PWxvKWZvcihsbz01NzszOTIhPWxvOysrbG8paWYobnVsbD09dy5fdGFibGVbbG9dKXt3LmxvYWQodW4ubmYsbG8pO2JyZWFrfWJyZWFrO2Nhc2UiY29sdW1uIjpp'@;
put 'ZigidGFibGUiIT09U2VbU2UubGVuZ3RoLTFdWzBdfHwiLyI9PT12ZVsxXSlicmVhaztpZigodXI9bXUodmVbMF0pKS5IaWRkZW4mJih1ci5oaWRkZW49ITAsZGVsZXRlIHVyLkhpZGRlbiksdXIuV2lkdGg/dXIud3B4PTQqcGFyc2VJbnQodXIuV2lkdGgsMTApLzM6K3VyLkF1dG9GaXRXaWR0'@;
put 'aCYmKHVyLmF1dG89MSksIUFuJiZ1ci53cHg+MTApe0FuPSEwLHBsPWxDO2Zvcih2YXIgQW89MDtBbzxRci5sZW5ndGg7KytBbylRcltBb10mJnB1KFFyW0FvXSl9QW4mJnB1KHVyKSxRclt1ci5JbmRleC0xfHxRci5sZW5ndGhdPXVyO2Zvcih2YXIgeG89MDt4bzwrdXIuU3BhbjsrK3hvKVFy'@;
put 'W1FyLmxlbmd0aF09b24odXIpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8iPT09dmVbMV0pYnJlYWs7anIuTmFtZXN8fChqci5OYW1lcz1bXSk7dmFyIGhpPWxuKHZlWzBdKSx0YT17TmFtZTpoaS5OYW1lLFJlZjphZihoaS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtqci5T'@;
put 'aGVldHMubGVuZ3RoPjAmJih0YS5TaGVldD1qci5TaGVldHMubGVuZ3RoLTEpLGpyLk5hbWVzLnB1c2godGEpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6'@;
put 'Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2FzZSJuYW1lIjpicmVhaztjYXNlImFsaWdubWVudCI6aWYoIUwuY2VsbFN0eWxlc3x8Ii8iPT09dmVbMV0pYnJlYWs7dW4uQWxpZ25tZW50PW11KHZlWzBdKTticmVhaztjYXNlImJvcmRlcnMiOiIvIiE9PXZl'@;
put 'WzFdJiYodW4uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09PXZlWzFdKWJyZWFrO3VuLkJvcmRlcnN8fCh1bi5Cb3JkZXJzPVtdKSx1bi5Cb3JkZXJzLnB1c2gobXUodmVbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpe3FuKz12'@;
put 'ZVswXTticmVha30iLyI9PT12ZVsxXT9xbis9US5zbGljZSh6bix2ZS5pbmRleCt2ZVswXS5sZW5ndGgpOnpuPXZlLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFMLmNlbGxTdHlsZXN8fCIvIj09PXZlWzFdKWJyZWFrO3VuLkludGVyaW9yPW11KHZlWzBdKTticmVhaztjYXNlImF1'@;
put 'dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtleXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6Y2FzZSJsYXN0cHJpbnRlZCI6Y2FzZSJ2'@;
put 'ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNlIjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlmKCIvPiI9PT12ZVswXS5zbGljZSgtMikp'@;
put 'YnJlYWs7Ii8iPT09dmVbMV0/UmQoZXIsX28sUS5zbGljZShabix2ZS5pbmRleCkpOlpuPXZlLmluZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3b3JrYm9vayI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UgU2UucHVzaChbdmVbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKTsk'@;
put 'TChMaSksa2kucHVzaChMaSl9ZWxzZSBTZS5wdXNoKFt2ZVszXSwhMV0pLExpPXthOihIZT1tdSh2ZVswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRl'@;
put 'OiAiK0hlLmpvaW4oInwiKSl9ZWxzZSBpZigiLyIhPT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpKXt2YXIgTW49bXUodmVbMF0pO250WyIhYXV0b2ZpbHRlciJdPXtyZWY6YWYoTW4uUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxTZS5wdXNoKFt2ZVszXSwhMF0pfWJyZWFrO2Nhc2Ui'@;
put 'ZGF0YXZhbGlkYXRpb24iOmlmKG50WyIhdmFsaWRhdGlvbnMiXXx8KG50WyIhdmFsaWRhdGlvbnMiXT1bXSksIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UiLyIhPT12ZVswXS5j'@;
put 'aGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFt2ZVszXSwhMF0pLG9pPXt9O2JyZWFrO2Nhc2UicGl4ZWxzcGVyaW5jaCI6aWYoIi8iPT09dmVbMV0pe3ZhciBNcz0rUS5zbGljZShFdCx2ZS5pbmRleCk7KDcyPT1Nc3x8OTY9PU1zKSYmRm0oTXMpfWVsc2UgRXQ9dmUuaW5kZXgrdmVb'@;
put 'MF0ubGVuZ3RoO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1bWVudHByb3BlcnRpZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpjYXNlIm5h'@;
put 'bWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRhYmxlIjpjYXNlInNvcnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdzIjpjYXNlImV4Y2Vsd29ya2Jvb2siOmNh'@;
put 'c2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNlIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0'@;
put 'aC0yKSYmU2UucHVzaChbdmVbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PVNlLmxlbmd0aCYmImRvY3VtZW50Ij09dmVbM118fDA9PVNlLmxlbmd0aCYmInVvZiI9PXZlWzNdKXJldHVybiBhXyhRLEwpO3ZhciB5cz0hMDtzd2l0Y2goU2VbU2UubGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmlj'@;
put 'ZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaCh2ZVszXSl7Y2FzZSJhbGxvd3BuZyI6Y2FzZSJyZW1vdmVwZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9uZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJjb2xvcnMiOmNhc2UiY29sb3IiOmNhc2UiaW5k'@;
put 'ZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9ubHlyZWNvbW1lbmRlZCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNl'@;
put 'InNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2godmVbM10pe2Nhc2Ui'@;
put 'ZGF0ZTE5MDQiOmpyLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5kb3doZWlnaHQiOmNhc2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3RzdHJ1Y3R1cmUiOmNhc2UicHJvdGVjdHdpbmRv'@;
put 'dyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJkaXNwbGF5aW5rbm90ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9vayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2FzZSJzaGVldGluZGV4Zmlyc3QiOmNhc2Uic2hl'@;
put 'ZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVsYXMiOmNhc2UiZG9ub3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UibWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0aCI6Y2FzZSJ4Y3QiOmNhc2UiY291bnQiOmNh'@;
put 'c2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxjZWQiOmNhc2Uic3RhcnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxhc3QiOmNhc2Uid2FudGFkdmlzZSI6Y2FzZSJi'@;
put 'b29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5vYXV0b3JlY292ZXIiOmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxhdGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2RlcjFjMSI6Y2FzZSJlbWJlZHNhdmVzbWFydHRh'@;
put 'Z3MiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaCh2'@;
put 'ZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09dmVbMF0uc2xpY2UoLTIpKWlmKCIvIj09PXZlWzFdKXN3aXRjaChRLnNsaWNlKFpuLHZlLmluZGV4KSl7Y2FzZSJTaGVldEhpZGRlbiI6amkuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOmppLkhpZGRlbj0yfWVsc2Ug'@;
put 'Wm49dmUuaW5kZXgrdmVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjpudFsiIW1hcmdpbnMiXXx8ZGYobnRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxudFsiIW1hcmdpbnMiXS5oZWFkZXI9bG4odmVbMF0pLk1hcmdpbjticmVhaztjYXNlImZvb3RlciI6bnRbIiFtYXJnaW5zIl18fGRm'@;
put 'KG50WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksbnRbIiFtYXJnaW5zIl0uZm9vdGVyPWxuKHZlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJwYWdlbWFyZ2lucyI6dmFyIEVsPWxuKHZlWzBdKTtudFsiIW1hcmdpbnMiXXx8ZGYobnRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxFbC5Ub3AmJihudFsi'@;
put 'IW1hcmdpbnMiXS50b3A9RWwuVG9wKSxFbC5MZWZ0JiYobnRbIiFtYXJnaW5zIl0ubGVmdD1FbC5MZWZ0KSxFbC5SaWdodCYmKG50WyIhbWFyZ2lucyJdLnJpZ2h0PUVsLlJpZ2h0KSxFbC5Cb3R0b20mJihudFsiIW1hcmdpbnMiXS5ib3R0b209RWwuQm90dG9tKTticmVhaztjYXNlImRpc3Bs'@;
put 'YXlyaWdodHRvbGVmdCI6anIuVmlld3N8fChqci5WaWV3cz1bXSksanIuVmlld3NbMF18fChqci5WaWV3c1swXT17fSksanIuVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2UiZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpj'@;
put 'YXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFuZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNl'@;
put 'dHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNlImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNl'@;
put 'Im51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFn'@;
put 'ZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2FzZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFs'@;
put 'bG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxsb3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6'@;
put 'ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXloZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdz'@;
put 'IjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlvbiI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlInNwbGl0'@;
put 'aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjppZigiLz4iIT09dmVbMF0uc2xpY2UoLTIpKWlmKCIvIj09dmVbMV0pe250WyIhZnJlZXplIl18fChudFsiIWZyZWV6ZSJdPSJBMSIpO3ZhciBzbD1zcyhudFsiIWZyZWV6ZSJdKTsic3BsaXRob3Jpem9udGFsIj09dmVbM10/c2wucj0r'@;
put 'US5zbGljZShabix2ZS5pbmRleCk6c2wuYz0rUS5zbGljZShabix2ZS5pbmRleCksbnRbIiFmcmVlemUiXT1kaShzbCl9ZWxzZSBabj12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOm50WyIhZ3JpZGxpbmVzIl09ITE7YnJlYWs7Y2FzZSJu'@;
put 'b3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOm50WyIhb3V0bGluZSJdfHwobnRbIiFvdXRsaW5lIl09e30pLG50WyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjpudFsiIW91dGxpbmUiXXx8KG50WyIhb3V0bGluZSJdPXt9KSxudFsi'@;
put 'IW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaCh2ZVszXSl7Y2FzZSJpbW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11bHRpcGxlaXRlbWxhYmVsIjpjYXNlImNvbXBhY3Ry'@;
put 'b3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJvcmllbnRhdGlvbiI6Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9jYXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJwb3NpdGlvbiI6Y2FzZSJwaXZvdGl0ZW0iOmNhc2Ui'@;
put 'ZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2UicGFyZW50ZmllbGQiOmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2FzZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2UiaXRlbXR5cGUiOmNhc2UicHRzb3VyY2UiOmNhc2Ui'@;
put 'Y2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZpbGVuYW1lIjpjYXNlInJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5vcm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6Y2FzZSJoaWRkZW4iOmNhc2Uic3VidG90YWwiOmNh'@;
put 'c2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24iOmNhc2UicmVmcmVzaG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2UibWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNhc2UicmVmcmVzaG5hbWUiOmNhc2UicmVmcmVzaGRh'@;
put 'dGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6Y2FzZSJ2ZXJzaW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1pbiI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2UiY2FsY3VsYXRpb24iOmJyZWFrO2RlZmF1bHQ6eXM9'@;
put 'ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2godmVbM10pe2Nhc2UiY29sYnJlYWtzIjpjYXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OnlzPSExfWJy'@;
put 'ZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKHZlWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4iOmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInF1ZXJ5dGFibGUi'@;
put 'OnN3aXRjaCh2ZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2FzZSJhdXRvZm9ybWF0cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJlZnJlc2hlZGlueGw5IjpjYXNlInVybHN0cmluZyI6'@;
put 'Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRleHQiOmNhc2UicmVmcmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpjYXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMiOmNhc2UiZG9ub3Rwcm9tcHRmb3JmaWxlIjpjYXNl'@;
put 'InRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpjYXNlImRlY2ltYWwiOmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdtaW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNhc2UiZmllbGR0eXBlIjpjYXNlImRlbGltaXRlcnMi'@;
put 'OmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNlInZlcnNpb25sYXN0ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6c3dpdGNoKHZlWzNdKXtjYXNlInJhbmdlIjpv'@;
put 'aS5yZWY9dmU7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0'@;
put 'aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2Ui'@;
put 'Y2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInNvcnRpbmciOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2godmVbM10pe2Nhc2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGlu'@;
put 'ZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21i'@;
put 'b2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJtYXBpbmZvIjpjYXNlInNjaGVtYSI6Y2Fz'@;
put 'ZSJkYXRhIjpzd2l0Y2godmVbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNh'@;
put 'c2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDp5'@;
put 'cz0hMX1pZih5c3x8dmVbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIVNlW1NlLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3ZlWzNdKyJ8IitTZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI9PT1TZVtTZS5sZW5ndGgtMV1bMF0p'@;
put 'e2lmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09dmVbMV0/UmUodHIsX28sVnIsUS5zbGljZShabix2ZS5pbmRleCkpOihWcj12ZSxabj12ZS5pbmRleCt2ZVswXS5sZW5ndGgpO2JyZWFrfWlmKEwuV1RGKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrdmVbM10rInwiK1Nl'@;
put 'LmpvaW4oInwiKX12YXIgZ2w9e307cmV0dXJuIUwuYm9va1NoZWV0cyYmIUwuYm9va1Byb3BzJiYoZ2wuU2hlZXRzPUJlKSxnbC5TaGVldE5hbWVzPUdlLGdsLldvcmtib29rPWpyLGdsLlNTRj13LmdldF90YWJsZSgpLGdsLlByb3BzPWVyLGdsLkN1c3Rwcm9wcz10cixnbC5TaGVldHMmJmds'@;
put 'LlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihudSl7dmFyIHRsPWdsLlNoZWV0c1tudV07dGxbIiFtZXJnZXMiXSYmdGxbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKEt0KXsic3RyaW5nIj09dHlwZW9mIEt0JiYoS3Q9TS51dGlscy5kZWNvZGVfcmFuZ2UoS3QpKTt2YXIgZ249TS51'@;
put 'dGlscy5lbmNvZGVfY2VsbChLdC5zKSxMbj1BcnJheS5pc0FycmF5KHRsKT8odGxbS3Qucy5yXXx8W10pW0t0LnMuY106dGxbZ25dO0xuJiZMbi5zJiYobnVsbCE9TG4ucy50b3AmJnFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZSh0bCxLdCx7dG9wOkxuLnMudG9wfSksbnVsbCE9TG4ucy5ib3R0'@;
put 'b20mJnFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZSh0bCxLdCx7Ym90dG9tOkxuLnMuYm90dG9tfSksbnVsbCE9TG4ucy5sZWZ0JiZxby5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUodGwsS3Qse2xlZnQ6TG4ucy5sZWZ0fSksbnVsbCE9TG4ucy5yaWdodCYmcW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxl'@;
put 'KHRsLEt0LHtyaWdodDpMbi5zLnJpZ2h0fSkpfSl9KSxnbH1mdW5jdGlvbiBqYSh5LFApe3N3aXRjaChQNihQPVB8fHt9KSxQLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2NCI6cmV0dXJuIFVyKHNlLmRlY29kZSh5KSxQKTtjYXNlImJpbmFyeSI6Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6'@;
put 'cmV0dXJuIFVyKHksUCk7Y2FzZSJhcnJheSI6cmV0dXJuIFVyKE4oeSksUCl9fWZ1bmN0aW9uIFZuKHkpe3JldHVybiBTcigiTmFtZWRSYW5nZSIsbnVsbCx7InNzOk5hbWUiOnkuTmFtZSwic3M6UmVmZXJzVG8iOiI9IitLOSh5LlJlZix7cjowLGM6MH0pfSl9ZnVuY3Rpb24gZ00oeSxQLEws'@;
put 'USxyZSxwZSxfZSl7aWYoIXl8fG51bGw9PXkudiYmbnVsbD09eS5mJiYhUS5zaGVldFN0dWJzKXJldHVybiIiO3ZhciB2ZT17fTtpZih5LmYmJih2ZVsic3M6Rm9ybXVsYSJdPSI9IitIcihLOSh5LmYsX2UpKSkseS5GJiZ5LkYuc2xpY2UoMCxQLmxlbmd0aCk9PVApe3ZhciBTZT1zcyh5LkYu'@;
put 'c2xpY2UoUC5sZW5ndGgrMSkpO3ZlWyJzczpBcnJheVJhbmdlIl09IlJDOlIiKyhTZS5yPT1fZS5yPyIiOiJbIisoU2Uuci1fZS5yKSsiXSIpKyJDIisoU2UuYz09X2UuYz8iIjoiWyIrKFNlLmMtX2UuYykrIl0iKX1pZih5LmwmJnkubC5UYXJnZXQmJih2ZVsic3M6SFJlZiJdPUhyKHkubC5U'@;
put 'YXJnZXQpLHkubC5Ub29sdGlwJiYodmVbIng6SFJlZlNjcmVlblRpcCJdPUhyKHkubC5Ub29sdGlwKSkpLExbIiFtZXJnZXMiXSlmb3IodmFyIEhlPUxbIiFtZXJnZXMiXSxCZT0wO0JlIT1IZS5sZW5ndGg7KytCZSlIZVtCZV0ucy5jIT1fZS5jfHxIZVtCZV0ucy5yIT1fZS5yfHwoSGVbQmVd'@;
put 'LmUuYz5IZVtCZV0ucy5jJiYodmVbInNzOk1lcmdlQWNyb3NzIl09SGVbQmVdLmUuYy1IZVtCZV0ucy5jKSxIZVtCZV0uZS5yPkhlW0JlXS5zLnImJih2ZVsic3M6TWVyZ2VEb3duIl09SGVbQmVdLmUuci1IZVtCZV0ucy5yKSk7dmFyIEdlPSIiLG50PSIiO3N3aXRjaCh5LnQpe2Nhc2UieiI6'@;
put 'aWYoIVEuc2hlZXRTdHVicylyZXR1cm4iIjticmVhaztjYXNlIm4iOkdlPSJOdW1iZXIiLG50PVN0cmluZyh5LnYpO2JyZWFrO2Nhc2UiYiI6R2U9IkJvb2xlYW4iLG50PXkudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZSI6R2U9IkVycm9yIixudD1Rb1t5LnZdO2JyZWFrO2Nhc2UiZCI6R2U9IkRh'@;
put 'dGVUaW1lIixudD1uZXcgRGF0ZSh5LnYpLnRvSVNPU3RyaW5nKCksbnVsbD09eS56JiYoeS56PXkuenx8dy5fdGFibGVbMTRdKTticmVhaztjYXNlInMiOkdlPSJTdHJpbmciLG50PWlvKHkudnx8IiIpfXZhciBkdD1ndShRLmNlbGxYZnMsbnVsbCx5LFEpO3ZlWyJzczpTdHlsZUlEIl09InMi'@;
put 'KygyMStkdCksdmVbInNzOkluZGV4Il09X2UuYysxO3ZhciBDdD1udWxsIT15LnY/bnQ6IiIsY3Q9InoiPT15LnQ/IiI6eS5SP2Z1bmN0aW9uIFhMKHkpe3JldHVybic8c3M6RGF0YSBzczpUeXBlPSJTdHJpbmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4nK3ku'@;
put 'bWFwKGZ1bmN0aW9uKEwpe3ZhciBRPWlvKEwudik7cmV0dXJuIEwucyYmKEwucy5ib2xkJiYoUT0iPEI+IitRKyI8L0I+IiksTC5zLml0YWxpYyYmKFE9IjxJPiIrUSsiPC9JPiIpLEwucy5zdHJpa2UmJihRPSI8Uz4iK1ErIjwvUz4iKSxMLnMudW5kZXJsaW5lJiYoUT0iPFU+IitRKyI8L1U+'@;
put 'IiksInN1cGVyIj09TC5zLnZhbGlnbiYmKFE9IjxTdXA+IitRKyI8L1N1cD4iKSwic3ViIj09TC5zLnZhbGlnbiYmKFE9IjxTdWI+IitRKyI8L1N1Yj4iKSwoTC5zLm5hbWV8fEwucy5zenx8TC5zLmNvbG9yJiZudWxsIT1MLnMuY29sb3IucmdiKSYmKFE9WyI8Rm9udCIsTC5zLm5hbWU/JyBo'@;
put 'dG1sOkZhY2U9IicrTC5zLm5hbWUrJyInOiIiLEwucy5zej8nIGh0bWw6U2l6ZT0iJytMLnMuc3orJyInOiIiLEwucy5jb2xvcj8nIGh0bWw6Q29sb3I9IiMnKygiMDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiBMLnMuY29sb3IucmdiP0wucy5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOkwucy5j'@;
put 'b2xvci5yZ2IpKS5zbGljZSgtNikrJyInOiIiLCI+IixRLCI8L0ZvbnQ+Il0uam9pbigiIikpKSxRfSkuam9pbigiIikrIjwvRGF0YT4ifSh5LlIpOic8RGF0YSBzczpUeXBlPSInK0dlKyciPicrQ3QrIjwvRGF0YT4iO3JldHVybih5LmN8fFtdKS5sZW5ndGg+MCYmKGN0Kz1mdW5jdGlvbiBl'@;
put 'Xyh5KXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oUCl7dmFyIFE9U3IoInNzOkRhdGEiLGhvKFAudHx8IiIpLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9KTtyZXR1cm4gU3IoIkNvbW1lbnQiLFEseyJzczpBdXRob3IiOlAuYX0pfSkuam9pbigiIil9KHkuYykpLFNy'@;
put 'KCJDZWxsIixjdCx2ZSl9ZnVuY3Rpb24gbU0oeSxQKXt2YXIgTD0nPFJvdyBzczpJbmRleD0iJysoeSsxKSsnIic7cmV0dXJuIFAmJihQLmhweCYmIVAuaHB0JiYoUC5ocHQ9ajIoUC5ocHgpKSxQLmhwdCYmKEwrPScgc3M6QXV0b0ZpdEhlaWdodD0iMCIgc3M6SGVpZ2h0PSInK1AuaHB0Kyci'@;
put 'JyksUC5oaWRkZW4mJihMKz0nIHNzOkhpZGRlbj0iMSInKSksTCsiPiJ9ZnVuY3Rpb24gVmUoeSxQLEwpe3ZhciBRPVtdLHBlPUwuU2hlZXRzW0wuU2hlZXROYW1lc1t5XV0sX2U9cGU/ZnVuY3Rpb24gcE0oeSxQLEwsUSl7aWYoIXl8fCEoKFF8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJl'@;
put 'dHVybiIiO2Zvcih2YXIgcmU9US5Xb3JrYm9vay5OYW1lcyxwZT1bXSxfZT0wO19lPHJlLmxlbmd0aDsrK19lKXt2YXIgdmU9cmVbX2VdO3ZlLlNoZWV0PT1MJiYodmUuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8cGUucHVzaChWbih2ZSkpKX1yZXR1cm4gcGUuam9pbigiIil9KHBlLDAseSxM'@;
put 'KToiIjtyZXR1cm4gX2UubGVuZ3RoPjAmJlEucHVzaCgiPE5hbWVzPiIrX2UrIjwvTmFtZXM+IiksX2U9cGU/ZnVuY3Rpb24gdk0oeSxQLEwsUSl7aWYoIXlbIiFyZWYiXSlyZXR1cm4iIjt2YXIgcmU9T2koeVsiIXJlZiJdKSxwZT15WyIhbWVyZ2VzIl18fFtdLF9lPTAsdmU9W107eVsiIWNv'@;
put 'bHMiXSYmeVsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0LEZ0KXtwdShidCk7dmFyIEV0PSEhYnQud2lkdGgsVHQ9WWQoRnQsYnQpLFp0PXsic3M6SW5kZXgiOkZ0KzF9O0V0JiYoWnRbInNzOldpZHRoIl09TWMoVHQud2lkdGgpKSxidC5oaWRkZW4mJihadFsic3M6SGlkZGVuIl09IjEi'@;
put 'KSx2ZS5wdXNoKFNyKCJDb2x1bW4iLG51bGwsWnQpKX0pO2Zvcih2YXIgU2U9QXJyYXkuaXNBcnJheSh5KSxIZT1yZS5zLnI7SGU8PXJlLmUucjsrK0hlKXtmb3IodmFyIEJlPVttTShIZSwoeVsiIXJvd3MiXXx8W10pW0hlXSldLEdlPXJlLnMuYztHZTw9cmUuZS5jOysrR2Upe3ZhciBudD0h'@;
put 'MTtmb3IoX2U9MDtfZSE9cGUubGVuZ3RoOysrX2UpaWYoIShwZVtfZV0ucy5jPkdlfHxwZVtfZV0ucy5yPkhlfHxwZVtfZV0uZS5jPEdlfHxwZVtfZV0uZS5yPEhlKSl7KHBlW19lXS5zLmMhPUdlfHxwZVtfZV0ucy5yIT1IZSkmJihudD0hMCk7YnJlYWt9aWYoIW50KXt2YXIgZHQ9e3I6SGUs'@;
put 'YzpHZX0sQ3Q9ZGkoZHQpO0JlLnB1c2goZ00oU2U/KHlbSGVdfHxbXSlbR2VdOnlbQ3RdLEN0LHksUCwwLDAsZHQpKX19QmUucHVzaCgiPC9Sb3c+IiksQmUubGVuZ3RoPjImJnZlLnB1c2goQmUuam9pbigiIikpfXJldHVybiB2ZS5qb2luKCIiKX0ocGUsUCk6IiIsX2UubGVuZ3RoPjAmJlEu'@;
put 'cHVzaCgiPFRhYmxlPiIrX2UrIjwvVGFibGU+IiksUS5wdXNoKGZ1bmN0aW9uIHh0KHksUCxMLFEpe2lmKCF5KXJldHVybiIiO3ZhciByZT1bXTtpZih5WyIhbWFyZ2lucyJdJiYocmUucHVzaCgiPFBhZ2VTZXR1cD4iKSx5WyIhbWFyZ2lucyJdLmhlYWRlciYmcmUucHVzaChTcigiSGVhZGVy'@;
put 'IixudWxsLHsieDpNYXJnaW4iOnlbIiFtYXJnaW5zIl0uaGVhZGVyfSkpLHlbIiFtYXJnaW5zIl0uZm9vdGVyJiZyZS5wdXNoKFNyKCJGb290ZXIiLG51bGwseyJ4Ok1hcmdpbiI6eVsiIW1hcmdpbnMiXS5mb290ZXJ9KSkscmUucHVzaChTcigiUGFnZU1hcmdpbnMiLG51bGwseyJ4OkJvdHRv'@;
put 'bSI6eVsiIW1hcmdpbnMiXS5ib3R0b218fCIwLjc1IiwieDpMZWZ0Ijp5WyIhbWFyZ2lucyJdLmxlZnR8fCIwLjciLCJ4OlJpZ2h0Ijp5WyIhbWFyZ2lucyJdLnJpZ2h0fHwiMC43IiwieDpUb3AiOnlbIiFtYXJnaW5zIl0udG9wfHwiMC43NSJ9KSkscmUucHVzaCgiPC9QYWdlU2V0dXA+Iikp'@;
put 'LFEmJlEuV29ya2Jvb2smJlEuV29ya2Jvb2suU2hlZXRzJiZRLldvcmtib29rLlNoZWV0c1tMXSlpZihRLldvcmtib29rLlNoZWV0c1tMXS5IaWRkZW4pcmUucHVzaChTcigiVmlzaWJsZSIsMT09US5Xb3JrYm9vay5TaGVldHNbTF0uSGlkZGVuPyJTaGVldEhpZGRlbiI6IlNoZWV0VmVyeUhp'@;
put 'ZGRlbiIse30pKTtlbHNle2Zvcih2YXIgcGU9MDtwZTxMJiYoIVEuV29ya2Jvb2suU2hlZXRzW3BlXXx8US5Xb3JrYm9vay5TaGVldHNbcGVdLkhpZGRlbik7KytwZSk7cGU9PUwmJnJlLnB1c2goIjxTZWxlY3RlZC8+Iil9aWYoKCgoKFF8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSlb'@;
put 'MF18fHt9KS5SVEwmJnJlLnB1c2goIjxEaXNwbGF5UmlnaHRUb0xlZnQvPiIpLGhuKHlbIiFncmlkbGluZXMiXSkmJnJlLnB1c2goIjxEb05vdERpc3BsYXlHcmlkbGluZXMvPiIpLHlbIiFmcmVlemUiXSl7cmUucHVzaCgiPEZyZWV6ZVBhbmVzLz4iKSxyZS5wdXNoKCI8RnJvemVuTm9TcGxp'@;
put 'dC8+Iik7dmFyIF9lPXNzKHlbIiFmcmVlemUiXSk7X2Uucj4wJiYocmUucHVzaChmcygiU3BsaXRIb3Jpem9udGFsIiwiIitfZS5yKSkscmUucHVzaChmcygiVG9wUm93Qm90dG9tUGFuZSIsIiIrX2UucikpKSxfZS5jPjAmJihyZS5wdXNoKGZzKCJTcGxpdFZlcnRpY2FsIiwiIitfZS5jKSks'@;
put 'cmUucHVzaChmcygiTGVmdENvbHVtblJpZ2h0UGFuZSIsIiIrX2UuYykpKX1yZXR1cm4geVsiIXByb3RlY3QiXSYmKHJlLnB1c2goZnMoIlByb3RlY3RDb250ZW50cyIsIlRydWUiKSkseVsiIXByb3RlY3QiXS5vYmplY3RzJiZyZS5wdXNoKGZzKCJQcm90ZWN0T2JqZWN0cyIsIlRydWUiKSks'@;
put 'eVsiIXByb3RlY3QiXS5zY2VuYXJpb3MmJnJlLnB1c2goZnMoIlByb3RlY3RTY2VuYXJpb3MiLCJUcnVlIikpLG51bGw9PXlbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHN8fHlbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHM/bnVsbCE9eVsiIXByb3RlY3QiXS5zZWxlY3RVbmxv'@;
put 'Y2tlZENlbGxzJiYheVsiIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiZyZS5wdXNoKGZzKCJFbmFibGVTZWxlY3Rpb24iLCJVbmxvY2tlZENlbGxzIikpOnJlLnB1c2goZnMoIkVuYWJsZVNlbGVjdGlvbiIsIk5vU2VsZWN0aW9uIikpLFtbImZvcm1hdENlbGxzIiwiQWxsb3dGb3Jt'@;
put 'YXRDZWxscyJdLFsiZm9ybWF0Q29sdW1ucyIsIkFsbG93U2l6ZUNvbHMiXSxbImZvcm1hdFJvd3MiLCJBbGxvd1NpemVSb3dzIl0sWyJpbnNlcnRDb2x1bW5zIiwiQWxsb3dJbnNlcnRDb2xzIl0sWyJpbnNlcnRSb3dzIiwiQWxsb3dJbnNlcnRSb3dzIl0sWyJpbnNlcnRIeXBlcmxpbmtzIiwi'@;
put 'QWxsb3dJbnNlcnRIeXBlcmxpbmtzIl0sWyJkZWxldGVDb2x1bW5zIiwiQWxsb3dEZWxldGVDb2xzIl0sWyJkZWxldGVSb3dzIiwiQWxsb3dEZWxldGVSb3dzIl0sWyJzb3J0IiwiQWxsb3dTb3J0Il0sWyJhdXRvRmlsdGVyIiwiQWxsb3dGaWx0ZXIiXSxbInBpdm90VGFibGVzIiwiQWxsb3dV'@;
put 'c2VQaXZvdFRhYmxlcyJdXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt5WyIhcHJvdGVjdCJdW3ZlWzBdXSYmcmUucHVzaCgiPCIrdmVbMV0rIi8+Iil9KSksMD09cmUubGVuZ3RoPyIiOlNyKCJXb3Jrc2hlZXRPcHRpb25zIixyZS5qb2luKCIiKSx7eG1sbnM6V2kueH0pfShwZSwwLHksTCkpLFEu'@;
put 'am9pbigiIil9ZnVuY3Rpb24gSkwoeSxQKXtQfHwoUD17fSkseS5TU0Z8fCh5LlNTRj13LmdldF90YWJsZSgpKSx5LlNTRiYmKEoodyksdy5sb2FkX3RhYmxlKHkuU1NGKSxQLnJldnNzZj1BZSh5LlNTRiksUC5yZXZzc2ZbeS5TU0ZbNjU1MzVdXT0wLFAuc3NmPXkuU1NGLHkuU3R5bGVzPXtG'@;
put 'b250czpQLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlAuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOlAuQm9y'@;
put 'ZGVycz1be31dfSxQLmNlbGxYZnM9W10sUC5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sZ3UoUC5jZWxsWGZzLG51bGwse30se3JldnNzZjp7R2VuZXJhbDowfX0pKTt2YXIgTD1bXTtMLnB1c2goZnVuY3Rpb24gZk0oeSxQKXt2YXIgTD1bXTtyZXR1cm4geS5Qcm9wcyYmTC5wdXNo'@;
put 'KGZ1bmN0aW9uIHJjKHksUCl7dmFyIEw9W107cmV0dXJuIGx0KEYyKS5tYXAoZnVuY3Rpb24oUSl7Zm9yKHZhciByZT0wO3JlPE9sLmxlbmd0aDsrK3JlKWlmKE9sW3JlXVsxXT09USlyZXR1cm4gT2xbcmVdO2ZvcihyZT0wO3JlPFIxLmxlbmd0aDsrK3JlKWlmKFIxW3JlXVsxXT09USlyZXR1'@;
put 'cm4gUjFbcmVdO3Rocm93IFF9KS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKG51bGwhPXlbUVsxXV0pe3ZhciByZT1QJiZQLlByb3BzJiZudWxsIT1QLlByb3BzW1FbMV1dP1AuUHJvcHNbUVsxXV06eVtRWzFdXTsiZGF0ZSI9PT1RWzJdJiYocmU9bmV3IERhdGUocmUpLnRvSVNPU3RyaW5nKCku'@;
put 'cmVwbGFjZSgvXC5cZCpaLywiWiIpKSwibnVtYmVyIj09dHlwZW9mIHJlP3JlPVN0cmluZyhyZSk6ITA9PT1yZXx8ITE9PT1yZT9yZT1yZT8iMSI6IjAiOnJlIGluc3RhbmNlb2YgRGF0ZSYmKHJlPW5ldyBEYXRlKHJlKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIiIpKSxMLnB1'@;
put 'c2goZnMoRjJbUVsxXV18fFFbMV0scmUpKX19KSxTcigiRG9jdW1lbnRQcm9wZXJ0aWVzIixMLmpvaW4oIiIpLHt4bWxuczpXaS5vfSl9KHkuUHJvcHMsUCkpLHkuQ3VzdHByb3BzJiZMLnB1c2goZnVuY3Rpb24gVHcoeSxQKXt2YXIgTD1bIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIl0sUT0i'@;
put 'Q3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzIixyZT1bXTtyZXR1cm4geSYmbHQoeSkuZm9yRWFjaChmdW5jdGlvbihwZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHkscGUpKXtmb3IodmFyIF9lPTA7X2U8T2wubGVuZ3RoOysrX2UpaWYocGU9PU9sW19lXVsxXSly'@;
put 'ZXR1cm47Zm9yKF9lPTA7X2U8UjEubGVuZ3RoOysrX2UpaWYocGU9PVIxW19lXVsxXSlyZXR1cm47Zm9yKF9lPTA7X2U8TC5sZW5ndGg7KytfZSlpZihwZT09TFtfZV0pcmV0dXJuO3ZhciB2ZT15W3BlXSxTZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIHZlPyhTZT0iZmxvYXQiLHZlPVN0'@;
put 'cmluZyh2ZSkpOiEwPT09dmV8fCExPT09dmU/KFNlPSJib29sZWFuIix2ZT12ZT8iMSI6IjAiKTp2ZT1TdHJpbmcodmUpLHJlLnB1c2goU3IoSmkocGUpLHZlLHsiZHQ6ZHQiOlNlfSkpfX0pLFAmJmx0KFApLmZvckVhY2goZnVuY3Rpb24ocGUpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3du'@;
put 'UHJvcGVydHkuY2FsbChQLHBlKSYmKCF5fHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHkscGUpKSl7dmFyIF9lPVBbcGVdLHZlPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgX2U/KHZlPSJmbG9hdCIsX2U9U3RyaW5nKF9lKSk6ITA9PT1fZXx8ITE9PT1fZT8odmU9'@;
put 'ImJvb2xlYW4iLF9lPV9lPyIxIjoiMCIpOl9lIGluc3RhbmNlb2YgRGF0ZT8odmU9ImRhdGVUaW1lLnR6IixfZT1fZS50b0lTT1N0cmluZygpKTpfZT1TdHJpbmcoX2UpLHJlLnB1c2goU3IoSmkocGUpLF9lLHsiZHQ6ZHQiOnZlfSkpfX0pLCI8IitRKycgeG1sbnM9IicrV2kubysnIj4nK3Jl'@;
put 'LmpvaW4oIiIpKyI8LyIrUSsiPiJ9KHkuUHJvcHMseS5DdXN0cHJvcHMpKSxMLmpvaW4oIiIpfSh5LFApKSxMLnB1c2goIiIpLEwucHVzaCgiIiksTC5wdXNoKCIiKTtmb3IodmFyIFE9MDtRPHkuU2hlZXROYW1lcy5sZW5ndGg7KytRKUwucHVzaChTcigiV29ya3NoZWV0IixWZShRLFAseSks'@;
put 'eyJzczpOYW1lIjpIcih5LlNoZWV0TmFtZXNbUV0pfSkpO3JldHVybiBMWzJdPWZ1bmN0aW9uIEtMKHksUCl7dmFyIFE9W1snPFN0eWxlIHNzOklEPSJEZWZhdWx0IiBzczpOYW1lPSJOb3JtYWwiPicsJzxBbGlnbm1lbnQgc3M6VmVydGljYWw9IkJvdHRvbSIvPicsIjxCb3JkZXJzLz4iLCc8'@;
put 'Rm9udCBzczpGb250TmFtZT0iQ2FsaWJyaSIgeDpGYW1pbHk9IlN3aXNzIiBzczpTaXplPSIxMiIgc3M6Q29sb3I9IiMwMDAwMDAiLz4nLCI8SW50ZXJpb3IvPiIsIjxOdW1iZXJGb3JtYXQvPiIsIjxQcm90ZWN0aW9uLz4iLCI8L1N0eWxlPiJdLmpvaW4oIiIpXTtyZXR1cm4gUC5jZWxsWGZz'@;
put 'LmZvckVhY2goZnVuY3Rpb24ocmUscGUpe3ZhciBfZT1bXTtpZihyZS5hbGlnbm1lbnQpe3ZhciB2ZT17fTtyZS5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJih2ZVsic3M6U2hyaW5rVG9GaXQiXT0iMSIpLHJlLmFsaWdubWVudC53cmFwVGV4dCYmKHZlWyJzczpXcmFwVGV4dCJdPSIxIikscmUu'@;
put 'YWxpZ25tZW50LnZlcnRpY2FsJiYodmVbInNzOlZlcnRpY2FsIl09d3QocmUuYWxpZ25tZW50LnZlcnRpY2FsKSkscmUuYWxpZ25tZW50Lmhvcml6b250YWwmJih2ZVsic3M6SG9yaXpvbnRhbCJdPXd0KHJlLmFsaWdubWVudC5ob3Jpem9udGFsKSkscmUuYWxpZ25tZW50LmluZGVudCYmKHZl'@;
put 'WyJzczpJbmRlbnQiXT1yZS5hbGlnbm1lbnQuaW5kZW50KSxyZS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uJiYodmVbInNzOlJvdGF0ZSJdPXJlLmFsaWdubWVudC50ZXh0Um90YXRpb24pLF9lLnB1c2goU3IoIkFsaWdubWVudCIsbnVsbCx2ZSkpfWU6aWYobnVsbCE9cmUuZm9udElkKXt2YXIg'@;
put 'U2U9UC5Gb250c1tyZS5mb250SWRdO2lmKCFTZSlicmVhayBlO3ZhciBIZT17InNzOkZvbnROYW1lIjoiQ2FsaWJyaSIsInNzOlNpemUiOiIxMiJ9LEJlPSExO1NlLmJvbGQmJihCZT0hMCxIZVsic3M6Qm9sZCJdPSIxIiksU2UuaXRhbGljJiYoQmU9ITAsSGVbInNzOkl0YWxpYyJdPSIxIiks'@;
put 'U2Uuc3RyaWtlJiYoQmU9ITAsSGVbInNzOlN0cmlrZVRocm91Z2giXT0iMSIpLG51bGwhPVNlLnVuZGVybGluZSYmKEJlPSEwLEhlWyJzczpVbmRlcmxpbmUiXT11TVtTZS51bmRlcmxpbmVdfHwoU2UudW5kZXJsaW5lPyJTaW5nbGUiOiJOb25lIikpLG51bGwhPVNlLnN6JiYoQmU9ITAsSGVb'@;
put 'InNzOlNpemUiXT1TZS5zeiksbnVsbCE9U2UubmFtZSYmKEJlPSEwLEhlWyJzczpGb250TmFtZSJdPVNlLm5hbWUpLFNlLmNvbG9yJiZudWxsIT1TZS5jb2xvci5yZ2ImJihCZT0hMCxIZVsic3M6Q29sb3IiXT0iIyIrKCJudW1iZXIiPT10eXBlb2YgU2UuY29sb3IucmdiPyIwMDAwMDAiK1Nl'@;
put 'LmNvbG9yLnJnYi50b1N0cmluZygxNik6U2UuY29sb3IucmdiKS5zbGljZSgtNikpLFsic3ViIiwic3VwZXIiXS5pbmRleE9mKFNlLnZhbGlnbik+LTEmJihIZVsic3M6VmVydGljYWxBbGlnbiJdPXd0KFNlLnZhbGlnbikrInNjcmlwdCIpLEJlJiZfZS5wdXNoKFNyKCJGb250IixudWxsLEhl'@;
put 'KSl9ZTppZihyZS5maWxsSWQ+MCl7dmFyIEdlPVAuRmlsbHNbcmUuZmlsbElkXTtpZighR2V8fCFHZS5mZ0NvbG9yfHxudWxsPT1HZS5mZ0NvbG9yLnJnYilicmVhayBlO19lLnB1c2goU3IoIkludGVyaW9yIixudWxsLHsic3M6UGF0dGVybiI6X0RbR2UucGF0dGVyblR5cGVdfHwiU29saWQi'@;
put 'LCJzczpDb2xvciI6IiMiKygibnVtYmVyIj09dHlwZW9mIEdlLmZnQ29sb3IucmdiPyIwMCIrR2UuZmdDb2xvci5yZ2IudG9TdHJpbmcoMTYpOkdlLmZnQ29sb3IucmdiKS5zbGljZSgtNil9KSl9X2UucHVzaChTcigiTnVtYmVyRm9ybWF0IixudWxsLHsic3M6Rm9ybWF0IjpIcih3Ll90YWJs'@;
put 'ZVtyZS5udW1GbXRJZF0pfSkpO3ZhciBudD17InNzOklEIjoicyIrKDIxK3BlKX07cmUuc3R5bGUmJihudFsic3M6TmFtZSJdPXJlLnN0eWxlKSxRLnB1c2goU3IoIlN0eWxlIixfZS5qb2luKCIiKSxudCkpfSksU3IoIlN0eWxlcyIsUS5qb2luKCIiKSl9KDAsUCksTFszXT1mdW5jdGlvbiB2'@;
put 'NSh5KXtpZighKCh5fHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIFA9eS5Xb3JrYm9vay5OYW1lcyxMPVtdLFE9MDtRPFAubGVuZ3RoOysrUSl7dmFyIHJlPVBbUV07bnVsbD09cmUuU2hlZXQmJihyZS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxMLnB1c2goVm4o'@;
put 'cmUpKSl9cmV0dXJuIFNyKCJOYW1lcyIsTC5qb2luKCIiKSl9KHkpLEJuK1NyKCJXb3JrYm9vayIsTC5qb2luKCIiKSx7eG1sbnM6V2kuc3MsInhtbG5zOm8iOldpLm8sInhtbG5zOngiOldpLngsInhtbG5zOnNzIjpXaS5zcywieG1sbnM6ZHQiOldpLmR0LCJ4bWxuczpodG1sIjpXaS5odG1s'@;
put 'fSl9ZnVuY3Rpb24ga3IoeSxQLEwsUSl7dmFyIHJlPUwscGU9W10sX2U9UC5zbGljZShQLmwsUC5sK3JlKTtpZihRJiZRLmVuYyYmUS5lbmMuaW5zaXR1JiZfZS5sZW5ndGg+MClzd2l0Y2goeS5uKXtjYXNlIkJPRiI6Y2FzZSJGaWxlUGFzcyI6Y2FzZSJGaWxlTG9jayI6Y2FzZSJJbnRlcmZh'@;
put 'Y2VIZHIiOmNhc2UiUlJESW5mbyI6Y2FzZSJSUkRIZWFkIjpjYXNlIlVzckV4Y2wiOmNhc2UiRU9GIjpRLmVuYy5pbnNpdHUodWUoe2xlbmd0aDpfZS5sZW5ndGh9KSwic2tpcCIpO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOlEuZW5jLmluc2l0dSh1ZSh7bGVuZ3RoOjR9KSwic2tpcCIpLF9l'@;
put 'PUJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKF9lLnNsaWNlKDAsNCkpLEJ1ZmZlci5mcm9tKFEuZW5jLmluc2l0dShfZS5zbGljZSg0KSkpXSk7YnJlYWs7ZGVmYXVsdDpfZT1RLmVuYy5pbnNpdHUoX2UpfUFycmF5LmlzQXJyYXkoUCkmJiFBcnJheS5pc0FycmF5KF9lKSYmKF9lPUFycmF5'@;
put 'LmZyb20oX2UpKSxwZS5wdXNoKF9lKSxQLmwrPXJlO2Zvcih2YXIgdmU9WDBbWW4oUCxQLmwpXSxTZT0wO251bGwhPXZlJiYiQ29udGludWUiPT09dmUubi5zbGljZSgwLDgpOylyZT1ZbihQLFAubCsyKSxTZT1QLmwrNCxRJiZRLmVuYyYmUS5lbmMuaW5zaXR1JiZRLmVuYy5pbnNpdHUodWUo'@;
put 'e2xlbmd0aDo0fSksInNraXAiKSwiQ29udGludWVGcnQiPT12ZS5uP1NlKz00OiJDb250aW51ZUZydCI9PXZlLm4uc2xpY2UoMCwxMSkmJihTZSs9MTIsUSYmUS5lbmMmJlEuZW5jLmluc2l0dSYmUS5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6OH0pLCJza2lwIikpLF9lPVAuc2xpY2UoU2UsUC5s'@;
put 'KzQrcmUpLFEmJlEuZW5jJiZRLmVuYy5pbnNpdHUmJl9lLmxlbmd0aD4wJiYoX2U9US5lbmMuaW5zaXR1KF9lKSkscGUucHVzaChfZSksUC5sKz00K3JlLHZlPVgwW1luKFAsUC5sKV07dmFyIEhlPVMocGUpO29sKEhlLDApO3ZhciBCZT0wO0hlLmxlbnM9W107Zm9yKHZhciBHZT0wO0dlPHBl'@;
put 'Lmxlbmd0aDsrK0dlKUhlLmxlbnMucHVzaChCZSksQmUrPXBlW0dlXS5sZW5ndGg7aWYoSGUubGVuZ3RoPEwpdGhyb3ciWExTIFJlY29yZCAiKyh5JiZ5Lm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK0hlLmxlbmd0aCsiIDwgIitMO3JldHVybiB5LmYoSGUsSGUubGVuZ3RoLFEpfWZ1bmN0aW9u'@;
put 'IHhjKHksUCxMKXtpZigieiIhPT15LnQmJnkuWEYpe3ZhciBRPTA7dHJ5e1E9eS56fHx5LlhGLm51bUZtdElkfHwwLFAuY2VsbE5GJiYoeS56PXcuX3RhYmxlW1FdKX1jYXRjaChwZSl7aWYoUC5XVEYpdGhyb3cgcGV9aWYoIVB8fCExIT09UC5jZWxsVGV4dCl0cnl7eS53PSJlIj09PXkudD95'@;
put 'Lnd8fFFvW3kudl06MD09PVF8fCJHZW5lcmFsIj09UT8ibiI9PT15LnQ/KDB8eS52KT09PXkudj93Ll9nZW5lcmFsX2ludCh5LnYpOncuX2dlbmVyYWxfbnVtKHkudik6dy5fZ2VuZXJhbCh5LnYpOncuZm9ybWF0KFEseS52LHtkYXRlMTkwNDohIUwsZGF0ZU5GOlAmJlAuZGF0ZU5GfSl9Y2F0'@;
put 'Y2gocGUpe2lmKFAuV1RGKXRocm93IHBlfWlmKFAuY2VsbERhdGVzJiZRJiYibiI9PXkudCYmdy5pc19kYXRlKHcuX3RhYmxlW1FdfHxTdHJpbmcoUSkpKXt2YXIgcmU9dy5wYXJzZV9kYXRlX2NvZGUoeS52KTtyZSYmKHkudD0iZCIseS52PW5ldyBEYXRlKHJlLnkscmUubS0xLHJlLmQscmUu'@;
put 'SCxyZS5NLHJlLlMscmUudSkpfX19ZnVuY3Rpb24gWDIoeSxQLEwpe3JldHVybnt2OnksaXhmZTpQLHQ6TH19dmFyIF9NPWZ1bmN0aW9uKHksUCxMKXtQWyIhb2JqZWN0cyJdPXl9LHJwPXtTSToiZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiLERTSToiMDJkNWNkZDU5YzJlMWIx'@;
put 'MDkzOTcwODAwMmIyY2Y5YWUiLFVESToiMDVkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUifTtmdW5jdGlvbiBfNSh5LFApe3ZhciBMLFEscmUscGU7aWYoUHx8KFA9e30pLFA2KFApLFYoKSxQLmNvZGVwYWdlJiZrKFAuY29kZXBhZ2UpLHkuRnVsbFBhdGhzKXtpZihqZS5maW5kKHks'@;
put 'Ii9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO0w9amUuZmluZCh5LCIhQ29tcE9iaiIpLFE9amUuZmluZCh5LCIvV29ya2Jvb2siKXx8amUuZmluZCh5LCIvQm9vayIpfWVsc2V7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOnk9'@;
put 'RChzZS5kZWNvZGUoeSkpO2JyZWFrO2Nhc2UiYmluYXJ5Ijp5PUQoeSk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoeSl8fCh5PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHkpKX1vbCh5LDApLFE9e2NvbnRlbnQ6eX19aWYoTCYmZnVuY3Rp'@;
put 'b24gVGkoeSl7dmFyIFA9e30sTD15LmNvbnRlbnQ7aWYoTC5sPTI4LFAuQW5zaVVzZXJUeXBlPUwucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksUC5BbnNpQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIGc0KHkpe3JldHVybiBwNCh5LDEpfShMKSxMLmxlbmd0aC1MLmw8PTQpcmV0dXJuIFA7'@;
put 'dmFyIFE9TC5yZWFkX3NoaWZ0KDQpO2lmKDA9PVF8fFE+NDB8fChMLmwtPTQsUC5SZXNlcnZlZDE9TC5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxMLmxlbmd0aC1MLmw8PTQpfHwxOTA3NTA1NjUyIT09KFE9TC5yZWFkX3NoaWZ0KDQpKXx8KFAuVW5pY29kZUNsaXBib2FyZEZvcm1hdD1m'@;
put 'dW5jdGlvbiBKNyh5KXtyZXR1cm4gcDQoeSwyKX0oTCksMD09KFE9TC5yZWFkX3NoaWZ0KDQpKXx8UT40MCkpcmV0dXJuIFA7TC5sLT00LFAuUmVzZXJ2ZWQyPUwucmVhZF9zaGlmdCgwLCJscHdzdHIiKX0oTCksUC5ib29rUHJvcHMmJiFQLmJvb2tTaGVldHMpcmU9e307ZWxzZXt2YXIgX2U9'@;
put 'aGU/ImJ1ZmZlciI6ImFycmF5IjtpZihRJiZRLmNvbnRlbnQpcmU9ZnVuY3Rpb24gYk0oeSxQKXt2YXIgTD17b3B0czp7fX0sUT17fTtudWxsIT10ZSYmbnVsbD09UC5kZW5zZSYmKFAuZGVuc2U9dGUpO3ZhciBHZSxkdCxjdCxidCxUdCxadCxyZT1QLmRlbnNlP1tdOnt9LHBlPXt9LF9lPXt9'@;
put 'LHZlPW51bGwsU2U9W10sSGU9IiIsQmU9e30sbnQ9IiIsRnQ9e30sRXQ9W10scG49W10sS249W10sdW49e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0scW49e30sem49e0ZvbnRzOltdfSxrbj1mdW5jdGlvbihKcil7cmV0dXJuIEpyPDg/Q3JbSnJdOkpyPDY0'@;
put 'JiZLbltKci04XXx8Q3JbSnJdfSxlcj1mdW5jdGlvbihKcix3cyl7dmFyIG1sLHZzPUpyLlhGLmRhdGE7dnMmJih2cy5wYXR0ZXJuVHlwZXx8bnVsbCE9dnMuaWN2Rm9yZSkmJndzJiZ3cy5jZWxsU3R5bGVzJiYoSnIucz17fSxKci5zLnBhdHRlcm5UeXBlPXZzLnBhdHRlcm5UeXBlLEpyLlhG'@;
put 'LmZvbnQmJlV0KEpyLnMsSnIuWEYuZm9udCksdnMuZldyYXAmJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSx2cy5mU2hyaW5rVG9GaXQmJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLnNocmlua1RvRml0PSEwKSx2cy5o'@;
put 'YWxpZ24mJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLmhvcml6b250YWw9dnMuaGFsaWduKSx2cy52YWxpZ24mJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLnZlcnRpY2FsPXZzLnZhbGlnbiksdnMuY0luZGVudCYmKChKci5zLmFsaWdubWVu'@;
put 'dHx8KEpyLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PXZzLmNJbmRlbnQpLDY0IT12cy5pY3ZGb3JlJiY2NSE9dnMuaWN2QmFjayYmKChtbD16MShrbih2cy5pY3ZGb3JlKSkpJiYoSnIucy5mZ0NvbG9yPXtyZ2I6bWx9KSwobWw9ejEoa24odnMuaWN2QmFjaykpKSYmKEpyLnMuYmdDb2xvcj17'@;
put 'cmdiOm1sfSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihqbCl7dnNbImRnIitqbF0mJihKci5zW2psLnRvTG93ZXJDYXNlKCldPXtzdHlsZTpXMlt2c1siZGciK2psXV0sY29sb3I6e3JnYjp6MShrbih2c1siaWN2IitqbF0pKX19KX0pKX0sdHI9'@;
put 'ZnVuY3Rpb24oSnIsd3MsdnMpe2lmKCEoQ2k+MXx8dnMuc2hlZXRSb3dzJiZKci5yPj12cy5zaGVldFJvd3MpKXtpZih2cy5jZWxsU3R5bGVzJiZ3cy5YRiYmd3MuWEYuZGF0YSYmZXIod3MsdnMpLGRlbGV0ZSB3cy5peGZlLGRlbGV0ZSB3cy5YRixHZT1KcixudD1kaShKciksKCFfZXx8IV9l'@;
put 'LnN8fCFfZS5lKSYmKF9lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLEpyLnI8X2Uucy5yJiYoX2Uucy5yPUpyLnIpLEpyLmM8X2Uucy5jJiYoX2Uucy5jPUpyLmMpLEpyLnIrMT5fZS5lLnImJihfZS5lLnI9SnIucisxKSxKci5jKzE+X2UuZS5jJiYoX2UuZS5jPUpyLmMrMSksdnMuY2Vs'@;
put 'bEZvcm11bGEmJndzLmYpZm9yKHZhciBtbD0wO21sPEV0Lmxlbmd0aDsrK21sKWlmKCEoRXRbbWxdWzBdLnMuYz5Kci5jfHxFdFttbF1bMF0ucy5yPkpyLnJ8fEV0W21sXVswXS5lLmM8SnIuY3x8RXRbbWxdWzBdLmUucjxKci5yKSl7d3MuRj1PbyhFdFttbF1bMF0pLChFdFttbF1bMF0ucy5j'@;
put 'IT1Kci5jfHxFdFttbF1bMF0ucy5yIT1Kci5yKSYmZGVsZXRlIHdzLmYsd3MuZiYmKHdzLmY9IiIreGwoRXRbbWxdWzFdLF9lLEpyLFNuLFpuKSk7YnJlYWt9dnMuZGVuc2U/KHJlW0pyLnJdfHwocmVbSnIucl09W10pLHJlW0pyLnJdW0pyLmNdPXdzKTpyZVtudF09d3N9fSxabj17ZW5jOiEx'@;
put 'LHNiY2NoOjAsc25hbWVzOltdLHNoYXJlZGY6RnQsYXJyYXlmOkV0LHJydGFiaWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIVAmJiEhUC5jZWxsU3R5bGVzLFdURjohIVAmJiEhUC53dGZ9O1puLnBhc3N3b3JkPVAucGFzc3dvcmQ/'@;
put 'UC5wYXNzd29yZDoiVmVsdmV0U3dlYXRzaG9wIjt2YXIgb2ksVnI9bnVsbCxraT1bXSxMaT1bXSxRcj1bXSx1cj1bXSxycj0hMSxTbj1bXTtTbi5TaGVldE5hbWVzPVpuLnNuYW1lcyxTbi5zaGFyZWRmPVpuLnNoYXJlZGYsU24uYXJyYXlmPVpuLmFycmF5ZixTbi5uYW1lcz1bXSxTbi5YVEk9'@;
put 'W107dmFyIERpLHByPSIiLENpPTAsanI9MCxqaT1bXSxfbz1bXTtabi5jb2RlcGFnZT0xMjAwLGooMTIwMCk7Zm9yKHZhciBZbz0hMTt5Lmw8eS5sZW5ndGgtMTspe3ZhciBsbz15LmwsQW89eS5yZWFkX3NoaWZ0KDIpO2lmKFpuJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNp'@;
put 'dHUodWUoWzAsMF0pLCJoZWFkZXItMCIpLDA9PT1BbyYmIkVPRiI9PT1wcilicmVhazt2YXIgeG89eS5sPT09eS5sZW5ndGg/MDp5LnJlYWRfc2hpZnQoMik7Wm4mJlpuLmVuYyYmWm4uZW5jLmluc2l0dSYmWm4uZW5jLmluc2l0dSh1ZShbMCwwXSksImxlbmd0aC0wIik7dmFyIGhpPVgwW0Fv'@;
put 'XTtpZihoaSYmaGkuZil7aWYoUC5ib29rU2hlZXRzJiYiQm91bmRTaGVldDgiPT09cHImJiJCb3VuZFNoZWV0OCIhPT1oaS5uKWJyZWFrO2lmKHByPWhpLm4sMj09PWhpLnJ8fDEyPT1oaS5yKXt2YXIgdGE9eS5yZWFkX3NoaWZ0KDIpO2lmKHhvLT0yLFpuJiZabi5lbmMmJlpuLmVuYy5pbnNp'@;
put 'dHUmJlpuLmVuYy5pbnNpdHUodWUoWzAsMF0pKSwhWm4uZW5jJiZ0YSE9PUFvJiYoKDI1NSZ0YSk8PDh8dGE+PjgpIT09QW8pdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIit0YSsiIT0iK0FvKTsxMj09aGkuciYmKHkubCs9MTAseG8tPTEwLFpuJiZabi5lbmMmJlpuLmVuYy5pbnNp'@;
put 'dHUmJlpuLmVuYy5pbnNpdHUodWUoWzAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpfXZhciBNbj1rcihoaSx5LHhvLFpuKSxNcz1oaS5uO2lmKDA9PUNpJiYiQk9GIiE9TXMpY29udGludWU7c3dpdGNoKE1zKXtjYXNlIkRhdGUxOTA0IjpMLm9wdHMuRGF0ZTE5MDQ9dW4uV0JQcm9wcy5kYXRlMTkw'@;
put 'ND1NbjticmVhaztjYXNlIldyaXRlUHJvdGVjdCI6TC5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIkZpbGVQYXNzIjppZihabi5lbmN8fCh5Lmw9MCxDaT0wKSxabi5lbmM9TW4sIVAucGFzc3dvcmQmJm51bGw9PU1uLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNz'@;
put 'd29yZC1wcm90ZWN0ZWQiKTtpZihudWxsPT1Nbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gc2NoZW1lIHVuc3VwcG9ydGVkIik7aWYoIU1uLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSJXcml0ZUFjY2VzcyI6Wm4u'@;
put 'bGFzdHVzZXI9TW47YnJlYWs7Y2FzZSJGaWxlU2hhcmluZyI6Y2FzZSJUZW1wbGF0ZSI6Y2FzZSJCb29rQm9vbCI6Y2FzZSJVc2VzRUxGcyI6Y2FzZSJNVFJTZXR0aW5ncyI6Y2FzZSJVbmNhbGNlZCI6Y2FzZSJFeHRTU1QiOmNhc2UiQm9va0V4dCI6Y2FzZSJSaWNoVGV4dFN0cmVhbSI6Y2Fz'@;
put 'ZSJCa0hpbSI6Y2FzZSJJbmRleCI6Y2FzZSJQcm90NFJldiI6Y2FzZSJQcm90NFJldlBhc3MiOmJyZWFrO2Nhc2UiQ29kZVBhZ2UiOnZhciB5cz1OdW1iZXIoTW4pO3N3aXRjaCh5cyl7Y2FzZSAyMTAxMDp5cz0xMjAwO2JyZWFrO2Nhc2UgMzI3Njg6eXM9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6'@;
put 'eXM9MTI1Mn1qKFpuLmNvZGVwYWdlPXlzKSxZbz0hMDticmVhaztjYXNlIlJSVGFiSWQiOlpuLnJydGFiaWQ9TW47YnJlYWs7Y2FzZSJXaW5Qcm90ZWN0Ijpabi53aW5sb2NrZWQ9TW47YnJlYWs7Y2FzZSJSZWZyZXNoQWxsIjpjYXNlIkNhbGNDb3VudCI6Y2FzZSJDYWxjRGVsdGEiOmNhc2Ui'@;
put 'Q2FsY0l0ZXIiOmNhc2UiQ2FsY01vZGUiOmNhc2UiQ2FsY1ByZWNpc2lvbiI6Y2FzZSJDYWxjU2F2ZVJlY2FsYyI6TC5vcHRzW01zXT1NbjticmVhaztjYXNlIkNhbGNSZWZNb2RlIjpabi5DYWxjUmVmTW9kZT1NbjticmVhaztjYXNlIkZvcmNlRnVsbENhbGN1bGF0aW9uIjpMLm9wdHMuRnVs'@;
put 'bENhbGM9TW47YnJlYWs7Y2FzZSJXc0Jvb2wiOk1uLmZEaWFsb2cmJihyZVsiIXR5cGUiXT0iZGlhbG9nIiksTW4uZkJlbG93fHwoKHJlWyIhb3V0bGluZSJdfHwocmVbIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksTW4uZlJpZ2h0fHwoKHJlWyIhb3V0bGluZSJdfHwocmVbIiFvdXRsaW5l'@;
put 'Il09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjpNbi5mb250PXpuLkZvbnRzW01uLmlmbnQ8ND9Nbi5pZm50Ok1uLmlmbnQtMV0scG4ucHVzaChNbik7YnJlYWs7Y2FzZSJTdXBCb29rIjpTbi5wdXNoKFtNbl0pLFNuW1NuLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSJFeHRlcm5O'@;
put 'YW1lIjpTbltTbi5sZW5ndGgtMV0ucHVzaChNbik7YnJlYWs7Y2FzZSJMYmwiOkRpPXtOYW1lOk1uLk5hbWUsUmVmOnhsKE1uLnJnY2UsX2UsbnVsbCxTbixabil9LE1uLml0YWI+MCYmKERpLlNoZWV0PU1uLml0YWItMSksU24ubmFtZXMucHVzaChEaSksU25bMF18fChTblswXT1bXSxTblsw'@;
put 'XS5YVEk9W10pLFNuW1NuLmxlbmd0aC0xXS5wdXNoKE1uKSwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09TW4uTmFtZSYmTW4uaXRhYj4wJiZNbi5yZ2NlJiZNbi5yZ2NlWzBdJiZNbi5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09TW4ucmdjZVswXVswXVswXSYmKF9vW01uLml0YWItMV09e3Jl'@;
put 'ZjpPbyhNbi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291bnQiOlpuLkV4dGVybkNvdW50PU1uO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PVNuLmxlbmd0aCYmKFNuWzBdPVtdLFNuWzBdLlhUST1bXSksU25bU24ubGVuZ3RoLTFdLlhUST1TbltTbi5sZW5ndGgt'@;
put 'MV0uWFRJLmNvbmNhdChNbiksU24uWFRJPVNuLlhUSS5jb25jYXQoTW4pO2JyZWFrO2Nhc2UiTmFtZUNtdCI6aWYoWm4uYmlmZjw4KWJyZWFrO251bGwhPURpJiYoRGkuQ29tbWVudD1NblsxXSk7YnJlYWs7Y2FzZSJQcm90ZWN0IjpyZVsiIXByb3RlY3QiXT1NbjticmVhaztjYXNlIlBhc3N3'@;
put 'b3JkIjowIT09TW4mJlpuLldURiYmY29uc29sZS5lcnJvcigiUGFzc3dvcmQgdmVyaWZpZXI6ICIrTW4pO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOnBlW01uLnBvc109TW4sWm4uc25hbWVzLnB1c2goTW4ubmFtZSk7YnJlYWs7Y2FzZSJFT0YiOmlmKHJlWyIhZ3JpZGxpbmVzIl09IVZyfHxW'@;
put 'ci5ncmlkLFZyPW51bGwsLS1DaSlicmVhaztpZihfZS5lKXtpZihfZS5lLnI+MCYmX2UuZS5jPjApe2lmKF9lLmUuci0tLF9lLmUuYy0tLHJlWyIhcmVmIl09T28oX2UpLFAuc2hlZXRSb3dzJiZQLnNoZWV0Um93czw9X2UuZS5yKXt2YXIgRWw9X2UuZS5yO19lLmUucj1QLnNoZWV0Um93cy0x'@;
put 'LHJlWyIhZnVsbHJlZiJdPXJlWyIhcmVmIl0scmVbIiFyZWYiXT1PbyhfZSksX2UuZS5yPUVsfV9lLmUucisrLF9lLmUuYysrfWtpLmxlbmd0aD4wJiYocmVbIiFtZXJnZXMiXT1raSksTGkubGVuZ3RoPjAmJl9NKExpLHJlLHpuKSxRci5sZW5ndGg+MCYmKHJlWyIhY29scyJdPVFyKSx1ci5s'@;
put 'ZW5ndGg+MCYmKHJlWyIhcm93cyJdPXVyKSx1bi5TaGVldHMucHVzaChxbil9IiI9PT1IZT9CZT1yZTpRW0hlXT1yZSxyZT1QLmRlbnNlP1tdOnt9O2JyZWFrO2Nhc2UiQk9GIjppZig4PT09Wm4uYmlmZiYmKFpuLmJpZmY9ezk6Miw1MjE6MywxMDMzOjR9W0FvXXx8ezUxMjoyLDc2ODozLDEw'@;
put 'MjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W01uLkJJRkZWZXJdfHw4KSxabi5iaWZmZ3Vlc3M9MD09TW4uQklGRlZlciwwPT1Nbi5CSUZGVmVyJiY0MDk2PT1Nbi5kdCYmKFpuLmJpZmY9NSxZbz0hMCxqKFpuLmNvZGVwYWdlPTI4NTkxKSksOD09Wm4uYmlmZiYmMD09TW4uQklGRlZlciYm'@;
put 'MTY9PU1uLmR0JiYoWm4uYmlmZj0yKSxDaSsrKWJyZWFrO2lmKHJlPVAuZGVuc2U/W106e30sWm4uYmlmZjw4JiYhWW8mJihZbz0hMCxqKFpuLmNvZGVwYWdlPVAuY29kZXBhZ2V8fDEyNTIpKSxabi5iaWZmPDV8fDA9PU1uLkJJRkZWZXImJjQwOTY9PU1uLmR0KXsiIj09PUhlJiYoSGU9IlNo'@;
put 'ZWV0MSIpLF9lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07dmFyIHNsPXtwb3M6eS5sLXhvLG5hbWU6SGV9O3BlW3NsLnBvc109c2wsWm4uc25hbWVzLnB1c2goSGUpfWVsc2UgSGU9KHBlW2xvXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1Nbi5kdCYmKHJlWyIhdHlwZSJdPSJjaGFydCIpLDY0'@;
put 'PT1Nbi5kdCYmKHJlWyIhdHlwZSJdPSJtYWNybyIpLGtpPVtdLExpPVtdLFpuLmFycmF5Zj1FdD1bXSxRcj1bXSx1cj1bXSxycj0hMSxxbj17SGlkZGVuOihwZVtsb118fHtoczowfSkuaHMsbmFtZTpIZX07YnJlYWs7Y2FzZSJOdW1iZXIiOmNhc2UiQklGRjJOVU0iOmNhc2UiQklGRjJJTlQi'@;
put 'OiJjaGFydCI9PXJlWyIhdHlwZSJdJiYoUC5kZW5zZT8ocmVbTW4ucl18fFtdKVtNbi5jXTpyZVtkaSh7YzpNbi5jLHI6TW4ucn0pXSkmJisrTW4uYyxUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdfHx7fSx2Ok1uLnZhbCx0OiJuIn0sanI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2'@;
put 'M10pLHhjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCk7YnJlYWs7Y2FzZSJCb29sRXJyIjpUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdLHY6TW4udmFsLHQ6TW4udH0sanI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLHhjKFR0LFAsTC5v'@;
put 'cHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCk7YnJlYWs7Y2FzZSJSSyI6VHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZlXSx2Ok1uLnJrbnVtLHQ6Im4ifSxqcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSkseGMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtj'@;
put 'Ok1uLmMscjpNbi5yfSxUdCxQKTticmVhaztjYXNlIk11bFJrIjpmb3IodmFyIGdsPU1uLmM7Z2w8PU1uLkM7KytnbCl7dmFyIG51PU1uLnJrcmVjW2dsLU1uLmNdWzBdO1R0PXtpeGZlOm51LFhGOnBuW251XSx2Ok1uLnJrcmVjW2dsLU1uLmNdWzFdLHQ6Im4ifSxqcj4wJiYoVHQuej1qaVtU'@;
put 'dC5peGZlPj44JjYzXSkseGMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOmdsLHI6TW4ucn0sVHQsUCl9YnJlYWs7Y2FzZSJGb3JtdWxhIjppZigiU3RyaW5nIj09TW4udmFsKXt2ZT1NbjticmVha31pZigoVHQ9WDIoTW4udmFsLE1uLmNlbGwuaXhmZSxNbi50dCkpLlhGPXBuW1R0Lml4'@;
put 'ZmVdLFAuY2VsbEZvcm11bGEpe3ZhciB0bD1Nbi5mb3JtdWxhO2lmKHRsJiZ0bFswXSYmdGxbMF1bMF0mJiJQdGdFeHAiPT10bFswXVswXVswXSl7dmFyIEt0PXRsWzBdWzBdWzFdWzBdLGduPXRsWzBdWzBdWzFdWzFdLExuPWRpKHtyOkt0LGM6Z259KTtGdFtMbl0/VHQuZj0iIit4bChNbi5m'@;
put 'b3JtdWxhLF9lLE1uLmNlbGwsU24sWm4pOlR0LkY9KChQLmRlbnNlPyhyZVtLdF18fFtdKVtnbl06cmVbTG5dKXx8e30pLkZ9ZWxzZSBUdC5mPSIiK3hsKE1uLmZvcm11bGEsX2UsTW4uY2VsbCxTbixabil9anI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLHhjKFR0LFAsTC5vcHRzLkRh'@;
put 'dGUxOTA0KSx0cihNbi5jZWxsLFR0LFApLHZlPU1uO2JyZWFrO2Nhc2UiU3RyaW5nIjppZighdmUpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO3ZlLnZhbD1NbiwoVHQ9WDIoTW4sdmUuY2VsbC5peGZlLCJzIikpLlhGPXBuW1R0Lml4ZmVdLFAuY2Vs'@;
put 'bEZvcm11bGEmJihUdC5mPSIiK3hsKHZlLmZvcm11bGEsX2UsdmUuY2VsbCxTbixabikpLGpyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIodmUuY2VsbCxUdCxQKSx2ZT1udWxsO2JyZWFrO2Nhc2UiQXJyYXkiOkV0LnB1c2goTW4pO3Zh'@;
put 'ciBXcj1kaShNblswXS5zKTtpZihkdD1QLmRlbnNlPyhyZVtNblswXS5zLnJdfHxbXSlbTW5bMF0ucy5jXTpyZVtXcl0sUC5jZWxsRm9ybXVsYSYmZHQpe2lmKCF2ZXx8IVdyfHwhZHQpYnJlYWs7ZHQuZj0iIit4bChNblsxXSxfZSxNblswXSxTbixabiksZHQuRj1PbyhNblswXSl9YnJlYWs7'@;
put 'Y2FzZSJTaHJGbWxhIjppZighUC5jZWxsRm9ybXVsYSlicmVhaztpZihudCl7aWYoIXZlKWJyZWFrO0Z0W2RpKHZlLmNlbGwpXT1NblswXSwoKGR0PVAuZGVuc2U/KHJlW3ZlLmNlbGwucl18fFtdKVt2ZS5jZWxsLmNdOnJlW2RpKHZlLmNlbGwpXSl8fHt9KS5mPSIiK3hsKE1uWzBdLF9lLEdl'@;
put 'LFNuLFpuKX1icmVhaztjYXNlIkxhYmVsU3N0IjpUdD1YMihTZVtNbi5pc3N0XS50LE1uLml4ZmUsInMiKSxTZVtNbi5pc3N0XS5oJiYoVHQuaD1TZVtNbi5pc3N0XS5oKSxUdC5YRj1wbltUdC5peGZlXSxqcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSkseGMoVHQsUCxMLm9wdHMuRGF0'@;
put 'ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKSxTZVtNbi5pc3N0XS5SJiYoVHQuUj1TZVtNbi5pc3N0XS5SLm1hcChmdW5jdGlvbih6aSl7dmFyIEpyPW9uKHppKTtyZXR1cm4gemkucz09em4uRm9udHNbMF0mJihKci5zPVR0LnMpLEpyfSkpO2JyZWFrO2Nhc2UiQmxhbmsiOlAuc2hl'@;
put 'ZXRTdHVicyYmKFR0PXtpeGZlOk1uLml4ZmUsWEY6cG5bTW4uaXhmZV0sdDoieiJ9LGpyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApKTticmVhaztjYXNlIk11bEJsYW5rIjppZihQLnNoZWV0U3R1'@;
put 'YnMpZm9yKHZhciBYbj1Nbi5jO1huPD1Nbi5DOysrWG4pe3ZhciBlaT1Nbi5peGZlW1huLU1uLmNdO1R0PXtpeGZlOmVpLFhGOnBuW2VpXSx0OiJ6In0sanI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLHhjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpYbixyOk1uLnJ9LFR0LFAp'@;
put 'fWJyZWFrO2Nhc2UiUlN0cmluZyI6Y2FzZSJMYWJlbCI6Y2FzZSJCSUZGMlNUUiI6KFR0PVgyKE1uLnZhbCxNbi5peGZlLCJzIikpLlhGPXBuW1R0Lml4ZmVdLGpyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9'@;
put 'LFR0LFApO2JyZWFrO2Nhc2UiRGltZW5zaW9ucyI6MT09PUNpJiYoX2U9TW4pO2JyZWFrO2Nhc2UiU1NUIjooU2U9TW4pLmZvckVhY2goZnVuY3Rpb24oemkpe3ppLl9SPyh6aS5fUlswXSYmemkuX1JbMF0uaWR4PjAmJnppLl9SLnVuc2hpZnQoe2lkeDowLGlmbnQ6MH0pLHppLlI9emkuX1Iu'@;
put 'bWFwKGZ1bmN0aW9uKEpyLHdzKXtyZXR1cm57dDoicyIsdjp6aS50LnNsaWNlKEpyLmlkeCwoemkuX1Jbd3MrMV18fHt9KS5pZHgpLHM6em4uRm9udHNbSnIuaWZudDw0P0pyLmlmbnQ6SnIuaWZudC0xXX19KSxQLmNlbGxIVE1MJiYoemkuaD1rOSh6aS5SKSkpOlAuY2VsbEhUTUwmJih6aS5o'@;
put 'PXJvKHppLnQpKSxkZWxldGUgemkuX1J9KTticmVhaztjYXNlIkZvcm1hdCI6aWYoND09Wm4uYmlmZil7amlbanIrK109TW5bMV07Zm9yKHZhciBpcj0wO2lyPGpyKzE2MyYmdy5fdGFibGVbaXJdIT1NblsxXTsrK2lyKTtpcj49MTYzJiZ3LmxvYWQoTW5bMV0sanIrMTYzKX1lbHNlIHcubG9h'@;
put 'ZChNblsxXSxNblswXSk7YnJlYWs7Y2FzZSJCSUZGMkZPUk1BVCI6amlbanIrK109TW47Zm9yKHZhciByaT0wO3JpPGpyKzE2MyYmdy5fdGFibGVbcmldIT1NbjsrK3JpKTtyaT49MTYzJiZ3LmxvYWQoTW4sanIrMTYzKTticmVhaztjYXNlIk1lcmdlQ2VsbHMiOmtpPWtpLmNvbmNhdChNbik7'@;
put 'YnJlYWs7Y2FzZSJPYmoiOkxpW01uLmNtb1swXV09Wm4ubGFzdG9iaj1NbjticmVhaztjYXNlIlR4TyI6Wm4ubGFzdG9iai5UeE89TW47YnJlYWs7Y2FzZSJJbURhdGEiOlpuLmxhc3RvYmouSW1EYXRhPU1uO2JyZWFrO2Nhc2UiSExpbmsiOmZvcihidD1NblswXS5zLnI7YnQ8PU1uWzBdLmUu'@;
put 'cjsrK2J0KWZvcihjdD1NblswXS5zLmM7Y3Q8PU1uWzBdLmUuYzsrK2N0KShkdD1QLmRlbnNlPyhyZVtidF18fFtdKVtjdF06cmVbZGkoe2M6Y3QscjpidH0pXSkmJihkdC5sPU1uWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKGJ0PU1uWzBdLnMucjtidDw9TW5bMF0uZS5yOysr'@;
put 'YnQpZm9yKGN0PU1uWzBdLnMuYztjdDw9TW5bMF0uZS5jOysrY3QpKGR0PVAuZGVuc2U/KHJlW2J0XXx8W10pW2N0XTpyZVtkaSh7YzpjdCxyOmJ0fSldKSYmZHQubCYmKGR0LmwuVG9vbHRpcD1NblsxXSk7YnJlYWs7Y2FzZSJOb3RlIjppZihabi5iaWZmPD01JiZabi5iaWZmPj0yKWJyZWFr'@;
put 'O2R0PVAuZGVuc2U/KHJlW01uWzBdLnJdfHxbXSlbTW5bMF0uY106cmVbZGkoTW5bMF0pXTt2YXIgbW89TGlbTW5bMl1dO2R0fHwoUC5kZW5zZT8ocmVbTW5bMF0ucl18fChyZVtNblswXS5yXT1bXSksZHQ9cmVbTW5bMF0ucl1bTW5bMF0uY109e3Q6InoifSk6ZHQ9cmVbZGkoTW5bMF0pXT17'@;
put 'dDoieiJ9LF9lLmUucj1NYXRoLm1heChfZS5lLnIsTW5bMF0uciksX2Uucy5yPU1hdGgubWluKF9lLnMucixNblswXS5yKSxfZS5lLmM9TWF0aC5tYXgoX2UuZS5jLE1uWzBdLmMpLF9lLnMuYz1NYXRoLm1pbihfZS5zLmMsTW5bMF0uYykpLGR0LmN8fChkdC5jPVtdKSxkdC5jLnB1c2goe2E6'@;
put 'TW5bMV0sdDptby5UeE8udH0pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKGhpLm4pe2Nhc2UiQ2xydENsaWVudCI6Y2FzZSJIZWFkZXIiOmNhc2UiRm9vdGVyIjpjYXNlIkhDZW50ZXIiOmNhc2UiVkNlbnRlciI6Y2FzZSJQbHMiOmNhc2UiR0NXIjpjYXNlIkxIUmVjb3JkIjpjYXNlIkRCQ2VsbCI6'@;
put 'Y2FzZSJFbnRFeFUyIjpjYXNlIlN4VmlldyI6Y2FzZSJTeHZkIjpjYXNlIlNYVkkiOmNhc2UiU1hWREV4IjpjYXNlIlN4SXZkIjpjYXNlIlNYU3RyaW5nIjpjYXNlIlN5bmMiOmNhc2UiQWRkaW4iOmNhc2UiU1hESSI6Y2FzZSJTWExJIjpjYXNlIlNYRXgiOmNhc2UiUXNpU1hUYWciOmNhc2Ui'@;
put 'RmVhdCI6Y2FzZSJGZWF0SGRyIjpjYXNlIkZlYXRIZHIxMSI6Y2FzZSJGZWF0dXJlMTEiOmNhc2UiRmVhdHVyZTEyIjpjYXNlIkxpc3QxMiI6Y2FzZSJSZWNhbGNJZCI6Y2FzZSJEeEdDb2wiOmNhc2UiRmJpIjpjYXNlIkZiaTIiOmNhc2UiR2VsRnJhbWUiOmNhc2UiWEZDUkMiOmNhc2UiU3R5'@;
put 'bGUiOmNhc2UiU3R5bGVFeHQiOmNhc2UiU2NlbmFyaW9Qcm90ZWN0IjpjYXNlIk9ialByb3RlY3QiOmNhc2UiQ29uZEZtdDEyIjpjYXNlIlRhYmxlIjpjYXNlIlRhYmxlU3R5bGVzIjpjYXNlIlRhYmxlU3R5bGUiOmNhc2UiVGFibGVTdHlsZUVsZW1lbnQiOmNhc2UiU1hTdHJlYW1JRCI6Y2Fz'@;
put 'ZSJTWFZTIjpjYXNlIkRDb25SZWYiOmNhc2UiU1hBZGRsIjpjYXNlIkRDb25CaW4iOmNhc2UiRENvbk5hbWUiOmNhc2UiU1hQSSI6Y2FzZSJTeEZvcm1hdCI6Y2FzZSJTeFNlbGVjdCI6Y2FzZSJTeFJ1bGUiOmNhc2UiU3hGaWx0IjpjYXNlIlN4SXRtIjpjYXNlIlN4RFhGIjpjYXNlIlNjZW5N'@;
put 'YW4iOmNhc2UiRENvbiI6Y2FzZSJDZWxsV2F0Y2giOmNhc2UiUHJpbnRSb3dDb2wiOmNhc2UiUHJpbnRHcmlkIjpjYXNlIlByaW50U2l6ZSI6Y2FzZSJYQ1QiOmNhc2UiQ1JOIjpjYXNlIlNjbCI6Y2FzZSJTaGVldEV4dCI6Y2FzZSJTaGVldEV4dE9wdGlvbmFsIjpjYXNlIk9iTm9NYWNyb3Mi'@;
put 'OmNhc2UiT2JQcm9qIjpjYXNlIkdVSURUeXBlTGliIjpjYXNlIldPcHQiOmNhc2UiUGhvbmV0aWNJbmZvIjpjYXNlIk9sZU9iamVjdFNpemUiOmNhc2UiRFhGIjpjYXNlIkRYRk4iOmNhc2UiRFhGTjEyIjpjYXNlIkRYRk4xMkxpc3QiOmNhc2UiRFhGTjEyTm9DQiI6Y2FzZSJEdiI6Y2FzZSJE'@;
put 'VmFsIjpjYXNlIkJSQUkiOmNhc2UiU2VyaWVzIjpjYXNlIlNlcmllc1RleHQiOmNhc2UiRENvbm4iOmNhc2UiRGJPclBhcmFtUXJ5IjpjYXNlIkRCUXVlcnlFeHQiOmNhc2UiT2xlRGJDb25uIjpjYXNlIkV4dFN0cmluZyI6Y2FzZSJJRm10UmVjb3JkIjpjYXNlIkNvbmRGbXQiOmNhc2UiQ0Yi'@;
put 'OmNhc2UiQ0YxMiI6Y2FzZSJDRkV4IjpjYXNlIkV4Y2VsOUZpbGUiOmNhc2UiVW5pdHMiOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIk1tcyI6Y2FzZSJJbnRlcmZhY2VFbmQiOmNhc2UiRFNGIjpjYXNlIkJ1aWx0SW5Gbkdyb3VwQ291bnQiOmNhc2UiV2luZG93MSI6Y2FzZSJIaWRlT2JqIjpj'@;
put 'YXNlIkdyaWRTZXQiOmNhc2UiR3V0cyI6Y2FzZSJVc2VyQlZpZXciOmNhc2UiVXNlclNWaWV3QmVnaW4iOmNhc2UiVXNlclNWaWV3RW5kIjpjYXNlIkRlZkNvbFdpZHRoIjpjYXNlIkRlZmF1bHRSb3dIZWlnaHQiOmJyZWFrO2Nhc2UiWEZFeHQiOlVEKHBuW01uLml4ZmVdLE1uLmV4dCk7YnJl'@;
put 'YWs7Y2FzZSJDb2xJbmZvIjppZighWm4uY2VsbFN0eWxlcylicmVhaztmb3IoO01uLmU+PU1uLnM7KVFyW01uLmUtLV09e3dpZHRoOk1uLncvMjU2LGxldmVsOk1uLmxldmVsfHwwLGhpZGRlbjohISgxJk1uLmZsYWdzKX0scnJ8fChycj0hMCkscHUoUXJbTW4uZSsxXSk7YnJlYWs7Y2FzZSJS'@;
put 'b3ciOnZhciBpaT17fTtudWxsIT1Nbi5sZXZlbCYmKHVyW01uLnJdPWlpLGlpLmxldmVsPU1uLmxldmVsKSxNbi5oaWRkZW4mJih1cltNbi5yXT1paSxpaS5oaWRkZW49ITApLE1uLmhwdCYmKHVyW01uLnJdPWlpLGlpLmhwdD1Nbi5ocHQsaWkuaHB4PVUxKE1uLmhwdCkpLE1uLml4ZmUmJih1'@;
put 'cltNbi5yXT1paSxlcihUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdfHx7fSx2OjAsdDoibiJ9LFApLGlpLnM9VHQucyk7YnJlYWs7Y2FzZSJMZWZ0TWFyZ2luIjpjYXNlIlJpZ2h0TWFyZ2luIjpjYXNlIlRvcE1hcmdpbiI6Y2FzZSJCb3R0b21NYXJnaW4iOnJlWyIhbWFyZ2lucyJd'@;
put 'fHxkZihyZVsiIW1hcmdpbnMiXT17fSkscmVbIiFtYXJnaW5zIl1bTXMuc2xpY2UoMCwtNikudG9Mb3dlckNhc2UoKV09TW47YnJlYWs7Y2FzZSJTZWxlY3Rpb24iOnJlWyIhc2VsIl09TW47YnJlYWs7Y2FzZSJTZXR1cCI6cmVbIiFtYXJnaW5zIl18fGRmKHJlWyIhbWFyZ2lucyJdPXt9KSxy'@;
put 'ZVsiIW1hcmdpbnMiXS5oZWFkZXI9TW4uaGVhZGVyLHJlWyIhbWFyZ2lucyJdLmZvb3Rlcj1Nbi5mb290ZXI7YnJlYWs7Y2FzZSJXaW5kb3cyIjpNbi5SVEwmJih1bi5WaWV3c1swXS5SVEw9ITApLFZyPU1uO2JyZWFrO2Nhc2UiQ291bnRyeSI6WnQ9TW47YnJlYWs7Y2FzZSJGb250IjpNbi5p'@;
put 'Y3YmJmtuKE1uLmljdikmJihNbi5jb2xvcj17cmdiOnoxKGtuKE1uLmljdikpfSksZGVsZXRlIE1uLmljdiwwPT16bi5Gb250cy5sZW5ndGgmJloxKE1uKSx6bi5Gb250cy5wdXNoKE1uKTticmVhaztjYXNlIlBhbGV0dGUiOktuPU1uO2JyZWFrO2Nhc2UiVGhlbWUiOm9pPU1uO2JyZWFrO2Nh'@;
put 'c2UiQ29kZU5hbWUiOkhlP3FuLkNvZGVOYW1lPU1ufHxxbi5uYW1lOnVuLldCUHJvcHMuQ29kZU5hbWU9TW58fCJUaGlzV29ya2Jvb2siO2JyZWFrO2Nhc2UiUGFuZSI6KFZyfHx7fSkuZnJvemVuJiYocmVbIiFmcmVlemUiXT1kaSh7cjpNbi55fHwwLGM6TW4ueHx8MH0pKTticmVhaztkZWZh'@;
put 'dWx0OnN3aXRjaChoaS5uKXtjYXNlIkRhdCI6Y2FzZSJCZWdpbiI6Y2FzZSJFbmQiOmNhc2UiU3RhcnRCbG9jayI6Y2FzZSJFbmRCbG9jayI6Y2FzZSJGcmFtZSI6Y2FzZSJBcmVhIjpjYXNlIkF4aXMiOmNhc2UiQXhpc0xpbmUiOmNhc2UiVGljayI6Y2FzZSJBeGVzVXNlZCI6Y2FzZSJDcnRM'@;
put 'YXlvdXQxMiI6Y2FzZSJDcnRMYXlvdXQxMkEiOmNhc2UiQ3J0TGluayI6Y2FzZSJDcnRMaW5lIjpjYXNlIkNydE1sRnJ0IjpjYXNlIkNydE1sRnJ0Q29udGludWUiOmNhc2UiTGluZUZvcm1hdCI6Y2FzZSJBcmVhRm9ybWF0IjpjYXNlIkNoYXJ0IjpjYXNlIkNoYXJ0M2QiOmNhc2UiQ2hhcnQz'@;
put 'REJhclNoYXBlIjpjYXNlIkNoYXJ0Rm9ybWF0IjpjYXNlIkNoYXJ0RnJ0SW5mbyI6Y2FzZSJQbG90QXJlYSI6Y2FzZSJQbG90R3Jvd3RoIjpjYXNlIlNlcmllc0xpc3QiOmNhc2UiU2VyUGFyZW50IjpjYXNlIlNlckF1eFRyZW5kIjpjYXNlIkRhdGFGb3JtYXQiOmNhc2UiU2VyVG9DcnQiOmNh'@;
put 'c2UiRm9udFgiOmNhc2UiQ2F0U2VyUmFuZ2UiOmNhc2UiQXhjRXh0IjpjYXNlIlNlckZtdCI6Y2FzZSJTaHRQcm9wcyI6Y2FzZSJEZWZhdWx0VGV4dCI6Y2FzZSJUZXh0IjpjYXNlIkNhdExhYiI6Y2FzZSJEYXRhTGFiRXh0Q29udGVudHMiOmNhc2UiTGVnZW5kIjpjYXNlIkxlZ2VuZEV4Y2Vw'@;
put 'dGlvbiI6Y2FzZSJQaWUiOmNhc2UiU2NhdHRlciI6Y2FzZSJQaWVGb3JtYXQiOmNhc2UiTWFya2VyRm9ybWF0IjpjYXNlIlN0YXJ0T2JqZWN0IjpjYXNlIkVuZE9iamVjdCI6Y2FzZSJBbFJ1bnMiOmNhc2UiT2JqZWN0TGluayI6Y2FzZSJTSUluZGV4IjpjYXNlIkF0dGFjaGVkTGFiZWwiOmNh'@;
put 'c2UiWU11bHQiOmNhc2UiTGluZSI6Y2FzZSJCYXIiOmNhc2UiU3VyZiI6Y2FzZSJBeGlzUGFyZW50IjpjYXNlIlBvcyI6Y2FzZSJWYWx1ZVJhbmdlIjpjYXNlIlNYVmlld0V4OSI6Y2FzZSJTWFZpZXdMaW5rIjpjYXNlIlBpdm90Q2hhcnRCaXRzIjpjYXNlIlNCYXNlUmVmIjpjYXNlIlRleHRQ'@;
put 'cm9wc1N0cmVhbSI6Y2FzZSJMbkV4dCI6Y2FzZSJNa3JFeHQiOmNhc2UiQ3J0Q29vcHQiOmNhc2UiUXNpIjpjYXNlIlFzaWYiOmNhc2UiUXNpciI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJUeHRRcnkiOmNhc2UiRmlsdGVyTW9kZSI6Y2FzZSJBdXRvRmlsdGVyIjpjYXNlIkF1dG9GaWx0ZXJJbmZv'@;
put 'IjpjYXNlIkF1dG9GaWx0ZXIxMiI6Y2FzZSJEcm9wRG93bk9iaklkcyI6Y2FzZSJTb3J0IjpjYXNlIlNvcnREYXRhIjpjYXNlIlNoYXBlUHJvcHNTdHJlYW0iOmNhc2UiTXNvRHJhd2luZyI6Y2FzZSJNc29EcmF3aW5nR3JvdXAiOmNhc2UiTXNvRHJhd2luZ1NlbGVjdGlvbiI6Y2FzZSJXZWJQ'@;
put 'dWIiOmNhc2UiQXV0b1dlYlB1YiI6Y2FzZSJIZWFkZXJGb290ZXIiOmNhc2UiSEZQaWN0dXJlIjpjYXNlIlBMViI6Y2FzZSJIb3Jpem9udGFsUGFnZUJyZWFrcyI6Y2FzZSJWZXJ0aWNhbFBhZ2VCcmVha3MiOmNhc2UiQmFja3VwIjpjYXNlIkNvbXByZXNzUGljdHVyZXMiOmNhc2UiQ29tcGF0'@;
put 'MTIiOmNhc2UiQ29udGludWUiOmNhc2UiQ29udGludWVGcnQxMiI6Y2FzZSJGcnRGb250TGlzdCI6Y2FzZSJGcnRXcmFwcGVyIjpicmVhaztkZWZhdWx0OnN3aXRjaChoaS5uKXtjYXNlIlRhYklkQ29uZiI6Y2FzZSJSYWRhciI6Y2FzZSJSYWRhckFyZWEiOmNhc2UiRHJvcEJhciI6Y2FzZSJJ'@;
put 'bnRsIjpjYXNlIkNvb3JkTGlzdCI6Y2FzZSJTZXJBdXhFcnJCYXIiOmNhc2UiQklGRjJGT05UQ0xSIjpjYXNlIkJJRkYyRk1UQ05UIjpjYXNlIkJJRkYyRk9OVFhUUkEiOmNhc2UiQklGRjJYRiI6Y2FzZSJCSUZGM1hGIjpjYXNlIkJJRkY0WEYiOmNhc2UiQklGRjJYRklOREVYIjpjYXNlIkJJ'@;
put 'RkY0Rk1UQ05UIjpjYXNlIkJJRkYyUk9XIjpjYXNlIkJJRkYyV0lORE9XMiI6Y2FzZSJTQ0VOQVJJTyI6Y2FzZSJEQ29uQmluIjpjYXNlIlBpY0YiOmNhc2UiRGF0YUxhYkV4dCI6Y2FzZSJMZWwiOmNhc2UiQm9wUG9wIjpjYXNlIkJvcFBvcEN1c3RvbSI6Y2FzZSJSZWFsVGltZURhdGEiOmNh'@;
put 'c2UiTmFtZSI6Y2FzZSJMSE5HcmFwaCI6Y2FzZSJGbkdyb3VwTmFtZSI6Y2FzZSJBZGRNZW51IjpjYXNlIkxQciI6Y2FzZSJMaXN0T2JqIjpjYXNlIkxpc3RGaWVsZCI6Y2FzZSJSUlNvcnQiOmNhc2UiQmlnTmFtZSI6Y2FzZSJUb29sYmFySGRyIjpjYXNlIlRvb2xiYXJFbmQiOmNhc2UiRERF'@;
put 'T2JqTmFtZSI6Y2FzZSJGUlRBcmNoSWQkIjpicmVhaztkZWZhdWx0OmlmKFAuV1RGKXRocm93IlVucmVjb2duaXplZCBSZWNvcmQgIitoaS5ufX19fX1lbHNlIHkubCs9eG8sWm4mJlpuLmVuYyYmWm4uZW5jLmluc2l0dSYmWm4uZW5jLmluc2l0dSh1ZSh7bGVuZ3RoOnhvfSkpfXJldHVybiBM'@;
put 'LlNoZWV0TmFtZXM9bHQocGUpLnNvcnQoZnVuY3Rpb24oemksSnIpe3JldHVybiBOdW1iZXIoemkpLU51bWJlcihKcil9KS5tYXAoZnVuY3Rpb24oemkpe3JldHVybiBwZVt6aV0ubmFtZX0pLFAuYm9va1NoZWV0c3x8KEwuU2hlZXRzPVEpLCFMLlNoZWV0TmFtZXMubGVuZ3RoJiZCZVsiIXJl'@;
put 'ZiJdPyhMLlNoZWV0TmFtZXMucHVzaCgiU2hlZXQxIiksTC5TaGVldHMmJihMLlNoZWV0cy5TaGVldDE9QmUpKTpMLlByZWFtYmxlPUJlLEwuU2hlZXRzJiZfby5mb3JFYWNoKGZ1bmN0aW9uKHppLEpyKXtMLlNoZWV0c1tMLlNoZWV0TmFtZXNbSnJdXVsiIWF1dG9maWx0ZXIiXT16aX0pLEwu'@;
put 'U3RyaW5ncz1TZSxMLlNTRj13LmdldF90YWJsZSgpLFpuLmVuYyYmKEwuRW5jcnlwdGlvbj1abi5lbmMpLG9pJiYoTC5UaGVtZXM9b2kpLEwuTWV0YWRhdGE9e30sdm9pZCAwIT09WnQmJihMLk1ldGFkYXRhLkNvdW50cnk9WnQpLFNuLm5hbWVzLmxlbmd0aD4wJiYodW4uTmFtZXM9U24ubmFt'@;
put 'ZXMpLEwuV29ya2Jvb2s9dW4sTH0oUS5jb250ZW50LFApO2Vsc2UgaWYoKHBlPWplLmZpbmQoeSwiUGVyZmVjdE9mZmljZV9NQUlOIikpJiZwZS5jb250ZW50KXJlPVRtLnRvX3dvcmtib29rKHBlLmNvbnRlbnQsKFAudHlwZT1fZSxQKSk7ZWxzZXtpZighKHBlPWplLmZpbmQoeSwiTmF0aXZl'@;
put 'Q29udGVudF9NQUlOIikpfHwhcGUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIFdvcmtib29rIHN0cmVhbSIpO3JlPVRtLnRvX3dvcmtib29rKHBlLmNvbnRlbnQsKFAudHlwZT1fZSxQKSl9UC5ib29rVkJBJiZ5LkZ1bGxQYXRocyYmamUuZmluZCh5LCIvX1ZCQV9QUk9K'@;
put 'RUNUX0NVUi9WQkEvZGlyIikmJihyZS52YmFyYXc9ZnVuY3Rpb24gWDQoeSl7dmFyIFA9amUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4geS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihMLFEpe2lmKCIvIiE9PUwuc2xpY2UoLTEpJiZMLm1hdGNoKC9fVkJBX1BST0pFQ1Rf'@;
put 'Q1VSLykpe3ZhciByZT1MLnJlcGxhY2UoL15bXlwvXSovLCJSIikucmVwbGFjZSgvXC9fVkJBX1BST0pFQ1RfQ1VSXHUwMDAwKi8sIiIpO2plLnV0aWxzLmNmYl9hZGQoUCxyZSx5LkZpbGVJbmRleFtRXS5jb250ZW50KX19KSxqZS53cml0ZShQKX0oeSkpfXZhciB2ZT17fTtyZXR1cm4geS5G'@;
put 'dWxsUGF0aHMmJmZ1bmN0aW9uIHlNKHksUCxMKXt2YXIgUT1qZS5maW5kKHksIiFEb2N1bWVudFN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKFEmJlEuc2l6ZT4wKXRyeXt2YXIgcmU9dTkoUSxfNCxycC5EU0kpO2Zvcih2YXIgcGUgaW4gcmUpUFtwZV09cmVbcGVdfWNhdGNoKEhlKXtpZihMLldU'@;
put 'Ril0aHJvdyBIZX12YXIgX2U9amUuZmluZCh5LCIhU3VtbWFyeUluZm9ybWF0aW9uIik7aWYoX2UmJl9lLnNpemU+MCl0cnl7dmFyIHZlPXU5KF9lLHdyLHJwLlNJKTtmb3IodmFyIFNlIGluIHZlKW51bGw9PVBbU2VdJiYoUFtTZV09dmVbU2VdKX1jYXRjaChIZSl7aWYoTC5XVEYpdGhyb3cg'@;
put 'SGV9UC5IZWFkaW5nUGFpcnMmJlAuVGl0bGVzT2ZQYXJ0cyYmKHUwKFAuSGVhZGluZ1BhaXJzLFAuVGl0bGVzT2ZQYXJ0cyxQLEwpLGRlbGV0ZSBQLkhlYWRpbmdQYWlycyxkZWxldGUgUC5UaXRsZXNPZlBhcnRzKX0oeSx2ZSxQKSxyZS5Qcm9wcz1yZS5DdXN0cHJvcHM9dmUsUC5ib29rRmls'@;
put 'ZXMmJihyZS5jZmI9eSkscmV9dmFyIG1mPXswOntuOiJCcnRSb3dIZHIiLGY6ZnVuY3Rpb24gR0koeSxQKXt2YXIgTD17fSxRPXkubCtQO0wucj15LnJlYWRfc2hpZnQoNCkseS5sKz00O3ZhciByZT15LnJlYWRfc2hpZnQoMik7eS5sKz0xO3ZhciBwZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJu'@;
put 'IHkubD1RLDcmcGUmJihMLmxldmVsPTcmcGUpLDE2JnBlJiYoTC5oaWRkZW49ITApLDMyJnBlJiYoTC5ocHQ9cmUvMjApLEx9fSwxOntuOiJCcnRDZWxsQmxhbmsiLGY6ZnVuY3Rpb24gRnYoeSl7cmV0dXJuW3V1KHkpXX19LDI6e246IkJydENlbGxSayIsZjpmdW5jdGlvbiBpTCh5KXtyZXR1'@;
put 'cm5bdXUoeSksWGMoeSksIm4iXX19LDM6e246IkJydENlbGxFcnJvciIsZjpmdW5jdGlvbiB0WSh5KXtyZXR1cm5bdXUoeSkseS5yZWFkX3NoaWZ0KDEpLCJlIl19fSw0OntuOiJCcnRDZWxsQm9vbCIsZjpmdW5jdGlvbiBQUyh5KXtyZXR1cm5bdXUoeSkseS5yZWFkX3NoaWZ0KDEpLCJiIl19'@;
put 'fSw1OntuOiJCcnRDZWxsUmVhbCIsZjpmdW5jdGlvbiBuTCh5KXtyZXR1cm5bdXUoeSksbWEoeSksIm4iXX19LDY6e246IkJydENlbGxTdCIsZjpmdW5jdGlvbiBNNih5KXtyZXR1cm5bdXUoeSksd2MoeSksInN0ciJdfX0sNzp7bjoiQnJ0Q2VsbElzc3QiLGY6ZnVuY3Rpb24gQlMoeSl7cmV0'@;
put 'dXJuW3V1KHkpLHkucmVhZF9zaGlmdCg0KSwicyJdfX0sODp7bjoiQnJ0Rm1sYVN0cmluZyIsZjpmdW5jdGlvbiBhTCh5LFAsTCl7dmFyIFE9eS5sK1AscmU9dXUoeSk7cmUucj1MWyIhcm93Il07dmFyIF9lPVtyZSx3Yyh5KSwic3RyIl07aWYoTC5jZWxsRm9ybXVsYSl7eS5sKz0yO3ZhciB2'@;
put 'ZT1oNih5LFEteS5sLEwpO19lWzNdPXhsKHZlLG51bGwscmUsTC5zdXBib29rcyxMKX1lbHNlIHkubD1RO3JldHVybiBfZX19LDk6e246IkJydEZtbGFOdW0iLGY6ZnVuY3Rpb24gWlMoeSxQLEwpe3ZhciBRPXkubCtQLHJlPXV1KHkpO3JlLnI9TFsiIXJvdyJdO3ZhciBfZT1bcmUsbWEoeSks'@;
put 'Im4iXTtpZihMLmNlbGxGb3JtdWxhKXt5LmwrPTI7dmFyIHZlPWg2KHksUS15LmwsTCk7X2VbM109eGwodmUsbnVsbCxyZSxMLnN1cGJvb2tzLEwpfWVsc2UgeS5sPVE7cmV0dXJuIF9lfX0sMTA6e246IkJydEZtbGFCb29sIixmOmZ1bmN0aW9uIHNMKHksUCxMKXt2YXIgUT15LmwrUCxyZT11'@;
put 'dSh5KTtyZS5yPUxbIiFyb3ciXTt2YXIgX2U9W3JlLHkucmVhZF9zaGlmdCgxKSwiYiJdO2lmKEwuY2VsbEZvcm11bGEpe3kubCs9Mjt2YXIgdmU9aDYoeSxRLXkubCxMKTtfZVszXT14bCh2ZSxudWxsLHJlLEwuc3VwYm9va3MsTCl9ZWxzZSB5Lmw9UTtyZXR1cm4gX2V9fSwxMTp7bjoiQnJ0'@;
put 'Rm1sYUVycm9yIixmOmZ1bmN0aW9uIFVTKHksUCxMKXt2YXIgUT15LmwrUCxyZT11dSh5KTtyZS5yPUxbIiFyb3ciXTt2YXIgX2U9W3JlLHkucmVhZF9zaGlmdCgxKSwiZSJdO2lmKEwuY2VsbEZvcm11bGEpe3kubCs9Mjt2YXIgdmU9aDYoeSxRLXkubCxMKTtfZVszXT14bCh2ZSxudWxsLHJl'@;
put 'LEwuc3VwYm9va3MsTCl9ZWxzZSB5Lmw9UTtyZXR1cm4gX2V9fSwxMjp7bjoiQnJ0U2hvcnRCbGFuayIsZjpmdW5jdGlvbiBPUyh5KXtyZXR1cm5bYTAoeSldfX0sMTM6e246IkJydFNob3J0UmsiLGY6ZnVuY3Rpb24gelMoeSl7cmV0dXJuW2EwKHkpLFhjKHkpLCJuIl19fSwxNDp7bjoiQnJ0'@;
put 'U2hvcnRFcnJvciIsZjpmdW5jdGlvbiBOUyh5KXtyZXR1cm5bYTAoeSkseS5yZWFkX3NoaWZ0KDEpLCJlIl19fSwxNTp7bjoiQnJ0U2hvcnRCb29sIixmOmZ1bmN0aW9uIFM2KHkpe3JldHVyblthMCh5KSx5LnJlYWRfc2hpZnQoMSksImIiXX19LDE2OntuOiJCcnRTaG9ydFJlYWwiLGY6alN9'@;
put 'LDE3OntuOiJCcnRTaG9ydFN0IixmOmZ1bmN0aW9uIHg2KHkpe3JldHVyblthMCh5KSx3Yyh5KSwic3RyIl19fSwxODp7bjoiQnJ0U2hvcnRJc3N0IixmOmZ1bmN0aW9uIEdkKHkpe3JldHVyblthMCh5KSx5LnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntuOiJCcnRTU1RJdGVtIixmOmNhfSwy'@;
put 'MDp7bjoiQnJ0UENESU1pc3NpbmcifSwyMTp7bjoiQnJ0UENESU51bWJlciJ9LDIyOntuOiJCcnRQQ0RJQm9vbGVhbiJ9LDIzOntuOiJCcnRQQ0RJRXJyb3IifSwyNDp7bjoiQnJ0UENESVN0cmluZyJ9LDI1OntuOiJCcnRQQ0RJRGF0ZXRpbWUifSwyNjp7bjoiQnJ0UENESUluZGV4In0sMjc6'@;
put 'e246IkJydFBDRElBTWlzc2luZyJ9LDI4OntuOiJCcnRQQ0RJQU51bWJlciJ9LDI5OntuOiJCcnRQQ0RJQUJvb2xlYW4ifSwzMDp7bjoiQnJ0UENESUFFcnJvciJ9LDMxOntuOiJCcnRQQ0RJQVN0cmluZyJ9LDMyOntuOiJCcnRQQ0RJQURhdGV0aW1lIn0sMzM6e246IkJydFBDUlJlY29yZCJ9'@;
put 'LDM0OntuOiJCcnRQQ1JSZWNvcmREdCJ9LDM1OntuOiJCcnRGUlRCZWdpbiJ9LDM2OntuOiJCcnRGUlRFbmQifSwzNzp7bjoiQnJ0QUNCZWdpbiJ9LDM4OntuOiJCcnRBQ0VuZCJ9LDM5OntuOiJCcnROYW1lIixmOmZ1bmN0aW9uIHA1KHksUCxMKXt2YXIgUT15LmwrUDt5LmwrPTQseS5sKz0x'@;
put 'O3ZhciByZT15LnJlYWRfc2hpZnQoNCkscGU9ZHUoeSksX2U9c1MoeSwwLEwpLHZlPUF1KHkpO3kubD1RO3ZhciBTZT17TmFtZTpwZSxQdGc6X2V9O3JldHVybiByZTwyNjg0MzU0NTUmJihTZS5TaGVldD1yZSksdmUmJihTZS5Db21tZW50PXZlKSxTZX19LDQwOntuOiJCcnRJbmRleFJvd0Js'@;
put 'b2NrIn0sNDI6e246IkJydEluZGV4QmxvY2sifSw0Mzp7bjoiQnJ0Rm9udCIsZjpmdW5jdGlvbiBtQyh5LFAsTCl7dmFyIFE9e307US5zej15LnJlYWRfc2hpZnQoMikvMjA7dmFyIHJlPWY0KHkpO3N3aXRjaChyZS5mQm9sZCYmKFEuYm9sZD0xKSxyZS5mSXRhbGljJiYoUS5pdGFsaWM9MSks'@;
put 'cmUuZlVuZGVybGluZSYmKFEudW5kZXJsaW5lPTEpLHJlLmZDb25kZW5zZSYmKFEuY29uZGVuc2U9MSkscmUuZkV4dGVuZCYmKFEuZXh0ZW5kPTEpLHJlLmZTaGFkb3cmJihRLnNoYWRvdz0xKSxyZS5mT3V0bGluZSYmKFEub3V0bGluZT0xKSxyZS5mU3RyaWtlb3V0JiYoUS5zdHJpa2U9MSks'@;
put 'NzAwPT09eS5yZWFkX3NoaWZ0KDIpJiYoUS5ib2xkPTEpLHkucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOlEudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOlEudmFsaWduPSJzdWIifXZhciBfZT15LnJlYWRfc2hpZnQoMSk7MCE9X2UmJihRLnVuZGVybGluZT1fZSk7dmFyIHZlPXkucmVhZF9z'@;
put 'aGlmdCgxKTt2ZT4wJiYoUS5mYW1pbHk9dmUpO3ZhciBTZT15LnJlYWRfc2hpZnQoMSk7c3dpdGNoKFNlPjAmJihRLmNoYXJzZXQ9U2UpLHkubCsrLFEuY29sb3I9RGQoeSkseS5yZWFkX3NoaWZ0KDEpKXtjYXNlIDE6US5zY2hlbWU9Im1ham9yIjticmVhaztjYXNlIDI6US5zY2hlbWU9Im1p'@;
put 'bm9yIn1yZXR1cm4gUS5uYW1lPXdjKHkpLFF9fSw0NDp7bjoiQnJ0Rm10IixmOmZ1bmN0aW9uIGdDKHksUCl7cmV0dXJuW3kucmVhZF9zaGlmdCgyKSx3Yyh5KV19fSw0NTp7bjoiQnJ0RmlsbCIsZjpmdW5jdGlvbiBrRCh5LFApe3ZhciBMPXkubCtQLFE9e30scmU9eS5yZWFkX3NoaWZ0KDQp'@;
put 'O2lmKDQwIT1yZSl7US5wYXR0ZXJuVHlwZT1WNFtyZV07dmFyIHBlPURkKHkpOzY0IT1wZS5pbmRleCYmKFEuZmdDb2xvcj1wZSk7dmFyIF9lPURkKHkpOzY1IT1fZS5pbmRleCYmKFEuYmdDb2xvcj1fZSl9ZWxzZXt5LmwrPTE2LHkucmVhZF9zaGlmdCg0KSxtYSh5KSxtYSh5KSxtYSh5KSxt'@;
put 'YSh5KSxtYSh5KTtmb3IodmFyIHZlPXkucmVhZF9zaGlmdCg0KSxTZT1bXSxIZT0wO0hlPHZlOysrSGUpU2UucHVzaChZbSh5KSl9cmV0dXJuIHkubD1MLFF9fSw0Njp7bjoiQnJ0Qm9yZGVyIixmOmZ1bmN0aW9uIFREKHkpe3ZhciBQPXt9O3kucmVhZF9zaGlmdCgxKTt2YXIgTD1qNCh5KTsi'@;
put 'bm9uZSIhPUwuc3R5bGUmJihQLnRvcD1MKTt2YXIgUT1qNCh5KTsibm9uZSIhPVEuc3R5bGUmJihQLmJvdHRvbT1RKTt2YXIgcmU9ajQoeSk7Im5vbmUiIT1yZS5zdHlsZSYmKFAubGVmdD1yZSk7dmFyIHBlPWo0KHkpOyJub25lIiE9cGUuc3R5bGUmJihQLnJpZ2h0PXBlKTt2YXIgX2U9ajQo'@;
put 'eSk7cmV0dXJuIm5vbmUiIT1fZS5zdHlsZSYmKFAuZGlhZz1fZSksUH19LDQ3OntuOiJCcnRYRiIsZjpmdW5jdGlvbiBIOSh5LFApe3ZhciBMPXkubCtQLFE9e30scmU9eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgyKSxfZT15LnJlYWRfc2hpZnQoMiksdmU9eS5yZWFkX3NoaWZ0'@;
put 'KDIpLFNlPXkucmVhZF9zaGlmdCgyKSxIZT15LnJlYWRfc2hpZnQoMSk7eS5yZWFkX3NoaWZ0KDEpO3ZhciBCZT15LnJlYWRfc2hpZnQoMiksR2U9eS5yZWFkX3NoaWZ0KDEpO3kubD1MLFEueGZJZD1yZSxRLm51bUZtdElkPXBlLFEuZm9udElkPV9lLFEuZmlsbElkPXZlLFEuYm9yZGVySWQ9'@;
put 'U2UsMSZHZSYmMCE9US5udW1GbXRJZCYmKFEuYXBwbHlOdW1iZXJGb3JtYXQ9ITApLFEuYWxpZ25tZW50PXt9LEhlPjAmJihRLmFsaWdubWVudC50ZXh0Um90YXRpb249SGUpO3ZhciBudD0hMTtyZXR1cm4gNyZCZSYmKG50PSEwLFEuYWxpZ25tZW50Lmhvcml6b250YWw9V21bNyZCZV0pLFEu'@;
put 'YWxpZ25tZW50LnZlcnRpY2FsPUI0W0JlPj4+MyY3XSxRLmFsaWdubWVudC52ZXJ0aWNhbCYmKG50PSEwKSxCZT4+PjYmMSYmKFEuYWxpZ25tZW50LndyYXBUZXh0PSEwKSxCZT4+PjgmMSYmKFEuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSxudHx8ZGVsZXRlIFEuYWxpZ25tZW50LDQmR2Um'@;
put 'Jm50JiYoUS5hcHBseUFsaWdubWVudD0hMCksUX19LDQ4OntuOiJCcnRTdHlsZSJ9LDQ5OntuOiJCcnRDZWxsTWV0YSJ9LDUwOntuOiJCcnRWYWx1ZU1ldGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJydEJlZ2luRm1kIn0sNTM6e246IkJydEVuZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1k'@;
put 'eCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5NZHhUdXBsZSJ9LDU3OntuOiJCcnRFbmRNZHhUdXBsZSJ9LDU4OntuOiJCcnRNZHhNYnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntuOiJCcnRDb2xJbmZvIixmOlZkfSw2Mjp7bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7'@;
put 'bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gVzQoeSl7dmFyIFA9e307UC5pPXkucmVhZF9zaGlmdCg0KTt2YXIgTD17fTtMLnI9eS5yZWFkX3NoaWZ0KDQpLEwuYz15LnJlYWRfc2hpZnQoNCksUC5yPWRpKEwpO3ZhciBRPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZRJiYoUC5s'@;
put 'PSIxIiksOCZRJiYoUC5hPSIxIiksUH19LDY0OntuOiJCcnREVmFsIixmOmZ1bmN0aW9uIEU2KHksUCxMKXt2YXIgUT15LmwrUCxyZT15LnJlYWRfc2hpZnQoNCkscGU9bDAoeSksX2U9QXUoeSksdmU9QXUoeSksU2U9QXUoeSksSGU9QXUoeSksQmU9aVMoeSxQLEwpLEdlPXkubDxRP2lTKHks'@;
put 'UCxMKTpudWxsLG50PTE1JnJlLGR0PXt0OmVvW250XSxzcXJmeDpwZSxzOltfZSx2ZSxTZSxIZV19O3JldHVybiBCZSYmKGR0LmYxPUJlKSxHZSYmKGR0LmYyPUdlKSwwPT1udHx8Mz09bnR8fDc9PW50fHwoZHQub3A9QnZbcmU+PjIwJjE1XSksZHR9fSw2NTp7bjoiQnJ0U3h2Y2VsbE51bSJ9'@;
put 'LDY2OntuOiJCcnRTeHZjZWxsU3RyIn0sNjc6e246IkJydFN4dmNlbGxCb29sIn0sNjg6e246IkJydFN4dmNlbGxFcnIifSw2OTp7bjoiQnJ0U3h2Y2VsbERhdGUifSw3MDp7bjoiQnJ0U3h2Y2VsbE5pbCJ9LDEyODp7bjoiQnJ0RmlsZVZlcnNpb24ifSwxMjk6e246IkJydEJlZ2luU2hlZXQi'@;
put 'fSwxMzA6e246IkJydEVuZFNoZWV0In0sMTMxOntuOiJCcnRCZWdpbkJvb2siLGY6YmMscDowfSwxMzI6e246IkJydEVuZEJvb2sifSwxMzM6e246IkJydEJlZ2luV3NWaWV3cyJ9LDEzNDp7bjoiQnJ0RW5kV3NWaWV3cyJ9LDEzNTp7bjoiQnJ0QmVnaW5Cb29rVmlld3MifSwxMzY6e246IkJy'@;
put 'dEVuZEJvb2tWaWV3cyJ9LDEzNzp7bjoiQnJ0QmVnaW5Xc1ZpZXciLGY6ZnVuY3Rpb24gZ0woeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiB5LmwrPTI4LHtSVEw6MzImUCxncmlkOiEhKDQmUCl9fX0sMTM4OntuOiJCcnRFbmRXc1ZpZXcifSwxMzk6e246IkJydEJlZ2luQ3NWaWV3'@;
put 'cyJ9LDE0MDp7bjoiQnJ0RW5kQ3NWaWV3cyJ9LDE0MTp7bjoiQnJ0QmVnaW5Dc1ZpZXcifSwxNDI6e246IkJydEVuZENzVmlldyJ9LDE0Mzp7bjoiQnJ0QmVnaW5CdW5kbGVTaHMifSwxNDQ6e246IkJydEVuZEJ1bmRsZVNocyJ9LDE0NTp7bjoiQnJ0QmVnaW5TaGVldERhdGEifSwxNDY6e246'@;
put 'IkJydEVuZFNoZWV0RGF0YSJ9LDE0Nzp7bjoiQnJ0V3NQcm9wIixmOmZ1bmN0aW9uIEpJKHksUCl7dmFyIEw9e30sUT15W3kubF07cmV0dXJuKyt5LmwsTC5hYm92ZT0hKDY0JlEpLEwubGVmdD0hKDEyOCZRKSx5LmwrPTE4LEwubmFtZT16aCh5LFAtMTkpLEx9fSwxNDg6e246IkJydFdzRGlt'@;
put 'IixmOnFJLHA6MTZ9LDE1MTp7bjoiQnJ0UGFuZSIsZjpmdW5jdGlvbiBHUyh5LFApe3ZhciBMPXkubCtQO21hKHkpLG1hKHkpO3ZhciBRPXkucmVhZF9zaGlmdCg0LCJpIikscmU9eS5yZWFkX3NoaWZ0KDQsImkiKTtpZih5LnJlYWRfc2hpZnQoNCkseS5yZWFkX3NoaWZ0KDEpLEwhPXkubCl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkJhZCBCcnRQYW5lOiAiK0wrIiAhPSAiK3kubCk7cmV0dXJuW2RpKHtyOlEsYzpyZX0pXX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uIHVMKHksUCl7cmV0dXJuIHkucmVhZF9zaGlmdCg0KSx7Y2VsbDpkaSh7cjp5LnJlYWRfc2hpZnQoNCksYzp5LnJlYWRf'@;
put 'c2hpZnQoNCl9KX19fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBQTCh5LFApe3ZhciBMPXt9LFE9eS5yZWFkX3NoaWZ0KDQpO0wuZGVmYXVsdFRoZW1lVmVyc2lvbj15LnJlYWRfc2hpZnQoNCk7dmFyIHJlPVA+OD93Yyh5KToiIjtyZXR1cm4gcmUubGVuZ3RoPjAmJihMLkNvZGVO'@;
put 'YW1lPXJlKSxMLmF1dG9Db21wcmVzc1BpY3R1cmVzPSEhKDY1NTM2JlEpLEwuYmFja3VwRmlsZT0hISg2NCZRKSxMLmNoZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JlEpLEwuZGF0ZTE5MDQ9ISEoMSZRKSxMLmZpbHRlclByaXZhY3k9ISEoOCZRKSxMLmhpZGVQaXZvdEZpZWxkTGlzdD0hISgx'@;
put 'MDI0JlEpLEwucHJvbXB0ZWRTb2x1dGlvbnM9ISEoMTYmUSksTC5wdWJsaXNoSXRlbXM9ISEoMjA0OCZRKSxMLnJlZnJlc2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQmUSksTC5zYXZlRXh0ZXJuYWxMaW5rVmFsdWVzPSEhKDEyOCZRKSxMLnNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzPSEh'@;
put 'KDQmUSksTC5zaG93SW5rQW5ub3RhdGlvbj0hISgzMiZRKSxMLnNob3dPYmplY3RzPVsiYWxsIiwicGxhY2Vob2xkZXJzIiwibm9uZSJdW1E+PjEzJjNdLEwuc2hvd1Bpdm90Q2hhcnRGaWx0ZXI9ISEoMzI3NjgmUSksTC51cGRhdGVMaW5rcz1bInVzZXJTZXQiLCJuZXZlciIsImFsd2F5cyJd'@;
put 'W1E+PjgmM10sTH19LDE1NDp7bjoiQnJ0V2JGYWN0b2lkIn0sMTU1OntuOiJCcnRGaWxlUmVjb3ZlciJ9LDE1Njp7bjoiQnJ0QnVuZGxlU2giLGY6ZnVuY3Rpb24gY1koeSxQKXt2YXIgTD17fTtyZXR1cm4gTC5IaWRkZW49eS5yZWFkX3NoaWZ0KDQpLEwuaVRhYklEPXkucmVhZF9zaGlmdCg0'@;
put 'KSxMLnN0clJlbElEPVQxKHksUC04KSxMLm5hbWU9d2MoeSksTH19LDE1Nzp7bjoiQnJ0Q2FsY1Byb3AifSwxNTg6e246IkJydEJvb2tWaWV3In0sMTU5OntuOiJCcnRCZWdpblNzdCIsZjpmdW5jdGlvbiBRaCh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDQpLHkucmVhZF9zaGlmdCg0KV19fSwx'@;
put 'NjA6e246IkJydEVuZFNzdCJ9LDE2MTp7bjoiQnJ0QmVnaW5BRmlsdGVyIixmOkpjfSwxNjI6e246IkJydEVuZEFGaWx0ZXIifSwxNjM6e246IkJydEJlZ2luRmlsdGVyQ29sdW1uIn0sMTY0OntuOiJCcnRFbmRGaWx0ZXJDb2x1bW4ifSwxNjU6e246IkJydEJlZ2luRmlsdGVycyJ9LDE2Njp7'@;
put 'bjoiQnJ0RW5kRmlsdGVycyJ9LDE2Nzp7bjoiQnJ0RmlsdGVyIn0sMTY4OntuOiJCcnRDb2xvckZpbHRlciJ9LDE2OTp7bjoiQnJ0SWNvbkZpbHRlciJ9LDE3MDp7bjoiQnJ0VG9wMTBGaWx0ZXIifSwxNzE6e246IkJydER5bmFtaWNGaWx0ZXIifSwxNzI6e246IkJydEJlZ2luQ3VzdG9tRmls'@;
put 'dGVycyJ9LDE3Mzp7bjoiQnJ0RW5kQ3VzdG9tRmlsdGVycyJ9LDE3NDp7bjoiQnJ0Q3VzdG9tRmlsdGVyIn0sMTc1OntuOiJCcnRBRmlsdGVyRGF0ZUdyb3VwSXRlbSJ9LDE3Njp7bjoiQnJ0TWVyZ2VDZWxsIixmOmxMfSwxNzc6e246IkJydEJlZ2luTWVyZ2VDZWxscyJ9LDE3ODp7bjoiQnJ0'@;
put 'RW5kTWVyZ2VDZWxscyJ9LDE3OTp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlRGVmIn0sMTgwOntuOiJCcnRFbmRQaXZvdENhY2hlRGVmIn0sMTgxOntuOiJCcnRCZWdpblBDREZpZWxkcyJ9LDE4Mjp7bjoiQnJ0RW5kUENERmllbGRzIn0sMTgzOntuOiJCcnRCZWdpblBDREZpZWxkIn0sMTg0Ontu'@;
put 'OiJCcnRFbmRQQ0RGaWVsZCJ9LDE4NTp7bjoiQnJ0QmVnaW5QQ0RTb3VyY2UifSwxODY6e246IkJydEVuZFBDRFNvdXJjZSJ9LDE4Nzp7bjoiQnJ0QmVnaW5QQ0RTUmFuZ2UifSwxODg6e246IkJydEVuZFBDRFNSYW5nZSJ9LDE4OTp7bjoiQnJ0QmVnaW5QQ0RGQXRibCJ9LDE5MDp7bjoiQnJ0'@;
put 'RW5kUENERkF0YmwifSwxOTE6e246IkJydEJlZ2luUENESVJ1biJ9LDE5Mjp7bjoiQnJ0RW5kUENESVJ1biJ9LDE5Mzp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3JkcyJ9LDE5NDp7bjoiQnJ0RW5kUGl2b3RDYWNoZVJlY29yZHMifSwxOTU6e246IkJydEJlZ2luUENESGllcmFyY2hpZXMi'@;
put 'fSwxOTY6e246IkJydEVuZFBDREhpZXJhcmNoaWVzIn0sMTk3OntuOiJCcnRCZWdpblBDREhpZXJhcmNoeSJ9LDE5ODp7bjoiQnJ0RW5kUENESGllcmFyY2h5In0sMTk5OntuOiJCcnRCZWdpblBDREhGaWVsZHNVc2FnZSJ9LDIwMDp7bjoiQnJ0RW5kUENESEZpZWxkc1VzYWdlIn0sMjAxOntu'@;
put 'OiJCcnRCZWdpbkV4dENvbm5lY3Rpb24ifSwyMDI6e246IkJydEVuZEV4dENvbm5lY3Rpb24ifSwyMDM6e246IkJydEJlZ2luRUNEYlByb3BzIn0sMjA0OntuOiJCcnRFbmRFQ0RiUHJvcHMifSwyMDU6e246IkJydEJlZ2luRUNPbGFwUHJvcHMifSwyMDY6e246IkJydEVuZEVDT2xhcFByb3Bz'@;
put 'In0sMjA3OntuOiJCcnRCZWdpblBDRFNDb25zb2wifSwyMDg6e246IkJydEVuZFBDRFNDb25zb2wifSwyMDk6e246IkJydEJlZ2luUENEU0NQYWdlcyJ9LDIxMDp7bjoiQnJ0RW5kUENEU0NQYWdlcyJ9LDIxMTp7bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2UifSwyMTI6e246IkJydEVuZFBDRFNDUGFn'@;
put 'ZSJ9LDIxMzp7bjoiQnJ0QmVnaW5QQ0RTQ1BJdGVtIn0sMjE0OntuOiJCcnRFbmRQQ0RTQ1BJdGVtIn0sMjE1OntuOiJCcnRCZWdpblBDRFNDU2V0cyJ9LDIxNjp7bjoiQnJ0RW5kUENEU0NTZXRzIn0sMjE3OntuOiJCcnRCZWdpblBDRFNDU2V0In0sMjE4OntuOiJCcnRFbmRQQ0RTQ1NldCJ9'@;
put 'LDIxOTp7bjoiQnJ0QmVnaW5QQ0RGR3JvdXAifSwyMjA6e246IkJydEVuZFBDREZHcm91cCJ9LDIyMTp7bjoiQnJ0QmVnaW5QQ0RGR0l0ZW1zIn0sMjIyOntuOiJCcnRFbmRQQ0RGR0l0ZW1zIn0sMjIzOntuOiJCcnRCZWdpblBDREZHUmFuZ2UifSwyMjQ6e246IkJydEVuZFBDREZHUmFuZ2Ui'@;
put 'fSwyMjU6e246IkJydEJlZ2luUENERkdEaXNjcmV0ZSJ9LDIyNjp7bjoiQnJ0RW5kUENERkdEaXNjcmV0ZSJ9LDIyNzp7bjoiQnJ0QmVnaW5QQ0RTRFR1cGxlQ2FjaGUifSwyMjg6e246IkJydEVuZFBDRFNEVHVwbGVDYWNoZSJ9LDIyOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRW50cmllcyJ9LDIz'@;
put 'MDp7bjoiQnJ0RW5kUENEU0RUQ0VudHJpZXMifSwyMzE6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzIn0sMjMyOntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlcnMifSwyMzM6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXIifSwyMzQ6e246IkJydEVuZFBDRFNEVENFTWVtYmVyIn0sMjM1Ontu'@;
put 'OiJCcnRCZWdpblBDRFNEVENRdWVyaWVzIn0sMjM2OntuOiJCcnRFbmRQQ0RTRFRDUXVlcmllcyJ9LDIzNzp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcnkifSwyMzg6e246IkJydEVuZFBDRFNEVENRdWVyeSJ9LDIzOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0cyJ9LDI0MDp7bjoiQnJ0RW5kUENE'@;
put 'U0RUQ1NldHMifSwyNDE6e246IkJydEJlZ2luUENEU0RUQ1NldCJ9LDI0Mjp7bjoiQnJ0RW5kUENEU0RUQ1NldCJ9LDI0Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbXMifSwyNDQ6e246IkJydEVuZFBDRENhbGNJdGVtcyJ9LDI0NTp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbSJ9LDI0Njp7bjoi'@;
put 'QnJ0RW5kUENEQ2FsY0l0ZW0ifSwyNDc6e246IkJydEJlZ2luUFJ1bGUifSwyNDg6e246IkJydEVuZFBSdWxlIn0sMjQ5OntuOiJCcnRCZWdpblBSRmlsdGVycyJ9LDI1MDp7bjoiQnJ0RW5kUFJGaWx0ZXJzIn0sMjUxOntuOiJCcnRCZWdpblBSRmlsdGVyIn0sMjUyOntuOiJCcnRFbmRQUkZp'@;
put 'bHRlciJ9LDI1Mzp7bjoiQnJ0QmVnaW5QTmFtZXMifSwyNTQ6e246IkJydEVuZFBOYW1lcyJ9LDI1NTp7bjoiQnJ0QmVnaW5QTmFtZSJ9LDI1Njp7bjoiQnJ0RW5kUE5hbWUifSwyNTc6e246IkJydEJlZ2luUE5QYWlycyJ9LDI1ODp7bjoiQnJ0RW5kUE5QYWlycyJ9LDI1OTp7bjoiQnJ0QmVn'@;
put 'aW5QTlBhaXIifSwyNjA6e246IkJydEVuZFBOUGFpciJ9LDI2MTp7bjoiQnJ0QmVnaW5FQ1dlYlByb3BzIn0sMjYyOntuOiJCcnRFbmRFQ1dlYlByb3BzIn0sMjYzOntuOiJCcnRCZWdpbkVjV3BUYWJsZXMifSwyNjQ6e246IkJydEVuZEVDV1BUYWJsZXMifSwyNjU6e246IkJydEJlZ2luRUNQ'@;
put 'YXJhbXMifSwyNjY6e246IkJydEVuZEVDUGFyYW1zIn0sMjY3OntuOiJCcnRCZWdpbkVDUGFyYW0ifSwyNjg6e246IkJydEVuZEVDUGFyYW0ifSwyNjk6e246IkJydEJlZ2luUENES1BJcyJ9LDI3MDp7bjoiQnJ0RW5kUENES1BJcyJ9LDI3MTp7bjoiQnJ0QmVnaW5QQ0RLUEkifSwyNzI6e246'@;
put 'IkJydEVuZFBDREtQSSJ9LDI3Mzp7bjoiQnJ0QmVnaW5EaW1zIn0sMjc0OntuOiJCcnRFbmREaW1zIn0sMjc1OntuOiJCcnRCZWdpbkRpbSJ9LDI3Njp7bjoiQnJ0RW5kRGltIn0sMjc3OntuOiJCcnRJbmRleFBhcnRFbmQifSwyNzg6e246IkJydEJlZ2luU3R5bGVTaGVldCJ9LDI3OTp7bjoi'@;
put 'QnJ0RW5kU3R5bGVTaGVldCJ9LDI4MDp7bjoiQnJ0QmVnaW5TWFZpZXcifSwyODE6e246IkJydEVuZFNYVkkifSwyODI6e246IkJydEJlZ2luU1hWSSJ9LDI4Mzp7bjoiQnJ0QmVnaW5TWFZJcyJ9LDI4NDp7bjoiQnJ0RW5kU1hWSXMifSwyODU6e246IkJydEJlZ2luU1hWRCJ9LDI4Njp7bjoi'@;
put 'QnJ0RW5kU1hWRCJ9LDI4Nzp7bjoiQnJ0QmVnaW5TWFZEcyJ9LDI4ODp7bjoiQnJ0RW5kU1hWRHMifSwyODk6e246IkJydEJlZ2luU1hQSSJ9LDI5MDp7bjoiQnJ0RW5kU1hQSSJ9LDI5MTp7bjoiQnJ0QmVnaW5TWFBJcyJ9LDI5Mjp7bjoiQnJ0RW5kU1hQSXMifSwyOTM6e246IkJydEJlZ2lu'@;
put 'U1hESSJ9LDI5NDp7bjoiQnJ0RW5kU1hESSJ9LDI5NTp7bjoiQnJ0QmVnaW5TWERJcyJ9LDI5Njp7bjoiQnJ0RW5kU1hESXMifSwyOTc6e246IkJydEJlZ2luU1hMSSJ9LDI5ODp7bjoiQnJ0RW5kU1hMSSJ9LDI5OTp7bjoiQnJ0QmVnaW5TWExJUndzIn0sMzAwOntuOiJCcnRFbmRTWExJUndz'@;
put 'In0sMzAxOntuOiJCcnRCZWdpblNYTElDb2xzIn0sMzAyOntuOiJCcnRFbmRTWExJQ29scyJ9LDMwMzp7bjoiQnJ0QmVnaW5TWEZvcm1hdCJ9LDMwNDp7bjoiQnJ0RW5kU1hGb3JtYXQifSwzMDU6e246IkJydEJlZ2luU1hGb3JtYXRzIn0sMzA2OntuOiJCcnRFbmRTeEZvcm1hdHMifSwzMDc6'@;
put 'e246IkJydEJlZ2luU3hTZWxlY3QifSwzMDg6e246IkJydEVuZFN4U2VsZWN0In0sMzA5OntuOiJCcnRCZWdpbklTWFZEUndzIn0sMzEwOntuOiJCcnRFbmRJU1hWRFJ3cyJ9LDMxMTp7bjoiQnJ0QmVnaW5JU1hWRENvbHMifSwzMTI6e246IkJydEVuZElTWFZEQ29scyJ9LDMxMzp7bjoiQnJ0'@;
put 'RW5kU1hMb2NhdGlvbiJ9LDMxNDp7bjoiQnJ0QmVnaW5TWExvY2F0aW9uIn0sMzE1OntuOiJCcnRFbmRTWFZpZXcifSwzMTY6e246IkJydEJlZ2luU1hUSHMifSwzMTc6e246IkJydEVuZFNYVEhzIn0sMzE4OntuOiJCcnRCZWdpblNYVEgifSwzMTk6e246IkJydEVuZFNYVEgifSwzMjA6e246'@;
put 'IkJydEJlZ2luSVNYVEhSd3MifSwzMjE6e246IkJydEVuZElTWFRIUndzIn0sMzIyOntuOiJCcnRCZWdpbklTWFRIQ29scyJ9LDMyMzp7bjoiQnJ0RW5kSVNYVEhDb2xzIn0sMzI0OntuOiJCcnRCZWdpblNYVERNUFMifSwzMjU6e246IkJydEVuZFNYVERNUHMifSwzMjY6e246IkJydEJlZ2lu'@;
put 'U1hURE1QIn0sMzI3OntuOiJCcnRFbmRTWFRETVAifSwzMjg6e246IkJydEJlZ2luU1hUSEl0ZW1zIn0sMzI5OntuOiJCcnRFbmRTWFRISXRlbXMifSwzMzA6e246IkJydEJlZ2luU1hUSEl0ZW0ifSwzMzE6e246IkJydEVuZFNYVEhJdGVtIn0sMzMyOntuOiJCcnRCZWdpbk1ldGFkYXRhIn0s'@;
put 'MzMzOntuOiJCcnRFbmRNZXRhZGF0YSJ9LDMzNDp7bjoiQnJ0QmVnaW5Fc21kdGluZm8ifSwzMzU6e246IkJydE1kdGluZm8ifSwzMzY6e246IkJydEVuZEVzbWR0aW5mbyJ9LDMzNzp7bjoiQnJ0QmVnaW5Fc21kYiJ9LDMzODp7bjoiQnJ0RW5kRXNtZGIifSwzMzk6e246IkJydEJlZ2luRXNm'@;
put 'bWQifSwzNDA6e246IkJydEVuZEVzZm1kIn0sMzQxOntuOiJCcnRCZWdpblNpbmdsZUNlbGxzIn0sMzQyOntuOiJCcnRFbmRTaW5nbGVDZWxscyJ9LDM0Mzp7bjoiQnJ0QmVnaW5MaXN0In0sMzQ0OntuOiJCcnRFbmRMaXN0In0sMzQ1OntuOiJCcnRCZWdpbkxpc3RDb2xzIn0sMzQ2OntuOiJC'@;
put 'cnRFbmRMaXN0Q29scyJ9LDM0Nzp7bjoiQnJ0QmVnaW5MaXN0Q29sIn0sMzQ4OntuOiJCcnRFbmRMaXN0Q29sIn0sMzQ5OntuOiJCcnRCZWdpbkxpc3RYbWxDUHIifSwzNTA6e246IkJydEVuZExpc3RYbWxDUHIifSwzNTE6e246IkJydExpc3RDQ0ZtbGEifSwzNTI6e246IkJydExpc3RUckZt'@;
put 'bGEifSwzNTM6e246IkJydEJlZ2luRXh0ZXJuYWxzIn0sMzU0OntuOiJCcnRFbmRFeHRlcm5hbHMifSwzNTU6e246IkJydFN1cEJvb2tTcmMiLGY6VDF9LDM1Nzp7bjoiQnJ0U3VwU2VsZiJ9LDM1ODp7bjoiQnJ0U3VwU2FtZSJ9LDM1OTp7bjoiQnJ0U3VwVGFicyJ9LDM2MDp7bjoiQnJ0QmVn'@;
put 'aW5TdXBCb29rIn0sMzYxOntuOiJCcnRQbGFjZWhvbGRlck5hbWUifSwzNjI6e246IkJydEV4dGVyblNoZWV0IixmOlNtfSwzNjM6e246IkJydEV4dGVyblRhYmxlU3RhcnQifSwzNjQ6e246IkJydEV4dGVyblRhYmxlRW5kIn0sMzY2OntuOiJCcnRFeHRlcm5Sb3dIZHIifSwzNjc6e246IkJy'@;
put 'dEV4dGVybkNlbGxCbGFuayJ9LDM2ODp7bjoiQnJ0RXh0ZXJuQ2VsbFJlYWwifSwzNjk6e246IkJydEV4dGVybkNlbGxCb29sIn0sMzcwOntuOiJCcnRFeHRlcm5DZWxsRXJyb3IifSwzNzE6e246IkJydEV4dGVybkNlbGxTdHJpbmcifSwzNzI6e246IkJydEJlZ2luRXNtZHgifSwzNzM6e246'@;
put 'IkJydEVuZEVzbWR4In0sMzc0OntuOiJCcnRCZWdpbk1keFNldCJ9LDM3NTp7bjoiQnJ0RW5kTWR4U2V0In0sMzc2OntuOiJCcnRCZWdpbk1keE1iclByb3AifSwzNzc6e246IkJydEVuZE1keE1iclByb3AifSwzNzg6e246IkJydEJlZ2luTWR4S1BJIn0sMzc5OntuOiJCcnRFbmRNZHhLUEki'@;
put 'fSwzODA6e246IkJydEJlZ2luRXNzdHIifSwzODE6e246IkJydEVuZEVzc3RyIn0sMzgyOntuOiJCcnRCZWdpblBSRkl0ZW0ifSwzODM6e246IkJydEVuZFBSRkl0ZW0ifSwzODQ6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEcyJ9LDM4NTp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEcyJ9LDM4Njp7'@;
put 'bjoiQnJ0QmVnaW5QaXZvdENhY2hlSUQifSwzODc6e246IkJydEVuZFBpdm90Q2FjaGVJRCJ9LDM4ODp7bjoiQnJ0QmVnaW5JU1hWSXMifSwzODk6e246IkJydEVuZElTWFZJcyJ9LDM5MDp7bjoiQnJ0QmVnaW5Db2xJbmZvcyJ9LDM5MTp7bjoiQnJ0RW5kQ29sSW5mb3MifSwzOTI6e246IkJy'@;
put 'dEJlZ2luUndCcmsifSwzOTM6e246IkJydEVuZFJ3QnJrIn0sMzk0OntuOiJCcnRCZWdpbkNvbEJyayJ9LDM5NTp7bjoiQnJ0RW5kQ29sQnJrIn0sMzk2OntuOiJCcnRCcmsifSwzOTc6e246IkJydFVzZXJCb29rVmlldyJ9LDM5ODp7bjoiQnJ0SW5mbyJ9LDM5OTp7bjoiQnJ0Q1VzciJ9LDQw'@;
put 'MDp7bjoiQnJ0VXNyIn0sNDAxOntuOiJCcnRCZWdpblVzZXJzIn0sNDAzOntuOiJCcnRFT0YifSw0MDQ6e246IkJydFVDUiJ9LDQwNTp7bjoiQnJ0UlJJbnNEZWwifSw0MDY6e246IkJydFJSRW5kSW5zRGVsIn0sNDA3OntuOiJCcnRSUk1vdmUifSw0MDg6e246IkJydFJSRW5kTW92ZSJ9LDQw'@;
put 'OTp7bjoiQnJ0UlJDaGdDZWxsIn0sNDEwOntuOiJCcnRSUkVuZENoZ0NlbGwifSw0MTE6e246IkJydFJSSGVhZGVyIn0sNDEyOntuOiJCcnRSUlVzZXJWaWV3In0sNDEzOntuOiJCcnRSUlJlblNoZWV0In0sNDE0OntuOiJCcnRSUkluc2VydFNoIn0sNDE1OntuOiJCcnRSUkRlZk5hbWUifSw0'@;
put 'MTY6e246IkJydFJSTm90ZSJ9LDQxNzp7bjoiQnJ0UlJDb25mbGljdCJ9LDQxODp7bjoiQnJ0UlJUUVNJRiJ9LDQxOTp7bjoiQnJ0UlJGb3JtYXQifSw0MjA6e246IkJydFJSRW5kRm9ybWF0In0sNDIxOntuOiJCcnRSUkF1dG9GbXQifSw0MjI6e246IkJydEJlZ2luVXNlclNoVmlld3MifSw0'@;
put 'MjM6e246IkJydEJlZ2luVXNlclNoVmlldyJ9LDQyNDp7bjoiQnJ0RW5kVXNlclNoVmlldyJ9LDQyNTp7bjoiQnJ0RW5kVXNlclNoVmlld3MifSw0MjY6e246IkJydEFyckZtbGEiLGY6ZnVuY3Rpb24gaDUoeSxQLEwpe3ZhciBRPXkubCtQLHJlPVRkKHkpLHBlPXkucmVhZF9zaGlmdCgxKSxf'@;
put 'ZT1bcmVdO2lmKF9lWzJdPXBlLEwuY2VsbEZvcm11bGEpe3ZhciB2ZT1yUyh5LFEteS5sLEwpO19lWzFdPXZlfWVsc2UgeS5sPVE7cmV0dXJuIF9lfX0sNDI3OntuOiJCcnRTaHJGbWxhIixmOmZ1bmN0aW9uIGhMKHksUCxMKXt2YXIgUT15LmwrUCxwZT1bSmMoeSwxNildO2lmKEwuY2VsbEZv'@;
put 'cm11bGEpe3ZhciBfZT1FSSh5LFEteS5sLEwpO3BlWzFdPV9lLHkubD1RfWVsc2UgeS5sPVE7cmV0dXJuIHBlfX0sNDI4OntuOiJCcnRUYWJsZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQzMDp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbnMifSw0MzE6e246IkJydEJlZ2lu'@;
put 'UENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntuOiJCcnRCZWdpblBDRENhbGNNZW0ifSw0MzQ6e246IkJydEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdMZXZlbHMifSw0MzY6e246IkJydEVuZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJC'@;
put 'cnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0Mzk6e246IkJydEJlZ2luUENESEdMR3JvdXBzIn0sNDQwOntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJlZ2luUENESEdMR3JvdXAifSw0NDI6e246IkJydEVuZFBDREhHTEdyb3VwIn0s'@;
put 'NDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVycyJ9LDQ0NTp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVyIn0sNDQ3OntuOiJCcnRCZWdpblFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJ'@;
put 'In0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0NTE6e246IkJydEJlZ2luRGVsZXRlZE5hbWVzIn0sNDUyOntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJlZ2luRGVsZXRlZE5hbWUifSw0NTQ6e246IkJydEVuZERlbGV0ZWROYW1lIn0s'@;
put 'NDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1Nzp7bjoiQnJ0QmVnaW5RU0lGIn0sNDU4OntuOiJCcnRFbmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUifSw0NjA6e246IkJydEVuZEF1dG9Tb3J0U2NvcGUifSw0NjE6e246IkJydEJl'@;
put 'Z2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjM6e246IkJydEJlZ2luQ0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246IkJydEJlZ2luSWNvblNldCJ9LDQ2Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2'@;
put 'Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0sNDY5OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUifSw0NzA6e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8ifSw0NzI6e246IkJydEV4dGVyblZhbHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVn'@;
put 'aW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3NTp7bjoiQnJ0SW5kZXhlZENvbG9yIn0sNDc2OntuOiJCcnRNYXJnaW5zIixmOmZ1bmN0aW9uIGZMKHkpe3ZhciBQPXt9O3JldHVybiBxUy5mb3JFYWNoKGZ1bmN0aW9uKEwpe1BbTF09bWEoeSl9KSxQfX0s'@;
put 'NDc3OntuOiJCcnRQcmludE9wdGlvbnMifSw0Nzg6e246IkJydFBhZ2VTZXR1cCJ9LDQ3OTp7bjoiQnJ0QmVnaW5IZWFkZXJGb290ZXIifSw0ODA6e246IkJydEVuZEhlYWRlckZvb3RlciJ9LDQ4MTp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdCJ9LDQ4Mjp7bjoiQnJ0RW5kU1hDcnRGb3JtYXQi'@;
put 'fSw0ODM6e246IkJydEJlZ2luU1hDcnRGb3JtYXRzIn0sNDg0OntuOiJCcnRFbmRTWENydEZvcm1hdHMifSw0ODU6e246IkJydFdzRm10SW5mbyIsZjpmdW5jdGlvbiBYSSh5KXt2YXIgUD17fSxMPXt9LFE9e30scmU9eS5yZWFkX3NoaWZ0KDQpLHBlPXkucmVhZF9zaGlmdCgyKTtRLndjaD1y'@;
put 'ZTw9NjU1MzY/cmUvMjU2OnBlO3ZhciBfZT15LnJlYWRfc2hpZnQoMik7TC5ocHQ9X2UvMjA7dmFyIHZlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gMiZ2ZSYmKEwuaGlkZGVuPSEwKSw0JnZlJiYoUC50b3B0aGljaz0hMCksOCZ2ZSYmKFAuYm90dGhpY2s9ITApLFAucm93b3V0bGluZT15LnJl'@;
put 'YWRfc2hpZnQoMSksUC5jb2xvdXRsaW5lPXkucmVhZF9zaGlmdCgxKSxJMyhMKSxQLnJvdz1MLHB1KFEpLFAuY29sPVEsUH19LDQ4Njp7bjoiQnJ0QmVnaW5NZ3MifSw0ODc6e246IkJydEVuZE1HcyJ9LDQ4ODp7bjoiQnJ0QmVnaW5NR01hcHMifSw0ODk6e246IkJydEVuZE1HTWFwcyJ9LDQ5'@;
put 'MDp7bjoiQnJ0QmVnaW5NRyJ9LDQ5MTp7bjoiQnJ0RW5kTUcifSw0OTI6e246IkJydEJlZ2luTWFwIn0sNDkzOntuOiJCcnRFbmRNYXAifSw0OTQ6e246IkJydEhMaW5rIixmOmZ1bmN0aW9uIGQ1KHksUCl7dmFyIEw9eS5sK1AsUT1KYyh5LDE2KSxyZT1BdSh5KSxwZT13Yyh5KSxfZT13Yyh5'@;
put 'KSx2ZT13Yyh5KTt5Lmw9TDt2YXIgU2U9e3JmeDpRLHJlbElkOnJlLGxvYzpwZSxkaXNwbGF5OnZlfTtyZXR1cm4gX2UmJihTZS5Ub29sdGlwPV9lKSxTZX19LDQ5NTp7bjoiQnJ0QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3OntuOiJCcnRCZWdpbkRSZWZzIn0sNDk4Ontu'@;
put 'OiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVnaW5TY2VuTWFuIn0sNTAxOntuOiJCcnRFbmRTY2VuTWFuIn0sNTAyOntuOiJCcnRCZWdpblNjdCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMifSw1MDU6e246IkJydEJlZ2luRFhGcyJ9'@;
put 'LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJCcnRCZWdpblRhYmxlU3R5bGVzIn0sNTA5OntuOiJCcnRFbmRUYWJsZVN0eWxlcyJ9LDUxMDp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRUYWJsZVN0eWxlIn0sNTEyOntuOiJCcnRU'@;
put 'YWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9LDUxNDp7bjoiQnJ0QmVnaW5Wb2xEZXBzIn0sNTE1OntuOiJCcnRFbmRWb2xEZXBzIn0sNTE2OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZvbFR5cGUifSw1MTg6e246IkJydEJlZ2lu'@;
put 'Vm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVnaW5Wb2xUb3BpYyJ9LDUyMTp7bjoiQnJ0RW5kVm9sVG9waWMifSw1MjI6e246IkJydFZvbFN1YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJydFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9s'@;
put 'RXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1Mjg6e246IkJydEJlZ2luQ2FsY0NoYWluJCJ9LDUyOTp7bjoiQnJ0RW5kQ2FsY0NoYWluJCJ9LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJydEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoi'@;
put 'QnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6e246IkJydEJvb2tQcm90ZWN0aW9uIn0sNTM1OntuOiJCcnRTaGVldFByb3RlY3Rpb24ifSw1MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJC'@;
put 'cnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdCJ9LDU0MTp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5'@;
put 'OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOlQxfSw1NTE6e246IkJydExlZ2FjeURyYXdpbmcifSw1NTI6e246IkJydExlZ2FjeURyYXdpbmdIRiJ9LDU1Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRX'@;
put 'ZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3OntuOiJCcnRFbmRXZWJQdWJJdGVtIn0sNTU4OntuOiJCcnRCZWdpblNYQ29uZEZtdCJ9LDU1OTp7bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNYQ29uZEZtdHMifSw1NjE6e246IkJydEVu'@;
put 'ZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xvciJ9LDU2NTp7bjoiQnJ0QmVnaW5JbmRleGVkQ29sb3JzIn0sNTY2OntuOiJCcnRFbmRJbmRleGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3Jz'@;
put 'In0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9LDU3NDp7bjoiQnJ0RW5kRFZhbHMifSw1Nzc6e246IkJydFN1cE5hbWVTdGFydCJ9LDU3ODp7bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoi'@;
put 'QnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoiQnJ0U3VwTmFtZVN0In0sNTgzOntuOiJCcnRTdXBOYW1lTmlsIn0sNTg0OntuOiJCcnRTdXBOYW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6e246IkJydFN1cE5hbWVCaXRzIn0sNTg3'@;
put 'OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5OntuOiJCcnRDZWxsU21hcnRUYWdQcm9wZXJ0eSJ9LDU5MDp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRU'@;
put 'YWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRCZWdpblNtYXJ0VGFncyJ9LDU5NTp7bjoiQnJ0RW5kU21hcnRUYWdzIn0sNTk2OntuOiJCcnRTbWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdUeXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21h'@;
put 'cnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246IkJydEVuZFNYRmlsdGVycyJ9LDYwMTp7bjoiQnJ0QmVnaW5TWEZJTFRFUiJ9LDYwMjp7bjoiQnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMifSw2MDQ6e246IkJydEVuZEZpbGxzIn0s'@;
put 'NjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxsV2F0Y2hlcyJ9LDYwNzp7bjoiQnJ0Q2VsbFdhdGNoIn0sNjA4OntuOiJCcnRCZWdpbkNSRXJycyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRDcmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0'@;
put 'QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJlZ2luQm9yZGVycyJ9LDYxNDp7bjoiQnJ0RW5kQm9yZGVycyJ9LDYxNTp7bjoiQnJ0QmVnaW5GbXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRCZWdpbkNlbGxYRnMifSw2MTg6e246IkJy'@;
put 'dEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJCcnRFbmRTdHlsZXMifSw2MjU6e246IkJydEJpZ05hbWUifSw2MjY6e246IkJydEJlZ2luQ2VsbFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMifSw2Mjg6e246IkJydEJlZ2luQ29tbWVu'@;
put 'dHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIn0sNjMxOntuOiJCcnRFbmRDb21tZW50QXV0aG9ycyJ9LDYzMjp7bjoiQnJ0Q29tbWVudEF1dGhvciIsZjpYRH0sNjMzOntuOiJCcnRCZWdpbkNvbW1lbnRMaXN0In0sNjM0OntuOiJC'@;
put 'cnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1bmN0aW9uIEJDKHkpe3ZhciBQPXt9O1AuaWF1dGhvcj15LnJlYWRfc2hpZnQoNCk7dmFyIEw9SmMoeSwxNik7cmV0dXJuIFAucmZ4PUwucyxQLnJlZj1kaShMLnMpLHkubCs9MTYsUH19LDYzNjp7bjoiQnJ0'@;
put 'RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6WDd9LDYzODp7bjoiQnJ0QmVnaW5PbGVPYmplY3RzIn0sNjM5OntuOiJCcnRPbGVPYmplY3QifSw2NDA6e246IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hydWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hS'@;
put 'dWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246IkJydEFjdGl2ZVgifSw2NDU6e246IkJydEVuZEFjdGl2ZVhDb250cm9scyJ9LDY0Njp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9'@;
put 'LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzIn0sNjUxOntuOiJCcnRDc1Byb3AiLGY6ZnVuY3Rpb24gZXAoeSxQKXtyZXR1cm4geS5sKz0xMCx7bmFtZTp3Yyh5KX19fSw2NTI6e246IkJydENzUGFnZVNldHVwIn0sNjUzOntuOiJCcnRCZWdp'@;
put 'blVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3In0sNjU2OntuOiJCcnRFbmRVc2VyQ3NWaWV3In0sNjU3OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJCcnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1'@;
put 'OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0cyJ9LDY2MTp7bjoiQnJ0TGlzdFBhcnQifSw2NjI6e246IkJydEVuZExpc3RQYXJ0cyJ9LDY2Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVnaW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRG'@;
put 'bkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBBZGRpbiJ9LDY2ODp7bjoiQnJ0U1hURE1QT3JkZXIifSw2Njk6e246IkJydENzUHJvdGVjdGlvbiJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7'@;
put 'bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7bjoiQnJ0UlJTb3J0SXRlbSJ9LDY3Njp7bjoiQnJ0RmlsZVNoYXJpbmdJc28ifSw2Nzc6e246IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVldFByb3RlY3Rpb25Jc28ifSw2Nzk6e246'@;
put 'IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvIn0sNjgxOntuOiJCcnREVmFsTGlzdCJ9LDEwMjQ6e246IkJydFJ3RGVzY2VudCJ9LDEwMjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdpblNYVHVwbGVTZXQifSwxMDI3OntuOiJC'@;
put 'cnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVyIn0sMTAyOTp7bjoiQnJ0RW5kU1hUdXBsZVNldEhlYWRlciJ9LDEwMzA6e246IkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246'@;
put 'IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0Um93In0sMTAzNDp7bjoiQnJ0RW5kU1hUdXBsZVNldFJvdyJ9LDEwMzU6e246IkJydFNYVHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9LDEwMzc6e246IkJydFBDREgxNCJ9LDEw'@;
put 'Mzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENEQ2FsY01lbTE0In0sMTA0MDp7bjoiQnJ0U1hUSDE0In0sMTA0MTp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdyb3VwIn0sMTA0Mzp7bjoiQnJ0U3Bhcmts'@;
put 'aW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZvRXgxNCJ9LDEwNDY6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ3OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDg6e246IkJydEJlZ2luQ0ZSdWxlMTQi'@;
put 'fSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9LDEwNTE6e246IkJydEJlZ2luRGF0YWJhcjE0In0sMTA1Mjp7bjoiQnJ0QmVnaW5JY29uU2V0MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gYkwoeSxQLEwpe3ZhciBRPWZ1bmN0aW9uIEd0'@;
put 'KHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9e307cmV0dXJuIDEmUSYmKHJlLnJlZnM9ZnVuY3Rpb24gVW4oeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPVtdO1AtLSA+MDspTC5wdXNoKElyKHkpKTtyZXR1cm4gTH0oeSkpLDImUSYmKHJlLnNxcmVmcz1mdW5jdGlvbiB5'@;
put 'byh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9W107UC0tID4wOylMLnB1c2goZXMoeSkpO3JldHVybiBMfSh5KSksNCZRJiYocmUuZm9ybXVsYXM9ZnVuY3Rpb24genMoeSxQLEwpe2Zvcih2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9W107US0tID4wOylyZS5wdXNoKG9jKHksMCxM'@;
put 'KSk7cmV0dXJuIHJlfSh5LDAsTCkpLDgmUSYmKHJlLnJlbElEPWZ1bmN0aW9uIGltKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gMD09PVA/IiI6eS5yZWFkX3NoaWZ0KFAsInV0ZjE2bGUiKX0oeSkpLHJlfSh5LDAsTCkscmU9eS5yZWFkX3NoaWZ0KDQpLHBlPUF1KHkpLF9lPUF1'@;
put 'KHkpLHZlPUF1KHkpLFNlPUF1KHkpLEhlPShRLmZvcm11bGFzfHxbXSlbMF0sQmU9KFEuZm9ybXVsYXN8fFtdKVsxXSxHZT0xNSZyZSxudD17dDplb1tHZV0sc3FyZng6US5zcXJlZnNbMF0sczpbcGUsX2UsdmUsU2VdfTtyZXR1cm4gSGUmJihudC5mMT1IZSksQmUmJihudC5mMj1CZSksMD09'@;
put 'R2V8fDM9PUdlfHw3PT1HZXx8KG50Lm9wPUJ2W3JlPj4yMCYxNV0pLG50fX0sMTA1NDp7bjoiQnJ0QmVnaW5EVmFsczE0In0sMTA1NTp7bjoiQnJ0Q29sb3IxNCJ9LDEwNTY6e246IkJydEJlZ2luU3BhcmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNwYXJrbGluZXMifSwxMDU4OntuOiJCcnRC'@;
put 'ZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdyb3VwcyJ9LDEwNjE6e246IkJydFNYVkQxNCJ9LDEwNjI6e246IkJydEJlZ2luU1hWaWV3MTQifSwxMDYzOntuOiJCcnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJydEJlZ2luU1hWaWV3MTYifSwxMDY1Ontu'@;
put 'OiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3OntuOiJCcnRFbmRQQ0QxNCJ9LDEwNjg6e246IkJydEJlZ2luRXh0Q29ubjE0In0sMTA2OTp7bjoiQnJ0RW5kRXh0Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEcyJ9LDEwNzE6e246'@;
put 'IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEIn0sMTA3Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9LDEwNzU6e246IkJydEJlZ2luU2xpY2VyQ2FjaGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJDYWNoZSJ9LDEwNzc6e246IkJydEJlZ2lu'@;
put 'U2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9LDEwNzk6e246IkJydEJlZ2luU2xpY2Vyc0V4In0sMTA4MDp7bjoiQnJ0RW5kU2xpY2Vyc0V4In0sMTA4MTp7bjoiQnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246IkJydEVuZFNsaWNlckV4In0sMTA4Mzp7'@;
put 'bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1OntuOiJCcnRTbGljZXJDYWNoZVBpdm90VGFibGVzIn0sMTA4Njp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODg6e246'@;
put 'IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA5MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5Mjp7bjoiQnJ0QmVn'@;
put 'aW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTQ6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5NTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7bjoiQnJ0U2xpY2VyQ2FjaGVPbGFwSXRl'@;
put 'bSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5ODp7bjoiQnJ0U2xpY2VyQ2FjaGVTZWxlY3Rpb24ifSwxMDk5OntuOiJCcnRFbmRTbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMTp7bjoi'@;
put 'QnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNoZU5hdGl2ZUl0ZW0ifSwxMTAzOntuOiJCcnRSYW5nZVByb3RlY3Rpb24xNCJ9LDExMDQ6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0Q2VsbElnbm9yZUVDMTQifSwxMTExOntu'@;
put 'OiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5TbGljZXJzIn0sMTExNjp7bjoiQnJ0RW5k'@;
put 'U2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVnaW5TWEVkaXQifSwxMTE5OntuOiJCcnRFbmRTWEVkaXQifSwxMTIwOntuOiJCcnRCZWdpblNYRWRpdHMifSwxMTIxOntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7bjoiQnJ0QmVnaW5TWENoYW5nZSJ9LDEx'@;
put 'MjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5nZXMifSwxMTI1OntuOiJCcnRFbmRTWENoYW5nZXMifSwxMTI2OntuOiJCcnRTWFR1cGxlSXRlbXMifSwxMTI4OntuOiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEyOTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGUi'@;
put 'fSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRCZWdpblN0eWxlU2hlZXRFeHQxNCJ9LDExMzI6e246IkJydEVuZFN0eWxlU2hlZXRFeHQxNCJ9LDExMzM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNDp7bjoiQnJ0RW5kU2xp'@;
put 'Y2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzc6e246IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDExMzg6e246IkJydEVuZFBDRENhbGNNZW1F'@;
put 'eHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoiQnJ0RW5kUENEQ2FsY01lbXNFeHQifSwxMTQxOntuOiJCcnRQQ0RGaWVsZDE0In0sMTE0Mjp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRFbmRTbGljZXJTdHlsZXMifSwxMTQ0Ontu'@;
put 'OiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRTbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0Njp7bjoiQnJ0Q0ZSdWxlRXh0In0sMTE0Nzp7bjoiQnJ0QmVnaW5TWENvbmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNYQ29uZEZtdDE0In0sMTE0OTp7bjoiQnJ0'@;
put 'QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQifSwxMTUyOntuOiJCcnRCZWdpblNvcnRDb25kMTQifSwxMTUzOntuOiJCcnRFbmRTb3J0Q29uZDE0In0sMTE1NDp7bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246IkJydEVuZEljb25TZXQxNCJ9LDExNTY6'@;
put 'e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2FsZTE0In0sMTE1ODp7bjoiQnJ0RW5kQ29sb3JTY2FsZTE0In0sMTE1OTp7bjoiQnJ0QmVnaW5TeHJ1bGVzMTQifSwxMTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwxMTYxOntuOiJCcnRCZWdpblBSdWxlMTQi'@;
put 'fSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMxNCJ9LDExNjQ6e246IkJydEVuZFBSRmlsdGVyczE0In0sMTE2NTp7bjoiQnJ0QmVnaW5QUkZpbHRlcjE0In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIxNCJ9LDExNjc6e246IkJydEJlZ2luUFJG'@;
put 'SXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0QmVnaW5DZWxsSWdub3JlRUNzMTQifSwxMTcwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzMTQifSwxMTcxOntuOiJCcnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2luRHhGMTRzIn0sMTE3Mzp7bjoiQnJ0RW5k'@;
put 'RHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMxNCJ9LDExODA6e246IkJydEN1c3RvbUZpbHRlcjE0In0sMTE4MTp7bjoiQnJ0SWNvbkZpbHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RDYWNoZUNvbm5lY3Rpb25OYW1lIn0sMjA0'@;
put 'ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoiQnJ0RW5kRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNTA6e246IkJydERlY291cGxlZFBpdm90Q2FjaGVJRCJ9LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJsZVJlZnMifSwyMDUyOntuOiJCcnRFbmRQ'@;
put 'aXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0OntuOiJCcnRTbGljZXJDYWNoZUJvb2tQaXZvdFRhYmxlcyJ9LDIwNTU6e246IkJydEJlZ2luU3h2Y2VsbHMifSwyMDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIwNTc6e246IkJydEJlZ2luU3hSb3cifSwy'@;
put 'MDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9LDIwNjc6e246IkJydFFzaTE1In0sMjA2ODp7bjoiQnJ0QmVnaW5XZWJFeHRlbnNpb25zIn0sMjA2OTp7bjoiQnJ0RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246IkJydFdlYkV4dGVuc2lvbiJ9LDIwNzE6'@;
put 'e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDczOntuOiJCcnRFbmRQaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzU6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSUQifSwy'@;
put 'MDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRFbmRUYWJsZVNsaWNlckNhY2hlIn0sMjA3OTp7bjoiQnJ0U3hGaWx0ZXIxNSJ9LDIwODA6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgxOntuOiJCcnRFbmRUaW1lbGluZUNh'@;
put 'Y2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSUQifSwyMDgzOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRHMifSwyMDg0OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSUQifSwy'@;
put 'MDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdpblRpbWVsaW5lc0V4In0sMjA4ODp7bjoiQnJ0RW5kVGltZWxpbmVzRXgifSwyMDg5OntuOiJCcnRCZWdpblRpbWVsaW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1lbGluZUV4In0sMjA5MTp7bjoiQnJ0V29y'@;
put 'a0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlIn0sMjA5NDp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZSJ9LDIwOTU6e246IkJydFRpbWVsaW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlc2hl'@;
put 'ZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5ODp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlcyJ9LDIwOTk6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzIn0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAxOntu'@;
put 'OiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYxNSJ9LDIxMDM6e246IkJydEJlZ2luRHhmczE1In0sMjEwNDp7bjoiYnJ0RW5kRHhmczE1In0sMjEwNTp7bjoiQnJ0U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9EYXRhIn0sMjEwNjp7bjoiQnJ0QmVnaW5J'@;
put 'dGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMifSwyMTA4OntuOiJCcnRJdGVtVW5pcXVlTmFtZSJ9LDIxMDk6e246IkJydEJlZ2luRXh0Q29ubjE1In0sMjExMDp7bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7bjoiQnJ0QmVnaW5PbGVkYlByMTUifSwy'@;
put 'MTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFGZWVkUHIxNSJ9LDIxMTQ6e246IkJydEVuZERhdGFGZWVkUHIxNSJ9LDIxMTU6e246IkJydFRleHRQcjE1In0sMjExNjp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7bjoiQnJ0RGJDb21tYW5kMTUifSwyMTE4'@;
put 'OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxlczE1In0sMjEyMDp7bjoiQnJ0RGJUYWJsZTE1In0sMjEyMTp7bjoiQnJ0QmVnaW5EYXRhTW9kZWwifSwyMTIyOntuOiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntuOiJCcnRCZWdpbk1vZGVsVGFibGVzIn0s'@;
put 'MjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRhYmxlIn0sMjEyNjp7bjoiQnJ0QmVnaW5Nb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI3OntuOiJCcnRFbmRNb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRNb2RlbFJlbGF0aW9uc2hpcCJ9LDIxMjk6'@;
put 'e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6MTUifSwyMTMxOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0MTUifSwyMTMyOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mbzE1In0sMjEzNDp7bjoi'@;
put 'QnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJZFZlcnNpb24ifSwyMTM2OntuOiJCcnRTWERJMTUifSwyMTM3OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzk6e246IkJy'@;
put 'dEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZyJ9LDIxNDE6e246IkJydE1vZGVsVGltZUdyb3VwaW5nQ2FsY0NvbCJ9LDMwNzI6e246IkJydFVpZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRyIn0sNTA5NTp7bjoiQnJ0QmVnaW5DYWxj'@;
put 'RmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3OntuOiJCcnRDYWxjRmVhdHVyZSJ9LDY1NTM1OntuOiIifX0sYjU9UGUobWYsIm4iKTtiNS5CcnRGUlRBcmNoSUQkPTE2O3ZhciBYMD17Njp7bjoiRm9ybXVsYSIsZjp6M30sMTA6e246IkVPRiIsZjpQZH0sMTI6'@;
put 'e246IkNhbGNDb3VudCIsZjpobH0sMTM6e246IkNhbGNNb2RlIixmOmhsfSwxNDp7bjoiQ2FsY1ByZWNpc2lvbiIsZjpTb30sMTU6e246IkNhbGNSZWZNb2RlIixmOlNvfSwxNjp7bjoiQ2FsY0RlbHRhIixmOm1hfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6U299LDE4OntuOiJQcm90ZWN0IixmOlNv'@;
put 'fSwxOTp7bjoiUGFzc3dvcmQiLGY6aGx9LDIwOntuOiJIZWFkZXIiLGY6VjF9LDIxOntuOiJGb290ZXIiLGY6VjF9LDIzOntuOiJFeHRlcm5TaGVldCIsZjpTbX0sMjQ6e246IkxibCIsZjpWd30sMjU6e246IldpblByb3RlY3QiLGY6U299LDI2OntuOiJWZXJ0aWNhbFBhZ2VCcmVha3MifSwy'@;
put 'Nzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5jdGlvbiBVdyh5LFAsTCl7cmV0dXJuIGZ1bmN0aW9uIFM5KHksUCxMKXtpZighKEwuYmlmZjw4KSl7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpLHJlPXkucmVhZF9zaGlmdCgyKSxwZT15LnJlYWRfc2hpZnQoMiks'@;
put 'X2U9eS5yZWFkX3NoaWZ0KDIpLHZlPVYyKHksMCxMKTtyZXR1cm4gTC5iaWZmPDgmJnkucmVhZF9zaGlmdCgxKSxbe3I6USxjOnJlfSx2ZSxfZSxwZV19fSh5LDAsTCl9fSwyOTp7bjoiU2VsZWN0aW9uIixmOmZ1bmN0aW9uIFMzKHksUCxMKXtyZXR1cm4gTCYmTC5iaWZmPDU/KHkubCs9UCx7'@;
put 'Y2VsbDp7cjowLGM6MH19KTooeS5yZWFkX3NoaWZ0KDEpLHtjZWxsOmRpKHtyOnkucmVhZF9zaGlmdCgyKSxjOnkucmVhZF9zaGlmdCgyKX0pfSl9fSwzNDp7bjoiRGF0ZTE5MDQiLGY6U299LDM1OntuOiJFeHRlcm5OYW1lIixmOnk5fSwzODp7bjoiTGVmdE1hcmdpbiIsZjptYX0sMzk6e246'@;
put 'IlJpZ2h0TWFyZ2luIixmOm1hfSw0MDp7bjoiVG9wTWFyZ2luIixmOm1hfSw0MTp7bjoiQm90dG9tTWFyZ2luIixmOm1hfSw0Mjp7bjoiUHJpbnRSb3dDb2wiLGY6U299LDQzOntuOiJQcmludEdyaWQiLGY6U299LDQ3OntuOiJGaWxlUGFzcyIsZjpmdW5jdGlvbiBObCh5LFAsTCl7aWYoTC5l'@;
put 'bmMpcmV0dXJuIEwuZW5jO3ZhciBRPXtUeXBlOkwuYmlmZj49OD95LnJlYWRfc2hpZnQoMik6MH07cmV0dXJuIFEuVHlwZT9mdW5jdGlvbiBnRCh5LFAsTCxRKXt2YXIgcmU9UXx8e307aWYocmUuSW5mbz15LnJlYWRfc2hpZnQoMikseS5sLT0yLDE9PT1yZS5JbmZvKXtpZihyZS5EYXRhPWZ1'@;
put 'bmN0aW9uIF9aKHkpe3ZhciBQPXt9LEw9UC5FbmNyeXB0aW9uVmVyc2lvbkluZm89RzAoeSw0KTtpZigxIT1MLk1ham9yfHwxIT1MLk1pbm9yKXRocm93InVucmVjb2duaXplZCB2ZXJzaW9uIGNvZGUgIitMLk1ham9yKyIgOiAiK0wuTWlub3I7cmV0dXJuIFAuU2FsdD15LnJlYWRfc2hpZnQo'@;
put 'MTYpLFAuRW5jcnlwdGVkVmVyaWZpZXI9eS5yZWFkX3NoaWZ0KDE2KSxQLkVuY3J5cHRlZFZlcmlmaWVySGFzaD15LnJlYWRfc2hpZnQoMTYpLFB9KHkpLEwucGFzc3dvcmQmJnR5cGVvZiBPNjwidSIpe3ZhciBwZT1PNihMLnBhc3N3b3JkLHJlLkRhdGEuU2FsdCwiMDAwMDAwMDAiKSxfZT11'@;
put 'ZShyZS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVyK3JlLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXJIYXNoLCJoZXgiKSx2ZT14ZC5yYzQodWUocGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSxfZSk7US52YWxpZD14ZC5tZDUodmUuc2xpY2UoMCwxNikpPT1CdWZmZXIuZnJvbSh2ZS5zbGljZSgx'@;
put 'NikpLnRvU3RyaW5nKCJoZXgiKSxyZS5EYXRhLktleT1wZSxRLmluc2l0dT1mdW5jdGlvbiBvcih5LFApe3ZhciBMPW5ldyBBcnJheSgyNTYpLFE9MCxyZT0wLHBlPTAsX2U9MDtmdW5jdGlvbiB2ZShudCl7Zm9yKFE9MCxyZT0wLHBlPTAsX2U9MCxyZT0wOzI1NiE9cmU7KytyZSlMW3JlXT1y'@;
put 'ZTtmb3IocGU9MCxyZT0wOzI1NiE9cmU7KytyZSl7dHJ5e3BlPXBlK0xbcmVdK250W3JlJW50Lmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2goZHQpe3Rocm93IGNvbnNvbGUubG9nKHJlLG50W3JlJW50Lmxlbmd0aF0pLGR0fV9lPUxbcmVdLExbcmVdPUxbcGVdLExbcGVdPV9lfXJl'@;
put 'PXBlPTB9ZnVuY3Rpb24gU2UobnQpe3ZhciBkdD1HKG50Lmxlbmd0aCk7Zm9yKFE9MDtRIT1udC5sZW5ndGg7KytRKV9lPUxbcmU9cmUrMSYyNTVdLExbcmVdPUxbcGU9KHBlK0xbcmVdKSUyNTZdLExbcGVdPV9lLGR0W1FdPW50W1FdXkxbTFtyZV0rTFtwZV0mMjU1XTtyZXR1cm4gQnVmZmVy'@;
put 'LmZyb20oZHQpfXZhciBIZT15LktleSxCZT0wO3ZlKHVlKEhlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBHZT0wO3JldHVybiBmdW5jdGlvbihudCl7aWYoR2UrbnQubGVuZ3RoPDEwMjQpcmV0dXJuIEdlKz1udC5sZW5ndGgsU2UobnQpO3ZhciBjdD0wLGJ0PXVlKG50LnNsaWNl'@;
put 'KGN0LGN0KyhDdD0xMDI0LUdlKSkpO2N0Kz1DdCxHZT0wO3ZhciBGdD1TZShidCk7Zm9yKGN0PT1udC5sZW5ndGgmJigrK0JlLEhlPU82KFAseS5TYWx0LFI2KEJlKSksdmUodWUoSGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2N0PG50Lmxlbmd0aDspeysrQmUsSGU9TzYoUCx5LlNh'@;
put 'bHQsUjYoQmUpKSx2ZShCdWZmZXIuZnJvbShIZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgQ3Q9TWF0aC5taW4oMTAyNCxudC5sZW5ndGgtY3QpO2J0PXVlKG50LnNsaWNlKGN0LGN0K0N0KSksY3QrPUN0LEdlPUN0LEZ0PUJ1ZmZlci5jb25jYXQoW0Z0LFNlKGJ0KV0pfXJldHVy'@;
put 'biBGdH19KHJlLkRhdGEsTC5wYXNzd29yZCl9fWVsc2UgaWYocmUuRGF0YT1mdW5jdGlvbiB2Wih5LFApe3ZhciBMPXt9LFE9TC5FbmNyeXB0aW9uVmVyc2lvbkluZm89RzAoeSw0KTtpZihQLT00LDIhPVEuTWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWlub3IgdmVyc2lv'@;
put 'biBjb2RlOiAiK1EuTWlub3IpO2lmKFEuTWFqb3I+NHx8US5NYWpvcjwyKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitRLk1ham9yKTtMLkZsYWdzPXkucmVhZF9zaGlmdCg0KSxQLT00O3ZhciByZT15LnJlYWRfc2hpZnQoNCk7cmV0dXJuIFAt'@;
put 'PTQsTC5FbmNyeXB0aW9uSGVhZGVyPUk5KHkscmUpLEwuRW5jcnlwdGlvblZlcmlmaWVyPVJtKHksUC09cmUpLEx9KHksUCkscmUuRGF0YSYmcmUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyJiYyNjYyNT09PXJlLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5BbGdJRCYmTC5wYXNzd29yZCYmdHlwZW9m'@;
put 'IGdyPCJ1Iil7dmFyIFNlPWdyKEwucGFzc3dvcmQscmUuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdC50b1N0cmluZygiaGV4IiksIjAwMDAwMDAwIiksSGU9cmUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zOzU9PUhlfHxIZTxTZS5sZW5ndGgmJihTZT1TZS5zbGljZSgw'@;
put 'LEhlKSk7dmFyIEJlPXVlKHJlLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVyLnRvU3RyaW5nKCJoZXgiKStyZS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5WZXJpZmllckhhc2gudG9TdHJpbmcoImhleCIpLCJoZXgiKSxHZT14ZC5yYzQoU2UudG9TdHJpbmcoImJpbmFyeSIpLEJl'@;
put 'KTtRLnZhbGlkPWVsKEdlLnNsaWNlKDAsSGUpLCJTSEExIikudG9TdHJpbmcoImhleCIpPT1HZS5zbGljZShIZSkudG9TdHJpbmcoImhleCIpLHJlLkRhdGEuS2V5PVNlLFEudmFsaWQmJihRLmluc2l0dT1mdW5jdGlvbiBqYyh5LFApe3ZhciBMPW5ldyBBcnJheSgyNTYpLFE9MCxyZT0wLHBl'@;
put 'PTAsX2U9MCx2ZT15LkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7ZnVuY3Rpb24gU2UoZHQpe2ZvcihkdD1CdWZmZXIuZnJvbShkdC5zbGljZSgwLHZlKSksUT0wLHJlPTAscGU9MCxfZT0wLHJlPTA7MjU2IT1yZTsrK3JlKUxbcmVdPXJlO2ZvcihwZT0wLHJlPTA7MjU2IT1yZTsrK3Jl'@;
put 'KXt2YXIgQ3Q9ZHRbcmUlZHQubGVuZ3RoXTtwZT1wZStMW3JlXSsoInN0cmluZyI9PXR5cGVvZiBDdD9DdC5jaGFyQ29kZUF0KDApOkN0KSYyNTUsX2U9TFtyZV0sTFtyZV09TFtwZV0sTFtwZV09X2V9cmU9cGU9MH1mdW5jdGlvbiBIZShkdCl7dmFyIEN0PUcoZHQubGVuZ3RoKTtmb3IoUT0w'@;
put 'O1EhPWR0Lmxlbmd0aDsrK1EpX2U9TFtyZT1yZSsxJjI1NV0sTFtyZV09TFtwZT0ocGUrTFtyZV0pJTI1Nl0sTFtwZV09X2UsQ3RbUV09ZHRbUV1eTFtMW3JlXStMW3BlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShDdCl9dmFyIEJlPXkuS2V5LEdlPTA7U2UodWUoQmUsImhleCIpLnRvU3Ry'@;
put 'aW5nKCJiaW5hcnkiKSk7dmFyIG50PTA7cmV0dXJuIGZ1bmN0aW9uKGR0KXtpZihudCtkdC5sZW5ndGg8MTAyNClyZXR1cm4gbnQrPWR0Lmxlbmd0aCxIZShkdCk7dmFyIGN0PTEwMjQtbnQsYnQ9MCxGdD1CdWZmZXIuZnJvbShkdC5zbGljZShidCxidCtjdCkpO2J0Kz1jdCxudD0wO3ZhciBF'@;
put 'dD1IZShGdCk7Zm9yKGJ0PT1kdC5sZW5ndGgmJigrK0dlLEJlPWdyKFAseS5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxSNihHZSkpLFNlKEJ1ZmZlci5mcm9tKEJlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtidDxkdC5sZW5ndGg7KSsrR2UsQmU9Z3IoUCx5LkVuY3J5cHRpb25WZXJp'@;
put 'Zmllci5TYWx0LFI2KEdlKSksU2UoQnVmZmVyLmZyb20oQmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSksY3Q9TWF0aC5taW4oMTAyNCxkdC5sZW5ndGgtYnQpLEZ0PUJ1ZmZlci5mcm9tKGR0LnNsaWNlKGJ0LGJ0K2N0KSksYnQrPWN0LGN0PDEwMjQmJihudD1jdCksRXQ9QnVmZmVyLmNv'@;
put 'bmNhdChbRXQsSGUoRnQpXSk7cmV0dXJuIEV0fX0ocmUuRGF0YSxMLnBhc3N3b3JkKSl9cmV0dXJuIHJlfSh5LFAtMixMLFEpOmZ1bmN0aW9uIHBEKHksUCxMLFEpe3ZhciByZT17a2V5OmhsKHkpLHZlcmlmaWNhdGlvbkJ5dGVzOmhsKHkpfTtMLnBhc3N3b3JkJiYocmUudmVyaWZpZXI9YUMo'@;
put 'TC5wYXNzd29yZCkpLFEudmFsaWQ9cmUudmVyaWZpY2F0aW9uQnl0ZXM9PT1yZS52ZXJpZmllcixRLnZhbGlkJiYoUS5pbnNpdHU9ZnVuY3Rpb24oeSxQKXt2YXIgTD1QfHwwLFE9ZkQoeSk7cmV0dXJuIGZ1bmN0aW9uKHJlKXt2YXIgcGU9ZnVuY3Rpb24oeSxQLEwsUSxyZSl7dmFyIHBlLF9l'@;
put 'O2ZvcihyZXx8KHJlPVApLFF8fChRPWZEKCIiKSkscGU9MDtwZSE9UC5sZW5ndGg7KytwZSlfZT0yNTUmKChfZT1QW3BlXSk+PjV8X2U8PDMpLHJlW3BlXT1fZV49UVtMXSxMPUwrMSYxNTtyZXR1cm5bcmUsTCxRXX0oMCxyZSxMLFEpO3JldHVybiBMPXBlWzFdLHBlWzBdfX0oTC5wYXNzd29y'@;
put 'ZCwwKSl9KHksMCxMLFEpLFF9fSw0OTp7bjoiRm9udCIsZjpmdW5jdGlvbiBQdyh5LFAsTCl7dmFyIFE9e3N6OnkucmVhZF9zaGlmdCgyKS8yMH0scmU9ZjQoeSk7cmUuZkJvbGQmJihRLmJvbGQ9MSkscmUuZkl0YWxpYyYmKFEuaXRhbGljPTEpLHJlLmZVbmRlcmxpbmUmJihRLnVuZGVybGlu'@;
put 'ZT0xKSxyZS5mQ29uZGVuc2UmJihRLmNvbmRlbnNlPTEpLHJlLmZFeHRlbmQmJihRLmV4dGVuZD0xKSxyZS5mU2hhZG93JiYoUS5zaGFkb3c9MSkscmUuZk91dGxpbmUmJihRLm91dGxpbmU9MSkscmUuZlN0cmlrZW91dCYmKFEuc3RyaWtlPTEpO3ZhciBwZT1MJiZMLmJpZmZ8fDg7aWYoMiE9'@;
put 'cGUmJihRLmljdj15LnJlYWRfc2hpZnQoMiksMyE9cGUmJjQhPXBlKSl7c3dpdGNoKDcwMD09PXkucmVhZF9zaGlmdCgyKSYmKFEuYm9sZD0xKSx5LnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpRLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpRLnZhbGlnbj0ic3ViIn12YXIgdmU9eS5yZWFk'@;
put 'X3NoaWZ0KDEpOzAhPXZlJiYoUS51bmRlcmxpbmU9dmUpO3ZhciBTZT15LnJlYWRfc2hpZnQoMSk7U2U+MCYmKFEuZmFtaWx5PVNlKTt2YXIgSGU9eS5yZWFkX3NoaWZ0KDEpO0hlPjAmJihRLmNoYXJzZXQ9SGUpLHkubCs9MX1yZXR1cm4gUS5uYW1lPUZkKHksMCxMKSxRfX0sNTE6e246IlBy'@;
put 'aW50U2l6ZSIsZjpobH0sNjA6e246IkNvbnRpbnVlIn0sNjE6e246IldpbmRvdzEiLGY6ZnVuY3Rpb24gUG8oeSl7cmV0dXJue1BvczpbeS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdCgyKV0sRGltOlt5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDIpXSxGbGFnczp5LnJlYWRfc2hp'@;
put 'ZnQoMiksQ3VyVGFiOnkucmVhZF9zaGlmdCgyKSxGaXJzdFRhYjp5LnJlYWRfc2hpZnQoMiksU2VsZWN0ZWQ6eS5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOnkucmVhZF9zaGlmdCgyKX19fSw2NDp7bjoiQmFja3VwIixmOlNvfSw2NTp7bjoiUGFuZSIsZjpmdW5jdGlvbiBqVCh5LFAsTCl7aWYo'@;
put 'TCYmTC5iaWZmPDUpcmV0dXJue307dmFyIFE9e307cmV0dXJuIFEueD15LnJlYWRfc2hpZnQoMiksUS55PXkucmVhZF9zaGlmdCgyKSxRLnJ3VG9wPXkucmVhZF9zaGlmdCgyKSxRLmNvbExlZnQ9eS5yZWFkX3NoaWZ0KDIpLFEucG5uQWNjdD15LnJlYWRfc2hpZnQoMSkseS5yZWFkX3NoaWZ0'@;
put 'KDEpLFF9fSw2Njp7bjoiQ29kZVBhZ2UiLGY6aGx9LDc3OntuOiJQbHMiLGY6YmN9LDgwOntuOiJEQ29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6aGx9LDg5OntuOiJYQ1QifSw5MDp7bjoiQ1JOIn0sOTE6e246IkZpbGVTaGFy'@;
put 'aW5nIn0sOTI6e246IldyaXRlQWNjZXNzIixmOmZ1bmN0aW9uIHltKHksUCxMKXtpZihMLmVuYylyZXR1cm4geS5sKz1QLCIiO3ZhciBRPXkubCxyZT1WMih5LDAsTCk7cmV0dXJuIHkucmVhZF9zaGlmdChQK1EteS5sKSxyZX19LDkzOntuOiJPYmoiLGY6ZnVuY3Rpb24gV3coeSxQLEwpe2lm'@;
put 'KEwmJkwuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBYVCh5LFAsTCl7eS5sKz00O3ZhciBRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMikscGU9eS5yZWFkX3NoaWZ0KDIpO3kubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIseS5s'@;
put 'Kz0yLHkubCs9Njt2YXIgX2U9W107cmV0dXJuIF9lLnB1c2goKE1tW1FdfHxiYykoeSxQLT0zNixMKSkse2NtbzpbcmUsUSxwZV0sZnQ6X2V9fSh5LFAsTCk7dmFyIFE9VDQoeSkscmU9ZnVuY3Rpb24gWjAoeSxQLEwpe2Zvcih2YXIgUT15LmwrUCxyZT1bXTt5Lmw8UTspe3ZhciBwZT15LnJl'@;
put 'YWRfc2hpZnQoMik7eS5sLT0yO3RyeXtyZVtwZV09Ym1bcGVdKHksUS15LmwpfWNhdGNoe3JldHVybiB5Lmw9USxyZX19cmV0dXJuIHkubCE9USYmKHkubD1RKSxyZX0oeSxQLTIyKTtyZXR1cm57Y21vOlEsZnQ6cmV9fX0sOTQ6e246IlVuY2FsY2VkIn0sOTU6e246IkNhbGNTYXZlUmVjYWxj'@;
put 'IixmOlNvfSw5Njp7bjoiVGVtcGxhdGUifSw5Nzp7bjoiSW50bCJ9LDk5OntuOiJPYmpQcm90ZWN0IixmOlNvfSwxMjU6e246IkNvbEluZm8iLGY6VmR9LDEyODp7bjoiR3V0cyIsZjpmdW5jdGlvbiBjWih5KXt5LmwrPTQ7dmFyIFA9W3kucmVhZF9zaGlmdCgyKSx5LnJlYWRfc2hpZnQoMild'@;
put 'O2lmKDAhPT1QWzBdJiZQWzBdLS0sMCE9PVBbMV0mJlBbMV0tLSxQWzBdPjd8fFBbMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK1Auam9pbigifCIpKTtyZXR1cm4gUH19LDEyOTp7bjoiV3NCb29sIixmOmZ1bmN0aW9uIF9hKHksUCxMKXt2YXIgUT1MJiY4PT1MLmJpZmZ8'@;
put 'fDI9PVA/eS5yZWFkX3NoaWZ0KDIpOih5LmwrPVAsMCk7cmV0dXJue2ZEaWFsb2c6MTYmUSxmQmVsb3c6NjQmUSxmUmlnaHQ6MTI4JlF9fX0sMTMwOntuOiJHcmlkU2V0IixmOmhsfSwxMzE6e246IkhDZW50ZXIiLGY6U299LDEzMjp7bjoiVkNlbnRlciIsZjpTb30sMTMzOntuOiJCb3VuZFNo'@;
put 'ZWV0OCIsZjpmdW5jdGlvbiBJNCh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDQpLHJlPTMmeS5yZWFkX3NoaWZ0KDEpLHBlPXkucmVhZF9zaGlmdCgxKTtzd2l0Y2gocGUpe2Nhc2UgMDpwZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6cGU9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjpw'@;
put 'ZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2OnBlPSJWQkFNb2R1bGUifXZhciBfZT1GZCh5LDAsTCk7cmV0dXJuIDA9PT1fZS5sZW5ndGgmJihfZT0iU2hlZXQxIikse3BvczpRLGhzOnJlLGR0OnBlLG5hbWU6X2V9fX0sMTM0OntuOiJXcml0ZVByb3RlY3QifSwxNDA6e246IkNvdW50cnki'@;
put 'LGY6ZnVuY3Rpb24gZUQoeSl7dmFyIEwsUD1bMCwwXTtyZXR1cm4gTD15LnJlYWRfc2hpZnQoMiksUFswXT1sbVtMXXx8TCxMPXkucmVhZF9zaGlmdCgyKSxQWzFdPWxtW0xdfHxMLFB9fSwxNDE6e246IkhpZGVPYmoiLGY6aGx9LDE0NDp7bjoiU29ydCJ9LDE0Njp7bjoiUGFsZXR0ZSIsZjpm'@;
put 'dW5jdGlvbiBHdyh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9W107UC0tID4wOylMLnB1c2goaDkoeSkpO3JldHVybiBMfX0sMTUxOntuOiJTeW5jIn0sMTUyOntuOiJMUHIifSwxNTM6e246IkR4R0NvbCJ9LDE1NDp7bjoiRm5Hcm91cE5hbWUifSwxNTU6e246IkZpbHRlck1vZGUi'@;
put 'fSwxNTY6e246IkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGY6aGx9LDE1Nzp7bjoiQXV0b0ZpbHRlckluZm8ifSwxNTg6e246IkF1dG9GaWx0ZXIifSwxNjA6e246IlNjbCIsZjpLd30sMTYxOntuOiJTZXR1cCIsZjpmdW5jdGlvbiBFbSh5LFApe3ZhciBMPXt9O3JldHVybiBQPDMyfHwoeS5sKz0x'@;
put 'NixMLmhlYWRlcj1tYSh5KSxMLmZvb3Rlcj1tYSh5KSx5LmwrPTIpLEx9fSwxNzQ6e246IlNjZW5NYW4ifSwxNzU6e246IlNDRU5BUklPIn0sMTc2OntuOiJTeFZpZXcifSwxNzc6e246IlN4dmQifSwxNzg6e246IlNYVkkifSwxODA6e246IlN4SXZkIn0sMTgxOntuOiJTWExJIn0sMTgyOntu'@;
put 'OiJTWFBJIn0sMTg0OntuOiJEb2NSb3V0ZSJ9LDE4NTp7bjoiUmVjaXBOYW1lIn0sMTg5OntuOiJNdWxSayIsZjpmdW5jdGlvbiBGdyh5LFApe2Zvcih2YXIgTD15LmwrUC0yLFE9eS5yZWFkX3NoaWZ0KDIpLHJlPXkucmVhZF9zaGlmdCgyKSxwZT1bXTt5Lmw8TDspcGUucHVzaChnOSh5KSk7'@;
put 'aWYoeS5sIT09TCl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIHJlYWQgZXJyb3IiKTt2YXIgX2U9eS5yZWFkX3NoaWZ0KDIpO2lmKHBlLmxlbmd0aCE9X2UtcmUrMSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOlEsYzpyZSxDOl9lLHJrcmVjOnBlfX19'@;
put 'LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24gTDQoeSxQKXtmb3IodmFyIEw9eS5sK1AtMixRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMikscGU9W107eS5sPEw7KXBlLnB1c2goeS5yZWFkX3NoaWZ0KDIpKTtpZih5LmwhPT1MKXRocm93IG5ldyBFcnJvcigiTXVsQmxh'@;
put 'bmsgcmVhZCBlcnJvciIpO3ZhciBfZT15LnJlYWRfc2hpZnQoMik7aWYocGUubGVuZ3RoIT1fZS1yZSsxKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgbGVuZ3RoIG1pc21hdGNoIik7cmV0dXJue3I6USxjOnJlLEM6X2UsaXhmZTpwZX19fSwxOTM6e246Ik1tcyIsZjpQZH0sMTk3OntuOiJT'@;
put 'WERJIn0sMTk4OntuOiJTWERCIn0sMTk5OntuOiJTWEZEQiJ9LDIwMDp7bjoiU1hEQkIifSwyMDE6e246IlNYTnVtIn0sMjAyOntuOiJTeEJvb2wiLGY6U299LDIwMzp7bjoiU3hFcnIifSwyMDQ6e246IlNYSW50In0sMjA1OntuOiJTWFN0cmluZyJ9LDIwNjp7bjoiU1hEdHIifSwyMDc6e246'@;
put 'IlN4TmlsIn0sMjA4OntuOiJTWFRibCJ9LDIwOTp7bjoiU1hUQlJHSUlUTSJ9LDIxMDp7bjoiU3hUYnBnIn0sMjExOntuOiJPYlByb2oifSwyMTM6e246IlNYU3RyZWFtSUQifSwyMTU6e246IkRCQ2VsbCJ9LDIxNjp7bjoiU1hSbmcifSwyMTc6e246IlN4SXN4b3BlciJ9LDIxODp7bjoiQm9v'@;
put 'a0Jvb2wiLGY6aGx9LDIyMDp7bjoiRGJPclBhcmFtUXJ5In0sMjIxOntuOiJTY2VuYXJpb1Byb3RlY3QiLGY6U299LDIyMjp7bjoiT2xlT2JqZWN0U2l6ZSJ9LDIyNDp7bjoiWEYiLGY6ZnVuY3Rpb24gYjkoeSxQLEwpe3ZhciBRPXt9O3JldHVybiBRLmlmbnQ9eS5yZWFkX3NoaWZ0KDIpLFEu'@;
put 'bnVtRm10SWQ9eS5yZWFkX3NoaWZ0KDIpLFEuZmxhZ3M9eS5yZWFkX3NoaWZ0KDIpLFEuZlN0eWxlPVEuZmxhZ3M+PjImMSxRLmRhdGE9ZnVuY3Rpb24gTjEoeSxQLEwsUSl7dmFyIHJlPXt9LHBlPXkucmVhZF9zaGlmdCg0KSxfZT15LnJlYWRfc2hpZnQoNCksdmU9eS5yZWFkX3NoaWZ0KDQp'@;
put 'LFNlPXkucmVhZF9zaGlmdCgyKTtpZihyZS5wYXR0ZXJuVHlwZT12aVt2ZT4+MjZdLCFRLmNlbGxTdHlsZXMpcmV0dXJuIHJlO3ZhciBIZT03JnBlO3N3aXRjaChIZSl7Y2FzZSAxOnJlLmhhbGlnbj0ibGVmdCI7YnJlYWs7Y2FzZSAyOnJlLmhhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDM6'@;
put 'cmUuaGFsaWduPSJyaWdodCJ9c3dpdGNoKHJlLmZXcmFwPXBlPj4zJjEsSGU9cGU+PjQmNyl7Y2FzZSAwOnJlLnZhbGlnbj0idG9wIjticmVhaztjYXNlIDE6cmUudmFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMjpyZS52YWxpZ249ImJvdHRvbSJ9cmV0dXJuIHJlLmZKdXN0TGFzdD1wZT4+'@;
put 'NyYxLHJlLnRyb3Q9cGU+PjgmMjU1LHJlLmNJbmRlbnQ9cGU+PjE2JjE1LHJlLmZTaHJpbmtUb0ZpdD1wZT4+MjAmMSxyZS5pUmVhZE9yZGVyPXBlPj4yMiYyLHJlLmZBdHJOdW09cGU+PjI2JjEscmUuZkF0ckZudD1wZT4+MjcmMSxyZS5mQXRyQWxjPXBlPj4yOCYxLHJlLmZBdHJCZHI9cGU+'@;
put 'PjI5JjEscmUuZkF0clBhdD1wZT4+MzAmMSxyZS5mQXRyUHJvdD1wZT4+MzEmMSxyZS5kZ0xlZnQ9MTUmX2UscmUuZGdSaWdodD1fZT4+NCYxNSxyZS5kZ1RvcD1fZT4+OCYxNSxyZS5kZ0JvdHRvbT1fZT4+MTImMTUscmUuaWN2TGVmdD1fZT4+MTYmMTI3LHJlLmljdlJpZ2h0PV9lPj4yMyYx'@;
put 'MjcscmUuZ3JiaXREaWFnPV9lPj4zMCYzLHJlLmljdlRvcD0xMjcmdmUscmUuaWN2Qm90dG9tPXZlPj43JjEyNyxyZS5pY3ZEaWFnPXZlPj4xNCYxMjcscmUuZGdEaWFnPXZlPj4yMSYxNSxyZS5pY3ZGb3JlPTEyNyZTZSxyZS5pY3ZCYWNrPVNlPj43JjEyNyxyZS5mc3hCdXR0b249U2U+PjE0'@;
put 'JjEscmV9KHksMCwwLEwpLFF9fSwyMjU6e246IkludGVyZmFjZUhkciIsZjpmdW5jdGlvbiBoMCh5LFApe3JldHVybiAwPT09UHx8eS5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFjZUVuZCIsZjpQZH0sMjI3OntuOiJTWFZTIn0sMjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1'@;
put 'bmN0aW9uIFp3KHksUCl7Zm9yKHZhciBMPVtdLFE9eS5yZWFkX3NoaWZ0KDIpO1EtLTspTC5wdXNoKEtoKHkpKTtyZXR1cm4gTH19LDIzMzp7bjoiQmtIaW0ifSwyMzU6e246Ik1zb0RyYXdpbmdHcm91cCJ9LDIzNjp7bjoiTXNvRHJhd2luZyJ9LDIzNzp7bjoiTXNvRHJhd2luZ1NlbGVjdGlv'@;
put 'biJ9LDIzOTp7bjoiUGhvbmV0aWNJbmZvIn0sMjQwOntuOiJTeFJ1bGUifSwyNDE6e246IlNYRXgifSwyNDI6e246IlN4RmlsdCJ9LDI0NDp7bjoiU3hEWEYifSwyNDU6e246IlN4SXRtIn0sMjQ2OntuOiJTeE5hbWUifSwyNDc6e246IlN4U2VsZWN0In0sMjQ4OntuOiJTWFBhaXIifSwyNDk6'@;
put 'e246IlN4Rm1sYSJ9LDI1MTp7bjoiU3hGb3JtYXQifSwyNTI6e246IlNTVCIsZjpmdW5jdGlvbiBIbCh5LFApe2Zvcih2YXIgTD15LmwrUCxRPXkucmVhZF9zaGlmdCg0KSxyZT15LnJlYWRfc2hpZnQoNCkscGU9W10sX2U9MDtfZSE9cmUmJnkubDxMOysrX2UpcGUucHVzaChnbSh5KSk7cmV0'@;
put 'dXJuIHBlLkNvdW50PVEscGUuVW5pcXVlPXJlLHBlfX0sMjUzOntuOiJMYWJlbFNzdCIsZjpmdW5jdGlvbiBVVCh5KXt2YXIgUD1MdSh5KTtyZXR1cm4gUC5pc3N0PXkucmVhZF9zaGlmdCg0KSxQfX0sMjU1OntuOiJFeHRTU1QiLGY6ZnVuY3Rpb24ga2UoeSxQKXt2YXIgTD17fTtyZXR1cm4g'@;
put 'TC5kc3N0PXkucmVhZF9zaGlmdCgyKSx5LmwrPVAtMixMfX0sMjU2OntuOiJTWFZERXgifSwyNTk6e246IlNYRm9ybXVsYSJ9LDI5MDp7bjoiU1hEQkV4In0sMzExOntuOiJSUkRJbnNEZWwifSwzMTI6e246IlJSREhlYWQifSwzMTU6e246IlJSRENoZ0NlbGwifSwzMTc6e246IlJSVGFiSWQi'@;
put 'LGY6SDF9LDMxODp7bjoiUlJEUmVuU2hlZXQifSwzMTk6e246IlJSU29ydCJ9LDMyMDp7bjoiUlJETW92ZSJ9LDMzMDp7bjoiUlJGb3JtYXQifSwzMzE6e246IlJSQXV0b0ZtdCJ9LDMzMzp7bjoiUlJJbnNlcnRTaCJ9LDMzNDp7bjoiUlJETW92ZUJlZ2luIn0sMzM1OntuOiJSUkRNb3ZlRW5k'@;
put 'In0sMzM2OntuOiJSUkRJbnNEZWxCZWdpbiJ9LDMzNzp7bjoiUlJESW5zRGVsRW5kIn0sMzM4OntuOiJSUkRDb25mbGljdCJ9LDMzOTp7bjoiUlJERGVmTmFtZSJ9LDM0MDp7bjoiUlJEUnN0RXR4cCJ9LDM1MTp7bjoiTFJuZyJ9LDM1Mjp7bjoiVXNlc0VMRnMiLGY6U299LDM1Mzp7bjoiRFNG'@;
put 'IixmOlBkfSw0MDE6e246IkNVc3IifSw0MDI6e246IkNiVXNyIn0sNDAzOntuOiJVc3JJbmZvIn0sNDA0OntuOiJVc3JFeGNsIn0sNDA1OntuOiJGaWxlTG9jayJ9LDQwNjp7bjoiUlJESW5mbyJ9LDQwNzp7bjoiQkNVc3JzIn0sNDA4OntuOiJVc3JDaGsifSw0MjU6e246IlVzZXJCVmlldyJ9'@;
put 'LDQyNjp7bjoiVXNlclNWaWV3QmVnaW4ifSw0Mjc6e246IlVzZXJTVmlld0VuZCJ9LDQyODp7bjoiUlJEVXNlclZpZXcifSw0Mjk6e246IlFzaSJ9LDQzMDp7bjoiU3VwQm9vayIsZjpmdW5jdGlvbiBxVCh5LFAsTCl7dmFyIFE9eS5sK1AscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9z'@;
put 'aGlmdCgyKTtpZihMLnNiY2NoPXBlLDEwMjU9PXBlfHwxNDg0OT09cGUpcmV0dXJuW3BlLHJlXTtpZihwZTwxfHxwZT4yNTUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIitwZSk7Zm9yKHZhciBfZT1IZCh5LHBlKSx2ZT1bXTtRPnkubDspdmUucHVzaChOMih5'@;
put 'KSk7cmV0dXJuW3BlLHJlLF9lLHZlXX19LDQzMTp7bjoiUHJvdDRSZXYiLGY6U299LDQzMjp7bjoiQ29uZEZtdCJ9LDQzMzp7bjoiQ0YifSw0MzQ6e246IkRWYWwifSw0Mzc6e246IkRDb25CaW4ifSw0Mzg6e246IlR4TyIsZjpmdW5jdGlvbiBKVCh5LFAsTCl7dmFyIFE9eS5sLHJlPSIiLHBl'@;
put 'PS0xO3RyeXt5LmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoTC5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT95LmwrPTY6ZnVuY3Rpb24gRHUoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3kubCsrO3ZhciBMPXkucmVhZF9zaGlmdCgyKTt5LmwrPTJ9KHkpO3ZhciBT'@;
put 'ZT15LnJlYWRfc2hpZnQoMik7eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgyKTt2YXIgQmU9eS5yZWFkX3NoaWZ0KDIpO3kubCs9QmU7Zm9yKHZhciBHZT0xO0dlPHkubGVucy5sZW5ndGgtMTsrK0dlKXtpZih5LmwtUSE9eS5sZW5zW0dlXSl0aHJvdyBuZXcgRXJyb3IoIlR4Tzog'@;
put 'YmFkIGNvbnRpbnVlIHJlY29yZCIpO3ZhciBudD15W3kubF07aWYoKHJlKz1IZCh5LHkubGVuc1tHZSsxXS15LmxlbnNbR2VdLTEpKS5sZW5ndGg+PShudD9TZToyKlNlKSlicmVha31pZihyZS5sZW5ndGghPT1TZSYmcmUubGVuZ3RoIT09MipTZSl0aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6'@;
put 'ICIrU2UrIiAhPSAiK3JlLmxlbmd0aCk7cmV0dXJuIHkubD1RK1Ase3Q6cmUsaWZudDpwZX19Y2F0Y2h7cmV0dXJuIHkubD1RK1Ase3Q6cmUsaWZudDpwZX19fX0sNDM5OntuOiJSZWZyZXNoQWxsIixmOlNvfSw0NDA6e246IkhMaW5rIixmOmZ1bmN0aW9uIGV1KHksUCl7dmFyIEw9S2goeSk7'@;
put 'eS5sKz0xNjt2YXIgUT1mdW5jdGlvbiBJdSh5LFApe3ZhciBMPXkubCtQLFE9eS5yZWFkX3NoaWZ0KDQpO2lmKDIhPT1RKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHN0cmVhbVZlcnNpb246ICIrUSk7dmFyIHJlPXkucmVhZF9zaGlmdCgyKTt5LmwrPTI7dmFyIHBlLF9lLHZlLFNl'@;
put 'LEJlLEdlLEhlPSIiOzE2JnJlJiYocGU9QTQoeSkpLDEyOCZyZSYmKF9lPUE0KHkpKSwyNTc9PSgyNTcmcmUpJiYodmU9QTQoeSkpLDE9PSgyNTcmcmUpJiYoU2U9ZnVuY3Rpb24gdjMoeSxQKXt2YXIgTD15LnJlYWRfc2hpZnQoMTYpO3N3aXRjaChMKXtjYXNlImUwYzllYTc5ZjliYWNlMTE4'@;
put 'YzgyMDBhYTAwNGJhOTBiIjpyZXR1cm4gZnVuY3Rpb24gbTMoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9eS5sLFE9ITE7UD4yNCYmKHkubCs9UC0yNCwiNzk1ODgxZjQzYjFkN2Y0OGFmMmM4MjVkYzQ4NTI3NjMiPT09eS5yZWFkX3NoaWZ0KDE2KSYmKFE9ITApLHkubD1MKTt2YXIgcmU9'@;
put 'eS5yZWFkX3NoaWZ0KChRP1AtMjQ6UCk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKHYsIiIpO3JldHVybiBRJiYoeS5sKz0yNCkscmV9KHkpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBmbCh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDIp'@;
put 'LEw9IiI7UC0tID4wOylMKz0iLi4vIjt2YXIgUT15LnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKHkubCs9Miw1NzAwNSE9eS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PXkucmVhZF9zaGlmdCg0KSlyZXR1cm4gTCtRLnJlcGxh'@;
put 'Y2UoL1xcL2csIi8iKTt2YXIgcGU9eS5yZWFkX3NoaWZ0KDQpO2lmKDMhPXkucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO3JldHVybiBMK3kucmVhZF9zaGlmdChwZT4+MSwidXRmMTZsZSIpLnJlcGxhY2UodiwiIil9KHkpO2RlZmF1bHQ6dGhyb3cg'@;
put 'bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNb25pa2VyICIrTCl9fSh5KSksOCZyZSYmKEhlPUE0KHkpKSwzMiZyZSYmKEJlPXkucmVhZF9zaGlmdCgxNikpLDY0JnJlJiYoR2U9Q2MoeSkpLHkubD1MO3ZhciBudD1fZXx8dmV8fFNlfHwiIjtudCYmSGUmJihudCs9IiMiK0hlKSxudHx8KG50PSIj'@;
put 'IitIZSksMiZyZSYmIi8iPT1udC5jaGFyQXQoMCkmJiIvIiE9bnQuY2hhckF0KDEpJiYobnQ9ImZpbGU6Ly8iK250KTt2YXIgZHQ9e1RhcmdldDpudH07cmV0dXJuIEJlJiYoZHQuZ3VpZD1CZSksR2UmJihkdC50aW1lPUdlKSxwZSYmKGR0LlRvb2x0aXA9cGUpLGR0fSh5LFAtMjQpO3JldHVy'@;
put 'bltMLFFdfX0sNDQxOntuOiJMZWwifSw0NDI6e246IkNvZGVOYW1lIixmOk4yfSw0NDM6e246IlNYRkRCVHlwZSJ9LDQ0NDp7bjoiUHJvdDRSZXZQYXNzIixmOmhsfSw0NDU6e246Ik9iTm9NYWNyb3MifSw0NDY6e246IkR2In0sNDQ4OntuOiJFeGNlbDlGaWxlIixmOlBkfSw0NDk6e246IlJl'@;
put 'Y2FsY0lkIixmOmZ1bmN0aW9uIGYwKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDQpfSxyOjJ9LDQ1MDp7bjoiRW50RXhVMiIsZjpQZH0sNTEyOntuOiJEaW1lbnNpb25zIixmOkJ0fSw1MTM6e246IkJsYW5rIixmOnF3fSw1MTU6e246Ik51bWJlciIsZjpmdW5jdGlv'@;
put 'biBOdyh5LFAsTCl7TC5iaWZmZ3Vlc3MmJjI9PUwuYmlmZiYmKEwuYmlmZj01KTt2YXIgUT1MdSh5KSxyZT1tYSh5KTtyZXR1cm4gUS52YWw9cmUsUX19LDUxNjp7bjoiTGFiZWwiLGY6ZnVuY3Rpb24gWVQoeSxQLEwpe0wuYmlmZmd1ZXNzJiYyPT1MLmJpZmYmJihMLmJpZmY9NSk7dmFyIHJl'@;
put 'PUx1KHkpOzI9PUwuYmlmZiYmeS5sKys7dmFyIHBlPU4yKHksMCxMKTtyZXR1cm4gcmUudmFsPXBlLHJlfX0sNTE3OntuOiJCb29sRXJyIixmOk5jfSw1MTk6e246IlN0cmluZyIsZjppRH0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gJGUoeSl7dmFyIFA9e307UC5yPXkucmVhZF9zaGlmdCgy'@;
put 'KSxQLmM9eS5yZWFkX3NoaWZ0KDIpLFAuY250PXkucmVhZF9zaGlmdCgyKS1QLmM7dmFyIEw9eS5yZWFkX3NoaWZ0KDIpO3kubCs9NDt2YXIgUT15LnJlYWRfc2hpZnQoMSk7eS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIFAuaXhmZT00MDk1JnJlLDcmUSYmKFAubGV2ZWw9'@;
put 'NyZRKSwzMiZRJiYoUC5oaWRkZW49ITApLDY0JlEmJihQLmhwdD1MLzIwKSxQfX0sNTIzOntuOiJJbmRleCJ9LDU0NTp7bjoiQXJyYXkiLGY6and9LDU0OTp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpXMH0sNTY2OntuOiJUYWJsZSJ9LDU3NDp7bjoiV2luZG93MiIsZjpmdW5jdGlvbiBsWih5'@;
put 'LFAsTCl7aWYoTCYmTC5iaWZmPj0yJiZMLmJpZmY8NSlyZXR1cm57fTt2YXIgUT15LnJlYWRfc2hpZnQoMik7cmV0dXJue1JUTDo2NCZRLGdyaWQ6ISEoMiZRKSxmcm96ZW46ISEoOCZRKX19fSw2Mzg6e246IlJLIixmOmZ1bmN0aW9uIFNjKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXku'@;
put 'cmVhZF9zaGlmdCgyKSxRPWc5KHkpO3JldHVybntyOlAsYzpMLGl4ZmU6UVswXSxya251bTpRWzFdfX19LDY1OTp7bjoiU3R5bGUiLGY6ZnVuY3Rpb24gJFQoeSxQLEwpe3JldHVybiB5LmwrPVAse319fSwxMDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7bjoiRm9ybWF0IixmOmZ1bmN0aW9uIEdU'@;
put 'KHksUCxMKXtyZXR1cm5beS5yZWFkX3NoaWZ0KDIpLFYyKHksMCxMKV19fSwxMDg0OntuOiJDb250aW51ZUJpZ05hbWUifSwxMjEyOntuOiJTaHJGbWxhIixmOmZ1bmN0aW9uIEM5KHksUCxMKXt2YXIgUT1fbSh5KTt5LmwrKzt2YXIgcmU9eS5yZWFkX3NoaWZ0KDEpO3JldHVybltpNSh5LFAt'@;
put 'PTgsTCkscmUsUV19fSwyMDQ4OntuOiJITGlua1Rvb2x0aXAiLGY6ZnVuY3Rpb24gUWEoeSxQKXt5LnJlYWRfc2hpZnQoMik7dmFyIEw9S2goeSksUT15LnJlYWRfc2hpZnQoKFAtMTApLzIsImRiY3MtY29udCIpO3JldHVybltMLFE9US5yZXBsYWNlKHYsIiIpXX19LDIwNDk6e246IldlYlB1'@;
put 'YiJ9LDIwNTA6e246IlFzaVNYVGFnIn0sMjA1MTp7bjoiREJRdWVyeUV4dCJ9LDIwNTI6e246IkV4dFN0cmluZyJ9LDIwNTM6e246IlR4dFFyeSJ9LDIwNTQ6e246IlFzaXIifSwyMDU1OntuOiJRc2lmIn0sMjA1Njp7bjoiUlJEVFFTSUYifSwyMDU3OntuOiJCT0YiLGY6UnV9LDIwNTg6e246'@;
put 'Ik9sZURiQ29ubiJ9LDIwNTk6e246IldPcHQifSwyMDYwOntuOiJTWFZpZXdFeCJ9LDIwNjE6e246IlNYVEgifSwyMDYyOntuOiJTWFBJRXgifSwyMDYzOntuOiJTWFZEVEV4In0sMjA2NDp7bjoiU1hWaWV3RXg5In0sMjA2Njp7bjoiQ29udGludWVGcnQifSwyMDY3OntuOiJSZWFsVGltZURh'@;
put 'dGEifSwyMTI4OntuOiJDaGFydEZydEluZm8ifSwyMTI5OntuOiJGcnRXcmFwcGVyIn0sMjEzMDp7bjoiU3RhcnRCbG9jayJ9LDIxMzE6e246IkVuZEJsb2NrIn0sMjEzMjp7bjoiU3RhcnRPYmplY3QifSwyMTMzOntuOiJFbmRPYmplY3QifSwyMTM0OntuOiJDYXRMYWIifSwyMTM1OntuOiJZ'@;
put 'TXVsdCJ9LDIxMzY6e246IlNYVmlld0xpbmsifSwyMTM3OntuOiJQaXZvdENoYXJ0Qml0cyJ9LDIxMzg6e246IkZydEZvbnRMaXN0In0sMjE0Njp7bjoiU2hlZXRFeHQifSwyMTQ3OntuOiJCb29rRXh0IixyOjEyfSwyMTQ4OntuOiJTWEFkZGwifSwyMTQ5OntuOiJDckVyciJ9LDIxNTA6e246'@;
put 'IkhGUGljdHVyZSJ9LDIxNTE6e246IkZlYXRIZHIiLGY6UGR9LDIxNTI6e246IkZlYXQifSwyMTU0OntuOiJEYXRhTGFiRXh0In0sMjE1NTp7bjoiRGF0YUxhYkV4dENvbnRlbnRzIn0sMjE1Njp7bjoiQ2VsbFdhdGNoIn0sMjE2MTp7bjoiRmVhdEhkcjExIn0sMjE2Mjp7bjoiRmVhdHVyZTEx'@;
put 'In0sMjE2NDp7bjoiRHJvcERvd25PYmpJZHMifSwyMTY1OntuOiJDb250aW51ZUZydDExIn0sMjE2Njp7bjoiRENvbm4ifSwyMTY3OntuOiJMaXN0MTIifSwyMTY4OntuOiJGZWF0dXJlMTIifSwyMTY5OntuOiJDb25kRm10MTIifSwyMTcwOntuOiJDRjEyIn0sMjE3MTp7bjoiQ0ZFeCJ9LDIx'@;
put 'NzI6e246IlhGQ1JDIixmOmZ1bmN0aW9uIHhtKHkpe3kubCs9Mjt2YXIgUD17Y3hmczowLGNyYzowfTtyZXR1cm4gUC5jeGZzPXkucmVhZF9zaGlmdCgyKSxQLmNyYz15LnJlYWRfc2hpZnQoNCksUH0scjoxMn0sMjE3Mzp7bjoiWEZFeHQiLGY6ZnVuY3Rpb24gekQoeSxQKXt5LmwrPTI7dmFy'@;
put 'IFE9eS5yZWFkX3NoaWZ0KDIpO3kubCs9Mjtmb3IodmFyIHJlPXkucmVhZF9zaGlmdCgyKSxwZT1bXTtyZS0tID4wOylwZS5wdXNoKGpEKHkpKTtyZXR1cm57aXhmZTpRLGV4dDpwZX19LHI6MTJ9LDIxNzQ6e246IkF1dG9GaWx0ZXIxMiJ9LDIxNzU6e246IkNvbnRpbnVlRnJ0MTIifSwyMTgw'@;
put 'OntuOiJNRFRJbmZvIn0sMjE4MTp7bjoiTURYU3RyIn0sMjE4Mjp7bjoiTURYVHVwbGUifSwyMTgzOntuOiJNRFhTZXQifSwyMTg0OntuOiJNRFhQcm9wIn0sMjE4NTp7bjoiTURYS1BJIn0sMjE4Njp7bjoiTURCIn0sMjE4Nzp7bjoiUExWIn0sMjE4ODp7bjoiQ29tcGF0MTIiLGY6U28scjox'@;
put 'Mn0sMjE4OTp7bjoiRFhGIn0sMjE5MDp7bjoiVGFibGVTdHlsZXMiLHI6MTJ9LDIxOTE6e246IlRhYmxlU3R5bGUifSwyMTkyOntuOiJUYWJsZVN0eWxlRWxlbWVudCJ9LDIxOTQ6e246IlN0eWxlRXh0In0sMjE5NTp7bjoiTmFtZVB1Ymxpc2gifSwyMTk2OntuOiJOYW1lQ210IixmOmZ1bmN0'@;
put 'aW9uIEJ3KHksUCxMKXtpZighKEwuYmlmZjw4KSl7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpLHJlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm5bSGQoeSxRLEwpLEhkKHkscmUsTCldfXkubCs9UH0scjoxMn0sMjE5Nzp7bjoiU29ydERhdGEifSwyMTk4OntuOiJUaGVtZSIsZjpmdW5jdGlvbiAkbSh5'@;
put 'LFAsTCl7dmFyIFE9eS5sK1A7aWYoMTI0MjI2IT09eS5yZWFkX3NoaWZ0KDQpKXtpZighTC5jZWxsU3R5bGVzKXJldHVybiB2b2lkKHkubD1RKTt2YXIgX2UscGU9eS5zbGljZSh5LmwpO3kubD1RO3RyeXtfZT14bihwZSx7dHlwZToiYXJyYXkifSl9Y2F0Y2h7cmV0dXJufXZhciB2ZT1KdChf'@;
put 'ZSwidGhlbWUvdGhlbWUvdGhlbWUxLnhtbCIsITApO2lmKHZlKXJldHVybiBHbSh2ZSxMKX19LHI6MTJ9LDIxOTk6e246IkdVSURUeXBlTGliIn0sMjIwMDp7bjoiRm5HcnAxMiJ9LDIyMDE6e246Ik5hbWVGbkdycDEyIn0sMjIwMjp7bjoiTVRSU2V0dGluZ3MiLGY6ZnVuY3Rpb24gencoeSl7'@;
put 'cmV0dXJuWzAhPT15LnJlYWRfc2hpZnQoNCksMCE9PXkucmVhZF9zaGlmdCg0KSx5LnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntuOiJDb21wcmVzc1BpY3R1cmVzIixmOlBkfSwyMjA0OntuOiJIZWFkZXJGb290ZXIifSwyMjA1OntuOiJDcnRMYXlvdXQxMiJ9LDIyMDY6e246IkNydE1s'@;
put 'RnJ0In0sMjIwNzp7bjoiQ3J0TWxGcnRDb250aW51ZSJ9LDIyMTE6e246IkZvcmNlRnVsbENhbGN1bGF0aW9uIixmOmZ1bmN0aW9uIEx0KHkpe3ZhciBQPWZ1bmN0aW9uIGY5KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4geS5sKz04LHt0eXBlOlAs'@;
put 'ZmxhZ3M6TH19KHkpO2lmKDIyMTEhPVAudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRnV0dXJlIFJlY29yZCAiK1AudHlwZSk7cmV0dXJuIDAhPT15LnJlYWRfc2hpZnQoNCl9fSwyMjEyOntuOiJTaGFwZVByb3BzU3RyZWFtIn0sMjIxMzp7bjoiVGV4dFByb3BzU3RyZWFtIn0sMjIx'@;
put 'NDp7bjoiUmljaFRleHRTdHJlYW0ifSwyMjE1OntuOiJDcnRMYXlvdXQxMkEifSw0MDk3OntuOiJVbml0cyJ9LDQwOTg6e246IkNoYXJ0In0sNDA5OTp7bjoiU2VyaWVzIn0sNDEwMjp7bjoiRGF0YUZvcm1hdCJ9LDQxMDM6e246IkxpbmVGb3JtYXQifSw0MTA1OntuOiJNYXJrZXJGb3JtYXQi'@;
put 'fSw0MTA2OntuOiJBcmVhRm9ybWF0In0sNDEwNzp7bjoiUGllRm9ybWF0In0sNDEwODp7bjoiQXR0YWNoZWRMYWJlbCJ9LDQxMDk6e246IlNlcmllc1RleHQifSw0MTE2OntuOiJDaGFydEZvcm1hdCJ9LDQxMTc6e246IkxlZ2VuZCJ9LDQxMTg6e246IlNlcmllc0xpc3QifSw0MTE5OntuOiJC'@;
put 'YXIifSw0MTIwOntuOiJMaW5lIn0sNDEyMTp7bjoiUGllIn0sNDEyMjp7bjoiQXJlYSJ9LDQxMjM6e246IlNjYXR0ZXIifSw0MTI0OntuOiJDcnRMaW5lIn0sNDEyNTp7bjoiQXhpcyJ9LDQxMjY6e246IlRpY2sifSw0MTI3OntuOiJWYWx1ZVJhbmdlIn0sNDEyODp7bjoiQ2F0U2VyUmFuZ2Ui'@;
put 'fSw0MTI5OntuOiJBeGlzTGluZSJ9LDQxMzA6e246IkNydExpbmsifSw0MTMyOntuOiJEZWZhdWx0VGV4dCJ9LDQxMzM6e246IlRleHQifSw0MTM0OntuOiJGb250WCIsZjpobH0sNDEzNTp7bjoiT2JqZWN0TGluayJ9LDQxNDY6e246IkZyYW1lIn0sNDE0Nzp7bjoiQmVnaW4ifSw0MTQ4Ontu'@;
put 'OiJFbmQifSw0MTQ5OntuOiJQbG90QXJlYSJ9LDQxNTQ6e246IkNoYXJ0M2QifSw0MTU2OntuOiJQaWNGIn0sNDE1Nzp7bjoiRHJvcEJhciJ9LDQxNTg6e246IlJhZGFyIn0sNDE1OTp7bjoiU3VyZiJ9LDQxNjA6e246IlJhZGFyQXJlYSJ9LDQxNjE6e246IkF4aXNQYXJlbnQifSw0MTYzOntu'@;
put 'OiJMZWdlbmRFeGNlcHRpb24ifSw0MTY0OntuOiJTaHRQcm9wcyIsZjpmdW5jdGlvbiBBbSh5LFAsTCl7dmFyIFE9e2FyZWE6ITF9O2lmKDUhPUwuYmlmZilyZXR1cm4geS5sKz1QLFE7dmFyIHJlPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5sKz0zLDE2JnJlJiYoUS5hcmVhPSEwKSxRfX0s'@;
put 'NDE2NTp7bjoiU2VyVG9DcnQifSw0MTY2OntuOiJBeGVzVXNlZCJ9LDQxNjg6e246IlNCYXNlUmVmIn0sNDE3MDp7bjoiU2VyUGFyZW50In0sNDE3MTp7bjoiU2VyQXV4VHJlbmQifSw0MTc0OntuOiJJRm10UmVjb3JkIn0sNDE3NTp7bjoiUG9zIn0sNDE3Njp7bjoiQWxSdW5zIn0sNDE3Nzp7'@;
put 'bjoiQlJBSSJ9LDQxODc6e246IlNlckF1eEVyckJhciJ9LDQxODg6e246IkNscnRDbGllbnQiLGY6ZnVuY3Rpb24gbkQoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCgyKSxMPVtdO1AtLSA+MDspTC5wdXNoKGg5KHkpKTtyZXR1cm4gTH19LDQxODk6e246IlNlckZtdCJ9LDQxOTE6e246IkNo'@;
put 'YXJ0M0RCYXJTaGFwZSJ9LDQxOTI6e246IkZiaSJ9LDQxOTM6e246IkJvcFBvcCJ9LDQxOTQ6e246IkF4Y0V4dCJ9LDQxOTU6e246IkRhdCJ9LDQxOTY6e246IlBsb3RHcm93dGgifSw0MTk3OntuOiJTSUluZGV4In0sNDE5ODp7bjoiR2VsRnJhbWUifSw0MTk5OntuOiJCb3BQb3BDdXN0b20i'@;
put 'fSw0MjAwOntuOiJGYmkyIn0sMDp7bjoiRGltZW5zaW9ucyIsZjpCdH0sMTp7bjoiQklGRjJCTEFOSyJ9LDI6e246IkJJRkYySU5UIixmOmZ1bmN0aW9uIHNEKHkpe3ZhciBQPUx1KHkpOysreS5sO3ZhciBMPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gUC50PSJuIixQLnZhbD1MLFB9fSwzOntu'@;
put 'OiJCSUZGMk5VTSIsZjpmdW5jdGlvbiB4OSh5KXt2YXIgUD1MdSh5KTsrK3kubDt2YXIgTD1tYSh5KTtyZXR1cm4gUC50PSJuIixQLnZhbD1MLFB9fSw0OntuOiJCSUZGMlNUUiIsZjpmdW5jdGlvbiB1Wih5LFAsTCl7TC5iaWZmZ3Vlc3MmJjU9PUwuYmlmZiYmKEwuYmlmZj0yKTt2YXIgUT1M'@;
put 'dSh5KTsrK3kubDt2YXIgcmU9VjIoeSwwLEwpO3JldHVybiBRLnQ9InN0ciIsUS52YWw9cmUsUX19LDU6e246IkJvb2xFcnIiLGY6TmN9LDc6e246IlN0cmluZyIsZjpmdW5jdGlvbiBoWih5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1QPyh5LmwrKywiIik6eS5yZWFkX3No'@;
put 'aWZ0KFAsInNiY3MtY29udCIpfX0sODp7bjoiQklGRjJST1cifSw5OntuOiJCT0YiLGY6UnV9LDExOntuOiJJbmRleCJ9LDIyOntuOiJFeHRlcm5Db3VudCIsZjpobH0sMzA6e246IkJJRkYyRk9STUFUIixmOlRzfSwzMTp7bjoiQklGRjJGTVRDTlQifSwzMjp7bjoiQklGRjJDT0xJTkZPIn0s'@;
put 'MzM6e246IkFycmF5IixmOmp3fSwzNjp7bjoiQ09MV0lEVEgifSwzNzp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpXMH0sNTA6e246IkJJRkYyRk9OVFhUUkEiLGY6ZnVuY3Rpb24gZlooeSxQKXt5LmwrPTYseS5sKz0yLHkubCs9MSx5LmwrPTMseS5sKz0xLHkubCs9UC0xM319LDYyOntuOiJC'@;
put 'SUZGMldJTkRPVzIifSw1Mjp7bjoiRERFT2JqTmFtZSJ9LDY3OntuOiJCSUZGMlhGIn0sNjg6e246IkJJRkYyWEZJTkRFWCIsZjpobH0sNjk6e246IkJJRkYyRk9OVENMUiJ9LDg2OntuOiJCSUZGNEZNVENOVCJ9LDEyNjp7bjoiUksifSwxMjc6e246IkltRGF0YSIsZjpmdW5jdGlvbiBvRCh5'@;
put 'KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoNCkscmU9e2ZtdDpQLGVudjpMLGxlbjpRLGRhdGE6eS5zbGljZSh5LmwseS5sK1EpfTtyZXR1cm4geS5sKz1RLHJlfX0sMTM1OntuOiJBZGRpbiJ9LDEzNjp7bjoiRWRnIn0sMTM3OntuOiJQ'@;
put 'dWIifSwxNDU6e246IlN1YiJ9LDE0ODp7bjoiTEhSZWNvcmQifSwxNDk6e246IkxITkdyYXBoIn0sMTUwOntuOiJTb3VuZCJ9LDE2OTp7bjoiQ29vcmRMaXN0In0sMTcxOntuOiJHQ1cifSwxODg6e246IlNockZtbGEifSwxOTE6e246IlRvb2xiYXJIZHIifSwxOTI6e246IlRvb2xiYXJFbmQi'@;
put 'fSwxOTQ6e246IkFkZE1lbnUifSwxOTU6e246IkRlbE1lbnUifSwyMTQ6e246IlJTdHJpbmciLGY6ZnVuY3Rpb24gWHcoeSxQLEwpe3ZhciBRPXkubCtQLHJlPUx1KHkpLHBlPXkucmVhZF9zaGlmdCgyKSxfZT1IZCh5LHBlLEwpO3JldHVybiB5Lmw9USxyZS50PSJzdHIiLHJlLnZhbD1fZSxy'@;
put 'ZX19LDIyMzp7bjoiVUREZXNjIn0sMjM0OntuOiJUYWJJZENvbmYifSwzNTQ6e246IlhMNU1vZGlmeSJ9LDQyMTp7bjoiRmlsZVNoYXJpbmcyIn0sNTE4OntuOiJGb3JtdWxhIixmOnozfSw1MjE6e246IkJPRiIsZjpSdX0sNTM2OntuOiJMYmwiLGY6Vnd9LDU0Nzp7bjoiRXh0ZXJuTmFtZSIs'@;
put 'Zjp5OX0sNTYxOntuOiJGb250In0sNTc5OntuOiJCSUZGM1hGIn0sMTAzMDp7bjoiRm9ybXVsYSIsZjp6M30sMTAzMzp7bjoiQk9GIixmOlJ1fSwxMDkxOntuOiJCSUZGNFhGIn0sMjE1Nzp7bjoiRmVhdEluZm8ifSwyMTYzOntuOiJGZWF0SW5mbzExIn0sMjE3Nzp7bjoiU1hBZGRsMTIifSwy'@;
put 'MjQwOntuOiJBdXRvV2ViUHViIn0sMjI0MTp7bjoiTGlzdE9iaiJ9LDIyNDI6e246Ikxpc3RGaWVsZCJ9LDIyNDM6e246Ikxpc3REViJ9LDIyNDQ6e246Ikxpc3RDb25kRm10In0sMjI0NTp7bjoiTGlzdENGIn0sMjI0Njp7bjoiRk1RcnkifSwyMjQ3OntuOiJGTVNRcnkifSwyMjQ4OntuOiJQ'@;
put 'TFYifSwyMjQ5OntuOiJMbkV4dCJ9LDIyNTA6e246Ik1rckV4dCJ9LDIyNTE6e246IkNydENvb3B0In0sMjI2Mjp7bjoiRlJUQXJjaElkJCIscjoxMn0sMjkyODI6e319LFNNPVBlKFgwLCJuIik7ZnVuY3Rpb24gU2koeSxQLEwsUSl7dmFyIHJlPStQfHwrU01bUF07aWYoIWlzTmFOKHJlKSl7'@;
put 'dmFyIHBlPVF8fChMfHxbXSkubGVuZ3RofHwwLF9lPXkubmV4dCg0KTtfZS53cml0ZV9zaGlmdCgyLHJlKSxfZS53cml0ZV9zaGlmdCgyLHBlKSxwZT4wJiZOaChMKSYmeS5wdXNoKEwpfX1mdW5jdGlvbiBKMCh5LFAsTCl7cmV0dXJuIHl8fCh5PWZyKDcpKSx5LndyaXRlX3NoaWZ0KDIsUCks'@;
put 'eS53cml0ZV9zaGlmdCgyLEwpLHkud3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3NoaWZ0KDEsMCkseX1mdW5jdGlvbiByXyh5LFAsTCxRKXtpZihudWxsIT1QLnYpc3dpdGNoKFAudCl7Y2FzZSJkIjpjYXNlIm4iOnZhciByZT0iZCI9PVAudD9VZShIdChQLnYpKTpQLnY7cmV0dXJuIHZvaWQo'@;
put 'cmU9PSgwfHJlKSYmcmU+PTAmJnJlPDY1NTM2P1NpKHksMixmdW5jdGlvbiBhRCh5LFAsTCl7dmFyIFE9ZnIoOSk7cmV0dXJuIEowKFEseSxQKSxRLndyaXRlX3NoaWZ0KDIsTCksUX0oTCxRLHJlKSk6U2koeSwzLGZ1bmN0aW9uIGRaKHksUCxMKXt2YXIgUT1mcigxNSk7cmV0dXJuIEowKFEs'@;
put 'eSxQKSxRLndyaXRlX3NoaWZ0KDgsTCwiZiIpLFF9KEwsUSxyZSkpKTtjYXNlImIiOmNhc2UiZSI6cmV0dXJuIHZvaWQgU2koeSw1LGZ1bmN0aW9uIG5fKHksUCxMLFEpe3ZhciByZT1mcig5KTtyZXR1cm4gSjAocmUseSxQKSxkOShMLFF8fCJiIixyZSkscmV9KEwsUSxQLnYsUC50KSk7Y2Fz'@;
put 'ZSJzIjpjYXNlInN0ciI6cmV0dXJuIHZvaWQgU2koeSw0LGZ1bmN0aW9uIFFMKHksUCxMKXt2YXIgUT1mcig4KzIqTC5sZW5ndGgpO3JldHVybiBKMChRLHksUCksUS53cml0ZV9zaGlmdCgxLEwubGVuZ3RoKSxRLndyaXRlX3NoaWZ0KEwubGVuZ3RoLEwsInNiY3MiKSxRLmw8US5sZW5ndGg/'@;
put 'US5zbGljZSgwLFEubCk6UX0oTCxRLChQLnZ8fCIiKS5zbGljZSgwLDI1NSkpKX1TaSh5LDEsSjAobnVsbCxMLFEpKX1mdW5jdGlvbiByUih5LFAsTCxRLHJlKXt2YXIgcGU9MTYrZ3UocmUuY2VsbFhmcyxyZS5jZWxsU3R5bGVYZnMsUCxyZSk7aWYobnVsbCE9UC52fHxQLmJmKWlmKFAuYmYp'@;
put 'U2koeSwiRm9ybXVsYSIsZnVuY3Rpb24gV1ooeSxQLEwsUSxyZSl7dmFyIHBlPXowKFAsTCxyZSksX2U9ZnVuY3Rpb24gcHYoeSl7aWYobnVsbD09eSl7dmFyIFA9ZnIoOCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoMSwzKSxQLndyaXRlX3NoaWZ0KDEsMCksUC53cml0ZV9zaGlmdCgyLDApLFAu'@;
put 'd3JpdGVfc2hpZnQoMiwwKSxQLndyaXRlX3NoaWZ0KDIsNjU1MzUpLFB9cmV0dXJuIFBjKCJudW1iZXIiPT10eXBlb2YgeT95OjApfSh5LnYpLHZlPWZyKDYpO3ZlLndyaXRlX3NoaWZ0KDIsMzMpLHZlLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBIZT1mcih5LmJmLmxlbmd0aCksQmU9MDtC'@;
put 'ZTx5LmJmLmxlbmd0aDsrK0JlKUhlW0JlXT15LmJmW0JlXTtyZXR1cm4gUyhbcGUsX2UsdmUsSGVdKX0oUCxMLFEsMCxwZSkpO2Vsc2Ugc3dpdGNoKFAudCl7Y2FzZSJkIjpjYXNlIm4iOlNpKHksIk51bWJlciIsZnVuY3Rpb24gQzMoeSxQLEwsUSl7dmFyIHJlPWZyKDE0KTtyZXR1cm4gejAo'@;
put 'eSxQLFEscmUpLFBjKEwscmUpLHJlfShMLFEsImQiPT1QLnQ/VWUoSHQoUC52KSk6UC52LHBlKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOlNpKHksNTE3LGZ1bmN0aW9uIE5kKHksUCxMLFEscmUscGUpe3ZhciBfZT1mcig4KTtyZXR1cm4gejAoeSxQLFEsX2UpLGQ5KEwscGUsX2UpLF9lfShM'@;
put 'LFEsUC52LHBlLDAsUC50KSk7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6aWYocmUuYm9va1NTVCl7dmFyIHZlPXd2KHJlLlN0cmluZ3MsUC52LFAuUj9QLnI9SmgoUC5SKTpudWxsLHJlLnJldlN0cmluZ3MpO2lmKFAuUilmb3IodmFyIFNlPTA7U2U8UC5SLmxlbmd0aDsrK1NlKVAuUltTZV0u'@;
put 'cyYmZ3UocmUuY2VsbFhmcyxyZS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlAuUltTZV0uc30scmUpO1NpKHksIkxhYmVsU3N0IixmdW5jdGlvbiBaVCh5LFAsTCxRKXt2YXIgcmU9ZnIoMTApO3JldHVybiB6MCh5LFAsUSxyZSkscmUud3JpdGVfc2hpZnQoNCxMKSxyZX0oTCxRLHZlLHBl'@;
put 'KSl9ZWxzZSBTaSh5LCJMYWJlbCIsZnVuY3Rpb24gV1QoeSxQLEwsUSxyZSl7dmFyIHBlPSFyZXx8OD09cmUuYmlmZixfZT1mcigrcGUrOCsoMStwZSkqTC5sZW5ndGgpO3JldHVybiB6MCh5LFAsUSxfZSksX2Uud3JpdGVfc2hpZnQoMixMLmxlbmd0aCkscGUmJl9lLndyaXRlX3NoaWZ0KDEs'@;
put 'MSksX2Uud3JpdGVfc2hpZnQoKDErcGUpKkwubGVuZ3RoLEwscGU/InV0ZjE2bGUiOiJzYmNzIiksX2V9KEwsUSwoUC52fHwiIikuc2xpY2UoMCwyNTUpLHBlLHJlKSk7YnJlYWs7ZGVmYXVsdDpTaSh5LCJCbGFuayIsejAoTCxRLHBlKSl9ZWxzZSBTaSh5LCJCbGFuayIsejAoTCxRLHBlKSl9'@;
put 'ZnVuY3Rpb24gaVIoeSxQLEwpe3ZhciBCZSxRPXljKCkscmU9TC5TaGVldE5hbWVzW3ldLHBlPUwuU2hlZXRzW3JlXXx8e30sX2U9KEx8fHt9KS5Xb3JrYm9va3x8e30sdmU9KF9lLlNoZWV0c3x8W10pW3ldfHx7fSxTZT1BcnJheS5pc0FycmF5KHBlKSxIZT04PT1QLmJpZmYsR2U9IiIsbnQ9'@;
put 'W10sZHQ9T2kocGVbIiFyZWYiXXx8IkExIiksQ3Q9SGU/NjU1MzY6MTYzODQ7aWYoZHQuZS5jPjI1NXx8ZHQuZS5yPj1DdCl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhwZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtkdC5l'@;
put 'LmM9TWF0aC5taW4oZHQuZS5jLDI1NSksZHQuZS5yPU1hdGgubWluKGR0LmUuYyxDdC0xKX1TaShRLDIwNTcsRDQoMCwxNixQKSksU2koUSwiQ2FsY01vZGUiLGZ1KDEpKSxTaShRLCJDYWxjQ291bnQiLGZ1KDEwMCkpLFNpKFEsIkNhbGNSZWZNb2RlIixQbCghMCkpLFNpKFEsIkNhbGNJdGVy'@;
put 'IixQbCghMSkpLFNpKFEsIkNhbGNEZWx0YSIsUGMoLjAwMSkpLFNpKFEsIkNhbGNTYXZlUmVjYWxjIixQbCghMCkpLFNpKFEsIlByaW50Um93Q29sIixQbCghMSkpLFNpKFEsIlByaW50R3JpZCIsUGwoITEpKSxTaShRLCJHcmlkU2V0IixmdSgxKSksU2koUSwiR3V0cyIsZnVuY3Rpb24gSHco'@;
put 'eSl7dmFyIFA9ZnIoOCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDIseVswXT95WzBdKzE6MCksUC53cml0ZV9zaGlmdCgyLHlbMV0/eVsxXSsxOjApLFB9KFswLDBdKSksU2koUSwiSENlbnRlciIsUGwoITEpKSxTaShRLCJWQ2VudGVyIixQbCghMSkpO3ZhciBj'@;
put 'dD1wZVsiIXByaW50Il0mJnBlWyIhcHJpbnQiXS5tYXJnaW5zfHxwZVsiIW1hcmdpbnMiXTtjdCYmKG51bGwhPWN0LmxlZnQmJlNpKFEsIkxlZnRNYXJnaW4iLFBjKGN0LmxlZnQpKSxudWxsIT1jdC5yaWdodCYmU2koUSwiUmlnaHRNYXJnaW4iLFBjKGN0LnJpZ2h0KSksbnVsbCE9Y3QudG9w'@;
put 'JiZTaShRLCJUb3BNYXJnaW4iLFBjKGN0LnRvcCkpLG51bGwhPWN0LmJvdHRvbSYmU2koUSwiQm90dG9tTWFyZ2luIixQYyhjdC5ib3R0b20pKSwobnVsbCE9Y3QuaGVhZGVyfHxudWxsIT1jdC5mb290ZXIpJiZTaShRLCJTZXR1cCIsZnVuY3Rpb24ga20oeSxQKXt2YXIgTD1mcigzNCksUT0h'@;
put 'MSxyZT03MDtyZXR1cm4ibGFuZHNjYXBlIj09KFAucHJvcHN8fHt9KS5vcmllbnRhdGlvbiYmKFE9ITAscmUmPS02NyksUSYmKHJlJj0tNSksTC53cml0ZV9zaGlmdCgyLDEpLEwud3JpdGVfc2hpZnQoMiwxMDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0'@;
put 'ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMSxyZSksTC53cml0ZV9zaGlmdCgxLDApLEwud3JpdGVfc2hpZnQoMiw2MDApLEwud3JpdGVfc2hpZnQoMiw2MDApLFBjKG51bGw9PXkuaGVhZGVyPy41OnkuaGVhZGVyLEwpLFBjKG51bGw9PXkuZm9vdGVyPy41OnkuZm9vdGVyLEwpLEwud3Jp'@;
put 'dGVfc2hpZnQoMiwxKSxMfShjdCxwZVsiIXByaW50Il18fHt9KSkpLEhlJiZmdW5jdGlvbiB4TSh5LFAsTCl7aWYoUCl7dmFyIFE9MDtQLmZvckVhY2goZnVuY3Rpb24ocmUscGUpeysrUTw9MjU2JiZyZSYmKHJlLmF1dG8mJk5pKEwscmUscGUpLFNpKHksIkNvbEluZm8iLGZ1bmN0aW9uIHJE'@;
put 'KHksUCl7dmFyIEw9ZnIoMTIpO0wud3JpdGVfc2hpZnQoMixQKSxMLndyaXRlX3NoaWZ0KDIsUCksTC53cml0ZV9zaGlmdCgyLDI1Nip5LndpZHRoKSxMLndyaXRlX3NoaWZ0KDIsMCk7dmFyIFE9MDtyZXR1cm4geS5oaWRkZW4mJihRfD0xKSxMLndyaXRlX3NoaWZ0KDEsUSksTC53cml0ZV9z'@;
put 'aGlmdCgxLFE9eS5sZXZlbHx8MCksTC53cml0ZV9zaGlmdCgyLDApLEx9KFlkKHBlLHJlKSxwZSkpKX0pfX0oUSxwZVsiIWNvbHMiXSxwZSksU2koUSwiRGltZW5zaW9ucyIsZnVuY3Rpb24ganQoeSxQKXt2YXIgTD04IT1QLmJpZmYmJlAuYmlmZj8yOjQsUT1mcigyKkwrNik7cmV0dXJuIFEu'@;
put 'd3JpdGVfc2hpZnQoTCx5LnMuciksUS53cml0ZV9zaGlmdChMLHkuZS5yKzEpLFEud3JpdGVfc2hpZnQoMix5LnMuYyksUS53cml0ZV9zaGlmdCgyLHkuZS5jKzEpLFEud3JpdGVfc2hpZnQoMiwwKSxRfShkdCxQKSksSGUmJihwZVsiIWxpbmtzIl09W10pLHBlWyIhcm93cyJdJiZIZSYmcGVb'@;
put 'IiFyb3dzIl0uZm9yRWFjaChmdW5jdGlvbihadCxwbil7Zm9yKHZhciBLbj1IcyhwbiksdW49MjU2LHFuPTAsem49WnQucz8xNitndShQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlp0LnN9LFApOjAsa249ZHQucy5jO2tuPD1kdC5lLmM7KytrbikoU2U/KHBlW3BuXXx8'@;
put 'W10pW2tuXTpwZVtudFtrbl0rS25dKSYmKGtuPHVuJiYodW49a24pLGtuPnFuJiYocW49a24pKTtxbjx1biYmKHVuPXFuPTApLFNpKFEsIlJvdyIsZnVuY3Rpb24gbXQoeSxQLEwpe3ZhciBRPWZyKDE2KTtRLndyaXRlX3NoaWZ0KDIsUCksUS53cml0ZV9zaGlmdCgyLExbMF0pLFEud3JpdGVf'@;
put 'c2hpZnQoMixMWzFdKzEpLFEud3JpdGVfc2hpZnQoMiwyMCp5LmhwdHx8MjAqajIoeS5ocHgpfHwzMzApLFEud3JpdGVfc2hpZnQoNCwwKTt2YXIgcmU9MDtyZXR1cm4gcmV8PTB8eS5sZXZlbCx5LmhpZGRlbiYmKHJlfD0zMikscmV8PTY0LExbMl0mJihyZXw9MTI4KSxRLndyaXRlX3NoaWZ0'@;
put 'KDEscmUpLFEud3JpdGVfc2hpZnQoMSwxKSxRLndyaXRlX3NoaWZ0KDIsTFsyXXx8MCksUX0oWnQscG4sW3VuLHFuLHpuXSkpfSk7Zm9yKHZhciBidD1kdC5zLnI7YnQ8PWR0LmUucjsrK2J0KXtHZT1IcyhidCk7Zm9yKHZhciBGdD1kdC5zLmM7RnQ8PWR0LmUuYzsrK0Z0KXtidD09PWR0LnMu'@;
put 'ciYmKG50W0Z0XT1OcyhGdCkpLEJlPW50W0Z0XStHZTt2YXIgRXQ9U2U/KHBlW2J0XXx8W10pW0Z0XTpwZVtCZV07RXQmJihyUihRLEV0LGJ0LEZ0LFApLEhlJiZFdC5sJiZwZVsiIWxpbmtzIl0ucHVzaChbQmUsRXQubF0pKX19dmFyIFR0PXZlLkNvZGVOYW1lfHx2ZS5uYW1lfHxyZTtyZXR1'@;
put 'cm4oSGV8fDU9PVAuYmlmZiYmcGVbIiFmcmVlemUiXSkmJlNpKFEsIldpbmRvdzIiLGZ1bmN0aW9uIEJUKHksUCxMLFEpe3ZhciByZT1RJiZRLmJpZmZ8fDgscGU9ZnIoOD09cmU/MTg6MTApLF9lPTE3MTg7cmV0dXJuIEw+MCYmKF9lJj0tNTEzKSxobihQWyIhZ3JpZGxpbmVzIl0pJiYoX2Um'@;
put 'PS0zKSxQWyIhZnJlZXplIl0mJihfZXw9OCkseSYmeS5SVEwmJihfZXw9NjQpLDU9PXJlJiYoX2U9NDQ2KSxwZS53cml0ZV9zaGlmdCgyLF9lKSw4PT1yZT8ocGUud3JpdGVfc2hpZnQoNCwwKSxwZS53cml0ZV9zaGlmdCg0LDY0KSxwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0'@;
put 'KDQsMCkpOihwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCkpLHBlfSgoX2UuVmlld3N8fFtdKVswXSxwZSx5KSksKEhlfHw1PT1QLmJpZmYpJiZwZVsiIWZyZWV6ZSJdJiZTaShRLCJQYW5lIixmdW5jdGlvbiB6VCh5KXsic3RyaW5nIj09dHlwZW9mIHkmJih5PXNzKHkp'@;
put 'KTt2YXIgUD1mcigxMCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoMix5LmMpLFAud3JpdGVfc2hpZnQoMix5LnIpLFAud3JpdGVfc2hpZnQoMix5LnIpLFAud3JpdGVfc2hpZnQoMix5LmMpLFAud3JpdGVfc2hpZnQoMSwzKSxQLndyaXRlX3NoaWZ0KDEsMCksUH0ocGVbIiFmcmVlemUiXSkpLEhl'@;
put 'JiZwZVsiIXNlbCJdJiZTaShRLCJTZWxlY3Rpb24iLGZ1bmN0aW9uIFI0KHksUCl7dmFyIEw9ZnIoMTUpLFE9eS5jZWxsO2lmKCFRKXtpZigheS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7UT1kaShXcyh5LnJhbmdlLnJl'@;
put 'cGxhY2UoL1xzLiokLywiIikpLnMpfXZhciByZT0ic3RyaW5nIj09dHlwZW9mIFE/c3MoUSk6UTtpZihQKXt2YXIgcGU9InN0cmluZyI9PXR5cGVvZiBQP3NzKFApOlA7TC53cml0ZV9zaGlmdCgxLHJlLnI+PXBlLnImJnJlLmM+PXBlLmM/MDpyZS5yPj1wZS5yJiZyZS5jPHBlLmM/MjpyZS5y'@;
put 'PHBlLnImJnJlLmM+PXBlLmM/MTozKX1lbHNlIEwud3JpdGVfc2hpZnQoMSwzKTtyZXR1cm4gTC53cml0ZV9zaGlmdCgyLHJlLnIpLEwud3JpdGVfc2hpZnQoMixyZS5jKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDEpLGZ1bmN0aW9uIG05KHksUCl7UHx8KFA9ZnIoNikp'@;
put 'LFAud3JpdGVfc2hpZnQoMix5LnM/eS5zLnI6eS5yKSxQLndyaXRlX3NoaWZ0KDIseS5lP3kuZS5yOnkuciksUC53cml0ZV9zaGlmdCgxLHkucz95LnMuYzp5LmMpLFAud3JpdGVfc2hpZnQoMSx5LmU/eS5lLmM6eS5jKX0oe3M6cmUsZTpyZX0sTCksTH0ocGVbIiFzZWwiXSxwZVsiIWZyZWV6'@;
put 'ZSJdKSksSGUmJihwZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZTaShRLCJNZXJnZUNlbGxzIixmdW5jdGlvbiBZdyh5KXt2YXIgUD1mcigyKzgqeS5sZW5ndGgpO1Aud3JpdGVfc2hpZnQoMix5Lmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx5Lmxlbmd0aDsrK0wpVTAoeVtMXSxQKTtyZXR1cm4g'@;
put 'UH0ocGVbIiFtZXJnZXMiXSkpLEhlJiZmdW5jdGlvbiBWbCh5LFApe2Zvcih2YXIgTD0wO0w8UFsiIWxpbmtzIl0ubGVuZ3RoOysrTCl7dmFyIFE9UFsiIWxpbmtzIl1bTF07U2koeSwiSExpbmsiLFhoKFEpKSxRWzFdLlRvb2x0aXAmJlNpKHksIkhMaW5rVG9vbHRpcCIsUVQoUSkpfWRlbGV0'@;
put 'ZSBQWyIhbGlua3MiXX0oUSxwZSksU2koUSwiQ29kZU5hbWUiLG1tKFR0KSksSGUmJmZ1bmN0aW9uIE1NKHksUCl7dmFyIEw9ZnIoMTkpO0wud3JpdGVfc2hpZnQoNCwyMTUxKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMiwzKSxMLndyaXRl'@;
put 'X3NoaWZ0KDEsMSksTC53cml0ZV9zaGlmdCg0LDApLFNpKHksIkZlYXRIZHIiLEwpLChMPWZyKDM5KSkud3JpdGVfc2hpZnQoNCwyMTUyKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMiwzKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9z'@;
put 'aGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMiwxKSxMLndyaXRlX3NoaWZ0KDQsNCksTC53cml0ZV9zaGlmdCgyLDApLFUwKE9pKFBbIiFyZWYiXXx8IkExIiksTCksTC53cml0ZV9zaGlmdCg0LDQpLFNpKHksIkZlYXQiLEwpfShRLHBlKSxTaShRLCJFT0YiKSxRLmVuZCgpfWZ1bmN0aW9uIEVN'@;
put 'KHksUCxMKXt2YXIgUT15YygpLHJlPSh5fHx7fSkuV29ya2Jvb2t8fHt9LHBlPXJlLlNoZWV0c3x8W10sX2U9cmUuV0JQcm9wc3x8e30sdmU9OD09TC5iaWZmLFNlPTU9PUwuYmlmZjtTaShRLDIwNTcsRDQoMCw1LEwpKSwieGxhIj09TC5ib29rVHlwZSYmU2koUSwiQWRkaW4iKSxTaShRLCJJ'@;
put 'bnRlcmZhY2VIZHIiLHZlP2Z1KDEyMDApOm51bGwpLFNpKFEsIk1tcyIsZnVuY3Rpb24gTHcoeSxQKXtQfHwoUD1mcih5KSk7Zm9yKHZhciBMPTA7TDx5OysrTClQLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFB9KDIpKSxTZSYmU2koUSwiVG9vbGJhckhkciIpLFNlJiZTaShRLCJUb29sYmFy'@;
put 'RW5kIiksU2koUSwiSW50ZXJmYWNlRW5kIiksU2koUSwiV3JpdGVBY2Nlc3MiLGZ1bmN0aW9uIHdtKHksUCl7dmFyIEw9IVB8fDg9PVAuYmlmZixRPWZyKEw/MTEyOjU0KTtmb3IoUS53cml0ZV9zaGlmdCg4PT1QLmJpZmY/MjoxLDcpLEwmJlEud3JpdGVfc2hpZnQoMSwwKSxRLndyaXRlX3No'@;
put 'aWZ0KDQsODU5MDA3MDU5KSxRLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwoTD8wOjUzNjg3MDkxMikpO1EubDxRLmxlbmd0aDspUS53cml0ZV9zaGlmdCgxLEw/MDozMik7cmV0dXJuIFF9KDAsTCkpLFNpKFEsIkNvZGVQYWdlIixmdSh2ZT8xMjAwOjEyNTIpKSx2ZSYmU2koUSwiRFNGIixmdSgw'@;
put 'KSksdmUmJlNpKFEsIkV4Y2VsOUZpbGUiKSxTaShRLCJSUlRhYklkIixmdW5jdGlvbiBNOSh5KXtmb3IodmFyIFA9ZnIoMip5KSxMPTA7TDx5OysrTClQLndyaXRlX3NoaWZ0KDIsTCsxKTtyZXR1cm4gUH0oeS5TaGVldE5hbWVzLmxlbmd0aCkpLHZlJiZ5LnZiYXJhdyYmU2koUSwiT2JQcm9q'@;
put 'IiksdmUmJnkudmJhcmF3JiZTaShRLCJDb2RlTmFtZSIsbW0oX2UuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siKSksU2koUSwiQnVpbHRJbkZuR3JvdXBDb3VudCIsZnUoMTcpKSxTaShRLCJXaW5Qcm90ZWN0IixQbCghMSkpLFNpKFEsIlByb3RlY3QiLFBsKCExKSksU2koUSwiUGFzc3dvcmQi'@;
put 'LGZ1KDApKSx2ZSYmU2koUSwiUHJvdDRSZXYiLFBsKCExKSksdmUmJlNpKFEsIlByb3Q0UmV2UGFzcyIsZnUoMCkpLFNpKFEsIldpbmRvdzEiLGZ1bmN0aW9uIE93KCl7dmFyIHk9ZnIoMTgpO3JldHVybiB5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0ZV9zaGlmdCgyLDApLHkud3JpdGVfc2hp'@;
put 'ZnQoMiwyOTI4MCkseS53cml0ZV9zaGlmdCgyLDE3NjAwKSx5LndyaXRlX3NoaWZ0KDIsNTYpLHkud3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0ZV9zaGlmdCgyLDEpLHkud3JpdGVfc2hpZnQoMiw1MDApLHl9KCkpLFNpKFEsIkJhY2t1cCIsUGwoITEpKSxTaShR'@;
put 'LCJIaWRlT2JqIixmdSgwKSksU2koUSwiRGF0ZTE5MDQiLFBsKCJ0cnVlIj09ZnVuY3Rpb24gaU0oeSl7cmV0dXJuIHkuV29ya2Jvb2smJnkuV29ya2Jvb2suV0JQcm9wcyYmeXIoeS5Xb3JrYm9vay5XQlByb3BzLmRhdGUxOTA0KT8idHJ1ZSI6ImZhbHNlIn0oeSkpKSxTaShRLCJDYWxjUHJl'@;
put 'Y2lzaW9uIixQbCghMCkpLHZlJiZTaShRLCJSZWZyZXNoQWxsIixQbCghMSkpLFNpKFEsIkJvb2tCb29sIixmdSgwKSksQ3I9dzQoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2'@;
put 'OTYwLDE2NzExOTM1LDY1NTM1XSksZnVuY3Rpb24gZVIoeSxQLEwpeygoKFB8fHt9KS5TdHlsZXN8fHt9KS5Gb250c3x8W3tzejoxMixjb2xvcjp7dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2goZnVuY3Rpb24oUSl7U2koeSwiRm9udCIs'@;
put 'ZnVuY3Rpb24gdzMoeSxQKXt2YXIgTD15Lm5hbWV8fCJBcmlhbCIsUT1QJiY1PT1QLmJpZmYscGU9ZnIoUT8xNStMLmxlbmd0aDoxNisyKkwubGVuZ3RoKTtwZS53cml0ZV9zaGlmdCgyLDIwKih5LnN6fHwxMikpO3ZhciBfZT0wO3JldHVybiB5LmJvbGQmJihfZXw9MSkseS5pdGFsaWMmJihf'@;
put 'ZXw9MikseS5zdHJpa2UmJihfZXw9OCkseS5zaGFkb3cmJihfZXw9MzIpLHBlLndyaXRlX3NoaWZ0KDEsX2UpLHBlLndyaXRlX3NoaWZ0KDEsMCkscGUud3JpdGVfc2hpZnQoMix5LmNvbG9yP0gzKHkuY29sb3IsNjQpOjY0KSxwZS53cml0ZV9zaGlmdCgyLHkuYm9sZD83MDA6NDAwKSxwZS53'@;
put 'cml0ZV9zaGlmdCgyLCJzdXBlciI9PXkudmFsaWduPzE6InN1YiI9PXkudmFsaWduPzI6MCkscGUud3JpdGVfc2hpZnQoMSx5LnVuZGVybGluZXx8MCkscGUud3JpdGVfc2hpZnQoMSxwZS5mYW1pbHl8fDApLHBlLndyaXRlX3NoaWZ0KDEscGUuY2hhcnNldHx8MCkscGUud3JpdGVfc2hpZnQo'@;
put 'MSwwKSxwZS53cml0ZV9zaGlmdCgxLEwubGVuZ3RoKSxRfHxwZS53cml0ZV9zaGlmdCgxLDEpLHBlLndyaXRlX3NoaWZ0KChRPzE6MikqTC5sZW5ndGgsTCxRPyJzYmNzIjoidXRmMTZsZSIpLHBlfShRLEwpKX0pfShRLHksTCksZnVuY3Rpb24gdFIoeSxQLEwpe1AmJltbNSw4XSxbMjMsMjZd'@;
put 'LFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oUSl7Zm9yKHZhciByZT1RWzBdO3JlPD1RWzFdOysrcmUpbnVsbCE9UFtyZV0mJlNpKHksIkZvcm1hdCIsWHIocmUsUFtyZV0sTCkpfSl9KFEseS5TU0YsTCksZnVuY3Rpb24gblIoeSxQKXtmb3IodmFyIEw9MDtMPDE2OysrTClT'@;
put 'aSh5LCJYRiIsQ20oe251bUZtdElkOjAsc3R5bGU6ITB9LDAsUCkpO1AuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKFEpe1NpKHksIlhGIixDbShRLDAsUCkpfSl9KFEsTCksU2koUSwiUGFsZXR0ZSIsZnVuY3Rpb24gJHcoeSl7dmFyIFA9ZnIoMjI2KTtQLndyaXRlX3NoaWZ0KDIsNTYpO2Zv'@;
put 'cih2YXIgTD0wO0w8NTY7KytMKXt2YXIgUT15W0wrOF18fGgzW0wrOF07UC53cml0ZV9zaGlmdCgxLFFbMF0pLFAud3JpdGVfc2hpZnQoMSxRWzFdKSxQLndyaXRlX3NoaWZ0KDEsUVsyXSksUC53cml0ZV9zaGlmdCgxLDApfXJldHVybiBQfShDcikpLENyPW9uKGgzKSx2ZSYmU2koUSwiVXNl'@;
put 'c0VMRnMiLFBsKCExKSk7dmFyIEJlPVEuZW5kKCksR2U9eWMoKTt2ZSYmU2koR2UsIkNvdW50cnkiLGZ1bmN0aW9uIHREKHkpe3JldHVybiB5fHwoeT1mcig0KSkseS53cml0ZV9zaGlmdCgyLDEpLHkud3JpdGVfc2hpZnQoMiwxKSx5fSgpKSx2ZSYmTC5TdHJpbmdzJiZmdW5jdGlvbiB0Xyh5'@;
put 'LFAsTCxRKXt2YXIgcmU9UXx8KEx8fFtdKS5sZW5ndGh8fDA7aWYocmU8PTgyMjQpcmV0dXJuIFNpKHksUCxMLHJlKTt2YXIgcGU9K1B8fCtTTVtQXTtpZighaXNOYU4ocGUpKXtmb3IodmFyIF9lPUwucGFydHN8fFtdLHZlPTAsU2U9MCxIZT0wO0hlKyhfZVt2ZV18fDgyMjQpPD04MjI0OylI'@;
put 'ZSs9X2VbdmVdfHw4MjI0LHZlKys7dmFyIEJlPXkubmV4dCg0KTtmb3IoQmUud3JpdGVfc2hpZnQoMixwZSksQmUud3JpdGVfc2hpZnQoMixIZSkseS5wdXNoKEwuc2xpY2UoU2UsU2UrSGUpKSxTZSs9SGU7U2U8cmU7KXtmb3IoKEJlPXkubmV4dCg0KSkud3JpdGVfc2hpZnQoMiw2MCksSGU9'@;
put 'MDtIZSsoX2VbdmVdfHw4MjI0KTw9ODIyNDspSGUrPV9lW3ZlXXx8ODIyNCx2ZSsrO0JlLndyaXRlX3NoaWZ0KDIsSGUpLHkucHVzaChMLnNsaWNlKFNlLFNlK0hlKSksU2UrPUhlfX19KEdlLCJTU1QiLGZ1bmN0aW9uIGJzKHksUCl7dmFyIEw9ZnIoOCk7TC53cml0ZV9zaGlmdCg0LHkuQ291'@;
put 'bnQpLEwud3JpdGVfc2hpZnQoNCx5LlVuaXF1ZSk7Zm9yKHZhciBRPVtdLHJlPTA7cmU8eS5sZW5ndGg7KytyZSlRW3JlXT1qMCh5W3JlXSxQKTt2YXIgcGU9UyhbTF0uY29uY2F0KFEpKTtyZXR1cm4gcGUucGFydHM9W0wubGVuZ3RoXS5jb25jYXQoUS5tYXAoZnVuY3Rpb24oX2Upe3JldHVy'@;
put 'biBfZS5sZW5ndGh9KSkscGV9KEwuU3RyaW5ncyxMKSksU2koR2UsIkVPRiIpO3ZhciBudD1HZS5lbmQoKSxkdD15YygpLEN0PTAsY3Q9MDtmb3IoY3Q9MDtjdDx5LlNoZWV0TmFtZXMubGVuZ3RoOysrY3QpQ3QrPSh2ZT8xMjoxMSkrKHZlPzI6MSkqeS5TaGVldE5hbWVzW2N0XS5sZW5ndGg7'@;
put 'dmFyIGJ0PUJlLmxlbmd0aCtDdCtudC5sZW5ndGg7Zm9yKGN0PTA7Y3Q8eS5TaGVldE5hbWVzLmxlbmd0aDsrK2N0KVNpKGR0LCJCb3VuZFNoZWV0OCIsWTAoe3BvczpidCxoczoocGVbY3RdfHx7fSkuSGlkZGVufHwwLGR0OjAsbmFtZTp5LlNoZWV0TmFtZXNbY3RdfSxMKSksYnQrPVBbY3Rd'@;
put 'Lmxlbmd0aDt2YXIgRXQ9ZHQuZW5kKCk7aWYoQ3QhPUV0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkJTOCAiK0N0KyIgIT0gIitFdC5sZW5ndGgpO3ZhciBUdD1bXTtyZXR1cm4gQmUubGVuZ3RoJiZUdC5wdXNoKEJlKSxFdC5sZW5ndGgmJlR0LnB1c2goRXQpLG50Lmxlbmd0aCYmVHQucHVz'@;
put 'aChudCksU2EoW1R0XSl9ZnVuY3Rpb24gaV8oeSxQKXt2YXIgTD1QfHx7fTtzd2l0Y2goTC5iaWZmfHwyKXtjYXNlIDg6Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBvUih5LFApe3ZhciBMPVB8fHt9LFE9W107Rm0oUCYmUC5QUEl8fDk2KSx5JiYheS5TU0YmJih5LlNTRj13LmdldF90YWJsZSgp'@;
put 'KSx5JiZ5LlNTRiYmKEoodyksdy5sb2FkX3RhYmxlKHkuU1NGKSxMLnJldnNzZj1BZSh5LlNTRiksTC5yZXZzc2ZbeS5TU0ZbNjU1MzVdXT0wLEwuc3NmPXkuU1NGKSx5LlN0eWxlcz17Rm9udHM6TC5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2Fs'@;
put 'aWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpMLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpMLkJvcmRlcnM9W3t9XSxEWEY6TC5EWEY9eS5TdHlsZXMmJnkuU3R5bGVzLkRYRnx8W119LFoxKEwuRm9udHNb'@;
put 'MF0pLEwuU3RyaW5ncz1bXSxMLlN0cmluZ3MuQ291bnQ9MCxMLlN0cmluZ3MuVW5pcXVlPTAsSzA/TC5yZXZTdHJpbmdzPW5ldyBNYXA6KEwucmV2U3RyaW5ncz17fSxMLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBMLnJldlN0cmluZ3MuZm9vKSxoXyhMKSxMLmNlbGxYZnM9W10sTC5jZWxs'@;
put 'U3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sZ3UoTC5jZWxsWGZzLEwuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSx5LlByb3BzfHwoeS5Qcm9wcz17fSk7Zm9yKHZhciByZT0wO3JlPHkuU2hlZXROYW1lcy5sZW5ndGg7KytyZSlRW1EubGVuZ3RoXT1pUihyZSxMLHkp'@;
put 'O3JldHVybiBRLnVuc2hpZnQoRU0oeSxRLEwpKSxTYShbUV0pfSh5LFApO2Nhc2UgNDpjYXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiBoWSh5LFApe3ZhciBMPVB8fHt9O251bGwhPXRlJiZudWxsPT1MLmRlbnNlJiYoTC5kZW5zZT10ZSk7Zm9yKHZhciBRPXljKCkscmU9MCxwZT0wO3Bl'@;
put 'PHkuU2hlZXROYW1lcy5sZW5ndGg7KytwZSl5LlNoZWV0TmFtZXNbcGVdPT1MLnNoZWV0JiYocmU9cGUpO2lmKDA9PXJlJiZMLnNoZWV0JiZ5LlNoZWV0TmFtZXNbMF0hPUwuc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIrTC5zaGVldCk7cmV0dXJuIFNpKFEsND09'@;
put 'TC5iaWZmPzEwMzM6Mz09TC5iaWZmPzUyMTo5LEQ0KDAsMTYsTCkpLGZ1bmN0aW9uIGRZKHksUCxMLFEpe3ZhciBfZSxyZT1BcnJheS5pc0FycmF5KFApLHBlPU9pKFBbIiFyZWYiXXx8IkExIiksdmU9IiIsU2U9W107aWYocGUuZS5jPjI1NXx8cGUuZS5yPjE2MzgzKXtpZihRLldURil0aHJv'@;
put 'dyBuZXcgRXJyb3IoIlJhbmdlICIrKFBbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7cGUuZS5jPU1hdGgubWluKHBlLmUuYywyNTUpLHBlLmUucj1NYXRoLm1pbihwZS5lLmMsMTYzODMpLF9lPU9vKHBlKX1mb3IodmFyIEhlPXBlLnMucjtIZTw9'@;
put 'cGUuZS5yOysrSGUpe3ZlPUhzKEhlKTtmb3IodmFyIEJlPXBlLnMuYztCZTw9cGUuZS5jOysrQmUpe0hlPT09cGUucy5yJiYoU2VbQmVdPU5zKEJlKSksX2U9U2VbQmVdK3ZlO3ZhciBHZT1yZT8oUFtIZV18fFtdKVtCZV06UFtfZV07R2UmJnJfKHksR2UsSGUsQmUpfX19KFEseS5TaGVldHNb'@;
put 'eS5TaGVldE5hbWVzW3JlXV0sMCxMKSxTaShRLDEwKSxRLmVuZCgpfSh5LFApfXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIrTC5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIEZ1PWZ1bmN0aW9uKCl7dmFyIHk9e2NlbnRlckNvbnRpbnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVm'@;
put 'dCJ9O2Z1bmN0aW9uIEwoR2UsbnQpe3ZhciBkdD1udHx8e307bnVsbCE9dGUmJm51bGw9PWR0LmRlbnNlJiYoZHQuZGVuc2U9dGUpO3ZhciBDdD1kdC5kZW5zZT9bXTp7fSxjdD0oR2U9R2UucmVwbGFjZSgvPCEtLS4qPy0tPi9nLCIiKSkubWF0Y2goLzx0YWJsZS9pKTtpZighY3QpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIgYnQ9R2UubWF0Y2goLzxcL3RhYmxlL2kpLEZ0PWN0LmluZGV4LEV0PWJ0JiZidC5pbmRleHx8R2UubGVuZ3RoLFR0PWZ1bmN0aW9uIGZ0KHksUCxMKXtpZihIbnx8InN0cmluZyI9PXR5cGVvZiBQ'@;
put 'KXJldHVybiB5LnNwbGl0KFApO2Zvcih2YXIgUT15LnNwbGl0KFApLHJlPVtRWzBdXSxwZT0xO3BlPFEubGVuZ3RoOysrcGUpcmUucHVzaChMKSxyZS5wdXNoKFFbcGVdKTtyZXR1cm4gcmV9KEdlLnNsaWNlKEZ0LEV0KSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+IiksWnQ9LTEscG49MCxLbj0w'@;
put 'LHVuPTAscW49e3M6e3I6MWU3LGM6MWU3fSxlOntyOjAsYzowfX0sem49W107Zm9yKEZ0PTA7RnQ8VHQubGVuZ3RoOysrRnQpe3ZhciBrbj1UdFtGdF0udHJpbSgpLGVyPWtuLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9ZXIpe2lmKCI8dGQiPT1lcnx8Ijx0aCI9PWVyKXt2'@;
put 'YXIgdHI9a24uc3BsaXQoLzxcL3RbZGhdPi9pKTtmb3IoRXQ9MDtFdDx0ci5sZW5ndGg7KytFdCl7dmFyIFpuPXRyW0V0XS50cmltKCk7aWYoWm4ubWF0Y2goLzx0W2RoXS9pKSl7Zm9yKHZhciBWcj1abixvaT0wOyI8Ij09VnIuY2hhckF0KDApJiYob2k9VnIuaW5kZXhPZigiPiIpKT4tMTsp'@;
put 'VnI9VnIuc2xpY2Uob2krMSk7Zm9yKHZhciBraT0wO2tpPHpuLmxlbmd0aDsrK2tpKXt2YXIgTGk9em5ba2ldO0xpLnMuYz09cG4mJkxpLnMucjxadCYmWnQ8PUxpLmUuciYmKHBuPUxpLmUuYysxLGtpPS0xKX12YXIgUXI9bG4oWm4uc2xpY2UoMCxabi5pbmRleE9mKCI+IikpKTt1bj1Rci5j'@;
put 'b2xzcGFuPytRci5jb2xzcGFuOjEsKChLbj0rUXIucm93c3Bhbik+MXx8dW4+MSkmJnpuLnB1c2goe3M6e3I6WnQsYzpwbn0sZTp7cjpadCsoS258fDEpLTEsYzpwbit1bi0xfX0pO3ZhciB1cj1Rci50fHxRclsiZGF0YS10Il18fCIiO2lmKCFWci5sZW5ndGgpe3BuKz11bjtjb250aW51ZX1p'@;
put 'ZihWcj1SYyhWcikscW4ucy5yPlp0JiYocW4ucy5yPVp0KSxxbi5lLnI8WnQmJihxbi5lLnI9WnQpLHFuLnMuYz5wbiYmKHFuLnMuYz1wbikscW4uZS5jPHBuJiYocW4uZS5jPXBuKSxWci5sZW5ndGgpe3ZhciBBbj17dDoicyIsdjpWcn07ZHQucmF3fHwhVnIudHJpbSgpLmxlbmd0aHx8InMi'@;
put 'PT11cnx8KEFuPSRuKFZyLGR0KSksZHQuZGVuc2U/KEN0W1p0XXx8KEN0W1p0XT1bXSksQ3RbWnRdW3BuXT1Bbik6Q3RbZGkoe3I6WnQsYzpwbn0pXT1Bbixwbis9dW59fX19fWVsc2V7aWYoKytadCxkdC5zaGVldFJvd3MmJmR0LnNoZWV0Um93czw9WnQpey0tWnQ7YnJlYWt9cG49MH19cmV0'@;
put 'dXJuIEN0WyIhcmVmIl09T28ocW4pLHpuLmxlbmd0aCYmKEN0WyIhbWVyZ2VzIl09em4pLEN0fWZ1bmN0aW9uIHJlKEdlLG50LGR0LEN0LGN0LGJ0KXt2YXIgVHQsRnQ9R2VbIiFtZXJnZXMiXXx8W10sRXQ9W10sWnQ9e3N0eWxlOltdfSxwbj0hMTtmdW5jdGlvbiBLbihEaSxZbyxsbyl7dmFy'@;
put 'IEFvPSIiLHhvPTA7aWYoVHRbRGldKXN3aXRjaChUdFtEaV0uc3R5bGUpe2Nhc2UidGhpbiI6Y2FzZSJoYWlyIjpBbz0ic29saWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW0iOkFvPSJzb2xpZCIseG89MjticmVhaztjYXNlInRoaWNrIjpBbz0ic29saWQiLHhvPTM7YnJlYWs7Y2FzZSJkb3Vi'@;
put 'bGUiOkFvPSJkb3VibGUiLHhvPTM7YnJlYWs7Y2FzZSJkb3R0ZWQiOmNhc2UiZGFzaERvdERvdCI6QW89ImRvdHRlZCIseG89MTticmVhaztjYXNlIm1lZGl1bURhc2hEb3REb3QiOkFvPSJkb3R0ZWQiLHhvPTI7YnJlYWs7Y2FzZSJkYXNoZWQiOmNhc2UiZGFzaERvdCI6Y2FzZSJzbGFudERh'@;
put 'c2hEb3QiOkFvPSJkYXNoZWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoZWQiOmNhc2UibWVkaXVtRGFzaERvdCI6QW89ImRhc2hlZCIseG89Mn1lOmlmKDA9PXhvKXtzd2l0Y2goRGkpe2Nhc2UidG9wIjotLVlvO2JyZWFrO2Nhc2UibGVmdCI6LS1sbzticmVhaztjYXNlImJvdHRvbSI6'@;
put 'KytZbzticmVhaztjYXNlInJpZ2h0IjorK2xvfXZhciBoaT1Zbz49MCYmbG8+PTA/Q3QuZGVuc2U/KEdlW1lvXXx8W10pW2xvXTpHZVtkaSh7cjpZbyxjOmxvfSldOm51bGw7aWYoaGkpe2lmKGhpLnMmJmhpLnNbe3RvcDoiYm90dG9tIixib3R0b206InRvcCIsbGVmdDoicmlnaHQiLHJpZ2h0'@;
put 'OiJsZWZ0In1bRGldXSlicmVhayBlO2hpLnMmJmhpLnMuZmdDb2xvciYmKHhvPTEpfVR0LmZnQ29sb3ImJih4bz0xKSwhaGkmJnBuJiYwPT14byYmKHhvPTEpfTAhPXhvJiZ4byYmKFp0LnN0eWxlLnB1c2goImJvcmRlci0iK0RpKyItc3R5bGU6IisoQW98fCJ0cmFuc3BhcmVudCIpKSxadC5z'@;
put 'dHlsZS5wdXNoKCJib3JkZXItIitEaSsiLXdpZHRoOiIreG8rInB4IiksIiI9PUFvP1p0LnN0eWxlLnB1c2goImJvcmRlci0iK0RpKyItY29sb3I6IHRyYW5zcGFyZW50Iik6VHRbRGldLmNvbG9yJiZUdFtEaV0uY29sb3IucmdiJiZadC5zdHlsZS5wdXNoKCJib3JkZXItIitEaSsiLWNvbG9y'@;
put 'OiMiK091KFR0W0RpXS5jb2xvci5yZ2IpKSl9Zm9yKHZhciB1bj1udC5zLmM7dW48PW50LmUuYzsrK3VuKXtmb3IodmFyIHFuPTAsem49MCxrbj0wO2tuPEZ0Lmxlbmd0aDsrK2tuKWlmKCEoRnRba25dLnMucj5kdHx8RnRba25dLnMuYz51bnx8RnRba25dLmUucjxkdHx8RnRba25dLmUuYzx1'@;
put 'bikpe2lmKEZ0W2tuXS5zLnI8ZHR8fEZ0W2tuXS5zLmM8dW4pe3FuPS0xO2JyZWFrfXFuPUZ0W2tuXS5lLnItRnRba25dLnMucisxLHpuPUZ0W2tuXS5lLmMtRnRba25dLnMuYysxO2JyZWFrfWlmKCEocW48MCkpe3ZhciBlcj1kaSh7cjpkdCxjOnVufSksdHI9Q3QuZGVuc2U/KEdlW2R0XXx8'@;
put 'W10pW3VuXTpHZVtlcl07dHI/cG49ITE6KHBuPSEwLHRyPXt0OiJ6IixzOnt9fSk7dmFyIFpuPSJ6Ij09dHIudD8iIjp0ci5ofHxybyh0ci53fHwoY3UodHIpLHRyLncpfHwiIik7aWYoWnQ9e3N0eWxlOltdfSxUdD10ci5zKXt2YXIgVnI9MTtpZigoInN1cGVyIj09VHQudmFsaWdufHwic3Vi'@;
put 'Ij09VHQudmFsaWduKSYmKFZyPS44Myxabj1Tcigic3BhbiIsWm4se3N0eWxlOiJ2ZXJ0aWNhbC1hbGlnbjogIitUdC52YWxpZ259KSksWnQuc3R5bGUucHVzaCgiZm9udC13ZWlnaHQ6IisoVHQuYm9sZD83MDA6NDAwKSksVHQuaXRhbGljJiZadC5zdHlsZS5wdXNoKCJmb250LXN0eWxlOiBp'@;
put 'dGFsaWMiKSwoVHQudW5kZXJsaW5lfHxUdC5zdHJpa2UpJiZadC5zdHlsZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IisoVHQudW5kZXJsaW5lPyIgdW5kZXJsaW5lIjoiIikrKFR0LnN0cmlrZT8iIGxpbmUtdGhyb3VnaCI6IiIpKSxUdC5jb2xvciYmVHQuY29sb3IucmdiJiZadC5zdHlsZS5w'@;
put 'dXNoKCJjb2xvcjogIyIrT3UoVHQuY29sb3IucmdiKSksVHQubmFtZSYmWnQuc3R5bGUucHVzaCgiZm9udC1mYW1pbHk6IitUdC5uYW1lKyIsIHNhbnMtc2VyaWYiKSxUdC5zeiYmWnQuc3R5bGUucHVzaCgiZm9udC1zaXplOiIrVHQuc3oqVnIrInB0IiksbnVsbCE9PVR0LnBhdHRlcm5UeXBl'@;
put 'JiZUdC5mZ0NvbG9yJiZUdC5mZ0NvbG9yLnJnYiYmWnQuc3R5bGUucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrT3UoVHQuZmdDb2xvci5yZ2IpKSxbInRvcCIsImxlZnQiXS5mb3JFYWNoKGZ1bmN0aW9uKERpKXtLbihEaSxkdCx1bil9KSxxbj4xfHx6bj4xKXt2YXIgb2k9ZGkoe3I6ZHQr'@;
put 'cW4tMSxjOnVuK3puLTF9KSxraT1DdC5kZW5zZT8oR2VbZHQrcW4tMV18fFtdKVt1bit6bi0xXTpHZVtvaV0sUXI9VHQ7VHQ9a2kmJmtpLnN8fFR0LFsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKERpKXtLbihEaSxkdCx1bil9KSxUdD1Rcn1lbHNlWyJib3R0b20iLCJyaWdo'@;
put 'dCJdLmZvckVhY2goZnVuY3Rpb24oRGkpe0tuKERpLGR0LHVuKX0pO2lmKFR0LmFsaWdubWVudCl7aWYoVHQuYWxpZ25tZW50Lmhvcml6b250YWw/WnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogIisoeVtUdC5hbGlnbm1lbnQuaG9yaXpvbnRhbF18fFR0LmFsaWdubWVudC5ob3Jpem9udGFs'@;
put 'KSk6Im4iPT10ci50JiZadC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpLFR0LmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIHVyPVR0LmFsaWdubWVudC52ZXJ0aWNhbDtadC5zdHlsZS5wdXNoKCJ2ZXJ0aWNhbC1hbGlnbjogIisoImNlbnRlciI9PXVyPyJtaWRkbGUiOnVyKSl9aWYo'@;
put 'VHQuYWxpZ25tZW50LndyYXBUZXh0KVp0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpO2Vsc2V7dmFyIEFuPUN0LmRlbnNlPyhHZVtkdF18fFtdKVt1bisxXTpHZVtkaSh7cjpkdCxjOnVuKzF9KV07QW4mJiJ6IiE9QW4udCYmWnQuc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6'@;
put 'IHByZS13cmFwIil9fWVsc2UibiI9PXRyLnQmJlp0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0Iik7dmFyIHZyPSgoR2VbIiFjb2xzIl18fFtdKVt1bl18fHt9KS53cHg7bnVsbD09dnImJih2cj0oKEdlWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCl9dmFyIHJyPTA7'@;
put 'aWYoem48PTEmJnFuPD0xJiYocnI9KChHZVsiIWNvbHMiXXx8W10pW3VuXXx8e30pLndweCkmJlp0LnN0eWxlLnB1c2goIndpZHRoOiAiK3JyKyJweCIpLEdlWyIhY29uZGZtdCJdJiZwZSh0cixkdCx1bixHZVsiIWNvbmRmbXQiXSxadC5zdHlsZSxHZSksMD09WnQuc3R5bGUubGVuZ3RoP2Rl'@;
put 'bGV0ZSBadC5zdHlsZTpadC5zdHlsZT1adC5zdHlsZS5qb2luKCI7IiksQ3QuY3NzKXt2YXIgU249Y3QuaW5kZXhPZihadC5zdHlsZSk7LTE9PVNuJiYoY3QucHVzaChadC5zdHlsZSksU249Y3QubGVuZ3RoLTEpLGRlbGV0ZSBadC5zdHlsZSxadC5jbGFzcz0ic2pzIisoYnR8fCIiKSsiLSIr'@;
put 'U259cW4+MSYmKFp0LnJvd3NwYW49cW4pLHpuPjEmJihadC5jb2xzcGFuPXpuKSxDdC5lZGl0YWJsZT9abj0nPHNwYW4gY29udGVudGVkaXRhYmxlPSJ0cnVlIj4nK1puKyI8L3NwYW4+Ijp0ciYmKFp0WyJkYXRhLXQiXT10ciYmdHIudHx8InoiLG51bGwhPXRyLnYmJihadFsiZGF0YS12Il09'@;
put 'dHIudiksbnVsbCE9dHIueiYmKFp0WyJkYXRhLXoiXT10ci56KSksWnQuaWQ9KEN0LmlkfHwic2pzIikrIi0iK2VyLEV0LnB1c2goU3IoInRkIixabixadCkpfX12YXIgQ2kscHI9e3N0eWxlOltdfTsoQ2k9R2VbIiFzaGVldEZvcm1hdCJdKSYmQ2kucm93JiYoSTMoQ2kucm93KSxDaS5yb3cu'@;
put 'aHB4JiYocHIuc3R5bGUucHVzaChbImhlaWdodCIsQ2kucm93LmhweCsicHgiXSkscHIuaGVpZ2h0PU1hdGgucm91bmQoQ2kucm93LmhweCkpKTt2YXIganI9R2VbIiFyb3dzIl07aWYoanImJmpyW2R0XSl7dmFyIGppPWpyW2R0XTtqaS5ocHgmJihwci5zdHlsZS5wdXNoKFsiaGVpZ2h0Iiwr'@;
put 'amkuaHB4KyJweCJdKSxwci5oZWlnaHQ9TWF0aC5yb3VuZChqaS5ocHgpKSxqaS5oaWRkZW4mJnByLnN0eWxlLnB1c2goWyJkaXNwbGF5Iiwibm9uZSJdKX12YXIgX289W107cmV0dXJuIHByLnN0eWxlPXByLnN0eWxlLnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24oRGkpe3JldHVybiEoX28u'@;
put 'aW5kZXhPZihEaVswXSk+LTF8fChfby5wdXNoKERpWzBdKSwwKSl9KS5tYXAoZnVuY3Rpb24oRGkpe3JldHVybiBEaVswXSsiOiIrRGlbMV19KSwwPT1wci5zdHlsZS5sZW5ndGg/ZGVsZXRlIHByLnN0eWxlOnByLnN0eWxlPXByLnN0eWxlLmpvaW4oIjsiKSxTcigidHIiLEV0LmpvaW4oIiIp'@;
put 'LHByKX1mdW5jdGlvbiBwZShHZSxudCxkdCxDdCxjdCxidCl7Q3QuZm9yRWFjaChmdW5jdGlvbihGdCl7aWYoRnQuX3JlZnx8KEZ0Ll9yZWY9InN0cmluZyI9PXR5cGVvZiBGdC5yZWY/V3MoRnQucmVmKTpGdC5yZWYpLCEoRnQuX3JlZi5zLmM+ZHR8fEZ0Ll9yZWYuZS5jPGR0fHxGdC5fcmVm'@;
put 'LnMucj5udHx8RnQuX3JlZi5lLnI8bnR8fCJzY2FsZSIhPT1GdC50KSl7aWYoIm4iIT1HZS50KXJldHVybjt2YXIgRXQ7aWYobnVsbD09RnQuX21pbil7RnQuX3ZhbHVlcz1bXTtmb3IodmFyIFR0PUZ0Ll9yZWYucy5yO1R0PD1GdC5fcmVmLmUucjsrK1R0KWZvcih2YXIgWnQ9RnQuX3JlZi5z'@;
put 'LmM7WnQ8PUZ0Ll9yZWYuZS5jOysrWnQpe3ZhciBwbj1BcnJheS5pc0FycmF5KGJ0KT8oYnRbVHRdfHxbXSlbWnRdOmJ0W2RpKHtyOlR0LGM6WnR9KV07cG4mJiJuIj09cG4udCYmRnQuX3ZhbHVlcy5wdXNoKHBuLnYpfWlmKEZ0Ll92YWx1ZXMuc29ydChmdW5jdGlvbihLbix1bil7cmV0dXJu'@;
put 'IEtuLXVufSksRnQuX21pbj1GdC5fdmFsdWVzWzBdLEZ0Ll9tYXg9RnQuX3ZhbHVlcy5zbGljZSgtMSlbMF0sRnQuX2JhbmQ9RnQuX21heC1GdC5fbWluLEZ0LmNtaWQpe3N3aXRjaChGdC5jbWlkLnQpe2Nhc2UibnVtIjpGdC5fbWlkPUZ0LmNtaWQudjticmVhaztjYXNlInBlcmNlbnQiOkZ0'@;
put 'Ll9taWQ9RnQuY21pZC52LzEwMCpGdC5fYmFuZCtGdC5fbWluO2JyZWFrO2Nhc2UicGVyY2VudGlsZSI6RnQuX21pZD1mdW5jdGlvbiBmbih5LFApe2lmKDA9PVApcmV0dXJuIHlbMF07aWYoMTAwPT1QKXJldHVybiB5W3kubGVuZ3RoLTFdO3ZhciBRPVAvMTAwKih5Lmxlbmd0aC0xKSxyZT1R'@;
put 'LU1hdGguZmxvb3IoUSk7cmV0dXJuIHJlKnlbTWF0aC5jZWlsKFEpXSsoMS1yZSkqeVtNYXRoLmZsb29yKFEpXX0oRnQuX3ZhbHVlcyxGdC5jbWlkLnYpfUZ0Ll9iYW5kaD1GdC5fbWF4LUZ0Ll9taWQsRnQuX2JhbmRsPUZ0Ll9taWQtRnQuX21pbn19KEV0PUZ0LmNtaWQ/R2Uudj49RnQuX21p'@;
put 'ZD9SOShGdC5jbWlkLmNvbG9yLEZ0LmNtYXguY29sb3IsKEdlLnYtRnQuX21pZCkvRnQuX2JhbmRoKTpSOShGdC5jbWluLmNvbG9yLEZ0LmNtaWQuY29sb3IsKEdlLnYtRnQuX21pbikvRnQuX2JhbmRsKTpSOShGdC5jbWluLmNvbG9yLEZ0LmNtYXguY29sb3IsKEdlLnYtRnQuX21pbikvRnQu'@;
put 'X2JhbmQpKSYmY3QucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrRXQpfX0pfWZ1bmN0aW9uIF9lKEdlLG50KXt2YXIgZHQ9e3NwYW46bnR8fDEsc3R5bGU6IiJ9LEN0PVtdO3JldHVybiBHZSYmR2Uud3B4JiYoZHQud2lkdGg9TWF0aC5yb3VuZCg0KkdlLndweC8zKSxDdC5wdXNoKCJ3aWR0'@;
put 'aDoiKyhHZS53cHh8fDApKyJweCIpKSxDdC5sZW5ndGg+MCYmKGR0LnN0eWxlPUN0LmpvaW4oIjsiKSksU3IoImNvbCIsbnVsbCxkdCl9ZnVuY3Rpb24gdmUoR2UsbnQsZHQpe3ZhciBDdD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2luZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxh'@;
put 'cHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVkIl0uam9pbigiOyIpfTtkdCYmZHQuaWQmJihDdC5pZD1kdC5pZCk7dmFyIGN0PUdlWyIhY29scyJdLGJ0PUdlWyIhc2hlZXRGb3JtYXQiXTtpZihHZSYmY3Qpe2Zvcih2YXIgRnQ9MCxUdD1udC5zLmM7VHQ8PW50LmUuYzsrK1R0KXt2'@;
put 'YXIgWnQ9Y3RbVHRdO0Z0Kz1adCYmWnQud3B4P1p0LndweDpidCYmYnQuY29sJiZidC5jb2wud3B4P2J0LmNvbC53cHg6NTN9Q3Quc3R5bGUrPSI7d2lkdGg6IitGdCsicHgifXZhciBLbixwbj1bIjx0YWJsZSIrUGEoQ3QpKyI+Il07aWYocG4ucHVzaCgiPHN0eWxlPnRkIHsgcGFkZGluZy10'@;
put 'b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRpbmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IisoZHQmJmR0LmdyaWRjb2xvcj9kdC5ncmlkY29sb3I6aG4oR2VbIiFncmlk'@;
put 'bGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxwbi5wdXNoKCc8Y29sZ3JvdXAgc3Bhbj0iJysobnQuZS5jLW50LnMuYysxKSsnIj4nKSxjdCl7Zm9yKHZhciB1bj1udC5zLmM7dW48'@;
put 'TWF0aC5taW4oY3QubGVuZ3RoLG50LmUuYysxKTsrK3VuKSEoS249Y3RbdW5dKSYmYnQmJmJ0LmNvbCYmKEtuPWJ0LmNvbCksS258fChLbj17d3B4OjUzfSkscG4ucHVzaChfZShLbiwxKSk7bnQuZS5jLW50LnMuYysxPmN0Lmxlbmd0aCYmKEtuPW51bGwsYnQmJmJ0LmNvbCYmKEtuPWJ0LmNv'@;
put 'bCksS258fChLbj17d3B4OjUzfSkscG4ucHVzaChfZShLbixudC5lLmMtbnQucy5jKzEtY3QubGVuZ3RoKSkpfWVsc2UgS249bnVsbCxidCYmYnQuY29sJiYoS249YnQuY29sKSxLbnx8KEtuPXt3cHg6NTN9KSxwbi5wdXNoKF9lKEtuLG50LmUuYy1udC5zLmMrMSkpO3JldHVybiBwbi5wdXNo'@;
put 'KCI8L2NvbGdyb3VwPiIpLHBuLmpvaW4oIiIpfXZhciBTZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nLEhlPSI8L2JvZHk+PC9odG1sPiI7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0'@;
put 'aW9uIFEoR2UsbnQpe3JldHVybiBFZChMKEdlLG50KSxudCl9LHRvX3NoZWV0OkwsX3JvdzpyZSxCRUdJTjpTZSxFTkQ6SGUsX3ByZWFtYmxlOnZlLGh0bWxfdG9fcnM6ZnVuY3Rpb24gUChHZSl7dmFyIG50PVtdLGR0PXt9LEN0PTA7cmV0dXJuIEdlLnJlcGxhY2UoLzwoXC8/KShbXlxzPz4h'@;
put 'XC86XSo6fCkoW15ccz8+OlwvXSspW14+XSo+L2dtLGZ1bmN0aW9uKGN0LGJ0LEZ0LEV0LFR0KXt2YXIgcG49am4obG4oY3QpWzBdKS5yZXBsYWNlKC9bPFwvPl0vZywiIiksS249R2Uuc2xpY2UoQ3QsVHQpLnJlcGxhY2UoL1xzL2csIiAiKTtzd2l0Y2goS24ubGVuZ3RoPjAmJihudC5wdXNo'@;
put 'KHt0OiJzIix2OktuLHM6ZHR9KSxkdD1vbihkdCkpLHBuLnRvTG93ZXJDYXNlKCkpe2Nhc2UiYiI6Ii8iIT1idD9kdC5ib2xkPSEwOmRlbGV0ZSBkdC5ib2xkO2JyZWFrO2Nhc2UiaSI6Ii8iIT1idD9kdC5pdGFsaWM9ITA6ZGVsZXRlIGR0Lml0YWxpYzticmVhaztjYXNlInUiOiIvIiE9YnQ/'@;
put 'ZHQudW5kZXJsaW5lPTE6ZGVsZXRlIGR0LnVuZGVybGluZTticmVhaztjYXNlInMiOiIvIiE9YnQ/ZHQuc3RyaWtlPSEwOmRlbGV0ZSBkdC5zdHJpa2V9cmV0dXJuIEN0PVR0K2N0Lmxlbmd0aCxjdH0pLG50fSxmcm9tX3NoZWV0OmZ1bmN0aW9uIEJlKEdlLG50KXt2YXIgZHQ9bnR8fHt9LGN0'@;
put 'PW51bGwhPWR0LmZvb3Rlcj9kdC5mb290ZXI6SGUsYnQ9W251bGwhPWR0LmhlYWRlcj9kdC5oZWFkZXI6U2UsIiJdLEZ0PVtdLEV0PShuZXcgRGF0ZSkudmFsdWVPZigpO0dlfHwoR2U9e30pLEdlWyIhcmVmIl18fChHZVsiIXJlZiJdPSJBMTpBMSIpO3ZhciBUdD1XcyhHZVsiIXJlZiJdKTtp'@;
put 'ZihkdC5kZW5zZT1BcnJheS5pc0FycmF5KEdlKSxkdC5za2lwZW5kKXt2YXIgWnQ9VHQuZS5yO2U6Zm9yKDtadD49VHQucy5yOy0tWnQpZm9yKHZhciBwbj1UdC5lLmM7cG4+PVR0LnMuYzstLXBuKWlmKG51bGwhPSgoZHQuZGVuc2U/KEdlW1p0XXx8W10pW3BuXTpHZVtkaSh7cjpadCxjOnBu'@;
put 'fSldKXx8e30pLnYpYnJlYWsgZTtUdC5lLnI9WnQ7dmFyIEtuPVR0LmUuYztlOmZvcig7S24+PVR0LnMuYzstLUtuKWZvcih2YXIgdW49VHQuZS5yO3VuPj1UdC5zLnI7LS11bilpZihudWxsIT0oKGR0LmRlbnNlPyhHZVt1bl18fFtdKVtLbl06R2VbZGkoe3I6dW4sYzpLbn0pXSl8fHt9KS52'@;
put 'KWJyZWFrIGU7VHQuZS5jPUtufWJ0LnB1c2godmUoR2UsVHQsZHQpKTtmb3IodmFyIHFuPVR0LnMucjtxbjw9VHQuZS5yOysrcW4pYnQucHVzaChyZShHZSxUdCxxbixkdCxGdCxFdCkpO3JldHVybiBidC5wdXNoKCI8L3RhYmxlPiIrY3QpLGR0LmNzcyYmKGJ0WzFdPSI8c3R5bGU+XG4iK0Z0'@;
put 'Lm1hcChmdW5jdGlvbih6bixrbil7cmV0dXJuIi5zanMiK0V0KyItIitrbisiIHsiK3puKyJ9In0pLmpvaW4oIlxuIikrIjwvc3R5bGU+IiksYnQuam9pbigiIil9fX0oKTtmdW5jdGlvbiB2Zih5LFAsTCl7dmFyIFE9e307aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU+InUiKXJldHVybiBR'@;
put 'O3ZhciByZT1nZXRDb21wdXRlZFN0eWxlKHkpO2lmKCg3MDA9PXJlWyJmb250LXdlaWdodCJdfHwiYm9sZCI9PXJlWyJmb250LXdlaWdodCJdKSYmKFEuYm9sZD0hMCksKHJlWyJmb250LXN0eWxlIl18fCIiKS5tYXRjaCgvaXRhbGljLykmJihRLml0YWxpYz0hMCksKHJlWyJ0ZXh0LWRlY29y'@;
put 'YXRpb24iXXx8IiIpLm1hdGNoKC91bmRlcmxpbmUvKSYmKFEudW5kZXJsaW5lPTEpLChyZVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvbGluZS10aHJvdWdoLykmJihRLnN0cmlrZT0xKSxwYXJzZUludChyZVsiZm9udC1zaXplIl0pJiYoUS5zej1wYXJzZUZsb2F0KHJlWyJmb250'@;
put 'LXNpemUiXSkqKHJlWyJmb250LXNpemUiXS5tYXRjaCgvcHgvKT8zLzQ6MSkpLHJlWyJmb250LWZhbWlseSJdJiYoUS5uYW1lPXJlWyJmb250LWZhbWlseSJdLnNwbGl0KCIsIilbMF0ucmVwbGFjZSgvXHMqIlxzKi9nLCIiKSkscmUuY29sb3Ipe3ZhciBwZT1ONChyZS5jb2xvci50b0xvd2Vy'@;
put 'Q2FzZSgpLCEwKTtwZT49MCYmKFEuY29sb3I9e3JnYjpwZX0pfXN3aXRjaChyZVsidGV4dC10cmFuc2Zvcm0iXSYmKFEudGV4dF90cmFuc2Zvcm09cmVbInRleHQtdHJhbnNmb3JtIl0udG9Mb3dlckNhc2UoKSksIm5vbmUiIT0ocmVbInRleHQtc2hhZG93Il18fCJub25lIikmJihRLnNoYWRv'@;
put 'dz0hMCkscmVbInRleHQtYWxpZ24iXSl7Y2FzZSJjZW50ZXIiOlEuYWxpZ25tZW50PXtob3Jpem9udGFsOiJjZW50ZXIifTticmVhaztjYXNlInJpZ2h0IjpRLmFsaWdubWVudD17aG9yaXpvbnRhbDoicmlnaHQifTticmVhaztjYXNlImxlZnQiOlEuYWxpZ25tZW50PXtob3Jpem9udGFsOiJs'@;
put 'ZWZ0In07YnJlYWs7Y2FzZSJqdXN0aWZ5IjpRLmFsaWdubWVudD17aG9yaXpvbnRhbDoianVzdGlmeSJ9fXN3aXRjaChyZVsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJ0b3AiOmNhc2UibWlkZGxlIjpjYXNlImJvdHRvbSI6US5hbGlnbm1lbnR8fChRLmFsaWdubWVudD17fSksUS5hbGlnbm1l'@;
put 'bnQudmVydGljYWw9cmVbInZlcnRpY2FsLWFsaWduIl0sIm1pZGRsZSI9PVEuYWxpZ25tZW50LnZlcnRpY2FsJiYoUS5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjpRLnZhbGlnbj1yZVsidmVydGljYWwtYWxpZ24iXSxRLnN6JiYoUS5z'@;
put 'ei89LjgzKX12YXIgX2U9UCYmZ2V0Q29tcHV0ZWRTdHlsZShQKTtyZXR1cm4gX2UmJkwmJlAmJlsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPXZlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3ZlLnNsaWNlKDEpLEhlPV9lWyJib3Jk'@;
put 'ZXItIit2ZSsiLXN0eWxlIl07aWYoKCJub25lIj09SGV8fCFIZSkmJihIZT1fZVsiYm9yZGVyIitTZSsiU3R5bGUiXSksIm5vbmUiIT1IZSYmSGUpe3ZhciBCZT1wYXJzZUludChfZVsiYm9yZGVyLSIrdmUrIi13aWR0aCJdfHxfZVsiYm9yZGVyIitTZSsiV2lkdGgiXSwxMCksR2U9InRoaW4i'@;
put 'O2lmKEJlPjApe3N3aXRjaChIZSl7Y2FzZSJkb3VibGUiOkdlPSJkb3VibGUiO2JyZWFrO2Nhc2UiZGFzaGVkIjpHZT1CZT49Mj8ibWVkaXVtRGFzaGVkIjoiZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6R2U9QmU+PTI/Im1lZGl1bURhc2hEb3REb3QiOiJkb3R0ZWQiO2JyZWFrO2Nhc2Ui'@;
put 'c29saWQiOkdlPUJlPj0zPyJ0aGljayI6QmU+PTI/Im1lZGl1bSI6InRoaW4ifWlmKFFbdmVdPXtzdHlsZTpHZX0sX2VbImJvcmRlci0iK3ZlKyItY29sb3IiXXx8X2VbImJvcmRlciIrU2UrIkNvbG9yIl0pe3ZhciBudD1ONCgoX2VbImJvcmRlci0iK3ZlKyItY29sb3IiXXx8X2VbImJvcmRl'@;
put 'ciIrU2UrIkNvbG9yIl0pLnRvTG93ZXJDYXNlKCksITApO250Pj0wJiYoUVt2ZV0uY29sb3I9e3JnYjpudH0pfX19fSksUX1mdW5jdGlvbiBvXyh5LFAsTCl7dmFyIFE9eS5jaGlsZE5vZGVzO2lmKDE9PXkubm9kZVR5cGUpc3dpdGNoKHkudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlInAi'@;
put 'OlAubGVuZ3RoPjAmJlAucHVzaCh7dDoidCIsdjoiXG4iLHM6TH0pO2JyZWFrO2Nhc2Uic2VsZWN0IjpyZXR1cm4gZnVuY3Rpb24gYVIoeSxQLEwpe1AucHVzaCh7dDoidCIsdjp5LmNoaWxkcmVuW3kuc2VsZWN0ZWRJbmRleF0uaW5uZXJUZXh0LHM6TH0pfSh5LFAsTCl9aWYoUS5sZW5ndGg+'@;
put 'MCl7dmFyIHJlPXZmKHksbnVsbCwhMSk7TCYmKEwudW5kZXJsaW5lJiYocmUudW5kZXJsaW5lPUwudW5kZXJsaW5lKSxMLnN0cmlrZSYmKHJlLnN0cmlrZT1MLnN0cmlrZSkpO2Zvcih2YXIgcGU9MDtwZTxRLmxlbmd0aDsrK3BlKXt0cnl7aWYoUVtwZV0uZ2V0QXR0cmlidXRlKCJhcmlhLWhp'@;
put 'ZGRlbiIpKWNvbnRpbnVlfWNhdGNoe31vXyhRW3BlXSxQLHJlKX1kZWxldGUgcmUudGV4dF90cmFuc2Zvcm19ZWxzZSBpZigzPT15Lm5vZGVUeXBlKXt2YXIgX2U9e3Q6InQiLHY6eS5ub2RlVmFsdWUucmVwbGFjZSgvXltcbiBdKy8sIiAiKS5yZXBsYWNlKC9bXG4gXSskLywiICIpLHM6TH07'@;
put 'c3dpdGNoKEwudGV4dF90cmFuc2Zvcm0pe2Nhc2UidXBwZXJjYXNlIjpfZS52PV9lLnYudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6X2Uudj1fZS52LnRvTG93ZXJDYXNlKCl9KFAubGVuZ3RoPjB8fF9lLnYmJiIgIiE9X2UudikmJlAucHVzaChfZSl9ZWxzZSAxPT15Lm5v'@;
put 'ZGVUeXBlJiYiYnIiPT09eS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlAucHVzaCh7dDoidCIsdjoiXG4iLHM6TH0pfWZ1bmN0aW9uIHNfKHksUCxMLFEscmUpe3ZhciBfZSxwZT15LmlubmVySFRNTDtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSIpc3dpdGNoKF9lPWdldENvbXB1dGVk'@;
put 'U3R5bGUoeSksKF9lWyJ3aGl0ZS1zcGFjZSJdfHwiIikubWF0Y2goL3ByZS8pJiYocGU9cGUucmVwbGFjZSgvXG4vZywiPGJyLz4iKSksKF9lWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnBlPXBlLnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2Fz'@;
put 'ZSJsb3dlcmNhc2UiOnBlPXBlLnRvTG93ZXJDYXNlKCl9dmFyIHZlPWZ1bmN0aW9uIHNSKHksUCxMLFEpe3ZhciByZT17dDoicyIsdjpQfSxwZT0iIjtpZih5KXtMPXkuZ2V0QXR0cmlidXRlKCJkYXRhLXQiKXx8eS5nZXRBdHRyaWJ1dGUoInQiKTt2YXIgX2U9eS5nZXRBdHRyaWJ1dGUoImRh'@;
put 'dGEtdiIpfHx5LmdldEF0dHJpYnV0ZSgidiIpO2lmKG51bGwhPShwZT15LmdldEF0dHJpYnV0ZSgiZGF0YS16Iil8fHkuZ2V0QXR0cmlidXRlKCJ6IikpJiYocmUuej1wZSksbnVsbCE9TCYmbnVsbCE9X2UpcmV0dXJuIHJlLnQ9TCxyZS52PV9lLHJlfXJldHVybiBudWxsIT1QJiYoMD09UC5s'@;
put 'ZW5ndGg/cmUudD1MfHwieiI6US5yYXd8fCFQLnRyaW0oKS5sZW5ndGh8fCJzIj09THx8KHJlPSRuKFAsUSkpKSxwZSYmKHJlLno9cGUpLHJlfSh5LFJjKHBlKSxMLHJlKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJih2ZS5zPXZmKHksUCxyZS5ib3JkZXJzKSxkZWxldGUgdmUu'@;
put 'cy50ZXh0X3RyYW5zZm9ybSx5LmNoaWxkTm9kZXMubGVuZ3RoPjF8fDE9PXkuY2hpbGROb2Rlcy5sZW5ndGgmJjMhPXkuY2hpbGROb2Rlc1swXS5ub2RlVHlwZSkpc3dpdGNoKG9fKHksdmUuUj1bXSxudWxsKSx2ZS5SJiZ2ZS5SW3ZlLlIubGVuZ3RoLTFdJiYiXG4iPT12ZS5SW3ZlLlIubGVu'@;
put 'Z3RoLTFdLnYmJnZlLlIubGVuZ3RoLS0sKF9lWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnZlLlIuZm9yRWFjaChmdW5jdGlvbihudCl7bnQudj1udC52LnRvVXBwZXJDYXNlKCl9KTticmVhaztjYXNlImxvd2VyY2FzZSI6dmUuUi5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKG50KXtudC52PW50LnYudG9Mb3dlckNhc2UoKX0pfWlmKCJzIj09dmUudCl7dmFyIFNlPXZlLnYubWF0Y2goL1xuLyk7IVNlJiZ2ZS5SJiZ2ZS5SLmZvckVhY2goZnVuY3Rpb24obnQpeyJzdHJpbmciPT10eXBlb2YgbnQudiYmbnQudi5tYXRjaCgvXG4vKSYmKFNlPSEw'@;
put 'KX0pLCJzIj09dmUudCYmU2UmJih2ZS5zfHwodmUucz17fSksdmUucy5hbGlnbm1lbnR8fCh2ZS5zLmFsaWdubWVudD17fSksdmUucy5hbGlnbm1lbnQud3JhcFRleHQ9ITApfWlmKFApe3ZhciBIZT0iIixCZT1QLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBIik7aWYoQmUmJkJlLmxlbmd0aClm'@;
put 'b3IodmFyIEdlPTA7R2U8QmUubGVuZ3RoJiYoIUJlW0dlXS5oYXNBdHRyaWJ1dGUoImhyZWYiKXx8IiMiPT0oSGU9QmVbR2VdLmdldEF0dHJpYnV0ZSgiaHJlZiIpKS5jaGFyQXQoMCkpOysrR2UpO0hlJiYiIyIhPUhlLmNoYXJBdCgwKSYmKHZlLmw9e1RhcmdldDpIZX0pfXJldHVybiB2ZX1m'@;
put 'dW5jdGlvbiBBTSh5LFAsTCl7dmFyIHJlLFE9UC5yb3dzO2lmKCFRKXtpZihMJiZudWxsIT1MLm9yaWdpbil0aHJvdyJVbnN1cHBvcnRlZCBvcmlnaW4gd2hlbiAiK1AudGFnTmFtZSsiIGlzIG5vdCBhIFRBQkxFIjtyZXR1cm4gZnVuY3Rpb24ga00oeSxQLEwpe0w9SlNPTi5wYXJzZShKU09O'@;
put 'LnN0cmluZ2lmeShMfHx7fSkpO3ZhciBwZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3lbIiFtZXJnZXMiXXx8KHlbIiFtZXJnZXMiXT1bXSk7Zm9yKHZhciB2ZSxfZT1QLmNoaWxkcmVuLFNlPTAsSGU9MDtIZTxfZS5sZW5ndGg7KytIZSl7dmFyIG50LEJlPV9lW0hlXSxHZT0iIjt0cnl7'@;
put 'dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiP250PWdldENvbXB1dGVkU3R5bGU6QmUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIEJlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKG50PUJlLm93bmVyRG9jdW1lbnQu'@;
put 'ZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fWlmKCFudHx8Im5vbmUiIT1udChCZSkuZGlzcGxheSlzd2l0Y2goQmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIlRBQkxFIjpTZT0tMSx5WyIhcmVmIl0mJihMLm9yaWdpbj0tMSksQU0oeSxCZSxMKTticmVhaztjYXNl'@;
put 'IkJSIjpjYXNlIkhSIjpTZT0tMSx5WyIhcmVmIl0/KCsrKHBlPVdzKHlbIiFyZWYiXSkpLmUucix5WyIhcmVmIl09T28ocGUpKTp5WyIhcmVmIl09IkExOkExIjticmVhaztjYXNlIkRJViI6Y2FzZSJQIjpjYXNlIkgxIjpjYXNlIkgyIjpjYXNlIkgzIjpjYXNlIkg0IjpjYXNlIkg1IjpjYXNl'@;
put 'Ikg2IjpTZT0tMSx2ZT1zXyhCZSxudWxsLCIiLDAsTCkseVsiIXJlZiJdPyhMLm9yaWdpbj0tMSxzMCh5LFtbdmVdXSxMKSk6KHlbIiFyZWYiXT0iQTEiLEFycmF5LmlzQXJyYXkoeSk/KHlbMF18fCh5WzBdPVtdKSx5WzBdWzBdPXZlKTp5LkExPXZlKSx5WyIhcm93cyJdfHwoeVsiIXJvd3Mi'@;
put 'XT1bXSksbnQmJihwZT1Xcyh5WyIhcmVmIl0pLChHZT1udChCZSkuaGVpZ2h0KSYmImF1dG8iIT1HZSYmKHlbIiFyb3dzIl1bcGUuZS5yXT17aHB0OnBhcnNlSW50KEdlLDEwKX0pKTticmVhaztjYXNlIlNQQU4iOmNhc2UiQSI6Y2FzZSJCIjpjYXNlIkVNIjpjYXNlIkkiOmNhc2UiRk9OVCI6'@;
put 'Y2FzZSJTIjpjYXNlIlNVQiI6Y2FzZSJTVVAiOmNhc2UiVSI6dmU9c18oQmUsbnVsbCwiIiwwLEwpLHlbIiFyZWYiXXx8KHlbIiFyZWYiXT0iQTE6QTEiKSxzMCh5LFtbdmVdXSx7b3JpZ2luOmRpKHtyOihTZTwwPzE6MCkrKHBlPVdzKHlbIiFyZWYiXSkpLmUucixjOisrU2V9KX0pO2JyZWFr'@;
put 'O2Nhc2UiREwiOmNhc2UiVUwiOmNhc2UiT0wiOlNlPS0xLGNvbnNvbGUuZXJyb3IoIkhUTUwgQ29udmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGxpc3QgZWxlbWVudCAiK0JlLnRhZ05hbWUudG9VcHBlckNhc2UoKSk7YnJlYWs7ZGVmYXVsdDpTZT0tMSxjb25zb2xlLmVycm9yKCJTa2lwcGlu'@;
put 'ZyAiK0JlLnRhZ05hbWUudG9VcHBlckNhc2UoKSl9fXJldHVybiB5fSh5LFAsTCl9dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9yZT1nZXRDb21wdXRlZFN0eWxlOlAub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIFAub3duZXJEb2N1bWVudC5k'@;
put 'ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYocmU9UC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe312YXIgcGU9THx8e307bnVsbCE9dGUmJihwZS5kZW5zZT10ZSk7dmFyIF9lPTAsdmU9MDtpZihudWxsIT1wZS5vcmlnaW4paWYoIm51bWJl'@;
put 'ciI9PXR5cGVvZiBwZS5vcmlnaW4pX2U9cGUub3JpZ2luO2Vsc2V7dmFyIFNlPSJzdHJpbmciPT10eXBlb2YgcGUub3JpZ2luP3NzKHBlLm9yaWdpbik6cGUub3JpZ2luO19lPVNlLnIsdmU9U2UuY312YXIgSGU9TWF0aC5taW4ocGUuc2hlZXRSb3dzfHwxZTcsUS5sZW5ndGgpLEJlPXtzOnty'@;
put 'OjAsYzowfSxlOntyOl9lLGM6dmV9fTtpZih5WyIhcmVmIl0pe3ZhciBHZT1Xcyh5WyIhcmVmIl0pO0JlLnMucj1NYXRoLm1pbihCZS5zLnIsR2Uucy5yKSxCZS5zLmM9TWF0aC5taW4oQmUucy5jLEdlLnMuYyksQmUuZS5yPU1hdGgubWF4KEJlLmUucixHZS5lLnIpLEJlLmUuYz1NYXRoLm1h'@;
put 'eChCZS5lLmMsR2UuZS5jKSwtMT09X2UmJihCZS5lLnI9X2U9R2UuZS5yKzEpfXZhciBudD1bXSxkdD0wLEN0PXlbIiFyb3dzIl18fCh5WyIhcm93cyJdPVtdKSxjdD0wLGJ0PTAsRnQ9MCxFdD0wLFR0PTAsWnQ9MDtmb3IoeVsiIWNvbHMiXXx8KHlbIiFjb2xzIl09W10pO2N0PFEubGVuZ3Ro'@;
put 'JiZidDxIZTsrK2N0KXtmb3IodmFyIHBuPVFbY3RdLEtuPXBuLnBhcmVudEVsZW1lbnQ7IlRBQkxFIiE9S24udGFnTmFtZS50b1VwcGVyQ2FzZSgpOylLbj1Lbi5wYXJlbnRFbGVtZW50O2lmKEtuPT1QKXtlOmlmKHR5cGVvZiByZTwidSIpe3ZhciB1bj1yZShwbik7aWYobnVsbD09dW4pYnJl'@;
put 'YWsgZTtpZih1bi5zdHlsZXx8KHVuLnN0eWxlPXt9KSxwZS5kaXNwbGF5JiYibm9uZSI9PSh1bi5kaXNwbGF5fHx1bi5zdHlsZS5kaXNwbGF5KSljb250aW51ZTsibm9uZSI9PSh1bi5kaXNwbGF5fHx1bi5zdHlsZS5kaXNwbGF5KSYmKChDdFtidF18fChDdFtidF09e30pKS5oaWRkZW49ITAp'@;
put 'fXZhciBxbj1wbi5jZWxscztmb3IoRnQ9RXQ9MDtGdDxxbi5sZW5ndGg7KytGdCl7dmFyIHpuPXFuW0Z0XSxrbj1udWxsO2lmKCEodHlwZW9mIHJlPCJ1IiYmKG51bGw9PWtuJiYoa249cmUoem4pKSxrbi5zdHlsZXx8KGtuLnN0eWxlPXt9KSxwZS5kaXNwbGF5JiZudWxsIT1rbiYmIm5vbmUi'@;
put 'PT0oa24uZGlzcGxheXx8a24uc3R5bGUuZGlzcGxheSkpKSl7Zm9yKFp0PSt6bi5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKXx8MSxkdD0wO2R0PG50Lmxlbmd0aDsrK2R0KXt2YXIgZXI9bnRbZHRdO2VyLnMuYz09RXQrdmUmJmVyLnMucjxidCtfZSYmYnQrX2U8PWVyLmUuciYmKEV0PWVyLmUu'@;
put 'YysxLXZlLGR0PS0xKX0oKFR0PSt6bi5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKXx8MSk+MXx8WnQ+MSkmJm50LnB1c2goe3M6e3I6YnQrX2UsYzpFdCt2ZX0sZTp7cjpidCtfZSsoVHR8fDEpLTEsYzpFdCt2ZSsoWnR8fDEpLTF9fSk7dmFyIHRyPXpuLmdldEF0dHJpYnV0ZSgidCIpfHwiIixa'@;
put 'bj16bi5nZXRBdHRyaWJ1dGUoImJnY29sb3IiKTtlOmlmKHR5cGVvZiByZTwidSIpe2lmKG51bGw9PWtuJiYoa249cmUoem4pKSxudWxsPT1rbilicmVhayBlO2lmKGtuLnN0eWxlfHwoa24uc3R5bGU9e30pLDE9PVp0JiZrbi53aWR0aCYmKHlbIiFjb2xzIl1bRXQrdmVdPXlbIiFjb2xzIl1b'@;
put 'RXQrdmVdfHx7fSxrbi53aWR0aC5tYXRjaCgvcHgvKT95WyIhY29scyJdW0V0K3ZlXS53cHg9TWF0aC5tYXgocGFyc2VJbnQoa24ud2lkdGgsMTApKzUseVsiIWNvbHMiXVtFdCt2ZV0ud3B4fHwwKTprbi53aWR0aC5tYXRjaCgvcHQvKSYmKHlbIiFjb2xzIl1bRXQrdmVdLndweD1NYXRoLm1h'@;
put 'eCg0KnBhcnNlSW50KGtuLndpZHRoLDEwKS8zKzUseVsiIWNvbHMiXVtFdCt2ZV0ud3B4fHwwKSkpLFR0PD0xKXtDdFtidCtfZV18fChDdFtidCtfZV09e30pO3ZhciBWcj1rbi5oZWlnaHQ7KFZyPVZyLm1hdGNoKC9wdC8pP1UxKHBhcnNlSW50KFZyLDEwKSk6cGFyc2VJbnQoVnIsMTApKT4o'@;
put 'Q3RbYnQrX2VdLmhweHx8VTEoQ3RbYnQrX2VdLmhwdCl8fDApJiYoZGVsZXRlIEN0W2J0K19lXS5ocHQsQ3RbYnQrX2VdLmhweD1Wcil9fXZhciBvaT16bjtpZih6bi5maXJzdEVsZW1lbnRDaGlsZCYmMT09em4uY2hpbGRyZW4ubGVuZ3RoJiYic3BhbiI9PXpuLmZpcnN0RWxlbWVudENoaWxk'@;
put 'Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Zvcih2YXIga2k9MCxMaT16bi5jaGlsZE5vZGVzLFFyPTA7UXI8TGkubGVuZ3RoOysrUXIpMz09TGlbUXJdLm5vZGVUeXBlJiYrK2tpOzA9PWtpJiYoem49em4uZmlyc3RFbGVtZW50Q2hpbGQpfXZhciB1cj1zXyh6bixvaSx0ciwwLHBlKTtpZihr'@;
put 'bil7dmFyIEFuPXJlKHpuKTtpZihBbiYmIUFuLnN0eWxlJiYoQW4uc3R5bGU9e30pLChBbiYmQW5bImJhY2tncm91bmQtY29sb3IiXXx8a25bImJhY2tncm91bmQtY29sb3IiXSkmJih1ci5zfHwodXIucz17fSksIXVyLnMuZmdDb2xvcikpdHJ5e3ZhciB2cj1BbiYmQW5bImJhY2tncm91bmQt'@;
put 'Y29sb3IiXXx8a25bImJhY2tncm91bmQtY29sb3IiXTt2ci5tYXRjaCgvcmdiYVsoXVxzKjAuKlspXS9pKSYmKHZyPWtuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pO3ZhciBycj1ONCh2ci50b0xvd2VyQ2FzZSgpLCEwKTtycj49MCYmKHVyLnMuZmdDb2xvcj17cmdiOnJyfSl9Y2F0Y2h7fXN3aXRj'@;
put 'aChrblsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJtaWRkbGUiOmNhc2UiYmFzZWxpbmUiOnVyLnN8fCh1ci5zPXt9KSx1ci5zLmFsaWdubWVudHx8KHVyLnMuYWxpZ25tZW50PXt9KSx1ci5zLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIn19aWYoWm4mJih1ci5zfHwodXIucz17fSksIXVy'@;
put 'LnMuZmdDb2xvcikpdHJ5e3ZhciBTbj1ONChabi50b0xvd2VyQ2FzZSgpLCEwKTtTbj49MCYmKHVyLnMuZmdDb2xvcj17cmdiOlNufSl9Y2F0Y2h7fWlmKHBlLmRlbnNlPyh5W2J0K19lXXx8KHlbYnQrX2VdPVtdKSx5W2J0K19lXVtFdCt2ZV09dXIpOnlbZGkoe2M6RXQrdmUscjpidCtfZX0p'@;
put 'XT11cixUdD4xfHxadD4xKWZvcih2YXIgcHI9YnQ7cHI8YnQrVHQ7Kytwcilmb3IodmFyIENpPUV0O0NpPEV0K1p0OysrQ2kpYnQ9PXByJiZFdD09Q2l8fChwZS5kZW5zZT8oeVtwcitfZV18fCh5W3ByK19lXT1bXSkseVtwcitfZV1bQ2krdmVdPXt0OiJ6IixzOm9uKHVyLnN8fHt9KX0pOnlb'@;
put 'ZGkoe2M6Q2krdmUscjpwcitfZX0pXT17dDoieiIsczpvbih1ci5zfHx7fSl9KTtCZS5lLmM8RXQrdmUmJihCZS5lLmM9RXQrdmUpLEV0Kz1adH19KytidH19aWYobnQubGVuZ3RoJiYoeVsiIW1lcmdlcyJdPSh5WyIhbWVyZ2VzIl18fFtdKS5jb25jYXQobnQpKSxCZS5lLnI9TWF0aC5tYXgo'@;
put 'QmUuZS5yLGJ0LTErX2UpLHlbIiFyZWYiXT1PbyhCZSksYnQ+PUhlJiYoeVsiIWZ1bGxyZWYiXT1PbygoQmUuZS5yPVEubGVuZ3RoLWN0K2J0LTErX2UsQmUpKSkscGUuYm9yZGVycylmb3IoYnQ9QmUucy5yO2J0PD1CZS5lLnI7KytidClmb3IoRXQ9QmUucy5jO0V0PD1CZS5lLmM7KytFdClp'@;
put 'ZighcGUuZGVuc2Upe3ZhciBqcj15W2RpKHtyOmJ0LGM6RXR9KV07aWYoIWpyfHwhanIucyljb250aW51ZTtpZihidD4wKXt2YXIgamk9eVtkaSh7cjpidC0xLGM6RXR9KV07amkmJmppLnMmJmppLnMuYm90dG9tJiZkZWxldGUganIucy50b3B9aWYoRXQ+MCl7dmFyIF9vPXlbZGkoe3I6YnQs'@;
put 'YzpFdC0xfSldO19vJiZfby5zJiZfby5zLmJvdHRvbSYmZGVsZXRlIGpyLnMubGVmdH19cmV0dXJuIHl9ZnVuY3Rpb24gSHUoeSxQKXtyZXR1cm4gQU0oKFB8fHt9KS5kZW5zZT9bXTp7fSx5LFApfXZhciBRMD1mdW5jdGlvbigpe3ZhciB5PWZ1bmN0aW9uKFEscmUscGUpe3ZhciBfZT1RLnJl'@;
put 'cGxhY2UoL1tcdFxyXG5dL2csIiAiKS50cmltKCkucmVwbGFjZSgvICsvZywiICIpLnJlcGxhY2UoLzx0ZXh0OnNcLz4vZywiICIpLnJlcGxhY2UoLzx0ZXh0OnMgdGV4dDpjPSIoXGQrKSJcLz4vZyxmdW5jdGlvbihCZSxHZSl7cmV0dXJuIEFycmF5KHBhcnNlSW50KEdlLDEwKSsxKS5qb2lu'@;
put 'KCIgIil9KS5yZXBsYWNlKC88dGV4dDp0YWJbXj5dKlwvPi9nLCJcdCIpLnJlcGxhY2UoLzx0ZXh0OmxpbmUtYnJlYWtcLz4vZywiXG4iKSx2ZT14cihfZS5yZXBsYWNlKC88W14+XSo+L2csIiIpKSxTZT1bXSxIZT0wO3JldHVybiBfZS5yZXBsYWNlKC8oPHRleHQ6c3Bhbi4qPz4pKC4qPyk8'@;
put 'W1wvXXRleHQ6c3Bhbj4vZyxmdW5jdGlvbihCZSxHZSxudCxkdCl7ZHQhPUhlJiZTZS5wdXNoKHt0OiJzIix2OnhyKF9lLnNsaWNlKEhlLGR0KSl9KTt2YXIgQ3Q9e3Q6InMiLHY6eHIobnQpfSxjdD1sbihHZSlbInN0eWxlLW5hbWUiXTtyZXR1cm4gY3QmJnBlW2N0XSYmKEN0LnM9b24ocGVb'@;
put 'Y3RdKSksU2UucHVzaChDdCksSGU9ZHQrQmUubGVuZ3RoLCIifSksSGU8X2UubGVuZ3RoJiZTZS5wdXNoKHt0OiJzIix2OnhyKF9lLnNsaWNlKEhlKSl9KSxbdmUsU2VdfSxQPXtkYXk6WyJkIiwiZGQiXSxtb250aDpbIm0iLCJtbSJdLHllYXI6WyJ5IiwieXkiXSxob3VyczpbImgiLCJoaCJd'@;
put 'LG1pbnV0ZXM6WyJtIiwibW0iXSxzZWNvbmRzOlsicyIsInNzIl0sImFtLXBtIjpbIkEvUCIsIkFNL1BNIl0sImRheS1vZi13ZWVrIjpbImRkZCIsImRkZGQiXSxlcmE6WyJlIiwiZWUiXSxxdWFydGVyOlsiXFxRbSIsJ21cXCJ0aCBxdWFydGVyIiddfSxMPWZ1bmN0aW9uKFEscmUpe3ZhciBw'@;
put 'ZT1sbihRLnNsaWNlKDAsUS5pbmRleE9mKCI+IikpKSxfZT1RLnNsaWNlKFEuaW5kZXhPZigiPiIpKzEpLHZlPXtuYW1lOnBlLm5hbWUsZmFtaWx5OnBlLmZhbWlseX07W1sicGFyZW50IiwicGFyZW50LXN0eWxlLW5hbWUiXSxbImRhdGFuYW1lIiwiZGF0YS1zdHlsZS1uYW1lIl0sWyJtcG5h'@;
put 'bWUiLCJtYXN0ZXItcGFnZS1uYW1lIl1dLmZvckVhY2goZnVuY3Rpb24oSGUpe3BlW0hlWzFdXSYmKHZlW0hlWzBdXT1wZVtIZVsxXV0pfSk7dmFyIFNlPXt9O19lLnJlcGxhY2UoJHQsZnVuY3Rpb24oSGUpe3ZhciBCZT1sbihIZSk7aWYoIjxzdHlsZTp0ZXh0LXByb3BlcnRpZXMiPT09QmVb'@;
put 'MF0pe2lmKEJlWyJmb250LXdlaWdodCJdJiYoU2UuYm9sZD0rKCJib2xkIj09QmVbImZvbnQtd2VpZ2h0Il18fCI3MDAiPT1CZVsiZm9udC13ZWlnaHQiXSkpLCgiaXRhbGljIj09QmVbImZvbnQtc3R5bGUiXXx8Im9ibGlxdWUiPT1CZVsiZm9udC1zdHlsZSJdKSYmKFNlLml0YWxpYz0xKSwi'@;
put 'bm9uZSIhPShCZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiKT9TZS51bmRlcmxpbmU9ImRvdWJsZSI9PUJlWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0/MjoxOihCZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiPT1CZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdKSYmKFNl'@;
put 'LnVuZGVybGluZT0wKSwoQmVbImZvbnQtc2l6ZSJdfHwiIikubWF0Y2goL3B0JC8pJiYoU2Uuc3o9K0JlWyJmb250LXNpemUiXS5yZXBsYWNlKCJwdCIsIiIpKSwibm9uZSIhPShCZVsidGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXXx8Im5vbmUiKSYmKFNlLnN0cmlrZT0xKSxCZVsiZm9udC1u'@;
put 'YW1lIl0mJihTZS5uYW1lPUJlWyJmb250LW5hbWUiXSksQmUuY29sb3Ipe3ZhciBHZT1ONChCZS5jb2xvciwhMCk7R2U+PTAmJihTZS5jb2xvcj1HZSl9c3dpdGNoKEJlWyJ0ZXh0LXBvc2l0aW9uIl0pe2Nhc2Uic3VwZXIiOlNlLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2Uic3ViIjpTZS52'@;
put 'YWxpZ249InN1YiI7YnJlYWs7ZGVmYXVsdDooQmVbInRleHQtcG9zaXRpb24iXXx8IiIpLm1hdGNoKC8lLykmJihTZS52YWxpZ249Ii0iPT1CZVsidGV4dC1wb3NpdGlvbiJdLmNoYXJBdCgwKT8ic3ViIjoic3VwZXIiKX0ibm9uZSIhPShCZVsidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKFNl'@;
put 'LnNoYWRvdz0xKX1yZXR1cm4iIn0pLHJlW3BlLm5hbWVdPVNlfTtyZXR1cm4gZnVuY3Rpb24ocmUscGUpe3ZhciBfZT1wZXx8e307bnVsbCE9dGUmJm51bGw9PV9lLmRlbnNlJiYoX2UuZGVuc2U9dGUpO3ZhciBIZSxCZSxDdCxjdCxUdCxadCx2ZT1RdihyZSksU2U9W10sR2U9e25hbWU6IiJ9'@;
put 'LG50PSIiLGR0PTAsYnQ9e30sRnQ9W10sRXQ9X2UuZGVuc2U/W106e30scG49e3ZhbHVlOiIifSxLbj0iIix1bj0wLHpuPVtdLGtuPS0xLGVyPS0xLHRyPXtzOntyOjFlNixjOjFlN30sZTp7cjowLGM6MH19LFpuPTAsVnI9e30sb2k9W10sa2k9e30sTGk9MCxRcj0wLHVyPVtdLEFuPTEsdnI9'@;
put 'MSxycj1bXSxTbj17TmFtZXM6W119LHByPXt9LENpPVsiIiwiIl0sanI9W10samk9e30sX289e30sRGk9MCxZbz0iIixsbz0wLEFvPSExLHhvPSExLGhpPTA7Zm9yKEJyLmxhc3RJbmRleD0wLHZlPXZlLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZ'@;
put 'UEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIik7VHQ9QnIuZXhlYyh2ZSk7KXN3aXRjaChUdFszXT1UdFszXS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT1UdFsxXT8oRXRbIiFyZWYiXT10ci5lLmM+PXRyLnMuYyYmdHIuZS5y'@;
put 'Pj10ci5zLnI/T28odHIpOiJBMTpBMSIsX2Uuc2hlZXRSb3dzPjAmJl9lLnNoZWV0Um93czw9dHIuZS5yJiYoRXRbIiFmdWxscmVmIl09RXRbIiFyZWYiXSx0ci5lLnI9X2Uuc2hlZXRSb3dzLTEsRXRbIiFyZWYiXT1Pbyh0cikpLG9pLmxlbmd0aCYmKEV0WyIhbWVyZ2VzIl09b2kpLHVyLmxl'@;
put 'bmd0aCYmKEV0WyIhcm93cyJdPXVyKSxDdC5uYW1lPUN0Llx1NTQwZFx1NzlmMHx8Q3QubmFtZSx0eXBlb2YgSlNPTjwidSImJkpTT04uc3RyaW5naWZ5KEN0KSxGdC5wdXNoKEN0Lm5hbWUpLGJ0W0N0Lm5hbWVdPUV0LHhvPSExKToiLyIhPT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIp'@;
put 'JiYoQ3Q9bG4oVHRbMF0sITEpLGtuPWVyPS0xLHRyLnMucj10ci5zLmM9MWU3LHRyLmUucj10ci5lLmM9MCxFdD1fZS5kZW5zZT9bXTp7fSxvaT1bXSx1cj1bXSx4bz0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PVR0WzFdPy0tWm46KytabjticmVhaztjYXNlInRhYmxl'@;
put 'LXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PVR0WzFdKXtrbis9QW4sQW49MTticmVha31pZigoY3Q9bG4oVHRbMF0sITEpKS5cdTg4NGNcdTUzZjc/a249Y3QuXHU4ODRjXHU1M2Y3LTE6LTE9PWtuJiYoa249MCksKEFuPStjdFsibnVtYmVyLXJvd3MtcmVwZWF0ZWQiXXx8MSk8MTApZm9y'@;
put 'KGhpPTA7aGk8QW47KytoaSlabj4wJiYodXJba24raGldPXtsZXZlbDpabn0pO2VyPS0xO2JyZWFrO2Nhc2UiY292ZXJlZC10YWJsZS1jZWxsIjoiLyIhPT1UdFsxXSYmKytlcixfZS5zaGVldFN0dWJzJiYoX2UuZGVuc2U/KEV0W2tuXXx8KEV0W2tuXT1bXSksRXRba25dW2VyXT17dDoieiJ9'@;
put 'KTpFdFtkaSh7cjprbixjOmVyfSldPXt0OiJ6In0pLEtuPSIiLHpuPVtdO2JyZWFrO2Nhc2UidGFibGUtY2VsbCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikpKytlcixwbj1sbihUdFswXSwhMSksdnI9cGFyc2VJbnQocG5bIm51bWJl'@;
put 'ci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCksWnQ9e3Q6InoiLHY6bnVsbH0scG4uZm9ybXVsYSYmMCE9X2UuY2VsbEZvcm11bGEmJihadC5mPWxTKHhyKHBuLmZvcm11bGEpKSksInN0cmluZyI9PShwbi5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fHBuWyJ2YWx1ZS10eXBlIl0pJiYo'@;
put 'WnQudD0icyIsWnQudj14cihwblsic3RyaW5nLXZhbHVlIl18fCIiKSxfZS5kZW5zZT8oRXRba25dfHwoRXRba25dPVtdKSxFdFtrbl1bZXJdPVp0KTpFdFtkaSh7cjprbixjOmVyfSldPVp0KSxlcis9dnItMTtlbHNlIGlmKCIvIiE9PVR0WzFdKXt2cj0xO3ZhciB0YT1Bbj9rbitBbi0xOmtu'@;
put 'O2lmKCsrZXI+dHIuZS5jJiYodHIuZS5jPWVyKSxlcjx0ci5zLmMmJih0ci5zLmM9ZXIpLGtuPHRyLnMuciYmKHRyLnMucj1rbiksdGE+dHIuZS5yJiYodHIuZS5yPXRhKSxqcj1bXSxqaT17fSxadD17dDoocG49bG4oVHRbMF0sITEpKS5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fHBuWyJ2'@;
put 'YWx1ZS10eXBlIl0sdjpudWxsfSxfZS5jZWxsRm9ybXVsYSlpZihwbi5mb3JtdWxhJiYocG4uZm9ybXVsYT14cihwbi5mb3JtdWxhKSkscG5bIm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0mJnBuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdJiYoTGk9cGFyc2VJbnQocG5b'@;
put 'Im51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0sMTApfHwwLFFyPXBhcnNlSW50KHBuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxadC5GPU9vKGtpPXtzOntyOmtuLGM6ZXJ9LGU6e3I6a24rTGktMSxjOmVyK1FyLTF9fSkscnIucHVzaChba2ksWnQuRl0pKSxw'@;
put 'bi5mb3JtdWxhKVp0LmY9bFMocG4uZm9ybXVsYSk7ZWxzZSBmb3IoaGk9MDtoaTxyci5sZW5ndGg7KytoaSlrbj49cnJbaGldWzBdLnMuciYma248PXJyW2hpXVswXS5lLnImJmVyPj1ycltoaV1bMF0ucy5jJiZlcjw9cnJbaGldWzBdLmUuYyYmKFp0LkY9cnJbaGldWzFdKTtzd2l0Y2goKHBu'@;
put 'WyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fHBuWyJudW1iZXItcm93cy1zcGFubmVkIl0pJiYoTGk9cGFyc2VJbnQocG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsUXI9cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsb2kucHVzaChraT17czp7'@;
put 'cjprbixjOmVyfSxlOntyOmtuK0xpLTEsYzplcitRci0xfX0pKSxwblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSYmKHZyPXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdLDEwKSksWnQudCl7Y2FzZSJib29sZWFuIjpadC50PSJiIixadC52PXlyKHBuWyJib29sZWFu'@;
put 'LXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2FzZSJjdXJyZW5jeSI6WnQudD0ibiIsWnQudj1wYXJzZUZsb2F0KHBuLnZhbHVlKTticmVhaztjYXNlImRhdGUiOlp0LnQ9ImQiLFp0LnY9SHQocG5bImRhdGUtdmFsdWUiXSksX2UuY2VsbERhdGVzfHwoWnQu'@;
put 'dD0ibiIsWnQudj1VZShadC52KSksWnQuej0ibS9kL3l5IjticmVhaztjYXNlInRpbWUiOlp0LnQ9Im4iLFp0LnY9aXQocG5bInRpbWUtdmFsdWUiXSkvODY0MDAsX2UuY2VsbERhdGVzJiYoWnQudD0iZCIsWnQudj1odChadC52KSksWnQuej0iSEg6TU06U1MiO2JyZWFrO2Nhc2UibnVtYmVy'@;
put 'IjpadC50PSJuIixadC52PXBhcnNlRmxvYXQocG4uXHU2NTcwXHU2MzZlXHU2NTcwXHU1MDNjKTticmVhaztkZWZhdWx0OmlmKCJzdHJpbmciIT09WnQudCYmInRleHQiIT09WnQudCYmWnQudCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHZhbHVlIHR5cGUgIitadC50KTtadC50PSJz'@;
put 'IixudWxsIT1wblsic3RyaW5nLXZhbHVlIl0mJihLbj14cihwblsic3RyaW5nLXZhbHVlIl0pLHpuPVtdKX19ZWxzZXtpZihBbz0hMSwicyI9PT1adC50JiYoWnQudj1Lbnx8IiIsem4ubGVuZ3RoJiYoWnQuUj16biksQW89MD09dW4pLHByLlRhcmdldCYmKFp0Lmw9cHIpLGpyLmxlbmd0aD4w'@;
put 'JiYoWnQuYz1qcixqcj1bXSksS24mJiExIT09X2UuY2VsbFRleHQmJihadC53PUtuKSxBbyYmKFp0LnQ9InoiLGRlbGV0ZSBadC52KSxfZS5jZWxsSFRNTCYmKFp0Lmg9WnQuUj9rOShadC5SKTpybygiIitadC52KSksKCFBb3x8X2Uuc2hlZXRTdHVicykmJiEoX2Uuc2hlZXRSb3dzJiZfZS5z'@;
put 'aGVldFJvd3M8PWtuKSlmb3IodmFyIE1uPTA7TW48QW47KytNbil7aWYodnI9cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCksX2UuZGVuc2UpZm9yKEV0W2tuK01uXXx8KEV0W2tuK01uXT1bXSksRXRba24rTW5dW2VyXT0wPT1Nbj9adDpvbihadCk7LS12'@;
put 'cj4wOylFdFtrbitNbl1bZXIrdnJdPW9uKFp0KTtlbHNlIGZvcihFdFtkaSh7cjprbitNbixjOmVyfSldPVp0Oy0tdnI+MDspRXRbZGkoe3I6a24rTW4sYzplcit2cn0pXT1vbihadCk7dHIuZS5jPD1lciYmKHRyLmUuYz1lcil9ZXIrPSh2cj1wYXJzZUludChwblsibnVtYmVyLWNvbHVtbnMt'@;
put 'cmVwZWF0ZWQiXXx8IjEiLDEwKSktMSx2cj0wLFp0PXt9LEtuPSIiLHpuPVtdfXByPXt9O2JyZWFrO2Nhc2UiZG9jdW1lbnQiOmNhc2UiZG9jdW1lbnQtY29udGVudCI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2NcdTY1ODdcdTY4NjMiOmNhc2Uic3ByZWFkc2hlZXQiOmNhc2UiXHU0'@;
put 'ZTNiXHU0ZjUzIjpjYXNlInNjcmlwdHMiOmNhc2Uic3R5bGVzIjpjYXNlImZvbnQtZmFjZS1kZWNscyI6Y2FzZSJtYXN0ZXItc3R5bGVzIjppZigiLyI9PT1UdFsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PVR0WzNdKXRocm93IkJhZCBzdGF0ZTogIitIZX1lbHNlIi8iIT09VHRbMF0uY2hh'@;
put 'ckF0KFR0WzBdLmxlbmd0aC0yKSYmU2UucHVzaChbVHRbM10sITBdKTticmVhaztjYXNlImFubm90YXRpb24iOmlmKCIvIj09PVR0WzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09VHRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK0hlO2ppLnQ9S24sem4ubGVuZ3RoJiYoamkuUj16biksamkuYT1Z'@;
put 'byxqci5wdXNoKGppKX1lbHNlIi8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmU2UucHVzaChbVHRbM10sITFdKTtZbz0iIixsbz0wLEtuPSIiLHVuPTAsem49W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT1UdFsxXT9Zbz12ZS5zbGljZShsbyxUdC5pbmRleCk6bG89VHQu'@;
put 'aW5kZXgrVHRbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibWV0YSI6Y2FzZSJcdTUxNDNcdTY1NzBcdTYzNmUiOmNhc2Uic2V0dGluZ3MiOmNhc2UiY29uZmlnLWl0ZW0tc2V0IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1pbmRleGVkIjpjYXNlImNvbmZpZy1pdGVtLW1hcC1lbnRyeSI6Y2FzZSJjb25m'@;
put 'aWctaXRlbS1tYXAtbmFtZWQiOmNhc2Uic2hhcGVzIjpjYXNlImZyYW1lIjpjYXNlInRleHQtYm94IjpjYXNlImltYWdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGVzIjpjYXNlImxpc3Qtc3R5bGUiOmNhc2UiZm9ybSI6Y2FzZSJkZGUtbGlua3MiOmNhc2UiZXZlbnQtbGlzdGVuZXJzIjpjYXNl'@;
put 'ImNoYXJ0IjppZigiLyI9PT1UdFsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PVR0WzNdKXRocm93IkJhZCBzdGF0ZTogIitIZX1lbHNlIi8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmU2UucHVzaChbVHRbM10sITFdKTtLbj0iIix1bj0wLHpuPVtdO2JyZWFrO2Nhc2Uic2Np'@;
put 'ZW50aWZpYy1udW1iZXIiOmNhc2UiY3VycmVuY3ktc3ltYm9sIjpjYXNlImN1cnJlbmN5LXN0eWxlIjpjYXNlInNjcmlwdCI6Y2FzZSJsaWJyYXJpZXMiOmNhc2UiYXV0b21hdGljLXN0eWxlcyI6Y2FzZSJkZWZhdWx0LXN0eWxlIjpjYXNlInBhZ2UtbGF5b3V0IjpjYXNlIm1hcCI6Y2FzZSJm'@;
put 'b250LWZhY2UiOmNhc2UicGFyYWdyYXBoLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jb2x1bW4tcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1yb3ctcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jZWxsLXByb3BlcnRpZXMiOmNhc2UiZnJhY3Rpb24iOmNhc2Ui'@;
put 'Ym9vbGVhbi1zdHlsZSI6Y2FzZSJib29sZWFuIjpjYXNlInRleHQtc3R5bGUiOmNhc2UidGV4dC1jb250ZW50IjpjYXNlInRleHQtcHJvcGVydGllcyI6Y2FzZSJlbWJlZGRlZC10ZXh0IjpjYXNlImJvZHkiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjIjpjYXNlImZvcm1zIjpjYXNl'@;
put 'InRhYmxlLWNvbHVtbiI6Y2FzZSJ0YWJsZS1oZWFkZXItcm93cyI6Y2FzZSJ0YWJsZS1yb3dzIjpjYXNlInRhYmxlLWNvbHVtbi1ncm91cCI6Y2FzZSJ0YWJsZS1oZWFkZXItY29sdW1ucyI6Y2FzZSJ0YWJsZS1jb2x1bW5zIjpjYXNlIm51bGwtZGF0ZSI6Y2FzZSJncmFwaGljLXByb3BlcnRp'@;
put 'ZXMiOmNhc2UiY2FsY3VsYXRpb24tc2V0dGluZ3MiOmNhc2UibmFtZWQtZXhwcmVzc2lvbnMiOmNhc2UibGFiZWwtcmFuZ2UiOmNhc2UibGFiZWwtcmFuZ2VzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb24iOmNhc2Uic29ydCI6Y2FzZSJzb3J0LWJ5IjpjYXNlInNvcnQtZ3JvdXBzIjpjYXNlInRh'@;
put 'YiI6Y2FzZSJsaW5lLWJyZWFrIjpjYXNlInNwYW4iOmNhc2UicyI6Y2FzZSJkYXRlIjpjYXNlIm9iamVjdCI6Y2FzZSJ0aXRsZSI6Y2FzZSJcdTY4MDdcdTk4OTgiOmNhc2UiZGVzYyI6Y2FzZSJiaW5hcnktZGF0YSI6Y2FzZSJ0YWJsZS1zb3VyY2UiOmNhc2Uic2NlbmFyaW8iOmNhc2UiaXRl'@;
put 'cmF0aW9uIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbnMiOmNhc2UiY29udGVudC12YWxpZGF0aW9uIjpjYXNlImhlbHAtbWVzc2FnZSI6Y2FzZSJlcnJvci1tZXNzYWdlIjpjYXNlImRhdGFiYXNlLXJhbmdlcyI6Y2FzZSJmaWx0ZXIiOmNhc2UiZmlsdGVyLWFuZCI6Y2FzZSJmaWx0ZXItb3Ii'@;
put 'OmNhc2UiZmlsdGVyLWNvbmRpdGlvbiI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLWJ1bGxldCI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLW51bWJlciI6Y2FzZSJsaXN0LWxldmVsLXByb3BlcnRpZXMiOmNhc2Uic2VuZGVyLWZpcnN0bmFtZSI6Y2FzZSJzZW5kZXItbGFzdG5hbWUiOmNhc2Uic2Vu'@;
put 'ZGVyLWluaXRpYWxzIjpjYXNlInNlbmRlci10aXRsZSI6Y2FzZSJzZW5kZXItcG9zaXRpb24iOmNhc2Uic2VuZGVyLWVtYWlsIjpjYXNlInNlbmRlci1waG9uZS1wcml2YXRlIjpjYXNlInNlbmRlci1mYXgiOmNhc2Uic2VuZGVyLWNvbXBhbnkiOmNhc2Uic2VuZGVyLXBob25lLXdvcmsiOmNh'@;
put 'c2Uic2VuZGVyLXN0cmVldCI6Y2FzZSJzZW5kZXItY2l0eSI6Y2FzZSJzZW5kZXItcG9zdGFsLWNvZGUiOmNhc2Uic2VuZGVyLWNvdW50cnkiOmNhc2Uic2VuZGVyLXN0YXRlLW9yLXByb3ZpbmNlIjpjYXNlImF1dGhvci1uYW1lIjpjYXNlImF1dGhvci1pbml0aWFscyI6Y2FzZSJjaGFwdGVy'@;
put 'IjpjYXNlImZpbGUtbmFtZSI6Y2FzZSJ0ZW1wbGF0ZS1uYW1lIjpjYXNlInNoZWV0LW5hbWUiOmNhc2UiZXZlbnQtbGlzdGVuZXIiOmNhc2UiaW5pdGlhbC1jcmVhdG9yIjpjYXNlImNyZWF0aW9uLWRhdGUiOmNhc2UicHJpbnQtZGF0ZSI6Y2FzZSJnZW5lcmF0b3IiOmNhc2UiZG9jdW1lbnQt'@;
put 'c3RhdGlzdGljIjpjYXNlInVzZXItZGVmaW5lZCI6Y2FzZSJlZGl0aW5nLWR1cmF0aW9uIjpjYXNlImVkaXRpbmctY3ljbGVzIjpjYXNlImNvbmZpZy1pdGVtIjpjYXNlInBhZ2UtbnVtYmVyIjpjYXNlInBhZ2UtY291bnQiOmNhc2UidGltZSI6Y2FzZSJjZWxsLXJhbmdlLXNvdXJjZSI6Y2Fz'@;
put 'ZSJkZXRlY3RpdmUiOmNhc2Uib3BlcmF0aW9uIjpjYXNlImhpZ2hsaWdodGVkLXJhbmdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGUiOmNhc2Uic291cmNlLWNlbGwtcmFuZ2UiOmNhc2Uic291cmNlLXNlcnZpY2UiOmNhc2UiZGF0YS1waWxvdC1maWVsZCI6Y2FzZSJkYXRhLXBpbG90LWxldmVs'@;
put 'IjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWxzIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWwiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXJzIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVyIjpjYXNlImRhdGEtcGlsb3QtZGlzcGxheS1pbmZvIjpjYXNlImRhdGEtcGlsb3Qtc29ydC1pbmZvIjpjYXNl'@;
put 'ImRhdGEtcGlsb3QtbGF5b3V0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1maWVsZC1yZWZlcmVuY2UiOmNhc2UiZGF0YS1waWxvdC1ncm91cHMiOmNhc2UiZGF0YS1waWxvdC1ncm91cCI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwLW1lbWJlciI6Y2FzZSJyZWN0IjpjYXNlImRkZS1jb25uZWN0aW9u'@;
put 'LWRlY2xzIjpjYXNlImRkZS1jb25uZWN0aW9uLWRlY2wiOmNhc2UiZGRlLWxpbmsiOmNhc2UiZGRlLXNvdXJjZSI6Y2FzZSJwcm9wZXJ0aWVzIjpjYXNlInByb3BlcnR5IjpjYXNlInRhYmxlLXByb3RlY3Rpb24iOmNhc2UiZGF0YS1waWxvdC1ncmFuZC10b3RhbCI6Y2FzZSJvZmZpY2UtZG9j'@;
put 'dW1lbnQtY29tbW9uLWF0dHJzIjpicmVhaztjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJwZXJjZW50YWdlLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6aWYoIi8iPT09VHRbMV0pe2lmKFZyW0dlLm5hbWVdPW50LChIZT1TZS5wb3AoKSlbMF0hPT1UdFszXSl0aHJv'@;
put 'dyJCYWQgc3RhdGU6ICIrSGV9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJihudD0iIixHZT1sbihUdFswXSwhMSksU2UucHVzaChbVHRbM10sITBdKSk7YnJlYWs7Y2FzZSJzdHlsZSI6Ii8+Ij09PVR0WzBdLnNsaWNlKC0yKT9MKFR0WzBdLF9vKToiLyI9PVR0WzFd'@;
put 'P0wodmUuc2xpY2UoRGksVHQuaW5kZXgrVHRbMF0ubGVuZ3RoKSxfbyk6RGk9VHQuaW5kZXg7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiZGF5IjpjYXNlIm1vbnRoIjpjYXNlInllYXIiOmNhc2UiZXJhIjpjYXNlImRheS1vZi13ZWVrIjpjYXNlIndlZWstb2YteWVhciI6Y2FzZSJxdWFydGVy'@;
put 'IjpjYXNlImhvdXJzIjpjYXNlIm1pbnV0ZXMiOmNhc2Uic2Vjb25kcyI6Y2FzZSJhbS1wbSI6c3dpdGNoKFNlW1NlLmxlbmd0aC0xXVswXSl7Y2FzZSJ0aW1lLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOkJlPWxuKFR0WzBdLCExKSxudCs9UFtUdFszXV1bImxvbmciPT09QmUuc3R5bGU/MTow'@;
put 'XX1icmVhaztjYXNlInRleHQiOmlmKCIvPiI9PT1UdFswXS5zbGljZSgtMikpYnJlYWs7aWYoIi8iPT09VHRbMV0pc3dpdGNoKFNlW1NlLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjpudCs9dmUuc2xpY2UoZHQsVHQu'@;
put 'aW5kZXgpfWVsc2UgZHQ9VHQuaW5kZXgrVHRbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibmFtZWQtcmFuZ2UiOkNpPXl2KChCZT1sbihUdFswXSwhMSkpWyJjZWxsLXJhbmdlLWFkZHJlc3MiXSk7dmFyIE1zPXtOYW1lOkJlLm5hbWUsUmVmOkNpWzBdKyIhIitDaVsxXX07eG8mJihNcy5TaGVldD1G'@;
put 'dC5sZW5ndGgpLFNuLk5hbWVzLnB1c2goTXMpO2JyZWFrO2Nhc2UicCI6Y2FzZSJcdTY1ODdcdTY3MmNcdTRlMzIiOmlmKFsibWFzdGVyLXN0eWxlcyJdLmluZGV4T2YoU2VbU2UubGVuZ3RoLTFdWzBdKT4tMSlicmVhaztpZigiLyIhPT1UdFsxXXx8cG4mJnBuWyJzdHJpbmctdmFsdWUiXSls'@;
put 'bihUdFswXSwhMSksdW49VHQuaW5kZXgrVHRbMF0ubGVuZ3RoO2Vsc2V7dmFyIHlzPXkodmUuc2xpY2UodW4sVHQuaW5kZXgpLDAsX28pO0tuPShLbi5sZW5ndGg+MD9LbisiXG4iOiIiKSt5c1swXSx6bj15c1sxXX1icmVhaztjYXNlImRhdGFiYXNlLXJhbmdlIjppZigiLyI9PT1UdFsxXSli'@;
put 'cmVhazt0cnl7YnRbKENpPXl2KGxuKFR0WzBdKVsidGFyZ2V0LXJhbmdlLWFkZHJlc3MiXSkpWzBdXVsiIWF1dG9maWx0ZXIiXT17cmVmOkNpWzFdfX1jYXRjaHt9YnJlYWs7Y2FzZSJhIjppZigiLyIhPT1UdFsxXSl7aWYoIShwcj1sbihUdFswXSwhMSkpLmhyZWYpYnJlYWs7cHIuVGFyZ2V0'@;
put 'PXhyKHByLmhyZWYpLGRlbGV0ZSBwci5ocmVmLCIjIj09cHIuVGFyZ2V0LmNoYXJBdCgwKSYmcHIuVGFyZ2V0LmluZGV4T2YoIi4iKT4tMT8oQ2k9eXYocHIuVGFyZ2V0LnNsaWNlKDEpKSxwci5UYXJnZXQ9IiMiK0NpWzBdKyIhIitDaVsxXSk6cHIuVGFyZ2V0Lm1hdGNoKC9eXC5cLltcXFwv'@;
put 'XS8pJiYocHIuVGFyZ2V0PXByLlRhcmdldC5zbGljZSgzKSl9YnJlYWs7ZGVmYXVsdDpzd2l0Y2goVHRbMl0pe2Nhc2UiZGM6IjpjYXNlImNhbGNleHQ6IjpjYXNlImxvZXh0OiI6Y2FzZSJvb286IjpjYXNlImNoYXJ0b29vOiI6Y2FzZSJkcmF3OiI6Y2FzZSJzdHlsZToiOmNhc2UiY2hhcnQ6'@;
put 'IjpjYXNlImZvcm06IjpjYXNlInVvZjoiOmNhc2UiXHU4ODY4OiI6Y2FzZSJcdTViNTc6IjpicmVhaztkZWZhdWx0OmlmKF9lLldURil0aHJvdyBuZXcgRXJyb3IoVHQpfX12YXIgRWw9e1NoZWV0czpidCxTaGVldE5hbWVzOkZ0LFdvcmtib29rOlNufTtyZXR1cm4gX2UuYm9va1NoZWV0cyYm'@;
put 'ZGVsZXRlIEVsLlNoZWV0cyxFbH19KCk7ZnVuY3Rpb24gYV8oeSxQKXtyZXR1cm4gUTAoeSxQKX12YXIgSzE9ZnVuY3Rpb24oKXt2YXIgeT1bIiAgPG9mZmljZTptYXN0ZXItc3R5bGVzPiIsJyAgICA8c3R5bGU6bWFzdGVyLXBhZ2Ugc3R5bGU6bmFtZT0ibXAxIiBzdHlsZTpwYWdlLWxheW91'@;
put 'dC1uYW1lPSJtcDEiPicsIiAgICAgIDxzdHlsZTpoZWFkZXIvPiIsJyAgICAgIDxzdHlsZTpoZWFkZXItbGVmdCBzdHlsZTpkaXNwbGF5PSJmYWxzZSIvPicsIiAgICAgIDxzdHlsZTpmb290ZXIvPiIsJyAgICAgIDxzdHlsZTpmb290ZXItbGVmdCBzdHlsZTpkaXNwbGF5PSJmYWxzZSIvPics'@;
put 'IiAgICA8L3N0eWxlOm1hc3Rlci1wYWdlPiIsIiAgPC9vZmZpY2U6bWFzdGVyLXN0eWxlcz4iXS5qb2luKCJcbiIpLFA9IjxvZmZpY2U6ZG9jdW1lbnQtc3R5bGVzICIrUGEoeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAi'@;
put 'LCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRleHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3Bl'@;
put 'bmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6eHNsLWZvLWNvbXBhdGlibGU6MS4wIiwi'@;
put 'eG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieG1sbnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5z'@;
put 'OnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIsIm9mZmljZTp2ZXJzaW9uIjoiMS4yIn0pKyI+XG4iK3krIlxuPC9vZmZp'@;
put 'Y2U6ZG9jdW1lbnQtc3R5bGVzPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEJuK1B9fSgpLHYwPWZ1bmN0aW9uKCl7dmFyIHk9ZnVuY3Rpb24odmUsU2Upe3JldHVybiBIcih2ZSkucmVwbGFjZSgvICArL2csZnVuY3Rpb24oSGUpe3JldHVybic8dGV4dDpzIHRleHQ6Yz0iJytIZS5sZW5n'@;
put 'dGgrJyIvPid9KS5yZXBsYWNlKC9cdC9nLCI8dGV4dDp0YWIvPiIpLnJlcGxhY2UoL1xuL2csU2U/Ijx0ZXh0OmxpbmUtYnJlYWsvPiI6IjwvdGV4dDpwPjx0ZXh0OnA+IikucmVwbGFjZSgvXiAvLCI8dGV4dDpzLz4iKS5yZXBsYWNlKC8gJC8sIjx0ZXh0OnMvPiIpfSxQPWZ1bmN0aW9uKHZl'@;
put 'KXtyZXR1cm4gdmUubWFwKGZ1bmN0aW9uKFNlKXt2YXIgSGU9IiI7cmV0dXJuIG51bGwhPVNlLm9kcyYmKEhlKz0nIHRleHQ6c3R5bGUtbmFtZT0iVCcrU2Uub2RzKyciJyksU2Uudj8iPHRleHQ6c3BhbiIrSGUrIj4iK3koU2UudiwhMCkrIjwvdGV4dDpzcGFuPiI6IiJ9KS5qb2luKCIiKX0s'@;
put 'TD0iICAgICAgICAgIDx0YWJsZTp0YWJsZS1jZWxsIC8+XG4iLHJlPWZ1bmN0aW9uKHZlLFNlLEhlKXt2YXIgQmU9W107QmUucHVzaCgnICAgICAgPHRhYmxlOnRhYmxlIHRhYmxlOm5hbWU9IicrSHIoU2UuU2hlZXROYW1lc1tIZV0pKyciIHRhYmxlOnN0eWxlLW5hbWU9InRhMSI+XG4nKTt2'@;
put 'YXIgR2U9MCxudD0wLGR0PVdzKHZlWyIhcmVmIl18fCJBMSIpLEN0PXZlWyIhbWVyZ2VzIl18fFtdLGN0PTAsYnQ9QXJyYXkuaXNBcnJheSh2ZSk7aWYodmVbIiFjb2xzIl0pZm9yKG50PTA7bnQ8PWR0LmUuYzsrK250KUJlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLWNvbHVtbiIrKHZl'@;
put 'WyIhY29scyJdW250XT8nIHRhYmxlOnN0eWxlLW5hbWU9ImNvJyt2ZVsiIWNvbHMiXVtudF0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLWNvbHVtbj5cbiIpO3ZhciBFdD12ZVsiIXJvd3MiXXx8W107Zm9yKEdlPTA7R2U8ZHQucy5yOysrR2UpQmUucHVzaCgiICAgICAgICA8dGFibGU6'@;
put 'dGFibGUtcm93IisoRXRbR2VdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK0V0W0dlXS5vZHMrJyInOiIiKSsiPjwvdGFibGU6dGFibGUtcm93PlxuIik7Zm9yKDtHZTw9ZHQuZS5yOysrR2Upe2ZvcihCZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1yb3ciKyhFdFtHZV0/JyB0YWJsZTpz'@;
put 'dHlsZS1uYW1lPSJybycrRXRbR2VdLm9kcysnIic6IiIpKyI+XG4iKSxudD0wO250PGR0LnMuYzsrK250KUJlLnB1c2goTCk7Zm9yKDtudDw9ZHQuZS5jOysrbnQpe3ZhciBUdD0hMSxadD17fSxwbj0iIjtmb3IoY3Q9MDtjdCE9Q3QubGVuZ3RoOysrY3QpaWYoIShDdFtjdF0ucy5jPm50fHxD'@;
put 'dFtjdF0ucy5yPkdlfHxDdFtjdF0uZS5jPG50fHxDdFtjdF0uZS5yPEdlKSl7KEN0W2N0XS5zLmMhPW50fHxDdFtjdF0ucy5yIT1HZSkmJihUdD0hMCksWnRbInRhYmxlOm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXT1DdFtjdF0uZS5jLUN0W2N0XS5zLmMrMSxadFsidGFibGU6bnVtYmVyLXJv'@;
put 'd3Mtc3Bhbm5lZCJdPUN0W2N0XS5lLnItQ3RbY3RdLnMucisxO2JyZWFrfWlmKFR0KUJlLnB1c2goIiAgICAgICAgICA8dGFibGU6Y292ZXJlZC10YWJsZS1jZWxsLz5cbiIpO2Vsc2V7dmFyIEtuPWRpKHtyOkdlLGM6bnR9KSx1bj1idD8odmVbR2VdfHxbXSlbbnRdOnZlW0tuXTtpZih1biYm'@;
put 'dW4uZiYmKFp0WyJ0YWJsZTpmb3JtdWxhIl09SHIoY1ModW4uZikpLHVuLkYmJnVuLkYuc2xpY2UoMCxLbi5sZW5ndGgpPT1Lbikpe3ZhciBxbj1Xcyh1bi5GKTtadFsidGFibGU6bnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXT1xbi5lLmMtcW4ucy5jKzEsWnRbInRhYmxlOm51bWJl'@;
put 'ci1tYXRyaXgtcm93cy1zcGFubmVkIl09cW4uZS5yLXFuLnMucisxfWlmKHVuKXtzd2l0Y2godW4udCl7Y2FzZSJiIjpwbj11bi52PyJUUlVFIjoiRkFMU0UiLFp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJib29sZWFuIixadFsib2ZmaWNlOmJvb2xlYW4tdmFsdWUiXT11bi52PyJ0cnVlIjoi'@;
put 'ZmFsc2UiO2JyZWFrO2Nhc2UibiI6cG49dW4ud3x8U3RyaW5nKHVuLnZ8fDApLFp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJmbG9hdCIsWnRbIm9mZmljZTp2YWx1ZSJdPXVuLnZ8fDA7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6cG49dW4udixadFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0ic3Ry'@;
put 'aW5nIjticmVhaztjYXNlImQiOnBuPXVuLnd8fEh0KHVuLnYpLnRvSVNPU3RyaW5nKCksWnRbIm9mZmljZTp2YWx1ZS10eXBlIl09ImRhdGUiLFp0WyJvZmZpY2U6ZGF0ZS12YWx1ZSJdPUh0KHVuLnYpLnRvSVNPU3RyaW5nKCksWnRbInRhYmxlOnN0eWxlLW5hbWUiXT0iY2UxIjticmVhaztk'@;
put 'ZWZhdWx0OkJlLnB1c2goTCk7Y29udGludWV9bnVsbCE9dW4ub2RzJiYhWnRbInRhYmxlOnN0eWxlLW5hbWUiXSYmKFp0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlIit1bi5vZHMpO3ZhciB6bj0hdW4uUnx8dW4ubCYmdW4ubC5UYXJnZXQ/eShwbik6UCh1bi5SKTtpZih1bi5sJiZ1bi5sLlRh'@;
put 'cmdldCl7dmFyIGtuPXVuLmwuVGFyZ2V0OyIjIiE9KGtuPSIjIj09a24uY2hhckF0KDApPyIjIit1Uyhrbi5zbGljZSgxKSk6a24pLmNoYXJBdCgwKSYmIWtuLm1hdGNoKC9eXHcrOi8pJiYoa249Ii4uLyIra24pLHpuPVNyKCJ0ZXh0OmEiLHpuLHsieGxpbms6aHJlZiI6a24ucmVwbGFjZSgv'@;
put 'Ji9nLCImYW1wOyIpfSl9QmUucHVzaCgiICAgICAgICAgICIrU3IoInRhYmxlOnRhYmxlLWNlbGwiLFNyKCJ0ZXh0OnAiLHpuLHt9KSxadCkrIlxuIil9ZWxzZSBCZS5wdXNoKEwpfX1CZS5wdXNoKCIgICAgICAgIDwvdGFibGU6dGFibGUtcm93PlxuIil9cmV0dXJuIEJlLnB1c2goIiAgICAg'@;
put 'IDwvdGFibGU6dGFibGU+XG4iKSxCZS5qb2luKCIiKX0scGU9e2NlbnRlcjoiY2VudGVyIixsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9O3JldHVybiBmdW5jdGlvbihTZSxIZSl7dmFyIEJlPVtCbl0sR2U9UGEoeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3Vt'@;
put 'ZW50OnhtbG5zOm9mZmljZToxLjAiLCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRleHQiOiJ1'@;
put 'cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6eHNs'@;
put 'LWZvLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieG1sbnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm1ldGEiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1l'@;
put 'dGE6MS4wIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6cHJlc2VudGF0aW9uIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpwcmVzZW50YXRpb246MS4wIiwieG1sbnM6c3Zn'@;
put 'IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpjaGFydCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y2hhcnQ6MS4wIiwieG1sbnM6ZHIzZCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9j'@;
put 'dW1lbnQ6eG1sbnM6ZHIzZDoxLjAiLCJ4bWxuczptYXRoIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsInhtbG5zOmZvcm0iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmZvcm06MS4wIiwieG1sbnM6c2NyaXB0IjoidXJuOm9hc2lzOm5hbWVz'@;
put 'OnRjOm9wZW5kb2N1bWVudDp4bWxuczpzY3JpcHQ6MS4wIiwieG1sbnM6b29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvb2ZmaWNlIiwieG1sbnM6b29vdyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L3dyaXRlciIsInhtbG5zOm9vb2MiOiJodHRwOi8vb3Blbm9mZmljZS5v'@;
put 'cmcvMjAwNC9jYWxjIiwieG1sbnM6ZG9tIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwtZXZlbnRzIiwieG1sbnM6eGZvcm1zIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMi94Zm9ybXMiLCJ4bWxuczp4c2QiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsInhtbG5zOnhz'@;
put 'aSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiwieG1sbnM6c2hlZXQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnNoMzN0anM6MS4wIiwieG1sbnM6cnB0IjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDUvcmVwb3J0IiwieG1sbnM6b2Yi'@;
put 'OiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIsInhtbG5zOnhodG1sIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsInhtbG5zOmdyZGRsIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMy9nL2RhdGEtdmlldyMiLCJ4bWxuczp0YWJsZW9vbyI6Imh0'@;
put 'dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA5L3RhYmxlIiwieG1sbnM6ZHJhd29vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDEwL2RyYXciLCJ4bWxuczpjYWxjZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOmNhbGM6eG1sbnM6Y2FsY2V4dDox'@;
put 'LjAiLCJ4bWxuczpsb2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpvZmZpY2U6eG1sbnM6bG9leHQ6MS4wIiwieG1sbnM6ZmllbGQiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b29vLW1zLWludGVyb3A6eG1sbnM6ZmllbGQ6'@;
put 'MS4wIiwieG1sbnM6Zm9ybXgiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b294bWwtb2RmLWludGVyb3A6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpjc3MzdCI6Imh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdGV4dC8iLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9KSxudD1Q'@;
put 'YSh7InhtbG5zOmNvbmZpZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y29uZmlnOjEuMCIsIm9mZmljZTptaW1ldHlwZSI6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQifSk7ImZvZHMiPT1IZS5ib29rVHlwZT8oQmUucHVz'@;
put 'aCgiPG9mZmljZTpkb2N1bWVudCIrR2UrbnQrIj5cbiIpLEJlLnB1c2goUzQoKS5yZXBsYWNlKC9vZmZpY2U6ZG9jdW1lbnQtbWV0YS9nLCJvZmZpY2U6bWV0YSIpKSk6QmUucHVzaCgiPG9mZmljZTpkb2N1bWVudC1jb250ZW50IitHZSsiPlxuIiksZnVuY3Rpb24odmUsU2Upe3ZhciBIZT1b'@;
put 'XSxCZT17fTtIZS5wdXNoKCIgPG9mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIiksSGUucHVzaCgnICA8bnVtYmVyOmRhdGUtc3R5bGUgc3R5bGU6bmFtZT0iTjM3IiBudW1iZXI6YXV0b21hdGljLW9yZGVyPSJ0cnVlIj5cbicpLEhlLnB1c2goJyAgIDxudW1iZXI6bW9udGggbnVtYmVyOnN0'@;
put 'eWxlPSJsb25nIi8+XG4nKSxIZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxIZS5wdXNoKCcgICA8bnVtYmVyOmRheSBudW1iZXI6c3R5bGU9ImxvbmciLz5cbicpLEhlLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cbiIpLEhlLnB1c2go'@;
put 'IiAgIDxudW1iZXI6eWVhci8+XG4iKSxIZS5wdXNoKCIgIDwvbnVtYmVyOmRhdGUtc3R5bGU+XG4iKTt2YXIgR2U9MDtTZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuIFNlLlNoZWV0c1tjdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtpZihjdCYmY3RbIiFjb2xzIl0pZm9y'@;
put 'KHZhciBidD0wO2J0PGN0WyIhY29scyJdLmxlbmd0aDsrK2J0KWlmKGN0WyIhY29scyJdW2J0XSl7dmFyIEZ0PWN0WyIhY29scyJdW2J0XTtpZihudWxsPT1GdC53aWR0aCYmbnVsbD09RnQud3B4JiZudWxsPT1GdC53Y2gpY29udGludWU7cHUoRnQpLEZ0Lm9kcz1HZTt2YXIgRXQ9Y3RbIiFj'@;
put 'b2xzIl1bYnRdLndweCsicHgiO0hlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNvJytHZSsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNvbHVtbiI+XG4nKSxIZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtY29sdW1uLXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBz'@;
put 'dHlsZTpjb2x1bW4td2lkdGg9IicrRXQrJyIvPlxuJyksSGUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksKytHZX19KTt2YXIgbnQ9MDtTZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuIFNlLlNoZWV0c1tjdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtpZihjdCYmY3Rb'@;
put 'IiFyb3dzIl0pZm9yKHZhciBidD0wO2J0PGN0WyIhcm93cyJdLmxlbmd0aDsrK2J0KWlmKGN0WyIhcm93cyJdW2J0XSl7Y3RbIiFyb3dzIl1bYnRdLm9kcz1udDt2YXIgRnQ9Y3RbIiFyb3dzIl1bYnRdLmhweCsicHgiO0hlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InJvJytu'@;
put 'dCsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLXJvdyI+XG4nKSxIZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtcm93LXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpyb3ctaGVpZ2h0PSInK0Z0KyciLz5cbicpLEhlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrbnR9'@;
put 'fSksSGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0idGExIiBzdHlsZTpmYW1pbHk9InRhYmxlIiBzdHlsZTptYXN0ZXItcGFnZS1uYW1lPSJtcDEiPlxuJyksSGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXByb3BlcnRpZXMgdGFibGU6ZGlzcGxheT0idHJ1ZSIgc3R5bGU6d3Jp'@;
put 'dGluZy1tb2RlPSJsci10YiIvPlxuJyksSGUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksSGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY2UxIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNlbGwiIHN0eWxlOnBhcmVudC1zdHlsZS1uYW1lPSJEZWZhdWx0IiBzdHlsZTpkYXRh'@;
put 'LXN0eWxlLW5hbWU9Ik4zNyIvPlxuJyk7dmFyIGR0PTI7bnQ9MCxTZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuIFNlLlNoZWV0c1tjdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtpZihjdClmb3IodmFyIGJ0PTAsRnQ9MCxFdD1XcyhjdFsiIXJlZiJdKSxUdD1BcnJheS5p'@;
put 'c0FycmF5KGN0KTtidDw9RXQuZS5yOysrYnQpZm9yKEZ0PTA7RnQ8PUV0LmUuYzsrK0Z0KXt2YXIgWnQ9ZGkoe3I6YnQsYzpGdH0pLHBuPVR0PyhjdFtidF18fFtdKVtGdF06Y3RbWnRdO2lmKHBuJiYocG4uc3x8cG4uUikpe3ZhciBLbj1bXTtwbi5zJiZLbi5wdXNoKFtwbiwhMF0pLHBuLlIm'@;
put 'JnBuLlIuZm9yRWFjaChmdW5jdGlvbih1bil7dW4mJnVuLnMmJktuLnB1c2goW3VuLCExXSl9KSxLbi5mb3JFYWNoKGZ1bmN0aW9uKHVuKXt2YXIgcW49dW5bMF0sem49cW4ucyxrbj0iIixlcj17InN0eWxlOm5hbWUiOih1blsxXT8iY2UiOiJUIikrZHQsInN0eWxlOmZhbWlseSI6dW5bMV0/'@;
put 'InRhYmxlLWNlbGwiOiJ0ZXh0In07dW5bMV0mJihlclsic3R5bGU6cGFyZW50LXN0eWxlLW5hbWUiXT0iRGVmYXVsdCIsZXJbInN0eWxlOmRhdGEtc3R5bGUtbmFtZSJdPSJOMCIpO3ZhciB0cj17fSxabj0hMSxWcj17fSxvaT0hMSxraT17fSxMaT0hMTtpZih6bi5jb2xvciYmKFZyWyJmbzpj'@;
put 'b2xvciJdPSIjIitPdSh6bi5jb2xvci5yZ2IpLG9pPSEwKSx6bi5zeiYmKFZyWyJmbzpmb250LXNpemUiXT16bi5zeisicHQiLG9pPSEwKSx6bi5ib2xkJiYoVnJbImZvOmZvbnQtd2VpZ2h0Il09ImJvbGQiLG9pPSEwKSx6bi5pdGFsaWMmJihWclsiZm86Zm9udC1zdHlsZSJdPSJpdGFsaWMi'@;
put 'LG9pPSEwKSx6bi5uYW1lJiYoQmVbem4ubmFtZV18fChCZVt6bi5uYW1lXT16bi5uYW1lLm1hdGNoKC8gLyk/IiZhcG9zOyIrem4ubmFtZSsiJmFwb3M7Ijp6bi5uYW1lKSxWclsic3R5bGU6Zm9udC1uYW1lIl09em4ubmFtZSxvaT0hMCksem4uc3RyaWtlJiYoVnJbInN0eWxlOnRleHQtbGlu'@;
put 'ZS10aHJvdWdoLXN0eWxlIl09InNvbGlkIixWclsic3R5bGU6dGV4dC1saW5lLXRocm91Z2gtdHlwZSJdPSJzaW5nbGUiLG9pPSEwKSx6bi51bmRlcmxpbmUmJihWclsic3R5bGU6dGV4dC11bmRlcmxpbmUtc3R5bGUiXT0ic29saWQiLFZyWyJzdHlsZTp0ZXh0LXVuZGVybGluZS13aWR0aCJd'@;
put 'PSJhdXRvIixWclsic3R5bGU6dGV4dC11bmRlcmxpbmUtY29sb3IiXT0iZm9udC1jb2xvciIsb2k9ITApLHVuWzFdKXtpZih6bi5hbGlnbm1lbnQpe3ZhciBRcj16bi5hbGlnbm1lbnQ7UXIud3JhcFRleHQmJih0clsiZm86d3JhcC1vcHRpb24iXT0id3JhcCIsWm49ITApLFFyLnZlcnRpY2Fs'@;
put 'JiYodHJbInN0eWxlOnZlcnRpY2FsLWFsaWduIl09ImNlbnRlciI9PVFyLnZlcnRpY2FsPyJtaWRkbGUiOlFyLnZlcnRpY2FsLFpuPSEwKSxwZVtRci5ob3Jpem9udGFsXSYmKGtpWyJmbzp0ZXh0LWFsaWduIl09cGVbUXIuaG9yaXpvbnRhbF0sTGk9ITApfXpuLmZnQ29sb3ImJih0clsiZm86'@;
put 'YmFja2dyb3VuZC1jb2xvciJdPSIjIitPdSh6bi5mZ0NvbG9yLnJnYiksWm49ITApfVpuJiYoa24rPVNyKCJzdHlsZTp0YWJsZS1jZWxsLXByb3BlcnRpZXMiLG51bGwsdHIpKSxvaSYmKGtuKz1Tcigic3R5bGU6dGV4dC1wcm9wZXJ0aWVzIixudWxsLFZyKSksTGkmJihrbis9U3IoInN0eWxl'@;
put 'OnBhcmFncmFwaC1wcm9wZXJ0aWVzIixudWxsLGtpKSksSGUucHVzaCgiICAiK1NyKCJzdHlsZTpzdHlsZSIsa24sZXIpKyJcbiIpLHFuLm9kcz1kdCwrK2R0fSl9fX0pLEhlLnB1c2goIiA8L29mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIik7dmFyIEN0PSIgPG9mZmljZTpmb250LWZhY2Ut'@;
put 'ZGVjbHM+XG4iK2x0KEJlKS5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybicgIDxzdHlsZTpmb250LWZhY2Ugc3R5bGU6bmFtZT0iJytjdCsnIiBzdmc6Zm9udC1mYW1pbHk9IicrQmVbY3RdKyciLz5cbid9KS5qb2luKCIiKSsiIDwvb2ZmaWNlOmZvbnQtZmFjZS1kZWNscz5cbiI7dmUucHVzaChD'@;
put 'dCksdmUucHVzaChIZS5qb2luKCIiKSl9KEJlLFNlKSxCZS5wdXNoKCIgIDxvZmZpY2U6Ym9keT5cbiIpLEJlLnB1c2goIiAgICA8b2ZmaWNlOnNwcmVhZHNoZWV0PlxuIik7Zm9yKHZhciBkdD0wO2R0IT1TZS5TaGVldE5hbWVzLmxlbmd0aDsrK2R0KUJlLnB1c2gocmUoU2UuU2hlZXRzW1Nl'@;
put 'LlNoZWV0TmFtZXNbZHRdXSxTZSxkdCkpO3JldHVybiBCZS5wdXNoKCIgICAgPC9vZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKSxCZS5wdXNoKCIgIDwvb2ZmaWNlOmJvZHk+XG4iKSxCZS5wdXNoKCJmb2RzIj09SGUuYm9va1R5cGU/Ijwvb2ZmaWNlOmRvY3VtZW50PiI6Ijwvb2ZmaWNlOmRvY3Vt'@;
put 'ZW50LWNvbnRlbnQ+IiksQmUuam9pbigiIil9fSgpO2Z1bmN0aW9uIF8wKHksUCl7aWYoImZvZHMiPT1QLmJvb2tUeXBlKXJldHVybiB2MCh5LFApO3ZhciBMPXluKCksUT0iIixyZT1bXSxwZT1bXTtyZXR1cm4gWXQoTCxRPSJtaW1ldHlwZSIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVu'@;
put 'ZG9jdW1lbnQuc3ByZWFkc2hlZXQiKSxZdChMLFE9ImNvbnRlbnQueG1sIix2MCh5LFApKSxyZS5wdXNoKFtRLCJ0ZXh0L3htbCJdKSxwZS5wdXNoKFtRLCJDb250ZW50RmlsZSJdKSxZdChMLFE9InN0eWxlcy54bWwiLEsxKHksUCkpLHJlLnB1c2goW1EsInRleHQveG1sIl0pLHBlLnB1c2go'@;
put 'W1EsIlN0eWxlc0ZpbGUiXSksWXQoTCxRPSJtZXRhLnhtbCIsQm4rUzQoKSkscmUucHVzaChbUSwidGV4dC94bWwiXSkscGUucHVzaChbUSwiTWV0YWRhdGFGaWxlIl0pLFl0KEwsUT0ibWFuaWZlc3QucmRmIixmdW5jdGlvbiBHaCh5KXt2YXIgUD1bQm5dO1AucHVzaCgnPHJkZjpSREYgeG1s'@;
put 'bnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj5cbicpO2Zvcih2YXIgTD0wO0whPXkubGVuZ3RoOysrTClQLnB1c2goTDEoeVtMXVswXSx5W0xdWzFdKSksUC5wdXNoKFZvKCIiLHlbTF1bMF0pKTtyZXR1cm4gUC5wdXNoKEwxKCIiLCJEb2N1bWVu'@;
put 'dCIsInBrZyIpKSxQLnB1c2goIjwvcmRmOlJERj4iKSxQLmpvaW4oIiIpfShwZSkpLHJlLnB1c2goW1EsImFwcGxpY2F0aW9uL3JkZit4bWwiXSksWXQoTCxRPSJNRVRBLUlORi9tYW5pZmVzdC54bWwiLGZ1bmN0aW9uIExkKHkpe3ZhciBQPVtCbl07UC5wdXNoKCc8bWFuaWZlc3Q6bWFuaWZl'@;
put 'c3QgeG1sbnM6bWFuaWZlc3Q9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWFuaWZlc3Q6MS4wIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiPlxuJyksUC5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iLyIgbWFuaWZlc3Q6dmVy'@;
put 'c2lvbj0iMS4yIiBtYW5pZmVzdDptZWRpYS10eXBlPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Ii8+XG4nKTtmb3IodmFyIEw9MDtMPHkubGVuZ3RoOysrTClQLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSIn'@;
put 'K3lbTF1bMF0rJyIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iJyt5W0xdWzFdKyciLz5cbicpO3JldHVybiBQLnB1c2goIjwvbWFuaWZlc3Q6bWFuaWZlc3Q+IiksUC5qb2luKCIiKX0ocmUpKSxMfWZ1bmN0aW9uIFgxKHkpe3JldHVybiBmdW5jdGlvbihMLFEpe3ZhciByZT1mdW5jdGlvbiBETSh5'@;
put 'LFApe2lmKCFQKXJldHVybiAwO3ZhciBMPXkuU2hlZXROYW1lcy5pbmRleE9mKFApO2lmKC0xPT1MKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK1ApO3JldHVybiBMfShMLFEuc2hlZXQpO3JldHVybiB5LmZyb21fc2hlZXQoTC5TaGVldHNbTC5TaGVldE5hbWVzW3JlXV0s'@;
put 'USxMKX19dmFyIGxSPVgxKEZ1KSxjUj1YMSh7ZnJvbV9zaGVldDpCbH0pLHVSPVgxKHR5cGVvZiBFOTwidSI/RTk6e30pLGRSPVgxKHR5cGVvZiBNMzwidSI/TTM6e30pLGxfPVgxKHR5cGVvZiBCMTwidSI/QjE6e30pLHk1PVgxKHR5cGVvZiBPbTwidSI/T206e30pLGhSPVgxKHtmcm9tX3No'@;
put 'ZWV0OnhSfSksSU09WDEodHlwZW9mIEIyPCJ1Ij9CMjp7fSksZlI9WDEodHlwZW9mIE80PCJ1Ij9PNDp7fSksc2M9Rig3NzkwMyl8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvQnJvd3NlcmlmeTtpZighc2MpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBjcnlwdG8gZXh0'@;
put 'ZW5zaW9ucyEiKTt2YXIgY189e1NIQTUxMjoic2hhNTEyIixTSEEyNTY6InNoYTI1NiIsU0hBMzg0OiJzaGEzODQiLFNIQTE6InNoYTEiLE1ENToibWQ1IixNRDQ6Im1kNCIsTUQyOiJtZDIifTtmdW5jdGlvbiBlbCh5LFApe3N3aXRjaChQPShQfHwiIikucmVwbGFjZSgvLS9nLCIiKSl7Y2Fz'@;
put 'ZSJTSEEtNTEyIjpjYXNlIlNIQTUxMiI6cmV0dXJuIG5ldyBzYy5jcmVhdGVIYXNoKCJzaGE1MTIiKS51cGRhdGUoeSkuZGlnZXN0KCk7Y2FzZSJTSEEtMSI6Y2FzZSJTSEExIjpyZXR1cm4gbmV3IHNjLmNyZWF0ZUhhc2goInNoYTEiKS51cGRhdGUoeSkuZGlnZXN0KCk7Y2FzZSJNRDIiOnJl'@;
put 'dHVybiBuZXcgc2MuY3JlYXRlSGFzaCgibWQyIikudXBkYXRlKHkpLmRpZ2VzdCgpO2RlZmF1bHQ6aWYoY19bUF0pcmV0dXJuIG5ldyBzYy5jcmVhdGVIYXNoKGNfW1BdKS51cGRhdGUoeSkuZGlnZXN0KCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK1Ap'@;
put 'fX1mdW5jdGlvbiBKMSh5LFAsTCl7aWYoInJjMiI9PUwpdGhyb3ciVW5zdXBwb3J0ZWQgUkMyIjt2YXIgUT1zYy5jcmVhdGVEZWNpcGhlcml2KEx8fCJhZXMtMjU2LWNiYyIseSxQKTtyZXR1cm4gUS5zZXRBdXRvUGFkZGluZyghMSksUX1mdW5jdGlvbiBSNih5KXtyZXR1cm5bKCIwMCIrKDI1'@;
put 'NSZ5KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoeT4+PjgmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoeT4+PjE2JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKHk+Pj4yNCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpXS5qb2luKCIi'@;
put 'KX12YXIgTzY9ZnVuY3Rpb24oeSxQLEwpe2Zvcih2YXIgUT0ic3RyaW5nIj09dHlwZW9mIFA/QnVmZmVyLmZyb20oUCwiaGV4Iik6UCxyZT0ic3RyaW5nIj09dHlwZW9mIHk/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCx5KSk6eSxwZT0ic3RyaW5nIj09dHlwZW9mIEw/'@;
put 'QnVmZmVyLmZyb20oTCwiaGV4Iik6TCxfZT1lbChyZSwiTUQ1IiksdmU9QnVmZmVyLmNvbmNhdChbX2Uuc2xpY2UoMCw1KSxRXSksU2U9MDtTZTw0OysrU2UpdmU9QnVmZmVyLmNvbmNhdChbdmUsdmVdKTt2YXIgSGU9ZWwodmUsIk1ENSIpO3JldHVybihlbChCdWZmZXIuY29uY2F0KFtIZS5z'@;
put 'bGljZSgwLDUpLHBlXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKS5zbGljZSgwLDMyKX0sZ3I9ZnVuY3Rpb24oeSxQLEwpe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgUD9CdWZmZXIuZnJvbShQLCJoZXgiKTpQLHJlPSJzdHJpbmci'@;
put 'PT10eXBlb2YgeT9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLHkpKTp5LHBlPSJzdHJpbmciPT10eXBlb2YgTD9CdWZmZXIuZnJvbShMLCJoZXgiKTpMLF9lPWVsKEJ1ZmZlci5jb25jYXQoW1EscmVdKSwiU0hBMSIpO3JldHVybiBlbChCdWZmZXIuY29uY2F0KFtfZSxw'@;
put 'ZV0pLCJTSEExIil9LGIwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUCgpe31QLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbihjdCl7dGhpcy5faT0wO3ZhciBidD10aGlzLl9idWlsZChjdCwiIik7cmV0dXJuIiI9PT1idD8iIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0'@;
put 'YW5kYWxvbmU9InllcyI/PicrYnR9LFAucHJvdG90eXBlLl9idWlsZD1mdW5jdGlvbihjdCxidCl7aWYodGhpcy5faSsrJTFlNj09MCYmKHRoaXMuX2M9YnRbMF0pLG51bGw9PWN0fHwib2JqZWN0IiE9dHlwZW9mIGN0JiYiZnVuY3Rpb24iIT10eXBlb2YgY3QpbnVsbCE9Y3QmJihidCs9ZnVu'@;
put 'Y3Rpb24geShjdCxidCl7cmV0dXJuIG51bGw9PWN0fHwoY3Q9Y3QudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksYnQmJihjdD1jdC5yZXBsYWNlKC8iL2csIiZxdW90OyIpKSksY3R9KGN0KSk7ZWxzZXtp'@;
put 'ZighY3QubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlhNTCBub2RlIGRvZXMgbm90IGhhdmUgbmFtZTogIitKU09OLnN0cmluZ2lmeShjdCkpO2J0Kz0iPCIrY3QubmFtZTt2YXIgRnQ9dGhpcztidCs9Y3QuYXR0cmlidXRlcyYmUGEoY3QuYXR0cmlidXRlcyl8fCIiLEFycmF5LmlzQXJyYXkoY3Qu'@;
put 'Y2hpbGRyZW4pJiYwIT1jdC5jaGlsZHJlbi5sZW5ndGg/KGJ0Kz0iPiIsY3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihFdCl7YnQ9RnQuX2J1aWxkKEV0LGJ0KX0pLGJ0Kz0iPC8iK2N0Lm5hbWUrIj4iKTpidCs9Ii8+In1yZXR1cm4gYnR9O3ZhciBMPUJ1ZmZlci5mcm9tKFs0LDAsNCww'@;
put 'LDY0LDAsMCwwXSkscGU9e2RhdGFJbnRlZ3JpdHk6e2htYWNLZXk6QnVmZmVyLmZyb20oWzk1LDE3OCwxNzMsMSwxMiwxODUsMjI1LDI0Nl0pLGhtYWNWYWx1ZTpCdWZmZXIuZnJvbShbMTYwLDEwMywxMjcsMiwxNzgsNDQsMTMyLDUxXSl9LGtleTpCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIz'@;
put 'MSwxNzEsMTcyLDIwOCwyMTRdKSx2ZXJpZmllckhhc2g6e2lucHV0OkJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pLHZhbHVlOkJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pfX07ZnVuY3Rpb24gX2UoY3QsYnQsRnQsRXQsVHQsWnQp'@;
put 'e3ZhciBwbj1idC50b0xvd2VyQ2FzZSgpKyItIis4KkV0Lmxlbmd0aDtpZigiQ2hhaW5pbmdNb2RlQ0JDIiE9PUZ0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaXBoZXIgY2hhaW5pbmc6ICIrRnQpO3ZhciBLbj1zY1tjdD8iY3JlYXRlQ2lwaGVyaXYiOiJjcmVhdGVEZWNpcGhlcml2Il0o'@;
put 'cG4rPSItY2JjIixFdCxUdCk7S24uc2V0QXV0b1BhZGRpbmcoITEpO3ZhciB1bj1Lbi51cGRhdGUoWnQpLHFuPVt1bl07dHJ5e3ZhciB6bj1Lbi5maW5hbCgpO3FuLnB1c2goem4pfWNhdGNoe31yZXR1cm4gQnVmZmVyLmNvbmNhdChxbil9ZnVuY3Rpb24gdmUoY3Qpe2N0PWN0LnRvTG93ZXJD'@;
put 'YXNlKCk7dmFyIGJ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKHNjLmdldEhhc2hlcygpLmluZGV4T2YoY3QpPDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK2N0KTt2YXIgRXQ9c2MuY3JlYXRlSGFzaChjdCk7cmV0dXJuIEV0LnVwZGF0ZShC'@;
put 'dWZmZXIuY29uY2F0KGJ0KSksRXQuZGlnZXN0KCl9ZnVuY3Rpb24gU2UoY3QsYnQsRnQsRXQpeyJudW1iZXIiPT10eXBlb2YgRXQmJihFdD1IZShFdCkpO3ZhciBUdD12ZShjdCxidCxFdCk7aWYoVHQubGVuZ3RoPEZ0KXt2YXIgWnQ9QnVmZmVyLmFsbG9jKEZ0LDU0KTtUdC5jb3B5KFp0KSxU'@;
put 'dD1adH1lbHNlIFR0Lmxlbmd0aD5GdCYmKFR0PVR0LnNsaWNlKDAsRnQpKTtyZXR1cm4gVHR9ZnVuY3Rpb24gSGUoY3QsYnQpe3ZhciBGdD1CdWZmZXIuYWxsb2MoYnR8fDQpO3JldHVybiBGdC53cml0ZVVJbnQzMkxFKGN0LDApLEZ0fWZ1bmN0aW9uIEJlKGN0LGJ0LEZ0LEV0LFR0LFp0KXtm'@;
put 'b3IodmFyIEtuPXZlKGJ0LEZ0LEJ1ZmZlci5mcm9tKGN0LCJ1dGYxNmxlIikpLHVuPTA7dW48RXQ7dW4rKylLbj12ZShidCxIZSh1biksS24pO3ZhciB6bj1UdC84O2lmKChLbj12ZShidCxLbixadCkpLmxlbmd0aDx6bil7dmFyIGtuPUJ1ZmZlci5hbGxvYyh6biw1NCk7S24uY29weShrbiks'@;
put 'S249a259ZWxzZSBLbi5sZW5ndGg+em4mJihLbj1Lbi5zbGljZSgwLHpuKSk7cmV0dXJuIEtufXJldHVybiBzYy5yYW5kb21CeXRlc3x8KHNjLnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKGN0KXtmb3IodmFyIGJ0PUJ1ZmZlci5hbGxvYyhjdCksRnQ9MDtGdDxjdDsrK0Z0KWJ0W0Z0XT1NYXRoLmZs'@;
put 'b29yKDI1NipNYXRoLnJhbmRvbSgpKTtyZXR1cm4gYnR9KSxmdW5jdGlvbiBDdChjdCxidCl7aWYoInN0cmluZyI9PXR5cGVvZiBjdClyZXR1cm4gQ3QoQnVmZmVyLmZyb20oY3QsImJpbmFyeSIpLGJ0KTt2YXIgRnQ9c2MucmFuZG9tQnl0ZXMoMzIpLEV0PXtwYWNrYWdlOntjaXBoZXJBbGdv'@;
put 'cml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOnNjLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixrZXlCaXRzOjgqRnQubGVuZ3RofSxrZXk6e2NpcGhlckFsZ29yaXRobToi'@;
put 'QUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6c2MucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LHNwaW5Db3VudDoxLGtleUJpdHM6MjU2fX0sVHQ9ZnVuY3Rpb24gR2UoY3QsYnQsRnQs'@;
put 'RXQsVHQsWnQscG4sS24pe2Zvcih2YXIgdW49W10scW49Y3Q/MDo4LHpuPTAsa249MCxlcj0wO2VyPEtuLmxlbmd0aDspeyhlcj0oa249ZXIpKzQwOTYpPktuLmxlbmd0aCYmKGVyPUtuLmxlbmd0aCk7dmFyIHRyPUtuLnNsaWNlKGtuK3FuLGVyK3FuKSxabj10ci5sZW5ndGglVHQ7Wm4mJih0'@;
put 'cj1CdWZmZXIuY29uY2F0KFt0cixCdWZmZXIuYWxsb2MoVHQtWm4pXSkpO3ZhciBvaT1fZShjdCxidCxGdCxwbixTZShFdCxadCxUdCx6biksdHIpO3VuLnB1c2gob2kpLHpuKyt9dmFyIGtpPUJ1ZmZlci5jb25jYXQodW4pO2lmKGN0KWtpPUJ1ZmZlci5jb25jYXQoW0hlKEtuLmxlbmd0aCw4'@;
put 'KSxraV0pO2Vsc2V7dmFyIExpPUtuLnJlYWRVSW50MzJMRSgwKTtraT1raS5zbGljZSgwLExpKX1yZXR1cm4ga2l9KCEwLEV0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLEV0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsRXQucGFja2FnZS5oYXNoQWxnb3JpdGhtLEV0LnBhY2thZ2UuYmxvY2tT'@;
put 'aXplLEV0LnBhY2thZ2Uuc2FsdFZhbHVlLEZ0LGN0KSxadD1zYy5yYW5kb21CeXRlcyg2NCkscG49U2UoRXQucGFja2FnZS5oYXNoQWxnb3JpdGhtLEV0LnBhY2thZ2Uuc2FsdFZhbHVlLEV0LnBhY2thZ2UuYmxvY2tTaXplLHBlLmRhdGFJbnRlZ3JpdHkuaG1hY0tleSksS249X2UoITAsRXQu'@;
put 'cGFja2FnZS5jaXBoZXJBbGdvcml0aG0sRXQucGFja2FnZS5jaXBoZXJDaGFpbmluZyxGdCxwbixadCksdW49ZnVuY3Rpb24gbnQoY3QsYnQpe2N0PWN0LnRvTG93ZXJDYXNlKCk7dmFyIEZ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2lmKHNjLmdldEhhc2hlcygpLmluZGV4T2YoY3Qp'@;
put 'PDApdGhyb3cgbmV3IEVycm9yKCJITUFDIGFsZ29yaXRobSAnIitjdCsiJyBub3Qgc3VwcG9ydGVkISIpO3ZhciBUdD1zYy5jcmVhdGVIbWFjKGN0LGJ0KTtyZXR1cm4gVHQudXBkYXRlKEJ1ZmZlci5jb25jYXQoRnQpKSxUdC5kaWdlc3QoKX0oRXQucGFja2FnZS5oYXNoQWxnb3JpdGhtLFp0'@;
put 'LFR0KSxxbj1TZShFdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sRXQucGFja2FnZS5zYWx0VmFsdWUsRXQucGFja2FnZS5ibG9ja1NpemUscGUuZGF0YUludGVncml0eS5obWFjVmFsdWUpLHpuPV9lKCEwLEV0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLEV0LnBhY2thZ2UuY2lwaGVyQ2hhaW5p'@;
put 'bmcsRnQscW4sdW4pO0V0LmRhdGFJbnRlZ3JpdHk9e2VuY3J5cHRlZEhtYWNLZXk6S24sZW5jcnlwdGVkSG1hY1ZhbHVlOnpufTt2YXIga249QmUoYnQsRXQua2V5Lmhhc2hBbGdvcml0aG0sRXQua2V5LnNhbHRWYWx1ZSxFdC5rZXkuc3BpbkNvdW50LEV0LmtleS5rZXlCaXRzLHBlLmtleSk7'@;
put 'RXQua2V5LmVuY3J5cHRlZEtleVZhbHVlPV9lKCEwLEV0LmtleS5jaXBoZXJBbGdvcml0aG0sRXQua2V5LmNpcGhlckNoYWluaW5nLGtuLEV0LmtleS5zYWx0VmFsdWUsRnQpO3ZhciBlcj1zYy5yYW5kb21CeXRlcygxNiksdHI9QmUoYnQsRXQua2V5Lmhhc2hBbGdvcml0aG0sRXQua2V5LnNh'@;
put 'bHRWYWx1ZSxFdC5rZXkuc3BpbkNvdW50LEV0LmtleS5rZXlCaXRzLHBlLnZlcmlmaWVySGFzaC5pbnB1dCk7RXQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0PV9lKCEwLEV0LmtleS5jaXBoZXJBbGdvcml0aG0sRXQua2V5LmNpcGhlckNoYWluaW5nLHRyLEV0LmtleS5zYWx0VmFs'@;
put 'dWUsZXIpO3ZhciBabj12ZShFdC5rZXkuaGFzaEFsZ29yaXRobSxlciksVnI9QmUoYnQsRXQua2V5Lmhhc2hBbGdvcml0aG0sRXQua2V5LnNhbHRWYWx1ZSxFdC5rZXkuc3BpbkNvdW50LEV0LmtleS5rZXlCaXRzLHBlLnZlcmlmaWVySGFzaC52YWx1ZSk7RXQua2V5LmVuY3J5cHRlZFZlcmlm'@;
put 'aWVySGFzaFZhbHVlPV9lKCEwLEV0LmtleS5jaXBoZXJBbGdvcml0aG0sRXQua2V5LmNpcGhlckNoYWluaW5nLFZyLEV0LmtleS5zYWx0VmFsdWUsWm4pO3ZhciBvaT1mdW5jdGlvbiBkdChjdCl7dmFyIGJ0PXtuYW1lOiJlbmNyeXB0aW9uIixhdHRyaWJ1dGVzOnt4bWxuczoiaHR0cDovL3Nj'@;
put 'aGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9lbmNyeXB0aW9uIiwieG1sbnM6cCI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiwieG1sbnM6YyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNl'@;
put 'LzIwMDYva2V5RW5jcnlwdG9yL2NlcnRpZmljYXRlIn0sY2hpbGRyZW46W3tuYW1lOiJrZXlEYXRhIixhdHRyaWJ1dGVzOntzYWx0U2l6ZTpjdC5wYWNrYWdlLnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOmN0LnBhY2thZ2UuYmxvY2tTaXplLGtleUJpdHM6Y3QucGFja2FnZS5rZXlCaXRz'@;
put 'LGhhc2hTaXplOmN0LnBhY2thZ2UuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOmN0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmN0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTpjdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOmN0'@;
put 'LnBhY2thZ2Uuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJkYXRhSW50ZWdyaXR5IixhdHRyaWJ1dGVzOntlbmNyeXB0ZWRIbWFjS2V5OmN0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY0tleS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkSG1hY1ZhbHVlOmN0'@;
put 'LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY1ZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJrZXlFbmNyeXB0b3JzIixjaGlsZHJlbjpbe25hbWU6ImtleUVuY3J5cHRvciIsYXR0cmlidXRlczp7dXJpOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2'@;
put 'L2tleUVuY3J5cHRvci9wYXNzd29yZCJ9LGNoaWxkcmVuOlt7bmFtZToicDplbmNyeXB0ZWRLZXkiLGF0dHJpYnV0ZXM6e3NwaW5Db3VudDpjdC5rZXkuc3BpbkNvdW50LHNhbHRTaXplOmN0LmtleS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTpjdC5rZXkuYmxvY2tTaXplLGtleUJpdHM6'@;
put 'Y3Qua2V5LmtleUJpdHMsaGFzaFNpemU6Y3Qua2V5Lmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTpjdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmN0LmtleS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOmN0LmtleS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTpjdC5r'@;
put 'ZXkuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dDpjdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlOmN0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhh'@;
put 'c2hWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkS2V5VmFsdWU6Y3Qua2V5LmVuY3J5cHRlZEtleVZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19XX1dfV19LEV0PShuZXcgUCkuYnVpbGQoYnQpO3JldHVybiBCdWZmZXIuY29uY2F0KFtMLEJ1ZmZlci5mcm9tKEV0LCJ1dGY4Iild'@;
put 'KX0oRXQpLGtpPWplLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gamUudXRpbHMuY2ZiX2FkZChraSwiRW5jcnlwdGlvbkluZm8iLG9pKSxqZS51dGlscy5jZmJfYWRkKGtpLCJFbmNyeXB0ZWRQYWNrYWdlIixUdCksa2l9fSgpO2Z1bmN0aW9uIHc1KHkpe3JldHVybiBmdW5jdGlvbihMKXtmb3Io'@;
put 'dmFyIFE9MDtRIT15Lmxlbmd0aDsrK1Epe3ZhciByZT15W1FdO3ZvaWQgMD09PUxbcmVbMF1dJiYoTFtyZVswXV09cmVbMV0pLCJuIj09PXJlWzJdJiYoTFtyZVswXV09TnVtYmVyKExbcmVbMF1dKSl9fX12YXIgUDY9ZnVuY3Rpb24oeSl7dzUoW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIs'@;
put 'ITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMiLCExXSxbImJvb2tTaGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsi'@;
put 'Ym9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKSh5KSx5LmJvb2tJbWFnZXMmJih5LmNlbGxTdHlsZXM9ITApfSxoXz13NShbWyJjZWxsRGF0ZXMiLCExXSxbImJvb2tTU1QiLCExXSxbImJvb2tUeXBlIiwieGxzeCJdLFsiY29tcHJlc3Np'@;
put 'b24iLCExXSxbIldURiIsITFdXSk7ZnVuY3Rpb24gUk0oeSl7cmV0dXJuIEhpLldTLmluZGV4T2YoeSk+LTE/InNoZWV0IjpIaS5DUyYmeT09SGkuQ1M/ImNoYXJ0IjpIaS5EUyYmeT09SGkuRFM/ImRpYWxvZyI6SGkuTVMmJnk9PUhpLk1TPyJtYWNybyI6eSYmeS5sZW5ndGg/eToic2hlZXQi'@;
put 'fXZhciBGNj1bXTtmdW5jdGlvbiBnUih5LFAsTCxRLHJlLHBlLF9lLHZlLFNlLEhlLEJlLEdlKXt0cnl7cGVbUV09RG8oSnQoeSxMLCEwKSxQKTt2YXIgZHQsbnQ9SXQoeSxQKTtzd2l0Y2godmUpe2Nhc2Uic2hlZXQiOmR0PWZ1bmN0aW9uIE5MKHksUCxMLFEscmUscGUsX2UsdmUpe3JldHVy'@;
put 'biIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIENMKHksUCxMLFEscmUscGUsX2Upe2lmKCF5KXJldHVybiB5O3ZhciB2ZT1QfHx7fTtRfHwoUT17IiFpZCI6e319KSxudWxsIT10ZSYmbnVsbD09dmUuZGVuc2UmJih2ZS5kZW5zZT10ZSk7dmFyIEhlLEN0LGN0LGJ0LEZ0LEV0LFR0LFp0'@;
put 'LHBuLEtuLFNlPXZlLmRlbnNlP1tdOnt9LEJlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LEdlPVtdLG50PSExLGR0PSExLHVuPVtdO3ZlLmJpZmY9MTIsdmVbIiFyb3ciXT0wO3ZhciBxbj0wLHpuPSExLGtuPVtdLGVyPXt9LHRyPXZlLnN1cGJvb2tzfHxyZS5zdXBib29rc3x8W1td'@;
put 'XTtpZih0ci5zaGFyZWRmPWVyLHRyLmFycmF5Zj1rbix0ci5TaGVldE5hbWVzPXJlLlNoZWV0TmFtZXN8fHJlLlNoZWV0cy5tYXAoZnVuY3Rpb24oUXIpe3JldHVybiBRci5uYW1lfSksIXZlLnN1cGJvb2tzJiYodmUuc3VwYm9va3M9dHIscmUuTmFtZXMpKWZvcih2YXIgWm49MDtabjxyZS5O'@;
put 'YW1lcy5sZW5ndGg7Kytabil0clswXVtabisxXT1yZS5OYW1lc1tabl07dmFyIFZyPVtdLG9pPVtdLGtpPSExO2lmKG1mWzE2XT17bjoiQnJ0U2hvcnRSZWFsIixmOmpTfSxIbyh5LGZ1bmN0aW9uKHVyLEFuLHZyKXtpZighZHQpc3dpdGNoKHZyKXtjYXNlIDE0ODpIZT11cjticmVhaztjYXNl'@;
put 'IDA6Q3Q9dXIsdmUuc2hlZXRSb3dzJiZ2ZS5zaGVldFJvd3M8PUN0LnImJihkdD0hMCkscG49SHMoRnQ9Q3QuciksdmVbIiFyb3ciXT1DdC5yLCh1ci5oaWRkZW58fHVyLmhwdHx8bnVsbCE9dXIubGV2ZWwpJiYodXIuaHB0JiYodXIuaHB4PVUxKHVyLmhwdCkpLG9pW3VyLnJdPXVyKTticmVh'@;
put 'aztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpzd2l0Y2goY3Q9e3Q6dXJbMl19LHVyWzJdKXtjYXNlIm4iOmN0LnY9dXJb'@;
put 'MV07YnJlYWs7Y2FzZSJzIjpjdC52PShadD1mNlt1clsxXV0pLnQsdmUuY2VsbFN0eWxlcyYmKGN0LlI9ZnVuY3Rpb24gdUQoeSxQKXtpZih5LlIpcmV0dXJuIHkuUjtpZihQJiZQLkZvbnRzJiYoMSE9eS5yLmxlbmd0aHx8MCE9eS5yWzBdLmljaCkpe3kuUj1bXTt2YXIgTD0wLFE9eS5yW0xd'@;
put 'LHJlPXkucltMKzFdO2ZvcihRLmljaD4wJiZ5LlIucHVzaCh7dDoicyIsdjp5LnQuc2xpY2UoMCxRLmljaCl9KTtMPHkuci5sZW5ndGgtMTsrK0wpeS5SLnB1c2goe3Q6InMiLHY6eS50LnNsaWNlKChRPXkucltMXSkuaWNoLChyZT15LnJbTCsxXSkuaWNoKSxzOlAuRm9udHNbUS5pZm50XX0p'@;
put 'O3JldHVybiB5LlIucHVzaCh7dDoicyIsdjp5LnQuc2xpY2UoKHJlfHxRKS5pY2gpLHM6UC5Gb250c1socmV8fFEpLmlmbnRdfSkseS5SfX0oWnQsX2UpKTticmVhaztjYXNlImIiOmN0LnY9ISF1clsxXTticmVhaztjYXNlImUiOmN0LnY9dXJbMV0sITEhPT12ZS5jZWxsVGV4dCYmKGN0Lnc9'@;
put 'UW9bY3Qudl0pO2JyZWFrO2Nhc2Uic3RyIjpjdC50PSJzIixjdC52PXVyWzFdfWlmKChidD1fZS5DZWxsWGZbdXJbMF0uaVN0eWxlUmVmXSkmJnA2KGN0LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQsdmUsMCxfZSksdmUuY2VsbFN0eWxlcyYmY3QucyYmYnQu'@;
put 'YWxpZ25tZW50JiYoY3Qucy5hbGlnbm1lbnQ9b24oYnQuYWxpZ25tZW50KSksRXQ9LTE9PXVyWzBdLmM/RXQrMTp1clswXS5jLHZlLmRlbnNlPyhTZVtGdF18fChTZVtGdF09W10pLFNlW0Z0XVtFdF09Y3QpOlNlW05zKEV0KStwbl09Y3QsdmUuY2VsbEZvcm11bGEpe2Zvcih6bj0hMSxxbj0w'@;
put 'O3FuPGtuLmxlbmd0aDsrK3FuKXt2YXIgcnI9a25bcW5dO0N0LnI+PXJyWzBdLnMuciYmQ3Qucjw9cnJbMF0uZS5yJiZFdD49cnJbMF0ucy5jJiZFdDw9cnJbMF0uZS5jJiYoY3QuRj1PbyhyclswXSksem49ITApfSF6biYmdXIubGVuZ3RoPjMmJihjdC5mPXVyWzNdKX1pZihCZS5zLnI+Q3Qu'@;
put 'ciYmKEJlLnMucj1DdC5yKSxCZS5zLmM+RXQmJihCZS5zLmM9RXQpLEJlLmUucjxDdC5yJiYoQmUuZS5yPUN0LnIpLEJlLmUuYzxFdCYmKEJlLmUuYz1FdCksdmUuY2VsbERhdGVzJiZidCYmIm4iPT1jdC50JiZ3LmlzX2RhdGUody5fdGFibGVbYnQubnVtRm10SWRdKSl7dmFyIFNuPXcucGFy'@;
put 'c2VfZGF0ZV9jb2RlKGN0LnYpO1NuJiYoY3QudD0iZCIsY3Qudj1uZXcgRGF0ZShTbi55LFNuLm0tMSxTbi5kLFNuLkgsU24uTSxTbi5TLFNuLnUpKX1icmVhaztjYXNlIDE6Y2FzZSAxMjppZighdmUuc2hlZXRTdHVic3x8bnQpYnJlYWs7Y3Q9e3Q6InoiLHY6dm9pZCAwfSxFdD0tMT09dXJb'@;
put 'MF0uYz9FdCsxOnVyWzBdLmMsKGJ0PV9lLkNlbGxYZlt1clswXS5pU3R5bGVSZWZdKSYmcDYoY3QsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJZCx2ZSwwLF9lKSx2ZS5jZWxsU3R5bGVzJiZjdC5zJiZidC5hbGlnbm1lbnQmJihjdC5zLmFsaWdubWVudD1vbihi'@;
put 'dC5hbGlnbm1lbnQpKSx2ZS5kZW5zZT8oU2VbRnRdfHwoU2VbRnRdPVtdKSxTZVtGdF1bRXRdPWN0KTpTZVtOcyhFdCkrcG5dPWN0LEJlLnMucj5DdC5yJiYoQmUucy5yPUN0LnIpLEJlLnMuYz5FdCYmKEJlLnMuYz1FdCksQmUuZS5yPEN0LnImJihCZS5lLnI9Q3QuciksQmUuZS5jPEV0JiYo'@;
put 'QmUuZS5jPUV0KTticmVhaztjYXNlIDE3Njp1bi5wdXNoKHVyKTticmVhaztjYXNlIDQ5NDp2YXIgcHI9UVsiIWlkIl1bdXIucmVsSWRdO2Zvcihwcj8odXIuVGFyZ2V0PXByLlRhcmdldCx1ci5sb2MmJih1ci5UYXJnZXQrPSIjIit1ci5sb2MpLHVyLlJlbD1wcik6IiI9PXVyLnJlbElkJiYo'@;
put 'dXIuVGFyZ2V0PSIjIit1ci5sb2MpLEZ0PXVyLnJmeC5zLnI7RnQ8PXVyLnJmeC5lLnI7KytGdClmb3IoRXQ9dXIucmZ4LnMuYztFdDw9dXIucmZ4LmUuYzsrK0V0KXZlLmRlbnNlPyhTZVtGdF18fChTZVtGdF09W10pLFNlW0Z0XVtFdF18fChTZVtGdF1bRXRdPXt0OiJ6Iix2OnZvaWQgMH0p'@;
put 'LFNlW0Z0XVtFdF0ubD11cik6KFR0PWRpKHtjOkV0LHI6RnR9KSxTZVtUdF18fChTZVtUdF09e3Q6InoiLHY6dm9pZCAwfSksU2VbVHRdLmw9dXIpO2JyZWFrO2Nhc2UgNDI2OmlmKCF2ZS5jZWxsRm9ybXVsYSlicmVhaztrbi5wdXNoKHVyKSwoS249dmUuZGVuc2U/U2VbRnRdW0V0XTpTZVtO'@;
put 'cyhFdCkrcG5dKS5mPXhsKHVyWzFdLEJlLHtyOkN0LnIsYzpFdH0sdHIsdmUpLEtuLkY9T28odXJbMF0pO2JyZWFrO2Nhc2UgNDI3OmlmKCF2ZS5jZWxsRm9ybXVsYSlicmVhaztlcltkaSh1clswXS5zKV09dXJbMV0sKEtuPXZlLmRlbnNlP1NlW0Z0XVtFdF06U2VbTnMoRXQpK3BuXSkuZj14'@;
put 'bCh1clsxXSxCZSx7cjpDdC5yLGM6RXR9LHRyLHZlKTticmVhaztjYXNlIDYwOmlmKCF2ZS5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7dXIuZT49dXIuczspVnJbdXIuZS0tXT17d2lkdGg6dXIudy8yNTYsaGlkZGVuOiEhKDEmdXIuZmxhZ3MpLGxldmVsOnVyLmxldmVsfSxraXx8KGtpPSEwKSxw'@;
put 'dShWclt1ci5lKzFdKTticmVhaztjYXNlIDE2MTpTZVsiIWF1dG9maWx0ZXIiXT17cmVmOk9vKHVyKX07YnJlYWs7Y2FzZSA0NzY6U2VbIiFtYXJnaW5zIl09dXI7YnJlYWs7Y2FzZSAxNDc6cmUuU2hlZXRzW0xdfHwocmUuU2hlZXRzW0xdPXt9KSx1ci5uYW1lJiYocmUuU2hlZXRzW0xdLkNv'@;
put 'ZGVOYW1lPXVyLm5hbWUpLCh1ci5hYm92ZXx8dXIubGVmdCkmJihTZVsiIW91dGxpbmUiXT17YWJvdmU6dXIuYWJvdmUsbGVmdDp1ci5sZWZ0fSk7YnJlYWs7Y2FzZSAxMzc6cmUuVmlld3N8fChyZS5WaWV3cz1be31dKSxyZS5WaWV3c1swXXx8KHJlLlZpZXdzWzBdPXt9KSx1ci5SVEwmJihy'@;
put 'ZS5WaWV3c1swXS5SVEw9ITApLHVyLmdyaWR8fChyZS5WaWV3c1swXS5ncmlkPSExLFNlWyIhZ3JpZGxpbmVzIl09ITEpO2JyZWFrO2Nhc2UgNDg1OlNlWyIhc2hlZXRGb3JtYXQiXT11cjticmVhaztjYXNlIDY0OmNhc2UgMTA1MzohZnVuY3Rpb24geUwoeSxQLEwsUSl7aWYoUCl7dmFyIHJl'@;
put 'PXtyZWY6UC5zcXJmeCx0OlAudH07UC5vcCYmKHJlLm9wPVAub3ApO3ZhciBwZT0iIixfZT0iIix2ZT1QLnNxcmZ4PyJzdHJpbmciPT10eXBlb2YgUC5zcXJmeD9PaShQLnNxcmZ4LnNwbGl0KCIsIilbMF0pOlAuc3FyZng6bnVsbDtpZihQLmYxJiYocGU9eGwoUC5mMSx2ZSxudWxsLEwsUSwh'@;
put 'MCkpLFAuZjImJihfZT14bChQLmYyLHZlLG51bGwsTCxRLCEwKSksUC5vcCYmWyJJTiIsIk9UIl0uaW5kZXhPZihQLm9wKT49LTEpcmUubWluPXBlLHJlLm1heD1fZTtlbHNlIGlmKFAub3ApcmUudj1wZTtlbHNlIHRyeXtzd2l0Y2goUC50KXtjYXNlIkxpc3QiOmlmKCJQdGdTdHIiPT09UC5m'@;
put 'MVswXVswXVswXSYmMT09UC5mMVswXS5sZW5ndGgpe3JlLmw9UC5mMVswXVswXVsxXS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpyZS5mPXBlfX1jYXRjaHt9eVsiIXZhbGlkYXRpb25zIl18fCh5WyIhdmFsaWRhdGlvbnMiXT1bXSkseVsiIXZhbGlkYXRpb25zIl0ucHVzaChyZSl9'@;
put 'fShTZSx1cix0cix2ZSk7YnJlYWs7Y2FzZSAxNTE6U2VbIiFmcmVlemUiXT11clswXTticmVhaztjYXNlIDE1MjpTZVsiIXNlbCJdPXVyO2JyZWFrO2Nhc2UgMTc1OmNhc2UgNjQ0OmNhc2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAx'@;
put 'MDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDQ5OmNhc2UgNTg5OmNhc2UgNjA3OmNhc2UgNTY0OmNhc2UgMTA1NTpjYXNlIDE2ODpjYXNlIDE3NDpjYXNlIDExODA6Y2FzZSA0OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2Ug'@;
put 'MTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDY2MTpjYXNlIDYzOTpjYXNlIDQ3ODpjYXNlIDUzNzpjYXNlIDQ3NzpjYXNlIDUzNjpjYXNlIDExMDM6Y2FzZSA2ODA6Y2FzZSAxMTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2Fz'@;
put 'ZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNhc2UgNTA6Y2FzZSAyMDcwOmNhc2UgMTA0NTpicmVhaztjYXNlIDM1Om50PSEwO2JyZWFrO2Nhc2UgMzY6bnQ9ITE7YnJlYWs7Y2FzZSAzNzpHZS5wdXNoKEFuKSxudD0hMDticmVhaztjYXNlIDM4OkdlLnBvcCgpLG50PSExO2JyZWFrO2RlZmF1'@;
put 'bHQ6aWYoISgoQW58fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChBbnx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIW50fHx2ZS5XVEYmJiJCcnRBQ0JlZ2luIiE9R2VbR2UubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrdnIrIiAiK0FuKX19LHZl'@;
put 'KSxkZWxldGUgdmUuc3VwYm9va3MsZGVsZXRlIHZlWyIhcm93Il0sIVNlWyIhcmVmIl0mJihCZS5zLnI8MmU2fHxIZSYmKEhlLmUucj4wfHxIZS5lLmM+MHx8SGUucy5yPjB8fEhlLnMuYz4wKSkmJihTZVsiIXJlZiJdPU9vKEhlfHxCZSkpLHZlLnNoZWV0Um93cyYmU2VbIiFyZWYiXSl7dmFy'@;
put 'IExpPU9pKFNlWyIhcmVmIl0pO3ZlLnNoZWV0Um93czw9K0xpLmUuciYmKExpLmUucj12ZS5zaGVldFJvd3MtMSxMaS5lLnI+QmUuZS5yJiYoTGkuZS5yPUJlLmUuciksTGkuZS5yPExpLnMuciYmKExpLnMucj1MaS5lLnIpLExpLmUuYz5CZS5lLmMmJihMaS5lLmM9QmUuZS5jKSxMaS5lLmM8'@;
put 'TGkucy5jJiYoTGkucy5jPUxpLmUuYyksU2VbIiFmdWxscmVmIl09U2VbIiFyZWYiXSxTZVsiIXJlZiJdPU9vKExpKSl9cmV0dXJuIHVuLmxlbmd0aD4wJiYoU2VbIiFtZXJnZXMiXT11biksVnIubGVuZ3RoPjAmJihTZVsiIWNvbHMiXT1Wciksb2kubGVuZ3RoPjAmJihTZVsiIXJvd3MiXT1v'@;
put 'aSksU2V9KHksUSxMLHJlLHBlLDAsdmUpOmZ1bmN0aW9uIEtaKHksUCxMLFEscmUscGUsX2Upe2lmKCF5KXJldHVybiB5O1F8fChRPXsiIWlkIjp7fX0pLG51bGwhPXRlJiZudWxsPT1QLmRlbnNlJiYoUC5kZW5zZT10ZSk7dmFyIHZlPVAuZGVuc2U/W106e30sU2U9e3M6e3I6MmU2LGM6MmU2'@;
put 'fSxlOntyOjAsYzowfX0sSGU9IiIsQmU9IiIsR2U9eS5tYXRjaChhNSk7R2U/KEhlPXkuc2xpY2UoMCxHZS5pbmRleCksQmU9eS5zbGljZShHZS5pbmRleCtHZVswXS5sZW5ndGgpKTpIZT1CZT15O3ZhciBudD1CZS5sYXN0SW5kZXhPZigiZXh0THN0IiksQ3Q9KC0xPT1udHx8QmUuc2xpY2Uo'@;
put 'bnQpLEhlLm1hdGNoKHh2KSk7Q3Q/djYoQ3RbMF0sMCxyZSxMKTooQ3Q9SGUubWF0Y2goREkpKSYmZnVuY3Rpb24gX1MoeSxQLEwsUSxyZSxwZSxfZSl7djYoeS5zbGljZSgwLHkuaW5kZXhPZigiPiIpKSwwLFEscmUpO3ZhciB2ZT1QLm1hdGNoKF82KTtpZih2ZSl7dmFyIEhlPVUyKGxuKHZl'@;
put 'WzBdKSxwZSxfZSk7TFsiIXRhYmNvbG9yIl09SGV9aWYoKHZlPVAubWF0Y2gobVMpKSYmbG4odmVbMF0pLmZpdFRvUGFnZSYmKExbIiFwcmludCJdfHwoTFsiIXByaW50Il09e30pLExbIiFwcmludCJdLnByb3BzfHwoTFsiIXByaW50Il0ucHJvcHM9e30pLExbIiFwcmludCJdLnByb3BzLmZp'@;
put 'dHx8KExbIiFwcmludCJdLnByb3BzLmZpdD17fSksbnVsbD09TFsiIXByaW50Il0ucHJvcHMuZml0LmhlaWdodCYmKExbIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQ9MSksbnVsbD09TFsiIXByaW50Il0ucHJvcHMuZml0LndpZHRoJiYoTFsiIXByaW50Il0ucHJvcHMuZml0LndpZHRoPTEp'@;
put 'KSx2ZT1QLm1hdGNoKHZTKSl7TFsiIW91dGxpbmUiXT17fTt2YXIgR2U9bG4odmVbMF0pO0dlLnN1bW1hcnlCZWxvdyYmKExbIiFvdXRsaW5lIl0uYWJvdmU9IXlyKEdlLnN1bW1hcnlCZWxvdykpLEdlLnN1bW1hcnlSaWdodCYmKExbIiFvdXRsaW5lIl0ubGVmdD0heXIoR2Uuc3VtbWFyeVJp'@;
put 'Z2h0KSl9fShDdFswXSxDdFsxXXx8IiIsdmUscmUsTCxfZSxwZSk7dmFyIGN0PShIZS5tYXRjaCgvPCg/Olx3KjopP2RpbWVuc2lvbi8pfHx7aW5kZXg6LTF9KS5pbmRleDtpZihjdD4wKXt2YXIgYnQ9SGUuc2xpY2UoY3QsY3QrNTApLm1hdGNoKCRaKTtidCYmKCFQfHwhUC5ub2RpbSkmJmZ1'@;
put 'bmN0aW9uIEFJKHksUCl7dmFyIEw9T2koUCk7TC5zLnI8PUwuZS5yJiZMLnMuYzw9TC5lLmMmJkwucy5yPj0wJiZMLnMuYz49MCYmKHlbIiFyZWYiXT1PbyhMKSl9KHZlLGJ0WzFdKX12YXIgRnQ9SGUubWF0Y2goSUkpO0Z0JiZGdFsxXSYmZnVuY3Rpb24gZVkoeSxQLEwsUSl7TC5WaWV3c3x8'@;
put 'KEwuVmlld3M9W3t9XSk7dmFyIHJlPTA7eS5yZXBsYWNlKHpJLGZ1bmN0aW9uKHBlLF9lKXt2YXIgdmU9bG4ocGUpO2lmKEwuVmlld3NbUV18fChMLlZpZXdzW1FdPXt9KSx5cih2ZS5yaWdodFRvTGVmdCkmJihMLlZpZXdzW1FdLlJUTD0hMCksdmUuc2hvd0dyaWRMaW5lcyYmKEwuVmlld3Nb'@;
put 'UV0uZ3JpZD15cih2ZS5zaG93R3JpZExpbmVzKSxudWxsPT1QWyIhZ3JpZGxpbmVzIl0mJihQWyIhZ3JpZGxpbmVzIl09eXIodmUuc2hvd0dyaWRMaW5lcykpKSwrdmUuem9vbVNjYWxlJiYoTC5WaWV3c1tRXS56b29tPSt2ZS56b29tU2NhbGUpLHZlLnZpZXcmJihMLlZpZXdzW1FdLnZpZXc9'@;
put 'dmUudmlldyksMT09KytyZSYmIi8+IiE9cGUuc2xpY2UoLTIpKXt2YXIgU2U9eS5zbGljZShfZStwZS5sZW5ndGgpLEhlPVNlLm1hdGNoKC88XC8oPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKCFIZSlyZXR1cm4iIjt2YXIgQmU9KFNlPVNlLnNsaWNlKDAsSGUu'@;
put 'aW5kZXgpKS5tYXRjaCgvPCg/Olx3Oik/cGFuZSg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKEJlKXt2YXIgR2U9bG4oQmVbMF0pOyJmcm96ZW4iPT1HZS5zdGF0ZT9QWyIhZnJlZXplIl09TnMoK0dlLnhTcGxpdHx8MCkrSHMoK0dlLnlTcGxpdHx8MCk6R2UudG9wTGVmdENlbGwmJihQWyIh'@;
put 'ZnJlZXplIl09R2UudG9wTGVmdENlbGwpfXZhciBudD1TZS5tYXRjaCgvPCg/Olx3Oik/c2VsZWN0aW9uKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYobnQpe3ZhciBkdD1sbihudFswXSk7aWYoZHQuYWN0aXZlQ2VsbCYmKFBbIiFzZWwiXT17Y2VsbDpkdC5hY3RpdmVDZWxsfSksZHQuc3Fy'@;
put 'ZWYpe3ZhciBDdD1kdC5zcXJlZi5yZXBsYWNlKC9ccy4qJC8sIiIpO1BbIiFzZWwiXXx8KFBbIiFzZWwiXT17Y2VsbDpkaShXcyhDdCkucyl9KSxQWyIhc2VsIl0ucmFuZ2U9ZHQuc3FyZWZ9fX1yZXR1cm4iIn0pfShGdFsxXSx2ZSxyZSxMKTt2YXIgRXQ9SGUubWF0Y2goZmYpLFR0PVtdO2lm'@;
put 'KFAuY2VsbFN0eWxlcyl7dmFyIFp0PUhlLm1hdGNoKFN2KTtadCYmZnVuY3Rpb24gRzMoeSxQLEwpe2Zvcih2YXIgUT0hMSxyZT0wO3JlIT1QLmxlbmd0aDsrK3JlKXt2YXIgcGU9bG4oUFtyZV0sITApO3BlLmhpZGRlbiYmKHBlLmhpZGRlbj15cihwZS5oaWRkZW4pKTt2YXIgX2U9cGFyc2VJ'@;
put 'bnQocGUubWluLDEwKS0xLHZlPXBhcnNlSW50KHBlLm1heCwxMCktMTtmb3IocGUub3V0bGluZUxldmVsJiYocGUubGV2ZWw9K3BlLm91dGxpbmVMZXZlbHx8MCksZGVsZXRlIHBlLm1pbixkZWxldGUgcGUubWF4LHBlLndpZHRoPStwZS53aWR0aCwhUSYmcGUud2lkdGgmJihRPSEwKSxwdShw'@;
put 'ZSkscGUuc3R5bGUmJihwZS5zPWM1KHBlLnN0eWxlLEwpKTtfZTw9dmU7KXlbX2UrK109b24ocGUpfX0oVHQsWnQsX2UpfWlmKEdlJiZaSShHZVsxXSxMLHZlLFAsU2UscGUsX2UpLFAuY2FsbGJhY2spcmV0dXJuIHZlO3ZhciBwbj1CZS5tYXRjaChUSSk7cG4mJih2ZVsiIXByb3RlY3QiXT1m'@;
put 'dW5jdGlvbiB0dCh5KXt2YXIgUD1sbih5LCEwLCEwKSxMPXt9O2lmKHlyKFAuc2hlZXQpKXJldHVybiBBdi5mb3JFYWNoKGZ1bmN0aW9uKFEpe0xbUV09bnVsbCE9UFtRXSYmeXIoUFtRXSl9KSxUdi5mb3JFYWNoKGZ1bmN0aW9uKFEpe0xbUV09bnVsbD09UFtRXXx8eXIoUFtRXSl9KSxQLmFs'@;
put 'Z29yaXRobU5hbWUmJihMLmVuY3J5cHRpb249e2FsZ286UC5hbGdvcml0aG1OYW1lLGhhc2g6UC5oYXNoVmFsdWUsc2FsdDpQLnNhbHRWYWx1ZSxzcGluOitQLnNwaW5Db3VudHx8MWU1fSksTH0ocG5bMF0pKTt2YXIgS249QmUubWF0Y2goZzYpO0tuJiYodmVbIiFhdXRvZmlsdGVyIl09ZnVu'@;
put 'Y3Rpb24gbDUoeSl7cmV0dXJue3JlZjooeS5tYXRjaCgvcmVmPSIoW14iXSopIi8pfHxbXSlbMV19fShLblswXSkpO3ZhciB1bj1bXSxxbj1CZS5tYXRjaChDdik7aWYocW4pZm9yKGN0PTA7Y3QhPXFuLmxlbmd0aDsrK2N0KXVuW2N0XT1PaShxbltjdF0uc2xpY2UocW5bY3RdLmluZGV4T2Yo'@;
put 'JyInKSsxKSk7dmFyIHpuPSgtMT09bnQ/QmU6QmUuc2xpY2UoMCxudCkpLm1hdGNoKG02KTt6biYmKHZlWyIhY29uZGZtdCJdPVtdLmNvbmNhdC5hcHBseShbXSx6bi5tYXAoZnVuY3Rpb24oQW4pe3JldHVybiBMUyhBbixQLHBlLF9lKX0pKSksbnQ+LTEmJih6bj1CZS5zbGljZShudCkubWF0'@;
put 'Y2gobTYpKSYmKHZlWyIhY29uZGZtdCJdfHwodmVbIiFjb25kZm10Il09W10pLHZlWyIhY29uZGZtdCJdPXZlWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseSh2ZVsiIWNvbmRmbXQiXSx6bi5tYXAoZnVuY3Rpb24oQW4pe3JldHVybiBMUyhBbixQLHBlLF9lLCEwKX0pKSk7dmFyIGtuPSgtMT09'@;
put 'bnQ/QmU6QmUuc2xpY2UoMCxudCkpLm1hdGNoKGhTKTtrbiYmKHZlWyIhdmFsaWRhdGlvbnMiXT1UUyhrblswXSxQKSksbnQ+LTEmJihrbj1CZS5zbGljZShudCkubWF0Y2goaFMpKSYmKHZlWyIhdmFsaWRhdGlvbnMiXXx8KHZlWyIhdmFsaWRhdGlvbnMiXT1bXSksdmVbIiF2YWxpZGF0aW9u'@;
put 'cyJdPXZlWyIhdmFsaWRhdGlvbnMiXS5jb25jYXQoVFMoa25bMF0sUCwhMCkpKTt2YXIgZXI9QmUubWF0Y2goZFMpO2VyJiZmdW5jdGlvbiBNUyh5LFAsTCl7Zm9yKHZhciBRPUFycmF5LmlzQXJyYXkoeSkscmU9MDtyZSE9UC5sZW5ndGg7KytyZSl7dmFyIHBlPWxuKFBpKFBbcmVdKSwhMCk7'@;
put 'aWYoIXBlLnJlZilyZXR1cm47dmFyIF9lPSgoTHx8e30pWyIhaWQiXXx8W10pW3BlLmlkXTtfZT8ocGUuVGFyZ2V0PV9lLlRhcmdldCxwZS5sb2NhdGlvbiYmKHBlLlRhcmdldCs9IiMiK3hyKHBlLmxvY2F0aW9uKSkpOihwZS5UYXJnZXQ9IiMiK3hyKHBlLmxvY2F0aW9uKSxfZT17VGFyZ2V0'@;
put 'OnBlLlRhcmdldCxUYXJnZXRNb2RlOiJJbnRlcm5hbCJ9KSxwZS5SZWw9X2UscGUudG9vbHRpcCYmKHBlLlRvb2x0aXA9cGUudG9vbHRpcCxkZWxldGUgcGUudG9vbHRpcCk7Zm9yKHZhciB2ZT1PaShwZS5yZWYpLFNlPXZlLnMucjtTZTw9dmUuZS5yOysrU2UpZm9yKHZhciBIZT12ZS5zLmM7'@;
put 'SGU8PXZlLmUuYzsrK0hlKXt2YXIgQmU9ZGkoe2M6SGUscjpTZX0pO1E/KHlbU2VdfHwoeVtTZV09W10pLHlbU2VdW0hlXXx8KHlbU2VdW0hlXT17dDoieiIsdjp2b2lkIDB9KSx5W1NlXVtIZV0ubD1wZSk6KHlbQmVdfHwoeVtCZV09e3Q6InoiLHY6dm9pZCAwfSkseVtCZV0ubD1wZSl9fX0o'@;
put 'dmUsZXIsUSk7dmFyIHRyPUJlLm1hdGNoKExJKTt0ciYmZnVuY3Rpb24gUEkoeSxQKXt2YXIgTD1sbih5LCExLCEwKTtQWyIhcHJpbnQiXXx8KFBbIiFwcmludCJdPXt9KSxQWyIhcHJpbnQiXS5wcm9wc3x8KFBbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgUT1QWyIhcHJpbnQiXS5wcm9wcztM'@;
put 'LmdyaWRMaW5lcyYmKFEuZ3JpZGxpbmVzPXlyKEwuZ3JpZExpbmVzKSksbnVsbCE9TC5ob3Jpem9udGFsQ2VudGVyZWQmJihRLmNlbnRlclg9eXIoTC5ob3Jpem9udGFsQ2VudGVyZWQpKSxudWxsIT1MLnZlcnRpY2FsQ2VudGVyZWQmJihRLmNlbnRlclk9eXIoTC52ZXJ0aWNhbENlbnRlcmVk'@;
put 'KSl9KHRyWzBdLHZlKTt2YXIgWm49QmUubWF0Y2goTXYpO1puJiYoKHZlWyIhcHJpbnQiXXx8KHZlWyIhcHJpbnQiXT17fSkpLm1hcmdpbnM9dmVbIiFtYXJnaW5zIl09eFMobG4oWm5bMF0pKSk7dmFyIFZyPUJlLm1hdGNoKFczKTtWciYmZnVuY3Rpb24geVMoeSxQKXt2YXIgTD1sbih5LCEx'@;
put 'LCEwKTtkZWxldGUgTC5pZCxkZWxldGUgTFswXSxQWyIhcHJpbnQiXXx8KFBbIiFwcmludCJdPXt9KSxQWyIhcHJpbnQiXS5wcm9wc3x8KFBbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgUT1QWyIhcHJpbnQiXS5wcm9wcztMLm9yaWVudGF0aW9uJiYoUS5vcmllbnRhdGlvbj1MLm9yaWVudGF0'@;
put 'aW9uKSxMLnNjYWxlJiYoUS5zY2FsZT0rTC5zY2FsZSksK0wuZml0VG9IZWlnaHQ+PTAmJigoUS5maXR8fChRLmZpdD17fSkpLmhlaWdodD0rTC5maXRUb0hlaWdodCksK0wuZml0VG9XaWR0aD49MCYmKChRLmZpdHx8KFEuZml0PXt9KSkud2lkdGg9K0wuZml0VG9XaWR0aCksTC5wYXBlckhl'@;
put 'aWdodCYmTC5wYXBlcldpZHRoP1EucGFwZXI9e3dpZHRoOkwucGFwZXJXaWR0aCxoZWlnaHQ6TC5wYXBlckhlaWdodH06TC5wYXBlclNpemUmJihRLnBhcGVyPVFtW1EucGFwZXI9K0wucGFwZXJTaXplXXx8US5wYXBlciksTC5ob3Jpem9udGFsRHBpP1EuZHBpPStMLmhvcml6b250YWxEcGk6'@;
put 'TC52ZXJ0aWNhbERwaSYmKFEuZHBpPStMLnZlcnRpY2FsRHBpKSwiYXV0b21hdGljIiE9KEwuZmlyc3RQYWdlTnVtYmVyfHwiYXV0b21hdGljIikmJihRLmZpcnN0PStMLmZpcnN0UGFnZU51bWJlcikseXIoTC5ibGFja0FuZFdoaXRlKSYmKFEuYnc9ITApLHlyKEwuZHJhZnQpJiYoUS5kcmFm'@;
put 'dD0hMCksIm92ZXJUaGVuRG93biI9PUwucGFnZU9yZGVyJiYoUS5vcmRlcj0ib3ZlciIpLGt2W0wuY2VsbENvbW1lbnRzXSYmKFEuY29tbWVudHM9a3ZbTC5jZWxsQ29tbWVudHNdKSxiU1tMLmVycm9yc10mJihRLmVycm9ycz1iU1tMLmVycm9yc10pfShWclswXSx2ZSk7dmFyIG9pPUJlLm1h'@;
put 'dGNoKHFaKTtvaSYmZnVuY3Rpb24gSXYoeSxQKXtpZihQWyIhcHJpbnQiXXx8KFBbIiFwcmludCJdPXt9KSx5WzFdKXt2YXIgTD0iIixRPTA7eVsxXS5yZXBsYWNlKCR0LGZ1bmN0aW9uKHJlLHBlKXtpZigiLyIhPXJlLmNoYXJBdCgxKSlMPXJlLnNsaWNlKDEsLTEpLFE9cGUrcmUubGVuZ3Ro'@;
put 'O2Vsc2UgaWYoTCl7dmFyIF9lPUwubWF0Y2goL0hlYWRlci8pPyJoZWFkZXIiOiJmb290ZXIiLHZlPUwucmVwbGFjZSgvSGVhZGVyfEZvb3Rlci8sIiIpO0w9IiIsUFsiIXByaW50Il1bX2VdfHwoUFsiIXByaW50Il1bX2VdPXt9KSxQWyIhcHJpbnQiXVtfZV1bdmVdPXhyKFBpKHlbMV0uc2xp'@;
put 'Y2UoUSxwZSkpKX19KX19KG9pLHZlKTt2YXIga2k9QmUubWF0Y2goV2QpO2tpJiYoKHZlWyIhcHJpbnQiXXx8KHZlWyIhcHJpbnQiXT17fSkpLnJvd0JyZWFrcz12ZVsiIXJvd0JyZWFrcyJdPWZ1bmN0aW9uIFNTKHkpe3ZhciBQPVtdO3JldHVybih5Lm1hdGNoKENTKXx8W10pLmZvckVhY2go'@;
put 'ZnVuY3Rpb24oTCl7dmFyIFE9bG4oTCk7UC5wdXNoKHtSOitRLmlkfSl9KSxQfShraVswXSkpO3ZhciBMaT1CZS5tYXRjaChmUyk7TGkmJigodmVbIiFwcmludCJdfHwodmVbIiFwcmludCJdPXt9KSkuY29sQnJlYWtzPXZlWyIhY29sQnJlYWtzIl09ZnVuY3Rpb24gSEkoeSl7dmFyIFA9W107'@;
put 'cmV0dXJuKHkubWF0Y2goQ1MpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1sbihMKTtQLnB1c2goe0M6K1EuaWR9KX0pLFB9KExpWzBdKSk7dmFyIFFyPVtdO2lmKChRcj1CZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJih2ZVsiIXJlbCJdPVFyWzFdKSwoUXI9QmUu'@;
put 'bWF0Y2goL2xlZ2FjeURyYXdpbmcgcjppZD0iKC4qPykiLykpJiYodmVbIiFsZWdyZWwiXT1RclsxXSksKFFyPUJlLm1hdGNoKGhmKSkmJih2ZVsiIWN0cmxpZCJdPVFyLm1hcChmdW5jdGlvbihBbil7cmV0dXJuIGxuKEFuKX0pKSwoUXI9QmUubWF0Y2goRXYpKSYmZnVuY3Rpb24gZ1MoeSxQ'@;
put 'KXt5WyIhdGFibGVyZWZzIl18fCh5WyIhdGFibGVyZWZzIl09W10pLChQLm1hdGNoKHBTKXx8W10pLmZvckVhY2goZnVuY3Rpb24oTCl7eVsiIXRhYmxlcmVmcyJdLnB1c2gobG4oTCkuaWQpfSl9KHZlLFFyWzFdKSxQJiZQLm5vZGltJiYoU2Uucy5jPVNlLnMucj0wKSwhdmVbIiFyZWYiXSYm'@;
put 'U2UuZS5jPj1TZS5zLmMmJlNlLmUucj49U2Uucy5yJiYodmVbIiFyZWYiXT1PbyhTZSkpLFAuc2hlZXRSb3dzPjAmJnZlWyIhcmVmIl0pe3ZhciB1cj1PaSh2ZVsiIXJlZiJdKTtQLnNoZWV0Um93czw9K3VyLmUuciYmKHVyLmUucj1QLnNoZWV0Um93cy0xLHVyLmUucj5TZS5lLnImJih1ci5l'@;
put 'LnI9U2UuZS5yKSx1ci5lLnI8dXIucy5yJiYodXIucy5yPXVyLmUuciksdXIuZS5jPlNlLmUuYyYmKHVyLmUuYz1TZS5lLmMpLHVyLmUuYzx1ci5zLmMmJih1ci5zLmM9dXIuZS5jKSx2ZVsiIWZ1bGxyZWYiXT12ZVsiIXJlZiJdLHZlWyIhcmVmIl09T28odXIpKX1yZXR1cm4gRXQmJih2ZVsi'@;
put 'IXNoZWV0Rm9ybWF0Il09ZnVuY3Rpb24gWFooeSl7dmFyIFA9e30sTD17fSxRPSExLHJlPXt9LHBlPSExO3JldHVybiB5LmRlZmF1bHRSb3dIZWlnaHQmJihRPSEwLEwuaHB0PXBhcnNlRmxvYXQoeS5kZWZhdWx0Um93SGVpZ2h0KSkseS56ZXJvSGVpZ2h0JiYoUT0hMCxMLmhpZGRlbj15cih5'@;
put 'Lnplcm9IZWlnaHQpKSx5LmJhc2VDb2xXaWR0aD8ocGU9ITAscmUud2NoPXBhcnNlRmxvYXQoeS5iYXNlQ29sV2lkdGgpKTp5LmRlZmF1bHRDb2xXaWR0aCYmKHBlPSEwLHJlLndjaD1wYXJzZUZsb2F0KHkuZGVmYXVsdENvbFdpZHRoKS01L3BsKSx5Lm91dGxpbmVMZXZlbENvbCYmKFAuY29s'@;
put 'b3V0bGluZT1wYXJzZUludCh5Lm91dGxpbmVMZXZlbENvbCkpLHkub3V0bGluZUxldmVsUm93JiYoUC5yb3dvdXRsaW5lPXBhcnNlSW50KHkub3V0bGluZUxldmVsUm93KSkseS50aGlja0JvdHRvbSYmKFAuYm90dGhpY2s9eXIoeS50aGlja0JvdHRvbSkpLHkudGhpY2tUb3AmJihQLnRvcHRo'@;
put 'aWNrPXlyKHkudGhpY2tUb3ApKSx5LmR5RGVzY2VudCYmKFAuZHlEZXNjZW50PXBhcnNlRmxvYXQoeS5keURlc2NlbnQpKSxRJiYoSTMoTCksUC5yb3c9TCkscGUmJihwdShyZSksUC5jb2w9cmUpLFB9KGxuKEV0WzBdKSkpLFR0Lmxlbmd0aD4wJiYodmVbIiFjb2xzIl09VHQpLHVuLmxlbmd0'@;
put 'aD4wJiYodmVbIiFtZXJnZXMiXT11biksUVsiIWlkIl1bdmVbIiFyZWwiXV0mJih2ZVsiIWRyYXdlbCJdPVFbIiFpZCJdW3ZlWyIhcmVsIl1dKSxRWyIhaWQiXVt2ZVsiIWxlZ3JlbCJdXSYmKHZlWyIhbGVnZHJhd2VsIl09UVsiIWlkIl1bdmVbIiFsZWdyZWwiXV0pLCh2ZVsiIWN0cmxpZCJd'@;
put 'fHxbXSkuZm9yRWFjaChmdW5jdGlvbihBbil7QW4ucmVsPVFbIiFpZCJdW0FuLmlkXX0pLG51bGw9PXZlWyIhZ3JpZGxpbmVzIl0mJih2ZVsiIWdyaWRsaW5lcyJdPSEwKSx2ZX0oeSxRLEwscmUscGUsX2UsdmUpfShudCxQLHJlLFNlLHBlW1FdLEhlLEJlLEdlKTticmVhaztjYXNlImNoYXJ0'@;
put 'IjpkdD1mdW5jdGlvbiBWTCh5LFAsTCxRLHJlLHBlLF9lLHZlKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiB0cCh5LFAsTCxRLHJlKXtpZigheSlyZXR1cm4geTtRfHwoUT17IiFpZCI6e319KTt2YXIgcGU9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJl'@;
put 'bCI6IiJ9LF9lPVtdLHZlPSExO3JldHVybiBIbyh5LGZ1bmN0aW9uKEhlLEJlLEdlKXtzd2l0Y2goR2Upe2Nhc2UgNTUwOnBlWyIhcmVsIl09SGU7YnJlYWs7Y2FzZSA2NTE6cmUuU2hlZXRzW0xdfHwocmUuU2hlZXRzW0xdPXt9KSxIZS5uYW1lJiYocmUuU2hlZXRzW0xdLkNvZGVOYW1lPUhl'@;
put 'Lm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OnZlPSEwO2JyZWFrO2Nhc2UgMzY6dmU9ITE7YnJlYWs7Y2FzZSAzNzpfZS5wdXNoKEJlKTticmVhaztjYXNlIDM4'@;
put 'Ol9lLnBvcCgpO2JyZWFrO2RlZmF1bHQ6aWYoKEJlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKV9lLnB1c2goQmUpO2Vsc2UgaWYoKEJlfHwiIikuaW5kZXhPZigiRW5kIik+MClfZS5wb3AoKTtlbHNlIGlmKCF2ZXx8UC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAi'@;
put 'K0dlKyIgIitCZSl9fSxQKSxRWyIhaWQiXVtwZVsiIXJlbCJdXSYmKHBlWyIhZHJhd2VsIl09UVsiIWlkIl1bcGVbIiFyZWwiXV0pLHBlfSh5LFEsTCxyZSxwZSk6ZnVuY3Rpb24gSjMoeSxQLEwsUSxyZSl7aWYoIXkpcmV0dXJuIHk7UXx8KFE9eyIhaWQiOnt9fSk7dmFyIF9lLHBlPXsiIXR5'@;
put 'cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSx2ZT15Lm1hdGNoKHh2KTt2ZSYmdjYodmVbMF0sMCxyZSxMKTt2YXIgU2U9eS5tYXRjaChNdik7cmV0dXJuIFNlJiYocGVbIiFtYXJnaW5zIl09eFMobG4oU2VbMF0pKSksKF9lPXkubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4q'@;
put 'PykiLykpJiYocGVbIiFyZWwiXT1fZVsxXSksUVsiIWlkIl1bcGVbIiFyZWwiXV0mJihwZVsiIWRyYXdlbCJdPVFbIiFpZCJdW3BlWyIhcmVsIl1dKSxwZX0oeSwwLEwscmUscGUpfShudCxQLHJlLFNlLHBlW1FdLEhlKTticmVhaztjYXNlIm1hY3JvIjpkdD1mdW5jdGlvbiBCTCh5LFAsTCxR'@;
put 'LHJlLHBlLF9lLHZlKXtyZXR1cm4gUC5zbGljZSgtNCkseyIhdHlwZSI6Im1hY3JvIn19KDAsUCk7YnJlYWs7Y2FzZSJkaWFsb2ciOmR0PWZ1bmN0aW9uIGpMKHksUCxMLFEscmUscGUsX2UsdmUpe3JldHVybiBQLnNsaWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsUCk7YnJlYWs7ZGVm'@;
put 'YXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrdmUpfWlmKFNlLmNhbGxiYWNrKXJldHVybjtfZVtRXT1kdCxmdW5jdGlvbiBQTSh5LFAsTCxRLHJlLHBlLF9lLHZlKXtpZih5JiZ5WyIhZHJhd2VsIl0pe3ZhciBTZT1zbih5WyIhZHJhd2VsIl0uVGFyZ2V0'@;
put 'LFEpLEhlPUJpKFNlKSxCZT1mdW5jdGlvbiBHRCh5LFAsTCxRLHJlKXt2YXIgcGU9e2NoYXJ0czpbXSxpbWFnZXM6W10sc2hhcGVzOltdfTtpZigheSlyZXR1cm4gcGU7dmFyIF9lPXJlfHx7fTtyZXR1cm4oeS5tYXRjaCgvPFtePF0qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3'@;
put 'b0NlbGxBbmNob3IpLio/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8+L2cpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPSIiLEhlPXt0eXBlOiIifSxCZT17fSxHZT0hMCxudD0hMSxkdD0hMSxDdD0hMSxjdD17czp7fX0sYnQ9LTEsRnQ9'@;
put 'W10sRXQ9W10sVHQ9e3M6e2FsaWdubWVudDp7aG9yaXpvbnRhbDoiY2VudGVyIix2ZXJ0aWNhbDoiY2VudGVyIn19fSxadD0iIixwbj0tMSx1bj17fTt2ZS5yZXBsYWNlKCR0LGZ1bmN0aW9uKHFuLHpuKXtGdD1udWxsO3ZhciBrbj1sbihxbiksZXI9am4oa25bMF0pLnJlcGxhY2UoL1tcL10/'@;
put 'PiQvLCIiKTtzd2l0Y2goZXIpe2Nhc2UiPGNsaWVudERhdGEiOmJyZWFrO2Nhc2UiPGFic29sdXRlQW5jaG9yIjpjYXNlIjxvbmVDZWxsQW5jaG9yIjpjYXNlIjx0d29DZWxsQW5jaG9yIjpIZS50eXBlPWpuKGtuWzBdKS5yZXBsYWNlKC9bPD5dL2csIiIpO2JyZWFrO2Nhc2UiPC9hYnNvbHV0'@;
put 'ZUFuY2hvciI6Y2FzZSI8L29uZUNlbGxBbmNob3IiOmNhc2UiPC90d29DZWxsQW5jaG9yIjpicmVhaztjYXNlIjxwb3MiOkhlLnBvcz17eDora24ueCx5Oitrbi55fTticmVhaztjYXNlIjxleHQiOkdlJiYoSGUuZXh0PXt4Oitrbi5jeCx5Oitrbi5jeX0pO2JyZWFrO2Nhc2UiPGZyb20iOmNh'@;
put 'c2UiPHRvIjpCZT17fTticmVhaztjYXNlIjwvZnJvbSI6R2UmJihIZS5mcm9tPUJlKTticmVhaztjYXNlIjwvdG8iOkdlJiYoSGUudG89QmUpO2JyZWFrO2Nhc2UiPGNvbCI6Y2FzZSI8Y29sT2ZmIjpjYXNlIjxyb3ciOmNhc2UiPHJvd09mZiI6YnQ9em4rcW4ubGVuZ3RoO2JyZWFrO2Nhc2Ui'@;
put 'PC9jb2wiOkJlLmM9K3ZlLnNsaWNlKGJ0LHpuKTticmVhaztjYXNlIjwvY29sT2ZmIjpCZS5jT2ZmPSt2ZS5zbGljZShidCx6bik7YnJlYWs7Y2FzZSI8L3JvdyI6QmUucj0rdmUuc2xpY2UoYnQsem4pO2JyZWFrO2Nhc2UiPC9yb3dPZmYiOkJlLnJPZmY9K3ZlLnNsaWNlKGJ0LHpuKTticmVh'@;
put 'aztjYXNlIjxzcCI6U2U9InNoYXBlIixUdC5BbmNob3I9SGUscGUuc2hhcGVzLnB1c2goVHQpLEdlPSExO2JyZWFrO2Nhc2UiPC9zcCI6R2U9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpY0ZyYW1lIjpTZT0iZ3JhcGhpYyIsR2U9ITE7YnJlYWs7Y2FzZSI8L2dyYXBoaWNGcmFtZSI6R2U9ITA7YnJl'@;
put 'YWs7Y2FzZSI8cGljIjpTZT0icGljdHVyZSIsR2U9ITE7YnJlYWs7Y2FzZSI8L3BpYyI6R2U9ITA7YnJlYWs7Y2FzZSI8Z3JwU3AiOlNlPSJncm91cHNoYXBlIixHZT0hMTticmVhaztjYXNlIjwvZ3JwU3AiOkdlPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWMiOmNhc2UiPC9ncmFwaGljIjpjYXNl'@;
put 'Ijx4ZnJtIjpjYXNlIjwveGZybSI6Y2FzZSI8b2ZmIjpicmVhaztjYXNlIjxncmFwaGljRGF0YSI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2dyYXBoaWNEYXRhIjpudD0hMTticmVhaztjYXNlIjxibGlwRmlsbCI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2JsaXBGaWxsIjpudD0hMTticmVhaztjYXNlIjwv'@;
put 'YmxpcCI6YnJlYWs7Y2FzZSI8c3JjUmVjdCI6bnQ9ITA7YnJlYWs7Y2FzZSI8L3NyY1JlY3QiOm50PSExO2JyZWFrO2Nhc2UiPG5vRmlsbCI6aWYoZHQpYnJlYWs7IjxzcFByIj09RXQuc2xpY2UoLTEpWzBdJiYoVHQucy5mZ0NvbG9yPW51bGwpO2JyZWFrO2Nhc2UiPC9zb2xpZEZpbGwiOmlm'@;
put 'KGR0fHxDdClicmVhazsiPHNwUHIiPT1FdC5zbGljZSgtMilbMF0/VHQucy5mZ0NvbG9yPXVuOiI8clByIj09RXQuc2xpY2UoLTIpWzBdJiZFdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihjdC5zLmNvbG9yPXVuKSx1bj17fSxDdD0hMTticmVhaztjYXNlIjxwcnN0R2VvbSI6InNoYXBlIj09'@;
put 'U2UmJihUdFsiIXNoYXBlIl09a24ucHJzdCk7YnJlYWs7Y2FzZSI8L3Byc3RHZW9tIjpjYXNlIjxhdkxzdCI6YnJlYWs7Y2FzZSI8dHhCb2R5IjpudD0hMCxUdC5SPVtdO2JyZWFrO2Nhc2UiPC90eEJvZHkiOm50PSExO2JyZWFrO2Nhc2UiPGJvZHlQciI6VHQucy5hbGlnbm1lbnQudmVydGlj'@;
put 'YWw9WURba24uYW5jaG9yfHwidCJdfHwidG9wIjticmVhaztjYXNlIjxsc3RTdHlsZSI6YnJlYWs7Y2FzZSI8dCI6cG49em4rcW4ubGVuZ3RoO2JyZWFrO2Nhc2UiPGJyIjpjYXNlIjxici8+IjpadCs9IlxuIjticmVhaztjYXNlIjwvdCI6WnQrPXZlLnNsaWNlKHBuLHpuKTticmVhaztjYXNl'@;
put 'IjxwUHIiOlR0LnMuYWxpZ25tZW50Lmhvcml6b250YWx8fChUdC5zLmFsaWdubWVudC5ob3Jpem9udGFsPUxDW2tuLmFsZ258fCJsIl18fCJsZWZ0IiksRXQuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoY3Qucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1MQ1trbi5hbGdufHwibCJdfHwibGVmdCIp'@;
put 'O2JyZWFrO2Nhc2UiPHJQciI6a24uc3omJkV0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKFR0LnMuc3o9Y3Qucy5zej0ra24uc3ovMTAwKTticmVhaztjYXNlIjxwIjpadD0iIixjdD17dDoicyIsdjoiIixzOnthbGlnbm1lbnQ6e319fTticmVhaztjYXNlIjwvcCI6InNoYXBlIj09U2UmJkV0'@;
put 'LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKFR0LnY9KFR0LnZ8fCIiKStadCxjdC52PVp0LFR0LlIucHVzaChjdCkpO2JyZWFrO2Nhc2UiPGxhdGluIjprbi50eXBlZmFjZSYmRXQuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoY3Qucy5uYW1lPWtuLnR5cGVmYWNlKTticmVhaztjYXNlIjxzdHls'@;
put 'ZSI6bnQ9ITAsZHQ9ITA7YnJlYWs7Y2FzZSI8L3N0eWxlIjpudD0hMSxkdD0hMTticmVhaztjYXNlIjxsblJlZiI6Y2FzZSI8ZmlsbFJlZiI6Y2FzZSI8ZWZmZWN0UmVmIjpjYXNlIjxmb250UmVmIjpicmVhaztjYXNlIjwvZmlsbFJlZiI6IWR0JiYic2hhcGUiPT1TZSYmKFR0LnMuZmdDb2xv'@;
put 'cj11biksdW49e307YnJlYWs7Y2FzZSI8L2ZvbnRSZWYiOiFkdCYmInNoYXBlIj09U2UmJihUdC5zLmNvbG9yPXVuKSx1bj17fTticmVhaztjYXNlIjxzY2hlbWVDbHIiOnZhciB0cj17YmcxOiJsdDEiLGJnMjoibHQyIix0eDE6ImRrMSIsdHgyOiJkazIifVtrbi52YWxdfHxrbi52YWwsWm49'@;
put 'KChRLnRoZW1lRWxlbWVudHN8fHt9KS5jbHJTY2hlbWV8fFtdKS5maW5kKGZ1bmN0aW9uKG9pKXtyZXR1cm4gb2kubmFtZT09dHJ9KTtabj91bi5yZ2I9Wm4ucmdiOkN0PSEwO2JyZWFrO2Nhc2UiPHNjcmdiQ2xyIjpDdD0hMDticmVhaztjYXNlIjxzcmdiQ2xyIjp1bi5yZ2I9a24udmFsLnNs'@;
put 'aWNlKC02KTticmVhaztjYXNlIjxoc2xDbHIiOmNhc2UiPHN5c0NsciI6Y2FzZSI8cHJzdENsciI6Q3Q9ITA7YnJlYWs7Y2FzZSI8Y2hhcnQiOkZ0PXBlLmNoYXJ0czt2YXIgVnI9a24uaWQ7Y2FzZSI8YmxpcCI6RnR8fChGdD1wZS5pbWFnZXMsVnI9a24uZW1iZWQpLEZ0LnB1c2goe0FuY2hv'@;
put 'cjpIZSxUYXJnZXQ6KFBbIiFpZCJdW1ZyXXx8e30pLlRhcmdldH0pLGtuLmxpbmsmJihGdFtGdC5sZW5ndGgtMV0uTGluaz0oUFsiIWlkIl1ba24ubGlua118fHt9KS5UYXJnZXQpO2JyZWFrO2Nhc2UiPGdycFNwUHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9ncnBTcFByIjpudD0hMTticmVhaztj'@;
put 'YXNlIjxudkdycFNwUHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9udkdycFNwUHIiOm50PSExO2JyZWFrO2Nhc2UiPHNwUHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9zcFByIjpudD0hMTticmVhaztjYXNlIjxzdHJldGNoIjpjYXNlIjwvc3RyZXRjaCI6Y2FzZSI8ZmlsbFJlY3QiOmNhc2UiPG52R3Jh'@;
put 'cGhpY0ZyYW1lUHIiOmNhc2UiPC9udkdyYXBoaWNGcmFtZVByIjpjYXNlIjxjTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8L2NOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjxncmFwaGljRnJhbWVMb2NrcyI6Y2FzZSI8bnZQaWNQciI6Y2FzZSI8L252UGljUHIiOmNhc2UiPGNOdlBpY1ByIjpjYXNl'@;
put 'IjwvY052UGljUHIiOmNhc2UiPHBpY0xvY2tzIjpjYXNlIjxjTnZHcnBTcFByIjpjYXNlIjwvY052R3JwU3BQciI6Y2FzZSI8Z3JwU3BMb2NrcyI6Y2FzZSI8bnZTcFByIjpjYXNlIjwvbnZTcFByIjpjYXNlIjxjTnZTcFByIjpjYXNlIjwvY052U3BQciI6Y2FzZSI8c3BMb2NrcyI6YnJlYWs7'@;
put 'Y2FzZSI8Y052UHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9jTnZQciI6bnQ9ITE7YnJlYWs7Y2FzZSI8Y3huU3AiOm50PSEwO2JyZWFrO2Nhc2UiPC9jeG5TcCI6bnQ9ITE7YnJlYWs7Y2FzZSI8Y052Q3huU3BQciI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2NOdkN4blNwUHIiOm50PSExO2JyZWFrO2Nh'@;
put 'c2UiPG52Q3huU3BQciI6Y2FzZSI8L252Q3huU3BQciI6YnJlYWs7Y2FzZSI8ZXh0THN0IjpudD0hMCxkdD0hMDticmVhaztjYXNlIjwvZXh0THN0IjpudD0hMSxkdD0hMTticmVhaztjYXNlIjwvZXh0IjpicmVhaztkZWZhdWx0OmlmKF9lJiZfZS5XVEYmJiFudCl0aHJvdyBuZXcgRXJyb3Io'@;
put 'InVucmVjb2duaXplZCAiK2tuWzBdKyIgaW4gZHJhd2luZyIpfXJldHVybiI8LyI9PWVyLnNsaWNlKDAsMik/RXQucG9wKCk6Ii8+IiE9cW4uc2xpY2UocW4ubGVuZ3RoLTIpJiZFdC5wdXNoKGVyKSwiIn0pfSkscGV9KEp0KEwsU2UsITApLERvKEp0KEwsSGUsITApLFNlKSwwLHZlLHJlKTtp'@;
put 'ZihCZSl7aWYoQmUuY2hhcnRzKWZvcih2YXIgR2U9MDtHZTxCZS5jaGFydHMubGVuZ3RoOysrR2Upe3ZhciBudD1CZS5jaGFydHNbR2VdLGR0PXNuKG50LlRhcmdldCxTZSksQ3Q9QmkoZHQpLGN0PSJjaGFydCI9PVAmJjA9PUdlLGJ0PW0wKEp0KEwsZHQsITApLDAsMCxEbyhKdChMLEN0LCEw'@;
put 'KSxkdCksMCxjdD95Om51bGwsbnQsY3Q/bnVsbDp5KTtjdHx8KHlbIiFjaGFydHMiXXx8KHlbIiFjaGFydHMiXT1bXSkseVsiIWNoYXJ0cyJdLnB1c2goYnQpKX1pZihyZS5ib29rSW1hZ2VzJiZCZS5pbWFnZXMpZm9yKHZhciBGdD0wO0Z0PEJlLmltYWdlcy5sZW5ndGg7KytGdCl7dmFyIEV0'@;
put 'PUJlLmltYWdlc1tGdF0sVHQ9eyIhdHlwZSI6ImltYWdlIiwiIXBvcyI6eEMoRXQuQW5jaG9yKSwiIXBvc1R5cGUiOkV0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpzZihFdC5BbmNob3IseSksIiFyZWxwb3MiOkttKEV0LkFuY2hvcix5KX07aWYoRXQuVGFy'@;
put 'Z2V0JiYoVHRbIiFwYXRoIl09c24oRXQuVGFyZ2V0LFNlKSxUdFsiIWRhdGEiXT1JdChMLFR0WyIhcGF0aCJdKSxUdFsiIWRhdGF0eXBlIl09InN0cmluZyI9PXR5cGVvZiBUdFsiIWRhdGEiXT8iYmluYXJ5IjoiYnVmZmVyIiksRXQuTGluayYmKFR0WyIhZGF0YXR5cGUiXXx8KFR0WyIhZGF0'@;
put 'YXR5cGUiXT0icmVtb3RlIiksVHRbIiFsaW5rIl09RXQuTGluayksIVR0WyIhZGF0YXR5cGUiXSl0aHJvdyJJbWFnZSBkYXRhIGNhbm5vdCBiZSBmb3VuZCI7eVsiIWltYWdlcyJdfHwoeVsiIWltYWdlcyJdPVtdKSx5WyIhaW1hZ2VzIl0ucHVzaChUdCl9dmFyIFp0LHBuO2lmKEJlLnNoYXBl'@;
put 'cylmb3IodmFyIHVuPTA7dW48QmUuc2hhcGVzLmxlbmd0aDsrK3VuKXBuPXsiIXR5cGUiOiJzaGFwZSIsIiFwb3MiOnNmKChadD1CZS5zaGFwZXNbdW5dKS5BbmNob3IseSksIiFwb3NUeXBlIjpadC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6c2YoWnQuQW5j'@;
put 'aG9yLHkpLCIhcmVscG9zIjpLbShadC5BbmNob3IseSl9LFsidiIsIiFzaGFwZSIsInMiLCJSIl0uZm9yRWFjaChLbikseVsiIXNoYXBlcyJdfHwoeVsiIXNoYXBlcyJdPVtdKSx5WyIhc2hhcGVzIl0ucHVzaChwbil9fWZ1bmN0aW9uIEtuKHFuKXtadFtxbl0mJihwbltxbl09WnRbcW5dKX19'@;
put 'KGR0LHZlLHksUCxTZSwwLDAsQmUpO3ZhciBDdD1bXTtyZXR1cm4gcGUmJnBlW1FdJiZsdChwZVtRXSkuZm9yRWFjaChmdW5jdGlvbihjdCl7aWYocGVbUV1bY3RdLlR5cGU9PUhpLkNNTlQpe3ZhciBidD1zbihwZVtRXVtjdF0uVGFyZ2V0LFApO2lmKCEoQ3Q9ZnVuY3Rpb24gdVkoeSxQLEwp'@;
put 'e3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIFFEKHksUCl7dmFyIEw9W10sUT1bXSxyZT17fSxwZT0hMTtyZXR1cm4gSG8oeSxmdW5jdGlvbih2ZSxTZSxIZSl7c3dpdGNoKEhlKXtjYXNlIDYzMjpRLnB1c2godmUpO2JyZWFrO2Nhc2UgNjM1OnJlPXZlO2JyZWFrO2Nhc2Ug'@;
put 'NjM3OnJlLnQ9dmUudCxyZS5oPXZlLmgscmUucj12ZS5yO2JyZWFrO2Nhc2UgNjM2OmlmKHJlLmF1dGhvcj1RW3JlLmlhdXRob3JdLGRlbGV0ZSByZS5pYXV0aG9yLFAuc2hlZXRSb3dzJiZyZS5yZngmJlAuc2hlZXRSb3dzPD1yZS5yZngucilicmVhaztyZS50fHwocmUudD0iIiksZGVsZXRl'@;
put 'IHJlLnJmeCxMLnB1c2gocmUpO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDM3OmNhc2UgMzg6YnJlYWs7Y2FzZSAzNTpwZT0hMDticmVhaztjYXNlIDM2OnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoU2V8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChTZXx8IiIpLmluZGV4T2YoIkVuZCIp'@;
put 'PjApJiYoIXBlfHxQLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0hlKyIgIitTZSl9fSksTH0oeSxMKTpmdW5jdGlvbiBIQyh5LFApe2lmKHkubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIEw9W10sUT1bXSxyZT15Lm1hdGNo'@;
put 'KC88KD86XHcrOik/YXV0aG9ycz4oW1xzXFNdKik8XC8oPzpcdys6KT9hdXRob3JzPi8pO3JlJiZyZVsxXSYmcmVbMV0uc3BsaXQoLzxcL1x3Kjo/YXV0aG9yPi8pLmZvckVhY2goZnVuY3Rpb24oX2Upe2lmKCIiIT09X2UmJiIiIT09X2UudHJpbSgpKXt2YXIgdmU9X2UubWF0Y2goLzwoPzpc'@;
put 'dys6KT9hdXRob3JbXj5dKj4oLiopLyk7dmUmJkwucHVzaCh2ZVsxXSl9fSk7dmFyIHBlPXkubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gcGUmJnBlWzFdJiZwZVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50'@;
put 'Pi8pLmZvckVhY2goZnVuY3Rpb24oX2Upe2lmKCIiIT09X2UmJiIiIT09X2UudHJpbSgpKXt2YXIgdmU9X2UubWF0Y2goLzwoPzpcdys6KT9jb21tZW50W14+XSo+Lyk7aWYodmUpe3ZhciBTZT1sbih2ZVswXSksSGU9e2F1dGhvcjpTZS5hdXRob3JJZCYmTFtTZS5hdXRob3JJZF18fCJzaGVl'@;
put 'dGpzZ2hvc3QiLHJlZjpTZS5yZWYsZ3VpZDpTZS5ndWlkfSxCZT1zcyhTZS5yZWYpO2lmKCEoUC5zaGVldFJvd3MmJlAuc2hlZXRSb3dzPD1CZS5yKSl7dmFyIEdlPV9lLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLG50PSEhR2UmJiEhR2VbMV0m'@;
put 'JkQ5KEdlWzFdKXx8e3I6IiIsdDoiIixoOiIifTtIZS5yPW50LnIsIjx0PjwvdD4iPT1udC5yJiYobnQudD1udC5oPSIiKSxIZS50PShudC50fHwiIikucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIiksUC5jZWxsSFRNTCYmKEhlLmg9bnQuaCksUS5wdXNoKEhlKX19'@;
put 'fX0pLFF9KHksTCl9KEl0KHksYnQsITApLGJ0LFNlKSl8fCFDdC5sZW5ndGgpcmV0dXJuOyFmdW5jdGlvbiAkOSh5LFApe3ZhciBRLEw9QXJyYXkuaXNBcnJheSh5KTtQLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBwZT1zcyhyZS5yZWYpO2lmKEw/KHlbcGUucl18fCh5W3BlLnJdPVtdKSxR'@;
put 'PXlbcGUucl1bcGUuY10pOlE9eVtyZS5yZWZdLCFRKXtRPXt0OiJ6In0sTD95W3BlLnJdW3BlLmNdPVE6eVtyZS5yZWZdPVE7dmFyIF9lPU9pKHlbIiFyZWYiXXx8IkJEV0dPMTAwMDAwMTpBMSIpO19lLnMucj5wZS5yJiYoX2Uucy5yPXBlLnIpLF9lLmUucjxwZS5yJiYoX2UuZS5yPXBlLnIp'@;
put 'LF9lLnMuYz5wZS5jJiYoX2Uucy5jPXBlLmMpLF9lLmUuYzxwZS5jJiYoX2UuZS5jPXBlLmMpO3ZhciB2ZT1PbyhfZSk7dmUhPT15WyIhcmVmIl0mJih5WyIhcmVmIl09dmUpfVEuY3x8KFEuYz1bXSk7dmFyIFNlPXthOnJlLmF1dGhvcix0OnJlLnQscjpyZS5yfTtTZS5yJiYic3RyaW5nIj09'@;
put 'dHlwZW9mIFNlLnImJihTZS5SPURtKFNlLnIpKSxyZS5oJiYoU2UuaD1yZS5oKSxRLmMucHVzaChTZSl9KX0oZHQsQ3QpfX0pLGZ1bmN0aW9uIHBSKHksUCxMLFEscmUscGUsX2UpeyF5fHwheVsiIXRhYmxlcmVmcyJdfHwhTHx8IUxbIiFpZCJdfHwoeVsiIXRhYmxlcyJdPVtdLHlbIiF0YWJs'@;
put 'ZXJlZnMiXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt2YXIgU2U9TFsiIWlkIl1bdmVdO2lmKFNlJiZTZS5UYXJnZXQpe3ZhciBIZT1zbihTZS5UYXJnZXQsUSk7IWZ1bmN0aW9uICQ0KHksUCxMLFEscmUpe3ZhciBwZT17c3R5bGU6e30saGVhZGVyOjB9LF9lPSExO3kucmVwbGFjZSgkdCxmdW5j'@;
put 'dGlvbih2ZSl7dmFyIFNlPWxuKHZlKTtzd2l0Y2goam4oU2VbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwvdGFibGU+IjpjYXNlIjwvYXV0b0ZpbHRlcj4iOmNhc2UiPHNvcnRTdGF0ZSI6Y2FzZSI8c29ydFN0YXRlPiI6Y2FzZSI8L3NvcnRTdGF0ZT4iOmNhc2UiPC90YWJsZUNvbHVtbnMiOmNh'@;
put 'c2UiPC90YWJsZUNvbHVtbnM+IjpjYXNlIjwvdGFibGVDb2x1bW4+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYT4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhIjpjYXNlIjwvY2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjx0b3RhbHNSb3dGb3JtdWxhPiI6Y2Fz'@;
put 'ZSI8dG90YWxzUm93Rm9ybXVsYSI6Y2FzZSI8L3RvdGFsc1Jvd0Zvcm11bGE+IjpjYXNlIjx4bWxDb2x1bW5Qcj4iOmNhc2UiPHhtbENvbHVtblByIjpjYXNlIjwveG1sQ29sdW1uUHI+IjpjYXNlIjxzb3J0Q29uZGl0aW9uPiI6Y2FzZSI8c29ydENvbmRpdGlvbiI6Y2FzZSI8ZXh0THN0Ijpj'@;
put 'YXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHRhYmxlIjpTZS5yZWYmJihwZS5yZWY9U2UucmVmKSxTZS5uYW1lP3BlLm5hbWU9U2UubmFtZTpTZS5kaXNwbGF5TmFtZSYmKHBlLm5hbWU9U2UuZGlzcGxheU5hbWUpLG51bGwhPVNlLmhl'@;
put 'YWRlcnJvd2NvdW50JiYxIT0rU2UuaGVhZGVycm93Y291bnQ/cGUuaGVhZGVyPStTZS5oZWFkZXJyb3djb3VudDpudWxsPT1TZS5oZWFkZXJyb3djb3VudCYmKHBlLmhlYWRlcj0xKTticmVhaztjYXNlIjxhdXRvRmlsdGVyIjpjYXNlIjxhdXRvRmlsdGVyPiI6cGUuZmlsdGVyPSEwO2JyZWFr'@;
put 'O2Nhc2UiPHRhYmxlQ29sdW1ucyI6Y2FzZSI8dGFibGVDb2x1bW5zPiI6cGUuY29scz1bXTticmVhaztjYXNlIjx0YWJsZVN0eWxlSW5mbyI6U2Uuc2hvd1Jvd1N0cmlwZXMmJihwZS5zdHlsZS5yb3dzdHJpcGU9eXIoU2Uuc2hvd1Jvd1N0cmlwZXMpKSxTZS5zaG93Q29sdW1uU3RyaXBlcyYm'@;
put 'KHBlLnN0eWxlLmNvbHN0cmlwZT15cihTZS5zaG93Q29sdW1uU3RyaXBlcykpLFNlLnNob3dGaXJzdENvbHVtbiYmKHBlLnN0eWxlLmNvbGZpcnN0PXlyKFNlLnNob3dGaXJzdENvbHVtbikpLFNlLnNob3dMYXN0Q29sdW1uJiYocGUuc3R5bGUuY29sbGFzdD15cihTZS5zaG93TGFzdENvbHVt'@;
put 'bikpLFNlLm5hbWUmJihwZS5zdHlsZS5uYW1lPVNlLm5hbWUucmVwbGFjZSgvXlRhYmxlU3R5bGUvLCIiKSk7YnJlYWs7Y2FzZSI8dGFibGVDb2x1bW4iOmNhc2UiPHRhYmxlQ29sdW1uPiI6cGUuY29scy5wdXNoKHtpZDorU2UuaWQsbmFtZTpTZS5uYW1lfSk7YnJlYWs7Y2FzZSI8ZmlsdGVy'@;
put 'Q29sdW1uPiI6Y2FzZSI8ZmlsdGVyQ29sdW1uIjpjYXNlIjxjdXN0b21GaWx0ZXJzIjpjYXNlIjxjdXN0b21GaWx0ZXJzPiI6Y2FzZSI8ZXh0IjpfZT0hMDticmVhaztjYXNlIjwvZmlsdGVyQ29sdW1uPiI6Y2FzZSI8L2N1c3RvbUZpbHRlcnM+IjpjYXNlIjwvZXh0PiI6X2U9ITE7YnJlYWs7'@;
put 'ZGVmYXVsdDppZighX2UmJnJlLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1NlWzBdKyIgaW4gdGFibGUiKX1yZXR1cm4gdmV9KSxwZS5maWx0ZXJ8fChwZS5maWx0ZXI9ITEpLHBlLnN0eWxlLm5hbWUmJiFwZS5zdHlsZS5uYW1lLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxE'@;
put 'YXJrKVxkKyQvKSYmTC5UYWJsZSYmTC5UYWJsZS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXsodmUubmFtZT09cGUuc3R5bGUubmFtZXx8dmUucmF3bmFtZT09cGUuc3R5bGUubmFtZSkmJihwZS5zdHlsZS5yYXc9b24odmUpKX0pLFBbIiF0YWJsZXMiXS5wdXNoKHBlKX0oSXQoUCxIZSwhMCkseSxy'@;
put 'ZSwwLF9lKX19KSxkZWxldGUgeVsiIXRhYmxlcmVmcyJdKX0oZHQseSxwZVtRXSxQLEdlLDAsU2UpLHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSImJkY2LnB1c2goW2R0LHkscGVbUV0sUCx7U2hlZXRzOl9lfSxHZSxTZV0pLGZ1bmN0aW9uIEZNKHksUCxMLFEscmUscGUsX2UsdmUpe2lm'@;
put 'KHkmJnlbIiFsZWdkcmF3ZWwiXSl7dmFyIFNlPXNuKHlbIiFsZWdkcmF3ZWwiXS5UYXJnZXQsUSksSGU9SnQoTCxTZSwhMCk7SGUmJmZ1bmN0aW9uICREKHksUCxMKXt2YXIgUT0wOyh5Lm1hdGNoKE4zKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBGdCxFdCxUdCxadCxwbixLbix1'@;
put 'bixxbixwZT0iIixfZT0hMCx2ZT0iIixTZT0tMSxIZT17fSxCZT17fSxHZT17fSxudD0tMSxkdD0tMSxDdD0iIixjdD0iIixidD0iIix6bj0hMSxrbj0hMTtzd2l0Y2gocmUucmVwbGFjZSgkdCxmdW5jdGlvbihabixWcil7dmFyIG9pPWxuKFpuKTtzd2l0Y2goam4ob2lbMF0pKXtjYXNlIjxz'@;
put 'aGFwZSI6b2kuZmlsbGNvbG9yJiYoSGUuY29sb3IxPW9pLmZpbGxjb2xvciksb2kuc3Ryb2tlY29sb3ImJihHZS5jb2xvcj1vaS5zdHJva2Vjb2xvcik7YnJlYWs7Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbD4iOiI8djpmaWxsIj09b2lbMF0mJihvaS5jb2xvcjImJihIZS5jb2xvcjI9b2kuY29s'@;
put 'b3IyKSxvaS50eXBlJiYoSGUudHlwZT1vaS50eXBlKSk7YnJlYWs7Y2FzZSI8L2ZpbGw+IjpjYXNlIjxsb2NrIjpjYXNlIjxsb2NrLz4iOmJyZWFrO2Nhc2UiPHNoYWRvdyI6b2kuY29sb3ImJihCZS5jb2xvcj1vaS5jb2xvciksb2kub24mJihCZS5vbj1vaS5vbik7YnJlYWs7Y2FzZSI8Q2xp'@;
put 'ZW50RGF0YSI6b2kuT2JqZWN0VHlwZSYmKHBlPW9pLk9iamVjdFR5cGUpO2JyZWFrO2Nhc2UiPFZpc2libGUiOmNhc2UiPFZpc2libGUvPiI6X2U9ITE7YnJlYWs7Y2FzZSI8QW5jaG9yIjpjYXNlIjxBbmNob3I+IjpjYXNlIjxSb3ciOmNhc2UiPFJvdz4iOmNhc2UiPENvbHVtbiI6Y2FzZSI8'@;
put 'Q29sdW1uPiI6Y2FzZSI8Rm1sYU1hY3JvIjpjYXNlIjxGbWxhTWFjcm8+IjpjYXNlIjxGbWxhTGluayI6Y2FzZSI8Rm1sYUxpbms+IjpjYXNlIjxGbWxhUmFuZ2UiOmNhc2UiPEZtbGFSYW5nZT4iOmNhc2UiPFNlbFR5cGUiOmNhc2UiPFNlbFR5cGU+IjpjYXNlIjxWYWwiOmNhc2UiPFZhbD4i'@;
put 'OmNhc2UiPE1pbiI6Y2FzZSI8TWluPiI6Y2FzZSI8TWF4IjpjYXNlIjxNYXg+IjpjYXNlIjxJbmMiOmNhc2UiPEluYz4iOmNhc2UiPFBhZ2UiOmNhc2UiPFBhZ2U+IjpjYXNlIjxDaGVja2VkIjpjYXNlIjxDaGVja2VkPiI6Y2FzZSI8dGV4dGJveCI6Y2FzZSI8dGV4dGJveD4iOlNlPVZyK1pu'@;
put 'Lmxlbmd0aDticmVhaztjYXNlIjwvQW5jaG9yPiI6dmU9cmUuc2xpY2UoU2UsVnIpLnRyaW0oKTticmVhaztjYXNlIjwvUm93PiI6bnQ9K3JlLnNsaWNlKFNlLFZyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NvbHVtbj4iOmR0PStyZS5zbGljZShTZSxWcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9G'@;
put 'bWxhTWFjcm8+IjpDdD1yZS5zbGljZShTZSxWcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTGluaz4iOmN0PXJlLnNsaWNlKFNlLFZyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFSYW5nZT4iOnVuPXJlLnNsaWNlKFNlLFZyKS50cmltKCk7YnJlYWs7Y2FzZSI8L1NlbFR5cGU+Ijpxbj1y'@;
put 'ZS5zbGljZShTZSxWcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9WYWw+IjpGdD0rcmUuc2xpY2UoU2UsVnIpLnRyaW0oKTticmVhaztjYXNlIjwvTWluPiI6RXQ9K3JlLnNsaWNlKFNlLFZyKS50cmltKCk7YnJlYWs7Y2FzZSI8L01heD4iOlR0PStyZS5zbGljZShTZSxWcikudHJpbSgpO2JyZWFr'@;
put 'O2Nhc2UiPC9JbmM+IjpadD0rcmUuc2xpY2UoU2UsVnIpLnRyaW0oKTticmVhaztjYXNlIjwvUGFnZT4iOnBuPStyZS5zbGljZShTZSxWcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9DaGVja2VkPiI6S249K3JlLnNsaWNlKFNlLFZyKS50cmltKCk7YnJlYWs7Y2FzZSI8L3RleHRib3g+IjpidD1y'@;
put 'ZS5zbGljZShTZSxWcikudHJpbSgpO2JyZWFrO2Nhc2UiPE1vdmVXaXRoQ2VsbHMvPiI6Y2FzZSI8TW92ZVdpdGhDZWxscz4iOnpuPSEwO2JyZWFrO2Nhc2UiPFNpemVXaXRoQ2VsbHMvPiI6Y2FzZSI8U2l6ZVdpdGhDZWxscz4iOmtuPSEwfXJldHVybiIifSkscGUpe2Nhc2UiTm90ZSI6dmFy'@;
put 'IGVyPXFvLnNoZWV0X2dldF9jZWxsKFAsbnQ+PTAmJmR0Pj0wP2RpKHtyOm50LGM6ZHR9KTpMW1FdLnJlZik7ZXIuYyYmKGVyLmMuaGlkZGVuPV9lLHZlJiYoZXIuYy5yYXdhbmNob3I9dmUsWG0odmUsZXIuYyksRUMoZXIuY1siIXBvcyJdLDIqISF6bishIWtuLFApKSxIZS5jb2xvcjEmJihl'@;
put 'ci5jLmZpbGw9SGUpLEJlLmNvbG9yJiYoZXIuYy5zaGFkb3c9QmUpLEdlLmNvbG9yJiYoZXIuYy5zdHJva2U9R2UpKSwrK1E7YnJlYWs7Y2FzZSJCdXR0b24iOmNhc2UiR0JveCI6Y2FzZSJEcm9wIjpjYXNlIkxhYmVsIjpjYXNlIkNoZWNrYm94IjpjYXNlIlNjcm9sbCI6Y2FzZSJMaXN0Ijpj'@;
put 'YXNlIlJhZGlvIjpjYXNlIlNwaW4iOmNhc2UiRWRpdCI6UFsiIWNvbnRyb2xzIl18fChQWyIhY29udHJvbHMiXT1bXSk7dmFyIHRyPXsiIXR5cGUiOnBlfTt2ZSYmWG0odmUsdHIpLEN0JiYodHIubWFjcm89Q3QucmVwbGFjZSgiWzBdISIsIiIpKSxjdCYmKHRyLmxpbms9Y3QpLCJTY3JvbGwi'@;
put 'PT1wZXx8IlNwaW4iPT1wZT8obnVsbD09RnQmJihGdD0wKSxudWxsPT1FdCYmKEV0PTApLG51bGw9PVR0JiYoVHQ9M2U0KSxudWxsPT1adCYmKFp0PTEpLCJTY3JvbGwiPT1wZSYmbnVsbD09cG4mJihwbj0xMCkpOiJSYWRpbyI9PXBlfHwiQ2hlY2tib3giPT1wZT8obnVsbD09S24mJihLbj0w'@;
put 'KSxGdD1Lbik6KCJMaXN0Ij09cGV8fCJEcm9wIj09cGUpJiYobnVsbCE9dW4mJih0ci5yZWY9dW4pLG51bGw9PXFuJiYocW49IlNpbmdsZSIpLCJMaXN0Ij09cGUmJih0ci5zZWw9cW4pKSxudWxsIT1GdCYmKHRyLnZhbD1GdCksbnVsbCE9RXQmJih0ci5taW49RXQpLG51bGwhPVR0JiYodHIu'@;
put 'bWF4PVR0KSxudWxsIT1adCYmKHRyLnN0ZXA9WnQpLG51bGwhPXBuJiYodHIucGFnZT1wbiksYnQmJih0ci50PWJ0LnJlcGxhY2UoL1xzKjxbXHNcU10qPz5ccyovZywiIikpLFBbIiFjb250cm9scyJdLnB1c2godHIpfX0pfShQaShIZSkseSx2ZXx8W10pLHlbIiFMRFAiXT1TZSx5WyIhY3Ry'@;
put 'bGlkIl0mJnlbIiFjdHJsaWQiXS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtpZihCZS5yZWwmJkJlLnJlbC5UYXJnZXQpe3ZhciBHZT1zbihCZS5yZWwuVGFyZ2V0LFEpO0JlLnBhdGg9R2UsZGVsZXRlIEJlLnJlbH19KX19KGR0LDAseSxQLDAsMCwwLEN0KSxkdH1jYXRjaChjdCl7aWYoU2UuV1RG'@;
put 'KXRocm93IGN0fX1mdW5jdGlvbiBhYyh5KXtyZXR1cm4iLyI9PXkuY2hhckF0KDApP3kuc2xpY2UoMSk6eX12YXIgbVI9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEhNKHksUCl7aWYoRjY9W10sUDYoUD1QfHx7fSksbW4oeSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIil8fG1uKHksIm9iamVjdGRh'@;
put 'dGEueG1sIikpcmV0dXJuIGZ1bmN0aW9uIFRNKHksUCl7UD1QfHx7fSxtbih5LCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSYmZnVuY3Rpb24gVmEoeSxQKXtmb3IodmFyIFEscmUsTD1Rdih5KTtRPUJyLmV4ZWMoTCk7KXN3aXRjaChRWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZp'@;
put 'bGUtZW50cnkiOmlmKCIvIj09KHJlPWxuKFFbMF0sITEpKS5wYXRoJiZyZS50eXBlIT09VHUpdGhyb3cgbmV3IEVycm9yKCJUaGlzIE9wZW5Eb2N1bWVudCBpcyBub3QgYSBzcHJlYWRzaGVldCIpO2JyZWFrO2Nhc2UiZW5jcnlwdGlvbi1kYXRhIjpjYXNlImFsZ29yaXRobSI6Y2FzZSJzdGFy'@;
put 'dC1rZXktZ2VuZXJhdGlvbiI6Y2FzZSJrZXktZGVyaXZhdGlvbiI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBPRFMgRW5jcnlwdGlvbiIpO2RlZmF1bHQ6aWYoUCYmUC5XVEYpdGhyb3cgUX19KEl0KHksIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpLFApO3ZhciBMPUp0KHksImNvbnRl'@;
put 'bnQueG1sIik7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIGNvbnRlbnQueG1sIGluIE9EUyAvIFVPRiBmaWxlIik7dmFyIFE9UTAoUGkoTCksUCk7cmV0dXJuIG1uKHksIm1ldGEueG1sIikmJihRLlByb3BzPU8yKEl0KHksIm1ldGEueG1sIikpKSxRfSh5LFApO2lmKG1uKHksIklu'@;
put 'ZGV4L0RvY3VtZW50Lml3YSIpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyBmaWxlIik7dmFyIHBlLF9lLEw9ZnVuY3Rpb24gcHQoeSl7Zm9yKHZhciBQPXkuRnVsbFBhdGhzfHxsdCh5LmZpbGVzKSxMPVtdLFE9MDtRPFAubGVuZ3RoOysrUSkiLyIhPVBbUV0uc2xpY2Uo'@;
put 'LTEpJiZMLnB1c2goUFtRXSk7cmV0dXJuIEwuc29ydCgpfSh5KSxRPWZ1bmN0aW9uIGNtKHkpe3ZhciBQPXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sbGlua3M6W10sY29yZXByb3BzOltd'@;
put 'LGV4dHByb3BzOltdLGN1c3Rwcm9wczpbXSx0aGVtZXM6W10sc3R5bGVzOltdLGNhbGNjaGFpbnM6W10sdmJhOltdLGRyYXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxwaXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFydG9ianM6W10sY2hhcnRzdHlsZXM6W10sY2hh'@;
put 'cnRjb2xvcnM6W10sY2hhcnRleHM6W10sdGFibGVzOltdLGNvbm5zOltdLGN0cmxwcm9wczpbXSxjdXN0b214bWxwcm9wczpbXSxUT0RPOltdLHhtbG5zOiIifTtpZigheXx8IXkubWF0Y2gpcmV0dXJuIFA7dmFyIEw9e307aWYoKHkubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihR'@;
put 'KXt2YXIgcmU9bG4oUSk7c3dpdGNoKHJlWzBdLnJlcGxhY2UoUG4sIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOlAueG1sbnM9cmVbInhtbG5zIisocmVbMF0ubWF0Y2goLzwoXHcrKTovKXx8WyIiLCIiXSlbMV1dO2JyZWFrO2Nhc2UiPERlZmF1bHQiOkxbcmUuRXh0ZW5z'@;
put 'aW9uLnRvTG93ZXJDYXNlKCldPXJlLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lkIDAhPT1QW1JsW3JlLkNvbnRlbnRUeXBlXV0mJlBbUmxbcmUuQ29udGVudFR5cGVdXS5wdXNoKHJlLlBhcnROYW1lKX19KSxQLnhtbG5zIT09aXMuQ1QpdGhyb3cgbmV3IEVycm9yKCJV'@;
put 'bmtub3duIE5hbWVzcGFjZTogIitQLnhtbG5zKTtyZXR1cm4gUC5jYWxjY2hhaW49UC5jYWxjY2hhaW5zLmxlbmd0aD4wP1AuY2FsY2NoYWluc1swXToiIixQLnNzdD1QLnN0cnMubGVuZ3RoPjA/UC5zdHJzWzBdOiIiLFAuc3R5bGU9UC5zdHlsZXMubGVuZ3RoPjA/UC5zdHlsZXNbMF06IiIs'@;
put 'UC5jb25uPVAuY29ubnMubGVuZ3RoPjA/UC5jb25uc1swXToiIixQLmRlZmF1bHRzPUwsZGVsZXRlIFAuY2FsY2NoYWlucyxQfShKdCh5LCJbQ29udGVudF9UeXBlc10ueG1sIikpLHJlPSExO2lmKDA9PT1RLndvcmtib29rcy5sZW5ndGgmJkl0KHksX2U9InhsL3dvcmtib29rLnhtbCIsITAp'@;
put 'JiZRLndvcmtib29rcy5wdXNoKF9lKSwwPT09US53b3JrYm9va3MubGVuZ3RoKXtpZighSXQoeSxfZT0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO1Eud29ya2Jvb2tzLnB1c2goX2UpLHJlPSEwfSJiaW4iPT1RLndvcmti'@;
put 'b29rc1swXS5zbGljZSgtMykmJihyZT0hMCk7dmFyIHZlPXt9LFNlPXt9O2lmKCFQLmJvb2tTaGVldHMmJiFQLmJvb2tQcm9wcyl7aWYoZjY9W10sUS5zc3QpdHJ5e2Y2PWZ1bmN0aW9uIEw2KHksUCxMKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBjRCh5LFApe3ZhciBM'@;
put 'PVtdLFE9ITE7cmV0dXJuIEhvKHksZnVuY3Rpb24ocGUsX2UsdmUpe3N3aXRjaCh2ZSl7Y2FzZSAxNTk6TC5Db3VudD1wZVswXSxMLlVuaXF1ZT1wZVsxXTticmVhaztjYXNlIDE5OkwucHVzaChwZSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTpRPSEwO2JyZWFrO2Nhc2UgMzY6'@;
put 'UT0hMTticmVhaztkZWZhdWx0OmlmKF9lLmluZGV4T2YoIkJlZ2luIik+MHx8X2UuaW5kZXhPZigiRW5kIiksIVF8fFAuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIit2ZSsiICIrX2UpfX0pLEx9KHksTCk6ZnVuY3Rpb24gckMoeSxQKXt2YXIgTD1bXSxRPSIiO2lm'@;
put 'KCF5KXJldHVybiBMO3ZhciByZT15Lm1hdGNoKGVDKTtpZihyZSl7UT1yZVsyXS5yZXBsYWNlKHRDLCIiKS5zcGxpdChuQyk7Zm9yKHZhciBwZT0wO3BlIT1RLmxlbmd0aDsrK3BlKXt2YXIgX2U9RDkoUVtwZV0udHJpbSgpLFApO251bGwhPV9lJiYoTFtMLmxlbmd0aF09X2UpfXJlPWxuKHJl'@;
put 'WzFdKSxMLkNvdW50PXJlLmNvdW50LEwuVW5pcXVlPXJlLnVuaXF1ZUNvdW50fXJldHVybiBMfSh5LEwpfShJdCh5LGFjKFEuc3N0KSksUS5zc3QsUCl9Y2F0Y2gocnIpe2lmKFAuV1RGKXRocm93IHJyfVAuY2VsbFN0eWxlcyYmUS50aGVtZXMubGVuZ3RoJiYodmU9ZnVuY3Rpb24gSTYoeSxQ'@;
put 'LEwpe3JldHVybiBHbSh5LEwpfShKdCh5LFEudGhlbWVzWzBdLnJlcGxhY2UoL15cLy8sIiIpLCEwKXx8IiIsMCxQKSksUS5zdHlsZSYmKFNlPWZ1bmN0aW9uICR2KHksUCxMLFEpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIEI5KHksUCxMKXt2YXIgUT17TnVtYmVyRm10'@;
put 'OltdfTtmb3IodmFyIHJlIGluIHcuX3RhYmxlKVEuTnVtYmVyRm10W3JlXT13Ll90YWJsZVtyZV07US5DZWxsWGY9W10sUS5Gb250cz1bXSxRLkZpbGxzPVtdLFEuQm9yZGVycz1bXTt2YXIgcGU9W10sX2U9ITE7cmV0dXJuIEhvKHksZnVuY3Rpb24oU2UsSGUsQmUpe3N3aXRjaChCZSl7Y2Fz'@;
put 'ZSA0NDpRLk51bWJlckZtdFtTZVswXV09U2VbMV0sdy5sb2FkKFNlWzFdLFNlWzBdKTticmVhaztjYXNlIDQzOno0KFNlLmNvbG9yLFApLFEuRm9udHMucHVzaChTZSk7YnJlYWs7Y2FzZSAxMDI1OmNhc2UgNDg6Y2FzZSA1MDc6Y2FzZSA1NzI6Y2FzZSA0NzU6Y2FzZSAxMTcxOmNhc2UgMjEw'@;
put 'MjpjYXNlIDExMzA6Y2FzZSA1MTI6Y2FzZSAyMDk1OmNhc2UgMzA3MjpicmVhaztjYXNlIDQ1OlNlLmZnQ29sb3ImJno0KFNlLmZnQ29sb3IsUCksU2UuYmdDb2xvciYmejQoU2UuYmdDb2xvcixQKSxRLkZpbGxzLnB1c2goU2UpO2JyZWFrO2Nhc2UgNDY6WyJ0b3AiLCJib3R0b20iLCJsZWZ0'@;
put 'IiwicmlnaHQiLCJkaWFnIl0uZm9yRWFjaChmdW5jdGlvbihHZSl7U2VbR2VdJiZTZVtHZV0uY29sb3ImJno0KFNlW0dlXS5jb2xvcixQKX0pLFEuQm9yZGVycy5wdXNoKFNlKTticmVhaztjYXNlIDQ3OiJCcnRCZWdpbkNlbGxYRnMiPT1wZVtwZS5sZW5ndGgtMV0mJlEuQ2VsbFhmLnB1c2go'@;
put 'U2UpO2JyZWFrO2Nhc2UgMzU6X2U9ITA7YnJlYWs7Y2FzZSAzNjpfZT0hMTticmVhaztjYXNlIDM3OnBlLnB1c2goSGUpLF9lPSEwO2JyZWFrO2Nhc2UgMzg6cGUucG9wKCksX2U9ITE7YnJlYWs7ZGVmYXVsdDppZigoSGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApcGUucHVzaChIZSk7ZWxz'@;
put 'ZSBpZigoSGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKXBlLnBvcCgpO2Vsc2UgaWYoIV9lfHxMLldURiYmIkJydEFDQmVnaW4iIT1wZVtwZS5sZW5ndGgtMV0pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0JlKyIgIitIZSl9fSksKFEuRm9udHN8fFtdKVswXSYmWjEoUS5G'@;
put 'b250c1swXSksUX0oeSxMLFEpOlptKHksTCxRKX0oSXQoeSxhYyhRLnN0eWxlKSksUS5zdHlsZSx2ZSxQKSl9dmFyIEhlPVEubGlua3MubWFwKGZ1bmN0aW9uKHJyKXt0cnl7dmFyIFNuPURvKEp0KHksQmkoYWMocnIpKSkscnIpO3JldHVybiBmdW5jdGlvbiBVTCh5LFAsTCxRKXtyZXR1cm4i'@;
put 'LmJpbiI9PT1MLnNsaWNlKC00KT9mdW5jdGlvbiBHNCh5LFAsTCxRKXtpZigheSlyZXR1cm4geTt2YXIgcmU9UXx8e30scGU9ITE7SG8oeSxmdW5jdGlvbihTZSxIZSxCZSl7c3dpdGNoKEJlKXtjYXNlIDM1OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNlIDM2NjpjYXNlIDM2NzpjYXNlIDM2ODpj'@;
put 'YXNlIDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNlIDU3NzpjYXNlIDU3ODpjYXNlIDU3OTpjYXNlIDU4MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4MzpjYXNlIDU4NDpjYXNlIDU4NTpjYXNlIDU4NjpjYXNlIDU4NzpicmVhaztjYXNlIDM1OnBlPSEwO2JyZWFrO2Nhc2Ug'@;
put 'MzY6cGU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChIZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKEhlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighcGV8fHJlLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0JlLnRvU3RyaW5nKDE2KSsiICIrSGUpfX0s'@;
put 'cmUpfSh5LDAsMCxRKTpmdW5jdGlvbiBZOSh5LFAsTCxRKXt2YXIgcmU9UXx8e30scGU9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fSx2ZT0hMSxTZT17fSxIZT0tMSxCZT0tMSxHZT17czp7cjowLGM6MH0sZTp7cjotMSxjOi0xfX0sbnQ9e30sZHQ9MDtyZXR1cm4oeXx8IiIpLnJlcGxhY2Uo'@;
put 'JHQsZnVuY3Rpb24oQ3QsY3Qpe3ZhciBidD1sbihDdCk7c3dpdGNoKGpuKGJ0WzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZXh0ZXJuYWxMaW5rIjpjYXNlIjwvZXh0ZXJuYWxMaW5rPiI6Y2FzZSI8L2V4dGVybmFsQm9vaz4iOmNhc2UiPHNoZWV0TmFtZXMiOmNhc2UiPHNoZWV0TmFtZXM+Ijpj'@;
put 'YXNlIjwvc2hlZXROYW1lcz4iOmNhc2UiPHNoZWV0RGF0YVNldD4iOmNhc2UiPHNoZWV0RGF0YVNldC8+IjpjYXNlIjwvc2hlZXREYXRhU2V0PiI6Y2FzZSI8L3Jvdz4iOmJyZWFrO2Nhc2UiPGV4dGVybmFsQm9vayI6Y2FzZSI8ZXh0ZXJuYWxCb29rPiI6cGUuVGFyZ2V0PVBbIiFpZCJdW2J0'@;
put 'LmlkXS5UYXJnZXQscGUuTWlzc2luZz1QWyIhaWQiXVtidC5pZF0uVHlwZT09SGkuWE1JU1M7YnJlYWs7Y2FzZSI8c2hlZXROYW1lIjpwZS5TaGVldE5hbWVzLnB1c2goeHIoUGkoYnQudmFsKSkpO2JyZWFrO2Nhc2UiPHNoZWV0RGF0YSI6U2U9e30scGUuU2hlZXRzW3BlLlNoZWV0TmFtZXNb'@;
put 'YnQuc2hlZXRJZF1dPXlyKGJ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxsOlNlO2JyZWFrO2Nhc2UiPC9zaGVldERhdGE+IjpHZS5lLmM+PTAmJihTZVsiIXJlZiJdPU9vKEdlKSk7YnJlYWs7Y2FzZSI8cm93IjpjYXNlIjxyb3c+IjpidC5yP0hlPXBhcnNlSW50KGJ0LnIsMTApLTE6SGUrKyxC'@;
put 'ZT0tMTticmVhaztjYXNlIjxjZWxsIjpjYXNlIjxjZWxsPiI6YnQucj9CZT1zcyhidC5yKS5jOisrQmUsbnQudD1idC50fHwibiIsInN0ciI9PW50LnQmJihudC50PSJzIik7YnJlYWs7Y2FzZSI8L2NlbGw+IjpHZS5lLnI8SGUmJihHZS5lLnI9SGUpLEdlLmUuYzxCZSYmKEdlLmUuYz1CZSks'@;
put 'U2VbZGkoe3I6SGUsYzpCZX0pXT1udCxudD17fTticmVhaztjYXNlIjx2IjpjYXNlIjx2PiI6ZHQ9Q3QubGVuZ3RoK2N0O2JyZWFrO2Nhc2UiPC92PiI6dmFyIEZ0PXhyKHkuc2xpY2UoZHQsY3QpKTtudC52PSJuIj09bnQudD9wYXJzZUZsb2F0KEZ0KTpGdDticmVhaztjYXNlIjx2Lz4iOm50'@;
put 'LnY9IiI7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6dmU9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOnZlPSExO2JyZWFrO2RlZmF1bHQ6aWYoIXZlJiZyZS5XVEYpdGhyb3cidW5yZWNvZ25pemVkICIrYnRbMF0rIiBpbiBleHRlcm5hbCBsaW5rIn19KSxwZX0oeSxQLDAsUSl9'@;
put 'KEl0KHksYWMocnIpKSxTbixycixQKX1jYXRjaHt9fSksQmU9ZnVuY3Rpb24gbTUoeSxQLEwpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIEd2KHksUCl7dmFyIEw9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxu'@;
put 'czoiIn0sUT1bXSxyZT0hMTtQfHwoUD17fSksUC5iaWZmPTEyO3ZhciBwZT1bXSxfZT1bW11dO3JldHVybiBfZS5TaGVldE5hbWVzPVtdLF9lLlhUST1bXSxtZlsxNl09e246IkJydEZSVEFyY2hJRCQiLGY6V3Z9LEhvKHksZnVuY3Rpb24oU2UsSGUsQmUpe3N3aXRjaChCZSl7Y2FzZSAxNTY6'@;
put 'X2UuU2hlZXROYW1lcy5wdXNoKFNlLm5hbWUpLEwuU2hlZXRzLnB1c2goU2UpO2JyZWFrO2Nhc2UgMTUzOkwuV0JQcm9wcz1TZTticmVhaztjYXNlIDM5Om51bGwhPVNlLlNoZWV0JiYoUC5TSUQ9U2UuU2hlZXQpLFNlLlJlZj14bChTZS5QdGcsbnVsbCxudWxsLF9lLFApLGRlbGV0ZSBQLlNJ'@;
put 'RCxkZWxldGUgU2UuUHRnLHBlLnB1c2goU2UpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAxNTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6'@;
put 'Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNlIDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2Ug'@;
put 'MjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3Ol9lWzBdLmxlbmd0aD9fZS5wdXNoKFtCZSxTZV0pOl9lWzBdPVtCZSxTZV0sX2VbX2UubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09X2UubGVuZ3RoJiYoX2VbMF09W10sX2Vb'@;
put 'MF0uWFRJPVtdKSxfZVtfZS5sZW5ndGgtMV0uWFRJPV9lW19lLmxlbmd0aC0xXS5YVEkuY29uY2F0KFNlKSxfZS5YVEk9X2UuWFRJLmNvbmNhdChTZSk7YnJlYWs7Y2FzZSAzNTpjYXNlIDM3OlEucHVzaChIZSkscmU9ITA7YnJlYWs7Y2FzZSAzNjpjYXNlIDM4OlEucG9wKCkscmU9ITE7YnJl'@;
put 'YWs7ZGVmYXVsdDppZighKChIZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKEhlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighcmV8fFAuV1RGJiYiQnJ0QUNCZWdpbiIhPVFbUS5sZW5ndGgtMV0mJiJCcnRGUlRCZWdpbiIhPVFbUS5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigi'@;
put 'VW5leHBlY3RlZCByZWNvcmQgIitCZSsiICIrSGUpfX0sUCksVXYoTCksTC5OYW1lcz1wZSxMLnN1cGJvb2tzPV9lLEx9KHksTCk6ZnVuY3Rpb24gYVkoeSxQKXtpZigheSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgTD17QXBwVmVyc2lvbjp7fSxXQlByb3Bz'@;
put 'Ont9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLEV4dGVybjpbXSx4bWxuczoiIn0sUT0hMSxyZT0ieG1sbnMiLHBlPXt9LF9lPTA7aWYoeS5yZXBsYWNlKCR0LGZ1bmN0aW9uKFNlLEhlKXt2YXIgQmU9bG4oU2UpO3N3aXRjaChqbihCZVswXSkpe2Nhc2UiPD94bWwi'@;
put 'OmNhc2UiPC93b3JrYm9vaz4iOmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nLz4iOmNhc2UiPC93b3JrYm9va1ByPiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJvb2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6'@;
put 'Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91'@;
put 'cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzLz4iOmNhc2UiPGRlZmluZWROYW1lLz4iOmNhc2UiPC9jYWxjUHI+IjpjYXNlIjxvbGVTaXplIjpjYXNlIjxj'@;
put 'dXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXciOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXc+IjpjYXNlIjxwaXZvdENhY2hlcz4iOmNhc2UiPC9waXZvdENh'@;
put 'Y2hlcz4iOmNhc2UiPHBpdm90Q2FjaGVzIjpjYXNlIjxwaXZvdENhY2hlIjpjYXNlIjxzbWFydFRhZ1ByIjpjYXNlIjxzbWFydFRhZ1ByLz4iOmNhc2UiPHNtYXJ0VGFnVHlwZXMiOmNhc2UiPHNtYXJ0VGFnVHlwZXM+IjpjYXNlIjwvc21hcnRUYWdUeXBlcz4iOmNhc2UiPHNtYXJ0VGFnVHlw'@;
put 'ZSI6Y2FzZSI8d2ViUHVibGlzaGluZyI6Y2FzZSI8d2ViUHVibGlzaGluZy8+IjpjYXNlIjxmaWxlUmVjb3ZlcnlQciI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIvPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cyI6Y2FzZSI8L3dlYlB1Ymxpc2hPYmpl'@;
put 'Y3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdCI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmNhc2UiPEFyY2hJRCI6Y2FzZSI8cmV2aXNpb25QdHIiOmJyZWFrO2Nhc2UiPHdvcmtib29rIjpTZS5tYXRjaChzWSkmJihyZT0i'@;
put 'eG1sbnMiK1NlLm1hdGNoKC88KFx3Kyk6LylbMV0pLEwueG1sbnM9QmVbcmVdO2JyZWFrO2Nhc2UiPGZpbGVWZXJzaW9uIjpkZWxldGUgQmVbMF0sTC5BcHBWZXJzaW9uPUJlO2JyZWFrO2Nhc2UiPGZpbGVTaGFyaW5nIjpMLk1vZGlmeT17dXNlcjpCZS51c2VyTmFtZSx3YXJuOnlyKEJlLnJl'@;
put 'YWRPbmx5UmVjb21tZW5kZWR8fCJmYWxzZSIpfSwoQmUuYWxnb3JpdGhtTmFtZXx8QmUuaGFzaFZhbHVlfHxCZS5zYWx0VmFsdWV8fEJlLnNwaW5Db3VudCkmJihMLk1vZGlmeS5lbmNyeXB0aW9uPXthbGdvOkJlLmFsZ29yaXRobU5hbWUsaGFzaDpCZS5oYXNoVmFsdWUsc2FsdDpCZS5zYWx0'@;
put 'VmFsdWUsc3BpbjorQmUuc3BpbkNvdW50fHwxZTV9KTticmVhaztjYXNlIjx3b3JrYm9va1ByIjpjYXNlIjx3b3JrYm9va1ByLz4iOksyLmZvckVhY2goZnVuY3Rpb24obnQpe2lmKG51bGwhPUJlW250WzBdXSlzd2l0Y2gobnRbMl0pe2Nhc2UiYm9vbCI6TC5XQlByb3BzW250WzBdXT15cihC'@;
put 'ZVtudFswXV0pO2JyZWFrO2Nhc2UiaW50IjpMLldCUHJvcHNbbnRbMF1dPXBhcnNlSW50KEJlW250WzBdXSwxMCk7YnJlYWs7ZGVmYXVsdDpMLldCUHJvcHNbbnRbMF1dPUJlW250WzBdXX19KSxCZS5jb2RlTmFtZSYmKEwuV0JQcm9wcy5Db2RlTmFtZT1QaShCZS5jb2RlTmFtZSkpO2JyZWFr'@;
put 'O2Nhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6dmFyIEdlPUwuUHJvdGVjdGlvbnx8e307R2UubG9ja1N0cnVjdHVyZT15cihCZS5sb2NrU3RydWN0dXJlfHwiZmFsc2UiKSxHZS5sb2NrV2luZG93cz15cihCZS5sb2NrV2luZG93c3x8ImZhbHNlIiksQmUud29ya2Jvb2tBbGdvcml0aG1OYW1l'@;
put 'JiYoR2UuZW5jcnlwdGlvbj17YWxnbzpCZS53b3JrYm9va0FsZ29yaXRobU5hbWUsaGFzaDpCZS53b3JrYm9va0hhc2hWYWx1ZSxzYWx0OkJlLndvcmtib29rU2FsdFZhbHVlLHNwaW46K0JlLndvcmtib29rU3BpbkNvdW50fHwxZTV9KSxMLlByb3RlY3Rpb249R2U7YnJlYWs7Y2FzZSI8d29y'@;
put 'a2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIEJlWzBdLEwuV0JWaWV3LnB1c2goQmUpO2JyZWFrO2Nhc2UiPHNoZWV0Ijpzd2l0Y2goQmUuc3RhdGUpe2Nhc2UiaGlkZGVuIjpCZS5IaWRkZW49MTticmVhaztjYXNlInZlcnlIaWRkZW4iOkJlLkhpZGRlbj0yO2JyZWFr'@;
put 'O2RlZmF1bHQ6QmUuSGlkZGVuPTB9ZGVsZXRlIEJlLnN0YXRlLEJlLm5hbWU9eHIoUGkoQmUubmFtZSkpLGRlbGV0ZSBCZVswXSxMLlNoZWV0cy5wdXNoKEJlKTticmVhaztjYXNlIjxleHRlcm5hbFJlZmVyZW5jZSI6TC5FeHRlcm4ucHVzaChCZS5pZCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5h'@;
put 'bWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjpRPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+IjpjYXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpRPSExO2Jy'@;
put 'ZWFrO2Nhc2UiPGRlZmluZWROYW1lIjoocGU9e30pLk5hbWU9UGkoQmUubmFtZSksQmUuY29tbWVudCYmKHBlLkNvbW1lbnQ9QmUuY29tbWVudCksQmUubG9jYWxTaGVldElkJiYocGUuU2hlZXQ9K0JlLmxvY2FsU2hlZXRJZCkseXIoQmUuaGlkZGVufHwiMCIpJiYocGUuSGlkZGVuPSEwKSxf'@;
put 'ZT1IZStTZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lPiI6cGUuUmVmPXhyKFBpKHkuc2xpY2UoX2UsSGUpKSksTC5OYW1lcy5wdXNoKHBlKTticmVhaztjYXNlIjxjYWxjUHIiOmNhc2UiPGNhbGNQci8+IjpkZWxldGUgQmVbMF0sTC5DYWxjUHI9QmU7YnJlYWs7ZGVmYXVsdDpp'@;
put 'ZighUSYmUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitCZVswXSsiIGluIHdvcmtib29rIil9cmV0dXJuIFNlfSksLTE9PT1pcy5tYWluLmluZGV4T2YoTC54bWxucykpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitMLnhtbG5zKTtyZXR1cm4gVXYo'@;
put 'TCksTH0oeSxMKX0oSXQoeSxhYyhRLndvcmtib29rc1swXSkpLFEud29ya2Jvb2tzWzBdLFApLEdlPXt9LG50PSIiO1EuY29yZXByb3BzLmxlbmd0aCYmKChudD1JdCh5LGFjKFEuY29yZXByb3BzWzBdKSwhMCkpJiYoR2U9TzIobnQpKSwwIT09US5leHRwcm9wcy5sZW5ndGgmJihudD1JdCh5'@;
put 'LGFjKFEuZXh0cHJvcHNbMF0pLCEwKSkmJmZ1bmN0aW9uIHAzKHksUCxMKXt2YXIgUT17fTtQfHwoUD17fSkseT1QaSh5KSxSMS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgcGU9KHkubWF0Y2godWwocmVbMF0pKXx8W10pWzFdO3N3aXRjaChyZVsyXSl7Y2FzZSJzdHJpbmciOnBlJiYoUFty'@;
put 'ZVsxXV09eHIocGUpKTticmVhaztjYXNlImJvb2wiOlBbcmVbMV1dPSJ0cnVlIj09PXBlO2JyZWFrO2Nhc2UicmF3Ijp2YXIgX2U9eS5tYXRjaChuZXcgUmVnRXhwKCI8IityZVswXSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK3JlWzBdKyI+IikpO19lJiZfZS5sZW5ndGg+MCYmKFFbcmVbMV1d'@;
put 'PV9lWzFdKX19KSxRLkhlYWRpbmdQYWlycyYmUS5UaXRsZXNPZlBhcnRzJiZ1MChRLkhlYWRpbmdQYWlycyxRLlRpdGxlc09mUGFydHMsUCxMKX0obnQsR2UsUCkpO3ZhciBkdD17fTsoIVAuYm9va1NoZWV0c3x8UC5ib29rUHJvcHMpJiYwIT09US5jdXN0cHJvcHMubGVuZ3RoJiYobnQ9SnQo'@;
put 'eSxhYyhRLmN1c3Rwcm9wc1swXSksITApKSYmKGR0PWZ1bmN0aW9uIE00KHksUCl7dmFyIEw9e30sUT0iIixyZT15Lm1hdGNoKEF3KTtpZihyZSlmb3IodmFyIHBlPTA7cGUhPXJlLmxlbmd0aDsrK3BlKXt2YXIgX2U9cmVbcGVdLHZlPWxuKF9lKTtzd2l0Y2godmVbMF0pe2Nhc2UiPD94bWwi'@;
put 'OmNhc2UiPFByb3BlcnRpZXMiOmJyZWFrO2Nhc2UiPHByb3BlcnR5IjpRPXhyKHZlLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOlE9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1fZS5pbmRleE9mKCI8dnQ6Iikpe3ZhciBTZT1fZS5zcGxpdCgiPiIpLEhlPVNlWzBdLnNsaWNlKDQp'@;
put 'LEJlPVNlWzFdO3N3aXRjaChIZSl7Y2FzZSJscHN0ciI6Y2FzZSJic3RyIjpjYXNlImxwd3N0ciI6Y2FzZSJjeSI6Y2FzZSJlcnJvciI6TFtRXT14cihCZSk7YnJlYWs7Y2FzZSJib29sIjpMW1FdPXlyKEJlKTticmVhaztjYXNlImkxIjpjYXNlImkyIjpjYXNlImk0IjpjYXNlImk4IjpjYXNl'@;
put 'ImludCI6Y2FzZSJ1aW50IjpMW1FdPXBhcnNlSW50KEJlLDEwKTticmVhaztjYXNlInI0IjpjYXNlInI4IjpjYXNlImRlY2ltYWwiOkxbUV09cGFyc2VGbG9hdChCZSk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpMW1FdPUh0KEJlKTticmVhaztkZWZhdWx0OmlmKCIvIj09SGUu'@;
put 'c2xpY2UoLTEpKWJyZWFrO1AuV1RGJiZ0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiVW5leHBlY3RlZCIsX2UsSGUsU2UpfX1lbHNlIGlmKCI8LyIhPT1fZS5zbGljZSgwLDIpJiZQLldURil0aHJvdyBuZXcgRXJyb3IoX2UpfX1yZXR1cm4gTH0obnQsUCkpO3ZhciBDdD17fTtp'@;
put 'ZigoUC5ib29rU2hlZXRzfHxQLmJvb2tQcm9wcykmJihCZS5TaGVldHM/cGU9QmUuU2hlZXRzLm1hcChmdW5jdGlvbihTbil7cmV0dXJuIFNuLm5hbWV9KTpHZS5Xb3Jrc2hlZXRzJiZHZS5TaGVldE5hbWVzLmxlbmd0aD4wJiYocGU9R2UuU2hlZXROYW1lcyksUC5ib29rUHJvcHMmJihDdC5Q'@;
put 'cm9wcz1HZSxDdC5DdXN0cHJvcHM9ZHQpLFAuYm9va1NoZWV0cyYmdHlwZW9mIHBlPCJ1IiYmKEN0LlNoZWV0TmFtZXM9cGUpLFAuYm9va1NoZWV0cz9DdC5TaGVldE5hbWVzOlAuYm9va1Byb3BzKSlyZXR1cm4gQ3Q7cGU9e307dmFyIGN0PXt9O1AuYm9va0RlcHMmJlEuY2FsY2NoYWluJiYo'@;
put 'Y3Q9ZnVuY3Rpb24gekwoeSxQLEwpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIERDKHksUCxMKXt2YXIgUT1bXTtyZXR1cm4gSG8oeSxmdW5jdGlvbihfZSx2ZSxTZSl7aWYoNjM9PT1TZSlRLnB1c2goX2UpO2Vsc2UgaWYoISgodmV8fCIiKS5pbmRleE9mKCJCZWdpbiIp'@;
put 'PjB8fCh2ZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitTZSsiICIrdmUpfSksUX0oeSk6ZnVuY3Rpb24gZTYoeSl7dmFyIFA9W107aWYoIXkpcmV0dXJuIFA7dmFyIEw9MTtyZXR1cm4oeS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKFEpe3ZhciByZT1sbihRKTtzd2l0Y2gocmVbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nhc2UiPGMiOmRlbGV0ZSByZVswXSxyZS5pP0w9cmUuaTpyZS5pPUwsUC5wdXNoKHJlKX19'@;
put 'KSxQfSh5KX0oSXQoeSxhYyhRLmNhbGNjaGFpbikpLFEuY2FsY2NoYWluKSk7dmFyIEV0LFR0LGJ0PTAsRnQ9e30sWnQ9QmUuU2hlZXRzO0dlLldvcmtzaGVldHM9WnQubGVuZ3RoLEdlLlNoZWV0TmFtZXM9W107Zm9yKHZhciBwbj0wO3BuIT1adC5sZW5ndGg7KytwbilHZS5TaGVldE5hbWVz'@;
put 'W3BuXT1adFtwbl0ubmFtZTt2YXIgS249cmU/ImJpbiI6InhtbCIsdW49US53b3JrYm9va3NbMF0ubGFzdEluZGV4T2YoIi8iKSxxbj0oUS53b3JrYm9va3NbMF0uc2xpY2UoMCx1bisxKSsiX3JlbHMvIitRLndvcmtib29rc1swXS5zbGljZSh1bisxKSsiLnJlbHMiKS5yZXBsYWNlKC9eXC8v'@;
put 'LCIiKTttbih5LHFuKXx8KHFuPSJ4bC9fcmVscy93b3JrYm9vay4iK0tuKyIucmVscyIpO3ZhciB6bj1EbyhKdCh5LHFuLCEwKSxxbiksa249em4sZXI9W107em4mJihCZSYmQmUuRXh0ZXJuJiZCZS5FeHRlcm4ubGVuZ3RoJiZCZS5FeHRlcm4uZm9yRWFjaChmdW5jdGlvbihycixTbil7dmFy'@;
put 'IENpPSgiL3hsLyIrem5bIiFpZCJdW3JyXS5UYXJnZXQpLnJlcGxhY2UoL1tcL11bXC9dL2csIi8iKSxqcj1RLmxpbmtzLmluZGV4T2YoQ2kpO2pyPi0xJiYoZXJbU25dPUhlW2pyXSl9KSxCZSYmZGVsZXRlIEJlLkV4dGVybiksem4mJih6bj1mdW5jdGlvbiBPTSh5LFApe2lmKCF5KXJldHVy'@;
put 'biAwO3RyeXt5PVAubWFwKGZ1bmN0aW9uKFEpe3JldHVybiBRLmlkfHwoUS5pZD1RLnN0clJlbElEKSxbUS5uYW1lLHlbIiFpZCJdW1EuaWRdLlRhcmdldCxSTSh5WyIhaWQiXVtRLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4geSYmMCE9PXkubGVuZ3RoP3k6bnVsbH0o'@;
put 'em4sQmUuU2hlZXRzKSk7dmFyIHRyPW1uKHksInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIik/MTowLFpuPVtdLFZyPVtdO2U6Zm9yKGJ0PTA7YnQhPUdlLldvcmtzaGVldHM7KytidCl7dmFyIG9pPSJzaGVldCI7aWYoem4mJnpuW2J0XT8oRXQ9InhsLyIrem5bYnRdWzFdLnJlcGxhY2UoL1tc'@;
put 'L10/eGxcLy8sIiIpLG1uKHksRXQpfHwoRXQ9em5bYnRdWzFdKSxtbih5LEV0KXx8KEV0PXFuLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKSt6bltidF1bMV0pLG9pPXpuW2J0XVsyXSk6RXQ9KEV0PSJ4bC93b3Jrc2hlZXRzL3NoZWV0IisoYnQrMS10cikrIi4iK0tuKS5yZXBsYWNlKC9zaGVl'@;
put 'dDBcLi8sInNoZWV0LiIpLFR0PUV0LnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxzLyQzLnJlbHMiKSxabi5wdXNoKEV0KSxQJiZudWxsIT1QLnNoZWV0cylzd2l0Y2godHlwZW9mIFAuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYoYnQhPVAuc2hlZXRzKWNvbnRpbnVlIGU7'@;
put 'YnJlYWs7Y2FzZSJzdHJpbmciOmlmKEdlLlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkhPVAuc2hlZXRzLnRvTG93ZXJDYXNlKCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoUC5zaGVldHMpKXtmb3IodmFyIGtpPTAsTGk9MDtM'@;
put 'aSE9UC5zaGVldHMubGVuZ3RoOysrTGkpIm51bWJlciI9PXR5cGVvZiBQLnNoZWV0c1tMaV0mJlAuc2hlZXRzW0xpXT09YnQmJihraT0xKSwic3RyaW5nIj09dHlwZW9mIFAuc2hlZXRzW0xpXSYmUC5zaGVldHNbTGldLnRvTG93ZXJDYXNlKCk9PUdlLlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJD'@;
put 'YXNlKCkmJihraT0xKTtpZigha2kpY29udGludWUgZX19aWYoIVAuc2tpcFBhcnNlKXt2YXIgUXI9Z1IoeSxFdCxUdCxHZS5TaGVldE5hbWVzW2J0XSxidCxGdCxwZSxvaSxQLEJlLHZlLFNlKTtRciYmUXJbIiFMRFAiXSYmKFZyW2J0XT1RclsiIUxEUCJdLGRlbGV0ZSBRclsiIUxEUCJdKX19'@;
put 'aWYodHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90PCJ1Iilmb3IoYnQ9MDtidDxGNi5sZW5ndGg7KytidClwYXJzZV9zaGVldF9waXZvdC5hcHBseShudWxsLEY2W2J0XSk7aWYoQ3Q9e0RpcmVjdG9yeTpRLFdvcmtib29rOkJlLFByb3BzOkdlLEN1c3Rwcm9wczpkdCxEZXBzOmN0LFNoZWV0czpw'@;
put 'ZSxTaGVldE5hbWVzOkdlLlNoZWV0TmFtZXMsU3RyaW5nczpmNixTdHlsZXM6U2UsVGhlbWVzOnZlLFNTRjp3LmdldF90YWJsZSgpfSwhUC5za2lwUGFyc2Upe2lmKGZ1bmN0aW9uIEFDKHkpeyF5fHwheS5Xb3JrYm9va3x8IXkuV29ya2Jvb2suTmFtZXN8fHkuV29ya2Jvb2suTmFtZXMuZm9y'@;
put 'RWFjaChmdW5jdGlvbihQKXtpZihQLk5hbWUmJiJfeGxubS4iPT1QLk5hbWUuc2xpY2UoMCw2KSYmKCJfeGxubS5QcmludF9BcmVhIj09UC5OYW1lfHwiX3hsbm0uUHJpbnRfVGl0bGVzIj09UC5OYW1lKSl7dmFyIEw9eS5TaGVldHNbeS5TaGVldE5hbWVzW1AuU2hlZXRdXTtpZihMKXtMWyIh'@;
put 'cHJpbnQiXXx8KExbIiFwcmludCJdPXt9KSxMWyIhcHJpbnQiXS5wcm9wc3x8KExbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgUT1MWyIhcHJpbnQiXSxyZT1QLlJlZjtpZigiX3hsbm0uUHJpbnRfQXJlYSI9PVAuTmFtZSl7cmUuaW5kZXhPZigiISIpPi0xJiYocmU9cmUuc2xpY2UocmUuaW5k'@;
put 'ZXhPZigiISIpKzEpKTt2YXIgcGU9T2kocmU9cmUucmVwbGFjZSgvWyRdL2csIiIpKTtRLmFyZWE9cGV9ZWxzZSJfeGxubS5QcmludF9UaXRsZXMiPT1QLk5hbWUmJihRLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxyZS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24o'@;
put 'X2Upe3ZhciBTZT1XcyhfZS5zbGljZShfZS5pbmRleE9mKCIhIikrMSkucmVwbGFjZSgvWyRdL2csIiIpKTtTZS5zLmM+LTEmJihRLnRpdGxlcy5zLmM9U2Uucy5jKSxTZS5lLmM+LTEmJihRLnRpdGxlcy5lLmM9U2UuZS5jKSxTZS5zLnI+LTEmJihRLnRpdGxlcy5zLnI9U2Uucy5yKSxTZS5l'@;
put 'LnI+LTEmJihRLnRpdGxlcy5lLnI9U2UuZS5yKX0pKX19fSl9KEN0KSxQJiZQLmJvb2tGaWxlcyYmKEN0LmtleXM9TCxDdC5maWxlcz15LmZpbGVzKSxQJiZQLmJvb2tWQkEmJihRLnZiYS5sZW5ndGg+MD9DdC52YmFyYXc9SXQoeSxhYyhRLnZiYVswXSksITApOlEuZGVmYXVsdHMmJlEuZGVm'@;
put 'YXVsdHMuYmluPT09JDImJihDdC52YmFyYXc9SXQoeSwieGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLGtuJiZrblsiIWlkIl0pe2Zvcih2YXIgdXI9W10sQW49MTtBbjw9MTAyNDsrK0FuKWtuWyIhaWQiXVsicklkIitBbl0mJmtuWyIhaWQiXVsicklkIitBbl0uVHlwZSYmL2N1c3RvbVhtbCQv'@;
put 'LnRlc3Qoa25bIiFpZCJdWyJySWQiK0FuXS5UeXBlKSYmdXIucHVzaChzbihrblsiIWlkIl1bInJJZCIrQW5dLlRhcmdldCxRLndvcmtib29rc1swXSkpO3VyLmxlbmd0aD4wJiYoQ3QuQ3VzdG9tWE1MPVtdLHVyLmZvckVhY2goZnVuY3Rpb24ocnIpe3ZhciBTbj17ZGF0YTpKdCh5LGFjKHJy'@;
put 'KSl9LHByPUJpKHJyKTt0cnl7dmFyIENpPURvKEp0KHksYWMocHIpLCEwKSxwcik7aWYoQ2kpZm9yKHZhciBqcj0xO2pyPD0xMDI0OysranIpQ2lbIiFpZCJdWyJySWQiK2pyXSYmQ2lbIiFpZCJdWyJySWQiK2pyXS5UeXBlJiYvY3VzdG9tWG1sUHJvcHMkLy50ZXN0KENpWyIhaWQiXVsicklk'@;
put 'Iitqcl0uVHlwZSkmJihTbi5wcm9wcz1KdCh5LGFjKHNuKENpWyIhaWQiXVsicklkIitqcl0uVGFyZ2V0LHJyKSkpKX1jYXRjaHt9Q3QuQ3VzdG9tWE1MLnB1c2goU24pfSkpfXZhciB2cj1EdCh5LCJ4bC9tb2RlbC9pdGVtLmRhdGEiLCEwKTt2ciYmKEN0Lm1vZGVsPXZyKSxRLmNvbm4mJihD'@;
put 'dC5jb25uPUl0KHksYWMoUS5jb25uKSwhMCkpLGVyLmxlbmd0aCYmKEN0LkV4dGVybmFsV0I9ZXIpLEJlJiYoQmUuUFBJPW5mKX1yZXR1cm4gUC50ZW1wbGF0ZSYmKEN0Ll93c3BhdGhzPVpuLEN0Ll9zdHlwYXRoPWFjKFEuc3R5bGV8fCIiKSxDdC5fd2JwYXRoPWFjKFEud29ya2Jvb2tzWzBd'@;
put 'fHwieGwvd29ya2Jvb2sueG1sIiksQ3QuX3ZtbHBhdGhzPVZyLEN0Ll93YnJlbHNwYXRoPXFuLEN0Ll9jdD1KdCh5LCJbQ29udGVudF9UeXBlc10ueG1sIiksQ3QuZmlsZXM9eS5maWxlcyxtUihDdCx5LFApKSxDdH1mdW5jdGlvbiB2Uih5LFApe3ZhciBMPVB8fHt9O0wucGFzc3dvcmR8fChM'@;
put 'LnBhc3N3b3JkPSJWZWx2ZXRTd2VhdHNob3AiKTt2YXIgUT0iV29ya2Jvb2siLHJlPWplLmZpbmQoeSxRKTt0cnl7aWYoIShyZT1qZS5maW5kKHksUT0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUg'@;
put 'bWlzc2luZyAiK1EpO2lmKGZ1bmN0aW9uIGREKHkpe3ZhciBQPXt9O1AuaWQ9eS5yZWFkX3NoaWZ0KDAsImxwcDQiKSxQLlI9RzAoeSw0KSxQLlU9RzAoeSw0KSxQLlc9RzAoeSw0KX0ocmUuY29udGVudCksIShyZT1qZS5maW5kKHksUT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8'@;
put 'IXJlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7dmFyIHBlPWZ1bmN0aW9uIFA0KHkpe3ZhciBQPVtdO3kubCs9NDtmb3IodmFyIEw9eS5yZWFkX3NoaWZ0KDQpO0wtLSA+MDspUC5wdXNoKHNDKHkpKTtyZXR1cm4gUH0ocmUu'@;
put 'Y29udGVudCk7aWYoMSE9PXBlLmxlbmd0aHx8MSE9PXBlWzBdLmNvbXBzLmxlbmd0aHx8MCE9PXBlWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PXBlWzBdLm5hbWV8fCJFbmNyeXB0ZWRQYWNrYWdlIiE9PXBlWzBdLmNvbXBzWzBdLnYpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitRKTtpZighKHJlPWplLmZpbmQoeSxRPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBm'@;
put 'aWxlIG1pc3NpbmcgIitRKTt2YXIgX2U9ZnVuY3Rpb24gRTMoeSl7dmFyIFA9W107eS5sKz00O2Zvcih2YXIgTD15LnJlYWRfc2hpZnQoNCk7TC0tID4wOylQLnB1c2goeS5yZWFkX3NoaWZ0KDAsImxwcDQiKSk7cmV0dXJuIFB9KHJlLmNvbnRlbnQpO2lmKDEhPV9lLmxlbmd0aHx8IlN0cm9u'@;
put 'Z0VuY3J5cHRpb25UcmFuc2Zvcm0iIT1fZVswXSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCAiK1EpO2lmKCEocmU9amUuZmluZCh5LFE9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8'@;
put 'fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpOyFmdW5jdGlvbiBBMyh5KXt2YXIgUD1mdW5jdGlvbiBrMyh5KXt2YXIgUD17fTtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLHkubCs9NCxQLmlkPXkucmVhZF9zaGlmdCgwLCJs'@;
put 'cHA0IiksUC5uYW1lPXkucmVhZF9zaGlmdCgwLCJscHA0IiksUC5SPUcwKHksNCksUC5VPUcwKHksNCksUC5XPUcwKHksNCksUH0oeSk7aWYoUC5lbmFtZT15LnJlYWRfc2hpZnQoMCwiOGxwcDQiKSxQLmJsa3N6PXkucmVhZF9zaGlmdCg0KSxQLmNtb2RlPXkucmVhZF9zaGlmdCg0KSw0IT15'@;
put 'LnJlYWRfc2hpZnQoNCkpdGhyb3cgbmV3IEVycm9yKCJCYWQgIVByaW1hcnkgcmVjb3JkIik7cmV0dXJuIFB9KHJlLmNvbnRlbnQpfWNhdGNoe31pZighKHJlPWplLmZpbmQoeSxRPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5j'@;
put 'cnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpO3ZhciB2ZT1mdW5jdGlvbiBUMyh5KXt2YXIgUD1HMCh5KTtzd2l0Y2goUC5NaW5vcil7Y2FzZSAyOnJldHVybltQLk1pbm9yLGdaKHkpXTtjYXNlIDM6cmV0dXJuW1AuTWlub3IsaEQoKV07Y2FzZSA0OnJldHVybltQLk1pbm9yLG1aKHkpXX10aHJv'@;
put 'dyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAiK1AuTWlub3IpfShyZS5jb250ZW50KTtpZighKHJlPWplLmZpbmQoeSxRPSIvRW5jcnlwdGVkUGFja2FnZSIpKXx8IXJlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBF'@;
put 'bmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7aWYoND09dmVbMF0pcmV0dXJuIGZ1bmN0aW9uIE5lKHksUCxMLFEpe3ZhciByZT1qZS51dGlscy5wcmVwX2Jsb2I7aWYoImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiE9eS51'@;
put 'cmkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFQ01BLTM3NiBBZ2lsZSBVUkkgIit5LnVyaSk7dmFyIHBlPXkuZW5jc1swXSxfZT1wZS5oYXNoQWxnb3JpdGhtLHZlPSJhZXMtMjU2LWNiYyIsU2U9QnVmZmVyLmZyb20ocGUuc2FsdFZhbHVlLCJiYXNlNjQiKSxIZT1CdWZmZXIuZnJv'@;
put 'bSh5LnNhbHRWYWx1ZSwiYmFzZTY0IiksQmU9K3BlLmJsb2NrU2l6ZSxHZT0rcGUua2V5Qml0cz4+MyxudD1lbChCdWZmZXIuY29uY2F0KFtTZSxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEwpKV0pLF9lKSxkdD1CdWZmZXIuYWxsb2MoNCk7cmUoZHQsMCk7Zm9yKHZh'@;
put 'ciBDdD0wO0N0PHBlLnNwaW5Db3VudDsrK0N0KWR0Lmw9MCxkdC53cml0ZV9zaGlmdCg0LEN0KSxudD1lbChCdWZmZXIuY29uY2F0KFtkdCxudF0pLF9lKTt2YXIgY3Q9ZnVuY3Rpb24odHIsWm4sVnIsb2kpe3ZhciBraT1lbChCdWZmZXIuY29uY2F0KFt0cixCdWZmZXIuZnJvbShbMjAsMTEw'@;
put 'LDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKV0pLG9pKSxMaT1raS5sZW5ndGg+PVZyP2tpLnNsaWNlKDAsVnIpOkJ1ZmZlci5hbGxvYyhWcik7aWYoa2kubGVuZ3RoPFZyKXtmb3IodmFyIFFyPTA7UXI8a2kubGVuZ3RoOysrUXIpTGlbUXJdPWtpW1FyXTtmb3IoO1FyPFZyOysrUXIpTGlbUXJd'@;
put 'PTU0fXJldHVybiBMaX0obnQsMCxHZSxfZSk7c3dpdGNoKHBlLmNpcGhlckFsZ29yaXRobSl7Y2FzZSJBRVMiOmlmKCJDaGFpbmluZ01vZGVDQkMiIT1wZS5jaXBoZXJDaGFpbmluZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBjaGFpbmluZyAiK3BlLmNpcGhlckNoYWlu'@;
put 'aW5nKTt2ZT0iYWVzLSIrcGUua2V5Qml0cysiLWNiYyI7YnJlYWs7Y2FzZSJSQzIiOnZlPSJyYzIiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgYWxnbyAiK3BlLmNpcGhlckFsZ29yaXRobSl9U2U9ZnVuY3Rpb24oZXIpe2Zvcih2YXIgdHI9QnVm'@;
put 'ZmVyLmFsbG9jKEJlKSxabj0wO1puPEJlOysrWm4pdHJbWm5dPVpuPGVyLmxlbmd0aD9lcltabl06NTQ7cmV0dXJuIHRyfShTZSk7dmFyIGJ0PUJ1ZmZlci5mcm9tKHBlLmVuY3J5cHRlZEtleVZhbHVlLCJiYXNlNjQiKSxGdD1KMShjdCxTZSx2ZSkudXBkYXRlKGJ0KSxFdD1KMShlbChCdWZm'@;
put 'ZXIuY29uY2F0KFtudCxCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIsNzhdKV0pLF9lKS5zbGljZSgwLEdlKSxTZSx2ZSkudXBkYXRlKEJ1ZmZlci5mcm9tKHBlLmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlLCJiYXNlNjQiKSksVHQ9ZWwoSjEoZWwoQnVmZmVyLmNvbmNh'@;
put 'dChbbnQsQnVmZmVyLmZyb20oWzI1NCwxNjcsMjEwLDExOCw1OSw3NSwxNTgsMTIxXSldKSxfZSkuc2xpY2UoMCxHZSksU2UsdmUpLnVwZGF0ZShCdWZmZXIuZnJvbShwZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dCwiYmFzZTY0IikpLF9lKSxadD0rcGUuaGFzaFNpemV8fE1hdGgubWlu'@;
put 'KEV0Lmxlbmd0aCxUdC5sZW5ndGgpO2lmKDAhPUV0LnNsaWNlKDAsWnQpLmNvbXBhcmUoVHQuc2xpY2UoMCxadCkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7cmUoUCwwKTt2YXIgcG49UC5yZWFkX3NoaWZ0KDQpO1AubCs9NDt2YXIgS249W10sdW49QnVmZmVyLmNv'@;
put 'bmNhdChbSGUsQnVmZmVyLmFsbG9jKDQpXSk7Zm9yKHJlKHVuKSxDdD0wO1AubDxQLmxlbmd0aDspdW4ubD1TZS5sZW5ndGgsdW4ud3JpdGVfc2hpZnQoNCxDdCksS24ucHVzaChKMShGdCxlbChCdWZmZXIuZnJvbSh1biksX2UpLnNsaWNlKDAsMTYpLHZlKS51cGRhdGUoQnVmZmVyLmZyb20o'@;
put 'UC5zbGljZShQLmwsUC5sKzQwOTYpKSkpLFAubCs9NDA5NiwrK0N0O3ZhciB6bj1CdWZmZXIuY29uY2F0KEtuKS5zbGljZSgwLHBuKSxrbj1vbihRKTtyZXR1cm4ga24udHlwZT0iYnVmZmVyIixfZih6bixrbil9KHZlWzFdLHJlLmNvbnRlbnQsTC5wYXNzd29yZHx8IiIsTCk7aWYoMj09dmVb'@;
put 'MF0pcmV0dXJuIGZ1bmN0aW9uIGRfKHksUCxMLFEpe3ZhciByZT1qZS51dGlscy5wcmVwX2Jsb2I7aWYoIlN0ZCIhPT15LnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO3ZhciBwZT15LnYuU2FsdCxfZT15LnYuVmVyaWZpZXIsdmU9eS52LlZl'@;
put 'cmlmaWVySGFzaDtpZigzNiE9eS5oLkZsYWdzKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgU3RhbmRhcmQgRW5jcnlwdGlvbiBiYWQgRmxhZ3MiKTt2YXIgU2U9MCxIZT0iIjtzd2l0Y2goeS5oLkFsZ0lEKXtjYXNlIDI2MTI2OlNlPTEyOCxIZT0iYWVzLTEyOC1lY2IiO2JyZWFrO2Nhc2Ug'@;
put 'MjYxMjc6U2U9MTk2LEhlPSJhZXMtMTkyLWVjYiI7YnJlYWs7Y2FzZSAyNjEyODpTZT0yNTYsSGU9ImFlcy0yNTYtZWNiIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKX1pZigzMjc3MiE9eS5oLkFsZ0lESGFzaCl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7aWYoeS5oLktleVNpemUhPVNlKXRocm93IG5ldyBFcnJvcigiQWxnSUQvS2V5U2l6ZSBtaXNtYXRjaCIpO2lmKDI0IT15LmguUHJvdmlkZXJUeXBlKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgdW5zdXBw'@;
put 'b3J0ZWQgUHJvdmlkZXJUeXBlICIreS5oLlByb3ZpZGVyVHlwZSk7aWYoIk1pY3Jvc29mdCBFbmhhbmNlZCBSU0EgYW5kIEFFUyBDcnlwdG9ncmFwaGljIFByb3ZpZGVyIiE9PXkuaC5DU1BOYW1lLnNsaWNlKDAsNTMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ3J5cHRvIFByb3Zp'@;
put 'ZGVyICIreS5oLkNTUE5hbWUpO3ZhciBHZT0iU0hBLTEiLG50PVNlPj4zLGR0PWVsKEJ1ZmZlci5jb25jYXQoW3BlLGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsTCldKSxHZSksQ3Q9QnVmZmVyLmFsbG9jKDQpO3JlKEN0LDApO2Zvcih2YXIgY3Q9MDtjdDw1ZTQ7KytjdClDdC5sPTAsQ3Qu'@;
put 'd3JpdGVfc2hpZnQoNCxjdCksZHQ9ZWwoQnVmZmVyLmNvbmNhdChbQ3QsZHRdKSxHZSk7Q3QubD0wLEN0LndyaXRlX3NoaWZ0KDQsMCk7dmFyIEtuLHVuLHFuLHpuLGtuLEZ0PSh6bj0ocW49ZnVuY3Rpb24odHIsWm4sVnIpe2Zvcih2YXIgb2k9QnVmZmVyLmFsbG9jKDY0KSxraT0wO2tpPG9p'@;
put 'Lmxlbmd0aDsrK2tpKW9pW2tpXT10cjtmb3Ioa2k9MDtraTxabi5sZW5ndGg7KytraSlvaVtraV1ePVpuW2tpXTtyZXR1cm4gZWwob2ksVnIpfSkoNTQsS249ZWwoQnVmZmVyLmNvbmNhdChbZHQsQ3RdKSxHZSksdW49R2UpLGtuPXFuKDkyLEtuLHVuKSxCdWZmZXIuY29uY2F0KFt6bixrbl0p'@;
put 'LnNsaWNlKDAsbnQpKTtpZihKMShGdCxCdWZmZXIuYWxsb2MoMCksSGUpLnVwZGF0ZSh2ZSkuc2xpY2UoMCwyMCkuY29tcGFyZShlbChKMShGdCxCdWZmZXIuYWxsb2MoMCksSGUpLnVwZGF0ZShfZSksR2UpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO3JlKFAsMCk7'@;
put 'dmFyIEV0PVAucmVhZF9zaGlmdCg0KTtQLmwrPTQ7dmFyIFR0PVtdO2ZvcihjdD0wO1AubDxQLmxlbmd0aDspVHQucHVzaChKMShGdCxCdWZmZXIuYWxsb2MoMCksSGUpLnVwZGF0ZShQLnNsaWNlKFAubCxQLmwrNDA5NikpKSxQLmwrPTQwOTYsKytjdDtyZXR1cm4gX2YoQnVmZmVyLmNvbmNh'@;
put 'dChUdCkuc2xpY2UoMCxFdCksUSl9KHZlWzFdLHJlLmNvbnRlbnQsTC5wYXNzd29yZHx8IiIsTCk7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpfXZhciBfUj1mdW5jdGlvbigpe307ZnVuY3Rpb24gYlIoeSxQKXtpZihQLnRlbXBsYXRlKXJldHVybiBfUih5'@;
put 'LFApO2lmKCJvZHMiPT1QLmJvb2tUeXBlKXJldHVybiBfMCh5LFApO0ZtKFAmJlAuUFBJfHw5NikseSYmIXkuU1NGJiYoeS5TU0Y9dy5nZXRfdGFibGUoKSkseSYmeS5TU0YmJihKKHcpLHcubG9hZF90YWJsZSh5LlNTRiksUC5yZXZzc2Y9QWUoeS5TU0YpLFAucmV2c3NmW3kuU1NGWzY1NTM1'@;
put 'XV09MCxQLnNzZj15LlNTRikseS5TdHlsZXM9e0ZvbnRzOlAuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6UC5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5U'@;
put 'eXBlOiJncmF5MTI1In1dLEJvcmRlcnM6UC5Cb3JkZXJzPVt7fV0sRFhGOlAuRFhGPXkuU3R5bGVzJiZ5LlN0eWxlcy5EWEZ8fFtdLFRhYmxlOlAuVGFibGU9eS5TdHlsZXMmJnkuU3R5bGVzLlRhYmxlfHxbXX0sUC5vdmVycmlkZU1EVz9wbD1QLm92ZXJyaWRlTURXOloxKFAuRm9udHNbMF0p'@;
put 'LFAucmVscz17fSxQLndicmVscz17fSxQLlN0cmluZ3M9W10sUC5TdHJpbmdzLkNvdW50PTAsUC5TdHJpbmdzLlVuaXF1ZT0wLEswP1AucmV2U3RyaW5ncz1uZXcgTWFwOihQLnJldlN0cmluZ3M9e30sUC5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgUC5yZXZTdHJpbmdzLmZvbyk7dmFyIEw9'@;
put 'Inhsc2IiPT1QLmJvb2tUeXBlPyJiaW4iOiJ4bWwiLFE9UlouaW5kZXhPZihQLmJvb2tUeXBlKT4tMSxyZT17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpb'@;
put 'XSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNo'@;
put 'YXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07aF8oUD1QfHx7fSk7dmFyIHBlPXluKCksX2U9IiIsdmU9MDtpZihQLmNlbGxYZnM9W10sUC5jZWxsU3R5bGVYZnM9W3tuYW1l'@;
put 'OiJOb3JtYWwifV0sZ3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSx5LlByb3BzfHwoeS5Qcm9wcz17fSksWXQocGUsX2U9ImRvY1Byb3BzL2NvcmUueG1sIixmdW5jdGlvbiAkaCh5LFApe3ZhciBMPVB8fHt9LFE9W0JuLFAyXSxyZT17fTtpZigh'@;
put 'eSYmIUwuUHJvcHMpcmV0dXJuIFEuam9pbigiIik7eSYmKG51bGwhPXkuQ3JlYXRlZERhdGUmJmh1KCJkY3Rlcm1zOmNyZWF0ZWQiLCJzdHJpbmciPT10eXBlb2YgeS5DcmVhdGVkRGF0ZT95LkNyZWF0ZWREYXRlOlBoKHkuQ3JlYXRlZERhdGUsTC5XVEYpLHsieHNpOnR5cGUiOiJkY3Rlcm1z'@;
put 'OlczQ0RURiJ9LFEscmUpLG51bGwhPXkuTW9kaWZpZWREYXRlJiZodSgiZGN0ZXJtczptb2RpZmllZCIsInN0cmluZyI9PXR5cGVvZiB5Lk1vZGlmaWVkRGF0ZT95Lk1vZGlmaWVkRGF0ZTpQaCh5Lk1vZGlmaWVkRGF0ZSxMLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sUSxy'@;
put 'ZSkpO2Zvcih2YXIgcGU9MDtwZSE9T2wubGVuZ3RoOysrcGUpe3ZhciBfZT1PbFtwZV0sdmU9TC5Qcm9wcyYmbnVsbCE9TC5Qcm9wc1tfZVsxXV0/TC5Qcm9wc1tfZVsxXV06eT95W19lWzFdXTpudWxsOyEwPT09dmU/dmU9IjEiOiExPT09dmU/dmU9IjAiOiJudW1iZXIiPT10eXBlb2YgdmUm'@;
put 'Jih2ZT1TdHJpbmcodmUpKSxudWxsIT12ZSYmaHUoX2VbMF0sdmUsbnVsbCxRLHJlKX1yZXR1cm4gUS5sZW5ndGg+MiYmKFFbUS5sZW5ndGhdPSI8L2NwOmNvcmVQcm9wZXJ0aWVzPiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfSh5LlByb3BzLFApKSxyZS5jb3Jl'@;
put 'cHJvcHMucHVzaChfZSksem8oUC5yZWxzLDIsX2UsSGkuQ09SRV9QUk9QUyksX2U9ImRvY1Byb3BzL2FwcC54bWwiLCF5LlByb3BzfHwheS5Qcm9wcy5TaGVldE5hbWVzKWlmKHkuV29ya2Jvb2smJnkuV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIFNlPVtdLEhlPTA7SGU8eS5TaGVldE5hbWVz'@;
put 'Lmxlbmd0aDsrK0hlKTIhPSh5Lldvcmtib29rLlNoZWV0c1tIZV18fHt9KS5IaWRkZW4mJlNlLnB1c2goeS5TaGVldE5hbWVzW0hlXSk7eS5Qcm9wcy5TaGVldE5hbWVzPVNlfWVsc2UgeS5Qcm9wcy5TaGVldE5hbWVzPXkuU2hlZXROYW1lczt5LlByb3BzLldvcmtzaGVldHM9eS5Qcm9wcy5T'@;
put 'aGVldE5hbWVzLmxlbmd0aCxZdChwZSxfZSxmdW5jdGlvbiBwcyh5KXt2YXIgUD1bXSxMPVNyO3JldHVybiB5fHwoeT17fSkseS5BcHBsaWNhdGlvbj0iU2hlZXRKUyIsUFtQLmxlbmd0aF09Qm4sUFtQLmxlbmd0aF09ZzMsUjEuZm9yRWFjaChmdW5jdGlvbihRKXtpZih2b2lkIDAhPT15W1Fb'@;
put 'MV1dKXt2YXIgcmU7c3dpdGNoKFFbMl0pe2Nhc2Uic3RyaW5nIjpyZT1IcihTdHJpbmcoeVtRWzFdXSkpO2JyZWFrO2Nhc2UiYm9vbCI6cmU9eVtRWzFdXT8idHJ1ZSI6ImZhbHNlIn12b2lkIDAhPT1yZSYmKFBbUC5sZW5ndGhdPUwoUVswXSxyZSkpfX0pLFBbUC5sZW5ndGhdPUwoIkhlYWRp'@;
put 'bmdQYWlycyIsTCgidnQ6dmVjdG9yIixMKCJ2dDp2YXJpYW50IiwiPHZ0Omxwc3RyPldvcmtzaGVldHM8L3Z0Omxwc3RyPiIpK0woInZ0OnZhcmlhbnQiLEwoInZ0Omk0IixTdHJpbmcoeS5Xb3Jrc2hlZXRzKSkpLHtzaXplOjIsYmFzZVR5cGU6InZhcmlhbnQifSkpLFBbUC5sZW5ndGhdPUwo'@;
put 'IlRpdGxlc09mUGFydHMiLEwoInZ0OnZlY3RvciIseS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihRKXtyZXR1cm4iPHZ0Omxwc3RyPiIrSHIoUSkrIjwvdnQ6bHBzdHI+In0pLmpvaW4oIiIpLHtzaXplOnkuV29ya3NoZWV0cyxiYXNlVHlwZToibHBzdHIifSkpLFAubGVuZ3RoPjImJihQW1Au'@;
put 'bGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfSh5LlByb3BzKSkscmUuZXh0cHJvcHMucHVzaChfZSksem8oUC5yZWxzLDMsX2UsSGkuRVhUX1BST1BTKSx5LkN1c3Rwcm9wcyE9PXkuUHJvcHMmJmx0KHkuQ3VzdHByb3BzfHx7'@;
put 'fSkubGVuZ3RoPjAmJihZdChwZSxfZT0iZG9jUHJvcHMvY3VzdG9tLnhtbCIsZnVuY3Rpb24gZDAoeSl7dmFyIFA9W0JuLHVtXTtpZigheSlyZXR1cm4gUC5qb2luKCIiKTt2YXIgTD0xO3JldHVybiBsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXsrK0wsUFtQLmxlbmd0aF09U3IoInByb3Bl'@;
put 'cnR5IixmdW5jdGlvbiBlYSh5LFApe3N3aXRjaCh0eXBlb2YgeSl7Y2FzZSJzdHJpbmciOnZhciBMPVNyKCJ2dDpscHdzdHIiLEhyKHkpKTtyZXR1cm4gUCYmKEw9TC5yZXBsYWNlKC8mcXVvdDsvZywiX3gwMDIyXyIpKSxMO2Nhc2UibnVtYmVyIjpyZXR1cm4gU3IoKDB8eSk9PXk/InZ0Omk0'@;
put 'IjoidnQ6cjgiLEhyKFN0cmluZyh5KSkpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIFNyKCJ2dDpib29sIix5PyJ0cnVlIjoiZmFsc2UiKX1pZih5IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gU3IoInZ0OmZpbGV0aW1lIixQaCh5KSk7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gc2VyaWFsaXpl'@;
put 'ICIreSl9KHlbcmVdLCEwKSx7Zm10aWQ6IntENUNERDUwNS0yRTlDLTEwMUItOTM5Ny0wODAwMkIyQ0Y5QUV9IixwaWQ6TCxuYW1lOkhyKHJlKX0pfSksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigi'@;
put 'Iil9KHkuQ3VzdHByb3BzKSkscmUuY3VzdHByb3BzLnB1c2goX2UpLHpvKFAucmVscyw0LF9lLEhpLkNVU1RfUFJPUFMpKTt2YXIgQmU9W10sR2U9W107ZnVuY3Rpb24gbnQocG4sS24pe0dlLnB1c2goW3ZlLTEsS24scG5dKX1mdW5jdGlvbiBkdChwbil7QmUucHVzaChbdmUtMSxwbl0pLHpv'@;
put 'KEN0LC0xLCIuLi9waXZvdFRhYmxlcy9waXZvdFRhYmxlIitCZS5sZW5ndGgrIi4iK0wsSGkuUElWT1QpfWZvcih2ZT0xO3ZlPD15LlNoZWV0TmFtZXMubGVuZ3RoOysrdmUpe3ZhciBDdD17IiFpZCI6e319LGN0PXkuU2hlZXRzW3kuU2hlZXROYW1lc1t2ZS0xXV0sYnQ9KGN0fHx7fSlbIiF0'@;
put 'eXBlIl18fCJzaGVldCI7c3dpdGNoKGJ0KXtjYXNlImNoYXJ0IjppZih0eXBlb2Ygd3JpdGVfZHJhd2luZ188InUiKXtZdChwZSxfZT0ieGwvY2hhcnRzaGVldHMvc2hlZXQiK3ZlKyIuIitMLGxNKHZlLTEsX2UsUCx5LEN0KSkscmUuY2hhcnRzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJj'@;
put 'aGFydHNoZWV0cy9zaGVldCIrdmUrIi4iK0wsSGkuQ1MpO2JyZWFrfWRlZmF1bHQ6WXQocGUsX2U9InhsL3dvcmtzaGVldHMvc2hlZXQiK3ZlKyIuIitMLFpMKHZlLTEsX2UsUCx5LEN0KSkscmUuc2hlZXRzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJ3b3Jrc2hlZXRzL3NoZWV0Iit2ZSsi'@;
put 'LiIrTCxIaS5XU1swXSl9aWYoY3QpeyJjaGFydCI9PWJ0JiYhY3RbIiFwb3MiXSYmKGN0WyIhcG9zIl09e3g6MCx5OjAsdzo5MDAsaDo2MDB9KTt2YXIgRnQ9Y3RbIiFjb21tZW50cyJdLEV0PSExO2lmKEZ0JiZGdC5sZW5ndGg+MCl7dmFyIFR0PSJ4bC9jb21tZW50cyIrdmUrIi4iK0w7WXQo'@;
put 'cGUsVHQsUWUoRnQsVHQsUCkpLHJlLmNvbW1lbnRzLnB1c2goVHQpLHpvKEN0LC0xLCIuLi9jb21tZW50cyIrdmUrIi4iK0wsSGkuQ01OVCksRXQ9ITB9KGN0WyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wJiYoRXQ9ITApLGN0WyIhbGVnYWN5Il0mJkV0JiZZdChwZSwieGwvZHJhd2luZ3Mv'@;
put 'dm1sRHJhd2luZyIrdmUrIi52bWwiLHFEKHZlLGN0WyIhY29tbWVudHMiXSxjdFsiIWNvbnRyb2xzIl0sY3QpKSxjdFsiIWxlZ2FjeUhGIl0mJm42KHBlLDAsdmUsY3RbIiFwcmludCJdLmltYWdlcyk7dmFyIFp0PSgiY2hhcnQiPT1jdFsiIXR5cGUiXT9bY3RdOmN0WyIhY2hhcnRzIl18fFtd'@;
put 'KS5jb25jYXQoKGN0WyIhaW1hZ2VzIl18fFtdKS5tYXAoZnVuY3Rpb24ocG4pe3JldHVybiBwblsiIXR5cGUiXXx8KHBuWyIhdHlwZSJdPSJpbWFnZSIpLHBufSkpLmNvbmNhdCgoY3RbIiFzaGFwZXMiXXx8W10pLm1hcChmdW5jdGlvbihwbil7cmV0dXJuIHBuWyIhdHlwZSJdfHwocG5bIiF0'@;
put 'eXBlIl09InNoYXBlIikscG59KSk7WnQmJlp0Lmxlbmd0aCYmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwidSI/d3JpdGVfZHJhd2luZ18ocGUscmUsdmUsY3QsWnQpOihZdChwZSwieGwvZHJhd2luZ3MvZHJhd2luZyIrdmUrIi54bWwiLFJDKCkpLHJlLmRyYXdpbmdzLnB1c2goInhsL2RyYXdp'@;
put 'bmdzL2RyYXdpbmciK3ZlKyIueG1sIikpKSxkZWxldGUgY3RbIiFjb21tZW50cyJdLGRlbGV0ZSBjdFsiIWxlZ2FjeSJdLGRlbGV0ZSBjdFsiIWxlZ2FjeUhGIl19Y3QmJmN0WyIhcGl2b3RzIl0mJiJ4bWwiPT1MJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmY3RbIiFwaXZvdHMiXS5m'@;
put 'b3JFYWNoKGR0KSxDdFsiIWlkIl0ucklkMSYmWXQocGUsQmkoX2UpLFhhKEN0KSksY3QmJmN0WyIhdGFibGVzIl0mJiJ4bWwiPT1MJiZjdFsiIXRhYmxlcyJdLmZvckVhY2gobnQpfXJldHVybiBudWxsIT1QLlN0cmluZ3MmJlAuU3RyaW5ncy5sZW5ndGg+MCYmKFl0KHBlLF9lPSJ4bC9zaGFy'@;
put 'ZWRTdHJpbmdzLiIrTCxXTChQLlN0cmluZ3MsX2UsUCkpLHJlLnN0cnMucHVzaChfZSksem8oUC53YnJlbHMsLTEsInNoYXJlZFN0cmluZ3MuIitMLEhpLlNTVCkpLCJ4bWwiPT1MJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmd3JpdGVfcGl2b3RfeG1sKEJlLHkscGUscmUsUCksInht'@;
put 'bCI9PUwmJmZ1bmN0aW9uIHE0KHksUCxMLFEpe3kuZm9yRWFjaChmdW5jdGlvbihyZSxwZSl7dmFyIF9lPVAuU2hlZXRzW1AuU2hlZXROYW1lc1tyZVswXV1dLHZlPSJ4bC90YWJsZXMvdGFibGUiKyhyZVswXSsxKSsiXyIrcmVbMV0rIi54bWwiO1EudGFibGVzLnB1c2godmUpO3ZhciBTZT1y'@;
put 'ZVsyXS5yZWZ8fF9lWyIhcmVmIl07InN0cmluZyIhPXR5cGVvZiBTZSYmKFNlPU9vKFNlKSk7dmFyIEhlPU9pKFNlKSxCZT1yZVsyXS5uYW1lfHwic2pzdGJsXyIrcmVbMF0rIl8iK3JlWzFdLEdlPVtCbl0sbnQ9IWhuKHJlWzJdLmhlYWRlciksZHQ9bnQmJiFobihyZVsyXS5maWx0ZXIpO0dl'@;
put 'LnB1c2goJzx0YWJsZSB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiBpZD0iJysocGUrMSkrJyIgbmFtZT0iJytIcihCZSkrJyIgZGlzcGxheU5hbWU9IicrSHIoQmUpKyciIHJlZj0iJytTZSsnIiAnKyhudWxsIT1yZVsy'@;
put 'XS5oZWFkZXImJjEhPXJlWzJdLmhlYWRlcj8naGVhZGVyUm93Q291bnQ9IicrKHJlWzJdLmhlYWRlcnx8MCkrJyIgJzoiIikrIj4iKSxkdCYmR2UucHVzaCgnPGF1dG9GaWx0ZXIgcmVmPSInK1NlKyciLz4nKSxHZS5wdXNoKCc8dGFibGVDb2x1bW5zIGNvdW50PSInKyhIZS5lLmMtSGUucy5j'@;
put 'KzEpKyciPicpO2Zvcih2YXIgQ3Q9W10sY3Q9SGUucy5jO2N0PD1IZS5lLmM7KytjdClpZihudCl7Zm9yKHZhciBidD1kaSh7cjpIZS5zLnIsYzpjdH0pLEZ0PV9lW2J0XSxFdD1yZVsyXS5jb2xzJiZyZVsyXS5jb2xzW2N0LUhlLnMuY10mJnJlWzJdLmNvbHNbY3QtSGUucy5jXS5uYW1lfHxG'@;
put 'dCYmKEZ0Lnd8fEZ0LnYpfHwiQ29sdW1uICIrKGN0LUhlLnMuYysxKSxUdD1FdCxadD0xO0N0LmluZGV4T2YoVHQpPi0xJiYrK1p0PDE2Mzg0OylUdD1FdCtadDtpZihUdCE9RXQpdGhyb3cidGFibGUgY29sdW1ucyAiK2N0KyIgYW5kICIrKEN0LmluZGV4T2YoRXQpK0hlLnMuYykrIiBoYXZl'@;
put 'IHRoZSBzYW1lIGhlYWRlciAnIitFdCsiJzsgdHJ5IHNldHRpbmcgY2VsbCAiK2J0KyIgdG8gJyIrVHQrIiciO0N0LnB1c2goVHQpLEdlLnB1c2goJzx0YWJsZUNvbHVtbiBpZD0iJysocmVbMl0uY29scyYmcmVbMl0uY29sc1tjdC1IZS5zLmNdJiZudWxsIT1yZVsyXS5jb2xzW2N0LUhlLnMu'@;
put 'Y10uaWQ/cmVbMl0uY29sc1tjdC1IZS5zLmNdLmlkOmN0LUhlLnMuYysxKSsnIiBuYW1lPSInK0hyKFR0KSsnIi8+Jyl9ZWxzZSBHZS5wdXNoKHJlWzJdLmNvbHMmJnJlWzJdLmNvbHNbY3QtSGUucy5jXT8nPHRhYmxlQ29sdW1uIGlkPSInK3JlWzJdLmNvbHNbY3QtSGUucy5jXS5pZCsnIiBu'@;
put 'YW1lPSInK3JlWzJdLmNvbHNbY3QtSGUucy5jXS5uYW1lKyciLz4nOic8dGFibGVDb2x1bW4gaWQ9IicrKGN0LUhlLnMuYysxKSsnIiB1bmlxdWVOYW1lPSInKyhjdC1IZS5zLmMrMSkrJyIgbmFtZT0iJysoY3QtSGUucy5jKzEpKyciLz4nKTtHZS5wdXNoKCI8L3RhYmxlQ29sdW1ucz4iKTt2'@;
put 'YXIgS249KyghMSE9PShyZVsyXS5zdHlsZXx8e30pLnJvd3N0cmlwZSksdW49KyEhKHJlWzJdLnN0eWxlfHx7fSkuY29sc3RyaXBlLHFuPSshIShyZVsyXS5zdHlsZXx8e30pLmNvbGZpcnN0LHpuPSshIShyZVsyXS5zdHlsZXx8e30pLmNvbGxhc3Qsa249KHJlWzJdLnN0eWxlfHx7fSkubmFt'@;
put 'ZXx8Ik1lZGl1bTkiO2tuPWtuLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKT8iVGFibGVTdHlsZSIra246a24sR2UucHVzaCgnPHRhYmxlU3R5bGVJbmZvIG5hbWU9Iicra24rJyIgc2hvd0ZpcnN0Q29sdW1uPSInK3FuKyciIHNob3dMYXN0Q29sdW1uPSInK3puKyciIHNob3dS'@;
put 'b3dTdHJpcGVzPSInK0tuKyciIHNob3dDb2x1bW5TdHJpcGVzPSInK3VuKyciLz4nKSxHZS5wdXNoKCI8L3RhYmxlPiIpLFl0KEwsdmUsR2Uuam9pbigiIikpfSl9KEdlLHkscGUscmUpLCJ4bWwiPT1MJiYoeS5FeHRlcm5hbFdCfHxbXSkubGVuZ3RoJiZmdW5jdGlvbiBXOSh5LFAsTCl7TC5s'@;
put 'aW5rc3x8KEwubGlua3M9W10pLHkuRXh0ZXJuYWxXQiYmeS5FeHRlcm5hbFdCLmZvckVhY2goZnVuY3Rpb24oUSxyZSl7dmFyIHBlPSIveGwvZXh0ZXJuYWxMaW5rcy9fcmVscy9leHRlcm5hbExpbmsiKyhyZSsxKSsiLnhtbC5yZWxzIixfZT17fTt6byhfZSwtMSxRLlRhcmdldCxRLk1pc3Np'@;
put 'bmc/SGkuWE1JU1M6SGkuWFBBVEgpLFl0KFAsYWMocGUpLFhhKF9lKSk7dmFyIHZlPSIveGwvZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhyZSsxKSsiLnhtbCI7TC5saW5rcy5wdXNoKHZlKSxZdChQLGFjKHZlKSxmdW5jdGlvbiBJQyh5KXt2YXIgUD1bQm4sdDZdO3JldHVybih5LlNo'@;
put 'ZWV0TmFtZXN8fFtdKS5sZW5ndGgmJihQLnB1c2goJzxleHRlcm5hbEJvb2sgeG1sbnM6cj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIgcjppZD0icklkMSI+JyksUC5wdXNoKCI8c2hlZXROYW1lcz4iKSx5LlNo'@;
put 'ZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihMKXtQLnB1c2goJzxzaGVldE5hbWUgdmFsPSInK0hyKEwpKyciLz4nKX0pLFAucHVzaCgiPC9zaGVldE5hbWVzPiIpLFAucHVzaCgiPHNoZWV0RGF0YVNldD4iKSx5LlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihMLFEpe3ZhciByZT15LlNo'@;
put 'ZWV0c1tMXSxwZT17c2hlZXRJZDpRfSxfZT1udWxsO2lmKG51bGw9PXJlKXBlLnJlZnJlc2hFcnJvcj0xO2Vsc2UgaWYocmVbIiFyZWYiXSl7dmFyIHZlPVdzKHJlWyIhcmVmIl0pO19lPSIiO2Zvcih2YXIgU2U9dmUucy5yO1NlPD12ZS5lLnI7KytTZSl7Zm9yKHZhciBIZT0iIixCZT12ZS5z'@;
put 'LmM7QmU8PXZlLmUuYzsrK0JlKXt2YXIgR2U9ZGkoe3I6U2UsYzpCZX0pO3JlW0dlXSYmKEhlfHwoSGU9Jzxyb3cgcj0iJysoU2UrMSkrJyI+JyksSGUrPSc8Y2VsbCByPSInK0dlKyciJysocmVbR2VdLnQ/JyB0PSInK3JlW0dlXS50KyciJzoiIikrIj48dj4iK0hyKHJlW0dlXS52KSsiPC92'@;
put 'PjwvY2VsbD4iKX1IZSYmKF9lKz1IZSsiPC9yb3c+Iil9fVAucHVzaChTcigic2hlZXREYXRhIixfZSxwZSkpfSksUC5wdXNoKCI8L3NoZWV0RGF0YVNldD4iKSxQLnB1c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvZXh0ZXJuYWxMaW5rPiIsUFsx'@;
put 'XT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfShRKSl9KX0oeSxwZSxyZSksInhtbCI9PUwmJmZ1bmN0aW9uIFRDKHkpe3ZhciBQLEw7eS5Xb3JrYm9va3x8KHkuV29ya2Jvb2s9e05hbWVzOltdfSkseS5Xb3JrYm9vay5OYW1lc3x8KHkuV29ya2Jvb2suTmFtZXM9W10pO2Zv'@;
put 'cih2YXIgUT15Lldvcmtib29rLk5hbWVzLHJlPTA7cmU8eS5TaGVldE5hbWVzLmxlbmd0aDsrK3JlKXt2YXIgcGU9eS5TaGVldE5hbWVzW3JlXSxfZT15LlNoZWV0c1twZV07aWYoX2UmJl9lWyIhcHJpbnQiXSl7dmFyIHZlPSInIitwZSsiJyEiLFNlPV9lWyIhcHJpbnQiXTtpZihTZSl7dmFy'@;
put 'IEhlPSEoUD1TZS5hcmVhKSxCZT0hKEw9U2UudGl0bGVzKSxHZT1QPyJzdHJpbmciPT10eXBlb2YgUD9QOk9vKFApOiIiO2lmKFAmJihRLmZvckVhY2goZnVuY3Rpb24oZHQpe2R0LlNoZWV0PT1yZSYmIUhlJiYiX3hsbm0uUHJpbnRfQXJlYSI9PWR0Lk5hbWUmJihIZT0hMCxkdC5SZWY9dmUr'@;
put 'R2UpfSksSGV8fFEucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfQXJlYSIsUmVmOnZlK0dlLFNoZWV0OnJlfSkpLEwpe3ZhciBudD0iIjtMLnMuYz4tMSYmTC5lLmM+LTEmJihudCs9dmUrTnMoTC5zLmMpKyI6IitOcyhMLmUuYykrIiwiKSxMLnMucj4tMSYmTC5lLnI+LTEmJihudCs9dmUrSHMo'@;
put 'TC5zLnIpKyI6IitIcyhMLmUucikrIiwiKSxudD1udC5zbGljZSgwLC0xKSxRLmZvckVhY2goZnVuY3Rpb24oZHQpe2R0LlNoZWV0PT1yZSYmIUJlJiYiX3hsbm0uUHJpbnRfVGl0bGVzIj09ZHQuTmFtZSYmKEhlPSEwLGR0LlJlZj1udCl9KSxCZXx8US5wdXNoKHtOYW1lOiJfeGxubS5Qcmlu'@;
put 'dF9UaXRsZXMiLFJlZjpudCxTaGVldDpyZX0pfX19fX0oeSksWXQocGUsX2U9InhsL3dvcmtib29rLiIrTCxmdW5jdGlvbiBxdih5LFAsTCl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP0hMOlJMKSh5LEwpfSh5LF9lLFApKSxyZS53b3JrYm9va3MucHVzaChfZSksem8oUC5yZWxzLDEs'@;
put 'X2UsSGkuV0IpLFl0KHBlLF9lPSJ4bC90aGVtZS90aGVtZTEueG1sIixyZih5LlRoZW1lcyxQKSkscmUudGhlbWVzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJ0aGVtZS90aGVtZTEueG1sIixIaS5USEVNRSksWXQocGUsX2U9InhsL3N0eWxlcy4iK0wsZnVuY3Rpb24gWUwoeSxQLEwpe3Jl'@;
put 'dHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9QRDpwQykoeSxMKX0oeSxfZSxQKSkscmUuc3R5bGVzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJzdHlsZXMuIitMLEhpLlNUWSkseS52YmFyYXcmJlEmJihZdChwZSxfZT0ieGwvdmJhUHJvamVjdC5iaW4iLHkudmJhcmF3KSxyZS52YmEucHVz'@;
put 'aChfZSksem8oUC53YnJlbHMsLTEsInZiYVByb2plY3QuYmluIixIaS5WQkEpKSx5Lm1vZGVsJiZ5Lm1vZGVsLmxlbmd0aCYmKFl0KHBlLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLHkubW9kZWwpLHpvKFAud2JyZWxzLC0xLCJtb2RlbC9pdGVtLmRhdGEiLEhpLlBXUlBEKSkseS5jb25uJiYoWXQo'@;
put 'cGUsInhsL2Nvbm5lY3Rpb25zLnhtbCIseS5jb25uKSxyZS5jb25ucy5wdXNoKCIveGwvY29ubmVjdGlvbnMueG1sIiksem8oUC53YnJlbHMsLTEsImNvbm5lY3Rpb25zLnhtbCIsSGkuQ09OTikpLHkuQ3VzdG9tWE1MJiZ5LkN1c3RvbVhNTC5mb3JFYWNoKGZ1bmN0aW9uKHBuLEtuKXtpZihZ'@;
put 'dChwZSwiY3VzdG9tWG1sL2l0ZW0iKyhLbisxKSsiLnhtbCIscG4uZGF0YSksem8oUC53YnJlbHMsLTEsIi4uL2N1c3RvbVhtbC9pdGVtIisoS24rMSkrIi54bWwiLEhpLkNYTUwpLHBuLnByb3BzKXtZdChwZSwiY3VzdG9tWG1sL2l0ZW1Qcm9wcyIrKEtuKzEpKyIueG1sIixwbi5wcm9wcyks'@;
put 'cmUuY3VzdG9teG1scHJvcHMucHVzaCgiL2N1c3RvbVhtbC9pdGVtUHJvcHMiKyhLbisxKSsiLnhtbCIpO3ZhciB1bj17fTt6byh1biwtMSwiaXRlbVByb3BzIisoS24rMSkrIi54bWwiLEhpLkNYTUxQKSxZdChwZSwiY3VzdG9tWG1sL19yZWxzL2l0ZW0iKyhLbisxKSsiLnhtbC5yZWxzIixY'@;
put 'YSh1bikpfX0pLFl0KHBlLCJbQ29udGVudF9UeXBlc10ueG1sIixmdW5jdGlvbiByOSh5LFAsTCl7dmFyIHJlLFE9W107THx8KFFbUS5sZW5ndGhdPUJuLFFbUS5sZW5ndGhdPWYzLFE9US5jb25jYXQobjkpKTt2YXIgcGU9ZnVuY3Rpb24oU2Upe3lbU2VdJiZ5W1NlXS5sZW5ndGg+MCYmKFFb'@;
put 'US5sZW5ndGhdPVNyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09KHJlPXlbU2VdWzBdKVswXT8iIjoiLyIpK3JlLENvbnRlbnRUeXBlOklkW1NlXVtQLmJvb2tUeXBlfHwieGxzeCJdfSkpfSxfZT1mdW5jdGlvbihTZSl7KHlbU2VdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihIZSl7'@;
put 'UVtRLmxlbmd0aF09U3IoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1IZVswXT8iIjoiLyIpK0hlLENvbnRlbnRUeXBlOklkW1NlXVtQLmJvb2tUeXBlfHwieGxzeCJdfSl9KX0sdmU9ZnVuY3Rpb24oU2Upeyh5W1NlXXx8W10pLmZvckVhY2goZnVuY3Rpb24oSGUpe1FbUS5sZW5n'@;
put 'dGhdPVNyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09SGVbMF0/IiI6Ii8iKStIZSxDb250ZW50VHlwZTpIY1tTZV1bMF19KX0pfTtyZXR1cm4gcGUoIndvcmtib29rcyIpLF9lKCJzaGVldHMiKSxfZSgiY2hhcnRzIiksdmUoInRoZW1lcyIpLFsic3RycyIsInN0eWxlcyIsImNv'@;
put 'bm5zIl0uZm9yRWFjaChwZSksWyJjb3JlcHJvcHMiLCJleHRwcm9wcyIsImN1c3Rwcm9wcyJdLmZvckVhY2godmUpLHZlKCJ2YmEiKSx2ZSgiY29tbWVudHMiKSx2ZSgiZHJhd2luZ3MiKSxfZSgidGFibGVzIiksX2UoInBpdm90cyIpLF9lKCJwaXZvdGNhY2hlcyIpLF9lKCJwaXZvdHJlY29y'@;
put 'ZHMiKSx2ZSgiZGF0YW1vZGVscyIpLHZlKCJjdHJscHJvcHMiKSx2ZSgiY2hhcnRvYmpzIiksdmUoImNoYXJ0c3R5bGVzIiksdmUoImNoYXJ0Y29sb3JzIiksdmUoImNoYXJ0ZXhzIiksX2UoImxpbmtzIiksdmUoImN1c3RvbXhtbHByb3BzIiksIUwmJlEubGVuZ3RoPjImJihRW1EubGVuZ3Ro'@;
put 'XT0iPC9UeXBlcz4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIiKX0ocmUsUCkpLFl0KHBlLCJfcmVscy8ucmVscyIsWGEoUC5yZWxzKSksWXQocGUsInhsL19yZWxzL3dvcmtib29rLiIrTCsiLnJlbHMiLFhhKFAud2JyZWxzKSksZGVsZXRlIFAuRm9udHMsZGVsZXRl'@;
put 'IFAuRmlsbHMsZGVsZXRlIFAuQm9yZGVycyxkZWxldGUgUC5yZXZzc2YsZGVsZXRlIFAuc3NmLHBlfWZ1bmN0aW9uIGZfKHksUCl7dmFyIEw9IiI7c3dpdGNoKChQfHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm5beVswXSx5WzFdLHlbMl0seVsz'@;
put 'XSx5WzRdLHlbNV0seVs2XSx5WzddXTtjYXNlImJhc2U2NCI6TD1zZS5kZWNvZGUoeS5zbGljZSgwLDEyKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkw9eTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIisoUCYmUC50eXBlfHwidW5kZWZpbmVkIikpfXJl'@;
put 'dHVybltMLmNoYXJDb2RlQXQoMCksTC5jaGFyQ29kZUF0KDEpLEwuY2hhckNvZGVBdCgyKSxMLmNoYXJDb2RlQXQoMyksTC5jaGFyQ29kZUF0KDQpLEwuY2hhckNvZGVBdCg1KSxMLmNoYXJDb2RlQXQoNiksTC5jaGFyQ29kZUF0KDcpXX1mdW5jdGlvbiBOTSh5LFApe3ZhciBMPTA7ZTpmb3Io'@;
put 'O0w8eS5sZW5ndGg7KXN3aXRjaCh5LmNoYXJDb2RlQXQoTCkpe2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOisrTDticmVhaztjYXNlIDYwOnJldHVybiBqYSh5LnNsaWNlKEwpLFApO2RlZmF1bHQ6YnJlYWsgZX1yZXR1cm4gQjEudG9fd29ya2Jvb2soeSxQKX1mdW5jdGlvbiBwXyh5LFAsTCxR'@;
put 'KXtyZXR1cm4gUT8oTC50eXBlPSJzdHJpbmciLEIxLnRvX3dvcmtib29rKHksTCkpOkIxLnRvX3dvcmtib29rKFAsTCl9ZnVuY3Rpb24gX2YoeSxQKXt2YXIgTD13LmdldGxvY2FsZSgpO0oodyksdy5zZXRsb2NhbGUoTCksVigpO3ZhciBRPVB8fHt9O2lmKHR5cGVvZiBBcnJheUJ1ZmZlcjwi'@;
put 'dSImJnkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gX2YobmV3IFVpbnQ4QXJyYXkoeSksKChRPW9uKFEpKS50eXBlPSJhcnJheSIsUSkpO3ZhciBwZSxyZT15LF9lPSExO2lmKEZtKG5mPVEuUFBJfHxMOSksUS5jZWxsU3R5bGVzJiYoUS5jZWxsTkY9ITAsUS5zaGVldFN0dWJzPSEw'@;
put 'KSxaMz17fSxRLmRhdGVORiYmKFozLmRhdGVORj1RLmRhdGVORiksUS50eXBlfHwoUS50eXBlPWhlJiZCdWZmZXIuaXNCdWZmZXIoeSk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09US50eXBlJiYoUS50eXBlPWhlPyJidWZmZXIiOiJiaW5hcnkiLHJlPWZ1bmN0aW9uIEplKHkpe2lmKHR5'@;
put 'cGVvZiBXZTwidSIpcmV0dXJuIFdlLnJlYWRGaWxlU3luYyh5KTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciBQPUZpbGUoeSk7UC5vcGVuKCJyIiksUC5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgTD1QLnJlYWQoKTtyZXR1cm4gUC5j'@;
put 'bG9zZSgpLEx9Y2F0Y2goUSl7aWYoIVEubWVzc2FnZXx8IVEubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBRfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIreSl9KHkpKSwic3RyaW5nIj09US50eXBlJiYoX2U9ITAsUS50eXBlPSJiaW5hcnkiLFEuY29kZXBh'@;
put 'Z2U9NjUwMDEscmU9ZnVuY3Rpb24gTVIoeSl7cmV0dXJuIHkubWF0Y2goL1teXHgwMC1ceDdGXS8pP0xvKHkpOnl9KHkpKSwiYXJyYXkiPT1RLnR5cGUmJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmeSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSIpe3ZhciB2'@;
put 'ZT1uZXcgQXJyYXlCdWZmZXIoMyksU2U9bmV3IFVpbnQ4QXJyYXkodmUpO2lmKFNlLmZvbz0iYmFyIiwhU2UuZm9vKXJldHVybihRPW9uKFEpKS50eXBlPSJhcnJheSIsX2YoQyhyZSksUSl9c3dpdGNoKChwZT1mXyhyZSxRKSlbMF0pe2Nhc2UgMjA4OmlmKDIwNz09PXBlWzFdJiYxNz09PXBl'@;
put 'WzJdJiYyMjQ9PT1wZVszXSYmMTYxPT09cGVbNF0mJjE3Nz09PXBlWzVdJiYyNj09PXBlWzZdJiYyMjU9PT1wZVs3XSlyZXR1cm4gZnVuY3Rpb24geVIoeSxQKXtyZXR1cm4gamUuZmluZCh5LCJFbmNyeXB0ZWRQYWNrYWdlIik/dlIoeSxQKTpfNSh5LFApfShqZS5yZWFkKHJlLFEpLFEpO2Jy'@;
put 'ZWFrO2Nhc2UgOTppZihwZVsxXTw9OClyZXR1cm4gXzUocmUsUSk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gamEocmUsUSk7Y2FzZSA3MzppZig3Mz09PXBlWzFdJiY0Mj09PXBlWzJdJiYwPT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJUSUZGIEltYWdlIEZpbGUgaXMgbm90IGEgc3ByZWFkc2hl'@;
put 'ZXQiKTtpZig2OD09PXBlWzFdKXJldHVybiBmdW5jdGlvbiBwWih5LFApe3ZhciBMPVB8fHt9LFE9ISFMLldURjtMLldURj0hMDt0cnl7dmFyIHJlPUU5LnRvX3dvcmtib29rKHksTCk7cmV0dXJuIEwuV1RGPVEscmV9Y2F0Y2gocGUpe2lmKEwuV1RGPVEsIXBlLm1lc3NhZ2UubWF0Y2goL1NZ'@;
put 'TEsgYmFkIHJlY29yZCBJRC8pJiZRKXRocm93IHBlO3JldHVybiBCMS50b193b3JrYm9vayh5LFApfX0ocmUsUSk7YnJlYWs7Y2FzZSA4NDppZig2NT09PXBlWzFdJiY2Nj09PXBlWzJdJiY3Nj09PXBlWzNdKXJldHVybiBNMy50b193b3JrYm9vayhyZSxRKTticmVhaztjYXNlIDgwOnJldHVy'@;
put 'biA3NT09PXBlWzFdJiZwZVsyXTw5JiZwZVszXTw5P2Z1bmN0aW9uIHdSKHksUCl7dmFyIFE9eSxyZT1QfHx7fTtyZXR1cm4gcmUudHlwZXx8KHJlLnR5cGU9aGUmJkJ1ZmZlci5pc0J1ZmZlcih5KT8iYnVmZmVyIjoiYmFzZTY0IiksSE0oeG4oUSxyZSkscmUpfShyZSxRKTpwXyh5LHJlLFEs'@;
put 'X2UpO2Nhc2UgMjM5OnJldHVybiA2MD09PXBlWzNdP2phKHJlLFEpOnBfKHkscmUsUSxfZSk7Y2FzZSAyNTU6aWYoMjU0PT09cGVbMV0pcmV0dXJuIGZ1bmN0aW9uIFNSKHksUCl7dmFyIEw9eTtyZXR1cm4iYmFzZTY0Ij09UC50eXBlJiYoTD1zZS5kZWNvZGUoTCkpLEw9Y3B0YWJsZS51dGls'@;
put 'cy5kZWNvZGUoMTIwMCxMLnNsaWNlKDIpLCJzdHIiKSxQLnR5cGU9ImJpbmFyeSIsTk0oTCxQKX0ocmUsUSk7YnJlYWs7Y2FzZSAwOmlmKDA9PT1wZVsxXSYmcGVbMl0+PTImJjA9PT1wZVszXSlyZXR1cm4gVG0udG9fd29ya2Jvb2socmUsUSk7YnJlYWs7Y2FzZSAzOmNhc2UgMTMxOmNhc2Ug'@;
put 'MTM5OmNhc2UgMTQwOnJldHVybiBCMi50b193b3JrYm9vayhyZSxRKTtjYXNlIDEyMzppZig5Mj09PXBlWzFdJiYxMTQ9PT1wZVsyXSYmMTE2PT09cGVbM10pcmV0dXJuIE9tLnRvX3dvcmtib29rKHJlLFEpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBD'@;
put 'Uih5LFApe3ZhciBMPSIiLFE9Zl8oeSxQKTtzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6TD1zZS5kZWNvZGUoeSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkw9eTticmVhaztjYXNlImJ1ZmZlciI6TD15LnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpMPVB0KHkpO2JyZWFr'@;
put 'O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9cmV0dXJuIDIzOT09UVswXSYmMTg3PT1RWzFdJiYxOTE9PVFbMl0mJihMPVBpKEwpKSxOTShMLFApfShyZSxRKX1yZXR1cm4gQjIudmVyc2lvbnMuaW5kZXhPZihwZVswXSk+LTEmJnBlWzJdPD0x'@;
put 'MiYmcGVbM108PTMxP0IyLnRvX3dvcmtib29rKHJlLFEpOnBfKHkscmUsUSxfZSl9ZnVuY3Rpb24gZ18oeSxQKXt2YXIgTD1QfHx7fTtyZXR1cm4gTC50eXBlPSJmaWxlIixfZih5LEwpfWZ1bmN0aW9uIG1fKHksUCl7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOmNhc2UiYmluYXJ5Ijpi'@;
put 'cmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6UC50eXBlPSIiO2JyZWFrO2Nhc2UiZmlsZSI6cmV0dXJuIFllKFAuZmlsZSxqZS53cml0ZSh5LHt0eXBlOmhlPyJidWZmZXIiOiIifSkpO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFs'@;
put 'aWQgZm9yICciK1AuYm9va1R5cGUrIicgZmlsZXMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfXJldHVybiBqZS53cml0ZSh5LFApfWZ1bmN0aW9uIGUxKHksUCxMKXtMfHwoTD0iIik7dmFyIFE9TCt5O3N3aXRjaChQLnR5cGUpe2Nhc2Ui'@;
put 'YmFzZTY0IjpyZXR1cm4gc2UuZW5jb2RlKExvKFEpKTtjYXNlImJpbmFyeSI6cmV0dXJuIExvKFEpO2Nhc2Uic3RyaW5nIjpyZXR1cm4geTtjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUsUSwidXRmOCIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaGU/dWUoUSwidXRmOCIpOmUxKFEse3R5cGU6'@;
put 'ImJpbmFyeSJ9KS5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfWZ1bmN0aW9uIHZfKHksUCl7c3dpdGNoKFAudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0'@;
put 'IjpjYXNlImJpbmFyeSI6Zm9yKHZhciBMPSIiLFE9MDtRPHkubGVuZ3RoOysrUSlMKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHlbUV0pO3JldHVybiJiYXNlNjQiPT1QLnR5cGU/c2UuZW5jb2RlKEwpOiJzdHJpbmciPT1QLnR5cGU/UGkoTCk6TDtjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUs'@;
put 'eSk7Y2FzZSJidWZmZXIiOnJldHVybiB5O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9fWZ1bmN0aW9uIEM1KHksUCl7VigpLGZ1bmN0aW9uIERMKHkpe2lmKCF5fHwheS5TaGVldE5hbWVzfHwheS5TaGVldHMpdGhyb3cgbmV3IEVycm9yKCJJ'@;
put 'bnZhbGlkIFdvcmtib29rIik7aWYoIXkuU2hlZXROYW1lcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJXb3JrYm9vayBpcyBlbXB0eSIpOyFmdW5jdGlvbiBZdih5LFAsTCl7eS5mb3JFYWNoKGZ1bmN0aW9uKFEscmUpe1p2KFEpO2Zvcih2YXIgcGU9MDtwZTxyZTsrK3BlKWlmKFE9PXlbcGVd'@;
put 'KXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIFNoZWV0IE5hbWU6ICIrUSk7aWYoTCl7dmFyIF9lPVAmJlBbcmVdJiZQW3JlXS5Db2RlTmFtZXx8UTtpZig5NT09X2UuY2hhckNvZGVBdCgwKSYmX2UubGVuZ3RoPjIyKXRocm93IG5ldyBFcnJvcigiQmFkIENvZGUgTmFtZTogV29ya3NoZWV0'@;
put 'IitfZSl9fSl9KHkuU2hlZXROYW1lcyx5Lldvcmtib29rJiZ5Lldvcmtib29rLlNoZWV0c3x8W10sISF5LnZiYXJhdyk7Zm9yKHZhciBMPTA7TDx5LlNoZWV0TmFtZXMubGVuZ3RoOysrTClzNSh5LlNoZWV0c1t5LlNoZWV0TmFtZXNbTF1dLDAsTCl9KHkpO3ZhciBMPVB8fHt9O2lmKEwuY2Vs'@;
put 'bFN0eWxlcyYmKEwuY2VsbE5GPSEwLEwuc2hlZXRTdHVicz0hMCksImFycmF5Ij09TC50eXBlKXtMLnR5cGU9ImJpbmFyeSI7dmFyIFE9QzUoeSxMKTtyZXR1cm4gTC50eXBlPSJhcnJheSIsSChRKX1zd2l0Y2goTC5ib29rVHlwZXx8Inhsc2IiKXtjYXNlInhtbCI6Y2FzZSJ4bG1sIjpyZXR1'@;
put 'cm4gZTEoSkwoeSxMKSxMKTtjYXNlInNsayI6Y2FzZSJzeWxrIjpyZXR1cm4gZTEodVIoeSxMKSxMKTtjYXNlImh0bSI6Y2FzZSJodG1sIjpyZXR1cm4gZTEobFIoeSxMKSxMKTtjYXNlInR4dCI6cmV0dXJuIGZ1bmN0aW9uIGpNKHksUCl7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOnJl'@;
put 'dHVybiBzZS5lbmNvZGUoeSk7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpyZXR1cm4geTtjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUseSwiYmluYXJ5Iik7Y2FzZSJidWZmZXIiOnJldHVybiBoZT91ZSh5LCJiaW5hcnkiKTp5LnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oTCl7cmV0dXJu'@;
put 'IEwuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfShoUih5LEwpLEwpO2Nhc2UiY3N2IjpyZXR1cm4gZTEoY1IoeSxMKSxMLCJcdWZlZmYiKTtjYXNlImRpZiI6cmV0dXJuIGUxKGRSKHksTCksTCk7Y2FzZSJkYmYiOnJldHVybiB2'@;
put 'XyhJTSh5LEwpLEwpO2Nhc2UicHJuIjpyZXR1cm4gZTEobF8oeSxMKSxMKTtjYXNlInJ0ZiI6cmV0dXJuIGUxKHk1KHksTCksTCk7Y2FzZSJldGgiOnJldHVybiBlMShmUih5LEwpLEwpO2Nhc2UiZm9kcyI6cmV0dXJuIGUxKF8wKHksTCksTCk7Y2FzZSJiaWZmMiI6TC5iaWZmfHwoTC5iaWZm'@;
put 'PTIpO2Nhc2UiYmlmZjMiOkwuYmlmZnx8KEwuYmlmZj0zKTtjYXNlImJpZmY0IjpyZXR1cm4gTC5iaWZmfHwoTC5iaWZmPTQpLHZfKGlfKHksTCksTCk7Y2FzZSJiaWZmNSI6TC5iaWZmfHwoTC5iaWZmPTUpO2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpjYXNlInhscyI6cmV0dXJuIEwuYmlmZnx8'@;
put 'KEwuYmlmZj04KSxmdW5jdGlvbiBCTSh5LFApe3ZhciBMPVB8fHt9O3JldHVybiBtXyhmdW5jdGlvbiBDTSh5LFApe3ZhciBMPVB8fHt9LFE9amUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KSxyZT0iL1dvcmtib29rIjtzd2l0Y2goTC5ib29rVHlwZXx8InhscyIpe2Nhc2UieGxzIjpMLmJv'@;
put 'b2tUeXBlPSJiaWZmOCI7Y2FzZSJ4bGEiOkwuYm9va1R5cGV8fChMLmJvb2tUeXBlPSJ4bGEiKTtjYXNlImJpZmY4IjpyZT0iL1dvcmtib29rIixMLmJpZmY9ODticmVhaztjYXNlImJpZmY1IjpyZT0iL0Jvb2siLEwuYmlmZj01O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZh'@;
put 'bGlkIHR5cGUgIitMLmJvb2tUeXBlKyIgZm9yIFhMUyBDRkIiKX1yZXR1cm4gamUudXRpbHMuY2ZiX2FkZChRLHJlLGlfKHksTCkpLDg9PUwuYmlmZiYmKHkuUHJvcHN8fHkuQ3VzdHByb3BzKSYmZnVuY3Rpb24gd00oeSxQKXt2YXIgX2UsTD1bXSxRPVtdLHJlPVtdLHBlPTA7aWYoeS5Qcm9w'@;
put 'cylmb3IoX2U9bHQoeS5Qcm9wcykscGU9MDtwZTxfZS5sZW5ndGg7KytwZSkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGI0LF9lW3BlXSk/TDpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeTQsX2VbcGVdKT9ROnJlKS5wdXNoKFtfZVtwZV0seS5Q'@;
put 'cm9wc1tfZVtwZV1dXSk7aWYoeS5DdXN0cHJvcHMpZm9yKF9lPWx0KHkuQ3VzdHByb3BzKSxwZT0wO3BlPF9lLmxlbmd0aDsrK3BlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LlByb3BzfHx7fSxfZVtwZV0pfHwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0'@;
put 'eS5jYWxsKGI0LF9lW3BlXSk/TDpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeTQsX2VbcGVdKT9ROnJlKS5wdXNoKFtfZVtwZV0seS5DdXN0cHJvcHNbX2VbcGVdXV0pO3ZhciB2ZT1bXTtmb3IocGU9MDtwZTxyZS5sZW5ndGg7KytwZSlmbS5pbmRleE9mKHJlW3BlXVsw'@;
put 'XSk+LTF8fG51bGwhPXJlW3BlXVsxXSYmdmUucHVzaChyZVtwZV0pO1EubGVuZ3RoJiZqZS51dGlscy5jZmJfYWRkKFAsIi9ceDA1U3VtbWFyeUluZm9ybWF0aW9uIix3aShRLHJwLlNJLHk0LHdyKSksKEwubGVuZ3RofHx2ZS5sZW5ndGgpJiZqZS51dGlscy5jZmJfYWRkKFAsIi9ceDA1RG9j'@;
put 'dW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iLHdpKEwscnAuRFNJLGI0LF80LHZlLmxlbmd0aD92ZTpudWxsLHJwLlVESSkpfSh5LFEpLDg9PUwuYmlmZiYmeS52YmFyYXcmJmZ1bmN0aW9uIHRJKHksUCl7UC5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihMLFEpe2lmKDAhPVEpe3ZhciByZT1M'@;
put 'LnJlcGxhY2UoL1teXC9dKltcL10vLCIvX1ZCQV9QUk9KRUNUX0NVUi8iKTsiLyIhPT1yZS5zbGljZSgtMSkmJmplLnV0aWxzLmNmYl9hZGQoeSxyZSxQLkZpbGVJbmRleFtRXS5jb250ZW50KX19KX0oUSxqZS5yZWFkKHkudmJhcmF3LHt0eXBlOiJzdHJpbmciPT10eXBlb2YgeS52YmFyYXc/'@;
put 'ImJpbmFyeSI6ImJ1ZmZlciJ9KSksUX0oeSxMKSxMKX0oeSxMKTtjYXNlInhsc3giOmNhc2UieGxzbSI6Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpyZXR1cm4gZnVuY3Rpb24gVk0oeSxQKXt2YXIgTD1QfHx7fSxRPWJSKHksTCkscmU9e307aWYoTC5jb21wcmVzc2lvbiYmKHJl'@;
put 'LmNvbXByZXNzaW9uPSJERUZMQVRFIiksTC5wYXNzd29yZClyZS50eXBlPWhlPyJub2RlYnVmZmVyIjoic3RyaW5nIjtlbHNlIHN3aXRjaChMLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZS50eXBlPSJiYXNlNjQiO2JyZWFrO2Nhc2UiYmluYXJ5IjpyZS50eXBlPSJzdHJpbmciO2JyZWFrO2Nhc2Ui'@;
put 'c3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICciK0wuYm9va1R5cGUrIicgZmlsZXMiKTtjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpyZS50eXBlPWhlPyJub2RlYnVmZmVyIjoic3RyaW5nIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBF'@;
put 'cnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitMLnR5cGUpfXZhciBwZT1RLkZ1bGxQYXRocz9qZS53cml0ZShRLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJidWZmZXIiLHN0cmluZzoiYmluYXJ5In1bcmUudHlwZV18fHJlLnR5cGV9KTpRLmdlbmVyYXRlKHJlKTtyZXR1cm4g'@;
put 'TC5wYXNzd29yZCYmdHlwZW9mIGIwPCJ1Ij9tXyhiMChwZSxMLnBhc3N3b3JkKSxMKToiZmlsZSI9PT1MLnR5cGU/WWUoTC5maWxlLHBlKToic3RyaW5nIj09TC50eXBlP1BpKHBlKTpwZX0oeSxMKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGJvb2tUeXBlIHwiK0wu'@;
put 'Ym9va1R5cGUrInwiKX19ZnVuY3Rpb24gdDEoeSl7aWYoIXkuYm9va1R5cGUpe3ZhciBMPXkuZmlsZS5zbGljZSh5LmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2UoKTtMLm1hdGNoKC9eXC5bYS16XSskLykmJih5LmJvb2tUeXBlPUwuc2xpY2UoMSkpLHkuYm9va1R5cGU9e3hs'@;
put 'czoiYmlmZjgiLGh0bToiaHRtbCIsc2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgiLFNoMzN0SlM6IldURiJ9W3kuYm9va1R5cGVdfHx5LmJvb2tUeXBlfX1mdW5jdGlvbiBTNSh5LFAsTCl7dmFyIFE9THx8e307cmV0dXJuIFEudHlwZT0iZmlsZSIsUS5maWxlPVAsdDEoUSksQzUoeSxRKX1m'@;
put 'dW5jdGlvbiB6TSh5LFAsTCxRLHJlLHBlLF9lLHZlKXt2YXIgU2U9SHMoTCksSGU9dmUuZGVmdmFsLEJlPXZlLnJhdyxHZT0hMCxudD0xPT09cmU/W106e307aWYoMSE9PXJlKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG50LCJfX3Jvd051bV9f'@;
put 'Iix7dmFsdWU6TCxlbnVtZXJhYmxlOiExfSl9Y2F0Y2h7bnQuX19yb3dOdW1fXz1MfWVsc2UgbnQuX19yb3dOdW1fXz1MO2lmKCFfZXx8eVtMXSlmb3IodmFyIGR0PVAucy5jO2R0PD1QLmUuYzsrK2R0KXt2YXIgQ3Q9X2U/eVtMXVtkdF06eVtRW2R0XStTZV07aWYodm9pZCAwIT09Q3QmJnZv'@;
put 'aWQgMCE9PUN0LnQpe3ZhciBjdD1DdC52O3N3aXRjaChDdC50KXtjYXNlInoiOmlmKG51bGw9PWN0KWJyZWFrO2NvbnRpbnVlO2Nhc2UiZSI6Y3Q9MD09Y3Q/bnVsbDp2b2lkIDA7YnJlYWs7Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBF'@;
put 'cnJvcigidW5yZWNvZ25pemVkIHR5cGUgIitDdC50KX1pZihudWxsIT1wZVtkdF0pe2lmKG51bGw9PWN0KWlmKCJlIj09Q3QudCYmbnVsbD09PWN0KW50W3BlW2R0XV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9PUhlKW50W3BlW2R0XV09SGU7ZWxzZXtpZighQmV8fG51bGwhPT1jdCljb250aW51'@;
put 'ZTtudFtwZVtkdF1dPW51bGx9ZWxzZSBudFtwZVtkdF1dPUJlP2N0OmN1KEN0LGN0LHZlKTtudWxsIT1jdCYmKEdlPSExKX19ZWxzZXtpZih2b2lkIDA9PT1IZSljb250aW51ZTtudWxsIT1wZVtkdF0mJihudFtwZVtkdF1dPUhlKX19cmV0dXJue3JvdzpudCxpc2VtcHR5OkdlfX1mdW5jdGlv'@;
put 'biBINih5LFApe2lmKG51bGw9PXl8fG51bGw9PXlbIiFyZWYiXSlyZXR1cm5bXTt2YXIgTD17dDoibiIsdjowfSxRPTAscmU9MSxwZT1bXSxfZT0wLHZlPSIiLFNlPUpTT04ucGFyc2UoJ3sicyI6eyJyIjowLCJjIjowfSwiZSI6eyJyIjowLCJjIjowfX0nKSxIZT1QfHx7fSxCZT1udWxsIT1I'@;
put 'ZS5yYW5nZT9IZS5yYW5nZTp5WyIhcmVmIl07c3dpdGNoKDE9PT1IZS5oZWFkZXI/UT0xOiJBIj09PUhlLmhlYWRlcj9RPTI6QXJyYXkuaXNBcnJheShIZS5oZWFkZXIpP1E9MzpudWxsPT1IZS5oZWFkZXImJihRPTApLHR5cGVvZiBCZSl7Y2FzZSJzdHJpbmciOlNlPU9pKEJlKTticmVhaztj'@;
put 'YXNlIm51bWJlciI6KFNlPU9pKHlbIiFyZWYiXSkpLnMucj1CZTticmVhaztkZWZhdWx0OlNlPUJlfVE+MCYmKHJlPTApO3ZhciBHZT1IcyhTZS5zLnIpLG50PVtdLGR0PVtdLEN0PTAsY3Q9MCxidD1BcnJheS5pc0FycmF5KHkpLEZ0PVNlLnMucixFdD0wLFR0PTA7Zm9yKGJ0JiYheVtGdF0m'@;
put 'Jih5W0Z0XT1bXSksRXQ9U2Uucy5jO0V0PD1TZS5lLmM7KytFdClzd2l0Y2gobnRbRXRdPU5zKEV0KSxMPWJ0P3lbRnRdW0V0XTp5W250W0V0XStHZV0sUSl7Y2FzZSAxOnBlW0V0XT1FdC1TZS5zLmM7YnJlYWs7Y2FzZSAyOnBlW0V0XT1udFtFdF07YnJlYWs7Y2FzZSAzOnBlW0V0XT1IZS5o'@;
put 'ZWFkZXJbRXQtU2Uucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT1MJiYoTD1KU09OLnBhcnNlKCd7InciOiAiX19FTVBUWSIsICJ0IjogInMifScpKSx2ZT1fZT1jdShMLG51bGwsSGUpLGN0PTAsVHQ9MDtUdDxwZS5sZW5ndGg7KytUdClwZVtUdF09PXZlJiYodmU9X2UrIl8iKyArK2N0'@;
put 'KTtwZVtFdF09dmV9Zm9yKEZ0PVNlLnMucityZTtGdDw9U2UuZS5yOysrRnQpe3ZhciBadD16TSh5LFNlLEZ0LG50LFEscGUsYnQsSGUpOyghMT09PVp0LmlzZW1wdHl8fCgxPT09UT8hMSE9PUhlLmJsYW5rcm93czpIZS5ibGFua3Jvd3MpKSYmKGR0W0N0KytdPVp0LnJvdyl9cmV0dXJuIGR0'@;
put 'Lmxlbmd0aD1DdCxkdH12YXIgJGQ9LyIvZztmdW5jdGlvbiBVTSh5LFAsTCxRLHJlLHBlLF9lLHZlKXtmb3IodmFyIFNlPSEwLEhlPVtdLEJlPSIiLEdlPUhzKEwpLG50PVAucy5jO250PD1QLmUuYzsrK250KWlmKFFbbnRdKXt2YXIgZHQ9dmUuZGVuc2U/KHlbTF18fFtdKVtudF06eVtRW250'@;
put 'XStHZV07aWYobnVsbD09ZHQpQmU9IiI7ZWxzZSBpZihudWxsIT1kdC52KXtTZT0hMSxCZT0iIitjdShkdCxudWxsLHZlKTtmb3IodmFyIEN0PTAsY3Q9MDtDdCE9PUJlLmxlbmd0aDsrK0N0KWlmKChjdD1CZS5jaGFyQ29kZUF0KEN0KSk9PT1yZXx8Y3Q9PT1wZXx8MzQ9PT1jdCl7QmU9JyIn'@;
put 'K0JlLnJlcGxhY2UoJGQsJyIiJykrJyInO2JyZWFrfSJJRCI9PUJlJiYoQmU9JyJJRCInKX1lbHNlIG51bGw9PWR0LmZ8fGR0LkY/QmU9IiI6KFNlPSExLChCZT0iPSIrZHQuZikuaW5kZXhPZigiLCIpPj0wJiYoQmU9JyInK0JlLnJlcGxhY2UoJGQsJyIiJykrJyInKSk7SGUucHVzaChCZSl9'@;
put 'cmV0dXJuITE9PT12ZS5ibGFua3Jvd3MmJlNlP251bGw6SGUuam9pbihfZSl9ZnVuY3Rpb24gQmwoeSxQKXt2YXIgTD1bXSxRPVA/P3t9O2lmKG51bGw9PXl8fG51bGw9PXlbIiFyZWYiXSlyZXR1cm4iIjt2YXIgcmU9T2koeVsiIXJlZiJdKSxwZT12b2lkIDAhPT1RLkZTP1EuRlM6IiwiLF9l'@;
put 'PXBlLmNoYXJDb2RlQXQoMCksdmU9dm9pZCAwIT09US5SUz9RLlJTOiJcbiIsU2U9dmUuY2hhckNvZGVBdCgwKSxIZT1uZXcgUmVnRXhwKCgifCI9PXBlPyJcXHwiOnBlKSsiKyQiKSxCZT0iIixHZT1bXTtRLmRlbnNlPUFycmF5LmlzQXJyYXkoeSk7Zm9yKHZhciBudD1RLnNraXBIaWRkZW4m'@;
put 'JnlbIiFjb2xzIl18fFtdLGR0PVEuc2tpcEhpZGRlbiYmeVsiIXJvd3MiXXx8W10sQ3Q9cmUucy5jO0N0PD1yZS5lLmM7KytDdCkobnRbQ3RdfHx7fSkuaGlkZGVufHwoR2VbQ3RdPU5zKEN0KSk7Zm9yKHZhciBjdD1yZS5zLnI7Y3Q8PXJlLmUucjsrK2N0KShkdFtjdF18fHt9KS5oaWRkZW58'@;
put 'fG51bGwhPShCZT1VTSh5LHJlLGN0LEdlLF9lLFNlLHBlLFEpKSYmKFEuc3RyaXAmJihCZT1CZS5yZXBsYWNlKEhlLCIiKSksTC5wdXNoKEJlK3ZlKSk7cmV0dXJuIGRlbGV0ZSBRLmRlbnNlLEwuam9pbigiIil9ZnVuY3Rpb24geFIoeSxQKXtQfHwoUD17fSksUC5GUz0iXHQiLFAuUlM9Ilxu'@;
put 'Ijt2YXIgTD1CbCh5LFApO2lmKHR5cGVvZiBjcHRhYmxlPiJ1Inx8InN0cmluZyI9PVAudHlwZSlyZXR1cm4gTDt2YXIgUT1jcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEwsInN0ciIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZSgyNTQpK1F9'@;
put 'ZnVuY3Rpb24gTjYoeSl7dmFyIEwsUD0iIixRPSIiO2lmKG51bGw9PXl8fG51bGw9PXlbIiFyZWYiXSlyZXR1cm5bXTt2YXIgdmUscmU9T2koeVsiIXJlZiJdKSxwZT0iIixfZT1bXSxTZT1bXSxIZT1BcnJheS5pc0FycmF5KHkpO2Zvcih2ZT1yZS5zLmM7dmU8PXJlLmUuYzsrK3ZlKV9lW3Zl'@;
put 'XT1Ocyh2ZSk7Zm9yKHZhciBCZT1yZS5zLnI7QmU8PXJlLmUucjsrK0JlKWZvcihwZT1IcyhCZSksdmU9cmUucy5jO3ZlPD1yZS5lLmM7Kyt2ZSlpZihQPV9lW3ZlXStwZSxRPSIiLHZvaWQgMCE9PShMPUhlPyh5W0JlXXx8W10pW3ZlXTp5W1BdKSl7aWYobnVsbCE9TC5GKXtpZihQPUwuRiwh'@;
put 'TC5mKWNvbnRpbnVlO1E9TC5mLC0xPT1QLmluZGV4T2YoIjoiKSYmKFA9UCsiOiIrUCl9aWYobnVsbCE9TC5mKVE9TC5mO2Vsc2V7aWYoInoiPT1MLnQpY29udGludWU7aWYoIm4iPT1MLnQmJm51bGwhPUwudilRPSIiK0wudjtlbHNlIGlmKCJiIj09TC50KVE9TC52PyJUUlVFIjoiRkFMU0Ui'@;
put 'O2Vsc2UgaWYodm9pZCAwIT09TC53KVE9IiciK0wudztlbHNle2lmKHZvaWQgMD09PUwudiljb250aW51ZTtRPSJzIj09TC50PyInIitMLnY6IiIrTC52fX1TZVtTZS5sZW5ndGhdPVArIj0iK1F9cmV0dXJuIFNlfWZ1bmN0aW9uIF9fKHksUCxMKXt2YXIgUT1MfHx7fSxyZT0rIVEuc2tpcEhl'@;
put 'YWRlcixwZT15fHx7fSxfZT0wLHZlPTA7aWYocGUmJm51bGwhPVEub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgUS5vcmlnaW4pX2U9US5vcmlnaW47ZWxzZXt2YXIgU2U9InN0cmluZyI9PXR5cGVvZiBRLm9yaWdpbj9zcyhRLm9yaWdpbik6US5vcmlnaW47X2U9U2Uucix2ZT1TZS5jfXZh'@;
put 'ciBIZSxCZT1KU09OLnBhcnNlKCd7InMiOiB7ImMiOjAsICJyIjowfSwgImUiOiB7ImMiOjAsICJyIjowfX0nKTtpZihCZS5lLmM9dmUsQmUuZS5yPV9lK1AubGVuZ3RoLTErcmUscGVbIiFyZWYiXSl7dmFyIEdlPU9pKHBlWyIhcmVmIl0pO0JlLmUuYz1NYXRoLm1heChCZS5lLmMsR2UuZS5j'@;
put 'KSxCZS5lLnI9TWF0aC5tYXgoQmUuZS5yLEdlLmUuciksLTE9PV9lJiYoQmUuZS5yPShfZT1HZS5lLnIrMSkrUC5sZW5ndGgtMStyZSl9ZWxzZS0xPT1fZSYmKF9lPTAsQmUuZS5yPVAubGVuZ3RoLTErcmUpO3ZhciBudD1RLmhlYWRlcnx8W10sZHQ9MDtQLmZvckVhY2goZnVuY3Rpb24oY3Qs'@;
put 'YnQpe2x0KGN0KS5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXstMT09KGR0PW50LmluZGV4T2YoRnQpKSYmKG50W2R0PW50Lmxlbmd0aF09RnQpO3ZhciBFdD1jdFtGdF0sVHQ9InoiLFp0PSIiLHBuPWRpKHtjOnZlK2R0LHI6X2UrYnQrcmV9KTtpZihIZT1xby5zaGVldF9nZXRfY2VsbChwZSxwbiks'@;
put 'IUV0fHwib2JqZWN0IiE9dHlwZW9mIEV0fHxFdCBpbnN0YW5jZW9mIERhdGUpe2lmKCJudW1iZXIiPT10eXBlb2YgRXQ/VHQ9Im4iOiJib29sZWFuIj09dHlwZW9mIEV0P1R0PSJiIjoic3RyaW5nIj09dHlwZW9mIEV0P1R0PSJzIjpFdCBpbnN0YW5jZW9mIERhdGU/KFR0PSJkIixRLmNlbGxE'@;
put 'YXRlc3x8KFR0PSJuIixFdD1VZShFdCkpLFp0PUhlLnomJncuaXNfZGF0ZShIZS56KT9IZS56OlEuZGF0ZU5GfHx3Ll90YWJsZVsxNF0pOm51bGw9PT1FdCYmUS5udWxsRXJyb3ImJihUdD0iZSIsRXQ9MCksSGU/KEhlLnQ9VHQsSGUudj1FdCxkZWxldGUgSGUudyxkZWxldGUgSGUuUixadCYm'@;
put 'KEhlLno9WnQpKTpwZVtwbl09SGU9e3Q6VHQsdjpFdH0sWnQmJihIZS56PVp0KSxIZSYmSGUuaCl0cnl7aWYoSGUuUj1GdS5odG1sX3RvX3JzKEhlLmgpLCFIZS52KXtIZS52PSIiO2Zvcih2YXIgS249MDtLbjxIZS5SLmxlbmd0aDsrK0tuKUhlLnYrPUhlLlJbS25dLnZ8fCIifX1jYXRjaHt9'@;
put 'fWVsc2UgcGVbcG5dPUV0fSl9KSxCZS5lLmM9TWF0aC5tYXgoQmUuZS5jLHZlK250Lmxlbmd0aC0xKTt2YXIgQ3Q9SHMoX2UpO2lmKHJlKWZvcihkdD0wO2R0PG50Lmxlbmd0aDsrK2R0KXBlW05zKGR0K3ZlKStDdF09e3Q6InMiLHY6bnRbZHRdfTtyZXR1cm4gcGVbIiFyZWYiXT1PbyhCZSks'@;
put 'cGV9dmFyIHFvPXtlbmNvZGVfY29sOk5zLGVuY29kZV9yb3c6SHMsZW5jb2RlX2NlbGw6ZGksZW5jb2RlX3JhbmdlOk9vLGRlY29kZV9jb2w6amgsZGVjb2RlX3JvdzpCMCxzcGxpdF9jZWxsOmZ1bmN0aW9uIGg0KHkpe3JldHVybiB5LnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIk'@;
put 'MSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOnNzLGRlY29kZV9yYW5nZTpXcyxmb3JtYXRfY2VsbDpjdSxnZXRfZm9ybXVsYWU6TjYsbWFrZV9jc3Y6QmwsbWFrZV9qc29uOkg2LG1ha2VfZm9ybXVsYWU6TjYsaHRtbF90b19yczpGdS5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6czAs'@;
put 'c2hlZXRfYWRkX2pzb246X18sc2hlZXRfYWRkX2RvbTpBTSxhb2FfdG9fc2hlZXQ6azEsanNvbl90b19zaGVldDpmdW5jdGlvbiBmWSh5LFApe3JldHVybiBfXyhudWxsLHksUCl9LHRhYmxlX3RvX3NoZWV0Okh1LHRhYmxlX3RvX2Jvb2s6ZnVuY3Rpb24gZHIoeSxQKXtyZXR1cm4gRWQoSHUo'@;
put 'eSxQKSxQKX0sc2hlZXRfdG9fY3N2OkJsLHNoZWV0X3RvX3R4dDp4UixzaGVldF90b19qc29uOkg2LHNoZWV0X3RvX2h0bWw6RnUuZnJvbV9zaGVldCxzaGVldF90b19mb3JtdWxhZTpONixzaGVldF90b19yb3dfb2JqZWN0X2FycmF5Okg2fTtmdW5jdGlvbiBaTSh5LFAsTCxRLHJlKXt2YXIg'@;
put 'cGU7aWYoeS5zdHlsZSYmISh5Ll9yYW5nZSYmKHBlPSJzdHJpbmciPT10eXBlb2YgeS5fcmFuZ2U/TS51dGlscy5kZWNvZGVfcmFuZ2UoeS5fcmFuZ2UpOnkuX3JhbmdlLEwuYz5wZS5lLmN8fEwuYzxwZS5zLmN8fEwucj5wZS5lLnJ8fEwucjxwZS5zLnIpKSYmcGUpe3ZhciBfZT15LnN0eWxl'@;
put 'LnN0eWxlO2lmKF9lKXtfZS53aG9sZVRhYmxlJiZxby5hcHBseV9zdHlsZV9kZWx0YShRLF9lLndob2xlVGFibGUpO2U6aWYoX2UuaGVhZGVyUm93KWlmKHJlKXtpZihMLnIhPXBlLnMucilicmVhayBlO2huKHkuc3R5bGUuY29saGVhZCl8fHFvLmFwcGx5X3N0eWxlX2RlbHRhKFEsX2UuaGVh'@;
put 'ZGVyUm93KX1lbHNle2lmKEwuciE9cGUucy5yKWJyZWFrIGU7aG4oeS5oZWFkZXIpfHxxby5hcHBseV9zdHlsZV9kZWx0YShRLF9lLmhlYWRlclJvdyl9fX19cW8udGVzdF9wYXNzd29yZD1mdW5jdGlvbiBMTSh5LFApe3ZhciBMPUJ1ZmZlci5mcm9tKHkuc2FsdCwiYmFzZTY0IiksUT15LmFs'@;
put 'Z28scmU9ZWwoQnVmZmVyLmNvbmNhdChbTCxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFApKV0pLFEpLHBlPUJ1ZmZlci5hbGxvYyg0KTtvbChwZSwwKTtmb3IodmFyIF9lPTA7X2U8eS5zcGluOysrX2UpcGUubD0wLHBlLndyaXRlX3NoaWZ0KDQsX2UpLHJlPWVsKEJ1'@;
put 'ZmZlci5jb25jYXQoW3JlLHBlXSksUSk7dmFyIHZlPUJ1ZmZlci5mcm9tKHkuaGFzaCwiYmFzZTY0Iik7cmV0dXJuIDA9PXJlLmNvbXBhcmUodmUpfSxxby5oYXNoX3Bhc3N3b3JkPWZ1bmN0aW9uIHVfKHkpe3ZhciBQPXthbGdvOiJTSEEtNTEyIixzYWx0OiJVMmhsWlhSS1V5NWpiMjB2ZUd4'@;
put 'emVBPT0iLHNwaW46MWUzfSxMPUJ1ZmZlci5mcm9tKFAuc2FsdCwiYmFzZTY0IiksUT1QLmFsZ28scmU9ZWwoQnVmZmVyLmNvbmNhdChbTCxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLHkpKV0pLFEpLHBlPUJ1ZmZlci5hbGxvYyg0KTtvbChwZSwwKTtmb3IodmFyIF9l'@;
put 'PTA7X2U8UC5zcGluOysrX2UpcGUubD0wLHBlLndyaXRlX3NoaWZ0KDQsX2UpLHJlPWVsKEJ1ZmZlci5jb25jYXQoW3JlLHBlXSksUSk7cmV0dXJuIFAuaGFzaD1yZS50b1N0cmluZygiYmFzZTY0IiksUH0scW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxlPWZ1bmN0aW9uKHksUCxMKXtpZihMKXt2'@;
put 'YXIgUT0ic3RyaW5nIj09dHlwZW9mIFA/T2koUCk6UDtudWxsIT1RLnImJm51bGwhPVEuYyYmKFE9e3M6USxlOlF9KTt2YXIgdmUscmU9US5zLnIscGU9MCxfZT0iIixTZT1Xcyh5WyIhcmVmIl18fCJBMSIpO1NlLnMucj5RLnMuciYmKFNlLnMucj1RLnMuciksU2Uucy5jPlEucy5jJiYoU2Uu'@;
put 'cy5jPVEucy5jKSxTZS5lLnI8US5lLnImJihTZS5lLnI9US5lLnIpLFNlLmUuYzxRLmUuYyYmKFNlLmUuYz1RLmUuYykseVsiIXJlZiJdPU9vKFNlKTtmb3IodmFyIEJlPUFycmF5LmlzQXJyYXkoeSk7cmU8PVEuZS5yOysrcmUpZm9yKHBlPVEucy5jO3BlPD1RLmUuYzsrK3BlKUJlPyh5W3Jl'@;
put 'XXx8KHlbcmVdPVtdKSx5W3JlXVtwZV18fCh5W3JlXVtwZV09e3Q6InoifSksdmU9eVtyZV1bcGVdKTooeVtfZT1kaSh7cjpyZSxjOnBlfSldfHwoeVtfZV09e3Q6InoifSksdmU9eVtfZV0pLHZlLnN8fCh2ZS5zPXt9KSxPYmplY3Qua2V5cyhMKS5mb3JFYWNoKEhlKSx2ZS5zLnBhdHRlcm5U'@;
put 'eXBlJiYhdmUucy5mZ0NvbG9yJiYoZGVsZXRlIHZlLnMucGF0dGVyblR5cGUsZGVsZXRlIHZlLnMuYmdDb2xvciksKHZlLnMuZmdDb2xvcnx8dmUucy5iZ0NvbG9yKSYmIm5vbmUiPT0odmUucy5wYXR0ZXJuVHlwZXx8Im5vbmUiKSYmKHZlLnMucGF0dGVyblR5cGU9InNvbGlkIik7aWYocmU9'@;
put 'US5zLnIsTC50b3B8fG51bGw9PT1MLnRvcClmb3IocGU9US5zLmM7cGU8PVEuZS5jOysrcGUpe2lmKEJlKXtpZigheVtyZV0pY29udGludWU7dmU9eVtyZV1bcGVdfWVsc2UgX2U9ZGkoe3I6cmUsYzpwZX0pLHZlPXlbX2VdO3ZlJiYobnVsbD09PUwudG9wP2RlbGV0ZSB2ZS5zLnRvcDp2ZS5z'@;
put 'LnRvcD1vbihMLnRvcCkpfWlmKHJlPVEuZS5yLEwuYm90dG9tfHxudWxsPT09TC5ib3R0b20pZm9yKHBlPVEucy5jO3BlPD1RLmUuYzsrK3BlKXtpZihCZSl7aWYoIXlbcmVdKWNvbnRpbnVlO3ZlPXlbcmVdW3BlXX1lbHNlIF9lPWRpKHtyOnJlLGM6cGV9KSx2ZT15W19lXTt2ZSYmKG51bGw9'@;
put 'PT1MLmJvdHRvbT9kZWxldGUgdmUucy5ib3R0b206dmUucy5ib3R0b209b24oTC5ib3R0b20pKX1pZihwZT1RLnMuYyxMLmxlZnR8fG51bGw9PT1MLmxlZnQpZm9yKHJlPVEucy5yO3JlPD1RLmUucjsrK3JlKXtpZihCZSl7aWYoIXlbcmVdKWNvbnRpbnVlO3ZlPXlbcmVdW3BlXX1lbHNlIF9l'@;
put 'PWRpKHtyOnJlLGM6cGV9KSx2ZT15W19lXTt2ZSYmKG51bGw9PT1MLmxlZnQ/ZGVsZXRlIHZlLnMubGVmdDp2ZS5zLmxlZnQ9b24oTC5sZWZ0KSl9aWYocGU9US5lLmMsTC5yaWdodHx8bnVsbD09PUwucmlnaHQpZm9yKHJlPVEucy5yO3JlPD1RLmUucjsrK3JlKXtpZihCZSl7aWYoIXlbcmVd'@;
put 'KWNvbnRpbnVlO3ZlPXlbcmVdW3BlXX1lbHNlIF9lPWRpKHtyOnJlLGM6cGV9KSx2ZT15W19lXTt2ZSYmKG51bGw9PT1MLnJpZ2h0P2RlbGV0ZSB2ZS5zLnJpZ2h0OnZlLnMucmlnaHQ9b24oTC5yaWdodCkpfX1mdW5jdGlvbiBIZShHZSl7aWYoInRvcCIhPUdlJiYiYm90dG9tIiE9R2UmJiJs'@;
put 'ZWZ0IiE9R2UmJiJyaWdodCIhPUdlKXtpZigieiI9PUdlKXJldHVybiB2b2lkKHZlLno9TC56KTtpZigiYWxpZ25tZW50Ij09R2UpcmV0dXJuIHZvaWQodmUuc1tHZV0/T2JqZWN0LmtleXMoTFtHZV0pLmZvckVhY2goZnVuY3Rpb24obnQpe3ZlLnNbR2VdW250XT1MW0dlXVtudF19KTp2ZS5z'@;
put 'W0dlXT1vbihMW0dlXSkpO2lmKCJpbmNvbCI9PUdlKXJldHVybiBwZT5RLnMuYyYmKG51bGw9PT1MLmxlZnQ/ZGVsZXRlIHZlLnMubGVmdDp2ZS5zLmxlZnQ9Im9iamVjdCI9PXR5cGVvZiBMW0dlXT9vbihMW0dlXSk6TFtHZV0pLHZvaWQocGU8US5lLmMmJihudWxsPT09TC5yaWdodD9kZWxl'@;
put 'dGUgdmUucy5yaWdodDp2ZS5zLnJpZ2h0PSJvYmplY3QiPT10eXBlb2YgTFtHZV0/b24oTFtHZV0pOkxbR2VdKSk7aWYoImlucm93Ij09R2UpcmV0dXJuIHJlPlEucy5yJiYobnVsbD09PUwudG9wP2RlbGV0ZSB2ZS5zLnRvcDp2ZS5zLnRvcD0ib2JqZWN0Ij09dHlwZW9mIExbR2VdP29uKExb'@;
put 'R2VdKTpMW0dlXSksdm9pZChyZTxRLmUuciYmKG51bGw9PT1MLmJvdHRvbT9kZWxldGUgdmUucy5ib3R0b206dmUucy5ib3R0b209Im9iamVjdCI9PXR5cGVvZiBMW0dlXT9vbihMW0dlXSk6TFtHZV0pKTtudWxsPT09TFtHZV0/ZGVsZXRlIHZlLnNbR2VdOnZlLnNbR2VdPUxbR2VdJiZBcnJh'@;
put 'eS5pc0FycmF5KExbR2VdKT9MW0dlXS5zbGljZSgpLm1hcChmdW5jdGlvbihudCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBudD9vbihudCk6bnR9KToib2JqZWN0Ij09dHlwZW9mIExbR2VdP29uKExbR2VdKTpMW0dlXX19fSxxby5hcHBseV9zdHlsZV9kZWx0YT1mdW5jdGlvbih5LFApe1si'@;
put 'c3oiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtlIiwibmFtZSIsInZhbGlnbiJdLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9TDsiYmdDb2xvciI9PUw/UT0iZmdDb2xvciI6ImZnQ29sb3IiPT1MJiYoUT0iYmdDb2xvciIpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv'@;
put 'cGVydHkuY2FsbChQLEwpJiYobnVsbD09PVBbTF0/ZGVsZXRlIHlbUV06bnVsbCE9UFtMXSYmKHlbUV09UFtMXSkpfSksWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJhbGlnbm1lbnQiLCJwcm90ZWN0aW9uIiwiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmZvckVhY2goZnVu'@;
put 'Y3Rpb24oTCl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsTCkmJihudWxsPT09UFtMXT9kZWxldGUgeVtMXTpudWxsIT1QW0xdJiYoeVtMXT1vbihQW0xdKSkpfSl9LHFvLmdldF9jb21wdXRlZF9zdHlsZT1mdW5jdGlvbih5LFApeyJzdHJpbmciPT10eXBlb2YgUCYm'@;
put 'KFA9TS51dGlscy5kZWNvZGVfY2VsbChQKSk7dmFyIEw9QXJyYXkuaXNBcnJheSh5KT8oeVtQLnJdfHxbXSlbUC5jXTp5W00udXRpbHMuZW5jb2RlX2NlbGwoUCldLFE9b24oTCYmTC5zfHx7fSk7cmV0dXJuIHlbIiF0YWJsZXMiXSYmeVsiIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24ocmUp'@;
put 'e1pNKHJlLDAsUCxRKX0pLHlbIiFwaXZvdHMiXSYmeVsiIXBpdm90cyJdLmZvckVhY2goZnVuY3Rpb24ocmUpe1pNKHJlLDAsUCxRLCEwKX0pLFF9O3ZhciBZTT17fTtxby5jZWxsX2FycmF5X3RvX2Nzdl9yb3c9ZnVuY3Rpb24oeSxQKXt2YXIgTD1QPz97fSxRPXZvaWQgMCE9PUwuRlM/TC5G'@;
put 'UzoiLCIscmU9US5jaGFyQ29kZUF0KDApLHBlPXZvaWQgMCE9PUwuUlM/TC5SUzoiXG4iLF9lPXBlLmNoYXJDb2RlQXQoMCksdmU9WU1bUV18fChZTVtRXT1uZXcgUmVnRXhwKCgifCI9PVE/IlxcfCI6USkrIiskIikpLFNlPWZ1bmN0aW9uIGlwKHksUCxMLFEscmUpe2Zvcih2YXIgcGU9ITAs'@;
put 'X2U9W10sdmU9IiIsU2U9MDtTZTw9eS5sZW5ndGgtMTsrK1NlKXt2YXIgSGU9eVtTZV07aWYobnVsbD09SGUpdmU9IiI7ZWxzZSBpZihudWxsIT1IZS52KXtwZT0hMSx2ZT0iIitjdShIZSxudWxsLHJlKTtmb3IodmFyIEJlPTAsR2U9MDtCZSE9PXZlLmxlbmd0aDsrK0JlKWlmKChHZT12ZS5j'@;
put 'aGFyQ29kZUF0KEJlKSk9PT1QfHxHZT09PUx8fDM0PT09R2Upe3ZlPSciJyt2ZS5yZXBsYWNlKCRkLCciIicpKyciJzticmVha30iSUQiPT12ZSYmKHZlPSciSUQiJyl9ZWxzZSBudWxsPT1IZS5mfHxIZS5GP3ZlPSIiOihwZT0hMSwodmU9Ij0iK0hlLmYpLmluZGV4T2YoIiwiKT49MCYmKHZl'@;
put 'PSciJyt2ZS5yZXBsYWNlKCRkLCciIicpKyciJykpO19lLnB1c2godmUpfXJldHVybiExPT09cmUuYmxhbmtyb3dzJiZwZT9udWxsOl9lLmpvaW4oUSl9KHkscmUsX2UsUSxMKTtyZXR1cm4gTC5zdHJpcCYmKFNlPVNlLnJlcGxhY2UodmUsIiIpKSxTZStwZX0sZnVuY3Rpb24oeSl7ZnVuY3Rp'@;
put 'b24gTChwZSxfZSx2ZSl7cmV0dXJuIG51bGwhPXBlW19lXT9wZVtfZV06cGVbX2VdPXZlfWZ1bmN0aW9uIFEocGUsX2UsdmUpe2lmKCJzdHJpbmciPT10eXBlb2YgX2Upe2lmKEFycmF5LmlzQXJyYXkocGUpKXt2YXIgU2U9c3MoX2UpO3JldHVybiBwZVtTZS5yXXx8KHBlW1NlLnJdPVtdKSxw'@;
put 'ZVtTZS5yXVtTZS5jXXx8KHBlW1NlLnJdW1NlLmNdPXt0OiJ6In0pfXJldHVybiBwZVtfZV18fChwZVtfZV09e3Q6InoifSl9cmV0dXJuIFEocGUsZGkoIm51bWJlciIhPXR5cGVvZiBfZT9fZTp7cjpfZSxjOnZlfHwwfSkpfXkuY29uc3RzPXkuY29uc3RzfHx7fSx5LnNoZWV0X2dldF9jZWxs'@;
put 'PVEseS5ib29rX25ldz1mdW5jdGlvbigpe3JldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHkuYm9va19hcHBlbmRfc2hlZXQ9ZnVuY3Rpb24ocGUsX2UsdmUpe2lmKCF2ZSlmb3IodmFyIFNlPTE7U2U8PTY1NTM1JiYtMSE9cGUuU2hlZXROYW1lcy5pbmRleE9mKHZlPSJTaGVldCIr'@;
put 'U2UpOysrU2UpO2lmKFp2KHZlKSxwZS5TaGVldE5hbWVzLmluZGV4T2YodmUpPj0wKXRocm93IG5ldyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8Iit2ZSsifCBhbHJlYWR5IGV4aXN0cyEiKTtwZS5TaGVldE5hbWVzLnB1c2godmUpLHBlLlNoZWV0c1t2ZV09X2V9LHkuYm9va19zZXRf'@;
put 'c2hlZXRfdmlzaWJpbGl0eT1mdW5jdGlvbihwZSxfZSx2ZSl7TChwZSwiV29ya2Jvb2siLHt9KSxMKHBlLldvcmtib29rLCJTaGVldHMiLFtdKTt2YXIgU2U9ZnVuY3Rpb24gcmUocGUsX2Upe2lmKCJudW1iZXIiPT10eXBlb2YgX2Upe2lmKF9lPj0wJiZwZS5TaGVldE5hbWVzLmxlbmd0aD5f'@;
put 'ZSlyZXR1cm4gX2U7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIrX2UpfWlmKCJzdHJpbmciPT10eXBlb2YgX2Upe3ZhciB2ZT1wZS5TaGVldE5hbWVzLmluZGV4T2YoX2UpO2lmKHZlPi0xKXJldHVybiB2ZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0'@;
put 'IG5hbWUgfCIrX2UrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IHwiK19lKyJ8Iil9KHBlLF9lKTtzd2l0Y2goTChwZS5Xb3JrYm9vay5TaGVldHMsU2Use30pLHZlKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFk'@;
put 'IHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3ZlKX1wZS5Xb3JrYm9vay5TaGVldHNbU2VdLkhpZGRlbj12ZX0sZnVuY3Rpb24gUChwZSl7cGUuZm9yRWFjaChmdW5jdGlvbihfZSl7eS5jb25zdHNbX2VbMF1dPV9lWzFdfSl9KFtbIlNIRUVUX1ZJU0lCTEUiLDBdLFsiU0hFRVRfSElEREVO'@;
put 'IiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLHkuY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdD1mdW5jdGlvbihwZSxfZSl7cmV0dXJuIHBlLno9X2UscGV9LHkuY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0aW9uKHBlLF9lLHZlKXtyZXR1cm4gX2U/KHBlLmw9e1RhcmdldDpfZX0sdmUmJihw'@;
put 'ZS5sLlRvb2x0aXA9dmUpLHBlLnN8fChwZS5zPXt9KSxwZS5zLmNvbG9yPXt0aGVtZToxMH0pOihkZWxldGUgcGUubCxwZS5zJiZwZS5zLmNvbG9yJiYxMD09cGUucy5jb2xvci50aGVtZSYmZGVsZXRlIHBlLnMuY29sb3IpLHBlfSx5LmNlbGxfc2V0X2ludGVybmFsX2xpbms9ZnVuY3Rpb24o'@;
put 'cGUsX2UsdmUpe3JldHVybiB5LmNlbGxfc2V0X2h5cGVybGluayhwZSwiIyIrX2UsdmUpfSx5LmNlbGxfYWRkX2NvbW1lbnQ9ZnVuY3Rpb24ocGUsX2UsdmUpe3BlLmN8fChwZS5jPVtdKSxwZS5jLnB1c2goe3Q6X2UsYTp2ZXx8IlNoZWV0SlMifSl9LHkuc2hlZXRfc2V0X2FycmF5X2Zvcm11'@;
put 'bGE9ZnVuY3Rpb24ocGUsX2UsdmUpe2Zvcih2YXIgU2U9InN0cmluZyIhPXR5cGVvZiBfZT9fZTpPaShfZSksSGU9InN0cmluZyI9PXR5cGVvZiBfZT9fZTpPbyhfZSksQmU9U2Uucy5yO0JlPD1TZS5lLnI7KytCZSlmb3IodmFyIEdlPVNlLnMuYztHZTw9U2UuZS5jOysrR2Upe3ZhciBudD1R'@;
put 'KHBlLEJlLEdlKTtudC50PSJuIixudC5GPUhlLGRlbGV0ZSBudC52LEJlPT1TZS5zLnImJkdlPT1TZS5zLmMmJihudC5mPXZlKX1yZXR1cm4gcGV9fShxbyksaGUmJmZ1bmN0aW9uKCl7dmFyIHk9Rig1MTc5MykuUmVhZGFibGU7TS5zdHJlYW09e3RvX2pzb246ZnVuY3Rpb24ocmUscGUpe3Zh'@;
put 'ciBfZT15KHtvYmplY3RNb2RlOiEwfSk7aWYobnVsbD09cmV8fG51bGw9PXJlWyIhcmVmIl0pcmV0dXJuIF9lLnB1c2gobnVsbCksX2U7dmFyIHZlPXt0OiJuIix2OjB9LFNlPTAsSGU9MSxCZT1bXSxHZT0wLG50PSIiLGR0PXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sQ3Q9cGV8fHt9LGN0'@;
put 'PW51bGwhPUN0LnJhbmdlP0N0LnJhbmdlOnJlWyIhcmVmIl07c3dpdGNoKDE9PT1DdC5oZWFkZXI/U2U9MToiQSI9PT1DdC5oZWFkZXI/U2U9MjpBcnJheS5pc0FycmF5KEN0LmhlYWRlcikmJihTZT0zKSx0eXBlb2YgY3Qpe2Nhc2Uic3RyaW5nIjpkdD1PaShjdCk7YnJlYWs7Y2FzZSJudW1i'@;
put 'ZXIiOihkdD1PaShyZVsiIXJlZiJdKSkucy5yPWN0O2JyZWFrO2RlZmF1bHQ6ZHQ9Y3R9U2U+MCYmKEhlPTApO3ZhciBidD1IcyhkdC5zLnIpLEZ0PVtdLEV0PTAsVHQ9QXJyYXkuaXNBcnJheShyZSksWnQ9ZHQucy5yLHBuPTAsS249MDtmb3IoVHQmJiFyZVtadF0mJihyZVtadF09W10pLHBu'@;
put 'PWR0LnMuYztwbjw9ZHQuZS5jOysrcG4pc3dpdGNoKEZ0W3BuXT1OcyhwbiksdmU9VHQ/cmVbWnRdW3BuXTpyZVtGdFtwbl0rYnRdLFNlKXtjYXNlIDE6QmVbcG5dPXBuLWR0LnMuYzticmVhaztjYXNlIDI6QmVbcG5dPUZ0W3BuXTticmVhaztjYXNlIDM6QmVbcG5dPUN0LmhlYWRlcltwbi1k'@;
put 'dC5zLmNdO2JyZWFrO2RlZmF1bHQ6Zm9yKG51bGw9PXZlJiYodmU9e3c6Il9fRU1QVFkiLHQ6InMifSksbnQ9R2U9Y3UodmUsbnVsbCxDdCksRXQ9MCxLbj0wO0tuPEJlLmxlbmd0aDsrK0tuKUJlW0tuXT09bnQmJihudD1HZSsiXyIrICsrRXQpO0JlW3BuXT1udH1yZXR1cm4gWnQ9ZHQucy5y'@;
put 'K0hlLF9lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoWnQ+ZHQuZS5yKXJldHVybiBfZS5wdXNoKG51bGwpO2Zvcig7WnQ8PWR0LmUucjspe3ZhciB1bj16TShyZSxkdCxadCxGdCxTZSxCZSxUdCxDdCk7aWYoKytadCwhMT09PXVuLmlzZW1wdHl8fCgxPT09U2U/ITEhPT1DdC5ibGFua3Jvd3M6Q3Qu'@;
put 'Ymxhbmtyb3dzKSl7X2UucHVzaCh1bi5yb3cpO2JyZWFrfX19LF9lfSx0b19odG1sOmZ1bmN0aW9uKHJlLHBlKXt2YXIgX2U9eSgpLHZlPXBlfHx7fSxIZT1udWxsIT12ZS5mb290ZXI/dmUuZm9vdGVyOkZ1LkVORDtfZS5wdXNoKG51bGwhPXZlLmhlYWRlcj92ZS5oZWFkZXI6RnUuQkVHSU4p'@;
put 'O3ZhciBCZT1XcyhyZVsiIXJlZiJdKTt2ZS5kZW5zZT1BcnJheS5pc0FycmF5KHJlKSxfZS5wdXNoKEZ1Ll9wcmVhbWJsZShyZSxCZSx2ZSkpO3ZhciBHZT1CZS5zLnIsbnQ9ITEsZHQ9W107cmV0dXJuIF9lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoR2U+QmUuZS5yKXJldHVybiBudHx8KG50PSEw'@;
put 'LF9lLnB1c2goIjwvdGFibGU+IitIZSkpLF9lLnB1c2gobnVsbCk7Zm9yKDtHZTw9QmUuZS5yOyl7X2UucHVzaChGdS5fcm93KHJlLEJlLEdlLHZlLGR0LCIiKSksKytHZTticmVha319LF9lfSx0b19jc3Y6ZnVuY3Rpb24ocmUscGUpe3ZhciBfZT15KCksdmU9cGU/P3t9O2lmKG51bGw9PXJl'@;
put 'fHxudWxsPT1yZVsiIXJlZiJdKXJldHVybiBfZS5wdXNoKG51bGwpLF9lO3ZhciBTZT1PaShyZVsiIXJlZiJdKSxIZT12b2lkIDAhPT12ZS5GUz92ZS5GUzoiLCIsQmU9SGUuY2hhckNvZGVBdCgwKSxHZT12b2lkIDAhPT12ZS5SUz92ZS5SUzoiXG4iLG50PUdlLmNoYXJDb2RlQXQoMCksZHQ9'@;
put 'bmV3IFJlZ0V4cCgoInwiPT1IZT8iXFx8IjpIZSkrIiskIiksQ3Q9IiIsY3Q9W107dmUuZGVuc2U9QXJyYXkuaXNBcnJheShyZSk7Zm9yKHZhciBidD12ZS5za2lwSGlkZGVuJiZyZVsiIWNvbHMiXXx8W10sRnQ9dmUuc2tpcEhpZGRlbiYmcmVbIiFyb3dzIl18fFtdLEV0PVNlLnMuYztFdDw9'@;
put 'U2UuZS5jOysrRXQpKGJ0W0V0XXx8e30pLmhpZGRlbnx8KGN0W0V0XT1OcyhFdCkpO3ZhciBUdD1TZS5zLnIsWnQ9ITE7cmV0dXJuIF9lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoIVp0KXJldHVybiBadD0hMCxfZS5wdXNoKCJcdWZlZmYiKTtmb3IoO1R0PD1TZS5lLnI7KWlmKCsrVHQsIShGdFtU'@;
put 'dC0xXXx8e30pLmhpZGRlbiYmbnVsbCE9KEN0PVVNKHJlLFNlLFR0LTEsY3QsQmUsbnQsSGUsdmUpKSl7dmUuc3RyaXAmJihDdD1DdC5yZXBsYWNlKGR0LCIiKSksX2UucHVzaChDdCtHZSk7YnJlYWt9cmV0dXJuIFR0PlNlLmUucj9fZS5wdXNoKG51bGwpOnZvaWQgMH0sX2V9fX0oKSxNLnBh'@;
put 'cnNlX3hsc2NmYj1fNSxNLnBhcnNlX3ppcD1ITSxNLnJlYWQ9X2YsTS5yZWFkRmlsZT1nXyxNLnJlYWRGaWxlU3luYz1nXyxNLndyaXRlPUM1LE0ud3JpdGVGaWxlPVM1LE0ud3JpdGVGaWxlU3luYz1TNSxNLndyaXRlRmlsZUFzeW5jPWZ1bmN0aW9uIGJmKHksUCxMLFEpe3ZhciByZT1MfHx7'@;
put 'fTtyZS50eXBlPSJmaWxlIixyZS5maWxlPXksdDEocmUpLHJlLnR5cGU9ImJ1ZmZlciI7dmFyIHBlPVE7cmV0dXJuIHBlIGluc3RhbmNlb2YgRnVuY3Rpb258fChwZT1MKSxXZS53cml0ZUZpbGUoeSxDNShQLHJlKSxwZSl9LE0uc2V0X2RhdGVfc3R5bGU9ZnVuY3Rpb24gemUoeSl7c3dpdGNo'@;
put 'KHkpe2Nhc2UgMDpNZSgpO2JyZWFrO2Nhc2UgMTohZnVuY3Rpb24gRGUoKXt2YXIgeT1uZXcgRGF0ZTtYZT1xZS5nZXRUaW1lKCkrNmU0Kih5LmdldFRpbWV6b25lT2Zmc2V0KCktcWUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7dmFyIFA9eS5nZXRUaW1lem9uZU9mZnNldCgpO1VlPWZ1bmN0aW9u'@;
put 'KFEscmUpe3ZhciBwZT1RLmdldFRpbWUoKTtyZXR1cm4gcmUmJihwZS09MTI2MzE2OGU1KSwocGUtKHFlLmdldFRpbWUoKSs2ZTQqKFEuZ2V0VGltZXpvbmVPZmZzZXQoKS1xZS5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fSxodD1mdW5jdGlvbihRKXt2YXIgcmU9bmV3IERhdGU7cmV0'@;
put 'dXJuIHJlLnNldFRpbWUoMjQqUSo2MCo2MCoxZTMrWGUpLHJlLmdldFRpbWV6b25lT2Zmc2V0KCkhPT1QJiZyZS5zZXRUaW1lKHJlLmdldFRpbWUoKSs2ZTQqKHJlLmdldFRpbWV6b25lT2Zmc2V0KCktUCkpLHJlfX0oKX19LE0udXRpbHM9cW8sTS5TU0Y9dyx0eXBlb2YgamU8InUiJiYoTS5D'@;
put 'RkI9amUpfShJZSl9LDI3NDE0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1JZTthZS5iaWdudW09Rig1MDQ3KSxhZS5kZWZpbmU9Rig5MDMwMikuZGVmaW5lLGFlLmJhc2U9Rig0MDUxMCksYWUuY29uc3RhbnRzPUYoNDQxNTUpLGFlLmRlY29kZXJzPUYoNzEzMDEpLGFlLmVu'@;
put 'Y29kZXJzPUYoMjM2OTMpfSw5MDMwMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9RigyMzY5MykseD1GKDcxMzAxKSxtPUYoNjY2OTgpO2Z1bmN0aW9uIE0oTyxSKXt0aGlzLm5hbWU9Tyx0aGlzLmJvZHk9Uix0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319SWUu'@;
put 'ZGVmaW5lPWZ1bmN0aW9uKFIseil7cmV0dXJuIG5ldyBNKFIseil9LE0ucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihSKXtjb25zdCB6PXRoaXMubmFtZTtmdW5jdGlvbiBLKEkpe3RoaXMuX2luaXROYW1lZChJLHopfXJldHVybiBtKEssUiksSy5wcm90b3R5cGUuX2luaXROYW1l'@;
put 'ZD1mdW5jdGlvbihrLEUpe1IuY2FsbCh0aGlzLGssRSl9LG5ldyBLKHRoaXMpfSxNLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShSPVJ8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbUl09dGhpcy5fY3JlYXRlTmFt'@;
put 'ZWQoeFtSXSkpLHRoaXMuZGVjb2RlcnNbUl19LE0ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihSLHosSyl7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoeikuZGVjb2RlKFIsSyl9LE0ucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKFIpe3JldHVybiB0aGlzLmVuY29kZXJzLmhhc093'@;
put 'blByb3BlcnR5KFI9Unx8ImRlciIpfHwodGhpcy5lbmNvZGVyc1tSXT10aGlzLl9jcmVhdGVOYW1lZChhZVtSXSkpLHRoaXMuZW5jb2RlcnNbUl19LE0ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihSLHosSyl7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoeikuZW5jb2RlKFIsSyl9fSw3NTcy'@;
put 'MDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9Rig2NjY5OCkseD1GKDk1Njg0KS5iLG09RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIGxlKE8sUil7eC5jYWxsKHRoaXMsUiksbS5pc0J1ZmZlcihPKT8odGhpcy5iYXNlPU8sdGhpcy5vZmZzZXQ9MCx0aGlzLmxlbmd0aD1PLmxl'@;
put 'bmd0aCk6dGhpcy5lcnJvcigiSW5wdXQgbm90IEJ1ZmZlciIpfWZ1bmN0aW9uIE0oTyxSKXtpZihBcnJheS5pc0FycmF5KE8pKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gTS5pc0VuY29kZXJCdWZmZXIoeil8fCh6PW5ldyBNKHosUikpLHRoaXMu'@;
put 'bGVuZ3RoKz16Lmxlbmd0aCx6fSx0aGlzKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgTyl7aWYoISgwPD1PJiZPPD0yNTUpKXJldHVybiBSLmVycm9yKCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlIik7dGhpcy52YWx1ZT1PLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZigic3RyaW5nIj09'@;
put 'dHlwZW9mIE8pdGhpcy52YWx1ZT1PLHRoaXMubGVuZ3RoPW0uYnl0ZUxlbmd0aChPKTtlbHNle2lmKCFtLmlzQnVmZmVyKE8pKXJldHVybiBSLmVycm9yKCJVbnN1cHBvcnRlZCB0eXBlOiAiK3R5cGVvZiBPKTt0aGlzLnZhbHVlPU8sdGhpcy5sZW5ndGg9Ty5sZW5ndGh9fWFlKGxlLHgpLEll'@;
put 'LkM9bGUsbGUuaXNEZWNvZGVyQnVmZmVyPWZ1bmN0aW9uKFIpe3JldHVybiBSIGluc3RhbmNlb2YgbGV8fCJvYmplY3QiPT10eXBlb2YgUiYmbS5pc0J1ZmZlcihSLmJhc2UpJiYiRGVjb2RlckJ1ZmZlciI9PT1SLmNvbnN0cnVjdG9yLm5hbWUmJiJudW1iZXIiPT10eXBlb2YgUi5vZmZzZXQm'@;
put 'JiJudW1iZXIiPT10eXBlb2YgUi5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnNhdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnJlc3RvcmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLmlzRW1wdHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnJlYWRVSW50OCYmImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFIuc2tpcCYmImZ1bmN0aW9uIj09dHlwZW9mIFIucmF3fSxsZS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6eC5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sbGUucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oUil7Y29u'@;
put 'c3Qgej1uZXcgbGUodGhpcy5iYXNlKTtyZXR1cm4gei5vZmZzZXQ9Ui5vZmZzZXQsei5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9Ui5vZmZzZXQseC5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsUi5yZXBvcnRlciksen0sbGUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sbGUucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKFJ8fCJEZWNvZGVy'@;
put 'QnVmZmVyIG92ZXJydW4iKX0sbGUucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oUix6KXtpZighKHRoaXMub2Zmc2V0K1I8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcih6fHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7Y29uc3QgSz1uZXcgbGUodGhpcy5iYXNlKTtyZXR1cm4gSy5f'@;
put 'cmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLEsub2Zmc2V0PXRoaXMub2Zmc2V0LEsubGVuZ3RoPXRoaXMub2Zmc2V0K1IsdGhpcy5vZmZzZXQrPVIsS30sbGUucHJvdG90eXBlLnJhdz1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKFI/Ui5vZmZzZXQ6dGhpcy5v'@;
put 'ZmZzZXQsdGhpcy5sZW5ndGgpfSxJZS5SPU0sTS5pc0VuY29kZXJCdWZmZXI9ZnVuY3Rpb24oUil7cmV0dXJuIFIgaW5zdGFuY2VvZiBNfHwib2JqZWN0Ij09dHlwZW9mIFImJiJFbmNvZGVyQnVmZmVyIj09PVIuY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiBSLmxlbmd0aCYm'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIFIuam9pbn0sTS5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihSLHope3JldHVybiBSfHwoUj1tLmFsbG9jKHRoaXMubGVuZ3RoKSksenx8KHo9MCksMD09PXRoaXMubGVuZ3RofHwoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2go'@;
put 'ZnVuY3Rpb24oSyl7Sy5qb2luKFIseikseis9Sy5sZW5ndGh9KTooIm51bWJlciI9PXR5cGVvZiB0aGlzLnZhbHVlP1Jbel09dGhpcy52YWx1ZToic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWU/Ui53cml0ZSh0aGlzLnZhbHVlLHopOm0uaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFs'@;
put 'dWUuY29weShSLHopLHorPXRoaXMubGVuZ3RoKSksUn19LDQwNTEwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1JZTthZS5SZXBvcnRlcj1GKDk1Njg0KS5iLGFlLkRlY29kZXJCdWZmZXI9Rig3NTcyMCkuQyxhZS5FbmNvZGVyQnVmZmVyPUYoNzU3MjApLlIsYWUuTm9kZT1G'@;
put 'KDU4NTMzKX0sNTg1MzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoOTU2ODQpLmIseD1GKDc1NzIwKS5SLG09Rig3NTcyMCkuQyxsZT1GKDU3Nzk4KSxNPVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwi'@;
put 'bnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3Ry'@;
put 'Il0sTz1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KE0pO2Z1bmN0aW9uIHooSSxrLEUpe2NvbnN0IGo9e307dGhpcy5fYmFzZVN0YXRlPWosai5uYW1lPUUsai5lbmM9SSxq'@;
put 'LnBhcmVudD1rfHxudWxsLGouY2hpbGRyZW49bnVsbCxqLnRhZz1udWxsLGouYXJncz1udWxsLGoucmV2ZXJzZUFyZ3M9bnVsbCxqLmNob2ljZT1udWxsLGoub3B0aW9uYWw9ITEsai5hbnk9ITEsai5vYmo9ITEsai51c2U9bnVsbCxqLnVzZURlY29kZXI9bnVsbCxqLmtleT1udWxsLGouZGVm'@;
put 'YXVsdD1udWxsLGouZXhwbGljaXQ9bnVsbCxqLmltcGxpY2l0PW51bGwsai5jb250YWlucz1udWxsLGoucGFyZW50fHwoai5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfWF0LmV4cG9ydHM9ejtjb25zdCBLPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJz'@;
put 'ZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07ei5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX2Jhc2VTdGF0ZSxFPXt9'@;
put 'O0suZm9yRWFjaChmdW5jdGlvbihWKXtFW1ZdPWtbVl19KTtjb25zdCBqPW5ldyB0aGlzLmNvbnN0cnVjdG9yKEUucGFyZW50KTtyZXR1cm4gai5fYmFzZVN0YXRlPUUsan0sei5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX2Jhc2VTdGF0ZTtPLmZvckVhY2goZnVu'@;
put 'Y3Rpb24oRSl7dGhpc1tFXT1mdW5jdGlvbigpe2NvbnN0IFY9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIGsuY2hpbGRyZW4ucHVzaChWKSxWW0VdLmFwcGx5KFYsYXJndW1lbnRzKX19LHRoaXMpfSx6LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMu'@;
put 'X2Jhc2VTdGF0ZTtsZShudWxsPT09RS5wYXJlbnQpLGsuY2FsbCh0aGlzKSxFLmNoaWxkcmVuPUUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGope3JldHVybiBqLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksbGUuZXF1YWwoRS5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2Rl'@;
put 'IGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LHoucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlLGo9ay5maWx0ZXIoZnVuY3Rpb24oVil7cmV0dXJuIFYgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtrPWsuZmlsdGVyKGZ1'@;
put 'bmN0aW9uKFYpe3JldHVybiEoViBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09ai5sZW5ndGgmJihsZShudWxsPT09RS5jaGlsZHJlbiksRS5jaGlsZHJlbj1qLGouZm9yRWFjaChmdW5jdGlvbihWKXtWLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09'@;
put 'ay5sZW5ndGgmJihsZShudWxsPT09RS5hcmdzKSxFLmFyZ3M9ayxFLnJldmVyc2VBcmdzPWsubWFwKGZ1bmN0aW9uKFYpe2lmKCJvYmplY3QiIT10eXBlb2YgVnx8Vi5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gVjtjb25zdCBCPXt9O3JldHVybiBPYmplY3Qua2V5cyhWKS5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKFkpe1k9PSgwfFkpJiYoWXw9MCksQltWW1ldXT1ZfSksQn0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJf'@;
put 'ZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oSSl7ei5wcm90b3R5cGVbSV09ZnVuY3Rpb24oKXt0aHJv'@;
put 'dyBuZXcgRXJyb3IoSSsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksTS5mb3JFYWNoKGZ1bmN0aW9uKEkpe3oucHJvdG90eXBlW0ldPWZ1bmN0aW9uKCl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGUsaj1BcnJheS5wcm90b3R5cGUuc2xp'@;
put 'Y2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBsZShudWxsPT09RS50YWcpLEUudGFnPUksdGhpcy5fdXNlQXJncyhqKSx0aGlzfX0pLHoucHJvdG90eXBlLnVzZT1mdW5jdGlvbihrKXtsZShrKTtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVsbD09PUUudXNlKSxFLnVzZT1r'@;
put 'LHRoaXN9LHoucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSx6LnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmRlZmF1bHQpLEUuZGVm'@;
put 'YXVsdD1rLEUub3B0aW9uYWw9ITAsdGhpc30sei5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmV4cGxpY2l0JiZudWxsPT09RS5pbXBsaWNpdCksRS5leHBsaWNpdD1rLHRoaXN9LHoucHJvdG90eXBlLmlt'@;
put 'cGxpY2l0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBsZShudWxsPT09RS5leHBsaWNpdCYmbnVsbD09PUUuaW1wbGljaXQpLEUuaW1wbGljaXQ9ayx0aGlzfSx6LnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX2Jhc2VTdGF0ZSxFPUFy'@;
put 'cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGsub2JqPSEwLDAhPT1FLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhFKSx0aGlzfSx6LnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmtleSks'@;
put 'RS5rZXk9ayx0aGlzfSx6LnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSx6LnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmNob2ljZSksRS5jaG9p'@;
put 'Y2U9ayx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKGspLm1hcChmdW5jdGlvbihqKXtyZXR1cm4ga1tqXX0pKSx0aGlzfSx6LnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVsbD09PUUudXNlKSxFLmNvbnRhaW5zPWss'@;
put 'dGhpc30sei5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1qLnBhcmVudClyZXR1cm4gay53cmFwUmVzdWx0KGouY2hpbGRyZW5bMF0uX2RlY29kZShrLEUpKTtsZXQgWCxWPWouZGVmYXVsdCxCPSEwLFk9bnVsbDtpZihu'@;
put 'dWxsIT09ai5rZXkmJihZPWsuZW50ZXJLZXkoai5rZXkpKSxqLm9wdGlvbmFsKXtsZXQgVT1udWxsO2lmKG51bGwhPT1qLmV4cGxpY2l0P1U9ai5leHBsaWNpdDpudWxsIT09ai5pbXBsaWNpdD9VPWouaW1wbGljaXQ6bnVsbCE9PWoudGFnJiYoVT1qLnRhZyksbnVsbCE9PVV8fGouYW55KXtp'@;
put 'ZihCPXRoaXMuX3BlZWtUYWcoayxVLGouYW55KSxrLmlzRXJyb3IoQikpcmV0dXJuIEJ9ZWxzZXtjb25zdCBxPWsuc2F2ZSgpO3RyeXtudWxsPT09ai5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhqLnRhZyxrLEUpOnRoaXMuX2RlY29kZUNob2ljZShrLEUpLEI9ITB9Y2F0Y2h7Qj0hMX1r'@;
put 'LnJlc3RvcmUocSl9fWlmKGoub2JqJiZCJiYoWD1rLmVudGVyT2JqZWN0KCkpLEIpe2lmKG51bGwhPT1qLmV4cGxpY2l0KXtjb25zdCBxPXRoaXMuX2RlY29kZVRhZyhrLGouZXhwbGljaXQpO2lmKGsuaXNFcnJvcihxKSlyZXR1cm4gcTtrPXF9Y29uc3QgVT1rLm9mZnNldDtpZihudWxsPT09'@;
put 'ai51c2UmJm51bGw9PT1qLmNob2ljZSl7bGV0IHE7ai5hbnkmJihxPWsuc2F2ZSgpKTtjb25zdCBlZT10aGlzLl9kZWNvZGVUYWcoayxudWxsIT09ai5pbXBsaWNpdD9qLmltcGxpY2l0OmoudGFnLGouYW55KTtpZihrLmlzRXJyb3IoZWUpKXJldHVybiBlZTtqLmFueT9WPWsucmF3KHEpOms9'@;
put 'ZWV9aWYoRSYmRS50cmFjayYmbnVsbCE9PWoudGFnJiZFLnRyYWNrKGsucGF0aCgpLFUsay5sZW5ndGgsInRhZ2dlZCIpLEUmJkUudHJhY2smJm51bGwhPT1qLnRhZyYmRS50cmFjayhrLnBhdGgoKSxrLm9mZnNldCxrLmxlbmd0aCwiY29udGVudCIpLGouYW55fHwoVj1udWxsPT09ai5jaG9p'@;
put 'Y2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhqLnRhZyxrLEUpOnRoaXMuX2RlY29kZUNob2ljZShrLEUpKSxrLmlzRXJyb3IoVikpcmV0dXJuIFY7aWYoIWouYW55JiZudWxsPT09ai5jaG9pY2UmJm51bGwhPT1qLmNoaWxkcmVuJiZqLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oZWUpe2VlLl9k'@;
put 'ZWNvZGUoayxFKX0pLGouY29udGFpbnMmJigib2N0c3RyIj09PWoudGFnfHwiYml0c3RyIj09PWoudGFnKSl7Y29uc3QgcT1uZXcgbShWKTtWPXRoaXMuX2dldFVzZShqLmNvbnRhaW5zLGsuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKHEsRSl9fXJldHVybiBqLm9iaiYmQiYmKFY9ay5s'@;
put 'ZWF2ZU9iamVjdChYKSksbnVsbD09PWoua2V5fHxudWxsPT09ViYmITAhPT1CP251bGwhPT1ZJiZrLmV4aXRLZXkoWSk6ay5sZWF2ZUtleShZLGoua2V5LFYpLFZ9LHoucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1'@;
put 'cm4ic2VxIj09PWt8fCJzZXQiPT09az9udWxsOiJzZXFvZiI9PT1rfHwic2V0b2YiPT09az90aGlzLl9kZWNvZGVMaXN0KEUsayxWLmFyZ3NbMF0saik6L3N0ciQvLnRlc3Qoayk/dGhpcy5fZGVjb2RlU3RyKEUsayxqKToib2JqaWQiPT09ayYmVi5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEUs'@;
put 'Vi5hcmdzWzBdLFYuYXJnc1sxXSxqKToib2JqaWQiPT09az90aGlzLl9kZWNvZGVPYmppZChFLG51bGwsbnVsbCxqKToiZ2VudGltZSI9PT1rfHwidXRjdGltZSI9PT1rP3RoaXMuX2RlY29kZVRpbWUoRSxrLGopOiJudWxsXyI9PT1rP3RoaXMuX2RlY29kZU51bGwoRSxqKToiYm9vbCI9PT1r'@;
put 'P3RoaXMuX2RlY29kZUJvb2woRSxqKToib2JqRGVzYyI9PT1rP3RoaXMuX2RlY29kZVN0cihFLGssaik6ImludCI9PT1rfHwiZW51bSI9PT1rP3RoaXMuX2RlY29kZUludChFLFYuYXJncyYmVi5hcmdzWzBdLGopOm51bGwhPT1WLnVzZT90aGlzLl9nZXRVc2UoVi51c2UsRS5fcmVwb3J0ZXJT'@;
put 'dGF0ZS5vYmopLl9kZWNvZGUoRSxqKTpFLmVycm9yKCJ1bmtub3duIHRhZzogIitrKX0sei5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBqLnVzZURlY29kZXI9dGhpcy5fdXNlKGssRSksbGUobnVsbD09PWoudXNlRGVjb2Rl'@;
put 'ci5fYmFzZVN0YXRlLnBhcmVudCksai51c2VEZWNvZGVyPWoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLGouaW1wbGljaXQhPT1qLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKGoudXNlRGVjb2Rlcj1qLnVzZURlY29kZXIuY2xvbmUoKSxqLnVzZURlY29kZXIu'@;
put 'X2Jhc2VTdGF0ZS5pbXBsaWNpdD1qLmltcGxpY2l0KSxqLnVzZURlY29kZXJ9LHoucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgVj1udWxsLEI9ITE7cmV0dXJuIE9iamVjdC5rZXlzKGouY2hvaWNlKS5zb21lKGZ1bmN0'@;
put 'aW9uKFkpe2NvbnN0IFg9ay5zYXZlKCksVT1qLmNob2ljZVtZXTt0cnl7Y29uc3QgcT1VLl9kZWNvZGUoayxFKTtpZihrLmlzRXJyb3IocSkpcmV0dXJuITE7Vj17dHlwZTpZLHZhbHVlOnF9LEI9ITB9Y2F0Y2h7cmV0dXJuIGsucmVzdG9yZShYKSwhMX1yZXR1cm4hMH0sdGhpcyksQj9WOmsu'@;
put 'ZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSx6LnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IHgoayx0aGlzLnJlcG9ydGVyKX0sei5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihrLEUsail7Y29uc3QgVj10aGlzLl9iYXNlU3RhdGU7'@;
put 'aWYobnVsbCE9PVYuZGVmYXVsdCYmVi5kZWZhdWx0PT09aylyZXR1cm47Y29uc3QgQj10aGlzLl9lbmNvZGVWYWx1ZShrLEUsaik7cmV0dXJuIHZvaWQgMD09PUJ8fHRoaXMuX3NraXBEZWZhdWx0KEIsRSxqKT92b2lkIDA6Qn0sei5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKGss'@;
put 'RSxqKXtjb25zdCBWPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vi5wYXJlbnQpcmV0dXJuIFYuY2hpbGRyZW5bMF0uX2VuY29kZShrLEV8fG5ldyBhZSk7bGV0IEI9bnVsbDtpZih0aGlzLnJlcG9ydGVyPUUsVi5vcHRpb25hbCYmdm9pZCAwPT09ayl7aWYobnVsbD09PVYuZGVmYXVsdCly'@;
put 'ZXR1cm47az1WLmRlZmF1bHR9bGV0IFk9bnVsbCxYPSExO2lmKFYuYW55KUI9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihrKTtlbHNlIGlmKFYuY2hvaWNlKUI9dGhpcy5fZW5jb2RlQ2hvaWNlKGssRSk7ZWxzZSBpZihWLmNvbnRhaW5zKVk9dGhpcy5fZ2V0VXNlKFYuY29udGFpbnMsaiku'@;
put 'X2VuY29kZShrLEUpLFg9ITA7ZWxzZSBpZihWLmNoaWxkcmVuKVk9Vi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oVSl7aWYoIm51bGxfIj09PVUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIFUuX2VuY29kZShudWxsLEUsayk7aWYobnVsbD09PVUuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIEUuZXJyb3Io'@;
put 'IkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7Y29uc3QgcT1FLmVudGVyS2V5KFUuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgaylyZXR1cm4gRS5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7Y29uc3QgZWU9VS5fZW5jb2RlKGtb'@;
put 'VS5fYmFzZVN0YXRlLmtleV0sRSxrKTtyZXR1cm4gRS5sZWF2ZUtleShxKSxlZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVfSksWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFkpO2Vsc2UgaWYoInNlcW9mIj09PVYudGFnfHwic2V0b2YiPT09Vi50YWcpe2lmKCFWLmFy'@;
put 'Z3N8fDEhPT1WLmFyZ3MubGVuZ3RoKXJldHVybiBFLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrVi50YWcpO2lmKCFBcnJheS5pc0FycmF5KGspKXJldHVybiBFLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7Y29uc3QgVT10aGlzLmNsb25lKCk7VS5f'@;
put 'YmFzZVN0YXRlLmltcGxpY2l0PW51bGwsWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGsubWFwKGZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0saykuX2VuY29kZShxLEUpfSxVKSl9ZWxzZSBudWxsIT09Vi51c2U/Qj10aGlzLl9nZXRV'@;
put 'c2UoVi51c2UsaikuX2VuY29kZShrLEUpOihZPXRoaXMuX2VuY29kZVByaW1pdGl2ZShWLnRhZyxrKSxYPSEwKTtpZighVi5hbnkmJm51bGw9PT1WLmNob2ljZSl7Y29uc3QgVT1udWxsIT09Vi5pbXBsaWNpdD9WLmltcGxpY2l0OlYudGFnLHE9bnVsbD09PVYuaW1wbGljaXQ/InVuaXZlcnNh'@;
put 'bCI6ImNvbnRleHQiO251bGw9PT1VP251bGw9PT1WLnVzZSYmRS5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVYudXNlJiYoQj10aGlzLl9lbmNvZGVDb21wb3NpdGUoVSxYLHEsWSkpfXJldHVybiBudWxsIT09Vi5leHBsaWNpdCYmKEI9dGhp'@;
put 'cy5fZW5jb2RlQ29tcG9zaXRlKFYuZXhwbGljaXQsITEsImNvbnRleHQiLEIpKSxCfSx6LnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGUsVj1qLmNob2ljZVtrLnR5cGVdO3JldHVybiBWfHxsZSghMSxrLnR5cGUrIiBub3QgZm91'@;
put 'bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhqLmNob2ljZSkpKSxWLl9lbmNvZGUoay52YWx1ZSxFKX0sei5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KGspKXJldHVybiB0aGlz'@;
put 'Ll9lbmNvZGVTdHIoRSxrKTtpZigib2JqaWQiPT09ayYmai5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChFLGoucmV2ZXJzZUFyZ3NbMF0sai5hcmdzWzFdKTtpZigib2JqaWQiPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoRSxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PWt8'@;
put 'fCJ1dGN0aW1lIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoRSxrKTtpZigibnVsbF8iPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09a3x8ImVudW0iPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlSW50KEUsai5hcmdzJiZqLnJldmVyc2VBcmdzWzBdKTtpZigi'@;
put 'Ym9vbCI9PT1rKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEUpO2lmKCJvYmpEZXNjIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZVN0cihFLGspO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK2spfSx6LnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oayl7cmV0dXJuL15b'@;
put 'MC05IF0qJC8udGVzdChrKX0sei5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oayl7cmV0dXJuL15bQS1aYS16MC05ICcoKSssLS4vOj0/XSokLy50ZXN0KGspfX0sOTU2ODQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpO2Z1bmN0aW9uIHgobGUpe3Ro'@;
put 'aXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpsZXx8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBtKGxlLE0pe3RoaXMucGF0aD1sZSx0aGlzLnJldGhyb3coTSl9SWUuYj14LHgucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24oTSl7cmV0dXJuIE0gaW5zdGFuY2Vv'@;
put 'ZiBtfSx4LnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7Y29uc3QgTT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6TS5vYmoscGF0aExlbjpNLnBhdGgubGVuZ3RofX0seC5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihNKXtjb25zdCBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7Ty5v'@;
put 'Ymo9TS5vYmosTy5wYXRoPU8ucGF0aC5zbGljZSgwLE0ucGF0aExlbil9LHgucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChNKX0seC5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbihNKXtjb25zdCBPPXRoaXMuX3Jl'@;
put 'cG9ydGVyU3RhdGU7Ty5wYXRoPU8ucGF0aC5zbGljZSgwLE0tMSl9LHgucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKE0sTyxSKXtjb25zdCB6PXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KE0pLG51bGwhPT16Lm9iaiYmKHoub2JqW09dPVIpfSx4LnByb3RvdHlwZS5wYXRo'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LHgucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7Y29uc3QgTT10aGlzLl9yZXBvcnRlclN0YXRlLE89TS5vYmo7cmV0dXJuIE0ub2JqPXt9LE99LHgucHJvdG90eXBlLmxlYXZlT2Jq'@;
put 'ZWN0PWZ1bmN0aW9uKE0pe2NvbnN0IE89dGhpcy5fcmVwb3J0ZXJTdGF0ZSxSPU8ub2JqO3JldHVybiBPLm9iaj1NLFJ9LHgucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKE0pe2xldCBPO2NvbnN0IFI9dGhpcy5fcmVwb3J0ZXJTdGF0ZSx6PU0gaW5zdGFuY2VvZiBtO2lmKE89ej9NOm5ldyBt'@;
put 'KFIucGF0aC5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KEspKyJdIn0pLmpvaW4oIiIpLE0ubWVzc2FnZXx8TSxNLnN0YWNrKSwhUi5vcHRpb25zLnBhcnRpYWwpdGhyb3cgTztyZXR1cm4genx8Ui5lcnJvcnMucHVzaChPKSxPfSx4LnByb3RvdHlwZS53cmFwUmVz'@;
put 'dWx0PWZ1bmN0aW9uKE0pe2NvbnN0IE89dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gTy5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IoTSk/bnVsbDpNLGVycm9yczpPLmVycm9yc306TX0sYWUobSxFcnJvciksbS5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbihNKXtp'@;
put 'Zih0aGlzLm1lc3NhZ2U9TSsiIGF0OiAiKyh0aGlzLnBhdGh8fCIoc2hhbGxvdykiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxtKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2goTyl7dGhp'@;
put 'cy5zdGFjaz1PLnN0YWNrfXJldHVybiB0aGlzfX0sNjUwODY6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBGKGFlKXtjb25zdCB4PXt9O3JldHVybiBPYmplY3Qua2V5cyhhZSkuZm9yRWFjaChmdW5jdGlvbihtKXsoMHxtKT09bSYmKG18PTApLHhbYWVbbV1dPW19KSx4fUllLnRh'@;
put 'Z0NsYXNzPXswOiJ1bml2ZXJzYWwiLDE6ImFwcGxpY2F0aW9uIiwyOiJjb250ZXh0IiwzOiJwcml2YXRlIn0sSWUudGFnQ2xhc3NCeU5hbWU9RihJZS50YWdDbGFzcyksSWUudGFnPXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0OiJvY3RzdHIiLDU6Im51bGxfIiw2OiJv'@;
put 'YmppZCIsNzoib2JqRGVzYyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEwOiJlbnVtIiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2MXN0ciIsMjE6InZpZGVvc3RyIiwyMjoi'@;
put 'aWE1c3RyIiwyMzoidXRjdGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFwaHN0ciIsMjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMwOiJibXBzdHIifSxJZS50YWdCeU5hbWU9RihJZS50YWcpfSw0NDE1NTooYXQsSWUsRik9PnsidXNlIHN0cmlj'@;
put 'dCI7Y29uc3QgYWU9SWU7YWUuX3JldmVyc2U9ZnVuY3Rpb24obSl7Y29uc3QgbGU9e307cmV0dXJuIE9iamVjdC5rZXlzKG0pLmZvckVhY2goZnVuY3Rpb24oTSl7KDB8TSk9PU0mJihNfD0wKSxsZVttW01dXT1NfSksbGV9LGFlLmRlcj1GKDY1MDg2KX0sOTY4MzU6KGF0LEllLEYpPT57InVz'@;
put 'ZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9Rig1MDQ3KSxtPUYoNzU3MjApLkMsbGU9Rig1ODUzMyksTT1GKDY1MDg2KTtmdW5jdGlvbiBPKEkpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1JLm5hbWUsdGhpcy5lbnRpdHk9SSx0aGlzLnRyZWU9bmV3IFIsdGhpcy50cmVlLl9pbml0'@;
put 'KEkuYm9keSl9ZnVuY3Rpb24gUihJKXtsZS5jYWxsKHRoaXMsImRlciIsSSl9ZnVuY3Rpb24geihJLGspe2xldCBFPUkucmVhZFVJbnQ4KGspO2lmKEkuaXNFcnJvcihFKSlyZXR1cm4gRTtjb25zdCBqPU0udGFnQ2xhc3NbRT4+Nl0sVj0wPT0oMzImRSk7aWYoMzE9PSgzMSZFKSl7bGV0IFk9'@;
put 'RTtmb3IoRT0wOzEyOD09KDEyOCZZKTspe2lmKFk9SS5yZWFkVUludDgoayksSS5pc0Vycm9yKFkpKXJldHVybiBZO0U8PD03LEV8PTEyNyZZfX1lbHNlIEUmPTMxO3JldHVybntjbHM6aixwcmltaXRpdmU6Vix0YWc6RSx0YWdTdHI6TS50YWdbRV19fWZ1bmN0aW9uIEsoSSxrLEUpe2xldCBq'@;
put 'PUkucmVhZFVJbnQ4KEUpO2lmKEkuaXNFcnJvcihqKSlyZXR1cm4gajtpZighayYmMTI4PT09ailyZXR1cm4gbnVsbDtpZighKDEyOCZqKSlyZXR1cm4gajtjb25zdCBWPTEyNyZqO2lmKFY+NClyZXR1cm4gSS5lcnJvcigibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZyIpO2o9MDtmb3IobGV0'@;
put 'IEI9MDtCPFY7QisrKXtqPDw9ODtjb25zdCBZPUkucmVhZFVJbnQ4KEUpO2lmKEkuaXNFcnJvcihZKSlyZXR1cm4gWTtqfD1ZfXJldHVybiBqfWF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gbS5pc0RlY29kZXJCdWZmZXIoayl8fChrPW5ldyBt'@;
put 'KGssRSkpLHRoaXMudHJlZS5fZGVjb2RlKGssRSl9LGFlKFIsbGUpLFIucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKGssRSxqKXtpZihrLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdCBWPWsuc2F2ZSgpLEI9eihrLCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK0UrJyInKTtyZXR1cm4gay5p'@;
put 'c0Vycm9yKEIpP0I6KGsucmVzdG9yZShWKSxCLnRhZz09PUV8fEIudGFnU3RyPT09RXx8Qi50YWdTdHIrIm9mIj09PUV8fGopfSxSLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXooaywnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgIicrRSsnIicpO2lmKGsu'@;
put 'aXNFcnJvcihWKSlyZXR1cm4gVjtsZXQgQj1LKGssVi5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mICInK0UrJyInKTtpZihrLmlzRXJyb3IoQikpcmV0dXJuIEI7aWYoIWomJlYudGFnIT09RSYmVi50YWdTdHIhPT1FJiZWLnRhZ1N0cisib2YiIT09RSlyZXR1cm4gay5lcnJv'@;
put 'cignRmFpbGVkIHRvIG1hdGNoIHRhZzogIicrRSsnIicpO2lmKFYucHJpbWl0aXZlfHxudWxsIT09QilyZXR1cm4gay5za2lwKEIsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytFKyciJyk7Y29uc3QgWT1rLnNhdmUoKSxYPXRoaXMuX3NraXBVbnRpbEVuZChrLCdGYWlsZWQgdG8gc2tp'@;
put 'cCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBrLmlzRXJyb3IoWCk/WDooQj1rLm9mZnNldC1ZLm9mZnNldCxrLnJlc3RvcmUoWSksay5za2lwKEIsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytFKyciJykpfSxSLnByb3RvdHlwZS5fc2tpcFVu'@;
put 'dGlsRW5kPWZ1bmN0aW9uKGssRSl7Zm9yKDs7KXtjb25zdCBqPXooayxFKTtpZihrLmlzRXJyb3IoaikpcmV0dXJuIGo7Y29uc3QgVj1LKGssai5wcmltaXRpdmUsRSk7aWYoay5pc0Vycm9yKFYpKXJldHVybiBWO2xldCBCO2lmKEI9ai5wcmltaXRpdmV8fG51bGwhPT1WP2suc2tpcChWKTp0'@;
put 'aGlzLl9za2lwVW50aWxFbmQoayxFKSxrLmlzRXJyb3IoQikpcmV0dXJuIEI7aWYoImVuZCI9PT1qLnRhZ1N0cilicmVha319LFIucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKGssRSxqLFYpe2NvbnN0IEI9W107Zm9yKDshay5pc0VtcHR5KCk7KXtjb25zdCBZPXRoaXMuX3BlZWtU'@;
put 'YWcoaywiZW5kIik7aWYoay5pc0Vycm9yKFkpKXJldHVybiBZO2NvbnN0IFg9ai5kZWNvZGUoaywiZGVyIixWKTtpZihrLmlzRXJyb3IoWCkmJlkpYnJlYWs7Qi5wdXNoKFgpfXJldHVybiBCfSxSLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKGssRSl7aWYoImJpdHN0ciI9PT1FKXtj'@;
put 'b25zdCBqPWsucmVhZFVJbnQ4KCk7cmV0dXJuIGsuaXNFcnJvcihqKT9qOnt1bnVzZWQ6aixkYXRhOmsucmF3KCl9fWlmKCJibXBzdHIiPT09RSl7Y29uc3Qgaj1rLnJhdygpO2lmKGoubGVuZ3RoJTI9PTEpcmV0dXJuIGsuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIg'@;
put 'bGVuZ3RoIG1pc21hdGNoIik7bGV0IFY9IiI7Zm9yKGxldCBCPTA7QjxqLmxlbmd0aC8yO0IrKylWKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGoucmVhZFVJbnQxNkJFKDIqQikpO3JldHVybiBWfWlmKCJudW1zdHIiPT09RSl7Y29uc3Qgaj1rLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVy'@;
put 'biB0aGlzLl9pc051bXN0cihqKT9qOmsuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09RSlyZXR1cm4gay5yYXcoKTtpZigib2JqRGVzYyI9PT1FKXJldHVybiBrLnJhdygpO2lmKCJwcmludHN0ciI9'@;
put 'PT1FKXtjb25zdCBqPWsucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoaik/ajprLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEUpP2sucmF3KCku'@;
put 'dG9TdHJpbmcoKTprLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitFKyIgdW5zdXBwb3J0ZWQiKX0sUi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKGssRSxqKXtsZXQgVjtjb25zdCBCPVtdO2xldCBZPTAsWD0wO2Zvcig7IWsuaXNFbXB0eSgpOylYPWsucmVhZFVJ'@;
put 'bnQ4KCksWTw8PTcsWXw9MTI3JlgsMTI4Jlh8fChCLnB1c2goWSksWT0wKTtpZigxMjgmWCYmQi5wdXNoKFkpLFY9aj9COltCWzBdLzQwfDAsQlswXSU0MF0uY29uY2F0KEIuc2xpY2UoMSkpLEUpe2xldCBlZT1FW1Yuam9pbigiICIpXTt2b2lkIDA9PT1lZSYmKGVlPUVbVi5qb2luKCIuIild'@;
put 'KSx2b2lkIDAhPT1lZSYmKFY9ZWUpfXJldHVybiBWfSxSLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9ay5yYXcoKS50b1N0cmluZygpO2xldCBWLEIsWSxYLFUscTtpZigiZ2VudGltZSI9PT1FKVY9MHxqLnNsaWNlKDAsNCksQj0wfGouc2xpY2UoNCw2KSxZ'@;
put 'PTB8ai5zbGljZSg2LDgpLFg9MHxqLnNsaWNlKDgsMTApLFU9MHxqLnNsaWNlKDEwLDEyKSxxPTB8ai5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1FKXJldHVybiBrLmVycm9yKCJEZWNvZGluZyAiK0UrIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Vj0wfGouc2xpY2Uo'@;
put 'MCwyKSxCPTB8ai5zbGljZSgyLDQpLFk9MHxqLnNsaWNlKDQsNiksWD0wfGouc2xpY2UoNiw4KSxVPTB8ai5zbGljZSg4LDEwKSxxPTB8ai5zbGljZSgxMCwxMiksVj1WPDcwPzJlMytWOjE5MDArVn1yZXR1cm4gRGF0ZS5VVEMoVixCLTEsWSxYLFUscSwwKX0sUi5wcm90b3R5cGUuX2RlY29k'@;
put 'ZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sUi5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oayl7Y29uc3QgRT1rLnJlYWRVSW50OCgpO3JldHVybiBrLmlzRXJyb3IoRSk/RTowIT09RX0sUi5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihrLEUpe2NvbnN0IGo9ay5y'@;
put 'YXcoKTtsZXQgVj1uZXcgeChqKTtyZXR1cm4gRSYmKFY9RVtWLnRvU3RyaW5nKDEwKV18fFYpLFZ9LFIucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oayxFKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgayYmKGs9ayhFKSksay5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDcxMzAxOihhdCxJ'@;
put 'ZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1JZTthZS5kZXI9Rig5NjgzNSksYWUucGVtPUYoMjIwOCl9LDIyMDg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9RigyNDE3OSkuQnVmZmVyLG09Rig5NjgzNSk7ZnVuY3Rpb24gbGUoTSl7bS5jYWxsKHRo'@;
put 'aXMsTSksdGhpcy5lbmM9InBlbSJ9YWUobGUsbSksYXQuZXhwb3J0cz1sZSxsZS5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKE8sUil7Y29uc3Qgej1PLnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksSz1SLmxhYmVsLnRvVXBwZXJDYXNlKCksST0vXi0tLS0tKEJFR0lOfEVORCkgKFte'@;
put 'LV0rKS0tLS0tJC87bGV0IGs9LTEsRT0tMTtmb3IobGV0IEI9MDtCPHoubGVuZ3RoO0IrKyl7Y29uc3QgWT16W0JdLm1hdGNoKEkpO2lmKG51bGwhPT1ZJiZZWzJdPT09Syl7aWYoLTEhPT1rKXtpZigiRU5EIiE9PVlbMV0pYnJlYWs7RT1CO2JyZWFrfWlmKCJCRUdJTiIhPT1ZWzFdKWJyZWFr'@;
put 'O2s9Qn19aWYoLTE9PT1rfHwtMT09PUUpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK0spO2NvbnN0IGo9ei5zbGljZShrKzEsRSkuam9pbigiIik7ai5yZXBsYWNlKC9bXmEtejAtOSsvPV0rL2dpLCIiKTtjb25zdCBWPXguZnJvbShqLCJiYXNlNjQiKTty'@;
put 'ZXR1cm4gbS5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxWLFIpfX0sNjkxMzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9RigyNDE3OSkuQnVmZmVyLG09Rig1ODUzMyksbGU9Rig2NTA4Nik7ZnVuY3Rpb24gTShLKXt0aGlzLmVuYz0iZGVyIix0aGlz'@;
put 'Lm5hbWU9Sy5uYW1lLHRoaXMuZW50aXR5PUssdGhpcy50cmVlPW5ldyBPLHRoaXMudHJlZS5faW5pdChLLmJvZHkpfWZ1bmN0aW9uIE8oSyl7bS5jYWxsKHRoaXMsImRlciIsSyl9ZnVuY3Rpb24gUihLKXtyZXR1cm4gSzwxMD8iMCIrSzpLfWF0LmV4cG9ydHM9TSxNLnByb3RvdHlwZS5lbmNv'@;
put 'ZGU9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoSSxrKS5qb2luKCl9LGFlKE8sbSksTy5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihJLGssRSxqKXtjb25zdCBWPWZ1bmN0aW9uIHooSyxJLGssRSl7bGV0IGo7aWYoInNlcW9mIj09PUs/Sz0ic2Vx'@;
put 'Ijoic2V0b2YiPT09SyYmKEs9InNldCIpLGxlLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShLKSlqPWxlLnRhZ0J5TmFtZVtLXTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgS3x8KDB8SykhPT1LKXJldHVybiBFLmVycm9yKCJVbmtub3duIHRhZzogIitLKTtqPUt9cmV0dXJuIGo+PTMxP0Uu'@;
put 'ZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIpOihJfHwoanw9MzIpLGp8PWxlLnRhZ0NsYXNzQnlOYW1lW2t8fCJ1bml2ZXJzYWwiXTw8NixqKX0oSSxrLEUsdGhpcy5yZXBvcnRlcik7aWYoai5sZW5ndGg8MTI4KXtjb25zdCBYPXguYWxsb2MoMik7cmV0dXJu'@;
put 'IFhbMF09VixYWzFdPWoubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW1gsal0pfWxldCBCPTE7Zm9yKGxldCBYPWoubGVuZ3RoO1g+PTI1NjtYPj49OClCKys7Y29uc3QgWT14LmFsbG9jKDIrQik7WVswXT1WLFlbMV09MTI4fEI7Zm9yKGxldCBYPTErQixVPWoubGVuZ3RoO1U+'@;
put 'MDtYLS0sVT4+PTgpWVtYXT0yNTUmVTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbWSxqXSl9LE8ucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oSSxrKXtpZigiYml0c3RyIj09PWspcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8SS51bnVzZWQsSS5k'@;
put 'YXRhXSk7aWYoImJtcHN0ciI9PT1rKXtjb25zdCBFPXguYWxsb2MoMipJLmxlbmd0aCk7Zm9yKGxldCBqPTA7ajxJLmxlbmd0aDtqKyspRS53cml0ZVVJbnQxNkJFKEkuY2hhckNvZGVBdChqKSwyKmopO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEUpfXJldHVybiJudW1zdHIi'@;
put 'PT09az90aGlzLl9pc051bXN0cihJKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEkpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlIik6InByaW50c3RyIj09PWs/dGhpcy5faXNQcmlu'@;
put 'dHN0cihJKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEkpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9w'@;
put 'aGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrIik6L3N0ciQvLnRlc3Qoayl8fCJvYmpEZXNjIj09PWs/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihJKTp0'@;
put 'aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitrKyIgdW5zdXBwb3J0ZWQiKX0sTy5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKEksayxFKXtpZigic3RyaW5nIj09dHlwZW9mIEkpe2lmKCFrKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJz'@;
put 'dHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIWsuaGFzT3duUHJvcGVydHkoSSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7ST1rW0ldLnNwbGl0KC9bXHMuXSsvZyk7Zm9yKGxldCBZPTA7'@;
put 'WTxJLmxlbmd0aDtZKyspSVtZXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoSSkpe0k9SS5zbGljZSgpO2ZvcihsZXQgWT0wO1k8SS5sZW5ndGg7WSsrKUlbWV18PTB9aWYoIUFycmF5LmlzQXJyYXkoSSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVp'@;
put 'dGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShJKSk7aWYoIUUpe2lmKElbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtJLnNwbGljZSgwLDIsNDAqSVswXStJWzFdKX1sZXQgaj0wO2Zvcihs'@;
put 'ZXQgWT0wO1k8SS5sZW5ndGg7WSsrKXtsZXQgWD1JW1ldO2ZvcihqKys7WD49MTI4O1g+Pj03KWorK31jb25zdCBWPXguYWxsb2Moaik7bGV0IEI9Vi5sZW5ndGgtMTtmb3IobGV0IFk9SS5sZW5ndGgtMTtZPj0wO1ktLSl7bGV0IFg9SVtZXTtmb3IoVltCLS1dPTEyNyZYOyhYPj49Nyk+MDsp'@;
put 'VltCLS1dPTEyOHwxMjcmWH1yZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihWKX0sTy5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oSSxrKXtsZXQgRTtjb25zdCBqPW5ldyBEYXRlKEkpO3JldHVybiJnZW50aW1lIj09PWs/RT1bUihqLmdldFVUQ0Z1bGxZZWFyKCkpLFIo'@;
put 'ai5nZXRVVENNb250aCgpKzEpLFIoai5nZXRVVENEYXRlKCkpLFIoai5nZXRVVENIb3VycygpKSxSKGouZ2V0VVRDTWludXRlcygpKSxSKGouZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PWs/RT1bUihqLmdldFVUQ0Z1bGxZZWFyKCklMTAwKSxSKGouZ2V0VVRD'@;
put 'TW9udGgoKSsxKSxSKGouZ2V0VVRDRGF0ZSgpKSxSKGouZ2V0VVRDSG91cnMoKSksUihqLmdldFVUQ01pbnV0ZXMoKSksUihqLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK2srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0'@;
put 'IiksdGhpcy5fZW5jb2RlU3RyKEUsIm9jdHN0ciIpfSxPLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sTy5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihJLGspe2lmKCJzdHJpbmciPT10eXBlb2YgSSl7'@;
put 'aWYoIWspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighay5oYXNPd25Qcm9wZXJ0eShJKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNP'@;
put 'Ti5zdHJpbmdpZnkoSSkpO0k9a1tJXX1pZigibnVtYmVyIiE9dHlwZW9mIEkmJiF4LmlzQnVmZmVyKEkpKXtjb25zdCBWPUkudG9BcnJheSgpOyFJLnNpZ24mJjEyOCZWWzBdJiZWLnVuc2hpZnQoMCksST14LmZyb20oVil9aWYoeC5pc0J1ZmZlcihJKSl7bGV0IFY9SS5sZW5ndGg7MD09PUku'@;
put 'bGVuZ3RoJiZWKys7Y29uc3QgQj14LmFsbG9jKFYpO3JldHVybiBJLmNvcHkoQiksMD09PUkubGVuZ3RoJiYoQlswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpfWlmKEk8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEkpO2lmKEk8MjU2KXJldHVybiB0aGlz'@;
put 'Ll9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLEldKTtsZXQgRT0xO2ZvcihsZXQgVj1JO1Y+PTI1NjtWPj49OClFKys7Y29uc3Qgaj1uZXcgQXJyYXkoRSk7Zm9yKGxldCBWPWoubGVuZ3RoLTE7Vj49MDtWLS0paltWXT0yNTUmSSxJPj49ODtyZXR1cm4gMTI4JmpbMF0mJmoudW5zaGlmdCgwKSx0'@;
put 'aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHguZnJvbShqKSl9LE8ucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEkpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEk/MjU1OjApfSxPLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEksayl7cmV0dXJuImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIEkmJihJPUkoaykpLEkuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LE8ucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihJLGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGU7bGV0IFY7aWYobnVsbD09PWouZGVmYXVsdClyZXR1cm4hMTtjb25zdCBCPUkuam9pbigpO2lm'@;
put 'KHZvaWQgMD09PWouZGVmYXVsdEJ1ZmZlciYmKGouZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShqLmRlZmF1bHQsayxFKS5qb2luKCkpLEIubGVuZ3RoIT09ai5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoVj0wO1Y8Qi5sZW5ndGg7VisrKWlmKEJbVl0hPT1qLmRl'@;
put 'ZmF1bHRCdWZmZXJbVl0pcmV0dXJuITE7cmV0dXJuITB9fSwyMzY5MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9SWU7YWUuZGVyPUYoNjkxMzMpLGFlLnBlbT1GKDc5MDApfSw3OTAwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KSx4PUYoNjkx'@;
put 'MzMpO2Z1bmN0aW9uIG0obGUpe3guY2FsbCh0aGlzLGxlKSx0aGlzLmVuYz0icGVtIn1hZShtLHgpLGF0LmV4cG9ydHM9bSxtLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oTSxPKXtjb25zdCB6PXgucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsTSkudG9TdHJpbmcoImJhc2U2NCIpLEs9'@;
put 'WyItLS0tLUJFR0lOICIrTy5sYWJlbCsiLS0tLS0iXTtmb3IobGV0IEk9MDtJPHoubGVuZ3RoO0krPTY0KUsucHVzaCh6LnNsaWNlKEksSSs2NCkpO3JldHVybiBLLnB1c2goIi0tLS0tRU5EICIrTy5sYWJlbCsiLS0tLS0iKSxLLmpvaW4oIlxuIil9fSw1MDQ3OmZ1bmN0aW9uKGF0LEllLEYp'@;
put 'eyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShHLGIpe2lmKCFHKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcsYil7Ry5zdXBlcl89Yjt2YXIgRD1mdW5jdGlvbigpe307RC5wcm90b3R5cGU9Yi5wcm90b3R5cGUsRy5w'@;
put 'cm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlvbiBNKEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigoImxlIj09PWJ8fCJi'@;
put 'ZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9pbml0KEd8fDAsYnx8MTAsRHx8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8'@;
put 'InUiP3dpbmRvdy5CdWZmZXI6Rig4MDk1MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1mdW5jdGlvbiB6KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0'@;
put 'dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9Uz49NDk/Uy00OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0'@;
put 'dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8bnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYmYi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJu'@;
put 'IGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihiLEQsSCk7aWYoIm9iamVjdCI9PXR5cGVv'@;
put 'ZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9MTYpLG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE4rKyx0aGlzLm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgm'@;
put 'JigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2UoYixELE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihiLEQsSCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0x'@;
put 'LGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVuZ3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShiPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMu'@;
put 'd29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oYixELEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBi'@;
put 'Lmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMu'@;
put 'd29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xLGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+'@;
put 'PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048Yi5sZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYm'@;
put 'JihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxl'@;
put 'bmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxz'@;
put 'ZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VC'@;
put 'YXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTj0wLGc9MTtnPD02NzEwODg2MztnKj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgubWluKEMsQy1TKStILHA9MCx3PUg7dzx2O3crPU4pcD1L'@;
put 'KGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxTO3crKylKKj1EO3RoaXMuaW11bG4oSiksdGhpcy53b3Jk'@;
put 'c1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyliLndvcmRzW0RdPXRo'@;
put 'aXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoYiksYn0sTS5wcm90b3R5cGUuX2V4cGFuZD1m'@;
put 'dW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0t'@;
put 'O3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0'@;
put 'aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgST1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxrPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcs'@;
put 'Nyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUz'@;
put 'NiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQz'@;
put 'NTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndvcmRzWzBdLGc9MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82'@;
put 'NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0aCsxKTtkZTw9bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29y'@;
put 'ZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFy'@;
put 'IEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtmb3IodmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIx'@;
put 'NSl8fEMhPT10aGlzLmxlbmd0aC0xP0lbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihi'@;
put 'PT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBKPXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUouaWRpdm4odykpLmlzWmVybygpP25lK0g6SVtwLW5lLmxl'@;
put 'bmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1'@;
put 'bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5n'@;
put 'dGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlv'@;
put 'bihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShPLGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7'@;
put 'dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3'@;
put 'IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3BdPTA7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFu'@;
put 'ZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1iLEg9MDtyZXR1cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49'@;
put 'MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49MiYmKEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixIPTA7cmV0dXJuIDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMp'@;
put 'LDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYq'@;
put 'KHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJy'@;
put 'ZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYikuaWFk'@;
put 'ZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3RoaXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5u'@;
put 'ZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24o'@;
put 'Yil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihiKTpiLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3Rv'@;
put 'dHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRoaXMubGVuZ3RoPmIubGVuZ3RoP2I6dGhpcztmb3IodmFy'@;
put 'IEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mYi53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRp'@;
put 'dmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0'@;
put 'aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1iLEg9dGhpcyk7Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtO'@;
put 'KyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9PUQpZm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihiKTpiLmNsb25lKCkuaXhvcih0aGlzKX0sTS5wcm90b3R5'@;
put 'cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPTB8TWF0aC5j'@;
put 'ZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZhciBOPTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlzLndvcmRzW05dJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0'@;
put 'cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1iLzI2fDAsTj1iJTI2O3JldHVybiB0aGlzLl9leHBhbmQo'@;
put 'SCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNbSF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5u'@;
put 'ZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxl'@;
put 'bmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9RD4+PjI2O2Zvcig7MCE9PWcmJkM8SC5sZW5ndGg7Qysr'@;
put 'KXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlz'@;
put 'LndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1YihiKSxiLm5lZ2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0'@;
put 'aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIp'@;
put 'e2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIpO3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5f'@;
put 'bm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKylDPShE'@;
put 'PSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZO'@;
put 'IT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixELEgpe3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndvcmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5bMV0seGU9ODE5MSZmZSxMZT1mZT4+PjEzLEZlPTB8Tlsy'@;
put 'XSxPZT04MTkxJkZlLGplPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxKZT0wfE5bNF0sbHQ9ODE5MSZKZSxQZT1KZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhlPTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9'@;
put 'ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxpdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49MHxnWzJdLEhuPTgxOTEm'@;
put 'JG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsbW49MHxnWzVdLHJ0PTgxOTEmbW4sSXQ9bW4+Pj4xMyxKdD0wfGdbNl0sRHQ9ODE5MSZKdCxwdD1KdD4+PjEzLFl0PTB8Z1s3XSxJbj04MTkxJll0LHp0'@;
put 'PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdbOV0sUm49ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBQbj0oUysodj1NYXRoLmltdWwobmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9'@;
put 'TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMpfDApKyhQbj4+PjI2KXwwLFBuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1NYXRoLmltdWwoeGUsVXQpKStNYXRoLmltdWwoTGUsQ24p'@;
put 'fDAsdz1NYXRoLmltdWwoTGUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChuZSxXbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZW4pfDApKyhwPj4+MTMpfDApKyhu'@;
put 'aT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1NYXRoLmltdWwoT2UsVXQpKStNYXRoLmltdWwoamUsQ24pfDAsdz1NYXRoLmltdWwoamUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKExl'@;
put 'LFduKXwwLHc9dytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0aC5pbXVsKG5lLEhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxIbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxmdCl8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxwPShwPU1hdGguaW11bChLZSxVdCkpK01hdGguaW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRo'@;
put 'LmltdWwoamUsV24pfDAsdz13K01hdGguaW11bChqZSxlbil8MCx2PXYrTWF0aC5pbXVsKHhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChMZSxIbil8MCx3PXcrTWF0aC5pbXVsKExlLGZ0KXwwO3ZhciBqbj0oUysodj12K01hdGguaW11bChuZSxobil8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwoZGUsaG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2PU1hdGguaW11bChsdCxDbikscD0ocD1NYXRoLmltdWwo'@;
put 'bHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9ditNYXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUsZW4pfDAsdj12K01hdGguaW11bChPZSxIbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsdz13K01hdGguaW11bChqZSxmdCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8MCx3PXcrTWF0aC5pbXVsKExlLHd0KXwwO3ZhciBxcj0o'@;
put 'Uysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUsX3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGgu'@;
put 'aW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUsQ24pfDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditNYXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVsKFBlLFduKXwwLHc9dytNYXRoLmltdWwoUGUsZW4pfDAs'@;
put 'dj12K01hdGguaW11bChLZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsSG4pfDAsdz13K01hdGguaW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCx3PXcr'@;
put 'TWF0aC5pbXVsKGplLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLHc9dytNYXRoLmltdWwoTGUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN'@;
put 'YXRoLmltdWwobmUsSXQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxJdCl8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxwPShwPU1hdGguaW11bChYZSxVdCkpK01hdGguaW11bChV'@;
put 'ZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStNYXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVsKGx0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZnQp'@;
put 'fDApK01hdGguaW11bChQZSxIbil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditNYXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUsd3QpfDAsdj12K01hdGguaW11bChPZSxfdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoamUsX3QpfDAsdz13K01hdGguaW11bChqZSxOdCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsSXQpfDApK01hdGguaW11bChMZSxydCl8MCx3PXcrTWF0aC5pbXVsKExlLEl0KXwwO3ZhciB4cj0o'@;
put 'Uysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUsRHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGgu'@;
put 'aW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUsQ24pfDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditNYXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVsKFVlLFduKXwwLHc9dytNYXRoLmltdWwoVWUsZW4pfDAs'@;
put 'dj12K01hdGguaW11bChBZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwoVGUsSG4pfDAsdz13K01hdGguaW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11bChQZSxobil8MCx3PXcr'@;
put 'TWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEl0KXwwKStNYXRo'@;
put 'LmltdWwoamUscnQpfDAsdz13K01hdGguaW11bChqZSxJdCl8MCx2PXYrTWF0aC5pbXVsKHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCx3PXcrTWF0aC5pbXVsKExlLHB0KXwwO3ZhciBVaT0oUysodj12K01hdGguaW11bChuZSxJbil8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoZGUsSW4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChpdCxDbikscD0ocD1NYXRoLmltdWwo'@;
put 'aXQsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9ditNYXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUsZW4pfDAsdj12K01hdGguaW11bChYZSxIbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsdz13K01hdGguaW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCx3PXcrTWF0aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRo'@;
put 'LmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUsTnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsdz13K01hdGguaW11'@;
put 'bChZZSxJdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCx3PXcrTWF0aC5pbXVsKGplLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsSW4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExl'@;
put 'LEluKXwwLHc9dytNYXRoLmltdWwoTGUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0aC5pbXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxzbil8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxwPShwPU1hdGguaW11bChIdCxVdCkpK01hdGguaW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChpdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRo'@;
put 'LmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVsKE1lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9ditNYXRoLmltdWwoWGUsaG4pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwoVWUsd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01hdGguaW11bChUZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0'@;
put 'LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxydCl8MCx3PXcrTWF0aC5pbXVsKFBlLEl0KXwwLHY9ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLHc9dytNYXRoLmltdWwoWWUscHQp'@;
put 'fDAsdj12K01hdGguaW11bChPZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoamUsSW4pfDAsdz13K01hdGguaW11bChqZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bChMZSx4bil8MCx3'@;
put 'PXcrTWF0aC5pbXVsKExlLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChuZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsJHQpfDApKyhwPj4+MTMpfDApKyhu'@;
put 'bz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwoaXQsSG4pfDAscD0ocD1wK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKHV0'@;
put 'LEhuKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5pbXVsKFhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUs'@;
put 'TnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1wK01hdGguaW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwoVGUsSXQpfDAsdj12K01hdGguaW11bChsdCxEdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13K01hdGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxJbil8MCx3PXcrTWF0aC5pbXVsKFllLHp0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKGplLHhuKXwwLHc9dytNYXRoLmltdWwoamUsc24pfDA7dmFyIEhyPShTKyh2PXYrTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGgu'@;
put 'aW11bChMZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChMZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEhuKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01hdGguaW11bChQdCxIbil8MCx3PU1hdGguaW11bChQdCxm'@;
put 'dCksdj12K01hdGguaW11bChpdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHd0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsdz13K01hdGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0ocD1wK01hdGguaW11bChYZSxJdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsSXQpfDAsdj12K01hdGguaW11bChBZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHB0KXwwKStN'@;
put 'YXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0aC5pbXVsKGx0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxJbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXwwLHY9ditNYXRoLmltdWwoS2UseG4pfDAscD0ocD1wK01h'@;
put 'dGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmltdWwoWWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVsKE9lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8MCkpPDwxMyl8MDtTPSgo'@;
put 'dz13K01hdGguaW11bChqZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhuKSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11bChQdCx3dCksdj12K01hdGguaW11bChpdCxfdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKGl0LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13K01hdGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsSXQpfDApK01hdGguaW11bChEZSxydCl8MCx3PXcrTWF0aC5pbXVsKERlLEl0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwoVWUscHQpfDAsdj12K01hdGguaW11bChBZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsSW4pfDAsdz13K01hdGgu'@;
put 'aW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChLZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1NYXRoLmltdWwoSHQsTnQpKStNYXRoLmltdWwoUHQsX3Qp'@;
put 'fDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwoaXQscnQpfDAscD0ocD1wK01hdGguaW11bChpdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsSXQpfDAsdj12K01hdGguaW11bChNZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLHB0KXwwKStN'@;
put 'YXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0aC5pbXVsKFhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxJbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXwwLHY9ditNYXRoLmltdWwoQWUseG4pfDAscD0ocD1wK01h'@;
put 'dGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVsKGx0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8MCkpPDwxMyl8MDtTPSgo'@;
put 'dz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShwPU1hdGguaW11bChIdCxJdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11bChQdCxJdCksdj12K01hdGguaW11bChpdCxEdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKGl0LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13K01hdGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxJbil8MCx3PXcrTWF0aC5pbXVsKERlLHp0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwoVWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsJHQpfDApK01hdGgu'@;
put 'aW11bChUZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01hdGguaW11bChQdCxEdCl8MCx3PU1hdGguaW11bChQdCxw'@;
put 'dCksdj12K01hdGguaW11bChpdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwodXQsSW4pfDAsdz13K01hdGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCx3'@;
put 'PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChYZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhp'@;
put 'bz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxJbikscD0ocD1NYXRoLmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQsSW4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwoaXQseG4pfDAscD0ocD1wK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKHV0'@;
put 'LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0aC5pbXVsKE1lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChEZSwkdCl8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxwPShwPU1hdGguaW11bChIdCxzbikpK01hdGguaW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5pbXVsKGl0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN'@;
put 'YXRoLmltdWwoaXQsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmltdWwoSHQsUm4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5p'@;
put 'bXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LFJuKXwwKSk8PDEzKXwwO3JldHVybiBTPSgodz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1QbixDWzFdPW5pLENbMl09bG4sQ1szXT1qbixDWzRdPXFyLENbNV09Z2ksQ1s2XT14cixD'@;
put 'WzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1IcixDWzExXT1xaSxDWzEyXT1KaSxDWzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gWChHLGIsRCl7cmV0dXJuKG5ldyBV'@;
put 'KS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9TWF0aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0'@;
put 'aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAsZz0wO2c8RC5sZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0w'@;
put 'O2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4NjMmZGU7Uz02NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0o'@;
put 'Qz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEwODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIsRCk6WCh0aGlzLGIsRCksSH0sVS5wcm90b3R5cGUubWFr'@;
put 'ZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oYixELEgpe2lmKDA9PT1ifHxiPT09'@;
put 'SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxELWctMSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylOW1NdPURbYltTXV0sZ1tTXT1IW2JbU11dfSxVLnByb3Rv'@;
put 'dHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0ZShDLGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5zaW4oMipNYXRoLlBJL3YpLEo9MDtKPGc7Sis9dilmb3Io'@;
put 'dmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sTGU9TltKK2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2ZlK1NdLGplPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPWplKSxOW0orZmVdPUxlK09lLEhbSitmZStTXT14ZS1GZSxOW0or'@;
put 'ZmUrU109TGUtT2UsZmUhPT12JiYoamU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxuZT1qZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzEr'@;
put 'Tn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8PTEpKWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFyIGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFdLERbSC1OLTFdPS1nfX0sVS5wcm90b3R5cGUubm9ybWFs'@;
put 'aXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7dmFyIGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFdL0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90'@;
put 'b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxiW0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytDKUhbQ109MDttKDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9'@;
put 'LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJuIER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYihiLmxlbmd0aCxELmxlbmd0aCksZz10aGlz'@;
put 'Lm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcgQXJyYXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcgQXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKGIud29yZHMs'@;
put 'Yi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3LE4pLHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixnKSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKyspe3ZhciB4ZT12W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07'@;
put 'cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFsaXplMTNiKGRlLE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2'@;
put 'ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksdGhpcy5tdWxUbyhiLEQpfSxNLnBy'@;
put 'b3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMp'@;
put 'fSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0oNjcxMDg4NjMmTikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixE'@;
put 'Kz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMmZ31yZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hdPUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGIpfSxNLnBy'@;
put 'b3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiKXt2YXIgRD1mdW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1u'@;
put 'ZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1EJTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBIPXRoaXMsTj0wO048RC5sZW5ndGgmJjA9'@;
put 'PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9SC5zcXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBi'@;
put 'JiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jkc1tnXT0oMHx0aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1T'@;
put 'Pj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlzLndvcmRzW2ddPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJu'@;
put 'IHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQt'@;
put 'RCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5sZW5ndGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0'@;
put 'aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB3PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtw'@;
put 'Pj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3RoaXMud29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0'@;
put 'aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYil9LE0ucHJv'@;
put 'dG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxEKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlv'@;
put 'bihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09RCYmSCsrLHRoaXMubGVu'@;
put 'Z3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiKX0s'@;
put 'TS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGI/KHRoaXMud29yZHNbMF09Yi0o'@;
put 'MHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGIpe3RoaXMud29yZHNbMF0rPWI7Zm9yKHZhciBE'@;
put 'PTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMud29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxE'@;
put 'KzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRo'@;
put 'aXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7'@;
put 'RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRo'@;
put 'aXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlv'@;
put 'bihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEwODg2MyZ2KT4+MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMu'@;
put 'd29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylTPShDPSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG0oLTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5s'@;
put 'ZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmNsb25lKCksZz1iLEM9'@;
put 'MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhDKSkmJihnPWcudXNobG4oSCksTi5pdXNobG4oSCksQz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYoIm1vZCIhPT1EKXsocD1uZXcgTShudWxsKSkubGVuZ3Ro'@;
put 'PXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBKPU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAmJihwLndvcmRzW3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtu'@;
put 'ZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0pKygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0pO2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUsbmUpOzAhPT1OLm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRp'@;
put 'dmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJldHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJuKEgpLHtkaXY6cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90'@;
put 'eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLEQpLCJtb2QiIT09RCYmKE49'@;
put 'Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1vZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGIubmVnKCksRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5u'@;
put 'ZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygpLEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1YihiKSkse2RpdjpDLmRpdixtb2Q6Z30pOmIubGVuZ3Ro'@;
put 'PnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9'@;
put 'OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIsRCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsImRpdiIsITEpLmRpdn0sTS5wcm90b3R5'@;
put 'cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5k'@;
put 'aXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1ELmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzwwfHwxPT09ZyYmMD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5l'@;
put 'Z2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlIPShEKkgrKDB8dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJu'@;
put 'IEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRzW0hdPU4vYnwwLEQ9TiVifXJldHVybiB0aGlzLnN0cmlw'@;
put 'KCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/'@;
put 'RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3IodmFyIHA9SC5jbG9uZSgpLHc9RC5jbG9uZSgpOyFELmlz'@;
put 'WmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2OysrSixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNocm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1Yih3KSksTi5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9y'@;
put 'KHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8PTEpO2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtkZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSksQy5pdXNocm4oMSksUy5pdXNocm4oMSk7RC5jbXAoSCk+'@;
put 'PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMsYjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2'@;
put 'YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgUz0wLHY9MTshKEQud29yZHNbMF0mdikmJlM8'@;
put 'MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5pc09kZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+MClmb3IoSC5pdXNocm4ocCk7cC0tID4wOylnLmlzT2Rk'@;
put 'KCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIoTikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxKfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYo'@;
put 'dGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7TisrKUQuaXVzaHJu'@;
put 'KDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09PWd8fDA9PT1ILmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgp'@;
put 'fXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChiKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlv'@;
put 'bigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29yZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpO3ZhciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8'@;
put 'PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107Zz0oUys9Zyk+Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3'@;
put 'MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihiKXt2YXIg'@;
put 'SCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE49'@;
put 'MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYw'@;
put 'IT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1'@;
put 'cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPTB8dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09'@;
put 'PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIp'@;
put 'Pj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKTw9MH0sTS5w'@;
put 'cm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0sTS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wKGIpfSxNLnJlZD1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIp'@;
put 'LGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9'@;
put 'LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJl'@;
put 'ZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQs'@;
put 'InJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhp'@;
put 'cyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJl'@;
put 'ZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5'@;
put 'Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMs'@;
put 'Yil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtz'@;
put 'IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl'@;
put 'ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlz'@;
put 'KX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkJiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxw'@;
put 'MjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7'@;
put 'ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhlKCl7ZWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZm'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhpcy5wcmltZT1ifWVsc2UgbShHLmd0bigxKSwibW9kdWx1'@;
put 'cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhp'@;
put 'cy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5t'@;
put 'aW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxifSxlZS5wcm90b3R5cGUuaXJlZHVj'@;
put 'ZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1wKSxIPShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/LTE6RC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1OPyhE'@;
put 'LndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5uLDAsRCl9LGVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNbZ109Yi53b3Jkc1tnXTtpZihELmxlbmd0aD1OLGIubGVu'@;
put 'Z3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIgQz1iLndvcmRzWzldO2ZvcihELndvcmRzW0QubGVuZ3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53b3Jkc1tnLTEwXT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIu'@;
put 'd29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEwPzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxlbmd0aCs9Mjtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0'@;
put 'aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihEKz05NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDApfXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxl'@;
put 'KG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+Pj49MjYsYi53b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9'@;
put 'PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIpe2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxzZSBpZigicDE5MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYo'@;
put 'InAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2IpO0Q9bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJl'@;
put 'ZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQmJmIucmVkPT09RC5yZWQsInJlZCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9'@;
put 'ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIoYikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlz'@;
put 'dWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9u'@;
put 'KGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1'@;
put 'cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIo'@;
put 'YixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW11bChiLGIuY2xvbmUoKSl9'@;
put 'LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIsYil9LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4oMyk7aWYobShEJTI9PTEpLDM9PT1EKXt2YXIgSD10aGlz'@;
put 'Lm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9yKHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDshTi5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVybygpKTt2YXIgQz1uZXcgTSgxKS50b1JlZCh0aGlzKSxT'@;
put 'PUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zvcih2YXIgdz10aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3co'@;
put 'YixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5lLmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIExlPXRoaXMucG93KHcsbmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEp'@;
put 'KTtKPUoucmVkTXVsKExlKSx3PUxlLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxkZT14ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVnYXRpdmU/KEQubmVnYXRpdmU9MCx0aGlzLmltb2QoRCku'@;
put 'cmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiLEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgTj1uZXcgQXJyYXkoMTYpO05bMF09bmV3IE0oMSku'@;
put 'dG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5bMF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxlbmd0aC0xO2c+PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jk'@;
put 'c1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9dGhpcy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSksdj0wLFM9MCkpOnY9MH1wPTI2fXJldHVybiBDfSx1ZS5w'@;
put 'cm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlzLm0pO3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0sdWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuaW1vZChiLm11'@;
put 'bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9Yi5pbXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5t'@;
put 'dWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQo'@;
put 'dGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0'@;
put 'KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLmludm09ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSwzNjA3MjooYXQsSWUpPT57IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Zvcih2YXIgRj0iQUJDREVGR0hJSktMTU5PUFFSU1RV'@;
put 'VldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsYWU9bmV3IFVpbnQ4QXJyYXkoMjU2KSx4PTA7eDw2NDt4KyspYWVbRi5jaGFyQ29kZUF0KHgpXT14O0llLmM9ZnVuY3Rpb24obSl7dmFyIE0sbGU9bmV3IFVpbnQ4QXJyYXkobSksTz1sZS5sZW5ndGgsUj0iIjtm'@;
put 'b3IoTT0wO008TztNKz0zKVIrPUZbbGVbTV0+PjJdLFIrPUZbKDMmbGVbTV0pPDw0fGxlW00rMV0+PjRdLFIrPUZbKDE1JmxlW00rMV0pPDwyfGxlW00rMl0+PjZdLFIrPUZbNjMmbGVbTSsyXV07cmV0dXJuIE8lMz09Mj9SPVIuc3Vic3RyaW5nKDAsUi5sZW5ndGgtMSkrIj0iOk8lMz09MSYm'@;
put 'KFI9Ui5zdWJzdHJpbmcoMCxSLmxlbmd0aC0yKSsiPT0iKSxSfSxJZS5KPWZ1bmN0aW9uKG0pe3ZhciBPLHosSyxJLGssbGU9Ljc1Km0ubGVuZ3RoLE09bS5sZW5ndGgsUj0wOyI9Ij09PW1bbS5sZW5ndGgtMV0mJihsZS0tLCI9Ij09PW1bbS5sZW5ndGgtMl0mJmxlLS0pO3ZhciBFPW5ldyBB'@;
put 'cnJheUJ1ZmZlcihsZSksaj1uZXcgVWludDhBcnJheShFKTtmb3IoTz0wO088TTtPKz00KXo9YWVbbS5jaGFyQ29kZUF0KE8pXSxLPWFlW20uY2hhckNvZGVBdChPKzEpXSxJPWFlW20uY2hhckNvZGVBdChPKzIpXSxrPWFlW20uY2hhckNvZGVBdChPKzMpXSxqW1IrK109ejw8MnxLPj40LGpb'@;
put 'UisrXT0oMTUmSyk8PDR8ST4+MixqW1IrK109KDMmSSk8PDZ8NjMmaztyZXR1cm4gRX19KCl9LDk5MTk6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0IjtJZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uIFIoail7dmFyIFY9TyhqKSxZPVZbMV07cmV0dXJuIDMqKFZbMF0rWSkvNC1ZfSxJZS50b0J5dGVBcnJh'@;
put 'eT1mdW5jdGlvbiBLKGope3ZhciBWLHRlLEI9TyhqKSxZPUJbMF0sWD1CWzFdLFU9bmV3IHgoZnVuY3Rpb24geihqLFYsQil7cmV0dXJuIDMqKFYrQikvNC1CfSgwLFksWCkpLHE9MCxlZT1YPjA/WS00Olk7Zm9yKHRlPTA7dGU8ZWU7dGUrPTQpVj1hZVtqLmNoYXJDb2RlQXQodGUpXTw8MTh8'@;
put 'YWVbai5jaGFyQ29kZUF0KHRlKzEpXTw8MTJ8YWVbai5jaGFyQ29kZUF0KHRlKzIpXTw8NnxhZVtqLmNoYXJDb2RlQXQodGUrMyldLFVbcSsrXT1WPj4xNiYyNTUsVVtxKytdPVY+PjgmMjU1LFVbcSsrXT0yNTUmVjtyZXR1cm4gMj09PVgmJihWPWFlW2ouY2hhckNvZGVBdCh0ZSldPDwyfGFl'@;
put 'W2ouY2hhckNvZGVBdCh0ZSsxKV0+PjQsVVtxKytdPTI1NSZWKSwxPT09WCYmKFY9YWVbai5jaGFyQ29kZUF0KHRlKV08PDEwfGFlW2ouY2hhckNvZGVBdCh0ZSsxKV08PDR8YWVbai5jaGFyQ29kZUF0KHRlKzIpXT4+MixVW3ErK109Vj4+OCYyNTUsVVtxKytdPTI1NSZWKSxVfSxJZS5mcm9t'@;
put 'Qnl0ZUFycmF5PWZ1bmN0aW9uIEUoail7Zm9yKHZhciBWLEI9ai5sZW5ndGgsWT1CJTMsWD1bXSxVPTE2MzgzLHE9MCxlZT1CLVk7cTxlZTtxKz1VKVgucHVzaChrKGoscSxxK1U+ZWU/ZWU6cStVKSk7cmV0dXJuIDE9PT1ZP1gucHVzaChGWyhWPWpbQi0xXSk+PjJdK0ZbVjw8NCY2M10rIj09'@;
put 'Iik6Mj09PVkmJlgucHVzaChGWyhWPShqW0ItMl08PDgpK2pbQi0xXSk+PjEwXStGW1Y+PjQmNjNdK0ZbVjw8MiY2M10rIj0iKSxYLmpvaW4oIiIpfTtmb3IodmFyIEY9W10sYWU9W10seD10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxtPSJBQkNERUZHSElKS0xNTk9Q'@;
put 'UVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixsZT0wO2xlPDY0OysrbGUpRltsZV09bVtsZV0sYWVbbS5jaGFyQ29kZUF0KGxlKV09bGU7ZnVuY3Rpb24gTyhqKXt2YXIgVj1qLmxlbmd0aDtpZihWJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQg'@;
put 'c3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgQj1qLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PUImJihCPVYpLFtCLEI9PT1WPzA6NC1CJTRdfWZ1bmN0aW9uIEkoail7cmV0dXJuIEZbaj4+MTgmNjNdK0Zbaj4+MTImNjNdK0Zbaj4+NiY2M10rRls2MyZqXX1m'@;
put 'dW5jdGlvbiBrKGosVixCKXtmb3IodmFyIFg9W10sVT1WO1U8QjtVKz0zKVgucHVzaChJKChqW1VdPDwxNiYxNjcxMTY4MCkrKGpbVSsxXTw8OCY2NTI4MCkrKDI1NSZqW1UrMl0pKSk7cmV0dXJuIFguam9pbigiIil9YWVbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGFlWyJfIi5jaGFyQ29kZUF0'@;
put 'KDApXT02M30sNjI2NjI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEgsTil7aWYoIUgpdGhyb3cgbmV3IEVycm9yKE58fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoSCxOKXtILnN1cGVyXz1OO3ZhciBnPWZ1bmN0aW9u'@;
put 'KCl7fTtnLnByb3RvdHlwZT1OLnByb3RvdHlwZSxILnByb3RvdHlwZT1uZXcgZyxILnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1IfWZ1bmN0aW9uIE0oSCxOLGcpe2lmKE0uaXNCTihIKSlyZXR1cm4gSDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5y'@;
put 'ZWQ9bnVsbCxudWxsIT09SCYmKCgibGUiPT09Tnx8ImJlIj09PU4pJiYoZz1OLE49MTApLHRoaXMuX2luaXQoSHx8MCxOfHwxMCxnfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3'@;
put 'aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDQ2NjAxKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoSCxOKXt2YXIgZz1ILmNoYXJDb2RlQXQoTik7cmV0dXJuIGc+PTQ4JiZnPD01Nz9nLTQ4Omc+PTY1JiZnPD03MD9nLTU1Omc+PTk3JiZnPD0x'@;
put 'MDI/Zy04Nzp2b2lkIG0oITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIrSCl9ZnVuY3Rpb24geihILE4sZyl7dmFyIEM9UihILGcpO3JldHVybiBnLTE+PU4mJihDfD1SKEgsZy0xKTw8NCksQ31mdW5jdGlvbiBLKEgsTixnLEMpe2Zvcih2YXIgUz0wLHY9MCxwPU1hdGgubWluKEgubGVuZ3Ro'@;
put 'LGcpLHc9Tjt3PHA7dysrKXt2YXIgSj1ILmNoYXJDb2RlQXQodyktNDg7Uyo9Qyx2PUo+PTQ5P0otNDkrMTA6Sj49MTc/Si0xNysxMDpKLG0oSj49MCYmdjxDLCJJbnZhbGlkIGNoYXJhY3RlciIpLFMrPXZ9cmV0dXJuIFN9ZnVuY3Rpb24gSShILE4pe0gud29yZHM9Ti53b3JkcyxILmxlbmd0'@;
put 'aD1OLmxlbmd0aCxILm5lZ2F0aXZlPU4ubmVnYXRpdmUsSC5yZWQ9Ti5yZWR9aWYoTS5pc0JOPWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgTXx8bnVsbCE9PU4mJiJvYmplY3QiPT10eXBlb2YgTiYmTi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5Lmlz'@;
put 'QXJyYXkoTi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKE4sZyl7cmV0dXJuIE4uY21wKGcpPjA/TjpnfSxNLm1pbj1mdW5jdGlvbihOLGcpe3JldHVybiBOLmNtcChnKTwwP046Z30sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTixnLEMpe2lmKCJudW1iZXIiPT10eXBlb2YgTilyZXR1cm4g'@;
put 'dGhpcy5faW5pdE51bWJlcihOLGcsQyk7aWYoIm9iamVjdCI9PXR5cGVvZiBOKXJldHVybiB0aGlzLl9pbml0QXJyYXkoTixnLEMpOyJoZXgiPT09ZyYmKGc9MTYpLG0oZz09PSgwfGcpJiZnPj0yJiZnPD0zNik7dmFyIFM9MDsiLSI9PT0oTj1OLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2cs'@;
put 'IiIpKVswXSYmKFMrKyx0aGlzLm5lZ2F0aXZlPTEpLFM8Ti5sZW5ndGgmJigxNj09PWc/dGhpcy5fcGFyc2VIZXgoTixTLEMpOih0aGlzLl9wYXJzZUJhc2UoTixnLFMpLCJsZSI9PT1DJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZyxDKSkpfSxNLnByb3RvdHlwZS5faW5pdE51'@;
put 'bWJlcj1mdW5jdGlvbihOLGcsQyl7TjwwJiYodGhpcy5uZWdhdGl2ZT0xLE49LU4pLE48NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJk5dLHRoaXMubGVuZ3RoPTEpOk48NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmTixOLzY3MTA4ODY0JjY3MTA4ODYzXSx0'@;
put 'aGlzLmxlbmd0aD0yKToobShOPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJk4sTi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09QyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGcsQyl9LE0ucHJvdG90eXBlLl9pbml0QXJy'@;
put 'YXk9ZnVuY3Rpb24oTixnLEMpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBOLmxlbmd0aCksTi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoTi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5s'@;
put 'ZW5ndGgpO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109MDt2YXIgdixwLHc9MDtpZigiYmUiPT09Qylmb3IoUz1OLmxlbmd0aC0xLHY9MDtTPj0wO1MtPTMpdGhpcy53b3Jkc1t2XXw9KHA9TltTXXxOW1MtMV08PDh8TltTLTJdPDwxNik8PHcmNjcxMDg4NjMs'@;
put 'dGhpcy53b3Jkc1t2KzFdPXA+Pj4yNi13JjY3MTA4ODYzLCh3Kz0yNCk+PTI2JiYody09MjYsdisrKTtlbHNlIGlmKCJsZSI9PT1DKWZvcihTPTAsdj0wO1M8Ti5sZW5ndGg7Uys9Myl0aGlzLndvcmRzW3ZdfD0ocD1OW1NdfE5bUysxXTw8OHxOW1MrMl08PDE2KTw8dyY2NzEwODg2Myx0aGlz'@;
put 'LndvcmRzW3YrMV09cD4+PjI2LXcmNjcxMDg4NjMsKHcrPTI0KT49MjYmJih3LT0yNix2KyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oTixnLEMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoTi5sZW5ndGgtZykvNiksdGhpcy53b3Jkcz1u'@;
put 'ZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109MDt2YXIgdyx2PTAscD0wO2lmKCJiZSI9PT1DKWZvcihTPU4ubGVuZ3RoLTE7Uz49ZztTLT0yKXc9eihOLGcsUyk8PHYsdGhpcy53b3Jkc1twXXw9NjcxMDg4NjMmdyx2Pj0x'@;
put 'OD8odi09MTgsdGhpcy53b3Jkc1twKz0xXXw9dz4+PjI2KTp2Kz04O2Vsc2UgZm9yKFM9KE4ubGVuZ3RoLWcpJTI9PTA/ZysxOmc7UzxOLmxlbmd0aDtTKz0yKXc9eihOLGcsUyk8PHYsdGhpcy53b3Jkc1twXXw9NjcxMDg4NjMmdyx2Pj0xOD8odi09MTgsdGhpcy53b3Jkc1twKz0xXXw9dz4+'@;
put 'PjI2KTp2Kz04O3RoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oTixnLEMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBTPTAsdj0xO3Y8PTY3MTA4ODYzO3YqPWcpUysrO1MtLSx2PXYvZ3wwO2Zvcih2YXIgcD1OLmxlbmd0aC1DLHc9'@;
put 'cCVTLEo9TWF0aC5taW4ocCxwLXcpK0MsbmU9MCxkZT1DO2RlPEo7ZGUrPVMpbmU9SyhOLGRlLGRlK1MsZyksdGhpcy5pbXVsbih2KSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKTtpZigwIT09dyl7dmFyIGZlPTE7Zm9yKG5lPUso'@;
put 'TixkZSxOLmxlbmd0aCxnKSxkZT0wO2RlPHc7ZGUrKylmZSo9Zzt0aGlzLmltdWxuKGZlKSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKX10aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKE4pe04ud29yZHM9'@;
put 'bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKylOLndvcmRzW2ddPXRoaXMud29yZHNbZ107Ti5sZW5ndGg9dGhpcy5sZW5ndGgsTi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLE4ucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlv'@;
put 'bihOKXtJKE4sdGhpcyl9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIE49bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShOKSxOfSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKE4pe2Zvcig7dGhpcy5sZW5ndGg8TjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0w'@;
put 'O3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdHlwZW9mIFN5bWJvbDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXtNLnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0'@;
put 'LmN1c3RvbSIpXT1rfWNhdGNoe00ucHJvdG90eXBlLmluc3BlY3Q9a31lbHNlIE0ucHJvdG90eXBlLmluc3BlY3Q9aztmdW5jdGlvbiBrKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIEU9WyIiLCIwIiwiMDAiLCIwMDAiLCIw'@;
put 'MDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw'@;
put 'IiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saj1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxWPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3'@;
put 'NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3'@;
put 'OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFgoSCxOLGcpe2cubmVnYXRpdmU9Ti5uZWdhdGl2ZV5ILm5lZ2F0aXZlO3Zh'@;
put 'ciBDPUgubGVuZ3RoK04ubGVuZ3RofDA7Zy5sZW5ndGg9QyxDPUMtMXwwO3ZhciBTPTB8SC53b3Jkc1swXSx2PTB8Ti53b3Jkc1swXSxwPVMqdixKPXAvNjcxMDg4NjR8MDtnLndvcmRzWzBdPTY3MTA4ODYzJnA7Zm9yKHZhciBuZT0xO25lPEM7bmUrKyl7Zm9yKHZhciBkZT1KPj4+MjYsZmU9'@;
put 'NjcxMDg4NjMmSix4ZT1NYXRoLm1pbihuZSxOLmxlbmd0aC0xKSxMZT1NYXRoLm1heCgwLG5lLUgubGVuZ3RoKzEpO0xlPD14ZTtMZSsrKWRlKz0ocD0oUz0wfEgud29yZHNbbmUtTGV8MF0pKih2PTB8Ti53b3Jkc1tMZV0pK2ZlKS82NzEwODg2NHwwLGZlPTY3MTA4ODYzJnA7Zy53b3Jkc1tu'@;
put 'ZV09MHxmZSxKPTB8ZGV9cmV0dXJuIDAhPT1KP2cud29yZHNbbmVdPTB8SjpnLmxlbmd0aC0tLGcuX3N0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oTixnKXt2YXIgQztpZihnPTB8Z3x8MSwxNj09PShOPU58fDEwKXx8ImhleCI9PT1OKXtDPSIiO2Zvcih2YXIgUz0wLHY9'@;
put 'MCxwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciB3PXRoaXMud29yZHNbcF0sSj0oMTY3NzcyMTUmKHc8PFN8dikpLnRvU3RyaW5nKDE2KTt2PXc+Pj4yNC1TJjE2Nzc3MjE1LChTKz0yKT49MjYmJihTLT0yNixwLS0pLEM9MCE9PXZ8fHAhPT10aGlzLmxlbmd0aC0xP0VbNi1KLmxlbmd0aF0r'@;
put 'SitDOkorQ31mb3IoMCE9PXYmJihDPXYudG9TdHJpbmcoMTYpK0MpO0MubGVuZ3RoJWchPTA7KUM9IjAiK0M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoQz0iLSIrQyksQ31pZihOPT09KDB8TikmJk4+PTImJk48PTM2KXt2YXIgbmU9altOXSxkZT1WW05dO0M9IiI7dmFyIGZlPXRoaXMu'@;
put 'Y2xvbmUoKTtmb3IoZmUubmVnYXRpdmU9MDshZmUuaXNaZXJvKCk7KXt2YXIgeGU9ZmUubW9kcm4oZGUpLnRvU3RyaW5nKE4pO0M9KGZlPWZlLmlkaXZuKGRlKSkuaXNaZXJvKCk/eGUrQzpFW25lLXhlLmxlbmd0aF0reGUrQ31mb3IodGhpcy5pc1plcm8oKSYmKEM9IjAiK0MpO0MubGVuZ3Ro'@;
put 'JWchPTA7KUM9IjAiK0M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoQz0iLSIrQyksQ31tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVu'@;
put 'Z3RoP04rPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9OKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1'@;
put 'MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LU46Tn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LE8mJihNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihOLGcpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKE8sTixnKX0pLE0u'@;
put 'cHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxOLGcpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihOLGcsQyl7dGhpcy5fc3RyaXAoKTt2YXIgUz10aGlzLmJ5dGVMZW5ndGgoKSx2PUN8fE1hdGgubWF4KDEsUyk7'@;
put 'bShTPD12LCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbSh2PjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBwPWZ1bmN0aW9uKE4sZyl7cmV0dXJuIE4uYWxsb2NVbnNhZmU/Ti5hbGxvY1Vuc2FmZShnKTpuZXcgTihnKX0oTix2KTtyZXR1cm4g'@;
put 'dGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PWc/IkxFIjoiQkUiKV0ocCxTKSxwfSxNLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihOLGcpe2Zvcih2YXIgQz0wLFM9MCx2PTAscD0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgdz10aGlzLndvcmRzW3ZdPDxwfFM7TltDKytd'@;
put 'PTI1NSZ3LEM8Ti5sZW5ndGgmJihOW0MrK109dz4+OCYyNTUpLEM8Ti5sZW5ndGgmJihOW0MrK109dz4+MTYmMjU1KSw2PT09cD8oQzxOLmxlbmd0aCYmKE5bQysrXT13Pj4yNCYyNTUpLFM9MCxwPTApOihTPXc+Pj4yNCxwKz0yKX1pZihDPE4ubGVuZ3RoKWZvcihOW0MrK109UztDPE4ubGVu'@;
put 'Z3RoOylOW0MrK109MH0sTS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oTixnKXtmb3IodmFyIEM9Ti5sZW5ndGgtMSxTPTAsdj0wLHA9MDt2PHRoaXMubGVuZ3RoO3YrKyl7dmFyIHc9dGhpcy53b3Jkc1t2XTw8cHxTO05bQy0tXT0yNTUmdyxDPj0wJiYoTltDLS1dPXc+Pjgm'@;
put 'MjU1KSxDPj0wJiYoTltDLS1dPXc+PjE2JjI1NSksNj09PXA/KEM+PTAmJihOW0MtLV09dz4+MjQmMjU1KSxTPTAscD0wKTooUz13Pj4+MjQscCs9Mil9aWYoQz49MClmb3IoTltDLS1dPVM7Qz49MDspTltDLS1dPTB9LE0ucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlv'@;
put 'bihOKXtyZXR1cm4gMzItTWF0aC5jbHozMihOKX06ZnVuY3Rpb24oTil7dmFyIGc9TixDPTA7cmV0dXJuIGc+PTQwOTYmJihDKz0xMyxnPj4+PTEzKSxnPj02NCYmKEMrPTcsZz4+Pj03KSxnPj04JiYoQys9NCxnPj4+PTQpLGc+PTImJihDKz0yLGc+Pj49MiksQytnfSxNLnByb3RvdHlwZS5f'@;
put 'emVyb0JpdHM9ZnVuY3Rpb24oTil7aWYoMD09PU4pcmV0dXJuIDI2O3ZhciBnPU4sQz0wO3JldHVybiA4MTkxJmd8fChDKz0xMyxnPj4+PTEzKSwxMjcmZ3x8KEMrPTcsZz4+Pj03KSwxNSZnfHwoQys9NCxnPj4+PTQpLDMmZ3x8KEMrPTIsZz4+Pj0yKSwxJmd8fEMrKyxDfSxNLnByb3RvdHlw'@;
put 'ZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStnfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZh'@;
put 'ciBOPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgQz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2ddKTtpZihOKz1DLDI2IT09QylicmVha31yZXR1cm4gTn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84'@;
put 'KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKE4pe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKE4pLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMudGVzdG4oTi0xKT90aGlzLm5v'@;
put 'dG4oTikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKE4pe2Zvcig7dGhpcy5sZW5ndGg8Ti5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGc9MDtnPE4ubGVuZ3RoO2cr'@;
put 'Kyl0aGlzLndvcmRzW2ddPXRoaXMud29yZHNbZ118Ti53b3Jkc1tnXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfE4ubmVnYXRpdmUpKSx0aGlzLml1b3IoTil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0'@;
put 'aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKE4pOk4uY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoTik6Ti5jbG9uZSgpLml1'@;
put 'b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKE4pe3ZhciBnO2c9dGhpcy5sZW5ndGg+Ti5sZW5ndGg/Tjp0aGlzO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXSZOLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1nLmxl'@;
put 'bmd0aCx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfE4ubmVnYXRpdmUpKSx0aGlzLml1YW5kKE4pfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMu'@;
put 'Y2xvbmUoKS5pYW5kKE4pOk4uY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoTik6Ti5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlv'@;
put 'bihOKXt2YXIgZyxDO3RoaXMubGVuZ3RoPk4ubGVuZ3RoPyhnPXRoaXMsQz1OKTooZz1OLEM9dGhpcyk7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1nLndvcmRzW1NdXkMud29yZHNbU107aWYodGhpcyE9PWcpZm9yKDtTPGcubGVuZ3RoO1MrKyl0aGlzLndvcmRz'@;
put 'W1NdPWcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPWcubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oTil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Ti5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoTil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlv'@;
put 'bihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoTik6Ti5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihOKTpOLmNsb25lKCku'@;
put 'aXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKE4pe20oIm51bWJlciI9PXR5cGVvZiBOJiZOPj0wKTt2YXIgZz0wfE1hdGguY2VpbChOLzI2KSxDPU4lMjY7dGhpcy5fZXhwYW5kKGcpLEM+MCYmZy0tO2Zvcih2YXIgUz0wO1M8ZztTKyspdGhpcy53b3Jkc1tTXT02NzEw'@;
put 'ODg2MyZ+dGhpcy53b3Jkc1tTXTtyZXR1cm4gQz4wJiYodGhpcy53b3Jkc1tTXT1+dGhpcy53b3Jkc1tTXSY2NzEwODg2Mz4+MjYtQyksdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKE4pfSxNLnByb3RvdHlwZS5z'@;
put 'ZXRuPWZ1bmN0aW9uKE4sZyl7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTApO3ZhciBDPU4vMjZ8MCxTPU4lMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChDKzEpLHRoaXMud29yZHNbQ109Zz90aGlzLndvcmRzW0NdfDE8PFM6dGhpcy53b3Jkc1tDXSZ+KDE8PFMpLHRoaXMuX3N0cmlwKCl9LE0u'@;
put 'cHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oTil7dmFyIGcsQyxTO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Ti5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGc9dGhpcy5pc3ViKE4pLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2'@;
put 'ZSYmMCE9PU4ubmVnYXRpdmUpcmV0dXJuIE4ubmVnYXRpdmU9MCxnPXRoaXMuaXN1YihOKSxOLm5lZ2F0aXZlPTEsZy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5OLmxlbmd0aD8oQz10aGlzLFM9Tik6KEM9TixTPXRoaXMpO2Zvcih2YXIgdj0wLHA9MDtwPFMubGVuZ3RoO3ArKyl0aGlzLndv'@;
put 'cmRzW3BdPTY3MTA4ODYzJihnPSgwfEMud29yZHNbcF0pKygwfFMud29yZHNbcF0pK3YpLHY9Zz4+PjI2O2Zvcig7MCE9PXYmJnA8Qy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09NjcxMDg4NjMmKGc9KDB8Qy53b3Jkc1twXSkrdiksdj1nPj4+MjY7aWYodGhpcy5sZW5ndGg9Qy5sZW5ndGgs'@;
put 'MCE9PXYpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09dix0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoQyE9PXRoaXMpZm9yKDtwPEMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPUMud29yZHNbcF07cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXt2YXIgZztyZXR1cm4gMCE9'@;
put 'PU4ubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhOLm5lZ2F0aXZlPTAsZz10aGlzLnN1YihOKSxOLm5lZ2F0aXZlXj0xLGcpOjA9PT1OLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGc9Ti5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGcpOnRoaXMu'@;
put 'bGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKE4pOk4uY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKE4pe2lmKDAhPT1OLm5lZ2F0aXZlKXtOLm5lZ2F0aXZlPTA7dmFyIGc9dGhpcy5pYWRkKE4pO3JldHVybiBOLm5lZ2F0aXZlPTEsZy5fbm9y'@;
put 'bVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChOKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgUyx2LEM9dGhpcy5jbXAoTik7aWYoMD09PUMpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0x'@;
put 'LHRoaXMud29yZHNbMF09MCx0aGlzO0M+MD8oUz10aGlzLHY9Tik6KFM9Tix2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKylwPShnPSgwfFMud29yZHNbd10pLSgwfHYud29yZHNbd10pK3ApPj4yNix0aGlzLndvcmRzW3ddPTY3MTA4ODYzJmc7Zm9yKDswIT09cCYmdzxT'@;
put 'Lmxlbmd0aDt3KyspcD0oZz0oMHxTLndvcmRzW3ddKStwKT4+MjYsdGhpcy53b3Jkc1t3XT02NzEwODg2MyZnO2lmKDA9PT1wJiZ3PFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5t'@;
put 'YXgodGhpcy5sZW5ndGgsdyksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoTil9O3ZhciBVPWZ1bmN0aW9uKE4sZyxDKXt2YXIgSixuZSxkZSxTPU4ud29yZHMsdj1n'@;
put 'LndvcmRzLHA9Qy53b3Jkcyx3PTAsZmU9MHxTWzBdLHhlPTgxOTEmZmUsTGU9ZmU+Pj4xMyxGZT0wfFNbMV0sT2U9ODE5MSZGZSxqZT1GZT4+PjEzLFdlPTB8U1syXSxLZT04MTkxJldlLFllPVdlPj4+MTMsSmU9MHxTWzNdLGx0PTgxOTEmSmUsUGU9SmU+Pj4xMyxiZT0wfFNbNF0sQWU9ODE5'@;
put 'MSZiZSxUZT1iZT4+PjEzLHFlPTB8U1s1XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxTWzZdLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfFNbN10saXQ9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8U1s4XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxTWzldLENuPTgxOTEmb24s'@;
put 'VXQ9b24+Pj4xMyxibj0wfHZbMF0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8dlsxXSxIbj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHx2WzJdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfHZbM10sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8dls0XSxydD04MTkxJm1uLEl0PW1u'@;
put 'Pj4+MTMsSnQ9MHx2WzVdLER0PTgxOTEmSnQscHQ9SnQ+Pj4xMyxZdD0wfHZbNl0sSW49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8dls3XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHx2WzhdLFJuPTgxOTEmQm4sJHQ9Qm4+Pj4xMyxQbj0wfHZbOV0sbmk9ODE5MSZQbixsbj1Qbj4+PjEz'@;
put 'O0MubmVnYXRpdmU9Ti5uZWdhdGl2ZV5nLm5lZ2F0aXZlLEMubGVuZ3RoPTE5O3ZhciBqbj0odysoSj1NYXRoLmltdWwoeGUsV24pKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoeGUsZW4pKStNYXRoLmltdWwoTGUsV24pfDApKTw8MTMpfDA7dz0oKGRlPU1hdGguaW11bChMZSxlbikp'@;
put 'KyhuZT4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsSj1NYXRoLmltdWwoT2UsV24pLG5lPShuZT1NYXRoLmltdWwoT2UsZW4pKStNYXRoLmltdWwoamUsV24pfDAsZGU9TWF0aC5pbXVsKGplLGVuKTt2YXIgcXI9KHcrKEo9SitNYXRoLmltdWwoeGUsSG4pfDApfDApKygoODE5'@;
put 'MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLEhuKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsZnQpfDApKyhuZT4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoS2UsV24pLG5lPShuZT1NYXRoLmltdWwo'@;
put 'S2UsZW4pKStNYXRoLmltdWwoWWUsV24pfDAsZGU9TWF0aC5pbXVsKFllLGVuKSxKPUorTWF0aC5pbXVsKE9lLEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChqZSxIbil8MCxkZT1kZStNYXRoLmltdWwoamUsZnQpfDA7dmFyIGdpPSh3KyhKPUorTWF0aC5p'@;
put 'bXVsKHhlLGhuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLHd0KXwwKSsobmU+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGx0'@;
put 'LFduKSxuZT0obmU9TWF0aC5pbXVsKGx0LGVuKSkrTWF0aC5pbXVsKFBlLFduKXwwLGRlPU1hdGguaW11bChQZSxlbiksSj1KK01hdGguaW11bChLZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLGZ0KXww'@;
put 'LEo9SitNYXRoLmltdWwoT2UsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKGplLGhuKXwwLGRlPWRlK01hdGguaW11bChqZSx3dCl8MDt2YXIgeHI9KHcrKEo9SitNYXRoLmltdWwoeGUsX3QpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4'@;
put 'ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsTnQpfDApKyhuZT4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQWUsV24pLG5lPShuZT1NYXRoLmltdWwoQWUsZW4pKStNYXRoLmltdWwoVGUsV24p'@;
put 'fDAsZGU9TWF0aC5pbXVsKFRlLGVuKSxKPUorTWF0aC5pbXVsKGx0LEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCxkZT1kZStNYXRoLmltdWwoUGUsZnQpfDAsSj1KK01hdGguaW11bChLZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtl'@;
put 'LHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHd0KXwwLEo9SitNYXRoLmltdWwoT2UsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKGplLF90KXwwLGRlPWRlK01hdGguaW11bChqZSxOdCl8MDt2YXIgVWk9KHcrKEo9SitN'@;
put 'YXRoLmltdWwoeGUscnQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsSXQpfDApKyhuZT4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsSj1NYXRoLmlt'@;
put 'dWwoWGUsV24pLG5lPShuZT1NYXRoLmltdWwoWGUsZW4pKStNYXRoLmltdWwoVWUsV24pfDAsZGU9TWF0aC5pbXVsKFVlLGVuKSxKPUorTWF0aC5pbXVsKEFlLEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCxkZT1kZStNYXRoLmltdWwoVGUs'@;
put 'ZnQpfDAsSj1KK01hdGguaW11bChsdCxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLHd0KXwwLEo9SitNYXRoLmltdWwoS2UsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVs'@;
put 'KFllLF90KXwwLGRlPWRlK01hdGguaW11bChZZSxOdCl8MCxKPUorTWF0aC5pbXVsKE9lLHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsSXQpfDApK01hdGguaW11bChqZSxydCl8MCxkZT1kZStNYXRoLmltdWwoamUsSXQpfDA7dmFyIEtyPSh3KyhKPUorTWF0aC5pbXVsKHhlLER0KXww'@;
put 'KXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLHB0KXwwKSsobmU+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKE1lLFduKSxuZT0obmU9'@;
put 'TWF0aC5pbXVsKE1lLGVuKSkrTWF0aC5pbXVsKERlLFduKXwwLGRlPU1hdGguaW11bChEZSxlbiksSj1KK01hdGguaW11bChYZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLGZ0KXwwLEo9SitNYXRoLmlt'@;
put 'dWwoQWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLGRlPWRlK01hdGguaW11bChUZSx3dCl8MCxKPUorTWF0aC5pbXVsKGx0LF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQZSxfdCl8MCxkZT1kZStN'@;
put 'YXRoLmltdWwoUGUsTnQpfDAsSj1KK01hdGguaW11bChLZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFllLEl0KXwwLEo9SitNYXRoLmltdWwoT2UsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSxwdCl8'@;
put 'MCkrTWF0aC5pbXVsKGplLER0KXwwLGRlPWRlK01hdGguaW11bChqZSxwdCl8MDt2YXIgbm89KHcrKEo9SitNYXRoLmltdWwoeGUsSW4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLEluKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRo'@;
put 'LmltdWwoTGUsenQpfDApKyhuZT4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoaXQsV24pLG5lPShuZT1NYXRoLmltdWwoaXQsZW4pKStNYXRoLmltdWwodXQsV24pfDAsZGU9TWF0aC5pbXVsKHV0LGVuKSxKPUorTWF0aC5pbXVsKE1lLEhuKXwwLG5lPShu'@;
put 'ZT1uZStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCxkZT1kZStNYXRoLmltdWwoRGUsZnQpfDAsSj1KK01hdGguaW11bChYZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLHd0KXww'@;
put 'LEo9SitNYXRoLmltdWwoQWUsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLGRlPWRlK01hdGguaW11bChUZSxOdCl8MCxKPUorTWF0aC5pbXVsKGx0LHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxy'@;
put 'dCl8MCxkZT1kZStNYXRoLmltdWwoUGUsSXQpfDAsSj1KK01hdGguaW11bChLZSxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHB0KXwwLEo9SitNYXRoLmltdWwoT2UsSW4pfDAsbmU9KG5lPW5lK01hdGgu'@;
put 'aW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKGplLEluKXwwLGRlPWRlK01hdGguaW11bChqZSx6dCl8MDt2YXIgSHI9KHcrKEo9SitNYXRoLmltdWwoeGUseG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKExlLHhuKXwwKSk8PDEzKXwwO3c9'@;
put 'KChkZT1kZStNYXRoLmltdWwoTGUsc24pfDApKyhuZT4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoSHQsV24pLG5lPShuZT1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsZGU9TWF0aC5pbXVsKFB0LGVuKSxKPUorTWF0aC5pbXVsKGl0'@;
put 'LEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCh1dCxIbil8MCxkZT1kZStNYXRoLmltdWwodXQsZnQpfDAsSj1KK01hdGguaW11bChNZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsZGU9ZGUrTWF0aC5p'@;
put 'bXVsKERlLHd0KXwwLEo9SitNYXRoLmltdWwoWGUsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLGRlPWRlK01hdGguaW11bChVZSxOdCl8MCxKPUorTWF0aC5pbXVsKEFlLHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsSXQpfDApK01h'@;
put 'dGguaW11bChUZSxydCl8MCxkZT1kZStNYXRoLmltdWwoVGUsSXQpfDAsSj1KK01hdGguaW11bChsdCxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLHB0KXwwLEo9SitNYXRoLmltdWwoS2UsSW4pfDAsbmU9'@;
put 'KG5lPW5lK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLEluKXwwLGRlPWRlK01hdGguaW11bChZZSx6dCl8MCxKPUorTWF0aC5pbXVsKE9lLHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChqZSx4bil8MCxkZT1kZStNYXRoLmltdWwoamUsc24p'@;
put 'fDA7dmFyIHFpPSh3KyhKPUorTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxSbil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLCR0KXwwKSsobmU+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkm'@;
put 'PTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLFduKSxuZT0obmU9TWF0aC5pbXVsKENuLGVuKSkrTWF0aC5pbXVsKFV0LFduKXwwLGRlPU1hdGguaW11bChVdCxlbiksSj1KK01hdGguaW11bChIdCxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LGZ0KXwwKStNYXRoLmltdWwoUHQsSG4pfDAs'@;
put 'ZGU9ZGUrTWF0aC5pbXVsKFB0LGZ0KXwwLEo9SitNYXRoLmltdWwoaXQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLGRlPWRlK01hdGguaW11bCh1dCx3dCl8MCxKPUorTWF0aC5pbXVsKE1lLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwo'@;
put 'TWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoRGUsTnQpfDAsSj1KK01hdGguaW11bChYZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLEl0KXwwLEo9SitNYXRoLmltdWwo'@;
put 'QWUsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLGRlPWRlK01hdGguaW11bChUZSxwdCl8MCxKPUorTWF0aC5pbXVsKGx0LEluKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxJbil8MCxkZT1kZStNYXRo'@;
put 'LmltdWwoUGUsenQpfDAsSj1KK01hdGguaW11bChLZSx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHNuKXwwLEo9SitNYXRoLmltdWwoT2UsUm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSwkdCl8MCkr'@;
put 'TWF0aC5pbXVsKGplLFJuKXwwLGRlPWRlK01hdGguaW11bChqZSwkdCl8MDt2YXIgSmk9KHcrKEo9SitNYXRoLmltdWwoeGUsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKExlLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmlt'@;
put 'dWwoTGUsbG4pfDApKyhuZT4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24sSG4pLG5lPShuZT1NYXRoLmltdWwoQ24sZnQpKStNYXRoLmltdWwoVXQsSG4pfDAsZGU9TWF0aC5pbXVsKFV0LGZ0KSxKPUorTWF0aC5pbXVsKEh0LGhuKXwwLG5lPShuZT1u'@;
put 'ZStNYXRoLmltdWwoSHQsd3QpfDApK01hdGguaW11bChQdCxobil8MCxkZT1kZStNYXRoLmltdWwoUHQsd3QpfDAsSj1KK01hdGguaW11bChpdCxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGl0LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LE50KXwwLEo9'@;
put 'SitNYXRoLmltdWwoTWUscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSxJdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLGRlPWRlK01hdGguaW11bChEZSxJdCl8MCxKPUorTWF0aC5pbXVsKFhlLER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11bChVZSxEdCl8'@;
put 'MCxkZT1kZStNYXRoLmltdWwoVWUscHQpfDAsSj1KK01hdGguaW11bChBZSxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKFRlLHp0KXwwLEo9SitNYXRoLmltdWwobHQseG4pfDAsbmU9KG5lPW5lK01hdGguaW11'@;
put 'bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLGRlPWRlK01hdGguaW11bChQZSxzbil8MCxKPUorTWF0aC5pbXVsKEtlLFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxSbil8MCxkZT1kZStNYXRoLmltdWwoWWUsJHQpfDA7dmFyIGFvPSh3KyhK'@;
put 'PUorTWF0aC5pbXVsKE9lLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoT2UsbG4pfDApK01hdGguaW11bChqZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKGplLGxuKXwwKSsobmU+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLEo9TWF0'@;
put 'aC5pbXVsKENuLGhuKSxuZT0obmU9TWF0aC5pbXVsKENuLHd0KSkrTWF0aC5pbXVsKFV0LGhuKXwwLGRlPU1hdGguaW11bChVdCx3dCksSj1KK01hdGguaW11bChIdCxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LE50KXwwKStNYXRoLmltdWwoUHQsX3QpfDAsZGU9ZGUrTWF0aC5pbXVs'@;
put 'KFB0LE50KXwwLEo9SitNYXRoLmltdWwoaXQscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLGRlPWRlK01hdGguaW11bCh1dCxJdCl8MCxKPUorTWF0aC5pbXVsKE1lLER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUscHQpfDApK01hdGgu'@;
put 'aW11bChEZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoRGUscHQpfDAsSj1KK01hdGguaW11bChYZSxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLHp0KXwwLEo9SitNYXRoLmltdWwoQWUseG4pfDAsbmU9KG5l'@;
put 'PW5lK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLGRlPWRlK01hdGguaW11bChUZSxzbil8MCxKPUorTWF0aC5pbXVsKGx0LFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8MCxkZT1kZStNYXRoLmltdWwoUGUsJHQpfDA7'@;
put 'dmFyIHJvPSh3KyhKPUorTWF0aC5pbXVsKEtlLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoS2UsbG4pfDApK01hdGguaW11bChZZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFllLGxuKXwwKSsobmU+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3'@;
put 'MTA4ODYzLEo9TWF0aC5pbXVsKENuLF90KSxuZT0obmU9TWF0aC5pbXVsKENuLE50KSkrTWF0aC5pbXVsKFV0LF90KXwwLGRlPU1hdGguaW11bChVdCxOdCksSj1KK01hdGguaW11bChIdCxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LEl0KXwwKStNYXRoLmltdWwoUHQscnQpfDAsZGU9'@;
put 'ZGUrTWF0aC5pbXVsKFB0LEl0KXwwLEo9SitNYXRoLmltdWwoaXQsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLGRlPWRlK01hdGguaW11bCh1dCxwdCl8MCxKPUorTWF0aC5pbXVsKE1lLEluKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUs'@;
put 'enQpfDApK01hdGguaW11bChEZSxJbil8MCxkZT1kZStNYXRoLmltdWwoRGUsenQpfDAsSj1KK01hdGguaW11bChYZSx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLHNuKXwwLEo9SitNYXRoLmltdWwoQWUs'@;
put 'Um4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLFJuKXwwLGRlPWRlK01hdGguaW11bChUZSwkdCl8MDt2YXIgaW89KHcrKEo9SitNYXRoLmltdWwobHQsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChsdCxsbil8MCkrTWF0aC5pbXVs'@;
put 'KFBlLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoUGUsbG4pfDApKyhuZT4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24scnQpLG5lPShuZT1NYXRoLmltdWwoQ24sSXQpKStNYXRoLmltdWwoVXQscnQpfDAsZGU9TWF0aC5pbXVsKFV0'@;
put 'LEl0KSxKPUorTWF0aC5pbXVsKEh0LER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQscHQpfDApK01hdGguaW11bChQdCxEdCl8MCxkZT1kZStNYXRoLmltdWwoUHQscHQpfDAsSj1KK01hdGguaW11bChpdCxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwo'@;
put 'dXQsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LHp0KXwwLEo9SitNYXRoLmltdWwoTWUseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLGRlPWRlK01hdGguaW11bChEZSxzbil8MCxKPUorTWF0aC5pbXVsKFhlLFJuKXwwLG5lPShuZT1uZStN'@;
put 'YXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxSbil8MCxkZT1kZStNYXRoLmltdWwoVWUsJHQpfDA7dmFyIEdpPSh3KyhKPUorTWF0aC5pbXVsKEFlLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoQWUsbG4pfDApK01hdGguaW11bChUZSxuaSl8MCkpPDwxMyl8'@;
put 'MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFRlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLER0KSxuZT0obmU9TWF0aC5pbXVsKENuLHB0KSkrTWF0aC5pbXVsKFV0LER0KXwwLGRlPU1hdGguaW11bChVdCxwdCksSj1KK01hdGguaW11'@;
put 'bChIdCxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LHp0KXwwKStNYXRoLmltdWwoUHQsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LHp0KXwwLEo9SitNYXRoLmltdWwoaXQseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLGRlPWRlK01h'@;
put 'dGguaW11bCh1dCxzbil8MCxKPUorTWF0aC5pbXVsKE1lLFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCxkZT1kZStNYXRoLmltdWwoRGUsJHQpfDA7dmFyIGhvPSh3KyhKPUorTWF0aC5pbXVsKFhlLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShu'@;
put 'ZT1uZStNYXRoLmltdWwoWGUsbG4pfDApK01hdGguaW11bChVZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFVlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLEluKSxuZT0obmU9TWF0aC5pbXVsKENuLHp0KSkr'@;
put 'TWF0aC5pbXVsKFV0LEluKXwwLGRlPU1hdGguaW11bChVdCx6dCksSj1KK01hdGguaW11bChIdCx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LHNuKXwwKStNYXRoLmltdWwoUHQseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LHNuKXwwLEo9SitNYXRoLmltdWwoaXQsUm4pfDAsbmU9KG5l'@;
put 'PW5lK01hdGguaW11bChpdCwkdCl8MCkrTWF0aC5pbXVsKHV0LFJuKXwwLGRlPWRlK01hdGguaW11bCh1dCwkdCl8MDt2YXIgeXI9KHcrKEo9SitNYXRoLmltdWwoTWUsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChNZSxsbil8MCkrTWF0aC5pbXVsKERlLG5pKXwwKSk8'@;
put 'PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoRGUsbG4pfDApKyhuZT4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24seG4pLG5lPShuZT1NYXRoLmltdWwoQ24sc24pKStNYXRoLmltdWwoVXQseG4pfDAsZGU9TWF0aC5pbXVsKFV0LHNuKSxKPUorTWF0'@;
put 'aC5pbXVsKEh0LFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQsJHQpfDApK01hdGguaW11bChQdCxSbil8MCxkZT1kZStNYXRoLmltdWwoUHQsJHQpfDA7dmFyIFBpPSh3KyhKPUorTWF0aC5pbXVsKGl0LG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoaXQsbG4pfDAp'@;
put 'K01hdGguaW11bCh1dCxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKHV0LGxuKXwwKSsobmU+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLFJuKSxuZT0obmU9TWF0aC5pbXVsKENuLCR0KSkrTWF0aC5pbXVsKFV0LFJuKXwwLGRlPU1h'@;
put 'dGguaW11bChVdCwkdCk7dmFyIExvPSh3KyhKPUorTWF0aC5pbXVsKEh0LG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoSHQsbG4pfDApK01hdGguaW11bChQdCxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFB0LGxuKXwwKSsobmU+Pj4xMyl8MCkrKExv'@;
put 'Pj4+MjYpfDAsTG8mPTY3MTA4ODYzO3ZhciBocz0odysoSj1NYXRoLmltdWwoQ24sbmkpKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoQ24sbG4pKStNYXRoLmltdWwoVXQsbmkpfDApKTw8MTMpfDA7cmV0dXJuIHc9KChkZT1NYXRoLmltdWwoVXQsbG4pKSsobmU+Pj4xMyl8MCkrKGhz'@;
put 'Pj4+MjYpfDAsaHMmPTY3MTA4ODYzLHBbMF09am4scFsxXT1xcixwWzJdPWdpLHBbM109eHIscFs0XT1VaSxwWzVdPUtyLHBbNl09bm8scFs3XT1IcixwWzhdPXFpLHBbOV09SmkscFsxMF09YW8scFsxMV09cm8scFsxMl09aW8scFsxM109R2kscFsxNF09aG8scFsxNV09eXIscFsxNl09UGks'@;
put 'cFsxN109TG8scFsxOF09aHMsMCE9PXcmJihwWzE5XT13LEMubGVuZ3RoKyspLEN9O2Z1bmN0aW9uIHEoSCxOLGcpe2cubmVnYXRpdmU9Ti5uZWdhdGl2ZV5ILm5lZ2F0aXZlLGcubGVuZ3RoPUgubGVuZ3RoK04ubGVuZ3RoO2Zvcih2YXIgQz0wLFM9MCx2PTA7djxnLmxlbmd0aC0xO3YrKyl7'@;
put 'dmFyIHA9UztTPTA7Zm9yKHZhciB3PTY3MTA4ODYzJkMsSj1NYXRoLm1pbih2LE4ubGVuZ3RoLTEpLG5lPU1hdGgubWF4KDAsdi1ILmxlbmd0aCsxKTtuZTw9SjtuZSsrKXt2YXIgTGU9KDB8SC53b3Jkc1t2LW5lXSkqKDB8Ti53b3Jkc1tuZV0pLEZlPTY3MTA4ODYzJkxlO3c9NjcxMDg4NjMm'@;
put 'KEZlPUZlK3d8MCksUys9KHA9KHA9cCsoTGUvNjcxMDg4NjR8MCl8MCkrKEZlPj4+MjYpfDApPj4+MjYscCY9NjcxMDg4NjN9Zy53b3Jkc1t2XT13LEM9cCxwPVN9cmV0dXJuIDAhPT1DP2cud29yZHNbdl09QzpnLmxlbmd0aC0tLGcuX3N0cmlwKCl9ZnVuY3Rpb24gZWUoSCxOLGcpe3JldHVy'@;
put 'biBxKEgsTixnKX1mdW5jdGlvbiB0ZShILE4pe3RoaXMueD1ILHRoaXMueT1OfU1hdGguaW11bHx8KFU9WCksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oTixnKXt2YXIgUz10aGlzLmxlbmd0aCtOLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1OLmxlbmd0aD9VKHRo'@;
put 'aXMsTixnKTpTPDYzP1godGhpcyxOLGcpOlM8MTAyND9xKHRoaXMsTixnKTplZSh0aGlzLE4sZyl9LHRlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKE4pe2Zvcih2YXIgZz1uZXcgQXJyYXkoTiksQz1NLnByb3RvdHlwZS5fY291bnRCaXRzKE4pLTEsUz0wO1M8TjtTKyspZ1tTXT10aGlz'@;
put 'LnJldkJpbihTLEMsTik7cmV0dXJuIGd9LHRlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oTixnLEMpe2lmKDA9PT1OfHxOPT09Qy0xKXJldHVybiBOO2Zvcih2YXIgUz0wLHY9MDt2PGc7disrKVN8PSgxJk4pPDxnLXYtMSxOPj49MTtyZXR1cm4gU30sdGUucHJvdG90eXBlLnBlcm11dGU9'@;
put 'ZnVuY3Rpb24oTixnLEMsUyx2LHApe2Zvcih2YXIgdz0wO3c8cDt3KyspU1t3XT1nW05bd11dLHZbd109Q1tOW3ddXX0sdGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihOLGcsQyxTLHYscCl7dGhpcy5wZXJtdXRlKHAsTixnLEMsUyx2KTtmb3IodmFyIHc9MTt3PHY7dzw8PTEpZm9y'@;
put 'KHZhciBKPXc8PDEsbmU9TWF0aC5jb3MoMipNYXRoLlBJL0opLGRlPU1hdGguc2luKDIqTWF0aC5QSS9KKSxmZT0wO2ZlPHY7ZmUrPUopZm9yKHZhciB4ZT1uZSxMZT1kZSxGZT0wO0ZlPHc7RmUrKyl7dmFyIE9lPUNbZmUrRmVdLGplPVNbZmUrRmVdLFdlPUNbZmUrRmUrd10sS2U9U1tmZStG'@;
put 'ZSt3XSxZZT14ZSpXZS1MZSpLZTtLZT14ZSpLZStMZSpXZSxDW2ZlK0ZlXT1PZSsoV2U9WWUpLFNbZmUrRmVdPWplK0tlLENbZmUrRmUrd109T2UtV2UsU1tmZStGZSt3XT1qZS1LZSxGZSE9PUomJihZZT1uZSp4ZS1kZSpMZSxMZT1uZSpMZStkZSp4ZSx4ZT1ZZSl9fSx0ZS5wcm90b3R5cGUu'@;
put 'Z3Vlc3NMZW4xM2I9ZnVuY3Rpb24oTixnKXt2YXIgQz0xfE1hdGgubWF4KGcsTiksUz0xJkMsdj0wO2ZvcihDPUMvMnwwO0M7Qz4+Pj0xKXYrKztyZXR1cm4gMTw8disxK1N9LHRlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oTixnLEMpe2lmKCEoQzw9MSkpZm9yKHZhciBTPTA7UzxD'@;
put 'LzI7UysrKXt2YXIgdj1OW1NdO05bU109TltDLVMtMV0sTltDLVMtMV09dix2PWdbU10sZ1tTXT0tZ1tDLVMtMV0sZ1tDLVMtMV09LXZ9fSx0ZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKE4sZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy8yO1MrKyl7dmFyIHY9ODE5MipNYXRoLnJv'@;
put 'dW5kKE5bMipTKzFdL2cpK01hdGgucm91bmQoTlsyKlNdL2cpK0M7TltTXT02NzEwODg2MyZ2LEM9djw2NzEwODg2ND8wOnYvNjcxMDg4NjR8MH1yZXR1cm4gTn0sdGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oTixnLEMsUyl7Zm9yKHZhciB2PTAscD0wO3A8ZztwKyspQ1syKnBd'@;
put 'PTgxOTEmKHYrPTB8TltwXSksQ1syKnArMV09ODE5MSYodj4+Pj0xMyksdj4+Pj0xMztmb3IocD0yKmc7cDxTOysrcClDW3BdPTA7bSgwPT09diksbSgwPT0oLTgxOTImdikpfSx0ZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihOKXtmb3IodmFyIGc9bmV3IEFycmF5KE4pLEM9MDtDPE47Qysr'@;
put 'KWdbQ109MDtyZXR1cm4gZ30sdGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oTixnLEMpe3ZhciBTPTIqdGhpcy5ndWVzc0xlbjEzYihOLmxlbmd0aCxnLmxlbmd0aCksdj10aGlzLm1ha2VSQlQoUykscD10aGlzLnN0dWIoUyksdz1uZXcgQXJyYXkoUyksSj1uZXcgQXJyYXkoUyksbmU9bmV3'@;
put 'IEFycmF5KFMpLGRlPW5ldyBBcnJheShTKSxmZT1uZXcgQXJyYXkoUykseGU9bmV3IEFycmF5KFMpLExlPUMud29yZHM7TGUubGVuZ3RoPVMsdGhpcy5jb252ZXJ0MTNiKE4ud29yZHMsTi5sZW5ndGgsdyxTKSx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxkZSxTKSx0aGlzLnRy'@;
put 'YW5zZm9ybSh3LHAsSixuZSxTLHYpLHRoaXMudHJhbnNmb3JtKGRlLHAsZmUseGUsUyx2KTtmb3IodmFyIEZlPTA7RmU8UztGZSsrKXt2YXIgT2U9SltGZV0qZmVbRmVdLW5lW0ZlXSp4ZVtGZV07bmVbRmVdPUpbRmVdKnhlW0ZlXStuZVtGZV0qZmVbRmVdLEpbRmVdPU9lfXJldHVybiB0aGlz'@;
put 'LmNvbmp1Z2F0ZShKLG5lLFMpLHRoaXMudHJhbnNmb3JtKEosbmUsTGUscCxTLHYpLHRoaXMuY29uanVnYXRlKExlLHAsUyksdGhpcy5ub3JtYWxpemUxM2IoTGUsUyksQy5uZWdhdGl2ZT1OLm5lZ2F0aXZlXmcubmVnYXRpdmUsQy5sZW5ndGg9Ti5sZW5ndGgrZy5sZW5ndGgsQy5fc3RyaXAo'@;
put 'KX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4pe3ZhciBnPW5ldyBNKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtOLmxlbmd0aCksdGhpcy5tdWxUbyhOLGcpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKE4pe3ZhciBnPW5ldyBNKG51bGwpO3JldHVy'@;
put 'biBnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtOLmxlbmd0aCksZWUodGhpcyxOLGcpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oTix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oTil7dmFyIGc9TjwwO2cmJihO'@;
put 'PS1OKSxtKCJudW1iZXIiPT10eXBlb2YgTiksbShOPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKk4scD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRo'@;
put 'aXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksZz90aGlzLmluZWcoKTp0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oTil9LE0ucHJvdG90eXBlLnNxcj1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKE4pe3ZhciBnPWZ1bmN0aW9uIFkoSCl7Zm9yKHZhciBOPW5ldyBBcnJheShILmJp'@;
put 'dExlbmd0aCgpKSxnPTA7ZzxOLmxlbmd0aDtnKyspTltnXT1ILndvcmRzW2cvMjZ8MF0+Pj5nJTI2JjE7cmV0dXJuIE59KE4pO2lmKDA9PT1nLmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBDPXRoaXMsUz0wO1M8Zy5sZW5ndGgmJjA9PT1nW1NdO1MrKyxDPUMuc3FyKCkpO2lmKCsr'@;
put 'UzxnLmxlbmd0aClmb3IodmFyIHY9Qy5zcXIoKTtTPGcubGVuZ3RoO1MrKyx2PXYuc3FyKCkpMCE9PWdbU10mJihDPUMubXVsKHYpKTtyZXR1cm4gQ30sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKE4pe20oIm51bWJlciI9PXR5cGVvZiBOJiZOPj0wKTt2YXIgdixnPU4lMjYsQz0oTi1n'@;
put 'KS8yNixTPTY3MTA4ODYzPj4+MjYtZzw8MjYtZztpZigwIT09Zyl7dmFyIHA9MDtmb3Iodj0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgdz10aGlzLndvcmRzW3ZdJlM7dGhpcy53b3Jkc1t2XT0oMHx0aGlzLndvcmRzW3ZdKS13PDxnfHAscD13Pj4+MjYtZ31wJiYodGhpcy53b3Jkc1t2XT1w'@;
put 'LHRoaXMubGVuZ3RoKyspfWlmKDAhPT1DKXtmb3Iodj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKXRoaXMud29yZHNbditDXT10aGlzLndvcmRzW3ZdO2Zvcih2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTA7dGhpcy5sZW5ndGgrPUN9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBl'@;
put 'LmlzaGxuPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihOKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKE4sZyxDKXt2YXIgUzttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCksUz1nPyhnLWclMjYpLzI2OjA7dmFyIHY9TiUyNixwPU1h'@;
put 'dGgubWluKChOLXYpLzI2LHRoaXMubGVuZ3RoKSx3PTY3MTA4ODYzXjY3MTA4ODYzPj4+djw8dixKPUM7aWYoUy09cCxTPU1hdGgubWF4KDAsUyksSil7Zm9yKHZhciBuZT0wO25lPHA7bmUrKylKLndvcmRzW25lXT10aGlzLndvcmRzW25lXTtKLmxlbmd0aD1wfWlmKDAhPT1wKWlmKHRoaXMu'@;
put 'bGVuZ3RoPnApZm9yKHRoaXMubGVuZ3RoLT1wLG5lPTA7bmU8dGhpcy5sZW5ndGg7bmUrKyl0aGlzLndvcmRzW25lXT10aGlzLndvcmRzW25lK3BdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGRlPTA7Zm9yKG5lPXRoaXMubGVuZ3RoLTE7bmU+PTAmJigwIT09ZGV8'@;
put 'fG5lPj1TKTtuZS0tKXt2YXIgZmU9MHx0aGlzLndvcmRzW25lXTt0aGlzLndvcmRzW25lXT1kZTw8MjYtdnxmZT4+PnYsZGU9ZmUmd31yZXR1cm4gSiYmMCE9PWRlJiYoSi53b3Jkc1tKLmxlbmd0aCsrXT1kZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3Ro'@;
put 'PTEpLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKE4sZyxDKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oTixnLEMpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oTil9LE0ucHJv'@;
put 'dG90eXBlLnVzaGxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oTil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aXVzaHJuKE4pfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihOKXttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIGc9TiUyNixDPShOLWcpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUN8fCEodGhpcy53b3Jkc1tDXSYxPDxnKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlv'@;
put 'bihOKXttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIGc9TiUyNixDPShOLWcpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Qz90aGlzOigwIT09ZyYmQysrLHRoaXMubGVu'@;
put 'Z3RoPU1hdGgubWluKEMsdGhpcy5sZW5ndGgpLDAhPT1nJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnKSx0aGlzLl9zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oTil9'@;
put 'LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKE4pe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgTiksbShOPDY3MTA4ODY0KSxOPDA/dGhpcy5pc3VibigtTik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9Tj8odGhpcy53b3Jkc1swXT1O'@;
put 'LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oTiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKE4pfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oTil7dGhpcy53b3Jkc1swXSs9Tjtmb3IodmFy'@;
put 'IGc9MDtnPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2ddPj02NzEwODg2NDtnKyspdGhpcy53b3Jkc1tnXS09NjcxMDg4NjQsZz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tnKzFdPTE6dGhpcy53b3Jkc1tnKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3Ro'@;
put 'LGcrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oTil7aWYobSgibnVtYmVyIj09dHlwZW9mIE4pLG0oTjw2NzEwODg2NCksTjwwKXJldHVybiB0aGlzLmlhZGRuKC1OKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oTiks'@;
put 'dGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09TiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZ108'@;
put 'MDtnKyspdGhpcy53b3Jkc1tnXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tnKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oTil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oTil7cmV0dXJu'@;
put 'IHRoaXMuY2xvbmUoKS5pc3VibihOKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5j'@;
put 'dGlvbihOLGcsQyl7dmFyIHY7dGhpcy5fZXhwYW5kKE4ubGVuZ3RoK0MpO3ZhciBwLHc9MDtmb3Iodj0wO3Y8Ti5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditDXSkrdzt2YXIgSj0oMHxOLndvcmRzW3ZdKSpnO3c9KChwLT02NzEwODg2MyZKKT4+MjYpLShKLzY3MTA4ODY0fDApLHRo'@;
put 'aXMud29yZHNbditDXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1DO3YrKyl3PShwPSgwfHRoaXMud29yZHNbditDXSkrdyk+PjI2LHRoaXMud29yZHNbditDXT02NzEwODg2MyZwO2lmKDA9PT13KXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihtKC0xPT09dyksdz0wLHY9MDt2PHRo'@;
put 'aXMubGVuZ3RoO3YrKyl3PShwPS0oMHx0aGlzLndvcmRzW3ZdKSt3KT4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oTixnKXt2YXIgQyxTPXRoaXMuY2xvbmUoKSx2'@;
put 'PU4scD0wfHYud29yZHNbdi5sZW5ndGgtMV07MCE9KEM9MjYtdGhpcy5fY291bnRCaXRzKHApKSYmKHY9di51c2hsbihDKSxTLml1c2hsbihDKSxwPTB8di53b3Jkc1t2Lmxlbmd0aC0xXSk7dmFyIG5lLEo9Uy5sZW5ndGgtdi5sZW5ndGg7aWYoIm1vZCIhPT1nKXsobmU9bmV3IE0obnVsbCkp'@;
put 'Lmxlbmd0aD1KKzEsbmUud29yZHM9bmV3IEFycmF5KG5lLmxlbmd0aCk7Zm9yKHZhciBkZT0wO2RlPG5lLmxlbmd0aDtkZSsrKW5lLndvcmRzW2RlXT0wfXZhciBmZT1TLmNsb25lKCkuX2lzaGxuc3VibXVsKHYsMSxKKTswPT09ZmUubmVnYXRpdmUmJihTPWZlLG5lJiYobmUud29yZHNbSl09'@;
put 'MSkpO2Zvcih2YXIgeGU9Si0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHxTLndvcmRzW3YubGVuZ3RoK3hlXSkrKDB8Uy53b3Jkc1t2Lmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3B8MCw2NzEwODg2MyksUy5faXNobG5zdWJtdWwodixMZSx4ZSk7MCE9PVMubmVn'@;
put 'YXRpdmU7KUxlLS0sUy5uZWdhdGl2ZT0wLFMuX2lzaGxuc3VibXVsKHYsMSx4ZSksUy5pc1plcm8oKXx8KFMubmVnYXRpdmVePTEpO25lJiYobmUud29yZHNbeGVdPUxlKX1yZXR1cm4gbmUmJm5lLl9zdHJpcCgpLFMuX3N0cmlwKCksImRpdiIhPT1nJiYwIT09QyYmUy5pdXNocm4oQykse2Rp'@;
put 'djpuZXx8bnVsbCxtb2Q6U319LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihOLGcsQyl7cmV0dXJuIG0oIU4uaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Ti5uZWdhdGl2ZT8ocD10aGlzLm5lZygp'@;
put 'LmRpdm1vZChOLGcpLCJtb2QiIT09ZyYmKFM9cC5kaXYubmVnKCkpLCJkaXYiIT09ZyYmKHY9cC5tb2QubmVnKCksQyYmMCE9PXYubmVnYXRpdmUmJnYuaWFkZChOKSkse2RpdjpTLG1vZDp2fSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1OLm5lZ2F0aXZlPyhwPXRoaXMuZGl2bW9kKE4ubmVn'@;
put 'KCksZyksIm1vZCIhPT1nJiYoUz1wLmRpdi5uZWcoKSkse2RpdjpTLG1vZDpwLm1vZH0pOnRoaXMubmVnYXRpdmUmTi5uZWdhdGl2ZT8ocD10aGlzLm5lZygpLmRpdm1vZChOLm5lZygpLGcpLCJkaXYiIT09ZyYmKHY9cC5tb2QubmVnKCksQyYmMCE9PXYubmVnYXRpdmUmJnYuaXN1YihOKSks'@;
put 'e2RpdjpwLmRpdixtb2Q6dn0pOk4ubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChOKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1OLmxlbmd0aD8iZGl2Ij09PWc/e2Rpdjp0aGlzLmRpdm4oTi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Zz97ZGl2Om51bGwsbW9kOm5l'@;
put 'dyBNKHRoaXMubW9kcm4oTi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihOLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RybihOLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoTixnKTt2YXIgUyx2LHB9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5kaXZt'@;
put 'b2QoTiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuZGl2bW9kKE4sIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5kaXZtb2QoTiwibW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZS'@;
put 'b3VuZD1mdW5jdGlvbihOKXt2YXIgZz10aGlzLmRpdm1vZChOKTtpZihnLm1vZC5pc1plcm8oKSlyZXR1cm4gZy5kaXY7dmFyIEM9MCE9PWcuZGl2Lm5lZ2F0aXZlP2cubW9kLmlzdWIoTik6Zy5tb2QsUz1OLnVzaHJuKDEpLHY9Ti5hbmRsbigxKSxwPUMuY21wKFMpO3JldHVybiBwPDB8fDE9'@;
put 'PT12JiYwPT09cD9nLmRpdjowIT09Zy5kaXYubmVnYXRpdmU/Zy5kaXYuaXN1Ym4oMSk6Zy5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKE4pe3ZhciBnPU48MDtnJiYoTj0tTiksbShOPD02NzEwODg2Myk7Zm9yKHZhciBDPSgxPDwyNiklTixTPTAsdj10aGlzLmxl'@;
put 'bmd0aC0xO3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklTjtyZXR1cm4gZz8tUzpTfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLm1vZHJuKE4pfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihOKXt2YXIgZz1OPDA7ZyYmKE49LU4pLG0oTjw9'@;
put 'NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvTnwwLEM9diVOfXJldHVybiB0aGlzLl9zdHJpcCgpLGc/dGhpcy5pbmVnKCk6dGhpc30sTS5wcm90b3R5cGUuZGl2'@;
put 'bj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKE4pfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKE4pe20oMD09PU4ubmVnYXRpdmUpLG0oIU4uaXNaZXJvKCkpO3ZhciBnPXRoaXMsQz1OLmNsb25lKCk7Zz0wIT09Zy5uZWdhdGl2ZT9nLnVtb2QoTik6Zy5jbG9uZSgp'@;
put 'O2Zvcih2YXIgUz1uZXcgTSgxKSx2PW5ldyBNKDApLHA9bmV3IE0oMCksdz1uZXcgTSgxKSxKPTA7Zy5pc0V2ZW4oKSYmQy5pc0V2ZW4oKTspZy5pdXNocm4oMSksQy5pdXNocm4oMSksKytKO2Zvcih2YXIgbmU9Qy5jbG9uZSgpLGRlPWcuY2xvbmUoKTshZy5pc1plcm8oKTspe2Zvcih2YXIg'@;
put 'ZmU9MCx4ZT0xOyEoZy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihnLml1c2hybihmZSk7ZmUtLSA+MDspKFMuaXNPZGQoKXx8di5pc09kZCgpKSYmKFMuaWFkZChuZSksdi5pc3ViKGRlKSksUy5pdXNocm4oMSksdi5pdXNocm4oMSk7Zm9yKHZhciBMZT0w'@;
put 'LEZlPTE7IShDLndvcmRzWzBdJkZlKSYmTGU8MjY7KytMZSxGZTw8PTEpO2lmKExlPjApZm9yKEMuaXVzaHJuKExlKTtMZS0tID4wOykocC5pc09kZCgpfHx3LmlzT2RkKCkpJiYocC5pYWRkKG5lKSx3LmlzdWIoZGUpKSxwLml1c2hybigxKSx3Lml1c2hybigxKTtnLmNtcChDKT49MD8oZy5p'@;
put 'c3ViKEMpLFMuaXN1YihwKSx2LmlzdWIodykpOihDLmlzdWIoZykscC5pc3ViKFMpLHcuaXN1Yih2KSl9cmV0dXJue2E6cCxiOncsZ2NkOkMuaXVzaGxuKEopfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKE4pe20oMD09PU4ubmVnYXRpdmUpLG0oIU4uaXNaZXJvKCkpO3ZhciBmZSxn'@;
put 'PXRoaXMsQz1OLmNsb25lKCk7Zz0wIT09Zy5uZWdhdGl2ZT9nLnVtb2QoTik6Zy5jbG9uZSgpO2Zvcih2YXIgUz1uZXcgTSgxKSx2PW5ldyBNKDApLHA9Qy5jbG9uZSgpO2cuY21wbigxKT4wJiZDLmNtcG4oMSk+MDspe2Zvcih2YXIgdz0wLEo9MTshKGcud29yZHNbMF0mSikmJnc8MjY7Kyt3'@;
put 'LEo8PD0xKTtpZih3PjApZm9yKGcuaXVzaHJuKHcpO3ctLSA+MDspUy5pc09kZCgpJiZTLmlhZGQocCksUy5pdXNocm4oMSk7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJuKG5lKTtuZS0tID4wOyl2Lmlz'@;
put 'T2RkKCkmJnYuaWFkZChwKSx2Lml1c2hybigxKTtnLmNtcChDKT49MD8oZy5pc3ViKEMpLFMuaXN1Yih2KSk6KEMuaXN1YihnKSx2LmlzdWIoUykpfXJldHVybihmZT0wPT09Zy5jbXBuKDEpP1M6dikuY21wbigwKTwwJiZmZS5pYWRkKE4pLGZlfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24o'@;
put 'Til7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gTi5hYnMoKTtpZihOLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBnPXRoaXMuY2xvbmUoKSxDPU4uY2xvbmUoKTtnLm5lZ2F0aXZlPTAsQy5uZWdhdGl2ZT0wO2Zvcih2YXIgUz0wO2cuaXNFdmVuKCkmJkMuaXNFdmVuKCk7UysrKWcu'@;
put 'aXVzaHJuKDEpLEMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtnLmlzRXZlbigpOylnLml1c2hybigxKTtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO3ZhciB2PWcuY21wKEMpO2lmKHY8MCl7dmFyIHA9ZztnPUMsQz1wfWVsc2UgaWYoMD09PXZ8fDA9PT1DLmNtcG4oMSkpYnJlYWs7Zy5p'@;
put 'c3ViKEMpfXJldHVybiBDLml1c2hsbihTKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5lZ2NkKE4pLmEudW1vZChOKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1m'@;
put 'dW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMud29yZHNbMF0mTn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oTil7bSgibnVtYmVyIj09dHlwZW9mIE4pO3ZhciBnPU4lMjYsQz0oTi1nKS8y'@;
put 'NixTPTE8PGc7aWYodGhpcy5sZW5ndGg8PUMpcmV0dXJuIHRoaXMuX2V4cGFuZChDKzEpLHRoaXMud29yZHNbQ118PVMsdGhpcztmb3IodmFyIHY9UyxwPUM7MCE9PXYmJnA8dGhpcy5sZW5ndGg7cCsrKXt2YXIgdz0wfHRoaXMud29yZHNbcF07dj0odys9dik+Pj4yNix0aGlzLndvcmRzW3Bd'@;
put 'PXcmPTY3MTA4ODYzfXJldHVybiAwIT09diYmKHRoaXMud29yZHNbcF09dix0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihO'@;
put 'KXt2YXIgQyxnPU48MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWcpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmcpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle2cmJihOPS1OKSxtKE48PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIp'@;
put 'O3ZhciBTPTB8dGhpcy53b3Jkc1swXTtDPVM9PT1OPzA6UzxOPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKE4pe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Ti5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdh'@;
put 'dGl2ZSYmMCE9PU4ubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGc9dGhpcy51Y21wKE4pO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1nOmd9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oTil7aWYodGhpcy5sZW5ndGg+Ti5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Ti5sZW5n'@;
put 'dGgpcmV0dXJuLTE7Zm9yKHZhciBnPTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXt2YXIgUz0wfHRoaXMud29yZHNbQ10sdj0wfE4ud29yZHNbQ107aWYoUyE9PXYpe1M8dj9nPS0xOlM+diYmKGc9MSk7YnJlYWt9fXJldHVybiBnfSxNLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oTil7cmV0'@;
put 'dXJuIDE9PT10aGlzLmNtcG4oTil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKE4pe3JldHVybiAxPT09dGhpcy5jbXAoTil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY21wbihOKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlz'@;
put 'LmNtcChOKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKE4pe3JldHVybi0xPT09dGhpcy5jbXBuKE4pfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihOKXtyZXR1cm4tMT09PXRoaXMuY21wKE4pfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNtcG4oTik8'@;
put 'PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbXAoTik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihOKXtyZXR1cm4gMD09PXRoaXMuY21wbihOKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTil7cmV0dXJuIDA9PT10aGlzLmNtcChOKX0sTS5yZWQ9'@;
put 'ZnVuY3Rpb24oTil7cmV0dXJuIG5ldyBiKE4pfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihOKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0'@;
put 'aXZlcyIpLE4uY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChOKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20o'@;
put 'dGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5yZWQ9Tix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihOKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9m'@;
put 'b3JjZVJlZChOKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhp'@;
put 'cy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5z'@;
put 'dWIodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihOKXtyZXR1cm4gbSh0'@;
put 'aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f'@;
put 'dmVyaWZ5Mih0aGlzLE4pLHRoaXMucmVkLm11bCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxOKSx0aGlzLnJlZC5pbXVs'@;
put 'KHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0'@;
put 'IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0'@;
put 'aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5l'@;
put 'Zyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkJiYhTi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsTil9O3ZhciBvZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTky'@;
put 'Om51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHNlKEgsTil7dGhpcy5uYW1lPUgsdGhpcy5wPW5ldyBNKE4sMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlv'@;
put 'biBoZSgpe3NlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gdWUoKXtzZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGNlKCl7c2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBHKCl7c2UuY2FsbCh0aGlzLCIyNTUxOSIsIjdm'@;
put 'ZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBiKEgpe2lmKCJzdHJpbmciPT10eXBlb2YgSCl7dmFyIE49TS5fcHJpbWUoSCk7dGhpcy5tPU4ucCx0aGlzLnByaW1lPU59ZWxzZSBtKEguZ3RuKDEpLCJt'@;
put 'b2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09SCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gRChIKXtiLmNhbGwodGhpcyxIKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiks'@;
put 'dGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhp'@;
put 'cy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXNlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIE49bmV3IE0obnVsbCk7cmV0dXJuIE4ud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxOfSxzZS5wcm90b3R5cGUuaXJl'@;
put 'ZHVjZT1mdW5jdGlvbihOKXt2YXIgQyxnPU47ZG97dGhpcy5zcGxpdChnLHRoaXMudG1wKSxDPShnPShnPXRoaXMuaW11bEsoZykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIFM9Qzx0aGlzLm4/LTE6Zy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1T'@;
put 'PyhnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSk6Uz4wP2cuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWcuc3RyaXA/Zy5zdHJpcCgpOmcuX3N0cmlwKCksZ30sc2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKE4sZyl7Ti5pdXNocm4odGhpcy5uLDAsZyl9LHNlLnByb3RvdHlwZS5pbXVsSz1mdW5j'@;
put 'dGlvbihOKXtyZXR1cm4gTi5pbXVsKHRoaXMuayl9LGxlKGhlLHNlKSxoZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oTixnKXtmb3IodmFyIEM9NDE5NDMwMyxTPU1hdGgubWluKE4ubGVuZ3RoLDkpLHY9MDt2PFM7disrKWcud29yZHNbdl09Ti53b3Jkc1t2XTtpZihnLmxlbmd0aD1TLE4u'@;
put 'bGVuZ3RoPD05KXJldHVybiBOLndvcmRzWzBdPTAsdm9pZChOLmxlbmd0aD0xKTt2YXIgcD1OLndvcmRzWzldO2ZvcihnLndvcmRzW2cubGVuZ3RoKytdPXAmQyx2PTEwO3Y8Ti5sZW5ndGg7disrKXt2YXIgdz0wfE4ud29yZHNbdl07Ti53b3Jkc1t2LTEwXT0odyZDKTw8NHxwPj4+MjIscD13'@;
put 'fU4ud29yZHNbdi0xMF09cD4+Pj0yMixOLmxlbmd0aC09MD09PXAmJk4ubGVuZ3RoPjEwPzEwOjl9LGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihOKXtOLndvcmRzW04ubGVuZ3RoXT0wLE4ud29yZHNbTi5sZW5ndGgrMV09MCxOLmxlbmd0aCs9Mjtmb3IodmFyIGc9MCxDPTA7QzxOLmxl'@;
put 'bmd0aDtDKyspe3ZhciBTPTB8Ti53b3Jkc1tDXTtOLndvcmRzW0NdPTY3MTA4ODYzJihnKz05NzcqUyksZz02NCpTKyhnLzY3MTA4ODY0fDApfXJldHVybiAwPT09Ti53b3Jkc1tOLmxlbmd0aC0xXSYmKE4ubGVuZ3RoLS0sMD09PU4ud29yZHNbTi5sZW5ndGgtMV0mJk4ubGVuZ3RoLS0pLE59'@;
put 'LGxlKHVlLHNlKSxsZShjZSxzZSksbGUoRyxzZSksRy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oTil7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXt2YXIgUz0xOSooMHxOLndvcmRzW0NdKStnLHY9NjcxMDg4NjMmUztTPj4+PTI2LE4ud29yZHNbQ109dixnPVN9cmV0dXJuIDAh'@;
put 'PT1nJiYoTi53b3Jkc1tOLmxlbmd0aCsrXT1nKSxOfSxNLl9wcmltZT1mdW5jdGlvbihOKXtpZihvZVtOXSlyZXR1cm4gb2VbTl07dmFyIGc7aWYoImsyNTYiPT09TilnPW5ldyBoZTtlbHNlIGlmKCJwMjI0Ij09PU4pZz1uZXcgdWU7ZWxzZSBpZigicDE5MiI9PT1OKWc9bmV3IGNlO2Vsc2V7'@;
put 'aWYoInAyNTUxOSIhPT1OKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK04pO2c9bmV3IEd9cmV0dXJuIG9lW05dPWcsZ30sYi5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oTil7bSgwPT09Ti5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKE4u'@;
put 'cmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGIucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKE4sZyl7bSgwPT0oTi5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKE4ucmVkJiZOLnJlZD09PWcucmVkLCJyZWQg'@;
put 'd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGIucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKE4pLl9mb3JjZVJlZCh0aGlzKTooSShOLE4udW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksTil9LGIucHJvdG90'@;
put 'eXBlLm5lZz1mdW5jdGlvbihOKXtyZXR1cm4gTi5pc1plcm8oKT9OLmNsb25lKCk6dGhpcy5tLnN1YihOKS5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOLGcpe3RoaXMuX3ZlcmlmeTIoTixnKTt2YXIgQz1OLmFkZChnKTtyZXR1cm4gQy5jbXAodGhpcy5tKT49'@;
put 'MCYmQy5pc3ViKHRoaXMubSksQy5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oTixnKXt0aGlzLl92ZXJpZnkyKE4sZyk7dmFyIEM9Ti5pYWRkKGcpO3JldHVybiBDLmNtcCh0aGlzLm0pPj0wJiZDLmlzdWIodGhpcy5tKSxDfSxiLnByb3RvdHlwZS5zdWI9ZnVu'@;
put 'Y3Rpb24oTixnKXt0aGlzLl92ZXJpZnkyKE4sZyk7dmFyIEM9Ti5zdWIoZyk7cmV0dXJuIEMuY21wbigwKTwwJiZDLmlhZGQodGhpcy5tKSxDLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihOLGcpe3RoaXMuX3ZlcmlmeTIoTixnKTt2YXIgQz1OLmlzdWIoZyk7'@;
put 'cmV0dXJuIEMuY21wbigwKTwwJiZDLmlhZGQodGhpcy5tKSxDfSxiLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShOKSx0aGlzLmltb2QoTi51c2hsbihnKSl9LGIucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5'@;
put 'MihOLGcpLHRoaXMuaW1vZChOLmltdWwoZykpfSxiLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihOLGcpLHRoaXMuaW1vZChOLm11bChnKSl9LGIucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuaW11bChOLE4uY2xvbmUoKSl9'@;
put 'LGIucHJvdG90eXBlLnNxcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5tdWwoTixOKX0sYi5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihOKXtpZihOLmlzWmVybygpKXJldHVybiBOLmNsb25lKCk7dmFyIGc9dGhpcy5tLmFuZGxuKDMpO2lmKG0oZyUyPT0xKSwzPT09Zyl7dmFyIEM9dGhpcy5t'@;
put 'LmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhOLEMpfWZvcih2YXIgUz10aGlzLm0uc3VibigxKSx2PTA7IVMuaXNaZXJvKCkmJjA9PT1TLmFuZGxuKDEpOyl2KyssUy5pdXNocm4oMSk7bSghUy5pc1plcm8oKSk7dmFyIHA9bmV3IE0oMSkudG9SZWQodGhpcyksdz1w'@;
put 'LnJlZE5lZygpLEo9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG5lPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobmU9bmV3IE0oMipuZSpuZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG5lLEopLmNtcCh3KTspbmUucmVkSUFkZCh3KTtmb3IodmFyIGRlPXRoaXMucG93KG5lLFMpLGZlPXRo'@;
put 'aXMucG93KE4sUy5hZGRuKDEpLml1c2hybigxKSkseGU9dGhpcy5wb3coTixTKSxMZT12OzAhPT14ZS5jbXAocCk7KXtmb3IodmFyIEZlPXhlLE9lPTA7MCE9PUZlLmNtcChwKTtPZSsrKUZlPUZlLnJlZFNxcigpO20oT2U8TGUpO3ZhciBqZT10aGlzLnBvdyhkZSxuZXcgTSgxKS5pdXNobG4o'@;
put 'TGUtT2UtMSkpO2ZlPWZlLnJlZE11bChqZSksZGU9amUucmVkU3FyKCkseGU9eGUucmVkTXVsKGRlKSxMZT1PZX1yZXR1cm4gZmV9LGIucHJvdG90eXBlLmludm09ZnVuY3Rpb24oTil7dmFyIGc9Ti5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWcubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx0'@;
put 'aGlzLmltb2QoZykucmVkTmVnKCkpOnRoaXMuaW1vZChnKX0sYi5wcm90b3R5cGUucG93PWZ1bmN0aW9uKE4sZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PWcuY21wbigxKSlyZXR1cm4gTi5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1sw'@;
put 'XT1uZXcgTSgxKS50b1JlZCh0aGlzKSxTWzFdPU47Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sTik7dmFyIHA9U1swXSx3PTAsSj0wLG5lPWcuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PWcubGVuZ3RoLTE7dj49MDt2LS0pe2Zv'@;
put 'cih2YXIgZGU9Zy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpK'@;
put 'PTB9bmU9MjZ9cmV0dXJuIHB9LGIucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihOKXt2YXIgZz1OLnVtb2QodGhpcy5tKTtyZXR1cm4gZz09PU4/Zy5jbG9uZSgpOmd9LGIucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKE4pe3ZhciBnPU4uY2xvbmUoKTtyZXR1cm4gZy5yZWQ9'@;
put 'bnVsbCxnfSxNLm1vbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIG5ldyBEKE4pfSxsZShELGIpLEQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5pbW9kKE4udXNobG4odGhpcy5zaGlmdCkpfSxELnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihOKXt2YXIg'@;
put 'Zz10aGlzLmltb2QoTi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGcucmVkPW51bGwsZ30sRC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihOLGcpe2lmKE4uaXNaZXJvKCl8fGcuaXNaZXJvKCkpcmV0dXJuIE4ud29yZHNbMF09MCxOLmxlbmd0aD0xLE47dmFyIEM9Ti5pbXVsKGcpLFM9Qy5tYXNr'@;
put 'bih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksdj1DLmlzdWIoUykuaXVzaHJuKHRoaXMuc2hpZnQpLHA9djtyZXR1cm4gdi5jbXAodGhpcy5tKT49MD9wPXYuaXN1Yih0aGlzLm0pOnYuY21wbigwKTwwJiYocD12LmlhZGQodGhpcy5t'@;
put 'KSkscC5fZm9yY2VSZWQodGhpcyl9LEQucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLGcpe2lmKE4uaXNaZXJvKCl8fGcuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgQz1OLm11bChnKSxTPUMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1h'@;
put 'c2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHY9Qy5pc3ViKFMpLml1c2hybih0aGlzLnNoaWZ0KSxwPXY7cmV0dXJuIHYuY21wKHRoaXMubSk+PTA/cD12LmlzdWIodGhpcy5tKTp2LmNtcG4oMCk8MCYmKHA9di5pYWRkKHRoaXMubSkpLHAuX2ZvcmNlUmVkKHRoaXMpfSxELnByb3RvdHlw'@;
put 'ZS5pbnZtPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmltb2QoTi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sNjAwODI6KGF0LEllLEYpPT57dmFyIGFlO2Z1bmN0aW9uIHgobGUpe3RoaXMucmFuZD1sZX1pZihhdC5l'@;
put 'eHBvcnRzPWZ1bmN0aW9uKE0pe3JldHVybiBhZXx8KGFlPW5ldyB4KG51bGwpKSxhZS5nZW5lcmF0ZShNKX0sYXQuZXhwb3J0cy5SYW5kPXgseC5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuX3JhbmQoTSl9LHgucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKE0p'@;
put 'e2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKE0pO2Zvcih2YXIgTz1uZXcgVWludDhBcnJheShNKSxSPTA7UjxPLmxlbmd0aDtSKyspT1tSXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBPfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlw'@;
put 'dG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz94LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihNKXt2YXIgTz1uZXcgVWludDhBcnJheShNKTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKE8pLE99OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9t'@;
put 'VmFsdWVzP3gucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKE0pe3ZhciBPPW5ldyBVaW50OEFycmF5KE0pO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhPKSxPfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHgucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cg'@;
put 'bmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgbT1GKDc3OTAzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbS5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTt4LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihNKXtyZXR1cm4g'@;
put 'bS5yYW5kb21CeXRlcyhNKX19Y2F0Y2h7fX0sNjQwMzooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcjtmdW5jdGlvbiB4KHope2FlLmlzQnVmZmVyKHopfHwoej1hZS5mcm9tKHopKTtmb3IodmFyIEs9ei5sZW5ndGgvNHwwLEk9bmV3IEFycmF5KEspLGs9MDtrPEs7aysrKUlba109'@;
put 'ei5yZWFkVUludDMyQkUoNCprKTtyZXR1cm4gSX1mdW5jdGlvbiBtKHope2Zvcig7MDx6Lmxlbmd0aDt6KyspelswXT0wfWZ1bmN0aW9uIGxlKHosSyxJLGssRSl7Zm9yKHZhciB0ZSxvZSxzZSxoZSxqPUlbMF0sVj1JWzFdLEI9SVsyXSxZPUlbM10sWD16WzBdXktbMF0sVT16WzFdXktbMV0s'@;
put 'cT16WzJdXktbMl0sZWU9elszXV5LWzNdLHVlPTQsY2U9MTtjZTxFO2NlKyspdGU9altYPj4+MjRdXlZbVT4+PjE2JjI1NV1eQltxPj4+OCYyNTVdXllbMjU1JmVlXV5LW3VlKytdLG9lPWpbVT4+PjI0XV5WW3E+Pj4xNiYyNTVdXkJbZWU+Pj44JjI1NV1eWVsyNTUmWF1eS1t1ZSsrXSxzZT1q'@;
put 'W3E+Pj4yNF1eVltlZT4+PjE2JjI1NV1eQltYPj4+OCYyNTVdXllbMjU1JlVdXktbdWUrK10saGU9altlZT4+PjI0XV5WW1g+Pj4xNiYyNTVdXkJbVT4+PjgmMjU1XV5ZWzI1NSZxXV5LW3VlKytdLFg9dGUsVT1vZSxxPXNlLGVlPWhlO3JldHVybiB0ZT0oa1tYPj4+MjRdPDwyNHxrW1U+Pj4x'@;
put 'NiYyNTVdPDwxNnxrW3E+Pj44JjI1NV08PDh8a1syNTUmZWVdKV5LW3VlKytdLG9lPShrW1U+Pj4yNF08PDI0fGtbcT4+PjE2JjI1NV08PDE2fGtbZWU+Pj44JjI1NV08PDh8a1syNTUmWF0pXktbdWUrK10sc2U9KGtbcT4+PjI0XTw8MjR8a1tlZT4+PjE2JjI1NV08PDE2fGtbWD4+PjgmMjU1'@;
put 'XTw8OHxrWzI1NSZVXSleS1t1ZSsrXSxoZT0oa1tlZT4+PjI0XTw8MjR8a1tYPj4+MTYmMjU1XTw8MTZ8a1tVPj4+OCYyNTVdPDw4fGtbMjU1JnFdKV5LW3VlKytdLFt0ZT4+Pj0wLG9lPj4+PTAsc2U+Pj49MCxoZT4+Pj0wXX12YXIgTT1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0s'@;
put 'Tz1mdW5jdGlvbigpe2Zvcih2YXIgej1uZXcgQXJyYXkoMjU2KSxLPTA7SzwyNTY7SysrKXpbS109SzwxMjg/Szw8MTpLPDwxXjI4Mztmb3IodmFyIEk9W10saz1bXSxFPVtbXSxbXSxbXSxbXV0saj1bW10sW10sW10sW11dLFY9MCxCPTAsWT0wO1k8MjU2OysrWSl7dmFyIFg9Ql5CPDwxXkI8'@;
put 'PDJeQjw8M15CPDw0O0lbVl09WD1YPj4+OF4yNTUmWF45OSxrW1hdPVY7dmFyIFU9eltWXSxxPXpbVV0sZWU9eltxXSx0ZT0yNTcqeltYXV4xNjg0MzAwOCpYO0VbMF1bVl09dGU8PDI0fHRlPj4+OCxFWzFdW1ZdPXRlPDwxNnx0ZT4+PjE2LEVbMl1bVl09dGU8PDh8dGU+Pj4yNCxFWzNdW1Zd'@;
put 'PXRlLGpbMF1bWF09KHRlPTE2ODQzMDA5KmVlXjY1NTM3KnFeMjU3KlVeMTY4NDMwMDgqVik8PDI0fHRlPj4+OCxqWzFdW1hdPXRlPDwxNnx0ZT4+PjE2LGpbMl1bWF09dGU8PDh8dGU+Pj4yNCxqWzNdW1hdPXRlLDA9PT1WP1Y9Qj0xOihWPVVeelt6W3pbZWVeVV1dXSxCXj16W3pbQl1dKX1y'@;
put 'ZXR1cm57U0JPWDpJLElOVl9TQk9YOmssU1VCX01JWDpFLElOVl9TVUJfTUlYOmp9fSgpO2Z1bmN0aW9uIFIoeil7dGhpcy5fa2V5PXgoeiksdGhpcy5fcmVzZXQoKX1SLmJsb2NrU2l6ZT0xNixSLmtleVNpemU9MzIsUi5wcm90b3R5cGUuYmxvY2tTaXplPVIuYmxvY2tTaXplLFIucHJvdG90'@;
put 'eXBlLmtleVNpemU9Ui5rZXlTaXplLFIucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgej10aGlzLl9rZXksSz16Lmxlbmd0aCxJPUsrNixrPTQqKEkrMSksRT1bXSxqPTA7ajxLO2orKylFW2pdPXpbal07Zm9yKGo9SztqPGs7aisrKXt2YXIgVj1FW2otMV07aiVLPT0wPyhW'@;
put 'PU8uU0JPWFsoVj1WPDw4fFY+Pj4yNCk+Pj4yNF08PDI0fE8uU0JPWFtWPj4+MTYmMjU1XTw8MTZ8Ty5TQk9YW1Y+Pj44JjI1NV08PDh8Ty5TQk9YWzI1NSZWXSxWXj1NW2ovS3wwXTw8MjQpOks+NiYmaiVLPT00JiYoVj1PLlNCT1hbVj4+PjI0XTw8MjR8Ty5TQk9YW1Y+Pj4xNiYyNTVdPDwx'@;
put 'NnxPLlNCT1hbVj4+PjgmMjU1XTw8OHxPLlNCT1hbMjU1JlZdKSxFW2pdPUVbai1LXV5WfWZvcih2YXIgQj1bXSxZPTA7WTxrO1krKyl7dmFyIFg9ay1ZLFU9RVtYLShZJTQ/MDo0KV07QltZXT1ZPDR8fFg8PTQ/VTpPLklOVl9TVUJfTUlYWzBdW08uU0JPWFtVPj4+MjRdXV5PLklOVl9TVUJf'@;
put 'TUlYWzFdW08uU0JPWFtVPj4+MTYmMjU1XV1eTy5JTlZfU1VCX01JWFsyXVtPLlNCT1hbVT4+PjgmMjU1XV1eTy5JTlZfU1VCX01JWFszXVtPLlNCT1hbMjU1JlVdXX10aGlzLl9uUm91bmRzPUksdGhpcy5fa2V5U2NoZWR1bGU9RSx0aGlzLl9pbnZLZXlTY2hlZHVsZT1CfSxSLnByb3RvdHlw'@;
put 'ZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oeil7cmV0dXJuIGxlKHo9eCh6KSx0aGlzLl9rZXlTY2hlZHVsZSxPLlNVQl9NSVgsTy5TQk9YLHRoaXMuX25Sb3VuZHMpfSxSLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oeil7dmFyIEs9dGhpcy5lbmNyeXB0QmxvY2tSYXcoeiks'@;
put 'ST1hZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEkud3JpdGVVSW50MzJCRShLWzBdLDApLEkud3JpdGVVSW50MzJCRShLWzFdLDQpLEkud3JpdGVVSW50MzJCRShLWzJdLDgpLEkud3JpdGVVSW50MzJCRShLWzNdLDEyKSxJfSxSLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oeil7'@;
put 'dmFyIEs9KHo9eCh6KSlbMV07elsxXT16WzNdLHpbM109Szt2YXIgST1sZSh6LHRoaXMuX2ludktleVNjaGVkdWxlLE8uSU5WX1NVQl9NSVgsTy5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxrPWFlLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gay53cml0ZVVJbnQzMkJFKElbMF0sMCksay53cml0'@;
put 'ZVVJbnQzMkJFKElbM10sNCksay53cml0ZVVJbnQzMkJFKElbMl0sOCksay53cml0ZVVJbnQzMkJFKElbMV0sMTIpLGt9LFIucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7bSh0aGlzLl9rZXlTY2hlZHVsZSksbSh0aGlzLl9pbnZLZXlTY2hlZHVsZSksbSh0aGlzLl9rZXkpfSxhdC5leHBv'@;
put 'cnRzLkFFUz1SfSw1NjA4NzooYXQsSWUsRik9Pnt2YXIgYWU9Rig2NDAzKSx4PUYoODQzKS5CdWZmZXIsbT1GKDg2NDIwKSxsZT1GKDY2Njk4KSxNPUYoMTUwMyksTz1GKDYzNjM2KSxSPUYoOTEwNyk7ZnVuY3Rpb24gSShrLEUsaixWKXttLmNhbGwodGhpcyk7dmFyIEI9eC5hbGxvYyg0LDAp'@;
put 'O3RoaXMuX2NpcGhlcj1uZXcgYWUuQUVTKEUpO3ZhciBZPXRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soQik7dGhpcy5fZ2hhc2g9bmV3IE0oWSksaj1mdW5jdGlvbiBLKGssRSxqKXtpZigxMj09PUUubGVuZ3RoKXJldHVybiBrLl9maW5JRD14LmNvbmNhdChbRSx4LmZyb20oWzAsMCwwLDFd'@;
put 'KV0pLHguY29uY2F0KFtFLHguZnJvbShbMCwwLDAsMl0pXSk7dmFyIFY9bmV3IE0oaiksQj1FLmxlbmd0aCxZPUIlMTY7Vi51cGRhdGUoRSksWSYmVi51cGRhdGUoeC5hbGxvYyhZPTE2LVksMCkpLFYudXBkYXRlKHguYWxsb2MoOCwwKSk7dmFyIFg9OCpCLFU9eC5hbGxvYyg4KTtVLndyaXRl'@;
put 'VUludEJFKFgsMCw4KSxWLnVwZGF0ZShVKSxrLl9maW5JRD1WLnN0YXRlO3ZhciBxPXguZnJvbShrLl9maW5JRCk7cmV0dXJuIFIocSkscX0odGhpcyxqLFkpLHRoaXMuX3ByZXY9eC5mcm9tKGopLHRoaXMuX2NhY2hlPXguYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9eC5hbGxvY1Vu'@;
put 'c2FmZSgwKSx0aGlzLl9kZWNyeXB0PVYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9ayx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfWxlKEksbSksSS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihrKXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVu'@;
put 'KXt2YXIgRT0xNi10aGlzLl9hbGVuJTE2O0U8MTYmJihFPXguYWxsb2MoRSwwKSx0aGlzLl9naGFzaC51cGRhdGUoRSkpfXRoaXMuX2NhbGxlZD0hMDt2YXIgaj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxrKTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/azpqKSx0'@;
put 'aGlzLl9sZW4rPWsubGVuZ3RoLGp9LEkucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIGs9Tyh0aGlz'@;
put 'Ll9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiB6KGssRSl7dmFyIGo9MDtrLmxlbmd0aCE9PUUubGVuZ3RoJiZqKys7Zm9yKHZhciBWPU1hdGgubWlu'@;
put 'KGsubGVuZ3RoLEUubGVuZ3RoKSxCPTA7QjxWOysrQilqKz1rW0JdXkVbQl07cmV0dXJuIGp9KGssdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPWssdGhpcy5fY2lw'@;
put 'aGVyLnNjcnViKCl9LEkucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwheC5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJu'@;
put 'IHRoaXMuX2F1dGhUYWd9LEkucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oRSl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9RX0sSS5wcm90b3R5cGUu'@;
put 'c2V0QUFEPWZ1bmN0aW9uKEUpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShFKSx0aGlzLl9hbGVuKz1FLmxlbmd0aH0sYXQuZXhwb3J0cz1JfSw4MjQ4OTooYXQs'@;
put 'SWUsRik9Pnt2YXIgYWU9RigxMjY4OSkseD1GKDUwMDQ2KSxtPUYoNDQ5NDYpO0llLmNyZWF0ZUNpcGhlcj1JZS5DaXBoZXI9YWUuY3JlYXRlQ2lwaGVyLEllLmNyZWF0ZUNpcGhlcml2PUllLkNpcGhlcml2PWFlLmNyZWF0ZUNpcGhlcml2LEllLmNyZWF0ZURlY2lwaGVyPUllLkRlY2lwaGVy'@;
put 'PXguY3JlYXRlRGVjaXBoZXIsSWUuY3JlYXRlRGVjaXBoZXJpdj1JZS5EZWNpcGhlcml2PXguY3JlYXRlRGVjaXBoZXJpdixJZS5saXN0Q2lwaGVycz1JZS5nZXRDaXBoZXJzPWZ1bmN0aW9uIGxlKCl7cmV0dXJuIE9iamVjdC5rZXlzKG0pfX0sNTAwNDY6KGF0LEllLEYpPT57dmFyIGFlPUYo'@;
put 'NTYwODcpLHg9Rig4NDMpLkJ1ZmZlcixtPUYoMTI0MjEpLGxlPUYoODkzNTQpLE09Rig4NjQyMCksTz1GKDY0MDMpLFI9RigzNjUwNSk7ZnVuY3Rpb24gSyhWLEIsWSl7TS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBJLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgTy5B'@;
put 'RVMoQiksdGhpcy5fcHJldj14LmZyb20oWSksdGhpcy5fbW9kZT1WLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIEkoKXt0aGlzLmNhY2hlPXguYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gRShWLEIsWSl7dmFyIFg9bVtWLnRvTG93ZXJDYXNlKCldO2lmKCFYKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWSYmKFk9eC5mcm9tKFkpKSwiR0NNIiE9PVgubW9kZSYmWS5sZW5ndGghPT1YLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrWS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBl'@;
put 'b2YgQiYmKEI9eC5mcm9tKEIpKSxCLmxlbmd0aCE9PVgua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrQi5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09WC50eXBlP25ldyBsZShYLm1vZHVsZSxCLFksITApOiJhdXRoIj09PVgudHlwZT9uZXcgYWUoWC5t'@;
put 'b2R1bGUsQixZLCEwKTpuZXcgSyhYLm1vZHVsZSxCLFkpfUYoNjY2OTgpKEssTSksSy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9jYWNoZS5hZGQoVik7Zm9yKHZhciBCLFksWD1bXTtCPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KVk9dGhpcy5fbW9k'@;
put 'ZS5kZWNyeXB0KHRoaXMsQiksWC5wdXNoKFkpO3JldHVybiB4LmNvbmNhdChYKX0sSy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24gayhWKXt2YXIgQj1WWzE1XTtpZihCPDF8'@;
put 'fEI+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciBZPS0xOysrWTxCOylpZihWW1krKDE2LUIpXSE9PUIpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1CKXJldHVybiBWLnNsaWNlKDAsMTYtQil9KHRo'@;
put 'aXMuX21vZGUuZGVjcnlwdCh0aGlzLFYpKTtpZihWKXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LEsucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVYsdGhpc30sSS5wcm90'@;
put 'b3R5cGUuYWRkPWZ1bmN0aW9uKFYpe3RoaXMuY2FjaGU9eC5jb25jYXQoW3RoaXMuY2FjaGUsVl0pfSxJLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oVil7dmFyIEI7aWYoVil7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIEI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hl'@;
put 'PXRoaXMuY2FjaGUuc2xpY2UoMTYpLEJ9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIEI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLEI7cmV0dXJuIG51bGx9LEkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYo'@;
put 'dGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LEllLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIGooVixCKXt2YXIgWT1tW1YudG9Mb3dlckNhc2UoKV07aWYoIVkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIFg9UihCLCExLFkua2V5LFku'@;
put 'aXYpO3JldHVybiBFKFYsWC5rZXksWC5pdil9LEllLmNyZWF0ZURlY2lwaGVyaXY9RX0sMTI2ODk6KGF0LEllLEYpPT57dmFyIGFlPUYoMTI0MjEpLHg9Rig1NjA4NyksbT1GKDg0MykuQnVmZmVyLGxlPUYoODkzNTQpLE09Rig4NjQyMCksTz1GKDY0MDMpLFI9RigzNjUwNSk7ZnVuY3Rpb24g'@;
put 'SyhWLEIsWSl7TS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBrLHRoaXMuX2NpcGhlcj1uZXcgTy5BRVMoQiksdGhpcy5fcHJldj1tLmZyb20oWSksdGhpcy5fbW9kZT1WLHRoaXMuX2F1dG9wYWRkaW5nPSEwfUYoNjY2OTgpKEssTSksSy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihW'@;
put 'KXt0aGlzLl9jYWNoZS5hZGQoVik7Zm9yKHZhciBCLFksWD1bXTtCPXRoaXMuX2NhY2hlLmdldCgpOylZPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEIpLFgucHVzaChZKTtyZXR1cm4gbS5jb25jYXQoWCl9O3ZhciBJPW0uYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIGsoKXt0aGlzLmNhY2hlPW0u'@;
put 'YWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gRShWLEIsWSl7dmFyIFg9YWVbVi50b0xvd2VyQ2FzZSgpXTtpZighWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIEImJihCPW0uZnJvbShCKSksQi5sZW5ndGghPT1YLmtleS84KXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK0IubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPW0uZnJvbShZKSksIkdDTSIhPT1YLm1vZGUmJlkubGVuZ3RoIT09WC5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK1kubGVu'@;
put 'Z3RoKTtyZXR1cm4ic3RyZWFtIj09PVgudHlwZT9uZXcgbGUoWC5tb2R1bGUsQixZKToiYXV0aCI9PT1YLnR5cGU/bmV3IHgoWC5tb2R1bGUsQixZKTpuZXcgSyhYLm1vZHVsZSxCLFkpfUsucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBWPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYo'@;
put 'dGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFY9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsViksdGhpcy5fY2lwaGVyLnNjcnViKCksVjtpZighVi5lcXVhbHMoSSkpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgi'@;
put 'KX0sSy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVil7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVix0aGlzfSxrLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVil7dGhpcy5jYWNoZT1tLmNvbmNhdChbdGhpcy5jYWNoZSxWXSl9LGsucHJvdG90eXBlLmdldD1mdW5jdGlv'@;
put 'bigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgVj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFZ9cmV0dXJuIG51bGx9LGsucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBWPTE2LXRoaXMuY2FjaGUu'@;
put 'bGVuZ3RoLEI9bS5hbGxvY1Vuc2FmZShWKSxZPS0xOysrWTxWOylCLndyaXRlVUludDgoVixZKTtyZXR1cm4gbS5jb25jYXQoW3RoaXMuY2FjaGUsQl0pfSxJZS5jcmVhdGVDaXBoZXJpdj1FLEllLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBqKFYsQil7dmFyIFk9YWVbVi50b0xvd2VyQ2FzZSgp'@;
put 'XTtpZighWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgWD1SKEIsITEsWS5rZXksWS5pdik7cmV0dXJuIEUoVixYLmtleSxYLml2KX19LDE1MDM6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXIseD1hZS5hbGxvYygxNiwwKTtmdW5jdGlvbiBs'@;
put 'ZShPKXt2YXIgUj1hZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIFIud3JpdGVVSW50MzJCRShPWzBdPj4+MCwwKSxSLndyaXRlVUludDMyQkUoT1sxXT4+PjAsNCksUi53cml0ZVVJbnQzMkJFKE9bMl0+Pj4wLDgpLFIud3JpdGVVSW50MzJCRShPWzNdPj4+MCwxMiksUn1mdW5jdGlvbiBNKE8p'@;
put 'e3RoaXMuaD1PLHRoaXMuc3RhdGU9YWUuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1hZS5hbGxvY1Vuc2FmZSgwKX1NLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihPKXtmb3IodmFyIFI9LTE7KytSPE8ubGVuZ3RoOyl0aGlzLnN0YXRlW1JdXj1PW1JdO3RoaXMuX211bHRpcGx5KCl9LE0ucHJv'@;
put 'dG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgeixJLE89ZnVuY3Rpb24gbShPKXtyZXR1cm5bTy5yZWFkVUludDMyQkUoMCksTy5yZWFkVUludDMyQkUoNCksTy5yZWFkVUludDMyQkUoOCksTy5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxSPVswLDAsMCwwXSxrPS0xOysr'@;
put 'azwxMjg7KXtmb3IoMCE9KHRoaXMuc3RhdGVbfn4oay84KV0mMTw8Ny1rJTgpJiYoUlswXV49T1swXSxSWzFdXj1PWzFdLFJbMl1ePU9bMl0sUlszXV49T1szXSksST0wIT0oMSZPWzNdKSx6PTM7ej4wO3otLSlPW3pdPU9bel0+Pj4xfCgxJk9bei0xXSk8PDMxO09bMF09T1swXT4+PjEsSSYm'@;
put 'KE9bMF09T1swXV4yMjU8PDI0KX10aGlzLnN0YXRlPWxlKFIpfSxNLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyl7dGhpcy5jYWNoZT1hZS5jb25jYXQoW3RoaXMuY2FjaGUsT10pO2Zvcih2YXIgUjt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KVI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0'@;
put 'aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goUil9LE0ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKE8sUil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKGFlLmNvbmNhdChbdGhpcy5jYWNoZSx4XSwxNikpLHRoaXMuZ2hhc2gobGUoWzAsTyww'@;
put 'LFJdKSksdGhpcy5zdGF0ZX0sYXQuZXhwb3J0cz1NfSw5MTA3OmF0PT57YXQuZXhwb3J0cz1mdW5jdGlvbiBJZShGKXtmb3IodmFyIHgsYWU9Ri5sZW5ndGg7YWUtLTspe2lmKDI1NSE9PSh4PUYucmVhZFVJbnQ4KGFlKSkpe3grKyxGLndyaXRlVUludDgoeCxhZSk7YnJlYWt9Ri53cml0ZVVJ'@;
put 'bnQ4KDAsYWUpfX19LDMxMTc1OihhdCxJZSxGKT0+e3ZhciBhZT1GKDYzNjM2KTtJZS5lbmNyeXB0PWZ1bmN0aW9uKHgsbSl7dmFyIGxlPWFlKG0seC5fcHJldik7cmV0dXJuIHguX3ByZXY9eC5fY2lwaGVyLmVuY3J5cHRCbG9jayhsZSkseC5fcHJldn0sSWUuZGVjcnlwdD1mdW5jdGlvbih4'@;
put 'LG0pe3ZhciBsZT14Ll9wcmV2O3guX3ByZXY9bTt2YXIgTT14Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKG0pO3JldHVybiBhZShNLGxlKX19LDQzNjMxOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig2MzYzNik7ZnVuY3Rpb24gbShsZSxNLE8pe3ZhciBSPU0ubGVuZ3RoLHo9'@;
put 'eChNLGxlLl9jYWNoZSk7cmV0dXJuIGxlLl9jYWNoZT1sZS5fY2FjaGUuc2xpY2UoUiksbGUuX3ByZXY9YWUuY29uY2F0KFtsZS5fcHJldixPP006el0pLHp9SWUuZW5jcnlwdD1mdW5jdGlvbihsZSxNLE8pe2Zvcih2YXIgeixSPWFlLmFsbG9jVW5zYWZlKDApO00ubGVuZ3RoOyl7aWYoMD09'@;
put 'PWxlLl9jYWNoZS5sZW5ndGgmJihsZS5fY2FjaGU9bGUuX2NpcGhlci5lbmNyeXB0QmxvY2sobGUuX3ByZXYpLGxlLl9wcmV2PWFlLmFsbG9jVW5zYWZlKDApKSwhKGxlLl9jYWNoZS5sZW5ndGg8PU0ubGVuZ3RoKSl7Uj1hZS5jb25jYXQoW1IsbShsZSxNLE8pXSk7YnJlYWt9Uj1hZS5jb25j'@;
put 'YXQoW1IsbShsZSxNLnNsaWNlKDAsej1sZS5fY2FjaGUubGVuZ3RoKSxPKV0pLE09TS5zbGljZSh6KX1yZXR1cm4gUn19LDMzODkyOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyO2Z1bmN0aW9uIHgobGUsTSxPKXtmb3IodmFyIGssRSx6PS0xLEk9MDsrK3o8ODspSSs9KDEyOCYo'@;
put 'RT1sZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhsZS5fcHJldilbMF1eKGs9TSYxPDw3LXo/MTI4OjApKSk+PnolOCxsZS5fcHJldj1tKGxlLl9wcmV2LE8/azpFKTtyZXR1cm4gSX1mdW5jdGlvbiBtKGxlLE0pe3ZhciBPPWxlLmxlbmd0aCxSPS0xLHo9YWUuYWxsb2NVbnNhZmUobGUubGVuZ3Ro'@;
put 'KTtmb3IobGU9YWUuY29uY2F0KFtsZSxhZS5mcm9tKFtNXSldKTsrK1I8TzspeltSXT1sZVtSXTw8MXxsZVtSKzFdPj43O3JldHVybiB6fUllLmVuY3J5cHQ9ZnVuY3Rpb24obGUsTSxPKXtmb3IodmFyIFI9TS5sZW5ndGgsej1hZS5hbGxvY1Vuc2FmZShSKSxLPS0xOysrSzxSOyl6W0tdPXgo'@;
put 'bGUsTVtLXSxPKTtyZXR1cm4gen19LDM2Nzg3OihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyO2Z1bmN0aW9uIHgobSxsZSxNKXt2YXIgUj1tLl9jaXBoZXIuZW5jcnlwdEJsb2NrKG0uX3ByZXYpWzBdXmxlO3JldHVybiBtLl9wcmV2PWFlLmNvbmNhdChbbS5fcHJldi5zbGljZSgx'@;
put 'KSxhZS5mcm9tKFtNP2xlOlJdKV0pLFJ9SWUuZW5jcnlwdD1mdW5jdGlvbihtLGxlLE0pe2Zvcih2YXIgTz1sZS5sZW5ndGgsUj1hZS5hbGxvY1Vuc2FmZShPKSx6PS0xOysrejxPOylSW3pdPXgobSxsZVt6XSxNKTtyZXR1cm4gUn19LDg1MjY4OihhdCxJZSxGKT0+e3ZhciBhZT1GKDYzNjM2'@;
put 'KSx4PUYoODQzKS5CdWZmZXIsbT1GKDkxMDcpO2Z1bmN0aW9uIGxlKE8pe3ZhciBSPU8uX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoTy5fcHJldik7cmV0dXJuIG0oTy5fcHJldiksUn1JZS5lbmNyeXB0PWZ1bmN0aW9uKE8sUil7dmFyIHo9TWF0aC5jZWlsKFIubGVuZ3RoLzE2KSxLPU8uX2Nh'@;
put 'Y2hlLmxlbmd0aDtPLl9jYWNoZT14LmNvbmNhdChbTy5fY2FjaGUseC5hbGxvY1Vuc2FmZSgxNip6KV0pO2Zvcih2YXIgST0wO0k8ejtJKyspe3ZhciBrPWxlKE8pLEU9SysxNipJO08uX2NhY2hlLndyaXRlVUludDMyQkUoa1swXSxFKzApLE8uX2NhY2hlLndyaXRlVUludDMyQkUoa1sxXSxF'@;
put 'KzQpLE8uX2NhY2hlLndyaXRlVUludDMyQkUoa1syXSxFKzgpLE8uX2NhY2hlLndyaXRlVUludDMyQkUoa1szXSxFKzEyKX12YXIgaj1PLl9jYWNoZS5zbGljZSgwLFIubGVuZ3RoKTtyZXR1cm4gTy5fY2FjaGU9Ty5fY2FjaGUuc2xpY2UoUi5sZW5ndGgpLGFlKFIsail9fSw0NTk5NTooYXQs'@;
put 'SWUpPT57SWUuZW5jcnlwdD1mdW5jdGlvbihGLGFlKXtyZXR1cm4gRi5fY2lwaGVyLmVuY3J5cHRCbG9jayhhZSl9LEllLmRlY3J5cHQ9ZnVuY3Rpb24oRixhZSl7cmV0dXJuIEYuX2NpcGhlci5kZWNyeXB0QmxvY2soYWUpfX0sMTI0MjE6KGF0LEllLEYpPT57dmFyIGFlPXtFQ0I6Rig0NTk5'@;
put 'NSksQ0JDOkYoMzExNzUpLENGQjpGKDQzNjMxKSxDRkI4OkYoMzY3ODcpLENGQjE6RigzMzg5MiksT0ZCOkYoMzQ1MzIpLENUUjpGKDg1MjY4KSxHQ006Rig4NTI2OCl9LHg9Rig0NDk0Nik7Zm9yKHZhciBtIGluIHgpeFttXS5tb2R1bGU9YWVbeFttXS5tb2RlXTthdC5leHBvcnRzPXh9LDM0'@;
put 'NTMyOihhdCxJZSxGKT0+e3ZhciBhZT1GKDYzNjM2KTtmdW5jdGlvbiB4KG0pe3JldHVybiBtLl9wcmV2PW0uX2NpcGhlci5lbmNyeXB0QmxvY2sobS5fcHJldiksbS5fcHJldn1JZS5lbmNyeXB0PWZ1bmN0aW9uKG0sbGUpe2Zvcig7bS5fY2FjaGUubGVuZ3RoPGxlLmxlbmd0aDspbS5fY2Fj'@;
put 'aGU9QnVmZmVyLmNvbmNhdChbbS5fY2FjaGUseChtKV0pO3ZhciBNPW0uX2NhY2hlLnNsaWNlKDAsbGUubGVuZ3RoKTtyZXR1cm4gbS5fY2FjaGU9bS5fY2FjaGUuc2xpY2UobGUubGVuZ3RoKSxhZShsZSxNKX19LDg5MzU0OihhdCxJZSxGKT0+e3ZhciBhZT1GKDY0MDMpLHg9Rig4NDMpLkJ1'@;
put 'ZmZlcixtPUYoODY0MjApO2Z1bmN0aW9uIE0oTyxSLHosSyl7bS5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgYWUuQUVTKFIpLHRoaXMuX3ByZXY9eC5mcm9tKHopLHRoaXMuX2NhY2hlPXguYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9eC5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9k'@;
put 'ZWNyeXB0PUssdGhpcy5fbW9kZT1PfUYoNjY2OTgpKE0sbSksTS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsTyx0aGlzLl9kZWNyeXB0KX0sTS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnVi'@;
put 'KCl9LGF0LmV4cG9ydHM9TX0sMjU2MDA6KGF0LEllLEYpPT57dmFyIGFlPUYoMTQ5NDgpLHg9Rig4MjQ4OSksbT1GKDEyNDIxKSxsZT1GKDg5NDAyKSxNPUYoMzY1MDUpO2Z1bmN0aW9uIHooayxFLGope2lmKGs9ay50b0xvd2VyQ2FzZSgpLG1ba10pcmV0dXJuIHguY3JlYXRlQ2lwaGVyaXYo'@;
put 'ayxFLGopO2lmKGxlW2tdKXJldHVybiBuZXcgYWUoe2tleTpFLGl2OmosbW9kZTprfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24gSyhrLEUsail7aWYoaz1rLnRvTG93ZXJDYXNlKCksbVtrXSlyZXR1cm4geC5jcmVhdGVEZWNpcGhlcml2KGss'@;
put 'RSxqKTtpZihsZVtrXSlyZXR1cm4gbmV3IGFlKHtrZXk6RSxpdjpqLG1vZGU6ayxkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9SWUuY3JlYXRlQ2lwaGVyPUllLkNpcGhlcj1mdW5jdGlvbiBPKGssRSl7dmFyIGosVjtpZihrPWsudG9Mb3dl'@;
put 'ckNhc2UoKSxtW2tdKWo9bVtrXS5rZXksVj1tW2tdLml2O2Vsc2V7aWYoIWxlW2tdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2o9OCpsZVtrXS5rZXksVj1sZVtrXS5pdn12YXIgQj1NKEUsITEsaixWKTtyZXR1cm4geihrLEIua2V5LEIuaXYpfSxJZS5jcmVh'@;
put 'dGVDaXBoZXJpdj1JZS5DaXBoZXJpdj16LEllLmNyZWF0ZURlY2lwaGVyPUllLkRlY2lwaGVyPWZ1bmN0aW9uIFIoayxFKXt2YXIgaixWO2lmKGs9ay50b0xvd2VyQ2FzZSgpLG1ba10paj1tW2tdLmtleSxWPW1ba10uaXY7ZWxzZXtpZighbGVba10pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52'@;
put 'YWxpZCBzdWl0ZSB0eXBlIik7aj04KmxlW2tdLmtleSxWPWxlW2tdLml2fXZhciBCPU0oRSwhMSxqLFYpO3JldHVybiBLKGssQi5rZXksQi5pdil9LEllLmNyZWF0ZURlY2lwaGVyaXY9SWUuRGVjaXBoZXJpdj1LLEllLmxpc3RDaXBoZXJzPUllLmdldENpcGhlcnM9ZnVuY3Rpb24gSSgpe3Jl'@;
put 'dHVybiBPYmplY3Qua2V5cyhsZSkuY29uY2F0KHguZ2V0Q2lwaGVycygpKX19LDE0OTQ4OihhdCxJZSxGKT0+e3ZhciBhZT1GKDg2NDIwKSx4PUYoNDAxMzIpLG09Rig2NjY5OCksbGU9Rig4NDMpLkJ1ZmZlcixNPXsiZGVzLWVkZTMtY2JjIjp4LkNCQy5pbnN0YW50aWF0ZSh4LkVERSksImRl'@;
put 'cy1lZGUzIjp4LkVERSwiZGVzLWVkZS1jYmMiOnguQ0JDLmluc3RhbnRpYXRlKHguRURFKSwiZGVzLWVkZSI6eC5FREUsImRlcy1jYmMiOnguQ0JDLmluc3RhbnRpYXRlKHguREVTKSwiZGVzLWVjYiI6eC5ERVN9O2Z1bmN0aW9uIE8oUil7YWUuY2FsbCh0aGlzKTt2YXIgSSx6PVIubW9kZS50'@;
put 'b0xvd2VyQ2FzZSgpLEs9TVt6XTtJPVIuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBrPVIua2V5O2xlLmlzQnVmZmVyKGspfHwoaz1sZS5mcm9tKGspKSwoImRlcy1lZGUiPT09enx8ImRlcy1lZGUtY2JjIj09PXopJiYoaz1sZS5jb25jYXQoW2ssay5zbGljZSgwLDgpXSkpO3Zh'@;
put 'ciBFPVIuaXY7bGUuaXNCdWZmZXIoRSl8fChFPWxlLmZyb20oRSkpLHRoaXMuX2Rlcz1LLmNyZWF0ZSh7a2V5OmssaXY6RSx0eXBlOkl9KX1NLmRlcz1NWyJkZXMtY2JjIl0sTS5kZXMzPU1bImRlcy1lZGUzLWNiYyJdLGF0LmV4cG9ydHM9TyxtKE8sYWUpLE8ucHJvdG90eXBlLl91cGRhdGU9'@;
put 'ZnVuY3Rpb24oUil7cmV0dXJuIGxlLmZyb20odGhpcy5fZGVzLnVwZGF0ZShSKSl9LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBsZS5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDg5NDAyOihhdCxJZSk9PntJZVsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxJZVsiZGVz'@;
put 'LWNiYyJdPUllLmRlcz17a2V5OjgsaXY6OH0sSWVbImRlcy1lZGUzLWNiYyJdPUllLmRlczM9e2tleToyNCxpdjo4fSxJZVsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LEllWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sSWVbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSw3MTk0Njoo'@;
put 'YXQsSWUsRik9Pnt2YXIgYWU9Rig2MjY2MikseD1GKDQ0MDE5KTtmdW5jdGlvbiBsZShPKXt2YXIgeixSPU8ubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97ej1uZXcgYWUoeChSKSl9d2hpbGUoei5jbXAoTy5tb2R1bHVzKT49MHx8IXoudW1vZChPLnByaW1lMSl8fCF6LnVtb2QoTy5wcmltZTIp'@;
put 'KTtyZXR1cm4gen1mdW5jdGlvbiBNKE8sUil7dmFyIHo9ZnVuY3Rpb24gbShPKXt2YXIgUj1sZShPKTtyZXR1cm57YmxpbmRlcjpSLnRvUmVkKGFlLm1vbnQoTy5tb2R1bHVzKSkucmVkUG93KG5ldyBhZShPLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpSLmludm0oTy5t'@;
put 'b2R1bHVzKX19KFIpLEs9Ui5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxJPW5ldyBhZShPKS5tdWwoei5ibGluZGVyKS51bW9kKFIubW9kdWx1cyksaz1JLnRvUmVkKGFlLm1vbnQoUi5wcmltZTEpKSxFPUkudG9SZWQoYWUubW9udChSLnByaW1lMikpLGo9Ui5jb2VmZmljaWVudCxWPVIucHJpbWUx'@;
put 'LEI9Ui5wcmltZTIsWT1rLnJlZFBvdyhSLmV4cG9uZW50MSkuZnJvbVJlZCgpLFg9RS5yZWRQb3coUi5leHBvbmVudDIpLmZyb21SZWQoKSxVPVkuaXN1YihYKS5pbXVsKGopLnVtb2QoVikuaW11bChCKTtyZXR1cm4gWC5pYWRkKFUpLmltdWwoei51bmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVz'@;
put 'KS50b0FycmF5TGlrZShCdWZmZXIsImJlIixLKX1NLmdldHI9bGUsYXQuZXhwb3J0cz1NfSw4MTY5OTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1GKDc1MjA3KX0sMjc2ODY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig5NjM2'@;
put 'MiksbT1GKDk2NzQ1KSxsZT1GKDY2Njk4KSxNPUYoNjM2MDIpLE89Rig1MTE3MyksUj1GKDc1MjA3KTtmdW5jdGlvbiB6KEUpe20uV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgaj1SW0VdO2lmKCFqKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hU'@;
put 'eXBlPWouaGFzaCx0aGlzLl9oYXNoPXgoai5oYXNoKSx0aGlzLl90YWc9ai5pZCx0aGlzLl9zaWduVHlwZT1qLnNpZ259ZnVuY3Rpb24gSyhFKXttLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGo9UltFXTtpZighail0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0'@;
put 'aGlzLl9oYXNoPXgoai5oYXNoKSx0aGlzLl90YWc9ai5pZCx0aGlzLl9zaWduVHlwZT1qLnNpZ259ZnVuY3Rpb24gSShFKXtyZXR1cm4gbmV3IHooRSl9ZnVuY3Rpb24gayhFKXtyZXR1cm4gbmV3IEsoRSl9T2JqZWN0LmtleXMoUikuZm9yRWFjaChmdW5jdGlvbihFKXtSW0VdLmlkPWFlLmZy'@;
put 'b20oUltFXS5pZCwiaGV4IiksUltFLnRvTG93ZXJDYXNlKCldPVJbRV19KSxsZSh6LG0uV3JpdGFibGUpLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihqLFYsQil7dGhpcy5faGFzaC51cGRhdGUoaiksQigpfSx6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oaixWKXtyZXR1cm4gdGhp'@;
put 'cy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBqP2FlLmZyb20oaixWKTpqKSx0aGlzfSx6LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGosVil7dGhpcy5lbmQoKTt2YXIgQj10aGlzLl9oYXNoLmRpZ2VzdCgpLFk9TShCLGosdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhp'@;
put 'cy5fdGFnKTtyZXR1cm4gVj9ZLnRvU3RyaW5nKFYpOll9LGxlKEssbS5Xcml0YWJsZSksSy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGosVixCKXt0aGlzLl9oYXNoLnVwZGF0ZShqKSxCKCl9LEsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihqLFYpe3JldHVybiB0aGlzLl9oYXNoLnVw'@;
put 'ZGF0ZSgic3RyaW5nIj09dHlwZW9mIGo/YWUuZnJvbShqLFYpOmopLHRoaXN9LEsucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihqLFYsQil7dmFyIFk9InN0cmluZyI9PXR5cGVvZiBWP2FlLmZyb20oVixCKTpWO3RoaXMuZW5kKCk7dmFyIFg9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4g'@;
put 'TyhZLFgsaix0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxhdC5leHBvcnRzPXtTaWduOkksVmVyaWZ5OmssY3JlYXRlU2lnbjpJLGNyZWF0ZVZlcmlmeTprfX0sNjM2MDI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig4NTgyNSksbT1GKDcxOTQ2'@;
put 'KSxsZT1GKDg4NjUxKS5lYyxNPUYoNjI2NjIpLE89Rig4Nzk4MyksUj1GKDEzMDgpO2Z1bmN0aW9uIGooVSxxLGVlLHRlKXtpZigoVT1hZS5mcm9tKFUudG9BcnJheSgpKSkubGVuZ3RoPHEuYnl0ZUxlbmd0aCgpKXt2YXIgb2U9YWUuYWxsb2MocS5ieXRlTGVuZ3RoKCktVS5sZW5ndGgpO1U9'@;
put 'YWUuY29uY2F0KFtvZSxVXSl9dmFyIHNlPWVlLmxlbmd0aCxoZT1mdW5jdGlvbiBCKFUscSl7VT0oVT1WKFUscSkpLm1vZChxKTt2YXIgZWU9YWUuZnJvbShVLnRvQXJyYXkoKSk7aWYoZWUubGVuZ3RoPHEuYnl0ZUxlbmd0aCgpKXt2YXIgdGU9YWUuYWxsb2MocS5ieXRlTGVuZ3RoKCktZWUu'@;
put 'bGVuZ3RoKTtlZT1hZS5jb25jYXQoW3RlLGVlXSl9cmV0dXJuIGVlfShlZSxxKSx1ZT1hZS5hbGxvYyhzZSk7dWUuZmlsbCgxKTt2YXIgY2U9YWUuYWxsb2Moc2UpO3JldHVybiBjZT14KHRlLGNlKS51cGRhdGUodWUpLnVwZGF0ZShhZS5mcm9tKFswXSkpLnVwZGF0ZShVKS51cGRhdGUoaGUp'@;
put 'LmRpZ2VzdCgpLHVlPXgodGUsY2UpLnVwZGF0ZSh1ZSkuZGlnZXN0KCkse2s6Y2U9eCh0ZSxjZSkudXBkYXRlKHVlKS51cGRhdGUoYWUuZnJvbShbMV0pKS51cGRhdGUoVSkudXBkYXRlKGhlKS5kaWdlc3QoKSx2OnVlPXgodGUsY2UpLnVwZGF0ZSh1ZSkuZGlnZXN0KCl9fWZ1bmN0aW9uIFYo'@;
put 'VSxxKXt2YXIgZWU9bmV3IE0oVSksdGU9KFUubGVuZ3RoPDwzKS1xLmJpdExlbmd0aCgpO3JldHVybiB0ZT4wJiZlZS5pc2hybih0ZSksZWV9ZnVuY3Rpb24gWShVLHEsZWUpe3ZhciB0ZSxvZTtkb3tmb3IodGU9YWUuYWxsb2MoMCk7OCp0ZS5sZW5ndGg8VS5iaXRMZW5ndGgoKTspcS52PXgo'@;
put 'ZWUscS5rKS51cGRhdGUocS52KS5kaWdlc3QoKSx0ZT1hZS5jb25jYXQoW3RlLHEudl0pO29lPVYodGUsVSkscS5rPXgoZWUscS5rKS51cGRhdGUocS52KS51cGRhdGUoYWUuZnJvbShbMF0pKS5kaWdlc3QoKSxxLnY9eChlZSxxLmspLnVwZGF0ZShxLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09'@;
put 'b2UuY21wKFUpKTtyZXR1cm4gb2V9ZnVuY3Rpb24gWChVLHEsZWUsdGUpe3JldHVybiBVLnRvUmVkKE0ubW9udChlZSkpLnJlZFBvdyhxKS5mcm9tUmVkKCkubW9kKHRlKX1hdC5leHBvcnRzPWZ1bmN0aW9uIEsoVSxxLGVlLHRlLG9lKXt2YXIgc2U9TyhxKTtpZihzZS5jdXJ2ZSl7aWYoImVj'@;
put 'ZHNhIiE9PXRlJiYiZWNkc2EvcnNhIiE9PXRlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBJKFUscSl7dmFyIGVlPVJbcS5jdXJ2ZS5qb2luKCIuIildO2lmKCFlZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitxLmN1'@;
put 'cnZlLmpvaW4oIi4iKSk7dmFyIHNlPW5ldyBsZShlZSkua2V5RnJvbVByaXZhdGUocS5wcml2YXRlS2V5KS5zaWduKFUpO3JldHVybiBhZS5mcm9tKHNlLnRvREVSKCkpfShVLHNlKX1pZigiZHNhIj09PXNlLnR5cGUpe2lmKCJkc2EiIT09dGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2'@;
put 'YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIGsoVSxxLGVlKXtmb3IodmFyIGNlLHRlPXEucGFyYW1zLnByaXZfa2V5LG9lPXEucGFyYW1zLnAsc2U9cS5wYXJhbXMucSxoZT1xLnBhcmFtcy5nLHVlPW5ldyBNKDApLEc9VihVLHNlKS5tb2Qoc2UpLGI9ITEsRD1qKHRlLHNlLFUsZWUp'@;
put 'OyExPT09YjspdWU9WChoZSxjZT1ZKHNlLEQsZWUpLG9lLHNlKSwwPT09KGI9Y2UuaW52bShzZSkuaW11bChHLmFkZCh0ZS5tdWwodWUpKSkubW9kKHNlKSkuY21wbigwKSYmKGI9ITEsdWU9bmV3IE0oMCkpO3JldHVybiBmdW5jdGlvbiBFKFUscSl7VT1VLnRvQXJyYXkoKSxxPXEudG9BcnJh'@;
put 'eSgpLDEyOCZVWzBdJiYoVT1bMF0uY29uY2F0KFUpKSwxMjgmcVswXSYmKHE9WzBdLmNvbmNhdChxKSk7dmFyIHRlPVs0OCxVLmxlbmd0aCtxLmxlbmd0aCs0LDIsVS5sZW5ndGhdO3JldHVybiB0ZT10ZS5jb25jYXQoVSxbMixxLmxlbmd0aF0scSksYWUuZnJvbSh0ZSl9KHVlLGIpfShVLHNl'@;
put 'LGVlKX1pZigicnNhIiE9PXRlJiYiZWNkc2EvcnNhIiE9PXRlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO2lmKHZvaWQgMCE9PXEucGFkZGluZyYmMSE9PXEucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBt'@;
put 'b2RlIik7VT1hZS5jb25jYXQoW29lLFVdKTtmb3IodmFyIGhlPXNlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHVlPVswLDFdO1UubGVuZ3RoK3VlLmxlbmd0aCsxPGhlOyl1ZS5wdXNoKDI1NSk7dWUucHVzaCgwKTtmb3IodmFyIGNlPS0xOysrY2U8VS5sZW5ndGg7KXVlLnB1c2goVVtjZV0pO3Jl'@;
put 'dHVybiBtKHVlLHNlKX0sYXQuZXhwb3J0cy5nZXRLZXk9aixhdC5leHBvcnRzLm1ha2VLZXk9WX0sNTExNzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig2MjY2MiksbT1GKDg4NjUxKS5lYyxsZT1GKDg3OTgzKSxNPUYoMTMwOCk7ZnVuY3Rpb24g'@;
put 'SyhJLGspe2lmKEkuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoSS5jbXAoayk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfWF0LmV4cG9ydHM9ZnVuY3Rpb24gTyhJLGssRSxqLFYpe3ZhciBCPWxlKEUpO2lmKCJlYyI9PT1CLnR5cGUpe2lm'@;
put 'KCJlY2RzYSIhPT1qJiYiZWNkc2EvcnNhIiE9PWopdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gUihJLGssRSl7dmFyIGo9TVtFLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIWopdGhyb3cgbmV3IEVycm9yKCJ1bmtu'@;
put 'b3duIGN1cnZlICIrRS5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgbShqKS52ZXJpZnkoayxJLEUuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oSSxrLEIpfWlmKCJkc2EiPT09Qi50eXBlKXtpZigiZHNhIiE9PWopdGhyb3cgbmV3IEVycm9yKCJ3cm9u'@;
put 'ZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24geihJLGssRSl7dmFyIGo9RS5kYXRhLnAsVj1FLmRhdGEucSxCPUUuZGF0YS5nLFk9RS5kYXRhLnB1Yl9rZXksWD1sZS5zaWduYXR1cmUuZGVjb2RlKEksImRlciIpLFU9WC5zLHE9WC5yO0soVSxWKSxLKHEsVik7dmFyIGVlPXgu'@;
put 'bW9udChqKSx0ZT1VLmludm0oVik7cmV0dXJuIDA9PT1CLnRvUmVkKGVlKS5yZWRQb3cobmV3IHgoaykubXVsKHRlKS5tb2QoVikpLmZyb21SZWQoKS5tdWwoWS50b1JlZChlZSkucmVkUG93KHEubXVsKHRlKS5tb2QoVikpLmZyb21SZWQoKSkubW9kKGopLm1vZChWKS5jbXAocSl9KEksayxC'@;
put 'KX1pZigicnNhIiE9PWomJiJlY2RzYS9yc2EiIT09ail0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO2s9YWUuY29uY2F0KFtWLGtdKTtmb3IodmFyIFk9Qi5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxYPVsxXSxVPTA7ay5sZW5ndGgrWC5sZW5ndGgrMjxZOylYLnB1c2go'@;
put 'MjU1KSxVKz0xO1gucHVzaCgwKTtmb3IodmFyIHE9LTE7KytxPGsubGVuZ3RoOylYLnB1c2goa1txXSk7WD1hZS5mcm9tKFgpO3ZhciBlZT14Lm1vbnQoQi5tb2R1bHVzKTtJPShJPW5ldyB4KEkpLnRvUmVkKGVlKSkucmVkUG93KG5ldyB4KEIucHVibGljRXhwb25lbnQpKSxJPWFlLmZyb20o'@;
put 'SS5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgdGU9VTw4PzE6MDtmb3IoWT1NYXRoLm1pbihJLmxlbmd0aCxYLmxlbmd0aCksSS5sZW5ndGghPT1YLmxlbmd0aCYmKHRlPTEpLHE9LTE7KytxPFk7KXRlfD1JW3FdXlhbcV07cmV0dXJuIDA9PT10ZX19LDYzNjM2OmF0PT57YXQuZXhwb3J0cz1m'@;
put 'dW5jdGlvbihGLGFlKXtmb3IodmFyIHg9TWF0aC5taW4oRi5sZW5ndGgsYWUubGVuZ3RoKSxtPW5ldyBCdWZmZXIoeCksbGU9MDtsZTx4OysrbGUpbVtsZV09RltsZV1eYWVbbGVdO3JldHVybiBtfX0sMzkwMDc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDk5MTkpLHg9Rigy'@;
put 'MjYwMSksbT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7SWUuQnVmZmVyPVIsSWUuU2xvd0J1ZmZlcj1mdW5jdGlvbiBVKFBlKXtyZXR1cm4rUGUhPVBl'@;
put 'JiYoUGU9MCksUi5hbGxvYygrUGUpfSxJZS5JTlNQRUNUX01BWF9CWVRFUz01MDt2YXIgbGU9MjE0NzQ4MzY0NztmdW5jdGlvbiBPKFBlKXtpZihQZT5sZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1BlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIg'@;
put 'YmU9bmV3IFVpbnQ4QXJyYXkoUGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoYmUsUi5wcm90b3R5cGUpLGJlfWZ1bmN0aW9uIFIoUGUsYmUsQWUpe2lmKCJudW1iZXIiPT10eXBlb2YgUGUpe2lmKCJzdHJpbmciPT10eXBlb2YgYmUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJz'@;
put 'dHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIGsoUGUpfXJldHVybiB6KFBlLGJlLEFlKX1mdW5jdGlvbiB6KFBlLGJlLEFlKXtpZigic3RyaW5nIj09dHlwZW9mIFBlKXJldHVybiBmdW5jdGlvbiBFKFBlLGJlKXtp'@;
put 'ZigoInN0cmluZyIhPXR5cGVvZiBiZXx8IiI9PT1iZSkmJihiZT0idXRmOCIpLCFSLmlzRW5jb2RpbmcoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrYmUpO3ZhciBBZT0wfHEoUGUsYmUpLFRlPU8oQWUpLHFlPVRlLndyaXRlKFBlLGJlKTtyZXR1cm4gcWUh'@;
put 'PT1BZSYmKFRlPVRlLnNsaWNlKDAscWUpKSxUZX0oUGUsYmUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhQZSkpcmV0dXJuIGZ1bmN0aW9uIFYoUGUpe2lmKFllKFBlLFVpbnQ4QXJyYXkpKXt2YXIgYmU9bmV3IFVpbnQ4QXJyYXkoUGUpO3JldHVybiBCKGJlLmJ1ZmZlcixiZS5ieXRlT2Zmc2V0'@;
put 'LGJlLmJ5dGVMZW5ndGgpfXJldHVybiBqKFBlKX0oUGUpO2lmKG51bGw9PVBlKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBS'@;
put 'ZWNlaXZlZCB0eXBlICIrdHlwZW9mIFBlKTtpZihZZShQZSxBcnJheUJ1ZmZlcil8fFBlJiZZZShQZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoWWUoUGUsU2hhcmVkQXJyYXlCdWZmZXIpfHxQZSYmWWUoUGUuYnVmZmVyLFNoYXJlZEFycmF5'@;
put 'QnVmZmVyKSkpcmV0dXJuIEIoUGUsYmUsQWUpO2lmKCJudW1iZXIiPT10eXBlb2YgUGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIFRlPVBlLnZhbHVlT2YmJlBl'@;
put 'LnZhbHVlT2YoKTtpZihudWxsIT1UZSYmVGUhPT1QZSlyZXR1cm4gUi5mcm9tKFRlLGJlLEFlKTt2YXIgcWU9ZnVuY3Rpb24gWShQZSl7aWYoUi5pc0J1ZmZlcihQZSkpe3ZhciBiZT0wfFgoUGUubGVuZ3RoKSxBZT1PKGJlKTtyZXR1cm4gMD09PUFlLmxlbmd0aHx8UGUuY29weShBZSwwLDAs'@;
put 'YmUpLEFlfXJldHVybiB2b2lkIDAhPT1QZS5sZW5ndGg/Im51bWJlciIhPXR5cGVvZiBQZS5sZW5ndGh8fEplKFBlLmxlbmd0aCk/TygwKTpqKFBlKToiQnVmZmVyIj09PVBlLnR5cGUmJkFycmF5LmlzQXJyYXkoUGUuZGF0YSk/aihQZS5kYXRhKTp2b2lkIDB9KFBlKTtpZihxZSlyZXR1cm4g'@;
put 'cWU7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIFBlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIFIuZnJvbShQZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxiZSxBZSk7dGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgUGUpfWZ1bmN0aW9uIEsoUGUpe2lmKCJudW1iZXIiIT10eXBlb2YgUGUp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihQZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrUGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIGsoUGUpe3JldHVybiBL'@;
put 'KFBlKSxPKFBlPDA/MDowfFgoUGUpKX1mdW5jdGlvbiBqKFBlKXtmb3IodmFyIGJlPVBlLmxlbmd0aDwwPzA6MHxYKFBlLmxlbmd0aCksQWU9TyhiZSksVGU9MDtUZTxiZTtUZSs9MSlBZVtUZV09MjU1JlBlW1RlXTtyZXR1cm4gQWV9ZnVuY3Rpb24gQihQZSxiZSxBZSl7aWYoYmU8MHx8UGUu'@;
put 'Ynl0ZUxlbmd0aDxiZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoUGUuYnl0ZUxlbmd0aDxiZSsoQWV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2'@;
put 'YXIgVGU7cmV0dXJuIFRlPXZvaWQgMD09PWJlJiZ2b2lkIDA9PT1BZT9uZXcgVWludDhBcnJheShQZSk6dm9pZCAwPT09QWU/bmV3IFVpbnQ4QXJyYXkoUGUsYmUpOm5ldyBVaW50OEFycmF5KFBlLGJlLEFlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoVGUsUi5wcm90b3R5cGUpLFRlfWZ1bmN0'@;
put 'aW9uIFgoUGUpe2lmKFBlPj1sZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrbGUudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxQZX1mdW5jdGlvbiBxKFBlLGJlKXtpZihSLmlzQnVm'@;
put 'ZmVyKFBlKSlyZXR1cm4gUGUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhQZSl8fFllKFBlLEFycmF5QnVmZmVyKSlyZXR1cm4gUGUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIFBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJl'@;
put 'IG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBQZSk7dmFyIEFlPVBlLmxlbmd0aCxUZT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFUZSYmMD09PUFlKXJldHVybiAwO2Zvcih2YXIgcWU9'@;
put 'ITE7Oylzd2l0Y2goYmUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEFlO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEZlKFBlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVy'@;
put 'biAyKkFlO2Nhc2UiaGV4IjpyZXR1cm4gQWU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gV2UoUGUpLmxlbmd0aDtkZWZhdWx0OmlmKHFlKXJldHVybiBUZT8tMTpGZShQZSkubGVuZ3RoO2JlPSgiIitiZSkudG9Mb3dlckNhc2UoKSxxZT0hMH19ZnVuY3Rpb24gZWUoUGUsYmUsQWUpe3ZhciBU'@;
put 'ZT0hMTtpZigodm9pZCAwPT09YmV8fGJlPDApJiYoYmU9MCksYmU+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09QWV8fEFlPnRoaXMubGVuZ3RoKSYmKEFlPXRoaXMubGVuZ3RoKSxBZTw9MCl8fChBZT4+Pj0wKTw9KGJlPj4+PTApKXJldHVybiIiO2ZvcihQZXx8KFBlPSJ1dGY4Iik7Oylzd2l0'@;
put 'Y2goUGUpe2Nhc2UiaGV4IjpyZXR1cm4gdih0aGlzLGJlLEFlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBIKHRoaXMsYmUsQWUpO2Nhc2UiYXNjaWkiOnJldHVybiBDKHRoaXMsYmUsQWUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFModGhpcyxiZSxBZSk7Y2Fz'@;
put 'ZSJiYXNlNjQiOnJldHVybiBEKHRoaXMsYmUsQWUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gcCh0aGlzLGJlLEFlKTtkZWZhdWx0OmlmKFRlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrUGUpO1Bl'@;
put 'PShQZSsiIikudG9Mb3dlckNhc2UoKSxUZT0hMH19ZnVuY3Rpb24gdGUoUGUsYmUsQWUpe3ZhciBUZT1QZVtiZV07UGVbYmVdPVBlW0FlXSxQZVtBZV09VGV9ZnVuY3Rpb24gb2UoUGUsYmUsQWUsVGUscWUpe2lmKDA9PT1QZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBB'@;
put 'ZT8oVGU9QWUsQWU9MCk6QWU+MjE0NzQ4MzY0Nz9BZT0yMTQ3NDgzNjQ3OkFlPC0yMTQ3NDgzNjQ4JiYoQWU9LTIxNDc0ODM2NDgpLEplKEFlPStBZSkmJihBZT1xZT8wOlBlLmxlbmd0aC0xKSxBZTwwJiYoQWU9UGUubGVuZ3RoK0FlKSxBZT49UGUubGVuZ3RoKXtpZihxZSlyZXR1cm4tMTtB'@;
put 'ZT1QZS5sZW5ndGgtMX1lbHNlIGlmKEFlPDApe2lmKCFxZSlyZXR1cm4tMTtBZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgYmUmJihiZT1SLmZyb20oYmUsVGUpKSxSLmlzQnVmZmVyKGJlKSlyZXR1cm4gMD09PWJlLmxlbmd0aD8tMTpzZShQZSxiZSxBZSxUZSxxZSk7aWYoIm51bWJlciI9PXR5'@;
put 'cGVvZiBiZSlyZXR1cm4gYmUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9xZT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoUGUsYmUsQWUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoUGUsYmUsQWUp'@;
put 'OnNlKFBlLFtiZV0sQWUsVGUscWUpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIHNlKFBlLGJlLEFlLFRlLHFlKXt2YXIgRGUsWGU9MSxVZT1QZS5sZW5ndGgsaHQ9YmUubGVuZ3RoO2lmKHZvaWQgMCE9PVRlJiYo'@;
put 'InVjczIiPT09KFRlPVN0cmluZyhUZSkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1UZXx8InV0ZjE2bGUiPT09VGV8fCJ1dGYtMTZsZSI9PT1UZSkpe2lmKFBlLmxlbmd0aDwyfHxiZS5sZW5ndGg8MilyZXR1cm4tMTtYZT0yLFVlLz0yLGh0Lz0yLEFlLz0yfWZ1bmN0aW9uIE1lKE10LEh0'@;
put 'KXtyZXR1cm4gMT09PVhlP010W0h0XTpNdC5yZWFkVUludDE2QkUoSHQqWGUpfWlmKHFlKXt2YXIgemU9LTE7Zm9yKERlPUFlO0RlPFVlO0RlKyspaWYoTWUoUGUsRGUpPT09TWUoYmUsLTE9PT16ZT8wOkRlLXplKSl7aWYoLTE9PT16ZSYmKHplPURlKSxEZS16ZSsxPT09aHQpcmV0dXJuIHpl'@;
put 'KlhlfWVsc2UtMSE9PXplJiYoRGUtPURlLXplKSx6ZT0tMX1lbHNlIGZvcihBZStodD5VZSYmKEFlPVVlLWh0KSxEZT1BZTtEZT49MDtEZS0tKXtmb3IodmFyIGl0PSEwLHV0PTA7dXQ8aHQ7dXQrKylpZihNZShQZSxEZSt1dCkhPT1NZShiZSx1dCkpe2l0PSExO2JyZWFrfWlmKGl0KXJldHVy'@;
put 'biBEZX1yZXR1cm4tMX1mdW5jdGlvbiBoZShQZSxiZSxBZSxUZSl7QWU9TnVtYmVyKEFlKXx8MDt2YXIgcWU9UGUubGVuZ3RoLUFlO1RlPyhUZT1OdW1iZXIoVGUpKT5xZSYmKFRlPXFlKTpUZT1xZTt2YXIgWGU9YmUubGVuZ3RoO1RlPlhlLzImJihUZT1YZS8yKTtmb3IodmFyIFVlPTA7VWU8'@;
put 'VGU7KytVZSl7dmFyIGh0PXBhcnNlSW50KGJlLnN1YnN0cigyKlVlLDIpLDE2KTtpZihKZShodCkpcmV0dXJuIFVlO1BlW0FlK1VlXT1odH1yZXR1cm4gVWV9ZnVuY3Rpb24gdWUoUGUsYmUsQWUsVGUpe3JldHVybiBLZShGZShiZSxQZS5sZW5ndGgtQWUpLFBlLEFlLFRlKX1mdW5jdGlvbiBj'@;
put 'ZShQZSxiZSxBZSxUZSl7cmV0dXJuIEtlKGZ1bmN0aW9uIE9lKFBlKXtmb3IodmFyIGJlPVtdLEFlPTA7QWU8UGUubGVuZ3RoOysrQWUpYmUucHVzaCgyNTUmUGUuY2hhckNvZGVBdChBZSkpO3JldHVybiBiZX0oYmUpLFBlLEFlLFRlKX1mdW5jdGlvbiBHKFBlLGJlLEFlLFRlKXtyZXR1cm4g'@;
put 'S2UoV2UoYmUpLFBlLEFlLFRlKX1mdW5jdGlvbiBiKFBlLGJlLEFlLFRlKXtyZXR1cm4gS2UoZnVuY3Rpb24gamUoUGUsYmUpe2Zvcih2YXIgQWUsVGUsWGU9W10sVWU9MDtVZTxQZS5sZW5ndGgmJiEoKGJlLT0yKTwwKTsrK1VlKVRlPShBZT1QZS5jaGFyQ29kZUF0KFVlKSk+PjgsWGUucHVz'@;
put 'aChBZSUyNTYpLFhlLnB1c2goVGUpO3JldHVybiBYZX0oYmUsUGUubGVuZ3RoLUFlKSxQZSxBZSxUZSl9ZnVuY3Rpb24gRChQZSxiZSxBZSl7cmV0dXJuIGFlLmZyb21CeXRlQXJyYXkoMD09PWJlJiZBZT09PVBlLmxlbmd0aD9QZTpQZS5zbGljZShiZSxBZSkpfWZ1bmN0aW9uIEgoUGUsYmUs'@;
put 'QWUpe0FlPU1hdGgubWluKFBlLmxlbmd0aCxBZSk7Zm9yKHZhciBUZT1bXSxxZT1iZTtxZTxBZTspe3ZhciBNZSxEZSx6ZSxpdCxYZT1QZVtxZV0sVWU9bnVsbCxodD1YZT4yMzk/NDpYZT4yMjM/MzpYZT4xOTE/MjoxO2lmKHFlK2h0PD1BZSlzd2l0Y2goaHQpe2Nhc2UgMTpYZTwxMjgmJihV'@;
put 'ZT1YZSk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoTWU9UGVbcWUrMV0pKSYmKGl0PSgzMSZYZSk8PDZ8NjMmTWUpPjEyNyYmKFVlPWl0KTticmVhaztjYXNlIDM6RGU9UGVbcWUrMl0sMTI4PT0oMTkyJihNZT1QZVtxZSsxXSkpJiYxMjg9PSgxOTImRGUpJiYoaXQ9KDE1JlhlKTw8MTJ8KDYz'@;
put 'Jk1lKTw8Nnw2MyZEZSk+MjA0NyYmKGl0PDU1Mjk2fHxpdD41NzM0MykmJihVZT1pdCk7YnJlYWs7Y2FzZSA0OkRlPVBlW3FlKzJdLHplPVBlW3FlKzNdLDEyOD09KDE5MiYoTWU9UGVbcWUrMV0pKSYmMTI4PT0oMTkyJkRlKSYmMTI4PT0oMTkyJnplKSYmKGl0PSgxNSZYZSk8PDE4fCg2MyZN'@;
put 'ZSk8PDEyfCg2MyZEZSk8PDZ8NjMmemUpPjY1NTM1JiZpdDwxMTE0MTEyJiYoVWU9aXQpfW51bGw9PT1VZT8oVWU9NjU1MzMsaHQ9MSk6VWU+NjU1MzUmJihUZS5wdXNoKChVZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksVWU9NTYzMjB8MTAyMyZVZSksVGUucHVzaChVZSkscWUrPWh0fXJl'@;
put 'dHVybiBmdW5jdGlvbiBnKFBlKXt2YXIgYmU9UGUubGVuZ3RoO2lmKGJlPD1OKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxQZSk7Zm9yKHZhciBBZT0iIixUZT0wO1RlPGJlOylBZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsUGUuc2xpY2UoVGUs'@;
put 'VGUrPU4pKTtyZXR1cm4gQWV9KFRlKX1JZS5rTWF4TGVuZ3RoPWxlLCEoUi5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uIE0oKXt0cnl7dmFyIFBlPW5ldyBVaW50OEFycmF5KDEpLGJlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9m'@;
put 'KGJlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUGUsYmUpLDQyPT09UGUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIGNvbnNvbGU8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiVGhpcyBi'@;
put 'cm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJv'@;
put 'dG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKFIuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihS'@;
put 'LmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksUi5wb29sU2l6ZT04MTkyLFIuZnJvbT1mdW5jdGlvbihQZSxiZSxBZSl7cmV0dXJuIHooUGUsYmUsQWUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVj'@;
put 'dC5zZXRQcm90b3R5cGVPZihSLFVpbnQ4QXJyYXkpLFIuYWxsb2M9ZnVuY3Rpb24oUGUsYmUsQWUpe3JldHVybiBmdW5jdGlvbiBJKFBlLGJlLEFlKXtyZXR1cm4gSyhQZSksUGU8PTA/TyhQZSk6dm9pZCAwIT09YmU/InN0cmluZyI9PXR5cGVvZiBBZT9PKFBlKS5maWxsKGJlLEFlKTpPKFBl'@;
put 'KS5maWxsKGJlKTpPKFBlKX0oUGUsYmUsQWUpfSxSLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKFBlKXtyZXR1cm4gayhQZSl9LFIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKFBlKXtyZXR1cm4gayhQZSl9LFIuaXNCdWZmZXI9ZnVuY3Rpb24oYmUpe3JldHVybiBudWxsIT1iZSYmITA9PT1iZS5f'@;
put 'aXNCdWZmZXImJmJlIT09Ui5wcm90b3R5cGV9LFIuY29tcGFyZT1mdW5jdGlvbihiZSxBZSl7aWYoWWUoYmUsVWludDhBcnJheSkmJihiZT1SLmZyb20oYmUsYmUub2Zmc2V0LGJlLmJ5dGVMZW5ndGgpKSxZZShBZSxVaW50OEFycmF5KSYmKEFlPVIuZnJvbShBZSxBZS5vZmZzZXQsQWUuYnl0'@;
put 'ZUxlbmd0aCkpLCFSLmlzQnVmZmVyKGJlKXx8IVIuaXNCdWZmZXIoQWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGJlPT09QWUpcmV0dXJuIDA7Zm9yKHZhciBU'@;
put 'ZT1iZS5sZW5ndGgscWU9QWUubGVuZ3RoLFhlPTAsVWU9TWF0aC5taW4oVGUscWUpO1hlPFVlOysrWGUpaWYoYmVbWGVdIT09QWVbWGVdKXtUZT1iZVtYZV0scWU9QWVbWGVdO2JyZWFrfXJldHVybiBUZTxxZT8tMTpxZTxUZT8xOjB9LFIuaXNFbmNvZGluZz1mdW5jdGlvbihiZSl7c3dpdGNo'@;
put 'KFN0cmluZyhiZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJl'@;
put 'dHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxSLmNvbmNhdD1mdW5jdGlvbihiZSxBZSl7aWYoIUFycmF5LmlzQXJyYXkoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09YmUubGVuZ3RoKXJldHVybiBS'@;
put 'LmFsbG9jKDApO3ZhciBUZTtpZih2b2lkIDA9PT1BZSlmb3IoQWU9MCxUZT0wO1RlPGJlLmxlbmd0aDsrK1RlKUFlKz1iZVtUZV0ubGVuZ3RoO3ZhciBxZT1SLmFsbG9jVW5zYWZlKEFlKSxYZT0wO2ZvcihUZT0wO1RlPGJlLmxlbmd0aDsrK1RlKXt2YXIgVWU9YmVbVGVdO2lmKFllKFVlLFVp'@;
put 'bnQ4QXJyYXkpKVhlK1VlLmxlbmd0aD5xZS5sZW5ndGg/Ui5mcm9tKFVlKS5jb3B5KHFlLFhlKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChxZSxVZSxYZSk7ZWxzZXtpZighUi5pc0J1ZmZlcihVZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUg'@;
put 'YW4gQXJyYXkgb2YgQnVmZmVycycpO1VlLmNvcHkocWUsWGUpfVhlKz1VZS5sZW5ndGh9cmV0dXJuIHFlfSxSLmJ5dGVMZW5ndGg9cSxSLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsUi5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubGVuZ3RoO2lmKGJlJTIhPTApdGhy'@;
put 'b3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBBZT0wO0FlPGJlO0FlKz0yKXRlKHRoaXMsQWUsQWUrMSk7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBiZT10aGlzLmxlbmd0'@;
put 'aDtpZihiZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgQWU9MDtBZTxiZTtBZSs9NCl0ZSh0aGlzLEFlLEFlKzMpLHRlKHRoaXMsQWUrMSxBZSsyKTtyZXR1cm4gdGhpc30sUi5wcm90b3R5cGUu'@;
put 'c3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubGVuZ3RoO2lmKGJlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBBZT0wO0FlPGJlO0FlKz04KXRlKHRoaXMsQWUsQWUrNyksdGUodGhpcyxB'@;
put 'ZSsxLEFlKzYpLHRlKHRoaXMsQWUrMixBZSs1KSx0ZSh0aGlzLEFlKzMsQWUrNCk7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPVIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubGVuZ3RoO3JldHVybiAwPT09YmU/IiI6MD09PWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg/SCh0aGlzLDAsYmUpOmVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sUi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGJlKXtpZighUi5pc0J1ZmZlcihiZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09'@;
put 'YmV8fDA9PT1SLmNvbXBhcmUodGhpcyxiZSl9LFIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgYmU9IiIsQWU9SWUuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIGJlPXRoaXMudG9TdHJpbmcoImhleCIsMCxBZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlz'@;
put 'Lmxlbmd0aD5BZSYmKGJlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK2JlKyI+In0sbSYmKFIucHJvdG90eXBlW21dPVIucHJvdG90eXBlLmluc3BlY3QpLFIucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYmUsQWUsVGUscWUsWGUpe2lmKFllKGJlLFVpbnQ4QXJyYXkpJiYoYmU9Ui5mcm9tKGJl'@;
put 'LGJlLm9mZnNldCxiZS5ieXRlTGVuZ3RoKSksIVIuaXNCdWZmZXIoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGJlKTtpZih2b2lkIDA9'@;
put 'PT1BZSYmKEFlPTApLHZvaWQgMD09PVRlJiYoVGU9YmU/YmUubGVuZ3RoOjApLHZvaWQgMD09PXFlJiYocWU9MCksdm9pZCAwPT09WGUmJihYZT10aGlzLmxlbmd0aCksQWU8MHx8VGU+YmUubGVuZ3RofHxxZTwwfHxYZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9m'@;
put 'IHJhbmdlIGluZGV4Iik7aWYocWU+PVhlJiZBZT49VGUpcmV0dXJuIDA7aWYocWU+PVhlKXJldHVybi0xO2lmKEFlPj1UZSlyZXR1cm4gMTtpZih0aGlzPT09YmUpcmV0dXJuIDA7Zm9yKHZhciBVZT0oWGU+Pj49MCktKHFlPj4+PTApLGh0PShUZT4+Pj0wKS0oQWU+Pj49MCksTWU9TWF0aC5t'@;
put 'aW4oVWUsaHQpLERlPXRoaXMuc2xpY2UocWUsWGUpLHplPWJlLnNsaWNlKEFlLFRlKSxpdD0wO2l0PE1lOysraXQpaWYoRGVbaXRdIT09emVbaXRdKXtVZT1EZVtpdF0saHQ9emVbaXRdO2JyZWFrfXJldHVybiBVZTxodD8tMTpodDxVZT8xOjB9LFIucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0'@;
put 'aW9uKGJlLEFlLFRlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihiZSxBZSxUZSl9LFIucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBvZSh0aGlzLGJlLEFlLFRlLCEwKX0sUi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVy'@;
put 'biBvZSh0aGlzLGJlLEFlLFRlLCExKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2lmKHZvaWQgMD09PUFlKXFlPSJ1dGY4IixUZT10aGlzLmxlbmd0aCxBZT0wO2Vsc2UgaWYodm9pZCAwPT09VGUmJiJzdHJpbmciPT10eXBlb2YgQWUpcWU9QWUsVGU9dGhpcy5s'@;
put 'ZW5ndGgsQWU9MDtlbHNle2lmKCFpc0Zpbml0ZShBZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0FlPj4+PTAsaXNGaW5pdGUoVGUpPyhUZT4+Pj0wLHZvaWQgMD09PXFl'@;
put 'JiYocWU9InV0ZjgiKSk6KHFlPVRlLFRlPXZvaWQgMCl9dmFyIFhlPXRoaXMubGVuZ3RoLUFlO2lmKCh2b2lkIDA9PT1UZXx8VGU+WGUpJiYoVGU9WGUpLGJlLmxlbmd0aD4wJiYoVGU8MHx8QWU8MCl8fEFlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdy'@;
put 'aXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3FlfHwocWU9InV0ZjgiKTtmb3IodmFyIFVlPSExOzspc3dpdGNoKHFlKXtjYXNlImhleCI6cmV0dXJuIGhlKHRoaXMsYmUsQWUsVGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHVlKHRoaXMsYmUsQWUsVGUpO2Nhc2UiYXNjaWki'@;
put 'OmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNlKHRoaXMsYmUsQWUsVGUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gRyh0aGlzLGJlLEFlLFRlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGIodGhpcyxiZSxBZSxUZSk7'@;
put 'ZGVmYXVsdDppZihVZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3FlKTtxZT0oIiIrcWUpLnRvTG93ZXJDYXNlKCksVWU9ITB9fSxSLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5z'@;
put 'bGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBOPTQwOTY7ZnVuY3Rpb24gQyhQZSxiZSxBZSl7dmFyIFRlPSIiO0FlPU1hdGgubWluKFBlLmxlbmd0aCxBZSk7Zm9yKHZhciBxZT1iZTtxZTxBZTsrK3FlKVRlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZQZVtxZV0pO3JldHVy'@;
put 'biBUZX1mdW5jdGlvbiBTKFBlLGJlLEFlKXt2YXIgVGU9IiI7QWU9TWF0aC5taW4oUGUubGVuZ3RoLEFlKTtmb3IodmFyIHFlPWJlO3FlPEFlOysrcWUpVGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoUGVbcWVdKTtyZXR1cm4gVGV9ZnVuY3Rpb24gdihQZSxiZSxBZSl7dmFyIFRlPVBlLmxlbmd0'@;
put 'aDsoIWJlfHxiZTwwKSYmKGJlPTApLCghQWV8fEFlPDB8fEFlPlRlKSYmKEFlPVRlKTtmb3IodmFyIHFlPSIiLFhlPWJlO1hlPEFlOysrWGUpcWUrPWx0W1BlW1hlXV07cmV0dXJuIHFlfWZ1bmN0aW9uIHAoUGUsYmUsQWUpe2Zvcih2YXIgVGU9UGUuc2xpY2UoYmUsQWUpLHFlPSIiLFhlPTA7'@;
put 'WGU8VGUubGVuZ3RoLTE7WGUrPTIpcWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoVGVbWGVdKzI1NipUZVtYZSsxXSk7cmV0dXJuIHFlfWZ1bmN0aW9uIHcoUGUsYmUsQWUpe2lmKFBlJTEhPTB8fFBlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKFBlK2Jl'@;
put 'PkFlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gSihQZSxiZSxBZSxUZSxxZSxYZSl7aWYoIVIuaXNCdWZmZXIoUGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBC'@;
put 'dWZmZXIgaW5zdGFuY2UnKTtpZihiZT5xZXx8YmU8WGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKEFlK1RlPlBlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gbmUo'@;
put 'UGUsYmUsQWUsVGUscWUsWGUpe2lmKEFlK1RlPlBlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoQWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gZGUoUGUsYmUsQWUsVGUscWUpe3JldHVy'@;
put 'biBiZT0rYmUsQWU+Pj49MCxxZXx8bmUoUGUsMCxBZSw0KSx4LndyaXRlKFBlLGJlLEFlLFRlLDIzLDQpLEFlKzR9ZnVuY3Rpb24gZmUoUGUsYmUsQWUsVGUscWUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxxZXx8bmUoUGUsMCxBZSw4KSx4LndyaXRlKFBlLGJlLEFlLFRlLDUyLDgpLEFlKzh9'@;
put 'Ui5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oYmUsQWUpe3ZhciBUZT10aGlzLmxlbmd0aDsoYmU9fn5iZSk8MD8oYmUrPVRlKTwwJiYoYmU9MCk6YmU+VGUmJihiZT1UZSksKEFlPXZvaWQgMD09PUFlP1RlOn5+QWUpPDA/KEFlKz1UZSk8MCYmKEFlPTApOkFlPlRlJiYoQWU9VGUpLEFlPGJl'@;
put 'JiYoQWU9YmUpO3ZhciBxZT10aGlzLnN1YmFycmF5KGJlLEFlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHFlLFIucHJvdG90eXBlKSxxZX0sUi5wcm90b3R5cGUucmVhZFVpbnRMRT1SLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGJlLEFlLFRlKXtiZT4+Pj0wLEFlPj4+'@;
put 'PTAsVGV8fHcoYmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcWU9dGhpc1tiZV0sWGU9MSxVZT0wOysrVWU8QWUmJihYZSo9MjU2KTspcWUrPXRoaXNbYmUrVWVdKlhlO3JldHVybiBxZX0sUi5wcm90b3R5cGUucmVhZFVpbnRCRT1SLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGJl'@;
put 'LEFlLFRlKXtiZT4+Pj0wLEFlPj4+PTAsVGV8fHcoYmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcWU9dGhpc1tiZSstLUFlXSxYZT0xO0FlPjAmJihYZSo9MjU2KTspcWUrPXRoaXNbYmUrLS1BZV0qWGU7cmV0dXJuIHFlfSxSLnByb3RvdHlwZS5yZWFkVWludDg9Ui5wcm90b3R5cGUucmVh'@;
put 'ZFVJbnQ4PWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2JlXX0sUi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPVIucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsMix0'@;
put 'aGlzLmxlbmd0aCksdGhpc1tiZV18dGhpc1tiZSsxXTw8OH0sUi5wcm90b3R5cGUucmVhZFVpbnQxNkJFPVIucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsMix0aGlzLmxlbmd0aCksdGhpc1tiZV08PDh8dGhpc1tiZSsxXX0s'@;
put 'Ui5wcm90b3R5cGUucmVhZFVpbnQzMkxFPVIucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCksKHRoaXNbYmVdfHRoaXNbYmUrMV08PDh8dGhpc1tiZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbYmUrM119'@;
put 'LFIucHJvdG90eXBlLnJlYWRVaW50MzJCRT1SLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbYmVdKyh0aGlzW2JlKzFdPDwxNnx0aGlzW2JlKzJdPDw4fHRoaXNbYmUrM10p'@;
put 'fSxSLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oYmUsQWUsVGUpe2JlPj4+PTAsQWU+Pj49MCxUZXx8dyhiZSxBZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBxZT10aGlzW2JlXSxYZT0xLFVlPTA7KytVZTxBZSYmKFhlKj0yNTYpOylxZSs9dGhpc1tiZStVZV0qWGU7cmV0dXJuIHFlPj0o'@;
put 'WGUqPTEyOCkmJihxZS09TWF0aC5wb3coMiw4KkFlKSkscWV9LFIucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihiZSxBZSxUZSl7YmU+Pj49MCxBZT4+Pj0wLFRlfHx3KGJlLEFlLHRoaXMubGVuZ3RoKTtmb3IodmFyIHFlPUFlLFhlPTEsVWU9dGhpc1tiZSstLXFlXTtxZT4wJiYoWGUq'@;
put 'PTI1Nik7KVVlKz10aGlzW2JlKy0tcWVdKlhlO3JldHVybiBVZT49KFhlKj0xMjgpJiYoVWUtPU1hdGgucG93KDIsOCpBZSkpLFVlfSxSLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbYmVd'@;
put 'Py0xKigyNTUtdGhpc1tiZV0rMSk6dGhpc1tiZV19LFIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGJlLEFlKXtiZT4+Pj0wLEFlfHx3KGJlLDIsdGhpcy5sZW5ndGgpO3ZhciBUZT10aGlzW2JlXXx0aGlzW2JlKzFdPDw4O3JldHVybiAzMjc2OCZUZT80Mjk0OTAxNzYwfFRlOlRl'@;
put 'fSxSLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihiZSxBZSl7YmU+Pj49MCxBZXx8dyhiZSwyLHRoaXMubGVuZ3RoKTt2YXIgVGU9dGhpc1tiZSsxXXx0aGlzW2JlXTw8ODtyZXR1cm4gMzI3NjgmVGU/NDI5NDkwMTc2MHxUZTpUZX0sUi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVu'@;
put 'Y3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5ndGgpLHRoaXNbYmVdfHRoaXNbYmUrMV08PDh8dGhpc1tiZSsyXTw8MTZ8dGhpc1tiZSszXTw8MjR9LFIucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8'@;
put 'dyhiZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2JlXTw8MjR8dGhpc1tiZSsxXTw8MTZ8dGhpc1tiZSsyXTw8OHx0aGlzW2JlKzNdfSxSLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCkseC5yZWFkKHRoaXMs'@;
put 'YmUsITAsMjMsNCl9LFIucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSx4LnJlYWQodGhpcyxiZSwhMSwyMyw0KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4g'@;
put 'YmU+Pj49MCxBZXx8dyhiZSw4LHRoaXMubGVuZ3RoKSx4LnJlYWQodGhpcyxiZSwhMCw1Miw4KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw4LHRoaXMubGVuZ3RoKSx4LnJlYWQodGhpcyxiZSwhMSw1Miw4KX0sUi5w'@;
put 'cm90b3R5cGUud3JpdGVVaW50TEU9Ui5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2JlPStiZSxBZT4+Pj0wLFRlPj4+PTAscWV8fEoodGhpcyxiZSxBZSxUZSxNYXRoLnBvdygyLDgqVGUpLTEsMCk7dmFyIFVlPTEsaHQ9MDtmb3IodGhpc1tBZV09MjU1JmJl'@;
put 'OysraHQ8VGUmJihVZSo9MjU2KTspdGhpc1tBZStodF09YmUvVWUmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVVaW50QkU9Ui5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2JlPStiZSxBZT4+Pj0wLFRlPj4+PTAscWV8fEoodGhpcyxiZSxB'@;
put 'ZSxUZSxNYXRoLnBvdygyLDgqVGUpLTEsMCk7dmFyIFVlPVRlLTEsaHQ9MTtmb3IodGhpc1tBZStVZV09MjU1JmJlOy0tVWU+PTAmJihodCo9MjU2KTspdGhpc1tBZStVZV09YmUvaHQmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVVaW50OD1SLnByb3RvdHlwZS53cml0ZVVJ'@;
put 'bnQ4PWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwxLDI1NSwwKSx0aGlzW0FlXT0yNTUmYmUsQWUrMX0sUi5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1SLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGJlLEFlLFRlKXty'@;
put 'ZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwyLDY1NTM1LDApLHRoaXNbQWVdPTI1NSZiZSx0aGlzW0FlKzFdPWJlPj4+OCxBZSsyfSxSLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPVIucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVy'@;
put 'biBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDIsNjU1MzUsMCksdGhpc1tBZV09YmU+Pj44LHRoaXNbQWUrMV09MjU1JmJlLEFlKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ui5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJl'@;
put 'PStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbQWUrM109YmU+Pj4yNCx0aGlzW0FlKzJdPWJlPj4+MTYsdGhpc1tBZSsxXT1iZT4+PjgsdGhpc1tBZV09MjU1JmJlLEFlKzR9LFIucHJvdG90eXBlLndyaXRlVWludDMyQkU9Ui5wcm90b3R5cGUud3Jp'@;
put 'dGVVSW50MzJCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbQWVdPWJlPj4+MjQsdGhpc1tBZSsxXT1iZT4+PjE2LHRoaXNbQWUrMl09YmU+Pj44LHRoaXNbQWUrM109MjU1JmJlLEFlKzR9LFIu'@;
put 'cHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2lmKGJlPStiZSxBZT4+Pj0wLCFxZSl7dmFyIFhlPU1hdGgucG93KDIsOCpUZS0xKTtKKHRoaXMsYmUsQWUsVGUsWGUtMSwtWGUpfXZhciBVZT0wLGh0PTEsTWU9MDtmb3IodGhpc1tBZV09MjU1JmJlOysrVWU8VGUm'@;
put 'JihodCo9MjU2KTspYmU8MCYmMD09PU1lJiYwIT09dGhpc1tBZStVZS0xXSYmKE1lPTEpLHRoaXNbQWUrVWVdPShiZS9odD4+MCktTWUmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7aWYoYmU9K2JlLEFlPj4+PTAsIXFlKXt2'@;
put 'YXIgWGU9TWF0aC5wb3coMiw4KlRlLTEpO0oodGhpcyxiZSxBZSxUZSxYZS0xLC1YZSl9dmFyIFVlPVRlLTEsaHQ9MSxNZT0wO2Zvcih0aGlzW0FlK1VlXT0yNTUmYmU7LS1VZT49MCYmKGh0Kj0yNTYpOyliZTwwJiYwPT09TWUmJjAhPT10aGlzW0FlK1VlKzFdJiYoTWU9MSksdGhpc1tBZStV'@;
put 'ZV09KGJlL2h0Pj4wKS1NZSYyNTU7cmV0dXJuIEFlK1RlfSxSLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDEsMTI3LC0xMjgpLGJlPDAmJihiZT0yNTUrYmUrMSksdGhpc1tBZV09MjU1JmJlLEFl'@;
put 'KzF9LFIucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsMiwzMjc2NywtMzI3NjgpLHRoaXNbQWVdPTI1NSZiZSx0aGlzW0FlKzFdPWJlPj4+OCxBZSsyfSxSLnByb3RvdHlwZS53cml0ZUludDE2'@;
put 'QkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0FlXT1iZT4+PjgsdGhpc1tBZSsxXT0yNTUmYmUsQWUrMn0sUi5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1'@;
put 'cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbQWVdPTI1NSZiZSx0aGlzW0FlKzFdPWJlPj4+OCx0aGlzW0FlKzJdPWJlPj4+MTYsdGhpc1tBZSszXT1iZT4+PjI0LEFlKzR9LFIucHJvdG90eXBlLndyaXRlSW50MzJCRT1m'@;
put 'dW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxiZTwwJiYoYmU9NDI5NDk2NzI5NStiZSsxKSx0aGlzW0FlXT1iZT4+PjI0LHRoaXNbQWUrMV09YmU+Pj4xNix0aGlzW0FlKzJdPWJlPj4+OCx0'@;
put 'aGlzW0FlKzNdPTI1NSZiZSxBZSs0fSxSLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBkZSh0aGlzLGJlLEFlLCEwLFRlKX0sUi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gZGUodGhpcyxiZSxBZSwhMSxU'@;
put 'ZSl9LFIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBmZSh0aGlzLGJlLEFlLCEwLFRlKX0sUi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGZlKHRoaXMsYmUsQWUsITEsVGUpfSxSLnByb3RvdHlwZS5j'@;
put 'b3B5PWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtpZighUi5pc0J1ZmZlcihiZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoVGV8fChUZT0wKSwhcWUmJjAhPT1xZSYmKHFlPXRoaXMubGVuZ3RoKSxBZT49YmUubGVuZ3RoJiYoQWU9YmUubGVu'@;
put 'Z3RoKSxBZXx8KEFlPTApLHFlPjAmJnFlPFRlJiYocWU9VGUpLHFlPT09VGV8fDA9PT1iZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihBZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoVGU8MHx8VGU+PXRoaXMubGVu'@;
put 'Z3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihxZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3FlPnRoaXMubGVuZ3RoJiYocWU9dGhpcy5sZW5ndGgpLGJlLmxlbmd0aC1BZTxxZS1UZSYmKHFlPWJlLmxl'@;
put 'bmd0aC1BZStUZSk7dmFyIFhlPXFlLVRlO3JldHVybiB0aGlzPT09YmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihBZSxUZSxxZSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoYmUsdGhpcy5zdWJhcnJh'@;
put 'eShUZSxxZSksQWUpLFhlfSxSLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtpZigic3RyaW5nIj09dHlwZW9mIGJlKXtpZigic3RyaW5nIj09dHlwZW9mIEFlPyhxZT1BZSxBZT0wLFRlPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIFRlJiYocWU9VGUsVGU9dGhp'@;
put 'cy5sZW5ndGgpLHZvaWQgMCE9PXFlJiYic3RyaW5nIiE9dHlwZW9mIHFlKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHFlJiYhUi5pc0VuY29kaW5nKHFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVu'@;
put 'Y29kaW5nOiAiK3FlKTtpZigxPT09YmUubGVuZ3RoKXt2YXIgWGU9YmUuY2hhckNvZGVBdCgwKTsoInV0ZjgiPT09cWUmJlhlPDEyOHx8ImxhdGluMSI9PT1xZSkmJihiZT1YZSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIGJlP2JlJj0yNTU6ImJvb2xlYW4iPT10eXBlb2YgYmUmJihiZT1OdW1i'@;
put 'ZXIoYmUpKTtpZihBZTwwfHx0aGlzLmxlbmd0aDxBZXx8dGhpcy5sZW5ndGg8VGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKFRlPD1BZSlyZXR1cm4gdGhpczt2YXIgVWU7aWYoQWU+Pj49MCxUZT12b2lkIDA9PT1UZT90aGlzLmxlbmd0aDpUZT4+PjAs'@;
put 'YmV8fChiZT0wKSwibnVtYmVyIj09dHlwZW9mIGJlKWZvcihVZT1BZTtVZTxUZTsrK1VlKXRoaXNbVWVdPWJlO2Vsc2V7dmFyIGh0PVIuaXNCdWZmZXIoYmUpP2JlOlIuZnJvbShiZSxxZSksTWU9aHQubGVuZ3RoO2lmKDA9PT1NZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicr'@;
put 'YmUrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihVZT0wO1VlPFRlLUFlOysrVWUpdGhpc1tVZStBZV09aHRbVWUlTWVdfXJldHVybiB0aGlzfTt2YXIgeGU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBGZShQZSxiZSl7YmU9YmV8fDEvMDtmb3IodmFyIEFl'@;
put 'LFRlPVBlLmxlbmd0aCxxZT1udWxsLFhlPVtdLFVlPTA7VWU8VGU7KytVZSl7aWYoKEFlPVBlLmNoYXJDb2RlQXQoVWUpKT41NTI5NSYmQWU8NTczNDQpe2lmKCFxZSl7aWYoQWU+NTYzMTkpeyhiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKFVlKzE9PT1UZSl7'@;
put 'KGJlLT0zKT4tMSYmWGUucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9cWU9QWU7Y29udGludWV9aWYoQWU8NTYzMjApeyhiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpLHFlPUFlO2NvbnRpbnVlfUFlPTY1NTM2KyhxZS01NTI5Njw8MTB8QWUtNTYzMjApfWVsc2UgcWUmJihiZS09'@;
put 'Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpO2lmKHFlPW51bGwsQWU8MTI4KXtpZigoYmUtPTEpPDApYnJlYWs7WGUucHVzaChBZSl9ZWxzZSBpZihBZTwyMDQ4KXtpZigoYmUtPTIpPDApYnJlYWs7WGUucHVzaChBZT4+NnwxOTIsNjMmQWV8MTI4KX1lbHNlIGlmKEFlPDY1NTM2KXtpZigo'@;
put 'YmUtPTMpPDApYnJlYWs7WGUucHVzaChBZT4+MTJ8MjI0LEFlPj42JjYzfDEyOCw2MyZBZXwxMjgpfWVsc2V7aWYoIShBZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChiZS09NCk8MClicmVhaztYZS5wdXNoKEFlPj4xOHwyNDAsQWU+PjEyJjYz'@;
put 'fDEyOCxBZT4+NiY2M3wxMjgsNjMmQWV8MTI4KX19cmV0dXJuIFhlfWZ1bmN0aW9uIFdlKFBlKXtyZXR1cm4gYWUudG9CeXRlQXJyYXkoZnVuY3Rpb24gTGUoUGUpe2lmKChQZT0oUGU9UGUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoeGUsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtm'@;
put 'b3IoO1BlLmxlbmd0aCU0IT0wOylQZSs9Ij0iO3JldHVybiBQZX0oUGUpKX1mdW5jdGlvbiBLZShQZSxiZSxBZSxUZSl7Zm9yKHZhciBxZT0wO3FlPFRlJiYhKHFlK0FlPj1iZS5sZW5ndGh8fHFlPj1QZS5sZW5ndGgpOysrcWUpYmVbcWUrQWVdPVBlW3FlXTtyZXR1cm4gcWV9ZnVuY3Rpb24g'@;
put 'WWUoUGUsYmUpe3JldHVybiBQZSBpbnN0YW5jZW9mIGJlfHxudWxsIT1QZSYmbnVsbCE9UGUuY29uc3RydWN0b3ImJm51bGwhPVBlLmNvbnN0cnVjdG9yLm5hbWUmJlBlLmNvbnN0cnVjdG9yLm5hbWU9PT1iZS5uYW1lfWZ1bmN0aW9uIEplKFBlKXtyZXR1cm4gUGUhPVBlfXZhciBsdD1mdW5j'@;
put 'dGlvbigpe2Zvcih2YXIgUGU9IjAxMjM0NTY3ODlhYmNkZWYiLGJlPW5ldyBBcnJheSgyNTYpLEFlPTA7QWU8MTY7KytBZSlmb3IodmFyIFRlPTE2KkFlLHFlPTA7cWU8MTY7KytxZSliZVtUZStxZV09UGVbQWVdK1BlW3FlXTtyZXR1cm4gYmV9KCl9LDg2NDIwOihhdCxJZSxGKT0+e3ZhciBh'@;
put 'ZT1GKDg0MykuQnVmZmVyLHg9Rig1MTc5MykuVHJhbnNmb3JtLG09Rig3MjAyNCkucztmdW5jdGlvbiBNKE8pe3guY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgTyx0aGlzLmhhc2hNb2RlP3RoaXNbT109dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRo'@;
put 'aXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9Rig2NjY5OCkoTSx4KSxNLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyxSLHopeyJz'@;
put 'dHJpbmciPT10eXBlb2YgTyYmKE89YWUuZnJvbShPLFIpKTt2YXIgSz10aGlzLl91cGRhdGUoTyk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooeiYmKEs9dGhpcy5fdG9TdHJpbmcoSyx6KSksSyl9LE0ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxNLnByb3RvdHlw'@;
put 'ZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LE0ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4g'@;
put 'dW5zdXBwb3J0ZWQgc3RhdGUiKX0sTS5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxNLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE8sUix6KXt2YXIgSzt0cnl7dGhpcy5o'@;
put 'YXNoTW9kZT90aGlzLl91cGRhdGUoTyk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShPKSl9Y2F0Y2goSSl7Sz1JfWZpbmFsbHl7eihLKX19LE0ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihPKXt2YXIgUjt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaCh6KXtSPXp9TyhSKX0s'@;
put 'TS5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oTyl7dmFyIFI9dGhpcy5fX2ZpbmFsKCl8fGFlLmFsbG9jKDApO3JldHVybiBPJiYoUj10aGlzLl90b1N0cmluZyhSLE8sITApKSxSfSxNLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oTyxSLHope2lmKHRoaXMuX2RlY29k'@;
put 'ZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBtKFIpLHRoaXMuX2VuY29kaW5nPVIpLHRoaXMuX2VuY29kaW5nIT09Uil0aHJvdyBuZXcgRXJyb3IoImNhbid0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKE8pO3JldHVybiB6JiYoSys9dGhpcy5fZGVjb2Rlci5l'@;
put 'bmQoKSksS30sYXQuZXhwb3J0cz1NfSwzODg0MDooYXQsSWUsRik9Pnt2YXIgYWU9Rig4ODY1MSkseD1GKDMxODUpO2F0LmV4cG9ydHM9ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBsZShSKX07dmFyIG09e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0'@;
put 'cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZToi'@;
put 'cDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gbGUoTyl7dGhpcy5jdXJ2ZVR5cGU9bVtPXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOk99KSx0aGlzLmN1cnZlPW5ldyBhZS5lYyh0aGlzLmN1'@;
put 'cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIE0oTyxSLHope0FycmF5LmlzQXJyYXkoTyl8fChPPU8udG9BcnJheSgpKTt2YXIgSz1uZXcgQnVmZmVyKE8pO2lmKHomJksubGVuZ3RoPHope3ZhciBJPW5ldyBCdWZmZXIoei1LLmxlbmd0aCk7SS5maWxsKDApLEs9QnVm'@;
put 'ZmVyLmNvbmNhdChbSSxLXSl9cmV0dXJuIFI/Sy50b1N0cmluZyhSKTpLfW0ucDIyND1tLnNlY3AyMjRyMSxtLnAyNTY9bS5zZWNwMjU2cjE9bS5wcmltZTI1NnYxLG0ucDE5Mj1tLnNlY3AxOTJyMT1tLnByaW1lMTkydjEsbS5wMzg0PW0uc2VjcDM4NHIxLG0ucDUyMT1tLnNlY3A1MjFyMSxs'@;
put 'ZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKE8sUil7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShPLFIpfSxsZS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihPLFIseil7cmV0dXJuIFI9Unx8InV0Zjgi'@;
put 'LEJ1ZmZlci5pc0J1ZmZlcihPKXx8KE89bmV3IEJ1ZmZlcihPLFIpKSxNKHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhPKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLHosdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LGxlLnByb3RvdHlwZS5nZXRQ'@;
put 'dWJsaWNLZXk9ZnVuY3Rpb24oTyxSKXt2YXIgej10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PVIsITApO3JldHVybiJoeWJyaWQiPT09UiYmKHpbMF09elt6Lmxlbmd0aC0xXSUyPzc6NiksTSh6LE8pfSxsZS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihPKXty'@;
put 'ZXR1cm4gTSh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLE8pfSxsZS5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKE8sUil7cmV0dXJuIFI9Unx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihPKXx8KE89bmV3IEJ1ZmZlcihPLFIpKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhPKSx0aGlz'@;
put 'fSxsZS5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihPLFIpe1I9Unx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihPKXx8KE89bmV3IEJ1ZmZlcihPLFIpKTt2YXIgej1uZXcgeChPKTtyZXR1cm4gej16LnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWly'@;
put 'KCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKHopLHRoaXN9fSwzMTg1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShHLGIpe2lmKCFHKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcs'@;
put 'Yil7Ry5zdXBlcl89Yjt2YXIgRD1mdW5jdGlvbigpe307RC5wcm90b3R5cGU9Yi5wcm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlvbiBNKEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29y'@;
put 'ZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigoImxlIj09PWJ8fCJiZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9pbml0KEd8fDAsYnx8MTAsRHx8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0s'@;
put 'TS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+'@;
put 'PTk3JiZEPD0xMDI/RC04NzpELTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQpe3ZhciBIPVIoRyxEKTtyZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8PDQpLEh9ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgubWluKEcubGVuZ3RoLEQpLEM9YjtDPGc7QysrKXt2YXIgUz1H'@;
put 'LmNoYXJDb2RlQXQoQyktNDg7Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+PTE3P1MtMTcrMTA6U31yZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53'@;
put 'b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLEQsSCl7aWYoIm51bWJlciI9'@;
put 'PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLEQsSCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTImJkQ8PTM2KTt2YXIgTj0wOyItIj09PShiPWIudG9TdHJpbmco'@;
put 'KS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTisrLHRoaXMubmVnYXRpdmU9MSksTjxiLmxlbmd0aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChiLE4sSCk6KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0u'@;
put 'cHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAmJih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcx'@;
put 'MDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKX0sTS5w'@;
put 'cm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLEQsSCl7aWYobSgibnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRz'@;
put 'PW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTi0xXTw8OHxiW04tMl08'@;
put 'PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOKzFdPDw4fGJbTisyXTw8MTYp'@;
put 'PDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQp'@;
put 'LzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIFMsZz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+PUQ7Ti09MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118'@;
put 'PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODtlbHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0wP0QrMTpEO048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMu'@;
put 'd29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3MTA4ODYzO2cqPUQpTisrO04tLSxnPWcvRHwwO2Zvcih2YXIg'@;
put 'Qz1iLmxlbmd0aC1ILFM9QyVOLHY9TWF0aC5taW4oQyxDLVMpK0gscD0wLHc9SDt3PHY7dys9TilwPUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1TKXt2YXIgSj0xO2Zvcihw'@;
put 'PUsoYix3LGIubGVuZ3RoLEQpLHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5pbXVsbihKKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJy'@;
put 'YXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKWIud29yZHNbRF09dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFy'@;
put 'IGI9bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7'@;
put 'dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhp'@;
put 'cy5uZWdhdGl2ZT0wKSx0aGlzfSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUz'@;
put 'NjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4'@;
put 'OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZTt2YXIgSD1HLmxlbmd0aCtiLmxlbmd0aHwwO0QubGVu'@;
put 'Z3RoPUgsSD1ILTF8MDt2YXIgTj0wfEcud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1OKmcsdj1DLzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYsSj02NzEwODg2MyZ2LG5lPU1hdGgubWluKHAsYi5sZW5ndGgt'@;
put 'MSksZGU9TWF0aC5tYXgoMCxwLUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsrKXcrPShDPShOPTB8Ry53b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNbZGVdKStKKS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8Six2PTB8d31yZXR1cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6'@;
put 'RC5sZW5ndGgtLSxELnN0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYixEKXt2YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMud29yZHNbQ10s'@;
put 'dj0oMTY3NzcyMTUmKFM8PE58ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShnPVM+Pj4yNC1OJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXYubGVuZ3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZvcigwIT09ZyYmKEg9Zy50b1N0cmluZygxNikrSCk7SC5sZW5n'@;
put 'dGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPWtbYl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihKLm5lZ2F0aXZlPTA7IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5t'@;
put 'b2RuKHcpLnRvU3RyaW5nKGIpO0g9KEo9Si5pZGl2bih3KSkuaXNaZXJvKCk/bmUrSDpJW3AtbmUubGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfW0oITEs'@;
put 'IkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndv'@;
put 'cmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LE0ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88InUiKSx0aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLnRvQXJy'@;
put 'YXlMaWtlKEFycmF5LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxnPUh8fE1hdGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbShnPjAsIlJlcXVlc3Rl'@;
put 'ZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdixwLEM9ImxlIj09PUQsUz1uZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW3BdPXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1l'@;
put 'bHNle2ZvcihwPTA7cDxnLU47cCsrKVNbcF09MDtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ctcC0xXT12fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6'@;
put 'MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciBEPWIsSD0wO3JldHVybiBEPj00MDk2JiYoSCs9MTMsRD4+Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49NyksRD49OCYmKEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lm'@;
put 'KDA9PT1iKXJldHVybiAyNjt2YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZEfHwoSCs9MTMsRD4+Pj0xMyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUmRHx8KEgrPTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyssSH0sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7'@;
put 'dmFyIEQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3Ro'@;
put 'O0QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tEXSk7aWYoYis9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1m'@;
put 'dW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0'@;
put 'aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlz'@;
put 'WmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKyspdGhpcy53b3Jkc1tEXT10aGlzLndv'@;
put 'cmRzW0RdfGIud29yZHNbRF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0'@;
put 'aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1'@;
put 'YW5kPWZ1bmN0aW9uKGIpe3ZhciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJv'@;
put 'dG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgp'@;
put 'LmlhbmQodGhpcyl9LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+'@;
put 'Yi5sZW5ndGg/KEQ9dGhpcyxIPWIpOihEPWIsSD10aGlzKTtmb3IodmFyIE49MDtOPEgubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl1eSC53b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXTtyZXR1cm4gdGhp'@;
put 'cy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIu'@;
put 'bGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5p'@;
put 'bm90bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9MHxNYXRoLmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4cGFuZChEKSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29yZHNbTl09NjcxMDg4NjMmfnRoaXMud29yZHNbTl07cmV0dXJu'@;
put 'IEg+MCYmKHRoaXMud29yZHNbTl09fnRoaXMud29yZHNbTl0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVy'@;
put 'Ij09dHlwZW9mIGImJmI+PTApO3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlzLndvcmRzW0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2'@;
put 'YXIgRCxILE47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5u'@;
put 'ZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1iKTooSD1iLE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jk'@;
put 'c1tDXSkrKDB8Ti53b3Jkc1tDXSkrZyksZz1EPj4+MjY7Zm9yKDswIT09ZyYmQzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3Ro'@;
put 'XT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRp'@;
put 'dmU/KGIubmVnYXRpdmU9MCxEPXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEsRCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsRCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgp'@;
put 'LmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZl'@;
put 'KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlzLmNtcChiKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhO'@;
put 'PXRoaXMsZz1iKTooTj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAhPT1DJiZTPE4ubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNb'@;
put 'U10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09PUMmJlM8Ti5sZW5ndGgmJk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYm'@;
put 'KHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3JkcyxnPUQud29yZHMsQz1ILndvcmRzLFM9MCxKPTB8TlswXSxu'@;
put 'ZT04MTkxJkosZGU9Sj4+PjEzLGZlPTB8TlsxXSx4ZT04MTkxJmZlLExlPWZlPj4+MTMsRmU9MHxOWzJdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxXZT0wfE5bM10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLEplPTB8Tls0XSxsdD04MTkxJkplLFBlPUplPj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEm'@;
put 'YmUsVGU9YmU+Pj4xMyxxZT0wfE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0PTB8Tls3XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxOWzhdLGl0PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEzLG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0'@;
put 'PW9uPj4+MTMsYm49MHxnWzFdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfGdbMl0sSG49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyxtbj0wfGdbNV0scnQ9ODE5MSZtbixJdD1tbj4+'@;
put 'PjEzLEp0PTB8Z1s2XSxEdD04MTkxJkp0LHB0PUp0Pj4+MTMsWXQ9MHxnWzddLEluPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8Z1s5XSxSbj04MTkxJkJuLCR0PUJuPj4+MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUs'@;
put 'SC5sZW5ndGg9MTk7dmFyIFBuPShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkrKFBuPj4+MjYpfDAsUG4mPTY3MTA4ODYz'@;
put 'LHY9TWF0aC5pbXVsKHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGguaW11bChMZSxDbil8MCx3PU1hdGguaW11bChMZSxVdCk7dmFyIG5pPShTKyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChk'@;
put 'ZSxXbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxlbil8MCkrKHA+Pj4xMyl8MCkrKG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGguaW11bChqZSxDbil8MCx3PU1hdGguaW11bChqZSxVdCksdj12'@;
put 'K01hdGguaW11bCh4ZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoTGUsV24pfDAsdz13K01hdGguaW11bChMZSxlbil8MDt2YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsSG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxmdCl8MCkrTWF0'@;
put 'aC5pbXVsKGRlLEhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGZ0KXwwKSsocD4+PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0KSkrTWF0aC5pbXVsKFllLENuKXwwLHc9TWF0aC5pbXVsKFll'@;
put 'LFV0KSx2PXYrTWF0aC5pbXVsKE9lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChqZSxXbil8MCx3PXcrTWF0aC5pbXVsKGplLGVuKXwwLHY9ditNYXRoLmltdWwoeGUsSG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLEhuKXww'@;
put 'LHc9dytNYXRoLmltdWwoTGUsZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkr'@;
put 'KGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENuKSxwPShwPU1hdGguaW11bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8MCx3PU1hdGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwo'@;
put 'WWUsV24pfDAsdz13K01hdGguaW11bChZZSxlbil8MCx2PXYrTWF0aC5pbXVsKE9lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChqZSxIbil8MCx3PXcrTWF0aC5pbXVsKGplLGZ0KXwwLHY9ditNYXRoLmltdWwoeGUsaG4pfDAscD0ocD1wK01hdGguaW11bCh4'@;
put 'ZSx3dCl8MCkrTWF0aC5pbXVsKExlLGhuKXwwLHc9dytNYXRoLmltdWwoTGUsd3QpfDA7dmFyIHFyPShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGguaW11bChkZSxfdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGgu'@;
put 'aW11bChkZSxOdCl8MCkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11bChBZSxVdCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxVdCksdj12K01hdGguaW11bChsdCxXbil8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKGx0LGVuKXwwKStNYXRoLmltdWwoUGUsV24pfDAsdz13K01hdGguaW11bChQZSxlbil8MCx2PXYrTWF0aC5pbXVsKEtlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxIbil8MCx3PXcrTWF0aC5pbXVsKFllLGZ0KXwwLHY9ditNYXRoLmltdWwo'@;
put 'T2UsaG4pfDAscD0ocD1wK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKGplLGhuKXwwLHc9dytNYXRoLmltdWwoamUsd3QpfDAsdj12K01hdGguaW11bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoTGUsX3QpfDAsdz13K01hdGguaW11bChMZSxO'@;
put 'dCl8MDt2YXIgZ2k9KFMrKHY9ditNYXRoLmltdWwobmUscnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxJdCl8MCkrTWF0aC5pbXVsKGRlLHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEl0KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9Njcx'@;
put 'MDg4NjMsdj1NYXRoLmltdWwoWGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhlLFV0KSkrTWF0aC5pbXVsKFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0KSx2PXYrTWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZW4pfDApK01hdGguaW11bChUZSxXbil8MCx3PXcrTWF0aC5p'@;
put 'bXVsKFRlLGVuKXwwLHY9ditNYXRoLmltdWwobHQsSG4pfDAscD0ocD1wK01hdGguaW11bChsdCxmdCl8MCkrTWF0aC5pbXVsKFBlLEhuKXwwLHc9dytNYXRoLmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwo'@;
put 'WWUsaG4pfDAsdz13K01hdGguaW11bChZZSx3dCl8MCx2PXYrTWF0aC5pbXVsKE9lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChqZSxfdCl8MCx3PXcrTWF0aC5pbXVsKGplLE50KXwwLHY9ditNYXRoLmltdWwoeGUscnQpfDAscD0ocD1wK01hdGguaW11bCh4'@;
put 'ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwLHc9dytNYXRoLmltdWwoTGUsSXQpfDA7dmFyIHhyPShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bChkZSxEdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGgu'@;
put 'aW11bChkZSxwdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11bChNZSxVdCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxVdCksdj12K01hdGguaW11bChYZSxXbil8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFhlLGVuKXwwKStNYXRoLmltdWwoVWUsV24pfDAsdz13K01hdGguaW11bChVZSxlbil8MCx2PXYrTWF0aC5pbXVsKEFlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCx3PXcrTWF0aC5pbXVsKFRlLGZ0KXwwLHY9ditNYXRoLmltdWwo'@;
put 'bHQsaG4pfDAscD0ocD1wK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLHc9dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01hdGguaW11bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUsX3QpfDAsdz13K01hdGguaW11bChZZSxO'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsSXQpfDApK01hdGguaW11bChqZSxydCl8MCx3PXcrTWF0aC5pbXVsKGplLEl0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKExlLER0KXww'@;
put 'LHc9dytNYXRoLmltdWwoTGUscHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0aC5pbXVsKG5lLEluKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChkZSxJbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkr'@;
put 'KFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGl0LENuKSxwPShwPU1hdGguaW11bChpdCxVdCkpK01hdGguaW11bCh1dCxDbil8MCx3PU1hdGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwo'@;
put 'RGUsV24pfDAsdz13K01hdGguaW11bChEZSxlbil8MCx2PXYrTWF0aC5pbXVsKFhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11bChVZSxIbil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditNYXRoLmltdWwoQWUsaG4pfDAscD0ocD1wK01hdGguaW11bChB'@;
put 'ZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLHc9dytNYXRoLmltdWwoVGUsd3QpfDAsdj12K01hdGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGguaW11bChQZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoS2UsSXQpfDApK01hdGguaW11bChZZSxydCl8MCx3PXcrTWF0aC5pbXVsKFllLEl0KXwwLHY9ditNYXRoLmltdWwoT2UsRHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKGplLER0KXwwLHc9dytNYXRoLmltdWwoamUscHQpfDAsdj12'@;
put 'K01hdGguaW11bCh4ZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoTGUsSW4pfDAsdz13K01hdGguaW11bChMZSx6dCl8MDt2YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxzbil8MCkrTWF0'@;
put 'aC5pbXVsKGRlLHhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHNuKXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0KSkrTWF0aC5pbXVsKFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0'@;
put 'LFV0KSx2PXYrTWF0aC5pbXVsKGl0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5pbXVsKHV0LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsSG4pfDAscD0ocD1wK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLEhuKXww'@;
put 'LHc9dytNYXRoLmltdWwoRGUsZnQpfDAsdj12K01hdGguaW11bChYZSxobil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEFlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTnQpfDAp'@;
put 'K01hdGguaW11bChUZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFRlLE50KXwwLHY9ditNYXRoLmltdWwobHQscnQpfDAscD0ocD1wK01hdGguaW11bChsdCxJdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUsSXQpfDAsdj12K01hdGguaW11bChLZSxEdCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsdz13K01hdGguaW11bChZZSxwdCl8MCx2PXYrTWF0aC5pbXVsKE9lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxJbil8MCx3PXcrTWF0aC5pbXVsKGplLHp0KXwwLHY9ditNYXRoLmlt'@;
put 'dWwoeGUseG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKExlLHhuKXwwLHc9dytNYXRoLmltdWwoTGUsc24pfDA7dmFyIG5vPShTKyh2PXYrTWF0aC5pbXVsKG5lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsJHQpfDApK01hdGguaW11bChk'@;
put 'ZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8MCx3PU1hdGguaW11bChQdCxlbiksdj12'@;
put 'K01hdGguaW11bChpdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwodXQsSG4pfDAsdz13K01hdGguaW11bCh1dCxmdCl8MCx2PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCx3PXcrTWF0'@;
put 'aC5pbXVsKERlLHd0KXwwLHY9ditNYXRoLmltdWwoWGUsX3QpfDAscD0ocD1wK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLHc9dytNYXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEl0KXwwKStNYXRoLmlt'@;
put 'dWwoVGUscnQpfDAsdz13K01hdGguaW11bChUZSxJdCl8MCx2PXYrTWF0aC5pbXVsKGx0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDApK01hdGguaW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9ditNYXRoLmltdWwoS2UsSW4pfDAscD0ocD1wK01hdGguaW11'@;
put 'bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLEluKXwwLHc9dytNYXRoLmltdWwoWWUsenQpfDAsdj12K01hdGguaW11bChPZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUseG4pfDAsdz13K01hdGguaW11bChqZSxzbil8MDt2YXIgSHI9KFMrKHY9ditNYXRo'@;
put 'LmltdWwoeGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh4ZSwkdCl8MCkrTWF0aC5pbXVsKExlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKExlLCR0KXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSG4p'@;
put 'LHA9KHA9TWF0aC5pbXVsKEh0LGZ0KSkrTWF0aC5pbXVsKFB0LEhuKXwwLHc9TWF0aC5pbXVsKFB0LGZ0KSx2PXYrTWF0aC5pbXVsKGl0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsd3QpfDApK01hdGguaW11bCh1dCxobil8MCx3PXcrTWF0aC5pbXVsKHV0LHd0KXwwLHY9ditNYXRoLmlt'@;
put 'dWwoTWUsX3QpfDAscD0ocD1wK01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12K01hdGguaW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsdz13K01hdGguaW11bChV'@;
put 'ZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEFlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsSW4pfDAscD0ocD1wK01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLElu'@;
put 'KXwwLHc9dytNYXRoLmltdWwoUGUsenQpfDAsdj12K01hdGguaW11bChLZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMrKHY9ditNYXRoLmltdWwoT2UsUm4pfDApfDApKygoODE5MSYo'@;
put 'cD0ocD1wK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKGplLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGplLCR0KXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsaG4pLHA9KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0'@;
put 'aC5pbXVsKFB0LGhuKXwwLHc9TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0aC5pbXVsKGl0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsTnQpfDApK01hdGguaW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9ditNYXRoLmltdWwoTWUscnQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChNZSxJdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLHc9dytNYXRoLmltdWwoRGUsSXQpfDAsdj12K01hdGguaW11bChYZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01hdGguaW11bChVZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEFlLElu'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsenQpfDApK01hdGguaW11bChUZSxJbil8MCx3PXcrTWF0aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmltdWwobHQseG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLHc9dytNYXRoLmltdWwoUGUsc24pfDA7'@;
put 'dmFyIEppPShTKyh2PXYrTWF0aC5pbXVsKEtlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYz'@;
put 'LHY9TWF0aC5pbXVsKEh0LF90KSxwPShwPU1hdGguaW11bChIdCxOdCkpK01hdGguaW11bChQdCxfdCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12K01hdGguaW11bChpdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LEl0KXwwKStNYXRoLmltdWwodXQscnQpfDAsdz13K01hdGguaW11bCh1'@;
put 'dCxJdCl8MCx2PXYrTWF0aC5pbXVsKE1lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0aC5pbXVsKERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsSW4pfDAscD0ocD1wK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLElu'@;
put 'KXwwLHc9dytNYXRoLmltdWwoVWUsenQpfDAsdj12K01hdGguaW11bChBZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUseG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMrKHY9ditNYXRoLmltdWwobHQsUm4pfDApfDApKygoODE5MSYo'@;
put 'cD0ocD1wK01hdGguaW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQscnQpLHA9KHA9TWF0aC5pbXVsKEh0LEl0KSkrTWF0'@;
put 'aC5pbXVsKFB0LHJ0KXwwLHc9TWF0aC5pbXVsKFB0LEl0KSx2PXYrTWF0aC5pbXVsKGl0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9ditNYXRoLmltdWwoTWUsSW4pfDAscD0ocD1wK01hdGguaW11'@;
put 'bChNZSx6dCl8MCkrTWF0aC5pbXVsKERlLEluKXwwLHc9dytNYXRoLmltdWwoRGUsenQpfDAsdj12K01hdGguaW11bChYZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01hdGguaW11bChVZSxzbil8MDt2YXIgcm89KFMrKHY9ditNYXRo'@;
put 'LmltdWwoQWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsRHQp'@;
put 'LHA9KHA9TWF0aC5pbXVsKEh0LHB0KSkrTWF0aC5pbXVsKFB0LER0KXwwLHc9TWF0aC5pbXVsKFB0LHB0KSx2PXYrTWF0aC5pbXVsKGl0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCh1dCxJbil8MCx3PXcrTWF0aC5pbXVsKHV0LHp0KXwwLHY9ditNYXRoLmlt'@;
put 'dWwoTWUseG4pfDAscD0ocD1wK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFyIGlvPShTKyh2PXYrTWF0aC5pbXVsKFhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChV'@;
put 'ZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChVZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEluKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGguaW11bChQdCxJbil8MCx3PU1hdGguaW11bChQdCx6dCksdj12'@;
put 'K01hdGguaW11bChpdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwodXQseG4pfDAsdz13K01hdGguaW11bCh1dCxzbil8MDt2YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChNZSwkdCl8MCkrTWF0'@;
put 'aC5pbXVsKERlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKERlLCR0KXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNuKSkrTWF0aC5pbXVsKFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0'@;
put 'LHNuKTt2YXIgaG89KFMrKHY9ditNYXRoLmltdWwoaXQsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChpdCwkdCl8MCkrTWF0aC5pbXVsKHV0LFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0KXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9Njcx'@;
put 'MDg4NjM7dmFyIHlyPShTKyh2PU1hdGguaW11bChIdCxSbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQsUm4pfDApKTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkpKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2'@;
put 'MyxDWzBdPVBuLENbMV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1naSxDWzZdPXhyLENbN109VWksQ1s4XT1LcixDWzldPW5vLENbMTBdPUhyLENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENbMTVdPWlvLENbMTZdPUdpLENbMTddPWhvLENbMThdPXlyLDAh'@;
put 'PT1TJiYoQ1sxOV09UyxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcsYixEKXtyZXR1cm4obmV3IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUoRyxiKXt0aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10'@;
put 'aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gSD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVuZ3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlzLGIsRCk6TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlLEQubGVuZ3RoPUcubGVuZ3Ro'@;
put 'K2IubGVuZ3RoO2Zvcih2YXIgSD0wLE49MCxnPTA7ZzxELmxlbmd0aC0xO2crKyl7dmFyIEM9TjtOPTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1NYXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3RoKzEpO3A8PXY7cCsrKXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBd'@;
put 'KSooMHxiLndvcmRzW3BdKSxmZT02NzEwODg2MyZkZTtTPTY3MTA4ODYzJihmZT1mZStTfDApLE4rPShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDApKyhmZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxIPUMsQz1OfXJldHVybiAwIT09SD9ELndvcmRzW2ddPUg6RC5s'@;
put 'ZW5ndGgtLSxELnN0cmlwKCl9KHRoaXMsYixEKTpYKHRoaXMsYixEKSxIfSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsTj0wO048YjtOKyspRFtOXT10aGlzLnJldkJpbihOLEgsYik7'@;
put 'cmV0dXJuIER9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLEQsSCl7aWYoMD09PWJ8fGI9PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAsZz0wO2c8RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4s'@;
put 'ZyxDKXtmb3IodmFyIFM9MDtTPEM7UysrKU5bU109RFtiW1NdXSxnW1NdPUhbYltTXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFyIFM9MTtTPGc7Uzw8PTEpZm9yKHZhciB2PVM8PDEscD1NYXRo'@;
put 'LmNvcygyKk1hdGguUEkvdiksdz1NYXRoLnNpbigyKk1hdGguUEkvdiksSj0wO0o8ZztKKz12KWZvcih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8UztmZSsrKXt2YXIgeGU9SFtKK2ZlXSxMZT1OW0orZmVdLEZlPUhbSitmZStTXSxPZT1OW0orZmUrU10samU9bmUqRmUtZGUqT2U7T2U9bmUqT2Ur'@;
put 'ZGUqRmUsSFtKK2ZlXT14ZSsoRmU9amUpLE5bSitmZV09TGUrT2UsSFtKK2ZlK1NdPXhlLUZlLE5bSitmZStTXT1MZS1PZSxmZSE9PXYmJihqZT1wKm5lLXcqZGUsZGU9cCpkZSt3Km5lLG5lPWplKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRo'@;
put 'Lm1heChELGIpLE49MSZILGc9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlnKys7cmV0dXJuIDE8PGcrMStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7TisrKXt2YXIgZz1iW05dO2JbTl09YltILU4tMV0sYltILU4t'@;
put 'MV09ZyxnPURbTl0sRFtOXT0tRFtILU4tMV0sRFtILU4tMV09LWd9fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKk4rMV0vRCkrTWF0aC5yb3VuZChiWzIqTl0vRCkrSDti'@;
put 'W05dPTY3MTA4ODYzJmcsSD1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIsRCxILE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkxJihnKz0wfGJbQ10pLEhbMipDKzFdPTgxOTEmKGc+Pj49MTMp'@;
put 'LGc+Pj49MTM7Zm9yKEM9MipEO0M8TjsrK0MpSFtDXT0wO20oMD09PWcpLG0oMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09MDtyZXR1cm4gRH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlv'@;
put 'bihiLEQsSCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLEQubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihOKSxTPW5ldyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShOKSx3PW5ldyBBcnJheShOKSxKPW5ldyBBcnJheShOKSxuZT1u'@;
put 'ZXcgQXJyYXkoTiksZGU9SC53b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVydDEzYihELndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxDLHYscCxOLGcpLHRoaXMudHJhbnNmb3JtKHcsQyxKLG5lLE4s'@;
put 'Zyk7Zm9yKHZhciBmZT0wO2ZlPE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpbZmVdLXBbZmVdKm5lW2ZlXTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0qSltmZV0sdltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0aGlzLnRyYW5zZm9ybSh2LHAsZGUsQyxOLGcpLHRoaXMuY29u'@;
put 'anVnYXRlKGRlLEMsTiksdGhpcy5ub3JtYWxpemUxM2IoZGUsTiksSC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5sZW5ndGgrRC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQu'@;
put 'd29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIsRCl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5w'@;
put 'cm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zvcih2YXIgRD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFy'@;
put 'IE49KDB8dGhpcy53b3Jkc1tIXSkqYixnPSg2NzEwODg2MyZOKSsoNjcxMDg4NjMmRCk7RD4+PTI2LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMud29yZHNbSF09RCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnBy'@;
put 'b3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0s'@;
put 'TS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9uIGooRyl7Zm9yKHZhciBiPW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxEPTA7RDxiLmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tELzI2fDBdJjE8PE4pPj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09'@;
put 'PUQubGVuZ3RoKXJldHVybiBuZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxOPTA7TjxELmxlbmd0aCYmMD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYoKytOPEQubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7TisrLGc9Zy5zcXIoKSkwIT09RFtOXSYmKEg9SC5tdWwoZykpO3Jl'@;
put 'dHVybiBIfSxNLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShiLUQpLzI2LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBT'@;
put 'PXRoaXMud29yZHNbZ10mTjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLVM8PER8QyxDPVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29y'@;
put 'ZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LE0ucHJvdG90eXBlLml1c2hy'@;
put 'bj1mdW5jdGlvbihiLEQsSCl7dmFyIE47bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLE49RD8oRC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsdj1IO2lmKE4tPUMsTj1NYXRoLm1heCgw'@;
put 'LE4pLHYpe2Zvcih2YXIgcD0wO3A8QztwKyspdi53b3Jkc1twXT10aGlzLndvcmRzW3BdO3YubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2Ug'@;
put 'dGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHc9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2YXIgSj0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+Pj5nLHc9SiZTfXJldHVybiB2JiYwIT09dyYmKHYud29yZHNb'@;
put 'di5sZW5ndGgrK109dyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLEQsSCl9LE0ucHJv'@;
put 'dG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5p'@;
put 'c2hybihiKX0sTS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuISh0aGlzLmxl'@;
put 'bmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1EJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0u'@;
put 'cHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIpfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0'@;
put 'aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIp'@;
put 'fSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQsRD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6'@;
put 'dGhpcy53b3Jkc1tEKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtp'@;
put 'ZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMu'@;
put 'bmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF08MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRo'@;
put 'aXMuY2xvbmUoKS5pYWRkbihiKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK0hdKStTO3ZhciB2PSgw'@;
put 'fGIud29yZHNbZ10pKkQ7Uz0oKEMtPTY3MTA4ODYzJnYpPj4yNiktKHYvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hdKStTKT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7'@;
put 'aWYoMD09PVMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PVMpLFM9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5w'@;
put 'cm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1c2hsbihIKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFy'@;
put 'IHAsdj1OLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUQpeyhwPW5ldyBNKG51bGwpKS5sZW5ndGg9disxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3ddPTB9dmFyIEo9Ti5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEs'@;
put 'dik7MD09PUoubmVnYXRpdmUmJihOPUoscCYmKHAud29yZHNbdl09MSkpO2Zvcih2YXIgbmU9di0xO25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2NCooMHxOLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKGRlPU1hdGgubWluKGRlL0N8MCw2NzEw'@;
put 'ODg2MyksTi5faXNobG5zdWJtdWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRpdmU7KWRlLS0sTi5uZWdhdGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxuZSksTi5pc1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1kZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxOLnN0cmlwKCks'@;
put 'ImRpdiIhPT1EJiYwIT09SCYmTi5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpOfX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRp'@;
put 'dmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIsRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2Ok4sbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9'@;
put 'PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSxEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCksRCksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWco'@;
put 'KSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09RD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6'@;
put 'bnVsbH06Im1vZCI9PT1EP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYixEKTt2YXIgTixnLEN9LE0ucHJvdG90eXBlLmRp'@;
put 'dj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwi'@;
put 'bW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8oKSlyZXR1cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9kLmlzdWIoYik6RC5tb2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRs'@;
put 'bigxKSxDPUguY21wKE4pO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz9ELmRpdjowIT09RC5kaXYubmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPSgxPDwyNiklYixIPTAs'@;
put 'Tj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndvcmRzW05dKSklYjtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRz'@;
put 'W0hdKSs2NzEwODg2NCpEO3RoaXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRp'@;
put 'dmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgxKSx2PTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNo'@;
put 'cm4oMSksSC5pdXNocm4oMSksKyt2O2Zvcih2YXIgcD1ILmNsb25lKCksdz1ELmNsb25lKCk7IUQuaXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0xOyEoRC53b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZvcihELml1c2hybihKKTtKLS0gPjA7KShOLmlzT2RkKCl8fGcu'@;
put 'aXNPZGQoKSkmJihOLmlhZGQocCksZy5pc3ViKHcpKSxOLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNbMF0mZmUpJiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNocm4oZGUpO2RlLS0gPjA7KShDLmlzT2RkKCl8fFMuaXNPZGQo'@;
put 'KSkmJihDLmlhZGQocCksUy5pc3ViKHcpKSxDLml1c2hybigxKSxTLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxnLmlzdWIoUykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0dXJue2E6QyxiOlMsZ2NkOkguaXVzaGxuKHYpfX0sTS5wcm90'@;
put 'b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1ILmNsb25lKCk7RC5j'@;
put 'bXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEoRC53b3Jkc1swXSZ2KSYmUzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3IoRC5pdXNocm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1c2hybigxKTtmb3IodmFyIHA9MCx3PTE7IShILndvcmRzWzBd'@;
put 'JncpJiZwPDI2OysrcCx3PDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQpLGcuaXN1YihOKSl9cmV0dXJuKEo9MD09PUQuY21wbigxKT9O'@;
put 'OmcpLmNtcG4oMCk8MCYmSi5pYWRkKGIpLEp9LE0ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhpcy5jbG9uZSgpLEg9Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxI'@;
put 'Lm5lZ2F0aXZlPTA7Zm9yKHZhciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtOKyspRC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0QuaXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2'@;
put 'YXIgQz1EO0Q9SCxIPUN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztELmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxNLnByb3RvdHlwZS5iaW5jbj1m'@;
put 'dW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUyNixIPShiLUQpLzI2LE49MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zvcih2YXIgZz1OLEM9SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtD'@;
put 'Kyspe3ZhciBTPTB8dGhpcy53b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRoaXMud29yZHNbQ109UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5s'@;
put 'ZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3ZhciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhRClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlI'@;
put 'PTE7ZWxzZXtEJiYoYj0tYiksbShiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8wOk48Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhp'@;
put 'cy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBEPXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtRDpEfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lm'@;
put 'KHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxiLndvcmRzW0hdO2lmKE4hPT1nKXtOPGc/RD0tMTpOPmcmJihE'@;
put 'PTEpO2JyZWFrfX1yZXR1cm4gRH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlz'@;
put 'LmNtcG4oYik+PTB9LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChi'@;
put 'KX0sTS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LE0ucHJv'@;
put 'dG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LE0ucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29u'@;
put 'dGV4dCIpLG0oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRo'@;
put 'IG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlz'@;
put 'LnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQo'@;
put 'dGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlz'@;
put 'LnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlz'@;
put 'dWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlz'@;
put 'LnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5'@;
put 'MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnBy'@;
put 'b3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sTS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVy'@;
put 'biBtKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3'@;
put 'aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0'@;
put 'aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShHLGIpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNo'@;
put 'bG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9l'@;
put 'KCl7ZWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRyl7dmFyIGI9'@;
put 'TS5fcHJpbWUoRyk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBtKEcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUuY2FsbCh0aGlzLEcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExl'@;
put 'bmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9'@;
put 'dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gYi53'@;
put 'b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtkb3t0aGlzLnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhEKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxl'@;
put 'KEg+dGhpcy5uKTt2YXIgTj1IPHRoaXMubj8tMTpELnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU4/KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpOPjA/RC5pc3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6RC5fc3RyaXAoKSxEfSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVu'@;
put 'Y3Rpb24oYixEKXtiLml1c2hybih0aGlzLm4sMCxEKX0sZWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0sbGUodGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD00MTk0MzAzLE49TWF0aC5taW4oYi5sZW5n'@;
put 'dGgsOSksZz0wO2c8TjtnKyspRC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKEQubGVuZ3RoPU4sYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29yZHNbRC5sZW5ndGgrK109QyZILGc9MTA7ZzxiLmxlbmd0aDtn'@;
put 'Kyspe3ZhciBTPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShTJkgpPDw0fEM+Pj4yMixDPVN9Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAs'@;
put 'Yi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hdO2Iud29yZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3Ro'@;
put 'LTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0sbGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxlZSksaGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MTkqKDB8Yi53'@;
put 'b3Jkc1tIXSkrRCxnPTY3MTA4ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hdPWcsRD1OfXJldHVybiAwIT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109RCksYn0sTS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgRDtpZigiazI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2Ug'@;
put 'aWYoInAyMjQiPT09YilEPW5ldyBvZTtlbHNlIGlmKCJwMTkyIj09PWIpRD1uZXcgc2U7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09RCxEfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24o'@;
put 'Yil7bSgwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLEQpe20oMD09KGIubmVnYXRpdmV8RC5uZWdhdGl2ZSksInJl'@;
put 'ZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCYmYi5yZWQ9PT1ELnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNl'@;
put 'UmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlz'@;
put 'Ll92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5hZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEgu'@;
put 'Y21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBl'@;
put 'LmlzdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxu'@;
put 'KEQpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkpfSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1'@;
put 'ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5j'@;
put 'bG9uZSgpO3ZhciBEPXRoaXMubS5hbmRsbigzKTtpZihtKEQlMj09MSksMz09PUQpe3ZhciBIPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4oMSksZz0wOyFOLmlzWmVybygpJiYwPT09Ti5hbmRsbigxKTsp'@;
put 'ZysrLE4uaXVzaHJuKDEpO20oIU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBNKDEpLnRvUmVkKHRoaXMpLFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgTSgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAs'@;
put 'dikuY21wKFMpOylwLnJlZElBZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93KHAsTiksSj10aGlzLnBvdyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBmZT1uZSx4ZT0wOzAhPT1mZS5jbXAoQyk7eGUrKylmZT1mZS5y'@;
put 'ZWRTcXIoKTttKHhlPGRlKTt2YXIgTGU9dGhpcy5wb3codyxuZXcgTSgxKS5pdXNobG4oZGUteGUtMSkpO0o9Si5yZWRNdWwoTGUpLHc9TGUucmVkU3FyKCksbmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgRD1iLl9pbnZt'@;
put 'cCh0aGlzLm0pO3JldHVybiAwIT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChEKS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PUQu'@;
put 'Y21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBOPW5ldyBBcnJheSgxNik7TlswXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZhciBnPTI7ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7dmFyIEM9TlswXSxTPTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUy'@;
put 'Njtmb3IoMD09PXAmJihwPTI2KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgdz1ELndvcmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIgbmU9dz4+SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHwwIT09Uz8oUzw8PTEsU3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9'@;
put 'PT1KKSYmKEM9dGhpcy5tdWwoQyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xvbmUoKTpEfSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVu'@;
put 'Y3Rpb24oYil7dmFyIEQ9Yi5jbG9uZSgpO3JldHVybiBELnJlZD1udWxsLER9LE0ubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxsZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkp'@;
put 'fSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiBELnJlZD1udWxsLER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jk'@;
put 'c1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgSD1iLmltdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9'@;
put 'Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11'@;
put 'bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9'@;
put 'Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDk2MzYyOihhdCxJZSxG'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjY5OCkseD1GKDc1ODI5KSxtPUYoMzk3MDYpLGxlPUYoOTc5NjUpLE09Rig4NjQyMCk7ZnVuY3Rpb24gTyhSKXtNLmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1SfWFlKE8sTSksTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihS'@;
put 'KXt0aGlzLl9oYXNoLnVwZGF0ZShSKX0sTy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LGF0LmV4cG9ydHM9ZnVuY3Rpb24oeil7cmV0dXJuIm1kNSI9PT0oej16LnRvTG93ZXJDYXNlKCkpP25ldyB4OiJybWQxNjAiPT09enx8InJpcGVt'@;
put 'ZDE2MCI9PT16P25ldyBtOm5ldyBPKGxlKHopKX19LDg3NTg4OihhdCxJZSxGKT0+e3ZhciBhZT1GKDc1ODI5KTthdC5leHBvcnRzPWZ1bmN0aW9uKHgpe3JldHVybihuZXcgYWUpLnVwZGF0ZSh4KS5kaWdlc3QoKX19LDg1ODI1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2'@;
put 'NjY5OCkseD1GKDk1OTIyKSxtPUYoODY0MjApLGxlPUYoODQzKS5CdWZmZXIsTT1GKDg3NTg4KSxPPUYoMzk3MDYpLFI9Rig5Nzk2NSksej1sZS5hbGxvYygxMjgpO2Z1bmN0aW9uIEsoSSxrKXttLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBrJiYoaz1sZS5mcm9tKGsp'@;
put 'KTt2YXIgRT0ic2hhNTEyIj09PUl8fCJzaGEzODQiPT09ST8xMjg6NjQ7dGhpcy5fYWxnPUksdGhpcy5fa2V5PWssay5sZW5ndGg+RT9rPSgicm1kMTYwIj09PUk/bmV3IE86UihJKSkudXBkYXRlKGspLmRpZ2VzdCgpOmsubGVuZ3RoPEUmJihrPWxlLmNvbmNhdChbayx6XSxFKSk7Zm9yKHZh'@;
put 'ciBWPXRoaXMuX2lwYWQ9bGUuYWxsb2NVbnNhZmUoRSksQj10aGlzLl9vcGFkPWxlLmFsbG9jVW5zYWZlKEUpLFk9MDtZPEU7WSsrKVZbWV09NTRea1tZXSxCW1ldPTkyXmtbWV07dGhpcy5faGFzaD0icm1kMTYwIj09PUk/bmV3IE86UihJKSx0aGlzLl9oYXNoLnVwZGF0ZShWKX1hZShLLG0p'@;
put 'LEsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSSl7dGhpcy5faGFzaC51cGRhdGUoSSl9LEsucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBJPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBPOlIodGhpcy5fYWxnKSkudXBkYXRl'@;
put 'KHRoaXMuX29wYWQpLnVwZGF0ZShJKS5kaWdlc3QoKX0sYXQuZXhwb3J0cz1mdW5jdGlvbihrLEUpe3JldHVybiJybWQxNjAiPT09KGs9ay50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1rP25ldyBLKCJybWQxNjAiLEUpOiJtZDUiPT09az9uZXcgeChNLEUpOm5ldyBLKGssRSl9fSw5'@;
put 'NTkyMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9Rig4NDMpLkJ1ZmZlcixtPUYoODY0MjApLGxlPXguYWxsb2MoMTI4KSxNPTY0O2Z1bmN0aW9uIE8oUix6KXttLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiB6JiYoej14LmZyb20oeikp'@;
put 'LHRoaXMuX2FsZz1SLHRoaXMuX2tleT16LHoubGVuZ3RoPk0/ej1SKHopOnoubGVuZ3RoPE0mJih6PXguY29uY2F0KFt6LGxlXSxNKSk7Zm9yKHZhciBLPXRoaXMuX2lwYWQ9eC5hbGxvY1Vuc2FmZShNKSxJPXRoaXMuX29wYWQ9eC5hbGxvY1Vuc2FmZShNKSxrPTA7azxNO2srKylLW2tdPTU0'@;
put 'Xnpba10sSVtrXT05Ml56W2tdO3RoaXMuX2hhc2g9W0tdfWFlKE8sbSksTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihSKXt0aGlzLl9oYXNoLnB1c2goUil9LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBSPXRoaXMuX2FsZyh4LmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0'@;
put 'dXJuIHRoaXMuX2FsZyh4LmNvbmNhdChbdGhpcy5fb3BhZCxSXSkpfSxhdC5leHBvcnRzPU99LDc3OTAzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjtJZS5yYW5kb21CeXRlcz1JZS5ybmc9SWUucHNldWRvUmFuZG9tQnl0ZXM9SWUucHJuZz1GKDQ0MDE5KSxJZS5jcmVhdGVIYXNoPUllLkhh'@;
put 'c2g9Rig5NjM2MiksSWUuY3JlYXRlSG1hYz1JZS5IbWFjPUYoODU4MjUpO3ZhciBhZT1GKDgxNjk5KSx4PU9iamVjdC5rZXlzKGFlKSxtPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdCh4KTtJZS5nZXRIYXNoZXM9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gbX07dmFyIGxlPUYoNTcxMDApO0llLnBia2RmMj1sZS5wYmtkZjIsSWUucGJrZGYyU3luYz1sZS5wYmtkZjJTeW5jO3ZhciBNPUYoMjU2MDApO0llLkNpcGhlcj1NLkNpcGhlcixJZS5jcmVhdGVDaXBoZXI9TS5jcmVhdGVDaXBoZXIsSWUuQ2lwaGVyaXY9TS5DaXBo'@;
put 'ZXJpdixJZS5jcmVhdGVDaXBoZXJpdj1NLmNyZWF0ZUNpcGhlcml2LEllLkRlY2lwaGVyPU0uRGVjaXBoZXIsSWUuY3JlYXRlRGVjaXBoZXI9TS5jcmVhdGVEZWNpcGhlcixJZS5EZWNpcGhlcml2PU0uRGVjaXBoZXJpdixJZS5jcmVhdGVEZWNpcGhlcml2PU0uY3JlYXRlRGVjaXBoZXJpdixJ'@;
put 'ZS5nZXRDaXBoZXJzPU0uZ2V0Q2lwaGVycyxJZS5saXN0Q2lwaGVycz1NLmxpc3RDaXBoZXJzO3ZhciBPPUYoNDUxNDQpO0llLkRpZmZpZUhlbGxtYW5Hcm91cD1PLkRpZmZpZUhlbGxtYW5Hcm91cCxJZS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9Ty5jcmVhdGVEaWZmaWVIZWxsbWFuR3Jv'@;
put 'dXAsSWUuZ2V0RGlmZmllSGVsbG1hbj1PLmdldERpZmZpZUhlbGxtYW4sSWUuY3JlYXRlRGlmZmllSGVsbG1hbj1PLmNyZWF0ZURpZmZpZUhlbGxtYW4sSWUuRGlmZmllSGVsbG1hbj1PLkRpZmZpZUhlbGxtYW47dmFyIFI9RigyNzY4Nik7SWUuY3JlYXRlU2lnbj1SLmNyZWF0ZVNpZ24sSWUu'@;
put 'U2lnbj1SLlNpZ24sSWUuY3JlYXRlVmVyaWZ5PVIuY3JlYXRlVmVyaWZ5LEllLlZlcmlmeT1SLlZlcmlmeSxJZS5jcmVhdGVFQ0RIPUYoMzg4NDApO3ZhciB6PUYoMjcwNTApO0llLnB1YmxpY0VuY3J5cHQ9ei5wdWJsaWNFbmNyeXB0LEllLnByaXZhdGVFbmNyeXB0PXoucHJpdmF0ZUVuY3J5'@;
put 'cHQsSWUucHVibGljRGVjcnlwdD16LnB1YmxpY0RlY3J5cHQsSWUucHJpdmF0ZURlY3J5cHQ9ei5wcml2YXRlRGVjcnlwdDt2YXIgSz1GKDYxMjM3KTtJZS5yYW5kb21GaWxsPUsucmFuZG9tRmlsbCxJZS5yYW5kb21GaWxsU3luYz1LLnJhbmRvbUZpbGxTeW5jLEllLmNyZWF0ZUNyZWRlbnRp'@;
put 'YWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFsic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cyIsImh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG8tYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSJd'@;
put 'LmpvaW4oIlxuIikpfSxJZS5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6'@;
put 'MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9D'@;
put 'T05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSwxMDAxMjpmdW5jdGlvbihhdCxJZSxGKXt2YXIgYWU7YXQuZXhwb3J0cz0oYWU9YWV8fGZ1bmN0aW9uKHgsbSl7dmFyIGxlO2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvJiYobGU9'@;
put 'd2luZG93LmNyeXB0byksdHlwZW9mIHNlbGY8InUiJiZzZWxmLmNyeXB0byYmKGxlPXNlbGYuY3J5cHRvKSx0eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXMuY3J5cHRvJiYobGU9Z2xvYmFsVGhpcy5jcnlwdG8pLCFsZSYmdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tc0NyeXB0'@;
put 'byYmKGxlPXdpbmRvdy5tc0NyeXB0byksIWxlJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsLmNyeXB0byYmKGxlPWdsb2JhbC5jcnlwdG8pLCFsZSl0cnl7bGU9Rig3NzkwMyl9Y2F0Y2h7fXZhciBNPWZ1bmN0aW9uKCl7aWYobGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsZS5nZXRSYW5k'@;
put 'b21WYWx1ZXMpdHJ5e3JldHVybiBsZS5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIGxlLnJhbmRvbUJ5dGVzKXRyeXtyZXR1cm4gbGUucmFuZG9tQnl0ZXMoNCkucmVhZEludDMyTEUoKX1jYXRjaHt9fXRocm93IG5l'@;
put 'dyBFcnJvcigiTmF0aXZlIGNyeXB0byBtb2R1bGUgY291bGQgbm90IGJlIHVzZWQgdG8gZ2V0IHNlY3VyZSByYW5kb20gbnVtYmVyLiIpfSxPPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVSgpe31yZXR1cm4gZnVuY3Rpb24ocSl7dmFyIGVlO3JldHVybiBVLnByb3RvdHlw'@;
put 'ZT1xLGVlPW5ldyBVLFUucHJvdG90eXBlPW51bGwsZWV9fSgpLFI9e30sej1SLmxpYj17fSxLPXouQmFzZT17ZXh0ZW5kOmZ1bmN0aW9uKFUpe3ZhciBxPU8odGhpcyk7cmV0dXJuIFUmJnEubWl4SW4oVSksKCFxLmhhc093blByb3BlcnR5KCJpbml0Iil8fHRoaXMuaW5pdD09PXEuaW5pdCkm'@;
put 'JihxLmluaXQ9ZnVuY3Rpb24oKXtxLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHEuaW5pdC5wcm90b3R5cGU9cSxxLiRzdXBlcj10aGlzLHF9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBVPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIFUuaW5pdC5hcHBseShVLGFyZ3VtZW50cyks'@;
put 'VX0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oVSl7Zm9yKHZhciBxIGluIFUpVS5oYXNPd25Qcm9wZXJ0eShxKSYmKHRoaXNbcV09VVtxXSk7VS5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKHRoaXMudG9TdHJpbmc9VS50b1N0cmluZyl9LGNsb25lOmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX0sST16LldvcmRBcnJheT1LLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihVLHEpe1U9dGhpcy53b3Jkcz1VfHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPXE/cTo0KlUubGVuZ3RofSx0b1N0cmluZzpmdW5jdGlvbihVKXtyZXR1'@;
put 'cm4oVXx8RSkuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy53b3JkcyxlZT1VLndvcmRzLHRlPXRoaXMuc2lnQnl0ZXMsb2U9VS5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksdGUlNClmb3IodmFyIHNlPTA7c2U8b2U7c2UrKylxW3RlK3NlPj4+Ml18PShl'@;
put 'ZVtzZT4+PjJdPj4+MjQtc2UlNCo4JjI1NSk8PDI0LSh0ZStzZSklNCo4O2Vsc2UgZm9yKHZhciB1ZT0wO3VlPG9lO3VlKz00KXFbdGUrdWU+Pj4yXT1lZVt1ZT4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1vZSx0aGlzfSxjbGFtcDpmdW5jdGlvbigpe3ZhciBVPXRoaXMud29yZHMscT10'@;
put 'aGlzLnNpZ0J5dGVzO1VbcT4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1xJTQqOCxVLmxlbmd0aD14LmNlaWwocS80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVT1LLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFUud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxVfSxyYW5kb206ZnVuY3Rpb24oVSl7'@;
put 'Zm9yKHZhciBxPVtdLGVlPTA7ZWU8VTtlZSs9NClxLnB1c2goTSgpKTtyZXR1cm4gbmV3IEkuaW5pdChxLFUpfX0pLGs9Ui5lbmM9e30sRT1rLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1VLndvcmRzLGVlPVUuc2lnQnl0ZXMsdGU9W10sb2U9MDtvZTxlZTtvZSsrKXt2'@;
put 'YXIgc2U9cVtvZT4+PjJdPj4+MjQtb2UlNCo4JjI1NTt0ZS5wdXNoKChzZT4+PjQpLnRvU3RyaW5nKDE2KSksdGUucHVzaCgoMTUmc2UpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHRlLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihVKXtmb3IodmFyIHE9VS5sZW5ndGgsZWU9W10sdGU9MDt0ZTxx'@;
put 'O3RlKz0yKWVlW3RlPj4+M118PXBhcnNlSW50KFUuc3Vic3RyKHRlLDIpLDE2KTw8MjQtdGUlOCo0O3JldHVybiBuZXcgSS5pbml0KGVlLHEvMil9fSxqPWsuTGF0aW4xPXtzdHJpbmdpZnk6ZnVuY3Rpb24oVSl7Zm9yKHZhciBxPVUud29yZHMsZWU9VS5zaWdCeXRlcyx0ZT1bXSxvZT0wO29l'@;
put 'PGVlO29lKyspdGUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHFbb2U+Pj4yXT4+PjI0LW9lJTQqOCYyNTUpKTtyZXR1cm4gdGUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1VLmxlbmd0aCxlZT1bXSx0ZT0wO3RlPHE7dGUrKyllZVt0ZT4+PjJdfD0oMjU1JlUuY2hh'@;
put 'ckNvZGVBdCh0ZSkpPDwyNC10ZSU0Kjg7cmV0dXJuIG5ldyBJLmluaXQoZWUscSl9fSxWPWsuVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShqLnN0cmluZ2lmeShVKSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiTWFsZm9y'@;
put 'bWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0aW9uKFUpe3JldHVybiBqLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChVKSkpfX0sQj16LkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09Sy5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgSS5pbml0LHRo'@;
put 'aXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihVKXsic3RyaW5nIj09dHlwZW9mIFUmJihVPVYucGFyc2UoVSkpLHRoaXMuX2RhdGEuY29uY2F0KFUpLHRoaXMuX25EYXRhQnl0ZXMrPVUuc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9uKFUpe3ZhciBxLGVlPXRoaXMuX2RhdGEs'@;
put 'dGU9ZWUud29yZHMsb2U9ZWUuc2lnQnl0ZXMsc2U9dGhpcy5ibG9ja1NpemUsdWU9b2UvKDQqc2UpLGNlPSh1ZT1VP3guY2VpbCh1ZSk6eC5tYXgoKDB8dWUpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKnNlLEc9eC5taW4oNCpjZSxvZSk7aWYoY2Upe2Zvcih2YXIgYj0wO2I8Y2U7Yis9c2Up'@;
put 'dGhpcy5fZG9Qcm9jZXNzQmxvY2sodGUsYik7cT10ZS5zcGxpY2UoMCxjZSksZWUuc2lnQnl0ZXMtPUd9cmV0dXJuIG5ldyBJLmluaXQocSxHKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVT1LLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFUuX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLFV9LF9t'@;
put 'aW5CdWZmZXJTaXplOjB9KSxYPSh6Lkhhc2hlcj1CLmV4dGVuZCh7Y2ZnOksuZXh0ZW5kKCksaW5pdDpmdW5jdGlvbihVKXt0aGlzLmNmZz10aGlzLmNmZy5leHRlbmQoVSksdGhpcy5yZXNldCgpfSxyZXNldDpmdW5jdGlvbigpe0IucmVzZXQuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9'@;
put 'LHVwZGF0ZTpmdW5jdGlvbihVKXtyZXR1cm4gdGhpcy5fYXBwZW5kKFUpLHRoaXMuX3Byb2Nlc3MoKSx0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbihVKXtyZXR1cm4gVSYmdGhpcy5fYXBwZW5kKFUpLHRoaXMuX2RvRmluYWxpemUoKX0sYmxvY2tTaXplOjE2LF9jcmVhdGVIZWxwZXI6ZnVuY3Rp'@;
put 'b24oVSl7cmV0dXJuIGZ1bmN0aW9uKHEsZWUpe3JldHVybiBuZXcgVS5pbml0KGVlKS5maW5hbGl6ZShxKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihxLGVlKXtyZXR1cm4gbmV3IFguSE1BQy5pbml0KFUsZWUpLmZpbmFsaXplKHEpfX19KSxSLmFs'@;
put 'Z289e30pO3JldHVybiBSfShNYXRoKSxhZSl9LDkyODczOmZ1bmN0aW9uKGF0LEllLEYpe3ZhciBhZTthdC5leHBvcnRzPShhZT1GKDEwMDEyKSxmdW5jdGlvbih4KXt2YXIgbT1hZSxsZT1tLmxpYixNPWxlLldvcmRBcnJheSxPPWxlLkhhc2hlcixSPW0uYWxnbyx6PVtdOyFmdW5jdGlvbigp'@;
put 'e2Zvcih2YXIgVj0wO1Y8NjQ7VisrKXpbVl09NDI5NDk2NzI5Nip4LmFicyh4LnNpbihWKzEpKXwwfSgpO3ZhciBLPVIuTUQ1PU8uZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IE0uaW5pdChbMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMz'@;
put 'ODc4XSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihWLEIpe2Zvcih2YXIgWT0wO1k8MTY7WSsrKXt2YXIgWD1CK1ksVT1WW1hdO1ZbWF09MTY3MTE5MzUmKFU8PDh8VT4+PjI0KXw0Mjc4MjU1MzYwJihVPDwyNHxVPj4+OCl9dmFyIHE9dGhpcy5faGFzaC53b3JkcyxlZT1WW0IrMF0sdGU9'@;
put 'VltCKzFdLG9lPVZbQisyXSxzZT1WW0IrM10saGU9VltCKzRdLHVlPVZbQis1XSxjZT1WW0IrNl0sRz1WW0IrN10sYj1WW0IrOF0sRD1WW0IrOV0sSD1WW0IrMTBdLE49VltCKzExXSxnPVZbQisxMl0sQz1WW0IrMTNdLFM9VltCKzE0XSx2PVZbQisxNV0scD1xWzBdLHc9cVsxXSxKPXFbMl0s'@;
put 'bmU9cVszXTtwPUkocCx3LEosbmUsZWUsNyx6WzBdKSxuZT1JKG5lLHAsdyxKLHRlLDEyLHpbMV0pLEo9SShKLG5lLHAsdyxvZSwxNyx6WzJdKSx3PUkodyxKLG5lLHAsc2UsMjIselszXSkscD1JKHAsdyxKLG5lLGhlLDcsels0XSksbmU9SShuZSxwLHcsSix1ZSwxMix6WzVdKSxKPUkoSixu'@;
put 'ZSxwLHcsY2UsMTcsels2XSksdz1JKHcsSixuZSxwLEcsMjIsels3XSkscD1JKHAsdyxKLG5lLGIsNyx6WzhdKSxuZT1JKG5lLHAsdyxKLEQsMTIsels5XSksSj1JKEosbmUscCx3LEgsMTcselsxMF0pLHc9SSh3LEosbmUscCxOLDIyLHpbMTFdKSxwPUkocCx3LEosbmUsZyw3LHpbMTJdKSxu'@;
put 'ZT1JKG5lLHAsdyxKLEMsMTIselsxM10pLEo9SShKLG5lLHAsdyxTLDE3LHpbMTRdKSxwPWsocCx3PUkodyxKLG5lLHAsdiwyMix6WzE1XSksSixuZSx0ZSw1LHpbMTZdKSxuZT1rKG5lLHAsdyxKLGNlLDkselsxN10pLEo9ayhKLG5lLHAsdyxOLDE0LHpbMThdKSx3PWsodyxKLG5lLHAsZWUs'@;
put 'MjAselsxOV0pLHA9ayhwLHcsSixuZSx1ZSw1LHpbMjBdKSxuZT1rKG5lLHAsdyxKLEgsOSx6WzIxXSksSj1rKEosbmUscCx3LHYsMTQselsyMl0pLHc9ayh3LEosbmUscCxoZSwyMCx6WzIzXSkscD1rKHAsdyxKLG5lLEQsNSx6WzI0XSksbmU9ayhuZSxwLHcsSixTLDkselsyNV0pLEo9ayhK'@;
put 'LG5lLHAsdyxzZSwxNCx6WzI2XSksdz1rKHcsSixuZSxwLGIsMjAselsyN10pLHA9ayhwLHcsSixuZSxDLDUselsyOF0pLG5lPWsobmUscCx3LEosb2UsOSx6WzI5XSksSj1rKEosbmUscCx3LEcsMTQselszMF0pLHA9RShwLHc9ayh3LEosbmUscCxnLDIwLHpbMzFdKSxKLG5lLHVlLDQselsz'@;
put 'Ml0pLG5lPUUobmUscCx3LEosYiwxMSx6WzMzXSksSj1FKEosbmUscCx3LE4sMTYselszNF0pLHc9RSh3LEosbmUscCxTLDIzLHpbMzVdKSxwPUUocCx3LEosbmUsdGUsNCx6WzM2XSksbmU9RShuZSxwLHcsSixoZSwxMSx6WzM3XSksSj1FKEosbmUscCx3LEcsMTYselszOF0pLHc9RSh3LEos'@;
put 'bmUscCxILDIzLHpbMzldKSxwPUUocCx3LEosbmUsQyw0LHpbNDBdKSxuZT1FKG5lLHAsdyxKLGVlLDExLHpbNDFdKSxKPUUoSixuZSxwLHcsc2UsMTYsels0Ml0pLHc9RSh3LEosbmUscCxjZSwyMyx6WzQzXSkscD1FKHAsdyxKLG5lLEQsNCx6WzQ0XSksbmU9RShuZSxwLHcsSixnLDExLHpb'@;
put 'NDVdKSxKPUUoSixuZSxwLHcsdiwxNix6WzQ2XSkscD1qKHAsdz1FKHcsSixuZSxwLG9lLDIzLHpbNDddKSxKLG5lLGVlLDYsels0OF0pLG5lPWoobmUscCx3LEosRywxMCx6WzQ5XSksSj1qKEosbmUscCx3LFMsMTUsels1MF0pLHc9aih3LEosbmUscCx1ZSwyMSx6WzUxXSkscD1qKHAsdyxK'@;
put 'LG5lLGcsNix6WzUyXSksbmU9aihuZSxwLHcsSixzZSwxMCx6WzUzXSksSj1qKEosbmUscCx3LEgsMTUsels1NF0pLHc9aih3LEosbmUscCx0ZSwyMSx6WzU1XSkscD1qKHAsdyxKLG5lLGIsNix6WzU2XSksbmU9aihuZSxwLHcsSix2LDEwLHpbNTddKSxKPWooSixuZSxwLHcsY2UsMTUsels1'@;
put 'OF0pLHc9aih3LEosbmUscCxDLDIxLHpbNTldKSxwPWoocCx3LEosbmUsaGUsNix6WzYwXSksbmU9aihuZSxwLHcsSixOLDEwLHpbNjFdKSxKPWooSixuZSxwLHcsb2UsMTUsels2Ml0pLHc9aih3LEosbmUscCxELDIxLHpbNjNdKSxxWzBdPXFbMF0rcHwwLHFbMV09cVsxXSt3fDAscVsyXT1x'@;
put 'WzJdK0p8MCxxWzNdPXFbM10rbmV8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgVj10aGlzLl9kYXRhLEI9Vi53b3JkcyxZPTgqdGhpcy5fbkRhdGFCeXRlcyxYPTgqVi5zaWdCeXRlcztCW1g+Pj41XXw9MTI4PDwyNC1YJTMyO3ZhciBVPXguZmxvb3IoWS80Mjk0OTY3Mjk2KSxxPVk7'@;
put 'QlsxNSsoWCs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYoVTw8OHxVPj4+MjQpfDQyNzgyNTUzNjAmKFU8PDI0fFU+Pj44KSxCWzE0KyhYKzY0Pj4+OTw8NCldPTE2NzExOTM1JihxPDw4fHE+Pj4yNCl8NDI3ODI1NTM2MCYocTw8MjR8cT4+PjgpLFYuc2lnQnl0ZXM9NCooQi5sZW5ndGgrMSksdGhp'@;
put 'cy5fcHJvY2VzcygpO2Zvcih2YXIgZWU9dGhpcy5faGFzaCx0ZT1lZS53b3JkcyxvZT0wO29lPDQ7b2UrKyl7dmFyIHNlPXRlW29lXTt0ZVtvZV09MTY3MTE5MzUmKHNlPDw4fHNlPj4+MjQpfDQyNzgyNTUzNjAmKHNlPDwyNHxzZT4+PjgpfXJldHVybiBlZX0sY2xvbmU6ZnVuY3Rpb24oKXt2'@;
put 'YXIgVj1PLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFYuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpLFZ9fSk7ZnVuY3Rpb24gSShWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKEImWXx+QiZYKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9ZnVuY3Rpb24gayhWLEIsWSxYLFUscSxl'@;
put 'ZSl7dmFyIHRlPVYrKEImWHxZJn5YKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9ZnVuY3Rpb24gRShWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKEJeWV5YKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9ZnVuY3Rpb24gaihWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYr'@;
put 'KFleKEJ8flgpKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9bS5NRDU9Ty5fY3JlYXRlSGVscGVyKEspLG0uSG1hY01ENT1PLl9jcmVhdGVIbWFjSGVscGVyKEspfShNYXRoKSxhZS5NRDUpfSw0MDEzMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7SWUudXRpbHM9Rig1MjI5NCks'@;
put 'SWUuQ2lwaGVyPUYoMjk0ODQpLEllLkRFUz1GKDE0Mzc0KSxJZS5DQkM9RigxMjA2NiksSWUuRURFPUYoNTk3MTApfSwxMjA2NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNTc3OTgpLHg9Rig2NjY5OCksbT17fTtmdW5jdGlvbiBsZShPKXthZS5lcXVhbChPLmxlbmd0aCw4'@;
put 'LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgUj0wO1I8dGhpcy5pdi5sZW5ndGg7UisrKXRoaXMuaXZbUl09T1tSXX1JZS5pbnN0YW50aWF0ZT1mdW5jdGlvbiBNKE8pe2Z1bmN0aW9uIFIoayl7Ty5jYWxsKHRoaXMsayksdGhpcy5fY2JjSW5pdCgp'@;
put 'fXgoUixPKTtmb3IodmFyIHo9T2JqZWN0LmtleXMobSksSz0wO0s8ei5sZW5ndGg7SysrKXt2YXIgST16W0tdO1IucHJvdG90eXBlW0ldPW1bSV19cmV0dXJuIFIuY3JlYXRlPWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgUihFKX0sUn0sbS5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBSPW5ldyBs'@;
put 'ZSh0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPVJ9LG0uX3VwZGF0ZT1mdW5jdGlvbihSLHosSyxJKXt2YXIgRT10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsaj10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgVj0wO1Y8'@;
put 'dGhpcy5ibG9ja1NpemU7VisrKWpbVl1ePVJbeitWXTtmb3IoRS5fdXBkYXRlLmNhbGwodGhpcyxqLDAsSyxJKSxWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspaltWXT1LW0krVl19ZWxzZXtmb3IoRS5fdXBkYXRlLmNhbGwodGhpcyxSLHosSyxJKSxWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKysp'@;
put 'S1tJK1ZdXj1qW1ZdO2ZvcihWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspaltWXT1SW3orVl19fX0sMjk0ODQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KTtmdW5jdGlvbiB4KG0pe3RoaXMub3B0aW9ucz1tLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlz'@;
put 'LmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09bS5wYWRkaW5nfWF0LmV4cG9ydHM9eCx4LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30seC5wcm90b3R5cGUu'@;
put 'dXBkYXRlPWZ1bmN0aW9uKGxlKXtyZXR1cm4gMD09PWxlLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChsZSk6dGhpcy5fdXBkYXRlRW5jcnlwdChsZSl9LHgucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24obGUsTSl7Zm9yKHZhciBPPU1hdGgu'@;
put 'bWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixsZS5sZW5ndGgtTSksUj0wO1I8TztSKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrUl09bGVbTStSXTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPU8sT30seC5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKGxl'@;
put 'LE0pe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxsZSxNKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSx4LnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihsZSl7dmFyIE09MCxPPTAsej1uZXcgQXJyYXkoKCh0aGlzLmJ1ZmZlck9mZitsZS5sZW5n'@;
put 'dGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJihNKz10aGlzLl9idWZmZXIobGUsTSksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihPKz10aGlzLl9mbHVzaEJ1ZmZlcih6LE8pKSk7Zm9yKHZhciBLPWxlLmxlbmd0'@;
put 'aC0obGUubGVuZ3RoLU0pJXRoaXMuYmxvY2tTaXplO008SztNKz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUobGUsTSx6LE8pLE8rPXRoaXMuYmxvY2tTaXplO2Zvcig7TTxsZS5sZW5ndGg7TSsrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPWxlW01d'@;
put 'O3JldHVybiB6fSx4LnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihsZSl7Zm9yKHZhciBNPTAsTz0wLFI9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitsZS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLHo9bmV3IEFycmF5KFIqdGhpcy5ibG9ja1NpemUpO1I+MDtSLS0pTSs9'@;
put 'dGhpcy5fYnVmZmVyKGxlLE0pLE8rPXRoaXMuX2ZsdXNoQnVmZmVyKHosTyk7cmV0dXJuIE0rPXRoaXMuX2J1ZmZlcihsZSxNKSx6fSx4LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihsZSl7dmFyIE0sTztyZXR1cm4gbGUmJihNPXRoaXMudXBkYXRlKGxlKSksTz0iZW5jcnlwdCI9PT10aGlz'@;
put 'LnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksTT9NLmNvbmNhdChPKTpPfSx4LnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKGxlLE0pe2lmKDA9PT1NKXJldHVybiExO2Zvcig7TTxsZS5sZW5ndGg7KWxlW00rK109MDtyZXR1cm4hMH0seC5wcm90b3R5cGUu'@;
put 'X2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBsZT1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxsZSwwKSxsZX0seC5wcm90b3R5cGUu'@;
put 'X3VucGFkPWZ1bmN0aW9uKGxlKXtyZXR1cm4gbGV9LHgucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXthZS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgbGU9bmV3IEFycmF5KHRoaXMuYmxvY2tT'@;
put 'aXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIobGUsMCksdGhpcy5fdW5wYWQobGUpfX0sMTQzNzQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KSx4PUYoNjY2OTgpLG09Rig1MjI5NCksbGU9RigyOTQ4NCk7ZnVuY3Rpb24gTSgpe3RoaXMudG1wPW5ldyBBcnJh'@;
put 'eSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBPKHope2xlLmNhbGwodGhpcyx6KTt2YXIgSz1uZXcgTTt0aGlzLl9kZXNTdGF0ZT1LLHRoaXMuZGVyaXZlS2V5cyhLLHoua2V5KX14KE8sbGUpLGF0LmV4cG9ydHM9TyxPLmNyZWF0ZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IE8oSyl9O3Zh'@;
put 'ciBSPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtPLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKEssSSl7Sy5rZXlzPW5ldyBBcnJheSgzMiksYWUuZXF1YWwoSS5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBrPW0ucmVhZFVJ'@;
put 'bnQzMkJFKEksMCksRT1tLnJlYWRVSW50MzJCRShJLDQpO20ucGMxKGssRSxLLnRtcCwwKSxrPUsudG1wWzBdLEU9Sy50bXBbMV07Zm9yKHZhciBqPTA7ajxLLmtleXMubGVuZ3RoO2orPTIpe3ZhciBWPVJbaj4+PjFdO2s9bS5yMjhzaGwoayxWKSxFPW0ucjI4c2hsKEUsViksbS5wYzIoayxF'@;
put 'LEsua2V5cyxqKX19LE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSyxJLGssRSl7dmFyIGo9dGhpcy5fZGVzU3RhdGUsVj1tLnJlYWRVSW50MzJCRShLLEkpLEI9bS5yZWFkVUludDMyQkUoSyxJKzQpO20uaXAoVixCLGoudG1wLDApLFY9ai50bXBbMF0sQj1qLnRtcFsxXSwiZW5jcnlw'@;
put 'dCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChqLFYsQixqLnRtcCwwKTp0aGlzLl9kZWNyeXB0KGosVixCLGoudG1wLDApLEI9ai50bXBbMV0sbS53cml0ZVVJbnQzMkJFKGssVj1qLnRtcFswXSxFKSxtLndyaXRlVUludDMyQkUoayxCLEUrNCl9LE8ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rp'@;
put 'b24oSyxJKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIGs9Sy5sZW5ndGgtSSxFPUk7RTxLLmxlbmd0aDtFKyspS1tFXT1rO3JldHVybiEwfSxPLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oSyl7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIEs7Zm9yKHZhciBJ'@;
put 'PUtbSy5sZW5ndGgtMV0saz1LLmxlbmd0aC1JO2s8Sy5sZW5ndGg7aysrKWFlLmVxdWFsKEtba10sSSk7cmV0dXJuIEsuc2xpY2UoMCxLLmxlbmd0aC1JKX0sTy5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oSyxJLGssRSxqKXtmb3IodmFyIFY9SSxCPWssWT0wO1k8Sy5rZXlzLmxlbmd0'@;
put 'aDtZKz0yKXt2YXIgWD1LLmtleXNbWV0sVT1LLmtleXNbWSsxXTttLmV4cGFuZChCLEsudG1wLDApO3ZhciBxPW0uc3Vic3RpdHV0ZShYXj1LLnRtcFswXSxVXj1LLnRtcFsxXSksdGU9QjtCPShWXm0ucGVybXV0ZShxKSk+Pj4wLFY9dGV9bS5yaXAoQixWLEUsail9LE8ucHJvdG90eXBlLl9k'@;
put 'ZWNyeXB0PWZ1bmN0aW9uKEssSSxrLEUsail7Zm9yKHZhciBWPWssQj1JLFk9Sy5rZXlzLmxlbmd0aC0yO1k+PTA7WS09Mil7dmFyIFg9Sy5rZXlzW1ldLFU9Sy5rZXlzW1krMV07bS5leHBhbmQoVixLLnRtcCwwKTt2YXIgcT1tLnN1YnN0aXR1dGUoWF49Sy50bXBbMF0sVV49Sy50bXBbMV0p'@;
put 'LHRlPVY7Vj0oQl5tLnBlcm11dGUocSkpPj4+MCxCPXRlfW0ucmlwKFYsQixFLGopfX0sNTk3MTA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KSx4PUYoNjY2OTgpLG09RigyOTQ4NCksbGU9RigxNDM3NCk7ZnVuY3Rpb24gTShSLHope2FlLmVxdWFsKHoubGVuZ3Ro'@;
put 'LDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgSz16LnNsaWNlKDAsOCksST16LnNsaWNlKDgsMTYpLGs9ei5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PVI/W2xlLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okt9KSxsZS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQi'@;
put 'LGtleTpJfSksbGUuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6a30pXTpbbGUuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6a30pLGxlLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okl9KSxsZS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpLfSldfWZ1bmN0aW9uIE8oUil7bS5j'@;
put 'YWxsKHRoaXMsUik7dmFyIHo9bmV3IE0odGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPXp9eChPLG0pLGF0LmV4cG9ydHM9TyxPLmNyZWF0ZT1mdW5jdGlvbih6KXtyZXR1cm4gbmV3IE8oeil9LE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oeixLLEksayl7'@;
put 'dmFyIEU9dGhpcy5fZWRlU3RhdGU7RS5jaXBoZXJzWzBdLl91cGRhdGUoeixLLEksayksRS5jaXBoZXJzWzFdLl91cGRhdGUoSSxrLEksayksRS5jaXBoZXJzWzJdLl91cGRhdGUoSSxrLEksayl9LE8ucHJvdG90eXBlLl9wYWQ9bGUucHJvdG90eXBlLl9wYWQsTy5wcm90b3R5cGUuX3VucGFk'@;
put 'PWxlLnByb3RvdHlwZS5fdW5wYWR9LDUyMjk0OihhdCxJZSk9PnsidXNlIHN0cmljdCI7SWUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGxlLE0pe3JldHVybihsZVswK01dPDwyNHxsZVsxK01dPDwxNnxsZVsyK01dPDw4fGxlWzMrTV0pPj4+MH0sSWUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihs'@;
put 'ZSxNLE8pe2xlWzArT109TT4+PjI0LGxlWzErT109TT4+PjE2JjI1NSxsZVsyK09dPU0+Pj44JjI1NSxsZVszK09dPTI1NSZNfSxJZS5pcD1mdW5jdGlvbihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9NjtJPj0wO0ktPTIpe2Zvcih2YXIgaz0wO2s8PTI0O2srPTgpejw8PTEsenw9TT4+'@;
put 'PmsrSSYxO2ZvcihrPTA7azw9MjQ7ays9OCl6PDw9MSx6fD1sZT4+PmsrSSYxfWZvcihJPTY7ST49MDtJLT0yKXtmb3Ioaz0xO2s8PTI1O2srPTgpSzw8PTEsS3w9TT4+PmsrSSYxO2ZvcihrPTE7azw9MjU7ays9OClLPDw9MSxLfD1sZT4+PmsrSSYxfU9bUiswXT16Pj4+MCxPW1IrMV09Sz4+'@;
put 'PjB9LEllLnJpcD1mdW5jdGlvbihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9MDtJPDQ7SSsrKWZvcih2YXIgaz0yNDtrPj0wO2stPTgpejw8PTEsenw9TT4+PmsrSSYxLHo8PD0xLHp8PWxlPj4+aytJJjE7Zm9yKEk9NDtJPDg7SSsrKWZvcihrPTI0O2s+PTA7ay09OClLPDw9MSxLfD1N'@;
put 'Pj4+aytJJjEsSzw8PTEsS3w9bGU+Pj5rK0kmMTtPW1IrMF09ej4+PjAsT1tSKzFdPUs+Pj4wfSxJZS5wYzE9ZnVuY3Rpb24obGUsTSxPLFIpe2Zvcih2YXIgej0wLEs9MCxJPTc7ST49NTtJLS0pe2Zvcih2YXIgaz0wO2s8PTI0O2srPTgpejw8PTEsenw9TT4+aytJJjE7Zm9yKGs9MDtrPD0y'@;
put 'NDtrKz04KXo8PD0xLHp8PWxlPj5rK0kmMX1mb3Ioaz0wO2s8PTI0O2srPTgpejw8PTEsenw9TT4+aytJJjE7Zm9yKEk9MTtJPD0zO0krKyl7Zm9yKGs9MDtrPD0yNDtrKz04KUs8PD0xLEt8PU0+PmsrSSYxO2ZvcihrPTA7azw9MjQ7ays9OClLPDw9MSxLfD1sZT4+aytJJjF9Zm9yKGs9MDtr'@;
put 'PD0yNDtrKz04KUs8PD0xLEt8PWxlPj5rK0kmMTtPW1IrMF09ej4+PjAsT1tSKzFdPUs+Pj4wfSxJZS5yMjhzaGw9ZnVuY3Rpb24obGUsTSl7cmV0dXJuIGxlPDxNJjI2ODQzNTQ1NXxsZT4+PjI4LU19O3ZhciBGPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQs'@;
put 'MiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO0llLnBjMj1mdW5jdGlvbihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9Ri5sZW5ndGg+Pj4xLGs9MDtrPEk7aysrKXo8PD0xLHp8PWxl'@;
put 'Pj4+RltrXSYxO2ZvcihrPUk7azxGLmxlbmd0aDtrKyspSzw8PTEsS3w9TT4+PkZba10mMTtPW1IrMF09ej4+PjAsT1tSKzFdPUs+Pj4wfSxJZS5leHBhbmQ9ZnVuY3Rpb24obGUsTSxPKXt2YXIgUj0wLHo9MDtSPSgxJmxlKTw8NXxsZT4+PjI3O2Zvcih2YXIgSz0yMztLPj0xNTtLLT00KVI8'@;
put 'PD02LFJ8PWxlPj4+SyY2Mztmb3IoSz0xMTtLPj0zO0stPTQpenw9bGU+Pj5LJjYzLHo8PD02O3p8PSgzMSZsZSk8PDF8bGU+Pj4zMSxNW08rMF09Uj4+PjAsTVtPKzFdPXo+Pj4wfTt2YXIgYWU9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEy'@;
put 'LDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDks'@;
put 'NSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMs'@;
put 'MSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAs'@;
put 'NiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0'@;
put 'LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDEx'@;
put 'LDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgs'@;
put 'MTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1'@;
put 'LDYsOCwxMV07SWUuc3Vic3RpdHV0ZT1mdW5jdGlvbihsZSxNKXtmb3IodmFyIE89MCxSPTA7Ujw0O1IrKylPPDw9NCxPfD1hZVs2NCpSKyhsZT4+PjE4LTYqUiY2MyldO2ZvcihSPTA7Ujw0O1IrKylPPDw9NCxPfD1hZVsyNTYrNjQqUisoTT4+PjE4LTYqUiY2MyldO3JldHVybiBPPj4+MH07'@;
put 'dmFyIHg9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO0llLnBlcm11dGU9ZnVuY3Rpb24obGUpe2Zvcih2YXIgTT0wLE89MDtPPHgubGVuZ3RoO08rKylNPDw9MSxNfD1sZT4+Pnhb'@;
put 'T10mMTtyZXR1cm4gTT4+PjB9LEllLnBhZFNwbGl0PWZ1bmN0aW9uKGxlLE0sTyl7Zm9yKHZhciBSPWxlLnRvU3RyaW5nKDIpO1IubGVuZ3RoPE07KVI9IjAiK1I7Zm9yKHZhciB6PVtdLEs9MDtLPE07Sys9Tyl6LnB1c2goUi5zbGljZShLLEsrTykpO3JldHVybiB6LmpvaW4oIiAiKX19LDQ1'@;
put 'MTQ0OihhdCxJZSxGKT0+e3ZhciBhZT1GKDcxMDk2KSx4PUYoMjk3OTkpLG09Rig5NTU4MCksTT17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O0llLkRpZmZpZUhlbGxtYW5Hcm91cD1JZS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9SWUuZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiBs'@;
put 'ZShSKXt2YXIgej1uZXcgQnVmZmVyKHhbUl0ucHJpbWUsImhleCIpLEs9bmV3IEJ1ZmZlcih4W1JdLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBtKHosSyl9LEllLmNyZWF0ZURpZmZpZUhlbGxtYW49SWUuRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBPKFIseixLLEkpe3JldHVybiBCdWZmZXIuaXNC'@;
put 'dWZmZXIoeil8fHZvaWQgMD09PU1bel0/TyhSLCJiaW5hcnkiLHosSyk6KHo9enx8ImJpbmFyeSIsST1JfHwiYmluYXJ5IixLPUt8fG5ldyBCdWZmZXIoWzJdKSxCdWZmZXIuaXNCdWZmZXIoSyl8fChLPW5ldyBCdWZmZXIoSyxJKSksIm51bWJlciI9PXR5cGVvZiBSP25ldyBtKGFlKFIsSyks'@;
put 'SywhMCk6KEJ1ZmZlci5pc0J1ZmZlcihSKXx8KFI9bmV3IEJ1ZmZlcihSLHopKSxuZXcgbShSLEssITApKSl9fSw5NTU4MDooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NzMwMSksbT1uZXcoRig0ODYwNikpLGxlPW5ldyBhZSgyNCksTT1uZXcgYWUoMTEpLE89bmV3IGFlKDEwKSxSPW5ldyBhZSgz'@;
put 'KSx6PW5ldyBhZSg3KSxLPUYoNzEwOTYpLEk9Rig0NDAxOSk7ZnVuY3Rpb24gayhYLFUpe3JldHVybiBVPVV8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoWCl8fChYPW5ldyBCdWZmZXIoWCxVKSksdGhpcy5fcHViPW5ldyBhZShYKSx0aGlzfWZ1bmN0aW9uIEUoWCxVKXtyZXR1cm4gVT1VfHwi'@;
put 'dXRmOCIsQnVmZmVyLmlzQnVmZmVyKFgpfHwoWD1uZXcgQnVmZmVyKFgsVSkpLHRoaXMuX3ByaXY9bmV3IGFlKFgpLHRoaXN9YXQuZXhwb3J0cz1CO3ZhciBqPXt9O2Z1bmN0aW9uIEIoWCxVLHEpe3RoaXMuc2V0R2VuZXJhdG9yKFUpLHRoaXMuX19wcmltZT1uZXcgYWUoWCksdGhpcy5fcHJp'@;
put 'bWU9YWUubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPVgubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxxPyh0aGlzLnNldFB1YmxpY0tleT1rLHRoaXMuc2V0UHJpdmF0ZUtleT1FKTp0aGlzLl9wcmltZUNv'@;
put 'ZGU9OH1mdW5jdGlvbiBZKFgsVSl7dmFyIHE9bmV3IEJ1ZmZlcihYLnRvQXJyYXkoKSk7cmV0dXJuIFU/cS50b1N0cmluZyhVKTpxfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1i'@;
put 'ZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uIFYoWCxVKXt2YXIgcT1VLnRvU3RyaW5nKCJoZXgiKSxlZT1bcSxYLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKGVlIGluIGopcmV0dXJuIGpbZWVdO3ZhciBvZSx0ZT0wO2lmKFguaXNFdmVu'@;
put 'KCl8fCFLLnNpbXBsZVNpZXZlfHwhSy5mZXJtYXRUZXN0KFgpfHwhbS50ZXN0KFgpKXJldHVybiB0ZSs9MSxqW2VlXT10ZSs9IjAyIj09PXF8fCIwNSI9PT1xPzg6NCx0ZTtzd2l0Y2gobS50ZXN0KFguc2hybigxKSl8fCh0ZSs9MikscSl7Y2FzZSIwMiI6WC5tb2QobGUpLmNtcChNKSYmKHRl'@;
put 'Kz04KTticmVhaztjYXNlIjA1Ijoob2U9WC5tb2QoTykpLmNtcChSKSYmb2UuY21wKHopJiYodGUrPTgpO2JyZWFrO2RlZmF1bHQ6dGUrPTR9cmV0dXJuIGpbZWVdPXRlLHRlfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxCLnByb3RvdHlwZS5nZW5lcmF0'@;
put 'ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IGFlKEkodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxC'@;
put 'LnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFgpe3ZhciBVPShYPShYPW5ldyBhZShYKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHE9bmV3IEJ1ZmZlcihVLnRvQXJyYXkoKSksZWU9dGhpcy5nZXRQcmltZSgpO2lmKHEubGVuZ3Ro'@;
put 'PGVlLmxlbmd0aCl7dmFyIHRlPW5ldyBCdWZmZXIoZWUubGVuZ3RoLXEubGVuZ3RoKTt0ZS5maWxsKDApLHE9QnVmZmVyLmNvbmNhdChbdGUscV0pfXJldHVybiBxfSxCLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oVSl7cmV0dXJuIFkodGhpcy5fcHViLFUpfSxCLnByb3RvdHlw'@;
put 'ZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFUpe3JldHVybiBZKHRoaXMuX3ByaXYsVSl9LEIucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKFgpe3JldHVybiBZKHRoaXMuX19wcmltZSxYKX0sQi5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKFgpe3JldHVybiBZKHRoaXMuX2dl'@;
put 'bixYKX0sQi5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKFgsVSl7cmV0dXJuIFU9VXx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihYKXx8KFg9bmV3IEJ1ZmZlcihYLFUpKSx0aGlzLl9fZ2VuPVgsdGhpcy5fZ2VuPW5ldyBhZShYKSx0aGlzfX0sNzEwOTY6KGF0LEllLEYpPT57dmFy'@;
put 'IGFlPUYoNDQwMTkpO2F0LmV4cG9ydHM9dGUsdGUuc2ltcGxlU2lldmU9cSx0ZS5mZXJtYXRUZXN0PWVlO3ZhciB4PUYoODczMDEpLG09bmV3IHgoMjQpLE09bmV3KEYoNDg2MDYpKSxPPW5ldyB4KDEpLFI9bmV3IHgoMiksej1uZXcgeCg1KSxrPShuZXcgeCgxNiksbmV3IHgoOCksbmV3IHgo'@;
put 'MTApKSxFPW5ldyB4KDMpLFY9KG5ldyB4KDcpLG5ldyB4KDExKSksQj1uZXcgeCg0KSxYPShuZXcgeCgxMiksbnVsbCk7ZnVuY3Rpb24gcShvZSl7Zm9yKHZhciBzZT1mdW5jdGlvbiBVKCl7aWYobnVsbCE9PVgpcmV0dXJuIFg7dmFyIHNlPVtdO3NlWzBdPTI7Zm9yKHZhciBoZT0xLHVlPTM7'@;
put 'dWU8MTA0ODU3Njt1ZSs9Mil7Zm9yKHZhciBjZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KHVlKSksRz0wO0c8aGUmJnNlW0ddPD1jZSYmdWUlc2VbR10hPTA7RysrKTtoZSE9PUcmJnNlW0ddPD1jZXx8KHNlW2hlKytdPXVlKX1yZXR1cm4gWD1zZSxzZX0oKSxoZT0wO2hlPHNlLmxlbmd0aDtoZSsr'@;
put 'KWlmKDA9PT1vZS5tb2RuKHNlW2hlXSkpcmV0dXJuIDA9PT1vZS5jbXBuKHNlW2hlXSk7cmV0dXJuITB9ZnVuY3Rpb24gZWUob2Upe3ZhciBzZT14Lm1vbnQob2UpO3JldHVybiAwPT09Ui50b1JlZChzZSkucmVkUG93KG9lLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIHRl'@;
put 'KG9lLHNlKXtpZihvZTwxNilyZXR1cm4gbmV3IHgoMj09PXNlfHw1PT09c2U/WzE0MCwxMjNdOlsxNDAsMzldKTtzZT1uZXcgeChzZSk7Zm9yKHZhciBoZSx1ZTs7KXtmb3IoaGU9bmV3IHgoYWUoTWF0aC5jZWlsKG9lLzgpKSk7aGUuYml0TGVuZ3RoKCk+b2U7KWhlLmlzaHJuKDEpO2lmKGhl'@;
put 'LmlzRXZlbigpJiZoZS5pYWRkKE8pLGhlLnRlc3RuKDEpfHxoZS5pYWRkKFIpLHNlLmNtcChSKSl7aWYoIXNlLmNtcCh6KSlmb3IoO2hlLm1vZChrKS5jbXAoRSk7KWhlLmlhZGQoQil9ZWxzZSBmb3IoO2hlLm1vZChtKS5jbXAoVik7KWhlLmlhZGQoQik7aWYocSh1ZT1oZS5zaHJuKDEpKSYm'@;
put 'cShoZSkmJmVlKHVlKSYmZWUoaGUpJiZNLnRlc3QodWUpJiZNLnRlc3QoaGUpKXJldHVybiBoZX19fSw4NzMwMTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBm'@;
put 'YWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3Ro'@;
put 'aXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4'@;
put 'cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoNzc0OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVy'@;
put 'biBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1mdW5jdGlvbiB6KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxE'@;
put 'KSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9Uz49NDk/Uy00OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8bnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYmYi5jb25z'@;
put 'dHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rp'@;
put 'b24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihiLEQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9MTYpLG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7dmFyIE49'@;
put 'MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE4rKyx0aGlzLm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2UoYixELE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhp'@;
put 'cy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihiLEQsSCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVuZ3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53'@;
put 'b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShiPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRo'@;
put 'aXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oYixELEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwo'@;
put 'Yi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xLGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9'@;
put 'YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048Yi5sZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0oQz1iW05d'@;
put 'fGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9'@;
put 'TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIpUz16KGIs'@;
put 'RCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2'@;
put 'MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTj0wLGc9MTtnPD02NzEwODg2MztnKj1EKU4r'@;
put 'KztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgubWluKEMsQy1TKStILHA9MCx3PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtp'@;
put 'ZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxTO3crKylKKj1EO3RoaXMuaW11bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0'@;
put 'aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnByb3RvdHlw'@;
put 'ZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoYiksYn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUu'@;
put 'c3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYw'@;
put 'PT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgST1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIw'@;
put 'MDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxrPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0'@;
put 'ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQs'@;
put 'OTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5s'@;
put 'ZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndvcmRzWzBdLGc9MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4NjMmdixu'@;
put 'ZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0aCsxKTtkZTw9bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJu'@;
put 'IDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtmb3IodmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5ndGg7Qysr'@;
put 'KXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0lbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcu'@;
put 'dG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBKPXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFK'@;
put 'LmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUouaWRpdm4odykpLmlzWmVybygpP25lK0g6SVtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRo'@;
put 'aXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5w'@;
put 'cm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShPLGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24o'@;
put 'YixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxl'@;
put 'bmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1twXT12'@;
put 'O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3BdPTA7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9u'@;
put 'KGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1iLEg9MDtyZXR1cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49MiYmKEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96'@;
put 'ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixIPTA7cmV0dXJuIDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJvdG90eXBl'@;
put 'LmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFy'@;
put 'IGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgp'@;
put 'fSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3RoaXMubm90'@;
put 'bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsr'@;
put 'KXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihiKTpiLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9y'@;
put 'KHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRoaXMubGVuZ3RoPmIubGVuZ3RoP2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mYi53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5n'@;
put 'dGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xv'@;
put 'bmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihi'@;
put 'KXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1iLEg9dGhpcyk7Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9PUQpZm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndvcmRzW05d'@;
put 'PUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihiKTpiLmNsb25lKCkuaXhvcih0aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUoKS5pdXhv'@;
put 'cih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZhciBOPTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3MTA4ODYz'@;
put 'Jn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlzLndvcmRzW05dJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUuc2V0bj1m'@;
put 'dW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1iLzI2fDAsTj1iJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNbSF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90'@;
put 'eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9'@;
put 'PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0Nd'@;
put 'PTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9RD4+PjI2O2Zvcig7MCE9PWcmJkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcp'@;
put 'dGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9PWIubmVn'@;
put 'YXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1YihiKSxiLm5lZ2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3Ro'@;
put 'PmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIpO3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24o'@;
put 'KX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMu'@;
put 'd29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0'@;
put 'aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhp'@;
put 'cy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixELEgpe3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndvcmRzLEM9'@;
put 'SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5bMV0seGU9ODE5MSZmZSxMZT1mZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLGplPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxKZT0wfE5bNF0sbHQ9ODE5MSZKZSxQZT1KZT4+'@;
put 'PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhlPTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxpdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxv'@;
put 'bj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49MHxnWzJdLEhuPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsbW49MHxn'@;
put 'WzVdLHJ0PTgxOTEmbW4sSXQ9bW4+Pj4xMyxKdD0wfGdbNl0sRHQ9ODE5MSZKdCxwdD1KdD4+PjEzLFl0PTB8Z1s3XSxJbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdbOV0sUm49ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9'@;
put 'Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBQbj0oUysodj1NYXRoLmltdWwobmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMpfDApKyhQ'@;
put 'bj4+PjI2KXwwLFBuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1NYXRoLmltdWwoeGUsVXQpKStNYXRoLmltdWwoTGUsQ24pfDAsdz1NYXRoLmltdWwoTGUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChuZSxXbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZW4pfDApKyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1NYXRoLmltdWwoT2UsVXQpKStNYXRoLmltdWwoamUsQ24pfDAs'@;
put 'dz1NYXRoLmltdWwoamUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKExlLFduKXwwLHc9dytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0aC5pbXVsKG5lLEhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN'@;
put 'YXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxIbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxwPShwPU1hdGguaW11bChLZSxVdCkpK01hdGguaW11bChZ'@;
put 'ZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoamUsV24pfDAsdz13K01hdGguaW11bChqZSxlbil8MCx2PXYrTWF0aC5pbXVsKHhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZnQp'@;
put 'fDApK01hdGguaW11bChMZSxIbil8MCx3PXcrTWF0aC5pbXVsKExlLGZ0KXwwO3ZhciBqbj0oUysodj12K01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwoZGUsaG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwo'@;
put 'ZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2PU1hdGguaW11bChsdCxDbikscD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9ditNYXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01hdGguaW11'@;
put 'bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUsZW4pfDAsdj12K01hdGguaW11bChPZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsdz13K01hdGguaW11bChqZSxmdCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhu'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8MCx3PXcrTWF0aC5pbXVsKExlLHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUsX3QpfDAp'@;
put 'KTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUsQ24pfDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditNYXRoLmlt'@;
put 'dWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVsKFBlLFduKXwwLHc9dytNYXRoLmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsSG4pfDAsdz13K01hdGguaW11bChZ'@;
put 'ZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCx3PXcrTWF0aC5pbXVsKGplLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90'@;
put 'KXwwLHc9dytNYXRoLmltdWwoTGUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsSXQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxJdCl8MCkrKHA+Pj4xMyl8'@;
put 'MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxwPShwPU1hdGguaW11bChYZSxVdCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStNYXRoLmlt'@;
put 'dWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVsKGx0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditNYXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01hdGguaW11'@;
put 'bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUsd3QpfDAsdj12K01hdGguaW11bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoamUsX3QpfDAsdz13K01hdGguaW11bChqZSxOdCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsSXQpfDApK01hdGguaW11bChMZSxydCl8MCx3PXcrTWF0aC5pbXVsKExlLEl0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUsRHQpfDAp'@;
put 'KTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUsQ24pfDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditNYXRoLmlt'@;
put 'dWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVsKFVlLFduKXwwLHc9dytNYXRoLmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwoVGUsSG4pfDAsdz13K01hdGguaW11bChU'@;
put 'ZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90'@;
put 'KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEl0KXwwKStNYXRoLmltdWwoamUscnQpfDAsdz13K01hdGguaW11bChqZSxJdCl8MCx2PXYrTWF0aC5pbXVsKHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQp'@;
put 'fDApK01hdGguaW11bChMZSxEdCl8MCx3PXcrTWF0aC5pbXVsKExlLHB0KXwwO3ZhciBVaT0oUysodj12K01hdGguaW11bChuZSxJbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoZGUsSW4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwo'@;
put 'ZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChpdCxDbikscD0ocD1NYXRoLmltdWwoaXQsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9ditNYXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01hdGguaW11'@;
put 'bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUsZW4pfDAsdj12K01hdGguaW11bChYZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsdz13K01hdGguaW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhu'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCx3PXcrTWF0aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUsTnQpfDAs'@;
put 'dj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsdz13K01hdGguaW11bChZZSxJdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKGplLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsSW4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLEluKXwwLHc9dytNYXRoLmltdWwoTGUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0aC5pbXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN'@;
put 'YXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxwPShwPU1hdGguaW11bChIdCxVdCkpK01hdGguaW11bChQ'@;
put 'dCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChpdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVsKE1lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZnQp'@;
put 'fDApK01hdGguaW11bChEZSxIbil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9ditNYXRoLmltdWwoWGUsaG4pfDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwoVWUsd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01hdGguaW11bChUZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxydCl8MCx3PXcrTWF0aC5pbXVsKFBlLEl0KXwwLHY9ditNYXRo'@;
put 'LmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLHc9dytNYXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoamUsSW4pfDAsdz13K01hdGguaW11'@;
put 'bChqZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bChMZSx4bil8MCx3PXcrTWF0aC5pbXVsKExlLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChuZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KG5lLCR0KXwwKStNYXRoLmltdWwoZGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAs'@;
put 'dz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwoaXQsSG4pfDAscD0ocD1wK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKHV0LEhuKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRo'@;
put 'LmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5pbXVsKFhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwoVGUsSXQpfDAsdj12K01hdGguaW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13K01hdGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtl'@;
put 'LEluKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxJbil8MCx3PXcrTWF0aC5pbXVsKFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKGplLHhuKXwwLHc9dytNYXRoLmltdWwoamUsc24p'@;
put 'fDA7dmFyIEhyPShTKyh2PXYrTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChMZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKEh0LEhuKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01hdGguaW11bChQdCxIbil8MCx3PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChpdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHd0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsdz13K01hdGguaW11'@;
put 'bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0ocD1wK01hdGguaW11bChYZSxJdCl8MCkrTWF0aC5pbXVsKFVl'@;
put 'LHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsSXQpfDAsdj12K01hdGguaW11bChBZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0aC5pbXVsKGx0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwobHQs'@;
put 'enQpfDApK01hdGguaW11bChQZSxJbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXwwLHY9ditNYXRoLmltdWwoS2UseG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmltdWwoWWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVs'@;
put 'KE9lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChqZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhuKSxwPShw'@;
put 'PU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11bChQdCx3dCksdj12K01hdGguaW11bChpdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13K01hdGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1l'@;
put 'LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsSXQpfDApK01hdGguaW11bChEZSxydCl8MCx3PXcrTWF0aC5pbXVsKERlLEl0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwoVWUscHQp'@;
put 'fDAsdj12K01hdGguaW11bChBZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsSW4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCx3'@;
put 'PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChLZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMpfDApKyhK'@;
put 'aT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1NYXRoLmltdWwoSHQsTnQpKStNYXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwoaXQscnQpfDAscD0ocD1wK01hdGguaW11bChpdCxJdCl8MCkrTWF0aC5pbXVsKHV0'@;
put 'LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsSXQpfDAsdj12K01hdGguaW11bChNZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0aC5pbXVsKFhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUs'@;
put 'enQpfDApK01hdGguaW11bChVZSxJbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXwwLHY9ditNYXRoLmltdWwoQWUseG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVs'@;
put 'KGx0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShw'@;
put 'PU1hdGguaW11bChIdCxJdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11bChQdCxJdCksdj12K01hdGguaW11bChpdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13K01hdGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1l'@;
put 'LEluKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxJbil8MCx3PXcrTWF0aC5pbXVsKERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwoVWUsc24p'@;
put 'fDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01hdGguaW11bChQdCxEdCl8MCx3PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChpdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwodXQsSW4pfDAsdz13K01hdGguaW11'@;
put 'bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChYZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxJbikscD0ocD1NYXRoLmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQsSW4pfDAs'@;
put 'dz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwoaXQseG4pfDAscD0ocD1wK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0aC5pbXVsKE1lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN'@;
put 'YXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChEZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxwPShwPU1hdGguaW11bChIdCxzbikpK01hdGguaW11bChQ'@;
put 'dCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5pbXVsKGl0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoaXQsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8'@;
put 'MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmltdWwoSHQsUm4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LFJuKXwwKSk8PDEzKXwwO3JldHVybiBTPSgodz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEzKXwwKSso'@;
put 'eXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1QbixDWzFdPW5pLENbMl09bG4sQ1szXT1qbixDWzRdPXFyLENbNV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1IcixDWzExXT1xaSxDWzEyXT1KaSxDWzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1H'@;
put 'aSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gWChHLGIsRCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9TWF0aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5tdWxUbz1m'@;
put 'dW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdh'@;
put 'dGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAsZz0wO2c8RC5sZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7'@;
put 'dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4NjMmZGU7Uz02NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEwODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4g'@;
put 'MCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIsRCk6WCh0aGlzLGIsRCksSH0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7TisrKURb'@;
put 'Tl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oYixELEgpe2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxELWctMSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5cGUucGVy'@;
put 'bXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylOW1NdPURbYltTXV0sZ1tTXT1IW2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0ZShDLGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0x'@;
put 'KWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5zaW4oMipNYXRoLlBJL3YpLEo9MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sTGU9TltKK2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2ZlK1NdLGpl'@;
put 'PW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPWplKSxOW0orZmVdPUxlK09lLEhbSitmZStTXT14ZS1GZSxOW0orZmUrU109TGUtT2UsZmUhPT12JiYoamU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxuZT1qZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5j'@;
put 'dGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8PTEpKWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFyIGc9YltO'@;
put 'XTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFdLERbSC1OLTFdPS1nfX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7dmFyIGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFdL0QpK01h'@;
put 'dGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxiW0NdKSxI'@;
put 'WzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytDKUhbQ109MDttKDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJuIER9LFUu'@;
put 'cHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYihiLmxlbmd0aCxELmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcgQXJyYXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcgQXJyYXko'@;
put 'TiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3LE4pLHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixnKSx0aGlz'@;
put 'LnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKyspe3ZhciB4ZT12W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0o'@;
put 'dixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFsaXplMTNiKGRlLE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBE'@;
put 'PW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksdGhpcy5tdWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxl'@;
put 'bmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7'@;
put 'SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0oNjcxMDg4NjMmTikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMmZ31yZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hdPUQsdGhp'@;
put 'cy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiKXt2YXIgRD1mdW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1EJTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+'@;
put 'Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBIPXRoaXMsTj0wO048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9SC5zcXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9'@;
put 'PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8'@;
put 'dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jkc1tnXT0oMHx0aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRo'@;
put 'aXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlzLndvcmRzW2ddPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxu'@;
put 'KGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5sZW5ndGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9'@;
put 'SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3Bd'@;
put 'PXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB3PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3RoaXMud29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1'@;
put 'cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhp'@;
put 'cy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShi'@;
put 'LUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxEKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJp'@;
put 'bWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5E'@;
put 'PDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90aGlzLmlz'@;
put 'dWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGI/KHRoaXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9'@;
put 'MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGIpe3RoaXMud29yZHNbMF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMud29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0'@;
put 'aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MCly'@;
put 'ZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1sw'@;
put 'XT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRu'@;
put 'PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90'@;
put 'b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMu'@;
put 'd29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEwODg2MyZ2KT4+MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylTPShDPSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2LHRoaXMu'@;
put 'd29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG0oLTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRp'@;
put 'dmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhDKSkmJihnPWcudXNobG4oSCksTi5pdXNobG4oSCksQz0wfGcu'@;
put 'd29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYoIm1vZCIhPT1EKXsocD1uZXcgTShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBKPU4uY2xv'@;
put 'bmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAmJihwLndvcmRzW3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0pKygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0pO2Zvcihk'@;
put 'ZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUsbmUpOzAhPT1OLm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJldHVybiBw'@;
put 'JiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJuKEgpLHtkaXY6cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3'@;
put 'IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1vZDpnfSk6'@;
put 'MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGIubmVnKCksRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygpLEQpLCJk'@;
put 'aXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1YihiKSkse2RpdjpDLmRpdixtb2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlz'@;
put 'LmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIsRCk7dmFy'@;
put 'IE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1ELmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9k'@;
put 'LE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzwwfHwxPT09ZyYmMD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zv'@;
put 'cih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlIPShEKkgrKDB8dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gt'@;
put 'LSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRzW0hdPU4vYnwwLEQ9TiVifXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5j'@;
put 'dGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0QuaXNFdmVu'@;
put 'KCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3IodmFyIHA9SC5jbG9uZSgpLHc9RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2OysrSixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNocm4oSik7'@;
put 'Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1Yih3KSksTi5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8PTEpO2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtkZS0tID4w'@;
put 'OykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSksQy5pdXNocm4oMSksUy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMsYjpTLGdj'@;
put 'ZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5l'@;
put 'dyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgUz0wLHY9MTshKEQud29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5pc09kZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZh'@;
put 'ciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+MClmb3IoSC5pdXNocm4ocCk7cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIoTikpfXJl'@;
put 'dHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxKfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIu'@;
put 'Y2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3Zh'@;
put 'ciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09PWd8fDA9PT1ILmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChiKX0sTS5w'@;
put 'cm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29yZHNbMF0m'@;
put 'Yn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpO3ZhciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9TixDPUg7'@;
put 'MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107Zz0oUys9Zyk+Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYodGhpcy5z'@;
put 'dHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9'@;
put 'ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5'@;
put 'cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPTB8dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihO'@;
put 'IT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1m'@;
put 'dW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0sTS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAw'@;
put 'PT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wKGIpfSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBu'@;
put 'dW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJm'@;
put 'cm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBu'@;
put 'dW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVk'@;
put 'IG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJy'@;
put 'ZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i'@;
put 'ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhp'@;
put 'cy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJl'@;
put 'ZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJl'@;
put 'ZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkJiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhp'@;
put 'cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgo'@;
put 'KSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUg'@;
put 'ZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhlKCl7ZWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtpZigic3Ry'@;
put 'aW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhpcy5wcmltZT1ifWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0'@;
put 'aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2lu'@;
put 'dm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9'@;
put 'bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxifSxlZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1wKSxIPShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQodGhpcy50'@;
put 'bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/LTE6RC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0s'@;
put 'ZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5uLDAsRCl9LGVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9NDE5'@;
put 'NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNbZ109Yi53b3Jkc1tnXTtpZihELmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIgQz1iLndvcmRzWzldO2ZvcihELndvcmRzW0QubGVuZ3RoKytd'@;
put 'PUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53b3Jkc1tnLTEwXT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEwPzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihi'@;
put 'KXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxlbmd0aCs9Mjtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihEKz05NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDApfXJldHVy'@;
put 'biAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0'@;
put 'aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+Pj49MjYsYi53b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIpe2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7aWYoImsy'@;
put 'NTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxzZSBpZigicDE5MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2IpO0Q9bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUucHJvdG90'@;
put 'eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9PShiLm5l'@;
put 'Z2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQmJmIucmVkPT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5w'@;
put 'cmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIoYikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUu'@;
put 'YWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFy'@;
put 'IEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VS'@;
put 'ZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5'@;
put 'MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCks'@;
put 'dGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW11bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIsYil9LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lm'@;
put 'KGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4oMyk7aWYobShEJTI9PTEpLDM9PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9yKHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDshTi5pc1pl'@;
put 'cm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVybygpKTt2YXIgQz1uZXcgTSgxKS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVk'@;
put 'KHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zvcih2YXIgdz10aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5lLmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9MDswIT09'@;
put 'ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIExlPXRoaXMucG93KHcsbmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKExlKSx3PUxlLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxkZT14ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmludm09ZnVu'@;
put 'Y3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVnYXRpdmU/KEQubmVnYXRpdmU9MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiLEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEp'@;
put 'LnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgTj1uZXcgQXJyYXkoMTYpO05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5bMF0sUz0w'@;
put 'LHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxlbmd0aC0xO2c+PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9dGhpcy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8'@;
put 'PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSksdj0wLFM9MCkpOnY9MH1wPTI2fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlzLm0pO3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0sdWUucHJv'@;
put 'dG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1v'@;
put 'ZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQu'@;
put 'aXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9Yi5pbXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1'@;
put 'cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9y'@;
put 'Y2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRo'@;
put 'aXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQp'@;
put 'LHRoaXMpfSw3MDg5NjpmdW5jdGlvbihhdCl7YXQuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJZShNZSl7cmV0dXJuKEllPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKERlKXtyZXR1'@;
put 'cm4gdHlwZW9mIERlfTpmdW5jdGlvbihEZSl7cmV0dXJuIERlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZEZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmRGUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBEZX0pKE1lKX1mdW5jdGlvbiBGKE1lLERlKXtyZXR1cm4oRj1P'@;
put 'YmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGl0LHV0KXtyZXR1cm4gaXQuX19wcm90b19fPXV0LGl0fSkoTWUsRGUpfWZ1bmN0aW9uIHgoTWUsRGUsemUpe3JldHVybih4PWZ1bmN0aW9uIGFlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxl'@;
put 'Y3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJu'@;
put 'ITF9fSgpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKHV0LE10LEh0KXt2YXIgUHQ9W251bGxdO1B0LnB1c2guYXBwbHkoUHQsTXQpO3ZhciBDbj1uZXcoRnVuY3Rpb24uYmluZC5hcHBseSh1dCxQdCkpO3JldHVybiBIdCYmRihDbixIdC5wcm90b3R5cGUpLENufSkuYXBwbHkobnVsbCxh'@;
put 'cmd1bWVudHMpfWZ1bmN0aW9uIG0oTWUpe3JldHVybiBmdW5jdGlvbiBsZShNZSl7aWYoQXJyYXkuaXNBcnJheShNZSkpcmV0dXJuIFIoTWUpfShNZSl8fGZ1bmN0aW9uIE0oTWUpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1NZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1NZVsiQEBp'@;
put 'dGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKE1lKX0oTWUpfHxmdW5jdGlvbiBPKE1lLERlKXtpZihNZSl7aWYoInN0cmluZyI9PXR5cGVvZiBNZSlyZXR1cm4gUihNZSxEZSk7dmFyIHplPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChNZSkuc2xpY2UoOCwtMSk7aWYoIk9iamVj'@;
put 'dCI9PT16ZSYmTWUuY29uc3RydWN0b3ImJih6ZT1NZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXplfHwiU2V0Ij09PXplKXJldHVybiBBcnJheS5mcm9tKE1lKTtpZigiQXJndW1lbnRzIj09PXplfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh6'@;
put 'ZSkpcmV0dXJuIFIoTWUsRGUpfX0oTWUpfHxmdW5jdGlvbiB6KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEg'@;
put 'W1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gUihNZSxEZSl7KG51bGw9PURlfHxEZT5NZS5sZW5ndGgpJiYoRGU9TWUubGVuZ3RoKTtmb3IodmFyIHplPTAsaXQ9bmV3IEFycmF5KERlKTt6ZTxEZTt6ZSsrKWl0W3plXT1NZVt6ZV07cmV0dXJuIGl0fXZhciBLPU9i'@;
put 'amVjdC5oYXNPd25Qcm9wZXJ0eSxJPU9iamVjdC5zZXRQcm90b3R5cGVPZixrPU9iamVjdC5pc0Zyb3plbixFPU9iamVjdC5nZXRQcm90b3R5cGVPZixqPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsVj1PYmplY3QuZnJlZXplLEI9T2JqZWN0LnNlYWwsWT1PYmplY3QuY3JlYXRl'@;
put 'LFg9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LFU9WC5hcHBseSxxPVguY29uc3RydWN0O1V8fChVPWZ1bmN0aW9uKERlLHplLGl0KXtyZXR1cm4gRGUuYXBwbHkoemUsaXQpfSksVnx8KFY9ZnVuY3Rpb24oRGUpe3JldHVybiBEZX0pLEJ8fChCPWZ1bmN0aW9uKERlKXtyZXR1cm4gRGV9'@;
put 'KSxxfHwocT1mdW5jdGlvbihEZSx6ZSl7cmV0dXJuIHgoRGUsbSh6ZSkpfSk7dmFyIGVlPU4oQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLHRlPU4oQXJyYXkucHJvdG90eXBlLnBvcCksb2U9TihBcnJheS5wcm90b3R5cGUucHVzaCksc2U9TihTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNl'@;
put 'KSxoZT1OKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLHVlPU4oU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksY2U9TihTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLEc9TihTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLGI9TihTdHJpbmcucHJvdG90eXBlLnRyaW0pLEQ9TihSZWdFeHAucHJv'@;
put 'dG90eXBlLnRlc3QpLEg9ZnVuY3Rpb24gZyhNZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBEZT1hcmd1bWVudHMubGVuZ3RoLHplPW5ldyBBcnJheShEZSksaXQ9MDtpdDxEZTtpdCsrKXplW2l0XT1hcmd1bWVudHNbaXRdO3JldHVybiBxKE1lLHplKX19KFR5cGVFcnJvcik7ZnVuY3Rp'@;
put 'b24gTihNZSl7cmV0dXJuIGZ1bmN0aW9uKERlKXtmb3IodmFyIHplPWFyZ3VtZW50cy5sZW5ndGgsaXQ9bmV3IEFycmF5KHplPjE/emUtMTowKSx1dD0xO3V0PHplO3V0KyspaXRbdXQtMV09YXJndW1lbnRzW3V0XTtyZXR1cm4gVShNZSxEZSxpdCl9fWZ1bmN0aW9uIEMoTWUsRGUsemUpe3Zh'@;
put 'ciBpdDt6ZT1udWxsIT09KGl0PXplKSYmdm9pZCAwIT09aXQ/aXQ6c2UsSSYmSShNZSxudWxsKTtmb3IodmFyIHV0PURlLmxlbmd0aDt1dC0tOyl7dmFyIE10PURlW3V0XTtpZigic3RyaW5nIj09dHlwZW9mIE10KXt2YXIgSHQ9emUoTXQpO0h0IT09TXQmJihrKERlKXx8KERlW3V0XT1IdCks'@;
put 'TXQ9SHQpfU1lW010XT0hMH1yZXR1cm4gTWV9ZnVuY3Rpb24gUyhNZSl7dmFyIHplLERlPVkobnVsbCk7Zm9yKHplIGluIE1lKSEwPT09VShLLE1lLFt6ZV0pJiYoRGVbemVdPU1lW3plXSk7cmV0dXJuIERlfWZ1bmN0aW9uIHYoTWUsRGUpe2Zvcig7bnVsbCE9PU1lOyl7dmFyIHplPWooTWUs'@;
put 'RGUpO2lmKHplKXtpZih6ZS5nZXQpcmV0dXJuIE4oemUuZ2V0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgemUudmFsdWUpcmV0dXJuIE4oemUudmFsdWUpfU1lPUUoTWUpfXJldHVybiBmdW5jdGlvbiBpdCh1dCl7cmV0dXJuIGNvbnNvbGUud2FybigiZmFsbGJhY2sgdmFsdWUgZm9yIix1dCks'@;
put 'bnVsbH19dmFyIHA9VihbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNl'@;
put 'bnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmln'@;
put 'Y2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWlu'@;
put 'IiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2Vj'@;
put 'dGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhl'@;
put 'YWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksdz1WKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIs'@;
put 'ImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIs'@;
put 'InBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxKPVYoWyJmZUJsZW5kIiwiZmVD'@;
put 'b2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwi'@;
put 'ZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksbmU9'@;
put 'VihbImFuaW1hdGUiLCJjb2xvci1wcm9maWxlIiwiY3Vyc29yIiwiZGlzY2FyZCIsImZlZHJvcHNoYWRvdyIsImZvbnQtZmFjZSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2UtbmFtZSIsImZvbnQtZmFjZS1zcmMiLCJmb250LWZhY2UtdXJpIiwiZm9yZWlnbm9iamVjdCIsImhhdGNo'@;
put 'IiwiaGF0Y2hwYXRoIiwibWVzaCIsIm1lc2hncmFkaWVudCIsIm1lc2hwYXRjaCIsIm1lc2hyb3ciLCJtaXNzaW5nLWdseXBoIiwic2NyaXB0Iiwic2V0Iiwic29saWRjb2xvciIsInVua25vd24iLCJ1c2UiXSksZGU9VihbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJt'@;
put 'ZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxl'@;
put 'IiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIl0pLGZlPVYoWyJtYWN0aW9uIiwibWFsaWduZ3JvdXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJtc2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIsIm1zbGluZSIsIm1zcm93Iiwic2VtYW50'@;
put 'aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMiLCJub25lIl0pLHhlPVYoWyIjdGV4dCJdKSxMZT1WKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJl'@;
put 'IiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0'@;
put 'IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtl'@;
put 'eWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1h'@;
put 'eCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lu'@;
put 'bGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwi'@;
put 'c2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsInhtbG5zIiwic2xvdCJdKSxGZT1W'@;
put 'KFsiYWNjZW50LWhlaWdodCIsImFjY3VtdWxhdGUiLCJhZGRpdGl2ZSIsImFsaWdubWVudC1iYXNlbGluZSIsImFzY2VudCIsImF0dHJpYnV0ZW5hbWUiLCJhdHRyaWJ1dGV0eXBlIiwiYXppbXV0aCIsImJhc2VmcmVxdWVuY3kiLCJiYXNlbGluZS1zaGlmdCIsImJlZ2luIiwiYmlhcyIsImJ5'@;
put 'IiwiY2xhc3MiLCJjbGlwIiwiY2xpcHBhdGh1bml0cyIsImNsaXAtcGF0aCIsImNsaXAtcnVsZSIsImNvbG9yIiwiY29sb3ItaW50ZXJwb2xhdGlvbiIsImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsImNvbG9yLXByb2ZpbGUiLCJjb2xvci1yZW5kZXJpbmciLCJjeCIsImN5IiwiZCIs'@;
put 'ImR4IiwiZHkiLCJkaWZmdXNlY29uc3RhbnQiLCJkaXJlY3Rpb24iLCJkaXNwbGF5IiwiZGl2aXNvciIsImR1ciIsImVkZ2Vtb2RlIiwiZWxldmF0aW9uIiwiZW5kIiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRlcnVuaXRzIiwiZmxvb2QtY29sb3Ii'@;
put 'LCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJn'@;
put 'cmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0iLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVu'@;
put 'Z3RoYWRqdXN0IiwibGV0dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJuZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3'@;
put 'aWR0aCIsIm1hc2tjb250ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNrIiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3Jp'@;
put 'Z2luIiwib3ZlcmZsb3ciLCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3RoIiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVu'@;
put 'aXRzIiwiciIsInJ4IiwicnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVhdGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNwZWN1bGFyY29uc3RhbnQiLCJzcGVjdWxhcmV4cG9uZW50'@;
put 'Iiwic3ByZWFkbWV0aG9kIiwic3RhcnRvZmZzZXQiLCJzdGRkZXZpYXRpb24iLCJzdGl0Y2h0aWxlcyIsInN0b3AtY29sb3IiLCJzdG9wLW9wYWNpdHkiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtbGluZWNhcCIsInN0cm9rZS1saW5lam9pbiIsInN0'@;
put 'cm9rZS1taXRlcmxpbWl0Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiLCJzdHlsZSIsInN1cmZhY2VzY2FsZSIsInN5c3RlbWxhbmd1YWdlIiwidGFiaW5kZXgiLCJ0YXJnZXR4IiwidGFyZ2V0eSIsInRyYW5zZm9ybSIsInRyYW5zZm9ybS1vcmlnaW4iLCJ0ZXh0'@;
put 'LWFuY2hvciIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtcmVuZGVyaW5nIiwidGV4dGxlbmd0aCIsInR5cGUiLCJ1MSIsInUyIiwidW5pY29kZSIsInZhbHVlcyIsInZpZXdib3giLCJ2aXNpYmlsaXR5IiwidmVyc2lvbiIsInZlcnQtYWR2LXkiLCJ2ZXJ0LW9yaWdpbi14IiwidmVydC1vcmln'@;
put 'aW4teSIsIndpZHRoIiwid29yZC1zcGFjaW5nIiwid3JhcCIsIndyaXRpbmctbW9kZSIsInhjaGFubmVsc2VsZWN0b3IiLCJ5Y2hhbm5lbHNlbGVjdG9yIiwieCIsIngxIiwieDIiLCJ4bWxucyIsInkiLCJ5MSIsInkyIiwieiIsInpvb21hbmRwYW4iXSksT2U9VihbImFjY2VudCIsImFjY2Vu'@;
put 'dHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIs'@;
put 'ImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24i'@;
put 'LCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFy'@;
put 'YXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxqZT1WKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwieG1sOnNwYWNlIiwieG1sbnM6eGxpbmsiXSksV2U9'@;
put 'QigvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLEtlPUIoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLFllPUIoL1wke1tcd1xXXSp9L2dtKSxKZT1CKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLGx0PUIoL15hcmlhLVtcLVx3XSskLyksUGU9QigvXig/Oig/Oig/OmZ8aHQpdHBz'@;
put 'P3xtYWlsdG98dGVsfGNhbGx0b3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLGJlPUIoL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLEFlPUIoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0v'@;
put 'ZyksVGU9QigvXmh0bWwkL2kpO3JldHVybiBmdW5jdGlvbiBVZSgpe3ZhciBNZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csRGU9ZnVuY3Rpb24oWW4pe3JldHVybiBVZShZbil9O2lm'@;
put 'KERlLnZlcnNpb249IjIuNC43IixEZS5yZW1vdmVkPVtdLCFNZXx8IU1lLmRvY3VtZW50fHw5IT09TWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIERlLmlzU3VwcG9ydGVkPSExLERlO3ZhciB6ZT1NZS5kb2N1bWVudCxpdD1NZS5kb2N1bWVudCx1dD1NZS5Eb2N1bWVudEZyYWdtZW50LE10'@;
put 'PU1lLkhUTUxUZW1wbGF0ZUVsZW1lbnQsSHQ9TWUuTm9kZSxQdD1NZS5FbGVtZW50LG9uPU1lLk5vZGVGaWx0ZXIsQ249TWUuTmFtZWROb2RlTWFwLFV0PXZvaWQgMD09PUNuP01lLk5hbWVkTm9kZU1hcHx8TWUuTW96TmFtZWRBdHRyTWFwOkNuLGJuPU1lLkhUTUxGb3JtRWxlbWVudCxXbj1N'@;
put 'ZS5ET01QYXJzZXIsZW49TWUudHJ1c3RlZFR5cGVzLCRuPVB0LnByb3RvdHlwZSxIbj12KCRuLCJjbG9uZU5vZGUiKSxmdD12KCRuLCJuZXh0U2libGluZyIpLGZuPXYoJG4sImNoaWxkTm9kZXMiKSxobj12KCRuLCJwYXJlbnROb2RlIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE10KXt2YXIg'@;
put 'd3Q9aXQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3dC5jb250ZW50JiZ3dC5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihpdD13dC5jb250ZW50Lm93bmVyRG9jdW1lbnQpfXZhciBYdD1mdW5jdGlvbihEZSx6ZSl7aWYoIm9iamVjdCIhPT1JZShEZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBE'@;
put 'ZS5jcmVhdGVQb2xpY3kpcmV0dXJuIG51bGw7dmFyIGl0PW51bGwsdXQ9ImRhdGEtdHQtcG9saWN5LXN1ZmZpeCI7emUuY3VycmVudFNjcmlwdCYmemUuY3VycmVudFNjcmlwdC5oYXNBdHRyaWJ1dGUodXQpJiYoaXQ9emUuY3VycmVudFNjcmlwdC5nZXRBdHRyaWJ1dGUodXQpKTt2YXIgTXQ9'@;
put 'ImRvbXB1cmlmeSIrKGl0PyIjIitpdDoiIik7dHJ5e3JldHVybiBEZS5jcmVhdGVQb2xpY3koTXQse2NyZWF0ZUhUTUw6ZnVuY3Rpb24oUHQpe3JldHVybiBQdH0sY3JlYXRlU2NyaXB0VVJMOmZ1bmN0aW9uKFB0KXtyZXR1cm4gUHR9fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1'@;
put 'c3RlZFR5cGVzIHBvbGljeSAiK010KyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19KGVuLHplKSxfdD1YdD9YdC5jcmVhdGVIVE1MKCIiKToiIixtbj1pdC5pbXBsZW1lbnRhdGlvbixydD1pdC5jcmVhdGVOb2RlSXRlcmF0b3IsSXQ9aXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxK'@;
put 'dD1pdC5nZXRFbGVtZW50c0J5VGFnTmFtZSxEdD16ZS5pbXBvcnROb2RlLHB0PXt9O3RyeXtwdD1TKGl0KS5kb2N1bWVudE1vZGU/aXQuZG9jdW1lbnRNb2RlOnt9fWNhdGNoe312YXIgWXQ9e307RGUuaXNTdXBwb3J0ZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIGhuJiZtbiYmdm9pZCAwIT09bW4u'@;
put 'Y3JlYXRlSFRNTERvY3VtZW50JiY5IT09cHQ7dmFyIGVhLCRhLEluPVdlLHp0PUtlLHluPVllLHhuPUplLHNuPWx0LEJuPWJlLFJuPUFlLCR0PVBlLFBuPW51bGwsbmk9Qyh7fSxbXS5jb25jYXQobShwKSxtKHcpLG0oSiksbShkZSksbSh4ZSkpKSxsbj1udWxsLGpuPUMoe30sW10uY29uY2F0'@;
put 'KG0oTGUpLG0oRmUpLG0oT2UpLG0oamUpKSkscXI9T2JqZWN0LnNlYWwoT2JqZWN0LmNyZWF0ZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29u'@;
put 'ZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksZ2k9bnVsbCx4cj1udWxsLFVpPSEwLEtyPSEwLG5vPSExLEhyPSEw'@;
put 'LHFpPSExLEppPSExLGFvPSExLHJvPSExLGlvPSExLEdpPSExLGhvPSExLHlyPSEwLFBpPSExLGhzPSEwLHJzPSExLExjPXt9LHVsPW51bGwsUmM9Qyh7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdub2JqZWN0IiwiaGVhZCIsImlmcmFtZSIs'@;
put 'Im1hdGgiLCJtaSIsIm1uIiwibW8iLCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5vZnJhbWVzIiwibm9zY3JpcHQiLCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1wIl0pLE4wPW51bGwsczM9Qyh7fSxbImF1'@;
put 'ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pLGsyPW51bGwsZTA9Qyh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHls'@;
put 'ZSIsInhtbG5zIl0pLHh1PSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixmcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFBhPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTcj1QYSxBMj0hMSxhMz1udWxsLFBoPUMoe30sW3h1LGZzLFBhXSxoZSksaXM9'@;
put 'WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXSx0MD1udWxsLFNhPWl0LmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxGaD1mdW5jdGlvbihZbil7cmV0dXJuIFluIGluc3RhbmNlb2YgUmVnRXhwfHxZbiBpbnN0YW5jZW9mIEZ1bmN0aW9ufSxFdT1mdW5jdGlvbihZbil7dDAmJnQw'@;
put 'PT09WW58fCgoIVlufHwib2JqZWN0IiE9PUllKFluKSkmJihZbj17fSksWW49UyhZbiksZWE9ZWE9LTE9PT1pcy5pbmRleE9mKFluLlBBUlNFUl9NRURJQV9UWVBFKT8idGV4dC9odG1sIjpZbi5QQVJTRVJfTUVESUFfVFlQRSwkYT0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PWVhP2hlOnNl'@;
put 'LFBuPSJBTExPV0VEX1RBR1MiaW4gWW4/Qyh7fSxZbi5BTExPV0VEX1RBR1MsJGEpOm5pLGxuPSJBTExPV0VEX0FUVFIiaW4gWW4/Qyh7fSxZbi5BTExPV0VEX0FUVFIsJGEpOmpuLGEzPSJBTExPV0VEX05BTUVTUEFDRVMiaW4gWW4/Qyh7fSxZbi5BTExPV0VEX05BTUVTUEFDRVMsaGUpOlBo'@;
put 'LGsyPSJBRERfVVJJX1NBRkVfQVRUUiJpbiBZbj9DKFMoZTApLFluLkFERF9VUklfU0FGRV9BVFRSLCRhKTplMCxOMD0iQUREX0RBVEFfVVJJX1RBR1MiaW4gWW4/QyhTKHMzKSxZbi5BRERfREFUQV9VUklfVEFHUywkYSk6czMsdWw9IkZPUkJJRF9DT05URU5UUyJpbiBZbj9DKHt9LFluLkZP'@;
put 'UkJJRF9DT05URU5UUywkYSk6UmMsZ2k9IkZPUkJJRF9UQUdTImluIFluP0Moe30sWW4uRk9SQklEX1RBR1MsJGEpOnt9LHhyPSJGT1JCSURfQVRUUiJpbiBZbj9DKHt9LFluLkZPUkJJRF9BVFRSLCRhKTp7fSxMYz0iVVNFX1BST0ZJTEVTImluIFluJiZZbi5VU0VfUFJPRklMRVMsVWk9ITEh'@;
put 'PT1Zbi5BTExPV19BUklBX0FUVFIsS3I9ITEhPT1Zbi5BTExPV19EQVRBX0FUVFIsbm89WW4uQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLEhyPSExIT09WW4uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSLHFpPVluLlNBRkVfRk9SX1RFTVBMQVRFU3x8ITEsSmk9WW4uV0hPTEVfRE9DVU1F'@;
put 'TlR8fCExLGlvPVluLlJFVFVSTl9ET018fCExLEdpPVluLlJFVFVSTl9ET01fRlJBR01FTlR8fCExLGhvPVluLlJFVFVSTl9UUlVTVEVEX1RZUEV8fCExLHJvPVluLkZPUkNFX0JPRFl8fCExLHlyPSExIT09WW4uU0FOSVRJWkVfRE9NLFBpPVluLlNBTklUSVpFX05BTUVEX1BST1BTfHwhMSxo'@;
put 'cz0hMSE9PVluLktFRVBfQ09OVEVOVCxycz1Zbi5JTl9QTEFDRXx8ITEsJHQ9WW4uQUxMT1dFRF9VUklfUkVHRVhQfHwkdCxTcj1Zbi5OQU1FU1BBQ0V8fFBhLHFyPVluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSxZbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmRmgoWW4uQ1VTVE9N'@;
put 'X0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKHFyLnRhZ05hbWVDaGVjaz1Zbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spLFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZGaChZbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hl'@;
put 'Y2spJiYocXIuYXR0cmlidXRlTmFtZUNoZWNrPVluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayksWW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJiJib29sZWFuIj09dHlwZW9mIFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1'@;
put 'aWx0SW5FbGVtZW50cyYmKHFyLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz1Zbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLHFpJiYoS3I9ITEpLEdpJiYoaW89ITApLExjJiYoUG49Qyh7fSxtKHhlKSksbG49W10sITA9PT1M'@;
put 'Yy5odG1sJiYoQyhQbixwKSxDKGxuLExlKSksITA9PT1MYy5zdmcmJihDKFBuLHcpLEMobG4sRmUpLEMobG4samUpKSwhMD09PUxjLnN2Z0ZpbHRlcnMmJihDKFBuLEopLEMobG4sRmUpLEMobG4samUpKSwhMD09PUxjLm1hdGhNbCYmKEMoUG4sZGUpLEMobG4sT2UpLEMobG4samUpKSksWW4u'@;
put 'QUREX1RBR1MmJihQbj09PW5pJiYoUG49UyhQbikpLEMoUG4sWW4uQUREX1RBR1MsJGEpKSxZbi5BRERfQVRUUiYmKGxuPT09am4mJihsbj1TKGxuKSksQyhsbixZbi5BRERfQVRUUiwkYSkpLFluLkFERF9VUklfU0FGRV9BVFRSJiZDKGsyLFluLkFERF9VUklfU0FGRV9BVFRSLCRhKSxZbi5G'@;
put 'T1JCSURfQ09OVEVOVFMmJih1bD09PVJjJiYodWw9Uyh1bCkpLEModWwsWW4uRk9SQklEX0NPTlRFTlRTLCRhKSksaHMmJihQblsiI3RleHQiXT0hMCksSmkmJkMoUG4sWyJodG1sIiwiaGVhZCIsImJvZHkiXSksUG4udGFibGUmJihDKFBuLFsidGJvZHkiXSksZGVsZXRlIGdpLnRib2R5KSxW'@;
put 'JiZWKFluKSx0MD1Zbil9LEFzPUMoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLG4wPUMoe30sWyJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIiwiYW5ub3RhdGlvbi14bWwiXSkscWE9Qyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKSx2Yz1D'@;
put 'KHt9LHcpO0ModmMsSiksQyh2YyxuZSk7dmFyIEhoPUMoe30sZGUpO0MoSGgsZmUpO3ZhciBibz1mdW5jdGlvbihZbil7b2UoRGUucmVtb3ZlZCx7ZWxlbWVudDpZbn0pO3RyeXtZbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFluKX1jYXRjaHt0cnl7WW4ub3V0ZXJIVE1MPV90fWNhdGNoe1lu'@;
put 'LnJlbW92ZSgpfX19LHIwPWZ1bmN0aW9uKFluLGJpKXt0cnl7b2UoRGUucmVtb3ZlZCx7YXR0cmlidXRlOmJpLmdldEF0dHJpYnV0ZU5vZGUoWW4pLGZyb206Yml9KX1jYXRjaHtvZShEZS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmJpfSl9aWYoYmkucmVtb3ZlQXR0cmlidXRlKFlu'@;
put 'KSwiaXMiPT09WW4mJiFsbltZbl0paWYoaW98fEdpKXRyeXtibyhiaSl9Y2F0Y2h7fWVsc2UgdHJ5e2JpLnNldEF0dHJpYnV0ZShZbiwiIil9Y2F0Y2h7fX0sVDI9ZnVuY3Rpb24oWW4pe3ZhciBiaSx5aTtpZihybylZbj0iPHJlbW92ZT48L3JlbW92ZT4iK1luO2Vsc2V7dmFyIG9zPXVlKFlu'@;
put 'LC9eW1xyXG5cdCBdKy8pO3lpPW9zJiZvc1swXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PWVhJiZTcj09PVBhJiYoWW49JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytZbisiPC9ib2R5PjwvaHRtbD4iKTt2YXIgRmE9'@;
put 'WHQ/WHQuY3JlYXRlSFRNTChZbik6WW47aWYoU3I9PT1QYSl0cnl7Ymk9KG5ldyBXbikucGFyc2VGcm9tU3RyaW5nKEZhLGVhKX1jYXRjaHt9aWYoIWJpfHwhYmkuZG9jdW1lbnRFbGVtZW50KXtiaT1tbi5jcmVhdGVEb2N1bWVudChTciwidGVtcGxhdGUiLG51bGwpO3RyeXtiaS5kb2N1bWVu'@;
put 'dEVsZW1lbnQuaW5uZXJIVE1MPUEyP190OkZhfWNhdGNoe319dmFyIEhhPWJpLmJvZHl8fGJpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gWW4mJnlpJiZIYS5pbnNlcnRCZWZvcmUoaXQuY3JlYXRlVGV4dE5vZGUoeWkpLEhhLmNoaWxkTm9kZXNbMF18fG51bGwpLFNyPT09UGE/SnQuY2FsbChi'@;
put 'aSxKaT8iaHRtbCI6ImJvZHkiKVswXTpKaT9iaS5kb2N1bWVudEVsZW1lbnQ6SGF9LEQyPWZ1bmN0aW9uKFluKXtyZXR1cm4gcnQuY2FsbChZbi5vd25lckRvY3VtZW50fHxZbixZbixvbi5TSE9XX0VMRU1FTlR8b24uU0hPV19DT01NRU5UfG9uLlNIT1dfVEVYVCxudWxsLCExKX0sQXI9ZnVu'@;
put 'Y3Rpb24oWW4pe3JldHVybiJvYmplY3QiPT09SWUoSHQpP1luIGluc3RhbmNlb2YgSHQ6WW4mJiJvYmplY3QiPT09SWUoWW4pJiYibnVtYmVyIj09dHlwZW9mIFluLm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIFluLm5vZGVOYW1lfSxfYz1mdW5jdGlvbihZbixiaSx5aSl7WXRbWW5dJiZl'@;
put 'ZShZdFtZbl0sZnVuY3Rpb24ob3Mpe29zLmNhbGwoRGUsYmkseWksdDApfSl9LGtvPWZ1bmN0aW9uKFluKXt2YXIgYmk7aWYoX2MoImJlZm9yZVNhbml0aXplRWxlbWVudHMiLFluLG51bGwpLGZ1bmN0aW9uKFluKXtyZXR1cm4gWW4gaW5zdGFuY2VvZiBibiYmKCJzdHJpbmciIT10eXBlb2Yg'@;
put 'WW4ubm9kZU5hbWV8fCJzdHJpbmciIT10eXBlb2YgWW4udGV4dENvbnRlbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBZbi5yZW1vdmVDaGlsZHx8IShZbi5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgVXQpfHwiZnVuY3Rpb24iIT10eXBlb2YgWW4ucmVtb3ZlQXR0cmlidXRlfHwiZnVuY3Rpb24iIT10'@;
put 'eXBlb2YgWW4uc2V0QXR0cmlidXRlfHwic3RyaW5nIiE9dHlwZW9mIFluLm5hbWVzcGFjZVVSSXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLmluc2VydEJlZm9yZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLmhhc0NoaWxkTm9kZXMpfShZbil8fEQoL1tcdTAwODAtXHVGRkZGXS8sWW4ubm9kZU5h'@;
put 'bWUpKXJldHVybiBibyhZbiksITA7dmFyIHlpPSRhKFluLm5vZGVOYW1lKTtpZihfYygidXBvblNhbml0aXplRWxlbWVudCIsWW4se3RhZ05hbWU6eWksYWxsb3dlZFRhZ3M6UG59KSxZbi5oYXNDaGlsZE5vZGVzKCkmJiFBcihZbi5maXJzdEVsZW1lbnRDaGlsZCkmJighQXIoWW4uY29udGVu'@;
put 'dCl8fCFBcihZbi5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSkmJkQoLzxbL1x3XS9nLFluLmlubmVySFRNTCkmJkQoLzxbL1x3XS9nLFluLnRleHRDb250ZW50KXx8InNlbGVjdCI9PT15aSYmRCgvPHRlbXBsYXRlL2ksWW4uaW5uZXJIVE1MKSlyZXR1cm4gYm8oWW4pLCEwO2lmKCFQblt5'@;
put 'aV18fGdpW3lpXSl7aWYoIWdpW3lpXSYmbzAoeWkpJiYocXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZEKHFyLnRhZ05hbWVDaGVjayx5aSl8fHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZxci50YWdOYW1lQ2hlY2soeWkpKSlyZXR1cm4hMTtpZihocyYm'@;
put 'IXVsW3lpXSl7dmFyIG9zPWhuKFluKXx8WW4ucGFyZW50Tm9kZSxGYT1mbihZbil8fFluLmNoaWxkTm9kZXM7aWYoRmEmJm9zKWZvcih2YXIgJG89RmEubGVuZ3RoLTE7JG8+PTA7LS0kbylvcy5pbnNlcnRCZWZvcmUoSG4oRmFbJG9dLCEwKSxmdChZbikpfXJldHVybiBibyhZbiksITB9cmV0'@;
put 'dXJuIFluIGluc3RhbmNlb2YgUHQmJiFmdW5jdGlvbihZbil7dmFyIGJpPWhuKFluKTsoIWJpfHwhYmkudGFnTmFtZSkmJihiaT17bmFtZXNwYWNlVVJJOlNyLHRhZ05hbWU6InRlbXBsYXRlIn0pO3ZhciB5aT1zZShZbi50YWdOYW1lKSxvcz1zZShiaS50YWdOYW1lKTtyZXR1cm4hIWEzW1lu'@;
put 'Lm5hbWVzcGFjZVVSSV0mJihZbi5uYW1lc3BhY2VVUkk9PT1mcz9iaS5uYW1lc3BhY2VVUkk9PT1QYT8ic3ZnIj09PXlpOmJpLm5hbWVzcGFjZVVSST09PXh1PyJzdmciPT09eWkmJigiYW5ub3RhdGlvbi14bWwiPT09b3N8fEFzW29zXSk6ISF2Y1t5aV06WW4ubmFtZXNwYWNlVVJJPT09eHU/'@;
put 'YmkubmFtZXNwYWNlVVJJPT09UGE/Im1hdGgiPT09eWk6YmkubmFtZXNwYWNlVVJJPT09ZnM/Im1hdGgiPT09eWkmJm4wW29zXTohIUhoW3lpXTpZbi5uYW1lc3BhY2VVUkk9PT1QYT8hKGJpLm5hbWVzcGFjZVVSST09PWZzJiYhbjBbb3NdfHxiaS5uYW1lc3BhY2VVUkk9PT14dSYmIUFzW29z'@;
put 'XSkmJiFIaFt5aV0mJihxYVt5aV18fCF2Y1t5aV0pOiEoImFwcGxpY2F0aW9uL3hodG1sK3htbCIhPT1lYXx8IWEzW1luLm5hbWVzcGFjZVVSSV0pKX0oWW4pfHwoIm5vc2NyaXB0Ij09PXlpfHwibm9lbWJlZCI9PT15aXx8Im5vZnJhbWVzIj09PXlpKSYmRCgvPFwvbm8oc2NyaXB0fGVtYmVk'@;
put 'fGZyYW1lcykvaSxZbi5pbm5lckhUTUwpPyhibyhZbiksITApOihxaSYmMz09PVluLm5vZGVUeXBlJiYoYmk9Y2UoYmk9WW4udGV4dENvbnRlbnQsSW4sIiAiKSxiaT1jZShiaSx6dCwiICIpLGJpPWNlKGJpLHluLCIgIiksWW4udGV4dENvbnRlbnQhPT1iaSYmKG9lKERlLnJlbW92ZWQse2Vs'@;
put 'ZW1lbnQ6WW4uY2xvbmVOb2RlKCl9KSxZbi50ZXh0Q29udGVudD1iaSkpLF9jKCJhZnRlclNhbml0aXplRWxlbWVudHMiLFluLG51bGwpLCExKX0sQ3M9ZnVuY3Rpb24oWW4sYmkseWkpe2lmKHlyJiYoImlkIj09PWJpfHwibmFtZSI9PT1iaSkmJih5aSBpbiBpdHx8eWkgaW4gU2EpKXJldHVy'@;
put 'biExO2lmKCghS3J8fHhyW2JpXXx8IUQoeG4sYmkpKSYmKCFVaXx8IUQoc24sYmkpKSlpZighbG5bYmldfHx4cltiaV0pe2lmKCEobzAoWW4pJiYocXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZEKHFyLnRhZ05hbWVDaGVjayxZbil8fHFyLnRhZ05hbWVDaGVjayBpbnN0YW5j'@;
put 'ZW9mIEZ1bmN0aW9uJiZxci50YWdOYW1lQ2hlY2soWW4pKSYmKHFyLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRChxci5hdHRyaWJ1dGVOYW1lQ2hlY2ssYmkpfHxxci5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmcXIuYXR0cmlidXRlTmFt'@;
put 'ZUNoZWNrKGJpKSl8fCJpcyI9PT1iaSYmcXIuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYocXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZEKHFyLnRhZ05hbWVDaGVjayx5aSl8fHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZxci50YWdOYW1l'@;
put 'Q2hlY2soeWkpKSkpcmV0dXJuITF9ZWxzZSBpZighazJbYmldJiYhRCgkdCxjZSh5aSxSbiwiIikpJiYoInNyYyIhPT1iaSYmInhsaW5rOmhyZWYiIT09YmkmJiJocmVmIiE9PWJpfHwic2NyaXB0Ij09PVlufHwwIT09Ryh5aSwiZGF0YToiKXx8IU4wW1luXSkmJighbm98fEQoQm4sY2UoeWks'@;
put 'Um4sIiIpKSkmJnlpKXJldHVybiExO3JldHVybiEwfSxvMD1mdW5jdGlvbihZbil7cmV0dXJuIFluLmluZGV4T2YoIi0iKT4wfSxJMj1mdW5jdGlvbihZbil7dmFyIGJpLHlpLG9zLEZhO19jKCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLFluLG51bGwpO3ZhciBIYT1Zbi5hdHRyaWJ1dGVz'@;
put 'O2lmKEhhKXt2YXIgJG89e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczpsbn07Zm9yKEZhPUhhLmxlbmd0aDtGYS0tOyl7dmFyIERhPShiaT1IYVtGYV0pLm5hbWUsVmg9YmkubmFtZXNwYWNlVVJJO2lmKHlpPSJ2YWx1ZSI9PT1EYT9iaS52'@;
put 'YWx1ZTpiKGJpLnZhbHVlKSxvcz0kYShEYSksJG8uYXR0ck5hbWU9b3MsJG8uYXR0clZhbHVlPXlpLCRvLmtlZXBBdHRyPSEwLCRvLmZvcmNlS2VlcEF0dHI9dm9pZCAwLF9jKCJ1cG9uU2FuaXRpemVBdHRyaWJ1dGUiLFluLCRvKSx5aT0kby5hdHRyVmFsdWUsISRvLmZvcmNlS2VlcEF0dHIm'@;
put 'JihyMChEYSxZbiksJG8ua2VlcEF0dHIpKXtpZighSHImJkQoL1wvPi9pLHlpKSl7cjAoRGEsWW4pO2NvbnRpbnVlfXFpJiYoeWk9Y2UoeWksSW4sIiAiKSx5aT1jZSh5aSx6dCwiICIpLHlpPWNlKHlpLHluLCIgIikpO3ZhciBCaD0kYShZbi5ub2RlTmFtZSk7aWYoQ3MoQmgsb3MseWkpKXtp'@;
put 'ZihQaSYmKCJpZCI9PT1vc3x8Im5hbWUiPT09b3MpJiYocjAoRGEsWW4pLHlpPSJ1c2VyLWNvbnRlbnQtIit5aSksWHQmJiJvYmplY3QiPT09SWUoZW4pJiYiZnVuY3Rpb24iPT10eXBlb2YgZW4uZ2V0QXR0cmlidXRlVHlwZSYmIVZoKXN3aXRjaChlbi5nZXRBdHRyaWJ1dGVUeXBlKEJoLG9z'@;
put 'KSl7Y2FzZSJUcnVzdGVkSFRNTCI6eWk9WHQuY3JlYXRlSFRNTCh5aSk7YnJlYWs7Y2FzZSJUcnVzdGVkU2NyaXB0VVJMIjp5aT1YdC5jcmVhdGVTY3JpcHRVUkwoeWkpfXRyeXtWaD9Zbi5zZXRBdHRyaWJ1dGVOUyhWaCxEYSx5aSk6WW4uc2V0QXR0cmlidXRlKERhLHlpKSx0ZShEZS5yZW1v'@;
put 'dmVkKX1jYXRjaHt9fX19X2MoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixZbixudWxsKX19LE5oPWZ1bmN0aW9uIFFpKFluKXt2YXIgYmkseWk9RDIoWW4pO2ZvcihfYygiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLFluLG51bGwpO2JpPXlpLm5leHROb2RlKCk7KV9jKCJ1cG9uU2FuaXRp'@;
put 'emVTaGFkb3dOb2RlIixiaSxudWxsKSwha28oYmkpJiYoYmkuY29udGVudCBpbnN0YW5jZW9mIHV0JiZRaShiaS5jb250ZW50KSxJMihiaSkpO19jKCJhZnRlclNhbml0aXplU2hhZG93RE9NIixZbixudWxsKX07cmV0dXJuIERlLnNhbml0aXplPWZ1bmN0aW9uKFFpKXt2YXIgYmkseWksb3Ms'@;
put 'RmEsSGEsWW49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKChBMj0hUWkpJiYoUWk9Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiBRaSYmIUFyKFFpKSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFFpLnRvU3RyaW5nKXRo'@;
put 'cm93IEgoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZihRaT1RaS50b1N0cmluZygpKSl0aHJvdyBIKCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9aWYoIURlLmlzU3VwcG9ydGVkKXtpZigib2JqZWN0Ij09PUllKE1lLnRvU3RhdGlj'@;
put 'SFRNTCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBNZS50b1N0YXRpY0hUTUwpe2lmKCJzdHJpbmciPT10eXBlb2YgUWkpcmV0dXJuIE1lLnRvU3RhdGljSFRNTChRaSk7aWYoQXIoUWkpKXJldHVybiBNZS50b1N0YXRpY0hUTUwoUWkub3V0ZXJIVE1MKX1yZXR1cm4gUWl9aWYoYW98fEV1KFluKSxE'@;
put 'ZS5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgUWkmJihycz0hMSkscnMpe2lmKFFpLm5vZGVOYW1lKXt2YXIgJG89JGEoUWkubm9kZU5hbWUpO2lmKCFQblskb118fGdpWyRvXSl0aHJvdyBIKCJyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBs'@;
put 'YWNlIil9fWVsc2UgaWYoUWkgaW5zdGFuY2VvZiBIdCkxPT09KHlpPShiaT1UMigiXHgzYyEtLS0tXHgzZSIpKS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoUWksITApKS5ub2RlVHlwZSYmIkJPRFkiPT09eWkubm9kZU5hbWV8fCJIVE1MIj09PXlpLm5vZGVOYW1lP2JpPXlpOmJpLmFwcGVu'@;
put 'ZENoaWxkKHlpKTtlbHNle2lmKCFpbyYmIXFpJiYhSmkmJi0xPT09UWkuaW5kZXhPZigiPCIpKXJldHVybiBYdCYmaG8/WHQuY3JlYXRlSFRNTChRaSk6UWk7aWYoIShiaT1UMihRaSkpKXJldHVybiBpbz9udWxsOmhvP190OiIifWJpJiZybyYmYm8oYmkuZmlyc3RDaGlsZCk7Zm9yKHZhciBW'@;
put 'MD1EMihycz9RaTpiaSk7b3M9VjAubmV4dE5vZGUoKTspMz09PW9zLm5vZGVUeXBlJiZvcz09PUZhfHxrbyhvcyl8fChvcy5jb250ZW50IGluc3RhbmNlb2YgdXQmJk5oKG9zLmNvbnRlbnQpLEkyKG9zKSxGYT1vcyk7aWYoRmE9bnVsbCxycylyZXR1cm4gUWk7aWYoaW8pe2lmKEdpKWZvcihI'@;
put 'YT1JdC5jYWxsKGJpLm93bmVyRG9jdW1lbnQpO2JpLmZpcnN0Q2hpbGQ7KUhhLmFwcGVuZENoaWxkKGJpLmZpcnN0Q2hpbGQpO2Vsc2UgSGE9Ymk7cmV0dXJuKGxuLnNoYWRvd3Jvb3R8fGxuLnNoYWRvd3Jvb3Rtb2QpJiYoSGE9RHQuY2FsbCh6ZSxIYSwhMCkpLEhhfXZhciBEYT1KaT9iaS5v'@;
put 'dXRlckhUTUw6YmkuaW5uZXJIVE1MO3JldHVybiBKaSYmUG5bIiFkb2N0eXBlIl0mJmJpLm93bmVyRG9jdW1lbnQmJmJpLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmYmkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJkQoVGUsYmkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpJiYoRGE9'@;
put 'IjwhRE9DVFlQRSAiK2JpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKyI+XG4iK0RhKSxxaSYmKERhPWNlKERhLEluLCIgIiksRGE9Y2UoRGEsenQsIiAiKSxEYT1jZShEYSx5biwiICIpKSxYdCYmaG8/WHQuY3JlYXRlSFRNTChEYSk6RGF9LERlLnNldENvbmZpZz1mdW5jdGlvbihRaSl7'@;
put 'RXUoUWkpLGFvPSEwfSxEZS5jbGVhckNvbmZpZz1mdW5jdGlvbigpe3QwPW51bGwsYW89ITF9LERlLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oUWksWW4sYmkpe3QwfHxFdSh7fSk7dmFyIHlpPSRhKFFpKSxvcz0kYShZbik7cmV0dXJuIENzKHlpLG9zLGJpKX0sRGUuYWRkSG9vaz1mdW5j'@;
put 'dGlvbihRaSxZbil7ImZ1bmN0aW9uIj09dHlwZW9mIFluJiYoWXRbUWldPVl0W1FpXXx8W10sb2UoWXRbUWldLFluKSl9LERlLnJlbW92ZUhvb2s9ZnVuY3Rpb24oUWkpe2lmKFl0W1FpXSlyZXR1cm4gdGUoWXRbUWldKX0sRGUucmVtb3ZlSG9va3M9ZnVuY3Rpb24oUWkpe1l0W1FpXSYmKFl0'@;
put 'W1FpXT1bXSl9LERlLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7WXQ9e319LERlfSgpfSgpfSw4ODY1MTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUllO2FlLnZlcnNpb249RigxODU5NykuaTgsYWUudXRpbHM9Rig0Njc2NyksYWUucmFuZD1GKDYwMDgyKSxhZS5jdXJ2ZT1G'@;
put 'KDkxMzIpLGFlLmN1cnZlcz1GKDgwNDkpLGFlLmVjPUYoNjQ0MyksYWUuZWRkc2E9Rig5OTU3Nyl9LDcxMzI0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDQ2NzY3KSxtPXguZ2V0TkFGLGxlPXguZ2V0SlNGLE09eC5hc3NlcnQ7ZnVuY3Rpb24gTyh6LEsp'@;
put 'e3RoaXMudHlwZT16LHRoaXMucD1uZXcgYWUoSy5wLDE2KSx0aGlzLnJlZD1LLnByaW1lP2FlLnJlZChLLnByaW1lKTphZS5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBhZSgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IGFlKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1u'@;
put 'ZXcgYWUoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1LLm4mJm5ldyBhZShLLm4sMTYpLHRoaXMuZz1LLmcmJnRoaXMucG9pbnRGcm9tSlNPTihLLmcsSy5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBB'@;
put 'cnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIEk9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IUl8fEkuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0h'@;
put 'MCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gUih6LEspe3RoaXMuY3VydmU9eix0aGlzLnR5cGU9Syx0aGlzLnByZWNvbXB1dGVkPW51bGx9YXQuZXhwb3J0cz1PLE8ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1w'@;
put 'bGVtZW50ZWQiKX0sTy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxPLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oSyxJKXtNKEsucHJlY29tcHV0ZWQpO3ZhciBrPUsuX2dldERvdWJsZXMoKSxFPW0oSSwx'@;
put 'LHRoaXMuX2JpdExlbmd0aCksaj0oMTw8ay5zdGVwKzEpLShrLnN0ZXAlMj09MD8yOjEpO2ovPTM7dmFyIEIsWSxWPVtdO2ZvcihCPTA7QjxFLmxlbmd0aDtCKz1rLnN0ZXApe1k9MDtmb3IodmFyIFg9QitrLnN0ZXAtMTtYPj1CO1gtLSlZPShZPDwxKStFW1hdO1YucHVzaChZKX1mb3IodmFy'@;
put 'IFU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHE9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGVlPWo7ZWU+MDtlZS0tKXtmb3IoQj0wO0I8Vi5sZW5ndGg7QisrKShZPVZbQl0pPT09ZWU/cT1xLm1peGVkQWRkKGsucG9pbnRzW0JdKTpZPT09LWVlJiYocT1xLm1peGVkQWRkKGsu'@;
put 'cG9pbnRzW0JdLm5lZygpKSk7VT1VLmFkZChxKX1yZXR1cm4gVS50b1AoKX0sTy5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oSyxJKXtmb3IodmFyIGs9NCxFPUsuX2dldE5BRlBvaW50cyhrKSxqPUUucG9pbnRzLFY9bShJLGs9RS53bmQsdGhpcy5fYml0TGVuZ3RoKSxCPXRoaXMuanBv'@;
put 'aW50KG51bGwsbnVsbCxudWxsKSxZPVYubGVuZ3RoLTE7WT49MDtZLS0pe2Zvcih2YXIgWD0wO1k+PTAmJjA9PT1WW1ldO1ktLSlYKys7aWYoWT49MCYmWCsrLEI9Qi5kYmxwKFgpLFk8MClicmVhazt2YXIgVT1WW1ldO00oMCE9PVUpLEI9ImFmZmluZSI9PT1LLnR5cGU/Qi5taXhlZEFkZChV'@;
put 'PjA/altVLTE+PjFdOmpbLVUtMT4+MV0ubmVnKCkpOkIuYWRkKFU+MD9qW1UtMT4+MV06alstVS0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT1LLnR5cGU/Qi50b1AoKTpCfSxPLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbihLLEksayxFLGope3ZhciBVLHEsZWUsVj10aGlz'@;
put 'Ll93bmFmVDEsQj10aGlzLl93bmFmVDIsWT10aGlzLl93bmFmVDMsWD0wO2ZvcihVPTA7VTxFO1UrKyl7dmFyIHRlPShlZT1JW1VdKS5fZ2V0TkFGUG9pbnRzKEspO1ZbVV09dGUud25kLEJbVV09dGUucG9pbnRzfWZvcihVPUUtMTtVPj0xO1UtPTIpe3ZhciBvZT1VLTEsc2U9VTtpZigxPT09'@;
put 'VltvZV0mJjE9PT1WW3NlXSl7dmFyIGhlPVtJW29lXSxudWxsLG51bGwsSVtzZV1dOzA9PT1JW29lXS55LmNtcChJW3NlXS55KT8oaGVbMV09SVtvZV0uYWRkKElbc2VdKSxoZVsyXT1JW29lXS50b0ooKS5taXhlZEFkZChJW3NlXS5uZWcoKSkpOjA9PT1JW29lXS55LmNtcChJW3NlXS55LnJl'@;
put 'ZE5lZygpKT8oaGVbMV09SVtvZV0udG9KKCkubWl4ZWRBZGQoSVtzZV0pLGhlWzJdPUlbb2VdLmFkZChJW3NlXS5uZWcoKSkpOihoZVsxXT1JW29lXS50b0ooKS5taXhlZEFkZChJW3NlXSksaGVbMl09SVtvZV0udG9KKCkubWl4ZWRBZGQoSVtzZV0ubmVnKCkpKTt2YXIgdWU9Wy0zLC0xLC01'@;
put 'LC03LDAsNyw1LDEsM10sY2U9bGUoa1tvZV0sa1tzZV0pO2ZvcihYPU1hdGgubWF4KGNlWzBdLmxlbmd0aCxYKSxZW29lXT1uZXcgQXJyYXkoWCksWVtzZV09bmV3IEFycmF5KFgpLHE9MDtxPFg7cSsrKVlbb2VdW3FdPXVlWzMqKDErKDB8Y2VbMF1bcV0pKSsoMSsoMHxjZVsxXVtxXSkpXSxZ'@;
put 'W3NlXVtxXT0wLEJbb2VdPWhlfWVsc2UgWVtvZV09bShrW29lXSxWW29lXSx0aGlzLl9iaXRMZW5ndGgpLFlbc2VdPW0oa1tzZV0sVltzZV0sdGhpcy5fYml0TGVuZ3RoKSxYPU1hdGgubWF4KFlbb2VdLmxlbmd0aCxYKSxYPU1hdGgubWF4KFlbc2VdLmxlbmd0aCxYKX12YXIgRD10aGlzLmpw'@;
put 'b2ludChudWxsLG51bGwsbnVsbCksSD10aGlzLl93bmFmVDQ7Zm9yKFU9WDtVPj0wO1UtLSl7Zm9yKHZhciBOPTA7VT49MDspe3ZhciBnPSEwO2ZvcihxPTA7cTxFO3ErKylIW3FdPTB8WVtxXVtVXSwwIT09SFtxXSYmKGc9ITEpO2lmKCFnKWJyZWFrO04rKyxVLS19aWYoVT49MCYmTisrLEQ9'@;
put 'RC5kYmxwKE4pLFU8MClicmVhaztmb3IocT0wO3E8RTtxKyspe3ZhciBDPUhbcV07MCE9PUMmJihDPjA/ZWU9QltxXVtDLTE+PjFdOkM8MCYmKGVlPUJbcV1bLUMtMT4+MV0ubmVnKCkpLEQ9ImFmZmluZSI9PT1lZS50eXBlP0QubWl4ZWRBZGQoZWUpOkQuYWRkKGVlKSl9fWZvcihVPTA7VTxF'@;
put 'O1UrKylCW1VdPW51bGw7cmV0dXJuIGo/RDpELnRvUCgpfSxPLkJhc2VQb2ludD1SLFIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxp'@;
put 'ZGF0ZSh0aGlzKX0sTy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oSyxJKXtLPXgudG9BcnJheShLLEkpO3ZhciBrPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1LWzBdfHw2PT09S1swXXx8Nz09PUtbMF0pJiZLLmxlbmd0aC0xPT0yKmspcmV0dXJuIDY9PT1LWzBdP00oS1tL'@;
put 'Lmxlbmd0aC0xXSUyPT0wKTo3PT09S1swXSYmTShLW0subGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoSy5zbGljZSgxLDErayksSy5zbGljZSgxK2ssMSsyKmspKTtpZigoMj09PUtbMF18fDM9PT1LWzBdKSYmSy5sZW5ndGgtMT09PWspcmV0dXJuIHRoaXMucG9pbnRGcm9tWChLLnNsaWNl'@;
put 'KDEsMStrKSwzPT09S1swXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxSLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmVuY29kZShLLCEwKX0sUi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihLKXt2YXIgST10'@;
put 'aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLGs9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLEkpO3JldHVybiBLP1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChrKTpbNF0uY29uY2F0KGssdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLEkpKX0sUi5wcm90b3R5cGUuZW5jb2RlPWZ1'@;
put 'bmN0aW9uKEssSSl7cmV0dXJuIHguZW5jb2RlKHRoaXMuX2VuY29kZShJKSxLKX0sUi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbihLKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBJPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gSS5u'@;
put 'YWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLEkuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsSyksSS5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPUksdGhpc30sUi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oSyl7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0'@;
put 'dXJuITE7dmFyIEk9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhSSYmSS5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKEsuYml0TGVuZ3RoKCkrMSkvSS5zdGVwKX0sUi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oSyxJKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlz'@;
put 'LnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIGs9W3RoaXNdLEU9dGhpcyxqPTA7ajxJO2orPUspe2Zvcih2YXIgVj0wO1Y8SztWKyspRT1FLmRibCgpO2sucHVzaChFKX1yZXR1cm57c3RlcDpLLHBvaW50czprfX0sUi5wcm90b3R5'@;
put 'cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihLKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBJPVt0aGlzXSxrPSgxPDxLKS0xLEU9MT09PWs/bnVsbDp0aGlzLmRibCgpLGo9MTtqPGs7aisrKUlb'@;
put 'al09SVtqLTFdLmFkZChFKTtyZXR1cm57d25kOksscG9pbnRzOkl9fSxSLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxSLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKEspe2Zvcih2YXIgST10aGlzLGs9MDtrPEs7aysrKUk9SS5kYmwoKTtyZXR1cm4gSX19LDI3'@;
put 'NjY1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0Njc2NykseD1GKDMxMzg3KSxtPUYoNjY2OTgpLGxlPUYoNzEzMjQpLE09YWUuYXNzZXJ0O2Z1bmN0aW9uIE8oeil7dGhpcy50d2lzdGVkPTEhPSgwfHouYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHx6LmEp'@;
put 'LHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxsZS5jYWxsKHRoaXMsImVkd2FyZHMiLHopLHRoaXMuYT1uZXcgeCh6LmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyB4KHouYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9'@;
put 'dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgeCh6LmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxNKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHx6LmMpfWZ1bmN0aW9uIFIoeixL'@;
put 'LEksayxFKXtsZS5CYXNlUG9pbnQuY2FsbCh0aGlzLHosInByb2plY3RpdmUiKSxudWxsPT09SyYmbnVsbD09PUkmJm51bGw9PT1rPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVy'@;
put 'byx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IHgoSywxNiksdGhpcy55PW5ldyB4KEksMTYpLHRoaXMuej1rP25ldyB4KGssMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1FJiZuZXcgeChFLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRo'@;
put 'aXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9u'@;
put 'ZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1tKE8sbGUpLGF0LmV4cG9ydHM9TyxPLnBy'@;
put 'b3RvdHlwZS5fbXVsQT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5tT25lQT9LLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoSyl9LE8ucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLm9uZUM/Szp0aGlzLmMucmVkTXVsKEspfSxPLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rp'@;
put 'b24oSyxJLGssRSl7cmV0dXJuIHRoaXMucG9pbnQoSyxJLGssRSl9LE8ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oSyxJKXsoSz1uZXcgeChLLDE2KSkucmVkfHwoSz1LLnRvUmVkKHRoaXMucmVkKSk7dmFyIGs9Sy5yZWRTcXIoKSxFPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRN'@;
put 'dWwoaykpLGo9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKGspKSxWPUUucmVkTXVsKGoucmVkSW52bSgpKSxCPVYucmVkU3FydCgpO2lmKDAhPT1CLnJlZFNxcigpLnJlZFN1YihWKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQg'@;
put 'cG9pbnQiKTt2YXIgWT1CLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihJJiYhWXx8IUkmJlkpJiYoQj1CLnJlZE5lZygpKSx0aGlzLnBvaW50KEssQil9LE8ucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oSyxJKXsoSz1uZXcgeChLLDE2KSkucmVkfHwoSz1LLnRvUmVkKHRoaXMucmVk'@;
put 'KSk7dmFyIGs9Sy5yZWRTcXIoKSxFPWsucmVkU3ViKHRoaXMuYzIpLGo9ay5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksVj1FLnJlZE11bChqLnJlZEludm0oKSk7aWYoMD09PVYuY21wKHRoaXMuemVybykpe2lmKEkpdGhyb3cgbmV3IEVycm9yKCJpbnZh'@;
put 'bGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLEspfXZhciBCPVYucmVkU3FydCgpO2lmKDAhPT1CLnJlZFNxcigpLnJlZFN1YihWKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gQi5mcm9tUmVkKCkuaXNPZGQoKSE9'@;
put 'PUkmJihCPUIucmVkTmVnKCkpLHRoaXMucG9pbnQoQixLKX0sTy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oSyl7aWYoSy5pc0luZmluaXR5KCkpcmV0dXJuITA7Sy5ub3JtYWxpemUoKTt2YXIgST1LLngucmVkU3FyKCksaz1LLnkucmVkU3FyKCksRT1JLnJlZE11bCh0aGlzLmEpLnJl'@;
put 'ZEFkZChrKSxqPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKEkpLnJlZE11bChrKSkpO3JldHVybiAwPT09RS5jbXAoail9LG0oUixsZS5CYXNlUG9pbnQpLE8ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oSyl7cmV0dXJuIFIuZnJvbUpTT04o'@;
put 'dGhpcyxLKX0sTy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oSyxJLGssRSl7cmV0dXJuIG5ldyBSKHRoaXMsSyxJLGssRSl9LFIuZnJvbUpTT049ZnVuY3Rpb24oSyxJKXtyZXR1cm4gbmV3IFIoSyxJWzBdLElbMV0sSVsyXSl9LFIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2'@;
put 'LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxSLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9u'@;
put 'KCl7dmFyIEs9dGhpcy54LnJlZFNxcigpLEk9dGhpcy55LnJlZFNxcigpLGs9dGhpcy56LnJlZFNxcigpO2s9ay5yZWRJQWRkKGspO3ZhciBFPXRoaXMuY3VydmUuX211bEEoSyksaj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihLKS5yZWRJU3ViKEkpLFY9RS5yZWRB'@;
put 'ZGQoSSksQj1WLnJlZFN1YihrKSxZPUUucmVkU3ViKEkpLFg9ai5yZWRNdWwoQiksVT1WLnJlZE11bChZKSxxPWoucmVkTXVsKFkpLGVlPUIucmVkTXVsKFYpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFgsVSxlZSxxKX0sUi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgRSxq'@;
put 'LFYsQixZLFgsSz10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksST10aGlzLngucmVkU3FyKCksaz10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgVT0oQj10aGlzLmN1cnZlLl9tdWxBKEkpKS5yZWRBZGQoayk7dGhpcy56T25lPyhFPUsucmVkU3ViKEkp'@;
put 'LnJlZFN1YihrKS5yZWRNdWwoVS5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxqPVUucmVkTXVsKEIucmVkU3ViKGspKSxWPVUucmVkU3FyKCkucmVkU3ViKFUpLnJlZFN1YihVKSk6KFk9dGhpcy56LnJlZFNxcigpLFg9VS5yZWRTdWIoWSkucmVkSVN1YihZKSxFPUsucmVkU3ViKEkpLnJlZElT'@;
put 'dWIoaykucmVkTXVsKFgpLGo9VS5yZWRNdWwoQi5yZWRTdWIoaykpLFY9VS5yZWRNdWwoWCkpfWVsc2UgQj1JLnJlZEFkZChrKSxZPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxYPUIucmVkU3ViKFkpLnJlZFN1YihZKSxFPXRoaXMuY3VydmUuX211bEMoSy5yZWRJU3ViKEIp'@;
put 'KS5yZWRNdWwoWCksaj10aGlzLmN1cnZlLl9tdWxDKEIpLnJlZE11bChJLnJlZElTdWIoaykpLFY9Qi5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoRSxqLFYpfSxSLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1'@;
put 'cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sUi5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbihLKXt2YXIgST10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKEsueS5yZWRTdWIoSy54KSksaz10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKEsueS5y'@;
put 'ZWRBZGQoSy54KSksRT10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChLLnQpLGo9dGhpcy56LnJlZE11bChLLnoucmVkQWRkKEsueikpLFY9ay5yZWRTdWIoSSksQj1qLnJlZFN1YihFKSxZPWoucmVkQWRkKEUpLFg9ay5yZWRBZGQoSSksVT1WLnJlZE11bChCKSxxPVkucmVk'@;
put 'TXVsKFgpLGVlPVYucmVkTXVsKFgpLHRlPUIucmVkTXVsKFkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUscSx0ZSxlZSl9LFIucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKEspe3ZhciBxLGVlLEk9dGhpcy56LnJlZE11bChLLnopLGs9SS5yZWRTcXIoKSxFPXRoaXMueC5yZWRNdWwo'@;
put 'Sy54KSxqPXRoaXMueS5yZWRNdWwoSy55KSxWPXRoaXMuY3VydmUuZC5yZWRNdWwoRSkucmVkTXVsKGopLEI9ay5yZWRTdWIoViksWT1rLnJlZEFkZChWKSxYPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoSy54LnJlZEFkZChLLnkpKS5yZWRJU3ViKEUpLnJlZElTdWIoaiksVT1JLnJl'@;
put 'ZE11bChCKS5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8ocT1JLnJlZE11bChZKS5yZWRNdWwoai5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShFKSkpLGVlPUIucmVkTXVsKFkpKToocT1JLnJlZE11bChZKS5yZWRNdWwoai5yZWRTdWIoRSkpLGVlPXRoaXMuY3VydmUuX211'@;
put 'bEMoQikucmVkTXVsKFkpKSx0aGlzLmN1cnZlLnBvaW50KFUscSxlZSl9LFIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/SzpLLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKEspOnRoaXMuX3Byb2pB'@;
put 'ZGQoSyl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5faGFzRG91YmxlcyhLKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLEspOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxLKX0sUi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKEssSSxrKXtyZXR1cm4g'@;
put 'dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEldLFtLLGtdLDIsITEpfSxSLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKEssSSxrKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEldLFtLLGtdLDIsITApfSxSLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rp'@;
put 'b24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIEs9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoSyksdGhpcy55PXRoaXMueS5yZWRNdWwoSyksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoSykpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0'@;
put 'aGlzLnpPbmU9ITAsdGhpc30sUi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxSLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'bm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sUi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LFIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzPT09S3x8MD09PXRoaXMuZ2V0WCgpLmNtcChL'@;
put 'LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoSy5nZXRZKCkpfSxSLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oSyl7dmFyIEk9Sy50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoSSkpcmV0dXJuITA7Zm9yKHZhciBrPUsuY2xvbmUo'@;
put 'KSxFPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihrLmlhZGQodGhpcy5jdXJ2ZS5uKSxrLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEkucmVkSUFkZChFKSwwPT09dGhpcy54LmNtcChJKSlyZXR1cm4hMH19LFIucHJvdG90eXBlLnRvUD1SLnByb3RvdHlw'@;
put 'ZS5ub3JtYWxpemUsUi5wcm90b3R5cGUubWl4ZWRBZGQ9Ui5wcm90b3R5cGUuYWRkfSw5MTMyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9SWU7YWUuYmFzZT1GKDcxMzI0KSxhZS5zaG9ydD1GKDg5OTk2KSxhZS5tb250PUYoMjkyNTMpLGFlLmVkd2FyZHM9RigyNzY2NSl9LDI5'@;
put 'MjUzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDY2Njk4KSxtPUYoNzEzMjQpLGxlPUYoNDY3NjcpO2Z1bmN0aW9uIE0oUil7bS5jYWxsKHRoaXMsIm1vbnQiLFIpLHRoaXMuYT1uZXcgYWUoUi5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBh'@;
put 'ZShSLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBhZSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBhZSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIE8o'@;
put 'Uix6LEspe20uQmFzZVBvaW50LmNhbGwodGhpcyxSLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgYWUoeiwxNiksdGhpcy56PW5ldyBhZShLLDE2KSx0aGlzLngucmVkfHwo'@;
put 'dGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfXgoTSxtKSxhdC5leHBvcnRzPU0sTS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7dmFyIEs9ei5ub3JtYWxpemUoKS54LEk9'@;
put 'Sy5yZWRTcXIoKSxrPUkucmVkTXVsKEspLnJlZEFkZChJLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoSyk7cmV0dXJuIDA9PT1rLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoayl9LHgoTyxtLkJhc2VQb2ludCksTS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oeixLKXtyZXR1cm4gdGhp'@;
put 'cy5wb2ludChsZS50b0FycmF5KHosSyksMSl9LE0ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHosSyl7cmV0dXJuIG5ldyBPKHRoaXMseixLKX0sTS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4gTy5mcm9tSlNPTih0aGlzLHopfSxPLnByb3RvdHlwZS5wcmVj'@;
put 'b21wdXRlPWZ1bmN0aW9uKCl7fSxPLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sTy5mcm9tSlNPTj1mdW5jdGlvbih6LEspe3JldHVybiBuZXcgTyh6LEtbMF0sS1sxXXx8ei5v'@;
put 'bmUpfSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygx'@;
put 'NiwyKSsiPiJ9LE8ucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxPLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgSz10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksaz10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3Fy'@;
put 'KCksRT1LLnJlZFN1YihrKSxqPUsucmVkTXVsKGspLFY9RS5yZWRNdWwoay5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEUpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoaixWKX0sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVk'@;
put 'IG9uIE1vbnRnb21lcnkgY3VydmUiKX0sTy5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbih6LEspe3ZhciBJPXRoaXMueC5yZWRBZGQodGhpcy56KSxrPXRoaXMueC5yZWRTdWIodGhpcy56KSxFPXoueC5yZWRBZGQoei56KSxWPXoueC5yZWRTdWIoei56KS5yZWRNdWwoSSksQj1FLnJlZE11'@;
put 'bChrKSxZPUsuei5yZWRNdWwoVi5yZWRBZGQoQikucmVkU3FyKCkpLFg9Sy54LnJlZE11bChWLnJlZElTdWIoQikucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFksWCl9LE8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtmb3IodmFyIEs9ei5jbG9uZSgpLEk9dGhpcyxrPXRo'@;
put 'aXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxqPVtdOzAhPT1LLmNtcG4oMCk7Sy5pdXNocm4oMSkpai5wdXNoKEsuYW5kbG4oMSkpO2Zvcih2YXIgVj1qLmxlbmd0aC0xO1Y+PTA7Vi0tKTA9PT1qW1ZdPyhJPUkuZGlmZkFkZChrLHRoaXMpLGs9ay5kYmwoKSk6KGs9SS5kaWZmQWRkKGssdGhp'@;
put 'cyksST1JLmRibCgpKTtyZXR1cm4ga30sTy5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sTy5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBv'@;
put 'cnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LE8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHope3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKHouZ2V0WCgpKX0sTy5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJ'@;
put 'bnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxPLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LDg5OTk2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0Njc2NykseD1GKDMxMzg3KSxt'@;
put 'PUYoNjY2OTgpLGxlPUYoNzEzMjQpLE09YWUuYXNzZXJ0O2Z1bmN0aW9uIE8oSyl7bGUuY2FsbCh0aGlzLCJzaG9ydCIsSyksdGhpcy5hPW5ldyB4KEsuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgeChLLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28u'@;
put 'cmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKEspLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5'@;
put 'KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIFIoSyxJLGssRSl7bGUuQmFzZVBvaW50LmNhbGwodGhpcyxLLCJhZmZpbmUiKSxudWxsPT09SSYmbnVsbD09PWs/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyB4KEksMTYp'@;
put 'LHRoaXMueT1uZXcgeChrLDE2KSxFJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55'@;
put 'LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIHooSyxJLGssRSl7bGUuQmFzZVBvaW50LmNhbGwodGhpcyxLLCJqYWNvYmlhbiIpLG51bGw9PT1JJiZudWxsPT09ayYmbnVsbD09PUU/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5v'@;
put 'bmUsdGhpcy56PW5ldyB4KDApKToodGhpcy54PW5ldyB4KEksMTYpLHRoaXMueT1uZXcgeChrLDE2KSx0aGlzLno9bmV3IHgoRSwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhp'@;
put 'cy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1tKE8sbGUpLGF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKEkpe2lmKHRo'@;
put 'aXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBrLEU7aWYoSS5iZXRhKWs9bmV3IHgoSS5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgaj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtrPShrPWpbMF0uY21wKGpbMV0pPDA/alswXTpq'@;
put 'WzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoSS5sYW1iZGEpRT1uZXcgeChJLmxhbWJkYSwxNik7ZWxzZXt2YXIgVj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChWWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoaykpP0U9VlswXTpNKDA9PT10aGlzLmcubXVsKEU9'@;
put 'VlsxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGspKSl9cmV0dXJue2JldGE6ayxsYW1iZGE6RSxiYXNpczpJLmJhc2lzP0kuYmFzaXMubWFwKGZ1bmN0aW9uKFkpe3JldHVybnthOm5ldyB4KFkuYSwxNiksYjpuZXcgeChZLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhFKX19fSxPLnBy'@;
put 'b3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKEkpe3ZhciBrPUk9PT10aGlzLnA/dGhpcy5yZWQ6eC5tb250KEkpLEU9bmV3IHgoMikudG9SZWQoaykucmVkSW52bSgpLGo9RS5yZWROZWcoKSxWPW5ldyB4KDMpLnRvUmVkKGspLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoRSk7cmV0'@;
put 'dXJuW2oucmVkQWRkKFYpLmZyb21SZWQoKSxqLnJlZFN1YihWKS5mcm9tUmVkKCldfSxPLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKEkpe2Zvcih2YXIgVSxxLGVlLHRlLG9lLHNlLGhlLGNlLEcsaz10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkv'@;
put 'MikpLEU9SSxqPXRoaXMubi5jbG9uZSgpLFY9bmV3IHgoMSksQj1uZXcgeCgwKSxZPW5ldyB4KDApLFg9bmV3IHgoMSksdWU9MDswIT09RS5jbXBuKDApOyl7dmFyIGI9ai5kaXYoRSk7Y2U9ai5zdWIoYi5tdWwoRSkpLEc9WS5zdWIoYi5tdWwoVikpO3ZhciBEPVguc3ViKGIubXVsKEIpKTtp'@;
put 'ZighZWUmJmNlLmNtcChrKTwwKVU9aGUubmVnKCkscT1WLGVlPWNlLm5lZygpLHRlPUc7ZWxzZSBpZihlZSYmMj09Kyt1ZSlicmVhaztoZT1jZSxqPUUsRT1jZSxZPVYsVj1HLFg9QixCPUR9b2U9Y2UubmVnKCksc2U9Rzt2YXIgSD1lZS5zcXIoKS5hZGQodGUuc3FyKCkpO3JldHVybiBvZS5z'@;
put 'cXIoKS5hZGQoc2Uuc3FyKCkpLmNtcChIKT49MCYmKG9lPVUsc2U9cSksZWUubmVnYXRpdmUmJihlZT1lZS5uZWcoKSx0ZT10ZS5uZWcoKSksb2UubmVnYXRpdmUmJihvZT1vZS5uZWcoKSxzZT1zZS5uZWcoKSksW3thOmVlLGI6dGV9LHthOm9lLGI6c2V9XX0sTy5wcm90b3R5cGUuX2VuZG9T'@;
put 'cGxpdD1mdW5jdGlvbihJKXt2YXIgaz10aGlzLmVuZG8uYmFzaXMsRT1rWzBdLGo9a1sxXSxWPWouYi5tdWwoSSkuZGl2Um91bmQodGhpcy5uKSxCPUUuYi5uZWcoKS5tdWwoSSkuZGl2Um91bmQodGhpcy5uKSxZPVYubXVsKEUuYSksWD1CLm11bChqLmEpLFU9Vi5tdWwoRS5iKSxxPUIubXVs'@;
put 'KGouYik7cmV0dXJue2sxOkkuc3ViKFkpLnN1YihYKSxrMjpVLmFkZChxKS5uZWcoKX19LE8ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oSSxrKXsoST1uZXcgeChJLDE2KSkucmVkfHwoST1JLnRvUmVkKHRoaXMucmVkKSk7dmFyIEU9SS5yZWRTcXIoKS5yZWRNdWwoSSkucmVkSUFk'@;
put 'ZChJLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksaj1FLnJlZFNxcnQoKTtpZigwIT09ai5yZWRTcXIoKS5yZWRTdWIoRSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIFY9ai5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oayYmIVZ8'@;
put 'fCFrJiZWKSYmKGo9ai5yZWROZWcoKSksdGhpcy5wb2ludChJLGopfSxPLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihJKXtpZihJLmluZilyZXR1cm4hMDt2YXIgaz1JLngsRT1JLnksaj10aGlzLmEucmVkTXVsKGspLFY9ay5yZWRTcXIoKS5yZWRNdWwoaykucmVkSUFkZChqKS5yZWRJ'@;
put 'QWRkKHRoaXMuYik7cmV0dXJuIDA9PT1FLnJlZFNxcigpLnJlZElTdWIoVikuY21wbigwKX0sTy5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKEksayxFKXtmb3IodmFyIGo9dGhpcy5fZW5kb1duYWZUMSxWPXRoaXMuX2VuZG9XbmFmVDIsQj0wO0I8SS5sZW5ndGg7QisrKXt2'@;
put 'YXIgWT10aGlzLl9lbmRvU3BsaXQoa1tCXSksWD1JW0JdLFU9WC5fZ2V0QmV0YSgpO1kuazEubmVnYXRpdmUmJihZLmsxLmluZWcoKSxYPVgubmVnKCEwKSksWS5rMi5uZWdhdGl2ZSYmKFkuazIuaW5lZygpLFU9VS5uZWcoITApKSxqWzIqQl09WCxqWzIqQisxXT1VLFZbMipCXT1ZLmsxLFZb'@;
put 'MipCKzFdPVkuazJ9Zm9yKHZhciBxPXRoaXMuX3duYWZNdWxBZGQoMSxqLFYsMipCLEUpLGVlPTA7ZWU8MipCO2VlKyspaltlZV09bnVsbCxWW2VlXT1udWxsO3JldHVybiBxfSxtKFIsbGUuQmFzZVBvaW50KSxPLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihJLGssRSl7cmV0dXJuIG5ldyBS'@;
put 'KHRoaXMsSSxrLEUpfSxPLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKEksayl7cmV0dXJuIFIuZnJvbUpTT04odGhpcyxJLGspfSxSLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIEk9dGhpcy5wcmVjb21wdXRlZDtpZihJJiZJ'@;
put 'LmJldGEpcmV0dXJuIEkuYmV0YTt2YXIgaz10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoSSl7dmFyIEU9dGhpcy5jdXJ2ZSxqPWZ1bmN0aW9uKFYpe3JldHVybiBFLnBvaW50KFYueC5yZWRNdWwoRS5lbmRvLmJldGEpLFYu'@;
put 'eSl9O0kuYmV0YT1rLGsucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6SS5uYWYmJnt3bmQ6SS5uYWYud25kLHBvaW50czpJLm5hZi5wb2ludHMubWFwKGopfSxkb3VibGVzOkkuZG91YmxlcyYme3N0ZXA6SS5kb3VibGVzLnN0ZXAscG9pbnRzOkkuZG91Ymxlcy5wb2ludHMubWFwKGopfX19'@;
put 'cmV0dXJuIGt9fSxSLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5z'@;
put 'dGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0'@;
put 'aGlzLnldfSxSLmZyb21KU09OPWZ1bmN0aW9uKEksayxFKXsic3RyaW5nIj09dHlwZW9mIGsmJihrPUpTT04ucGFyc2UoaykpO3ZhciBqPUkucG9pbnQoa1swXSxrWzFdLEUpO2lmKCFrWzJdKXJldHVybiBqO2Z1bmN0aW9uIFYoWSl7cmV0dXJuIEkucG9pbnQoWVswXSxZWzFdLEUpfXZhciBC'@;
put 'PWtbMl07cmV0dXJuIGoucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOkIuZG91YmxlcyYme3N0ZXA6Qi5kb3VibGVzLnN0ZXAscG9pbnRzOltqXS5jb25jYXQoQi5kb3VibGVzLnBvaW50cy5tYXAoVikpfSxuYWY6Qi5uYWYmJnt3bmQ6Qi5uYWYud25kLHBvaW50czpbal0uY29uY2F0'@;
put 'KEIubmFmLnBvaW50cy5tYXAoVikpfX0san0sUi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMu'@;
put 'eS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxSLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxSLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oSSl7aWYodGhpcy5pbmYpcmV0dXJuIEk7aWYoSS5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShJ'@;
put 'KSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKEkpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoSS54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBrPXRoaXMueS5yZWRTdWIoSS55KTswIT09ay5j'@;
put 'bXBuKDApJiYoaz1rLnJlZE11bCh0aGlzLngucmVkU3ViKEkueCkucmVkSW52bSgpKSk7dmFyIEU9ay5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihJLngpLGo9ay5yZWRNdWwodGhpcy54LnJlZFN1YihFKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50'@;
put 'KEUsail9LFIucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBJPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09SS5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGs9dGhpcy5jdXJ2ZS5hLEU9dGhpcy54'@;
put 'LnJlZFNxcigpLGo9SS5yZWRJbnZtKCksVj1FLnJlZEFkZChFKS5yZWRJQWRkKEUpLnJlZElBZGQoaykucmVkTXVsKGopLEI9Vi5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksWT1WLnJlZE11bCh0aGlzLngucmVkU3ViKEIpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJu'@;
put 'IHRoaXMuY3VydmUucG9pbnQoQixZKX0sUi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxSLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihJKXtyZXR1cm4g'@;
put 'ST1uZXcgeChJLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoSSk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxJKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtJXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0'@;
put 'aGlzLEkpfSxSLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oSSxrLEUpe3ZhciBqPVt0aGlzLGtdLFY9W0ksRV07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChqLFYpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxqLFYsMil9LFIucHJvdG90eXBl'@;
put 'LmptdWxBZGQ9ZnVuY3Rpb24oSSxrLEUpe3ZhciBqPVt0aGlzLGtdLFY9W0ksRV07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChqLFYsITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxqLFYsMiwhMCl9LFIucHJvdG90eXBlLmVxPWZ1bmN0aW9u'@;
put 'KEkpe3JldHVybiB0aGlzPT09SXx8dGhpcy5pbmY9PT1JLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcChJLngpJiYwPT09dGhpcy55LmNtcChJLnkpKX0sUi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEkpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBrPXRoaXMuY3VydmUucG9p'@;
put 'bnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoSSYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIEU9dGhpcy5wcmVjb21wdXRlZCxqPWZ1bmN0aW9uKFYpe3JldHVybiBWLm5lZygpfTtrLnByZWNvbXB1dGVkPXtuYWY6RS5uYWYmJnt3bmQ6RS5uYWYud25kLHBvaW50czpFLm5hZi5wb2ludHMu'@;
put 'bWFwKGopfSxkb3VibGVzOkUuZG91YmxlcyYme3N0ZXA6RS5kb3VibGVzLnN0ZXAscG9pbnRzOkUuZG91Ymxlcy5wb2ludHMubWFwKGopfX19cmV0dXJuIGt9LFIucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVs'@;
put 'bCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSl9LG0oeixsZS5CYXNlUG9pbnQpLE8ucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihJLGssRSl7cmV0dXJuIG5ldyB6KHRoaXMsSSxrLEUpfSx6LnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlz'@;
put 'LmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBJPXRoaXMuei5yZWRJbnZtKCksaz1JLnJlZFNxcigpLEU9dGhpcy54LnJlZE11bChrKSxqPXRoaXMueS5yZWRNdWwoaykucmVkTXVsKEkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEUsail9LHou'@;
put 'cHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LHoucHJvdG90eXBlLmFkZD1mdW5jdGlvbihJKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gSTtpZihJLmlzSW5maW5pdHkoKSlyZXR1cm4g'@;
put 'dGhpczt2YXIgaz1JLnoucmVkU3FyKCksRT10aGlzLnoucmVkU3FyKCksaj10aGlzLngucmVkTXVsKGspLFY9SS54LnJlZE11bChFKSxCPXRoaXMueS5yZWRNdWwoay5yZWRNdWwoSS56KSksWT1JLnkucmVkTXVsKEUucmVkTXVsKHRoaXMueikpLFg9ai5yZWRTdWIoViksVT1CLnJlZFN1YihZ'@;
put 'KTtpZigwPT09WC5jbXBuKDApKXJldHVybiAwIT09VS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBxPVgucmVkU3FyKCksZWU9cS5yZWRNdWwoWCksdGU9ai5yZWRNdWwocSksb2U9VS5yZWRTcXIoKS5yZWRJQWRkKGVlKS5yZWRJU3Vi'@;
put 'KHRlKS5yZWRJU3ViKHRlKSxzZT1VLnJlZE11bCh0ZS5yZWRJU3ViKG9lKSkucmVkSVN1YihCLnJlZE11bChlZSkpLGhlPXRoaXMuei5yZWRNdWwoSS56KS5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG9lLHNlLGhlKX0sei5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24o'@;
put 'SSl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIEkudG9KKCk7aWYoSS5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGs9dGhpcy56LnJlZFNxcigpLEU9dGhpcy54LGo9SS54LnJlZE11bChrKSxWPXRoaXMueSxCPUkueS5yZWRNdWwoaykucmVkTXVsKHRoaXMueiksWT1FLnJlZFN1'@;
put 'YihqKSxYPVYucmVkU3ViKEIpO2lmKDA9PT1ZLmNtcG4oMCkpcmV0dXJuIDAhPT1YLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIFU9WS5yZWRTcXIoKSxxPVUucmVkTXVsKFkpLGVlPUUucmVkTXVsKFUpLHRlPVgucmVkU3FyKCkucmVk'@;
put 'SUFkZChxKS5yZWRJU3ViKGVlKS5yZWRJU3ViKGVlKSxvZT1YLnJlZE11bChlZS5yZWRJU3ViKHRlKSkucmVkSVN1YihWLnJlZE11bChxKSksc2U9dGhpcy56LnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGUsb2Usc2UpfSx6LnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKEkp'@;
put 'e2lmKDA9PT1JKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFJKXJldHVybiB0aGlzLmRibCgpO3ZhciBrO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgRT10aGlzO2ZvcihrPTA7azxJO2srKylFPUUuZGJsKCk7cmV0'@;
put 'dXJuIEV9dmFyIGo9dGhpcy5jdXJ2ZS5hLFY9dGhpcy5jdXJ2ZS50aW52LEI9dGhpcy54LFk9dGhpcy55LFg9dGhpcy56LFU9WC5yZWRTcXIoKS5yZWRTcXIoKSxxPVkucmVkQWRkKFkpO2ZvcihrPTA7azxJO2srKyl7dmFyIGVlPUIucmVkU3FyKCksdGU9cS5yZWRTcXIoKSxvZT10ZS5yZWRT'@;
put 'cXIoKSxzZT1lZS5yZWRBZGQoZWUpLnJlZElBZGQoZWUpLnJlZElBZGQoai5yZWRNdWwoVSkpLGhlPUIucmVkTXVsKHRlKSx1ZT1zZS5yZWRTcXIoKS5yZWRJU3ViKGhlLnJlZEFkZChoZSkpLGNlPWhlLnJlZElTdWIodWUpLEc9c2UucmVkTXVsKGNlKTtHPUcucmVkSUFkZChHKS5yZWRJU3Vi'@;
put 'KG9lKTt2YXIgYj1xLnJlZE11bChYKTtrKzE8SSYmKFU9VS5yZWRNdWwob2UpKSxCPXVlLFg9YixxPUd9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEIscS5yZWRNdWwoViksWCl9LHoucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMu'@;
put 'Y3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LHoucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIEksayxFO2lmKHRoaXMuek9uZSl7dmFyIGo9dGhpcy54LnJlZFNxcigpLFY9dGhpcy55LnJl'@;
put 'ZFNxcigpLEI9Vi5yZWRTcXIoKSxZPXRoaXMueC5yZWRBZGQoVikucmVkU3FyKCkucmVkSVN1YihqKS5yZWRJU3ViKEIpO1k9WS5yZWRJQWRkKFkpO3ZhciBYPWoucmVkQWRkKGopLnJlZElBZGQoaiksVT1YLnJlZFNxcigpLnJlZElTdWIoWSkucmVkSVN1YihZKSxxPUIucmVkSUFkZChCKTtx'@;
put 'PShxPXEucmVkSUFkZChxKSkucmVkSUFkZChxKSxJPVUsaz1YLnJlZE11bChZLnJlZElTdWIoVSkpLnJlZElTdWIocSksRT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgZWU9dGhpcy54LnJlZFNxcigpLHRlPXRoaXMueS5yZWRTcXIoKSxvZT10ZS5yZWRTcXIoKSxzZT10aGlzLngu'@;
put 'cmVkQWRkKHRlKS5yZWRTcXIoKS5yZWRJU3ViKGVlKS5yZWRJU3ViKG9lKTtzZT1zZS5yZWRJQWRkKHNlKTt2YXIgaGU9ZWUucmVkQWRkKGVlKS5yZWRJQWRkKGVlKSx1ZT1oZS5yZWRTcXIoKSxjZT1vZS5yZWRJQWRkKG9lKTtjZT0oY2U9Y2UucmVkSUFkZChjZSkpLnJlZElBZGQoY2UpLEk9'@;
put 'dWUucmVkSVN1YihzZSkucmVkSVN1YihzZSksaz1oZS5yZWRNdWwoc2UucmVkSVN1YihJKSkucmVkSVN1YihjZSksRT0oRT10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQoRSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEksayxFKX0sei5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0'@;
put 'aW9uKCl7dmFyIEksayxFO2lmKHRoaXMuek9uZSl7dmFyIGo9dGhpcy54LnJlZFNxcigpLFY9dGhpcy55LnJlZFNxcigpLEI9Vi5yZWRTcXIoKSxZPXRoaXMueC5yZWRBZGQoVikucmVkU3FyKCkucmVkSVN1YihqKS5yZWRJU3ViKEIpO1k9WS5yZWRJQWRkKFkpO3ZhciBYPWoucmVkQWRkKGop'@;
put 'LnJlZElBZGQoaikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLFU9WC5yZWRTcXIoKS5yZWRJU3ViKFkpLnJlZElTdWIoWSk7ST1VO3ZhciBxPUIucmVkSUFkZChCKTtxPShxPXEucmVkSUFkZChxKSkucmVkSUFkZChxKSxrPVgucmVkTXVsKFkucmVkSVN1YihVKSkucmVkSVN1YihxKSxFPXRoaXMu'@;
put 'eS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBlZT10aGlzLnoucmVkU3FyKCksdGU9dGhpcy55LnJlZFNxcigpLG9lPXRoaXMueC5yZWRNdWwodGUpLHNlPXRoaXMueC5yZWRTdWIoZWUpLnJlZE11bCh0aGlzLngucmVkQWRkKGVlKSk7c2U9c2UucmVkQWRkKHNlKS5yZWRJQWRkKHNlKTt2YXIg'@;
put 'aGU9b2UucmVkSUFkZChvZSksdWU9KGhlPWhlLnJlZElBZGQoaGUpKS5yZWRBZGQoaGUpO0k9c2UucmVkU3FyKCkucmVkSVN1Yih1ZSksRT10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1Yih0ZSkucmVkSVN1YihlZSk7dmFyIGNlPXRlLnJlZFNxcigpO2NlPShjZT0oY2U9'@;
put 'Y2UucmVkSUFkZChjZSkpLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKSxrPXNlLnJlZE11bChoZS5yZWRJU3ViKEkpKS5yZWRJU3ViKGNlKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoSSxrLEUpfSx6LnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5jdXJ2ZS5hLGs9dGhp'@;
put 'cy54LEU9dGhpcy55LGo9dGhpcy56LFY9ai5yZWRTcXIoKS5yZWRTcXIoKSxCPWsucmVkU3FyKCksWT1FLnJlZFNxcigpLFg9Qi5yZWRBZGQoQikucmVkSUFkZChCKS5yZWRJQWRkKEkucmVkTXVsKFYpKSxVPWsucmVkQWRkKGspLHE9KFU9VS5yZWRJQWRkKFUpKS5yZWRNdWwoWSksZWU9WC5y'@;
put 'ZWRTcXIoKS5yZWRJU3ViKHEucmVkQWRkKHEpKSx0ZT1xLnJlZElTdWIoZWUpLG9lPVkucmVkU3FyKCk7b2U9KG9lPShvZT1vZS5yZWRJQWRkKG9lKSkucmVkSUFkZChvZSkpLnJlZElBZGQob2UpO3ZhciBzZT1YLnJlZE11bCh0ZSkucmVkSVN1YihvZSksaGU9RS5yZWRBZGQoRSkucmVkTXVs'@;
put 'KGopO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChlZSxzZSxoZSl9LHoucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIEk9dGhpcy54LnJlZFNxcigpLGs9dGhpcy55LnJlZFNxcigpLEU9dGhpcy56'@;
put 'LnJlZFNxcigpLGo9ay5yZWRTcXIoKSxWPUkucmVkQWRkKEkpLnJlZElBZGQoSSksQj1WLnJlZFNxcigpLFk9dGhpcy54LnJlZEFkZChrKS5yZWRTcXIoKS5yZWRJU3ViKEkpLnJlZElTdWIoaiksWD0oWT0oWT0oWT1ZLnJlZElBZGQoWSkpLnJlZEFkZChZKS5yZWRJQWRkKFkpKS5yZWRJU3Vi'@;
put 'KEIpKS5yZWRTcXIoKSxVPWoucmVkSUFkZChqKTtVPShVPShVPVUucmVkSUFkZChVKSkucmVkSUFkZChVKSkucmVkSUFkZChVKTt2YXIgcT1WLnJlZElBZGQoWSkucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFgpLnJlZElTdWIoVSksZWU9ay5yZWRNdWwocSk7ZWU9KGVlPWVlLnJlZElB'@;
put 'ZGQoZWUpKS5yZWRJQWRkKGVlKTt2YXIgdGU9dGhpcy54LnJlZE11bChYKS5yZWRJU3ViKGVlKTt0ZT0odGU9dGUucmVkSUFkZCh0ZSkpLnJlZElBZGQodGUpO3ZhciBvZT10aGlzLnkucmVkTXVsKHEucmVkTXVsKFUucmVkSVN1YihxKSkucmVkSVN1YihZLnJlZE11bChYKSkpO29lPShvZT0o'@;
put 'b2U9b2UucmVkSUFkZChvZSkpLnJlZElBZGQob2UpKS5yZWRJQWRkKG9lKTt2YXIgc2U9dGhpcy56LnJlZEFkZChZKS5yZWRTcXIoKS5yZWRJU3ViKEUpLnJlZElTdWIoWCk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRlLG9lLHNlKX0sei5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEksayl7'@;
put 'cmV0dXJuIEk9bmV3IHgoSSxrKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsSSl9LHoucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEkpe2lmKCJhZmZpbmUiPT09SS50eXBlKXJldHVybiB0aGlzLmVxKEkudG9KKCkpO2lmKHRoaXM9PT1JKXJldHVybiEwO3ZhciBrPXRoaXMuei5yZWRTcXIoKSxF'@;
put 'PUkuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChFKS5yZWRJU3ViKEkueC5yZWRNdWwoaykpLmNtcG4oMCkpcmV0dXJuITE7dmFyIGo9ay5yZWRNdWwodGhpcy56KSxWPUUucmVkTXVsKEkueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKFYpLnJlZElTdWIoSS55LnJlZE11bChq'@;
put 'KSkuY21wbigwKX0sei5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEkpe3ZhciBrPXRoaXMuei5yZWRTcXIoKSxFPUkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChrKTtpZigwPT09dGhpcy54LmNtcChFKSlyZXR1cm4hMDtmb3IodmFyIGo9SS5jbG9uZSgpLFY9dGhpcy5jdXJ2ZS5y'@;
put 'ZWROLnJlZE11bChrKTs7KXtpZihqLmlhZGQodGhpcy5jdXJ2ZS5uKSxqLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEUucmVkSUFkZChWKSwwPT09dGhpcy54LmNtcChFKSlyZXR1cm4hMH19LHoucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0lu'@;
put 'ZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSx6LnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDgwNDk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciB6LGFlPUllLHg9Rig3MTA3NiksbT1GKDkxMzIpLE09Rig0Njc2NykuYXNzZXJ0O2Z1bmN0aW9uIE8oSyl7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09Sy50eXBlP25ldyBtLnNob3J0'@;
put 'KEspOiJlZHdhcmRzIj09PUsudHlwZT9uZXcgbS5lZHdhcmRzKEspOm5ldyBtLm1vbnQoSyksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD1LLmhhc2gsTSh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLE0odGhpcy5nLm11bCh0aGlz'@;
put 'Lm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5jdGlvbiBSKEssSSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFlLEsse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBrPW5ldyBPKEkpO3JldHVybiBPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoYWUsSyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6a30pLGt9fSl9YWUuUHJlc2V0Q3VydmU9TyxSKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAx'@;
put 'NDZiYzliMSBiNGQyMjgzMSIsaGFzaDp4LnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxSKCJwMjI0'@;
put 'Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6'@;
put 'ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDp4LnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNi'@;
put 'ZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxSKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZm'@;
put 'ZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNl'@;
put 'NyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6eC5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2Qx'@;
put 'ZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksUigicDM4NCIse3R5cGU6InNob3J0'@;
put 'IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQg'@;
put 'MmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOnguc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIy'@;
put 'IGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMg'@;
put 'YjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLFIoInA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5'@;
put 'MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNj'@;
put 'MDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIsaGFzaDp4LnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3'@;
put 'NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQw'@;
put 'IGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwIl19KSxSKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZm'@;
put 'ZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6eC5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksUigiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJw'@;
put 'MjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixu'@;
put 'OiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOnguc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2'@;
put 'NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7ej1GKDI3Mjc0KX1jYXRjaHt6PXZvaWQgMH1SKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDp4LnNoYTI1NixiZXRhOiI3'@;
put 'YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJj'@;
put 'ZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1'@;
put 'NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4Iix6XX0pfSw2NDQzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4'@;
put 'NykseD1GKDkyNDQ3KSxtPUYoNDY3NjcpLGxlPUYoODA0OSksTT1GKDYwMDgyKSxPPW0uYXNzZXJ0LFI9Rig5MTM3Myksej1GKDU3NzQ2KTtmdW5jdGlvbiBLKEkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEspKXJldHVybiBuZXcgSyhJKTsic3RyaW5nIj09dHlwZW9mIEkmJihPKE9iamVjdC5w'@;
put 'cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsZSxJKSwiVW5rbm93biBjdXJ2ZSAiK0kpLEk9bGVbSV0pLEkgaW5zdGFuY2VvZiBsZS5QcmVzZXRDdXJ2ZSYmKEk9e2N1cnZlOkl9KSx0aGlzLmN1cnZlPUkuY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMu'@;
put 'bi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1JLmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUoSS5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1JLmhhc2h8fEkuY3VydmUuaGFzaH1hdC5leHBvcnRzPUssSy5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihr'@;
put 'KXtyZXR1cm4gbmV3IFIodGhpcyxrKX0sSy5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gUi5mcm9tUHJpdmF0ZSh0aGlzLGssRSl9LEsucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oayxFKXtyZXR1cm4gUi5mcm9tUHVibGljKHRoaXMsayxF'@;
put 'KX0sSy5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihrKXtrfHwoaz17fSk7Zm9yKHZhciBFPW5ldyB4KHtoYXNoOnRoaXMuaGFzaCxwZXJzOmsucGVycyxwZXJzRW5jOmsucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6ay5lbnRyb3B5fHxNKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVu'@;
put 'dHJvcHlFbmM6ay5lbnRyb3B5JiZrLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSksaj10aGlzLm4uYnl0ZUxlbmd0aCgpLFY9dGhpcy5uLnN1YihuZXcgYWUoMikpOzspe3ZhciBCPW5ldyBhZShFLmdlbmVyYXRlKGopKTtpZighKEIuY21wKFYpPjApKXJldHVy'@;
put 'biBCLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoQil9fSxLLnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oayxFKXt2YXIgaj04KmsuYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gaj4wJiYoaz1rLnVzaHJuKGopKSwhRSYmay5jbXAodGhpcy5uKT49'@;
put 'MD9rLnN1Yih0aGlzLm4pOmt9LEsucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oayxFLGosVil7Im9iamVjdCI9PXR5cGVvZiBqJiYoVj1qLGo9bnVsbCksVnx8KFY9e30pLEU9dGhpcy5rZXlGcm9tUHJpdmF0ZShFLGopLGs9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGFlKGssMTYpKTtmb3IodmFy'@;
put 'IEI9dGhpcy5uLmJ5dGVMZW5ndGgoKSxZPUUuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIixCKSxYPWsudG9BcnJheSgiYmUiLEIpLFU9bmV3IHgoe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6WSxub25jZTpYLHBlcnM6Vi5wZXJzLHBlcnNFbmM6Vi5wZXJzRW5jfHwidXRmOCJ9KSxxPXRoaXMu'@;
put 'bi5zdWIobmV3IGFlKDEpKSxlZT0wOztlZSsrKXt2YXIgdGU9Vi5rP1YuayhlZSk6bmV3IGFlKFUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKHRlPXRoaXMuX3RydW5jYXRlVG9OKHRlLCEwKSkuY21wbigxKTw9MHx8dGUuY21wKHEpPj0wKSl7dmFyIG9lPXRoaXMuZy5t'@;
put 'dWwodGUpO2lmKCFvZS5pc0luZmluaXR5KCkpe3ZhciBzZT1vZS5nZXRYKCksaGU9c2UudW1vZCh0aGlzLm4pO2lmKDAhPT1oZS5jbXBuKDApKXt2YXIgdWU9dGUuaW52bSh0aGlzLm4pLm11bChoZS5tdWwoRS5nZXRQcml2YXRlKCkpLmlhZGQoaykpO2lmKDAhPT0odWU9dWUudW1vZCh0aGlz'@;
put 'Lm4pKS5jbXBuKDApKXt2YXIgY2U9KG9lLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1zZS5jbXAoaGUpPzI6MCk7cmV0dXJuIFYuY2Fub25pY2FsJiZ1ZS5jbXAodGhpcy5uaCk+MCYmKHVlPXRoaXMubi5zdWIodWUpLGNlXj0xKSxuZXcgeih7cjpoZSxzOnVlLHJlY292ZXJ5UGFyYW06Y2V9'@;
put 'KX19fX19fSxLLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oayxFLGosVil7az10aGlzLl90cnVuY2F0ZVRvTihuZXcgYWUoaywxNikpLGo9dGhpcy5rZXlGcm9tUHVibGljKGosVik7dmFyIEI9KEU9bmV3IHooRSwiaGV4IikpLnIsWT1FLnM7aWYoQi5jbXBuKDEpPDB8fEIuY21wKHRoaXMu'@;
put 'bik+PTB8fFkuY21wbigxKTwwfHxZLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBlZSxYPVkuaW52bSh0aGlzLm4pLFU9WC5tdWwoaykudW1vZCh0aGlzLm4pLHE9WC5tdWwoQikudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShlZT10aGlzLmcuam11'@;
put 'bEFkZChVLGouZ2V0UHVibGljKCkscSkpLmlzSW5maW5pdHkoKSYmZWUuZXFYVG9QKEIpOiEoZWU9dGhpcy5nLm11bEFkZChVLGouZ2V0UHVibGljKCkscSkpLmlzSW5maW5pdHkoKSYmMD09PWVlLmdldFgoKS51bW9kKHRoaXMubikuY21wKEIpfSxLLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5'@;
put 'PWZ1bmN0aW9uKEksayxFLGope08oKDMmRSk9PT1FLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksaz1uZXcgeihrLGopO3ZhciBWPXRoaXMubixCPW5ldyBhZShJKSxZPWsucixYPWsucyxVPTEmRSxxPUU+PjE7aWYoWS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2Qo'@;
put 'dGhpcy5jdXJ2ZS5uKSk+PTAmJnEpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtZPXRoaXMuY3VydmUucG9pbnRGcm9tWChxP1kuYWRkKHRoaXMuY3VydmUubik6WSxVKTt2YXIgZWU9ay5yLmludm0oViksdGU9Vi5zdWIoQikubXVsKGVl'@;
put 'KS51bW9kKFYpLG9lPVgubXVsKGVlKS51bW9kKFYpO3JldHVybiB0aGlzLmcubXVsQWRkKHRlLFksb2UpfSxLLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKEksayxFLGope2lmKG51bGwhPT0oaz1uZXcgeihrLGopKS5yZWNvdmVyeVBhcmFtKXJldHVybiBrLnJlY292'@;
put 'ZXJ5UGFyYW07Zm9yKHZhciBWPTA7Vjw0O1YrKyl7dmFyIEI7dHJ5e0I9dGhpcy5yZWNvdmVyUHViS2V5KEksayxWKX1jYXRjaHtjb250aW51ZX1pZihCLmVxKEUpKXJldHVybiBWfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSw5MTM3'@;
put 'MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLG09Rig0Njc2NykuYXNzZXJ0O2Z1bmN0aW9uIGxlKE0sTyl7dGhpcy5lYz1NLHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsTy5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKE8ucHJpdixPLnByaXZFbmMpLE8u'@;
put 'cHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoTy5wdWIsTy5wdWJFbmMpfWF0LmV4cG9ydHM9bGUsbGUuZnJvbVB1YmxpYz1mdW5jdGlvbihPLFIseil7cmV0dXJuIFIgaW5zdGFuY2VvZiBsZT9SOm5ldyBsZShPLHtwdWI6UixwdWJFbmM6en0pfSxsZS5mcm9tUHJpdmF0ZT1mdW5jdGlvbihPLFIs'@;
put 'eil7cmV0dXJuIFIgaW5zdGFuY2VvZiBsZT9SOm5ldyBsZShPLHtwcml2OlIscHJpdkVuYzp6fSl9LGxlLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBPPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIE8uaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1'@;
put 'YmxpYyBrZXkifTpPLnZhbGlkYXRlKCk/Ty5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBw'@;
put 'b2ludCJ9fSxsZS5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKE8sUil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBPJiYoUj1PLE89bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLFI/dGhpcy5wdWIuZW5jb2RlKFIsTyk6dGhpcy5wdWJ9LGxl'@;
put 'LnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKE8pe3JldHVybiJoZXgiPT09Tz90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxsZS5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oTyxSKXt0aGlzLnByaXY9bmV3IGFlKE8sUnx8MTYpLHRoaXMucHJpdj10'@;
put 'aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxsZS5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihPLFIpe2lmKE8ueHx8Ty55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9tKE8ueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMu'@;
put 'Y3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmbShPLngmJk8ueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChPLngsTy55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2lu'@;
put 'dChPLFIpfSxsZS5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKE8pe3JldHVybiBPLnZhbGlkYXRlKCl8fG0oTy52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLE8ubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxsZS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihPLFIseil7'@;
put 'cmV0dXJuIHRoaXMuZWMuc2lnbihPLHRoaXMsUix6KX0sbGUucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihPLFIpe3JldHVybiB0aGlzLmVjLnZlcmlmeShPLFIsdGhpcyl9LGxlLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0'@;
put 'aGlzLnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNTc3NDY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSx4PUYoNDY3NjcpLG09eC5hc3NlcnQ7ZnVuY3Rpb24gbGUoSyxJKXtpZihLIGlu'@;
put 'c3RhbmNlb2YgbGUpcmV0dXJuIEs7dGhpcy5faW1wb3J0REVSKEssSSl8fChtKEsuciYmSy5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IGFlKEsuciwxNiksdGhpcy5zPW5ldyBhZShLLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1LLnJlY292ZXJ5'@;
put 'UGFyYW0/bnVsbDpLLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIE0oKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gTyhLLEkpe3ZhciBrPUtbSS5wbGFjZSsrXTtpZighKDEyOCZrKSlyZXR1cm4gazt2YXIgRT0xNSZrO2lmKDA9PT1FfHxFPjQpcmV0dXJuITE7Zm9yKHZhciBqPTAsVj0wLEI9SS5w'@;
put 'bGFjZTtWPEU7VisrLEIrKylqPDw9OCxqfD1LW0JdLGo+Pj49MDtyZXR1cm4hKGo8PTEyNykmJihJLnBsYWNlPUIsail9ZnVuY3Rpb24gUihLKXtmb3IodmFyIEk9MCxrPUsubGVuZ3RoLTE7IUtbSV0mJiEoMTI4JktbSSsxXSkmJkk8azspSSsrO3JldHVybiAwPT09ST9LOksuc2xpY2UoSSl9'@;
put 'ZnVuY3Rpb24geihLLEkpe2lmKEk8MTI4KUsucHVzaChJKTtlbHNle3ZhciBrPTErKE1hdGgubG9nKEkpL01hdGguTE4yPj4+Myk7Zm9yKEsucHVzaCgxMjh8ayk7LS1rOylLLnB1c2goST4+PihrPDwzKSYyNTUpO0sucHVzaChJKX19YXQuZXhwb3J0cz1sZSxsZS5wcm90b3R5cGUuX2ltcG9y'@;
put 'dERFUj1mdW5jdGlvbihJLGspe0k9eC50b0FycmF5KEksayk7dmFyIEU9bmV3IE07aWYoNDghPT1JW0UucGxhY2UrK10pcmV0dXJuITE7dmFyIGo9TyhJLEUpO2lmKCExPT09anx8aitFLnBsYWNlIT09SS5sZW5ndGh8fDIhPT1JW0UucGxhY2UrK10pcmV0dXJuITE7dmFyIFY9TyhJLEUpO2lm'@;
put 'KCExPT09VilyZXR1cm4hMTt2YXIgQj1JLnNsaWNlKEUucGxhY2UsVitFLnBsYWNlKTtpZihFLnBsYWNlKz1WLDIhPT1JW0UucGxhY2UrK10pcmV0dXJuITE7dmFyIFk9TyhJLEUpO2lmKCExPT09WXx8SS5sZW5ndGghPT1ZK0UucGxhY2UpcmV0dXJuITE7dmFyIFg9SS5zbGljZShFLnBsYWNl'@;
put 'LFkrRS5wbGFjZSk7aWYoMD09PUJbMF0pe2lmKCEoMTI4JkJbMV0pKXJldHVybiExO0I9Qi5zbGljZSgxKX1pZigwPT09WFswXSl7aWYoISgxMjgmWFsxXSkpcmV0dXJuITE7WD1YLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3IGFlKEIpLHRoaXMucz1uZXcgYWUoWCksdGhpcy5yZWNvdmVy'@;
put 'eVBhcmFtPW51bGwsITB9LGxlLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihJKXt2YXIgaz10aGlzLnIudG9BcnJheSgpLEU9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JmtbMF0mJihrPVswXS5jb25jYXQoaykpLDEyOCZFWzBdJiYoRT1bMF0uY29uY2F0KEUpKSxrPVIoayksRT1SKEUpOyEo'@;
put 'RVswXXx8MTI4JkVbMV0pOylFPUUuc2xpY2UoMSk7dmFyIGo9WzJdO3ooaixrLmxlbmd0aCksKGo9ai5jb25jYXQoaykpLnB1c2goMikseihqLEUubGVuZ3RoKTt2YXIgVj1qLmNvbmNhdChFKSxCPVs0OF07cmV0dXJuIHooQixWLmxlbmd0aCksQj1CLmNvbmNhdChWKSx4LmVuY29kZShCLEkp'@;
put 'fX0sOTk1Nzc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDcxMDc2KSx4PUYoODA0OSksbT1GKDQ2NzY3KSxsZT1tLmFzc2VydCxNPW0ucGFyc2VCeXRlcyxPPUYoMTcwMTIpLFI9Rig3ODA2Mik7ZnVuY3Rpb24geihLKXtpZihsZSgiZWQyNTUxOSI9PT1LLCJvbmx5IHRlc3Rl'@;
put 'ZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KEspO3RoaXMuY3VydmU9Sz14W0tdLmN1cnZlLHRoaXMuZz1LLmcsdGhpcy5nLnByZWNvbXB1dGUoSy5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1LLnBvaW50KCkuY29uc3Ry'@;
put 'dWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoSy5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1hZS5zaGE1MTJ9YXQuZXhwb3J0cz16LHoucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oSSxrKXtJPU0oSSk7dmFyIEU9dGhpcy5rZXlGcm9tU2VjcmV0KGspLGo9dGhpcy5oYXNo'@;
put 'SW50KEUubWVzc2FnZVByZWZpeCgpLEkpLFY9dGhpcy5nLm11bChqKSxCPXRoaXMuZW5jb2RlUG9pbnQoViksWT10aGlzLmhhc2hJbnQoQixFLnB1YkJ5dGVzKCksSSkubXVsKEUucHJpdigpKSxYPWouYWRkKFkpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJl'@;
put 'KHtSOlYsUzpYLFJlbmNvZGVkOkJ9KX0sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEksayxFKXtJPU0oSSksaz10aGlzLm1ha2VTaWduYXR1cmUoayk7dmFyIGo9dGhpcy5rZXlGcm9tUHVibGljKEUpLFY9dGhpcy5oYXNoSW50KGsuUmVuY29kZWQoKSxqLnB1YkJ5dGVzKCksSSksQj10'@;
put 'aGlzLmcubXVsKGsuUygpKTtyZXR1cm4gay5SKCkuYWRkKGoucHViKCkubXVsKFYpKS5lcShCKX0sei5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgST10aGlzLmhhc2goKSxrPTA7azxhcmd1bWVudHMubGVuZ3RoO2srKylJLnVwZGF0ZShhcmd1bWVudHNba10pO3JldHVy'@;
put 'biBtLmludEZyb21MRShJLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LHoucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oSSl7cmV0dXJuIE8uZnJvbVB1YmxpYyh0aGlzLEkpfSx6LnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKEkpe3JldHVybiBPLmZyb21T'@;
put 'ZWNyZXQodGhpcyxJKX0sei5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIFI/STpuZXcgUih0aGlzLEkpfSx6LnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihJKXt2YXIgaz1JLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNv'@;
put 'ZGluZ0xlbmd0aCk7cmV0dXJuIGtbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9SS5nZXRYKCkuaXNPZGQoKT8xMjg6MCxrfSx6LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihJKXt2YXIgaz0oST1tLnBhcnNlQnl0ZXMoSSkpLmxlbmd0aC0xLEU9SS5zbGljZSgwLGspLmNvbmNhdCgt'@;
put 'MTI5Jklba10pLGo9MCE9KDEyOCZJW2tdKSxWPW0uaW50RnJvbUxFKEUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoVixqKX0sei5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKEkpe3JldHVybiBJLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sei5wcm90b3R5'@;
put 'cGUuZGVjb2RlSW50PWZ1bmN0aW9uKEkpe3JldHVybiBtLmludEZyb21MRShJKX0sei5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDE3MDEyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0Njc2Nyks'@;
put 'eD1hZS5hc3NlcnQsbT1hZS5wYXJzZUJ5dGVzLGxlPWFlLmNhY2hlZFByb3BlcnR5O2Z1bmN0aW9uIE0oTyxSKXt0aGlzLmVkZHNhPU8sdGhpcy5fc2VjcmV0PW0oUi5zZWNyZXQpLE8uaXNQb2ludChSLnB1Yik/dGhpcy5fcHViPVIucHViOnRoaXMuX3B1YkJ5dGVzPW0oUi5wdWIpfU0uZnJv'@;
put 'bVB1YmxpYz1mdW5jdGlvbihSLHope3JldHVybiB6IGluc3RhbmNlb2YgTT96Om5ldyBNKFIse3B1Yjp6fSl9LE0uZnJvbVNlY3JldD1mdW5jdGlvbihSLHope3JldHVybiB6IGluc3RhbmNlb2YgTT96Om5ldyBNKFIse3NlY3JldDp6fSl9LE0ucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLl9zZWNyZXR9LGxlKE0sInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksbGUoTSwicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMu'@;
put 'X3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLGxlKE0sInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgUj10aGlzLmVkZHNhLHo9dGhpcy5oYXNoKCksSz1SLmVuY29kaW5nTGVuZ3RoLTEsST16LnNsaWNlKDAsUi5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIElbMF0m'@;
put 'PTI0OCxJW0tdJj0xMjcsSVtLXXw9NjQsSX0pLGxlKE0sInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksbGUoTSwiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0'@;
put 'KCkpLmRpZ2VzdCgpfSksbGUoTSwibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxNLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFIpe3JldHVybiB4KHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4g'@;
put 'b25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24oUix0aGlzKX0sTS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFIseil7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KFIseix0aGlzKX0sTS5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKFIpe3JldHVybiB4KHRoaXMuX3NlY3JldCwi'@;
put 'S2V5UGFpciBpcyBwdWJsaWMgb25seSIpLGFlLmVuY29kZSh0aGlzLnNlY3JldCgpLFIpfSxNLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oUil7cmV0dXJuIGFlLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksUil9LGF0LmV4cG9ydHM9TX0sNzgwNjI6KGF0LEllLEYpPT57InVzZSBzdHJp'@;
put 'Y3QiO3ZhciBhZT1GKDMxMzg3KSx4PUYoNDY3NjcpLG09eC5hc3NlcnQsbGU9eC5jYWNoZWRQcm9wZXJ0eSxNPXgucGFyc2VCeXRlcztmdW5jdGlvbiBPKFIseil7dGhpcy5lZGRzYT1SLCJvYmplY3QiIT10eXBlb2YgeiYmKHo9TSh6KSksQXJyYXkuaXNBcnJheSh6KSYmKHo9e1I6ei5zbGlj'@;
put 'ZSgwLFIuZW5jb2RpbmdMZW5ndGgpLFM6ei5zbGljZShSLmVuY29kaW5nTGVuZ3RoKX0pLG0oei5SJiZ6LlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLFIuaXNQb2ludCh6LlIpJiYodGhpcy5fUj16LlIpLHouUyBpbnN0YW5jZW9mIGFlJiYodGhpcy5fUz16LlMpLHRoaXMuX1JlbmNv'@;
put 'ZGVkPUFycmF5LmlzQXJyYXkoei5SKT96LlI6ei5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KHouUyk/ei5TOnouU2VuY29kZWR9bGUoTywiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLGxlKE8sIlIiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLGxlKE8sIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLGxlKE8sIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'LmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxPLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sTy5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4geC5lbmNvZGUodGhpcy50b0J5dGVz'@;
put 'KCksImhleCIpLnRvVXBwZXJDYXNlKCl9LGF0LmV4cG9ydHM9T30sMjcyNzQ6YXQ9PnthdC5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5'@;
put 'ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNh'@;
put 'YzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxb'@;
put 'IjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2'@;
put 'Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUy'@;
put 'MzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVl'@;
put 'N2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMw'@;
put 'ZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0'@;
put 'NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1'@;
put 'N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwi'@;
put 'NWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1'@;
put 'MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0'@;
put 'MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJh'@;
put 'MjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3'@;
put 'NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRj'@;
put 'YjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIz'@;
put 'ODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsi'@;
put 'ZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNl'@;
put 'MDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4'@;
put 'ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2'@;
put 'NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJi'@;
put 'NGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0'@;
put 'OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3'@;
put 'MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwi'@;
put 'ZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQw'@;
put 'ZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2'@;
put 'ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZm'@;
put 'OTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3'@;
put 'MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBm'@;
put 'YTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZk'@;
put 'NDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsi'@;
put 'MzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVl'@;
put 'NWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFm'@;
put 'OThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEy'@;
put 'ZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4'@;
put 'YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3'@;
put 'YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkw'@;
put 'N2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkz'@;
put 'ZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4'@;
put 'N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFk'@;
put 'OTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYw'@;
put 'ZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlk'@;
put 'ZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3'@;
put 'ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlk'@;
put 'Mjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIx'@;
put 'NzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThj'@;
put 'ZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4'@;
put 'MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZk'@;
put 'ZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZk'@;
put 'NjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3'@;
put 'MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUz'@;
put 'MGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIw'@;
put 'ZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNh'@;
put 'OTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2Jm'@;
put 'YzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsi'@;
put 'MmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3'@;
put 'YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZj'@;
put 'MjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQz'@;
put 'ZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5'@;
put 'YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2Ri'@;
put 'Njc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2Zl'@;
put 'YmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIz'@;
put 'MjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4'@;
put 'MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2Ni'@;
put 'MzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNm'@;
put 'MjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNi'@;
put 'NjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4'@;
put 'MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0'@;
put 'ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4'@;
put 'MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRk'@;
put 'MzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMz'@;
put 'ZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFi'@;
put 'MDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThl'@;
put 'YjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2'@;
put 'MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0'@;
put 'MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0'@;
put 'NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVk'@;
put 'NWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1Yjlj'@;
put 'NjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5'@;
put 'YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0'@;
put 'N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZj'@;
put 'Y2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3'@;
put 'YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYz'@;
put 'YzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5'@;
put 'MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFi'@;
put 'ZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJj'@;
put 'ODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0'@;
put 'OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3'@;
put 'NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIy'@;
put 'NWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIz'@;
put 'NzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNh'@;
put 'ODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVl'@;
put 'YTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIx'@;
put 'MzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3'@;
put 'Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFm'@;
put 'MDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4'@;
put 'NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdi'@;
put 'ODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVl'@;
put 'YWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0'@;
put 'N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdl'@;
put 'MGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2'@;
put 'Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFj'@;
put 'MTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdh'@;
put 'NmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRi'@;
put 'NWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1'@;
put 'Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0'@;
put 'Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5Zjhh'@;
put 'OTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3'@;
put 'YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEw'@;
put 'NDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMw'@;
put 'MTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlm'@;
put 'YmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1'@;
put 'OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIs'@;
put 'ImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBm'@;
put 'MWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4'@;
put 'YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNj'@;
put 'NTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAy'@;
put 'MDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNk'@;
put 'NDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5'@;
put 'ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxb'@;
put 'ImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2Nj'@;
put 'OTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBi'@;
put 'OTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3'@;
put 'ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdm'@;
put 'ZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgy'@;
put 'Yzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2Fk'@;
put 'YjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4'@;
put 'ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcy'@;
put 'NmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEy'@;
put 'MDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjEx'@;
put 'NjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQz'@;
put 'NmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4'@;
put 'ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4'@;
put 'YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxb'@;
put 'ImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJk'@;
put 'Yzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5'@;
put 'M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZi'@;
put 'YWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRl'@;
put 'OTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3'@;
put 'NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3'@;
put 'YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJl'@;
put 'ZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmVi'@;
put 'MGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVk'@;
put 'ZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBm'@;
put 'ODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYx'@;
put 'YzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4'@;
put 'ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1'@;
put 'ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsi'@;
put 'OTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRm'@;
put 'YjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQx'@;
put 'YTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEw'@;
put 'ZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhi'@;
put 'Nzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1'@;
put 'Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0'@;
put 'MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3Iiwi'@;
put 'NzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQz'@;
put 'YzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZh'@;
put 'NmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0'@;
put 'NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSw0Njc2NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUllLHg9Rigz'@;
put 'MTM4NyksbT1GKDU3Nzk4KSxsZT1GKDc4MjQ3KTthZS5hc3NlcnQ9bSxhZS50b0FycmF5PWxlLnRvQXJyYXksYWUuemVybzI9bGUuemVybzIsYWUudG9IZXg9bGUudG9IZXgsYWUuZW5jb2RlPWxlLmVuY29kZSxhZS5nZXROQUY9ZnVuY3Rpb24gTShJLGssRSl7dmFyIGo9bmV3IEFycmF5KE1h'@;
put 'dGgubWF4KEkuYml0TGVuZ3RoKCksRSkrMSk7ai5maWxsKDApO2Zvcih2YXIgVj0xPDxrKzEsQj1JLmNsb25lKCksWT0wO1k8ai5sZW5ndGg7WSsrKXt2YXIgWCxVPUIuYW5kbG4oVi0xKTtCLmlzT2RkKCk/Qi5pc3VibihYPVU+KFY+PjEpLTE/KFY+PjEpLVU6VSk6WD0wLGpbWV09WCxCLml1'@;
put 'c2hybigxKX1yZXR1cm4gan0sYWUuZ2V0SlNGPWZ1bmN0aW9uIE8oSSxrKXt2YXIgRT1bW10sW11dO0k9SS5jbG9uZSgpLGs9ay5jbG9uZSgpO2Zvcih2YXIgQixqPTAsVj0wO0kuY21wbigtaik+MHx8ay5jbXBuKC1WKT4wOyl7dmFyIFUscSxZPUkuYW5kbG4oMykraiYzLFg9ay5hbmRsbigz'@;
put 'KStWJjM7Mz09PVkmJihZPS0xKSwzPT09WCYmKFg9LTEpLFU9MSZZPzMhPShCPUkuYW5kbG4oNykraiY3KSYmNSE9PUJ8fDIhPT1YP1k6LVk6MCxFWzBdLnB1c2goVSkscT0xJlg/MyE9KEI9ay5hbmRsbig3KStWJjcpJiY1IT09Qnx8MiE9PVk/WDotWDowLEVbMV0ucHVzaChxKSwyKmo9PT1V'@;
put 'KzEmJihqPTEtaiksMipWPT09cSsxJiYoVj0xLVYpLEkuaXVzaHJuKDEpLGsuaXVzaHJuKDEpfXJldHVybiBFfSxhZS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBSKEksayxFKXt2YXIgaj0iXyIraztJLnByb3RvdHlwZVtrXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW2pdP3Ro'@;
put 'aXNbal06dGhpc1tqXT1FLmNhbGwodGhpcyl9fSxhZS5wYXJzZUJ5dGVzPWZ1bmN0aW9uIHooSSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBJP2FlLnRvQXJyYXkoSSwiaGV4Iik6SX0sYWUuaW50RnJvbUxFPWZ1bmN0aW9uIEsoSSl7cmV0dXJuIG5ldyB4KEksImhleCIsImxlIil9fSwzMTM4'@;
put 'NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90'@;
put 'eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwh'@;
put 'PT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5'@;
put 'cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoODU1NjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gUihHLGIpe3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3OkQtNDgmMTV9ZnVuY3Rpb24geihHLGIs'@;
put 'RCl7dmFyIEg9UihHLEQpO3JldHVybiBELTE+PWImJihIfD1SKEcsRC0xKTw8NCksSH1mdW5jdGlvbiBLKEcsYixELEgpe2Zvcih2YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00ODtOKj1ILE4rPVM+PTQ5P1MtNDkrMTA6'@;
put 'Uz49MTc/Uy0xNysxMDpTfXJldHVybiBOfU0uaXNCTj1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIE18fG51bGwhPT1iJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGIud29yZHMpfSxNLm1heD1m'@;
put 'dW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKT4wP2I6RH0sTS5taW49ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk8MD9iOkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoYixELEgp'@;
put 'O2lmKCJvYmplY3QiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGIsRCxIKTsiaGV4Ij09PUQmJihEPTE2KSxtKEQ9PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihOKyssdGhpcy5uZWdh'@;
put 'dGl2ZT0xKSxOPGIubGVuZ3RoJiYoMTY9PT1EP3RoaXMuX3BhcnNlSGV4KGIsTixIKToodGhpcy5fcGFyc2VCYXNlKGIsRCxOKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oYixELEgpe2I8'@;
put 'MCYmKHRoaXMubmVnYXRpdmU9MSxiPS1iKSxiPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiXSx0aGlzLmxlbmd0aD0xKTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oYjw5MDA3'@;
put 'MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGIsRCxIKXtpZiht'@;
put 'KCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGgpLGIubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRo'@;
put 'aXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIGcsQyxTPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMSxnPTA7Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYt'@;
put 'UyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3IoTj0wLGc9MDtOPGIubGVuZ3RoO04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3'@;
put 'MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zv'@;
put 'cih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgUyxnPTAsQz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0x'@;
put 'XXw9Uz4+PjI2KTpnKz04O2Vsc2UgZm9yKE49KGIubGVuZ3RoLUQpJTI9PTA/RCsxOkQ7TjxiLmxlbmd0aDtOKz0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0s'@;
put 'TS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihiLEQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1DJU4sdj1NYXRoLm1pbihDLEMtUykrSCxw'@;
put 'PTAsdz1IO3c8djt3Kz1OKXA9SyhiLHcsdytOLEQpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgsRCksdz0wO3c8Uzt3KyspSio9RDt0aGlz'@;
put 'LmltdWxuKEopLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0'@;
put 'aDtEKyspYi53b3Jkc1tEXT10aGlzLndvcmRzW0RdO2IubGVuZ3RoPXRoaXMubGVuZ3RoLGIubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGIpLGJ9LE0u'@;
put 'cHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0'@;
put 'aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LE0ucHJvdG90eXBlLmluc3BlY3Q9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saz1bMCwwLDI1LDE2LDEy'@;
put 'LDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxFPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMx'@;
put 'ODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1'@;
put 'NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBOPTB8Ry53b3Jkc1swXSxnPTB8Yi53'@;
put 'b3Jkc1swXSxDPU4qZyx2PUMvNjcxMDg4NjR8MDtELndvcmRzWzBdPTY3MTA4ODYzJkM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7ZGU8PW5lO2Rl'@;
put 'Kyspdys9KEM9KE49MHxHLndvcmRzW3AtZGV8MF0pKihnPTB8Yi53b3Jkc1tkZV0pK0opLzY3MTA4ODY0fDAsSj02NzEwODg2MyZDO0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3RyaXAoKX1NLnByb3RvdHlwZS50b1N0cmlu'@;
put 'Zz1mdW5jdGlvbihiLEQpe3ZhciBIO2lmKEQ9MHxEfHwxLDE2PT09KGI9Ynx8MTApfHwiaGV4Ij09PWIpe0g9IiI7Zm9yKHZhciBOPTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8TnxnKSkudG9TdHJpbmcoMTYpO0g9MCE9'@;
put 'KGc9Uz4+PjI0LU4mMTY3NzcyMTUpfHxDIT09dGhpcy5sZW5ndGgtMT9JWzYtdi5sZW5ndGhdK3YrSDp2K0gsKE4rPTIpPj0yNiYmKE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2'@;
put 'ZSYmKEg9Ii0iK0gpLEh9aWYoYj09PSgwfGIpJiZiPj0yJiZiPD0zNil7dmFyIHA9a1tiXSx3PUVbYl07SD0iIjt2YXIgSj10aGlzLmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmcoYik7SD0oSj1KLmlkaXZuKHcpKS5pc1pl'@;
put 'cm8oKT9uZStIOklbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxNLnBy'@;
put 'b3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9iKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlz'@;
put 'LndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sTS5wcm90b3R5'@;
put 'cGUudG9CdWZmZXI9ZnVuY3Rpb24oYixEKXtyZXR1cm4gbSh0eXBlb2YgTzwidSIpLHRoaXMudG9BcnJheUxpa2UoTyxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixEKX0sTS5wcm90b3R5cGUudG9BcnJheUxp'@;
put 'a2U9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxOKTttKE48PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB2'@;
put 'LHAsQz0ibGUiPT09RCxTPW5ldyBiKGcpLHc9dGhpcy5jbG9uZSgpO2lmKEMpe2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGctTjtwKyspU1twXT0wO2ZvcihwPTA7IXcu'@;
put 'aXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbZy1wLTFdPXZ9cmV0dXJuIFN9LE0ucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24oYil7dmFyIEQ9YixIPTA7cmV0dXJuIEQ+'@;
put 'PTQwOTYmJihIKz0xMyxEPj4+PTEzKSxEPj02NCYmKEgrPTcsRD4+Pj03KSxEPj04JiYoSCs9NCxEPj4+PTQpLEQ+PTImJihIKz0yLEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2O3ZhciBEPWIsSD0wO3JldHVybiA4MTkx'@;
put 'JkR8fChIKz0xMyxEPj4+PTEzKSwxMjcmRHx8KEgrPTcsRD4+Pj03KSwxNSZEfHwoSCs9NCxEPj4+PTQpLDMmRHx8KEgrPTIsRD4+Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxl'@;
put 'bmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStEfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0Rd'@;
put 'KTtpZihiKz1ILDI2IT09SClicmVha31yZXR1cm4gYn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlz'@;
put 'LmFicygpLmlub3RuKGIpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxNLnByb3Rv'@;
put 'dHlwZS5pdW9yPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8Yi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tEXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxN'@;
put 'LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVvcihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoYik6Yi5jbG9uZSgp'@;
put 'Lmlvcih0aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7dmFyIEQ7RD10aGlzLmxlbmd0aD5iLmxl'@;
put 'bmd0aD9iOnRoaXM7Zm9yKHZhciBIPTA7SDxELmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJmIud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhp'@;
put 'cy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChiKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGIpOmIuY2xvbmUoKS5pdWFuZCh0aGlzKX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlzLEg9Yik6KEQ9YixIPXRoaXMpO2Zvcih2'@;
put 'YXIgTj0wO048SC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXV5ILndvcmRzW05dO2lmKHRoaXMhPT1EKWZvcig7TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90'@;
put 'eXBlLml4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoYil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoYik6Yi5jbG9uZSgpLml4'@;
put 'b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZi'@;
put 'Pj0wKTt2YXIgRD0wfE1hdGguY2VpbChiLzI2KSxIPWIlMjY7dGhpcy5fZXhwYW5kKEQpLEg+MCYmRC0tO2Zvcih2YXIgTj0wO048RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tOXT1+dGhpcy53b3Jkc1tOXSY2NzEw'@;
put 'ODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEg9Yi8yNnwwLE49YiUyNjty'@;
put 'ZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1EP3RoaXMud29yZHNbSF18MTw8Tjp0aGlzLndvcmRzW0hdJn4oMTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVn'@;
put 'YXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksYi5uZWdhdGl2ZT0xLEQu'@;
put 'X25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEg9dGhpcyxOPWIpOihIPWIsTj10aGlzKTtmb3IodmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtmb3IoOzAh'@;
put 'PT1nJiZDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pK2cpLGc9RD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7'@;
put 'QzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1ILndvcmRzW0NdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLEQ9dGhpcy5zdWIoYiksYi5uZWdhdGl2'@;
put 'ZV49MSxEKTowPT09Yi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxEPWIuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25lKCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5'@;
put 'cGUuaXN1Yj1mdW5jdGlvbihiKXtpZigwIT09Yi5uZWdhdGl2ZSl7Yi5uZWdhdGl2ZT0wO3ZhciBEPXRoaXMuaWFkZChiKTtyZXR1cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoYiksdGhp'@;
put 'cy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE4sZyxIPXRoaXMuY21wKGIpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIsZz10aGlzKTtmb3IodmFyIEM9MCxTPTA7'@;
put 'UzxnLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKS0oMHxnLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtpZigw'@;
put 'PT09QyYmUzxOLmxlbmd0aCYmTiE9PXRoaXMpZm9yKDtTPE4ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU4ud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90'@;
put 'eXBlLnN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoYil9O3ZhciBCPWZ1bmN0aW9uKGIsRCxIKXt2YXIgdixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+MTMsZmU9MHxOWzFdLHhlPTgxOTEmZmUs'@;
put 'TGU9ZmU+Pj4xMyxGZT0wfE5bMl0sT2U9ODE5MSZGZSxqZT1GZT4+PjEzLFdlPTB8TlszXSxLZT04MTkxJldlLFllPVdlPj4+MTMsSmU9MHxOWzRdLGx0PTgxOTEmSmUsUGU9SmU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8Tls2XSxYZT04MTkxJnFlLFVlPXFl'@;
put 'Pj4+MTMsaHQ9MHxOWzddLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfE5bOF0saXQ9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdbMV0sV249ODE5MSZibixlbj1ibj4+PjEz'@;
put 'LCRuPTB8Z1syXSxIbj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHxnWzNdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfGdbNF0sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8Z1s1XSxydD04MTkxJm1uLEl0PW1uPj4+MTMsSnQ9MHxnWzZdLER0PTgxOTEmSnQscHQ9SnQ+Pj4xMyxZdD0w'@;
put 'fGdbN10sSW49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8Z1s4XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHxnWzldLFJuPTgxOTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgUG49KFMrKHY9TWF0aC5pbXVsKG5lLENu'@;
put 'KSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxVdCkpK01hdGguaW11bChkZSxDbil8MCkpPDwxMyl8MDtTPSgodz1NYXRoLmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoUG4+Pj4yNil8MCxQbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUsQ24pLHA9KHA9TWF0aC5pbXVsKHhlLFV0'@;
put 'KSkrTWF0aC5pbXVsKExlLENuKXwwLHc9TWF0aC5pbXVsKExlLFV0KTt2YXIgbmk9KFMrKHY9ditNYXRoLmltdWwobmUsV24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGVu'@;
put 'KXwwKSsocD4+PjEzKXwwKSsobmk+Pj4yNil8MCxuaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoT2UsQ24pLHA9KHA9TWF0aC5pbXVsKE9lLFV0KSkrTWF0aC5pbXVsKGplLENuKXwwLHc9TWF0aC5pbXVsKGplLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUs'@;
put 'ZW4pfDApK01hdGguaW11bChMZSxXbil8MCx3PXcrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciBsbj0oUysodj12K01hdGguaW11bChuZSxIbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsSG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmlt'@;
put 'dWwoZGUsZnQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2Myx2PU1hdGguaW11bChLZSxDbikscD0ocD1NYXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmltdWwoT2UsV24pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGplLFduKXwwLHc9dytNYXRoLmltdWwoamUsZW4pfDAsdj12K01hdGguaW11bCh4ZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoTGUsSG4pfDAsdz13K01hdGguaW11bChMZSxmdCl8MDt2YXIgam49KFMrKHY9ditN'@;
put 'YXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx3dCl8MCkrTWF0aC5pbXVsKGRlLGhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwobHQs'@;
put 'Q24pLHA9KHA9TWF0aC5pbXVsKGx0LFV0KSkrTWF0aC5pbXVsKFBlLENuKXwwLHc9TWF0aC5pbXVsKFBlLFV0KSx2PXYrTWF0aC5pbXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0aC5pbXVsKFllLGVuKXwwLHY9ditNYXRo'@;
put 'LmltdWwoT2UsSG4pfDAscD0ocD1wK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKGplLEhuKXwwLHc9dytNYXRoLmltdWwoamUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTGUsaG4pfDAsdz13K01hdGguaW11'@;
put 'bChMZSx3dCl8MDt2YXIgcXI9KFMrKHY9ditNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxx'@;
put 'ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQWUsQ24pLHA9KHA9TWF0aC5pbXVsKEFlLFV0KSkrTWF0aC5pbXVsKFRlLENuKXwwLHc9TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDApK01hdGguaW11bChQZSxXbil8MCx3PXcr'@;
put 'TWF0aC5pbXVsKFBlLGVuKXwwLHY9ditNYXRoLmltdWwoS2UsSG4pfDAscD0ocD1wK01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5pbXVsKFllLEhuKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRo'@;
put 'LmltdWwoamUsaG4pfDAsdz13K01hdGguaW11bChqZSx3dCl8MCx2PXYrTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChMZSxfdCl8MCx3PXcrTWF0aC5pbXVsKExlLE50KXwwO3ZhciBnaT0oUysodj12K01hdGguaW11bChuZSxydCl8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEl0KXwwKStNYXRoLmltdWwoZGUscnQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsSXQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChYZSxDbikscD0ocD1NYXRoLmltdWwo'@;
put 'WGUsVXQpKStNYXRoLmltdWwoVWUsQ24pfDAsdz1NYXRoLmltdWwoVWUsVXQpLHY9ditNYXRoLmltdWwoQWUsV24pfDAscD0ocD1wK01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12K01hdGguaW11bChsdCxIbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsSG4pfDAsdz13K01hdGguaW11bChQZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0aC5pbXVsKFllLHd0KXwwLHY9ditNYXRo'@;
put 'LmltdWwoT2UsX3QpfDAscD0ocD1wK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKGplLF90KXwwLHc9dytNYXRoLmltdWwoamUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEl0KXwwKStNYXRoLmltdWwoTGUscnQpfDAsdz13K01hdGguaW11'@;
put 'bChMZSxJdCl8MDt2YXIgeHI9KFMrKHY9ditNYXRoLmltdWwobmUsRHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4'@;
put 'ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoTWUsQ24pLHA9KHA9TWF0aC5pbXVsKE1lLFV0KSkrTWF0aC5pbXVsKERlLENuKXwwLHc9TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDApK01hdGguaW11bChVZSxXbil8MCx3PXcr'@;
put 'TWF0aC5pbXVsKFVlLGVuKXwwLHY9ditNYXRoLmltdWwoQWUsSG4pfDAscD0ocD1wK01hdGguaW11bChBZSxmdCl8MCkrTWF0aC5pbXVsKFRlLEhuKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHd0KXwwKStNYXRo'@;
put 'LmltdWwoUGUsaG4pfDAsdz13K01hdGguaW11bChQZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmltdWwoT2UscnQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChPZSxJdCl8MCkrTWF0aC5pbXVsKGplLHJ0KXwwLHc9dytNYXRoLmltdWwoamUsSXQpfDAsdj12K01hdGguaW11bCh4ZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoTGUsRHQpfDAsdz13K01hdGguaW11bChMZSxwdCl8MDt2YXIgVWk9KFMrKHY9ditN'@;
put 'YXRoLmltdWwobmUsSW4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGRlLEluKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoaXQs'@;
put 'Q24pLHA9KHA9TWF0aC5pbXVsKGl0LFV0KSkrTWF0aC5pbXVsKHV0LENuKXwwLHc9TWF0aC5pbXVsKHV0LFV0KSx2PXYrTWF0aC5pbXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0aC5pbXVsKERlLGVuKXwwLHY9ditNYXRo'@;
put 'LmltdWwoWGUsSG4pfDAscD0ocD1wK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLEhuKXwwLHc9dytNYXRoLmltdWwoVWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUsaG4pfDAsdz13K01hdGguaW11'@;
put 'bChUZSx3dCl8MCx2PXYrTWF0aC5pbXVsKGx0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxJdCl8MCkrTWF0aC5pbXVsKFll'@;
put 'LHJ0KXwwLHc9dytNYXRoLmltdWwoWWUsSXQpfDAsdj12K01hdGguaW11bChPZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLHB0KXwwKStNYXRoLmltdWwoamUsRHQpfDAsdz13K01hdGguaW11bChqZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUs'@;
put 'enQpfDApK01hdGguaW11bChMZSxJbil8MCx3PXcrTWF0aC5pbXVsKExlLHp0KXwwO3ZhciBLcj0oUysodj12K01hdGguaW11bChuZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmlt'@;
put 'dWwoZGUsc24pfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxDbikscD0ocD1NYXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmltdWwoaXQsV24pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChpdCxlbil8MCkrTWF0aC5pbXVsKHV0LFduKXwwLHc9dytNYXRoLmltdWwodXQsZW4pfDAsdj12K01hdGguaW11bChNZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAsdz13K01hdGguaW11bChEZSxmdCl8MCx2PXYrTWF0aC5pbXVsKFhl'@;
put 'LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsd3QpfDApK01hdGguaW11bChVZSxobil8MCx3PXcrTWF0aC5pbXVsKFVlLHd0KXwwLHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLHc9dytNYXRoLmltdWwoVGUsTnQp'@;
put 'fDAsdj12K01hdGguaW11bChsdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEl0KXwwKStNYXRoLmltdWwoUGUscnQpfDAsdz13K01hdGguaW11bChQZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQpfDApK01hdGguaW11bChZZSxEdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKFllLHB0KXwwLHY9ditNYXRoLmltdWwoT2UsSW4pfDAscD0ocD1wK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKGplLEluKXwwLHc9dytNYXRoLmltdWwoamUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHNuKXwwKStN'@;
put 'YXRoLmltdWwoTGUseG4pfDAsdz13K01hdGguaW11bChMZSxzbil8MDt2YXIgbm89KFMrKHY9ditNYXRoLmltdWwobmUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLCR0'@;
put 'KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsV24pLHA9KHA9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKGl0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQs'@;
put 'ZnQpfDApK01hdGguaW11bCh1dCxIbil8MCx3PXcrTWF0aC5pbXVsKHV0LGZ0KXwwLHY9ditNYXRoLmltdWwoTWUsaG4pfDAscD0ocD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAsdj12K01hdGguaW11bChYZSxfdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKFhlLE50KXwwKStNYXRoLmltdWwoVWUsX3QpfDAsdz13K01hdGguaW11bChVZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcrTWF0aC5pbXVsKFRlLEl0KXwwLHY9ditN'@;
put 'YXRoLmltdWwobHQsRHQpfDAscD0ocD1wK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLHc9dytNYXRoLmltdWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwoWWUsSW4pfDAsdz13K01hdGgu'@;
put 'aW11bChZZSx6dCl8MCx2PXYrTWF0aC5pbXVsKE9lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChqZSx4bil8MCx3PXcrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBIcj0oUysodj12K01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKHhlLCR0KXwwKStNYXRoLmltdWwoTGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoTGUsJHQpfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxIbikscD0ocD1NYXRoLmltdWwoSHQsZnQpKStNYXRoLmltdWwoUHQsSG4p'@;
put 'fDAsdz1NYXRoLmltdWwoUHQsZnQpLHY9ditNYXRoLmltdWwoaXQsaG4pfDAscD0ocD1wK01hdGguaW11bChpdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLE50KXwwKStN'@;
put 'YXRoLmltdWwoRGUsX3QpfDAsdz13K01hdGguaW11bChEZSxOdCl8MCx2PXYrTWF0aC5pbXVsKFhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsSXQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEl0KXwwLHY9ditNYXRoLmltdWwoQWUsRHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLHc9dytNYXRoLmltdWwoVGUscHQpfDAsdj12K01hdGguaW11bChsdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsSW4pfDAsdz13K01hdGguaW11bChQZSx6dCl8MCx2PXYrTWF0aC5pbXVs'@;
put 'KEtlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usc24pfDApK01hdGguaW11bChZZSx4bil8MCx3PXcrTWF0aC5pbXVsKFllLHNuKXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLCR0KXwwKStNYXRoLmltdWwoamUs'@;
put 'Um4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoamUsJHQpfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAsdz1NYXRoLmltdWwoUHQsd3QpLHY9ditN'@;
put 'YXRoLmltdWwoaXQsX3QpfDAscD0ocD1wK01hdGguaW11bChpdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXwwLHc9dytNYXRoLmltdWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEl0KXwwKStNYXRoLmltdWwoRGUscnQpfDAsdz13K01hdGgu'@;
put 'aW11bChEZSxJdCl8MCx2PXYrTWF0aC5pbXVsKFhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11bChVZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsSW4pfDAscD0ocD1wK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVs'@;
put 'KFRlLEluKXwwLHc9dytNYXRoLmltdWwoVGUsenQpfDAsdj12K01hdGguaW11bChsdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditNYXRoLmltdWwoS2UsUm4pfDApfDApKygo'@;
put 'ODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsX3QpLHA9KHA9TWF0aC5pbXVsKEh0LE50'@;
put 'KSkrTWF0aC5pbXVsKFB0LF90KXwwLHc9TWF0aC5pbXVsKFB0LE50KSx2PXYrTWF0aC5pbXVsKGl0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsSXQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEl0KXwwLHY9ditNYXRoLmltdWwoTWUsRHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLHc9dytNYXRoLmltdWwoRGUscHQpfDAsdj12K01hdGguaW11bChYZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsSW4pfDAsdz13K01hdGguaW11bChVZSx6dCl8MCx2PXYrTWF0aC5pbXVs'@;
put 'KEFlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCx3PXcrTWF0aC5pbXVsKFRlLHNuKXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRoLmltdWwoUGUs'@;
put 'Um4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoUGUsJHQpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsSXQpKStNYXRoLmltdWwoUHQscnQpfDAsdz1NYXRoLmltdWwoUHQsSXQpLHY9ditN'@;
put 'YXRoLmltdWwoaXQsRHQpfDAscD0ocD1wK01hdGguaW11bChpdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLHc9dytNYXRoLmltdWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsSW4pfDAsdz13K01hdGgu'@;
put 'aW11bChEZSx6dCl8MCx2PXYrTWF0aC5pbXVsKFhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsc24pfDApK01hdGguaW11bChVZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVGUsJHQpfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwoSHQscHQpKStNYXRoLmltdWwoUHQsRHQp'@;
put 'fDAsdz1NYXRoLmltdWwoUHQscHQpLHY9ditNYXRoLmltdWwoaXQsSW4pfDAscD0ocD1wK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKHV0LEluKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHNuKXwwKStN'@;
put 'YXRoLmltdWwoRGUseG4pfDAsdz13K01hdGguaW11bChEZSxzbil8MDt2YXIgaW89KFMrKHY9ditNYXRoLmltdWwoWGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFVlLCR0'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSW4pLHA9KHA9TWF0aC5pbXVsKEh0LHp0KSkrTWF0aC5pbXVsKFB0LEluKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKGl0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQs'@;
put 'c24pfDApK01hdGguaW11bCh1dCx4bil8MCx3PXcrTWF0aC5pbXVsKHV0LHNuKXwwO3ZhciBHaT0oUysodj12K01hdGguaW11bChNZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmlt'@;
put 'dWwoRGUsJHQpfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCx4bikscD0ocD1NYXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUysodj12K01hdGguaW11bChpdCxSbil8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGl0LCR0KXwwKStNYXRoLmltdWwodXQsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMrKHY9TWF0aC5pbXVsKEh0LFJuKSl8MCkr'@;
put 'KCg4MTkxJihwPShwPU1hdGguaW11bChIdCwkdCkpK01hdGguaW11bChQdCxSbil8MCkpPDwxMyl8MDtyZXR1cm4gUz0oKHc9TWF0aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09UG4sQ1sxXT1uaSxDWzJdPWxuLENbM109am4sQ1s0XT1x'@;
put 'cixDWzVdPWdpLENbNl09eHIsQ1s3XT1VaSxDWzhdPUtyLENbOV09bm8sQ1sxMF09SHIsQ1sxMV09cWksQ1sxMl09SmksQ1sxM109YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFgo'@;
put 'RyxiLEQpe3JldHVybihuZXcgVSkubXVscChHLGIsRCl9ZnVuY3Rpb24gVShHLGIpe3RoaXMueD1HLHRoaXMueT1ifU1hdGguaW11bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5s'@;
put 'ZW5ndGgmJjEwPT09Yi5sZW5ndGg/Qih0aGlzLGIsRCk6Tjw2Mz9WKHRoaXMsYixEKTpOPDEwMjQ/ZnVuY3Rpb24gWShHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZhciBIPTAsTj0wLGc9MDtnPEQubGVuZ3Ro'@;
put 'LTE7ZysrKXt2YXIgQz1OO049MDtmb3IodmFyIFM9NjcxMDg4NjMmSCx2PU1hdGgubWluKGcsYi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0pLGZlPTY3MTA4ODYzJmRlO1M9NjcxMDg4'@;
put 'NjMmKGZlPWZlK1N8MCksTis9KEM9KEM9QysoZGUvNjcxMDg4NjR8MCl8MCkrKGZlPj4+MjYpfDApPj4+MjYsQyY9NjcxMDg4NjN9RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAoKX0odGhpcyxiLEQpOlgodGhpcyxiLEQp'@;
put 'LEh9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPU0ucHJvdG90eXBlLl9jb3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGIs'@;
put 'RCxIKXtpZigwPT09Ynx8Yj09PUgtMSlyZXR1cm4gYjtmb3IodmFyIE49MCxnPTA7ZzxEO2crKylOfD0oMSZiKTw8RC1nLTEsYj4+PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0wO1M8QztTKyspTltTXT1EW2JbU11dLGdb'@;
put 'U109SFtiW1NdXX0sVS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXt0aGlzLnBlcm11dGUoQyxiLEQsSCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92KSx3PU1hdGguc2luKDIqTWF0aC5QSS92'@;
put 'KSxKPTA7SjxnO0orPXYpZm9yKHZhciBuZT1wLGRlPXcsZmU9MDtmZTxTO2ZlKyspe3ZhciB4ZT1IW0orZmVdLExlPU5bSitmZV0sRmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxqZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhlKyhGZT1qZSksTltKK2ZlXT1MZStPZSxI'@;
put 'W0orZmUrU109eGUtRmUsTltKK2ZlK1NdPUxlLU9lLGZlIT09diYmKGplPXAqbmUtdypkZSxkZT1wKmRlK3cqbmUsbmU9amUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0x'@;
put 'KWcrKztyZXR1cm4gMTw8ZysxK059LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihiLEQsSCl7aWYoIShIPD0xKSlmb3IodmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05dPS1EW0gtTi0xXSxEW0gtTi0xXT0tZ319'@;
put 'LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD0wLE49MDtOPEQvMjtOKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0'@;
put 'fDB9cmV0dXJuIGJ9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oYixELEgsTil7Zm9yKHZhciBnPTAsQz0wO0M8RDtDKyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0yKkQ7QzxOOysrQylIW0NdPTA7bSgwPT09'@;
put 'ZyksbSgwPT0oLTgxOTImZykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD0wO0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4xM2IoYi5sZW5n'@;
put 'dGgsRC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKE4pLEM9dGhpcy5zdHViKE4pLFM9bmV3IEFycmF5KE4pLHY9bmV3IEFycmF5KE4pLHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1ILndvcmRzO2RlLmxlbmd0aD1OLHRoaXMu'@;
put 'Y29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLFMsTiksdGhpcy5jb252ZXJ0MTNiKEQud29yZHMsRC5sZW5ndGgsdyxOKSx0aGlzLnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7ZmU8TjtmZSsrKXt2YXIgeGU9dltmZV0q'@;
put 'SltmZV0tcFtmZV0qbmVbZmVdO3BbZmVdPXZbZmVdKm5lW2ZlXStwW2ZlXSpKW2ZlXSx2W2ZlXT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0aGlzLm5vcm1hbGl6ZTEzYihkZSxOKSxI'@;
put 'Lm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD1iLmxlbmd0aCtELmxlbmd0aCxILnN0cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLHRo'@;
put 'aXMubXVsVG8oYixEKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNs'@;
put 'b25lKCkubXVsVG8oYix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSpiLGc9KDY3MTA4ODYzJk4pKyg2'@;
put 'NzEwODg2MyZEKTtEPj49MjYsRCs9Ti82NzEwODg2NHwwLEQrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0dXJuIDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xv'@;
put 'bmUoKS5pbXVsbihiKX0sTS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxNLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYil7dmFyIEQ9ZnVuY3Rp'@;
put 'b24gaihHKXtmb3IodmFyIGI9bmV3IEFycmF5KEcuYml0TGVuZ3RoKCkpLEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIE49RCUyNjtiW0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2YXIgSD10aGlz'@;
put 'LE49MDtOPEQubGVuZ3RoJiYwPT09RFtOXTtOKyssSD1ILnNxcigpKTtpZigrK048RC5sZW5ndGgpZm9yKHZhciBnPUguc3FyKCk7TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihiKXtt'@;
put 'KCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIGcsRD1iJTI2LEg9KGItRCkvMjYsTj02NzEwODg2Mz4+PjI2LUQ8PDI2LUQ7aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZOO3RoaXMud29yZHNbZ109KDB8dGhpcy53'@;
put 'b3Jkc1tnXSktUzw8RHxDLEM9Uz4+PjI2LUR9QyYmKHRoaXMud29yZHNbZ109Qyx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8SDtnKyspdGhpcy53b3Jkc1tnXT0wO3Ro'@;
put 'aXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTjttKCJudW1iZXIiPT10eXBl'@;
put 'b2YgYiYmYj49MCksTj1EPyhELUQlMjYpLzI2OjA7dmFyIGc9YiUyNixDPU1hdGgubWluKChiLWcpLzI2LHRoaXMubGVuZ3RoKSxTPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBwPTA7cDxDO3ArKyl2LndvcmRzW3BdPXRo'@;
put 'aXMud29yZHNbcF07di5sZW5ndGg9Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0aC09QyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdz0wO2Zv'@;
put 'cihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT13fHxwPj1OKTtwLS0pe3ZhciBKPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndv'@;
put 'cmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLmlzaGxuKGIpfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8RCkpfSxNLnByb3Rv'@;
put 'dHlwZS5pbWFza249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczoo'@;
put 'MCE9PUQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09RCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMu'@;
put 'Y2xvbmUoKS5pbWFza24oYil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGIpe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxi'@;
put 'Pyh0aGlzLndvcmRzWzBdPWItKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihiKXt0aGlzLndv'@;
put 'cmRzWzBdKz1iO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF0+PTY3MTA4ODY0O0QrKyl0aGlzLndvcmRzW0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0'@;
put 'aC5tYXgodGhpcy5sZW5ndGgsRCsxKSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihiKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZl'@;
put 'PTAsdGhpcy5pYWRkbihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1iLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0'@;
put 'aCYmdGhpcy53b3Jkc1tEXTwwO0QrKyl0aGlzLndvcmRzW0RdKz02NzEwODg2NCx0aGlzLndvcmRzW0QrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGIpfSxNLnByb3RvdHlwZS5zdWJuPWZ1'@;
put 'bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oYil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxNLnByb3RvdHlwZS5f'@;
put 'aXNobG5zdWJtdWw9ZnVuY3Rpb24oYixELEgpe3ZhciBnO3RoaXMuX2V4cGFuZChiLmxlbmd0aCtIKTt2YXIgQyxTPTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtTPSgoQy09NjcxMDg4NjMmdik+PjI2KS0o'@;
put 'di82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQ31mb3IoO2c8dGhpcy5sZW5ndGgtSDtnKyspUz0oQz0oMHx0aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihtKC0xPT09'@;
put 'UyksUz0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKylTPShDPS0oMHx0aGlzLndvcmRzW2ddKStTKT4+MjYsdGhpcy53b3Jkc1tnXT02NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihiLEQpe3ZhciBILE49'@;
put 'dGhpcy5jbG9uZSgpLGc9YixDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYoZz1nLnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcubGVuZ3RoO2lmKCJtb2QiIT09RCl7KHA9'@;
put 'bmV3IE0obnVsbCkpLmxlbmd0aD12KzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2ZSYmKE49SixwJiYocC53b3Jkc1t2XT0x'@;
put 'KSk7Zm9yKHZhciBuZT12LTE7bmU+PTA7bmUtLSl7dmFyIGRlPTY3MTA4ODY0KigwfE4ud29yZHNbZy5sZW5ndGgrbmVdKSsoMHxOLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1Ym11bChnLGRlLG5lKTswIT09Ti5uZWdh'@;
put 'dGl2ZTspZGUtLSxOLm5lZ2F0aXZlPTAsTi5faXNobG5zdWJtdWwoZywxLG5lKSxOLmlzWmVybygpfHwoTi5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1IJiZOLml1c2hybihIKSx7ZGl2OnB8fG51'@;
put 'bGwsbW9kOk59fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKCFiLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2Qo'@;
put 'YixEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChiLm5lZygpLEQpLCJt'@;
put 'b2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLHtkaXY6Tixtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlzdWIoYikpLHtkaXY6Qy5k'@;
put 'aXYsbW9kOmd9KTpiLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoYik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlz'@;
put 'Lm1vZG4oYi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJkaXYi'@;
put 'LCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMSkubW9kfSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0'@;
put 'aW9uKGIpe3ZhciBEPXRoaXMuZGl2bW9kKGIpO2lmKEQubW9kLmlzWmVybygpKXJldHVybiBELmRpdjt2YXIgSD0wIT09RC5kaXYubmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7cmV0dXJuIEM8MHx8MT09PWcmJjA9PT1D'@;
put 'P0QuZGl2OjAhPT1ELmRpdi5uZWdhdGl2ZT9ELmRpdi5pc3VibigxKTpELmRpdi5pYWRkbigxKX0sTS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7Tj49MDtOLS0pSD0oRCpIKygwfHRoaXMu'@;
put 'd29yZHNbTl0pKSViO3JldHVybiBIfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7dGhpcy53b3Jkc1tIXT1OL2J8MCxEPU4l'@;
put 'Yn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEQ9dGhpcyxIPWIuY2xvbmUo'@;
put 'KTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1uZXcgTSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigxKSwrK3Y7Zm9yKHZhciBwPUguY2xvbmUo'@;
put 'KSx3PUQuY2xvbmUoKTshRC5pc1plcm8oKTspe2Zvcih2YXIgSj0wLG5lPTE7IShELndvcmRzWzBdJm5lKSYmSjwyNjsrK0osbmU8PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFkZChwKSxnLmlzdWIodykpLE4uaXVzaHJu'@;
put 'KDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgZGU9MCxmZT0xOyEoSC53b3Jkc1swXSZmZSkmJmRlPDI2OysrZGUsZmU8PD0xKTtpZihkZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxTLmlzdWIodykpLEMuaXVzaHJuKDEpLFMu'@;
put 'aXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKEMpLGcuaXN1YihTKSk6KEguaXN1YihEKSxDLmlzdWIoTiksUy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2'@;
put 'ZSksbSghYi5pc1plcm8oKSk7dmFyIEosRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIFM9MCx2PTE7'@;
put 'IShELndvcmRzWzBdJnYpJiZTPDI2OysrUyx2PDw9MSk7aWYoUz4wKWZvcihELml1c2hybihTKTtTLS0gPjA7KU4uaXNPZGQoKSYmTi5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8PD0xKTtpZihwPjApZm9yKEguaXVzaHJu'@;
put 'KHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQoQyksZy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZKLmlhZGQoYiksSn0sTS5wcm90b3R5cGUu'@;
put 'Z2NkPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGIuYWJzKCk7aWYoYi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIE49MDtELmlzRXZlbigpJiZILmlz'@;
put 'RXZlbigpO04rKylELml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7RC5pc0V2ZW4oKTspRC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31lbHNlIGlmKDA9PT1nfHwwPT09SC5jbXBu'@;
put 'KDEpKWJyZWFrO0QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oTil9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90'@;
put 'b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKTt2YXIgRD1i'@;
put 'JTI2LEg9KGItRCkvMjYsTj0xPDxEO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlzLndvcmRzW0NdO2c9KFMrPWcpPj4+MjYs'@;
put 'dGhpcy53b3Jkc1tDXT1TJj02NzEwODg2M31yZXR1cm4gMCE9PWcmJih0aGlzLndvcmRzW0NdPWcsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LE0ucHJvdG90eXBlLmNt'@;
put 'cG49ZnVuY3Rpb24oYil7dmFyIEgsRD1iPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFEKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1iKSxtKGI8PTY3MTA4ODYzLCJOdW1iZXIg'@;
put 'aXMgdG9vIGJpZyIpO3ZhciBOPTB8dGhpcy53b3Jkc1swXTtIPU49PT1iPzA6TjxiPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4tMTtpZigw'@;
put 'PT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEQ9dGhpcy51Y21wKGIpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5s'@;
put 'ZW5ndGg8Yi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0wfHRoaXMud29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVybiBEfSxNLnByb3RvdHlwZS5ndG49ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiB0aGlzLmNtcChiKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0'@;
put 'aGlzLmNtcG4oYik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNt'@;
put 'cChiKX0sTS5yZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyB1ZShiKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9u'@;
put 'bHkgd2l0aCBwb3NpdGl2ZXMiKSxiLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVk'@;
put 'LmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucmVkPWIsdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250'@;
put 'ZXh0IiksdGhpcy5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz'@;
put 'IiksdGhpcy5yZWQuc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24o'@;
put 'Yil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz'@;
put 'IiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5tdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiks'@;
put 'dGhpcy5yZWQuaW11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sTS5wcm90b3R5cGUu'@;
put 'cmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlz'@;
put 'LnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJl'@;
put 'ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz'@;
put 'KSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCYmIWIucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGIpfTt2YXIgcT17azI1NjpudWxsLHAy'@;
put 'MjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGVlKEcsYil7dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyBNKGIsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90'@;
put 'bXAoKX1mdW5jdGlvbiB0ZSgpe2VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHNlKCl7ZWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBoZSgpe2VlLmNhbGwodGhp'@;
put 'cywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlzLm09Yi5wLHRoaXMucHJpbWU9Yn1lbHNl'@;
put 'IG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2'@;
put 'LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMu'@;
put 'bSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1lZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksYn0s'@;
put 'ZWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oYil7dmFyIEgsRD1iO2Rve3RoaXMuc3BsaXQoRCx0aGlzLnRtcCksSD0oRD0oRD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBOPUg8dGhpcy5uPy0xOkQudWNtcCh0aGlz'@;
put 'LnApO3JldHVybiAwPT09Tj8oRC53b3Jkc1swXT0wLEQubGVuZ3RoPTEpOk4+MD9ELmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ELnN0cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVzaHJuKHRoaXMubiwwLEQpfSxlZS5wcm90'@;
put 'b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW11bCh0aGlzLmspfSxsZSh0ZSxlZSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2crKylELndvcmRzW2ddPWIud29yZHNbZ107'@;
put 'aWYoRC5sZW5ndGg9TixiLmxlbmd0aDw9OSlyZXR1cm4gYi53b3Jkc1swXT0wLHZvaWQoYi5sZW5ndGg9MSk7dmFyIEM9Yi53b3Jkc1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndvcmRzW2ddO2Iud29yZHNbZy0xMF09KFMm'@;
put 'SCk8PDR8Qz4+PjIyLEM9U31iLndvcmRzW2ctMTBdPUM+Pj49MjIsYi5sZW5ndGgtPTA9PT1DJiZiLmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3RoKzFdPTAsYi5sZW5ndGgrPTI7Zm9yKHZh'@;
put 'ciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0wfGIud29yZHNbSF07Yi53b3Jkc1tIXT02NzEwODg2MyYoRCs9OTc3Kk4pLEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0tLDA9PT1iLndvcmRzW2IubGVuZ3RoLTFd'@;
put 'JiZiLmxlbmd0aC0tKSxifSxsZShvZSxlZSksbGUoc2UsZWUpLGxlKGhlLGVlKSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9NjcxMDg4NjMmTjtOPj4+PTI2LGIud29yZHNb'@;
put 'SF09ZyxEPU59cmV0dXJuIDAhPT1EJiYoYi53b3Jkc1tiLmxlbmd0aCsrXT1EKSxifSxNLl9wcmltZT1mdW5jdGlvbihiKXtpZihxW2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9bmV3IG9lO2Vsc2UgaWYoInAxOTIiPT09'@;
put 'YilEPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09Yil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitiKTtEPW5ldyBoZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRo'@;
put 'IHBvc2l0aXZlcyIpLG0oYi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkJiZi'@;
put 'LnJlZD09PUQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMp'@;
put 'fSx1ZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGIpe3JldHVybiBiLmlzWmVybygpP2IuY2xvbmUoKTp0aGlzLm0uc3ViKGIpLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmFkZChEKTtyZXR1cm4gSC5j'@;
put 'bXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sdWUucHJv'@;
put 'dG90eXBlLnN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLnN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2'@;
put 'YXIgSD1iLmlzdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe3Jl'@;
put 'dHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIuaW11bChEKSl9LHVlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlz'@;
put 'LmltdWwoYixiLmNsb25lKCkpfSx1ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bChiLGIpfSx1ZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhpcy5tLmFuZGxuKDMpO2lmKG0oRCUyPT0x'@;
put 'KSwzPT09RCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhiLEgpfWZvcih2YXIgTj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7bSghTi5pc1plcm8oKSk7dmFyIEM9bmV3'@;
put 'IE0oMSkudG9SZWQodGhpcyksUz1DLnJlZE5lZygpLHY9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVkSUFkZChTKTtmb3IodmFyIHc9dGhpcy5w'@;
put 'b3cocCxOKSxKPXRoaXMucG93KGIsTi5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coYixOKSxkZT1nOzAhPT1uZS5jbXAoQyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUpO3ZhciBMZT10aGlzLnBvdyh3LG5ldyBN'@;
put 'KDEpLml1c2hsbihkZS14ZS0xKSk7Sj1KLnJlZE11bChMZSksdz1MZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwodyksZGU9eGV9cmV0dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ELm5lZ2F0aXZlPyhELm5lZ2F0'@;
put 'aXZlPTAsdGhpcy5pbW9kKEQpLnJlZE5lZygpKTp0aGlzLmltb2QoRCl9LHVlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYixEKXtpZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBiLmNsb25lKCk7dmFyIE49bmV3IEFycmF5'@;
put 'KDE2KTtOWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMpLE5bMV09Yjtmb3IodmFyIGc9MjtnPE4ubGVuZ3RoO2crKylOW2ddPXRoaXMubXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9RC5sZW5ndGgtMTtnPj0wO2ct'@;
put 'LSl7Zm9yKHZhciB3PUQud29yZHNbZ10sSj1wLTE7Sj49MDtKLS0pe3ZhciBuZT13Pj5KJjE7QyE9PU5bMF0mJihDPXRoaXMuc3FyKEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11bChDLE5bU10pLHY9MCxTPTApKTp2PTB9'@;
put 'cD0yNn1yZXR1cm4gQ30sdWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXt2YXIgRD1iLnVtb2QodGhpcy5tKTtyZXR1cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1iLmNsb25lKCk7cmV0dXJuIEQucmVkPW51'@;
put 'bGwsRH0sTS5tb250PWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgY2UoYil9LGxlKGNlLHVlKSxjZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2'@;
put 'YXIgRD10aGlzLmltb2QoYi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEQucmVkPW51bGwsRH0sY2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSxiO3ZhciBIPWIuaW11bChEKSxOPUgu'@;
put 'bWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRo'@;
put 'aXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52'@;
put 'KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnBy'@;
put 'b3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sODIwMTY6YXQ9PnsidXNlIHN0cmljdCI7dmFyIGFlLEllPSJvYmplY3QiPT10eXBlb2YgUmVm'@;
put 'bGVjdD9SZWZsZWN0Om51bGwsRj1JZSYmImZ1bmN0aW9uIj09dHlwZW9mIEllLmFwcGx5P0llLmFwcGx5OmZ1bmN0aW9uKGVlLHRlLG9lKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoZWUsdGUsb2UpfTthZT1JZSYmImZ1bmN0aW9uIj09dHlwZW9mIEllLm93bktleXM/'@;
put 'SWUub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGVlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZWUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGVlKSl9OmZ1bmN0aW9uKGVlKXtyZXR1cm4gT2JqZWN0LmdldE93'@;
put 'blByb3BlcnR5TmFtZXMoZWUpfTt2YXIgbT1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUhPWVlfTtmdW5jdGlvbiBsZSgpe2xlLmluaXQuY2FsbCh0aGlzKX1hdC5leHBvcnRzPWxlLGF0LmV4cG9ydHMub25jZT1mdW5jdGlvbiBZKHEsZWUpe3JldHVybiBuZXcgUHJvbWlz'@;
put 'ZShmdW5jdGlvbih0ZSxvZSl7ZnVuY3Rpb24gc2UodWUpe3EucmVtb3ZlTGlzdGVuZXIoZWUsaGUpLG9lKHVlKX1mdW5jdGlvbiBoZSgpeyJmdW5jdGlvbiI9PXR5cGVvZiBxLnJlbW92ZUxpc3RlbmVyJiZxLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsc2UpLHRlKFtdLnNsaWNlLmNhbGwoYXJn'@;
put 'dW1lbnRzKSl9VShxLGVlLGhlLHtvbmNlOiEwfSksImVycm9yIiE9PWVlJiZmdW5jdGlvbiBYKHEsZWUsdGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBxLm9uJiZVKHEsImVycm9yIixlZSx0ZSl9KHEsc2Use29uY2U6ITB9KX0pfSxsZS5FdmVudEVtaXR0ZXI9bGUsbGUucHJvdG90eXBlLl9ldmVu'@;
put 'dHM9dm9pZCAwLGxlLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxsZS5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIE09MTA7ZnVuY3Rpb24gTyhxKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBt'@;
put 'dXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcSl9ZnVuY3Rpb24gUihxKXtyZXR1cm4gdm9pZCAwPT09cS5fbWF4TGlzdGVuZXJzP2xlLmRlZmF1bHRNYXhMaXN0ZW5lcnM6cS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIHoocSxlZSx0ZSxvZSl7dmFyIHNl'@;
put 'LGhlLHVlO2lmKE8odGUpLHZvaWQgMD09PShoZT1xLl9ldmVudHMpPyhoZT1xLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxxLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09aGUubmV3TGlzdGVuZXImJihxLmVtaXQoIm5ld0xpc3RlbmVyIixlZSx0ZS5saXN0ZW5lcj90ZS5saXN0ZW5l'@;
put 'cjp0ZSksaGU9cS5fZXZlbnRzKSx1ZT1oZVtlZV0pLHZvaWQgMD09PXVlKXVlPWhlW2VlXT10ZSwrK3EuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHVlP3VlPWhlW2VlXT1vZT9bdGUsdWVdOlt1ZSx0ZV06b2U/dWUudW5zaGlmdCh0ZSk6dWUucHVzaCh0ZSksKHNl'@;
put 'PVIocSkpPjAmJnVlLmxlbmd0aD5zZSYmIXVlLndhcm5lZCl7dWUud2FybmVkPSEwO3ZhciBjZT1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIit1ZS5sZW5ndGgrIiAiK1N0cmluZyhlZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0'@;
put 'dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7Y2UubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixjZS5lbWl0dGVyPXEsY2UudHlwZT1lZSxjZS5jb3VudD11ZS5sZW5ndGgsZnVuY3Rpb24geChxKXtjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNv'@;
put 'bGUud2FybihxKX0oY2UpfXJldHVybiBxfWZ1bmN0aW9uIEsoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0'@;
put 'aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIEkocSxlZSx0ZSl7dmFyIG9lPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpxLHR5cGU6ZWUsbGlzdGVuZXI6dGV9LHNlPUsuYmluZChvZSk7cmV0dXJuIHNlLmxpc3Rl'@;
put 'bmVyPXRlLG9lLndyYXBGbj1zZSxzZX1mdW5jdGlvbiBrKHEsZWUsdGUpe3ZhciBvZT1xLl9ldmVudHM7aWYodm9pZCAwPT09b2UpcmV0dXJuW107dmFyIHNlPW9lW2VlXTtyZXR1cm4gdm9pZCAwPT09c2U/W106ImZ1bmN0aW9uIj09dHlwZW9mIHNlP3RlP1tzZS5saXN0ZW5lcnx8c2VdOltz'@;
put 'ZV06dGU/ZnVuY3Rpb24gQihxKXtmb3IodmFyIGVlPW5ldyBBcnJheShxLmxlbmd0aCksdGU9MDt0ZTxlZS5sZW5ndGg7Kyt0ZSllZVt0ZV09cVt0ZV0ubGlzdGVuZXJ8fHFbdGVdO3JldHVybiBlZX0oc2UpOmooc2Usc2UubGVuZ3RoKX1mdW5jdGlvbiBFKHEpe3ZhciBlZT10aGlzLl9ldmVu'@;
put 'dHM7aWYodm9pZCAwIT09ZWUpe3ZhciB0ZT1lZVtxXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGUpcmV0dXJuIDE7aWYodm9pZCAwIT09dGUpcmV0dXJuIHRlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBqKHEsZWUpe2Zvcih2YXIgdGU9bmV3IEFycmF5KGVlKSxvZT0wO29lPGVlOysrb2Up'@;
put 'dGVbb2VdPXFbb2VdO3JldHVybiB0ZX1mdW5jdGlvbiBVKHEsZWUsdGUsb2Upe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBxLm9uKW9lLm9uY2U/cS5vbmNlKGVlLHRlKTpxLm9uKGVlLHRlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBxLmFkZEV2ZW50TGlzdGVuZXIpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcignVGhlICJlbWl0dGVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHEpO3EuYWRkRXZlbnRMaXN0ZW5lcihlZSxmdW5jdGlvbiBzZShoZSl7b2Uub25jZSYmcS5yZW1vdmVFdmVudExpc3RlbmVyKGVlLHNlKSx0'@;
put 'ZShoZSl9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLCJkZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTX0sc2V0OmZ1bmN0aW9uKHEpe2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cTwwfHxtKHEpKXRocm93IG5ldyBSYW5nZUVycm9y'@;
put 'KCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrcSsiLiIpO009cX19KSxsZS5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZl'@;
put 'bnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxsZS5wcm90b3R5cGUuc2V0TWF4'@;
put 'TGlzdGVuZXJzPWZ1bmN0aW9uKGVlKXtpZigibnVtYmVyIiE9dHlwZW9mIGVlfHxlZTwwfHxtKGVlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2VlKyIu'@;
put 'Iik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1lZSx0aGlzfSxsZS5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcyl9LGxlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGVlKXtmb3IodmFyIHRlPVtdLG9lPTE7b2U8YXJndW1lbnRzLmxlbmd0aDtv'@;
put 'ZSsrKXRlLnB1c2goYXJndW1lbnRzW29lXSk7dmFyIHNlPSJlcnJvciI9PT1lZSxoZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aGUpc2U9c2UmJnZvaWQgMD09PWhlLmVycm9yO2Vsc2UgaWYoIXNlKXJldHVybiExO2lmKHNlKXt2YXIgdWU7aWYodGUubGVuZ3RoPjAmJih1ZT10ZVswXSks'@;
put 'dWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyB1ZTt2YXIgY2U9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisodWU/IiAoIit1ZS5tZXNzYWdlKyIpIjoiIikpO3Rocm93IGNlLmNvbnRleHQ9dWUsY2V9dmFyIEc9aGVbZWVdO2lmKHZvaWQgMD09PUcpcmV0dXJuITE7aWYoImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIEcpRihHLHRoaXMsdGUpO2Vsc2V7dmFyIGI9Ry5sZW5ndGgsRD1qKEcsYik7Zm9yKG9lPTA7b2U8YjsrK29lKUYoRFtvZV0sdGhpcyx0ZSl9cmV0dXJuITB9LGxlLnByb3RvdHlwZS5vbj1sZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZWUsdGUpe3JldHVybiB6'@;
put 'KHRoaXMsZWUsdGUsITEpfSxsZS5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4geih0aGlzLGVlLHRlLCEwKX0sbGUucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oZWUsdGUpe3JldHVybiBPKHRlKSx0aGlzLm9uKGVlLEkodGhpcyxlZSx0ZSkpLHRoaXN9'@;
put 'LGxlLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4gTyh0ZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoZWUsSSh0aGlzLGVlLHRlKSksdGhpc30sbGUucHJvdG90eXBlLm9mZj1sZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZWUs'@;
put 'dGUpe3ZhciBvZSxzZSxoZSx1ZSxjZTtpZihPKHRlKSx2b2lkIDA9PT0oc2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0ob2U9c2VbZWVdKSlyZXR1cm4gdGhpcztpZihvZT09PXRlfHxvZS5saXN0ZW5lcj09PXRlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5f'@;
put 'ZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBzZVtlZV0sc2UucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGVlLG9lLmxpc3RlbmVyfHx0ZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIG9lKXtmb3IoaGU9LTEsdWU9b2UubGVuZ3RoLTE7'@;
put 'dWU+PTA7dWUtLSlpZihvZVt1ZV09PT10ZXx8b2VbdWVdLmxpc3RlbmVyPT09dGUpe2NlPW9lW3VlXS5saXN0ZW5lcixoZT11ZTticmVha31pZihoZTwwKXJldHVybiB0aGlzOzA9PT1oZT9vZS5zaGlmdCgpOmZ1bmN0aW9uIFYocSxlZSl7Zm9yKDtlZSsxPHEubGVuZ3RoO2VlKyspcVtlZV09'@;
put 'cVtlZSsxXTtxLnBvcCgpfShvZSxoZSksMT09PW9lLmxlbmd0aCYmKHNlW2VlXT1vZVswXSksdm9pZCAwIT09c2UucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGVlLGNlfHx0ZSl9cmV0dXJuIHRoaXN9LGxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9'@;
put 'ZnVuY3Rpb24oZWUpe3ZhciB0ZSxvZSxzZTtpZih2b2lkIDA9PT0ob2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1vZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMu'@;
put 'X2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PW9lW2VlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIG9lW2VlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIHVlLGhlPU9iamVjdC5rZXlzKG9lKTtmb3Io'@;
put 'c2U9MDtzZTxoZS5sZW5ndGg7KytzZSkicmVtb3ZlTGlzdGVuZXIiIT09KHVlPWhlW3NlXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKHVlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCks'@;
put 'dGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZih0ZT1vZVtlZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoZWUsdGUpO2Vsc2UgaWYodm9pZCAwIT09dGUpZm9yKHNlPXRlLmxlbmd0aC0xO3NlPj0wO3NlLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihlZSx0ZVtzZV0p'@;
put 'O3JldHVybiB0aGlzfSxsZS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGVlKXtyZXR1cm4gayh0aGlzLGVlLCEwKX0sbGUucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlZSl7cmV0dXJuIGsodGhpcyxlZSwhMSl9LGxlLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24ocSxlZSl7'@;
put 'cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHEubGlzdGVuZXJDb3VudD9xLmxpc3RlbmVyQ291bnQoZWUpOkUuY2FsbChxLGVlKX0sbGUucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9RSxsZS5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4w'@;
put 'P2FlKHRoaXMuX2V2ZW50cyk6W119fSwzNjUwNTooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoNzU4MjkpO2F0LmV4cG9ydHM9ZnVuY3Rpb24gbShsZSxNLE8sUil7aWYoYWUuaXNCdWZmZXIobGUpfHwobGU9YWUuZnJvbShsZSwiYmluYXJ5IikpLE0mJihhZS5pc0J1ZmZl'@;
put 'cihNKXx8KE09YWUuZnJvbShNLCJiaW5hcnkiKSksOCE9PU0ubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgej1PLzgsSz1hZS5hbGxvYyh6KSxJPWFlLmFsbG9jKFJ8fDApLGs9YWUuYWxsb2Mo'@;
put 'MCk7ej4wfHxSPjA7KXt2YXIgRT1uZXcgeDtFLnVwZGF0ZShrKSxFLnVwZGF0ZShsZSksTSYmRS51cGRhdGUoTSksaz1FLmRpZ2VzdCgpO3ZhciBqPTA7aWYoej4wKXt2YXIgVj1LLmxlbmd0aC16O2o9TWF0aC5taW4oeixrLmxlbmd0aCksay5jb3B5KEssViwwLGopLHotPWp9aWYoajxrLmxl'@;
put 'bmd0aCYmUj4wKXt2YXIgQj1JLmxlbmd0aC1SLFk9TWF0aC5taW4oUixrLmxlbmd0aC1qKTtrLmNvcHkoSSxCLGosaitZKSxSLT1ZfX1yZXR1cm4gay5maWxsKDApLHtrZXk6SyxpdjpJfX19LDYwMzgwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYo'@;
put 'OTY3NDUpLlRyYW5zZm9ybTtmdW5jdGlvbiBNKE8pe3guY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1hZS5hbGxvY1Vuc2FmZShPKSx0aGlzLl9ibG9ja1NpemU9Tyx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfUYoNjY2OTgpKE0s'@;
put 'eCksTS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihPLFIseil7dmFyIEs9bnVsbDt0cnl7dGhpcy51cGRhdGUoTyxSKX1jYXRjaChJKXtLPUl9eihLKX0sTS5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKE8pe3ZhciBSPW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1j'@;
put 'YXRjaCh6KXtSPXp9TyhSKX0sTS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE8sUil7aWYoZnVuY3Rpb24gbGUoTyxSKXtpZighYWUuaXNCdWZmZXIoTykmJiJzdHJpbmciIT10eXBlb2YgTyl0aHJvdyBuZXcgVHlwZUVycm9yKFIrIiBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyIil9'@;
put 'KE8sIkRhdGEiKSx0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTthZS5pc0J1ZmZlcihPKXx8KE89YWUuZnJvbShPLFIpKTtmb3IodmFyIHo9dGhpcy5fYmxvY2ssSz0wO3RoaXMuX2Jsb2NrT2Zmc2V0K08ubGVuZ3RoLUs+PXRoaXMuX2Js'@;
put 'b2NrU2l6ZTspe2Zvcih2YXIgST10aGlzLl9ibG9ja09mZnNldDtJPHRoaXMuX2Jsb2NrU2l6ZTspeltJKytdPU9bSysrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7SzxPLmxlbmd0aDspelt0aGlzLl9ibG9ja09mZnNldCsrXT1PW0srK107Zm9yKHZhciBrPTAs'@;
put 'RT04Kk8ubGVuZ3RoO0U+MDsrK2spdGhpcy5fbGVuZ3RoW2tdKz1FLChFPXRoaXMuX2xlbmd0aFtrXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhba10tPTQyOTQ5NjcyOTYqRSk7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJy'@;
put 'b3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LE0ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihPKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIFI9dGhpcy5fZGlnZXN0KCk7'@;
put 'dm9pZCAwIT09TyYmKFI9Ui50b1N0cmluZyhPKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgej0wO3o8NDsrK3opdGhpcy5fbGVuZ3RoW3pdPTA7cmV0dXJuIFJ9LE0ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3Io'@;
put 'Il9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LGF0LmV4cG9ydHM9TX0sNzEwNzY6KGF0LEllLEYpPT57dmFyIGFlPUllO2FlLnV0aWxzPUYoMTk4NzUpLGFlLmNvbW1vbj1GKDkyMDg1KSxhZS5zaGE9Rig1NzY1OCksYWUucmlwZW1kPUYoNDgzNDQpLGFlLmhtYWM9Rig3NjE5MiksYWUu'@;
put 'c2hhMT1hZS5zaGEuc2hhMSxhZS5zaGEyNTY9YWUuc2hhLnNoYTI1NixhZS5zaGEyMjQ9YWUuc2hhLnNoYTIyNCxhZS5zaGEzODQ9YWUuc2hhLnNoYTM4NCxhZS5zaGE1MTI9YWUuc2hhLnNoYTUxMixhZS5yaXBlbWQxNjA9YWUucmlwZW1kLnJpcGVtZDE2MH0sOTIwODU6KGF0LEllLEYpPT57'@;
put 'InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoNTc3OTgpO2Z1bmN0aW9uIG0oKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91'@;
put 'dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj0iYmlnIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMu'@;
put 'YmxvY2tTaXplLzMyfUllLkJsb2NrSGFzaD1tLG0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihNLE8pe2lmKE09YWUudG9BcnJheShNLE8pLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdChNKTpNLHRoaXMucGVuZGluZ1RvdGFsKz1NLmxlbmd0aCx0aGlz'@;
put 'LnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciBSPShNPXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9TS5zbGljZShNLmxlbmd0aC1SLE0ubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSxNPWFl'@;
put 'LmpvaW4zMihNLDAsTS5sZW5ndGgtUix0aGlzLmVuZGlhbik7Zm9yKHZhciB6PTA7ejxNLmxlbmd0aDt6Kz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZShNLHoseit0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sbS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE0pe3JldHVybiB0aGlz'@;
put 'LnVwZGF0ZSh0aGlzLl9wYWQoKSkseChudWxsPT09dGhpcy5wZW5kaW5nKSx0aGlzLl9kaWdlc3QoTSl9LG0ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgTT10aGlzLnBlbmRpbmdUb3RhbCxPPXRoaXMuX2RlbHRhOCxSPU8tKE0rdGhpcy5wYWRMZW5ndGgpJU8sej1uZXcgQXJyYXko'@;
put 'Uit0aGlzLnBhZExlbmd0aCk7elswXT0xMjg7Zm9yKHZhciBLPTE7SzxSO0srKyl6W0tdPTA7aWYoTTw8PTMsImJpZyI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBJPTg7STx0aGlzLnBhZExlbmd0aDtJKyspeltLKytdPTA7eltLKytdPTAseltLKytdPTAseltLKytdPTAseltLKytdPTAseltL'@;
put 'KytdPU0+Pj4yNCYyNTUseltLKytdPU0+Pj4xNiYyNTUseltLKytdPU0+Pj44JjI1NSx6W0srK109MjU1Jk19ZWxzZSBmb3IoeltLKytdPTI1NSZNLHpbSysrXT1NPj4+OCYyNTUseltLKytdPU0+Pj4xNiYyNTUseltLKytdPU0+Pj4yNCYyNTUseltLKytdPTAseltLKytdPTAseltLKytdPTAs'@;
put 'eltLKytdPTAsST04O0k8dGhpcy5wYWRMZW5ndGg7SSsrKXpbSysrXT0wO3JldHVybiB6fX0sNzYxOTI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoNTc3OTgpO2Z1bmN0aW9uIG0obGUsTSxPKXtpZighKHRoaXMgaW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3'@;
put 'IG0obGUsTSxPKTt0aGlzLkhhc2g9bGUsdGhpcy5ibG9ja1NpemU9bGUuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPWxlLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoYWUudG9BcnJheShNLE8pKX1hdC5leHBvcnRzPW0sbS5wcm90b3R5cGUu'@;
put 'X2luaXQ9ZnVuY3Rpb24oTSl7TS5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJihNPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoTSkuZGlnZXN0KCkpLHgoTS5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIE89TS5sZW5ndGg7Tzx0aGlzLmJsb2NrU2l6ZTtPKyspTS5wdXNoKDApO2ZvcihP'@;
put 'PTA7TzxNLmxlbmd0aDtPKyspTVtPXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShNKSxPPTA7TzxNLmxlbmd0aDtPKyspTVtPXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShNKX0sbS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE0s'@;
put 'Tyl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKE0sTyksdGhpc30sbS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChNKX19LDQ4MzQ0OihhdCxJZSxGKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDkyMDg1KSxtPWFlLnJvdGwzMixsZT1hZS5zdW0zMixNPWFlLnN1bTMyXzMsTz1hZS5zdW0zMl80LFI9eC5CbG9ja0hhc2g7ZnVuY3Rpb24geigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcgejtSLmNhbGwodGhpcyksdGhpcy5o'@;
put 'PVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24gSyhZLFgsVSxxKXtyZXR1cm4gWTw9MTU/WF5VXnE6WTw9MzE/WCZVfH5YJnE6WTw9NDc/KFh8flUpXnE6WTw9NjM/WCZxfFUmfnE6WF4o'@;
put 'VXx+cSl9ZnVuY3Rpb24gayhZKXtyZXR1cm4gWTw9MTU/MTM1MjgyOTkyNjpZPD0zMT8xNTQ4NjAzNjg0Olk8PTQ3PzE4MzYwNzI2OTE6WTw9NjM/MjA1Mzk5NDIxNzowfWFlLmluaGVyaXRzKHosUiksSWUucmlwZW1kMTYwPXosei5ibG9ja1NpemU9NTEyLHoub3V0U2l6ZT0xNjAsei5obWFj'@;
put 'U3RyZW5ndGg9MTkyLHoucGFkTGVuZ3RoPTY0LHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWCxVKXtmb3IodmFyIHE9dGhpcy5oWzBdLGVlPXRoaXMuaFsxXSx0ZT10aGlzLmhbMl0sb2U9dGhpcy5oWzNdLHNlPXRoaXMuaFs0XSxoZT1xLHVlPWVlLGNlPXRlLEc9b2UsYj1zZSxEPTA7'@;
put 'RDw4MDtEKyspe3ZhciBIPWxlKG0oTyhxLEsoRCxlZSx0ZSxvZSksWFtFW0RdK1VdLChZPUQpPD0xNT8wOlk8PTMxPzE1MTg1MDAyNDk6WTw9NDc/MTg1OTc3NTM5MzpZPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4MzgpLFZbRF0pLHNlKTtxPXNlLHNlPW9lLG9lPW0odGUsMTApLHRlPWVlLGVl'@;
put 'PUgsSD1sZShtKE8oaGUsSyg3OS1ELHVlLGNlLEcpLFhbaltEXStVXSxrKEQpKSxCW0RdKSxiKSxoZT1iLGI9RyxHPW0oY2UsMTApLGNlPXVlLHVlPUh9dmFyIFk7SD1NKHRoaXMuaFsxXSx0ZSxHKSx0aGlzLmhbMV09TSh0aGlzLmhbMl0sb2UsYiksdGhpcy5oWzJdPU0odGhpcy5oWzNdLHNl'@;
put 'LGhlKSx0aGlzLmhbM109TSh0aGlzLmhbNF0scSx1ZSksdGhpcy5oWzRdPU0odGhpcy5oWzBdLGVlLGNlKSx0aGlzLmhbMF09SH0sei5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihYKXtyZXR1cm4iaGV4Ij09PVg/YWUudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOmFlLnNwbGl0MzIodGhp'@;
put 'cy5oLCJsaXR0bGUiKX07dmFyIEU9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUs'@;
put 'MTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10saj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMs'@;
put 'OCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxWPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEz'@;
put 'LDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxCPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywx'@;
put 'NSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sNTc2NTg6KGF0'@;
put 'LEllLEYpPT57InVzZSBzdHJpY3QiO0llLnNoYTE9Rig3NTAxMCksSWUuc2hhMjI0PUYoODM1NzgpLEllLnNoYTI1Nj1GKDk3ODU3KSxJZS5zaGEzODQ9Rig2ODcyMyksSWUuc2hhNTEyPUYoNDUzMDQpfSw3NTAxMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9'@;
put 'Rig5MjA4NSksbT1GKDcyMjEpLGxlPWFlLnJvdGwzMixNPWFlLnN1bTMyLE89YWUuc3VtMzJfNSxSPW0uZnRfMSx6PXguQmxvY2tIYXNoLEs9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIEkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSly'@;
put 'ZXR1cm4gbmV3IEk7ei5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfWFlLmluaGVyaXRzKEkseiksYXQuZXhwb3J0cz1JLEkuYmxvY2tTaXplPTUxMixJLm91dFNpemU9'@;
put 'MTYwLEkuaG1hY1N0cmVuZ3RoPTgwLEkucGFkTGVuZ3RoPTY0LEkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFY9dGhpcy5XLEI9MDtCPDE2O0IrKylWW0JdPUVbaitCXTtmb3IoO0I8Vi5sZW5ndGg7QisrKVZbQl09bGUoVltCLTNdXlZbQi04XV5WW0ItMTRdXlZb'@;
put 'Qi0xNl0sMSk7dmFyIFk9dGhpcy5oWzBdLFg9dGhpcy5oWzFdLFU9dGhpcy5oWzJdLHE9dGhpcy5oWzNdLGVlPXRoaXMuaFs0XTtmb3IoQj0wO0I8Vi5sZW5ndGg7QisrKXt2YXIgdGU9fn4oQi8yMCksb2U9TyhsZShZLDUpLFIodGUsWCxVLHEpLGVlLFZbQl0sS1t0ZV0pO2VlPXEscT1VLFU9'@;
put 'bGUoWCwzMCksWD1ZLFk9b2V9dGhpcy5oWzBdPU0odGhpcy5oWzBdLFkpLHRoaXMuaFsxXT1NKHRoaXMuaFsxXSxYKSx0aGlzLmhbMl09TSh0aGlzLmhbMl0sVSksdGhpcy5oWzNdPU0odGhpcy5oWzNdLHEpLHRoaXMuaFs0XT1NKHRoaXMuaFs0XSxlZSl9LEkucHJvdG90eXBlLl9kaWdlc3Q9'@;
put 'ZnVuY3Rpb24oRSl7cmV0dXJuImhleCI9PT1FP2FlLnRvSGV4MzIodGhpcy5oLCJiaWciKTphZS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw4MzU3ODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5Nzg1Nyk7ZnVuY3Rpb24gbSgpe2lmKCEodGhpcyBpbnN0'@;
put 'YW5jZW9mIG0pKXJldHVybiBuZXcgbTt4LmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1hZS5pbmhlcml0cyhtLHgpLGF0LmV4cG9ydHM9bSxtLmJs'@;
put 'b2NrU2l6ZT01MTIsbS5vdXRTaXplPTIyNCxtLmhtYWNTdHJlbmd0aD0xOTIsbS5wYWRMZW5ndGg9NjQsbS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihNKXtyZXR1cm4iaGV4Ij09PU0/YWUudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6YWUuc3BsaXQzMih0aGlzLmguc2xp'@;
put 'Y2UoMCw3KSwiYmlnIil9fSw5Nzg1NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5MjA4NSksbT1GKDcyMjEpLGxlPUYoNTc3OTgpLE09YWUuc3VtMzIsTz1hZS5zdW0zMl80LFI9YWUuc3VtMzJfNSx6PW0uY2gzMixLPW0ubWFqMzIsST1tLnMwXzI1Nixr'@;
put 'PW0uczFfMjU2LEU9bS5nMF8yNTYsaj1tLmcxXzI1NixWPXguQmxvY2tIYXNoLEI9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3'@;
put 'OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwy'@;
put 'OTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAz'@;
put 'MDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIs'@;
put 'MjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gWSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFkpKXJldHVybiBuZXcgWTtWLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQx'@;
put 'MzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPUIsdGhpcy5XPW5ldyBBcnJheSg2NCl9YWUuaW5oZXJpdHMoWSxWKSxhdC5leHBvcnRzPVksWS5ibG9ja1NpemU9NTEyLFkub3V0U2l6ZT0yNTYsWS5o'@;
put 'bWFjU3RyZW5ndGg9MTkyLFkucGFkTGVuZ3RoPTY0LFkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSxxKXtmb3IodmFyIGVlPXRoaXMuVyx0ZT0wO3RlPDE2O3RlKyspZWVbdGVdPVVbcSt0ZV07Zm9yKDt0ZTxlZS5sZW5ndGg7dGUrKyllZVt0ZV09TyhqKGVlW3RlLTJdKSxlZVt0ZS03'@;
put 'XSxFKGVlW3RlLTE1XSksZWVbdGUtMTZdKTt2YXIgb2U9dGhpcy5oWzBdLHNlPXRoaXMuaFsxXSxoZT10aGlzLmhbMl0sdWU9dGhpcy5oWzNdLGNlPXRoaXMuaFs0XSxHPXRoaXMuaFs1XSxiPXRoaXMuaFs2XSxEPXRoaXMuaFs3XTtmb3IobGUodGhpcy5rLmxlbmd0aD09PWVlLmxlbmd0aCks'@;
put 'dGU9MDt0ZTxlZS5sZW5ndGg7dGUrKyl7dmFyIEg9UihELGsoY2UpLHooY2UsRyxiKSx0aGlzLmtbdGVdLGVlW3RlXSksTj1NKEkob2UpLEsob2Usc2UsaGUpKTtEPWIsYj1HLEc9Y2UsY2U9TSh1ZSxIKSx1ZT1oZSxoZT1zZSxzZT1vZSxvZT1NKEgsTil9dGhpcy5oWzBdPU0odGhpcy5oWzBd'@;
put 'LG9lKSx0aGlzLmhbMV09TSh0aGlzLmhbMV0sc2UpLHRoaXMuaFsyXT1NKHRoaXMuaFsyXSxoZSksdGhpcy5oWzNdPU0odGhpcy5oWzNdLHVlKSx0aGlzLmhbNF09TSh0aGlzLmhbNF0sY2UpLHRoaXMuaFs1XT1NKHRoaXMuaFs1XSxHKSx0aGlzLmhbNl09TSh0aGlzLmhbNl0sYiksdGhpcy5o'@;
put 'WzddPU0odGhpcy5oWzddLEQpfSxZLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFUpe3JldHVybiJoZXgiPT09VT9hZS50b0hleDMyKHRoaXMuaCwiYmlnIik6YWUuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNjg3MjM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1'@;
put 'KSx4PUYoNDUzMDQpO2Z1bmN0aW9uIG0oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3IG07eC5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEy'@;
put 'Njk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19YWUuaW5oZXJpdHMobSx4KSxhdC5leHBvcnRzPW0sbS5ibG9ja1NpemU9MTAyNCxtLm91dFNpemU9Mzg0LG0uaG1hY1N0cmVu'@;
put 'Z3RoPTE5MixtLnBhZExlbmd0aD0xMjgsbS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihNKXtyZXR1cm4iaGV4Ij09PU0/YWUudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDQ1MzA0OihhdCxJZSxGKT0+'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDkyMDg1KSxtPUYoNTc3OTgpLGxlPWFlLnJvdHI2NF9oaSxNPWFlLnJvdHI2NF9sbyxPPWFlLnNocjY0X2hpLFI9YWUuc2hyNjRfbG8sej1hZS5zdW02NCxLPWFlLnN1bTY0X2hpLEk9YWUuc3VtNjRfbG8saz1hZS5zdW02NF80X2hp'@;
put 'LEU9YWUuc3VtNjRfNF9sbyxqPWFlLnN1bTY0XzVfaGksVj1hZS5zdW02NF81X2xvLEI9eC5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQw'@;
put 'ODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1'@;
put 'MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkz'@;
put 'Myw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEs'@;
put 'MzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYx'@;
put 'ODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1'@;
put 'MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1Niwz'@;
put 'NzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIy'@;
put 'NzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4'@;
put 'MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4'@;
put 'Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIFgoKXtpZighKHRoaXMgaW5z'@;
put 'dGFuY2VvZiBYKSlyZXR1cm4gbmV3IFg7Qi5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0'@;
put 'LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPVksdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIFUoSCxOLGcsQyxTKXt2YXIgdj1IJmdefkgmUztyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBxKEgs'@;
put 'TixnLEMsUyx2KXt2YXIgcD1OJkNefk4mdjtyZXR1cm4gcDwwJiYocCs9NDI5NDk2NzI5NikscH1mdW5jdGlvbiBlZShILE4sZyxDLFMpe3ZhciB2PUgmZ15IJlNeZyZTO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIHRlKEgsTixnLEMsUyx2KXt2YXIgcD1OJkNeTiZ2'@;
put 'XkMmdjtyZXR1cm4gcDwwJiYocCs9NDI5NDk2NzI5NikscH1mdW5jdGlvbiBvZShILE4pe3ZhciB2PWxlKEgsTiwyOClebGUoTixILDIpXmxlKE4sSCw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBzZShILE4pe3ZhciB2PU0oSCxOLDI4KV5NKE4sSCwyKV5NKE4s'@;
put 'SCw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBoZShILE4pe3ZhciB2PWxlKEgsTiwxNClebGUoSCxOLDE4KV5sZShOLEgsOSk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gdWUoSCxOKXt2YXIgdj1NKEgsTiwxNCleTShILE4sMTgpXk0o'@;
put 'TixILDkpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIGNlKEgsTil7dmFyIHY9bGUoSCxOLDEpXmxlKEgsTiw4KV5PKEgsTiw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBHKEgsTil7dmFyIHY9TShILE4sMSleTShILE4sOCleUihILE4s'@;
put 'Nyk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gYihILE4pe3ZhciB2PWxlKEgsTiwxOSlebGUoTixILDI5KV5PKEgsTiw2KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBEKEgsTil7dmFyIHY9TShILE4sMTkpXk0oTixILDI5KV5SKEgsTiw2'@;
put 'KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1hZS5pbmhlcml0cyhYLEIpLGF0LmV4cG9ydHM9WCxYLmJsb2NrU2l6ZT0xMDI0LFgub3V0U2l6ZT01MTIsWC5obWFjU3RyZW5ndGg9MTkyLFgucGFkTGVuZ3RoPTEyOCxYLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKE4s'@;
put 'Zyl7Zm9yKHZhciBDPXRoaXMuVyxTPTA7UzwzMjtTKyspQ1tTXT1OW2crU107Zm9yKDtTPEMubGVuZ3RoO1MrPTIpe3ZhciB2PWIoQ1tTLTRdLENbUy0zXSkscD1EKENbUy00XSxDW1MtM10pLHc9Q1tTLTE0XSxKPUNbUy0xM10sbmU9Y2UoQ1tTLTMwXSxDW1MtMjldKSxkZT1HKENbUy0zMF0s'@;
put 'Q1tTLTI5XSksZmU9Q1tTLTMyXSx4ZT1DW1MtMzFdO0NbU109ayh2LHAsdyxKLG5lLGRlLGZlLHhlKSxDW1MrMV09RSh2LHAsdyxKLG5lLGRlLGZlLHhlKX19LFgucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTixnKXt0aGlzLl9wcmVwYXJlQmxvY2soTixnKTt2YXIgQz10aGlzLlcsUz10'@;
put 'aGlzLmhbMF0sdj10aGlzLmhbMV0scD10aGlzLmhbMl0sdz10aGlzLmhbM10sSj10aGlzLmhbNF0sbmU9dGhpcy5oWzVdLGRlPXRoaXMuaFs2XSxmZT10aGlzLmhbN10seGU9dGhpcy5oWzhdLExlPXRoaXMuaFs5XSxGZT10aGlzLmhbMTBdLE9lPXRoaXMuaFsxMV0samU9dGhpcy5oWzEyXSxX'@;
put 'ZT10aGlzLmhbMTNdLEtlPXRoaXMuaFsxNF0sWWU9dGhpcy5oWzE1XTttKHRoaXMuay5sZW5ndGg9PT1DLmxlbmd0aCk7Zm9yKHZhciBKZT0wO0plPEMubGVuZ3RoO0plKz0yKXt2YXIgbHQ9S2UsUGU9WWUsYmU9aGUoeGUsTGUpLEFlPXVlKHhlLExlKSxUZT1VKHhlLDAsRmUsMCxqZSkscWU9'@;
put 'cSgwLExlLDAsT2UsMCxXZSksWGU9dGhpcy5rW0plXSxVZT10aGlzLmtbSmUrMV0saHQ9Q1tKZV0sTWU9Q1tKZSsxXSxEZT1qKGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0LE1lKSx6ZT1WKGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0LE1lKTtsdD1vZShTLHYpLFBlPXNlKFMsdiksYmU9'@;
put 'ZWUoUywwLHAsMCxKKSxBZT10ZSgwLHYsMCx3LDAsbmUpO3ZhciBpdD1LKGx0LFBlLGJlLEFlKSx1dD1JKGx0LFBlLGJlLEFlKTtLZT1qZSxZZT1XZSxqZT1GZSxXZT1PZSxGZT14ZSxPZT1MZSx4ZT1LKGRlLGZlLERlLHplKSxMZT1JKGZlLGZlLERlLHplKSxkZT1KLGZlPW5lLEo9cCxuZT13'@;
put 'LHA9Uyx3PXYsUz1LKERlLHplLGl0LHV0KSx2PUkoRGUsemUsaXQsdXQpfXoodGhpcy5oLDAsUyx2KSx6KHRoaXMuaCwyLHAsdykseih0aGlzLmgsNCxKLG5lKSx6KHRoaXMuaCw2LGRlLGZlKSx6KHRoaXMuaCw4LHhlLExlKSx6KHRoaXMuaCwxMCxGZSxPZSkseih0aGlzLmgsMTIsamUsV2Up'@;
put 'LHoodGhpcy5oLDE0LEtlLFllKX0sWC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihOKXtyZXR1cm4iaGV4Ij09PU4/YWUudG9IZXgzMih0aGlzLmgsImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDcyMjE6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciB4PUYoMTk4NzUp'@;
put 'LnJvdHIzMjtmdW5jdGlvbiBsZShrLEUsail7cmV0dXJuIGsmRV5+ayZqfWZ1bmN0aW9uIE0oayxFLGope3JldHVybiBrJkVeayZqXkUman1mdW5jdGlvbiBPKGssRSxqKXtyZXR1cm4ga15FXmp9SWUuZnRfMT1mdW5jdGlvbiBtKGssRSxqLFYpe3JldHVybiAwPT09az9sZShFLGosVik6MT09'@;
put 'PWt8fDM9PT1rP08oRSxqLFYpOjI9PT1rP00oRSxqLFYpOnZvaWQgMH0sSWUuY2gzMj1sZSxJZS5tYWozMj1NLEllLnAzMj1PLEllLnMwXzI1Nj1mdW5jdGlvbiBSKGspe3JldHVybiB4KGssMileeChrLDEzKV54KGssMjIpfSxJZS5zMV8yNTY9ZnVuY3Rpb24geihrKXtyZXR1cm4geChrLDYp'@;
put 'XngoaywxMSleeChrLDI1KX0sSWUuZzBfMjU2PWZ1bmN0aW9uIEsoayl7cmV0dXJuIHgoayw3KV54KGssMTgpXms+Pj4zfSxJZS5nMV8yNTY9ZnVuY3Rpb24gSShrKXtyZXR1cm4geChrLDE3KV54KGssMTkpXms+Pj4xMH19LDE5ODc1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9'@;
put 'Rig1Nzc5OCkseD1GKDY2Njk4KTtmdW5jdGlvbiBtKEQsSCl7cmV0dXJuISg1NTI5NiE9KDY0NTEyJkQuY2hhckNvZGVBdChIKSl8fEg8MHx8SCsxPj1ELmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImRC5jaGFyQ29kZUF0KEgrMSkpfWZ1bmN0aW9uIE8oRCl7cmV0dXJuKEQ+Pj4yNHxEPj4+OCY2'@;
put 'NTI4MHxEPDw4JjE2NzExNjgwfCgyNTUmRCk8PDI0KT4+PjB9ZnVuY3Rpb24geihEKXtyZXR1cm4gMT09PUQubGVuZ3RoPyIwIitEOkR9ZnVuY3Rpb24gSyhEKXtyZXR1cm4gNz09PUQubGVuZ3RoPyIwIitEOjY9PT1ELmxlbmd0aD8iMDAiK0Q6NT09PUQubGVuZ3RoPyIwMDAiK0Q6ND09PUQu'@;
put 'bGVuZ3RoPyIwMDAwIitEOjM9PT1ELmxlbmd0aD8iMDAwMDAiK0Q6Mj09PUQubGVuZ3RoPyIwMDAwMDAiK0Q6MT09PUQubGVuZ3RoPyIwMDAwMDAwIitEOkR9SWUuaW5oZXJpdHM9eCxJZS50b0FycmF5PWZ1bmN0aW9uIGxlKEQsSCl7aWYoQXJyYXkuaXNBcnJheShEKSlyZXR1cm4gRC5zbGlj'@;
put 'ZSgpO2lmKCFEKXJldHVybltdO3ZhciBOPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgRClpZihIKXtpZigiaGV4Ij09PUgpZm9yKChEPUQucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoRD0iMCIrRCksQz0wO0M8RC5sZW5ndGg7Qys9MilOLnB1c2gocGFyc2VJbnQo'@;
put 'RFtDXStEW0MrMV0sMTYpKX1lbHNlIGZvcih2YXIgZz0wLEM9MDtDPEQubGVuZ3RoO0MrKyl7dmFyIFM9RC5jaGFyQ29kZUF0KEMpO1M8MTI4P05bZysrXT1TOlM8MjA0OD8oTltnKytdPVM+PjZ8MTkyLE5bZysrXT02MyZTfDEyOCk6bShELEMpPyhTPTY1NTM2KygoMTAyMyZTKTw8MTApKygx'@;
put 'MDIzJkQuY2hhckNvZGVBdCgrK0MpKSxOW2crK109Uz4+MTh8MjQwLE5bZysrXT1TPj4xMiY2M3wxMjgsTltnKytdPVM+PjYmNjN8MTI4LE5bZysrXT02MyZTfDEyOCk6KE5bZysrXT1TPj4xMnwyMjQsTltnKytdPVM+PjYmNjN8MTI4LE5bZysrXT02MyZTfDEyOCl9ZWxzZSBmb3IoQz0wO0M8'@;
put 'RC5sZW5ndGg7QysrKU5bQ109MHxEW0NdO3JldHVybiBOfSxJZS50b0hleD1mdW5jdGlvbiBNKEQpe2Zvcih2YXIgSD0iIixOPTA7TjxELmxlbmd0aDtOKyspSCs9eihEW05dLnRvU3RyaW5nKDE2KSk7cmV0dXJuIEh9LEllLmh0b25sPU8sSWUudG9IZXgzMj1mdW5jdGlvbiBSKEQsSCl7Zm9y'@;
put 'KHZhciBOPSIiLGc9MDtnPEQubGVuZ3RoO2crKyl7dmFyIEM9RFtnXTsibGl0dGxlIj09PUgmJihDPU8oQykpLE4rPUsoQy50b1N0cmluZygxNikpfXJldHVybiBOfSxJZS56ZXJvMj16LEllLnplcm84PUssSWUuam9pbjMyPWZ1bmN0aW9uIEkoRCxILE4sZyl7dmFyIEM9Ti1IO2FlKEMlND09'@;
put 'MCk7Zm9yKHZhciBTPW5ldyBBcnJheShDLzQpLHY9MCxwPUg7djxTLmxlbmd0aDt2KysscCs9NClTW3ZdPSgiYmlnIj09PWc/RFtwXTw8MjR8RFtwKzFdPDwxNnxEW3ArMl08PDh8RFtwKzNdOkRbcCszXTw8MjR8RFtwKzJdPDwxNnxEW3ArMV08PDh8RFtwXSk+Pj4wO3JldHVybiBTfSxJZS5z'@;
put 'cGxpdDMyPWZ1bmN0aW9uIGsoRCxIKXtmb3IodmFyIE49bmV3IEFycmF5KDQqRC5sZW5ndGgpLGc9MCxDPTA7ZzxELmxlbmd0aDtnKyssQys9NCl7dmFyIFM9RFtnXTsiYmlnIj09PUg/KE5bQ109Uz4+PjI0LE5bQysxXT1TPj4+MTYmMjU1LE5bQysyXT1TPj4+OCYyNTUsTltDKzNdPTI1NSZT'@;
put 'KTooTltDKzNdPVM+Pj4yNCxOW0MrMl09Uz4+PjE2JjI1NSxOW0MrMV09Uz4+PjgmMjU1LE5bQ109MjU1JlMpfXJldHVybiBOfSxJZS5yb3RyMzI9ZnVuY3Rpb24gRShELEgpe3JldHVybiBEPj4+SHxEPDwzMi1IfSxJZS5yb3RsMzI9ZnVuY3Rpb24gaihELEgpe3JldHVybiBEPDxIfEQ+Pj4z'@;
put 'Mi1IfSxJZS5zdW0zMj1mdW5jdGlvbiBWKEQsSCl7cmV0dXJuIEQrSD4+PjB9LEllLnN1bTMyXzM9ZnVuY3Rpb24gQihELEgsTil7cmV0dXJuIEQrSCtOPj4+MH0sSWUuc3VtMzJfND1mdW5jdGlvbiBZKEQsSCxOLGcpe3JldHVybiBEK0grTitnPj4+MH0sSWUuc3VtMzJfNT1mdW5jdGlvbiBY'@;
put 'KEQsSCxOLGcsQyl7cmV0dXJuIEQrSCtOK2crQz4+PjB9LEllLnN1bTY0PWZ1bmN0aW9uIFUoRCxILE4sZyl7dmFyIHY9ZytEW0grMV0+Pj4wO0RbSF09KHY8Zz8xOjApK04rRFtIXT4+PjAsRFtIKzFdPXZ9LEllLnN1bTY0X2hpPWZ1bmN0aW9uIHEoRCxILE4sZyl7cmV0dXJuKEgrZz4+PjA8'@;
put 'SD8xOjApK0QrTj4+PjB9LEllLnN1bTY0X2xvPWZ1bmN0aW9uIGVlKEQsSCxOLGcpe3JldHVybiBIK2c+Pj4wfSxJZS5zdW02NF80X2hpPWZ1bmN0aW9uIHRlKEQsSCxOLGcsQyxTLHYscCl7dmFyIHc9MCxKPUg7cmV0dXJuIHcrPShKPUorZz4+PjApPEg/MTowLHcrPShKPUorUz4+PjApPFM/'@;
put 'MTowLEQrTitDK3YrKHcrPShKPUorcD4+PjApPHA/MTowKT4+PjB9LEllLnN1bTY0XzRfbG89ZnVuY3Rpb24gb2UoRCxILE4sZyxDLFMsdixwKXtyZXR1cm4gSCtnK1MrcD4+PjB9LEllLnN1bTY0XzVfaGk9ZnVuY3Rpb24gc2UoRCxILE4sZyxDLFMsdixwLHcsSil7dmFyIG5lPTAsZGU9SDty'@;
put 'ZXR1cm4gbmUrPShkZT1kZStnPj4+MCk8SD8xOjAsbmUrPShkZT1kZStTPj4+MCk8Uz8xOjAsbmUrPShkZT1kZStwPj4+MCk8cD8xOjAsRCtOK0Mrdit3KyhuZSs9KGRlPWRlK0o+Pj4wKTxKPzE6MCk+Pj4wfSxJZS5zdW02NF81X2xvPWZ1bmN0aW9uIGhlKEQsSCxOLGcsQyxTLHYscCx3LEop'@;
put 'e3JldHVybiBIK2crUytwK0o+Pj4wfSxJZS5yb3RyNjRfaGk9ZnVuY3Rpb24gdWUoRCxILE4pe3JldHVybihIPDwzMi1OfEQ+Pj5OKT4+PjB9LEllLnJvdHI2NF9sbz1mdW5jdGlvbiBjZShELEgsTil7cmV0dXJuKEQ8PDMyLU58SD4+Pk4pPj4+MH0sSWUuc2hyNjRfaGk9ZnVuY3Rpb24gRyhE'@;
put 'LEgsTil7cmV0dXJuIEQ+Pj5OfSxJZS5zaHI2NF9sbz1mdW5jdGlvbiBiKEQsSCxOKXtyZXR1cm4oRDw8MzItTnxIPj4+Tik+Pj4wfX0sOTI0NDc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDcxMDc2KSx4PUYoNzgyNDcpLG09Rig1Nzc5OCk7ZnVuY3Rpb24gbGUoTSl7aWYo'@;
put 'ISh0aGlzIGluc3RhbmNlb2YgbGUpKXJldHVybiBuZXcgbGUoTSk7dGhpcy5oYXNoPU0uaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISFNLnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PU0ubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJl'@;
put 'bmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIE89eC50b0FycmF5KE0uZW50cm9weSxNLmVudHJvcHlFbmN8fCJoZXgiKSxSPXgudG9BcnJheShNLm5vbmNlLE0ubm9uY2VFbmN8fCJoZXgiKSx6PXgudG9B'@;
put 'cnJheShNLnBlcnMsTS5wZXJzRW5jfHwiaGV4Iik7bShPLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChPLFIseil9YXQuZXhwb3J0cz1sZSxsZS5wcm90b3R5cGUu'@;
put 'X2luaXQ9ZnVuY3Rpb24oTyxSLHope3ZhciBLPU8uY29uY2F0KFIpLmNvbmNhdCh6KTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBJPTA7STx0aGlzLlYubGVuZ3RoO0krKyl0aGlzLktbSV09MCx0aGlzLlZb'@;
put 'SV09MTt0aGlzLl91cGRhdGUoSyksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LGxlLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYWUuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sbGUucHJvdG90eXBlLl91cGRhdGU9ZnVu'@;
put 'Y3Rpb24oTyl7dmFyIFI9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO08mJihSPVIudXBkYXRlKE8pKSx0aGlzLks9Ui5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLE8mJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0'@;
put 'ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShPKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sbGUucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihPLFIseixLKXsic3RyaW5nIiE9dHlwZW9mIFImJihLPXosej1SLFI9bnVsbCksTz14'@;
put 'LnRvQXJyYXkoTyxSKSx6PXgudG9BcnJheSh6LEspLG0oTy5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShPLmNvbmNhdCh6fHxbXSkpLHRoaXMuX3Jlc2VlZD0x'@;
put 'fSxsZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oTyxSLHosSyl7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIFImJihLPXosej1SLFI9bnVsbCkseiYmKHo9eC50b0Fy'@;
put 'cmF5KHosS3x8ImhleCIpLHRoaXMuX3VwZGF0ZSh6KSk7Zm9yKHZhciBJPVtdO0kubGVuZ3RoPE87KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksST1JLmNvbmNhdCh0aGlzLlYpO3ZhciBrPUkuc2xpY2UoMCxPKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHopLHRo'@;
put 'aXMuX3Jlc2VlZCsrLHguZW5jb2RlKGssUil9fSw1NTgzMzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcjtJZS5fZGJjcz1LO2Zvcih2YXIgeD0tMSxtPS0yLGxlPS0xMCxNPS0xZTMsTz1uZXcgQXJyYXkoMjU2KSx6PTA7ejwyNTY7eisrKU9bel09eDtm'@;
put 'dW5jdGlvbiBLKGosVil7aWYodGhpcy5lbmNvZGluZ05hbWU9ai5lbmNvZGluZ05hbWUsIWopdGhyb3cgbmV3IEVycm9yKCJEQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLiIpO2lmKCFqLnRhYmxlKXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgJyIrdGhpcy5lbmNvZGlu'@;
put 'Z05hbWUrIicgaGFzIG5vIGRhdGEuIik7dmFyIEI9ai50YWJsZSgpO3RoaXMuZGVjb2RlVGFibGVzPVtdLHRoaXMuZGVjb2RlVGFibGVzWzBdPU8uc2xpY2UoMCksdGhpcy5kZWNvZGVUYWJsZVNlcT1bXTtmb3IodmFyIFk9MDtZPEIubGVuZ3RoO1krKyl0aGlzLl9hZGREZWNvZGVDaHVuayhC'@;
put 'W1ldKTt0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1WLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmVuY29kZVRhYmxlPVtdLHRoaXMuZW5jb2RlVGFibGVTZXE9W107dmFyIFg9e307aWYoai5lbmNvZGVTa2lwVmFscylmb3IoWT0wO1k8ai5lbmNvZGVTa2lwVmFscy5sZW5ndGg7WSsrKXt2YXIg'@;
put 'VT1qLmVuY29kZVNraXBWYWxzW1ldO2lmKCJudW1iZXIiPT10eXBlb2YgVSlYW1VdPSEwO2Vsc2UgZm9yKHZhciBxPVUuZnJvbTtxPD1VLnRvO3ErKylYW3FdPSEwfWlmKHRoaXMuX2ZpbGxFbmNvZGVUYWJsZSgwLDAsWCksai5lbmNvZGVBZGQpZm9yKHZhciBlZSBpbiBqLmVuY29kZUFkZClP'@;
put 'YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoai5lbmNvZGVBZGQsZWUpJiZ0aGlzLl9zZXRFbmNvZGVDaGFyKGVlLmNoYXJDb2RlQXQoMCksai5lbmNvZGVBZGRbZWVdKTtpZih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdW1YuZGVmYXVsdENoYXJTaW5nbGVC'@;
put 'eXRlLmNoYXJDb2RlQXQoMCldLHRoaXMuZGVmQ2hhclNCPT09eCYmKHRoaXMuZGVmQ2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bIj8iXSksdGhpcy5kZWZDaGFyU0I9PT14JiYodGhpcy5kZWZDaGFyU0I9Ij8iLmNoYXJDb2RlQXQoMCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBqLmdiMTgwMzAp'@;
put 'e3RoaXMuZ2IxODAzMD1qLmdiMTgwMzAoKTt2YXIgdGU9dGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLG9lPXRoaXMuZGVjb2RlVGFibGVzW3RlXT1PLnNsaWNlKDApLHNlPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxoZT10aGlzLmRlY29kZVRhYmxlc1tzZV09Ty5zbGljZSgwKTtmb3IoWT0x'@;
put 'Mjk7WTw9MjU0O1krKyl7dmFyIGNlPXRoaXMuZGVjb2RlVGFibGVzW00tdGhpcy5kZWNvZGVUYWJsZXNbMF1bWV1dO2ZvcihxPTQ4O3E8PTU3O3ErKyljZVtxXT1NLXRlfWZvcihZPTEyOTtZPD0yNTQ7WSsrKW9lW1ldPU0tc2U7Zm9yKFk9NDg7WTw9NTc7WSsrKWhlW1ldPW19fWZ1bmN0aW9u'@;
put 'IEkoaixWKXt0aGlzLmxlYWRTdXJyb2dhdGU9LTEsdGhpcy5zZXFPYmo9dm9pZCAwLHRoaXMuZW5jb2RlVGFibGU9Vi5lbmNvZGVUYWJsZSx0aGlzLmVuY29kZVRhYmxlU2VxPVYuZW5jb2RlVGFibGVTZXEsdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU9Vi5kZWZDaGFyU0IsdGhpcy5nYjE4'@;
put 'MDMwPVYuZ2IxODAzMH1mdW5jdGlvbiBrKGosVil7dGhpcy5ub2RlSWR4PTAsdGhpcy5wcmV2QnVmPWFlLmFsbG9jKDApLHRoaXMuZGVjb2RlVGFibGVzPVYuZGVjb2RlVGFibGVzLHRoaXMuZGVjb2RlVGFibGVTZXE9Vi5kZWNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1W'@;
put 'LmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmdiMTgwMzA9Vi5nYjE4MDMwfWZ1bmN0aW9uIEUoaixWKXtpZihqWzBdPlYpcmV0dXJuLTE7Zm9yKHZhciBCPTAsWT1qLmxlbmd0aDtCPFktMTspe3ZhciBYPUIrTWF0aC5mbG9vcigoWS1CKzEpLzIpO2pbWF08PVY/Qj1YOlk9WH1yZXR1cm4gQn1L'@;
put 'LnByb3RvdHlwZS5lbmNvZGVyPUksSy5wcm90b3R5cGUuZGVjb2Rlcj1rLEsucHJvdG90eXBlLl9nZXREZWNvZGVUcmllTm9kZT1mdW5jdGlvbihqKXtmb3IodmFyIFY9W107aj4wO2o+Pj04KVYucHVzaCgyNTUmaik7MD09Vi5sZW5ndGgmJlYucHVzaCgwKTtmb3IodmFyIEI9dGhpcy5kZWNv'@;
put 'ZGVUYWJsZXNbMF0sWT1WLmxlbmd0aC0xO1k+MDtZLS0pe3ZhciBYPUJbVltZXV07aWYoWD09eClCW1ZbWV1dPU0tdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVzLnB1c2goQj1PLnNsaWNlKDApKTtlbHNle2lmKCEoWDw9TSkpdGhyb3cgbmV3IEVycm9yKCJPdmVy'@;
put 'd3JpdGUgYnl0ZSBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIsIGFkZHI6ICIrai50b1N0cmluZygxNikpO0I9dGhpcy5kZWNvZGVUYWJsZXNbTS1YXX19cmV0dXJuIEJ9LEsucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuaz1mdW5jdGlvbihqKXt2YXIgVj1wYXJzZUludChqWzBdLDE2KSxCPXRo'@;
put 'aXMuX2dldERlY29kZVRyaWVOb2RlKFYpO1YmPTI1NTtmb3IodmFyIFk9MTtZPGoubGVuZ3RoO1krKyl7dmFyIFg9altZXTtpZigic3RyaW5nIj09dHlwZW9mIFgpZm9yKHZhciBVPTA7VTxYLmxlbmd0aDspe3ZhciBxPVguY2hhckNvZGVBdChVKyspO2lmKDU1Mjk2PD1xJiZxPDU2MzIwKXt2'@;
put 'YXIgZWU9WC5jaGFyQ29kZUF0KFUrKyk7aWYoISg1NjMyMDw9ZWUmJmVlPDU3MzQ0KSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBzdXJyb2dhdGUgcGFpciBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitqWzBdKTtCW1YrK109NjU1MzYrMTAyNCoocS01NTI5NikrKGVl'@;
put 'LTU2MzIwKX1lbHNlIGlmKDQwODA8cSYmcTw9NDA5NSl7Zm9yKHZhciB0ZT00MDk1LXErMixvZT1bXSxzZT0wO3NlPHRlO3NlKyspb2UucHVzaChYLmNoYXJDb2RlQXQoVSsrKSk7QltWKytdPWxlLXRoaXMuZGVjb2RlVGFibGVTZXEubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChv'@;
put 'ZSl9ZWxzZSBCW1YrK109cX1lbHNle2lmKCJudW1iZXIiIT10eXBlb2YgWCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB0eXBlICciK3R5cGVvZiBYKyInIGdpdmVuIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAiK2pbMF0pO3ZhciBoZT1CW1YtMV0rMTtmb3IoVT0wO1U8'@;
put 'WDtVKyspQltWKytdPWhlKyt9fWlmKFY+MjU1KXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IGNodW5rIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBhZGRyICIralswXSsiOiB0b28gbG9uZyIrVil9LEsucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQ9ZnVuY3Rpb24oail7dmFyIFY9'@;
put 'aj4+ODtyZXR1cm4gdm9pZCAwPT09dGhpcy5lbmNvZGVUYWJsZVtWXSYmKHRoaXMuZW5jb2RlVGFibGVbVl09Ty5zbGljZSgwKSksdGhpcy5lbmNvZGVUYWJsZVtWXX0sSy5wcm90b3R5cGUuX3NldEVuY29kZUNoYXI9ZnVuY3Rpb24oaixWKXt2YXIgQj10aGlzLl9nZXRFbmNvZGVCdWNrZXQo'@;
put 'aiksWT0yNTUmajtCW1ldPD1sZT90aGlzLmVuY29kZVRhYmxlU2VxW2xlLUJbWV1dWy0xXT1WOkJbWV09PXgmJihCW1ldPVYpfSxLLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2U9ZnVuY3Rpb24oaixWKXt2YXIgVSxCPWpbMF0sWT10aGlzLl9nZXRFbmNvZGVCdWNrZXQoQiksWD0yNTUm'@;
put 'QjtZW1hdPD1sZT9VPXRoaXMuZW5jb2RlVGFibGVTZXFbbGUtWVtYXV06KFU9e30sWVtYXSE9PXgmJihVWy0xXT1ZW1hdKSxZW1hdPWxlLXRoaXMuZW5jb2RlVGFibGVTZXEubGVuZ3RoLHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChVKSk7Zm9yKHZhciBxPTE7cTxqLmxlbmd0aC0xO3ErKyl7'@;
put 'dmFyIGVlPVVbQl07Im9iamVjdCI9PXR5cGVvZiBlZT9VPWVlOihVPVVbQl09e30sdm9pZCAwIT09ZWUmJihVWy0xXT1lZSkpfVVbQj1qW2oubGVuZ3RoLTFdXT1WfSxLLnByb3RvdHlwZS5fZmlsbEVuY29kZVRhYmxlPWZ1bmN0aW9uKGosVixCKXtmb3IodmFyIFk9dGhpcy5kZWNvZGVUYWJs'@;
put 'ZXNbal0sWD0wO1g8MjU2O1grKyl7dmFyIFU9WVtYXSxxPVYrWDtCW3FdfHwoVT49MD90aGlzLl9zZXRFbmNvZGVDaGFyKFUscSk6VTw9TT90aGlzLl9maWxsRW5jb2RlVGFibGUoTS1VLHE8PDgsQik6VTw9bGUmJnRoaXMuX3NldEVuY29kZVNlcXVlbmNlKHRoaXMuZGVjb2RlVGFibGVTZXFb'@;
put 'bGUtVV0scSkpfX0sSS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oail7Zm9yKHZhciBWPWFlLmFsbG9jKGoubGVuZ3RoKih0aGlzLmdiMTgwMzA/NDozKSksQj10aGlzLmxlYWRTdXJyb2dhdGUsWT10aGlzLnNlcU9iaixYPS0xLFU9MCxxPTA7Oyl7aWYoLTE9PT1YKXtpZihVPT1qLmxlbmd0'@;
put 'aClicmVhazt2YXIgZWU9ai5jaGFyQ29kZUF0KFUrKyl9ZWxzZSBlZT1YLFg9LTE7aWYoNTUyOTY8PWVlJiZlZTw1NzM0NClpZihlZTw1NjMyMCl7aWYoLTE9PT1CKXtCPWVlO2NvbnRpbnVlfUI9ZWUsZWU9eH1lbHNlLTEhPT1CPyhlZT02NTUzNisxMDI0KihCLTU1Mjk2KSsoZWUtNTYzMjAp'@;
put 'LEI9LTEpOmVlPXg7ZWxzZS0xIT09QiYmKFg9ZWUsZWU9eCxCPS0xKTt2YXIgdGU9eDtpZih2b2lkIDAhPT1ZJiZlZSE9eCl7dmFyIG9lPVlbZWVdO2lmKCJvYmplY3QiPT10eXBlb2Ygb2Upe1k9b2U7Y29udGludWV9Im51bWJlciI9PXR5cGVvZiBvZT90ZT1vZTpudWxsPT1vZSYmdm9pZCAw'@;
put 'IT09KG9lPVlbLTFdKSYmKHRlPW9lLFg9ZWUpLFk9dm9pZCAwfWVsc2UgaWYoZWU+PTApe3ZhciBzZT10aGlzLmVuY29kZVRhYmxlW2VlPj44XTtpZih2b2lkIDAhPT1zZSYmKHRlPXNlWzI1NSZlZV0pLHRlPD1sZSl7WT10aGlzLmVuY29kZVRhYmxlU2VxW2xlLXRlXTtjb250aW51ZX1pZih0'@;
put 'ZT09eCYmdGhpcy5nYjE4MDMwKXt2YXIgaGU9RSh0aGlzLmdiMTgwMzAudUNoYXJzLGVlKTtpZigtMSE9aGUpe3RlPXRoaXMuZ2IxODAzMC5nYkNoYXJzW2hlXSsoZWUtdGhpcy5nYjE4MDMwLnVDaGFyc1toZV0pLFZbcSsrXT0xMjkrTWF0aC5mbG9vcih0ZS8xMjYwMCksdGUlPTEyNjAwLFZb'@;
put 'cSsrXT00OCtNYXRoLmZsb29yKHRlLzEyNjApLHRlJT0xMjYwLFZbcSsrXT0xMjkrTWF0aC5mbG9vcih0ZS8xMCksVltxKytdPTQ4Kyh0ZSU9MTApO2NvbnRpbnVlfX19dGU9PT14JiYodGU9dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUpLHRlPDI1Nj9WW3ErK109dGU6dGU8NjU1MzY/KFZb'@;
put 'cSsrXT10ZT4+OCxWW3ErK109MjU1JnRlKTooVltxKytdPXRlPj4xNixWW3ErK109dGU+PjgmMjU1LFZbcSsrXT0yNTUmdGUpfXJldHVybiB0aGlzLnNlcU9iaj1ZLHRoaXMubGVhZFN1cnJvZ2F0ZT1CLFYuc2xpY2UoMCxxKX0sSS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoLTEhPT10'@;
put 'aGlzLmxlYWRTdXJyb2dhdGV8fHZvaWQgMCE9PXRoaXMuc2VxT2JqKXt2YXIgaj1hZS5hbGxvYygxMCksVj0wO2lmKHRoaXMuc2VxT2JqKXt2YXIgQj10aGlzLnNlcU9ialstMV07dm9pZCAwIT09QiYmKEI8MjU2P2pbVisrXT1COihqW1YrK109Qj4+OCxqW1YrK109MjU1JkIpKSx0aGlzLnNl'@;
put 'cU9iaj12b2lkIDB9cmV0dXJuLTEhPT10aGlzLmxlYWRTdXJyb2dhdGUmJihqW1YrK109dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUsdGhpcy5sZWFkU3Vycm9nYXRlPS0xKSxqLnNsaWNlKDAsVil9fSxJLnByb3RvdHlwZS5maW5kSWR4PUUsay5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24o'@;
put 'ail7dmFyIFY9YWUuYWxsb2MoMipqLmxlbmd0aCksQj10aGlzLm5vZGVJZHgsWT10aGlzLnByZXZCdWYsWD10aGlzLnByZXZCdWYubGVuZ3RoLFU9LXRoaXMucHJldkJ1Zi5sZW5ndGg7WD4wJiYoWT1hZS5jb25jYXQoW1ksai5zbGljZSgwLDEwKV0pKTtmb3IodmFyIGVlPTAsdGU9MDtlZTxq'@;
put 'Lmxlbmd0aDtlZSsrKXt2YXIgcSxvZT1lZT49MD9qW2VlXTpZW2VlK1hdO2lmKCEoKHE9dGhpcy5kZWNvZGVUYWJsZXNbQl1bb2VdKT49MCkpaWYocT09PXgpZWU9VSxxPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7ZWxzZSBpZihxPT09bSl7dmFyIHNlPVU+PTA/ai5z'@;
put 'bGljZShVLGVlKzEpOlkuc2xpY2UoVStYLGVlKzErWCksaGU9MTI2MDAqKHNlWzBdLTEyOSkrMTI2MCooc2VbMV0tNDgpKzEwKihzZVsyXS0xMjkpKyhzZVszXS00OCksdWU9RSh0aGlzLmdiMTgwMzAuZ2JDaGFycyxoZSk7cT10aGlzLmdiMTgwMzAudUNoYXJzW3VlXStoZS10aGlzLmdiMTgw'@;
put 'MzAuZ2JDaGFyc1t1ZV19ZWxzZXtpZihxPD1NKXtCPU0tcTtjb250aW51ZX1pZighKHE8PWxlKSl0aHJvdyBuZXcgRXJyb3IoImljb252LWxpdGUgaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgZGVjb2RpbmcgdGFibGUgdmFsdWUgIitxKyIgYXQgIitCKyIvIitvZSk7Zm9yKHZhciBjZT10aGlz'@;
put 'LmRlY29kZVRhYmxlU2VxW2xlLXFdLEc9MDtHPGNlLmxlbmd0aC0xO0crKylWW3RlKytdPTI1NSYocT1jZVtHXSksVlt0ZSsrXT1xPj44O3E9Y2VbY2UubGVuZ3RoLTFdfWlmKHE+NjU1MzUpe3EtPTY1NTM2O3ZhciBiPTU1Mjk2K01hdGguZmxvb3IocS8xMDI0KTtWW3RlKytdPTI1NSZiLFZb'@;
put 'dGUrK109Yj4+OCxxPTU2MzIwK3ElMTAyNH1WW3RlKytdPTI1NSZxLFZbdGUrK109cT4+OCxCPTAsVT1lZSsxfXJldHVybiB0aGlzLm5vZGVJZHg9Qix0aGlzLnByZXZCdWY9VT49MD9qLnNsaWNlKFUpOlkuc2xpY2UoVStYKSxWLnNsaWNlKDAsdGUpLnRvU3RyaW5nKCJ1Y3MyIil9LGsucHJv'@;
put 'dG90eXBlLmVuZD1mdW5jdGlvbigpe2Zvcih2YXIgaj0iIjt0aGlzLnByZXZCdWYubGVuZ3RoPjA7KXtqKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZTt2YXIgVj10aGlzLnByZXZCdWYuc2xpY2UoMSk7dGhpcy5wcmV2QnVmPWFlLmFsbG9jKDApLHRoaXMubm9kZUlkeD0wLFYubGVuZ3RoPjAm'@;
put 'JihqKz10aGlzLndyaXRlKFYpKX1yZXR1cm4gdGhpcy5ub2RlSWR4PTAsan19LDMyNTU0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXtzaGlmdGppczp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMjcwMTQpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5'@;
put 'MiwiXHUyMDNlIjoxMjZ9LGVuY29kZVNraXBWYWxzOlt7ZnJvbTo2MDczNix0bzo2MzgwOH1dfSxjc3NoaWZ0amlzOiJzaGlmdGppcyIsbXNrYW5qaToic2hpZnRqaXMiLHNqaXM6InNoaWZ0amlzIix3aW5kb3dzMzFqOiJzaGlmdGppcyIsbXMzMWo6InNoaWZ0amlzIix4c2ppczoic2hpZnRq'@;
put 'aXMiLHdpbmRvd3M5MzI6InNoaWZ0amlzIixtczkzMjoic2hpZnRqaXMiLDkzMjoic2hpZnRqaXMiLGNwOTMyOiJzaGlmdGppcyIsZXVjanA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDMxNTMyKX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fX0s'@;
put 'Z2IyMzEyOiJjcDkzNiIsZ2IyMzEyODA6ImNwOTM2IixnYjIzMTIxOTgwOiJjcDkzNiIsY3NnYjIzMTI6ImNwOTM2Iixjc2lzbzU4Z2IyMzEyODA6ImNwOTM2IixldWNjbjoiY3A5MzYiLHdpbmRvd3M5MzY6ImNwOTM2IixtczkzNjoiY3A5MzYiLDkzNjoiY3A5MzYiLGNwOTM2Ont0eXBlOiJf'@;
put 'ZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigxMzMzNil9fSxnYms6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDEzMzM2KS5jb25jYXQoRig0NDM0NikpfX0seGdiazoiZ2JrIixpc29pcjU4OiJnYmsiLGdiMTgwMzA6e3R5cGU6Il9kYmNzIix0YWJsZTpm'@;
put 'dW5jdGlvbigpe3JldHVybiBGKDEzMzM2KS5jb25jYXQoRig0NDM0NikpfSxnYjE4MDMwOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMzYyNTgpfSxlbmNvZGVTa2lwVmFsczpbMTI4XSxlbmNvZGVBZGQ6eyJcdTIwYWMiOjQxNjk5fX0sY2hpbmVzZToiZ2IxODAzMCIsd2luZG93czk0OToiY3A5NDki'@;
put 'LG1zOTQ5OiJjcDk0OSIsOTQ5OiJjcDk0OSIsY3A5NDk6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDc3MzQ4KX19LGNzZXVja3I6ImNwOTQ5Iixjc2tzYzU2MDExOTg3OiJjcDk0OSIsZXVja3I6ImNwOTQ5Iixpc29pcjE0OToiY3A5NDkiLGtvcmVhbjoiY3A5NDki'@;
put 'LGtzYzU2MDExOTg3OiJjcDk0OSIsa3NjNTYwMTE5ODk6ImNwOTQ5Iixrc2M1NjAxOiJjcDk0OSIsd2luZG93czk1MDoiY3A5NTAiLG1zOTUwOiJjcDk1MCIsOTUwOiJjcDk1MCIsY3A5NTA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDc0Mjg0KX19LGJpZzU6ImJp'@;
put 'ZzVoa3NjcyIsYmlnNWhrc2NzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRig3NDI4NCkuY29uY2F0KEYoNjM0ODApKX0sZW5jb2RlU2tpcFZhbHM6WzQxNjc2XX0sY25iaWc1OiJiaWc1aGtzY3MiLGNzYmlnNToiYmlnNWhrc2NzIix4eGJpZzU6ImJpZzVoa3NjcyJ9'@;
put 'fSw0NDY1NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Zm9yKHZhciBhZT1bRigyNzY0OCksRig5Mjg0NCksRig0MzI4MCksRig3ODM1NCksRig3MTc2NCksRig2NDc3MyksRigyMDUwMyksRig1NTgzMyksRigzMjU1NCldLHg9MDt4PGFlLmxlbmd0aDt4Kyspe3ZhciBtPWFlW3hdO2Zvcih2'@;
put 'YXIgbGUgaW4gbSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxsZSkmJihJZVtsZV09bVtsZV0pfX0sMjc2NDg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChLLEkpe3RoaXMuZW5jPUsuZW5jb2RpbmdOYW1l'@;
put 'LHRoaXMuYm9tQXdhcmU9Sy5ib21Bd2FyZSwiYmFzZTY0Ij09PXRoaXMuZW5jP3RoaXMuZW5jb2Rlcj1POiJjZXN1OCI9PT10aGlzLmVuYyYmKHRoaXMuZW5jPSJ1dGY4Iix0aGlzLmVuY29kZXI9UiwiXHV7MWY0YTl9IiE9PWFlLmZyb20oImVkYTBiZGVkYjJhOSIsImhleCIpLnRvU3RyaW5n'@;
put 'KCkmJih0aGlzLmRlY29kZXI9eix0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1JLmRlZmF1bHRDaGFyVW5pY29kZSkpfWF0LmV4cG9ydHM9e3V0Zjg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LGNlc3U4Ont0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1bmljb2RlMTF1dGY4'@;
put 'OiJ1dGY4Iix1Y3MyOnt0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1dGYxNmxlOiJ1Y3MyIixiaW5hcnk6e3R5cGU6Il9pbnRlcm5hbCJ9LGJhc2U2NDp7dHlwZToiX2ludGVybmFsIn0saGV4Ont0eXBlOiJfaW50ZXJuYWwifSxfaW50ZXJuYWw6eH0seC5wcm90b3R5cGUuZW5jb2Rl'@;
put 'cj1NLHgucHJvdG90eXBlLmRlY29kZXI9bGU7dmFyIG09Rig3MjAyNCkucztmdW5jdGlvbiBsZShLLEkpe20uY2FsbCh0aGlzLEkuZW5jKX1mdW5jdGlvbiBNKEssSSl7dGhpcy5lbmM9SS5lbmN9ZnVuY3Rpb24gTyhLLEkpe3RoaXMucHJldlN0cj0iIn1mdW5jdGlvbiBSKEssSSl7fWZ1bmN0'@;
put 'aW9uIHooSyxJKXt0aGlzLmFjYz0wLHRoaXMuY29udEJ5dGVzPTAsdGhpcy5hY2NCeXRlcz0wLHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPUkuZGVmYXVsdENoYXJVbmljb2RlfW0ucHJvdG90eXBlLmVuZHx8KG0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30pLGxlLnByb3RvdHlwZT1tLnBy'@;
put 'b3RvdHlwZSxNLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtyZXR1cm4gYWUuZnJvbShLLHRoaXMuZW5jKX0sTS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXt2YXIgST0oSz10aGlzLnByZXZTdHIrSykubGVuZ3RoLUsubGVuZ3Ro'@;
put 'JTQ7cmV0dXJuIHRoaXMucHJldlN0cj1LLnNsaWNlKEkpLEs9Sy5zbGljZSgwLEkpLGFlLmZyb20oSywiYmFzZTY0Iil9LE8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiBhZS5mcm9tKHRoaXMucHJldlN0ciwiYmFzZTY0Iil9LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEsp'@;
put 'e2Zvcih2YXIgST1hZS5hbGxvYygzKksubGVuZ3RoKSxrPTAsRT0wO0U8Sy5sZW5ndGg7RSsrKXt2YXIgaj1LLmNoYXJDb2RlQXQoRSk7ajwxMjg/SVtrKytdPWo6ajwyMDQ4PyhJW2srK109MTkyKyhqPj4+NiksSVtrKytdPTEyOCsoNjMmaikpOihJW2srK109MjI0KyhqPj4+MTIpLElbaysr'@;
put 'XT0xMjgrKGo+Pj42JjYzKSxJW2srK109MTI4Kyg2MyZqKSl9cmV0dXJuIEkuc2xpY2UoMCxrKX0sUi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSx6LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtmb3IodmFyIEk9dGhpcy5hY2Msaz10aGlzLmNvbnRCeXRlcyxFPXRoaXMuYWNjQnl0'@;
put 'ZXMsaj0iIixWPTA7VjxLLmxlbmd0aDtWKyspe3ZhciBCPUtbVl07MTI4IT0oMTkyJkIpPyhrPjAmJihqKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSxrPTApLEI8MTI4P2orPVN0cmluZy5mcm9tQ2hhckNvZGUoQik6QjwyMjQ/KEk9MzEmQixrPTEsRT0xKTpCPDI0MD8oST0xNSZCLGs9MixF'@;
put 'PTEpOmorPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlKTprPjA/KEk9STw8Nnw2MyZCLEUrKywwPT0tLWsmJihqKz0yPT09RSYmSTwxMjgmJkk+MHx8Mz09PUUmJkk8MjA0OD90aGlzLmRlZmF1bHRDaGFyVW5pY29kZTpTdHJpbmcuZnJvbUNoYXJDb2RlKEkpKSk6ais9dGhpcy5kZWZhdWx0Q2hh'@;
put 'clVuaWNvZGV9cmV0dXJuIHRoaXMuYWNjPUksdGhpcy5jb250Qnl0ZXM9ayx0aGlzLmFjY0J5dGVzPUUsan0sei5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIEs9MDtyZXR1cm4gdGhpcy5jb250Qnl0ZXM+MCYmKEsrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlKSxLfX0sNzE3NjQ6KGF0'@;
put 'LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChNLE8pe2lmKCFNKXRocm93IG5ldyBFcnJvcigiU0JDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighTS5jaGFyc3x8MTI4IT09TS5jaGFycy5sZW5ndGgmJjI1NiE9'@;
put 'PU0uY2hhcnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgJyIrTS50eXBlKyInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NikiKTtpZigxMjg9PT1NLmNoYXJzLmxlbmd0aCl7Zm9yKHZhciBSPSIiLHo9MDt6PDEyODt6KyspUis9U3Ry'@;
put 'aW5nLmZyb21DaGFyQ29kZSh6KTtNLmNoYXJzPVIrTS5jaGFyc310aGlzLmRlY29kZUJ1Zj1hZS5mcm9tKE0uY2hhcnMsInVjczIiKTt2YXIgSz1hZS5hbGxvYyg2NTUzNixPLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtmb3Ioej0wO3o8TS5jaGFycy5sZW5ndGg7eisr'@;
put 'KUtbTS5jaGFycy5jaGFyQ29kZUF0KHopXT16O3RoaXMuZW5jb2RlQnVmPUt9ZnVuY3Rpb24gbShNLE8pe3RoaXMuZW5jb2RlQnVmPU8uZW5jb2RlQnVmfWZ1bmN0aW9uIGxlKE0sTyl7dGhpcy5kZWNvZGVCdWY9Ty5kZWNvZGVCdWZ9SWUuX3NiY3M9eCx4LnByb3RvdHlwZS5lbmNvZGVyPW0s'@;
put 'eC5wcm90b3R5cGUuZGVjb2Rlcj1sZSxtLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihNKXtmb3IodmFyIE89YWUuYWxsb2MoTS5sZW5ndGgpLFI9MDtSPE0ubGVuZ3RoO1IrKylPW1JdPXRoaXMuZW5jb2RlQnVmW00uY2hhckNvZGVBdChSKV07cmV0dXJuIE99LG0ucHJvdG90eXBlLmVuZD1m'@;
put 'dW5jdGlvbigpe30sbGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKE0pe2Zvcih2YXIgTz10aGlzLmRlY29kZUJ1ZixSPWFlLmFsbG9jKDIqTS5sZW5ndGgpLHo9MCxLPTAsST0wO0k8TS5sZW5ndGg7SSsrKVJbSz0yKkldPU9bej0yKk1bSV1dLFJbSysxXT1PW3orMV07cmV0dXJuIFIudG9T'@;
put 'dHJpbmcoInVjczIiKX0sbGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe319LDIwNTAzOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ezQzNzoiY3A0MzciLDczNzoiY3A3MzciLDc3NToiY3A3NzUiLDg1MDoiY3A4NTAiLDg1MjoiY3A4NTIiLDg1NToiY3A4NTUiLDg1NjoiY3A4NTYi'@;
put 'LDg1NzoiY3A4NTciLDg1ODoiY3A4NTgiLDg2MDoiY3A4NjAiLDg2MToiY3A4NjEiLDg2MjoiY3A4NjIiLDg2MzoiY3A4NjMiLDg2NDoiY3A4NjQiLDg2NToiY3A4NjUiLDg2NjoiY3A4NjYiLDg2OToiY3A4NjkiLDg3NDoid2luZG93czg3NCIsOTIyOiJjcDkyMiIsMTA0NjoiY3AxMDQ2Iiwx'@;
put 'MTI0OiJjcDExMjQiLDExMjU6ImNwMTEyNSIsMTEyOToiY3AxMTI5IiwxMTMzOiJjcDExMzMiLDExNjE6ImNwMTE2MSIsMTE2MjoiY3AxMTYyIiwxMTYzOiJjcDExNjMiLDEyNTA6IndpbmRvd3MxMjUwIiwxMjUxOiJ3aW5kb3dzMTI1MSIsMTI1Mjoid2luZG93czEyNTIiLDEyNTM6IndpbmRv'@;
put 'd3MxMjUzIiwxMjU0OiJ3aW5kb3dzMTI1NCIsMTI1NToid2luZG93czEyNTUiLDEyNTY6IndpbmRvd3MxMjU2IiwxMjU3OiJ3aW5kb3dzMTI1NyIsMTI1ODoid2luZG93czEyNTgiLDI4NTkxOiJpc284ODU5MSIsMjg1OTI6Imlzbzg4NTkyIiwyODU5MzoiaXNvODg1OTMiLDI4NTk0OiJpc284'@;
put 'ODU5NCIsMjg1OTU6Imlzbzg4NTk1IiwyODU5NjoiaXNvODg1OTYiLDI4NTk3OiJpc284ODU5NyIsMjg1OTg6Imlzbzg4NTk4IiwyODU5OToiaXNvODg1OTkiLDI4NjAwOiJpc284ODU5MTAiLDI4NjAxOiJpc284ODU5MTEiLDI4NjAzOiJpc284ODU5MTMiLDI4NjA0OiJpc284ODU5MTQiLDI4'@;
put 'NjA1OiJpc284ODU5MTUiLDI4NjA2OiJpc284ODU5MTYiLHdpbmRvd3M4NzQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1'@;
put 'MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUy'@;
put 'N1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1'@;
put 'MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZCJ9LHdpbjg3NDoid2luZG93czg3NCIsY3A4NzQ6IndpbmRvd3M4NzQiLHdpbmRvd3MxMjUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2'@;
put 'NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4'@;
put 'YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDEx'@;
put 'YVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVk'@;
put 'XHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSx3aW4xMjUwOiJ3aW5kb3dzMTI1MCIsY3AxMjUwOiJ3aW5kb3dzMTI1MCIsd2luZG93czEyNTE6e3R5cGU6Il9zYmNzIixj'@;
put 'aGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUw'@;
put 'NDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0'@;
put 'NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUw'@;
put 'NDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQx'@;
put 'XHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sd2luMTI1MToid2luZG93czEyNTEiLGNwMTI1MToid2luZG93czEyNTEiLHdpbmRvd3MxMjUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1'@;
put 'MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAz'@;
put 'YVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMy'@;
put 'XHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJc'@;
put 'eGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHdpbjEyNTI6IndpbmRvd3MxMjUyIixjcDEyNTI6IndpbmRvd3MxMjUyIix3aW5kb3dzMTI1Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNc'@;
put 'dWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVc'@;
put 'dTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAz'@;
put 'YWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVc'@;
put 'dTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQifSx3aW4xMjUzOiJ3aW5kb3dzMTI1MyIsY3AxMjUzOiJ3aW5kb3dzMTI1MyIsd2luZG93czEyNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUy'@;
put 'MDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4'@;
put 'XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4Yzhc'@;
put 'eGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAx'@;
put 'MWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIn0sd2luMTI1NDoid2luZG93czEyNTQiLGNwMTI1NDoid2luZG93czEyNTQiLHdpbmRvd3MxMjU1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1'@;
put 'MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1'@;
put 'YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdTA1YmFcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZm'@;
put 'ZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSx3aW4xMjU1OiJ3aW5kb3dzMTI1NSIsY3AxMjU1OiJ3aW5kb3dzMTI1NSIsd2luZG93czEyNTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMw'@;
put 'XHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2XHhh'@;
put 'N1x4YThceGE5XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1'@;
put 'MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0'@;
put 'OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiJ9LHdpbjEyNTY6IndpbmRvd3MxMjU2IixjcDEyNTY6IndpbmRv'@;
put 'd3MxMjU2Iix3aW5kb3dzMTI1Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1'@;
put 'MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4Yjdc'@;
put 'eGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1'@;
put 'MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVc'@;
put 'eGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkifSx3aW4xMjU3OiJ3aW5kb3dzMTI1NyIsY3AxMjU3OiJ3aW5kb3dzMTI1NyIsd2luZG93czEyNTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUy'@;
put 'MDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4'@;
put 'YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4Yzlc'@;
put 'eGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4'@;
put 'ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LHdpbjEyNTg6IndpbmRvd3MxMjU4IixjcDEyNTg6IndpbmRvd3MxMjU4Iixpc284ODU5MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJc'@;
put 'eDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4'@;
put 'YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhk'@;
put 'NVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZl'@;
put 'XHhmZiJ9LGNwMjg1OTE6Imlzbzg4NTkxIixpc284ODU5Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFc'@;
put 'eDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAyZDhcdTAxNDFceGE0XHUwMTNkXHUwMTVhXHhhN1x4YThcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNzlceGFkXHUwMTdkXHUwMTdiXHhiMFx1MDEwNVx1MDJkYlx1MDE0Mlx4YjRcdTAxM2VcdTAxNWJcdTAyYzdceGI4XHUwMTYxXHUwMTVm'@;
put 'XHUwMTY1XHUwMTdhXHUwMmRkXHUwMTdlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhk'@;
put 'YVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAx'@;
put 'NzFceGZjXHhmZFx1MDE2M1x1MDJkOSJ9LGNwMjg1OTI6Imlzbzg4NTkyIixpc284ODU5Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5'@;
put 'Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMjZcdTAyZDhceGEzXHhhNFx1ZmZmZFx1MDEyNFx4YTdceGE4XHUwMTMwXHUwMTVlXHUwMTFlXHUwMTM0XHhhZFx1ZmZmZFx1MDE3Ylx4YjBcdTAxMjdceGIyXHhiM1x4YjRceGI1XHUwMTI1XHhiN1x4YjhcdTAx'@;
put 'MzFcdTAxNWZcdTAxMWZcdTAxMzVceGJkXHVmZmZkXHUwMTdjXHhjMFx4YzFceGMyXHVmZmZkXHhjNFx1MDEwYVx1MDEwOFx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1ZmZmZFx4ZDFceGQyXHhkM1x4ZDRcdTAxMjBceGQ2XHhkN1x1MDExY1x4ZDlceGRhXHhkYlx4ZGNc'@;
put 'dTAxNmNcdTAxNWNceGRmXHhlMFx4ZTFceGUyXHVmZmZkXHhlNFx1MDEwYlx1MDEwOVx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1ZmZmZFx4ZjFceGYyXHhmM1x4ZjRcdTAxMjFceGY2XHhmN1x1MDExZFx4ZjlceGZhXHhmYlx4ZmNcdTAxNmRcdTAxNWRcdTAyZDkifSxj'@;
put 'cDI4NTkzOiJpc284ODU5MyIsaXNvODg1OTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNc'@;
put 'eDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTM4XHUwMTU2XHhhNFx1MDEyOFx1MDEzYlx4YTdceGE4XHUwMTYwXHUwMTEyXHUwMTIyXHUwMTY2XHhhZFx1MDE3ZFx4YWZceGIwXHUwMTA1XHUwMmRiXHUwMTU3XHhiNFx1MDEyOVx1MDEzY1x1MDJjN1x4YjhcdTAxNjFcdTAxMTNcdTAxMjNcdTAx'@;
put 'NjdcdTAxNGFcdTAxN2VcdTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHUwMTJhXHUwMTEwXHUwMTQ1XHUwMTRjXHUwMTM2XHhkNFx4ZDVceGQ2XHhkN1x4ZDhcdTAxNzJceGRhXHhkYlx4ZGNcdTAxNjhc'@;
put 'dTAxNmFceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx1MDEyYlx1MDExMVx1MDE0Nlx1MDE0ZFx1MDEzN1x4ZjRceGY1XHhmNlx4ZjdceGY4XHUwMTczXHhmYVx4ZmJceGZjXHUwMTY5XHUwMTZiXHUwMmQ5'@;
put 'In0sY3AyODU5NDoiaXNvODg1OTQiLGlzbzg4NTk1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJc'@;
put 'eDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQwM1x1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0'@;
put 'MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRc'@;
put 'dTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIx'@;
put 'MTZcdTA0NTFcdTA0NTJcdTA0NTNcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0sY3AyODU5NToiaXNvODg1OTUiLGlzbzg4NTk2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4'@;
put 'NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTA2MGNceGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFiXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFmXHVmZmZkXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUw'@;
put 'NjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjQwXHUwNjQx'@;
put 'XHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkIn0sY3AyODU5NjoiaXNvODg1OTYiLGlzbzg4NTk3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4'@;
put 'OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxOFx1MjAxOVx4YTNcdTIwYWNcdTIwYWZceGE2XHhhN1x4YThceGE5XHUwMzdhXHhhYlx4YWNceGFkXHVmZmZkXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx1MDM4NVx1MDM4Nlx4YjdcdTAzODhcdTAzODlcdTAzOGFc'@;
put 'eGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1'@;
put 'MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNj'@;
put 'Mlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LGNwMjg1OTc6Imlzbzg4NTk3Iixpc284ODU5ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4'@;
put 'ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBc'@;
put 'eGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxN1x1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVk'@;
put 'Y1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCJ9LGNwMjg1OTg6Imlzbzg4NTk4Iixpc284ODU5OTp7dHlwZToiX3NiY3MiLGNoYXJz'@;
put 'OiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhh'@;
put 'OFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4'@;
put 'ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4Zjhc'@;
put 'eGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LGNwMjg1OTk6Imlzbzg4NTk5Iixpc284ODU5MTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNc'@;
put 'eDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTEyXHUwMTIyXHUwMTJhXHUwMTI4XHUwMTM2XHhhN1x1MDEzYlx1MDExMFx1MDE2MFx1MDE2Nlx1MDE3ZFx4YWRcdTAxNmFcdTAxNGFceGIwXHUwMTA1XHUwMTEzXHUwMTIzXHUwMTJi'@;
put 'XHUwMTI5XHUwMTM3XHhiN1x1MDEzY1x1MDExMVx1MDE2MVx1MDE2N1x1MDE3ZVx1MjAxNVx1MDE2Ylx1MDE0Ylx1MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAxMThceGNiXHUwMTE2XHhjZFx4Y2VceGNmXHhkMFx1MDE0NVx1MDE0Y1x4ZDNceGQ0XHhk'@;
put 'NVx4ZDZcdTAxNjhceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx4ZWZceGYwXHUwMTQ2XHUwMTRkXHhmM1x4ZjRceGY1XHhmNlx1MDE2OVx4ZjhcdTAx'@;
put 'NzNceGZhXHhmYlx4ZmNceGZkXHhmZVx1MDEzOCJ9LGNwMjg2MDA6Imlzbzg4NTkxMCIsaXNvODg1OTExOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5'@;
put 'NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1'@;
put 'MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUy'@;
put 'Zlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1'@;
put 'MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg2MDE6Imlzbzg4NTkxMSIsaXNvODg1OTEzOnt0eXBlOiJf'@;
put 'c2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxZFx4YTJceGEzXHhhNFx1'@;
put 'MjAxZVx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNcdTIwMWNceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNc'@;
put 'eGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAx'@;
put 'MTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTIwMTkifSxjcDI4NjAzOiJpc284ODU5MTMiLGlzbzg4NTkx'@;
put 'NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTFlMDJcdTFl'@;
put 'MDNceGEzXHUwMTBhXHUwMTBiXHUxZTBhXHhhN1x1MWU4MFx4YTlcdTFlODJcdTFlMGJcdTFlZjJceGFkXHhhZVx1MDE3OFx1MWUxZVx1MWUxZlx1MDEyMFx1MDEyMVx1MWU0MFx1MWU0MVx4YjZcdTFlNTZcdTFlODFcdTFlNTdcdTFlODNcdTFlNjBcdTFlZjNcdTFlODRcdTFlODVcdTFlNjFc'@;
put 'eGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTc0XHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHUxZTZhXHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTc2XHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3'@;
put 'XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNzVceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZcdTFlNmJceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxNzdceGZmIn0sY3AyODYwNDoiaXNvODg1OTE0Iixpc284ODU5MTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFc'@;
put 'eDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHUyMGFjXHhhNVx1MDE2MFx4YTdcdTAxNjFceGE5'@;
put 'XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3ZFx4YjVceGI2XHhiN1x1MDE3ZVx4YjlceGJhXHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhk'@;
put 'MFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5'@;
put 'XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sY3AyODYwNToiaXNvODg1OTE1Iixpc284ODU5MTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5'@;
put 'NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTA1XHUwMTQxXHUyMGFjXHUyMDFlXHUwMTYwXHhhN1x1MDE2MVx4YTlcdTAyMThceGFiXHUwMTc5XHhhZFx1MDE3YVx1MDE3Ylx4YjBceGIxXHUwMTBjXHUwMTQyXHUwMTdkXHUyMDFkXHhiNlx4'@;
put 'YjdcdTAxN2VcdTAxMGRcdTAyMTlceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHUwMTdjXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx1MDEwNlx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMTBcdTAxNDNceGQyXHhkM1x4ZDRcdTAxNTBceGQ2XHUwMTVhXHUwMTcwXHhk'@;
put 'OVx4ZGFceGRiXHhkY1x1MDExOFx1MDIxYVx4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHUwMTA3XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExMVx1MDE0NFx4ZjJceGYzXHhmNFx1MDE1MVx4ZjZcdTAxNWJcdTAxNzFceGY5XHhmYVx4ZmJceGZjXHUwMTE5'@;
put 'XHUwMjFiXHhmZiJ9LGNwMjg2MDY6Imlzbzg4NTkxNiIsY3A0Mzc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZc'@;
put 'eGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3'@;
put 'XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUy'@;
put 'NTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0'@;
put 'XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm00Mzc6ImNwNDM3Iixjc2libTQzNzoiY3A0MzciLGNwNzM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5'@;
put 'N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1'@;
put 'MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1'@;
put 'Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1'@;
put 'MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFc'@;
put 'dTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTczNzoiY3A3MzciLGNzaWJtNzM3OiJjcDczNyIsY3A3NzU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMTA2XHhmY1x4ZTlcdTAxMDFceGU0XHUwMTIzXHhlNVx1MDEwN1x1MDE0Mlx1'@;
put 'MDExM1x1MDE1Nlx1MDE1N1x1MDEyYlx1MDE3OVx4YzRceGM1XHhjOVx4ZTZceGM2XHUwMTRkXHhmNlx1MDEyMlx4YTJcdTAxNWFcdTAxNWJceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdceGE0XHUwMTAwXHUwMTJhXHhmM1x1MDE3Ylx1MDE3Y1x1MDE3YVx1MjAxZFx4YTZceGE5XHhhZVx4YWNc'@;
put 'eGJkXHhiY1x1MDE0MVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwMTA0XHUwMTBjXHUwMTE4XHUwMTE2XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTJlXHUwMTYwXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTcyXHUwMTZh'@;
put 'XHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUwMTdkXHUwMTA1XHUwMTBkXHUwMTE5XHUwMTE3XHUwMTJmXHUwMTYxXHUwMTczXHUwMTZiXHUwMTdlXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHhkM1x4ZGZcdTAxNGNcdTAxNDNc'@;
put 'eGY1XHhkNVx4YjVcdTAxNDRcdTAxMzZcdTAxMzdcdTAxM2JcdTAxM2NcdTAxNDZcdTAxMTJcdTAxNDVcdTIwMTlceGFkXHhiMVx1MjAxY1x4YmVceGI2XHhhN1x4ZjdcdTIwMWVceGIwXHUyMjE5XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm03NzU6ImNwNzc1Iixjc2libTc3NToi'@;
put 'Y3A3NzUiLGNwODUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJc'@;
put 'eGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJj'@;
put 'XHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJc'@;
put 'eGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1MDoiY3A4NTAiLGNzaWJtODUwOiJjcDg1MCIsY3A4NTI6e3R5cGU6Il9z'@;
put 'YmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUwMTVhXHUwMTViXHhkNlx4ZGNcdTAxNjRcdTAxNjVcdTAxNDFc'@;
put 'eGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHUwMTFhXHUwMTVlXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVk'@;
put 'XHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEwZVx4Y2JcdTAxMGZcdTAxNDdceGNkXHhjZVx1MDExYlx1MjUx'@;
put 'OFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRkXHUwMmRiXHUwMmM3XHUwMmQ4XHhhN1x4ZjdceGI4XHhiMFx4'@;
put 'YThcdTAyZDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIn0saWJtODUyOiJjcDg1MiIsY3NpYm04NTI6ImNwODUyIixjcDg1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0NTJcdTA0MDJcdTA0NTNcdTA0MDNcdTA0NTFcdTA0MDFcdTA0NTRcdTA0MDRcdTA0NTVcdTA0MDVcdTA0NTZc'@;
put 'dTA0MDZcdTA0NTdcdTA0MDdcdTA0NThcdTA0MDhcdTA0NTlcdTA0MDlcdTA0NWFcdTA0MGFcdTA0NWJcdTA0MGJcdTA0NWNcdTA0MGNcdTA0NWVcdTA0MGVcdTA0NWZcdTA0MGZcdTA0NGVcdTA0MmVcdTA0NGFcdTA0MmFcdTA0MzBcdTA0MTBcdTA0MzFcdTA0MTFcdTA0NDZcdTA0MjZcdTA0'@;
put 'MzRcdTA0MTRcdTA0MzVcdTA0MTVcdTA0NDRcdTA0MjRcdTA0MzNcdTA0MTNceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDQ0NVx1MDQyNVx1MDQzOFx1MDQxOFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDQzOVx1MDQxOVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUy'@;
put 'Y1x1MjUxY1x1MjUwMFx1MjUzY1x1MDQzYVx1MDQxYVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTA0M2JcdTA0MWJcdTA0M2NcdTA0MWNcdTA0M2RcdTA0MWRcdTA0M2VcdTA0MWVcdTA0M2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTA0MWZcdTA0'@;
put 'NGZcdTI1ODBcdTA0MmZcdTA0NDBcdTA0MjBcdTA0NDFcdTA0MjFcdTA0NDJcdTA0MjJcdTA0NDNcdTA0MjNcdTA0MzZcdTA0MTZcdTA0MzJcdTA0MTJcdTA0NGNcdTA0MmNcdTIxMTZceGFkXHUwNDRiXHUwNDJiXHUwNDM3XHUwNDE3XHUwNDQ4XHUwNDI4XHUwNDRkXHUwNDJkXHUwNDQ5XHUw'@;
put 'NDI5XHUwNDQ3XHUwNDI3XHhhN1x1MjVhMFx4YTAifSxpYm04NTU6ImNwODU1Iixjc2libTg1NToiY3A4NTUiLGNwODU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1'@;
put 'MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx4YTNcdWZmZmRceGQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHhhZVx4YWNceGJkXHhiY1x1ZmZmZFx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHVmZmZk'@;
put 'XHVmZmZkXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZcdWZmZmRcdTI1ODBcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRceGI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1NjoiY3A4NTYiLGNzaWJtODU2'@;
put 'OiJjcDg1NiIsY3A4NTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1'@;
put 'ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0'@;
put 'XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNc'@;
put 'eGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU3OiJjcDg1NyIsY3NpYm04NTc6ImNwODU3Iixj'@;
put 'cDg1ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRc'@;
put 'eGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1'@;
put 'MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUyMGFjXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVc'@;
put 'eGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTg6ImNwODU4Iixjc2libTg1ODoiY3A4NTgiLGNwODYwOnt0eXBlOiJfc2JjcyIsY2hh'@;
put 'cnM6Ilx4YzdceGZjXHhlOVx4ZTJceGUzXHhlMFx4YzFceGU3XHhlYVx4Y2FceGU4XHhjZFx4ZDRceGVjXHhjM1x4YzJceGM5XHhjMFx4YzhceGY0XHhmNVx4ZjJceGRhXHhmOVx4Y2NceGQ1XHhkY1x4YTJceGEzXHhkOVx1MjBhN1x4ZDNceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhi'@;
put 'YVx4YmZceGQyXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNj'@;
put 'XHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhk'@;
put 'Zlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4'@;
put 'YTAifSxpYm04NjA6ImNwODYwIixjc2libTg2MDoiY3A4NjAiLGNwODYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRc'@;
put 'eGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1'@;
put 'MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1'@;
put 'M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1'@;
put 'MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYxOiJjcDg2MSIsY3NpYm04NjE6ImNwODYxIixjcDg2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVc'@;
put 'dTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZh'@;
put 'XHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNc'@;
put 'dTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1'@;
put 'OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFc'@;
put 'dTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MjoiY3A4NjIiLGNzaWJtODYyOiJjcDg2MiIsY3A4NjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4YzJceGUwXHhiNlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MjAxN1x4YzBceGE3XHhjOVx4YzhceGNhXHhmNFx4'@;
put 'Y2JceGNmXHhmYlx4ZjlceGE0XHhkNFx4ZGNceGEyXHhhM1x4ZDlceGRiXHUwMTkyXHhhNlx4YjRceGYzXHhmYVx4YThceGI4XHhiM1x4YWZceGNlXHUyMzEwXHhhY1x4YmRceGJjXHhiZVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUy'@;
put 'NTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5'@;
put 'XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlc'@;
put 'dTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjM6ImNwODYzIixjc2libTg2MzoiY3A4NjMiLGNwODY0Ont0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4'@;
put 'MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJFx1MDY2YSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5f'@;
put 'YGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGIwXHhiN1x1MjIxOVx1MjIxYVx1MjU5Mlx1MjUwMFx1MjUwMlx1MjUzY1x1MjUyNFx1MjUyY1x1MjUxY1x1MjUzNFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1MDNiMlx1MjIxZVx1MDNjNlx4YjFceGJkXHhiY1x1MjI0OFx4'@;
put 'YWJceGJiXHVmZWY3XHVmZWY4XHVmZmZkXHVmZmZkXHVmZWZiXHVmZWZjXHVmZmZkXHhhMFx4YWRcdWZlODJceGEzXHhhNFx1ZmU4NFx1ZmZmZFx1ZmZmZFx1ZmU4ZVx1ZmU4Zlx1ZmU5NVx1ZmU5OVx1MDYwY1x1ZmU5ZFx1ZmVhMVx1ZmVhNVx1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2'@;
put 'NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmVkMVx1MDYxYlx1ZmViMVx1ZmViNVx1ZmViOVx1MDYxZlx4YTJcdWZlODBcdWZlODFcdWZlODNcdWZlODVcdWZlY2FcdWZlOGJcdWZlOGRcdWZlOTFcdWZlOTNcdWZlOTdcdWZlOWJcdWZlOWZcdWZlYTNcdWZlYTdcdWZlYTlcdWZl'@;
put 'YWJcdWZlYWRcdWZlYWZcdWZlYjNcdWZlYjdcdWZlYmJcdWZlYmZcdWZlYzFcdWZlYzVcdWZlY2JcdWZlY2ZceGE2XHhhY1x4ZjdceGQ3XHVmZWM5XHUwNjQwXHVmZWQzXHVmZWQ3XHVmZWRiXHVmZWRmXHVmZWUzXHVmZWU3XHVmZWViXHVmZWVkXHVmZWVmXHVmZWYzXHVmZWJkXHVmZWNjXHVm'@;
put 'ZWNlXHVmZWNkXHVmZWUxXHVmZTdkXHUwNjUxXHVmZWU1XHVmZWU5XHVmZWVjXHVmZWYwXHVmZWYyXHVmZWQwXHVmZWQ1XHVmZWY1XHVmZWY2XHVmZWRkXHVmZWQ5XHVmZWYxXHUyNWEwXHVmZmZkIn0saWJtODY0OiJjcDg2NCIsY3NpYm04NjQ6ImNwODY0IixjcDg2NTp7dHlwZToiX3NiY3Mi'@;
put 'LGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFc'@;
put 'eGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1'@;
put 'MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBc'@;
put 'dTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIy'@;
put 'XHUyNWEwXHhhMCJ9LGlibTg2NToiY3A4NjUiLGNzaWJtODY1OiJjcDg2NSIsY3A4NjY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUw'@;
put 'NDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNh'@;
put 'XHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUy'@;
put 'NTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQx'@;
put 'XHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZceGE0XHUy'@;
put 'NWEwXHhhMCJ9LGlibTg2NjoiY3A4NjYiLGNzaWJtODY2OiJjcDg2NiIsY3A4Njk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzg2XHVmZmZkXHhiN1x4YWNceGE2XHUyMDE4XHUyMDE5XHUwMzg4XHUyMDE1XHUwMzg5XHUwMzhh'@;
put 'XHUwM2FhXHUwMzhjXHVmZmZkXHVmZmZkXHUwMzhlXHUwM2FiXHhhOVx1MDM4Zlx4YjJceGIzXHUwM2FjXHhhM1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5MFx1MDNjY1x1MDNjZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x4YmRcdTAzOThcdTAzOTlc'@;
put 'eGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDM5ZVx1MDM5Zlx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDNhMFx1MDNhMVx1MjU1YVx1MjU1NFx1'@;
put 'MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDNiNFx1MDNiNVx1MjU4MFx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNi'@;
put 'Ylx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDM4NFx4YWRceGIxXHUwM2M1XHUwM2M2XHUwM2M3XHhhN1x1MDNjOFx1MDM4NVx4YjBceGE4XHUwM2M5XHUwM2NiXHUwM2IwXHUwM2NlXHUyNWEwXHhhMCJ9LGlibTg2OToiY3A4NjkiLGNz'@;
put 'aWJtODY5OiJjcDg2OSIsY3A5MjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5'@;
put 'ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVcdTIwM2VceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4'@;
put 'YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE2MFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxN2RceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhl'@;
put 'Zlx1MDE2MVx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxN2VceGZmIn0saWJtOTIyOiJjcDkyMiIsY3NpYm05MjI6ImNwOTIyIixjcDEwNDY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZTg4XHhkN1x4ZjdcdWY4ZjZcdWY4ZjVcdWY4ZjRc'@;
put 'dWY4ZjdcdWZlNzFceDg4XHUyNWEwXHUyNTAyXHUyNTAwXHUyNTEwXHUyNTBjXHUyNTE0XHUyNTE4XHVmZTc5XHVmZTdiXHVmZTdkXHVmZTdmXHVmZTc3XHVmZThhXHVmZWYwXHVmZWYzXHVmZWYyXHVmZWNlXHVmZWNmXHVmZWQwXHVmZWY2XHVmZWY4XHVmZWZhXHVmZWZjXHhhMFx1ZjhmYVx1'@;
put 'ZjhmOVx1ZjhmOFx4YTRcdWY4ZmJcdWZlOGJcdWZlOTFcdWZlOTdcdWZlOWJcdWZlOWZcdWZlYTNcdTA2MGNceGFkXHVmZWE3XHVmZWIzXHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVmZWI3XHUwNjFiXHVmZWJiXHVmZWJmXHVm'@;
put 'ZWNhXHUwNjFmXHVmZWNiXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHVmZWM3XHUwNjM5'@;
put 'XHUwNjNhXHVmZWNjXHVmZTgyXHVmZTg0XHVmZThlXHVmZWQzXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZWQ3XHVmZWRiXHVm'@;
put 'ZWRmXHVmOGZjXHVmZWY1XHVmZWY3XHVmZWY5XHVmZWZiXHVmZWUzXHVmZWU3XHVmZWVjXHVmZWU5XHVmZmZkIn0saWJtMTA0NjoiY3AxMDQ2Iixjc2libTEwNDY6ImNwMTA0NiIsY3AxMTI0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4'@;
put 'OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQ5MFx1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1'@;
put 'MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0Mjdc'@;
put 'dTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0'@;
put 'NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0OTFcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVlXHUw'@;
put 'NDVmIn0saWJtMTEyNDoiY3AxMTI0Iixjc2libTExMjQ6ImNwMTEyNCIsY3AxMTI1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQx'@;
put 'Zlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1'@;
put 'MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1'@;
put 'ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1'@;
put 'MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQ5MFx1MDQ5MVx1MDQwNFx1MDQ1NFx1MDQwNlx1MDQ1Nlx1MDQwN1x1MDQ1N1x4YjdcdTIyMWFcdTIxMTZceGE0XHUy'@;
put 'NWEwXHhhMCJ9LGlibTExMjU6ImNwMTEyNSIsY3NpYm0xMTI1OiJjcDExMjUiLGNwMTEyOTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5'@;
put 'Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAxNTJceGI5XHhiYVx4YmJceGJjXHhiZFx4'@;
put 'YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEw'@;
put 'M1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSxpYm0xMTI5OiJjcDExMjkiLGNzaWJtMTEyOToiY3AxMTI5Iixj'@;
put 'cDExMzM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTgx'@;
put 'XHUwZTgyXHUwZTg0XHUwZTg3XHUwZTg4XHUwZWFhXHUwZThhXHUwZThkXHUwZTk0XHUwZTk1XHUwZTk2XHUwZTk3XHUwZTk5XHUwZTlhXHUwZTliXHUwZTljXHUwZTlkXHUwZTllXHUwZTlmXHUwZWExXHUwZWEyXHUwZWEzXHUwZWE1XHUwZWE3XHUwZWFiXHUwZWFkXHUwZWFlXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHUwZWFmXHUwZWIwXHUwZWIyXHUwZWIzXHUwZWI0XHUwZWI1XHUwZWI2XHUwZWI3XHUwZWI4XHUwZWI5XHUwZWJjXHUwZWIxXHUwZWJiXHUwZWJkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWMwXHUwZWMxXHUwZWMyXHUwZWMzXHUwZWM0XHUwZWM4XHUwZWM5XHUwZWNhXHUwZWNi'@;
put 'XHUwZWNjXHUwZWNkXHUwZWM2XHVmZmZkXHUwZWRjXHUwZWRkXHUyMGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWQwXHUwZWQxXHUwZWQyXHUwZWQzXHUw'@;
put 'ZWQ0XHUwZWQ1XHUwZWQ2XHUwZWQ3XHUwZWQ4XHUwZWQ5XHVmZmZkXHVmZmZkXHhhMlx4YWNceGE2XHVmZmZkIn0saWJtMTEzMzoiY3AxMTMzIixjc2libTExMzM6ImNwMTEzMyIsY3AxMTYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGU0OFx1'@;
put 'MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUx'@;
put 'Y1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1'@;
put 'MGUzOFx1MGUzOVx1MGUzYVx1MGU0OVx1MGU0YVx1MGU0Ylx1MjBhY1x1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1'@;
put 'M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx4YTJceGFjXHhhNlx4YTAifSxpYm0xMTYxOiJjcDExNjEiLGNzaWJtMTE2MToiY3AxMTYxIixjcDExNjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHg4MVx4ODJceDgzXHg4NFx1MjAyNlx4ODZc'@;
put 'eDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4'@;
put 'XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUw'@;
put 'ZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNm'@;
put 'XHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUw'@;
put 'ZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saWJtMTE2MjoiY3AxMTYyIixjc2libTExNjI6ImNwMTE2MiIsY3AxMTYzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5'@;
put 'MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3XHUwMTUy'@;
put 'XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMw'@;
put 'M1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTE2MzoiY3AxMTYz'@;
put 'Iixjc2libTExNjM6ImNwMTE2MyIsbWFjY3JvYXRpYW46e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhm'@;
put 'NVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHUwMTYwXHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxN2RceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MjIwNlx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAxNjFcdTIyMmJceGFhXHhiYVx1'@;
put 'MjEyNlx1MDE3ZVx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTAxMDZceGFiXHUwMTBjXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MDExMFx1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdWZmZmRceGE5XHUyMDQ0XHhhNFx1MjAz'@;
put 'OVx1MjAzYVx4YzZceGJiXHUyMDEzXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJcdTAxMDdceGMxXHUwMTBkXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1MDExMVx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwM2MwXHhjYlx1MDJkYVx4YjhceGNhXHhlNlx1'@;
put 'MDJjNyJ9LG1hY2N5cmlsbGljOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQy'@;
put 'NFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0'@;
put 'XHUyMjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVc'@;
put 'dTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNi'@;
put 'XHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCJ9LG1hY2dyZWVrOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGI5XHhiMlx4'@;
put 'YzlceGIzXHhkNlx4ZGNcdTAzODVceGUwXHhlMlx4ZTRcdTAzODRceGE4XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGEzXHUyMTIyXHhlZVx4ZWZcdTIwMjJceGJkXHUyMDMwXHhmNFx4ZjZceGE2XHhhZFx4ZjlceGZiXHhmY1x1MjAyMFx1MDM5M1x1MDM5NFx1MDM5OFx1MDM5Ylx1MDM5ZVx1MDNh'@;
put 'MFx4ZGZceGFlXHhhOVx1MDNhM1x1MDNhYVx4YTdcdTIyNjBceGIwXHUwMzg3XHUwMzkxXHhiMVx1MjI2NFx1MjI2NVx4YTVcdTAzOTJcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOTlcdTAzOWFcdTAzOWNcdTAzYTZcdTAzYWJcdTAzYThcdTAzYTlcdTAzYWNcdTAzOWRceGFjXHUwMzlmXHUwM2Ex'@;
put 'XHUyMjQ4XHUwM2E0XHhhYlx4YmJcdTIwMjZceGEwXHUwM2E1XHUwM2E3XHUwMzg2XHUwMzg4XHUwMTUzXHUyMDEzXHUyMDE1XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDNhZFx1MDNhZVx1MDNhZlx1MDNjY1x1MDM4Zlx1MDNjZFx1MDNi'@;
put 'MVx1MDNiMlx1MDNjOFx1MDNiNFx1MDNiNVx1MDNjNlx1MDNiM1x1MDNiN1x1MDNiOVx1MDNiZVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZlx1MDNjMFx1MDNjZVx1MDNjMVx1MDNjM1x1MDNjNFx1MDNiOFx1MDNjOVx1MDNjMlx1MDNjN1x1MDNjNVx1MDNiNlx1MDNjYVx1MDNjYlx1'@;
put 'MDM5MFx1MDNiMFx1ZmZmZCJ9LG1hY2ljZWxhbmQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4'@;
put 'ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhm'@;
put 'OFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZk'@;
put 'XHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW46e3R5'@;
put 'cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNc'@;
put 'eGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4'@;
put 'XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAz'@;
put 'MFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW5pYTp7dHlwZToiX3NiY3MiLGNoYXJzOiJc'@;
put 'eGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4'@;
put 'YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxMDJcdTAxNWVcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDEwM1x1MDE1Zlx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJc'@;
put 'eGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1MDE2Mlx1MDE2M1x1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4'@;
put 'YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3RoYWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhhYlx4YmJcdTIwMjZc'@;
put 'dWY4OGNcdWY4OGZcdWY4OTJcdWY4OTVcdWY4OThcdWY4OGJcdWY4OGVcdWY4OTFcdWY4OTRcdWY4OTdcdTIwMWNcdTIwMWRcdWY4OTlcdWZmZmRcdTIwMjJcdWY4ODRcdWY4ODlcdWY4ODVcdWY4ODZcdWY4ODdcdWY4ODhcdWY4OGFcdWY4OGRcdWY4OTBcdWY4OTNcdWY4OTZcdTIwMThcdTIw'@;
put 'MTlcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUw'@;
put 'ZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1'@;
put 'XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZWZmXHUyMDBiXHUyMDEzXHUyMDE0XHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUyMTIyXHUwZTRmXHUwZTUwXHUw'@;
put 'ZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHhhZVx4YTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxtYWN0dXJraXNoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhl'@;
put 'M1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1'@;
put 'MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAx'@;
put 'Y1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRi'@;
put 'XHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdWtyYWluZTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0'@;
put 'MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHUwNDkwXHhhM1x4YTdcdTIwMjJceGI2XHUw'@;
put 'NDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MDQ5MVx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAx'@;
put 'OTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUw'@;
put 'NDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRj'@;
put 'XHUwNDRkXHUwNDRlXHhhNCJ9LGtvaThyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMy'@;
put 'MFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVm'@;
put 'XHUyNTYwXHUyNTYxXHUwNDAxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQz'@;
put 'Ylx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1'@;
put 'MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaTh1Ont0eXBlOiJfc2JjcyIs'@;
put 'Y2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4'@;
put 'YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkxXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUwNDA0XHUyNTYzXHUwNDA2XHUw'@;
put 'NDA3XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1'@;
put 'MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQx'@;
put 'ZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaThydTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRc'@;
put 'dTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1'@;
put 'MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MDQ1ZVx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5'@;
put 'MFx1MDQwZVx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0'@;
put 'NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJc'@;
put 'dTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0OWJcdTA0OTNcdTIwMWFcdTA0OTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTA0YjNcdTIw'@;
put 'MzlcdTA0YjJcdTA0YjdcdTA0YjZcdWZmZmRcdTA0OWFcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0ZWZcdTA0ZWVcdTA0NTFceGE0XHUwNGUzXHhhNlx4YTdc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRceGFiXHhhY1x4YWRceGFlXHVmZmZkXHhiMFx4YjFceGIyXHUwNDAxXHVmZmZkXHUwNGUyXHhiNlx4YjdcdWZmZmRcdTIxMTZcdWZmZmRceGJiXHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1'@;
put 'MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQx'@;
put 'MVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1'@;
put 'MDQyN1x1MDQyYSJ9LGFybXNjaWk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4'@;
put 'OWVceDlmXHhhMFx1ZmZmZFx1MDU4N1x1MDU4OSkoXHhiYlx4YWJcdTIwMTQuXHUwNTVkLC1cdTA1OGFcdTIwMjZcdTA1NWNcdTA1NWJcdTA1NWVcdTA1MzFcdTA1NjFcdTA1MzJcdTA1NjJcdTA1MzNcdTA1NjNcdTA1MzRcdTA1NjRcdTA1MzVcdTA1NjVcdTA1MzZcdTA1NjZcdTA1MzdcdTA1'@;
put 'NjdcdTA1MzhcdTA1NjhcdTA1MzlcdTA1NjlcdTA1M2FcdTA1NmFcdTA1M2JcdTA1NmJcdTA1M2NcdTA1NmNcdTA1M2RcdTA1NmRcdTA1M2VcdTA1NmVcdTA1M2ZcdTA1NmZcdTA1NDBcdTA1NzBcdTA1NDFcdTA1NzFcdTA1NDJcdTA1NzJcdTA1NDNcdTA1NzNcdTA1NDRcdTA1NzRcdTA1NDVc'@;
put 'dTA1NzVcdTA1NDZcdTA1NzZcdTA1NDdcdTA1NzdcdTA1NDhcdTA1NzhcdTA1NDlcdTA1NzlcdTA1NGFcdTA1N2FcdTA1NGJcdTA1N2JcdTA1NGNcdTA1N2NcdTA1NGRcdTA1N2RcdTA1NGVcdTA1N2VcdTA1NGZcdTA1N2ZcdTA1NTBcdTA1ODBcdTA1NTFcdTA1ODFcdTA1NTJcdTA1ODJcdTA1'@;
put 'NTNcdTA1ODNcdTA1NTRcdTA1ODRcdTA1NTVcdTA1ODVcdTA1NTZcdTA1ODZcdTA1NWFcdWZmZmQifSxyazEwNDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBh'@;
put 'XHUwNDlhXHUwNGJhXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDliXHUwNGJiXHUwNDVmXHhhMFx1MDRiMFx1MDRiMVx1MDRkOFx4YTRcdTA0ZThceGE2XHhhN1x1MDQwMVx4YTlc'@;
put 'dTA0OTJceGFiXHhhY1x4YWRceGFlXHUwNGFlXHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0ZTlceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0OTNceGJiXHUwNGQ5XHUwNGEyXHUwNGEzXHUwNGFmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4'@;
put 'XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUw'@;
put 'NDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRm'@;
put 'In0sdGN2bjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4ZGFcdTFlZTRceDAzXHUxZWVhXHUxZWVjXHUxZWVlXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx1MWVlOFx1MWVmMFx1MWVmMlx1MWVmNlx1MWVmOFx4ZGRcdTFlZjRceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAh'@;
put 'XCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjMFx1MWVhMlx4YzNceGMxXHUxZWEwXHUxZWI2XHUxZWFjXHhjOFx1MWViYVx1MWViY1x4YzlcdTFlYjhcdTFl'@;
put 'YzZceGNjXHUxZWM4XHUwMTI4XHhjZFx1MWVjYVx4ZDJcdTFlY2VceGQ1XHhkM1x1MWVjY1x1MWVkOFx1MWVkY1x1MWVkZVx1MWVlMFx1MWVkYVx1MWVlMlx4ZDlcdTFlZTZcdTAxNjhceGEwXHUwMTAyXHhjMlx4Y2FceGQ0XHUwMWEwXHUwMWFmXHUwMTEwXHUwMTAzXHhlMlx4ZWFceGY0XHUw'@;
put 'MWExXHUwMWIwXHUwMTExXHUxZWIwXHUwMzAwXHUwMzA5XHUwMzAzXHUwMzAxXHUwMzIzXHhlMFx1MWVhM1x4ZTNceGUxXHUxZWExXHUxZWIyXHUxZWIxXHUxZWIzXHUxZWI1XHUxZWFmXHUxZWI0XHUxZWFlXHUxZWE2XHUxZWE4XHUxZWFhXHUxZWE0XHUxZWMwXHUxZWI3XHUxZWE3XHUxZWE5'@;
put 'XHUxZWFiXHUxZWE1XHUxZWFkXHhlOFx1MWVjMlx1MWViYlx1MWViZFx4ZTlcdTFlYjlcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYmZcdTFlYzdceGVjXHUxZWM5XHUxZWM0XHUxZWJlXHUxZWQyXHUwMTI5XHhlZFx1MWVjYlx4ZjJcdTFlZDRcdTFlY2ZceGY1XHhmM1x1MWVjZFx1MWVkM1x1MWVk'@;
put 'NVx1MWVkN1x1MWVkMVx1MWVkOVx1MWVkZFx1MWVkZlx1MWVlMVx1MWVkYlx1MWVlM1x4ZjlcdTFlZDZcdTFlZTdcdTAxNjlceGZhXHUxZWU1XHUxZWViXHUxZWVkXHUxZWVmXHUxZWU5XHUxZWYxXHUxZWYzXHUxZWY3XHUxZWY5XHhmZFx1MWVmNVx1MWVkMCJ9LGdlb3JnaWFuYWNhZGVteTp7'@;
put 'dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJc'@;
put 'dTAxNjFcdTIwM2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHUxMGQw'@;
put 'XHUxMGQxXHUxMGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGQ3XHUxMGQ4XHUxMGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUxMGU4XHUxMGU5XHUxMGVhXHUxMGViXHUx'@;
put 'MGVjXHUxMGVkXHUxMGVlXHUxMGVmXHUxMGYwXHUxMGYxXHUxMGYyXHUxMGYzXHUxMGY0XHUxMGY1XHUxMGY2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9'@;
put 'LGdlb3JnaWFucHM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0'@;
put 'XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRc'@;
put 'eGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBmMVx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBkY1x1MTBmMlx1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBmM1x1MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1'@;
put 'MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBmNFx1MTBlZlx1MTBmMFx1MTBmNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhm'@;
put 'ZFx4ZmVceGZmIn0scHQxNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDk2XHUwNDkyXHUwNGVlXHUwNDkzXHUyMDFlXHUyMDI2XHUwNGI2XHUwNGFlXHUwNGIyXHUwNGFmXHUwNGEwXHUwNGUyXHUwNGEyXHUwNDlhXHUwNGJhXHUwNGI4XHUwNDk3XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk'@;
put 'XHUyMDIyXHUyMDEzXHUyMDE0XHUwNGIzXHUwNGI3XHUwNGExXHUwNGUzXHUwNGEzXHUwNDliXHUwNGJiXHUwNGI5XHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx1MDRlOFx1MDQ5OFx1MDRiMFx4YTdcdTA0MDFceGE5XHUwNGQ4XHhhYlx4YWNcdTA0ZWZceGFlXHUwNDljXHhiMFx1MDRiMVx1MDQw'@;
put 'Nlx1MDQ1Nlx1MDQ5OVx1MDRlOVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNGQ5XHhiYlx1MDQ1OFx1MDRhYVx1MDRhYlx1MDQ5ZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1'@;
put 'MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQz'@;
put 'YVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHZpc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFc'@;
put 'dTFlYjJceDAzXHgwNFx1MWViNFx1MWVhYVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNcdTFlZjZceDE1XHgxNlx4MTdceDE4XHUxZWY4XHgxYVx4MWJceDFjXHgxZFx1MWVmNFx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktM'@;
put 'TU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MWVhMFx1MWVhZVx1MWViMFx1MWViNlx1MWVhNFx1MWVhNlx1MWVhOFx1MWVhY1x1MWViY1x1MWViOFx1MWViZVx1MWVjMFx1MWVjMlx1MWVjNFx1MWVjNlx1MWVkMFx1MWVkMlx1MWVkNFx1'@;
put 'MWVkNlx1MWVkOFx1MWVlMlx1MWVkYVx1MWVkY1x1MWVkZVx1MWVjYVx1MWVjZVx1MWVjY1x1MWVjOFx1MWVlNlx1MDE2OFx1MWVlNFx1MWVmMlx4ZDVcdTFlYWZcdTFlYjFcdTFlYjdcdTFlYTVcdTFlYTdcdTFlYTlcdTFlYWRcdTFlYmRcdTFlYjlcdTFlYmZcdTFlYzFcdTFlYzNcdTFlYzVc'@;
put 'dTFlYzdcdTFlZDFcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZTBcdTAxYTBcdTFlZDlcdTFlZGRcdTFlZGZcdTFlY2JcdTFlZjBcdTFlZThcdTFlZWFcdTFlZWNcdTAxYTFcdTFlZGJcdTAxYWZceGMwXHhjMVx4YzJceGMzXHUxZWEyXHUwMTAyXHUxZWIzXHUxZWI1XHhjOFx4YzlceGNhXHUxZWJh'@;
put 'XHhjY1x4Y2RcdTAxMjhcdTFlZjNcdTAxMTBcdTFlZTlceGQyXHhkM1x4ZDRcdTFlYTFcdTFlZjdcdTFlZWJcdTFlZWRceGQ5XHhkYVx1MWVmOVx1MWVmNVx4ZGRcdTFlZTFcdTAxYjBceGUwXHhlMVx4ZTJceGUzXHUxZWEzXHUwMTAzXHUxZWVmXHUxZWFiXHhlOFx4ZTlceGVhXHUxZWJiXHhl'@;
put 'Y1x4ZWRcdTAxMjlcdTFlYzlcdTAxMTFcdTFlZjFceGYyXHhmM1x4ZjRceGY1XHUxZWNmXHUxZWNkXHUxZWU1XHhmOVx4ZmFcdTAxNjlcdTFlZTdceGZkXHUxZWUzXHUxZWVlIn0saXNvNjQ2Y246e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJc'@;
put 'dFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiNceGE1JSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1u'@;
put 'b3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlzbzY0NmpwOnt0eXBlOiJfc2JjcyIsY2hhcnM6'@;
put 'IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9Q'@;
put 'UVJTVFVWV1hZWltceGE1XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZCJ9LGhwcm9tYW44Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhh'@;
put 'MFx4YzBceGMyXHhjOFx4Y2FceGNiXHhjZVx4Y2ZceGI0XHUwMmNiXHUwMmM2XHhhOFx1MDJkY1x4ZDlceGRiXHUyMGE0XHhhZlx4ZGRceGZkXHhiMFx4YzdceGU3XHhkMVx4ZjFceGExXHhiZlx4YTRceGEzXHhhNVx4YTdcdTAxOTJceGEyXHhlMlx4ZWFceGY0XHhmYlx4ZTFceGU5XHhmM1x4'@;
put 'ZmFceGUwXHhlOFx4ZjJceGY5XHhlNFx4ZWJceGY2XHhmY1x4YzVceGVlXHhkOFx4YzZceGU1XHhlZFx4ZjhceGU2XHhjNFx4ZWNceGQ2XHhkY1x4YzlceGVmXHhkZlx4ZDRceGMxXHhjM1x4ZTNceGQwXHhmMFx4Y2RceGNjXHhkM1x4ZDJceGQ1XHhmNVx1MDE2MFx1MDE2MVx4ZGFcdTAxNzhc'@;
put 'eGZmXHhkZVx4ZmVceGI3XHhiNVx4YjZceGJlXHUyMDE0XHhiY1x4YmRceGFhXHhiYVx4YWJcdTI1YTBceGJiXHhiMVx1ZmZmZCJ9LG1hY2ludG9zaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4'@;
put 'ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVc'@;
put 'eGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIw'@;
put 'MThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUw'@;
put 'MmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxhc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx0aXM2MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUw'@;
put 'ZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4'@;
put 'XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUw'@;
put 'ZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'In19fSw2NDc3MzphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXsxMDAyOToibWFjY2VudGV1cm8iLG1hY2NlbnRldXJvOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEw'@;
put 'N1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAx'@;
put 'MjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUw'@;
put 'MTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMx'@;
put 'XHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3In0sODA4OiJjcDgwOCIsaWJtODA4OiJjcDgwOCIsY3A4'@;
put 'MDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUw'@;
put 'NDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkz'@;
put 'XHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUy'@;
put 'NTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5'@;
put 'XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZcdTIwYWNcdTI1YTBceGEwIn0sbWlrOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQx'@;
put 'MVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1'@;
put 'MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0'@;
put 'OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU2M1x1MjU1MVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjUxMFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1'@;
put 'MjUyNFx1MjExNlx4YTdcdTI1NTdcdTI1NWRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2'@;
put 'MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGNwNzIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHhlOVx4ZTJceDg0XHhlMFx4ODZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceDhk'@;
put 'XHg4ZVx4OGZceDkwXHUwNjUxXHUwNjUyXHhmNFx4YTRcdTA2NDBceGZiXHhmOVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx4YTNcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNc'@;
put 'dTA2MzRcdTA2MzVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1'@;
put 'MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDYzNlx1MDYzN1x1MDYzOFx1MDYz'@;
put 'OVx1MDYzYVx1MDY0MVx4YjVcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTIyNjFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0sYXNj'@;
put 'aWk4Yml0OiJhc2NpaSIsdXNhc2NpaToiYXNjaWkiLGFuc2l4MzQ6ImFzY2lpIixhbnNpeDM0MTk2ODoiYXNjaWkiLGFuc2l4MzQxOTg2OiJhc2NpaSIsY3Nhc2NpaToiYXNjaWkiLGNwMzY3OiJhc2NpaSIsaWJtMzY3OiJhc2NpaSIsaXNvaXI2OiJhc2NpaSIsaXNvNjQ2dXM6ImFzY2lpIixp'@;
put 'c282NDZpcnY6ImFzY2lpIix1czoiYXNjaWkiLGxhdGluMToiaXNvODg1OTEiLGxhdGluMjoiaXNvODg1OTIiLGxhdGluMzoiaXNvODg1OTMiLGxhdGluNDoiaXNvODg1OTQiLGxhdGluNToiaXNvODg1OTkiLGxhdGluNjoiaXNvODg1OTEwIixsYXRpbjc6Imlzbzg4NTkxMyIsbGF0aW44OiJp'@;
put 'c284ODU5MTQiLGxhdGluOToiaXNvODg1OTE1IixsYXRpbjEwOiJpc284ODU5MTYiLGNzaXNvbGF0aW4xOiJpc284ODU5MSIsY3Npc29sYXRpbjI6Imlzbzg4NTkyIixjc2lzb2xhdGluMzoiaXNvODg1OTMiLGNzaXNvbGF0aW40OiJpc284ODU5NCIsY3Npc29sYXRpbmN5cmlsbGljOiJpc284'@;
put 'ODU5NSIsY3Npc29sYXRpbmFyYWJpYzoiaXNvODg1OTYiLGNzaXNvbGF0aW5ncmVlazoiaXNvODg1OTciLGNzaXNvbGF0aW5oZWJyZXc6Imlzbzg4NTk4Iixjc2lzb2xhdGluNToiaXNvODg1OTkiLGNzaXNvbGF0aW42OiJpc284ODU5MTAiLGwxOiJpc284ODU5MSIsbDI6Imlzbzg4NTkyIixs'@;
put 'MzoiaXNvODg1OTMiLGw0OiJpc284ODU5NCIsbDU6Imlzbzg4NTk5IixsNjoiaXNvODg1OTEwIixsNzoiaXNvODg1OTEzIixsODoiaXNvODg1OTE0IixsOToiaXNvODg1OTE1IixsMTA6Imlzbzg4NTkxNiIsaXNvaXIxNDoiaXNvNjQ2anAiLGlzb2lyNTc6ImlzbzY0NmNuIixpc29pcjEwMDoi'@;
put 'aXNvODg1OTEiLGlzb2lyMTAxOiJpc284ODU5MiIsaXNvaXIxMDk6Imlzbzg4NTkzIixpc29pcjExMDoiaXNvODg1OTQiLGlzb2lyMTQ0OiJpc284ODU5NSIsaXNvaXIxMjc6Imlzbzg4NTk2Iixpc29pcjEyNjoiaXNvODg1OTciLGlzb2lyMTM4OiJpc284ODU5OCIsaXNvaXIxNDg6Imlzbzg4'@;
put 'NTk5Iixpc29pcjE1NzoiaXNvODg1OTEwIixpc29pcjE2NjoidGlzNjIwIixpc29pcjE3OToiaXNvODg1OTEzIixpc29pcjE5OToiaXNvODg1OTE0Iixpc29pcjIwMzoiaXNvODg1OTE1Iixpc29pcjIyNjoiaXNvODg1OTE2IixjcDgxOToiaXNvODg1OTEiLGlibTgxOToiaXNvODg1OTEiLGN5'@;
put 'cmlsbGljOiJpc284ODU5NSIsYXJhYmljOiJpc284ODU5NiIsYXJhYmljODoiaXNvODg1OTYiLGVjbWExMTQ6Imlzbzg4NTk2Iixhc21vNzA4OiJpc284ODU5NiIsZ3JlZWs6Imlzbzg4NTk3IixncmVlazg6Imlzbzg4NTk3IixlY21hMTE4OiJpc284ODU5NyIsZWxvdDkyODoiaXNvODg1OTci'@;
put 'LGhlYnJldzoiaXNvODg1OTgiLGhlYnJldzg6Imlzbzg4NTk4Iix0dXJraXNoOiJpc284ODU5OSIsdHVya2lzaDg6Imlzbzg4NTk5Iix0aGFpOiJpc284ODU5MTEiLHRoYWk4OiJpc284ODU5MTEiLGNlbHRpYzoiaXNvODg1OTE0IixjZWx0aWM4OiJpc284ODU5MTQiLGlzb2NlbHRpYzoiaXNv'@;
put 'ODg1OTE0Iix0aXM2MjAwOiJ0aXM2MjAiLHRpczYyMDI1MjkxOiJ0aXM2MjAiLHRpczYyMDI1MzMwOiJ0aXM2MjAiLDFlNDoibWFjcm9tYW4iLDEwMDA2OiJtYWNncmVlayIsMTAwMDc6Im1hY2N5cmlsbGljIiwxMDA3OToibWFjaWNlbGFuZCIsMTAwODE6Im1hY3R1cmtpc2giLGNzcGM4Y29k'@;
put 'ZXBhZ2U0Mzc6ImNwNDM3Iixjc3BjNzc1YmFsdGljOiJjcDc3NSIsY3NwYzg1MG11bHRpbGluZ3VhbDoiY3A4NTAiLGNzcGNwODUyOiJjcDg1MiIsY3NwYzg2MmxhdGluaGVicmV3OiJjcDg2MiIsY3BncjoiY3A4NjkiLG1zZWU6ImNwMTI1MCIsbXNjeXJsOiJjcDEyNTEiLG1zYW5zaToiY3Ax'@;
put 'MjUyIixtc2dyZWVrOiJjcDEyNTMiLG1zdHVyazoiY3AxMjU0Iixtc2hlYnI6ImNwMTI1NSIsbXNhcmFiOiJjcDEyNTYiLHdpbmJhbHRyaW06ImNwMTI1NyIsY3AyMDg2Njoia29pOHIiLDIwODY2OiJrb2k4ciIsaWJtODc4OiJrb2k4ciIsY3Nrb2k4cjoia29pOHIiLGNwMjE4NjY6ImtvaTh1'@;
put 'IiwyMTg2Njoia29pOHUiLGlibTExNjg6ImtvaTh1IixzdHJrMTA0ODIwMDI6InJrMTA0OCIsdGN2bjU3MTI6InRjdm4iLHRjdm41NzEyMToidGN2biIsZ2IxOTg4ODA6ImlzbzY0NmNuIixjbjoiaXNvNjQ2Y24iLGNzaXNvMTRqaXNjNjIyMHJvOiJpc282NDZqcCIsamlzYzYyMjAxOTY5cm86'@;
put 'ImlzbzY0NmpwIixqcDoiaXNvNjQ2anAiLGNzaHByb21hbjg6Imhwcm9tYW44IixyODoiaHByb21hbjgiLHJvbWFuODoiaHByb21hbjgiLHhyb21hbjg6Imhwcm9tYW44IixpYm0xMDUxOiJocHJvbWFuOCIsbWFjOiJtYWNpbnRvc2giLGNzbWFjaW50b3NoOiJtYWNpbnRvc2gifX0sNDMyODA6'@;
put 'KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geCgpe31mdW5jdGlvbiBtKCl7fWZ1bmN0aW9uIGxlKCl7dGhpcy5vdmVyZmxvd0J5dGU9LTF9ZnVuY3Rpb24gTShLLEkpe3RoaXMuaWNvbnY9SX1mdW5jdGlvbiBPKEssSSl7dm9pZCAwPT09'@;
put 'KEs9S3x8e30pLmFkZEJPTSYmKEsuYWRkQk9NPSEwKSx0aGlzLmVuY29kZXI9SS5pY29udi5nZXRFbmNvZGVyKCJ1dGYtMTZsZSIsSyl9ZnVuY3Rpb24gUihLLEkpe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRp'@;
put 'b25zPUt8fHt9LHRoaXMuaWNvbnY9SS5pY29udn1mdW5jdGlvbiB6KEssSSl7dmFyIGs9SXx8InV0Zi0xNmxlIjtpZihLLmxlbmd0aD49MilpZigyNTQ9PUtbMF0mJjI1NT09S1sxXSlrPSJ1dGYtMTZiZSI7ZWxzZSBpZigyNTU9PUtbMF0mJjI1ND09S1sxXSlrPSJ1dGYtMTZsZSI7ZWxzZXtm'@;
put 'b3IodmFyIEU9MCxqPTAsVj1NYXRoLm1pbihLLmxlbmd0aC1LLmxlbmd0aCUyLDY0KSxCPTA7QjxWO0IrPTIpMD09PUtbQl0mJjAhPT1LW0IrMV0mJmorKywwIT09S1tCXSYmMD09PUtbQisxXSYmRSsrO2o+RT9rPSJ1dGYtMTZiZSI6ajxFJiYoaz0idXRmLTE2bGUiKX1yZXR1cm4ga31JZS51'@;
put 'dGYxNmJlPXgseC5wcm90b3R5cGUuZW5jb2Rlcj1tLHgucHJvdG90eXBlLmRlY29kZXI9bGUseC5wcm90b3R5cGUuYm9tQXdhcmU9ITAsbS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7Zm9yKHZhciBJPWFlLmZyb20oSywidWNzMiIpLGs9MDtrPEkubGVuZ3RoO2srPTIpe3ZhciBFPUlb'@;
put 'a107SVtrXT1JW2srMV0sSVtrKzFdPUV9cmV0dXJuIEl9LG0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sbGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2lmKDA9PUsubGVuZ3RoKXJldHVybiIiO3ZhciBJPWFlLmFsbG9jKEsubGVuZ3RoKzEpLGs9MCxFPTA7Zm9yKC0xIT09dGhp'@;
put 'cy5vdmVyZmxvd0J5dGUmJihJWzBdPUtbMF0sSVsxXT10aGlzLm92ZXJmbG93Qnl0ZSxrPTEsRT0yKTtrPEsubGVuZ3RoLTE7ays9MixFKz0yKUlbRV09S1trKzFdLElbRSsxXT1LW2tdO3JldHVybiB0aGlzLm92ZXJmbG93Qnl0ZT1rPT1LLmxlbmd0aC0xP0tbSy5sZW5ndGgtMV06LTEsSS5z'@;
put 'bGljZSgwLEUpLnRvU3RyaW5nKCJ1Y3MyIil9LGxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LEllLnV0ZjE2PU0sTS5wcm90b3R5cGUuZW5jb2Rlcj1PLE0ucHJvdG90eXBlLmRlY29kZXI9UixPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5lbmNvZGVyLndy'@;
put 'aXRlKEspfSxPLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxSLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtpZighdGhpcy5kZWNvZGVyKXtpZih0aGlzLmluaXRpYWxCeXRlcy5wdXNoKEspLHRoaXMuaW5pdGlhbEJ5dGVzTGVuKz1LLmxl'@;
put 'bmd0aCx0aGlzLmluaXRpYWxCeXRlc0xlbjwxNilyZXR1cm4iIjt2YXIgST16KEs9YWUuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKEksdGhpcy5vcHRpb25zKSx0aGlzLmlu'@;
put 'aXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKEspfSxSLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgSz1hZS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLEk9eihLLHRoaXMub3B0'@;
put 'aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoSSx0aGlzLm9wdGlvbnMpO3ZhciBrPXRoaXMuZGVjb2Rlci53cml0ZShLKSxFPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gRT9rK0U6a31yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0s'@;
put 'OTI4NDQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChLLEkpe3RoaXMuaWNvbnY9SSx0aGlzLmJvbUF3YXJlPSEwLHRoaXMuaXNMRT1LLmlzTEV9ZnVuY3Rpb24gbShLLEkpe3RoaXMuaXNMRT1JLmlzTEUsdGhpcy5oaWdoU3Vycm9n'@;
put 'YXRlPTB9ZnVuY3Rpb24gbGUoSyxJKXt0aGlzLmlzTEU9SS5pc0xFLHRoaXMuYmFkQ2hhcj1JLmljb252LmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApLHRoaXMub3ZlcmZsb3c9bnVsbH1mdW5jdGlvbiBNKEssSSl7dGhpcy5pY29udj1JfWZ1bmN0aW9uIE8oSyxJKXt2b2lkIDA9'@;
put 'PT0oSz1LfHx7fSkuYWRkQk9NJiYoSy5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1JLmljb252LmdldEVuY29kZXIoSy5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGYtMzJsZSIsSyl9ZnVuY3Rpb24gUihLLEkpe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlh'@;
put 'bEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPUt8fHt9LHRoaXMuaWNvbnY9SS5pY29udn1mdW5jdGlvbiB6KEssSSl7dmFyIGs9SXx8InV0Zi0zMmxlIjtpZihLLmxlbmd0aD49NClpZig2NTI3OT09PUsucmVhZFVJbnQzMkJFKDApKWs9InV0Zi0zMmJlIjtlbHNlIGlmKDY1Mjc5PT09Sy5yZWFk'@;
put 'VUludDMyTEUoMCkpaz0idXRmLTMybGUiO2Vsc2V7Zm9yKHZhciBFPTAsaj0wLFY9MCxCPTAsWT1NYXRoLm1pbihLLmxlbmd0aC1LLmxlbmd0aCU0LDEyOCksWD0wO1g8WTtYKz00KXt2YXIgVT1LW1hdLHE9S1tYKzFdLGVlPUtbWCsyXSx0ZT1LW1grM107KDAhPT1VfHxxPjE2KSYmKytqLCgw'@;
put 'IT09dGV8fGVlPjE2KSYmKytFLDA9PT1VJiYwPT09cSYmMD09PWVlJiYwIT09dGUmJkIrKywwIT09VSYmMD09PXEmJjA9PT1lZSYmMD09PXRlJiZWKyt9ajxFP2s9InV0Zi0zMmJlIjpFPGomJihrPSJ1dGYtMzJsZSIpLEI+Vj9rPSJ1dGYtMzJiZSI6QjxWJiYoaz0idXRmLTMybGUiKX1yZXR1'@;
put 'cm4ga31JZS5fdXRmMzI9eCxJZS51dGYzMmxlPXt0eXBlOiJfdXRmMzIiLGlzTEU6ITB9LEllLnV0ZjMyYmU9e3R5cGU6Il91dGYzMiIsaXNMRTohMX0sSWUudWNzNGxlPSJ1dGYzMmxlIixJZS51Y3M0YmU9InV0ZjMyYmUiLHgucHJvdG90eXBlLmVuY29kZXI9bSx4LnByb3RvdHlwZS5kZWNv'@;
put 'ZGVyPWxlLG0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2Zvcih2YXIgST1hZS5mcm9tKEssInVjczIiKSxrPWFlLmFsbG9jKDIqSS5sZW5ndGgpLEU9dGhpcy5pc0xFP2sud3JpdGVVSW50MzJMRTprLndyaXRlVUludDMyQkUsaj0wLFY9MDtWPEkubGVuZ3RoO1YrPTIpe3ZhciBCPUku'@;
put 'cmVhZFVJbnQxNkxFKFYpLFk9NTUyOTY8PUImJkI8NTYzMjA7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXtpZighWSYmNTYzMjA8PUImJkI8NTczNDQpe0UuY2FsbChrLDY1NTM2Kyh0aGlzLmhpZ2hTdXJyb2dhdGUtNTUyOTY8PDEwfEItNTYzMjApLGopLGorPTQsdGhpcy5oaWdoU3Vycm9nYXRl'@;
put 'PTA7Y29udGludWV9RS5jYWxsKGssdGhpcy5oaWdoU3Vycm9nYXRlLGopLGorPTR9WT90aGlzLmhpZ2hTdXJyb2dhdGU9QjooRS5jYWxsKGssQixqKSxqKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wKX1yZXR1cm4gajxrLmxlbmd0aCYmKGs9ay5zbGljZSgwLGopKSxrfSxtLnByb3RvdHlwZS5l'@;
put 'bmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhpZ2hTdXJyb2dhdGUpe3ZhciBLPWFlLmFsbG9jKDQpO3JldHVybiB0aGlzLmlzTEU/Sy53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKTpLLndyaXRlVUludDMyQkUodGhpcy5oaWdoU3Vycm9nYXRlLDApLHRoaXMuaGlnaFN1cnJvZ2F0'@;
put 'ZT0wLEt9fSxsZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7aWYoMD09PUsubGVuZ3RoKXJldHVybiIiO3RoaXMub3ZlcmZsb3cmJihLPWFlLmNvbmNhdChbdGhpcy5vdmVyZmxvdyxLXSkpO3ZhciBJPUsubGVuZ3RoLUsubGVuZ3RoJTQ7Sy5sZW5ndGghPT1JPyh0aGlzLm92ZXJmbG93'@;
put 'PUsuc2xpY2UoSSksSz1LLnNsaWNlKDAsSSkpOnRoaXMub3ZlcmZsb3c9bnVsbDtmb3IodmFyIGs9YWUuYWxsb2MoSSksRT0wLGo9MDtqPEk7ais9NCl7dmFyIFY9dGhpcy5pc0xFP0sucmVhZFVJbnQzMkxFKGopOksucmVhZFVJbnQzMkJFKGopO2lmKFY8NjU1MzYpay53cml0ZVVJbnQxNkxF'@;
put 'KFYsRSksRSs9MjtlbHNlIGlmKFY+MTExNDExMSlrLndyaXRlVUludDE2TEUodGhpcy5iYWRDaGFyLEUpLEUrPTI7ZWxzZXt2YXIgWT01NjMyMCsoMTAyMyYoVi09NjU1MzYpKTtrLndyaXRlVUludDE2TEUoNTUyOTZ8Vj4+MTAsRSksay53cml0ZVVJbnQxNkxFKFksRSs9MiksRSs9Mn19cmV0'@;
put 'dXJuIGsuc2xpY2UoMCxFKS50b1N0cmluZygidWNzMiIpfSxsZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5vdmVyZmxvdz1udWxsfSxJZS51dGYzMj1NLEllLnVjczQ9TSxNLnByb3RvdHlwZS5lbmNvZGVyPU8sTS5wcm90b3R5cGUuZGVjb2Rlcj1SLE8ucHJvdG90eXBlLndyaXRl'@;
put 'PWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoSyl9LE8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVz'@;
put 'LnB1c2goSyksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPUsubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDMyKXJldHVybiIiO3ZhciBrPXooYWUuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5n'@;
put 'ZXREZWNvZGVyKGssdGhpcy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKEspfSxSLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgSz1hZS5jb25jYXQo'@;
put 'dGhpcy5pbml0aWFsQnl0ZXMpLEk9eihLLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoSSx0aGlzLm9wdGlvbnMpO3ZhciBrPXRoaXMuZGVjb2Rlci53cml0ZShLKSxFPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gRT9r'@;
put 'K0U6a31yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sNzgzNTQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChZLFgpe3RoaXMuaWNvbnY9WH1JZS51dGY3PXgsSWUudW5pY29kZTExdXRmNz0idXRmNyIseC5wcm90b3R5cGUuZW5j'@;
put 'b2Rlcj1sZSx4LnByb3RvdHlwZS5kZWNvZGVyPU0seC5wcm90b3R5cGUuYm9tQXdhcmU9ITA7dmFyIG09L1teQS1aYS16MC05J1woXCksLVwuXC86XD8gXG5cclx0XSsvZztmdW5jdGlvbiBsZShZLFgpe3RoaXMuaWNvbnY9WC5pY29udn1mdW5jdGlvbiBNKFksWCl7dGhpcy5pY29udj1YLmlj'@;
put 'b252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWSl7cmV0dXJuIGFlLmZyb20oWS5yZXBsYWNlKG0sZnVuY3Rpb24oWCl7cmV0dXJuIisiKygiKyI9PT1YPyIiOnRoaXMuaWNvbnYuZW5jb2RlKFgsInV0ZjE2LWJlIiku'@;
put 'dG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoLz0rJC8sIiIpKSsiLSJ9LmJpbmQodGhpcykpKX0sbGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe307Zm9yKHZhciBPPS9bQS1aYS16MC05XC8rXS8sUj1bXSx6PTA7ejwyNTY7eisrKVJbel09Ty50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUo'@;
put 'eikpO3ZhciBLPSIrIi5jaGFyQ29kZUF0KDApLEk9Ii0iLmNoYXJDb2RlQXQoMCksaz0iJiIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBFKFksWCl7dGhpcy5pY29udj1YfWZ1bmN0aW9uIGooWSxYKXt0aGlzLmljb252PVguaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3Vt'@;
put 'PWFlLmFsbG9jKDYpLHRoaXMuYmFzZTY0QWNjdW1JZHg9MH1mdW5jdGlvbiBWKFksWCl7dGhpcy5pY29udj1YLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1NLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihZKXtmb3IodmFyIFg9IiIsVT0wLHE9dGhpcy5pbkJh'@;
put 'c2U2NCxlZT10aGlzLmJhc2U2NEFjY3VtLHRlPTA7dGU8WS5sZW5ndGg7dGUrKylpZihxKXtpZighUltZW3RlXV0pe2lmKHRlPT1VJiZZW3RlXT09SSlYKz0iKyI7ZWxzZXt2YXIgb2U9ZWUrWS5zbGljZShVLHRlKS50b1N0cmluZygpO1grPXRoaXMuaWNvbnYuZGVjb2RlKGFlLmZyb20ob2Us'@;
put 'ImJhc2U2NCIpLCJ1dGYxNi1iZSIpfVlbdGVdIT1JJiZ0ZS0tLFU9dGUrMSxxPSExLGVlPSIifX1lbHNlIFlbdGVdPT1LJiYoWCs9dGhpcy5pY29udi5kZWNvZGUoWS5zbGljZShVLHRlKSwiYXNjaWkiKSxVPXRlKzEscT0hMCk7aWYocSl7dmFyIHNlPShvZT1lZStZLnNsaWNlKFUpLnRvU3Ry'@;
put 'aW5nKCkpLmxlbmd0aC1vZS5sZW5ndGglODtlZT1vZS5zbGljZShzZSksb2U9b2Uuc2xpY2UoMCxzZSksWCs9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbShvZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9ZWxzZSBYKz10aGlzLmljb252LmRlY29kZShZLnNsaWNlKFUpLCJhc2NpaSIpO3JldHVy'@;
put 'biB0aGlzLmluQmFzZTY0PXEsdGhpcy5iYXNlNjRBY2N1bT1lZSxYfSxNLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgWT0iIjtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGg+MCYmKFk9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbSh0aGlzLmJhc2U2'@;
put 'NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLFl9LEllLnV0ZjdpbWFwPUUsRS5wcm90b3R5cGUuZW5jb2Rlcj1qLEUucHJvdG90eXBlLmRlY29kZXI9VixFLnByb3RvdHlwZS5ib21Bd2FyZT0hMCxqLnByb3RvdHlwZS53'@;
put 'cml0ZT1mdW5jdGlvbihZKXtmb3IodmFyIFg9dGhpcy5pbkJhc2U2NCxVPXRoaXMuYmFzZTY0QWNjdW0scT10aGlzLmJhc2U2NEFjY3VtSWR4LGVlPWFlLmFsbG9jKDUqWS5sZW5ndGgrMTApLHRlPTAsb2U9MDtvZTxZLmxlbmd0aDtvZSsrKXt2YXIgc2U9WS5jaGFyQ29kZUF0KG9lKTszMjw9'@;
put 'c2UmJnNlPD0xMjY/KFgmJihxPjAmJih0ZSs9ZWUud3JpdGUoVS5zbGljZSgwLHEpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksdGUpLHE9MCksZWVbdGUrK109SSxYPSExKSxYfHwoZWVbdGUrK109c2Usc2U9PT1rJiYoZWVbdGUrK109'@;
put 'SSkpKTooWHx8KGVlW3RlKytdPWssWD0hMCksWCYmKFVbcSsrXT1zZT4+OCxVW3ErK109MjU1JnNlLHE9PVUubGVuZ3RoJiYodGUrPWVlLndyaXRlKFUudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKSx0ZSkscT0wKSkpfXJldHVybiB0aGlzLmluQmFzZTY0PVgsdGhpcy5i'@;
put 'YXNlNjRBY2N1bUlkeD1xLGVlLnNsaWNlKDAsdGUpfSxqLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgWT1hZS5hbGxvYygxMCksWD0wO3JldHVybiB0aGlzLmluQmFzZTY0JiYodGhpcy5iYXNlNjRBY2N1bUlkeD4wJiYoWCs9WS53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAs'@;
put 'dGhpcy5iYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKS5yZXBsYWNlKC89KyQvLCIiKSxYKSx0aGlzLmJhc2U2NEFjY3VtSWR4PTApLFlbWCsrXT1JLHRoaXMuaW5CYXNlNjQ9ITEpLFkuc2xpY2UoMCxYKX07dmFyIEI9Ui5zbGljZSgpO0JbIiwi'@;
put 'LmNoYXJDb2RlQXQoMCldPSEwLFYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFkpe2Zvcih2YXIgWD0iIixVPTAscT10aGlzLmluQmFzZTY0LGVlPXRoaXMuYmFzZTY0QWNjdW0sdGU9MDt0ZTxZLmxlbmd0aDt0ZSsrKWlmKHEpe2lmKCFCW1lbdGVdXSl7aWYodGU9PVUmJllbdGVdPT1JKVgr'@;
put 'PSImIjtlbHNle3ZhciBvZT1lZStZLnNsaWNlKFUsdGUpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCIvIik7WCs9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbShvZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9WVt0ZV0hPUkmJnRlLS0sVT10ZSsxLHE9ITEsZWU9IiJ9fWVsc2UgWVt0ZV09PWsm'@;
put 'JihYKz10aGlzLmljb252LmRlY29kZShZLnNsaWNlKFUsdGUpLCJhc2NpaSIpLFU9dGUrMSxxPSEwKTtpZihxKXt2YXIgc2U9KG9lPWVlK1kuc2xpY2UoVSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKSkubGVuZ3RoLW9lLmxlbmd0aCU4O2VlPW9lLnNsaWNlKHNlKSxvZT1vZS5zbGlj'@;
put 'ZSgwLHNlKSxYKz10aGlzLmljb252LmRlY29kZShhZS5mcm9tKG9lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIFgrPXRoaXMuaWNvbnYuZGVjb2RlKFkuc2xpY2UoVSksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9cSx0aGlzLmJhc2U2NEFjY3VtPWVlLFh9LFYucHJvdG90eXBl'@;
put 'LmVuZD1mdW5jdGlvbigpe3ZhciBZPSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYoWT10aGlzLmljb252LmRlY29kZShhZS5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sImJhc2U2NCIpLCJ1dGYxNi1iZSIpKSx0aGlzLmluQmFzZTY0PSExLHRoaXMu'@;
put 'YmFzZTY0QWNjdW09IiIsWX19LDYzMDE4OihhdCxJZSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYWUobSxsZSl7dGhpcy5lbmNvZGVyPW0sdGhpcy5hZGRCT009ITB9ZnVuY3Rpb24geChtLGxlKXt0aGlzLmRlY29kZXI9bSx0aGlzLnBhc3M9ITEsdGhpcy5vcHRpb25zPWxlfHx7fX1JZS5Q'@;
put 'cmVwZW5kQk9NPWFlLGFlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5hZGRCT00mJihtPSJcdWZlZmYiK20sdGhpcy5hZGRCT009ITEpLHRoaXMuZW5jb2Rlci53cml0ZShtKX0sYWUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIu'@;
put 'ZW5kKCl9LEllLlN0cmlwQk9NPXgseC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSl7dmFyIGxlPXRoaXMuZGVjb2Rlci53cml0ZShtKTtyZXR1cm4gdGhpcy5wYXNzfHwhbGV8fCgiXHVmZWZmIj09PWxlWzBdJiYobGU9bGUuc2xpY2UoMSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0'@;
put 'aW9ucy5zdHJpcEJPTSYmdGhpcy5vcHRpb25zLnN0cmlwQk9NKCkpLHRoaXMucGFzcz0hMCksbGV9LHgucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSw1MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcix4'@;
put 'PUYoNjMwMTgpLG09YXQuZXhwb3J0czttLmVuY29kaW5ncz1udWxsLG0uZGVmYXVsdENoYXJVbmljb2RlPSJcdWZmZmQiLG0uZGVmYXVsdENoYXJTaW5nbGVCeXRlPSI/IixtLmVuY29kZT1mdW5jdGlvbihSLHosSyl7Uj0iIisoUnx8IiIpO3ZhciBJPW0uZ2V0RW5jb2Rlcih6LEspLGs9SS53'@;
put 'cml0ZShSKSxFPUkuZW5kKCk7cmV0dXJuIEUmJkUubGVuZ3RoPjA/YWUuY29uY2F0KFtrLEVdKTprfSxtLmRlY29kZT1mdW5jdGlvbihSLHosSyl7InN0cmluZyI9PXR5cGVvZiBSJiYobS5za2lwRGVjb2RlV2FybmluZ3x8KGNvbnNvbGUuZXJyb3IoIkljb252LWxpdGUgd2FybmluZzogZGVj'@;
put 'b2RlKCktaW5nIHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2FzaHR1Y2hraW4vaWNvbnYtbGl0ZS93aWtpL1VzZS1CdWZmZXJzLXdoZW4tZGVjb2RpbmciKSxtLnNraXBEZWNvZGVXYXJuaW5nPSEwKSxSPWFlLmZyb20oIiIrKFJ8fCIiKSwiYmlu'@;
put 'YXJ5IikpO3ZhciBJPW0uZ2V0RGVjb2Rlcih6LEspLGs9SS53cml0ZShSKSxFPUkuZW5kKCk7cmV0dXJuIEU/aytFOmt9LG0uZW5jb2RpbmdFeGlzdHM9ZnVuY3Rpb24oUil7dHJ5e3JldHVybiBtLmdldENvZGVjKFIpLCEwfWNhdGNoe3JldHVybiExfX0sbS50b0VuY29kaW5nPW0uZW5jb2Rl'@;
put 'LG0uZnJvbUVuY29kaW5nPW0uZGVjb2RlLG0uX2NvZGVjRGF0YUNhY2hlPXt9LG0uZ2V0Q29kZWM9ZnVuY3Rpb24oUil7bS5lbmNvZGluZ3N8fChtLmVuY29kaW5ncz1GKDQ0NjU3KSk7Zm9yKHZhciB6PW0uX2Nhbm9uaWNhbGl6ZUVuY29kaW5nKFIpLEs9e307Oyl7dmFyIEk9bS5fY29kZWNE'@;
put 'YXRhQ2FjaGVbel07aWYoSSlyZXR1cm4gSTt2YXIgaz1tLmVuY29kaW5nc1t6XTtzd2l0Y2godHlwZW9mIGspe2Nhc2Uic3RyaW5nIjp6PWs7YnJlYWs7Y2FzZSJvYmplY3QiOmZvcih2YXIgRSBpbiBrKUtbRV09a1tFXTtLLmVuY29kaW5nTmFtZXx8KEsuZW5jb2RpbmdOYW1lPXopLHo9ay50'@;
put 'eXBlO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBLLmVuY29kaW5nTmFtZXx8KEsuZW5jb2RpbmdOYW1lPXopLEk9bmV3IGsoSyxtKSxtLl9jb2RlY0RhdGFDYWNoZVtLLmVuY29kaW5nTmFtZV09SSxJO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyBub3QgcmVjb2duaXpl'@;
put 'ZDogJyIrUisiJyAoc2VhcmNoZWQgYXM6ICciK3orIicpIil9fX0sbS5fY2Fub25pY2FsaXplRW5jb2Rpbmc9ZnVuY3Rpb24oTyl7cmV0dXJuKCIiK08pLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvOlxkezR9JHxbXjAtOWEtel0vZywiIil9LG0uZ2V0RW5jb2Rlcj1mdW5jdGlvbihSLHope3Zh'@;
put 'ciBLPW0uZ2V0Q29kZWMoUiksST1uZXcgSy5lbmNvZGVyKHosSyk7cmV0dXJuIEsuYm9tQXdhcmUmJnomJnouYWRkQk9NJiYoST1uZXcgeC5QcmVwZW5kQk9NKEkseikpLEl9LG0uZ2V0RGVjb2Rlcj1mdW5jdGlvbihSLHope3ZhciBLPW0uZ2V0Q29kZWMoUiksST1uZXcgSy5kZWNvZGVyKHos'@;
put 'Syk7cmV0dXJuIEsuYm9tQXdhcmUmJiEoeiYmITE9PT16LnN0cmlwQk9NKSYmKEk9bmV3IHguU3RyaXBCT00oSSx6KSksSX07dmFyIGxlPXR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy52ZXJzaW9ucyYmcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO2lmKGxlKXt2YXIgTT1sZS5zcGxpdCgiLiIp'@;
put 'Lm1hcChOdW1iZXIpOyhNWzBdPjB8fE1bMV0+PTEwKSYmRig2OTMzMSkobSksRigxOTUyNykobSl9fSwyMjYwMTooYXQsSWUpPT57SWUucmVhZD1mdW5jdGlvbihGLGFlLHgsbSxsZSl7dmFyIE0sTyxSPTgqbGUtbS0xLHo9KDE8PFIpLTEsSz16Pj4xLEk9LTcsaz14P2xlLTE6MCxFPXg/LTE6'@;
put 'MSxqPUZbYWUra107Zm9yKGsrPUUsTT1qJigxPDwtSSktMSxqPj49LUksSSs9UjtJPjA7TT0yNTYqTStGW2FlK2tdLGsrPUUsSS09OCk7Zm9yKE89TSYoMTw8LUkpLTEsTT4+PS1JLEkrPW07ST4wO089MjU2Kk8rRlthZStrXSxrKz1FLEktPTgpO2lmKDA9PT1NKU09MS1LO2Vsc2V7aWYoTT09'@;
put 'PXopcmV0dXJuIE8/TmFOOjEvMCooaj8tMToxKTtPKz1NYXRoLnBvdygyLG0pLE0tPUt9cmV0dXJuKGo/LTE6MSkqTypNYXRoLnBvdygyLE0tbSl9LEllLndyaXRlPWZ1bmN0aW9uKEYsYWUseCxtLGxlLE0pe3ZhciBPLFIseixLPTgqTS1sZS0xLEk9KDE8PEspLTEsaz1JPj4xLEU9MjM9PT1s'@;
put 'ZT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsaj1tPzA6TS0xLFY9bT8xOi0xLEI9YWU8MHx8MD09PWFlJiYxL2FlPDA/MTowO2ZvcihhZT1NYXRoLmFicyhhZSksaXNOYU4oYWUpfHxhZT09PTEvMD8oUj1pc05hTihhZSk/MTowLE89SSk6KE89TWF0aC5mbG9vcihNYXRoLmxv'@;
put 'ZyhhZSkvTWF0aC5MTjIpLGFlKih6PU1hdGgucG93KDIsLU8pKTwxJiYoTy0tLHoqPTIpLChhZSs9TytrPj0xP0UvejpFKk1hdGgucG93KDIsMS1rKSkqej49MiYmKE8rKyx6Lz0yKSxPK2s+PUk/KFI9MCxPPUkpOk8raz49MT8oUj0oYWUqei0xKSpNYXRoLnBvdygyLGxlKSxPKz1rKTooUj1h'@;
put 'ZSpNYXRoLnBvdygyLGstMSkqTWF0aC5wb3coMixsZSksTz0wKSk7bGU+PTg7Rlt4K2pdPTI1NSZSLGorPVYsUi89MjU2LGxlLT04KTtmb3IoTz1PPDxsZXxSLEsrPWxlO0s+MDtGW3gral09MjU1Jk8sais9VixPLz0yNTYsSy09OCk7Rlt4K2otVl18PTEyOCpCfX0sNjY2OTg6YXQ9PnthdC5l'@;
put 'eHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEYsYWUpe2FlJiYoRi5zdXBlcl89YWUsRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpGLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmln'@;
put 'dXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oRixhZSl7aWYoYWUpe0Yuc3VwZXJfPWFlO3ZhciB4PWZ1bmN0aW9uKCl7fTt4LnByb3RvdHlwZT1hZS5wcm90b3R5cGUsRi5wcm90b3R5cGU9bmV3IHgsRi5wcm90b3R5cGUuY29uc3RydWN0b3I9Rn19fSw3NTgyOTooYXQsSWUsRik9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9Rig2MDM4MCksbT1GKDg0MykuQnVmZmVyLGxlPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gTSgpe3guY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTcz'@;
put 'Mzg3OH1mdW5jdGlvbiBPKGssRSl7cmV0dXJuIGs8PEV8az4+PjMyLUV9ZnVuY3Rpb24gUihrLEUsaixWLEIsWSxYKXtyZXR1cm4gTyhrKyhFJmp8fkUmVikrQitZfDAsWCkrRXwwfWZ1bmN0aW9uIHooayxFLGosVixCLFksWCl7cmV0dXJuIE8oaysoRSZWfGomflYpK0IrWXwwLFgpK0V8MH1m'@;
put 'dW5jdGlvbiBLKGssRSxqLFYsQixZLFgpe3JldHVybiBPKGsrKEVeal5WKStCK1l8MCxYKStFfDB9ZnVuY3Rpb24gSShrLEUsaixWLEIsWSxYKXtyZXR1cm4gTyhrKyhqXihFfH5WKSkrQitZfDAsWCkrRXwwfWFlKE0seCksTS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIg'@;
put 'az1sZSxFPTA7RTwxNjsrK0Upa1tFXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkUpO3ZhciBqPXRoaXMuX2EsVj10aGlzLl9iLEI9dGhpcy5fYyxZPXRoaXMuX2Q7aj1SKGosVixCLFksa1swXSwzNjE0MDkwMzYwLDcpLFk9UihZLGosVixCLGtbMV0sMzkwNTQwMjcxMCwxMiksQj1SKEIs'@;
put 'WSxqLFYsa1syXSw2MDYxMDU4MTksMTcpLFY9UihWLEIsWSxqLGtbM10sMzI1MDQ0MTk2NiwyMiksaj1SKGosVixCLFksa1s0XSw0MTE4NTQ4Mzk5LDcpLFk9UihZLGosVixCLGtbNV0sMTIwMDA4MDQyNiwxMiksQj1SKEIsWSxqLFYsa1s2XSwyODIxNzM1OTU1LDE3KSxWPVIoVixCLFksaixr'@;
put 'WzddLDQyNDkyNjEzMTMsMjIpLGo9UihqLFYsQixZLGtbOF0sMTc3MDAzNTQxNiw3KSxZPVIoWSxqLFYsQixrWzldLDIzMzY1NTI4NzksMTIpLEI9UihCLFksaixWLGtbMTBdLDQyOTQ5MjUyMzMsMTcpLFY9UihWLEIsWSxqLGtbMTFdLDIzMDQ1NjMxMzQsMjIpLGo9UihqLFYsQixZLGtbMTJd'@;
put 'LDE4MDQ2MDM2ODIsNyksWT1SKFksaixWLEIsa1sxM10sNDI1NDYyNjE5NSwxMiksQj1SKEIsWSxqLFYsa1sxNF0sMjc5Mjk2NTAwNiwxNyksaj16KGosVj1SKFYsQixZLGosa1sxNV0sMTIzNjUzNTMyOSwyMiksQixZLGtbMV0sNDEyOTE3MDc4Niw1KSxZPXooWSxqLFYsQixrWzZdLDMyMjU0'@;
put 'NjU2NjQsOSksQj16KEIsWSxqLFYsa1sxMV0sNjQzNzE3NzEzLDE0KSxWPXooVixCLFksaixrWzBdLDM5MjEwNjk5OTQsMjApLGo9eihqLFYsQixZLGtbNV0sMzU5MzQwODYwNSw1KSxZPXooWSxqLFYsQixrWzEwXSwzODAxNjA4Myw5KSxCPXooQixZLGosVixrWzE1XSwzNjM0NDg4OTYxLDE0'@;
put 'KSxWPXooVixCLFksaixrWzRdLDM4ODk0Mjk0NDgsMjApLGo9eihqLFYsQixZLGtbOV0sNTY4NDQ2NDM4LDUpLFk9eihZLGosVixCLGtbMTRdLDMyNzUxNjM2MDYsOSksQj16KEIsWSxqLFYsa1szXSw0MTA3NjAzMzM1LDE0KSxWPXooVixCLFksaixrWzhdLDExNjM1MzE1MDEsMjApLGo9eihq'@;
put 'LFYsQixZLGtbMTNdLDI4NTAyODU4MjksNSksWT16KFksaixWLEIsa1syXSw0MjQzNTYzNTEyLDkpLEI9eihCLFksaixWLGtbN10sMTczNTMyODQ3MywxNCksaj1LKGosVj16KFYsQixZLGosa1sxMl0sMjM2ODM1OTU2MiwyMCksQixZLGtbNV0sNDI5NDU4ODczOCw0KSxZPUsoWSxqLFYsQixr'@;
put 'WzhdLDIyNzIzOTI4MzMsMTEpLEI9SyhCLFksaixWLGtbMTFdLDE4MzkwMzA1NjIsMTYpLFY9SyhWLEIsWSxqLGtbMTRdLDQyNTk2NTc3NDAsMjMpLGo9SyhqLFYsQixZLGtbMV0sMjc2Mzk3NTIzNiw0KSxZPUsoWSxqLFYsQixrWzRdLDEyNzI4OTMzNTMsMTEpLEI9SyhCLFksaixWLGtbN10s'@;
put 'NDEzOTQ2OTY2NCwxNiksVj1LKFYsQixZLGosa1sxMF0sMzIwMDIzNjY1NiwyMyksaj1LKGosVixCLFksa1sxM10sNjgxMjc5MTc0LDQpLFk9SyhZLGosVixCLGtbMF0sMzkzNjQzMDA3NCwxMSksQj1LKEIsWSxqLFYsa1szXSwzNTcyNDQ1MzE3LDE2KSxWPUsoVixCLFksaixrWzZdLDc2MDI5'@;
put 'MTg5LDIzKSxqPUsoaixWLEIsWSxrWzldLDM2NTQ2MDI4MDksNCksWT1LKFksaixWLEIsa1sxMl0sMzg3MzE1MTQ2MSwxMSksQj1LKEIsWSxqLFYsa1sxNV0sNTMwNzQyNTIwLDE2KSxqPUkoaixWPUsoVixCLFksaixrWzJdLDMyOTk2Mjg2NDUsMjMpLEIsWSxrWzBdLDQwOTYzMzY0NTIsNiks'@;
put 'WT1JKFksaixWLEIsa1s3XSwxMTI2ODkxNDE1LDEwKSxCPUkoQixZLGosVixrWzE0XSwyODc4NjEyMzkxLDE1KSxWPUkoVixCLFksaixrWzVdLDQyMzc1MzMyNDEsMjEpLGo9SShqLFYsQixZLGtbMTJdLDE3MDA0ODU1NzEsNiksWT1JKFksaixWLEIsa1szXSwyMzk5OTgwNjkwLDEwKSxCPUko'@;
put 'QixZLGosVixrWzEwXSw0MjkzOTE1NzczLDE1KSxWPUkoVixCLFksaixrWzFdLDIyNDAwNDQ0OTcsMjEpLGo9SShqLFYsQixZLGtbOF0sMTg3MzMxMzM1OSw2KSxZPUkoWSxqLFYsQixrWzE1XSw0MjY0MzU1NTUyLDEwKSxCPUkoQixZLGosVixrWzZdLDI3MzQ3Njg5MTYsMTUpLFY9SShWLEIs'@;
put 'WSxqLGtbMTNdLDEzMDkxNTE2NDksMjEpLGo9SShqLFYsQixZLGtbNF0sNDE0OTQ0NDIyNiw2KSxZPUkoWSxqLFYsQixrWzExXSwzMTc0NzU2OTE3LDEwKSxCPUkoQixZLGosVixrWzJdLDcxODc4NzI1OSwxNSksVj1JKFYsQixZLGosa1s5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMu'@;
put 'X2EranwwLHRoaXMuX2I9dGhpcy5fYitWfDAsdGhpcy5fYz10aGlzLl9jK0J8MCx0aGlzLl9kPXRoaXMuX2QrWXwwfSxNLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5f'@;
put 'YmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9i'@;
put 'bG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIGs9bS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIGsud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksay53cml0ZUludDMyTEUodGhpcy5fYiw0KSxrLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLGsu'@;
put 'd3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLGt9LGF0LmV4cG9ydHM9TX0sNDg2MDY6KGF0LEllLEYpPT57dmFyIGFlPUYoNjAzMDMpLHg9Rig2MDA4Mik7ZnVuY3Rpb24gbShsZSl7dGhpcy5yYW5kPWxlfHxuZXcgeC5SYW5kfWF0LmV4cG9ydHM9bSxtLmNyZWF0ZT1mdW5jdGlvbihNKXtyZXR1'@;
put 'cm4gbmV3IG0oTSl9LG0ucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24oTSl7dmFyIE89TS5iaXRMZW5ndGgoKSxSPU1hdGguY2VpbChPLzgpO2Rve3ZhciB6PW5ldyBhZSh0aGlzLnJhbmQuZ2VuZXJhdGUoUikpfXdoaWxlKHouY21wKE0pPj0wKTtyZXR1cm4gen0sbS5wcm90b3R5cGUu'@;
put 'X3JhbmRyYW5nZT1mdW5jdGlvbihNLE8pe3ZhciBSPU8uc3ViKE0pO3JldHVybiBNLmFkZCh0aGlzLl9yYW5kYmVsb3coUikpfSxtLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKE0sTyxSKXt2YXIgej1NLmJpdExlbmd0aCgpLEs9YWUubW9udChNKSxJPW5ldyBhZSgxKS50b1JlZChLKTtPfHwo'@;
put 'Tz1NYXRoLm1heCgxLHovNDh8MCkpO2Zvcih2YXIgaz1NLnN1Ym4oMSksRT0wOyFrLnRlc3RuKEUpO0UrKyk7Zm9yKHZhciBqPU0uc2hybihFKSxWPWsudG9SZWQoSyk7Tz4wO08tLSl7dmFyIFk9dGhpcy5fcmFuZHJhbmdlKG5ldyBhZSgyKSxrKTtSJiZSKFkpO3ZhciBYPVkudG9SZWQoSyku'@;
put 'cmVkUG93KGopO2lmKDAhPT1YLmNtcChJKSYmMCE9PVguY21wKFYpKXtmb3IodmFyIFU9MTtVPEU7VSsrKXtpZigwPT09KFg9WC5yZWRTcXIoKSkuY21wKEkpKXJldHVybiExO2lmKDA9PT1YLmNtcChWKSlicmVha31pZihVPT09RSlyZXR1cm4hMX19cmV0dXJuITB9LG0ucHJvdG90eXBlLmdl'@;
put 'dERpdmlzb3I9ZnVuY3Rpb24oTSxPKXt2YXIgUj1NLmJpdExlbmd0aCgpLHo9YWUubW9udChNKSxLPW5ldyBhZSgxKS50b1JlZCh6KTtPfHwoTz1NYXRoLm1heCgxLFIvNDh8MCkpO2Zvcih2YXIgST1NLnN1Ym4oMSksaz0wOyFJLnRlc3RuKGspO2srKyk7Zm9yKHZhciBFPU0uc2hybihrKSxq'@;
put 'PUkudG9SZWQoeik7Tz4wO08tLSl7dmFyIFY9dGhpcy5fcmFuZHJhbmdlKG5ldyBhZSgyKSxJKSxCPU0uZ2NkKFYpO2lmKDAhPT1CLmNtcG4oMSkpcmV0dXJuIEI7dmFyIFk9Vi50b1JlZCh6KS5yZWRQb3coRSk7aWYoMCE9PVkuY21wKEspJiYwIT09WS5jbXAoaikpe2Zvcih2YXIgWD0xO1g8'@;
put 'aztYKyspe2lmKDA9PT0oWT1ZLnJlZFNxcigpKS5jbXAoSykpcmV0dXJuIFkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKE0pO2lmKDA9PT1ZLmNtcChqKSlicmVha31pZihYPT09aylyZXR1cm4oWT1ZLnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2QoTSl9fXJldHVybiExfX0sNjAzMDM6'@;
put 'ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcsYil7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1iO3ZhciBEPWZ1bmN0aW9uKCl7fTtELnByb3RvdHlw'@;
put 'ZT1iLnByb3RvdHlwZSxHLnByb3RvdHlwZT1uZXcgRCxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxiLEQpe2lmKE0uaXNCTihHKSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09'@;
put 'RyYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYoRD1iLGI9MTApLHRoaXMuX2luaXQoR3x8MCxifHwxMCxEfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBl'@;
put 'b2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDU2NjE5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+PTk3JiZEPD0xMDI/RC04NzpELTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQp'@;
put 'e3ZhciBIPVIoRyxEKTtyZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8PDQpLEh9ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgubWluKEcubGVuZ3RoLEQpLEM9YjtDPGc7QysrKXt2YXIgUz1HLmNoYXJDb2RlQXQoQyktNDg7Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+'@;
put 'PTE3P1MtMTcrMTA6U31yZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sTS5tYXg9ZnVu'@;
put 'Y3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLEQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtp'@;
put 'Zigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLEQsSCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTImJkQ8PTM2KTt2YXIgTj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTisrLHRoaXMubmVnYXRp'@;
put 'dmU9MSksTjxiLmxlbmd0aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChiLE4sSCk6KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAm'@;
put 'Jih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5'@;
put 'OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKX0sTS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLEQsSCl7aWYobSgi'@;
put 'bnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlz'@;
put 'Lmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTi0xXTw8OHxiW04tMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMm'@;
put 'NjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOKzFdPDw4fGJbTisyXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEw'@;
put 'ODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3Io'@;
put 'dmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIFMsZz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+PUQ7Ti09MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18'@;
put 'PVM+Pj4yNik6Zys9ODtlbHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0wP0QrMTpEO048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LE0u'@;
put 'cHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3MTA4ODYzO2cqPUQpTisrO04tLSxnPWcvRHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1ILFM9QyVOLHY9TWF0aC5taW4oQyxDLVMpK0gscD0w'@;
put 'LHc9SDt3PHY7dys9TilwPUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1TKXt2YXIgSj0xO2ZvcihwPUsoYix3LGIubGVuZ3RoLEQpLHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5p'@;
put 'bXVsbihKKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7'@;
put 'RCsrKWIud29yZHNbRF09dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxNLnBy'@;
put 'b3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgt'@;
put 'MV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwx'@;
put 'MSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgw'@;
put 'OCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0'@;
put 'NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZTt2YXIgSD1HLmxlbmd0aCtiLmxlbmd0aHwwO0QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgTj0wfEcud29yZHNbMF0sZz0wfGIud29y'@;
put 'ZHNbMF0sQz1OKmcsdj1DLzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYsSj02NzEwODg2MyZ2LG5lPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZGU9TWF0aC5tYXgoMCxwLUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsr'@;
put 'KXcrPShDPShOPTB8Ry53b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNbZGVdKStKKS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8Six2PTB8d31yZXR1cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6RC5sZW5ndGgtLSxELnN0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9'@;
put 'ZnVuY3Rpb24oYixEKXt2YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMud29yZHNbQ10sdj0oMTY3NzcyMTUmKFM8PE58ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShn'@;
put 'PVM+Pj4yNC1OJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXYubGVuZ3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZvcigwIT09ZyYmKEg9Zy50b1N0cmluZygxNikrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUm'@;
put 'JihIPSItIitIKSxIfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPWtbYl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihKLm5lZ2F0aXZlPTA7IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5tb2RuKHcpLnRvU3RyaW5nKGIpO0g9KEo9Si5pZGl2bih3KSkuaXNaZXJv'@;
put 'KCk/bmUrSDpJW3AtbmUubGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfW0oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90'@;
put 'b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53'@;
put 'b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LE0ucHJvdG90eXBl'@;
put 'LnRvQnVmZmVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88InUiKSx0aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtl'@;
put 'PWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxnPUh8fE1hdGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbShnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdixw'@;
put 'LEM9ImxlIj09PUQsUz1uZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW3BdPXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1lbHNle2ZvcihwPTA7cDxnLU47cCsrKVNbcF09MDtmb3IocD0wOyF3Lmlz'@;
put 'WmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ctcC0xXT12fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciBEPWIsSD0wO3JldHVybiBEPj00'@;
put 'MDk2JiYoSCs9MTMsRD4+Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49NyksRD49OCYmKEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZE'@;
put 'fHwoSCs9MTMsRD4+Pj0xMyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUmRHx8KEgrPTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyssSH0sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5n'@;
put 'dGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tEXSk7'@;
put 'aWYoYis9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5h'@;
put 'YnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5'@;
put 'cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKyspdGhpcy53b3Jkc1tEXT10aGlzLndvcmRzW0RdfGIud29yZHNbRF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5w'@;
put 'cm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5p'@;
put 'b3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5n'@;
put 'dGg/Yjp0aGlzO2Zvcih2YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMu'@;
put 'bmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEQ9dGhpcyxIPWIpOihEPWIsSD10aGlzKTtmb3IodmFy'@;
put 'IE49MDtOPEgubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl1eSC53b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlw'@;
put 'ZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9y'@;
put 'KHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49'@;
put 'MCk7dmFyIEQ9MHxNYXRoLmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4cGFuZChEKSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29yZHNbTl09NjcxMDg4NjMmfnRoaXMud29yZHNbTl07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNbTl09fnRoaXMud29yZHNbTl0mNjcxMDg4'@;
put 'NjM+PjI2LUgpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0'@;
put 'dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlzLndvcmRzW0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgRCxILE47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0'@;
put 'aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSxELl9u'@;
put 'b3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1iKTooSD1iLE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrKDB8Ti53b3Jkc1tDXSkrZyksZz1EPj4+MjY7Zm9yKDswIT09'@;
put 'ZyYmQzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8'@;
put 'SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCxEPXRoaXMuc3ViKGIpLGIubmVnYXRpdmVe'@;
put 'PTEsRCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsRCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBl'@;
put 'LmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMu'@;
put 'bmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlzLmNtcChiKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhOPXRoaXMsZz1iKTooTj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8'@;
put 'Zy5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAhPT1DJiZTPE4ubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09'@;
put 'PUMmJlM8Ti5sZW5ndGgmJk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlw'@;
put 'ZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3JkcyxnPUQud29yZHMsQz1ILndvcmRzLFM9MCxKPTB8TlswXSxuZT04MTkxJkosZGU9Sj4+PjEzLGZlPTB8TlsxXSx4ZT04MTkxJmZlLExl'@;
put 'PWZlPj4+MTMsRmU9MHxOWzJdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxXZT0wfE5bM10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLEplPTB8Tls0XSxsdD04MTkxJkplLFBlPUplPj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0wfE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+'@;
put 'PjEzLGh0PTB8Tls3XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxOWzhdLGl0PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEzLG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHxnWzFdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywk'@;
put 'bj0wfGdbMl0sSG49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyxtbj0wfGdbNV0scnQ9ODE5MSZtbixJdD1tbj4+PjEzLEp0PTB8Z1s2XSxEdD04MTkxJkp0LHB0PUp0Pj4+MTMsWXQ9MHxn'@;
put 'WzddLEluPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8Z1s5XSxSbj04MTkxJkJuLCR0PUJuPj4+MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIFBuPShTKyh2PU1hdGguaW11bChuZSxDbikp'@;
put 'fDApKygoODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkrKFBuPj4+MjYpfDAsUG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkp'@;
put 'K01hdGguaW11bChMZSxDbil8MCx3PU1hdGguaW11bChMZSxVdCk7dmFyIG5pPShTKyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChkZSxXbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxlbil8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGguaW11bChqZSxDbil8MCx3PU1hdGguaW11bChqZSxVdCksdj12K01hdGguaW11bCh4ZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVu'@;
put 'KXwwKStNYXRoLmltdWwoTGUsV24pfDAsdz13K01hdGguaW11bChMZSxlbil8MDt2YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsSG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGRlLEhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVs'@;
put 'KGRlLGZ0KXwwKSsocD4+PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0KSkrTWF0aC5pbXVsKFllLENuKXwwLHc9TWF0aC5pbXVsKFllLFV0KSx2PXYrTWF0aC5pbXVsKE9lLFduKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoT2UsZW4pfDApK01hdGguaW11bChqZSxXbil8MCx3PXcrTWF0aC5pbXVsKGplLGVuKXwwLHY9ditNYXRoLmltdWwoeGUsSG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLEhuKXwwLHc9dytNYXRoLmltdWwoTGUsZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0'@;
put 'aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENu'@;
put 'KSxwPShwPU1hdGguaW11bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8MCx3PU1hdGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwoWWUsV24pfDAsdz13K01hdGguaW11bChZZSxlbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKE9lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChqZSxIbil8MCx3PXcrTWF0aC5pbXVsKGplLGZ0KXwwLHY9ditNYXRoLmltdWwoeGUsaG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKExlLGhuKXwwLHc9dytNYXRoLmltdWwo'@;
put 'TGUsd3QpfDA7dmFyIHFyPShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGguaW11bChkZSxfdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxOdCl8MCkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXIm'@;
put 'PTY3MTA4ODYzLHY9TWF0aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11bChBZSxVdCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxVdCksdj12K01hdGguaW11bChsdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGVuKXwwKStNYXRoLmltdWwoUGUsV24pfDAsdz13K01h'@;
put 'dGguaW11bChQZSxlbil8MCx2PXYrTWF0aC5pbXVsKEtlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxIbil8MCx3PXcrTWF0aC5pbXVsKFllLGZ0KXwwLHY9ditNYXRoLmltdWwoT2UsaG4pfDAscD0ocD1wK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5p'@;
put 'bXVsKGplLGhuKXwwLHc9dytNYXRoLmltdWwoamUsd3QpfDAsdj12K01hdGguaW11bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoTGUsX3QpfDAsdz13K01hdGguaW11bChMZSxOdCl8MDt2YXIgZ2k9KFMrKHY9ditNYXRoLmltdWwobmUscnQpfDApfDAp'@;
put 'KygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxJdCl8MCkrTWF0aC5pbXVsKGRlLHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEl0KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhl'@;
put 'LFV0KSkrTWF0aC5pbXVsKFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0KSx2PXYrTWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZW4pfDApK01hdGguaW11bChUZSxXbil8MCx3PXcrTWF0aC5pbXVsKFRlLGVuKXwwLHY9ditNYXRoLmltdWwobHQsSG4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bChsdCxmdCl8MCkrTWF0aC5pbXVsKFBlLEhuKXwwLHc9dytNYXRoLmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsdz13K01hdGguaW11bChZZSx3dCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKE9lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChqZSxfdCl8MCx3PXcrTWF0aC5pbXVsKGplLE50KXwwLHY9ditNYXRoLmltdWwoeGUscnQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'TGUsSXQpfDA7dmFyIHhyPShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bChkZSxEdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxwdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHIm'@;
put 'PTY3MTA4ODYzLHY9TWF0aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11bChNZSxVdCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxVdCksdj12K01hdGguaW11bChYZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGVuKXwwKStNYXRoLmltdWwoVWUsV24pfDAsdz13K01h'@;
put 'dGguaW11bChVZSxlbil8MCx2PXYrTWF0aC5pbXVsKEFlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCx3PXcrTWF0aC5pbXVsKFRlLGZ0KXwwLHY9ditNYXRoLmltdWwobHQsaG4pfDAscD0ocD1wK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5p'@;
put 'bXVsKFBlLGhuKXwwLHc9dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01hdGguaW11bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUsX3QpfDAsdz13K01hdGguaW11bChZZSxOdCl8MCx2PXYrTWF0aC5pbXVsKE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoT2UsSXQpfDApK01hdGguaW11bChqZSxydCl8MCx3PXcrTWF0aC5pbXVsKGplLEl0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKExlLER0KXwwLHc9dytNYXRoLmltdWwoTGUscHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0'@;
put 'aC5pbXVsKG5lLEluKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChkZSxJbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGl0LENu'@;
put 'KSxwPShwPU1hdGguaW11bChpdCxVdCkpK01hdGguaW11bCh1dCxDbil8MCx3PU1hdGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwoRGUsV24pfDAsdz13K01hdGguaW11bChEZSxlbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11bChVZSxIbil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditNYXRoLmltdWwoQWUsaG4pfDAscD0ocD1wK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLHc9dytNYXRoLmltdWwo'@;
put 'VGUsd3QpfDAsdj12K01hdGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGguaW11bChQZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsSXQpfDApK01hdGguaW11bChZZSxy'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKFllLEl0KXwwLHY9ditNYXRoLmltdWwoT2UsRHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKGplLER0KXwwLHc9dytNYXRoLmltdWwoamUscHQpfDAsdj12K01hdGguaW11bCh4ZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0'@;
put 'KXwwKStNYXRoLmltdWwoTGUsSW4pfDAsdz13K01hdGguaW11bChMZSx6dCl8MDt2YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGRlLHhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVs'@;
put 'KGRlLHNuKXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0KSkrTWF0aC5pbXVsKFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0LFV0KSx2PXYrTWF0aC5pbXVsKGl0LFduKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoaXQsZW4pfDApK01hdGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5pbXVsKHV0LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsSG4pfDAscD0ocD1wK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLEhuKXwwLHc9dytNYXRoLmltdWwoRGUsZnQpfDAsdj12K01hdGguaW11bChYZSxo'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEFlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFRlLE50KXww'@;
put 'LHY9ditNYXRoLmltdWwobHQscnQpfDAscD0ocD1wK01hdGguaW11bChsdCxJdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUsSXQpfDAsdj12K01hdGguaW11bChLZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsdz13'@;
put 'K01hdGguaW11bChZZSxwdCl8MCx2PXYrTWF0aC5pbXVsKE9lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxJbil8MCx3PXcrTWF0aC5pbXVsKGplLHp0KXwwLHY9ditNYXRoLmltdWwoeGUseG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxzbil8MCkrTWF0'@;
put 'aC5pbXVsKExlLHhuKXwwLHc9dytNYXRoLmltdWwoTGUsc24pfDA7dmFyIG5vPShTKyh2PXYrTWF0aC5pbXVsKG5lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsJHQpfDApK01hdGguaW11bChkZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSwkdCl8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8MCx3PU1hdGguaW11bChQdCxlbiksdj12K01hdGguaW11bChpdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGZ0'@;
put 'KXwwKStNYXRoLmltdWwodXQsSG4pfDAsdz13K01hdGguaW11bCh1dCxmdCl8MCx2PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCx3PXcrTWF0aC5pbXVsKERlLHd0KXwwLHY9ditNYXRoLmltdWwoWGUsX3QpfDAscD0o'@;
put 'cD1wK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLHc9dytNYXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEl0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsdz13K01hdGguaW11bChUZSxJdCl8MCx2PXYrTWF0'@;
put 'aC5pbXVsKGx0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDApK01hdGguaW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9ditNYXRoLmltdWwoS2UsSW4pfDAscD0ocD1wK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLEluKXwwLHc9dytNYXRoLmlt'@;
put 'dWwoWWUsenQpfDAsdj12K01hdGguaW11bChPZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUseG4pfDAsdz13K01hdGguaW11bChqZSxzbil8MDt2YXIgSHI9KFMrKHY9ditNYXRoLmltdWwoeGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bCh4ZSwkdCl8MCkrTWF0aC5pbXVsKExlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKExlLCR0KXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSG4pLHA9KHA9TWF0aC5pbXVsKEh0LGZ0KSkrTWF0aC5pbXVsKFB0LEhuKXww'@;
put 'LHc9TWF0aC5pbXVsKFB0LGZ0KSx2PXYrTWF0aC5pbXVsKGl0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsd3QpfDApK01hdGguaW11bCh1dCxobil8MCx3PXcrTWF0aC5pbXVsKHV0LHd0KXwwLHY9ditNYXRoLmltdWwoTWUsX3QpfDAscD0ocD1wK01hdGguaW11bChNZSxOdCl8MCkrTWF0'@;
put 'aC5pbXVsKERlLF90KXwwLHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12K01hdGguaW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsdz13K01hdGguaW11bChVZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEFlLER0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoQWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsSW4pfDAscD0ocD1wK01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLEluKXwwLHc9dytNYXRoLmltdWwoUGUsenQpfDAsdj12K01hdGguaW11bChL'@;
put 'ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMrKHY9ditNYXRoLmltdWwoT2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKGplLFJu'@;
put 'KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGplLCR0KXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsaG4pLHA9KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHc9TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0'@;
put 'aC5pbXVsKGl0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsTnQpfDApK01hdGguaW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9ditNYXRoLmltdWwoTWUscnQpfDAscD0ocD1wK01hdGguaW11bChNZSxJdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoRGUsSXQpfDAsdj12K01hdGguaW11bChYZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01hdGguaW11bChVZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEFlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsenQpfDApK01hdGguaW11bChU'@;
put 'ZSxJbil8MCx3PXcrTWF0aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmltdWwobHQseG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLHc9dytNYXRoLmltdWwoUGUsc24pfDA7dmFyIEppPShTKyh2PXYrTWF0aC5pbXVsKEtlLFJuKXwwKXwwKSsoKDgx'@;
put 'OTEmKHA9KHA9cCtNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LF90KSxwPShwPU1hdGguaW11bChIdCxOdCkp'@;
put 'K01hdGguaW11bChQdCxfdCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12K01hdGguaW11bChpdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LEl0KXwwKStNYXRoLmltdWwodXQscnQpfDAsdz13K01hdGguaW11bCh1dCxJdCl8MCx2PXYrTWF0aC5pbXVsKE1lLER0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0aC5pbXVsKERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsSW4pfDAscD0ocD1wK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLEluKXwwLHc9dytNYXRoLmltdWwoVWUsenQpfDAsdj12K01hdGguaW11bChB'@;
put 'ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUseG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMrKHY9ditNYXRoLmltdWwobHQsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLFJu'@;
put 'KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQscnQpLHA9KHA9TWF0aC5pbXVsKEh0LEl0KSkrTWF0aC5pbXVsKFB0LHJ0KXwwLHc9TWF0aC5pbXVsKFB0LEl0KSx2PXYrTWF0'@;
put 'aC5pbXVsKGl0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9ditNYXRoLmltdWwoTWUsSW4pfDAscD0ocD1wK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKERlLEluKXwwLHc9dytNYXRoLmlt'@;
put 'dWwoRGUsenQpfDAsdj12K01hdGguaW11bChYZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01hdGguaW11bChVZSxzbil8MDt2YXIgcm89KFMrKHY9ditNYXRoLmltdWwoQWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsRHQpLHA9KHA9TWF0aC5pbXVsKEh0LHB0KSkrTWF0aC5pbXVsKFB0LER0KXww'@;
put 'LHc9TWF0aC5pbXVsKFB0LHB0KSx2PXYrTWF0aC5pbXVsKGl0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCh1dCxJbil8MCx3PXcrTWF0aC5pbXVsKHV0LHp0KXwwLHY9ditNYXRoLmltdWwoTWUseG4pfDAscD0ocD1wK01hdGguaW11bChNZSxzbil8MCkrTWF0'@;
put 'aC5pbXVsKERlLHhuKXwwLHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFyIGlvPShTKyh2PXYrTWF0aC5pbXVsKFhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChVZSwkdCl8'@;
put 'MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEluKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGguaW11bChQdCxJbil8MCx3PU1hdGguaW11bChQdCx6dCksdj12K01hdGguaW11bChpdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHNu'@;
put 'KXwwKStNYXRoLmltdWwodXQseG4pfDAsdz13K01hdGguaW11bCh1dCxzbil8MDt2YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChNZSwkdCl8MCkrTWF0aC5pbXVsKERlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVs'@;
put 'KERlLCR0KXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNuKSkrTWF0aC5pbXVsKFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0LHNuKTt2YXIgaG89KFMrKHY9ditNYXRoLmltdWwoaXQsUm4pfDApfDAp'@;
put 'KygoODE5MSYocD0ocD1wK01hdGguaW11bChpdCwkdCl8MCkrTWF0aC5pbXVsKHV0LFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0KXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjM7dmFyIHlyPShTKyh2PU1hdGguaW11bChIdCxSbikpfDApKygo'@;
put 'ODE5MSYocD0ocD1NYXRoLmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQsUm4pfDApKTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkpKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPVBuLENbMV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIs'@;
put 'Q1s1XT1naSxDWzZdPXhyLENbN109VWksQ1s4XT1LcixDWzldPW5vLENbMTBdPUhyLENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENbMTVdPWlvLENbMTZdPUdpLENbMTddPWhvLENbMThdPXlyLDAhPT1TJiYoQ1sxOV09UyxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcs'@;
put 'YixEKXtyZXR1cm4obmV3IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUoRyxiKXt0aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gSD0xMD09PXRoaXMubGVu'@;
put 'Z3RoJiYxMD09PWIubGVuZ3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlzLGIsRCk6TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlLEQubGVuZ3RoPUcubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgSD0wLE49MCxnPTA7ZzxELmxlbmd0aC0x'@;
put 'O2crKyl7dmFyIEM9TjtOPTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1NYXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3RoKzEpO3A8PXY7cCsrKXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxmZT02NzEwODg2MyZkZTtTPTY3MTA4ODYz'@;
put 'JihmZT1mZStTfDApLE4rPShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDApKyhmZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxIPUMsQz1OfXJldHVybiAwIT09SD9ELndvcmRzW2ddPUg6RC5sZW5ndGgtLSxELnN0cmlwKCl9KHRoaXMsYixEKTpYKHRoaXMsYixEKSxI'@;
put 'fSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsTj0wO048YjtOKyspRFtOXT10aGlzLnJldkJpbihOLEgsYik7cmV0dXJuIER9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLEQs'@;
put 'SCl7aWYoMD09PWJ8fGI9PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAsZz0wO2c8RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXtmb3IodmFyIFM9MDtTPEM7UysrKU5bU109RFtiW1NdXSxnW1Nd'@;
put 'PUhbYltTXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFyIFM9MTtTPGc7Uzw8PTEpZm9yKHZhciB2PVM8PDEscD1NYXRoLmNvcygyKk1hdGguUEkvdiksdz1NYXRoLnNpbigyKk1hdGguUEkvdiks'@;
put 'Sj0wO0o8ZztKKz12KWZvcih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8UztmZSsrKXt2YXIgeGU9SFtKK2ZlXSxMZT1OW0orZmVdLEZlPUhbSitmZStTXSxPZT1OW0orZmUrU10samU9bmUqRmUtZGUqT2U7T2U9bmUqT2UrZGUqRmUsSFtKK2ZlXT14ZSsoRmU9amUpLE5bSitmZV09TGUrT2UsSFtK'@;
put 'K2ZlK1NdPXhlLUZlLE5bSitmZStTXT1MZS1PZSxmZSE9PXYmJihqZT1wKm5lLXcqZGUsZGU9cCpkZSt3Km5lLG5lPWplKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRoLm1heChELGIpLE49MSZILGc9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSln'@;
put 'Kys7cmV0dXJuIDE8PGcrMStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7TisrKXt2YXIgZz1iW05dO2JbTl09YltILU4tMV0sYltILU4tMV09ZyxnPURbTl0sRFtOXT0tRFtILU4tMV0sRFtILU4tMV09LWd9fSxV'@;
put 'LnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKk4rMV0vRCkrTWF0aC5yb3VuZChiWzIqTl0vRCkrSDtiW05dPTY3MTA4ODYzJmcsSD1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHww'@;
put 'fXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIsRCxILE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkxJihnKz0wfGJbQ10pLEhbMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9MipEO0M8TjsrK0MpSFtDXT0wO20oMD09PWcp'@;
put 'LG0oMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09MDtyZXR1cm4gRH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLEQsSCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3Ro'@;
put 'LEQubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihOKSxTPW5ldyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShOKSx3PW5ldyBBcnJheShOKSxKPW5ldyBBcnJheShOKSxuZT1uZXcgQXJyYXkoTiksZGU9SC53b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNv'@;
put 'bnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVydDEzYihELndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxDLHYscCxOLGcpLHRoaXMudHJhbnNmb3JtKHcsQyxKLG5lLE4sZyk7Zm9yKHZhciBmZT0wO2ZlPE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpb'@;
put 'ZmVdLXBbZmVdKm5lW2ZlXTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0qSltmZV0sdltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0aGlzLnRyYW5zZm9ybSh2LHAsZGUsQyxOLGcpLHRoaXMuY29uanVnYXRlKGRlLEMsTiksdGhpcy5ub3JtYWxpemUxM2IoZGUsTiksSC5u'@;
put 'ZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5sZW5ndGgrRC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlz'@;
put 'Lm11bFRvKGIsRCl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLm11bFRvKGIsdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zvcih2YXIgRD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkqYixnPSg2NzEwODg2MyZOKSsoNjcx'@;
put 'MDg4NjMmRCk7RD4+PTI2LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMud29yZHNbSF09RCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25l'@;
put 'KCkuaW11bG4oYil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9u'@;
put 'IGooRyl7Zm9yKHZhciBiPW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxEPTA7RDxiLmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tELzI2fDBdJjE8PE4pPj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09PUQubGVuZ3RoKXJldHVybiBuZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxO'@;
put 'PTA7TjxELmxlbmd0aCYmMD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYoKytOPEQubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7TisrLGc9Zy5zcXIoKSkwIT09RFtOXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSxNLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7bSgi'@;
put 'bnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShiLUQpLzI2LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBTPXRoaXMud29yZHNbZ10mTjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29y'@;
put 'ZHNbZ10pLVM8PER8QyxDPVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlz'@;
put 'Lmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLEQsSCl7dmFyIE47bSgibnVtYmVyIj09dHlwZW9m'@;
put 'IGImJmI+PTApLE49RD8oRC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsdj1IO2lmKE4tPUMsTj1NYXRoLm1heCgwLE4pLHYpe2Zvcih2YXIgcD0wO3A8QztwKyspdi53b3Jkc1twXT10aGlz'@;
put 'LndvcmRzW3BdO3YubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHc9MDtmb3Io'@;
put 'cD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2YXIgSj0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+Pj5nLHc9SiZTfXJldHVybiB2JiYwIT09dyYmKHYud29yZHNbdi5sZW5ndGgrK109dyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jk'@;
put 'c1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLEQsSCl9LE0ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pc2hsbihiKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sTS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0'@;
put 'dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5'@;
put 'cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAh'@;
put 'PT1EJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNs'@;
put 'b25lKCkuaW1hc2tuKGIpfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8o'@;
put 'dGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jk'@;
put 'c1swXSs9Yjtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQsRD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6dGhpcy53b3Jkc1tEKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgu'@;
put 'bWF4KHRoaXMubGVuZ3RoLEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0w'@;
put 'LHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgm'@;
put 'JnRoaXMud29yZHNbRF08MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lz'@;
put 'aGxuc3VibXVsPWZ1bmN0aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK0hdKStTO3ZhciB2PSgwfGIud29yZHNbZ10pKkQ7Uz0oKEMtPTY3MTA4ODYzJnYpPj4yNiktKHYv'@;
put 'NjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hdKStTKT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7aWYoMD09PVMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PVMp'@;
put 'LFM9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRo'@;
put 'aXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1c2hsbihIKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsdj1OLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUQpeyhwPW5l'@;
put 'dyBNKG51bGwpKS5sZW5ndGg9disxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3ddPTB9dmFyIEo9Ti5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsdik7MD09PUoubmVnYXRpdmUmJihOPUoscCYmKHAud29yZHNbdl09MSkp'@;
put 'O2Zvcih2YXIgbmU9di0xO25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2NCooMHxOLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKGRlPU1hdGgubWluKGRlL0N8MCw2NzEwODg2MyksTi5faXNobG5zdWJtdWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRp'@;
put 'dmU7KWRlLS0sTi5uZWdhdGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxuZSksTi5pc1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1kZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxOLnN0cmlwKCksImRpdiIhPT1EJiYwIT09SCYmTi5pdXNocm4oSCkse2RpdjpwfHxudWxs'@;
put 'LG1vZDpOfX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIs'@;
put 'RCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2Ok4sbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSxEKSwibW9k'@;
put 'IiE9PUQmJihOPUMuZGl2Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCksRCksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2'@;
put 'LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09RD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1EP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5t'@;
put 'b2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYixEKTt2YXIgTixnLEN9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2Iiwh'@;
put 'MSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlv'@;
put 'bihiKXt2YXIgRD10aGlzLmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8oKSlyZXR1cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9kLmlzdWIoYik6RC5tb2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPUguY21wKE4pO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz9E'@;
put 'LmRpdjowIT09RC5kaXYubmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPSgxPDwyNiklYixIPTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndv'@;
put 'cmRzW05dKSklYjtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2NCpEO3RoaXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9'@;
put 'cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7'@;
put 'RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgxKSx2PTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNocm4oMSksSC5pdXNocm4oMSksKyt2O2Zvcih2YXIgcD1ILmNsb25lKCks'@;
put 'dz1ELmNsb25lKCk7IUQuaXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0xOyEoRC53b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZvcihELml1c2hybihKKTtKLS0gPjA7KShOLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihOLmlhZGQocCksZy5pc3ViKHcpKSxOLml1c2hybigx'@;
put 'KSxnLml1c2hybigxKTtmb3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNbMF0mZmUpJiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNocm4oZGUpO2RlLS0gPjA7KShDLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihDLmlhZGQocCksUy5pc3ViKHcpKSxDLml1c2hybigxKSxTLml1'@;
put 'c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxnLmlzdWIoUykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0dXJue2E6QyxiOlMsZ2NkOkguaXVzaGxuKHYpfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUp'@;
put 'LG0oIWIuaXNaZXJvKCkpO3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1ILmNsb25lKCk7RC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEo'@;
put 'RC53b3Jkc1swXSZ2KSYmUzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3IoRC5pdXNocm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1c2hybigxKTtmb3IodmFyIHA9MCx3PTE7IShILndvcmRzWzBdJncpJiZwPDI2OysrcCx3PDw9MSk7aWYocD4wKWZvcihILml1c2hybihw'@;
put 'KTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQpLGcuaXN1YihOKSl9cmV0dXJuKEo9MD09PUQuY21wbigxKT9OOmcpLmNtcG4oMCk8MCYmSi5pYWRkKGIpLEp9LE0ucHJvdG90eXBlLmdj'@;
put 'ZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhpcy5jbG9uZSgpLEg9Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2'@;
put 'ZW4oKTtOKyspRC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0QuaXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2YXIgQz1EO0Q9SCxIPUN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigx'@;
put 'KSlicmVhaztELmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90'@;
put 'eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUy'@;
put 'NixIPShiLUQpLzI2LE49MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zvcih2YXIgZz1OLEM9SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPTB8dGhpcy53b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRo'@;
put 'aXMud29yZHNbQ109UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBu'@;
put 'PWZ1bmN0aW9uKGIpe3ZhciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhRClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtEJiYoYj0tYiksbShiPD02NzEwODg2MywiTnVtYmVyIGlz'@;
put 'IHRvbyBiaWciKTt2YXIgTj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8wOk48Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09'@;
put 'PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBEPXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtRDpEfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVu'@;
put 'Z3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxiLndvcmRzW0hdO2lmKE4hPT1nKXtOPGc/RD0tMTpOPmcmJihEPTEpO2JyZWFrfX1yZXR1cm4gRH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gdGhpcy5jbXAoYik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhp'@;
put 'cy5jbXBuKGIpPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAo'@;
put 'Yil9LE0ucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5'@;
put 'IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5j'@;
put 'b252ZXJ0RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4'@;
put 'dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLnN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRo'@;
put 'aXMucmVkLmltdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJl'@;
put 'ZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5y'@;
put 'ZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sTS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks'@;
put 'dGhpcy5yZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0'@;
put 'Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShHLGIpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1w'@;
put 'KCl9ZnVuY3Rpb24gdGUoKXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9lKCl7ZWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMs'@;
put 'IjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRyl7dmFyIGI9TS5fcHJpbWUoRyk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBt'@;
put 'KEcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUuY2FsbCh0aGlzLEcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10'@;
put 'aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0p'@;
put 'LHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVl'@;
put 'LnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtkb3t0aGlzLnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhEKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgTj1IPHRoaXMubj8tMTpELnVjbXAodGhpcy5w'@;
put 'KTtyZXR1cm4gMD09PU4/KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpOPjA/RC5pc3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6RC5fc3RyaXAoKSxEfSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtiLml1c2hybih0aGlzLm4sMCxEKX0sZWUucHJvdG90'@;
put 'eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0sbGUodGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD00MTk0MzAzLE49TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8TjtnKyspRC53b3Jkc1tnXT1iLndvcmRzW2ddO2lm'@;
put 'KEQubGVuZ3RoPU4sYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29yZHNbRC5sZW5ndGgrK109QyZILGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBTPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShTJkgp'@;
put 'PDw0fEM+Pj4yMixDPVN9Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIg'@;
put 'RD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hdO2Iud29yZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYm'@;
put 'Yi5sZW5ndGgtLSksYn0sbGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxlZSksaGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MTkqKDB8Yi53b3Jkc1tIXSkrRCxnPTY3MTA4ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hd'@;
put 'PWcsRD1OfXJldHVybiAwIT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109RCksYn0sTS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgRDtpZigiazI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2UgaWYoInAyMjQiPT09YilEPW5ldyBvZTtlbHNlIGlmKCJwMTkyIj09PWIp'@;
put 'RD1uZXcgc2U7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09RCxEfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBw'@;
put 'b3NpdGl2ZXMiKSxtKGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLEQpe20oMD09KGIubmVnYXRpdmV8RC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCYmYi5y'@;
put 'ZWQ9PT1ELnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0s'@;
put 'dWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5hZGQoRCk7cmV0dXJuIEguY21w'@;
put 'KHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHVlLnByb3Rv'@;
put 'dHlwZS5zdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFy'@;
put 'IEg9Yi5pc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKEQpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1'@;
put 'cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkpfSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5p'@;
put 'bXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBEPXRoaXMubS5hbmRsbigzKTtpZihtKEQlMj09MSks'@;
put 'Mz09PUQpe3ZhciBIPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4oMSksZz0wOyFOLmlzWmVybygpJiYwPT09Ti5hbmRsbigxKTspZysrLE4uaXVzaHJuKDEpO20oIU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBN'@;
put 'KDEpLnRvUmVkKHRoaXMpLFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgTSgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsdikuY21wKFMpOylwLnJlZElBZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93'@;
put 'KHAsTiksSj10aGlzLnBvdyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBmZT1uZSx4ZT0wOzAhPT1mZS5jbXAoQyk7eGUrKylmZT1mZS5yZWRTcXIoKTttKHhlPGRlKTt2YXIgTGU9dGhpcy5wb3codyxuZXcgTSgx'@;
put 'KS5pdXNobG4oZGUteGUtMSkpO0o9Si5yZWRNdWwoTGUpLHc9TGUucmVkU3FyKCksbmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgRD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2'@;
put 'ZT0wLHRoaXMuaW1vZChEKS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PUQuY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBOPW5ldyBBcnJheSgx'@;
put 'Nik7TlswXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZhciBnPTI7ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7dmFyIEM9TlswXSxTPTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0p'@;
put 'e2Zvcih2YXIgdz1ELndvcmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIgbmU9dz4+SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHwwIT09Uz8oUzw8PTEsU3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9PT1KKSYmKEM9dGhpcy5tdWwoQyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9'@;
put 'MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xvbmUoKTpEfSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9Yi5jbG9uZSgpO3JldHVybiBELnJlZD1udWxs'@;
put 'LER9LE0ubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxsZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFy'@;
put 'IEQ9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiBELnJlZD1udWxsLER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgSD1iLmltdWwoRCksTj1ILm1h'@;
put 'c2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlz'@;
put 'Lm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku'@;
put 'aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90'@;
put 'b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDU3Nzk4OmF0PT57ZnVuY3Rpb24gSWUoRixhZSl7aWYoIUYpdGhyb3cgbmV3IEVycm9yKGFlfHwi'@;
put 'QXNzZXJ0aW9uIGZhaWxlZCIpfWF0LmV4cG9ydHM9SWUsSWUuZXF1YWw9ZnVuY3Rpb24oYWUseCxtKXtpZihhZSE9eCl0aHJvdyBuZXcgRXJyb3IobXx8IkFzc2VydGlvbiBmYWlsZWQ6ICIrYWUrIiAhPSAiK3gpfX0sNzgyNDc6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRj1JZTtmdW5j'@;
put 'dGlvbiB4KGxlKXtyZXR1cm4gMT09PWxlLmxlbmd0aD8iMCIrbGU6bGV9ZnVuY3Rpb24gbShsZSl7Zm9yKHZhciBNPSIiLE89MDtPPGxlLmxlbmd0aDtPKyspTSs9eChsZVtPXS50b1N0cmluZygxNikpO3JldHVybiBNfUYudG9BcnJheT1mdW5jdGlvbiBhZShsZSxNKXtpZihBcnJheS5pc0Fy'@;
put 'cmF5KGxlKSlyZXR1cm4gbGUuc2xpY2UoKTtpZighbGUpcmV0dXJuW107dmFyIE89W107aWYoInN0cmluZyIhPXR5cGVvZiBsZSl7Zm9yKHZhciBSPTA7UjxsZS5sZW5ndGg7UisrKU9bUl09MHxsZVtSXTtyZXR1cm4gT31pZigiaGV4Ij09PU0pZm9yKChsZT1sZS5yZXBsYWNlKC9bXmEtejAt'@;
put 'OV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihsZT0iMCIrbGUpLFI9MDtSPGxlLmxlbmd0aDtSKz0yKU8ucHVzaChwYXJzZUludChsZVtSXStsZVtSKzFdLDE2KSk7ZWxzZSBmb3IoUj0wO1I8bGUubGVuZ3RoO1IrKyl7dmFyIHo9bGUuY2hhckNvZGVBdChSKSxLPXo+PjgsST0yNTUmejtLP08u'@;
put 'cHVzaChLLEkpOk8ucHVzaChJKX1yZXR1cm4gT30sRi56ZXJvMj14LEYudG9IZXg9bSxGLmVuY29kZT1mdW5jdGlvbihNLE8pe3JldHVybiJoZXgiPT09Tz9tKE0pOk19fSw4MzI3NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUo'@;
put 'ImFmIix7bW9udGhzOiJKYW51YXJpZV9GZWJydWFyaWVfTWFhcnRfQXByaWxfTWVpX0p1bmllX0p1bGllX0F1Z3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01ydF9BcHJfTWVpX0p1bl9KdWxfQXVnX1Nl'@;
put 'cF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU29uZGFnX01hYW5kYWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1NhdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvbl9NYWFfRGluX1dvZV9Eb25fVnJ5X1NhdCIuc3BsaXQoIl8iKSx3ZWVr'@;
put 'ZGF5c01pbjoiU29fTWFfRGlfV29fRG9fVnJfU2EiLnNwbGl0KCJfIiksbWVyaWRpZW1QYXJzZTovdm18bm0vaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybi9ebm0kL2kudGVzdChtKX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMj9NPyJ2bSI6IlZNIjpNPyJubSI6Ik5N'@;
put 'In0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVmFuZGFnIG9tXSBM'@;
put 'VCIsbmV4dERheToiW01ceGY0cmUgb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbR2lzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltMYWFzXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9vciAlcyIscGFzdDoiJXMgZ2Vs'@;
put 'ZWRlIixzOiInbiBwYWFyIHNla29uZGVzIixzczoiJWQgc2Vrb25kZXMiLG06IiduIG1pbnV1dCIsbW06IiVkIG1pbnV0ZSIsaDoiJ24gdXVyIixoaDoiJWQgdXJlIixkOiInbiBkYWciLGRkOiIlZCBkYWUiLE06IiduIG1hYW5kIixNTToiJWQgbWFhbmRlIix5OiInbiBqYWFyIix5eToiJWQg'@;
put 'amFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihtKXtyZXR1cm4gbSsoMT09PW18fDg9PT1tfHxtPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjE4Njc6ZnVuY3Rpb24oYXQsSWUs'@;
put 'Ril7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ZnVuY3Rpb24oUil7cmV0dXJuIDA9PT1SPzA6MT09PVI/MToyPT09Uj8yOlIlMTAwPj0zJiZSJTEwMDw9MTA/MzpSJTEwMD49MTE/NDo1fSxtPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2'@;
put 'MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1'@;
put 'MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJc'@;
put 'dTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0'@;
put 'YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2'@;
put 'MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNc'@;
put 'dTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUw'@;
put 'NjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2'@;
put 'NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0'@;
put 'N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJc'@;
put 'dTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2Mjdc'@;
put 'dTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sbGU9ZnVuY3Rpb24oUil7cmV0dXJuIGZ1bmN0aW9uKHosSyxJLGspe3ZhciBFPXgoeiksaj1tW1JdW3goeildO3JldHVybiAyPT09RSYmKGo9altLPzA6MV0pLGoucmVwbGFjZSgvJWQvaSx6KX19LE09WyJcdTA2'@;
put 'MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGEiLCJcdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGEiLCJcdTA2MmNcdTA2NDhcdTA2MjdcdTA2'@;
put 'NDYiLCJcdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjkiLCJcdTA2MjNcdTA2NDhcdTA2MmEiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2'@;
put 'NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTthZS5kZWZpbmVMb2NhbGUoImFyLWR6Iix7bW9udGhzOk0sbW9udGhzU2hvcnQ6TSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1'@;
put 'MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2Mjdc'@;
put 'dTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUw'@;
put 'NjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUw'@;
put 'NjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t'@;
put 'IixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihSKXtyZXR1cm4iXHUwNjQ1Ij09PVJ9LG1lcmlkaWVtOmZ1bmN0aW9uKFIseixLKXtyZXR1cm4gUjwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6'@;
put 'e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1'@;
put 'MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3'@;
put 'XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2'@;
put 'MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpsZSgicyIpLHNzOmxlKCJzIiksbTpsZSgibSIpLG1tOmxlKCJtIiksaDpsZSgiaCIpLGhoOmxlKCJoIiksZDpsZSgiZCIpLGRkOmxlKCJkIiksTTpsZSgiTSIpLE1NOmxlKCJNIikseTpsZSgieSIpLHl5OmxlKCJ5Iil9LHBv'@;
put 'c3Rmb3JtYXQ6ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTcwNzg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJhci1rdyIse21v'@;
put 'bnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2'@;
put 'NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1'@;
put 'MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYy'@;
put 'OFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1'@;
put 'MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUw'@;
put 'NjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1'@;
put 'MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2'@;
put 'MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2'@;
put 'MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRk'@;
put 'ZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1'@;
put 'MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMg'@;
put 'XHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6'@;
put 'e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQg'@;
put 'XHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0'@;
put 'XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MCxkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sNzc3NzY6ZnVuY3Rpb24oYXQsSWUs'@;
put 'Ril7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6IjEiLDI6IjIiLDM6IjMiLDQ6IjQiLDU6IjUiLDY6IjYiLDc6IjciLDg6IjgiLDk6IjkiLDA6IjAifSxtPWZ1bmN0aW9uKHope3JldHVybiAwPT09ej8wOjE9PT16PzE6Mj09PXo/Mjp6JTEwMD49MyYmeiUxMDA8PTEwPzM6'@;
put 'eiUxMDA+PTExPzQ6NX0sbGU9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3'@;
put 'XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0'@;
put 'Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUw'@;
put 'NjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1'@;
put 'MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJh'@;
put 'XHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2'@;
put 'NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYy'@;
put 'M1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhc'@;
put 'dTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1'@;
put 'MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUw'@;
put 'NjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSxNPWZ1bmN0aW9uKHope3JldHVybiBmdW5jdGlvbihLLEksayxFKXt2YXIgaj1tKEspLFY9bGVb'@;
put 'el1bbShLKV07cmV0dXJuIDI9PT1qJiYoVj1WW0k/MDoxXSksVi5yZXBsYWNlKC8lZC9pLEspfX0sTz1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYy'@;
put 'M1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYy'@;
put 'OFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO2FlLmRlZmluZUxvY2FsZSgiYXIt'@;
put 'bHkiLHttb250aHM6Tyxtb250aHNTaG9ydDpPLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2'@;
put 'MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vl'@;
put 'a2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2'@;
put 'MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntM'@;
put 'VDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9u'@;
put 'KHope3JldHVybiJcdTA2NDUiPT09en0sbWVyaWRpZW06ZnVuY3Rpb24oeixLLEkpe3JldHVybiB6PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUw'@;
put 'NjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2Mjdc'@;
put 'dTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYy'@;
put 'N1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOk0oInMiKSxzczpNKCJzIiksbTpNKCJtIiksbW06TSgibSIpLGg6'@;
put 'TSgiaCIpLGhoOk0oImgiKSxkOk0oImQiKSxkZDpNKCJkIiksTTpNKCJNIiksTU06TSgiTSIpLHk6TSgieSIpLHl5Ok0oInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih6KXtyZXR1cm4gei5yZXBs'@;
put 'YWNlKC9cZC9nLGZ1bmN0aW9uKEspe3JldHVybiB4W0tdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDU2Nzg5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiYXIt'@;
put 'bWEiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUw'@;
put 'NjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZc'@;
put 'dTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2'@;
put 'MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9c'@;
put 'dTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1'@;
put 'MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19c'@;
put 'dTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUw'@;
put 'NjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2'@;
put 'MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExM'@;
put 'TEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1'@;
put 'MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1'@;
put 'XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRp'@;
put 'dmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIs'@;
put 'bW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06'@;
put 'Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjg5NzpmdW5jdGlvbihh'@;
put 'dCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sbT17Ilx1MDY2MSI6'@;
put 'IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifTthZS5kZWZpbmVMb2NhbGUoImFyLXNhIix7bW9udGhzOiJcdTA2NGFcdTA2'@;
put 'NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1'@;
put 'MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhfXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1'@;
put 'XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2'@;
put 'MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2Mjhc'@;
put 'dTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1'@;
put 'MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9c'@;
put 'dTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUw'@;
put 'NjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0'@;
put 'KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQg'@;
put 'TU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4iXHUwNjQ1Ij09PU19LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4g'@;
put 'TTwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2Mjcg'@;
put 'XHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYz'@;
put 'MyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGlt'@;
put 'ZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIl'@;
put 'ZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2'@;
put 'MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJc'@;
put 'dTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJu'@;
put 'IHhbT119KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSw3MTU4NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImFyLXRuIix7bW9udGhzOiJcdTA2MmNcdTA2MjdcdTA2'@;
put 'NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhcdTA2NGFc'@;
put 'dTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYz'@;
put 'M1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0X1x1'@;
put 'MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4'@;
put 'XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZc'@;
put 'dTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJj'@;
put 'XHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9c'@;
put 'dTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVf'@;
put 'XHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZ'@;
put 'WVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0'@;
put 'XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2'@;
put 'NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJc'@;
put 'dTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2'@;
put 'NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2'@;
put 'MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDIyMDk3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlv'@;
put 'bihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxtPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIi'@;
put 'LCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LGxlPWZ1bmN0aW9uKEspe3JldHVybiAwPT09Sz8wOjE9PT1LPzE6Mj09PUs/MjpLJTEwMD49MyYmSyUx'@;
put 'MDA8PTEwPzM6SyUxMDA+PTExPzQ6NX0sTT17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2'@;
put 'MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUw'@;
put 'NjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZc'@;
put 'dTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJm'@;
put 'XHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2'@;
put 'MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1'@;
put 'MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwi'@;
put 'JWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMx'@;
put 'IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0'@;
put 'XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2Mjdc'@;
put 'dTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LE89ZnVuY3Rpb24oSyl7cmV0dXJuIGZ1bmN0aW9uKEksayxFLGope3ZhciBWPWxl'@;
put 'KEkpLEI9TVtLXVtsZShJKV07cmV0dXJuIDI9PT1WJiYoQj1CW2s/MDoxXSksQi5yZXBsYWNlKC8lZC9pLEkpfX0sUj1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYz'@;
put 'MyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1'@;
put 'MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO2FlLmRlZmluZUxv'@;
put 'Y2FsZSgiYXIiLHttb250aHM6Uixtb250aHNTaG9ydDpSLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYy'@;
put 'MV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJf'@;
put 'Iiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYz'@;
put 'M19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9y'@;
put 'bWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1'@;
put 'bmN0aW9uKEspe3JldHVybiJcdTA2NDUiPT09S30sbWVyaWRpZW06ZnVuY3Rpb24oSyxJLGspe3JldHVybiBLPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUw'@;
put 'NjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBc'@;
put 'dTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJm'@;
put 'IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOk8oInMiKSxzczpPKCJzIiksbTpPKCJtIiksbW06Tygi'@;
put 'bSIpLGg6TygiaCIpLGhoOk8oImgiKSxkOk8oImQiKSxkZDpPKCJkIiksTTpPKCJNIiksTU06TygiTSIpLHk6TygieSIpLHl5Ok8oInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oSyl7cmV0dXJuIEsucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1'@;
put 'MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihJKXtyZXR1cm4gbVtJXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oSyl7cmV0dXJuIEsucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihJKXtyZXR1cm4geFtJXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9'@;
put 'LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oRigxNjY3NikpfSwxNTYxMTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiLWluY2kiLDU6Ii1pbmNpIiw4OiItaW5jaSIsNzA6Ii1pbmNpIiw4MDoiLWluY2kiLDI6Ii1uY2kiLDc6Ii1uY2kiLDIw'@;
put 'OiItbmNpIiw1MDoiLW5jaSIsMzoiLVx4ZmNuY1x4ZmMiLDQ6Ii1ceGZjbmNceGZjIiwxMDA6Ii1ceGZjbmNceGZjIiw2OiItbmNcdTAxMzEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii1cdTAxMzFuY1x1MDEzMSIsOTA6Ii1cdTAxMzFuY1x1MDEzMSJ9O2FlLmRlZmlu'@;
put 'ZUxvY2FsZSgiYXoiLHttb250aHM6InlhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9tYXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inlhbl9mZXZfbWFyX2Fwcl9tYXlfaXluX2l5bF9hdnFfc2VuX29rdF9u'@;
put 'b3lfZGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJCYXphcl9CYXphciBlcnRcdTAyNTlzaV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OV9DXHhmY21cdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9D'@;
put 'XHhmY21cdTAyNTlfXHUwMTVlXHUwMjU5bmJcdTAyNTkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQmF6X0J6RV9ceGM3QXhfXHhjN1x1MDI1OXJfQ0F4X0NceGZjbV9cdTAxNWVcdTAyNTluIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJCel9CRV9ceGM3QV9ceGM3XHUwMjU5X0NBX0Nc'@;
put 'eGZjX1x1MDE1ZVx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1N'@;
put 'TU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FhdF0gTFQiLG5leHREYXk6IltzYWJhaCBzYWF0XSBMVCIsbmV4dFdlZWs6IltnXHUwMjU5bFx1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2RceGZjblx1MDI1OW5d'@;
put 'IExUIixsYXN0V2VlazoiW2tlXHhlN1x1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29ucmEiLHBhc3Q6IiVzIFx1MDI1OXZ2XHUwMjU5bCIsczoiYmlyIG5lXHhlN1x1MDI1OSBzYW5peVx1MDI1'@;
put 'OSIsc3M6IiVkIHNhbml5XHUwMjU5IixtOiJiaXIgZFx1MDI1OXFpcVx1MDI1OSIsbW06IiVkIGRcdTAyNTlxaXFcdTAyNTkiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciBpbCIseXk6'@;
put 'IiVkIGlsIn0sbWVyaWRpZW1QYXJzZTovZ2VjXHUwMjU5fHNcdTAyNTloXHUwMjU5cnxnXHhmY25kXHhmY3p8YXhcdTAxNWZhbS8saXNQTTpmdW5jdGlvbihsZSl7cmV0dXJuL14oZ1x4ZmNuZFx4ZmN6fGF4XHUwMTVmYW0pJC8udGVzdChsZSl9LG1lcmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7'@;
put 'cmV0dXJuIGxlPDQ/ImdlY1x1MDI1OSI6bGU8MTI/InNcdTAyNTloXHUwMjU5ciI6bGU8MTc/ImdceGZjbmRceGZjeiI6ImF4XHUwMTVmYW0ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTAxMzFuY1x1MDEzMXxpbmNpfG5jaXxceGZjbmNceGZjfG5jXHUwMTMxfHVuY3Up'@;
put 'LyxvcmRpbmFsOmZ1bmN0aW9uKGxlKXtpZigwPT09bGUpcmV0dXJuIGxlKyItXHUwMTMxbmNcdTAxMzEiO3ZhciBNPWxlJTEwO3JldHVybiBsZSsoeFtNXXx8eFtsZSUxMDAtTV18fHhbbGU+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw2MjQ1OTpm'@;
put 'dW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKE0sTyxSKXtyZXR1cm4ibSI9PT1SP08/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0'@;
put 'MyI6ImgiPT09Uj9PPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzAiOiJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NDMiOk0rIiAiK2Z1bmN0aW9uIHgoTSxPKXt2YXIgUj1NLnNwbGl0KCJfIik7cmV0dXJuIE8lMTA9PTEmJk8lMTAw'@;
put 'IT0xMT9SWzBdOk8lMTA+PTImJk8lMTA8PTQmJihPJTEwMDwxMHx8TyUxMDA+PTIwKT9SWzFdOlJbMl19KHtzczpPPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQz'@;
put 'NVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtbTpPPyJcdTA0NDVc'@;
put 'dTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0'@;
put 'NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIixoaDpPPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUw'@;
put 'NDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNk'@;
put 'IixkZDoiXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ1Nl9cdTA0MzRcdTA0MzdcdTA0NTFcdTA0M2QiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRiX1x1MDQzY1x1MDQz'@;
put 'NVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzMFx1MDQ1ZSIseXk6Ilx1MDQzM1x1MDQzZVx1MDQzNF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDNlXHUwNDVlIn1bUl0sK00pfWFlLmRlZmluZUxvY2FsZSgiYmUiLHttb250aHM6e2Zvcm1hdDoiXHUwNDQx'@;
put 'XHUwNDQyXHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzMFx1MDQzM1x1MDQzMF9cdTA0NDFcdTA0MzBcdTA0M2FcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDMy'@;
put 'XHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQ1ZVx1MDQzZFx1MDQ0Zl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQ1ZVx1MDQz'@;
put 'ZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0M2RcdTA0NGZfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDRiXHUwNDQ3XHUwNDNkXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzZlx1MDQzMFx1MDQz'@;
put 'NFx1MDQzMF9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzZcdTA0M2RcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQ0Yl9cdTA0NDFcdTA0MzBcdTA0M2FcdTA0'@;
put 'MzBcdTA0MzJcdTA0NTZcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUw'@;
put 'NDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDRiXHUwNDQ3XHUw'@;
put 'NDNkXHUwNDU2XHUwNDNhX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzZlx1MDQzMFx1MDQzNF9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzZcdTA0MzBcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRfXHUwNDNi'@;
put 'XHUwNDRlXHUwNDQyX1x1MDQ0MVx1MDQzMFx1MDQzYV9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0NTZcdTA0M2ZfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDMyX1x1MDQzMlx1MDQzNVx1'@;
put 'MDQ0MF9cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNiIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDMw'@;
put 'XHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNhX1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDMwXHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQw'@;
put 'X1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0M19cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzMFx1MDQz'@;
put 'ZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0'@;
put 'M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0MzBfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9cWyA/W1x1MDQyM1x1MDQ0M1x1MDQ1ZV0gPyg/Olx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1'@;
put 'MDQ0ZXxcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0NDNcdTA0NGUpPyA/XF0gP2RkZGQvfSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0'@;
put 'Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI'@;
put 'Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQyMVx1MDQ1'@;
put 'MVx1MDQzZFx1MDQzZFx1MDQ0ZiBcdTA0NWVdIExUIixuZXh0RGF5OiJbXHUwNDE3XHUwNDMwXHUwNDVlXHUwNDQyXHUwNDQwXHUwNDMwIFx1MDQ1ZV0gTFQiLGxhc3REYXk6IltcdTA0MjNcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAgXHUwNDVlXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4iW1x1MDQyM10gZGRkZCBbXHUwNDVlXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGVdIGRkZGQg'@;
put 'W1x1MDQ1ZV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDIzIFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0Yl0gZGRkZCBbXHUwNDVlXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0M2ZcdTA0NDBcdTA0MzBcdTA0'@;
put 'MzcgJXMiLHBhc3Q6IiVzIFx1MDQ0Mlx1MDQzMFx1MDQzY1x1MDQ0MyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDMwXHUwNDNiXHUwNDRjXHUwNDNhXHUwNDU2IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbSxtbTptLGg6bSxoaDptLGQ6Ilx1MDQzNFx1MDQzN1x1'@;
put 'MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6bSxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDYiLE1NOm0seToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTptfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGJ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUw'@;
put 'NDRifFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCkkLy50ZXN0KE0pfSxtZXJpZGllbTpm'@;
put 'dW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRiIjpNPDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGIiOk08MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCJ9LGRh'@;
put 'eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ1NnxcdTA0NGJ8XHUwNDMzXHUwNDMwKS8sb3JkaW5hbDpmdW5jdGlvbihNLE8pe3N3aXRjaChPKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gTSUxMCE9MiYmTSUxMCE9M3x8TSUxMDA9'@;
put 'PTEyfHxNJTEwMD09MTM/TSsiLVx1MDQ0YiI6TSsiLVx1MDQ1NiI7Y2FzZSJEIjpyZXR1cm4gTSsiLVx1MDQzM1x1MDQzMCI7ZGVmYXVsdDpyZXR1cm4gTX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDkxODI1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVz'@;
put 'ZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiYmciLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1'@;
put 'MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4'@;
put 'X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0'@;
put 'OiJcdTA0NGZcdTA0M2RcdTA0NDNfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQz'@;
put 'NVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQz'@;
put 'Ylx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDRmXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0YVx1MDQ0MFx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0'@;
put 'NDJcdTA0NGFcdTA0M2FfXHUwNDQxXHUwNDRhXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQ0Zl9cdTA0NDdcdTA0'@;
put 'MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQyX1x1MDQ0MVx1MDQ0YVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5z'@;
put 'cGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0'@;
put 'M2RcdTA0MzVcdTA0NDEgXHUwNDMyXSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCBcdTA0MzJdIExUIixsYXN0V2Vlazpm'@;
put 'dW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUw'@;
put 'NDFjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDNiXHUwNDM4XHUwNDRmXSBkZGRkIFtcdTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4ICVz'@;
put 'IixzOiJcdTA0M2RcdTA0NGZcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixtOiJcdTA0M2NcdTA0MzhcdTA0M2Rc'@;
put 'dTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUw'@;
put 'NDNkXHUwNDMwIix3OiJcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzAiLHd3OiIlZCBcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzgiLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1'@;
put 'MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIseToiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1'@;
put 'MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwLE09bSUxMDA7cmV0dXJuIDA9PT1tP20rIi1cdTA0MzVcdTA0MzIiOjA9PT1NP20rIi1cdTA0MzVcdTA0M2QiOk0+MTAmJk08MjA/'@;
put 'bSsiLVx1MDQ0Mlx1MDQzOCI6MT09PWxlP20rIi1cdTA0MzJcdTA0MzgiOjI9PT1sZT9tKyItXHUwNDQwXHUwNDM4Ijo3PT09bGV8fDg9PT1sZT9tKyItXHUwNDNjXHUwNDM4IjptKyItXHUwNDQyXHUwNDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNzU5MTg6ZnVuY3Rp'@;
put 'b24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJibSIse21vbnRoczoiWmFud3V5ZWthbG9fRmV3dXJ1eWVrYWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTVx1MDI1YmthbG9fWnV3XHUwMjVibmthbG9fWnVsdXlla2Fsb19VdGlrYWxvX1Nc'@;
put 'dTAyNWJ0YW5idXJ1a2Fsb19cdTAyNTRrdXRcdTAyNTRidXJ1a2Fsb19Ob3dhbmJ1cnVrYWxvX0Rlc2FuYnVydWthbG8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilphbl9GZXdfTWFyX0F3aV9NXHUwMjViX1p1d19adWxfVXRpX1NcdTAyNWJ0X1x1MDI1NGt1X05vd19EZXMiLnNwbGl0KCJf'@;
put 'Iiksd2Vla2RheXM6IkthcmlfTnRcdTAyNWJuXHUwMjVibl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJLYXJfTnRcdTAyNWJfVGFyX0FyYV9BbGFfSnVtX1NpYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiS2FfTnRfVGFfQXJf'@;
put 'QWxfSnVfU2kiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSIsTExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xcdTAyNWJyXHUwMjViXSBISDptbSIsTExM'@;
put 'TDoiZGRkZCBNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xcdTAyNWJyXHUwMjViXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0RGF5OiJbU2luaSBsXHUwMjViclx1MDI1Yl0gTFQiLG5leHRXZWVrOiJkZGRkIFtkb24gbFx1MDI1YnJc'@;
put 'dTAyNWJdIExUIixsYXN0RGF5OiJbS3VudSBsXHUwMjViclx1MDI1Yl0gTFQiLGxhc3RXZWVrOiJkZGRkIFt0XHUwMjVibVx1MDI1Ym5lbiBsXHUwMjViclx1MDI1Yl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGtcdTAyNTRuXHUwMjU0IixwYXN0OiJhIGJc'@;
put 'dTAyNWIgJXMgYlx1MDI1NCIsczoic2FuZ2EgZGFtYSBkYW1hIixzczoic2Vrb25kaSAlZCIsbToibWluaXRpIGtlbGVuIixtbToibWluaXRpICVkIixoOiJsXHUwMjViclx1MDI1YiBrZWxlbiIsaGg6ImxcdTAyNWJyXHUwMjViICVkIixkOiJ0aWxlIGtlbGVuIixkZDoidGlsZSAlZCIsTToi'@;
put 'a2FsbyBrZWxlbiIsTU06ImthbG8gJWQiLHk6InNhbiBrZWxlbiIseXk6InNhbiAlZCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDQ5NjgzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIs'@;
put 'MzoiXHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxtPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMi'@;
put 'OiI2IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiYm4tYmQiLHttb250aHM6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2Rc'@;
put 'dTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4'@;
put 'N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5YWRcdTA5YzdcdTA5YWVcdTA5'@;
put 'Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxX1x1MDlhZVx1MDliZVx1'@;
put 'MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlh'@;
put 'YVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliOFx1MDljYlx1MDlh'@;
put 'ZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZlx1MDlhY1x1MDli'@;
put 'ZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFl'@;
put 'XHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p'@;
put 'bjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxp'@;
put 'dCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYi'@;
put 'LExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixuZXh0RGF5OiJbXHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbmV4dFdlZWs6'@;
put 'ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5YzciLHBhc3Q6IiVzIFx1MDk4'@;
put 'Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVkIFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDli'@;
put 'Zlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsZDoiXHUwOThmXHUwOTk1IFx1'@;
put 'MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlhZVx1MDliZVx1MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6IiVkIFx1MDlhY1x1MDk5Ylx1'@;
put 'MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5ZWVcdTA5ZWZcdTA5ZTZdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1'@;
put 'cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YWRcdTA5Y2JcdTA5YjB8XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5'@;
put 'YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1PP008ND9NOk0r'@;
put 'MTI6Ilx1MDlhZFx1MDljYlx1MDliMCI9PT1PfHwiXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIj09PU8/TToiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PU8/TT49Mz9NOk0rMTI6Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1PfHwiXHUwOWI4XHUwOWE4XHUw'@;
put 'OWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIj09PU8/TSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0PyJcdTA5YjBcdTA5YmVcdTA5YTQiOk08Nj8iXHUwOWFkXHUwOWNiXHUwOWIwIjpNPDEyPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOk08MTU/'@;
put 'Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6TTwxOD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjpNPDIwPyJcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmUiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0o'@;
put 'RigxNjY3NikpfSwzNDA2NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDll'@;
put 'ZiIsMDoiXHUwOWU2In0sbT17Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTthZS5kZWZpbmVMb2NhbGUo'@;
put 'ImJuIix7bW9udGhzOiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5'@;
put 'YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1'@;
put 'MDljZFx1MDlhY1x1MDliMF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBfXHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxt'@;
put 'b250aHNTaG9ydDoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5'@;
put 'YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiX1x1MDlhOFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZc'@;
put 'dTA5YjhcdTA5YzciLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1'@;
put 'MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1'@;
put 'MDlhY1x1MDliZVx1MDliMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUw'@;
put 'OWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlh'@;
put 'Y1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1'@;
put 'MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUw'@;
put 'OTg2XHUwOTljXSBMVCIsbmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUw'@;
put 'OWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFhXHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5'@;
put 'Y2RcdTA5YTEiLHNzOiIlZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBc'@;
put 'dTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgiLE06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5'@;
put 'YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJcdTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwOWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWVi'@;
put 'XHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5'@;
put 'YTR8XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWIwXHUwOWJlXHUwOWE0LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwOWIw'@;
put 'XHUwOWJlXHUwOWE0Ij09PU8mJk0+PTR8fCJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiPT09TyYmTTw1fHwiXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIj09PU8/TSsxMjpNfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwOWIwXHUwOWJlXHUw'@;
put 'OWE0IjpNPDEwPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOk08MTc/Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6TTwyMD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYp'@;
put 'KX0sMTEwMzQ6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MGYyMSIsMjoiXHUwZjIyIiwzOiJcdTBmMjMiLDQ6Ilx1MGYyNCIsNToiXHUwZjI1Iiw2OiJcdTBmMjYiLDc6Ilx1MGYyNyIsODoiXHUwZjI4Iiw5OiJcdTBmMjkiLDA6Ilx1'@;
put 'MGYyMCJ9LG09eyJcdTBmMjEiOiIxIiwiXHUwZjIyIjoiMiIsIlx1MGYyMyI6IjMiLCJcdTBmMjQiOiI0IiwiXHUwZjI1IjoiNSIsIlx1MGYyNiI6IjYiLCJcdTBmMjciOiI3IiwiXHUwZjI4IjoiOCIsIlx1MGYyOSI6IjkiLCJcdTBmMjAiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJibyIse21v'@;
put 'bnRoczoiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQ0XHUwZjBiXHUwZjU0XHUwZjdjX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJc'@;
put 'dTBmNDJcdTBmNjZcdTBmNzRcdTBmNThcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjVlXHUwZjcyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY2M1x1MGY5NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNc'@;
put 'dTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmYjJcdTBmNzRcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY2Mlx1'@;
put 'MGY5Mlx1MGZiMVx1MGY1MVx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmNDJcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1'@;
put 'MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBm'@;
put 'NTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGY1Zlx1MGZiM1x1MGYwYjFfXHUwZjVmXHUwZmIzXHUwZjBiMl9cdTBmNWZcdTBmYjNcdTBmMGIzX1x1MGY1Zlx1MGZiM1x1MGYwYjRfXHUwZjVmXHUwZmIzXHUwZjBiNV9cdTBmNWZcdTBmYjNcdTBmMGI2X1x1MGY1Zlx1MGZiM1x1MGYw'@;
put 'YjdfXHUwZjVmXHUwZmIzXHUwZjBiOF9cdTBmNWZcdTBmYjNcdTBmMGI5X1x1MGY1Zlx1MGZiM1x1MGYwYjEwX1x1MGY1Zlx1MGZiM1x1MGYwYjExX1x1MGY1Zlx1MGZiM1x1MGYwYjEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwZjVmXHUwZmIzXHUwZjBiXGR7MSwyfSkv'@;
put 'LG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBi'@;
put 'XHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTVcdTBmNzRcdTBmNjJcdTBmMGJcdTBmNTZc'@;
put 'dTBmNzRfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU0XHUwZjBiXHUwZjY2XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBm'@;
put 'NDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjU1XHUwZjc0XHUwZjYyXHUw'@;
put 'ZjBiXHUwZjU2XHUwZjc0X1x1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGY0OVx1MGY3Ml9cdTBmNWZcdTBmYjNfXHUwZjU4XHUwZjcyXHUwZjQy'@;
put 'X1x1MGY2M1x1MGZiN1x1MGY0Ml9cdTBmNTVcdTBmNzRcdTBmNjJfXHUwZjY2XHUwZjQ0XHUwZjY2X1x1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1MyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0g'@;
put 'WVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBmNTFcdTBmNzJcdTBmMGJcdTBmNjJcdTBmNzJcdTBmNDRdIExUIixuZXh0RGF5OiJbXHUwZjY2XHUwZjQ0XHUwZjBiXHUwZjQ5XHUw'@;
put 'ZjcyXHUwZjUzXSBMVCIsbmV4dFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNjJcdTBmOTdcdTBmN2FcdTBmNjZcdTBmMGJcdTBmNThdLCBMVCIsbGFzdERheToiW1x1MGY0MVx1MGYwYlx1MGY2Nlx1MGY0NF0gTFQiLGxh'@;
put 'c3RXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjU4XHUwZjUwXHUwZjYwXHUwZjBiXHUwZjU4XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZjYzXHUwZjBiIixwYXN0OiIl'@;
put 'cyBcdTBmNjZcdTBmOTRcdTBmNTNcdTBmMGJcdTBmNjMiLHM6Ilx1MGY2M1x1MGY1OFx1MGYwYlx1MGY2Nlx1MGY0NCIsc3M6IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY0Nlx1MGYwZCIsbToiXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4XHUwZjBiXHUwZjQyXHUwZjQ1'@;
put 'XHUwZjcyXHUwZjQyIixtbToiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4IixoOiJcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTFcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGhoOiIlZCBcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBm'@;
put 'NTEiLGQ6Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsZGQ6IiVkIFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYiIsTToiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixNTToiJWQgXHUwZjVmXHUw'@;
put 'ZmIzXHUwZjBiXHUwZjU2Iix5OiJcdTBmNjNcdTBmN2NcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLHl5OiIlZCBcdTBmNjNcdTBmN2MifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwZjIxXHUwZjIyXHUwZjIzXHUwZjI0XHUwZjI1XHUwZjI2XHUw'@;
put 'ZjI3XHUwZjI4XHUwZjI5XHUwZjIwXS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJc'@;
put 'dTBmNThcdTBmN2N8XHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2fFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NHxcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDJ8XHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBi'@;
put 'XHUwZjU4XHUwZjdjLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIj09PU8mJk0+PTR8fCJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiPT09TyYmTTw1'@;
put 'fHwiXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIj09PU8/TSsxMjpNfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIjpNPDEwPyJcdTBmNWVcdTBmN2NcdTBmNDJcdTBmNjZc'@;
put 'dTBmMGJcdTBmNDBcdTBmNjYiOk08MTc/Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI6TTwyMD8iXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIjoiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIn0sd2Vlazp7'@;
put 'ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjc2NzE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChCLFksWCl7cmV0dXJuIEIrIiAiK2Z1bmN0aW9uIE0oQixZKXtyZXR1cm4gMj09PVk/ZnVuY3Rpb24gTyhCKXt2YXIgWT17bToidiIs'@;
put 'YjoidiIsZDoieiJ9O3JldHVybiB2b2lkIDA9PT1ZW0IuY2hhckF0KDApXT9COllbQi5jaGFyQXQoMCldK0Iuc3Vic3RyaW5nKDEpfShCKTpCfSh7bW06Im11bnV0ZW5uIixNTToibWl6IixkZDoiZGV2ZXpoIn1bWF0sQil9ZnVuY3Rpb24gbGUoQil7cmV0dXJuIEI+OT9sZShCJTEwKTpCfXZh'@;
put 'ciBSPVsvXmdlbi9pLC9eY1tcdTAyYmNcJ11od2UvaSwvXm1ldS9pLC9eZWJyL2ksL15tYWUvaSwvXihtZXp8ZXZlKS9pLC9eZ291L2ksL15lb3MvaSwvXmd3ZS9pLC9eaGVyL2ksL15kdS9pLC9ea2VyL2ldLHo9L14oZ2VudmVyfGNbXHUwMmJjXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFl'@;
put 'fG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenV8Z2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLGo9Wy9eU3UvaSwvXkx1L2ksL15NZShbXnJdfCQpL2ksL15NZXIvaSwvXllhL2ksL15Hdy9pLC9eU2Ev'@;
put 'aV07YWUuZGVmaW5lTG9jYWxlKCJiciIse21vbnRoczoiR2VudmVyX0NcdTAyYmNod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiR2VuX0NcdTAyYmNod2VfTWV1X0Vicl9N'@;
put 'YWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXIiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bF9MdW5fTWV1cnpoX01lcmNcdTAyYmNoZXJfWWFvdV9Hd2VuZXJfU2Fkb3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZCIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5c01pbjoiU3VfTHVfTWVfTWVyX1lhX0d3X1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2U6aixmdWxsV2Vla2RheXNQYXJzZTpbL15zdWwvaSwvXmx1bi9pLC9ebWV1cnpoL2ksL15tZXJjW1x1MDJiY1wnXWhlci9pLC9eeWFvdS9pLC9eZ3dlbmVyL2ksL15zYWRvcm4vaV0s'@;
put 'c2hvcnRXZWVrZGF5c1BhcnNlOlsvXlN1bC9pLC9eTHVuL2ksL15NZXUvaSwvXk1lci9pLC9eWWFvL2ksL15Hd2UvaSwvXlNhZC9pXSxtaW5XZWVrZGF5c1BhcnNlOmosbW9udGhzUmVnZXg6eixtb250aHNTaG9ydFJlZ2V4OnosbW9udGhzU3RyaWN0UmVnZXg6L14oZ2VudmVyfGNbXHUwMmJj'@;
put 'XCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksbW9u'@;
put 'dGhzUGFyc2U6Uixsb25nTW9udGhzUGFyc2U6UixzaG9ydE1vbnRoc1BhcnNlOlIsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkiLExMTDoiRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbSIsTExM'@;
put 'TDoiZGRkZCwgRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGl6aXYgZGFdIExUIixuZXh0RGF5OiJbV2FyY1x1MDJiY2hvYXpoIGRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RhXSBMVCIsbGFzdERheToiW0RlY1x1MDJiY2ggZGFdIExUIixsYXN0V2Vl'@;
put 'azoiZGRkZCBbcGFzZXQgZGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhLWJlbm4gJXMiLHBhc3Q6IiVzIFx1MDJiY3pvIixzOiJ1biBuZWJldWQgc2Vnb25kZW5ub1x4ZjkiLHNzOiIlZCBlaWxlbm4iLG06InVyIHZ1bnV0ZW5uIixtbTp4LGg6InVuIGV1ciIs'@;
put 'aGg6IiVkIGV1ciIsZDoidW4gZGV2ZXpoIixkZDp4LE06InVyIG1peiIsTU06eCx5OiJ1ciBibG9heiIseXk6ZnVuY3Rpb24gbShCKXtzd2l0Y2gobGUoQikpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDk6cmV0dXJuIEIrIiBibG9heiI7ZGVmYXVsdDpyZXR1cm4gQisiIHZs'@;
put 'b2F6In19fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGFceGYxfHZldCkvLG9yZGluYWw6ZnVuY3Rpb24oQil7cmV0dXJuIEIrKDE9PT1CPyJhXHhmMSI6InZldCIpfSx3ZWVrOntkb3c6MSxkb3k6NH0sbWVyaWRpZW1QYXJzZTovYS5tLnxnLm0uLyxpc1BNOmZ1bmN0aW9uKEIp'@;
put 'e3JldHVybiJnLm0uIj09PUJ9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsWSxYKXtyZXR1cm4gQjwxMj8iYS5tLiI6ImcubS4ifX0pfShGKDE2Njc2KSl9LDM4MTUzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPKXt2YXIgUj1sZSsi'@;
put 'ICI7c3dpdGNoKE8pe2Nhc2Uic3MiOnJldHVybiBSKygxPT09bGU/InNla3VuZGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gTT8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gUisoMT09PWxl'@;
put 'PyJtaW51dGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0dXJuIE0/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gUisoMT09PWxlPyJzYXQiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/InNhdGEiOiJzYXRpIik7'@;
put 'Y2FzZSJkZCI6cmV0dXJuIFIrKDE9PT1sZT8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBSKygxPT09bGU/Im1qZXNlYyI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gUisoMT09PWxlPyJnb2RpbmEiOjI9PT1sZXx8Mz09'@;
put 'PWxlfHw0PT09bGU/ImdvZGluZSI6ImdvZGluYSIpfX1hZS5kZWZpbmVMb2NhbGUoImJzIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1No'@;
put 'b3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1'@;
put 'Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRl'@;
put 'Rm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6Iltz'@;
put 'dXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAx'@;
put 'OmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZXIgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gZGRkZCBbdV0gTFQiO2Nh'@;
put 'c2UgNjpyZXR1cm4iW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMi'@;
put 'LHM6InBhciBzZWt1bmRpIixzczp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6ImRhbiIsZGQ6eCxNOiJtamVzZWMiLE1NOngseToiZ29kaW51Iix5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYp'@;
put 'KX0sNTQyODc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJjYSIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuZXJfZmVicmVyX21hclx4ZTdfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25v'@;
put 'dmVtYnJlX2Rlc2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUganVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlIi5zcGxpdCgiXyIp'@;
put 'LGlzRm9ybWF0Oi9EW29EXT8oXHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9mZWJyLl9tYXJceGU3X2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGl1bWVuZ2VfZGlsbHVuc19k'@;
put 'aW1hcnRzX2RpbWVjcmVzX2Rpam91c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kdF9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Bh'@;
put 'cnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsOiJEIE1NTSBZWVlZLCBIOm1tIixM'@;
put 'TExMOiJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthdnVpIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHREYXk6ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4iW2RlbVx4ZTAgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVy'@;
put 'biJbYWhpciBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc3NhdCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7'@;
put 'ZnV0dXJlOiJkJ2FxdVx4ZWQgJXMiLHBhc3Q6ImZhICVzIixzOiJ1bnMgc2Vnb25zIixzczoiJWQgc2Vnb25zIixtOiJ1biBtaW51dCIsbW06IiVkIG1pbnV0cyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JlcyIsZDoidW4gZGlhIixkZDoiJWQgZGllcyIsTToidW4gbWVzIixNTToiJWQgbWVz'@;
put 'b3MiLHk6InVuIGFueSIseXk6IiVkIGFueXMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHJ8bnx0fFx4ZTh8YSkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7dmFyIE09MT09PW0/InIiOjI9PT1tPyJuIjozPT09bT8iciI6ND09PW0/InQiOiJceGU4IjtyZXR1cm4oInciPT09'@;
put 'bGV8fCJXIj09PWxlKSYmKE09ImEiKSxtK019LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDcyNjE2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXtmb3JtYXQ6ImxlZGVuX1x4ZmFub3JfYlx1MDE1OWV6ZW5fZHViZW5fa3ZcdTAx'@;
put 'MWJ0ZW5fXHUwMTBkZXJ2ZW5fXHUwMTBkZXJ2ZW5lY19zcnBlbl96XHhlMVx1MDE1OVx4ZWRfXHUwMTU5XHhlZGplbl9saXN0b3BhZF9wcm9zaW5lYyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJsZWRuYV9ceGZhbm9yYV9iXHUwMTU5ZXpuYV9kdWJuYV9rdlx1MDExYnRuYV9cdTAxMGRlcnZu'@;
put 'YV9cdTAxMGRlcnZlbmNlX3NycG5hX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVkam5hX2xpc3RvcGFkdV9wcm9zaW5jZSIuc3BsaXQoIl8iKX0sbT0ibGVkX1x4ZmFub19iXHUwMTU5ZV9kdWJfa3ZcdTAxMWJfXHUwMTBkdm5fXHUwMTBkdmNfc3JwX3pceGUxXHUwMTU5X1x1MDE1OVx4ZWRq'@;
put 'X2xpc19wcm8iLnNwbGl0KCJfIiksbGU9Wy9ebGVkL2ksL15ceGZhbm8vaSwvXmJcdTAxNTllL2ksL15kdWIvaSwvXmt2XHUwMTFiL2ksL14oXHUwMTBkdm58XHUwMTBkZXJ2ZW4kfFx1MDEwZGVydm5hKS9pLC9eKFx1MDEwZHZjfFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZSkvaSwvXnNy'@;
put 'cC9pLC9eelx4ZTFcdTAxNTkvaSwvXlx1MDE1OVx4ZWRqL2ksL15saXMvaSwvXnByby9pXSxNPS9eKGxlZGVufFx4ZmFub3J8Ylx1MDE1OWV6ZW58ZHViZW58a3ZcdTAxMWJ0ZW58XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVufHpceGUx'@;
put 'XHUwMTU5XHhlZHxcdTAxNTlceGVkamVufGxpc3RvcGFkfHByb3NpbmVjfGxlZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pO2Z1bmN0aW9uIE8oSyl7cmV0dXJuIEs+MSYmSzw1JiYx'@;
put 'IT1+fihLLzEwKX1mdW5jdGlvbiBSKEssSSxrLEUpe3ZhciBqPUsrIiAiO3N3aXRjaChrKXtjYXNlInMiOnJldHVybiBJfHxFPyJwXHhlMXIgc2VrdW5kIjoicFx4ZTFyIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIEl8fEU/aisoTyhLKT8ic2VrdW5keSI6InNla3VuZCIpOmorInNla3Vu'@;
put 'ZGFtaSI7Y2FzZSJtIjpyZXR1cm4gST8ibWludXRhIjpFPyJtaW51dHUiOiJtaW51dG91IjtjYXNlIm1tIjpyZXR1cm4gSXx8RT9qKyhPKEspPyJtaW51dHkiOiJtaW51dCIpOmorIm1pbnV0YW1pIjtjYXNlImgiOnJldHVybiBJPyJob2RpbmEiOkU/ImhvZGludSI6ImhvZGlub3UiO2Nhc2Ui'@;
put 'aGgiOnJldHVybiBJfHxFP2orKE8oSyk/ImhvZGlueSI6ImhvZGluIik6aisiaG9kaW5hbWkiO2Nhc2UiZCI6cmV0dXJuIEl8fEU/ImRlbiI6ImRuZW0iO2Nhc2UiZGQiOnJldHVybiBJfHxFP2orKE8oSyk/ImRueSI6ImRuXHhlZCIpOmorImRueSI7Y2FzZSJNIjpyZXR1cm4gSXx8RT8ibVx1'@;
put 'MDExYnNceGVkYyI6Im1cdTAxMWJzXHhlZGNlbSI7Y2FzZSJNTSI6cmV0dXJuIEl8fEU/aisoTyhLKT8ibVx1MDExYnNceGVkY2UiOiJtXHUwMTFic1x4ZWRjXHUwMTZmIik6aisibVx1MDExYnNceGVkY2kiO2Nhc2UieSI6cmV0dXJuIEl8fEU/InJvayI6InJva2VtIjtjYXNlInl5IjpyZXR1'@;
put 'cm4gSXx8RT9qKyhPKEspPyJyb2t5IjoibGV0Iik6aisibGV0eSJ9fWFlLmRlZmluZUxvY2FsZSgiY3MiLHttb250aHM6eCxtb250aHNTaG9ydDptLG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGxlZGVufGxlZG5hfFx4ZmFub3JhfFx4ZmFu'@;
put 'b3J8Ylx1MDE1OWV6ZW58Ylx1MDE1OWV6bmF8ZHViZW58ZHVibmF8a3ZcdTAxMWJ0ZW58a3ZcdTAxMWJ0bmF8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVufHNycG5hfHpceGUxXHUwMTU5XHhlZHxcdTAxNTlceGVkamVufFx1MDE1OVx4'@;
put 'ZWRqbmF8bGlzdG9wYWR1fGxpc3RvcGFkfHByb3NpbmVjfHByb3NpbmNlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14obGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAxMWJ8XHUwMTBkdm58XHUwMTBkdmN8c3JwfHpceGUxXHUwMTU5fFx1MDE1OVx4ZWRqfGxpc3xwcm8pL2ksbW9u'@;
put 'dGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6Im5lZFx1MDExYmxlX3BvbmRcdTAxMWJsXHhlZF9ceGZhdGVyXHhmZF9zdFx1MDE1OWVkYV9cdTAxMGR0dnJ0ZWtfcFx4ZTF0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hv'@;
put 'cnQ6Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJE'@;
put 'LiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIEg6bW0iLGw6IkQuIE0uIFlZWVkifSxjYWxlbmRhcjp7c2FtZURheToiW2RuZXMgdl0gTFQiLG5leHREYXk6Ilt6XHhlZHRyYSB2XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0'@;
put 'Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWRcdTAxMWJsaSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW3ZdIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlt2ZSBzdFx1MDE1OWVkdSB2XSBMVCI7Y2FzZSA0OnJldHVybiJbdmUgXHUwMTBkdHZydGVrIHZdIExUIjtj'@;
put 'YXNlIDU6cmV0dXJuIlt2IHBceGUxdGVrIHZdIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSB2XSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSB2XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxvdSBuZWRcdTAxMWJs'@;
put 'aSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW21pbnVsXHhlOV0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW21pbnVsb3Ugc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW3ZdIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bG91'@;
put 'IHNvYm90dSB2XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicFx1MDE1OWVkICVzIixzOlIsc3M6UixtOlIsbW06UixoOlIsaGg6UixkOlIsZGQ6UixNOlIsTU06Uix5OlIseXk6Un0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy'@;
put 'fVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDI3MDQ5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiY3YiLHttb250aHM6Ilx1MDQzYVx1MDRkMVx1MDQ0MFx1MDQzYlx1MDQzMFx1'@;
put 'MDQ0N19cdTA0M2RcdTA0MzBcdTA0NDBcdTA0ZDFcdTA0NDFfXHUwNDNmXHUwNDQzXHUwNDQ4X1x1MDQzMFx1MDQzYVx1MDQzMF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNGFiXHUwNGQ3XHUwNDQwXHUwNDQyXHUwNDNjXHUwNDM1X1x1MDQ0M1x1MDQ0Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0'@;
put 'NDBcdTA0M2JcdTA0MzBfXHUwNDMwXHUwNDMyXHUwNGQxXHUwNDNkX1x1MDQ0ZVx1MDQzZlx1MDQzMF9cdTA0NDdcdTA0ZjNcdTA0M2FfXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDQyXHUwNDMwXHUwNDMyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0M2FcdTA0ZDFcdTA0NDBfXHUwNDNk'@;
put 'XHUwNDMwXHUwNDQwX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MF9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwX1x1MDQzMFx1MDQzMlx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBf'@;
put 'XHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDMyXHUwNDRiXHUwNDQwXHUwNDQxXHUwNDMwXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Mlx1MDQ0M1x1MDQzZFx1MDQ0Mlx1MDQzOFx1MDQzYVx1'@;
put 'MDQ0M1x1MDQzZF9cdTA0NGJcdTA0NDJcdTA0M2JcdTA0MzBcdTA0NDBcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRlXHUwNDNkXHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQzYVx1MDRkN1x1MDRhYlx1MDQzZFx1MDQzNVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9c'@;
put 'dTA0NGRcdTA0NDBcdTA0M2RcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQ4XHUwNGQxXHUwNDNjXHUwNDMwXHUwNDQyXHUwNDNhXHUwNDQzXHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MF9cdTA0NDJcdTA0NDNcdTA0M2RfXHUwNDRiXHUw'@;
put 'NDQyXHUwNDNiX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJfXHUwNDRkXHUwNDQwXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQwX1x1MDQ0Mlx1MDQzZF9cdTA0NGJcdTA0NDJfXHUwNDRlXHUwNDNkX1x1MDQzYVx1'@;
put 'MDRhYl9cdTA0NGRcdTA0NDBfXHUwNDQ4XHUwNDNjIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRk'@;
put 'MVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSIsTExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3'@;
put 'XSwgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUw'@;
put 'NDFmXHUwNDMwXHUwNDRmXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dERheToiW1x1MDQyYlx1MDQ0MFx1MDQzMFx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3REYXk6'@;
put 'IltcdTA0ZDZcdTA0M2RcdTA0MzVcdTA0NDBdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixuZXh0V2VlazoiW1x1MDRhYVx1MDQzOFx1MDQ0Mlx1MDQzNVx1MDQ0MV0gZGRkZCBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQw'@;
put 'XHUwNDM1XSIsbGFzdFdlZWs6IltcdTA0MThcdTA0NDBcdTA0NDJcdTA0M2RcdTA0ZDddIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuIG0rKC9c'@;
put 'dTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIkL2kuZXhlYyhtKT8iXHUwNDQwXHUwNDM1XHUwNDNkIjovXHUwNGFiXHUwNDQzXHUwNDNiJC9pLmV4ZWMobSk/Ilx1MDQ0Mlx1MDQzMFx1MDQzZCI6Ilx1MDQ0MFx1MDQzMFx1MDQzZCIpfSxwYXN0OiIlcyBcdTA0M2FcdTA0MzBcdTA0NGZc'@;
put 'dTA0M2JcdTA0M2JcdTA0MzAiLHM6Ilx1MDQzZlx1MDRkN1x1MDQ0MC1cdTA0MzhcdTA0M2EgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixzczoiJWQgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixtOiJcdTA0M2ZcdTA0ZDdc'@;
put 'dTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUw'@;
put 'NDQyIixkOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNhXHUwNDQzXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNDQzXHUwNDNkIixNOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1IixNTToiJWQgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1Iix5OiJcdTA0M2Zc'@;
put 'dTA0ZDdcdTA0NDAgXHUwNGFiXHUwNDQzXHUwNDNiIix5eToiJWQgXHUwNGFiXHUwNDQzXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS1cdTA0M2NcdTA0ZDdcdTA0NDgvLG9yZGluYWw6IiVkLVx1MDQzY1x1MDRkN1x1MDQ0OCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9'@;
put 'KEYoMTY2NzYpKX0sOTkxNzI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJjeSIse21vbnRoczoiSW9uYXdyX0Nod2Vmcm9yX01hd3J0aF9FYnJpbGxfTWFpX01laGVmaW5fR29yZmZlbm5hZl9Bd3N0X01lZGlfSHlkcmVmX1Rh'@;
put 'Y2h3ZWRkX1JoYWdmeXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Iklvbl9DaHdlX01hd19FYnJfTWFpX01laF9Hb3JfQXdzX01lZF9IeWRfVGFjaF9SaGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1'@;
put 'X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MbHVuX01hd19NZXJfSWF1X0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0xsX01hX01lX0lhX0d3X1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25n'@;
put 'RGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIZWRkaXcgYW1dIExUIixuZXh0'@;
put 'RGF5OiJbWWZvcnkgYW1dIExUIixuZXh0V2VlazoiZGRkZCBbYW1dIExUIixsYXN0RGF5OiJbRGRvZSBhbV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkaXdldGhhZiBhbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im1ld24gJXMiLHBhc3Q6IiVzIHluIFx4ZjRsIixz'@;
put 'OiJ5Y2h5ZGlnIGVpbGlhZGF1IixzczoiJWQgZWlsaWFkIixtOiJtdW51ZCIsbW06IiVkIG11bnVkIixoOiJhd3IiLGhoOiIlZCBhd3IiLGQ6ImRpd3Jub2QiLGRkOiIlZCBkaXdybm9kIixNOiJtaXMiLE1NOiIlZCBtaXMiLHk6ImJsd3lkZHluIix5eToiJWQgZmx5bmVkZCJ9LGRheU9mTW9u'@;
put 'dGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZmVkfGFpbnxhZnxpbHx5ZGR8ZWR8ZWcpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBNPSIiO3JldHVybiBtPjIwP009NDA9PT1tfHw1MD09PW18fDYwPT09bXx8ODA9PT1tfHwxMDA9PT1tPyJmZWQiOiJhaW4iOm0+MCYmKE09WyIiLCJhZiIsImls'@;
put 'IiwieWRkIiwieWRkIiwiZWQiLCJlZCIsImVkIiwiZmVkIiwiZmVkIiwiZmVkIiwiZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJlZyIsImZlZCIsImVnIiwiZmVkIl1bbV0pLG0rTX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMjA2MDU6ZnVuY3Rpb24oYXQsSWUs'@;
put 'Ril7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJkYSIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hv'@;
put 'cnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzXHhmOG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY4cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmOG5f'@;
put 'bWFuX3Rpcl9vbnNfdG9yX2ZyZV9sXHhmOHIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY4X21hX3RpX29uX3RvX2ZyX2xceGY4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVki'@;
put 'LExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIFtkLl0gRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wuXSBMVCIsbmV4dFdlZWs6InBceGU1IGRkZGQgW2tsLl0gTFQiLGxh'@;
put 'c3REYXk6IltpIGdceGU1ciBrbC5dIExUIixsYXN0V2VlazoiW2ldIGRkZGRbcyBrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6ImZceGU1IHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImV0IG1pbnV0Iixt'@;
put 'bToiJWQgbWludXR0ZXIiLGg6ImVuIHRpbWUiLGhoOiIlZCB0aW1lciIsZDoiZW4gZGFnIixkZDoiJWQgZGFnZSIsTToiZW4gbVx4ZTVuZWQiLE1NOiIlZCBtXHhlNW5lZGVyIix5OiJldCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxv'@;
put 'cmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDkzMzk1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWlu'@;
put 'ZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltsZSsiIFRhZ2UiLGxlKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W2xlKyIgTW9uYXRlIixsZSsiIE1v'@;
put 'bmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2xlKyIgSmFocmUiLGxlKyIgSmFocmVuIl19O3JldHVybiBNP3pbT11bMF06eltPXVsxXX1hZS5kZWZpbmVMb2NhbGUoImRlLWF0Iix7bW9udGhzOiJKXHhlNG5uZXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9KdW5p'@;
put 'X0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKXHhlNG4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhh'@;
put 'Y3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlf'@;
put 'TWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1N'@;
put 'IFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RX'@;
put 'ZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06eCxtbToiJWQgTWludXRlbiIsaDp4LGhoOiIlZCBTdHVuZGVuIixkOngsZGQ6'@;
put 'eCx3Ongsd3c6IiVkIFdvY2hlbiIsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5OTgzNTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ug'@;
put 'c3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbbGUrIiBUYWdlIixsZSsiIFRhZ2VuIl0sdzpbImVpbmUg'@;
put 'V29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltsZSsiIE1vbmF0ZSIsbGUrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltsZSsiIEphaHJlIixsZSsiIEphaHJlbiJdfTtyZXR1cm4gTT96W09dWzBdOnpbT11b'@;
put 'MV19YWUuZGVmaW5lTG9jYWxlKCJkZS1jaCIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpf'@;
put 'QXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5'@;
put 'c1Nob3J0OiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVki'@;
put 'LExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0'@;
put 'V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixz'@;
put 'czoiJWQgU2VrdW5kZW4iLG06eCxtbToiJWQgTWludXRlbiIsaDp4LGhoOiIlZCBTdHVuZGVuIixkOngsZGQ6eCx3Ongsd3c6IiVkIFdvY2hlbiIsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxk'@;
put 'b3k6NH19KX0oRigxNjY3NikpfSw5NDAxMzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0s'@;
put 'ZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbbGUrIiBUYWdlIixsZSsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltsZSsiIE1vbmF0ZSIsbGUrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWlu'@;
put 'ZW0gSmFociJdLHl5OltsZSsiIEphaHJlIixsZSsiIEphaHJlbiJdfTtyZXR1cm4gTT96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJkZSIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9O'@;
put 'b3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVu'@;
put 'c3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFy'@;
put 'c2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilto'@;
put 'ZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9'@;
put 'LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOngsbW06IiVkIE1pbnV0ZW4iLGg6eCxoaDoiJWQgU3R1bmRlbiIsZDp4LGRkOngsdzp4LHd3OiIlZCBXb2NoZW4iLE06eCxNTTp4LHk6eCx5'@;
put 'eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTQ1NzA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9WyJcdTA3OTZcdTA3YWNcdTA3ODJc'@;
put 'dTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3OGFcdTA3YWNcdTA3ODRcdTA3YjBcdTA3ODNcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3ODlcdTA3YTdcdTA3ODNcdTA3YThcdTA3OTdcdTA3YWEiLCJcdTA3ODdcdTA3YWRcdTA3OTVcdTA3YjBcdTA3ODNc'@;
put 'dTA3YTlcdTA3OGRcdTA3YWEiLCJcdTA3ODlcdTA3YWQiLCJcdTA3OTZcdTA3YWJcdTA3ODJcdTA3YjAiLCJcdTA3OTZcdTA3YWFcdTA3OGRcdTA3YTZcdTA3ODdcdTA3YTgiLCJcdTA3ODdcdTA3YWZcdTA3OGVcdTA3YTZcdTA3OTBcdTA3YjBcdTA3OTNcdTA3YWEiLCJcdTA3OTBcdTA3YWNc'@;
put 'dTA3OTVcdTA3YjBcdTA3OTNcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODdcdTA3YWVcdTA3ODZcdTA3YjBcdTA3OTNcdTA3YWZcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODJcdTA3YWVcdTA3ODhcdTA3YWNcdTA3ODlcdTA3YjBcdTA3'@;
put 'ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3OTFcdTA3YThcdTA3OTBcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiXSxtPVsiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4XHUwNzg3XHUwN2IwXHUwNzhjXHUwN2E2IiwiXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2'@;
put 'IiwiXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwXHUwNzhlXHUwN2E3XHUwNzgzXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3XHUwNzkwXHUwN2IwXHUwNzhhXHUwN2E2XHUwNzhjXHUwN2E4IiwiXHUwNzgwXHUwN2FhXHUwNzg2XHUw'@;
put 'N2FhXHUwNzgzXHUwN2FhIiwiXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4XHUwNzgwXHUwN2E4XHUwNzgzXHUwN2FhIl07YWUuZGVmaW5lTG9jYWxlKCJkdiIse21vbnRoczp4LG1vbnRoc1Nob3J0Ongsd2Vla2RheXM6bSx3ZWVrZGF5c1Nob3J0Om0sd2Vla2RheXNNaW46Ilx1MDc4N1x1MDdh'@;
put 'N1x1MDc4Ylx1MDdhOF9cdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTZfXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwX1x1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNl9cdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdfXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhX1x1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOCIu'@;
put 'c3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL00vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNzg5XHUwNzg2'@;
put 'fFx1MDc4OVx1MDc4YS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4iXHUwNzg5XHUwNzhhIj09PU19LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwxMj8iXHUwNzg5XHUwNzg2IjoiXHUwNzg5XHUwNzhhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA3ODlcdTA3YThcdTA3ODdc'@;
put 'dTA3YTZcdTA3OGJcdTA3YWFdIExUIixuZXh0RGF5OiJbXHUwNzg5XHUwN2E3XHUwNzhiXHUwN2E2XHUwNzg5XHUwN2E3XSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltcdTA3ODdcdTA3YThcdTA3ODdcdTA3YjBcdTA3OTRcdTA3YWNdIExUIixsYXN0V2VlazoiW1x1MDc4YVx1'@;
put 'MDdhN1x1MDc4N1x1MDdhOFx1MDc4Y1x1MDdhYVx1MDc4OFx1MDdhOF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNzhjXHUwN2FjXHUwNzgzXHUwN2FkXHUwNzhlXHUwN2E2XHUwNzg3XHUwN2E4ICVzIixwYXN0OiJcdTA3ODZcdTA3YWFcdTA3ODNc'@;
put 'dTA3YThcdTA3ODJcdTA3YjAgJXMiLHM6Ilx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYVx1MDc4Nlx1MDdhZVx1MDc4NVx1MDdhY1x1MDc4N1x1MDdiMCIsc3M6ImQlIFx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdh'@;
put 'YSIsbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FjXHUwNzg3XHUwN2IwIixtbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FhICVkIixoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAi'@;
put 'LGhoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWEgJWQiLGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsZGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc5MFx1MDdiMCAlZCIsTToiXHUwNzg5'@;
put 'XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixNTToiXHUwNzg5XHUwN2E2XHUwNzkwXHUwN2IwICVkIix5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLHl5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWEgJWQifSxw'@;
put 'cmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo3LGRveToxMn19KX0oRigxNjY3NikpfSwzMTg1OTpmdW5jdGlvbihhdCxJZSxG'@;
put 'KXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVsIix7bW9udGhzTm9taW5hdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUw'@;
put 'M2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNjMVx1MDNjNFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYWZcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1'@;
put 'MDNiZlx1MDNjZFx1MDNiZFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2NkXHUwM2IzXHUwM2JmXHUwM2M1XHUwM2MzXHUwM2M0XHUwM2JmXHUwM2MyX1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNhZFx1'@;
put 'MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzY2VcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlkXHUwM2JmXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5NFx1MDNiNVx1MDNiYVx1'@;
put 'MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMiIuc3BsaXQoIl8iKSxtb250aHNHZW5pdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUw'@;
put 'M2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDNjMVx1MDNjNFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUwMzkwXHUwM2JmXHUwM2M1X1x1MDM5OVx1'@;
put 'MDNiZlx1MDNjNVx1MDNiZFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2M1XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2MzXHUwM2M0XHUwM2JmXHUwM2M1X1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNiNVx1'@;
put 'MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzYzlcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlkXHUwM2JmXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5NFx1MDNiNVx1MDNiYVx1'@;
put 'MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNSIuc3BsaXQoIl8iKSxtb250aHM6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIGxlPyJzdHJpbmciPT10eXBlb2YgTSYmL0QvLnRlc3QoTS5zdWJzdHJpbmcoMCxNLmluZGV4T2YoIk1NTU0iKSkpP3RoaXMuX21vbnRoc0dlbml0'@;
put 'aXZlRWxbbGUubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW2xlLm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbH0sbW9udGhzU2hvcnQ6Ilx1MDM5OVx1MDNiMVx1MDNiZF9cdTAzYTZcdTAzYjVcdTAzYjJfXHUwMzljXHUwM2IxXHUwM2MxX1x1MDM5MVx1MDNjMFx1'@;
put 'MDNjMV9cdTAzOWNcdTAzYjFcdTAzY2FfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JkX1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiYl9cdTAzOTFcdTAzYzVcdTAzYjNfXHUwM2EzXHUwM2I1XHUwM2MwX1x1MDM5Zlx1MDNiYVx1MDNjNF9cdTAzOWRcdTAzYmZcdTAzYjVfXHUwMzk0XHUwM2I1XHUw'@;
put 'M2JhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTAzOWFcdTAzYzVcdTAzYzFcdTAzYjlcdTAzYjFcdTAzYmFcdTAzYWVfXHUwMzk0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2FkXHUwM2MxXHUwM2IxX1x1MDNhNFx1MDNjMVx1MDNhZlx1MDNjNFx1MDNiN19cdTAzYTRcdTAzYjVcdTAzYzRcdTAz'@;
put 'YWNcdTAzYzFcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2FkXHUwM2JjXHUwM2MwXHUwM2M0XHUwM2I3X1x1MDNhMFx1MDNiMVx1MDNjMVx1MDNiMVx1MDNjM1x1MDNiYVx1MDNiNVx1MDNjNVx1MDNhZV9cdTAzYTNcdTAzYWNcdTAzYjJcdTAzYjJcdTAzYjFcdTAzYzRcdTAzYmYiLnNwbGl0KCJf'@;
put 'Iiksd2Vla2RheXNTaG9ydDoiXHUwMzlhXHUwM2M1XHUwM2MxX1x1MDM5NFx1MDNiNVx1MDNjNV9cdTAzYTRcdTAzYzFcdTAzYjlfXHUwM2E0XHUwM2I1XHUwM2M0X1x1MDNhMFx1MDNiNVx1MDNiY19cdTAzYTBcdTAzYjFcdTAzYzFfXHUwM2EzXHUwM2IxXHUwM2IyIi5zcGxpdCgiXyIpLHdl'@;
put 'ZWtkYXlzTWluOiJcdTAzOWFcdTAzYzVfXHUwMzk0XHUwM2I1X1x1MDNhNFx1MDNjMV9cdTAzYTRcdTAzYjVfXHUwM2EwXHUwM2I1X1x1MDNhMFx1MDNiMV9cdTAzYTNcdTAzYjEiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU+MTE/Tz8iXHUwM2JjXHUw'@;
put 'M2JjIjoiXHUwMzljXHUwMzljIjpPPyJcdTAzYzBcdTAzYmMiOiJcdTAzYTBcdTAzOWMifSxpc1BNOmZ1bmN0aW9uKGxlKXtyZXR1cm4iXHUwM2JjIj09PShsZSsiIikudG9Mb3dlckNhc2UoKVswXX0sbWVyaWRpZW1QYXJzZTovW1x1MDNhMFx1MDM5Y11cLj9cdTAzOWM/XC4/L2ksbG9uZ0Rh'@;
put 'dGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhckVsOntzYW1lRGF5OiJbXHUwM2EzXHUwM2FlXHUw'@;
put 'M2JjXHUwM2I1XHUwM2MxXHUwM2IxIHt9XSBMVCIsbmV4dERheToiW1x1MDM5MVx1MDNjZFx1MDNjMVx1MDNiOVx1MDNiZiB7fV0gTFQiLG5leHRXZWVrOiJkZGRkIFt7fV0gTFQiLGxhc3REYXk6IltcdTAzYTdcdTAzYjhcdTAzYjVcdTAzYzIge31dIExUIixsYXN0V2VlazpmdW5jdGlvbigp'@;
put 'e3JldHVybiA2PT09dGhpcy5kYXkoKT8iW1x1MDNjNFx1MDNiZiBcdTAzYzBcdTAzYzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAzYmZdIGRkZGQgW3t9XSBMVCI6IltcdTAzYzRcdTAzYjdcdTAzYmQgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3'@;
put 'XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2I3XSBkZGRkIFt7fV0gTFQifSxzYW1lRWxzZToiTCJ9LGNhbGVuZGFyOmZ1bmN0aW9uKGxlLE0pe3ZhciBPPXRoaXMuX2NhbGVuZGFyRWxbbGVdLFI9TSYmTS5ob3VycygpO3JldHVybiBmdW5jdGlvbiB4KGxlKXtyZXR1'@;
put 'cm4gdHlwZW9mIEZ1bmN0aW9uPCJ1IiYmbGUgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsZSl9KE8pJiYoTz1PLmFwcGx5KE0pKSxPLnJlcGxhY2UoInt9IixSJTEyPT0xPyJcdTAzYzNcdTAzYzRcdTAz'@;
put 'YjciOiJcdTAzYzNcdTAzYzRcdTAzYjlcdTAzYzIiKX0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDNjM1x1MDNiNSAlcyIscGFzdDoiJXMgXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JkIixzOiJcdTAzYmJcdTAzYWZcdTAzYjNcdTAzYjEgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1'@;
put 'XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixzczoiJWQgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixtOiJcdTAzYWRcdTAzYmRcdTAzYjEgXHUwM2JiXHUwM2I1XHUwM2Mw'@;
put 'XHUwM2M0XHUwM2NjIixtbToiJWQgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2FjIixoOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2NlXHUwM2MxXHUwM2IxIixoaDoiJWQgXHUwM2NlXHUwM2MxXHUwM2I1XHUwM2MyIixkOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2JjXHUwM2FkXHUw'@;
put 'M2MxXHUwM2IxIixkZDoiJWQgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2I1XHUwM2MyIixNOiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2IxXHUwM2MyIixNTToiJWQgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2I1XHUwM2MyIix5OiJcdTAzYWRcdTAzYmRc'@;
put 'dTAzYjFcdTAzYzIgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2JmXHUwM2MyIix5eToiJWQgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2I5XHUwM2IxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MDNiNy8sb3JkaW5hbDoiJWRcdTAzYjciLHdlZWs6e2Rvdzox'@;
put 'LGRveTo0fX0pfShGKDE2Njc2KSl9LDU1Nzg1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tYXUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVy'@;
put 'X09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0Zy'@;
put 'aWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06'@;
put 'c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVr'@;
put 'OiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMi'@;
put 'LG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShz'@;
put 'dHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oRigxNjY3NikpfSw4Mzc5MjpmdW5jdGlv'@;
put 'bihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWNhIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgi'@;
put 'XyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNT'@;
put 'aG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IllZWVktTU0tREQiLExMOiJNTU1NIEQsIFlZ'@;
put 'WVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVy'@;
put 'ZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6'@;
put 'ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0p'@;
put 'e3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX19KX0oRigxNjY3NikpfSw1NzY1MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2Nh'@;
put 'bGUoImVuLWdiIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1Nl'@;
put 'cF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtk'@;
put 'YXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhI'@;
put 'Om1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxy'@;
put 'ZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgi'@;
put 'LE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9'@;
put 'PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw4MTkyOTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWllIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01h'@;
put 'cmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3Vu'@;
put 'ZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8i'@;
put 'KSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIs'@;
put 'bmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdv'@;
put 'IixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMi'@;
put 'fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2Rvdzox'@;
put 'LGRveTo0fX0pfShGKDE2Njc2KSl9LDE5ODE4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4taWwiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVy'@;
put 'X09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0Zy'@;
put 'aWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06'@;
put 'c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRk'@;
put 'ZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToi'@;
put 'YSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5k'@;
put 'fHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9fSl9KEYoMTY2NzYpKX0sNjYxMjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUp'@;
put 'eyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWluIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmVi'@;
put 'X01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1Ro'@;
put 'dV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1t'@;
put 'IEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0'@;
put 'XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoi'@;
put 'YSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+'@;
put 'fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjQ5MDA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1u'@;
put 'eiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05v'@;
put 'dl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi'@;
put 'U3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEi'@;
put 'fSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0'@;
put 'aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06'@;
put 'IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxl'@;
put 'PyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDcyNzIxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tc2ciLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hf'@;
put 'QXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlf'@;
put 'TW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxv'@;
put 'bmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4'@;
put 'dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixz'@;
put 'OiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxk'@;
put 'YXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRv'@;
put 'eTo0fX0pfShGKDE2Njc2KSl9LDk1MTU5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW8iLHttb250aHM6ImphbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9fanVuaW9fanVsaW9fYVx1MDE2ZGd1c3RvX3NlcHRl'@;
put 'bWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcnRfYXByX21hal9qdW5fanVsX2FcdTAxNmRnX3NlcHRfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRpbWFuXHUwMTA5b19sdW5kb19tYXJkb19tZXJrcmVk'@;
put 'b19cdTAxMzVhXHUwMTZkZG9fdmVuZHJlZG9fc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbV9sdW5fbWFyZF9tZXJrX1x1MDEzNWFcdTAxNmRfdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfXHUwMTM1YV92ZV9zYSIuc3BsaXQoIl8iKSxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSIsTExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixMTExMOiJkZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZ'@;
put 'IEhIOm1tIixsbGxsOiJkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1thcF1cLnRcLm0vaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybiJwIj09PW0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0'@;
put 'dXJuIG0+MTE/TT8icC50Lm0uIjoiUC5ULk0uIjpNPyJhLnQubS4iOiJBLlQuTS4ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvZGlhXHUwMTZkIGplXSBMVCIsbmV4dERheToiW01vcmdhXHUwMTZkIGplXSBMVCIsbmV4dFdlZWs6ImRkZGRbbiBqZV0gTFQiLGxhc3REYXk6IltIaWVyYVx1MDE2'@;
put 'ZCBqZV0gTFQiLGxhc3RXZWVrOiJbcGFzaW50YW5dIGRkZGRbbiBqZV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvc3QgJXMiLHBhc3Q6ImFudGFcdTAxNmQgJXMiLHM6ImtlbGthaiBzZWt1bmRvaiIsc3M6IiVkIHNla3VuZG9qIixtOiJ1bnUgbWludXRvIixt'@;
put 'bToiJWQgbWludXRvaiIsaDoidW51IGhvcm8iLGhoOiIlZCBob3JvaiIsZDoidW51IHRhZ28iLGRkOiIlZCB0YWdvaiIsTToidW51IG1vbmF0byIsTU06IiVkIG1vbmF0b2oiLHk6InVudSBqYXJvIix5eToiJWQgamFyb2oifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9YS8sb3Jk'@;
put 'aW5hbDoiJWRhIix3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSwxMTc4MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNw'@;
put 'bGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksbGU9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwv'@;
put 'XmRpYy9pXSxNPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98'@;
put 'b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJlcy1kbyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNT'@;
put 'aG9ydDpmdW5jdGlvbihSLHope3JldHVybiBSPy8tTU1NLS8udGVzdCh6KT9tW1IubW9udGgoKV06eFtSLm1vbnRoKCldOnh9LG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xq'@;
put 'dWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykv'@;
put 'aSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFy'@;
put 'Ll9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9Z'@;
put 'WVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhp'@;
put 'cy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoi'@;
put 'IikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExU'@;
put 'In0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRh'@;
put 'IixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7'@;
put 'ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMjM0Njg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLG09ImVuZV9m'@;
put 'ZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLGxlPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sTT0vXihlbmVy'@;
put 'b3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGlj'@;
put 'XC4/KS9pO2FlLmRlZmluZUxvY2FsZSgiZXMtbXgiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oUix6'@;
put 'KXtyZXR1cm4gUj8vLU1NTS0vLnRlc3Qoeik/bVtSLm1vbnRoKCldOnhbUi5tb250aCgpXTp4fSxtb250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRp'@;
put 'ZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6bGUs'@;
put 'bG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3Zp'@;
put 'ZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0g'@;
put 'W2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9'@;
put 'LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZl'@;
put 'VGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEg'@;
put 'c2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MCxkb3k6NH0saW52YWxpZERhdGU6'@;
put 'IkZlY2hhIGludlx4ZTFsaWRhIn0pfShGKDE2Njc2KSl9LDQ0OTM4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxt'@;
put 'PSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxsZT1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLE09'@;
put 'L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92'@;
put 'XC4/fGRpY1wuPykvaTthZS5kZWZpbmVMb2NhbGUoImVzLXVzIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0'@;
put 'aW9uKFIseil7cmV0dXJuIFI/Ly1NTU0tLy50ZXN0KHopP21bUi5tb250aCgpXTp4W1IubW9udGgoKV06eH0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJlZ2V4Ok0sbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0'@;
put 'b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1Bh'@;
put 'cnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5f'@;
put 'anVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJE'@;
put 'IFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/'@;
put 'InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9'@;
put 'LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxz'@;
put 'ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBk'@;
put 'XHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MCxkb3k6'@;
put 'Nn19KX0oRigxNjY3NikpfSwyMTk1NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJy'@;
put 'X21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksbGU9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxNPS9eKGVuZXJvfGZlYnJlcm98'@;
put 'bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7YWUu'@;
put 'ZGVmaW5lTG9jYWxlKCJlcyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihSLHope3JldHVybiBSPy8t'@;
put 'TU1NLS8udGVzdCh6KT9tW1IubW9udGgoKV06eFtSLm1vbnRoKCldOnh9LG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJl'@;
put 'fG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFy'@;
put 'c2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExM'@;
put 'TDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5j'@;
put 'dGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJb'@;
put 'YXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6'@;
put 'ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIl'@;
put 'ZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhl'@;
put 'MWxpZGEifSl9KEYoMTY2NzYpKX0sMTE0NTM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e3M6WyJtXHhmNW5lIHNla3VuZGkiLCJtXHhmNW5pIHNla3VuZCIsInBhYXIgc2VrdW5kaXQiXSxzczpbbGUrInNl'@;
put 'a3VuZGkiLGxlKyJzZWt1bmRpdCJdLG06WyJceGZjaGUgbWludXRpIiwiXHhmY2tzIG1pbnV0Il0sbW06W2xlKyIgbWludXRpIixsZSsiIG1pbnV0aXQiXSxoOlsiXHhmY2hlIHR1bm5pIiwidHVuZCBhZWdhIiwiXHhmY2tzIHR1bmQiXSxoaDpbbGUrIiB0dW5uaSIsbGUrIiB0dW5kaSJdLGQ6'@;
put 'WyJceGZjaGUgcFx4ZTRldmEiLCJceGZja3MgcFx4ZTRldiJdLE06WyJrdXUgYWphIiwia3V1IGFlZ2EiLCJceGZja3Mga3V1Il0sTU06W2xlKyIga3V1IixsZSsiIGt1dWQiXSx5OlsiXHhmY2hlIGFhc3RhIiwiYWFzdGEiLCJceGZja3MgYWFzdGEiXSx5eTpbbGUrIiBhYXN0YSIsbGUrIiBh'@;
put 'YXN0YXQiXX07cmV0dXJuIE0/eltPXVsyXT96W09dWzJdOnpbT11bMV06Uj96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJldCIse21vbnRoczoiamFhbnVhcl92ZWVicnVhcl9tXHhlNHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b29iZXJf'@;
put 'bm92ZW1iZXJfZGV0c2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYWFuX3ZlZWJyX21ceGU0cnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJwXHhmY2hhcFx4ZTRldl9lc21hc3BceGU0ZXZfdGVpc2lwXHhl'@;
put 'NGV2X2tvbG1hcFx4ZTRldl9uZWxqYXBceGU0ZXZfcmVlZGVfbGF1cFx4ZTRldiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIs'@;
put 'TFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVFx4ZTRuYSxdIExUIixuZXh0RGF5OiJbSG9tbWUsXSBMVCIsbmV4dFdl'@;
put 'ZWs6IltKXHhlNHJnbWluZV0gZGRkZCBMVCIsbGFzdERheToiW0VpbGUsXSBMVCIsbGFzdFdlZWs6IltFZWxtaW5lXSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNHJhc3QiLHBhc3Q6IiVzIHRhZ2FzaSIsczp4LHNzOngsbTp4LG1tOngsaDp4'@;
put 'LGhoOngsZDp4LGRkOiIlZCBwXHhlNGV2YSIsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw0NDY5NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUp'@;
put 'eyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImV1Iix7bW9udGhzOiJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidXJ0'@;
put 'Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0'@;
put 'YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImlnX2FsX2FyX2F6X29nX29sX2xyIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixM'@;
put 'VFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0iLExMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLExMTEw6ImRkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixsOiJZWVlZLU0tRCIsbGw6IllZWVlba29dIE1N'@;
put 'TSBEW2FdIixsbGw6IllZWVlba29dIE1NTSBEW2FdIEhIOm1tIixsbGxsOiJkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltnYXVyXSBMVFtldGFuXSIsbmV4dERheToiW2JpaGFyXSBMVFtldGFuXSIsbmV4dFdlZWs6ImRkZGQgTFRbZXRhbl0iLGxh'@;
put 'c3REYXk6IlthdHpvXSBMVFtldGFuXSIsbGFzdFdlZWs6IlthdXJyZWtvXSBkZGRkIExUW2V0YW5dIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYXJydSIscGFzdDoiZHVlbGEgJXMiLHM6InNlZ3VuZG8gYmF0enVrIixzczoiJWQgc2VndW5kbyIsbToibWludXR1'@;
put 'IGJhdCIsbW06IiVkIG1pbnV0dSIsaDoib3JkdSBiYXQiLGhoOiIlZCBvcmR1IixkOiJlZ3VuIGJhdCIsZGQ6IiVkIGVndW4iLE06ImhpbGFiZXRlIGJhdCIsTU06IiVkIGhpbGFiZXRlIix5OiJ1cnRlIGJhdCIseXk6IiVkIHVydGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9'@;
put 'XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNTI5MDA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDZmMSIsMjoiXHUwNmYyIiwzOiJcdTA2ZjMiLDQ6Ilx1MDZmNCIsNToiXHUwNmY1Iiw2'@;
put 'OiJcdTA2ZjYiLDc6Ilx1MDZmNyIsODoiXHUwNmY4Iiw5OiJcdTA2ZjkiLDA6Ilx1MDZmMCJ9LG09eyJcdTA2ZjEiOiIxIiwiXHUwNmYyIjoiMiIsIlx1MDZmMyI6IjMiLCJcdTA2ZjQiOiI0IiwiXHUwNmY1IjoiNSIsIlx1MDZmNiI6IjYiLCJcdTA2ZjciOiI3IiwiXHUwNmY4IjoiOCIsIlx1'@;
put 'MDZmOSI6IjkiLCJcdTA2ZjAiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJmYSIse21vbnRoczoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMx'@;
put 'XHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUw'@;
put 'NjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFc'@;
put 'dTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUw'@;
put 'NjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2'@;
put 'Y2NcdTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2'@;
put 'NDdfXHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4'@;
put 'XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYz'@;
put 'NFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDYyY19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQ'@;
put 'YXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2NDJc'@;
put 'dTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMXxcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4vXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdc'@;
put 'dTA2MzEvLnRlc3QoTSl9LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwxMj8iXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEiOiJcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSJ9LGNhbGVu'@;
put 'ZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ1XHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2NDFcdTA2MzFcdTA2MmZcdTA2MjcgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzM1x1'@;
put 'MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2Y2NcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY3ZVx1MDZjY1x1MDYzNF0gW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLHNhbWVF'@;
put 'bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyZlx1MDYzMSAlcyIscGFzdDoiJXMgXHUwNjdlXHUwNmNjXHUwNjM0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUw'@;
put 'NjQ3IixtOiJcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixoOiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJh'@;
put 'IixkOiJcdTA2Y2NcdTA2YTkgXHUwNjMxXHUwNjQ4XHUwNjMyIixkZDoiJWQgXHUwNjMxXHUwNjQ4XHUwNjMyIixNOiJcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNjQ3IixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNjQ3Iix5OiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5'@;
put 'eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MDZmMC1cdTA2ZjldL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBN'@;
put 'LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwNjQ1LyxvcmRpbmFsOiIlZFx1MDY0NSIsd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDQ5Nzc1OmZ1'@;
put 'bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGpceGU0IHZpaXNpIGt1dXNpIHNlaXRzZW1ceGU0biBrYWhkZWtzYW4geWhkZWtzXHhlNG4iLnNwbGl0KCIgIiksbT1bIm5vbGxhIiwieWhkZW4iLCJrYWhk'@;
put 'ZW4iLCJrb2xtZW4iLCJuZWxqXHhlNG4iLCJ2aWlkZW4iLCJrdXVkZW4iLHhbN10seFs4XSx4WzldXTtmdW5jdGlvbiBsZShSLHosSyxJKXt2YXIgaz0iIjtzd2l0Y2goSyl7Y2FzZSJzIjpyZXR1cm4gST8ibXV1dGFtYW4gc2VrdW5uaW4iOiJtdXV0YW1hIHNla3VudGkiO2Nhc2Uic3MiOms9'@;
put 'ST8ic2VrdW5uaW4iOiJzZWt1bnRpYSI7YnJlYWs7Y2FzZSJtIjpyZXR1cm4gST8ibWludXV0aW4iOiJtaW51dXR0aSI7Y2FzZSJtbSI6az1JPyJtaW51dXRpbiI6Im1pbnV1dHRpYSI7YnJlYWs7Y2FzZSJoIjpyZXR1cm4gST8idHVubmluIjoidHVudGkiO2Nhc2UiaGgiOms9ST8idHVubmlu'@;
put 'IjoidHVudGlhIjticmVhaztjYXNlImQiOnJldHVybiBJPyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNCI7Y2FzZSJkZCI6az1JPyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNFx4ZTQiO2JyZWFrO2Nhc2UiTSI6cmV0dXJuIEk/Imt1dWthdWRlbiI6Imt1dWthdXNpIjtjYXNlIk1NIjpr'@;
put 'PUk/Imt1dWthdWRlbiI6Imt1dWthdXR0YSI7YnJlYWs7Y2FzZSJ5IjpyZXR1cm4gST8idnVvZGVuIjoidnVvc2kiO2Nhc2UieXkiOms9ST8idnVvZGVuIjoidnVvdHRhIn1yZXR1cm4gZnVuY3Rpb24gTShSLHope3JldHVybiBSPDEwP3o/bVtSXTp4W1JdOlJ9KFIsSSkrIiAiK2t9YWUuZGVm'@;
put 'aW5lTG9jYWxlKCJmaSIse21vbnRoczoidGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc1x4ZTRrdXVfaGVpblx4ZTRrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InRhbW1p'@;
put 'X2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXNceGU0X2hlaW5ceGU0X2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWkiLnNwbGl0'@;
put 'KCJfIiksd2Vla2RheXNTaG9ydDoic3VfbWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBN'@;
put 'TU1NW3RhXSBZWVlZIixMTEw6IkRvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tIixMTExMOiJkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsbDoiRC5NLllZWVkiLGxsOiJEbyBNTU0gWVlZWSIsbGxsOiJEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0iLGxsbGw6ImRkZCwg'@;
put 'RG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt0XHhlNG5ceGU0XHhlNG5dIFtrbG9dIExUIixuZXh0RGF5OiJbaHVvbWVubmFdIFtrbG9dIExUIixuZXh0V2VlazoiZGRkZCBba2xvXSBMVCIsbGFzdERheToiW2VpbGVuXSBba2xvXSBMVCIsbGFzdFdlZWs6'@;
put 'Ilt2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0XHhlNHN0XHhlNCIscGFzdDoiJXMgc2l0dGVuIixzOmxlLHNzOmxlLG06bGUsbW06bGUsaDpsZSxoaDpsZSxkOmxlLGRkOmxlLE06bGUsTU06bGUseTpsZSx5eTps'@;
put 'ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDY0MjgyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZmlsIix7bW9udGhz'@;
put 'OiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9MdV9NYV9N'@;
put 'aV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbSJ9LGNhbGVuZGFy'@;
put 'OntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJMVCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkIixzYW1lRWxzZToiTCJ9LHJl'@;
put 'bGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNhbmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixoaDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJh'@;
put 'dyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihtKXtyZXR1cm4gbX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2'@;
put 'NzYpKX0sODQyMzY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJmbyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJceGVkbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9k'@;
put 'ZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbVx4ZTFuYWRhZ3VyX3RceGZkc2RhZ3VyX21pa3VkYWd1cl9oXHhmM3NkYWd1cl9mclx4'@;
put 'ZWRnZ2phZGFndXJfbGV5Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VuX21ceGUxbl90XHhmZHNfbWlrX2hceGYzc19mclx4ZWRfbGV5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlMV90XHhmZF9taV9oXHhmM19mcl9sZSIuc3BsaXQoIl8iKSxsb25nRGF0'@;
put 'ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZCBkYWcga2wuXSBMVCIsbmV4'@;
put 'dERheToiW1x4Y2QgbW9yZ2luIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhjZCBnalx4ZTFyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRceGYwc3R1XSBkZGRkIFtrbF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InVtICVz'@;
put 'IixwYXN0OiIlcyBzXHhlZFx4ZjBhbmkiLHM6ImZceGUxIHNla3VuZCIsc3M6IiVkIHNla3VuZGlyIixtOiJlaW4gbWludXR0dXIiLG1tOiIlZCBtaW51dHRpciIsaDoiZWluIHRceGVkbWkiLGhoOiIlZCB0XHhlZG1hciIsZDoiZWluIGRhZ3VyIixkZDoiJWQgZGFnYXIiLE06ImVpbiBtXHhl'@;
put 'MW5hXHhmMHVyIixNTToiJWQgbVx4ZTFuYVx4ZjBpciIseToiZWl0dCBceGUxciIseXk6IiVkIFx4ZTFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDkyODMwOmZ1bmN0aW9uKGF0LEll'@;
put 'LEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZnItY2EiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQo'@;
put 'Il8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1'@;
put 'ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25n'@;
put 'RGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhl'@;
put 'MF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixw'@;
put 'YXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMi'@;
put 'LHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIG0rKDE9PT1tPyJl'@;
put 'ciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG0rKDE9PT1tPyJyZSI6ImUiKX19fSl9KEYoMTY2NzYpKX0sMjE0MTI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJmci1jaCIse21vbnRoczoiamFudmllcl9mXHhlOXZy'@;
put 'aWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25v'@;
put 'di5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2Ft'@;
put 'LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1N'@;
put 'TU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUw'@;
put 'XSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1p'@;
put 'bnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9u'@;
put 'KG0sbGUpe3N3aXRjaChsZSl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gbSsoMT09PW0/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsoMT09PW0/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2'@;
put 'NzYpKX0sODkzNjE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIGxlPS8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1aWxcLj98YW9ceGZidHxzZXB0XC4/fG9jdFwuP3xub3ZcLj98ZFx4ZTljXC4/fGphbnZpZXJ8Zlx4'@;
put 'ZTl2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW9ceGZidHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkXHhlOWNlbWJyZSkvaSxNPVsvXmphbnYvaSwvXmZceGU5dnIvaSwvXm1hcnMvaSwvXmF2ci9pLC9ebWFpL2ksL15qdWluL2ksL15qdWlsL2ksL15hb1x4ZmJ0L2ks'@;
put 'L15zZXB0L2ksL15vY3QvaSwvXm5vdi9pLC9eZFx4ZTljL2ldO2FlLmRlZmluZUxvY2FsZSgiZnIiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3Bs'@;
put 'aXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6bGUsbW9udGhzU2hvcnRSZWdleDpsZSxtb250aHNTdHJpY3RSZWdleDovXihqYW52'@;
put 'aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/'@;
put 'fGFvXHhmYnR8c2VwdFwuP3xvY3RcLj98bm92XC4/fGRceGU5Y1wuPykvaSxtb250aHNQYXJzZTpNLGxvbmdNb250aHNQYXJzZTpNLHNob3J0TW9udGhzUGFyc2U6TSx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgi'@;
put 'XyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6'@;
put 'IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhl'@;
put 'MF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVz'@;
put 'IHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsdzoidW5lIHNlbWFpbmUiLHd3OiIlZCBzZW1haW5lcyIsTToidW4gbW9pcyIsTU06IiVk'@;
put 'IG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnwpLyxvcmRpbmFsOmZ1bmN0aW9uKFIseil7c3dpdGNoKHope2Nhc2UiRCI6cmV0dXJuIFIrKDE9PT1SPyJlciI6IiIpO2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRERE'@;
put 'IjpjYXNlImQiOnJldHVybiBSKygxPT09Uj8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBSKygxPT09Uj8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2Njk4NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgeD0iamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtPSJqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTthZS5kZWZpbmVMb2NhbGUoImZ5Iix7bW9u'@;
put 'dGhzOiJqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVueV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKE0sTyl7cmV0dXJuIE0/Ly1NTU0tLy50ZXN0KE8pP21b'@;
put 'TS5tb250aCgpXTp4W00ubW9udGgoKV06eH0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic2kuX21vLl90aS5fd28uX3RvLl9mci5fc28u'@;
put 'Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTaV9Nb19UaV9Xb19Ub19Gcl9TbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1N'@;
put 'TSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltoam9lZCBvbV0gTFQiLG5leHREYXk6Ilttb2FybiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltqdXN0ZXIgb21dIExUIixsYXN0V2VlazoiW1x4'@;
put 'ZjRmclx4ZmJuZV0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvZXIgJXMiLHBhc3Q6IiVzIGx5biIsczoiaW4gcGVhciBzZWtvbmRlbiIsc3M6IiVkIHNla29uZGVuIixtOiJpZW4gbWluXHhmYXQiLG1tOiIlZCBtaW51dGVuIixoOiJpZW4gb2Vy'@;
put 'ZSIsaGg6IiVkIG9lcmVuIixkOiJpZW4gZGVpIixkZDoiJWQgZGFnZW4iLE06ImllbiBtb2FubmUiLE1NOiIlZCBtb2FubmVuIix5OiJpZW4gamllciIseXk6IiVkIGppZXJyZW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oTSl7'@;
put 'cmV0dXJuIE0rKDE9PT1NfHw4PT09TXx8TT49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDkzOTYxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZ2EiLHttb250aHM6WyJFYW5ceGUx'@;
put 'aXIiLCJGZWFiaHJhIiwiTVx4ZTFydGEiLCJBaWJyZVx4ZTFuIiwiQmVhbHRhaW5lIiwiTWVpdGhlYW1oIiwiSVx4ZmFpbCIsIkxceGZhbmFzYSIsIk1lXHhlMW4gRlx4ZjNtaGFpciIsIkRlaXJlYWRoIEZceGYzbWhhaXIiLCJTYW1oYWluIiwiTm9sbGFpZyJdLG1vbnRoc1Nob3J0OlsiRWFu'@;
put 'IiwiRmVhYmgiLCJNXHhlMXJ0IiwiQWliIiwiQmVhbCIsIk1laXRoIiwiSVx4ZmFpbCIsIkxceGZhbiIsIk0uRi4iLCJELkYuIiwiU2FtaCIsIk5vbGwiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRFx4ZTkgRG9taG5haWdoIiwiRFx4ZTkgTHVhaW4iLCJEXHhlOSBNXHhlMWly'@;
put 'dCIsIkRceGU5IENceGU5YWRhb2luIiwiRFx4ZTlhcmRhb2luIiwiRFx4ZTkgaEFvaW5lIiwiRFx4ZTkgU2F0aGFpcm4iXSx3ZWVrZGF5c1Nob3J0OlsiRG9taCIsIkx1YW4iLCJNXHhlMWlydCIsIkNceGU5YWQiLCJEXHhlOWFyIiwiQW9pbmUiLCJTYXRoIl0sd2Vla2RheXNNaW46WyJEbyIs'@;
put 'Ikx1IiwiTVx4ZTEiLCJDXHhlOSIsIkRceGU5IiwiQSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDpt'@;
put 'bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSW5uaXUgYWddIExUIixuZXh0RGF5OiJbQW1ceGUxcmFjaCBhZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthZ10gTFQiLGxhc3REYXk6IltJbm5ceGU5IGFnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCIsc2FtZUVsc2U6Ikwi'@;
put 'fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSAlcyIscGFzdDoiJXMgXHhmMyBzaGluIixzOiJjXHhmYXBsYSBzb2ljaW5kIixzczoiJWQgc29pY2luZCIsbToiblx4ZjNpbVx4ZTlhZCIsbW06IiVkIG5ceGYzaW1ceGU5YWQiLGg6InVhaXIgYW4gY2hsb2lnIixoaDoiJWQgdWFpciBhbiBjaGxv'@;
put 'aWciLGQ6ImxceGUxIixkZDoiJWQgbFx4ZTEiLE06Im1ceGVkIixNTToiJWQgbVx4ZWRvbm5hIix5OiJibGlhaW4iLHl5OiIlZCBibGlhaW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKHope3JldHVybiB6KygxPT09ej8iZCI6'@;
put 'eiUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw3ODg0OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImdkIix7bW9udGhzOlsiQW0gRmFvaWxsZWFjaCIsIkFuIEdlYXJyYW4iLCJB'@;
put 'bSBNXHhlMHJ0IiwiQW4gR2libGVhbiIsIkFuIENceGU4aXRlYW4iLCJBbiB0LVx4ZDJnbWhpb3MiLCJBbiB0LUl1Y2hhciIsIkFuIExceGY5bmFzdGFsIiwiQW4gdC1TdWx0YWluIiwiQW4gRFx4ZTBtaGFpciIsIkFuIHQtU2FtaGFpbiIsIkFuIERceGY5YmhsYWNoZCJdLG1vbnRoc1Nob3J0'@;
put 'OlsiRmFvaSIsIkdlYXIiLCJNXHhlMHJ0IiwiR2libCIsIkNceGU4aXQiLCJceGQyZ21oIiwiSXVjaCIsIkxceGY5biIsIlN1bHQiLCJEXHhlMG1oIiwiU2FtaCIsIkRceGY5YmgiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRGlkXHhmMm1obmFpY2giLCJEaWx1YWluIiwiRGlt'@;
put 'XHhlMGlydCIsIkRpY2lhZGFpbiIsIkRpYXJkYW9pbiIsIkRpaGFvaW5lIiwiRGlzYXRoYWlybmUiXSx3ZWVrZGF5c1Nob3J0OlsiRGlkIiwiRGlsIiwiRGltIiwiRGljIiwiRGlhIiwiRGloIiwiRGlzIl0sd2Vla2RheXNNaW46WyJEXHhmMiIsIkx1IiwiTVx4ZTAiLCJDaSIsIkFyIiwiSGEi'@;
put 'LCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0FuLWRpdWdo'@;
put 'IGFpZ10gTFQiLG5leHREYXk6IltBLW1ceGUwaXJlYWNoIGFpZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthaWddIExUIixsYXN0RGF5OiJbQW4tZFx4ZTggYWlnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0'@;
put 'dXJlOiJhbm4gYW4gJXMiLHBhc3Q6ImJobyBjaGlvbm4gJXMiLHM6ImJlYWdhbiBkaW9nYW4iLHNzOiIlZCBkaW9nYW4iLG06Im1pb25haWQiLG1tOiIlZCBtaW9uYWlkZWFuIixoOiJ1YWlyIixoaDoiJWQgdWFpcmVhbiIsZDoibGF0aGEiLGRkOiIlZCBsYXRoYSIsTToibVx4ZWNvcyIsTU06'@;
put 'IiVkIG1ceGVjb3NhbiIseToiYmxpYWRobmEiLHl5OiIlZCBibGlhZGhuYSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oeil7cmV0dXJuIHorKDE9PT16PyJkIjp6JTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0'@;
put 'fX0pfShGKDE2Njc2KSl9LDM0MjczOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZ2wiLHttb250aHM6InhhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dVx4ZjFvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1'@;
put 'YnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHVceGYxLl94dWwuX2Fnby5fc2V0Ll9vdXQuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkb21pbmdvX2x1bnNf'@;
put 'bWFydGVzX21ceGU5cmNvcmVzX3hvdmVzX3ZlbnJlc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbVx4ZTlyLl94b3YuX3Zlbi5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbVx4ZTlfeG9fdmVfc1x4ZTEiLnNw'@;
put 'bGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0g'@;
put 'TU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3hlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxXHhlMSAiKygxIT09dGhpcy5ob3Vycygp'@;
put 'PyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgWyIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbb250ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxIjoiYSIpKyJd'@;
put 'IExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW29dIGRkZGQgW3Bhc2FkbyAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuIDA9PT1tLmluZGV4T2YoInVuIik/'@;
put 'Im4iK206ImVuICIrbX0scGFzdDoiaGFpICVzIixzOiJ1bnMgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5oYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLE06InVuIG1lcyIsTU06'@;
put 'IiVkIG1lc2VzIix5OiJ1biBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNDA2MjM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNl'@;
put 'IHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e3M6WyJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5MmZcdTA5M2UgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIiwiXHUwOTI1XHUwOTRiXHUwOTIxXHUwOTQ3IFx1MDkzOFx1MDk0'@;
put 'NVx1MDkxNVx1MDkwMlx1MDkyMSJdLHNzOltsZSsiIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxtOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDky'@;
put 'M1x1MDkxZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDJcdTA5MWYiXSxtbTpbbGUrIiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLGxlKyIgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUw'@;
put 'OTAyIl0saDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwIl0saGg6W2xlKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMiJdLGQ6'@;
put 'WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDk0MFx1MDkzOCJdLGRkOltsZSsiIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MjZcdTA5NDBcdTA5Mzgi'@;
put 'XSxNOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGIiXSxNTTpbbGUrIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5'@;
put 'MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjhcdTA5NDAiLGxlKyIgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTQ3Il0seTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1'@;
put 'XHUwOTMwXHUwOTRkXHUwOTM4Il0seXk6W2xlKyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMiJdfTtyZXR1cm4gUj96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxl'@;
put 'KCJnb20tZGV2YSIse21vbnRoczp7c3RhbmRhbG9uZToiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5'@;
put 'NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwXHUwOTMyX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTJmX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdc'@;
put 'dTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0'@;
put 'KCJfIiksZm9ybWF0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJm'@;
put 'XHUwOTNlX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYVx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTQ3XHUwOTJmXHUwOTNlXHUwOTFh'@;
put 'XHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0Mlx1MDkyOFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmXHUwOTNlXHUwOTFh'@;
put 'XHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZc'@;
put 'dTA5M2VfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZSIu'@;
put 'c3BsaXQoIl8iKSxpc0Zvcm1hdDovTU1NTShccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0Ny5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRk'@;
put 'XHUwOTMwXHUwOTQwLl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTExXHUwOTE3Ll9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUw'@;
put 'OTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkwNlx1MDkyZlx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5M2VcdTA5MzBf'@;
put 'XHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5M2ZcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTNl'@;
put 'XHUwOTMwX1x1MDkzNlx1MDk0N1x1MDkyOFx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MDZcdTA5MmZcdTA5MjQuX1x1MDkzOFx1MDk0Ylx1MDkyZS5fXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzLl9cdTA5MmNcdTA5NDFcdTA5MjcuX1x1MDkyY1x1'@;
put 'MDk0ZFx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNC5fXHUwOTM4XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwLl9cdTA5MzZcdTA5NDdcdTA5MjguIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MDZfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTJj'@;
put 'XHUwOTRkXHUwOTMwXHUwOTQ3X1x1MDkzOFx1MDk0MV9cdTA5MzZcdTA5NDciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMVFM6IkEgaDptbTpzcyBbXHUw'@;
put 'OTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTExMTDoiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1t'@;
put 'IFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTJmXHUwOTFjXSBMVCIsbmV4dERheToi'@;
put 'W1x1MDkyYlx1MDkzZVx1MDkzMlx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMl0gTFQiLG5leHRXZWVrOiJbXHUwOTJiXHUwOTQxXHUwOTIxXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmJcdTA5M2VcdTA5'@;
put 'MWZcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBcdTA5MDZcdTA5MjZcdTA5NDBcdTA5MDIiLHM6eCxzczp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6eCxkZDp4LE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1v'@;
put 'bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MDkzNVx1MDk0N1x1MDkzMCkvLG9yZGluYWw6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIkQiPT09TT9sZSsiXHUwOTM1XHUwOTQ3XHUwOTMwIjpsZX0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNFx1'@;
put 'MDk0MHxcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDJ8XHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyfFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0Ny8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGxlLE0pe3JldHVybiAxMj09PWxlJiYobGU9'@;
put 'MCksIlx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI9PT1NP2xlPDQ/bGU6bGUrMTI6Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI9PT1NP2xlOiJcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiPT09TT9sZT4xMj9sZTpsZSsxMjoiXHUwOTM4'@;
put 'XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3Ij09PU0/bGUrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZTw0PyJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAiOmxlPDEyPyJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiOmxlPDE2PyJcdTA5'@;
put 'MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiOmxlPDIwPyJcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDciOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAifX0pfShGKDE2Njc2KSl9LDYyNjk2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBz'@;
put 'dHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXtzOlsidGhvZGRlYSBzZWtvbmRhbW5pIiwidGhvZGRlIHNla29uZCJdLHNzOltsZSsiIHNla29uZGFtbmkiLGxlKyIgc2Vrb25kIl0sbTpbImVrYSBtaW50YW4iLCJlayBtaW51dCJdLG1tOltsZSsiIG1pbnRhbW5pIixsZSsiIG1p'@;
put 'bnRhbSJdLGg6WyJla2Egdm9yYW4iLCJlayB2b3IiXSxoaDpbbGUrIiB2b3JhbW5pIixsZSsiIHZvcmFtIl0sZDpbImVrYSBkaXNhbiIsImVrIGRpcyJdLGRkOltsZSsiIGRpc2FtbmkiLGxlKyIgZGlzIl0sTTpbImVrYSBtaG9pbmVhbiIsImVrIG1ob2lubyJdLE1NOltsZSsiIG1ob2luZWFt'@;
put 'bmkiLGxlKyIgbWhvaW5lIl0seTpbImVrYSB2b3JzYW4iLCJlayB2b3JvcyJdLHl5OltsZSsiIHZvcnNhbW5pIixsZSsiIHZvcnNhbSJdfTtyZXR1cm4gUj96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJnb20tbGF0biIse21vbnRoczp7c3RhbmRhbG9uZToiSmFuZXJfRmVicmVy'@;
put 'X01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05vdmVtYnJfRGV6ZW1iciIuc3BsaXQoIl8iKSxmb3JtYXQ6IkphbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVh'@;
put 'X1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNoZWEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4iLnNw'@;
put 'bGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkaHZhcl9CaXJlc3Rhcl9TdWtyYXJfU29uJ3ZhciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaXQuX1NvbS5fTW9uLl9CdWQuX0JyZS5fU3VrLl9Tb24uIi5zcGxpdCgiXyIp'@;
put 'LHdlZWtkYXlzTWluOiJBaV9TbV9Nb19CdV9Ccl9TdV9TbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW3ZhenRhXSIsTFRTOiJBIGg6bW06c3MgW3ZhenRhXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6'@;
put 'IkQgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW3ZhenRhXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW3ZhenRhXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQWl6XSBMVCIsbmV4dERheToiW0ZhbGVhbV0gTFQiLG5l'@;
put 'eHRXZWVrOiJbRnVkZGxvXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbS2FsXSBMVCIsbGFzdFdlZWs6IltGYXR0bG9dIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBhZGltIixzOngsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOngs'@;
put 'ZGQ6eCxNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcikvLG9yZGluYWw6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIkQiPT09TT9sZSsiZXIiOmxlfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovcmF0aXxzb2thbGxpbXxkb25wYXJh'@;
put 'bXxzYW5qZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGxlLE0pe3JldHVybiAxMj09PWxlJiYobGU9MCksInJhdGkiPT09TT9sZTw0P2xlOmxlKzEyOiJzb2thbGxpbSI9PT1NP2xlOiJkb25wYXJhbSI9PT1NP2xlPjEyP2xlOmxlKzEyOiJzYW5qZSI9PT1NP2xlKzEyOnZvaWQgMH0sbWVyaWRp'@;
put 'ZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU8ND8icmF0aSI6bGU8MTI/InNva2FsbGltIjpsZTwxNj8iZG9ucGFyYW0iOmxlPDIwPyJzYW5qZSI6InJhdGkifX0pfShGKDE2Njc2KSl9LDY2OTI4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4'@;
put 'PXsxOiJcdTBhZTciLDI6Ilx1MGFlOCIsMzoiXHUwYWU5Iiw0OiJcdTBhZWEiLDU6Ilx1MGFlYiIsNjoiXHUwYWVjIiw3OiJcdTBhZWQiLDg6Ilx1MGFlZSIsOToiXHUwYWVmIiwwOiJcdTBhZTYifSxtPXsiXHUwYWU3IjoiMSIsIlx1MGFlOCI6IjIiLCJcdTBhZTkiOiIzIiwiXHUwYWVhIjoi'@;
put 'NCIsIlx1MGFlYiI6IjUiLCJcdTBhZWMiOiI2IiwiXHUwYWVkIjoiNyIsIlx1MGFlZSI6IjgiLCJcdTBhZWYiOiI5IiwiXHUwYWU2IjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiZ3UiLHttb250aHM6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFj'@;
put 'MF9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzFcdTBhODZcdTBhYjBcdTBhYzBfXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZlx1MGFiMl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1'@;
put 'MGFjMVx1MGFiMlx1MGFiZVx1MGE4OF9cdTBhOTFcdTBhOTdcdTBhYjhcdTBhY2RcdTBhOWZfXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYThcdTBhYjVc'@;
put 'dTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZcdTBhYzEuX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFj'@;
put 'ZFx1MGFiMFx1MGFjMS5fXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZi5fXHUwYWFlXHUwYWM3X1x1MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmUuX1x1MGE5MVx1MGE5Ny5fXHUwYWI4XHUwYWFhXHUw'@;
put 'YWNkXHUwYTlmXHUwYWM3Ll9cdTBhOTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBhY2QuX1x1MGFhOFx1MGFiNVx1MGFjNy5fXHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBhYjBcdTBhYjVcdTBhYmZcdTBhYjVcdTBh'@;
put 'YmVcdTBhYjBfXHUwYWI4XHUwYWNiXHUwYWFlXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM1x1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxXHUwYWI1XHUw'@;
put 'YWJlXHUwYWIwX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYWIwXHUwYWI1XHUwYWJmX1x1MGFiOFx1MGFjYlx1MGFhZV9cdTBh'@;
put 'YWVcdTBhODJcdTBhOTdcdTBhYjNfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNkX1x1MGE5N1x1MGFjMVx1MGFiMFx1MGFjMV9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2RcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhYjBfXHUwYWI4XHUwYWNi'@;
put 'X1x1MGFhZVx1MGE4Ml9cdTBhYWNcdTBhYzFfXHUwYTk3XHUwYWMxX1x1MGFiNlx1MGFjMV9cdTBhYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMVFM6IkEgaDptbTpzcyBcdTBhYjVcdTBhYmVc'@;
put 'dTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVc'@;
put 'dTBhOTdcdTBhY2RcdTBhYWZcdTBhYzcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGE4Nlx1MGE5Y10gTFQiLG5leHREYXk6IltcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhOTdcdTBhODdcdTBhOTVcdTBhYmVcdTBhYjJc'@;
put 'dTBhYzddIExUIixsYXN0V2VlazoiW1x1MGFhYVx1MGFiZVx1MGE5Ylx1MGFiMlx1MGFiZV0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGFhZVx1MGFiZSIscGFzdDoiJXMgXHUwYWFhXHUwYWI5XHUwYWM3XHUwYWIyXHUwYWJlIixzOiJcdTBh'@;
put 'ODVcdTBhYWVcdTBhYzFcdTBhOTUgXHUwYWFhXHUwYWIzXHUwYWNiIixzczoiJWQgXHUwYWI4XHUwYWM3XHUwYTk1XHUwYTgyXHUwYWExIixtOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixtbToiJWQgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlm'@;
put 'IixoOiJcdTBhOGZcdTBhOTUgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixoaDoiJWQgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixkOiJcdTBhOGZcdTBhOTUgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixkZDoiJWQgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixNOiJcdTBhOGZcdTBh'@;
put 'OTUgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIixNTToiJWQgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIix5OiJcdTBhOGZcdTBhOTUgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3Iix5eToiJWQgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3In0scHJlcGFyc2U6ZnVuY3Rp'@;
put 'b24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MGFlN1x1MGFlOFx1MGFlOVx1MGFlYVx1MGFlYlx1MGFlY1x1MGFlZFx1MGFlZVx1MGFlZlx1MGFlNl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVu'@;
put 'Y3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwYWIwXHUwYWJlXHUwYWE0fFx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMHxcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjB8XHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1'@;
put 'cm4gMTI9PT1NJiYoTT0wKSwiXHUwYWIwXHUwYWJlXHUwYWE0Ij09PU8/TTw0P006TSsxMjoiXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIj09PU8/TToiXHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwIj09PU8/TT49MTA/TTpNKzEyOiJcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMiPT09Tz9NKzEy'@;
put 'OnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MGFiMFx1MGFiZVx1MGFhNCI6TTwxMD8iXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIjpNPDE3PyJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiOk08MjA/Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI6Ilx1'@;
put 'MGFiMFx1MGFiZVx1MGFhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDI0ODA0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaGUiLHttb250aHM6Ilx1MDVkOVx1MDVlMFx1MDVkNVx1MDVkMFx1MDVlOF9c'@;
put 'dTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWRlXHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVkOVx1MDVkY19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1'@;
put 'ZDVcdTA1ZDJcdTA1ZDVcdTA1ZTFcdTA1ZDhfXHUwNWUxXHUwNWU0XHUwNWQ4XHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVkOFx1MDVkNVx1MDVkMVx1MDVlOF9cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQzXHUwNWU2XHUwNWRlXHUw'@;
put 'NWQxXHUwNWU4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZjNfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVl'@;
put 'MFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWYzX1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVmM19cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZjNfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWYzX1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVmMyIuc3BsaXQo'@;
put 'Il8iKSx3ZWVrZGF5czoiXHUwNWU4XHUwNWQwXHUwNWU5XHUwNWQ1XHUwNWRmX1x1MDVlOVx1MDVlMFx1MDVkOV9cdTA1ZTlcdTA1ZGNcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU4XHUwNWQxXHUwNWQ5XHUwNWUyXHUwNWQ5X1x1MDVkN1x1MDVkZVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlc'@;
put 'dTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQxXHUwNWVhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDVkMFx1MDVmM19cdTA1ZDFcdTA1ZjNfXHUwNWQyXHUwNWYzX1x1MDVkM1x1MDVmM19cdTA1ZDRcdTA1ZjNfXHUwNWQ1XHUwNWYzX1x1MDVlOVx1MDVmMyIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5c01pbjoiXHUwNWQwX1x1MDVkMV9cdTA1ZDJfXHUwNWQzX1x1MDVkNF9cdTA1ZDVfXHUwNWU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIixMTEw6IkQg'@;
put 'W1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToi'@;
put 'W1x1MDVkNFx1MDVkOVx1MDVkNVx1MDVkZCBcdTA1ZDFcdTA1YmVdTFQiLG5leHREYXk6IltcdTA1ZGVcdTA1ZDdcdTA1ZTggXHUwNWQxXHUwNWJlXUxUIixuZXh0V2VlazoiZGRkZCBbXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsbGFzdERheToiW1x1MDVkMFx1MDVlYVx1MDVkZVx1'@;
put 'MDVkNVx1MDVkYyBcdTA1ZDFcdTA1YmVdTFQiLGxhc3RXZWVrOiJbXHUwNWQxXHUwNWQ5XHUwNWQ1XHUwNWRkXSBkZGRkIFtcdTA1ZDRcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDVcdTA1ZGYgXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6'@;
put 'e2Z1dHVyZToiXHUwNWQxXHUwNWUyXHUwNWQ1XHUwNWQzICVzIixwYXN0OiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgJXMiLHM6Ilx1MDVkZVx1MDVlMVx1MDVlNFx1MDVlOCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLHNzOiIlZCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVc'@;
put 'dTA1ZWEiLG06Ilx1MDVkM1x1MDVlN1x1MDVkNCIsbW06IiVkIFx1MDVkM1x1MDVlN1x1MDVkNVx1MDVlYSIsaDoiXHUwNWU5XHUwNWUyXHUwNWQ0IixoaDpmdW5jdGlvbihtKXtyZXR1cm4gMj09PW0/Ilx1MDVlOVx1MDVlMlx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6bSsiIFx1MDVlOVx1'@;
put 'MDVlMlx1MDVkNVx1MDVlYSJ9LGQ6Ilx1MDVkOVx1MDVkNVx1MDVkZCIsZGQ6ZnVuY3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZDlcdTA1ZDVcdTA1ZGVcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm0rIiBcdTA1ZDlcdTA1ZGVcdTA1ZDlcdTA1ZGQifSxNOiJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1'@;
put 'ZTkiLE1NOmZ1bmN0aW9uKG0pe3JldHVybiAyPT09bT8iXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWQ5XHUwNWRkIjptKyIgXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWRkIn0seToiXHUwNWU5XHUwNWUwXHUwNWQ0Iix5eTpmdW5jdGlvbihtKXtyZXR1cm4g'@;
put 'Mj09PW0/Ilx1MDVlOVx1MDVlMFx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6bSUxMD09MCYmMTAhPT1tP20rIiBcdTA1ZTlcdTA1ZTBcdTA1ZDQiOm0rIiBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZGQifX0sbWVyaWRpZW1QYXJzZTovXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZGNc'@;
put 'dTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1'@;
put 'ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4fFx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEvaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybi9eKFx1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUw'@;
put 'NWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEpJC8udGVzdChtKX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTw1PyJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVc'@;
put 'dTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjptPDEwPyJcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOm08MTI/TT8nXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNic6Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1'@;
put 'ZDlcdTA1ZDlcdTA1ZGQiOm08MTg/TT8nXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNic6Ilx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOiJcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEifX0pfShGKDE2Njc2KSl9LDIz'@;
put 'MDE1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYi'@;
put 'fSxtPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9LGxlPVsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJi'@;
put 'XHUwOTNjXHUwOTMwfFx1MDkyYlx1MDkzMC9pLC9eXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUwOTFjXHUwOTQyXHUwOTI4L2ksL15cdTA5MWNcdTA5NDFcdTA5MzIvaSwvXlx1'@;
put 'MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyfFx1MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzV8XHUwOTI4XHUwOTM1XHUwOTAyL2ksL15cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJ8XHUwOTI2'@;
put 'XHUwOTNmXHUwOTM4L2ldO2FlLmRlZmluZUxvY2FsZSgiaGkiLHttb250aHM6e2Zvcm1hdDoiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJh'@;
put 'XHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUw'@;
put 'OTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwOTFjXHUwOTI4XHUwOTM1XHUw'@;
put 'OTMwXHUwOTQwX1x1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNl'@;
put 'XHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5'@;
put 'MzhcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDkzY1x1MDkzMC5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1'@;
put 'MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkwNVx1MDkxNy5fXHUwOTM4XHUwOTNmXHUwOTI0Ll9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIuX1x1MDkyOFx1MDkzNS5fXHUwOTI2XHUwOTNmXHUwOTM4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1'@;
put 'XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0'@;
put 'Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJc'@;
put 'dTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyX1x1MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1'@;
put 'MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBIGg6bW06c3MgXHUwOTJjXHUwOTFjXHUwOTQ3IixMOiJERC9N'@;
put 'TS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0sbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9u'@;
put 'dGhzUGFyc2U6Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUw'@;
put 'OTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzUvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOC9pXSxtb250aHNSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5'@;
put 'MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJh'@;
put 'XHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5Mzhc'@;
put 'dTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDky'@;
put 'Y1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUw'@;
put 'OTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1'@;
put 'MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5'@;
put 'MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDky'@;
put 'Y1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUw'@;
put 'OTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8p'@;
put 'L2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1'@;
put 'MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOD98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0P3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNc'@;
put 'dTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyND9cLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5'@;
put 'NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwPykvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1'@;
put 'MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdc'@;
put 'Lj98XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkxNVx1MDkzMl0gTFQi'@;
put 'LG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJhXHUwOTNmXHUwOTFiXHUwOTMyXHUwOTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOTJlXHUwOTQ3XHUwOTAyIixwYXN0'@;
put 'OiIlcyBcdTA5MmFcdTA5MzlcdTA5MzJcdTA5NDciLHM6Ilx1MDkxNVx1MDk0MVx1MDkxYiBcdTA5MzlcdTA5NDAgXHUwOTE1XHUwOTRkXHUwOTM3XHUwOTIzIixzczoiJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxIixtOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4'@;
put 'XHUwOTFmIixtbToiJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixoOiJcdTA5MGZcdTA5MTUgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTNlIixoaDoiJWQgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTQ3IixkOiJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTI4IixkZDoiJWQgXHUwOTI2'@;
put 'XHUwOTNmXHUwOTI4IixNOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3IixNTToiJWQgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3Iix5OiJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3Iix5eToiJWQgXHUwOTM1XHUwOTMwXHUw'@;
put 'OTRkXHUwOTM3In0scHJlcGFyc2U6ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbih6KXtyZXR1cm4gbVt6XX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFIp'@;
put 'e3JldHVybiBSLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oeil7cmV0dXJuIHhbel19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0fFx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOXxcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzB8XHUwOTM2XHUwOTNlXHUwOTJlLyxtZXJp'@;
put 'ZGllbUhvdXI6ZnVuY3Rpb24oUix6KXtyZXR1cm4gMTI9PT1SJiYoUj0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0Ij09PXo/Ujw0P1I6UisxMjoiXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5Ij09PXo/UjoiXHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwIj09PXo/Uj49MTA/UjpSKzEyOiJc'@;
put 'dTA5MzZcdTA5M2VcdTA5MmUiPT09ej9SKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oUix6LEspe3JldHVybiBSPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNCI6UjwxMD8iXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5IjpSPDE3PyJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzAiOlI8'@;
put 'MjA/Ilx1MDkzNlx1MDkzZVx1MDkyZSI6Ilx1MDkzMFx1MDkzZVx1MDkyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDE3MTM0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPKXt2YXIgUj1sZSsiICI7c3dp'@;
put 'dGNoKE8pe2Nhc2Uic3MiOnJldHVybiBSKygxPT09bGU/InNla3VuZGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gTT8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gUisoMT09PWxlPyJtaW51'@;
put 'dGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0dXJuIE0/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gUisoMT09PWxlPyJzYXQiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/InNhdGEiOiJzYXRpIik7Y2FzZSJk'@;
put 'ZCI6cmV0dXJuIFIrKDE9PT1sZT8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBSKygxPT09bGU/Im1qZXNlYyI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gUisoMT09PWxlPyJnb2RpbmEiOjI9PT1sZXx8Mz09PWxlfHw0'@;
put 'PT09bGU/ImdvZGluZSI6ImdvZGluYSIpfX1hZS5kZWZpbmVMb2NhbGUoImhyIix7bW9udGhzOntmb3JtYXQ6InNpamVcdTAxMGRuamFfdmVsamFcdTAxMGRlX29cdTAxN2V1amthX3RyYXZuamFfc3ZpYm5qYV9saXBuamFfc3JwbmphX2tvbG92b3phX3J1am5hX2xpc3RvcGFkYV9zdHVkZW5v'@;
put 'Z2FfcHJvc2luY2EiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2lqZVx1MDEwZGFual92ZWxqYVx1MDEwZGFfb1x1MDE3ZXVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3NpbmFjIi5zcGxpdCgiXyIpfSxtb250aHNT'@;
put 'aG9ydDoic2lqLl92ZWxqLl9vXHUwMTdldS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9rb2wuX3J1ai5fbGlzLl9zdHUuX3Byby4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19w'@;
put 'ZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU0gWVlZWSIsTExMOiJEbyBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRG8gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0'@;
put 'RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQi'@;
put 'O2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltwcm9cdTAxNjFsdV0gW25lZGplbGp1XSBbdV0g'@;
put 'TFQiO2Nhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVs'@;
put 'c2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOiJkYW4iLGRkOngsTToibWplc2VjIixNTTp4LHk6ImdvZGludSIseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7'@;
put 'MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDUwNjcwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJ2YXNceGUxcm5hcCBoXHhlOXRmXHUwMTUxbiBrZWRkZW4gc3plcmRceGUxbiBjc1x4ZmN0'@;
put 'XHhmNnJ0XHhmNmtceGY2biBwXHhlOW50ZWtlbiBzem9tYmF0b24iLnNwbGl0KCIgIik7ZnVuY3Rpb24gbShPLFIseixLKXt2YXIgST1PO3N3aXRjaCh6KXtjYXNlInMiOnJldHVybiBLfHxSPyJuXHhlOWhceGUxbnkgbVx4ZTFzb2RwZXJjIjoiblx4ZTloXHhlMW55IG1ceGUxc29kcGVyY2Ui'@;
put 'O2Nhc2Uic3MiOnJldHVybiBJKyhLfHxSKT8iIG1ceGUxc29kcGVyYyI6IiBtXHhlMXNvZHBlcmNlIjtjYXNlIm0iOnJldHVybiJlZ3kiKyhLfHxSPyIgcGVyYyI6IiBwZXJjZSIpO2Nhc2UibW0iOnJldHVybiBJKyhLfHxSPyIgcGVyYyI6IiBwZXJjZSIpO2Nhc2UiaCI6cmV0dXJuImVneSIr'@;
put 'KEt8fFI/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImhoIjpyZXR1cm4gSSsoS3x8Uj8iIFx4ZjNyYSI6IiBceGYzclx4ZTFqYSIpO2Nhc2UiZCI6cmV0dXJuImVneSIrKEt8fFI/IiBuYXAiOiIgbmFwamEiKTtjYXNlImRkIjpyZXR1cm4gSSsoS3x8Uj8iIG5hcCI6IiBuYXBqYSIp'@;
put 'O2Nhc2UiTSI6cmV0dXJuImVneSIrKEt8fFI/IiBoXHhmM25hcCI6IiBoXHhmM25hcGphIik7Y2FzZSJNTSI6cmV0dXJuIEkrKEt8fFI/IiBoXHhmM25hcCI6IiBoXHhmM25hcGphIik7Y2FzZSJ5IjpyZXR1cm4iZWd5IisoS3x8Uj8iIFx4ZTl2IjoiIFx4ZTl2ZSIpO2Nhc2UieXkiOnJldHVy'@;
put 'biBJKyhLfHxSPyIgXHhlOXYiOiIgXHhlOXZlIil9cmV0dXJuIiJ9ZnVuY3Rpb24gbGUoTyl7cmV0dXJuKE8/IiI6IlttXHhmYWx0XSAiKSsiWyIreFt0aGlzLmRheSgpXSsiXSBMVFsta29yXSJ9YWUuZGVmaW5lTG9jYWxlKCJodSIse21vbnRoczoiamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbVx4'@;
put 'ZTFyY2l1c19ceGUxcHJpbGlzX21ceGUxanVzX2pceGZhbml1c19qXHhmYWxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0XHhmM2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21ceGUxcmMuX1x4ZTFwci5fbVx4ZTFqLl9qXHhmYW4u'@;
put 'X2pceGZhbC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoidmFzXHhlMXJuYXBfaFx4ZTl0Zlx1MDE1MV9rZWRkX3N6ZXJkYV9jc1x4ZmN0XHhmNnJ0XHhmNmtfcFx4ZTludGVrX3N6b21iYXQiLnNwbGl0KCJfIiks'@;
put 'd2Vla2RheXNTaG9ydDoidmFzX2hceGU5dF9rZWRkX3N6ZV9jc1x4ZmN0X3BceGU5bl9zem8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InZfaF9rX3N6ZV9jc19wX3N6byIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiWVlZWS5NTS5ERC4i'@;
put 'LExMOiJZWVlZLiBNTU1NIEQuIixMTEw6IllZWVkuIE1NTU0gRC4gSDptbSIsTExMTDoiWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tIn0sbWVyaWRpZW1QYXJzZTovZGV8ZHUvaSxpc1BNOmZ1bmN0aW9uKE8pe3JldHVybiJ1Ij09PU8uY2hhckF0KDEpLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVt'@;
put 'OmZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gTzwxMj8hMD09PXo/ImRlIjoiREUiOiEwPT09ej8iZHUiOiJEVSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbWFdIExUWy1rb3JdIixuZXh0RGF5OiJbaG9sbmFwXSBMVFsta29yXSIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gbGUuY2FsbCh0aGlz'@;
put 'LCEwKX0sbGFzdERheToiW3RlZ25hcF0gTFRbLWtvcl0iLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIGxlLmNhbGwodGhpcywhMSl9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIG1ceGZhbHZhIixwYXN0OiIlcyIsczptLHNzOm0sbSxtbTptLGg6bSxoaDptLGQ6'@;
put 'bSxkZDptLE06bSxNTTptLHk6bSx5eTptfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNDUyMzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZp'@;
put 'bmVMb2NhbGUoImh5LWFtIix7bW9udGhzOntmb3JtYXQ6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MFx1MDU2Yl9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTgwXHUwNTdmXHUwNTZiX1x1'@;
put 'MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y1x1MDU2Yl9cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1ODVc'@;
put 'dTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RcdTA1NmJfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9c'@;
put 'dTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1'@;
put 'MDU3ZVx1MDU2MVx1MDU4MF9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTc0XHUwNTYxXHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y19cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJcdTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgy'@;
put 'XHUwNTc2XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2Ylx1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU3MFx1MDU3'@;
put 'OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwIi5zcGxpdCgiXyIpfSxtb250'@;
put 'aHNTaG9ydDoiXHUwNTcwXHUwNTc2XHUwNTdlX1x1MDU4M1x1MDU3Zlx1MDU4MF9cdTA1NzRcdTA1ODBcdTA1N2ZfXHUwNTYxXHUwNTdhXHUwNTgwX1x1MDU3NFx1MDU3NVx1MDU3ZF9cdTA1NzBcdTA1NzZcdTA1N2RfXHUwNTcwXHUwNTZjXHUwNTdkX1x1MDU4NVx1MDU2M1x1MDU3ZF9cdTA1'@;
put 'N2RcdTA1N2FcdTA1N2ZfXHUwNTcwXHUwNTZmXHUwNTdmX1x1MDU3Nlx1MDU3NFx1MDU2Ml9cdTA1NjRcdTA1NmZcdTA1N2YiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDU2Zlx1MDU2Ylx1MDU4MFx1MDU2MVx1MDU2Zlx1MDU2Yl9cdTA1NjVcdTA1ODBcdTA1NmZcdTA1NzhcdTA1ODJcdTA1'@;
put 'NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTg0XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OVx1MDU3OFx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzBcdTA1NmJcdTA1NzZcdTA1'@;
put 'NjNcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyXHUwNTYxXHUwNTY5X1x1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2MVx1MDU2OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZm'@;
put 'X1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDU2Zlx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZf'@;
put 'XHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1NzZcdTA1NjNfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyX1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5Z'@;
put 'WVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiIsTExMOiJEIE1NTU0gWVlZWSBcdTA1NjkuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDU2MVx1MDU3NVx1MDU3ZFx1MDU4NVx1MDU4MF0gTFQiLG5leHRE'@;
put 'YXk6IltcdTA1N2VcdTA1NjFcdTA1NzJcdTA1NjhdIExUIixsYXN0RGF5OiJbXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxsYXN0V2Vl'@;
put 'azpmdW5jdGlvbigpe3JldHVybiJbXHUwNTYxXHUwNTc2XHUwNTgxXHUwNTYxXHUwNTZlXSBkZGRkIFtcdTA1ODVcdTA1ODBcdTA1NjggXHUwNTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDU3MFx1MDU2NVx1MDU3'@;
put 'Zlx1MDU3OCIscGFzdDoiJXMgXHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdiIixzOiJcdTA1NzRcdTA1NmIgXHUwNTg0XHUwNTYxXHUwNTc2XHUwNTZiIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsc3M6IiVkIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4'@;
put 'MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsbToiXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixtbToiJWQgXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixoOiJcdTA1NmFcdTA1NjFcdTA1NzQiLGhoOiIlZCBcdTA1NmFcdTA1NjFcdTA1NzQiLGQ6Ilx1MDU4NVx1MDU4MCIsZGQ6IiVkIFx1'@;
put 'MDU4NVx1MDU4MCIsTToiXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIixNTToiJWQgXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIix5OiJcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIiLHl5OiIlZCBcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIifSxtZXJpZGllbVBhcnNlOi9cdTA1NjNcdTA1NmJc'@;
put 'dTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjF8XHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdlXHUwNTc4XHUwNTdmXHUwNTdlXHUwNTYxfFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFc'@;
put 'dTA1NzYvLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuL14oXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxfFx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NikkLy50ZXN0KG0pfSxtZXJpZGllbTpmdW5jdGlvbihtKXtyZXR1cm4g'@;
put 'bTw0PyJcdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjEiOm08MTI/Ilx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MSI6bTwxNz8iXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxIjoiXHUwNTY1XHUw'@;
put 'NTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfXxcZHsxLDJ9LShcdTA1NmJcdTA1NzZ8XHUwNTgwXHUwNTY0KS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2Nhc2UiREREIjpjYXNlInciOmNh'@;
put 'c2UiVyI6Y2FzZSJERERvIjpyZXR1cm4gMT09PW0/bSsiLVx1MDU2Ylx1MDU3NiI6bSsiLVx1MDU4MFx1MDU2NCI7ZGVmYXVsdDpyZXR1cm4gbX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDk5MjMzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJp'@;
put 'Y3QiO2FlLmRlZmluZUxvY2FsZSgiaWQiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVp'@;
put 'X0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVr'@;
put 'ZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1N'@;
put 'TSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwicGFnaSI9PT1sZT9tOiJzaWFuZyI9PT1sZT9tPj0xMT9tOm0rMTI6InNvcmUiPT09bGV8fCJt'@;
put 'YWxhbSI9PT1sZT9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMT8icGFnaSI6bTwxNT8ic2lhbmciOm08MTk/InNvcmUiOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbQmVzb2sgcHVrdWxd'@;
put 'IExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsYWx1IHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGFsdSIsczoiYmVi'@;
put 'ZXJhcGEgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2VtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MCxk'@;
put 'b3k6Nn19KX0oRigxNjY3NikpfSw5NDY5MzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KE0pe3JldHVybiBNJTEwMD09MTF8fE0lMTAhPTF9ZnVuY3Rpb24gbShNLE8sUix6KXt2YXIgSz1NKyIgIjtzd2l0Y2goUil7Y2FzZSJzIjpyZXR1'@;
put 'cm4gT3x8ej8ibm9ra3JhciBzZWtceGZhbmR1ciI6Im5va2tydW0gc2VrXHhmYW5kdW0iO2Nhc2Uic3MiOnJldHVybiB4KE0pP0srKE98fHo/InNla1x4ZmFuZHVyIjoic2VrXHhmYW5kdW0iKTpLKyJzZWtceGZhbmRhIjtjYXNlIm0iOnJldHVybiBPPyJtXHhlZG5ceGZhdGEiOiJtXHhlZG5c'@;
put 'eGZhdHUiO2Nhc2UibW0iOnJldHVybiB4KE0pP0srKE98fHo/Im1ceGVkblx4ZmF0dXIiOiJtXHhlZG5ceGZhdHVtIik6Tz9LKyJtXHhlZG5ceGZhdGEiOksrIm1ceGVkblx4ZmF0dSI7Y2FzZSJoaCI6cmV0dXJuIHgoTSk/SysoT3x8ej8ia2x1a2t1c3R1bmRpciI6ImtsdWtrdXN0dW5kdW0i'@;
put 'KTpLKyJrbHVra3VzdHVuZCI7Y2FzZSJkIjpyZXR1cm4gTz8iZGFndXIiOno/ImRhZyI6ImRlZ2kiO2Nhc2UiZGQiOnJldHVybiB4KE0pP08/SysiZGFnYXIiOksrKHo/ImRhZ2EiOiJkXHhmNmd1bSIpOk8/SysiZGFndXIiOksrKHo/ImRhZyI6ImRlZ2kiKTtjYXNlIk0iOnJldHVybiBPPyJt'@;
put 'XHhlMW51XHhmMHVyIjp6PyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSI7Y2FzZSJNTSI6cmV0dXJuIHgoTSk/Tz9LKyJtXHhlMW51XHhmMGlyIjpLKyh6PyJtXHhlMW51XHhmMGkiOiJtXHhlMW51XHhmMHVtIik6Tz9LKyJtXHhlMW51XHhmMHVyIjpLKyh6PyJtXHhlMW51XHhmMCI6Im1c'@;
put 'eGUxbnVceGYwaSIpO2Nhc2UieSI6cmV0dXJuIE98fHo/Ilx4ZTFyIjoiXHhlMXJpIjtjYXNlInl5IjpyZXR1cm4geChNKT9LKyhPfHx6PyJceGUxciI6Ilx4ZTFydW0iKTpLKyhPfHx6PyJceGUxciI6Ilx4ZTFyaSIpfX1hZS5kZWZpbmVMb2NhbGUoImlzIix7bW9udGhzOiJqYW5ceGZhYXJf'@;
put 'ZmViclx4ZmFhcl9tYXJzX2Fwclx4ZWRsX21hXHhlZF9qXHhmYW5ceGVkX2pceGZhbFx4ZWRfXHhlMWdceGZhc3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfblx4ZjN2ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYVx4ZWRfalx4ZmFuX2pc'@;
put 'eGZhbF9ceGUxZ1x4ZmFfc2VwX29rdF9uXHhmM3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbnVkYWd1cl9ceGZlcmlceGYwanVkYWd1cl9taVx4ZjB2aWt1ZGFndXJfZmltbXR1ZGFndXJfZlx4ZjZzdHVkYWd1cl9sYXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3'@;
put 'ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX1x4ZmVyaV9taVx4ZjBfZmltX2ZceGY2c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01ceGUxX1x4ZGVyX01pX0ZpX0ZceGY2X0xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJE'@;
put 'RC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhlZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4ZTEgbW9yZ3VuIGtsLl0gTFQi'@;
put 'LG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhlZCBnXHhlNnIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBhc3RhXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAlcyIscGFzdDoiZnlyaXIgJXMgc1x4ZWRc'@;
put 'eGYwYW4iLHM6bSxzczptLG0sbW06bSxoOiJrbHVra3VzdHVuZCIsaGg6bSxkOm0sZGQ6bSxNOm0sTU06bSx5Om0seXk6bX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDc4MTE4OmZ1bmN0'@;
put 'aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaXQtY2giLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJy'@;
put 'ZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2Fi'@;
put 'YXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQu'@;
put 'TU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPZ2dpIGFsbGVdIExUIixuZXh0RGF5OiJbRG9tYW5pIGFsbGVdIExUIixuZXh0V2VlazoiZGRkZCBbYWxsZV0g'@;
put 'TFQiLGxhc3REYXk6IltJZXJpIGFsbGVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQiOiJbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6'@;
put 'ZnVuY3Rpb24obSl7cmV0dXJuKC9eWzAtOV0uKyQvLnRlc3QobSk/InRyYSI6ImluIikrIiAiK219LHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixkOiJ1biBn'@;
put 'aW9ybm8iLGRkOiIlZCBnaW9ybmkiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDYzOTM2'@;
put 'OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaXQiLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNl'@;
put 'bWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNf'@;
put 'c2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi'@;
put 'REQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW09nZ2kgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3Vy'@;
put 'cygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0RvbWFuaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSIrKHRoaXMuaG91cnMo'@;
put 'KT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0llcmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IDA9PT10aGlzLmRheSgpPyJbTGEgc2NvcnNhXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIjoiW0xvIHNjb3Jzb10gZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwn'@;
put 'IikrIl1MVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InRyYSAlcyIscGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3Ju'@;
put 'byIsZGQ6IiVkIGdpb3JuaSIsdzoidW5hIHNldHRpbWFuYSIsd3c6IiVkIHNldHRpbWFuZSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7'@;
put 'ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sODY4NzE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJqYSIse2VyYXM6W3tzaW5jZToiMjAxOS0wNS0wMSIsb2Zmc2V0OjEsbmFtZToiXHU0ZWU0XHU1NDhjIixuYXJyb3c6Ilx1'@;
put 'MzJmZiIsYWJicjoiUiJ9LHtzaW5jZToiMTk4OS0wMS0wOCIsdW50aWw6IjIwMTktMDQtMzAiLG9mZnNldDoxLG5hbWU6Ilx1NWU3M1x1NjIxMCIsbmFycm93OiJcdTMzN2IiLGFiYnI6IkgifSx7c2luY2U6IjE5MjYtMTItMjUiLHVudGlsOiIxOTg5LTAxLTA3IixvZmZzZXQ6MSxuYW1lOiJc'@;
put 'dTY2MmRcdTU0OGMiLG5hcnJvdzoiXHUzMzdjIixhYmJyOiJTIn0se3NpbmNlOiIxOTEyLTA3LTMwIix1bnRpbDoiMTkyNi0xMi0yNCIsb2Zmc2V0OjEsbmFtZToiXHU1OTI3XHU2YjYzIixuYXJyb3c6Ilx1MzM3ZCIsYWJicjoiVCJ9LHtzaW5jZToiMTg3My0wMS0wMSIsdW50aWw6IjE5MTIt'@;
put 'MDctMjkiLG9mZnNldDo2LG5hbWU6Ilx1NjYwZVx1NmNiYiIsbmFycm93OiJcdTMzN2UiLGFiYnI6Ik0ifSx7c2luY2U6IjAwMDEtMDEtMDEiLHVudGlsOiIxODczLTEyLTMxIixvZmZzZXQ6MSxuYW1lOiJcdTg5N2ZcdTY2YTYiLG5hcnJvdzoiQUQiLGFiYnI6IkFEIn0se3NpbmNlOiIwMDAw'@;
put 'LTEyLTMxIix1bnRpbDotMS8wLG9mZnNldDoxLG5hbWU6Ilx1N2QwMFx1NTE0M1x1NTI0ZCIsbmFycm93OiJCQyIsYWJicjoiQkMifV0sZXJhWWVhck9yZGluYWxSZWdleDovKFx1NTE0M3xcZCspXHU1ZTc0LyxlcmFZZWFyT3JkaW5hbFBhcnNlOmZ1bmN0aW9uKG0sbGUpe3JldHVybiJcdTUx'@;
put 'NDMiPT09bGVbMV0/MTpwYXJzZUludChsZVsxXXx8bSwxMCl9LG1vbnRoczoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hv'@;
put 'cnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY1ZTVcdTY2ZGNcdTY1ZTVfXHU2NzA4XHU2NmRjXHU2NWU1X1x1'@;
put 'NzA2Ylx1NjZkY1x1NjVlNV9cdTZjMzRcdTY2ZGNcdTY1ZTVfXHU2NzI4XHU2NmRjXHU2NWU1X1x1OTFkMVx1NjZkY1x1NjVlNV9cdTU3MWZcdTY2ZGNcdTY1ZTUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU2NWU1X1x1NjcwOF9cdTcwNmJfXHU2YzM0X1x1NjcyOF9cdTkxZDFfXHU1'@;
put 'NzFmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2'@;
put 'NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBkZGRkIEhIOm1tIixsOiJZWVlZL01NL0REIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVl'@;
put 'NSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1KGRkZCkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUzNDhcdTUyNGR8XHU1MzQ4XHU1ZjhjL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4iXHU1MzQ4XHU1ZjhjIj09PW19LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7'@;
put 'cmV0dXJuIG08MTI/Ilx1NTM0OFx1NTI0ZCI6Ilx1NTM0OFx1NWY4YyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU2NWU1XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NjVlNV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKG0pe3JldHVybiBtLndlZWsoKSE9PXRoaXMud2VlaygpPyJbXHU2'@;
put 'NzY1XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sbGFzdERheToiW1x1NjYyOFx1NjVlNV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLndlZWsoKSE9PW0ud2VlaygpPyJbXHU1MTQ4XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1v'@;
put 'bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHU2NWU1LyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7Y2FzZSJ5IjpyZXR1cm4gMT09PW0/Ilx1NTE0M1x1NWU3NCI6bSsiXHU1ZTc0IjtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBtKyJcdTY1ZTUiO2RlZmF1bHQ6'@;
put 'cmV0dXJuIG19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTY1NzBcdTc5ZDIiLHNzOiIlZFx1NzlkMiIsbToiMVx1NTIwNiIsbW06IiVkXHU1MjA2IixoOiIxXHU2NjQyXHU5NTkzIixoaDoiJWRcdTY2NDJcdTk1OTMiLGQ6IjFcdTY1ZTUi'@;
put 'LGRkOiIlZFx1NjVlNSIsTToiMVx1MzBmNlx1NjcwOCIsTU06IiVkXHUzMGY2XHU2NzA4Iix5OiIxXHU1ZTc0Iix5eToiJWRcdTVlNzQifX0pfShGKDE2Njc2KSl9LDY4NzEwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgianYi'@;
put 'LHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWdzX1NlcF9Pa3RfTm9w'@;
put 'X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmVuX1NlbG9zb19SZWJ1X0tlbWlzX0plbXV3YWhfU2VwdHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmViX0tlbV9KZW1fU2VwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9L'@;
put 'bV9KbV9TcCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9'@;
put 'LG1lcmlkaWVtUGFyc2U6L2VuamluZ3xzaXlhbmd8c29udGVufG5kYWx1LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksImVuamluZyI9PT1sZT9tOiJzaXlhbmciPT09bGU/bT49MTE/bTptKzEyOiJzb250ZW4iPT09bGV8fCJuZGFsdSI9PT1sZT9t'@;
put 'KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMT8iZW5qaW5nIjptPDE1PyJzaXlhbmciOm08MTk/InNvbnRlbiI6Im5kYWx1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVCIsbmV4dERheToiW01iZW5qYW5nIHB1a3Vs'@;
put 'XSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0thbGEgd2luZ2kgcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBba2VwZW5na2VyIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToid29udGVuIGluZyAlcyIscGFzdDoiJXMgaW5n'@;
put 'a2FuZyBrZXBlbmdrZXIiLHM6InNhd2V0YXdpcyBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZXR1bmdnYWwgbWVuaXQiLG1tOiIlZCBtZW5pdCIsaDoic2V0dW5nZ2FsIGphbSIsaGg6IiVkIGphbSIsZDoic2VkaW50ZW4iLGRkOiIlZCBkaW50ZW4iLE06InNld3VsYW4iLE1NOiIlZCB3dWxh'@;
put 'biIseToic2V0YXVuIix5eToiJWQgdGF1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDE3MTI1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgia2EiLHttb250aHM6Ilx1MTBkOFx1MTBkMFx1MTBkY1x1MTBk'@;
put 'NVx1MTBkMFx1MTBlMFx1MTBkOF9cdTEwZDdcdTEwZDRcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDVcdTEwZDBcdTEwZGFcdTEwZDhfXHUxMGRiXHUxMGQwXHUxMGUwXHUxMGUyXHUxMGQ4X1x1MTBkMFx1MTBkZVx1MTBlMFx1MTBkOFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZDhcdTEw'@;
put 'ZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkYVx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDBcdTEwZDJcdTEwZDVcdTEwZDhcdTEwZTFcdTEwZTJcdTEwZGRfXHUxMGUxXHUxMGQ0XHUxMGU1XHUxMGUyXHUxMGQ0XHUxMGRiXHUx'@;
put 'MGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkZFx1MTBlNVx1MTBlMlx1MTBkZFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZGNcdTEwZGRcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGQzXHUxMGQ0XHUxMGQ5XHUxMGQ0XHUxMGRiXHUxMGQxXHUx'@;
put 'MGQ0XHUxMGUwXHUxMGQ4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwZDhcdTEwZDBcdTEwZGNfXHUxMGQ3XHUxMGQ0XHUxMGQxX1x1MTBkYlx1MTBkMFx1MTBlMF9cdTEwZDBcdTEwZGVcdTEwZTBfXHUxMGRiXHUxMGQwXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkY19cdTEwZDhcdTEw'@;
put 'ZDVcdTEwZGFfXHUxMGQwXHUxMGQyXHUxMGQ1X1x1MTBlMVx1MTBkNFx1MTBlNV9cdTEwZGRcdTEwZTVcdTEwZTJfXHUxMGRjXHUxMGRkXHUxMGQ0X1x1MTBkM1x1MTBkNFx1MTBkOSIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7c3RhbmRhbG9uZToiXHUxMGQ5XHUxMGQ1XHUxMGQ4XHUxMGUwXHUx'@;
put 'MGQwX1x1MTBkZFx1MTBlMFx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZTFcdTEwZDBcdTEwZGJcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGRkXHUxMGQ3XHUxMGVlXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1'@;
put 'MTBlZVx1MTBlM1x1MTBkN1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGVcdTEwZDBcdTEwZTBcdTEwZDBcdTEwZTFcdTEwZDlcdTEwZDRcdTEwZDVcdTEwZDhfXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4Ii5zcGxpdCgiXyIpLGZvcm1hdDoi'@;
put 'XHUxMGQ5XHUxMGQ1XHUxMGQ4XHUxMGUwXHUxMGQwXHUxMGUxX1x1MTBkZFx1MTBlMFx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZTFcdTEwZDBcdTEwZGJcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGRkXHUxMGQ3XHUxMGVlXHUxMGU4'@;
put 'XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlZVx1MTBlM1x1MTBkN1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGVcdTEwZDBcdTEwZTBcdTEwZDBcdTEwZTFcdTEwZDlcdTEwZDRcdTEwZDVcdTEwZTFfXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQw'@;
put 'XHUxMGQ3XHUxMGUxIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi8oXHUxMGVjXHUxMGQ4XHUxMGRjXHUxMGQwfFx1MTBlOFx1MTBkNFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkMikvfSx3ZWVrZGF5c1Nob3J0OiJcdTEwZDlcdTEwZDVcdTEwZDhfXHUxMGRkXHUxMGUwXHUxMGU4X1x1MTBlMVx1MTBk'@;
put 'MFx1MTBkYl9cdTEwZGRcdTEwZDdcdTEwZWVfXHUxMGVlXHUxMGUzXHUxMGQ3X1x1MTBkZVx1MTBkMFx1MTBlMF9cdTEwZThcdTEwZDBcdTEwZDEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTBkOVx1MTBkNV9cdTEwZGRcdTEwZTBfXHUxMGUxXHUxMGQwX1x1MTBkZFx1MTBkN19cdTEw'@;
put 'ZWVcdTEwZTNfXHUxMGRlXHUxMGQwX1x1MTBlOFx1MTBkMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZ'@;
put 'WVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTEwZDNcdTEwZTZcdTEwZDRcdTEwZTFdIExUWy1cdTEwZDZcdTEwZDRdIixuZXh0RGF5OiJbXHUxMGVlXHUxMGQ1XHUxMGQwXHUxMGRhXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbGFzdERheToiW1x1MTBkMlx1MTBlM1x1MTBlOFx1MTBk'@;
put 'OFx1MTBkY10gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHRXZWVrOiJbXHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyXSBkZGRkIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0V2VlazoiW1x1MTBlY1x1MTBkOFx1MTBkY1x1MTBkMF0gZGRkZCBMVC1cdTEwZDZcdTEwZDQiLHNhbWVF'@;
put 'bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVwbGFjZSgvKFx1MTBlY1x1MTBkMFx1MTBkYnxcdTEwZWNcdTEwZTNcdTEwZDd8XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3fFx1MTBlY1x1MTBkNFx1MTBkYXxcdTEwZDNcdTEwZTZ8XHUxMGQ3XHUx'@;
put 'MGQ1KShcdTEwZDh8XHUxMGQ0KS8sZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4iXHUxMGQ4Ij09PU8/TSsiXHUxMGU4XHUxMGQ4IjpNK08rIlx1MTBlOFx1MTBkOCJ9KX0scGFzdDpmdW5jdGlvbihtKXtyZXR1cm4vKFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOHxcdTEwZWNcdTEwZTNcdTEwZDdc'@;
put 'dTEwZDh8XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4fFx1MTBkM1x1MTBlNlx1MTBkNHxcdTEwZDdcdTEwZDVcdTEwZDQpLy50ZXN0KG0pP20ucmVwbGFjZSgvKFx1MTBkOHxcdTEwZDQpJC8sIlx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTovXHUxMGVjXHUxMGQ0XHUx'@;
put 'MGRhXHUxMGQ4Ly50ZXN0KG0pP20ucmVwbGFjZSgvXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4JC8sIlx1MTBlY1x1MTBkYVx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTptfSxzOiJcdTEwZTBcdTEwZDBcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZGNcdTEwZDhcdTEwZGJcdTEwZDQg'@;
put 'XHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4IixzczoiJWQgXHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4IixtOiJcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLG1tOiIlZCBcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLGg6Ilx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsaGg6IiVkIFx1'@;
put 'MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsZDoiXHUxMGQzXHUxMGU2XHUxMGQ0IixkZDoiJWQgXHUxMGQzXHUxMGU2XHUxMGQ0IixNOiJcdTEwZDdcdTEwZDVcdTEwZDQiLE1NOiIlZCBcdTEwZDdcdTEwZDVcdTEwZDQiLHk6Ilx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCIseXk6IiVk'@;
put 'IFx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6LzB8MS1cdTEwZGFcdTEwZDh8XHUxMGRiXHUxMGQ0LVxkezEsMn18XGR7MSwyfS1cdTEwZDQvLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIDA9PT1tP206MT09PW0/bSsiLVx1MTBkYVx1MTBkOCI6'@;
put 'bTwyMHx8bTw9MTAwJiZtJTIwPT0wfHxtJTEwMD09MD8iXHUxMGRiXHUxMGQ0LSIrbTptKyItXHUxMGQ0In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sODI0NjE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezA6Ii1cdTA0NDhc'@;
put 'dTA0NTYiLDE6Ii1cdTA0NDhcdTA0NTYiLDI6Ii1cdTA0NDhcdTA0NTYiLDM6Ii1cdTA0NDhcdTA0NTYiLDQ6Ii1cdTA0NDhcdTA0NTYiLDU6Ii1cdTA0NDhcdTA0NTYiLDY6Ii1cdTA0NDhcdTA0NGIiLDc6Ii1cdTA0NDhcdTA0NTYiLDg6Ii1cdTA0NDhcdTA0NTYiLDk6Ii1cdTA0NDhcdTA0'@;
put 'NGIiLDEwOiItXHUwNDQ4XHUwNDRiIiwyMDoiLVx1MDQ0OFx1MDQ0YiIsMzA6Ii1cdTA0NDhcdTA0NGIiLDQwOiItXHUwNDQ4XHUwNDRiIiw1MDoiLVx1MDQ0OFx1MDQ1NiIsNjA6Ii1cdTA0NDhcdTA0NGIiLDcwOiItXHUwNDQ4XHUwNDU2Iiw4MDoiLVx1MDQ0OFx1MDQ1NiIsOTA6Ii1cdTA0'@;
put 'NDhcdTA0NGIiLDEwMDoiLVx1MDQ0OFx1MDQ1NiJ9O2FlLmRlZmluZUxvY2FsZSgia2siLHttb250aHM6Ilx1MDQ5Ylx1MDQzMFx1MDRhM1x1MDQ0Mlx1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0OWJcdTA0M2ZcdTA0MzBcdTA0M2RfXHUwNDNkXHUwNDMwXHUwNDQzXHUwNDQwXHUwNDRiXHUwNDM3'@;
put 'X1x1MDQ0MVx1MDRkOVx1MDQ0M1x1MDQ1Nlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0M2NcdTA0NGJcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQzXHUwNDQxXHUwNDRiXHUwNDNjX1x1MDQ0OFx1MDQ1Nlx1MDQzYlx1MDQzNFx1MDQzNV9cdTA0NDJcdTA0MzBcdTA0M2NcdTA0NGJcdTA0MzdfXHUw'@;
put 'NDliXHUwNDRiXHUwNDQwXHUwNDNhXHUwNGFmXHUwNDM5XHUwNDM1XHUwNDNhX1x1MDQ5Ylx1MDQzMFx1MDQzN1x1MDQzMFx1MDQzZF9cdTA0OWJcdTA0MzBcdTA0NDBcdTA0MzBcdTA0NDhcdTA0MzBfXHUwNDM2XHUwNDM1XHUwNDNiXHUwNDQyXHUwNDNlXHUwNDliXHUwNDQxXHUwNDMwXHUw'@;
put 'NDNkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0OWJcdTA0MzBcdTA0YTNfXHUwNDMwXHUwNDliXHUwNDNmX1x1MDQzZFx1MDQzMFx1MDQ0M19cdTA0NDFcdTA0ZDlcdTA0NDNfXHUwNDNjXHUwNDMwXHUwNDNjX1x1MDQzY1x1MDQzMFx1MDQ0M19cdTA0NDhcdTA0NTZcdTA0M2JfXHUw'@;
put 'NDQyXHUwNDMwXHUwNDNjX1x1MDQ5Ylx1MDQ0Ylx1MDQ0MF9cdTA0OWJcdTA0MzBcdTA0MzdfXHUwNDliXHUwNDMwXHUwNDQwX1x1MDQzNlx1MDQzNVx1MDQzYiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDM2XHUwNDM1XHUwNDNhXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1'@;
put 'MDQzNFx1MDRhZlx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0NDFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNGQ5XHUwNDQwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzMVx1MDQzNVx1MDQzOVx1'@;
put 'MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzZcdTA0YjFcdTA0M2NcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzNlx1MDQzNVx1MDQzYV9cdTA0MzRcdTA0YWZcdTA0MzlfXHUwNDQxXHUwNDM1XHUw'@;
put 'NDM5X1x1MDQ0MVx1MDRkOVx1MDQ0MF9cdTA0MzFcdTA0MzVcdTA0MzlfXHUwNDM2XHUwNGIxXHUwNDNjX1x1MDQ0MVx1MDQzNVx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDM2XHUwNDNhX1x1MDQzNFx1MDQzOV9cdTA0NDFcdTA0MzlfXHUwNDQxXHUwNDQwX1x1MDQzMVx1'@;
put 'MDQzOV9cdTA0MzZcdTA0M2NfXHUwNDQxXHUwNDNkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkg'@;
put 'SEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDQ1Nlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDE1XHUwNDQwXHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0'@;
put 'Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ4XHUwNDM1IFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNDM1'@;
put 'XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDRhM10gZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDU2XHUwNDQ4XHUwNDU2XHUwNDNkXHUwNDM0XHUw'@;
put 'NDM1IixwYXN0OiIlcyBcdTA0MzFcdTA0YjFcdTA0NDBcdTA0NGJcdTA0M2QiLHM6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0'@;
put 'M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGg6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGhoOiIlZCBc'@;
put 'dTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQz'@;
put 'MVx1MDQ1Nlx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDhcdTA0NTZ8XHUwNDQ4XHUwNDRiKS8sb3JkaW5hbDpmdW5jdGlvbihsZSl7cmV0dXJuIGxlKyh4W2xlXXx8eFts'@;
put 'ZSUxMF18fHhbbGU+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw3NzM5OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUxN2UxIiwyOiJcdTE3ZTIiLDM6Ilx1MTdlMyIsNDoiXHUxN2U0Iiw1'@;
put 'OiJcdTE3ZTUiLDY6Ilx1MTdlNiIsNzoiXHUxN2U3Iiw4OiJcdTE3ZTgiLDk6Ilx1MTdlOSIsMDoiXHUxN2UwIn0sbT17Ilx1MTdlMSI6IjEiLCJcdTE3ZTIiOiIyIiwiXHUxN2UzIjoiMyIsIlx1MTdlNCI6IjQiLCJcdTE3ZTUiOiI1IiwiXHUxN2U2IjoiNiIsIlx1MTdlNyI6IjciLCJcdTE3'@;
put 'ZTgiOiI4IiwiXHUxN2U5IjoiOSIsIlx1MTdlMCI6IjAifTthZS5kZWZpbmVMb2NhbGUoImttIix7bW9udGhzOiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFc'@;
put 'dTE3OWZcdTE3YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdi'@;
put 'Nl9cdTE3OGZcdTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxNzk4XHUxNzgwXHUxNzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1'@;
put 'MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThcdTE3YjhcdTE3OTNcdTE3YjZfXHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5Zlx1MTc5N1x1MTdiNl9cdTE3OThcdTE3YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZfXHUxNzgwXHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhh'@;
put 'XHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdiNl9cdTE3ODBcdTE3ODlcdTE3ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUxN2I2X1x1MTc5Y1x1MTdiN1x1MTc4NVx1MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdiNl9cdTE3OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNw'@;
put 'bGl0KCJfIiksd2Vla2RheXM6Ilx1MTdhMlx1MTdiNlx1MTc5MVx1MTdiN1x1MTc4Zlx1MTdkMlx1MTc5OV9cdTE3ODVcdTE3ZDBcdTE3OTNcdTE3ZDJcdTE3OTFfXHUxN2EyXHUxNzg0XHUxN2QyXHUxNzgyXHUxN2I2XHUxNzlhX1x1MTc5Nlx1MTdiYlx1MTc5Ml9cdTE3OTZcdTE3ZDJcdTE3'@;
put 'OWFcdTE3YTBcdTE3OWZcdTE3ZDJcdTE3OTRcdTE3OGZcdTE3YjdcdTE3Y2RfXHUxNzlmXHUxN2JiXHUxNzgwXHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdjNVx1MTc5YVx1MTdjZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTE3YTJcdTE3YjZfXHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUx'@;
put 'Nzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6'@;
put 'ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MTc5Nlx1MTdkMlx1MTc5'@;
put 'YVx1MTdiOVx1MTc4MHxcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSI9PT1NfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08MTI/Ilx1MTc5Nlx1MTdkMlx1MTc5YVx1'@;
put 'MTdiOVx1MTc4MCI6Ilx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzXHUxNzkzXHUxN2MxXHUxN2M3IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLG5leHREYXk6IltcdTE3OWZcdTE3ZDJcdTE3'@;
put 'YTJcdTE3YzJcdTE3ODAgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3REYXk6IltcdTE3OThcdTE3ZDJcdTE3OWZcdTE3YjdcdTE3OWJcdTE3OThcdTE3YjdcdTE3ODkgXHUxNzk4XHUxN2M5XHUx'@;
put 'N2M0XHUxNzg0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MTc5Zlx1MTc5NFx1MTdkMlx1MTc4Zlx1MTdiNlx1MTdhMFx1MTdjZFx1MTc5OFx1MTdiYlx1MTc5M10gW1x1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUx'@;
put 'NzkxXHUxN2MwXHUxNzhmIixwYXN0OiIlc1x1MTc5OFx1MTdiYlx1MTc5MyIsczoiXHUxNzk0XHUxN2M5XHUxN2JiXHUxNzkzXHUxN2QyXHUxNzk4XHUxN2I2XHUxNzkzXHUxNzljXHUxN2I3XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixzczoiJWQgXHUxNzljXHUxN2I3XHUxNzkzXHUxN2I2'@;
put 'XHUxNzkxXHUxN2I4IixtOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG1tOiIlZCBcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLGg6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NCIsaGg6IiVkIFx1MTc5OFx1MTdjOVx1MTdj'@;
put 'NFx1MTc4NCIsZDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzIixkZDoiJWQgXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzIixNOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3ODFcdTE3YzIiLE1NOiIlZCBcdTE3ODFcdTE3YzIiLHk6Ilx1MTc5OFx1MTdiZFx1MTc5'@;
put 'OVx1MTc4Nlx1MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiIseXk6IiVkIFx1MTc4Nlx1MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1x1MTc5MVx1MTdiOFxkezEsMn0vLG9yZGluYWw6Ilx1MTc5MVx1MTdiOCVkIixwcmVwYXJzZTpmdW5jdGlvbihNKXty'@;
put 'ZXR1cm4gTS5yZXBsYWNlKC9bXHUxN2UxXHUxN2UyXHUxN2UzXHUxN2U0XHUxN2U1XHUxN2U2XHUxN2U3XHUxN2U4XHUxN2U5XHUxN2UwXS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihP'@;
put 'KXtyZXR1cm4geFtPXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwzODcyMDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwY2U3IiwyOiJcdTBjZTgiLDM6Ilx1MGNlOSIsNDoiXHUwY2VhIiw1OiJcdTBjZWIiLDY6'@;
put 'Ilx1MGNlYyIsNzoiXHUwY2VkIiw4OiJcdTBjZWUiLDk6Ilx1MGNlZiIsMDoiXHUwY2U2In0sbT17Ilx1MGNlNyI6IjEiLCJcdTBjZTgiOiIyIiwiXHUwY2U5IjoiMyIsIlx1MGNlYSI6IjQiLCJcdTBjZWIiOiI1IiwiXHUwY2VjIjoiNiIsIlx1MGNlZCI6IjciLCJcdTBjZWUiOiI4IiwiXHUw'@;
put 'Y2VmIjoiOSIsIlx1MGNlNiI6IjAifTthZS5kZWZpbmVMb2NhbGUoImtuIix7bW9udGhzOiJcdTBjOWNcdTBjYThcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwXHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNhZVx1MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1'@;
put 'MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNi'@;
put 'OFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2E4XHUwY2I1XHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNh'@;
put 'MVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzljXHUwY2E4X1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMF9cdTBjYWVcdTBjYmVcdTBjYjBcdTBjY2RcdTBjOWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUw'@;
put 'Y2NkXHUwY2IwXHUwY2JmXHUwY2IyXHUwY2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9cdTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1MGNiOFx1MGNjZFx1MGM5Zlx1MGNjZF9cdTBjYjhcdTBjYzZcdTBjYWFcdTBjY2Rc'@;
put 'dTBjOWZcdTBjYzZcdTBjODJfXHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhOFx1MGNiNVx1MGNjNlx1MGM4Ml9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwY2Fk'@;
put 'XHUwY2JlXHUwY2E4XHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FjXHUwY2MxXHUwY2E3XHUwY2I1XHUwY2JlXHUwY2Iw'@;
put 'X1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmXHUwY2I1XHUwY2JlXHUwY2IwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGNhZFx1'@;
put 'MGNiZVx1MGNhOFx1MGNjMV9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVfXHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzX1x1MGNhY1x1MGNjMVx1MGNhN19cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFfXHUwY2I2XHUwY2MxXHUwYzk1XHUwY2NkXHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNi'@;
put 'ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwY2FkXHUwY2JlX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNV9cdTBjYWVcdTBjODJfXHUwY2FjXHUwY2MxX1x1MGM5N1x1MGNjMV9cdTBjYjZcdTBjYzFfXHUwY2I2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixM'@;
put 'VFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGM4N1x1MGM4Mlx1MGNhNlx1MGNjMV0gTFQiLG5leHREYXk6'@;
put 'IltcdTBjYThcdTBjYmVcdTBjYjNcdTBjYzZdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBjYThcdTBjYmZcdTBjYThcdTBjY2RcdTBjYThcdTBjYzZdIExUIixsYXN0V2VlazoiW1x1MGM5NVx1MGNjNlx1MGNjMlx1MGNhOFx1MGNjNlx1MGNhZl0gZGRkZCwgTFQiLHNh'@;
put 'bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGNhOFx1MGM4Mlx1MGNhNFx1MGNiMCIscGFzdDoiJXMgXHUwY2I5XHUwY2JmXHUwYzgyXHUwY2E2XHUwY2M2IixzOiJcdTBjOTVcdTBjYzZcdTBjYjJcdTBjYjVcdTBjYzEgXHUwYzk1XHUwY2NkXHUwY2I3XHUwY2EzXHUw'@;
put 'Yzk3XHUwY2IzXHUwY2MxIixzczoiJWQgXHUwY2I4XHUwY2M2XHUwYzk1XHUwY2M2XHUwYzgyXHUwY2ExXHUwY2MxXHUwYzk3XHUwY2IzXHUwY2MxIixtOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E4XHUwY2JmXHUwY2FlXHUwY2JmXHUwY2I3IixtbToiJWQgXHUwY2E4XHUwY2Jm'@;
put 'XHUwY2FlXHUwY2JmXHUwY2I3IixoOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixoaDoiJWQgXHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixkOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E2XHUwY2JmXHUwY2E4IixkZDoiJWQgXHUw'@;
put 'Y2E2XHUwY2JmXHUwY2E4IixNOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIixNTToiJWQgXHUwY2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIix5OiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2I1XHUw'@;
put 'Y2IwXHUwY2NkXHUwY2I3Iix5eToiJWQgXHUwY2I1XHUwY2IwXHUwY2NkXHUwY2I3In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MGNlN1x1MGNlOFx1MGNlOVx1MGNlYVx1MGNlYlx1MGNlY1x1MGNlZFx1MGNlZVx1MGNlZlx1MGNlNl0vZyxmdW5jdGlvbihP'@;
put 'KXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmfFx1MGNhY1x1MGNjNlx1MGNiM1x1MGNi'@;
put 'Zlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNnxcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTh8XHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwY2IwXHUwY2JlXHUw'@;
put 'Y2E0XHUwY2NkXHUwY2IwXHUwY2JmIj09PU8/TTw0P006TSsxMjoiXHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2Ij09PU8/TToiXHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4Ij09PU8/TT49MTA/TTpNKzEyOiJc'@;
put 'dTBjYjhcdTBjODJcdTBjOWNcdTBjYzYiPT09Tz9NKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI6TTwxMD8iXHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3'@;
put 'XHUwY2M2IjpNPDE3PyJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTgiOk08MjA/Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI6Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEs'@;
put 'Mn0oXHUwY2E4XHUwY2M2XHUwY2Q1KS8sb3JkaW5hbDpmdW5jdGlvbihNKXtyZXR1cm4gTSsiXHUwY2E4XHUwY2M2XHUwY2Q1In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sODUzMDY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVm'@;
put 'aW5lTG9jYWxlKCJrbyIse21vbnRoczoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdWM2ZDRfMlx1YzZkNF8z'@;
put 'XHVjNmQ0XzRcdWM2ZDRfNVx1YzZkNF82XHVjNmQ0XzdcdWM2ZDRfOFx1YzZkNF85XHVjNmQ0XzEwXHVjNmQ0XzExXHVjNmQ0XzEyXHVjNmQ0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdWM3N2NcdWM2OTRcdWM3N2NfXHVjNmQ0XHVjNjk0XHVjNzdjX1x1ZDY1NFx1YzY5NFx1Yzc3Y19cdWMy'@;
put 'MThcdWM2OTRcdWM3N2NfXHViYWE5XHVjNjk0XHVjNzdjX1x1YWUwOFx1YzY5NFx1Yzc3Y19cdWQxYTBcdWM2OTRcdWM3N2MiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHVjNzdjX1x1YzZkNF9cdWQ2NTRfXHVjMjE4X1x1YmFhOV9cdWFlMDhfXHVkMWEwIi5zcGxpdCgiXyIpLHdlZWtk'@;
put 'YXlzTWluOiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIixMTEw6IllZ'@;
put 'WVlcdWIxNDQgTU1NTSBEXHVjNzdjIEEgaDptbSIsTExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgZGRkZCBBIGg6bW0iLGw6IllZWVkuTU0uREQuIixsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLGxsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixsbGxsOiJZWVlZ'@;
put 'XHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJcdWM2MjRcdWIyOTggTFQiLG5leHREYXk6Ilx1YjBiNFx1Yzc3YyBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6Ilx1YzViNFx1YzgxYyBMVCIsbGFzdFdlZWs6Ilx1YzljMFx1YjA5Y1x1'@;
put 'YzhmYyBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdWQ2YzQiLHBhc3Q6IiVzIFx1YzgwNCIsczoiXHViYTg3IFx1Y2QwOCIsc3M6IiVkXHVjZDA4IixtOiIxXHViZDg0IixtbToiJWRcdWJkODQiLGg6Ilx1ZDU1YyBcdWMyZGNcdWFjMDQiLGhoOiIl'@;
put 'ZFx1YzJkY1x1YWMwNCIsZDoiXHVkNTU4XHViOGU4IixkZDoiJWRcdWM3N2MiLE06Ilx1ZDU1YyBcdWIyZWMiLE1NOiIlZFx1YjJlYyIseToiXHVjNzdjIFx1YjE0NCIseXk6IiVkXHViMTQ0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdWM3N2N8XHVjNmQ0fFx1YzhmYykv'@;
put 'LG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBtKyJcdWM3N2MiO2Nhc2UiTSI6cmV0dXJuIG0rIlx1YzZkNCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBtKyJcdWM4ZmMiO2RlZmF1bHQ6cmV0dXJuIG19fSxtZXJpZGll'@;
put 'bVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybiJcdWM2MjRcdWQ2YzQiPT09bX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMj8iXHVjNjI0XHVjODA0IjoiXHVjNjI0XHVkNmM0In19KX0oRigxNjY3NikpfSw4Mjk5'@;
put 'NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0s'@;
put 'bT17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxsZT1bIlx1MDZhOVx1MDYyN1x1MDY0Nlx1MDY0OFx1'@;
put 'MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2MzRcdTA2NDhcdTA2MjhcdTA2MjdcdTA2MmEiLCJcdTA2MjZcdTA2MjdcdTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2NDZcdTA2Y2NcdTA2MzNcdTA2MjdcdTA2NDYiLCJcdTA2MjZcdTA2MjdcdTA2Y2NcdTA2'@;
put 'MjdcdTA2MzEiLCJcdTA2MmRcdTA2NDhcdTA2MzJcdTA2ZDVcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MmFcdTA2ZDVcdTA2NDVcdTA2NDVcdTA2NDhcdTA2MzIiLCJcdTA2MjZcdTA2MjdcdTA2MjgiLCJcdTA2MjZcdTA2ZDVcdTA2Y2NcdTA2NDRcdTA2NDhcdTA2NDhcdTA2NDQi'@;
put 'LCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNjQzXHUwNmQ1XHUwNjQ1IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIsIlx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0'@;
put 'OFx1MDY0Nlx1MDZjYyBcdTA2Y2NcdTA2ZDVcdTA2YTlcdTA2ZDVcdTA2NDUiXTthZS5kZWZpbmVMb2NhbGUoImt1Iix7bW9udGhzOmxlLG1vbnRoc1Nob3J0OmxlLHdlZWtkYXlzOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdc'@;
put 'dTIwMGNfXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2ODZcdTA2NDhcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNc'@;
put 'dTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJjXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY0N1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdc'@;
put 'dTIwMGMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUw'@;
put 'Njg2XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUw'@;
put 'NjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDY0N19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRE'@;
put 'L01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGN8XHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNj'@;
put 'XHUwNjI3XHUwNjQ2XHUwNmNjLyxpc1BNOmZ1bmN0aW9uKE8pe3JldHVybi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGMvLnRlc3QoTyl9LG1lcmlkaWVtOmZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gTzwxMj8iXHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3'@;
put 'XHUwNjQ2XHUwNmNjIjoiXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjZcdTA2NDdcdTIwMGNcdTA2NDVcdTA2MzFcdTA2YzYgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIs'@;
put 'bmV4dERheToiW1x1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIs'@;
put 'bGFzdERheToiW1x1MDYyZlx1MDY0OFx1MDZjZVx1MDY0Nlx1MDZjZSBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsc2FtZUVsc2U6Ikwi'@;
put 'fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQ0XHUwNjQ3XHUyMDBjICVzIixwYXN0OiIlcyIsczoiXHUwNjg2XHUwNjQ3XHUyMDBjXHUwNjQ2XHUwNjJmIFx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyIsc3M6Ilx1MDY4Nlx1MDYzMVx1'@;
put 'MDY0M1x1MDY0N1x1MjAwYyAlZCIsbToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsbW06IiVkIFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsaDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0'@;
put 'M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsaGg6IiVkIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsZDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY5NVx1MDZjNlx1MDY5OCIsZGQ6IiVkIFx1MDY5NVx1MDZjNlx1MDY5OCIs'@;
put 'TToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIseToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYzM1x1MDYyN1x1MDZiNSIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDZiNSJ9LHBy'@;
put 'ZXBhcnNlOmZ1bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUil7cmV0dXJuIG1bUl19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1'@;
put 'bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUil7cmV0dXJuIHhbUl19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sODc3OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgeD17MDoiLVx1MDQ0N1x1MDRhZiIsMToiLVx1MDQ0N1x1MDQzOCIsMjoiLVx1MDQ0N1x1MDQzOCIsMzoiLVx1MDQ0N1x1MDRhZiIsNDoiLVx1MDQ0N1x1MDRhZiIsNToiLVx1MDQ0N1x1MDQzOCIsNjoiLVx1MDQ0N1x1MDQ0YiIsNzoiLVx1MDQ0N1x1MDQzOCIsODoiLVx1MDQ0N1x1'@;
put 'MDQzOCIsOToiLVx1MDQ0N1x1MDQ0MyIsMTA6Ii1cdTA0NDdcdTA0NDMiLDIwOiItXHUwNDQ3XHUwNDRiIiwzMDoiLVx1MDQ0N1x1MDQ0MyIsNDA6Ii1cdTA0NDdcdTA0NGIiLDUwOiItXHUwNDQ3XHUwNGFmIiw2MDoiLVx1MDQ0N1x1MDQ0YiIsNzA6Ii1cdTA0NDdcdTA0MzgiLDgwOiItXHUw'@;
put 'NDQ3XHUwNDM4Iiw5MDoiLVx1MDQ0N1x1MDQ0MyIsMTAwOiItXHUwNDQ3XHUwNGFmIn07YWUuZGVmaW5lTG9jYWxlKCJreSIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRjX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Y19cdTA0'@;
put 'M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9c'@;
put 'dTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBc'@;
put 'dTA0NGMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1'@;
put 'MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MTZcdTA0MzVcdTA0M2FcdTA0NDhcdTA0MzVc'@;
put 'dTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE0XHUwNGFmXHUwNDM5XHUwNDQ4XHUwNGU5XHUwNDNjXHUwNDMxXHUwNGFmX1x1MDQyOFx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MjhcdTA0MzBcdTA0NDBcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0Mzhf'@;
put 'XHUwNDExXHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxNlx1MDQ0M1x1MDQzY1x1MDQzMF9cdTA0MThcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzgiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDE2XHUwNDM1XHUwNDNhX1x1MDQxNFx1'@;
put 'MDRhZlx1MDQzOV9cdTA0MjhcdTA0MzVcdTA0MzlfXHUwNDI4XHUwNDMwXHUwNDQwX1x1MDQxMVx1MDQzNVx1MDQzOV9cdTA0MTZcdTA0NDNcdTA0M2NfXHUwNDE4XHUwNDQ4XHUwNDM1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MTZcdTA0M2FfXHUwNDE0XHUwNDM5X1x1MDQyOFx1'@;
put 'MDQzOV9cdTA0MjhcdTA0NDBfXHUwNDExXHUwNDM5X1x1MDQxNlx1MDQzY19cdTA0MThcdTA0NDgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t'@;
put 'IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDExXHUwNGFmXHUwNDMzXHUwNGFmXHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5leHREYXk6IltcdTA0MmRcdTA0NDBcdTA0NDJcdTA0MzVcdTA0YTMgXHUwNDQxXHUw'@;
put 'NDMwXHUwNDMwXHUwNDQyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3REYXk6IltcdTA0MWFcdTA0MzVcdTA0NDdcdTA0NGRcdTA0NGQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0NDJcdTA0'@;
put 'M2FcdTA0ZTlcdTA0M2QgXHUwNDMwXHUwNDNmXHUwNDQyXHUwNDMwXHUwNDNkXHUwNDRiXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0YWZcdTA0M2RcdTA0YWZdIFtcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA0'@;
put 'MzhcdTA0NDdcdTA0MzhcdTA0M2RcdTA0MzRcdTA0MzUiLHBhc3Q6IiVzIFx1MDQzY1x1MDQ0M1x1MDQ0MFx1MDQ0M1x1MDQzZCIsczoiXHUwNDMxXHUwNDM4XHUwNDQwXHUwNDNkXHUwNDM1XHUwNDQ3XHUwNDM1IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsc3M6IiVk'@;
put 'IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzY1x1MDRhZlx1MDQzZFx1MDRlOVx1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDRhZlx1MDQzZFx1MDRlOVx1MDQ0MiIsaDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQ0MVx1MDQz'@;
put 'MFx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDRhZlx1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDRhZlx1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzMFx1MDQzOSIsTU06IiVkIFx1MDQz'@;
put 'MFx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNlx1MDQ0Ylx1MDQzYiIseXk6IiVkIFx1MDQzNlx1MDQ0Ylx1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ0N1x1MDQzOHxcdTA0NDdcdTA0NGJ8XHUwNDQ3XHUwNGFmfFx1MDQ0N1x1MDQ0Mykv'@;
put 'LG9yZGluYWw6ZnVuY3Rpb24obGUpe3JldHVybiBsZSsoeFtsZV18fHhbbGUlMTBdfHx4W2xlPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNjIwNTc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g'@;
put 'eChSLHosSyxJKXt2YXIgaz17bTpbImVuZyBNaW51dHQiLCJlbmdlciBNaW51dHQiXSxoOlsiZW5nIFN0b25uIiwiZW5nZXIgU3Rvbm4iXSxkOlsiZWVuIERhZyIsImVuZ2VtIERhZyJdLE06WyJlZSBNb3VudCIsImVuZ2VtIE1vdW50Il0seTpbImVlIEpvZXIiLCJlbmdlbSBKb2VyIl19O3Jl'@;
put 'dHVybiB6P2tbS11bMF06a1tLXVsxXX1mdW5jdGlvbiBNKFIpe2lmKFI9cGFyc2VJbnQoUiwxMCksaXNOYU4oUikpcmV0dXJuITE7aWYoUjwwKXJldHVybiEwO2lmKFI8MTApcmV0dXJuIDQ8PVImJlI8PTc7aWYoUjwxMDApe3ZhciB6PVIlMTA7cmV0dXJuIE0oMD09PXo/Ui8xMDp6KX1pZihS'@;
put 'PDFlNCl7Zm9yKDtSPj0xMDspUi89MTA7cmV0dXJuIE0oUil9cmV0dXJuIE0oUi89MWUzKX1hZS5kZWZpbmVMb2NhbGUoImxiIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNGVyel9BYnJceGVibGxfTWVlX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJf'@;
put 'RGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmVici5fTXJ6Ll9BYnIuX01lZV9KdW4uX0p1bC5fQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25uZGVnX01ceGU5aW5kZWdfRFx4ZWJuc2No'@;
put 'ZGVnX01ceGVidHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9NXHhlOS5fRFx4ZWIuX01ceGViLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTVx4ZTlfRFx4ZWJfTVx4ZWJfRG9fRnJfU2Ei'@;
put 'LnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSBbQXVlcl0iLExUUzoiSDptbTpzcyBbQXVlcl0iLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdIixMTExMOiJkZGRkLCBE'@;
put 'LiBNTU1NIFlZWVkgSDptbSBbQXVlcl0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhdXQgdW1dIExUIixzYW1lRWxzZToiTCIsbmV4dERheToiW011ZXIgdW1dIExUIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIixsYXN0RGF5OiJbR1x4ZWJzY2h0ZXIgdW1dIExUIixsYXN0V2VlazpmdW5jdGlv'@;
put 'bigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDI6Y2FzZSA0OnJldHVybiJbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW0xlc2NodGVdIGRkZGQgW3VtXSBMVCJ9fX0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24gbShSKXtyZXR1cm4gTShSLnN1YnN0cigw'@;
put 'LFIuaW5kZXhPZigiICIpKSk/ImEgIitSOiJhbiAiK1J9LHBhc3Q6ZnVuY3Rpb24gbGUoUil7cmV0dXJuIE0oUi5zdWJzdHIoMCxSLmluZGV4T2YoIiAiKSkpPyJ2aXJ1ICIrUjoidmlydW4gIitSfSxzOiJlIHB1ZXIgU2Vrb25uZW4iLHNzOiIlZCBTZWtvbm5lbiIsbTp4LG1tOiIlZCBNaW51'@;
put 'dHRlbiIsaDp4LGhoOiIlZCBTdG9ubmVuIixkOngsZGQ6IiVkIERlZWciLE06eCxNTToiJWQgTVx4ZTlpbnQiLHk6eCx5eToiJWQgSm9lciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwx'@;
put 'NzE5MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImxvIix7bW9udGhzOiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUwZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5'@;
put 'OVx1MGViMl9cdTBlYzBcdTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUwZTk0XHUwZWFhXHUwZWIwXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2RcdTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUw'@;
put 'ZWI0XHUwZTg3XHUwZWFiXHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1MGViMl9cdTBlOTVcdTBlYjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi'@;
put 'XHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1M